From 1025c293bd1221a76b74f079f2359138da8a4d24 Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 15:18:44 -0600 Subject: [PATCH 001/119] docs: plan upscaling and frame generation around the game's own TAAU Several open requests ask for DLSS, FSR and a proper upscaling technique (#744, #691, #687, #672), and two report the current frame generation (#755, #639). #577 is adding FSR 4 Native AA on the finished image. Before more of it is written, this writes down where a temporal upscaler belongs in this renderer and in what order the pieces can land. The finding that decides it: OoT evaluates its own neural TAAU network (program fd029a317a9a4b94), which `taau_stand_in` in gpu/vk/vk_draw.cpp already recognizes and substitutes, because the translated network loses the blue channel. The game therefore already renders the 3D at a reduced internal resolution and resolves it temporally. A vendor upscaler takes that dispatch's place, with the existing stand-in as its fallback; the composited window image, where `upscale` and the frame interpolator work, has no depth, no motion and a HUD in its history. The document states the input contract such a backend must check before it runs, keeps the replay rules of design.md section 4, sets out six single-topic pull requests starting with a trace switch rather than a backend, and records what each vendor runtime permits: FidelityFX sources are MIT and need no user runtime, the Streamline headers are MIT but its libraries may never be committed or bundled, and Linux has no Streamline build so it needs NGX directly. It also says plainly that Ray Reconstruction is not implementable here: it needs albedo, normal, roughness and specular-hit-distance guides, and a search of gpu/ finds no such target in a rasterized game's replayed command stream. Docs only; no code or behaviour changes. `python -I -B tests/run_all.py` unaffected. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- docs/upscaling.md | 107 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 docs/upscaling.md diff --git a/docs/upscaling.md b/docs/upscaling.md new file mode 100644 index 000000000..9e0da4a6a --- /dev/null +++ b/docs/upscaling.md @@ -0,0 +1,107 @@ +# Upscaling and frame generation + +This is a plan, not a description of what the renderer does today. It names the integration point, +the input contract, the licensing rules each vendor runtime imposes, and the order the work can land +in. Nothing here is implemented yet; each section below is one pull request. + +## What exists today + +| | Where | What it is | +|---|---|---| +| `resolution` | `gpu/vk/vk_menu.h`, `nx2/oot_patches.py` | The 3D scale: Auto (the game's dynamic resolution), or 100/75/67/50% of full | +| `upscale` | `gpu/vk/vk_menu.h`, `framegen_scale` | A spatial filter on the finished window image: off, Catmull-Rom, Lanczos | +| Frame generation | `gpu/vk/vk_framegen.cpp` | Image-space interpolation: quarter-size luma, 16x16 block matching within +-32 px, a 3x3 median, then a forward/backward blend per made frame | +| The game's own upscaler | `taau_stand_in`, `gpu/vk/vk_draw.cpp` | OoT evaluates a neural TAAU network (program `fd029a317a9a4b94`). Its translation loses the blue channel and casts the scene yellow, so a compute stand-in (`shaders/taau_upscale.comp`) runs instead. `RX_VK_TAAU_KEYS=-` runs the real network | + +Two consequences follow from that table, and they decide the whole design. + +**The game already upscales temporally.** It renders the 3D at a dynamic internal resolution and +resolves it with its own network. A vendor upscaler does not need a new low-resolution path invented +for it; it needs to take that network's place. + +**The finished window image is the wrong place.** `upscale` and the frame interpolator both work on +the composited frame, after the HUD. A temporal upscaler there has no depth, no motion and a HUD +baked into its history. That is why the existing interpolator block-matches: it has nothing better to +work from. + +## The integration point + +`taau_stand_in()` in `gpu/vk/vk_draw.cpp` already recognizes the network's dispatch by program key +and substitutes its own resolve. A vendor upscaler replaces the same dispatch, under the same +recognition, and falls back to the existing stand-in whenever it cannot run. That keeps one code path +for "the network did not run as itself" instead of two. + +The replay rules in [design notes, section 4](design.md#4-the-lessons-from-mkw-as-rules-here) apply +unchanged. In particular the inputs are read from the submitted dispatch's own descriptors during +ordered replay, never from live guest memory. + +## The input contract + +A temporal upscaler needs the network's own inputs, and it must only run when they are all present and +of the expected shape: + +- low-resolution color, HDR, matching the output's format +- motion, two channels, normalized toward the previous frame, in render pixels +- depth, reversed, at the render extent +- a fresh jitter sample for this frame, in render pixels + +and it must reset its history on a resolution change, on first use, and after a gap longer than about +250 ms (a pause, a menu, a load). A camera cut is a separate reset that this game does not hand us +directly. + +Where any of that does not hold, the native dispatch or the stand-in stays. An upscaler that runs on +inputs it has guessed produces ghosting that looks like a renderer bug and is reported as one. + +> The same contract, derived for a different Switch 2 title in a sibling GPL-3.0 project, is written up +> in Eglantine's `docs/native-dlss-replacement.md`. The formats there (B10G11R11 color, R16G16 motion, +> D32 depth) are that game's, not necessarily this one's: the shapes have to be read off OoT's own +> dispatch before anything is wired to them. + +## Order of work + +Each row is one pull request, and each one is useful on its own. + +| # | Change | Why it is first | +|---|---|---| +| 1 | Log the TAAU dispatch's descriptors and jitter behind `RX_VK_UPSCALE_TRACE=1` | Nothing can be built until the contract above is read off the real dispatch rather than assumed | +| 2 | A vendor-neutral upscaler seam at `taau_stand_in`, with the stand-in as its only backend | No behavior change, and it is the review that decides the shape | +| 3 | FSR 3.1 temporal upscaling as the first backend | MIT sources, no external runtime, works on every vendor, so it is the backend that can be the default | +| 4 | DLSS Super Resolution: Streamline on Windows, NGX on Linux | Needs a user-supplied runtime, so it comes after a working fallback exists | +| 5 | Presets, quality modes and DLAA in the Insert menu and `hookshot_options.ini` | Settings for backends that exist, rather than settings-first | +| 6 | Frame generation from real motion and depth | Replaces the block matcher's guess where the inputs are available | + +## What each vendor runtime allows + +**FSR.** AMD's FidelityFX sources are MIT. They can be vendored under `third_party/` with a +`PROVENANCE.md`, unmodified, and need no runtime from the user. FSR 4's newer models arrive through +AMD's own runtime library on Windows; the SDK path works everywhere. + +**DLSS.** The Streamline headers are MIT and can be vendored the same way. **The runtime libraries are +not**, must not be committed, and must not be bundled in a release. The user supplies them, or the +build fetches them only after the user has accepted NVIDIA's license. Streamline has no Linux build, +so Linux uses NGX directly — `libnvidia-ngx.so` ships with the NVIDIA driver, and the model library +sits beside the binary. The same two backends therefore need two loaders behind one interface. + +Neither backend may be a build requirement: a tree with no SDK present builds, and a machine with no +runtime present runs, with the stand-in. + +## Ray Reconstruction + +Ray Reconstruction (DLSS's denoising upscaler) is **not** on the list above, and should not be +promised for this game. It replaces a ray-traced renderer's denoiser, and it needs guide buffers — +albedo, normals, roughness, specular hit distance — that only a ray-traced or G-buffer pipeline +produces. OoT's Switch 2 build is rasterized, and nothing in the replayed command stream identifies +such targets: a search of `gpu/` finds no normal, albedo or roughness target anywhere. Turning it on +with color, motion and depth alone would give a different upscaling network, not denoising, and would +be a worse-documented version of row 4. + +If the intent is "the newest DLSS quality", that is the transformer presets in row 5, on top of +Super Resolution in row 4. + +## Frame generation, honestly + +The existing interpolator shows made frames about one frame behind the game, and skips interpolation +across hitches over 100 ms. Real motion and depth improve what it makes, but they do not change +either property. DLSS frame generation is a Streamline feature and so would be Windows-only; FSR's +frame interpolation is available on both. Neither removes the latency a frame-interpolating renderer +has by construction, and #755 should be read before any of it is wired to the Insert menu. From d9566a137825a3733ce0104227142f6472a20eac Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 15:30:32 -0600 Subject: [PATCH 002/119] feat: name each network binding's role in the upscaler input contract The log that reports a game network once per key (vk_draw.cpp) listed its sampled textures as extents and format numbers, leaving the reader to work out by hand which one a temporal upscaler would take for colour, motion and depth. Before an upscaler can be given that dispatch (docs/upscaling.md), the contract has to be read off the real thing, so this makes the log say it. gpu/vk/upscale_contract.h decides which sampled binding is which, and gpu/vk/upscale_format.h decides what a Vulkan format counts as. Motion and depth fix the render extent, since they are the two a network cannot sample at another size, and they must agree or nothing is reported: two that disagree mean the guess about which binding is which is wrong. The colour at that extent is the input. A zero extent is a binding the renderer could not resolve and is skipped rather than taken for motion. A colour at a larger extent is reported as "full-size" and nothing more. It is the network's own history, its output, or both, and draw_sampled cannot tell them apart, because it holds what a dispatch's descriptors sample *or* store in one list. Calling it the history would have been a guess printed as a fact; the seam that replaces the dispatch resolves the output image itself and can then say which it is. The contract header has no Vulkan include and reads nothing from guest memory; the format mapping is a header of its own rather than a static in vk_draw.cpp so that tests/upscale_contract_test.cpp covers it, which is the half most likely to be wrong: a format wrongly called motion is handed to an upscaler as motion. Also corrects this file's own claim from the previous commit: the compute stand-in replaces the network only where the device has no hardware f16 matrix multiply (or with RX_VK_NO_F16), and otherwise the network runs as itself. A replacement therefore cannot live inside taau_stand_in alone. No switch and no behaviour change: the extra work is one classification per network key, on a path that already builds a line once per key. Tested with python -I -B tests/run_all.py (88 passed; the 8 failures and 12 skips are the same on upstream/main here, all for a missing clang++ or SPIR-V headers), and each refusal in the classifier was confirmed to fail the test when removed. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- docs/upscaling.md | 17 +++- gpu/vk/upscale_contract.h | 111 ++++++++++++++++++++++++++ gpu/vk/upscale_format.h | 41 ++++++++++ gpu/vk/vk_draw.cpp | 23 +++++- tests/run_all.py | 1 + tests/test_upscale_contract.py | 32 ++++++++ tests/upscale_contract_test.cpp | 134 ++++++++++++++++++++++++++++++++ 7 files changed, 354 insertions(+), 5 deletions(-) create mode 100644 gpu/vk/upscale_contract.h create mode 100644 gpu/vk/upscale_format.h create mode 100644 tests/test_upscale_contract.py create mode 100644 tests/upscale_contract_test.cpp diff --git a/docs/upscaling.md b/docs/upscaling.md index 9e0da4a6a..9790bb750 100644 --- a/docs/upscaling.md +++ b/docs/upscaling.md @@ -11,13 +11,16 @@ in. Nothing here is implemented yet; each section below is one pull request. | `resolution` | `gpu/vk/vk_menu.h`, `nx2/oot_patches.py` | The 3D scale: Auto (the game's dynamic resolution), or 100/75/67/50% of full | | `upscale` | `gpu/vk/vk_menu.h`, `framegen_scale` | A spatial filter on the finished window image: off, Catmull-Rom, Lanczos | | Frame generation | `gpu/vk/vk_framegen.cpp` | Image-space interpolation: quarter-size luma, 16x16 block matching within +-32 px, a 3x3 median, then a forward/backward blend per made frame | -| The game's own upscaler | `taau_stand_in`, `gpu/vk/vk_draw.cpp` | OoT evaluates a neural TAAU network (program `fd029a317a9a4b94`). Its translation loses the blue channel and casts the scene yellow, so a compute stand-in (`shaders/taau_upscale.comp`) runs instead. `RX_VK_TAAU_KEYS=-` runs the real network | +| The game's own upscaler | `taau_stand_in`, `gpu/vk/vk_draw.cpp` | OoT evaluates a neural TAAU network (program `fd029a317a9a4b94`). Where the device has no hardware f16 matrix multiply (or with `RX_VK_NO_F16`), a compute stand-in replaces it, because the translated network loses the blue channel and casts the scene yellow; elsewhere the network itself runs. `RX_VK_TAAU_KEYS` overrides either way | +| The per-network log | `gpu/vk/vk_draw.cpp`, `gpu/vk/upscale_contract.h` | Once per network key: its dispatch size, its sampled textures, what each one is in the input contract below, and whether a temporal upscaler could stand in | Two consequences follow from that table, and they decide the whole design. **The game already upscales temporally.** It renders the 3D at a dynamic internal resolution and resolves it with its own network. A vendor upscaler does not need a new low-resolution path invented -for it; it needs to take that network's place. +for it; it needs to take that network's place. Note that on a card with hardware f16 matrix multiply +the network runs as itself, so a replacement cannot be built inside the stand-in alone: the dispatch +has to be recognized whether or not the stand-in is the thing currently handling it. **The finished window image is the wrong place.** `upscale` and the frame interpolator both work on the composited frame, after the HUD. A temporal upscaler there has no depth, no motion and a HUD @@ -49,6 +52,14 @@ and it must reset its history on a resolution change, on first use, and after a 250 ms (a pause, a menu, a load). A camera cut is a separate reset that this game does not hand us directly. +`gpu/vk/upscale_contract.h` decides which sampled binding is which, and `gpu/vk/upscale_format.h` +decides what each Vulkan format counts as. Both are driven by `tests/upscale_contract_test.cpp` +without a game, a GPU or a dispatch. Motion and depth fix the render extent, because they are the two +a network cannot sample at another size; the colour at that extent is the input. A colour at a larger +extent is reported as full-size and nothing more: the renderer records what a dispatch's descriptors +sample *or store* in one list, so the history and the output cannot be told apart there, and the seam +in row 2 is where that is resolved. + Where any of that does not hold, the native dispatch or the stand-in stays. An upscaler that runs on inputs it has guessed produces ghosting that looks like a renderer bug and is reported as one. @@ -63,7 +74,7 @@ Each row is one pull request, and each one is useful on its own. | # | Change | Why it is first | |---|---|---| -| 1 | Log the TAAU dispatch's descriptors and jitter behind `RX_VK_UPSCALE_TRACE=1` | Nothing can be built until the contract above is read off the real dispatch rather than assumed | +| 1 | Name each network binding's role in the existing per-network log, and say whether the inputs are complete | Nothing can be built until the contract above is read off the real dispatch rather than assumed, and the log that reports a network's textures was already there | | 2 | A vendor-neutral upscaler seam at `taau_stand_in`, with the stand-in as its only backend | No behavior change, and it is the review that decides the shape | | 3 | FSR 3.1 temporal upscaling as the first backend | MIT sources, no external runtime, works on every vendor, so it is the backend that can be the default | | 4 | DLSS Super Resolution: Streamline on Windows, NGX on Linux | Needs a user-supplied runtime, so it comes after a working fallback exists | diff --git a/gpu/vk/upscale_contract.h b/gpu/vk/upscale_contract.h new file mode 100644 index 000000000..3dbddcad0 --- /dev/null +++ b/gpu/vk/upscale_contract.h @@ -0,0 +1,111 @@ +// (hookshot) Whether the inputs a temporal upscaler needs appear among a game network's sampled textures: low +// resolution colour, motion and depth. Plain data, no Vulkan and nothing read from +// guest memory, so tests/upscale_contract_test.cpp can drive it; docs/upscaling.md has the contract itself and why +// the game's own upscale dispatch is where a replacement belongs. +#pragma once + +#include +#include + +namespace mkwvk::upscale { + +/// What a binding's format makes it fit for. The renderer maps its VkFormats onto these where it builds the list, so +/// this header needs no Vulkan header and no renderer type. +enum class Kind : uint8_t { + Other, ///< a format the contract has no use for + Colour, ///< three or four channels, packed or float + TwoChannel, ///< two channels, float or signed: a motion candidate + Depth, ///< a depth format +}; + +/// What a binding was taken to be. Reported per binding so a log names them rather than leaving the reader to count. +enum class Role : uint8_t { None, Colour, Motion, Depth, FullSize }; + +struct Binding { + Kind kind = Kind::Other; + uint32_t width = 0; + uint32_t height = 0; +}; + +inline constexpr size_t kNone = (size_t)-1; + +struct Verdict { + /// Colour, motion and depth were all found, and at one extent. + bool inputs_complete = false; + /// The extent the inputs agree on (0 when they do not agree, or were not all found). + uint32_t render_width = 0; + uint32_t render_height = 0; + size_t colour = kNone; + size_t motion = kNone; + size_t depth = kNone; + /// A colour larger than the render extent: the history, the output, or both. See classify(). + size_t full_size = kNone; +}; + +inline const char* role_name(Role r) { + switch (r) { + case Role::Colour: return "colour"; + case Role::Motion: return "motion"; + case Role::Depth: return "depth"; + case Role::FullSize: return "full-size"; + default: break; + } + return "-"; +} + +/// Reads `n` sampled bindings and says which of them a temporal upscaler would take for what. `roles`, when given, +/// receives one entry per binding. +/// +/// Motion and depth decide the render extent, because they are the two a network cannot sample at any other size. +/// The colour at that extent is the upscaler's input. +/// +/// A colour at a larger extent is reported as full-size and nothing more: it is the network's own history, its +/// output, or both, and the list this reads cannot tell them apart, because the renderer records the textures a +/// dispatch's descriptors sample *or store* in one list (vk_draw.cpp, draw_sampled). Naming it the history would be +/// a guess; the seam that replaces the dispatch resolves the output image itself and can then say which it is. +/// +/// The first binding wins a tie, so the answer does not depend on how the caller happened to order equal +/// candidates. +inline Verdict classify(const Binding* b, size_t n, Role* roles = nullptr) { + Verdict v; + if (roles) { + for (size_t i = 0; i < n; ++i) roles[i] = Role::None; + } + if (b == nullptr) return v; + for (size_t i = 0; i < n; ++i) { + if (b[i].width == 0 || b[i].height == 0) continue; + if (b[i].kind == Kind::TwoChannel && v.motion == kNone) v.motion = i; + if (b[i].kind == Kind::Depth && v.depth == kNone) v.depth = i; + } + // (both, and agreeing: one of them alone cannot say what the render extent is, and two that disagree mean the + // guess about which binding is which is wrong) + if (v.motion == kNone || v.depth == kNone || b[v.motion].width != b[v.depth].width || + b[v.motion].height != b[v.depth].height) { + v.motion = v.depth = kNone; + return v; + } + const uint32_t rw = b[v.motion].width, rh = b[v.motion].height; + for (size_t i = 0; i < n; ++i) { + if (b[i].kind != Kind::Colour || b[i].width == 0 || b[i].height == 0) continue; + if (b[i].width == rw && b[i].height == rh) { + if (v.colour == kNone) v.colour = i; + } else if ((uint64_t)b[i].width * b[i].height > (uint64_t)rw * rh && v.full_size == kNone) { + v.full_size = i; + } + } + if (v.colour == kNone) { + v.motion = v.depth = v.full_size = kNone; + return v; + } + v.inputs_complete = true; + v.render_width = rw, v.render_height = rh; + if (roles) { + roles[v.colour] = Role::Colour; + roles[v.motion] = Role::Motion; + roles[v.depth] = Role::Depth; + if (v.full_size != kNone) roles[v.full_size] = Role::FullSize; + } + return v; +} + +} // namespace mkwvk::upscale diff --git a/gpu/vk/upscale_format.h b/gpu/vk/upscale_format.h new file mode 100644 index 000000000..202a5d487 --- /dev/null +++ b/gpu/vk/upscale_format.h @@ -0,0 +1,41 @@ +// (hookshot) The one place that decides what a Vulkan format means to the upscaler input contract. Kept apart from +// upscale_contract.h so that header stays free of Vulkan and apart from vk_draw.cpp so +// tests/upscale_contract_test.cpp covers the mapping itself: which formats count as motion is the part most likely +// to be wrong, and a wrong answer there is handed to an upscaler as if it were motion. +#pragma once + +#include + +#include "upscale_contract.h" + +namespace mkwvk::upscale { + +/// A sampled texture's kind, from the format and aspect the renderer gave its image. +/// +/// Depth comes from the aspect, not the format: the renderer already knows which images it made as depth, and every +/// depth format is one. Two-channel float or normalized formats are motion candidates; three- and four-channel +/// colour formats are colour. Everything else is Other, which is a refusal rather than a default. +inline Kind kind_of(VkFormat format, VkImageAspectFlags aspect) { + if (aspect & VK_IMAGE_ASPECT_DEPTH_BIT) return Kind::Depth; + switch (format) { + case VK_FORMAT_R16G16_SFLOAT: + case VK_FORMAT_R16G16_SNORM: + case VK_FORMAT_R16G16_UNORM: + case VK_FORMAT_R32G32_SFLOAT: + return Kind::TwoChannel; + case VK_FORMAT_B10G11R11_UFLOAT_PACK32: + case VK_FORMAT_R16G16B16A16_SFLOAT: + case VK_FORMAT_R32G32B32A32_SFLOAT: + case VK_FORMAT_A2B10G10R10_UNORM_PACK32: + case VK_FORMAT_R8G8B8A8_UNORM: + case VK_FORMAT_R8G8B8A8_SRGB: + case VK_FORMAT_B8G8R8A8_UNORM: + case VK_FORMAT_B8G8R8A8_SRGB: + return Kind::Colour; + default: + break; + } + return Kind::Other; +} + +} // namespace mkwvk::upscale diff --git a/gpu/vk/vk_draw.cpp b/gpu/vk/vk_draw.cpp index d6afac6f6..682bbc2fc 100644 --- a/gpu/vk/vk_draw.cpp +++ b/gpu/vk/vk_draw.cpp @@ -39,6 +39,7 @@ #include "shaders/clear_u_frag_spv.h" #include "shaders/clear_vert_spv.h" #include "shaders/taau_upscale_comp_spv.h" +#include "upscale_format.h" #include "shaders/movie_upscale_comp_spv.h" #include "shader_recompiler/backend/spirv/mma_layout.h" #include "vk_work.h" // (after the others: counts the commands that do GPU work, for full_barrier) @@ -5876,11 +5877,29 @@ void dispatch(VkCommandBuffer cmd, NvnState& s, uint32_t x, uint32_t y, uint32_t static std::unordered_map seen; std::lock_guard lk(mu); if (seen[p.key]++ == 0) { + // (hookshot) with each one's role in the upscaler input contract, so this says whether a temporal + // upscaler could take this network's place rather than leaving it to be counted by hand later: + // docs/upscaling.md + std::vector bindings(draw_sampled.size()); + for (size_t i = 0; i < draw_sampled.size(); ++i) + if (const Texture* t = draw_sampled[i]) + bindings[i] = {upscale::kind_of(t->format, t->aspect), t->width, t->height}; + std::vector roles(bindings.size(), upscale::Role::None); + const upscale::Verdict v = upscale::classify(bindings.data(), bindings.size(), roles.data()); char line[900]; int n = snprintf(line, sizeof line, "vk: network %016llx: dispatch %ux%ux%u, %zu textures %zu images:", (unsigned long long)p.key, x, y, z, p.stages[0].info.texture_descriptors.size(), p.stages[0].info.image_descriptors.size()); - for (const Texture* t : draw_sampled) - if (t && n < 860) n += snprintf(line + n, sizeof line - n, " %ux%ux%u/%u", t->width, t->height, t->depth, (unsigned)t->format); + for (size_t i = 0; i < draw_sampled.size() && n < 840; ++i) { + const Texture* t = draw_sampled[i]; + if (!t) continue; + n += snprintf(line + n, sizeof line - n, " %ux%ux%u/%u", t->width, t->height, t->depth, (unsigned)t->format); + if (roles[i] != upscale::Role::None && n < 840) + n += snprintf(line + n, sizeof line - n, "=%s", upscale::role_name(roles[i])); + } + if (n < 860) + n += v.inputs_complete + ? snprintf(line + n, sizeof line - n, "; upscaler inputs at %ux%u", v.render_width, v.render_height) + : snprintf(line + n, sizeof line - n, "; no upscaler inputs"); logf("%s", line); } } diff --git a/tests/run_all.py b/tests/run_all.py index b61f843bd..8883f47c8 100644 --- a/tests/run_all.py +++ b/tests/run_all.py @@ -31,6 +31,7 @@ "tests/test_lower_depbar.py": ["--cxx", "clang++"], "tests/test_text_speed.py": ["--cc", "gcc"], "tests/test_upscale_fallback.py": ["--cxx", "g++"], + "tests/test_upscale_contract.py": ["--cxx", "g++", "--headers", "{vulkan_headers}"], "tests/test_nvn_buffer_map.py": ["--cc", "gcc"], "tests/test_cpp_preflight.py": ["--cxx", "g++"], "tests/test_invalidate_vcore.py": ["--cxx", "g++"], diff --git a/tests/test_upscale_contract.py b/tests/test_upscale_contract.py new file mode 100644 index 000000000..4d4e32217 --- /dev/null +++ b/tests/test_upscale_contract.py @@ -0,0 +1,32 @@ +"""The upscaler input contract: which of a game network's sampled bindings are colour, motion and depth, which Vulkan +formats mean which, and the sets it has to refuse instead of guessing. An upscaler fed a wrong guess ghosts, and the +ghosting is reported as a renderer bug. Compiles tests/upscale_contract_test.cpp against gpu/vk/upscale_contract.h and +gpu/vk/upscale_format.h; needs the Vulkan headers, no game, GPU or SDK. + +python -I -B tests/test_upscale_contract.py [--cxx clang++] [--headers ] +""" +import argparse +import subprocess +import tempfile +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] + + +def main(): + p = argparse.ArgumentParser(description=__doc__) + p.add_argument("--cxx", default="clang++") + p.add_argument("--headers", help="a Vulkan headers include folder; the compiler's own path by default") + a = p.parse_args() + with tempfile.TemporaryDirectory(prefix="upscale-contract-") as tmp: + exe = Path(tmp) / "upscale_contract_test" + cmd = [a.cxx, "-std=c++20", "-O1", "-Wall", "-Wextra", "-Werror", "-I" + str(ROOT / "gpu/vk")] + if a.headers: + cmd.append("-I" + a.headers) + cmd += [str(ROOT / "tests/upscale_contract_test.cpp"), "-o", str(exe)] + subprocess.run(cmd, check=True) + subprocess.run([str(exe)], check=True) + + +if __name__ == "__main__": + main() diff --git a/tests/upscale_contract_test.cpp b/tests/upscale_contract_test.cpp new file mode 100644 index 000000000..4264f17ab --- /dev/null +++ b/tests/upscale_contract_test.cpp @@ -0,0 +1,134 @@ +// (hookshot) gpu/vk/upscale_contract.h and upscale_format.h, driven without a game or a GPU: what the classifier +// takes each sampled binding to be, the cases where it has to refuse rather than guess, and what each Vulkan format +// means to it. tests/test_upscale_contract.py compiles and runs this; it needs the Vulkan headers and nothing else. +#include +#include +#include + +#include "upscale_format.h" + +using namespace mkwvk::upscale; + +static int failures = 0; + +static void check(bool ok, const char* what) { + if (!ok) { + std::fprintf(stderr, "FAIL: %s\n", what); + ++failures; + } +} + +int main() { + // A network that samples what a temporal upscaler needs: 1280x720 colour, motion and depth, with the previous + // output or history at the full size. + { + const Binding b[] = { + {Kind::Colour, 1280, 720}, + {Kind::TwoChannel, 1280, 720}, + {Kind::Depth, 1280, 720}, + {Kind::Colour, 1920, 1080}, + }; + Role roles[4]; + const Verdict v = classify(b, 4, roles); + check(v.inputs_complete, "a complete input set is complete"); + check(v.render_width == 1280 && v.render_height == 720, "the render extent is motion's"); + check(v.colour == 0 && v.motion == 1 && v.depth == 2 && v.full_size == 3, "each input is found"); + check(roles[0] == Role::Colour && roles[1] == Role::Motion && roles[2] == Role::Depth && + roles[3] == Role::FullSize, "the roles are reported per binding"); + } + // The order the caller happens to use must not change the answer. + { + const Binding b[] = { + {Kind::Colour, 1920, 1080}, + {Kind::Depth, 1280, 720}, + {Kind::Colour, 1280, 720}, + {Kind::TwoChannel, 1280, 720}, + }; + const Verdict v = classify(b, 4); + check(v.inputs_complete, "a reordered set is still complete"); + check(v.colour == 2 && v.motion == 3 && v.depth == 1 && v.full_size == 0, "order does not decide the roles"); + } + // Native resolution: nothing is larger than the render extent, so there is no full-size colour, which is fine. + { + const Binding b[] = {{Kind::Colour, 1920, 1080}, {Kind::TwoChannel, 1920, 1080}, {Kind::Depth, 1920, 1080}}; + const Verdict v = classify(b, 3); + check(v.inputs_complete, "no full-size colour is still a complete set"); + check(v.full_size == kNone, "and no full-size colour is reported"); + } + // Each refusal below would otherwise become a wrong guess handed to an upscaler. + { + const Binding no_motion[] = {{Kind::Colour, 1280, 720}, {Kind::Depth, 1280, 720}}; + check(!classify(no_motion, 2).inputs_complete, "no motion is refused"); + const Binding no_depth[] = {{Kind::Colour, 1280, 720}, {Kind::TwoChannel, 1280, 720}}; + check(!classify(no_depth, 2).inputs_complete, "no depth is refused"); + const Binding no_colour[] = {{Kind::TwoChannel, 1280, 720}, {Kind::Depth, 1280, 720}}; + check(!classify(no_colour, 2).inputs_complete, "no colour at the render extent is refused"); + // Motion and depth at different sizes: one of them is not what it was taken for. + const Binding mismatch[] = { + {Kind::Colour, 1280, 720}, {Kind::TwoChannel, 1280, 720}, {Kind::Depth, 1920, 1080}}; + const Verdict v = classify(mismatch, 3); + check(!v.inputs_complete, "motion and depth at different extents are refused"); + check(v.motion == kNone && v.depth == kNone, "and nothing is reported as found"); + // Only a larger colour: there is something full-size, but not the input it would upscale. + const Binding full_size_only[] = { + {Kind::Colour, 1920, 1080}, {Kind::TwoChannel, 1280, 720}, {Kind::Depth, 1280, 720}}; + check(!classify(full_size_only, 3).inputs_complete, "a full-size colour without an input colour is refused"); + } + // A zero extent is a binding the renderer could not resolve; it must not become the render extent. + { + const Binding b[] = {{Kind::Colour, 1280, 720}, + {Kind::TwoChannel, 0, 0}, + {Kind::TwoChannel, 1280, 720}, + {Kind::Depth, 1280, 720}}; + const Verdict v = classify(b, 4); + check(v.inputs_complete && v.motion == 2, "an unresolved binding is skipped, not taken for motion"); + } + // Nothing at all, and a null list: both are the stand-in's case, not a crash. + check(!classify(nullptr, 0).inputs_complete, "a null list is refused"); + { + const Binding b[] = {{Kind::Other, 64, 64}}; + Role roles[1]; + check(!classify(b, 1, roles).inputs_complete, "a set with nothing useful is refused"); + check(roles[0] == Role::None, "and its binding has no role"); + } + // Roles are cleared even when the set is refused, so a caller cannot print last call's answer. + { + const Binding b[] = {{Kind::Colour, 1280, 720}, {Kind::Depth, 1280, 720}}; + Role roles[2] = {Role::Motion, Role::FullSize}; + classify(b, 2, roles); + check(roles[0] == Role::None && roles[1] == Role::None, "a refusal leaves no roles set"); + } + check(role_name(Role::Motion)[0] == 'm' && role_name(Role::None)[0] == '-', "role_name names them"); + + // The format mapping, which is the half most likely to be wrong: a format wrongly called motion is handed to an + // upscaler as motion. + { + check(kind_of(VK_FORMAT_D32_SFLOAT, VK_IMAGE_ASPECT_DEPTH_BIT) == Kind::Depth, "D32 depth is depth"); + check(kind_of(VK_FORMAT_D24_UNORM_S8_UINT, VK_IMAGE_ASPECT_DEPTH_BIT) == Kind::Depth, + "a packed depth-stencil is depth"); + // The aspect decides, so a depth image the renderer made with a two-channel format is still depth and never + // becomes a motion candidate. + check(kind_of(VK_FORMAT_R16G16_SFLOAT, VK_IMAGE_ASPECT_DEPTH_BIT) == Kind::Depth, "the aspect wins"); + check(kind_of(VK_FORMAT_R16G16_SFLOAT, VK_IMAGE_ASPECT_COLOR_BIT) == Kind::TwoChannel, "R16G16F is motion"); + check(kind_of(VK_FORMAT_R16G16_SNORM, VK_IMAGE_ASPECT_COLOR_BIT) == Kind::TwoChannel, "R16G16 snorm is motion"); + check(kind_of(VK_FORMAT_R32G32_SFLOAT, VK_IMAGE_ASPECT_COLOR_BIT) == Kind::TwoChannel, "R32G32F is motion"); + // OoT's own upscale output format. + check(kind_of(VK_FORMAT_B10G11R11_UFLOAT_PACK32, VK_IMAGE_ASPECT_COLOR_BIT) == Kind::Colour, + "B10G11R11 is colour"); + check(kind_of(VK_FORMAT_R16G16B16A16_SFLOAT, VK_IMAGE_ASPECT_COLOR_BIT) == Kind::Colour, "RGBA16F is colour"); + check(kind_of(VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_ASPECT_COLOR_BIT) == Kind::Colour, "RGBA8 is colour"); + // One channel is not motion, however float it is, and an unknown format is a refusal rather than a default. + check(kind_of(VK_FORMAT_R32_SFLOAT, VK_IMAGE_ASPECT_COLOR_BIT) == Kind::Other, "one channel is not motion"); + check(kind_of(VK_FORMAT_R8_UNORM, VK_IMAGE_ASPECT_COLOR_BIT) == Kind::Other, "R8 is nothing useful"); + check(kind_of(VK_FORMAT_UNDEFINED, 0) == Kind::Other, "an undefined format is nothing useful"); + check(kind_of(VK_FORMAT_BC7_UNORM_BLOCK, VK_IMAGE_ASPECT_COLOR_BIT) == Kind::Other, + "a compressed texture is not an upscaler input"); + } + + if (failures != 0) { + std::fprintf(stderr, "%d check(s) failed\n", failures); + return 1; + } + std::printf("upscale contract: all checks passed\n"); + return 0; +} From 1a036c843597588eae1f5ba43e9938ea4800c591 Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 15:35:38 -0600 Subject: [PATCH 003/119] feat: route the game's upscale dispatch through one backend seam docs/upscaling.md row 2. A recognized upscale dispatch is now resolved once into an upscale::Request -- what the sampled bindings provide, the image it writes, and which binding the renderer hands over as colour -- and upscale::choose() says which backend takes it. A backend does not re-derive the dispatch for itself, which is what keeps FSR and DLSS from each growing their own copy of this. No behaviour change. The compute stand-in is the only backend, and it is a spatial resolve that needs none of the input contract, so it still runs wherever RX_VK_TAAU_KEYS asks for it, including where the contract is not met. choose() returns StandIn exactly when push descriptors are available and the key list asks for it, which is the same condition the first guard tested before, and tests/upscale_seam_test.cpp pins that: making the stand-in require the contract fails it. upscale::temporal_possible() is the gate a temporal backend has to pass. Complete inputs, an output that is resolved, writable and no smaller than the render extent, and the colour the renderer hands over being the colour the contract identified. That last clause does not hold yet, and the seam refuses rather than assuming it: the renderer passes dw.imgs[0], the first texture descriptor, while the contract indexes the textures the descriptor build resolved (draw_sampled). Those are different lists -- dw.imgs carries every texture descriptor, draw_sampled only the resolved ones -- so binding 0 of one is not binding 0 of the other. Establishing which descriptor is the contract's colour is the first job of the backend that needs it. The seam logs the refusal once per program with the output and input extents it resolved, so the next step reads what it needs from a run rather than guessing. One place now builds the binding list (upscale_bindings), so the per-network log and the seam cannot disagree about what a dispatch sampled. Tested with python -I -B tests/run_all.py: 89 passed, and the 8 failures and 12 skips are the same on upstream/main here, all a missing clang++ or SPIR-V headers. Each refusal in the gate was confirmed to fail the test when removed. The renderer itself is not compiled here: a clone carries no CPM dependency set, so the call site is reviewed against the guard it replaces rather than built. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- docs/upscaling.md | 24 +++++++- gpu/vk/upscale_seam.h | 90 ++++++++++++++++++++++++++++++ gpu/vk/vk_draw.cpp | 52 ++++++++++++++++-- tests/run_all.py | 1 + tests/test_upscale_seam.py | 29 ++++++++++ tests/upscale_seam_test.cpp | 106 ++++++++++++++++++++++++++++++++++++ 6 files changed, 296 insertions(+), 6 deletions(-) create mode 100644 gpu/vk/upscale_seam.h create mode 100644 tests/test_upscale_seam.py create mode 100644 tests/upscale_seam_test.cpp diff --git a/docs/upscaling.md b/docs/upscaling.md index 9790bb750..7a5239027 100644 --- a/docs/upscaling.md +++ b/docs/upscaling.md @@ -68,6 +68,28 @@ inputs it has guessed produces ghosting that looks like a renderer bug and is re > D32 depth) are that game's, not necessarily this one's: the shapes have to be read off OoT's own > dispatch before anything is wired to them. +## The seam + +`gpu/vk/upscale_seam.h` is where a backend is chosen. The renderer resolves a recognized dispatch once into an +`upscale::Request` — what the sampled bindings provide, the image the dispatch writes, and which binding the renderer +is going to hand over as colour — and `choose()` says which backend takes it. A backend never re-derives the dispatch +for itself. + +`temporal_possible()` is the gate a temporal backend has to pass, and every clause in it is a wrong picture rather +than a missing feature: the inputs must be complete, the output must be resolved, writable and no smaller than the +render extent, and the colour the renderer hands over must be the colour the contract identified. + +That last clause does not hold yet, and the seam says so in its log rather than assuming it away. The renderer passes +`dw.imgs[0]`, the first texture descriptor; the contract indexes the textures the descriptor build resolved +(`draw_sampled`). Those are two different lists — the first carries every texture descriptor, the second only the +ones it resolved — so binding 0 of one is not binding 0 of the other. Establishing which descriptor is the +contract's colour is the first job of the backend that needs it. Until then `temporal_possible()` refuses, which is +the point: it cannot be passed by accident. + +The stand-in needs none of this. It is a spatial resolve, and it runs wherever `RX_VK_TAAU_KEYS` asks for it exactly +as it did before the seam existed, including where the contract is not met. That property is what makes introducing +the seam a no-op, and `tests/upscale_seam_test.cpp` pins it. + ## Order of work Each row is one pull request, and each one is useful on its own. @@ -75,7 +97,7 @@ Each row is one pull request, and each one is useful on its own. | # | Change | Why it is first | |---|---|---| | 1 | Name each network binding's role in the existing per-network log, and say whether the inputs are complete | Nothing can be built until the contract above is read off the real dispatch rather than assumed, and the log that reports a network's textures was already there | -| 2 | A vendor-neutral upscaler seam at `taau_stand_in`, with the stand-in as its only backend | No behavior change, and it is the review that decides the shape | +| 2 | A vendor-neutral seam at `taau_stand_in`, with the stand-in as its only backend | No behaviour change, and it is the review that decides the shape | | 3 | FSR 3.1 temporal upscaling as the first backend | MIT sources, no external runtime, works on every vendor, so it is the backend that can be the default | | 4 | DLSS Super Resolution: Streamline on Windows, NGX on Linux | Needs a user-supplied runtime, so it comes after a working fallback exists | | 5 | Presets, quality modes and DLAA in the Insert menu and `hookshot_options.ini` | Settings for backends that exist, rather than settings-first | diff --git a/gpu/vk/upscale_seam.h b/gpu/vk/upscale_seam.h new file mode 100644 index 000000000..afa601782 --- /dev/null +++ b/gpu/vk/upscale_seam.h @@ -0,0 +1,90 @@ +// (hookshot) The seam a vendor upscaler takes the game's own upscale dispatch through. The renderer resolves the +// dispatch once into a Request, asks which backend takes it, and runs that backend; a backend never re-derives the +// dispatch for itself. Plain data and no Vulkan, so tests/upscale_seam_test.cpp drives it; docs/upscaling.md has the +// contract and why this dispatch is the place. +#pragma once + +#include + +#include "upscale_contract.h" + +namespace mkwvk::upscale { + +/// What handles a recognized upscale dispatch. +enum class Backend : uint8_t { + None, ///< nothing does: the dispatch runs as itself + StandIn, ///< the compute resolve in shaders/taau_upscale.comp +}; + +/// What the renderer can offer this dispatch. A backend that is not here cannot be chosen, whatever the inputs say. +struct Availability { + /// Push descriptors, which every backend here records through. + bool push_descriptor = false; + /// The program key is in the stand-in's list (RX_VK_TAAU_KEYS), so the translated network is not to be trusted. + bool stand_in_wanted = false; +}; + +/// A dispatch resolved once, in the terms a backend needs. Extents are in pixels; zero means the renderer could not +/// resolve that side, which is a refusal and never a default. +struct Request { + uint64_t program_key = 0; + /// What the sampled bindings provide (upscale_contract.h). + Verdict inputs; + /// The binding a backend will read as its colour input. The contract says which binding *is* the colour; this + /// says which one the renderer is going to hand over. They have to be the same for a temporal backend to be + /// given the dispatch, and historically the renderer has simply used the first. + size_t colour_binding = kNone; + /// The image the dispatch writes, as the renderer resolved it. + uint32_t output_width = 0; + uint32_t output_height = 0; + /// The output's format is one a backend can write into. + bool output_writable = false; +}; + +/// Whether a temporal backend could be given this dispatch. +/// +/// Every clause is a refusal that would otherwise become a wrong picture rather than a missing feature: +/// - the inputs must be complete, so there is motion and depth to reproject with; +/// - the colour the renderer hands over must be the colour the contract identified, or the backend is upscaling +/// whichever texture happened to be bound first; +/// - the output must be resolved and writable; +/// - the output must be at least the render extent, since an upscaler cannot resolve into something smaller than +/// what it was given (equal is native resolution, which is a valid anti-aliasing case). +inline bool temporal_possible(const Request& r) { + if (!r.inputs.inputs_complete) return false; + if (r.colour_binding == kNone || r.colour_binding != r.inputs.colour) return false; + if (!r.output_writable || r.output_width == 0 || r.output_height == 0) return false; + if (r.output_width < r.inputs.render_width || r.output_height < r.inputs.render_height) return false; + return true; +} + +/// Why `temporal_possible` said no, for a log. Null when it said yes. +inline const char* temporal_refusal(const Request& r) { + if (!r.inputs.inputs_complete) return "no colour, motion and depth at one extent"; + if (r.colour_binding == kNone || r.colour_binding != r.inputs.colour) return "the bound colour is not the input"; + if (!r.output_writable || r.output_width == 0 || r.output_height == 0) return "the output is not resolved"; + if (r.output_width < r.inputs.render_width || r.output_height < r.inputs.render_height) + return "the output is smaller than the render extent"; + return nullptr; +} + +/// Which backend takes this dispatch. +/// +/// The stand-in does not need the contract: it is a spatial resolve, and it runs wherever the key list asks for it, +/// exactly as it did before this seam existed. A temporal backend will be preferred here once there is one, and only +/// where `temporal_possible` agrees. +inline Backend choose(const Availability& a, const Request&) { + if (!a.push_descriptor) return Backend::None; + if (a.stand_in_wanted) return Backend::StandIn; + return Backend::None; +} + +inline const char* backend_name(Backend b) { + switch (b) { + case Backend::StandIn: return "stand-in"; + default: break; + } + return "none"; +} + +} // namespace mkwvk::upscale diff --git a/gpu/vk/vk_draw.cpp b/gpu/vk/vk_draw.cpp index 682bbc2fc..9676a150c 100644 --- a/gpu/vk/vk_draw.cpp +++ b/gpu/vk/vk_draw.cpp @@ -40,6 +40,7 @@ #include "shaders/clear_vert_spv.h" #include "shaders/taau_upscale_comp_spv.h" #include "upscale_format.h" +#include "upscale_seam.h" #include "shaders/movie_upscale_comp_spv.h" #include "shader_recompiler/backend/spirv/mma_layout.h" #include "vk_work.h" // (after the others: counts the commands that do GPU work, for full_barrier) @@ -5231,6 +5232,16 @@ bool upscale_stub(VkCommandBuffer cmd, const NvnState& s, uint64_t key) { return true; } +/// (hookshot) The sampled textures of the dispatch being recorded, in the terms the upscaler input contract uses +/// (gpu/vk/upscale_contract.h). One place builds this, so the per-network log and the seam below cannot disagree +/// about what a dispatch sampled. +static void upscale_bindings(std::vector& out) { + out.assign(draw_sampled.size(), upscale::Binding{}); + for (size_t i = 0; i < draw_sampled.size(); ++i) + if (const Texture* t = draw_sampled[i]) + out[i] = {upscale::kind_of(t->format, t->aspect), t->width, t->height}; +} + /// (hookshot) OoT's gameplay TAAU network (fd029a317a9a4b94) stood in for: its input upscaled into its output /// (shaders/taau_upscale.comp). The network's translation loses the blue channel, the yellow cast over every /// scene; with this the picture is right, without the network's temporal anti-aliasing. @@ -5371,9 +5382,18 @@ static bool typed_upscale(VkCommandBuffer cmd, VkImageView input_view, VkImageVi if (temporal) probe_image(cmd, out, level, 0, key, 't'); return true; } +/// (hookshot) The seam of docs/upscaling.md: a recognized upscale dispatch is resolved once into an +/// upscale::Request, a backend is chosen for it, and that backend runs it. The compute stand-in is the only backend +/// today, and it is a spatial resolve that needs none of the input contract, so this is the same behaviour through +/// one gate. What the seam adds is the gate a temporal backend has to pass, reported once per program. bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { const char* keys = getenv("RX_VK_TAAU_KEYS") ? getenv("RX_VK_TAAU_KEYS") : "fd029a317a9a4b94"; - if (!taau_key(p.key) || !dev.push_descriptor || !vkCmdPushDescriptorSetKHR || p.stages.empty()) return false; + upscale::Availability avail; + avail.push_descriptor = dev.push_descriptor && vkCmdPushDescriptorSetKHR != nullptr; + avail.stand_in_wanted = taau_key(p.key); + upscale::Request req; + req.program_key = p.key; + if (upscale::choose(avail, req) != upscale::Backend::StandIn || p.stages.empty()) return false; const Stage& st = p.stages[0]; if (st.info.texture_descriptors.empty() || st.info.image_descriptors.empty()) return false; size_t ntex = 0; // (build_descriptors' image infos: the textures', then the images') @@ -5386,6 +5406,30 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { if (!handle) return false; texture_view_of(handle, VK_IMAGE_VIEW_TYPE_2D, ViewUse::Storage, image_format(od.format), &out, &level); if (!out || out->format != VK_FORMAT_B10G11R11_UFLOAT_PACK32) return false; + // (hookshot) what a temporal backend would be given here, said once per program: the output this resolved, and + // the inputs the dispatch sampled. colour_binding stays unset on purpose. The renderer hands over + // dw.imgs[0], the first texture descriptor, while the contract indexes the textures the descriptor build + // recorded, and those two orders are not the same list: dw.imgs carries every texture descriptor, draw_sampled + // only those it resolved. Establishing which descriptor is the contract's colour is the first job of the + // backend that needs it, not something to assume here. + std::vector bindings; + upscale_bindings(bindings); + req.inputs = upscale::classify(bindings.data(), bindings.size()); + req.output_width = std::max(1u, out->width >> level); + req.output_height = std::max(1u, out->height >> level); + req.output_writable = true; + { + static std::mutex mu; + static std::unordered_map said; + std::lock_guard lk(mu); + if (said[p.key]++ == 0) { + const char* why = upscale::temporal_refusal(req); + logf("vk: upscale seam %016llx: %s, output %ux%u, inputs %ux%u; a temporal backend %s%s", + (unsigned long long)p.key, upscale::backend_name(upscale::Backend::StandIn), req.output_width, + req.output_height, req.inputs.render_width, req.inputs.render_height, + why ? "could not be given this: " : "could be given this", why ? why : ""); + } + } return typed_upscale(cmd, dw.imgs[0].imageView, dw.imgs[ntex].imageView, out, level, p.key, keys, true); } @@ -5880,10 +5924,8 @@ void dispatch(VkCommandBuffer cmd, NvnState& s, uint32_t x, uint32_t y, uint32_t // (hookshot) with each one's role in the upscaler input contract, so this says whether a temporal // upscaler could take this network's place rather than leaving it to be counted by hand later: // docs/upscaling.md - std::vector bindings(draw_sampled.size()); - for (size_t i = 0; i < draw_sampled.size(); ++i) - if (const Texture* t = draw_sampled[i]) - bindings[i] = {upscale::kind_of(t->format, t->aspect), t->width, t->height}; + std::vector bindings; + upscale_bindings(bindings); std::vector roles(bindings.size(), upscale::Role::None); const upscale::Verdict v = upscale::classify(bindings.data(), bindings.size(), roles.data()); char line[900]; diff --git a/tests/run_all.py b/tests/run_all.py index 8883f47c8..484fe4ae2 100644 --- a/tests/run_all.py +++ b/tests/run_all.py @@ -32,6 +32,7 @@ "tests/test_text_speed.py": ["--cc", "gcc"], "tests/test_upscale_fallback.py": ["--cxx", "g++"], "tests/test_upscale_contract.py": ["--cxx", "g++", "--headers", "{vulkan_headers}"], + "tests/test_upscale_seam.py": ["--cxx", "g++"], "tests/test_nvn_buffer_map.py": ["--cc", "gcc"], "tests/test_cpp_preflight.py": ["--cxx", "g++"], "tests/test_invalidate_vcore.py": ["--cxx", "g++"], diff --git a/tests/test_upscale_seam.py b/tests/test_upscale_seam.py new file mode 100644 index 000000000..e67f955c1 --- /dev/null +++ b/tests/test_upscale_seam.py @@ -0,0 +1,29 @@ +"""The upscaler seam: which backend takes the game's own upscale dispatch, and every reason a temporal backend is +refused it. The stand-in is a spatial resolve and has to keep running where the contract is not met, which is the +property that makes introducing the seam a no-op. Compiles tests/upscale_seam_test.cpp against +gpu/vk/upscale_seam.h; no game, GPU, Vulkan or SDK. + +python -I -B tests/test_upscale_seam.py [--cxx clang++] +""" +import argparse +import subprocess +import tempfile +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] + + +def main(): + p = argparse.ArgumentParser(description=__doc__) + p.add_argument("--cxx", default="clang++") + a = p.parse_args() + with tempfile.TemporaryDirectory(prefix="upscale-seam-") as tmp: + exe = Path(tmp) / "upscale_seam_test" + subprocess.run([a.cxx, "-std=c++20", "-O1", "-Wall", "-Wextra", "-Werror", + "-I" + str(ROOT / "gpu/vk"), + str(ROOT / "tests/upscale_seam_test.cpp"), "-o", str(exe)], check=True) + subprocess.run([str(exe)], check=True) + + +if __name__ == "__main__": + main() diff --git a/tests/upscale_seam_test.cpp b/tests/upscale_seam_test.cpp new file mode 100644 index 000000000..0be2f7f5e --- /dev/null +++ b/tests/upscale_seam_test.cpp @@ -0,0 +1,106 @@ +// (hookshot) gpu/vk/upscale_seam.h without a game, a GPU or Vulkan: which backend takes a recognized upscale +// dispatch, and every reason a temporal backend is refused one. Each refusal here is a wrong picture rather than a +// missing feature, which is why they are tested one at a time. tests/test_upscale_seam.py compiles and runs this. +#include + +#include "upscale_seam.h" + +using namespace mkwvk::upscale; + +static int failures = 0; + +static void check(bool ok, const char* what) { + if (!ok) { + std::fprintf(stderr, "FAIL: %s\n", what); + ++failures; + } +} + +/// A dispatch whose inputs are complete at 1280x720 and whose output is a writable 1920x1080. +static Request good() { + static const Binding b[] = {{Kind::Colour, 1280, 720}, + {Kind::TwoChannel, 1280, 720}, + {Kind::Depth, 1280, 720}, + {Kind::Colour, 1920, 1080}}; + Request r; + r.program_key = 0xfd029a317a9a4b94ull; + r.inputs = classify(b, 4); + r.colour_binding = r.inputs.colour; + r.output_width = 1920, r.output_height = 1080; + r.output_writable = true; + return r; +} + +int main() { + check(good().inputs.inputs_complete, "the fixture's inputs are complete"); + check(temporal_possible(good()), "a resolved dispatch with complete inputs allows a temporal backend"); + check(temporal_refusal(good()) == nullptr, "and gives no refusal reason"); + + // Native resolution is anti-aliasing, not an error: equal extents are allowed. + { + Request r = good(); + r.output_width = 1280, r.output_height = 720; + check(temporal_possible(r), "an output at the render extent is allowed"); + } + // Each refusal, one at a time, from the same otherwise-good dispatch. + { + Request r = good(); + r.inputs = Verdict{}; + check(!temporal_possible(r), "incomplete inputs are refused"); + check(temporal_refusal(r) != nullptr, "and say why"); + } + { + // The renderer hands over a different binding than the one the contract called the colour. Before this seam + // the renderer simply used the first binding, so this is the case that has to be caught rather than assumed. + Request r = good(); + r.colour_binding = r.inputs.colour + 1; + check(!temporal_possible(r), "a bound colour that is not the contract's colour is refused"); + Request unbound = good(); + unbound.colour_binding = kNone; + check(!temporal_possible(unbound), "no bound colour at all is refused"); + } + { + Request r = good(); + r.output_writable = false; + check(!temporal_possible(r), "an output the renderer cannot write is refused"); + } + { + Request r = good(); + r.output_width = 0; + check(!temporal_possible(r), "an unresolved output width is refused"); + Request h = good(); + h.output_height = 0; + check(!temporal_possible(h), "an unresolved output height is refused"); + } + { + // An upscaler cannot resolve into something smaller than what it was handed. + Request r = good(); + r.output_width = 640, r.output_height = 360; + check(!temporal_possible(r), "an output below the render extent is refused"); + Request one = good(); + one.output_height = 719; + check(!temporal_possible(one), "one axis below the render extent is enough to refuse"); + } + + // Backend choice. The stand-in is a spatial resolve: it must keep running wherever the key list asks for it, + // including where the contract is not met, because that is what it did before the seam existed. + { + Availability a; + a.push_descriptor = true, a.stand_in_wanted = true; + check(choose(a, good()) == Backend::StandIn, "the stand-in takes a dispatch its key list asks for"); + Request bare; + check(choose(a, bare) == Backend::StandIn, "the stand-in does not need the input contract"); + a.stand_in_wanted = false; + check(choose(a, good()) == Backend::None, "nothing takes a dispatch no backend was asked for"); + a.stand_in_wanted = true, a.push_descriptor = false; + check(choose(a, good()) == Backend::None, "without push descriptors nothing can be recorded"); + } + check(backend_name(Backend::StandIn)[0] == 's' && backend_name(Backend::None)[0] == 'n', "backends are named"); + + if (failures != 0) { + std::fprintf(stderr, "%d check(s) failed\n", failures); + return 1; + } + std::printf("upscale seam: all checks passed\n"); + return 0; +} From 492bcd02361733fc3e0b8ce16ee16b69ed28e251 Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 15:39:26 -0600 Subject: [PATCH 004/119] fix: read the upscaler contract in descriptor order, not from draw_sampled The seam could not hand a temporal backend its colour input, because the list the contract was reading is not the list a backend is handed. draw_sampled records a sampled texture only where the GPU has written it (vk_draw.cpp, the gpu_written guard) and records every storage image as well, so its index i is not dw.imgs[i]. A backend wired to that correspondence would upscale whichever texture happened to be bound first, and the ghosting would be reported as a renderer bug rather than as a wrong binding. upscale_bindings now resolves the dispatch's texture descriptors itself, the way build_descriptors resolves them -- same view type, same ViewUse::Sample, same handle_is_storage_pointer guard for the case Fritchii's d603d98bb fixed -- so index i is dw.imgs[i]. The seam sets colour_binding from the contract, and temporal_possible() can now be satisfied rather than refusing by construction. The per-network log reports the same list, so its roles are descriptor slots too. Its entries are now "slot:WxH=role" rather than the extent-and-format of whichever textures draw_sampled happened to hold, which is what makes the log usable for deciding what a backend reads. No behaviour change: nothing new is recorded into a command buffer, and the stand-in still takes the same dw.imgs[0] and dw.imgs[ntex] it always did. The resolve is a view lookup for handles the descriptor build has just resolved for this same dispatch. Tested with python -I -B tests/run_all.py: 89 passed, with the same 8 failures and 12 skips as upstream/main here (a missing clang++ or SPIR-V headers). The renderer is not compiled here -- a clone carries no CPM dependency set -- so this is reviewed against the descriptor build it mirrors, and the formats and extents it reports want checking against a real run before a backend trusts them. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- docs/upscaling.md | 27 +++++++++++++++++--------- gpu/vk/vk_draw.cpp | 47 ++++++++++++++++++++++++++-------------------- 2 files changed, 45 insertions(+), 29 deletions(-) diff --git a/docs/upscaling.md b/docs/upscaling.md index 7a5239027..1f91f65cb 100644 --- a/docs/upscaling.md +++ b/docs/upscaling.md @@ -79,12 +79,12 @@ for itself. than a missing feature: the inputs must be complete, the output must be resolved, writable and no smaller than the render extent, and the colour the renderer hands over must be the colour the contract identified. -That last clause does not hold yet, and the seam says so in its log rather than assuming it away. The renderer passes -`dw.imgs[0]`, the first texture descriptor; the contract indexes the textures the descriptor build resolved -(`draw_sampled`). Those are two different lists — the first carries every texture descriptor, the second only the -ones it resolved — so binding 0 of one is not binding 0 of the other. Establishing which descriptor is the -contract's colour is the first job of the backend that needs it. Until then `temporal_possible()` refuses, which is -the point: it cannot be passed by accident. +The bindings the contract reads are in **descriptor order**, resolved the way `build_descriptors` resolves them, so +index `i` is `dw.imgs[i]` — the descriptor a backend is handed. That matters because the obvious shortcut is wrong: +`draw_sampled` records a sampled texture only where the GPU has written it and records every storage image as well, +so binding 0 of that list is not `dw.imgs[0]`. A backend wired to that correspondence would read whichever texture +happened to be bound first and ghost, and the ghosting would be reported as a renderer bug rather than as a wrong +binding. The stand-in's own `dw.imgs[0]` is the colour only when the contract agrees that slot 0 is the colour. The stand-in needs none of this. It is a spatial resolve, and it runs wherever `RX_VK_TAAU_KEYS` asks for it exactly as it did before the seam existed, including where the contract is not met. That property is what makes introducing @@ -105,9 +105,18 @@ Each row is one pull request, and each one is useful on its own. ## What each vendor runtime allows -**FSR.** AMD's FidelityFX sources are MIT. They can be vendored under `third_party/` with a -`PROVENANCE.md`, unmodified, and need no runtime from the user. FSR 4's newer models arrive through -AMD's own runtime library on Windows; the SDK path works everywhere. +**FSR.** AMD's FidelityFX sources are MIT and can be vendored under `third_party/` with a `PROVENANCE.md`, +unmodified. There are two integration routes, and they are not interchangeable: + +- *AMD's FidelityFX API*, loading AMD's own Vulkan runtime library at run time. This is what #577 does, and it has + already vendored the five MIT API headers under `third_party/fidelityfx/` with provenance. The runtime libraries + are AMD's and are not committed. FSR 4's newer models arrive this way, on Windows. +- *The FidelityFX SDK sources*, where the upscaler's passes are recorded from AMD's MIT shader sources and no runtime + library is needed at all. This is the route that works on Linux as well as Windows. + +A second copy of FidelityFX in this tree would be worse than either. Whichever route a backend takes, it should build +on the vendored copy #577 is adding rather than add its own folder, and declare that dependency the way #577 declares +its own. **DLSS.** The Streamline headers are MIT and can be vendored the same way. **The runtime libraries are not**, must not be committed, and must not be bundled in a release. The user supplies them, or the diff --git a/gpu/vk/vk_draw.cpp b/gpu/vk/vk_draw.cpp index 9676a150c..1e216331c 100644 --- a/gpu/vk/vk_draw.cpp +++ b/gpu/vk/vk_draw.cpp @@ -5232,14 +5232,25 @@ bool upscale_stub(VkCommandBuffer cmd, const NvnState& s, uint64_t key) { return true; } -/// (hookshot) The sampled textures of the dispatch being recorded, in the terms the upscaler input contract uses -/// (gpu/vk/upscale_contract.h). One place builds this, so the per-network log and the seam below cannot disagree -/// about what a dispatch sampled. -static void upscale_bindings(std::vector& out) { - out.assign(draw_sampled.size(), upscale::Binding{}); - for (size_t i = 0; i < draw_sampled.size(); ++i) - if (const Texture* t = draw_sampled[i]) - out[i] = {upscale::kind_of(t->format, t->aspect), t->width, t->height}; +/// (hookshot) The dispatch's sampled textures in descriptor order, in the terms of the upscaler input contract +/// (gpu/vk/upscale_contract.h). Resolved exactly as build_descriptors resolves them, including the storage-pointer +/// guard, so index i here is dw.imgs[i] -- the descriptor a backend is actually handed. +/// +/// draw_sampled cannot be used for this. It records a sampled texture only where the GPU has written it, and it +/// records every storage image as well, so its indices are not descriptor slots and binding 0 of it is not +/// dw.imgs[0]. An upscaler wired to that correspondence would read whichever texture happened to be bound first. +static void upscale_bindings(const NvnState& s, const Stage& st, std::vector& out) { + out.clear(); + for (const auto& d : st.info.texture_descriptors) { + const VkImageViewType vt = view_type(d.type); + for (uint32_t k = 0; k < d.count; k++) { + const uint32_t handle = handle_is_storage_pointer(st.info, d, k) ? 0u : handle_of(s, st, d, k); + Texture* tex = nullptr; + if (handle) texture_view_of(handle, vt, ViewUse::Sample, VK_FORMAT_UNDEFINED, &tex); + out.push_back(tex ? upscale::Binding{upscale::kind_of(tex->format, tex->aspect), tex->width, tex->height} + : upscale::Binding{}); + } + } } /// (hookshot) OoT's gameplay TAAU network (fd029a317a9a4b94) stood in for: its input upscaled into its output @@ -5406,15 +5417,13 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { if (!handle) return false; texture_view_of(handle, VK_IMAGE_VIEW_TYPE_2D, ViewUse::Storage, image_format(od.format), &out, &level); if (!out || out->format != VK_FORMAT_B10G11R11_UFLOAT_PACK32) return false; - // (hookshot) what a temporal backend would be given here, said once per program: the output this resolved, and - // the inputs the dispatch sampled. colour_binding stays unset on purpose. The renderer hands over - // dw.imgs[0], the first texture descriptor, while the contract indexes the textures the descriptor build - // recorded, and those two orders are not the same list: dw.imgs carries every texture descriptor, draw_sampled - // only those it resolved. Establishing which descriptor is the contract's colour is the first job of the - // backend that needs it, not something to assume here. + // (hookshot) what a temporal backend would be given here, said once per program. The bindings are in descriptor + // order, so the contract's colour is a descriptor slot: dw.imgs[req.colour_binding] is the view a backend reads, + // and the stand-in's own dw.imgs[0] is only that slot when the contract agrees it is. std::vector bindings; - upscale_bindings(bindings); + upscale_bindings(s, st, bindings); req.inputs = upscale::classify(bindings.data(), bindings.size()); + req.colour_binding = req.inputs.colour; req.output_width = std::max(1u, out->width >> level); req.output_height = std::max(1u, out->height >> level); req.output_writable = true; @@ -5925,16 +5934,14 @@ void dispatch(VkCommandBuffer cmd, NvnState& s, uint32_t x, uint32_t y, uint32_t // upscaler could take this network's place rather than leaving it to be counted by hand later: // docs/upscaling.md std::vector bindings; - upscale_bindings(bindings); + upscale_bindings(s, p.stages[0], bindings); std::vector roles(bindings.size(), upscale::Role::None); const upscale::Verdict v = upscale::classify(bindings.data(), bindings.size(), roles.data()); char line[900]; int n = snprintf(line, sizeof line, "vk: network %016llx: dispatch %ux%ux%u, %zu textures %zu images:", (unsigned long long)p.key, x, y, z, p.stages[0].info.texture_descriptors.size(), p.stages[0].info.image_descriptors.size()); - for (size_t i = 0; i < draw_sampled.size() && n < 840; ++i) { - const Texture* t = draw_sampled[i]; - if (!t) continue; - n += snprintf(line + n, sizeof line - n, " %ux%ux%u/%u", t->width, t->height, t->depth, (unsigned)t->format); + for (size_t i = 0; i < bindings.size() && n < 840; ++i) { + n += snprintf(line + n, sizeof line - n, " %u:%ux%u", (unsigned)i, bindings[i].width, bindings[i].height); if (roles[i] != upscale::Role::None && n < 840) n += snprintf(line + n, sizeof line - n, "=%s", upscale::role_name(roles[i])); } From 37afa2e5f80db67a5fb690bcb2289b161e7df922 Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 15:52:31 -0600 Subject: [PATCH 005/119] feat: compile AMD's FSR 3.1 upscaler passes from the FidelityFX SDK The first half of an FSR backend (docs/upscaling.md row 3): its shaders. Adds AMD's FidelityFX SDK v1.1.4 GPU sources under third_party/fidelityfx-sdk, unmodified and MIT, with a provenance note, and scripts/fsr3_shaders.py to compile the eleven variants into gpu/vk/shaders/fsr3_*_comp_spv.h. Eleven, not eight: the eight passes, plus wave-free variants of both pyramids for devices without the subgroup operations the single-pass downsampler prefers, and an accumulate compiled with sharpening on. The option set lives in one place in the script because each option is a promise about the inputs -- HDR colour, low-resolution motion that is not jittered, reversed depth -- and the host code has to hand the passes what they were compiled for. This is the SDK-source route rather than AMD's FidelityFX API, so no runtime library is needed, none is included, and one code path serves Windows and Linux. #577 vendors AMD's API headers for the other route under third_party/fidelityfx; if both land, one should go, and the doc says so. The headers are checked in, like every other shader in gpu/vk/shaders, so a clone builds with no glslang. tests/test_fsr3_shaders.py recompiles all eleven and compares, and validates each module with spirv-val, so the headers cannot drift from their sources and an invalid module is caught here rather than on a device. It is wired into run_all's tool table, and glslang-tools is added to the Linux CI step that had spirv-tools only. That costs about 1.3 MB of generated hex. Generating at build time would remove it at the price of a glslang dependency for every build; the doc records the trade rather than deciding it. No renderer change: nothing includes these headers yet. The host side that records the passes is the next commit. Checked here: all eleven compile and pass spirv-val, the check passes, and it fails as it should on a changed word in a header, a changed compile option and a missing header. python -I -B tests/run_all.py: 90 passed, with the same 8 failures and 12 skips as upstream/main (a missing clang++ or SPIR-V headers). Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- .github/workflows/source-regressions.yml | 2 +- docs/upscaling.md | 17 +- gpu/vk/shaders/fsr3_accumulate_comp_spv.h | 1995 +++++++++++ .../fsr3_accumulate_sharpen_comp_spv.h | 1980 +++++++++++ .../shaders/fsr3_luma_instability_comp_spv.h | 543 +++ gpu/vk/shaders/fsr3_luma_pyramid_comp_spv.h | 1527 +++++++++ .../fsr3_luma_pyramid_nowave_comp_spv.h | 1567 +++++++++ gpu/vk/shaders/fsr3_prepare_inputs_comp_spv.h | 562 ++++ .../fsr3_prepare_reactivity_comp_spv.h | 1083 ++++++ gpu/vk/shaders/fsr3_rcas_comp_spv.h | 694 ++++ gpu/vk/shaders/fsr3_shading_change_comp_spv.h | 282 ++ .../fsr3_shading_change_pyramid_comp_spv.h | 1903 +++++++++++ ...3_shading_change_pyramid_nowave_comp_spv.h | 1942 +++++++++++ scripts/fsr3_shaders.py | 118 + tests/run_all.py | 2 + tests/test_fsr3_shaders.py | 33 + third_party/fidelityfx-sdk/LICENSE.txt | 21 + third_party/fidelityfx-sdk/PROVENANCE.md | 24 + .../include/FidelityFX/gpu/ffx_common_types.h | 558 +++ .../include/FidelityFX/gpu/ffx_core.h | 80 + .../include/FidelityFX/gpu/ffx_core_glsl.h | 1916 +++++++++++ .../FidelityFX/gpu/ffx_core_gpu_common.h | 2736 +++++++++++++++ .../FidelityFX/gpu/ffx_core_gpu_common_half.h | 2981 +++++++++++++++++ .../FidelityFX/gpu/ffx_core_portability.h | 46 + .../include/FidelityFX/gpu/fsr1/ffx_fsr1.h | 1252 +++++++ .../ffx_fsr3upscaler_accumulate.h | 172 + .../ffx_fsr3upscaler_callbacks_glsl.h | 903 +++++ .../fsr3upscaler/ffx_fsr3upscaler_common.h | 403 +++ .../ffx_fsr3upscaler_luma_instability.h | 115 + .../ffx_fsr3upscaler_luma_pyramid.h | 192 ++ .../ffx_fsr3upscaler_prepare_inputs.h | 152 + .../ffx_fsr3upscaler_prepare_reactivity.h | 283 ++ .../gpu/fsr3upscaler/ffx_fsr3upscaler_rcas.h | 112 + .../fsr3upscaler/ffx_fsr3upscaler_reproject.h | 79 + .../fsr3upscaler/ffx_fsr3upscaler_resources.h | 100 + .../fsr3upscaler/ffx_fsr3upscaler_sample.h | 628 ++++ .../ffx_fsr3upscaler_shading_change.h | 68 + .../ffx_fsr3upscaler_shading_change_pyramid.h | 297 ++ .../fsr3upscaler/ffx_fsr3upscaler_upsample.h | 644 ++++ .../include/FidelityFX/gpu/spd/ffx_spd.h | 1014 ++++++ .../ffx_fsr3upscaler_accumulate_pass.glsl | 75 + ...fx_fsr3upscaler_luma_instability_pass.glsl | 62 + .../ffx_fsr3upscaler_luma_pyramid_pass.glsl | 65 + .../ffx_fsr3upscaler_prepare_inputs_pass.glsl | 61 + ..._fsr3upscaler_prepare_reactivity_pass.glsl | 65 + .../ffx_fsr3upscaler_rcas_pass.glsl | 59 + .../ffx_fsr3upscaler_shading_change_pass.glsl | 55 + ...3upscaler_shading_change_pyramid_pass.glsl | 67 + 48 files changed, 29531 insertions(+), 4 deletions(-) create mode 100644 gpu/vk/shaders/fsr3_accumulate_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_accumulate_sharpen_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_luma_instability_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_luma_pyramid_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_luma_pyramid_nowave_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_prepare_inputs_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_prepare_reactivity_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_rcas_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_shading_change_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_shading_change_pyramid_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_shading_change_pyramid_nowave_comp_spv.h create mode 100644 scripts/fsr3_shaders.py create mode 100644 tests/test_fsr3_shaders.py create mode 100644 third_party/fidelityfx-sdk/LICENSE.txt create mode 100644 third_party/fidelityfx-sdk/PROVENANCE.md create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/ffx_common_types.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/ffx_core.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/ffx_core_glsl.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/ffx_core_gpu_common.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/ffx_core_gpu_common_half.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/ffx_core_portability.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr1/ffx_fsr1.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_accumulate.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_callbacks_glsl.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_common.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_luma_instability.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_luma_pyramid.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_prepare_inputs.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_prepare_reactivity.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_rcas.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_reproject.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_resources.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_sample.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_shading_change.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_shading_change_pyramid.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_upsample.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/spd/ffx_spd.h create mode 100644 third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_accumulate_pass.glsl create mode 100644 third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_luma_instability_pass.glsl create mode 100644 third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_luma_pyramid_pass.glsl create mode 100644 third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_prepare_inputs_pass.glsl create mode 100644 third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_prepare_reactivity_pass.glsl create mode 100644 third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_rcas_pass.glsl create mode 100644 third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_shading_change_pass.glsl create mode 100644 third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_shading_change_pyramid_pass.glsl diff --git a/.github/workflows/source-regressions.yml b/.github/workflows/source-regressions.yml index 42bdf63f0..7515deb01 100644 --- a/.github/workflows/source-regressions.yml +++ b/.github/workflows/source-regressions.yml @@ -56,7 +56,7 @@ jobs: run: python -m pip install --disable-pip-version-check --no-deps zstandard==0.25.0 - name: Compilers and the SPIR-V validator if: runner.os == 'Linux' - run: sudo apt-get update && sudo apt-get install -y g++ clang spirv-tools + run: sudo apt-get update && sudo apt-get install -y g++ clang spirv-tools glslang-tools # (the steps below all run when one before them failed, so one run shows every failure) - name: Check Windows native source regressions diff --git a/docs/upscaling.md b/docs/upscaling.md index 1f91f65cb..bdec33782 100644 --- a/docs/upscaling.md +++ b/docs/upscaling.md @@ -114,9 +114,20 @@ unmodified. There are two integration routes, and they are not interchangeable: - *The FidelityFX SDK sources*, where the upscaler's passes are recorded from AMD's MIT shader sources and no runtime library is needed at all. This is the route that works on Linux as well as Windows. -A second copy of FidelityFX in this tree would be worse than either. Whichever route a backend takes, it should build -on the vendored copy #577 is adding rather than add its own folder, and declare that dependency the way #577 declares -its own. +This tree takes the **SDK-source route**, under `third_party/fidelityfx-sdk/` with its provenance note: AMD's GPU +headers and the eight upscaler passes from SDK v1.1.4, unmodified, MIT. No runtime library is needed and none is +included, and the same code path serves Windows and Linux. + +The eleven variants (the eight passes, plus wave-free pyramids and a sharpening accumulate) are compiled by +`scripts/fsr3_shaders.py` into `gpu/vk/shaders/fsr3_*_comp_spv.h` and **checked in**, like every other shader here, so +a clone still builds with no glslang. `tests/test_fsr3_shaders.py` recompiles them all and compares, so the headers +and their sources cannot drift apart, and validates each module. That costs about 1.3 MB of generated hex in the +repository; generating them at build time instead would remove that at the price of a glslang dependency for every +build, and is the maintainer's call rather than something to decide in a patch. + +Note that #577 vendors AMD's *API* headers under `third_party/fidelityfx/` for the other route. The two folders are +different things — API headers against a runtime library, versus GPU sources compiled here — but if both land, one of +them should go. **DLSS.** The Streamline headers are MIT and can be vendored the same way. **The runtime libraries are not**, must not be committed, and must not be bundled in a release. The user supplies them, or the diff --git a/gpu/vk/shaders/fsr3_accumulate_comp_spv.h b/gpu/vk/shaders/fsr3_accumulate_comp_spv.h new file mode 100644 index 000000000..d746783c1 --- /dev/null +++ b/gpu/vk/shaders/fsr3_accumulate_comp_spv.h @@ -0,0 +1,1995 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_ACCUMULATE_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x00000924,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000031,0x00020011,0x00000032,0x00020011,0x00000038,0x0006000b,0x00000001,0x4c534c47, + 0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,0x0006000f,0x00000005, + 0x00000004,0x6e69616d,0x00000000,0x00000912,0x00060010,0x00000004,0x00000011,0x00000008, + 0x00000008,0x00000001,0x00030003,0x00000002,0x000001c2,0x000b0004,0x455f4c47,0x735f5458, + 0x6c706d61,0x656c7265,0x745f7373,0x75747865,0x665f6572,0x74636e75,0x736e6f69,0x00000000, + 0x000b0004,0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972, + 0x6974656d,0x79745f63,0x00736570,0x000a0004,0x455f4c47,0x735f5458,0x65646168,0x6d695f72, + 0x5f656761,0x64616f6c,0x726f665f,0x7474616d,0x00006465,0x000a0004,0x475f4c47,0x4c474f4f, + 0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004, + 0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669,0x00040005, + 0x00000004,0x6e69616d,0x00000000,0x00070005,0x0000000c,0x4c786666,0x28707265,0x663b3166, + 0x31663b31,0x0000003b,0x00030005,0x00000009,0x00000078,0x00030005,0x0000000a,0x00000079, + 0x00030005,0x0000000b,0x00000074,0x00070005,0x00000014,0x4c786666,0x28707265,0x3b336676, + 0x3b336676,0x003b3166,0x00030005,0x00000011,0x00000078,0x00030005,0x00000012,0x00000079, + 0x00030005,0x00000013,0x00000074,0x00060005,0x00000018,0x53786666,0x72757461,0x28657461, + 0x003b3166,0x00030005,0x00000017,0x00000078,0x00060005,0x0000001e,0x46786666,0x74636172, + 0x32667628,0x0000003b,0x00030005,0x0000001d,0x00000078,0x00060005,0x00000023,0x4d786666, + 0x66286e69,0x31663b31,0x0000003b,0x00030005,0x00000021,0x00000078,0x00030005,0x00000022, + 0x00000079,0x00060005,0x00000028,0x4d786666,0x76286e69,0x763b3266,0x003b3266,0x00030005, + 0x00000026,0x00000078,0x00030005,0x00000027,0x00000079,0x00060005,0x0000002d,0x4d786666, + 0x76286e69,0x763b3366,0x003b3366,0x00030005,0x0000002b,0x00000078,0x00030005,0x0000002c, + 0x00000079,0x00060005,0x00000034,0x4d786666,0x76286e69,0x763b3466,0x003b3466,0x00030005, + 0x00000032,0x00000078,0x00030005,0x00000033,0x00000079,0x00060005,0x0000003b,0x4d786666, + 0x69286e69,0x31693b31,0x0000003b,0x00030005,0x00000039,0x00000078,0x00030005,0x0000003a, + 0x00000079,0x00060005,0x0000003f,0x4d786666,0x66287861,0x31663b31,0x0000003b,0x00030005, + 0x0000003d,0x00000078,0x00030005,0x0000003e,0x00000079,0x00060005,0x00000043,0x4d786666, + 0x76287861,0x763b3266,0x003b3266,0x00030005,0x00000041,0x00000078,0x00030005,0x00000042, + 0x00000079,0x00060005,0x00000047,0x4d786666,0x76287861,0x763b3366,0x003b3366,0x00030005, + 0x00000045,0x00000078,0x00030005,0x00000046,0x00000079,0x00060005,0x0000004b,0x4d786666, + 0x76287861,0x763b3466,0x003b3466,0x00030005,0x00000049,0x00000078,0x00030005,0x0000004a, + 0x00000079,0x00060005,0x0000004f,0x4d786666,0x69287861,0x31693b31,0x0000003b,0x00030005, + 0x0000004d,0x00000078,0x00030005,0x0000004e,0x00000079,0x00060005,0x00000053,0x50786666, + 0x6628776f,0x31663b31,0x0000003b,0x00030005,0x00000051,0x00000078,0x00030005,0x00000052, + 0x00000079,0x00050005,0x00000057,0x646e6552,0x69537265,0x0028657a,0x00060005,0x00000059, + 0x5278614d,0x65646e65,0x7a695372,0x00002865,0x00060005,0x0000005b,0x63737055,0x53656c61, + 0x28657a69,0x00000000,0x00090005,0x0000005d,0x76657250,0x73756f69,0x6d617246,0x73705565, + 0x656c6163,0x657a6953,0x00000028,0x00040005,0x00000060,0x7474694a,0x00287265,0x00070005, + 0x00000062,0x6e776f44,0x6c616373,0x63614665,0x28726f74,0x00000000,0x00080005,0x00000065, + 0x7474694a,0x65537265,0x6e657571,0x654c6563,0x6874676e,0x00000028,0x00070005,0x00000067, + 0x746c6544,0x65725061,0x6f707845,0x65727573,0x00000028,0x00050005,0x00000069,0x6d617246, + 0x646e4965,0x00287865,0x00060005,0x0000006b,0x6f6c6556,0x79746963,0x74636146,0x0028726f, + 0x00070005,0x00000070,0x64616f4c,0x75706e49,0x6c6f4374,0x7628726f,0x003b3269,0x00040005, + 0x0000006f,0x50785069,0x0000736f,0x00070005,0x00000074,0x64616f4c,0x74736948,0x2879726f, + 0x3b326976,0x00000000,0x00050005,0x00000073,0x48785069,0x6f747369,0x00007972,0x000c0005, + 0x00000079,0x726f7453,0x746e4965,0x616e7265,0x6c6f436c,0x6e41726f,0x69655764,0x28746867, + 0x3b326976,0x3b346676,0x00000000,0x00040005,0x00000077,0x50785069,0x0000736f,0x00060005, + 0x00000078,0x6c6f4366,0x6e41726f,0x69655764,0x00746867,0x000a0005,0x0000007e,0x726f7453, + 0x73705565,0x656c6163,0x74754f64,0x28747570,0x3b326976,0x3b336676,0x00000000,0x00040005, + 0x0000007c,0x50785069,0x0000736f,0x00040005,0x0000007d,0x6c6f4366,0x0000726f,0x000c0005, + 0x00000080,0x46746547,0x68747261,0x44747365,0x68747065,0x3170694d,0x6f736552,0x65637275, + 0x656d6944,0x6f69736e,0x0028736e,0x000a0005,0x00000084,0x706d6153,0x6146656c,0x65687472, + 0x65447473,0x4d687470,0x28317069,0x3b326676,0x00000000,0x00030005,0x00000083,0x00565566, + 0x00090005,0x00000087,0x706d6153,0x754c656c,0x6e49616d,0x62617473,0x74696c69,0x66762879, + 0x00003b32,0x00030005,0x00000086,0x00007675,0x00070005,0x0000008b,0x64616f4c,0x654e7752, + 0x636f4c77,0x7628736b,0x003b3269,0x00040005,0x0000008a,0x50785069,0x0000736f,0x00080005, + 0x00000090,0x726f7453,0x77654e65,0x6b636f4c,0x69762873,0x31663b32,0x0000003b,0x00040005, + 0x0000008e,0x50785069,0x0000736f,0x00040005,0x0000008f,0x4c77656e,0x006b636f,0x000a0005, + 0x00000094,0x64616f4c,0x616c6944,0x4d646574,0x6f69746f,0x6365566e,0x28726f74,0x3b326976, + 0x00000000,0x00050005,0x00000093,0x49785069,0x7475706e,0x00000000,0x00050005,0x00000096, + 0x6f707845,0x65727573,0x00000028,0x000a0005,0x0000009a,0x706d6153,0x6944656c,0x6574616c, + 0x61655264,0x76697463,0x73614d65,0x7628736b,0x003b3266,0x00030005,0x00000099,0x00565566, + 0x00070005,0x0000009d,0x34746547,0x6c65564b,0x7469636f,0x66762879,0x00003b32,0x00060005, + 0x0000009c,0x746f4d66,0x566e6f69,0x6f746365,0x00000072,0x00070005,0x0000009f,0x74636552, + 0x63696669,0x6f697461,0x786f426e,0x00000000,0x00060006,0x0000009f,0x00000000,0x43786f62, + 0x65746e65,0x00000072,0x00050006,0x0000009f,0x00000001,0x56786f62,0x00006365,0x00050006, + 0x0000009f,0x00000002,0x62626161,0x006e694d,0x00050006,0x0000009f,0x00000003,0x62626161, + 0x0078614d,0x00080006,0x0000009f,0x00000004,0x786f4266,0x746e6543,0x65577265,0x74686769, + 0x00000000,0x00180005,0x000000a5,0x74636552,0x63696669,0x6f697461,0x786f426e,0x49646441, + 0x6974696e,0x61536c61,0x656c706d,0x72747328,0x2d746375,0x74636552,0x63696669,0x6f697461, + 0x786f426e,0x3366762d,0x3366762d,0x3366762d,0x3366762d,0x3131662d,0x3366763b,0x3b31663b, + 0x00000000,0x00070005,0x000000a2,0x74636572,0x63696669,0x6f697461,0x786f426e,0x00000000, + 0x00050005,0x000000a3,0x6f6c6f63,0x6d615372,0x00656c70,0x00060005,0x000000a4,0x6d615366, + 0x57656c70,0x68676965,0x00000074,0x00170005,0x000000ae,0x74636552,0x63696669,0x6f697461, + 0x786f426e,0x53646441,0x6c706d61,0x31622865,0x7274733b,0x2d746375,0x74636552,0x63696669, + 0x6f697461,0x786f426e,0x3366762d,0x3366762d,0x3366762d,0x3366762d,0x3131662d,0x3366763b, + 0x3b31663b,0x00000000,0x00060005,0x000000aa,0x696e4962,0x6c616974,0x706d6153,0x0000656c, + 0x00070005,0x000000ab,0x74636572,0x63696669,0x6f697461,0x786f426e,0x00000000,0x00050005, + 0x000000ac,0x6f6c6f63,0x6d615372,0x00656c70,0x00060005,0x000000ad,0x6d615366,0x57656c70, + 0x68676965,0x00000074,0x00170005,0x000000b2,0x74636552,0x63696669,0x6f697461,0x786f426e, + 0x706d6f43,0x56657475,0x61697261,0x4265636e,0x6144786f,0x73286174,0x63757274,0x65522d74, + 0x66697463,0x74616369,0x426e6f69,0x762d786f,0x762d3366,0x762d3366,0x762d3366,0x662d3366, + 0x003b3131,0x00070005,0x000000b1,0x74636572,0x63696669,0x6f697461,0x786f426e,0x00000000, + 0x00060005,0x000000b6,0x436f4359,0x526f5467,0x76284247,0x003b3366,0x00040005,0x000000b5, + 0x6f435966,0x00006743,0x00060005,0x000000b9,0x54424752,0x6f43596f,0x76286743,0x003b3366, + 0x00040005,0x000000b8,0x62675266,0x00000000,0x00060005,0x000000bc,0x656e6f54,0x2870616d, + 0x3b336676,0x00000000,0x00040005,0x000000bb,0x62675266,0x00000000,0x00070005,0x000000bf, + 0x65766e49,0x54657372,0x6d656e6f,0x76287061,0x003b3366,0x00040005,0x000000be,0x62675266, + 0x00000000,0x00060005,0x000000c3,0x76557349,0x69736e49,0x76286564,0x003b3266,0x00030005, + 0x000000c2,0x00765566,0x00080005,0x000000c9,0x6d616c43,0x616f4c70,0x69762864,0x69763b32, + 0x69763b32,0x00003b32,0x00050005,0x000000c6,0x53785069,0x6c706d61,0x00000065,0x00050005, + 0x000000c7,0x4f785069,0x65736666,0x00000074,0x00060005,0x000000c8,0x78655469,0x65727574, + 0x657a6953,0x00000000,0x00080005,0x000000cf,0x6d616c43,0x28765570,0x3b326676,0x3b326976, + 0x3b326976,0x00000000,0x00030005,0x000000cc,0x00765566,0x00060005,0x000000cd,0x78655469, + 0x65727574,0x657a6953,0x00000000,0x00060005,0x000000ce,0x73655269,0x6372756f,0x7a695365, + 0x00000065,0x00070005,0x000000d4,0x6e4f7349,0x65726353,0x76286e65,0x763b3269,0x003b3269, + 0x00030005,0x000000d2,0x00736f70,0x00040005,0x000000d3,0x657a6973,0x00000000,0x00070005, + 0x000000d7,0x636e614c,0x32736f7a,0x6c436f4e,0x28706d61,0x003b3166,0x00030005,0x000000d6, + 0x00000078,0x00060005,0x000000da,0x636e614c,0x32736f7a,0x3b316628,0x00000000,0x00030005, + 0x000000d9,0x00000078,0x00090005,0x000000dd,0x636e614c,0x32736f7a,0x72707041,0x7153786f, + 0x6c436f4e,0x28706d61,0x003b3166,0x00030005,0x000000dc,0x00003278,0x00080005,0x000000e0, + 0x636e614c,0x32736f7a,0x72707041,0x7153786f,0x3b316628,0x00000000,0x00030005,0x000000df, + 0x00003278,0x000a0005,0x000000e8,0x636e614c,0x32736f7a,0x34667628,0x3466763b,0x3466763b, + 0x3466763b,0x3b31663b,0x00000000,0x00040005,0x000000e3,0x6c6f4366,0x0030726f,0x00040005, + 0x000000e4,0x6c6f4366,0x0031726f,0x00040005,0x000000e5,0x6c6f4366,0x0032726f,0x00040005, + 0x000000e6,0x6c6f4366,0x0033726f,0x00030005,0x000000e7,0x00000074,0x00080005,0x000000ea, + 0x63746546,0x42646568,0x62756369,0x61536369,0x656c706d,0x00000073,0x00060006,0x000000ea, + 0x00000000,0x6c6f4366,0x3030726f,0x00000000,0x00060006,0x000000ea,0x00000001,0x6c6f4366, + 0x3031726f,0x00000000,0x00060006,0x000000ea,0x00000002,0x6c6f4366,0x3032726f,0x00000000, + 0x00060006,0x000000ea,0x00000003,0x6c6f4366,0x3033726f,0x00000000,0x00060006,0x000000ea, + 0x00000004,0x6c6f4366,0x3130726f,0x00000000,0x00060006,0x000000ea,0x00000005,0x6c6f4366, + 0x3131726f,0x00000000,0x00060006,0x000000ea,0x00000006,0x6c6f4366,0x3132726f,0x00000000, + 0x00060006,0x000000ea,0x00000007,0x6c6f4366,0x3133726f,0x00000000,0x00060006,0x000000ea, + 0x00000008,0x6c6f4366,0x3230726f,0x00000000,0x00060006,0x000000ea,0x00000009,0x6c6f4366, + 0x3231726f,0x00000000,0x00060006,0x000000ea,0x0000000a,0x6c6f4366,0x3232726f,0x00000000, + 0x00060006,0x000000ea,0x0000000b,0x6c6f4366,0x3233726f,0x00000000,0x00060006,0x000000ea, + 0x0000000c,0x6c6f4366,0x3330726f,0x00000000,0x00060006,0x000000ea,0x0000000d,0x6c6f4366, + 0x3331726f,0x00000000,0x00060006,0x000000ea,0x0000000e,0x6c6f4366,0x3332726f,0x00000000, + 0x00060006,0x000000ea,0x0000000f,0x6c6f4366,0x3333726f,0x00000000,0x001d0005,0x000000ef, + 0x636e614c,0x32736f7a,0x72747328,0x2d746375,0x63746546,0x42646568,0x62756369,0x61536369, + 0x656c706d,0x66762d73,0x66762d34,0x66762d34,0x66762d34,0x66762d34,0x66762d34,0x66762d34, + 0x66762d34,0x66762d34,0x66762d34,0x66762d34,0x66762d34,0x66762d34,0x66762d34,0x66762d34, + 0x66762d34,0x763b3134,0x003b3266,0x00040005,0x000000ed,0x706d6153,0x0073656c,0x00040005, + 0x000000ee,0x46785066,0x00636172,0x00080005,0x000000f4,0x6d616c43,0x6f6f4370,0x76286472, + 0x763b3269,0x763b3269,0x003b3269,0x00050005,0x000000f1,0x53785069,0x6c706d61,0x00000065, + 0x00050005,0x000000f2,0x4f785069,0x65736666,0x00000074,0x00060005,0x000000f3,0x78655469, + 0x65727574,0x657a6953,0x00000000,0x00110005,0x000000f9,0x69726544,0x6e69676e,0x74732867, + 0x74637572,0x6365522d,0x69666974,0x69746163,0x6f426e6f,0x66762d78,0x66762d33,0x66762d33, + 0x66762d33,0x31662d33,0x66763b31,0x00003b33,0x00050005,0x000000f7,0x70696c63,0x676e6970, + 0x00786f42,0x00040005,0x000000f8,0x6c6f4366,0x0000726f,0x000b0005,0x000000fe,0x55746547, + 0x6d617370,0x4c656c70,0x7a636e61,0x6557736f,0x74686769,0x32667628,0x3b31663b,0x00000000, + 0x00070005,0x000000fc,0x63725366,0x706d6153,0x664f656c,0x74657366,0x00000000,0x00060005, + 0x000000fd,0x72654b66,0x576c656e,0x68676965,0x00000074,0x000a0005,0x00000100,0x75636341, + 0x616c756d,0x6e6f6974,0x73736150,0x6d6d6f43,0x61506e6f,0x736d6172,0x00000000,0x00060006, + 0x00000100,0x00000000,0x48785069,0x736f5072,0x00000000,0x00050006,0x00000100,0x00000001, + 0x55724866,0x00000076,0x00070006,0x00000100,0x00000002,0x55724c66,0x74694a76,0x65726574, + 0x00000064,0x00070006,0x00000100,0x00000003,0x55724c66,0x77485f76,0x706d6153,0x0072656c, + 0x00070006,0x00000100,0x00000004,0x746f4d66,0x566e6f69,0x6f746365,0x00000072,0x00080006, + 0x00000100,0x00000005,0x70655266,0x656a6f72,0x64657463,0x76557248,0x00000000,0x00060006, + 0x00000100,0x00000006,0x564b3466,0x636f6c65,0x00797469,0x00070006,0x00000100,0x00000007, + 0x73694466,0x6c63636f,0x6f697375,0x0000006e,0x00070006,0x00000100,0x00000008,0x61655266, + 0x76697463,0x73614d65,0x0000006b,0x00070006,0x00000100,0x00000009,0x61685366,0x676e6964, + 0x6e616843,0x00006567,0x00070006,0x00000100,0x0000000a,0x63634166,0x6c756d75,0x6f697461, + 0x0000006e,0x00090006,0x00000100,0x0000000b,0x6d754c66,0x736e4961,0x69626174,0x7974696c, + 0x74636146,0x0000726f,0x00090006,0x00000100,0x0000000c,0x72614666,0x73656874,0x70654474, + 0x6e496874,0x6574654d,0x00007372,0x00080006,0x00000100,0x0000000d,0x45734962,0x74736978, + 0x53676e69,0x6c706d61,0x00000065,0x00070006,0x00000100,0x0000000e,0x4e734962,0x61537765, + 0x656c706d,0x00000000,0x00080005,0x00000101,0x75636341,0x616c756d,0x6e6f6974,0x73736150, + 0x61746144,0x00000000,0x00060006,0x00000101,0x00000000,0x70696c63,0x676e6970,0x00786f42, + 0x00070006,0x00000101,0x00000001,0x73705566,0x6c706d61,0x6f436465,0x00726f6c,0x00080006, + 0x00000101,0x00000002,0x73705566,0x6c706d61,0x65576465,0x74686769,0x00000000,0x00070006, + 0x00000101,0x00000003,0x73694866,0x79726f74,0x6f6c6f43,0x00000072,0x00070006,0x00000101, + 0x00000004,0x73694866,0x79726f74,0x67696557,0x00007468,0x00050006,0x00000101,0x00000005, + 0x636f4c66,0x0000006b,0x000a0006,0x00000101,0x00000006,0x636f4c66,0x6e6f436b,0x62697274, + 0x6f697475,0x6968546e,0x61724673,0x0000656d,0x00360005,0x00000106,0x706d6f43,0x4d657475, + 0x654b7861,0x6c656e72,0x67696557,0x73287468,0x63757274,0x63412d74,0x756d7563,0x6974616c, + 0x61506e6f,0x6f437373,0x6e6f6d6d,0x61726150,0x762d736d,0x762d3269,0x762d3266,0x762d3266, + 0x762d3266,0x762d3266,0x662d3266,0x31662d31,0x2d31662d,0x662d3166,0x31662d31,0x2d31662d, + 0x622d3162,0x733b3131,0x63757274,0x63412d74,0x756d7563,0x6974616c,0x61506e6f,0x61447373, + 0x732d6174,0x63757274,0x65522d74,0x66697463,0x74616369,0x426e6f69,0x762d786f,0x762d3366, + 0x762d3366,0x762d3366,0x662d3366,0x762d3131,0x662d3366,0x66762d31,0x31662d33,0x2d31662d, + 0x3b313166,0x00000000,0x00040005,0x00000104,0x61726170,0x0000736d,0x00040005,0x00000105, + 0x61746164,0x00000000,0x00080005,0x00000109,0x64616f4c,0x70657250,0x64657261,0x6f6c6f43, + 0x69762872,0x00003b32,0x00050005,0x00000108,0x6d615369,0x50656c70,0x0000736f,0x00380005, + 0x0000010e,0x706d6f43,0x55657475,0x6d617370,0x64656c70,0x6f6c6f43,0x646e4172,0x67696557, + 0x73287468,0x63757274,0x63412d74,0x756d7563,0x6974616c,0x61506e6f,0x6f437373,0x6e6f6d6d, + 0x61726150,0x762d736d,0x762d3269,0x762d3266,0x762d3266,0x762d3266,0x762d3266,0x662d3266, + 0x31662d31,0x2d31662d,0x662d3166,0x31662d31,0x2d31662d,0x622d3162,0x733b3131,0x63757274, + 0x63412d74,0x756d7563,0x6974616c,0x61506e6f,0x61447373,0x732d6174,0x63757274,0x65522d74, + 0x66697463,0x74616369,0x426e6f69,0x762d786f,0x762d3366,0x762d3366,0x762d3366,0x662d3366, + 0x762d3131,0x662d3366,0x66762d31,0x31662d33,0x2d31662d,0x3b313166,0x00000000,0x00040005, + 0x0000010c,0x61726170,0x0000736d,0x00040005,0x0000010d,0x61746164,0x00000000,0x00070005, + 0x00000111,0x70617257,0x74736948,0x2879726f,0x3b326976,0x00000000,0x00050005,0x00000110, + 0x53785069,0x6c706d61,0x00000065,0x000a0005,0x00000116,0x63746546,0x73694868,0x79726f74, + 0x706d6153,0x2873656c,0x3b326976,0x3b326976,0x00000000,0x00050005,0x00000114,0x53785069, + 0x6c706d61,0x00000065,0x00060005,0x00000115,0x78655469,0x65727574,0x657a6953,0x00000000, + 0x00080005,0x0000011b,0x74736948,0x5379726f,0x6c706d61,0x66762865,0x69763b32,0x00003b32, + 0x00050005,0x00000119,0x53765566,0x6c706d61,0x00000065,0x00060005,0x0000011a,0x78655469, + 0x65727574,0x657a6953,0x00000000,0x00090005,0x00000120,0x4d746547,0x6f69746f,0x6365566e, + 0x28726f74,0x3b326976,0x3b326676,0x00000000,0x00050005,0x0000011e,0x48785069,0x736f5072, + 0x00000000,0x00040005,0x0000011f,0x55724866,0x00000076,0x001e0005,0x00000125,0x706d6f43, + 0x52657475,0x6f727065,0x7463656a,0x56556465,0x74732873,0x74637572,0x6363412d,0x6c756d75, + 0x6f697461,0x7361506e,0x6d6f4373,0x506e6f6d,0x6d617261,0x69762d73,0x66762d32,0x66762d32, + 0x66762d32,0x66762d32,0x66762d32,0x31662d32,0x2d31662d,0x662d3166,0x31662d31,0x2d31662d, + 0x622d3166,0x31622d31,0x00003b31,0x00040005,0x00000124,0x61726170,0x0000736d,0x00350005, + 0x00000129,0x72706552,0x63656a6f,0x73694874,0x79726f74,0x6f6c6f43,0x74732872,0x74637572, + 0x6363412d,0x6c756d75,0x6f697461,0x7361506e,0x6d6f4373,0x506e6f6d,0x6d617261,0x69762d73, + 0x66762d32,0x66762d32,0x66762d32,0x66762d32,0x66762d32,0x31662d32,0x2d31662d,0x662d3166, + 0x31662d31,0x2d31662d,0x622d3166,0x31622d31,0x74733b31,0x74637572,0x6363412d,0x6c756d75, + 0x6f697461,0x7361506e,0x74614473,0x74732d61,0x74637572,0x6365522d,0x69666974,0x69746163, + 0x6f426e6f,0x66762d78,0x66762d33,0x66762d33,0x66762d33,0x31662d33,0x66762d31,0x31662d33, + 0x3366762d,0x2d31662d,0x662d3166,0x003b3131,0x00040005,0x00000127,0x61726170,0x0000736d, + 0x00040005,0x00000128,0x61746164,0x00000000,0x00330005,0x0000012d,0x75636341,0x616c756d, + 0x73286574,0x63757274,0x63412d74,0x756d7563,0x6974616c,0x61506e6f,0x6f437373,0x6e6f6d6d, + 0x61726150,0x762d736d,0x762d3269,0x762d3266,0x762d3266,0x762d3266,0x762d3266,0x662d3266, + 0x31662d31,0x2d31662d,0x662d3166,0x31662d31,0x2d31662d,0x622d3162,0x733b3131,0x63757274, + 0x63412d74,0x756d7563,0x6974616c,0x61506e6f,0x61447373,0x732d6174,0x63757274,0x65522d74, + 0x66697463,0x74616369,0x426e6f69,0x762d786f,0x762d3366,0x762d3366,0x762d3366,0x662d3366, + 0x762d3131,0x662d3366,0x66762d31,0x31662d33,0x2d31662d,0x3b313166,0x00000000,0x00040005, + 0x0000012b,0x61726170,0x0000736d,0x00040005,0x0000012c,0x61746164,0x00000000,0x00340005, + 0x00000131,0x74636552,0x48796669,0x6f747369,0x73287972,0x63757274,0x63412d74,0x756d7563, + 0x6974616c,0x61506e6f,0x6f437373,0x6e6f6d6d,0x61726150,0x762d736d,0x762d3269,0x762d3266, + 0x762d3266,0x762d3266,0x762d3266,0x662d3266,0x31662d31,0x2d31662d,0x662d3166,0x31662d31, + 0x2d31662d,0x622d3162,0x733b3131,0x63757274,0x63412d74,0x756d7563,0x6974616c,0x61506e6f, + 0x61447373,0x732d6174,0x63757274,0x65522d74,0x66697463,0x74616369,0x426e6f69,0x762d786f, + 0x762d3366,0x762d3366,0x762d3366,0x662d3366,0x762d3131,0x662d3366,0x66762d31,0x31662d33, + 0x2d31662d,0x3b313166,0x00000000,0x00040005,0x0000012f,0x61726170,0x0000736d,0x00040005, + 0x00000130,0x61746164,0x00000000,0x00340005,0x00000136,0x61647055,0x6f4c6574,0x74536b63, + 0x73757461,0x72747328,0x2d746375,0x75636341,0x616c756d,0x6e6f6974,0x73736150,0x6d6d6f43, + 0x61506e6f,0x736d6172,0x3269762d,0x3266762d,0x3266762d,0x3266762d,0x3266762d,0x3266762d, + 0x2d31662d,0x662d3166,0x31662d31,0x2d31662d,0x662d3166,0x31622d31,0x3131622d,0x7274733b, + 0x2d746375,0x75636341,0x616c756d,0x6e6f6974,0x73736150,0x61746144,0x7274732d,0x2d746375, + 0x74636552,0x63696669,0x6f697461,0x786f426e,0x3366762d,0x3366762d,0x3366762d,0x3366762d, + 0x3131662d,0x3366762d,0x2d31662d,0x2d336676,0x662d3166,0x31662d31,0x00003b31,0x00040005, + 0x00000134,0x61726170,0x0000736d,0x00040005,0x00000135,0x61746164,0x00000000,0x00370005, + 0x0000013a,0x706d6f43,0x42657475,0x41657361,0x6d756363,0x74616c75,0x576e6f69,0x68676965, + 0x74732874,0x74637572,0x6363412d,0x6c756d75,0x6f697461,0x7361506e,0x6d6f4373,0x506e6f6d, + 0x6d617261,0x69762d73,0x66762d32,0x66762d32,0x66762d32,0x66762d32,0x66762d32,0x31662d32, + 0x2d31662d,0x662d3166,0x31662d31,0x2d31662d,0x622d3166,0x31622d31,0x74733b31,0x74637572, + 0x6363412d,0x6c756d75,0x6f697461,0x7361506e,0x74614473,0x74732d61,0x74637572,0x6365522d, + 0x69666974,0x69746163,0x6f426e6f,0x66762d78,0x66762d33,0x66762d33,0x66762d33,0x31662d33, + 0x66762d31,0x31662d33,0x3366762d,0x2d31662d,0x662d3166,0x003b3131,0x00040005,0x00000138, + 0x61726170,0x0000736d,0x00040005,0x00000139,0x61746164,0x00000000,0x00340005,0x00000140, + 0x74696e49,0x73736150,0x61746144,0x32697628,0x7274733b,0x2d746375,0x75636341,0x616c756d, + 0x6e6f6974,0x73736150,0x6d6d6f43,0x61506e6f,0x736d6172,0x3269762d,0x3266762d,0x3266762d, + 0x3266762d,0x3266762d,0x3266762d,0x2d31662d,0x662d3166,0x31662d31,0x2d31662d,0x662d3166, + 0x31622d31,0x3131622d,0x7274733b,0x2d746375,0x75636341,0x616c756d,0x6e6f6974,0x73736150, + 0x61746144,0x7274732d,0x2d746375,0x74636552,0x63696669,0x6f697461,0x786f426e,0x3366762d, + 0x3366762d,0x3366762d,0x3366762d,0x3131662d,0x3366762d,0x2d31662d,0x2d336676,0x662d3166, + 0x31662d31,0x00003b31,0x00050005,0x0000013d,0x48785069,0x736f5072,0x00000000,0x00040005, + 0x0000013e,0x61726170,0x0000736d,0x00040005,0x0000013f,0x61746164,0x00000000,0x00060005, + 0x00000144,0x75636341,0x616c756d,0x76286574,0x003b3269,0x00050005,0x00000143,0x48785069, + 0x736f5072,0x00000000,0x00070005,0x00000194,0x53466263,0x50553352,0x4c414353,0x745f5245, + 0x00000000,0x00060006,0x00000194,0x00000000,0x6e655269,0x53726564,0x00657a69,0x000a0006, + 0x00000194,0x00000001,0x65725069,0x756f6976,0x61724673,0x6552656d,0x7265646e,0x657a6953, + 0x00000000,0x00070006,0x00000194,0x00000002,0x73705569,0x656c6163,0x657a6953,0x00000000, + 0x000a0006,0x00000194,0x00000003,0x65725069,0x756f6976,0x61724673,0x7055656d,0x6c616373, + 0x7a695365,0x00000065,0x00070006,0x00000194,0x00000004,0x78614d69,0x646e6552,0x69537265, + 0x0000657a,0x00070006,0x00000194,0x00000005,0x78614d69,0x63737055,0x53656c61,0x00657a69, + 0x00080006,0x00000194,0x00000006,0x76654466,0x54656369,0x6569566f,0x70654477,0x00006874, + 0x00050006,0x00000194,0x00000007,0x74694a66,0x00726574,0x00090006,0x00000194,0x00000008, + 0x65725066,0x756f6976,0x61724673,0x694a656d,0x72657474,0x00000000,0x00080006,0x00000194, + 0x00000009,0x746f4d66,0x566e6f69,0x6f746365,0x61635372,0x0000656c,0x00080006,0x00000194, + 0x0000000a,0x776f4466,0x6163736e,0x6146656c,0x726f7463,0x00000000,0x000b0006,0x00000194, + 0x0000000b,0x746f4d66,0x566e6f69,0x6f746365,0x74694a72,0x43726574,0x65636e61,0x74616c6c, + 0x006e6f69,0x00060006,0x00000194,0x0000000c,0x6e615466,0x666c6148,0x00564f46,0x00090006, + 0x00000194,0x0000000d,0x74694a66,0x53726574,0x65757165,0x4c65636e,0x74676e65,0x00000068, + 0x00060006,0x00000194,0x0000000e,0x6c654466,0x69546174,0x0000656d,0x00080006,0x00000194, + 0x0000000f,0x6c654466,0x72506174,0x70784565,0x7275736f,0x00000065,0x000a0006,0x00000194, + 0x00000010,0x65695666,0x61705377,0x6f546563,0x6574654d,0x61467372,0x726f7463,0x00000000, + 0x00060006,0x00000194,0x00000011,0x61724666,0x6e49656d,0x00786564,0x00070006,0x00000194, + 0x00000012,0x6c655666,0x7469636f,0x63614679,0x00726f74,0x00080006,0x00000194,0x00000013, + 0x61655266,0x76697463,0x73656e65,0x61635373,0x0000656c,0x00080006,0x00000194,0x00000014, + 0x61685366,0x676e6964,0x6e616843,0x63536567,0x00656c61,0x000a0006,0x00000194,0x00000015, + 0x63634166,0x6c756d75,0x6f697461,0x6464416e,0x65506465,0x61724672,0x0000656d,0x000b0006, + 0x00000194,0x00000016,0x6e694d66,0x6f736944,0x756c6363,0x6e6f6973,0x75636341,0x616c756d, + 0x6e6f6974,0x00000000,0x00060005,0x00000196,0x53466263,0x70553352,0x6c616373,0x00007265, + 0x00080005,0x000001ce,0x6e695f72,0x5f747570,0x6f6c6f63,0x696a5f72,0x72657474,0x00006465, + 0x00090005,0x000001d5,0x6e695f72,0x6e726574,0x755f6c61,0x61637370,0x5f64656c,0x6f6c6f63, + 0x00000072,0x00090005,0x000001dd,0x695f7772,0x7265746e,0x5f6c616e,0x63737075,0x64656c61, + 0x6c6f635f,0x0000726f,0x00070005,0x000001e3,0x755f7772,0x61637370,0x5f64656c,0x7074756f, + 0x00007475,0x00080005,0x000001eb,0x61665f72,0x65687472,0x645f7473,0x68747065,0x70696d5f, + 0x00000031,0x00060005,0x000001f3,0x694c5f73,0x7261656e,0x6d616c43,0x00000070,0x00070005, + 0x000001fe,0x756c5f72,0x695f616d,0x6174736e,0x696c6962,0x00007974,0x00060005,0x00000209, + 0x6e5f7772,0x6c5f7765,0x736b636f,0x00000000,0x00090005,0x00000214,0x69645f72,0x6574616c, + 0x6f6d5f64,0x6e6f6974,0x6365765f,0x73726f74,0x00000000,0x00050005,0x0000021b,0x6f707865, + 0x65727573,0x00000000,0x00070005,0x0000021c,0x6e695f72,0x5f747570,0x6f707865,0x65727573, + 0x00000000,0x00090005,0x00000228,0x69645f72,0x6574616c,0x65725f64,0x69746361,0x6d5f6576, + 0x736b7361,0x00000000,0x00060005,0x0000023a,0x67696577,0x64657468,0x706d6153,0x0000656c, + 0x00040005,0x00000246,0x61726170,0x0000006d,0x00040005,0x0000024b,0x61726170,0x0000006d, + 0x00040005,0x0000024e,0x61726170,0x0000006d,0x00040005,0x00000251,0x61726170,0x0000006d, + 0x00040005,0x00000254,0x61726170,0x0000006d,0x00060005,0x00000257,0x67696577,0x64657468, + 0x706d6153,0x0000656c,0x00040005,0x00000283,0x44647473,0x00007665,0x00040005,0x00000290, + 0x62675266,0x00000000,0x00040005,0x000002ac,0x6f435966,0x00006743,0x00040005,0x000002d2, + 0x61726170,0x0000006d,0x00040005,0x000002d3,0x61726170,0x0000006d,0x00040005,0x000002d7, + 0x61726170,0x0000006d,0x00040005,0x000002da,0x61726170,0x0000006d,0x00040005,0x000002de, + 0x61726170,0x0000006d,0x00040005,0x000002df,0x61726170,0x0000006d,0x00040005,0x000002e8, + 0x61726170,0x0000006d,0x00040005,0x000002eb,0x61726170,0x0000006d,0x00040005,0x000002ef, + 0x61726170,0x0000006d,0x00040005,0x000002f2,0x61726170,0x0000006d,0x00040005,0x000002f5, + 0x61726170,0x0000006d,0x00040005,0x000002f6,0x61726170,0x0000006d,0x00040005,0x00000313, + 0x75736572,0x0000746c,0x00040005,0x0000031a,0x61726170,0x0000006d,0x00040005,0x0000031d, + 0x61726170,0x0000006d,0x00040005,0x0000031f,0x61726170,0x0000006d,0x00040005,0x00000320, + 0x61726170,0x0000006d,0x00040005,0x00000326,0x61726170,0x0000006d,0x00040005,0x00000329, + 0x61726170,0x0000006d,0x00040005,0x0000032b,0x61726170,0x0000006d,0x00040005,0x0000032c, + 0x61726170,0x0000006d,0x00060005,0x00000332,0x6d615366,0x4c656c70,0x7461636f,0x006e6f69, + 0x00070005,0x00000337,0x616c4366,0x6465706d,0x61636f4c,0x6e6f6974,0x00000000,0x00040005, + 0x0000033c,0x61726170,0x0000006d,0x00040005,0x0000033e,0x61726170,0x0000006d,0x00040005, + 0x00000340,0x61726170,0x0000006d,0x00040005,0x00000341,0x61726170,0x0000006d,0x00050005, + 0x00000343,0x616c4366,0x6465706d,0x00007655,0x00040005,0x00000371,0x61726170,0x0000006d, + 0x00040005,0x00000372,0x61726170,0x0000006d,0x00040005,0x00000374,0x61726170,0x0000006d, + 0x00030005,0x00000379,0x00000061,0x00030005,0x0000037e,0x00000062,0x00040005,0x00000390, + 0x61726170,0x0000006d,0x00040005,0x00000392,0x61726170,0x0000006d,0x00040005,0x00000394, + 0x61726170,0x0000006d,0x00050005,0x00000399,0x69655766,0x30746867,0x00000000,0x00040005, + 0x0000039d,0x61726170,0x0000006d,0x00050005,0x0000039f,0x69655766,0x31746867,0x00000000, + 0x00040005,0x000003a3,0x61726170,0x0000006d,0x00050005,0x000003a5,0x69655766,0x32746867, + 0x00000000,0x00040005,0x000003a8,0x61726170,0x0000006d,0x00050005,0x000003aa,0x69655766, + 0x33746867,0x00000000,0x00040005,0x000003ad,0x61726170,0x0000006d,0x00050005,0x000003c9, + 0x6c6f4366,0x3058726f,0x00000000,0x00040005,0x000003ca,0x61726170,0x0000006d,0x00040005, + 0x000003cd,0x61726170,0x0000006d,0x00040005,0x000003d0,0x61726170,0x0000006d,0x00040005, + 0x000003d3,0x61726170,0x0000006d,0x00040005,0x000003d6,0x61726170,0x0000006d,0x00050005, + 0x000003da,0x6c6f4366,0x3158726f,0x00000000,0x00040005,0x000003dd,0x61726170,0x0000006d, + 0x00040005,0x000003e0,0x61726170,0x0000006d,0x00040005,0x000003e3,0x61726170,0x0000006d, + 0x00040005,0x000003e6,0x61726170,0x0000006d,0x00040005,0x000003e9,0x61726170,0x0000006d, + 0x00050005,0x000003ed,0x6c6f4366,0x3258726f,0x00000000,0x00040005,0x000003f1,0x61726170, + 0x0000006d,0x00040005,0x000003f4,0x61726170,0x0000006d,0x00040005,0x000003f7,0x61726170, + 0x0000006d,0x00040005,0x000003fa,0x61726170,0x0000006d,0x00040005,0x000003fd,0x61726170, + 0x0000006d,0x00050005,0x00000401,0x6c6f4366,0x3358726f,0x00000000,0x00040005,0x00000404, + 0x61726170,0x0000006d,0x00040005,0x00000407,0x61726170,0x0000006d,0x00040005,0x0000040a, + 0x61726170,0x0000006d,0x00040005,0x0000040d,0x61726170,0x0000006d,0x00040005,0x00000410, + 0x61726170,0x0000006d,0x00050005,0x00000414,0x6c6f4366,0x5958726f,0x00000000,0x00040005, + 0x00000415,0x61726170,0x0000006d,0x00040005,0x00000417,0x61726170,0x0000006d,0x00040005, + 0x00000419,0x61726170,0x0000006d,0x00040005,0x0000041b,0x61726170,0x0000006d,0x00040005, + 0x0000041d,0x61726170,0x0000006d,0x00070005,0x00000424,0x72654466,0x69676e69,0x6153676e, + 0x656c706d,0x00000073,0x00060005,0x0000042e,0x72654466,0x69676e69,0x694d676e,0x0000006e, + 0x00060005,0x00000431,0x72654466,0x69676e69,0x614d676e,0x00000078,0x00060005,0x00000434, + 0x6d615369,0x49656c70,0x7865646e,0x00000000,0x00040005,0x0000043d,0x61726170,0x0000006d, + 0x00040005,0x0000043f,0x61726170,0x0000006d,0x00040005,0x00000444,0x61726170,0x0000006d, + 0x00040005,0x00000446,0x61726170,0x0000006d,0x00040005,0x00000453,0x75736572,0x0000746c, + 0x00040005,0x0000045a,0x61726170,0x0000006d,0x00040005,0x0000045d,0x61726170,0x0000006d, + 0x00040005,0x0000045f,0x61726170,0x0000006d,0x00040005,0x00000460,0x61726170,0x0000006d, + 0x00040005,0x00000466,0x61726170,0x0000006d,0x00040005,0x00000469,0x61726170,0x0000006d, + 0x00040005,0x0000046b,0x61726170,0x0000006d,0x00040005,0x0000046c,0x61726170,0x0000006d, + 0x00080005,0x00000478,0x63725366,0x706d6153,0x664f656c,0x74657366,0x73616942,0x00006465, + 0x00060005,0x0000047d,0x6d615366,0x57656c70,0x68676965,0x00000074,0x00040005,0x00000481, + 0x61726170,0x0000006d,0x00060005,0x00000486,0x72654b66,0x536c656e,0x42657a69,0x00736169, + 0x00040005,0x0000048f,0x61726170,0x0000006d,0x00040005,0x00000490,0x61726170,0x0000006d, + 0x00040005,0x00000495,0x62675266,0x00000000,0x00040005,0x00000497,0x61726170,0x0000006d, + 0x00040005,0x0000049a,0x61726170,0x0000006d,0x00040005,0x0000049b,0x61726170,0x0000006d, + 0x00060005,0x0000049f,0x65725066,0x65726170,0x6f435964,0x00006743,0x00040005,0x000004a0, + 0x61726170,0x0000006d,0x00060005,0x000004a6,0x74734466,0x7074754f,0x6f507475,0x00000073, + 0x00060005,0x000004aa,0x63725366,0x7074754f,0x6f507475,0x00000073,0x00060005,0x000004ae, + 0x63725369,0x75706e49,0x736f5074,0x00000000,0x00070005,0x000004b2,0x63725366,0x696a6e55, + 0x72657474,0x6f506465,0x00000073,0x00070005,0x000004b8,0x73614266,0x6d615365,0x4f656c70, + 0x65736666,0x00000074,0x00050005,0x000004bc,0x7366666f,0x4c547465,0x00000000,0x00050005, + 0x000004cd,0x696c4662,0x776f5270,0x00000000,0x00050005,0x000004d3,0x696c4662,0x6c6f4370, + 0x00000000,0x00050005,0x000004d9,0x66664f66,0x54746573,0x0000004c,0x00070005,0x000004dc, + 0x49734962,0x6974696e,0x61536c61,0x656c706d,0x00000000,0x00060005,0x000004df,0x6d615369, + 0x49656c70,0x7865646e,0x00000000,0x00030005,0x000004e0,0x00776f72,0x00030005,0x000004e8, + 0x006c6f63,0x00060005,0x000004f0,0x6d615369,0x43656c70,0x6f526c6f,0x00000077,0x00060005, + 0x00000504,0x63725369,0x706d6153,0x6f50656c,0x00000073,0x00060005,0x0000050a,0x6d615369, + 0x43656c70,0x64726f6f,0x00000000,0x00040005,0x0000050c,0x61726170,0x0000006d,0x00040005, + 0x0000050e,0x61726170,0x0000006d,0x00040005,0x0000050f,0x61726170,0x0000006d,0x00050005, + 0x00000514,0x6d615366,0x73656c70,0x00000000,0x00040005,0x00000516,0x61726170,0x0000006d, + 0x00040005,0x0000052c,0x61726170,0x0000006d,0x00040005,0x00000530,0x61726170,0x0000006d, + 0x00040005,0x00000532,0x61726170,0x0000006d,0x00060005,0x00000537,0x72654b66,0x426c656e, + 0x4d736169,0x00007861,0x00040005,0x00000538,0x61726170,0x0000006d,0x00060005,0x0000053c, + 0x72654b66,0x426c656e,0x4d736169,0x00006e69,0x00040005,0x00000541,0x61726170,0x0000006d, + 0x00040005,0x00000542,0x61726170,0x0000006d,0x00070005,0x00000544,0x72654b66,0x426c656e, + 0x57736169,0x68676965,0x00000074,0x00040005,0x0000054e,0x61726170,0x0000006d,0x00040005, + 0x00000550,0x61726170,0x0000006d,0x00040005,0x00000551,0x61726170,0x0000006d,0x00040005, + 0x00000553,0x61726170,0x0000006d,0x00040005,0x00000554,0x61726170,0x0000006d,0x00050005, + 0x00000556,0x72654b66,0x426c656e,0x00736169,0x00040005,0x00000557,0x61726170,0x0000006d, + 0x00040005,0x00000559,0x61726170,0x0000006d,0x00040005,0x0000055b,0x61726170,0x0000006d, + 0x00030005,0x0000055e,0x00776f72,0x00030005,0x00000566,0x006c6f63,0x00060005,0x0000056e, + 0x706d6173,0x6f43656c,0x776f526c,0x00000000,0x00040005,0x00000582,0x66664f66,0x00746573, + 0x00070005,0x00000587,0x63725366,0x706d6153,0x664f656c,0x74657366,0x00000000,0x00060005, + 0x0000058b,0x63725369,0x706d6153,0x6f50656c,0x00000073,0x00060005,0x00000591,0x536e4f66, + 0x65657263,0x6361466e,0x00726f74,0x00040005,0x00000594,0x61726170,0x0000006d,0x00040005, + 0x00000595,0x61726170,0x0000006d,0x00060005,0x0000059c,0x6d615366,0x57656c70,0x68676965, + 0x00000074,0x00040005,0x0000059e,0x61726170,0x0000006d,0x00040005,0x000005a0,0x61726170, + 0x0000006d,0x00070005,0x000005b2,0x63725366,0x706d6153,0x664f656c,0x74657366,0x00007153, + 0x00070005,0x000005b6,0x786f4266,0x706d6153,0x6557656c,0x74686769,0x00000000,0x00060005, + 0x000005bd,0x696e4962,0x6c616974,0x706d6153,0x0000656c,0x00040005,0x000005c7,0x61726170, + 0x0000006d,0x00040005,0x000005c9,0x61726170,0x0000006d,0x00040005,0x000005d5,0x61726170, + 0x0000006d,0x00040005,0x000005f4,0x61726170,0x0000006d,0x00040005,0x000005f7,0x61726170, + 0x0000006d,0x00040005,0x00000600,0x61726170,0x0000006d,0x00040005,0x00000604,0x61726170, + 0x0000006d,0x00040005,0x00000606,0x61726170,0x0000006d,0x00040005,0x0000060b,0x61726170, + 0x0000006d,0x00040005,0x00000610,0x706d6153,0x0073656c,0x00040005,0x00000612,0x61726170, + 0x0000006d,0x00040005,0x00000614,0x61726170,0x0000006d,0x00040005,0x00000615,0x61726170, + 0x0000006d,0x00040005,0x00000618,0x61726170,0x0000006d,0x00040005,0x0000061c,0x61726170, + 0x0000006d,0x00040005,0x0000061e,0x61726170,0x0000006d,0x00040005,0x0000061f,0x61726170, + 0x0000006d,0x00040005,0x00000622,0x61726170,0x0000006d,0x00040005,0x00000626,0x61726170, + 0x0000006d,0x00040005,0x00000628,0x61726170,0x0000006d,0x00040005,0x00000629,0x61726170, + 0x0000006d,0x00040005,0x0000062c,0x61726170,0x0000006d,0x00040005,0x00000630,0x61726170, + 0x0000006d,0x00040005,0x00000632,0x61726170,0x0000006d,0x00040005,0x00000633,0x61726170, + 0x0000006d,0x00040005,0x00000636,0x61726170,0x0000006d,0x00040005,0x0000063a,0x61726170, + 0x0000006d,0x00040005,0x0000063c,0x61726170,0x0000006d,0x00040005,0x0000063d,0x61726170, + 0x0000006d,0x00040005,0x00000640,0x61726170,0x0000006d,0x00040005,0x00000643,0x61726170, + 0x0000006d,0x00040005,0x00000645,0x61726170,0x0000006d,0x00040005,0x00000646,0x61726170, + 0x0000006d,0x00040005,0x00000649,0x61726170,0x0000006d,0x00040005,0x0000064d,0x61726170, + 0x0000006d,0x00040005,0x0000064f,0x61726170,0x0000006d,0x00040005,0x00000650,0x61726170, + 0x0000006d,0x00040005,0x00000653,0x61726170,0x0000006d,0x00040005,0x00000657,0x61726170, + 0x0000006d,0x00040005,0x00000659,0x61726170,0x0000006d,0x00040005,0x0000065a,0x61726170, + 0x0000006d,0x00040005,0x0000065d,0x61726170,0x0000006d,0x00040005,0x00000661,0x61726170, + 0x0000006d,0x00040005,0x00000663,0x61726170,0x0000006d,0x00040005,0x00000664,0x61726170, + 0x0000006d,0x00040005,0x00000667,0x61726170,0x0000006d,0x00040005,0x0000066b,0x61726170, + 0x0000006d,0x00040005,0x0000066d,0x61726170,0x0000006d,0x00040005,0x0000066e,0x61726170, + 0x0000006d,0x00040005,0x00000671,0x61726170,0x0000006d,0x00040005,0x00000675,0x61726170, + 0x0000006d,0x00040005,0x00000677,0x61726170,0x0000006d,0x00040005,0x00000678,0x61726170, + 0x0000006d,0x00040005,0x0000067b,0x61726170,0x0000006d,0x00040005,0x0000067f,0x61726170, + 0x0000006d,0x00040005,0x00000681,0x61726170,0x0000006d,0x00040005,0x00000682,0x61726170, + 0x0000006d,0x00040005,0x00000685,0x61726170,0x0000006d,0x00040005,0x00000689,0x61726170, + 0x0000006d,0x00040005,0x0000068b,0x61726170,0x0000006d,0x00040005,0x0000068c,0x61726170, + 0x0000006d,0x00040005,0x0000068f,0x61726170,0x0000006d,0x00040005,0x00000693,0x61726170, + 0x0000006d,0x00040005,0x00000695,0x61726170,0x0000006d,0x00040005,0x00000696,0x61726170, + 0x0000006d,0x00040005,0x00000699,0x61726170,0x0000006d,0x00040005,0x0000069d,0x61726170, + 0x0000006d,0x00040005,0x0000069f,0x61726170,0x0000006d,0x00040005,0x000006a0,0x61726170, + 0x0000006d,0x00040005,0x000006a3,0x61726170,0x0000006d,0x00040005,0x000006a7,0x61726170, + 0x0000006d,0x00040005,0x000006a9,0x61726170,0x0000006d,0x00040005,0x000006aa,0x61726170, + 0x0000006d,0x00040005,0x000006ad,0x61726170,0x0000006d,0x00050005,0x000006b3,0x53785066, + 0x6c706d61,0x00000065,0x00040005,0x000006b9,0x46785066,0x00636172,0x00040005,0x000006ba, + 0x61726170,0x0000006d,0x00040005,0x000006c1,0x61726170,0x0000006d,0x00040005,0x000006c2, + 0x61726170,0x0000006d,0x00040005,0x000006c6,0x61726170,0x0000006d,0x00040005,0x000006c7, + 0x61726170,0x0000006d,0x00040005,0x000006ce,0x61726170,0x0000006d,0x00040005,0x000006cf, + 0x61726170,0x0000006d,0x00040005,0x000006d3,0x61726170,0x0000006d,0x00040005,0x000006d4, + 0x61726170,0x0000006d,0x00050005,0x000006d7,0x53785069,0x6c706d61,0x00000065,0x00050005, + 0x000006db,0x6c6f4366,0x5958726f,0x00000000,0x00040005,0x000006dc,0x61726170,0x0000006d, + 0x00040005,0x000006de,0x61726170,0x0000006d,0x00040005,0x000006e1,0x61726170,0x0000006d, + 0x00040005,0x000006e2,0x61726170,0x0000006d,0x00080005,0x000006e8,0x6c694466,0x64657461, + 0x69746f4d,0x65566e6f,0x726f7463,0x00000000,0x00040005,0x000006ee,0x61726170,0x0000006d, + 0x00040005,0x000006f9,0x61726170,0x0000006d,0x00070005,0x000006fe,0x70655266,0x656a6f72, + 0x64657463,0x74736948,0x0079726f,0x00040005,0x00000700,0x61726170,0x0000006d,0x00040005, + 0x00000702,0x61726170,0x0000006d,0x00040005,0x00000711,0x61726170,0x0000006d,0x00040005, + 0x00000727,0x61726170,0x0000006d,0x00040005,0x00000728,0x61726170,0x0000006d,0x00040005, + 0x0000072b,0x61726170,0x0000006d,0x00040005,0x0000072f,0x61726170,0x0000006d,0x00040005, + 0x00000731,0x61726170,0x0000006d,0x00040005,0x00000734,0x61726170,0x0000006d,0x00040005, + 0x00000738,0x61726170,0x0000006d,0x00040005,0x0000073a,0x61726170,0x0000006d,0x00040005, + 0x0000073d,0x706c4166,0x00006168,0x00040005,0x00000743,0x61726170,0x0000006d,0x00040005, + 0x00000745,0x61726170,0x0000006d,0x00040005,0x00000748,0x61726170,0x0000006d,0x00040005, + 0x0000074b,0x61726170,0x0000006d,0x00040005,0x0000074f,0x61726170,0x0000006d,0x00040005, + 0x00000754,0x61726170,0x0000006d,0x00070005,0x00000759,0x566b3466,0x636f6c65,0x46797469, + 0x6f746361,0x00000072,0x00040005,0x0000075d,0x61726170,0x0000006d,0x00060005,0x0000075f, + 0x73694466,0x636e6174,0x63614665,0x00726f74,0x00040005,0x00000764,0x61726170,0x0000006d, + 0x00070005,0x00000766,0x63634166,0x6c756d75,0x6f697461,0x6361466e,0x00726f74,0x00060005, + 0x00000769,0x61655266,0x76697463,0x63614665,0x00726f74,0x00040005,0x0000076a,0x61726170, + 0x0000006d,0x00040005,0x0000076c,0x61726170,0x0000006d,0x00080005,0x0000076e,0x61685366, + 0x676e6964,0x6e616843,0x61466567,0x726f7463,0x00000000,0x00050005,0x00000770,0x786f4266, + 0x6c616353,0x00005465,0x00040005,0x00000771,0x61726170,0x0000006d,0x00040005,0x00000773, + 0x61726170,0x0000006d,0x00040005,0x00000776,0x61726170,0x0000006d,0x00040005,0x00000778, + 0x61726170,0x0000006d,0x00040005,0x0000077a,0x61726170,0x0000006d,0x00040005,0x0000077c, + 0x61726170,0x0000006d,0x00040005,0x0000077e,0x61726170,0x0000006d,0x00040005,0x00000780, + 0x61726170,0x0000006d,0x00050005,0x00000782,0x786f4266,0x6c616353,0x00000065,0x00040005, + 0x00000784,0x61726170,0x0000006d,0x00040005,0x00000785,0x61726170,0x0000006d,0x00040005, + 0x00000786,0x61726170,0x0000006d,0x00060005,0x00000789,0x61635366,0x4264656c,0x6556786f, + 0x00000063,0x00080005,0x00000791,0x616c4366,0x6465706d,0x6c616353,0x6f426465,0x63655678, + 0x00000000,0x00040005,0x00000794,0x61726170,0x0000006d,0x00040005,0x00000796,0x61726170, + 0x0000006d,0x00090005,0x00000798,0x61725466,0x6f66736e,0x64656d72,0x74736948,0x4379726f, + 0x726f6c6f,0x00000000,0x00080005,0x000007a5,0x616c4366,0x6465706d,0x74736948,0x4379726f, + 0x726f6c6f,0x00000000,0x00090005,0x000007a8,0x6e694666,0x6c436c61,0x65706d61,0x73694864, + 0x79726f74,0x6f6c6f43,0x00000072,0x00080005,0x000007af,0x73694866,0x79726f74,0x746e6f43, + 0x75626972,0x6e6f6974,0x00000000,0x00040005,0x000007b0,0x61726170,0x0000006d,0x00040005, + 0x000007b2,0x61726170,0x0000006d,0x00040005,0x000007bb,0x61726170,0x0000006d,0x00040005, + 0x000007be,0x61726170,0x0000006d,0x00040005,0x000007c0,0x61726170,0x0000006d,0x00040005, + 0x000007c3,0x61726170,0x0000006d,0x00080005,0x000007cf,0x66694c66,0x6d697465,0x63654465, + 0x73616572,0x63614665,0x00726f74,0x00040005,0x000007d0,0x61726170,0x0000006d,0x00040005, + 0x000007d4,0x61726170,0x0000006d,0x00040005,0x000007d7,0x61726170,0x0000006d,0x00040005, + 0x000007db,0x61726170,0x0000006d,0x00040005,0x000007dc,0x61726170,0x0000006d,0x00040005, + 0x000007e3,0x61726170,0x0000006d,0x00040005,0x000007e4,0x61726170,0x0000006d,0x00040005, + 0x000007ea,0x61726170,0x0000006d,0x00040005,0x000007ed,0x61726170,0x0000006d,0x00070005, + 0x000007f0,0x77654e66,0x6b636f4c,0x65746e49,0x7469736e,0x00000079,0x00040005,0x000007f1, + 0x61726170,0x0000006d,0x00040005,0x000007f8,0x61726170,0x0000006d,0x00040005,0x000007f9, + 0x61726170,0x0000006d,0x00040005,0x00000803,0x61726170,0x0000006d,0x00040005,0x00000804, + 0x61726170,0x0000006d,0x00040005,0x00000806,0x61726170,0x0000006d,0x00040005,0x00000807, + 0x61726170,0x0000006d,0x00070005,0x0000080a,0x66694c66,0x6d697465,0x63654465,0x73616572, + 0x00000065,0x00040005,0x00000815,0x61726170,0x0000006d,0x00040005,0x00000816,0x61726170, + 0x0000006d,0x00080005,0x00000819,0x74734566,0x74616d69,0x76556465,0x7478654e,0x6d617246, + 0x00000065,0x00040005,0x0000081f,0x61726170,0x0000006d,0x00070005,0x00000829,0x73614266, + 0x63634165,0x6c756d75,0x6f697461,0x0000006e,0x00040005,0x00000830,0x61726170,0x0000006d, + 0x00040005,0x00000831,0x61726170,0x0000006d,0x00040005,0x00000833,0x61726170,0x0000006d, + 0x00040005,0x00000835,0x61726170,0x0000006d,0x00040005,0x00000837,0x61726170,0x0000006d, + 0x00040005,0x00000838,0x61726170,0x0000006d,0x00040005,0x0000083a,0x61726170,0x0000006d, + 0x00040005,0x0000083c,0x61726170,0x0000006d,0x00040005,0x00000842,0x55724866,0x00000076, + 0x00040005,0x00000855,0x61726170,0x0000006d,0x00040005,0x00000858,0x61726170,0x0000006d, + 0x00040005,0x00000859,0x61726170,0x0000006d,0x00040005,0x0000085c,0x61726170,0x0000006d, + 0x00040005,0x0000085e,0x61726170,0x0000006d,0x00040005,0x00000862,0x61726170,0x0000006d, + 0x00040005,0x00000867,0x61726170,0x0000006d,0x00080005,0x0000086b,0x6d754c66,0x736e4961, + 0x69626174,0x7974696c,0x485f7655,0x00000057,0x00040005,0x0000086e,0x61726170,0x0000006d, + 0x00040005,0x00000870,0x61726170,0x0000006d,0x00040005,0x00000871,0x61726170,0x0000006d, + 0x00040005,0x00000873,0x61726170,0x0000006d,0x00070005,0x00000877,0x72614666,0x73656874, + 0x70654474,0x76556874,0x00000000,0x00040005,0x0000087c,0x61726170,0x0000006d,0x00040005, + 0x0000087f,0x61726170,0x0000006d,0x00040005,0x00000880,0x61726170,0x0000006d,0x00040005, + 0x00000882,0x61726170,0x0000006d,0x00080005,0x00000890,0x6c694466,0x64657461,0x63616552, + 0x65766974,0x6b73614d,0x00000073,0x00040005,0x00000891,0x61726170,0x0000006d,0x00040005, + 0x00000895,0x61726170,0x0000006d,0x00040005,0x0000089a,0x61726170,0x0000006d,0x00040005, + 0x0000089f,0x61726170,0x0000006d,0x00040005,0x000008a4,0x61726170,0x0000006d,0x00040005, + 0x000008ba,0x61726170,0x0000736d,0x00040005,0x000008bb,0x61746164,0x00000000,0x00040005, + 0x000008bc,0x61726170,0x0000006d,0x00040005,0x000008be,0x61726170,0x0000006d,0x00040005, + 0x000008c0,0x61726170,0x0000006d,0x00040005,0x000008d0,0x61726170,0x0000006d,0x00040005, + 0x000008d4,0x61726170,0x0000006d,0x00040005,0x000008d6,0x61726170,0x0000006d,0x00040005, + 0x000008db,0x61726170,0x0000006d,0x00040005,0x000008e0,0x61726170,0x0000006d,0x00040005, + 0x000008e5,0x61726170,0x0000006d,0x00040005,0x000008ea,0x61726170,0x0000006d,0x00040005, + 0x000008f4,0x61726170,0x0000006d,0x00040005,0x000008f7,0x61726170,0x0000006d,0x00040005, + 0x00000902,0x61726170,0x0000006d,0x00040005,0x00000904,0x61726170,0x0000006d,0x00040005, + 0x00000906,0x61726170,0x0000006d,0x00040005,0x00000908,0x61726170,0x0000006d,0x00040005, + 0x0000090c,0x61726170,0x0000006d,0x00040005,0x0000090e,0x61726170,0x0000006d,0x00080005, + 0x00000912,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00040005, + 0x00000916,0x61726170,0x0000006d,0x00060005,0x0000091a,0x6f505f73,0x43746e69,0x706d616c, + 0x00000000,0x00060005,0x0000091b,0x75635f72,0x6e657272,0x756c5f74,0x0000616d,0x00060005, + 0x0000091c,0x616c5f72,0x6f7a636e,0x756c5f73,0x00000074,0x00030047,0x00000194,0x00000002, + 0x00050048,0x00000194,0x00000000,0x00000023,0x00000000,0x00050048,0x00000194,0x00000001, + 0x00000023,0x00000008,0x00050048,0x00000194,0x00000002,0x00000023,0x00000010,0x00050048, + 0x00000194,0x00000003,0x00000023,0x00000018,0x00050048,0x00000194,0x00000004,0x00000023, + 0x00000020,0x00050048,0x00000194,0x00000005,0x00000023,0x00000028,0x00050048,0x00000194, + 0x00000006,0x00000023,0x00000030,0x00050048,0x00000194,0x00000007,0x00000023,0x00000040, + 0x00050048,0x00000194,0x00000008,0x00000023,0x00000048,0x00050048,0x00000194,0x00000009, + 0x00000023,0x00000050,0x00050048,0x00000194,0x0000000a,0x00000023,0x00000058,0x00050048, + 0x00000194,0x0000000b,0x00000023,0x00000060,0x00050048,0x00000194,0x0000000c,0x00000023, + 0x00000068,0x00050048,0x00000194,0x0000000d,0x00000023,0x0000006c,0x00050048,0x00000194, + 0x0000000e,0x00000023,0x00000070,0x00050048,0x00000194,0x0000000f,0x00000023,0x00000074, + 0x00050048,0x00000194,0x00000010,0x00000023,0x00000078,0x00050048,0x00000194,0x00000011, + 0x00000023,0x0000007c,0x00050048,0x00000194,0x00000012,0x00000023,0x00000080,0x00050048, + 0x00000194,0x00000013,0x00000023,0x00000084,0x00050048,0x00000194,0x00000014,0x00000023, + 0x00000088,0x00050048,0x00000194,0x00000015,0x00000023,0x0000008c,0x00050048,0x00000194, + 0x00000016,0x00000023,0x00000090,0x00040047,0x00000196,0x00000021,0x0000000c,0x00040047, + 0x00000196,0x00000022,0x00000000,0x00040047,0x000001ce,0x00000021,0x00000008,0x00040047, + 0x000001ce,0x00000022,0x00000000,0x00040047,0x000001d5,0x00000021,0x00000003,0x00040047, + 0x000001d5,0x00000022,0x00000000,0x00030047,0x000001dd,0x00000019,0x00040047,0x000001dd, + 0x00000021,0x00000009,0x00040047,0x000001dd,0x00000022,0x00000000,0x00030047,0x000001e3, + 0x00000019,0x00040047,0x000001e3,0x00000021,0x0000000a,0x00040047,0x000001e3,0x00000022, + 0x00000000,0x00040047,0x000001eb,0x00000021,0x00000005,0x00040047,0x000001eb,0x00000022, + 0x00000000,0x00040047,0x000001f3,0x00000021,0x000003e9,0x00040047,0x000001f3,0x00000022, + 0x00000000,0x00040047,0x000001fe,0x00000021,0x00000007,0x00040047,0x000001fe,0x00000022, + 0x00000000,0x00040047,0x00000209,0x00000021,0x0000000b,0x00040047,0x00000209,0x00000022, + 0x00000000,0x00040047,0x00000214,0x00000021,0x00000002,0x00040047,0x00000214,0x00000022, + 0x00000000,0x00040047,0x0000021c,0x00000021,0x00000000,0x00040047,0x0000021c,0x00000022, + 0x00000000,0x00040047,0x00000228,0x00000021,0x00000001,0x00040047,0x00000228,0x00000022, + 0x00000000,0x00040047,0x00000912,0x0000000b,0x0000001c,0x00040047,0x0000091a,0x00000021, + 0x000003e8,0x00040047,0x0000091a,0x00000022,0x00000000,0x00040047,0x0000091b,0x00000021, + 0x00000006,0x00040047,0x0000091b,0x00000022,0x00000000,0x00040047,0x0000091c,0x00000021, + 0x00000004,0x00040047,0x0000091c,0x00000022,0x00000000,0x00040047,0x00000923,0x0000000b, + 0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006, + 0x00000020,0x00040020,0x00000007,0x00000007,0x00000006,0x00060021,0x00000008,0x00000006, + 0x00000007,0x00000007,0x00000007,0x00040017,0x0000000e,0x00000006,0x00000003,0x00040020, + 0x0000000f,0x00000007,0x0000000e,0x00060021,0x00000010,0x0000000e,0x0000000f,0x0000000f, + 0x00000007,0x00040021,0x00000016,0x00000006,0x00000007,0x00040017,0x0000001a,0x00000006, + 0x00000002,0x00040020,0x0000001b,0x00000007,0x0000001a,0x00040021,0x0000001c,0x0000001a, + 0x0000001b,0x00050021,0x00000020,0x00000006,0x00000007,0x00000007,0x00050021,0x00000025, + 0x0000001a,0x0000001b,0x0000001b,0x00050021,0x0000002a,0x0000000e,0x0000000f,0x0000000f, + 0x00040017,0x0000002f,0x00000006,0x00000004,0x00040020,0x00000030,0x00000007,0x0000002f, + 0x00050021,0x00000031,0x0000002f,0x00000030,0x00000030,0x00040015,0x00000036,0x00000020, + 0x00000001,0x00040020,0x00000037,0x00000007,0x00000036,0x00050021,0x00000038,0x00000036, + 0x00000037,0x00000037,0x00040017,0x00000055,0x00000036,0x00000002,0x00030021,0x00000056, + 0x00000055,0x00030021,0x0000005f,0x0000001a,0x00030021,0x00000064,0x00000006,0x00040020, + 0x0000006d,0x00000007,0x00000055,0x00040021,0x0000006e,0x0000000e,0x0000006d,0x00040021, + 0x00000072,0x0000002f,0x0000006d,0x00050021,0x00000076,0x00000002,0x0000006d,0x00000030, + 0x00050021,0x0000007b,0x00000002,0x0000006d,0x0000000f,0x00040021,0x00000082,0x00000006, + 0x0000001b,0x00040021,0x00000089,0x00000006,0x0000006d,0x00050021,0x0000008d,0x00000002, + 0x0000006d,0x00000007,0x00040021,0x00000092,0x0000001a,0x0000006d,0x00040021,0x00000098, + 0x0000002f,0x0000001b,0x0007001e,0x0000009f,0x0000000e,0x0000000e,0x0000000e,0x0000000e, + 0x00000006,0x00040020,0x000000a0,0x00000007,0x0000009f,0x00060021,0x000000a1,0x00000002, + 0x000000a0,0x0000000e,0x00000006,0x00020014,0x000000a7,0x00040020,0x000000a8,0x00000007, + 0x000000a7,0x00070021,0x000000a9,0x00000002,0x000000a8,0x000000a0,0x0000000e,0x00000006, + 0x00040021,0x000000b0,0x00000002,0x000000a0,0x00040021,0x000000b4,0x0000000e,0x0000000f, + 0x00040021,0x000000c1,0x000000a7,0x0000001b,0x00060021,0x000000c5,0x00000055,0x0000006d, + 0x0000006d,0x0000006d,0x00060021,0x000000cb,0x0000001a,0x0000001b,0x0000006d,0x0000006d, + 0x00050021,0x000000d1,0x000000a7,0x0000006d,0x0000006d,0x00080021,0x000000e2,0x0000002f, + 0x00000030,0x00000030,0x00000030,0x00000030,0x00000007,0x0012001e,0x000000ea,0x0000002f, + 0x0000002f,0x0000002f,0x0000002f,0x0000002f,0x0000002f,0x0000002f,0x0000002f,0x0000002f, + 0x0000002f,0x0000002f,0x0000002f,0x0000002f,0x0000002f,0x0000002f,0x0000002f,0x00040020, + 0x000000eb,0x00000007,0x000000ea,0x00050021,0x000000ec,0x0000002f,0x000000eb,0x0000001b, + 0x00050021,0x000000f6,0x00000002,0x000000a0,0x0000000f,0x00050021,0x000000fb,0x00000006, + 0x0000001b,0x00000007,0x0011001e,0x00000100,0x00000055,0x0000001a,0x0000001a,0x0000001a, + 0x0000001a,0x0000001a,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006, + 0x00000006,0x000000a7,0x000000a7,0x0009001e,0x00000101,0x0000009f,0x0000000e,0x00000006, + 0x0000000e,0x00000006,0x00000006,0x00000006,0x00040020,0x00000102,0x00000007,0x00000101, + 0x00050021,0x00000103,0x00000006,0x00000100,0x00000102,0x00050021,0x0000010b,0x00000002, + 0x00000100,0x00000102,0x00050021,0x00000113,0x000000ea,0x0000006d,0x0000006d,0x00050021, + 0x00000118,0x0000002f,0x0000001b,0x0000006d,0x00050021,0x0000011d,0x0000001a,0x0000006d, + 0x0000001b,0x00040020,0x00000122,0x00000007,0x00000100,0x00040021,0x00000123,0x00000002, + 0x00000122,0x00050021,0x00000133,0x00000002,0x00000122,0x00000102,0x00060021,0x0000013c, + 0x00000002,0x0000006d,0x00000122,0x00000102,0x00040021,0x00000142,0x00000002,0x0000006d, + 0x0004002b,0x00000006,0x00000154,0x00000000,0x0004002b,0x00000006,0x00000155,0x3f800000, + 0x0019001e,0x00000194,0x00000055,0x00000055,0x00000055,0x00000055,0x00000055,0x00000055, + 0x0000002f,0x0000001a,0x0000001a,0x0000001a,0x0000001a,0x0000001a,0x00000006,0x00000006, + 0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006, + 0x00000006,0x00040020,0x00000195,0x00000002,0x00000194,0x0004003b,0x00000195,0x00000196, + 0x00000002,0x0004002b,0x00000036,0x00000197,0x00000000,0x00040020,0x00000198,0x00000002, + 0x00000055,0x0004002b,0x00000036,0x0000019d,0x00000004,0x0004002b,0x00000036,0x000001a2, + 0x00000002,0x0004002b,0x00000036,0x000001a7,0x00000003,0x0004002b,0x00000036,0x000001ac, + 0x00000007,0x00040020,0x000001ad,0x00000002,0x0000001a,0x0004002b,0x00000036,0x000001b2, + 0x0000000a,0x0004002b,0x00000036,0x000001b7,0x0000000d,0x00040020,0x000001b8,0x00000002, + 0x00000006,0x0004002b,0x00000036,0x000001bd,0x0000000f,0x0004002b,0x00000036,0x000001c2, + 0x00000011,0x0004002b,0x00000036,0x000001c7,0x00000012,0x00090019,0x000001cc,0x00000006, + 0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x00040020,0x000001cd, + 0x00000000,0x000001cc,0x0004003b,0x000001cd,0x000001ce,0x00000000,0x0004003b,0x000001cd, + 0x000001d5,0x00000000,0x00090019,0x000001db,0x00000006,0x00000001,0x00000000,0x00000000, + 0x00000000,0x00000002,0x00000002,0x00040020,0x000001dc,0x00000000,0x000001db,0x0004003b, + 0x000001dc,0x000001dd,0x00000000,0x00090019,0x000001e1,0x00000006,0x00000001,0x00000000, + 0x00000000,0x00000000,0x00000002,0x00000000,0x00040020,0x000001e2,0x00000000,0x000001e1, + 0x0004003b,0x000001e2,0x000001e3,0x00000000,0x0004003b,0x000001cd,0x000001eb,0x00000000, + 0x0002001a,0x000001f1,0x00040020,0x000001f2,0x00000000,0x000001f1,0x0004003b,0x000001f2, + 0x000001f3,0x00000000,0x0003001b,0x000001f5,0x000001cc,0x00040015,0x000001f9,0x00000020, + 0x00000000,0x0004002b,0x000001f9,0x000001fa,0x00000000,0x0004003b,0x000001cd,0x000001fe, + 0x00000000,0x00090019,0x00000207,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000, + 0x00000002,0x0000000f,0x00040020,0x00000208,0x00000000,0x00000207,0x0004003b,0x00000208, + 0x00000209,0x00000000,0x0004003b,0x000001cd,0x00000214,0x00000000,0x0004003b,0x000001cd, + 0x0000021c,0x00000000,0x0005002c,0x00000055,0x0000021e,0x00000197,0x00000197,0x0004003b, + 0x000001cd,0x00000228,0x00000000,0x0004002b,0x00000006,0x00000231,0x45700000,0x0004002b, + 0x00000006,0x00000232,0x45070000,0x0005002c,0x0000001a,0x00000233,0x00000231,0x00000232, + 0x0004002b,0x00000036,0x0000023e,0x00000001,0x0004002b,0x00000006,0x0000026b,0x00800000, + 0x0004002b,0x000001f9,0x00000293,0x00000001,0x0004002b,0x000001f9,0x00000297,0x00000002, + 0x0004002b,0x00000006,0x000002ad,0x3e800000,0x0004002b,0x00000006,0x000002b1,0x3f000000, + 0x0004002b,0x00000006,0x000002c1,0xbe800000,0x0004002b,0x00000006,0x000002e7,0x387fda40, + 0x0005002c,0x0000001a,0x00000338,0x000002b1,0x000002b1,0x00040017,0x0000034c,0x000001f9, + 0x00000002,0x00040017,0x00000350,0x000000a7,0x00000002,0x0004002b,0x00000006,0x0000035c, + 0x40490fdb,0x0004002b,0x00000006,0x00000363,0x3fc90fdb,0x0004002b,0x00000006,0x00000370, + 0x40000000,0x0004002b,0x00000006,0x0000037a,0x3ecccccd,0x0004002b,0x00000006,0x00000382, + 0x3fc80000,0x0004002b,0x00000006,0x00000387,0x3f100000,0x0004002b,0x00000006,0x0000038f, + 0x40800000,0x0004002b,0x00000006,0x0000039a,0xbf800000,0x0004002b,0x00000006,0x000003a0, + 0x80000000,0x0004002b,0x00000036,0x000003db,0x00000005,0x0004002b,0x00000036,0x000003dc, + 0x00000006,0x0004002b,0x00000036,0x000003ee,0x00000008,0x0004002b,0x00000036,0x000003ef, + 0x00000009,0x0004002b,0x00000036,0x000003f0,0x0000000b,0x0004002b,0x00000036,0x00000402, + 0x0000000c,0x0004002b,0x00000036,0x00000403,0x0000000e,0x0004002b,0x000001f9,0x00000421, + 0x00000004,0x0004001c,0x00000422,0x0000002f,0x00000421,0x00040020,0x00000423,0x00000007, + 0x00000422,0x0004002b,0x00000006,0x0000048e,0x3ffeb852,0x0006002c,0x0000000e,0x00000496, + 0x00000154,0x00000154,0x00000154,0x0004002b,0x00000036,0x000004c2,0xfffffffe,0x0004002b, + 0x00000036,0x000004c3,0xffffffff,0x0004002b,0x000001f9,0x00000511,0x00000009,0x0004001c, + 0x00000512,0x0000000e,0x00000511,0x00040020,0x00000513,0x00000007,0x00000512,0x0004002b, + 0x00000006,0x0000053f,0x3e99999a,0x0004002b,0x00000006,0x0000054c,0x40a00000,0x0004002b, + 0x00000006,0x000005b7,0xc0133333,0x0004002b,0x00000006,0x000005ef,0x3d3d70a4,0x0005002c, + 0x00000055,0x00000611,0x000004c3,0x000004c3,0x0005002c,0x00000055,0x0000061b,0x00000197, + 0x000004c3,0x0005002c,0x00000055,0x00000625,0x0000023e,0x000004c3,0x0005002c,0x00000055, + 0x0000062f,0x000001a2,0x000004c3,0x0005002c,0x00000055,0x00000639,0x000004c3,0x00000197, + 0x0005002c,0x00000055,0x0000064c,0x0000023e,0x00000197,0x0005002c,0x00000055,0x00000656, + 0x000001a2,0x00000197,0x0005002c,0x00000055,0x00000660,0x000004c3,0x0000023e,0x0005002c, + 0x00000055,0x0000066a,0x00000197,0x0000023e,0x0005002c,0x00000055,0x00000674,0x0000023e, + 0x0000023e,0x0005002c,0x00000055,0x0000067e,0x000001a2,0x0000023e,0x0005002c,0x00000055, + 0x00000688,0x000004c3,0x000001a2,0x0005002c,0x00000055,0x00000692,0x00000197,0x000001a2, + 0x0005002c,0x00000055,0x0000069c,0x0000023e,0x000001a2,0x0005002c,0x00000055,0x000006a6, + 0x000001a2,0x000001a2,0x0004002b,0x000001f9,0x00000716,0x00000003,0x0004002b,0x00000006, + 0x0000075b,0x41a00000,0x0004002b,0x00000006,0x00000760,0x3f400000,0x0004002b,0x00000006, + 0x00000783,0x40400000,0x0004002b,0x00000006,0x0000078c,0x3fd9999a,0x0006002c,0x0000000e, + 0x0000078d,0x0000078c,0x00000155,0x00000155,0x0004002b,0x00000006,0x00000792,0x340018ef, + 0x0006002c,0x0000000e,0x00000793,0x00000792,0x00000792,0x00000792,0x0003002a,0x000000a7, + 0x000007c8,0x0004002b,0x00000006,0x0000080b,0x3dcccccd,0x00030029,0x000000a7,0x00000822, + 0x0004002b,0x00000006,0x0000082b,0x3e19999a,0x0004002b,0x00000006,0x000008ab,0x42c80000, + 0x00040017,0x00000910,0x000001f9,0x00000003,0x00040020,0x00000911,0x00000001,0x00000910, + 0x0004003b,0x00000911,0x00000912,0x00000001,0x0004002b,0x00000006,0x00000918,0x477fe000, + 0x0004002b,0x00000006,0x00000919,0x37801002,0x0004003b,0x000001f2,0x0000091a,0x00000000, + 0x0004003b,0x000001cd,0x0000091b,0x00000000,0x0004003b,0x000001cd,0x0000091c,0x00000000, + 0x0004002b,0x00000006,0x0000091d,0x7f7fffff,0x0004002b,0x00000006,0x0000091e,0x3a1fe868, + 0x0004002b,0x00000006,0x0000091f,0x3d800000,0x0004002b,0x00000006,0x00000920,0x3e400000, + 0x0004002b,0x00000006,0x00000921,0x461c4000,0x0004002b,0x000001f9,0x00000922,0x00000008, + 0x0006002c,0x00000910,0x00000923,0x00000922,0x00000922,0x00000293,0x00050036,0x00000002, + 0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x0000006d,0x00000916, + 0x00000007,0x0004003d,0x00000910,0x00000913,0x00000912,0x0007004f,0x0000034c,0x00000914, + 0x00000913,0x00000913,0x00000000,0x00000001,0x0004007c,0x00000055,0x00000915,0x00000914, + 0x0003003e,0x00000916,0x00000915,0x00050039,0x00000002,0x00000917,0x00000144,0x00000916, + 0x000100fd,0x00010038,0x00050036,0x00000006,0x0000000c,0x00000000,0x00000008,0x00030037, + 0x00000007,0x00000009,0x00030037,0x00000007,0x0000000a,0x00030037,0x00000007,0x0000000b, + 0x000200f8,0x0000000d,0x0004003d,0x00000006,0x00000146,0x00000009,0x0004003d,0x00000006, + 0x00000147,0x0000000a,0x0004003d,0x00000006,0x00000148,0x0000000b,0x0008000c,0x00000006, + 0x00000149,0x00000001,0x0000002e,0x00000146,0x00000147,0x00000148,0x000200fe,0x00000149, + 0x00010038,0x00050036,0x0000000e,0x00000014,0x00000000,0x00000010,0x00030037,0x0000000f, + 0x00000011,0x00030037,0x0000000f,0x00000012,0x00030037,0x00000007,0x00000013,0x000200f8, + 0x00000015,0x0004003d,0x0000000e,0x0000014c,0x00000011,0x0004003d,0x0000000e,0x0000014d, + 0x00000012,0x0004003d,0x00000006,0x0000014e,0x00000013,0x00060050,0x0000000e,0x0000014f, + 0x0000014e,0x0000014e,0x0000014e,0x0008000c,0x0000000e,0x00000150,0x00000001,0x0000002e, + 0x0000014c,0x0000014d,0x0000014f,0x000200fe,0x00000150,0x00010038,0x00050036,0x00000006, + 0x00000018,0x00000000,0x00000016,0x00030037,0x00000007,0x00000017,0x000200f8,0x00000019, + 0x0004003d,0x00000006,0x00000153,0x00000017,0x0008000c,0x00000006,0x00000156,0x00000001, + 0x0000002b,0x00000153,0x00000154,0x00000155,0x000200fe,0x00000156,0x00010038,0x00050036, + 0x0000001a,0x0000001e,0x00000000,0x0000001c,0x00030037,0x0000001b,0x0000001d,0x000200f8, + 0x0000001f,0x0004003d,0x0000001a,0x00000159,0x0000001d,0x0006000c,0x0000001a,0x0000015a, + 0x00000001,0x0000000a,0x00000159,0x000200fe,0x0000015a,0x00010038,0x00050036,0x00000006, + 0x00000023,0x00000000,0x00000020,0x00030037,0x00000007,0x00000021,0x00030037,0x00000007, + 0x00000022,0x000200f8,0x00000024,0x0004003d,0x00000006,0x0000015d,0x00000021,0x0004003d, + 0x00000006,0x0000015e,0x00000022,0x0007000c,0x00000006,0x0000015f,0x00000001,0x00000025, + 0x0000015d,0x0000015e,0x000200fe,0x0000015f,0x00010038,0x00050036,0x0000001a,0x00000028, + 0x00000000,0x00000025,0x00030037,0x0000001b,0x00000026,0x00030037,0x0000001b,0x00000027, + 0x000200f8,0x00000029,0x0004003d,0x0000001a,0x00000162,0x00000026,0x0004003d,0x0000001a, + 0x00000163,0x00000027,0x0007000c,0x0000001a,0x00000164,0x00000001,0x00000025,0x00000162, + 0x00000163,0x000200fe,0x00000164,0x00010038,0x00050036,0x0000000e,0x0000002d,0x00000000, + 0x0000002a,0x00030037,0x0000000f,0x0000002b,0x00030037,0x0000000f,0x0000002c,0x000200f8, + 0x0000002e,0x0004003d,0x0000000e,0x00000167,0x0000002b,0x0004003d,0x0000000e,0x00000168, + 0x0000002c,0x0007000c,0x0000000e,0x00000169,0x00000001,0x00000025,0x00000167,0x00000168, + 0x000200fe,0x00000169,0x00010038,0x00050036,0x0000002f,0x00000034,0x00000000,0x00000031, + 0x00030037,0x00000030,0x00000032,0x00030037,0x00000030,0x00000033,0x000200f8,0x00000035, + 0x0004003d,0x0000002f,0x0000016c,0x00000032,0x0004003d,0x0000002f,0x0000016d,0x00000033, + 0x0007000c,0x0000002f,0x0000016e,0x00000001,0x00000025,0x0000016c,0x0000016d,0x000200fe, + 0x0000016e,0x00010038,0x00050036,0x00000036,0x0000003b,0x00000000,0x00000038,0x00030037, + 0x00000037,0x00000039,0x00030037,0x00000037,0x0000003a,0x000200f8,0x0000003c,0x0004003d, + 0x00000036,0x00000171,0x00000039,0x0004003d,0x00000036,0x00000172,0x0000003a,0x0007000c, + 0x00000036,0x00000173,0x00000001,0x00000027,0x00000171,0x00000172,0x000200fe,0x00000173, + 0x00010038,0x00050036,0x00000006,0x0000003f,0x00000000,0x00000020,0x00030037,0x00000007, + 0x0000003d,0x00030037,0x00000007,0x0000003e,0x000200f8,0x00000040,0x0004003d,0x00000006, + 0x00000176,0x0000003d,0x0004003d,0x00000006,0x00000177,0x0000003e,0x0007000c,0x00000006, + 0x00000178,0x00000001,0x00000028,0x00000176,0x00000177,0x000200fe,0x00000178,0x00010038, + 0x00050036,0x0000001a,0x00000043,0x00000000,0x00000025,0x00030037,0x0000001b,0x00000041, + 0x00030037,0x0000001b,0x00000042,0x000200f8,0x00000044,0x0004003d,0x0000001a,0x0000017b, + 0x00000041,0x0004003d,0x0000001a,0x0000017c,0x00000042,0x0007000c,0x0000001a,0x0000017d, + 0x00000001,0x00000028,0x0000017b,0x0000017c,0x000200fe,0x0000017d,0x00010038,0x00050036, + 0x0000000e,0x00000047,0x00000000,0x0000002a,0x00030037,0x0000000f,0x00000045,0x00030037, + 0x0000000f,0x00000046,0x000200f8,0x00000048,0x0004003d,0x0000000e,0x00000180,0x00000045, + 0x0004003d,0x0000000e,0x00000181,0x00000046,0x0007000c,0x0000000e,0x00000182,0x00000001, + 0x00000028,0x00000180,0x00000181,0x000200fe,0x00000182,0x00010038,0x00050036,0x0000002f, + 0x0000004b,0x00000000,0x00000031,0x00030037,0x00000030,0x00000049,0x00030037,0x00000030, + 0x0000004a,0x000200f8,0x0000004c,0x0004003d,0x0000002f,0x00000185,0x00000049,0x0004003d, + 0x0000002f,0x00000186,0x0000004a,0x0007000c,0x0000002f,0x00000187,0x00000001,0x00000028, + 0x00000185,0x00000186,0x000200fe,0x00000187,0x00010038,0x00050036,0x00000036,0x0000004f, + 0x00000000,0x00000038,0x00030037,0x00000037,0x0000004d,0x00030037,0x00000037,0x0000004e, + 0x000200f8,0x00000050,0x0004003d,0x00000036,0x0000018a,0x0000004d,0x0004003d,0x00000036, + 0x0000018b,0x0000004e,0x0007000c,0x00000036,0x0000018c,0x00000001,0x0000002a,0x0000018a, + 0x0000018b,0x000200fe,0x0000018c,0x00010038,0x00050036,0x00000006,0x00000053,0x00000000, + 0x00000020,0x00030037,0x00000007,0x00000051,0x00030037,0x00000007,0x00000052,0x000200f8, + 0x00000054,0x0004003d,0x00000006,0x0000018f,0x00000051,0x0004003d,0x00000006,0x00000190, + 0x00000052,0x0007000c,0x00000006,0x00000191,0x00000001,0x0000001a,0x0000018f,0x00000190, + 0x000200fe,0x00000191,0x00010038,0x00050036,0x00000055,0x00000057,0x00000000,0x00000056, + 0x000200f8,0x00000058,0x00050041,0x00000198,0x00000199,0x00000196,0x00000197,0x0004003d, + 0x00000055,0x0000019a,0x00000199,0x000200fe,0x0000019a,0x00010038,0x00050036,0x00000055, + 0x00000059,0x00000000,0x00000056,0x000200f8,0x0000005a,0x00050041,0x00000198,0x0000019e, + 0x00000196,0x0000019d,0x0004003d,0x00000055,0x0000019f,0x0000019e,0x000200fe,0x0000019f, + 0x00010038,0x00050036,0x00000055,0x0000005b,0x00000000,0x00000056,0x000200f8,0x0000005c, + 0x00050041,0x00000198,0x000001a3,0x00000196,0x000001a2,0x0004003d,0x00000055,0x000001a4, + 0x000001a3,0x000200fe,0x000001a4,0x00010038,0x00050036,0x00000055,0x0000005d,0x00000000, + 0x00000056,0x000200f8,0x0000005e,0x00050041,0x00000198,0x000001a8,0x00000196,0x000001a7, + 0x0004003d,0x00000055,0x000001a9,0x000001a8,0x000200fe,0x000001a9,0x00010038,0x00050036, + 0x0000001a,0x00000060,0x00000000,0x0000005f,0x000200f8,0x00000061,0x00050041,0x000001ad, + 0x000001ae,0x00000196,0x000001ac,0x0004003d,0x0000001a,0x000001af,0x000001ae,0x000200fe, + 0x000001af,0x00010038,0x00050036,0x0000001a,0x00000062,0x00000000,0x0000005f,0x000200f8, + 0x00000063,0x00050041,0x000001ad,0x000001b3,0x00000196,0x000001b2,0x0004003d,0x0000001a, + 0x000001b4,0x000001b3,0x000200fe,0x000001b4,0x00010038,0x00050036,0x00000006,0x00000065, + 0x00000000,0x00000064,0x000200f8,0x00000066,0x00050041,0x000001b8,0x000001b9,0x00000196, + 0x000001b7,0x0004003d,0x00000006,0x000001ba,0x000001b9,0x000200fe,0x000001ba,0x00010038, + 0x00050036,0x00000006,0x00000067,0x00000000,0x00000064,0x000200f8,0x00000068,0x00050041, + 0x000001b8,0x000001be,0x00000196,0x000001bd,0x0004003d,0x00000006,0x000001bf,0x000001be, + 0x000200fe,0x000001bf,0x00010038,0x00050036,0x00000006,0x00000069,0x00000000,0x00000064, + 0x000200f8,0x0000006a,0x00050041,0x000001b8,0x000001c3,0x00000196,0x000001c2,0x0004003d, + 0x00000006,0x000001c4,0x000001c3,0x000200fe,0x000001c4,0x00010038,0x00050036,0x00000006, + 0x0000006b,0x00000000,0x00000064,0x000200f8,0x0000006c,0x00050041,0x000001b8,0x000001c8, + 0x00000196,0x000001c7,0x0004003d,0x00000006,0x000001c9,0x000001c8,0x000200fe,0x000001c9, + 0x00010038,0x00050036,0x0000000e,0x00000070,0x00000000,0x0000006e,0x00030037,0x0000006d, + 0x0000006f,0x000200f8,0x00000071,0x0004003d,0x000001cc,0x000001cf,0x000001ce,0x0004003d, + 0x00000055,0x000001d0,0x0000006f,0x0007005f,0x0000002f,0x000001d1,0x000001cf,0x000001d0, + 0x00000002,0x00000197,0x0008004f,0x0000000e,0x000001d2,0x000001d1,0x000001d1,0x00000000, + 0x00000001,0x00000002,0x000200fe,0x000001d2,0x00010038,0x00050036,0x0000002f,0x00000074, + 0x00000000,0x00000072,0x00030037,0x0000006d,0x00000073,0x000200f8,0x00000075,0x0004003d, + 0x000001cc,0x000001d6,0x000001d5,0x0004003d,0x00000055,0x000001d7,0x00000073,0x0007005f, + 0x0000002f,0x000001d8,0x000001d6,0x000001d7,0x00000002,0x00000197,0x000200fe,0x000001d8, + 0x00010038,0x00050036,0x00000002,0x00000079,0x00000000,0x00000076,0x00030037,0x0000006d, + 0x00000077,0x00030037,0x00000030,0x00000078,0x000200f8,0x0000007a,0x0004003d,0x000001db, + 0x000001de,0x000001dd,0x0004003d,0x00000055,0x000001df,0x00000077,0x0004003d,0x0000002f, + 0x000001e0,0x00000078,0x00040063,0x000001de,0x000001df,0x000001e0,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x0000007e,0x00000000,0x0000007b,0x00030037,0x0000006d,0x0000007c, + 0x00030037,0x0000000f,0x0000007d,0x000200f8,0x0000007f,0x0004003d,0x000001e1,0x000001e4, + 0x000001e3,0x0004003d,0x00000055,0x000001e5,0x0000007c,0x0004003d,0x0000000e,0x000001e6, + 0x0000007d,0x00050051,0x00000006,0x000001e7,0x000001e6,0x00000000,0x00050051,0x00000006, + 0x000001e8,0x000001e6,0x00000001,0x00050051,0x00000006,0x000001e9,0x000001e6,0x00000002, + 0x00070050,0x0000002f,0x000001ea,0x000001e7,0x000001e8,0x000001e9,0x00000155,0x00040063, + 0x000001e4,0x000001e5,0x000001ea,0x000100fd,0x00010038,0x00050036,0x00000055,0x00000080, + 0x00000000,0x00000056,0x000200f8,0x00000081,0x0004003d,0x000001cc,0x000001ec,0x000001eb, + 0x00050067,0x00000055,0x000001ed,0x000001ec,0x00000197,0x000200fe,0x000001ed,0x00010038, + 0x00050036,0x00000006,0x00000084,0x00000000,0x00000082,0x00030037,0x0000001b,0x00000083, + 0x000200f8,0x00000085,0x0004003d,0x000001cc,0x000001f0,0x000001eb,0x0004003d,0x000001f1, + 0x000001f4,0x000001f3,0x00050056,0x000001f5,0x000001f6,0x000001f0,0x000001f4,0x0004003d, + 0x0000001a,0x000001f7,0x00000083,0x00070058,0x0000002f,0x000001f8,0x000001f6,0x000001f7, + 0x00000002,0x00000154,0x00050051,0x00000006,0x000001fb,0x000001f8,0x00000000,0x000200fe, + 0x000001fb,0x00010038,0x00050036,0x00000006,0x00000087,0x00000000,0x00000082,0x00030037, + 0x0000001b,0x00000086,0x000200f8,0x00000088,0x0004003d,0x000001cc,0x000001ff,0x000001fe, + 0x0004003d,0x000001f1,0x00000200,0x000001f3,0x00050056,0x000001f5,0x00000201,0x000001ff, + 0x00000200,0x0004003d,0x0000001a,0x00000202,0x00000086,0x00070058,0x0000002f,0x00000203, + 0x00000201,0x00000202,0x00000002,0x00000154,0x00050051,0x00000006,0x00000204,0x00000203, + 0x00000000,0x000200fe,0x00000204,0x00010038,0x00050036,0x00000006,0x0000008b,0x00000000, + 0x00000089,0x00030037,0x0000006d,0x0000008a,0x000200f8,0x0000008c,0x0004003d,0x00000207, + 0x0000020a,0x00000209,0x0004003d,0x00000055,0x0000020b,0x0000008a,0x00050062,0x0000002f, + 0x0000020c,0x0000020a,0x0000020b,0x00050051,0x00000006,0x0000020d,0x0000020c,0x00000000, + 0x000200fe,0x0000020d,0x00010038,0x00050036,0x00000002,0x00000090,0x00000000,0x0000008d, + 0x00030037,0x0000006d,0x0000008e,0x00030037,0x00000007,0x0000008f,0x000200f8,0x00000091, + 0x0004003d,0x00000207,0x00000210,0x00000209,0x0004003d,0x00000055,0x00000211,0x0000008e, + 0x0004003d,0x00000006,0x00000212,0x0000008f,0x00070050,0x0000002f,0x00000213,0x00000212, + 0x00000154,0x00000154,0x00000154,0x00040063,0x00000210,0x00000211,0x00000213,0x000100fd, + 0x00010038,0x00050036,0x0000001a,0x00000094,0x00000000,0x00000092,0x00030037,0x0000006d, + 0x00000093,0x000200f8,0x00000095,0x0004003d,0x000001cc,0x00000215,0x00000214,0x0004003d, + 0x00000055,0x00000216,0x00000093,0x0007005f,0x0000002f,0x00000217,0x00000215,0x00000216, + 0x00000002,0x00000197,0x0007004f,0x0000001a,0x00000218,0x00000217,0x00000217,0x00000000, + 0x00000001,0x000200fe,0x00000218,0x00010038,0x00050036,0x00000006,0x00000096,0x00000000, + 0x00000064,0x000200f8,0x00000097,0x0004003b,0x00000007,0x0000021b,0x00000007,0x0004003d, + 0x000001cc,0x0000021d,0x0000021c,0x0007005f,0x0000002f,0x0000021f,0x0000021d,0x0000021e, + 0x00000002,0x00000197,0x00050051,0x00000006,0x00000220,0x0000021f,0x00000000,0x0003003e, + 0x0000021b,0x00000220,0x0004003d,0x00000006,0x00000221,0x0000021b,0x000500b4,0x000000a7, + 0x00000222,0x00000221,0x00000154,0x000300f7,0x00000224,0x00000000,0x000400fa,0x00000222, + 0x00000223,0x00000224,0x000200f8,0x00000223,0x0003003e,0x0000021b,0x00000155,0x000200f9, + 0x00000224,0x000200f8,0x00000224,0x0004003d,0x00000006,0x00000225,0x0000021b,0x000200fe, + 0x00000225,0x00010038,0x00050036,0x0000002f,0x0000009a,0x00000000,0x00000098,0x00030037, + 0x0000001b,0x00000099,0x000200f8,0x0000009b,0x0004003d,0x000001cc,0x00000229,0x00000228, + 0x0004003d,0x000001f1,0x0000022a,0x000001f3,0x00050056,0x000001f5,0x0000022b,0x00000229, + 0x0000022a,0x0004003d,0x0000001a,0x0000022c,0x00000099,0x00070058,0x0000002f,0x0000022d, + 0x0000022b,0x0000022c,0x00000002,0x00000154,0x000200fe,0x0000022d,0x00010038,0x00050036, + 0x00000006,0x0000009d,0x00000000,0x00000082,0x00030037,0x0000001b,0x0000009c,0x000200f8, + 0x0000009e,0x0004003d,0x0000001a,0x00000230,0x0000009c,0x00050085,0x0000001a,0x00000234, + 0x00000230,0x00000233,0x0006000c,0x00000006,0x00000235,0x00000001,0x00000042,0x00000234, + 0x000200fe,0x00000235,0x00010038,0x00050036,0x00000002,0x000000a5,0x00000000,0x000000a1, + 0x00030037,0x000000a0,0x000000a2,0x00030037,0x0000000e,0x000000a3,0x00030037,0x00000006, + 0x000000a4,0x000200f8,0x000000a6,0x0004003b,0x0000000f,0x0000023a,0x00000007,0x00050041, + 0x0000000f,0x00000238,0x000000a2,0x000001a2,0x0003003e,0x00000238,0x000000a3,0x00050041, + 0x0000000f,0x00000239,0x000000a2,0x000001a7,0x0003003e,0x00000239,0x000000a3,0x0005008e, + 0x0000000e,0x0000023b,0x000000a3,0x000000a4,0x0003003e,0x0000023a,0x0000023b,0x0004003d, + 0x0000000e,0x0000023c,0x0000023a,0x00050041,0x0000000f,0x0000023d,0x000000a2,0x00000197, + 0x0003003e,0x0000023d,0x0000023c,0x0004003d,0x0000000e,0x0000023f,0x0000023a,0x00050085, + 0x0000000e,0x00000240,0x000000a3,0x0000023f,0x00050041,0x0000000f,0x00000241,0x000000a2, + 0x0000023e,0x0003003e,0x00000241,0x00000240,0x00050041,0x00000007,0x00000242,0x000000a2, + 0x0000019d,0x0003003e,0x00000242,0x000000a4,0x000100fd,0x00010038,0x00050036,0x00000002, + 0x000000ae,0x00000000,0x000000a9,0x00030037,0x000000a8,0x000000aa,0x00030037,0x000000a0, + 0x000000ab,0x00030037,0x0000000e,0x000000ac,0x00030037,0x00000006,0x000000ad,0x000200f8, + 0x000000af,0x0004003b,0x000000a0,0x00000246,0x00000007,0x0004003b,0x0000000f,0x0000024b, + 0x00000007,0x0004003b,0x0000000f,0x0000024e,0x00000007,0x0004003b,0x0000000f,0x00000251, + 0x00000007,0x0004003b,0x0000000f,0x00000254,0x00000007,0x0004003b,0x0000000f,0x00000257, + 0x00000007,0x0004003d,0x000000a7,0x00000243,0x000000aa,0x000300f7,0x00000245,0x00000000, + 0x000400fa,0x00000243,0x00000244,0x0000024a,0x000200f8,0x00000244,0x0004003d,0x0000009f, + 0x00000247,0x000000ab,0x0003003e,0x00000246,0x00000247,0x00070039,0x00000002,0x00000248, + 0x000000a5,0x00000246,0x000000ac,0x000000ad,0x0004003d,0x0000009f,0x00000249,0x00000246, + 0x0003003e,0x000000ab,0x00000249,0x000200f9,0x00000245,0x000200f8,0x0000024a,0x00050041, + 0x0000000f,0x0000024c,0x000000ab,0x000001a2,0x0004003d,0x0000000e,0x0000024d,0x0000024c, + 0x0003003e,0x0000024b,0x0000024d,0x0003003e,0x0000024e,0x000000ac,0x00060039,0x0000000e, + 0x0000024f,0x0000002d,0x0000024b,0x0000024e,0x00050041,0x0000000f,0x00000250,0x000000ab, + 0x000001a2,0x0003003e,0x00000250,0x0000024f,0x00050041,0x0000000f,0x00000252,0x000000ab, + 0x000001a7,0x0004003d,0x0000000e,0x00000253,0x00000252,0x0003003e,0x00000251,0x00000253, + 0x0003003e,0x00000254,0x000000ac,0x00060039,0x0000000e,0x00000255,0x00000047,0x00000251, + 0x00000254,0x00050041,0x0000000f,0x00000256,0x000000ab,0x000001a7,0x0003003e,0x00000256, + 0x00000255,0x0005008e,0x0000000e,0x00000258,0x000000ac,0x000000ad,0x0003003e,0x00000257, + 0x00000258,0x0004003d,0x0000000e,0x00000259,0x00000257,0x00050041,0x0000000f,0x0000025a, + 0x000000ab,0x00000197,0x0004003d,0x0000000e,0x0000025b,0x0000025a,0x00050081,0x0000000e, + 0x0000025c,0x0000025b,0x00000259,0x00050041,0x0000000f,0x0000025d,0x000000ab,0x00000197, + 0x0003003e,0x0000025d,0x0000025c,0x0004003d,0x0000000e,0x0000025e,0x00000257,0x00050085, + 0x0000000e,0x0000025f,0x000000ac,0x0000025e,0x00050041,0x0000000f,0x00000260,0x000000ab, + 0x0000023e,0x0004003d,0x0000000e,0x00000261,0x00000260,0x00050081,0x0000000e,0x00000262, + 0x00000261,0x0000025f,0x00050041,0x0000000f,0x00000263,0x000000ab,0x0000023e,0x0003003e, + 0x00000263,0x00000262,0x00050041,0x00000007,0x00000264,0x000000ab,0x0000019d,0x0004003d, + 0x00000006,0x00000265,0x00000264,0x00050081,0x00000006,0x00000266,0x00000265,0x000000ad, + 0x00050041,0x00000007,0x00000267,0x000000ab,0x0000019d,0x0003003e,0x00000267,0x00000266, + 0x000200f9,0x00000245,0x000200f8,0x00000245,0x000100fd,0x00010038,0x00050036,0x00000002, + 0x000000b2,0x00000000,0x000000b0,0x00030037,0x000000a0,0x000000b1,0x000200f8,0x000000b3, + 0x0004003b,0x00000007,0x0000026d,0x00000007,0x0004003b,0x0000000f,0x00000283,0x00000007, + 0x00050041,0x00000007,0x00000268,0x000000b1,0x0000019d,0x0004003d,0x00000006,0x00000269, + 0x00000268,0x0006000c,0x00000006,0x0000026a,0x00000001,0x00000004,0x00000269,0x000500ba, + 0x000000a7,0x0000026c,0x0000026a,0x0000026b,0x000300f7,0x0000026f,0x00000000,0x000400fa, + 0x0000026c,0x0000026e,0x00000272,0x000200f8,0x0000026e,0x00050041,0x00000007,0x00000270, + 0x000000b1,0x0000019d,0x0004003d,0x00000006,0x00000271,0x00000270,0x0003003e,0x0000026d, + 0x00000271,0x000200f9,0x0000026f,0x000200f8,0x00000272,0x0003003e,0x0000026d,0x00000155, + 0x000200f9,0x0000026f,0x000200f8,0x0000026f,0x0004003d,0x00000006,0x00000273,0x0000026d, + 0x00050041,0x00000007,0x00000274,0x000000b1,0x0000019d,0x0003003e,0x00000274,0x00000273, + 0x00050041,0x00000007,0x00000275,0x000000b1,0x0000019d,0x0004003d,0x00000006,0x00000276, + 0x00000275,0x00050041,0x0000000f,0x00000277,0x000000b1,0x00000197,0x0004003d,0x0000000e, + 0x00000278,0x00000277,0x00060050,0x0000000e,0x00000279,0x00000276,0x00000276,0x00000276, + 0x00050088,0x0000000e,0x0000027a,0x00000278,0x00000279,0x00050041,0x0000000f,0x0000027b, + 0x000000b1,0x00000197,0x0003003e,0x0000027b,0x0000027a,0x00050041,0x00000007,0x0000027c, + 0x000000b1,0x0000019d,0x0004003d,0x00000006,0x0000027d,0x0000027c,0x00050041,0x0000000f, + 0x0000027e,0x000000b1,0x0000023e,0x0004003d,0x0000000e,0x0000027f,0x0000027e,0x00060050, + 0x0000000e,0x00000280,0x0000027d,0x0000027d,0x0000027d,0x00050088,0x0000000e,0x00000281, + 0x0000027f,0x00000280,0x00050041,0x0000000f,0x00000282,0x000000b1,0x0000023e,0x0003003e, + 0x00000282,0x00000281,0x00050041,0x0000000f,0x00000284,0x000000b1,0x0000023e,0x0004003d, + 0x0000000e,0x00000285,0x00000284,0x00050041,0x0000000f,0x00000286,0x000000b1,0x00000197, + 0x0004003d,0x0000000e,0x00000287,0x00000286,0x00050041,0x0000000f,0x00000288,0x000000b1, + 0x00000197,0x0004003d,0x0000000e,0x00000289,0x00000288,0x00050085,0x0000000e,0x0000028a, + 0x00000287,0x00000289,0x00050083,0x0000000e,0x0000028b,0x00000285,0x0000028a,0x0006000c, + 0x0000000e,0x0000028c,0x00000001,0x00000004,0x0000028b,0x0006000c,0x0000000e,0x0000028d, + 0x00000001,0x0000001f,0x0000028c,0x0003003e,0x00000283,0x0000028d,0x0004003d,0x0000000e, + 0x0000028e,0x00000283,0x00050041,0x0000000f,0x0000028f,0x000000b1,0x0000023e,0x0003003e, + 0x0000028f,0x0000028e,0x000100fd,0x00010038,0x00050036,0x0000000e,0x000000b6,0x00000000, + 0x000000b4,0x00030037,0x0000000f,0x000000b5,0x000200f8,0x000000b7,0x0004003b,0x0000000f, + 0x00000290,0x00000007,0x00050041,0x00000007,0x00000291,0x000000b5,0x000001fa,0x0004003d, + 0x00000006,0x00000292,0x00000291,0x00050041,0x00000007,0x00000294,0x000000b5,0x00000293, + 0x0004003d,0x00000006,0x00000295,0x00000294,0x00050081,0x00000006,0x00000296,0x00000292, + 0x00000295,0x00050041,0x00000007,0x00000298,0x000000b5,0x00000297,0x0004003d,0x00000006, + 0x00000299,0x00000298,0x00050083,0x00000006,0x0000029a,0x00000296,0x00000299,0x00050041, + 0x00000007,0x0000029b,0x000000b5,0x000001fa,0x0004003d,0x00000006,0x0000029c,0x0000029b, + 0x00050041,0x00000007,0x0000029d,0x000000b5,0x00000297,0x0004003d,0x00000006,0x0000029e, + 0x0000029d,0x00050081,0x00000006,0x0000029f,0x0000029c,0x0000029e,0x00050041,0x00000007, + 0x000002a0,0x000000b5,0x000001fa,0x0004003d,0x00000006,0x000002a1,0x000002a0,0x00050041, + 0x00000007,0x000002a2,0x000000b5,0x00000293,0x0004003d,0x00000006,0x000002a3,0x000002a2, + 0x00050083,0x00000006,0x000002a4,0x000002a1,0x000002a3,0x00050041,0x00000007,0x000002a5, + 0x000000b5,0x00000297,0x0004003d,0x00000006,0x000002a6,0x000002a5,0x00050083,0x00000006, + 0x000002a7,0x000002a4,0x000002a6,0x00060050,0x0000000e,0x000002a8,0x0000029a,0x0000029f, + 0x000002a7,0x0003003e,0x00000290,0x000002a8,0x0004003d,0x0000000e,0x000002a9,0x00000290, + 0x000200fe,0x000002a9,0x00010038,0x00050036,0x0000000e,0x000000b9,0x00000000,0x000000b4, + 0x00030037,0x0000000f,0x000000b8,0x000200f8,0x000000ba,0x0004003b,0x0000000f,0x000002ac, + 0x00000007,0x00050041,0x00000007,0x000002ae,0x000000b8,0x000001fa,0x0004003d,0x00000006, + 0x000002af,0x000002ae,0x00050085,0x00000006,0x000002b0,0x000002ad,0x000002af,0x00050041, + 0x00000007,0x000002b2,0x000000b8,0x00000293,0x0004003d,0x00000006,0x000002b3,0x000002b2, + 0x00050085,0x00000006,0x000002b4,0x000002b1,0x000002b3,0x00050081,0x00000006,0x000002b5, + 0x000002b0,0x000002b4,0x00050041,0x00000007,0x000002b6,0x000000b8,0x00000297,0x0004003d, + 0x00000006,0x000002b7,0x000002b6,0x00050085,0x00000006,0x000002b8,0x000002ad,0x000002b7, + 0x00050081,0x00000006,0x000002b9,0x000002b5,0x000002b8,0x00050041,0x00000007,0x000002ba, + 0x000000b8,0x000001fa,0x0004003d,0x00000006,0x000002bb,0x000002ba,0x00050085,0x00000006, + 0x000002bc,0x000002b1,0x000002bb,0x00050041,0x00000007,0x000002bd,0x000000b8,0x00000297, + 0x0004003d,0x00000006,0x000002be,0x000002bd,0x00050085,0x00000006,0x000002bf,0x000002b1, + 0x000002be,0x00050083,0x00000006,0x000002c0,0x000002bc,0x000002bf,0x00050041,0x00000007, + 0x000002c2,0x000000b8,0x000001fa,0x0004003d,0x00000006,0x000002c3,0x000002c2,0x00050085, + 0x00000006,0x000002c4,0x000002c1,0x000002c3,0x00050041,0x00000007,0x000002c5,0x000000b8, + 0x00000293,0x0004003d,0x00000006,0x000002c6,0x000002c5,0x00050085,0x00000006,0x000002c7, + 0x000002b1,0x000002c6,0x00050081,0x00000006,0x000002c8,0x000002c4,0x000002c7,0x00050041, + 0x00000007,0x000002c9,0x000000b8,0x00000297,0x0004003d,0x00000006,0x000002ca,0x000002c9, + 0x00050085,0x00000006,0x000002cb,0x000002ad,0x000002ca,0x00050083,0x00000006,0x000002cc, + 0x000002c8,0x000002cb,0x00060050,0x0000000e,0x000002cd,0x000002b9,0x000002c0,0x000002cc, + 0x0003003e,0x000002ac,0x000002cd,0x0004003d,0x0000000e,0x000002ce,0x000002ac,0x000200fe, + 0x000002ce,0x00010038,0x00050036,0x0000000e,0x000000bc,0x00000000,0x000000b4,0x00030037, + 0x0000000f,0x000000bb,0x000200f8,0x000000bd,0x0004003b,0x00000007,0x000002d2,0x00000007, + 0x0004003b,0x00000007,0x000002d3,0x00000007,0x0004003b,0x00000007,0x000002d7,0x00000007, + 0x0004003b,0x00000007,0x000002da,0x00000007,0x0004003b,0x00000007,0x000002de,0x00000007, + 0x0004003b,0x00000007,0x000002df,0x00000007,0x0004003d,0x0000000e,0x000002d1,0x000000bb, + 0x0003003e,0x000002d2,0x00000154,0x00050041,0x00000007,0x000002d4,0x000000bb,0x000001fa, + 0x0004003d,0x00000006,0x000002d5,0x000002d4,0x0003003e,0x000002d3,0x000002d5,0x00060039, + 0x00000006,0x000002d6,0x0000003f,0x000002d2,0x000002d3,0x00050041,0x00000007,0x000002d8, + 0x000000bb,0x00000293,0x0004003d,0x00000006,0x000002d9,0x000002d8,0x0003003e,0x000002d7, + 0x000002d9,0x00050041,0x00000007,0x000002db,0x000000bb,0x00000297,0x0004003d,0x00000006, + 0x000002dc,0x000002db,0x0003003e,0x000002da,0x000002dc,0x00060039,0x00000006,0x000002dd, + 0x0000003f,0x000002d7,0x000002da,0x0003003e,0x000002de,0x000002d6,0x0003003e,0x000002df, + 0x000002dd,0x00060039,0x00000006,0x000002e0,0x0000003f,0x000002de,0x000002df,0x00050081, + 0x00000006,0x000002e1,0x000002e0,0x00000155,0x00060050,0x0000000e,0x000002e2,0x000002e1, + 0x000002e1,0x000002e1,0x00050088,0x0000000e,0x000002e3,0x000002d1,0x000002e2,0x000200fe, + 0x000002e3,0x00010038,0x00050036,0x0000000e,0x000000bf,0x00000000,0x000000b4,0x00030037, + 0x0000000f,0x000000be,0x000200f8,0x000000c0,0x0004003b,0x00000007,0x000002e8,0x00000007, + 0x0004003b,0x00000007,0x000002eb,0x00000007,0x0004003b,0x00000007,0x000002ef,0x00000007, + 0x0004003b,0x00000007,0x000002f2,0x00000007,0x0004003b,0x00000007,0x000002f5,0x00000007, + 0x0004003b,0x00000007,0x000002f6,0x00000007,0x0004003d,0x0000000e,0x000002e6,0x000000be, + 0x00050041,0x00000007,0x000002e9,0x000000be,0x00000293,0x0004003d,0x00000006,0x000002ea, + 0x000002e9,0x0003003e,0x000002e8,0x000002ea,0x00050041,0x00000007,0x000002ec,0x000000be, + 0x00000297,0x0004003d,0x00000006,0x000002ed,0x000002ec,0x0003003e,0x000002eb,0x000002ed, + 0x00060039,0x00000006,0x000002ee,0x0000003f,0x000002e8,0x000002eb,0x00050041,0x00000007, + 0x000002f0,0x000000be,0x000001fa,0x0004003d,0x00000006,0x000002f1,0x000002f0,0x0003003e, + 0x000002ef,0x000002f1,0x0003003e,0x000002f2,0x000002ee,0x00060039,0x00000006,0x000002f3, + 0x0000003f,0x000002ef,0x000002f2,0x00050083,0x00000006,0x000002f4,0x00000155,0x000002f3, + 0x0003003e,0x000002f5,0x000002e7,0x0003003e,0x000002f6,0x000002f4,0x00060039,0x00000006, + 0x000002f7,0x0000003f,0x000002f5,0x000002f6,0x00060050,0x0000000e,0x000002f8,0x000002f7, + 0x000002f7,0x000002f7,0x00050088,0x0000000e,0x000002f9,0x000002e6,0x000002f8,0x000200fe, + 0x000002f9,0x00010038,0x00050036,0x000000a7,0x000000c3,0x00000000,0x000000c1,0x00030037, + 0x0000001b,0x000000c2,0x000200f8,0x000000c4,0x00050041,0x00000007,0x000002fc,0x000000c2, + 0x000001fa,0x0004003d,0x00000006,0x000002fd,0x000002fc,0x000500be,0x000000a7,0x000002fe, + 0x000002fd,0x00000154,0x000300f7,0x00000300,0x00000000,0x000400fa,0x000002fe,0x000002ff, + 0x00000300,0x000200f8,0x000002ff,0x00050041,0x00000007,0x00000301,0x000000c2,0x000001fa, + 0x0004003d,0x00000006,0x00000302,0x00000301,0x000500bc,0x000000a7,0x00000303,0x00000302, + 0x00000155,0x000200f9,0x00000300,0x000200f8,0x00000300,0x000700f5,0x000000a7,0x00000304, + 0x000002fe,0x000000c4,0x00000303,0x000002ff,0x000300f7,0x00000306,0x00000000,0x000400fa, + 0x00000304,0x00000305,0x00000306,0x000200f8,0x00000305,0x00050041,0x00000007,0x00000307, + 0x000000c2,0x00000293,0x0004003d,0x00000006,0x00000308,0x00000307,0x000500be,0x000000a7, + 0x00000309,0x00000308,0x00000154,0x000300f7,0x0000030b,0x00000000,0x000400fa,0x00000309, + 0x0000030a,0x0000030b,0x000200f8,0x0000030a,0x00050041,0x00000007,0x0000030c,0x000000c2, + 0x00000293,0x0004003d,0x00000006,0x0000030d,0x0000030c,0x000500bc,0x000000a7,0x0000030e, + 0x0000030d,0x00000155,0x000200f9,0x0000030b,0x000200f8,0x0000030b,0x000700f5,0x000000a7, + 0x0000030f,0x00000309,0x00000305,0x0000030e,0x0000030a,0x000200f9,0x00000306,0x000200f8, + 0x00000306,0x000700f5,0x000000a7,0x00000310,0x00000304,0x00000300,0x0000030f,0x0000030b, + 0x000200fe,0x00000310,0x00010038,0x00050036,0x00000055,0x000000c9,0x00000000,0x000000c5, + 0x00030037,0x0000006d,0x000000c6,0x00030037,0x0000006d,0x000000c7,0x00030037,0x0000006d, + 0x000000c8,0x000200f8,0x000000ca,0x0004003b,0x0000006d,0x00000313,0x00000007,0x0004003b, + 0x00000037,0x0000031a,0x00000007,0x0004003b,0x00000037,0x0000031d,0x00000007,0x0004003b, + 0x00000037,0x0000031f,0x00000007,0x0004003b,0x00000037,0x00000320,0x00000007,0x0004003b, + 0x00000037,0x00000326,0x00000007,0x0004003b,0x00000037,0x00000329,0x00000007,0x0004003b, + 0x00000037,0x0000032b,0x00000007,0x0004003b,0x00000037,0x0000032c,0x00000007,0x0004003d, + 0x00000055,0x00000314,0x000000c6,0x0004003d,0x00000055,0x00000315,0x000000c7,0x00050080, + 0x00000055,0x00000316,0x00000314,0x00000315,0x0003003e,0x00000313,0x00000316,0x00050041, + 0x00000037,0x00000317,0x000000c8,0x000001fa,0x0004003d,0x00000036,0x00000318,0x00000317, + 0x00050082,0x00000036,0x00000319,0x00000318,0x0000023e,0x00050041,0x00000037,0x0000031b, + 0x00000313,0x000001fa,0x0004003d,0x00000036,0x0000031c,0x0000031b,0x0003003e,0x0000031a, + 0x0000031c,0x0003003e,0x0000031d,0x00000319,0x00060039,0x00000036,0x0000031e,0x0000003b, + 0x0000031a,0x0000031d,0x0003003e,0x0000031f,0x00000197,0x0003003e,0x00000320,0x0000031e, + 0x00060039,0x00000036,0x00000321,0x0000004f,0x0000031f,0x00000320,0x00050041,0x00000037, + 0x00000322,0x00000313,0x000001fa,0x0003003e,0x00000322,0x00000321,0x00050041,0x00000037, + 0x00000323,0x000000c8,0x00000293,0x0004003d,0x00000036,0x00000324,0x00000323,0x00050082, + 0x00000036,0x00000325,0x00000324,0x0000023e,0x00050041,0x00000037,0x00000327,0x00000313, + 0x00000293,0x0004003d,0x00000036,0x00000328,0x00000327,0x0003003e,0x00000326,0x00000328, + 0x0003003e,0x00000329,0x00000325,0x00060039,0x00000036,0x0000032a,0x0000003b,0x00000326, + 0x00000329,0x0003003e,0x0000032b,0x00000197,0x0003003e,0x0000032c,0x0000032a,0x00060039, + 0x00000036,0x0000032d,0x0000004f,0x0000032b,0x0000032c,0x00050041,0x00000037,0x0000032e, + 0x00000313,0x00000293,0x0003003e,0x0000032e,0x0000032d,0x0004003d,0x00000055,0x0000032f, + 0x00000313,0x000200fe,0x0000032f,0x00010038,0x00050036,0x0000001a,0x000000cf,0x00000000, + 0x000000cb,0x00030037,0x0000001b,0x000000cc,0x00030037,0x0000006d,0x000000cd,0x00030037, + 0x0000006d,0x000000ce,0x000200f8,0x000000d0,0x0004003b,0x0000001b,0x00000332,0x00000007, + 0x0004003b,0x0000001b,0x00000337,0x00000007,0x0004003b,0x0000001b,0x0000033c,0x00000007, + 0x0004003b,0x0000001b,0x0000033e,0x00000007,0x0004003b,0x0000001b,0x00000340,0x00000007, + 0x0004003b,0x0000001b,0x00000341,0x00000007,0x0004003b,0x0000001b,0x00000343,0x00000007, + 0x0004003d,0x0000001a,0x00000333,0x000000cc,0x0004003d,0x00000055,0x00000334,0x000000cd, + 0x0004006f,0x0000001a,0x00000335,0x00000334,0x00050085,0x0000001a,0x00000336,0x00000333, + 0x00000335,0x0003003e,0x00000332,0x00000336,0x0004003d,0x00000055,0x00000339,0x000000cd, + 0x0004006f,0x0000001a,0x0000033a,0x00000339,0x00050083,0x0000001a,0x0000033b,0x0000033a, + 0x00000338,0x0004003d,0x0000001a,0x0000033d,0x00000332,0x0003003e,0x0000033c,0x0000033d, + 0x0003003e,0x0000033e,0x0000033b,0x00060039,0x0000001a,0x0000033f,0x00000028,0x0000033c, + 0x0000033e,0x0003003e,0x00000340,0x00000338,0x0003003e,0x00000341,0x0000033f,0x00060039, + 0x0000001a,0x00000342,0x00000043,0x00000340,0x00000341,0x0003003e,0x00000337,0x00000342, + 0x0004003d,0x0000001a,0x00000344,0x00000337,0x0004003d,0x00000055,0x00000345,0x000000ce, + 0x0004006f,0x0000001a,0x00000346,0x00000345,0x00050088,0x0000001a,0x00000347,0x00000344, + 0x00000346,0x0003003e,0x00000343,0x00000347,0x0004003d,0x0000001a,0x00000348,0x00000343, + 0x000200fe,0x00000348,0x00010038,0x00050036,0x000000a7,0x000000d4,0x00000000,0x000000d1, + 0x00030037,0x0000006d,0x000000d2,0x00030037,0x0000006d,0x000000d3,0x000200f8,0x000000d5, + 0x0004003d,0x00000055,0x0000034b,0x000000d2,0x0004007c,0x0000034c,0x0000034d,0x0000034b, + 0x0004003d,0x00000055,0x0000034e,0x000000d3,0x0004007c,0x0000034c,0x0000034f,0x0000034e, + 0x000500b0,0x00000350,0x00000351,0x0000034d,0x0000034f,0x0004009b,0x000000a7,0x00000352, + 0x00000351,0x000200fe,0x00000352,0x00010038,0x00050036,0x00000006,0x000000d7,0x00000000, + 0x00000016,0x00030037,0x00000007,0x000000d6,0x000200f8,0x000000d8,0x0004003b,0x00000007, + 0x00000358,0x00000007,0x0004003d,0x00000006,0x00000355,0x000000d6,0x0006000c,0x00000006, + 0x00000356,0x00000001,0x00000004,0x00000355,0x000500b8,0x000000a7,0x00000357,0x00000356, + 0x000002e7,0x000300f7,0x0000035a,0x00000000,0x000400fa,0x00000357,0x00000359,0x0000035b, + 0x000200f8,0x00000359,0x0003003e,0x00000358,0x00000155,0x000200f9,0x0000035a,0x000200f8, + 0x0000035b,0x0004003d,0x00000006,0x0000035d,0x000000d6,0x00050085,0x00000006,0x0000035e, + 0x0000035c,0x0000035d,0x0006000c,0x00000006,0x0000035f,0x00000001,0x0000000d,0x0000035e, + 0x0004003d,0x00000006,0x00000360,0x000000d6,0x00050085,0x00000006,0x00000361,0x0000035c, + 0x00000360,0x00050088,0x00000006,0x00000362,0x0000035f,0x00000361,0x0004003d,0x00000006, + 0x00000364,0x000000d6,0x00050085,0x00000006,0x00000365,0x00000363,0x00000364,0x0006000c, + 0x00000006,0x00000366,0x00000001,0x0000000d,0x00000365,0x0004003d,0x00000006,0x00000367, + 0x000000d6,0x00050085,0x00000006,0x00000368,0x00000363,0x00000367,0x00050088,0x00000006, + 0x00000369,0x00000366,0x00000368,0x00050085,0x00000006,0x0000036a,0x00000362,0x00000369, + 0x0003003e,0x00000358,0x0000036a,0x000200f9,0x0000035a,0x000200f8,0x0000035a,0x0004003d, + 0x00000006,0x0000036b,0x00000358,0x000200fe,0x0000036b,0x00010038,0x00050036,0x00000006, + 0x000000da,0x00000000,0x00000016,0x00030037,0x00000007,0x000000d9,0x000200f8,0x000000db, + 0x0004003b,0x00000007,0x00000371,0x00000007,0x0004003b,0x00000007,0x00000372,0x00000007, + 0x0004003b,0x00000007,0x00000374,0x00000007,0x0004003d,0x00000006,0x0000036e,0x000000d9, + 0x0006000c,0x00000006,0x0000036f,0x00000001,0x00000004,0x0000036e,0x0003003e,0x00000371, + 0x0000036f,0x0003003e,0x00000372,0x00000370,0x00060039,0x00000006,0x00000373,0x00000023, + 0x00000371,0x00000372,0x0003003e,0x000000d9,0x00000373,0x0004003d,0x00000006,0x00000375, + 0x000000d9,0x0003003e,0x00000374,0x00000375,0x00050039,0x00000006,0x00000376,0x000000d7, + 0x00000374,0x000200fe,0x00000376,0x00010038,0x00050036,0x00000006,0x000000dd,0x00000000, + 0x00000016,0x00030037,0x00000007,0x000000dc,0x000200f8,0x000000de,0x0004003b,0x00000007, + 0x00000379,0x00000007,0x0004003b,0x00000007,0x0000037e,0x00000007,0x0004003d,0x00000006, + 0x0000037b,0x000000dc,0x00050085,0x00000006,0x0000037c,0x0000037a,0x0000037b,0x00050083, + 0x00000006,0x0000037d,0x0000037c,0x00000155,0x0003003e,0x00000379,0x0000037d,0x0004003d, + 0x00000006,0x0000037f,0x000000dc,0x00050085,0x00000006,0x00000380,0x000002ad,0x0000037f, + 0x00050083,0x00000006,0x00000381,0x00000380,0x00000155,0x0003003e,0x0000037e,0x00000381, + 0x0004003d,0x00000006,0x00000383,0x00000379,0x00050085,0x00000006,0x00000384,0x00000382, + 0x00000383,0x0004003d,0x00000006,0x00000385,0x00000379,0x00050085,0x00000006,0x00000386, + 0x00000384,0x00000385,0x00050083,0x00000006,0x00000388,0x00000386,0x00000387,0x0004003d, + 0x00000006,0x00000389,0x0000037e,0x0004003d,0x00000006,0x0000038a,0x0000037e,0x00050085, + 0x00000006,0x0000038b,0x00000389,0x0000038a,0x00050085,0x00000006,0x0000038c,0x00000388, + 0x0000038b,0x000200fe,0x0000038c,0x00010038,0x00050036,0x00000006,0x000000e0,0x00000000, + 0x00000016,0x00030037,0x00000007,0x000000df,0x000200f8,0x000000e1,0x0004003b,0x00000007, + 0x00000390,0x00000007,0x0004003b,0x00000007,0x00000392,0x00000007,0x0004003b,0x00000007, + 0x00000394,0x00000007,0x0004003d,0x00000006,0x00000391,0x000000df,0x0003003e,0x00000390, + 0x00000391,0x0003003e,0x00000392,0x0000038f,0x00060039,0x00000006,0x00000393,0x00000023, + 0x00000390,0x00000392,0x0003003e,0x000000df,0x00000393,0x0004003d,0x00000006,0x00000395, + 0x000000df,0x0003003e,0x00000394,0x00000395,0x00050039,0x00000006,0x00000396,0x000000dd, + 0x00000394,0x000200fe,0x00000396,0x00010038,0x00050036,0x0000002f,0x000000e8,0x00000000, + 0x000000e2,0x00030037,0x00000030,0x000000e3,0x00030037,0x00000030,0x000000e4,0x00030037, + 0x00000030,0x000000e5,0x00030037,0x00000030,0x000000e6,0x00030037,0x00000007,0x000000e7, + 0x000200f8,0x000000e9,0x0004003b,0x00000007,0x00000399,0x00000007,0x0004003b,0x00000007, + 0x0000039d,0x00000007,0x0004003b,0x00000007,0x0000039f,0x00000007,0x0004003b,0x00000007, + 0x000003a3,0x00000007,0x0004003b,0x00000007,0x000003a5,0x00000007,0x0004003b,0x00000007, + 0x000003a8,0x00000007,0x0004003b,0x00000007,0x000003aa,0x00000007,0x0004003b,0x00000007, + 0x000003ad,0x00000007,0x0004003d,0x00000006,0x0000039b,0x000000e7,0x00050083,0x00000006, + 0x0000039c,0x0000039a,0x0000039b,0x0003003e,0x0000039d,0x0000039c,0x00050039,0x00000006, + 0x0000039e,0x000000da,0x0000039d,0x0003003e,0x00000399,0x0000039e,0x0004003d,0x00000006, + 0x000003a1,0x000000e7,0x00050083,0x00000006,0x000003a2,0x000003a0,0x000003a1,0x0003003e, + 0x000003a3,0x000003a2,0x00050039,0x00000006,0x000003a4,0x000000da,0x000003a3,0x0003003e, + 0x0000039f,0x000003a4,0x0004003d,0x00000006,0x000003a6,0x000000e7,0x00050083,0x00000006, + 0x000003a7,0x00000155,0x000003a6,0x0003003e,0x000003a8,0x000003a7,0x00050039,0x00000006, + 0x000003a9,0x000000da,0x000003a8,0x0003003e,0x000003a5,0x000003a9,0x0004003d,0x00000006, + 0x000003ab,0x000000e7,0x00050083,0x00000006,0x000003ac,0x00000370,0x000003ab,0x0003003e, + 0x000003ad,0x000003ac,0x00050039,0x00000006,0x000003ae,0x000000da,0x000003ad,0x0003003e, + 0x000003aa,0x000003ae,0x0004003d,0x00000006,0x000003af,0x00000399,0x0004003d,0x0000002f, + 0x000003b0,0x000000e3,0x0005008e,0x0000002f,0x000003b1,0x000003b0,0x000003af,0x0004003d, + 0x00000006,0x000003b2,0x0000039f,0x0004003d,0x0000002f,0x000003b3,0x000000e4,0x0005008e, + 0x0000002f,0x000003b4,0x000003b3,0x000003b2,0x00050081,0x0000002f,0x000003b5,0x000003b1, + 0x000003b4,0x0004003d,0x00000006,0x000003b6,0x000003a5,0x0004003d,0x0000002f,0x000003b7, + 0x000000e5,0x0005008e,0x0000002f,0x000003b8,0x000003b7,0x000003b6,0x00050081,0x0000002f, + 0x000003b9,0x000003b5,0x000003b8,0x0004003d,0x00000006,0x000003ba,0x000003aa,0x0004003d, + 0x0000002f,0x000003bb,0x000000e6,0x0005008e,0x0000002f,0x000003bc,0x000003bb,0x000003ba, + 0x00050081,0x0000002f,0x000003bd,0x000003b9,0x000003bc,0x0004003d,0x00000006,0x000003be, + 0x00000399,0x0004003d,0x00000006,0x000003bf,0x0000039f,0x00050081,0x00000006,0x000003c0, + 0x000003be,0x000003bf,0x0004003d,0x00000006,0x000003c1,0x000003a5,0x00050081,0x00000006, + 0x000003c2,0x000003c0,0x000003c1,0x0004003d,0x00000006,0x000003c3,0x000003aa,0x00050081, + 0x00000006,0x000003c4,0x000003c2,0x000003c3,0x00070050,0x0000002f,0x000003c5,0x000003c4, + 0x000003c4,0x000003c4,0x000003c4,0x00050088,0x0000002f,0x000003c6,0x000003bd,0x000003c5, + 0x000200fe,0x000003c6,0x00010038,0x00050036,0x0000002f,0x000000ef,0x00000000,0x000000ec, + 0x00030037,0x000000eb,0x000000ed,0x00030037,0x0000001b,0x000000ee,0x000200f8,0x000000f0, + 0x0004003b,0x00000030,0x000003c9,0x00000007,0x0004003b,0x00000030,0x000003ca,0x00000007, + 0x0004003b,0x00000030,0x000003cd,0x00000007,0x0004003b,0x00000030,0x000003d0,0x00000007, + 0x0004003b,0x00000030,0x000003d3,0x00000007,0x0004003b,0x00000007,0x000003d6,0x00000007, + 0x0004003b,0x00000030,0x000003da,0x00000007,0x0004003b,0x00000030,0x000003dd,0x00000007, + 0x0004003b,0x00000030,0x000003e0,0x00000007,0x0004003b,0x00000030,0x000003e3,0x00000007, + 0x0004003b,0x00000030,0x000003e6,0x00000007,0x0004003b,0x00000007,0x000003e9,0x00000007, + 0x0004003b,0x00000030,0x000003ed,0x00000007,0x0004003b,0x00000030,0x000003f1,0x00000007, + 0x0004003b,0x00000030,0x000003f4,0x00000007,0x0004003b,0x00000030,0x000003f7,0x00000007, + 0x0004003b,0x00000030,0x000003fa,0x00000007,0x0004003b,0x00000007,0x000003fd,0x00000007, + 0x0004003b,0x00000030,0x00000401,0x00000007,0x0004003b,0x00000030,0x00000404,0x00000007, + 0x0004003b,0x00000030,0x00000407,0x00000007,0x0004003b,0x00000030,0x0000040a,0x00000007, + 0x0004003b,0x00000030,0x0000040d,0x00000007,0x0004003b,0x00000007,0x00000410,0x00000007, + 0x0004003b,0x00000030,0x00000414,0x00000007,0x0004003b,0x00000030,0x00000415,0x00000007, + 0x0004003b,0x00000030,0x00000417,0x00000007,0x0004003b,0x00000030,0x00000419,0x00000007, + 0x0004003b,0x00000030,0x0000041b,0x00000007,0x0004003b,0x00000007,0x0000041d,0x00000007, + 0x0004003b,0x00000423,0x00000424,0x00000007,0x0004003b,0x00000030,0x0000042e,0x00000007, + 0x0004003b,0x00000030,0x00000431,0x00000007,0x0004003b,0x00000037,0x00000434,0x00000007, + 0x0004003b,0x00000030,0x0000043d,0x00000007,0x0004003b,0x00000030,0x0000043f,0x00000007, + 0x0004003b,0x00000030,0x00000444,0x00000007,0x0004003b,0x00000030,0x00000446,0x00000007, + 0x00050041,0x00000030,0x000003cb,0x000000ed,0x00000197,0x0004003d,0x0000002f,0x000003cc, + 0x000003cb,0x0003003e,0x000003ca,0x000003cc,0x00050041,0x00000030,0x000003ce,0x000000ed, + 0x0000023e,0x0004003d,0x0000002f,0x000003cf,0x000003ce,0x0003003e,0x000003cd,0x000003cf, + 0x00050041,0x00000030,0x000003d1,0x000000ed,0x000001a2,0x0004003d,0x0000002f,0x000003d2, + 0x000003d1,0x0003003e,0x000003d0,0x000003d2,0x00050041,0x00000030,0x000003d4,0x000000ed, + 0x000001a7,0x0004003d,0x0000002f,0x000003d5,0x000003d4,0x0003003e,0x000003d3,0x000003d5, + 0x00050041,0x00000007,0x000003d7,0x000000ee,0x000001fa,0x0004003d,0x00000006,0x000003d8, + 0x000003d7,0x0003003e,0x000003d6,0x000003d8,0x00090039,0x0000002f,0x000003d9,0x000000e8, + 0x000003ca,0x000003cd,0x000003d0,0x000003d3,0x000003d6,0x0003003e,0x000003c9,0x000003d9, + 0x00050041,0x00000030,0x000003de,0x000000ed,0x0000019d,0x0004003d,0x0000002f,0x000003df, + 0x000003de,0x0003003e,0x000003dd,0x000003df,0x00050041,0x00000030,0x000003e1,0x000000ed, + 0x000003db,0x0004003d,0x0000002f,0x000003e2,0x000003e1,0x0003003e,0x000003e0,0x000003e2, + 0x00050041,0x00000030,0x000003e4,0x000000ed,0x000003dc,0x0004003d,0x0000002f,0x000003e5, + 0x000003e4,0x0003003e,0x000003e3,0x000003e5,0x00050041,0x00000030,0x000003e7,0x000000ed, + 0x000001ac,0x0004003d,0x0000002f,0x000003e8,0x000003e7,0x0003003e,0x000003e6,0x000003e8, + 0x00050041,0x00000007,0x000003ea,0x000000ee,0x000001fa,0x0004003d,0x00000006,0x000003eb, + 0x000003ea,0x0003003e,0x000003e9,0x000003eb,0x00090039,0x0000002f,0x000003ec,0x000000e8, + 0x000003dd,0x000003e0,0x000003e3,0x000003e6,0x000003e9,0x0003003e,0x000003da,0x000003ec, + 0x00050041,0x00000030,0x000003f2,0x000000ed,0x000003ee,0x0004003d,0x0000002f,0x000003f3, + 0x000003f2,0x0003003e,0x000003f1,0x000003f3,0x00050041,0x00000030,0x000003f5,0x000000ed, + 0x000003ef,0x0004003d,0x0000002f,0x000003f6,0x000003f5,0x0003003e,0x000003f4,0x000003f6, + 0x00050041,0x00000030,0x000003f8,0x000000ed,0x000001b2,0x0004003d,0x0000002f,0x000003f9, + 0x000003f8,0x0003003e,0x000003f7,0x000003f9,0x00050041,0x00000030,0x000003fb,0x000000ed, + 0x000003f0,0x0004003d,0x0000002f,0x000003fc,0x000003fb,0x0003003e,0x000003fa,0x000003fc, + 0x00050041,0x00000007,0x000003fe,0x000000ee,0x000001fa,0x0004003d,0x00000006,0x000003ff, + 0x000003fe,0x0003003e,0x000003fd,0x000003ff,0x00090039,0x0000002f,0x00000400,0x000000e8, + 0x000003f1,0x000003f4,0x000003f7,0x000003fa,0x000003fd,0x0003003e,0x000003ed,0x00000400, + 0x00050041,0x00000030,0x00000405,0x000000ed,0x00000402,0x0004003d,0x0000002f,0x00000406, + 0x00000405,0x0003003e,0x00000404,0x00000406,0x00050041,0x00000030,0x00000408,0x000000ed, + 0x000001b7,0x0004003d,0x0000002f,0x00000409,0x00000408,0x0003003e,0x00000407,0x00000409, + 0x00050041,0x00000030,0x0000040b,0x000000ed,0x00000403,0x0004003d,0x0000002f,0x0000040c, + 0x0000040b,0x0003003e,0x0000040a,0x0000040c,0x00050041,0x00000030,0x0000040e,0x000000ed, + 0x000001bd,0x0004003d,0x0000002f,0x0000040f,0x0000040e,0x0003003e,0x0000040d,0x0000040f, + 0x00050041,0x00000007,0x00000411,0x000000ee,0x000001fa,0x0004003d,0x00000006,0x00000412, + 0x00000411,0x0003003e,0x00000410,0x00000412,0x00090039,0x0000002f,0x00000413,0x000000e8, + 0x00000404,0x00000407,0x0000040a,0x0000040d,0x00000410,0x0003003e,0x00000401,0x00000413, + 0x0004003d,0x0000002f,0x00000416,0x000003c9,0x0003003e,0x00000415,0x00000416,0x0004003d, + 0x0000002f,0x00000418,0x000003da,0x0003003e,0x00000417,0x00000418,0x0004003d,0x0000002f, + 0x0000041a,0x000003ed,0x0003003e,0x00000419,0x0000041a,0x0004003d,0x0000002f,0x0000041c, + 0x00000401,0x0003003e,0x0000041b,0x0000041c,0x00050041,0x00000007,0x0000041e,0x000000ee, + 0x00000293,0x0004003d,0x00000006,0x0000041f,0x0000041e,0x0003003e,0x0000041d,0x0000041f, + 0x00090039,0x0000002f,0x00000420,0x000000e8,0x00000415,0x00000417,0x00000419,0x0000041b, + 0x0000041d,0x0003003e,0x00000414,0x00000420,0x00050041,0x00000030,0x00000425,0x000000ed, + 0x000003db,0x0004003d,0x0000002f,0x00000426,0x00000425,0x00050041,0x00000030,0x00000427, + 0x000000ed,0x000003dc,0x0004003d,0x0000002f,0x00000428,0x00000427,0x00050041,0x00000030, + 0x00000429,0x000000ed,0x000003ef,0x0004003d,0x0000002f,0x0000042a,0x00000429,0x00050041, + 0x00000030,0x0000042b,0x000000ed,0x000001b2,0x0004003d,0x0000002f,0x0000042c,0x0000042b, + 0x00070050,0x00000422,0x0000042d,0x00000426,0x00000428,0x0000042a,0x0000042c,0x0003003e, + 0x00000424,0x0000042d,0x00050041,0x00000030,0x0000042f,0x00000424,0x00000197,0x0004003d, + 0x0000002f,0x00000430,0x0000042f,0x0003003e,0x0000042e,0x00000430,0x00050041,0x00000030, + 0x00000432,0x00000424,0x00000197,0x0004003d,0x0000002f,0x00000433,0x00000432,0x0003003e, + 0x00000431,0x00000433,0x0003003e,0x00000434,0x0000023e,0x000200f9,0x00000435,0x000200f8, + 0x00000435,0x000400f6,0x00000437,0x00000438,0x00000000,0x000200f9,0x00000439,0x000200f8, + 0x00000439,0x0004003d,0x00000036,0x0000043a,0x00000434,0x000500b1,0x000000a7,0x0000043b, + 0x0000043a,0x0000019d,0x000400fa,0x0000043b,0x00000436,0x00000437,0x000200f8,0x00000436, + 0x0004003d,0x00000036,0x0000043c,0x00000434,0x0004003d,0x0000002f,0x0000043e,0x0000042e, + 0x0003003e,0x0000043d,0x0000043e,0x00050041,0x00000030,0x00000440,0x00000424,0x0000043c, + 0x0004003d,0x0000002f,0x00000441,0x00000440,0x0003003e,0x0000043f,0x00000441,0x00060039, + 0x0000002f,0x00000442,0x00000034,0x0000043d,0x0000043f,0x0003003e,0x0000042e,0x00000442, + 0x0004003d,0x00000036,0x00000443,0x00000434,0x0004003d,0x0000002f,0x00000445,0x00000431, + 0x0003003e,0x00000444,0x00000445,0x00050041,0x00000030,0x00000447,0x00000424,0x00000443, + 0x0004003d,0x0000002f,0x00000448,0x00000447,0x0003003e,0x00000446,0x00000448,0x00060039, + 0x0000002f,0x00000449,0x0000004b,0x00000444,0x00000446,0x0003003e,0x00000431,0x00000449, + 0x000200f9,0x00000438,0x000200f8,0x00000438,0x0004003d,0x00000036,0x0000044a,0x00000434, + 0x00050080,0x00000036,0x0000044b,0x0000044a,0x0000023e,0x0003003e,0x00000434,0x0000044b, + 0x000200f9,0x00000435,0x000200f8,0x00000437,0x0004003d,0x0000002f,0x0000044c,0x00000414, + 0x0004003d,0x0000002f,0x0000044d,0x0000042e,0x0004003d,0x0000002f,0x0000044e,0x00000431, + 0x0008000c,0x0000002f,0x0000044f,0x00000001,0x0000002b,0x0000044c,0x0000044d,0x0000044e, + 0x0003003e,0x00000414,0x0000044f,0x0004003d,0x0000002f,0x00000450,0x00000414,0x000200fe, + 0x00000450,0x00010038,0x00050036,0x00000055,0x000000f4,0x00000000,0x000000c5,0x00030037, + 0x0000006d,0x000000f1,0x00030037,0x0000006d,0x000000f2,0x00030037,0x0000006d,0x000000f3, + 0x000200f8,0x000000f5,0x0004003b,0x0000006d,0x00000453,0x00000007,0x0004003b,0x00000037, + 0x0000045a,0x00000007,0x0004003b,0x00000037,0x0000045d,0x00000007,0x0004003b,0x00000037, + 0x0000045f,0x00000007,0x0004003b,0x00000037,0x00000460,0x00000007,0x0004003b,0x00000037, + 0x00000466,0x00000007,0x0004003b,0x00000037,0x00000469,0x00000007,0x0004003b,0x00000037, + 0x0000046b,0x00000007,0x0004003b,0x00000037,0x0000046c,0x00000007,0x0004003d,0x00000055, + 0x00000454,0x000000f1,0x0004003d,0x00000055,0x00000455,0x000000f2,0x00050080,0x00000055, + 0x00000456,0x00000454,0x00000455,0x0003003e,0x00000453,0x00000456,0x00050041,0x00000037, + 0x00000457,0x000000f3,0x000001fa,0x0004003d,0x00000036,0x00000458,0x00000457,0x00050082, + 0x00000036,0x00000459,0x00000458,0x000001a2,0x00050041,0x00000037,0x0000045b,0x00000453, + 0x000001fa,0x0004003d,0x00000036,0x0000045c,0x0000045b,0x0003003e,0x0000045a,0x0000045c, + 0x0003003e,0x0000045d,0x00000459,0x00060039,0x00000036,0x0000045e,0x0000003b,0x0000045a, + 0x0000045d,0x0003003e,0x0000045f,0x0000023e,0x0003003e,0x00000460,0x0000045e,0x00060039, + 0x00000036,0x00000461,0x0000004f,0x0000045f,0x00000460,0x00050041,0x00000037,0x00000462, + 0x00000453,0x000001fa,0x0003003e,0x00000462,0x00000461,0x00050041,0x00000037,0x00000463, + 0x000000f3,0x00000293,0x0004003d,0x00000036,0x00000464,0x00000463,0x00050082,0x00000036, + 0x00000465,0x00000464,0x000001a2,0x00050041,0x00000037,0x00000467,0x00000453,0x00000293, + 0x0004003d,0x00000036,0x00000468,0x00000467,0x0003003e,0x00000466,0x00000468,0x0003003e, + 0x00000469,0x00000465,0x00060039,0x00000036,0x0000046a,0x0000003b,0x00000466,0x00000469, + 0x0003003e,0x0000046b,0x0000023e,0x0003003e,0x0000046c,0x0000046a,0x00060039,0x00000036, + 0x0000046d,0x0000004f,0x0000046b,0x0000046c,0x00050041,0x00000037,0x0000046e,0x00000453, + 0x00000293,0x0003003e,0x0000046e,0x0000046d,0x0004003d,0x00000055,0x0000046f,0x00000453, + 0x000200fe,0x0000046f,0x00010038,0x00050036,0x00000002,0x000000f9,0x00000000,0x000000f6, + 0x00030037,0x000000a0,0x000000f7,0x00030037,0x0000000f,0x000000f8,0x000200f8,0x000000fa, + 0x0004003d,0x0000000e,0x00000472,0x000000f8,0x00050041,0x0000000f,0x00000473,0x000000f7, + 0x000001a2,0x0004003d,0x0000000e,0x00000474,0x00000473,0x00050041,0x0000000f,0x00000475, + 0x000000f7,0x000001a7,0x0004003d,0x0000000e,0x00000476,0x00000475,0x0008000c,0x0000000e, + 0x00000477,0x00000001,0x0000002b,0x00000472,0x00000474,0x00000476,0x0003003e,0x000000f8, + 0x00000477,0x000100fd,0x00010038,0x00050036,0x00000006,0x000000fe,0x00000000,0x000000fb, + 0x00030037,0x0000001b,0x000000fc,0x00030037,0x00000007,0x000000fd,0x000200f8,0x000000ff, + 0x0004003b,0x0000001b,0x00000478,0x00000007,0x0004003b,0x00000007,0x0000047d,0x00000007, + 0x0004003b,0x00000007,0x00000481,0x00000007,0x0004003d,0x0000001a,0x00000479,0x000000fc, + 0x0004003d,0x00000006,0x0000047a,0x000000fd,0x00050050,0x0000001a,0x0000047b,0x0000047a, + 0x0000047a,0x00050085,0x0000001a,0x0000047c,0x00000479,0x0000047b,0x0003003e,0x00000478, + 0x0000047c,0x0004003d,0x0000001a,0x0000047e,0x00000478,0x0004003d,0x0000001a,0x0000047f, + 0x00000478,0x00050094,0x00000006,0x00000480,0x0000047e,0x0000047f,0x0003003e,0x00000481, + 0x00000480,0x00050039,0x00000006,0x00000482,0x000000e0,0x00000481,0x0003003e,0x0000047d, + 0x00000482,0x0004003d,0x00000006,0x00000483,0x0000047d,0x000200fe,0x00000483,0x00010038, + 0x00050036,0x00000006,0x00000106,0x00000000,0x00000103,0x00030037,0x00000100,0x00000104, + 0x00030037,0x00000102,0x00000105,0x000200f8,0x00000107,0x0004003b,0x00000007,0x00000486, + 0x00000007,0x0004003b,0x00000007,0x0000048f,0x00000007,0x0004003b,0x00000007,0x00000490, + 0x00000007,0x00040039,0x0000001a,0x00000487,0x00000062,0x00050050,0x0000001a,0x00000488, + 0x00000155,0x00000155,0x00050088,0x0000001a,0x00000489,0x00000488,0x00000487,0x00050050, + 0x0000001a,0x0000048a,0x00000155,0x00000155,0x00050083,0x0000001a,0x0000048b,0x00000489, + 0x0000048a,0x00050051,0x00000006,0x0000048c,0x0000048b,0x00000000,0x00050081,0x00000006, + 0x0000048d,0x00000155,0x0000048c,0x0003003e,0x00000486,0x0000048d,0x0003003e,0x0000048f, + 0x0000048e,0x0004003d,0x00000006,0x00000491,0x00000486,0x0003003e,0x00000490,0x00000491, + 0x00060039,0x00000006,0x00000492,0x00000023,0x0000048f,0x00000490,0x000200fe,0x00000492, + 0x00010038,0x00050036,0x0000000e,0x00000109,0x00000000,0x0000006e,0x00030037,0x0000006d, + 0x00000108,0x000200f8,0x0000010a,0x0004003b,0x0000000f,0x00000495,0x00000007,0x0004003b, + 0x0000006d,0x00000497,0x00000007,0x0004003b,0x0000000f,0x0000049a,0x00000007,0x0004003b, + 0x0000000f,0x0000049b,0x00000007,0x0004003b,0x0000000f,0x0000049f,0x00000007,0x0004003b, + 0x0000000f,0x000004a0,0x00000007,0x0004003d,0x00000055,0x00000498,0x00000108,0x0003003e, + 0x00000497,0x00000498,0x00050039,0x0000000e,0x00000499,0x00000070,0x00000497,0x0003003e, + 0x0000049a,0x00000496,0x0003003e,0x0000049b,0x00000499,0x00060039,0x0000000e,0x0000049c, + 0x00000047,0x0000049a,0x0000049b,0x00040039,0x00000006,0x0000049d,0x00000096,0x0005008e, + 0x0000000e,0x0000049e,0x0000049c,0x0000049d,0x0003003e,0x00000495,0x0000049e,0x0004003d, + 0x0000000e,0x000004a1,0x00000495,0x0003003e,0x000004a0,0x000004a1,0x00050039,0x0000000e, + 0x000004a2,0x000000b9,0x000004a0,0x0003003e,0x0000049f,0x000004a2,0x0004003d,0x0000000e, + 0x000004a3,0x0000049f,0x000200fe,0x000004a3,0x00010038,0x00050036,0x00000002,0x0000010e, + 0x00000000,0x0000010b,0x00030037,0x00000100,0x0000010c,0x00030037,0x00000102,0x0000010d, + 0x000200f8,0x0000010f,0x0004003b,0x0000001b,0x000004a6,0x00000007,0x0004003b,0x0000001b, + 0x000004aa,0x00000007,0x0004003b,0x0000006d,0x000004ae,0x00000007,0x0004003b,0x0000001b, + 0x000004b2,0x00000007,0x0004003b,0x0000001b,0x000004b8,0x00000007,0x0004003b,0x0000006d, + 0x000004bc,0x00000007,0x0004003b,0x000000a8,0x000004cd,0x00000007,0x0004003b,0x000000a8, + 0x000004d3,0x00000007,0x0004003b,0x0000001b,0x000004d9,0x00000007,0x0004003b,0x000000a8, + 0x000004dc,0x00000007,0x0004003b,0x00000037,0x000004df,0x00000007,0x0004003b,0x00000037, + 0x000004e0,0x00000007,0x0004003b,0x00000037,0x000004e8,0x00000007,0x0004003b,0x0000006d, + 0x000004f0,0x00000007,0x0004003b,0x00000037,0x000004f2,0x00000007,0x0004003b,0x00000037, + 0x000004fb,0x00000007,0x0004003b,0x0000006d,0x00000504,0x00000007,0x0004003b,0x0000006d, + 0x0000050a,0x00000007,0x0004003b,0x0000006d,0x0000050c,0x00000007,0x0004003b,0x0000006d, + 0x0000050e,0x00000007,0x0004003b,0x0000006d,0x0000050f,0x00000007,0x0004003b,0x00000513, + 0x00000514,0x00000007,0x0004003b,0x0000006d,0x00000516,0x00000007,0x0004003b,0x0000000f, + 0x0000052c,0x00000007,0x0004003b,0x0000000f,0x00000530,0x00000007,0x0004003b,0x0000000f, + 0x00000532,0x00000007,0x0004003b,0x00000007,0x00000537,0x00000007,0x0004003b,0x00000102, + 0x00000538,0x00000007,0x0004003b,0x00000007,0x0000053c,0x00000007,0x0004003b,0x00000007, + 0x00000541,0x00000007,0x0004003b,0x00000007,0x00000542,0x00000007,0x0004003b,0x00000007, + 0x00000544,0x00000007,0x0004003b,0x00000007,0x0000054e,0x00000007,0x0004003b,0x00000007, + 0x00000550,0x00000007,0x0004003b,0x00000007,0x00000551,0x00000007,0x0004003b,0x00000007, + 0x00000553,0x00000007,0x0004003b,0x00000007,0x00000554,0x00000007,0x0004003b,0x00000007, + 0x00000556,0x00000007,0x0004003b,0x00000007,0x00000557,0x00000007,0x0004003b,0x00000007, + 0x00000559,0x00000007,0x0004003b,0x00000007,0x0000055b,0x00000007,0x0004003b,0x00000037, + 0x0000055e,0x00000007,0x0004003b,0x00000037,0x00000566,0x00000007,0x0004003b,0x0000006d, + 0x0000056e,0x00000007,0x0004003b,0x00000037,0x00000570,0x00000007,0x0004003b,0x00000037, + 0x00000579,0x00000007,0x0004003b,0x0000001b,0x00000582,0x00000007,0x0004003b,0x0000001b, + 0x00000587,0x00000007,0x0004003b,0x0000006d,0x0000058b,0x00000007,0x0004003b,0x00000007, + 0x00000591,0x00000007,0x0004003b,0x0000006d,0x00000594,0x00000007,0x0004003b,0x0000006d, + 0x00000595,0x00000007,0x0004003b,0x00000007,0x0000059c,0x00000007,0x0004003b,0x0000001b, + 0x0000059e,0x00000007,0x0004003b,0x00000007,0x000005a0,0x00000007,0x0004003b,0x00000007, + 0x000005b2,0x00000007,0x0004003b,0x00000007,0x000005b6,0x00000007,0x0004003b,0x000000a8, + 0x000005bd,0x00000007,0x0004003b,0x000000a8,0x000005c7,0x00000007,0x0004003b,0x000000a0, + 0x000005c9,0x00000007,0x0004003b,0x000000a0,0x000005d5,0x00000007,0x0004003b,0x000000a0, + 0x000005f4,0x00000007,0x0004003b,0x0000000f,0x000005f7,0x00000007,0x0004003b,0x0000000f, + 0x00000600,0x00000007,0x0004003b,0x0000000f,0x00000604,0x00000007,0x0004003b,0x0000000f, + 0x00000606,0x00000007,0x00050051,0x00000055,0x000004a7,0x0000010c,0x00000000,0x0004006f, + 0x0000001a,0x000004a8,0x000004a7,0x00050081,0x0000001a,0x000004a9,0x000004a8,0x00000338, + 0x0003003e,0x000004a6,0x000004a9,0x0004003d,0x0000001a,0x000004ab,0x000004a6,0x00040039, + 0x0000001a,0x000004ac,0x00000062,0x00050085,0x0000001a,0x000004ad,0x000004ab,0x000004ac, + 0x0003003e,0x000004aa,0x000004ad,0x0004003d,0x0000001a,0x000004af,0x000004aa,0x0006000c, + 0x0000001a,0x000004b0,0x00000001,0x00000008,0x000004af,0x0004006e,0x00000055,0x000004b1, + 0x000004b0,0x0003003e,0x000004ae,0x000004b1,0x0004003d,0x00000055,0x000004b3,0x000004ae, + 0x0004006f,0x0000001a,0x000004b4,0x000004b3,0x00050081,0x0000001a,0x000004b5,0x000004b4, + 0x00000338,0x00040039,0x0000001a,0x000004b6,0x00000060,0x00050083,0x0000001a,0x000004b7, + 0x000004b5,0x000004b6,0x0003003e,0x000004b2,0x000004b7,0x0004003d,0x0000001a,0x000004b9, + 0x000004b2,0x0004003d,0x0000001a,0x000004ba,0x000004aa,0x00050083,0x0000001a,0x000004bb, + 0x000004b9,0x000004ba,0x0003003e,0x000004b8,0x000004bb,0x00050041,0x00000007,0x000004bd, + 0x000004b2,0x000001fa,0x0004003d,0x00000006,0x000004be,0x000004bd,0x00050041,0x00000007, + 0x000004bf,0x000004aa,0x000001fa,0x0004003d,0x00000006,0x000004c0,0x000004bf,0x000500ba, + 0x000000a7,0x000004c1,0x000004be,0x000004c0,0x000600a9,0x00000036,0x000004c4,0x000004c1, + 0x000004c2,0x000004c3,0x00050041,0x00000037,0x000004c5,0x000004bc,0x000001fa,0x0003003e, + 0x000004c5,0x000004c4,0x00050041,0x00000007,0x000004c6,0x000004b2,0x00000293,0x0004003d, + 0x00000006,0x000004c7,0x000004c6,0x00050041,0x00000007,0x000004c8,0x000004aa,0x00000293, + 0x0004003d,0x00000006,0x000004c9,0x000004c8,0x000500ba,0x000000a7,0x000004ca,0x000004c7, + 0x000004c9,0x000600a9,0x00000036,0x000004cb,0x000004ca,0x000004c2,0x000004c3,0x00050041, + 0x00000037,0x000004cc,0x000004bc,0x00000293,0x0003003e,0x000004cc,0x000004cb,0x00050041, + 0x00000007,0x000004ce,0x000004b2,0x00000293,0x0004003d,0x00000006,0x000004cf,0x000004ce, + 0x00050041,0x00000007,0x000004d0,0x000004aa,0x00000293,0x0004003d,0x00000006,0x000004d1, + 0x000004d0,0x000500ba,0x000000a7,0x000004d2,0x000004cf,0x000004d1,0x0003003e,0x000004cd, + 0x000004d2,0x00050041,0x00000007,0x000004d4,0x000004b2,0x000001fa,0x0004003d,0x00000006, + 0x000004d5,0x000004d4,0x00050041,0x00000007,0x000004d6,0x000004aa,0x000001fa,0x0004003d, + 0x00000006,0x000004d7,0x000004d6,0x000500ba,0x000000a7,0x000004d8,0x000004d5,0x000004d7, + 0x0003003e,0x000004d3,0x000004d8,0x0004003d,0x00000055,0x000004da,0x000004bc,0x0004006f, + 0x0000001a,0x000004db,0x000004da,0x0003003e,0x000004d9,0x000004db,0x00050051,0x00000006, + 0x000004dd,0x0000010c,0x0000000a,0x000500b4,0x000000a7,0x000004de,0x000004dd,0x00000154, + 0x0003003e,0x000004dc,0x000004de,0x0003003e,0x000004df,0x00000197,0x0003003e,0x000004e0, + 0x00000197,0x000200f9,0x000004e1,0x000200f8,0x000004e1,0x000400f6,0x000004e3,0x000004e4, + 0x00000000,0x000200f9,0x000004e5,0x000200f8,0x000004e5,0x0004003d,0x00000036,0x000004e6, + 0x000004e0,0x000500b1,0x000000a7,0x000004e7,0x000004e6,0x000001a7,0x000400fa,0x000004e7, + 0x000004e2,0x000004e3,0x000200f8,0x000004e2,0x0003003e,0x000004e8,0x00000197,0x000200f9, + 0x000004e9,0x000200f8,0x000004e9,0x000400f6,0x000004eb,0x000004ec,0x00000000,0x000200f9, + 0x000004ed,0x000200f8,0x000004ed,0x0004003d,0x00000036,0x000004ee,0x000004e8,0x000500b1, + 0x000000a7,0x000004ef,0x000004ee,0x000001a7,0x000400fa,0x000004ef,0x000004ea,0x000004eb, + 0x000200f8,0x000004ea,0x0004003d,0x000000a7,0x000004f1,0x000004d3,0x000300f7,0x000004f4, + 0x00000000,0x000400fa,0x000004f1,0x000004f3,0x000004f7,0x000200f8,0x000004f3,0x0004003d, + 0x00000036,0x000004f5,0x000004e8,0x00050082,0x00000036,0x000004f6,0x000001a7,0x000004f5, + 0x0003003e,0x000004f2,0x000004f6,0x000200f9,0x000004f4,0x000200f8,0x000004f7,0x0004003d, + 0x00000036,0x000004f8,0x000004e8,0x0003003e,0x000004f2,0x000004f8,0x000200f9,0x000004f4, + 0x000200f8,0x000004f4,0x0004003d,0x00000036,0x000004f9,0x000004f2,0x0004003d,0x000000a7, + 0x000004fa,0x000004cd,0x000300f7,0x000004fd,0x00000000,0x000400fa,0x000004fa,0x000004fc, + 0x00000500,0x000200f8,0x000004fc,0x0004003d,0x00000036,0x000004fe,0x000004e0,0x00050082, + 0x00000036,0x000004ff,0x000001a7,0x000004fe,0x0003003e,0x000004fb,0x000004ff,0x000200f9, + 0x000004fd,0x000200f8,0x00000500,0x0004003d,0x00000036,0x00000501,0x000004e0,0x0003003e, + 0x000004fb,0x00000501,0x000200f9,0x000004fd,0x000200f8,0x000004fd,0x0004003d,0x00000036, + 0x00000502,0x000004fb,0x00050050,0x00000055,0x00000503,0x000004f9,0x00000502,0x0003003e, + 0x000004f0,0x00000503,0x0004003d,0x00000055,0x00000505,0x000004ae,0x0004003d,0x00000055, + 0x00000506,0x000004bc,0x00050080,0x00000055,0x00000507,0x00000505,0x00000506,0x0004003d, + 0x00000055,0x00000508,0x000004f0,0x00050080,0x00000055,0x00000509,0x00000507,0x00000508, + 0x0003003e,0x00000504,0x00000509,0x00040039,0x00000055,0x0000050b,0x00000057,0x0004003d, + 0x00000055,0x0000050d,0x00000504,0x0003003e,0x0000050c,0x0000050d,0x0003003e,0x0000050e, + 0x0000021e,0x0003003e,0x0000050f,0x0000050b,0x00070039,0x00000055,0x00000510,0x000000c9, + 0x0000050c,0x0000050e,0x0000050f,0x0003003e,0x0000050a,0x00000510,0x0004003d,0x00000036, + 0x00000515,0x000004df,0x0004003d,0x00000055,0x00000517,0x0000050a,0x0003003e,0x00000516, + 0x00000517,0x00050039,0x0000000e,0x00000518,0x00000109,0x00000516,0x00050041,0x0000000f, + 0x00000519,0x00000514,0x00000515,0x0003003e,0x00000519,0x00000518,0x0004003d,0x00000036, + 0x0000051a,0x000004df,0x00050080,0x00000036,0x0000051b,0x0000051a,0x0000023e,0x0003003e, + 0x000004df,0x0000051b,0x000200f9,0x000004ec,0x000200f8,0x000004ec,0x0004003d,0x00000036, + 0x0000051c,0x000004e8,0x00050080,0x00000036,0x0000051d,0x0000051c,0x0000023e,0x0003003e, + 0x000004e8,0x0000051d,0x000200f9,0x000004e9,0x000200f8,0x000004eb,0x000200f9,0x000004e4, + 0x000200f8,0x000004e4,0x0004003d,0x00000036,0x0000051e,0x000004e0,0x00050080,0x00000036, + 0x0000051f,0x0000051e,0x0000023e,0x0003003e,0x000004e0,0x0000051f,0x000200f9,0x000004e1, + 0x000200f8,0x000004e3,0x0004003d,0x000000a7,0x00000520,0x000004dc,0x000300f7,0x00000522, + 0x00000000,0x000400fa,0x00000520,0x00000521,0x00000522,0x000200f8,0x00000521,0x0003003e, + 0x000004df,0x00000197,0x000200f9,0x00000523,0x000200f8,0x00000523,0x000400f6,0x00000525, + 0x00000526,0x00000000,0x000200f9,0x00000527,0x000200f8,0x00000527,0x0004003d,0x00000036, + 0x00000528,0x000004df,0x000500b1,0x000000a7,0x00000529,0x00000528,0x000003ef,0x000400fa, + 0x00000529,0x00000524,0x00000525,0x000200f8,0x00000524,0x0004003d,0x00000036,0x0000052a, + 0x000004df,0x0004003d,0x00000036,0x0000052b,0x000004df,0x00050041,0x0000000f,0x0000052d, + 0x00000514,0x0000052b,0x0004003d,0x0000000e,0x0000052e,0x0000052d,0x0003003e,0x0000052c, + 0x0000052e,0x00050039,0x0000000e,0x0000052f,0x000000b6,0x0000052c,0x0003003e,0x00000530, + 0x0000052f,0x00050039,0x0000000e,0x00000531,0x000000bc,0x00000530,0x0003003e,0x00000532, + 0x00000531,0x00050039,0x0000000e,0x00000533,0x000000b9,0x00000532,0x00050041,0x0000000f, + 0x00000534,0x00000514,0x0000052a,0x0003003e,0x00000534,0x00000533,0x000200f9,0x00000526, + 0x000200f8,0x00000526,0x0004003d,0x00000036,0x00000535,0x000004df,0x00050080,0x00000036, + 0x00000536,0x00000535,0x0000023e,0x0003003e,0x000004df,0x00000536,0x000200f9,0x00000523, + 0x000200f8,0x00000525,0x000200f9,0x00000522,0x000200f8,0x00000522,0x0004003d,0x00000101, + 0x00000539,0x0000010d,0x0003003e,0x00000538,0x00000539,0x00060039,0x00000006,0x0000053a, + 0x00000106,0x0000010c,0x00000538,0x0004003d,0x00000101,0x0000053b,0x00000538,0x0003003e, + 0x0000010d,0x0000053b,0x0003003e,0x00000537,0x0000053a,0x0004003d,0x00000006,0x0000053d, + 0x00000537,0x00050081,0x00000006,0x0000053e,0x00000155,0x0000053d,0x00050085,0x00000006, + 0x00000540,0x0000053e,0x0000053f,0x0003003e,0x00000541,0x00000155,0x0003003e,0x00000542, + 0x00000540,0x00060039,0x00000006,0x00000543,0x0000003f,0x00000541,0x00000542,0x0003003e, + 0x0000053c,0x00000543,0x00050051,0x00000006,0x00000545,0x0000010c,0x00000007,0x00050085, + 0x00000006,0x00000546,0x00000545,0x000002b1,0x00050083,0x00000006,0x00000547,0x00000155, + 0x00000546,0x00050051,0x00000006,0x00000548,0x0000010c,0x00000009,0x00050083,0x00000006, + 0x00000549,0x00000155,0x00000548,0x00050041,0x00000007,0x0000054a,0x0000010d,0x0000019d, + 0x0004003d,0x00000006,0x0000054b,0x0000054a,0x00050085,0x00000006,0x0000054d,0x0000054b, + 0x0000054c,0x0003003e,0x0000054e,0x0000054d,0x00050039,0x00000006,0x0000054f,0x00000018, + 0x0000054e,0x0003003e,0x00000550,0x00000549,0x0003003e,0x00000551,0x0000054f,0x00060039, + 0x00000006,0x00000552,0x00000023,0x00000550,0x00000551,0x0003003e,0x00000553,0x00000547, + 0x0003003e,0x00000554,0x00000552,0x00060039,0x00000006,0x00000555,0x00000023,0x00000553, + 0x00000554,0x0003003e,0x00000544,0x00000555,0x0004003d,0x00000006,0x00000558,0x0000053c, + 0x0003003e,0x00000557,0x00000558,0x0004003d,0x00000006,0x0000055a,0x00000537,0x0003003e, + 0x00000559,0x0000055a,0x0004003d,0x00000006,0x0000055c,0x00000544,0x0003003e,0x0000055b, + 0x0000055c,0x00070039,0x00000006,0x0000055d,0x0000000c,0x00000557,0x00000559,0x0000055b, + 0x0003003e,0x00000556,0x0000055d,0x0003003e,0x000004df,0x00000197,0x0003003e,0x0000055e, + 0x00000197,0x000200f9,0x0000055f,0x000200f8,0x0000055f,0x000400f6,0x00000561,0x00000562, + 0x00000000,0x000200f9,0x00000563,0x000200f8,0x00000563,0x0004003d,0x00000036,0x00000564, + 0x0000055e,0x000500b1,0x000000a7,0x00000565,0x00000564,0x000001a7,0x000400fa,0x00000565, + 0x00000560,0x00000561,0x000200f8,0x00000560,0x0003003e,0x00000566,0x00000197,0x000200f9, + 0x00000567,0x000200f8,0x00000567,0x000400f6,0x00000569,0x0000056a,0x00000000,0x000200f9, + 0x0000056b,0x000200f8,0x0000056b,0x0004003d,0x00000036,0x0000056c,0x00000566,0x000500b1, + 0x000000a7,0x0000056d,0x0000056c,0x000001a7,0x000400fa,0x0000056d,0x00000568,0x00000569, + 0x000200f8,0x00000568,0x0004003d,0x000000a7,0x0000056f,0x000004d3,0x000300f7,0x00000572, + 0x00000000,0x000400fa,0x0000056f,0x00000571,0x00000575,0x000200f8,0x00000571,0x0004003d, + 0x00000036,0x00000573,0x00000566,0x00050082,0x00000036,0x00000574,0x000001a7,0x00000573, + 0x0003003e,0x00000570,0x00000574,0x000200f9,0x00000572,0x000200f8,0x00000575,0x0004003d, + 0x00000036,0x00000576,0x00000566,0x0003003e,0x00000570,0x00000576,0x000200f9,0x00000572, + 0x000200f8,0x00000572,0x0004003d,0x00000036,0x00000577,0x00000570,0x0004003d,0x000000a7, + 0x00000578,0x000004cd,0x000300f7,0x0000057b,0x00000000,0x000400fa,0x00000578,0x0000057a, + 0x0000057e,0x000200f8,0x0000057a,0x0004003d,0x00000036,0x0000057c,0x0000055e,0x00050082, + 0x00000036,0x0000057d,0x000001a7,0x0000057c,0x0003003e,0x00000579,0x0000057d,0x000200f9, + 0x0000057b,0x000200f8,0x0000057e,0x0004003d,0x00000036,0x0000057f,0x0000055e,0x0003003e, + 0x00000579,0x0000057f,0x000200f9,0x0000057b,0x000200f8,0x0000057b,0x0004003d,0x00000036, + 0x00000580,0x00000579,0x00050050,0x00000055,0x00000581,0x00000577,0x00000580,0x0003003e, + 0x0000056e,0x00000581,0x0004003d,0x0000001a,0x00000583,0x000004d9,0x0004003d,0x00000055, + 0x00000584,0x0000056e,0x0004006f,0x0000001a,0x00000585,0x00000584,0x00050081,0x0000001a, + 0x00000586,0x00000583,0x00000585,0x0003003e,0x00000582,0x00000586,0x0004003d,0x0000001a, + 0x00000588,0x000004b8,0x0004003d,0x0000001a,0x00000589,0x00000582,0x00050081,0x0000001a, + 0x0000058a,0x00000588,0x00000589,0x0003003e,0x00000587,0x0000058a,0x0004003d,0x00000055, + 0x0000058c,0x000004ae,0x0004003d,0x00000055,0x0000058d,0x000004bc,0x00050080,0x00000055, + 0x0000058e,0x0000058c,0x0000058d,0x0004003d,0x00000055,0x0000058f,0x0000056e,0x00050080, + 0x00000055,0x00000590,0x0000058e,0x0000058f,0x0003003e,0x0000058b,0x00000590,0x0004003d, + 0x00000055,0x00000592,0x0000058b,0x00040039,0x00000055,0x00000593,0x00000057,0x0003003e, + 0x00000594,0x00000592,0x0003003e,0x00000595,0x00000593,0x00060039,0x000000a7,0x00000596, + 0x000000d4,0x00000594,0x00000595,0x000600a9,0x00000006,0x00000597,0x00000596,0x00000155, + 0x00000154,0x0003003e,0x00000591,0x00000597,0x0004003d,0x000000a7,0x00000598,0x000004dc, + 0x000400a8,0x000000a7,0x00000599,0x00000598,0x000300f7,0x0000059b,0x00000000,0x000400fa, + 0x00000599,0x0000059a,0x0000059b,0x000200f8,0x0000059a,0x0004003d,0x00000006,0x0000059d, + 0x00000591,0x0004003d,0x0000001a,0x0000059f,0x00000587,0x0003003e,0x0000059e,0x0000059f, + 0x0004003d,0x00000006,0x000005a1,0x00000556,0x0003003e,0x000005a0,0x000005a1,0x00060039, + 0x00000006,0x000005a2,0x000000fe,0x0000059e,0x000005a0,0x00050085,0x00000006,0x000005a3, + 0x0000059d,0x000005a2,0x0003003e,0x0000059c,0x000005a3,0x0004003d,0x00000036,0x000005a4, + 0x000004df,0x00050041,0x0000000f,0x000005a5,0x00000514,0x000005a4,0x0004003d,0x0000000e, + 0x000005a6,0x000005a5,0x0004003d,0x00000006,0x000005a7,0x0000059c,0x0005008e,0x0000000e, + 0x000005a8,0x000005a6,0x000005a7,0x00050041,0x0000000f,0x000005a9,0x0000010d,0x0000023e, + 0x0004003d,0x0000000e,0x000005aa,0x000005a9,0x00050081,0x0000000e,0x000005ab,0x000005aa, + 0x000005a8,0x00050041,0x0000000f,0x000005ac,0x0000010d,0x0000023e,0x0003003e,0x000005ac, + 0x000005ab,0x0004003d,0x00000006,0x000005ad,0x0000059c,0x00050041,0x00000007,0x000005ae, + 0x0000010d,0x000001a2,0x0004003d,0x00000006,0x000005af,0x000005ae,0x00050081,0x00000006, + 0x000005b0,0x000005af,0x000005ad,0x00050041,0x00000007,0x000005b1,0x0000010d,0x000001a2, + 0x0003003e,0x000005b1,0x000005b0,0x000200f9,0x0000059b,0x000200f8,0x0000059b,0x0004003d, + 0x0000001a,0x000005b3,0x00000587,0x0004003d,0x0000001a,0x000005b4,0x00000587,0x00050094, + 0x00000006,0x000005b5,0x000005b3,0x000005b4,0x0003003e,0x000005b2,0x000005b5,0x0004003d, + 0x00000006,0x000005b8,0x000005b2,0x00050085,0x00000006,0x000005b9,0x000005b7,0x000005b8, + 0x0006000c,0x00000006,0x000005ba,0x00000001,0x0000001b,0x000005b9,0x0004003d,0x00000006, + 0x000005bb,0x00000591,0x00050085,0x00000006,0x000005bc,0x000005ba,0x000005bb,0x0003003e, + 0x000005b6,0x000005bc,0x0004003d,0x00000036,0x000005be,0x0000055e,0x000500aa,0x000000a7, + 0x000005bf,0x000005be,0x00000197,0x0004003d,0x00000036,0x000005c0,0x00000566,0x000500aa, + 0x000000a7,0x000005c1,0x000005c0,0x00000197,0x000500a7,0x000000a7,0x000005c2,0x000005bf, + 0x000005c1,0x0003003e,0x000005bd,0x000005c2,0x0004003d,0x00000036,0x000005c3,0x000004df, + 0x00050041,0x0000000f,0x000005c4,0x00000514,0x000005c3,0x0004003d,0x0000000e,0x000005c5, + 0x000005c4,0x0004003d,0x00000006,0x000005c6,0x000005b6,0x0004003d,0x000000a7,0x000005c8, + 0x000005bd,0x0003003e,0x000005c7,0x000005c8,0x00050041,0x000000a0,0x000005ca,0x0000010d, + 0x00000197,0x0004003d,0x0000009f,0x000005cb,0x000005ca,0x0003003e,0x000005c9,0x000005cb, + 0x00080039,0x00000002,0x000005cc,0x000000ae,0x000005c7,0x000005c9,0x000005c5,0x000005c6, + 0x0004003d,0x0000009f,0x000005cd,0x000005c9,0x00050041,0x000000a0,0x000005ce,0x0000010d, + 0x00000197,0x0003003e,0x000005ce,0x000005cd,0x0004003d,0x00000036,0x000005cf,0x000004df, + 0x00050080,0x00000036,0x000005d0,0x000005cf,0x0000023e,0x0003003e,0x000004df,0x000005d0, + 0x000200f9,0x0000056a,0x000200f8,0x0000056a,0x0004003d,0x00000036,0x000005d1,0x00000566, + 0x00050080,0x00000036,0x000005d2,0x000005d1,0x0000023e,0x0003003e,0x00000566,0x000005d2, + 0x000200f9,0x00000567,0x000200f8,0x00000569,0x000200f9,0x00000562,0x000200f8,0x00000562, + 0x0004003d,0x00000036,0x000005d3,0x0000055e,0x00050080,0x00000036,0x000005d4,0x000005d3, + 0x0000023e,0x0003003e,0x0000055e,0x000005d4,0x000200f9,0x0000055f,0x000200f8,0x00000561, + 0x00050041,0x000000a0,0x000005d6,0x0000010d,0x00000197,0x0004003d,0x0000009f,0x000005d7, + 0x000005d6,0x0003003e,0x000005d5,0x000005d7,0x00050039,0x00000002,0x000005d8,0x000000b2, + 0x000005d5,0x0004003d,0x0000009f,0x000005d9,0x000005d5,0x00050041,0x000000a0,0x000005da, + 0x0000010d,0x00000197,0x0003003e,0x000005da,0x000005d9,0x00050041,0x00000007,0x000005db, + 0x0000010d,0x000001a2,0x0004003d,0x00000006,0x000005dc,0x000005db,0x000500ba,0x000000a7, + 0x000005dd,0x000005dc,0x000002e7,0x000600a9,0x00000006,0x000005de,0x000005dd,0x00000155, + 0x00000154,0x00050041,0x00000007,0x000005df,0x0000010d,0x000001a2,0x0004003d,0x00000006, + 0x000005e0,0x000005df,0x00050085,0x00000006,0x000005e1,0x000005e0,0x000005de,0x00050041, + 0x00000007,0x000005e2,0x0000010d,0x000001a2,0x0003003e,0x000005e2,0x000005e1,0x00050041, + 0x00000007,0x000005e3,0x0000010d,0x000001a2,0x0004003d,0x00000006,0x000005e4,0x000005e3, + 0x000500ba,0x000000a7,0x000005e5,0x000005e4,0x000002e7,0x000300f7,0x000005e7,0x00000000, + 0x000400fa,0x000005e5,0x000005e6,0x000005e7,0x000200f8,0x000005e6,0x00050041,0x0000000f, + 0x000005e8,0x0000010d,0x0000023e,0x0004003d,0x0000000e,0x000005e9,0x000005e8,0x00050041, + 0x00000007,0x000005ea,0x0000010d,0x000001a2,0x0004003d,0x00000006,0x000005eb,0x000005ea, + 0x00060050,0x0000000e,0x000005ec,0x000005eb,0x000005eb,0x000005eb,0x00050088,0x0000000e, + 0x000005ed,0x000005e9,0x000005ec,0x00050041,0x0000000f,0x000005ee,0x0000010d,0x0000023e, + 0x0003003e,0x000005ee,0x000005ed,0x00050041,0x00000007,0x000005f0,0x0000010d,0x000001a2, + 0x0004003d,0x00000006,0x000005f1,0x000005f0,0x00050085,0x00000006,0x000005f2,0x000005f1, + 0x000005ef,0x00050041,0x00000007,0x000005f3,0x0000010d,0x000001a2,0x0003003e,0x000005f3, + 0x000005f2,0x00050041,0x000000a0,0x000005f5,0x0000010d,0x00000197,0x0004003d,0x0000009f, + 0x000005f6,0x000005f5,0x0003003e,0x000005f4,0x000005f6,0x00050041,0x0000000f,0x000005f8, + 0x0000010d,0x0000023e,0x0004003d,0x0000000e,0x000005f9,0x000005f8,0x0003003e,0x000005f7, + 0x000005f9,0x00060039,0x00000002,0x000005fa,0x000000f9,0x000005f4,0x000005f7,0x0004003d, + 0x0000000e,0x000005fb,0x000005f7,0x00050041,0x0000000f,0x000005fc,0x0000010d,0x0000023e, + 0x0003003e,0x000005fc,0x000005fb,0x000200f9,0x000005e7,0x000200f8,0x000005e7,0x0004003d, + 0x000000a7,0x000005fd,0x000004dc,0x000300f7,0x000005ff,0x00000000,0x000400fa,0x000005fd, + 0x000005fe,0x000005ff,0x000200f8,0x000005fe,0x00060041,0x0000000f,0x00000601,0x0000010d, + 0x00000197,0x00000197,0x0004003d,0x0000000e,0x00000602,0x00000601,0x0003003e,0x00000600, + 0x00000602,0x00050039,0x0000000e,0x00000603,0x000000b6,0x00000600,0x0003003e,0x00000604, + 0x00000603,0x00050039,0x0000000e,0x00000605,0x000000bf,0x00000604,0x0003003e,0x00000606, + 0x00000605,0x00050039,0x0000000e,0x00000607,0x000000b9,0x00000606,0x00050041,0x0000000f, + 0x00000608,0x0000010d,0x0000023e,0x0003003e,0x00000608,0x00000607,0x00050041,0x00000007, + 0x00000609,0x0000010d,0x000001a2,0x0003003e,0x00000609,0x00000155,0x00050041,0x00000007, + 0x0000060a,0x0000010d,0x0000019d,0x0003003e,0x0000060a,0x00000154,0x000200f9,0x000005ff, + 0x000200f8,0x000005ff,0x000100fd,0x00010038,0x00050036,0x0000002f,0x00000111,0x00000000, + 0x00000072,0x00030037,0x0000006d,0x00000110,0x000200f8,0x00000112,0x0004003b,0x0000006d, + 0x0000060b,0x00000007,0x0004003d,0x00000055,0x0000060c,0x00000110,0x0003003e,0x0000060b, + 0x0000060c,0x00050039,0x0000002f,0x0000060d,0x00000074,0x0000060b,0x000200fe,0x0000060d, + 0x00010038,0x00050036,0x000000ea,0x00000116,0x00000000,0x00000113,0x00030037,0x0000006d, + 0x00000114,0x00030037,0x0000006d,0x00000115,0x000200f8,0x00000117,0x0004003b,0x000000eb, + 0x00000610,0x00000007,0x0004003b,0x0000006d,0x00000612,0x00000007,0x0004003b,0x0000006d, + 0x00000614,0x00000007,0x0004003b,0x0000006d,0x00000615,0x00000007,0x0004003b,0x0000006d, + 0x00000618,0x00000007,0x0004003b,0x0000006d,0x0000061c,0x00000007,0x0004003b,0x0000006d, + 0x0000061e,0x00000007,0x0004003b,0x0000006d,0x0000061f,0x00000007,0x0004003b,0x0000006d, + 0x00000622,0x00000007,0x0004003b,0x0000006d,0x00000626,0x00000007,0x0004003b,0x0000006d, + 0x00000628,0x00000007,0x0004003b,0x0000006d,0x00000629,0x00000007,0x0004003b,0x0000006d, + 0x0000062c,0x00000007,0x0004003b,0x0000006d,0x00000630,0x00000007,0x0004003b,0x0000006d, + 0x00000632,0x00000007,0x0004003b,0x0000006d,0x00000633,0x00000007,0x0004003b,0x0000006d, + 0x00000636,0x00000007,0x0004003b,0x0000006d,0x0000063a,0x00000007,0x0004003b,0x0000006d, + 0x0000063c,0x00000007,0x0004003b,0x0000006d,0x0000063d,0x00000007,0x0004003b,0x0000006d, + 0x00000640,0x00000007,0x0004003b,0x0000006d,0x00000643,0x00000007,0x0004003b,0x0000006d, + 0x00000645,0x00000007,0x0004003b,0x0000006d,0x00000646,0x00000007,0x0004003b,0x0000006d, + 0x00000649,0x00000007,0x0004003b,0x0000006d,0x0000064d,0x00000007,0x0004003b,0x0000006d, + 0x0000064f,0x00000007,0x0004003b,0x0000006d,0x00000650,0x00000007,0x0004003b,0x0000006d, + 0x00000653,0x00000007,0x0004003b,0x0000006d,0x00000657,0x00000007,0x0004003b,0x0000006d, + 0x00000659,0x00000007,0x0004003b,0x0000006d,0x0000065a,0x00000007,0x0004003b,0x0000006d, + 0x0000065d,0x00000007,0x0004003b,0x0000006d,0x00000661,0x00000007,0x0004003b,0x0000006d, + 0x00000663,0x00000007,0x0004003b,0x0000006d,0x00000664,0x00000007,0x0004003b,0x0000006d, + 0x00000667,0x00000007,0x0004003b,0x0000006d,0x0000066b,0x00000007,0x0004003b,0x0000006d, + 0x0000066d,0x00000007,0x0004003b,0x0000006d,0x0000066e,0x00000007,0x0004003b,0x0000006d, + 0x00000671,0x00000007,0x0004003b,0x0000006d,0x00000675,0x00000007,0x0004003b,0x0000006d, + 0x00000677,0x00000007,0x0004003b,0x0000006d,0x00000678,0x00000007,0x0004003b,0x0000006d, + 0x0000067b,0x00000007,0x0004003b,0x0000006d,0x0000067f,0x00000007,0x0004003b,0x0000006d, + 0x00000681,0x00000007,0x0004003b,0x0000006d,0x00000682,0x00000007,0x0004003b,0x0000006d, + 0x00000685,0x00000007,0x0004003b,0x0000006d,0x00000689,0x00000007,0x0004003b,0x0000006d, + 0x0000068b,0x00000007,0x0004003b,0x0000006d,0x0000068c,0x00000007,0x0004003b,0x0000006d, + 0x0000068f,0x00000007,0x0004003b,0x0000006d,0x00000693,0x00000007,0x0004003b,0x0000006d, + 0x00000695,0x00000007,0x0004003b,0x0000006d,0x00000696,0x00000007,0x0004003b,0x0000006d, + 0x00000699,0x00000007,0x0004003b,0x0000006d,0x0000069d,0x00000007,0x0004003b,0x0000006d, + 0x0000069f,0x00000007,0x0004003b,0x0000006d,0x000006a0,0x00000007,0x0004003b,0x0000006d, + 0x000006a3,0x00000007,0x0004003b,0x0000006d,0x000006a7,0x00000007,0x0004003b,0x0000006d, + 0x000006a9,0x00000007,0x0004003b,0x0000006d,0x000006aa,0x00000007,0x0004003b,0x0000006d, + 0x000006ad,0x00000007,0x0004003d,0x00000055,0x00000613,0x00000114,0x0003003e,0x00000612, + 0x00000613,0x0003003e,0x00000614,0x00000611,0x0004003d,0x00000055,0x00000616,0x00000115, + 0x0003003e,0x00000615,0x00000616,0x00070039,0x00000055,0x00000617,0x000000f4,0x00000612, + 0x00000614,0x00000615,0x0003003e,0x00000618,0x00000617,0x00050039,0x0000002f,0x00000619, + 0x00000111,0x00000618,0x00050041,0x00000030,0x0000061a,0x00000610,0x00000197,0x0003003e, + 0x0000061a,0x00000619,0x0004003d,0x00000055,0x0000061d,0x00000114,0x0003003e,0x0000061c, + 0x0000061d,0x0003003e,0x0000061e,0x0000061b,0x0004003d,0x00000055,0x00000620,0x00000115, + 0x0003003e,0x0000061f,0x00000620,0x00070039,0x00000055,0x00000621,0x000000f4,0x0000061c, + 0x0000061e,0x0000061f,0x0003003e,0x00000622,0x00000621,0x00050039,0x0000002f,0x00000623, + 0x00000111,0x00000622,0x00050041,0x00000030,0x00000624,0x00000610,0x0000023e,0x0003003e, + 0x00000624,0x00000623,0x0004003d,0x00000055,0x00000627,0x00000114,0x0003003e,0x00000626, + 0x00000627,0x0003003e,0x00000628,0x00000625,0x0004003d,0x00000055,0x0000062a,0x00000115, + 0x0003003e,0x00000629,0x0000062a,0x00070039,0x00000055,0x0000062b,0x000000f4,0x00000626, + 0x00000628,0x00000629,0x0003003e,0x0000062c,0x0000062b,0x00050039,0x0000002f,0x0000062d, + 0x00000111,0x0000062c,0x00050041,0x00000030,0x0000062e,0x00000610,0x000001a2,0x0003003e, + 0x0000062e,0x0000062d,0x0004003d,0x00000055,0x00000631,0x00000114,0x0003003e,0x00000630, + 0x00000631,0x0003003e,0x00000632,0x0000062f,0x0004003d,0x00000055,0x00000634,0x00000115, + 0x0003003e,0x00000633,0x00000634,0x00070039,0x00000055,0x00000635,0x000000f4,0x00000630, + 0x00000632,0x00000633,0x0003003e,0x00000636,0x00000635,0x00050039,0x0000002f,0x00000637, + 0x00000111,0x00000636,0x00050041,0x00000030,0x00000638,0x00000610,0x000001a7,0x0003003e, + 0x00000638,0x00000637,0x0004003d,0x00000055,0x0000063b,0x00000114,0x0003003e,0x0000063a, + 0x0000063b,0x0003003e,0x0000063c,0x00000639,0x0004003d,0x00000055,0x0000063e,0x00000115, + 0x0003003e,0x0000063d,0x0000063e,0x00070039,0x00000055,0x0000063f,0x000000f4,0x0000063a, + 0x0000063c,0x0000063d,0x0003003e,0x00000640,0x0000063f,0x00050039,0x0000002f,0x00000641, + 0x00000111,0x00000640,0x00050041,0x00000030,0x00000642,0x00000610,0x0000019d,0x0003003e, + 0x00000642,0x00000641,0x0004003d,0x00000055,0x00000644,0x00000114,0x0003003e,0x00000643, + 0x00000644,0x0003003e,0x00000645,0x0000021e,0x0004003d,0x00000055,0x00000647,0x00000115, + 0x0003003e,0x00000646,0x00000647,0x00070039,0x00000055,0x00000648,0x000000f4,0x00000643, + 0x00000645,0x00000646,0x0003003e,0x00000649,0x00000648,0x00050039,0x0000002f,0x0000064a, + 0x00000111,0x00000649,0x00050041,0x00000030,0x0000064b,0x00000610,0x000003db,0x0003003e, + 0x0000064b,0x0000064a,0x0004003d,0x00000055,0x0000064e,0x00000114,0x0003003e,0x0000064d, + 0x0000064e,0x0003003e,0x0000064f,0x0000064c,0x0004003d,0x00000055,0x00000651,0x00000115, + 0x0003003e,0x00000650,0x00000651,0x00070039,0x00000055,0x00000652,0x000000f4,0x0000064d, + 0x0000064f,0x00000650,0x0003003e,0x00000653,0x00000652,0x00050039,0x0000002f,0x00000654, + 0x00000111,0x00000653,0x00050041,0x00000030,0x00000655,0x00000610,0x000003dc,0x0003003e, + 0x00000655,0x00000654,0x0004003d,0x00000055,0x00000658,0x00000114,0x0003003e,0x00000657, + 0x00000658,0x0003003e,0x00000659,0x00000656,0x0004003d,0x00000055,0x0000065b,0x00000115, + 0x0003003e,0x0000065a,0x0000065b,0x00070039,0x00000055,0x0000065c,0x000000f4,0x00000657, + 0x00000659,0x0000065a,0x0003003e,0x0000065d,0x0000065c,0x00050039,0x0000002f,0x0000065e, + 0x00000111,0x0000065d,0x00050041,0x00000030,0x0000065f,0x00000610,0x000001ac,0x0003003e, + 0x0000065f,0x0000065e,0x0004003d,0x00000055,0x00000662,0x00000114,0x0003003e,0x00000661, + 0x00000662,0x0003003e,0x00000663,0x00000660,0x0004003d,0x00000055,0x00000665,0x00000115, + 0x0003003e,0x00000664,0x00000665,0x00070039,0x00000055,0x00000666,0x000000f4,0x00000661, + 0x00000663,0x00000664,0x0003003e,0x00000667,0x00000666,0x00050039,0x0000002f,0x00000668, + 0x00000111,0x00000667,0x00050041,0x00000030,0x00000669,0x00000610,0x000003ee,0x0003003e, + 0x00000669,0x00000668,0x0004003d,0x00000055,0x0000066c,0x00000114,0x0003003e,0x0000066b, + 0x0000066c,0x0003003e,0x0000066d,0x0000066a,0x0004003d,0x00000055,0x0000066f,0x00000115, + 0x0003003e,0x0000066e,0x0000066f,0x00070039,0x00000055,0x00000670,0x000000f4,0x0000066b, + 0x0000066d,0x0000066e,0x0003003e,0x00000671,0x00000670,0x00050039,0x0000002f,0x00000672, + 0x00000111,0x00000671,0x00050041,0x00000030,0x00000673,0x00000610,0x000003ef,0x0003003e, + 0x00000673,0x00000672,0x0004003d,0x00000055,0x00000676,0x00000114,0x0003003e,0x00000675, + 0x00000676,0x0003003e,0x00000677,0x00000674,0x0004003d,0x00000055,0x00000679,0x00000115, + 0x0003003e,0x00000678,0x00000679,0x00070039,0x00000055,0x0000067a,0x000000f4,0x00000675, + 0x00000677,0x00000678,0x0003003e,0x0000067b,0x0000067a,0x00050039,0x0000002f,0x0000067c, + 0x00000111,0x0000067b,0x00050041,0x00000030,0x0000067d,0x00000610,0x000001b2,0x0003003e, + 0x0000067d,0x0000067c,0x0004003d,0x00000055,0x00000680,0x00000114,0x0003003e,0x0000067f, + 0x00000680,0x0003003e,0x00000681,0x0000067e,0x0004003d,0x00000055,0x00000683,0x00000115, + 0x0003003e,0x00000682,0x00000683,0x00070039,0x00000055,0x00000684,0x000000f4,0x0000067f, + 0x00000681,0x00000682,0x0003003e,0x00000685,0x00000684,0x00050039,0x0000002f,0x00000686, + 0x00000111,0x00000685,0x00050041,0x00000030,0x00000687,0x00000610,0x000003f0,0x0003003e, + 0x00000687,0x00000686,0x0004003d,0x00000055,0x0000068a,0x00000114,0x0003003e,0x00000689, + 0x0000068a,0x0003003e,0x0000068b,0x00000688,0x0004003d,0x00000055,0x0000068d,0x00000115, + 0x0003003e,0x0000068c,0x0000068d,0x00070039,0x00000055,0x0000068e,0x000000f4,0x00000689, + 0x0000068b,0x0000068c,0x0003003e,0x0000068f,0x0000068e,0x00050039,0x0000002f,0x00000690, + 0x00000111,0x0000068f,0x00050041,0x00000030,0x00000691,0x00000610,0x00000402,0x0003003e, + 0x00000691,0x00000690,0x0004003d,0x00000055,0x00000694,0x00000114,0x0003003e,0x00000693, + 0x00000694,0x0003003e,0x00000695,0x00000692,0x0004003d,0x00000055,0x00000697,0x00000115, + 0x0003003e,0x00000696,0x00000697,0x00070039,0x00000055,0x00000698,0x000000f4,0x00000693, + 0x00000695,0x00000696,0x0003003e,0x00000699,0x00000698,0x00050039,0x0000002f,0x0000069a, + 0x00000111,0x00000699,0x00050041,0x00000030,0x0000069b,0x00000610,0x000001b7,0x0003003e, + 0x0000069b,0x0000069a,0x0004003d,0x00000055,0x0000069e,0x00000114,0x0003003e,0x0000069d, + 0x0000069e,0x0003003e,0x0000069f,0x0000069c,0x0004003d,0x00000055,0x000006a1,0x00000115, + 0x0003003e,0x000006a0,0x000006a1,0x00070039,0x00000055,0x000006a2,0x000000f4,0x0000069d, + 0x0000069f,0x000006a0,0x0003003e,0x000006a3,0x000006a2,0x00050039,0x0000002f,0x000006a4, + 0x00000111,0x000006a3,0x00050041,0x00000030,0x000006a5,0x00000610,0x00000403,0x0003003e, + 0x000006a5,0x000006a4,0x0004003d,0x00000055,0x000006a8,0x00000114,0x0003003e,0x000006a7, + 0x000006a8,0x0003003e,0x000006a9,0x000006a6,0x0004003d,0x00000055,0x000006ab,0x00000115, + 0x0003003e,0x000006aa,0x000006ab,0x00070039,0x00000055,0x000006ac,0x000000f4,0x000006a7, + 0x000006a9,0x000006aa,0x0003003e,0x000006ad,0x000006ac,0x00050039,0x0000002f,0x000006ae, + 0x00000111,0x000006ad,0x00050041,0x00000030,0x000006af,0x00000610,0x000001bd,0x0003003e, + 0x000006af,0x000006ae,0x0004003d,0x000000ea,0x000006b0,0x00000610,0x000200fe,0x000006b0, + 0x00010038,0x00050036,0x0000002f,0x0000011b,0x00000000,0x00000118,0x00030037,0x0000001b, + 0x00000119,0x00030037,0x0000006d,0x0000011a,0x000200f8,0x0000011c,0x0004003b,0x0000001b, + 0x000006b3,0x00000007,0x0004003b,0x0000001b,0x000006b9,0x00000007,0x0004003b,0x0000001b, + 0x000006ba,0x00000007,0x0004003b,0x00000007,0x000006c1,0x00000007,0x0004003b,0x00000007, + 0x000006c2,0x00000007,0x0004003b,0x00000007,0x000006c6,0x00000007,0x0004003b,0x00000007, + 0x000006c7,0x00000007,0x0004003b,0x00000007,0x000006ce,0x00000007,0x0004003b,0x00000007, + 0x000006cf,0x00000007,0x0004003b,0x00000007,0x000006d3,0x00000007,0x0004003b,0x00000007, + 0x000006d4,0x00000007,0x0004003b,0x0000006d,0x000006d7,0x00000007,0x0004003b,0x00000030, + 0x000006db,0x00000007,0x0004003b,0x0000006d,0x000006dc,0x00000007,0x0004003b,0x0000006d, + 0x000006de,0x00000007,0x0004003b,0x000000eb,0x000006e1,0x00000007,0x0004003b,0x0000001b, + 0x000006e2,0x00000007,0x0004003d,0x0000001a,0x000006b4,0x00000119,0x0004003d,0x00000055, + 0x000006b5,0x0000011a,0x0004006f,0x0000001a,0x000006b6,0x000006b5,0x00050085,0x0000001a, + 0x000006b7,0x000006b4,0x000006b6,0x00050083,0x0000001a,0x000006b8,0x000006b7,0x00000338, + 0x0003003e,0x000006b3,0x000006b8,0x0004003d,0x0000001a,0x000006bb,0x000006b3,0x0003003e, + 0x000006ba,0x000006bb,0x00050039,0x0000001a,0x000006bc,0x0000001e,0x000006ba,0x0003003e, + 0x000006b9,0x000006bc,0x00050041,0x00000037,0x000006bd,0x0000011a,0x000001fa,0x0004003d, + 0x00000036,0x000006be,0x000006bd,0x00050082,0x00000036,0x000006bf,0x000006be,0x0000023e, + 0x0004006f,0x00000006,0x000006c0,0x000006bf,0x0003003e,0x000006c1,0x000006c0,0x00050041, + 0x00000007,0x000006c3,0x000006b3,0x000001fa,0x0004003d,0x00000006,0x000006c4,0x000006c3, + 0x0003003e,0x000006c2,0x000006c4,0x00060039,0x00000006,0x000006c5,0x00000023,0x000006c1, + 0x000006c2,0x0003003e,0x000006c6,0x00000154,0x0003003e,0x000006c7,0x000006c5,0x00060039, + 0x00000006,0x000006c8,0x0000003f,0x000006c6,0x000006c7,0x00050041,0x00000007,0x000006c9, + 0x000006b3,0x000001fa,0x0003003e,0x000006c9,0x000006c8,0x00050041,0x00000037,0x000006ca, + 0x0000011a,0x00000293,0x0004003d,0x00000036,0x000006cb,0x000006ca,0x00050082,0x00000036, + 0x000006cc,0x000006cb,0x0000023e,0x0004006f,0x00000006,0x000006cd,0x000006cc,0x0003003e, + 0x000006ce,0x000006cd,0x00050041,0x00000007,0x000006d0,0x000006b3,0x00000293,0x0004003d, + 0x00000006,0x000006d1,0x000006d0,0x0003003e,0x000006cf,0x000006d1,0x00060039,0x00000006, + 0x000006d2,0x00000023,0x000006ce,0x000006cf,0x0003003e,0x000006d3,0x00000154,0x0003003e, + 0x000006d4,0x000006d2,0x00060039,0x00000006,0x000006d5,0x0000003f,0x000006d3,0x000006d4, + 0x00050041,0x00000007,0x000006d6,0x000006b3,0x00000293,0x0003003e,0x000006d6,0x000006d5, + 0x0004003d,0x0000001a,0x000006d8,0x000006b3,0x0006000c,0x0000001a,0x000006d9,0x00000001, + 0x00000008,0x000006d8,0x0004006e,0x00000055,0x000006da,0x000006d9,0x0003003e,0x000006d7, + 0x000006da,0x0004003d,0x00000055,0x000006dd,0x000006d7,0x0003003e,0x000006dc,0x000006dd, + 0x0004003d,0x00000055,0x000006df,0x0000011a,0x0003003e,0x000006de,0x000006df,0x00060039, + 0x000000ea,0x000006e0,0x00000116,0x000006dc,0x000006de,0x0003003e,0x000006e1,0x000006e0, + 0x0004003d,0x0000001a,0x000006e3,0x000006b9,0x0003003e,0x000006e2,0x000006e3,0x00060039, + 0x0000002f,0x000006e4,0x000000ef,0x000006e1,0x000006e2,0x0003003e,0x000006db,0x000006e4, + 0x0004003d,0x0000002f,0x000006e5,0x000006db,0x000200fe,0x000006e5,0x00010038,0x00050036, + 0x0000001a,0x00000120,0x00000000,0x0000011d,0x00030037,0x0000006d,0x0000011e,0x00030037, + 0x0000001b,0x0000011f,0x000200f8,0x00000121,0x0004003b,0x0000001b,0x000006e8,0x00000007, + 0x0004003b,0x0000006d,0x000006ee,0x00000007,0x0004003d,0x0000001a,0x000006e9,0x0000011f, + 0x00040039,0x00000055,0x000006ea,0x00000057,0x0004006f,0x0000001a,0x000006eb,0x000006ea, + 0x00050085,0x0000001a,0x000006ec,0x000006e9,0x000006eb,0x0004006e,0x00000055,0x000006ed, + 0x000006ec,0x0003003e,0x000006ee,0x000006ed,0x00050039,0x0000001a,0x000006ef,0x00000094, + 0x000006ee,0x0003003e,0x000006e8,0x000006ef,0x0004003d,0x0000001a,0x000006f0,0x000006e8, + 0x000200fe,0x000006f0,0x00010038,0x00050036,0x00000002,0x00000125,0x00000000,0x00000123, + 0x00030037,0x00000122,0x00000124,0x000200f8,0x00000126,0x0004003b,0x0000001b,0x000006f9, + 0x00000007,0x00050041,0x0000001b,0x000006f3,0x00000124,0x0000023e,0x0004003d,0x0000001a, + 0x000006f4,0x000006f3,0x00050041,0x0000001b,0x000006f5,0x00000124,0x0000019d,0x0004003d, + 0x0000001a,0x000006f6,0x000006f5,0x00050081,0x0000001a,0x000006f7,0x000006f4,0x000006f6, + 0x00050041,0x0000001b,0x000006f8,0x00000124,0x000003db,0x0003003e,0x000006f8,0x000006f7, + 0x00050041,0x0000001b,0x000006fa,0x00000124,0x000003db,0x0004003d,0x0000001a,0x000006fb, + 0x000006fa,0x0003003e,0x000006f9,0x000006fb,0x00050039,0x000000a7,0x000006fc,0x000000c3, + 0x000006f9,0x00050041,0x000000a8,0x000006fd,0x00000124,0x000001b7,0x0003003e,0x000006fd, + 0x000006fc,0x000100fd,0x00010038,0x00050036,0x00000002,0x00000129,0x00000000,0x0000010b, + 0x00030037,0x00000100,0x00000127,0x00030037,0x00000102,0x00000128,0x000200f8,0x0000012a, + 0x0004003b,0x00000030,0x000006fe,0x00000007,0x0004003b,0x0000001b,0x00000700,0x00000007, + 0x0004003b,0x0000006d,0x00000702,0x00000007,0x0004003b,0x0000000f,0x00000711,0x00000007, + 0x00040039,0x00000055,0x000006ff,0x0000005d,0x00050051,0x0000001a,0x00000701,0x00000127, + 0x00000005,0x0003003e,0x00000700,0x00000701,0x0003003e,0x00000702,0x000006ff,0x00060039, + 0x0000002f,0x00000703,0x0000011b,0x00000700,0x00000702,0x0003003e,0x000006fe,0x00000703, + 0x0004003d,0x0000002f,0x00000704,0x000006fe,0x0008004f,0x0000000e,0x00000705,0x00000704, + 0x00000704,0x00000000,0x00000001,0x00000002,0x00050041,0x0000000f,0x00000706,0x00000128, + 0x000001a7,0x0003003e,0x00000706,0x00000705,0x00040039,0x00000006,0x00000707,0x00000067, + 0x00050041,0x0000000f,0x00000708,0x00000128,0x000001a7,0x0004003d,0x0000000e,0x00000709, + 0x00000708,0x0005008e,0x0000000e,0x0000070a,0x00000709,0x00000707,0x00050041,0x0000000f, + 0x0000070b,0x00000128,0x000001a7,0x0003003e,0x0000070b,0x0000070a,0x00040039,0x00000006, + 0x0000070c,0x00000096,0x00050041,0x0000000f,0x0000070d,0x00000128,0x000001a7,0x0004003d, + 0x0000000e,0x0000070e,0x0000070d,0x0005008e,0x0000000e,0x0000070f,0x0000070e,0x0000070c, + 0x00050041,0x0000000f,0x00000710,0x00000128,0x000001a7,0x0003003e,0x00000710,0x0000070f, + 0x00050041,0x0000000f,0x00000712,0x00000128,0x000001a7,0x0004003d,0x0000000e,0x00000713, + 0x00000712,0x0003003e,0x00000711,0x00000713,0x00050039,0x0000000e,0x00000714,0x000000b9, + 0x00000711,0x00050041,0x0000000f,0x00000715,0x00000128,0x000001a7,0x0003003e,0x00000715, + 0x00000714,0x00050041,0x00000007,0x00000717,0x000006fe,0x00000716,0x0004003d,0x00000006, + 0x00000718,0x00000717,0x00050041,0x00000007,0x00000719,0x00000128,0x000003db,0x0003003e, + 0x00000719,0x00000718,0x000100fd,0x00010038,0x00050036,0x00000002,0x0000012d,0x00000000, + 0x0000010b,0x00030037,0x00000100,0x0000012b,0x00030037,0x00000102,0x0000012c,0x000200f8, + 0x0000012e,0x0004003b,0x00000007,0x00000727,0x00000007,0x0004003b,0x00000007,0x00000728, + 0x00000007,0x0004003b,0x0000000f,0x0000072b,0x00000007,0x0004003b,0x0000000f,0x0000072f, + 0x00000007,0x0004003b,0x0000000f,0x00000731,0x00000007,0x0004003b,0x0000000f,0x00000734, + 0x00000007,0x0004003b,0x0000000f,0x00000738,0x00000007,0x0004003b,0x0000000f,0x0000073a, + 0x00000007,0x0004003b,0x00000007,0x0000073d,0x00000007,0x0004003b,0x00000007,0x00000743, + 0x00000007,0x0004003b,0x0000000f,0x00000745,0x00000007,0x0004003b,0x0000000f,0x00000748, + 0x00000007,0x0004003b,0x00000007,0x0000074b,0x00000007,0x0004003b,0x0000000f,0x0000074f, + 0x00000007,0x0004003b,0x0000000f,0x00000754,0x00000007,0x00050041,0x00000007,0x0000071a, + 0x0000012c,0x0000019d,0x0004003d,0x00000006,0x0000071b,0x0000071a,0x000500ba,0x000000a7, + 0x0000071c,0x0000071b,0x000002e7,0x000600a9,0x00000006,0x0000071d,0x0000071c,0x00000155, + 0x00000154,0x00050041,0x00000007,0x0000071e,0x0000012c,0x0000019d,0x0004003d,0x00000006, + 0x0000071f,0x0000071e,0x00050085,0x00000006,0x00000720,0x0000071f,0x0000071d,0x00050041, + 0x00000007,0x00000721,0x0000012c,0x0000019d,0x0003003e,0x00000721,0x00000720,0x00050041, + 0x00000007,0x00000722,0x0000012c,0x0000019d,0x0004003d,0x00000006,0x00000723,0x00000722, + 0x00050041,0x00000007,0x00000724,0x0000012c,0x000001a2,0x0004003d,0x00000006,0x00000725, + 0x00000724,0x00050081,0x00000006,0x00000726,0x00000723,0x00000725,0x0003003e,0x00000727, + 0x000002e7,0x0003003e,0x00000728,0x00000726,0x00060039,0x00000006,0x00000729,0x0000003f, + 0x00000727,0x00000728,0x00050041,0x00000007,0x0000072a,0x0000012c,0x0000019d,0x0003003e, + 0x0000072a,0x00000729,0x00050041,0x0000000f,0x0000072c,0x0000012c,0x0000023e,0x0004003d, + 0x0000000e,0x0000072d,0x0000072c,0x0003003e,0x0000072b,0x0000072d,0x00050039,0x0000000e, + 0x0000072e,0x000000b6,0x0000072b,0x0003003e,0x0000072f,0x0000072e,0x00050039,0x0000000e, + 0x00000730,0x000000bc,0x0000072f,0x0003003e,0x00000731,0x00000730,0x00050039,0x0000000e, + 0x00000732,0x000000b9,0x00000731,0x00050041,0x0000000f,0x00000733,0x0000012c,0x0000023e, + 0x0003003e,0x00000733,0x00000732,0x00050041,0x0000000f,0x00000735,0x0000012c,0x000001a7, + 0x0004003d,0x0000000e,0x00000736,0x00000735,0x0003003e,0x00000734,0x00000736,0x00050039, + 0x0000000e,0x00000737,0x000000b6,0x00000734,0x0003003e,0x00000738,0x00000737,0x00050039, + 0x0000000e,0x00000739,0x000000bc,0x00000738,0x0003003e,0x0000073a,0x00000739,0x00050039, + 0x0000000e,0x0000073b,0x000000b9,0x0000073a,0x00050041,0x0000000f,0x0000073c,0x0000012c, + 0x000001a7,0x0003003e,0x0000073c,0x0000073b,0x00050041,0x00000007,0x0000073e,0x0000012c, + 0x000001a2,0x0004003d,0x00000006,0x0000073f,0x0000073e,0x00050041,0x00000007,0x00000740, + 0x0000012c,0x0000019d,0x0004003d,0x00000006,0x00000741,0x00000740,0x00050088,0x00000006, + 0x00000742,0x0000073f,0x00000741,0x0003003e,0x00000743,0x00000742,0x00050039,0x00000006, + 0x00000744,0x00000018,0x00000743,0x0003003e,0x0000073d,0x00000744,0x00050041,0x0000000f, + 0x00000746,0x0000012c,0x000001a7,0x0004003d,0x0000000e,0x00000747,0x00000746,0x0003003e, + 0x00000745,0x00000747,0x00050041,0x0000000f,0x00000749,0x0000012c,0x0000023e,0x0004003d, + 0x0000000e,0x0000074a,0x00000749,0x0003003e,0x00000748,0x0000074a,0x0004003d,0x00000006, + 0x0000074c,0x0000073d,0x0003003e,0x0000074b,0x0000074c,0x00070039,0x0000000e,0x0000074d, + 0x00000014,0x00000745,0x00000748,0x0000074b,0x00050041,0x0000000f,0x0000074e,0x0000012c, + 0x000001a7,0x0003003e,0x0000074e,0x0000074d,0x00050041,0x0000000f,0x00000750,0x0000012c, + 0x000001a7,0x0004003d,0x0000000e,0x00000751,0x00000750,0x0003003e,0x0000074f,0x00000751, + 0x00050039,0x0000000e,0x00000752,0x000000b6,0x0000074f,0x00050041,0x0000000f,0x00000753, + 0x0000012c,0x000001a7,0x0003003e,0x00000753,0x00000752,0x00050041,0x0000000f,0x00000755, + 0x0000012c,0x000001a7,0x0004003d,0x0000000e,0x00000756,0x00000755,0x0003003e,0x00000754, + 0x00000756,0x00050039,0x0000000e,0x00000757,0x000000bf,0x00000754,0x00050041,0x0000000f, + 0x00000758,0x0000012c,0x000001a7,0x0003003e,0x00000758,0x00000757,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x00000131,0x00000000,0x0000010b,0x00030037,0x00000100,0x0000012f, + 0x00030037,0x00000102,0x00000130,0x000200f8,0x00000132,0x0004003b,0x00000007,0x00000759, + 0x00000007,0x0004003b,0x00000007,0x0000075d,0x00000007,0x0004003b,0x00000007,0x0000075f, + 0x00000007,0x0004003b,0x00000007,0x00000764,0x00000007,0x0004003b,0x00000007,0x00000766, + 0x00000007,0x0004003b,0x00000007,0x00000769,0x00000007,0x0004003b,0x00000007,0x0000076a, + 0x00000007,0x0004003b,0x00000007,0x0000076c,0x00000007,0x0004003b,0x00000007,0x0000076e, + 0x00000007,0x0004003b,0x00000007,0x00000770,0x00000007,0x0004003b,0x00000007,0x00000771, + 0x00000007,0x0004003b,0x00000007,0x00000773,0x00000007,0x0004003b,0x00000007,0x00000776, + 0x00000007,0x0004003b,0x00000007,0x00000778,0x00000007,0x0004003b,0x00000007,0x0000077a, + 0x00000007,0x0004003b,0x00000007,0x0000077c,0x00000007,0x0004003b,0x00000007,0x0000077e, + 0x00000007,0x0004003b,0x00000007,0x00000780,0x00000007,0x0004003b,0x00000007,0x00000782, + 0x00000007,0x0004003b,0x00000007,0x00000784,0x00000007,0x0004003b,0x00000007,0x00000785, + 0x00000007,0x0004003b,0x00000007,0x00000786,0x00000007,0x0004003b,0x0000000f,0x00000789, + 0x00000007,0x0004003b,0x0000000f,0x00000791,0x00000007,0x0004003b,0x0000000f,0x00000794, + 0x00000007,0x0004003b,0x0000000f,0x00000796,0x00000007,0x0004003b,0x0000000f,0x00000798, + 0x00000007,0x0004003b,0x0000000f,0x000007a5,0x00000007,0x0004003b,0x0000000f,0x000007a8, + 0x00000007,0x0004003b,0x00000007,0x000007af,0x00000007,0x0004003b,0x00000007,0x000007b0, + 0x00000007,0x0004003b,0x00000007,0x000007b2,0x00000007,0x0004003b,0x00000007,0x000007bb, + 0x00000007,0x0004003b,0x0000000f,0x000007be,0x00000007,0x0004003b,0x0000000f,0x000007c0, + 0x00000007,0x0004003b,0x00000007,0x000007c3,0x00000007,0x00050051,0x00000006,0x0000075a, + 0x0000012f,0x00000006,0x00050088,0x00000006,0x0000075c,0x0000075a,0x0000075b,0x0003003e, + 0x0000075d,0x0000075c,0x00050039,0x00000006,0x0000075e,0x00000018,0x0000075d,0x0003003e, + 0x00000759,0x0000075e,0x00050051,0x00000006,0x00000761,0x0000012f,0x0000000c,0x00050088, + 0x00000006,0x00000762,0x00000761,0x0000075b,0x00050083,0x00000006,0x00000763,0x00000760, + 0x00000762,0x0003003e,0x00000764,0x00000763,0x00050039,0x00000006,0x00000765,0x00000018, + 0x00000764,0x0003003e,0x0000075f,0x00000765,0x00050051,0x00000006,0x00000767,0x0000012f, + 0x0000000a,0x00050083,0x00000006,0x00000768,0x00000155,0x00000767,0x0003003e,0x00000766, + 0x00000768,0x00050051,0x00000006,0x0000076b,0x0000012f,0x00000008,0x0003003e,0x0000076a, + 0x0000076b,0x0003003e,0x0000076c,0x000002b1,0x00060039,0x00000006,0x0000076d,0x00000053, + 0x0000076a,0x0000076c,0x0003003e,0x00000769,0x0000076d,0x00050051,0x00000006,0x0000076f, + 0x0000012f,0x00000009,0x0003003e,0x0000076e,0x0000076f,0x0004003d,0x00000006,0x00000772, + 0x00000769,0x0003003e,0x00000771,0x00000772,0x0004003d,0x00000006,0x00000774,0x0000076e, + 0x0003003e,0x00000773,0x00000774,0x00060039,0x00000006,0x00000775,0x0000003f,0x00000771, + 0x00000773,0x0004003d,0x00000006,0x00000777,0x00000766,0x0003003e,0x00000776,0x00000777, + 0x0003003e,0x00000778,0x00000775,0x00060039,0x00000006,0x00000779,0x0000003f,0x00000776, + 0x00000778,0x0004003d,0x00000006,0x0000077b,0x0000075f,0x0003003e,0x0000077a,0x0000077b, + 0x0003003e,0x0000077c,0x00000779,0x00060039,0x00000006,0x0000077d,0x0000003f,0x0000077a, + 0x0000077c,0x0004003d,0x00000006,0x0000077f,0x00000759,0x0003003e,0x0000077e,0x0000077f, + 0x0003003e,0x00000780,0x0000077d,0x00060039,0x00000006,0x00000781,0x0000003f,0x0000077e, + 0x00000780,0x0003003e,0x00000770,0x00000781,0x0003003e,0x00000784,0x00000783,0x0003003e, + 0x00000785,0x00000155,0x0004003d,0x00000006,0x00000787,0x00000770,0x0003003e,0x00000786, + 0x00000787,0x00070039,0x00000006,0x00000788,0x0000000c,0x00000784,0x00000785,0x00000786, + 0x0003003e,0x00000782,0x00000788,0x00060041,0x0000000f,0x0000078a,0x00000130,0x00000197, + 0x0000023e,0x0004003d,0x0000000e,0x0000078b,0x0000078a,0x00050085,0x0000000e,0x0000078e, + 0x0000078b,0x0000078d,0x0004003d,0x00000006,0x0000078f,0x00000782,0x0005008e,0x0000000e, + 0x00000790,0x0000078e,0x0000078f,0x0003003e,0x00000789,0x00000790,0x0004003d,0x0000000e, + 0x00000795,0x00000789,0x0003003e,0x00000794,0x00000795,0x0003003e,0x00000796,0x00000793, + 0x00060039,0x0000000e,0x00000797,0x00000047,0x00000794,0x00000796,0x0003003e,0x00000791, + 0x00000797,0x00050041,0x0000000f,0x00000799,0x00000130,0x000001a7,0x0004003d,0x0000000e, + 0x0000079a,0x00000799,0x00060041,0x0000000f,0x0000079b,0x00000130,0x00000197,0x00000197, + 0x0004003d,0x0000000e,0x0000079c,0x0000079b,0x00050083,0x0000000e,0x0000079d,0x0000079a, + 0x0000079c,0x0004003d,0x0000000e,0x0000079e,0x00000791,0x00050088,0x0000000e,0x0000079f, + 0x0000079d,0x0000079e,0x0003003e,0x00000798,0x0000079f,0x0004003d,0x0000000e,0x000007a0, + 0x00000798,0x0006000c,0x00000006,0x000007a1,0x00000001,0x00000042,0x000007a0,0x000500ba, + 0x000000a7,0x000007a2,0x000007a1,0x00000155,0x000300f7,0x000007a4,0x00000000,0x000400fa, + 0x000007a2,0x000007a3,0x000007a4,0x000200f8,0x000007a3,0x0004003d,0x0000000e,0x000007a6, + 0x00000798,0x0006000c,0x0000000e,0x000007a7,0x00000001,0x00000045,0x000007a6,0x0003003e, + 0x000007a5,0x000007a7,0x0004003d,0x0000000e,0x000007a9,0x000007a5,0x0004003d,0x0000000e, + 0x000007aa,0x00000789,0x00050085,0x0000000e,0x000007ab,0x000007a9,0x000007aa,0x00060041, + 0x0000000f,0x000007ac,0x00000130,0x00000197,0x00000197,0x0004003d,0x0000000e,0x000007ad, + 0x000007ac,0x00050081,0x0000000e,0x000007ae,0x000007ab,0x000007ad,0x0003003e,0x000007a8, + 0x000007ae,0x00050051,0x00000006,0x000007b1,0x0000012f,0x0000000b,0x0003003e,0x000007b0, + 0x000007b1,0x00050041,0x00000007,0x000007b3,0x00000130,0x000003dc,0x0004003d,0x00000006, + 0x000007b4,0x000007b3,0x0003003e,0x000007b2,0x000007b4,0x00060039,0x00000006,0x000007b5, + 0x0000003f,0x000007b0,0x000007b2,0x00050051,0x00000006,0x000007b6,0x0000012f,0x0000000a, + 0x00050085,0x00000006,0x000007b7,0x000007b5,0x000007b6,0x00050051,0x00000006,0x000007b8, + 0x0000012f,0x00000007,0x00050083,0x00000006,0x000007b9,0x00000155,0x000007b8,0x00050085, + 0x00000006,0x000007ba,0x000007b7,0x000007b9,0x0003003e,0x000007af,0x000007ba,0x0004003d, + 0x00000006,0x000007bc,0x000007af,0x0003003e,0x000007bb,0x000007bc,0x00050039,0x00000006, + 0x000007bd,0x00000018,0x000007bb,0x0004003d,0x0000000e,0x000007bf,0x000007a8,0x0003003e, + 0x000007be,0x000007bf,0x00050041,0x0000000f,0x000007c1,0x00000130,0x000001a7,0x0004003d, + 0x0000000e,0x000007c2,0x000007c1,0x0003003e,0x000007c0,0x000007c2,0x0003003e,0x000007c3, + 0x000007bd,0x00070039,0x0000000e,0x000007c4,0x00000014,0x000007be,0x000007c0,0x000007c3, + 0x00050041,0x0000000f,0x000007c5,0x00000130,0x000001a7,0x0003003e,0x000007c5,0x000007c4, + 0x000200f9,0x000007a4,0x000200f8,0x000007a4,0x000100fd,0x00010038,0x00050036,0x00000002, + 0x00000136,0x00000000,0x00000133,0x00030037,0x00000122,0x00000134,0x00030037,0x00000102, + 0x00000135,0x000200f8,0x00000137,0x0004003b,0x00000007,0x000007cf,0x00000007,0x0004003b, + 0x00000007,0x000007d0,0x00000007,0x0004003b,0x00000007,0x000007d4,0x00000007,0x0004003b, + 0x00000007,0x000007d7,0x00000007,0x0004003b,0x00000007,0x000007db,0x00000007,0x0004003b, + 0x00000007,0x000007dc,0x00000007,0x0004003b,0x00000007,0x000007e3,0x00000007,0x0004003b, + 0x00000007,0x000007e4,0x00000007,0x0004003b,0x00000007,0x000007ea,0x00000007,0x0004003b, + 0x00000007,0x000007ed,0x00000007,0x0004003b,0x00000007,0x000007f0,0x00000007,0x0004003b, + 0x0000006d,0x000007f1,0x00000007,0x0004003b,0x00000007,0x000007f8,0x00000007,0x0004003b, + 0x00000007,0x000007f9,0x00000007,0x0004003b,0x00000007,0x00000803,0x00000007,0x0004003b, + 0x00000007,0x00000804,0x00000007,0x0004003b,0x00000007,0x00000806,0x00000007,0x0004003b, + 0x00000007,0x00000807,0x00000007,0x0004003b,0x00000007,0x0000080a,0x00000007,0x0004003b, + 0x00000007,0x00000815,0x00000007,0x0004003b,0x00000007,0x00000816,0x00000007,0x0004003b, + 0x0000001b,0x00000819,0x00000007,0x0004003b,0x0000001b,0x0000081f,0x00000007,0x00050041, + 0x000000a8,0x000007c6,0x00000134,0x00000403,0x0004003d,0x000000a7,0x000007c7,0x000007c6, + 0x000500a4,0x000000a7,0x000007c9,0x000007c7,0x000007c8,0x000600a9,0x00000006,0x000007ca, + 0x000007c9,0x00000155,0x00000154,0x00050041,0x00000007,0x000007cb,0x00000135,0x000003db, + 0x0004003d,0x00000006,0x000007cc,0x000007cb,0x00050085,0x00000006,0x000007cd,0x000007cc, + 0x000007ca,0x00050041,0x00000007,0x000007ce,0x00000135,0x000003db,0x0003003e,0x000007ce, + 0x000007cd,0x00050041,0x00000007,0x000007d1,0x00000134,0x000003ef,0x0004003d,0x00000006, + 0x000007d2,0x000007d1,0x0003003e,0x000007d0,0x000007d2,0x00050039,0x00000006,0x000007d3, + 0x00000018,0x000007d0,0x00050041,0x00000007,0x000007d5,0x00000134,0x000003ee,0x0004003d, + 0x00000006,0x000007d6,0x000007d5,0x0003003e,0x000007d4,0x000007d6,0x00050041,0x00000007, + 0x000007d8,0x00000134,0x000001ac,0x0004003d,0x00000006,0x000007d9,0x000007d8,0x0003003e, + 0x000007d7,0x000007d9,0x00060039,0x00000006,0x000007da,0x0000003f,0x000007d4,0x000007d7, + 0x0003003e,0x000007db,0x000007d3,0x0003003e,0x000007dc,0x000007da,0x00060039,0x00000006, + 0x000007dd,0x0000003f,0x000007db,0x000007dc,0x0003003e,0x000007cf,0x000007dd,0x00050041, + 0x00000007,0x000007de,0x00000135,0x000003db,0x0004003d,0x00000006,0x000007df,0x000007de, + 0x0004003d,0x00000006,0x000007e0,0x000007cf,0x00050085,0x00000006,0x000007e1,0x000007e0, + 0x00000370,0x00050083,0x00000006,0x000007e2,0x000007df,0x000007e1,0x0003003e,0x000007e3, + 0x00000154,0x0003003e,0x000007e4,0x000007e2,0x00060039,0x00000006,0x000007e5,0x0000003f, + 0x000007e3,0x000007e4,0x00050041,0x00000007,0x000007e6,0x00000135,0x000003db,0x0003003e, + 0x000007e6,0x000007e5,0x00050041,0x00000007,0x000007e7,0x00000135,0x000003db,0x0004003d, + 0x00000006,0x000007e8,0x000007e7,0x00050083,0x00000006,0x000007e9,0x000007e8,0x00000155, + 0x0003003e,0x000007ea,0x000007e9,0x00050039,0x00000006,0x000007eb,0x00000018,0x000007ea, + 0x00050085,0x00000006,0x000007ec,0x000007eb,0x00000155,0x0003003e,0x000007ed,0x000007ec, + 0x00050039,0x00000006,0x000007ee,0x00000018,0x000007ed,0x00050041,0x00000007,0x000007ef, + 0x00000135,0x000003dc,0x0003003e,0x000007ef,0x000007ee,0x00050041,0x0000006d,0x000007f2, + 0x00000134,0x00000197,0x0004003d,0x00000055,0x000007f3,0x000007f2,0x0003003e,0x000007f1, + 0x000007f3,0x00050039,0x00000006,0x000007f4,0x0000008b,0x000007f1,0x00050041,0x00000007, + 0x000007f5,0x00000134,0x000003ef,0x0004003d,0x00000006,0x000007f6,0x000007f5,0x00050085, + 0x00000006,0x000007f7,0x000007f6,0x00000154,0x0003003e,0x000007f8,0x000007f7,0x00050041, + 0x00000007,0x000007fa,0x00000134,0x000003ee,0x0004003d,0x00000006,0x000007fb,0x000007fa, + 0x0003003e,0x000007f9,0x000007fb,0x00060039,0x00000006,0x000007fc,0x0000003f,0x000007f8, + 0x000007f9,0x00050083,0x00000006,0x000007fd,0x00000155,0x000007fc,0x00050085,0x00000006, + 0x000007fe,0x000007f4,0x000007fd,0x0003003e,0x000007f0,0x000007fe,0x00050041,0x00000007, + 0x000007ff,0x00000135,0x000003db,0x0004003d,0x00000006,0x00000800,0x000007ff,0x0004003d, + 0x00000006,0x00000801,0x000007f0,0x00050081,0x00000006,0x00000802,0x00000800,0x00000801, + 0x0003003e,0x00000803,0x00000802,0x0003003e,0x00000804,0x00000370,0x00060039,0x00000006, + 0x00000805,0x00000023,0x00000803,0x00000804,0x0003003e,0x00000806,0x00000154,0x0003003e, + 0x00000807,0x00000805,0x00060039,0x00000006,0x00000808,0x0000003f,0x00000806,0x00000807, + 0x00050041,0x00000007,0x00000809,0x00000135,0x000003db,0x0003003e,0x00000809,0x00000808, + 0x00040039,0x00000006,0x0000080c,0x00000065,0x00050088,0x00000006,0x0000080d,0x0000080b, + 0x0000080c,0x0004003d,0x00000006,0x0000080e,0x000007cf,0x00050083,0x00000006,0x0000080f, + 0x00000155,0x0000080e,0x00050085,0x00000006,0x00000810,0x0000080d,0x0000080f,0x0003003e, + 0x0000080a,0x00000810,0x00050041,0x00000007,0x00000811,0x00000135,0x000003db,0x0004003d, + 0x00000006,0x00000812,0x00000811,0x0004003d,0x00000006,0x00000813,0x0000080a,0x00050083, + 0x00000006,0x00000814,0x00000812,0x00000813,0x0003003e,0x00000815,0x00000154,0x0003003e, + 0x00000816,0x00000814,0x00060039,0x00000006,0x00000817,0x0000003f,0x00000815,0x00000816, + 0x00050041,0x00000007,0x00000818,0x00000135,0x000003db,0x0003003e,0x00000818,0x00000817, + 0x00050041,0x0000001b,0x0000081a,0x00000134,0x0000023e,0x0004003d,0x0000001a,0x0000081b, + 0x0000081a,0x00050041,0x0000001b,0x0000081c,0x00000134,0x0000019d,0x0004003d,0x0000001a, + 0x0000081d,0x0000081c,0x00050083,0x0000001a,0x0000081e,0x0000081b,0x0000081d,0x0003003e, + 0x00000819,0x0000081e,0x0004003d,0x0000001a,0x00000820,0x00000819,0x0003003e,0x0000081f, + 0x00000820,0x00050039,0x000000a7,0x00000821,0x000000c3,0x0000081f,0x000500a4,0x000000a7, + 0x00000823,0x00000821,0x00000822,0x000600a9,0x00000006,0x00000824,0x00000823,0x00000155, + 0x00000154,0x00050041,0x00000007,0x00000825,0x00000135,0x000003db,0x0004003d,0x00000006, + 0x00000826,0x00000825,0x00050085,0x00000006,0x00000827,0x00000826,0x00000824,0x00050041, + 0x00000007,0x00000828,0x00000135,0x000003db,0x0003003e,0x00000828,0x00000827,0x000100fd, + 0x00010038,0x00050036,0x00000002,0x0000013a,0x00000000,0x0000010b,0x00030037,0x00000100, + 0x00000138,0x00030037,0x00000102,0x00000139,0x000200f8,0x0000013b,0x0004003b,0x00000007, + 0x00000829,0x00000007,0x0004003b,0x00000007,0x00000830,0x00000007,0x0004003b,0x00000007, + 0x00000831,0x00000007,0x0004003b,0x00000007,0x00000833,0x00000007,0x0004003b,0x00000007, + 0x00000835,0x00000007,0x0004003b,0x00000007,0x00000837,0x00000007,0x0004003b,0x00000007, + 0x00000838,0x00000007,0x0004003b,0x00000007,0x0000083a,0x00000007,0x0004003b,0x00000007, + 0x0000083c,0x00000007,0x00050051,0x00000006,0x0000082a,0x00000138,0x0000000a,0x0003003e, + 0x00000829,0x0000082a,0x00050051,0x00000006,0x0000082c,0x00000138,0x00000006,0x00040039, + 0x00000006,0x0000082d,0x0000006b,0x00050085,0x00000006,0x0000082e,0x0000082c,0x0000082d, + 0x00050088,0x00000006,0x0000082f,0x0000082e,0x000002b1,0x0003003e,0x00000830,0x00000154, + 0x0003003e,0x00000831,0x0000082f,0x00060039,0x00000006,0x00000832,0x0000003f,0x00000830, + 0x00000831,0x0003003e,0x00000833,0x00000832,0x00050039,0x00000006,0x00000834,0x00000018, + 0x00000833,0x0004003d,0x00000006,0x00000836,0x00000829,0x0003003e,0x00000835,0x00000836, + 0x0003003e,0x00000837,0x0000082b,0x0003003e,0x00000838,0x00000834,0x00070039,0x00000006, + 0x00000839,0x0000000c,0x00000835,0x00000837,0x00000838,0x0004003d,0x00000006,0x0000083b, + 0x00000829,0x0003003e,0x0000083a,0x0000083b,0x0003003e,0x0000083c,0x00000839,0x00060039, + 0x00000006,0x0000083d,0x00000023,0x0000083a,0x0000083c,0x0003003e,0x00000829,0x0000083d, + 0x0004003d,0x00000006,0x0000083e,0x00000829,0x00050041,0x00000007,0x0000083f,0x00000139, + 0x0000019d,0x0003003e,0x0000083f,0x0000083e,0x000100fd,0x00010038,0x00050036,0x00000002, + 0x00000140,0x00000000,0x0000013c,0x00030037,0x0000006d,0x0000013d,0x00030037,0x00000122, + 0x0000013e,0x00030037,0x00000102,0x0000013f,0x000200f8,0x00000141,0x0004003b,0x0000001b, + 0x00000842,0x00000007,0x0004003b,0x0000001b,0x00000855,0x00000007,0x0004003b,0x0000006d, + 0x00000858,0x00000007,0x0004003b,0x0000006d,0x00000859,0x00000007,0x0004003b,0x0000006d, + 0x0000085c,0x00000007,0x0004003b,0x0000001b,0x0000085e,0x00000007,0x0004003b,0x0000001b, + 0x00000862,0x00000007,0x0004003b,0x00000122,0x00000867,0x00000007,0x0004003b,0x0000001b, + 0x0000086b,0x00000007,0x0004003b,0x0000001b,0x0000086e,0x00000007,0x0004003b,0x0000006d, + 0x00000870,0x00000007,0x0004003b,0x0000006d,0x00000871,0x00000007,0x0004003b,0x0000001b, + 0x00000873,0x00000007,0x0004003b,0x0000001b,0x00000877,0x00000007,0x0004003b,0x0000001b, + 0x0000087c,0x00000007,0x0004003b,0x0000006d,0x0000087f,0x00000007,0x0004003b,0x0000006d, + 0x00000880,0x00000007,0x0004003b,0x0000001b,0x00000882,0x00000007,0x0004003b,0x00000030, + 0x00000890,0x00000007,0x0004003b,0x0000001b,0x00000891,0x00000007,0x0004003b,0x00000007, + 0x00000895,0x00000007,0x0004003b,0x00000007,0x0000089a,0x00000007,0x0004003b,0x00000007, + 0x0000089f,0x00000007,0x0004003b,0x00000007,0x000008a4,0x00000007,0x0004003d,0x00000055, + 0x00000840,0x0000013d,0x00050041,0x0000006d,0x00000841,0x0000013e,0x00000197,0x0003003e, + 0x00000841,0x00000840,0x0004003d,0x00000055,0x00000843,0x0000013d,0x0004006f,0x0000001a, + 0x00000844,0x00000843,0x00050050,0x0000001a,0x00000845,0x000002b1,0x000002b1,0x00050081, + 0x0000001a,0x00000846,0x00000844,0x00000845,0x00040039,0x00000055,0x00000847,0x0000005b, + 0x0004006f,0x0000001a,0x00000848,0x00000847,0x00050088,0x0000001a,0x00000849,0x00000846, + 0x00000848,0x0003003e,0x00000842,0x00000849,0x0004003d,0x0000001a,0x0000084a,0x00000842, + 0x00050041,0x0000001b,0x0000084b,0x0000013e,0x0000023e,0x0003003e,0x0000084b,0x0000084a, + 0x0004003d,0x0000001a,0x0000084c,0x00000842,0x00040039,0x0000001a,0x0000084d,0x00000060, + 0x00040039,0x00000055,0x0000084e,0x00000057,0x0004006f,0x0000001a,0x0000084f,0x0000084e, + 0x00050088,0x0000001a,0x00000850,0x0000084d,0x0000084f,0x00050081,0x0000001a,0x00000851, + 0x0000084c,0x00000850,0x00050041,0x0000001b,0x00000852,0x0000013e,0x000001a2,0x0003003e, + 0x00000852,0x00000851,0x00040039,0x00000055,0x00000853,0x00000057,0x00040039,0x00000055, + 0x00000854,0x00000059,0x00050041,0x0000001b,0x00000856,0x0000013e,0x000001a2,0x0004003d, + 0x0000001a,0x00000857,0x00000856,0x0003003e,0x00000855,0x00000857,0x0003003e,0x00000858, + 0x00000853,0x0003003e,0x00000859,0x00000854,0x00070039,0x0000001a,0x0000085a,0x000000cf, + 0x00000855,0x00000858,0x00000859,0x00050041,0x0000001b,0x0000085b,0x0000013e,0x000001a7, + 0x0003003e,0x0000085b,0x0000085a,0x0004003d,0x00000055,0x0000085d,0x0000013d,0x0003003e, + 0x0000085c,0x0000085d,0x0004003d,0x0000001a,0x0000085f,0x00000842,0x0003003e,0x0000085e, + 0x0000085f,0x00060039,0x0000001a,0x00000860,0x00000120,0x0000085c,0x0000085e,0x00050041, + 0x0000001b,0x00000861,0x0000013e,0x0000019d,0x0003003e,0x00000861,0x00000860,0x00050041, + 0x0000001b,0x00000863,0x0000013e,0x0000019d,0x0004003d,0x0000001a,0x00000864,0x00000863, + 0x0003003e,0x00000862,0x00000864,0x00050039,0x00000006,0x00000865,0x0000009d,0x00000862, + 0x00050041,0x00000007,0x00000866,0x0000013e,0x000003dc,0x0003003e,0x00000866,0x00000865, + 0x0004003d,0x00000100,0x00000868,0x0000013e,0x0003003e,0x00000867,0x00000868,0x00050039, + 0x00000002,0x00000869,0x00000125,0x00000867,0x0004003d,0x00000100,0x0000086a,0x00000867, + 0x0003003e,0x0000013e,0x0000086a,0x00040039,0x00000055,0x0000086c,0x00000057,0x00040039, + 0x00000055,0x0000086d,0x00000059,0x0004003d,0x0000001a,0x0000086f,0x00000842,0x0003003e, + 0x0000086e,0x0000086f,0x0003003e,0x00000870,0x0000086c,0x0003003e,0x00000871,0x0000086d, + 0x00070039,0x0000001a,0x00000872,0x000000cf,0x0000086e,0x00000870,0x00000871,0x0003003e, + 0x0000086b,0x00000872,0x0004003d,0x0000001a,0x00000874,0x0000086b,0x0003003e,0x00000873, + 0x00000874,0x00050039,0x00000006,0x00000875,0x00000087,0x00000873,0x00050041,0x00000007, + 0x00000876,0x0000013e,0x000003f0,0x0003003e,0x00000876,0x00000875,0x00040039,0x00000055, + 0x00000878,0x00000057,0x00050050,0x00000055,0x00000879,0x000001a2,0x000001a2,0x00050087, + 0x00000055,0x0000087a,0x00000878,0x00000879,0x00040039,0x00000055,0x0000087b,0x00000080, + 0x00050041,0x0000001b,0x0000087d,0x0000013e,0x000001a2,0x0004003d,0x0000001a,0x0000087e, + 0x0000087d,0x0003003e,0x0000087c,0x0000087e,0x0003003e,0x0000087f,0x0000087a,0x0003003e, + 0x00000880,0x0000087b,0x00070039,0x0000001a,0x00000881,0x000000cf,0x0000087c,0x0000087f, + 0x00000880,0x0003003e,0x00000877,0x00000881,0x0004003d,0x0000001a,0x00000883,0x00000877, + 0x0003003e,0x00000882,0x00000883,0x00050039,0x00000006,0x00000884,0x00000084,0x00000882, + 0x00050041,0x00000007,0x00000885,0x0000013e,0x00000402,0x0003003e,0x00000885,0x00000884, + 0x00050041,0x000000a8,0x00000886,0x0000013e,0x000001b7,0x0004003d,0x000000a7,0x00000887, + 0x00000886,0x000500a4,0x000000a7,0x00000888,0x00000887,0x000007c8,0x000400a8,0x000000a7, + 0x00000889,0x00000888,0x000300f7,0x0000088b,0x00000000,0x000400fa,0x00000889,0x0000088a, + 0x0000088b,0x000200f8,0x0000088a,0x00040039,0x00000006,0x0000088c,0x00000069,0x000500b4, + 0x000000a7,0x0000088d,0x00000154,0x0000088c,0x000200f9,0x0000088b,0x000200f8,0x0000088b, + 0x000700f5,0x000000a7,0x0000088e,0x00000888,0x00000141,0x0000088d,0x0000088a,0x00050041, + 0x000000a8,0x0000088f,0x0000013e,0x00000403,0x0003003e,0x0000088f,0x0000088e,0x00050041, + 0x0000001b,0x00000892,0x0000013e,0x000001a7,0x0004003d,0x0000001a,0x00000893,0x00000892, + 0x0003003e,0x00000891,0x00000893,0x00050039,0x0000002f,0x00000894,0x0000009a,0x00000891, + 0x0003003e,0x00000890,0x00000894,0x00050041,0x00000007,0x00000896,0x00000890,0x000001fa, + 0x0004003d,0x00000006,0x00000897,0x00000896,0x0003003e,0x00000895,0x00000897,0x00050039, + 0x00000006,0x00000898,0x00000018,0x00000895,0x00050041,0x00000007,0x00000899,0x0000013e, + 0x000003ee,0x0003003e,0x00000899,0x00000898,0x00050041,0x00000007,0x0000089b,0x00000890, + 0x00000293,0x0004003d,0x00000006,0x0000089c,0x0000089b,0x0003003e,0x0000089a,0x0000089c, + 0x00050039,0x00000006,0x0000089d,0x00000018,0x0000089a,0x00050041,0x00000007,0x0000089e, + 0x0000013e,0x000001ac,0x0003003e,0x0000089e,0x0000089d,0x00050041,0x00000007,0x000008a0, + 0x00000890,0x00000297,0x0004003d,0x00000006,0x000008a1,0x000008a0,0x0003003e,0x0000089f, + 0x000008a1,0x00050039,0x00000006,0x000008a2,0x00000018,0x0000089f,0x00050041,0x00000007, + 0x000008a3,0x0000013e,0x000003ef,0x0003003e,0x000008a3,0x000008a2,0x00050041,0x00000007, + 0x000008a5,0x00000890,0x00000716,0x0004003d,0x00000006,0x000008a6,0x000008a5,0x0003003e, + 0x000008a4,0x000008a6,0x00050039,0x00000006,0x000008a7,0x00000018,0x000008a4,0x00050041, + 0x00000007,0x000008a8,0x0000013e,0x000001b2,0x0003003e,0x000008a8,0x000008a7,0x00050041, + 0x00000007,0x000008a9,0x0000013e,0x000001b2,0x0004003d,0x00000006,0x000008aa,0x000008a9, + 0x00050085,0x00000006,0x000008ac,0x000008aa,0x000008ab,0x0006000c,0x00000006,0x000008ad, + 0x00000001,0x00000001,0x000008ac,0x000500ba,0x000000a7,0x000008ae,0x000008ad,0x00000155, + 0x000600a9,0x00000006,0x000008af,0x000008ae,0x00000155,0x00000154,0x00050041,0x00000007, + 0x000008b0,0x0000013e,0x000001b2,0x0004003d,0x00000006,0x000008b1,0x000008b0,0x00050085, + 0x00000006,0x000008b2,0x000008b1,0x000008af,0x00050041,0x00000007,0x000008b3,0x0000013e, + 0x000001b2,0x0003003e,0x000008b3,0x000008b2,0x00050041,0x0000000f,0x000008b4,0x0000013f, + 0x0000023e,0x0003003e,0x000008b4,0x00000496,0x00050041,0x0000000f,0x000008b5,0x0000013f, + 0x000001a7,0x0003003e,0x000008b5,0x00000496,0x00050041,0x00000007,0x000008b6,0x0000013f, + 0x0000019d,0x0003003e,0x000008b6,0x00000155,0x00050041,0x00000007,0x000008b7,0x0000013f, + 0x000001a2,0x0003003e,0x000008b7,0x00000154,0x00050041,0x00000007,0x000008b8,0x0000013f, + 0x000003db,0x0003003e,0x000008b8,0x00000154,0x00050041,0x00000007,0x000008b9,0x0000013f, + 0x000003dc,0x0003003e,0x000008b9,0x00000154,0x000100fd,0x00010038,0x00050036,0x00000002, + 0x00000144,0x00000000,0x00000142,0x00030037,0x0000006d,0x00000143,0x000200f8,0x00000145, + 0x0004003b,0x00000122,0x000008ba,0x00000007,0x0004003b,0x00000102,0x000008bb,0x00000007, + 0x0004003b,0x0000006d,0x000008bc,0x00000007,0x0004003b,0x00000122,0x000008be,0x00000007, + 0x0004003b,0x00000102,0x000008c0,0x00000007,0x0004003b,0x00000102,0x000008d0,0x00000007, + 0x0004003b,0x00000122,0x000008d4,0x00000007,0x0004003b,0x00000102,0x000008d6,0x00000007, + 0x0004003b,0x00000102,0x000008db,0x00000007,0x0004003b,0x00000102,0x000008e0,0x00000007, + 0x0004003b,0x00000102,0x000008e5,0x00000007,0x0004003b,0x00000102,0x000008ea,0x00000007, + 0x0004003b,0x0000000f,0x000008f4,0x00000007,0x0004003b,0x0000000f,0x000008f7,0x00000007, + 0x0004003b,0x0000006d,0x00000902,0x00000007,0x0004003b,0x00000030,0x00000904,0x00000007, + 0x0004003b,0x0000006d,0x00000906,0x00000007,0x0004003b,0x0000000f,0x00000908,0x00000007, + 0x0004003b,0x0000006d,0x0000090c,0x00000007,0x0004003b,0x00000007,0x0000090e,0x00000007, + 0x0004003d,0x00000055,0x000008bd,0x00000143,0x0003003e,0x000008bc,0x000008bd,0x0004003d, + 0x00000100,0x000008bf,0x000008ba,0x0003003e,0x000008be,0x000008bf,0x0004003d,0x00000101, + 0x000008c1,0x000008bb,0x0003003e,0x000008c0,0x000008c1,0x00070039,0x00000002,0x000008c2, + 0x00000140,0x000008bc,0x000008be,0x000008c0,0x0004003d,0x00000100,0x000008c3,0x000008be, + 0x0003003e,0x000008ba,0x000008c3,0x0004003d,0x00000101,0x000008c4,0x000008c0,0x0003003e, + 0x000008bb,0x000008c4,0x00050041,0x000000a8,0x000008c5,0x000008ba,0x000001b7,0x0004003d, + 0x000000a7,0x000008c6,0x000008c5,0x000300f7,0x000008c8,0x00000000,0x000400fa,0x000008c6, + 0x000008c7,0x000008c8,0x000200f8,0x000008c7,0x00050041,0x000000a8,0x000008c9,0x000008ba, + 0x00000403,0x0004003d,0x000000a7,0x000008ca,0x000008c9,0x000400a8,0x000000a7,0x000008cb, + 0x000008ca,0x000200f9,0x000008c8,0x000200f8,0x000008c8,0x000700f5,0x000000a7,0x000008cc, + 0x000008c6,0x00000145,0x000008cb,0x000008c7,0x000300f7,0x000008ce,0x00000000,0x000400fa, + 0x000008cc,0x000008cd,0x000008ce,0x000200f8,0x000008cd,0x0004003d,0x00000100,0x000008cf, + 0x000008ba,0x0004003d,0x00000101,0x000008d1,0x000008bb,0x0003003e,0x000008d0,0x000008d1, + 0x00060039,0x00000002,0x000008d2,0x00000129,0x000008cf,0x000008d0,0x0004003d,0x00000101, + 0x000008d3,0x000008d0,0x0003003e,0x000008bb,0x000008d3,0x000200f9,0x000008ce,0x000200f8, + 0x000008ce,0x0004003d,0x00000100,0x000008d5,0x000008ba,0x0003003e,0x000008d4,0x000008d5, + 0x0004003d,0x00000101,0x000008d7,0x000008bb,0x0003003e,0x000008d6,0x000008d7,0x00060039, + 0x00000002,0x000008d8,0x00000136,0x000008d4,0x000008d6,0x0004003d,0x00000101,0x000008d9, + 0x000008d6,0x0003003e,0x000008bb,0x000008d9,0x0004003d,0x00000100,0x000008da,0x000008ba, + 0x0004003d,0x00000101,0x000008dc,0x000008bb,0x0003003e,0x000008db,0x000008dc,0x00060039, + 0x00000002,0x000008dd,0x0000013a,0x000008da,0x000008db,0x0004003d,0x00000101,0x000008de, + 0x000008db,0x0003003e,0x000008bb,0x000008de,0x0004003d,0x00000100,0x000008df,0x000008ba, + 0x0004003d,0x00000101,0x000008e1,0x000008bb,0x0003003e,0x000008e0,0x000008e1,0x00060039, + 0x00000002,0x000008e2,0x0000010e,0x000008df,0x000008e0,0x0004003d,0x00000101,0x000008e3, + 0x000008e0,0x0003003e,0x000008bb,0x000008e3,0x0004003d,0x00000100,0x000008e4,0x000008ba, + 0x0004003d,0x00000101,0x000008e6,0x000008bb,0x0003003e,0x000008e5,0x000008e6,0x00060039, + 0x00000002,0x000008e7,0x00000131,0x000008e4,0x000008e5,0x0004003d,0x00000101,0x000008e8, + 0x000008e5,0x0003003e,0x000008bb,0x000008e8,0x0004003d,0x00000100,0x000008e9,0x000008ba, + 0x0004003d,0x00000101,0x000008eb,0x000008bb,0x0003003e,0x000008ea,0x000008eb,0x00060039, + 0x00000002,0x000008ec,0x0000012d,0x000008e9,0x000008ea,0x0004003d,0x00000101,0x000008ed, + 0x000008ea,0x0003003e,0x000008bb,0x000008ed,0x00040039,0x00000006,0x000008ee,0x00000096, + 0x00050041,0x0000000f,0x000008ef,0x000008bb,0x000001a7,0x0004003d,0x0000000e,0x000008f0, + 0x000008ef,0x00060050,0x0000000e,0x000008f1,0x000008ee,0x000008ee,0x000008ee,0x00050088, + 0x0000000e,0x000008f2,0x000008f0,0x000008f1,0x00050041,0x0000000f,0x000008f3,0x000008bb, + 0x000001a7,0x0003003e,0x000008f3,0x000008f2,0x00050041,0x0000000f,0x000008f5,0x000008bb, + 0x000001a7,0x0004003d,0x0000000e,0x000008f6,0x000008f5,0x0003003e,0x000008f4,0x000008f6, + 0x0003003e,0x000008f7,0x00000496,0x00060039,0x0000000e,0x000008f8,0x00000047,0x000008f4, + 0x000008f7,0x00050041,0x0000000f,0x000008f9,0x000008bb,0x000001a7,0x0003003e,0x000008f9, + 0x000008f8,0x00050041,0x0000000f,0x000008fa,0x000008bb,0x000001a7,0x0004003d,0x0000000e, + 0x000008fb,0x000008fa,0x00050041,0x00000007,0x000008fc,0x000008bb,0x000003db,0x0004003d, + 0x00000006,0x000008fd,0x000008fc,0x00050051,0x00000006,0x000008fe,0x000008fb,0x00000000, + 0x00050051,0x00000006,0x000008ff,0x000008fb,0x00000001,0x00050051,0x00000006,0x00000900, + 0x000008fb,0x00000002,0x00070050,0x0000002f,0x00000901,0x000008fe,0x000008ff,0x00000900, + 0x000008fd,0x0004003d,0x00000055,0x00000903,0x00000143,0x0003003e,0x00000902,0x00000903, + 0x0003003e,0x00000904,0x00000901,0x00060039,0x00000002,0x00000905,0x00000079,0x00000902, + 0x00000904,0x0004003d,0x00000055,0x00000907,0x00000143,0x0003003e,0x00000906,0x00000907, + 0x00050041,0x0000000f,0x00000909,0x000008bb,0x000001a7,0x0004003d,0x0000000e,0x0000090a, + 0x00000909,0x0003003e,0x00000908,0x0000090a,0x00060039,0x00000002,0x0000090b,0x0000007e, + 0x00000906,0x00000908,0x0004003d,0x00000055,0x0000090d,0x00000143,0x0003003e,0x0000090c, + 0x0000090d,0x0003003e,0x0000090e,0x00000154,0x00060039,0x00000002,0x0000090f,0x00000090, + 0x0000090c,0x0000090e,0x000100fd,0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_accumulate_sharpen_comp_spv.h b/gpu/vk/shaders/fsr3_accumulate_sharpen_comp_spv.h new file mode 100644 index 000000000..9170ff3c1 --- /dev/null +++ b/gpu/vk/shaders/fsr3_accumulate_sharpen_comp_spv.h @@ -0,0 +1,1980 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_ACCUMULATE_SHARPEN_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x00000912,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000031,0x00020011,0x00000032,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e, + 0x00000000,0x0003000e,0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d, + 0x00000000,0x000008fd,0x00060010,0x00000004,0x00000011,0x00000008,0x00000008,0x00000001, + 0x00030003,0x00000002,0x000001c2,0x000b0004,0x455f4c47,0x735f5458,0x6c706d61,0x656c7265, + 0x745f7373,0x75747865,0x665f6572,0x74636e75,0x736e6f69,0x00000000,0x000b0004,0x455f4c47, + 0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63, + 0x00736570,0x000a0004,0x455f4c47,0x735f5458,0x65646168,0x6d695f72,0x5f656761,0x64616f6c, + 0x726f665f,0x7474616d,0x00006465,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70, + 0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f, + 0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669,0x00040005,0x00000004,0x6e69616d, + 0x00000000,0x00070005,0x0000000c,0x4c786666,0x28707265,0x663b3166,0x31663b31,0x0000003b, + 0x00030005,0x00000009,0x00000078,0x00030005,0x0000000a,0x00000079,0x00030005,0x0000000b, + 0x00000074,0x00070005,0x00000014,0x4c786666,0x28707265,0x3b336676,0x3b336676,0x003b3166, + 0x00030005,0x00000011,0x00000078,0x00030005,0x00000012,0x00000079,0x00030005,0x00000013, + 0x00000074,0x00060005,0x00000018,0x53786666,0x72757461,0x28657461,0x003b3166,0x00030005, + 0x00000017,0x00000078,0x00060005,0x0000001e,0x46786666,0x74636172,0x32667628,0x0000003b, + 0x00030005,0x0000001d,0x00000078,0x00060005,0x00000023,0x4d786666,0x66286e69,0x31663b31, + 0x0000003b,0x00030005,0x00000021,0x00000078,0x00030005,0x00000022,0x00000079,0x00060005, + 0x00000028,0x4d786666,0x76286e69,0x763b3266,0x003b3266,0x00030005,0x00000026,0x00000078, + 0x00030005,0x00000027,0x00000079,0x00060005,0x0000002d,0x4d786666,0x76286e69,0x763b3366, + 0x003b3366,0x00030005,0x0000002b,0x00000078,0x00030005,0x0000002c,0x00000079,0x00060005, + 0x00000034,0x4d786666,0x76286e69,0x763b3466,0x003b3466,0x00030005,0x00000032,0x00000078, + 0x00030005,0x00000033,0x00000079,0x00060005,0x0000003b,0x4d786666,0x69286e69,0x31693b31, + 0x0000003b,0x00030005,0x00000039,0x00000078,0x00030005,0x0000003a,0x00000079,0x00060005, + 0x0000003f,0x4d786666,0x66287861,0x31663b31,0x0000003b,0x00030005,0x0000003d,0x00000078, + 0x00030005,0x0000003e,0x00000079,0x00060005,0x00000043,0x4d786666,0x76287861,0x763b3266, + 0x003b3266,0x00030005,0x00000041,0x00000078,0x00030005,0x00000042,0x00000079,0x00060005, + 0x00000047,0x4d786666,0x76287861,0x763b3366,0x003b3366,0x00030005,0x00000045,0x00000078, + 0x00030005,0x00000046,0x00000079,0x00060005,0x0000004b,0x4d786666,0x76287861,0x763b3466, + 0x003b3466,0x00030005,0x00000049,0x00000078,0x00030005,0x0000004a,0x00000079,0x00060005, + 0x0000004f,0x4d786666,0x69287861,0x31693b31,0x0000003b,0x00030005,0x0000004d,0x00000078, + 0x00030005,0x0000004e,0x00000079,0x00060005,0x00000053,0x50786666,0x6628776f,0x31663b31, + 0x0000003b,0x00030005,0x00000051,0x00000078,0x00030005,0x00000052,0x00000079,0x00050005, + 0x00000057,0x646e6552,0x69537265,0x0028657a,0x00060005,0x00000059,0x5278614d,0x65646e65, + 0x7a695372,0x00002865,0x00060005,0x0000005b,0x63737055,0x53656c61,0x28657a69,0x00000000, + 0x00090005,0x0000005d,0x76657250,0x73756f69,0x6d617246,0x73705565,0x656c6163,0x657a6953, + 0x00000028,0x00040005,0x00000060,0x7474694a,0x00287265,0x00070005,0x00000062,0x6e776f44, + 0x6c616373,0x63614665,0x28726f74,0x00000000,0x00080005,0x00000065,0x7474694a,0x65537265, + 0x6e657571,0x654c6563,0x6874676e,0x00000028,0x00070005,0x00000067,0x746c6544,0x65725061, + 0x6f707845,0x65727573,0x00000028,0x00050005,0x00000069,0x6d617246,0x646e4965,0x00287865, + 0x00060005,0x0000006b,0x6f6c6556,0x79746963,0x74636146,0x0028726f,0x00070005,0x00000070, + 0x64616f4c,0x75706e49,0x6c6f4374,0x7628726f,0x003b3269,0x00040005,0x0000006f,0x50785069, + 0x0000736f,0x00070005,0x00000074,0x64616f4c,0x74736948,0x2879726f,0x3b326976,0x00000000, + 0x00050005,0x00000073,0x48785069,0x6f747369,0x00007972,0x000c0005,0x00000079,0x726f7453, + 0x746e4965,0x616e7265,0x6c6f436c,0x6e41726f,0x69655764,0x28746867,0x3b326976,0x3b346676, + 0x00000000,0x00040005,0x00000077,0x50785069,0x0000736f,0x00060005,0x00000078,0x6c6f4366, + 0x6e41726f,0x69655764,0x00746867,0x000c0005,0x0000007b,0x46746547,0x68747261,0x44747365, + 0x68747065,0x3170694d,0x6f736552,0x65637275,0x656d6944,0x6f69736e,0x0028736e,0x000a0005, + 0x0000007f,0x706d6153,0x6146656c,0x65687472,0x65447473,0x4d687470,0x28317069,0x3b326676, + 0x00000000,0x00030005,0x0000007e,0x00565566,0x00090005,0x00000082,0x706d6153,0x754c656c, + 0x6e49616d,0x62617473,0x74696c69,0x66762879,0x00003b32,0x00030005,0x00000081,0x00007675, + 0x00070005,0x00000086,0x64616f4c,0x654e7752,0x636f4c77,0x7628736b,0x003b3269,0x00040005, + 0x00000085,0x50785069,0x0000736f,0x00080005,0x0000008b,0x726f7453,0x77654e65,0x6b636f4c, + 0x69762873,0x31663b32,0x0000003b,0x00040005,0x00000089,0x50785069,0x0000736f,0x00040005, + 0x0000008a,0x4c77656e,0x006b636f,0x000a0005,0x0000008f,0x64616f4c,0x616c6944,0x4d646574, + 0x6f69746f,0x6365566e,0x28726f74,0x3b326976,0x00000000,0x00050005,0x0000008e,0x49785069, + 0x7475706e,0x00000000,0x00050005,0x00000091,0x6f707845,0x65727573,0x00000028,0x000a0005, + 0x00000095,0x706d6153,0x6944656c,0x6574616c,0x61655264,0x76697463,0x73614d65,0x7628736b, + 0x003b3266,0x00030005,0x00000094,0x00565566,0x00070005,0x00000098,0x34746547,0x6c65564b, + 0x7469636f,0x66762879,0x00003b32,0x00060005,0x00000097,0x746f4d66,0x566e6f69,0x6f746365, + 0x00000072,0x00070005,0x0000009a,0x74636552,0x63696669,0x6f697461,0x786f426e,0x00000000, + 0x00060006,0x0000009a,0x00000000,0x43786f62,0x65746e65,0x00000072,0x00050006,0x0000009a, + 0x00000001,0x56786f62,0x00006365,0x00050006,0x0000009a,0x00000002,0x62626161,0x006e694d, + 0x00050006,0x0000009a,0x00000003,0x62626161,0x0078614d,0x00080006,0x0000009a,0x00000004, + 0x786f4266,0x746e6543,0x65577265,0x74686769,0x00000000,0x00180005,0x000000a0,0x74636552, + 0x63696669,0x6f697461,0x786f426e,0x49646441,0x6974696e,0x61536c61,0x656c706d,0x72747328, + 0x2d746375,0x74636552,0x63696669,0x6f697461,0x786f426e,0x3366762d,0x3366762d,0x3366762d, + 0x3366762d,0x3131662d,0x3366763b,0x3b31663b,0x00000000,0x00070005,0x0000009d,0x74636572, + 0x63696669,0x6f697461,0x786f426e,0x00000000,0x00050005,0x0000009e,0x6f6c6f63,0x6d615372, + 0x00656c70,0x00060005,0x0000009f,0x6d615366,0x57656c70,0x68676965,0x00000074,0x00170005, + 0x000000a9,0x74636552,0x63696669,0x6f697461,0x786f426e,0x53646441,0x6c706d61,0x31622865, + 0x7274733b,0x2d746375,0x74636552,0x63696669,0x6f697461,0x786f426e,0x3366762d,0x3366762d, + 0x3366762d,0x3366762d,0x3131662d,0x3366763b,0x3b31663b,0x00000000,0x00060005,0x000000a5, + 0x696e4962,0x6c616974,0x706d6153,0x0000656c,0x00070005,0x000000a6,0x74636572,0x63696669, + 0x6f697461,0x786f426e,0x00000000,0x00050005,0x000000a7,0x6f6c6f63,0x6d615372,0x00656c70, + 0x00060005,0x000000a8,0x6d615366,0x57656c70,0x68676965,0x00000074,0x00170005,0x000000ad, + 0x74636552,0x63696669,0x6f697461,0x786f426e,0x706d6f43,0x56657475,0x61697261,0x4265636e, + 0x6144786f,0x73286174,0x63757274,0x65522d74,0x66697463,0x74616369,0x426e6f69,0x762d786f, + 0x762d3366,0x762d3366,0x762d3366,0x662d3366,0x003b3131,0x00070005,0x000000ac,0x74636572, + 0x63696669,0x6f697461,0x786f426e,0x00000000,0x00060005,0x000000b1,0x436f4359,0x526f5467, + 0x76284247,0x003b3366,0x00040005,0x000000b0,0x6f435966,0x00006743,0x00060005,0x000000b4, + 0x54424752,0x6f43596f,0x76286743,0x003b3366,0x00040005,0x000000b3,0x62675266,0x00000000, + 0x00060005,0x000000b7,0x656e6f54,0x2870616d,0x3b336676,0x00000000,0x00040005,0x000000b6, + 0x62675266,0x00000000,0x00070005,0x000000ba,0x65766e49,0x54657372,0x6d656e6f,0x76287061, + 0x003b3366,0x00040005,0x000000b9,0x62675266,0x00000000,0x00060005,0x000000be,0x76557349, + 0x69736e49,0x76286564,0x003b3266,0x00030005,0x000000bd,0x00765566,0x00080005,0x000000c4, + 0x6d616c43,0x616f4c70,0x69762864,0x69763b32,0x69763b32,0x00003b32,0x00050005,0x000000c1, + 0x53785069,0x6c706d61,0x00000065,0x00050005,0x000000c2,0x4f785069,0x65736666,0x00000074, + 0x00060005,0x000000c3,0x78655469,0x65727574,0x657a6953,0x00000000,0x00080005,0x000000ca, + 0x6d616c43,0x28765570,0x3b326676,0x3b326976,0x3b326976,0x00000000,0x00030005,0x000000c7, + 0x00765566,0x00060005,0x000000c8,0x78655469,0x65727574,0x657a6953,0x00000000,0x00060005, + 0x000000c9,0x73655269,0x6372756f,0x7a695365,0x00000065,0x00070005,0x000000cf,0x6e4f7349, + 0x65726353,0x76286e65,0x763b3269,0x003b3269,0x00030005,0x000000cd,0x00736f70,0x00040005, + 0x000000ce,0x657a6973,0x00000000,0x00070005,0x000000d2,0x636e614c,0x32736f7a,0x6c436f4e, + 0x28706d61,0x003b3166,0x00030005,0x000000d1,0x00000078,0x00060005,0x000000d5,0x636e614c, + 0x32736f7a,0x3b316628,0x00000000,0x00030005,0x000000d4,0x00000078,0x00090005,0x000000d8, + 0x636e614c,0x32736f7a,0x72707041,0x7153786f,0x6c436f4e,0x28706d61,0x003b3166,0x00030005, + 0x000000d7,0x00003278,0x00080005,0x000000db,0x636e614c,0x32736f7a,0x72707041,0x7153786f, + 0x3b316628,0x00000000,0x00030005,0x000000da,0x00003278,0x000a0005,0x000000e3,0x636e614c, + 0x32736f7a,0x34667628,0x3466763b,0x3466763b,0x3466763b,0x3b31663b,0x00000000,0x00040005, + 0x000000de,0x6c6f4366,0x0030726f,0x00040005,0x000000df,0x6c6f4366,0x0031726f,0x00040005, + 0x000000e0,0x6c6f4366,0x0032726f,0x00040005,0x000000e1,0x6c6f4366,0x0033726f,0x00030005, + 0x000000e2,0x00000074,0x00080005,0x000000e5,0x63746546,0x42646568,0x62756369,0x61536369, + 0x656c706d,0x00000073,0x00060006,0x000000e5,0x00000000,0x6c6f4366,0x3030726f,0x00000000, + 0x00060006,0x000000e5,0x00000001,0x6c6f4366,0x3031726f,0x00000000,0x00060006,0x000000e5, + 0x00000002,0x6c6f4366,0x3032726f,0x00000000,0x00060006,0x000000e5,0x00000003,0x6c6f4366, + 0x3033726f,0x00000000,0x00060006,0x000000e5,0x00000004,0x6c6f4366,0x3130726f,0x00000000, + 0x00060006,0x000000e5,0x00000005,0x6c6f4366,0x3131726f,0x00000000,0x00060006,0x000000e5, + 0x00000006,0x6c6f4366,0x3132726f,0x00000000,0x00060006,0x000000e5,0x00000007,0x6c6f4366, + 0x3133726f,0x00000000,0x00060006,0x000000e5,0x00000008,0x6c6f4366,0x3230726f,0x00000000, + 0x00060006,0x000000e5,0x00000009,0x6c6f4366,0x3231726f,0x00000000,0x00060006,0x000000e5, + 0x0000000a,0x6c6f4366,0x3232726f,0x00000000,0x00060006,0x000000e5,0x0000000b,0x6c6f4366, + 0x3233726f,0x00000000,0x00060006,0x000000e5,0x0000000c,0x6c6f4366,0x3330726f,0x00000000, + 0x00060006,0x000000e5,0x0000000d,0x6c6f4366,0x3331726f,0x00000000,0x00060006,0x000000e5, + 0x0000000e,0x6c6f4366,0x3332726f,0x00000000,0x00060006,0x000000e5,0x0000000f,0x6c6f4366, + 0x3333726f,0x00000000,0x001d0005,0x000000ea,0x636e614c,0x32736f7a,0x72747328,0x2d746375, + 0x63746546,0x42646568,0x62756369,0x61536369,0x656c706d,0x66762d73,0x66762d34,0x66762d34, + 0x66762d34,0x66762d34,0x66762d34,0x66762d34,0x66762d34,0x66762d34,0x66762d34,0x66762d34, + 0x66762d34,0x66762d34,0x66762d34,0x66762d34,0x66762d34,0x763b3134,0x003b3266,0x00040005, + 0x000000e8,0x706d6153,0x0073656c,0x00040005,0x000000e9,0x46785066,0x00636172,0x00080005, + 0x000000ef,0x6d616c43,0x6f6f4370,0x76286472,0x763b3269,0x763b3269,0x003b3269,0x00050005, + 0x000000ec,0x53785069,0x6c706d61,0x00000065,0x00050005,0x000000ed,0x4f785069,0x65736666, + 0x00000074,0x00060005,0x000000ee,0x78655469,0x65727574,0x657a6953,0x00000000,0x00110005, + 0x000000f4,0x69726544,0x6e69676e,0x74732867,0x74637572,0x6365522d,0x69666974,0x69746163, + 0x6f426e6f,0x66762d78,0x66762d33,0x66762d33,0x66762d33,0x31662d33,0x66763b31,0x00003b33, + 0x00050005,0x000000f2,0x70696c63,0x676e6970,0x00786f42,0x00040005,0x000000f3,0x6c6f4366, + 0x0000726f,0x000b0005,0x000000f9,0x55746547,0x6d617370,0x4c656c70,0x7a636e61,0x6557736f, + 0x74686769,0x32667628,0x3b31663b,0x00000000,0x00070005,0x000000f7,0x63725366,0x706d6153, + 0x664f656c,0x74657366,0x00000000,0x00060005,0x000000f8,0x72654b66,0x576c656e,0x68676965, + 0x00000074,0x000a0005,0x000000fb,0x75636341,0x616c756d,0x6e6f6974,0x73736150,0x6d6d6f43, + 0x61506e6f,0x736d6172,0x00000000,0x00060006,0x000000fb,0x00000000,0x48785069,0x736f5072, + 0x00000000,0x00050006,0x000000fb,0x00000001,0x55724866,0x00000076,0x00070006,0x000000fb, + 0x00000002,0x55724c66,0x74694a76,0x65726574,0x00000064,0x00070006,0x000000fb,0x00000003, + 0x55724c66,0x77485f76,0x706d6153,0x0072656c,0x00070006,0x000000fb,0x00000004,0x746f4d66, + 0x566e6f69,0x6f746365,0x00000072,0x00080006,0x000000fb,0x00000005,0x70655266,0x656a6f72, + 0x64657463,0x76557248,0x00000000,0x00060006,0x000000fb,0x00000006,0x564b3466,0x636f6c65, + 0x00797469,0x00070006,0x000000fb,0x00000007,0x73694466,0x6c63636f,0x6f697375,0x0000006e, + 0x00070006,0x000000fb,0x00000008,0x61655266,0x76697463,0x73614d65,0x0000006b,0x00070006, + 0x000000fb,0x00000009,0x61685366,0x676e6964,0x6e616843,0x00006567,0x00070006,0x000000fb, + 0x0000000a,0x63634166,0x6c756d75,0x6f697461,0x0000006e,0x00090006,0x000000fb,0x0000000b, + 0x6d754c66,0x736e4961,0x69626174,0x7974696c,0x74636146,0x0000726f,0x00090006,0x000000fb, + 0x0000000c,0x72614666,0x73656874,0x70654474,0x6e496874,0x6574654d,0x00007372,0x00080006, + 0x000000fb,0x0000000d,0x45734962,0x74736978,0x53676e69,0x6c706d61,0x00000065,0x00070006, + 0x000000fb,0x0000000e,0x4e734962,0x61537765,0x656c706d,0x00000000,0x00080005,0x000000fc, + 0x75636341,0x616c756d,0x6e6f6974,0x73736150,0x61746144,0x00000000,0x00060006,0x000000fc, + 0x00000000,0x70696c63,0x676e6970,0x00786f42,0x00070006,0x000000fc,0x00000001,0x73705566, + 0x6c706d61,0x6f436465,0x00726f6c,0x00080006,0x000000fc,0x00000002,0x73705566,0x6c706d61, + 0x65576465,0x74686769,0x00000000,0x00070006,0x000000fc,0x00000003,0x73694866,0x79726f74, + 0x6f6c6f43,0x00000072,0x00070006,0x000000fc,0x00000004,0x73694866,0x79726f74,0x67696557, + 0x00007468,0x00050006,0x000000fc,0x00000005,0x636f4c66,0x0000006b,0x000a0006,0x000000fc, + 0x00000006,0x636f4c66,0x6e6f436b,0x62697274,0x6f697475,0x6968546e,0x61724673,0x0000656d, + 0x00360005,0x00000101,0x706d6f43,0x4d657475,0x654b7861,0x6c656e72,0x67696557,0x73287468, + 0x63757274,0x63412d74,0x756d7563,0x6974616c,0x61506e6f,0x6f437373,0x6e6f6d6d,0x61726150, + 0x762d736d,0x762d3269,0x762d3266,0x762d3266,0x762d3266,0x762d3266,0x662d3266,0x31662d31, + 0x2d31662d,0x662d3166,0x31662d31,0x2d31662d,0x622d3162,0x733b3131,0x63757274,0x63412d74, + 0x756d7563,0x6974616c,0x61506e6f,0x61447373,0x732d6174,0x63757274,0x65522d74,0x66697463, + 0x74616369,0x426e6f69,0x762d786f,0x762d3366,0x762d3366,0x762d3366,0x662d3366,0x762d3131, + 0x662d3366,0x66762d31,0x31662d33,0x2d31662d,0x3b313166,0x00000000,0x00040005,0x000000ff, + 0x61726170,0x0000736d,0x00040005,0x00000100,0x61746164,0x00000000,0x00080005,0x00000104, + 0x64616f4c,0x70657250,0x64657261,0x6f6c6f43,0x69762872,0x00003b32,0x00050005,0x00000103, + 0x6d615369,0x50656c70,0x0000736f,0x00380005,0x00000109,0x706d6f43,0x55657475,0x6d617370, + 0x64656c70,0x6f6c6f43,0x646e4172,0x67696557,0x73287468,0x63757274,0x63412d74,0x756d7563, + 0x6974616c,0x61506e6f,0x6f437373,0x6e6f6d6d,0x61726150,0x762d736d,0x762d3269,0x762d3266, + 0x762d3266,0x762d3266,0x762d3266,0x662d3266,0x31662d31,0x2d31662d,0x662d3166,0x31662d31, + 0x2d31662d,0x622d3162,0x733b3131,0x63757274,0x63412d74,0x756d7563,0x6974616c,0x61506e6f, + 0x61447373,0x732d6174,0x63757274,0x65522d74,0x66697463,0x74616369,0x426e6f69,0x762d786f, + 0x762d3366,0x762d3366,0x762d3366,0x662d3366,0x762d3131,0x662d3366,0x66762d31,0x31662d33, + 0x2d31662d,0x3b313166,0x00000000,0x00040005,0x00000107,0x61726170,0x0000736d,0x00040005, + 0x00000108,0x61746164,0x00000000,0x00070005,0x0000010c,0x70617257,0x74736948,0x2879726f, + 0x3b326976,0x00000000,0x00050005,0x0000010b,0x53785069,0x6c706d61,0x00000065,0x000a0005, + 0x00000111,0x63746546,0x73694868,0x79726f74,0x706d6153,0x2873656c,0x3b326976,0x3b326976, + 0x00000000,0x00050005,0x0000010f,0x53785069,0x6c706d61,0x00000065,0x00060005,0x00000110, + 0x78655469,0x65727574,0x657a6953,0x00000000,0x00080005,0x00000116,0x74736948,0x5379726f, + 0x6c706d61,0x66762865,0x69763b32,0x00003b32,0x00050005,0x00000114,0x53765566,0x6c706d61, + 0x00000065,0x00060005,0x00000115,0x78655469,0x65727574,0x657a6953,0x00000000,0x00090005, + 0x0000011b,0x4d746547,0x6f69746f,0x6365566e,0x28726f74,0x3b326976,0x3b326676,0x00000000, + 0x00050005,0x00000119,0x48785069,0x736f5072,0x00000000,0x00040005,0x0000011a,0x55724866, + 0x00000076,0x001e0005,0x00000120,0x706d6f43,0x52657475,0x6f727065,0x7463656a,0x56556465, + 0x74732873,0x74637572,0x6363412d,0x6c756d75,0x6f697461,0x7361506e,0x6d6f4373,0x506e6f6d, + 0x6d617261,0x69762d73,0x66762d32,0x66762d32,0x66762d32,0x66762d32,0x66762d32,0x31662d32, + 0x2d31662d,0x662d3166,0x31662d31,0x2d31662d,0x622d3166,0x31622d31,0x00003b31,0x00040005, + 0x0000011f,0x61726170,0x0000736d,0x00350005,0x00000124,0x72706552,0x63656a6f,0x73694874, + 0x79726f74,0x6f6c6f43,0x74732872,0x74637572,0x6363412d,0x6c756d75,0x6f697461,0x7361506e, + 0x6d6f4373,0x506e6f6d,0x6d617261,0x69762d73,0x66762d32,0x66762d32,0x66762d32,0x66762d32, + 0x66762d32,0x31662d32,0x2d31662d,0x662d3166,0x31662d31,0x2d31662d,0x622d3166,0x31622d31, + 0x74733b31,0x74637572,0x6363412d,0x6c756d75,0x6f697461,0x7361506e,0x74614473,0x74732d61, + 0x74637572,0x6365522d,0x69666974,0x69746163,0x6f426e6f,0x66762d78,0x66762d33,0x66762d33, + 0x66762d33,0x31662d33,0x66762d31,0x31662d33,0x3366762d,0x2d31662d,0x662d3166,0x003b3131, + 0x00040005,0x00000122,0x61726170,0x0000736d,0x00040005,0x00000123,0x61746164,0x00000000, + 0x00330005,0x00000128,0x75636341,0x616c756d,0x73286574,0x63757274,0x63412d74,0x756d7563, + 0x6974616c,0x61506e6f,0x6f437373,0x6e6f6d6d,0x61726150,0x762d736d,0x762d3269,0x762d3266, + 0x762d3266,0x762d3266,0x762d3266,0x662d3266,0x31662d31,0x2d31662d,0x662d3166,0x31662d31, + 0x2d31662d,0x622d3162,0x733b3131,0x63757274,0x63412d74,0x756d7563,0x6974616c,0x61506e6f, + 0x61447373,0x732d6174,0x63757274,0x65522d74,0x66697463,0x74616369,0x426e6f69,0x762d786f, + 0x762d3366,0x762d3366,0x762d3366,0x662d3366,0x762d3131,0x662d3366,0x66762d31,0x31662d33, + 0x2d31662d,0x3b313166,0x00000000,0x00040005,0x00000126,0x61726170,0x0000736d,0x00040005, + 0x00000127,0x61746164,0x00000000,0x00340005,0x0000012c,0x74636552,0x48796669,0x6f747369, + 0x73287972,0x63757274,0x63412d74,0x756d7563,0x6974616c,0x61506e6f,0x6f437373,0x6e6f6d6d, + 0x61726150,0x762d736d,0x762d3269,0x762d3266,0x762d3266,0x762d3266,0x762d3266,0x662d3266, + 0x31662d31,0x2d31662d,0x662d3166,0x31662d31,0x2d31662d,0x622d3162,0x733b3131,0x63757274, + 0x63412d74,0x756d7563,0x6974616c,0x61506e6f,0x61447373,0x732d6174,0x63757274,0x65522d74, + 0x66697463,0x74616369,0x426e6f69,0x762d786f,0x762d3366,0x762d3366,0x762d3366,0x662d3366, + 0x762d3131,0x662d3366,0x66762d31,0x31662d33,0x2d31662d,0x3b313166,0x00000000,0x00040005, + 0x0000012a,0x61726170,0x0000736d,0x00040005,0x0000012b,0x61746164,0x00000000,0x00340005, + 0x00000131,0x61647055,0x6f4c6574,0x74536b63,0x73757461,0x72747328,0x2d746375,0x75636341, + 0x616c756d,0x6e6f6974,0x73736150,0x6d6d6f43,0x61506e6f,0x736d6172,0x3269762d,0x3266762d, + 0x3266762d,0x3266762d,0x3266762d,0x3266762d,0x2d31662d,0x662d3166,0x31662d31,0x2d31662d, + 0x662d3166,0x31622d31,0x3131622d,0x7274733b,0x2d746375,0x75636341,0x616c756d,0x6e6f6974, + 0x73736150,0x61746144,0x7274732d,0x2d746375,0x74636552,0x63696669,0x6f697461,0x786f426e, + 0x3366762d,0x3366762d,0x3366762d,0x3366762d,0x3131662d,0x3366762d,0x2d31662d,0x2d336676, + 0x662d3166,0x31662d31,0x00003b31,0x00040005,0x0000012f,0x61726170,0x0000736d,0x00040005, + 0x00000130,0x61746164,0x00000000,0x00370005,0x00000135,0x706d6f43,0x42657475,0x41657361, + 0x6d756363,0x74616c75,0x576e6f69,0x68676965,0x74732874,0x74637572,0x6363412d,0x6c756d75, + 0x6f697461,0x7361506e,0x6d6f4373,0x506e6f6d,0x6d617261,0x69762d73,0x66762d32,0x66762d32, + 0x66762d32,0x66762d32,0x66762d32,0x31662d32,0x2d31662d,0x662d3166,0x31662d31,0x2d31662d, + 0x622d3166,0x31622d31,0x74733b31,0x74637572,0x6363412d,0x6c756d75,0x6f697461,0x7361506e, + 0x74614473,0x74732d61,0x74637572,0x6365522d,0x69666974,0x69746163,0x6f426e6f,0x66762d78, + 0x66762d33,0x66762d33,0x66762d33,0x31662d33,0x66762d31,0x31662d33,0x3366762d,0x2d31662d, + 0x662d3166,0x003b3131,0x00040005,0x00000133,0x61726170,0x0000736d,0x00040005,0x00000134, + 0x61746164,0x00000000,0x00340005,0x0000013b,0x74696e49,0x73736150,0x61746144,0x32697628, + 0x7274733b,0x2d746375,0x75636341,0x616c756d,0x6e6f6974,0x73736150,0x6d6d6f43,0x61506e6f, + 0x736d6172,0x3269762d,0x3266762d,0x3266762d,0x3266762d,0x3266762d,0x3266762d,0x2d31662d, + 0x662d3166,0x31662d31,0x2d31662d,0x662d3166,0x31622d31,0x3131622d,0x7274733b,0x2d746375, + 0x75636341,0x616c756d,0x6e6f6974,0x73736150,0x61746144,0x7274732d,0x2d746375,0x74636552, + 0x63696669,0x6f697461,0x786f426e,0x3366762d,0x3366762d,0x3366762d,0x3366762d,0x3131662d, + 0x3366762d,0x2d31662d,0x2d336676,0x662d3166,0x31662d31,0x00003b31,0x00050005,0x00000138, + 0x48785069,0x736f5072,0x00000000,0x00040005,0x00000139,0x61726170,0x0000736d,0x00040005, + 0x0000013a,0x61746164,0x00000000,0x00060005,0x0000013f,0x75636341,0x616c756d,0x76286574, + 0x003b3269,0x00050005,0x0000013e,0x48785069,0x736f5072,0x00000000,0x00070005,0x0000018f, + 0x53466263,0x50553352,0x4c414353,0x745f5245,0x00000000,0x00060006,0x0000018f,0x00000000, + 0x6e655269,0x53726564,0x00657a69,0x000a0006,0x0000018f,0x00000001,0x65725069,0x756f6976, + 0x61724673,0x6552656d,0x7265646e,0x657a6953,0x00000000,0x00070006,0x0000018f,0x00000002, + 0x73705569,0x656c6163,0x657a6953,0x00000000,0x000a0006,0x0000018f,0x00000003,0x65725069, + 0x756f6976,0x61724673,0x7055656d,0x6c616373,0x7a695365,0x00000065,0x00070006,0x0000018f, + 0x00000004,0x78614d69,0x646e6552,0x69537265,0x0000657a,0x00070006,0x0000018f,0x00000005, + 0x78614d69,0x63737055,0x53656c61,0x00657a69,0x00080006,0x0000018f,0x00000006,0x76654466, + 0x54656369,0x6569566f,0x70654477,0x00006874,0x00050006,0x0000018f,0x00000007,0x74694a66, + 0x00726574,0x00090006,0x0000018f,0x00000008,0x65725066,0x756f6976,0x61724673,0x694a656d, + 0x72657474,0x00000000,0x00080006,0x0000018f,0x00000009,0x746f4d66,0x566e6f69,0x6f746365, + 0x61635372,0x0000656c,0x00080006,0x0000018f,0x0000000a,0x776f4466,0x6163736e,0x6146656c, + 0x726f7463,0x00000000,0x000b0006,0x0000018f,0x0000000b,0x746f4d66,0x566e6f69,0x6f746365, + 0x74694a72,0x43726574,0x65636e61,0x74616c6c,0x006e6f69,0x00060006,0x0000018f,0x0000000c, + 0x6e615466,0x666c6148,0x00564f46,0x00090006,0x0000018f,0x0000000d,0x74694a66,0x53726574, + 0x65757165,0x4c65636e,0x74676e65,0x00000068,0x00060006,0x0000018f,0x0000000e,0x6c654466, + 0x69546174,0x0000656d,0x00080006,0x0000018f,0x0000000f,0x6c654466,0x72506174,0x70784565, + 0x7275736f,0x00000065,0x000a0006,0x0000018f,0x00000010,0x65695666,0x61705377,0x6f546563, + 0x6574654d,0x61467372,0x726f7463,0x00000000,0x00060006,0x0000018f,0x00000011,0x61724666, + 0x6e49656d,0x00786564,0x00070006,0x0000018f,0x00000012,0x6c655666,0x7469636f,0x63614679, + 0x00726f74,0x00080006,0x0000018f,0x00000013,0x61655266,0x76697463,0x73656e65,0x61635373, + 0x0000656c,0x00080006,0x0000018f,0x00000014,0x61685366,0x676e6964,0x6e616843,0x63536567, + 0x00656c61,0x000a0006,0x0000018f,0x00000015,0x63634166,0x6c756d75,0x6f697461,0x6464416e, + 0x65506465,0x61724672,0x0000656d,0x000b0006,0x0000018f,0x00000016,0x6e694d66,0x6f736944, + 0x756c6363,0x6e6f6973,0x75636341,0x616c756d,0x6e6f6974,0x00000000,0x00060005,0x00000191, + 0x53466263,0x70553352,0x6c616373,0x00007265,0x00080005,0x000001c9,0x6e695f72,0x5f747570, + 0x6f6c6f63,0x696a5f72,0x72657474,0x00006465,0x00090005,0x000001d0,0x6e695f72,0x6e726574, + 0x755f6c61,0x61637370,0x5f64656c,0x6f6c6f63,0x00000072,0x00090005,0x000001d8,0x695f7772, + 0x7265746e,0x5f6c616e,0x63737075,0x64656c61,0x6c6f635f,0x0000726f,0x00080005,0x000001dc, + 0x61665f72,0x65687472,0x645f7473,0x68747065,0x70696d5f,0x00000031,0x00060005,0x000001e4, + 0x694c5f73,0x7261656e,0x6d616c43,0x00000070,0x00070005,0x000001ef,0x756c5f72,0x695f616d, + 0x6174736e,0x696c6962,0x00007974,0x00060005,0x000001fa,0x6e5f7772,0x6c5f7765,0x736b636f, + 0x00000000,0x00090005,0x00000205,0x69645f72,0x6574616c,0x6f6d5f64,0x6e6f6974,0x6365765f, + 0x73726f74,0x00000000,0x00050005,0x0000020c,0x6f707865,0x65727573,0x00000000,0x00070005, + 0x0000020d,0x6e695f72,0x5f747570,0x6f707865,0x65727573,0x00000000,0x00090005,0x00000219, + 0x69645f72,0x6574616c,0x65725f64,0x69746361,0x6d5f6576,0x736b7361,0x00000000,0x00060005, + 0x0000022b,0x67696577,0x64657468,0x706d6153,0x0000656c,0x00040005,0x00000237,0x61726170, + 0x0000006d,0x00040005,0x0000023c,0x61726170,0x0000006d,0x00040005,0x0000023f,0x61726170, + 0x0000006d,0x00040005,0x00000242,0x61726170,0x0000006d,0x00040005,0x00000245,0x61726170, + 0x0000006d,0x00060005,0x00000248,0x67696577,0x64657468,0x706d6153,0x0000656c,0x00040005, + 0x00000274,0x44647473,0x00007665,0x00040005,0x00000281,0x62675266,0x00000000,0x00040005, + 0x0000029d,0x6f435966,0x00006743,0x00040005,0x000002c3,0x61726170,0x0000006d,0x00040005, + 0x000002c4,0x61726170,0x0000006d,0x00040005,0x000002c8,0x61726170,0x0000006d,0x00040005, + 0x000002cb,0x61726170,0x0000006d,0x00040005,0x000002cf,0x61726170,0x0000006d,0x00040005, + 0x000002d0,0x61726170,0x0000006d,0x00040005,0x000002d9,0x61726170,0x0000006d,0x00040005, + 0x000002dc,0x61726170,0x0000006d,0x00040005,0x000002e0,0x61726170,0x0000006d,0x00040005, + 0x000002e3,0x61726170,0x0000006d,0x00040005,0x000002e6,0x61726170,0x0000006d,0x00040005, + 0x000002e7,0x61726170,0x0000006d,0x00040005,0x00000304,0x75736572,0x0000746c,0x00040005, + 0x0000030b,0x61726170,0x0000006d,0x00040005,0x0000030e,0x61726170,0x0000006d,0x00040005, + 0x00000310,0x61726170,0x0000006d,0x00040005,0x00000311,0x61726170,0x0000006d,0x00040005, + 0x00000317,0x61726170,0x0000006d,0x00040005,0x0000031a,0x61726170,0x0000006d,0x00040005, + 0x0000031c,0x61726170,0x0000006d,0x00040005,0x0000031d,0x61726170,0x0000006d,0x00060005, + 0x00000323,0x6d615366,0x4c656c70,0x7461636f,0x006e6f69,0x00070005,0x00000328,0x616c4366, + 0x6465706d,0x61636f4c,0x6e6f6974,0x00000000,0x00040005,0x0000032d,0x61726170,0x0000006d, + 0x00040005,0x0000032f,0x61726170,0x0000006d,0x00040005,0x00000331,0x61726170,0x0000006d, + 0x00040005,0x00000332,0x61726170,0x0000006d,0x00050005,0x00000334,0x616c4366,0x6465706d, + 0x00007655,0x00040005,0x00000362,0x61726170,0x0000006d,0x00040005,0x00000363,0x61726170, + 0x0000006d,0x00040005,0x00000365,0x61726170,0x0000006d,0x00030005,0x0000036a,0x00000061, + 0x00030005,0x0000036f,0x00000062,0x00040005,0x00000381,0x61726170,0x0000006d,0x00040005, + 0x00000383,0x61726170,0x0000006d,0x00040005,0x00000385,0x61726170,0x0000006d,0x00050005, + 0x0000038a,0x69655766,0x30746867,0x00000000,0x00040005,0x0000038e,0x61726170,0x0000006d, + 0x00050005,0x00000390,0x69655766,0x31746867,0x00000000,0x00040005,0x00000394,0x61726170, + 0x0000006d,0x00050005,0x00000396,0x69655766,0x32746867,0x00000000,0x00040005,0x00000399, + 0x61726170,0x0000006d,0x00050005,0x0000039b,0x69655766,0x33746867,0x00000000,0x00040005, + 0x0000039e,0x61726170,0x0000006d,0x00050005,0x000003ba,0x6c6f4366,0x3058726f,0x00000000, + 0x00040005,0x000003bb,0x61726170,0x0000006d,0x00040005,0x000003be,0x61726170,0x0000006d, + 0x00040005,0x000003c1,0x61726170,0x0000006d,0x00040005,0x000003c4,0x61726170,0x0000006d, + 0x00040005,0x000003c7,0x61726170,0x0000006d,0x00050005,0x000003cb,0x6c6f4366,0x3158726f, + 0x00000000,0x00040005,0x000003ce,0x61726170,0x0000006d,0x00040005,0x000003d1,0x61726170, + 0x0000006d,0x00040005,0x000003d4,0x61726170,0x0000006d,0x00040005,0x000003d7,0x61726170, + 0x0000006d,0x00040005,0x000003da,0x61726170,0x0000006d,0x00050005,0x000003de,0x6c6f4366, + 0x3258726f,0x00000000,0x00040005,0x000003e2,0x61726170,0x0000006d,0x00040005,0x000003e5, + 0x61726170,0x0000006d,0x00040005,0x000003e8,0x61726170,0x0000006d,0x00040005,0x000003eb, + 0x61726170,0x0000006d,0x00040005,0x000003ee,0x61726170,0x0000006d,0x00050005,0x000003f2, + 0x6c6f4366,0x3358726f,0x00000000,0x00040005,0x000003f5,0x61726170,0x0000006d,0x00040005, + 0x000003f8,0x61726170,0x0000006d,0x00040005,0x000003fb,0x61726170,0x0000006d,0x00040005, + 0x000003fe,0x61726170,0x0000006d,0x00040005,0x00000401,0x61726170,0x0000006d,0x00050005, + 0x00000405,0x6c6f4366,0x5958726f,0x00000000,0x00040005,0x00000406,0x61726170,0x0000006d, + 0x00040005,0x00000408,0x61726170,0x0000006d,0x00040005,0x0000040a,0x61726170,0x0000006d, + 0x00040005,0x0000040c,0x61726170,0x0000006d,0x00040005,0x0000040e,0x61726170,0x0000006d, + 0x00070005,0x00000415,0x72654466,0x69676e69,0x6153676e,0x656c706d,0x00000073,0x00060005, + 0x0000041f,0x72654466,0x69676e69,0x694d676e,0x0000006e,0x00060005,0x00000422,0x72654466, + 0x69676e69,0x614d676e,0x00000078,0x00060005,0x00000425,0x6d615369,0x49656c70,0x7865646e, + 0x00000000,0x00040005,0x0000042e,0x61726170,0x0000006d,0x00040005,0x00000430,0x61726170, + 0x0000006d,0x00040005,0x00000435,0x61726170,0x0000006d,0x00040005,0x00000437,0x61726170, + 0x0000006d,0x00040005,0x00000444,0x75736572,0x0000746c,0x00040005,0x0000044b,0x61726170, + 0x0000006d,0x00040005,0x0000044e,0x61726170,0x0000006d,0x00040005,0x00000450,0x61726170, + 0x0000006d,0x00040005,0x00000451,0x61726170,0x0000006d,0x00040005,0x00000457,0x61726170, + 0x0000006d,0x00040005,0x0000045a,0x61726170,0x0000006d,0x00040005,0x0000045c,0x61726170, + 0x0000006d,0x00040005,0x0000045d,0x61726170,0x0000006d,0x00080005,0x00000469,0x63725366, + 0x706d6153,0x664f656c,0x74657366,0x73616942,0x00006465,0x00060005,0x0000046e,0x6d615366, + 0x57656c70,0x68676965,0x00000074,0x00040005,0x00000472,0x61726170,0x0000006d,0x00060005, + 0x00000477,0x72654b66,0x536c656e,0x42657a69,0x00736169,0x00040005,0x00000480,0x61726170, + 0x0000006d,0x00040005,0x00000481,0x61726170,0x0000006d,0x00040005,0x00000486,0x62675266, + 0x00000000,0x00040005,0x00000488,0x61726170,0x0000006d,0x00040005,0x0000048b,0x61726170, + 0x0000006d,0x00040005,0x0000048c,0x61726170,0x0000006d,0x00060005,0x00000490,0x65725066, + 0x65726170,0x6f435964,0x00006743,0x00040005,0x00000491,0x61726170,0x0000006d,0x00060005, + 0x00000497,0x74734466,0x7074754f,0x6f507475,0x00000073,0x00060005,0x0000049b,0x63725366, + 0x7074754f,0x6f507475,0x00000073,0x00060005,0x0000049f,0x63725369,0x75706e49,0x736f5074, + 0x00000000,0x00070005,0x000004a3,0x63725366,0x696a6e55,0x72657474,0x6f506465,0x00000073, + 0x00070005,0x000004a9,0x73614266,0x6d615365,0x4f656c70,0x65736666,0x00000074,0x00050005, + 0x000004ad,0x7366666f,0x4c547465,0x00000000,0x00050005,0x000004be,0x696c4662,0x776f5270, + 0x00000000,0x00050005,0x000004c4,0x696c4662,0x6c6f4370,0x00000000,0x00050005,0x000004ca, + 0x66664f66,0x54746573,0x0000004c,0x00070005,0x000004cd,0x49734962,0x6974696e,0x61536c61, + 0x656c706d,0x00000000,0x00060005,0x000004d0,0x6d615369,0x49656c70,0x7865646e,0x00000000, + 0x00030005,0x000004d1,0x00776f72,0x00030005,0x000004d9,0x006c6f63,0x00060005,0x000004e1, + 0x6d615369,0x43656c70,0x6f526c6f,0x00000077,0x00060005,0x000004f5,0x63725369,0x706d6153, + 0x6f50656c,0x00000073,0x00060005,0x000004fb,0x6d615369,0x43656c70,0x64726f6f,0x00000000, + 0x00040005,0x000004fd,0x61726170,0x0000006d,0x00040005,0x000004ff,0x61726170,0x0000006d, + 0x00040005,0x00000500,0x61726170,0x0000006d,0x00050005,0x00000505,0x6d615366,0x73656c70, + 0x00000000,0x00040005,0x00000507,0x61726170,0x0000006d,0x00040005,0x0000051d,0x61726170, + 0x0000006d,0x00040005,0x00000521,0x61726170,0x0000006d,0x00040005,0x00000523,0x61726170, + 0x0000006d,0x00060005,0x00000528,0x72654b66,0x426c656e,0x4d736169,0x00007861,0x00040005, + 0x00000529,0x61726170,0x0000006d,0x00060005,0x0000052d,0x72654b66,0x426c656e,0x4d736169, + 0x00006e69,0x00040005,0x00000532,0x61726170,0x0000006d,0x00040005,0x00000533,0x61726170, + 0x0000006d,0x00070005,0x00000535,0x72654b66,0x426c656e,0x57736169,0x68676965,0x00000074, + 0x00040005,0x0000053f,0x61726170,0x0000006d,0x00040005,0x00000541,0x61726170,0x0000006d, + 0x00040005,0x00000542,0x61726170,0x0000006d,0x00040005,0x00000544,0x61726170,0x0000006d, + 0x00040005,0x00000545,0x61726170,0x0000006d,0x00050005,0x00000547,0x72654b66,0x426c656e, + 0x00736169,0x00040005,0x00000548,0x61726170,0x0000006d,0x00040005,0x0000054a,0x61726170, + 0x0000006d,0x00040005,0x0000054c,0x61726170,0x0000006d,0x00030005,0x0000054f,0x00776f72, + 0x00030005,0x00000557,0x006c6f63,0x00060005,0x0000055f,0x706d6173,0x6f43656c,0x776f526c, + 0x00000000,0x00040005,0x00000573,0x66664f66,0x00746573,0x00070005,0x00000578,0x63725366, + 0x706d6153,0x664f656c,0x74657366,0x00000000,0x00060005,0x0000057c,0x63725369,0x706d6153, + 0x6f50656c,0x00000073,0x00060005,0x00000582,0x536e4f66,0x65657263,0x6361466e,0x00726f74, + 0x00040005,0x00000585,0x61726170,0x0000006d,0x00040005,0x00000586,0x61726170,0x0000006d, + 0x00060005,0x0000058d,0x6d615366,0x57656c70,0x68676965,0x00000074,0x00040005,0x0000058f, + 0x61726170,0x0000006d,0x00040005,0x00000591,0x61726170,0x0000006d,0x00070005,0x000005a3, + 0x63725366,0x706d6153,0x664f656c,0x74657366,0x00007153,0x00070005,0x000005a7,0x786f4266, + 0x706d6153,0x6557656c,0x74686769,0x00000000,0x00060005,0x000005ae,0x696e4962,0x6c616974, + 0x706d6153,0x0000656c,0x00040005,0x000005b8,0x61726170,0x0000006d,0x00040005,0x000005ba, + 0x61726170,0x0000006d,0x00040005,0x000005c6,0x61726170,0x0000006d,0x00040005,0x000005e5, + 0x61726170,0x0000006d,0x00040005,0x000005e8,0x61726170,0x0000006d,0x00040005,0x000005f1, + 0x61726170,0x0000006d,0x00040005,0x000005f5,0x61726170,0x0000006d,0x00040005,0x000005f7, + 0x61726170,0x0000006d,0x00040005,0x000005fc,0x61726170,0x0000006d,0x00040005,0x00000601, + 0x706d6153,0x0073656c,0x00040005,0x00000603,0x61726170,0x0000006d,0x00040005,0x00000605, + 0x61726170,0x0000006d,0x00040005,0x00000606,0x61726170,0x0000006d,0x00040005,0x00000609, + 0x61726170,0x0000006d,0x00040005,0x0000060d,0x61726170,0x0000006d,0x00040005,0x0000060f, + 0x61726170,0x0000006d,0x00040005,0x00000610,0x61726170,0x0000006d,0x00040005,0x00000613, + 0x61726170,0x0000006d,0x00040005,0x00000617,0x61726170,0x0000006d,0x00040005,0x00000619, + 0x61726170,0x0000006d,0x00040005,0x0000061a,0x61726170,0x0000006d,0x00040005,0x0000061d, + 0x61726170,0x0000006d,0x00040005,0x00000621,0x61726170,0x0000006d,0x00040005,0x00000623, + 0x61726170,0x0000006d,0x00040005,0x00000624,0x61726170,0x0000006d,0x00040005,0x00000627, + 0x61726170,0x0000006d,0x00040005,0x0000062b,0x61726170,0x0000006d,0x00040005,0x0000062d, + 0x61726170,0x0000006d,0x00040005,0x0000062e,0x61726170,0x0000006d,0x00040005,0x00000631, + 0x61726170,0x0000006d,0x00040005,0x00000634,0x61726170,0x0000006d,0x00040005,0x00000636, + 0x61726170,0x0000006d,0x00040005,0x00000637,0x61726170,0x0000006d,0x00040005,0x0000063a, + 0x61726170,0x0000006d,0x00040005,0x0000063e,0x61726170,0x0000006d,0x00040005,0x00000640, + 0x61726170,0x0000006d,0x00040005,0x00000641,0x61726170,0x0000006d,0x00040005,0x00000644, + 0x61726170,0x0000006d,0x00040005,0x00000648,0x61726170,0x0000006d,0x00040005,0x0000064a, + 0x61726170,0x0000006d,0x00040005,0x0000064b,0x61726170,0x0000006d,0x00040005,0x0000064e, + 0x61726170,0x0000006d,0x00040005,0x00000652,0x61726170,0x0000006d,0x00040005,0x00000654, + 0x61726170,0x0000006d,0x00040005,0x00000655,0x61726170,0x0000006d,0x00040005,0x00000658, + 0x61726170,0x0000006d,0x00040005,0x0000065c,0x61726170,0x0000006d,0x00040005,0x0000065e, + 0x61726170,0x0000006d,0x00040005,0x0000065f,0x61726170,0x0000006d,0x00040005,0x00000662, + 0x61726170,0x0000006d,0x00040005,0x00000666,0x61726170,0x0000006d,0x00040005,0x00000668, + 0x61726170,0x0000006d,0x00040005,0x00000669,0x61726170,0x0000006d,0x00040005,0x0000066c, + 0x61726170,0x0000006d,0x00040005,0x00000670,0x61726170,0x0000006d,0x00040005,0x00000672, + 0x61726170,0x0000006d,0x00040005,0x00000673,0x61726170,0x0000006d,0x00040005,0x00000676, + 0x61726170,0x0000006d,0x00040005,0x0000067a,0x61726170,0x0000006d,0x00040005,0x0000067c, + 0x61726170,0x0000006d,0x00040005,0x0000067d,0x61726170,0x0000006d,0x00040005,0x00000680, + 0x61726170,0x0000006d,0x00040005,0x00000684,0x61726170,0x0000006d,0x00040005,0x00000686, + 0x61726170,0x0000006d,0x00040005,0x00000687,0x61726170,0x0000006d,0x00040005,0x0000068a, + 0x61726170,0x0000006d,0x00040005,0x0000068e,0x61726170,0x0000006d,0x00040005,0x00000690, + 0x61726170,0x0000006d,0x00040005,0x00000691,0x61726170,0x0000006d,0x00040005,0x00000694, + 0x61726170,0x0000006d,0x00040005,0x00000698,0x61726170,0x0000006d,0x00040005,0x0000069a, + 0x61726170,0x0000006d,0x00040005,0x0000069b,0x61726170,0x0000006d,0x00040005,0x0000069e, + 0x61726170,0x0000006d,0x00050005,0x000006a4,0x53785066,0x6c706d61,0x00000065,0x00040005, + 0x000006aa,0x46785066,0x00636172,0x00040005,0x000006ab,0x61726170,0x0000006d,0x00040005, + 0x000006b2,0x61726170,0x0000006d,0x00040005,0x000006b3,0x61726170,0x0000006d,0x00040005, + 0x000006b7,0x61726170,0x0000006d,0x00040005,0x000006b8,0x61726170,0x0000006d,0x00040005, + 0x000006bf,0x61726170,0x0000006d,0x00040005,0x000006c0,0x61726170,0x0000006d,0x00040005, + 0x000006c4,0x61726170,0x0000006d,0x00040005,0x000006c5,0x61726170,0x0000006d,0x00050005, + 0x000006c8,0x53785069,0x6c706d61,0x00000065,0x00050005,0x000006cc,0x6c6f4366,0x5958726f, + 0x00000000,0x00040005,0x000006cd,0x61726170,0x0000006d,0x00040005,0x000006cf,0x61726170, + 0x0000006d,0x00040005,0x000006d2,0x61726170,0x0000006d,0x00040005,0x000006d3,0x61726170, + 0x0000006d,0x00080005,0x000006d9,0x6c694466,0x64657461,0x69746f4d,0x65566e6f,0x726f7463, + 0x00000000,0x00040005,0x000006df,0x61726170,0x0000006d,0x00040005,0x000006ea,0x61726170, + 0x0000006d,0x00070005,0x000006ef,0x70655266,0x656a6f72,0x64657463,0x74736948,0x0079726f, + 0x00040005,0x000006f1,0x61726170,0x0000006d,0x00040005,0x000006f3,0x61726170,0x0000006d, + 0x00040005,0x00000702,0x61726170,0x0000006d,0x00040005,0x00000718,0x61726170,0x0000006d, + 0x00040005,0x00000719,0x61726170,0x0000006d,0x00040005,0x0000071c,0x61726170,0x0000006d, + 0x00040005,0x00000720,0x61726170,0x0000006d,0x00040005,0x00000722,0x61726170,0x0000006d, + 0x00040005,0x00000725,0x61726170,0x0000006d,0x00040005,0x00000729,0x61726170,0x0000006d, + 0x00040005,0x0000072b,0x61726170,0x0000006d,0x00040005,0x0000072e,0x706c4166,0x00006168, + 0x00040005,0x00000734,0x61726170,0x0000006d,0x00040005,0x00000736,0x61726170,0x0000006d, + 0x00040005,0x00000739,0x61726170,0x0000006d,0x00040005,0x0000073c,0x61726170,0x0000006d, + 0x00040005,0x00000740,0x61726170,0x0000006d,0x00040005,0x00000745,0x61726170,0x0000006d, + 0x00070005,0x0000074a,0x566b3466,0x636f6c65,0x46797469,0x6f746361,0x00000072,0x00040005, + 0x0000074e,0x61726170,0x0000006d,0x00060005,0x00000750,0x73694466,0x636e6174,0x63614665, + 0x00726f74,0x00040005,0x00000755,0x61726170,0x0000006d,0x00070005,0x00000757,0x63634166, + 0x6c756d75,0x6f697461,0x6361466e,0x00726f74,0x00060005,0x0000075a,0x61655266,0x76697463, + 0x63614665,0x00726f74,0x00040005,0x0000075b,0x61726170,0x0000006d,0x00040005,0x0000075d, + 0x61726170,0x0000006d,0x00080005,0x0000075f,0x61685366,0x676e6964,0x6e616843,0x61466567, + 0x726f7463,0x00000000,0x00050005,0x00000761,0x786f4266,0x6c616353,0x00005465,0x00040005, + 0x00000762,0x61726170,0x0000006d,0x00040005,0x00000764,0x61726170,0x0000006d,0x00040005, + 0x00000767,0x61726170,0x0000006d,0x00040005,0x00000769,0x61726170,0x0000006d,0x00040005, + 0x0000076b,0x61726170,0x0000006d,0x00040005,0x0000076d,0x61726170,0x0000006d,0x00040005, + 0x0000076f,0x61726170,0x0000006d,0x00040005,0x00000771,0x61726170,0x0000006d,0x00050005, + 0x00000773,0x786f4266,0x6c616353,0x00000065,0x00040005,0x00000775,0x61726170,0x0000006d, + 0x00040005,0x00000776,0x61726170,0x0000006d,0x00040005,0x00000777,0x61726170,0x0000006d, + 0x00060005,0x0000077a,0x61635366,0x4264656c,0x6556786f,0x00000063,0x00080005,0x00000782, + 0x616c4366,0x6465706d,0x6c616353,0x6f426465,0x63655678,0x00000000,0x00040005,0x00000785, + 0x61726170,0x0000006d,0x00040005,0x00000787,0x61726170,0x0000006d,0x00090005,0x00000789, + 0x61725466,0x6f66736e,0x64656d72,0x74736948,0x4379726f,0x726f6c6f,0x00000000,0x00080005, + 0x00000796,0x616c4366,0x6465706d,0x74736948,0x4379726f,0x726f6c6f,0x00000000,0x00090005, + 0x00000799,0x6e694666,0x6c436c61,0x65706d61,0x73694864,0x79726f74,0x6f6c6f43,0x00000072, + 0x00080005,0x000007a0,0x73694866,0x79726f74,0x746e6f43,0x75626972,0x6e6f6974,0x00000000, + 0x00040005,0x000007a1,0x61726170,0x0000006d,0x00040005,0x000007a3,0x61726170,0x0000006d, + 0x00040005,0x000007ac,0x61726170,0x0000006d,0x00040005,0x000007af,0x61726170,0x0000006d, + 0x00040005,0x000007b1,0x61726170,0x0000006d,0x00040005,0x000007b4,0x61726170,0x0000006d, + 0x00080005,0x000007c0,0x66694c66,0x6d697465,0x63654465,0x73616572,0x63614665,0x00726f74, + 0x00040005,0x000007c1,0x61726170,0x0000006d,0x00040005,0x000007c5,0x61726170,0x0000006d, + 0x00040005,0x000007c8,0x61726170,0x0000006d,0x00040005,0x000007cc,0x61726170,0x0000006d, + 0x00040005,0x000007cd,0x61726170,0x0000006d,0x00040005,0x000007d4,0x61726170,0x0000006d, + 0x00040005,0x000007d5,0x61726170,0x0000006d,0x00040005,0x000007db,0x61726170,0x0000006d, + 0x00040005,0x000007de,0x61726170,0x0000006d,0x00070005,0x000007e1,0x77654e66,0x6b636f4c, + 0x65746e49,0x7469736e,0x00000079,0x00040005,0x000007e2,0x61726170,0x0000006d,0x00040005, + 0x000007e9,0x61726170,0x0000006d,0x00040005,0x000007ea,0x61726170,0x0000006d,0x00040005, + 0x000007f4,0x61726170,0x0000006d,0x00040005,0x000007f5,0x61726170,0x0000006d,0x00040005, + 0x000007f7,0x61726170,0x0000006d,0x00040005,0x000007f8,0x61726170,0x0000006d,0x00070005, + 0x000007fb,0x66694c66,0x6d697465,0x63654465,0x73616572,0x00000065,0x00040005,0x00000806, + 0x61726170,0x0000006d,0x00040005,0x00000807,0x61726170,0x0000006d,0x00080005,0x0000080a, + 0x74734566,0x74616d69,0x76556465,0x7478654e,0x6d617246,0x00000065,0x00040005,0x00000810, + 0x61726170,0x0000006d,0x00070005,0x0000081a,0x73614266,0x63634165,0x6c756d75,0x6f697461, + 0x0000006e,0x00040005,0x00000821,0x61726170,0x0000006d,0x00040005,0x00000822,0x61726170, + 0x0000006d,0x00040005,0x00000824,0x61726170,0x0000006d,0x00040005,0x00000826,0x61726170, + 0x0000006d,0x00040005,0x00000828,0x61726170,0x0000006d,0x00040005,0x00000829,0x61726170, + 0x0000006d,0x00040005,0x0000082b,0x61726170,0x0000006d,0x00040005,0x0000082d,0x61726170, + 0x0000006d,0x00040005,0x00000833,0x55724866,0x00000076,0x00040005,0x00000846,0x61726170, + 0x0000006d,0x00040005,0x00000849,0x61726170,0x0000006d,0x00040005,0x0000084a,0x61726170, + 0x0000006d,0x00040005,0x0000084d,0x61726170,0x0000006d,0x00040005,0x0000084f,0x61726170, + 0x0000006d,0x00040005,0x00000853,0x61726170,0x0000006d,0x00040005,0x00000858,0x61726170, + 0x0000006d,0x00080005,0x0000085c,0x6d754c66,0x736e4961,0x69626174,0x7974696c,0x485f7655, + 0x00000057,0x00040005,0x0000085f,0x61726170,0x0000006d,0x00040005,0x00000861,0x61726170, + 0x0000006d,0x00040005,0x00000862,0x61726170,0x0000006d,0x00040005,0x00000864,0x61726170, + 0x0000006d,0x00070005,0x00000868,0x72614666,0x73656874,0x70654474,0x76556874,0x00000000, + 0x00040005,0x0000086d,0x61726170,0x0000006d,0x00040005,0x00000870,0x61726170,0x0000006d, + 0x00040005,0x00000871,0x61726170,0x0000006d,0x00040005,0x00000873,0x61726170,0x0000006d, + 0x00080005,0x00000881,0x6c694466,0x64657461,0x63616552,0x65766974,0x6b73614d,0x00000073, + 0x00040005,0x00000882,0x61726170,0x0000006d,0x00040005,0x00000886,0x61726170,0x0000006d, + 0x00040005,0x0000088b,0x61726170,0x0000006d,0x00040005,0x00000890,0x61726170,0x0000006d, + 0x00040005,0x00000895,0x61726170,0x0000006d,0x00040005,0x000008ab,0x61726170,0x0000736d, + 0x00040005,0x000008ac,0x61746164,0x00000000,0x00040005,0x000008ad,0x61726170,0x0000006d, + 0x00040005,0x000008af,0x61726170,0x0000006d,0x00040005,0x000008b1,0x61726170,0x0000006d, + 0x00040005,0x000008c1,0x61726170,0x0000006d,0x00040005,0x000008c5,0x61726170,0x0000006d, + 0x00040005,0x000008c7,0x61726170,0x0000006d,0x00040005,0x000008cc,0x61726170,0x0000006d, + 0x00040005,0x000008d1,0x61726170,0x0000006d,0x00040005,0x000008d6,0x61726170,0x0000006d, + 0x00040005,0x000008db,0x61726170,0x0000006d,0x00040005,0x000008e5,0x61726170,0x0000006d, + 0x00040005,0x000008e8,0x61726170,0x0000006d,0x00040005,0x000008f3,0x61726170,0x0000006d, + 0x00040005,0x000008f5,0x61726170,0x0000006d,0x00040005,0x000008f7,0x61726170,0x0000006d, + 0x00040005,0x000008f9,0x61726170,0x0000006d,0x00080005,0x000008fd,0x475f6c67,0x61626f6c, + 0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00040005,0x00000901,0x61726170,0x0000006d, + 0x00060005,0x00000905,0x6f505f73,0x43746e69,0x706d616c,0x00000000,0x00070005,0x00000908, + 0x755f7772,0x61637370,0x5f64656c,0x7074756f,0x00007475,0x00060005,0x00000909,0x75635f72, + 0x6e657272,0x756c5f74,0x0000616d,0x00060005,0x0000090a,0x616c5f72,0x6f7a636e,0x756c5f73, + 0x00000074,0x00030047,0x0000018f,0x00000002,0x00050048,0x0000018f,0x00000000,0x00000023, + 0x00000000,0x00050048,0x0000018f,0x00000001,0x00000023,0x00000008,0x00050048,0x0000018f, + 0x00000002,0x00000023,0x00000010,0x00050048,0x0000018f,0x00000003,0x00000023,0x00000018, + 0x00050048,0x0000018f,0x00000004,0x00000023,0x00000020,0x00050048,0x0000018f,0x00000005, + 0x00000023,0x00000028,0x00050048,0x0000018f,0x00000006,0x00000023,0x00000030,0x00050048, + 0x0000018f,0x00000007,0x00000023,0x00000040,0x00050048,0x0000018f,0x00000008,0x00000023, + 0x00000048,0x00050048,0x0000018f,0x00000009,0x00000023,0x00000050,0x00050048,0x0000018f, + 0x0000000a,0x00000023,0x00000058,0x00050048,0x0000018f,0x0000000b,0x00000023,0x00000060, + 0x00050048,0x0000018f,0x0000000c,0x00000023,0x00000068,0x00050048,0x0000018f,0x0000000d, + 0x00000023,0x0000006c,0x00050048,0x0000018f,0x0000000e,0x00000023,0x00000070,0x00050048, + 0x0000018f,0x0000000f,0x00000023,0x00000074,0x00050048,0x0000018f,0x00000010,0x00000023, + 0x00000078,0x00050048,0x0000018f,0x00000011,0x00000023,0x0000007c,0x00050048,0x0000018f, + 0x00000012,0x00000023,0x00000080,0x00050048,0x0000018f,0x00000013,0x00000023,0x00000084, + 0x00050048,0x0000018f,0x00000014,0x00000023,0x00000088,0x00050048,0x0000018f,0x00000015, + 0x00000023,0x0000008c,0x00050048,0x0000018f,0x00000016,0x00000023,0x00000090,0x00040047, + 0x00000191,0x00000021,0x0000000c,0x00040047,0x00000191,0x00000022,0x00000000,0x00040047, + 0x000001c9,0x00000021,0x00000008,0x00040047,0x000001c9,0x00000022,0x00000000,0x00040047, + 0x000001d0,0x00000021,0x00000003,0x00040047,0x000001d0,0x00000022,0x00000000,0x00030047, + 0x000001d8,0x00000019,0x00040047,0x000001d8,0x00000021,0x00000009,0x00040047,0x000001d8, + 0x00000022,0x00000000,0x00040047,0x000001dc,0x00000021,0x00000005,0x00040047,0x000001dc, + 0x00000022,0x00000000,0x00040047,0x000001e4,0x00000021,0x000003e9,0x00040047,0x000001e4, + 0x00000022,0x00000000,0x00040047,0x000001ef,0x00000021,0x00000007,0x00040047,0x000001ef, + 0x00000022,0x00000000,0x00040047,0x000001fa,0x00000021,0x0000000b,0x00040047,0x000001fa, + 0x00000022,0x00000000,0x00040047,0x00000205,0x00000021,0x00000002,0x00040047,0x00000205, + 0x00000022,0x00000000,0x00040047,0x0000020d,0x00000021,0x00000000,0x00040047,0x0000020d, + 0x00000022,0x00000000,0x00040047,0x00000219,0x00000021,0x00000001,0x00040047,0x00000219, + 0x00000022,0x00000000,0x00040047,0x000008fd,0x0000000b,0x0000001c,0x00040047,0x00000905, + 0x00000021,0x000003e8,0x00040047,0x00000905,0x00000022,0x00000000,0x00030047,0x00000908, + 0x00000019,0x00040047,0x00000908,0x00000021,0x0000000a,0x00040047,0x00000908,0x00000022, + 0x00000000,0x00040047,0x00000909,0x00000021,0x00000006,0x00040047,0x00000909,0x00000022, + 0x00000000,0x00040047,0x0000090a,0x00000021,0x00000004,0x00040047,0x0000090a,0x00000022, + 0x00000000,0x00040047,0x00000911,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021, + 0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040020,0x00000007,0x00000007, + 0x00000006,0x00060021,0x00000008,0x00000006,0x00000007,0x00000007,0x00000007,0x00040017, + 0x0000000e,0x00000006,0x00000003,0x00040020,0x0000000f,0x00000007,0x0000000e,0x00060021, + 0x00000010,0x0000000e,0x0000000f,0x0000000f,0x00000007,0x00040021,0x00000016,0x00000006, + 0x00000007,0x00040017,0x0000001a,0x00000006,0x00000002,0x00040020,0x0000001b,0x00000007, + 0x0000001a,0x00040021,0x0000001c,0x0000001a,0x0000001b,0x00050021,0x00000020,0x00000006, + 0x00000007,0x00000007,0x00050021,0x00000025,0x0000001a,0x0000001b,0x0000001b,0x00050021, + 0x0000002a,0x0000000e,0x0000000f,0x0000000f,0x00040017,0x0000002f,0x00000006,0x00000004, + 0x00040020,0x00000030,0x00000007,0x0000002f,0x00050021,0x00000031,0x0000002f,0x00000030, + 0x00000030,0x00040015,0x00000036,0x00000020,0x00000001,0x00040020,0x00000037,0x00000007, + 0x00000036,0x00050021,0x00000038,0x00000036,0x00000037,0x00000037,0x00040017,0x00000055, + 0x00000036,0x00000002,0x00030021,0x00000056,0x00000055,0x00030021,0x0000005f,0x0000001a, + 0x00030021,0x00000064,0x00000006,0x00040020,0x0000006d,0x00000007,0x00000055,0x00040021, + 0x0000006e,0x0000000e,0x0000006d,0x00040021,0x00000072,0x0000002f,0x0000006d,0x00050021, + 0x00000076,0x00000002,0x0000006d,0x00000030,0x00040021,0x0000007d,0x00000006,0x0000001b, + 0x00040021,0x00000084,0x00000006,0x0000006d,0x00050021,0x00000088,0x00000002,0x0000006d, + 0x00000007,0x00040021,0x0000008d,0x0000001a,0x0000006d,0x00040021,0x00000093,0x0000002f, + 0x0000001b,0x0007001e,0x0000009a,0x0000000e,0x0000000e,0x0000000e,0x0000000e,0x00000006, + 0x00040020,0x0000009b,0x00000007,0x0000009a,0x00060021,0x0000009c,0x00000002,0x0000009b, + 0x0000000e,0x00000006,0x00020014,0x000000a2,0x00040020,0x000000a3,0x00000007,0x000000a2, + 0x00070021,0x000000a4,0x00000002,0x000000a3,0x0000009b,0x0000000e,0x00000006,0x00040021, + 0x000000ab,0x00000002,0x0000009b,0x00040021,0x000000af,0x0000000e,0x0000000f,0x00040021, + 0x000000bc,0x000000a2,0x0000001b,0x00060021,0x000000c0,0x00000055,0x0000006d,0x0000006d, + 0x0000006d,0x00060021,0x000000c6,0x0000001a,0x0000001b,0x0000006d,0x0000006d,0x00050021, + 0x000000cc,0x000000a2,0x0000006d,0x0000006d,0x00080021,0x000000dd,0x0000002f,0x00000030, + 0x00000030,0x00000030,0x00000030,0x00000007,0x0012001e,0x000000e5,0x0000002f,0x0000002f, + 0x0000002f,0x0000002f,0x0000002f,0x0000002f,0x0000002f,0x0000002f,0x0000002f,0x0000002f, + 0x0000002f,0x0000002f,0x0000002f,0x0000002f,0x0000002f,0x0000002f,0x00040020,0x000000e6, + 0x00000007,0x000000e5,0x00050021,0x000000e7,0x0000002f,0x000000e6,0x0000001b,0x00050021, + 0x000000f1,0x00000002,0x0000009b,0x0000000f,0x00050021,0x000000f6,0x00000006,0x0000001b, + 0x00000007,0x0011001e,0x000000fb,0x00000055,0x0000001a,0x0000001a,0x0000001a,0x0000001a, + 0x0000001a,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006, + 0x000000a2,0x000000a2,0x0009001e,0x000000fc,0x0000009a,0x0000000e,0x00000006,0x0000000e, + 0x00000006,0x00000006,0x00000006,0x00040020,0x000000fd,0x00000007,0x000000fc,0x00050021, + 0x000000fe,0x00000006,0x000000fb,0x000000fd,0x00050021,0x00000106,0x00000002,0x000000fb, + 0x000000fd,0x00050021,0x0000010e,0x000000e5,0x0000006d,0x0000006d,0x00050021,0x00000113, + 0x0000002f,0x0000001b,0x0000006d,0x00050021,0x00000118,0x0000001a,0x0000006d,0x0000001b, + 0x00040020,0x0000011d,0x00000007,0x000000fb,0x00040021,0x0000011e,0x00000002,0x0000011d, + 0x00050021,0x0000012e,0x00000002,0x0000011d,0x000000fd,0x00060021,0x00000137,0x00000002, + 0x0000006d,0x0000011d,0x000000fd,0x00040021,0x0000013d,0x00000002,0x0000006d,0x0004002b, + 0x00000006,0x0000014f,0x00000000,0x0004002b,0x00000006,0x00000150,0x3f800000,0x0019001e, + 0x0000018f,0x00000055,0x00000055,0x00000055,0x00000055,0x00000055,0x00000055,0x0000002f, + 0x0000001a,0x0000001a,0x0000001a,0x0000001a,0x0000001a,0x00000006,0x00000006,0x00000006, + 0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006, + 0x00040020,0x00000190,0x00000002,0x0000018f,0x0004003b,0x00000190,0x00000191,0x00000002, + 0x0004002b,0x00000036,0x00000192,0x00000000,0x00040020,0x00000193,0x00000002,0x00000055, + 0x0004002b,0x00000036,0x00000198,0x00000004,0x0004002b,0x00000036,0x0000019d,0x00000002, + 0x0004002b,0x00000036,0x000001a2,0x00000003,0x0004002b,0x00000036,0x000001a7,0x00000007, + 0x00040020,0x000001a8,0x00000002,0x0000001a,0x0004002b,0x00000036,0x000001ad,0x0000000a, + 0x0004002b,0x00000036,0x000001b2,0x0000000d,0x00040020,0x000001b3,0x00000002,0x00000006, + 0x0004002b,0x00000036,0x000001b8,0x0000000f,0x0004002b,0x00000036,0x000001bd,0x00000011, + 0x0004002b,0x00000036,0x000001c2,0x00000012,0x00090019,0x000001c7,0x00000006,0x00000001, + 0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x00040020,0x000001c8,0x00000000, + 0x000001c7,0x0004003b,0x000001c8,0x000001c9,0x00000000,0x0004003b,0x000001c8,0x000001d0, + 0x00000000,0x00090019,0x000001d6,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000, + 0x00000002,0x00000002,0x00040020,0x000001d7,0x00000000,0x000001d6,0x0004003b,0x000001d7, + 0x000001d8,0x00000000,0x0004003b,0x000001c8,0x000001dc,0x00000000,0x0002001a,0x000001e2, + 0x00040020,0x000001e3,0x00000000,0x000001e2,0x0004003b,0x000001e3,0x000001e4,0x00000000, + 0x0003001b,0x000001e6,0x000001c7,0x00040015,0x000001ea,0x00000020,0x00000000,0x0004002b, + 0x000001ea,0x000001eb,0x00000000,0x0004003b,0x000001c8,0x000001ef,0x00000000,0x00090019, + 0x000001f8,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000,0x00000002,0x0000000f, + 0x00040020,0x000001f9,0x00000000,0x000001f8,0x0004003b,0x000001f9,0x000001fa,0x00000000, + 0x0004003b,0x000001c8,0x00000205,0x00000000,0x0004003b,0x000001c8,0x0000020d,0x00000000, + 0x0005002c,0x00000055,0x0000020f,0x00000192,0x00000192,0x0004003b,0x000001c8,0x00000219, + 0x00000000,0x0004002b,0x00000006,0x00000222,0x45700000,0x0004002b,0x00000006,0x00000223, + 0x45070000,0x0005002c,0x0000001a,0x00000224,0x00000222,0x00000223,0x0004002b,0x00000036, + 0x0000022f,0x00000001,0x0004002b,0x00000006,0x0000025c,0x00800000,0x0004002b,0x000001ea, + 0x00000284,0x00000001,0x0004002b,0x000001ea,0x00000288,0x00000002,0x0004002b,0x00000006, + 0x0000029e,0x3e800000,0x0004002b,0x00000006,0x000002a2,0x3f000000,0x0004002b,0x00000006, + 0x000002b2,0xbe800000,0x0004002b,0x00000006,0x000002d8,0x387fda40,0x0005002c,0x0000001a, + 0x00000329,0x000002a2,0x000002a2,0x00040017,0x0000033d,0x000001ea,0x00000002,0x00040017, + 0x00000341,0x000000a2,0x00000002,0x0004002b,0x00000006,0x0000034d,0x40490fdb,0x0004002b, + 0x00000006,0x00000354,0x3fc90fdb,0x0004002b,0x00000006,0x00000361,0x40000000,0x0004002b, + 0x00000006,0x0000036b,0x3ecccccd,0x0004002b,0x00000006,0x00000373,0x3fc80000,0x0004002b, + 0x00000006,0x00000378,0x3f100000,0x0004002b,0x00000006,0x00000380,0x40800000,0x0004002b, + 0x00000006,0x0000038b,0xbf800000,0x0004002b,0x00000006,0x00000391,0x80000000,0x0004002b, + 0x00000036,0x000003cc,0x00000005,0x0004002b,0x00000036,0x000003cd,0x00000006,0x0004002b, + 0x00000036,0x000003df,0x00000008,0x0004002b,0x00000036,0x000003e0,0x00000009,0x0004002b, + 0x00000036,0x000003e1,0x0000000b,0x0004002b,0x00000036,0x000003f3,0x0000000c,0x0004002b, + 0x00000036,0x000003f4,0x0000000e,0x0004002b,0x000001ea,0x00000412,0x00000004,0x0004001c, + 0x00000413,0x0000002f,0x00000412,0x00040020,0x00000414,0x00000007,0x00000413,0x0004002b, + 0x00000006,0x0000047f,0x3ffeb852,0x0006002c,0x0000000e,0x00000487,0x0000014f,0x0000014f, + 0x0000014f,0x0004002b,0x00000036,0x000004b3,0xfffffffe,0x0004002b,0x00000036,0x000004b4, + 0xffffffff,0x0004002b,0x000001ea,0x00000502,0x00000009,0x0004001c,0x00000503,0x0000000e, + 0x00000502,0x00040020,0x00000504,0x00000007,0x00000503,0x0004002b,0x00000006,0x00000530, + 0x3e99999a,0x0004002b,0x00000006,0x0000053d,0x40a00000,0x0004002b,0x00000006,0x000005a8, + 0xc0133333,0x0004002b,0x00000006,0x000005e0,0x3d3d70a4,0x0005002c,0x00000055,0x00000602, + 0x000004b4,0x000004b4,0x0005002c,0x00000055,0x0000060c,0x00000192,0x000004b4,0x0005002c, + 0x00000055,0x00000616,0x0000022f,0x000004b4,0x0005002c,0x00000055,0x00000620,0x0000019d, + 0x000004b4,0x0005002c,0x00000055,0x0000062a,0x000004b4,0x00000192,0x0005002c,0x00000055, + 0x0000063d,0x0000022f,0x00000192,0x0005002c,0x00000055,0x00000647,0x0000019d,0x00000192, + 0x0005002c,0x00000055,0x00000651,0x000004b4,0x0000022f,0x0005002c,0x00000055,0x0000065b, + 0x00000192,0x0000022f,0x0005002c,0x00000055,0x00000665,0x0000022f,0x0000022f,0x0005002c, + 0x00000055,0x0000066f,0x0000019d,0x0000022f,0x0005002c,0x00000055,0x00000679,0x000004b4, + 0x0000019d,0x0005002c,0x00000055,0x00000683,0x00000192,0x0000019d,0x0005002c,0x00000055, + 0x0000068d,0x0000022f,0x0000019d,0x0005002c,0x00000055,0x00000697,0x0000019d,0x0000019d, + 0x0004002b,0x000001ea,0x00000707,0x00000003,0x0004002b,0x00000006,0x0000074c,0x41a00000, + 0x0004002b,0x00000006,0x00000751,0x3f400000,0x0004002b,0x00000006,0x00000774,0x40400000, + 0x0004002b,0x00000006,0x0000077d,0x3fd9999a,0x0006002c,0x0000000e,0x0000077e,0x0000077d, + 0x00000150,0x00000150,0x0004002b,0x00000006,0x00000783,0x340018ef,0x0006002c,0x0000000e, + 0x00000784,0x00000783,0x00000783,0x00000783,0x0003002a,0x000000a2,0x000007b9,0x0004002b, + 0x00000006,0x000007fc,0x3dcccccd,0x00030029,0x000000a2,0x00000813,0x0004002b,0x00000006, + 0x0000081c,0x3e19999a,0x0004002b,0x00000006,0x0000089c,0x42c80000,0x00040017,0x000008fb, + 0x000001ea,0x00000003,0x00040020,0x000008fc,0x00000001,0x000008fb,0x0004003b,0x000008fc, + 0x000008fd,0x00000001,0x0004002b,0x00000006,0x00000903,0x477fe000,0x0004002b,0x00000006, + 0x00000904,0x37801002,0x0004003b,0x000001e3,0x00000905,0x00000000,0x00090019,0x00000906, + 0x00000006,0x00000001,0x00000000,0x00000000,0x00000000,0x00000002,0x00000000,0x00040020, + 0x00000907,0x00000000,0x00000906,0x0004003b,0x00000907,0x00000908,0x00000000,0x0004003b, + 0x000001c8,0x00000909,0x00000000,0x0004003b,0x000001c8,0x0000090a,0x00000000,0x0004002b, + 0x00000006,0x0000090b,0x7f7fffff,0x0004002b,0x00000006,0x0000090c,0x3a1fe868,0x0004002b, + 0x00000006,0x0000090d,0x3d800000,0x0004002b,0x00000006,0x0000090e,0x3e400000,0x0004002b, + 0x00000006,0x0000090f,0x461c4000,0x0004002b,0x000001ea,0x00000910,0x00000008,0x0006002c, + 0x000008fb,0x00000911,0x00000910,0x00000910,0x00000284,0x00050036,0x00000002,0x00000004, + 0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x0000006d,0x00000901,0x00000007, + 0x0004003d,0x000008fb,0x000008fe,0x000008fd,0x0007004f,0x0000033d,0x000008ff,0x000008fe, + 0x000008fe,0x00000000,0x00000001,0x0004007c,0x00000055,0x00000900,0x000008ff,0x0003003e, + 0x00000901,0x00000900,0x00050039,0x00000002,0x00000902,0x0000013f,0x00000901,0x000100fd, + 0x00010038,0x00050036,0x00000006,0x0000000c,0x00000000,0x00000008,0x00030037,0x00000007, + 0x00000009,0x00030037,0x00000007,0x0000000a,0x00030037,0x00000007,0x0000000b,0x000200f8, + 0x0000000d,0x0004003d,0x00000006,0x00000141,0x00000009,0x0004003d,0x00000006,0x00000142, + 0x0000000a,0x0004003d,0x00000006,0x00000143,0x0000000b,0x0008000c,0x00000006,0x00000144, + 0x00000001,0x0000002e,0x00000141,0x00000142,0x00000143,0x000200fe,0x00000144,0x00010038, + 0x00050036,0x0000000e,0x00000014,0x00000000,0x00000010,0x00030037,0x0000000f,0x00000011, + 0x00030037,0x0000000f,0x00000012,0x00030037,0x00000007,0x00000013,0x000200f8,0x00000015, + 0x0004003d,0x0000000e,0x00000147,0x00000011,0x0004003d,0x0000000e,0x00000148,0x00000012, + 0x0004003d,0x00000006,0x00000149,0x00000013,0x00060050,0x0000000e,0x0000014a,0x00000149, + 0x00000149,0x00000149,0x0008000c,0x0000000e,0x0000014b,0x00000001,0x0000002e,0x00000147, + 0x00000148,0x0000014a,0x000200fe,0x0000014b,0x00010038,0x00050036,0x00000006,0x00000018, + 0x00000000,0x00000016,0x00030037,0x00000007,0x00000017,0x000200f8,0x00000019,0x0004003d, + 0x00000006,0x0000014e,0x00000017,0x0008000c,0x00000006,0x00000151,0x00000001,0x0000002b, + 0x0000014e,0x0000014f,0x00000150,0x000200fe,0x00000151,0x00010038,0x00050036,0x0000001a, + 0x0000001e,0x00000000,0x0000001c,0x00030037,0x0000001b,0x0000001d,0x000200f8,0x0000001f, + 0x0004003d,0x0000001a,0x00000154,0x0000001d,0x0006000c,0x0000001a,0x00000155,0x00000001, + 0x0000000a,0x00000154,0x000200fe,0x00000155,0x00010038,0x00050036,0x00000006,0x00000023, + 0x00000000,0x00000020,0x00030037,0x00000007,0x00000021,0x00030037,0x00000007,0x00000022, + 0x000200f8,0x00000024,0x0004003d,0x00000006,0x00000158,0x00000021,0x0004003d,0x00000006, + 0x00000159,0x00000022,0x0007000c,0x00000006,0x0000015a,0x00000001,0x00000025,0x00000158, + 0x00000159,0x000200fe,0x0000015a,0x00010038,0x00050036,0x0000001a,0x00000028,0x00000000, + 0x00000025,0x00030037,0x0000001b,0x00000026,0x00030037,0x0000001b,0x00000027,0x000200f8, + 0x00000029,0x0004003d,0x0000001a,0x0000015d,0x00000026,0x0004003d,0x0000001a,0x0000015e, + 0x00000027,0x0007000c,0x0000001a,0x0000015f,0x00000001,0x00000025,0x0000015d,0x0000015e, + 0x000200fe,0x0000015f,0x00010038,0x00050036,0x0000000e,0x0000002d,0x00000000,0x0000002a, + 0x00030037,0x0000000f,0x0000002b,0x00030037,0x0000000f,0x0000002c,0x000200f8,0x0000002e, + 0x0004003d,0x0000000e,0x00000162,0x0000002b,0x0004003d,0x0000000e,0x00000163,0x0000002c, + 0x0007000c,0x0000000e,0x00000164,0x00000001,0x00000025,0x00000162,0x00000163,0x000200fe, + 0x00000164,0x00010038,0x00050036,0x0000002f,0x00000034,0x00000000,0x00000031,0x00030037, + 0x00000030,0x00000032,0x00030037,0x00000030,0x00000033,0x000200f8,0x00000035,0x0004003d, + 0x0000002f,0x00000167,0x00000032,0x0004003d,0x0000002f,0x00000168,0x00000033,0x0007000c, + 0x0000002f,0x00000169,0x00000001,0x00000025,0x00000167,0x00000168,0x000200fe,0x00000169, + 0x00010038,0x00050036,0x00000036,0x0000003b,0x00000000,0x00000038,0x00030037,0x00000037, + 0x00000039,0x00030037,0x00000037,0x0000003a,0x000200f8,0x0000003c,0x0004003d,0x00000036, + 0x0000016c,0x00000039,0x0004003d,0x00000036,0x0000016d,0x0000003a,0x0007000c,0x00000036, + 0x0000016e,0x00000001,0x00000027,0x0000016c,0x0000016d,0x000200fe,0x0000016e,0x00010038, + 0x00050036,0x00000006,0x0000003f,0x00000000,0x00000020,0x00030037,0x00000007,0x0000003d, + 0x00030037,0x00000007,0x0000003e,0x000200f8,0x00000040,0x0004003d,0x00000006,0x00000171, + 0x0000003d,0x0004003d,0x00000006,0x00000172,0x0000003e,0x0007000c,0x00000006,0x00000173, + 0x00000001,0x00000028,0x00000171,0x00000172,0x000200fe,0x00000173,0x00010038,0x00050036, + 0x0000001a,0x00000043,0x00000000,0x00000025,0x00030037,0x0000001b,0x00000041,0x00030037, + 0x0000001b,0x00000042,0x000200f8,0x00000044,0x0004003d,0x0000001a,0x00000176,0x00000041, + 0x0004003d,0x0000001a,0x00000177,0x00000042,0x0007000c,0x0000001a,0x00000178,0x00000001, + 0x00000028,0x00000176,0x00000177,0x000200fe,0x00000178,0x00010038,0x00050036,0x0000000e, + 0x00000047,0x00000000,0x0000002a,0x00030037,0x0000000f,0x00000045,0x00030037,0x0000000f, + 0x00000046,0x000200f8,0x00000048,0x0004003d,0x0000000e,0x0000017b,0x00000045,0x0004003d, + 0x0000000e,0x0000017c,0x00000046,0x0007000c,0x0000000e,0x0000017d,0x00000001,0x00000028, + 0x0000017b,0x0000017c,0x000200fe,0x0000017d,0x00010038,0x00050036,0x0000002f,0x0000004b, + 0x00000000,0x00000031,0x00030037,0x00000030,0x00000049,0x00030037,0x00000030,0x0000004a, + 0x000200f8,0x0000004c,0x0004003d,0x0000002f,0x00000180,0x00000049,0x0004003d,0x0000002f, + 0x00000181,0x0000004a,0x0007000c,0x0000002f,0x00000182,0x00000001,0x00000028,0x00000180, + 0x00000181,0x000200fe,0x00000182,0x00010038,0x00050036,0x00000036,0x0000004f,0x00000000, + 0x00000038,0x00030037,0x00000037,0x0000004d,0x00030037,0x00000037,0x0000004e,0x000200f8, + 0x00000050,0x0004003d,0x00000036,0x00000185,0x0000004d,0x0004003d,0x00000036,0x00000186, + 0x0000004e,0x0007000c,0x00000036,0x00000187,0x00000001,0x0000002a,0x00000185,0x00000186, + 0x000200fe,0x00000187,0x00010038,0x00050036,0x00000006,0x00000053,0x00000000,0x00000020, + 0x00030037,0x00000007,0x00000051,0x00030037,0x00000007,0x00000052,0x000200f8,0x00000054, + 0x0004003d,0x00000006,0x0000018a,0x00000051,0x0004003d,0x00000006,0x0000018b,0x00000052, + 0x0007000c,0x00000006,0x0000018c,0x00000001,0x0000001a,0x0000018a,0x0000018b,0x000200fe, + 0x0000018c,0x00010038,0x00050036,0x00000055,0x00000057,0x00000000,0x00000056,0x000200f8, + 0x00000058,0x00050041,0x00000193,0x00000194,0x00000191,0x00000192,0x0004003d,0x00000055, + 0x00000195,0x00000194,0x000200fe,0x00000195,0x00010038,0x00050036,0x00000055,0x00000059, + 0x00000000,0x00000056,0x000200f8,0x0000005a,0x00050041,0x00000193,0x00000199,0x00000191, + 0x00000198,0x0004003d,0x00000055,0x0000019a,0x00000199,0x000200fe,0x0000019a,0x00010038, + 0x00050036,0x00000055,0x0000005b,0x00000000,0x00000056,0x000200f8,0x0000005c,0x00050041, + 0x00000193,0x0000019e,0x00000191,0x0000019d,0x0004003d,0x00000055,0x0000019f,0x0000019e, + 0x000200fe,0x0000019f,0x00010038,0x00050036,0x00000055,0x0000005d,0x00000000,0x00000056, + 0x000200f8,0x0000005e,0x00050041,0x00000193,0x000001a3,0x00000191,0x000001a2,0x0004003d, + 0x00000055,0x000001a4,0x000001a3,0x000200fe,0x000001a4,0x00010038,0x00050036,0x0000001a, + 0x00000060,0x00000000,0x0000005f,0x000200f8,0x00000061,0x00050041,0x000001a8,0x000001a9, + 0x00000191,0x000001a7,0x0004003d,0x0000001a,0x000001aa,0x000001a9,0x000200fe,0x000001aa, + 0x00010038,0x00050036,0x0000001a,0x00000062,0x00000000,0x0000005f,0x000200f8,0x00000063, + 0x00050041,0x000001a8,0x000001ae,0x00000191,0x000001ad,0x0004003d,0x0000001a,0x000001af, + 0x000001ae,0x000200fe,0x000001af,0x00010038,0x00050036,0x00000006,0x00000065,0x00000000, + 0x00000064,0x000200f8,0x00000066,0x00050041,0x000001b3,0x000001b4,0x00000191,0x000001b2, + 0x0004003d,0x00000006,0x000001b5,0x000001b4,0x000200fe,0x000001b5,0x00010038,0x00050036, + 0x00000006,0x00000067,0x00000000,0x00000064,0x000200f8,0x00000068,0x00050041,0x000001b3, + 0x000001b9,0x00000191,0x000001b8,0x0004003d,0x00000006,0x000001ba,0x000001b9,0x000200fe, + 0x000001ba,0x00010038,0x00050036,0x00000006,0x00000069,0x00000000,0x00000064,0x000200f8, + 0x0000006a,0x00050041,0x000001b3,0x000001be,0x00000191,0x000001bd,0x0004003d,0x00000006, + 0x000001bf,0x000001be,0x000200fe,0x000001bf,0x00010038,0x00050036,0x00000006,0x0000006b, + 0x00000000,0x00000064,0x000200f8,0x0000006c,0x00050041,0x000001b3,0x000001c3,0x00000191, + 0x000001c2,0x0004003d,0x00000006,0x000001c4,0x000001c3,0x000200fe,0x000001c4,0x00010038, + 0x00050036,0x0000000e,0x00000070,0x00000000,0x0000006e,0x00030037,0x0000006d,0x0000006f, + 0x000200f8,0x00000071,0x0004003d,0x000001c7,0x000001ca,0x000001c9,0x0004003d,0x00000055, + 0x000001cb,0x0000006f,0x0007005f,0x0000002f,0x000001cc,0x000001ca,0x000001cb,0x00000002, + 0x00000192,0x0008004f,0x0000000e,0x000001cd,0x000001cc,0x000001cc,0x00000000,0x00000001, + 0x00000002,0x000200fe,0x000001cd,0x00010038,0x00050036,0x0000002f,0x00000074,0x00000000, + 0x00000072,0x00030037,0x0000006d,0x00000073,0x000200f8,0x00000075,0x0004003d,0x000001c7, + 0x000001d1,0x000001d0,0x0004003d,0x00000055,0x000001d2,0x00000073,0x0007005f,0x0000002f, + 0x000001d3,0x000001d1,0x000001d2,0x00000002,0x00000192,0x000200fe,0x000001d3,0x00010038, + 0x00050036,0x00000002,0x00000079,0x00000000,0x00000076,0x00030037,0x0000006d,0x00000077, + 0x00030037,0x00000030,0x00000078,0x000200f8,0x0000007a,0x0004003d,0x000001d6,0x000001d9, + 0x000001d8,0x0004003d,0x00000055,0x000001da,0x00000077,0x0004003d,0x0000002f,0x000001db, + 0x00000078,0x00040063,0x000001d9,0x000001da,0x000001db,0x000100fd,0x00010038,0x00050036, + 0x00000055,0x0000007b,0x00000000,0x00000056,0x000200f8,0x0000007c,0x0004003d,0x000001c7, + 0x000001dd,0x000001dc,0x00050067,0x00000055,0x000001de,0x000001dd,0x00000192,0x000200fe, + 0x000001de,0x00010038,0x00050036,0x00000006,0x0000007f,0x00000000,0x0000007d,0x00030037, + 0x0000001b,0x0000007e,0x000200f8,0x00000080,0x0004003d,0x000001c7,0x000001e1,0x000001dc, + 0x0004003d,0x000001e2,0x000001e5,0x000001e4,0x00050056,0x000001e6,0x000001e7,0x000001e1, + 0x000001e5,0x0004003d,0x0000001a,0x000001e8,0x0000007e,0x00070058,0x0000002f,0x000001e9, + 0x000001e7,0x000001e8,0x00000002,0x0000014f,0x00050051,0x00000006,0x000001ec,0x000001e9, + 0x00000000,0x000200fe,0x000001ec,0x00010038,0x00050036,0x00000006,0x00000082,0x00000000, + 0x0000007d,0x00030037,0x0000001b,0x00000081,0x000200f8,0x00000083,0x0004003d,0x000001c7, + 0x000001f0,0x000001ef,0x0004003d,0x000001e2,0x000001f1,0x000001e4,0x00050056,0x000001e6, + 0x000001f2,0x000001f0,0x000001f1,0x0004003d,0x0000001a,0x000001f3,0x00000081,0x00070058, + 0x0000002f,0x000001f4,0x000001f2,0x000001f3,0x00000002,0x0000014f,0x00050051,0x00000006, + 0x000001f5,0x000001f4,0x00000000,0x000200fe,0x000001f5,0x00010038,0x00050036,0x00000006, + 0x00000086,0x00000000,0x00000084,0x00030037,0x0000006d,0x00000085,0x000200f8,0x00000087, + 0x0004003d,0x000001f8,0x000001fb,0x000001fa,0x0004003d,0x00000055,0x000001fc,0x00000085, + 0x00050062,0x0000002f,0x000001fd,0x000001fb,0x000001fc,0x00050051,0x00000006,0x000001fe, + 0x000001fd,0x00000000,0x000200fe,0x000001fe,0x00010038,0x00050036,0x00000002,0x0000008b, + 0x00000000,0x00000088,0x00030037,0x0000006d,0x00000089,0x00030037,0x00000007,0x0000008a, + 0x000200f8,0x0000008c,0x0004003d,0x000001f8,0x00000201,0x000001fa,0x0004003d,0x00000055, + 0x00000202,0x00000089,0x0004003d,0x00000006,0x00000203,0x0000008a,0x00070050,0x0000002f, + 0x00000204,0x00000203,0x0000014f,0x0000014f,0x0000014f,0x00040063,0x00000201,0x00000202, + 0x00000204,0x000100fd,0x00010038,0x00050036,0x0000001a,0x0000008f,0x00000000,0x0000008d, + 0x00030037,0x0000006d,0x0000008e,0x000200f8,0x00000090,0x0004003d,0x000001c7,0x00000206, + 0x00000205,0x0004003d,0x00000055,0x00000207,0x0000008e,0x0007005f,0x0000002f,0x00000208, + 0x00000206,0x00000207,0x00000002,0x00000192,0x0007004f,0x0000001a,0x00000209,0x00000208, + 0x00000208,0x00000000,0x00000001,0x000200fe,0x00000209,0x00010038,0x00050036,0x00000006, + 0x00000091,0x00000000,0x00000064,0x000200f8,0x00000092,0x0004003b,0x00000007,0x0000020c, + 0x00000007,0x0004003d,0x000001c7,0x0000020e,0x0000020d,0x0007005f,0x0000002f,0x00000210, + 0x0000020e,0x0000020f,0x00000002,0x00000192,0x00050051,0x00000006,0x00000211,0x00000210, + 0x00000000,0x0003003e,0x0000020c,0x00000211,0x0004003d,0x00000006,0x00000212,0x0000020c, + 0x000500b4,0x000000a2,0x00000213,0x00000212,0x0000014f,0x000300f7,0x00000215,0x00000000, + 0x000400fa,0x00000213,0x00000214,0x00000215,0x000200f8,0x00000214,0x0003003e,0x0000020c, + 0x00000150,0x000200f9,0x00000215,0x000200f8,0x00000215,0x0004003d,0x00000006,0x00000216, + 0x0000020c,0x000200fe,0x00000216,0x00010038,0x00050036,0x0000002f,0x00000095,0x00000000, + 0x00000093,0x00030037,0x0000001b,0x00000094,0x000200f8,0x00000096,0x0004003d,0x000001c7, + 0x0000021a,0x00000219,0x0004003d,0x000001e2,0x0000021b,0x000001e4,0x00050056,0x000001e6, + 0x0000021c,0x0000021a,0x0000021b,0x0004003d,0x0000001a,0x0000021d,0x00000094,0x00070058, + 0x0000002f,0x0000021e,0x0000021c,0x0000021d,0x00000002,0x0000014f,0x000200fe,0x0000021e, + 0x00010038,0x00050036,0x00000006,0x00000098,0x00000000,0x0000007d,0x00030037,0x0000001b, + 0x00000097,0x000200f8,0x00000099,0x0004003d,0x0000001a,0x00000221,0x00000097,0x00050085, + 0x0000001a,0x00000225,0x00000221,0x00000224,0x0006000c,0x00000006,0x00000226,0x00000001, + 0x00000042,0x00000225,0x000200fe,0x00000226,0x00010038,0x00050036,0x00000002,0x000000a0, + 0x00000000,0x0000009c,0x00030037,0x0000009b,0x0000009d,0x00030037,0x0000000e,0x0000009e, + 0x00030037,0x00000006,0x0000009f,0x000200f8,0x000000a1,0x0004003b,0x0000000f,0x0000022b, + 0x00000007,0x00050041,0x0000000f,0x00000229,0x0000009d,0x0000019d,0x0003003e,0x00000229, + 0x0000009e,0x00050041,0x0000000f,0x0000022a,0x0000009d,0x000001a2,0x0003003e,0x0000022a, + 0x0000009e,0x0005008e,0x0000000e,0x0000022c,0x0000009e,0x0000009f,0x0003003e,0x0000022b, + 0x0000022c,0x0004003d,0x0000000e,0x0000022d,0x0000022b,0x00050041,0x0000000f,0x0000022e, + 0x0000009d,0x00000192,0x0003003e,0x0000022e,0x0000022d,0x0004003d,0x0000000e,0x00000230, + 0x0000022b,0x00050085,0x0000000e,0x00000231,0x0000009e,0x00000230,0x00050041,0x0000000f, + 0x00000232,0x0000009d,0x0000022f,0x0003003e,0x00000232,0x00000231,0x00050041,0x00000007, + 0x00000233,0x0000009d,0x00000198,0x0003003e,0x00000233,0x0000009f,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x000000a9,0x00000000,0x000000a4,0x00030037,0x000000a3,0x000000a5, + 0x00030037,0x0000009b,0x000000a6,0x00030037,0x0000000e,0x000000a7,0x00030037,0x00000006, + 0x000000a8,0x000200f8,0x000000aa,0x0004003b,0x0000009b,0x00000237,0x00000007,0x0004003b, + 0x0000000f,0x0000023c,0x00000007,0x0004003b,0x0000000f,0x0000023f,0x00000007,0x0004003b, + 0x0000000f,0x00000242,0x00000007,0x0004003b,0x0000000f,0x00000245,0x00000007,0x0004003b, + 0x0000000f,0x00000248,0x00000007,0x0004003d,0x000000a2,0x00000234,0x000000a5,0x000300f7, + 0x00000236,0x00000000,0x000400fa,0x00000234,0x00000235,0x0000023b,0x000200f8,0x00000235, + 0x0004003d,0x0000009a,0x00000238,0x000000a6,0x0003003e,0x00000237,0x00000238,0x00070039, + 0x00000002,0x00000239,0x000000a0,0x00000237,0x000000a7,0x000000a8,0x0004003d,0x0000009a, + 0x0000023a,0x00000237,0x0003003e,0x000000a6,0x0000023a,0x000200f9,0x00000236,0x000200f8, + 0x0000023b,0x00050041,0x0000000f,0x0000023d,0x000000a6,0x0000019d,0x0004003d,0x0000000e, + 0x0000023e,0x0000023d,0x0003003e,0x0000023c,0x0000023e,0x0003003e,0x0000023f,0x000000a7, + 0x00060039,0x0000000e,0x00000240,0x0000002d,0x0000023c,0x0000023f,0x00050041,0x0000000f, + 0x00000241,0x000000a6,0x0000019d,0x0003003e,0x00000241,0x00000240,0x00050041,0x0000000f, + 0x00000243,0x000000a6,0x000001a2,0x0004003d,0x0000000e,0x00000244,0x00000243,0x0003003e, + 0x00000242,0x00000244,0x0003003e,0x00000245,0x000000a7,0x00060039,0x0000000e,0x00000246, + 0x00000047,0x00000242,0x00000245,0x00050041,0x0000000f,0x00000247,0x000000a6,0x000001a2, + 0x0003003e,0x00000247,0x00000246,0x0005008e,0x0000000e,0x00000249,0x000000a7,0x000000a8, + 0x0003003e,0x00000248,0x00000249,0x0004003d,0x0000000e,0x0000024a,0x00000248,0x00050041, + 0x0000000f,0x0000024b,0x000000a6,0x00000192,0x0004003d,0x0000000e,0x0000024c,0x0000024b, + 0x00050081,0x0000000e,0x0000024d,0x0000024c,0x0000024a,0x00050041,0x0000000f,0x0000024e, + 0x000000a6,0x00000192,0x0003003e,0x0000024e,0x0000024d,0x0004003d,0x0000000e,0x0000024f, + 0x00000248,0x00050085,0x0000000e,0x00000250,0x000000a7,0x0000024f,0x00050041,0x0000000f, + 0x00000251,0x000000a6,0x0000022f,0x0004003d,0x0000000e,0x00000252,0x00000251,0x00050081, + 0x0000000e,0x00000253,0x00000252,0x00000250,0x00050041,0x0000000f,0x00000254,0x000000a6, + 0x0000022f,0x0003003e,0x00000254,0x00000253,0x00050041,0x00000007,0x00000255,0x000000a6, + 0x00000198,0x0004003d,0x00000006,0x00000256,0x00000255,0x00050081,0x00000006,0x00000257, + 0x00000256,0x000000a8,0x00050041,0x00000007,0x00000258,0x000000a6,0x00000198,0x0003003e, + 0x00000258,0x00000257,0x000200f9,0x00000236,0x000200f8,0x00000236,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x000000ad,0x00000000,0x000000ab,0x00030037,0x0000009b,0x000000ac, + 0x000200f8,0x000000ae,0x0004003b,0x00000007,0x0000025e,0x00000007,0x0004003b,0x0000000f, + 0x00000274,0x00000007,0x00050041,0x00000007,0x00000259,0x000000ac,0x00000198,0x0004003d, + 0x00000006,0x0000025a,0x00000259,0x0006000c,0x00000006,0x0000025b,0x00000001,0x00000004, + 0x0000025a,0x000500ba,0x000000a2,0x0000025d,0x0000025b,0x0000025c,0x000300f7,0x00000260, + 0x00000000,0x000400fa,0x0000025d,0x0000025f,0x00000263,0x000200f8,0x0000025f,0x00050041, + 0x00000007,0x00000261,0x000000ac,0x00000198,0x0004003d,0x00000006,0x00000262,0x00000261, + 0x0003003e,0x0000025e,0x00000262,0x000200f9,0x00000260,0x000200f8,0x00000263,0x0003003e, + 0x0000025e,0x00000150,0x000200f9,0x00000260,0x000200f8,0x00000260,0x0004003d,0x00000006, + 0x00000264,0x0000025e,0x00050041,0x00000007,0x00000265,0x000000ac,0x00000198,0x0003003e, + 0x00000265,0x00000264,0x00050041,0x00000007,0x00000266,0x000000ac,0x00000198,0x0004003d, + 0x00000006,0x00000267,0x00000266,0x00050041,0x0000000f,0x00000268,0x000000ac,0x00000192, + 0x0004003d,0x0000000e,0x00000269,0x00000268,0x00060050,0x0000000e,0x0000026a,0x00000267, + 0x00000267,0x00000267,0x00050088,0x0000000e,0x0000026b,0x00000269,0x0000026a,0x00050041, + 0x0000000f,0x0000026c,0x000000ac,0x00000192,0x0003003e,0x0000026c,0x0000026b,0x00050041, + 0x00000007,0x0000026d,0x000000ac,0x00000198,0x0004003d,0x00000006,0x0000026e,0x0000026d, + 0x00050041,0x0000000f,0x0000026f,0x000000ac,0x0000022f,0x0004003d,0x0000000e,0x00000270, + 0x0000026f,0x00060050,0x0000000e,0x00000271,0x0000026e,0x0000026e,0x0000026e,0x00050088, + 0x0000000e,0x00000272,0x00000270,0x00000271,0x00050041,0x0000000f,0x00000273,0x000000ac, + 0x0000022f,0x0003003e,0x00000273,0x00000272,0x00050041,0x0000000f,0x00000275,0x000000ac, + 0x0000022f,0x0004003d,0x0000000e,0x00000276,0x00000275,0x00050041,0x0000000f,0x00000277, + 0x000000ac,0x00000192,0x0004003d,0x0000000e,0x00000278,0x00000277,0x00050041,0x0000000f, + 0x00000279,0x000000ac,0x00000192,0x0004003d,0x0000000e,0x0000027a,0x00000279,0x00050085, + 0x0000000e,0x0000027b,0x00000278,0x0000027a,0x00050083,0x0000000e,0x0000027c,0x00000276, + 0x0000027b,0x0006000c,0x0000000e,0x0000027d,0x00000001,0x00000004,0x0000027c,0x0006000c, + 0x0000000e,0x0000027e,0x00000001,0x0000001f,0x0000027d,0x0003003e,0x00000274,0x0000027e, + 0x0004003d,0x0000000e,0x0000027f,0x00000274,0x00050041,0x0000000f,0x00000280,0x000000ac, + 0x0000022f,0x0003003e,0x00000280,0x0000027f,0x000100fd,0x00010038,0x00050036,0x0000000e, + 0x000000b1,0x00000000,0x000000af,0x00030037,0x0000000f,0x000000b0,0x000200f8,0x000000b2, + 0x0004003b,0x0000000f,0x00000281,0x00000007,0x00050041,0x00000007,0x00000282,0x000000b0, + 0x000001eb,0x0004003d,0x00000006,0x00000283,0x00000282,0x00050041,0x00000007,0x00000285, + 0x000000b0,0x00000284,0x0004003d,0x00000006,0x00000286,0x00000285,0x00050081,0x00000006, + 0x00000287,0x00000283,0x00000286,0x00050041,0x00000007,0x00000289,0x000000b0,0x00000288, + 0x0004003d,0x00000006,0x0000028a,0x00000289,0x00050083,0x00000006,0x0000028b,0x00000287, + 0x0000028a,0x00050041,0x00000007,0x0000028c,0x000000b0,0x000001eb,0x0004003d,0x00000006, + 0x0000028d,0x0000028c,0x00050041,0x00000007,0x0000028e,0x000000b0,0x00000288,0x0004003d, + 0x00000006,0x0000028f,0x0000028e,0x00050081,0x00000006,0x00000290,0x0000028d,0x0000028f, + 0x00050041,0x00000007,0x00000291,0x000000b0,0x000001eb,0x0004003d,0x00000006,0x00000292, + 0x00000291,0x00050041,0x00000007,0x00000293,0x000000b0,0x00000284,0x0004003d,0x00000006, + 0x00000294,0x00000293,0x00050083,0x00000006,0x00000295,0x00000292,0x00000294,0x00050041, + 0x00000007,0x00000296,0x000000b0,0x00000288,0x0004003d,0x00000006,0x00000297,0x00000296, + 0x00050083,0x00000006,0x00000298,0x00000295,0x00000297,0x00060050,0x0000000e,0x00000299, + 0x0000028b,0x00000290,0x00000298,0x0003003e,0x00000281,0x00000299,0x0004003d,0x0000000e, + 0x0000029a,0x00000281,0x000200fe,0x0000029a,0x00010038,0x00050036,0x0000000e,0x000000b4, + 0x00000000,0x000000af,0x00030037,0x0000000f,0x000000b3,0x000200f8,0x000000b5,0x0004003b, + 0x0000000f,0x0000029d,0x00000007,0x00050041,0x00000007,0x0000029f,0x000000b3,0x000001eb, + 0x0004003d,0x00000006,0x000002a0,0x0000029f,0x00050085,0x00000006,0x000002a1,0x0000029e, + 0x000002a0,0x00050041,0x00000007,0x000002a3,0x000000b3,0x00000284,0x0004003d,0x00000006, + 0x000002a4,0x000002a3,0x00050085,0x00000006,0x000002a5,0x000002a2,0x000002a4,0x00050081, + 0x00000006,0x000002a6,0x000002a1,0x000002a5,0x00050041,0x00000007,0x000002a7,0x000000b3, + 0x00000288,0x0004003d,0x00000006,0x000002a8,0x000002a7,0x00050085,0x00000006,0x000002a9, + 0x0000029e,0x000002a8,0x00050081,0x00000006,0x000002aa,0x000002a6,0x000002a9,0x00050041, + 0x00000007,0x000002ab,0x000000b3,0x000001eb,0x0004003d,0x00000006,0x000002ac,0x000002ab, + 0x00050085,0x00000006,0x000002ad,0x000002a2,0x000002ac,0x00050041,0x00000007,0x000002ae, + 0x000000b3,0x00000288,0x0004003d,0x00000006,0x000002af,0x000002ae,0x00050085,0x00000006, + 0x000002b0,0x000002a2,0x000002af,0x00050083,0x00000006,0x000002b1,0x000002ad,0x000002b0, + 0x00050041,0x00000007,0x000002b3,0x000000b3,0x000001eb,0x0004003d,0x00000006,0x000002b4, + 0x000002b3,0x00050085,0x00000006,0x000002b5,0x000002b2,0x000002b4,0x00050041,0x00000007, + 0x000002b6,0x000000b3,0x00000284,0x0004003d,0x00000006,0x000002b7,0x000002b6,0x00050085, + 0x00000006,0x000002b8,0x000002a2,0x000002b7,0x00050081,0x00000006,0x000002b9,0x000002b5, + 0x000002b8,0x00050041,0x00000007,0x000002ba,0x000000b3,0x00000288,0x0004003d,0x00000006, + 0x000002bb,0x000002ba,0x00050085,0x00000006,0x000002bc,0x0000029e,0x000002bb,0x00050083, + 0x00000006,0x000002bd,0x000002b9,0x000002bc,0x00060050,0x0000000e,0x000002be,0x000002aa, + 0x000002b1,0x000002bd,0x0003003e,0x0000029d,0x000002be,0x0004003d,0x0000000e,0x000002bf, + 0x0000029d,0x000200fe,0x000002bf,0x00010038,0x00050036,0x0000000e,0x000000b7,0x00000000, + 0x000000af,0x00030037,0x0000000f,0x000000b6,0x000200f8,0x000000b8,0x0004003b,0x00000007, + 0x000002c3,0x00000007,0x0004003b,0x00000007,0x000002c4,0x00000007,0x0004003b,0x00000007, + 0x000002c8,0x00000007,0x0004003b,0x00000007,0x000002cb,0x00000007,0x0004003b,0x00000007, + 0x000002cf,0x00000007,0x0004003b,0x00000007,0x000002d0,0x00000007,0x0004003d,0x0000000e, + 0x000002c2,0x000000b6,0x0003003e,0x000002c3,0x0000014f,0x00050041,0x00000007,0x000002c5, + 0x000000b6,0x000001eb,0x0004003d,0x00000006,0x000002c6,0x000002c5,0x0003003e,0x000002c4, + 0x000002c6,0x00060039,0x00000006,0x000002c7,0x0000003f,0x000002c3,0x000002c4,0x00050041, + 0x00000007,0x000002c9,0x000000b6,0x00000284,0x0004003d,0x00000006,0x000002ca,0x000002c9, + 0x0003003e,0x000002c8,0x000002ca,0x00050041,0x00000007,0x000002cc,0x000000b6,0x00000288, + 0x0004003d,0x00000006,0x000002cd,0x000002cc,0x0003003e,0x000002cb,0x000002cd,0x00060039, + 0x00000006,0x000002ce,0x0000003f,0x000002c8,0x000002cb,0x0003003e,0x000002cf,0x000002c7, + 0x0003003e,0x000002d0,0x000002ce,0x00060039,0x00000006,0x000002d1,0x0000003f,0x000002cf, + 0x000002d0,0x00050081,0x00000006,0x000002d2,0x000002d1,0x00000150,0x00060050,0x0000000e, + 0x000002d3,0x000002d2,0x000002d2,0x000002d2,0x00050088,0x0000000e,0x000002d4,0x000002c2, + 0x000002d3,0x000200fe,0x000002d4,0x00010038,0x00050036,0x0000000e,0x000000ba,0x00000000, + 0x000000af,0x00030037,0x0000000f,0x000000b9,0x000200f8,0x000000bb,0x0004003b,0x00000007, + 0x000002d9,0x00000007,0x0004003b,0x00000007,0x000002dc,0x00000007,0x0004003b,0x00000007, + 0x000002e0,0x00000007,0x0004003b,0x00000007,0x000002e3,0x00000007,0x0004003b,0x00000007, + 0x000002e6,0x00000007,0x0004003b,0x00000007,0x000002e7,0x00000007,0x0004003d,0x0000000e, + 0x000002d7,0x000000b9,0x00050041,0x00000007,0x000002da,0x000000b9,0x00000284,0x0004003d, + 0x00000006,0x000002db,0x000002da,0x0003003e,0x000002d9,0x000002db,0x00050041,0x00000007, + 0x000002dd,0x000000b9,0x00000288,0x0004003d,0x00000006,0x000002de,0x000002dd,0x0003003e, + 0x000002dc,0x000002de,0x00060039,0x00000006,0x000002df,0x0000003f,0x000002d9,0x000002dc, + 0x00050041,0x00000007,0x000002e1,0x000000b9,0x000001eb,0x0004003d,0x00000006,0x000002e2, + 0x000002e1,0x0003003e,0x000002e0,0x000002e2,0x0003003e,0x000002e3,0x000002df,0x00060039, + 0x00000006,0x000002e4,0x0000003f,0x000002e0,0x000002e3,0x00050083,0x00000006,0x000002e5, + 0x00000150,0x000002e4,0x0003003e,0x000002e6,0x000002d8,0x0003003e,0x000002e7,0x000002e5, + 0x00060039,0x00000006,0x000002e8,0x0000003f,0x000002e6,0x000002e7,0x00060050,0x0000000e, + 0x000002e9,0x000002e8,0x000002e8,0x000002e8,0x00050088,0x0000000e,0x000002ea,0x000002d7, + 0x000002e9,0x000200fe,0x000002ea,0x00010038,0x00050036,0x000000a2,0x000000be,0x00000000, + 0x000000bc,0x00030037,0x0000001b,0x000000bd,0x000200f8,0x000000bf,0x00050041,0x00000007, + 0x000002ed,0x000000bd,0x000001eb,0x0004003d,0x00000006,0x000002ee,0x000002ed,0x000500be, + 0x000000a2,0x000002ef,0x000002ee,0x0000014f,0x000300f7,0x000002f1,0x00000000,0x000400fa, + 0x000002ef,0x000002f0,0x000002f1,0x000200f8,0x000002f0,0x00050041,0x00000007,0x000002f2, + 0x000000bd,0x000001eb,0x0004003d,0x00000006,0x000002f3,0x000002f2,0x000500bc,0x000000a2, + 0x000002f4,0x000002f3,0x00000150,0x000200f9,0x000002f1,0x000200f8,0x000002f1,0x000700f5, + 0x000000a2,0x000002f5,0x000002ef,0x000000bf,0x000002f4,0x000002f0,0x000300f7,0x000002f7, + 0x00000000,0x000400fa,0x000002f5,0x000002f6,0x000002f7,0x000200f8,0x000002f6,0x00050041, + 0x00000007,0x000002f8,0x000000bd,0x00000284,0x0004003d,0x00000006,0x000002f9,0x000002f8, + 0x000500be,0x000000a2,0x000002fa,0x000002f9,0x0000014f,0x000300f7,0x000002fc,0x00000000, + 0x000400fa,0x000002fa,0x000002fb,0x000002fc,0x000200f8,0x000002fb,0x00050041,0x00000007, + 0x000002fd,0x000000bd,0x00000284,0x0004003d,0x00000006,0x000002fe,0x000002fd,0x000500bc, + 0x000000a2,0x000002ff,0x000002fe,0x00000150,0x000200f9,0x000002fc,0x000200f8,0x000002fc, + 0x000700f5,0x000000a2,0x00000300,0x000002fa,0x000002f6,0x000002ff,0x000002fb,0x000200f9, + 0x000002f7,0x000200f8,0x000002f7,0x000700f5,0x000000a2,0x00000301,0x000002f5,0x000002f1, + 0x00000300,0x000002fc,0x000200fe,0x00000301,0x00010038,0x00050036,0x00000055,0x000000c4, + 0x00000000,0x000000c0,0x00030037,0x0000006d,0x000000c1,0x00030037,0x0000006d,0x000000c2, + 0x00030037,0x0000006d,0x000000c3,0x000200f8,0x000000c5,0x0004003b,0x0000006d,0x00000304, + 0x00000007,0x0004003b,0x00000037,0x0000030b,0x00000007,0x0004003b,0x00000037,0x0000030e, + 0x00000007,0x0004003b,0x00000037,0x00000310,0x00000007,0x0004003b,0x00000037,0x00000311, + 0x00000007,0x0004003b,0x00000037,0x00000317,0x00000007,0x0004003b,0x00000037,0x0000031a, + 0x00000007,0x0004003b,0x00000037,0x0000031c,0x00000007,0x0004003b,0x00000037,0x0000031d, + 0x00000007,0x0004003d,0x00000055,0x00000305,0x000000c1,0x0004003d,0x00000055,0x00000306, + 0x000000c2,0x00050080,0x00000055,0x00000307,0x00000305,0x00000306,0x0003003e,0x00000304, + 0x00000307,0x00050041,0x00000037,0x00000308,0x000000c3,0x000001eb,0x0004003d,0x00000036, + 0x00000309,0x00000308,0x00050082,0x00000036,0x0000030a,0x00000309,0x0000022f,0x00050041, + 0x00000037,0x0000030c,0x00000304,0x000001eb,0x0004003d,0x00000036,0x0000030d,0x0000030c, + 0x0003003e,0x0000030b,0x0000030d,0x0003003e,0x0000030e,0x0000030a,0x00060039,0x00000036, + 0x0000030f,0x0000003b,0x0000030b,0x0000030e,0x0003003e,0x00000310,0x00000192,0x0003003e, + 0x00000311,0x0000030f,0x00060039,0x00000036,0x00000312,0x0000004f,0x00000310,0x00000311, + 0x00050041,0x00000037,0x00000313,0x00000304,0x000001eb,0x0003003e,0x00000313,0x00000312, + 0x00050041,0x00000037,0x00000314,0x000000c3,0x00000284,0x0004003d,0x00000036,0x00000315, + 0x00000314,0x00050082,0x00000036,0x00000316,0x00000315,0x0000022f,0x00050041,0x00000037, + 0x00000318,0x00000304,0x00000284,0x0004003d,0x00000036,0x00000319,0x00000318,0x0003003e, + 0x00000317,0x00000319,0x0003003e,0x0000031a,0x00000316,0x00060039,0x00000036,0x0000031b, + 0x0000003b,0x00000317,0x0000031a,0x0003003e,0x0000031c,0x00000192,0x0003003e,0x0000031d, + 0x0000031b,0x00060039,0x00000036,0x0000031e,0x0000004f,0x0000031c,0x0000031d,0x00050041, + 0x00000037,0x0000031f,0x00000304,0x00000284,0x0003003e,0x0000031f,0x0000031e,0x0004003d, + 0x00000055,0x00000320,0x00000304,0x000200fe,0x00000320,0x00010038,0x00050036,0x0000001a, + 0x000000ca,0x00000000,0x000000c6,0x00030037,0x0000001b,0x000000c7,0x00030037,0x0000006d, + 0x000000c8,0x00030037,0x0000006d,0x000000c9,0x000200f8,0x000000cb,0x0004003b,0x0000001b, + 0x00000323,0x00000007,0x0004003b,0x0000001b,0x00000328,0x00000007,0x0004003b,0x0000001b, + 0x0000032d,0x00000007,0x0004003b,0x0000001b,0x0000032f,0x00000007,0x0004003b,0x0000001b, + 0x00000331,0x00000007,0x0004003b,0x0000001b,0x00000332,0x00000007,0x0004003b,0x0000001b, + 0x00000334,0x00000007,0x0004003d,0x0000001a,0x00000324,0x000000c7,0x0004003d,0x00000055, + 0x00000325,0x000000c8,0x0004006f,0x0000001a,0x00000326,0x00000325,0x00050085,0x0000001a, + 0x00000327,0x00000324,0x00000326,0x0003003e,0x00000323,0x00000327,0x0004003d,0x00000055, + 0x0000032a,0x000000c8,0x0004006f,0x0000001a,0x0000032b,0x0000032a,0x00050083,0x0000001a, + 0x0000032c,0x0000032b,0x00000329,0x0004003d,0x0000001a,0x0000032e,0x00000323,0x0003003e, + 0x0000032d,0x0000032e,0x0003003e,0x0000032f,0x0000032c,0x00060039,0x0000001a,0x00000330, + 0x00000028,0x0000032d,0x0000032f,0x0003003e,0x00000331,0x00000329,0x0003003e,0x00000332, + 0x00000330,0x00060039,0x0000001a,0x00000333,0x00000043,0x00000331,0x00000332,0x0003003e, + 0x00000328,0x00000333,0x0004003d,0x0000001a,0x00000335,0x00000328,0x0004003d,0x00000055, + 0x00000336,0x000000c9,0x0004006f,0x0000001a,0x00000337,0x00000336,0x00050088,0x0000001a, + 0x00000338,0x00000335,0x00000337,0x0003003e,0x00000334,0x00000338,0x0004003d,0x0000001a, + 0x00000339,0x00000334,0x000200fe,0x00000339,0x00010038,0x00050036,0x000000a2,0x000000cf, + 0x00000000,0x000000cc,0x00030037,0x0000006d,0x000000cd,0x00030037,0x0000006d,0x000000ce, + 0x000200f8,0x000000d0,0x0004003d,0x00000055,0x0000033c,0x000000cd,0x0004007c,0x0000033d, + 0x0000033e,0x0000033c,0x0004003d,0x00000055,0x0000033f,0x000000ce,0x0004007c,0x0000033d, + 0x00000340,0x0000033f,0x000500b0,0x00000341,0x00000342,0x0000033e,0x00000340,0x0004009b, + 0x000000a2,0x00000343,0x00000342,0x000200fe,0x00000343,0x00010038,0x00050036,0x00000006, + 0x000000d2,0x00000000,0x00000016,0x00030037,0x00000007,0x000000d1,0x000200f8,0x000000d3, + 0x0004003b,0x00000007,0x00000349,0x00000007,0x0004003d,0x00000006,0x00000346,0x000000d1, + 0x0006000c,0x00000006,0x00000347,0x00000001,0x00000004,0x00000346,0x000500b8,0x000000a2, + 0x00000348,0x00000347,0x000002d8,0x000300f7,0x0000034b,0x00000000,0x000400fa,0x00000348, + 0x0000034a,0x0000034c,0x000200f8,0x0000034a,0x0003003e,0x00000349,0x00000150,0x000200f9, + 0x0000034b,0x000200f8,0x0000034c,0x0004003d,0x00000006,0x0000034e,0x000000d1,0x00050085, + 0x00000006,0x0000034f,0x0000034d,0x0000034e,0x0006000c,0x00000006,0x00000350,0x00000001, + 0x0000000d,0x0000034f,0x0004003d,0x00000006,0x00000351,0x000000d1,0x00050085,0x00000006, + 0x00000352,0x0000034d,0x00000351,0x00050088,0x00000006,0x00000353,0x00000350,0x00000352, + 0x0004003d,0x00000006,0x00000355,0x000000d1,0x00050085,0x00000006,0x00000356,0x00000354, + 0x00000355,0x0006000c,0x00000006,0x00000357,0x00000001,0x0000000d,0x00000356,0x0004003d, + 0x00000006,0x00000358,0x000000d1,0x00050085,0x00000006,0x00000359,0x00000354,0x00000358, + 0x00050088,0x00000006,0x0000035a,0x00000357,0x00000359,0x00050085,0x00000006,0x0000035b, + 0x00000353,0x0000035a,0x0003003e,0x00000349,0x0000035b,0x000200f9,0x0000034b,0x000200f8, + 0x0000034b,0x0004003d,0x00000006,0x0000035c,0x00000349,0x000200fe,0x0000035c,0x00010038, + 0x00050036,0x00000006,0x000000d5,0x00000000,0x00000016,0x00030037,0x00000007,0x000000d4, + 0x000200f8,0x000000d6,0x0004003b,0x00000007,0x00000362,0x00000007,0x0004003b,0x00000007, + 0x00000363,0x00000007,0x0004003b,0x00000007,0x00000365,0x00000007,0x0004003d,0x00000006, + 0x0000035f,0x000000d4,0x0006000c,0x00000006,0x00000360,0x00000001,0x00000004,0x0000035f, + 0x0003003e,0x00000362,0x00000360,0x0003003e,0x00000363,0x00000361,0x00060039,0x00000006, + 0x00000364,0x00000023,0x00000362,0x00000363,0x0003003e,0x000000d4,0x00000364,0x0004003d, + 0x00000006,0x00000366,0x000000d4,0x0003003e,0x00000365,0x00000366,0x00050039,0x00000006, + 0x00000367,0x000000d2,0x00000365,0x000200fe,0x00000367,0x00010038,0x00050036,0x00000006, + 0x000000d8,0x00000000,0x00000016,0x00030037,0x00000007,0x000000d7,0x000200f8,0x000000d9, + 0x0004003b,0x00000007,0x0000036a,0x00000007,0x0004003b,0x00000007,0x0000036f,0x00000007, + 0x0004003d,0x00000006,0x0000036c,0x000000d7,0x00050085,0x00000006,0x0000036d,0x0000036b, + 0x0000036c,0x00050083,0x00000006,0x0000036e,0x0000036d,0x00000150,0x0003003e,0x0000036a, + 0x0000036e,0x0004003d,0x00000006,0x00000370,0x000000d7,0x00050085,0x00000006,0x00000371, + 0x0000029e,0x00000370,0x00050083,0x00000006,0x00000372,0x00000371,0x00000150,0x0003003e, + 0x0000036f,0x00000372,0x0004003d,0x00000006,0x00000374,0x0000036a,0x00050085,0x00000006, + 0x00000375,0x00000373,0x00000374,0x0004003d,0x00000006,0x00000376,0x0000036a,0x00050085, + 0x00000006,0x00000377,0x00000375,0x00000376,0x00050083,0x00000006,0x00000379,0x00000377, + 0x00000378,0x0004003d,0x00000006,0x0000037a,0x0000036f,0x0004003d,0x00000006,0x0000037b, + 0x0000036f,0x00050085,0x00000006,0x0000037c,0x0000037a,0x0000037b,0x00050085,0x00000006, + 0x0000037d,0x00000379,0x0000037c,0x000200fe,0x0000037d,0x00010038,0x00050036,0x00000006, + 0x000000db,0x00000000,0x00000016,0x00030037,0x00000007,0x000000da,0x000200f8,0x000000dc, + 0x0004003b,0x00000007,0x00000381,0x00000007,0x0004003b,0x00000007,0x00000383,0x00000007, + 0x0004003b,0x00000007,0x00000385,0x00000007,0x0004003d,0x00000006,0x00000382,0x000000da, + 0x0003003e,0x00000381,0x00000382,0x0003003e,0x00000383,0x00000380,0x00060039,0x00000006, + 0x00000384,0x00000023,0x00000381,0x00000383,0x0003003e,0x000000da,0x00000384,0x0004003d, + 0x00000006,0x00000386,0x000000da,0x0003003e,0x00000385,0x00000386,0x00050039,0x00000006, + 0x00000387,0x000000d8,0x00000385,0x000200fe,0x00000387,0x00010038,0x00050036,0x0000002f, + 0x000000e3,0x00000000,0x000000dd,0x00030037,0x00000030,0x000000de,0x00030037,0x00000030, + 0x000000df,0x00030037,0x00000030,0x000000e0,0x00030037,0x00000030,0x000000e1,0x00030037, + 0x00000007,0x000000e2,0x000200f8,0x000000e4,0x0004003b,0x00000007,0x0000038a,0x00000007, + 0x0004003b,0x00000007,0x0000038e,0x00000007,0x0004003b,0x00000007,0x00000390,0x00000007, + 0x0004003b,0x00000007,0x00000394,0x00000007,0x0004003b,0x00000007,0x00000396,0x00000007, + 0x0004003b,0x00000007,0x00000399,0x00000007,0x0004003b,0x00000007,0x0000039b,0x00000007, + 0x0004003b,0x00000007,0x0000039e,0x00000007,0x0004003d,0x00000006,0x0000038c,0x000000e2, + 0x00050083,0x00000006,0x0000038d,0x0000038b,0x0000038c,0x0003003e,0x0000038e,0x0000038d, + 0x00050039,0x00000006,0x0000038f,0x000000d5,0x0000038e,0x0003003e,0x0000038a,0x0000038f, + 0x0004003d,0x00000006,0x00000392,0x000000e2,0x00050083,0x00000006,0x00000393,0x00000391, + 0x00000392,0x0003003e,0x00000394,0x00000393,0x00050039,0x00000006,0x00000395,0x000000d5, + 0x00000394,0x0003003e,0x00000390,0x00000395,0x0004003d,0x00000006,0x00000397,0x000000e2, + 0x00050083,0x00000006,0x00000398,0x00000150,0x00000397,0x0003003e,0x00000399,0x00000398, + 0x00050039,0x00000006,0x0000039a,0x000000d5,0x00000399,0x0003003e,0x00000396,0x0000039a, + 0x0004003d,0x00000006,0x0000039c,0x000000e2,0x00050083,0x00000006,0x0000039d,0x00000361, + 0x0000039c,0x0003003e,0x0000039e,0x0000039d,0x00050039,0x00000006,0x0000039f,0x000000d5, + 0x0000039e,0x0003003e,0x0000039b,0x0000039f,0x0004003d,0x00000006,0x000003a0,0x0000038a, + 0x0004003d,0x0000002f,0x000003a1,0x000000de,0x0005008e,0x0000002f,0x000003a2,0x000003a1, + 0x000003a0,0x0004003d,0x00000006,0x000003a3,0x00000390,0x0004003d,0x0000002f,0x000003a4, + 0x000000df,0x0005008e,0x0000002f,0x000003a5,0x000003a4,0x000003a3,0x00050081,0x0000002f, + 0x000003a6,0x000003a2,0x000003a5,0x0004003d,0x00000006,0x000003a7,0x00000396,0x0004003d, + 0x0000002f,0x000003a8,0x000000e0,0x0005008e,0x0000002f,0x000003a9,0x000003a8,0x000003a7, + 0x00050081,0x0000002f,0x000003aa,0x000003a6,0x000003a9,0x0004003d,0x00000006,0x000003ab, + 0x0000039b,0x0004003d,0x0000002f,0x000003ac,0x000000e1,0x0005008e,0x0000002f,0x000003ad, + 0x000003ac,0x000003ab,0x00050081,0x0000002f,0x000003ae,0x000003aa,0x000003ad,0x0004003d, + 0x00000006,0x000003af,0x0000038a,0x0004003d,0x00000006,0x000003b0,0x00000390,0x00050081, + 0x00000006,0x000003b1,0x000003af,0x000003b0,0x0004003d,0x00000006,0x000003b2,0x00000396, + 0x00050081,0x00000006,0x000003b3,0x000003b1,0x000003b2,0x0004003d,0x00000006,0x000003b4, + 0x0000039b,0x00050081,0x00000006,0x000003b5,0x000003b3,0x000003b4,0x00070050,0x0000002f, + 0x000003b6,0x000003b5,0x000003b5,0x000003b5,0x000003b5,0x00050088,0x0000002f,0x000003b7, + 0x000003ae,0x000003b6,0x000200fe,0x000003b7,0x00010038,0x00050036,0x0000002f,0x000000ea, + 0x00000000,0x000000e7,0x00030037,0x000000e6,0x000000e8,0x00030037,0x0000001b,0x000000e9, + 0x000200f8,0x000000eb,0x0004003b,0x00000030,0x000003ba,0x00000007,0x0004003b,0x00000030, + 0x000003bb,0x00000007,0x0004003b,0x00000030,0x000003be,0x00000007,0x0004003b,0x00000030, + 0x000003c1,0x00000007,0x0004003b,0x00000030,0x000003c4,0x00000007,0x0004003b,0x00000007, + 0x000003c7,0x00000007,0x0004003b,0x00000030,0x000003cb,0x00000007,0x0004003b,0x00000030, + 0x000003ce,0x00000007,0x0004003b,0x00000030,0x000003d1,0x00000007,0x0004003b,0x00000030, + 0x000003d4,0x00000007,0x0004003b,0x00000030,0x000003d7,0x00000007,0x0004003b,0x00000007, + 0x000003da,0x00000007,0x0004003b,0x00000030,0x000003de,0x00000007,0x0004003b,0x00000030, + 0x000003e2,0x00000007,0x0004003b,0x00000030,0x000003e5,0x00000007,0x0004003b,0x00000030, + 0x000003e8,0x00000007,0x0004003b,0x00000030,0x000003eb,0x00000007,0x0004003b,0x00000007, + 0x000003ee,0x00000007,0x0004003b,0x00000030,0x000003f2,0x00000007,0x0004003b,0x00000030, + 0x000003f5,0x00000007,0x0004003b,0x00000030,0x000003f8,0x00000007,0x0004003b,0x00000030, + 0x000003fb,0x00000007,0x0004003b,0x00000030,0x000003fe,0x00000007,0x0004003b,0x00000007, + 0x00000401,0x00000007,0x0004003b,0x00000030,0x00000405,0x00000007,0x0004003b,0x00000030, + 0x00000406,0x00000007,0x0004003b,0x00000030,0x00000408,0x00000007,0x0004003b,0x00000030, + 0x0000040a,0x00000007,0x0004003b,0x00000030,0x0000040c,0x00000007,0x0004003b,0x00000007, + 0x0000040e,0x00000007,0x0004003b,0x00000414,0x00000415,0x00000007,0x0004003b,0x00000030, + 0x0000041f,0x00000007,0x0004003b,0x00000030,0x00000422,0x00000007,0x0004003b,0x00000037, + 0x00000425,0x00000007,0x0004003b,0x00000030,0x0000042e,0x00000007,0x0004003b,0x00000030, + 0x00000430,0x00000007,0x0004003b,0x00000030,0x00000435,0x00000007,0x0004003b,0x00000030, + 0x00000437,0x00000007,0x00050041,0x00000030,0x000003bc,0x000000e8,0x00000192,0x0004003d, + 0x0000002f,0x000003bd,0x000003bc,0x0003003e,0x000003bb,0x000003bd,0x00050041,0x00000030, + 0x000003bf,0x000000e8,0x0000022f,0x0004003d,0x0000002f,0x000003c0,0x000003bf,0x0003003e, + 0x000003be,0x000003c0,0x00050041,0x00000030,0x000003c2,0x000000e8,0x0000019d,0x0004003d, + 0x0000002f,0x000003c3,0x000003c2,0x0003003e,0x000003c1,0x000003c3,0x00050041,0x00000030, + 0x000003c5,0x000000e8,0x000001a2,0x0004003d,0x0000002f,0x000003c6,0x000003c5,0x0003003e, + 0x000003c4,0x000003c6,0x00050041,0x00000007,0x000003c8,0x000000e9,0x000001eb,0x0004003d, + 0x00000006,0x000003c9,0x000003c8,0x0003003e,0x000003c7,0x000003c9,0x00090039,0x0000002f, + 0x000003ca,0x000000e3,0x000003bb,0x000003be,0x000003c1,0x000003c4,0x000003c7,0x0003003e, + 0x000003ba,0x000003ca,0x00050041,0x00000030,0x000003cf,0x000000e8,0x00000198,0x0004003d, + 0x0000002f,0x000003d0,0x000003cf,0x0003003e,0x000003ce,0x000003d0,0x00050041,0x00000030, + 0x000003d2,0x000000e8,0x000003cc,0x0004003d,0x0000002f,0x000003d3,0x000003d2,0x0003003e, + 0x000003d1,0x000003d3,0x00050041,0x00000030,0x000003d5,0x000000e8,0x000003cd,0x0004003d, + 0x0000002f,0x000003d6,0x000003d5,0x0003003e,0x000003d4,0x000003d6,0x00050041,0x00000030, + 0x000003d8,0x000000e8,0x000001a7,0x0004003d,0x0000002f,0x000003d9,0x000003d8,0x0003003e, + 0x000003d7,0x000003d9,0x00050041,0x00000007,0x000003db,0x000000e9,0x000001eb,0x0004003d, + 0x00000006,0x000003dc,0x000003db,0x0003003e,0x000003da,0x000003dc,0x00090039,0x0000002f, + 0x000003dd,0x000000e3,0x000003ce,0x000003d1,0x000003d4,0x000003d7,0x000003da,0x0003003e, + 0x000003cb,0x000003dd,0x00050041,0x00000030,0x000003e3,0x000000e8,0x000003df,0x0004003d, + 0x0000002f,0x000003e4,0x000003e3,0x0003003e,0x000003e2,0x000003e4,0x00050041,0x00000030, + 0x000003e6,0x000000e8,0x000003e0,0x0004003d,0x0000002f,0x000003e7,0x000003e6,0x0003003e, + 0x000003e5,0x000003e7,0x00050041,0x00000030,0x000003e9,0x000000e8,0x000001ad,0x0004003d, + 0x0000002f,0x000003ea,0x000003e9,0x0003003e,0x000003e8,0x000003ea,0x00050041,0x00000030, + 0x000003ec,0x000000e8,0x000003e1,0x0004003d,0x0000002f,0x000003ed,0x000003ec,0x0003003e, + 0x000003eb,0x000003ed,0x00050041,0x00000007,0x000003ef,0x000000e9,0x000001eb,0x0004003d, + 0x00000006,0x000003f0,0x000003ef,0x0003003e,0x000003ee,0x000003f0,0x00090039,0x0000002f, + 0x000003f1,0x000000e3,0x000003e2,0x000003e5,0x000003e8,0x000003eb,0x000003ee,0x0003003e, + 0x000003de,0x000003f1,0x00050041,0x00000030,0x000003f6,0x000000e8,0x000003f3,0x0004003d, + 0x0000002f,0x000003f7,0x000003f6,0x0003003e,0x000003f5,0x000003f7,0x00050041,0x00000030, + 0x000003f9,0x000000e8,0x000001b2,0x0004003d,0x0000002f,0x000003fa,0x000003f9,0x0003003e, + 0x000003f8,0x000003fa,0x00050041,0x00000030,0x000003fc,0x000000e8,0x000003f4,0x0004003d, + 0x0000002f,0x000003fd,0x000003fc,0x0003003e,0x000003fb,0x000003fd,0x00050041,0x00000030, + 0x000003ff,0x000000e8,0x000001b8,0x0004003d,0x0000002f,0x00000400,0x000003ff,0x0003003e, + 0x000003fe,0x00000400,0x00050041,0x00000007,0x00000402,0x000000e9,0x000001eb,0x0004003d, + 0x00000006,0x00000403,0x00000402,0x0003003e,0x00000401,0x00000403,0x00090039,0x0000002f, + 0x00000404,0x000000e3,0x000003f5,0x000003f8,0x000003fb,0x000003fe,0x00000401,0x0003003e, + 0x000003f2,0x00000404,0x0004003d,0x0000002f,0x00000407,0x000003ba,0x0003003e,0x00000406, + 0x00000407,0x0004003d,0x0000002f,0x00000409,0x000003cb,0x0003003e,0x00000408,0x00000409, + 0x0004003d,0x0000002f,0x0000040b,0x000003de,0x0003003e,0x0000040a,0x0000040b,0x0004003d, + 0x0000002f,0x0000040d,0x000003f2,0x0003003e,0x0000040c,0x0000040d,0x00050041,0x00000007, + 0x0000040f,0x000000e9,0x00000284,0x0004003d,0x00000006,0x00000410,0x0000040f,0x0003003e, + 0x0000040e,0x00000410,0x00090039,0x0000002f,0x00000411,0x000000e3,0x00000406,0x00000408, + 0x0000040a,0x0000040c,0x0000040e,0x0003003e,0x00000405,0x00000411,0x00050041,0x00000030, + 0x00000416,0x000000e8,0x000003cc,0x0004003d,0x0000002f,0x00000417,0x00000416,0x00050041, + 0x00000030,0x00000418,0x000000e8,0x000003cd,0x0004003d,0x0000002f,0x00000419,0x00000418, + 0x00050041,0x00000030,0x0000041a,0x000000e8,0x000003e0,0x0004003d,0x0000002f,0x0000041b, + 0x0000041a,0x00050041,0x00000030,0x0000041c,0x000000e8,0x000001ad,0x0004003d,0x0000002f, + 0x0000041d,0x0000041c,0x00070050,0x00000413,0x0000041e,0x00000417,0x00000419,0x0000041b, + 0x0000041d,0x0003003e,0x00000415,0x0000041e,0x00050041,0x00000030,0x00000420,0x00000415, + 0x00000192,0x0004003d,0x0000002f,0x00000421,0x00000420,0x0003003e,0x0000041f,0x00000421, + 0x00050041,0x00000030,0x00000423,0x00000415,0x00000192,0x0004003d,0x0000002f,0x00000424, + 0x00000423,0x0003003e,0x00000422,0x00000424,0x0003003e,0x00000425,0x0000022f,0x000200f9, + 0x00000426,0x000200f8,0x00000426,0x000400f6,0x00000428,0x00000429,0x00000000,0x000200f9, + 0x0000042a,0x000200f8,0x0000042a,0x0004003d,0x00000036,0x0000042b,0x00000425,0x000500b1, + 0x000000a2,0x0000042c,0x0000042b,0x00000198,0x000400fa,0x0000042c,0x00000427,0x00000428, + 0x000200f8,0x00000427,0x0004003d,0x00000036,0x0000042d,0x00000425,0x0004003d,0x0000002f, + 0x0000042f,0x0000041f,0x0003003e,0x0000042e,0x0000042f,0x00050041,0x00000030,0x00000431, + 0x00000415,0x0000042d,0x0004003d,0x0000002f,0x00000432,0x00000431,0x0003003e,0x00000430, + 0x00000432,0x00060039,0x0000002f,0x00000433,0x00000034,0x0000042e,0x00000430,0x0003003e, + 0x0000041f,0x00000433,0x0004003d,0x00000036,0x00000434,0x00000425,0x0004003d,0x0000002f, + 0x00000436,0x00000422,0x0003003e,0x00000435,0x00000436,0x00050041,0x00000030,0x00000438, + 0x00000415,0x00000434,0x0004003d,0x0000002f,0x00000439,0x00000438,0x0003003e,0x00000437, + 0x00000439,0x00060039,0x0000002f,0x0000043a,0x0000004b,0x00000435,0x00000437,0x0003003e, + 0x00000422,0x0000043a,0x000200f9,0x00000429,0x000200f8,0x00000429,0x0004003d,0x00000036, + 0x0000043b,0x00000425,0x00050080,0x00000036,0x0000043c,0x0000043b,0x0000022f,0x0003003e, + 0x00000425,0x0000043c,0x000200f9,0x00000426,0x000200f8,0x00000428,0x0004003d,0x0000002f, + 0x0000043d,0x00000405,0x0004003d,0x0000002f,0x0000043e,0x0000041f,0x0004003d,0x0000002f, + 0x0000043f,0x00000422,0x0008000c,0x0000002f,0x00000440,0x00000001,0x0000002b,0x0000043d, + 0x0000043e,0x0000043f,0x0003003e,0x00000405,0x00000440,0x0004003d,0x0000002f,0x00000441, + 0x00000405,0x000200fe,0x00000441,0x00010038,0x00050036,0x00000055,0x000000ef,0x00000000, + 0x000000c0,0x00030037,0x0000006d,0x000000ec,0x00030037,0x0000006d,0x000000ed,0x00030037, + 0x0000006d,0x000000ee,0x000200f8,0x000000f0,0x0004003b,0x0000006d,0x00000444,0x00000007, + 0x0004003b,0x00000037,0x0000044b,0x00000007,0x0004003b,0x00000037,0x0000044e,0x00000007, + 0x0004003b,0x00000037,0x00000450,0x00000007,0x0004003b,0x00000037,0x00000451,0x00000007, + 0x0004003b,0x00000037,0x00000457,0x00000007,0x0004003b,0x00000037,0x0000045a,0x00000007, + 0x0004003b,0x00000037,0x0000045c,0x00000007,0x0004003b,0x00000037,0x0000045d,0x00000007, + 0x0004003d,0x00000055,0x00000445,0x000000ec,0x0004003d,0x00000055,0x00000446,0x000000ed, + 0x00050080,0x00000055,0x00000447,0x00000445,0x00000446,0x0003003e,0x00000444,0x00000447, + 0x00050041,0x00000037,0x00000448,0x000000ee,0x000001eb,0x0004003d,0x00000036,0x00000449, + 0x00000448,0x00050082,0x00000036,0x0000044a,0x00000449,0x0000019d,0x00050041,0x00000037, + 0x0000044c,0x00000444,0x000001eb,0x0004003d,0x00000036,0x0000044d,0x0000044c,0x0003003e, + 0x0000044b,0x0000044d,0x0003003e,0x0000044e,0x0000044a,0x00060039,0x00000036,0x0000044f, + 0x0000003b,0x0000044b,0x0000044e,0x0003003e,0x00000450,0x0000022f,0x0003003e,0x00000451, + 0x0000044f,0x00060039,0x00000036,0x00000452,0x0000004f,0x00000450,0x00000451,0x00050041, + 0x00000037,0x00000453,0x00000444,0x000001eb,0x0003003e,0x00000453,0x00000452,0x00050041, + 0x00000037,0x00000454,0x000000ee,0x00000284,0x0004003d,0x00000036,0x00000455,0x00000454, + 0x00050082,0x00000036,0x00000456,0x00000455,0x0000019d,0x00050041,0x00000037,0x00000458, + 0x00000444,0x00000284,0x0004003d,0x00000036,0x00000459,0x00000458,0x0003003e,0x00000457, + 0x00000459,0x0003003e,0x0000045a,0x00000456,0x00060039,0x00000036,0x0000045b,0x0000003b, + 0x00000457,0x0000045a,0x0003003e,0x0000045c,0x0000022f,0x0003003e,0x0000045d,0x0000045b, + 0x00060039,0x00000036,0x0000045e,0x0000004f,0x0000045c,0x0000045d,0x00050041,0x00000037, + 0x0000045f,0x00000444,0x00000284,0x0003003e,0x0000045f,0x0000045e,0x0004003d,0x00000055, + 0x00000460,0x00000444,0x000200fe,0x00000460,0x00010038,0x00050036,0x00000002,0x000000f4, + 0x00000000,0x000000f1,0x00030037,0x0000009b,0x000000f2,0x00030037,0x0000000f,0x000000f3, + 0x000200f8,0x000000f5,0x0004003d,0x0000000e,0x00000463,0x000000f3,0x00050041,0x0000000f, + 0x00000464,0x000000f2,0x0000019d,0x0004003d,0x0000000e,0x00000465,0x00000464,0x00050041, + 0x0000000f,0x00000466,0x000000f2,0x000001a2,0x0004003d,0x0000000e,0x00000467,0x00000466, + 0x0008000c,0x0000000e,0x00000468,0x00000001,0x0000002b,0x00000463,0x00000465,0x00000467, + 0x0003003e,0x000000f3,0x00000468,0x000100fd,0x00010038,0x00050036,0x00000006,0x000000f9, + 0x00000000,0x000000f6,0x00030037,0x0000001b,0x000000f7,0x00030037,0x00000007,0x000000f8, + 0x000200f8,0x000000fa,0x0004003b,0x0000001b,0x00000469,0x00000007,0x0004003b,0x00000007, + 0x0000046e,0x00000007,0x0004003b,0x00000007,0x00000472,0x00000007,0x0004003d,0x0000001a, + 0x0000046a,0x000000f7,0x0004003d,0x00000006,0x0000046b,0x000000f8,0x00050050,0x0000001a, + 0x0000046c,0x0000046b,0x0000046b,0x00050085,0x0000001a,0x0000046d,0x0000046a,0x0000046c, + 0x0003003e,0x00000469,0x0000046d,0x0004003d,0x0000001a,0x0000046f,0x00000469,0x0004003d, + 0x0000001a,0x00000470,0x00000469,0x00050094,0x00000006,0x00000471,0x0000046f,0x00000470, + 0x0003003e,0x00000472,0x00000471,0x00050039,0x00000006,0x00000473,0x000000db,0x00000472, + 0x0003003e,0x0000046e,0x00000473,0x0004003d,0x00000006,0x00000474,0x0000046e,0x000200fe, + 0x00000474,0x00010038,0x00050036,0x00000006,0x00000101,0x00000000,0x000000fe,0x00030037, + 0x000000fb,0x000000ff,0x00030037,0x000000fd,0x00000100,0x000200f8,0x00000102,0x0004003b, + 0x00000007,0x00000477,0x00000007,0x0004003b,0x00000007,0x00000480,0x00000007,0x0004003b, + 0x00000007,0x00000481,0x00000007,0x00040039,0x0000001a,0x00000478,0x00000062,0x00050050, + 0x0000001a,0x00000479,0x00000150,0x00000150,0x00050088,0x0000001a,0x0000047a,0x00000479, + 0x00000478,0x00050050,0x0000001a,0x0000047b,0x00000150,0x00000150,0x00050083,0x0000001a, + 0x0000047c,0x0000047a,0x0000047b,0x00050051,0x00000006,0x0000047d,0x0000047c,0x00000000, + 0x00050081,0x00000006,0x0000047e,0x00000150,0x0000047d,0x0003003e,0x00000477,0x0000047e, + 0x0003003e,0x00000480,0x0000047f,0x0004003d,0x00000006,0x00000482,0x00000477,0x0003003e, + 0x00000481,0x00000482,0x00060039,0x00000006,0x00000483,0x00000023,0x00000480,0x00000481, + 0x000200fe,0x00000483,0x00010038,0x00050036,0x0000000e,0x00000104,0x00000000,0x0000006e, + 0x00030037,0x0000006d,0x00000103,0x000200f8,0x00000105,0x0004003b,0x0000000f,0x00000486, + 0x00000007,0x0004003b,0x0000006d,0x00000488,0x00000007,0x0004003b,0x0000000f,0x0000048b, + 0x00000007,0x0004003b,0x0000000f,0x0000048c,0x00000007,0x0004003b,0x0000000f,0x00000490, + 0x00000007,0x0004003b,0x0000000f,0x00000491,0x00000007,0x0004003d,0x00000055,0x00000489, + 0x00000103,0x0003003e,0x00000488,0x00000489,0x00050039,0x0000000e,0x0000048a,0x00000070, + 0x00000488,0x0003003e,0x0000048b,0x00000487,0x0003003e,0x0000048c,0x0000048a,0x00060039, + 0x0000000e,0x0000048d,0x00000047,0x0000048b,0x0000048c,0x00040039,0x00000006,0x0000048e, + 0x00000091,0x0005008e,0x0000000e,0x0000048f,0x0000048d,0x0000048e,0x0003003e,0x00000486, + 0x0000048f,0x0004003d,0x0000000e,0x00000492,0x00000486,0x0003003e,0x00000491,0x00000492, + 0x00050039,0x0000000e,0x00000493,0x000000b4,0x00000491,0x0003003e,0x00000490,0x00000493, + 0x0004003d,0x0000000e,0x00000494,0x00000490,0x000200fe,0x00000494,0x00010038,0x00050036, + 0x00000002,0x00000109,0x00000000,0x00000106,0x00030037,0x000000fb,0x00000107,0x00030037, + 0x000000fd,0x00000108,0x000200f8,0x0000010a,0x0004003b,0x0000001b,0x00000497,0x00000007, + 0x0004003b,0x0000001b,0x0000049b,0x00000007,0x0004003b,0x0000006d,0x0000049f,0x00000007, + 0x0004003b,0x0000001b,0x000004a3,0x00000007,0x0004003b,0x0000001b,0x000004a9,0x00000007, + 0x0004003b,0x0000006d,0x000004ad,0x00000007,0x0004003b,0x000000a3,0x000004be,0x00000007, + 0x0004003b,0x000000a3,0x000004c4,0x00000007,0x0004003b,0x0000001b,0x000004ca,0x00000007, + 0x0004003b,0x000000a3,0x000004cd,0x00000007,0x0004003b,0x00000037,0x000004d0,0x00000007, + 0x0004003b,0x00000037,0x000004d1,0x00000007,0x0004003b,0x00000037,0x000004d9,0x00000007, + 0x0004003b,0x0000006d,0x000004e1,0x00000007,0x0004003b,0x00000037,0x000004e3,0x00000007, + 0x0004003b,0x00000037,0x000004ec,0x00000007,0x0004003b,0x0000006d,0x000004f5,0x00000007, + 0x0004003b,0x0000006d,0x000004fb,0x00000007,0x0004003b,0x0000006d,0x000004fd,0x00000007, + 0x0004003b,0x0000006d,0x000004ff,0x00000007,0x0004003b,0x0000006d,0x00000500,0x00000007, + 0x0004003b,0x00000504,0x00000505,0x00000007,0x0004003b,0x0000006d,0x00000507,0x00000007, + 0x0004003b,0x0000000f,0x0000051d,0x00000007,0x0004003b,0x0000000f,0x00000521,0x00000007, + 0x0004003b,0x0000000f,0x00000523,0x00000007,0x0004003b,0x00000007,0x00000528,0x00000007, + 0x0004003b,0x000000fd,0x00000529,0x00000007,0x0004003b,0x00000007,0x0000052d,0x00000007, + 0x0004003b,0x00000007,0x00000532,0x00000007,0x0004003b,0x00000007,0x00000533,0x00000007, + 0x0004003b,0x00000007,0x00000535,0x00000007,0x0004003b,0x00000007,0x0000053f,0x00000007, + 0x0004003b,0x00000007,0x00000541,0x00000007,0x0004003b,0x00000007,0x00000542,0x00000007, + 0x0004003b,0x00000007,0x00000544,0x00000007,0x0004003b,0x00000007,0x00000545,0x00000007, + 0x0004003b,0x00000007,0x00000547,0x00000007,0x0004003b,0x00000007,0x00000548,0x00000007, + 0x0004003b,0x00000007,0x0000054a,0x00000007,0x0004003b,0x00000007,0x0000054c,0x00000007, + 0x0004003b,0x00000037,0x0000054f,0x00000007,0x0004003b,0x00000037,0x00000557,0x00000007, + 0x0004003b,0x0000006d,0x0000055f,0x00000007,0x0004003b,0x00000037,0x00000561,0x00000007, + 0x0004003b,0x00000037,0x0000056a,0x00000007,0x0004003b,0x0000001b,0x00000573,0x00000007, + 0x0004003b,0x0000001b,0x00000578,0x00000007,0x0004003b,0x0000006d,0x0000057c,0x00000007, + 0x0004003b,0x00000007,0x00000582,0x00000007,0x0004003b,0x0000006d,0x00000585,0x00000007, + 0x0004003b,0x0000006d,0x00000586,0x00000007,0x0004003b,0x00000007,0x0000058d,0x00000007, + 0x0004003b,0x0000001b,0x0000058f,0x00000007,0x0004003b,0x00000007,0x00000591,0x00000007, + 0x0004003b,0x00000007,0x000005a3,0x00000007,0x0004003b,0x00000007,0x000005a7,0x00000007, + 0x0004003b,0x000000a3,0x000005ae,0x00000007,0x0004003b,0x000000a3,0x000005b8,0x00000007, + 0x0004003b,0x0000009b,0x000005ba,0x00000007,0x0004003b,0x0000009b,0x000005c6,0x00000007, + 0x0004003b,0x0000009b,0x000005e5,0x00000007,0x0004003b,0x0000000f,0x000005e8,0x00000007, + 0x0004003b,0x0000000f,0x000005f1,0x00000007,0x0004003b,0x0000000f,0x000005f5,0x00000007, + 0x0004003b,0x0000000f,0x000005f7,0x00000007,0x00050051,0x00000055,0x00000498,0x00000107, + 0x00000000,0x0004006f,0x0000001a,0x00000499,0x00000498,0x00050081,0x0000001a,0x0000049a, + 0x00000499,0x00000329,0x0003003e,0x00000497,0x0000049a,0x0004003d,0x0000001a,0x0000049c, + 0x00000497,0x00040039,0x0000001a,0x0000049d,0x00000062,0x00050085,0x0000001a,0x0000049e, + 0x0000049c,0x0000049d,0x0003003e,0x0000049b,0x0000049e,0x0004003d,0x0000001a,0x000004a0, + 0x0000049b,0x0006000c,0x0000001a,0x000004a1,0x00000001,0x00000008,0x000004a0,0x0004006e, + 0x00000055,0x000004a2,0x000004a1,0x0003003e,0x0000049f,0x000004a2,0x0004003d,0x00000055, + 0x000004a4,0x0000049f,0x0004006f,0x0000001a,0x000004a5,0x000004a4,0x00050081,0x0000001a, + 0x000004a6,0x000004a5,0x00000329,0x00040039,0x0000001a,0x000004a7,0x00000060,0x00050083, + 0x0000001a,0x000004a8,0x000004a6,0x000004a7,0x0003003e,0x000004a3,0x000004a8,0x0004003d, + 0x0000001a,0x000004aa,0x000004a3,0x0004003d,0x0000001a,0x000004ab,0x0000049b,0x00050083, + 0x0000001a,0x000004ac,0x000004aa,0x000004ab,0x0003003e,0x000004a9,0x000004ac,0x00050041, + 0x00000007,0x000004ae,0x000004a3,0x000001eb,0x0004003d,0x00000006,0x000004af,0x000004ae, + 0x00050041,0x00000007,0x000004b0,0x0000049b,0x000001eb,0x0004003d,0x00000006,0x000004b1, + 0x000004b0,0x000500ba,0x000000a2,0x000004b2,0x000004af,0x000004b1,0x000600a9,0x00000036, + 0x000004b5,0x000004b2,0x000004b3,0x000004b4,0x00050041,0x00000037,0x000004b6,0x000004ad, + 0x000001eb,0x0003003e,0x000004b6,0x000004b5,0x00050041,0x00000007,0x000004b7,0x000004a3, + 0x00000284,0x0004003d,0x00000006,0x000004b8,0x000004b7,0x00050041,0x00000007,0x000004b9, + 0x0000049b,0x00000284,0x0004003d,0x00000006,0x000004ba,0x000004b9,0x000500ba,0x000000a2, + 0x000004bb,0x000004b8,0x000004ba,0x000600a9,0x00000036,0x000004bc,0x000004bb,0x000004b3, + 0x000004b4,0x00050041,0x00000037,0x000004bd,0x000004ad,0x00000284,0x0003003e,0x000004bd, + 0x000004bc,0x00050041,0x00000007,0x000004bf,0x000004a3,0x00000284,0x0004003d,0x00000006, + 0x000004c0,0x000004bf,0x00050041,0x00000007,0x000004c1,0x0000049b,0x00000284,0x0004003d, + 0x00000006,0x000004c2,0x000004c1,0x000500ba,0x000000a2,0x000004c3,0x000004c0,0x000004c2, + 0x0003003e,0x000004be,0x000004c3,0x00050041,0x00000007,0x000004c5,0x000004a3,0x000001eb, + 0x0004003d,0x00000006,0x000004c6,0x000004c5,0x00050041,0x00000007,0x000004c7,0x0000049b, + 0x000001eb,0x0004003d,0x00000006,0x000004c8,0x000004c7,0x000500ba,0x000000a2,0x000004c9, + 0x000004c6,0x000004c8,0x0003003e,0x000004c4,0x000004c9,0x0004003d,0x00000055,0x000004cb, + 0x000004ad,0x0004006f,0x0000001a,0x000004cc,0x000004cb,0x0003003e,0x000004ca,0x000004cc, + 0x00050051,0x00000006,0x000004ce,0x00000107,0x0000000a,0x000500b4,0x000000a2,0x000004cf, + 0x000004ce,0x0000014f,0x0003003e,0x000004cd,0x000004cf,0x0003003e,0x000004d0,0x00000192, + 0x0003003e,0x000004d1,0x00000192,0x000200f9,0x000004d2,0x000200f8,0x000004d2,0x000400f6, + 0x000004d4,0x000004d5,0x00000000,0x000200f9,0x000004d6,0x000200f8,0x000004d6,0x0004003d, + 0x00000036,0x000004d7,0x000004d1,0x000500b1,0x000000a2,0x000004d8,0x000004d7,0x000001a2, + 0x000400fa,0x000004d8,0x000004d3,0x000004d4,0x000200f8,0x000004d3,0x0003003e,0x000004d9, + 0x00000192,0x000200f9,0x000004da,0x000200f8,0x000004da,0x000400f6,0x000004dc,0x000004dd, + 0x00000000,0x000200f9,0x000004de,0x000200f8,0x000004de,0x0004003d,0x00000036,0x000004df, + 0x000004d9,0x000500b1,0x000000a2,0x000004e0,0x000004df,0x000001a2,0x000400fa,0x000004e0, + 0x000004db,0x000004dc,0x000200f8,0x000004db,0x0004003d,0x000000a2,0x000004e2,0x000004c4, + 0x000300f7,0x000004e5,0x00000000,0x000400fa,0x000004e2,0x000004e4,0x000004e8,0x000200f8, + 0x000004e4,0x0004003d,0x00000036,0x000004e6,0x000004d9,0x00050082,0x00000036,0x000004e7, + 0x000001a2,0x000004e6,0x0003003e,0x000004e3,0x000004e7,0x000200f9,0x000004e5,0x000200f8, + 0x000004e8,0x0004003d,0x00000036,0x000004e9,0x000004d9,0x0003003e,0x000004e3,0x000004e9, + 0x000200f9,0x000004e5,0x000200f8,0x000004e5,0x0004003d,0x00000036,0x000004ea,0x000004e3, + 0x0004003d,0x000000a2,0x000004eb,0x000004be,0x000300f7,0x000004ee,0x00000000,0x000400fa, + 0x000004eb,0x000004ed,0x000004f1,0x000200f8,0x000004ed,0x0004003d,0x00000036,0x000004ef, + 0x000004d1,0x00050082,0x00000036,0x000004f0,0x000001a2,0x000004ef,0x0003003e,0x000004ec, + 0x000004f0,0x000200f9,0x000004ee,0x000200f8,0x000004f1,0x0004003d,0x00000036,0x000004f2, + 0x000004d1,0x0003003e,0x000004ec,0x000004f2,0x000200f9,0x000004ee,0x000200f8,0x000004ee, + 0x0004003d,0x00000036,0x000004f3,0x000004ec,0x00050050,0x00000055,0x000004f4,0x000004ea, + 0x000004f3,0x0003003e,0x000004e1,0x000004f4,0x0004003d,0x00000055,0x000004f6,0x0000049f, + 0x0004003d,0x00000055,0x000004f7,0x000004ad,0x00050080,0x00000055,0x000004f8,0x000004f6, + 0x000004f7,0x0004003d,0x00000055,0x000004f9,0x000004e1,0x00050080,0x00000055,0x000004fa, + 0x000004f8,0x000004f9,0x0003003e,0x000004f5,0x000004fa,0x00040039,0x00000055,0x000004fc, + 0x00000057,0x0004003d,0x00000055,0x000004fe,0x000004f5,0x0003003e,0x000004fd,0x000004fe, + 0x0003003e,0x000004ff,0x0000020f,0x0003003e,0x00000500,0x000004fc,0x00070039,0x00000055, + 0x00000501,0x000000c4,0x000004fd,0x000004ff,0x00000500,0x0003003e,0x000004fb,0x00000501, + 0x0004003d,0x00000036,0x00000506,0x000004d0,0x0004003d,0x00000055,0x00000508,0x000004fb, + 0x0003003e,0x00000507,0x00000508,0x00050039,0x0000000e,0x00000509,0x00000104,0x00000507, + 0x00050041,0x0000000f,0x0000050a,0x00000505,0x00000506,0x0003003e,0x0000050a,0x00000509, + 0x0004003d,0x00000036,0x0000050b,0x000004d0,0x00050080,0x00000036,0x0000050c,0x0000050b, + 0x0000022f,0x0003003e,0x000004d0,0x0000050c,0x000200f9,0x000004dd,0x000200f8,0x000004dd, + 0x0004003d,0x00000036,0x0000050d,0x000004d9,0x00050080,0x00000036,0x0000050e,0x0000050d, + 0x0000022f,0x0003003e,0x000004d9,0x0000050e,0x000200f9,0x000004da,0x000200f8,0x000004dc, + 0x000200f9,0x000004d5,0x000200f8,0x000004d5,0x0004003d,0x00000036,0x0000050f,0x000004d1, + 0x00050080,0x00000036,0x00000510,0x0000050f,0x0000022f,0x0003003e,0x000004d1,0x00000510, + 0x000200f9,0x000004d2,0x000200f8,0x000004d4,0x0004003d,0x000000a2,0x00000511,0x000004cd, + 0x000300f7,0x00000513,0x00000000,0x000400fa,0x00000511,0x00000512,0x00000513,0x000200f8, + 0x00000512,0x0003003e,0x000004d0,0x00000192,0x000200f9,0x00000514,0x000200f8,0x00000514, + 0x000400f6,0x00000516,0x00000517,0x00000000,0x000200f9,0x00000518,0x000200f8,0x00000518, + 0x0004003d,0x00000036,0x00000519,0x000004d0,0x000500b1,0x000000a2,0x0000051a,0x00000519, + 0x000003e0,0x000400fa,0x0000051a,0x00000515,0x00000516,0x000200f8,0x00000515,0x0004003d, + 0x00000036,0x0000051b,0x000004d0,0x0004003d,0x00000036,0x0000051c,0x000004d0,0x00050041, + 0x0000000f,0x0000051e,0x00000505,0x0000051c,0x0004003d,0x0000000e,0x0000051f,0x0000051e, + 0x0003003e,0x0000051d,0x0000051f,0x00050039,0x0000000e,0x00000520,0x000000b1,0x0000051d, + 0x0003003e,0x00000521,0x00000520,0x00050039,0x0000000e,0x00000522,0x000000b7,0x00000521, + 0x0003003e,0x00000523,0x00000522,0x00050039,0x0000000e,0x00000524,0x000000b4,0x00000523, + 0x00050041,0x0000000f,0x00000525,0x00000505,0x0000051b,0x0003003e,0x00000525,0x00000524, + 0x000200f9,0x00000517,0x000200f8,0x00000517,0x0004003d,0x00000036,0x00000526,0x000004d0, + 0x00050080,0x00000036,0x00000527,0x00000526,0x0000022f,0x0003003e,0x000004d0,0x00000527, + 0x000200f9,0x00000514,0x000200f8,0x00000516,0x000200f9,0x00000513,0x000200f8,0x00000513, + 0x0004003d,0x000000fc,0x0000052a,0x00000108,0x0003003e,0x00000529,0x0000052a,0x00060039, + 0x00000006,0x0000052b,0x00000101,0x00000107,0x00000529,0x0004003d,0x000000fc,0x0000052c, + 0x00000529,0x0003003e,0x00000108,0x0000052c,0x0003003e,0x00000528,0x0000052b,0x0004003d, + 0x00000006,0x0000052e,0x00000528,0x00050081,0x00000006,0x0000052f,0x00000150,0x0000052e, + 0x00050085,0x00000006,0x00000531,0x0000052f,0x00000530,0x0003003e,0x00000532,0x00000150, + 0x0003003e,0x00000533,0x00000531,0x00060039,0x00000006,0x00000534,0x0000003f,0x00000532, + 0x00000533,0x0003003e,0x0000052d,0x00000534,0x00050051,0x00000006,0x00000536,0x00000107, + 0x00000007,0x00050085,0x00000006,0x00000537,0x00000536,0x000002a2,0x00050083,0x00000006, + 0x00000538,0x00000150,0x00000537,0x00050051,0x00000006,0x00000539,0x00000107,0x00000009, + 0x00050083,0x00000006,0x0000053a,0x00000150,0x00000539,0x00050041,0x00000007,0x0000053b, + 0x00000108,0x00000198,0x0004003d,0x00000006,0x0000053c,0x0000053b,0x00050085,0x00000006, + 0x0000053e,0x0000053c,0x0000053d,0x0003003e,0x0000053f,0x0000053e,0x00050039,0x00000006, + 0x00000540,0x00000018,0x0000053f,0x0003003e,0x00000541,0x0000053a,0x0003003e,0x00000542, + 0x00000540,0x00060039,0x00000006,0x00000543,0x00000023,0x00000541,0x00000542,0x0003003e, + 0x00000544,0x00000538,0x0003003e,0x00000545,0x00000543,0x00060039,0x00000006,0x00000546, + 0x00000023,0x00000544,0x00000545,0x0003003e,0x00000535,0x00000546,0x0004003d,0x00000006, + 0x00000549,0x0000052d,0x0003003e,0x00000548,0x00000549,0x0004003d,0x00000006,0x0000054b, + 0x00000528,0x0003003e,0x0000054a,0x0000054b,0x0004003d,0x00000006,0x0000054d,0x00000535, + 0x0003003e,0x0000054c,0x0000054d,0x00070039,0x00000006,0x0000054e,0x0000000c,0x00000548, + 0x0000054a,0x0000054c,0x0003003e,0x00000547,0x0000054e,0x0003003e,0x000004d0,0x00000192, + 0x0003003e,0x0000054f,0x00000192,0x000200f9,0x00000550,0x000200f8,0x00000550,0x000400f6, + 0x00000552,0x00000553,0x00000000,0x000200f9,0x00000554,0x000200f8,0x00000554,0x0004003d, + 0x00000036,0x00000555,0x0000054f,0x000500b1,0x000000a2,0x00000556,0x00000555,0x000001a2, + 0x000400fa,0x00000556,0x00000551,0x00000552,0x000200f8,0x00000551,0x0003003e,0x00000557, + 0x00000192,0x000200f9,0x00000558,0x000200f8,0x00000558,0x000400f6,0x0000055a,0x0000055b, + 0x00000000,0x000200f9,0x0000055c,0x000200f8,0x0000055c,0x0004003d,0x00000036,0x0000055d, + 0x00000557,0x000500b1,0x000000a2,0x0000055e,0x0000055d,0x000001a2,0x000400fa,0x0000055e, + 0x00000559,0x0000055a,0x000200f8,0x00000559,0x0004003d,0x000000a2,0x00000560,0x000004c4, + 0x000300f7,0x00000563,0x00000000,0x000400fa,0x00000560,0x00000562,0x00000566,0x000200f8, + 0x00000562,0x0004003d,0x00000036,0x00000564,0x00000557,0x00050082,0x00000036,0x00000565, + 0x000001a2,0x00000564,0x0003003e,0x00000561,0x00000565,0x000200f9,0x00000563,0x000200f8, + 0x00000566,0x0004003d,0x00000036,0x00000567,0x00000557,0x0003003e,0x00000561,0x00000567, + 0x000200f9,0x00000563,0x000200f8,0x00000563,0x0004003d,0x00000036,0x00000568,0x00000561, + 0x0004003d,0x000000a2,0x00000569,0x000004be,0x000300f7,0x0000056c,0x00000000,0x000400fa, + 0x00000569,0x0000056b,0x0000056f,0x000200f8,0x0000056b,0x0004003d,0x00000036,0x0000056d, + 0x0000054f,0x00050082,0x00000036,0x0000056e,0x000001a2,0x0000056d,0x0003003e,0x0000056a, + 0x0000056e,0x000200f9,0x0000056c,0x000200f8,0x0000056f,0x0004003d,0x00000036,0x00000570, + 0x0000054f,0x0003003e,0x0000056a,0x00000570,0x000200f9,0x0000056c,0x000200f8,0x0000056c, + 0x0004003d,0x00000036,0x00000571,0x0000056a,0x00050050,0x00000055,0x00000572,0x00000568, + 0x00000571,0x0003003e,0x0000055f,0x00000572,0x0004003d,0x0000001a,0x00000574,0x000004ca, + 0x0004003d,0x00000055,0x00000575,0x0000055f,0x0004006f,0x0000001a,0x00000576,0x00000575, + 0x00050081,0x0000001a,0x00000577,0x00000574,0x00000576,0x0003003e,0x00000573,0x00000577, + 0x0004003d,0x0000001a,0x00000579,0x000004a9,0x0004003d,0x0000001a,0x0000057a,0x00000573, + 0x00050081,0x0000001a,0x0000057b,0x00000579,0x0000057a,0x0003003e,0x00000578,0x0000057b, + 0x0004003d,0x00000055,0x0000057d,0x0000049f,0x0004003d,0x00000055,0x0000057e,0x000004ad, + 0x00050080,0x00000055,0x0000057f,0x0000057d,0x0000057e,0x0004003d,0x00000055,0x00000580, + 0x0000055f,0x00050080,0x00000055,0x00000581,0x0000057f,0x00000580,0x0003003e,0x0000057c, + 0x00000581,0x0004003d,0x00000055,0x00000583,0x0000057c,0x00040039,0x00000055,0x00000584, + 0x00000057,0x0003003e,0x00000585,0x00000583,0x0003003e,0x00000586,0x00000584,0x00060039, + 0x000000a2,0x00000587,0x000000cf,0x00000585,0x00000586,0x000600a9,0x00000006,0x00000588, + 0x00000587,0x00000150,0x0000014f,0x0003003e,0x00000582,0x00000588,0x0004003d,0x000000a2, + 0x00000589,0x000004cd,0x000400a8,0x000000a2,0x0000058a,0x00000589,0x000300f7,0x0000058c, + 0x00000000,0x000400fa,0x0000058a,0x0000058b,0x0000058c,0x000200f8,0x0000058b,0x0004003d, + 0x00000006,0x0000058e,0x00000582,0x0004003d,0x0000001a,0x00000590,0x00000578,0x0003003e, + 0x0000058f,0x00000590,0x0004003d,0x00000006,0x00000592,0x00000547,0x0003003e,0x00000591, + 0x00000592,0x00060039,0x00000006,0x00000593,0x000000f9,0x0000058f,0x00000591,0x00050085, + 0x00000006,0x00000594,0x0000058e,0x00000593,0x0003003e,0x0000058d,0x00000594,0x0004003d, + 0x00000036,0x00000595,0x000004d0,0x00050041,0x0000000f,0x00000596,0x00000505,0x00000595, + 0x0004003d,0x0000000e,0x00000597,0x00000596,0x0004003d,0x00000006,0x00000598,0x0000058d, + 0x0005008e,0x0000000e,0x00000599,0x00000597,0x00000598,0x00050041,0x0000000f,0x0000059a, + 0x00000108,0x0000022f,0x0004003d,0x0000000e,0x0000059b,0x0000059a,0x00050081,0x0000000e, + 0x0000059c,0x0000059b,0x00000599,0x00050041,0x0000000f,0x0000059d,0x00000108,0x0000022f, + 0x0003003e,0x0000059d,0x0000059c,0x0004003d,0x00000006,0x0000059e,0x0000058d,0x00050041, + 0x00000007,0x0000059f,0x00000108,0x0000019d,0x0004003d,0x00000006,0x000005a0,0x0000059f, + 0x00050081,0x00000006,0x000005a1,0x000005a0,0x0000059e,0x00050041,0x00000007,0x000005a2, + 0x00000108,0x0000019d,0x0003003e,0x000005a2,0x000005a1,0x000200f9,0x0000058c,0x000200f8, + 0x0000058c,0x0004003d,0x0000001a,0x000005a4,0x00000578,0x0004003d,0x0000001a,0x000005a5, + 0x00000578,0x00050094,0x00000006,0x000005a6,0x000005a4,0x000005a5,0x0003003e,0x000005a3, + 0x000005a6,0x0004003d,0x00000006,0x000005a9,0x000005a3,0x00050085,0x00000006,0x000005aa, + 0x000005a8,0x000005a9,0x0006000c,0x00000006,0x000005ab,0x00000001,0x0000001b,0x000005aa, + 0x0004003d,0x00000006,0x000005ac,0x00000582,0x00050085,0x00000006,0x000005ad,0x000005ab, + 0x000005ac,0x0003003e,0x000005a7,0x000005ad,0x0004003d,0x00000036,0x000005af,0x0000054f, + 0x000500aa,0x000000a2,0x000005b0,0x000005af,0x00000192,0x0004003d,0x00000036,0x000005b1, + 0x00000557,0x000500aa,0x000000a2,0x000005b2,0x000005b1,0x00000192,0x000500a7,0x000000a2, + 0x000005b3,0x000005b0,0x000005b2,0x0003003e,0x000005ae,0x000005b3,0x0004003d,0x00000036, + 0x000005b4,0x000004d0,0x00050041,0x0000000f,0x000005b5,0x00000505,0x000005b4,0x0004003d, + 0x0000000e,0x000005b6,0x000005b5,0x0004003d,0x00000006,0x000005b7,0x000005a7,0x0004003d, + 0x000000a2,0x000005b9,0x000005ae,0x0003003e,0x000005b8,0x000005b9,0x00050041,0x0000009b, + 0x000005bb,0x00000108,0x00000192,0x0004003d,0x0000009a,0x000005bc,0x000005bb,0x0003003e, + 0x000005ba,0x000005bc,0x00080039,0x00000002,0x000005bd,0x000000a9,0x000005b8,0x000005ba, + 0x000005b6,0x000005b7,0x0004003d,0x0000009a,0x000005be,0x000005ba,0x00050041,0x0000009b, + 0x000005bf,0x00000108,0x00000192,0x0003003e,0x000005bf,0x000005be,0x0004003d,0x00000036, + 0x000005c0,0x000004d0,0x00050080,0x00000036,0x000005c1,0x000005c0,0x0000022f,0x0003003e, + 0x000004d0,0x000005c1,0x000200f9,0x0000055b,0x000200f8,0x0000055b,0x0004003d,0x00000036, + 0x000005c2,0x00000557,0x00050080,0x00000036,0x000005c3,0x000005c2,0x0000022f,0x0003003e, + 0x00000557,0x000005c3,0x000200f9,0x00000558,0x000200f8,0x0000055a,0x000200f9,0x00000553, + 0x000200f8,0x00000553,0x0004003d,0x00000036,0x000005c4,0x0000054f,0x00050080,0x00000036, + 0x000005c5,0x000005c4,0x0000022f,0x0003003e,0x0000054f,0x000005c5,0x000200f9,0x00000550, + 0x000200f8,0x00000552,0x00050041,0x0000009b,0x000005c7,0x00000108,0x00000192,0x0004003d, + 0x0000009a,0x000005c8,0x000005c7,0x0003003e,0x000005c6,0x000005c8,0x00050039,0x00000002, + 0x000005c9,0x000000ad,0x000005c6,0x0004003d,0x0000009a,0x000005ca,0x000005c6,0x00050041, + 0x0000009b,0x000005cb,0x00000108,0x00000192,0x0003003e,0x000005cb,0x000005ca,0x00050041, + 0x00000007,0x000005cc,0x00000108,0x0000019d,0x0004003d,0x00000006,0x000005cd,0x000005cc, + 0x000500ba,0x000000a2,0x000005ce,0x000005cd,0x000002d8,0x000600a9,0x00000006,0x000005cf, + 0x000005ce,0x00000150,0x0000014f,0x00050041,0x00000007,0x000005d0,0x00000108,0x0000019d, + 0x0004003d,0x00000006,0x000005d1,0x000005d0,0x00050085,0x00000006,0x000005d2,0x000005d1, + 0x000005cf,0x00050041,0x00000007,0x000005d3,0x00000108,0x0000019d,0x0003003e,0x000005d3, + 0x000005d2,0x00050041,0x00000007,0x000005d4,0x00000108,0x0000019d,0x0004003d,0x00000006, + 0x000005d5,0x000005d4,0x000500ba,0x000000a2,0x000005d6,0x000005d5,0x000002d8,0x000300f7, + 0x000005d8,0x00000000,0x000400fa,0x000005d6,0x000005d7,0x000005d8,0x000200f8,0x000005d7, + 0x00050041,0x0000000f,0x000005d9,0x00000108,0x0000022f,0x0004003d,0x0000000e,0x000005da, + 0x000005d9,0x00050041,0x00000007,0x000005db,0x00000108,0x0000019d,0x0004003d,0x00000006, + 0x000005dc,0x000005db,0x00060050,0x0000000e,0x000005dd,0x000005dc,0x000005dc,0x000005dc, + 0x00050088,0x0000000e,0x000005de,0x000005da,0x000005dd,0x00050041,0x0000000f,0x000005df, + 0x00000108,0x0000022f,0x0003003e,0x000005df,0x000005de,0x00050041,0x00000007,0x000005e1, + 0x00000108,0x0000019d,0x0004003d,0x00000006,0x000005e2,0x000005e1,0x00050085,0x00000006, + 0x000005e3,0x000005e2,0x000005e0,0x00050041,0x00000007,0x000005e4,0x00000108,0x0000019d, + 0x0003003e,0x000005e4,0x000005e3,0x00050041,0x0000009b,0x000005e6,0x00000108,0x00000192, + 0x0004003d,0x0000009a,0x000005e7,0x000005e6,0x0003003e,0x000005e5,0x000005e7,0x00050041, + 0x0000000f,0x000005e9,0x00000108,0x0000022f,0x0004003d,0x0000000e,0x000005ea,0x000005e9, + 0x0003003e,0x000005e8,0x000005ea,0x00060039,0x00000002,0x000005eb,0x000000f4,0x000005e5, + 0x000005e8,0x0004003d,0x0000000e,0x000005ec,0x000005e8,0x00050041,0x0000000f,0x000005ed, + 0x00000108,0x0000022f,0x0003003e,0x000005ed,0x000005ec,0x000200f9,0x000005d8,0x000200f8, + 0x000005d8,0x0004003d,0x000000a2,0x000005ee,0x000004cd,0x000300f7,0x000005f0,0x00000000, + 0x000400fa,0x000005ee,0x000005ef,0x000005f0,0x000200f8,0x000005ef,0x00060041,0x0000000f, + 0x000005f2,0x00000108,0x00000192,0x00000192,0x0004003d,0x0000000e,0x000005f3,0x000005f2, + 0x0003003e,0x000005f1,0x000005f3,0x00050039,0x0000000e,0x000005f4,0x000000b1,0x000005f1, + 0x0003003e,0x000005f5,0x000005f4,0x00050039,0x0000000e,0x000005f6,0x000000ba,0x000005f5, + 0x0003003e,0x000005f7,0x000005f6,0x00050039,0x0000000e,0x000005f8,0x000000b4,0x000005f7, + 0x00050041,0x0000000f,0x000005f9,0x00000108,0x0000022f,0x0003003e,0x000005f9,0x000005f8, + 0x00050041,0x00000007,0x000005fa,0x00000108,0x0000019d,0x0003003e,0x000005fa,0x00000150, + 0x00050041,0x00000007,0x000005fb,0x00000108,0x00000198,0x0003003e,0x000005fb,0x0000014f, + 0x000200f9,0x000005f0,0x000200f8,0x000005f0,0x000100fd,0x00010038,0x00050036,0x0000002f, + 0x0000010c,0x00000000,0x00000072,0x00030037,0x0000006d,0x0000010b,0x000200f8,0x0000010d, + 0x0004003b,0x0000006d,0x000005fc,0x00000007,0x0004003d,0x00000055,0x000005fd,0x0000010b, + 0x0003003e,0x000005fc,0x000005fd,0x00050039,0x0000002f,0x000005fe,0x00000074,0x000005fc, + 0x000200fe,0x000005fe,0x00010038,0x00050036,0x000000e5,0x00000111,0x00000000,0x0000010e, + 0x00030037,0x0000006d,0x0000010f,0x00030037,0x0000006d,0x00000110,0x000200f8,0x00000112, + 0x0004003b,0x000000e6,0x00000601,0x00000007,0x0004003b,0x0000006d,0x00000603,0x00000007, + 0x0004003b,0x0000006d,0x00000605,0x00000007,0x0004003b,0x0000006d,0x00000606,0x00000007, + 0x0004003b,0x0000006d,0x00000609,0x00000007,0x0004003b,0x0000006d,0x0000060d,0x00000007, + 0x0004003b,0x0000006d,0x0000060f,0x00000007,0x0004003b,0x0000006d,0x00000610,0x00000007, + 0x0004003b,0x0000006d,0x00000613,0x00000007,0x0004003b,0x0000006d,0x00000617,0x00000007, + 0x0004003b,0x0000006d,0x00000619,0x00000007,0x0004003b,0x0000006d,0x0000061a,0x00000007, + 0x0004003b,0x0000006d,0x0000061d,0x00000007,0x0004003b,0x0000006d,0x00000621,0x00000007, + 0x0004003b,0x0000006d,0x00000623,0x00000007,0x0004003b,0x0000006d,0x00000624,0x00000007, + 0x0004003b,0x0000006d,0x00000627,0x00000007,0x0004003b,0x0000006d,0x0000062b,0x00000007, + 0x0004003b,0x0000006d,0x0000062d,0x00000007,0x0004003b,0x0000006d,0x0000062e,0x00000007, + 0x0004003b,0x0000006d,0x00000631,0x00000007,0x0004003b,0x0000006d,0x00000634,0x00000007, + 0x0004003b,0x0000006d,0x00000636,0x00000007,0x0004003b,0x0000006d,0x00000637,0x00000007, + 0x0004003b,0x0000006d,0x0000063a,0x00000007,0x0004003b,0x0000006d,0x0000063e,0x00000007, + 0x0004003b,0x0000006d,0x00000640,0x00000007,0x0004003b,0x0000006d,0x00000641,0x00000007, + 0x0004003b,0x0000006d,0x00000644,0x00000007,0x0004003b,0x0000006d,0x00000648,0x00000007, + 0x0004003b,0x0000006d,0x0000064a,0x00000007,0x0004003b,0x0000006d,0x0000064b,0x00000007, + 0x0004003b,0x0000006d,0x0000064e,0x00000007,0x0004003b,0x0000006d,0x00000652,0x00000007, + 0x0004003b,0x0000006d,0x00000654,0x00000007,0x0004003b,0x0000006d,0x00000655,0x00000007, + 0x0004003b,0x0000006d,0x00000658,0x00000007,0x0004003b,0x0000006d,0x0000065c,0x00000007, + 0x0004003b,0x0000006d,0x0000065e,0x00000007,0x0004003b,0x0000006d,0x0000065f,0x00000007, + 0x0004003b,0x0000006d,0x00000662,0x00000007,0x0004003b,0x0000006d,0x00000666,0x00000007, + 0x0004003b,0x0000006d,0x00000668,0x00000007,0x0004003b,0x0000006d,0x00000669,0x00000007, + 0x0004003b,0x0000006d,0x0000066c,0x00000007,0x0004003b,0x0000006d,0x00000670,0x00000007, + 0x0004003b,0x0000006d,0x00000672,0x00000007,0x0004003b,0x0000006d,0x00000673,0x00000007, + 0x0004003b,0x0000006d,0x00000676,0x00000007,0x0004003b,0x0000006d,0x0000067a,0x00000007, + 0x0004003b,0x0000006d,0x0000067c,0x00000007,0x0004003b,0x0000006d,0x0000067d,0x00000007, + 0x0004003b,0x0000006d,0x00000680,0x00000007,0x0004003b,0x0000006d,0x00000684,0x00000007, + 0x0004003b,0x0000006d,0x00000686,0x00000007,0x0004003b,0x0000006d,0x00000687,0x00000007, + 0x0004003b,0x0000006d,0x0000068a,0x00000007,0x0004003b,0x0000006d,0x0000068e,0x00000007, + 0x0004003b,0x0000006d,0x00000690,0x00000007,0x0004003b,0x0000006d,0x00000691,0x00000007, + 0x0004003b,0x0000006d,0x00000694,0x00000007,0x0004003b,0x0000006d,0x00000698,0x00000007, + 0x0004003b,0x0000006d,0x0000069a,0x00000007,0x0004003b,0x0000006d,0x0000069b,0x00000007, + 0x0004003b,0x0000006d,0x0000069e,0x00000007,0x0004003d,0x00000055,0x00000604,0x0000010f, + 0x0003003e,0x00000603,0x00000604,0x0003003e,0x00000605,0x00000602,0x0004003d,0x00000055, + 0x00000607,0x00000110,0x0003003e,0x00000606,0x00000607,0x00070039,0x00000055,0x00000608, + 0x000000ef,0x00000603,0x00000605,0x00000606,0x0003003e,0x00000609,0x00000608,0x00050039, + 0x0000002f,0x0000060a,0x0000010c,0x00000609,0x00050041,0x00000030,0x0000060b,0x00000601, + 0x00000192,0x0003003e,0x0000060b,0x0000060a,0x0004003d,0x00000055,0x0000060e,0x0000010f, + 0x0003003e,0x0000060d,0x0000060e,0x0003003e,0x0000060f,0x0000060c,0x0004003d,0x00000055, + 0x00000611,0x00000110,0x0003003e,0x00000610,0x00000611,0x00070039,0x00000055,0x00000612, + 0x000000ef,0x0000060d,0x0000060f,0x00000610,0x0003003e,0x00000613,0x00000612,0x00050039, + 0x0000002f,0x00000614,0x0000010c,0x00000613,0x00050041,0x00000030,0x00000615,0x00000601, + 0x0000022f,0x0003003e,0x00000615,0x00000614,0x0004003d,0x00000055,0x00000618,0x0000010f, + 0x0003003e,0x00000617,0x00000618,0x0003003e,0x00000619,0x00000616,0x0004003d,0x00000055, + 0x0000061b,0x00000110,0x0003003e,0x0000061a,0x0000061b,0x00070039,0x00000055,0x0000061c, + 0x000000ef,0x00000617,0x00000619,0x0000061a,0x0003003e,0x0000061d,0x0000061c,0x00050039, + 0x0000002f,0x0000061e,0x0000010c,0x0000061d,0x00050041,0x00000030,0x0000061f,0x00000601, + 0x0000019d,0x0003003e,0x0000061f,0x0000061e,0x0004003d,0x00000055,0x00000622,0x0000010f, + 0x0003003e,0x00000621,0x00000622,0x0003003e,0x00000623,0x00000620,0x0004003d,0x00000055, + 0x00000625,0x00000110,0x0003003e,0x00000624,0x00000625,0x00070039,0x00000055,0x00000626, + 0x000000ef,0x00000621,0x00000623,0x00000624,0x0003003e,0x00000627,0x00000626,0x00050039, + 0x0000002f,0x00000628,0x0000010c,0x00000627,0x00050041,0x00000030,0x00000629,0x00000601, + 0x000001a2,0x0003003e,0x00000629,0x00000628,0x0004003d,0x00000055,0x0000062c,0x0000010f, + 0x0003003e,0x0000062b,0x0000062c,0x0003003e,0x0000062d,0x0000062a,0x0004003d,0x00000055, + 0x0000062f,0x00000110,0x0003003e,0x0000062e,0x0000062f,0x00070039,0x00000055,0x00000630, + 0x000000ef,0x0000062b,0x0000062d,0x0000062e,0x0003003e,0x00000631,0x00000630,0x00050039, + 0x0000002f,0x00000632,0x0000010c,0x00000631,0x00050041,0x00000030,0x00000633,0x00000601, + 0x00000198,0x0003003e,0x00000633,0x00000632,0x0004003d,0x00000055,0x00000635,0x0000010f, + 0x0003003e,0x00000634,0x00000635,0x0003003e,0x00000636,0x0000020f,0x0004003d,0x00000055, + 0x00000638,0x00000110,0x0003003e,0x00000637,0x00000638,0x00070039,0x00000055,0x00000639, + 0x000000ef,0x00000634,0x00000636,0x00000637,0x0003003e,0x0000063a,0x00000639,0x00050039, + 0x0000002f,0x0000063b,0x0000010c,0x0000063a,0x00050041,0x00000030,0x0000063c,0x00000601, + 0x000003cc,0x0003003e,0x0000063c,0x0000063b,0x0004003d,0x00000055,0x0000063f,0x0000010f, + 0x0003003e,0x0000063e,0x0000063f,0x0003003e,0x00000640,0x0000063d,0x0004003d,0x00000055, + 0x00000642,0x00000110,0x0003003e,0x00000641,0x00000642,0x00070039,0x00000055,0x00000643, + 0x000000ef,0x0000063e,0x00000640,0x00000641,0x0003003e,0x00000644,0x00000643,0x00050039, + 0x0000002f,0x00000645,0x0000010c,0x00000644,0x00050041,0x00000030,0x00000646,0x00000601, + 0x000003cd,0x0003003e,0x00000646,0x00000645,0x0004003d,0x00000055,0x00000649,0x0000010f, + 0x0003003e,0x00000648,0x00000649,0x0003003e,0x0000064a,0x00000647,0x0004003d,0x00000055, + 0x0000064c,0x00000110,0x0003003e,0x0000064b,0x0000064c,0x00070039,0x00000055,0x0000064d, + 0x000000ef,0x00000648,0x0000064a,0x0000064b,0x0003003e,0x0000064e,0x0000064d,0x00050039, + 0x0000002f,0x0000064f,0x0000010c,0x0000064e,0x00050041,0x00000030,0x00000650,0x00000601, + 0x000001a7,0x0003003e,0x00000650,0x0000064f,0x0004003d,0x00000055,0x00000653,0x0000010f, + 0x0003003e,0x00000652,0x00000653,0x0003003e,0x00000654,0x00000651,0x0004003d,0x00000055, + 0x00000656,0x00000110,0x0003003e,0x00000655,0x00000656,0x00070039,0x00000055,0x00000657, + 0x000000ef,0x00000652,0x00000654,0x00000655,0x0003003e,0x00000658,0x00000657,0x00050039, + 0x0000002f,0x00000659,0x0000010c,0x00000658,0x00050041,0x00000030,0x0000065a,0x00000601, + 0x000003df,0x0003003e,0x0000065a,0x00000659,0x0004003d,0x00000055,0x0000065d,0x0000010f, + 0x0003003e,0x0000065c,0x0000065d,0x0003003e,0x0000065e,0x0000065b,0x0004003d,0x00000055, + 0x00000660,0x00000110,0x0003003e,0x0000065f,0x00000660,0x00070039,0x00000055,0x00000661, + 0x000000ef,0x0000065c,0x0000065e,0x0000065f,0x0003003e,0x00000662,0x00000661,0x00050039, + 0x0000002f,0x00000663,0x0000010c,0x00000662,0x00050041,0x00000030,0x00000664,0x00000601, + 0x000003e0,0x0003003e,0x00000664,0x00000663,0x0004003d,0x00000055,0x00000667,0x0000010f, + 0x0003003e,0x00000666,0x00000667,0x0003003e,0x00000668,0x00000665,0x0004003d,0x00000055, + 0x0000066a,0x00000110,0x0003003e,0x00000669,0x0000066a,0x00070039,0x00000055,0x0000066b, + 0x000000ef,0x00000666,0x00000668,0x00000669,0x0003003e,0x0000066c,0x0000066b,0x00050039, + 0x0000002f,0x0000066d,0x0000010c,0x0000066c,0x00050041,0x00000030,0x0000066e,0x00000601, + 0x000001ad,0x0003003e,0x0000066e,0x0000066d,0x0004003d,0x00000055,0x00000671,0x0000010f, + 0x0003003e,0x00000670,0x00000671,0x0003003e,0x00000672,0x0000066f,0x0004003d,0x00000055, + 0x00000674,0x00000110,0x0003003e,0x00000673,0x00000674,0x00070039,0x00000055,0x00000675, + 0x000000ef,0x00000670,0x00000672,0x00000673,0x0003003e,0x00000676,0x00000675,0x00050039, + 0x0000002f,0x00000677,0x0000010c,0x00000676,0x00050041,0x00000030,0x00000678,0x00000601, + 0x000003e1,0x0003003e,0x00000678,0x00000677,0x0004003d,0x00000055,0x0000067b,0x0000010f, + 0x0003003e,0x0000067a,0x0000067b,0x0003003e,0x0000067c,0x00000679,0x0004003d,0x00000055, + 0x0000067e,0x00000110,0x0003003e,0x0000067d,0x0000067e,0x00070039,0x00000055,0x0000067f, + 0x000000ef,0x0000067a,0x0000067c,0x0000067d,0x0003003e,0x00000680,0x0000067f,0x00050039, + 0x0000002f,0x00000681,0x0000010c,0x00000680,0x00050041,0x00000030,0x00000682,0x00000601, + 0x000003f3,0x0003003e,0x00000682,0x00000681,0x0004003d,0x00000055,0x00000685,0x0000010f, + 0x0003003e,0x00000684,0x00000685,0x0003003e,0x00000686,0x00000683,0x0004003d,0x00000055, + 0x00000688,0x00000110,0x0003003e,0x00000687,0x00000688,0x00070039,0x00000055,0x00000689, + 0x000000ef,0x00000684,0x00000686,0x00000687,0x0003003e,0x0000068a,0x00000689,0x00050039, + 0x0000002f,0x0000068b,0x0000010c,0x0000068a,0x00050041,0x00000030,0x0000068c,0x00000601, + 0x000001b2,0x0003003e,0x0000068c,0x0000068b,0x0004003d,0x00000055,0x0000068f,0x0000010f, + 0x0003003e,0x0000068e,0x0000068f,0x0003003e,0x00000690,0x0000068d,0x0004003d,0x00000055, + 0x00000692,0x00000110,0x0003003e,0x00000691,0x00000692,0x00070039,0x00000055,0x00000693, + 0x000000ef,0x0000068e,0x00000690,0x00000691,0x0003003e,0x00000694,0x00000693,0x00050039, + 0x0000002f,0x00000695,0x0000010c,0x00000694,0x00050041,0x00000030,0x00000696,0x00000601, + 0x000003f4,0x0003003e,0x00000696,0x00000695,0x0004003d,0x00000055,0x00000699,0x0000010f, + 0x0003003e,0x00000698,0x00000699,0x0003003e,0x0000069a,0x00000697,0x0004003d,0x00000055, + 0x0000069c,0x00000110,0x0003003e,0x0000069b,0x0000069c,0x00070039,0x00000055,0x0000069d, + 0x000000ef,0x00000698,0x0000069a,0x0000069b,0x0003003e,0x0000069e,0x0000069d,0x00050039, + 0x0000002f,0x0000069f,0x0000010c,0x0000069e,0x00050041,0x00000030,0x000006a0,0x00000601, + 0x000001b8,0x0003003e,0x000006a0,0x0000069f,0x0004003d,0x000000e5,0x000006a1,0x00000601, + 0x000200fe,0x000006a1,0x00010038,0x00050036,0x0000002f,0x00000116,0x00000000,0x00000113, + 0x00030037,0x0000001b,0x00000114,0x00030037,0x0000006d,0x00000115,0x000200f8,0x00000117, + 0x0004003b,0x0000001b,0x000006a4,0x00000007,0x0004003b,0x0000001b,0x000006aa,0x00000007, + 0x0004003b,0x0000001b,0x000006ab,0x00000007,0x0004003b,0x00000007,0x000006b2,0x00000007, + 0x0004003b,0x00000007,0x000006b3,0x00000007,0x0004003b,0x00000007,0x000006b7,0x00000007, + 0x0004003b,0x00000007,0x000006b8,0x00000007,0x0004003b,0x00000007,0x000006bf,0x00000007, + 0x0004003b,0x00000007,0x000006c0,0x00000007,0x0004003b,0x00000007,0x000006c4,0x00000007, + 0x0004003b,0x00000007,0x000006c5,0x00000007,0x0004003b,0x0000006d,0x000006c8,0x00000007, + 0x0004003b,0x00000030,0x000006cc,0x00000007,0x0004003b,0x0000006d,0x000006cd,0x00000007, + 0x0004003b,0x0000006d,0x000006cf,0x00000007,0x0004003b,0x000000e6,0x000006d2,0x00000007, + 0x0004003b,0x0000001b,0x000006d3,0x00000007,0x0004003d,0x0000001a,0x000006a5,0x00000114, + 0x0004003d,0x00000055,0x000006a6,0x00000115,0x0004006f,0x0000001a,0x000006a7,0x000006a6, + 0x00050085,0x0000001a,0x000006a8,0x000006a5,0x000006a7,0x00050083,0x0000001a,0x000006a9, + 0x000006a8,0x00000329,0x0003003e,0x000006a4,0x000006a9,0x0004003d,0x0000001a,0x000006ac, + 0x000006a4,0x0003003e,0x000006ab,0x000006ac,0x00050039,0x0000001a,0x000006ad,0x0000001e, + 0x000006ab,0x0003003e,0x000006aa,0x000006ad,0x00050041,0x00000037,0x000006ae,0x00000115, + 0x000001eb,0x0004003d,0x00000036,0x000006af,0x000006ae,0x00050082,0x00000036,0x000006b0, + 0x000006af,0x0000022f,0x0004006f,0x00000006,0x000006b1,0x000006b0,0x0003003e,0x000006b2, + 0x000006b1,0x00050041,0x00000007,0x000006b4,0x000006a4,0x000001eb,0x0004003d,0x00000006, + 0x000006b5,0x000006b4,0x0003003e,0x000006b3,0x000006b5,0x00060039,0x00000006,0x000006b6, + 0x00000023,0x000006b2,0x000006b3,0x0003003e,0x000006b7,0x0000014f,0x0003003e,0x000006b8, + 0x000006b6,0x00060039,0x00000006,0x000006b9,0x0000003f,0x000006b7,0x000006b8,0x00050041, + 0x00000007,0x000006ba,0x000006a4,0x000001eb,0x0003003e,0x000006ba,0x000006b9,0x00050041, + 0x00000037,0x000006bb,0x00000115,0x00000284,0x0004003d,0x00000036,0x000006bc,0x000006bb, + 0x00050082,0x00000036,0x000006bd,0x000006bc,0x0000022f,0x0004006f,0x00000006,0x000006be, + 0x000006bd,0x0003003e,0x000006bf,0x000006be,0x00050041,0x00000007,0x000006c1,0x000006a4, + 0x00000284,0x0004003d,0x00000006,0x000006c2,0x000006c1,0x0003003e,0x000006c0,0x000006c2, + 0x00060039,0x00000006,0x000006c3,0x00000023,0x000006bf,0x000006c0,0x0003003e,0x000006c4, + 0x0000014f,0x0003003e,0x000006c5,0x000006c3,0x00060039,0x00000006,0x000006c6,0x0000003f, + 0x000006c4,0x000006c5,0x00050041,0x00000007,0x000006c7,0x000006a4,0x00000284,0x0003003e, + 0x000006c7,0x000006c6,0x0004003d,0x0000001a,0x000006c9,0x000006a4,0x0006000c,0x0000001a, + 0x000006ca,0x00000001,0x00000008,0x000006c9,0x0004006e,0x00000055,0x000006cb,0x000006ca, + 0x0003003e,0x000006c8,0x000006cb,0x0004003d,0x00000055,0x000006ce,0x000006c8,0x0003003e, + 0x000006cd,0x000006ce,0x0004003d,0x00000055,0x000006d0,0x00000115,0x0003003e,0x000006cf, + 0x000006d0,0x00060039,0x000000e5,0x000006d1,0x00000111,0x000006cd,0x000006cf,0x0003003e, + 0x000006d2,0x000006d1,0x0004003d,0x0000001a,0x000006d4,0x000006aa,0x0003003e,0x000006d3, + 0x000006d4,0x00060039,0x0000002f,0x000006d5,0x000000ea,0x000006d2,0x000006d3,0x0003003e, + 0x000006cc,0x000006d5,0x0004003d,0x0000002f,0x000006d6,0x000006cc,0x000200fe,0x000006d6, + 0x00010038,0x00050036,0x0000001a,0x0000011b,0x00000000,0x00000118,0x00030037,0x0000006d, + 0x00000119,0x00030037,0x0000001b,0x0000011a,0x000200f8,0x0000011c,0x0004003b,0x0000001b, + 0x000006d9,0x00000007,0x0004003b,0x0000006d,0x000006df,0x00000007,0x0004003d,0x0000001a, + 0x000006da,0x0000011a,0x00040039,0x00000055,0x000006db,0x00000057,0x0004006f,0x0000001a, + 0x000006dc,0x000006db,0x00050085,0x0000001a,0x000006dd,0x000006da,0x000006dc,0x0004006e, + 0x00000055,0x000006de,0x000006dd,0x0003003e,0x000006df,0x000006de,0x00050039,0x0000001a, + 0x000006e0,0x0000008f,0x000006df,0x0003003e,0x000006d9,0x000006e0,0x0004003d,0x0000001a, + 0x000006e1,0x000006d9,0x000200fe,0x000006e1,0x00010038,0x00050036,0x00000002,0x00000120, + 0x00000000,0x0000011e,0x00030037,0x0000011d,0x0000011f,0x000200f8,0x00000121,0x0004003b, + 0x0000001b,0x000006ea,0x00000007,0x00050041,0x0000001b,0x000006e4,0x0000011f,0x0000022f, + 0x0004003d,0x0000001a,0x000006e5,0x000006e4,0x00050041,0x0000001b,0x000006e6,0x0000011f, + 0x00000198,0x0004003d,0x0000001a,0x000006e7,0x000006e6,0x00050081,0x0000001a,0x000006e8, + 0x000006e5,0x000006e7,0x00050041,0x0000001b,0x000006e9,0x0000011f,0x000003cc,0x0003003e, + 0x000006e9,0x000006e8,0x00050041,0x0000001b,0x000006eb,0x0000011f,0x000003cc,0x0004003d, + 0x0000001a,0x000006ec,0x000006eb,0x0003003e,0x000006ea,0x000006ec,0x00050039,0x000000a2, + 0x000006ed,0x000000be,0x000006ea,0x00050041,0x000000a3,0x000006ee,0x0000011f,0x000001b2, + 0x0003003e,0x000006ee,0x000006ed,0x000100fd,0x00010038,0x00050036,0x00000002,0x00000124, + 0x00000000,0x00000106,0x00030037,0x000000fb,0x00000122,0x00030037,0x000000fd,0x00000123, + 0x000200f8,0x00000125,0x0004003b,0x00000030,0x000006ef,0x00000007,0x0004003b,0x0000001b, + 0x000006f1,0x00000007,0x0004003b,0x0000006d,0x000006f3,0x00000007,0x0004003b,0x0000000f, + 0x00000702,0x00000007,0x00040039,0x00000055,0x000006f0,0x0000005d,0x00050051,0x0000001a, + 0x000006f2,0x00000122,0x00000005,0x0003003e,0x000006f1,0x000006f2,0x0003003e,0x000006f3, + 0x000006f0,0x00060039,0x0000002f,0x000006f4,0x00000116,0x000006f1,0x000006f3,0x0003003e, + 0x000006ef,0x000006f4,0x0004003d,0x0000002f,0x000006f5,0x000006ef,0x0008004f,0x0000000e, + 0x000006f6,0x000006f5,0x000006f5,0x00000000,0x00000001,0x00000002,0x00050041,0x0000000f, + 0x000006f7,0x00000123,0x000001a2,0x0003003e,0x000006f7,0x000006f6,0x00040039,0x00000006, + 0x000006f8,0x00000067,0x00050041,0x0000000f,0x000006f9,0x00000123,0x000001a2,0x0004003d, + 0x0000000e,0x000006fa,0x000006f9,0x0005008e,0x0000000e,0x000006fb,0x000006fa,0x000006f8, + 0x00050041,0x0000000f,0x000006fc,0x00000123,0x000001a2,0x0003003e,0x000006fc,0x000006fb, + 0x00040039,0x00000006,0x000006fd,0x00000091,0x00050041,0x0000000f,0x000006fe,0x00000123, + 0x000001a2,0x0004003d,0x0000000e,0x000006ff,0x000006fe,0x0005008e,0x0000000e,0x00000700, + 0x000006ff,0x000006fd,0x00050041,0x0000000f,0x00000701,0x00000123,0x000001a2,0x0003003e, + 0x00000701,0x00000700,0x00050041,0x0000000f,0x00000703,0x00000123,0x000001a2,0x0004003d, + 0x0000000e,0x00000704,0x00000703,0x0003003e,0x00000702,0x00000704,0x00050039,0x0000000e, + 0x00000705,0x000000b4,0x00000702,0x00050041,0x0000000f,0x00000706,0x00000123,0x000001a2, + 0x0003003e,0x00000706,0x00000705,0x00050041,0x00000007,0x00000708,0x000006ef,0x00000707, + 0x0004003d,0x00000006,0x00000709,0x00000708,0x00050041,0x00000007,0x0000070a,0x00000123, + 0x000003cc,0x0003003e,0x0000070a,0x00000709,0x000100fd,0x00010038,0x00050036,0x00000002, + 0x00000128,0x00000000,0x00000106,0x00030037,0x000000fb,0x00000126,0x00030037,0x000000fd, + 0x00000127,0x000200f8,0x00000129,0x0004003b,0x00000007,0x00000718,0x00000007,0x0004003b, + 0x00000007,0x00000719,0x00000007,0x0004003b,0x0000000f,0x0000071c,0x00000007,0x0004003b, + 0x0000000f,0x00000720,0x00000007,0x0004003b,0x0000000f,0x00000722,0x00000007,0x0004003b, + 0x0000000f,0x00000725,0x00000007,0x0004003b,0x0000000f,0x00000729,0x00000007,0x0004003b, + 0x0000000f,0x0000072b,0x00000007,0x0004003b,0x00000007,0x0000072e,0x00000007,0x0004003b, + 0x00000007,0x00000734,0x00000007,0x0004003b,0x0000000f,0x00000736,0x00000007,0x0004003b, + 0x0000000f,0x00000739,0x00000007,0x0004003b,0x00000007,0x0000073c,0x00000007,0x0004003b, + 0x0000000f,0x00000740,0x00000007,0x0004003b,0x0000000f,0x00000745,0x00000007,0x00050041, + 0x00000007,0x0000070b,0x00000127,0x00000198,0x0004003d,0x00000006,0x0000070c,0x0000070b, + 0x000500ba,0x000000a2,0x0000070d,0x0000070c,0x000002d8,0x000600a9,0x00000006,0x0000070e, + 0x0000070d,0x00000150,0x0000014f,0x00050041,0x00000007,0x0000070f,0x00000127,0x00000198, + 0x0004003d,0x00000006,0x00000710,0x0000070f,0x00050085,0x00000006,0x00000711,0x00000710, + 0x0000070e,0x00050041,0x00000007,0x00000712,0x00000127,0x00000198,0x0003003e,0x00000712, + 0x00000711,0x00050041,0x00000007,0x00000713,0x00000127,0x00000198,0x0004003d,0x00000006, + 0x00000714,0x00000713,0x00050041,0x00000007,0x00000715,0x00000127,0x0000019d,0x0004003d, + 0x00000006,0x00000716,0x00000715,0x00050081,0x00000006,0x00000717,0x00000714,0x00000716, + 0x0003003e,0x00000718,0x000002d8,0x0003003e,0x00000719,0x00000717,0x00060039,0x00000006, + 0x0000071a,0x0000003f,0x00000718,0x00000719,0x00050041,0x00000007,0x0000071b,0x00000127, + 0x00000198,0x0003003e,0x0000071b,0x0000071a,0x00050041,0x0000000f,0x0000071d,0x00000127, + 0x0000022f,0x0004003d,0x0000000e,0x0000071e,0x0000071d,0x0003003e,0x0000071c,0x0000071e, + 0x00050039,0x0000000e,0x0000071f,0x000000b1,0x0000071c,0x0003003e,0x00000720,0x0000071f, + 0x00050039,0x0000000e,0x00000721,0x000000b7,0x00000720,0x0003003e,0x00000722,0x00000721, + 0x00050039,0x0000000e,0x00000723,0x000000b4,0x00000722,0x00050041,0x0000000f,0x00000724, + 0x00000127,0x0000022f,0x0003003e,0x00000724,0x00000723,0x00050041,0x0000000f,0x00000726, + 0x00000127,0x000001a2,0x0004003d,0x0000000e,0x00000727,0x00000726,0x0003003e,0x00000725, + 0x00000727,0x00050039,0x0000000e,0x00000728,0x000000b1,0x00000725,0x0003003e,0x00000729, + 0x00000728,0x00050039,0x0000000e,0x0000072a,0x000000b7,0x00000729,0x0003003e,0x0000072b, + 0x0000072a,0x00050039,0x0000000e,0x0000072c,0x000000b4,0x0000072b,0x00050041,0x0000000f, + 0x0000072d,0x00000127,0x000001a2,0x0003003e,0x0000072d,0x0000072c,0x00050041,0x00000007, + 0x0000072f,0x00000127,0x0000019d,0x0004003d,0x00000006,0x00000730,0x0000072f,0x00050041, + 0x00000007,0x00000731,0x00000127,0x00000198,0x0004003d,0x00000006,0x00000732,0x00000731, + 0x00050088,0x00000006,0x00000733,0x00000730,0x00000732,0x0003003e,0x00000734,0x00000733, + 0x00050039,0x00000006,0x00000735,0x00000018,0x00000734,0x0003003e,0x0000072e,0x00000735, + 0x00050041,0x0000000f,0x00000737,0x00000127,0x000001a2,0x0004003d,0x0000000e,0x00000738, + 0x00000737,0x0003003e,0x00000736,0x00000738,0x00050041,0x0000000f,0x0000073a,0x00000127, + 0x0000022f,0x0004003d,0x0000000e,0x0000073b,0x0000073a,0x0003003e,0x00000739,0x0000073b, + 0x0004003d,0x00000006,0x0000073d,0x0000072e,0x0003003e,0x0000073c,0x0000073d,0x00070039, + 0x0000000e,0x0000073e,0x00000014,0x00000736,0x00000739,0x0000073c,0x00050041,0x0000000f, + 0x0000073f,0x00000127,0x000001a2,0x0003003e,0x0000073f,0x0000073e,0x00050041,0x0000000f, + 0x00000741,0x00000127,0x000001a2,0x0004003d,0x0000000e,0x00000742,0x00000741,0x0003003e, + 0x00000740,0x00000742,0x00050039,0x0000000e,0x00000743,0x000000b1,0x00000740,0x00050041, + 0x0000000f,0x00000744,0x00000127,0x000001a2,0x0003003e,0x00000744,0x00000743,0x00050041, + 0x0000000f,0x00000746,0x00000127,0x000001a2,0x0004003d,0x0000000e,0x00000747,0x00000746, + 0x0003003e,0x00000745,0x00000747,0x00050039,0x0000000e,0x00000748,0x000000ba,0x00000745, + 0x00050041,0x0000000f,0x00000749,0x00000127,0x000001a2,0x0003003e,0x00000749,0x00000748, + 0x000100fd,0x00010038,0x00050036,0x00000002,0x0000012c,0x00000000,0x00000106,0x00030037, + 0x000000fb,0x0000012a,0x00030037,0x000000fd,0x0000012b,0x000200f8,0x0000012d,0x0004003b, + 0x00000007,0x0000074a,0x00000007,0x0004003b,0x00000007,0x0000074e,0x00000007,0x0004003b, + 0x00000007,0x00000750,0x00000007,0x0004003b,0x00000007,0x00000755,0x00000007,0x0004003b, + 0x00000007,0x00000757,0x00000007,0x0004003b,0x00000007,0x0000075a,0x00000007,0x0004003b, + 0x00000007,0x0000075b,0x00000007,0x0004003b,0x00000007,0x0000075d,0x00000007,0x0004003b, + 0x00000007,0x0000075f,0x00000007,0x0004003b,0x00000007,0x00000761,0x00000007,0x0004003b, + 0x00000007,0x00000762,0x00000007,0x0004003b,0x00000007,0x00000764,0x00000007,0x0004003b, + 0x00000007,0x00000767,0x00000007,0x0004003b,0x00000007,0x00000769,0x00000007,0x0004003b, + 0x00000007,0x0000076b,0x00000007,0x0004003b,0x00000007,0x0000076d,0x00000007,0x0004003b, + 0x00000007,0x0000076f,0x00000007,0x0004003b,0x00000007,0x00000771,0x00000007,0x0004003b, + 0x00000007,0x00000773,0x00000007,0x0004003b,0x00000007,0x00000775,0x00000007,0x0004003b, + 0x00000007,0x00000776,0x00000007,0x0004003b,0x00000007,0x00000777,0x00000007,0x0004003b, + 0x0000000f,0x0000077a,0x00000007,0x0004003b,0x0000000f,0x00000782,0x00000007,0x0004003b, + 0x0000000f,0x00000785,0x00000007,0x0004003b,0x0000000f,0x00000787,0x00000007,0x0004003b, + 0x0000000f,0x00000789,0x00000007,0x0004003b,0x0000000f,0x00000796,0x00000007,0x0004003b, + 0x0000000f,0x00000799,0x00000007,0x0004003b,0x00000007,0x000007a0,0x00000007,0x0004003b, + 0x00000007,0x000007a1,0x00000007,0x0004003b,0x00000007,0x000007a3,0x00000007,0x0004003b, + 0x00000007,0x000007ac,0x00000007,0x0004003b,0x0000000f,0x000007af,0x00000007,0x0004003b, + 0x0000000f,0x000007b1,0x00000007,0x0004003b,0x00000007,0x000007b4,0x00000007,0x00050051, + 0x00000006,0x0000074b,0x0000012a,0x00000006,0x00050088,0x00000006,0x0000074d,0x0000074b, + 0x0000074c,0x0003003e,0x0000074e,0x0000074d,0x00050039,0x00000006,0x0000074f,0x00000018, + 0x0000074e,0x0003003e,0x0000074a,0x0000074f,0x00050051,0x00000006,0x00000752,0x0000012a, + 0x0000000c,0x00050088,0x00000006,0x00000753,0x00000752,0x0000074c,0x00050083,0x00000006, + 0x00000754,0x00000751,0x00000753,0x0003003e,0x00000755,0x00000754,0x00050039,0x00000006, + 0x00000756,0x00000018,0x00000755,0x0003003e,0x00000750,0x00000756,0x00050051,0x00000006, + 0x00000758,0x0000012a,0x0000000a,0x00050083,0x00000006,0x00000759,0x00000150,0x00000758, + 0x0003003e,0x00000757,0x00000759,0x00050051,0x00000006,0x0000075c,0x0000012a,0x00000008, + 0x0003003e,0x0000075b,0x0000075c,0x0003003e,0x0000075d,0x000002a2,0x00060039,0x00000006, + 0x0000075e,0x00000053,0x0000075b,0x0000075d,0x0003003e,0x0000075a,0x0000075e,0x00050051, + 0x00000006,0x00000760,0x0000012a,0x00000009,0x0003003e,0x0000075f,0x00000760,0x0004003d, + 0x00000006,0x00000763,0x0000075a,0x0003003e,0x00000762,0x00000763,0x0004003d,0x00000006, + 0x00000765,0x0000075f,0x0003003e,0x00000764,0x00000765,0x00060039,0x00000006,0x00000766, + 0x0000003f,0x00000762,0x00000764,0x0004003d,0x00000006,0x00000768,0x00000757,0x0003003e, + 0x00000767,0x00000768,0x0003003e,0x00000769,0x00000766,0x00060039,0x00000006,0x0000076a, + 0x0000003f,0x00000767,0x00000769,0x0004003d,0x00000006,0x0000076c,0x00000750,0x0003003e, + 0x0000076b,0x0000076c,0x0003003e,0x0000076d,0x0000076a,0x00060039,0x00000006,0x0000076e, + 0x0000003f,0x0000076b,0x0000076d,0x0004003d,0x00000006,0x00000770,0x0000074a,0x0003003e, + 0x0000076f,0x00000770,0x0003003e,0x00000771,0x0000076e,0x00060039,0x00000006,0x00000772, + 0x0000003f,0x0000076f,0x00000771,0x0003003e,0x00000761,0x00000772,0x0003003e,0x00000775, + 0x00000774,0x0003003e,0x00000776,0x00000150,0x0004003d,0x00000006,0x00000778,0x00000761, + 0x0003003e,0x00000777,0x00000778,0x00070039,0x00000006,0x00000779,0x0000000c,0x00000775, + 0x00000776,0x00000777,0x0003003e,0x00000773,0x00000779,0x00060041,0x0000000f,0x0000077b, + 0x0000012b,0x00000192,0x0000022f,0x0004003d,0x0000000e,0x0000077c,0x0000077b,0x00050085, + 0x0000000e,0x0000077f,0x0000077c,0x0000077e,0x0004003d,0x00000006,0x00000780,0x00000773, + 0x0005008e,0x0000000e,0x00000781,0x0000077f,0x00000780,0x0003003e,0x0000077a,0x00000781, + 0x0004003d,0x0000000e,0x00000786,0x0000077a,0x0003003e,0x00000785,0x00000786,0x0003003e, + 0x00000787,0x00000784,0x00060039,0x0000000e,0x00000788,0x00000047,0x00000785,0x00000787, + 0x0003003e,0x00000782,0x00000788,0x00050041,0x0000000f,0x0000078a,0x0000012b,0x000001a2, + 0x0004003d,0x0000000e,0x0000078b,0x0000078a,0x00060041,0x0000000f,0x0000078c,0x0000012b, + 0x00000192,0x00000192,0x0004003d,0x0000000e,0x0000078d,0x0000078c,0x00050083,0x0000000e, + 0x0000078e,0x0000078b,0x0000078d,0x0004003d,0x0000000e,0x0000078f,0x00000782,0x00050088, + 0x0000000e,0x00000790,0x0000078e,0x0000078f,0x0003003e,0x00000789,0x00000790,0x0004003d, + 0x0000000e,0x00000791,0x00000789,0x0006000c,0x00000006,0x00000792,0x00000001,0x00000042, + 0x00000791,0x000500ba,0x000000a2,0x00000793,0x00000792,0x00000150,0x000300f7,0x00000795, + 0x00000000,0x000400fa,0x00000793,0x00000794,0x00000795,0x000200f8,0x00000794,0x0004003d, + 0x0000000e,0x00000797,0x00000789,0x0006000c,0x0000000e,0x00000798,0x00000001,0x00000045, + 0x00000797,0x0003003e,0x00000796,0x00000798,0x0004003d,0x0000000e,0x0000079a,0x00000796, + 0x0004003d,0x0000000e,0x0000079b,0x0000077a,0x00050085,0x0000000e,0x0000079c,0x0000079a, + 0x0000079b,0x00060041,0x0000000f,0x0000079d,0x0000012b,0x00000192,0x00000192,0x0004003d, + 0x0000000e,0x0000079e,0x0000079d,0x00050081,0x0000000e,0x0000079f,0x0000079c,0x0000079e, + 0x0003003e,0x00000799,0x0000079f,0x00050051,0x00000006,0x000007a2,0x0000012a,0x0000000b, + 0x0003003e,0x000007a1,0x000007a2,0x00050041,0x00000007,0x000007a4,0x0000012b,0x000003cd, + 0x0004003d,0x00000006,0x000007a5,0x000007a4,0x0003003e,0x000007a3,0x000007a5,0x00060039, + 0x00000006,0x000007a6,0x0000003f,0x000007a1,0x000007a3,0x00050051,0x00000006,0x000007a7, + 0x0000012a,0x0000000a,0x00050085,0x00000006,0x000007a8,0x000007a6,0x000007a7,0x00050051, + 0x00000006,0x000007a9,0x0000012a,0x00000007,0x00050083,0x00000006,0x000007aa,0x00000150, + 0x000007a9,0x00050085,0x00000006,0x000007ab,0x000007a8,0x000007aa,0x0003003e,0x000007a0, + 0x000007ab,0x0004003d,0x00000006,0x000007ad,0x000007a0,0x0003003e,0x000007ac,0x000007ad, + 0x00050039,0x00000006,0x000007ae,0x00000018,0x000007ac,0x0004003d,0x0000000e,0x000007b0, + 0x00000799,0x0003003e,0x000007af,0x000007b0,0x00050041,0x0000000f,0x000007b2,0x0000012b, + 0x000001a2,0x0004003d,0x0000000e,0x000007b3,0x000007b2,0x0003003e,0x000007b1,0x000007b3, + 0x0003003e,0x000007b4,0x000007ae,0x00070039,0x0000000e,0x000007b5,0x00000014,0x000007af, + 0x000007b1,0x000007b4,0x00050041,0x0000000f,0x000007b6,0x0000012b,0x000001a2,0x0003003e, + 0x000007b6,0x000007b5,0x000200f9,0x00000795,0x000200f8,0x00000795,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x00000131,0x00000000,0x0000012e,0x00030037,0x0000011d,0x0000012f, + 0x00030037,0x000000fd,0x00000130,0x000200f8,0x00000132,0x0004003b,0x00000007,0x000007c0, + 0x00000007,0x0004003b,0x00000007,0x000007c1,0x00000007,0x0004003b,0x00000007,0x000007c5, + 0x00000007,0x0004003b,0x00000007,0x000007c8,0x00000007,0x0004003b,0x00000007,0x000007cc, + 0x00000007,0x0004003b,0x00000007,0x000007cd,0x00000007,0x0004003b,0x00000007,0x000007d4, + 0x00000007,0x0004003b,0x00000007,0x000007d5,0x00000007,0x0004003b,0x00000007,0x000007db, + 0x00000007,0x0004003b,0x00000007,0x000007de,0x00000007,0x0004003b,0x00000007,0x000007e1, + 0x00000007,0x0004003b,0x0000006d,0x000007e2,0x00000007,0x0004003b,0x00000007,0x000007e9, + 0x00000007,0x0004003b,0x00000007,0x000007ea,0x00000007,0x0004003b,0x00000007,0x000007f4, + 0x00000007,0x0004003b,0x00000007,0x000007f5,0x00000007,0x0004003b,0x00000007,0x000007f7, + 0x00000007,0x0004003b,0x00000007,0x000007f8,0x00000007,0x0004003b,0x00000007,0x000007fb, + 0x00000007,0x0004003b,0x00000007,0x00000806,0x00000007,0x0004003b,0x00000007,0x00000807, + 0x00000007,0x0004003b,0x0000001b,0x0000080a,0x00000007,0x0004003b,0x0000001b,0x00000810, + 0x00000007,0x00050041,0x000000a3,0x000007b7,0x0000012f,0x000003f4,0x0004003d,0x000000a2, + 0x000007b8,0x000007b7,0x000500a4,0x000000a2,0x000007ba,0x000007b8,0x000007b9,0x000600a9, + 0x00000006,0x000007bb,0x000007ba,0x00000150,0x0000014f,0x00050041,0x00000007,0x000007bc, + 0x00000130,0x000003cc,0x0004003d,0x00000006,0x000007bd,0x000007bc,0x00050085,0x00000006, + 0x000007be,0x000007bd,0x000007bb,0x00050041,0x00000007,0x000007bf,0x00000130,0x000003cc, + 0x0003003e,0x000007bf,0x000007be,0x00050041,0x00000007,0x000007c2,0x0000012f,0x000003e0, + 0x0004003d,0x00000006,0x000007c3,0x000007c2,0x0003003e,0x000007c1,0x000007c3,0x00050039, + 0x00000006,0x000007c4,0x00000018,0x000007c1,0x00050041,0x00000007,0x000007c6,0x0000012f, + 0x000003df,0x0004003d,0x00000006,0x000007c7,0x000007c6,0x0003003e,0x000007c5,0x000007c7, + 0x00050041,0x00000007,0x000007c9,0x0000012f,0x000001a7,0x0004003d,0x00000006,0x000007ca, + 0x000007c9,0x0003003e,0x000007c8,0x000007ca,0x00060039,0x00000006,0x000007cb,0x0000003f, + 0x000007c5,0x000007c8,0x0003003e,0x000007cc,0x000007c4,0x0003003e,0x000007cd,0x000007cb, + 0x00060039,0x00000006,0x000007ce,0x0000003f,0x000007cc,0x000007cd,0x0003003e,0x000007c0, + 0x000007ce,0x00050041,0x00000007,0x000007cf,0x00000130,0x000003cc,0x0004003d,0x00000006, + 0x000007d0,0x000007cf,0x0004003d,0x00000006,0x000007d1,0x000007c0,0x00050085,0x00000006, + 0x000007d2,0x000007d1,0x00000361,0x00050083,0x00000006,0x000007d3,0x000007d0,0x000007d2, + 0x0003003e,0x000007d4,0x0000014f,0x0003003e,0x000007d5,0x000007d3,0x00060039,0x00000006, + 0x000007d6,0x0000003f,0x000007d4,0x000007d5,0x00050041,0x00000007,0x000007d7,0x00000130, + 0x000003cc,0x0003003e,0x000007d7,0x000007d6,0x00050041,0x00000007,0x000007d8,0x00000130, + 0x000003cc,0x0004003d,0x00000006,0x000007d9,0x000007d8,0x00050083,0x00000006,0x000007da, + 0x000007d9,0x00000150,0x0003003e,0x000007db,0x000007da,0x00050039,0x00000006,0x000007dc, + 0x00000018,0x000007db,0x00050085,0x00000006,0x000007dd,0x000007dc,0x00000150,0x0003003e, + 0x000007de,0x000007dd,0x00050039,0x00000006,0x000007df,0x00000018,0x000007de,0x00050041, + 0x00000007,0x000007e0,0x00000130,0x000003cd,0x0003003e,0x000007e0,0x000007df,0x00050041, + 0x0000006d,0x000007e3,0x0000012f,0x00000192,0x0004003d,0x00000055,0x000007e4,0x000007e3, + 0x0003003e,0x000007e2,0x000007e4,0x00050039,0x00000006,0x000007e5,0x00000086,0x000007e2, + 0x00050041,0x00000007,0x000007e6,0x0000012f,0x000003e0,0x0004003d,0x00000006,0x000007e7, + 0x000007e6,0x00050085,0x00000006,0x000007e8,0x000007e7,0x0000014f,0x0003003e,0x000007e9, + 0x000007e8,0x00050041,0x00000007,0x000007eb,0x0000012f,0x000003df,0x0004003d,0x00000006, + 0x000007ec,0x000007eb,0x0003003e,0x000007ea,0x000007ec,0x00060039,0x00000006,0x000007ed, + 0x0000003f,0x000007e9,0x000007ea,0x00050083,0x00000006,0x000007ee,0x00000150,0x000007ed, + 0x00050085,0x00000006,0x000007ef,0x000007e5,0x000007ee,0x0003003e,0x000007e1,0x000007ef, + 0x00050041,0x00000007,0x000007f0,0x00000130,0x000003cc,0x0004003d,0x00000006,0x000007f1, + 0x000007f0,0x0004003d,0x00000006,0x000007f2,0x000007e1,0x00050081,0x00000006,0x000007f3, + 0x000007f1,0x000007f2,0x0003003e,0x000007f4,0x000007f3,0x0003003e,0x000007f5,0x00000361, + 0x00060039,0x00000006,0x000007f6,0x00000023,0x000007f4,0x000007f5,0x0003003e,0x000007f7, + 0x0000014f,0x0003003e,0x000007f8,0x000007f6,0x00060039,0x00000006,0x000007f9,0x0000003f, + 0x000007f7,0x000007f8,0x00050041,0x00000007,0x000007fa,0x00000130,0x000003cc,0x0003003e, + 0x000007fa,0x000007f9,0x00040039,0x00000006,0x000007fd,0x00000065,0x00050088,0x00000006, + 0x000007fe,0x000007fc,0x000007fd,0x0004003d,0x00000006,0x000007ff,0x000007c0,0x00050083, + 0x00000006,0x00000800,0x00000150,0x000007ff,0x00050085,0x00000006,0x00000801,0x000007fe, + 0x00000800,0x0003003e,0x000007fb,0x00000801,0x00050041,0x00000007,0x00000802,0x00000130, + 0x000003cc,0x0004003d,0x00000006,0x00000803,0x00000802,0x0004003d,0x00000006,0x00000804, + 0x000007fb,0x00050083,0x00000006,0x00000805,0x00000803,0x00000804,0x0003003e,0x00000806, + 0x0000014f,0x0003003e,0x00000807,0x00000805,0x00060039,0x00000006,0x00000808,0x0000003f, + 0x00000806,0x00000807,0x00050041,0x00000007,0x00000809,0x00000130,0x000003cc,0x0003003e, + 0x00000809,0x00000808,0x00050041,0x0000001b,0x0000080b,0x0000012f,0x0000022f,0x0004003d, + 0x0000001a,0x0000080c,0x0000080b,0x00050041,0x0000001b,0x0000080d,0x0000012f,0x00000198, + 0x0004003d,0x0000001a,0x0000080e,0x0000080d,0x00050083,0x0000001a,0x0000080f,0x0000080c, + 0x0000080e,0x0003003e,0x0000080a,0x0000080f,0x0004003d,0x0000001a,0x00000811,0x0000080a, + 0x0003003e,0x00000810,0x00000811,0x00050039,0x000000a2,0x00000812,0x000000be,0x00000810, + 0x000500a4,0x000000a2,0x00000814,0x00000812,0x00000813,0x000600a9,0x00000006,0x00000815, + 0x00000814,0x00000150,0x0000014f,0x00050041,0x00000007,0x00000816,0x00000130,0x000003cc, + 0x0004003d,0x00000006,0x00000817,0x00000816,0x00050085,0x00000006,0x00000818,0x00000817, + 0x00000815,0x00050041,0x00000007,0x00000819,0x00000130,0x000003cc,0x0003003e,0x00000819, + 0x00000818,0x000100fd,0x00010038,0x00050036,0x00000002,0x00000135,0x00000000,0x00000106, + 0x00030037,0x000000fb,0x00000133,0x00030037,0x000000fd,0x00000134,0x000200f8,0x00000136, + 0x0004003b,0x00000007,0x0000081a,0x00000007,0x0004003b,0x00000007,0x00000821,0x00000007, + 0x0004003b,0x00000007,0x00000822,0x00000007,0x0004003b,0x00000007,0x00000824,0x00000007, + 0x0004003b,0x00000007,0x00000826,0x00000007,0x0004003b,0x00000007,0x00000828,0x00000007, + 0x0004003b,0x00000007,0x00000829,0x00000007,0x0004003b,0x00000007,0x0000082b,0x00000007, + 0x0004003b,0x00000007,0x0000082d,0x00000007,0x00050051,0x00000006,0x0000081b,0x00000133, + 0x0000000a,0x0003003e,0x0000081a,0x0000081b,0x00050051,0x00000006,0x0000081d,0x00000133, + 0x00000006,0x00040039,0x00000006,0x0000081e,0x0000006b,0x00050085,0x00000006,0x0000081f, + 0x0000081d,0x0000081e,0x00050088,0x00000006,0x00000820,0x0000081f,0x000002a2,0x0003003e, + 0x00000821,0x0000014f,0x0003003e,0x00000822,0x00000820,0x00060039,0x00000006,0x00000823, + 0x0000003f,0x00000821,0x00000822,0x0003003e,0x00000824,0x00000823,0x00050039,0x00000006, + 0x00000825,0x00000018,0x00000824,0x0004003d,0x00000006,0x00000827,0x0000081a,0x0003003e, + 0x00000826,0x00000827,0x0003003e,0x00000828,0x0000081c,0x0003003e,0x00000829,0x00000825, + 0x00070039,0x00000006,0x0000082a,0x0000000c,0x00000826,0x00000828,0x00000829,0x0004003d, + 0x00000006,0x0000082c,0x0000081a,0x0003003e,0x0000082b,0x0000082c,0x0003003e,0x0000082d, + 0x0000082a,0x00060039,0x00000006,0x0000082e,0x00000023,0x0000082b,0x0000082d,0x0003003e, + 0x0000081a,0x0000082e,0x0004003d,0x00000006,0x0000082f,0x0000081a,0x00050041,0x00000007, + 0x00000830,0x00000134,0x00000198,0x0003003e,0x00000830,0x0000082f,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x0000013b,0x00000000,0x00000137,0x00030037,0x0000006d,0x00000138, + 0x00030037,0x0000011d,0x00000139,0x00030037,0x000000fd,0x0000013a,0x000200f8,0x0000013c, + 0x0004003b,0x0000001b,0x00000833,0x00000007,0x0004003b,0x0000001b,0x00000846,0x00000007, + 0x0004003b,0x0000006d,0x00000849,0x00000007,0x0004003b,0x0000006d,0x0000084a,0x00000007, + 0x0004003b,0x0000006d,0x0000084d,0x00000007,0x0004003b,0x0000001b,0x0000084f,0x00000007, + 0x0004003b,0x0000001b,0x00000853,0x00000007,0x0004003b,0x0000011d,0x00000858,0x00000007, + 0x0004003b,0x0000001b,0x0000085c,0x00000007,0x0004003b,0x0000001b,0x0000085f,0x00000007, + 0x0004003b,0x0000006d,0x00000861,0x00000007,0x0004003b,0x0000006d,0x00000862,0x00000007, + 0x0004003b,0x0000001b,0x00000864,0x00000007,0x0004003b,0x0000001b,0x00000868,0x00000007, + 0x0004003b,0x0000001b,0x0000086d,0x00000007,0x0004003b,0x0000006d,0x00000870,0x00000007, + 0x0004003b,0x0000006d,0x00000871,0x00000007,0x0004003b,0x0000001b,0x00000873,0x00000007, + 0x0004003b,0x00000030,0x00000881,0x00000007,0x0004003b,0x0000001b,0x00000882,0x00000007, + 0x0004003b,0x00000007,0x00000886,0x00000007,0x0004003b,0x00000007,0x0000088b,0x00000007, + 0x0004003b,0x00000007,0x00000890,0x00000007,0x0004003b,0x00000007,0x00000895,0x00000007, + 0x0004003d,0x00000055,0x00000831,0x00000138,0x00050041,0x0000006d,0x00000832,0x00000139, + 0x00000192,0x0003003e,0x00000832,0x00000831,0x0004003d,0x00000055,0x00000834,0x00000138, + 0x0004006f,0x0000001a,0x00000835,0x00000834,0x00050050,0x0000001a,0x00000836,0x000002a2, + 0x000002a2,0x00050081,0x0000001a,0x00000837,0x00000835,0x00000836,0x00040039,0x00000055, + 0x00000838,0x0000005b,0x0004006f,0x0000001a,0x00000839,0x00000838,0x00050088,0x0000001a, + 0x0000083a,0x00000837,0x00000839,0x0003003e,0x00000833,0x0000083a,0x0004003d,0x0000001a, + 0x0000083b,0x00000833,0x00050041,0x0000001b,0x0000083c,0x00000139,0x0000022f,0x0003003e, + 0x0000083c,0x0000083b,0x0004003d,0x0000001a,0x0000083d,0x00000833,0x00040039,0x0000001a, + 0x0000083e,0x00000060,0x00040039,0x00000055,0x0000083f,0x00000057,0x0004006f,0x0000001a, + 0x00000840,0x0000083f,0x00050088,0x0000001a,0x00000841,0x0000083e,0x00000840,0x00050081, + 0x0000001a,0x00000842,0x0000083d,0x00000841,0x00050041,0x0000001b,0x00000843,0x00000139, + 0x0000019d,0x0003003e,0x00000843,0x00000842,0x00040039,0x00000055,0x00000844,0x00000057, + 0x00040039,0x00000055,0x00000845,0x00000059,0x00050041,0x0000001b,0x00000847,0x00000139, + 0x0000019d,0x0004003d,0x0000001a,0x00000848,0x00000847,0x0003003e,0x00000846,0x00000848, + 0x0003003e,0x00000849,0x00000844,0x0003003e,0x0000084a,0x00000845,0x00070039,0x0000001a, + 0x0000084b,0x000000ca,0x00000846,0x00000849,0x0000084a,0x00050041,0x0000001b,0x0000084c, + 0x00000139,0x000001a2,0x0003003e,0x0000084c,0x0000084b,0x0004003d,0x00000055,0x0000084e, + 0x00000138,0x0003003e,0x0000084d,0x0000084e,0x0004003d,0x0000001a,0x00000850,0x00000833, + 0x0003003e,0x0000084f,0x00000850,0x00060039,0x0000001a,0x00000851,0x0000011b,0x0000084d, + 0x0000084f,0x00050041,0x0000001b,0x00000852,0x00000139,0x00000198,0x0003003e,0x00000852, + 0x00000851,0x00050041,0x0000001b,0x00000854,0x00000139,0x00000198,0x0004003d,0x0000001a, + 0x00000855,0x00000854,0x0003003e,0x00000853,0x00000855,0x00050039,0x00000006,0x00000856, + 0x00000098,0x00000853,0x00050041,0x00000007,0x00000857,0x00000139,0x000003cd,0x0003003e, + 0x00000857,0x00000856,0x0004003d,0x000000fb,0x00000859,0x00000139,0x0003003e,0x00000858, + 0x00000859,0x00050039,0x00000002,0x0000085a,0x00000120,0x00000858,0x0004003d,0x000000fb, + 0x0000085b,0x00000858,0x0003003e,0x00000139,0x0000085b,0x00040039,0x00000055,0x0000085d, + 0x00000057,0x00040039,0x00000055,0x0000085e,0x00000059,0x0004003d,0x0000001a,0x00000860, + 0x00000833,0x0003003e,0x0000085f,0x00000860,0x0003003e,0x00000861,0x0000085d,0x0003003e, + 0x00000862,0x0000085e,0x00070039,0x0000001a,0x00000863,0x000000ca,0x0000085f,0x00000861, + 0x00000862,0x0003003e,0x0000085c,0x00000863,0x0004003d,0x0000001a,0x00000865,0x0000085c, + 0x0003003e,0x00000864,0x00000865,0x00050039,0x00000006,0x00000866,0x00000082,0x00000864, + 0x00050041,0x00000007,0x00000867,0x00000139,0x000003e1,0x0003003e,0x00000867,0x00000866, + 0x00040039,0x00000055,0x00000869,0x00000057,0x00050050,0x00000055,0x0000086a,0x0000019d, + 0x0000019d,0x00050087,0x00000055,0x0000086b,0x00000869,0x0000086a,0x00040039,0x00000055, + 0x0000086c,0x0000007b,0x00050041,0x0000001b,0x0000086e,0x00000139,0x0000019d,0x0004003d, + 0x0000001a,0x0000086f,0x0000086e,0x0003003e,0x0000086d,0x0000086f,0x0003003e,0x00000870, + 0x0000086b,0x0003003e,0x00000871,0x0000086c,0x00070039,0x0000001a,0x00000872,0x000000ca, + 0x0000086d,0x00000870,0x00000871,0x0003003e,0x00000868,0x00000872,0x0004003d,0x0000001a, + 0x00000874,0x00000868,0x0003003e,0x00000873,0x00000874,0x00050039,0x00000006,0x00000875, + 0x0000007f,0x00000873,0x00050041,0x00000007,0x00000876,0x00000139,0x000003f3,0x0003003e, + 0x00000876,0x00000875,0x00050041,0x000000a3,0x00000877,0x00000139,0x000001b2,0x0004003d, + 0x000000a2,0x00000878,0x00000877,0x000500a4,0x000000a2,0x00000879,0x00000878,0x000007b9, + 0x000400a8,0x000000a2,0x0000087a,0x00000879,0x000300f7,0x0000087c,0x00000000,0x000400fa, + 0x0000087a,0x0000087b,0x0000087c,0x000200f8,0x0000087b,0x00040039,0x00000006,0x0000087d, + 0x00000069,0x000500b4,0x000000a2,0x0000087e,0x0000014f,0x0000087d,0x000200f9,0x0000087c, + 0x000200f8,0x0000087c,0x000700f5,0x000000a2,0x0000087f,0x00000879,0x0000013c,0x0000087e, + 0x0000087b,0x00050041,0x000000a3,0x00000880,0x00000139,0x000003f4,0x0003003e,0x00000880, + 0x0000087f,0x00050041,0x0000001b,0x00000883,0x00000139,0x000001a2,0x0004003d,0x0000001a, + 0x00000884,0x00000883,0x0003003e,0x00000882,0x00000884,0x00050039,0x0000002f,0x00000885, + 0x00000095,0x00000882,0x0003003e,0x00000881,0x00000885,0x00050041,0x00000007,0x00000887, + 0x00000881,0x000001eb,0x0004003d,0x00000006,0x00000888,0x00000887,0x0003003e,0x00000886, + 0x00000888,0x00050039,0x00000006,0x00000889,0x00000018,0x00000886,0x00050041,0x00000007, + 0x0000088a,0x00000139,0x000003df,0x0003003e,0x0000088a,0x00000889,0x00050041,0x00000007, + 0x0000088c,0x00000881,0x00000284,0x0004003d,0x00000006,0x0000088d,0x0000088c,0x0003003e, + 0x0000088b,0x0000088d,0x00050039,0x00000006,0x0000088e,0x00000018,0x0000088b,0x00050041, + 0x00000007,0x0000088f,0x00000139,0x000001a7,0x0003003e,0x0000088f,0x0000088e,0x00050041, + 0x00000007,0x00000891,0x00000881,0x00000288,0x0004003d,0x00000006,0x00000892,0x00000891, + 0x0003003e,0x00000890,0x00000892,0x00050039,0x00000006,0x00000893,0x00000018,0x00000890, + 0x00050041,0x00000007,0x00000894,0x00000139,0x000003e0,0x0003003e,0x00000894,0x00000893, + 0x00050041,0x00000007,0x00000896,0x00000881,0x00000707,0x0004003d,0x00000006,0x00000897, + 0x00000896,0x0003003e,0x00000895,0x00000897,0x00050039,0x00000006,0x00000898,0x00000018, + 0x00000895,0x00050041,0x00000007,0x00000899,0x00000139,0x000001ad,0x0003003e,0x00000899, + 0x00000898,0x00050041,0x00000007,0x0000089a,0x00000139,0x000001ad,0x0004003d,0x00000006, + 0x0000089b,0x0000089a,0x00050085,0x00000006,0x0000089d,0x0000089b,0x0000089c,0x0006000c, + 0x00000006,0x0000089e,0x00000001,0x00000001,0x0000089d,0x000500ba,0x000000a2,0x0000089f, + 0x0000089e,0x00000150,0x000600a9,0x00000006,0x000008a0,0x0000089f,0x00000150,0x0000014f, + 0x00050041,0x00000007,0x000008a1,0x00000139,0x000001ad,0x0004003d,0x00000006,0x000008a2, + 0x000008a1,0x00050085,0x00000006,0x000008a3,0x000008a2,0x000008a0,0x00050041,0x00000007, + 0x000008a4,0x00000139,0x000001ad,0x0003003e,0x000008a4,0x000008a3,0x00050041,0x0000000f, + 0x000008a5,0x0000013a,0x0000022f,0x0003003e,0x000008a5,0x00000487,0x00050041,0x0000000f, + 0x000008a6,0x0000013a,0x000001a2,0x0003003e,0x000008a6,0x00000487,0x00050041,0x00000007, + 0x000008a7,0x0000013a,0x00000198,0x0003003e,0x000008a7,0x00000150,0x00050041,0x00000007, + 0x000008a8,0x0000013a,0x0000019d,0x0003003e,0x000008a8,0x0000014f,0x00050041,0x00000007, + 0x000008a9,0x0000013a,0x000003cc,0x0003003e,0x000008a9,0x0000014f,0x00050041,0x00000007, + 0x000008aa,0x0000013a,0x000003cd,0x0003003e,0x000008aa,0x0000014f,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x0000013f,0x00000000,0x0000013d,0x00030037,0x0000006d,0x0000013e, + 0x000200f8,0x00000140,0x0004003b,0x0000011d,0x000008ab,0x00000007,0x0004003b,0x000000fd, + 0x000008ac,0x00000007,0x0004003b,0x0000006d,0x000008ad,0x00000007,0x0004003b,0x0000011d, + 0x000008af,0x00000007,0x0004003b,0x000000fd,0x000008b1,0x00000007,0x0004003b,0x000000fd, + 0x000008c1,0x00000007,0x0004003b,0x0000011d,0x000008c5,0x00000007,0x0004003b,0x000000fd, + 0x000008c7,0x00000007,0x0004003b,0x000000fd,0x000008cc,0x00000007,0x0004003b,0x000000fd, + 0x000008d1,0x00000007,0x0004003b,0x000000fd,0x000008d6,0x00000007,0x0004003b,0x000000fd, + 0x000008db,0x00000007,0x0004003b,0x0000000f,0x000008e5,0x00000007,0x0004003b,0x0000000f, + 0x000008e8,0x00000007,0x0004003b,0x0000006d,0x000008f3,0x00000007,0x0004003b,0x00000030, + 0x000008f5,0x00000007,0x0004003b,0x0000006d,0x000008f7,0x00000007,0x0004003b,0x00000007, + 0x000008f9,0x00000007,0x0004003d,0x00000055,0x000008ae,0x0000013e,0x0003003e,0x000008ad, + 0x000008ae,0x0004003d,0x000000fb,0x000008b0,0x000008ab,0x0003003e,0x000008af,0x000008b0, + 0x0004003d,0x000000fc,0x000008b2,0x000008ac,0x0003003e,0x000008b1,0x000008b2,0x00070039, + 0x00000002,0x000008b3,0x0000013b,0x000008ad,0x000008af,0x000008b1,0x0004003d,0x000000fb, + 0x000008b4,0x000008af,0x0003003e,0x000008ab,0x000008b4,0x0004003d,0x000000fc,0x000008b5, + 0x000008b1,0x0003003e,0x000008ac,0x000008b5,0x00050041,0x000000a3,0x000008b6,0x000008ab, + 0x000001b2,0x0004003d,0x000000a2,0x000008b7,0x000008b6,0x000300f7,0x000008b9,0x00000000, + 0x000400fa,0x000008b7,0x000008b8,0x000008b9,0x000200f8,0x000008b8,0x00050041,0x000000a3, + 0x000008ba,0x000008ab,0x000003f4,0x0004003d,0x000000a2,0x000008bb,0x000008ba,0x000400a8, + 0x000000a2,0x000008bc,0x000008bb,0x000200f9,0x000008b9,0x000200f8,0x000008b9,0x000700f5, + 0x000000a2,0x000008bd,0x000008b7,0x00000140,0x000008bc,0x000008b8,0x000300f7,0x000008bf, + 0x00000000,0x000400fa,0x000008bd,0x000008be,0x000008bf,0x000200f8,0x000008be,0x0004003d, + 0x000000fb,0x000008c0,0x000008ab,0x0004003d,0x000000fc,0x000008c2,0x000008ac,0x0003003e, + 0x000008c1,0x000008c2,0x00060039,0x00000002,0x000008c3,0x00000124,0x000008c0,0x000008c1, + 0x0004003d,0x000000fc,0x000008c4,0x000008c1,0x0003003e,0x000008ac,0x000008c4,0x000200f9, + 0x000008bf,0x000200f8,0x000008bf,0x0004003d,0x000000fb,0x000008c6,0x000008ab,0x0003003e, + 0x000008c5,0x000008c6,0x0004003d,0x000000fc,0x000008c8,0x000008ac,0x0003003e,0x000008c7, + 0x000008c8,0x00060039,0x00000002,0x000008c9,0x00000131,0x000008c5,0x000008c7,0x0004003d, + 0x000000fc,0x000008ca,0x000008c7,0x0003003e,0x000008ac,0x000008ca,0x0004003d,0x000000fb, + 0x000008cb,0x000008ab,0x0004003d,0x000000fc,0x000008cd,0x000008ac,0x0003003e,0x000008cc, + 0x000008cd,0x00060039,0x00000002,0x000008ce,0x00000135,0x000008cb,0x000008cc,0x0004003d, + 0x000000fc,0x000008cf,0x000008cc,0x0003003e,0x000008ac,0x000008cf,0x0004003d,0x000000fb, + 0x000008d0,0x000008ab,0x0004003d,0x000000fc,0x000008d2,0x000008ac,0x0003003e,0x000008d1, + 0x000008d2,0x00060039,0x00000002,0x000008d3,0x00000109,0x000008d0,0x000008d1,0x0004003d, + 0x000000fc,0x000008d4,0x000008d1,0x0003003e,0x000008ac,0x000008d4,0x0004003d,0x000000fb, + 0x000008d5,0x000008ab,0x0004003d,0x000000fc,0x000008d7,0x000008ac,0x0003003e,0x000008d6, + 0x000008d7,0x00060039,0x00000002,0x000008d8,0x0000012c,0x000008d5,0x000008d6,0x0004003d, + 0x000000fc,0x000008d9,0x000008d6,0x0003003e,0x000008ac,0x000008d9,0x0004003d,0x000000fb, + 0x000008da,0x000008ab,0x0004003d,0x000000fc,0x000008dc,0x000008ac,0x0003003e,0x000008db, + 0x000008dc,0x00060039,0x00000002,0x000008dd,0x00000128,0x000008da,0x000008db,0x0004003d, + 0x000000fc,0x000008de,0x000008db,0x0003003e,0x000008ac,0x000008de,0x00040039,0x00000006, + 0x000008df,0x00000091,0x00050041,0x0000000f,0x000008e0,0x000008ac,0x000001a2,0x0004003d, + 0x0000000e,0x000008e1,0x000008e0,0x00060050,0x0000000e,0x000008e2,0x000008df,0x000008df, + 0x000008df,0x00050088,0x0000000e,0x000008e3,0x000008e1,0x000008e2,0x00050041,0x0000000f, + 0x000008e4,0x000008ac,0x000001a2,0x0003003e,0x000008e4,0x000008e3,0x00050041,0x0000000f, + 0x000008e6,0x000008ac,0x000001a2,0x0004003d,0x0000000e,0x000008e7,0x000008e6,0x0003003e, + 0x000008e5,0x000008e7,0x0003003e,0x000008e8,0x00000487,0x00060039,0x0000000e,0x000008e9, + 0x00000047,0x000008e5,0x000008e8,0x00050041,0x0000000f,0x000008ea,0x000008ac,0x000001a2, + 0x0003003e,0x000008ea,0x000008e9,0x00050041,0x0000000f,0x000008eb,0x000008ac,0x000001a2, + 0x0004003d,0x0000000e,0x000008ec,0x000008eb,0x00050041,0x00000007,0x000008ed,0x000008ac, + 0x000003cc,0x0004003d,0x00000006,0x000008ee,0x000008ed,0x00050051,0x00000006,0x000008ef, + 0x000008ec,0x00000000,0x00050051,0x00000006,0x000008f0,0x000008ec,0x00000001,0x00050051, + 0x00000006,0x000008f1,0x000008ec,0x00000002,0x00070050,0x0000002f,0x000008f2,0x000008ef, + 0x000008f0,0x000008f1,0x000008ee,0x0004003d,0x00000055,0x000008f4,0x0000013e,0x0003003e, + 0x000008f3,0x000008f4,0x0003003e,0x000008f5,0x000008f2,0x00060039,0x00000002,0x000008f6, + 0x00000079,0x000008f3,0x000008f5,0x0004003d,0x00000055,0x000008f8,0x0000013e,0x0003003e, + 0x000008f7,0x000008f8,0x0003003e,0x000008f9,0x0000014f,0x00060039,0x00000002,0x000008fa, + 0x0000008b,0x000008f7,0x000008f9,0x000100fd,0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_luma_instability_comp_spv.h b/gpu/vk/shaders/fsr3_luma_instability_comp_spv.h new file mode 100644 index 000000000..eb4cbcc0b --- /dev/null +++ b/gpu/vk/shaders/fsr3_luma_instability_comp_spv.h @@ -0,0 +1,543 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_LUMA_INSTABILITY_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x0000027a,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000031,0x00020011,0x00000032,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e, + 0x00000000,0x0003000e,0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d, + 0x00000000,0x00000264,0x00060010,0x00000004,0x00000011,0x00000008,0x00000008,0x00000001, + 0x00030003,0x00000002,0x000001c2,0x000b0004,0x455f4c47,0x735f5458,0x6c706d61,0x656c7265, + 0x745f7373,0x75747865,0x665f6572,0x74636e75,0x736e6f69,0x00000000,0x000b0004,0x455f4c47, + 0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63, + 0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c, + 0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63, + 0x69645f65,0x74636572,0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005, + 0x0000000a,0x53786666,0x72757461,0x28657461,0x003b3166,0x00030005,0x00000009,0x00000078, + 0x00060005,0x0000000f,0x4d786666,0x66286e69,0x31663b31,0x0000003b,0x00030005,0x0000000d, + 0x00000078,0x00030005,0x0000000e,0x00000079,0x00060005,0x00000016,0x4d786666,0x76286e69, + 0x763b3266,0x003b3266,0x00030005,0x00000014,0x00000078,0x00030005,0x00000015,0x00000079, + 0x00060005,0x0000001a,0x4d786666,0x66287861,0x31663b31,0x0000003b,0x00030005,0x00000018, + 0x00000078,0x00030005,0x00000019,0x00000079,0x00060005,0x0000001e,0x4d786666,0x76287861, + 0x763b3266,0x003b3266,0x00030005,0x0000001c,0x00000078,0x00030005,0x0000001d,0x00000079, + 0x00050005,0x00000023,0x646e6552,0x69537265,0x0028657a,0x00090005,0x00000025,0x76657250, + 0x73756f69,0x6d617246,0x6e655265,0x53726564,0x28657a69,0x00000000,0x00060005,0x00000027, + 0x5278614d,0x65646e65,0x7a695372,0x00002865,0x00040005,0x0000002a,0x7474694a,0x00287265, + 0x00080005,0x0000002c,0x76657250,0x73756f69,0x6d617246,0x74694a65,0x28726574,0x00000000, + 0x00070005,0x0000002f,0x746c6544,0x65725061,0x6f707845,0x65727573,0x00000028,0x00090005, + 0x00000037,0x726f7453,0x6d754c65,0x73694861,0x79726f74,0x32697628,0x3466763b,0x0000003b, + 0x00040005,0x00000035,0x50785069,0x0000736f,0x00060005,0x00000036,0x6d754c66,0x73694861, + 0x79726f74,0x00000000,0x00080005,0x0000003b,0x706d6153,0x754c656c,0x6948616d,0x726f7473, + 0x66762879,0x00003b32,0x00030005,0x0000003a,0x00565566,0x000c0005,0x0000003d,0x46746547, + 0x68747261,0x44747365,0x68747065,0x3170694d,0x6f736552,0x65637275,0x656d6944,0x6f69736e, + 0x0028736e,0x000a0005,0x00000041,0x706d6153,0x6146656c,0x65687472,0x65447473,0x4d687470, + 0x28317069,0x3b326676,0x00000000,0x00030005,0x00000040,0x00565566,0x00080005,0x00000044, + 0x706d6153,0x7543656c,0x6e657272,0x6d754c74,0x66762861,0x00003b32,0x00030005,0x00000043, + 0x00007675,0x000a0005,0x00000049,0x726f7453,0x6d754c65,0x736e4961,0x69626174,0x7974696c, + 0x32697628,0x3b31663b,0x00000000,0x00040005,0x00000047,0x50785069,0x0000736f,0x00070005, + 0x00000048,0x6d754c66,0x736e4961,0x69626174,0x7974696c,0x00000000,0x000a0005,0x0000004d, + 0x64616f4c,0x616c6944,0x4d646574,0x6f69746f,0x6365566e,0x28726f74,0x3b326976,0x00000000, + 0x00050005,0x0000004c,0x49785069,0x7475706e,0x00000000,0x00050005,0x0000004f,0x6f707845, + 0x65727573,0x00000028,0x000a0005,0x00000052,0x706d6153,0x6944656c,0x6574616c,0x61655264, + 0x76697463,0x73614d65,0x7628736b,0x003b3266,0x00030005,0x00000051,0x00565566,0x00070005, + 0x00000055,0x34746547,0x6c65564b,0x7469636f,0x66762879,0x00003b32,0x00060005,0x00000054, + 0x746f4d66,0x566e6f69,0x6f746365,0x00000072,0x00090005,0x0000005b,0x446e694d,0x64697669, + 0x79426465,0x2878614d,0x663b3166,0x31663b31,0x0000003b,0x00030005,0x00000058,0x00003076, + 0x00030005,0x00000059,0x00003176,0x00070005,0x0000005a,0x5a6e4f66,0x526f7265,0x72757465, + 0x6c61566e,0x00006575,0x00080005,0x00000060,0x446e694d,0x64697669,0x79426465,0x2878614d, + 0x663b3166,0x00003b31,0x00030005,0x0000005e,0x00003076,0x00030005,0x0000005f,0x00003176, + 0x00060005,0x00000065,0x76557349,0x69736e49,0x76286564,0x003b3266,0x00030005,0x00000064, + 0x00765566,0x00080005,0x0000006b,0x6d616c43,0x28765570,0x3b326676,0x3b326976,0x3b326976, + 0x00000000,0x00030005,0x00000068,0x00765566,0x00060005,0x00000069,0x78655469,0x65727574, + 0x657a6953,0x00000000,0x00060005,0x0000006a,0x73655269,0x6372756f,0x7a695365,0x00000065, + 0x00090005,0x0000006d,0x616d754c,0x74736e49,0x6c696261,0x46797469,0x6f746361,0x74614472, + 0x00000061,0x00070006,0x0000006d,0x00000000,0x6d754c66,0x73694861,0x79726f74,0x00000000, + 0x00090006,0x0000006d,0x00000001,0x6d754c66,0x736e4961,0x69626174,0x7974696c,0x74636146, + 0x0000726f,0x00160005,0x00000073,0x706d6f43,0x4c657475,0x49616d75,0x6174736e,0x696c6962, + 0x61467974,0x726f7463,0x72747328,0x2d746375,0x616d754c,0x74736e49,0x6c696261,0x46797469, + 0x6f746361,0x74614472,0x66762d61,0x31662d34,0x31663b31,0x3b31663b,0x00000000,0x00040005, + 0x00000070,0x61746164,0x00000000,0x00070005,0x00000071,0x72754366,0x746e6572,0x6d617246, + 0x6d754c65,0x00000061,0x00080005,0x00000072,0x72614666,0x73656874,0x70654474,0x6e496874, + 0x6574654d,0x00007372,0x00080005,0x00000077,0x616d754c,0x74736e49,0x6c696261,0x28797469, + 0x3b326976,0x00000000,0x00040005,0x00000076,0x50785069,0x0000736f,0x00070005,0x00000093, + 0x53466263,0x50553352,0x4c414353,0x745f5245,0x00000000,0x00060006,0x00000093,0x00000000, + 0x6e655269,0x53726564,0x00657a69,0x000a0006,0x00000093,0x00000001,0x65725069,0x756f6976, + 0x61724673,0x6552656d,0x7265646e,0x657a6953,0x00000000,0x00070006,0x00000093,0x00000002, + 0x73705569,0x656c6163,0x657a6953,0x00000000,0x000a0006,0x00000093,0x00000003,0x65725069, + 0x756f6976,0x61724673,0x7055656d,0x6c616373,0x7a695365,0x00000065,0x00070006,0x00000093, + 0x00000004,0x78614d69,0x646e6552,0x69537265,0x0000657a,0x00070006,0x00000093,0x00000005, + 0x78614d69,0x63737055,0x53656c61,0x00657a69,0x00080006,0x00000093,0x00000006,0x76654466, + 0x54656369,0x6569566f,0x70654477,0x00006874,0x00050006,0x00000093,0x00000007,0x74694a66, + 0x00726574,0x00090006,0x00000093,0x00000008,0x65725066,0x756f6976,0x61724673,0x694a656d, + 0x72657474,0x00000000,0x00080006,0x00000093,0x00000009,0x746f4d66,0x566e6f69,0x6f746365, + 0x61635372,0x0000656c,0x00080006,0x00000093,0x0000000a,0x776f4466,0x6163736e,0x6146656c, + 0x726f7463,0x00000000,0x000b0006,0x00000093,0x0000000b,0x746f4d66,0x566e6f69,0x6f746365, + 0x74694a72,0x43726574,0x65636e61,0x74616c6c,0x006e6f69,0x00060006,0x00000093,0x0000000c, + 0x6e615466,0x666c6148,0x00564f46,0x00090006,0x00000093,0x0000000d,0x74694a66,0x53726574, + 0x65757165,0x4c65636e,0x74676e65,0x00000068,0x00060006,0x00000093,0x0000000e,0x6c654466, + 0x69546174,0x0000656d,0x00080006,0x00000093,0x0000000f,0x6c654466,0x72506174,0x70784565, + 0x7275736f,0x00000065,0x000a0006,0x00000093,0x00000010,0x65695666,0x61705377,0x6f546563, + 0x6574654d,0x61467372,0x726f7463,0x00000000,0x00060006,0x00000093,0x00000011,0x61724666, + 0x6e49656d,0x00786564,0x00070006,0x00000093,0x00000012,0x6c655666,0x7469636f,0x63614679, + 0x00726f74,0x00080006,0x00000093,0x00000013,0x61655266,0x76697463,0x73656e65,0x61635373, + 0x0000656c,0x00080006,0x00000093,0x00000014,0x61685366,0x676e6964,0x6e616843,0x63536567, + 0x00656c61,0x000a0006,0x00000093,0x00000015,0x63634166,0x6c756d75,0x6f697461,0x6464416e, + 0x65506465,0x61724672,0x0000656d,0x000b0006,0x00000093,0x00000016,0x6e694d66,0x6f736944, + 0x756c6363,0x6e6f6973,0x75636341,0x616c756d,0x6e6f6974,0x00000000,0x00060005,0x00000095, + 0x53466263,0x70553352,0x6c616373,0x00007265,0x00060005,0x000000b9,0x6c5f7772,0x5f616d75, + 0x74736968,0x0079726f,0x00060005,0x000000bf,0x756c5f72,0x685f616d,0x6f747369,0x00007972, + 0x00060005,0x000000c3,0x694c5f73,0x7261656e,0x6d616c43,0x00000070,0x00080005,0x000000cb, + 0x61665f72,0x65687472,0x645f7473,0x68747065,0x70696d5f,0x00000031,0x00060005,0x000000da, + 0x75635f72,0x6e657272,0x756c5f74,0x0000616d,0x00070005,0x000000e5,0x6c5f7772,0x5f616d75, + 0x74736e69,0x6c696261,0x00797469,0x00090005,0x000000ea,0x69645f72,0x6574616c,0x6f6d5f64, + 0x6e6f6974,0x6365765f,0x73726f74,0x00000000,0x00050005,0x000000f1,0x6f707865,0x65727573, + 0x00000000,0x00070005,0x000000f2,0x6e695f72,0x5f747570,0x6f707865,0x65727573,0x00000000, + 0x00090005,0x000000fe,0x69645f72,0x6574616c,0x65725f64,0x69746361,0x6d5f6576,0x736b7361, + 0x00000000,0x00030005,0x0000010e,0x0000006d,0x00040005,0x0000010f,0x61726170,0x0000006d, + 0x00040005,0x00000110,0x61726170,0x0000006d,0x00040005,0x00000117,0x61726170,0x0000006d, + 0x00040005,0x00000118,0x61726170,0x0000006d,0x00030005,0x00000120,0x0000006d,0x00040005, + 0x00000121,0x61726170,0x0000006d,0x00040005,0x00000122,0x61726170,0x0000006d,0x00040005, + 0x00000129,0x61726170,0x0000006d,0x00040005,0x0000012a,0x61726170,0x0000006d,0x00060005, + 0x0000014a,0x6d615366,0x4c656c70,0x7461636f,0x006e6f69,0x00070005,0x0000014f,0x616c4366, + 0x6465706d,0x61636f4c,0x6e6f6974,0x00000000,0x00040005,0x00000155,0x61726170,0x0000006d, + 0x00040005,0x00000157,0x61726170,0x0000006d,0x00040005,0x00000159,0x61726170,0x0000006d, + 0x00040005,0x0000015a,0x61726170,0x0000006d,0x00050005,0x0000015c,0x616c4366,0x6465706d, + 0x00007655,0x00070005,0x00000164,0x6d754c66,0x736e4961,0x69626174,0x7974696c,0x00000000, + 0x00040005,0x00000165,0x66694466,0x00307366,0x00060005,0x0000016a,0x6d695366,0x72616c69, + 0x30797469,0x00000000,0x00060005,0x0000016f,0x78614d66,0x696d6953,0x6972616c,0x00007974, + 0x00030005,0x00000176,0x00000069,0x00040005,0x0000017f,0x66694466,0x00317366,0x00060005, + 0x00000185,0x6d695366,0x72616c69,0x31797469,0x00000000,0x00040005,0x00000192,0x61726170, + 0x0000006d,0x00040005,0x00000194,0x61726170,0x0000006d,0x00040005,0x000001ba,0x61746164, + 0x00000000,0x00080005,0x000001be,0x6c694466,0x64657461,0x69746f4d,0x65566e6f,0x726f7463, + 0x00000000,0x00040005,0x000001bf,0x61726170,0x0000006d,0x00030005,0x000001c2,0x00765566, + 0x00080005,0x000001ca,0x43765566,0x46727275,0x656d6172,0x7474694a,0x64657265,0x00000000, + 0x00080005,0x000001d1,0x50765566,0x46766572,0x656d6172,0x7474694a,0x64657265,0x00000000, + 0x00060005,0x000001d8,0x70655266,0x656a6f72,0x64657463,0x00007655,0x00040005,0x000001dc, + 0x61726170,0x0000006d,0x00060005,0x000001e1,0x52765566,0x74636165,0x5f657669,0x00005748, + 0x00040005,0x000001e4,0x61726170,0x0000006d,0x00040005,0x000001e6,0x61726170,0x0000006d, + 0x00040005,0x000001e7,0x61726170,0x0000006d,0x00080005,0x000001e9,0x6c694466,0x64657461, + 0x63616552,0x65766974,0x6b73614d,0x00000073,0x00040005,0x000001ea,0x61726170,0x0000006d, + 0x00060005,0x000001ed,0x61655266,0x76697463,0x73614d65,0x0000006b,0x00040005,0x000001ee, + 0x61726170,0x0000006d,0x00060005,0x000001f2,0x73694466,0x6c63636f,0x6f697375,0x0000006e, + 0x00040005,0x000001f3,0x61726170,0x0000006d,0x00060005,0x000001f7,0x61685366,0x676e6964, + 0x6e616843,0x00006567,0x00040005,0x000001f8,0x61726170,0x0000006d,0x00060005,0x000001fc, + 0x63634166,0x6c756d75,0x6f697461,0x0000006e,0x00040005,0x000001fd,0x61726170,0x0000006d, + 0x00070005,0x00000202,0x63634162,0x6c756d75,0x6f697461,0x6361466e,0x00726f74,0x00070005, + 0x00000206,0x6d6f4362,0x65747570,0x74736e49,0x6c696261,0x00797469,0x00040005,0x0000020b, + 0x5f765566,0x00005748,0x00040005,0x0000020e,0x61726170,0x0000006d,0x00040005,0x00000210, + 0x61726170,0x0000006d,0x00040005,0x00000211,0x61726170,0x0000006d,0x00070005,0x00000213, + 0x72754366,0x746e6572,0x6d617246,0x6d754c65,0x00000061,0x00040005,0x00000214,0x61726170, + 0x0000006d,0x00070005,0x00000219,0x70655266,0x656a6f72,0x64657463,0x485f7655,0x00000057, + 0x00040005,0x0000021c,0x61726170,0x0000006d,0x00040005,0x0000021e,0x61726170,0x0000006d, + 0x00040005,0x0000021f,0x61726170,0x0000006d,0x00040005,0x00000221,0x61726170,0x0000006d, + 0x00070005,0x00000229,0x72614666,0x73656874,0x70654474,0x76556874,0x0057485f,0x00040005, + 0x0000022f,0x61726170,0x0000006d,0x00040005,0x00000231,0x61726170,0x0000006d,0x00040005, + 0x00000232,0x61726170,0x0000006d,0x00080005,0x00000234,0x72614666,0x73656874,0x70654474, + 0x6e496874,0x6574654d,0x00007372,0x00040005,0x00000235,0x61726170,0x0000006d,0x00040005, + 0x00000238,0x61726170,0x0000006d,0x00040005,0x0000023a,0x61726170,0x0000006d,0x00040005, + 0x0000023c,0x61726170,0x0000006d,0x00060005,0x0000023f,0x6c655666,0x7469636f,0x69655779, + 0x00746867,0x00040005,0x00000240,0x61726170,0x0000006d,0x00040005,0x00000245,0x61726170, + 0x0000006d,0x00040005,0x00000256,0x61726170,0x0000006d,0x00040005,0x00000258,0x61726170, + 0x0000006d,0x00040005,0x0000025c,0x61726170,0x0000006d,0x00040005,0x0000025e,0x61726170, + 0x0000006d,0x00080005,0x00000264,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69, + 0x00000044,0x00040005,0x00000269,0x61726170,0x0000006d,0x00060005,0x0000026e,0x6f505f73, + 0x43746e69,0x706d616c,0x00000000,0x00060005,0x0000026f,0x72665f72,0x5f656d61,0x6f666e69, + 0x00000000,0x00030047,0x00000093,0x00000002,0x00050048,0x00000093,0x00000000,0x00000023, + 0x00000000,0x00050048,0x00000093,0x00000001,0x00000023,0x00000008,0x00050048,0x00000093, + 0x00000002,0x00000023,0x00000010,0x00050048,0x00000093,0x00000003,0x00000023,0x00000018, + 0x00050048,0x00000093,0x00000004,0x00000023,0x00000020,0x00050048,0x00000093,0x00000005, + 0x00000023,0x00000028,0x00050048,0x00000093,0x00000006,0x00000023,0x00000030,0x00050048, + 0x00000093,0x00000007,0x00000023,0x00000040,0x00050048,0x00000093,0x00000008,0x00000023, + 0x00000048,0x00050048,0x00000093,0x00000009,0x00000023,0x00000050,0x00050048,0x00000093, + 0x0000000a,0x00000023,0x00000058,0x00050048,0x00000093,0x0000000b,0x00000023,0x00000060, + 0x00050048,0x00000093,0x0000000c,0x00000023,0x00000068,0x00050048,0x00000093,0x0000000d, + 0x00000023,0x0000006c,0x00050048,0x00000093,0x0000000e,0x00000023,0x00000070,0x00050048, + 0x00000093,0x0000000f,0x00000023,0x00000074,0x00050048,0x00000093,0x00000010,0x00000023, + 0x00000078,0x00050048,0x00000093,0x00000011,0x00000023,0x0000007c,0x00050048,0x00000093, + 0x00000012,0x00000023,0x00000080,0x00050048,0x00000093,0x00000013,0x00000023,0x00000084, + 0x00050048,0x00000093,0x00000014,0x00000023,0x00000088,0x00050048,0x00000093,0x00000015, + 0x00000023,0x0000008c,0x00050048,0x00000093,0x00000016,0x00000023,0x00000090,0x00040047, + 0x00000095,0x00000021,0x00000009,0x00040047,0x00000095,0x00000022,0x00000000,0x00040047, + 0x000000b9,0x00000021,0x00000007,0x00040047,0x000000b9,0x00000022,0x00000000,0x00040047, + 0x000000bf,0x00000021,0x00000004,0x00040047,0x000000bf,0x00000022,0x00000000,0x00040047, + 0x000000c3,0x00000021,0x000003e9,0x00040047,0x000000c3,0x00000022,0x00000000,0x00040047, + 0x000000cb,0x00000021,0x00000005,0x00040047,0x000000cb,0x00000022,0x00000000,0x00040047, + 0x000000da,0x00000021,0x00000006,0x00040047,0x000000da,0x00000022,0x00000000,0x00040047, + 0x000000e5,0x00000021,0x00000008,0x00040047,0x000000e5,0x00000022,0x00000000,0x00040047, + 0x000000ea,0x00000021,0x00000002,0x00040047,0x000000ea,0x00000022,0x00000000,0x00040047, + 0x000000f2,0x00000021,0x00000000,0x00040047,0x000000f2,0x00000022,0x00000000,0x00040047, + 0x000000fe,0x00000021,0x00000001,0x00040047,0x000000fe,0x00000022,0x00000000,0x00040047, + 0x00000264,0x0000000b,0x0000001c,0x00040047,0x0000026e,0x00000021,0x000003e8,0x00040047, + 0x0000026e,0x00000022,0x00000000,0x00040047,0x0000026f,0x00000021,0x00000003,0x00040047, + 0x0000026f,0x00000022,0x00000000,0x00040047,0x00000279,0x0000000b,0x00000019,0x00020013, + 0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040020, + 0x00000007,0x00000007,0x00000006,0x00040021,0x00000008,0x00000006,0x00000007,0x00050021, + 0x0000000c,0x00000006,0x00000007,0x00000007,0x00040017,0x00000011,0x00000006,0x00000002, + 0x00040020,0x00000012,0x00000007,0x00000011,0x00050021,0x00000013,0x00000011,0x00000012, + 0x00000012,0x00040015,0x00000020,0x00000020,0x00000001,0x00040017,0x00000021,0x00000020, + 0x00000002,0x00030021,0x00000022,0x00000021,0x00030021,0x00000029,0x00000011,0x00030021, + 0x0000002e,0x00000006,0x00040020,0x00000031,0x00000007,0x00000021,0x00040017,0x00000032, + 0x00000006,0x00000004,0x00040020,0x00000033,0x00000007,0x00000032,0x00050021,0x00000034, + 0x00000002,0x00000031,0x00000033,0x00040021,0x00000039,0x00000032,0x00000012,0x00040021, + 0x0000003f,0x00000006,0x00000012,0x00050021,0x00000046,0x00000002,0x00000031,0x00000007, + 0x00040021,0x0000004b,0x00000011,0x00000031,0x00060021,0x00000057,0x00000006,0x00000006, + 0x00000006,0x00000006,0x00050021,0x0000005d,0x00000006,0x00000006,0x00000006,0x00020014, + 0x00000062,0x00040021,0x00000063,0x00000062,0x00000012,0x00060021,0x00000067,0x00000011, + 0x00000012,0x00000031,0x00000031,0x0004001e,0x0000006d,0x00000032,0x00000006,0x00040020, + 0x0000006e,0x00000007,0x0000006d,0x00060021,0x0000006f,0x0000006d,0x0000006e,0x00000007, + 0x00000007,0x00040021,0x00000075,0x00000002,0x00000031,0x0004002b,0x00000006,0x0000007a, + 0x00000000,0x0004002b,0x00000006,0x0000007b,0x3f800000,0x0019001e,0x00000093,0x00000021, + 0x00000021,0x00000021,0x00000021,0x00000021,0x00000021,0x00000032,0x00000011,0x00000011, + 0x00000011,0x00000011,0x00000011,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006, + 0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00040020,0x00000094, + 0x00000002,0x00000093,0x0004003b,0x00000094,0x00000095,0x00000002,0x0004002b,0x00000020, + 0x00000096,0x00000000,0x00040020,0x00000097,0x00000002,0x00000021,0x0004002b,0x00000020, + 0x0000009c,0x00000001,0x0004002b,0x00000020,0x000000a1,0x00000004,0x0004002b,0x00000020, + 0x000000a6,0x00000007,0x00040020,0x000000a7,0x00000002,0x00000011,0x0004002b,0x00000020, + 0x000000ac,0x00000008,0x0004002b,0x00000020,0x000000b1,0x0000000f,0x00040020,0x000000b2, + 0x00000002,0x00000006,0x00090019,0x000000b7,0x00000006,0x00000001,0x00000000,0x00000000, + 0x00000000,0x00000002,0x00000004,0x00040020,0x000000b8,0x00000000,0x000000b7,0x0004003b, + 0x000000b8,0x000000b9,0x00000000,0x00090019,0x000000bd,0x00000006,0x00000001,0x00000000, + 0x00000000,0x00000000,0x00000001,0x00000000,0x00040020,0x000000be,0x00000000,0x000000bd, + 0x0004003b,0x000000be,0x000000bf,0x00000000,0x0002001a,0x000000c1,0x00040020,0x000000c2, + 0x00000000,0x000000c1,0x0004003b,0x000000c2,0x000000c3,0x00000000,0x0003001b,0x000000c5, + 0x000000bd,0x0004003b,0x000000be,0x000000cb,0x00000000,0x00040015,0x000000d5,0x00000020, + 0x00000000,0x0004002b,0x000000d5,0x000000d6,0x00000000,0x0004003b,0x000000be,0x000000da, + 0x00000000,0x00090019,0x000000e3,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000, + 0x00000002,0x00000009,0x00040020,0x000000e4,0x00000000,0x000000e3,0x0004003b,0x000000e4, + 0x000000e5,0x00000000,0x0004003b,0x000000be,0x000000ea,0x00000000,0x0004003b,0x000000be, + 0x000000f2,0x00000000,0x0005002c,0x00000021,0x000000f4,0x00000096,0x00000096,0x0004003b, + 0x000000be,0x000000fe,0x00000000,0x0004002b,0x00000006,0x00000107,0x45700000,0x0004002b, + 0x00000006,0x00000108,0x45070000,0x0005002c,0x00000011,0x00000109,0x00000107,0x00000108, + 0x0004002b,0x000000d5,0x0000013d,0x00000001,0x0004002b,0x00000006,0x00000150,0x3f000000, + 0x0005002c,0x00000011,0x00000151,0x00000150,0x00000150,0x00040020,0x00000175,0x00000007, + 0x00000020,0x0004002b,0x00000020,0x0000017d,0x00000003,0x0004002b,0x000000d5,0x0000019d, + 0x00000002,0x0004002b,0x000000d5,0x000001a0,0x00000003,0x0007002c,0x00000032,0x000001bc, + 0x0000007a,0x0000007a,0x0000007a,0x0000007a,0x00040020,0x00000201,0x00000007,0x00000062, + 0x0004002b,0x00000006,0x00000204,0x3f666666,0x0004002b,0x00000020,0x0000022b,0x00000002, + 0x0004002b,0x00000006,0x00000243,0x41a00000,0x00040017,0x00000262,0x000000d5,0x00000003, + 0x00040020,0x00000263,0x00000001,0x00000262,0x0004003b,0x00000263,0x00000264,0x00000001, + 0x00040017,0x00000265,0x000000d5,0x00000002,0x0004002b,0x00000006,0x0000026b,0x387fda40, + 0x0004002b,0x00000006,0x0000026c,0x477fe000,0x0004002b,0x00000006,0x0000026d,0x37801002, + 0x0004003b,0x000000c2,0x0000026e,0x00000000,0x0004003b,0x000000be,0x0000026f,0x00000000, + 0x0004002b,0x00000006,0x00000270,0x7f7fffff,0x0004002b,0x00000006,0x00000271,0x00800000, + 0x0004002b,0x00000006,0x00000272,0x3a1fe868,0x0004002b,0x00000006,0x00000273,0x3d800000, + 0x0004002b,0x00000006,0x00000274,0x3d3d70a4,0x0004002b,0x00000006,0x00000275,0x3e400000, + 0x0004002b,0x00000006,0x00000276,0x40000000,0x0004002b,0x00000006,0x00000277,0x461c4000, + 0x0004002b,0x000000d5,0x00000278,0x00000008,0x0006002c,0x00000262,0x00000279,0x00000278, + 0x00000278,0x0000013d,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8, + 0x00000005,0x0004003b,0x00000031,0x00000269,0x00000007,0x0004003d,0x00000262,0x00000266, + 0x00000264,0x0007004f,0x00000265,0x00000267,0x00000266,0x00000266,0x00000000,0x00000001, + 0x0004007c,0x00000021,0x00000268,0x00000267,0x0003003e,0x00000269,0x00000268,0x00050039, + 0x00000002,0x0000026a,0x00000077,0x00000269,0x000100fd,0x00010038,0x00050036,0x00000006, + 0x0000000a,0x00000000,0x00000008,0x00030037,0x00000007,0x00000009,0x000200f8,0x0000000b, + 0x0004003d,0x00000006,0x00000079,0x00000009,0x0008000c,0x00000006,0x0000007c,0x00000001, + 0x0000002b,0x00000079,0x0000007a,0x0000007b,0x000200fe,0x0000007c,0x00010038,0x00050036, + 0x00000006,0x0000000f,0x00000000,0x0000000c,0x00030037,0x00000007,0x0000000d,0x00030037, + 0x00000007,0x0000000e,0x000200f8,0x00000010,0x0004003d,0x00000006,0x0000007f,0x0000000d, + 0x0004003d,0x00000006,0x00000080,0x0000000e,0x0007000c,0x00000006,0x00000081,0x00000001, + 0x00000025,0x0000007f,0x00000080,0x000200fe,0x00000081,0x00010038,0x00050036,0x00000011, + 0x00000016,0x00000000,0x00000013,0x00030037,0x00000012,0x00000014,0x00030037,0x00000012, + 0x00000015,0x000200f8,0x00000017,0x0004003d,0x00000011,0x00000084,0x00000014,0x0004003d, + 0x00000011,0x00000085,0x00000015,0x0007000c,0x00000011,0x00000086,0x00000001,0x00000025, + 0x00000084,0x00000085,0x000200fe,0x00000086,0x00010038,0x00050036,0x00000006,0x0000001a, + 0x00000000,0x0000000c,0x00030037,0x00000007,0x00000018,0x00030037,0x00000007,0x00000019, + 0x000200f8,0x0000001b,0x0004003d,0x00000006,0x00000089,0x00000018,0x0004003d,0x00000006, + 0x0000008a,0x00000019,0x0007000c,0x00000006,0x0000008b,0x00000001,0x00000028,0x00000089, + 0x0000008a,0x000200fe,0x0000008b,0x00010038,0x00050036,0x00000011,0x0000001e,0x00000000, + 0x00000013,0x00030037,0x00000012,0x0000001c,0x00030037,0x00000012,0x0000001d,0x000200f8, + 0x0000001f,0x0004003d,0x00000011,0x0000008e,0x0000001c,0x0004003d,0x00000011,0x0000008f, + 0x0000001d,0x0007000c,0x00000011,0x00000090,0x00000001,0x00000028,0x0000008e,0x0000008f, + 0x000200fe,0x00000090,0x00010038,0x00050036,0x00000021,0x00000023,0x00000000,0x00000022, + 0x000200f8,0x00000024,0x00050041,0x00000097,0x00000098,0x00000095,0x00000096,0x0004003d, + 0x00000021,0x00000099,0x00000098,0x000200fe,0x00000099,0x00010038,0x00050036,0x00000021, + 0x00000025,0x00000000,0x00000022,0x000200f8,0x00000026,0x00050041,0x00000097,0x0000009d, + 0x00000095,0x0000009c,0x0004003d,0x00000021,0x0000009e,0x0000009d,0x000200fe,0x0000009e, + 0x00010038,0x00050036,0x00000021,0x00000027,0x00000000,0x00000022,0x000200f8,0x00000028, + 0x00050041,0x00000097,0x000000a2,0x00000095,0x000000a1,0x0004003d,0x00000021,0x000000a3, + 0x000000a2,0x000200fe,0x000000a3,0x00010038,0x00050036,0x00000011,0x0000002a,0x00000000, + 0x00000029,0x000200f8,0x0000002b,0x00050041,0x000000a7,0x000000a8,0x00000095,0x000000a6, + 0x0004003d,0x00000011,0x000000a9,0x000000a8,0x000200fe,0x000000a9,0x00010038,0x00050036, + 0x00000011,0x0000002c,0x00000000,0x00000029,0x000200f8,0x0000002d,0x00050041,0x000000a7, + 0x000000ad,0x00000095,0x000000ac,0x0004003d,0x00000011,0x000000ae,0x000000ad,0x000200fe, + 0x000000ae,0x00010038,0x00050036,0x00000006,0x0000002f,0x00000000,0x0000002e,0x000200f8, + 0x00000030,0x00050041,0x000000b2,0x000000b3,0x00000095,0x000000b1,0x0004003d,0x00000006, + 0x000000b4,0x000000b3,0x000200fe,0x000000b4,0x00010038,0x00050036,0x00000002,0x00000037, + 0x00000000,0x00000034,0x00030037,0x00000031,0x00000035,0x00030037,0x00000033,0x00000036, + 0x000200f8,0x00000038,0x0004003d,0x000000b7,0x000000ba,0x000000b9,0x0004003d,0x00000021, + 0x000000bb,0x00000035,0x0004003d,0x00000032,0x000000bc,0x00000036,0x00040063,0x000000ba, + 0x000000bb,0x000000bc,0x000100fd,0x00010038,0x00050036,0x00000032,0x0000003b,0x00000000, + 0x00000039,0x00030037,0x00000012,0x0000003a,0x000200f8,0x0000003c,0x0004003d,0x000000bd, + 0x000000c0,0x000000bf,0x0004003d,0x000000c1,0x000000c4,0x000000c3,0x00050056,0x000000c5, + 0x000000c6,0x000000c0,0x000000c4,0x0004003d,0x00000011,0x000000c7,0x0000003a,0x00070058, + 0x00000032,0x000000c8,0x000000c6,0x000000c7,0x00000002,0x0000007a,0x000200fe,0x000000c8, + 0x00010038,0x00050036,0x00000021,0x0000003d,0x00000000,0x00000022,0x000200f8,0x0000003e, + 0x0004003d,0x000000bd,0x000000cc,0x000000cb,0x00050067,0x00000021,0x000000cd,0x000000cc, + 0x00000096,0x000200fe,0x000000cd,0x00010038,0x00050036,0x00000006,0x00000041,0x00000000, + 0x0000003f,0x00030037,0x00000012,0x00000040,0x000200f8,0x00000042,0x0004003d,0x000000bd, + 0x000000d0,0x000000cb,0x0004003d,0x000000c1,0x000000d1,0x000000c3,0x00050056,0x000000c5, + 0x000000d2,0x000000d0,0x000000d1,0x0004003d,0x00000011,0x000000d3,0x00000040,0x00070058, + 0x00000032,0x000000d4,0x000000d2,0x000000d3,0x00000002,0x0000007a,0x00050051,0x00000006, + 0x000000d7,0x000000d4,0x00000000,0x000200fe,0x000000d7,0x00010038,0x00050036,0x00000006, + 0x00000044,0x00000000,0x0000003f,0x00030037,0x00000012,0x00000043,0x000200f8,0x00000045, + 0x0004003d,0x000000bd,0x000000db,0x000000da,0x0004003d,0x000000c1,0x000000dc,0x000000c3, + 0x00050056,0x000000c5,0x000000dd,0x000000db,0x000000dc,0x0004003d,0x00000011,0x000000de, + 0x00000043,0x00070058,0x00000032,0x000000df,0x000000dd,0x000000de,0x00000002,0x0000007a, + 0x00050051,0x00000006,0x000000e0,0x000000df,0x00000000,0x000200fe,0x000000e0,0x00010038, + 0x00050036,0x00000002,0x00000049,0x00000000,0x00000046,0x00030037,0x00000031,0x00000047, + 0x00030037,0x00000007,0x00000048,0x000200f8,0x0000004a,0x0004003d,0x000000e3,0x000000e6, + 0x000000e5,0x0004003d,0x00000021,0x000000e7,0x00000047,0x0004003d,0x00000006,0x000000e8, + 0x00000048,0x00070050,0x00000032,0x000000e9,0x000000e8,0x0000007a,0x0000007a,0x0000007a, + 0x00040063,0x000000e6,0x000000e7,0x000000e9,0x000100fd,0x00010038,0x00050036,0x00000011, + 0x0000004d,0x00000000,0x0000004b,0x00030037,0x00000031,0x0000004c,0x000200f8,0x0000004e, + 0x0004003d,0x000000bd,0x000000eb,0x000000ea,0x0004003d,0x00000021,0x000000ec,0x0000004c, + 0x0007005f,0x00000032,0x000000ed,0x000000eb,0x000000ec,0x00000002,0x00000096,0x0007004f, + 0x00000011,0x000000ee,0x000000ed,0x000000ed,0x00000000,0x00000001,0x000200fe,0x000000ee, + 0x00010038,0x00050036,0x00000006,0x0000004f,0x00000000,0x0000002e,0x000200f8,0x00000050, + 0x0004003b,0x00000007,0x000000f1,0x00000007,0x0004003d,0x000000bd,0x000000f3,0x000000f2, + 0x0007005f,0x00000032,0x000000f5,0x000000f3,0x000000f4,0x00000002,0x00000096,0x00050051, + 0x00000006,0x000000f6,0x000000f5,0x00000000,0x0003003e,0x000000f1,0x000000f6,0x0004003d, + 0x00000006,0x000000f7,0x000000f1,0x000500b4,0x00000062,0x000000f8,0x000000f7,0x0000007a, + 0x000300f7,0x000000fa,0x00000000,0x000400fa,0x000000f8,0x000000f9,0x000000fa,0x000200f8, + 0x000000f9,0x0003003e,0x000000f1,0x0000007b,0x000200f9,0x000000fa,0x000200f8,0x000000fa, + 0x0004003d,0x00000006,0x000000fb,0x000000f1,0x000200fe,0x000000fb,0x00010038,0x00050036, + 0x00000032,0x00000052,0x00000000,0x00000039,0x00030037,0x00000012,0x00000051,0x000200f8, + 0x00000053,0x0004003d,0x000000bd,0x000000ff,0x000000fe,0x0004003d,0x000000c1,0x00000100, + 0x000000c3,0x00050056,0x000000c5,0x00000101,0x000000ff,0x00000100,0x0004003d,0x00000011, + 0x00000102,0x00000051,0x00070058,0x00000032,0x00000103,0x00000101,0x00000102,0x00000002, + 0x0000007a,0x000200fe,0x00000103,0x00010038,0x00050036,0x00000006,0x00000055,0x00000000, + 0x0000003f,0x00030037,0x00000012,0x00000054,0x000200f8,0x00000056,0x0004003d,0x00000011, + 0x00000106,0x00000054,0x00050085,0x00000011,0x0000010a,0x00000106,0x00000109,0x0006000c, + 0x00000006,0x0000010b,0x00000001,0x00000042,0x0000010a,0x000200fe,0x0000010b,0x00010038, + 0x00050036,0x00000006,0x0000005b,0x00000000,0x00000057,0x00030037,0x00000006,0x00000058, + 0x00030037,0x00000006,0x00000059,0x00030037,0x00000006,0x0000005a,0x000200f8,0x0000005c, + 0x0004003b,0x00000007,0x0000010e,0x00000007,0x0004003b,0x00000007,0x0000010f,0x00000007, + 0x0004003b,0x00000007,0x00000110,0x00000007,0x0004003b,0x00000007,0x00000114,0x00000007, + 0x0004003b,0x00000007,0x00000117,0x00000007,0x0004003b,0x00000007,0x00000118,0x00000007, + 0x0003003e,0x0000010f,0x00000058,0x0003003e,0x00000110,0x00000059,0x00060039,0x00000006, + 0x00000111,0x0000001a,0x0000010f,0x00000110,0x0003003e,0x0000010e,0x00000111,0x0004003d, + 0x00000006,0x00000112,0x0000010e,0x000500b7,0x00000062,0x00000113,0x00000112,0x0000007a, + 0x000300f7,0x00000116,0x00000000,0x000400fa,0x00000113,0x00000115,0x0000011c,0x000200f8, + 0x00000115,0x0003003e,0x00000117,0x00000058,0x0003003e,0x00000118,0x00000059,0x00060039, + 0x00000006,0x00000119,0x0000000f,0x00000117,0x00000118,0x0004003d,0x00000006,0x0000011a, + 0x0000010e,0x00050088,0x00000006,0x0000011b,0x00000119,0x0000011a,0x0003003e,0x00000114, + 0x0000011b,0x000200f9,0x00000116,0x000200f8,0x0000011c,0x0003003e,0x00000114,0x0000005a, + 0x000200f9,0x00000116,0x000200f8,0x00000116,0x0004003d,0x00000006,0x0000011d,0x00000114, + 0x000200fe,0x0000011d,0x00010038,0x00050036,0x00000006,0x00000060,0x00000000,0x0000005d, + 0x00030037,0x00000006,0x0000005e,0x00030037,0x00000006,0x0000005f,0x000200f8,0x00000061, + 0x0004003b,0x00000007,0x00000120,0x00000007,0x0004003b,0x00000007,0x00000121,0x00000007, + 0x0004003b,0x00000007,0x00000122,0x00000007,0x0004003b,0x00000007,0x00000126,0x00000007, + 0x0004003b,0x00000007,0x00000129,0x00000007,0x0004003b,0x00000007,0x0000012a,0x00000007, + 0x0003003e,0x00000121,0x0000005e,0x0003003e,0x00000122,0x0000005f,0x00060039,0x00000006, + 0x00000123,0x0000001a,0x00000121,0x00000122,0x0003003e,0x00000120,0x00000123,0x0004003d, + 0x00000006,0x00000124,0x00000120,0x000500b7,0x00000062,0x00000125,0x00000124,0x0000007a, + 0x000300f7,0x00000128,0x00000000,0x000400fa,0x00000125,0x00000127,0x0000012e,0x000200f8, + 0x00000127,0x0003003e,0x00000129,0x0000005e,0x0003003e,0x0000012a,0x0000005f,0x00060039, + 0x00000006,0x0000012b,0x0000000f,0x00000129,0x0000012a,0x0004003d,0x00000006,0x0000012c, + 0x00000120,0x00050088,0x00000006,0x0000012d,0x0000012b,0x0000012c,0x0003003e,0x00000126, + 0x0000012d,0x000200f9,0x00000128,0x000200f8,0x0000012e,0x0003003e,0x00000126,0x0000007a, + 0x000200f9,0x00000128,0x000200f8,0x00000128,0x0004003d,0x00000006,0x0000012f,0x00000126, + 0x000200fe,0x0000012f,0x00010038,0x00050036,0x00000062,0x00000065,0x00000000,0x00000063, + 0x00030037,0x00000012,0x00000064,0x000200f8,0x00000066,0x00050041,0x00000007,0x00000132, + 0x00000064,0x000000d6,0x0004003d,0x00000006,0x00000133,0x00000132,0x000500be,0x00000062, + 0x00000134,0x00000133,0x0000007a,0x000300f7,0x00000136,0x00000000,0x000400fa,0x00000134, + 0x00000135,0x00000136,0x000200f8,0x00000135,0x00050041,0x00000007,0x00000137,0x00000064, + 0x000000d6,0x0004003d,0x00000006,0x00000138,0x00000137,0x000500bc,0x00000062,0x00000139, + 0x00000138,0x0000007b,0x000200f9,0x00000136,0x000200f8,0x00000136,0x000700f5,0x00000062, + 0x0000013a,0x00000134,0x00000066,0x00000139,0x00000135,0x000300f7,0x0000013c,0x00000000, + 0x000400fa,0x0000013a,0x0000013b,0x0000013c,0x000200f8,0x0000013b,0x00050041,0x00000007, + 0x0000013e,0x00000064,0x0000013d,0x0004003d,0x00000006,0x0000013f,0x0000013e,0x000500be, + 0x00000062,0x00000140,0x0000013f,0x0000007a,0x000300f7,0x00000142,0x00000000,0x000400fa, + 0x00000140,0x00000141,0x00000142,0x000200f8,0x00000141,0x00050041,0x00000007,0x00000143, + 0x00000064,0x0000013d,0x0004003d,0x00000006,0x00000144,0x00000143,0x000500bc,0x00000062, + 0x00000145,0x00000144,0x0000007b,0x000200f9,0x00000142,0x000200f8,0x00000142,0x000700f5, + 0x00000062,0x00000146,0x00000140,0x0000013b,0x00000145,0x00000141,0x000200f9,0x0000013c, + 0x000200f8,0x0000013c,0x000700f5,0x00000062,0x00000147,0x0000013a,0x00000136,0x00000146, + 0x00000142,0x000200fe,0x00000147,0x00010038,0x00050036,0x00000011,0x0000006b,0x00000000, + 0x00000067,0x00030037,0x00000012,0x00000068,0x00030037,0x00000031,0x00000069,0x00030037, + 0x00000031,0x0000006a,0x000200f8,0x0000006c,0x0004003b,0x00000012,0x0000014a,0x00000007, + 0x0004003b,0x00000012,0x0000014f,0x00000007,0x0004003b,0x00000012,0x00000155,0x00000007, + 0x0004003b,0x00000012,0x00000157,0x00000007,0x0004003b,0x00000012,0x00000159,0x00000007, + 0x0004003b,0x00000012,0x0000015a,0x00000007,0x0004003b,0x00000012,0x0000015c,0x00000007, + 0x0004003d,0x00000011,0x0000014b,0x00000068,0x0004003d,0x00000021,0x0000014c,0x00000069, + 0x0004006f,0x00000011,0x0000014d,0x0000014c,0x00050085,0x00000011,0x0000014e,0x0000014b, + 0x0000014d,0x0003003e,0x0000014a,0x0000014e,0x0004003d,0x00000021,0x00000152,0x00000069, + 0x0004006f,0x00000011,0x00000153,0x00000152,0x00050083,0x00000011,0x00000154,0x00000153, + 0x00000151,0x0004003d,0x00000011,0x00000156,0x0000014a,0x0003003e,0x00000155,0x00000156, + 0x0003003e,0x00000157,0x00000154,0x00060039,0x00000011,0x00000158,0x00000016,0x00000155, + 0x00000157,0x0003003e,0x00000159,0x00000151,0x0003003e,0x0000015a,0x00000158,0x00060039, + 0x00000011,0x0000015b,0x0000001e,0x00000159,0x0000015a,0x0003003e,0x0000014f,0x0000015b, + 0x0004003d,0x00000011,0x0000015d,0x0000014f,0x0004003d,0x00000021,0x0000015e,0x0000006a, + 0x0004006f,0x00000011,0x0000015f,0x0000015e,0x00050088,0x00000011,0x00000160,0x0000015d, + 0x0000015f,0x0003003e,0x0000015c,0x00000160,0x0004003d,0x00000011,0x00000161,0x0000015c, + 0x000200fe,0x00000161,0x00010038,0x00050036,0x0000006d,0x00000073,0x00000000,0x0000006f, + 0x00030037,0x0000006e,0x00000070,0x00030037,0x00000007,0x00000071,0x00030037,0x00000007, + 0x00000072,0x000200f8,0x00000074,0x0004003b,0x00000007,0x00000164,0x00000007,0x0004003b, + 0x00000007,0x00000165,0x00000007,0x0004003b,0x00000007,0x0000016a,0x00000007,0x0004003b, + 0x00000007,0x0000016f,0x00000007,0x0004003b,0x00000175,0x00000176,0x00000007,0x0004003b, + 0x00000007,0x0000017f,0x00000007,0x0004003b,0x00000007,0x00000185,0x00000007,0x0004003b, + 0x00000007,0x00000192,0x00000007,0x0004003b,0x00000007,0x00000194,0x00000007,0x0003003e, + 0x00000164,0x0000007a,0x0004003d,0x00000006,0x00000166,0x00000071,0x00060041,0x00000007, + 0x00000167,0x00000070,0x00000096,0x000000d6,0x0004003d,0x00000006,0x00000168,0x00000167, + 0x00050083,0x00000006,0x00000169,0x00000166,0x00000168,0x0003003e,0x00000165,0x00000169, + 0x0004003d,0x00000006,0x0000016b,0x00000071,0x00060041,0x00000007,0x0000016c,0x00000070, + 0x00000096,0x000000d6,0x0004003d,0x00000006,0x0000016d,0x0000016c,0x00070039,0x00000006, + 0x0000016e,0x0000005b,0x0000016b,0x0000016d,0x0000007b,0x0003003e,0x0000016a,0x0000016e, + 0x0004003d,0x00000006,0x00000170,0x0000016a,0x0003003e,0x0000016f,0x00000170,0x0004003d, + 0x00000006,0x00000171,0x0000016a,0x000500b8,0x00000062,0x00000172,0x00000171,0x0000007b, + 0x000300f7,0x00000174,0x00000000,0x000400fa,0x00000172,0x00000173,0x00000174,0x000200f8, + 0x00000173,0x0003003e,0x00000176,0x0000009c,0x000200f9,0x00000177,0x000200f8,0x00000177, + 0x000400f6,0x00000179,0x0000017a,0x00000000,0x000200f9,0x0000017b,0x000200f8,0x0000017b, + 0x0004003d,0x00000020,0x0000017c,0x00000176,0x000500b3,0x00000062,0x0000017e,0x0000017c, + 0x0000017d,0x000400fa,0x0000017e,0x00000178,0x00000179,0x000200f8,0x00000178,0x0004003d, + 0x00000006,0x00000180,0x00000071,0x0004003d,0x00000020,0x00000181,0x00000176,0x00060041, + 0x00000007,0x00000182,0x00000070,0x00000096,0x00000181,0x0004003d,0x00000006,0x00000183, + 0x00000182,0x00050083,0x00000006,0x00000184,0x00000180,0x00000183,0x0003003e,0x0000017f, + 0x00000184,0x0004003d,0x00000006,0x00000186,0x00000071,0x0004003d,0x00000020,0x00000187, + 0x00000176,0x00060041,0x00000007,0x00000188,0x00000070,0x00000096,0x00000187,0x0004003d, + 0x00000006,0x00000189,0x00000188,0x00060039,0x00000006,0x0000018a,0x00000060,0x00000186, + 0x00000189,0x0003003e,0x00000185,0x0000018a,0x0004003d,0x00000006,0x0000018b,0x00000165, + 0x0006000c,0x00000006,0x0000018c,0x00000001,0x00000006,0x0000018b,0x0004003d,0x00000006, + 0x0000018d,0x0000017f,0x0006000c,0x00000006,0x0000018e,0x00000001,0x00000006,0x0000018d, + 0x000500b4,0x00000062,0x0000018f,0x0000018c,0x0000018e,0x000300f7,0x00000191,0x00000000, + 0x000400fa,0x0000018f,0x00000190,0x00000191,0x000200f8,0x00000190,0x0004003d,0x00000006, + 0x00000193,0x0000016f,0x0003003e,0x00000192,0x00000193,0x0004003d,0x00000006,0x00000195, + 0x00000185,0x0003003e,0x00000194,0x00000195,0x00060039,0x00000006,0x00000196,0x0000001a, + 0x00000192,0x00000194,0x0003003e,0x0000016f,0x00000196,0x000200f9,0x00000191,0x000200f8, + 0x00000191,0x000200f9,0x0000017a,0x000200f8,0x0000017a,0x0004003d,0x00000020,0x00000197, + 0x00000176,0x00050080,0x00000020,0x00000198,0x00000197,0x0000009c,0x0003003e,0x00000176, + 0x00000198,0x000200f9,0x00000177,0x000200f8,0x00000179,0x0004003d,0x00000006,0x00000199, + 0x0000016f,0x0004003d,0x00000006,0x0000019a,0x0000016a,0x000500ba,0x00000062,0x0000019b, + 0x00000199,0x0000019a,0x000600a9,0x00000006,0x0000019c,0x0000019b,0x0000007b,0x0000007a, + 0x0003003e,0x00000164,0x0000019c,0x000200f9,0x00000174,0x000200f8,0x00000174,0x00060041, + 0x00000007,0x0000019e,0x00000070,0x00000096,0x0000019d,0x0004003d,0x00000006,0x0000019f, + 0x0000019e,0x00060041,0x00000007,0x000001a1,0x00000070,0x00000096,0x000001a0,0x0003003e, + 0x000001a1,0x0000019f,0x00060041,0x00000007,0x000001a2,0x00000070,0x00000096,0x0000013d, + 0x0004003d,0x00000006,0x000001a3,0x000001a2,0x00060041,0x00000007,0x000001a4,0x00000070, + 0x00000096,0x0000019d,0x0003003e,0x000001a4,0x000001a3,0x00060041,0x00000007,0x000001a5, + 0x00000070,0x00000096,0x000000d6,0x0004003d,0x00000006,0x000001a6,0x000001a5,0x00060041, + 0x00000007,0x000001a7,0x00000070,0x00000096,0x0000013d,0x0003003e,0x000001a7,0x000001a6, + 0x0004003d,0x00000006,0x000001a8,0x00000071,0x00060041,0x00000007,0x000001a9,0x00000070, + 0x00000096,0x000000d6,0x0003003e,0x000001a9,0x000001a8,0x00040039,0x00000006,0x000001aa, + 0x0000004f,0x00050041,0x00000033,0x000001ab,0x00000070,0x00000096,0x0004003d,0x00000032, + 0x000001ac,0x000001ab,0x00070050,0x00000032,0x000001ad,0x000001aa,0x000001aa,0x000001aa, + 0x000001aa,0x00050088,0x00000032,0x000001ae,0x000001ac,0x000001ad,0x00050041,0x00000033, + 0x000001af,0x00000070,0x00000096,0x0003003e,0x000001af,0x000001ae,0x0004003d,0x00000006, + 0x000001b0,0x00000164,0x00060041,0x00000007,0x000001b1,0x00000070,0x00000096,0x000001a0, + 0x0004003d,0x00000006,0x000001b2,0x000001b1,0x000500b7,0x00000062,0x000001b3,0x000001b2, + 0x0000007a,0x000600a9,0x00000006,0x000001b4,0x000001b3,0x0000007b,0x0000007a,0x00050085, + 0x00000006,0x000001b5,0x000001b0,0x000001b4,0x00050041,0x00000007,0x000001b6,0x00000070, + 0x0000009c,0x0003003e,0x000001b6,0x000001b5,0x0004003d,0x0000006d,0x000001b7,0x00000070, + 0x000200fe,0x000001b7,0x00010038,0x00050036,0x00000002,0x00000077,0x00000000,0x00000075, + 0x00030037,0x00000031,0x00000076,0x000200f8,0x00000078,0x0004003b,0x0000006e,0x000001ba, + 0x00000007,0x0004003b,0x00000012,0x000001be,0x00000007,0x0004003b,0x00000031,0x000001bf, + 0x00000007,0x0004003b,0x00000012,0x000001c2,0x00000007,0x0004003b,0x00000012,0x000001ca, + 0x00000007,0x0004003b,0x00000012,0x000001d1,0x00000007,0x0004003b,0x00000012,0x000001d8, + 0x00000007,0x0004003b,0x00000012,0x000001dc,0x00000007,0x0004003b,0x00000012,0x000001e1, + 0x00000007,0x0004003b,0x00000012,0x000001e4,0x00000007,0x0004003b,0x00000031,0x000001e6, + 0x00000007,0x0004003b,0x00000031,0x000001e7,0x00000007,0x0004003b,0x00000033,0x000001e9, + 0x00000007,0x0004003b,0x00000012,0x000001ea,0x00000007,0x0004003b,0x00000007,0x000001ed, + 0x00000007,0x0004003b,0x00000007,0x000001ee,0x00000007,0x0004003b,0x00000007,0x000001f2, + 0x00000007,0x0004003b,0x00000007,0x000001f3,0x00000007,0x0004003b,0x00000007,0x000001f7, + 0x00000007,0x0004003b,0x00000007,0x000001f8,0x00000007,0x0004003b,0x00000007,0x000001fc, + 0x00000007,0x0004003b,0x00000007,0x000001fd,0x00000007,0x0004003b,0x00000201,0x00000202, + 0x00000007,0x0004003b,0x00000201,0x00000206,0x00000007,0x0004003b,0x00000012,0x0000020b, + 0x00000007,0x0004003b,0x00000012,0x0000020e,0x00000007,0x0004003b,0x00000031,0x00000210, + 0x00000007,0x0004003b,0x00000031,0x00000211,0x00000007,0x0004003b,0x00000007,0x00000213, + 0x00000007,0x0004003b,0x00000012,0x00000214,0x00000007,0x0004003b,0x00000012,0x00000219, + 0x00000007,0x0004003b,0x00000012,0x0000021c,0x00000007,0x0004003b,0x00000031,0x0000021e, + 0x00000007,0x0004003b,0x00000031,0x0000021f,0x00000007,0x0004003b,0x00000012,0x00000221, + 0x00000007,0x0004003b,0x00000012,0x00000229,0x00000007,0x0004003b,0x00000012,0x0000022f, + 0x00000007,0x0004003b,0x00000031,0x00000231,0x00000007,0x0004003b,0x00000031,0x00000232, + 0x00000007,0x0004003b,0x00000007,0x00000234,0x00000007,0x0004003b,0x00000012,0x00000235, + 0x00000007,0x0004003b,0x0000006e,0x00000238,0x00000007,0x0004003b,0x00000007,0x0000023a, + 0x00000007,0x0004003b,0x00000007,0x0000023c,0x00000007,0x0004003b,0x00000007,0x0000023f, + 0x00000007,0x0004003b,0x00000012,0x00000240,0x00000007,0x0004003b,0x00000007,0x00000245, + 0x00000007,0x0004003b,0x00000031,0x00000256,0x00000007,0x0004003b,0x00000033,0x00000258, + 0x00000007,0x0004003b,0x00000031,0x0000025c,0x00000007,0x0004003b,0x00000007,0x0000025e, + 0x00000007,0x00050041,0x00000007,0x000001bb,0x000001ba,0x0000009c,0x0003003e,0x000001bb, + 0x0000007a,0x00050041,0x00000033,0x000001bd,0x000001ba,0x00000096,0x0003003e,0x000001bd, + 0x000001bc,0x0004003d,0x00000021,0x000001c0,0x00000076,0x0003003e,0x000001bf,0x000001c0, + 0x00050039,0x00000011,0x000001c1,0x0000004d,0x000001bf,0x0003003e,0x000001be,0x000001c1, + 0x0004003d,0x00000021,0x000001c3,0x00000076,0x0004006f,0x00000011,0x000001c4,0x000001c3, + 0x00050050,0x00000011,0x000001c5,0x00000150,0x00000150,0x00050081,0x00000011,0x000001c6, + 0x000001c4,0x000001c5,0x00040039,0x00000021,0x000001c7,0x00000023,0x0004006f,0x00000011, + 0x000001c8,0x000001c7,0x00050088,0x00000011,0x000001c9,0x000001c6,0x000001c8,0x0003003e, + 0x000001c2,0x000001c9,0x0004003d,0x00000011,0x000001cb,0x000001c2,0x00040039,0x00000011, + 0x000001cc,0x0000002a,0x00040039,0x00000021,0x000001cd,0x00000023,0x0004006f,0x00000011, + 0x000001ce,0x000001cd,0x00050088,0x00000011,0x000001cf,0x000001cc,0x000001ce,0x00050081, + 0x00000011,0x000001d0,0x000001cb,0x000001cf,0x0003003e,0x000001ca,0x000001d0,0x0004003d, + 0x00000011,0x000001d2,0x000001c2,0x00040039,0x00000011,0x000001d3,0x0000002c,0x00040039, + 0x00000021,0x000001d4,0x00000025,0x0004006f,0x00000011,0x000001d5,0x000001d4,0x00050088, + 0x00000011,0x000001d6,0x000001d3,0x000001d5,0x00050081,0x00000011,0x000001d7,0x000001d2, + 0x000001d6,0x0003003e,0x000001d1,0x000001d7,0x0004003d,0x00000011,0x000001d9,0x000001d1, + 0x0004003d,0x00000011,0x000001da,0x000001be,0x00050081,0x00000011,0x000001db,0x000001d9, + 0x000001da,0x0003003e,0x000001d8,0x000001db,0x0004003d,0x00000011,0x000001dd,0x000001d8, + 0x0003003e,0x000001dc,0x000001dd,0x00050039,0x00000062,0x000001de,0x00000065,0x000001dc, + 0x000300f7,0x000001e0,0x00000000,0x000400fa,0x000001de,0x000001df,0x000001e0,0x000200f8, + 0x000001df,0x00040039,0x00000021,0x000001e2,0x00000023,0x00040039,0x00000021,0x000001e3, + 0x00000027,0x0004003d,0x00000011,0x000001e5,0x000001ca,0x0003003e,0x000001e4,0x000001e5, + 0x0003003e,0x000001e6,0x000001e2,0x0003003e,0x000001e7,0x000001e3,0x00070039,0x00000011, + 0x000001e8,0x0000006b,0x000001e4,0x000001e6,0x000001e7,0x0003003e,0x000001e1,0x000001e8, + 0x0004003d,0x00000011,0x000001eb,0x000001e1,0x0003003e,0x000001ea,0x000001eb,0x00050039, + 0x00000032,0x000001ec,0x00000052,0x000001ea,0x0003003e,0x000001e9,0x000001ec,0x00050041, + 0x00000007,0x000001ef,0x000001e9,0x000000d6,0x0004003d,0x00000006,0x000001f0,0x000001ef, + 0x0003003e,0x000001ee,0x000001f0,0x00050039,0x00000006,0x000001f1,0x0000000a,0x000001ee, + 0x0003003e,0x000001ed,0x000001f1,0x00050041,0x00000007,0x000001f4,0x000001e9,0x0000013d, + 0x0004003d,0x00000006,0x000001f5,0x000001f4,0x0003003e,0x000001f3,0x000001f5,0x00050039, + 0x00000006,0x000001f6,0x0000000a,0x000001f3,0x0003003e,0x000001f2,0x000001f6,0x00050041, + 0x00000007,0x000001f9,0x000001e9,0x0000019d,0x0004003d,0x00000006,0x000001fa,0x000001f9, + 0x0003003e,0x000001f8,0x000001fa,0x00050039,0x00000006,0x000001fb,0x0000000a,0x000001f8, + 0x0003003e,0x000001f7,0x000001fb,0x00050041,0x00000007,0x000001fe,0x000001e9,0x000001a0, + 0x0004003d,0x00000006,0x000001ff,0x000001fe,0x0003003e,0x000001fd,0x000001ff,0x00050039, + 0x00000006,0x00000200,0x0000000a,0x000001fd,0x0003003e,0x000001fc,0x00000200,0x0004003d, + 0x00000006,0x00000203,0x000001fc,0x000500ba,0x00000062,0x00000205,0x00000203,0x00000204, + 0x0003003e,0x00000202,0x00000205,0x0004003d,0x00000062,0x00000207,0x00000202,0x0003003e, + 0x00000206,0x00000207,0x0004003d,0x00000062,0x00000208,0x00000206,0x000300f7,0x0000020a, + 0x00000000,0x000400fa,0x00000208,0x00000209,0x0000020a,0x000200f8,0x00000209,0x00040039, + 0x00000021,0x0000020c,0x00000023,0x00040039,0x00000021,0x0000020d,0x00000027,0x0004003d, + 0x00000011,0x0000020f,0x000001ca,0x0003003e,0x0000020e,0x0000020f,0x0003003e,0x00000210, + 0x0000020c,0x0003003e,0x00000211,0x0000020d,0x00070039,0x00000011,0x00000212,0x0000006b, + 0x0000020e,0x00000210,0x00000211,0x0003003e,0x0000020b,0x00000212,0x0004003d,0x00000011, + 0x00000215,0x0000020b,0x0003003e,0x00000214,0x00000215,0x00050039,0x00000006,0x00000216, + 0x00000044,0x00000214,0x00040039,0x00000006,0x00000217,0x0000004f,0x00050085,0x00000006, + 0x00000218,0x00000216,0x00000217,0x0003003e,0x00000213,0x00000218,0x00040039,0x00000021, + 0x0000021a,0x00000025,0x00040039,0x00000021,0x0000021b,0x00000027,0x0004003d,0x00000011, + 0x0000021d,0x000001d8,0x0003003e,0x0000021c,0x0000021d,0x0003003e,0x0000021e,0x0000021a, + 0x0003003e,0x0000021f,0x0000021b,0x00070039,0x00000011,0x00000220,0x0000006b,0x0000021c, + 0x0000021e,0x0000021f,0x0003003e,0x00000219,0x00000220,0x0004003d,0x00000011,0x00000222, + 0x00000219,0x0003003e,0x00000221,0x00000222,0x00050039,0x00000032,0x00000223,0x0000003b, + 0x00000221,0x00040039,0x00000006,0x00000224,0x0000002f,0x0005008e,0x00000032,0x00000225, + 0x00000223,0x00000224,0x00040039,0x00000006,0x00000226,0x0000004f,0x0005008e,0x00000032, + 0x00000227,0x00000225,0x00000226,0x00050041,0x00000033,0x00000228,0x000001ba,0x00000096, + 0x0003003e,0x00000228,0x00000227,0x00040039,0x00000021,0x0000022a,0x00000023,0x00050050, + 0x00000021,0x0000022c,0x0000022b,0x0000022b,0x00050087,0x00000021,0x0000022d,0x0000022a, + 0x0000022c,0x00040039,0x00000021,0x0000022e,0x0000003d,0x0004003d,0x00000011,0x00000230, + 0x000001ca,0x0003003e,0x0000022f,0x00000230,0x0003003e,0x00000231,0x0000022d,0x0003003e, + 0x00000232,0x0000022e,0x00070039,0x00000011,0x00000233,0x0000006b,0x0000022f,0x00000231, + 0x00000232,0x0003003e,0x00000229,0x00000233,0x0004003d,0x00000011,0x00000236,0x00000229, + 0x0003003e,0x00000235,0x00000236,0x00050039,0x00000006,0x00000237,0x00000041,0x00000235, + 0x0003003e,0x00000234,0x00000237,0x0004003d,0x0000006d,0x00000239,0x000001ba,0x0003003e, + 0x00000238,0x00000239,0x0004003d,0x00000006,0x0000023b,0x00000213,0x0003003e,0x0000023a, + 0x0000023b,0x0004003d,0x00000006,0x0000023d,0x00000234,0x0003003e,0x0000023c,0x0000023d, + 0x00070039,0x0000006d,0x0000023e,0x00000073,0x00000238,0x0000023a,0x0000023c,0x0003003e, + 0x000001ba,0x0000023e,0x0004003d,0x00000011,0x00000241,0x000001be,0x0003003e,0x00000240, + 0x00000241,0x00050039,0x00000006,0x00000242,0x00000055,0x00000240,0x00050088,0x00000006, + 0x00000244,0x00000242,0x00000243,0x0003003e,0x00000245,0x00000244,0x00050039,0x00000006, + 0x00000246,0x0000000a,0x00000245,0x00050083,0x00000006,0x00000247,0x0000007b,0x00000246, + 0x0003003e,0x0000023f,0x00000247,0x0004003d,0x00000006,0x00000248,0x0000023f,0x0004003d, + 0x00000006,0x00000249,0x000001f2,0x00050083,0x00000006,0x0000024a,0x0000007b,0x00000249, + 0x00050085,0x00000006,0x0000024b,0x00000248,0x0000024a,0x0004003d,0x00000006,0x0000024c, + 0x000001ed,0x00050083,0x00000006,0x0000024d,0x0000007b,0x0000024c,0x00050085,0x00000006, + 0x0000024e,0x0000024b,0x0000024d,0x0004003d,0x00000006,0x0000024f,0x000001f7,0x00050083, + 0x00000006,0x00000250,0x0000007b,0x0000024f,0x00050085,0x00000006,0x00000251,0x0000024e, + 0x00000250,0x00050041,0x00000007,0x00000252,0x000001ba,0x0000009c,0x0004003d,0x00000006, + 0x00000253,0x00000252,0x00050085,0x00000006,0x00000254,0x00000253,0x00000251,0x00050041, + 0x00000007,0x00000255,0x000001ba,0x0000009c,0x0003003e,0x00000255,0x00000254,0x000200f9, + 0x0000020a,0x000200f8,0x0000020a,0x000200f9,0x000001e0,0x000200f8,0x000001e0,0x0004003d, + 0x00000021,0x00000257,0x00000076,0x0003003e,0x00000256,0x00000257,0x00050041,0x00000033, + 0x00000259,0x000001ba,0x00000096,0x0004003d,0x00000032,0x0000025a,0x00000259,0x0003003e, + 0x00000258,0x0000025a,0x00060039,0x00000002,0x0000025b,0x00000037,0x00000256,0x00000258, + 0x0004003d,0x00000021,0x0000025d,0x00000076,0x0003003e,0x0000025c,0x0000025d,0x00050041, + 0x00000007,0x0000025f,0x000001ba,0x0000009c,0x0004003d,0x00000006,0x00000260,0x0000025f, + 0x0003003e,0x0000025e,0x00000260,0x00060039,0x00000002,0x00000261,0x00000049,0x0000025c, + 0x0000025e,0x000100fd,0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_luma_pyramid_comp_spv.h b/gpu/vk/shaders/fsr3_luma_pyramid_comp_spv.h new file mode 100644 index 000000000..831563084 --- /dev/null +++ b/gpu/vk/shaders/fsr3_luma_pyramid_comp_spv.h @@ -0,0 +1,1527 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_LUMA_PYRAMID_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x00000747,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000031,0x00020011,0x0000003d,0x00020011,0x00000044,0x0006000b,0x00000001,0x4c534c47, + 0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,0x0007000f,0x00000005, + 0x00000004,0x6e69616d,0x00000000,0x00000731,0x00000733,0x00060010,0x00000004,0x00000011, + 0x00000100,0x00000001,0x00000001,0x00030003,0x00000002,0x000001c2,0x000b0004,0x455f4c47, + 0x735f5458,0x6c706d61,0x656c7265,0x745f7373,0x75747865,0x665f6572,0x74636e75,0x736e6f69, + 0x00000000,0x000b0004,0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469, + 0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45, + 0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47, + 0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669,0x00090004,0x4b5f4c47, + 0x735f5248,0x65646168,0x75735f72,0x6f726762,0x625f7075,0x63697361,0x00000000,0x00080004, + 0x4b5f4c47,0x735f5248,0x65646168,0x75735f72,0x6f726762,0x715f7075,0x00646175,0x00040005, + 0x00000004,0x6e69616d,0x00000000,0x000a0005,0x0000000c,0x42786666,0x69667469,0x45646c65, + 0x61727478,0x75287463,0x31753b31,0x3b31753b,0x00000000,0x00030005,0x00000009,0x00637273, + 0x00030005,0x0000000a,0x0066666f,0x00040005,0x0000000b,0x73746962,0x00000000,0x000a0005, + 0x00000011,0x42786666,0x69667469,0x49646c65,0x7265736e,0x73614d74,0x3175286b,0x3b31753b, + 0x003b3175,0x00030005,0x0000000e,0x00637273,0x00030005,0x0000000f,0x00736e69,0x00040005, + 0x00000010,0x73746962,0x00000000,0x00060005,0x00000018,0x4d786666,0x69286e69,0x31693b31, + 0x0000003b,0x00030005,0x00000016,0x00000078,0x00030005,0x00000017,0x00000079,0x00060005, + 0x0000001f,0x4d786666,0x66287861,0x31663b31,0x0000003b,0x00030005,0x0000001d,0x00000078, + 0x00030005,0x0000001e,0x00000079,0x00060005,0x00000023,0x4d786666,0x69287861,0x31693b31, + 0x0000003b,0x00030005,0x00000021,0x00000078,0x00030005,0x00000022,0x00000079,0x00060005, + 0x00000027,0x50786666,0x6628776f,0x31663b31,0x0000003b,0x00030005,0x00000025,0x00000078, + 0x00030005,0x00000026,0x00000079,0x000a0005,0x0000002c,0x52786666,0x70616d65,0x57726f46, + 0x52657661,0x63756465,0x6e6f6974,0x3b317528,0x00000000,0x00030005,0x0000002b,0x00000061, + 0x00050005,0x00000030,0x646e6552,0x69537265,0x0028657a,0x00050005,0x00000033,0x746c6544, + 0x6d695461,0x00002865,0x00050005,0x00000036,0x4370694d,0x746e756f,0x00000028,0x00060005, + 0x00000038,0x576d754e,0x476b726f,0x70756f72,0x00002873,0x00070005,0x0000003b,0x6b726f57, + 0x756f7247,0x66664f70,0x28746573,0x00000000,0x00080005,0x00000040,0x64616f4c,0x74726146, + 0x74736568,0x74706544,0x69762868,0x00003b32,0x00040005,0x0000003f,0x50785069,0x0000736f, + 0x000a0005,0x00000045,0x726f7453,0x72614665,0x73656874,0x70654474,0x694d6874,0x76283170, + 0x663b3269,0x00003b31,0x00040005,0x00000043,0x50785069,0x0000736f,0x00040005,0x00000044, + 0x70654466,0x00006874,0x00080005,0x00000048,0x64616f4c,0x72727543,0x4c746e65,0x28616d75, + 0x3b326976,0x00000000,0x00040005,0x00000047,0x50785069,0x0000736f,0x00060005,0x0000004c, + 0x64616f4c,0x6d617246,0x666e4965,0x0000286f,0x00070005,0x00000051,0x726f7453,0x61724665, + 0x6e49656d,0x76286f66,0x003b3466,0x00040005,0x00000050,0x666e4966,0x0000006f,0x00080005, + 0x00000057,0x6f4c5752,0x79506461,0x696d6172,0x69762864,0x31753b32,0x0000003b,0x00040005, + 0x00000055,0x50785069,0x0000736f,0x00040005,0x00000056,0x65646e69,0x00000078,0x00090005, + 0x0000005e,0x726f7453,0x72795065,0x64696d61,0x32697628,0x3266763b,0x3b31753b,0x00000000, + 0x00040005,0x0000005b,0x50785069,0x0000736f,0x00050005,0x0000005c,0x5674756f,0x65756c61, + 0x00000000,0x00040005,0x0000005d,0x65646e69,0x00000078,0x000a0005,0x00000062,0x5f445053, + 0x72636e49,0x65736165,0x6d6f7441,0x6f436369,0x65746e75,0x31752872,0x0000003b,0x00050005, + 0x00000061,0x43647073,0x746e756f,0x00007265,0x00080005,0x00000064,0x5f445053,0x65736552, + 0x6f744174,0x4363696d,0x746e756f,0x00287265,0x00080005,0x0000006a,0x6d616c43,0x616f4c70, + 0x69762864,0x69763b32,0x69763b32,0x00003b32,0x00050005,0x00000067,0x53785069,0x6c706d61, + 0x00000065,0x00050005,0x00000068,0x4f785069,0x65736666,0x00000074,0x00060005,0x00000069, + 0x78655469,0x65727574,0x657a6953,0x00000000,0x000a0005,0x0000006e,0x706d6f43,0x41657475, + 0x456f7475,0x736f7078,0x46657275,0x4c6d6f72,0x28677661,0x003b3166,0x00040005,0x0000006d, + 0x6776614c,0x00000000,0x000a0005,0x00000071,0x49647053,0x6572636e,0x41657361,0x696d6f74, + 0x756f4363,0x7265746e,0x3b317528,0x00000000,0x00040005,0x00000070,0x63696c73,0x00000065, + 0x00080005,0x00000073,0x47647053,0x74417465,0x63696d6f,0x6e756f43,0x28726574,0x00000000, + 0x00090005,0x00000076,0x52647053,0x74657365,0x6d6f7441,0x6f436369,0x65746e75,0x31752872, + 0x0000003b,0x00040005,0x00000075,0x63696c73,0x00000065,0x00090005,0x0000007b,0x4c647053, + 0x5364616f,0x6372756f,0x616d4965,0x76286567,0x753b3266,0x00003b31,0x00040005,0x00000079, + 0x50785069,0x0000736f,0x00040005,0x0000007a,0x63696c73,0x00000065,0x00060005,0x00000080, + 0x4c647053,0x2864616f,0x3b326976,0x003b3175,0x00030005,0x0000007e,0x00786574,0x00040005, + 0x0000007f,0x63696c73,0x00000065,0x00090005,0x00000087,0x52647053,0x63756465,0x76283465, + 0x763b3466,0x763b3466,0x763b3466,0x003b3466,0x00030005,0x00000083,0x00003076,0x00030005, + 0x00000084,0x00003176,0x00030005,0x00000085,0x00003276,0x00030005,0x00000086,0x00003376, + 0x00080005,0x0000008e,0x53647053,0x65726f74,0x32697628,0x3466763b,0x3b31753b,0x003b3175, + 0x00030005,0x0000008a,0x00786970,0x00050005,0x0000008b,0x5674756f,0x65756c61,0x00000000, + 0x00040005,0x0000008c,0x65646e69,0x00000078,0x00040005,0x0000008d,0x63696c73,0x00000065, + 0x00090005,0x00000093,0x4c647053,0x4964616f,0x7265746e,0x6964656d,0x28657461,0x753b3175, + 0x00003b31,0x00030005,0x00000091,0x00000078,0x00030005,0x00000092,0x00000079,0x000a0005, + 0x00000099,0x53647053,0x65726f74,0x65746e49,0x64656d72,0x65746169,0x3b317528,0x763b3175, + 0x003b3466,0x00030005,0x00000096,0x00000078,0x00030005,0x00000097,0x00000079,0x00040005, + 0x00000098,0x756c6176,0x00000065,0x000a0005,0x0000009b,0x53786666,0x6f576470,0x72676b72, + 0x5370756f,0x66667568,0x6142656c,0x65697272,0x00002872,0x00090005,0x000000a2,0x45647053, + 0x57746978,0x676b726f,0x70756f72,0x3b317528,0x753b3175,0x00003b31,0x00060005,0x0000009f, + 0x576d756e,0x476b726f,0x70756f72,0x00000073,0x00080005,0x000000a0,0x61636f6c,0x766e496c, + 0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00040005,0x000000a1,0x63696c73,0x00000065, + 0x00070005,0x000000a6,0x52647053,0x63756465,0x61755165,0x66762864,0x00003b34,0x00030005, + 0x000000a5,0x00000076,0x000b0005,0x000000af,0x52647053,0x63756465,0x616f4c65,0x76283464, + 0x763b3275,0x763b3275,0x763b3275,0x753b3275,0x00003b31,0x00030005,0x000000aa,0x00003069, + 0x00030005,0x000000ab,0x00003169,0x00030005,0x000000ac,0x00003269,0x00030005,0x000000ad, + 0x00003369,0x00040005,0x000000ae,0x63696c73,0x00000065,0x00080005,0x000000b4,0x52647053, + 0x63756465,0x616f4c65,0x76283464,0x753b3275,0x00003b31,0x00040005,0x000000b2,0x65736162, + 0x00000000,0x00040005,0x000000b3,0x63696c73,0x00000065,0x000e0005,0x000000bb,0x52647053, + 0x63756465,0x616f4c65,0x756f5364,0x49656372,0x6567616d,0x75762834,0x75763b32,0x75763b32, + 0x75763b32,0x31753b32,0x0000003b,0x00030005,0x000000b6,0x00003069,0x00030005,0x000000b7, + 0x00003169,0x00030005,0x000000b8,0x00003269,0x00030005,0x000000b9,0x00003369,0x00040005, + 0x000000ba,0x63696c73,0x00000065,0x000b0005,0x000000bf,0x52647053,0x63756465,0x616f4c65, + 0x756f5364,0x49656372,0x6567616d,0x32757628,0x3b31753b,0x00000000,0x00040005,0x000000bd, + 0x65736162,0x00000000,0x00040005,0x000000be,0x63696c73,0x00000065,0x00100005,0x000000c8, + 0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x5f305f73,0x6e495f31,0x6e697274,0x73636973, + 0x3b317528,0x763b3175,0x753b3275,0x31753b31,0x3b31753b,0x00000000,0x00030005,0x000000c2, + 0x00000078,0x00030005,0x000000c3,0x00000079,0x00050005,0x000000c4,0x6b726f77,0x756f7247, + 0x00444970,0x00080005,0x000000c5,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e, + 0x00000000,0x00030005,0x000000c6,0x0070696d,0x00040005,0x000000c7,0x63696c73,0x00000065, + 0x000d0005,0x000000d0,0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x5f305f73,0x31752831, + 0x3b31753b,0x3b327576,0x753b3175,0x31753b31,0x0000003b,0x00030005,0x000000ca,0x00000078, + 0x00030005,0x000000cb,0x00000079,0x00050005,0x000000cc,0x6b726f77,0x756f7247,0x00444970, + 0x00080005,0x000000cd,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000, + 0x00030005,0x000000ce,0x0070696d,0x00040005,0x000000cf,0x63696c73,0x00000065,0x000c0005, + 0x000000d8,0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x7528325f,0x31753b31,0x3275763b, + 0x3b31753b,0x753b3175,0x00003b31,0x00030005,0x000000d2,0x00000078,0x00030005,0x000000d3, + 0x00000079,0x00050005,0x000000d4,0x6b726f77,0x756f7247,0x00444970,0x00080005,0x000000d5, + 0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00030005,0x000000d6, + 0x0070696d,0x00040005,0x000000d7,0x63696c73,0x00000065,0x000c0005,0x000000e0,0x44647053, + 0x736e776f,0x6c706d61,0x70694d65,0x7528335f,0x31753b31,0x3275763b,0x3b31753b,0x753b3175, + 0x00003b31,0x00030005,0x000000da,0x00000078,0x00030005,0x000000db,0x00000079,0x00050005, + 0x000000dc,0x6b726f77,0x756f7247,0x00444970,0x00080005,0x000000dd,0x61636f6c,0x766e496c, + 0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00030005,0x000000de,0x0070696d,0x00040005, + 0x000000df,0x63696c73,0x00000065,0x000c0005,0x000000e8,0x44647053,0x736e776f,0x6c706d61, + 0x70694d65,0x7528345f,0x31753b31,0x3275763b,0x3b31753b,0x753b3175,0x00003b31,0x00030005, + 0x000000e2,0x00000078,0x00030005,0x000000e3,0x00000079,0x00050005,0x000000e4,0x6b726f77, + 0x756f7247,0x00444970,0x00080005,0x000000e5,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69, + 0x7865646e,0x00000000,0x00030005,0x000000e6,0x0070696d,0x00040005,0x000000e7,0x63696c73, + 0x00000065,0x000b0005,0x000000ef,0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x7628355f, + 0x753b3275,0x31753b31,0x3b31753b,0x00000000,0x00050005,0x000000eb,0x6b726f77,0x756f7247, + 0x00444970,0x00080005,0x000000ec,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e, + 0x00000000,0x00030005,0x000000ed,0x0070696d,0x00040005,0x000000ee,0x63696c73,0x00000065, + 0x000b0005,0x000000f6,0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x5f365f73,0x31752837, + 0x3b31753b,0x753b3175,0x00003b31,0x00030005,0x000000f2,0x00000078,0x00030005,0x000000f3, + 0x00000079,0x00040005,0x000000f4,0x7370696d,0x00000000,0x00040005,0x000000f5,0x63696c73, + 0x00000065,0x000e0005,0x00000100,0x44647053,0x736e776f,0x6c706d61,0x78654e65,0x756f4674, + 0x31752872,0x3b31753b,0x3b327576,0x753b3175,0x31753b31,0x3b31753b,0x00000000,0x00030005, + 0x000000f9,0x00000078,0x00030005,0x000000fa,0x00000079,0x00050005,0x000000fb,0x6b726f77, + 0x756f7247,0x00444970,0x00080005,0x000000fc,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69, + 0x7865646e,0x00000000,0x00040005,0x000000fd,0x65736162,0x0070694d,0x00040005,0x000000fe, + 0x7370696d,0x00000000,0x00040005,0x000000ff,0x63696c73,0x00000065,0x000a0005,0x00000108, + 0x44647053,0x736e776f,0x6c706d61,0x75762865,0x31753b32,0x3b31753b,0x753b3175,0x00003b31, + 0x00050005,0x00000103,0x6b726f77,0x756f7247,0x00444970,0x00080005,0x00000104,0x61636f6c, + 0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00040005,0x00000105,0x7370696d, + 0x00000000,0x00060005,0x00000106,0x576d756e,0x476b726f,0x70756f72,0x00000073,0x00040005, + 0x00000107,0x63696c73,0x00000065,0x000b0005,0x00000111,0x44647053,0x736e776f,0x6c706d61, + 0x75762865,0x31753b32,0x3b31753b,0x753b3175,0x75763b31,0x00003b32,0x00050005,0x0000010b, + 0x6b726f77,0x756f7247,0x00444970,0x00080005,0x0000010c,0x61636f6c,0x766e496c,0x7461636f, + 0x496e6f69,0x7865646e,0x00000000,0x00040005,0x0000010d,0x7370696d,0x00000000,0x00060005, + 0x0000010e,0x576d756e,0x476b726f,0x70756f72,0x00000073,0x00040005,0x0000010f,0x63696c73, + 0x00000065,0x00060005,0x00000110,0x6b726f77,0x756f7247,0x66664f70,0x00746573,0x00090005, + 0x00000118,0x706d6f43,0x41657475,0x456f7475,0x736f7078,0x28657275,0x3b337576,0x003b3175, + 0x00050005,0x00000116,0x6b726f57,0x756f7247,0x00644970,0x00070005,0x00000117,0x61636f4c, + 0x7268546c,0x49646165,0x7865646e,0x00000000,0x00040005,0x00000140,0x61726170,0x0000006d, + 0x00040005,0x00000142,0x61726170,0x0000006d,0x00040005,0x00000143,0x61726170,0x0000006d, + 0x00040005,0x00000146,0x61726170,0x0000006d,0x00040005,0x00000147,0x61726170,0x0000006d, + 0x00040005,0x00000149,0x61726170,0x0000006d,0x00040005,0x0000014b,0x61726170,0x0000006d, + 0x00040005,0x0000014d,0x61726170,0x0000006d,0x00040005,0x0000014e,0x61726170,0x0000006d, + 0x00040005,0x00000150,0x61726170,0x0000006d,0x00040005,0x00000152,0x61726170,0x0000006d, + 0x00040005,0x00000153,0x61726170,0x0000006d,0x00040005,0x00000155,0x61726170,0x0000006d, + 0x00040005,0x00000156,0x61726170,0x0000006d,0x00040005,0x00000157,0x61726170,0x0000006d, + 0x00070005,0x0000015c,0x53466263,0x50553352,0x4c414353,0x745f5245,0x00000000,0x00060006, + 0x0000015c,0x00000000,0x6e655269,0x53726564,0x00657a69,0x000a0006,0x0000015c,0x00000001, + 0x65725069,0x756f6976,0x61724673,0x6552656d,0x7265646e,0x657a6953,0x00000000,0x00070006, + 0x0000015c,0x00000002,0x73705569,0x656c6163,0x657a6953,0x00000000,0x000a0006,0x0000015c, + 0x00000003,0x65725069,0x756f6976,0x61724673,0x7055656d,0x6c616373,0x7a695365,0x00000065, + 0x00070006,0x0000015c,0x00000004,0x78614d69,0x646e6552,0x69537265,0x0000657a,0x00070006, + 0x0000015c,0x00000005,0x78614d69,0x63737055,0x53656c61,0x00657a69,0x00080006,0x0000015c, + 0x00000006,0x76654466,0x54656369,0x6569566f,0x70654477,0x00006874,0x00050006,0x0000015c, + 0x00000007,0x74694a66,0x00726574,0x00090006,0x0000015c,0x00000008,0x65725066,0x756f6976, + 0x61724673,0x694a656d,0x72657474,0x00000000,0x00080006,0x0000015c,0x00000009,0x746f4d66, + 0x566e6f69,0x6f746365,0x61635372,0x0000656c,0x00080006,0x0000015c,0x0000000a,0x776f4466, + 0x6163736e,0x6146656c,0x726f7463,0x00000000,0x000b0006,0x0000015c,0x0000000b,0x746f4d66, + 0x566e6f69,0x6f746365,0x74694a72,0x43726574,0x65636e61,0x74616c6c,0x006e6f69,0x00060006, + 0x0000015c,0x0000000c,0x6e615466,0x666c6148,0x00564f46,0x00090006,0x0000015c,0x0000000d, + 0x74694a66,0x53726574,0x65757165,0x4c65636e,0x74676e65,0x00000068,0x00060006,0x0000015c, + 0x0000000e,0x6c654466,0x69546174,0x0000656d,0x00080006,0x0000015c,0x0000000f,0x6c654466, + 0x72506174,0x70784565,0x7275736f,0x00000065,0x000a0006,0x0000015c,0x00000010,0x65695666, + 0x61705377,0x6f546563,0x6574654d,0x61467372,0x726f7463,0x00000000,0x00060006,0x0000015c, + 0x00000011,0x61724666,0x6e49656d,0x00786564,0x00070006,0x0000015c,0x00000012,0x6c655666, + 0x7469636f,0x63614679,0x00726f74,0x00080006,0x0000015c,0x00000013,0x61655266,0x76697463, + 0x73656e65,0x61635373,0x0000656c,0x00080006,0x0000015c,0x00000014,0x61685366,0x676e6964, + 0x6e616843,0x63536567,0x00656c61,0x000a0006,0x0000015c,0x00000015,0x63634166,0x6c756d75, + 0x6f697461,0x6464416e,0x65506465,0x61724672,0x0000656d,0x000b0006,0x0000015c,0x00000016, + 0x6e694d66,0x6f736944,0x756c6363,0x6e6f6973,0x75636341,0x616c756d,0x6e6f6974,0x00000000, + 0x00060005,0x0000015e,0x53466263,0x70553352,0x6c616373,0x00007265,0x00040005,0x0000016a, + 0x50536263,0x00745f44,0x00050006,0x0000016a,0x00000000,0x7370696d,0x00000000,0x00070006, + 0x0000016a,0x00000001,0x576d756e,0x476b726f,0x70756f72,0x00000073,0x00070006,0x0000016a, + 0x00000002,0x6b726f77,0x756f7247,0x66664f70,0x00746573,0x00060006,0x0000016a,0x00000003, + 0x646e6572,0x69537265,0x0000657a,0x00040005,0x0000016c,0x50536263,0x00000044,0x00070005, + 0x0000017f,0x61665f72,0x65687472,0x645f7473,0x68747065,0x00000000,0x00080005,0x00000189, + 0x665f7772,0x68747261,0x5f747365,0x74706564,0x696d5f68,0x00003170,0x00060005,0x0000018f, + 0x75635f72,0x6e657272,0x756c5f74,0x0000616d,0x00060005,0x00000198,0x665f7772,0x656d6172, + 0x666e695f,0x0000006f,0x00050005,0x000001a6,0x735f7772,0x6d5f6470,0x00307069,0x00050005, + 0x000001b0,0x735f7772,0x6d5f6470,0x00317069,0x00050005,0x000001ba,0x735f7772,0x6d5f6470, + 0x00327069,0x00050005,0x000001c4,0x735f7772,0x6d5f6470,0x00337069,0x00050005,0x000001cf, + 0x735f7772,0x6d5f6470,0x00347069,0x00050005,0x000001da,0x735f7772,0x6d5f6470,0x00357069, + 0x00080005,0x00000221,0x735f7772,0x675f6470,0x61626f6c,0x74615f6c,0x63696d6f,0x00000000, + 0x00040005,0x00000228,0x75736572,0x0000746c,0x00040005,0x0000022f,0x61726170,0x0000006d, + 0x00040005,0x00000232,0x61726170,0x0000006d,0x00040005,0x00000234,0x61726170,0x0000006d, + 0x00040005,0x00000235,0x61726170,0x0000006d,0x00040005,0x0000023b,0x61726170,0x0000006d, + 0x00040005,0x0000023e,0x61726170,0x0000006d,0x00040005,0x00000240,0x61726170,0x0000006d, + 0x00040005,0x00000241,0x61726170,0x0000006d,0x00060005,0x00000249,0x6f707845,0x65727573, + 0x314f5349,0x00003030,0x00040005,0x00000250,0x78616d4c,0x00000000,0x00040005,0x00000253, + 0x61726170,0x0000006d,0x00040005,0x00000254,0x61726170,0x0000006d,0x00050005,0x0000025e, + 0x43647073,0x746e756f,0x00007265,0x00040005,0x0000025f,0x61726170,0x0000006d,0x00060005, + 0x00000267,0x53785069,0x6c706d61,0x736f5065,0x00000000,0x00040005,0x0000026b,0x61726170, + 0x0000006d,0x00040005,0x0000026c,0x61726170,0x0000006d,0x00040005,0x0000026d,0x61726170, + 0x0000006d,0x00040005,0x0000026f,0x6d754c66,0x00000061,0x00040005,0x00000270,0x61726170, + 0x0000006d,0x00050005,0x00000273,0x676f4c66,0x616d754c,0x00000000,0x00040005,0x00000277, + 0x61726170,0x0000006d,0x00040005,0x00000278,0x61726170,0x0000006d,0x00080005,0x0000027a, + 0x72614666,0x73656874,0x70654474,0x6e496874,0x6574654d,0x00007372,0x00040005,0x0000027b, + 0x61726170,0x0000006d,0x00040005,0x0000027e,0x74754f66,0x00747570,0x00040005,0x00000289, + 0x61726170,0x0000006d,0x00040005,0x0000028b,0x61726170,0x0000006d,0x00040005,0x000002a1, + 0x61726170,0x0000006d,0x00040005,0x000002a3,0x61726170,0x0000006d,0x00040005,0x000002a6, + 0x61726170,0x0000006d,0x00040005,0x000002ae,0x61726170,0x0000006d,0x00040005,0x000002b0, + 0x61726170,0x0000006d,0x00050005,0x000002c0,0x6d617266,0x666e4965,0x0000006f,0x00060005, + 0x000002c2,0x65635366,0x7641656e,0x6d754c67,0x00000061,0x00060005,0x000002c5,0x65725066, + 0x676f4c76,0x616d754c,0x00000000,0x00050005,0x000002c8,0x676f4c66,0x616d754c,0x00000000, + 0x00040005,0x000002da,0x61726170,0x0000006d,0x00040005,0x000002db,0x61726170,0x0000006d, + 0x00040005,0x000002de,0x61726170,0x0000006d,0x00040005,0x000002e6,0x61726170,0x0000006d, + 0x00070005,0x000002ed,0x49647073,0x7265746e,0x6964656d,0x52657461,0x00000000,0x00070005, + 0x000002f3,0x49647073,0x7265746e,0x6964656d,0x47657461,0x00000000,0x00070005,0x000002f8, + 0x49647073,0x7265746e,0x6964656d,0x42657461,0x00000000,0x00070005,0x000002fd,0x49647073, + 0x7265746e,0x6964656d,0x41657461,0x00000000,0x00040005,0x0000031f,0x61726170,0x0000006d, + 0x00030005,0x00000329,0x00003076,0x00030005,0x0000032b,0x00003176,0x00030005,0x0000032e, + 0x00003276,0x00030005,0x00000331,0x00003376,0x00040005,0x00000334,0x61726170,0x0000006d, + 0x00040005,0x00000336,0x61726170,0x0000006d,0x00040005,0x00000338,0x61726170,0x0000006d, + 0x00040005,0x0000033a,0x61726170,0x0000006d,0x00030005,0x00000341,0x00003076,0x00040005, + 0x00000344,0x61726170,0x0000006d,0x00040005,0x00000345,0x61726170,0x0000006d,0x00030005, + 0x00000348,0x00003176,0x00040005,0x0000034b,0x61726170,0x0000006d,0x00040005,0x0000034c, + 0x61726170,0x0000006d,0x00030005,0x0000034f,0x00003276,0x00040005,0x00000352,0x61726170, + 0x0000006d,0x00040005,0x00000353,0x61726170,0x0000006d,0x00030005,0x00000356,0x00003376, + 0x00040005,0x00000359,0x61726170,0x0000006d,0x00040005,0x0000035a,0x61726170,0x0000006d, + 0x00040005,0x0000035d,0x61726170,0x0000006d,0x00040005,0x0000035f,0x61726170,0x0000006d, + 0x00040005,0x00000361,0x61726170,0x0000006d,0x00040005,0x00000363,0x61726170,0x0000006d, + 0x00040005,0x00000374,0x61726170,0x0000006d,0x00040005,0x00000375,0x61726170,0x0000006d, + 0x00040005,0x00000376,0x61726170,0x0000006d,0x00040005,0x00000377,0x61726170,0x0000006d, + 0x00040005,0x00000378,0x61726170,0x0000006d,0x00030005,0x0000037d,0x00003076,0x00040005, + 0x00000381,0x61726170,0x0000006d,0x00040005,0x00000382,0x61726170,0x0000006d,0x00030005, + 0x00000385,0x00003176,0x00040005,0x00000389,0x61726170,0x0000006d,0x00040005,0x0000038a, + 0x61726170,0x0000006d,0x00030005,0x0000038d,0x00003276,0x00040005,0x00000391,0x61726170, + 0x0000006d,0x00040005,0x00000392,0x61726170,0x0000006d,0x00030005,0x00000395,0x00003376, + 0x00040005,0x00000399,0x61726170,0x0000006d,0x00040005,0x0000039a,0x61726170,0x0000006d, + 0x00040005,0x0000039d,0x61726170,0x0000006d,0x00040005,0x0000039f,0x61726170,0x0000006d, + 0x00040005,0x000003a1,0x61726170,0x0000006d,0x00040005,0x000003a3,0x61726170,0x0000006d, + 0x00040005,0x000003b0,0x61726170,0x0000006d,0x00040005,0x000003b1,0x61726170,0x0000006d, + 0x00040005,0x000003b2,0x61726170,0x0000006d,0x00040005,0x000003b3,0x61726170,0x0000006d, + 0x00040005,0x000003b4,0x61726170,0x0000006d,0x00030005,0x000003b9,0x00786574,0x00030005, + 0x000003c7,0x00786970,0x00030005,0x000003d5,0x00000076,0x00040005,0x000003d8,0x61726170, + 0x0000006d,0x00040005,0x000003d9,0x61726170,0x0000006d,0x00040005,0x000003dd,0x61726170, + 0x0000006d,0x00040005,0x000003df,0x61726170,0x0000006d,0x00040005,0x000003e2,0x61726170, + 0x0000006d,0x00040005,0x000003e3,0x61726170,0x0000006d,0x00040005,0x00000400,0x61726170, + 0x0000006d,0x00040005,0x00000401,0x61726170,0x0000006d,0x00040005,0x00000405,0x61726170, + 0x0000006d,0x00040005,0x00000407,0x61726170,0x0000006d,0x00040005,0x0000040a,0x61726170, + 0x0000006d,0x00040005,0x0000040b,0x61726170,0x0000006d,0x00040005,0x00000428,0x61726170, + 0x0000006d,0x00040005,0x00000429,0x61726170,0x0000006d,0x00040005,0x0000042d,0x61726170, + 0x0000006d,0x00040005,0x0000042f,0x61726170,0x0000006d,0x00040005,0x00000432,0x61726170, + 0x0000006d,0x00040005,0x00000433,0x61726170,0x0000006d,0x00040005,0x00000453,0x61726170, + 0x0000006d,0x00040005,0x00000454,0x61726170,0x0000006d,0x00040005,0x00000458,0x61726170, + 0x0000006d,0x00040005,0x0000045a,0x61726170,0x0000006d,0x00040005,0x0000045d,0x61726170, + 0x0000006d,0x00040005,0x0000045e,0x61726170,0x0000006d,0x00040005,0x00000466,0x61726170, + 0x0000006d,0x00040005,0x0000046b,0x61726170,0x0000006d,0x00040005,0x00000470,0x61726170, + 0x0000006d,0x00040005,0x00000475,0x61726170,0x0000006d,0x00040005,0x0000048b,0x61726170, + 0x0000006d,0x00040005,0x0000048c,0x61726170,0x0000006d,0x00040005,0x0000048f,0x61726170, + 0x0000006d,0x00040005,0x00000490,0x61726170,0x0000006d,0x00040005,0x00000497,0x61726170, + 0x0000006d,0x00040005,0x00000498,0x61726170,0x0000006d,0x00040005,0x00000499,0x61726170, + 0x0000006d,0x00040005,0x000004ab,0x61726170,0x0000006d,0x00040005,0x000004ac,0x61726170, + 0x0000006d,0x00040005,0x000004af,0x61726170,0x0000006d,0x00040005,0x000004b0,0x61726170, + 0x0000006d,0x00040005,0x000004b8,0x61726170,0x0000006d,0x00040005,0x000004b9,0x61726170, + 0x0000006d,0x00040005,0x000004ba,0x61726170,0x0000006d,0x00040005,0x000004cb,0x61726170, + 0x0000006d,0x00040005,0x000004cc,0x61726170,0x0000006d,0x00040005,0x000004cf,0x61726170, + 0x0000006d,0x00040005,0x000004d0,0x61726170,0x0000006d,0x00040005,0x000004d8,0x61726170, + 0x0000006d,0x00040005,0x000004d9,0x61726170,0x0000006d,0x00040005,0x000004da,0x61726170, + 0x0000006d,0x00040005,0x000004ec,0x61726170,0x0000006d,0x00040005,0x000004ed,0x61726170, + 0x0000006d,0x00040005,0x000004f0,0x61726170,0x0000006d,0x00040005,0x000004f1,0x61726170, + 0x0000006d,0x00040005,0x000004fa,0x61726170,0x0000006d,0x00040005,0x000004fb,0x61726170, + 0x0000006d,0x00040005,0x000004fc,0x61726170,0x0000006d,0x00040005,0x00000500,0x61726170, + 0x0000006d,0x00040005,0x00000502,0x61726170,0x0000006d,0x00040005,0x00000504,0x61726170, + 0x0000006d,0x00040005,0x00000506,0x61726170,0x0000006d,0x00040005,0x00000508,0x61726170, + 0x0000006d,0x00040005,0x0000050a,0x61726170,0x0000006d,0x00030005,0x0000050d,0x00000076, + 0x00040005,0x0000050e,0x61726170,0x0000006d,0x00040005,0x00000510,0x61726170,0x0000006d, + 0x00040005,0x00000513,0x61726170,0x0000006d,0x00040005,0x00000527,0x61726170,0x0000006d, + 0x00040005,0x00000528,0x61726170,0x0000006d,0x00040005,0x0000052a,0x61726170,0x0000006d, + 0x00040005,0x0000052c,0x61726170,0x0000006d,0x00040005,0x00000534,0x61726170,0x0000006d, + 0x00040005,0x00000535,0x61726170,0x0000006d,0x00040005,0x00000537,0x61726170,0x0000006d, + 0x00030005,0x0000053e,0x00000076,0x00040005,0x00000546,0x61726170,0x0000006d,0x00040005, + 0x00000547,0x61726170,0x0000006d,0x00040005,0x00000549,0x61726170,0x0000006d,0x00040005, + 0x0000055d,0x61726170,0x0000006d,0x00040005,0x0000055e,0x61726170,0x0000006d,0x00040005, + 0x00000560,0x61726170,0x0000006d,0x00040005,0x00000562,0x61726170,0x0000006d,0x00040005, + 0x0000056c,0x61726170,0x0000006d,0x00040005,0x0000056d,0x61726170,0x0000006d,0x00040005, + 0x0000056e,0x61726170,0x0000006d,0x00030005,0x00000575,0x00000076,0x00040005,0x0000057c, + 0x61726170,0x0000006d,0x00040005,0x0000057d,0x61726170,0x0000006d,0x00040005,0x0000057f, + 0x61726170,0x0000006d,0x00040005,0x00000593,0x61726170,0x0000006d,0x00040005,0x00000594, + 0x61726170,0x0000006d,0x00040005,0x00000596,0x61726170,0x0000006d,0x00040005,0x00000598, + 0x61726170,0x0000006d,0x00040005,0x0000059f,0x61726170,0x0000006d,0x00040005,0x000005a0, + 0x61726170,0x0000006d,0x00040005,0x000005a1,0x61726170,0x0000006d,0x00030005,0x000005a8, + 0x00000076,0x00040005,0x000005a9,0x61726170,0x0000006d,0x00040005,0x000005ab,0x61726170, + 0x0000006d,0x00040005,0x000005ad,0x61726170,0x0000006d,0x00040005,0x000005b7,0x61726170, + 0x0000006d,0x00040005,0x000005b8,0x61726170,0x0000006d,0x00040005,0x000005ba,0x61726170, + 0x0000006d,0x00040005,0x000005bc,0x61726170,0x0000006d,0x00030005,0x000005bf,0x00786574, + 0x00030005,0x000005c9,0x00786970,0x00030005,0x000005d3,0x00003076,0x00040005,0x000005d6, + 0x61726170,0x0000006d,0x00040005,0x000005d7,0x61726170,0x0000006d,0x00040005,0x000005db, + 0x61726170,0x0000006d,0x00040005,0x000005dd,0x61726170,0x0000006d,0x00040005,0x000005df, + 0x61726170,0x0000006d,0x00040005,0x000005e0,0x61726170,0x0000006d,0x00030005,0x000005f5, + 0x00003176,0x00040005,0x000005f8,0x61726170,0x0000006d,0x00040005,0x000005f9,0x61726170, + 0x0000006d,0x00040005,0x000005fc,0x61726170,0x0000006d,0x00040005,0x000005fe,0x61726170, + 0x0000006d,0x00040005,0x00000600,0x61726170,0x0000006d,0x00040005,0x00000601,0x61726170, + 0x0000006d,0x00030005,0x00000616,0x00003276,0x00040005,0x00000619,0x61726170,0x0000006d, + 0x00040005,0x0000061a,0x61726170,0x0000006d,0x00040005,0x0000061d,0x61726170,0x0000006d, + 0x00040005,0x0000061f,0x61726170,0x0000006d,0x00040005,0x00000621,0x61726170,0x0000006d, + 0x00040005,0x00000622,0x61726170,0x0000006d,0x00030005,0x00000637,0x00003376,0x00040005, + 0x0000063a,0x61726170,0x0000006d,0x00040005,0x0000063b,0x61726170,0x0000006d,0x00040005, + 0x0000063e,0x61726170,0x0000006d,0x00040005,0x00000640,0x61726170,0x0000006d,0x00040005, + 0x00000642,0x61726170,0x0000006d,0x00040005,0x00000643,0x61726170,0x0000006d,0x00030005, + 0x0000064c,0x00000076,0x00040005,0x0000064d,0x61726170,0x0000006d,0x00040005,0x0000064f, + 0x61726170,0x0000006d,0x00040005,0x00000651,0x61726170,0x0000006d,0x00040005,0x00000653, + 0x61726170,0x0000006d,0x00040005,0x0000065b,0x61726170,0x0000006d,0x00040005,0x0000065c, + 0x61726170,0x0000006d,0x00040005,0x0000065e,0x61726170,0x0000006d,0x00040005,0x0000065f, + 0x61726170,0x0000006d,0x00040005,0x00000662,0x61726170,0x0000006d,0x00040005,0x00000664, + 0x61726170,0x0000006d,0x00040005,0x00000666,0x61726170,0x0000006d,0x00040005,0x00000670, + 0x61726170,0x0000006d,0x00040005,0x00000672,0x61726170,0x0000006d,0x00040005,0x00000674, + 0x61726170,0x0000006d,0x00040005,0x00000676,0x61726170,0x0000006d,0x00040005,0x00000678, + 0x61726170,0x0000006d,0x00040005,0x0000067a,0x61726170,0x0000006d,0x00040005,0x00000687, + 0x61726170,0x0000006d,0x00040005,0x00000689,0x61726170,0x0000006d,0x00040005,0x0000068b, + 0x61726170,0x0000006d,0x00040005,0x0000068d,0x61726170,0x0000006d,0x00040005,0x0000068f, + 0x61726170,0x0000006d,0x00040005,0x00000690,0x61726170,0x0000006d,0x00040005,0x0000069d, + 0x61726170,0x0000006d,0x00040005,0x0000069f,0x61726170,0x0000006d,0x00040005,0x000006a1, + 0x61726170,0x0000006d,0x00040005,0x000006a3,0x61726170,0x0000006d,0x00040005,0x000006a5, + 0x61726170,0x0000006d,0x00040005,0x000006a6,0x61726170,0x0000006d,0x00040005,0x000006b3, + 0x61726170,0x0000006d,0x00040005,0x000006b5,0x61726170,0x0000006d,0x00040005,0x000006b7, + 0x61726170,0x0000006d,0x00040005,0x000006b8,0x61726170,0x0000006d,0x00040005,0x000006bb, + 0x5f627573,0x00007978,0x00040005,0x000006be,0x61726170,0x0000006d,0x00030005,0x000006c0, + 0x00000078,0x00030005,0x000006c9,0x00000079,0x00040005,0x000006d1,0x61726170,0x0000006d, + 0x00040005,0x000006d3,0x61726170,0x0000006d,0x00040005,0x000006d5,0x61726170,0x0000006d, + 0x00040005,0x000006d7,0x61726170,0x0000006d,0x00040005,0x000006d9,0x61726170,0x0000006d, + 0x00040005,0x000006db,0x61726170,0x0000006d,0x00040005,0x000006de,0x61726170,0x0000006d, + 0x00040005,0x000006e0,0x61726170,0x0000006d,0x00040005,0x000006e2,0x61726170,0x0000006d, + 0x00040005,0x000006e4,0x61726170,0x0000006d,0x00040005,0x000006e6,0x61726170,0x0000006d, + 0x00040005,0x000006e7,0x61726170,0x0000006d,0x00040005,0x000006e9,0x61726170,0x0000006d, + 0x00040005,0x000006f1,0x61726170,0x0000006d,0x00040005,0x000006f3,0x61726170,0x0000006d, + 0x00040005,0x000006f5,0x61726170,0x0000006d,0x00040005,0x000006fb,0x61726170,0x0000006d, + 0x00040005,0x000006fe,0x61726170,0x0000006d,0x00040005,0x00000700,0x61726170,0x0000006d, + 0x00040005,0x00000702,0x61726170,0x0000006d,0x00040005,0x00000704,0x61726170,0x0000006d, + 0x00040005,0x00000707,0x61726170,0x0000006d,0x00040005,0x00000709,0x61726170,0x0000006d, + 0x00040005,0x0000070b,0x61726170,0x0000006d,0x00040005,0x0000070c,0x61726170,0x0000006d, + 0x00040005,0x0000070e,0x61726170,0x0000006d,0x00040005,0x0000070f,0x61726170,0x0000006d, + 0x00040005,0x00000711,0x61726170,0x0000006d,0x00040005,0x00000717,0x61726170,0x0000006d, + 0x00040005,0x00000718,0x61726170,0x0000006d,0x00040005,0x0000071a,0x61726170,0x0000006d, + 0x00040005,0x0000071c,0x61726170,0x0000006d,0x00040005,0x0000071e,0x61726170,0x0000006d, + 0x00040005,0x00000729,0x61726170,0x0000006d,0x00040005,0x0000072a,0x61726170,0x0000006d, + 0x00040005,0x0000072b,0x61726170,0x0000006d,0x00040005,0x0000072c,0x61726170,0x0000006d, + 0x00040005,0x0000072d,0x61726170,0x0000006d,0x00040005,0x0000072e,0x61726170,0x0000006d, + 0x00060005,0x00000731,0x575f6c67,0x476b726f,0x70756f72,0x00004449,0x00080005,0x00000733, + 0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163,0x6e496e6f,0x00786564,0x00040005,0x00000734, + 0x61726170,0x0000006d,0x00040005,0x00000736,0x61726170,0x0000006d,0x00060005,0x0000073d, + 0x6f505f73,0x43746e69,0x706d616c,0x00000000,0x00060005,0x0000073e,0x694c5f73,0x7261656e, + 0x6d616c43,0x00000070,0x00030047,0x0000015c,0x00000002,0x00050048,0x0000015c,0x00000000, + 0x00000023,0x00000000,0x00050048,0x0000015c,0x00000001,0x00000023,0x00000008,0x00050048, + 0x0000015c,0x00000002,0x00000023,0x00000010,0x00050048,0x0000015c,0x00000003,0x00000023, + 0x00000018,0x00050048,0x0000015c,0x00000004,0x00000023,0x00000020,0x00050048,0x0000015c, + 0x00000005,0x00000023,0x00000028,0x00050048,0x0000015c,0x00000006,0x00000023,0x00000030, + 0x00050048,0x0000015c,0x00000007,0x00000023,0x00000040,0x00050048,0x0000015c,0x00000008, + 0x00000023,0x00000048,0x00050048,0x0000015c,0x00000009,0x00000023,0x00000050,0x00050048, + 0x0000015c,0x0000000a,0x00000023,0x00000058,0x00050048,0x0000015c,0x0000000b,0x00000023, + 0x00000060,0x00050048,0x0000015c,0x0000000c,0x00000023,0x00000068,0x00050048,0x0000015c, + 0x0000000d,0x00000023,0x0000006c,0x00050048,0x0000015c,0x0000000e,0x00000023,0x00000070, + 0x00050048,0x0000015c,0x0000000f,0x00000023,0x00000074,0x00050048,0x0000015c,0x00000010, + 0x00000023,0x00000078,0x00050048,0x0000015c,0x00000011,0x00000023,0x0000007c,0x00050048, + 0x0000015c,0x00000012,0x00000023,0x00000080,0x00050048,0x0000015c,0x00000013,0x00000023, + 0x00000084,0x00050048,0x0000015c,0x00000014,0x00000023,0x00000088,0x00050048,0x0000015c, + 0x00000015,0x00000023,0x0000008c,0x00050048,0x0000015c,0x00000016,0x00000023,0x00000090, + 0x00040047,0x0000015e,0x00000021,0x0000000b,0x00040047,0x0000015e,0x00000022,0x00000000, + 0x00030047,0x0000016a,0x00000002,0x00050048,0x0000016a,0x00000000,0x00000023,0x00000000, + 0x00050048,0x0000016a,0x00000001,0x00000023,0x00000004,0x00050048,0x0000016a,0x00000002, + 0x00000023,0x00000008,0x00050048,0x0000016a,0x00000003,0x00000023,0x00000010,0x00040047, + 0x0000016c,0x00000021,0x0000000c,0x00040047,0x0000016c,0x00000022,0x00000000,0x00040047, + 0x0000017f,0x00000021,0x00000001,0x00040047,0x0000017f,0x00000022,0x00000000,0x00040047, + 0x00000189,0x00000021,0x0000000a,0x00040047,0x00000189,0x00000022,0x00000000,0x00040047, + 0x0000018f,0x00000021,0x00000000,0x00040047,0x0000018f,0x00000022,0x00000000,0x00040047, + 0x00000198,0x00000021,0x00000003,0x00040047,0x00000198,0x00000022,0x00000000,0x00040047, + 0x000001a6,0x00000021,0x00000004,0x00040047,0x000001a6,0x00000022,0x00000000,0x00040047, + 0x000001b0,0x00000021,0x00000005,0x00040047,0x000001b0,0x00000022,0x00000000,0x00040047, + 0x000001ba,0x00000021,0x00000006,0x00040047,0x000001ba,0x00000022,0x00000000,0x00040047, + 0x000001c4,0x00000021,0x00000007,0x00040047,0x000001c4,0x00000022,0x00000000,0x00040047, + 0x000001cf,0x00000021,0x00000008,0x00040047,0x000001cf,0x00000022,0x00000000,0x00030047, + 0x000001da,0x00000017,0x00040047,0x000001da,0x00000021,0x00000009,0x00040047,0x000001da, + 0x00000022,0x00000000,0x00030047,0x00000221,0x00000017,0x00040047,0x00000221,0x00000021, + 0x00000002,0x00040047,0x00000221,0x00000022,0x00000000,0x00040047,0x00000731,0x0000000b, + 0x0000001a,0x00040047,0x00000733,0x0000000b,0x0000001d,0x00040047,0x0000073d,0x00000021, + 0x000003e8,0x00040047,0x0000073d,0x00000022,0x00000000,0x00040047,0x0000073e,0x00000021, + 0x000003e9,0x00040047,0x0000073e,0x00000022,0x00000000,0x00040047,0x00000746,0x0000000b, + 0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015,0x00000006, + 0x00000020,0x00000000,0x00040020,0x00000007,0x00000007,0x00000006,0x00060021,0x00000008, + 0x00000006,0x00000007,0x00000007,0x00000007,0x00040015,0x00000013,0x00000020,0x00000001, + 0x00040020,0x00000014,0x00000007,0x00000013,0x00050021,0x00000015,0x00000013,0x00000014, + 0x00000014,0x00030016,0x0000001a,0x00000020,0x00040020,0x0000001b,0x00000007,0x0000001a, + 0x00050021,0x0000001c,0x0000001a,0x0000001b,0x0000001b,0x00040017,0x00000029,0x00000006, + 0x00000002,0x00040021,0x0000002a,0x00000029,0x00000007,0x00040017,0x0000002e,0x00000013, + 0x00000002,0x00030021,0x0000002f,0x0000002e,0x00030021,0x00000032,0x0000001a,0x00030021, + 0x00000035,0x00000006,0x00030021,0x0000003a,0x00000029,0x00040020,0x0000003d,0x00000007, + 0x0000002e,0x00040021,0x0000003e,0x0000001a,0x0000003d,0x00050021,0x00000042,0x00000002, + 0x0000003d,0x0000001b,0x00040017,0x0000004a,0x0000001a,0x00000004,0x00030021,0x0000004b, + 0x0000004a,0x00040020,0x0000004e,0x00000007,0x0000004a,0x00040021,0x0000004f,0x00000002, + 0x0000004e,0x00040017,0x00000053,0x0000001a,0x00000002,0x00050021,0x00000054,0x00000053, + 0x0000003d,0x00000007,0x00040020,0x00000059,0x00000007,0x00000053,0x00060021,0x0000005a, + 0x00000002,0x0000003d,0x00000059,0x00000007,0x00040021,0x00000060,0x00000002,0x00000007, + 0x00060021,0x00000066,0x0000002e,0x0000003d,0x0000003d,0x0000003d,0x00040021,0x0000006c, + 0x0000001a,0x0000001b,0x00050021,0x00000078,0x0000004a,0x00000059,0x00000007,0x00050021, + 0x0000007d,0x0000004a,0x0000003d,0x00000007,0x00070021,0x00000082,0x0000004a,0x0000004e, + 0x0000004e,0x0000004e,0x0000004e,0x00070021,0x00000089,0x00000002,0x0000003d,0x0000004e, + 0x00000007,0x00000007,0x00050021,0x00000090,0x0000004a,0x00000007,0x00000007,0x00060021, + 0x00000095,0x00000002,0x00000007,0x00000007,0x0000004e,0x00020014,0x0000009d,0x00060021, + 0x0000009e,0x0000009d,0x00000007,0x00000007,0x00000007,0x00040021,0x000000a4,0x0000004a, + 0x0000004e,0x00040020,0x000000a8,0x00000007,0x00000029,0x00080021,0x000000a9,0x0000004a, + 0x000000a8,0x000000a8,0x000000a8,0x000000a8,0x00000007,0x00050021,0x000000b1,0x0000004a, + 0x000000a8,0x00000007,0x00090021,0x000000c1,0x00000002,0x00000007,0x00000007,0x000000a8, + 0x00000007,0x00000007,0x00000007,0x00070021,0x000000ea,0x00000002,0x000000a8,0x00000007, + 0x00000007,0x00000007,0x00070021,0x000000f1,0x00000002,0x00000007,0x00000007,0x00000007, + 0x00000007,0x000a0021,0x000000f8,0x00000002,0x00000007,0x00000007,0x000000a8,0x00000007, + 0x00000007,0x00000007,0x00000007,0x00080021,0x00000102,0x00000002,0x000000a8,0x00000007, + 0x00000007,0x00000007,0x00000007,0x00090021,0x0000010a,0x00000002,0x000000a8,0x00000007, + 0x00000007,0x00000007,0x00000007,0x000000a8,0x00040017,0x00000113,0x00000006,0x00000003, + 0x00040020,0x00000114,0x00000007,0x00000113,0x00050021,0x00000115,0x00000002,0x00000114, + 0x00000007,0x0004002b,0x00000013,0x00000124,0x00000000,0x0004002b,0x00000006,0x0000013e, + 0x00000002,0x0004002b,0x00000006,0x0000013f,0x00000003,0x0004002b,0x00000006,0x00000145, + 0x00000001,0x0019001e,0x0000015c,0x0000002e,0x0000002e,0x0000002e,0x0000002e,0x0000002e, + 0x0000002e,0x0000004a,0x00000053,0x00000053,0x00000053,0x00000053,0x00000053,0x0000001a, + 0x0000001a,0x0000001a,0x0000001a,0x0000001a,0x0000001a,0x0000001a,0x0000001a,0x0000001a, + 0x0000001a,0x0000001a,0x00040020,0x0000015d,0x00000002,0x0000015c,0x0004003b,0x0000015d, + 0x0000015e,0x00000002,0x00040020,0x0000015f,0x00000002,0x0000002e,0x0004002b,0x00000013, + 0x00000164,0x0000000e,0x00040020,0x00000165,0x00000002,0x0000001a,0x0006001e,0x0000016a, + 0x00000006,0x00000006,0x00000029,0x00000029,0x00040020,0x0000016b,0x00000002,0x0000016a, + 0x0004003b,0x0000016b,0x0000016c,0x00000002,0x00040020,0x0000016d,0x00000002,0x00000006, + 0x0004002b,0x00000013,0x00000172,0x00000001,0x0004002b,0x00000013,0x00000177,0x00000002, + 0x00040020,0x00000178,0x00000002,0x00000029,0x00090019,0x0000017d,0x0000001a,0x00000001, + 0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x00040020,0x0000017e,0x00000000, + 0x0000017d,0x0004003b,0x0000017e,0x0000017f,0x00000000,0x0004002b,0x00000006,0x00000183, + 0x00000000,0x00090019,0x00000187,0x0000001a,0x00000001,0x00000000,0x00000000,0x00000000, + 0x00000002,0x00000009,0x00040020,0x00000188,0x00000000,0x00000187,0x0004003b,0x00000188, + 0x00000189,0x00000000,0x0004002b,0x0000001a,0x0000018d,0x00000000,0x0004003b,0x0000017e, + 0x0000018f,0x00000000,0x00090019,0x00000196,0x0000001a,0x00000001,0x00000000,0x00000000, + 0x00000000,0x00000002,0x00000001,0x00040020,0x00000197,0x00000000,0x00000196,0x0004003b, + 0x00000197,0x00000198,0x00000000,0x0005002c,0x0000002e,0x0000019a,0x00000124,0x00000124, + 0x00090019,0x000001a4,0x0000001a,0x00000001,0x00000000,0x00000000,0x00000000,0x00000002, + 0x00000007,0x00040020,0x000001a5,0x00000000,0x000001a4,0x0004003b,0x000001a5,0x000001a6, + 0x00000000,0x0004003b,0x000001a5,0x000001b0,0x00000000,0x0004003b,0x000001a5,0x000001ba, + 0x00000000,0x0004003b,0x000001a5,0x000001c4,0x00000000,0x0004002b,0x00000006,0x000001cb, + 0x00000004,0x0004003b,0x000001a5,0x000001cf,0x00000000,0x0004002b,0x00000006,0x000001d6, + 0x00000005,0x0004003b,0x000001a5,0x000001da,0x00000000,0x0005002c,0x00000053,0x000001e0, + 0x0000018d,0x0000018d,0x00090019,0x0000021f,0x00000006,0x00000001,0x00000000,0x00000000, + 0x00000000,0x00000002,0x00000021,0x00040020,0x00000220,0x00000000,0x0000021f,0x0004003b, + 0x00000220,0x00000221,0x00000000,0x00040020,0x00000222,0x0000000b,0x00000006,0x00040017, + 0x00000226,0x00000006,0x00000004,0x0007002c,0x00000226,0x00000227,0x00000183,0x00000183, + 0x00000183,0x00000183,0x0004002b,0x0000001a,0x0000024b,0x42c80000,0x0004002b,0x0000001a, + 0x0000024d,0x41480000,0x0004002b,0x0000001a,0x00000251,0x3f99999a,0x0004002b,0x0000001a, + 0x00000252,0x40000000,0x0004002b,0x0000001a,0x00000258,0x3f800000,0x00040020,0x0000025d, + 0x00000004,0x00000006,0x0004003b,0x0000025d,0x0000025e,0x00000004,0x0004002b,0x0000001a, + 0x00000274,0x387fda40,0x0007002c,0x0000004a,0x0000027f,0x0000018d,0x0000018d,0x0000018d, + 0x0000018d,0x0004002b,0x0000001a,0x00000299,0x3e800000,0x00040017,0x000002bb,0x0000009d, + 0x00000002,0x0004002b,0x0000001a,0x000002cc,0x461c4000,0x0004002b,0x00000006,0x000002e9, + 0x00000010,0x0004001c,0x000002ea,0x0000001a,0x000002e9,0x0004001c,0x000002eb,0x000002ea, + 0x000002e9,0x00040020,0x000002ec,0x00000004,0x000002eb,0x0004003b,0x000002ec,0x000002ed, + 0x00000004,0x00040020,0x000002f0,0x00000004,0x0000001a,0x0004003b,0x000002ec,0x000002f3, + 0x00000004,0x0004003b,0x000002ec,0x000002f8,0x00000004,0x0004003b,0x000002ec,0x000002fd, + 0x00000004,0x0004002b,0x00000006,0x00000319,0x00000d48,0x0004002b,0x00000006,0x0000031a, + 0x00000108,0x0005002c,0x00000029,0x00000369,0x00000183,0x00000183,0x0005002c,0x00000029, + 0x0000036c,0x00000183,0x00000145,0x0005002c,0x00000029,0x0000036f,0x00000145,0x00000183, + 0x0005002c,0x00000029,0x00000372,0x00000145,0x00000145,0x0004002b,0x00000006,0x000003bb, + 0x00000040,0x0004002b,0x00000006,0x000003c9,0x00000020,0x0004001c,0x000003d3,0x0000004a, + 0x000001cb,0x00040020,0x000003d4,0x00000007,0x000003d3,0x0004002b,0x00000013,0x00000450, + 0x00000003,0x0004002b,0x00000006,0x000004a3,0x00000008,0x0004002b,0x00000006,0x000005da, + 0x00000006,0x0004002b,0x00000006,0x00000647,0x00000007,0x0004002b,0x00000013,0x000006c4, + 0x00000006,0x0004002b,0x00000013,0x000006cd,0x00000007,0x00040020,0x00000730,0x00000001, + 0x00000113,0x0004003b,0x00000730,0x00000731,0x00000001,0x00040020,0x00000732,0x00000001, + 0x00000006,0x0004003b,0x00000732,0x00000733,0x00000001,0x0004002b,0x0000001a,0x00000739, + 0x477fe000,0x0004002b,0x0000001a,0x0000073a,0x37801002,0x0002001a,0x0000073b,0x00040020, + 0x0000073c,0x00000000,0x0000073b,0x0004003b,0x0000073c,0x0000073d,0x00000000,0x0004003b, + 0x0000073c,0x0000073e,0x00000000,0x0004002b,0x0000001a,0x0000073f,0x7f7fffff,0x0004002b, + 0x0000001a,0x00000740,0x00800000,0x0004002b,0x0000001a,0x00000741,0x3a1fe868,0x0004002b, + 0x0000001a,0x00000742,0x3d800000,0x0004002b,0x0000001a,0x00000743,0x3d3d70a4,0x0004002b, + 0x0000001a,0x00000744,0x3e400000,0x0004002b,0x00000006,0x00000745,0x00000100,0x0006002c, + 0x00000113,0x00000746,0x00000745,0x00000145,0x00000145,0x00050036,0x00000002,0x00000004, + 0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000114,0x00000734,0x00000007, + 0x0004003b,0x00000007,0x00000736,0x00000007,0x0004003d,0x00000113,0x00000735,0x00000731, + 0x0003003e,0x00000734,0x00000735,0x0004003d,0x00000006,0x00000737,0x00000733,0x0003003e, + 0x00000736,0x00000737,0x00060039,0x00000002,0x00000738,0x00000118,0x00000734,0x00000736, + 0x000100fd,0x00010038,0x00050036,0x00000006,0x0000000c,0x00000000,0x00000008,0x00030037, + 0x00000007,0x00000009,0x00030037,0x00000007,0x0000000a,0x00030037,0x00000007,0x0000000b, + 0x000200f8,0x0000000d,0x0004003d,0x00000006,0x0000011a,0x00000009,0x0004003d,0x00000006, + 0x0000011b,0x0000000a,0x0004007c,0x00000013,0x0000011c,0x0000011b,0x0004003d,0x00000006, + 0x0000011d,0x0000000b,0x0004007c,0x00000013,0x0000011e,0x0000011d,0x000600cb,0x00000006, + 0x0000011f,0x0000011a,0x0000011c,0x0000011e,0x000200fe,0x0000011f,0x00010038,0x00050036, + 0x00000006,0x00000011,0x00000000,0x00000008,0x00030037,0x00000007,0x0000000e,0x00030037, + 0x00000007,0x0000000f,0x00030037,0x00000007,0x00000010,0x000200f8,0x00000012,0x0004003d, + 0x00000006,0x00000122,0x0000000e,0x0004003d,0x00000006,0x00000123,0x0000000f,0x0004003d, + 0x00000006,0x00000125,0x00000010,0x0004007c,0x00000013,0x00000126,0x00000125,0x000700c9, + 0x00000006,0x00000127,0x00000122,0x00000123,0x00000124,0x00000126,0x000200fe,0x00000127, + 0x00010038,0x00050036,0x00000013,0x00000018,0x00000000,0x00000015,0x00030037,0x00000014, + 0x00000016,0x00030037,0x00000014,0x00000017,0x000200f8,0x00000019,0x0004003d,0x00000013, + 0x0000012a,0x00000016,0x0004003d,0x00000013,0x0000012b,0x00000017,0x0007000c,0x00000013, + 0x0000012c,0x00000001,0x00000027,0x0000012a,0x0000012b,0x000200fe,0x0000012c,0x00010038, + 0x00050036,0x0000001a,0x0000001f,0x00000000,0x0000001c,0x00030037,0x0000001b,0x0000001d, + 0x00030037,0x0000001b,0x0000001e,0x000200f8,0x00000020,0x0004003d,0x0000001a,0x0000012f, + 0x0000001d,0x0004003d,0x0000001a,0x00000130,0x0000001e,0x0007000c,0x0000001a,0x00000131, + 0x00000001,0x00000028,0x0000012f,0x00000130,0x000200fe,0x00000131,0x00010038,0x00050036, + 0x00000013,0x00000023,0x00000000,0x00000015,0x00030037,0x00000014,0x00000021,0x00030037, + 0x00000014,0x00000022,0x000200f8,0x00000024,0x0004003d,0x00000013,0x00000134,0x00000021, + 0x0004003d,0x00000013,0x00000135,0x00000022,0x0007000c,0x00000013,0x00000136,0x00000001, + 0x0000002a,0x00000134,0x00000135,0x000200fe,0x00000136,0x00010038,0x00050036,0x0000001a, + 0x00000027,0x00000000,0x0000001c,0x00030037,0x0000001b,0x00000025,0x00030037,0x0000001b, + 0x00000026,0x000200f8,0x00000028,0x0004003d,0x0000001a,0x00000139,0x00000025,0x0004003d, + 0x0000001a,0x0000013a,0x00000026,0x0007000c,0x0000001a,0x0000013b,0x00000001,0x0000001a, + 0x00000139,0x0000013a,0x000200fe,0x0000013b,0x00010038,0x00050036,0x00000029,0x0000002c, + 0x00000000,0x0000002a,0x00030037,0x00000007,0x0000002b,0x000200f8,0x0000002d,0x0004003b, + 0x00000007,0x00000140,0x00000007,0x0004003b,0x00000007,0x00000142,0x00000007,0x0004003b, + 0x00000007,0x00000143,0x00000007,0x0004003b,0x00000007,0x00000146,0x00000007,0x0004003b, + 0x00000007,0x00000147,0x00000007,0x0004003b,0x00000007,0x00000149,0x00000007,0x0004003b, + 0x00000007,0x0000014b,0x00000007,0x0004003b,0x00000007,0x0000014d,0x00000007,0x0004003b, + 0x00000007,0x0000014e,0x00000007,0x0004003b,0x00000007,0x00000150,0x00000007,0x0004003b, + 0x00000007,0x00000152,0x00000007,0x0004003b,0x00000007,0x00000153,0x00000007,0x0004003b, + 0x00000007,0x00000155,0x00000007,0x0004003b,0x00000007,0x00000156,0x00000007,0x0004003b, + 0x00000007,0x00000157,0x00000007,0x0004003d,0x00000006,0x00000141,0x0000002b,0x0003003e, + 0x00000140,0x00000141,0x0003003e,0x00000142,0x0000013e,0x0003003e,0x00000143,0x0000013f, + 0x00070039,0x00000006,0x00000144,0x0000000c,0x00000140,0x00000142,0x00000143,0x0003003e, + 0x00000146,0x00000144,0x0004003d,0x00000006,0x00000148,0x0000002b,0x0003003e,0x00000147, + 0x00000148,0x0003003e,0x00000149,0x00000145,0x00070039,0x00000006,0x0000014a,0x00000011, + 0x00000146,0x00000147,0x00000149,0x0004003d,0x00000006,0x0000014c,0x0000002b,0x0003003e, + 0x0000014b,0x0000014c,0x0003003e,0x0000014d,0x0000013f,0x0003003e,0x0000014e,0x0000013f, + 0x00070039,0x00000006,0x0000014f,0x0000000c,0x0000014b,0x0000014d,0x0000014e,0x0004003d, + 0x00000006,0x00000151,0x0000002b,0x0003003e,0x00000150,0x00000151,0x0003003e,0x00000152, + 0x00000145,0x0003003e,0x00000153,0x0000013e,0x00070039,0x00000006,0x00000154,0x0000000c, + 0x00000150,0x00000152,0x00000153,0x0003003e,0x00000155,0x0000014f,0x0003003e,0x00000156, + 0x00000154,0x0003003e,0x00000157,0x0000013e,0x00070039,0x00000006,0x00000158,0x00000011, + 0x00000155,0x00000156,0x00000157,0x00050050,0x00000029,0x00000159,0x0000014a,0x00000158, + 0x000200fe,0x00000159,0x00010038,0x00050036,0x0000002e,0x00000030,0x00000000,0x0000002f, + 0x000200f8,0x00000031,0x00050041,0x0000015f,0x00000160,0x0000015e,0x00000124,0x0004003d, + 0x0000002e,0x00000161,0x00000160,0x000200fe,0x00000161,0x00010038,0x00050036,0x0000001a, + 0x00000033,0x00000000,0x00000032,0x000200f8,0x00000034,0x00050041,0x00000165,0x00000166, + 0x0000015e,0x00000164,0x0004003d,0x0000001a,0x00000167,0x00000166,0x000200fe,0x00000167, + 0x00010038,0x00050036,0x00000006,0x00000036,0x00000000,0x00000035,0x000200f8,0x00000037, + 0x00050041,0x0000016d,0x0000016e,0x0000016c,0x00000124,0x0004003d,0x00000006,0x0000016f, + 0x0000016e,0x000200fe,0x0000016f,0x00010038,0x00050036,0x00000006,0x00000038,0x00000000, + 0x00000035,0x000200f8,0x00000039,0x00050041,0x0000016d,0x00000173,0x0000016c,0x00000172, + 0x0004003d,0x00000006,0x00000174,0x00000173,0x000200fe,0x00000174,0x00010038,0x00050036, + 0x00000029,0x0000003b,0x00000000,0x0000003a,0x000200f8,0x0000003c,0x00050041,0x00000178, + 0x00000179,0x0000016c,0x00000177,0x0004003d,0x00000029,0x0000017a,0x00000179,0x000200fe, + 0x0000017a,0x00010038,0x00050036,0x0000001a,0x00000040,0x00000000,0x0000003e,0x00030037, + 0x0000003d,0x0000003f,0x000200f8,0x00000041,0x0004003d,0x0000017d,0x00000180,0x0000017f, + 0x0004003d,0x0000002e,0x00000181,0x0000003f,0x0007005f,0x0000004a,0x00000182,0x00000180, + 0x00000181,0x00000002,0x00000124,0x00050051,0x0000001a,0x00000184,0x00000182,0x00000000, + 0x000200fe,0x00000184,0x00010038,0x00050036,0x00000002,0x00000045,0x00000000,0x00000042, + 0x00030037,0x0000003d,0x00000043,0x00030037,0x0000001b,0x00000044,0x000200f8,0x00000046, + 0x0004003d,0x00000187,0x0000018a,0x00000189,0x0004003d,0x0000002e,0x0000018b,0x00000043, + 0x0004003d,0x0000001a,0x0000018c,0x00000044,0x00070050,0x0000004a,0x0000018e,0x0000018c, + 0x0000018d,0x0000018d,0x0000018d,0x00040063,0x0000018a,0x0000018b,0x0000018e,0x000100fd, + 0x00010038,0x00050036,0x0000001a,0x00000048,0x00000000,0x0000003e,0x00030037,0x0000003d, + 0x00000047,0x000200f8,0x00000049,0x0004003d,0x0000017d,0x00000190,0x0000018f,0x0004003d, + 0x0000002e,0x00000191,0x00000047,0x0007005f,0x0000004a,0x00000192,0x00000190,0x00000191, + 0x00000002,0x00000124,0x00050051,0x0000001a,0x00000193,0x00000192,0x00000000,0x000200fe, + 0x00000193,0x00010038,0x00050036,0x0000004a,0x0000004c,0x00000000,0x0000004b,0x000200f8, + 0x0000004d,0x0004003d,0x00000196,0x00000199,0x00000198,0x00050062,0x0000004a,0x0000019b, + 0x00000199,0x0000019a,0x000200fe,0x0000019b,0x00010038,0x00050036,0x00000002,0x00000051, + 0x00000000,0x0000004f,0x00030037,0x0000004e,0x00000050,0x000200f8,0x00000052,0x0004003d, + 0x00000196,0x0000019e,0x00000198,0x0004003d,0x0000004a,0x0000019f,0x00000050,0x00040063, + 0x0000019e,0x0000019a,0x0000019f,0x000100fd,0x00010038,0x00050036,0x00000053,0x00000057, + 0x00000000,0x00000054,0x00030037,0x0000003d,0x00000055,0x00030037,0x00000007,0x00000056, + 0x000200f8,0x00000058,0x0004003d,0x00000006,0x000001a0,0x00000056,0x000500aa,0x0000009d, + 0x000001a1,0x000001a0,0x00000183,0x000300f7,0x000001a3,0x00000000,0x000400fa,0x000001a1, + 0x000001a2,0x000001a3,0x000200f8,0x000001a2,0x0004003d,0x000001a4,0x000001a7,0x000001a6, + 0x0004003d,0x0000002e,0x000001a8,0x00000055,0x00050062,0x0000004a,0x000001a9,0x000001a7, + 0x000001a8,0x0007004f,0x00000053,0x000001aa,0x000001a9,0x000001a9,0x00000000,0x00000001, + 0x000200fe,0x000001aa,0x000200f8,0x000001a3,0x0004003d,0x00000006,0x000001ac,0x00000056, + 0x000500aa,0x0000009d,0x000001ad,0x000001ac,0x00000145,0x000300f7,0x000001af,0x00000000, + 0x000400fa,0x000001ad,0x000001ae,0x000001af,0x000200f8,0x000001ae,0x0004003d,0x000001a4, + 0x000001b1,0x000001b0,0x0004003d,0x0000002e,0x000001b2,0x00000055,0x00050062,0x0000004a, + 0x000001b3,0x000001b1,0x000001b2,0x0007004f,0x00000053,0x000001b4,0x000001b3,0x000001b3, + 0x00000000,0x00000001,0x000200fe,0x000001b4,0x000200f8,0x000001af,0x0004003d,0x00000006, + 0x000001b6,0x00000056,0x000500aa,0x0000009d,0x000001b7,0x000001b6,0x0000013e,0x000300f7, + 0x000001b9,0x00000000,0x000400fa,0x000001b7,0x000001b8,0x000001b9,0x000200f8,0x000001b8, + 0x0004003d,0x000001a4,0x000001bb,0x000001ba,0x0004003d,0x0000002e,0x000001bc,0x00000055, + 0x00050062,0x0000004a,0x000001bd,0x000001bb,0x000001bc,0x0007004f,0x00000053,0x000001be, + 0x000001bd,0x000001bd,0x00000000,0x00000001,0x000200fe,0x000001be,0x000200f8,0x000001b9, + 0x0004003d,0x00000006,0x000001c0,0x00000056,0x000500aa,0x0000009d,0x000001c1,0x000001c0, + 0x0000013f,0x000300f7,0x000001c3,0x00000000,0x000400fa,0x000001c1,0x000001c2,0x000001c3, + 0x000200f8,0x000001c2,0x0004003d,0x000001a4,0x000001c5,0x000001c4,0x0004003d,0x0000002e, + 0x000001c6,0x00000055,0x00050062,0x0000004a,0x000001c7,0x000001c5,0x000001c6,0x0007004f, + 0x00000053,0x000001c8,0x000001c7,0x000001c7,0x00000000,0x00000001,0x000200fe,0x000001c8, + 0x000200f8,0x000001c3,0x0004003d,0x00000006,0x000001ca,0x00000056,0x000500aa,0x0000009d, + 0x000001cc,0x000001ca,0x000001cb,0x000300f7,0x000001ce,0x00000000,0x000400fa,0x000001cc, + 0x000001cd,0x000001ce,0x000200f8,0x000001cd,0x0004003d,0x000001a4,0x000001d0,0x000001cf, + 0x0004003d,0x0000002e,0x000001d1,0x00000055,0x00050062,0x0000004a,0x000001d2,0x000001d0, + 0x000001d1,0x0007004f,0x00000053,0x000001d3,0x000001d2,0x000001d2,0x00000000,0x00000001, + 0x000200fe,0x000001d3,0x000200f8,0x000001ce,0x0004003d,0x00000006,0x000001d5,0x00000056, + 0x000500aa,0x0000009d,0x000001d7,0x000001d5,0x000001d6,0x000300f7,0x000001d9,0x00000000, + 0x000400fa,0x000001d7,0x000001d8,0x000001d9,0x000200f8,0x000001d8,0x0004003d,0x000001a4, + 0x000001db,0x000001da,0x0004003d,0x0000002e,0x000001dc,0x00000055,0x00050062,0x0000004a, + 0x000001dd,0x000001db,0x000001dc,0x0007004f,0x00000053,0x000001de,0x000001dd,0x000001dd, + 0x00000000,0x00000001,0x000200fe,0x000001de,0x000200f8,0x000001d9,0x000200fe,0x000001e0, + 0x00010038,0x00050036,0x00000002,0x0000005e,0x00000000,0x0000005a,0x00030037,0x0000003d, + 0x0000005b,0x00030037,0x00000059,0x0000005c,0x00030037,0x00000007,0x0000005d,0x000200f8, + 0x0000005f,0x0004003d,0x00000006,0x000001e3,0x0000005d,0x000500aa,0x0000009d,0x000001e4, + 0x000001e3,0x00000183,0x000300f7,0x000001e6,0x00000000,0x000400fa,0x000001e4,0x000001e5, + 0x000001e6,0x000200f8,0x000001e5,0x0004003d,0x000001a4,0x000001e7,0x000001a6,0x0004003d, + 0x0000002e,0x000001e8,0x0000005b,0x0004003d,0x00000053,0x000001e9,0x0000005c,0x00050051, + 0x0000001a,0x000001ea,0x000001e9,0x00000000,0x00050051,0x0000001a,0x000001eb,0x000001e9, + 0x00000001,0x00070050,0x0000004a,0x000001ec,0x000001ea,0x000001eb,0x0000018d,0x0000018d, + 0x00040063,0x000001e7,0x000001e8,0x000001ec,0x000200f9,0x000001e6,0x000200f8,0x000001e6, + 0x0004003d,0x00000006,0x000001ed,0x0000005d,0x000500aa,0x0000009d,0x000001ee,0x000001ed, + 0x00000145,0x000300f7,0x000001f0,0x00000000,0x000400fa,0x000001ee,0x000001ef,0x000001f0, + 0x000200f8,0x000001ef,0x0004003d,0x000001a4,0x000001f1,0x000001b0,0x0004003d,0x0000002e, + 0x000001f2,0x0000005b,0x0004003d,0x00000053,0x000001f3,0x0000005c,0x00050051,0x0000001a, + 0x000001f4,0x000001f3,0x00000000,0x00050051,0x0000001a,0x000001f5,0x000001f3,0x00000001, + 0x00070050,0x0000004a,0x000001f6,0x000001f4,0x000001f5,0x0000018d,0x0000018d,0x00040063, + 0x000001f1,0x000001f2,0x000001f6,0x000200f9,0x000001f0,0x000200f8,0x000001f0,0x0004003d, + 0x00000006,0x000001f7,0x0000005d,0x000500aa,0x0000009d,0x000001f8,0x000001f7,0x0000013e, + 0x000300f7,0x000001fa,0x00000000,0x000400fa,0x000001f8,0x000001f9,0x000001fa,0x000200f8, + 0x000001f9,0x0004003d,0x000001a4,0x000001fb,0x000001ba,0x0004003d,0x0000002e,0x000001fc, + 0x0000005b,0x0004003d,0x00000053,0x000001fd,0x0000005c,0x00050051,0x0000001a,0x000001fe, + 0x000001fd,0x00000000,0x00050051,0x0000001a,0x000001ff,0x000001fd,0x00000001,0x00070050, + 0x0000004a,0x00000200,0x000001fe,0x000001ff,0x0000018d,0x0000018d,0x00040063,0x000001fb, + 0x000001fc,0x00000200,0x000200f9,0x000001fa,0x000200f8,0x000001fa,0x0004003d,0x00000006, + 0x00000201,0x0000005d,0x000500aa,0x0000009d,0x00000202,0x00000201,0x0000013f,0x000300f7, + 0x00000204,0x00000000,0x000400fa,0x00000202,0x00000203,0x00000204,0x000200f8,0x00000203, + 0x0004003d,0x000001a4,0x00000205,0x000001c4,0x0004003d,0x0000002e,0x00000206,0x0000005b, + 0x0004003d,0x00000053,0x00000207,0x0000005c,0x00050051,0x0000001a,0x00000208,0x00000207, + 0x00000000,0x00050051,0x0000001a,0x00000209,0x00000207,0x00000001,0x00070050,0x0000004a, + 0x0000020a,0x00000208,0x00000209,0x0000018d,0x0000018d,0x00040063,0x00000205,0x00000206, + 0x0000020a,0x000200f9,0x00000204,0x000200f8,0x00000204,0x0004003d,0x00000006,0x0000020b, + 0x0000005d,0x000500aa,0x0000009d,0x0000020c,0x0000020b,0x000001cb,0x000300f7,0x0000020e, + 0x00000000,0x000400fa,0x0000020c,0x0000020d,0x0000020e,0x000200f8,0x0000020d,0x0004003d, + 0x000001a4,0x0000020f,0x000001cf,0x0004003d,0x0000002e,0x00000210,0x0000005b,0x0004003d, + 0x00000053,0x00000211,0x0000005c,0x00050051,0x0000001a,0x00000212,0x00000211,0x00000000, + 0x00050051,0x0000001a,0x00000213,0x00000211,0x00000001,0x00070050,0x0000004a,0x00000214, + 0x00000212,0x00000213,0x0000018d,0x0000018d,0x00040063,0x0000020f,0x00000210,0x00000214, + 0x000200f9,0x0000020e,0x000200f8,0x0000020e,0x0004003d,0x00000006,0x00000215,0x0000005d, + 0x000500aa,0x0000009d,0x00000216,0x00000215,0x000001d6,0x000300f7,0x00000218,0x00000000, + 0x000400fa,0x00000216,0x00000217,0x00000218,0x000200f8,0x00000217,0x0004003d,0x000001a4, + 0x00000219,0x000001da,0x0004003d,0x0000002e,0x0000021a,0x0000005b,0x0004003d,0x00000053, + 0x0000021b,0x0000005c,0x00050051,0x0000001a,0x0000021c,0x0000021b,0x00000000,0x00050051, + 0x0000001a,0x0000021d,0x0000021b,0x00000001,0x00070050,0x0000004a,0x0000021e,0x0000021c, + 0x0000021d,0x0000018d,0x0000018d,0x00040063,0x00000219,0x0000021a,0x0000021e,0x000200f9, + 0x00000218,0x000200f8,0x00000218,0x000100fd,0x00010038,0x00050036,0x00000002,0x00000062, + 0x00000000,0x00000060,0x00030037,0x00000007,0x00000061,0x000200f8,0x00000063,0x0006003c, + 0x00000222,0x00000223,0x00000221,0x0000019a,0x00000183,0x000700ea,0x00000006,0x00000224, + 0x00000223,0x00000145,0x00000183,0x00000145,0x0003003e,0x00000061,0x00000224,0x000100fd, + 0x00010038,0x00050036,0x00000002,0x00000064,0x00000000,0x00000003,0x000200f8,0x00000065, + 0x0004003d,0x0000021f,0x00000225,0x00000221,0x00040063,0x00000225,0x0000019a,0x00000227, + 0x000100fd,0x00010038,0x00050036,0x0000002e,0x0000006a,0x00000000,0x00000066,0x00030037, + 0x0000003d,0x00000067,0x00030037,0x0000003d,0x00000068,0x00030037,0x0000003d,0x00000069, + 0x000200f8,0x0000006b,0x0004003b,0x0000003d,0x00000228,0x00000007,0x0004003b,0x00000014, + 0x0000022f,0x00000007,0x0004003b,0x00000014,0x00000232,0x00000007,0x0004003b,0x00000014, + 0x00000234,0x00000007,0x0004003b,0x00000014,0x00000235,0x00000007,0x0004003b,0x00000014, + 0x0000023b,0x00000007,0x0004003b,0x00000014,0x0000023e,0x00000007,0x0004003b,0x00000014, + 0x00000240,0x00000007,0x0004003b,0x00000014,0x00000241,0x00000007,0x0004003d,0x0000002e, + 0x00000229,0x00000067,0x0004003d,0x0000002e,0x0000022a,0x00000068,0x00050080,0x0000002e, + 0x0000022b,0x00000229,0x0000022a,0x0003003e,0x00000228,0x0000022b,0x00050041,0x00000014, + 0x0000022c,0x00000069,0x00000183,0x0004003d,0x00000013,0x0000022d,0x0000022c,0x00050082, + 0x00000013,0x0000022e,0x0000022d,0x00000172,0x00050041,0x00000014,0x00000230,0x00000228, + 0x00000183,0x0004003d,0x00000013,0x00000231,0x00000230,0x0003003e,0x0000022f,0x00000231, + 0x0003003e,0x00000232,0x0000022e,0x00060039,0x00000013,0x00000233,0x00000018,0x0000022f, + 0x00000232,0x0003003e,0x00000234,0x00000124,0x0003003e,0x00000235,0x00000233,0x00060039, + 0x00000013,0x00000236,0x00000023,0x00000234,0x00000235,0x00050041,0x00000014,0x00000237, + 0x00000228,0x00000183,0x0003003e,0x00000237,0x00000236,0x00050041,0x00000014,0x00000238, + 0x00000069,0x00000145,0x0004003d,0x00000013,0x00000239,0x00000238,0x00050082,0x00000013, + 0x0000023a,0x00000239,0x00000172,0x00050041,0x00000014,0x0000023c,0x00000228,0x00000145, + 0x0004003d,0x00000013,0x0000023d,0x0000023c,0x0003003e,0x0000023b,0x0000023d,0x0003003e, + 0x0000023e,0x0000023a,0x00060039,0x00000013,0x0000023f,0x00000018,0x0000023b,0x0000023e, + 0x0003003e,0x00000240,0x00000124,0x0003003e,0x00000241,0x0000023f,0x00060039,0x00000013, + 0x00000242,0x00000023,0x00000240,0x00000241,0x00050041,0x00000014,0x00000243,0x00000228, + 0x00000145,0x0003003e,0x00000243,0x00000242,0x0004003d,0x0000002e,0x00000244,0x00000228, + 0x000200fe,0x00000244,0x00010038,0x00050036,0x0000001a,0x0000006e,0x00000000,0x0000006c, + 0x00030037,0x0000001b,0x0000006d,0x000200f8,0x0000006f,0x0004003b,0x0000001b,0x00000249, + 0x00000007,0x0004003b,0x0000001b,0x00000250,0x00000007,0x0004003b,0x0000001b,0x00000253, + 0x00000007,0x0004003b,0x0000001b,0x00000254,0x00000007,0x0004003d,0x0000001a,0x00000247, + 0x0000006d,0x0006000c,0x0000001a,0x00000248,0x00000001,0x0000001b,0x00000247,0x0003003e, + 0x0000006d,0x00000248,0x0004003d,0x0000001a,0x0000024a,0x0000006d,0x00050085,0x0000001a, + 0x0000024c,0x0000024a,0x0000024b,0x00050088,0x0000001a,0x0000024e,0x0000024c,0x0000024d, + 0x0006000c,0x0000001a,0x0000024f,0x00000001,0x0000001e,0x0000024e,0x0003003e,0x00000249, + 0x0000024f,0x0003003e,0x00000253,0x00000252,0x0004003d,0x0000001a,0x00000255,0x00000249, + 0x0003003e,0x00000254,0x00000255,0x00060039,0x0000001a,0x00000256,0x00000027,0x00000253, + 0x00000254,0x00050085,0x0000001a,0x00000257,0x00000251,0x00000256,0x0003003e,0x00000250, + 0x00000257,0x0004003d,0x0000001a,0x00000259,0x00000250,0x00050088,0x0000001a,0x0000025a, + 0x00000258,0x00000259,0x000200fe,0x0000025a,0x00010038,0x00050036,0x00000002,0x00000071, + 0x00000000,0x00000060,0x00030037,0x00000007,0x00000070,0x000200f8,0x00000072,0x0004003b, + 0x00000007,0x0000025f,0x00000007,0x0004003d,0x00000006,0x00000260,0x0000025e,0x0003003e, + 0x0000025f,0x00000260,0x00050039,0x00000002,0x00000261,0x00000062,0x0000025f,0x0004003d, + 0x00000006,0x00000262,0x0000025f,0x0003003e,0x0000025e,0x00000262,0x000100fd,0x00010038, + 0x00050036,0x00000006,0x00000073,0x00000000,0x00000035,0x000200f8,0x00000074,0x0004003d, + 0x00000006,0x00000263,0x0000025e,0x000200fe,0x00000263,0x00010038,0x00050036,0x00000002, + 0x00000076,0x00000000,0x00000060,0x00030037,0x00000007,0x00000075,0x000200f8,0x00000077, + 0x00040039,0x00000002,0x00000266,0x00000064,0x000100fd,0x00010038,0x00050036,0x0000004a, + 0x0000007b,0x00000000,0x00000078,0x00030037,0x00000059,0x00000079,0x00030037,0x00000007, + 0x0000007a,0x000200f8,0x0000007c,0x0004003b,0x0000003d,0x00000267,0x00000007,0x0004003b, + 0x0000003d,0x0000026b,0x00000007,0x0004003b,0x0000003d,0x0000026c,0x00000007,0x0004003b, + 0x0000003d,0x0000026d,0x00000007,0x0004003b,0x0000001b,0x0000026f,0x00000007,0x0004003b, + 0x0000003d,0x00000270,0x00000007,0x0004003b,0x0000001b,0x00000273,0x00000007,0x0004003b, + 0x0000001b,0x00000277,0x00000007,0x0004003b,0x0000001b,0x00000278,0x00000007,0x0004003b, + 0x0000001b,0x0000027a,0x00000007,0x0004003b,0x0000003d,0x0000027b,0x00000007,0x0004003b, + 0x0000004e,0x0000027e,0x00000007,0x0004003d,0x00000053,0x00000268,0x00000079,0x0004006e, + 0x0000002e,0x00000269,0x00000268,0x00040039,0x0000002e,0x0000026a,0x00000030,0x0003003e, + 0x0000026b,0x00000269,0x0003003e,0x0000026c,0x0000019a,0x0003003e,0x0000026d,0x0000026a, + 0x00070039,0x0000002e,0x0000026e,0x0000006a,0x0000026b,0x0000026c,0x0000026d,0x0003003e, + 0x00000267,0x0000026e,0x0004003d,0x0000002e,0x00000271,0x00000267,0x0003003e,0x00000270, + 0x00000271,0x00050039,0x0000001a,0x00000272,0x00000048,0x00000270,0x0003003e,0x0000026f, + 0x00000272,0x0004003d,0x0000001a,0x00000275,0x0000026f,0x0006000c,0x0000001a,0x00000276, + 0x00000001,0x0000001c,0x00000275,0x0003003e,0x00000277,0x00000274,0x0003003e,0x00000278, + 0x00000276,0x00060039,0x0000001a,0x00000279,0x0000001f,0x00000277,0x00000278,0x0003003e, + 0x00000273,0x00000279,0x0004003d,0x0000002e,0x0000027c,0x00000267,0x0003003e,0x0000027b, + 0x0000027c,0x00050039,0x0000001a,0x0000027d,0x00000040,0x0000027b,0x0003003e,0x0000027a, + 0x0000027d,0x0003003e,0x0000027e,0x0000027f,0x0004003d,0x0000001a,0x00000280,0x00000273, + 0x00050041,0x0000001b,0x00000281,0x0000027e,0x00000183,0x0003003e,0x00000281,0x00000280, + 0x0004003d,0x0000001a,0x00000282,0x0000026f,0x00050041,0x0000001b,0x00000283,0x0000027e, + 0x00000145,0x0003003e,0x00000283,0x00000282,0x0004003d,0x0000001a,0x00000284,0x0000027a, + 0x00050041,0x0000001b,0x00000285,0x0000027e,0x0000013e,0x0003003e,0x00000285,0x00000284, + 0x0004003d,0x0000004a,0x00000286,0x0000027e,0x000200fe,0x00000286,0x00010038,0x00050036, + 0x0000004a,0x00000080,0x00000000,0x0000007d,0x00030037,0x0000003d,0x0000007e,0x00030037, + 0x00000007,0x0000007f,0x000200f8,0x00000081,0x0004003b,0x0000003d,0x00000289,0x00000007, + 0x0004003b,0x00000007,0x0000028b,0x00000007,0x0004003d,0x0000002e,0x0000028a,0x0000007e, + 0x0003003e,0x00000289,0x0000028a,0x0003003e,0x0000028b,0x000001d6,0x00060039,0x00000053, + 0x0000028c,0x00000057,0x00000289,0x0000028b,0x00050051,0x0000001a,0x0000028d,0x0000028c, + 0x00000000,0x00050051,0x0000001a,0x0000028e,0x0000028c,0x00000001,0x00070050,0x0000004a, + 0x0000028f,0x0000028d,0x0000028e,0x0000018d,0x0000018d,0x000200fe,0x0000028f,0x00010038, + 0x00050036,0x0000004a,0x00000087,0x00000000,0x00000082,0x00030037,0x0000004e,0x00000083, + 0x00030037,0x0000004e,0x00000084,0x00030037,0x0000004e,0x00000085,0x00030037,0x0000004e, + 0x00000086,0x000200f8,0x00000088,0x0004003d,0x0000004a,0x00000292,0x00000083,0x0004003d, + 0x0000004a,0x00000293,0x00000084,0x00050081,0x0000004a,0x00000294,0x00000292,0x00000293, + 0x0004003d,0x0000004a,0x00000295,0x00000085,0x00050081,0x0000004a,0x00000296,0x00000294, + 0x00000295,0x0004003d,0x0000004a,0x00000297,0x00000086,0x00050081,0x0000004a,0x00000298, + 0x00000296,0x00000297,0x0005008e,0x0000004a,0x0000029a,0x00000298,0x00000299,0x000200fe, + 0x0000029a,0x00010038,0x00050036,0x00000002,0x0000008e,0x00000000,0x00000089,0x00030037, + 0x0000003d,0x0000008a,0x00030037,0x0000004e,0x0000008b,0x00030037,0x00000007,0x0000008c, + 0x00030037,0x00000007,0x0000008d,0x000200f8,0x0000008f,0x0004003b,0x0000003d,0x000002a1, + 0x00000007,0x0004003b,0x00000059,0x000002a3,0x00000007,0x0004003b,0x00000007,0x000002a6, + 0x00000007,0x0004003b,0x0000003d,0x000002ae,0x00000007,0x0004003b,0x0000001b,0x000002b0, + 0x00000007,0x0004003b,0x0000004e,0x000002c0,0x00000007,0x0004003b,0x0000001b,0x000002c2, + 0x00000007,0x0004003b,0x0000001b,0x000002c5,0x00000007,0x0004003b,0x0000001b,0x000002c8, + 0x00000007,0x0004003b,0x0000001b,0x000002da,0x00000007,0x0004003b,0x0000001b,0x000002db, + 0x00000007,0x0004003b,0x0000001b,0x000002de,0x00000007,0x0004003b,0x0000004e,0x000002e6, + 0x00000007,0x0004003d,0x00000006,0x0000029d,0x0000008c,0x000500aa,0x0000009d,0x0000029e, + 0x0000029d,0x000001d6,0x000300f7,0x000002a0,0x00000000,0x000400fa,0x0000029e,0x0000029f, + 0x000002a9,0x000200f8,0x0000029f,0x0004003d,0x0000002e,0x000002a2,0x0000008a,0x0003003e, + 0x000002a1,0x000002a2,0x0004003d,0x0000004a,0x000002a4,0x0000008b,0x0007004f,0x00000053, + 0x000002a5,0x000002a4,0x000002a4,0x00000000,0x00000001,0x0003003e,0x000002a3,0x000002a5, + 0x0004003d,0x00000006,0x000002a7,0x0000008c,0x0003003e,0x000002a6,0x000002a7,0x00070039, + 0x00000002,0x000002a8,0x0000005e,0x000002a1,0x000002a3,0x000002a6,0x000200f9,0x000002a0, + 0x000200f8,0x000002a9,0x0004003d,0x00000006,0x000002aa,0x0000008c,0x000500aa,0x0000009d, + 0x000002ab,0x000002aa,0x00000183,0x000300f7,0x000002ad,0x00000000,0x000400fa,0x000002ab, + 0x000002ac,0x000002ad,0x000200f8,0x000002ac,0x0004003d,0x0000002e,0x000002af,0x0000008a, + 0x0003003e,0x000002ae,0x000002af,0x00050041,0x0000001b,0x000002b1,0x0000008b,0x0000013e, + 0x0004003d,0x0000001a,0x000002b2,0x000002b1,0x0003003e,0x000002b0,0x000002b2,0x00060039, + 0x00000002,0x000002b3,0x00000045,0x000002ae,0x000002b0,0x000200f9,0x000002ad,0x000200f8, + 0x000002ad,0x000200f9,0x000002a0,0x000200f8,0x000002a0,0x0004003d,0x00000006,0x000002b4, + 0x0000008c,0x00040039,0x00000006,0x000002b5,0x00000036,0x00050082,0x00000006,0x000002b6, + 0x000002b5,0x00000145,0x000500aa,0x0000009d,0x000002b7,0x000002b4,0x000002b6,0x000300f7, + 0x000002b9,0x00000000,0x000400fa,0x000002b7,0x000002b8,0x000002b9,0x000200f8,0x000002b8, + 0x0004003d,0x0000002e,0x000002ba,0x0000008a,0x000500aa,0x000002bb,0x000002bc,0x000002ba, + 0x0000019a,0x0004009b,0x0000009d,0x000002bd,0x000002bc,0x000300f7,0x000002bf,0x00000000, + 0x000400fa,0x000002bd,0x000002be,0x000002bf,0x000200f8,0x000002be,0x00040039,0x0000004a, + 0x000002c1,0x0000004c,0x0003003e,0x000002c0,0x000002c1,0x00050041,0x0000001b,0x000002c3, + 0x0000008b,0x00000145,0x0004003d,0x0000001a,0x000002c4,0x000002c3,0x0003003e,0x000002c2, + 0x000002c4,0x00050041,0x0000001b,0x000002c6,0x000002c0,0x00000145,0x0004003d,0x0000001a, + 0x000002c7,0x000002c6,0x0003003e,0x000002c5,0x000002c7,0x00050041,0x0000001b,0x000002c9, + 0x0000008b,0x00000183,0x0004003d,0x0000001a,0x000002ca,0x000002c9,0x0003003e,0x000002c8, + 0x000002ca,0x0004003d,0x0000001a,0x000002cb,0x000002c5,0x000500b8,0x0000009d,0x000002cd, + 0x000002cb,0x000002cc,0x000300f7,0x000002cf,0x00000000,0x000400fa,0x000002cd,0x000002ce, + 0x000002cf,0x000200f8,0x000002ce,0x0004003d,0x0000001a,0x000002d0,0x000002c5,0x0004003d, + 0x0000001a,0x000002d1,0x000002c8,0x0004003d,0x0000001a,0x000002d2,0x000002c5,0x00050083, + 0x0000001a,0x000002d3,0x000002d1,0x000002d2,0x00040039,0x0000001a,0x000002d4,0x00000033, + 0x0004007f,0x0000001a,0x000002d5,0x000002d4,0x0006000c,0x0000001a,0x000002d6,0x00000001, + 0x0000001b,0x000002d5,0x00050083,0x0000001a,0x000002d7,0x00000258,0x000002d6,0x00050085, + 0x0000001a,0x000002d8,0x000002d3,0x000002d7,0x00050081,0x0000001a,0x000002d9,0x000002d0, + 0x000002d8,0x0003003e,0x000002c8,0x000002d9,0x0003003e,0x000002da,0x0000018d,0x0004003d, + 0x0000001a,0x000002dc,0x000002c8,0x0003003e,0x000002db,0x000002dc,0x00060039,0x0000001a, + 0x000002dd,0x0000001f,0x000002da,0x000002db,0x0003003e,0x000002c8,0x000002dd,0x000200f9, + 0x000002cf,0x000200f8,0x000002cf,0x0004003d,0x0000001a,0x000002df,0x000002c8,0x0003003e, + 0x000002de,0x000002df,0x00050039,0x0000001a,0x000002e0,0x0000006e,0x000002de,0x00050041, + 0x0000001b,0x000002e1,0x000002c0,0x00000183,0x0003003e,0x000002e1,0x000002e0,0x0004003d, + 0x0000001a,0x000002e2,0x000002c8,0x00050041,0x0000001b,0x000002e3,0x000002c0,0x00000145, + 0x0003003e,0x000002e3,0x000002e2,0x0004003d,0x0000001a,0x000002e4,0x000002c2,0x00050041, + 0x0000001b,0x000002e5,0x000002c0,0x0000013e,0x0003003e,0x000002e5,0x000002e4,0x0004003d, + 0x0000004a,0x000002e7,0x000002c0,0x0003003e,0x000002e6,0x000002e7,0x00050039,0x00000002, + 0x000002e8,0x00000051,0x000002e6,0x000200f9,0x000002bf,0x000200f8,0x000002bf,0x000200f9, + 0x000002b9,0x000200f8,0x000002b9,0x000100fd,0x00010038,0x00050036,0x0000004a,0x00000093, + 0x00000000,0x00000090,0x00030037,0x00000007,0x00000091,0x00030037,0x00000007,0x00000092, + 0x000200f8,0x00000094,0x0004003d,0x00000006,0x000002ee,0x00000091,0x0004003d,0x00000006, + 0x000002ef,0x00000092,0x00060041,0x000002f0,0x000002f1,0x000002ed,0x000002ee,0x000002ef, + 0x0004003d,0x0000001a,0x000002f2,0x000002f1,0x0004003d,0x00000006,0x000002f4,0x00000091, + 0x0004003d,0x00000006,0x000002f5,0x00000092,0x00060041,0x000002f0,0x000002f6,0x000002f3, + 0x000002f4,0x000002f5,0x0004003d,0x0000001a,0x000002f7,0x000002f6,0x0004003d,0x00000006, + 0x000002f9,0x00000091,0x0004003d,0x00000006,0x000002fa,0x00000092,0x00060041,0x000002f0, + 0x000002fb,0x000002f8,0x000002f9,0x000002fa,0x0004003d,0x0000001a,0x000002fc,0x000002fb, + 0x0004003d,0x00000006,0x000002fe,0x00000091,0x0004003d,0x00000006,0x000002ff,0x00000092, + 0x00060041,0x000002f0,0x00000300,0x000002fd,0x000002fe,0x000002ff,0x0004003d,0x0000001a, + 0x00000301,0x00000300,0x00070050,0x0000004a,0x00000302,0x000002f2,0x000002f7,0x000002fc, + 0x00000301,0x000200fe,0x00000302,0x00010038,0x00050036,0x00000002,0x00000099,0x00000000, + 0x00000095,0x00030037,0x00000007,0x00000096,0x00030037,0x00000007,0x00000097,0x00030037, + 0x0000004e,0x00000098,0x000200f8,0x0000009a,0x0004003d,0x00000006,0x00000305,0x00000096, + 0x0004003d,0x00000006,0x00000306,0x00000097,0x00050041,0x0000001b,0x00000307,0x00000098, + 0x00000183,0x0004003d,0x0000001a,0x00000308,0x00000307,0x00060041,0x000002f0,0x00000309, + 0x000002ed,0x00000305,0x00000306,0x0003003e,0x00000309,0x00000308,0x0004003d,0x00000006, + 0x0000030a,0x00000096,0x0004003d,0x00000006,0x0000030b,0x00000097,0x00050041,0x0000001b, + 0x0000030c,0x00000098,0x00000145,0x0004003d,0x0000001a,0x0000030d,0x0000030c,0x00060041, + 0x000002f0,0x0000030e,0x000002f3,0x0000030a,0x0000030b,0x0003003e,0x0000030e,0x0000030d, + 0x0004003d,0x00000006,0x0000030f,0x00000096,0x0004003d,0x00000006,0x00000310,0x00000097, + 0x00050041,0x0000001b,0x00000311,0x00000098,0x0000013e,0x0004003d,0x0000001a,0x00000312, + 0x00000311,0x00060041,0x000002f0,0x00000313,0x000002f8,0x0000030f,0x00000310,0x0003003e, + 0x00000313,0x00000312,0x0004003d,0x00000006,0x00000314,0x00000096,0x0004003d,0x00000006, + 0x00000315,0x00000097,0x00050041,0x0000001b,0x00000316,0x00000098,0x0000013f,0x0004003d, + 0x0000001a,0x00000317,0x00000316,0x00060041,0x000002f0,0x00000318,0x000002fd,0x00000314, + 0x00000315,0x0003003e,0x00000318,0x00000317,0x000100fd,0x00010038,0x00050036,0x00000002, + 0x0000009b,0x00000000,0x00000003,0x000200f8,0x0000009c,0x000300e1,0x0000013e,0x00000319, + 0x000400e0,0x0000013e,0x0000013e,0x0000031a,0x000100fd,0x00010038,0x00050036,0x0000009d, + 0x000000a2,0x00000000,0x0000009e,0x00030037,0x00000007,0x0000009f,0x00030037,0x00000007, + 0x000000a0,0x00030037,0x00000007,0x000000a1,0x000200f8,0x000000a3,0x0004003b,0x00000007, + 0x0000031f,0x00000007,0x0004003d,0x00000006,0x0000031b,0x000000a0,0x000500aa,0x0000009d, + 0x0000031c,0x0000031b,0x00000183,0x000300f7,0x0000031e,0x00000000,0x000400fa,0x0000031c, + 0x0000031d,0x0000031e,0x000200f8,0x0000031d,0x0004003d,0x00000006,0x00000320,0x000000a1, + 0x0003003e,0x0000031f,0x00000320,0x00050039,0x00000002,0x00000321,0x00000071,0x0000031f, + 0x000200f9,0x0000031e,0x000200f8,0x0000031e,0x00040039,0x00000002,0x00000322,0x0000009b, + 0x00040039,0x00000006,0x00000323,0x00000073,0x0004003d,0x00000006,0x00000324,0x0000009f, + 0x00050082,0x00000006,0x00000325,0x00000324,0x00000145,0x000500ab,0x0000009d,0x00000326, + 0x00000323,0x00000325,0x000200fe,0x00000326,0x00010038,0x00050036,0x0000004a,0x000000a6, + 0x00000000,0x000000a4,0x00030037,0x0000004e,0x000000a5,0x000200f8,0x000000a7,0x0004003b, + 0x0000004e,0x00000329,0x00000007,0x0004003b,0x0000004e,0x0000032b,0x00000007,0x0004003b, + 0x0000004e,0x0000032e,0x00000007,0x0004003b,0x0000004e,0x00000331,0x00000007,0x0004003b, + 0x0000004e,0x00000334,0x00000007,0x0004003b,0x0000004e,0x00000336,0x00000007,0x0004003b, + 0x0000004e,0x00000338,0x00000007,0x0004003b,0x0000004e,0x0000033a,0x00000007,0x0004003d, + 0x0000004a,0x0000032a,0x000000a5,0x0003003e,0x00000329,0x0000032a,0x0004003d,0x0000004a, + 0x0000032c,0x000000a5,0x0006016e,0x0000004a,0x0000032d,0x0000013f,0x0000032c,0x00000183, + 0x0003003e,0x0000032b,0x0000032d,0x0004003d,0x0000004a,0x0000032f,0x000000a5,0x0006016e, + 0x0000004a,0x00000330,0x0000013f,0x0000032f,0x00000145,0x0003003e,0x0000032e,0x00000330, + 0x0004003d,0x0000004a,0x00000332,0x000000a5,0x0006016e,0x0000004a,0x00000333,0x0000013f, + 0x00000332,0x0000013e,0x0003003e,0x00000331,0x00000333,0x0004003d,0x0000004a,0x00000335, + 0x00000329,0x0003003e,0x00000334,0x00000335,0x0004003d,0x0000004a,0x00000337,0x0000032b, + 0x0003003e,0x00000336,0x00000337,0x0004003d,0x0000004a,0x00000339,0x0000032e,0x0003003e, + 0x00000338,0x00000339,0x0004003d,0x0000004a,0x0000033b,0x00000331,0x0003003e,0x0000033a, + 0x0000033b,0x00080039,0x0000004a,0x0000033c,0x00000087,0x00000334,0x00000336,0x00000338, + 0x0000033a,0x000200fe,0x0000033c,0x00010038,0x00050036,0x0000004a,0x000000af,0x00000000, + 0x000000a9,0x00030037,0x000000a8,0x000000aa,0x00030037,0x000000a8,0x000000ab,0x00030037, + 0x000000a8,0x000000ac,0x00030037,0x000000a8,0x000000ad,0x00030037,0x00000007,0x000000ae, + 0x000200f8,0x000000b0,0x0004003b,0x0000004e,0x00000341,0x00000007,0x0004003b,0x0000003d, + 0x00000344,0x00000007,0x0004003b,0x00000007,0x00000345,0x00000007,0x0004003b,0x0000004e, + 0x00000348,0x00000007,0x0004003b,0x0000003d,0x0000034b,0x00000007,0x0004003b,0x00000007, + 0x0000034c,0x00000007,0x0004003b,0x0000004e,0x0000034f,0x00000007,0x0004003b,0x0000003d, + 0x00000352,0x00000007,0x0004003b,0x00000007,0x00000353,0x00000007,0x0004003b,0x0000004e, + 0x00000356,0x00000007,0x0004003b,0x0000003d,0x00000359,0x00000007,0x0004003b,0x00000007, + 0x0000035a,0x00000007,0x0004003b,0x0000004e,0x0000035d,0x00000007,0x0004003b,0x0000004e, + 0x0000035f,0x00000007,0x0004003b,0x0000004e,0x00000361,0x00000007,0x0004003b,0x0000004e, + 0x00000363,0x00000007,0x0004003d,0x00000029,0x00000342,0x000000aa,0x0004007c,0x0000002e, + 0x00000343,0x00000342,0x0003003e,0x00000344,0x00000343,0x0004003d,0x00000006,0x00000346, + 0x000000ae,0x0003003e,0x00000345,0x00000346,0x00060039,0x0000004a,0x00000347,0x00000080, + 0x00000344,0x00000345,0x0003003e,0x00000341,0x00000347,0x0004003d,0x00000029,0x00000349, + 0x000000ab,0x0004007c,0x0000002e,0x0000034a,0x00000349,0x0003003e,0x0000034b,0x0000034a, + 0x0004003d,0x00000006,0x0000034d,0x000000ae,0x0003003e,0x0000034c,0x0000034d,0x00060039, + 0x0000004a,0x0000034e,0x00000080,0x0000034b,0x0000034c,0x0003003e,0x00000348,0x0000034e, + 0x0004003d,0x00000029,0x00000350,0x000000ac,0x0004007c,0x0000002e,0x00000351,0x00000350, + 0x0003003e,0x00000352,0x00000351,0x0004003d,0x00000006,0x00000354,0x000000ae,0x0003003e, + 0x00000353,0x00000354,0x00060039,0x0000004a,0x00000355,0x00000080,0x00000352,0x00000353, + 0x0003003e,0x0000034f,0x00000355,0x0004003d,0x00000029,0x00000357,0x000000ad,0x0004007c, + 0x0000002e,0x00000358,0x00000357,0x0003003e,0x00000359,0x00000358,0x0004003d,0x00000006, + 0x0000035b,0x000000ae,0x0003003e,0x0000035a,0x0000035b,0x00060039,0x0000004a,0x0000035c, + 0x00000080,0x00000359,0x0000035a,0x0003003e,0x00000356,0x0000035c,0x0004003d,0x0000004a, + 0x0000035e,0x00000341,0x0003003e,0x0000035d,0x0000035e,0x0004003d,0x0000004a,0x00000360, + 0x00000348,0x0003003e,0x0000035f,0x00000360,0x0004003d,0x0000004a,0x00000362,0x0000034f, + 0x0003003e,0x00000361,0x00000362,0x0004003d,0x0000004a,0x00000364,0x00000356,0x0003003e, + 0x00000363,0x00000364,0x00080039,0x0000004a,0x00000365,0x00000087,0x0000035d,0x0000035f, + 0x00000361,0x00000363,0x000200fe,0x00000365,0x00010038,0x00050036,0x0000004a,0x000000b4, + 0x00000000,0x000000b1,0x00030037,0x000000a8,0x000000b2,0x00030037,0x00000007,0x000000b3, + 0x000200f8,0x000000b5,0x0004003b,0x000000a8,0x00000374,0x00000007,0x0004003b,0x000000a8, + 0x00000375,0x00000007,0x0004003b,0x000000a8,0x00000376,0x00000007,0x0004003b,0x000000a8, + 0x00000377,0x00000007,0x0004003b,0x00000007,0x00000378,0x00000007,0x0004003d,0x00000029, + 0x00000368,0x000000b2,0x00050080,0x00000029,0x0000036a,0x00000368,0x00000369,0x0004003d, + 0x00000029,0x0000036b,0x000000b2,0x00050080,0x00000029,0x0000036d,0x0000036b,0x0000036c, + 0x0004003d,0x00000029,0x0000036e,0x000000b2,0x00050080,0x00000029,0x00000370,0x0000036e, + 0x0000036f,0x0004003d,0x00000029,0x00000371,0x000000b2,0x00050080,0x00000029,0x00000373, + 0x00000371,0x00000372,0x0003003e,0x00000374,0x0000036a,0x0003003e,0x00000375,0x0000036d, + 0x0003003e,0x00000376,0x00000370,0x0003003e,0x00000377,0x00000373,0x0004003d,0x00000006, + 0x00000379,0x000000b3,0x0003003e,0x00000378,0x00000379,0x00090039,0x0000004a,0x0000037a, + 0x000000af,0x00000374,0x00000375,0x00000376,0x00000377,0x00000378,0x000200fe,0x0000037a, + 0x00010038,0x00050036,0x0000004a,0x000000bb,0x00000000,0x000000a9,0x00030037,0x000000a8, + 0x000000b6,0x00030037,0x000000a8,0x000000b7,0x00030037,0x000000a8,0x000000b8,0x00030037, + 0x000000a8,0x000000b9,0x00030037,0x00000007,0x000000ba,0x000200f8,0x000000bc,0x0004003b, + 0x0000004e,0x0000037d,0x00000007,0x0004003b,0x00000059,0x00000381,0x00000007,0x0004003b, + 0x00000007,0x00000382,0x00000007,0x0004003b,0x0000004e,0x00000385,0x00000007,0x0004003b, + 0x00000059,0x00000389,0x00000007,0x0004003b,0x00000007,0x0000038a,0x00000007,0x0004003b, + 0x0000004e,0x0000038d,0x00000007,0x0004003b,0x00000059,0x00000391,0x00000007,0x0004003b, + 0x00000007,0x00000392,0x00000007,0x0004003b,0x0000004e,0x00000395,0x00000007,0x0004003b, + 0x00000059,0x00000399,0x00000007,0x0004003b,0x00000007,0x0000039a,0x00000007,0x0004003b, + 0x0000004e,0x0000039d,0x00000007,0x0004003b,0x0000004e,0x0000039f,0x00000007,0x0004003b, + 0x0000004e,0x000003a1,0x00000007,0x0004003b,0x0000004e,0x000003a3,0x00000007,0x0004003d, + 0x00000029,0x0000037e,0x000000b6,0x0004007c,0x0000002e,0x0000037f,0x0000037e,0x0004006f, + 0x00000053,0x00000380,0x0000037f,0x0003003e,0x00000381,0x00000380,0x0004003d,0x00000006, + 0x00000383,0x000000ba,0x0003003e,0x00000382,0x00000383,0x00060039,0x0000004a,0x00000384, + 0x0000007b,0x00000381,0x00000382,0x0003003e,0x0000037d,0x00000384,0x0004003d,0x00000029, + 0x00000386,0x000000b7,0x0004007c,0x0000002e,0x00000387,0x00000386,0x0004006f,0x00000053, + 0x00000388,0x00000387,0x0003003e,0x00000389,0x00000388,0x0004003d,0x00000006,0x0000038b, + 0x000000ba,0x0003003e,0x0000038a,0x0000038b,0x00060039,0x0000004a,0x0000038c,0x0000007b, + 0x00000389,0x0000038a,0x0003003e,0x00000385,0x0000038c,0x0004003d,0x00000029,0x0000038e, + 0x000000b8,0x0004007c,0x0000002e,0x0000038f,0x0000038e,0x0004006f,0x00000053,0x00000390, + 0x0000038f,0x0003003e,0x00000391,0x00000390,0x0004003d,0x00000006,0x00000393,0x000000ba, + 0x0003003e,0x00000392,0x00000393,0x00060039,0x0000004a,0x00000394,0x0000007b,0x00000391, + 0x00000392,0x0003003e,0x0000038d,0x00000394,0x0004003d,0x00000029,0x00000396,0x000000b9, + 0x0004007c,0x0000002e,0x00000397,0x00000396,0x0004006f,0x00000053,0x00000398,0x00000397, + 0x0003003e,0x00000399,0x00000398,0x0004003d,0x00000006,0x0000039b,0x000000ba,0x0003003e, + 0x0000039a,0x0000039b,0x00060039,0x0000004a,0x0000039c,0x0000007b,0x00000399,0x0000039a, + 0x0003003e,0x00000395,0x0000039c,0x0004003d,0x0000004a,0x0000039e,0x0000037d,0x0003003e, + 0x0000039d,0x0000039e,0x0004003d,0x0000004a,0x000003a0,0x00000385,0x0003003e,0x0000039f, + 0x000003a0,0x0004003d,0x0000004a,0x000003a2,0x0000038d,0x0003003e,0x000003a1,0x000003a2, + 0x0004003d,0x0000004a,0x000003a4,0x00000395,0x0003003e,0x000003a3,0x000003a4,0x00080039, + 0x0000004a,0x000003a5,0x00000087,0x0000039d,0x0000039f,0x000003a1,0x000003a3,0x000200fe, + 0x000003a5,0x00010038,0x00050036,0x0000004a,0x000000bf,0x00000000,0x000000b1,0x00030037, + 0x000000a8,0x000000bd,0x00030037,0x00000007,0x000000be,0x000200f8,0x000000c0,0x0004003b, + 0x000000a8,0x000003b0,0x00000007,0x0004003b,0x000000a8,0x000003b1,0x00000007,0x0004003b, + 0x000000a8,0x000003b2,0x00000007,0x0004003b,0x000000a8,0x000003b3,0x00000007,0x0004003b, + 0x00000007,0x000003b4,0x00000007,0x0004003d,0x00000029,0x000003a8,0x000000bd,0x00050080, + 0x00000029,0x000003a9,0x000003a8,0x00000369,0x0004003d,0x00000029,0x000003aa,0x000000bd, + 0x00050080,0x00000029,0x000003ab,0x000003aa,0x0000036c,0x0004003d,0x00000029,0x000003ac, + 0x000000bd,0x00050080,0x00000029,0x000003ad,0x000003ac,0x0000036f,0x0004003d,0x00000029, + 0x000003ae,0x000000bd,0x00050080,0x00000029,0x000003af,0x000003ae,0x00000372,0x0003003e, + 0x000003b0,0x000003a9,0x0003003e,0x000003b1,0x000003ab,0x0003003e,0x000003b2,0x000003ad, + 0x0003003e,0x000003b3,0x000003af,0x0004003d,0x00000006,0x000003b5,0x000000be,0x0003003e, + 0x000003b4,0x000003b5,0x00090039,0x0000004a,0x000003b6,0x000000bb,0x000003b0,0x000003b1, + 0x000003b2,0x000003b3,0x000003b4,0x000200fe,0x000003b6,0x00010038,0x00050036,0x00000002, + 0x000000c8,0x00000000,0x000000c1,0x00030037,0x00000007,0x000000c2,0x00030037,0x00000007, + 0x000000c3,0x00030037,0x000000a8,0x000000c4,0x00030037,0x00000007,0x000000c5,0x00030037, + 0x00000007,0x000000c6,0x00030037,0x00000007,0x000000c7,0x000200f8,0x000000c9,0x0004003b, + 0x0000003d,0x000003b9,0x00000007,0x0004003b,0x0000003d,0x000003c7,0x00000007,0x0004003b, + 0x000003d4,0x000003d5,0x00000007,0x0004003b,0x000000a8,0x000003d8,0x00000007,0x0004003b, + 0x00000007,0x000003d9,0x00000007,0x0004003b,0x0000003d,0x000003dd,0x00000007,0x0004003b, + 0x0000004e,0x000003df,0x00000007,0x0004003b,0x00000007,0x000003e2,0x00000007,0x0004003b, + 0x00000007,0x000003e3,0x00000007,0x0004003b,0x000000a8,0x00000400,0x00000007,0x0004003b, + 0x00000007,0x00000401,0x00000007,0x0004003b,0x0000003d,0x00000405,0x00000007,0x0004003b, + 0x0000004e,0x00000407,0x00000007,0x0004003b,0x00000007,0x0000040a,0x00000007,0x0004003b, + 0x00000007,0x0000040b,0x00000007,0x0004003b,0x000000a8,0x00000428,0x00000007,0x0004003b, + 0x00000007,0x00000429,0x00000007,0x0004003b,0x0000003d,0x0000042d,0x00000007,0x0004003b, + 0x0000004e,0x0000042f,0x00000007,0x0004003b,0x00000007,0x00000432,0x00000007,0x0004003b, + 0x00000007,0x00000433,0x00000007,0x0004003b,0x000000a8,0x00000453,0x00000007,0x0004003b, + 0x00000007,0x00000454,0x00000007,0x0004003b,0x0000003d,0x00000458,0x00000007,0x0004003b, + 0x0000004e,0x0000045a,0x00000007,0x0004003b,0x00000007,0x0000045d,0x00000007,0x0004003b, + 0x00000007,0x0000045e,0x00000007,0x0004003b,0x0000004e,0x00000466,0x00000007,0x0004003b, + 0x0000004e,0x0000046b,0x00000007,0x0004003b,0x0000004e,0x00000470,0x00000007,0x0004003b, + 0x0000004e,0x00000475,0x00000007,0x0004003b,0x0000003d,0x0000048b,0x00000007,0x0004003b, + 0x0000004e,0x0000048c,0x00000007,0x0004003b,0x00000007,0x0000048f,0x00000007,0x0004003b, + 0x00000007,0x00000490,0x00000007,0x0004003b,0x00000007,0x00000497,0x00000007,0x0004003b, + 0x00000007,0x00000498,0x00000007,0x0004003b,0x0000004e,0x00000499,0x00000007,0x0004003b, + 0x0000003d,0x000004ab,0x00000007,0x0004003b,0x0000004e,0x000004ac,0x00000007,0x0004003b, + 0x00000007,0x000004af,0x00000007,0x0004003b,0x00000007,0x000004b0,0x00000007,0x0004003b, + 0x00000007,0x000004b8,0x00000007,0x0004003b,0x00000007,0x000004b9,0x00000007,0x0004003b, + 0x0000004e,0x000004ba,0x00000007,0x0004003b,0x0000003d,0x000004cb,0x00000007,0x0004003b, + 0x0000004e,0x000004cc,0x00000007,0x0004003b,0x00000007,0x000004cf,0x00000007,0x0004003b, + 0x00000007,0x000004d0,0x00000007,0x0004003b,0x00000007,0x000004d8,0x00000007,0x0004003b, + 0x00000007,0x000004d9,0x00000007,0x0004003b,0x0000004e,0x000004da,0x00000007,0x0004003b, + 0x0000003d,0x000004ec,0x00000007,0x0004003b,0x0000004e,0x000004ed,0x00000007,0x0004003b, + 0x00000007,0x000004f0,0x00000007,0x0004003b,0x00000007,0x000004f1,0x00000007,0x0004003b, + 0x00000007,0x000004fa,0x00000007,0x0004003b,0x00000007,0x000004fb,0x00000007,0x0004003b, + 0x0000004e,0x000004fc,0x00000007,0x0004003d,0x00000029,0x000003ba,0x000000c4,0x00050050, + 0x00000029,0x000003bc,0x000003bb,0x000003bb,0x00050084,0x00000029,0x000003bd,0x000003ba, + 0x000003bc,0x0004007c,0x0000002e,0x000003be,0x000003bd,0x0004003d,0x00000006,0x000003bf, + 0x000000c2,0x00050084,0x00000006,0x000003c0,0x000003bf,0x0000013e,0x0004007c,0x00000013, + 0x000003c1,0x000003c0,0x0004003d,0x00000006,0x000003c2,0x000000c3,0x00050084,0x00000006, + 0x000003c3,0x000003c2,0x0000013e,0x0004007c,0x00000013,0x000003c4,0x000003c3,0x00050050, + 0x0000002e,0x000003c5,0x000003c1,0x000003c4,0x00050080,0x0000002e,0x000003c6,0x000003be, + 0x000003c5,0x0003003e,0x000003b9,0x000003c6,0x0004003d,0x00000029,0x000003c8,0x000000c4, + 0x00050050,0x00000029,0x000003ca,0x000003c9,0x000003c9,0x00050084,0x00000029,0x000003cb, + 0x000003c8,0x000003ca,0x0004007c,0x0000002e,0x000003cc,0x000003cb,0x0004003d,0x00000006, + 0x000003cd,0x000000c2,0x0004007c,0x00000013,0x000003ce,0x000003cd,0x0004003d,0x00000006, + 0x000003cf,0x000000c3,0x0004007c,0x00000013,0x000003d0,0x000003cf,0x00050050,0x0000002e, + 0x000003d1,0x000003ce,0x000003d0,0x00050080,0x0000002e,0x000003d2,0x000003cc,0x000003d1, + 0x0003003e,0x000003c7,0x000003d2,0x0004003d,0x0000002e,0x000003d6,0x000003b9,0x0004007c, + 0x00000029,0x000003d7,0x000003d6,0x0003003e,0x000003d8,0x000003d7,0x0004003d,0x00000006, + 0x000003da,0x000000c7,0x0003003e,0x000003d9,0x000003da,0x00060039,0x0000004a,0x000003db, + 0x000000bf,0x000003d8,0x000003d9,0x00050041,0x0000004e,0x000003dc,0x000003d5,0x00000124, + 0x0003003e,0x000003dc,0x000003db,0x0004003d,0x0000002e,0x000003de,0x000003c7,0x0003003e, + 0x000003dd,0x000003de,0x00050041,0x0000004e,0x000003e0,0x000003d5,0x00000124,0x0004003d, + 0x0000004a,0x000003e1,0x000003e0,0x0003003e,0x000003df,0x000003e1,0x0003003e,0x000003e2, + 0x00000183,0x0004003d,0x00000006,0x000003e4,0x000000c7,0x0003003e,0x000003e3,0x000003e4, + 0x00080039,0x00000002,0x000003e5,0x0000008e,0x000003dd,0x000003df,0x000003e2,0x000003e3, + 0x0004003d,0x00000029,0x000003e6,0x000000c4,0x00050050,0x00000029,0x000003e7,0x000003bb, + 0x000003bb,0x00050084,0x00000029,0x000003e8,0x000003e6,0x000003e7,0x0004007c,0x0000002e, + 0x000003e9,0x000003e8,0x0004003d,0x00000006,0x000003ea,0x000000c2,0x00050084,0x00000006, + 0x000003eb,0x000003ea,0x0000013e,0x00050080,0x00000006,0x000003ec,0x000003eb,0x000003c9, + 0x0004007c,0x00000013,0x000003ed,0x000003ec,0x0004003d,0x00000006,0x000003ee,0x000000c3, + 0x00050084,0x00000006,0x000003ef,0x000003ee,0x0000013e,0x0004007c,0x00000013,0x000003f0, + 0x000003ef,0x00050050,0x0000002e,0x000003f1,0x000003ed,0x000003f0,0x00050080,0x0000002e, + 0x000003f2,0x000003e9,0x000003f1,0x0003003e,0x000003b9,0x000003f2,0x0004003d,0x00000029, + 0x000003f3,0x000000c4,0x00050050,0x00000029,0x000003f4,0x000003c9,0x000003c9,0x00050084, + 0x00000029,0x000003f5,0x000003f3,0x000003f4,0x0004007c,0x0000002e,0x000003f6,0x000003f5, + 0x0004003d,0x00000006,0x000003f7,0x000000c2,0x00050080,0x00000006,0x000003f8,0x000003f7, + 0x000002e9,0x0004007c,0x00000013,0x000003f9,0x000003f8,0x0004003d,0x00000006,0x000003fa, + 0x000000c3,0x0004007c,0x00000013,0x000003fb,0x000003fa,0x00050050,0x0000002e,0x000003fc, + 0x000003f9,0x000003fb,0x00050080,0x0000002e,0x000003fd,0x000003f6,0x000003fc,0x0003003e, + 0x000003c7,0x000003fd,0x0004003d,0x0000002e,0x000003fe,0x000003b9,0x0004007c,0x00000029, + 0x000003ff,0x000003fe,0x0003003e,0x00000400,0x000003ff,0x0004003d,0x00000006,0x00000402, + 0x000000c7,0x0003003e,0x00000401,0x00000402,0x00060039,0x0000004a,0x00000403,0x000000bf, + 0x00000400,0x00000401,0x00050041,0x0000004e,0x00000404,0x000003d5,0x00000172,0x0003003e, + 0x00000404,0x00000403,0x0004003d,0x0000002e,0x00000406,0x000003c7,0x0003003e,0x00000405, + 0x00000406,0x00050041,0x0000004e,0x00000408,0x000003d5,0x00000172,0x0004003d,0x0000004a, + 0x00000409,0x00000408,0x0003003e,0x00000407,0x00000409,0x0003003e,0x0000040a,0x00000183, + 0x0004003d,0x00000006,0x0000040c,0x000000c7,0x0003003e,0x0000040b,0x0000040c,0x00080039, + 0x00000002,0x0000040d,0x0000008e,0x00000405,0x00000407,0x0000040a,0x0000040b,0x0004003d, + 0x00000029,0x0000040e,0x000000c4,0x00050050,0x00000029,0x0000040f,0x000003bb,0x000003bb, + 0x00050084,0x00000029,0x00000410,0x0000040e,0x0000040f,0x0004007c,0x0000002e,0x00000411, + 0x00000410,0x0004003d,0x00000006,0x00000412,0x000000c2,0x00050084,0x00000006,0x00000413, + 0x00000412,0x0000013e,0x0004007c,0x00000013,0x00000414,0x00000413,0x0004003d,0x00000006, + 0x00000415,0x000000c3,0x00050084,0x00000006,0x00000416,0x00000415,0x0000013e,0x00050080, + 0x00000006,0x00000417,0x00000416,0x000003c9,0x0004007c,0x00000013,0x00000418,0x00000417, + 0x00050050,0x0000002e,0x00000419,0x00000414,0x00000418,0x00050080,0x0000002e,0x0000041a, + 0x00000411,0x00000419,0x0003003e,0x000003b9,0x0000041a,0x0004003d,0x00000029,0x0000041b, + 0x000000c4,0x00050050,0x00000029,0x0000041c,0x000003c9,0x000003c9,0x00050084,0x00000029, + 0x0000041d,0x0000041b,0x0000041c,0x0004007c,0x0000002e,0x0000041e,0x0000041d,0x0004003d, + 0x00000006,0x0000041f,0x000000c2,0x0004007c,0x00000013,0x00000420,0x0000041f,0x0004003d, + 0x00000006,0x00000421,0x000000c3,0x00050080,0x00000006,0x00000422,0x00000421,0x000002e9, + 0x0004007c,0x00000013,0x00000423,0x00000422,0x00050050,0x0000002e,0x00000424,0x00000420, + 0x00000423,0x00050080,0x0000002e,0x00000425,0x0000041e,0x00000424,0x0003003e,0x000003c7, + 0x00000425,0x0004003d,0x0000002e,0x00000426,0x000003b9,0x0004007c,0x00000029,0x00000427, + 0x00000426,0x0003003e,0x00000428,0x00000427,0x0004003d,0x00000006,0x0000042a,0x000000c7, + 0x0003003e,0x00000429,0x0000042a,0x00060039,0x0000004a,0x0000042b,0x000000bf,0x00000428, + 0x00000429,0x00050041,0x0000004e,0x0000042c,0x000003d5,0x00000177,0x0003003e,0x0000042c, + 0x0000042b,0x0004003d,0x0000002e,0x0000042e,0x000003c7,0x0003003e,0x0000042d,0x0000042e, + 0x00050041,0x0000004e,0x00000430,0x000003d5,0x00000177,0x0004003d,0x0000004a,0x00000431, + 0x00000430,0x0003003e,0x0000042f,0x00000431,0x0003003e,0x00000432,0x00000183,0x0004003d, + 0x00000006,0x00000434,0x000000c7,0x0003003e,0x00000433,0x00000434,0x00080039,0x00000002, + 0x00000435,0x0000008e,0x0000042d,0x0000042f,0x00000432,0x00000433,0x0004003d,0x00000029, + 0x00000436,0x000000c4,0x00050050,0x00000029,0x00000437,0x000003bb,0x000003bb,0x00050084, + 0x00000029,0x00000438,0x00000436,0x00000437,0x0004007c,0x0000002e,0x00000439,0x00000438, + 0x0004003d,0x00000006,0x0000043a,0x000000c2,0x00050084,0x00000006,0x0000043b,0x0000043a, + 0x0000013e,0x00050080,0x00000006,0x0000043c,0x0000043b,0x000003c9,0x0004007c,0x00000013, + 0x0000043d,0x0000043c,0x0004003d,0x00000006,0x0000043e,0x000000c3,0x00050084,0x00000006, + 0x0000043f,0x0000043e,0x0000013e,0x00050080,0x00000006,0x00000440,0x0000043f,0x000003c9, + 0x0004007c,0x00000013,0x00000441,0x00000440,0x00050050,0x0000002e,0x00000442,0x0000043d, + 0x00000441,0x00050080,0x0000002e,0x00000443,0x00000439,0x00000442,0x0003003e,0x000003b9, + 0x00000443,0x0004003d,0x00000029,0x00000444,0x000000c4,0x00050050,0x00000029,0x00000445, + 0x000003c9,0x000003c9,0x00050084,0x00000029,0x00000446,0x00000444,0x00000445,0x0004007c, + 0x0000002e,0x00000447,0x00000446,0x0004003d,0x00000006,0x00000448,0x000000c2,0x00050080, + 0x00000006,0x00000449,0x00000448,0x000002e9,0x0004007c,0x00000013,0x0000044a,0x00000449, + 0x0004003d,0x00000006,0x0000044b,0x000000c3,0x00050080,0x00000006,0x0000044c,0x0000044b, + 0x000002e9,0x0004007c,0x00000013,0x0000044d,0x0000044c,0x00050050,0x0000002e,0x0000044e, + 0x0000044a,0x0000044d,0x00050080,0x0000002e,0x0000044f,0x00000447,0x0000044e,0x0003003e, + 0x000003c7,0x0000044f,0x0004003d,0x0000002e,0x00000451,0x000003b9,0x0004007c,0x00000029, + 0x00000452,0x00000451,0x0003003e,0x00000453,0x00000452,0x0004003d,0x00000006,0x00000455, + 0x000000c7,0x0003003e,0x00000454,0x00000455,0x00060039,0x0000004a,0x00000456,0x000000bf, + 0x00000453,0x00000454,0x00050041,0x0000004e,0x00000457,0x000003d5,0x00000450,0x0003003e, + 0x00000457,0x00000456,0x0004003d,0x0000002e,0x00000459,0x000003c7,0x0003003e,0x00000458, + 0x00000459,0x00050041,0x0000004e,0x0000045b,0x000003d5,0x00000450,0x0004003d,0x0000004a, + 0x0000045c,0x0000045b,0x0003003e,0x0000045a,0x0000045c,0x0003003e,0x0000045d,0x00000183, + 0x0004003d,0x00000006,0x0000045f,0x000000c7,0x0003003e,0x0000045e,0x0000045f,0x00080039, + 0x00000002,0x00000460,0x0000008e,0x00000458,0x0000045a,0x0000045d,0x0000045e,0x0004003d, + 0x00000006,0x00000461,0x000000c6,0x000500b2,0x0000009d,0x00000462,0x00000461,0x00000145, + 0x000300f7,0x00000464,0x00000000,0x000400fa,0x00000462,0x00000463,0x00000464,0x000200f8, + 0x00000463,0x000100fd,0x000200f8,0x00000464,0x00050041,0x0000004e,0x00000467,0x000003d5, + 0x00000124,0x0004003d,0x0000004a,0x00000468,0x00000467,0x0003003e,0x00000466,0x00000468, + 0x00050039,0x0000004a,0x00000469,0x000000a6,0x00000466,0x00050041,0x0000004e,0x0000046a, + 0x000003d5,0x00000124,0x0003003e,0x0000046a,0x00000469,0x00050041,0x0000004e,0x0000046c, + 0x000003d5,0x00000172,0x0004003d,0x0000004a,0x0000046d,0x0000046c,0x0003003e,0x0000046b, + 0x0000046d,0x00050039,0x0000004a,0x0000046e,0x000000a6,0x0000046b,0x00050041,0x0000004e, + 0x0000046f,0x000003d5,0x00000172,0x0003003e,0x0000046f,0x0000046e,0x00050041,0x0000004e, + 0x00000471,0x000003d5,0x00000177,0x0004003d,0x0000004a,0x00000472,0x00000471,0x0003003e, + 0x00000470,0x00000472,0x00050039,0x0000004a,0x00000473,0x000000a6,0x00000470,0x00050041, + 0x0000004e,0x00000474,0x000003d5,0x00000177,0x0003003e,0x00000474,0x00000473,0x00050041, + 0x0000004e,0x00000476,0x000003d5,0x00000450,0x0004003d,0x0000004a,0x00000477,0x00000476, + 0x0003003e,0x00000475,0x00000477,0x00050039,0x0000004a,0x00000478,0x000000a6,0x00000475, + 0x00050041,0x0000004e,0x00000479,0x000003d5,0x00000450,0x0003003e,0x00000479,0x00000478, + 0x0004003d,0x00000006,0x0000047a,0x000000c5,0x00050089,0x00000006,0x0000047b,0x0000047a, + 0x000001cb,0x000500aa,0x0000009d,0x0000047c,0x0000047b,0x00000183,0x000300f7,0x0000047e, + 0x00000000,0x000400fa,0x0000047c,0x0000047d,0x0000047e,0x000200f8,0x0000047d,0x0004003d, + 0x00000029,0x0000047f,0x000000c4,0x00050050,0x00000029,0x00000480,0x000002e9,0x000002e9, + 0x00050084,0x00000029,0x00000481,0x0000047f,0x00000480,0x0004007c,0x0000002e,0x00000482, + 0x00000481,0x0004003d,0x00000006,0x00000483,0x000000c2,0x00050086,0x00000006,0x00000484, + 0x00000483,0x0000013e,0x0004007c,0x00000013,0x00000485,0x00000484,0x0004003d,0x00000006, + 0x00000486,0x000000c3,0x00050086,0x00000006,0x00000487,0x00000486,0x0000013e,0x0004007c, + 0x00000013,0x00000488,0x00000487,0x00050050,0x0000002e,0x00000489,0x00000485,0x00000488, + 0x00050080,0x0000002e,0x0000048a,0x00000482,0x00000489,0x0003003e,0x0000048b,0x0000048a, + 0x00050041,0x0000004e,0x0000048d,0x000003d5,0x00000124,0x0004003d,0x0000004a,0x0000048e, + 0x0000048d,0x0003003e,0x0000048c,0x0000048e,0x0003003e,0x0000048f,0x00000145,0x0004003d, + 0x00000006,0x00000491,0x000000c7,0x0003003e,0x00000490,0x00000491,0x00080039,0x00000002, + 0x00000492,0x0000008e,0x0000048b,0x0000048c,0x0000048f,0x00000490,0x0004003d,0x00000006, + 0x00000493,0x000000c2,0x00050086,0x00000006,0x00000494,0x00000493,0x0000013e,0x0004003d, + 0x00000006,0x00000495,0x000000c3,0x00050086,0x00000006,0x00000496,0x00000495,0x0000013e, + 0x0003003e,0x00000497,0x00000494,0x0003003e,0x00000498,0x00000496,0x00050041,0x0000004e, + 0x0000049a,0x000003d5,0x00000124,0x0004003d,0x0000004a,0x0000049b,0x0000049a,0x0003003e, + 0x00000499,0x0000049b,0x00070039,0x00000002,0x0000049c,0x00000099,0x00000497,0x00000498, + 0x00000499,0x0004003d,0x00000029,0x0000049d,0x000000c4,0x00050050,0x00000029,0x0000049e, + 0x000002e9,0x000002e9,0x00050084,0x00000029,0x0000049f,0x0000049d,0x0000049e,0x0004007c, + 0x0000002e,0x000004a0,0x0000049f,0x0004003d,0x00000006,0x000004a1,0x000000c2,0x00050086, + 0x00000006,0x000004a2,0x000004a1,0x0000013e,0x00050080,0x00000006,0x000004a4,0x000004a2, + 0x000004a3,0x0004007c,0x00000013,0x000004a5,0x000004a4,0x0004003d,0x00000006,0x000004a6, + 0x000000c3,0x00050086,0x00000006,0x000004a7,0x000004a6,0x0000013e,0x0004007c,0x00000013, + 0x000004a8,0x000004a7,0x00050050,0x0000002e,0x000004a9,0x000004a5,0x000004a8,0x00050080, + 0x0000002e,0x000004aa,0x000004a0,0x000004a9,0x0003003e,0x000004ab,0x000004aa,0x00050041, + 0x0000004e,0x000004ad,0x000003d5,0x00000172,0x0004003d,0x0000004a,0x000004ae,0x000004ad, + 0x0003003e,0x000004ac,0x000004ae,0x0003003e,0x000004af,0x00000145,0x0004003d,0x00000006, + 0x000004b1,0x000000c7,0x0003003e,0x000004b0,0x000004b1,0x00080039,0x00000002,0x000004b2, + 0x0000008e,0x000004ab,0x000004ac,0x000004af,0x000004b0,0x0004003d,0x00000006,0x000004b3, + 0x000000c2,0x00050086,0x00000006,0x000004b4,0x000004b3,0x0000013e,0x00050080,0x00000006, + 0x000004b5,0x000004b4,0x000004a3,0x0004003d,0x00000006,0x000004b6,0x000000c3,0x00050086, + 0x00000006,0x000004b7,0x000004b6,0x0000013e,0x0003003e,0x000004b8,0x000004b5,0x0003003e, + 0x000004b9,0x000004b7,0x00050041,0x0000004e,0x000004bb,0x000003d5,0x00000172,0x0004003d, + 0x0000004a,0x000004bc,0x000004bb,0x0003003e,0x000004ba,0x000004bc,0x00070039,0x00000002, + 0x000004bd,0x00000099,0x000004b8,0x000004b9,0x000004ba,0x0004003d,0x00000029,0x000004be, + 0x000000c4,0x00050050,0x00000029,0x000004bf,0x000002e9,0x000002e9,0x00050084,0x00000029, + 0x000004c0,0x000004be,0x000004bf,0x0004007c,0x0000002e,0x000004c1,0x000004c0,0x0004003d, + 0x00000006,0x000004c2,0x000000c2,0x00050086,0x00000006,0x000004c3,0x000004c2,0x0000013e, + 0x0004007c,0x00000013,0x000004c4,0x000004c3,0x0004003d,0x00000006,0x000004c5,0x000000c3, + 0x00050086,0x00000006,0x000004c6,0x000004c5,0x0000013e,0x00050080,0x00000006,0x000004c7, + 0x000004c6,0x000004a3,0x0004007c,0x00000013,0x000004c8,0x000004c7,0x00050050,0x0000002e, + 0x000004c9,0x000004c4,0x000004c8,0x00050080,0x0000002e,0x000004ca,0x000004c1,0x000004c9, + 0x0003003e,0x000004cb,0x000004ca,0x00050041,0x0000004e,0x000004cd,0x000003d5,0x00000177, + 0x0004003d,0x0000004a,0x000004ce,0x000004cd,0x0003003e,0x000004cc,0x000004ce,0x0003003e, + 0x000004cf,0x00000145,0x0004003d,0x00000006,0x000004d1,0x000000c7,0x0003003e,0x000004d0, + 0x000004d1,0x00080039,0x00000002,0x000004d2,0x0000008e,0x000004cb,0x000004cc,0x000004cf, + 0x000004d0,0x0004003d,0x00000006,0x000004d3,0x000000c2,0x00050086,0x00000006,0x000004d4, + 0x000004d3,0x0000013e,0x0004003d,0x00000006,0x000004d5,0x000000c3,0x00050086,0x00000006, + 0x000004d6,0x000004d5,0x0000013e,0x00050080,0x00000006,0x000004d7,0x000004d6,0x000004a3, + 0x0003003e,0x000004d8,0x000004d4,0x0003003e,0x000004d9,0x000004d7,0x00050041,0x0000004e, + 0x000004db,0x000003d5,0x00000177,0x0004003d,0x0000004a,0x000004dc,0x000004db,0x0003003e, + 0x000004da,0x000004dc,0x00070039,0x00000002,0x000004dd,0x00000099,0x000004d8,0x000004d9, + 0x000004da,0x0004003d,0x00000029,0x000004de,0x000000c4,0x00050050,0x00000029,0x000004df, + 0x000002e9,0x000002e9,0x00050084,0x00000029,0x000004e0,0x000004de,0x000004df,0x0004007c, + 0x0000002e,0x000004e1,0x000004e0,0x0004003d,0x00000006,0x000004e2,0x000000c2,0x00050086, + 0x00000006,0x000004e3,0x000004e2,0x0000013e,0x00050080,0x00000006,0x000004e4,0x000004e3, + 0x000004a3,0x0004007c,0x00000013,0x000004e5,0x000004e4,0x0004003d,0x00000006,0x000004e6, + 0x000000c3,0x00050086,0x00000006,0x000004e7,0x000004e6,0x0000013e,0x00050080,0x00000006, + 0x000004e8,0x000004e7,0x000004a3,0x0004007c,0x00000013,0x000004e9,0x000004e8,0x00050050, + 0x0000002e,0x000004ea,0x000004e5,0x000004e9,0x00050080,0x0000002e,0x000004eb,0x000004e1, + 0x000004ea,0x0003003e,0x000004ec,0x000004eb,0x00050041,0x0000004e,0x000004ee,0x000003d5, + 0x00000450,0x0004003d,0x0000004a,0x000004ef,0x000004ee,0x0003003e,0x000004ed,0x000004ef, + 0x0003003e,0x000004f0,0x00000145,0x0004003d,0x00000006,0x000004f2,0x000000c7,0x0003003e, + 0x000004f1,0x000004f2,0x00080039,0x00000002,0x000004f3,0x0000008e,0x000004ec,0x000004ed, + 0x000004f0,0x000004f1,0x0004003d,0x00000006,0x000004f4,0x000000c2,0x00050086,0x00000006, + 0x000004f5,0x000004f4,0x0000013e,0x00050080,0x00000006,0x000004f6,0x000004f5,0x000004a3, + 0x0004003d,0x00000006,0x000004f7,0x000000c3,0x00050086,0x00000006,0x000004f8,0x000004f7, + 0x0000013e,0x00050080,0x00000006,0x000004f9,0x000004f8,0x000004a3,0x0003003e,0x000004fa, + 0x000004f6,0x0003003e,0x000004fb,0x000004f9,0x00050041,0x0000004e,0x000004fd,0x000003d5, + 0x00000450,0x0004003d,0x0000004a,0x000004fe,0x000004fd,0x0003003e,0x000004fc,0x000004fe, + 0x00070039,0x00000002,0x000004ff,0x00000099,0x000004fa,0x000004fb,0x000004fc,0x000200f9, + 0x0000047e,0x000200f8,0x0000047e,0x000100fd,0x00010038,0x00050036,0x00000002,0x000000d0, + 0x00000000,0x000000c1,0x00030037,0x00000007,0x000000ca,0x00030037,0x00000007,0x000000cb, + 0x00030037,0x000000a8,0x000000cc,0x00030037,0x00000007,0x000000cd,0x00030037,0x00000007, + 0x000000ce,0x00030037,0x00000007,0x000000cf,0x000200f8,0x000000d1,0x0004003b,0x00000007, + 0x00000500,0x00000007,0x0004003b,0x00000007,0x00000502,0x00000007,0x0004003b,0x000000a8, + 0x00000504,0x00000007,0x0004003b,0x00000007,0x00000506,0x00000007,0x0004003b,0x00000007, + 0x00000508,0x00000007,0x0004003b,0x00000007,0x0000050a,0x00000007,0x0004003d,0x00000006, + 0x00000501,0x000000ca,0x0003003e,0x00000500,0x00000501,0x0004003d,0x00000006,0x00000503, + 0x000000cb,0x0003003e,0x00000502,0x00000503,0x0004003d,0x00000029,0x00000505,0x000000cc, + 0x0003003e,0x00000504,0x00000505,0x0004003d,0x00000006,0x00000507,0x000000cd,0x0003003e, + 0x00000506,0x00000507,0x0004003d,0x00000006,0x00000509,0x000000ce,0x0003003e,0x00000508, + 0x00000509,0x0004003d,0x00000006,0x0000050b,0x000000cf,0x0003003e,0x0000050a,0x0000050b, + 0x000a0039,0x00000002,0x0000050c,0x000000c8,0x00000500,0x00000502,0x00000504,0x00000506, + 0x00000508,0x0000050a,0x000100fd,0x00010038,0x00050036,0x00000002,0x000000d8,0x00000000, + 0x000000c1,0x00030037,0x00000007,0x000000d2,0x00030037,0x00000007,0x000000d3,0x00030037, + 0x000000a8,0x000000d4,0x00030037,0x00000007,0x000000d5,0x00030037,0x00000007,0x000000d6, + 0x00030037,0x00000007,0x000000d7,0x000200f8,0x000000d9,0x0004003b,0x0000004e,0x0000050d, + 0x00000007,0x0004003b,0x00000007,0x0000050e,0x00000007,0x0004003b,0x00000007,0x00000510, + 0x00000007,0x0004003b,0x0000004e,0x00000513,0x00000007,0x0004003b,0x0000003d,0x00000527, + 0x00000007,0x0004003b,0x0000004e,0x00000528,0x00000007,0x0004003b,0x00000007,0x0000052a, + 0x00000007,0x0004003b,0x00000007,0x0000052c,0x00000007,0x0004003b,0x00000007,0x00000534, + 0x00000007,0x0004003b,0x00000007,0x00000535,0x00000007,0x0004003b,0x0000004e,0x00000537, + 0x00000007,0x0004003d,0x00000006,0x0000050f,0x000000d2,0x0003003e,0x0000050e,0x0000050f, + 0x0004003d,0x00000006,0x00000511,0x000000d3,0x0003003e,0x00000510,0x00000511,0x00060039, + 0x0000004a,0x00000512,0x00000093,0x0000050e,0x00000510,0x0003003e,0x0000050d,0x00000512, + 0x0004003d,0x0000004a,0x00000514,0x0000050d,0x0003003e,0x00000513,0x00000514,0x00050039, + 0x0000004a,0x00000515,0x000000a6,0x00000513,0x0003003e,0x0000050d,0x00000515,0x0004003d, + 0x00000006,0x00000516,0x000000d5,0x00050089,0x00000006,0x00000517,0x00000516,0x000001cb, + 0x000500aa,0x0000009d,0x00000518,0x00000517,0x00000183,0x000300f7,0x0000051a,0x00000000, + 0x000400fa,0x00000518,0x00000519,0x0000051a,0x000200f8,0x00000519,0x0004003d,0x00000029, + 0x0000051b,0x000000d4,0x00050050,0x00000029,0x0000051c,0x000004a3,0x000004a3,0x00050084, + 0x00000029,0x0000051d,0x0000051b,0x0000051c,0x0004007c,0x0000002e,0x0000051e,0x0000051d, + 0x0004003d,0x00000006,0x0000051f,0x000000d2,0x00050086,0x00000006,0x00000520,0x0000051f, + 0x0000013e,0x0004007c,0x00000013,0x00000521,0x00000520,0x0004003d,0x00000006,0x00000522, + 0x000000d3,0x00050086,0x00000006,0x00000523,0x00000522,0x0000013e,0x0004007c,0x00000013, + 0x00000524,0x00000523,0x00050050,0x0000002e,0x00000525,0x00000521,0x00000524,0x00050080, + 0x0000002e,0x00000526,0x0000051e,0x00000525,0x0003003e,0x00000527,0x00000526,0x0004003d, + 0x0000004a,0x00000529,0x0000050d,0x0003003e,0x00000528,0x00000529,0x0004003d,0x00000006, + 0x0000052b,0x000000d6,0x0003003e,0x0000052a,0x0000052b,0x0004003d,0x00000006,0x0000052d, + 0x000000d7,0x0003003e,0x0000052c,0x0000052d,0x00080039,0x00000002,0x0000052e,0x0000008e, + 0x00000527,0x00000528,0x0000052a,0x0000052c,0x0004003d,0x00000006,0x0000052f,0x000000d2, + 0x0004003d,0x00000006,0x00000530,0x000000d3,0x00050086,0x00000006,0x00000531,0x00000530, + 0x0000013e,0x00050089,0x00000006,0x00000532,0x00000531,0x0000013e,0x00050080,0x00000006, + 0x00000533,0x0000052f,0x00000532,0x0003003e,0x00000534,0x00000533,0x0004003d,0x00000006, + 0x00000536,0x000000d3,0x0003003e,0x00000535,0x00000536,0x0004003d,0x0000004a,0x00000538, + 0x0000050d,0x0003003e,0x00000537,0x00000538,0x00070039,0x00000002,0x00000539,0x00000099, + 0x00000534,0x00000535,0x00000537,0x000200f9,0x0000051a,0x000200f8,0x0000051a,0x000100fd, + 0x00010038,0x00050036,0x00000002,0x000000e0,0x00000000,0x000000c1,0x00030037,0x00000007, + 0x000000da,0x00030037,0x00000007,0x000000db,0x00030037,0x000000a8,0x000000dc,0x00030037, + 0x00000007,0x000000dd,0x00030037,0x00000007,0x000000de,0x00030037,0x00000007,0x000000df, + 0x000200f8,0x000000e1,0x0004003b,0x0000004e,0x0000053e,0x00000007,0x0004003b,0x00000007, + 0x00000546,0x00000007,0x0004003b,0x00000007,0x00000547,0x00000007,0x0004003b,0x0000004e, + 0x00000549,0x00000007,0x0004003b,0x0000003d,0x0000055d,0x00000007,0x0004003b,0x0000004e, + 0x0000055e,0x00000007,0x0004003b,0x00000007,0x00000560,0x00000007,0x0004003b,0x00000007, + 0x00000562,0x00000007,0x0004003b,0x00000007,0x0000056c,0x00000007,0x0004003b,0x00000007, + 0x0000056d,0x00000007,0x0004003b,0x0000004e,0x0000056e,0x00000007,0x0004003d,0x00000006, + 0x0000053a,0x000000dd,0x000500b0,0x0000009d,0x0000053b,0x0000053a,0x000003bb,0x000300f7, + 0x0000053d,0x00000000,0x000400fa,0x0000053b,0x0000053c,0x0000053d,0x000200f8,0x0000053c, + 0x0004003d,0x00000006,0x0000053f,0x000000da,0x00050084,0x00000006,0x00000540,0x0000053f, + 0x0000013e,0x0004003d,0x00000006,0x00000541,0x000000db,0x00050089,0x00000006,0x00000542, + 0x00000541,0x0000013e,0x00050080,0x00000006,0x00000543,0x00000540,0x00000542,0x0004003d, + 0x00000006,0x00000544,0x000000db,0x00050084,0x00000006,0x00000545,0x00000544,0x0000013e, + 0x0003003e,0x00000546,0x00000543,0x0003003e,0x00000547,0x00000545,0x00060039,0x0000004a, + 0x00000548,0x00000093,0x00000546,0x00000547,0x0003003e,0x0000053e,0x00000548,0x0004003d, + 0x0000004a,0x0000054a,0x0000053e,0x0003003e,0x00000549,0x0000054a,0x00050039,0x0000004a, + 0x0000054b,0x000000a6,0x00000549,0x0003003e,0x0000053e,0x0000054b,0x0004003d,0x00000006, + 0x0000054c,0x000000dd,0x00050089,0x00000006,0x0000054d,0x0000054c,0x000001cb,0x000500aa, + 0x0000009d,0x0000054e,0x0000054d,0x00000183,0x000300f7,0x00000550,0x00000000,0x000400fa, + 0x0000054e,0x0000054f,0x00000550,0x000200f8,0x0000054f,0x0004003d,0x00000029,0x00000551, + 0x000000dc,0x00050050,0x00000029,0x00000552,0x000001cb,0x000001cb,0x00050084,0x00000029, + 0x00000553,0x00000551,0x00000552,0x0004007c,0x0000002e,0x00000554,0x00000553,0x0004003d, + 0x00000006,0x00000555,0x000000da,0x00050086,0x00000006,0x00000556,0x00000555,0x0000013e, + 0x0004007c,0x00000013,0x00000557,0x00000556,0x0004003d,0x00000006,0x00000558,0x000000db, + 0x00050086,0x00000006,0x00000559,0x00000558,0x0000013e,0x0004007c,0x00000013,0x0000055a, + 0x00000559,0x00050050,0x0000002e,0x0000055b,0x00000557,0x0000055a,0x00050080,0x0000002e, + 0x0000055c,0x00000554,0x0000055b,0x0003003e,0x0000055d,0x0000055c,0x0004003d,0x0000004a, + 0x0000055f,0x0000053e,0x0003003e,0x0000055e,0x0000055f,0x0004003d,0x00000006,0x00000561, + 0x000000de,0x0003003e,0x00000560,0x00000561,0x0004003d,0x00000006,0x00000563,0x000000df, + 0x0003003e,0x00000562,0x00000563,0x00080039,0x00000002,0x00000564,0x0000008e,0x0000055d, + 0x0000055e,0x00000560,0x00000562,0x0004003d,0x00000006,0x00000565,0x000000da,0x00050084, + 0x00000006,0x00000566,0x00000565,0x0000013e,0x0004003d,0x00000006,0x00000567,0x000000db, + 0x00050086,0x00000006,0x00000568,0x00000567,0x0000013e,0x00050080,0x00000006,0x00000569, + 0x00000566,0x00000568,0x0004003d,0x00000006,0x0000056a,0x000000db,0x00050084,0x00000006, + 0x0000056b,0x0000056a,0x0000013e,0x0003003e,0x0000056c,0x00000569,0x0003003e,0x0000056d, + 0x0000056b,0x0004003d,0x0000004a,0x0000056f,0x0000053e,0x0003003e,0x0000056e,0x0000056f, + 0x00070039,0x00000002,0x00000570,0x00000099,0x0000056c,0x0000056d,0x0000056e,0x000200f9, + 0x00000550,0x000200f8,0x00000550,0x000200f9,0x0000053d,0x000200f8,0x0000053d,0x000100fd, + 0x00010038,0x00050036,0x00000002,0x000000e8,0x00000000,0x000000c1,0x00030037,0x00000007, + 0x000000e2,0x00030037,0x00000007,0x000000e3,0x00030037,0x000000a8,0x000000e4,0x00030037, + 0x00000007,0x000000e5,0x00030037,0x00000007,0x000000e6,0x00030037,0x00000007,0x000000e7, + 0x000200f8,0x000000e9,0x0004003b,0x0000004e,0x00000575,0x00000007,0x0004003b,0x00000007, + 0x0000057c,0x00000007,0x0004003b,0x00000007,0x0000057d,0x00000007,0x0004003b,0x0000004e, + 0x0000057f,0x00000007,0x0004003b,0x0000003d,0x00000593,0x00000007,0x0004003b,0x0000004e, + 0x00000594,0x00000007,0x0004003b,0x00000007,0x00000596,0x00000007,0x0004003b,0x00000007, + 0x00000598,0x00000007,0x0004003b,0x00000007,0x0000059f,0x00000007,0x0004003b,0x00000007, + 0x000005a0,0x00000007,0x0004003b,0x0000004e,0x000005a1,0x00000007,0x0004003d,0x00000006, + 0x00000571,0x000000e5,0x000500b0,0x0000009d,0x00000572,0x00000571,0x000002e9,0x000300f7, + 0x00000574,0x00000000,0x000400fa,0x00000572,0x00000573,0x00000574,0x000200f8,0x00000573, + 0x0004003d,0x00000006,0x00000576,0x000000e2,0x00050084,0x00000006,0x00000577,0x00000576, + 0x000001cb,0x0004003d,0x00000006,0x00000578,0x000000e3,0x00050080,0x00000006,0x00000579, + 0x00000577,0x00000578,0x0004003d,0x00000006,0x0000057a,0x000000e3,0x00050084,0x00000006, + 0x0000057b,0x0000057a,0x000001cb,0x0003003e,0x0000057c,0x00000579,0x0003003e,0x0000057d, + 0x0000057b,0x00060039,0x0000004a,0x0000057e,0x00000093,0x0000057c,0x0000057d,0x0003003e, + 0x00000575,0x0000057e,0x0004003d,0x0000004a,0x00000580,0x00000575,0x0003003e,0x0000057f, + 0x00000580,0x00050039,0x0000004a,0x00000581,0x000000a6,0x0000057f,0x0003003e,0x00000575, + 0x00000581,0x0004003d,0x00000006,0x00000582,0x000000e5,0x00050089,0x00000006,0x00000583, + 0x00000582,0x000001cb,0x000500aa,0x0000009d,0x00000584,0x00000583,0x00000183,0x000300f7, + 0x00000586,0x00000000,0x000400fa,0x00000584,0x00000585,0x00000586,0x000200f8,0x00000585, + 0x0004003d,0x00000029,0x00000587,0x000000e4,0x00050050,0x00000029,0x00000588,0x0000013e, + 0x0000013e,0x00050084,0x00000029,0x00000589,0x00000587,0x00000588,0x0004007c,0x0000002e, + 0x0000058a,0x00000589,0x0004003d,0x00000006,0x0000058b,0x000000e2,0x00050086,0x00000006, + 0x0000058c,0x0000058b,0x0000013e,0x0004007c,0x00000013,0x0000058d,0x0000058c,0x0004003d, + 0x00000006,0x0000058e,0x000000e3,0x00050086,0x00000006,0x0000058f,0x0000058e,0x0000013e, + 0x0004007c,0x00000013,0x00000590,0x0000058f,0x00050050,0x0000002e,0x00000591,0x0000058d, + 0x00000590,0x00050080,0x0000002e,0x00000592,0x0000058a,0x00000591,0x0003003e,0x00000593, + 0x00000592,0x0004003d,0x0000004a,0x00000595,0x00000575,0x0003003e,0x00000594,0x00000595, + 0x0004003d,0x00000006,0x00000597,0x000000e6,0x0003003e,0x00000596,0x00000597,0x0004003d, + 0x00000006,0x00000599,0x000000e7,0x0003003e,0x00000598,0x00000599,0x00080039,0x00000002, + 0x0000059a,0x0000008e,0x00000593,0x00000594,0x00000596,0x00000598,0x0004003d,0x00000006, + 0x0000059b,0x000000e2,0x00050086,0x00000006,0x0000059c,0x0000059b,0x0000013e,0x0004003d, + 0x00000006,0x0000059d,0x000000e3,0x00050080,0x00000006,0x0000059e,0x0000059c,0x0000059d, + 0x0003003e,0x0000059f,0x0000059e,0x0003003e,0x000005a0,0x00000183,0x0004003d,0x0000004a, + 0x000005a2,0x00000575,0x0003003e,0x000005a1,0x000005a2,0x00070039,0x00000002,0x000005a3, + 0x00000099,0x0000059f,0x000005a0,0x000005a1,0x000200f9,0x00000586,0x000200f8,0x00000586, + 0x000200f9,0x00000574,0x000200f8,0x00000574,0x000100fd,0x00010038,0x00050036,0x00000002, + 0x000000ef,0x00000000,0x000000ea,0x00030037,0x000000a8,0x000000eb,0x00030037,0x00000007, + 0x000000ec,0x00030037,0x00000007,0x000000ed,0x00030037,0x00000007,0x000000ee,0x000200f8, + 0x000000f0,0x0004003b,0x0000004e,0x000005a8,0x00000007,0x0004003b,0x00000007,0x000005a9, + 0x00000007,0x0004003b,0x00000007,0x000005ab,0x00000007,0x0004003b,0x0000004e,0x000005ad, + 0x00000007,0x0004003b,0x0000003d,0x000005b7,0x00000007,0x0004003b,0x0000004e,0x000005b8, + 0x00000007,0x0004003b,0x00000007,0x000005ba,0x00000007,0x0004003b,0x00000007,0x000005bc, + 0x00000007,0x0004003d,0x00000006,0x000005a4,0x000000ec,0x000500b0,0x0000009d,0x000005a5, + 0x000005a4,0x000001cb,0x000300f7,0x000005a7,0x00000000,0x000400fa,0x000005a5,0x000005a6, + 0x000005a7,0x000200f8,0x000005a6,0x0004003d,0x00000006,0x000005aa,0x000000ec,0x0003003e, + 0x000005a9,0x000005aa,0x0003003e,0x000005ab,0x00000183,0x00060039,0x0000004a,0x000005ac, + 0x00000093,0x000005a9,0x000005ab,0x0003003e,0x000005a8,0x000005ac,0x0004003d,0x0000004a, + 0x000005ae,0x000005a8,0x0003003e,0x000005ad,0x000005ae,0x00050039,0x0000004a,0x000005af, + 0x000000a6,0x000005ad,0x0003003e,0x000005a8,0x000005af,0x0004003d,0x00000006,0x000005b0, + 0x000000ec,0x00050089,0x00000006,0x000005b1,0x000005b0,0x000001cb,0x000500aa,0x0000009d, + 0x000005b2,0x000005b1,0x00000183,0x000300f7,0x000005b4,0x00000000,0x000400fa,0x000005b2, + 0x000005b3,0x000005b4,0x000200f8,0x000005b3,0x0004003d,0x00000029,0x000005b5,0x000000eb, + 0x0004007c,0x0000002e,0x000005b6,0x000005b5,0x0003003e,0x000005b7,0x000005b6,0x0004003d, + 0x0000004a,0x000005b9,0x000005a8,0x0003003e,0x000005b8,0x000005b9,0x0004003d,0x00000006, + 0x000005bb,0x000000ed,0x0003003e,0x000005ba,0x000005bb,0x0004003d,0x00000006,0x000005bd, + 0x000000ee,0x0003003e,0x000005bc,0x000005bd,0x00080039,0x00000002,0x000005be,0x0000008e, + 0x000005b7,0x000005b8,0x000005ba,0x000005bc,0x000200f9,0x000005b4,0x000200f8,0x000005b4, + 0x000200f9,0x000005a7,0x000200f8,0x000005a7,0x000100fd,0x00010038,0x00050036,0x00000002, + 0x000000f6,0x00000000,0x000000f1,0x00030037,0x00000007,0x000000f2,0x00030037,0x00000007, + 0x000000f3,0x00030037,0x00000007,0x000000f4,0x00030037,0x00000007,0x000000f5,0x000200f8, + 0x000000f7,0x0004003b,0x0000003d,0x000005bf,0x00000007,0x0004003b,0x0000003d,0x000005c9, + 0x00000007,0x0004003b,0x0000004e,0x000005d3,0x00000007,0x0004003b,0x000000a8,0x000005d6, + 0x00000007,0x0004003b,0x00000007,0x000005d7,0x00000007,0x0004003b,0x0000003d,0x000005db, + 0x00000007,0x0004003b,0x0000004e,0x000005dd,0x00000007,0x0004003b,0x00000007,0x000005df, + 0x00000007,0x0004003b,0x00000007,0x000005e0,0x00000007,0x0004003b,0x0000004e,0x000005f5, + 0x00000007,0x0004003b,0x000000a8,0x000005f8,0x00000007,0x0004003b,0x00000007,0x000005f9, + 0x00000007,0x0004003b,0x0000003d,0x000005fc,0x00000007,0x0004003b,0x0000004e,0x000005fe, + 0x00000007,0x0004003b,0x00000007,0x00000600,0x00000007,0x0004003b,0x00000007,0x00000601, + 0x00000007,0x0004003b,0x0000004e,0x00000616,0x00000007,0x0004003b,0x000000a8,0x00000619, + 0x00000007,0x0004003b,0x00000007,0x0000061a,0x00000007,0x0004003b,0x0000003d,0x0000061d, + 0x00000007,0x0004003b,0x0000004e,0x0000061f,0x00000007,0x0004003b,0x00000007,0x00000621, + 0x00000007,0x0004003b,0x00000007,0x00000622,0x00000007,0x0004003b,0x0000004e,0x00000637, + 0x00000007,0x0004003b,0x000000a8,0x0000063a,0x00000007,0x0004003b,0x00000007,0x0000063b, + 0x00000007,0x0004003b,0x0000003d,0x0000063e,0x00000007,0x0004003b,0x0000004e,0x00000640, + 0x00000007,0x0004003b,0x00000007,0x00000642,0x00000007,0x0004003b,0x00000007,0x00000643, + 0x00000007,0x0004003b,0x0000004e,0x0000064c,0x00000007,0x0004003b,0x0000004e,0x0000064d, + 0x00000007,0x0004003b,0x0000004e,0x0000064f,0x00000007,0x0004003b,0x0000004e,0x00000651, + 0x00000007,0x0004003b,0x0000004e,0x00000653,0x00000007,0x0004003b,0x0000003d,0x0000065b, + 0x00000007,0x0004003b,0x0000004e,0x0000065c,0x00000007,0x0004003b,0x00000007,0x0000065e, + 0x00000007,0x0004003b,0x00000007,0x0000065f,0x00000007,0x0004003b,0x00000007,0x00000662, + 0x00000007,0x0004003b,0x00000007,0x00000664,0x00000007,0x0004003b,0x0000004e,0x00000666, + 0x00000007,0x0004003d,0x00000006,0x000005c0,0x000000f2,0x00050084,0x00000006,0x000005c1, + 0x000005c0,0x000001cb,0x00050080,0x00000006,0x000005c2,0x000005c1,0x00000183,0x0004007c, + 0x00000013,0x000005c3,0x000005c2,0x0004003d,0x00000006,0x000005c4,0x000000f3,0x00050084, + 0x00000006,0x000005c5,0x000005c4,0x000001cb,0x00050080,0x00000006,0x000005c6,0x000005c5, + 0x00000183,0x0004007c,0x00000013,0x000005c7,0x000005c6,0x00050050,0x0000002e,0x000005c8, + 0x000005c3,0x000005c7,0x0003003e,0x000005bf,0x000005c8,0x0004003d,0x00000006,0x000005ca, + 0x000000f2,0x00050084,0x00000006,0x000005cb,0x000005ca,0x0000013e,0x00050080,0x00000006, + 0x000005cc,0x000005cb,0x00000183,0x0004007c,0x00000013,0x000005cd,0x000005cc,0x0004003d, + 0x00000006,0x000005ce,0x000000f3,0x00050084,0x00000006,0x000005cf,0x000005ce,0x0000013e, + 0x00050080,0x00000006,0x000005d0,0x000005cf,0x00000183,0x0004007c,0x00000013,0x000005d1, + 0x000005d0,0x00050050,0x0000002e,0x000005d2,0x000005cd,0x000005d1,0x0003003e,0x000005c9, + 0x000005d2,0x0004003d,0x0000002e,0x000005d4,0x000005bf,0x0004007c,0x00000029,0x000005d5, + 0x000005d4,0x0003003e,0x000005d6,0x000005d5,0x0004003d,0x00000006,0x000005d8,0x000000f5, + 0x0003003e,0x000005d7,0x000005d8,0x00060039,0x0000004a,0x000005d9,0x000000b4,0x000005d6, + 0x000005d7,0x0003003e,0x000005d3,0x000005d9,0x0004003d,0x0000002e,0x000005dc,0x000005c9, + 0x0003003e,0x000005db,0x000005dc,0x0004003d,0x0000004a,0x000005de,0x000005d3,0x0003003e, + 0x000005dd,0x000005de,0x0003003e,0x000005df,0x000005da,0x0004003d,0x00000006,0x000005e1, + 0x000000f5,0x0003003e,0x000005e0,0x000005e1,0x00080039,0x00000002,0x000005e2,0x0000008e, + 0x000005db,0x000005dd,0x000005df,0x000005e0,0x0004003d,0x00000006,0x000005e3,0x000000f2, + 0x00050084,0x00000006,0x000005e4,0x000005e3,0x000001cb,0x00050080,0x00000006,0x000005e5, + 0x000005e4,0x0000013e,0x0004007c,0x00000013,0x000005e6,0x000005e5,0x0004003d,0x00000006, + 0x000005e7,0x000000f3,0x00050084,0x00000006,0x000005e8,0x000005e7,0x000001cb,0x00050080, + 0x00000006,0x000005e9,0x000005e8,0x00000183,0x0004007c,0x00000013,0x000005ea,0x000005e9, + 0x00050050,0x0000002e,0x000005eb,0x000005e6,0x000005ea,0x0003003e,0x000005bf,0x000005eb, + 0x0004003d,0x00000006,0x000005ec,0x000000f2,0x00050084,0x00000006,0x000005ed,0x000005ec, + 0x0000013e,0x00050080,0x00000006,0x000005ee,0x000005ed,0x00000145,0x0004007c,0x00000013, + 0x000005ef,0x000005ee,0x0004003d,0x00000006,0x000005f0,0x000000f3,0x00050084,0x00000006, + 0x000005f1,0x000005f0,0x0000013e,0x00050080,0x00000006,0x000005f2,0x000005f1,0x00000183, + 0x0004007c,0x00000013,0x000005f3,0x000005f2,0x00050050,0x0000002e,0x000005f4,0x000005ef, + 0x000005f3,0x0003003e,0x000005c9,0x000005f4,0x0004003d,0x0000002e,0x000005f6,0x000005bf, + 0x0004007c,0x00000029,0x000005f7,0x000005f6,0x0003003e,0x000005f8,0x000005f7,0x0004003d, + 0x00000006,0x000005fa,0x000000f5,0x0003003e,0x000005f9,0x000005fa,0x00060039,0x0000004a, + 0x000005fb,0x000000b4,0x000005f8,0x000005f9,0x0003003e,0x000005f5,0x000005fb,0x0004003d, + 0x0000002e,0x000005fd,0x000005c9,0x0003003e,0x000005fc,0x000005fd,0x0004003d,0x0000004a, + 0x000005ff,0x000005f5,0x0003003e,0x000005fe,0x000005ff,0x0003003e,0x00000600,0x000005da, + 0x0004003d,0x00000006,0x00000602,0x000000f5,0x0003003e,0x00000601,0x00000602,0x00080039, + 0x00000002,0x00000603,0x0000008e,0x000005fc,0x000005fe,0x00000600,0x00000601,0x0004003d, + 0x00000006,0x00000604,0x000000f2,0x00050084,0x00000006,0x00000605,0x00000604,0x000001cb, + 0x00050080,0x00000006,0x00000606,0x00000605,0x00000183,0x0004007c,0x00000013,0x00000607, + 0x00000606,0x0004003d,0x00000006,0x00000608,0x000000f3,0x00050084,0x00000006,0x00000609, + 0x00000608,0x000001cb,0x00050080,0x00000006,0x0000060a,0x00000609,0x0000013e,0x0004007c, + 0x00000013,0x0000060b,0x0000060a,0x00050050,0x0000002e,0x0000060c,0x00000607,0x0000060b, + 0x0003003e,0x000005bf,0x0000060c,0x0004003d,0x00000006,0x0000060d,0x000000f2,0x00050084, + 0x00000006,0x0000060e,0x0000060d,0x0000013e,0x00050080,0x00000006,0x0000060f,0x0000060e, + 0x00000183,0x0004007c,0x00000013,0x00000610,0x0000060f,0x0004003d,0x00000006,0x00000611, + 0x000000f3,0x00050084,0x00000006,0x00000612,0x00000611,0x0000013e,0x00050080,0x00000006, + 0x00000613,0x00000612,0x00000145,0x0004007c,0x00000013,0x00000614,0x00000613,0x00050050, + 0x0000002e,0x00000615,0x00000610,0x00000614,0x0003003e,0x000005c9,0x00000615,0x0004003d, + 0x0000002e,0x00000617,0x000005bf,0x0004007c,0x00000029,0x00000618,0x00000617,0x0003003e, + 0x00000619,0x00000618,0x0004003d,0x00000006,0x0000061b,0x000000f5,0x0003003e,0x0000061a, + 0x0000061b,0x00060039,0x0000004a,0x0000061c,0x000000b4,0x00000619,0x0000061a,0x0003003e, + 0x00000616,0x0000061c,0x0004003d,0x0000002e,0x0000061e,0x000005c9,0x0003003e,0x0000061d, + 0x0000061e,0x0004003d,0x0000004a,0x00000620,0x00000616,0x0003003e,0x0000061f,0x00000620, + 0x0003003e,0x00000621,0x000005da,0x0004003d,0x00000006,0x00000623,0x000000f5,0x0003003e, + 0x00000622,0x00000623,0x00080039,0x00000002,0x00000624,0x0000008e,0x0000061d,0x0000061f, + 0x00000621,0x00000622,0x0004003d,0x00000006,0x00000625,0x000000f2,0x00050084,0x00000006, + 0x00000626,0x00000625,0x000001cb,0x00050080,0x00000006,0x00000627,0x00000626,0x0000013e, + 0x0004007c,0x00000013,0x00000628,0x00000627,0x0004003d,0x00000006,0x00000629,0x000000f3, + 0x00050084,0x00000006,0x0000062a,0x00000629,0x000001cb,0x00050080,0x00000006,0x0000062b, + 0x0000062a,0x0000013e,0x0004007c,0x00000013,0x0000062c,0x0000062b,0x00050050,0x0000002e, + 0x0000062d,0x00000628,0x0000062c,0x0003003e,0x000005bf,0x0000062d,0x0004003d,0x00000006, + 0x0000062e,0x000000f2,0x00050084,0x00000006,0x0000062f,0x0000062e,0x0000013e,0x00050080, + 0x00000006,0x00000630,0x0000062f,0x00000145,0x0004007c,0x00000013,0x00000631,0x00000630, + 0x0004003d,0x00000006,0x00000632,0x000000f3,0x00050084,0x00000006,0x00000633,0x00000632, + 0x0000013e,0x00050080,0x00000006,0x00000634,0x00000633,0x00000145,0x0004007c,0x00000013, + 0x00000635,0x00000634,0x00050050,0x0000002e,0x00000636,0x00000631,0x00000635,0x0003003e, + 0x000005c9,0x00000636,0x0004003d,0x0000002e,0x00000638,0x000005bf,0x0004007c,0x00000029, + 0x00000639,0x00000638,0x0003003e,0x0000063a,0x00000639,0x0004003d,0x00000006,0x0000063c, + 0x000000f5,0x0003003e,0x0000063b,0x0000063c,0x00060039,0x0000004a,0x0000063d,0x000000b4, + 0x0000063a,0x0000063b,0x0003003e,0x00000637,0x0000063d,0x0004003d,0x0000002e,0x0000063f, + 0x000005c9,0x0003003e,0x0000063e,0x0000063f,0x0004003d,0x0000004a,0x00000641,0x00000637, + 0x0003003e,0x00000640,0x00000641,0x0003003e,0x00000642,0x000005da,0x0004003d,0x00000006, + 0x00000644,0x000000f5,0x0003003e,0x00000643,0x00000644,0x00080039,0x00000002,0x00000645, + 0x0000008e,0x0000063e,0x00000640,0x00000642,0x00000643,0x0004003d,0x00000006,0x00000646, + 0x000000f4,0x000500b2,0x0000009d,0x00000648,0x00000646,0x00000647,0x000300f7,0x0000064a, + 0x00000000,0x000400fa,0x00000648,0x00000649,0x0000064a,0x000200f8,0x00000649,0x000100fd, + 0x000200f8,0x0000064a,0x0004003d,0x0000004a,0x0000064e,0x000005d3,0x0003003e,0x0000064d, + 0x0000064e,0x0004003d,0x0000004a,0x00000650,0x000005f5,0x0003003e,0x0000064f,0x00000650, + 0x0004003d,0x0000004a,0x00000652,0x00000616,0x0003003e,0x00000651,0x00000652,0x0004003d, + 0x0000004a,0x00000654,0x00000637,0x0003003e,0x00000653,0x00000654,0x00080039,0x0000004a, + 0x00000655,0x00000087,0x0000064d,0x0000064f,0x00000651,0x00000653,0x0003003e,0x0000064c, + 0x00000655,0x0004003d,0x00000006,0x00000656,0x000000f2,0x0004007c,0x00000013,0x00000657, + 0x00000656,0x0004003d,0x00000006,0x00000658,0x000000f3,0x0004007c,0x00000013,0x00000659, + 0x00000658,0x00050050,0x0000002e,0x0000065a,0x00000657,0x00000659,0x0003003e,0x0000065b, + 0x0000065a,0x0004003d,0x0000004a,0x0000065d,0x0000064c,0x0003003e,0x0000065c,0x0000065d, + 0x0003003e,0x0000065e,0x00000647,0x0004003d,0x00000006,0x00000660,0x000000f5,0x0003003e, + 0x0000065f,0x00000660,0x00080039,0x00000002,0x00000661,0x0000008e,0x0000065b,0x0000065c, + 0x0000065e,0x0000065f,0x0004003d,0x00000006,0x00000663,0x000000f2,0x0003003e,0x00000662, + 0x00000663,0x0004003d,0x00000006,0x00000665,0x000000f3,0x0003003e,0x00000664,0x00000665, + 0x0004003d,0x0000004a,0x00000667,0x0000064c,0x0003003e,0x00000666,0x00000667,0x00070039, + 0x00000002,0x00000668,0x00000099,0x00000662,0x00000664,0x00000666,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x00000100,0x00000000,0x000000f8,0x00030037,0x00000007,0x000000f9, + 0x00030037,0x00000007,0x000000fa,0x00030037,0x000000a8,0x000000fb,0x00030037,0x00000007, + 0x000000fc,0x00030037,0x00000007,0x000000fd,0x00030037,0x00000007,0x000000fe,0x00030037, + 0x00000007,0x000000ff,0x000200f8,0x00000101,0x0004003b,0x00000007,0x00000670,0x00000007, + 0x0004003b,0x00000007,0x00000672,0x00000007,0x0004003b,0x000000a8,0x00000674,0x00000007, + 0x0004003b,0x00000007,0x00000676,0x00000007,0x0004003b,0x00000007,0x00000678,0x00000007, + 0x0004003b,0x00000007,0x0000067a,0x00000007,0x0004003b,0x00000007,0x00000687,0x00000007, + 0x0004003b,0x00000007,0x00000689,0x00000007,0x0004003b,0x000000a8,0x0000068b,0x00000007, + 0x0004003b,0x00000007,0x0000068d,0x00000007,0x0004003b,0x00000007,0x0000068f,0x00000007, + 0x0004003b,0x00000007,0x00000690,0x00000007,0x0004003b,0x00000007,0x0000069d,0x00000007, + 0x0004003b,0x00000007,0x0000069f,0x00000007,0x0004003b,0x000000a8,0x000006a1,0x00000007, + 0x0004003b,0x00000007,0x000006a3,0x00000007,0x0004003b,0x00000007,0x000006a5,0x00000007, + 0x0004003b,0x00000007,0x000006a6,0x00000007,0x0004003b,0x000000a8,0x000006b3,0x00000007, + 0x0004003b,0x00000007,0x000006b5,0x00000007,0x0004003b,0x00000007,0x000006b7,0x00000007, + 0x0004003b,0x00000007,0x000006b8,0x00000007,0x0004003d,0x00000006,0x00000669,0x000000fe, + 0x0004003d,0x00000006,0x0000066a,0x000000fd,0x000500b2,0x0000009d,0x0000066b,0x00000669, + 0x0000066a,0x000300f7,0x0000066d,0x00000000,0x000400fa,0x0000066b,0x0000066c,0x0000066d, + 0x000200f8,0x0000066c,0x000100fd,0x000200f8,0x0000066d,0x00040039,0x00000002,0x0000066f, + 0x0000009b,0x0004003d,0x00000006,0x00000671,0x000000f9,0x0003003e,0x00000670,0x00000671, + 0x0004003d,0x00000006,0x00000673,0x000000fa,0x0003003e,0x00000672,0x00000673,0x0004003d, + 0x00000029,0x00000675,0x000000fb,0x0003003e,0x00000674,0x00000675,0x0004003d,0x00000006, + 0x00000677,0x000000fc,0x0003003e,0x00000676,0x00000677,0x0004003d,0x00000006,0x00000679, + 0x000000fd,0x0003003e,0x00000678,0x00000679,0x0004003d,0x00000006,0x0000067b,0x000000ff, + 0x0003003e,0x0000067a,0x0000067b,0x000a0039,0x00000002,0x0000067c,0x000000d8,0x00000670, + 0x00000672,0x00000674,0x00000676,0x00000678,0x0000067a,0x0004003d,0x00000006,0x0000067d, + 0x000000fe,0x0004003d,0x00000006,0x0000067e,0x000000fd,0x00050080,0x00000006,0x0000067f, + 0x0000067e,0x00000145,0x000500b2,0x0000009d,0x00000680,0x0000067d,0x0000067f,0x000300f7, + 0x00000682,0x00000000,0x000400fa,0x00000680,0x00000681,0x00000682,0x000200f8,0x00000681, + 0x000100fd,0x000200f8,0x00000682,0x00040039,0x00000002,0x00000684,0x0000009b,0x0004003d, + 0x00000006,0x00000685,0x000000fd,0x00050080,0x00000006,0x00000686,0x00000685,0x00000145, + 0x0004003d,0x00000006,0x00000688,0x000000f9,0x0003003e,0x00000687,0x00000688,0x0004003d, + 0x00000006,0x0000068a,0x000000fa,0x0003003e,0x00000689,0x0000068a,0x0004003d,0x00000029, + 0x0000068c,0x000000fb,0x0003003e,0x0000068b,0x0000068c,0x0004003d,0x00000006,0x0000068e, + 0x000000fc,0x0003003e,0x0000068d,0x0000068e,0x0003003e,0x0000068f,0x00000686,0x0004003d, + 0x00000006,0x00000691,0x000000ff,0x0003003e,0x00000690,0x00000691,0x000a0039,0x00000002, + 0x00000692,0x000000e0,0x00000687,0x00000689,0x0000068b,0x0000068d,0x0000068f,0x00000690, + 0x0004003d,0x00000006,0x00000693,0x000000fe,0x0004003d,0x00000006,0x00000694,0x000000fd, + 0x00050080,0x00000006,0x00000695,0x00000694,0x0000013e,0x000500b2,0x0000009d,0x00000696, + 0x00000693,0x00000695,0x000300f7,0x00000698,0x00000000,0x000400fa,0x00000696,0x00000697, + 0x00000698,0x000200f8,0x00000697,0x000100fd,0x000200f8,0x00000698,0x00040039,0x00000002, + 0x0000069a,0x0000009b,0x0004003d,0x00000006,0x0000069b,0x000000fd,0x00050080,0x00000006, + 0x0000069c,0x0000069b,0x0000013e,0x0004003d,0x00000006,0x0000069e,0x000000f9,0x0003003e, + 0x0000069d,0x0000069e,0x0004003d,0x00000006,0x000006a0,0x000000fa,0x0003003e,0x0000069f, + 0x000006a0,0x0004003d,0x00000029,0x000006a2,0x000000fb,0x0003003e,0x000006a1,0x000006a2, + 0x0004003d,0x00000006,0x000006a4,0x000000fc,0x0003003e,0x000006a3,0x000006a4,0x0003003e, + 0x000006a5,0x0000069c,0x0004003d,0x00000006,0x000006a7,0x000000ff,0x0003003e,0x000006a6, + 0x000006a7,0x000a0039,0x00000002,0x000006a8,0x000000e8,0x0000069d,0x0000069f,0x000006a1, + 0x000006a3,0x000006a5,0x000006a6,0x0004003d,0x00000006,0x000006a9,0x000000fe,0x0004003d, + 0x00000006,0x000006aa,0x000000fd,0x00050080,0x00000006,0x000006ab,0x000006aa,0x0000013f, + 0x000500b2,0x0000009d,0x000006ac,0x000006a9,0x000006ab,0x000300f7,0x000006ae,0x00000000, + 0x000400fa,0x000006ac,0x000006ad,0x000006ae,0x000200f8,0x000006ad,0x000100fd,0x000200f8, + 0x000006ae,0x00040039,0x00000002,0x000006b0,0x0000009b,0x0004003d,0x00000006,0x000006b1, + 0x000000fd,0x00050080,0x00000006,0x000006b2,0x000006b1,0x0000013f,0x0004003d,0x00000029, + 0x000006b4,0x000000fb,0x0003003e,0x000006b3,0x000006b4,0x0004003d,0x00000006,0x000006b6, + 0x000000fc,0x0003003e,0x000006b5,0x000006b6,0x0003003e,0x000006b7,0x000006b2,0x0004003d, + 0x00000006,0x000006b9,0x000000ff,0x0003003e,0x000006b8,0x000006b9,0x00080039,0x00000002, + 0x000006ba,0x000000ef,0x000006b3,0x000006b5,0x000006b7,0x000006b8,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x00000108,0x00000000,0x00000102,0x00030037,0x000000a8,0x00000103, + 0x00030037,0x00000007,0x00000104,0x00030037,0x00000007,0x00000105,0x00030037,0x00000007, + 0x00000106,0x00030037,0x00000007,0x00000107,0x000200f8,0x00000109,0x0004003b,0x000000a8, + 0x000006bb,0x00000007,0x0004003b,0x00000007,0x000006be,0x00000007,0x0004003b,0x00000007, + 0x000006c0,0x00000007,0x0004003b,0x00000007,0x000006c9,0x00000007,0x0004003b,0x00000007, + 0x000006d1,0x00000007,0x0004003b,0x00000007,0x000006d3,0x00000007,0x0004003b,0x000000a8, + 0x000006d5,0x00000007,0x0004003b,0x00000007,0x000006d7,0x00000007,0x0004003b,0x00000007, + 0x000006d9,0x00000007,0x0004003b,0x00000007,0x000006db,0x00000007,0x0004003b,0x00000007, + 0x000006de,0x00000007,0x0004003b,0x00000007,0x000006e0,0x00000007,0x0004003b,0x000000a8, + 0x000006e2,0x00000007,0x0004003b,0x00000007,0x000006e4,0x00000007,0x0004003b,0x00000007, + 0x000006e6,0x00000007,0x0004003b,0x00000007,0x000006e7,0x00000007,0x0004003b,0x00000007, + 0x000006e9,0x00000007,0x0004003b,0x00000007,0x000006f1,0x00000007,0x0004003b,0x00000007, + 0x000006f3,0x00000007,0x0004003b,0x00000007,0x000006f5,0x00000007,0x0004003b,0x00000007, + 0x000006fb,0x00000007,0x0004003b,0x00000007,0x000006fe,0x00000007,0x0004003b,0x00000007, + 0x00000700,0x00000007,0x0004003b,0x00000007,0x00000702,0x00000007,0x0004003b,0x00000007, + 0x00000704,0x00000007,0x0004003b,0x00000007,0x00000707,0x00000007,0x0004003b,0x00000007, + 0x00000709,0x00000007,0x0004003b,0x000000a8,0x0000070b,0x00000007,0x0004003b,0x00000007, + 0x0000070c,0x00000007,0x0004003b,0x00000007,0x0000070e,0x00000007,0x0004003b,0x00000007, + 0x0000070f,0x00000007,0x0004003b,0x00000007,0x00000711,0x00000007,0x0004003d,0x00000006, + 0x000006bc,0x00000104,0x00050089,0x00000006,0x000006bd,0x000006bc,0x000003bb,0x0003003e, + 0x000006be,0x000006bd,0x00050039,0x00000029,0x000006bf,0x0000002c,0x000006be,0x0003003e, + 0x000006bb,0x000006bf,0x00050041,0x00000007,0x000006c1,0x000006bb,0x00000183,0x0004003d, + 0x00000006,0x000006c2,0x000006c1,0x0004003d,0x00000006,0x000006c3,0x00000104,0x000500c2, + 0x00000006,0x000006c5,0x000006c3,0x000006c4,0x00050089,0x00000006,0x000006c6,0x000006c5, + 0x0000013e,0x00050084,0x00000006,0x000006c7,0x000004a3,0x000006c6,0x00050080,0x00000006, + 0x000006c8,0x000006c2,0x000006c7,0x0003003e,0x000006c0,0x000006c8,0x00050041,0x00000007, + 0x000006ca,0x000006bb,0x00000145,0x0004003d,0x00000006,0x000006cb,0x000006ca,0x0004003d, + 0x00000006,0x000006cc,0x00000104,0x000500c2,0x00000006,0x000006ce,0x000006cc,0x000006cd, + 0x00050084,0x00000006,0x000006cf,0x000004a3,0x000006ce,0x00050080,0x00000006,0x000006d0, + 0x000006cb,0x000006cf,0x0003003e,0x000006c9,0x000006d0,0x0004003d,0x00000006,0x000006d2, + 0x000006c0,0x0003003e,0x000006d1,0x000006d2,0x0004003d,0x00000006,0x000006d4,0x000006c9, + 0x0003003e,0x000006d3,0x000006d4,0x0004003d,0x00000029,0x000006d6,0x00000103,0x0003003e, + 0x000006d5,0x000006d6,0x0004003d,0x00000006,0x000006d8,0x00000104,0x0003003e,0x000006d7, + 0x000006d8,0x0004003d,0x00000006,0x000006da,0x00000105,0x0003003e,0x000006d9,0x000006da, + 0x0004003d,0x00000006,0x000006dc,0x00000107,0x0003003e,0x000006db,0x000006dc,0x000a0039, + 0x00000002,0x000006dd,0x000000d0,0x000006d1,0x000006d3,0x000006d5,0x000006d7,0x000006d9, + 0x000006db,0x0004003d,0x00000006,0x000006df,0x000006c0,0x0003003e,0x000006de,0x000006df, + 0x0004003d,0x00000006,0x000006e1,0x000006c9,0x0003003e,0x000006e0,0x000006e1,0x0004003d, + 0x00000029,0x000006e3,0x00000103,0x0003003e,0x000006e2,0x000006e3,0x0004003d,0x00000006, + 0x000006e5,0x00000104,0x0003003e,0x000006e4,0x000006e5,0x0003003e,0x000006e6,0x0000013e, + 0x0004003d,0x00000006,0x000006e8,0x00000105,0x0003003e,0x000006e7,0x000006e8,0x0004003d, + 0x00000006,0x000006ea,0x00000107,0x0003003e,0x000006e9,0x000006ea,0x000b0039,0x00000002, + 0x000006eb,0x00000100,0x000006de,0x000006e0,0x000006e2,0x000006e4,0x000006e6,0x000006e7, + 0x000006e9,0x0004003d,0x00000006,0x000006ec,0x00000105,0x000500b2,0x0000009d,0x000006ed, + 0x000006ec,0x000005da,0x000300f7,0x000006ef,0x00000000,0x000400fa,0x000006ed,0x000006ee, + 0x000006ef,0x000200f8,0x000006ee,0x000100fd,0x000200f8,0x000006ef,0x0004003d,0x00000006, + 0x000006f2,0x00000106,0x0003003e,0x000006f1,0x000006f2,0x0004003d,0x00000006,0x000006f4, + 0x00000104,0x0003003e,0x000006f3,0x000006f4,0x0004003d,0x00000006,0x000006f6,0x00000107, + 0x0003003e,0x000006f5,0x000006f6,0x00070039,0x0000009d,0x000006f7,0x000000a2,0x000006f1, + 0x000006f3,0x000006f5,0x000300f7,0x000006f9,0x00000000,0x000400fa,0x000006f7,0x000006f8, + 0x000006f9,0x000200f8,0x000006f8,0x000100fd,0x000200f8,0x000006f9,0x0004003d,0x00000006, + 0x000006fc,0x00000107,0x0003003e,0x000006fb,0x000006fc,0x00050039,0x00000002,0x000006fd, + 0x00000076,0x000006fb,0x0004003d,0x00000006,0x000006ff,0x000006c0,0x0003003e,0x000006fe, + 0x000006ff,0x0004003d,0x00000006,0x00000701,0x000006c9,0x0003003e,0x00000700,0x00000701, + 0x0004003d,0x00000006,0x00000703,0x00000105,0x0003003e,0x00000702,0x00000703,0x0004003d, + 0x00000006,0x00000705,0x00000107,0x0003003e,0x00000704,0x00000705,0x00080039,0x00000002, + 0x00000706,0x000000f6,0x000006fe,0x00000700,0x00000702,0x00000704,0x0004003d,0x00000006, + 0x00000708,0x000006c0,0x0003003e,0x00000707,0x00000708,0x0004003d,0x00000006,0x0000070a, + 0x000006c9,0x0003003e,0x00000709,0x0000070a,0x0003003e,0x0000070b,0x00000369,0x0004003d, + 0x00000006,0x0000070d,0x00000104,0x0003003e,0x0000070c,0x0000070d,0x0003003e,0x0000070e, + 0x000004a3,0x0004003d,0x00000006,0x00000710,0x00000105,0x0003003e,0x0000070f,0x00000710, + 0x0004003d,0x00000006,0x00000712,0x00000107,0x0003003e,0x00000711,0x00000712,0x000b0039, + 0x00000002,0x00000713,0x00000100,0x00000707,0x00000709,0x0000070b,0x0000070c,0x0000070e, + 0x0000070f,0x00000711,0x000100fd,0x00010038,0x00050036,0x00000002,0x00000111,0x00000000, + 0x0000010a,0x00030037,0x000000a8,0x0000010b,0x00030037,0x00000007,0x0000010c,0x00030037, + 0x00000007,0x0000010d,0x00030037,0x00000007,0x0000010e,0x00030037,0x00000007,0x0000010f, + 0x00030037,0x000000a8,0x00000110,0x000200f8,0x00000112,0x0004003b,0x000000a8,0x00000717, + 0x00000007,0x0004003b,0x00000007,0x00000718,0x00000007,0x0004003b,0x00000007,0x0000071a, + 0x00000007,0x0004003b,0x00000007,0x0000071c,0x00000007,0x0004003b,0x00000007,0x0000071e, + 0x00000007,0x0004003d,0x00000029,0x00000714,0x0000010b,0x0004003d,0x00000029,0x00000715, + 0x00000110,0x00050080,0x00000029,0x00000716,0x00000714,0x00000715,0x0003003e,0x00000717, + 0x00000716,0x0004003d,0x00000006,0x00000719,0x0000010c,0x0003003e,0x00000718,0x00000719, + 0x0004003d,0x00000006,0x0000071b,0x0000010d,0x0003003e,0x0000071a,0x0000071b,0x0004003d, + 0x00000006,0x0000071d,0x0000010e,0x0003003e,0x0000071c,0x0000071d,0x0004003d,0x00000006, + 0x0000071f,0x0000010f,0x0003003e,0x0000071e,0x0000071f,0x00090039,0x00000002,0x00000720, + 0x00000108,0x00000717,0x00000718,0x0000071a,0x0000071c,0x0000071e,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x00000118,0x00000000,0x00000115,0x00030037,0x00000114,0x00000116, + 0x00030037,0x00000007,0x00000117,0x000200f8,0x00000119,0x0004003b,0x000000a8,0x00000729, + 0x00000007,0x0004003b,0x00000007,0x0000072a,0x00000007,0x0004003b,0x00000007,0x0000072b, + 0x00000007,0x0004003b,0x00000007,0x0000072c,0x00000007,0x0004003b,0x00000007,0x0000072d, + 0x00000007,0x0004003b,0x000000a8,0x0000072e,0x00000007,0x0004003d,0x00000113,0x00000721, + 0x00000116,0x0007004f,0x00000029,0x00000722,0x00000721,0x00000721,0x00000000,0x00000001, + 0x0004003d,0x00000006,0x00000723,0x00000117,0x00040039,0x00000006,0x00000724,0x00000036, + 0x00040039,0x00000006,0x00000725,0x00000038,0x00050041,0x00000007,0x00000726,0x00000116, + 0x0000013e,0x0004003d,0x00000006,0x00000727,0x00000726,0x00040039,0x00000029,0x00000728, + 0x0000003b,0x0003003e,0x00000729,0x00000722,0x0003003e,0x0000072a,0x00000723,0x0003003e, + 0x0000072b,0x00000724,0x0003003e,0x0000072c,0x00000725,0x0003003e,0x0000072d,0x00000727, + 0x0003003e,0x0000072e,0x00000728,0x000a0039,0x00000002,0x0000072f,0x00000111,0x00000729, + 0x0000072a,0x0000072b,0x0000072c,0x0000072d,0x0000072e,0x000100fd,0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_luma_pyramid_nowave_comp_spv.h b/gpu/vk/shaders/fsr3_luma_pyramid_nowave_comp_spv.h new file mode 100644 index 000000000..62fd5bf40 --- /dev/null +++ b/gpu/vk/shaders/fsr3_luma_pyramid_nowave_comp_spv.h @@ -0,0 +1,1567 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_LUMA_PYRAMID_NOWAVE_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x00000787,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000031,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e, + 0x00000000,0x00000001,0x0007000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000771, + 0x00000773,0x00060010,0x00000004,0x00000011,0x00000100,0x00000001,0x00000001,0x00030003, + 0x00000002,0x000001c2,0x000b0004,0x455f4c47,0x735f5458,0x6c706d61,0x656c7265,0x745f7373, + 0x75747865,0x665f6572,0x74636e75,0x736e6f69,0x00000000,0x000b0004,0x455f4c47,0x735f5458, + 0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570, + 0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f, + 0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65, + 0x74636572,0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x000a0005,0x0000000c, + 0x42786666,0x69667469,0x45646c65,0x61727478,0x75287463,0x31753b31,0x3b31753b,0x00000000, + 0x00030005,0x00000009,0x00637273,0x00030005,0x0000000a,0x0066666f,0x00040005,0x0000000b, + 0x73746962,0x00000000,0x000a0005,0x00000011,0x42786666,0x69667469,0x49646c65,0x7265736e, + 0x73614d74,0x3175286b,0x3b31753b,0x003b3175,0x00030005,0x0000000e,0x00637273,0x00030005, + 0x0000000f,0x00736e69,0x00040005,0x00000010,0x73746962,0x00000000,0x00060005,0x00000018, + 0x4d786666,0x69286e69,0x31693b31,0x0000003b,0x00030005,0x00000016,0x00000078,0x00030005, + 0x00000017,0x00000079,0x00060005,0x0000001f,0x4d786666,0x66287861,0x31663b31,0x0000003b, + 0x00030005,0x0000001d,0x00000078,0x00030005,0x0000001e,0x00000079,0x00060005,0x00000023, + 0x4d786666,0x69287861,0x31693b31,0x0000003b,0x00030005,0x00000021,0x00000078,0x00030005, + 0x00000022,0x00000079,0x00060005,0x00000027,0x50786666,0x6628776f,0x31663b31,0x0000003b, + 0x00030005,0x00000025,0x00000078,0x00030005,0x00000026,0x00000079,0x000a0005,0x0000002c, + 0x52786666,0x70616d65,0x57726f46,0x52657661,0x63756465,0x6e6f6974,0x3b317528,0x00000000, + 0x00030005,0x0000002b,0x00000061,0x00050005,0x00000030,0x646e6552,0x69537265,0x0028657a, + 0x00050005,0x00000033,0x746c6544,0x6d695461,0x00002865,0x00050005,0x00000036,0x4370694d, + 0x746e756f,0x00000028,0x00060005,0x00000038,0x576d754e,0x476b726f,0x70756f72,0x00002873, + 0x00070005,0x0000003b,0x6b726f57,0x756f7247,0x66664f70,0x28746573,0x00000000,0x00080005, + 0x00000040,0x64616f4c,0x74726146,0x74736568,0x74706544,0x69762868,0x00003b32,0x00040005, + 0x0000003f,0x50785069,0x0000736f,0x000a0005,0x00000045,0x726f7453,0x72614665,0x73656874, + 0x70654474,0x694d6874,0x76283170,0x663b3269,0x00003b31,0x00040005,0x00000043,0x50785069, + 0x0000736f,0x00040005,0x00000044,0x70654466,0x00006874,0x00080005,0x00000048,0x64616f4c, + 0x72727543,0x4c746e65,0x28616d75,0x3b326976,0x00000000,0x00040005,0x00000047,0x50785069, + 0x0000736f,0x00060005,0x0000004c,0x64616f4c,0x6d617246,0x666e4965,0x0000286f,0x00070005, + 0x00000051,0x726f7453,0x61724665,0x6e49656d,0x76286f66,0x003b3466,0x00040005,0x00000050, + 0x666e4966,0x0000006f,0x00080005,0x00000057,0x6f4c5752,0x79506461,0x696d6172,0x69762864, + 0x31753b32,0x0000003b,0x00040005,0x00000055,0x50785069,0x0000736f,0x00040005,0x00000056, + 0x65646e69,0x00000078,0x00090005,0x0000005e,0x726f7453,0x72795065,0x64696d61,0x32697628, + 0x3266763b,0x3b31753b,0x00000000,0x00040005,0x0000005b,0x50785069,0x0000736f,0x00050005, + 0x0000005c,0x5674756f,0x65756c61,0x00000000,0x00040005,0x0000005d,0x65646e69,0x00000078, + 0x000a0005,0x00000062,0x5f445053,0x72636e49,0x65736165,0x6d6f7441,0x6f436369,0x65746e75, + 0x31752872,0x0000003b,0x00050005,0x00000061,0x43647073,0x746e756f,0x00007265,0x00080005, + 0x00000064,0x5f445053,0x65736552,0x6f744174,0x4363696d,0x746e756f,0x00287265,0x00080005, + 0x0000006a,0x6d616c43,0x616f4c70,0x69762864,0x69763b32,0x69763b32,0x00003b32,0x00050005, + 0x00000067,0x53785069,0x6c706d61,0x00000065,0x00050005,0x00000068,0x4f785069,0x65736666, + 0x00000074,0x00060005,0x00000069,0x78655469,0x65727574,0x657a6953,0x00000000,0x000a0005, + 0x0000006e,0x706d6f43,0x41657475,0x456f7475,0x736f7078,0x46657275,0x4c6d6f72,0x28677661, + 0x003b3166,0x00040005,0x0000006d,0x6776614c,0x00000000,0x000a0005,0x00000071,0x49647053, + 0x6572636e,0x41657361,0x696d6f74,0x756f4363,0x7265746e,0x3b317528,0x00000000,0x00040005, + 0x00000070,0x63696c73,0x00000065,0x00080005,0x00000073,0x47647053,0x74417465,0x63696d6f, + 0x6e756f43,0x28726574,0x00000000,0x00090005,0x00000076,0x52647053,0x74657365,0x6d6f7441, + 0x6f436369,0x65746e75,0x31752872,0x0000003b,0x00040005,0x00000075,0x63696c73,0x00000065, + 0x00090005,0x0000007b,0x4c647053,0x5364616f,0x6372756f,0x616d4965,0x76286567,0x753b3266, + 0x00003b31,0x00040005,0x00000079,0x50785069,0x0000736f,0x00040005,0x0000007a,0x63696c73, + 0x00000065,0x00060005,0x00000080,0x4c647053,0x2864616f,0x3b326976,0x003b3175,0x00030005, + 0x0000007e,0x00786574,0x00040005,0x0000007f,0x63696c73,0x00000065,0x00090005,0x00000087, + 0x52647053,0x63756465,0x76283465,0x763b3466,0x763b3466,0x763b3466,0x003b3466,0x00030005, + 0x00000083,0x00003076,0x00030005,0x00000084,0x00003176,0x00030005,0x00000085,0x00003276, + 0x00030005,0x00000086,0x00003376,0x00080005,0x0000008e,0x53647053,0x65726f74,0x32697628, + 0x3466763b,0x3b31753b,0x003b3175,0x00030005,0x0000008a,0x00786970,0x00050005,0x0000008b, + 0x5674756f,0x65756c61,0x00000000,0x00040005,0x0000008c,0x65646e69,0x00000078,0x00040005, + 0x0000008d,0x63696c73,0x00000065,0x00090005,0x00000093,0x4c647053,0x4964616f,0x7265746e, + 0x6964656d,0x28657461,0x753b3175,0x00003b31,0x00030005,0x00000091,0x00000078,0x00030005, + 0x00000092,0x00000079,0x000a0005,0x00000099,0x53647053,0x65726f74,0x65746e49,0x64656d72, + 0x65746169,0x3b317528,0x763b3175,0x003b3466,0x00030005,0x00000096,0x00000078,0x00030005, + 0x00000097,0x00000079,0x00040005,0x00000098,0x756c6176,0x00000065,0x000a0005,0x0000009b, + 0x53786666,0x6f576470,0x72676b72,0x5370756f,0x66667568,0x6142656c,0x65697272,0x00002872, + 0x00090005,0x000000a2,0x45647053,0x57746978,0x676b726f,0x70756f72,0x3b317528,0x753b3175, + 0x00003b31,0x00060005,0x0000009f,0x576d756e,0x476b726f,0x70756f72,0x00000073,0x00080005, + 0x000000a0,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00040005, + 0x000000a1,0x63696c73,0x00000065,0x000c0005,0x000000aa,0x52647053,0x63756465,0x746e4965, + 0x656d7265,0x74616964,0x75762865,0x75763b32,0x75763b32,0x75763b32,0x00003b32,0x00030005, + 0x000000a6,0x00003069,0x00030005,0x000000a7,0x00003169,0x00030005,0x000000a8,0x00003269, + 0x00030005,0x000000a9,0x00003369,0x000b0005,0x000000b2,0x52647053,0x63756465,0x616f4c65, + 0x76283464,0x763b3275,0x763b3275,0x763b3275,0x753b3275,0x00003b31,0x00030005,0x000000ad, + 0x00003069,0x00030005,0x000000ae,0x00003169,0x00030005,0x000000af,0x00003269,0x00030005, + 0x000000b0,0x00003369,0x00040005,0x000000b1,0x63696c73,0x00000065,0x00080005,0x000000b7, + 0x52647053,0x63756465,0x616f4c65,0x76283464,0x753b3275,0x00003b31,0x00040005,0x000000b5, + 0x65736162,0x00000000,0x00040005,0x000000b6,0x63696c73,0x00000065,0x000e0005,0x000000be, + 0x52647053,0x63756465,0x616f4c65,0x756f5364,0x49656372,0x6567616d,0x75762834,0x75763b32, + 0x75763b32,0x75763b32,0x31753b32,0x0000003b,0x00030005,0x000000b9,0x00003069,0x00030005, + 0x000000ba,0x00003169,0x00030005,0x000000bb,0x00003269,0x00030005,0x000000bc,0x00003369, + 0x00040005,0x000000bd,0x63696c73,0x00000065,0x000b0005,0x000000c2,0x52647053,0x63756465, + 0x616f4c65,0x756f5364,0x49656372,0x6567616d,0x32757628,0x3b31753b,0x00000000,0x00040005, + 0x000000c0,0x65736162,0x00000000,0x00040005,0x000000c1,0x63696c73,0x00000065,0x000e0005, + 0x000000cb,0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x5f305f73,0x444c5f31,0x31752853, + 0x3b31753b,0x3b327576,0x753b3175,0x31753b31,0x0000003b,0x00030005,0x000000c5,0x00000078, + 0x00030005,0x000000c6,0x00000079,0x00050005,0x000000c7,0x6b726f77,0x756f7247,0x00444970, + 0x00080005,0x000000c8,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000, + 0x00030005,0x000000c9,0x0070696d,0x00040005,0x000000ca,0x63696c73,0x00000065,0x000d0005, + 0x000000d3,0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x5f305f73,0x31752831,0x3b31753b, + 0x3b327576,0x753b3175,0x31753b31,0x0000003b,0x00030005,0x000000cd,0x00000078,0x00030005, + 0x000000ce,0x00000079,0x00050005,0x000000cf,0x6b726f77,0x756f7247,0x00444970,0x00080005, + 0x000000d0,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00030005, + 0x000000d1,0x0070696d,0x00040005,0x000000d2,0x63696c73,0x00000065,0x000c0005,0x000000db, + 0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x7528325f,0x31753b31,0x3275763b,0x3b31753b, + 0x753b3175,0x00003b31,0x00030005,0x000000d5,0x00000078,0x00030005,0x000000d6,0x00000079, + 0x00050005,0x000000d7,0x6b726f77,0x756f7247,0x00444970,0x00080005,0x000000d8,0x61636f6c, + 0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00030005,0x000000d9,0x0070696d, + 0x00040005,0x000000da,0x63696c73,0x00000065,0x000c0005,0x000000e3,0x44647053,0x736e776f, + 0x6c706d61,0x70694d65,0x7528335f,0x31753b31,0x3275763b,0x3b31753b,0x753b3175,0x00003b31, + 0x00030005,0x000000dd,0x00000078,0x00030005,0x000000de,0x00000079,0x00050005,0x000000df, + 0x6b726f77,0x756f7247,0x00444970,0x00080005,0x000000e0,0x61636f6c,0x766e496c,0x7461636f, + 0x496e6f69,0x7865646e,0x00000000,0x00030005,0x000000e1,0x0070696d,0x00040005,0x000000e2, + 0x63696c73,0x00000065,0x000c0005,0x000000eb,0x44647053,0x736e776f,0x6c706d61,0x70694d65, + 0x7528345f,0x31753b31,0x3275763b,0x3b31753b,0x753b3175,0x00003b31,0x00030005,0x000000e5, + 0x00000078,0x00030005,0x000000e6,0x00000079,0x00050005,0x000000e7,0x6b726f77,0x756f7247, + 0x00444970,0x00080005,0x000000e8,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e, + 0x00000000,0x00030005,0x000000e9,0x0070696d,0x00040005,0x000000ea,0x63696c73,0x00000065, + 0x000b0005,0x000000f2,0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x7628355f,0x753b3275, + 0x31753b31,0x3b31753b,0x00000000,0x00050005,0x000000ee,0x6b726f77,0x756f7247,0x00444970, + 0x00080005,0x000000ef,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000, + 0x00030005,0x000000f0,0x0070696d,0x00040005,0x000000f1,0x63696c73,0x00000065,0x000b0005, + 0x000000f9,0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x5f365f73,0x31752837,0x3b31753b, + 0x753b3175,0x00003b31,0x00030005,0x000000f5,0x00000078,0x00030005,0x000000f6,0x00000079, + 0x00040005,0x000000f7,0x7370696d,0x00000000,0x00040005,0x000000f8,0x63696c73,0x00000065, + 0x000e0005,0x00000103,0x44647053,0x736e776f,0x6c706d61,0x78654e65,0x756f4674,0x31752872, + 0x3b31753b,0x3b327576,0x753b3175,0x31753b31,0x3b31753b,0x00000000,0x00030005,0x000000fc, + 0x00000078,0x00030005,0x000000fd,0x00000079,0x00050005,0x000000fe,0x6b726f77,0x756f7247, + 0x00444970,0x00080005,0x000000ff,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e, + 0x00000000,0x00040005,0x00000100,0x65736162,0x0070694d,0x00040005,0x00000101,0x7370696d, + 0x00000000,0x00040005,0x00000102,0x63696c73,0x00000065,0x000a0005,0x0000010b,0x44647053, + 0x736e776f,0x6c706d61,0x75762865,0x31753b32,0x3b31753b,0x753b3175,0x00003b31,0x00050005, + 0x00000106,0x6b726f77,0x756f7247,0x00444970,0x00080005,0x00000107,0x61636f6c,0x766e496c, + 0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00040005,0x00000108,0x7370696d,0x00000000, + 0x00060005,0x00000109,0x576d756e,0x476b726f,0x70756f72,0x00000073,0x00040005,0x0000010a, + 0x63696c73,0x00000065,0x000b0005,0x00000114,0x44647053,0x736e776f,0x6c706d61,0x75762865, + 0x31753b32,0x3b31753b,0x753b3175,0x75763b31,0x00003b32,0x00050005,0x0000010e,0x6b726f77, + 0x756f7247,0x00444970,0x00080005,0x0000010f,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69, + 0x7865646e,0x00000000,0x00040005,0x00000110,0x7370696d,0x00000000,0x00060005,0x00000111, + 0x576d756e,0x476b726f,0x70756f72,0x00000073,0x00040005,0x00000112,0x63696c73,0x00000065, + 0x00060005,0x00000113,0x6b726f77,0x756f7247,0x66664f70,0x00746573,0x00090005,0x0000011b, + 0x706d6f43,0x41657475,0x456f7475,0x736f7078,0x28657275,0x3b337576,0x003b3175,0x00050005, + 0x00000119,0x6b726f57,0x756f7247,0x00644970,0x00070005,0x0000011a,0x61636f4c,0x7268546c, + 0x49646165,0x7865646e,0x00000000,0x00040005,0x00000143,0x61726170,0x0000006d,0x00040005, + 0x00000145,0x61726170,0x0000006d,0x00040005,0x00000146,0x61726170,0x0000006d,0x00040005, + 0x00000149,0x61726170,0x0000006d,0x00040005,0x0000014a,0x61726170,0x0000006d,0x00040005, + 0x0000014c,0x61726170,0x0000006d,0x00040005,0x0000014e,0x61726170,0x0000006d,0x00040005, + 0x00000150,0x61726170,0x0000006d,0x00040005,0x00000151,0x61726170,0x0000006d,0x00040005, + 0x00000153,0x61726170,0x0000006d,0x00040005,0x00000155,0x61726170,0x0000006d,0x00040005, + 0x00000156,0x61726170,0x0000006d,0x00040005,0x00000158,0x61726170,0x0000006d,0x00040005, + 0x00000159,0x61726170,0x0000006d,0x00040005,0x0000015a,0x61726170,0x0000006d,0x00070005, + 0x0000015f,0x53466263,0x50553352,0x4c414353,0x745f5245,0x00000000,0x00060006,0x0000015f, + 0x00000000,0x6e655269,0x53726564,0x00657a69,0x000a0006,0x0000015f,0x00000001,0x65725069, + 0x756f6976,0x61724673,0x6552656d,0x7265646e,0x657a6953,0x00000000,0x00070006,0x0000015f, + 0x00000002,0x73705569,0x656c6163,0x657a6953,0x00000000,0x000a0006,0x0000015f,0x00000003, + 0x65725069,0x756f6976,0x61724673,0x7055656d,0x6c616373,0x7a695365,0x00000065,0x00070006, + 0x0000015f,0x00000004,0x78614d69,0x646e6552,0x69537265,0x0000657a,0x00070006,0x0000015f, + 0x00000005,0x78614d69,0x63737055,0x53656c61,0x00657a69,0x00080006,0x0000015f,0x00000006, + 0x76654466,0x54656369,0x6569566f,0x70654477,0x00006874,0x00050006,0x0000015f,0x00000007, + 0x74694a66,0x00726574,0x00090006,0x0000015f,0x00000008,0x65725066,0x756f6976,0x61724673, + 0x694a656d,0x72657474,0x00000000,0x00080006,0x0000015f,0x00000009,0x746f4d66,0x566e6f69, + 0x6f746365,0x61635372,0x0000656c,0x00080006,0x0000015f,0x0000000a,0x776f4466,0x6163736e, + 0x6146656c,0x726f7463,0x00000000,0x000b0006,0x0000015f,0x0000000b,0x746f4d66,0x566e6f69, + 0x6f746365,0x74694a72,0x43726574,0x65636e61,0x74616c6c,0x006e6f69,0x00060006,0x0000015f, + 0x0000000c,0x6e615466,0x666c6148,0x00564f46,0x00090006,0x0000015f,0x0000000d,0x74694a66, + 0x53726574,0x65757165,0x4c65636e,0x74676e65,0x00000068,0x00060006,0x0000015f,0x0000000e, + 0x6c654466,0x69546174,0x0000656d,0x00080006,0x0000015f,0x0000000f,0x6c654466,0x72506174, + 0x70784565,0x7275736f,0x00000065,0x000a0006,0x0000015f,0x00000010,0x65695666,0x61705377, + 0x6f546563,0x6574654d,0x61467372,0x726f7463,0x00000000,0x00060006,0x0000015f,0x00000011, + 0x61724666,0x6e49656d,0x00786564,0x00070006,0x0000015f,0x00000012,0x6c655666,0x7469636f, + 0x63614679,0x00726f74,0x00080006,0x0000015f,0x00000013,0x61655266,0x76697463,0x73656e65, + 0x61635373,0x0000656c,0x00080006,0x0000015f,0x00000014,0x61685366,0x676e6964,0x6e616843, + 0x63536567,0x00656c61,0x000a0006,0x0000015f,0x00000015,0x63634166,0x6c756d75,0x6f697461, + 0x6464416e,0x65506465,0x61724672,0x0000656d,0x000b0006,0x0000015f,0x00000016,0x6e694d66, + 0x6f736944,0x756c6363,0x6e6f6973,0x75636341,0x616c756d,0x6e6f6974,0x00000000,0x00060005, + 0x00000161,0x53466263,0x70553352,0x6c616373,0x00007265,0x00040005,0x0000016d,0x50536263, + 0x00745f44,0x00050006,0x0000016d,0x00000000,0x7370696d,0x00000000,0x00070006,0x0000016d, + 0x00000001,0x576d756e,0x476b726f,0x70756f72,0x00000073,0x00070006,0x0000016d,0x00000002, + 0x6b726f77,0x756f7247,0x66664f70,0x00746573,0x00060006,0x0000016d,0x00000003,0x646e6572, + 0x69537265,0x0000657a,0x00040005,0x0000016f,0x50536263,0x00000044,0x00070005,0x00000182, + 0x61665f72,0x65687472,0x645f7473,0x68747065,0x00000000,0x00080005,0x0000018c,0x665f7772, + 0x68747261,0x5f747365,0x74706564,0x696d5f68,0x00003170,0x00060005,0x00000192,0x75635f72, + 0x6e657272,0x756c5f74,0x0000616d,0x00060005,0x0000019b,0x665f7772,0x656d6172,0x666e695f, + 0x0000006f,0x00050005,0x000001a9,0x735f7772,0x6d5f6470,0x00307069,0x00050005,0x000001b3, + 0x735f7772,0x6d5f6470,0x00317069,0x00050005,0x000001bd,0x735f7772,0x6d5f6470,0x00327069, + 0x00050005,0x000001c7,0x735f7772,0x6d5f6470,0x00337069,0x00050005,0x000001d2,0x735f7772, + 0x6d5f6470,0x00347069,0x00050005,0x000001dd,0x735f7772,0x6d5f6470,0x00357069,0x00080005, + 0x00000224,0x735f7772,0x675f6470,0x61626f6c,0x74615f6c,0x63696d6f,0x00000000,0x00040005, + 0x0000022b,0x75736572,0x0000746c,0x00040005,0x00000232,0x61726170,0x0000006d,0x00040005, + 0x00000235,0x61726170,0x0000006d,0x00040005,0x00000237,0x61726170,0x0000006d,0x00040005, + 0x00000238,0x61726170,0x0000006d,0x00040005,0x0000023e,0x61726170,0x0000006d,0x00040005, + 0x00000241,0x61726170,0x0000006d,0x00040005,0x00000243,0x61726170,0x0000006d,0x00040005, + 0x00000244,0x61726170,0x0000006d,0x00060005,0x0000024c,0x6f707845,0x65727573,0x314f5349, + 0x00003030,0x00040005,0x00000253,0x78616d4c,0x00000000,0x00040005,0x00000256,0x61726170, + 0x0000006d,0x00040005,0x00000257,0x61726170,0x0000006d,0x00050005,0x00000261,0x43647073, + 0x746e756f,0x00007265,0x00040005,0x00000262,0x61726170,0x0000006d,0x00060005,0x0000026a, + 0x53785069,0x6c706d61,0x736f5065,0x00000000,0x00040005,0x0000026e,0x61726170,0x0000006d, + 0x00040005,0x0000026f,0x61726170,0x0000006d,0x00040005,0x00000270,0x61726170,0x0000006d, + 0x00040005,0x00000272,0x6d754c66,0x00000061,0x00040005,0x00000273,0x61726170,0x0000006d, + 0x00050005,0x00000276,0x676f4c66,0x616d754c,0x00000000,0x00040005,0x0000027a,0x61726170, + 0x0000006d,0x00040005,0x0000027b,0x61726170,0x0000006d,0x00080005,0x0000027d,0x72614666, + 0x73656874,0x70654474,0x6e496874,0x6574654d,0x00007372,0x00040005,0x0000027e,0x61726170, + 0x0000006d,0x00040005,0x00000281,0x74754f66,0x00747570,0x00040005,0x0000028c,0x61726170, + 0x0000006d,0x00040005,0x0000028e,0x61726170,0x0000006d,0x00040005,0x000002a4,0x61726170, + 0x0000006d,0x00040005,0x000002a6,0x61726170,0x0000006d,0x00040005,0x000002a9,0x61726170, + 0x0000006d,0x00040005,0x000002b1,0x61726170,0x0000006d,0x00040005,0x000002b3,0x61726170, + 0x0000006d,0x00050005,0x000002c3,0x6d617266,0x666e4965,0x0000006f,0x00060005,0x000002c5, + 0x65635366,0x7641656e,0x6d754c67,0x00000061,0x00060005,0x000002c8,0x65725066,0x676f4c76, + 0x616d754c,0x00000000,0x00050005,0x000002cb,0x676f4c66,0x616d754c,0x00000000,0x00040005, + 0x000002dd,0x61726170,0x0000006d,0x00040005,0x000002de,0x61726170,0x0000006d,0x00040005, + 0x000002e1,0x61726170,0x0000006d,0x00040005,0x000002e9,0x61726170,0x0000006d,0x00070005, + 0x000002f0,0x49647073,0x7265746e,0x6964656d,0x52657461,0x00000000,0x00070005,0x000002f6, + 0x49647073,0x7265746e,0x6964656d,0x47657461,0x00000000,0x00070005,0x000002fb,0x49647073, + 0x7265746e,0x6964656d,0x42657461,0x00000000,0x00070005,0x00000300,0x49647073,0x7265746e, + 0x6964656d,0x41657461,0x00000000,0x00040005,0x00000322,0x61726170,0x0000006d,0x00030005, + 0x0000032c,0x00003076,0x00040005,0x0000032d,0x61726170,0x0000006d,0x00040005,0x00000330, + 0x61726170,0x0000006d,0x00030005,0x00000334,0x00003176,0x00040005,0x00000335,0x61726170, + 0x0000006d,0x00040005,0x00000338,0x61726170,0x0000006d,0x00030005,0x0000033c,0x00003276, + 0x00040005,0x0000033d,0x61726170,0x0000006d,0x00040005,0x00000340,0x61726170,0x0000006d, + 0x00030005,0x00000344,0x00003376,0x00040005,0x00000345,0x61726170,0x0000006d,0x00040005, + 0x00000348,0x61726170,0x0000006d,0x00040005,0x0000034c,0x61726170,0x0000006d,0x00040005, + 0x0000034e,0x61726170,0x0000006d,0x00040005,0x00000350,0x61726170,0x0000006d,0x00040005, + 0x00000352,0x61726170,0x0000006d,0x00030005,0x00000357,0x00003076,0x00040005,0x0000035a, + 0x61726170,0x0000006d,0x00040005,0x0000035b,0x61726170,0x0000006d,0x00030005,0x0000035e, + 0x00003176,0x00040005,0x00000361,0x61726170,0x0000006d,0x00040005,0x00000362,0x61726170, + 0x0000006d,0x00030005,0x00000365,0x00003276,0x00040005,0x00000368,0x61726170,0x0000006d, + 0x00040005,0x00000369,0x61726170,0x0000006d,0x00030005,0x0000036c,0x00003376,0x00040005, + 0x0000036f,0x61726170,0x0000006d,0x00040005,0x00000370,0x61726170,0x0000006d,0x00040005, + 0x00000373,0x61726170,0x0000006d,0x00040005,0x00000375,0x61726170,0x0000006d,0x00040005, + 0x00000377,0x61726170,0x0000006d,0x00040005,0x00000379,0x61726170,0x0000006d,0x00040005, + 0x0000038a,0x61726170,0x0000006d,0x00040005,0x0000038b,0x61726170,0x0000006d,0x00040005, + 0x0000038c,0x61726170,0x0000006d,0x00040005,0x0000038d,0x61726170,0x0000006d,0x00040005, + 0x0000038e,0x61726170,0x0000006d,0x00030005,0x00000393,0x00003076,0x00040005,0x00000397, + 0x61726170,0x0000006d,0x00040005,0x00000398,0x61726170,0x0000006d,0x00030005,0x0000039b, + 0x00003176,0x00040005,0x0000039f,0x61726170,0x0000006d,0x00040005,0x000003a0,0x61726170, + 0x0000006d,0x00030005,0x000003a3,0x00003276,0x00040005,0x000003a7,0x61726170,0x0000006d, + 0x00040005,0x000003a8,0x61726170,0x0000006d,0x00030005,0x000003ab,0x00003376,0x00040005, + 0x000003af,0x61726170,0x0000006d,0x00040005,0x000003b0,0x61726170,0x0000006d,0x00040005, + 0x000003b3,0x61726170,0x0000006d,0x00040005,0x000003b5,0x61726170,0x0000006d,0x00040005, + 0x000003b7,0x61726170,0x0000006d,0x00040005,0x000003b9,0x61726170,0x0000006d,0x00040005, + 0x000003c6,0x61726170,0x0000006d,0x00040005,0x000003c7,0x61726170,0x0000006d,0x00040005, + 0x000003c8,0x61726170,0x0000006d,0x00040005,0x000003c9,0x61726170,0x0000006d,0x00040005, + 0x000003ca,0x61726170,0x0000006d,0x00030005,0x000003cf,0x00786574,0x00030005,0x000003dd, + 0x00786970,0x00030005,0x000003eb,0x00000076,0x00040005,0x000003ee,0x61726170,0x0000006d, + 0x00040005,0x000003ef,0x61726170,0x0000006d,0x00040005,0x000003f3,0x61726170,0x0000006d, + 0x00040005,0x000003f5,0x61726170,0x0000006d,0x00040005,0x000003f8,0x61726170,0x0000006d, + 0x00040005,0x000003f9,0x61726170,0x0000006d,0x00040005,0x00000416,0x61726170,0x0000006d, + 0x00040005,0x00000417,0x61726170,0x0000006d,0x00040005,0x0000041b,0x61726170,0x0000006d, + 0x00040005,0x0000041d,0x61726170,0x0000006d,0x00040005,0x00000420,0x61726170,0x0000006d, + 0x00040005,0x00000421,0x61726170,0x0000006d,0x00040005,0x0000043e,0x61726170,0x0000006d, + 0x00040005,0x0000043f,0x61726170,0x0000006d,0x00040005,0x00000443,0x61726170,0x0000006d, + 0x00040005,0x00000445,0x61726170,0x0000006d,0x00040005,0x00000448,0x61726170,0x0000006d, + 0x00040005,0x00000449,0x61726170,0x0000006d,0x00040005,0x00000469,0x61726170,0x0000006d, + 0x00040005,0x0000046a,0x61726170,0x0000006d,0x00040005,0x0000046e,0x61726170,0x0000006d, + 0x00040005,0x00000470,0x61726170,0x0000006d,0x00040005,0x00000473,0x61726170,0x0000006d, + 0x00040005,0x00000474,0x61726170,0x0000006d,0x00030005,0x0000047c,0x00000069,0x00040005, + 0x00000485,0x61726170,0x0000006d,0x00040005,0x00000487,0x61726170,0x0000006d,0x00040005, + 0x00000489,0x61726170,0x0000006d,0x00040005,0x000004af,0x61726170,0x0000006d,0x00040005, + 0x000004b0,0x61726170,0x0000006d,0x00040005,0x000004b1,0x61726170,0x0000006d,0x00040005, + 0x000004b2,0x61726170,0x0000006d,0x00040005,0x000004c9,0x61726170,0x0000006d,0x00040005, + 0x000004ca,0x61726170,0x0000006d,0x00040005,0x000004cd,0x61726170,0x0000006d,0x00040005, + 0x000004ce,0x61726170,0x0000006d,0x00040005,0x000004dc,0x61726170,0x0000006d,0x00040005, + 0x000004dd,0x61726170,0x0000006d,0x00040005,0x000004de,0x61726170,0x0000006d,0x00040005, + 0x000004e6,0x61726170,0x0000006d,0x00040005,0x000004e7,0x61726170,0x0000006d,0x00040005, + 0x000004e8,0x61726170,0x0000006d,0x00040005,0x000004f0,0x61726170,0x0000006d,0x00040005, + 0x000004f1,0x61726170,0x0000006d,0x00040005,0x000004f2,0x61726170,0x0000006d,0x00040005, + 0x000004fa,0x61726170,0x0000006d,0x00040005,0x000004fb,0x61726170,0x0000006d,0x00040005, + 0x000004fc,0x61726170,0x0000006d,0x00040005,0x00000500,0x61726170,0x0000006d,0x00040005, + 0x00000502,0x61726170,0x0000006d,0x00040005,0x00000504,0x61726170,0x0000006d,0x00040005, + 0x00000506,0x61726170,0x0000006d,0x00040005,0x00000508,0x61726170,0x0000006d,0x00040005, + 0x0000050a,0x61726170,0x0000006d,0x00030005,0x00000511,0x00000076,0x00040005,0x0000052e, + 0x61726170,0x0000006d,0x00040005,0x0000052f,0x61726170,0x0000006d,0x00040005,0x00000530, + 0x61726170,0x0000006d,0x00040005,0x00000531,0x61726170,0x0000006d,0x00040005,0x0000053d, + 0x61726170,0x0000006d,0x00040005,0x0000053e,0x61726170,0x0000006d,0x00040005,0x00000540, + 0x61726170,0x0000006d,0x00040005,0x00000542,0x61726170,0x0000006d,0x00040005,0x0000054c, + 0x61726170,0x0000006d,0x00040005,0x0000054d,0x61726170,0x0000006d,0x00040005,0x0000054e, + 0x61726170,0x0000006d,0x00030005,0x00000555,0x00000076,0x00040005,0x00000576,0x61726170, + 0x0000006d,0x00040005,0x00000577,0x61726170,0x0000006d,0x00040005,0x00000578,0x61726170, + 0x0000006d,0x00040005,0x00000579,0x61726170,0x0000006d,0x00040005,0x00000585,0x61726170, + 0x0000006d,0x00040005,0x00000586,0x61726170,0x0000006d,0x00040005,0x00000588,0x61726170, + 0x0000006d,0x00040005,0x0000058a,0x61726170,0x0000006d,0x00040005,0x00000593,0x61726170, + 0x0000006d,0x00040005,0x00000594,0x61726170,0x0000006d,0x00040005,0x00000595,0x61726170, + 0x0000006d,0x00030005,0x0000059c,0x00000076,0x00040005,0x000005c9,0x61726170,0x0000006d, + 0x00040005,0x000005ca,0x61726170,0x0000006d,0x00040005,0x000005cb,0x61726170,0x0000006d, + 0x00040005,0x000005cc,0x61726170,0x0000006d,0x00040005,0x000005d8,0x61726170,0x0000006d, + 0x00040005,0x000005d9,0x61726170,0x0000006d,0x00040005,0x000005db,0x61726170,0x0000006d, + 0x00040005,0x000005dd,0x61726170,0x0000006d,0x00040005,0x000005e4,0x61726170,0x0000006d, + 0x00040005,0x000005e5,0x61726170,0x0000006d,0x00040005,0x000005e6,0x61726170,0x0000006d, + 0x00030005,0x000005ed,0x00000076,0x00040005,0x000005f0,0x61726170,0x0000006d,0x00040005, + 0x000005f1,0x61726170,0x0000006d,0x00040005,0x000005f2,0x61726170,0x0000006d,0x00040005, + 0x000005f3,0x61726170,0x0000006d,0x00040005,0x000005f7,0x61726170,0x0000006d,0x00040005, + 0x000005f8,0x61726170,0x0000006d,0x00040005,0x000005fa,0x61726170,0x0000006d,0x00040005, + 0x000005fc,0x61726170,0x0000006d,0x00030005,0x000005ff,0x00786574,0x00030005,0x00000609, + 0x00786970,0x00030005,0x00000613,0x00003076,0x00040005,0x00000616,0x61726170,0x0000006d, + 0x00040005,0x00000617,0x61726170,0x0000006d,0x00040005,0x0000061b,0x61726170,0x0000006d, + 0x00040005,0x0000061d,0x61726170,0x0000006d,0x00040005,0x0000061f,0x61726170,0x0000006d, + 0x00040005,0x00000620,0x61726170,0x0000006d,0x00030005,0x00000635,0x00003176,0x00040005, + 0x00000638,0x61726170,0x0000006d,0x00040005,0x00000639,0x61726170,0x0000006d,0x00040005, + 0x0000063c,0x61726170,0x0000006d,0x00040005,0x0000063e,0x61726170,0x0000006d,0x00040005, + 0x00000640,0x61726170,0x0000006d,0x00040005,0x00000641,0x61726170,0x0000006d,0x00030005, + 0x00000656,0x00003276,0x00040005,0x00000659,0x61726170,0x0000006d,0x00040005,0x0000065a, + 0x61726170,0x0000006d,0x00040005,0x0000065d,0x61726170,0x0000006d,0x00040005,0x0000065f, + 0x61726170,0x0000006d,0x00040005,0x00000661,0x61726170,0x0000006d,0x00040005,0x00000662, + 0x61726170,0x0000006d,0x00030005,0x00000677,0x00003376,0x00040005,0x0000067a,0x61726170, + 0x0000006d,0x00040005,0x0000067b,0x61726170,0x0000006d,0x00040005,0x0000067e,0x61726170, + 0x0000006d,0x00040005,0x00000680,0x61726170,0x0000006d,0x00040005,0x00000682,0x61726170, + 0x0000006d,0x00040005,0x00000683,0x61726170,0x0000006d,0x00030005,0x0000068c,0x00000076, + 0x00040005,0x0000068d,0x61726170,0x0000006d,0x00040005,0x0000068f,0x61726170,0x0000006d, + 0x00040005,0x00000691,0x61726170,0x0000006d,0x00040005,0x00000693,0x61726170,0x0000006d, + 0x00040005,0x0000069b,0x61726170,0x0000006d,0x00040005,0x0000069c,0x61726170,0x0000006d, + 0x00040005,0x0000069e,0x61726170,0x0000006d,0x00040005,0x0000069f,0x61726170,0x0000006d, + 0x00040005,0x000006a2,0x61726170,0x0000006d,0x00040005,0x000006a4,0x61726170,0x0000006d, + 0x00040005,0x000006a6,0x61726170,0x0000006d,0x00040005,0x000006b0,0x61726170,0x0000006d, + 0x00040005,0x000006b2,0x61726170,0x0000006d,0x00040005,0x000006b4,0x61726170,0x0000006d, + 0x00040005,0x000006b6,0x61726170,0x0000006d,0x00040005,0x000006b8,0x61726170,0x0000006d, + 0x00040005,0x000006ba,0x61726170,0x0000006d,0x00040005,0x000006c7,0x61726170,0x0000006d, + 0x00040005,0x000006c9,0x61726170,0x0000006d,0x00040005,0x000006cb,0x61726170,0x0000006d, + 0x00040005,0x000006cd,0x61726170,0x0000006d,0x00040005,0x000006cf,0x61726170,0x0000006d, + 0x00040005,0x000006d0,0x61726170,0x0000006d,0x00040005,0x000006dd,0x61726170,0x0000006d, + 0x00040005,0x000006df,0x61726170,0x0000006d,0x00040005,0x000006e1,0x61726170,0x0000006d, + 0x00040005,0x000006e3,0x61726170,0x0000006d,0x00040005,0x000006e5,0x61726170,0x0000006d, + 0x00040005,0x000006e6,0x61726170,0x0000006d,0x00040005,0x000006f3,0x61726170,0x0000006d, + 0x00040005,0x000006f5,0x61726170,0x0000006d,0x00040005,0x000006f7,0x61726170,0x0000006d, + 0x00040005,0x000006f8,0x61726170,0x0000006d,0x00040005,0x000006fb,0x5f627573,0x00007978, + 0x00040005,0x000006fe,0x61726170,0x0000006d,0x00030005,0x00000700,0x00000078,0x00030005, + 0x00000709,0x00000079,0x00040005,0x00000711,0x61726170,0x0000006d,0x00040005,0x00000713, + 0x61726170,0x0000006d,0x00040005,0x00000715,0x61726170,0x0000006d,0x00040005,0x00000717, + 0x61726170,0x0000006d,0x00040005,0x00000719,0x61726170,0x0000006d,0x00040005,0x0000071b, + 0x61726170,0x0000006d,0x00040005,0x0000071e,0x61726170,0x0000006d,0x00040005,0x00000720, + 0x61726170,0x0000006d,0x00040005,0x00000722,0x61726170,0x0000006d,0x00040005,0x00000724, + 0x61726170,0x0000006d,0x00040005,0x00000726,0x61726170,0x0000006d,0x00040005,0x00000727, + 0x61726170,0x0000006d,0x00040005,0x00000729,0x61726170,0x0000006d,0x00040005,0x00000731, + 0x61726170,0x0000006d,0x00040005,0x00000733,0x61726170,0x0000006d,0x00040005,0x00000735, + 0x61726170,0x0000006d,0x00040005,0x0000073b,0x61726170,0x0000006d,0x00040005,0x0000073e, + 0x61726170,0x0000006d,0x00040005,0x00000740,0x61726170,0x0000006d,0x00040005,0x00000742, + 0x61726170,0x0000006d,0x00040005,0x00000744,0x61726170,0x0000006d,0x00040005,0x00000747, + 0x61726170,0x0000006d,0x00040005,0x00000749,0x61726170,0x0000006d,0x00040005,0x0000074b, + 0x61726170,0x0000006d,0x00040005,0x0000074c,0x61726170,0x0000006d,0x00040005,0x0000074e, + 0x61726170,0x0000006d,0x00040005,0x0000074f,0x61726170,0x0000006d,0x00040005,0x00000751, + 0x61726170,0x0000006d,0x00040005,0x00000757,0x61726170,0x0000006d,0x00040005,0x00000758, + 0x61726170,0x0000006d,0x00040005,0x0000075a,0x61726170,0x0000006d,0x00040005,0x0000075c, + 0x61726170,0x0000006d,0x00040005,0x0000075e,0x61726170,0x0000006d,0x00040005,0x00000769, + 0x61726170,0x0000006d,0x00040005,0x0000076a,0x61726170,0x0000006d,0x00040005,0x0000076b, + 0x61726170,0x0000006d,0x00040005,0x0000076c,0x61726170,0x0000006d,0x00040005,0x0000076d, + 0x61726170,0x0000006d,0x00040005,0x0000076e,0x61726170,0x0000006d,0x00060005,0x00000771, + 0x575f6c67,0x476b726f,0x70756f72,0x00004449,0x00080005,0x00000773,0x4c5f6c67,0x6c61636f, + 0x6f766e49,0x69746163,0x6e496e6f,0x00786564,0x00040005,0x00000774,0x61726170,0x0000006d, + 0x00040005,0x00000776,0x61726170,0x0000006d,0x00060005,0x0000077d,0x6f505f73,0x43746e69, + 0x706d616c,0x00000000,0x00060005,0x0000077e,0x694c5f73,0x7261656e,0x6d616c43,0x00000070, + 0x00030047,0x0000015f,0x00000002,0x00050048,0x0000015f,0x00000000,0x00000023,0x00000000, + 0x00050048,0x0000015f,0x00000001,0x00000023,0x00000008,0x00050048,0x0000015f,0x00000002, + 0x00000023,0x00000010,0x00050048,0x0000015f,0x00000003,0x00000023,0x00000018,0x00050048, + 0x0000015f,0x00000004,0x00000023,0x00000020,0x00050048,0x0000015f,0x00000005,0x00000023, + 0x00000028,0x00050048,0x0000015f,0x00000006,0x00000023,0x00000030,0x00050048,0x0000015f, + 0x00000007,0x00000023,0x00000040,0x00050048,0x0000015f,0x00000008,0x00000023,0x00000048, + 0x00050048,0x0000015f,0x00000009,0x00000023,0x00000050,0x00050048,0x0000015f,0x0000000a, + 0x00000023,0x00000058,0x00050048,0x0000015f,0x0000000b,0x00000023,0x00000060,0x00050048, + 0x0000015f,0x0000000c,0x00000023,0x00000068,0x00050048,0x0000015f,0x0000000d,0x00000023, + 0x0000006c,0x00050048,0x0000015f,0x0000000e,0x00000023,0x00000070,0x00050048,0x0000015f, + 0x0000000f,0x00000023,0x00000074,0x00050048,0x0000015f,0x00000010,0x00000023,0x00000078, + 0x00050048,0x0000015f,0x00000011,0x00000023,0x0000007c,0x00050048,0x0000015f,0x00000012, + 0x00000023,0x00000080,0x00050048,0x0000015f,0x00000013,0x00000023,0x00000084,0x00050048, + 0x0000015f,0x00000014,0x00000023,0x00000088,0x00050048,0x0000015f,0x00000015,0x00000023, + 0x0000008c,0x00050048,0x0000015f,0x00000016,0x00000023,0x00000090,0x00040047,0x00000161, + 0x00000021,0x0000000b,0x00040047,0x00000161,0x00000022,0x00000000,0x00030047,0x0000016d, + 0x00000002,0x00050048,0x0000016d,0x00000000,0x00000023,0x00000000,0x00050048,0x0000016d, + 0x00000001,0x00000023,0x00000004,0x00050048,0x0000016d,0x00000002,0x00000023,0x00000008, + 0x00050048,0x0000016d,0x00000003,0x00000023,0x00000010,0x00040047,0x0000016f,0x00000021, + 0x0000000c,0x00040047,0x0000016f,0x00000022,0x00000000,0x00040047,0x00000182,0x00000021, + 0x00000001,0x00040047,0x00000182,0x00000022,0x00000000,0x00040047,0x0000018c,0x00000021, + 0x0000000a,0x00040047,0x0000018c,0x00000022,0x00000000,0x00040047,0x00000192,0x00000021, + 0x00000000,0x00040047,0x00000192,0x00000022,0x00000000,0x00040047,0x0000019b,0x00000021, + 0x00000003,0x00040047,0x0000019b,0x00000022,0x00000000,0x00040047,0x000001a9,0x00000021, + 0x00000004,0x00040047,0x000001a9,0x00000022,0x00000000,0x00040047,0x000001b3,0x00000021, + 0x00000005,0x00040047,0x000001b3,0x00000022,0x00000000,0x00040047,0x000001bd,0x00000021, + 0x00000006,0x00040047,0x000001bd,0x00000022,0x00000000,0x00040047,0x000001c7,0x00000021, + 0x00000007,0x00040047,0x000001c7,0x00000022,0x00000000,0x00040047,0x000001d2,0x00000021, + 0x00000008,0x00040047,0x000001d2,0x00000022,0x00000000,0x00030047,0x000001dd,0x00000017, + 0x00040047,0x000001dd,0x00000021,0x00000009,0x00040047,0x000001dd,0x00000022,0x00000000, + 0x00030047,0x00000224,0x00000017,0x00040047,0x00000224,0x00000021,0x00000002,0x00040047, + 0x00000224,0x00000022,0x00000000,0x00040047,0x00000771,0x0000000b,0x0000001a,0x00040047, + 0x00000773,0x0000000b,0x0000001d,0x00040047,0x0000077d,0x00000021,0x000003e8,0x00040047, + 0x0000077d,0x00000022,0x00000000,0x00040047,0x0000077e,0x00000021,0x000003e9,0x00040047, + 0x0000077e,0x00000022,0x00000000,0x00040047,0x00000786,0x0000000b,0x00000019,0x00020013, + 0x00000002,0x00030021,0x00000003,0x00000002,0x00040015,0x00000006,0x00000020,0x00000000, + 0x00040020,0x00000007,0x00000007,0x00000006,0x00060021,0x00000008,0x00000006,0x00000007, + 0x00000007,0x00000007,0x00040015,0x00000013,0x00000020,0x00000001,0x00040020,0x00000014, + 0x00000007,0x00000013,0x00050021,0x00000015,0x00000013,0x00000014,0x00000014,0x00030016, + 0x0000001a,0x00000020,0x00040020,0x0000001b,0x00000007,0x0000001a,0x00050021,0x0000001c, + 0x0000001a,0x0000001b,0x0000001b,0x00040017,0x00000029,0x00000006,0x00000002,0x00040021, + 0x0000002a,0x00000029,0x00000007,0x00040017,0x0000002e,0x00000013,0x00000002,0x00030021, + 0x0000002f,0x0000002e,0x00030021,0x00000032,0x0000001a,0x00030021,0x00000035,0x00000006, + 0x00030021,0x0000003a,0x00000029,0x00040020,0x0000003d,0x00000007,0x0000002e,0x00040021, + 0x0000003e,0x0000001a,0x0000003d,0x00050021,0x00000042,0x00000002,0x0000003d,0x0000001b, + 0x00040017,0x0000004a,0x0000001a,0x00000004,0x00030021,0x0000004b,0x0000004a,0x00040020, + 0x0000004e,0x00000007,0x0000004a,0x00040021,0x0000004f,0x00000002,0x0000004e,0x00040017, + 0x00000053,0x0000001a,0x00000002,0x00050021,0x00000054,0x00000053,0x0000003d,0x00000007, + 0x00040020,0x00000059,0x00000007,0x00000053,0x00060021,0x0000005a,0x00000002,0x0000003d, + 0x00000059,0x00000007,0x00040021,0x00000060,0x00000002,0x00000007,0x00060021,0x00000066, + 0x0000002e,0x0000003d,0x0000003d,0x0000003d,0x00040021,0x0000006c,0x0000001a,0x0000001b, + 0x00050021,0x00000078,0x0000004a,0x00000059,0x00000007,0x00050021,0x0000007d,0x0000004a, + 0x0000003d,0x00000007,0x00070021,0x00000082,0x0000004a,0x0000004e,0x0000004e,0x0000004e, + 0x0000004e,0x00070021,0x00000089,0x00000002,0x0000003d,0x0000004e,0x00000007,0x00000007, + 0x00050021,0x00000090,0x0000004a,0x00000007,0x00000007,0x00060021,0x00000095,0x00000002, + 0x00000007,0x00000007,0x0000004e,0x00020014,0x0000009d,0x00060021,0x0000009e,0x0000009d, + 0x00000007,0x00000007,0x00000007,0x00040020,0x000000a4,0x00000007,0x00000029,0x00070021, + 0x000000a5,0x0000004a,0x000000a4,0x000000a4,0x000000a4,0x000000a4,0x00080021,0x000000ac, + 0x0000004a,0x000000a4,0x000000a4,0x000000a4,0x000000a4,0x00000007,0x00050021,0x000000b4, + 0x0000004a,0x000000a4,0x00000007,0x00090021,0x000000c4,0x00000002,0x00000007,0x00000007, + 0x000000a4,0x00000007,0x00000007,0x00000007,0x00070021,0x000000ed,0x00000002,0x000000a4, + 0x00000007,0x00000007,0x00000007,0x00070021,0x000000f4,0x00000002,0x00000007,0x00000007, + 0x00000007,0x00000007,0x000a0021,0x000000fb,0x00000002,0x00000007,0x00000007,0x000000a4, + 0x00000007,0x00000007,0x00000007,0x00000007,0x00080021,0x00000105,0x00000002,0x000000a4, + 0x00000007,0x00000007,0x00000007,0x00000007,0x00090021,0x0000010d,0x00000002,0x000000a4, + 0x00000007,0x00000007,0x00000007,0x00000007,0x000000a4,0x00040017,0x00000116,0x00000006, + 0x00000003,0x00040020,0x00000117,0x00000007,0x00000116,0x00050021,0x00000118,0x00000002, + 0x00000117,0x00000007,0x0004002b,0x00000013,0x00000127,0x00000000,0x0004002b,0x00000006, + 0x00000141,0x00000002,0x0004002b,0x00000006,0x00000142,0x00000003,0x0004002b,0x00000006, + 0x00000148,0x00000001,0x0019001e,0x0000015f,0x0000002e,0x0000002e,0x0000002e,0x0000002e, + 0x0000002e,0x0000002e,0x0000004a,0x00000053,0x00000053,0x00000053,0x00000053,0x00000053, + 0x0000001a,0x0000001a,0x0000001a,0x0000001a,0x0000001a,0x0000001a,0x0000001a,0x0000001a, + 0x0000001a,0x0000001a,0x0000001a,0x00040020,0x00000160,0x00000002,0x0000015f,0x0004003b, + 0x00000160,0x00000161,0x00000002,0x00040020,0x00000162,0x00000002,0x0000002e,0x0004002b, + 0x00000013,0x00000167,0x0000000e,0x00040020,0x00000168,0x00000002,0x0000001a,0x0006001e, + 0x0000016d,0x00000006,0x00000006,0x00000029,0x00000029,0x00040020,0x0000016e,0x00000002, + 0x0000016d,0x0004003b,0x0000016e,0x0000016f,0x00000002,0x00040020,0x00000170,0x00000002, + 0x00000006,0x0004002b,0x00000013,0x00000175,0x00000001,0x0004002b,0x00000013,0x0000017a, + 0x00000002,0x00040020,0x0000017b,0x00000002,0x00000029,0x00090019,0x00000180,0x0000001a, + 0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x00040020,0x00000181, + 0x00000000,0x00000180,0x0004003b,0x00000181,0x00000182,0x00000000,0x0004002b,0x00000006, + 0x00000186,0x00000000,0x00090019,0x0000018a,0x0000001a,0x00000001,0x00000000,0x00000000, + 0x00000000,0x00000002,0x00000009,0x00040020,0x0000018b,0x00000000,0x0000018a,0x0004003b, + 0x0000018b,0x0000018c,0x00000000,0x0004002b,0x0000001a,0x00000190,0x00000000,0x0004003b, + 0x00000181,0x00000192,0x00000000,0x00090019,0x00000199,0x0000001a,0x00000001,0x00000000, + 0x00000000,0x00000000,0x00000002,0x00000001,0x00040020,0x0000019a,0x00000000,0x00000199, + 0x0004003b,0x0000019a,0x0000019b,0x00000000,0x0005002c,0x0000002e,0x0000019d,0x00000127, + 0x00000127,0x00090019,0x000001a7,0x0000001a,0x00000001,0x00000000,0x00000000,0x00000000, + 0x00000002,0x00000007,0x00040020,0x000001a8,0x00000000,0x000001a7,0x0004003b,0x000001a8, + 0x000001a9,0x00000000,0x0004003b,0x000001a8,0x000001b3,0x00000000,0x0004003b,0x000001a8, + 0x000001bd,0x00000000,0x0004003b,0x000001a8,0x000001c7,0x00000000,0x0004002b,0x00000006, + 0x000001ce,0x00000004,0x0004003b,0x000001a8,0x000001d2,0x00000000,0x0004002b,0x00000006, + 0x000001d9,0x00000005,0x0004003b,0x000001a8,0x000001dd,0x00000000,0x0005002c,0x00000053, + 0x000001e3,0x00000190,0x00000190,0x00090019,0x00000222,0x00000006,0x00000001,0x00000000, + 0x00000000,0x00000000,0x00000002,0x00000021,0x00040020,0x00000223,0x00000000,0x00000222, + 0x0004003b,0x00000223,0x00000224,0x00000000,0x00040020,0x00000225,0x0000000b,0x00000006, + 0x00040017,0x00000229,0x00000006,0x00000004,0x0007002c,0x00000229,0x0000022a,0x00000186, + 0x00000186,0x00000186,0x00000186,0x0004002b,0x0000001a,0x0000024e,0x42c80000,0x0004002b, + 0x0000001a,0x00000250,0x41480000,0x0004002b,0x0000001a,0x00000254,0x3f99999a,0x0004002b, + 0x0000001a,0x00000255,0x40000000,0x0004002b,0x0000001a,0x0000025b,0x3f800000,0x00040020, + 0x00000260,0x00000004,0x00000006,0x0004003b,0x00000260,0x00000261,0x00000004,0x0004002b, + 0x0000001a,0x00000277,0x387fda40,0x0007002c,0x0000004a,0x00000282,0x00000190,0x00000190, + 0x00000190,0x00000190,0x0004002b,0x0000001a,0x0000029c,0x3e800000,0x00040017,0x000002be, + 0x0000009d,0x00000002,0x0004002b,0x0000001a,0x000002cf,0x461c4000,0x0004002b,0x00000006, + 0x000002ec,0x00000010,0x0004001c,0x000002ed,0x0000001a,0x000002ec,0x0004001c,0x000002ee, + 0x000002ed,0x000002ec,0x00040020,0x000002ef,0x00000004,0x000002ee,0x0004003b,0x000002ef, + 0x000002f0,0x00000004,0x00040020,0x000002f3,0x00000004,0x0000001a,0x0004003b,0x000002ef, + 0x000002f6,0x00000004,0x0004003b,0x000002ef,0x000002fb,0x00000004,0x0004003b,0x000002ef, + 0x00000300,0x00000004,0x0004002b,0x00000006,0x0000031c,0x00000d48,0x0004002b,0x00000006, + 0x0000031d,0x00000108,0x0005002c,0x00000029,0x0000037f,0x00000186,0x00000186,0x0005002c, + 0x00000029,0x00000382,0x00000186,0x00000148,0x0005002c,0x00000029,0x00000385,0x00000148, + 0x00000186,0x0005002c,0x00000029,0x00000388,0x00000148,0x00000148,0x0004002b,0x00000006, + 0x000003d1,0x00000040,0x0004002b,0x00000006,0x000003df,0x00000020,0x0004001c,0x000003e9, + 0x0000004a,0x000001ce,0x00040020,0x000003ea,0x00000007,0x000003e9,0x0004002b,0x00000013, + 0x00000466,0x00000003,0x0004002b,0x00000006,0x000004bc,0x00000008,0x0005002c,0x00000029, + 0x000005ee,0x00000141,0x00000186,0x0005002c,0x00000029,0x000005ef,0x00000142,0x00000186, + 0x0004002b,0x00000006,0x0000061a,0x00000006,0x0004002b,0x00000006,0x00000687,0x00000007, + 0x0004002b,0x00000013,0x00000704,0x00000006,0x0004002b,0x00000013,0x0000070d,0x00000007, + 0x00040020,0x00000770,0x00000001,0x00000116,0x0004003b,0x00000770,0x00000771,0x00000001, + 0x00040020,0x00000772,0x00000001,0x00000006,0x0004003b,0x00000772,0x00000773,0x00000001, + 0x0004002b,0x0000001a,0x00000779,0x477fe000,0x0004002b,0x0000001a,0x0000077a,0x37801002, + 0x0002001a,0x0000077b,0x00040020,0x0000077c,0x00000000,0x0000077b,0x0004003b,0x0000077c, + 0x0000077d,0x00000000,0x0004003b,0x0000077c,0x0000077e,0x00000000,0x0004002b,0x0000001a, + 0x0000077f,0x7f7fffff,0x0004002b,0x0000001a,0x00000780,0x00800000,0x0004002b,0x0000001a, + 0x00000781,0x3a1fe868,0x0004002b,0x0000001a,0x00000782,0x3d800000,0x0004002b,0x0000001a, + 0x00000783,0x3d3d70a4,0x0004002b,0x0000001a,0x00000784,0x3e400000,0x0004002b,0x00000006, + 0x00000785,0x00000100,0x0006002c,0x00000116,0x00000786,0x00000785,0x00000148,0x00000148, + 0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b, + 0x00000117,0x00000774,0x00000007,0x0004003b,0x00000007,0x00000776,0x00000007,0x0004003d, + 0x00000116,0x00000775,0x00000771,0x0003003e,0x00000774,0x00000775,0x0004003d,0x00000006, + 0x00000777,0x00000773,0x0003003e,0x00000776,0x00000777,0x00060039,0x00000002,0x00000778, + 0x0000011b,0x00000774,0x00000776,0x000100fd,0x00010038,0x00050036,0x00000006,0x0000000c, + 0x00000000,0x00000008,0x00030037,0x00000007,0x00000009,0x00030037,0x00000007,0x0000000a, + 0x00030037,0x00000007,0x0000000b,0x000200f8,0x0000000d,0x0004003d,0x00000006,0x0000011d, + 0x00000009,0x0004003d,0x00000006,0x0000011e,0x0000000a,0x0004007c,0x00000013,0x0000011f, + 0x0000011e,0x0004003d,0x00000006,0x00000120,0x0000000b,0x0004007c,0x00000013,0x00000121, + 0x00000120,0x000600cb,0x00000006,0x00000122,0x0000011d,0x0000011f,0x00000121,0x000200fe, + 0x00000122,0x00010038,0x00050036,0x00000006,0x00000011,0x00000000,0x00000008,0x00030037, + 0x00000007,0x0000000e,0x00030037,0x00000007,0x0000000f,0x00030037,0x00000007,0x00000010, + 0x000200f8,0x00000012,0x0004003d,0x00000006,0x00000125,0x0000000e,0x0004003d,0x00000006, + 0x00000126,0x0000000f,0x0004003d,0x00000006,0x00000128,0x00000010,0x0004007c,0x00000013, + 0x00000129,0x00000128,0x000700c9,0x00000006,0x0000012a,0x00000125,0x00000126,0x00000127, + 0x00000129,0x000200fe,0x0000012a,0x00010038,0x00050036,0x00000013,0x00000018,0x00000000, + 0x00000015,0x00030037,0x00000014,0x00000016,0x00030037,0x00000014,0x00000017,0x000200f8, + 0x00000019,0x0004003d,0x00000013,0x0000012d,0x00000016,0x0004003d,0x00000013,0x0000012e, + 0x00000017,0x0007000c,0x00000013,0x0000012f,0x00000001,0x00000027,0x0000012d,0x0000012e, + 0x000200fe,0x0000012f,0x00010038,0x00050036,0x0000001a,0x0000001f,0x00000000,0x0000001c, + 0x00030037,0x0000001b,0x0000001d,0x00030037,0x0000001b,0x0000001e,0x000200f8,0x00000020, + 0x0004003d,0x0000001a,0x00000132,0x0000001d,0x0004003d,0x0000001a,0x00000133,0x0000001e, + 0x0007000c,0x0000001a,0x00000134,0x00000001,0x00000028,0x00000132,0x00000133,0x000200fe, + 0x00000134,0x00010038,0x00050036,0x00000013,0x00000023,0x00000000,0x00000015,0x00030037, + 0x00000014,0x00000021,0x00030037,0x00000014,0x00000022,0x000200f8,0x00000024,0x0004003d, + 0x00000013,0x00000137,0x00000021,0x0004003d,0x00000013,0x00000138,0x00000022,0x0007000c, + 0x00000013,0x00000139,0x00000001,0x0000002a,0x00000137,0x00000138,0x000200fe,0x00000139, + 0x00010038,0x00050036,0x0000001a,0x00000027,0x00000000,0x0000001c,0x00030037,0x0000001b, + 0x00000025,0x00030037,0x0000001b,0x00000026,0x000200f8,0x00000028,0x0004003d,0x0000001a, + 0x0000013c,0x00000025,0x0004003d,0x0000001a,0x0000013d,0x00000026,0x0007000c,0x0000001a, + 0x0000013e,0x00000001,0x0000001a,0x0000013c,0x0000013d,0x000200fe,0x0000013e,0x00010038, + 0x00050036,0x00000029,0x0000002c,0x00000000,0x0000002a,0x00030037,0x00000007,0x0000002b, + 0x000200f8,0x0000002d,0x0004003b,0x00000007,0x00000143,0x00000007,0x0004003b,0x00000007, + 0x00000145,0x00000007,0x0004003b,0x00000007,0x00000146,0x00000007,0x0004003b,0x00000007, + 0x00000149,0x00000007,0x0004003b,0x00000007,0x0000014a,0x00000007,0x0004003b,0x00000007, + 0x0000014c,0x00000007,0x0004003b,0x00000007,0x0000014e,0x00000007,0x0004003b,0x00000007, + 0x00000150,0x00000007,0x0004003b,0x00000007,0x00000151,0x00000007,0x0004003b,0x00000007, + 0x00000153,0x00000007,0x0004003b,0x00000007,0x00000155,0x00000007,0x0004003b,0x00000007, + 0x00000156,0x00000007,0x0004003b,0x00000007,0x00000158,0x00000007,0x0004003b,0x00000007, + 0x00000159,0x00000007,0x0004003b,0x00000007,0x0000015a,0x00000007,0x0004003d,0x00000006, + 0x00000144,0x0000002b,0x0003003e,0x00000143,0x00000144,0x0003003e,0x00000145,0x00000141, + 0x0003003e,0x00000146,0x00000142,0x00070039,0x00000006,0x00000147,0x0000000c,0x00000143, + 0x00000145,0x00000146,0x0003003e,0x00000149,0x00000147,0x0004003d,0x00000006,0x0000014b, + 0x0000002b,0x0003003e,0x0000014a,0x0000014b,0x0003003e,0x0000014c,0x00000148,0x00070039, + 0x00000006,0x0000014d,0x00000011,0x00000149,0x0000014a,0x0000014c,0x0004003d,0x00000006, + 0x0000014f,0x0000002b,0x0003003e,0x0000014e,0x0000014f,0x0003003e,0x00000150,0x00000142, + 0x0003003e,0x00000151,0x00000142,0x00070039,0x00000006,0x00000152,0x0000000c,0x0000014e, + 0x00000150,0x00000151,0x0004003d,0x00000006,0x00000154,0x0000002b,0x0003003e,0x00000153, + 0x00000154,0x0003003e,0x00000155,0x00000148,0x0003003e,0x00000156,0x00000141,0x00070039, + 0x00000006,0x00000157,0x0000000c,0x00000153,0x00000155,0x00000156,0x0003003e,0x00000158, + 0x00000152,0x0003003e,0x00000159,0x00000157,0x0003003e,0x0000015a,0x00000141,0x00070039, + 0x00000006,0x0000015b,0x00000011,0x00000158,0x00000159,0x0000015a,0x00050050,0x00000029, + 0x0000015c,0x0000014d,0x0000015b,0x000200fe,0x0000015c,0x00010038,0x00050036,0x0000002e, + 0x00000030,0x00000000,0x0000002f,0x000200f8,0x00000031,0x00050041,0x00000162,0x00000163, + 0x00000161,0x00000127,0x0004003d,0x0000002e,0x00000164,0x00000163,0x000200fe,0x00000164, + 0x00010038,0x00050036,0x0000001a,0x00000033,0x00000000,0x00000032,0x000200f8,0x00000034, + 0x00050041,0x00000168,0x00000169,0x00000161,0x00000167,0x0004003d,0x0000001a,0x0000016a, + 0x00000169,0x000200fe,0x0000016a,0x00010038,0x00050036,0x00000006,0x00000036,0x00000000, + 0x00000035,0x000200f8,0x00000037,0x00050041,0x00000170,0x00000171,0x0000016f,0x00000127, + 0x0004003d,0x00000006,0x00000172,0x00000171,0x000200fe,0x00000172,0x00010038,0x00050036, + 0x00000006,0x00000038,0x00000000,0x00000035,0x000200f8,0x00000039,0x00050041,0x00000170, + 0x00000176,0x0000016f,0x00000175,0x0004003d,0x00000006,0x00000177,0x00000176,0x000200fe, + 0x00000177,0x00010038,0x00050036,0x00000029,0x0000003b,0x00000000,0x0000003a,0x000200f8, + 0x0000003c,0x00050041,0x0000017b,0x0000017c,0x0000016f,0x0000017a,0x0004003d,0x00000029, + 0x0000017d,0x0000017c,0x000200fe,0x0000017d,0x00010038,0x00050036,0x0000001a,0x00000040, + 0x00000000,0x0000003e,0x00030037,0x0000003d,0x0000003f,0x000200f8,0x00000041,0x0004003d, + 0x00000180,0x00000183,0x00000182,0x0004003d,0x0000002e,0x00000184,0x0000003f,0x0007005f, + 0x0000004a,0x00000185,0x00000183,0x00000184,0x00000002,0x00000127,0x00050051,0x0000001a, + 0x00000187,0x00000185,0x00000000,0x000200fe,0x00000187,0x00010038,0x00050036,0x00000002, + 0x00000045,0x00000000,0x00000042,0x00030037,0x0000003d,0x00000043,0x00030037,0x0000001b, + 0x00000044,0x000200f8,0x00000046,0x0004003d,0x0000018a,0x0000018d,0x0000018c,0x0004003d, + 0x0000002e,0x0000018e,0x00000043,0x0004003d,0x0000001a,0x0000018f,0x00000044,0x00070050, + 0x0000004a,0x00000191,0x0000018f,0x00000190,0x00000190,0x00000190,0x00040063,0x0000018d, + 0x0000018e,0x00000191,0x000100fd,0x00010038,0x00050036,0x0000001a,0x00000048,0x00000000, + 0x0000003e,0x00030037,0x0000003d,0x00000047,0x000200f8,0x00000049,0x0004003d,0x00000180, + 0x00000193,0x00000192,0x0004003d,0x0000002e,0x00000194,0x00000047,0x0007005f,0x0000004a, + 0x00000195,0x00000193,0x00000194,0x00000002,0x00000127,0x00050051,0x0000001a,0x00000196, + 0x00000195,0x00000000,0x000200fe,0x00000196,0x00010038,0x00050036,0x0000004a,0x0000004c, + 0x00000000,0x0000004b,0x000200f8,0x0000004d,0x0004003d,0x00000199,0x0000019c,0x0000019b, + 0x00050062,0x0000004a,0x0000019e,0x0000019c,0x0000019d,0x000200fe,0x0000019e,0x00010038, + 0x00050036,0x00000002,0x00000051,0x00000000,0x0000004f,0x00030037,0x0000004e,0x00000050, + 0x000200f8,0x00000052,0x0004003d,0x00000199,0x000001a1,0x0000019b,0x0004003d,0x0000004a, + 0x000001a2,0x00000050,0x00040063,0x000001a1,0x0000019d,0x000001a2,0x000100fd,0x00010038, + 0x00050036,0x00000053,0x00000057,0x00000000,0x00000054,0x00030037,0x0000003d,0x00000055, + 0x00030037,0x00000007,0x00000056,0x000200f8,0x00000058,0x0004003d,0x00000006,0x000001a3, + 0x00000056,0x000500aa,0x0000009d,0x000001a4,0x000001a3,0x00000186,0x000300f7,0x000001a6, + 0x00000000,0x000400fa,0x000001a4,0x000001a5,0x000001a6,0x000200f8,0x000001a5,0x0004003d, + 0x000001a7,0x000001aa,0x000001a9,0x0004003d,0x0000002e,0x000001ab,0x00000055,0x00050062, + 0x0000004a,0x000001ac,0x000001aa,0x000001ab,0x0007004f,0x00000053,0x000001ad,0x000001ac, + 0x000001ac,0x00000000,0x00000001,0x000200fe,0x000001ad,0x000200f8,0x000001a6,0x0004003d, + 0x00000006,0x000001af,0x00000056,0x000500aa,0x0000009d,0x000001b0,0x000001af,0x00000148, + 0x000300f7,0x000001b2,0x00000000,0x000400fa,0x000001b0,0x000001b1,0x000001b2,0x000200f8, + 0x000001b1,0x0004003d,0x000001a7,0x000001b4,0x000001b3,0x0004003d,0x0000002e,0x000001b5, + 0x00000055,0x00050062,0x0000004a,0x000001b6,0x000001b4,0x000001b5,0x0007004f,0x00000053, + 0x000001b7,0x000001b6,0x000001b6,0x00000000,0x00000001,0x000200fe,0x000001b7,0x000200f8, + 0x000001b2,0x0004003d,0x00000006,0x000001b9,0x00000056,0x000500aa,0x0000009d,0x000001ba, + 0x000001b9,0x00000141,0x000300f7,0x000001bc,0x00000000,0x000400fa,0x000001ba,0x000001bb, + 0x000001bc,0x000200f8,0x000001bb,0x0004003d,0x000001a7,0x000001be,0x000001bd,0x0004003d, + 0x0000002e,0x000001bf,0x00000055,0x00050062,0x0000004a,0x000001c0,0x000001be,0x000001bf, + 0x0007004f,0x00000053,0x000001c1,0x000001c0,0x000001c0,0x00000000,0x00000001,0x000200fe, + 0x000001c1,0x000200f8,0x000001bc,0x0004003d,0x00000006,0x000001c3,0x00000056,0x000500aa, + 0x0000009d,0x000001c4,0x000001c3,0x00000142,0x000300f7,0x000001c6,0x00000000,0x000400fa, + 0x000001c4,0x000001c5,0x000001c6,0x000200f8,0x000001c5,0x0004003d,0x000001a7,0x000001c8, + 0x000001c7,0x0004003d,0x0000002e,0x000001c9,0x00000055,0x00050062,0x0000004a,0x000001ca, + 0x000001c8,0x000001c9,0x0007004f,0x00000053,0x000001cb,0x000001ca,0x000001ca,0x00000000, + 0x00000001,0x000200fe,0x000001cb,0x000200f8,0x000001c6,0x0004003d,0x00000006,0x000001cd, + 0x00000056,0x000500aa,0x0000009d,0x000001cf,0x000001cd,0x000001ce,0x000300f7,0x000001d1, + 0x00000000,0x000400fa,0x000001cf,0x000001d0,0x000001d1,0x000200f8,0x000001d0,0x0004003d, + 0x000001a7,0x000001d3,0x000001d2,0x0004003d,0x0000002e,0x000001d4,0x00000055,0x00050062, + 0x0000004a,0x000001d5,0x000001d3,0x000001d4,0x0007004f,0x00000053,0x000001d6,0x000001d5, + 0x000001d5,0x00000000,0x00000001,0x000200fe,0x000001d6,0x000200f8,0x000001d1,0x0004003d, + 0x00000006,0x000001d8,0x00000056,0x000500aa,0x0000009d,0x000001da,0x000001d8,0x000001d9, + 0x000300f7,0x000001dc,0x00000000,0x000400fa,0x000001da,0x000001db,0x000001dc,0x000200f8, + 0x000001db,0x0004003d,0x000001a7,0x000001de,0x000001dd,0x0004003d,0x0000002e,0x000001df, + 0x00000055,0x00050062,0x0000004a,0x000001e0,0x000001de,0x000001df,0x0007004f,0x00000053, + 0x000001e1,0x000001e0,0x000001e0,0x00000000,0x00000001,0x000200fe,0x000001e1,0x000200f8, + 0x000001dc,0x000200fe,0x000001e3,0x00010038,0x00050036,0x00000002,0x0000005e,0x00000000, + 0x0000005a,0x00030037,0x0000003d,0x0000005b,0x00030037,0x00000059,0x0000005c,0x00030037, + 0x00000007,0x0000005d,0x000200f8,0x0000005f,0x0004003d,0x00000006,0x000001e6,0x0000005d, + 0x000500aa,0x0000009d,0x000001e7,0x000001e6,0x00000186,0x000300f7,0x000001e9,0x00000000, + 0x000400fa,0x000001e7,0x000001e8,0x000001e9,0x000200f8,0x000001e8,0x0004003d,0x000001a7, + 0x000001ea,0x000001a9,0x0004003d,0x0000002e,0x000001eb,0x0000005b,0x0004003d,0x00000053, + 0x000001ec,0x0000005c,0x00050051,0x0000001a,0x000001ed,0x000001ec,0x00000000,0x00050051, + 0x0000001a,0x000001ee,0x000001ec,0x00000001,0x00070050,0x0000004a,0x000001ef,0x000001ed, + 0x000001ee,0x00000190,0x00000190,0x00040063,0x000001ea,0x000001eb,0x000001ef,0x000200f9, + 0x000001e9,0x000200f8,0x000001e9,0x0004003d,0x00000006,0x000001f0,0x0000005d,0x000500aa, + 0x0000009d,0x000001f1,0x000001f0,0x00000148,0x000300f7,0x000001f3,0x00000000,0x000400fa, + 0x000001f1,0x000001f2,0x000001f3,0x000200f8,0x000001f2,0x0004003d,0x000001a7,0x000001f4, + 0x000001b3,0x0004003d,0x0000002e,0x000001f5,0x0000005b,0x0004003d,0x00000053,0x000001f6, + 0x0000005c,0x00050051,0x0000001a,0x000001f7,0x000001f6,0x00000000,0x00050051,0x0000001a, + 0x000001f8,0x000001f6,0x00000001,0x00070050,0x0000004a,0x000001f9,0x000001f7,0x000001f8, + 0x00000190,0x00000190,0x00040063,0x000001f4,0x000001f5,0x000001f9,0x000200f9,0x000001f3, + 0x000200f8,0x000001f3,0x0004003d,0x00000006,0x000001fa,0x0000005d,0x000500aa,0x0000009d, + 0x000001fb,0x000001fa,0x00000141,0x000300f7,0x000001fd,0x00000000,0x000400fa,0x000001fb, + 0x000001fc,0x000001fd,0x000200f8,0x000001fc,0x0004003d,0x000001a7,0x000001fe,0x000001bd, + 0x0004003d,0x0000002e,0x000001ff,0x0000005b,0x0004003d,0x00000053,0x00000200,0x0000005c, + 0x00050051,0x0000001a,0x00000201,0x00000200,0x00000000,0x00050051,0x0000001a,0x00000202, + 0x00000200,0x00000001,0x00070050,0x0000004a,0x00000203,0x00000201,0x00000202,0x00000190, + 0x00000190,0x00040063,0x000001fe,0x000001ff,0x00000203,0x000200f9,0x000001fd,0x000200f8, + 0x000001fd,0x0004003d,0x00000006,0x00000204,0x0000005d,0x000500aa,0x0000009d,0x00000205, + 0x00000204,0x00000142,0x000300f7,0x00000207,0x00000000,0x000400fa,0x00000205,0x00000206, + 0x00000207,0x000200f8,0x00000206,0x0004003d,0x000001a7,0x00000208,0x000001c7,0x0004003d, + 0x0000002e,0x00000209,0x0000005b,0x0004003d,0x00000053,0x0000020a,0x0000005c,0x00050051, + 0x0000001a,0x0000020b,0x0000020a,0x00000000,0x00050051,0x0000001a,0x0000020c,0x0000020a, + 0x00000001,0x00070050,0x0000004a,0x0000020d,0x0000020b,0x0000020c,0x00000190,0x00000190, + 0x00040063,0x00000208,0x00000209,0x0000020d,0x000200f9,0x00000207,0x000200f8,0x00000207, + 0x0004003d,0x00000006,0x0000020e,0x0000005d,0x000500aa,0x0000009d,0x0000020f,0x0000020e, + 0x000001ce,0x000300f7,0x00000211,0x00000000,0x000400fa,0x0000020f,0x00000210,0x00000211, + 0x000200f8,0x00000210,0x0004003d,0x000001a7,0x00000212,0x000001d2,0x0004003d,0x0000002e, + 0x00000213,0x0000005b,0x0004003d,0x00000053,0x00000214,0x0000005c,0x00050051,0x0000001a, + 0x00000215,0x00000214,0x00000000,0x00050051,0x0000001a,0x00000216,0x00000214,0x00000001, + 0x00070050,0x0000004a,0x00000217,0x00000215,0x00000216,0x00000190,0x00000190,0x00040063, + 0x00000212,0x00000213,0x00000217,0x000200f9,0x00000211,0x000200f8,0x00000211,0x0004003d, + 0x00000006,0x00000218,0x0000005d,0x000500aa,0x0000009d,0x00000219,0x00000218,0x000001d9, + 0x000300f7,0x0000021b,0x00000000,0x000400fa,0x00000219,0x0000021a,0x0000021b,0x000200f8, + 0x0000021a,0x0004003d,0x000001a7,0x0000021c,0x000001dd,0x0004003d,0x0000002e,0x0000021d, + 0x0000005b,0x0004003d,0x00000053,0x0000021e,0x0000005c,0x00050051,0x0000001a,0x0000021f, + 0x0000021e,0x00000000,0x00050051,0x0000001a,0x00000220,0x0000021e,0x00000001,0x00070050, + 0x0000004a,0x00000221,0x0000021f,0x00000220,0x00000190,0x00000190,0x00040063,0x0000021c, + 0x0000021d,0x00000221,0x000200f9,0x0000021b,0x000200f8,0x0000021b,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x00000062,0x00000000,0x00000060,0x00030037,0x00000007,0x00000061, + 0x000200f8,0x00000063,0x0006003c,0x00000225,0x00000226,0x00000224,0x0000019d,0x00000186, + 0x000700ea,0x00000006,0x00000227,0x00000226,0x00000148,0x00000186,0x00000148,0x0003003e, + 0x00000061,0x00000227,0x000100fd,0x00010038,0x00050036,0x00000002,0x00000064,0x00000000, + 0x00000003,0x000200f8,0x00000065,0x0004003d,0x00000222,0x00000228,0x00000224,0x00040063, + 0x00000228,0x0000019d,0x0000022a,0x000100fd,0x00010038,0x00050036,0x0000002e,0x0000006a, + 0x00000000,0x00000066,0x00030037,0x0000003d,0x00000067,0x00030037,0x0000003d,0x00000068, + 0x00030037,0x0000003d,0x00000069,0x000200f8,0x0000006b,0x0004003b,0x0000003d,0x0000022b, + 0x00000007,0x0004003b,0x00000014,0x00000232,0x00000007,0x0004003b,0x00000014,0x00000235, + 0x00000007,0x0004003b,0x00000014,0x00000237,0x00000007,0x0004003b,0x00000014,0x00000238, + 0x00000007,0x0004003b,0x00000014,0x0000023e,0x00000007,0x0004003b,0x00000014,0x00000241, + 0x00000007,0x0004003b,0x00000014,0x00000243,0x00000007,0x0004003b,0x00000014,0x00000244, + 0x00000007,0x0004003d,0x0000002e,0x0000022c,0x00000067,0x0004003d,0x0000002e,0x0000022d, + 0x00000068,0x00050080,0x0000002e,0x0000022e,0x0000022c,0x0000022d,0x0003003e,0x0000022b, + 0x0000022e,0x00050041,0x00000014,0x0000022f,0x00000069,0x00000186,0x0004003d,0x00000013, + 0x00000230,0x0000022f,0x00050082,0x00000013,0x00000231,0x00000230,0x00000175,0x00050041, + 0x00000014,0x00000233,0x0000022b,0x00000186,0x0004003d,0x00000013,0x00000234,0x00000233, + 0x0003003e,0x00000232,0x00000234,0x0003003e,0x00000235,0x00000231,0x00060039,0x00000013, + 0x00000236,0x00000018,0x00000232,0x00000235,0x0003003e,0x00000237,0x00000127,0x0003003e, + 0x00000238,0x00000236,0x00060039,0x00000013,0x00000239,0x00000023,0x00000237,0x00000238, + 0x00050041,0x00000014,0x0000023a,0x0000022b,0x00000186,0x0003003e,0x0000023a,0x00000239, + 0x00050041,0x00000014,0x0000023b,0x00000069,0x00000148,0x0004003d,0x00000013,0x0000023c, + 0x0000023b,0x00050082,0x00000013,0x0000023d,0x0000023c,0x00000175,0x00050041,0x00000014, + 0x0000023f,0x0000022b,0x00000148,0x0004003d,0x00000013,0x00000240,0x0000023f,0x0003003e, + 0x0000023e,0x00000240,0x0003003e,0x00000241,0x0000023d,0x00060039,0x00000013,0x00000242, + 0x00000018,0x0000023e,0x00000241,0x0003003e,0x00000243,0x00000127,0x0003003e,0x00000244, + 0x00000242,0x00060039,0x00000013,0x00000245,0x00000023,0x00000243,0x00000244,0x00050041, + 0x00000014,0x00000246,0x0000022b,0x00000148,0x0003003e,0x00000246,0x00000245,0x0004003d, + 0x0000002e,0x00000247,0x0000022b,0x000200fe,0x00000247,0x00010038,0x00050036,0x0000001a, + 0x0000006e,0x00000000,0x0000006c,0x00030037,0x0000001b,0x0000006d,0x000200f8,0x0000006f, + 0x0004003b,0x0000001b,0x0000024c,0x00000007,0x0004003b,0x0000001b,0x00000253,0x00000007, + 0x0004003b,0x0000001b,0x00000256,0x00000007,0x0004003b,0x0000001b,0x00000257,0x00000007, + 0x0004003d,0x0000001a,0x0000024a,0x0000006d,0x0006000c,0x0000001a,0x0000024b,0x00000001, + 0x0000001b,0x0000024a,0x0003003e,0x0000006d,0x0000024b,0x0004003d,0x0000001a,0x0000024d, + 0x0000006d,0x00050085,0x0000001a,0x0000024f,0x0000024d,0x0000024e,0x00050088,0x0000001a, + 0x00000251,0x0000024f,0x00000250,0x0006000c,0x0000001a,0x00000252,0x00000001,0x0000001e, + 0x00000251,0x0003003e,0x0000024c,0x00000252,0x0003003e,0x00000256,0x00000255,0x0004003d, + 0x0000001a,0x00000258,0x0000024c,0x0003003e,0x00000257,0x00000258,0x00060039,0x0000001a, + 0x00000259,0x00000027,0x00000256,0x00000257,0x00050085,0x0000001a,0x0000025a,0x00000254, + 0x00000259,0x0003003e,0x00000253,0x0000025a,0x0004003d,0x0000001a,0x0000025c,0x00000253, + 0x00050088,0x0000001a,0x0000025d,0x0000025b,0x0000025c,0x000200fe,0x0000025d,0x00010038, + 0x00050036,0x00000002,0x00000071,0x00000000,0x00000060,0x00030037,0x00000007,0x00000070, + 0x000200f8,0x00000072,0x0004003b,0x00000007,0x00000262,0x00000007,0x0004003d,0x00000006, + 0x00000263,0x00000261,0x0003003e,0x00000262,0x00000263,0x00050039,0x00000002,0x00000264, + 0x00000062,0x00000262,0x0004003d,0x00000006,0x00000265,0x00000262,0x0003003e,0x00000261, + 0x00000265,0x000100fd,0x00010038,0x00050036,0x00000006,0x00000073,0x00000000,0x00000035, + 0x000200f8,0x00000074,0x0004003d,0x00000006,0x00000266,0x00000261,0x000200fe,0x00000266, + 0x00010038,0x00050036,0x00000002,0x00000076,0x00000000,0x00000060,0x00030037,0x00000007, + 0x00000075,0x000200f8,0x00000077,0x00040039,0x00000002,0x00000269,0x00000064,0x000100fd, + 0x00010038,0x00050036,0x0000004a,0x0000007b,0x00000000,0x00000078,0x00030037,0x00000059, + 0x00000079,0x00030037,0x00000007,0x0000007a,0x000200f8,0x0000007c,0x0004003b,0x0000003d, + 0x0000026a,0x00000007,0x0004003b,0x0000003d,0x0000026e,0x00000007,0x0004003b,0x0000003d, + 0x0000026f,0x00000007,0x0004003b,0x0000003d,0x00000270,0x00000007,0x0004003b,0x0000001b, + 0x00000272,0x00000007,0x0004003b,0x0000003d,0x00000273,0x00000007,0x0004003b,0x0000001b, + 0x00000276,0x00000007,0x0004003b,0x0000001b,0x0000027a,0x00000007,0x0004003b,0x0000001b, + 0x0000027b,0x00000007,0x0004003b,0x0000001b,0x0000027d,0x00000007,0x0004003b,0x0000003d, + 0x0000027e,0x00000007,0x0004003b,0x0000004e,0x00000281,0x00000007,0x0004003d,0x00000053, + 0x0000026b,0x00000079,0x0004006e,0x0000002e,0x0000026c,0x0000026b,0x00040039,0x0000002e, + 0x0000026d,0x00000030,0x0003003e,0x0000026e,0x0000026c,0x0003003e,0x0000026f,0x0000019d, + 0x0003003e,0x00000270,0x0000026d,0x00070039,0x0000002e,0x00000271,0x0000006a,0x0000026e, + 0x0000026f,0x00000270,0x0003003e,0x0000026a,0x00000271,0x0004003d,0x0000002e,0x00000274, + 0x0000026a,0x0003003e,0x00000273,0x00000274,0x00050039,0x0000001a,0x00000275,0x00000048, + 0x00000273,0x0003003e,0x00000272,0x00000275,0x0004003d,0x0000001a,0x00000278,0x00000272, + 0x0006000c,0x0000001a,0x00000279,0x00000001,0x0000001c,0x00000278,0x0003003e,0x0000027a, + 0x00000277,0x0003003e,0x0000027b,0x00000279,0x00060039,0x0000001a,0x0000027c,0x0000001f, + 0x0000027a,0x0000027b,0x0003003e,0x00000276,0x0000027c,0x0004003d,0x0000002e,0x0000027f, + 0x0000026a,0x0003003e,0x0000027e,0x0000027f,0x00050039,0x0000001a,0x00000280,0x00000040, + 0x0000027e,0x0003003e,0x0000027d,0x00000280,0x0003003e,0x00000281,0x00000282,0x0004003d, + 0x0000001a,0x00000283,0x00000276,0x00050041,0x0000001b,0x00000284,0x00000281,0x00000186, + 0x0003003e,0x00000284,0x00000283,0x0004003d,0x0000001a,0x00000285,0x00000272,0x00050041, + 0x0000001b,0x00000286,0x00000281,0x00000148,0x0003003e,0x00000286,0x00000285,0x0004003d, + 0x0000001a,0x00000287,0x0000027d,0x00050041,0x0000001b,0x00000288,0x00000281,0x00000141, + 0x0003003e,0x00000288,0x00000287,0x0004003d,0x0000004a,0x00000289,0x00000281,0x000200fe, + 0x00000289,0x00010038,0x00050036,0x0000004a,0x00000080,0x00000000,0x0000007d,0x00030037, + 0x0000003d,0x0000007e,0x00030037,0x00000007,0x0000007f,0x000200f8,0x00000081,0x0004003b, + 0x0000003d,0x0000028c,0x00000007,0x0004003b,0x00000007,0x0000028e,0x00000007,0x0004003d, + 0x0000002e,0x0000028d,0x0000007e,0x0003003e,0x0000028c,0x0000028d,0x0003003e,0x0000028e, + 0x000001d9,0x00060039,0x00000053,0x0000028f,0x00000057,0x0000028c,0x0000028e,0x00050051, + 0x0000001a,0x00000290,0x0000028f,0x00000000,0x00050051,0x0000001a,0x00000291,0x0000028f, + 0x00000001,0x00070050,0x0000004a,0x00000292,0x00000290,0x00000291,0x00000190,0x00000190, + 0x000200fe,0x00000292,0x00010038,0x00050036,0x0000004a,0x00000087,0x00000000,0x00000082, + 0x00030037,0x0000004e,0x00000083,0x00030037,0x0000004e,0x00000084,0x00030037,0x0000004e, + 0x00000085,0x00030037,0x0000004e,0x00000086,0x000200f8,0x00000088,0x0004003d,0x0000004a, + 0x00000295,0x00000083,0x0004003d,0x0000004a,0x00000296,0x00000084,0x00050081,0x0000004a, + 0x00000297,0x00000295,0x00000296,0x0004003d,0x0000004a,0x00000298,0x00000085,0x00050081, + 0x0000004a,0x00000299,0x00000297,0x00000298,0x0004003d,0x0000004a,0x0000029a,0x00000086, + 0x00050081,0x0000004a,0x0000029b,0x00000299,0x0000029a,0x0005008e,0x0000004a,0x0000029d, + 0x0000029b,0x0000029c,0x000200fe,0x0000029d,0x00010038,0x00050036,0x00000002,0x0000008e, + 0x00000000,0x00000089,0x00030037,0x0000003d,0x0000008a,0x00030037,0x0000004e,0x0000008b, + 0x00030037,0x00000007,0x0000008c,0x00030037,0x00000007,0x0000008d,0x000200f8,0x0000008f, + 0x0004003b,0x0000003d,0x000002a4,0x00000007,0x0004003b,0x00000059,0x000002a6,0x00000007, + 0x0004003b,0x00000007,0x000002a9,0x00000007,0x0004003b,0x0000003d,0x000002b1,0x00000007, + 0x0004003b,0x0000001b,0x000002b3,0x00000007,0x0004003b,0x0000004e,0x000002c3,0x00000007, + 0x0004003b,0x0000001b,0x000002c5,0x00000007,0x0004003b,0x0000001b,0x000002c8,0x00000007, + 0x0004003b,0x0000001b,0x000002cb,0x00000007,0x0004003b,0x0000001b,0x000002dd,0x00000007, + 0x0004003b,0x0000001b,0x000002de,0x00000007,0x0004003b,0x0000001b,0x000002e1,0x00000007, + 0x0004003b,0x0000004e,0x000002e9,0x00000007,0x0004003d,0x00000006,0x000002a0,0x0000008c, + 0x000500aa,0x0000009d,0x000002a1,0x000002a0,0x000001d9,0x000300f7,0x000002a3,0x00000000, + 0x000400fa,0x000002a1,0x000002a2,0x000002ac,0x000200f8,0x000002a2,0x0004003d,0x0000002e, + 0x000002a5,0x0000008a,0x0003003e,0x000002a4,0x000002a5,0x0004003d,0x0000004a,0x000002a7, + 0x0000008b,0x0007004f,0x00000053,0x000002a8,0x000002a7,0x000002a7,0x00000000,0x00000001, + 0x0003003e,0x000002a6,0x000002a8,0x0004003d,0x00000006,0x000002aa,0x0000008c,0x0003003e, + 0x000002a9,0x000002aa,0x00070039,0x00000002,0x000002ab,0x0000005e,0x000002a4,0x000002a6, + 0x000002a9,0x000200f9,0x000002a3,0x000200f8,0x000002ac,0x0004003d,0x00000006,0x000002ad, + 0x0000008c,0x000500aa,0x0000009d,0x000002ae,0x000002ad,0x00000186,0x000300f7,0x000002b0, + 0x00000000,0x000400fa,0x000002ae,0x000002af,0x000002b0,0x000200f8,0x000002af,0x0004003d, + 0x0000002e,0x000002b2,0x0000008a,0x0003003e,0x000002b1,0x000002b2,0x00050041,0x0000001b, + 0x000002b4,0x0000008b,0x00000141,0x0004003d,0x0000001a,0x000002b5,0x000002b4,0x0003003e, + 0x000002b3,0x000002b5,0x00060039,0x00000002,0x000002b6,0x00000045,0x000002b1,0x000002b3, + 0x000200f9,0x000002b0,0x000200f8,0x000002b0,0x000200f9,0x000002a3,0x000200f8,0x000002a3, + 0x0004003d,0x00000006,0x000002b7,0x0000008c,0x00040039,0x00000006,0x000002b8,0x00000036, + 0x00050082,0x00000006,0x000002b9,0x000002b8,0x00000148,0x000500aa,0x0000009d,0x000002ba, + 0x000002b7,0x000002b9,0x000300f7,0x000002bc,0x00000000,0x000400fa,0x000002ba,0x000002bb, + 0x000002bc,0x000200f8,0x000002bb,0x0004003d,0x0000002e,0x000002bd,0x0000008a,0x000500aa, + 0x000002be,0x000002bf,0x000002bd,0x0000019d,0x0004009b,0x0000009d,0x000002c0,0x000002bf, + 0x000300f7,0x000002c2,0x00000000,0x000400fa,0x000002c0,0x000002c1,0x000002c2,0x000200f8, + 0x000002c1,0x00040039,0x0000004a,0x000002c4,0x0000004c,0x0003003e,0x000002c3,0x000002c4, + 0x00050041,0x0000001b,0x000002c6,0x0000008b,0x00000148,0x0004003d,0x0000001a,0x000002c7, + 0x000002c6,0x0003003e,0x000002c5,0x000002c7,0x00050041,0x0000001b,0x000002c9,0x000002c3, + 0x00000148,0x0004003d,0x0000001a,0x000002ca,0x000002c9,0x0003003e,0x000002c8,0x000002ca, + 0x00050041,0x0000001b,0x000002cc,0x0000008b,0x00000186,0x0004003d,0x0000001a,0x000002cd, + 0x000002cc,0x0003003e,0x000002cb,0x000002cd,0x0004003d,0x0000001a,0x000002ce,0x000002c8, + 0x000500b8,0x0000009d,0x000002d0,0x000002ce,0x000002cf,0x000300f7,0x000002d2,0x00000000, + 0x000400fa,0x000002d0,0x000002d1,0x000002d2,0x000200f8,0x000002d1,0x0004003d,0x0000001a, + 0x000002d3,0x000002c8,0x0004003d,0x0000001a,0x000002d4,0x000002cb,0x0004003d,0x0000001a, + 0x000002d5,0x000002c8,0x00050083,0x0000001a,0x000002d6,0x000002d4,0x000002d5,0x00040039, + 0x0000001a,0x000002d7,0x00000033,0x0004007f,0x0000001a,0x000002d8,0x000002d7,0x0006000c, + 0x0000001a,0x000002d9,0x00000001,0x0000001b,0x000002d8,0x00050083,0x0000001a,0x000002da, + 0x0000025b,0x000002d9,0x00050085,0x0000001a,0x000002db,0x000002d6,0x000002da,0x00050081, + 0x0000001a,0x000002dc,0x000002d3,0x000002db,0x0003003e,0x000002cb,0x000002dc,0x0003003e, + 0x000002dd,0x00000190,0x0004003d,0x0000001a,0x000002df,0x000002cb,0x0003003e,0x000002de, + 0x000002df,0x00060039,0x0000001a,0x000002e0,0x0000001f,0x000002dd,0x000002de,0x0003003e, + 0x000002cb,0x000002e0,0x000200f9,0x000002d2,0x000200f8,0x000002d2,0x0004003d,0x0000001a, + 0x000002e2,0x000002cb,0x0003003e,0x000002e1,0x000002e2,0x00050039,0x0000001a,0x000002e3, + 0x0000006e,0x000002e1,0x00050041,0x0000001b,0x000002e4,0x000002c3,0x00000186,0x0003003e, + 0x000002e4,0x000002e3,0x0004003d,0x0000001a,0x000002e5,0x000002cb,0x00050041,0x0000001b, + 0x000002e6,0x000002c3,0x00000148,0x0003003e,0x000002e6,0x000002e5,0x0004003d,0x0000001a, + 0x000002e7,0x000002c5,0x00050041,0x0000001b,0x000002e8,0x000002c3,0x00000141,0x0003003e, + 0x000002e8,0x000002e7,0x0004003d,0x0000004a,0x000002ea,0x000002c3,0x0003003e,0x000002e9, + 0x000002ea,0x00050039,0x00000002,0x000002eb,0x00000051,0x000002e9,0x000200f9,0x000002c2, + 0x000200f8,0x000002c2,0x000200f9,0x000002bc,0x000200f8,0x000002bc,0x000100fd,0x00010038, + 0x00050036,0x0000004a,0x00000093,0x00000000,0x00000090,0x00030037,0x00000007,0x00000091, + 0x00030037,0x00000007,0x00000092,0x000200f8,0x00000094,0x0004003d,0x00000006,0x000002f1, + 0x00000091,0x0004003d,0x00000006,0x000002f2,0x00000092,0x00060041,0x000002f3,0x000002f4, + 0x000002f0,0x000002f1,0x000002f2,0x0004003d,0x0000001a,0x000002f5,0x000002f4,0x0004003d, + 0x00000006,0x000002f7,0x00000091,0x0004003d,0x00000006,0x000002f8,0x00000092,0x00060041, + 0x000002f3,0x000002f9,0x000002f6,0x000002f7,0x000002f8,0x0004003d,0x0000001a,0x000002fa, + 0x000002f9,0x0004003d,0x00000006,0x000002fc,0x00000091,0x0004003d,0x00000006,0x000002fd, + 0x00000092,0x00060041,0x000002f3,0x000002fe,0x000002fb,0x000002fc,0x000002fd,0x0004003d, + 0x0000001a,0x000002ff,0x000002fe,0x0004003d,0x00000006,0x00000301,0x00000091,0x0004003d, + 0x00000006,0x00000302,0x00000092,0x00060041,0x000002f3,0x00000303,0x00000300,0x00000301, + 0x00000302,0x0004003d,0x0000001a,0x00000304,0x00000303,0x00070050,0x0000004a,0x00000305, + 0x000002f5,0x000002fa,0x000002ff,0x00000304,0x000200fe,0x00000305,0x00010038,0x00050036, + 0x00000002,0x00000099,0x00000000,0x00000095,0x00030037,0x00000007,0x00000096,0x00030037, + 0x00000007,0x00000097,0x00030037,0x0000004e,0x00000098,0x000200f8,0x0000009a,0x0004003d, + 0x00000006,0x00000308,0x00000096,0x0004003d,0x00000006,0x00000309,0x00000097,0x00050041, + 0x0000001b,0x0000030a,0x00000098,0x00000186,0x0004003d,0x0000001a,0x0000030b,0x0000030a, + 0x00060041,0x000002f3,0x0000030c,0x000002f0,0x00000308,0x00000309,0x0003003e,0x0000030c, + 0x0000030b,0x0004003d,0x00000006,0x0000030d,0x00000096,0x0004003d,0x00000006,0x0000030e, + 0x00000097,0x00050041,0x0000001b,0x0000030f,0x00000098,0x00000148,0x0004003d,0x0000001a, + 0x00000310,0x0000030f,0x00060041,0x000002f3,0x00000311,0x000002f6,0x0000030d,0x0000030e, + 0x0003003e,0x00000311,0x00000310,0x0004003d,0x00000006,0x00000312,0x00000096,0x0004003d, + 0x00000006,0x00000313,0x00000097,0x00050041,0x0000001b,0x00000314,0x00000098,0x00000141, + 0x0004003d,0x0000001a,0x00000315,0x00000314,0x00060041,0x000002f3,0x00000316,0x000002fb, + 0x00000312,0x00000313,0x0003003e,0x00000316,0x00000315,0x0004003d,0x00000006,0x00000317, + 0x00000096,0x0004003d,0x00000006,0x00000318,0x00000097,0x00050041,0x0000001b,0x00000319, + 0x00000098,0x00000142,0x0004003d,0x0000001a,0x0000031a,0x00000319,0x00060041,0x000002f3, + 0x0000031b,0x00000300,0x00000317,0x00000318,0x0003003e,0x0000031b,0x0000031a,0x000100fd, + 0x00010038,0x00050036,0x00000002,0x0000009b,0x00000000,0x00000003,0x000200f8,0x0000009c, + 0x000300e1,0x00000141,0x0000031c,0x000400e0,0x00000141,0x00000141,0x0000031d,0x000100fd, + 0x00010038,0x00050036,0x0000009d,0x000000a2,0x00000000,0x0000009e,0x00030037,0x00000007, + 0x0000009f,0x00030037,0x00000007,0x000000a0,0x00030037,0x00000007,0x000000a1,0x000200f8, + 0x000000a3,0x0004003b,0x00000007,0x00000322,0x00000007,0x0004003d,0x00000006,0x0000031e, + 0x000000a0,0x000500aa,0x0000009d,0x0000031f,0x0000031e,0x00000186,0x000300f7,0x00000321, + 0x00000000,0x000400fa,0x0000031f,0x00000320,0x00000321,0x000200f8,0x00000320,0x0004003d, + 0x00000006,0x00000323,0x000000a1,0x0003003e,0x00000322,0x00000323,0x00050039,0x00000002, + 0x00000324,0x00000071,0x00000322,0x000200f9,0x00000321,0x000200f8,0x00000321,0x00040039, + 0x00000002,0x00000325,0x0000009b,0x00040039,0x00000006,0x00000326,0x00000073,0x0004003d, + 0x00000006,0x00000327,0x0000009f,0x00050082,0x00000006,0x00000328,0x00000327,0x00000148, + 0x000500ab,0x0000009d,0x00000329,0x00000326,0x00000328,0x000200fe,0x00000329,0x00010038, + 0x00050036,0x0000004a,0x000000aa,0x00000000,0x000000a5,0x00030037,0x000000a4,0x000000a6, + 0x00030037,0x000000a4,0x000000a7,0x00030037,0x000000a4,0x000000a8,0x00030037,0x000000a4, + 0x000000a9,0x000200f8,0x000000ab,0x0004003b,0x0000004e,0x0000032c,0x00000007,0x0004003b, + 0x00000007,0x0000032d,0x00000007,0x0004003b,0x00000007,0x00000330,0x00000007,0x0004003b, + 0x0000004e,0x00000334,0x00000007,0x0004003b,0x00000007,0x00000335,0x00000007,0x0004003b, + 0x00000007,0x00000338,0x00000007,0x0004003b,0x0000004e,0x0000033c,0x00000007,0x0004003b, + 0x00000007,0x0000033d,0x00000007,0x0004003b,0x00000007,0x00000340,0x00000007,0x0004003b, + 0x0000004e,0x00000344,0x00000007,0x0004003b,0x00000007,0x00000345,0x00000007,0x0004003b, + 0x00000007,0x00000348,0x00000007,0x0004003b,0x0000004e,0x0000034c,0x00000007,0x0004003b, + 0x0000004e,0x0000034e,0x00000007,0x0004003b,0x0000004e,0x00000350,0x00000007,0x0004003b, + 0x0000004e,0x00000352,0x00000007,0x00050041,0x00000007,0x0000032e,0x000000a6,0x00000186, + 0x0004003d,0x00000006,0x0000032f,0x0000032e,0x0003003e,0x0000032d,0x0000032f,0x00050041, + 0x00000007,0x00000331,0x000000a6,0x00000148,0x0004003d,0x00000006,0x00000332,0x00000331, + 0x0003003e,0x00000330,0x00000332,0x00060039,0x0000004a,0x00000333,0x00000093,0x0000032d, + 0x00000330,0x0003003e,0x0000032c,0x00000333,0x00050041,0x00000007,0x00000336,0x000000a7, + 0x00000186,0x0004003d,0x00000006,0x00000337,0x00000336,0x0003003e,0x00000335,0x00000337, + 0x00050041,0x00000007,0x00000339,0x000000a7,0x00000148,0x0004003d,0x00000006,0x0000033a, + 0x00000339,0x0003003e,0x00000338,0x0000033a,0x00060039,0x0000004a,0x0000033b,0x00000093, + 0x00000335,0x00000338,0x0003003e,0x00000334,0x0000033b,0x00050041,0x00000007,0x0000033e, + 0x000000a8,0x00000186,0x0004003d,0x00000006,0x0000033f,0x0000033e,0x0003003e,0x0000033d, + 0x0000033f,0x00050041,0x00000007,0x00000341,0x000000a8,0x00000148,0x0004003d,0x00000006, + 0x00000342,0x00000341,0x0003003e,0x00000340,0x00000342,0x00060039,0x0000004a,0x00000343, + 0x00000093,0x0000033d,0x00000340,0x0003003e,0x0000033c,0x00000343,0x00050041,0x00000007, + 0x00000346,0x000000a9,0x00000186,0x0004003d,0x00000006,0x00000347,0x00000346,0x0003003e, + 0x00000345,0x00000347,0x00050041,0x00000007,0x00000349,0x000000a9,0x00000148,0x0004003d, + 0x00000006,0x0000034a,0x00000349,0x0003003e,0x00000348,0x0000034a,0x00060039,0x0000004a, + 0x0000034b,0x00000093,0x00000345,0x00000348,0x0003003e,0x00000344,0x0000034b,0x0004003d, + 0x0000004a,0x0000034d,0x0000032c,0x0003003e,0x0000034c,0x0000034d,0x0004003d,0x0000004a, + 0x0000034f,0x00000334,0x0003003e,0x0000034e,0x0000034f,0x0004003d,0x0000004a,0x00000351, + 0x0000033c,0x0003003e,0x00000350,0x00000351,0x0004003d,0x0000004a,0x00000353,0x00000344, + 0x0003003e,0x00000352,0x00000353,0x00080039,0x0000004a,0x00000354,0x00000087,0x0000034c, + 0x0000034e,0x00000350,0x00000352,0x000200fe,0x00000354,0x00010038,0x00050036,0x0000004a, + 0x000000b2,0x00000000,0x000000ac,0x00030037,0x000000a4,0x000000ad,0x00030037,0x000000a4, + 0x000000ae,0x00030037,0x000000a4,0x000000af,0x00030037,0x000000a4,0x000000b0,0x00030037, + 0x00000007,0x000000b1,0x000200f8,0x000000b3,0x0004003b,0x0000004e,0x00000357,0x00000007, + 0x0004003b,0x0000003d,0x0000035a,0x00000007,0x0004003b,0x00000007,0x0000035b,0x00000007, + 0x0004003b,0x0000004e,0x0000035e,0x00000007,0x0004003b,0x0000003d,0x00000361,0x00000007, + 0x0004003b,0x00000007,0x00000362,0x00000007,0x0004003b,0x0000004e,0x00000365,0x00000007, + 0x0004003b,0x0000003d,0x00000368,0x00000007,0x0004003b,0x00000007,0x00000369,0x00000007, + 0x0004003b,0x0000004e,0x0000036c,0x00000007,0x0004003b,0x0000003d,0x0000036f,0x00000007, + 0x0004003b,0x00000007,0x00000370,0x00000007,0x0004003b,0x0000004e,0x00000373,0x00000007, + 0x0004003b,0x0000004e,0x00000375,0x00000007,0x0004003b,0x0000004e,0x00000377,0x00000007, + 0x0004003b,0x0000004e,0x00000379,0x00000007,0x0004003d,0x00000029,0x00000358,0x000000ad, + 0x0004007c,0x0000002e,0x00000359,0x00000358,0x0003003e,0x0000035a,0x00000359,0x0004003d, + 0x00000006,0x0000035c,0x000000b1,0x0003003e,0x0000035b,0x0000035c,0x00060039,0x0000004a, + 0x0000035d,0x00000080,0x0000035a,0x0000035b,0x0003003e,0x00000357,0x0000035d,0x0004003d, + 0x00000029,0x0000035f,0x000000ae,0x0004007c,0x0000002e,0x00000360,0x0000035f,0x0003003e, + 0x00000361,0x00000360,0x0004003d,0x00000006,0x00000363,0x000000b1,0x0003003e,0x00000362, + 0x00000363,0x00060039,0x0000004a,0x00000364,0x00000080,0x00000361,0x00000362,0x0003003e, + 0x0000035e,0x00000364,0x0004003d,0x00000029,0x00000366,0x000000af,0x0004007c,0x0000002e, + 0x00000367,0x00000366,0x0003003e,0x00000368,0x00000367,0x0004003d,0x00000006,0x0000036a, + 0x000000b1,0x0003003e,0x00000369,0x0000036a,0x00060039,0x0000004a,0x0000036b,0x00000080, + 0x00000368,0x00000369,0x0003003e,0x00000365,0x0000036b,0x0004003d,0x00000029,0x0000036d, + 0x000000b0,0x0004007c,0x0000002e,0x0000036e,0x0000036d,0x0003003e,0x0000036f,0x0000036e, + 0x0004003d,0x00000006,0x00000371,0x000000b1,0x0003003e,0x00000370,0x00000371,0x00060039, + 0x0000004a,0x00000372,0x00000080,0x0000036f,0x00000370,0x0003003e,0x0000036c,0x00000372, + 0x0004003d,0x0000004a,0x00000374,0x00000357,0x0003003e,0x00000373,0x00000374,0x0004003d, + 0x0000004a,0x00000376,0x0000035e,0x0003003e,0x00000375,0x00000376,0x0004003d,0x0000004a, + 0x00000378,0x00000365,0x0003003e,0x00000377,0x00000378,0x0004003d,0x0000004a,0x0000037a, + 0x0000036c,0x0003003e,0x00000379,0x0000037a,0x00080039,0x0000004a,0x0000037b,0x00000087, + 0x00000373,0x00000375,0x00000377,0x00000379,0x000200fe,0x0000037b,0x00010038,0x00050036, + 0x0000004a,0x000000b7,0x00000000,0x000000b4,0x00030037,0x000000a4,0x000000b5,0x00030037, + 0x00000007,0x000000b6,0x000200f8,0x000000b8,0x0004003b,0x000000a4,0x0000038a,0x00000007, + 0x0004003b,0x000000a4,0x0000038b,0x00000007,0x0004003b,0x000000a4,0x0000038c,0x00000007, + 0x0004003b,0x000000a4,0x0000038d,0x00000007,0x0004003b,0x00000007,0x0000038e,0x00000007, + 0x0004003d,0x00000029,0x0000037e,0x000000b5,0x00050080,0x00000029,0x00000380,0x0000037e, + 0x0000037f,0x0004003d,0x00000029,0x00000381,0x000000b5,0x00050080,0x00000029,0x00000383, + 0x00000381,0x00000382,0x0004003d,0x00000029,0x00000384,0x000000b5,0x00050080,0x00000029, + 0x00000386,0x00000384,0x00000385,0x0004003d,0x00000029,0x00000387,0x000000b5,0x00050080, + 0x00000029,0x00000389,0x00000387,0x00000388,0x0003003e,0x0000038a,0x00000380,0x0003003e, + 0x0000038b,0x00000383,0x0003003e,0x0000038c,0x00000386,0x0003003e,0x0000038d,0x00000389, + 0x0004003d,0x00000006,0x0000038f,0x000000b6,0x0003003e,0x0000038e,0x0000038f,0x00090039, + 0x0000004a,0x00000390,0x000000b2,0x0000038a,0x0000038b,0x0000038c,0x0000038d,0x0000038e, + 0x000200fe,0x00000390,0x00010038,0x00050036,0x0000004a,0x000000be,0x00000000,0x000000ac, + 0x00030037,0x000000a4,0x000000b9,0x00030037,0x000000a4,0x000000ba,0x00030037,0x000000a4, + 0x000000bb,0x00030037,0x000000a4,0x000000bc,0x00030037,0x00000007,0x000000bd,0x000200f8, + 0x000000bf,0x0004003b,0x0000004e,0x00000393,0x00000007,0x0004003b,0x00000059,0x00000397, + 0x00000007,0x0004003b,0x00000007,0x00000398,0x00000007,0x0004003b,0x0000004e,0x0000039b, + 0x00000007,0x0004003b,0x00000059,0x0000039f,0x00000007,0x0004003b,0x00000007,0x000003a0, + 0x00000007,0x0004003b,0x0000004e,0x000003a3,0x00000007,0x0004003b,0x00000059,0x000003a7, + 0x00000007,0x0004003b,0x00000007,0x000003a8,0x00000007,0x0004003b,0x0000004e,0x000003ab, + 0x00000007,0x0004003b,0x00000059,0x000003af,0x00000007,0x0004003b,0x00000007,0x000003b0, + 0x00000007,0x0004003b,0x0000004e,0x000003b3,0x00000007,0x0004003b,0x0000004e,0x000003b5, + 0x00000007,0x0004003b,0x0000004e,0x000003b7,0x00000007,0x0004003b,0x0000004e,0x000003b9, + 0x00000007,0x0004003d,0x00000029,0x00000394,0x000000b9,0x0004007c,0x0000002e,0x00000395, + 0x00000394,0x0004006f,0x00000053,0x00000396,0x00000395,0x0003003e,0x00000397,0x00000396, + 0x0004003d,0x00000006,0x00000399,0x000000bd,0x0003003e,0x00000398,0x00000399,0x00060039, + 0x0000004a,0x0000039a,0x0000007b,0x00000397,0x00000398,0x0003003e,0x00000393,0x0000039a, + 0x0004003d,0x00000029,0x0000039c,0x000000ba,0x0004007c,0x0000002e,0x0000039d,0x0000039c, + 0x0004006f,0x00000053,0x0000039e,0x0000039d,0x0003003e,0x0000039f,0x0000039e,0x0004003d, + 0x00000006,0x000003a1,0x000000bd,0x0003003e,0x000003a0,0x000003a1,0x00060039,0x0000004a, + 0x000003a2,0x0000007b,0x0000039f,0x000003a0,0x0003003e,0x0000039b,0x000003a2,0x0004003d, + 0x00000029,0x000003a4,0x000000bb,0x0004007c,0x0000002e,0x000003a5,0x000003a4,0x0004006f, + 0x00000053,0x000003a6,0x000003a5,0x0003003e,0x000003a7,0x000003a6,0x0004003d,0x00000006, + 0x000003a9,0x000000bd,0x0003003e,0x000003a8,0x000003a9,0x00060039,0x0000004a,0x000003aa, + 0x0000007b,0x000003a7,0x000003a8,0x0003003e,0x000003a3,0x000003aa,0x0004003d,0x00000029, + 0x000003ac,0x000000bc,0x0004007c,0x0000002e,0x000003ad,0x000003ac,0x0004006f,0x00000053, + 0x000003ae,0x000003ad,0x0003003e,0x000003af,0x000003ae,0x0004003d,0x00000006,0x000003b1, + 0x000000bd,0x0003003e,0x000003b0,0x000003b1,0x00060039,0x0000004a,0x000003b2,0x0000007b, + 0x000003af,0x000003b0,0x0003003e,0x000003ab,0x000003b2,0x0004003d,0x0000004a,0x000003b4, + 0x00000393,0x0003003e,0x000003b3,0x000003b4,0x0004003d,0x0000004a,0x000003b6,0x0000039b, + 0x0003003e,0x000003b5,0x000003b6,0x0004003d,0x0000004a,0x000003b8,0x000003a3,0x0003003e, + 0x000003b7,0x000003b8,0x0004003d,0x0000004a,0x000003ba,0x000003ab,0x0003003e,0x000003b9, + 0x000003ba,0x00080039,0x0000004a,0x000003bb,0x00000087,0x000003b3,0x000003b5,0x000003b7, + 0x000003b9,0x000200fe,0x000003bb,0x00010038,0x00050036,0x0000004a,0x000000c2,0x00000000, + 0x000000b4,0x00030037,0x000000a4,0x000000c0,0x00030037,0x00000007,0x000000c1,0x000200f8, + 0x000000c3,0x0004003b,0x000000a4,0x000003c6,0x00000007,0x0004003b,0x000000a4,0x000003c7, + 0x00000007,0x0004003b,0x000000a4,0x000003c8,0x00000007,0x0004003b,0x000000a4,0x000003c9, + 0x00000007,0x0004003b,0x00000007,0x000003ca,0x00000007,0x0004003d,0x00000029,0x000003be, + 0x000000c0,0x00050080,0x00000029,0x000003bf,0x000003be,0x0000037f,0x0004003d,0x00000029, + 0x000003c0,0x000000c0,0x00050080,0x00000029,0x000003c1,0x000003c0,0x00000382,0x0004003d, + 0x00000029,0x000003c2,0x000000c0,0x00050080,0x00000029,0x000003c3,0x000003c2,0x00000385, + 0x0004003d,0x00000029,0x000003c4,0x000000c0,0x00050080,0x00000029,0x000003c5,0x000003c4, + 0x00000388,0x0003003e,0x000003c6,0x000003bf,0x0003003e,0x000003c7,0x000003c1,0x0003003e, + 0x000003c8,0x000003c3,0x0003003e,0x000003c9,0x000003c5,0x0004003d,0x00000006,0x000003cb, + 0x000000c1,0x0003003e,0x000003ca,0x000003cb,0x00090039,0x0000004a,0x000003cc,0x000000be, + 0x000003c6,0x000003c7,0x000003c8,0x000003c9,0x000003ca,0x000200fe,0x000003cc,0x00010038, + 0x00050036,0x00000002,0x000000cb,0x00000000,0x000000c4,0x00030037,0x00000007,0x000000c5, + 0x00030037,0x00000007,0x000000c6,0x00030037,0x000000a4,0x000000c7,0x00030037,0x00000007, + 0x000000c8,0x00030037,0x00000007,0x000000c9,0x00030037,0x00000007,0x000000ca,0x000200f8, + 0x000000cc,0x0004003b,0x0000003d,0x000003cf,0x00000007,0x0004003b,0x0000003d,0x000003dd, + 0x00000007,0x0004003b,0x000003ea,0x000003eb,0x00000007,0x0004003b,0x000000a4,0x000003ee, + 0x00000007,0x0004003b,0x00000007,0x000003ef,0x00000007,0x0004003b,0x0000003d,0x000003f3, + 0x00000007,0x0004003b,0x0000004e,0x000003f5,0x00000007,0x0004003b,0x00000007,0x000003f8, + 0x00000007,0x0004003b,0x00000007,0x000003f9,0x00000007,0x0004003b,0x000000a4,0x00000416, + 0x00000007,0x0004003b,0x00000007,0x00000417,0x00000007,0x0004003b,0x0000003d,0x0000041b, + 0x00000007,0x0004003b,0x0000004e,0x0000041d,0x00000007,0x0004003b,0x00000007,0x00000420, + 0x00000007,0x0004003b,0x00000007,0x00000421,0x00000007,0x0004003b,0x000000a4,0x0000043e, + 0x00000007,0x0004003b,0x00000007,0x0000043f,0x00000007,0x0004003b,0x0000003d,0x00000443, + 0x00000007,0x0004003b,0x0000004e,0x00000445,0x00000007,0x0004003b,0x00000007,0x00000448, + 0x00000007,0x0004003b,0x00000007,0x00000449,0x00000007,0x0004003b,0x000000a4,0x00000469, + 0x00000007,0x0004003b,0x00000007,0x0000046a,0x00000007,0x0004003b,0x0000003d,0x0000046e, + 0x00000007,0x0004003b,0x0000004e,0x00000470,0x00000007,0x0004003b,0x00000007,0x00000473, + 0x00000007,0x0004003b,0x00000007,0x00000474,0x00000007,0x0004003b,0x00000007,0x0000047c, + 0x00000007,0x0004003b,0x00000007,0x00000485,0x00000007,0x0004003b,0x00000007,0x00000487, + 0x00000007,0x0004003b,0x0000004e,0x00000489,0x00000007,0x0004003b,0x000000a4,0x000004af, + 0x00000007,0x0004003b,0x000000a4,0x000004b0,0x00000007,0x0004003b,0x000000a4,0x000004b1, + 0x00000007,0x0004003b,0x000000a4,0x000004b2,0x00000007,0x0004003b,0x0000003d,0x000004c9, + 0x00000007,0x0004003b,0x0000004e,0x000004ca,0x00000007,0x0004003b,0x00000007,0x000004cd, + 0x00000007,0x0004003b,0x00000007,0x000004ce,0x00000007,0x0004003b,0x00000007,0x000004dc, + 0x00000007,0x0004003b,0x00000007,0x000004dd,0x00000007,0x0004003b,0x0000004e,0x000004de, + 0x00000007,0x0004003b,0x00000007,0x000004e6,0x00000007,0x0004003b,0x00000007,0x000004e7, + 0x00000007,0x0004003b,0x0000004e,0x000004e8,0x00000007,0x0004003b,0x00000007,0x000004f0, + 0x00000007,0x0004003b,0x00000007,0x000004f1,0x00000007,0x0004003b,0x0000004e,0x000004f2, + 0x00000007,0x0004003b,0x00000007,0x000004fa,0x00000007,0x0004003b,0x00000007,0x000004fb, + 0x00000007,0x0004003b,0x0000004e,0x000004fc,0x00000007,0x0004003d,0x00000029,0x000003d0, + 0x000000c7,0x00050050,0x00000029,0x000003d2,0x000003d1,0x000003d1,0x00050084,0x00000029, + 0x000003d3,0x000003d0,0x000003d2,0x0004007c,0x0000002e,0x000003d4,0x000003d3,0x0004003d, + 0x00000006,0x000003d5,0x000000c5,0x00050084,0x00000006,0x000003d6,0x000003d5,0x00000141, + 0x0004007c,0x00000013,0x000003d7,0x000003d6,0x0004003d,0x00000006,0x000003d8,0x000000c6, + 0x00050084,0x00000006,0x000003d9,0x000003d8,0x00000141,0x0004007c,0x00000013,0x000003da, + 0x000003d9,0x00050050,0x0000002e,0x000003db,0x000003d7,0x000003da,0x00050080,0x0000002e, + 0x000003dc,0x000003d4,0x000003db,0x0003003e,0x000003cf,0x000003dc,0x0004003d,0x00000029, + 0x000003de,0x000000c7,0x00050050,0x00000029,0x000003e0,0x000003df,0x000003df,0x00050084, + 0x00000029,0x000003e1,0x000003de,0x000003e0,0x0004007c,0x0000002e,0x000003e2,0x000003e1, + 0x0004003d,0x00000006,0x000003e3,0x000000c5,0x0004007c,0x00000013,0x000003e4,0x000003e3, + 0x0004003d,0x00000006,0x000003e5,0x000000c6,0x0004007c,0x00000013,0x000003e6,0x000003e5, + 0x00050050,0x0000002e,0x000003e7,0x000003e4,0x000003e6,0x00050080,0x0000002e,0x000003e8, + 0x000003e2,0x000003e7,0x0003003e,0x000003dd,0x000003e8,0x0004003d,0x0000002e,0x000003ec, + 0x000003cf,0x0004007c,0x00000029,0x000003ed,0x000003ec,0x0003003e,0x000003ee,0x000003ed, + 0x0004003d,0x00000006,0x000003f0,0x000000ca,0x0003003e,0x000003ef,0x000003f0,0x00060039, + 0x0000004a,0x000003f1,0x000000c2,0x000003ee,0x000003ef,0x00050041,0x0000004e,0x000003f2, + 0x000003eb,0x00000127,0x0003003e,0x000003f2,0x000003f1,0x0004003d,0x0000002e,0x000003f4, + 0x000003dd,0x0003003e,0x000003f3,0x000003f4,0x00050041,0x0000004e,0x000003f6,0x000003eb, + 0x00000127,0x0004003d,0x0000004a,0x000003f7,0x000003f6,0x0003003e,0x000003f5,0x000003f7, + 0x0003003e,0x000003f8,0x00000186,0x0004003d,0x00000006,0x000003fa,0x000000ca,0x0003003e, + 0x000003f9,0x000003fa,0x00080039,0x00000002,0x000003fb,0x0000008e,0x000003f3,0x000003f5, + 0x000003f8,0x000003f9,0x0004003d,0x00000029,0x000003fc,0x000000c7,0x00050050,0x00000029, + 0x000003fd,0x000003d1,0x000003d1,0x00050084,0x00000029,0x000003fe,0x000003fc,0x000003fd, + 0x0004007c,0x0000002e,0x000003ff,0x000003fe,0x0004003d,0x00000006,0x00000400,0x000000c5, + 0x00050084,0x00000006,0x00000401,0x00000400,0x00000141,0x00050080,0x00000006,0x00000402, + 0x00000401,0x000003df,0x0004007c,0x00000013,0x00000403,0x00000402,0x0004003d,0x00000006, + 0x00000404,0x000000c6,0x00050084,0x00000006,0x00000405,0x00000404,0x00000141,0x0004007c, + 0x00000013,0x00000406,0x00000405,0x00050050,0x0000002e,0x00000407,0x00000403,0x00000406, + 0x00050080,0x0000002e,0x00000408,0x000003ff,0x00000407,0x0003003e,0x000003cf,0x00000408, + 0x0004003d,0x00000029,0x00000409,0x000000c7,0x00050050,0x00000029,0x0000040a,0x000003df, + 0x000003df,0x00050084,0x00000029,0x0000040b,0x00000409,0x0000040a,0x0004007c,0x0000002e, + 0x0000040c,0x0000040b,0x0004003d,0x00000006,0x0000040d,0x000000c5,0x00050080,0x00000006, + 0x0000040e,0x0000040d,0x000002ec,0x0004007c,0x00000013,0x0000040f,0x0000040e,0x0004003d, + 0x00000006,0x00000410,0x000000c6,0x0004007c,0x00000013,0x00000411,0x00000410,0x00050050, + 0x0000002e,0x00000412,0x0000040f,0x00000411,0x00050080,0x0000002e,0x00000413,0x0000040c, + 0x00000412,0x0003003e,0x000003dd,0x00000413,0x0004003d,0x0000002e,0x00000414,0x000003cf, + 0x0004007c,0x00000029,0x00000415,0x00000414,0x0003003e,0x00000416,0x00000415,0x0004003d, + 0x00000006,0x00000418,0x000000ca,0x0003003e,0x00000417,0x00000418,0x00060039,0x0000004a, + 0x00000419,0x000000c2,0x00000416,0x00000417,0x00050041,0x0000004e,0x0000041a,0x000003eb, + 0x00000175,0x0003003e,0x0000041a,0x00000419,0x0004003d,0x0000002e,0x0000041c,0x000003dd, + 0x0003003e,0x0000041b,0x0000041c,0x00050041,0x0000004e,0x0000041e,0x000003eb,0x00000175, + 0x0004003d,0x0000004a,0x0000041f,0x0000041e,0x0003003e,0x0000041d,0x0000041f,0x0003003e, + 0x00000420,0x00000186,0x0004003d,0x00000006,0x00000422,0x000000ca,0x0003003e,0x00000421, + 0x00000422,0x00080039,0x00000002,0x00000423,0x0000008e,0x0000041b,0x0000041d,0x00000420, + 0x00000421,0x0004003d,0x00000029,0x00000424,0x000000c7,0x00050050,0x00000029,0x00000425, + 0x000003d1,0x000003d1,0x00050084,0x00000029,0x00000426,0x00000424,0x00000425,0x0004007c, + 0x0000002e,0x00000427,0x00000426,0x0004003d,0x00000006,0x00000428,0x000000c5,0x00050084, + 0x00000006,0x00000429,0x00000428,0x00000141,0x0004007c,0x00000013,0x0000042a,0x00000429, + 0x0004003d,0x00000006,0x0000042b,0x000000c6,0x00050084,0x00000006,0x0000042c,0x0000042b, + 0x00000141,0x00050080,0x00000006,0x0000042d,0x0000042c,0x000003df,0x0004007c,0x00000013, + 0x0000042e,0x0000042d,0x00050050,0x0000002e,0x0000042f,0x0000042a,0x0000042e,0x00050080, + 0x0000002e,0x00000430,0x00000427,0x0000042f,0x0003003e,0x000003cf,0x00000430,0x0004003d, + 0x00000029,0x00000431,0x000000c7,0x00050050,0x00000029,0x00000432,0x000003df,0x000003df, + 0x00050084,0x00000029,0x00000433,0x00000431,0x00000432,0x0004007c,0x0000002e,0x00000434, + 0x00000433,0x0004003d,0x00000006,0x00000435,0x000000c5,0x0004007c,0x00000013,0x00000436, + 0x00000435,0x0004003d,0x00000006,0x00000437,0x000000c6,0x00050080,0x00000006,0x00000438, + 0x00000437,0x000002ec,0x0004007c,0x00000013,0x00000439,0x00000438,0x00050050,0x0000002e, + 0x0000043a,0x00000436,0x00000439,0x00050080,0x0000002e,0x0000043b,0x00000434,0x0000043a, + 0x0003003e,0x000003dd,0x0000043b,0x0004003d,0x0000002e,0x0000043c,0x000003cf,0x0004007c, + 0x00000029,0x0000043d,0x0000043c,0x0003003e,0x0000043e,0x0000043d,0x0004003d,0x00000006, + 0x00000440,0x000000ca,0x0003003e,0x0000043f,0x00000440,0x00060039,0x0000004a,0x00000441, + 0x000000c2,0x0000043e,0x0000043f,0x00050041,0x0000004e,0x00000442,0x000003eb,0x0000017a, + 0x0003003e,0x00000442,0x00000441,0x0004003d,0x0000002e,0x00000444,0x000003dd,0x0003003e, + 0x00000443,0x00000444,0x00050041,0x0000004e,0x00000446,0x000003eb,0x0000017a,0x0004003d, + 0x0000004a,0x00000447,0x00000446,0x0003003e,0x00000445,0x00000447,0x0003003e,0x00000448, + 0x00000186,0x0004003d,0x00000006,0x0000044a,0x000000ca,0x0003003e,0x00000449,0x0000044a, + 0x00080039,0x00000002,0x0000044b,0x0000008e,0x00000443,0x00000445,0x00000448,0x00000449, + 0x0004003d,0x00000029,0x0000044c,0x000000c7,0x00050050,0x00000029,0x0000044d,0x000003d1, + 0x000003d1,0x00050084,0x00000029,0x0000044e,0x0000044c,0x0000044d,0x0004007c,0x0000002e, + 0x0000044f,0x0000044e,0x0004003d,0x00000006,0x00000450,0x000000c5,0x00050084,0x00000006, + 0x00000451,0x00000450,0x00000141,0x00050080,0x00000006,0x00000452,0x00000451,0x000003df, + 0x0004007c,0x00000013,0x00000453,0x00000452,0x0004003d,0x00000006,0x00000454,0x000000c6, + 0x00050084,0x00000006,0x00000455,0x00000454,0x00000141,0x00050080,0x00000006,0x00000456, + 0x00000455,0x000003df,0x0004007c,0x00000013,0x00000457,0x00000456,0x00050050,0x0000002e, + 0x00000458,0x00000453,0x00000457,0x00050080,0x0000002e,0x00000459,0x0000044f,0x00000458, + 0x0003003e,0x000003cf,0x00000459,0x0004003d,0x00000029,0x0000045a,0x000000c7,0x00050050, + 0x00000029,0x0000045b,0x000003df,0x000003df,0x00050084,0x00000029,0x0000045c,0x0000045a, + 0x0000045b,0x0004007c,0x0000002e,0x0000045d,0x0000045c,0x0004003d,0x00000006,0x0000045e, + 0x000000c5,0x00050080,0x00000006,0x0000045f,0x0000045e,0x000002ec,0x0004007c,0x00000013, + 0x00000460,0x0000045f,0x0004003d,0x00000006,0x00000461,0x000000c6,0x00050080,0x00000006, + 0x00000462,0x00000461,0x000002ec,0x0004007c,0x00000013,0x00000463,0x00000462,0x00050050, + 0x0000002e,0x00000464,0x00000460,0x00000463,0x00050080,0x0000002e,0x00000465,0x0000045d, + 0x00000464,0x0003003e,0x000003dd,0x00000465,0x0004003d,0x0000002e,0x00000467,0x000003cf, + 0x0004007c,0x00000029,0x00000468,0x00000467,0x0003003e,0x00000469,0x00000468,0x0004003d, + 0x00000006,0x0000046b,0x000000ca,0x0003003e,0x0000046a,0x0000046b,0x00060039,0x0000004a, + 0x0000046c,0x000000c2,0x00000469,0x0000046a,0x00050041,0x0000004e,0x0000046d,0x000003eb, + 0x00000466,0x0003003e,0x0000046d,0x0000046c,0x0004003d,0x0000002e,0x0000046f,0x000003dd, + 0x0003003e,0x0000046e,0x0000046f,0x00050041,0x0000004e,0x00000471,0x000003eb,0x00000466, + 0x0004003d,0x0000004a,0x00000472,0x00000471,0x0003003e,0x00000470,0x00000472,0x0003003e, + 0x00000473,0x00000186,0x0004003d,0x00000006,0x00000475,0x000000ca,0x0003003e,0x00000474, + 0x00000475,0x00080039,0x00000002,0x00000476,0x0000008e,0x0000046e,0x00000470,0x00000473, + 0x00000474,0x0004003d,0x00000006,0x00000477,0x000000c9,0x000500b2,0x0000009d,0x00000478, + 0x00000477,0x00000148,0x000300f7,0x0000047a,0x00000000,0x000400fa,0x00000478,0x00000479, + 0x0000047a,0x000200f8,0x00000479,0x000100fd,0x000200f8,0x0000047a,0x0003003e,0x0000047c, + 0x00000186,0x000200f9,0x0000047d,0x000200f8,0x0000047d,0x000400f6,0x0000047f,0x00000480, + 0x00000000,0x000200f9,0x00000481,0x000200f8,0x00000481,0x0004003d,0x00000006,0x00000482, + 0x0000047c,0x000500b0,0x0000009d,0x00000483,0x00000482,0x000001ce,0x000400fa,0x00000483, + 0x0000047e,0x0000047f,0x000200f8,0x0000047e,0x0004003d,0x00000006,0x00000484,0x0000047c, + 0x0004003d,0x00000006,0x00000486,0x000000c5,0x0003003e,0x00000485,0x00000486,0x0004003d, + 0x00000006,0x00000488,0x000000c6,0x0003003e,0x00000487,0x00000488,0x00050041,0x0000004e, + 0x0000048a,0x000003eb,0x00000484,0x0004003d,0x0000004a,0x0000048b,0x0000048a,0x0003003e, + 0x00000489,0x0000048b,0x00070039,0x00000002,0x0000048c,0x00000099,0x00000485,0x00000487, + 0x00000489,0x00040039,0x00000002,0x0000048d,0x0000009b,0x0004003d,0x00000006,0x0000048e, + 0x000000c8,0x000500b0,0x0000009d,0x0000048f,0x0000048e,0x000003d1,0x000300f7,0x00000491, + 0x00000000,0x000400fa,0x0000048f,0x00000490,0x00000491,0x000200f8,0x00000490,0x0004003d, + 0x00000006,0x00000492,0x0000047c,0x0004003d,0x00000006,0x00000493,0x000000c5,0x00050084, + 0x00000006,0x00000494,0x00000493,0x00000141,0x00050080,0x00000006,0x00000495,0x00000494, + 0x00000186,0x0004003d,0x00000006,0x00000496,0x000000c6,0x00050084,0x00000006,0x00000497, + 0x00000496,0x00000141,0x00050080,0x00000006,0x00000498,0x00000497,0x00000186,0x00050050, + 0x00000029,0x00000499,0x00000495,0x00000498,0x0004003d,0x00000006,0x0000049a,0x000000c5, + 0x00050084,0x00000006,0x0000049b,0x0000049a,0x00000141,0x00050080,0x00000006,0x0000049c, + 0x0000049b,0x00000148,0x0004003d,0x00000006,0x0000049d,0x000000c6,0x00050084,0x00000006, + 0x0000049e,0x0000049d,0x00000141,0x00050080,0x00000006,0x0000049f,0x0000049e,0x00000186, + 0x00050050,0x00000029,0x000004a0,0x0000049c,0x0000049f,0x0004003d,0x00000006,0x000004a1, + 0x000000c5,0x00050084,0x00000006,0x000004a2,0x000004a1,0x00000141,0x00050080,0x00000006, + 0x000004a3,0x000004a2,0x00000186,0x0004003d,0x00000006,0x000004a4,0x000000c6,0x00050084, + 0x00000006,0x000004a5,0x000004a4,0x00000141,0x00050080,0x00000006,0x000004a6,0x000004a5, + 0x00000148,0x00050050,0x00000029,0x000004a7,0x000004a3,0x000004a6,0x0004003d,0x00000006, + 0x000004a8,0x000000c5,0x00050084,0x00000006,0x000004a9,0x000004a8,0x00000141,0x00050080, + 0x00000006,0x000004aa,0x000004a9,0x00000148,0x0004003d,0x00000006,0x000004ab,0x000000c6, + 0x00050084,0x00000006,0x000004ac,0x000004ab,0x00000141,0x00050080,0x00000006,0x000004ad, + 0x000004ac,0x00000148,0x00050050,0x00000029,0x000004ae,0x000004aa,0x000004ad,0x0003003e, + 0x000004af,0x00000499,0x0003003e,0x000004b0,0x000004a0,0x0003003e,0x000004b1,0x000004a7, + 0x0003003e,0x000004b2,0x000004ae,0x00080039,0x0000004a,0x000004b3,0x000000aa,0x000004af, + 0x000004b0,0x000004b1,0x000004b2,0x00050041,0x0000004e,0x000004b4,0x000003eb,0x00000492, + 0x0003003e,0x000004b4,0x000004b3,0x0004003d,0x00000029,0x000004b5,0x000000c7,0x00050050, + 0x00000029,0x000004b6,0x000002ec,0x000002ec,0x00050084,0x00000029,0x000004b7,0x000004b5, + 0x000004b6,0x0004007c,0x0000002e,0x000004b8,0x000004b7,0x0004003d,0x00000006,0x000004b9, + 0x000000c5,0x0004003d,0x00000006,0x000004ba,0x0000047c,0x00050089,0x00000006,0x000004bb, + 0x000004ba,0x00000141,0x00050084,0x00000006,0x000004bd,0x000004bb,0x000004bc,0x00050080, + 0x00000006,0x000004be,0x000004b9,0x000004bd,0x0004007c,0x00000013,0x000004bf,0x000004be, + 0x0004003d,0x00000006,0x000004c0,0x000000c6,0x0004003d,0x00000006,0x000004c1,0x0000047c, + 0x00050086,0x00000006,0x000004c2,0x000004c1,0x00000141,0x00050084,0x00000006,0x000004c3, + 0x000004c2,0x000004bc,0x00050080,0x00000006,0x000004c4,0x000004c0,0x000004c3,0x0004007c, + 0x00000013,0x000004c5,0x000004c4,0x00050050,0x0000002e,0x000004c6,0x000004bf,0x000004c5, + 0x00050080,0x0000002e,0x000004c7,0x000004b8,0x000004c6,0x0004003d,0x00000006,0x000004c8, + 0x0000047c,0x0003003e,0x000004c9,0x000004c7,0x00050041,0x0000004e,0x000004cb,0x000003eb, + 0x000004c8,0x0004003d,0x0000004a,0x000004cc,0x000004cb,0x0003003e,0x000004ca,0x000004cc, + 0x0003003e,0x000004cd,0x00000148,0x0004003d,0x00000006,0x000004cf,0x000000ca,0x0003003e, + 0x000004ce,0x000004cf,0x00080039,0x00000002,0x000004d0,0x0000008e,0x000004c9,0x000004ca, + 0x000004cd,0x000004ce,0x000200f9,0x00000491,0x000200f8,0x00000491,0x00040039,0x00000002, + 0x000004d1,0x0000009b,0x000200f9,0x00000480,0x000200f8,0x00000480,0x0004003d,0x00000006, + 0x000004d2,0x0000047c,0x00050080,0x00000006,0x000004d3,0x000004d2,0x00000175,0x0003003e, + 0x0000047c,0x000004d3,0x000200f9,0x0000047d,0x000200f8,0x0000047f,0x0004003d,0x00000006, + 0x000004d4,0x000000c8,0x000500b0,0x0000009d,0x000004d5,0x000004d4,0x000003d1,0x000300f7, + 0x000004d7,0x00000000,0x000400fa,0x000004d5,0x000004d6,0x000004d7,0x000200f8,0x000004d6, + 0x0004003d,0x00000006,0x000004d8,0x000000c5,0x00050080,0x00000006,0x000004d9,0x000004d8, + 0x00000186,0x0004003d,0x00000006,0x000004da,0x000000c6,0x00050080,0x00000006,0x000004db, + 0x000004da,0x00000186,0x0003003e,0x000004dc,0x000004d9,0x0003003e,0x000004dd,0x000004db, + 0x00050041,0x0000004e,0x000004df,0x000003eb,0x00000127,0x0004003d,0x0000004a,0x000004e0, + 0x000004df,0x0003003e,0x000004de,0x000004e0,0x00070039,0x00000002,0x000004e1,0x00000099, + 0x000004dc,0x000004dd,0x000004de,0x0004003d,0x00000006,0x000004e2,0x000000c5,0x00050080, + 0x00000006,0x000004e3,0x000004e2,0x000004bc,0x0004003d,0x00000006,0x000004e4,0x000000c6, + 0x00050080,0x00000006,0x000004e5,0x000004e4,0x00000186,0x0003003e,0x000004e6,0x000004e3, + 0x0003003e,0x000004e7,0x000004e5,0x00050041,0x0000004e,0x000004e9,0x000003eb,0x00000175, + 0x0004003d,0x0000004a,0x000004ea,0x000004e9,0x0003003e,0x000004e8,0x000004ea,0x00070039, + 0x00000002,0x000004eb,0x00000099,0x000004e6,0x000004e7,0x000004e8,0x0004003d,0x00000006, + 0x000004ec,0x000000c5,0x00050080,0x00000006,0x000004ed,0x000004ec,0x00000186,0x0004003d, + 0x00000006,0x000004ee,0x000000c6,0x00050080,0x00000006,0x000004ef,0x000004ee,0x000004bc, + 0x0003003e,0x000004f0,0x000004ed,0x0003003e,0x000004f1,0x000004ef,0x00050041,0x0000004e, + 0x000004f3,0x000003eb,0x0000017a,0x0004003d,0x0000004a,0x000004f4,0x000004f3,0x0003003e, + 0x000004f2,0x000004f4,0x00070039,0x00000002,0x000004f5,0x00000099,0x000004f0,0x000004f1, + 0x000004f2,0x0004003d,0x00000006,0x000004f6,0x000000c5,0x00050080,0x00000006,0x000004f7, + 0x000004f6,0x000004bc,0x0004003d,0x00000006,0x000004f8,0x000000c6,0x00050080,0x00000006, + 0x000004f9,0x000004f8,0x000004bc,0x0003003e,0x000004fa,0x000004f7,0x0003003e,0x000004fb, + 0x000004f9,0x00050041,0x0000004e,0x000004fd,0x000003eb,0x00000466,0x0004003d,0x0000004a, + 0x000004fe,0x000004fd,0x0003003e,0x000004fc,0x000004fe,0x00070039,0x00000002,0x000004ff, + 0x00000099,0x000004fa,0x000004fb,0x000004fc,0x000200f9,0x000004d7,0x000200f8,0x000004d7, + 0x000100fd,0x00010038,0x00050036,0x00000002,0x000000d3,0x00000000,0x000000c4,0x00030037, + 0x00000007,0x000000cd,0x00030037,0x00000007,0x000000ce,0x00030037,0x000000a4,0x000000cf, + 0x00030037,0x00000007,0x000000d0,0x00030037,0x00000007,0x000000d1,0x00030037,0x00000007, + 0x000000d2,0x000200f8,0x000000d4,0x0004003b,0x00000007,0x00000500,0x00000007,0x0004003b, + 0x00000007,0x00000502,0x00000007,0x0004003b,0x000000a4,0x00000504,0x00000007,0x0004003b, + 0x00000007,0x00000506,0x00000007,0x0004003b,0x00000007,0x00000508,0x00000007,0x0004003b, + 0x00000007,0x0000050a,0x00000007,0x0004003d,0x00000006,0x00000501,0x000000cd,0x0003003e, + 0x00000500,0x00000501,0x0004003d,0x00000006,0x00000503,0x000000ce,0x0003003e,0x00000502, + 0x00000503,0x0004003d,0x00000029,0x00000505,0x000000cf,0x0003003e,0x00000504,0x00000505, + 0x0004003d,0x00000006,0x00000507,0x000000d0,0x0003003e,0x00000506,0x00000507,0x0004003d, + 0x00000006,0x00000509,0x000000d1,0x0003003e,0x00000508,0x00000509,0x0004003d,0x00000006, + 0x0000050b,0x000000d2,0x0003003e,0x0000050a,0x0000050b,0x000a0039,0x00000002,0x0000050c, + 0x000000cb,0x00000500,0x00000502,0x00000504,0x00000506,0x00000508,0x0000050a,0x000100fd, + 0x00010038,0x00050036,0x00000002,0x000000db,0x00000000,0x000000c4,0x00030037,0x00000007, + 0x000000d5,0x00030037,0x00000007,0x000000d6,0x00030037,0x000000a4,0x000000d7,0x00030037, + 0x00000007,0x000000d8,0x00030037,0x00000007,0x000000d9,0x00030037,0x00000007,0x000000da, + 0x000200f8,0x000000dc,0x0004003b,0x0000004e,0x00000511,0x00000007,0x0004003b,0x000000a4, + 0x0000052e,0x00000007,0x0004003b,0x000000a4,0x0000052f,0x00000007,0x0004003b,0x000000a4, + 0x00000530,0x00000007,0x0004003b,0x000000a4,0x00000531,0x00000007,0x0004003b,0x0000003d, + 0x0000053d,0x00000007,0x0004003b,0x0000004e,0x0000053e,0x00000007,0x0004003b,0x00000007, + 0x00000540,0x00000007,0x0004003b,0x00000007,0x00000542,0x00000007,0x0004003b,0x00000007, + 0x0000054c,0x00000007,0x0004003b,0x00000007,0x0000054d,0x00000007,0x0004003b,0x0000004e, + 0x0000054e,0x00000007,0x0004003d,0x00000006,0x0000050d,0x000000d8,0x000500b0,0x0000009d, + 0x0000050e,0x0000050d,0x000003d1,0x000300f7,0x00000510,0x00000000,0x000400fa,0x0000050e, + 0x0000050f,0x00000510,0x000200f8,0x0000050f,0x0004003d,0x00000006,0x00000512,0x000000d5, + 0x00050084,0x00000006,0x00000513,0x00000512,0x00000141,0x00050080,0x00000006,0x00000514, + 0x00000513,0x00000186,0x0004003d,0x00000006,0x00000515,0x000000d6,0x00050084,0x00000006, + 0x00000516,0x00000515,0x00000141,0x00050080,0x00000006,0x00000517,0x00000516,0x00000186, + 0x00050050,0x00000029,0x00000518,0x00000514,0x00000517,0x0004003d,0x00000006,0x00000519, + 0x000000d5,0x00050084,0x00000006,0x0000051a,0x00000519,0x00000141,0x00050080,0x00000006, + 0x0000051b,0x0000051a,0x00000148,0x0004003d,0x00000006,0x0000051c,0x000000d6,0x00050084, + 0x00000006,0x0000051d,0x0000051c,0x00000141,0x00050080,0x00000006,0x0000051e,0x0000051d, + 0x00000186,0x00050050,0x00000029,0x0000051f,0x0000051b,0x0000051e,0x0004003d,0x00000006, + 0x00000520,0x000000d5,0x00050084,0x00000006,0x00000521,0x00000520,0x00000141,0x00050080, + 0x00000006,0x00000522,0x00000521,0x00000186,0x0004003d,0x00000006,0x00000523,0x000000d6, + 0x00050084,0x00000006,0x00000524,0x00000523,0x00000141,0x00050080,0x00000006,0x00000525, + 0x00000524,0x00000148,0x00050050,0x00000029,0x00000526,0x00000522,0x00000525,0x0004003d, + 0x00000006,0x00000527,0x000000d5,0x00050084,0x00000006,0x00000528,0x00000527,0x00000141, + 0x00050080,0x00000006,0x00000529,0x00000528,0x00000148,0x0004003d,0x00000006,0x0000052a, + 0x000000d6,0x00050084,0x00000006,0x0000052b,0x0000052a,0x00000141,0x00050080,0x00000006, + 0x0000052c,0x0000052b,0x00000148,0x00050050,0x00000029,0x0000052d,0x00000529,0x0000052c, + 0x0003003e,0x0000052e,0x00000518,0x0003003e,0x0000052f,0x0000051f,0x0003003e,0x00000530, + 0x00000526,0x0003003e,0x00000531,0x0000052d,0x00080039,0x0000004a,0x00000532,0x000000aa, + 0x0000052e,0x0000052f,0x00000530,0x00000531,0x0003003e,0x00000511,0x00000532,0x0004003d, + 0x00000029,0x00000533,0x000000d7,0x00050050,0x00000029,0x00000534,0x000004bc,0x000004bc, + 0x00050084,0x00000029,0x00000535,0x00000533,0x00000534,0x0004007c,0x0000002e,0x00000536, + 0x00000535,0x0004003d,0x00000006,0x00000537,0x000000d5,0x0004007c,0x00000013,0x00000538, + 0x00000537,0x0004003d,0x00000006,0x00000539,0x000000d6,0x0004007c,0x00000013,0x0000053a, + 0x00000539,0x00050050,0x0000002e,0x0000053b,0x00000538,0x0000053a,0x00050080,0x0000002e, + 0x0000053c,0x00000536,0x0000053b,0x0003003e,0x0000053d,0x0000053c,0x0004003d,0x0000004a, + 0x0000053f,0x00000511,0x0003003e,0x0000053e,0x0000053f,0x0004003d,0x00000006,0x00000541, + 0x000000d9,0x0003003e,0x00000540,0x00000541,0x0004003d,0x00000006,0x00000543,0x000000da, + 0x0003003e,0x00000542,0x00000543,0x00080039,0x00000002,0x00000544,0x0000008e,0x0000053d, + 0x0000053e,0x00000540,0x00000542,0x0004003d,0x00000006,0x00000545,0x000000d5,0x00050084, + 0x00000006,0x00000546,0x00000545,0x00000141,0x0004003d,0x00000006,0x00000547,0x000000d6, + 0x00050089,0x00000006,0x00000548,0x00000547,0x00000141,0x00050080,0x00000006,0x00000549, + 0x00000546,0x00000548,0x0004003d,0x00000006,0x0000054a,0x000000d6,0x00050084,0x00000006, + 0x0000054b,0x0000054a,0x00000141,0x0003003e,0x0000054c,0x00000549,0x0003003e,0x0000054d, + 0x0000054b,0x0004003d,0x0000004a,0x0000054f,0x00000511,0x0003003e,0x0000054e,0x0000054f, + 0x00070039,0x00000002,0x00000550,0x00000099,0x0000054c,0x0000054d,0x0000054e,0x000200f9, + 0x00000510,0x000200f8,0x00000510,0x000100fd,0x00010038,0x00050036,0x00000002,0x000000e3, + 0x00000000,0x000000c4,0x00030037,0x00000007,0x000000dd,0x00030037,0x00000007,0x000000de, + 0x00030037,0x000000a4,0x000000df,0x00030037,0x00000007,0x000000e0,0x00030037,0x00000007, + 0x000000e1,0x00030037,0x00000007,0x000000e2,0x000200f8,0x000000e4,0x0004003b,0x0000004e, + 0x00000555,0x00000007,0x0004003b,0x000000a4,0x00000576,0x00000007,0x0004003b,0x000000a4, + 0x00000577,0x00000007,0x0004003b,0x000000a4,0x00000578,0x00000007,0x0004003b,0x000000a4, + 0x00000579,0x00000007,0x0004003b,0x0000003d,0x00000585,0x00000007,0x0004003b,0x0000004e, + 0x00000586,0x00000007,0x0004003b,0x00000007,0x00000588,0x00000007,0x0004003b,0x00000007, + 0x0000058a,0x00000007,0x0004003b,0x00000007,0x00000593,0x00000007,0x0004003b,0x00000007, + 0x00000594,0x00000007,0x0004003b,0x0000004e,0x00000595,0x00000007,0x0004003d,0x00000006, + 0x00000551,0x000000e0,0x000500b0,0x0000009d,0x00000552,0x00000551,0x000002ec,0x000300f7, + 0x00000554,0x00000000,0x000400fa,0x00000552,0x00000553,0x00000554,0x000200f8,0x00000553, + 0x0004003d,0x00000006,0x00000556,0x000000dd,0x00050084,0x00000006,0x00000557,0x00000556, + 0x000001ce,0x00050080,0x00000006,0x00000558,0x00000557,0x00000186,0x00050080,0x00000006, + 0x00000559,0x00000558,0x00000186,0x0004003d,0x00000006,0x0000055a,0x000000de,0x00050084, + 0x00000006,0x0000055b,0x0000055a,0x000001ce,0x00050080,0x00000006,0x0000055c,0x0000055b, + 0x00000186,0x00050050,0x00000029,0x0000055d,0x00000559,0x0000055c,0x0004003d,0x00000006, + 0x0000055e,0x000000dd,0x00050084,0x00000006,0x0000055f,0x0000055e,0x000001ce,0x00050080, + 0x00000006,0x00000560,0x0000055f,0x00000141,0x00050080,0x00000006,0x00000561,0x00000560, + 0x00000186,0x0004003d,0x00000006,0x00000562,0x000000de,0x00050084,0x00000006,0x00000563, + 0x00000562,0x000001ce,0x00050080,0x00000006,0x00000564,0x00000563,0x00000186,0x00050050, + 0x00000029,0x00000565,0x00000561,0x00000564,0x0004003d,0x00000006,0x00000566,0x000000dd, + 0x00050084,0x00000006,0x00000567,0x00000566,0x000001ce,0x00050080,0x00000006,0x00000568, + 0x00000567,0x00000186,0x00050080,0x00000006,0x00000569,0x00000568,0x00000148,0x0004003d, + 0x00000006,0x0000056a,0x000000de,0x00050084,0x00000006,0x0000056b,0x0000056a,0x000001ce, + 0x00050080,0x00000006,0x0000056c,0x0000056b,0x00000141,0x00050050,0x00000029,0x0000056d, + 0x00000569,0x0000056c,0x0004003d,0x00000006,0x0000056e,0x000000dd,0x00050084,0x00000006, + 0x0000056f,0x0000056e,0x000001ce,0x00050080,0x00000006,0x00000570,0x0000056f,0x00000141, + 0x00050080,0x00000006,0x00000571,0x00000570,0x00000148,0x0004003d,0x00000006,0x00000572, + 0x000000de,0x00050084,0x00000006,0x00000573,0x00000572,0x000001ce,0x00050080,0x00000006, + 0x00000574,0x00000573,0x00000141,0x00050050,0x00000029,0x00000575,0x00000571,0x00000574, + 0x0003003e,0x00000576,0x0000055d,0x0003003e,0x00000577,0x00000565,0x0003003e,0x00000578, + 0x0000056d,0x0003003e,0x00000579,0x00000575,0x00080039,0x0000004a,0x0000057a,0x000000aa, + 0x00000576,0x00000577,0x00000578,0x00000579,0x0003003e,0x00000555,0x0000057a,0x0004003d, + 0x00000029,0x0000057b,0x000000df,0x00050050,0x00000029,0x0000057c,0x000001ce,0x000001ce, + 0x00050084,0x00000029,0x0000057d,0x0000057b,0x0000057c,0x0004007c,0x0000002e,0x0000057e, + 0x0000057d,0x0004003d,0x00000006,0x0000057f,0x000000dd,0x0004007c,0x00000013,0x00000580, + 0x0000057f,0x0004003d,0x00000006,0x00000581,0x000000de,0x0004007c,0x00000013,0x00000582, + 0x00000581,0x00050050,0x0000002e,0x00000583,0x00000580,0x00000582,0x00050080,0x0000002e, + 0x00000584,0x0000057e,0x00000583,0x0003003e,0x00000585,0x00000584,0x0004003d,0x0000004a, + 0x00000587,0x00000555,0x0003003e,0x00000586,0x00000587,0x0004003d,0x00000006,0x00000589, + 0x000000e1,0x0003003e,0x00000588,0x00000589,0x0004003d,0x00000006,0x0000058b,0x000000e2, + 0x0003003e,0x0000058a,0x0000058b,0x00080039,0x00000002,0x0000058c,0x0000008e,0x00000585, + 0x00000586,0x00000588,0x0000058a,0x0004003d,0x00000006,0x0000058d,0x000000dd,0x00050084, + 0x00000006,0x0000058e,0x0000058d,0x000001ce,0x0004003d,0x00000006,0x0000058f,0x000000de, + 0x00050080,0x00000006,0x00000590,0x0000058e,0x0000058f,0x0004003d,0x00000006,0x00000591, + 0x000000de,0x00050084,0x00000006,0x00000592,0x00000591,0x000001ce,0x0003003e,0x00000593, + 0x00000590,0x0003003e,0x00000594,0x00000592,0x0004003d,0x0000004a,0x00000596,0x00000555, + 0x0003003e,0x00000595,0x00000596,0x00070039,0x00000002,0x00000597,0x00000099,0x00000593, + 0x00000594,0x00000595,0x000200f9,0x00000554,0x000200f8,0x00000554,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x000000eb,0x00000000,0x000000c4,0x00030037,0x00000007,0x000000e5, + 0x00030037,0x00000007,0x000000e6,0x00030037,0x000000a4,0x000000e7,0x00030037,0x00000007, + 0x000000e8,0x00030037,0x00000007,0x000000e9,0x00030037,0x00000007,0x000000ea,0x000200f8, + 0x000000ec,0x0004003b,0x0000004e,0x0000059c,0x00000007,0x0004003b,0x000000a4,0x000005c9, + 0x00000007,0x0004003b,0x000000a4,0x000005ca,0x00000007,0x0004003b,0x000000a4,0x000005cb, + 0x00000007,0x0004003b,0x000000a4,0x000005cc,0x00000007,0x0004003b,0x0000003d,0x000005d8, + 0x00000007,0x0004003b,0x0000004e,0x000005d9,0x00000007,0x0004003b,0x00000007,0x000005db, + 0x00000007,0x0004003b,0x00000007,0x000005dd,0x00000007,0x0004003b,0x00000007,0x000005e4, + 0x00000007,0x0004003b,0x00000007,0x000005e5,0x00000007,0x0004003b,0x0000004e,0x000005e6, + 0x00000007,0x0004003d,0x00000006,0x00000598,0x000000e8,0x000500b0,0x0000009d,0x00000599, + 0x00000598,0x000001ce,0x000300f7,0x0000059b,0x00000000,0x000400fa,0x00000599,0x0000059a, + 0x0000059b,0x000200f8,0x0000059a,0x0004003d,0x00000006,0x0000059d,0x000000e5,0x00050084, + 0x00000006,0x0000059e,0x0000059d,0x000004bc,0x00050080,0x00000006,0x0000059f,0x0000059e, + 0x00000186,0x00050080,0x00000006,0x000005a0,0x0000059f,0x00000186,0x0004003d,0x00000006, + 0x000005a1,0x000000e6,0x00050084,0x00000006,0x000005a2,0x000005a1,0x00000141,0x00050080, + 0x00000006,0x000005a3,0x000005a0,0x000005a2,0x0004003d,0x00000006,0x000005a4,0x000000e6, + 0x00050084,0x00000006,0x000005a5,0x000005a4,0x000004bc,0x00050080,0x00000006,0x000005a6, + 0x000005a5,0x00000186,0x00050050,0x00000029,0x000005a7,0x000005a3,0x000005a6,0x0004003d, + 0x00000006,0x000005a8,0x000000e5,0x00050084,0x00000006,0x000005a9,0x000005a8,0x000004bc, + 0x00050080,0x00000006,0x000005aa,0x000005a9,0x000001ce,0x00050080,0x00000006,0x000005ab, + 0x000005aa,0x00000186,0x0004003d,0x00000006,0x000005ac,0x000000e6,0x00050084,0x00000006, + 0x000005ad,0x000005ac,0x00000141,0x00050080,0x00000006,0x000005ae,0x000005ab,0x000005ad, + 0x0004003d,0x00000006,0x000005af,0x000000e6,0x00050084,0x00000006,0x000005b0,0x000005af, + 0x000004bc,0x00050080,0x00000006,0x000005b1,0x000005b0,0x00000186,0x00050050,0x00000029, + 0x000005b2,0x000005ae,0x000005b1,0x0004003d,0x00000006,0x000005b3,0x000000e5,0x00050084, + 0x00000006,0x000005b4,0x000005b3,0x000004bc,0x00050080,0x00000006,0x000005b5,0x000005b4, + 0x00000186,0x00050080,0x00000006,0x000005b6,0x000005b5,0x00000148,0x0004003d,0x00000006, + 0x000005b7,0x000000e6,0x00050084,0x00000006,0x000005b8,0x000005b7,0x00000141,0x00050080, + 0x00000006,0x000005b9,0x000005b6,0x000005b8,0x0004003d,0x00000006,0x000005ba,0x000000e6, + 0x00050084,0x00000006,0x000005bb,0x000005ba,0x000004bc,0x00050080,0x00000006,0x000005bc, + 0x000005bb,0x000001ce,0x00050050,0x00000029,0x000005bd,0x000005b9,0x000005bc,0x0004003d, + 0x00000006,0x000005be,0x000000e5,0x00050084,0x00000006,0x000005bf,0x000005be,0x000004bc, + 0x00050080,0x00000006,0x000005c0,0x000005bf,0x000001ce,0x00050080,0x00000006,0x000005c1, + 0x000005c0,0x00000148,0x0004003d,0x00000006,0x000005c2,0x000000e6,0x00050084,0x00000006, + 0x000005c3,0x000005c2,0x00000141,0x00050080,0x00000006,0x000005c4,0x000005c1,0x000005c3, + 0x0004003d,0x00000006,0x000005c5,0x000000e6,0x00050084,0x00000006,0x000005c6,0x000005c5, + 0x000004bc,0x00050080,0x00000006,0x000005c7,0x000005c6,0x000001ce,0x00050050,0x00000029, + 0x000005c8,0x000005c4,0x000005c7,0x0003003e,0x000005c9,0x000005a7,0x0003003e,0x000005ca, + 0x000005b2,0x0003003e,0x000005cb,0x000005bd,0x0003003e,0x000005cc,0x000005c8,0x00080039, + 0x0000004a,0x000005cd,0x000000aa,0x000005c9,0x000005ca,0x000005cb,0x000005cc,0x0003003e, + 0x0000059c,0x000005cd,0x0004003d,0x00000029,0x000005ce,0x000000e7,0x00050050,0x00000029, + 0x000005cf,0x00000141,0x00000141,0x00050084,0x00000029,0x000005d0,0x000005ce,0x000005cf, + 0x0004007c,0x0000002e,0x000005d1,0x000005d0,0x0004003d,0x00000006,0x000005d2,0x000000e5, + 0x0004007c,0x00000013,0x000005d3,0x000005d2,0x0004003d,0x00000006,0x000005d4,0x000000e6, + 0x0004007c,0x00000013,0x000005d5,0x000005d4,0x00050050,0x0000002e,0x000005d6,0x000005d3, + 0x000005d5,0x00050080,0x0000002e,0x000005d7,0x000005d1,0x000005d6,0x0003003e,0x000005d8, + 0x000005d7,0x0004003d,0x0000004a,0x000005da,0x0000059c,0x0003003e,0x000005d9,0x000005da, + 0x0004003d,0x00000006,0x000005dc,0x000000e9,0x0003003e,0x000005db,0x000005dc,0x0004003d, + 0x00000006,0x000005de,0x000000ea,0x0003003e,0x000005dd,0x000005de,0x00080039,0x00000002, + 0x000005df,0x0000008e,0x000005d8,0x000005d9,0x000005db,0x000005dd,0x0004003d,0x00000006, + 0x000005e0,0x000000e5,0x0004003d,0x00000006,0x000005e1,0x000000e6,0x00050084,0x00000006, + 0x000005e2,0x000005e1,0x00000141,0x00050080,0x00000006,0x000005e3,0x000005e0,0x000005e2, + 0x0003003e,0x000005e4,0x000005e3,0x0003003e,0x000005e5,0x00000186,0x0004003d,0x0000004a, + 0x000005e7,0x0000059c,0x0003003e,0x000005e6,0x000005e7,0x00070039,0x00000002,0x000005e8, + 0x00000099,0x000005e4,0x000005e5,0x000005e6,0x000200f9,0x0000059b,0x000200f8,0x0000059b, + 0x000100fd,0x00010038,0x00050036,0x00000002,0x000000f2,0x00000000,0x000000ed,0x00030037, + 0x000000a4,0x000000ee,0x00030037,0x00000007,0x000000ef,0x00030037,0x00000007,0x000000f0, + 0x00030037,0x00000007,0x000000f1,0x000200f8,0x000000f3,0x0004003b,0x0000004e,0x000005ed, + 0x00000007,0x0004003b,0x000000a4,0x000005f0,0x00000007,0x0004003b,0x000000a4,0x000005f1, + 0x00000007,0x0004003b,0x000000a4,0x000005f2,0x00000007,0x0004003b,0x000000a4,0x000005f3, + 0x00000007,0x0004003b,0x0000003d,0x000005f7,0x00000007,0x0004003b,0x0000004e,0x000005f8, + 0x00000007,0x0004003b,0x00000007,0x000005fa,0x00000007,0x0004003b,0x00000007,0x000005fc, + 0x00000007,0x0004003d,0x00000006,0x000005e9,0x000000ef,0x000500b0,0x0000009d,0x000005ea, + 0x000005e9,0x00000148,0x000300f7,0x000005ec,0x00000000,0x000400fa,0x000005ea,0x000005eb, + 0x000005ec,0x000200f8,0x000005eb,0x0003003e,0x000005f0,0x0000037f,0x0003003e,0x000005f1, + 0x00000385,0x0003003e,0x000005f2,0x000005ee,0x0003003e,0x000005f3,0x000005ef,0x00080039, + 0x0000004a,0x000005f4,0x000000aa,0x000005f0,0x000005f1,0x000005f2,0x000005f3,0x0003003e, + 0x000005ed,0x000005f4,0x0004003d,0x00000029,0x000005f5,0x000000ee,0x0004007c,0x0000002e, + 0x000005f6,0x000005f5,0x0003003e,0x000005f7,0x000005f6,0x0004003d,0x0000004a,0x000005f9, + 0x000005ed,0x0003003e,0x000005f8,0x000005f9,0x0004003d,0x00000006,0x000005fb,0x000000f0, + 0x0003003e,0x000005fa,0x000005fb,0x0004003d,0x00000006,0x000005fd,0x000000f1,0x0003003e, + 0x000005fc,0x000005fd,0x00080039,0x00000002,0x000005fe,0x0000008e,0x000005f7,0x000005f8, + 0x000005fa,0x000005fc,0x000200f9,0x000005ec,0x000200f8,0x000005ec,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x000000f9,0x00000000,0x000000f4,0x00030037,0x00000007,0x000000f5, + 0x00030037,0x00000007,0x000000f6,0x00030037,0x00000007,0x000000f7,0x00030037,0x00000007, + 0x000000f8,0x000200f8,0x000000fa,0x0004003b,0x0000003d,0x000005ff,0x00000007,0x0004003b, + 0x0000003d,0x00000609,0x00000007,0x0004003b,0x0000004e,0x00000613,0x00000007,0x0004003b, + 0x000000a4,0x00000616,0x00000007,0x0004003b,0x00000007,0x00000617,0x00000007,0x0004003b, + 0x0000003d,0x0000061b,0x00000007,0x0004003b,0x0000004e,0x0000061d,0x00000007,0x0004003b, + 0x00000007,0x0000061f,0x00000007,0x0004003b,0x00000007,0x00000620,0x00000007,0x0004003b, + 0x0000004e,0x00000635,0x00000007,0x0004003b,0x000000a4,0x00000638,0x00000007,0x0004003b, + 0x00000007,0x00000639,0x00000007,0x0004003b,0x0000003d,0x0000063c,0x00000007,0x0004003b, + 0x0000004e,0x0000063e,0x00000007,0x0004003b,0x00000007,0x00000640,0x00000007,0x0004003b, + 0x00000007,0x00000641,0x00000007,0x0004003b,0x0000004e,0x00000656,0x00000007,0x0004003b, + 0x000000a4,0x00000659,0x00000007,0x0004003b,0x00000007,0x0000065a,0x00000007,0x0004003b, + 0x0000003d,0x0000065d,0x00000007,0x0004003b,0x0000004e,0x0000065f,0x00000007,0x0004003b, + 0x00000007,0x00000661,0x00000007,0x0004003b,0x00000007,0x00000662,0x00000007,0x0004003b, + 0x0000004e,0x00000677,0x00000007,0x0004003b,0x000000a4,0x0000067a,0x00000007,0x0004003b, + 0x00000007,0x0000067b,0x00000007,0x0004003b,0x0000003d,0x0000067e,0x00000007,0x0004003b, + 0x0000004e,0x00000680,0x00000007,0x0004003b,0x00000007,0x00000682,0x00000007,0x0004003b, + 0x00000007,0x00000683,0x00000007,0x0004003b,0x0000004e,0x0000068c,0x00000007,0x0004003b, + 0x0000004e,0x0000068d,0x00000007,0x0004003b,0x0000004e,0x0000068f,0x00000007,0x0004003b, + 0x0000004e,0x00000691,0x00000007,0x0004003b,0x0000004e,0x00000693,0x00000007,0x0004003b, + 0x0000003d,0x0000069b,0x00000007,0x0004003b,0x0000004e,0x0000069c,0x00000007,0x0004003b, + 0x00000007,0x0000069e,0x00000007,0x0004003b,0x00000007,0x0000069f,0x00000007,0x0004003b, + 0x00000007,0x000006a2,0x00000007,0x0004003b,0x00000007,0x000006a4,0x00000007,0x0004003b, + 0x0000004e,0x000006a6,0x00000007,0x0004003d,0x00000006,0x00000600,0x000000f5,0x00050084, + 0x00000006,0x00000601,0x00000600,0x000001ce,0x00050080,0x00000006,0x00000602,0x00000601, + 0x00000186,0x0004007c,0x00000013,0x00000603,0x00000602,0x0004003d,0x00000006,0x00000604, + 0x000000f6,0x00050084,0x00000006,0x00000605,0x00000604,0x000001ce,0x00050080,0x00000006, + 0x00000606,0x00000605,0x00000186,0x0004007c,0x00000013,0x00000607,0x00000606,0x00050050, + 0x0000002e,0x00000608,0x00000603,0x00000607,0x0003003e,0x000005ff,0x00000608,0x0004003d, + 0x00000006,0x0000060a,0x000000f5,0x00050084,0x00000006,0x0000060b,0x0000060a,0x00000141, + 0x00050080,0x00000006,0x0000060c,0x0000060b,0x00000186,0x0004007c,0x00000013,0x0000060d, + 0x0000060c,0x0004003d,0x00000006,0x0000060e,0x000000f6,0x00050084,0x00000006,0x0000060f, + 0x0000060e,0x00000141,0x00050080,0x00000006,0x00000610,0x0000060f,0x00000186,0x0004007c, + 0x00000013,0x00000611,0x00000610,0x00050050,0x0000002e,0x00000612,0x0000060d,0x00000611, + 0x0003003e,0x00000609,0x00000612,0x0004003d,0x0000002e,0x00000614,0x000005ff,0x0004007c, + 0x00000029,0x00000615,0x00000614,0x0003003e,0x00000616,0x00000615,0x0004003d,0x00000006, + 0x00000618,0x000000f8,0x0003003e,0x00000617,0x00000618,0x00060039,0x0000004a,0x00000619, + 0x000000b7,0x00000616,0x00000617,0x0003003e,0x00000613,0x00000619,0x0004003d,0x0000002e, + 0x0000061c,0x00000609,0x0003003e,0x0000061b,0x0000061c,0x0004003d,0x0000004a,0x0000061e, + 0x00000613,0x0003003e,0x0000061d,0x0000061e,0x0003003e,0x0000061f,0x0000061a,0x0004003d, + 0x00000006,0x00000621,0x000000f8,0x0003003e,0x00000620,0x00000621,0x00080039,0x00000002, + 0x00000622,0x0000008e,0x0000061b,0x0000061d,0x0000061f,0x00000620,0x0004003d,0x00000006, + 0x00000623,0x000000f5,0x00050084,0x00000006,0x00000624,0x00000623,0x000001ce,0x00050080, + 0x00000006,0x00000625,0x00000624,0x00000141,0x0004007c,0x00000013,0x00000626,0x00000625, + 0x0004003d,0x00000006,0x00000627,0x000000f6,0x00050084,0x00000006,0x00000628,0x00000627, + 0x000001ce,0x00050080,0x00000006,0x00000629,0x00000628,0x00000186,0x0004007c,0x00000013, + 0x0000062a,0x00000629,0x00050050,0x0000002e,0x0000062b,0x00000626,0x0000062a,0x0003003e, + 0x000005ff,0x0000062b,0x0004003d,0x00000006,0x0000062c,0x000000f5,0x00050084,0x00000006, + 0x0000062d,0x0000062c,0x00000141,0x00050080,0x00000006,0x0000062e,0x0000062d,0x00000148, + 0x0004007c,0x00000013,0x0000062f,0x0000062e,0x0004003d,0x00000006,0x00000630,0x000000f6, + 0x00050084,0x00000006,0x00000631,0x00000630,0x00000141,0x00050080,0x00000006,0x00000632, + 0x00000631,0x00000186,0x0004007c,0x00000013,0x00000633,0x00000632,0x00050050,0x0000002e, + 0x00000634,0x0000062f,0x00000633,0x0003003e,0x00000609,0x00000634,0x0004003d,0x0000002e, + 0x00000636,0x000005ff,0x0004007c,0x00000029,0x00000637,0x00000636,0x0003003e,0x00000638, + 0x00000637,0x0004003d,0x00000006,0x0000063a,0x000000f8,0x0003003e,0x00000639,0x0000063a, + 0x00060039,0x0000004a,0x0000063b,0x000000b7,0x00000638,0x00000639,0x0003003e,0x00000635, + 0x0000063b,0x0004003d,0x0000002e,0x0000063d,0x00000609,0x0003003e,0x0000063c,0x0000063d, + 0x0004003d,0x0000004a,0x0000063f,0x00000635,0x0003003e,0x0000063e,0x0000063f,0x0003003e, + 0x00000640,0x0000061a,0x0004003d,0x00000006,0x00000642,0x000000f8,0x0003003e,0x00000641, + 0x00000642,0x00080039,0x00000002,0x00000643,0x0000008e,0x0000063c,0x0000063e,0x00000640, + 0x00000641,0x0004003d,0x00000006,0x00000644,0x000000f5,0x00050084,0x00000006,0x00000645, + 0x00000644,0x000001ce,0x00050080,0x00000006,0x00000646,0x00000645,0x00000186,0x0004007c, + 0x00000013,0x00000647,0x00000646,0x0004003d,0x00000006,0x00000648,0x000000f6,0x00050084, + 0x00000006,0x00000649,0x00000648,0x000001ce,0x00050080,0x00000006,0x0000064a,0x00000649, + 0x00000141,0x0004007c,0x00000013,0x0000064b,0x0000064a,0x00050050,0x0000002e,0x0000064c, + 0x00000647,0x0000064b,0x0003003e,0x000005ff,0x0000064c,0x0004003d,0x00000006,0x0000064d, + 0x000000f5,0x00050084,0x00000006,0x0000064e,0x0000064d,0x00000141,0x00050080,0x00000006, + 0x0000064f,0x0000064e,0x00000186,0x0004007c,0x00000013,0x00000650,0x0000064f,0x0004003d, + 0x00000006,0x00000651,0x000000f6,0x00050084,0x00000006,0x00000652,0x00000651,0x00000141, + 0x00050080,0x00000006,0x00000653,0x00000652,0x00000148,0x0004007c,0x00000013,0x00000654, + 0x00000653,0x00050050,0x0000002e,0x00000655,0x00000650,0x00000654,0x0003003e,0x00000609, + 0x00000655,0x0004003d,0x0000002e,0x00000657,0x000005ff,0x0004007c,0x00000029,0x00000658, + 0x00000657,0x0003003e,0x00000659,0x00000658,0x0004003d,0x00000006,0x0000065b,0x000000f8, + 0x0003003e,0x0000065a,0x0000065b,0x00060039,0x0000004a,0x0000065c,0x000000b7,0x00000659, + 0x0000065a,0x0003003e,0x00000656,0x0000065c,0x0004003d,0x0000002e,0x0000065e,0x00000609, + 0x0003003e,0x0000065d,0x0000065e,0x0004003d,0x0000004a,0x00000660,0x00000656,0x0003003e, + 0x0000065f,0x00000660,0x0003003e,0x00000661,0x0000061a,0x0004003d,0x00000006,0x00000663, + 0x000000f8,0x0003003e,0x00000662,0x00000663,0x00080039,0x00000002,0x00000664,0x0000008e, + 0x0000065d,0x0000065f,0x00000661,0x00000662,0x0004003d,0x00000006,0x00000665,0x000000f5, + 0x00050084,0x00000006,0x00000666,0x00000665,0x000001ce,0x00050080,0x00000006,0x00000667, + 0x00000666,0x00000141,0x0004007c,0x00000013,0x00000668,0x00000667,0x0004003d,0x00000006, + 0x00000669,0x000000f6,0x00050084,0x00000006,0x0000066a,0x00000669,0x000001ce,0x00050080, + 0x00000006,0x0000066b,0x0000066a,0x00000141,0x0004007c,0x00000013,0x0000066c,0x0000066b, + 0x00050050,0x0000002e,0x0000066d,0x00000668,0x0000066c,0x0003003e,0x000005ff,0x0000066d, + 0x0004003d,0x00000006,0x0000066e,0x000000f5,0x00050084,0x00000006,0x0000066f,0x0000066e, + 0x00000141,0x00050080,0x00000006,0x00000670,0x0000066f,0x00000148,0x0004007c,0x00000013, + 0x00000671,0x00000670,0x0004003d,0x00000006,0x00000672,0x000000f6,0x00050084,0x00000006, + 0x00000673,0x00000672,0x00000141,0x00050080,0x00000006,0x00000674,0x00000673,0x00000148, + 0x0004007c,0x00000013,0x00000675,0x00000674,0x00050050,0x0000002e,0x00000676,0x00000671, + 0x00000675,0x0003003e,0x00000609,0x00000676,0x0004003d,0x0000002e,0x00000678,0x000005ff, + 0x0004007c,0x00000029,0x00000679,0x00000678,0x0003003e,0x0000067a,0x00000679,0x0004003d, + 0x00000006,0x0000067c,0x000000f8,0x0003003e,0x0000067b,0x0000067c,0x00060039,0x0000004a, + 0x0000067d,0x000000b7,0x0000067a,0x0000067b,0x0003003e,0x00000677,0x0000067d,0x0004003d, + 0x0000002e,0x0000067f,0x00000609,0x0003003e,0x0000067e,0x0000067f,0x0004003d,0x0000004a, + 0x00000681,0x00000677,0x0003003e,0x00000680,0x00000681,0x0003003e,0x00000682,0x0000061a, + 0x0004003d,0x00000006,0x00000684,0x000000f8,0x0003003e,0x00000683,0x00000684,0x00080039, + 0x00000002,0x00000685,0x0000008e,0x0000067e,0x00000680,0x00000682,0x00000683,0x0004003d, + 0x00000006,0x00000686,0x000000f7,0x000500b2,0x0000009d,0x00000688,0x00000686,0x00000687, + 0x000300f7,0x0000068a,0x00000000,0x000400fa,0x00000688,0x00000689,0x0000068a,0x000200f8, + 0x00000689,0x000100fd,0x000200f8,0x0000068a,0x0004003d,0x0000004a,0x0000068e,0x00000613, + 0x0003003e,0x0000068d,0x0000068e,0x0004003d,0x0000004a,0x00000690,0x00000635,0x0003003e, + 0x0000068f,0x00000690,0x0004003d,0x0000004a,0x00000692,0x00000656,0x0003003e,0x00000691, + 0x00000692,0x0004003d,0x0000004a,0x00000694,0x00000677,0x0003003e,0x00000693,0x00000694, + 0x00080039,0x0000004a,0x00000695,0x00000087,0x0000068d,0x0000068f,0x00000691,0x00000693, + 0x0003003e,0x0000068c,0x00000695,0x0004003d,0x00000006,0x00000696,0x000000f5,0x0004007c, + 0x00000013,0x00000697,0x00000696,0x0004003d,0x00000006,0x00000698,0x000000f6,0x0004007c, + 0x00000013,0x00000699,0x00000698,0x00050050,0x0000002e,0x0000069a,0x00000697,0x00000699, + 0x0003003e,0x0000069b,0x0000069a,0x0004003d,0x0000004a,0x0000069d,0x0000068c,0x0003003e, + 0x0000069c,0x0000069d,0x0003003e,0x0000069e,0x00000687,0x0004003d,0x00000006,0x000006a0, + 0x000000f8,0x0003003e,0x0000069f,0x000006a0,0x00080039,0x00000002,0x000006a1,0x0000008e, + 0x0000069b,0x0000069c,0x0000069e,0x0000069f,0x0004003d,0x00000006,0x000006a3,0x000000f5, + 0x0003003e,0x000006a2,0x000006a3,0x0004003d,0x00000006,0x000006a5,0x000000f6,0x0003003e, + 0x000006a4,0x000006a5,0x0004003d,0x0000004a,0x000006a7,0x0000068c,0x0003003e,0x000006a6, + 0x000006a7,0x00070039,0x00000002,0x000006a8,0x00000099,0x000006a2,0x000006a4,0x000006a6, + 0x000100fd,0x00010038,0x00050036,0x00000002,0x00000103,0x00000000,0x000000fb,0x00030037, + 0x00000007,0x000000fc,0x00030037,0x00000007,0x000000fd,0x00030037,0x000000a4,0x000000fe, + 0x00030037,0x00000007,0x000000ff,0x00030037,0x00000007,0x00000100,0x00030037,0x00000007, + 0x00000101,0x00030037,0x00000007,0x00000102,0x000200f8,0x00000104,0x0004003b,0x00000007, + 0x000006b0,0x00000007,0x0004003b,0x00000007,0x000006b2,0x00000007,0x0004003b,0x000000a4, + 0x000006b4,0x00000007,0x0004003b,0x00000007,0x000006b6,0x00000007,0x0004003b,0x00000007, + 0x000006b8,0x00000007,0x0004003b,0x00000007,0x000006ba,0x00000007,0x0004003b,0x00000007, + 0x000006c7,0x00000007,0x0004003b,0x00000007,0x000006c9,0x00000007,0x0004003b,0x000000a4, + 0x000006cb,0x00000007,0x0004003b,0x00000007,0x000006cd,0x00000007,0x0004003b,0x00000007, + 0x000006cf,0x00000007,0x0004003b,0x00000007,0x000006d0,0x00000007,0x0004003b,0x00000007, + 0x000006dd,0x00000007,0x0004003b,0x00000007,0x000006df,0x00000007,0x0004003b,0x000000a4, + 0x000006e1,0x00000007,0x0004003b,0x00000007,0x000006e3,0x00000007,0x0004003b,0x00000007, + 0x000006e5,0x00000007,0x0004003b,0x00000007,0x000006e6,0x00000007,0x0004003b,0x000000a4, + 0x000006f3,0x00000007,0x0004003b,0x00000007,0x000006f5,0x00000007,0x0004003b,0x00000007, + 0x000006f7,0x00000007,0x0004003b,0x00000007,0x000006f8,0x00000007,0x0004003d,0x00000006, + 0x000006a9,0x00000101,0x0004003d,0x00000006,0x000006aa,0x00000100,0x000500b2,0x0000009d, + 0x000006ab,0x000006a9,0x000006aa,0x000300f7,0x000006ad,0x00000000,0x000400fa,0x000006ab, + 0x000006ac,0x000006ad,0x000200f8,0x000006ac,0x000100fd,0x000200f8,0x000006ad,0x00040039, + 0x00000002,0x000006af,0x0000009b,0x0004003d,0x00000006,0x000006b1,0x000000fc,0x0003003e, + 0x000006b0,0x000006b1,0x0004003d,0x00000006,0x000006b3,0x000000fd,0x0003003e,0x000006b2, + 0x000006b3,0x0004003d,0x00000029,0x000006b5,0x000000fe,0x0003003e,0x000006b4,0x000006b5, + 0x0004003d,0x00000006,0x000006b7,0x000000ff,0x0003003e,0x000006b6,0x000006b7,0x0004003d, + 0x00000006,0x000006b9,0x00000100,0x0003003e,0x000006b8,0x000006b9,0x0004003d,0x00000006, + 0x000006bb,0x00000102,0x0003003e,0x000006ba,0x000006bb,0x000a0039,0x00000002,0x000006bc, + 0x000000db,0x000006b0,0x000006b2,0x000006b4,0x000006b6,0x000006b8,0x000006ba,0x0004003d, + 0x00000006,0x000006bd,0x00000101,0x0004003d,0x00000006,0x000006be,0x00000100,0x00050080, + 0x00000006,0x000006bf,0x000006be,0x00000148,0x000500b2,0x0000009d,0x000006c0,0x000006bd, + 0x000006bf,0x000300f7,0x000006c2,0x00000000,0x000400fa,0x000006c0,0x000006c1,0x000006c2, + 0x000200f8,0x000006c1,0x000100fd,0x000200f8,0x000006c2,0x00040039,0x00000002,0x000006c4, + 0x0000009b,0x0004003d,0x00000006,0x000006c5,0x00000100,0x00050080,0x00000006,0x000006c6, + 0x000006c5,0x00000148,0x0004003d,0x00000006,0x000006c8,0x000000fc,0x0003003e,0x000006c7, + 0x000006c8,0x0004003d,0x00000006,0x000006ca,0x000000fd,0x0003003e,0x000006c9,0x000006ca, + 0x0004003d,0x00000029,0x000006cc,0x000000fe,0x0003003e,0x000006cb,0x000006cc,0x0004003d, + 0x00000006,0x000006ce,0x000000ff,0x0003003e,0x000006cd,0x000006ce,0x0003003e,0x000006cf, + 0x000006c6,0x0004003d,0x00000006,0x000006d1,0x00000102,0x0003003e,0x000006d0,0x000006d1, + 0x000a0039,0x00000002,0x000006d2,0x000000e3,0x000006c7,0x000006c9,0x000006cb,0x000006cd, + 0x000006cf,0x000006d0,0x0004003d,0x00000006,0x000006d3,0x00000101,0x0004003d,0x00000006, + 0x000006d4,0x00000100,0x00050080,0x00000006,0x000006d5,0x000006d4,0x00000141,0x000500b2, + 0x0000009d,0x000006d6,0x000006d3,0x000006d5,0x000300f7,0x000006d8,0x00000000,0x000400fa, + 0x000006d6,0x000006d7,0x000006d8,0x000200f8,0x000006d7,0x000100fd,0x000200f8,0x000006d8, + 0x00040039,0x00000002,0x000006da,0x0000009b,0x0004003d,0x00000006,0x000006db,0x00000100, + 0x00050080,0x00000006,0x000006dc,0x000006db,0x00000141,0x0004003d,0x00000006,0x000006de, + 0x000000fc,0x0003003e,0x000006dd,0x000006de,0x0004003d,0x00000006,0x000006e0,0x000000fd, + 0x0003003e,0x000006df,0x000006e0,0x0004003d,0x00000029,0x000006e2,0x000000fe,0x0003003e, + 0x000006e1,0x000006e2,0x0004003d,0x00000006,0x000006e4,0x000000ff,0x0003003e,0x000006e3, + 0x000006e4,0x0003003e,0x000006e5,0x000006dc,0x0004003d,0x00000006,0x000006e7,0x00000102, + 0x0003003e,0x000006e6,0x000006e7,0x000a0039,0x00000002,0x000006e8,0x000000eb,0x000006dd, + 0x000006df,0x000006e1,0x000006e3,0x000006e5,0x000006e6,0x0004003d,0x00000006,0x000006e9, + 0x00000101,0x0004003d,0x00000006,0x000006ea,0x00000100,0x00050080,0x00000006,0x000006eb, + 0x000006ea,0x00000142,0x000500b2,0x0000009d,0x000006ec,0x000006e9,0x000006eb,0x000300f7, + 0x000006ee,0x00000000,0x000400fa,0x000006ec,0x000006ed,0x000006ee,0x000200f8,0x000006ed, + 0x000100fd,0x000200f8,0x000006ee,0x00040039,0x00000002,0x000006f0,0x0000009b,0x0004003d, + 0x00000006,0x000006f1,0x00000100,0x00050080,0x00000006,0x000006f2,0x000006f1,0x00000142, + 0x0004003d,0x00000029,0x000006f4,0x000000fe,0x0003003e,0x000006f3,0x000006f4,0x0004003d, + 0x00000006,0x000006f6,0x000000ff,0x0003003e,0x000006f5,0x000006f6,0x0003003e,0x000006f7, + 0x000006f2,0x0004003d,0x00000006,0x000006f9,0x00000102,0x0003003e,0x000006f8,0x000006f9, + 0x00080039,0x00000002,0x000006fa,0x000000f2,0x000006f3,0x000006f5,0x000006f7,0x000006f8, + 0x000100fd,0x00010038,0x00050036,0x00000002,0x0000010b,0x00000000,0x00000105,0x00030037, + 0x000000a4,0x00000106,0x00030037,0x00000007,0x00000107,0x00030037,0x00000007,0x00000108, + 0x00030037,0x00000007,0x00000109,0x00030037,0x00000007,0x0000010a,0x000200f8,0x0000010c, + 0x0004003b,0x000000a4,0x000006fb,0x00000007,0x0004003b,0x00000007,0x000006fe,0x00000007, + 0x0004003b,0x00000007,0x00000700,0x00000007,0x0004003b,0x00000007,0x00000709,0x00000007, + 0x0004003b,0x00000007,0x00000711,0x00000007,0x0004003b,0x00000007,0x00000713,0x00000007, + 0x0004003b,0x000000a4,0x00000715,0x00000007,0x0004003b,0x00000007,0x00000717,0x00000007, + 0x0004003b,0x00000007,0x00000719,0x00000007,0x0004003b,0x00000007,0x0000071b,0x00000007, + 0x0004003b,0x00000007,0x0000071e,0x00000007,0x0004003b,0x00000007,0x00000720,0x00000007, + 0x0004003b,0x000000a4,0x00000722,0x00000007,0x0004003b,0x00000007,0x00000724,0x00000007, + 0x0004003b,0x00000007,0x00000726,0x00000007,0x0004003b,0x00000007,0x00000727,0x00000007, + 0x0004003b,0x00000007,0x00000729,0x00000007,0x0004003b,0x00000007,0x00000731,0x00000007, + 0x0004003b,0x00000007,0x00000733,0x00000007,0x0004003b,0x00000007,0x00000735,0x00000007, + 0x0004003b,0x00000007,0x0000073b,0x00000007,0x0004003b,0x00000007,0x0000073e,0x00000007, + 0x0004003b,0x00000007,0x00000740,0x00000007,0x0004003b,0x00000007,0x00000742,0x00000007, + 0x0004003b,0x00000007,0x00000744,0x00000007,0x0004003b,0x00000007,0x00000747,0x00000007, + 0x0004003b,0x00000007,0x00000749,0x00000007,0x0004003b,0x000000a4,0x0000074b,0x00000007, + 0x0004003b,0x00000007,0x0000074c,0x00000007,0x0004003b,0x00000007,0x0000074e,0x00000007, + 0x0004003b,0x00000007,0x0000074f,0x00000007,0x0004003b,0x00000007,0x00000751,0x00000007, + 0x0004003d,0x00000006,0x000006fc,0x00000107,0x00050089,0x00000006,0x000006fd,0x000006fc, + 0x000003d1,0x0003003e,0x000006fe,0x000006fd,0x00050039,0x00000029,0x000006ff,0x0000002c, + 0x000006fe,0x0003003e,0x000006fb,0x000006ff,0x00050041,0x00000007,0x00000701,0x000006fb, + 0x00000186,0x0004003d,0x00000006,0x00000702,0x00000701,0x0004003d,0x00000006,0x00000703, + 0x00000107,0x000500c2,0x00000006,0x00000705,0x00000703,0x00000704,0x00050089,0x00000006, + 0x00000706,0x00000705,0x00000141,0x00050084,0x00000006,0x00000707,0x000004bc,0x00000706, + 0x00050080,0x00000006,0x00000708,0x00000702,0x00000707,0x0003003e,0x00000700,0x00000708, + 0x00050041,0x00000007,0x0000070a,0x000006fb,0x00000148,0x0004003d,0x00000006,0x0000070b, + 0x0000070a,0x0004003d,0x00000006,0x0000070c,0x00000107,0x000500c2,0x00000006,0x0000070e, + 0x0000070c,0x0000070d,0x00050084,0x00000006,0x0000070f,0x000004bc,0x0000070e,0x00050080, + 0x00000006,0x00000710,0x0000070b,0x0000070f,0x0003003e,0x00000709,0x00000710,0x0004003d, + 0x00000006,0x00000712,0x00000700,0x0003003e,0x00000711,0x00000712,0x0004003d,0x00000006, + 0x00000714,0x00000709,0x0003003e,0x00000713,0x00000714,0x0004003d,0x00000029,0x00000716, + 0x00000106,0x0003003e,0x00000715,0x00000716,0x0004003d,0x00000006,0x00000718,0x00000107, + 0x0003003e,0x00000717,0x00000718,0x0004003d,0x00000006,0x0000071a,0x00000108,0x0003003e, + 0x00000719,0x0000071a,0x0004003d,0x00000006,0x0000071c,0x0000010a,0x0003003e,0x0000071b, + 0x0000071c,0x000a0039,0x00000002,0x0000071d,0x000000d3,0x00000711,0x00000713,0x00000715, + 0x00000717,0x00000719,0x0000071b,0x0004003d,0x00000006,0x0000071f,0x00000700,0x0003003e, + 0x0000071e,0x0000071f,0x0004003d,0x00000006,0x00000721,0x00000709,0x0003003e,0x00000720, + 0x00000721,0x0004003d,0x00000029,0x00000723,0x00000106,0x0003003e,0x00000722,0x00000723, + 0x0004003d,0x00000006,0x00000725,0x00000107,0x0003003e,0x00000724,0x00000725,0x0003003e, + 0x00000726,0x00000141,0x0004003d,0x00000006,0x00000728,0x00000108,0x0003003e,0x00000727, + 0x00000728,0x0004003d,0x00000006,0x0000072a,0x0000010a,0x0003003e,0x00000729,0x0000072a, + 0x000b0039,0x00000002,0x0000072b,0x00000103,0x0000071e,0x00000720,0x00000722,0x00000724, + 0x00000726,0x00000727,0x00000729,0x0004003d,0x00000006,0x0000072c,0x00000108,0x000500b2, + 0x0000009d,0x0000072d,0x0000072c,0x0000061a,0x000300f7,0x0000072f,0x00000000,0x000400fa, + 0x0000072d,0x0000072e,0x0000072f,0x000200f8,0x0000072e,0x000100fd,0x000200f8,0x0000072f, + 0x0004003d,0x00000006,0x00000732,0x00000109,0x0003003e,0x00000731,0x00000732,0x0004003d, + 0x00000006,0x00000734,0x00000107,0x0003003e,0x00000733,0x00000734,0x0004003d,0x00000006, + 0x00000736,0x0000010a,0x0003003e,0x00000735,0x00000736,0x00070039,0x0000009d,0x00000737, + 0x000000a2,0x00000731,0x00000733,0x00000735,0x000300f7,0x00000739,0x00000000,0x000400fa, + 0x00000737,0x00000738,0x00000739,0x000200f8,0x00000738,0x000100fd,0x000200f8,0x00000739, + 0x0004003d,0x00000006,0x0000073c,0x0000010a,0x0003003e,0x0000073b,0x0000073c,0x00050039, + 0x00000002,0x0000073d,0x00000076,0x0000073b,0x0004003d,0x00000006,0x0000073f,0x00000700, + 0x0003003e,0x0000073e,0x0000073f,0x0004003d,0x00000006,0x00000741,0x00000709,0x0003003e, + 0x00000740,0x00000741,0x0004003d,0x00000006,0x00000743,0x00000108,0x0003003e,0x00000742, + 0x00000743,0x0004003d,0x00000006,0x00000745,0x0000010a,0x0003003e,0x00000744,0x00000745, + 0x00080039,0x00000002,0x00000746,0x000000f9,0x0000073e,0x00000740,0x00000742,0x00000744, + 0x0004003d,0x00000006,0x00000748,0x00000700,0x0003003e,0x00000747,0x00000748,0x0004003d, + 0x00000006,0x0000074a,0x00000709,0x0003003e,0x00000749,0x0000074a,0x0003003e,0x0000074b, + 0x0000037f,0x0004003d,0x00000006,0x0000074d,0x00000107,0x0003003e,0x0000074c,0x0000074d, + 0x0003003e,0x0000074e,0x000004bc,0x0004003d,0x00000006,0x00000750,0x00000108,0x0003003e, + 0x0000074f,0x00000750,0x0004003d,0x00000006,0x00000752,0x0000010a,0x0003003e,0x00000751, + 0x00000752,0x000b0039,0x00000002,0x00000753,0x00000103,0x00000747,0x00000749,0x0000074b, + 0x0000074c,0x0000074e,0x0000074f,0x00000751,0x000100fd,0x00010038,0x00050036,0x00000002, + 0x00000114,0x00000000,0x0000010d,0x00030037,0x000000a4,0x0000010e,0x00030037,0x00000007, + 0x0000010f,0x00030037,0x00000007,0x00000110,0x00030037,0x00000007,0x00000111,0x00030037, + 0x00000007,0x00000112,0x00030037,0x000000a4,0x00000113,0x000200f8,0x00000115,0x0004003b, + 0x000000a4,0x00000757,0x00000007,0x0004003b,0x00000007,0x00000758,0x00000007,0x0004003b, + 0x00000007,0x0000075a,0x00000007,0x0004003b,0x00000007,0x0000075c,0x00000007,0x0004003b, + 0x00000007,0x0000075e,0x00000007,0x0004003d,0x00000029,0x00000754,0x0000010e,0x0004003d, + 0x00000029,0x00000755,0x00000113,0x00050080,0x00000029,0x00000756,0x00000754,0x00000755, + 0x0003003e,0x00000757,0x00000756,0x0004003d,0x00000006,0x00000759,0x0000010f,0x0003003e, + 0x00000758,0x00000759,0x0004003d,0x00000006,0x0000075b,0x00000110,0x0003003e,0x0000075a, + 0x0000075b,0x0004003d,0x00000006,0x0000075d,0x00000111,0x0003003e,0x0000075c,0x0000075d, + 0x0004003d,0x00000006,0x0000075f,0x00000112,0x0003003e,0x0000075e,0x0000075f,0x00090039, + 0x00000002,0x00000760,0x0000010b,0x00000757,0x00000758,0x0000075a,0x0000075c,0x0000075e, + 0x000100fd,0x00010038,0x00050036,0x00000002,0x0000011b,0x00000000,0x00000118,0x00030037, + 0x00000117,0x00000119,0x00030037,0x00000007,0x0000011a,0x000200f8,0x0000011c,0x0004003b, + 0x000000a4,0x00000769,0x00000007,0x0004003b,0x00000007,0x0000076a,0x00000007,0x0004003b, + 0x00000007,0x0000076b,0x00000007,0x0004003b,0x00000007,0x0000076c,0x00000007,0x0004003b, + 0x00000007,0x0000076d,0x00000007,0x0004003b,0x000000a4,0x0000076e,0x00000007,0x0004003d, + 0x00000116,0x00000761,0x00000119,0x0007004f,0x00000029,0x00000762,0x00000761,0x00000761, + 0x00000000,0x00000001,0x0004003d,0x00000006,0x00000763,0x0000011a,0x00040039,0x00000006, + 0x00000764,0x00000036,0x00040039,0x00000006,0x00000765,0x00000038,0x00050041,0x00000007, + 0x00000766,0x00000119,0x00000141,0x0004003d,0x00000006,0x00000767,0x00000766,0x00040039, + 0x00000029,0x00000768,0x0000003b,0x0003003e,0x00000769,0x00000762,0x0003003e,0x0000076a, + 0x00000763,0x0003003e,0x0000076b,0x00000764,0x0003003e,0x0000076c,0x00000765,0x0003003e, + 0x0000076d,0x00000767,0x0003003e,0x0000076e,0x00000768,0x000a0039,0x00000002,0x0000076f, + 0x00000114,0x00000769,0x0000076a,0x0000076b,0x0000076c,0x0000076d,0x0000076e,0x000100fd, + 0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_prepare_inputs_comp_spv.h b/gpu/vk/shaders/fsr3_prepare_inputs_comp_spv.h new file mode 100644 index 000000000..d03156242 --- /dev/null +++ b/gpu/vk/shaders/fsr3_prepare_inputs_comp_spv.h @@ -0,0 +1,562 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_PREPARE_INPUTS_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x0000028f,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000031,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e, + 0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x0000027a, + 0x00060010,0x00000004,0x00000011,0x00000008,0x00000008,0x00000001,0x00030003,0x00000002, + 0x000001c2,0x000b0004,0x455f4c47,0x735f5458,0x6c706d61,0x656c7265,0x745f7373,0x75747865, + 0x665f6572,0x74636e75,0x736e6f69,0x00000000,0x000b0004,0x455f4c47,0x735f5458,0x65646168, + 0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004, + 0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365, + 0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572, + 0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00070005,0x0000000c,0x4c786666, + 0x28707265,0x663b3166,0x31663b31,0x0000003b,0x00030005,0x00000009,0x00000078,0x00030005, + 0x0000000a,0x00000079,0x00030005,0x0000000b,0x00000074,0x00060005,0x00000010,0x53786666, + 0x72757461,0x28657461,0x003b3166,0x00030005,0x0000000f,0x00000078,0x00060005,0x00000016, + 0x46786666,0x74636172,0x32667628,0x0000003b,0x00030005,0x00000015,0x00000078,0x00060005, + 0x0000001b,0x4d786666,0x66286e69,0x31663b31,0x0000003b,0x00030005,0x00000019,0x00000078, + 0x00030005,0x0000001a,0x00000079,0x00060005,0x00000022,0x4d786666,0x76287861,0x763b3366, + 0x003b3366,0x00030005,0x00000020,0x00000078,0x00030005,0x00000021,0x00000079,0x00050005, + 0x00000027,0x646e6552,0x69537265,0x0028657a,0x000b0005,0x0000002b,0x69766544,0x6f546563, + 0x77656956,0x63617053,0x61725465,0x6f66736e,0x61466d72,0x726f7463,0x00002873,0x00070005, + 0x0000002e,0x69746f4d,0x65566e6f,0x726f7463,0x6c616353,0x00002865,0x00090005,0x00000031, + 0x77656956,0x63617053,0x4d6f5465,0x72657465,0x63614673,0x28726f74,0x00000000,0x00070005, + 0x00000036,0x64616f4c,0x75706e49,0x70654474,0x76286874,0x003b3269,0x00040005,0x00000035, + 0x50785069,0x0000736f,0x00070005,0x0000003a,0x64616f4c,0x75706e49,0x6c6f4374,0x7628726f, + 0x003b3269,0x00040005,0x00000039,0x50785069,0x0000736f,0x00090005,0x0000003e,0x64616f4c, + 0x75706e49,0x746f4d74,0x566e6f69,0x6f746365,0x69762872,0x00003b32,0x00090005,0x0000003d, + 0x44785069,0x74616c69,0x6f4d6465,0x6e6f6974,0x74636556,0x6f50726f,0x00000073,0x00090005, + 0x00000043,0x726f7453,0x72614665,0x73656874,0x70654474,0x76286874,0x663b3269,0x00003b31, + 0x00040005,0x00000041,0x50785069,0x0000736f,0x00040005,0x00000042,0x70654466,0x00006874, + 0x00090005,0x00000047,0x726f7453,0x72754365,0x746e6572,0x616d754c,0x32697628,0x3b31663b, + 0x00000000,0x00040005,0x00000045,0x50785069,0x0000736f,0x00040005,0x00000046,0x6d754c66, + 0x00000061,0x000a0005,0x0000004b,0x726f7453,0x63655265,0x74736e6f,0x74637572,0x65446465, + 0x28687470,0x3b326976,0x003b3166,0x00050005,0x00000049,0x53785069,0x6c706d61,0x00000065, + 0x00040005,0x0000004a,0x70654466,0x00006874,0x00090005,0x0000004f,0x726f7453,0x6c694465, + 0x64657461,0x74706544,0x69762868,0x31663b32,0x0000003b,0x00040005,0x0000004d,0x50785069, + 0x0000736f,0x00040005,0x0000004e,0x70654466,0x00006874,0x000b0005,0x00000054,0x726f7453, + 0x6c694465,0x64657461,0x69746f4d,0x65566e6f,0x726f7463,0x32697628,0x3266763b,0x0000003b, + 0x00040005,0x00000052,0x50785069,0x0000736f,0x00060005,0x00000053,0x746f4d66,0x566e6f69, + 0x6f746365,0x00000072,0x000b0005,0x00000057,0x6f636552,0x7274736e,0x65746375,0x70654464, + 0x764d6874,0x68547850,0x68736572,0x28646c6f,0x003b3166,0x00080005,0x00000056,0x61654e66, + 0x74736572,0x74706544,0x4d6e4968,0x72657465,0x00000073,0x00070005,0x0000005b,0x34746547, + 0x6c65564b,0x7469636f,0x66762879,0x00003b32,0x00060005,0x0000005a,0x746f4d66,0x566e6f69, + 0x6f746365,0x00000072,0x00060005,0x0000005f,0x54424752,0x6d754c6f,0x66762861,0x00003b33, + 0x00050005,0x0000005e,0x6e694c66,0x52726165,0x00006267,0x00070005,0x00000065,0x6e4f7349, + 0x65726353,0x76286e65,0x763b3269,0x003b3269,0x00030005,0x00000063,0x00736f70,0x00040005, + 0x00000064,0x657a6973,0x00000000,0x00080005,0x00000068,0x56746547,0x53776569,0x65636170, + 0x74706544,0x31662868,0x0000003b,0x00060005,0x00000067,0x76654466,0x44656369,0x68747065, + 0x00000000,0x000a0005,0x0000006b,0x56746547,0x53776569,0x65636170,0x74706544,0x4d6e4968, + 0x72657465,0x31662873,0x0000003b,0x00060005,0x0000006a,0x76654466,0x44656369,0x68747065, + 0x00000000,0x00080005,0x00000071,0x696c6942,0x7261656e,0x706d6153,0x676e696c,0x61746144, + 0x00000000,0x00060006,0x00000071,0x00000000,0x66664f69,0x73746573,0x00000000,0x00060006, + 0x00000071,0x00000001,0x69655766,0x73746867,0x00000000,0x00060006,0x00000071,0x00000002, + 0x73614269,0x736f5065,0x00000000,0x000b0005,0x00000075,0x42746547,0x6e696c69,0x53726165, + 0x6c706d61,0x44676e69,0x28617461,0x3b326676,0x3b326976,0x00000000,0x00030005,0x00000073, + 0x00765566,0x00040005,0x00000074,0x7a695369,0x00000065,0x000b0005,0x0000007b,0x6f636552, + 0x7274736e,0x50746375,0x44766572,0x68747065,0x32697628,0x3b31663b,0x3b326676,0x00000000, + 0x00040005,0x00000078,0x50785069,0x0000736f,0x00040005,0x00000079,0x70654466,0x00006874, + 0x00060005,0x0000007a,0x746f4d66,0x566e6f69,0x6f746365,0x00000072,0x00060005,0x0000007d, + 0x74706544,0x74784568,0x73746e65,0x00000000,0x00060006,0x0000007d,0x00000000,0x61654e66, + 0x74736572,0x00000000,0x00070006,0x0000007d,0x00000001,0x61654e66,0x74736572,0x726f6f43, + 0x00000064,0x00060006,0x0000007d,0x00000002,0x72614666,0x73656874,0x00000074,0x00080005, + 0x00000080,0x646e6946,0x74706544,0x74784568,0x73746e65,0x32697628,0x0000003b,0x00040005, + 0x0000007f,0x50785069,0x0000736f,0x00100005,0x00000085,0x616c6944,0x6f4d6574,0x6e6f6974, + 0x74636556,0x7628726f,0x733b3269,0x63757274,0x65442d74,0x45687470,0x6e657478,0x662d7374, + 0x69762d31,0x31662d32,0x00003b31,0x00040005,0x00000083,0x50785069,0x0000736f,0x00060005, + 0x00000084,0x74706564,0x74784568,0x73746e65,0x00000000,0x00090005,0x00000088,0x43746547, + 0x65727275,0x7246746e,0x4c656d61,0x28616d75,0x3b326976,0x00000000,0x00040005,0x00000087, + 0x50785069,0x0000736f,0x00070005,0x0000008c,0x70657250,0x49657261,0x7475706e,0x69762873, + 0x00003b32,0x00040005,0x0000008b,0x50785069,0x0000736f,0x00070005,0x000000a8,0x53466263, + 0x50553352,0x4c414353,0x745f5245,0x00000000,0x00060006,0x000000a8,0x00000000,0x6e655269, + 0x53726564,0x00657a69,0x000a0006,0x000000a8,0x00000001,0x65725069,0x756f6976,0x61724673, + 0x6552656d,0x7265646e,0x657a6953,0x00000000,0x00070006,0x000000a8,0x00000002,0x73705569, + 0x656c6163,0x657a6953,0x00000000,0x000a0006,0x000000a8,0x00000003,0x65725069,0x756f6976, + 0x61724673,0x7055656d,0x6c616373,0x7a695365,0x00000065,0x00070006,0x000000a8,0x00000004, + 0x78614d69,0x646e6552,0x69537265,0x0000657a,0x00070006,0x000000a8,0x00000005,0x78614d69, + 0x63737055,0x53656c61,0x00657a69,0x00080006,0x000000a8,0x00000006,0x76654466,0x54656369, + 0x6569566f,0x70654477,0x00006874,0x00050006,0x000000a8,0x00000007,0x74694a66,0x00726574, + 0x00090006,0x000000a8,0x00000008,0x65725066,0x756f6976,0x61724673,0x694a656d,0x72657474, + 0x00000000,0x00080006,0x000000a8,0x00000009,0x746f4d66,0x566e6f69,0x6f746365,0x61635372, + 0x0000656c,0x00080006,0x000000a8,0x0000000a,0x776f4466,0x6163736e,0x6146656c,0x726f7463, + 0x00000000,0x000b0006,0x000000a8,0x0000000b,0x746f4d66,0x566e6f69,0x6f746365,0x74694a72, + 0x43726574,0x65636e61,0x74616c6c,0x006e6f69,0x00060006,0x000000a8,0x0000000c,0x6e615466, + 0x666c6148,0x00564f46,0x00090006,0x000000a8,0x0000000d,0x74694a66,0x53726574,0x65757165, + 0x4c65636e,0x74676e65,0x00000068,0x00060006,0x000000a8,0x0000000e,0x6c654466,0x69546174, + 0x0000656d,0x00080006,0x000000a8,0x0000000f,0x6c654466,0x72506174,0x70784565,0x7275736f, + 0x00000065,0x000a0006,0x000000a8,0x00000010,0x65695666,0x61705377,0x6f546563,0x6574654d, + 0x61467372,0x726f7463,0x00000000,0x00060006,0x000000a8,0x00000011,0x61724666,0x6e49656d, + 0x00786564,0x00070006,0x000000a8,0x00000012,0x6c655666,0x7469636f,0x63614679,0x00726f74, + 0x00080006,0x000000a8,0x00000013,0x61655266,0x76697463,0x73656e65,0x61635373,0x0000656c, + 0x00080006,0x000000a8,0x00000014,0x61685366,0x676e6964,0x6e616843,0x63536567,0x00656c61, + 0x000a0006,0x000000a8,0x00000015,0x63634166,0x6c756d75,0x6f697461,0x6464416e,0x65506465, + 0x61724672,0x0000656d,0x000b0006,0x000000a8,0x00000016,0x6e694d66,0x6f736944,0x756c6363, + 0x6e6f6973,0x75636341,0x616c756d,0x6e6f6974,0x00000000,0x00060005,0x000000aa,0x53466263, + 0x70553352,0x6c616373,0x00007265,0x00060005,0x000000c5,0x6e695f72,0x5f747570,0x74706564, + 0x00000068,0x00080005,0x000000cd,0x6e695f72,0x5f747570,0x6f6c6f63,0x696a5f72,0x72657474, + 0x00006465,0x00070005,0x000000d4,0x63725366,0x69746f4d,0x65566e6f,0x726f7463,0x00000000, + 0x00080005,0x000000d5,0x6e695f72,0x5f747570,0x69746f6d,0x765f6e6f,0x6f746365,0x00007372, + 0x00060005,0x000000da,0x4d765566,0x6f69746f,0x6365566e,0x00726f74,0x00070005,0x000000e3, + 0x665f7772,0x68747261,0x5f747365,0x74706564,0x00000068,0x00060005,0x000000e8,0x635f7772, + 0x65727275,0x6c5f746e,0x00616d75,0x00040005,0x000000ee,0x70654475,0x00006874,0x000c0005, + 0x000000f3,0x725f7772,0x6e6f6365,0x75727473,0x64657463,0x6572705f,0x756f6976,0x656e5f73, + 0x73657261,0x65645f74,0x00687470,0x00070005,0x000000fc,0x645f7772,0x74616c69,0x645f6465, + 0x68747065,0x00000000,0x00090005,0x00000103,0x645f7772,0x74616c69,0x6d5f6465,0x6f69746f, + 0x65765f6e,0x726f7463,0x00000073,0x00040005,0x0000010f,0x61726170,0x0000006d,0x00040005, + 0x00000111,0x61726170,0x0000006d,0x00040005,0x00000112,0x61726170,0x0000006d,0x00040005, + 0x00000113,0x61726170,0x0000006d,0x00070005,0x00000132,0x76654466,0x54656369,0x6569566f, + 0x70654477,0x00006874,0x00040005,0x0000013d,0x61726170,0x0000006d,0x00050005,0x00000144, + 0x53785066,0x6c706d61,0x00000065,0x00040005,0x0000014d,0x61746164,0x00000000,0x00040005, + 0x00000153,0x46785066,0x00636172,0x00040005,0x00000154,0x61726170,0x0000006d,0x00080005, + 0x00000180,0x61654e66,0x74736572,0x74706544,0x4d6e4968,0x72657465,0x00000073,0x00040005, + 0x00000181,0x61726170,0x0000006d,0x00040005,0x00000185,0x61726170,0x0000006d,0x00040005, + 0x00000186,0x61726170,0x0000006d,0x000a0005,0x00000188,0x63655266,0x74736e6f,0x74637572, + 0x65446465,0x764d7470,0x65726854,0x6c6f6873,0x00000064,0x00040005,0x00000189,0x61726170, + 0x0000006d,0x00040005,0x0000018c,0x61726170,0x0000006d,0x00030005,0x00000194,0x00765566, + 0x00060005,0x0000019c,0x70655266,0x656a6f72,0x64657463,0x00007655,0x00060005,0x000001a0, + 0x696c6962,0x7261656e,0x6f666e49,0x00000000,0x00040005,0x000001a2,0x61726170,0x0000006d, + 0x00040005,0x000001a4,0x61726170,0x0000006d,0x00060005,0x000001a7,0x6d615369,0x49656c70, + 0x7865646e,0x00000000,0x00040005,0x000001b0,0x66664f69,0x00746573,0x00040005,0x000001b4, + 0x69655766,0x00746867,0x00050005,0x000001bd,0x6f745369,0x6f506572,0x00000073,0x00040005, + 0x000001c3,0x61726170,0x0000006d,0x00040005,0x000001c5,0x61726170,0x0000006d,0x00040005, + 0x000001c9,0x61726170,0x0000006d,0x00040005,0x000001cb,0x61726170,0x0000006d,0x00060005, + 0x000001d0,0x6d615369,0x49656c70,0x7865646e,0x00000000,0x00040005,0x000001d8,0x736f5069, + 0x00000000,0x00050005,0x000001e5,0x65646e69,0x6c626178,0x00000065,0x00040005,0x000001eb, + 0x74706564,0x00000068,0x00040005,0x000001ed,0x61726170,0x0000006d,0x00040005,0x000001f4, + 0x65747865,0x0073746e,0x00040005,0x00000204,0x736f5069,0x00000000,0x00050005,0x00000207, + 0x65646e69,0x6c626178,0x00000065,0x00040005,0x0000020c,0x61726170,0x0000006d,0x00040005, + 0x0000020e,0x61726170,0x0000006d,0x00050005,0x00000212,0x44644e66,0x68747065,0x00000000, + 0x00040005,0x0000021c,0x61726170,0x0000006d,0x00040005,0x0000021f,0x61726170,0x0000006d, + 0x00050005,0x0000022c,0x6d615369,0x50656c70,0x0000736f,0x00070005,0x0000022e,0x746f4d69, + 0x566e6f69,0x6f746365,0x736f5072,0x00000000,0x00080005,0x00000230,0x6c694466,0x64657461, + 0x69746f4d,0x65566e6f,0x726f7463,0x00000000,0x00040005,0x00000231,0x61726170,0x0000006d, + 0x00040005,0x00000237,0x62675266,0x00000000,0x00040005,0x00000239,0x61726170,0x0000006d, + 0x00040005,0x0000023c,0x61726170,0x0000006d,0x00040005,0x0000023d,0x61726170,0x0000006d, + 0x00040005,0x0000023f,0x6d754c66,0x00000061,0x00040005,0x00000240,0x61726170,0x0000006d, + 0x00060005,0x00000246,0x74706564,0x74784568,0x73746e65,0x00000000,0x00040005,0x00000247, + 0x61726170,0x0000006d,0x00080005,0x0000024a,0x6c694466,0x64657461,0x69746f4d,0x65566e6f, + 0x726f7463,0x00000000,0x00040005,0x0000024c,0x61726170,0x0000006d,0x00040005,0x0000024f, + 0x61726170,0x0000006d,0x00040005,0x00000251,0x61726170,0x0000006d,0x00040005,0x00000254, + 0x61726170,0x0000006d,0x00040005,0x00000257,0x61726170,0x0000006d,0x00040005,0x00000259, + 0x61726170,0x0000006d,0x00040005,0x0000025c,0x61726170,0x0000006d,0x00040005,0x0000025e, + 0x61726170,0x0000006d,0x00080005,0x00000262,0x72614666,0x73656874,0x70654474,0x6e496874, + 0x6574654d,0x00007372,0x00040005,0x00000263,0x61726170,0x0000006d,0x00040005,0x00000267, + 0x61726170,0x0000006d,0x00040005,0x00000268,0x61726170,0x0000006d,0x00040005,0x0000026a, + 0x61726170,0x0000006d,0x00040005,0x0000026c,0x61726170,0x0000006d,0x00040005,0x0000026f, + 0x6d754c66,0x00000061,0x00040005,0x00000270,0x61726170,0x0000006d,0x00040005,0x00000273, + 0x61726170,0x0000006d,0x00040005,0x00000275,0x61726170,0x0000006d,0x00080005,0x0000027a, + 0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00040005,0x0000027e, + 0x61726170,0x0000006d,0x00060005,0x00000284,0x6f505f73,0x43746e69,0x706d616c,0x00000000, + 0x00060005,0x00000285,0x694c5f73,0x7261656e,0x6d616c43,0x00000070,0x00030047,0x000000a8, + 0x00000002,0x00050048,0x000000a8,0x00000000,0x00000023,0x00000000,0x00050048,0x000000a8, + 0x00000001,0x00000023,0x00000008,0x00050048,0x000000a8,0x00000002,0x00000023,0x00000010, + 0x00050048,0x000000a8,0x00000003,0x00000023,0x00000018,0x00050048,0x000000a8,0x00000004, + 0x00000023,0x00000020,0x00050048,0x000000a8,0x00000005,0x00000023,0x00000028,0x00050048, + 0x000000a8,0x00000006,0x00000023,0x00000030,0x00050048,0x000000a8,0x00000007,0x00000023, + 0x00000040,0x00050048,0x000000a8,0x00000008,0x00000023,0x00000048,0x00050048,0x000000a8, + 0x00000009,0x00000023,0x00000050,0x00050048,0x000000a8,0x0000000a,0x00000023,0x00000058, + 0x00050048,0x000000a8,0x0000000b,0x00000023,0x00000060,0x00050048,0x000000a8,0x0000000c, + 0x00000023,0x00000068,0x00050048,0x000000a8,0x0000000d,0x00000023,0x0000006c,0x00050048, + 0x000000a8,0x0000000e,0x00000023,0x00000070,0x00050048,0x000000a8,0x0000000f,0x00000023, + 0x00000074,0x00050048,0x000000a8,0x00000010,0x00000023,0x00000078,0x00050048,0x000000a8, + 0x00000011,0x00000023,0x0000007c,0x00050048,0x000000a8,0x00000012,0x00000023,0x00000080, + 0x00050048,0x000000a8,0x00000013,0x00000023,0x00000084,0x00050048,0x000000a8,0x00000014, + 0x00000023,0x00000088,0x00050048,0x000000a8,0x00000015,0x00000023,0x0000008c,0x00050048, + 0x000000a8,0x00000016,0x00000023,0x00000090,0x00040047,0x000000aa,0x00000021,0x00000008, + 0x00040047,0x000000aa,0x00000022,0x00000000,0x00040047,0x000000c5,0x00000021,0x00000001, + 0x00040047,0x000000c5,0x00000022,0x00000000,0x00040047,0x000000cd,0x00000021,0x00000002, + 0x00040047,0x000000cd,0x00000022,0x00000000,0x00040047,0x000000d5,0x00000021,0x00000000, + 0x00040047,0x000000d5,0x00000022,0x00000000,0x00040047,0x000000e3,0x00000021,0x00000006, + 0x00040047,0x000000e3,0x00000022,0x00000000,0x00040047,0x000000e8,0x00000021,0x00000007, + 0x00040047,0x000000e8,0x00000022,0x00000000,0x00040047,0x000000f3,0x00000021,0x00000005, + 0x00040047,0x000000f3,0x00000022,0x00000000,0x00030047,0x000000fc,0x00000019,0x00040047, + 0x000000fc,0x00000021,0x00000004,0x00040047,0x000000fc,0x00000022,0x00000000,0x00030047, + 0x00000103,0x00000019,0x00040047,0x00000103,0x00000021,0x00000003,0x00040047,0x00000103, + 0x00000022,0x00000000,0x00040047,0x0000027a,0x0000000b,0x0000001c,0x00040047,0x00000284, + 0x00000021,0x000003e8,0x00040047,0x00000284,0x00000022,0x00000000,0x00040047,0x00000285, + 0x00000021,0x000003e9,0x00040047,0x00000285,0x00000022,0x00000000,0x00040047,0x0000028e, + 0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016, + 0x00000006,0x00000020,0x00040020,0x00000007,0x00000007,0x00000006,0x00060021,0x00000008, + 0x00000006,0x00000007,0x00000007,0x00000007,0x00040021,0x0000000e,0x00000006,0x00000007, + 0x00040017,0x00000012,0x00000006,0x00000002,0x00040020,0x00000013,0x00000007,0x00000012, + 0x00040021,0x00000014,0x00000012,0x00000013,0x00050021,0x00000018,0x00000006,0x00000007, + 0x00000007,0x00040017,0x0000001d,0x00000006,0x00000003,0x00040020,0x0000001e,0x00000007, + 0x0000001d,0x00050021,0x0000001f,0x0000001d,0x0000001e,0x0000001e,0x00040015,0x00000024, + 0x00000020,0x00000001,0x00040017,0x00000025,0x00000024,0x00000002,0x00030021,0x00000026, + 0x00000025,0x00040017,0x00000029,0x00000006,0x00000004,0x00030021,0x0000002a,0x00000029, + 0x00030021,0x0000002d,0x00000012,0x00030021,0x00000030,0x00000006,0x00040020,0x00000033, + 0x00000007,0x00000025,0x00040021,0x00000034,0x00000006,0x00000033,0x00040021,0x00000038, + 0x0000001d,0x00000033,0x00040021,0x0000003c,0x00000012,0x00000033,0x00050021,0x00000040, + 0x00000002,0x00000033,0x00000007,0x00050021,0x00000051,0x00000002,0x00000033,0x00000013, + 0x00040021,0x00000059,0x00000006,0x00000013,0x00040021,0x0000005d,0x00000006,0x0000001e, + 0x00020014,0x00000061,0x00050021,0x00000062,0x00000061,0x00000033,0x00000033,0x00040015, + 0x0000006d,0x00000020,0x00000000,0x0004002b,0x0000006d,0x0000006e,0x00000004,0x0004001c, + 0x0000006f,0x00000025,0x0000006e,0x0004001c,0x00000070,0x00000006,0x0000006e,0x0005001e, + 0x00000071,0x0000006f,0x00000070,0x00000025,0x00050021,0x00000072,0x00000071,0x00000013, + 0x00000033,0x00060021,0x00000077,0x00000002,0x00000033,0x00000007,0x00000013,0x0005001e, + 0x0000007d,0x00000006,0x00000025,0x00000006,0x00040021,0x0000007e,0x0000007d,0x00000033, + 0x00050021,0x00000082,0x00000012,0x00000033,0x0000007d,0x00040021,0x0000008a,0x00000002, + 0x00000033,0x0004002b,0x00000006,0x00000095,0x00000000,0x0004002b,0x00000006,0x00000096, + 0x3f800000,0x0019001e,0x000000a8,0x00000025,0x00000025,0x00000025,0x00000025,0x00000025, + 0x00000025,0x00000029,0x00000012,0x00000012,0x00000012,0x00000012,0x00000012,0x00000006, + 0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006, + 0x00000006,0x00000006,0x00040020,0x000000a9,0x00000002,0x000000a8,0x0004003b,0x000000a9, + 0x000000aa,0x00000002,0x0004002b,0x00000024,0x000000ab,0x00000000,0x00040020,0x000000ac, + 0x00000002,0x00000025,0x0004002b,0x00000024,0x000000b1,0x00000006,0x00040020,0x000000b2, + 0x00000002,0x00000029,0x0004002b,0x00000024,0x000000b7,0x00000009,0x00040020,0x000000b8, + 0x00000002,0x00000012,0x0004002b,0x00000024,0x000000bd,0x00000010,0x00040020,0x000000be, + 0x00000002,0x00000006,0x00090019,0x000000c3,0x00000006,0x00000001,0x00000000,0x00000000, + 0x00000000,0x00000001,0x00000000,0x00040020,0x000000c4,0x00000000,0x000000c3,0x0004003b, + 0x000000c4,0x000000c5,0x00000000,0x0004002b,0x0000006d,0x000000c9,0x00000000,0x0004003b, + 0x000000c4,0x000000cd,0x00000000,0x0004003b,0x000000c4,0x000000d5,0x00000000,0x00090019, + 0x000000e1,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000,0x00000002,0x00000009, + 0x00040020,0x000000e2,0x00000000,0x000000e1,0x0004003b,0x000000e2,0x000000e3,0x00000000, + 0x0004003b,0x000000e2,0x000000e8,0x00000000,0x00040020,0x000000ed,0x00000007,0x0000006d, + 0x00090019,0x000000f1,0x0000006d,0x00000001,0x00000000,0x00000000,0x00000000,0x00000002, + 0x00000021,0x00040020,0x000000f2,0x00000000,0x000000f1,0x0004003b,0x000000f2,0x000000f3, + 0x00000000,0x00040020,0x000000f6,0x0000000b,0x0000006d,0x0004002b,0x0000006d,0x000000f8, + 0x00000001,0x00090019,0x000000fa,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000, + 0x00000002,0x00000003,0x00040020,0x000000fb,0x00000000,0x000000fa,0x0004003b,0x000000fb, + 0x000000fc,0x00000000,0x00090019,0x00000101,0x00000006,0x00000001,0x00000000,0x00000000, + 0x00000000,0x00000002,0x00000007,0x00040020,0x00000102,0x00000000,0x00000101,0x0004003b, + 0x00000102,0x00000103,0x00000000,0x0004002b,0x00000006,0x0000010a,0x3e800000,0x0004002b, + 0x00000006,0x0000010b,0x3f400000,0x0004002b,0x00000006,0x0000010d,0x42c80000,0x0004002b, + 0x00000006,0x00000118,0x45700000,0x0004002b,0x00000006,0x00000119,0x45070000,0x0005002c, + 0x00000012,0x0000011a,0x00000118,0x00000119,0x0004002b,0x00000006,0x00000120,0x3e59b3d0, + 0x0004002b,0x00000006,0x00000121,0x3f371759,0x0004002b,0x00000006,0x00000122,0x3d93dd98, + 0x0006002c,0x0000001d,0x00000123,0x00000120,0x00000121,0x00000122,0x00040017,0x00000128, + 0x0000006d,0x00000002,0x00040017,0x0000012c,0x00000061,0x00000002,0x00040020,0x00000131, + 0x00000007,0x00000029,0x0004002b,0x00000006,0x00000149,0x3f000000,0x0005002c,0x00000012, + 0x0000014a,0x00000149,0x00000149,0x00040020,0x0000014c,0x00000007,0x00000071,0x0004002b, + 0x00000024,0x0000014e,0x00000002,0x0005002c,0x00000025,0x00000157,0x000000ab,0x000000ab, + 0x0004002b,0x00000024,0x00000159,0x00000001,0x0005002c,0x00000025,0x0000015a,0x00000159, + 0x000000ab,0x0005002c,0x00000025,0x0000015c,0x000000ab,0x00000159,0x0004002b,0x00000024, + 0x0000015e,0x00000003,0x0005002c,0x00000025,0x0000015f,0x00000159,0x00000159,0x0004002b, + 0x00000006,0x00000184,0x477fe000,0x00040020,0x000001a6,0x00000007,0x00000024,0x0004002b, + 0x00000024,0x000001ae,0x00000004,0x0004002b,0x00000006,0x000001b9,0x3a1fe868,0x0004002b, + 0x0000006d,0x000001da,0x00000009,0x0004001c,0x000001db,0x00000025,0x000001da,0x0004002b, + 0x00000024,0x000001dc,0xffffffff,0x0005002c,0x00000025,0x000001dd,0x000000ab,0x000001dc, + 0x0005002c,0x00000025,0x000001de,0x000001dc,0x000000ab,0x0005002c,0x00000025,0x000001df, + 0x000001dc,0x00000159,0x0005002c,0x00000025,0x000001e0,0x000001dc,0x000001dc,0x0005002c, + 0x00000025,0x000001e1,0x00000159,0x000001dc,0x000c002c,0x000001db,0x000001e2,0x00000157, + 0x0000015a,0x0000015c,0x000001dd,0x000001de,0x000001df,0x0000015f,0x000001e0,0x000001e1, + 0x00040020,0x000001e4,0x00000007,0x000001db,0x0004001c,0x000001e9,0x00000006,0x000001da, + 0x00040020,0x000001ea,0x00000007,0x000001e9,0x00040020,0x000001f3,0x00000007,0x0000007d, + 0x0006002c,0x0000001d,0x00000238,0x00000095,0x00000095,0x00000095,0x00040017,0x00000278, + 0x0000006d,0x00000003,0x00040020,0x00000279,0x00000001,0x00000278,0x0004003b,0x00000279, + 0x0000027a,0x00000001,0x0004002b,0x00000006,0x00000280,0x387fda40,0x0004002b,0x00000006, + 0x00000281,0x37801002,0x0002001a,0x00000282,0x00040020,0x00000283,0x00000000,0x00000282, + 0x0004003b,0x00000283,0x00000284,0x00000000,0x0004003b,0x00000283,0x00000285,0x00000000, + 0x0004002b,0x00000006,0x00000286,0x7f7fffff,0x0004002b,0x00000006,0x00000287,0x00800000, + 0x0004002b,0x00000006,0x00000288,0x3d800000,0x0004002b,0x00000006,0x00000289,0x3d3d70a4, + 0x0004002b,0x00000006,0x0000028a,0x3e400000,0x0004002b,0x00000006,0x0000028b,0x40000000, + 0x0004002b,0x00000006,0x0000028c,0x461c4000,0x0004002b,0x0000006d,0x0000028d,0x00000008, + 0x0006002c,0x00000278,0x0000028e,0x0000028d,0x0000028d,0x000000f8,0x00050036,0x00000002, + 0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000033,0x0000027e, + 0x00000007,0x0004003d,0x00000278,0x0000027b,0x0000027a,0x0007004f,0x00000128,0x0000027c, + 0x0000027b,0x0000027b,0x00000000,0x00000001,0x0004007c,0x00000025,0x0000027d,0x0000027c, + 0x0003003e,0x0000027e,0x0000027d,0x00050039,0x00000002,0x0000027f,0x0000008c,0x0000027e, + 0x000100fd,0x00010038,0x00050036,0x00000006,0x0000000c,0x00000000,0x00000008,0x00030037, + 0x00000007,0x00000009,0x00030037,0x00000007,0x0000000a,0x00030037,0x00000007,0x0000000b, + 0x000200f8,0x0000000d,0x0004003d,0x00000006,0x0000008e,0x00000009,0x0004003d,0x00000006, + 0x0000008f,0x0000000a,0x0004003d,0x00000006,0x00000090,0x0000000b,0x0008000c,0x00000006, + 0x00000091,0x00000001,0x0000002e,0x0000008e,0x0000008f,0x00000090,0x000200fe,0x00000091, + 0x00010038,0x00050036,0x00000006,0x00000010,0x00000000,0x0000000e,0x00030037,0x00000007, + 0x0000000f,0x000200f8,0x00000011,0x0004003d,0x00000006,0x00000094,0x0000000f,0x0008000c, + 0x00000006,0x00000097,0x00000001,0x0000002b,0x00000094,0x00000095,0x00000096,0x000200fe, + 0x00000097,0x00010038,0x00050036,0x00000012,0x00000016,0x00000000,0x00000014,0x00030037, + 0x00000013,0x00000015,0x000200f8,0x00000017,0x0004003d,0x00000012,0x0000009a,0x00000015, + 0x0006000c,0x00000012,0x0000009b,0x00000001,0x0000000a,0x0000009a,0x000200fe,0x0000009b, + 0x00010038,0x00050036,0x00000006,0x0000001b,0x00000000,0x00000018,0x00030037,0x00000007, + 0x00000019,0x00030037,0x00000007,0x0000001a,0x000200f8,0x0000001c,0x0004003d,0x00000006, + 0x0000009e,0x00000019,0x0004003d,0x00000006,0x0000009f,0x0000001a,0x0007000c,0x00000006, + 0x000000a0,0x00000001,0x00000025,0x0000009e,0x0000009f,0x000200fe,0x000000a0,0x00010038, + 0x00050036,0x0000001d,0x00000022,0x00000000,0x0000001f,0x00030037,0x0000001e,0x00000020, + 0x00030037,0x0000001e,0x00000021,0x000200f8,0x00000023,0x0004003d,0x0000001d,0x000000a3, + 0x00000020,0x0004003d,0x0000001d,0x000000a4,0x00000021,0x0007000c,0x0000001d,0x000000a5, + 0x00000001,0x00000028,0x000000a3,0x000000a4,0x000200fe,0x000000a5,0x00010038,0x00050036, + 0x00000025,0x00000027,0x00000000,0x00000026,0x000200f8,0x00000028,0x00050041,0x000000ac, + 0x000000ad,0x000000aa,0x000000ab,0x0004003d,0x00000025,0x000000ae,0x000000ad,0x000200fe, + 0x000000ae,0x00010038,0x00050036,0x00000029,0x0000002b,0x00000000,0x0000002a,0x000200f8, + 0x0000002c,0x00050041,0x000000b2,0x000000b3,0x000000aa,0x000000b1,0x0004003d,0x00000029, + 0x000000b4,0x000000b3,0x000200fe,0x000000b4,0x00010038,0x00050036,0x00000012,0x0000002e, + 0x00000000,0x0000002d,0x000200f8,0x0000002f,0x00050041,0x000000b8,0x000000b9,0x000000aa, + 0x000000b7,0x0004003d,0x00000012,0x000000ba,0x000000b9,0x000200fe,0x000000ba,0x00010038, + 0x00050036,0x00000006,0x00000031,0x00000000,0x00000030,0x000200f8,0x00000032,0x00050041, + 0x000000be,0x000000bf,0x000000aa,0x000000bd,0x0004003d,0x00000006,0x000000c0,0x000000bf, + 0x000200fe,0x000000c0,0x00010038,0x00050036,0x00000006,0x00000036,0x00000000,0x00000034, + 0x00030037,0x00000033,0x00000035,0x000200f8,0x00000037,0x0004003d,0x000000c3,0x000000c6, + 0x000000c5,0x0004003d,0x00000025,0x000000c7,0x00000035,0x0007005f,0x00000029,0x000000c8, + 0x000000c6,0x000000c7,0x00000002,0x000000ab,0x00050051,0x00000006,0x000000ca,0x000000c8, + 0x00000000,0x000200fe,0x000000ca,0x00010038,0x00050036,0x0000001d,0x0000003a,0x00000000, + 0x00000038,0x00030037,0x00000033,0x00000039,0x000200f8,0x0000003b,0x0004003d,0x000000c3, + 0x000000ce,0x000000cd,0x0004003d,0x00000025,0x000000cf,0x00000039,0x0007005f,0x00000029, + 0x000000d0,0x000000ce,0x000000cf,0x00000002,0x000000ab,0x0008004f,0x0000001d,0x000000d1, + 0x000000d0,0x000000d0,0x00000000,0x00000001,0x00000002,0x000200fe,0x000000d1,0x00010038, + 0x00050036,0x00000012,0x0000003e,0x00000000,0x0000003c,0x00030037,0x00000033,0x0000003d, + 0x000200f8,0x0000003f,0x0004003b,0x00000013,0x000000d4,0x00000007,0x0004003b,0x00000013, + 0x000000da,0x00000007,0x0004003d,0x000000c3,0x000000d6,0x000000d5,0x0004003d,0x00000025, + 0x000000d7,0x0000003d,0x0007005f,0x00000029,0x000000d8,0x000000d6,0x000000d7,0x00000002, + 0x000000ab,0x0007004f,0x00000012,0x000000d9,0x000000d8,0x000000d8,0x00000000,0x00000001, + 0x0003003e,0x000000d4,0x000000d9,0x0004003d,0x00000012,0x000000db,0x000000d4,0x00040039, + 0x00000012,0x000000dc,0x0000002e,0x00050085,0x00000012,0x000000dd,0x000000db,0x000000dc, + 0x0003003e,0x000000da,0x000000dd,0x0004003d,0x00000012,0x000000de,0x000000da,0x000200fe, + 0x000000de,0x00010038,0x00050036,0x00000002,0x00000043,0x00000000,0x00000040,0x00030037, + 0x00000033,0x00000041,0x00030037,0x00000007,0x00000042,0x000200f8,0x00000044,0x0004003d, + 0x000000e1,0x000000e4,0x000000e3,0x0004003d,0x00000025,0x000000e5,0x00000041,0x0004003d, + 0x00000006,0x000000e6,0x00000042,0x00070050,0x00000029,0x000000e7,0x000000e6,0x00000095, + 0x00000095,0x00000095,0x00040063,0x000000e4,0x000000e5,0x000000e7,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x00000047,0x00000000,0x00000040,0x00030037,0x00000033,0x00000045, + 0x00030037,0x00000007,0x00000046,0x000200f8,0x00000048,0x0004003d,0x000000e1,0x000000e9, + 0x000000e8,0x0004003d,0x00000025,0x000000ea,0x00000045,0x0004003d,0x00000006,0x000000eb, + 0x00000046,0x00070050,0x00000029,0x000000ec,0x000000eb,0x00000095,0x00000095,0x00000095, + 0x00040063,0x000000e9,0x000000ea,0x000000ec,0x000100fd,0x00010038,0x00050036,0x00000002, + 0x0000004b,0x00000000,0x00000040,0x00030037,0x00000033,0x00000049,0x00030037,0x00000007, + 0x0000004a,0x000200f8,0x0000004c,0x0004003b,0x000000ed,0x000000ee,0x00000007,0x0004003d, + 0x00000006,0x000000ef,0x0000004a,0x0004007c,0x0000006d,0x000000f0,0x000000ef,0x0003003e, + 0x000000ee,0x000000f0,0x0004003d,0x00000025,0x000000f4,0x00000049,0x0004003d,0x0000006d, + 0x000000f5,0x000000ee,0x0006003c,0x000000f6,0x000000f7,0x000000f3,0x000000f4,0x000000c9, + 0x000700ef,0x0000006d,0x000000f9,0x000000f7,0x000000f8,0x000000c9,0x000000f5,0x000100fd, + 0x00010038,0x00050036,0x00000002,0x0000004f,0x00000000,0x00000040,0x00030037,0x00000033, + 0x0000004d,0x00030037,0x00000007,0x0000004e,0x000200f8,0x00000050,0x0004003d,0x000000fa, + 0x000000fd,0x000000fc,0x0004003d,0x00000025,0x000000fe,0x0000004d,0x0004003d,0x00000006, + 0x000000ff,0x0000004e,0x00070050,0x00000029,0x00000100,0x000000ff,0x00000095,0x00000095, + 0x00000095,0x00040063,0x000000fd,0x000000fe,0x00000100,0x000100fd,0x00010038,0x00050036, + 0x00000002,0x00000054,0x00000000,0x00000051,0x00030037,0x00000033,0x00000052,0x00030037, + 0x00000013,0x00000053,0x000200f8,0x00000055,0x0004003d,0x00000101,0x00000104,0x00000103, + 0x0004003d,0x00000025,0x00000105,0x00000052,0x0004003d,0x00000012,0x00000106,0x00000053, + 0x00050051,0x00000006,0x00000107,0x00000106,0x00000000,0x00050051,0x00000006,0x00000108, + 0x00000106,0x00000001,0x00070050,0x00000029,0x00000109,0x00000107,0x00000108,0x00000095, + 0x00000095,0x00040063,0x00000104,0x00000105,0x00000109,0x000100fd,0x00010038,0x00050036, + 0x00000006,0x00000057,0x00000000,0x0000000e,0x00030037,0x00000007,0x00000056,0x000200f8, + 0x00000058,0x0004003b,0x00000007,0x0000010f,0x00000007,0x0004003b,0x00000007,0x00000111, + 0x00000007,0x0004003b,0x00000007,0x00000112,0x00000007,0x0004003b,0x00000007,0x00000113, + 0x00000007,0x0004003d,0x00000006,0x0000010c,0x00000056,0x00050088,0x00000006,0x0000010e, + 0x0000010c,0x0000010d,0x0003003e,0x0000010f,0x0000010e,0x00050039,0x00000006,0x00000110, + 0x00000010,0x0000010f,0x0003003e,0x00000111,0x0000010a,0x0003003e,0x00000112,0x0000010b, + 0x0003003e,0x00000113,0x00000110,0x00070039,0x00000006,0x00000114,0x0000000c,0x00000111, + 0x00000112,0x00000113,0x000200fe,0x00000114,0x00010038,0x00050036,0x00000006,0x0000005b, + 0x00000000,0x00000059,0x00030037,0x00000013,0x0000005a,0x000200f8,0x0000005c,0x0004003d, + 0x00000012,0x00000117,0x0000005a,0x00050085,0x00000012,0x0000011b,0x00000117,0x0000011a, + 0x0006000c,0x00000006,0x0000011c,0x00000001,0x00000042,0x0000011b,0x000200fe,0x0000011c, + 0x00010038,0x00050036,0x00000006,0x0000005f,0x00000000,0x0000005d,0x00030037,0x0000001e, + 0x0000005e,0x000200f8,0x00000060,0x0004003d,0x0000001d,0x0000011f,0x0000005e,0x00050094, + 0x00000006,0x00000124,0x0000011f,0x00000123,0x000200fe,0x00000124,0x00010038,0x00050036, + 0x00000061,0x00000065,0x00000000,0x00000062,0x00030037,0x00000033,0x00000063,0x00030037, + 0x00000033,0x00000064,0x000200f8,0x00000066,0x0004003d,0x00000025,0x00000127,0x00000063, + 0x0004007c,0x00000128,0x00000129,0x00000127,0x0004003d,0x00000025,0x0000012a,0x00000064, + 0x0004007c,0x00000128,0x0000012b,0x0000012a,0x000500b0,0x0000012c,0x0000012d,0x00000129, + 0x0000012b,0x0004009b,0x00000061,0x0000012e,0x0000012d,0x000200fe,0x0000012e,0x00010038, + 0x00050036,0x00000006,0x00000068,0x00000000,0x0000000e,0x00030037,0x00000007,0x00000067, + 0x000200f8,0x00000069,0x0004003b,0x00000131,0x00000132,0x00000007,0x00040039,0x00000029, + 0x00000133,0x0000002b,0x0003003e,0x00000132,0x00000133,0x00050041,0x00000007,0x00000134, + 0x00000132,0x000000f8,0x0004003d,0x00000006,0x00000135,0x00000134,0x0004003d,0x00000006, + 0x00000136,0x00000067,0x00050041,0x00000007,0x00000137,0x00000132,0x000000c9,0x0004003d, + 0x00000006,0x00000138,0x00000137,0x00050083,0x00000006,0x00000139,0x00000136,0x00000138, + 0x00050088,0x00000006,0x0000013a,0x00000135,0x00000139,0x000200fe,0x0000013a,0x00010038, + 0x00050036,0x00000006,0x0000006b,0x00000000,0x0000000e,0x00030037,0x00000007,0x0000006a, + 0x000200f8,0x0000006c,0x0004003b,0x00000007,0x0000013d,0x00000007,0x0004003d,0x00000006, + 0x0000013e,0x0000006a,0x0003003e,0x0000013d,0x0000013e,0x00050039,0x00000006,0x0000013f, + 0x00000068,0x0000013d,0x00040039,0x00000006,0x00000140,0x00000031,0x00050085,0x00000006, + 0x00000141,0x0000013f,0x00000140,0x000200fe,0x00000141,0x00010038,0x00050036,0x00000071, + 0x00000075,0x00000000,0x00000072,0x00030037,0x00000013,0x00000073,0x00030037,0x00000033, + 0x00000074,0x000200f8,0x00000076,0x0004003b,0x00000013,0x00000144,0x00000007,0x0004003b, + 0x0000014c,0x0000014d,0x00000007,0x0004003b,0x00000013,0x00000153,0x00000007,0x0004003b, + 0x00000013,0x00000154,0x00000007,0x0004003d,0x00000012,0x00000145,0x00000073,0x0004003d, + 0x00000025,0x00000146,0x00000074,0x0004006f,0x00000012,0x00000147,0x00000146,0x00050085, + 0x00000012,0x00000148,0x00000145,0x00000147,0x00050083,0x00000012,0x0000014b,0x00000148, + 0x0000014a,0x0003003e,0x00000144,0x0000014b,0x0004003d,0x00000012,0x0000014f,0x00000144, + 0x0006000c,0x00000012,0x00000150,0x00000001,0x00000008,0x0000014f,0x0004006e,0x00000025, + 0x00000151,0x00000150,0x00050041,0x00000033,0x00000152,0x0000014d,0x0000014e,0x0003003e, + 0x00000152,0x00000151,0x0004003d,0x00000012,0x00000155,0x00000144,0x0003003e,0x00000154, + 0x00000155,0x00050039,0x00000012,0x00000156,0x00000016,0x00000154,0x0003003e,0x00000153, + 0x00000156,0x00060041,0x00000033,0x00000158,0x0000014d,0x000000ab,0x000000ab,0x0003003e, + 0x00000158,0x00000157,0x00060041,0x00000033,0x0000015b,0x0000014d,0x000000ab,0x00000159, + 0x0003003e,0x0000015b,0x0000015a,0x00060041,0x00000033,0x0000015d,0x0000014d,0x000000ab, + 0x0000014e,0x0003003e,0x0000015d,0x0000015c,0x00060041,0x00000033,0x00000160,0x0000014d, + 0x000000ab,0x0000015e,0x0003003e,0x00000160,0x0000015f,0x00050041,0x00000007,0x00000161, + 0x00000153,0x000000c9,0x0004003d,0x00000006,0x00000162,0x00000161,0x00050083,0x00000006, + 0x00000163,0x00000096,0x00000162,0x00050041,0x00000007,0x00000164,0x00000153,0x000000f8, + 0x0004003d,0x00000006,0x00000165,0x00000164,0x00050083,0x00000006,0x00000166,0x00000096, + 0x00000165,0x00050085,0x00000006,0x00000167,0x00000163,0x00000166,0x00060041,0x00000007, + 0x00000168,0x0000014d,0x00000159,0x000000ab,0x0003003e,0x00000168,0x00000167,0x00050041, + 0x00000007,0x00000169,0x00000153,0x000000c9,0x0004003d,0x00000006,0x0000016a,0x00000169, + 0x00050041,0x00000007,0x0000016b,0x00000153,0x000000f8,0x0004003d,0x00000006,0x0000016c, + 0x0000016b,0x00050083,0x00000006,0x0000016d,0x00000096,0x0000016c,0x00050085,0x00000006, + 0x0000016e,0x0000016a,0x0000016d,0x00060041,0x00000007,0x0000016f,0x0000014d,0x00000159, + 0x00000159,0x0003003e,0x0000016f,0x0000016e,0x00050041,0x00000007,0x00000170,0x00000153, + 0x000000c9,0x0004003d,0x00000006,0x00000171,0x00000170,0x00050083,0x00000006,0x00000172, + 0x00000096,0x00000171,0x00050041,0x00000007,0x00000173,0x00000153,0x000000f8,0x0004003d, + 0x00000006,0x00000174,0x00000173,0x00050085,0x00000006,0x00000175,0x00000172,0x00000174, + 0x00060041,0x00000007,0x00000176,0x0000014d,0x00000159,0x0000014e,0x0003003e,0x00000176, + 0x00000175,0x00050041,0x00000007,0x00000177,0x00000153,0x000000c9,0x0004003d,0x00000006, + 0x00000178,0x00000177,0x00050041,0x00000007,0x00000179,0x00000153,0x000000f8,0x0004003d, + 0x00000006,0x0000017a,0x00000179,0x00050085,0x00000006,0x0000017b,0x00000178,0x0000017a, + 0x00060041,0x00000007,0x0000017c,0x0000014d,0x00000159,0x0000015e,0x0003003e,0x0000017c, + 0x0000017b,0x0004003d,0x00000071,0x0000017d,0x0000014d,0x000200fe,0x0000017d,0x00010038, + 0x00050036,0x00000002,0x0000007b,0x00000000,0x00000077,0x00030037,0x00000033,0x00000078, + 0x00030037,0x00000007,0x00000079,0x00030037,0x00000013,0x0000007a,0x000200f8,0x0000007c, + 0x0004003b,0x00000007,0x00000180,0x00000007,0x0004003b,0x00000007,0x00000181,0x00000007, + 0x0004003b,0x00000007,0x00000185,0x00000007,0x0004003b,0x00000007,0x00000186,0x00000007, + 0x0004003b,0x00000007,0x00000188,0x00000007,0x0004003b,0x00000007,0x00000189,0x00000007, + 0x0004003b,0x00000013,0x0000018c,0x00000007,0x0004003b,0x00000013,0x00000194,0x00000007, + 0x0004003b,0x00000013,0x0000019c,0x00000007,0x0004003b,0x0000014c,0x000001a0,0x00000007, + 0x0004003b,0x00000013,0x000001a2,0x00000007,0x0004003b,0x00000033,0x000001a4,0x00000007, + 0x0004003b,0x000001a6,0x000001a7,0x00000007,0x0004003b,0x00000033,0x000001b0,0x00000007, + 0x0004003b,0x00000007,0x000001b4,0x00000007,0x0004003b,0x00000033,0x000001bd,0x00000007, + 0x0004003b,0x00000033,0x000001c3,0x00000007,0x0004003b,0x00000033,0x000001c5,0x00000007, + 0x0004003b,0x00000033,0x000001c9,0x00000007,0x0004003b,0x00000007,0x000001cb,0x00000007, + 0x0004003d,0x00000006,0x00000182,0x00000079,0x0003003e,0x00000181,0x00000182,0x00050039, + 0x00000006,0x00000183,0x0000006b,0x00000181,0x0003003e,0x00000185,0x00000183,0x0003003e, + 0x00000186,0x00000184,0x00060039,0x00000006,0x00000187,0x0000001b,0x00000185,0x00000186, + 0x0003003e,0x00000180,0x00000187,0x0004003d,0x00000006,0x0000018a,0x00000180,0x0003003e, + 0x00000189,0x0000018a,0x00050039,0x00000006,0x0000018b,0x00000057,0x00000189,0x0003003e, + 0x00000188,0x0000018b,0x0004003d,0x00000012,0x0000018d,0x0000007a,0x0003003e,0x0000018c, + 0x0000018d,0x00050039,0x00000006,0x0000018e,0x0000005b,0x0000018c,0x0004003d,0x00000006, + 0x0000018f,0x00000188,0x000500ba,0x00000061,0x00000190,0x0000018e,0x0000018f,0x000600a9, + 0x00000006,0x00000191,0x00000190,0x00000096,0x00000095,0x0004003d,0x00000012,0x00000192, + 0x0000007a,0x0005008e,0x00000012,0x00000193,0x00000192,0x00000191,0x0003003e,0x0000007a, + 0x00000193,0x0004003d,0x00000025,0x00000195,0x00000078,0x0004006f,0x00000012,0x00000196, + 0x00000195,0x00050050,0x00000012,0x00000197,0x00000149,0x00000149,0x00050081,0x00000012, + 0x00000198,0x00000196,0x00000197,0x00040039,0x00000025,0x00000199,0x00000027,0x0004006f, + 0x00000012,0x0000019a,0x00000199,0x00050088,0x00000012,0x0000019b,0x00000198,0x0000019a, + 0x0003003e,0x00000194,0x0000019b,0x0004003d,0x00000012,0x0000019d,0x00000194,0x0004003d, + 0x00000012,0x0000019e,0x0000007a,0x00050081,0x00000012,0x0000019f,0x0000019d,0x0000019e, + 0x0003003e,0x0000019c,0x0000019f,0x00040039,0x00000025,0x000001a1,0x00000027,0x0004003d, + 0x00000012,0x000001a3,0x0000019c,0x0003003e,0x000001a2,0x000001a3,0x0003003e,0x000001a4, + 0x000001a1,0x00060039,0x00000071,0x000001a5,0x00000075,0x000001a2,0x000001a4,0x0003003e, + 0x000001a0,0x000001a5,0x0003003e,0x000001a7,0x000000ab,0x000200f9,0x000001a8,0x000200f8, + 0x000001a8,0x000400f6,0x000001aa,0x000001ab,0x00000000,0x000200f9,0x000001ac,0x000200f8, + 0x000001ac,0x0004003d,0x00000024,0x000001ad,0x000001a7,0x000500b1,0x00000061,0x000001af, + 0x000001ad,0x000001ae,0x000400fa,0x000001af,0x000001a9,0x000001aa,0x000200f8,0x000001a9, + 0x0004003d,0x00000024,0x000001b1,0x000001a7,0x00060041,0x00000033,0x000001b2,0x000001a0, + 0x000000ab,0x000001b1,0x0004003d,0x00000025,0x000001b3,0x000001b2,0x0003003e,0x000001b0, + 0x000001b3,0x0004003d,0x00000024,0x000001b5,0x000001a7,0x00060041,0x00000007,0x000001b6, + 0x000001a0,0x00000159,0x000001b5,0x0004003d,0x00000006,0x000001b7,0x000001b6,0x0003003e, + 0x000001b4,0x000001b7,0x0004003d,0x00000006,0x000001b8,0x000001b4,0x000500ba,0x00000061, + 0x000001ba,0x000001b8,0x000001b9,0x000300f7,0x000001bc,0x00000000,0x000400fa,0x000001ba, + 0x000001bb,0x000001bc,0x000200f8,0x000001bb,0x00050041,0x00000033,0x000001be,0x000001a0, + 0x0000014e,0x0004003d,0x00000025,0x000001bf,0x000001be,0x0004003d,0x00000025,0x000001c0, + 0x000001b0,0x00050080,0x00000025,0x000001c1,0x000001bf,0x000001c0,0x0003003e,0x000001bd, + 0x000001c1,0x00040039,0x00000025,0x000001c2,0x00000027,0x0004003d,0x00000025,0x000001c4, + 0x000001bd,0x0003003e,0x000001c3,0x000001c4,0x0003003e,0x000001c5,0x000001c2,0x00060039, + 0x00000061,0x000001c6,0x00000065,0x000001c3,0x000001c5,0x000300f7,0x000001c8,0x00000000, + 0x000400fa,0x000001c6,0x000001c7,0x000001c8,0x000200f8,0x000001c7,0x0004003d,0x00000025, + 0x000001ca,0x000001bd,0x0003003e,0x000001c9,0x000001ca,0x0004003d,0x00000006,0x000001cc, + 0x00000079,0x0003003e,0x000001cb,0x000001cc,0x00060039,0x00000002,0x000001cd,0x0000004b, + 0x000001c9,0x000001cb,0x000200f9,0x000001c8,0x000200f8,0x000001c8,0x000200f9,0x000001bc, + 0x000200f8,0x000001bc,0x000200f9,0x000001ab,0x000200f8,0x000001ab,0x0004003d,0x00000024, + 0x000001ce,0x000001a7,0x00050080,0x00000024,0x000001cf,0x000001ce,0x00000159,0x0003003e, + 0x000001a7,0x000001cf,0x000200f9,0x000001a8,0x000200f8,0x000001aa,0x000100fd,0x00010038, + 0x00050036,0x0000007d,0x00000080,0x00000000,0x0000007e,0x00030037,0x00000033,0x0000007f, + 0x000200f8,0x00000081,0x0004003b,0x000001a6,0x000001d0,0x00000007,0x0004003b,0x00000033, + 0x000001d8,0x00000007,0x0004003b,0x000001e4,0x000001e5,0x00000007,0x0004003b,0x000001ea, + 0x000001eb,0x00000007,0x0004003b,0x00000033,0x000001ed,0x00000007,0x0004003b,0x000001f3, + 0x000001f4,0x00000007,0x0004003b,0x00000033,0x00000204,0x00000007,0x0004003b,0x000001e4, + 0x00000207,0x00000007,0x0004003b,0x00000033,0x0000020c,0x00000007,0x0004003b,0x00000033, + 0x0000020e,0x00000007,0x0004003b,0x00000007,0x00000212,0x00000007,0x0004003b,0x00000007, + 0x0000021c,0x00000007,0x0004003b,0x00000007,0x0000021f,0x00000007,0x0003003e,0x000001d0, + 0x000000ab,0x0003003e,0x000001d0,0x000000ab,0x000200f9,0x000001d1,0x000200f8,0x000001d1, + 0x000400f6,0x000001d3,0x000001d4,0x00000000,0x000200f9,0x000001d5,0x000200f8,0x000001d5, + 0x0004003d,0x00000024,0x000001d6,0x000001d0,0x000500b1,0x00000061,0x000001d7,0x000001d6, + 0x000000b7,0x000400fa,0x000001d7,0x000001d2,0x000001d3,0x000200f8,0x000001d2,0x0004003d, + 0x00000025,0x000001d9,0x0000007f,0x0004003d,0x00000024,0x000001e3,0x000001d0,0x0003003e, + 0x000001e5,0x000001e2,0x00050041,0x00000033,0x000001e6,0x000001e5,0x000001e3,0x0004003d, + 0x00000025,0x000001e7,0x000001e6,0x00050080,0x00000025,0x000001e8,0x000001d9,0x000001e7, + 0x0003003e,0x000001d8,0x000001e8,0x0004003d,0x00000024,0x000001ec,0x000001d0,0x0004003d, + 0x00000025,0x000001ee,0x000001d8,0x0003003e,0x000001ed,0x000001ee,0x00050039,0x00000006, + 0x000001ef,0x00000036,0x000001ed,0x00050041,0x00000007,0x000001f0,0x000001eb,0x000001ec, + 0x0003003e,0x000001f0,0x000001ef,0x000200f9,0x000001d4,0x000200f8,0x000001d4,0x0004003d, + 0x00000024,0x000001f1,0x000001d0,0x00050080,0x00000024,0x000001f2,0x000001f1,0x00000159, + 0x0003003e,0x000001d0,0x000001f2,0x000200f9,0x000001d1,0x000200f8,0x000001d3,0x0004003d, + 0x00000025,0x000001f5,0x0000007f,0x00050041,0x00000033,0x000001f6,0x000001f4,0x00000159, + 0x0003003e,0x000001f6,0x000001f5,0x00050041,0x00000007,0x000001f7,0x000001eb,0x000000ab, + 0x0004003d,0x00000006,0x000001f8,0x000001f7,0x00050041,0x00000007,0x000001f9,0x000001f4, + 0x000000ab,0x0003003e,0x000001f9,0x000001f8,0x00050041,0x00000007,0x000001fa,0x000001eb, + 0x000000ab,0x0004003d,0x00000006,0x000001fb,0x000001fa,0x00050041,0x00000007,0x000001fc, + 0x000001f4,0x0000014e,0x0003003e,0x000001fc,0x000001fb,0x0003003e,0x000001d0,0x00000159, + 0x000200f9,0x000001fd,0x000200f8,0x000001fd,0x000400f6,0x000001ff,0x00000200,0x00000000, + 0x000200f9,0x00000201,0x000200f8,0x00000201,0x0004003d,0x00000024,0x00000202,0x000001d0, + 0x000500b1,0x00000061,0x00000203,0x00000202,0x000000b7,0x000400fa,0x00000203,0x000001fe, + 0x000001ff,0x000200f8,0x000001fe,0x0004003d,0x00000025,0x00000205,0x0000007f,0x0004003d, + 0x00000024,0x00000206,0x000001d0,0x0003003e,0x00000207,0x000001e2,0x00050041,0x00000033, + 0x00000208,0x00000207,0x00000206,0x0004003d,0x00000025,0x00000209,0x00000208,0x00050080, + 0x00000025,0x0000020a,0x00000205,0x00000209,0x0003003e,0x00000204,0x0000020a,0x00040039, + 0x00000025,0x0000020b,0x00000027,0x0004003d,0x00000025,0x0000020d,0x00000204,0x0003003e, + 0x0000020c,0x0000020d,0x0003003e,0x0000020e,0x0000020b,0x00060039,0x00000061,0x0000020f, + 0x00000065,0x0000020c,0x0000020e,0x000300f7,0x00000211,0x00000000,0x000400fa,0x0000020f, + 0x00000210,0x00000211,0x000200f8,0x00000210,0x0004003d,0x00000024,0x00000213,0x000001d0, + 0x00050041,0x00000007,0x00000214,0x000001eb,0x00000213,0x0004003d,0x00000006,0x00000215, + 0x00000214,0x0003003e,0x00000212,0x00000215,0x0004003d,0x00000006,0x00000216,0x00000212, + 0x00050041,0x00000007,0x00000217,0x000001f4,0x000000ab,0x0004003d,0x00000006,0x00000218, + 0x00000217,0x000500ba,0x00000061,0x00000219,0x00000216,0x00000218,0x000300f7,0x0000021b, + 0x00000000,0x000400fa,0x00000219,0x0000021a,0x0000021b,0x000200f8,0x0000021a,0x00050041, + 0x00000007,0x0000021d,0x000001f4,0x0000014e,0x0004003d,0x00000006,0x0000021e,0x0000021d, + 0x0003003e,0x0000021c,0x0000021e,0x0004003d,0x00000006,0x00000220,0x00000212,0x0003003e, + 0x0000021f,0x00000220,0x00060039,0x00000006,0x00000221,0x0000001b,0x0000021c,0x0000021f, + 0x00050041,0x00000007,0x00000222,0x000001f4,0x0000014e,0x0003003e,0x00000222,0x00000221, + 0x0004003d,0x00000025,0x00000223,0x00000204,0x00050041,0x00000033,0x00000224,0x000001f4, + 0x00000159,0x0003003e,0x00000224,0x00000223,0x0004003d,0x00000006,0x00000225,0x00000212, + 0x00050041,0x00000007,0x00000226,0x000001f4,0x000000ab,0x0003003e,0x00000226,0x00000225, + 0x000200f9,0x0000021b,0x000200f8,0x0000021b,0x000200f9,0x00000211,0x000200f8,0x00000211, + 0x000200f9,0x00000200,0x000200f8,0x00000200,0x0004003d,0x00000024,0x00000227,0x000001d0, + 0x00050080,0x00000024,0x00000228,0x00000227,0x00000159,0x0003003e,0x000001d0,0x00000228, + 0x000200f9,0x000001fd,0x000200f8,0x000001ff,0x0004003d,0x0000007d,0x00000229,0x000001f4, + 0x000200fe,0x00000229,0x00010038,0x00050036,0x00000012,0x00000085,0x00000000,0x00000082, + 0x00030037,0x00000033,0x00000083,0x00030037,0x0000007d,0x00000084,0x000200f8,0x00000086, + 0x0004003b,0x00000033,0x0000022c,0x00000007,0x0004003b,0x00000033,0x0000022e,0x00000007, + 0x0004003b,0x00000013,0x00000230,0x00000007,0x0004003b,0x00000033,0x00000231,0x00000007, + 0x0004003d,0x00000025,0x0000022d,0x00000083,0x0003003e,0x0000022c,0x0000022d,0x00050051, + 0x00000025,0x0000022f,0x00000084,0x00000001,0x0003003e,0x0000022e,0x0000022f,0x0004003d, + 0x00000025,0x00000232,0x0000022e,0x0003003e,0x00000231,0x00000232,0x00050039,0x00000012, + 0x00000233,0x0000003e,0x00000231,0x0003003e,0x00000230,0x00000233,0x0004003d,0x00000012, + 0x00000234,0x00000230,0x000200fe,0x00000234,0x00010038,0x00050036,0x00000006,0x00000088, + 0x00000000,0x00000034,0x00030037,0x00000033,0x00000087,0x000200f8,0x00000089,0x0004003b, + 0x0000001e,0x00000237,0x00000007,0x0004003b,0x00000033,0x00000239,0x00000007,0x0004003b, + 0x0000001e,0x0000023c,0x00000007,0x0004003b,0x0000001e,0x0000023d,0x00000007,0x0004003b, + 0x00000007,0x0000023f,0x00000007,0x0004003b,0x0000001e,0x00000240,0x00000007,0x0004003d, + 0x00000025,0x0000023a,0x00000087,0x0003003e,0x00000239,0x0000023a,0x00050039,0x0000001d, + 0x0000023b,0x0000003a,0x00000239,0x0003003e,0x0000023c,0x00000238,0x0003003e,0x0000023d, + 0x0000023b,0x00060039,0x0000001d,0x0000023e,0x00000022,0x0000023c,0x0000023d,0x0003003e, + 0x00000237,0x0000023e,0x0004003d,0x0000001d,0x00000241,0x00000237,0x0003003e,0x00000240, + 0x00000241,0x00050039,0x00000006,0x00000242,0x0000005f,0x00000240,0x0003003e,0x0000023f, + 0x00000242,0x0004003d,0x00000006,0x00000243,0x0000023f,0x000200fe,0x00000243,0x00010038, + 0x00050036,0x00000002,0x0000008c,0x00000000,0x0000008a,0x00030037,0x00000033,0x0000008b, + 0x000200f8,0x0000008d,0x0004003b,0x000001f3,0x00000246,0x00000007,0x0004003b,0x00000033, + 0x00000247,0x00000007,0x0004003b,0x00000013,0x0000024a,0x00000007,0x0004003b,0x00000033, + 0x0000024c,0x00000007,0x0004003b,0x00000033,0x0000024f,0x00000007,0x0004003b,0x00000007, + 0x00000251,0x00000007,0x0004003b,0x00000013,0x00000254,0x00000007,0x0004003b,0x00000033, + 0x00000257,0x00000007,0x0004003b,0x00000013,0x00000259,0x00000007,0x0004003b,0x00000033, + 0x0000025c,0x00000007,0x0004003b,0x00000007,0x0000025e,0x00000007,0x0004003b,0x00000007, + 0x00000262,0x00000007,0x0004003b,0x00000007,0x00000263,0x00000007,0x0004003b,0x00000007, + 0x00000267,0x00000007,0x0004003b,0x00000007,0x00000268,0x00000007,0x0004003b,0x00000033, + 0x0000026a,0x00000007,0x0004003b,0x00000007,0x0000026c,0x00000007,0x0004003b,0x00000007, + 0x0000026f,0x00000007,0x0004003b,0x00000033,0x00000270,0x00000007,0x0004003b,0x00000033, + 0x00000273,0x00000007,0x0004003b,0x00000007,0x00000275,0x00000007,0x0004003d,0x00000025, + 0x00000248,0x0000008b,0x0003003e,0x00000247,0x00000248,0x00050039,0x0000007d,0x00000249, + 0x00000080,0x00000247,0x0003003e,0x00000246,0x00000249,0x0004003d,0x0000007d,0x0000024b, + 0x00000246,0x0004003d,0x00000025,0x0000024d,0x0000008b,0x0003003e,0x0000024c,0x0000024d, + 0x00060039,0x00000012,0x0000024e,0x00000085,0x0000024c,0x0000024b,0x0003003e,0x0000024a, + 0x0000024e,0x0004003d,0x00000025,0x00000250,0x0000008b,0x0003003e,0x0000024f,0x00000250, + 0x00050041,0x00000007,0x00000252,0x00000246,0x000000ab,0x0004003d,0x00000006,0x00000253, + 0x00000252,0x0003003e,0x00000251,0x00000253,0x0004003d,0x00000012,0x00000255,0x0000024a, + 0x0003003e,0x00000254,0x00000255,0x00070039,0x00000002,0x00000256,0x0000007b,0x0000024f, + 0x00000251,0x00000254,0x0004003d,0x00000025,0x00000258,0x0000008b,0x0003003e,0x00000257, + 0x00000258,0x0004003d,0x00000012,0x0000025a,0x0000024a,0x0003003e,0x00000259,0x0000025a, + 0x00060039,0x00000002,0x0000025b,0x00000054,0x00000257,0x00000259,0x0004003d,0x00000025, + 0x0000025d,0x0000008b,0x0003003e,0x0000025c,0x0000025d,0x00050041,0x00000007,0x0000025f, + 0x00000246,0x000000ab,0x0004003d,0x00000006,0x00000260,0x0000025f,0x0003003e,0x0000025e, + 0x00000260,0x00060039,0x00000002,0x00000261,0x0000004f,0x0000025c,0x0000025e,0x00050041, + 0x00000007,0x00000264,0x00000246,0x0000014e,0x0004003d,0x00000006,0x00000265,0x00000264, + 0x0003003e,0x00000263,0x00000265,0x00050039,0x00000006,0x00000266,0x0000006b,0x00000263, + 0x0003003e,0x00000267,0x00000266,0x0003003e,0x00000268,0x00000184,0x00060039,0x00000006, + 0x00000269,0x0000001b,0x00000267,0x00000268,0x0003003e,0x00000262,0x00000269,0x0004003d, + 0x00000025,0x0000026b,0x0000008b,0x0003003e,0x0000026a,0x0000026b,0x0004003d,0x00000006, + 0x0000026d,0x00000262,0x0003003e,0x0000026c,0x0000026d,0x00060039,0x00000002,0x0000026e, + 0x00000043,0x0000026a,0x0000026c,0x0004003d,0x00000025,0x00000271,0x0000008b,0x0003003e, + 0x00000270,0x00000271,0x00050039,0x00000006,0x00000272,0x00000088,0x00000270,0x0003003e, + 0x0000026f,0x00000272,0x0004003d,0x00000025,0x00000274,0x0000008b,0x0003003e,0x00000273, + 0x00000274,0x0004003d,0x00000006,0x00000276,0x0000026f,0x0003003e,0x00000275,0x00000276, + 0x00060039,0x00000002,0x00000277,0x00000047,0x00000273,0x00000275,0x000100fd,0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_prepare_reactivity_comp_spv.h b/gpu/vk/shaders/fsr3_prepare_reactivity_comp_spv.h new file mode 100644 index 000000000..dbf1c35f9 --- /dev/null +++ b/gpu/vk/shaders/fsr3_prepare_reactivity_comp_spv.h @@ -0,0 +1,1083 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_PREPARE_REACTIVITY_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x00000523,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000031,0x00020011,0x00000032,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e, + 0x00000000,0x0003000e,0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d, + 0x00000000,0x00000513,0x00060010,0x00000004,0x00000011,0x00000008,0x00000008,0x00000001, + 0x00030003,0x00000002,0x000001c2,0x000b0004,0x455f4c47,0x735f5458,0x6c706d61,0x656c7265, + 0x745f7373,0x75747865,0x665f6572,0x74636e75,0x736e6f69,0x00000000,0x000b0004,0x455f4c47, + 0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63, + 0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c, + 0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63, + 0x69645f65,0x74636572,0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00070005, + 0x0000000c,0x4c786666,0x28707265,0x663b3166,0x31663b31,0x0000003b,0x00030005,0x00000009, + 0x00000078,0x00030005,0x0000000a,0x00000079,0x00030005,0x0000000b,0x00000074,0x00060005, + 0x00000010,0x53786666,0x72757461,0x28657461,0x003b3166,0x00030005,0x0000000f,0x00000078, + 0x00060005,0x00000016,0x46786666,0x74636172,0x32667628,0x0000003b,0x00030005,0x00000015, + 0x00000078,0x00060005,0x0000001b,0x4d786666,0x66286e69,0x31663b31,0x0000003b,0x00030005, + 0x00000019,0x00000078,0x00030005,0x0000001a,0x00000079,0x00060005,0x00000020,0x4d786666, + 0x76286e69,0x763b3266,0x003b3266,0x00030005,0x0000001e,0x00000078,0x00030005,0x0000001f, + 0x00000079,0x00060005,0x00000027,0x4d786666,0x69286e69,0x31693b31,0x0000003b,0x00030005, + 0x00000025,0x00000078,0x00030005,0x00000026,0x00000079,0x00060005,0x0000002b,0x4d786666, + 0x66287861,0x31663b31,0x0000003b,0x00030005,0x00000029,0x00000078,0x00030005,0x0000002a, + 0x00000079,0x00060005,0x0000002f,0x4d786666,0x76287861,0x763b3266,0x003b3266,0x00030005, + 0x0000002d,0x00000078,0x00030005,0x0000002e,0x00000079,0x00060005,0x00000033,0x4d786666, + 0x69287861,0x31693b31,0x0000003b,0x00030005,0x00000031,0x00000078,0x00030005,0x00000032, + 0x00000079,0x00050005,0x00000037,0x646e6552,0x69537265,0x0028657a,0x00090005,0x00000039, + 0x76657250,0x73756f69,0x6d617246,0x6e655265,0x53726564,0x28657a69,0x00000000,0x00060005, + 0x0000003b,0x5278614d,0x65646e65,0x7a695372,0x00002865,0x00060005,0x0000003d,0x63737055, + 0x53656c61,0x28657a69,0x00000000,0x00040005,0x00000040,0x7474694a,0x00287265,0x000b0005, + 0x00000044,0x69766544,0x6f546563,0x77656956,0x63617053,0x61725465,0x6f66736e,0x61466d72, + 0x726f7463,0x00002873,0x00090005,0x00000047,0x77656956,0x63617053,0x4d6f5465,0x72657465, + 0x63614673,0x28726f74,0x00000000,0x00090005,0x00000049,0x75636341,0x616c756d,0x6e6f6974, + 0x65646441,0x72655064,0x6d617246,0x00002865,0x000a0005,0x0000004b,0x446e694d,0x636f7369, + 0x73756c63,0x416e6f69,0x6d756363,0x74616c75,0x286e6f69,0x00000000,0x00080005,0x00000050, + 0x64616f4c,0x63616552,0x65766974,0x6b73614d,0x32697628,0x0000003b,0x00040005,0x0000004f, + 0x50785069,0x0000736f,0x00100005,0x00000052,0x54746547,0x736e6172,0x65726170,0x4179636e, + 0x6f43646e,0x736f706d,0x6f697469,0x73614d6e,0x7365526b,0x6372756f,0x6d694465,0x69736e65, + 0x28736e6f,0x00000000,0x000d0005,0x00000056,0x706d6153,0x7254656c,0x70736e61,0x6e657261, + 0x6e417963,0x6d6f4364,0x69736f70,0x6e6f6974,0x6b73614d,0x32667628,0x0000003b,0x00030005, + 0x00000055,0x00565566,0x00080005,0x00000059,0x706d6153,0x6341656c,0x756d7563,0x6974616c, + 0x76286e6f,0x003b3266,0x00030005,0x00000058,0x00565566,0x00090005,0x0000005e,0x726f7453, + 0x63634165,0x6c756d75,0x6f697461,0x6976286e,0x31663b32,0x0000003b,0x00040005,0x0000005c, + 0x50785069,0x0000736f,0x00060005,0x0000005d,0x63634166,0x6c756d75,0x6f697461,0x0000006e, + 0x00090005,0x00000061,0x706d6153,0x6853656c,0x6e696461,0x61684367,0x2865676e,0x3b326676, + 0x00000000,0x00030005,0x00000060,0x00565566,0x00080005,0x00000064,0x64616f4c,0x72727543, + 0x4c746e65,0x28616d75,0x3b326976,0x00000000,0x00040005,0x00000063,0x50785069,0x0000736f, + 0x00080005,0x00000068,0x726f7453,0x77654e65,0x6b636f4c,0x69762873,0x31663b32,0x0000003b, + 0x00040005,0x00000066,0x50785069,0x0000736f,0x00040005,0x00000067,0x4c77656e,0x006b636f, + 0x000a0005,0x0000006b,0x64616f4c,0x6f636552,0x7274736e,0x65746375,0x65725064,0x70654476, + 0x76286874,0x003b3269,0x00040005,0x0000006a,0x50785069,0x0000736f,0x000a0005,0x0000006f, + 0x64616f4c,0x616c6944,0x4d646574,0x6f69746f,0x6365566e,0x28726f74,0x3b326976,0x00000000, + 0x00050005,0x0000006e,0x49785069,0x7475706e,0x00000000,0x00080005,0x00000072,0x64616f4c, + 0x616c6944,0x44646574,0x68747065,0x32697628,0x0000003b,0x00050005,0x00000071,0x49785069, + 0x7475706e,0x00000000,0x00050005,0x00000074,0x6f707845,0x65727573,0x00000028,0x000b0005, + 0x0000007a,0x726f7453,0x6c694465,0x64657461,0x63616552,0x65766974,0x6b73614d,0x69762873, + 0x66763b32,0x00003b34,0x00040005,0x00000078,0x50785069,0x0000736f,0x00080005,0x00000079, + 0x6c694466,0x64657461,0x63616552,0x65766974,0x6b73614d,0x00000073,0x000b0005,0x0000007d, + 0x6f636552,0x7274736e,0x65746375,0x70654464,0x764d6874,0x68547850,0x68736572,0x28646c6f, + 0x003b3166,0x00080005,0x0000007c,0x61654e66,0x74736572,0x74706544,0x4d6e4968,0x72657465, + 0x00000073,0x00090005,0x0000007f,0x64616853,0x43676e69,0x676e6168,0x6e655265,0x53726564, + 0x28657a69,0x00000000,0x00090005,0x00000081,0x64616853,0x43676e69,0x676e6168,0x78614d65, + 0x646e6552,0x69537265,0x0028657a,0x00070005,0x00000084,0x34746547,0x6c65564b,0x7469636f, + 0x66762879,0x00003b32,0x00060005,0x00000083,0x746f4d66,0x566e6f69,0x6f746365,0x00000072, + 0x00080005,0x00000089,0x446e694d,0x64697669,0x79426465,0x2878614d,0x663b3166,0x00003b31, + 0x00030005,0x00000087,0x00003076,0x00030005,0x00000088,0x00003176,0x00060005,0x0000008e, + 0x76557349,0x69736e49,0x76286564,0x003b3266,0x00030005,0x0000008d,0x00765566,0x00080005, + 0x00000094,0x6d616c43,0x616f4c70,0x69762864,0x69763b32,0x69763b32,0x00003b32,0x00050005, + 0x00000091,0x53785069,0x6c706d61,0x00000065,0x00050005,0x00000092,0x4f785069,0x65736666, + 0x00000074,0x00060005,0x00000093,0x78655469,0x65727574,0x657a6953,0x00000000,0x00080005, + 0x0000009a,0x6d616c43,0x28765570,0x3b326676,0x3b326976,0x3b326976,0x00000000,0x00030005, + 0x00000097,0x00765566,0x00060005,0x00000098,0x78655469,0x65727574,0x657a6953,0x00000000, + 0x00060005,0x00000099,0x73655269,0x6372756f,0x7a695365,0x00000065,0x00070005,0x0000009f, + 0x6e4f7349,0x65726353,0x76286e65,0x763b3269,0x003b3269,0x00030005,0x0000009d,0x00736f70, + 0x00040005,0x0000009e,0x657a6973,0x00000000,0x00090005,0x000000a3,0x706d6f43,0x48657475, + 0x736f5072,0x6d6f7246,0x6f50724c,0x69762873,0x00003b32,0x00050005,0x000000a2,0x4c785069, + 0x736f5072,0x00000000,0x00080005,0x000000a6,0x56746547,0x53776569,0x65636170,0x74706544, + 0x31662868,0x0000003b,0x00060005,0x000000a5,0x76654466,0x44656369,0x68747065,0x00000000, + 0x000a0005,0x000000a9,0x56746547,0x53776569,0x65636170,0x74706544,0x4d6e4968,0x72657465, + 0x31662873,0x0000003b,0x00060005,0x000000a8,0x76654466,0x44656369,0x68747065,0x00000000, + 0x00080005,0x000000af,0x696c6942,0x7261656e,0x706d6153,0x676e696c,0x61746144,0x00000000, + 0x00060006,0x000000af,0x00000000,0x66664f69,0x73746573,0x00000000,0x00060006,0x000000af, + 0x00000001,0x69655766,0x73746867,0x00000000,0x00060006,0x000000af,0x00000002,0x73614269, + 0x736f5065,0x00000000,0x000b0005,0x000000b3,0x42746547,0x6e696c69,0x53726165,0x6c706d61, + 0x44676e69,0x28617461,0x3b326676,0x3b326976,0x00000000,0x00030005,0x000000b1,0x00765566, + 0x00040005,0x000000b2,0x7a695369,0x00000065,0x000b0005,0x000000b9,0x706d6f43,0x44657475, + 0x636f7369,0x73756c63,0x736e6f69,0x32667628,0x3266763b,0x3b31663b,0x00000000,0x00030005, + 0x000000b6,0x00765566,0x00060005,0x000000b7,0x746f4d66,0x566e6f69,0x6f746365,0x00000072, + 0x00080005,0x000000b8,0x72754366,0x746e6572,0x74706544,0x65695668,0x61705377,0x00006563, + 0x000b0005,0x000000be,0x706d6f43,0x4d657475,0x6f69746f,0x7669446e,0x65677265,0x2865636e, + 0x3b326676,0x3b326676,0x003b3166,0x00030005,0x000000bb,0x00765566,0x00060005,0x000000bc, + 0x746f4d66,0x566e6f69,0x6f746365,0x00000072,0x00070005,0x000000bd,0x72754366,0x746e6572, + 0x74706544,0x6d615368,0x00656c70,0x000a0005,0x000000c3,0x616c6944,0x65526574,0x69746361, + 0x614d6576,0x28736b73,0x3b326976,0x3b326676,0x00000000,0x00040005,0x000000c1,0x50785069, + 0x0000736f,0x00030005,0x000000c2,0x00765566,0x000e0005,0x000000c7,0x616c6944,0x72546574, + 0x70736e61,0x6e657261,0x6e417963,0x6d6f4364,0x69736f70,0x6e6f6974,0x6b73614d,0x69762873, + 0x66763b32,0x00003b32,0x00040005,0x000000c5,0x50785069,0x0000736f,0x00030005,0x000000c6, + 0x00765566,0x000b0005,0x000000ca,0x706d6f43,0x54657475,0x466e6968,0x75746165,0x6f436572, + 0x6469666e,0x65636e65,0x32697628,0x0000003b,0x00040005,0x000000c9,0x50785069,0x0000736f, + 0x000c0005,0x000000d2,0x61647055,0x63416574,0x756d7563,0x6974616c,0x76286e6f,0x763b3269, + 0x763b3266,0x663b3266,0x31663b31,0x0000003b,0x00040005,0x000000cd,0x50785069,0x0000736f, + 0x00030005,0x000000ce,0x00765566,0x00060005,0x000000cf,0x746f4d66,0x566e6f69,0x6f746365, + 0x00000072,0x00060005,0x000000d0,0x73694466,0x6c63636f,0x6f697375,0x0000006e,0x00060005, + 0x000000d1,0x61685366,0x676e6964,0x6e616843,0x00006567,0x00090005,0x000000d5,0x706d6f43, + 0x53657475,0x69646168,0x6843676e,0x65676e61,0x32667628,0x0000003b,0x00030005,0x000000d4, + 0x00765566,0x00080005,0x000000d9,0x70657250,0x52657261,0x74636165,0x74697669,0x69762879, + 0x00003b32,0x00040005,0x000000d8,0x50785069,0x0000736f,0x00070005,0x00000109,0x53466263, + 0x50553352,0x4c414353,0x745f5245,0x00000000,0x00060006,0x00000109,0x00000000,0x6e655269, + 0x53726564,0x00657a69,0x000a0006,0x00000109,0x00000001,0x65725069,0x756f6976,0x61724673, + 0x6552656d,0x7265646e,0x657a6953,0x00000000,0x00070006,0x00000109,0x00000002,0x73705569, + 0x656c6163,0x657a6953,0x00000000,0x000a0006,0x00000109,0x00000003,0x65725069,0x756f6976, + 0x61724673,0x7055656d,0x6c616373,0x7a695365,0x00000065,0x00070006,0x00000109,0x00000004, + 0x78614d69,0x646e6552,0x69537265,0x0000657a,0x00070006,0x00000109,0x00000005,0x78614d69, + 0x63737055,0x53656c61,0x00657a69,0x00080006,0x00000109,0x00000006,0x76654466,0x54656369, + 0x6569566f,0x70654477,0x00006874,0x00050006,0x00000109,0x00000007,0x74694a66,0x00726574, + 0x00090006,0x00000109,0x00000008,0x65725066,0x756f6976,0x61724673,0x694a656d,0x72657474, + 0x00000000,0x00080006,0x00000109,0x00000009,0x746f4d66,0x566e6f69,0x6f746365,0x61635372, + 0x0000656c,0x00080006,0x00000109,0x0000000a,0x776f4466,0x6163736e,0x6146656c,0x726f7463, + 0x00000000,0x000b0006,0x00000109,0x0000000b,0x746f4d66,0x566e6f69,0x6f746365,0x74694a72, + 0x43726574,0x65636e61,0x74616c6c,0x006e6f69,0x00060006,0x00000109,0x0000000c,0x6e615466, + 0x666c6148,0x00564f46,0x00090006,0x00000109,0x0000000d,0x74694a66,0x53726574,0x65757165, + 0x4c65636e,0x74676e65,0x00000068,0x00060006,0x00000109,0x0000000e,0x6c654466,0x69546174, + 0x0000656d,0x00080006,0x00000109,0x0000000f,0x6c654466,0x72506174,0x70784565,0x7275736f, + 0x00000065,0x000a0006,0x00000109,0x00000010,0x65695666,0x61705377,0x6f546563,0x6574654d, + 0x61467372,0x726f7463,0x00000000,0x00060006,0x00000109,0x00000011,0x61724666,0x6e49656d, + 0x00786564,0x00070006,0x00000109,0x00000012,0x6c655666,0x7469636f,0x63614679,0x00726f74, + 0x00080006,0x00000109,0x00000013,0x61655266,0x76697463,0x73656e65,0x61635373,0x0000656c, + 0x00080006,0x00000109,0x00000014,0x61685366,0x676e6964,0x6e616843,0x63536567,0x00656c61, + 0x000a0006,0x00000109,0x00000015,0x63634166,0x6c756d75,0x6f697461,0x6464416e,0x65506465, + 0x61724672,0x0000656d,0x000b0006,0x00000109,0x00000016,0x6e694d66,0x6f736944,0x756c6363, + 0x6e6f6973,0x75636341,0x616c756d,0x6e6f6974,0x00000000,0x00060005,0x0000010b,0x53466263, + 0x70553352,0x6c616373,0x00007265,0x00060005,0x0000013f,0x65725f72,0x69746361,0x6d5f6576, + 0x006b7361,0x000b0005,0x0000014b,0x72745f72,0x70736e61,0x6e657261,0x615f7963,0x635f646e, + 0x6f706d6f,0x69746973,0x6d5f6e6f,0x006b7361,0x00060005,0x00000153,0x694c5f73,0x7261656e, + 0x6d616c43,0x00000070,0x00060005,0x0000015c,0x63615f72,0x756d7563,0x6974616c,0x00006e6f, + 0x00060005,0x00000167,0x615f7772,0x6d756363,0x74616c75,0x006e6f69,0x00070005,0x0000016c, + 0x68735f72,0x6e696461,0x68635f67,0x65676e61,0x00000000,0x00060005,0x00000179,0x75635f72, + 0x6e657272,0x756c5f74,0x0000616d,0x00060005,0x00000180,0x6e5f7772,0x6c5f7765,0x736b636f, + 0x00000000,0x000c0005,0x00000187,0x65725f72,0x736e6f63,0x63757274,0x5f646574,0x76657270, + 0x73756f69,0x61656e5f,0x74736572,0x7065645f,0x00006874,0x00090005,0x00000190,0x69645f72, + 0x6574616c,0x6f6d5f64,0x6e6f6974,0x6365765f,0x73726f74,0x00000000,0x00060005,0x00000197, + 0x69645f72,0x6574616c,0x65645f64,0x00687470,0x00050005,0x0000019e,0x6f707865,0x65727573, + 0x00000000,0x00070005,0x0000019f,0x6e695f72,0x5f747570,0x6f707865,0x65727573,0x00000000, + 0x00090005,0x000001ad,0x645f7772,0x74616c69,0x725f6465,0x74636165,0x5f657669,0x6b73616d, + 0x00000073,0x00040005,0x000001b6,0x61726170,0x0000006d,0x00040005,0x000001b8,0x61726170, + 0x0000006d,0x00040005,0x000001b9,0x61726170,0x0000006d,0x00040005,0x000001ba,0x61726170, + 0x0000006d,0x00030005,0x000001d3,0x0000006d,0x00040005,0x000001d4,0x61726170,0x0000006d, + 0x00040005,0x000001d5,0x61726170,0x0000006d,0x00040005,0x000001dc,0x61726170,0x0000006d, + 0x00040005,0x000001dd,0x61726170,0x0000006d,0x00040005,0x000001fd,0x75736572,0x0000746c, + 0x00040005,0x00000204,0x61726170,0x0000006d,0x00040005,0x00000207,0x61726170,0x0000006d, + 0x00040005,0x00000209,0x61726170,0x0000006d,0x00040005,0x0000020a,0x61726170,0x0000006d, + 0x00040005,0x00000210,0x61726170,0x0000006d,0x00040005,0x00000213,0x61726170,0x0000006d, + 0x00040005,0x00000215,0x61726170,0x0000006d,0x00040005,0x00000216,0x61726170,0x0000006d, + 0x00060005,0x0000021c,0x6d615366,0x4c656c70,0x7461636f,0x006e6f69,0x00070005,0x00000221, + 0x616c4366,0x6465706d,0x61636f4c,0x6e6f6974,0x00000000,0x00040005,0x00000226,0x61726170, + 0x0000006d,0x00040005,0x00000228,0x61726170,0x0000006d,0x00040005,0x0000022a,0x61726170, + 0x0000006d,0x00040005,0x0000022b,0x61726170,0x0000006d,0x00050005,0x0000022d,0x616c4366, + 0x6465706d,0x00007655,0x00060005,0x0000023f,0x63725366,0x7474694a,0x64657265,0x00736f50, + 0x00050005,0x00000246,0x50724c66,0x6e49736f,0x00007248,0x00050005,0x0000024e,0x48785069, + 0x736f5072,0x00000000,0x00070005,0x00000255,0x76654466,0x54656369,0x6569566f,0x70654477, + 0x00006874,0x00040005,0x00000260,0x61726170,0x0000006d,0x00050005,0x00000267,0x53785066, + 0x6c706d61,0x00000065,0x00040005,0x0000026e,0x61746164,0x00000000,0x00040005,0x00000273, + 0x46785066,0x00636172,0x00040005,0x00000274,0x61726170,0x0000006d,0x00080005,0x0000029e, + 0x61654e66,0x74736572,0x74706544,0x4d6e4968,0x72657465,0x00000073,0x00040005,0x000002a3, + 0x61726170,0x0000006d,0x00040005,0x000002a4,0x61726170,0x0000006d,0x000a0005,0x000002a6, + 0x63655266,0x74736e6f,0x74637572,0x65446465,0x764d7470,0x65726854,0x6c6f6873,0x00000064, + 0x00040005,0x000002a7,0x61726170,0x0000006d,0x00040005,0x000002aa,0x61726170,0x0000006d, + 0x00060005,0x000002b2,0x70655266,0x656a6f72,0x64657463,0x00007655,0x00060005,0x000002b6, + 0x696c6962,0x7261656e,0x6f666e49,0x00000000,0x00040005,0x000002b8,0x61726170,0x0000006d, + 0x00040005,0x000002ba,0x61726170,0x0000006d,0x00060005,0x000002bc,0x73694466,0x6c63636f, + 0x6f697375,0x0000006e,0x00050005,0x000002bd,0x69655766,0x53746867,0x00006d75,0x00080005, + 0x000002bf,0x746f5062,0x69746e65,0x69446c61,0x63636f73,0x6973756c,0x00006e6f,0x00060005, + 0x000002c1,0x6d615369,0x49656c70,0x7865646e,0x00000000,0x00040005,0x000002cb,0x66664f69, + 0x00746573,0x00050005,0x000002cf,0x6d615369,0x50656c70,0x0000736f,0x00040005,0x000002d1, + 0x61726170,0x0000006d,0x00040005,0x000002d4,0x61726170,0x0000006d,0x00040005,0x000002d6, + 0x61726170,0x0000006d,0x00040005,0x000002d9,0x61726170,0x0000006d,0x00040005,0x000002db, + 0x61726170,0x0000006d,0x00040005,0x000002df,0x69655766,0x00746867,0x00090005,0x000002e8, + 0x65725066,0x61654e76,0x74736572,0x74706544,0x65695668,0x61705377,0x00006563,0x00040005, + 0x000002e9,0x61726170,0x0000006d,0x00040005,0x000002ec,0x61726170,0x0000006d,0x00070005, + 0x000002ee,0x70654466,0x69446874,0x72656666,0x65636e65,0x00000000,0x00070005,0x000002fa, + 0x6c614866,0x65695666,0x726f7077,0x64695774,0x00006874,0x00060005,0x000002ff,0x70654466, + 0x68546874,0x68736572,0x00646c6f,0x00040005,0x00000300,0x61726170,0x0000006d,0x00040005, + 0x00000302,0x61726170,0x0000006d,0x00090005,0x00000305,0x71655266,0x65726975,0x70654464, + 0x65536874,0x61726170,0x6e6f6974,0x00000000,0x00040005,0x0000030e,0x61726170,0x0000006d, + 0x00040005,0x00000324,0x61726170,0x0000006d,0x00070005,0x0000032b,0x52785069,0x6f727065, + 0x7463656a,0x6f506465,0x00000073,0x00070005,0x00000333,0x70655266,0x656a6f72,0x64657463, + 0x74706544,0x00000068,0x00040005,0x00000334,0x61726170,0x0000006d,0x00090005,0x00000337, + 0x70655266,0x656a6f72,0x64657463,0x69746f4d,0x65566e6f,0x726f7463,0x00000000,0x00040005, + 0x00000338,0x61726170,0x0000006d,0x00080005,0x0000033b,0x70655266,0x656a6f72,0x64657463, + 0x6f6c6556,0x79746963,0x00000000,0x00040005,0x0000033c,0x61726170,0x0000006d,0x00050005, + 0x0000033f,0x564b3466,0x636f6c65,0x00797469,0x00040005,0x00000340,0x61726170,0x0000006d, + 0x00040005,0x00000343,0x78614d66,0x006e654c,0x00080005,0x00000349,0x63754e66,0x7375656c, + 0x74706544,0x4d6e4968,0x72657465,0x00000073,0x00040005,0x0000034a,0x61726170,0x0000006d, + 0x00080005,0x0000034d,0x72754366,0x746e6572,0x74706544,0x4d6e4968,0x72657465,0x00000073, + 0x00040005,0x0000034e,0x61726170,0x0000006d,0x00060005,0x00000351,0x73694466,0x636e6174, + 0x63614665,0x00726f74,0x00060005,0x00000355,0x6c655666,0x7469636f,0x63614679,0x00726f74, + 0x00040005,0x00000359,0x61726170,0x0000006d,0x000a0005,0x0000035b,0x746f4d66,0x566e6f69, + 0x6f746365,0x65694672,0x6f43646c,0x6469666e,0x65636e65,0x00000000,0x00040005,0x0000035f, + 0x61726170,0x0000006d,0x00080005,0x00000369,0x6c694466,0x64657461,0x63616552,0x65766974, + 0x6b73614d,0x00000073,0x00030005,0x0000036a,0x00000079,0x00030005,0x00000373,0x00000078, + 0x00050005,0x0000037b,0x706d6173,0x6f43656c,0x0064726f,0x00040005,0x00000380,0x61726170, + 0x0000006d,0x00040005,0x00000382,0x61726170,0x0000006d,0x00040005,0x00000383,0x61726170, + 0x0000006d,0x00040005,0x00000385,0x61726170,0x0000006d,0x00040005,0x00000388,0x61726170, + 0x0000006d,0x00040005,0x0000038a,0x61726170,0x0000006d,0x000b0005,0x00000393,0x54765566, + 0x736e6172,0x65726170,0x4179636e,0x6f43646e,0x736f706d,0x6f697469,0x73614d6e,0x0000006b, + 0x00040005,0x00000396,0x61726170,0x0000006d,0x00040005,0x00000398,0x61726170,0x0000006d, + 0x00040005,0x00000399,0x61726170,0x0000006d,0x00040005,0x0000039b,0x61726170,0x0000006d, + 0x00050005,0x000003a0,0x6d754c66,0x6e694d61,0x00000000,0x00050005,0x000003a2,0x6d754c66, + 0x78614d61,0x00000000,0x00060005,0x000003a3,0x6d615369,0x49656c70,0x7865646e,0x00000000, + 0x00060005,0x000003ac,0x53785069,0x6c706d61,0x736f5065,0x00000000,0x00040005,0x000003b7, + 0x61726170,0x0000006d,0x00040005,0x000003b9,0x61726170,0x0000006d,0x00050005,0x000003bb, + 0x65646e69,0x6c626178,0x00000065,0x00040005,0x000003be,0x61726170,0x0000006d,0x00050005, + 0x000003c2,0x6d615366,0x73656c70,0x00000000,0x00040005,0x000003c4,0x61726170,0x0000006d, + 0x00040005,0x000003cb,0x61726170,0x0000006d,0x00040005,0x000003cd,0x61726170,0x0000006d, + 0x00040005,0x000003d2,0x61726170,0x0000006d,0x00040005,0x000003d4,0x61726170,0x0000006d, + 0x00070005,0x000003da,0x73694466,0x696d6973,0x4c72616c,0x4d616d75,0x00006e69,0x00070005, + 0x000003db,0x73694466,0x696d6973,0x4c72616c,0x4d616d75,0x00007861,0x00060005,0x000003dd, + 0x74615075,0x6e726574,0x6b73614d,0x00000000,0x00050005,0x000003de,0x74694269,0x65646e49, + 0x00000078,0x00060005,0x000003df,0x6d615369,0x49656c70,0x7865646e,0x00000000,0x00050005, + 0x000003e7,0x66694466,0x65726566,0x0065636e,0x00040005,0x000003fe,0x61726170,0x0000006d, + 0x00040005,0x00000400,0x61726170,0x0000006d,0x00040005,0x00000405,0x61726170,0x0000006d, + 0x00040005,0x00000407,0x61726170,0x0000006d,0x00050005,0x0000040f,0x52734962,0x65676469, + 0x00000000,0x00030005,0x00000422,0x00000069,0x00050005,0x00000434,0x65646e69,0x6c626178, + 0x00000065,0x00050005,0x00000439,0x65646e69,0x6c626178,0x00000065,0x00060005,0x00000448, + 0x70655266,0x656a6f72,0x64657463,0x00007655,0x00060005,0x0000044c,0x63634166,0x6c756d75, + 0x6f697461,0x0000006e,0x00040005,0x0000044d,0x61726170,0x0000006d,0x00070005,0x00000452, + 0x70655266,0x656a6f72,0x64657463,0x485f7655,0x00000057,0x00040005,0x00000455,0x61726170, + 0x0000006d,0x00040005,0x00000457,0x61726170,0x0000006d,0x00040005,0x00000458,0x61726170, + 0x0000006d,0x00040005,0x0000045a,0x61726170,0x0000006d,0x00040005,0x0000045d,0x61726170, + 0x0000006d,0x00090005,0x0000045f,0x63634166,0x6c756d75,0x6f697461,0x6464416e,0x65506465, + 0x61724672,0x0000656d,0x00040005,0x00000461,0x61726170,0x0000006d,0x00040005,0x00000463, + 0x61726170,0x0000006d,0x00040005,0x00000464,0x61726170,0x0000006d,0x000a0005,0x00000467, + 0x6e694d66,0x6f736944,0x756c6363,0x6e6f6973,0x75636341,0x616c756d,0x6e6f6974,0x00000000, + 0x00040005,0x00000469,0x61726170,0x0000006d,0x00040005,0x0000046b,0x61726170,0x0000006d, + 0x00040005,0x0000046e,0x61726170,0x0000006d,0x00040005,0x00000470,0x61726170,0x0000006d, + 0x00040005,0x00000471,0x61726170,0x0000006d,0x00090005,0x0000047b,0x63634166,0x6c756d75, + 0x64657461,0x6d617246,0x6f547365,0x726f7453,0x00000065,0x00040005,0x0000047f,0x61726170, + 0x0000006d,0x00040005,0x00000481,0x61726170,0x0000006d,0x00040005,0x00000483,0x61726170, + 0x0000006d,0x00070005,0x00000489,0x61685366,0x676e6964,0x6e616843,0x76556567,0x00000000, + 0x00040005,0x00000492,0x61726170,0x0000006d,0x00040005,0x00000493,0x61726170,0x0000006d, + 0x00040005,0x00000494,0x61726170,0x0000006d,0x00060005,0x00000496,0x61685366,0x676e6964, + 0x6e616843,0x00006567,0x00040005,0x00000497,0x61726170,0x0000006d,0x00040005,0x0000049a, + 0x61726170,0x0000006d,0x00030005,0x0000049f,0x00765566,0x00060005,0x000004a7,0x746f4d66, + 0x566e6f69,0x6f746365,0x00000072,0x00040005,0x000004a8,0x61726170,0x0000006d,0x00050005, + 0x000004ab,0x564b3466,0x636f6c65,0x00797469,0x00040005,0x000004ac,0x61726170,0x0000006d, + 0x00050005,0x000004af,0x6c694466,0x64657461,0x00007655,0x00060005,0x000004b3,0x6c694466, + 0x64657461,0x74706544,0x00000068,0x00040005,0x000004b4,0x61726170,0x0000006d,0x00060005, + 0x000004b7,0x70654466,0x6e496874,0x6574654d,0x00007372,0x00040005,0x000004b8,0x61726170, + 0x0000006d,0x00060005,0x000004bb,0x73694466,0x6c63636f,0x6f697375,0x0000006e,0x00040005, + 0x000004bc,0x61726170,0x0000006d,0x00040005,0x000004bf,0x61726170,0x0000006d,0x00040005, + 0x000004c1,0x61726170,0x0000006d,0x00040005,0x000004c3,0x61726170,0x0000006d,0x00060005, + 0x000004c5,0x61685366,0x676e6964,0x6e616843,0x00006567,0x00040005,0x000004c6,0x61726170, + 0x0000006d,0x00040005,0x000004c8,0x61726170,0x0000006d,0x00040005,0x000004cb,0x61726170, + 0x0000006d,0x00040005,0x000004ce,0x61726170,0x0000006d,0x00040005,0x000004cf,0x61726170, + 0x0000006d,0x00070005,0x000004d1,0x746f4d66,0x446e6f69,0x72657669,0x636e6567,0x00000065, + 0x00040005,0x000004d2,0x61726170,0x0000006d,0x00040005,0x000004d4,0x61726170,0x0000006d, + 0x00040005,0x000004d6,0x61726170,0x0000006d,0x000b0005,0x000004d9,0x6c694466,0x64657461, + 0x6e617254,0x72617073,0x79636e65,0x43646e41,0x6f706d6f,0x69746973,0x00006e6f,0x00040005, + 0x000004da,0x61726170,0x0000006d,0x00040005,0x000004dc,0x61726170,0x0000006d,0x00070005, + 0x000004df,0x6e694666,0x65526c61,0x69746361,0x656e6576,0x00007373,0x00040005,0x000004e0, + 0x61726170,0x0000006d,0x00040005,0x000004e2,0x61726170,0x0000006d,0x00060005,0x000004e5, + 0x63634166,0x6c756d75,0x6f697461,0x0000006e,0x00040005,0x000004e6,0x61726170,0x0000006d, + 0x00040005,0x000004e8,0x61726170,0x0000006d,0x00040005,0x000004ea,0x61726170,0x0000006d, + 0x00040005,0x000004ec,0x61726170,0x0000006d,0x00040005,0x000004ee,0x61726170,0x0000006d, + 0x00040005,0x000004f1,0x74754f66,0x00747570,0x00040005,0x000004fc,0x61726170,0x0000006d, + 0x00040005,0x000004fe,0x61726170,0x0000006d,0x00060005,0x00000501,0x636f4c66,0x7274536b, + 0x74676e65,0x00000068,0x00040005,0x00000502,0x61726170,0x0000006d,0x00040005,0x0000050b, + 0x61726170,0x0000006d,0x00040005,0x0000050d,0x61726170,0x0000006d,0x00040005,0x0000050e, + 0x61726170,0x0000006d,0x00080005,0x00000513,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f, + 0x496e6f69,0x00000044,0x00040005,0x00000517,0x61726170,0x0000006d,0x00060005,0x0000051b, + 0x6f505f73,0x43746e69,0x706d616c,0x00000000,0x00030047,0x00000109,0x00000002,0x00050048, + 0x00000109,0x00000000,0x00000023,0x00000000,0x00050048,0x00000109,0x00000001,0x00000023, + 0x00000008,0x00050048,0x00000109,0x00000002,0x00000023,0x00000010,0x00050048,0x00000109, + 0x00000003,0x00000023,0x00000018,0x00050048,0x00000109,0x00000004,0x00000023,0x00000020, + 0x00050048,0x00000109,0x00000005,0x00000023,0x00000028,0x00050048,0x00000109,0x00000006, + 0x00000023,0x00000030,0x00050048,0x00000109,0x00000007,0x00000023,0x00000040,0x00050048, + 0x00000109,0x00000008,0x00000023,0x00000048,0x00050048,0x00000109,0x00000009,0x00000023, + 0x00000050,0x00050048,0x00000109,0x0000000a,0x00000023,0x00000058,0x00050048,0x00000109, + 0x0000000b,0x00000023,0x00000060,0x00050048,0x00000109,0x0000000c,0x00000023,0x00000068, + 0x00050048,0x00000109,0x0000000d,0x00000023,0x0000006c,0x00050048,0x00000109,0x0000000e, + 0x00000023,0x00000070,0x00050048,0x00000109,0x0000000f,0x00000023,0x00000074,0x00050048, + 0x00000109,0x00000010,0x00000023,0x00000078,0x00050048,0x00000109,0x00000011,0x00000023, + 0x0000007c,0x00050048,0x00000109,0x00000012,0x00000023,0x00000080,0x00050048,0x00000109, + 0x00000013,0x00000023,0x00000084,0x00050048,0x00000109,0x00000014,0x00000023,0x00000088, + 0x00050048,0x00000109,0x00000015,0x00000023,0x0000008c,0x00050048,0x00000109,0x00000016, + 0x00000023,0x00000090,0x00040047,0x0000010b,0x00000021,0x0000000c,0x00040047,0x0000010b, + 0x00000022,0x00000000,0x00040047,0x0000013f,0x00000021,0x00000003,0x00040047,0x0000013f, + 0x00000022,0x00000000,0x00040047,0x0000014b,0x00000021,0x00000004,0x00040047,0x0000014b, + 0x00000022,0x00000000,0x00040047,0x00000153,0x00000021,0x000003e9,0x00040047,0x00000153, + 0x00000022,0x00000000,0x00040047,0x0000015c,0x00000021,0x00000005,0x00040047,0x0000015c, + 0x00000022,0x00000000,0x00040047,0x00000167,0x00000021,0x0000000b,0x00040047,0x00000167, + 0x00000022,0x00000000,0x00040047,0x0000016c,0x00000021,0x00000006,0x00040047,0x0000016c, + 0x00000022,0x00000000,0x00040047,0x00000179,0x00000021,0x00000007,0x00040047,0x00000179, + 0x00000022,0x00000000,0x00040047,0x00000180,0x00000021,0x0000000a,0x00040047,0x00000180, + 0x00000022,0x00000000,0x00040047,0x00000187,0x00000021,0x00000000,0x00040047,0x00000187, + 0x00000022,0x00000000,0x00040047,0x00000190,0x00000021,0x00000001,0x00040047,0x00000190, + 0x00000022,0x00000000,0x00040047,0x00000197,0x00000021,0x00000002,0x00040047,0x00000197, + 0x00000022,0x00000000,0x00040047,0x0000019f,0x00000021,0x00000008,0x00040047,0x0000019f, + 0x00000022,0x00000000,0x00030047,0x000001ad,0x00000019,0x00040047,0x000001ad,0x00000021, + 0x00000009,0x00040047,0x000001ad,0x00000022,0x00000000,0x00040047,0x00000513,0x0000000b, + 0x0000001c,0x00040047,0x0000051b,0x00000021,0x000003e8,0x00040047,0x0000051b,0x00000022, + 0x00000000,0x00040047,0x00000522,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021, + 0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040020,0x00000007,0x00000007, + 0x00000006,0x00060021,0x00000008,0x00000006,0x00000007,0x00000007,0x00000007,0x00040021, + 0x0000000e,0x00000006,0x00000007,0x00040017,0x00000012,0x00000006,0x00000002,0x00040020, + 0x00000013,0x00000007,0x00000012,0x00040021,0x00000014,0x00000012,0x00000013,0x00050021, + 0x00000018,0x00000006,0x00000007,0x00000007,0x00050021,0x0000001d,0x00000012,0x00000013, + 0x00000013,0x00040015,0x00000022,0x00000020,0x00000001,0x00040020,0x00000023,0x00000007, + 0x00000022,0x00050021,0x00000024,0x00000022,0x00000023,0x00000023,0x00040017,0x00000035, + 0x00000022,0x00000002,0x00030021,0x00000036,0x00000035,0x00030021,0x0000003f,0x00000012, + 0x00040017,0x00000042,0x00000006,0x00000004,0x00030021,0x00000043,0x00000042,0x00030021, + 0x00000046,0x00000006,0x00040020,0x0000004d,0x00000007,0x00000035,0x00040021,0x0000004e, + 0x00000006,0x0000004d,0x00040021,0x00000054,0x00000006,0x00000013,0x00050021,0x0000005b, + 0x00000002,0x0000004d,0x00000007,0x00040021,0x0000006d,0x00000012,0x0000004d,0x00040020, + 0x00000076,0x00000007,0x00000042,0x00050021,0x00000077,0x00000002,0x0000004d,0x00000076, + 0x00050021,0x00000086,0x00000006,0x00000006,0x00000006,0x00020014,0x0000008b,0x00040021, + 0x0000008c,0x0000008b,0x00000013,0x00060021,0x00000090,0x00000035,0x0000004d,0x0000004d, + 0x0000004d,0x00060021,0x00000096,0x00000012,0x00000013,0x0000004d,0x0000004d,0x00050021, + 0x0000009c,0x0000008b,0x0000004d,0x0000004d,0x00040021,0x000000a1,0x00000035,0x0000004d, + 0x00040015,0x000000ab,0x00000020,0x00000000,0x0004002b,0x000000ab,0x000000ac,0x00000004, + 0x0004001c,0x000000ad,0x00000035,0x000000ac,0x0004001c,0x000000ae,0x00000006,0x000000ac, + 0x0005001e,0x000000af,0x000000ad,0x000000ae,0x00000035,0x00050021,0x000000b0,0x000000af, + 0x00000013,0x0000004d,0x00060021,0x000000b5,0x00000006,0x00000013,0x00000013,0x00000007, + 0x00050021,0x000000c0,0x00000006,0x0000004d,0x00000013,0x00080021,0x000000cc,0x00000006, + 0x0000004d,0x00000013,0x00000013,0x00000007,0x00000007,0x00040021,0x000000d7,0x00000002, + 0x0000004d,0x0004002b,0x00000006,0x000000e2,0x00000000,0x0004002b,0x00000006,0x000000e3, + 0x3f800000,0x0019001e,0x00000109,0x00000035,0x00000035,0x00000035,0x00000035,0x00000035, + 0x00000035,0x00000042,0x00000012,0x00000012,0x00000012,0x00000012,0x00000012,0x00000006, + 0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006, + 0x00000006,0x00000006,0x00040020,0x0000010a,0x00000002,0x00000109,0x0004003b,0x0000010a, + 0x0000010b,0x00000002,0x0004002b,0x00000022,0x0000010c,0x00000000,0x00040020,0x0000010d, + 0x00000002,0x00000035,0x0004002b,0x00000022,0x00000112,0x00000001,0x0004002b,0x00000022, + 0x00000117,0x00000004,0x0004002b,0x00000022,0x0000011c,0x00000002,0x0004002b,0x00000022, + 0x00000121,0x00000007,0x00040020,0x00000122,0x00000002,0x00000012,0x0004002b,0x00000022, + 0x00000127,0x00000006,0x00040020,0x00000128,0x00000002,0x00000042,0x0004002b,0x00000022, + 0x0000012d,0x00000010,0x00040020,0x0000012e,0x00000002,0x00000006,0x0004002b,0x00000022, + 0x00000133,0x00000015,0x0004002b,0x00000022,0x00000138,0x00000016,0x00090019,0x0000013d, + 0x00000006,0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x00040020, + 0x0000013e,0x00000000,0x0000013d,0x0004003b,0x0000013e,0x0000013f,0x00000000,0x0004002b, + 0x000000ab,0x00000143,0x00000000,0x0004002b,0x00000022,0x00000145,0x00000013,0x0004003b, + 0x0000013e,0x0000014b,0x00000000,0x0002001a,0x00000151,0x00040020,0x00000152,0x00000000, + 0x00000151,0x0004003b,0x00000152,0x00000153,0x00000000,0x0003001b,0x00000155,0x0000013d, + 0x0004003b,0x0000013e,0x0000015c,0x00000000,0x00090019,0x00000165,0x00000006,0x00000001, + 0x00000000,0x00000000,0x00000000,0x00000002,0x0000000f,0x00040020,0x00000166,0x00000000, + 0x00000165,0x0004003b,0x00000166,0x00000167,0x00000000,0x0004003b,0x0000013e,0x0000016c, + 0x00000000,0x0004002b,0x00000022,0x00000173,0x00000014,0x0004003b,0x0000013e,0x00000179, + 0x00000000,0x0004003b,0x00000166,0x00000180,0x00000000,0x00090019,0x00000185,0x000000ab, + 0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x00040020,0x00000186, + 0x00000000,0x00000185,0x0004003b,0x00000186,0x00000187,0x00000000,0x00040017,0x0000018a, + 0x000000ab,0x00000004,0x0004003b,0x0000013e,0x00000190,0x00000000,0x0004003b,0x0000013e, + 0x00000197,0x00000000,0x0004003b,0x0000013e,0x0000019f,0x00000000,0x0005002c,0x00000035, + 0x000001a1,0x0000010c,0x0000010c,0x00090019,0x000001ab,0x00000006,0x00000001,0x00000000, + 0x00000000,0x00000000,0x00000002,0x00000004,0x00040020,0x000001ac,0x00000000,0x000001ab, + 0x0004003b,0x000001ac,0x000001ad,0x00000000,0x0004002b,0x00000006,0x000001b1,0x3e800000, + 0x0004002b,0x00000006,0x000001b2,0x3f400000,0x0004002b,0x00000006,0x000001b4,0x42c80000, + 0x0004002b,0x00000006,0x000001c0,0x3f000000,0x0004002b,0x00000006,0x000001cc,0x45700000, + 0x0004002b,0x00000006,0x000001cd,0x45070000,0x0005002c,0x00000012,0x000001ce,0x000001cc, + 0x000001cd,0x0004002b,0x000000ab,0x000001f0,0x00000001,0x0005002c,0x00000012,0x00000222, + 0x000001c0,0x000001c0,0x00040017,0x00000236,0x000000ab,0x00000002,0x00040017,0x0000023a, + 0x0000008b,0x00000002,0x00040020,0x0000026d,0x00000007,0x000000af,0x0005002c,0x00000035, + 0x00000278,0x00000112,0x0000010c,0x0005002c,0x00000035,0x0000027a,0x0000010c,0x00000112, + 0x0004002b,0x00000022,0x0000027c,0x00000003,0x0005002c,0x00000035,0x0000027d,0x00000112, + 0x00000112,0x0004002b,0x00000006,0x000002a2,0x477fe000,0x00040020,0x000002be,0x00000007, + 0x0000008b,0x00030029,0x0000008b,0x000002c0,0x0004002b,0x00000006,0x000002e4,0x3a1fe868, + 0x0004002b,0x00000006,0x000002f4,0x00800000,0x0004002b,0x00000006,0x00000306,0x3765d90d, + 0x0004002b,0x00000006,0x00000357,0x41200000,0x0004002b,0x00000022,0x0000036b,0xffffffff, + 0x0004002b,0x00000006,0x000003a1,0x7f7fffff,0x0004002b,0x00000022,0x000003aa,0x00000009, + 0x0004002b,0x000000ab,0x000003ad,0x00000009,0x0004001c,0x000003ae,0x00000035,0x000003ad, + 0x0005002c,0x00000035,0x000003af,0x0000036b,0x0000036b,0x0005002c,0x00000035,0x000003b0, + 0x0000010c,0x0000036b,0x0005002c,0x00000035,0x000003b1,0x00000112,0x0000036b,0x0005002c, + 0x00000035,0x000003b2,0x0000036b,0x0000010c,0x0005002c,0x00000035,0x000003b3,0x0000036b, + 0x00000112,0x000c002c,0x000003ae,0x000003b4,0x000001a1,0x000003af,0x000003b0,0x000003b1, + 0x000003b2,0x00000278,0x000003b3,0x0000027a,0x0000027d,0x00040020,0x000003ba,0x00000007, + 0x000003ae,0x0004001c,0x000003c0,0x00000006,0x000003ad,0x00040020,0x000003c1,0x00000007, + 0x000003c0,0x00040020,0x000003dc,0x00000007,0x000000ab,0x0004002b,0x00000006,0x000003f4, + 0x3f666666,0x0003002a,0x0000008b,0x0000041c,0x0004001c,0x0000042c,0x000000ab,0x000000ac, + 0x0004002b,0x000000ab,0x0000042d,0x00000017,0x0004002b,0x000000ab,0x0000042e,0x0000002d, + 0x0004002b,0x000000ab,0x0000042f,0x000000d1,0x0004002b,0x000000ab,0x00000430,0x000001a1, + 0x0007002c,0x0000042c,0x00000431,0x0000042d,0x0000042e,0x0000042f,0x00000430,0x00040020, + 0x00000433,0x00000007,0x0000042c,0x0004002b,0x000000ab,0x000004f7,0x00000002,0x0004002b, + 0x000000ab,0x000004fa,0x00000003,0x0004002b,0x00000006,0x00000506,0x3c23d70a,0x00040017, + 0x00000511,0x000000ab,0x00000003,0x00040020,0x00000512,0x00000001,0x00000511,0x0004003b, + 0x00000512,0x00000513,0x00000001,0x0004002b,0x00000006,0x00000519,0x387fda40,0x0004002b, + 0x00000006,0x0000051a,0x37801002,0x0004003b,0x00000152,0x0000051b,0x00000000,0x0004002b, + 0x00000006,0x0000051c,0x3d800000,0x0004002b,0x00000006,0x0000051d,0x3d3d70a4,0x0004002b, + 0x00000006,0x0000051e,0x3e400000,0x0004002b,0x00000006,0x0000051f,0x40000000,0x0004002b, + 0x00000006,0x00000520,0x461c4000,0x0004002b,0x000000ab,0x00000521,0x00000008,0x0006002c, + 0x00000511,0x00000522,0x00000521,0x00000521,0x000001f0,0x00050036,0x00000002,0x00000004, + 0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x0000004d,0x00000517,0x00000007, + 0x0004003d,0x00000511,0x00000514,0x00000513,0x0007004f,0x00000236,0x00000515,0x00000514, + 0x00000514,0x00000000,0x00000001,0x0004007c,0x00000035,0x00000516,0x00000515,0x0003003e, + 0x00000517,0x00000516,0x00050039,0x00000002,0x00000518,0x000000d9,0x00000517,0x000100fd, + 0x00010038,0x00050036,0x00000006,0x0000000c,0x00000000,0x00000008,0x00030037,0x00000007, + 0x00000009,0x00030037,0x00000007,0x0000000a,0x00030037,0x00000007,0x0000000b,0x000200f8, + 0x0000000d,0x0004003d,0x00000006,0x000000db,0x00000009,0x0004003d,0x00000006,0x000000dc, + 0x0000000a,0x0004003d,0x00000006,0x000000dd,0x0000000b,0x0008000c,0x00000006,0x000000de, + 0x00000001,0x0000002e,0x000000db,0x000000dc,0x000000dd,0x000200fe,0x000000de,0x00010038, + 0x00050036,0x00000006,0x00000010,0x00000000,0x0000000e,0x00030037,0x00000007,0x0000000f, + 0x000200f8,0x00000011,0x0004003d,0x00000006,0x000000e1,0x0000000f,0x0008000c,0x00000006, + 0x000000e4,0x00000001,0x0000002b,0x000000e1,0x000000e2,0x000000e3,0x000200fe,0x000000e4, + 0x00010038,0x00050036,0x00000012,0x00000016,0x00000000,0x00000014,0x00030037,0x00000013, + 0x00000015,0x000200f8,0x00000017,0x0004003d,0x00000012,0x000000e7,0x00000015,0x0006000c, + 0x00000012,0x000000e8,0x00000001,0x0000000a,0x000000e7,0x000200fe,0x000000e8,0x00010038, + 0x00050036,0x00000006,0x0000001b,0x00000000,0x00000018,0x00030037,0x00000007,0x00000019, + 0x00030037,0x00000007,0x0000001a,0x000200f8,0x0000001c,0x0004003d,0x00000006,0x000000eb, + 0x00000019,0x0004003d,0x00000006,0x000000ec,0x0000001a,0x0007000c,0x00000006,0x000000ed, + 0x00000001,0x00000025,0x000000eb,0x000000ec,0x000200fe,0x000000ed,0x00010038,0x00050036, + 0x00000012,0x00000020,0x00000000,0x0000001d,0x00030037,0x00000013,0x0000001e,0x00030037, + 0x00000013,0x0000001f,0x000200f8,0x00000021,0x0004003d,0x00000012,0x000000f0,0x0000001e, + 0x0004003d,0x00000012,0x000000f1,0x0000001f,0x0007000c,0x00000012,0x000000f2,0x00000001, + 0x00000025,0x000000f0,0x000000f1,0x000200fe,0x000000f2,0x00010038,0x00050036,0x00000022, + 0x00000027,0x00000000,0x00000024,0x00030037,0x00000023,0x00000025,0x00030037,0x00000023, + 0x00000026,0x000200f8,0x00000028,0x0004003d,0x00000022,0x000000f5,0x00000025,0x0004003d, + 0x00000022,0x000000f6,0x00000026,0x0007000c,0x00000022,0x000000f7,0x00000001,0x00000027, + 0x000000f5,0x000000f6,0x000200fe,0x000000f7,0x00010038,0x00050036,0x00000006,0x0000002b, + 0x00000000,0x00000018,0x00030037,0x00000007,0x00000029,0x00030037,0x00000007,0x0000002a, + 0x000200f8,0x0000002c,0x0004003d,0x00000006,0x000000fa,0x00000029,0x0004003d,0x00000006, + 0x000000fb,0x0000002a,0x0007000c,0x00000006,0x000000fc,0x00000001,0x00000028,0x000000fa, + 0x000000fb,0x000200fe,0x000000fc,0x00010038,0x00050036,0x00000012,0x0000002f,0x00000000, + 0x0000001d,0x00030037,0x00000013,0x0000002d,0x00030037,0x00000013,0x0000002e,0x000200f8, + 0x00000030,0x0004003d,0x00000012,0x000000ff,0x0000002d,0x0004003d,0x00000012,0x00000100, + 0x0000002e,0x0007000c,0x00000012,0x00000101,0x00000001,0x00000028,0x000000ff,0x00000100, + 0x000200fe,0x00000101,0x00010038,0x00050036,0x00000022,0x00000033,0x00000000,0x00000024, + 0x00030037,0x00000023,0x00000031,0x00030037,0x00000023,0x00000032,0x000200f8,0x00000034, + 0x0004003d,0x00000022,0x00000104,0x00000031,0x0004003d,0x00000022,0x00000105,0x00000032, + 0x0007000c,0x00000022,0x00000106,0x00000001,0x0000002a,0x00000104,0x00000105,0x000200fe, + 0x00000106,0x00010038,0x00050036,0x00000035,0x00000037,0x00000000,0x00000036,0x000200f8, + 0x00000038,0x00050041,0x0000010d,0x0000010e,0x0000010b,0x0000010c,0x0004003d,0x00000035, + 0x0000010f,0x0000010e,0x000200fe,0x0000010f,0x00010038,0x00050036,0x00000035,0x00000039, + 0x00000000,0x00000036,0x000200f8,0x0000003a,0x00050041,0x0000010d,0x00000113,0x0000010b, + 0x00000112,0x0004003d,0x00000035,0x00000114,0x00000113,0x000200fe,0x00000114,0x00010038, + 0x00050036,0x00000035,0x0000003b,0x00000000,0x00000036,0x000200f8,0x0000003c,0x00050041, + 0x0000010d,0x00000118,0x0000010b,0x00000117,0x0004003d,0x00000035,0x00000119,0x00000118, + 0x000200fe,0x00000119,0x00010038,0x00050036,0x00000035,0x0000003d,0x00000000,0x00000036, + 0x000200f8,0x0000003e,0x00050041,0x0000010d,0x0000011d,0x0000010b,0x0000011c,0x0004003d, + 0x00000035,0x0000011e,0x0000011d,0x000200fe,0x0000011e,0x00010038,0x00050036,0x00000012, + 0x00000040,0x00000000,0x0000003f,0x000200f8,0x00000041,0x00050041,0x00000122,0x00000123, + 0x0000010b,0x00000121,0x0004003d,0x00000012,0x00000124,0x00000123,0x000200fe,0x00000124, + 0x00010038,0x00050036,0x00000042,0x00000044,0x00000000,0x00000043,0x000200f8,0x00000045, + 0x00050041,0x00000128,0x00000129,0x0000010b,0x00000127,0x0004003d,0x00000042,0x0000012a, + 0x00000129,0x000200fe,0x0000012a,0x00010038,0x00050036,0x00000006,0x00000047,0x00000000, + 0x00000046,0x000200f8,0x00000048,0x00050041,0x0000012e,0x0000012f,0x0000010b,0x0000012d, + 0x0004003d,0x00000006,0x00000130,0x0000012f,0x000200fe,0x00000130,0x00010038,0x00050036, + 0x00000006,0x00000049,0x00000000,0x00000046,0x000200f8,0x0000004a,0x00050041,0x0000012e, + 0x00000134,0x0000010b,0x00000133,0x0004003d,0x00000006,0x00000135,0x00000134,0x000200fe, + 0x00000135,0x00010038,0x00050036,0x00000006,0x0000004b,0x00000000,0x00000046,0x000200f8, + 0x0000004c,0x00050041,0x0000012e,0x00000139,0x0000010b,0x00000138,0x0004003d,0x00000006, + 0x0000013a,0x00000139,0x000200fe,0x0000013a,0x00010038,0x00050036,0x00000006,0x00000050, + 0x00000000,0x0000004e,0x00030037,0x0000004d,0x0000004f,0x000200f8,0x00000051,0x0004003d, + 0x0000013d,0x00000140,0x0000013f,0x0004003d,0x00000035,0x00000141,0x0000004f,0x0007005f, + 0x00000042,0x00000142,0x00000140,0x00000141,0x00000002,0x0000010c,0x00050051,0x00000006, + 0x00000144,0x00000142,0x00000000,0x00050041,0x0000012e,0x00000146,0x0000010b,0x00000145, + 0x0004003d,0x00000006,0x00000147,0x00000146,0x00050085,0x00000006,0x00000148,0x00000144, + 0x00000147,0x000200fe,0x00000148,0x00010038,0x00050036,0x00000035,0x00000052,0x00000000, + 0x00000036,0x000200f8,0x00000053,0x0004003d,0x0000013d,0x0000014c,0x0000014b,0x00050067, + 0x00000035,0x0000014d,0x0000014c,0x0000010c,0x000200fe,0x0000014d,0x00010038,0x00050036, + 0x00000006,0x00000056,0x00000000,0x00000054,0x00030037,0x00000013,0x00000055,0x000200f8, + 0x00000057,0x0004003d,0x0000013d,0x00000150,0x0000014b,0x0004003d,0x00000151,0x00000154, + 0x00000153,0x00050056,0x00000155,0x00000156,0x00000150,0x00000154,0x0004003d,0x00000012, + 0x00000157,0x00000055,0x00070058,0x00000042,0x00000158,0x00000156,0x00000157,0x00000002, + 0x000000e2,0x00050051,0x00000006,0x00000159,0x00000158,0x00000000,0x000200fe,0x00000159, + 0x00010038,0x00050036,0x00000006,0x00000059,0x00000000,0x00000054,0x00030037,0x00000013, + 0x00000058,0x000200f8,0x0000005a,0x0004003d,0x0000013d,0x0000015d,0x0000015c,0x0004003d, + 0x00000151,0x0000015e,0x00000153,0x00050056,0x00000155,0x0000015f,0x0000015d,0x0000015e, + 0x0004003d,0x00000012,0x00000160,0x00000058,0x00070058,0x00000042,0x00000161,0x0000015f, + 0x00000160,0x00000002,0x000000e2,0x00050051,0x00000006,0x00000162,0x00000161,0x00000000, + 0x000200fe,0x00000162,0x00010038,0x00050036,0x00000002,0x0000005e,0x00000000,0x0000005b, + 0x00030037,0x0000004d,0x0000005c,0x00030037,0x00000007,0x0000005d,0x000200f8,0x0000005f, + 0x0004003d,0x00000165,0x00000168,0x00000167,0x0004003d,0x00000035,0x00000169,0x0000005c, + 0x0004003d,0x00000006,0x0000016a,0x0000005d,0x00070050,0x00000042,0x0000016b,0x0000016a, + 0x000000e2,0x000000e2,0x000000e2,0x00040063,0x00000168,0x00000169,0x0000016b,0x000100fd, + 0x00010038,0x00050036,0x00000006,0x00000061,0x00000000,0x00000054,0x00030037,0x00000013, + 0x00000060,0x000200f8,0x00000062,0x0004003d,0x0000013d,0x0000016d,0x0000016c,0x0004003d, + 0x00000151,0x0000016e,0x00000153,0x00050056,0x00000155,0x0000016f,0x0000016d,0x0000016e, + 0x0004003d,0x00000012,0x00000170,0x00000060,0x00070058,0x00000042,0x00000171,0x0000016f, + 0x00000170,0x00000002,0x000000e2,0x00050051,0x00000006,0x00000172,0x00000171,0x00000000, + 0x00050041,0x0000012e,0x00000174,0x0000010b,0x00000173,0x0004003d,0x00000006,0x00000175, + 0x00000174,0x00050085,0x00000006,0x00000176,0x00000172,0x00000175,0x000200fe,0x00000176, + 0x00010038,0x00050036,0x00000006,0x00000064,0x00000000,0x0000004e,0x00030037,0x0000004d, + 0x00000063,0x000200f8,0x00000065,0x0004003d,0x0000013d,0x0000017a,0x00000179,0x0004003d, + 0x00000035,0x0000017b,0x00000063,0x0007005f,0x00000042,0x0000017c,0x0000017a,0x0000017b, + 0x00000002,0x0000010c,0x00050051,0x00000006,0x0000017d,0x0000017c,0x00000000,0x000200fe, + 0x0000017d,0x00010038,0x00050036,0x00000002,0x00000068,0x00000000,0x0000005b,0x00030037, + 0x0000004d,0x00000066,0x00030037,0x00000007,0x00000067,0x000200f8,0x00000069,0x0004003d, + 0x00000165,0x00000181,0x00000180,0x0004003d,0x00000035,0x00000182,0x00000066,0x0004003d, + 0x00000006,0x00000183,0x00000067,0x00070050,0x00000042,0x00000184,0x00000183,0x000000e2, + 0x000000e2,0x000000e2,0x00040063,0x00000181,0x00000182,0x00000184,0x000100fd,0x00010038, + 0x00050036,0x00000006,0x0000006b,0x00000000,0x0000004e,0x00030037,0x0000004d,0x0000006a, + 0x000200f8,0x0000006c,0x0004003d,0x00000185,0x00000188,0x00000187,0x0004003d,0x00000035, + 0x00000189,0x0000006a,0x0007005f,0x0000018a,0x0000018b,0x00000188,0x00000189,0x00000002, + 0x0000010c,0x00050051,0x000000ab,0x0000018c,0x0000018b,0x00000000,0x0004007c,0x00000006, + 0x0000018d,0x0000018c,0x000200fe,0x0000018d,0x00010038,0x00050036,0x00000012,0x0000006f, + 0x00000000,0x0000006d,0x00030037,0x0000004d,0x0000006e,0x000200f8,0x00000070,0x0004003d, + 0x0000013d,0x00000191,0x00000190,0x0004003d,0x00000035,0x00000192,0x0000006e,0x0007005f, + 0x00000042,0x00000193,0x00000191,0x00000192,0x00000002,0x0000010c,0x0007004f,0x00000012, + 0x00000194,0x00000193,0x00000193,0x00000000,0x00000001,0x000200fe,0x00000194,0x00010038, + 0x00050036,0x00000006,0x00000072,0x00000000,0x0000004e,0x00030037,0x0000004d,0x00000071, + 0x000200f8,0x00000073,0x0004003d,0x0000013d,0x00000198,0x00000197,0x0004003d,0x00000035, + 0x00000199,0x00000071,0x0007005f,0x00000042,0x0000019a,0x00000198,0x00000199,0x00000002, + 0x0000010c,0x00050051,0x00000006,0x0000019b,0x0000019a,0x00000000,0x000200fe,0x0000019b, + 0x00010038,0x00050036,0x00000006,0x00000074,0x00000000,0x00000046,0x000200f8,0x00000075, + 0x0004003b,0x00000007,0x0000019e,0x00000007,0x0004003d,0x0000013d,0x000001a0,0x0000019f, + 0x0007005f,0x00000042,0x000001a2,0x000001a0,0x000001a1,0x00000002,0x0000010c,0x00050051, + 0x00000006,0x000001a3,0x000001a2,0x00000000,0x0003003e,0x0000019e,0x000001a3,0x0004003d, + 0x00000006,0x000001a4,0x0000019e,0x000500b4,0x0000008b,0x000001a5,0x000001a4,0x000000e2, + 0x000300f7,0x000001a7,0x00000000,0x000400fa,0x000001a5,0x000001a6,0x000001a7,0x000200f8, + 0x000001a6,0x0003003e,0x0000019e,0x000000e3,0x000200f9,0x000001a7,0x000200f8,0x000001a7, + 0x0004003d,0x00000006,0x000001a8,0x0000019e,0x000200fe,0x000001a8,0x00010038,0x00050036, + 0x00000002,0x0000007a,0x00000000,0x00000077,0x00030037,0x0000004d,0x00000078,0x00030037, + 0x00000076,0x00000079,0x000200f8,0x0000007b,0x0004003d,0x000001ab,0x000001ae,0x000001ad, + 0x0004003d,0x00000035,0x000001af,0x00000078,0x0004003d,0x00000042,0x000001b0,0x00000079, + 0x00040063,0x000001ae,0x000001af,0x000001b0,0x000100fd,0x00010038,0x00050036,0x00000006, + 0x0000007d,0x00000000,0x0000000e,0x00030037,0x00000007,0x0000007c,0x000200f8,0x0000007e, + 0x0004003b,0x00000007,0x000001b6,0x00000007,0x0004003b,0x00000007,0x000001b8,0x00000007, + 0x0004003b,0x00000007,0x000001b9,0x00000007,0x0004003b,0x00000007,0x000001ba,0x00000007, + 0x0004003d,0x00000006,0x000001b3,0x0000007c,0x00050088,0x00000006,0x000001b5,0x000001b3, + 0x000001b4,0x0003003e,0x000001b6,0x000001b5,0x00050039,0x00000006,0x000001b7,0x00000010, + 0x000001b6,0x0003003e,0x000001b8,0x000001b1,0x0003003e,0x000001b9,0x000001b2,0x0003003e, + 0x000001ba,0x000001b7,0x00070039,0x00000006,0x000001bb,0x0000000c,0x000001b8,0x000001b9, + 0x000001ba,0x000200fe,0x000001bb,0x00010038,0x00050036,0x00000035,0x0000007f,0x00000000, + 0x00000036,0x000200f8,0x00000080,0x00040039,0x00000035,0x000001be,0x00000037,0x0004006f, + 0x00000012,0x000001bf,0x000001be,0x0005008e,0x00000012,0x000001c1,0x000001bf,0x000001c0, + 0x0004006e,0x00000035,0x000001c2,0x000001c1,0x000200fe,0x000001c2,0x00010038,0x00050036, + 0x00000035,0x00000081,0x00000000,0x00000036,0x000200f8,0x00000082,0x00040039,0x00000035, + 0x000001c5,0x0000003b,0x0004006f,0x00000012,0x000001c6,0x000001c5,0x0005008e,0x00000012, + 0x000001c7,0x000001c6,0x000001c0,0x0004006e,0x00000035,0x000001c8,0x000001c7,0x000200fe, + 0x000001c8,0x00010038,0x00050036,0x00000006,0x00000084,0x00000000,0x00000054,0x00030037, + 0x00000013,0x00000083,0x000200f8,0x00000085,0x0004003d,0x00000012,0x000001cb,0x00000083, + 0x00050085,0x00000012,0x000001cf,0x000001cb,0x000001ce,0x0006000c,0x00000006,0x000001d0, + 0x00000001,0x00000042,0x000001cf,0x000200fe,0x000001d0,0x00010038,0x00050036,0x00000006, + 0x00000089,0x00000000,0x00000086,0x00030037,0x00000006,0x00000087,0x00030037,0x00000006, + 0x00000088,0x000200f8,0x0000008a,0x0004003b,0x00000007,0x000001d3,0x00000007,0x0004003b, + 0x00000007,0x000001d4,0x00000007,0x0004003b,0x00000007,0x000001d5,0x00000007,0x0004003b, + 0x00000007,0x000001d9,0x00000007,0x0004003b,0x00000007,0x000001dc,0x00000007,0x0004003b, + 0x00000007,0x000001dd,0x00000007,0x0003003e,0x000001d4,0x00000087,0x0003003e,0x000001d5, + 0x00000088,0x00060039,0x00000006,0x000001d6,0x0000002b,0x000001d4,0x000001d5,0x0003003e, + 0x000001d3,0x000001d6,0x0004003d,0x00000006,0x000001d7,0x000001d3,0x000500b7,0x0000008b, + 0x000001d8,0x000001d7,0x000000e2,0x000300f7,0x000001db,0x00000000,0x000400fa,0x000001d8, + 0x000001da,0x000001e1,0x000200f8,0x000001da,0x0003003e,0x000001dc,0x00000087,0x0003003e, + 0x000001dd,0x00000088,0x00060039,0x00000006,0x000001de,0x0000001b,0x000001dc,0x000001dd, + 0x0004003d,0x00000006,0x000001df,0x000001d3,0x00050088,0x00000006,0x000001e0,0x000001de, + 0x000001df,0x0003003e,0x000001d9,0x000001e0,0x000200f9,0x000001db,0x000200f8,0x000001e1, + 0x0003003e,0x000001d9,0x000000e2,0x000200f9,0x000001db,0x000200f8,0x000001db,0x0004003d, + 0x00000006,0x000001e2,0x000001d9,0x000200fe,0x000001e2,0x00010038,0x00050036,0x0000008b, + 0x0000008e,0x00000000,0x0000008c,0x00030037,0x00000013,0x0000008d,0x000200f8,0x0000008f, + 0x00050041,0x00000007,0x000001e5,0x0000008d,0x00000143,0x0004003d,0x00000006,0x000001e6, + 0x000001e5,0x000500be,0x0000008b,0x000001e7,0x000001e6,0x000000e2,0x000300f7,0x000001e9, + 0x00000000,0x000400fa,0x000001e7,0x000001e8,0x000001e9,0x000200f8,0x000001e8,0x00050041, + 0x00000007,0x000001ea,0x0000008d,0x00000143,0x0004003d,0x00000006,0x000001eb,0x000001ea, + 0x000500bc,0x0000008b,0x000001ec,0x000001eb,0x000000e3,0x000200f9,0x000001e9,0x000200f8, + 0x000001e9,0x000700f5,0x0000008b,0x000001ed,0x000001e7,0x0000008f,0x000001ec,0x000001e8, + 0x000300f7,0x000001ef,0x00000000,0x000400fa,0x000001ed,0x000001ee,0x000001ef,0x000200f8, + 0x000001ee,0x00050041,0x00000007,0x000001f1,0x0000008d,0x000001f0,0x0004003d,0x00000006, + 0x000001f2,0x000001f1,0x000500be,0x0000008b,0x000001f3,0x000001f2,0x000000e2,0x000300f7, + 0x000001f5,0x00000000,0x000400fa,0x000001f3,0x000001f4,0x000001f5,0x000200f8,0x000001f4, + 0x00050041,0x00000007,0x000001f6,0x0000008d,0x000001f0,0x0004003d,0x00000006,0x000001f7, + 0x000001f6,0x000500bc,0x0000008b,0x000001f8,0x000001f7,0x000000e3,0x000200f9,0x000001f5, + 0x000200f8,0x000001f5,0x000700f5,0x0000008b,0x000001f9,0x000001f3,0x000001ee,0x000001f8, + 0x000001f4,0x000200f9,0x000001ef,0x000200f8,0x000001ef,0x000700f5,0x0000008b,0x000001fa, + 0x000001ed,0x000001e9,0x000001f9,0x000001f5,0x000200fe,0x000001fa,0x00010038,0x00050036, + 0x00000035,0x00000094,0x00000000,0x00000090,0x00030037,0x0000004d,0x00000091,0x00030037, + 0x0000004d,0x00000092,0x00030037,0x0000004d,0x00000093,0x000200f8,0x00000095,0x0004003b, + 0x0000004d,0x000001fd,0x00000007,0x0004003b,0x00000023,0x00000204,0x00000007,0x0004003b, + 0x00000023,0x00000207,0x00000007,0x0004003b,0x00000023,0x00000209,0x00000007,0x0004003b, + 0x00000023,0x0000020a,0x00000007,0x0004003b,0x00000023,0x00000210,0x00000007,0x0004003b, + 0x00000023,0x00000213,0x00000007,0x0004003b,0x00000023,0x00000215,0x00000007,0x0004003b, + 0x00000023,0x00000216,0x00000007,0x0004003d,0x00000035,0x000001fe,0x00000091,0x0004003d, + 0x00000035,0x000001ff,0x00000092,0x00050080,0x00000035,0x00000200,0x000001fe,0x000001ff, + 0x0003003e,0x000001fd,0x00000200,0x00050041,0x00000023,0x00000201,0x00000093,0x00000143, + 0x0004003d,0x00000022,0x00000202,0x00000201,0x00050082,0x00000022,0x00000203,0x00000202, + 0x00000112,0x00050041,0x00000023,0x00000205,0x000001fd,0x00000143,0x0004003d,0x00000022, + 0x00000206,0x00000205,0x0003003e,0x00000204,0x00000206,0x0003003e,0x00000207,0x00000203, + 0x00060039,0x00000022,0x00000208,0x00000027,0x00000204,0x00000207,0x0003003e,0x00000209, + 0x0000010c,0x0003003e,0x0000020a,0x00000208,0x00060039,0x00000022,0x0000020b,0x00000033, + 0x00000209,0x0000020a,0x00050041,0x00000023,0x0000020c,0x000001fd,0x00000143,0x0003003e, + 0x0000020c,0x0000020b,0x00050041,0x00000023,0x0000020d,0x00000093,0x000001f0,0x0004003d, + 0x00000022,0x0000020e,0x0000020d,0x00050082,0x00000022,0x0000020f,0x0000020e,0x00000112, + 0x00050041,0x00000023,0x00000211,0x000001fd,0x000001f0,0x0004003d,0x00000022,0x00000212, + 0x00000211,0x0003003e,0x00000210,0x00000212,0x0003003e,0x00000213,0x0000020f,0x00060039, + 0x00000022,0x00000214,0x00000027,0x00000210,0x00000213,0x0003003e,0x00000215,0x0000010c, + 0x0003003e,0x00000216,0x00000214,0x00060039,0x00000022,0x00000217,0x00000033,0x00000215, + 0x00000216,0x00050041,0x00000023,0x00000218,0x000001fd,0x000001f0,0x0003003e,0x00000218, + 0x00000217,0x0004003d,0x00000035,0x00000219,0x000001fd,0x000200fe,0x00000219,0x00010038, + 0x00050036,0x00000012,0x0000009a,0x00000000,0x00000096,0x00030037,0x00000013,0x00000097, + 0x00030037,0x0000004d,0x00000098,0x00030037,0x0000004d,0x00000099,0x000200f8,0x0000009b, + 0x0004003b,0x00000013,0x0000021c,0x00000007,0x0004003b,0x00000013,0x00000221,0x00000007, + 0x0004003b,0x00000013,0x00000226,0x00000007,0x0004003b,0x00000013,0x00000228,0x00000007, + 0x0004003b,0x00000013,0x0000022a,0x00000007,0x0004003b,0x00000013,0x0000022b,0x00000007, + 0x0004003b,0x00000013,0x0000022d,0x00000007,0x0004003d,0x00000012,0x0000021d,0x00000097, + 0x0004003d,0x00000035,0x0000021e,0x00000098,0x0004006f,0x00000012,0x0000021f,0x0000021e, + 0x00050085,0x00000012,0x00000220,0x0000021d,0x0000021f,0x0003003e,0x0000021c,0x00000220, + 0x0004003d,0x00000035,0x00000223,0x00000098,0x0004006f,0x00000012,0x00000224,0x00000223, + 0x00050083,0x00000012,0x00000225,0x00000224,0x00000222,0x0004003d,0x00000012,0x00000227, + 0x0000021c,0x0003003e,0x00000226,0x00000227,0x0003003e,0x00000228,0x00000225,0x00060039, + 0x00000012,0x00000229,0x00000020,0x00000226,0x00000228,0x0003003e,0x0000022a,0x00000222, + 0x0003003e,0x0000022b,0x00000229,0x00060039,0x00000012,0x0000022c,0x0000002f,0x0000022a, + 0x0000022b,0x0003003e,0x00000221,0x0000022c,0x0004003d,0x00000012,0x0000022e,0x00000221, + 0x0004003d,0x00000035,0x0000022f,0x00000099,0x0004006f,0x00000012,0x00000230,0x0000022f, + 0x00050088,0x00000012,0x00000231,0x0000022e,0x00000230,0x0003003e,0x0000022d,0x00000231, + 0x0004003d,0x00000012,0x00000232,0x0000022d,0x000200fe,0x00000232,0x00010038,0x00050036, + 0x0000008b,0x0000009f,0x00000000,0x0000009c,0x00030037,0x0000004d,0x0000009d,0x00030037, + 0x0000004d,0x0000009e,0x000200f8,0x000000a0,0x0004003d,0x00000035,0x00000235,0x0000009d, + 0x0004007c,0x00000236,0x00000237,0x00000235,0x0004003d,0x00000035,0x00000238,0x0000009e, + 0x0004007c,0x00000236,0x00000239,0x00000238,0x000500b0,0x0000023a,0x0000023b,0x00000237, + 0x00000239,0x0004009b,0x0000008b,0x0000023c,0x0000023b,0x000200fe,0x0000023c,0x00010038, + 0x00050036,0x00000035,0x000000a3,0x00000000,0x000000a1,0x00030037,0x0000004d,0x000000a2, + 0x000200f8,0x000000a4,0x0004003b,0x00000013,0x0000023f,0x00000007,0x0004003b,0x00000013, + 0x00000246,0x00000007,0x0004003b,0x0000004d,0x0000024e,0x00000007,0x0004003d,0x00000035, + 0x00000240,0x000000a2,0x0004006f,0x00000012,0x00000241,0x00000240,0x00050050,0x00000012, + 0x00000242,0x000001c0,0x000001c0,0x00050081,0x00000012,0x00000243,0x00000241,0x00000242, + 0x00040039,0x00000012,0x00000244,0x00000040,0x00050083,0x00000012,0x00000245,0x00000243, + 0x00000244,0x0003003e,0x0000023f,0x00000245,0x0004003d,0x00000012,0x00000247,0x0000023f, + 0x00040039,0x00000035,0x00000248,0x00000037,0x0004006f,0x00000012,0x00000249,0x00000248, + 0x00050088,0x00000012,0x0000024a,0x00000247,0x00000249,0x00040039,0x00000035,0x0000024b, + 0x0000003d,0x0004006f,0x00000012,0x0000024c,0x0000024b,0x00050085,0x00000012,0x0000024d, + 0x0000024a,0x0000024c,0x0003003e,0x00000246,0x0000024d,0x0004003d,0x00000012,0x0000024f, + 0x00000246,0x0006000c,0x00000012,0x00000250,0x00000001,0x00000008,0x0000024f,0x0004006e, + 0x00000035,0x00000251,0x00000250,0x0003003e,0x0000024e,0x00000251,0x0004003d,0x00000035, + 0x00000252,0x0000024e,0x000200fe,0x00000252,0x00010038,0x00050036,0x00000006,0x000000a6, + 0x00000000,0x0000000e,0x00030037,0x00000007,0x000000a5,0x000200f8,0x000000a7,0x0004003b, + 0x00000076,0x00000255,0x00000007,0x00040039,0x00000042,0x00000256,0x00000044,0x0003003e, + 0x00000255,0x00000256,0x00050041,0x00000007,0x00000257,0x00000255,0x000001f0,0x0004003d, + 0x00000006,0x00000258,0x00000257,0x0004003d,0x00000006,0x00000259,0x000000a5,0x00050041, + 0x00000007,0x0000025a,0x00000255,0x00000143,0x0004003d,0x00000006,0x0000025b,0x0000025a, + 0x00050083,0x00000006,0x0000025c,0x00000259,0x0000025b,0x00050088,0x00000006,0x0000025d, + 0x00000258,0x0000025c,0x000200fe,0x0000025d,0x00010038,0x00050036,0x00000006,0x000000a9, + 0x00000000,0x0000000e,0x00030037,0x00000007,0x000000a8,0x000200f8,0x000000aa,0x0004003b, + 0x00000007,0x00000260,0x00000007,0x0004003d,0x00000006,0x00000261,0x000000a8,0x0003003e, + 0x00000260,0x00000261,0x00050039,0x00000006,0x00000262,0x000000a6,0x00000260,0x00040039, + 0x00000006,0x00000263,0x00000047,0x00050085,0x00000006,0x00000264,0x00000262,0x00000263, + 0x000200fe,0x00000264,0x00010038,0x00050036,0x000000af,0x000000b3,0x00000000,0x000000b0, + 0x00030037,0x00000013,0x000000b1,0x00030037,0x0000004d,0x000000b2,0x000200f8,0x000000b4, + 0x0004003b,0x00000013,0x00000267,0x00000007,0x0004003b,0x0000026d,0x0000026e,0x00000007, + 0x0004003b,0x00000013,0x00000273,0x00000007,0x0004003b,0x00000013,0x00000274,0x00000007, + 0x0004003d,0x00000012,0x00000268,0x000000b1,0x0004003d,0x00000035,0x00000269,0x000000b2, + 0x0004006f,0x00000012,0x0000026a,0x00000269,0x00050085,0x00000012,0x0000026b,0x00000268, + 0x0000026a,0x00050083,0x00000012,0x0000026c,0x0000026b,0x00000222,0x0003003e,0x00000267, + 0x0000026c,0x0004003d,0x00000012,0x0000026f,0x00000267,0x0006000c,0x00000012,0x00000270, + 0x00000001,0x00000008,0x0000026f,0x0004006e,0x00000035,0x00000271,0x00000270,0x00050041, + 0x0000004d,0x00000272,0x0000026e,0x0000011c,0x0003003e,0x00000272,0x00000271,0x0004003d, + 0x00000012,0x00000275,0x00000267,0x0003003e,0x00000274,0x00000275,0x00050039,0x00000012, + 0x00000276,0x00000016,0x00000274,0x0003003e,0x00000273,0x00000276,0x00060041,0x0000004d, + 0x00000277,0x0000026e,0x0000010c,0x0000010c,0x0003003e,0x00000277,0x000001a1,0x00060041, + 0x0000004d,0x00000279,0x0000026e,0x0000010c,0x00000112,0x0003003e,0x00000279,0x00000278, + 0x00060041,0x0000004d,0x0000027b,0x0000026e,0x0000010c,0x0000011c,0x0003003e,0x0000027b, + 0x0000027a,0x00060041,0x0000004d,0x0000027e,0x0000026e,0x0000010c,0x0000027c,0x0003003e, + 0x0000027e,0x0000027d,0x00050041,0x00000007,0x0000027f,0x00000273,0x00000143,0x0004003d, + 0x00000006,0x00000280,0x0000027f,0x00050083,0x00000006,0x00000281,0x000000e3,0x00000280, + 0x00050041,0x00000007,0x00000282,0x00000273,0x000001f0,0x0004003d,0x00000006,0x00000283, + 0x00000282,0x00050083,0x00000006,0x00000284,0x000000e3,0x00000283,0x00050085,0x00000006, + 0x00000285,0x00000281,0x00000284,0x00060041,0x00000007,0x00000286,0x0000026e,0x00000112, + 0x0000010c,0x0003003e,0x00000286,0x00000285,0x00050041,0x00000007,0x00000287,0x00000273, + 0x00000143,0x0004003d,0x00000006,0x00000288,0x00000287,0x00050041,0x00000007,0x00000289, + 0x00000273,0x000001f0,0x0004003d,0x00000006,0x0000028a,0x00000289,0x00050083,0x00000006, + 0x0000028b,0x000000e3,0x0000028a,0x00050085,0x00000006,0x0000028c,0x00000288,0x0000028b, + 0x00060041,0x00000007,0x0000028d,0x0000026e,0x00000112,0x00000112,0x0003003e,0x0000028d, + 0x0000028c,0x00050041,0x00000007,0x0000028e,0x00000273,0x00000143,0x0004003d,0x00000006, + 0x0000028f,0x0000028e,0x00050083,0x00000006,0x00000290,0x000000e3,0x0000028f,0x00050041, + 0x00000007,0x00000291,0x00000273,0x000001f0,0x0004003d,0x00000006,0x00000292,0x00000291, + 0x00050085,0x00000006,0x00000293,0x00000290,0x00000292,0x00060041,0x00000007,0x00000294, + 0x0000026e,0x00000112,0x0000011c,0x0003003e,0x00000294,0x00000293,0x00050041,0x00000007, + 0x00000295,0x00000273,0x00000143,0x0004003d,0x00000006,0x00000296,0x00000295,0x00050041, + 0x00000007,0x00000297,0x00000273,0x000001f0,0x0004003d,0x00000006,0x00000298,0x00000297, + 0x00050085,0x00000006,0x00000299,0x00000296,0x00000298,0x00060041,0x00000007,0x0000029a, + 0x0000026e,0x00000112,0x0000027c,0x0003003e,0x0000029a,0x00000299,0x0004003d,0x000000af, + 0x0000029b,0x0000026e,0x000200fe,0x0000029b,0x00010038,0x00050036,0x00000006,0x000000b9, + 0x00000000,0x000000b5,0x00030037,0x00000013,0x000000b6,0x00030037,0x00000013,0x000000b7, + 0x00030037,0x00000007,0x000000b8,0x000200f8,0x000000ba,0x0004003b,0x00000007,0x0000029e, + 0x00000007,0x0004003b,0x00000007,0x000002a3,0x00000007,0x0004003b,0x00000007,0x000002a4, + 0x00000007,0x0004003b,0x00000007,0x000002a6,0x00000007,0x0004003b,0x00000007,0x000002a7, + 0x00000007,0x0004003b,0x00000013,0x000002aa,0x00000007,0x0004003b,0x00000013,0x000002b2, + 0x00000007,0x0004003b,0x0000026d,0x000002b6,0x00000007,0x0004003b,0x00000013,0x000002b8, + 0x00000007,0x0004003b,0x0000004d,0x000002ba,0x00000007,0x0004003b,0x00000007,0x000002bc, + 0x00000007,0x0004003b,0x00000007,0x000002bd,0x00000007,0x0004003b,0x000002be,0x000002bf, + 0x00000007,0x0004003b,0x00000023,0x000002c1,0x00000007,0x0004003b,0x0000004d,0x000002cb, + 0x00000007,0x0004003b,0x0000004d,0x000002cf,0x00000007,0x0004003b,0x0000004d,0x000002d1, + 0x00000007,0x0004003b,0x0000004d,0x000002d4,0x00000007,0x0004003b,0x0000004d,0x000002d6, + 0x00000007,0x0004003b,0x0000004d,0x000002d9,0x00000007,0x0004003b,0x0000004d,0x000002db, + 0x00000007,0x0004003b,0x00000007,0x000002df,0x00000007,0x0004003b,0x00000007,0x000002e8, + 0x00000007,0x0004003b,0x0000004d,0x000002e9,0x00000007,0x0004003b,0x00000007,0x000002ec, + 0x00000007,0x0004003b,0x00000007,0x000002ee,0x00000007,0x0004003b,0x00000007,0x000002fa, + 0x00000007,0x0004003b,0x00000007,0x000002ff,0x00000007,0x0004003b,0x00000007,0x00000300, + 0x00000007,0x0004003b,0x00000007,0x00000302,0x00000007,0x0004003b,0x00000007,0x00000305, + 0x00000007,0x0004003b,0x00000007,0x0000030e,0x00000007,0x0004003b,0x00000007,0x0000031d, + 0x00000007,0x0004003b,0x00000007,0x00000324,0x00000007,0x0004003d,0x00000006,0x0000029f, + 0x000000b8,0x00040039,0x00000006,0x000002a0,0x00000047,0x00050085,0x00000006,0x000002a1, + 0x0000029f,0x000002a0,0x0003003e,0x000002a3,0x000002a1,0x0003003e,0x000002a4,0x000002a2, + 0x00060039,0x00000006,0x000002a5,0x0000001b,0x000002a3,0x000002a4,0x0003003e,0x0000029e, + 0x000002a5,0x0004003d,0x00000006,0x000002a8,0x0000029e,0x0003003e,0x000002a7,0x000002a8, + 0x00050039,0x00000006,0x000002a9,0x0000007d,0x000002a7,0x0003003e,0x000002a6,0x000002a9, + 0x0004003d,0x00000012,0x000002ab,0x000000b7,0x0003003e,0x000002aa,0x000002ab,0x00050039, + 0x00000006,0x000002ac,0x00000084,0x000002aa,0x0004003d,0x00000006,0x000002ad,0x000002a6, + 0x000500ba,0x0000008b,0x000002ae,0x000002ac,0x000002ad,0x000600a9,0x00000006,0x000002af, + 0x000002ae,0x000000e3,0x000000e2,0x0004003d,0x00000012,0x000002b0,0x000000b7,0x0005008e, + 0x00000012,0x000002b1,0x000002b0,0x000002af,0x0003003e,0x000000b7,0x000002b1,0x0004003d, + 0x00000012,0x000002b3,0x000000b6,0x0004003d,0x00000012,0x000002b4,0x000000b7,0x00050081, + 0x00000012,0x000002b5,0x000002b3,0x000002b4,0x0003003e,0x000002b2,0x000002b5,0x00040039, + 0x00000035,0x000002b7,0x00000037,0x0004003d,0x00000012,0x000002b9,0x000002b2,0x0003003e, + 0x000002b8,0x000002b9,0x0003003e,0x000002ba,0x000002b7,0x00060039,0x000000af,0x000002bb, + 0x000000b3,0x000002b8,0x000002ba,0x0003003e,0x000002b6,0x000002bb,0x0003003e,0x000002bc, + 0x000000e2,0x0003003e,0x000002bd,0x000000e2,0x0003003e,0x000002bf,0x000002c0,0x0003003e, + 0x000002c1,0x0000010c,0x000200f9,0x000002c2,0x000200f8,0x000002c2,0x000400f6,0x000002c4, + 0x000002c5,0x00000000,0x000200f9,0x000002c6,0x000200f8,0x000002c6,0x0004003d,0x00000022, + 0x000002c7,0x000002c1,0x000500b1,0x0000008b,0x000002c8,0x000002c7,0x00000117,0x0004003d, + 0x0000008b,0x000002c9,0x000002bf,0x000500a7,0x0000008b,0x000002ca,0x000002c8,0x000002c9, + 0x000400fa,0x000002ca,0x000002c3,0x000002c4,0x000200f8,0x000002c3,0x0004003d,0x00000022, + 0x000002cc,0x000002c1,0x00060041,0x0000004d,0x000002cd,0x000002b6,0x0000010c,0x000002cc, + 0x0004003d,0x00000035,0x000002ce,0x000002cd,0x0003003e,0x000002cb,0x000002ce,0x00040039, + 0x00000035,0x000002d0,0x00000037,0x00050041,0x0000004d,0x000002d2,0x000002b6,0x0000011c, + 0x0004003d,0x00000035,0x000002d3,0x000002d2,0x0003003e,0x000002d1,0x000002d3,0x0004003d, + 0x00000035,0x000002d5,0x000002cb,0x0003003e,0x000002d4,0x000002d5,0x0003003e,0x000002d6, + 0x000002d0,0x00070039,0x00000035,0x000002d7,0x00000094,0x000002d1,0x000002d4,0x000002d6, + 0x0003003e,0x000002cf,0x000002d7,0x00040039,0x00000035,0x000002d8,0x00000037,0x0004003d, + 0x00000035,0x000002da,0x000002cf,0x0003003e,0x000002d9,0x000002da,0x0003003e,0x000002db, + 0x000002d8,0x00060039,0x0000008b,0x000002dc,0x0000009f,0x000002d9,0x000002db,0x000300f7, + 0x000002de,0x00000000,0x000400fa,0x000002dc,0x000002dd,0x000002de,0x000200f8,0x000002dd, + 0x0004003d,0x00000022,0x000002e0,0x000002c1,0x00060041,0x00000007,0x000002e1,0x000002b6, + 0x00000112,0x000002e0,0x0004003d,0x00000006,0x000002e2,0x000002e1,0x0003003e,0x000002df, + 0x000002e2,0x0004003d,0x00000006,0x000002e3,0x000002df,0x000500ba,0x0000008b,0x000002e5, + 0x000002e3,0x000002e4,0x000300f7,0x000002e7,0x00000000,0x000400fa,0x000002e5,0x000002e6, + 0x000002e7,0x000200f8,0x000002e6,0x0004003d,0x00000035,0x000002ea,0x000002cf,0x0003003e, + 0x000002e9,0x000002ea,0x00050039,0x00000006,0x000002eb,0x0000006b,0x000002e9,0x0003003e, + 0x000002ec,0x000002eb,0x00050039,0x00000006,0x000002ed,0x000000a6,0x000002ec,0x0003003e, + 0x000002e8,0x000002ed,0x0004003d,0x00000006,0x000002ef,0x000000b8,0x0004003d,0x00000006, + 0x000002f0,0x000002e8,0x00050083,0x00000006,0x000002f1,0x000002ef,0x000002f0,0x0003003e, + 0x000002ee,0x000002f1,0x0004003d,0x0000008b,0x000002f2,0x000002bf,0x0004003d,0x00000006, + 0x000002f3,0x000002ee,0x000500ba,0x0000008b,0x000002f5,0x000002f3,0x000002f4,0x000500a7, + 0x0000008b,0x000002f6,0x000002f2,0x000002f5,0x0003003e,0x000002bf,0x000002f6,0x0004003d, + 0x0000008b,0x000002f7,0x000002bf,0x000300f7,0x000002f9,0x00000000,0x000400fa,0x000002f7, + 0x000002f8,0x000002f9,0x000200f8,0x000002f8,0x00040039,0x00000035,0x000002fb,0x00000037, + 0x0004006f,0x00000012,0x000002fc,0x000002fb,0x0005008e,0x00000012,0x000002fd,0x000002fc, + 0x000001c0,0x0006000c,0x00000006,0x000002fe,0x00000001,0x00000042,0x000002fd,0x0003003e, + 0x000002fa,0x000002fe,0x0004003d,0x00000006,0x00000301,0x000000b8,0x0003003e,0x00000300, + 0x00000301,0x0004003d,0x00000006,0x00000303,0x000002e8,0x0003003e,0x00000302,0x00000303, + 0x00060039,0x00000006,0x00000304,0x0000002b,0x00000300,0x00000302,0x0003003e,0x000002ff, + 0x00000304,0x0004003d,0x00000006,0x00000307,0x000002fa,0x00050085,0x00000006,0x00000308, + 0x00000306,0x00000307,0x0004003d,0x00000006,0x00000309,0x000002ff,0x00050085,0x00000006, + 0x0000030a,0x00000308,0x00000309,0x0003003e,0x00000305,0x0000030a,0x0004003d,0x00000006, + 0x0000030b,0x00000305,0x0004003d,0x00000006,0x0000030c,0x000002ee,0x00050088,0x00000006, + 0x0000030d,0x0000030b,0x0000030c,0x0003003e,0x0000030e,0x0000030d,0x00050039,0x00000006, + 0x0000030f,0x00000010,0x0000030e,0x0004003d,0x00000006,0x00000310,0x000002df,0x00050085, + 0x00000006,0x00000311,0x0000030f,0x00000310,0x0004003d,0x00000006,0x00000312,0x000002bc, + 0x00050081,0x00000006,0x00000313,0x00000312,0x00000311,0x0003003e,0x000002bc,0x00000313, + 0x0004003d,0x00000006,0x00000314,0x000002df,0x0004003d,0x00000006,0x00000315,0x000002bd, + 0x00050081,0x00000006,0x00000316,0x00000315,0x00000314,0x0003003e,0x000002bd,0x00000316, + 0x000200f9,0x000002f9,0x000200f8,0x000002f9,0x000200f9,0x000002e7,0x000200f8,0x000002e7, + 0x000200f9,0x000002de,0x000200f8,0x000002de,0x000200f9,0x000002c5,0x000200f8,0x000002c5, + 0x0004003d,0x00000022,0x00000317,0x000002c1,0x00050080,0x00000022,0x00000318,0x00000317, + 0x00000112,0x0003003e,0x000002c1,0x00000318,0x000200f9,0x000002c2,0x000200f8,0x000002c4, + 0x0004003d,0x0000008b,0x00000319,0x000002bf,0x0004003d,0x00000006,0x0000031a,0x000002bd, + 0x000500ba,0x0000008b,0x0000031b,0x0000031a,0x000000e2,0x000500a7,0x0000008b,0x0000031c, + 0x00000319,0x0000031b,0x000300f7,0x0000031f,0x00000000,0x000400fa,0x0000031c,0x0000031e, + 0x00000326,0x000200f8,0x0000031e,0x0004003d,0x00000006,0x00000320,0x000002bc,0x0004003d, + 0x00000006,0x00000321,0x000002bd,0x00050088,0x00000006,0x00000322,0x00000320,0x00000321, + 0x00050083,0x00000006,0x00000323,0x000000e3,0x00000322,0x0003003e,0x00000324,0x00000323, + 0x00050039,0x00000006,0x00000325,0x00000010,0x00000324,0x0003003e,0x0000031d,0x00000325, + 0x000200f9,0x0000031f,0x000200f8,0x00000326,0x0003003e,0x0000031d,0x000000e2,0x000200f9, + 0x0000031f,0x000200f8,0x0000031f,0x0004003d,0x00000006,0x00000327,0x0000031d,0x0003003e, + 0x000002bc,0x00000327,0x0004003d,0x00000006,0x00000328,0x000002bc,0x000200fe,0x00000328, + 0x00010038,0x00050036,0x00000006,0x000000be,0x00000000,0x000000b5,0x00030037,0x00000013, + 0x000000bb,0x00030037,0x00000013,0x000000bc,0x00030037,0x00000007,0x000000bd,0x000200f8, + 0x000000bf,0x0004003b,0x0000004d,0x0000032b,0x00000007,0x0004003b,0x00000007,0x00000333, + 0x00000007,0x0004003b,0x0000004d,0x00000334,0x00000007,0x0004003b,0x00000013,0x00000337, + 0x00000007,0x0004003b,0x0000004d,0x00000338,0x00000007,0x0004003b,0x00000007,0x0000033b, + 0x00000007,0x0004003b,0x00000013,0x0000033c,0x00000007,0x0004003b,0x00000007,0x0000033f, + 0x00000007,0x0004003b,0x00000013,0x00000340,0x00000007,0x0004003b,0x00000007,0x00000343, + 0x00000007,0x0004003b,0x00000007,0x00000349,0x00000007,0x0004003b,0x00000007,0x0000034a, + 0x00000007,0x0004003b,0x00000007,0x0000034d,0x00000007,0x0004003b,0x00000007,0x0000034e, + 0x00000007,0x0004003b,0x00000007,0x00000351,0x00000007,0x0004003b,0x00000007,0x00000355, + 0x00000007,0x0004003b,0x00000007,0x00000359,0x00000007,0x0004003b,0x00000007,0x0000035b, + 0x00000007,0x0004003b,0x00000007,0x0000035f,0x00000007,0x0004003d,0x00000012,0x0000032c, + 0x000000bb,0x0004003d,0x00000012,0x0000032d,0x000000bc,0x00050081,0x00000012,0x0000032e, + 0x0000032c,0x0000032d,0x00040039,0x00000035,0x0000032f,0x00000037,0x0004006f,0x00000012, + 0x00000330,0x0000032f,0x00050085,0x00000012,0x00000331,0x0000032e,0x00000330,0x0004006e, + 0x00000035,0x00000332,0x00000331,0x0003003e,0x0000032b,0x00000332,0x0004003d,0x00000035, + 0x00000335,0x0000032b,0x0003003e,0x00000334,0x00000335,0x00050039,0x00000006,0x00000336, + 0x00000072,0x00000334,0x0003003e,0x00000333,0x00000336,0x0004003d,0x00000035,0x00000339, + 0x0000032b,0x0003003e,0x00000338,0x00000339,0x00050039,0x00000012,0x0000033a,0x0000006f, + 0x00000338,0x0003003e,0x00000337,0x0000033a,0x0004003d,0x00000012,0x0000033d,0x00000337, + 0x0003003e,0x0000033c,0x0000033d,0x00050039,0x00000006,0x0000033e,0x00000084,0x0000033c, + 0x0003003e,0x0000033b,0x0000033e,0x0004003d,0x00000012,0x00000341,0x000000bc,0x0003003e, + 0x00000340,0x00000341,0x00050039,0x00000006,0x00000342,0x00000084,0x00000340,0x0003003e, + 0x0000033f,0x00000342,0x0004003d,0x00000012,0x00000344,0x000000bc,0x0006000c,0x00000006, + 0x00000345,0x00000001,0x00000042,0x00000344,0x0004003d,0x00000012,0x00000346,0x00000337, + 0x0006000c,0x00000006,0x00000347,0x00000001,0x00000042,0x00000346,0x0007000c,0x00000006, + 0x00000348,0x00000001,0x00000028,0x00000345,0x00000347,0x0003003e,0x00000343,0x00000348, + 0x0004003d,0x00000006,0x0000034b,0x00000333,0x0003003e,0x0000034a,0x0000034b,0x00050039, + 0x00000006,0x0000034c,0x000000a9,0x0000034a,0x0003003e,0x00000349,0x0000034c,0x0004003d, + 0x00000006,0x0000034f,0x000000bd,0x0003003e,0x0000034e,0x0000034f,0x00050039,0x00000006, + 0x00000350,0x000000a9,0x0000034e,0x0003003e,0x0000034d,0x00000350,0x0004003d,0x00000006, + 0x00000352,0x00000349,0x0004003d,0x00000006,0x00000353,0x0000034d,0x00060039,0x00000006, + 0x00000354,0x00000089,0x00000352,0x00000353,0x0003003e,0x00000351,0x00000354,0x0004003d, + 0x00000006,0x00000356,0x0000033f,0x00050088,0x00000006,0x00000358,0x00000356,0x00000357, + 0x0003003e,0x00000359,0x00000358,0x00050039,0x00000006,0x0000035a,0x00000010,0x00000359, + 0x0003003e,0x00000355,0x0000035a,0x0004003d,0x00000006,0x0000035c,0x0000033b,0x0004003d, + 0x00000006,0x0000035d,0x0000033f,0x00050088,0x00000006,0x0000035e,0x0000035c,0x0000035d, + 0x0003003e,0x0000035f,0x0000035e,0x00050039,0x00000006,0x00000360,0x00000010,0x0000035f, + 0x00050083,0x00000006,0x00000361,0x000000e3,0x00000360,0x0004003d,0x00000006,0x00000362, + 0x00000351,0x00050085,0x00000006,0x00000363,0x00000361,0x00000362,0x0004003d,0x00000006, + 0x00000364,0x00000355,0x00050085,0x00000006,0x00000365,0x00000363,0x00000364,0x0003003e, + 0x0000035b,0x00000365,0x0004003d,0x00000006,0x00000366,0x0000035b,0x000200fe,0x00000366, + 0x00010038,0x00050036,0x00000006,0x000000c3,0x00000000,0x000000c0,0x00030037,0x0000004d, + 0x000000c1,0x00030037,0x00000013,0x000000c2,0x000200f8,0x000000c4,0x0004003b,0x00000007, + 0x00000369,0x00000007,0x0004003b,0x00000023,0x0000036a,0x00000007,0x0004003b,0x00000023, + 0x00000373,0x00000007,0x0004003b,0x0000004d,0x0000037b,0x00000007,0x0004003b,0x0000004d, + 0x00000380,0x00000007,0x0004003b,0x0000004d,0x00000382,0x00000007,0x0004003b,0x0000004d, + 0x00000383,0x00000007,0x0004003b,0x0000004d,0x00000385,0x00000007,0x0004003b,0x00000007, + 0x00000388,0x00000007,0x0004003b,0x00000007,0x0000038a,0x00000007,0x0003003e,0x00000369, + 0x000000e2,0x0003003e,0x0000036a,0x0000036b,0x000200f9,0x0000036c,0x000200f8,0x0000036c, + 0x000400f6,0x0000036e,0x0000036f,0x00000000,0x000200f9,0x00000370,0x000200f8,0x00000370, + 0x0004003d,0x00000022,0x00000371,0x0000036a,0x000500b3,0x0000008b,0x00000372,0x00000371, + 0x00000112,0x000400fa,0x00000372,0x0000036d,0x0000036e,0x000200f8,0x0000036d,0x0003003e, + 0x00000373,0x0000036b,0x000200f9,0x00000374,0x000200f8,0x00000374,0x000400f6,0x00000376, + 0x00000377,0x00000000,0x000200f9,0x00000378,0x000200f8,0x00000378,0x0004003d,0x00000022, + 0x00000379,0x00000373,0x000500b3,0x0000008b,0x0000037a,0x00000379,0x00000112,0x000400fa, + 0x0000037a,0x00000375,0x00000376,0x000200f8,0x00000375,0x0004003d,0x00000022,0x0000037c, + 0x00000373,0x0004003d,0x00000022,0x0000037d,0x0000036a,0x00050050,0x00000035,0x0000037e, + 0x0000037c,0x0000037d,0x00040039,0x00000035,0x0000037f,0x00000037,0x0004003d,0x00000035, + 0x00000381,0x000000c1,0x0003003e,0x00000380,0x00000381,0x0003003e,0x00000382,0x0000037e, + 0x0003003e,0x00000383,0x0000037f,0x00070039,0x00000035,0x00000384,0x00000094,0x00000380, + 0x00000382,0x00000383,0x0003003e,0x0000037b,0x00000384,0x0004003d,0x00000035,0x00000386, + 0x0000037b,0x0003003e,0x00000385,0x00000386,0x00050039,0x00000006,0x00000387,0x00000050, + 0x00000385,0x0004003d,0x00000006,0x00000389,0x00000369,0x0003003e,0x00000388,0x00000389, + 0x0003003e,0x0000038a,0x00000387,0x00060039,0x00000006,0x0000038b,0x0000002b,0x00000388, + 0x0000038a,0x0003003e,0x00000369,0x0000038b,0x000200f9,0x00000377,0x000200f8,0x00000377, + 0x0004003d,0x00000022,0x0000038c,0x00000373,0x00050080,0x00000022,0x0000038d,0x0000038c, + 0x00000112,0x0003003e,0x00000373,0x0000038d,0x000200f9,0x00000374,0x000200f8,0x00000376, + 0x000200f9,0x0000036f,0x000200f8,0x0000036f,0x0004003d,0x00000022,0x0000038e,0x0000036a, + 0x00050080,0x00000022,0x0000038f,0x0000038e,0x00000112,0x0003003e,0x0000036a,0x0000038f, + 0x000200f9,0x0000036c,0x000200f8,0x0000036e,0x0004003d,0x00000006,0x00000390,0x00000369, + 0x000200fe,0x00000390,0x00010038,0x00050036,0x00000006,0x000000c7,0x00000000,0x000000c0, + 0x00030037,0x0000004d,0x000000c5,0x00030037,0x00000013,0x000000c6,0x000200f8,0x000000c8, + 0x0004003b,0x00000013,0x00000393,0x00000007,0x0004003b,0x00000013,0x00000396,0x00000007, + 0x0004003b,0x0000004d,0x00000398,0x00000007,0x0004003b,0x0000004d,0x00000399,0x00000007, + 0x0004003b,0x00000013,0x0000039b,0x00000007,0x00040039,0x00000035,0x00000394,0x00000037, + 0x00040039,0x00000035,0x00000395,0x00000052,0x0004003d,0x00000012,0x00000397,0x000000c6, + 0x0003003e,0x00000396,0x00000397,0x0003003e,0x00000398,0x00000394,0x0003003e,0x00000399, + 0x00000395,0x00070039,0x00000012,0x0000039a,0x0000009a,0x00000396,0x00000398,0x00000399, + 0x0003003e,0x00000393,0x0000039a,0x0004003d,0x00000012,0x0000039c,0x00000393,0x0003003e, + 0x0000039b,0x0000039c,0x00050039,0x00000006,0x0000039d,0x00000056,0x0000039b,0x000200fe, + 0x0000039d,0x00010038,0x00050036,0x00000006,0x000000ca,0x00000000,0x0000004e,0x00030037, + 0x0000004d,0x000000c9,0x000200f8,0x000000cb,0x0004003b,0x00000007,0x000003a0,0x00000007, + 0x0004003b,0x00000007,0x000003a2,0x00000007,0x0004003b,0x00000023,0x000003a3,0x00000007, + 0x0004003b,0x0000004d,0x000003ac,0x00000007,0x0004003b,0x0000004d,0x000003b7,0x00000007, + 0x0004003b,0x0000004d,0x000003b9,0x00000007,0x0004003b,0x000003ba,0x000003bb,0x00000007, + 0x0004003b,0x0000004d,0x000003be,0x00000007,0x0004003b,0x000003c1,0x000003c2,0x00000007, + 0x0004003b,0x0000004d,0x000003c4,0x00000007,0x0004003b,0x00000007,0x000003cb,0x00000007, + 0x0004003b,0x00000007,0x000003cd,0x00000007,0x0004003b,0x00000007,0x000003d2,0x00000007, + 0x0004003b,0x00000007,0x000003d4,0x00000007,0x0004003b,0x00000007,0x000003da,0x00000007, + 0x0004003b,0x00000007,0x000003db,0x00000007,0x0004003b,0x000003dc,0x000003dd,0x00000007, + 0x0004003b,0x00000023,0x000003de,0x00000007,0x0004003b,0x00000023,0x000003df,0x00000007, + 0x0004003b,0x00000007,0x000003e7,0x00000007,0x0004003b,0x00000007,0x000003fe,0x00000007, + 0x0004003b,0x00000007,0x00000400,0x00000007,0x0004003b,0x00000007,0x00000405,0x00000007, + 0x0004003b,0x00000007,0x00000407,0x00000007,0x0004003b,0x000002be,0x0000040f,0x00000007, + 0x0004003b,0x00000023,0x00000422,0x00000007,0x0004003b,0x00000433,0x00000434,0x00000007, + 0x0004003b,0x00000433,0x00000439,0x00000007,0x0003003e,0x000003a0,0x000003a1,0x0003003e, + 0x000003a2,0x000002f4,0x0003003e,0x000003a3,0x0000010c,0x000200f9,0x000003a4,0x000200f8, + 0x000003a4,0x000400f6,0x000003a6,0x000003a7,0x00000000,0x000200f9,0x000003a8,0x000200f8, + 0x000003a8,0x0004003d,0x00000022,0x000003a9,0x000003a3,0x000500b1,0x0000008b,0x000003ab, + 0x000003a9,0x000003aa,0x000400fa,0x000003ab,0x000003a5,0x000003a6,0x000200f8,0x000003a5, + 0x0004003d,0x00000022,0x000003b5,0x000003a3,0x00040039,0x00000035,0x000003b6,0x00000037, + 0x0004003d,0x00000035,0x000003b8,0x000000c9,0x0003003e,0x000003b7,0x000003b8,0x0003003e, + 0x000003bb,0x000003b4,0x00050041,0x0000004d,0x000003bc,0x000003bb,0x000003b5,0x0004003d, + 0x00000035,0x000003bd,0x000003bc,0x0003003e,0x000003b9,0x000003bd,0x0003003e,0x000003be, + 0x000003b6,0x00070039,0x00000035,0x000003bf,0x00000094,0x000003b7,0x000003b9,0x000003be, + 0x0003003e,0x000003ac,0x000003bf,0x0004003d,0x00000022,0x000003c3,0x000003a3,0x0004003d, + 0x00000035,0x000003c5,0x000003ac,0x0003003e,0x000003c4,0x000003c5,0x00050039,0x00000006, + 0x000003c6,0x00000064,0x000003c4,0x00040039,0x00000006,0x000003c7,0x00000074,0x00050085, + 0x00000006,0x000003c8,0x000003c6,0x000003c7,0x00050041,0x00000007,0x000003c9,0x000003c2, + 0x000003c3,0x0003003e,0x000003c9,0x000003c8,0x0004003d,0x00000022,0x000003ca,0x000003a3, + 0x0004003d,0x00000006,0x000003cc,0x000003a0,0x0003003e,0x000003cb,0x000003cc,0x00050041, + 0x00000007,0x000003ce,0x000003c2,0x000003ca,0x0004003d,0x00000006,0x000003cf,0x000003ce, + 0x0003003e,0x000003cd,0x000003cf,0x00060039,0x00000006,0x000003d0,0x0000001b,0x000003cb, + 0x000003cd,0x0003003e,0x000003a0,0x000003d0,0x0004003d,0x00000022,0x000003d1,0x000003a3, + 0x0004003d,0x00000006,0x000003d3,0x000003a2,0x0003003e,0x000003d2,0x000003d3,0x00050041, + 0x00000007,0x000003d5,0x000003c2,0x000003d1,0x0004003d,0x00000006,0x000003d6,0x000003d5, + 0x0003003e,0x000003d4,0x000003d6,0x00060039,0x00000006,0x000003d7,0x0000002b,0x000003d2, + 0x000003d4,0x0003003e,0x000003a2,0x000003d7,0x000200f9,0x000003a7,0x000200f8,0x000003a7, + 0x0004003d,0x00000022,0x000003d8,0x000003a3,0x00050080,0x00000022,0x000003d9,0x000003d8, + 0x00000112,0x0003003e,0x000003a3,0x000003d9,0x000200f9,0x000003a4,0x000200f8,0x000003a6, + 0x0003003e,0x000003da,0x000003a1,0x0003003e,0x000003db,0x000000e2,0x0003003e,0x000003dd, + 0x000001f0,0x0003003e,0x000003de,0x00000112,0x0003003e,0x000003df,0x00000112,0x000200f9, + 0x000003e0,0x000200f8,0x000003e0,0x000400f6,0x000003e2,0x000003e3,0x00000000,0x000200f9, + 0x000003e4,0x000200f8,0x000003e4,0x0004003d,0x00000022,0x000003e5,0x000003df,0x000500b1, + 0x0000008b,0x000003e6,0x000003e5,0x000003aa,0x000400fa,0x000003e6,0x000003e1,0x000003e2, + 0x000200f8,0x000003e1,0x0004003d,0x00000022,0x000003e8,0x000003df,0x00050041,0x00000007, + 0x000003e9,0x000003c2,0x000003e8,0x0004003d,0x00000006,0x000003ea,0x000003e9,0x00050041, + 0x00000007,0x000003eb,0x000003c2,0x0000010c,0x0004003d,0x00000006,0x000003ec,0x000003eb, + 0x00050083,0x00000006,0x000003ed,0x000003ea,0x000003ec,0x0006000c,0x00000006,0x000003ee, + 0x00000001,0x00000004,0x000003ed,0x0004003d,0x00000006,0x000003ef,0x000003a2,0x0004003d, + 0x00000006,0x000003f0,0x000003a0,0x00050083,0x00000006,0x000003f1,0x000003ef,0x000003f0, + 0x00050088,0x00000006,0x000003f2,0x000003ee,0x000003f1,0x0003003e,0x000003e7,0x000003f2, + 0x0004003d,0x00000006,0x000003f3,0x000003e7,0x000500b8,0x0000008b,0x000003f5,0x000003f3, + 0x000003f4,0x000300f7,0x000003f7,0x00000000,0x000400fa,0x000003f5,0x000003f6,0x000003fc, + 0x000200f8,0x000003f6,0x0004003d,0x00000022,0x000003f8,0x000003de,0x000500c4,0x000000ab, + 0x000003f9,0x000001f0,0x000003f8,0x0004003d,0x000000ab,0x000003fa,0x000003dd,0x000500c5, + 0x000000ab,0x000003fb,0x000003fa,0x000003f9,0x0003003e,0x000003dd,0x000003fb,0x000200f9, + 0x000003f7,0x000200f8,0x000003fc,0x0004003d,0x00000022,0x000003fd,0x000003df,0x0004003d, + 0x00000006,0x000003ff,0x000003da,0x0003003e,0x000003fe,0x000003ff,0x00050041,0x00000007, + 0x00000401,0x000003c2,0x000003fd,0x0004003d,0x00000006,0x00000402,0x00000401,0x0003003e, + 0x00000400,0x00000402,0x00060039,0x00000006,0x00000403,0x0000001b,0x000003fe,0x00000400, + 0x0003003e,0x000003da,0x00000403,0x0004003d,0x00000022,0x00000404,0x000003df,0x0004003d, + 0x00000006,0x00000406,0x000003db,0x0003003e,0x00000405,0x00000406,0x00050041,0x00000007, + 0x00000408,0x000003c2,0x00000404,0x0004003d,0x00000006,0x00000409,0x00000408,0x0003003e, + 0x00000407,0x00000409,0x00060039,0x00000006,0x0000040a,0x0000002b,0x00000405,0x00000407, + 0x0003003e,0x000003db,0x0000040a,0x000200f9,0x000003f7,0x000200f8,0x000003f7,0x000200f9, + 0x000003e3,0x000200f8,0x000003e3,0x0004003d,0x00000022,0x0000040b,0x000003df,0x00050080, + 0x00000022,0x0000040c,0x0000040b,0x00000112,0x0003003e,0x000003df,0x0000040c,0x0004003d, + 0x00000022,0x0000040d,0x000003de,0x00050080,0x00000022,0x0000040e,0x0000040d,0x00000112, + 0x0003003e,0x000003de,0x0000040e,0x000200f9,0x000003e0,0x000200f8,0x000003e2,0x00050041, + 0x00000007,0x00000410,0x000003c2,0x0000010c,0x0004003d,0x00000006,0x00000411,0x00000410, + 0x0004003d,0x00000006,0x00000412,0x000003db,0x000500ba,0x0000008b,0x00000413,0x00000411, + 0x00000412,0x000400a8,0x0000008b,0x00000414,0x00000413,0x000300f7,0x00000416,0x00000000, + 0x000400fa,0x00000414,0x00000415,0x00000416,0x000200f8,0x00000415,0x00050041,0x00000007, + 0x00000417,0x000003c2,0x0000010c,0x0004003d,0x00000006,0x00000418,0x00000417,0x0004003d, + 0x00000006,0x00000419,0x000003da,0x000500b8,0x0000008b,0x0000041a,0x00000418,0x00000419, + 0x000200f9,0x00000416,0x000200f8,0x00000416,0x000700f5,0x0000008b,0x0000041b,0x00000413, + 0x000003e2,0x0000041a,0x00000415,0x0003003e,0x0000040f,0x0000041b,0x0004003d,0x0000008b, + 0x0000041d,0x0000040f,0x000500a4,0x0000008b,0x0000041e,0x0000041c,0x0000041d,0x000300f7, + 0x00000420,0x00000000,0x000400fa,0x0000041e,0x0000041f,0x00000420,0x000200f8,0x0000041f, + 0x000200fe,0x000000e2,0x000200f8,0x00000420,0x0003003e,0x00000422,0x0000010c,0x000200f9, + 0x00000423,0x000200f8,0x00000423,0x000400f6,0x00000425,0x00000426,0x00000000,0x000200f9, + 0x00000427,0x000200f8,0x00000427,0x0004003d,0x00000022,0x00000428,0x00000422,0x0004007c, + 0x000000ab,0x00000429,0x00000428,0x000500b0,0x0000008b,0x0000042a,0x00000429,0x000000ac, + 0x000400fa,0x0000042a,0x00000424,0x00000425,0x000200f8,0x00000424,0x0004003d,0x000000ab, + 0x0000042b,0x000003dd,0x0004003d,0x00000022,0x00000432,0x00000422,0x0003003e,0x00000434, + 0x00000431,0x00050041,0x000003dc,0x00000435,0x00000434,0x00000432,0x0004003d,0x000000ab, + 0x00000436,0x00000435,0x000500c7,0x000000ab,0x00000437,0x0000042b,0x00000436,0x0004003d, + 0x00000022,0x00000438,0x00000422,0x0003003e,0x00000439,0x00000431,0x00050041,0x000003dc, + 0x0000043a,0x00000439,0x00000438,0x0004003d,0x000000ab,0x0000043b,0x0000043a,0x000500aa, + 0x0000008b,0x0000043c,0x00000437,0x0000043b,0x000300f7,0x0000043e,0x00000000,0x000400fa, + 0x0000043c,0x0000043d,0x0000043e,0x000200f8,0x0000043d,0x000200fe,0x000000e2,0x000200f8, + 0x0000043e,0x000200f9,0x00000426,0x000200f8,0x00000426,0x0004003d,0x00000022,0x00000440, + 0x00000422,0x00050080,0x00000022,0x00000441,0x00000440,0x00000112,0x0003003e,0x00000422, + 0x00000441,0x000200f9,0x00000423,0x000200f8,0x00000425,0x0004003d,0x00000006,0x00000442, + 0x000003a0,0x0004003d,0x00000006,0x00000443,0x000003a2,0x00050088,0x00000006,0x00000444, + 0x00000442,0x00000443,0x00050083,0x00000006,0x00000445,0x000000e3,0x00000444,0x000200fe, + 0x00000445,0x00010038,0x00050036,0x00000006,0x000000d2,0x00000000,0x000000cc,0x00030037, + 0x0000004d,0x000000cd,0x00030037,0x00000013,0x000000ce,0x00030037,0x00000013,0x000000cf, + 0x00030037,0x00000007,0x000000d0,0x00030037,0x00000007,0x000000d1,0x000200f8,0x000000d3, + 0x0004003b,0x00000013,0x00000448,0x00000007,0x0004003b,0x00000007,0x0000044c,0x00000007, + 0x0004003b,0x00000013,0x0000044d,0x00000007,0x0004003b,0x00000013,0x00000452,0x00000007, + 0x0004003b,0x00000013,0x00000455,0x00000007,0x0004003b,0x0000004d,0x00000457,0x00000007, + 0x0004003b,0x0000004d,0x00000458,0x00000007,0x0004003b,0x00000013,0x0000045a,0x00000007, + 0x0004003b,0x00000007,0x0000045d,0x00000007,0x0004003b,0x00000007,0x0000045f,0x00000007, + 0x0004003b,0x00000007,0x00000461,0x00000007,0x0004003b,0x00000007,0x00000463,0x00000007, + 0x0004003b,0x00000007,0x00000464,0x00000007,0x0004003b,0x00000007,0x00000467,0x00000007, + 0x0004003b,0x00000007,0x00000469,0x00000007,0x0004003b,0x00000007,0x0000046b,0x00000007, + 0x0004003b,0x00000007,0x0000046e,0x00000007,0x0004003b,0x00000007,0x00000470,0x00000007, + 0x0004003b,0x00000007,0x00000471,0x00000007,0x0004003b,0x00000007,0x0000047b,0x00000007, + 0x0004003b,0x00000007,0x0000047f,0x00000007,0x0004003b,0x0000004d,0x00000481,0x00000007, + 0x0004003b,0x00000007,0x00000483,0x00000007,0x0004003d,0x00000012,0x00000449,0x000000ce, + 0x0004003d,0x00000012,0x0000044a,0x000000cf,0x00050081,0x00000012,0x0000044b,0x00000449, + 0x0000044a,0x0003003e,0x00000448,0x0000044b,0x0003003e,0x0000044c,0x000000e2,0x0004003d, + 0x00000012,0x0000044e,0x00000448,0x0003003e,0x0000044d,0x0000044e,0x00050039,0x0000008b, + 0x0000044f,0x0000008e,0x0000044d,0x000300f7,0x00000451,0x00000000,0x000400fa,0x0000044f, + 0x00000450,0x00000451,0x000200f8,0x00000450,0x00040039,0x00000035,0x00000453,0x00000039, + 0x00040039,0x00000035,0x00000454,0x0000003b,0x0004003d,0x00000012,0x00000456,0x00000448, + 0x0003003e,0x00000455,0x00000456,0x0003003e,0x00000457,0x00000453,0x0003003e,0x00000458, + 0x00000454,0x00070039,0x00000012,0x00000459,0x0000009a,0x00000455,0x00000457,0x00000458, + 0x0003003e,0x00000452,0x00000459,0x0004003d,0x00000012,0x0000045b,0x00000452,0x0003003e, + 0x0000045a,0x0000045b,0x00050039,0x00000006,0x0000045c,0x00000059,0x0000045a,0x0003003e, + 0x0000045d,0x0000045c,0x00050039,0x00000006,0x0000045e,0x00000010,0x0000045d,0x0003003e, + 0x0000044c,0x0000045e,0x000200f9,0x00000451,0x000200f8,0x00000451,0x00040039,0x00000006, + 0x00000460,0x00000049,0x0003003e,0x0000045f,0x00000460,0x0004003d,0x00000006,0x00000462, + 0x0000044c,0x0003003e,0x00000461,0x00000462,0x0003003e,0x00000463,0x000000e2,0x0004003d, + 0x00000006,0x00000465,0x000000d1,0x0003003e,0x00000464,0x00000465,0x00070039,0x00000006, + 0x00000466,0x0000000c,0x00000461,0x00000463,0x00000464,0x0003003e,0x0000044c,0x00000466, + 0x00040039,0x00000006,0x00000468,0x0000004b,0x0003003e,0x00000467,0x00000468,0x0004003d, + 0x00000006,0x0000046a,0x00000467,0x0003003e,0x00000469,0x0000046a,0x0004003d,0x00000006, + 0x0000046c,0x0000044c,0x0003003e,0x0000046b,0x0000046c,0x00060039,0x00000006,0x0000046d, + 0x0000001b,0x00000469,0x0000046b,0x0004003d,0x00000006,0x0000046f,0x0000044c,0x0003003e, + 0x0000046e,0x0000046f,0x0003003e,0x00000470,0x0000046d,0x0004003d,0x00000006,0x00000472, + 0x000000d0,0x0003003e,0x00000471,0x00000472,0x00070039,0x00000006,0x00000473,0x0000000c, + 0x0000046e,0x00000470,0x00000471,0x0003003e,0x0000044c,0x00000473,0x0004003d,0x00000006, + 0x00000474,0x0000044c,0x00050085,0x00000006,0x00000475,0x00000474,0x000001b4,0x0006000c, + 0x00000006,0x00000476,0x00000001,0x00000001,0x00000475,0x000500ba,0x0000008b,0x00000477, + 0x00000476,0x000000e3,0x000600a9,0x00000006,0x00000478,0x00000477,0x000000e3,0x000000e2, + 0x0004003d,0x00000006,0x00000479,0x0000044c,0x00050085,0x00000006,0x0000047a,0x00000479, + 0x00000478,0x0003003e,0x0000044c,0x0000047a,0x0004003d,0x00000006,0x0000047c,0x0000044c, + 0x0004003d,0x00000006,0x0000047d,0x0000045f,0x00050081,0x00000006,0x0000047e,0x0000047c, + 0x0000047d,0x0003003e,0x0000047f,0x0000047e,0x00050039,0x00000006,0x00000480,0x00000010, + 0x0000047f,0x0003003e,0x0000047b,0x00000480,0x0004003d,0x00000035,0x00000482,0x000000cd, + 0x0003003e,0x00000481,0x00000482,0x0004003d,0x00000006,0x00000484,0x0000047b,0x0003003e, + 0x00000483,0x00000484,0x00060039,0x00000002,0x00000485,0x0000005e,0x00000481,0x00000483, + 0x0004003d,0x00000006,0x00000486,0x0000044c,0x000200fe,0x00000486,0x00010038,0x00050036, + 0x00000006,0x000000d5,0x00000000,0x00000054,0x00030037,0x00000013,0x000000d4,0x000200f8, + 0x000000d6,0x0004003b,0x00000013,0x00000489,0x00000007,0x0004003b,0x00000013,0x00000492, + 0x00000007,0x0004003b,0x0000004d,0x00000493,0x00000007,0x0004003b,0x0000004d,0x00000494, + 0x00000007,0x0004003b,0x00000007,0x00000496,0x00000007,0x0004003b,0x00000013,0x00000497, + 0x00000007,0x0004003b,0x00000007,0x0000049a,0x00000007,0x0004003d,0x00000012,0x0000048a, + 0x000000d4,0x00040039,0x00000012,0x0000048b,0x00000040,0x00040039,0x00000035,0x0000048c, + 0x00000037,0x0004006f,0x00000012,0x0000048d,0x0000048c,0x00050088,0x00000012,0x0000048e, + 0x0000048b,0x0000048d,0x00050083,0x00000012,0x0000048f,0x0000048a,0x0000048e,0x00040039, + 0x00000035,0x00000490,0x0000007f,0x00040039,0x00000035,0x00000491,0x00000081,0x0003003e, + 0x00000492,0x0000048f,0x0003003e,0x00000493,0x00000490,0x0003003e,0x00000494,0x00000491, + 0x00070039,0x00000012,0x00000495,0x0000009a,0x00000492,0x00000493,0x00000494,0x0003003e, + 0x00000489,0x00000495,0x0004003d,0x00000012,0x00000498,0x00000489,0x0003003e,0x00000497, + 0x00000498,0x00050039,0x00000006,0x00000499,0x00000061,0x00000497,0x0003003e,0x0000049a, + 0x00000499,0x00050039,0x00000006,0x0000049b,0x00000010,0x0000049a,0x0003003e,0x00000496, + 0x0000049b,0x0004003d,0x00000006,0x0000049c,0x00000496,0x000200fe,0x0000049c,0x00010038, + 0x00050036,0x00000002,0x000000d9,0x00000000,0x000000d7,0x00030037,0x0000004d,0x000000d8, + 0x000200f8,0x000000da,0x0004003b,0x00000013,0x0000049f,0x00000007,0x0004003b,0x00000013, + 0x000004a7,0x00000007,0x0004003b,0x0000004d,0x000004a8,0x00000007,0x0004003b,0x00000007, + 0x000004ab,0x00000007,0x0004003b,0x00000013,0x000004ac,0x00000007,0x0004003b,0x00000013, + 0x000004af,0x00000007,0x0004003b,0x00000007,0x000004b3,0x00000007,0x0004003b,0x0000004d, + 0x000004b4,0x00000007,0x0004003b,0x00000007,0x000004b7,0x00000007,0x0004003b,0x00000007, + 0x000004b8,0x00000007,0x0004003b,0x00000007,0x000004bb,0x00000007,0x0004003b,0x00000007, + 0x000004bc,0x00000007,0x0004003b,0x00000013,0x000004bf,0x00000007,0x0004003b,0x00000013, + 0x000004c1,0x00000007,0x0004003b,0x00000007,0x000004c3,0x00000007,0x0004003b,0x00000007, + 0x000004c5,0x00000007,0x0004003b,0x0000004d,0x000004c6,0x00000007,0x0004003b,0x00000013, + 0x000004c8,0x00000007,0x0004003b,0x00000013,0x000004cb,0x00000007,0x0004003b,0x00000007, + 0x000004ce,0x00000007,0x0004003b,0x00000007,0x000004cf,0x00000007,0x0004003b,0x00000007, + 0x000004d1,0x00000007,0x0004003b,0x00000013,0x000004d2,0x00000007,0x0004003b,0x00000013, + 0x000004d4,0x00000007,0x0004003b,0x00000007,0x000004d6,0x00000007,0x0004003b,0x00000007, + 0x000004d9,0x00000007,0x0004003b,0x0000004d,0x000004da,0x00000007,0x0004003b,0x00000013, + 0x000004dc,0x00000007,0x0004003b,0x00000007,0x000004df,0x00000007,0x0004003b,0x00000007, + 0x000004e0,0x00000007,0x0004003b,0x00000007,0x000004e2,0x00000007,0x0004003b,0x00000007, + 0x000004e5,0x00000007,0x0004003b,0x0000004d,0x000004e6,0x00000007,0x0004003b,0x00000013, + 0x000004e8,0x00000007,0x0004003b,0x00000013,0x000004ea,0x00000007,0x0004003b,0x00000007, + 0x000004ec,0x00000007,0x0004003b,0x00000007,0x000004ee,0x00000007,0x0004003b,0x00000076, + 0x000004f1,0x00000007,0x0004003b,0x0000004d,0x000004fc,0x00000007,0x0004003b,0x00000076, + 0x000004fe,0x00000007,0x0004003b,0x00000007,0x00000501,0x00000007,0x0004003b,0x0000004d, + 0x00000502,0x00000007,0x0004003b,0x0000004d,0x0000050b,0x00000007,0x0004003b,0x0000004d, + 0x0000050d,0x00000007,0x0004003b,0x00000007,0x0000050e,0x00000007,0x0004003d,0x00000035, + 0x000004a0,0x000000d8,0x0004006f,0x00000012,0x000004a1,0x000004a0,0x00050050,0x00000012, + 0x000004a2,0x000001c0,0x000001c0,0x00050081,0x00000012,0x000004a3,0x000004a1,0x000004a2, + 0x00040039,0x00000035,0x000004a4,0x00000037,0x0004006f,0x00000012,0x000004a5,0x000004a4, + 0x00050088,0x00000012,0x000004a6,0x000004a3,0x000004a5,0x0003003e,0x0000049f,0x000004a6, + 0x0004003d,0x00000035,0x000004a9,0x000000d8,0x0003003e,0x000004a8,0x000004a9,0x00050039, + 0x00000012,0x000004aa,0x0000006f,0x000004a8,0x0003003e,0x000004a7,0x000004aa,0x0004003d, + 0x00000012,0x000004ad,0x000004a7,0x0003003e,0x000004ac,0x000004ad,0x00050039,0x00000006, + 0x000004ae,0x00000084,0x000004ac,0x0003003e,0x000004ab,0x000004ae,0x0004003d,0x00000012, + 0x000004b0,0x0000049f,0x0004003d,0x00000012,0x000004b1,0x000004a7,0x00050081,0x00000012, + 0x000004b2,0x000004b0,0x000004b1,0x0003003e,0x000004af,0x000004b2,0x0004003d,0x00000035, + 0x000004b5,0x000000d8,0x0003003e,0x000004b4,0x000004b5,0x00050039,0x00000006,0x000004b6, + 0x00000072,0x000004b4,0x0003003e,0x000004b3,0x000004b6,0x0004003d,0x00000006,0x000004b9, + 0x000004b3,0x0003003e,0x000004b8,0x000004b9,0x00050039,0x00000006,0x000004ba,0x000000a9, + 0x000004b8,0x0003003e,0x000004b7,0x000004ba,0x0004003d,0x00000006,0x000004bd,0x000004b3, + 0x0003003e,0x000004bc,0x000004bd,0x00050039,0x00000006,0x000004be,0x000000a6,0x000004bc, + 0x0004003d,0x00000012,0x000004c0,0x0000049f,0x0003003e,0x000004bf,0x000004c0,0x0004003d, + 0x00000012,0x000004c2,0x000004a7,0x0003003e,0x000004c1,0x000004c2,0x0003003e,0x000004c3, + 0x000004be,0x00070039,0x00000006,0x000004c4,0x000000b9,0x000004bf,0x000004c1,0x000004c3, + 0x0003003e,0x000004bb,0x000004c4,0x0004003d,0x00000035,0x000004c7,0x000000d8,0x0003003e, + 0x000004c6,0x000004c7,0x0004003d,0x00000012,0x000004c9,0x0000049f,0x0003003e,0x000004c8, + 0x000004c9,0x00060039,0x00000006,0x000004ca,0x000000c3,0x000004c6,0x000004c8,0x0004003d, + 0x00000012,0x000004cc,0x0000049f,0x0003003e,0x000004cb,0x000004cc,0x00050039,0x00000006, + 0x000004cd,0x000000d5,0x000004cb,0x0003003e,0x000004ce,0x000004ca,0x0003003e,0x000004cf, + 0x000004cd,0x00060039,0x00000006,0x000004d0,0x0000002b,0x000004ce,0x000004cf,0x0003003e, + 0x000004c5,0x000004d0,0x0004003d,0x00000012,0x000004d3,0x0000049f,0x0003003e,0x000004d2, + 0x000004d3,0x0004003d,0x00000012,0x000004d5,0x000004a7,0x0003003e,0x000004d4,0x000004d5, + 0x0004003d,0x00000006,0x000004d7,0x000004b3,0x0003003e,0x000004d6,0x000004d7,0x00070039, + 0x00000006,0x000004d8,0x000000be,0x000004d2,0x000004d4,0x000004d6,0x0003003e,0x000004d1, + 0x000004d8,0x0004003d,0x00000035,0x000004db,0x000000d8,0x0003003e,0x000004da,0x000004db, + 0x0004003d,0x00000012,0x000004dd,0x0000049f,0x0003003e,0x000004dc,0x000004dd,0x00060039, + 0x00000006,0x000004de,0x000000c7,0x000004da,0x000004dc,0x0003003e,0x000004d9,0x000004de, + 0x0004003d,0x00000006,0x000004e1,0x000004d1,0x0003003e,0x000004e0,0x000004e1,0x0004003d, + 0x00000006,0x000004e3,0x000004d9,0x0003003e,0x000004e2,0x000004e3,0x00060039,0x00000006, + 0x000004e4,0x0000002b,0x000004e0,0x000004e2,0x0003003e,0x000004df,0x000004e4,0x0004003d, + 0x00000035,0x000004e7,0x000000d8,0x0003003e,0x000004e6,0x000004e7,0x0004003d,0x00000012, + 0x000004e9,0x0000049f,0x0003003e,0x000004e8,0x000004e9,0x0004003d,0x00000012,0x000004eb, + 0x000004a7,0x0003003e,0x000004ea,0x000004eb,0x0004003d,0x00000006,0x000004ed,0x000004bb, + 0x0003003e,0x000004ec,0x000004ed,0x0004003d,0x00000006,0x000004ef,0x000004c5,0x0003003e, + 0x000004ee,0x000004ef,0x00090039,0x00000006,0x000004f0,0x000000d2,0x000004e6,0x000004e8, + 0x000004ea,0x000004ec,0x000004ee,0x0003003e,0x000004e5,0x000004f0,0x0004003d,0x00000006, + 0x000004f2,0x000004df,0x00050041,0x00000007,0x000004f3,0x000004f1,0x00000143,0x0003003e, + 0x000004f3,0x000004f2,0x0004003d,0x00000006,0x000004f4,0x000004bb,0x00050041,0x00000007, + 0x000004f5,0x000004f1,0x000001f0,0x0003003e,0x000004f5,0x000004f4,0x0004003d,0x00000006, + 0x000004f6,0x000004c5,0x00050041,0x00000007,0x000004f8,0x000004f1,0x000004f7,0x0003003e, + 0x000004f8,0x000004f6,0x0004003d,0x00000006,0x000004f9,0x000004e5,0x00050041,0x00000007, + 0x000004fb,0x000004f1,0x000004fa,0x0003003e,0x000004fb,0x000004f9,0x0004003d,0x00000035, + 0x000004fd,0x000000d8,0x0003003e,0x000004fc,0x000004fd,0x0004003d,0x00000042,0x000004ff, + 0x000004f1,0x0003003e,0x000004fe,0x000004ff,0x00060039,0x00000002,0x00000500,0x0000007a, + 0x000004fc,0x000004fe,0x0004003d,0x00000035,0x00000503,0x000000d8,0x0003003e,0x00000502, + 0x00000503,0x00050039,0x00000006,0x00000504,0x000000ca,0x00000502,0x0003003e,0x00000501, + 0x00000504,0x0004003d,0x00000006,0x00000505,0x00000501,0x000500ba,0x0000008b,0x00000507, + 0x00000505,0x00000506,0x000300f7,0x00000509,0x00000000,0x000400fa,0x00000507,0x00000508, + 0x00000509,0x000200f8,0x00000508,0x0004003d,0x00000035,0x0000050a,0x000000d8,0x0003003e, + 0x0000050b,0x0000050a,0x00050039,0x00000035,0x0000050c,0x000000a3,0x0000050b,0x0003003e, + 0x0000050d,0x0000050c,0x0004003d,0x00000006,0x0000050f,0x00000501,0x0003003e,0x0000050e, + 0x0000050f,0x00060039,0x00000002,0x00000510,0x00000068,0x0000050d,0x0000050e,0x000200f9, + 0x00000509,0x000200f8,0x00000509,0x000100fd,0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_rcas_comp_spv.h b/gpu/vk/shaders/fsr3_rcas_comp_spv.h new file mode 100644 index 000000000..90f455760 --- /dev/null +++ b/gpu/vk/shaders/fsr3_rcas_comp_spv.h @@ -0,0 +1,694 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_RCAS_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x0000033d,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000038,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e, + 0x00000000,0x00000001,0x0008000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x0000031e, + 0x0000031f,0x00000320,0x00060010,0x00000004,0x00000011,0x00000040,0x00000001,0x00000001, + 0x00030003,0x00000002,0x000001c2,0x000b0004,0x455f4c47,0x735f5458,0x6c706d61,0x656c7265, + 0x745f7373,0x75747865,0x665f6572,0x74636e75,0x736e6f69,0x00000000,0x000b0004,0x455f4c47, + 0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63, + 0x00736570,0x000a0004,0x455f4c47,0x735f5458,0x65646168,0x6d695f72,0x5f656761,0x64616f6c, + 0x726f665f,0x7474616d,0x00006465,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70, + 0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f, + 0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669,0x00040005,0x00000004,0x6e69616d, + 0x00000000,0x00060005,0x0000000b,0x41786666,0x6f6c4673,0x75287461,0x00003b31,0x00030005, + 0x0000000a,0x00000078,0x00060005,0x00000010,0x41786666,0x6e495573,0x28323374,0x003b3166, + 0x00030005,0x0000000f,0x00000078,0x000a0005,0x00000016,0x42786666,0x69667469,0x45646c65, + 0x61727478,0x75287463,0x31753b31,0x3b31753b,0x00000000,0x00030005,0x00000013,0x00637273, + 0x00030005,0x00000014,0x0066666f,0x00040005,0x00000015,0x73746962,0x00000000,0x000a0005, + 0x0000001b,0x42786666,0x69667469,0x49646c65,0x7265736e,0x73614d74,0x3175286b,0x3b31753b, + 0x003b3175,0x00030005,0x00000018,0x00637273,0x00030005,0x00000019,0x00736e69,0x00040005, + 0x0000001a,0x73746962,0x00000000,0x00070005,0x00000021,0x4d786666,0x28337861,0x663b3166, + 0x31663b31,0x0000003b,0x00030005,0x0000001e,0x00000078,0x00030005,0x0000001f,0x00000079, + 0x00030005,0x00000020,0x0000007a,0x00070005,0x00000026,0x4d786666,0x28336e69,0x663b3166, + 0x31663b31,0x0000003b,0x00030005,0x00000023,0x00000078,0x00030005,0x00000024,0x00000079, + 0x00030005,0x00000025,0x0000007a,0x00070005,0x0000002a,0x52786666,0x70696365,0x61636f72, + 0x3166286c,0x0000003b,0x00030005,0x00000029,0x00000078,0x00060005,0x0000002d,0x53786666, + 0x72757461,0x28657461,0x003b3166,0x00030005,0x0000002c,0x00000078,0x00060005,0x00000032, + 0x4d786666,0x66286e69,0x31663b31,0x0000003b,0x00030005,0x00000030,0x00000078,0x00030005, + 0x00000031,0x00000079,0x000b0005,0x00000035,0x41786666,0x6f727070,0x616d6978,0x65526574, + 0x72706963,0x6c61636f,0x6964654d,0x66286d75,0x00003b31,0x00040005,0x00000034,0x756c6176, + 0x00000065,0x00070005,0x0000003a,0x52786666,0x70616d65,0x51726f46,0x28646175,0x003b3175, + 0x00030005,0x00000039,0x00000061,0x00050005,0x0000003e,0x53414352,0x666e6f43,0x00286769, + 0x00070005,0x00000046,0x64616f4c,0x53414352,0x706e495f,0x76287475,0x003b3269,0x00040005, + 0x00000045,0x50785069,0x0000736f,0x000a0005,0x0000004d,0x726f7453,0x73705565,0x656c6163, + 0x74754f64,0x28747570,0x3b326976,0x3b336676,0x00000000,0x00040005,0x0000004b,0x50785069, + 0x0000736f,0x00040005,0x0000004c,0x6c6f4366,0x0000726f,0x00050005,0x00000050,0x6f707845, + 0x65727573,0x00000028,0x000a0005,0x00000056,0x74697257,0x73705565,0x656c6163,0x74754f64, + 0x28747570,0x3b327576,0x3b336676,0x00000000,0x00050005,0x00000054,0x48785069,0x736f5072, + 0x00000000,0x00060005,0x00000055,0x73705566,0x656c6163,0x6c6f4364,0x0000726f,0x00070005, + 0x00000059,0x52727346,0x4c736163,0x4664616f,0x32697628,0x0000003b,0x00030005,0x00000058, + 0x00000070,0x00080005,0x0000005f,0x52727346,0x49736163,0x7475706e,0x31662846,0x3b31663b, + 0x003b3166,0x00030005,0x0000005c,0x00000072,0x00030005,0x0000005d,0x00000067,0x00030005, + 0x0000005e,0x00000062,0x00090005,0x00000068,0x52727346,0x46736163,0x3b316628,0x663b3166, + 0x75763b31,0x75763b32,0x00003b34,0x00040005,0x00000063,0x52786970,0x00000000,0x00040005, + 0x00000064,0x47786970,0x00000000,0x00040005,0x00000065,0x42786970,0x00000000,0x00030005, + 0x00000066,0x00007069,0x00030005,0x00000067,0x006e6f63,0x00060005,0x0000006c,0x72727543, + 0x746c6946,0x76287265,0x003b3275,0x00030005,0x0000006b,0x00736f70,0x00070005,0x00000074, + 0x53414352,0x33757628,0x3375763b,0x3375763b,0x0000003b,0x00060005,0x00000071,0x61636f4c, + 0x7268546c,0x49646165,0x00000064,0x00050005,0x00000072,0x6b726f57,0x756f7247,0x00644970, + 0x00040005,0x00000073,0x64697444,0x00000000,0x00030005,0x000000ab,0x00000062,0x00040005, + 0x000000ad,0x61726170,0x0000006d,0x00040005,0x000000b1,0x61726170,0x0000006d,0x00040005, + 0x000000bf,0x61726170,0x0000006d,0x00040005,0x000000c1,0x61726170,0x0000006d,0x00040005, + 0x000000c2,0x61726170,0x0000006d,0x00040005,0x000000c4,0x61726170,0x0000006d,0x00040005, + 0x000000c6,0x61726170,0x0000006d,0x00040005,0x000000c7,0x61726170,0x0000006d,0x00040005, + 0x000000c9,0x61726170,0x0000006d,0x00040005,0x000000ca,0x61726170,0x0000006d,0x00040005, + 0x000000cc,0x61726170,0x0000006d,0x00050005,0x000000d1,0x43526263,0x745f5341,0x00000000, + 0x00060006,0x000000d1,0x00000000,0x73616372,0x666e6f43,0x00006769,0x00040005,0x000000d3, + 0x43526263,0x00005341,0x00060005,0x000000db,0x63725f72,0x695f7361,0x7475706e,0x00000000, + 0x00070005,0x000000e3,0x755f7772,0x61637370,0x5f64656c,0x7074756f,0x00007475,0x00050005, + 0x000000eb,0x6f707865,0x65727573,0x00000000,0x00070005,0x000000ec,0x6e695f72,0x5f747570, + 0x6f707865,0x65727573,0x00000000,0x00040005,0x000000fc,0x61726170,0x0000006d,0x00040005, + 0x000000fd,0x61726170,0x0000006d,0x00040005,0x00000101,0x6c6f4366,0x0000726f,0x00040005, + 0x00000102,0x61726170,0x0000006d,0x00030005,0x00000113,0x00007073,0x00030005,0x00000116, + 0x00000062,0x00040005,0x0000011b,0x61726170,0x0000006d,0x00030005,0x0000011e,0x00000064, + 0x00040005,0x00000122,0x61726170,0x0000006d,0x00030005,0x00000125,0x00000065,0x00040005, + 0x00000126,0x61726170,0x0000006d,0x00030005,0x0000012a,0x00000066,0x00040005,0x0000012f, + 0x61726170,0x0000006d,0x00030005,0x00000132,0x00000068,0x00040005,0x00000136,0x61726170, + 0x0000006d,0x00030005,0x00000139,0x00005262,0x00030005,0x0000013c,0x00004762,0x00030005, + 0x0000013f,0x00004262,0x00030005,0x00000142,0x00005264,0x00030005,0x00000145,0x00004764, + 0x00030005,0x00000148,0x00004264,0x00030005,0x0000014b,0x00005265,0x00030005,0x0000014e, + 0x00004765,0x00030005,0x00000151,0x00004265,0x00030005,0x00000154,0x00005266,0x00030005, + 0x00000157,0x00004766,0x00030005,0x0000015a,0x00004266,0x00030005,0x0000015d,0x00005268, + 0x00030005,0x00000160,0x00004768,0x00030005,0x00000163,0x00004268,0x00040005,0x00000166, + 0x61726170,0x0000006d,0x00040005,0x00000168,0x61726170,0x0000006d,0x00040005,0x0000016a, + 0x61726170,0x0000006d,0x00040005,0x00000170,0x61726170,0x0000006d,0x00040005,0x00000172, + 0x61726170,0x0000006d,0x00040005,0x00000174,0x61726170,0x0000006d,0x00040005,0x0000017a, + 0x61726170,0x0000006d,0x00040005,0x0000017c,0x61726170,0x0000006d,0x00040005,0x0000017e, + 0x61726170,0x0000006d,0x00040005,0x00000184,0x61726170,0x0000006d,0x00040005,0x00000186, + 0x61726170,0x0000006d,0x00040005,0x00000188,0x61726170,0x0000006d,0x00040005,0x0000018e, + 0x61726170,0x0000006d,0x00040005,0x00000190,0x61726170,0x0000006d,0x00040005,0x00000192, + 0x61726170,0x0000006d,0x00030005,0x00000198,0x00004c62,0x00030005,0x000001a1,0x00004c64, + 0x00030005,0x000001a9,0x00004c65,0x00030005,0x000001b1,0x00004c66,0x00030005,0x000001b9, + 0x00004c68,0x00030005,0x000001c1,0x00007a6e,0x00040005,0x000001d2,0x61726170,0x0000006d, + 0x00040005,0x000001d4,0x61726170,0x0000006d,0x00040005,0x000001d6,0x61726170,0x0000006d, + 0x00040005,0x000001d9,0x61726170,0x0000006d,0x00040005,0x000001da,0x61726170,0x0000006d, + 0x00040005,0x000001dc,0x61726170,0x0000006d,0x00040005,0x000001df,0x61726170,0x0000006d, + 0x00040005,0x000001e1,0x61726170,0x0000006d,0x00040005,0x000001e3,0x61726170,0x0000006d, + 0x00040005,0x000001e6,0x61726170,0x0000006d,0x00040005,0x000001e7,0x61726170,0x0000006d, + 0x00040005,0x000001e9,0x61726170,0x0000006d,0x00040005,0x000001ed,0x61726170,0x0000006d, + 0x00040005,0x000001f0,0x61726170,0x0000006d,0x00040005,0x000001f6,0x52346e6d,0x00000000, + 0x00040005,0x000001f7,0x61726170,0x0000006d,0x00040005,0x000001f9,0x61726170,0x0000006d, + 0x00040005,0x000001fb,0x61726170,0x0000006d,0x00040005,0x000001fe,0x61726170,0x0000006d, + 0x00040005,0x000001ff,0x61726170,0x0000006d,0x00040005,0x00000202,0x47346e6d,0x00000000, + 0x00040005,0x00000203,0x61726170,0x0000006d,0x00040005,0x00000205,0x61726170,0x0000006d, + 0x00040005,0x00000207,0x61726170,0x0000006d,0x00040005,0x0000020a,0x61726170,0x0000006d, + 0x00040005,0x0000020b,0x61726170,0x0000006d,0x00040005,0x0000020e,0x42346e6d,0x00000000, + 0x00040005,0x0000020f,0x61726170,0x0000006d,0x00040005,0x00000211,0x61726170,0x0000006d, + 0x00040005,0x00000213,0x61726170,0x0000006d,0x00040005,0x00000216,0x61726170,0x0000006d, + 0x00040005,0x00000217,0x61726170,0x0000006d,0x00040005,0x0000021a,0x5234786d,0x00000000, + 0x00040005,0x0000021b,0x61726170,0x0000006d,0x00040005,0x0000021d,0x61726170,0x0000006d, + 0x00040005,0x0000021f,0x61726170,0x0000006d,0x00040005,0x00000224,0x4734786d,0x00000000, + 0x00040005,0x00000225,0x61726170,0x0000006d,0x00040005,0x00000227,0x61726170,0x0000006d, + 0x00040005,0x00000229,0x61726170,0x0000006d,0x00040005,0x0000022e,0x4234786d,0x00000000, + 0x00040005,0x0000022f,0x61726170,0x0000006d,0x00040005,0x00000231,0x61726170,0x0000006d, + 0x00040005,0x00000233,0x61726170,0x0000006d,0x00040005,0x0000023a,0x6b616570,0x00000043, + 0x00040005,0x0000023d,0x4d746968,0x00526e69,0x00040005,0x00000242,0x61726170,0x0000006d, + 0x00040005,0x00000245,0x4d746968,0x00476e69,0x00040005,0x00000249,0x61726170,0x0000006d, + 0x00040005,0x0000024c,0x4d746968,0x00426e69,0x00040005,0x00000250,0x61726170,0x0000006d, + 0x00040005,0x00000253,0x4d746968,0x00527861,0x00040005,0x0000025d,0x61726170,0x0000006d, + 0x00040005,0x00000260,0x4d746968,0x00477861,0x00040005,0x0000026a,0x61726170,0x0000006d, + 0x00040005,0x0000026d,0x4d746968,0x00427861,0x00040005,0x00000277,0x61726170,0x0000006d, + 0x00040005,0x0000027a,0x65626f6c,0x00000052,0x00040005,0x0000027f,0x65626f6c,0x00000047, + 0x00040005,0x00000284,0x65626f6c,0x00000042,0x00040005,0x00000289,0x65626f6c,0x00000000, + 0x00040005,0x0000028b,0x61726170,0x0000006d,0x00040005,0x0000028d,0x61726170,0x0000006d, + 0x00040005,0x0000028f,0x61726170,0x0000006d,0x00040005,0x00000292,0x61726170,0x0000006d, + 0x00040005,0x00000293,0x61726170,0x0000006d,0x00040005,0x00000296,0x61726170,0x0000006d, + 0x00040005,0x0000029e,0x4c706372,0x00000000,0x00040005,0x000002a2,0x61726170,0x0000006d, + 0x00030005,0x000002de,0x00000063,0x00040005,0x000002e0,0x61726170,0x0000006d,0x00040005, + 0x000002e1,0x61726170,0x0000006d,0x00040005,0x000002e2,0x61726170,0x0000006d,0x00040005, + 0x000002e3,0x61726170,0x0000006d,0x00040005,0x000002e5,0x61726170,0x0000006d,0x00040005, + 0x000002f1,0x61726170,0x0000006d,0x00040005,0x000002f3,0x61726170,0x0000006d,0x00030005, + 0x000002f6,0x00797867,0x00040005,0x000002f7,0x61726170,0x0000006d,0x00040005,0x00000305, + 0x61726170,0x0000006d,0x00040005,0x0000030d,0x61726170,0x0000006d,0x00040005,0x00000314, + 0x61726170,0x0000006d,0x00040005,0x0000031b,0x61726170,0x0000006d,0x00080005,0x0000031e, + 0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163,0x44496e6f,0x00000000,0x00060005,0x0000031f, + 0x575f6c67,0x476b726f,0x70756f72,0x00004449,0x00080005,0x00000320,0x475f6c67,0x61626f6c, + 0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00040005,0x00000321,0x61726170,0x0000006d, + 0x00040005,0x00000323,0x61726170,0x0000006d,0x00040005,0x00000325,0x61726170,0x0000006d, + 0x00070005,0x0000032b,0x53466263,0x50553352,0x4c414353,0x745f5245,0x00000000,0x00060006, + 0x0000032b,0x00000000,0x6e655269,0x53726564,0x00657a69,0x000a0006,0x0000032b,0x00000001, + 0x65725069,0x756f6976,0x61724673,0x6552656d,0x7265646e,0x657a6953,0x00000000,0x00070006, + 0x0000032b,0x00000002,0x73705569,0x656c6163,0x657a6953,0x00000000,0x000a0006,0x0000032b, + 0x00000003,0x65725069,0x756f6976,0x61724673,0x7055656d,0x6c616373,0x7a695365,0x00000065, + 0x00070006,0x0000032b,0x00000004,0x78614d69,0x646e6552,0x69537265,0x0000657a,0x00070006, + 0x0000032b,0x00000005,0x78614d69,0x63737055,0x53656c61,0x00657a69,0x00080006,0x0000032b, + 0x00000006,0x76654466,0x54656369,0x6569566f,0x70654477,0x00006874,0x00050006,0x0000032b, + 0x00000007,0x74694a66,0x00726574,0x00090006,0x0000032b,0x00000008,0x65725066,0x756f6976, + 0x61724673,0x694a656d,0x72657474,0x00000000,0x00080006,0x0000032b,0x00000009,0x746f4d66, + 0x566e6f69,0x6f746365,0x61635372,0x0000656c,0x00080006,0x0000032b,0x0000000a,0x776f4466, + 0x6163736e,0x6146656c,0x726f7463,0x00000000,0x000b0006,0x0000032b,0x0000000b,0x746f4d66, + 0x566e6f69,0x6f746365,0x74694a72,0x43726574,0x65636e61,0x74616c6c,0x006e6f69,0x00060006, + 0x0000032b,0x0000000c,0x6e615466,0x666c6148,0x00564f46,0x00090006,0x0000032b,0x0000000d, + 0x74694a66,0x53726574,0x65757165,0x4c65636e,0x74676e65,0x00000068,0x00060006,0x0000032b, + 0x0000000e,0x6c654466,0x69546174,0x0000656d,0x00080006,0x0000032b,0x0000000f,0x6c654466, + 0x72506174,0x70784565,0x7275736f,0x00000065,0x000a0006,0x0000032b,0x00000010,0x65695666, + 0x61705377,0x6f546563,0x6574654d,0x61467372,0x726f7463,0x00000000,0x00060006,0x0000032b, + 0x00000011,0x61724666,0x6e49656d,0x00786564,0x00070006,0x0000032b,0x00000012,0x6c655666, + 0x7469636f,0x63614679,0x00726f74,0x00080006,0x0000032b,0x00000013,0x61655266,0x76697463, + 0x73656e65,0x61635373,0x0000656c,0x00080006,0x0000032b,0x00000014,0x61685366,0x676e6964, + 0x6e616843,0x63536567,0x00656c61,0x000a0006,0x0000032b,0x00000015,0x63634166,0x6c756d75, + 0x6f697461,0x6464416e,0x65506465,0x61724672,0x0000656d,0x000b0006,0x0000032b,0x00000016, + 0x6e694d66,0x6f736944,0x756c6363,0x6e6f6973,0x75636341,0x616c756d,0x6e6f6974,0x00000000, + 0x00060005,0x0000032d,0x53466263,0x70553352,0x6c616373,0x00007265,0x00060005,0x00000330, + 0x6f505f73,0x43746e69,0x706d616c,0x00000000,0x00060005,0x00000331,0x694c5f73,0x7261656e, + 0x6d616c43,0x00000070,0x00030047,0x000000d1,0x00000002,0x00050048,0x000000d1,0x00000000, + 0x00000023,0x00000000,0x00040047,0x000000d3,0x00000021,0x00000004,0x00040047,0x000000d3, + 0x00000022,0x00000000,0x00040047,0x000000db,0x00000021,0x00000001,0x00040047,0x000000db, + 0x00000022,0x00000000,0x00030047,0x000000e3,0x00000019,0x00040047,0x000000e3,0x00000021, + 0x00000002,0x00040047,0x000000e3,0x00000022,0x00000000,0x00040047,0x000000ec,0x00000021, + 0x00000000,0x00040047,0x000000ec,0x00000022,0x00000000,0x00040047,0x0000031e,0x0000000b, + 0x0000001b,0x00040047,0x0000031f,0x0000000b,0x0000001a,0x00040047,0x00000320,0x0000000b, + 0x0000001c,0x00030047,0x0000032b,0x00000002,0x00050048,0x0000032b,0x00000000,0x00000023, + 0x00000000,0x00050048,0x0000032b,0x00000001,0x00000023,0x00000008,0x00050048,0x0000032b, + 0x00000002,0x00000023,0x00000010,0x00050048,0x0000032b,0x00000003,0x00000023,0x00000018, + 0x00050048,0x0000032b,0x00000004,0x00000023,0x00000020,0x00050048,0x0000032b,0x00000005, + 0x00000023,0x00000028,0x00050048,0x0000032b,0x00000006,0x00000023,0x00000030,0x00050048, + 0x0000032b,0x00000007,0x00000023,0x00000040,0x00050048,0x0000032b,0x00000008,0x00000023, + 0x00000048,0x00050048,0x0000032b,0x00000009,0x00000023,0x00000050,0x00050048,0x0000032b, + 0x0000000a,0x00000023,0x00000058,0x00050048,0x0000032b,0x0000000b,0x00000023,0x00000060, + 0x00050048,0x0000032b,0x0000000c,0x00000023,0x00000068,0x00050048,0x0000032b,0x0000000d, + 0x00000023,0x0000006c,0x00050048,0x0000032b,0x0000000e,0x00000023,0x00000070,0x00050048, + 0x0000032b,0x0000000f,0x00000023,0x00000074,0x00050048,0x0000032b,0x00000010,0x00000023, + 0x00000078,0x00050048,0x0000032b,0x00000011,0x00000023,0x0000007c,0x00050048,0x0000032b, + 0x00000012,0x00000023,0x00000080,0x00050048,0x0000032b,0x00000013,0x00000023,0x00000084, + 0x00050048,0x0000032b,0x00000014,0x00000023,0x00000088,0x00050048,0x0000032b,0x00000015, + 0x00000023,0x0000008c,0x00050048,0x0000032b,0x00000016,0x00000023,0x00000090,0x00040047, + 0x0000032d,0x00000021,0x00000003,0x00040047,0x0000032d,0x00000022,0x00000000,0x00040047, + 0x00000330,0x00000021,0x000003e8,0x00040047,0x00000330,0x00000022,0x00000000,0x00040047, + 0x00000331,0x00000021,0x000003e9,0x00040047,0x00000331,0x00000022,0x00000000,0x00040047, + 0x0000033c,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002, + 0x00040015,0x00000006,0x00000020,0x00000000,0x00040020,0x00000007,0x00000007,0x00000006, + 0x00030016,0x00000008,0x00000020,0x00040021,0x00000009,0x00000008,0x00000007,0x00040020, + 0x0000000d,0x00000007,0x00000008,0x00040021,0x0000000e,0x00000006,0x0000000d,0x00060021, + 0x00000012,0x00000006,0x00000007,0x00000007,0x00000007,0x00060021,0x0000001d,0x00000008, + 0x0000000d,0x0000000d,0x0000000d,0x00040021,0x00000028,0x00000008,0x0000000d,0x00050021, + 0x0000002f,0x00000008,0x0000000d,0x0000000d,0x00040017,0x00000037,0x00000006,0x00000002, + 0x00040021,0x00000038,0x00000037,0x00000007,0x00040017,0x0000003c,0x00000006,0x00000004, + 0x00030021,0x0000003d,0x0000003c,0x00040015,0x00000040,0x00000020,0x00000001,0x00040017, + 0x00000041,0x00000040,0x00000002,0x00040020,0x00000042,0x00000007,0x00000041,0x00040017, + 0x00000043,0x00000008,0x00000004,0x00040021,0x00000044,0x00000043,0x00000042,0x00040017, + 0x00000048,0x00000008,0x00000003,0x00040020,0x00000049,0x00000007,0x00000048,0x00050021, + 0x0000004a,0x00000002,0x00000042,0x00000049,0x00030021,0x0000004f,0x00000008,0x00040020, + 0x00000052,0x00000007,0x00000037,0x00050021,0x00000053,0x00000002,0x00000052,0x00000049, + 0x00060021,0x0000005b,0x00000002,0x0000000d,0x0000000d,0x0000000d,0x00040020,0x00000061, + 0x00000007,0x0000003c,0x00080021,0x00000062,0x00000002,0x0000000d,0x0000000d,0x0000000d, + 0x00000052,0x00000061,0x00040021,0x0000006a,0x00000002,0x00000052,0x00040017,0x0000006e, + 0x00000006,0x00000003,0x00040020,0x0000006f,0x00000007,0x0000006e,0x00060021,0x00000070, + 0x00000002,0x0000006f,0x0000006f,0x0000006f,0x0004002b,0x00000040,0x00000088,0x00000000, + 0x0004002b,0x00000008,0x0000009c,0x3f800000,0x0004002b,0x00000008,0x000000a2,0x00000000, + 0x0004002b,0x00000006,0x000000ac,0x7ef19fff,0x0004002b,0x00000008,0x000000b8,0x40000000, + 0x0004002b,0x00000006,0x000000bd,0x00000001,0x0004002b,0x00000006,0x000000be,0x00000003, + 0x0003001e,0x000000d1,0x0000003c,0x00040020,0x000000d2,0x00000002,0x000000d1,0x0004003b, + 0x000000d2,0x000000d3,0x00000002,0x00040020,0x000000d4,0x00000002,0x0000003c,0x00090019, + 0x000000d9,0x00000008,0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000, + 0x00040020,0x000000da,0x00000000,0x000000d9,0x0004003b,0x000000da,0x000000db,0x00000000, + 0x00090019,0x000000e1,0x00000008,0x00000001,0x00000000,0x00000000,0x00000000,0x00000002, + 0x00000000,0x00040020,0x000000e2,0x00000000,0x000000e1,0x0004003b,0x000000e2,0x000000e3, + 0x00000000,0x0004003b,0x000000da,0x000000ec,0x00000000,0x0005002c,0x00000041,0x000000ee, + 0x00000088,0x00000088,0x0004002b,0x00000006,0x000000f0,0x00000000,0x00020014,0x000000f3, + 0x00040020,0x00000100,0x00000007,0x00000043,0x0004002b,0x00000006,0x0000010d,0x00000002, + 0x0004002b,0x00000040,0x00000118,0xffffffff,0x0005002c,0x00000041,0x00000119,0x00000088, + 0x00000118,0x0005002c,0x00000041,0x00000120,0x00000118,0x00000088,0x0004002b,0x00000040, + 0x0000012c,0x00000001,0x0005002c,0x00000041,0x0000012d,0x0000012c,0x00000088,0x0005002c, + 0x00000041,0x00000134,0x00000088,0x0000012c,0x0004002b,0x00000008,0x0000019a,0x3f000000, + 0x0004002b,0x00000008,0x000001c2,0x3e800000,0x0004002b,0x00000008,0x000001f2,0xbf000000, + 0x00040017,0x00000238,0x00000008,0x00000002,0x00040020,0x00000239,0x00000007,0x00000238, + 0x0004002b,0x00000008,0x0000023b,0xc0800000,0x0005002c,0x00000238,0x0000023c,0x0000009c, + 0x0000023b,0x0004002b,0x00000008,0x0000023f,0x40800000,0x0004002b,0x00000008,0x0000028a, + 0xbe400000,0x0004002b,0x00000006,0x000002fd,0x00000004,0x0004002b,0x00000006,0x00000307, + 0x00000008,0x00040020,0x0000031d,0x00000001,0x0000006e,0x0004003b,0x0000031d,0x0000031e, + 0x00000001,0x0004003b,0x0000031d,0x0000031f,0x00000001,0x0004003b,0x0000031d,0x00000320, + 0x00000001,0x0004002b,0x00000008,0x00000328,0x387fda40,0x0004002b,0x00000008,0x00000329, + 0x477fe000,0x0004002b,0x00000008,0x0000032a,0x37801002,0x0019001e,0x0000032b,0x00000041, + 0x00000041,0x00000041,0x00000041,0x00000041,0x00000041,0x00000043,0x00000238,0x00000238, + 0x00000238,0x00000238,0x00000238,0x00000008,0x00000008,0x00000008,0x00000008,0x00000008, + 0x00000008,0x00000008,0x00000008,0x00000008,0x00000008,0x00000008,0x00040020,0x0000032c, + 0x00000002,0x0000032b,0x0004003b,0x0000032c,0x0000032d,0x00000002,0x0002001a,0x0000032e, + 0x00040020,0x0000032f,0x00000000,0x0000032e,0x0004003b,0x0000032f,0x00000330,0x00000000, + 0x0004003b,0x0000032f,0x00000331,0x00000000,0x0004002b,0x00000008,0x00000332,0x7f7fffff, + 0x0004002b,0x00000008,0x00000333,0x00800000,0x0004002b,0x00000008,0x00000334,0x3a1fe868, + 0x0004002b,0x00000008,0x00000335,0x3d800000,0x0004002b,0x00000008,0x00000336,0x3d3d70a4, + 0x0004002b,0x00000008,0x00000337,0x3e400000,0x0004002b,0x00000040,0x00000338,0x00000002, + 0x0004002b,0x00000040,0x00000339,0x00000003,0x0004002b,0x00000008,0x0000033a,0x461c4000, + 0x0004002b,0x00000006,0x0000033b,0x00000040,0x0006002c,0x0000006e,0x0000033c,0x0000033b, + 0x000000bd,0x000000bd,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8, + 0x00000005,0x0004003b,0x0000006f,0x00000321,0x00000007,0x0004003b,0x0000006f,0x00000323, + 0x00000007,0x0004003b,0x0000006f,0x00000325,0x00000007,0x0004003d,0x0000006e,0x00000322, + 0x0000031e,0x0003003e,0x00000321,0x00000322,0x0004003d,0x0000006e,0x00000324,0x0000031f, + 0x0003003e,0x00000323,0x00000324,0x0004003d,0x0000006e,0x00000326,0x00000320,0x0003003e, + 0x00000325,0x00000326,0x00070039,0x00000002,0x00000327,0x00000074,0x00000321,0x00000323, + 0x00000325,0x000100fd,0x00010038,0x00050036,0x00000008,0x0000000b,0x00000000,0x00000009, + 0x00030037,0x00000007,0x0000000a,0x000200f8,0x0000000c,0x0004003d,0x00000006,0x00000076, + 0x0000000a,0x0004007c,0x00000008,0x00000077,0x00000076,0x000200fe,0x00000077,0x00010038, + 0x00050036,0x00000006,0x00000010,0x00000000,0x0000000e,0x00030037,0x0000000d,0x0000000f, + 0x000200f8,0x00000011,0x0004003d,0x00000008,0x0000007a,0x0000000f,0x0004007c,0x00000006, + 0x0000007b,0x0000007a,0x000200fe,0x0000007b,0x00010038,0x00050036,0x00000006,0x00000016, + 0x00000000,0x00000012,0x00030037,0x00000007,0x00000013,0x00030037,0x00000007,0x00000014, + 0x00030037,0x00000007,0x00000015,0x000200f8,0x00000017,0x0004003d,0x00000006,0x0000007e, + 0x00000013,0x0004003d,0x00000006,0x0000007f,0x00000014,0x0004007c,0x00000040,0x00000080, + 0x0000007f,0x0004003d,0x00000006,0x00000081,0x00000015,0x0004007c,0x00000040,0x00000082, + 0x00000081,0x000600cb,0x00000006,0x00000083,0x0000007e,0x00000080,0x00000082,0x000200fe, + 0x00000083,0x00010038,0x00050036,0x00000006,0x0000001b,0x00000000,0x00000012,0x00030037, + 0x00000007,0x00000018,0x00030037,0x00000007,0x00000019,0x00030037,0x00000007,0x0000001a, + 0x000200f8,0x0000001c,0x0004003d,0x00000006,0x00000086,0x00000018,0x0004003d,0x00000006, + 0x00000087,0x00000019,0x0004003d,0x00000006,0x00000089,0x0000001a,0x0004007c,0x00000040, + 0x0000008a,0x00000089,0x000700c9,0x00000006,0x0000008b,0x00000086,0x00000087,0x00000088, + 0x0000008a,0x000200fe,0x0000008b,0x00010038,0x00050036,0x00000008,0x00000021,0x00000000, + 0x0000001d,0x00030037,0x0000000d,0x0000001e,0x00030037,0x0000000d,0x0000001f,0x00030037, + 0x0000000d,0x00000020,0x000200f8,0x00000022,0x0004003d,0x00000008,0x0000008e,0x0000001e, + 0x0004003d,0x00000008,0x0000008f,0x0000001f,0x0004003d,0x00000008,0x00000090,0x00000020, + 0x0007000c,0x00000008,0x00000091,0x00000001,0x00000028,0x0000008f,0x00000090,0x0007000c, + 0x00000008,0x00000092,0x00000001,0x00000028,0x0000008e,0x00000091,0x000200fe,0x00000092, + 0x00010038,0x00050036,0x00000008,0x00000026,0x00000000,0x0000001d,0x00030037,0x0000000d, + 0x00000023,0x00030037,0x0000000d,0x00000024,0x00030037,0x0000000d,0x00000025,0x000200f8, + 0x00000027,0x0004003d,0x00000008,0x00000095,0x00000023,0x0004003d,0x00000008,0x00000096, + 0x00000024,0x0004003d,0x00000008,0x00000097,0x00000025,0x0007000c,0x00000008,0x00000098, + 0x00000001,0x00000025,0x00000096,0x00000097,0x0007000c,0x00000008,0x00000099,0x00000001, + 0x00000025,0x00000095,0x00000098,0x000200fe,0x00000099,0x00010038,0x00050036,0x00000008, + 0x0000002a,0x00000000,0x00000028,0x00030037,0x0000000d,0x00000029,0x000200f8,0x0000002b, + 0x0004003d,0x00000008,0x0000009d,0x00000029,0x00050088,0x00000008,0x0000009e,0x0000009c, + 0x0000009d,0x000200fe,0x0000009e,0x00010038,0x00050036,0x00000008,0x0000002d,0x00000000, + 0x00000028,0x00030037,0x0000000d,0x0000002c,0x000200f8,0x0000002e,0x0004003d,0x00000008, + 0x000000a1,0x0000002c,0x0008000c,0x00000008,0x000000a3,0x00000001,0x0000002b,0x000000a1, + 0x000000a2,0x0000009c,0x000200fe,0x000000a3,0x00010038,0x00050036,0x00000008,0x00000032, + 0x00000000,0x0000002f,0x00030037,0x0000000d,0x00000030,0x00030037,0x0000000d,0x00000031, + 0x000200f8,0x00000033,0x0004003d,0x00000008,0x000000a6,0x00000030,0x0004003d,0x00000008, + 0x000000a7,0x00000031,0x0007000c,0x00000008,0x000000a8,0x00000001,0x00000025,0x000000a6, + 0x000000a7,0x000200fe,0x000000a8,0x00010038,0x00050036,0x00000008,0x00000035,0x00000000, + 0x00000028,0x00030037,0x0000000d,0x00000034,0x000200f8,0x00000036,0x0004003b,0x0000000d, + 0x000000ab,0x00000007,0x0004003b,0x0000000d,0x000000ad,0x00000007,0x0004003b,0x00000007, + 0x000000b1,0x00000007,0x0004003d,0x00000008,0x000000ae,0x00000034,0x0003003e,0x000000ad, + 0x000000ae,0x00050039,0x00000006,0x000000af,0x00000010,0x000000ad,0x00050082,0x00000006, + 0x000000b0,0x000000ac,0x000000af,0x0003003e,0x000000b1,0x000000b0,0x00050039,0x00000008, + 0x000000b2,0x0000000b,0x000000b1,0x0003003e,0x000000ab,0x000000b2,0x0004003d,0x00000008, + 0x000000b3,0x000000ab,0x0004003d,0x00000008,0x000000b4,0x000000ab,0x0004007f,0x00000008, + 0x000000b5,0x000000b4,0x0004003d,0x00000008,0x000000b6,0x00000034,0x00050085,0x00000008, + 0x000000b7,0x000000b5,0x000000b6,0x00050081,0x00000008,0x000000b9,0x000000b7,0x000000b8, + 0x00050085,0x00000008,0x000000ba,0x000000b3,0x000000b9,0x000200fe,0x000000ba,0x00010038, + 0x00050036,0x00000037,0x0000003a,0x00000000,0x00000038,0x00030037,0x00000007,0x00000039, + 0x000200f8,0x0000003b,0x0004003b,0x00000007,0x000000bf,0x00000007,0x0004003b,0x00000007, + 0x000000c1,0x00000007,0x0004003b,0x00000007,0x000000c2,0x00000007,0x0004003b,0x00000007, + 0x000000c4,0x00000007,0x0004003b,0x00000007,0x000000c6,0x00000007,0x0004003b,0x00000007, + 0x000000c7,0x00000007,0x0004003b,0x00000007,0x000000c9,0x00000007,0x0004003b,0x00000007, + 0x000000ca,0x00000007,0x0004003b,0x00000007,0x000000cc,0x00000007,0x0004003d,0x00000006, + 0x000000c0,0x00000039,0x0003003e,0x000000bf,0x000000c0,0x0003003e,0x000000c1,0x000000bd, + 0x0003003e,0x000000c2,0x000000be,0x00070039,0x00000006,0x000000c3,0x00000016,0x000000bf, + 0x000000c1,0x000000c2,0x0004003d,0x00000006,0x000000c5,0x00000039,0x0003003e,0x000000c4, + 0x000000c5,0x0003003e,0x000000c6,0x000000be,0x0003003e,0x000000c7,0x000000be,0x00070039, + 0x00000006,0x000000c8,0x00000016,0x000000c4,0x000000c6,0x000000c7,0x0003003e,0x000000c9, + 0x000000c8,0x0004003d,0x00000006,0x000000cb,0x00000039,0x0003003e,0x000000ca,0x000000cb, + 0x0003003e,0x000000cc,0x000000bd,0x00070039,0x00000006,0x000000cd,0x0000001b,0x000000c9, + 0x000000ca,0x000000cc,0x00050050,0x00000037,0x000000ce,0x000000c3,0x000000cd,0x000200fe, + 0x000000ce,0x00010038,0x00050036,0x0000003c,0x0000003e,0x00000000,0x0000003d,0x000200f8, + 0x0000003f,0x00050041,0x000000d4,0x000000d5,0x000000d3,0x00000088,0x0004003d,0x0000003c, + 0x000000d6,0x000000d5,0x000200fe,0x000000d6,0x00010038,0x00050036,0x00000043,0x00000046, + 0x00000000,0x00000044,0x00030037,0x00000042,0x00000045,0x000200f8,0x00000047,0x0004003d, + 0x000000d9,0x000000dc,0x000000db,0x0004003d,0x00000041,0x000000dd,0x00000045,0x0007005f, + 0x00000043,0x000000de,0x000000dc,0x000000dd,0x00000002,0x00000088,0x000200fe,0x000000de, + 0x00010038,0x00050036,0x00000002,0x0000004d,0x00000000,0x0000004a,0x00030037,0x00000042, + 0x0000004b,0x00030037,0x00000049,0x0000004c,0x000200f8,0x0000004e,0x0004003d,0x000000e1, + 0x000000e4,0x000000e3,0x0004003d,0x00000041,0x000000e5,0x0000004b,0x0004003d,0x00000048, + 0x000000e6,0x0000004c,0x00050051,0x00000008,0x000000e7,0x000000e6,0x00000000,0x00050051, + 0x00000008,0x000000e8,0x000000e6,0x00000001,0x00050051,0x00000008,0x000000e9,0x000000e6, + 0x00000002,0x00070050,0x00000043,0x000000ea,0x000000e7,0x000000e8,0x000000e9,0x0000009c, + 0x00040063,0x000000e4,0x000000e5,0x000000ea,0x000100fd,0x00010038,0x00050036,0x00000008, + 0x00000050,0x00000000,0x0000004f,0x000200f8,0x00000051,0x0004003b,0x0000000d,0x000000eb, + 0x00000007,0x0004003d,0x000000d9,0x000000ed,0x000000ec,0x0007005f,0x00000043,0x000000ef, + 0x000000ed,0x000000ee,0x00000002,0x00000088,0x00050051,0x00000008,0x000000f1,0x000000ef, + 0x00000000,0x0003003e,0x000000eb,0x000000f1,0x0004003d,0x00000008,0x000000f2,0x000000eb, + 0x000500b4,0x000000f3,0x000000f4,0x000000f2,0x000000a2,0x000300f7,0x000000f6,0x00000000, + 0x000400fa,0x000000f4,0x000000f5,0x000000f6,0x000200f8,0x000000f5,0x0003003e,0x000000eb, + 0x0000009c,0x000200f9,0x000000f6,0x000200f8,0x000000f6,0x0004003d,0x00000008,0x000000f7, + 0x000000eb,0x000200fe,0x000000f7,0x00010038,0x00050036,0x00000002,0x00000056,0x00000000, + 0x00000053,0x00030037,0x00000052,0x00000054,0x00030037,0x00000049,0x00000055,0x000200f8, + 0x00000057,0x0004003b,0x00000042,0x000000fc,0x00000007,0x0004003b,0x00000049,0x000000fd, + 0x00000007,0x0004003d,0x00000037,0x000000fa,0x00000054,0x0004007c,0x00000041,0x000000fb, + 0x000000fa,0x0003003e,0x000000fc,0x000000fb,0x0004003d,0x00000048,0x000000fe,0x00000055, + 0x0003003e,0x000000fd,0x000000fe,0x00060039,0x00000002,0x000000ff,0x0000004d,0x000000fc, + 0x000000fd,0x000100fd,0x00010038,0x00050036,0x00000043,0x00000059,0x00000000,0x00000044, + 0x00030037,0x00000042,0x00000058,0x000200f8,0x0000005a,0x0004003b,0x00000100,0x00000101, + 0x00000007,0x0004003b,0x00000042,0x00000102,0x00000007,0x0004003d,0x00000041,0x00000103, + 0x00000058,0x0003003e,0x00000102,0x00000103,0x00050039,0x00000043,0x00000104,0x00000046, + 0x00000102,0x0003003e,0x00000101,0x00000104,0x00040039,0x00000008,0x00000105,0x00000050, + 0x0004003d,0x00000043,0x00000106,0x00000101,0x0008004f,0x00000048,0x00000107,0x00000106, + 0x00000106,0x00000000,0x00000001,0x00000002,0x0005008e,0x00000048,0x00000108,0x00000107, + 0x00000105,0x00050041,0x0000000d,0x00000109,0x00000101,0x000000f0,0x00050051,0x00000008, + 0x0000010a,0x00000108,0x00000000,0x0003003e,0x00000109,0x0000010a,0x00050041,0x0000000d, + 0x0000010b,0x00000101,0x000000bd,0x00050051,0x00000008,0x0000010c,0x00000108,0x00000001, + 0x0003003e,0x0000010b,0x0000010c,0x00050041,0x0000000d,0x0000010e,0x00000101,0x0000010d, + 0x00050051,0x00000008,0x0000010f,0x00000108,0x00000002,0x0003003e,0x0000010e,0x0000010f, + 0x0004003d,0x00000043,0x00000110,0x00000101,0x000200fe,0x00000110,0x00010038,0x00050036, + 0x00000002,0x0000005f,0x00000000,0x0000005b,0x00030037,0x0000000d,0x0000005c,0x00030037, + 0x0000000d,0x0000005d,0x00030037,0x0000000d,0x0000005e,0x000200f8,0x00000060,0x000100fd, + 0x00010038,0x00050036,0x00000002,0x00000068,0x00000000,0x00000062,0x00030037,0x0000000d, + 0x00000063,0x00030037,0x0000000d,0x00000064,0x00030037,0x0000000d,0x00000065,0x00030037, + 0x00000052,0x00000066,0x00030037,0x00000061,0x00000067,0x000200f8,0x00000069,0x0004003b, + 0x00000042,0x00000113,0x00000007,0x0004003b,0x00000049,0x00000116,0x00000007,0x0004003b, + 0x00000042,0x0000011b,0x00000007,0x0004003b,0x00000049,0x0000011e,0x00000007,0x0004003b, + 0x00000042,0x00000122,0x00000007,0x0004003b,0x00000049,0x00000125,0x00000007,0x0004003b, + 0x00000042,0x00000126,0x00000007,0x0004003b,0x00000049,0x0000012a,0x00000007,0x0004003b, + 0x00000042,0x0000012f,0x00000007,0x0004003b,0x00000049,0x00000132,0x00000007,0x0004003b, + 0x00000042,0x00000136,0x00000007,0x0004003b,0x0000000d,0x00000139,0x00000007,0x0004003b, + 0x0000000d,0x0000013c,0x00000007,0x0004003b,0x0000000d,0x0000013f,0x00000007,0x0004003b, + 0x0000000d,0x00000142,0x00000007,0x0004003b,0x0000000d,0x00000145,0x00000007,0x0004003b, + 0x0000000d,0x00000148,0x00000007,0x0004003b,0x0000000d,0x0000014b,0x00000007,0x0004003b, + 0x0000000d,0x0000014e,0x00000007,0x0004003b,0x0000000d,0x00000151,0x00000007,0x0004003b, + 0x0000000d,0x00000154,0x00000007,0x0004003b,0x0000000d,0x00000157,0x00000007,0x0004003b, + 0x0000000d,0x0000015a,0x00000007,0x0004003b,0x0000000d,0x0000015d,0x00000007,0x0004003b, + 0x0000000d,0x00000160,0x00000007,0x0004003b,0x0000000d,0x00000163,0x00000007,0x0004003b, + 0x0000000d,0x00000166,0x00000007,0x0004003b,0x0000000d,0x00000168,0x00000007,0x0004003b, + 0x0000000d,0x0000016a,0x00000007,0x0004003b,0x0000000d,0x00000170,0x00000007,0x0004003b, + 0x0000000d,0x00000172,0x00000007,0x0004003b,0x0000000d,0x00000174,0x00000007,0x0004003b, + 0x0000000d,0x0000017a,0x00000007,0x0004003b,0x0000000d,0x0000017c,0x00000007,0x0004003b, + 0x0000000d,0x0000017e,0x00000007,0x0004003b,0x0000000d,0x00000184,0x00000007,0x0004003b, + 0x0000000d,0x00000186,0x00000007,0x0004003b,0x0000000d,0x00000188,0x00000007,0x0004003b, + 0x0000000d,0x0000018e,0x00000007,0x0004003b,0x0000000d,0x00000190,0x00000007,0x0004003b, + 0x0000000d,0x00000192,0x00000007,0x0004003b,0x0000000d,0x00000198,0x00000007,0x0004003b, + 0x0000000d,0x000001a1,0x00000007,0x0004003b,0x0000000d,0x000001a9,0x00000007,0x0004003b, + 0x0000000d,0x000001b1,0x00000007,0x0004003b,0x0000000d,0x000001b9,0x00000007,0x0004003b, + 0x0000000d,0x000001c1,0x00000007,0x0004003b,0x0000000d,0x000001d2,0x00000007,0x0004003b, + 0x0000000d,0x000001d4,0x00000007,0x0004003b,0x0000000d,0x000001d6,0x00000007,0x0004003b, + 0x0000000d,0x000001d9,0x00000007,0x0004003b,0x0000000d,0x000001da,0x00000007,0x0004003b, + 0x0000000d,0x000001dc,0x00000007,0x0004003b,0x0000000d,0x000001df,0x00000007,0x0004003b, + 0x0000000d,0x000001e1,0x00000007,0x0004003b,0x0000000d,0x000001e3,0x00000007,0x0004003b, + 0x0000000d,0x000001e6,0x00000007,0x0004003b,0x0000000d,0x000001e7,0x00000007,0x0004003b, + 0x0000000d,0x000001e9,0x00000007,0x0004003b,0x0000000d,0x000001ed,0x00000007,0x0004003b, + 0x0000000d,0x000001f0,0x00000007,0x0004003b,0x0000000d,0x000001f6,0x00000007,0x0004003b, + 0x0000000d,0x000001f7,0x00000007,0x0004003b,0x0000000d,0x000001f9,0x00000007,0x0004003b, + 0x0000000d,0x000001fb,0x00000007,0x0004003b,0x0000000d,0x000001fe,0x00000007,0x0004003b, + 0x0000000d,0x000001ff,0x00000007,0x0004003b,0x0000000d,0x00000202,0x00000007,0x0004003b, + 0x0000000d,0x00000203,0x00000007,0x0004003b,0x0000000d,0x00000205,0x00000007,0x0004003b, + 0x0000000d,0x00000207,0x00000007,0x0004003b,0x0000000d,0x0000020a,0x00000007,0x0004003b, + 0x0000000d,0x0000020b,0x00000007,0x0004003b,0x0000000d,0x0000020e,0x00000007,0x0004003b, + 0x0000000d,0x0000020f,0x00000007,0x0004003b,0x0000000d,0x00000211,0x00000007,0x0004003b, + 0x0000000d,0x00000213,0x00000007,0x0004003b,0x0000000d,0x00000216,0x00000007,0x0004003b, + 0x0000000d,0x00000217,0x00000007,0x0004003b,0x0000000d,0x0000021a,0x00000007,0x0004003b, + 0x0000000d,0x0000021b,0x00000007,0x0004003b,0x0000000d,0x0000021d,0x00000007,0x0004003b, + 0x0000000d,0x0000021f,0x00000007,0x0004003b,0x0000000d,0x00000224,0x00000007,0x0004003b, + 0x0000000d,0x00000225,0x00000007,0x0004003b,0x0000000d,0x00000227,0x00000007,0x0004003b, + 0x0000000d,0x00000229,0x00000007,0x0004003b,0x0000000d,0x0000022e,0x00000007,0x0004003b, + 0x0000000d,0x0000022f,0x00000007,0x0004003b,0x0000000d,0x00000231,0x00000007,0x0004003b, + 0x0000000d,0x00000233,0x00000007,0x0004003b,0x00000239,0x0000023a,0x00000007,0x0004003b, + 0x0000000d,0x0000023d,0x00000007,0x0004003b,0x0000000d,0x00000242,0x00000007,0x0004003b, + 0x0000000d,0x00000245,0x00000007,0x0004003b,0x0000000d,0x00000249,0x00000007,0x0004003b, + 0x0000000d,0x0000024c,0x00000007,0x0004003b,0x0000000d,0x00000250,0x00000007,0x0004003b, + 0x0000000d,0x00000253,0x00000007,0x0004003b,0x0000000d,0x0000025d,0x00000007,0x0004003b, + 0x0000000d,0x00000260,0x00000007,0x0004003b,0x0000000d,0x0000026a,0x00000007,0x0004003b, + 0x0000000d,0x0000026d,0x00000007,0x0004003b,0x0000000d,0x00000277,0x00000007,0x0004003b, + 0x0000000d,0x0000027a,0x00000007,0x0004003b,0x0000000d,0x0000027f,0x00000007,0x0004003b, + 0x0000000d,0x00000284,0x00000007,0x0004003b,0x0000000d,0x00000289,0x00000007,0x0004003b, + 0x0000000d,0x0000028b,0x00000007,0x0004003b,0x0000000d,0x0000028d,0x00000007,0x0004003b, + 0x0000000d,0x0000028f,0x00000007,0x0004003b,0x0000000d,0x00000292,0x00000007,0x0004003b, + 0x0000000d,0x00000293,0x00000007,0x0004003b,0x00000007,0x00000296,0x00000007,0x0004003b, + 0x0000000d,0x0000029e,0x00000007,0x0004003b,0x0000000d,0x000002a2,0x00000007,0x0004003d, + 0x00000037,0x00000114,0x00000066,0x0004007c,0x00000041,0x00000115,0x00000114,0x0003003e, + 0x00000113,0x00000115,0x0004003d,0x00000041,0x00000117,0x00000113,0x00050080,0x00000041, + 0x0000011a,0x00000117,0x00000119,0x0003003e,0x0000011b,0x0000011a,0x00050039,0x00000043, + 0x0000011c,0x00000059,0x0000011b,0x0008004f,0x00000048,0x0000011d,0x0000011c,0x0000011c, + 0x00000000,0x00000001,0x00000002,0x0003003e,0x00000116,0x0000011d,0x0004003d,0x00000041, + 0x0000011f,0x00000113,0x00050080,0x00000041,0x00000121,0x0000011f,0x00000120,0x0003003e, + 0x00000122,0x00000121,0x00050039,0x00000043,0x00000123,0x00000059,0x00000122,0x0008004f, + 0x00000048,0x00000124,0x00000123,0x00000123,0x00000000,0x00000001,0x00000002,0x0003003e, + 0x0000011e,0x00000124,0x0004003d,0x00000041,0x00000127,0x00000113,0x0003003e,0x00000126, + 0x00000127,0x00050039,0x00000043,0x00000128,0x00000059,0x00000126,0x0008004f,0x00000048, + 0x00000129,0x00000128,0x00000128,0x00000000,0x00000001,0x00000002,0x0003003e,0x00000125, + 0x00000129,0x0004003d,0x00000041,0x0000012b,0x00000113,0x00050080,0x00000041,0x0000012e, + 0x0000012b,0x0000012d,0x0003003e,0x0000012f,0x0000012e,0x00050039,0x00000043,0x00000130, + 0x00000059,0x0000012f,0x0008004f,0x00000048,0x00000131,0x00000130,0x00000130,0x00000000, + 0x00000001,0x00000002,0x0003003e,0x0000012a,0x00000131,0x0004003d,0x00000041,0x00000133, + 0x00000113,0x00050080,0x00000041,0x00000135,0x00000133,0x00000134,0x0003003e,0x00000136, + 0x00000135,0x00050039,0x00000043,0x00000137,0x00000059,0x00000136,0x0008004f,0x00000048, + 0x00000138,0x00000137,0x00000137,0x00000000,0x00000001,0x00000002,0x0003003e,0x00000132, + 0x00000138,0x00050041,0x0000000d,0x0000013a,0x00000116,0x000000f0,0x0004003d,0x00000008, + 0x0000013b,0x0000013a,0x0003003e,0x00000139,0x0000013b,0x00050041,0x0000000d,0x0000013d, + 0x00000116,0x000000bd,0x0004003d,0x00000008,0x0000013e,0x0000013d,0x0003003e,0x0000013c, + 0x0000013e,0x00050041,0x0000000d,0x00000140,0x00000116,0x0000010d,0x0004003d,0x00000008, + 0x00000141,0x00000140,0x0003003e,0x0000013f,0x00000141,0x00050041,0x0000000d,0x00000143, + 0x0000011e,0x000000f0,0x0004003d,0x00000008,0x00000144,0x00000143,0x0003003e,0x00000142, + 0x00000144,0x00050041,0x0000000d,0x00000146,0x0000011e,0x000000bd,0x0004003d,0x00000008, + 0x00000147,0x00000146,0x0003003e,0x00000145,0x00000147,0x00050041,0x0000000d,0x00000149, + 0x0000011e,0x0000010d,0x0004003d,0x00000008,0x0000014a,0x00000149,0x0003003e,0x00000148, + 0x0000014a,0x00050041,0x0000000d,0x0000014c,0x00000125,0x000000f0,0x0004003d,0x00000008, + 0x0000014d,0x0000014c,0x0003003e,0x0000014b,0x0000014d,0x00050041,0x0000000d,0x0000014f, + 0x00000125,0x000000bd,0x0004003d,0x00000008,0x00000150,0x0000014f,0x0003003e,0x0000014e, + 0x00000150,0x00050041,0x0000000d,0x00000152,0x00000125,0x0000010d,0x0004003d,0x00000008, + 0x00000153,0x00000152,0x0003003e,0x00000151,0x00000153,0x00050041,0x0000000d,0x00000155, + 0x0000012a,0x000000f0,0x0004003d,0x00000008,0x00000156,0x00000155,0x0003003e,0x00000154, + 0x00000156,0x00050041,0x0000000d,0x00000158,0x0000012a,0x000000bd,0x0004003d,0x00000008, + 0x00000159,0x00000158,0x0003003e,0x00000157,0x00000159,0x00050041,0x0000000d,0x0000015b, + 0x0000012a,0x0000010d,0x0004003d,0x00000008,0x0000015c,0x0000015b,0x0003003e,0x0000015a, + 0x0000015c,0x00050041,0x0000000d,0x0000015e,0x00000132,0x000000f0,0x0004003d,0x00000008, + 0x0000015f,0x0000015e,0x0003003e,0x0000015d,0x0000015f,0x00050041,0x0000000d,0x00000161, + 0x00000132,0x000000bd,0x0004003d,0x00000008,0x00000162,0x00000161,0x0003003e,0x00000160, + 0x00000162,0x00050041,0x0000000d,0x00000164,0x00000132,0x0000010d,0x0004003d,0x00000008, + 0x00000165,0x00000164,0x0003003e,0x00000163,0x00000165,0x0004003d,0x00000008,0x00000167, + 0x00000139,0x0003003e,0x00000166,0x00000167,0x0004003d,0x00000008,0x00000169,0x0000013c, + 0x0003003e,0x00000168,0x00000169,0x0004003d,0x00000008,0x0000016b,0x0000013f,0x0003003e, + 0x0000016a,0x0000016b,0x00070039,0x00000002,0x0000016c,0x0000005f,0x00000166,0x00000168, + 0x0000016a,0x0004003d,0x00000008,0x0000016d,0x00000166,0x0003003e,0x00000139,0x0000016d, + 0x0004003d,0x00000008,0x0000016e,0x00000168,0x0003003e,0x0000013c,0x0000016e,0x0004003d, + 0x00000008,0x0000016f,0x0000016a,0x0003003e,0x0000013f,0x0000016f,0x0004003d,0x00000008, + 0x00000171,0x00000142,0x0003003e,0x00000170,0x00000171,0x0004003d,0x00000008,0x00000173, + 0x00000145,0x0003003e,0x00000172,0x00000173,0x0004003d,0x00000008,0x00000175,0x00000148, + 0x0003003e,0x00000174,0x00000175,0x00070039,0x00000002,0x00000176,0x0000005f,0x00000170, + 0x00000172,0x00000174,0x0004003d,0x00000008,0x00000177,0x00000170,0x0003003e,0x00000142, + 0x00000177,0x0004003d,0x00000008,0x00000178,0x00000172,0x0003003e,0x00000145,0x00000178, + 0x0004003d,0x00000008,0x00000179,0x00000174,0x0003003e,0x00000148,0x00000179,0x0004003d, + 0x00000008,0x0000017b,0x0000014b,0x0003003e,0x0000017a,0x0000017b,0x0004003d,0x00000008, + 0x0000017d,0x0000014e,0x0003003e,0x0000017c,0x0000017d,0x0004003d,0x00000008,0x0000017f, + 0x00000151,0x0003003e,0x0000017e,0x0000017f,0x00070039,0x00000002,0x00000180,0x0000005f, + 0x0000017a,0x0000017c,0x0000017e,0x0004003d,0x00000008,0x00000181,0x0000017a,0x0003003e, + 0x0000014b,0x00000181,0x0004003d,0x00000008,0x00000182,0x0000017c,0x0003003e,0x0000014e, + 0x00000182,0x0004003d,0x00000008,0x00000183,0x0000017e,0x0003003e,0x00000151,0x00000183, + 0x0004003d,0x00000008,0x00000185,0x00000154,0x0003003e,0x00000184,0x00000185,0x0004003d, + 0x00000008,0x00000187,0x00000157,0x0003003e,0x00000186,0x00000187,0x0004003d,0x00000008, + 0x00000189,0x0000015a,0x0003003e,0x00000188,0x00000189,0x00070039,0x00000002,0x0000018a, + 0x0000005f,0x00000184,0x00000186,0x00000188,0x0004003d,0x00000008,0x0000018b,0x00000184, + 0x0003003e,0x00000154,0x0000018b,0x0004003d,0x00000008,0x0000018c,0x00000186,0x0003003e, + 0x00000157,0x0000018c,0x0004003d,0x00000008,0x0000018d,0x00000188,0x0003003e,0x0000015a, + 0x0000018d,0x0004003d,0x00000008,0x0000018f,0x0000015d,0x0003003e,0x0000018e,0x0000018f, + 0x0004003d,0x00000008,0x00000191,0x00000160,0x0003003e,0x00000190,0x00000191,0x0004003d, + 0x00000008,0x00000193,0x00000163,0x0003003e,0x00000192,0x00000193,0x00070039,0x00000002, + 0x00000194,0x0000005f,0x0000018e,0x00000190,0x00000192,0x0004003d,0x00000008,0x00000195, + 0x0000018e,0x0003003e,0x0000015d,0x00000195,0x0004003d,0x00000008,0x00000196,0x00000190, + 0x0003003e,0x00000160,0x00000196,0x0004003d,0x00000008,0x00000197,0x00000192,0x0003003e, + 0x00000163,0x00000197,0x0004003d,0x00000008,0x00000199,0x0000013f,0x00050085,0x00000008, + 0x0000019b,0x00000199,0x0000019a,0x0004003d,0x00000008,0x0000019c,0x00000139,0x00050085, + 0x00000008,0x0000019d,0x0000019c,0x0000019a,0x0004003d,0x00000008,0x0000019e,0x0000013c, + 0x00050081,0x00000008,0x0000019f,0x0000019d,0x0000019e,0x00050081,0x00000008,0x000001a0, + 0x0000019b,0x0000019f,0x0003003e,0x00000198,0x000001a0,0x0004003d,0x00000008,0x000001a2, + 0x00000148,0x00050085,0x00000008,0x000001a3,0x000001a2,0x0000019a,0x0004003d,0x00000008, + 0x000001a4,0x00000142,0x00050085,0x00000008,0x000001a5,0x000001a4,0x0000019a,0x0004003d, + 0x00000008,0x000001a6,0x00000145,0x00050081,0x00000008,0x000001a7,0x000001a5,0x000001a6, + 0x00050081,0x00000008,0x000001a8,0x000001a3,0x000001a7,0x0003003e,0x000001a1,0x000001a8, + 0x0004003d,0x00000008,0x000001aa,0x00000151,0x00050085,0x00000008,0x000001ab,0x000001aa, + 0x0000019a,0x0004003d,0x00000008,0x000001ac,0x0000014b,0x00050085,0x00000008,0x000001ad, + 0x000001ac,0x0000019a,0x0004003d,0x00000008,0x000001ae,0x0000014e,0x00050081,0x00000008, + 0x000001af,0x000001ad,0x000001ae,0x00050081,0x00000008,0x000001b0,0x000001ab,0x000001af, + 0x0003003e,0x000001a9,0x000001b0,0x0004003d,0x00000008,0x000001b2,0x0000015a,0x00050085, + 0x00000008,0x000001b3,0x000001b2,0x0000019a,0x0004003d,0x00000008,0x000001b4,0x00000154, + 0x00050085,0x00000008,0x000001b5,0x000001b4,0x0000019a,0x0004003d,0x00000008,0x000001b6, + 0x00000157,0x00050081,0x00000008,0x000001b7,0x000001b5,0x000001b6,0x00050081,0x00000008, + 0x000001b8,0x000001b3,0x000001b7,0x0003003e,0x000001b1,0x000001b8,0x0004003d,0x00000008, + 0x000001ba,0x00000163,0x00050085,0x00000008,0x000001bb,0x000001ba,0x0000019a,0x0004003d, + 0x00000008,0x000001bc,0x0000015d,0x00050085,0x00000008,0x000001bd,0x000001bc,0x0000019a, + 0x0004003d,0x00000008,0x000001be,0x00000160,0x00050081,0x00000008,0x000001bf,0x000001bd, + 0x000001be,0x00050081,0x00000008,0x000001c0,0x000001bb,0x000001bf,0x0003003e,0x000001b9, + 0x000001c0,0x0004003d,0x00000008,0x000001c3,0x00000198,0x00050085,0x00000008,0x000001c4, + 0x000001c2,0x000001c3,0x0004003d,0x00000008,0x000001c5,0x000001a1,0x00050085,0x00000008, + 0x000001c6,0x000001c2,0x000001c5,0x00050081,0x00000008,0x000001c7,0x000001c4,0x000001c6, + 0x0004003d,0x00000008,0x000001c8,0x000001b1,0x00050085,0x00000008,0x000001c9,0x000001c2, + 0x000001c8,0x00050081,0x00000008,0x000001ca,0x000001c7,0x000001c9,0x0004003d,0x00000008, + 0x000001cb,0x000001b9,0x00050085,0x00000008,0x000001cc,0x000001c2,0x000001cb,0x00050081, + 0x00000008,0x000001cd,0x000001ca,0x000001cc,0x0004003d,0x00000008,0x000001ce,0x000001a9, + 0x00050083,0x00000008,0x000001cf,0x000001cd,0x000001ce,0x0003003e,0x000001c1,0x000001cf, + 0x0004003d,0x00000008,0x000001d0,0x000001c1,0x0006000c,0x00000008,0x000001d1,0x00000001, + 0x00000004,0x000001d0,0x0004003d,0x00000008,0x000001d3,0x00000198,0x0003003e,0x000001d2, + 0x000001d3,0x0004003d,0x00000008,0x000001d5,0x000001a1,0x0003003e,0x000001d4,0x000001d5, + 0x0004003d,0x00000008,0x000001d7,0x000001a9,0x0003003e,0x000001d6,0x000001d7,0x00070039, + 0x00000008,0x000001d8,0x00000021,0x000001d2,0x000001d4,0x000001d6,0x0003003e,0x000001d9, + 0x000001d8,0x0004003d,0x00000008,0x000001db,0x000001b1,0x0003003e,0x000001da,0x000001db, + 0x0004003d,0x00000008,0x000001dd,0x000001b9,0x0003003e,0x000001dc,0x000001dd,0x00070039, + 0x00000008,0x000001de,0x00000021,0x000001d9,0x000001da,0x000001dc,0x0004003d,0x00000008, + 0x000001e0,0x00000198,0x0003003e,0x000001df,0x000001e0,0x0004003d,0x00000008,0x000001e2, + 0x000001a1,0x0003003e,0x000001e1,0x000001e2,0x0004003d,0x00000008,0x000001e4,0x000001a9, + 0x0003003e,0x000001e3,0x000001e4,0x00070039,0x00000008,0x000001e5,0x00000026,0x000001df, + 0x000001e1,0x000001e3,0x0003003e,0x000001e6,0x000001e5,0x0004003d,0x00000008,0x000001e8, + 0x000001b1,0x0003003e,0x000001e7,0x000001e8,0x0004003d,0x00000008,0x000001ea,0x000001b9, + 0x0003003e,0x000001e9,0x000001ea,0x00070039,0x00000008,0x000001eb,0x00000026,0x000001e6, + 0x000001e7,0x000001e9,0x00050083,0x00000008,0x000001ec,0x000001de,0x000001eb,0x0003003e, + 0x000001ed,0x000001ec,0x00050039,0x00000008,0x000001ee,0x00000035,0x000001ed,0x00050085, + 0x00000008,0x000001ef,0x000001d1,0x000001ee,0x0003003e,0x000001f0,0x000001ef,0x00050039, + 0x00000008,0x000001f1,0x0000002d,0x000001f0,0x0003003e,0x000001c1,0x000001f1,0x0004003d, + 0x00000008,0x000001f3,0x000001c1,0x00050085,0x00000008,0x000001f4,0x000001f2,0x000001f3, + 0x00050081,0x00000008,0x000001f5,0x000001f4,0x0000009c,0x0003003e,0x000001c1,0x000001f5, + 0x0004003d,0x00000008,0x000001f8,0x00000139,0x0003003e,0x000001f7,0x000001f8,0x0004003d, + 0x00000008,0x000001fa,0x00000142,0x0003003e,0x000001f9,0x000001fa,0x0004003d,0x00000008, + 0x000001fc,0x00000154,0x0003003e,0x000001fb,0x000001fc,0x00070039,0x00000008,0x000001fd, + 0x00000026,0x000001f7,0x000001f9,0x000001fb,0x0003003e,0x000001fe,0x000001fd,0x0004003d, + 0x00000008,0x00000200,0x0000015d,0x0003003e,0x000001ff,0x00000200,0x00060039,0x00000008, + 0x00000201,0x00000032,0x000001fe,0x000001ff,0x0003003e,0x000001f6,0x00000201,0x0004003d, + 0x00000008,0x00000204,0x0000013c,0x0003003e,0x00000203,0x00000204,0x0004003d,0x00000008, + 0x00000206,0x00000145,0x0003003e,0x00000205,0x00000206,0x0004003d,0x00000008,0x00000208, + 0x00000157,0x0003003e,0x00000207,0x00000208,0x00070039,0x00000008,0x00000209,0x00000026, + 0x00000203,0x00000205,0x00000207,0x0003003e,0x0000020a,0x00000209,0x0004003d,0x00000008, + 0x0000020c,0x00000160,0x0003003e,0x0000020b,0x0000020c,0x00060039,0x00000008,0x0000020d, + 0x00000032,0x0000020a,0x0000020b,0x0003003e,0x00000202,0x0000020d,0x0004003d,0x00000008, + 0x00000210,0x0000013f,0x0003003e,0x0000020f,0x00000210,0x0004003d,0x00000008,0x00000212, + 0x00000148,0x0003003e,0x00000211,0x00000212,0x0004003d,0x00000008,0x00000214,0x0000015a, + 0x0003003e,0x00000213,0x00000214,0x00070039,0x00000008,0x00000215,0x00000026,0x0000020f, + 0x00000211,0x00000213,0x0003003e,0x00000216,0x00000215,0x0004003d,0x00000008,0x00000218, + 0x00000163,0x0003003e,0x00000217,0x00000218,0x00060039,0x00000008,0x00000219,0x00000032, + 0x00000216,0x00000217,0x0003003e,0x0000020e,0x00000219,0x0004003d,0x00000008,0x0000021c, + 0x00000139,0x0003003e,0x0000021b,0x0000021c,0x0004003d,0x00000008,0x0000021e,0x00000142, + 0x0003003e,0x0000021d,0x0000021e,0x0004003d,0x00000008,0x00000220,0x00000154,0x0003003e, + 0x0000021f,0x00000220,0x00070039,0x00000008,0x00000221,0x00000021,0x0000021b,0x0000021d, + 0x0000021f,0x0004003d,0x00000008,0x00000222,0x0000015d,0x0007000c,0x00000008,0x00000223, + 0x00000001,0x00000028,0x00000221,0x00000222,0x0003003e,0x0000021a,0x00000223,0x0004003d, + 0x00000008,0x00000226,0x0000013c,0x0003003e,0x00000225,0x00000226,0x0004003d,0x00000008, + 0x00000228,0x00000145,0x0003003e,0x00000227,0x00000228,0x0004003d,0x00000008,0x0000022a, + 0x00000157,0x0003003e,0x00000229,0x0000022a,0x00070039,0x00000008,0x0000022b,0x00000021, + 0x00000225,0x00000227,0x00000229,0x0004003d,0x00000008,0x0000022c,0x00000160,0x0007000c, + 0x00000008,0x0000022d,0x00000001,0x00000028,0x0000022b,0x0000022c,0x0003003e,0x00000224, + 0x0000022d,0x0004003d,0x00000008,0x00000230,0x0000013f,0x0003003e,0x0000022f,0x00000230, + 0x0004003d,0x00000008,0x00000232,0x00000148,0x0003003e,0x00000231,0x00000232,0x0004003d, + 0x00000008,0x00000234,0x0000015a,0x0003003e,0x00000233,0x00000234,0x00070039,0x00000008, + 0x00000235,0x00000021,0x0000022f,0x00000231,0x00000233,0x0004003d,0x00000008,0x00000236, + 0x00000163,0x0007000c,0x00000008,0x00000237,0x00000001,0x00000028,0x00000235,0x00000236, + 0x0003003e,0x0000022e,0x00000237,0x0003003e,0x0000023a,0x0000023c,0x0004003d,0x00000008, + 0x0000023e,0x000001f6,0x0004003d,0x00000008,0x00000240,0x0000021a,0x00050085,0x00000008, + 0x00000241,0x0000023f,0x00000240,0x0003003e,0x00000242,0x00000241,0x00050039,0x00000008, + 0x00000243,0x0000002a,0x00000242,0x00050085,0x00000008,0x00000244,0x0000023e,0x00000243, + 0x0003003e,0x0000023d,0x00000244,0x0004003d,0x00000008,0x00000246,0x00000202,0x0004003d, + 0x00000008,0x00000247,0x00000224,0x00050085,0x00000008,0x00000248,0x0000023f,0x00000247, + 0x0003003e,0x00000249,0x00000248,0x00050039,0x00000008,0x0000024a,0x0000002a,0x00000249, + 0x00050085,0x00000008,0x0000024b,0x00000246,0x0000024a,0x0003003e,0x00000245,0x0000024b, + 0x0004003d,0x00000008,0x0000024d,0x0000020e,0x0004003d,0x00000008,0x0000024e,0x0000022e, + 0x00050085,0x00000008,0x0000024f,0x0000023f,0x0000024e,0x0003003e,0x00000250,0x0000024f, + 0x00050039,0x00000008,0x00000251,0x0000002a,0x00000250,0x00050085,0x00000008,0x00000252, + 0x0000024d,0x00000251,0x0003003e,0x0000024c,0x00000252,0x00050041,0x0000000d,0x00000254, + 0x0000023a,0x000000f0,0x0004003d,0x00000008,0x00000255,0x00000254,0x0004003d,0x00000008, + 0x00000256,0x0000021a,0x00050083,0x00000008,0x00000257,0x00000255,0x00000256,0x0004003d, + 0x00000008,0x00000258,0x000001f6,0x00050085,0x00000008,0x00000259,0x0000023f,0x00000258, + 0x00050041,0x0000000d,0x0000025a,0x0000023a,0x000000bd,0x0004003d,0x00000008,0x0000025b, + 0x0000025a,0x00050081,0x00000008,0x0000025c,0x00000259,0x0000025b,0x0003003e,0x0000025d, + 0x0000025c,0x00050039,0x00000008,0x0000025e,0x0000002a,0x0000025d,0x00050085,0x00000008, + 0x0000025f,0x00000257,0x0000025e,0x0003003e,0x00000253,0x0000025f,0x00050041,0x0000000d, + 0x00000261,0x0000023a,0x000000f0,0x0004003d,0x00000008,0x00000262,0x00000261,0x0004003d, + 0x00000008,0x00000263,0x00000224,0x00050083,0x00000008,0x00000264,0x00000262,0x00000263, + 0x0004003d,0x00000008,0x00000265,0x00000202,0x00050085,0x00000008,0x00000266,0x0000023f, + 0x00000265,0x00050041,0x0000000d,0x00000267,0x0000023a,0x000000bd,0x0004003d,0x00000008, + 0x00000268,0x00000267,0x00050081,0x00000008,0x00000269,0x00000266,0x00000268,0x0003003e, + 0x0000026a,0x00000269,0x00050039,0x00000008,0x0000026b,0x0000002a,0x0000026a,0x00050085, + 0x00000008,0x0000026c,0x00000264,0x0000026b,0x0003003e,0x00000260,0x0000026c,0x00050041, + 0x0000000d,0x0000026e,0x0000023a,0x000000f0,0x0004003d,0x00000008,0x0000026f,0x0000026e, + 0x0004003d,0x00000008,0x00000270,0x0000022e,0x00050083,0x00000008,0x00000271,0x0000026f, + 0x00000270,0x0004003d,0x00000008,0x00000272,0x0000020e,0x00050085,0x00000008,0x00000273, + 0x0000023f,0x00000272,0x00050041,0x0000000d,0x00000274,0x0000023a,0x000000bd,0x0004003d, + 0x00000008,0x00000275,0x00000274,0x00050081,0x00000008,0x00000276,0x00000273,0x00000275, + 0x0003003e,0x00000277,0x00000276,0x00050039,0x00000008,0x00000278,0x0000002a,0x00000277, + 0x00050085,0x00000008,0x00000279,0x00000271,0x00000278,0x0003003e,0x0000026d,0x00000279, + 0x0004003d,0x00000008,0x0000027b,0x0000023d,0x0004007f,0x00000008,0x0000027c,0x0000027b, + 0x0004003d,0x00000008,0x0000027d,0x00000253,0x0007000c,0x00000008,0x0000027e,0x00000001, + 0x00000028,0x0000027c,0x0000027d,0x0003003e,0x0000027a,0x0000027e,0x0004003d,0x00000008, + 0x00000280,0x00000245,0x0004007f,0x00000008,0x00000281,0x00000280,0x0004003d,0x00000008, + 0x00000282,0x00000260,0x0007000c,0x00000008,0x00000283,0x00000001,0x00000028,0x00000281, + 0x00000282,0x0003003e,0x0000027f,0x00000283,0x0004003d,0x00000008,0x00000285,0x0000024c, + 0x0004007f,0x00000008,0x00000286,0x00000285,0x0004003d,0x00000008,0x00000287,0x0000026d, + 0x0007000c,0x00000008,0x00000288,0x00000001,0x00000028,0x00000286,0x00000287,0x0003003e, + 0x00000284,0x00000288,0x0004003d,0x00000008,0x0000028c,0x0000027a,0x0003003e,0x0000028b, + 0x0000028c,0x0004003d,0x00000008,0x0000028e,0x0000027f,0x0003003e,0x0000028d,0x0000028e, + 0x0004003d,0x00000008,0x00000290,0x00000284,0x0003003e,0x0000028f,0x00000290,0x00070039, + 0x00000008,0x00000291,0x00000021,0x0000028b,0x0000028d,0x0000028f,0x0003003e,0x00000292, + 0x00000291,0x0003003e,0x00000293,0x000000a2,0x00060039,0x00000008,0x00000294,0x00000032, + 0x00000292,0x00000293,0x0007000c,0x00000008,0x00000295,0x00000001,0x00000028,0x0000028a, + 0x00000294,0x00050041,0x00000007,0x00000297,0x00000067,0x000000f0,0x0004003d,0x00000006, + 0x00000298,0x00000297,0x0003003e,0x00000296,0x00000298,0x00050039,0x00000008,0x00000299, + 0x0000000b,0x00000296,0x00050085,0x00000008,0x0000029a,0x00000295,0x00000299,0x0003003e, + 0x00000289,0x0000029a,0x0004003d,0x00000008,0x0000029b,0x000001c1,0x0004003d,0x00000008, + 0x0000029c,0x00000289,0x00050085,0x00000008,0x0000029d,0x0000029c,0x0000029b,0x0003003e, + 0x00000289,0x0000029d,0x0004003d,0x00000008,0x0000029f,0x00000289,0x00050085,0x00000008, + 0x000002a0,0x0000023f,0x0000029f,0x00050081,0x00000008,0x000002a1,0x000002a0,0x0000009c, + 0x0003003e,0x000002a2,0x000002a1,0x00050039,0x00000008,0x000002a3,0x00000035,0x000002a2, + 0x0003003e,0x0000029e,0x000002a3,0x0004003d,0x00000008,0x000002a4,0x00000289,0x0004003d, + 0x00000008,0x000002a5,0x00000139,0x00050085,0x00000008,0x000002a6,0x000002a4,0x000002a5, + 0x0004003d,0x00000008,0x000002a7,0x00000289,0x0004003d,0x00000008,0x000002a8,0x00000142, + 0x00050085,0x00000008,0x000002a9,0x000002a7,0x000002a8,0x00050081,0x00000008,0x000002aa, + 0x000002a6,0x000002a9,0x0004003d,0x00000008,0x000002ab,0x00000289,0x0004003d,0x00000008, + 0x000002ac,0x0000015d,0x00050085,0x00000008,0x000002ad,0x000002ab,0x000002ac,0x00050081, + 0x00000008,0x000002ae,0x000002aa,0x000002ad,0x0004003d,0x00000008,0x000002af,0x00000289, + 0x0004003d,0x00000008,0x000002b0,0x00000154,0x00050085,0x00000008,0x000002b1,0x000002af, + 0x000002b0,0x00050081,0x00000008,0x000002b2,0x000002ae,0x000002b1,0x0004003d,0x00000008, + 0x000002b3,0x0000014b,0x00050081,0x00000008,0x000002b4,0x000002b2,0x000002b3,0x0004003d, + 0x00000008,0x000002b5,0x0000029e,0x00050085,0x00000008,0x000002b6,0x000002b4,0x000002b5, + 0x0003003e,0x00000063,0x000002b6,0x0004003d,0x00000008,0x000002b7,0x00000289,0x0004003d, + 0x00000008,0x000002b8,0x0000013c,0x00050085,0x00000008,0x000002b9,0x000002b7,0x000002b8, + 0x0004003d,0x00000008,0x000002ba,0x00000289,0x0004003d,0x00000008,0x000002bb,0x00000145, + 0x00050085,0x00000008,0x000002bc,0x000002ba,0x000002bb,0x00050081,0x00000008,0x000002bd, + 0x000002b9,0x000002bc,0x0004003d,0x00000008,0x000002be,0x00000289,0x0004003d,0x00000008, + 0x000002bf,0x00000160,0x00050085,0x00000008,0x000002c0,0x000002be,0x000002bf,0x00050081, + 0x00000008,0x000002c1,0x000002bd,0x000002c0,0x0004003d,0x00000008,0x000002c2,0x00000289, + 0x0004003d,0x00000008,0x000002c3,0x00000157,0x00050085,0x00000008,0x000002c4,0x000002c2, + 0x000002c3,0x00050081,0x00000008,0x000002c5,0x000002c1,0x000002c4,0x0004003d,0x00000008, + 0x000002c6,0x0000014e,0x00050081,0x00000008,0x000002c7,0x000002c5,0x000002c6,0x0004003d, + 0x00000008,0x000002c8,0x0000029e,0x00050085,0x00000008,0x000002c9,0x000002c7,0x000002c8, + 0x0003003e,0x00000064,0x000002c9,0x0004003d,0x00000008,0x000002ca,0x00000289,0x0004003d, + 0x00000008,0x000002cb,0x0000013f,0x00050085,0x00000008,0x000002cc,0x000002ca,0x000002cb, + 0x0004003d,0x00000008,0x000002cd,0x00000289,0x0004003d,0x00000008,0x000002ce,0x00000148, + 0x00050085,0x00000008,0x000002cf,0x000002cd,0x000002ce,0x00050081,0x00000008,0x000002d0, + 0x000002cc,0x000002cf,0x0004003d,0x00000008,0x000002d1,0x00000289,0x0004003d,0x00000008, + 0x000002d2,0x00000163,0x00050085,0x00000008,0x000002d3,0x000002d1,0x000002d2,0x00050081, + 0x00000008,0x000002d4,0x000002d0,0x000002d3,0x0004003d,0x00000008,0x000002d5,0x00000289, + 0x0004003d,0x00000008,0x000002d6,0x0000015a,0x00050085,0x00000008,0x000002d7,0x000002d5, + 0x000002d6,0x00050081,0x00000008,0x000002d8,0x000002d4,0x000002d7,0x0004003d,0x00000008, + 0x000002d9,0x00000151,0x00050081,0x00000008,0x000002da,0x000002d8,0x000002d9,0x0004003d, + 0x00000008,0x000002db,0x0000029e,0x00050085,0x00000008,0x000002dc,0x000002da,0x000002db, + 0x0003003e,0x00000065,0x000002dc,0x000100fd,0x00010038,0x00050036,0x00000002,0x0000006c, + 0x00000000,0x0000006a,0x00030037,0x00000052,0x0000006b,0x000200f8,0x0000006d,0x0004003b, + 0x00000049,0x000002de,0x00000007,0x0004003b,0x0000000d,0x000002e0,0x00000007,0x0004003b, + 0x0000000d,0x000002e1,0x00000007,0x0004003b,0x0000000d,0x000002e2,0x00000007,0x0004003b, + 0x00000052,0x000002e3,0x00000007,0x0004003b,0x00000061,0x000002e5,0x00000007,0x0004003b, + 0x00000052,0x000002f1,0x00000007,0x0004003b,0x00000049,0x000002f3,0x00000007,0x00040039, + 0x0000003c,0x000002df,0x0000003e,0x0004003d,0x00000037,0x000002e4,0x0000006b,0x0003003e, + 0x000002e3,0x000002e4,0x0003003e,0x000002e5,0x000002df,0x00090039,0x00000002,0x000002e6, + 0x00000068,0x000002e0,0x000002e1,0x000002e2,0x000002e3,0x000002e5,0x0004003d,0x00000008, + 0x000002e7,0x000002e0,0x00050041,0x0000000d,0x000002e8,0x000002de,0x000000f0,0x0003003e, + 0x000002e8,0x000002e7,0x0004003d,0x00000008,0x000002e9,0x000002e1,0x00050041,0x0000000d, + 0x000002ea,0x000002de,0x000000bd,0x0003003e,0x000002ea,0x000002e9,0x0004003d,0x00000008, + 0x000002eb,0x000002e2,0x00050041,0x0000000d,0x000002ec,0x000002de,0x0000010d,0x0003003e, + 0x000002ec,0x000002eb,0x00040039,0x00000008,0x000002ed,0x00000050,0x0004003d,0x00000048, + 0x000002ee,0x000002de,0x00060050,0x00000048,0x000002ef,0x000002ed,0x000002ed,0x000002ed, + 0x00050088,0x00000048,0x000002f0,0x000002ee,0x000002ef,0x0003003e,0x000002de,0x000002f0, + 0x0004003d,0x00000037,0x000002f2,0x0000006b,0x0003003e,0x000002f1,0x000002f2,0x0004003d, + 0x00000048,0x000002f4,0x000002de,0x0003003e,0x000002f3,0x000002f4,0x00060039,0x00000002, + 0x000002f5,0x00000056,0x000002f1,0x000002f3,0x000100fd,0x00010038,0x00050036,0x00000002, + 0x00000074,0x00000000,0x00000070,0x00030037,0x0000006f,0x00000071,0x00030037,0x0000006f, + 0x00000072,0x00030037,0x0000006f,0x00000073,0x000200f8,0x00000075,0x0004003b,0x00000052, + 0x000002f6,0x00000007,0x0004003b,0x00000007,0x000002f7,0x00000007,0x0004003b,0x00000052, + 0x00000305,0x00000007,0x0004003b,0x00000052,0x0000030d,0x00000007,0x0004003b,0x00000052, + 0x00000314,0x00000007,0x0004003b,0x00000052,0x0000031b,0x00000007,0x00050041,0x00000007, + 0x000002f8,0x00000071,0x000000f0,0x0004003d,0x00000006,0x000002f9,0x000002f8,0x0003003e, + 0x000002f7,0x000002f9,0x00050039,0x00000037,0x000002fa,0x0000003a,0x000002f7,0x00050041, + 0x00000007,0x000002fb,0x00000072,0x000000f0,0x0004003d,0x00000006,0x000002fc,0x000002fb, + 0x000500c4,0x00000006,0x000002fe,0x000002fc,0x000002fd,0x00050041,0x00000007,0x000002ff, + 0x00000072,0x000000bd,0x0004003d,0x00000006,0x00000300,0x000002ff,0x000500c4,0x00000006, + 0x00000301,0x00000300,0x000002fd,0x00050050,0x00000037,0x00000302,0x000002fe,0x00000301, + 0x00050080,0x00000037,0x00000303,0x000002fa,0x00000302,0x0003003e,0x000002f6,0x00000303, + 0x0004003d,0x00000037,0x00000304,0x000002f6,0x0003003e,0x00000305,0x00000304,0x00050039, + 0x00000002,0x00000306,0x0000006c,0x00000305,0x00050041,0x00000007,0x00000308,0x000002f6, + 0x000000f0,0x0004003d,0x00000006,0x00000309,0x00000308,0x00050080,0x00000006,0x0000030a, + 0x00000309,0x00000307,0x00050041,0x00000007,0x0000030b,0x000002f6,0x000000f0,0x0003003e, + 0x0000030b,0x0000030a,0x0004003d,0x00000037,0x0000030c,0x000002f6,0x0003003e,0x0000030d, + 0x0000030c,0x00050039,0x00000002,0x0000030e,0x0000006c,0x0000030d,0x00050041,0x00000007, + 0x0000030f,0x000002f6,0x000000bd,0x0004003d,0x00000006,0x00000310,0x0000030f,0x00050080, + 0x00000006,0x00000311,0x00000310,0x00000307,0x00050041,0x00000007,0x00000312,0x000002f6, + 0x000000bd,0x0003003e,0x00000312,0x00000311,0x0004003d,0x00000037,0x00000313,0x000002f6, + 0x0003003e,0x00000314,0x00000313,0x00050039,0x00000002,0x00000315,0x0000006c,0x00000314, + 0x00050041,0x00000007,0x00000316,0x000002f6,0x000000f0,0x0004003d,0x00000006,0x00000317, + 0x00000316,0x00050082,0x00000006,0x00000318,0x00000317,0x00000307,0x00050041,0x00000007, + 0x00000319,0x000002f6,0x000000f0,0x0003003e,0x00000319,0x00000318,0x0004003d,0x00000037, + 0x0000031a,0x000002f6,0x0003003e,0x0000031b,0x0000031a,0x00050039,0x00000002,0x0000031c, + 0x0000006c,0x0000031b,0x000100fd,0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_shading_change_comp_spv.h b/gpu/vk/shaders/fsr3_shading_change_comp_spv.h new file mode 100644 index 000000000..892d24cc5 --- /dev/null +++ b/gpu/vk/shaders/fsr3_shading_change_comp_spv.h @@ -0,0 +1,282 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_SHADING_CHANGE_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x0000013d,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000031,0x00020011,0x00000032,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e, + 0x00000000,0x0003000e,0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d, + 0x00000000,0x00000128,0x00060010,0x00000004,0x00000011,0x00000008,0x00000008,0x00000001, + 0x00030003,0x00000002,0x000001c2,0x000b0004,0x455f4c47,0x735f5458,0x6c706d61,0x656c7265, + 0x745f7373,0x75747865,0x665f6572,0x74636e75,0x736e6f69,0x00000000,0x000b0004,0x455f4c47, + 0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63, + 0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c, + 0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63, + 0x69645f65,0x74636572,0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005, + 0x0000000a,0x53786666,0x72757461,0x28657461,0x003b3166,0x00030005,0x00000009,0x00000078, + 0x00060005,0x00000011,0x4d786666,0x76286e69,0x763b3266,0x003b3266,0x00030005,0x0000000f, + 0x00000078,0x00030005,0x00000010,0x00000079,0x00060005,0x00000016,0x4d786666,0x66287861, + 0x31663b31,0x0000003b,0x00030005,0x00000014,0x00000078,0x00030005,0x00000015,0x00000079, + 0x00060005,0x0000001a,0x4d786666,0x76287861,0x763b3266,0x003b3266,0x00030005,0x00000018, + 0x00000078,0x00030005,0x00000019,0x00000079,0x00050005,0x0000001f,0x646e6552,0x69537265, + 0x0028657a,0x00040005,0x00000022,0x7474694a,0x00287265,0x00080005,0x00000028,0x53746547, + 0x694d4450,0x6d694470,0x69736e65,0x28736e6f,0x003b3175,0x00050005,0x00000027,0x70694d75, + 0x6576654c,0x0000006c,0x00090005,0x0000002d,0x706d6153,0x5053656c,0x70694d44,0x6576654c, + 0x6676286c,0x31753b32,0x0000003b,0x00030005,0x0000002b,0x00565566,0x00050005,0x0000002c, + 0x4c70696d,0x6c657665,0x00000000,0x00090005,0x00000033,0x726f7453,0x61685365,0x676e6964, + 0x6e616843,0x76286567,0x663b3269,0x00003b31,0x00040005,0x00000031,0x50785069,0x0000736f, + 0x00060005,0x00000032,0x61685366,0x676e6964,0x6e616843,0x00006567,0x00090005,0x00000035, + 0x64616853,0x43676e69,0x676e6168,0x6e655265,0x53726564,0x28657a69,0x00000000,0x00080005, + 0x0000003b,0x6d616c43,0x28765570,0x3b326676,0x3b326976,0x3b326976,0x00000000,0x00030005, + 0x00000038,0x00765566,0x00060005,0x00000039,0x78655469,0x65727574,0x657a6953,0x00000000, + 0x00060005,0x0000003a,0x73655269,0x6372756f,0x7a695365,0x00000065,0x00070005,0x00000041, + 0x6e4f7349,0x65726353,0x76286e65,0x763b3269,0x003b3269,0x00030005,0x0000003f,0x00736f70, + 0x00040005,0x00000040,0x657a6973,0x00000000,0x00080005,0x00000045,0x64616853,0x43676e69, + 0x676e6168,0x6d754c65,0x666e4961,0x0000006f,0x00060006,0x00000045,0x00000000,0x6d615366, + 0x73656c70,0x00000000,0x000c0005,0x0000004a,0x706d6f43,0x53657475,0x69646168,0x6843676e, + 0x65676e61,0x616d754c,0x32697628,0x3266763b,0x3269763b,0x0000003b,0x00040005,0x00000047, + 0x50785069,0x0000736f,0x00030005,0x00000048,0x00765566,0x00060005,0x00000049,0x72754369, + 0x746e6572,0x657a6953,0x00000000,0x00070005,0x0000004e,0x64616853,0x43676e69,0x676e6168, + 0x69762865,0x00003b32,0x00040005,0x0000004d,0x50785069,0x0000736f,0x00070005,0x00000066, + 0x53466263,0x50553352,0x4c414353,0x745f5245,0x00000000,0x00060006,0x00000066,0x00000000, + 0x6e655269,0x53726564,0x00657a69,0x000a0006,0x00000066,0x00000001,0x65725069,0x756f6976, + 0x61724673,0x6552656d,0x7265646e,0x657a6953,0x00000000,0x00070006,0x00000066,0x00000002, + 0x73705569,0x656c6163,0x657a6953,0x00000000,0x000a0006,0x00000066,0x00000003,0x65725069, + 0x756f6976,0x61724673,0x7055656d,0x6c616373,0x7a695365,0x00000065,0x00070006,0x00000066, + 0x00000004,0x78614d69,0x646e6552,0x69537265,0x0000657a,0x00070006,0x00000066,0x00000005, + 0x78614d69,0x63737055,0x53656c61,0x00657a69,0x00080006,0x00000066,0x00000006,0x76654466, + 0x54656369,0x6569566f,0x70654477,0x00006874,0x00050006,0x00000066,0x00000007,0x74694a66, + 0x00726574,0x00090006,0x00000066,0x00000008,0x65725066,0x756f6976,0x61724673,0x694a656d, + 0x72657474,0x00000000,0x00080006,0x00000066,0x00000009,0x746f4d66,0x566e6f69,0x6f746365, + 0x61635372,0x0000656c,0x00080006,0x00000066,0x0000000a,0x776f4466,0x6163736e,0x6146656c, + 0x726f7463,0x00000000,0x000b0006,0x00000066,0x0000000b,0x746f4d66,0x566e6f69,0x6f746365, + 0x74694a72,0x43726574,0x65636e61,0x74616c6c,0x006e6f69,0x00060006,0x00000066,0x0000000c, + 0x6e615466,0x666c6148,0x00564f46,0x00090006,0x00000066,0x0000000d,0x74694a66,0x53726574, + 0x65757165,0x4c65636e,0x74676e65,0x00000068,0x00060006,0x00000066,0x0000000e,0x6c654466, + 0x69546174,0x0000656d,0x00080006,0x00000066,0x0000000f,0x6c654466,0x72506174,0x70784565, + 0x7275736f,0x00000065,0x000a0006,0x00000066,0x00000010,0x65695666,0x61705377,0x6f546563, + 0x6574654d,0x61467372,0x726f7463,0x00000000,0x00060006,0x00000066,0x00000011,0x61724666, + 0x6e49656d,0x00786564,0x00070006,0x00000066,0x00000012,0x6c655666,0x7469636f,0x63614679, + 0x00726f74,0x00080006,0x00000066,0x00000013,0x61655266,0x76697463,0x73656e65,0x61635373, + 0x0000656c,0x00080006,0x00000066,0x00000014,0x61685366,0x676e6964,0x6e616843,0x63536567, + 0x00656c61,0x000a0006,0x00000066,0x00000015,0x63634166,0x6c756d75,0x6f697461,0x6464416e, + 0x65506465,0x61724672,0x0000656d,0x000b0006,0x00000066,0x00000016,0x6e694d66,0x6f736944, + 0x756c6363,0x6e6f6973,0x75636341,0x616c756d,0x6e6f6974,0x00000000,0x00060005,0x00000068, + 0x53466263,0x70553352,0x6c616373,0x00007265,0x00050005,0x00000077,0x70735f72,0x696d5f64, + 0x00007370,0x00060005,0x00000081,0x694c5f73,0x7261656e,0x6d616c43,0x00000070,0x00070005, + 0x0000008e,0x735f7772,0x69646168,0x635f676e,0x676e6168,0x00000065,0x00060005,0x0000009a, + 0x6d615366,0x4c656c70,0x7461636f,0x006e6f69,0x00070005,0x0000009f,0x616c4366,0x6465706d, + 0x61636f4c,0x6e6f6974,0x00000000,0x00040005,0x000000a4,0x61726170,0x0000006d,0x00040005, + 0x000000a6,0x61726170,0x0000006d,0x00040005,0x000000a8,0x61726170,0x0000006d,0x00040005, + 0x000000a9,0x61726170,0x0000006d,0x00050005,0x000000ab,0x616c4366,0x6465706d,0x00007655, + 0x00040005,0x000000bd,0x70694d66,0x00007655,0x00040005,0x000000c0,0x61726170,0x0000006d, + 0x00040005,0x000000c2,0x61726170,0x0000006d,0x00040005,0x000000c4,0x61726170,0x0000006d, + 0x00040005,0x000000c5,0x61726170,0x0000006d,0x00050005,0x000000c8,0x70694d69,0x6576654c, + 0x0000006c,0x00040005,0x000000d1,0x6d615366,0x00656c70,0x00040005,0x000000d4,0x61726170, + 0x0000006d,0x00040005,0x000000d6,0x61726170,0x0000006d,0x00040005,0x000000d9,0x6f666e69, + 0x00000000,0x00040005,0x000000eb,0x61726170,0x0000006d,0x00040005,0x000000ec,0x61726170, + 0x0000006d,0x00030005,0x000000f0,0x00765566,0x00050005,0x000000f8,0x4a765566,0x65747469, + 0x00646572,0x00040005,0x000000ff,0x6f666e69,0x00000000,0x00040005,0x00000101,0x61726170, + 0x0000006d,0x00040005,0x00000103,0x61726170,0x0000006d,0x00060005,0x00000106,0x61685366, + 0x676e6964,0x6e616843,0x00006567,0x00050005,0x00000107,0x70694d69,0x6576654c,0x0000006c, + 0x00040005,0x00000116,0x61726170,0x0000006d,0x00040005,0x00000118,0x61726170,0x0000006d, + 0x00040005,0x0000011f,0x61726170,0x0000006d,0x00040005,0x00000122,0x61726170,0x0000006d, + 0x00040005,0x00000124,0x61726170,0x0000006d,0x00080005,0x00000128,0x475f6c67,0x61626f6c, + 0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00040005,0x0000012c,0x61726170,0x0000006d, + 0x00060005,0x00000131,0x6f505f73,0x43746e69,0x706d616c,0x00000000,0x00030047,0x00000066, + 0x00000002,0x00050048,0x00000066,0x00000000,0x00000023,0x00000000,0x00050048,0x00000066, + 0x00000001,0x00000023,0x00000008,0x00050048,0x00000066,0x00000002,0x00000023,0x00000010, + 0x00050048,0x00000066,0x00000003,0x00000023,0x00000018,0x00050048,0x00000066,0x00000004, + 0x00000023,0x00000020,0x00050048,0x00000066,0x00000005,0x00000023,0x00000028,0x00050048, + 0x00000066,0x00000006,0x00000023,0x00000030,0x00050048,0x00000066,0x00000007,0x00000023, + 0x00000040,0x00050048,0x00000066,0x00000008,0x00000023,0x00000048,0x00050048,0x00000066, + 0x00000009,0x00000023,0x00000050,0x00050048,0x00000066,0x0000000a,0x00000023,0x00000058, + 0x00050048,0x00000066,0x0000000b,0x00000023,0x00000060,0x00050048,0x00000066,0x0000000c, + 0x00000023,0x00000068,0x00050048,0x00000066,0x0000000d,0x00000023,0x0000006c,0x00050048, + 0x00000066,0x0000000e,0x00000023,0x00000070,0x00050048,0x00000066,0x0000000f,0x00000023, + 0x00000074,0x00050048,0x00000066,0x00000010,0x00000023,0x00000078,0x00050048,0x00000066, + 0x00000011,0x00000023,0x0000007c,0x00050048,0x00000066,0x00000012,0x00000023,0x00000080, + 0x00050048,0x00000066,0x00000013,0x00000023,0x00000084,0x00050048,0x00000066,0x00000014, + 0x00000023,0x00000088,0x00050048,0x00000066,0x00000015,0x00000023,0x0000008c,0x00050048, + 0x00000066,0x00000016,0x00000023,0x00000090,0x00040047,0x00000068,0x00000021,0x00000002, + 0x00040047,0x00000068,0x00000022,0x00000000,0x00040047,0x00000077,0x00000021,0x00000000, + 0x00040047,0x00000077,0x00000022,0x00000000,0x00040047,0x00000081,0x00000021,0x000003e9, + 0x00040047,0x00000081,0x00000022,0x00000000,0x00040047,0x0000008e,0x00000021,0x00000001, + 0x00040047,0x0000008e,0x00000022,0x00000000,0x00040047,0x00000128,0x0000000b,0x0000001c, + 0x00040047,0x00000131,0x00000021,0x000003e8,0x00040047,0x00000131,0x00000022,0x00000000, + 0x00040047,0x0000013c,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003, + 0x00000002,0x00030016,0x00000006,0x00000020,0x00040020,0x00000007,0x00000007,0x00000006, + 0x00040021,0x00000008,0x00000006,0x00000007,0x00040017,0x0000000c,0x00000006,0x00000002, + 0x00040020,0x0000000d,0x00000007,0x0000000c,0x00050021,0x0000000e,0x0000000c,0x0000000d, + 0x0000000d,0x00050021,0x00000013,0x00000006,0x00000007,0x00000007,0x00040015,0x0000001c, + 0x00000020,0x00000001,0x00040017,0x0000001d,0x0000001c,0x00000002,0x00030021,0x0000001e, + 0x0000001d,0x00030021,0x00000021,0x0000000c,0x00040015,0x00000024,0x00000020,0x00000000, + 0x00040020,0x00000025,0x00000007,0x00000024,0x00040021,0x00000026,0x0000001d,0x00000025, + 0x00050021,0x0000002a,0x0000000c,0x0000000d,0x00000025,0x00040020,0x0000002f,0x00000007, + 0x0000001d,0x00050021,0x00000030,0x00000002,0x0000002f,0x00000007,0x00060021,0x00000037, + 0x0000000c,0x0000000d,0x0000002f,0x0000002f,0x00020014,0x0000003d,0x00050021,0x0000003e, + 0x0000003d,0x0000002f,0x0000002f,0x0004002b,0x00000024,0x00000043,0x00000003,0x0004001c, + 0x00000044,0x00000006,0x00000043,0x0003001e,0x00000045,0x00000044,0x00060021,0x00000046, + 0x00000045,0x0000002f,0x0000000d,0x0000001d,0x00040021,0x0000004c,0x00000002,0x0000002f, + 0x0004002b,0x00000006,0x00000051,0x00000000,0x0004002b,0x00000006,0x00000052,0x3f800000, + 0x00040017,0x00000065,0x00000006,0x00000004,0x0019001e,0x00000066,0x0000001d,0x0000001d, + 0x0000001d,0x0000001d,0x0000001d,0x0000001d,0x00000065,0x0000000c,0x0000000c,0x0000000c, + 0x0000000c,0x0000000c,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006, + 0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00040020,0x00000067,0x00000002, + 0x00000066,0x0004003b,0x00000067,0x00000068,0x00000002,0x0004002b,0x0000001c,0x00000069, + 0x00000000,0x00040020,0x0000006a,0x00000002,0x0000001d,0x0004002b,0x0000001c,0x0000006f, + 0x00000007,0x00040020,0x00000070,0x00000002,0x0000000c,0x00090019,0x00000075,0x00000006, + 0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x00040020,0x00000076, + 0x00000000,0x00000075,0x0004003b,0x00000076,0x00000077,0x00000000,0x0002001a,0x0000007f, + 0x00040020,0x00000080,0x00000000,0x0000007f,0x0004003b,0x00000080,0x00000081,0x00000000, + 0x0003001b,0x00000083,0x00000075,0x00090019,0x0000008c,0x00000006,0x00000001,0x00000000, + 0x00000000,0x00000000,0x00000002,0x0000000f,0x00040020,0x0000008d,0x00000000,0x0000008c, + 0x0004003b,0x0000008d,0x0000008e,0x00000000,0x0004002b,0x00000006,0x00000095,0x3f000000, + 0x0005002c,0x0000000c,0x000000a0,0x00000095,0x00000095,0x00040017,0x000000b4,0x00000024, + 0x00000002,0x00040017,0x000000b8,0x0000003d,0x00000002,0x0004002b,0x00000024,0x000000bf, + 0x00000000,0x00040020,0x000000c7,0x00000007,0x0000001c,0x0004002b,0x0000001c,0x000000cf, + 0x00000003,0x00040020,0x000000d8,0x00000007,0x00000045,0x0004002b,0x00000024,0x000000dd, + 0x00000001,0x0004002b,0x0000001c,0x000000e4,0x00000001,0x00040017,0x00000126,0x00000024, + 0x00000003,0x00040020,0x00000127,0x00000001,0x00000126,0x0004003b,0x00000127,0x00000128, + 0x00000001,0x0004002b,0x00000006,0x0000012e,0x387fda40,0x0004002b,0x00000006,0x0000012f, + 0x477fe000,0x0004002b,0x00000006,0x00000130,0x37801002,0x0004003b,0x00000080,0x00000131, + 0x00000000,0x0004002b,0x00000006,0x00000132,0x7f7fffff,0x0004002b,0x00000006,0x00000133, + 0x00800000,0x0004002b,0x00000006,0x00000134,0x3a1fe868,0x0004002b,0x00000006,0x00000135, + 0x3d800000,0x0004002b,0x00000006,0x00000136,0x3d3d70a4,0x0004002b,0x00000006,0x00000137, + 0x3e400000,0x0004002b,0x00000006,0x00000138,0x40000000,0x0004002b,0x0000001c,0x00000139, + 0x00000002,0x0004002b,0x00000006,0x0000013a,0x461c4000,0x0004002b,0x00000024,0x0000013b, + 0x00000008,0x0006002c,0x00000126,0x0000013c,0x0000013b,0x0000013b,0x000000dd,0x00050036, + 0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x0000002f, + 0x0000012c,0x00000007,0x0004003d,0x00000126,0x00000129,0x00000128,0x0007004f,0x000000b4, + 0x0000012a,0x00000129,0x00000129,0x00000000,0x00000001,0x0004007c,0x0000001d,0x0000012b, + 0x0000012a,0x0003003e,0x0000012c,0x0000012b,0x00050039,0x00000002,0x0000012d,0x0000004e, + 0x0000012c,0x000100fd,0x00010038,0x00050036,0x00000006,0x0000000a,0x00000000,0x00000008, + 0x00030037,0x00000007,0x00000009,0x000200f8,0x0000000b,0x0004003d,0x00000006,0x00000050, + 0x00000009,0x0008000c,0x00000006,0x00000053,0x00000001,0x0000002b,0x00000050,0x00000051, + 0x00000052,0x000200fe,0x00000053,0x00010038,0x00050036,0x0000000c,0x00000011,0x00000000, + 0x0000000e,0x00030037,0x0000000d,0x0000000f,0x00030037,0x0000000d,0x00000010,0x000200f8, + 0x00000012,0x0004003d,0x0000000c,0x00000056,0x0000000f,0x0004003d,0x0000000c,0x00000057, + 0x00000010,0x0007000c,0x0000000c,0x00000058,0x00000001,0x00000025,0x00000056,0x00000057, + 0x000200fe,0x00000058,0x00010038,0x00050036,0x00000006,0x00000016,0x00000000,0x00000013, + 0x00030037,0x00000007,0x00000014,0x00030037,0x00000007,0x00000015,0x000200f8,0x00000017, + 0x0004003d,0x00000006,0x0000005b,0x00000014,0x0004003d,0x00000006,0x0000005c,0x00000015, + 0x0007000c,0x00000006,0x0000005d,0x00000001,0x00000028,0x0000005b,0x0000005c,0x000200fe, + 0x0000005d,0x00010038,0x00050036,0x0000000c,0x0000001a,0x00000000,0x0000000e,0x00030037, + 0x0000000d,0x00000018,0x00030037,0x0000000d,0x00000019,0x000200f8,0x0000001b,0x0004003d, + 0x0000000c,0x00000060,0x00000018,0x0004003d,0x0000000c,0x00000061,0x00000019,0x0007000c, + 0x0000000c,0x00000062,0x00000001,0x00000028,0x00000060,0x00000061,0x000200fe,0x00000062, + 0x00010038,0x00050036,0x0000001d,0x0000001f,0x00000000,0x0000001e,0x000200f8,0x00000020, + 0x00050041,0x0000006a,0x0000006b,0x00000068,0x00000069,0x0004003d,0x0000001d,0x0000006c, + 0x0000006b,0x000200fe,0x0000006c,0x00010038,0x00050036,0x0000000c,0x00000022,0x00000000, + 0x00000021,0x000200f8,0x00000023,0x00050041,0x00000070,0x00000071,0x00000068,0x0000006f, + 0x0004003d,0x0000000c,0x00000072,0x00000071,0x000200fe,0x00000072,0x00010038,0x00050036, + 0x0000001d,0x00000028,0x00000000,0x00000026,0x00030037,0x00000025,0x00000027,0x000200f8, + 0x00000029,0x0004003d,0x00000075,0x00000078,0x00000077,0x0004003d,0x00000024,0x00000079, + 0x00000027,0x0004007c,0x0000001c,0x0000007a,0x00000079,0x00050067,0x0000001d,0x0000007b, + 0x00000078,0x0000007a,0x000200fe,0x0000007b,0x00010038,0x00050036,0x0000000c,0x0000002d, + 0x00000000,0x0000002a,0x00030037,0x0000000d,0x0000002b,0x00030037,0x00000025,0x0000002c, + 0x000200f8,0x0000002e,0x0004003d,0x00000075,0x0000007e,0x00000077,0x0004003d,0x0000007f, + 0x00000082,0x00000081,0x00050056,0x00000083,0x00000084,0x0000007e,0x00000082,0x0004003d, + 0x0000000c,0x00000085,0x0000002b,0x0004003d,0x00000024,0x00000086,0x0000002c,0x00040070, + 0x00000006,0x00000087,0x00000086,0x00070058,0x00000065,0x00000088,0x00000084,0x00000085, + 0x00000002,0x00000087,0x0007004f,0x0000000c,0x00000089,0x00000088,0x00000088,0x00000000, + 0x00000001,0x000200fe,0x00000089,0x00010038,0x00050036,0x00000002,0x00000033,0x00000000, + 0x00000030,0x00030037,0x0000002f,0x00000031,0x00030037,0x00000007,0x00000032,0x000200f8, + 0x00000034,0x0004003d,0x0000008c,0x0000008f,0x0000008e,0x0004003d,0x0000001d,0x00000090, + 0x00000031,0x0004003d,0x00000006,0x00000091,0x00000032,0x00070050,0x00000065,0x00000092, + 0x00000091,0x00000051,0x00000051,0x00000051,0x00040063,0x0000008f,0x00000090,0x00000092, + 0x000100fd,0x00010038,0x00050036,0x0000001d,0x00000035,0x00000000,0x0000001e,0x000200f8, + 0x00000036,0x00040039,0x0000001d,0x00000093,0x0000001f,0x0004006f,0x0000000c,0x00000094, + 0x00000093,0x0005008e,0x0000000c,0x00000096,0x00000094,0x00000095,0x0004006e,0x0000001d, + 0x00000097,0x00000096,0x000200fe,0x00000097,0x00010038,0x00050036,0x0000000c,0x0000003b, + 0x00000000,0x00000037,0x00030037,0x0000000d,0x00000038,0x00030037,0x0000002f,0x00000039, + 0x00030037,0x0000002f,0x0000003a,0x000200f8,0x0000003c,0x0004003b,0x0000000d,0x0000009a, + 0x00000007,0x0004003b,0x0000000d,0x0000009f,0x00000007,0x0004003b,0x0000000d,0x000000a4, + 0x00000007,0x0004003b,0x0000000d,0x000000a6,0x00000007,0x0004003b,0x0000000d,0x000000a8, + 0x00000007,0x0004003b,0x0000000d,0x000000a9,0x00000007,0x0004003b,0x0000000d,0x000000ab, + 0x00000007,0x0004003d,0x0000000c,0x0000009b,0x00000038,0x0004003d,0x0000001d,0x0000009c, + 0x00000039,0x0004006f,0x0000000c,0x0000009d,0x0000009c,0x00050085,0x0000000c,0x0000009e, + 0x0000009b,0x0000009d,0x0003003e,0x0000009a,0x0000009e,0x0004003d,0x0000001d,0x000000a1, + 0x00000039,0x0004006f,0x0000000c,0x000000a2,0x000000a1,0x00050083,0x0000000c,0x000000a3, + 0x000000a2,0x000000a0,0x0004003d,0x0000000c,0x000000a5,0x0000009a,0x0003003e,0x000000a4, + 0x000000a5,0x0003003e,0x000000a6,0x000000a3,0x00060039,0x0000000c,0x000000a7,0x00000011, + 0x000000a4,0x000000a6,0x0003003e,0x000000a8,0x000000a0,0x0003003e,0x000000a9,0x000000a7, + 0x00060039,0x0000000c,0x000000aa,0x0000001a,0x000000a8,0x000000a9,0x0003003e,0x0000009f, + 0x000000aa,0x0004003d,0x0000000c,0x000000ac,0x0000009f,0x0004003d,0x0000001d,0x000000ad, + 0x0000003a,0x0004006f,0x0000000c,0x000000ae,0x000000ad,0x00050088,0x0000000c,0x000000af, + 0x000000ac,0x000000ae,0x0003003e,0x000000ab,0x000000af,0x0004003d,0x0000000c,0x000000b0, + 0x000000ab,0x000200fe,0x000000b0,0x00010038,0x00050036,0x0000003d,0x00000041,0x00000000, + 0x0000003e,0x00030037,0x0000002f,0x0000003f,0x00030037,0x0000002f,0x00000040,0x000200f8, + 0x00000042,0x0004003d,0x0000001d,0x000000b3,0x0000003f,0x0004007c,0x000000b4,0x000000b5, + 0x000000b3,0x0004003d,0x0000001d,0x000000b6,0x00000040,0x0004007c,0x000000b4,0x000000b7, + 0x000000b6,0x000500b0,0x000000b8,0x000000b9,0x000000b5,0x000000b7,0x0004009b,0x0000003d, + 0x000000ba,0x000000b9,0x000200fe,0x000000ba,0x00010038,0x00050036,0x00000045,0x0000004a, + 0x00000000,0x00000046,0x00030037,0x0000002f,0x00000047,0x00030037,0x0000000d,0x00000048, + 0x00030037,0x0000001d,0x00000049,0x000200f8,0x0000004b,0x0004003b,0x0000000d,0x000000bd, + 0x00000007,0x0004003b,0x00000025,0x000000c0,0x00000007,0x0004003b,0x0000000d,0x000000c2, + 0x00000007,0x0004003b,0x0000002f,0x000000c4,0x00000007,0x0004003b,0x0000002f,0x000000c5, + 0x00000007,0x0004003b,0x000000c7,0x000000c8,0x00000007,0x0004003b,0x0000000d,0x000000d1, + 0x00000007,0x0004003b,0x0000000d,0x000000d4,0x00000007,0x0004003b,0x00000025,0x000000d6, + 0x00000007,0x0004003b,0x000000d8,0x000000d9,0x00000007,0x00040039,0x0000001d,0x000000be, + 0x00000035,0x0003003e,0x000000c0,0x000000bf,0x00050039,0x0000001d,0x000000c1,0x00000028, + 0x000000c0,0x0004003d,0x0000000c,0x000000c3,0x00000048,0x0003003e,0x000000c2,0x000000c3, + 0x0003003e,0x000000c4,0x000000be,0x0003003e,0x000000c5,0x000000c1,0x00070039,0x0000000c, + 0x000000c6,0x0000003b,0x000000c2,0x000000c4,0x000000c5,0x0003003e,0x000000bd,0x000000c6, + 0x0003003e,0x000000c8,0x00000069,0x000200f9,0x000000c9,0x000200f8,0x000000c9,0x000400f6, + 0x000000cb,0x000000cc,0x00000000,0x000200f9,0x000000cd,0x000200f8,0x000000cd,0x0004003d, + 0x0000001c,0x000000ce,0x000000c8,0x000500b1,0x0000003d,0x000000d0,0x000000ce,0x000000cf, + 0x000400fa,0x000000d0,0x000000ca,0x000000cb,0x000200f8,0x000000ca,0x0004003d,0x0000001c, + 0x000000d2,0x000000c8,0x0004007c,0x00000024,0x000000d3,0x000000d2,0x0004003d,0x0000000c, + 0x000000d5,0x000000bd,0x0003003e,0x000000d4,0x000000d5,0x0003003e,0x000000d6,0x000000d3, + 0x00060039,0x0000000c,0x000000d7,0x0000002d,0x000000d4,0x000000d6,0x0003003e,0x000000d1, + 0x000000d7,0x0004003d,0x0000001c,0x000000da,0x000000c8,0x00050041,0x00000007,0x000000db, + 0x000000d1,0x000000bf,0x0004003d,0x00000006,0x000000dc,0x000000db,0x00050041,0x00000007, + 0x000000de,0x000000d1,0x000000dd,0x0004003d,0x00000006,0x000000df,0x000000de,0x00050085, + 0x00000006,0x000000e0,0x000000dc,0x000000df,0x0006000c,0x00000006,0x000000e1,0x00000001, + 0x00000004,0x000000e0,0x00060041,0x00000007,0x000000e2,0x000000d9,0x00000069,0x000000da, + 0x0003003e,0x000000e2,0x000000e1,0x000200f9,0x000000cc,0x000200f8,0x000000cc,0x0004003d, + 0x0000001c,0x000000e3,0x000000c8,0x00050080,0x0000001c,0x000000e5,0x000000e3,0x000000e4, + 0x0003003e,0x000000c8,0x000000e5,0x000200f9,0x000000c9,0x000200f8,0x000000cb,0x0004003d, + 0x00000045,0x000000e6,0x000000d9,0x000200fe,0x000000e6,0x00010038,0x00050036,0x00000002, + 0x0000004e,0x00000000,0x0000004c,0x00030037,0x0000002f,0x0000004d,0x000200f8,0x0000004f, + 0x0004003b,0x0000002f,0x000000eb,0x00000007,0x0004003b,0x0000002f,0x000000ec,0x00000007, + 0x0004003b,0x0000000d,0x000000f0,0x00000007,0x0004003b,0x0000000d,0x000000f8,0x00000007, + 0x0004003b,0x000000d8,0x000000ff,0x00000007,0x0004003b,0x0000002f,0x00000101,0x00000007, + 0x0004003b,0x0000000d,0x00000103,0x00000007,0x0004003b,0x00000007,0x00000106,0x00000007, + 0x0004003b,0x000000c7,0x00000107,0x00000007,0x0004003b,0x00000007,0x00000116,0x00000007, + 0x0004003b,0x00000007,0x00000118,0x00000007,0x0004003b,0x00000007,0x0000011f,0x00000007, + 0x0004003b,0x0000002f,0x00000122,0x00000007,0x0004003b,0x00000007,0x00000124,0x00000007, + 0x0004003d,0x0000001d,0x000000e9,0x0000004d,0x00040039,0x0000001d,0x000000ea,0x00000035, + 0x0003003e,0x000000eb,0x000000e9,0x0003003e,0x000000ec,0x000000ea,0x00060039,0x0000003d, + 0x000000ed,0x00000041,0x000000eb,0x000000ec,0x000300f7,0x000000ef,0x00000000,0x000400fa, + 0x000000ed,0x000000ee,0x000000ef,0x000200f8,0x000000ee,0x0004003d,0x0000001d,0x000000f1, + 0x0000004d,0x0004006f,0x0000000c,0x000000f2,0x000000f1,0x00050050,0x0000000c,0x000000f3, + 0x00000095,0x00000095,0x00050081,0x0000000c,0x000000f4,0x000000f2,0x000000f3,0x00040039, + 0x0000001d,0x000000f5,0x00000035,0x0004006f,0x0000000c,0x000000f6,0x000000f5,0x00050088, + 0x0000000c,0x000000f7,0x000000f4,0x000000f6,0x0003003e,0x000000f0,0x000000f7,0x0004003d, + 0x0000000c,0x000000f9,0x000000f0,0x00040039,0x0000000c,0x000000fa,0x00000022,0x00040039, + 0x0000001d,0x000000fb,0x0000001f,0x0004006f,0x0000000c,0x000000fc,0x000000fb,0x00050088, + 0x0000000c,0x000000fd,0x000000fa,0x000000fc,0x00050081,0x0000000c,0x000000fe,0x000000f9, + 0x000000fd,0x0003003e,0x000000f8,0x000000fe,0x00040039,0x0000001d,0x00000100,0x00000035, + 0x0004003d,0x0000001d,0x00000102,0x0000004d,0x0003003e,0x00000101,0x00000102,0x0004003d, + 0x0000000c,0x00000104,0x000000f8,0x0003003e,0x00000103,0x00000104,0x00070039,0x00000045, + 0x00000105,0x0000004a,0x00000101,0x00000103,0x00000100,0x0003003e,0x000000ff,0x00000105, + 0x0003003e,0x00000106,0x00000051,0x0003003e,0x00000107,0x00000069,0x000200f9,0x00000108, + 0x000200f8,0x00000108,0x000400f6,0x0000010a,0x0000010b,0x00000000,0x000200f9,0x0000010c, + 0x000200f8,0x0000010c,0x0004003d,0x0000001c,0x0000010d,0x00000107,0x000500b1,0x0000003d, + 0x0000010e,0x0000010d,0x000000cf,0x000400fa,0x0000010e,0x00000109,0x0000010a,0x000200f8, + 0x00000109,0x0004003d,0x0000001c,0x0000010f,0x00000107,0x00060041,0x00000007,0x00000110, + 0x000000ff,0x00000069,0x0000010f,0x0004003d,0x00000006,0x00000111,0x00000110,0x000500ba, + 0x0000003d,0x00000112,0x00000111,0x00000051,0x000300f7,0x00000114,0x00000000,0x000400fa, + 0x00000112,0x00000113,0x00000114,0x000200f8,0x00000113,0x0004003d,0x0000001c,0x00000115, + 0x00000107,0x0004003d,0x00000006,0x00000117,0x00000106,0x0003003e,0x00000116,0x00000117, + 0x00060041,0x00000007,0x00000119,0x000000ff,0x00000069,0x00000115,0x0004003d,0x00000006, + 0x0000011a,0x00000119,0x0003003e,0x00000118,0x0000011a,0x00060039,0x00000006,0x0000011b, + 0x00000016,0x00000116,0x00000118,0x00050085,0x00000006,0x0000011c,0x0000011b,0x00000052, + 0x0003003e,0x00000106,0x0000011c,0x000200f9,0x00000114,0x000200f8,0x00000114,0x000200f9, + 0x0000010b,0x000200f8,0x0000010b,0x0004003d,0x0000001c,0x0000011d,0x00000107,0x00050080, + 0x0000001c,0x0000011e,0x0000011d,0x000000e4,0x0003003e,0x00000107,0x0000011e,0x000200f9, + 0x00000108,0x000200f8,0x0000010a,0x0004003d,0x00000006,0x00000120,0x00000106,0x0003003e, + 0x0000011f,0x00000120,0x00050039,0x00000006,0x00000121,0x0000000a,0x0000011f,0x0004003d, + 0x0000001d,0x00000123,0x0000004d,0x0003003e,0x00000122,0x00000123,0x0003003e,0x00000124, + 0x00000121,0x00060039,0x00000002,0x00000125,0x00000033,0x00000122,0x00000124,0x000200f9, + 0x000000ef,0x000200f8,0x000000ef,0x000100fd,0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_shading_change_pyramid_comp_spv.h b/gpu/vk/shaders/fsr3_shading_change_pyramid_comp_spv.h new file mode 100644 index 000000000..ec5446d11 --- /dev/null +++ b/gpu/vk/shaders/fsr3_shading_change_pyramid_comp_spv.h @@ -0,0 +1,1903 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_SHADING_CHANGE_PYRAMID_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x0000091b,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000031,0x00020011,0x0000003d,0x00020011,0x00000044,0x0006000b,0x00000001,0x4c534c47, + 0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,0x0007000f,0x00000005, + 0x00000004,0x6e69616d,0x00000000,0x00000905,0x00000907,0x00060010,0x00000004,0x00000011, + 0x00000100,0x00000001,0x00000001,0x00030003,0x00000002,0x000001c2,0x000b0004,0x455f4c47, + 0x735f5458,0x6c706d61,0x656c7265,0x745f7373,0x75747865,0x665f6572,0x74636e75,0x736e6f69, + 0x00000000,0x000b0004,0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469, + 0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45, + 0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47, + 0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669,0x00090004,0x4b5f4c47, + 0x735f5248,0x65646168,0x75735f72,0x6f726762,0x625f7075,0x63697361,0x00000000,0x00080004, + 0x4b5f4c47,0x735f5248,0x65646168,0x75735f72,0x6f726762,0x715f7075,0x00646175,0x00040005, + 0x00000004,0x6e69616d,0x00000000,0x000a0005,0x0000000c,0x42786666,0x69667469,0x45646c65, + 0x61727478,0x75287463,0x31753b31,0x3b31753b,0x00000000,0x00030005,0x00000009,0x00637273, + 0x00030005,0x0000000a,0x0066666f,0x00040005,0x0000000b,0x73746962,0x00000000,0x000a0005, + 0x00000011,0x42786666,0x69667469,0x49646c65,0x7265736e,0x73614d74,0x3175286b,0x3b31753b, + 0x003b3175,0x00030005,0x0000000e,0x00637273,0x00030005,0x0000000f,0x00736e69,0x00040005, + 0x00000010,0x73746962,0x00000000,0x00060005,0x00000018,0x4d786666,0x66286e69,0x31663b31, + 0x0000003b,0x00030005,0x00000016,0x00000078,0x00030005,0x00000017,0x00000079,0x00060005, + 0x0000001f,0x4d786666,0x69286e69,0x31693b31,0x0000003b,0x00030005,0x0000001d,0x00000078, + 0x00030005,0x0000001e,0x00000079,0x00060005,0x00000023,0x4d786666,0x66287861,0x31663b31, + 0x0000003b,0x00030005,0x00000021,0x00000078,0x00030005,0x00000022,0x00000079,0x00060005, + 0x00000027,0x4d786666,0x69287861,0x31693b31,0x0000003b,0x00030005,0x00000025,0x00000078, + 0x00030005,0x00000026,0x00000079,0x00060005,0x0000002b,0x50786666,0x6628776f,0x31663b31, + 0x0000003b,0x00030005,0x00000029,0x00000078,0x00030005,0x0000002a,0x00000079,0x000a0005, + 0x00000030,0x52786666,0x70616d65,0x57726f46,0x52657661,0x63756465,0x6e6f6974,0x3b317528, + 0x00000000,0x00030005,0x0000002f,0x00000061,0x00050005,0x00000034,0x646e6552,0x69537265, + 0x0028657a,0x00090005,0x00000036,0x76657250,0x73756f69,0x6d617246,0x6e655265,0x53726564, + 0x28657a69,0x00000000,0x00040005,0x0000003a,0x7474694a,0x00287265,0x00080005,0x0000003c, + 0x76657250,0x73756f69,0x6d617246,0x74694a65,0x28726574,0x00000000,0x00070005,0x0000003f, + 0x746c6544,0x65725061,0x6f707845,0x65727573,0x00000028,0x00050005,0x00000042,0x4370694d, + 0x746e756f,0x00000028,0x00060005,0x00000044,0x576d754e,0x476b726f,0x70756f72,0x00002873, + 0x00070005,0x00000047,0x6b726f57,0x756f7247,0x66664f70,0x28746573,0x00000000,0x00080005, + 0x0000004c,0x64616f4c,0x72727543,0x4c746e65,0x28616d75,0x3b326976,0x00000000,0x00040005, + 0x0000004b,0x50785069,0x0000736f,0x00080005,0x0000004f,0x64616f4c,0x76657250,0x73756f69, + 0x616d754c,0x32697628,0x0000003b,0x00040005,0x0000004e,0x50785069,0x0000736f,0x000a0005, + 0x00000053,0x64616f4c,0x616c6944,0x4d646574,0x6f69746f,0x6365566e,0x28726f74,0x3b326976, + 0x00000000,0x00050005,0x00000052,0x49785069,0x7475706e,0x00000000,0x00050005,0x00000055, + 0x6f707845,0x65727573,0x00000028,0x00080005,0x0000005a,0x6f4c5752,0x79506461,0x696d6172, + 0x69762864,0x31753b32,0x0000003b,0x00040005,0x00000058,0x50785069,0x0000736f,0x00040005, + 0x00000059,0x65646e69,0x00000078,0x00090005,0x00000061,0x726f7453,0x72795065,0x64696d61, + 0x32697628,0x3266763b,0x3b31753b,0x00000000,0x00040005,0x0000005e,0x50785069,0x0000736f, + 0x00050005,0x0000005f,0x5674756f,0x65756c61,0x00000000,0x00040005,0x00000060,0x65646e69, + 0x00000078,0x000a0005,0x00000065,0x5f445053,0x72636e49,0x65736165,0x6d6f7441,0x6f436369, + 0x65746e75,0x31752872,0x0000003b,0x00050005,0x00000064,0x43647073,0x746e756f,0x00007265, + 0x00080005,0x00000067,0x5f445053,0x65736552,0x6f744174,0x4363696d,0x746e756f,0x00287265, + 0x00080005,0x0000006c,0x446e694d,0x64697669,0x79426465,0x2878614d,0x663b3166,0x00003b31, + 0x00030005,0x0000006a,0x00003076,0x00030005,0x0000006b,0x00003176,0x00060005,0x00000071, + 0x76557349,0x69736e49,0x76286564,0x003b3266,0x00030005,0x00000070,0x00765566,0x00080005, + 0x00000077,0x6d616c43,0x616f4c70,0x69762864,0x69763b32,0x69763b32,0x00003b32,0x00050005, + 0x00000074,0x53785069,0x6c706d61,0x00000065,0x00050005,0x00000075,0x4f785069,0x65736666, + 0x00000074,0x00060005,0x00000076,0x78655469,0x65727574,0x657a6953,0x00000000,0x000a0005, + 0x0000007a,0x49647053,0x6572636e,0x41657361,0x696d6f74,0x756f4363,0x7265746e,0x3b317528, + 0x00000000,0x00040005,0x00000079,0x63696c73,0x00000065,0x00080005,0x0000007c,0x47647053, + 0x74417465,0x63696d6f,0x6e756f43,0x28726574,0x00000000,0x00090005,0x0000007f,0x52647053, + 0x74657365,0x6d6f7441,0x6f436369,0x65746e75,0x31752872,0x0000003b,0x00040005,0x0000007e, + 0x63696c73,0x00000065,0x00050005,0x00000083,0x706d6153,0x6553656c,0x00000074,0x00060006, + 0x00000083,0x00000000,0x6d615366,0x73656c70,0x00000000,0x000b0005,0x00000087,0x74726f53, + 0x28746553,0x75727473,0x532d7463,0x6c706d61,0x74655365,0x5b31662d,0x3b315d35,0x00000000, + 0x00040005,0x00000086,0x74655366,0x00000000,0x00160005,0x0000008d,0x706d6f43,0x4d657475, + 0x6d696e69,0x69446d75,0x72656666,0x65636e65,0x32697628,0x7274733b,0x2d746375,0x706d6153, + 0x6553656c,0x31662d74,0x315d355b,0x7274733b,0x2d746375,0x706d6153,0x6553656c,0x31662d74, + 0x315d355b,0x0000003b,0x00040005,0x0000008a,0x50785069,0x0000736f,0x00040005,0x0000008b, + 0x74655366,0x00000030,0x00040005,0x0000008c,0x74655366,0x00000031,0x000b0005,0x00000091, + 0x43746547,0x65727275,0x754c746e,0x6942616d,0x656e696c,0x61537261,0x656c706d,0x66762873, + 0x00003b32,0x00030005,0x00000090,0x00765566,0x000a0005,0x00000093,0x76657250,0x73756f69, + 0x616d754c,0x696c6942,0x7261656e,0x706d6153,0x4473656c,0x00617461,0x00050006,0x00000093, + 0x00000000,0x74655366,0x00000000,0x00080006,0x00000093,0x00000001,0x45734962,0x74736978, + 0x53676e69,0x6c706d61,0x00000065,0x000c0005,0x00000097,0x50746547,0x69766572,0x4c73756f, + 0x42616d75,0x6e696c69,0x53726165,0x6c706d61,0x76287365,0x763b3266,0x003b3266,0x00030005, + 0x00000095,0x00765566,0x00060005,0x00000096,0x746f4d66,0x566e6f69,0x6f746365,0x00000072, + 0x00090005,0x0000009d,0x706d6f43,0x44657475,0x28666669,0x3b326976,0x3b326676,0x3b326676, + 0x00000000,0x00040005,0x0000009a,0x50785069,0x0000736f,0x00030005,0x0000009b,0x00765566, + 0x00060005,0x0000009c,0x746f4d66,0x566e6f69,0x6f746365,0x00000072,0x00090005,0x000000a3, + 0x4c647053,0x5364616f,0x6372756f,0x616d4965,0x76286567,0x753b3266,0x00003b31,0x00040005, + 0x000000a1,0x50785069,0x0000736f,0x00040005,0x000000a2,0x63696c73,0x00000065,0x00060005, + 0x000000a8,0x4c647053,0x2864616f,0x3b326976,0x003b3175,0x00030005,0x000000a6,0x00786574, + 0x00040005,0x000000a7,0x63696c73,0x00000065,0x00090005,0x000000b0,0x52647053,0x63756465, + 0x76283465,0x763b3466,0x763b3466,0x763b3466,0x003b3466,0x00030005,0x000000ac,0x00003076, + 0x00030005,0x000000ad,0x00003176,0x00030005,0x000000ae,0x00003276,0x00030005,0x000000af, + 0x00003376,0x00080005,0x000000b7,0x53647053,0x65726f74,0x32697628,0x3466763b,0x3b31753b, + 0x003b3175,0x00030005,0x000000b3,0x00786970,0x00050005,0x000000b4,0x5674756f,0x65756c61, + 0x00000000,0x00040005,0x000000b5,0x65646e69,0x00000078,0x00040005,0x000000b6,0x63696c73, + 0x00000065,0x00090005,0x000000bc,0x4c647053,0x4964616f,0x7265746e,0x6964656d,0x28657461, + 0x753b3175,0x00003b31,0x00030005,0x000000ba,0x00000078,0x00030005,0x000000bb,0x00000079, + 0x000a0005,0x000000c2,0x53647053,0x65726f74,0x65746e49,0x64656d72,0x65746169,0x3b317528, + 0x763b3175,0x003b3466,0x00030005,0x000000bf,0x00000078,0x00030005,0x000000c0,0x00000079, + 0x00040005,0x000000c1,0x756c6176,0x00000065,0x000a0005,0x000000c4,0x53786666,0x6f576470, + 0x72676b72,0x5370756f,0x66667568,0x6142656c,0x65697272,0x00002872,0x00090005,0x000000ca, + 0x45647053,0x57746978,0x676b726f,0x70756f72,0x3b317528,0x753b3175,0x00003b31,0x00060005, + 0x000000c7,0x576d756e,0x476b726f,0x70756f72,0x00000073,0x00080005,0x000000c8,0x61636f6c, + 0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00040005,0x000000c9,0x63696c73, + 0x00000065,0x00070005,0x000000ce,0x52647053,0x63756465,0x61755165,0x66762864,0x00003b34, + 0x00030005,0x000000cd,0x00000076,0x000b0005,0x000000d7,0x52647053,0x63756465,0x616f4c65, + 0x76283464,0x763b3275,0x763b3275,0x763b3275,0x753b3275,0x00003b31,0x00030005,0x000000d2, + 0x00003069,0x00030005,0x000000d3,0x00003169,0x00030005,0x000000d4,0x00003269,0x00030005, + 0x000000d5,0x00003369,0x00040005,0x000000d6,0x63696c73,0x00000065,0x00080005,0x000000dc, + 0x52647053,0x63756465,0x616f4c65,0x76283464,0x753b3275,0x00003b31,0x00040005,0x000000da, + 0x65736162,0x00000000,0x00040005,0x000000db,0x63696c73,0x00000065,0x000e0005,0x000000e3, + 0x52647053,0x63756465,0x616f4c65,0x756f5364,0x49656372,0x6567616d,0x75762834,0x75763b32, + 0x75763b32,0x75763b32,0x31753b32,0x0000003b,0x00030005,0x000000de,0x00003069,0x00030005, + 0x000000df,0x00003169,0x00030005,0x000000e0,0x00003269,0x00030005,0x000000e1,0x00003369, + 0x00040005,0x000000e2,0x63696c73,0x00000065,0x000b0005,0x000000e7,0x52647053,0x63756465, + 0x616f4c65,0x756f5364,0x49656372,0x6567616d,0x32757628,0x3b31753b,0x00000000,0x00040005, + 0x000000e5,0x65736162,0x00000000,0x00040005,0x000000e6,0x63696c73,0x00000065,0x00100005, + 0x000000f0,0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x5f305f73,0x6e495f31,0x6e697274, + 0x73636973,0x3b317528,0x763b3175,0x753b3275,0x31753b31,0x3b31753b,0x00000000,0x00030005, + 0x000000ea,0x00000078,0x00030005,0x000000eb,0x00000079,0x00050005,0x000000ec,0x6b726f77, + 0x756f7247,0x00444970,0x00080005,0x000000ed,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69, + 0x7865646e,0x00000000,0x00030005,0x000000ee,0x0070696d,0x00040005,0x000000ef,0x63696c73, + 0x00000065,0x000d0005,0x000000f8,0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x5f305f73, + 0x31752831,0x3b31753b,0x3b327576,0x753b3175,0x31753b31,0x0000003b,0x00030005,0x000000f2, + 0x00000078,0x00030005,0x000000f3,0x00000079,0x00050005,0x000000f4,0x6b726f77,0x756f7247, + 0x00444970,0x00080005,0x000000f5,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e, + 0x00000000,0x00030005,0x000000f6,0x0070696d,0x00040005,0x000000f7,0x63696c73,0x00000065, + 0x000c0005,0x00000100,0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x7528325f,0x31753b31, + 0x3275763b,0x3b31753b,0x753b3175,0x00003b31,0x00030005,0x000000fa,0x00000078,0x00030005, + 0x000000fb,0x00000079,0x00050005,0x000000fc,0x6b726f77,0x756f7247,0x00444970,0x00080005, + 0x000000fd,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00030005, + 0x000000fe,0x0070696d,0x00040005,0x000000ff,0x63696c73,0x00000065,0x000c0005,0x00000108, + 0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x7528335f,0x31753b31,0x3275763b,0x3b31753b, + 0x753b3175,0x00003b31,0x00030005,0x00000102,0x00000078,0x00030005,0x00000103,0x00000079, + 0x00050005,0x00000104,0x6b726f77,0x756f7247,0x00444970,0x00080005,0x00000105,0x61636f6c, + 0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00030005,0x00000106,0x0070696d, + 0x00040005,0x00000107,0x63696c73,0x00000065,0x000c0005,0x00000110,0x44647053,0x736e776f, + 0x6c706d61,0x70694d65,0x7528345f,0x31753b31,0x3275763b,0x3b31753b,0x753b3175,0x00003b31, + 0x00030005,0x0000010a,0x00000078,0x00030005,0x0000010b,0x00000079,0x00050005,0x0000010c, + 0x6b726f77,0x756f7247,0x00444970,0x00080005,0x0000010d,0x61636f6c,0x766e496c,0x7461636f, + 0x496e6f69,0x7865646e,0x00000000,0x00030005,0x0000010e,0x0070696d,0x00040005,0x0000010f, + 0x63696c73,0x00000065,0x000b0005,0x00000117,0x44647053,0x736e776f,0x6c706d61,0x70694d65, + 0x7628355f,0x753b3275,0x31753b31,0x3b31753b,0x00000000,0x00050005,0x00000113,0x6b726f77, + 0x756f7247,0x00444970,0x00080005,0x00000114,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69, + 0x7865646e,0x00000000,0x00030005,0x00000115,0x0070696d,0x00040005,0x00000116,0x63696c73, + 0x00000065,0x000b0005,0x0000011e,0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x5f365f73, + 0x31752837,0x3b31753b,0x753b3175,0x00003b31,0x00030005,0x0000011a,0x00000078,0x00030005, + 0x0000011b,0x00000079,0x00040005,0x0000011c,0x7370696d,0x00000000,0x00040005,0x0000011d, + 0x63696c73,0x00000065,0x000e0005,0x00000128,0x44647053,0x736e776f,0x6c706d61,0x78654e65, + 0x756f4674,0x31752872,0x3b31753b,0x3b327576,0x753b3175,0x31753b31,0x3b31753b,0x00000000, + 0x00030005,0x00000121,0x00000078,0x00030005,0x00000122,0x00000079,0x00050005,0x00000123, + 0x6b726f77,0x756f7247,0x00444970,0x00080005,0x00000124,0x61636f6c,0x766e496c,0x7461636f, + 0x496e6f69,0x7865646e,0x00000000,0x00040005,0x00000125,0x65736162,0x0070694d,0x00040005, + 0x00000126,0x7370696d,0x00000000,0x00040005,0x00000127,0x63696c73,0x00000065,0x000a0005, + 0x00000130,0x44647053,0x736e776f,0x6c706d61,0x75762865,0x31753b32,0x3b31753b,0x753b3175, + 0x00003b31,0x00050005,0x0000012b,0x6b726f77,0x756f7247,0x00444970,0x00080005,0x0000012c, + 0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00040005,0x0000012d, + 0x7370696d,0x00000000,0x00060005,0x0000012e,0x576d756e,0x476b726f,0x70756f72,0x00000073, + 0x00040005,0x0000012f,0x63696c73,0x00000065,0x000b0005,0x00000139,0x44647053,0x736e776f, + 0x6c706d61,0x75762865,0x31753b32,0x3b31753b,0x753b3175,0x75763b31,0x00003b32,0x00050005, + 0x00000133,0x6b726f77,0x756f7247,0x00444970,0x00080005,0x00000134,0x61636f6c,0x766e496c, + 0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00040005,0x00000135,0x7370696d,0x00000000, + 0x00060005,0x00000136,0x576d756e,0x476b726f,0x70756f72,0x00000073,0x00040005,0x00000137, + 0x63696c73,0x00000065,0x00060005,0x00000138,0x6b726f77,0x756f7247,0x66664f70,0x00746573, + 0x000b0005,0x00000140,0x706d6f43,0x53657475,0x69646168,0x6843676e,0x65676e61,0x61727950, + 0x2864696d,0x3b337576,0x003b3175,0x00050005,0x0000013e,0x6b726f57,0x756f7247,0x00644970, + 0x00070005,0x0000013f,0x61636f4c,0x7268546c,0x49646165,0x7865646e,0x00000000,0x00040005, + 0x0000016d,0x61726170,0x0000006d,0x00040005,0x0000016f,0x61726170,0x0000006d,0x00040005, + 0x00000170,0x61726170,0x0000006d,0x00040005,0x00000173,0x61726170,0x0000006d,0x00040005, + 0x00000174,0x61726170,0x0000006d,0x00040005,0x00000176,0x61726170,0x0000006d,0x00040005, + 0x00000178,0x61726170,0x0000006d,0x00040005,0x0000017a,0x61726170,0x0000006d,0x00040005, + 0x0000017b,0x61726170,0x0000006d,0x00040005,0x0000017d,0x61726170,0x0000006d,0x00040005, + 0x0000017f,0x61726170,0x0000006d,0x00040005,0x00000180,0x61726170,0x0000006d,0x00040005, + 0x00000182,0x61726170,0x0000006d,0x00040005,0x00000183,0x61726170,0x0000006d,0x00040005, + 0x00000184,0x61726170,0x0000006d,0x00070005,0x00000189,0x53466263,0x50553352,0x4c414353, + 0x745f5245,0x00000000,0x00060006,0x00000189,0x00000000,0x6e655269,0x53726564,0x00657a69, + 0x000a0006,0x00000189,0x00000001,0x65725069,0x756f6976,0x61724673,0x6552656d,0x7265646e, + 0x657a6953,0x00000000,0x00070006,0x00000189,0x00000002,0x73705569,0x656c6163,0x657a6953, + 0x00000000,0x000a0006,0x00000189,0x00000003,0x65725069,0x756f6976,0x61724673,0x7055656d, + 0x6c616373,0x7a695365,0x00000065,0x00070006,0x00000189,0x00000004,0x78614d69,0x646e6552, + 0x69537265,0x0000657a,0x00070006,0x00000189,0x00000005,0x78614d69,0x63737055,0x53656c61, + 0x00657a69,0x00080006,0x00000189,0x00000006,0x76654466,0x54656369,0x6569566f,0x70654477, + 0x00006874,0x00050006,0x00000189,0x00000007,0x74694a66,0x00726574,0x00090006,0x00000189, + 0x00000008,0x65725066,0x756f6976,0x61724673,0x694a656d,0x72657474,0x00000000,0x00080006, + 0x00000189,0x00000009,0x746f4d66,0x566e6f69,0x6f746365,0x61635372,0x0000656c,0x00080006, + 0x00000189,0x0000000a,0x776f4466,0x6163736e,0x6146656c,0x726f7463,0x00000000,0x000b0006, + 0x00000189,0x0000000b,0x746f4d66,0x566e6f69,0x6f746365,0x74694a72,0x43726574,0x65636e61, + 0x74616c6c,0x006e6f69,0x00060006,0x00000189,0x0000000c,0x6e615466,0x666c6148,0x00564f46, + 0x00090006,0x00000189,0x0000000d,0x74694a66,0x53726574,0x65757165,0x4c65636e,0x74676e65, + 0x00000068,0x00060006,0x00000189,0x0000000e,0x6c654466,0x69546174,0x0000656d,0x00080006, + 0x00000189,0x0000000f,0x6c654466,0x72506174,0x70784565,0x7275736f,0x00000065,0x000a0006, + 0x00000189,0x00000010,0x65695666,0x61705377,0x6f546563,0x6574654d,0x61467372,0x726f7463, + 0x00000000,0x00060006,0x00000189,0x00000011,0x61724666,0x6e49656d,0x00786564,0x00070006, + 0x00000189,0x00000012,0x6c655666,0x7469636f,0x63614679,0x00726f74,0x00080006,0x00000189, + 0x00000013,0x61655266,0x76697463,0x73656e65,0x61635373,0x0000656c,0x00080006,0x00000189, + 0x00000014,0x61685366,0x676e6964,0x6e616843,0x63536567,0x00656c61,0x000a0006,0x00000189, + 0x00000015,0x63634166,0x6c756d75,0x6f697461,0x6464416e,0x65506465,0x61724672,0x0000656d, + 0x000b0006,0x00000189,0x00000016,0x6e694d66,0x6f736944,0x756c6363,0x6e6f6973,0x75636341, + 0x616c756d,0x6e6f6974,0x00000000,0x00060005,0x0000018b,0x53466263,0x70553352,0x6c616373, + 0x00007265,0x00040005,0x000001a7,0x50536263,0x00745f44,0x00050006,0x000001a7,0x00000000, + 0x7370696d,0x00000000,0x00070006,0x000001a7,0x00000001,0x576d756e,0x476b726f,0x70756f72, + 0x00000073,0x00070006,0x000001a7,0x00000002,0x6b726f77,0x756f7247,0x66664f70,0x00746573, + 0x00060006,0x000001a7,0x00000003,0x646e6572,0x69537265,0x0000657a,0x00040005,0x000001a9, + 0x50536263,0x00000044,0x00060005,0x000001bb,0x75635f72,0x6e657272,0x756c5f74,0x0000616d, + 0x00060005,0x000001c3,0x72705f72,0x6f697665,0x6c5f7375,0x00616d75,0x00090005,0x000001ca, + 0x69645f72,0x6574616c,0x6f6d5f64,0x6e6f6974,0x6365765f,0x73726f74,0x00000000,0x00050005, + 0x000001d1,0x6f707865,0x65727573,0x00000000,0x00070005,0x000001d2,0x6e695f72,0x5f747570, + 0x6f707865,0x65727573,0x00000000,0x00050005,0x000001e6,0x735f7772,0x6d5f6470,0x00307069, + 0x00050005,0x000001f0,0x735f7772,0x6d5f6470,0x00317069,0x00050005,0x000001fa,0x735f7772, + 0x6d5f6470,0x00327069,0x00050005,0x00000204,0x735f7772,0x6d5f6470,0x00337069,0x00050005, + 0x0000020f,0x735f7772,0x6d5f6470,0x00347069,0x00050005,0x00000219,0x735f7772,0x6d5f6470, + 0x00357069,0x00080005,0x00000260,0x735f7772,0x675f6470,0x61626f6c,0x74615f6c,0x63696d6f, + 0x00000000,0x00030005,0x00000267,0x0000006d,0x00040005,0x00000268,0x61726170,0x0000006d, + 0x00040005,0x00000269,0x61726170,0x0000006d,0x00040005,0x00000270,0x61726170,0x0000006d, + 0x00040005,0x00000271,0x61726170,0x0000006d,0x00040005,0x00000290,0x75736572,0x0000746c, + 0x00040005,0x00000297,0x61726170,0x0000006d,0x00040005,0x0000029a,0x61726170,0x0000006d, + 0x00040005,0x0000029c,0x61726170,0x0000006d,0x00040005,0x0000029d,0x61726170,0x0000006d, + 0x00040005,0x000002a3,0x61726170,0x0000006d,0x00040005,0x000002a6,0x61726170,0x0000006d, + 0x00040005,0x000002a8,0x61726170,0x0000006d,0x00040005,0x000002a9,0x61726170,0x0000006d, + 0x00050005,0x000002b0,0x43647073,0x746e756f,0x00007265,0x00040005,0x000002b1,0x61726170, + 0x0000006d,0x00040005,0x000002b9,0x706d5466,0x00000000,0x00040005,0x000002bb,0x61726170, + 0x0000006d,0x00040005,0x000002be,0x61726170,0x0000006d,0x00040005,0x000002c2,0x61726170, + 0x0000006d,0x00040005,0x000002c5,0x61726170,0x0000006d,0x00040005,0x000002cc,0x706d5466, + 0x00000000,0x00040005,0x000002ce,0x61726170,0x0000006d,0x00040005,0x000002d1,0x61726170, + 0x0000006d,0x00040005,0x000002d5,0x61726170,0x0000006d,0x00040005,0x000002d8,0x61726170, + 0x0000006d,0x00040005,0x000002df,0x706d5466,0x00000000,0x00040005,0x000002e0,0x61726170, + 0x0000006d,0x00040005,0x000002e3,0x61726170,0x0000006d,0x00040005,0x000002e7,0x61726170, + 0x0000006d,0x00040005,0x000002ea,0x61726170,0x0000006d,0x00040005,0x000002f1,0x706d5466, + 0x00000000,0x00040005,0x000002f2,0x61726170,0x0000006d,0x00040005,0x000002f5,0x61726170, + 0x0000006d,0x00040005,0x000002f9,0x61726170,0x0000006d,0x00040005,0x000002fc,0x61726170, + 0x0000006d,0x00040005,0x00000303,0x706d5466,0x00000000,0x00040005,0x00000304,0x61726170, + 0x0000006d,0x00040005,0x00000307,0x61726170,0x0000006d,0x00040005,0x0000030b,0x61726170, + 0x0000006d,0x00040005,0x0000030e,0x61726170,0x0000006d,0x00040005,0x00000315,0x706d5466, + 0x00000000,0x00040005,0x00000316,0x61726170,0x0000006d,0x00040005,0x00000319,0x61726170, + 0x0000006d,0x00040005,0x0000031d,0x61726170,0x0000006d,0x00040005,0x00000320,0x61726170, + 0x0000006d,0x00040005,0x00000327,0x706d5466,0x00000000,0x00040005,0x00000328,0x61726170, + 0x0000006d,0x00040005,0x0000032b,0x61726170,0x0000006d,0x00040005,0x0000032f,0x61726170, + 0x0000006d,0x00040005,0x00000332,0x61726170,0x0000006d,0x00040005,0x00000339,0x706d5466, + 0x00000000,0x00040005,0x0000033a,0x61726170,0x0000006d,0x00040005,0x0000033d,0x61726170, + 0x0000006d,0x00040005,0x00000341,0x61726170,0x0000006d,0x00040005,0x00000344,0x61726170, + 0x0000006d,0x00040005,0x0000034b,0x706d5466,0x00000000,0x00040005,0x0000034c,0x61726170, + 0x0000006d,0x00040005,0x0000034f,0x61726170,0x0000006d,0x00040005,0x00000353,0x61726170, + 0x0000006d,0x00040005,0x00000356,0x61726170,0x0000006d,0x00050005,0x0000035d,0x6e694d66, + 0x66666944,0x00000000,0x00030005,0x0000035f,0x00000061,0x00030005,0x00000360,0x00000062, + 0x00040005,0x00000361,0x61726170,0x0000006d,0x00040005,0x00000365,0x61726170,0x0000006d, + 0x00040005,0x00000369,0x78614d66,0x00000000,0x00040005,0x0000036a,0x61726170,0x0000006d, + 0x00040005,0x0000036d,0x61726170,0x0000006d,0x00030005,0x00000376,0x00000069,0x00040005, + 0x00000383,0x66694466,0x00000066,0x00050005,0x000003c2,0x4a765566,0x65747469,0x00646572, + 0x00050005,0x000003c9,0x73614269,0x736f5065,0x00000000,0x00060005,0x000003d0,0x6d615369, + 0x49656c70,0x7865646e,0x00000000,0x00050005,0x000003d8,0x6d615369,0x50656c70,0x0000736f, + 0x00040005,0x000003e2,0x61726170,0x0000006d,0x00040005,0x000003e4,0x61726170,0x0000006d, + 0x00050005,0x000003e6,0x65646e69,0x6c626178,0x00000065,0x00040005,0x000003e9,0x61726170, + 0x0000006d,0x00040005,0x000003eb,0x74655366,0x00000000,0x00040005,0x000003ed,0x61726170, + 0x0000006d,0x00040005,0x000003f5,0x61726170,0x0000006d,0x00040005,0x000003f8,0x61726170, + 0x0000006d,0x00040005,0x000003fd,0x61726170,0x0000006d,0x00040005,0x00000400,0x61726170, + 0x0000006d,0x00050005,0x00000408,0x4a765566,0x65747469,0x00646572,0x00060005,0x0000040f, + 0x70655266,0x656a6f72,0x64657463,0x00007655,0x00040005,0x00000414,0x61746164,0x00000000, + 0x00040005,0x00000415,0x61726170,0x0000006d,0x00050005,0x0000041e,0x73614269,0x736f5065, + 0x00000000,0x00060005,0x00000425,0x6d615369,0x49656c70,0x7865646e,0x00000000,0x00050005, + 0x0000042d,0x6d615369,0x50656c70,0x0000736f,0x00040005,0x00000430,0x61726170,0x0000006d, + 0x00040005,0x00000432,0x61726170,0x0000006d,0x00050005,0x00000433,0x65646e69,0x6c626178, + 0x00000065,0x00040005,0x00000436,0x61726170,0x0000006d,0x00040005,0x00000439,0x61726170, + 0x0000006d,0x00040005,0x00000443,0x61726170,0x0000006d,0x00040005,0x00000446,0x61726170, + 0x0000006d,0x00040005,0x0000044b,0x61726170,0x0000006d,0x00040005,0x0000044e,0x61726170, + 0x0000006d,0x00050005,0x00000456,0x6e694d66,0x66666944,0x00000000,0x00060005,0x00000457, + 0x72754366,0x746e6572,0x706d6153,0x0073656c,0x00040005,0x00000458,0x61726170,0x0000006d, + 0x00060005,0x0000045b,0x76657270,0x73756f69,0x61746144,0x00000000,0x00040005,0x0000045c, + 0x61726170,0x0000006d,0x00040005,0x0000045e,0x61726170,0x0000006d,0x00040005,0x00000465, + 0x61726170,0x0000006d,0x00040005,0x00000467,0x61726170,0x0000006d,0x00040005,0x00000469, + 0x61726170,0x0000006d,0x00060005,0x00000470,0x53785069,0x6c706d61,0x736f5065,0x00000000, + 0x00040005,0x00000474,0x61726170,0x0000006d,0x00040005,0x00000475,0x61726170,0x0000006d, + 0x00040005,0x00000476,0x61726170,0x0000006d,0x00080005,0x00000478,0x6c694466,0x64657461, + 0x69746f4d,0x65566e6f,0x726f7463,0x00000000,0x00040005,0x00000479,0x61726170,0x0000006d, + 0x00030005,0x0000047c,0x00765566,0x00090005,0x00000485,0x61635366,0x4164656c,0x6953646e, + 0x64656e67,0x616d754c,0x66666944,0x00000000,0x00040005,0x00000486,0x61726170,0x0000006d, + 0x00040005,0x00000488,0x61726170,0x0000006d,0x00040005,0x0000048a,0x61726170,0x0000006d, + 0x00040005,0x0000048d,0x74754f66,0x00747570,0x00040005,0x0000049f,0x61726170,0x0000006d, + 0x00040005,0x000004a1,0x61726170,0x0000006d,0x00040005,0x000004b7,0x61726170,0x0000006d, + 0x00040005,0x000004b9,0x61726170,0x0000006d,0x00040005,0x000004bc,0x61726170,0x0000006d, + 0x00070005,0x000004c3,0x49647073,0x7265746e,0x6964656d,0x52657461,0x00000000,0x00070005, + 0x000004c9,0x49647073,0x7265746e,0x6964656d,0x47657461,0x00000000,0x00070005,0x000004ce, + 0x49647073,0x7265746e,0x6964656d,0x42657461,0x00000000,0x00070005,0x000004d3,0x49647073, + 0x7265746e,0x6964656d,0x41657461,0x00000000,0x00040005,0x000004f5,0x61726170,0x0000006d, + 0x00030005,0x000004ff,0x00003076,0x00030005,0x00000501,0x00003176,0x00030005,0x00000504, + 0x00003276,0x00030005,0x00000507,0x00003376,0x00040005,0x0000050a,0x61726170,0x0000006d, + 0x00040005,0x0000050c,0x61726170,0x0000006d,0x00040005,0x0000050e,0x61726170,0x0000006d, + 0x00040005,0x00000510,0x61726170,0x0000006d,0x00030005,0x00000517,0x00003076,0x00040005, + 0x0000051a,0x61726170,0x0000006d,0x00040005,0x0000051b,0x61726170,0x0000006d,0x00030005, + 0x0000051e,0x00003176,0x00040005,0x00000521,0x61726170,0x0000006d,0x00040005,0x00000522, + 0x61726170,0x0000006d,0x00030005,0x00000525,0x00003276,0x00040005,0x00000528,0x61726170, + 0x0000006d,0x00040005,0x00000529,0x61726170,0x0000006d,0x00030005,0x0000052c,0x00003376, + 0x00040005,0x0000052f,0x61726170,0x0000006d,0x00040005,0x00000530,0x61726170,0x0000006d, + 0x00040005,0x00000533,0x61726170,0x0000006d,0x00040005,0x00000535,0x61726170,0x0000006d, + 0x00040005,0x00000537,0x61726170,0x0000006d,0x00040005,0x00000539,0x61726170,0x0000006d, + 0x00040005,0x0000054a,0x61726170,0x0000006d,0x00040005,0x0000054b,0x61726170,0x0000006d, + 0x00040005,0x0000054c,0x61726170,0x0000006d,0x00040005,0x0000054d,0x61726170,0x0000006d, + 0x00040005,0x0000054e,0x61726170,0x0000006d,0x00030005,0x00000553,0x00003076,0x00040005, + 0x00000557,0x61726170,0x0000006d,0x00040005,0x00000558,0x61726170,0x0000006d,0x00030005, + 0x0000055b,0x00003176,0x00040005,0x0000055f,0x61726170,0x0000006d,0x00040005,0x00000560, + 0x61726170,0x0000006d,0x00030005,0x00000563,0x00003276,0x00040005,0x00000567,0x61726170, + 0x0000006d,0x00040005,0x00000568,0x61726170,0x0000006d,0x00030005,0x0000056b,0x00003376, + 0x00040005,0x0000056f,0x61726170,0x0000006d,0x00040005,0x00000570,0x61726170,0x0000006d, + 0x00040005,0x00000573,0x61726170,0x0000006d,0x00040005,0x00000575,0x61726170,0x0000006d, + 0x00040005,0x00000577,0x61726170,0x0000006d,0x00040005,0x00000579,0x61726170,0x0000006d, + 0x00040005,0x00000586,0x61726170,0x0000006d,0x00040005,0x00000587,0x61726170,0x0000006d, + 0x00040005,0x00000588,0x61726170,0x0000006d,0x00040005,0x00000589,0x61726170,0x0000006d, + 0x00040005,0x0000058a,0x61726170,0x0000006d,0x00030005,0x0000058f,0x00786574,0x00030005, + 0x0000059d,0x00786970,0x00030005,0x000005ab,0x00000076,0x00040005,0x000005ae,0x61726170, + 0x0000006d,0x00040005,0x000005af,0x61726170,0x0000006d,0x00040005,0x000005b3,0x61726170, + 0x0000006d,0x00040005,0x000005b5,0x61726170,0x0000006d,0x00040005,0x000005b8,0x61726170, + 0x0000006d,0x00040005,0x000005b9,0x61726170,0x0000006d,0x00040005,0x000005d6,0x61726170, + 0x0000006d,0x00040005,0x000005d7,0x61726170,0x0000006d,0x00040005,0x000005db,0x61726170, + 0x0000006d,0x00040005,0x000005dd,0x61726170,0x0000006d,0x00040005,0x000005e0,0x61726170, + 0x0000006d,0x00040005,0x000005e1,0x61726170,0x0000006d,0x00040005,0x000005fe,0x61726170, + 0x0000006d,0x00040005,0x000005ff,0x61726170,0x0000006d,0x00040005,0x00000603,0x61726170, + 0x0000006d,0x00040005,0x00000605,0x61726170,0x0000006d,0x00040005,0x00000608,0x61726170, + 0x0000006d,0x00040005,0x00000609,0x61726170,0x0000006d,0x00040005,0x00000628,0x61726170, + 0x0000006d,0x00040005,0x00000629,0x61726170,0x0000006d,0x00040005,0x0000062d,0x61726170, + 0x0000006d,0x00040005,0x0000062f,0x61726170,0x0000006d,0x00040005,0x00000632,0x61726170, + 0x0000006d,0x00040005,0x00000633,0x61726170,0x0000006d,0x00040005,0x0000063b,0x61726170, + 0x0000006d,0x00040005,0x00000640,0x61726170,0x0000006d,0x00040005,0x00000645,0x61726170, + 0x0000006d,0x00040005,0x0000064a,0x61726170,0x0000006d,0x00040005,0x00000660,0x61726170, + 0x0000006d,0x00040005,0x00000661,0x61726170,0x0000006d,0x00040005,0x00000664,0x61726170, + 0x0000006d,0x00040005,0x00000665,0x61726170,0x0000006d,0x00040005,0x0000066c,0x61726170, + 0x0000006d,0x00040005,0x0000066d,0x61726170,0x0000006d,0x00040005,0x0000066e,0x61726170, + 0x0000006d,0x00040005,0x00000680,0x61726170,0x0000006d,0x00040005,0x00000681,0x61726170, + 0x0000006d,0x00040005,0x00000684,0x61726170,0x0000006d,0x00040005,0x00000685,0x61726170, + 0x0000006d,0x00040005,0x0000068d,0x61726170,0x0000006d,0x00040005,0x0000068e,0x61726170, + 0x0000006d,0x00040005,0x0000068f,0x61726170,0x0000006d,0x00040005,0x000006a0,0x61726170, + 0x0000006d,0x00040005,0x000006a1,0x61726170,0x0000006d,0x00040005,0x000006a4,0x61726170, + 0x0000006d,0x00040005,0x000006a5,0x61726170,0x0000006d,0x00040005,0x000006ad,0x61726170, + 0x0000006d,0x00040005,0x000006ae,0x61726170,0x0000006d,0x00040005,0x000006af,0x61726170, + 0x0000006d,0x00040005,0x000006c1,0x61726170,0x0000006d,0x00040005,0x000006c2,0x61726170, + 0x0000006d,0x00040005,0x000006c5,0x61726170,0x0000006d,0x00040005,0x000006c6,0x61726170, + 0x0000006d,0x00040005,0x000006cf,0x61726170,0x0000006d,0x00040005,0x000006d0,0x61726170, + 0x0000006d,0x00040005,0x000006d1,0x61726170,0x0000006d,0x00040005,0x000006d5,0x61726170, + 0x0000006d,0x00040005,0x000006d7,0x61726170,0x0000006d,0x00040005,0x000006d9,0x61726170, + 0x0000006d,0x00040005,0x000006db,0x61726170,0x0000006d,0x00040005,0x000006dd,0x61726170, + 0x0000006d,0x00040005,0x000006df,0x61726170,0x0000006d,0x00030005,0x000006e2,0x00000076, + 0x00040005,0x000006e3,0x61726170,0x0000006d,0x00040005,0x000006e5,0x61726170,0x0000006d, + 0x00040005,0x000006e8,0x61726170,0x0000006d,0x00040005,0x000006fc,0x61726170,0x0000006d, + 0x00040005,0x000006fd,0x61726170,0x0000006d,0x00040005,0x000006ff,0x61726170,0x0000006d, + 0x00040005,0x00000701,0x61726170,0x0000006d,0x00040005,0x00000709,0x61726170,0x0000006d, + 0x00040005,0x0000070a,0x61726170,0x0000006d,0x00040005,0x0000070c,0x61726170,0x0000006d, + 0x00030005,0x00000713,0x00000076,0x00040005,0x0000071b,0x61726170,0x0000006d,0x00040005, + 0x0000071c,0x61726170,0x0000006d,0x00040005,0x0000071e,0x61726170,0x0000006d,0x00040005, + 0x00000732,0x61726170,0x0000006d,0x00040005,0x00000733,0x61726170,0x0000006d,0x00040005, + 0x00000735,0x61726170,0x0000006d,0x00040005,0x00000737,0x61726170,0x0000006d,0x00040005, + 0x00000741,0x61726170,0x0000006d,0x00040005,0x00000742,0x61726170,0x0000006d,0x00040005, + 0x00000743,0x61726170,0x0000006d,0x00030005,0x0000074a,0x00000076,0x00040005,0x00000751, + 0x61726170,0x0000006d,0x00040005,0x00000752,0x61726170,0x0000006d,0x00040005,0x00000754, + 0x61726170,0x0000006d,0x00040005,0x00000768,0x61726170,0x0000006d,0x00040005,0x00000769, + 0x61726170,0x0000006d,0x00040005,0x0000076b,0x61726170,0x0000006d,0x00040005,0x0000076d, + 0x61726170,0x0000006d,0x00040005,0x00000774,0x61726170,0x0000006d,0x00040005,0x00000775, + 0x61726170,0x0000006d,0x00040005,0x00000776,0x61726170,0x0000006d,0x00030005,0x0000077d, + 0x00000076,0x00040005,0x0000077e,0x61726170,0x0000006d,0x00040005,0x00000780,0x61726170, + 0x0000006d,0x00040005,0x00000782,0x61726170,0x0000006d,0x00040005,0x0000078c,0x61726170, + 0x0000006d,0x00040005,0x0000078d,0x61726170,0x0000006d,0x00040005,0x0000078f,0x61726170, + 0x0000006d,0x00040005,0x00000791,0x61726170,0x0000006d,0x00030005,0x00000794,0x00786574, + 0x00030005,0x0000079e,0x00786970,0x00030005,0x000007a8,0x00003076,0x00040005,0x000007ab, + 0x61726170,0x0000006d,0x00040005,0x000007ac,0x61726170,0x0000006d,0x00040005,0x000007b0, + 0x61726170,0x0000006d,0x00040005,0x000007b2,0x61726170,0x0000006d,0x00040005,0x000007b4, + 0x61726170,0x0000006d,0x00040005,0x000007b5,0x61726170,0x0000006d,0x00030005,0x000007ca, + 0x00003176,0x00040005,0x000007cd,0x61726170,0x0000006d,0x00040005,0x000007ce,0x61726170, + 0x0000006d,0x00040005,0x000007d1,0x61726170,0x0000006d,0x00040005,0x000007d3,0x61726170, + 0x0000006d,0x00040005,0x000007d5,0x61726170,0x0000006d,0x00040005,0x000007d6,0x61726170, + 0x0000006d,0x00030005,0x000007eb,0x00003276,0x00040005,0x000007ee,0x61726170,0x0000006d, + 0x00040005,0x000007ef,0x61726170,0x0000006d,0x00040005,0x000007f2,0x61726170,0x0000006d, + 0x00040005,0x000007f4,0x61726170,0x0000006d,0x00040005,0x000007f6,0x61726170,0x0000006d, + 0x00040005,0x000007f7,0x61726170,0x0000006d,0x00030005,0x0000080c,0x00003376,0x00040005, + 0x0000080f,0x61726170,0x0000006d,0x00040005,0x00000810,0x61726170,0x0000006d,0x00040005, + 0x00000813,0x61726170,0x0000006d,0x00040005,0x00000815,0x61726170,0x0000006d,0x00040005, + 0x00000817,0x61726170,0x0000006d,0x00040005,0x00000818,0x61726170,0x0000006d,0x00030005, + 0x00000821,0x00000076,0x00040005,0x00000822,0x61726170,0x0000006d,0x00040005,0x00000824, + 0x61726170,0x0000006d,0x00040005,0x00000826,0x61726170,0x0000006d,0x00040005,0x00000828, + 0x61726170,0x0000006d,0x00040005,0x00000830,0x61726170,0x0000006d,0x00040005,0x00000831, + 0x61726170,0x0000006d,0x00040005,0x00000833,0x61726170,0x0000006d,0x00040005,0x00000834, + 0x61726170,0x0000006d,0x00040005,0x00000837,0x61726170,0x0000006d,0x00040005,0x00000839, + 0x61726170,0x0000006d,0x00040005,0x0000083b,0x61726170,0x0000006d,0x00040005,0x00000845, + 0x61726170,0x0000006d,0x00040005,0x00000847,0x61726170,0x0000006d,0x00040005,0x00000849, + 0x61726170,0x0000006d,0x00040005,0x0000084b,0x61726170,0x0000006d,0x00040005,0x0000084d, + 0x61726170,0x0000006d,0x00040005,0x0000084f,0x61726170,0x0000006d,0x00040005,0x0000085c, + 0x61726170,0x0000006d,0x00040005,0x0000085e,0x61726170,0x0000006d,0x00040005,0x00000860, + 0x61726170,0x0000006d,0x00040005,0x00000862,0x61726170,0x0000006d,0x00040005,0x00000864, + 0x61726170,0x0000006d,0x00040005,0x00000865,0x61726170,0x0000006d,0x00040005,0x00000872, + 0x61726170,0x0000006d,0x00040005,0x00000874,0x61726170,0x0000006d,0x00040005,0x00000876, + 0x61726170,0x0000006d,0x00040005,0x00000878,0x61726170,0x0000006d,0x00040005,0x0000087a, + 0x61726170,0x0000006d,0x00040005,0x0000087b,0x61726170,0x0000006d,0x00040005,0x00000888, + 0x61726170,0x0000006d,0x00040005,0x0000088a,0x61726170,0x0000006d,0x00040005,0x0000088c, + 0x61726170,0x0000006d,0x00040005,0x0000088d,0x61726170,0x0000006d,0x00040005,0x00000890, + 0x5f627573,0x00007978,0x00040005,0x00000893,0x61726170,0x0000006d,0x00030005,0x00000895, + 0x00000078,0x00030005,0x0000089e,0x00000079,0x00040005,0x000008a5,0x61726170,0x0000006d, + 0x00040005,0x000008a7,0x61726170,0x0000006d,0x00040005,0x000008a9,0x61726170,0x0000006d, + 0x00040005,0x000008ab,0x61726170,0x0000006d,0x00040005,0x000008ad,0x61726170,0x0000006d, + 0x00040005,0x000008af,0x61726170,0x0000006d,0x00040005,0x000008b2,0x61726170,0x0000006d, + 0x00040005,0x000008b4,0x61726170,0x0000006d,0x00040005,0x000008b6,0x61726170,0x0000006d, + 0x00040005,0x000008b8,0x61726170,0x0000006d,0x00040005,0x000008ba,0x61726170,0x0000006d, + 0x00040005,0x000008bb,0x61726170,0x0000006d,0x00040005,0x000008bd,0x61726170,0x0000006d, + 0x00040005,0x000008c5,0x61726170,0x0000006d,0x00040005,0x000008c7,0x61726170,0x0000006d, + 0x00040005,0x000008c9,0x61726170,0x0000006d,0x00040005,0x000008cf,0x61726170,0x0000006d, + 0x00040005,0x000008d2,0x61726170,0x0000006d,0x00040005,0x000008d4,0x61726170,0x0000006d, + 0x00040005,0x000008d6,0x61726170,0x0000006d,0x00040005,0x000008d8,0x61726170,0x0000006d, + 0x00040005,0x000008db,0x61726170,0x0000006d,0x00040005,0x000008dd,0x61726170,0x0000006d, + 0x00040005,0x000008df,0x61726170,0x0000006d,0x00040005,0x000008e0,0x61726170,0x0000006d, + 0x00040005,0x000008e2,0x61726170,0x0000006d,0x00040005,0x000008e3,0x61726170,0x0000006d, + 0x00040005,0x000008e5,0x61726170,0x0000006d,0x00040005,0x000008eb,0x61726170,0x0000006d, + 0x00040005,0x000008ec,0x61726170,0x0000006d,0x00040005,0x000008ee,0x61726170,0x0000006d, + 0x00040005,0x000008f0,0x61726170,0x0000006d,0x00040005,0x000008f2,0x61726170,0x0000006d, + 0x00040005,0x000008fd,0x61726170,0x0000006d,0x00040005,0x000008fe,0x61726170,0x0000006d, + 0x00040005,0x000008ff,0x61726170,0x0000006d,0x00040005,0x00000900,0x61726170,0x0000006d, + 0x00040005,0x00000901,0x61726170,0x0000006d,0x00040005,0x00000902,0x61726170,0x0000006d, + 0x00060005,0x00000905,0x575f6c67,0x476b726f,0x70756f72,0x00004449,0x00080005,0x00000907, + 0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163,0x6e496e6f,0x00786564,0x00040005,0x00000908, + 0x61726170,0x0000006d,0x00040005,0x0000090a,0x61726170,0x0000006d,0x00060005,0x00000910, + 0x6f505f73,0x43746e69,0x706d616c,0x00000000,0x00060005,0x00000911,0x694c5f73,0x7261656e, + 0x6d616c43,0x00000070,0x00030047,0x00000189,0x00000002,0x00050048,0x00000189,0x00000000, + 0x00000023,0x00000000,0x00050048,0x00000189,0x00000001,0x00000023,0x00000008,0x00050048, + 0x00000189,0x00000002,0x00000023,0x00000010,0x00050048,0x00000189,0x00000003,0x00000023, + 0x00000018,0x00050048,0x00000189,0x00000004,0x00000023,0x00000020,0x00050048,0x00000189, + 0x00000005,0x00000023,0x00000028,0x00050048,0x00000189,0x00000006,0x00000023,0x00000030, + 0x00050048,0x00000189,0x00000007,0x00000023,0x00000040,0x00050048,0x00000189,0x00000008, + 0x00000023,0x00000048,0x00050048,0x00000189,0x00000009,0x00000023,0x00000050,0x00050048, + 0x00000189,0x0000000a,0x00000023,0x00000058,0x00050048,0x00000189,0x0000000b,0x00000023, + 0x00000060,0x00050048,0x00000189,0x0000000c,0x00000023,0x00000068,0x00050048,0x00000189, + 0x0000000d,0x00000023,0x0000006c,0x00050048,0x00000189,0x0000000e,0x00000023,0x00000070, + 0x00050048,0x00000189,0x0000000f,0x00000023,0x00000074,0x00050048,0x00000189,0x00000010, + 0x00000023,0x00000078,0x00050048,0x00000189,0x00000011,0x00000023,0x0000007c,0x00050048, + 0x00000189,0x00000012,0x00000023,0x00000080,0x00050048,0x00000189,0x00000013,0x00000023, + 0x00000084,0x00050048,0x00000189,0x00000014,0x00000023,0x00000088,0x00050048,0x00000189, + 0x00000015,0x00000023,0x0000008c,0x00050048,0x00000189,0x00000016,0x00000023,0x00000090, + 0x00040047,0x0000018b,0x00000021,0x0000000b,0x00040047,0x0000018b,0x00000022,0x00000000, + 0x00030047,0x000001a7,0x00000002,0x00050048,0x000001a7,0x00000000,0x00000023,0x00000000, + 0x00050048,0x000001a7,0x00000001,0x00000023,0x00000004,0x00050048,0x000001a7,0x00000002, + 0x00000023,0x00000008,0x00050048,0x000001a7,0x00000003,0x00000023,0x00000010,0x00040047, + 0x000001a9,0x00000021,0x0000000c,0x00040047,0x000001a9,0x00000022,0x00000000,0x00040047, + 0x000001bb,0x00000021,0x00000000,0x00040047,0x000001bb,0x00000022,0x00000000,0x00040047, + 0x000001c3,0x00000021,0x00000001,0x00040047,0x000001c3,0x00000022,0x00000000,0x00040047, + 0x000001ca,0x00000021,0x00000002,0x00040047,0x000001ca,0x00000022,0x00000000,0x00040047, + 0x000001d2,0x00000021,0x00000003,0x00040047,0x000001d2,0x00000022,0x00000000,0x00040047, + 0x000001e6,0x00000021,0x00000005,0x00040047,0x000001e6,0x00000022,0x00000000,0x00040047, + 0x000001f0,0x00000021,0x00000006,0x00040047,0x000001f0,0x00000022,0x00000000,0x00040047, + 0x000001fa,0x00000021,0x00000007,0x00040047,0x000001fa,0x00000022,0x00000000,0x00040047, + 0x00000204,0x00000021,0x00000008,0x00040047,0x00000204,0x00000022,0x00000000,0x00040047, + 0x0000020f,0x00000021,0x00000009,0x00040047,0x0000020f,0x00000022,0x00000000,0x00030047, + 0x00000219,0x00000017,0x00040047,0x00000219,0x00000021,0x0000000a,0x00040047,0x00000219, + 0x00000022,0x00000000,0x00030047,0x00000260,0x00000017,0x00040047,0x00000260,0x00000021, + 0x00000004,0x00040047,0x00000260,0x00000022,0x00000000,0x00040047,0x00000905,0x0000000b, + 0x0000001a,0x00040047,0x00000907,0x0000000b,0x0000001d,0x00040047,0x00000910,0x00000021, + 0x000003e8,0x00040047,0x00000910,0x00000022,0x00000000,0x00040047,0x00000911,0x00000021, + 0x000003e9,0x00040047,0x00000911,0x00000022,0x00000000,0x00040047,0x0000091a,0x0000000b, + 0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015,0x00000006, + 0x00000020,0x00000000,0x00040020,0x00000007,0x00000007,0x00000006,0x00060021,0x00000008, + 0x00000006,0x00000007,0x00000007,0x00000007,0x00030016,0x00000013,0x00000020,0x00040020, + 0x00000014,0x00000007,0x00000013,0x00050021,0x00000015,0x00000013,0x00000014,0x00000014, + 0x00040015,0x0000001a,0x00000020,0x00000001,0x00040020,0x0000001b,0x00000007,0x0000001a, + 0x00050021,0x0000001c,0x0000001a,0x0000001b,0x0000001b,0x00040017,0x0000002d,0x00000006, + 0x00000002,0x00040021,0x0000002e,0x0000002d,0x00000007,0x00040017,0x00000032,0x0000001a, + 0x00000002,0x00030021,0x00000033,0x00000032,0x00040017,0x00000038,0x00000013,0x00000002, + 0x00030021,0x00000039,0x00000038,0x00030021,0x0000003e,0x00000013,0x00030021,0x00000041, + 0x00000006,0x00030021,0x00000046,0x0000002d,0x00040020,0x00000049,0x00000007,0x00000032, + 0x00040021,0x0000004a,0x00000013,0x00000049,0x00040021,0x00000051,0x00000038,0x00000049, + 0x00050021,0x00000057,0x00000038,0x00000049,0x00000007,0x00040020,0x0000005c,0x00000007, + 0x00000038,0x00060021,0x0000005d,0x00000002,0x00000049,0x0000005c,0x00000007,0x00040021, + 0x00000063,0x00000002,0x00000007,0x00050021,0x00000069,0x00000013,0x00000013,0x00000013, + 0x00020014,0x0000006e,0x00040021,0x0000006f,0x0000006e,0x0000005c,0x00060021,0x00000073, + 0x00000032,0x00000049,0x00000049,0x00000049,0x0004002b,0x00000006,0x00000081,0x00000005, + 0x0004001c,0x00000082,0x00000013,0x00000081,0x0003001e,0x00000083,0x00000082,0x00040020, + 0x00000084,0x00000007,0x00000083,0x00040021,0x00000085,0x00000002,0x00000084,0x00060021, + 0x00000089,0x00000013,0x00000049,0x00000084,0x00000084,0x00040021,0x0000008f,0x00000083, + 0x0000005c,0x0004001e,0x00000093,0x00000083,0x0000006e,0x00050021,0x00000094,0x00000093, + 0x0000005c,0x0000005c,0x00060021,0x00000099,0x00000013,0x00000049,0x0000005c,0x0000005c, + 0x00040017,0x0000009f,0x00000013,0x00000004,0x00050021,0x000000a0,0x0000009f,0x0000005c, + 0x00000007,0x00050021,0x000000a5,0x0000009f,0x00000049,0x00000007,0x00040020,0x000000aa, + 0x00000007,0x0000009f,0x00070021,0x000000ab,0x0000009f,0x000000aa,0x000000aa,0x000000aa, + 0x000000aa,0x00070021,0x000000b2,0x00000002,0x00000049,0x000000aa,0x00000007,0x00000007, + 0x00050021,0x000000b9,0x0000009f,0x00000007,0x00000007,0x00060021,0x000000be,0x00000002, + 0x00000007,0x00000007,0x000000aa,0x00060021,0x000000c6,0x0000006e,0x00000007,0x00000007, + 0x00000007,0x00040021,0x000000cc,0x0000009f,0x000000aa,0x00040020,0x000000d0,0x00000007, + 0x0000002d,0x00080021,0x000000d1,0x0000009f,0x000000d0,0x000000d0,0x000000d0,0x000000d0, + 0x00000007,0x00050021,0x000000d9,0x0000009f,0x000000d0,0x00000007,0x00090021,0x000000e9, + 0x00000002,0x00000007,0x00000007,0x000000d0,0x00000007,0x00000007,0x00000007,0x00070021, + 0x00000112,0x00000002,0x000000d0,0x00000007,0x00000007,0x00000007,0x00070021,0x00000119, + 0x00000002,0x00000007,0x00000007,0x00000007,0x00000007,0x000a0021,0x00000120,0x00000002, + 0x00000007,0x00000007,0x000000d0,0x00000007,0x00000007,0x00000007,0x00000007,0x00080021, + 0x0000012a,0x00000002,0x000000d0,0x00000007,0x00000007,0x00000007,0x00000007,0x00090021, + 0x00000132,0x00000002,0x000000d0,0x00000007,0x00000007,0x00000007,0x00000007,0x000000d0, + 0x00040017,0x0000013b,0x00000006,0x00000003,0x00040020,0x0000013c,0x00000007,0x0000013b, + 0x00050021,0x0000013d,0x00000002,0x0000013c,0x00000007,0x0004002b,0x0000001a,0x0000014c, + 0x00000000,0x0004002b,0x00000006,0x0000016b,0x00000002,0x0004002b,0x00000006,0x0000016c, + 0x00000003,0x0004002b,0x00000006,0x00000172,0x00000001,0x0019001e,0x00000189,0x00000032, + 0x00000032,0x00000032,0x00000032,0x00000032,0x00000032,0x0000009f,0x00000038,0x00000038, + 0x00000038,0x00000038,0x00000038,0x00000013,0x00000013,0x00000013,0x00000013,0x00000013, + 0x00000013,0x00000013,0x00000013,0x00000013,0x00000013,0x00000013,0x00040020,0x0000018a, + 0x00000002,0x00000189,0x0004003b,0x0000018a,0x0000018b,0x00000002,0x00040020,0x0000018c, + 0x00000002,0x00000032,0x0004002b,0x0000001a,0x00000191,0x00000001,0x0004002b,0x0000001a, + 0x00000196,0x00000007,0x00040020,0x00000197,0x00000002,0x00000038,0x0004002b,0x0000001a, + 0x0000019c,0x00000008,0x0004002b,0x0000001a,0x000001a1,0x0000000f,0x00040020,0x000001a2, + 0x00000002,0x00000013,0x0006001e,0x000001a7,0x00000006,0x00000006,0x0000002d,0x0000002d, + 0x00040020,0x000001a8,0x00000002,0x000001a7,0x0004003b,0x000001a8,0x000001a9,0x00000002, + 0x00040020,0x000001aa,0x00000002,0x00000006,0x0004002b,0x0000001a,0x000001b3,0x00000002, + 0x00040020,0x000001b4,0x00000002,0x0000002d,0x00090019,0x000001b9,0x00000013,0x00000001, + 0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x00040020,0x000001ba,0x00000000, + 0x000001b9,0x0004003b,0x000001ba,0x000001bb,0x00000000,0x0004002b,0x00000006,0x000001bf, + 0x00000000,0x0004003b,0x000001ba,0x000001c3,0x00000000,0x0004003b,0x000001ba,0x000001ca, + 0x00000000,0x0004003b,0x000001ba,0x000001d2,0x00000000,0x0005002c,0x00000032,0x000001d4, + 0x0000014c,0x0000014c,0x0004002b,0x00000013,0x000001d8,0x00000000,0x0004002b,0x00000013, + 0x000001dc,0x3f800000,0x00090019,0x000001e4,0x00000013,0x00000001,0x00000000,0x00000000, + 0x00000000,0x00000002,0x00000007,0x00040020,0x000001e5,0x00000000,0x000001e4,0x0004003b, + 0x000001e5,0x000001e6,0x00000000,0x0004003b,0x000001e5,0x000001f0,0x00000000,0x0004003b, + 0x000001e5,0x000001fa,0x00000000,0x0004003b,0x000001e5,0x00000204,0x00000000,0x0004002b, + 0x00000006,0x0000020b,0x00000004,0x0004003b,0x000001e5,0x0000020f,0x00000000,0x0004003b, + 0x000001e5,0x00000219,0x00000000,0x0005002c,0x00000038,0x0000021f,0x000001d8,0x000001d8, + 0x00090019,0x0000025e,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000,0x00000002, + 0x00000021,0x00040020,0x0000025f,0x00000000,0x0000025e,0x0004003b,0x0000025f,0x00000260, + 0x00000000,0x00040020,0x00000261,0x0000000b,0x00000006,0x00040017,0x00000265,0x00000006, + 0x00000004,0x0007002c,0x00000265,0x00000266,0x000001bf,0x000001bf,0x000001bf,0x000001bf, + 0x00040020,0x000002af,0x00000004,0x00000006,0x0004003b,0x000002af,0x000002b0,0x00000004, + 0x0004002b,0x0000001a,0x000002ba,0x00000003,0x0004002b,0x0000001a,0x000002cd,0x00000004, + 0x0004002b,0x00000013,0x0000035e,0x477fdf00,0x0004002b,0x00000013,0x00000372,0x00800000, + 0x0004002b,0x0000001a,0x0000037d,0x00000005,0x0004002b,0x00000013,0x00000380,0x477fe000, + 0x0004002b,0x00000013,0x0000038d,0x387fda40,0x0004001c,0x000003d9,0x00000032,0x00000081, + 0x0004002b,0x0000001a,0x000003da,0xffffffff,0x0005002c,0x00000032,0x000003db,0x000003da, + 0x0000014c,0x0005002c,0x00000032,0x000003dc,0x00000191,0x0000014c,0x0005002c,0x00000032, + 0x000003dd,0x0000014c,0x000003da,0x0005002c,0x00000032,0x000003de,0x0000014c,0x00000191, + 0x0008002c,0x000003d9,0x000003df,0x000001d4,0x000003db,0x000003dc,0x000003dd,0x000003de, + 0x00040020,0x000003e5,0x00000007,0x000003d9,0x00040020,0x00000413,0x00000007,0x00000093, + 0x00040020,0x00000418,0x00000007,0x0000006e,0x0004002b,0x00000013,0x0000047f,0x3f000000, + 0x0007002c,0x0000009f,0x0000048e,0x000001d8,0x000001d8,0x000001d8,0x000001d8,0x0004002b, + 0x00000013,0x000004af,0x3e800000,0x0004002b,0x00000006,0x000004bf,0x00000010,0x0004001c, + 0x000004c0,0x00000013,0x000004bf,0x0004001c,0x000004c1,0x000004c0,0x000004bf,0x00040020, + 0x000004c2,0x00000004,0x000004c1,0x0004003b,0x000004c2,0x000004c3,0x00000004,0x00040020, + 0x000004c6,0x00000004,0x00000013,0x0004003b,0x000004c2,0x000004c9,0x00000004,0x0004003b, + 0x000004c2,0x000004ce,0x00000004,0x0004003b,0x000004c2,0x000004d3,0x00000004,0x0004002b, + 0x00000006,0x000004ef,0x00000d48,0x0004002b,0x00000006,0x000004f0,0x00000108,0x0005002c, + 0x0000002d,0x0000053f,0x000001bf,0x000001bf,0x0005002c,0x0000002d,0x00000542,0x000001bf, + 0x00000172,0x0005002c,0x0000002d,0x00000545,0x00000172,0x000001bf,0x0005002c,0x0000002d, + 0x00000548,0x00000172,0x00000172,0x0004002b,0x00000006,0x00000591,0x00000040,0x0004002b, + 0x00000006,0x0000059f,0x00000020,0x0004001c,0x000005a9,0x0000009f,0x0000020b,0x00040020, + 0x000005aa,0x00000007,0x000005a9,0x0004002b,0x00000006,0x00000678,0x00000008,0x0004002b, + 0x00000006,0x000007af,0x00000006,0x0004002b,0x00000006,0x0000081c,0x00000007,0x0004002b, + 0x0000001a,0x00000899,0x00000006,0x00040020,0x00000904,0x00000001,0x0000013b,0x0004003b, + 0x00000904,0x00000905,0x00000001,0x00040020,0x00000906,0x00000001,0x00000006,0x0004003b, + 0x00000906,0x00000907,0x00000001,0x0004002b,0x00000013,0x0000090d,0x37801002,0x0002001a, + 0x0000090e,0x00040020,0x0000090f,0x00000000,0x0000090e,0x0004003b,0x0000090f,0x00000910, + 0x00000000,0x0004003b,0x0000090f,0x00000911,0x00000000,0x0004002b,0x00000013,0x00000912, + 0x7f7fffff,0x0004002b,0x00000013,0x00000913,0x3a1fe868,0x0004002b,0x00000013,0x00000914, + 0x3d800000,0x0004002b,0x00000013,0x00000915,0x3d3d70a4,0x0004002b,0x00000013,0x00000916, + 0x3e400000,0x0004002b,0x00000013,0x00000917,0x40000000,0x0004002b,0x00000013,0x00000918, + 0x461c4000,0x0004002b,0x00000006,0x00000919,0x00000100,0x0006002c,0x0000013b,0x0000091a, + 0x00000919,0x00000172,0x00000172,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003, + 0x000200f8,0x00000005,0x0004003b,0x0000013c,0x00000908,0x00000007,0x0004003b,0x00000007, + 0x0000090a,0x00000007,0x0004003d,0x0000013b,0x00000909,0x00000905,0x0003003e,0x00000908, + 0x00000909,0x0004003d,0x00000006,0x0000090b,0x00000907,0x0003003e,0x0000090a,0x0000090b, + 0x00060039,0x00000002,0x0000090c,0x00000140,0x00000908,0x0000090a,0x000100fd,0x00010038, + 0x00050036,0x00000006,0x0000000c,0x00000000,0x00000008,0x00030037,0x00000007,0x00000009, + 0x00030037,0x00000007,0x0000000a,0x00030037,0x00000007,0x0000000b,0x000200f8,0x0000000d, + 0x0004003d,0x00000006,0x00000142,0x00000009,0x0004003d,0x00000006,0x00000143,0x0000000a, + 0x0004007c,0x0000001a,0x00000144,0x00000143,0x0004003d,0x00000006,0x00000145,0x0000000b, + 0x0004007c,0x0000001a,0x00000146,0x00000145,0x000600cb,0x00000006,0x00000147,0x00000142, + 0x00000144,0x00000146,0x000200fe,0x00000147,0x00010038,0x00050036,0x00000006,0x00000011, + 0x00000000,0x00000008,0x00030037,0x00000007,0x0000000e,0x00030037,0x00000007,0x0000000f, + 0x00030037,0x00000007,0x00000010,0x000200f8,0x00000012,0x0004003d,0x00000006,0x0000014a, + 0x0000000e,0x0004003d,0x00000006,0x0000014b,0x0000000f,0x0004003d,0x00000006,0x0000014d, + 0x00000010,0x0004007c,0x0000001a,0x0000014e,0x0000014d,0x000700c9,0x00000006,0x0000014f, + 0x0000014a,0x0000014b,0x0000014c,0x0000014e,0x000200fe,0x0000014f,0x00010038,0x00050036, + 0x00000013,0x00000018,0x00000000,0x00000015,0x00030037,0x00000014,0x00000016,0x00030037, + 0x00000014,0x00000017,0x000200f8,0x00000019,0x0004003d,0x00000013,0x00000152,0x00000016, + 0x0004003d,0x00000013,0x00000153,0x00000017,0x0007000c,0x00000013,0x00000154,0x00000001, + 0x00000025,0x00000152,0x00000153,0x000200fe,0x00000154,0x00010038,0x00050036,0x0000001a, + 0x0000001f,0x00000000,0x0000001c,0x00030037,0x0000001b,0x0000001d,0x00030037,0x0000001b, + 0x0000001e,0x000200f8,0x00000020,0x0004003d,0x0000001a,0x00000157,0x0000001d,0x0004003d, + 0x0000001a,0x00000158,0x0000001e,0x0007000c,0x0000001a,0x00000159,0x00000001,0x00000027, + 0x00000157,0x00000158,0x000200fe,0x00000159,0x00010038,0x00050036,0x00000013,0x00000023, + 0x00000000,0x00000015,0x00030037,0x00000014,0x00000021,0x00030037,0x00000014,0x00000022, + 0x000200f8,0x00000024,0x0004003d,0x00000013,0x0000015c,0x00000021,0x0004003d,0x00000013, + 0x0000015d,0x00000022,0x0007000c,0x00000013,0x0000015e,0x00000001,0x00000028,0x0000015c, + 0x0000015d,0x000200fe,0x0000015e,0x00010038,0x00050036,0x0000001a,0x00000027,0x00000000, + 0x0000001c,0x00030037,0x0000001b,0x00000025,0x00030037,0x0000001b,0x00000026,0x000200f8, + 0x00000028,0x0004003d,0x0000001a,0x00000161,0x00000025,0x0004003d,0x0000001a,0x00000162, + 0x00000026,0x0007000c,0x0000001a,0x00000163,0x00000001,0x0000002a,0x00000161,0x00000162, + 0x000200fe,0x00000163,0x00010038,0x00050036,0x00000013,0x0000002b,0x00000000,0x00000015, + 0x00030037,0x00000014,0x00000029,0x00030037,0x00000014,0x0000002a,0x000200f8,0x0000002c, + 0x0004003d,0x00000013,0x00000166,0x00000029,0x0004003d,0x00000013,0x00000167,0x0000002a, + 0x0007000c,0x00000013,0x00000168,0x00000001,0x0000001a,0x00000166,0x00000167,0x000200fe, + 0x00000168,0x00010038,0x00050036,0x0000002d,0x00000030,0x00000000,0x0000002e,0x00030037, + 0x00000007,0x0000002f,0x000200f8,0x00000031,0x0004003b,0x00000007,0x0000016d,0x00000007, + 0x0004003b,0x00000007,0x0000016f,0x00000007,0x0004003b,0x00000007,0x00000170,0x00000007, + 0x0004003b,0x00000007,0x00000173,0x00000007,0x0004003b,0x00000007,0x00000174,0x00000007, + 0x0004003b,0x00000007,0x00000176,0x00000007,0x0004003b,0x00000007,0x00000178,0x00000007, + 0x0004003b,0x00000007,0x0000017a,0x00000007,0x0004003b,0x00000007,0x0000017b,0x00000007, + 0x0004003b,0x00000007,0x0000017d,0x00000007,0x0004003b,0x00000007,0x0000017f,0x00000007, + 0x0004003b,0x00000007,0x00000180,0x00000007,0x0004003b,0x00000007,0x00000182,0x00000007, + 0x0004003b,0x00000007,0x00000183,0x00000007,0x0004003b,0x00000007,0x00000184,0x00000007, + 0x0004003d,0x00000006,0x0000016e,0x0000002f,0x0003003e,0x0000016d,0x0000016e,0x0003003e, + 0x0000016f,0x0000016b,0x0003003e,0x00000170,0x0000016c,0x00070039,0x00000006,0x00000171, + 0x0000000c,0x0000016d,0x0000016f,0x00000170,0x0003003e,0x00000173,0x00000171,0x0004003d, + 0x00000006,0x00000175,0x0000002f,0x0003003e,0x00000174,0x00000175,0x0003003e,0x00000176, + 0x00000172,0x00070039,0x00000006,0x00000177,0x00000011,0x00000173,0x00000174,0x00000176, + 0x0004003d,0x00000006,0x00000179,0x0000002f,0x0003003e,0x00000178,0x00000179,0x0003003e, + 0x0000017a,0x0000016c,0x0003003e,0x0000017b,0x0000016c,0x00070039,0x00000006,0x0000017c, + 0x0000000c,0x00000178,0x0000017a,0x0000017b,0x0004003d,0x00000006,0x0000017e,0x0000002f, + 0x0003003e,0x0000017d,0x0000017e,0x0003003e,0x0000017f,0x00000172,0x0003003e,0x00000180, + 0x0000016b,0x00070039,0x00000006,0x00000181,0x0000000c,0x0000017d,0x0000017f,0x00000180, + 0x0003003e,0x00000182,0x0000017c,0x0003003e,0x00000183,0x00000181,0x0003003e,0x00000184, + 0x0000016b,0x00070039,0x00000006,0x00000185,0x00000011,0x00000182,0x00000183,0x00000184, + 0x00050050,0x0000002d,0x00000186,0x00000177,0x00000185,0x000200fe,0x00000186,0x00010038, + 0x00050036,0x00000032,0x00000034,0x00000000,0x00000033,0x000200f8,0x00000035,0x00050041, + 0x0000018c,0x0000018d,0x0000018b,0x0000014c,0x0004003d,0x00000032,0x0000018e,0x0000018d, + 0x000200fe,0x0000018e,0x00010038,0x00050036,0x00000032,0x00000036,0x00000000,0x00000033, + 0x000200f8,0x00000037,0x00050041,0x0000018c,0x00000192,0x0000018b,0x00000191,0x0004003d, + 0x00000032,0x00000193,0x00000192,0x000200fe,0x00000193,0x00010038,0x00050036,0x00000038, + 0x0000003a,0x00000000,0x00000039,0x000200f8,0x0000003b,0x00050041,0x00000197,0x00000198, + 0x0000018b,0x00000196,0x0004003d,0x00000038,0x00000199,0x00000198,0x000200fe,0x00000199, + 0x00010038,0x00050036,0x00000038,0x0000003c,0x00000000,0x00000039,0x000200f8,0x0000003d, + 0x00050041,0x00000197,0x0000019d,0x0000018b,0x0000019c,0x0004003d,0x00000038,0x0000019e, + 0x0000019d,0x000200fe,0x0000019e,0x00010038,0x00050036,0x00000013,0x0000003f,0x00000000, + 0x0000003e,0x000200f8,0x00000040,0x00050041,0x000001a2,0x000001a3,0x0000018b,0x000001a1, + 0x0004003d,0x00000013,0x000001a4,0x000001a3,0x000200fe,0x000001a4,0x00010038,0x00050036, + 0x00000006,0x00000042,0x00000000,0x00000041,0x000200f8,0x00000043,0x00050041,0x000001aa, + 0x000001ab,0x000001a9,0x0000014c,0x0004003d,0x00000006,0x000001ac,0x000001ab,0x000200fe, + 0x000001ac,0x00010038,0x00050036,0x00000006,0x00000044,0x00000000,0x00000041,0x000200f8, + 0x00000045,0x00050041,0x000001aa,0x000001af,0x000001a9,0x00000191,0x0004003d,0x00000006, + 0x000001b0,0x000001af,0x000200fe,0x000001b0,0x00010038,0x00050036,0x0000002d,0x00000047, + 0x00000000,0x00000046,0x000200f8,0x00000048,0x00050041,0x000001b4,0x000001b5,0x000001a9, + 0x000001b3,0x0004003d,0x0000002d,0x000001b6,0x000001b5,0x000200fe,0x000001b6,0x00010038, + 0x00050036,0x00000013,0x0000004c,0x00000000,0x0000004a,0x00030037,0x00000049,0x0000004b, + 0x000200f8,0x0000004d,0x0004003d,0x000001b9,0x000001bc,0x000001bb,0x0004003d,0x00000032, + 0x000001bd,0x0000004b,0x0007005f,0x0000009f,0x000001be,0x000001bc,0x000001bd,0x00000002, + 0x0000014c,0x00050051,0x00000013,0x000001c0,0x000001be,0x00000000,0x000200fe,0x000001c0, + 0x00010038,0x00050036,0x00000013,0x0000004f,0x00000000,0x0000004a,0x00030037,0x00000049, + 0x0000004e,0x000200f8,0x00000050,0x0004003d,0x000001b9,0x000001c4,0x000001c3,0x0004003d, + 0x00000032,0x000001c5,0x0000004e,0x0007005f,0x0000009f,0x000001c6,0x000001c4,0x000001c5, + 0x00000002,0x0000014c,0x00050051,0x00000013,0x000001c7,0x000001c6,0x00000000,0x000200fe, + 0x000001c7,0x00010038,0x00050036,0x00000038,0x00000053,0x00000000,0x00000051,0x00030037, + 0x00000049,0x00000052,0x000200f8,0x00000054,0x0004003d,0x000001b9,0x000001cb,0x000001ca, + 0x0004003d,0x00000032,0x000001cc,0x00000052,0x0007005f,0x0000009f,0x000001cd,0x000001cb, + 0x000001cc,0x00000002,0x0000014c,0x0007004f,0x00000038,0x000001ce,0x000001cd,0x000001cd, + 0x00000000,0x00000001,0x000200fe,0x000001ce,0x00010038,0x00050036,0x00000013,0x00000055, + 0x00000000,0x0000003e,0x000200f8,0x00000056,0x0004003b,0x00000014,0x000001d1,0x00000007, + 0x0004003d,0x000001b9,0x000001d3,0x000001d2,0x0007005f,0x0000009f,0x000001d5,0x000001d3, + 0x000001d4,0x00000002,0x0000014c,0x00050051,0x00000013,0x000001d6,0x000001d5,0x00000000, + 0x0003003e,0x000001d1,0x000001d6,0x0004003d,0x00000013,0x000001d7,0x000001d1,0x000500b4, + 0x0000006e,0x000001d9,0x000001d7,0x000001d8,0x000300f7,0x000001db,0x00000000,0x000400fa, + 0x000001d9,0x000001da,0x000001db,0x000200f8,0x000001da,0x0003003e,0x000001d1,0x000001dc, + 0x000200f9,0x000001db,0x000200f8,0x000001db,0x0004003d,0x00000013,0x000001dd,0x000001d1, + 0x000200fe,0x000001dd,0x00010038,0x00050036,0x00000038,0x0000005a,0x00000000,0x00000057, + 0x00030037,0x00000049,0x00000058,0x00030037,0x00000007,0x00000059,0x000200f8,0x0000005b, + 0x0004003d,0x00000006,0x000001e0,0x00000059,0x000500aa,0x0000006e,0x000001e1,0x000001e0, + 0x000001bf,0x000300f7,0x000001e3,0x00000000,0x000400fa,0x000001e1,0x000001e2,0x000001e3, + 0x000200f8,0x000001e2,0x0004003d,0x000001e4,0x000001e7,0x000001e6,0x0004003d,0x00000032, + 0x000001e8,0x00000058,0x00050062,0x0000009f,0x000001e9,0x000001e7,0x000001e8,0x0007004f, + 0x00000038,0x000001ea,0x000001e9,0x000001e9,0x00000000,0x00000001,0x000200fe,0x000001ea, + 0x000200f8,0x000001e3,0x0004003d,0x00000006,0x000001ec,0x00000059,0x000500aa,0x0000006e, + 0x000001ed,0x000001ec,0x00000172,0x000300f7,0x000001ef,0x00000000,0x000400fa,0x000001ed, + 0x000001ee,0x000001ef,0x000200f8,0x000001ee,0x0004003d,0x000001e4,0x000001f1,0x000001f0, + 0x0004003d,0x00000032,0x000001f2,0x00000058,0x00050062,0x0000009f,0x000001f3,0x000001f1, + 0x000001f2,0x0007004f,0x00000038,0x000001f4,0x000001f3,0x000001f3,0x00000000,0x00000001, + 0x000200fe,0x000001f4,0x000200f8,0x000001ef,0x0004003d,0x00000006,0x000001f6,0x00000059, + 0x000500aa,0x0000006e,0x000001f7,0x000001f6,0x0000016b,0x000300f7,0x000001f9,0x00000000, + 0x000400fa,0x000001f7,0x000001f8,0x000001f9,0x000200f8,0x000001f8,0x0004003d,0x000001e4, + 0x000001fb,0x000001fa,0x0004003d,0x00000032,0x000001fc,0x00000058,0x00050062,0x0000009f, + 0x000001fd,0x000001fb,0x000001fc,0x0007004f,0x00000038,0x000001fe,0x000001fd,0x000001fd, + 0x00000000,0x00000001,0x000200fe,0x000001fe,0x000200f8,0x000001f9,0x0004003d,0x00000006, + 0x00000200,0x00000059,0x000500aa,0x0000006e,0x00000201,0x00000200,0x0000016c,0x000300f7, + 0x00000203,0x00000000,0x000400fa,0x00000201,0x00000202,0x00000203,0x000200f8,0x00000202, + 0x0004003d,0x000001e4,0x00000205,0x00000204,0x0004003d,0x00000032,0x00000206,0x00000058, + 0x00050062,0x0000009f,0x00000207,0x00000205,0x00000206,0x0007004f,0x00000038,0x00000208, + 0x00000207,0x00000207,0x00000000,0x00000001,0x000200fe,0x00000208,0x000200f8,0x00000203, + 0x0004003d,0x00000006,0x0000020a,0x00000059,0x000500aa,0x0000006e,0x0000020c,0x0000020a, + 0x0000020b,0x000300f7,0x0000020e,0x00000000,0x000400fa,0x0000020c,0x0000020d,0x0000020e, + 0x000200f8,0x0000020d,0x0004003d,0x000001e4,0x00000210,0x0000020f,0x0004003d,0x00000032, + 0x00000211,0x00000058,0x00050062,0x0000009f,0x00000212,0x00000210,0x00000211,0x0007004f, + 0x00000038,0x00000213,0x00000212,0x00000212,0x00000000,0x00000001,0x000200fe,0x00000213, + 0x000200f8,0x0000020e,0x0004003d,0x00000006,0x00000215,0x00000059,0x000500aa,0x0000006e, + 0x00000216,0x00000215,0x00000081,0x000300f7,0x00000218,0x00000000,0x000400fa,0x00000216, + 0x00000217,0x00000218,0x000200f8,0x00000217,0x0004003d,0x000001e4,0x0000021a,0x00000219, + 0x0004003d,0x00000032,0x0000021b,0x00000058,0x00050062,0x0000009f,0x0000021c,0x0000021a, + 0x0000021b,0x0007004f,0x00000038,0x0000021d,0x0000021c,0x0000021c,0x00000000,0x00000001, + 0x000200fe,0x0000021d,0x000200f8,0x00000218,0x000200fe,0x0000021f,0x00010038,0x00050036, + 0x00000002,0x00000061,0x00000000,0x0000005d,0x00030037,0x00000049,0x0000005e,0x00030037, + 0x0000005c,0x0000005f,0x00030037,0x00000007,0x00000060,0x000200f8,0x00000062,0x0004003d, + 0x00000006,0x00000222,0x00000060,0x000500aa,0x0000006e,0x00000223,0x00000222,0x000001bf, + 0x000300f7,0x00000225,0x00000000,0x000400fa,0x00000223,0x00000224,0x00000225,0x000200f8, + 0x00000224,0x0004003d,0x000001e4,0x00000226,0x000001e6,0x0004003d,0x00000032,0x00000227, + 0x0000005e,0x0004003d,0x00000038,0x00000228,0x0000005f,0x00050051,0x00000013,0x00000229, + 0x00000228,0x00000000,0x00050051,0x00000013,0x0000022a,0x00000228,0x00000001,0x00070050, + 0x0000009f,0x0000022b,0x00000229,0x0000022a,0x000001d8,0x000001d8,0x00040063,0x00000226, + 0x00000227,0x0000022b,0x000200f9,0x00000225,0x000200f8,0x00000225,0x0004003d,0x00000006, + 0x0000022c,0x00000060,0x000500aa,0x0000006e,0x0000022d,0x0000022c,0x00000172,0x000300f7, + 0x0000022f,0x00000000,0x000400fa,0x0000022d,0x0000022e,0x0000022f,0x000200f8,0x0000022e, + 0x0004003d,0x000001e4,0x00000230,0x000001f0,0x0004003d,0x00000032,0x00000231,0x0000005e, + 0x0004003d,0x00000038,0x00000232,0x0000005f,0x00050051,0x00000013,0x00000233,0x00000232, + 0x00000000,0x00050051,0x00000013,0x00000234,0x00000232,0x00000001,0x00070050,0x0000009f, + 0x00000235,0x00000233,0x00000234,0x000001d8,0x000001d8,0x00040063,0x00000230,0x00000231, + 0x00000235,0x000200f9,0x0000022f,0x000200f8,0x0000022f,0x0004003d,0x00000006,0x00000236, + 0x00000060,0x000500aa,0x0000006e,0x00000237,0x00000236,0x0000016b,0x000300f7,0x00000239, + 0x00000000,0x000400fa,0x00000237,0x00000238,0x00000239,0x000200f8,0x00000238,0x0004003d, + 0x000001e4,0x0000023a,0x000001fa,0x0004003d,0x00000032,0x0000023b,0x0000005e,0x0004003d, + 0x00000038,0x0000023c,0x0000005f,0x00050051,0x00000013,0x0000023d,0x0000023c,0x00000000, + 0x00050051,0x00000013,0x0000023e,0x0000023c,0x00000001,0x00070050,0x0000009f,0x0000023f, + 0x0000023d,0x0000023e,0x000001d8,0x000001d8,0x00040063,0x0000023a,0x0000023b,0x0000023f, + 0x000200f9,0x00000239,0x000200f8,0x00000239,0x0004003d,0x00000006,0x00000240,0x00000060, + 0x000500aa,0x0000006e,0x00000241,0x00000240,0x0000016c,0x000300f7,0x00000243,0x00000000, + 0x000400fa,0x00000241,0x00000242,0x00000243,0x000200f8,0x00000242,0x0004003d,0x000001e4, + 0x00000244,0x00000204,0x0004003d,0x00000032,0x00000245,0x0000005e,0x0004003d,0x00000038, + 0x00000246,0x0000005f,0x00050051,0x00000013,0x00000247,0x00000246,0x00000000,0x00050051, + 0x00000013,0x00000248,0x00000246,0x00000001,0x00070050,0x0000009f,0x00000249,0x00000247, + 0x00000248,0x000001d8,0x000001d8,0x00040063,0x00000244,0x00000245,0x00000249,0x000200f9, + 0x00000243,0x000200f8,0x00000243,0x0004003d,0x00000006,0x0000024a,0x00000060,0x000500aa, + 0x0000006e,0x0000024b,0x0000024a,0x0000020b,0x000300f7,0x0000024d,0x00000000,0x000400fa, + 0x0000024b,0x0000024c,0x0000024d,0x000200f8,0x0000024c,0x0004003d,0x000001e4,0x0000024e, + 0x0000020f,0x0004003d,0x00000032,0x0000024f,0x0000005e,0x0004003d,0x00000038,0x00000250, + 0x0000005f,0x00050051,0x00000013,0x00000251,0x00000250,0x00000000,0x00050051,0x00000013, + 0x00000252,0x00000250,0x00000001,0x00070050,0x0000009f,0x00000253,0x00000251,0x00000252, + 0x000001d8,0x000001d8,0x00040063,0x0000024e,0x0000024f,0x00000253,0x000200f9,0x0000024d, + 0x000200f8,0x0000024d,0x0004003d,0x00000006,0x00000254,0x00000060,0x000500aa,0x0000006e, + 0x00000255,0x00000254,0x00000081,0x000300f7,0x00000257,0x00000000,0x000400fa,0x00000255, + 0x00000256,0x00000257,0x000200f8,0x00000256,0x0004003d,0x000001e4,0x00000258,0x00000219, + 0x0004003d,0x00000032,0x00000259,0x0000005e,0x0004003d,0x00000038,0x0000025a,0x0000005f, + 0x00050051,0x00000013,0x0000025b,0x0000025a,0x00000000,0x00050051,0x00000013,0x0000025c, + 0x0000025a,0x00000001,0x00070050,0x0000009f,0x0000025d,0x0000025b,0x0000025c,0x000001d8, + 0x000001d8,0x00040063,0x00000258,0x00000259,0x0000025d,0x000200f9,0x00000257,0x000200f8, + 0x00000257,0x000100fd,0x00010038,0x00050036,0x00000002,0x00000065,0x00000000,0x00000063, + 0x00030037,0x00000007,0x00000064,0x000200f8,0x00000066,0x0006003c,0x00000261,0x00000262, + 0x00000260,0x000001d4,0x000001bf,0x000700ea,0x00000006,0x00000263,0x00000262,0x00000172, + 0x000001bf,0x00000172,0x0003003e,0x00000064,0x00000263,0x000100fd,0x00010038,0x00050036, + 0x00000002,0x00000067,0x00000000,0x00000003,0x000200f8,0x00000068,0x0004003d,0x0000025e, + 0x00000264,0x00000260,0x00040063,0x00000264,0x000001d4,0x00000266,0x000100fd,0x00010038, + 0x00050036,0x00000013,0x0000006c,0x00000000,0x00000069,0x00030037,0x00000013,0x0000006a, + 0x00030037,0x00000013,0x0000006b,0x000200f8,0x0000006d,0x0004003b,0x00000014,0x00000267, + 0x00000007,0x0004003b,0x00000014,0x00000268,0x00000007,0x0004003b,0x00000014,0x00000269, + 0x00000007,0x0004003b,0x00000014,0x0000026d,0x00000007,0x0004003b,0x00000014,0x00000270, + 0x00000007,0x0004003b,0x00000014,0x00000271,0x00000007,0x0003003e,0x00000268,0x0000006a, + 0x0003003e,0x00000269,0x0000006b,0x00060039,0x00000013,0x0000026a,0x00000023,0x00000268, + 0x00000269,0x0003003e,0x00000267,0x0000026a,0x0004003d,0x00000013,0x0000026b,0x00000267, + 0x000500b7,0x0000006e,0x0000026c,0x0000026b,0x000001d8,0x000300f7,0x0000026f,0x00000000, + 0x000400fa,0x0000026c,0x0000026e,0x00000275,0x000200f8,0x0000026e,0x0003003e,0x00000270, + 0x0000006a,0x0003003e,0x00000271,0x0000006b,0x00060039,0x00000013,0x00000272,0x00000018, + 0x00000270,0x00000271,0x0004003d,0x00000013,0x00000273,0x00000267,0x00050088,0x00000013, + 0x00000274,0x00000272,0x00000273,0x0003003e,0x0000026d,0x00000274,0x000200f9,0x0000026f, + 0x000200f8,0x00000275,0x0003003e,0x0000026d,0x000001d8,0x000200f9,0x0000026f,0x000200f8, + 0x0000026f,0x0004003d,0x00000013,0x00000276,0x0000026d,0x000200fe,0x00000276,0x00010038, + 0x00050036,0x0000006e,0x00000071,0x00000000,0x0000006f,0x00030037,0x0000005c,0x00000070, + 0x000200f8,0x00000072,0x00050041,0x00000014,0x00000279,0x00000070,0x000001bf,0x0004003d, + 0x00000013,0x0000027a,0x00000279,0x000500be,0x0000006e,0x0000027b,0x0000027a,0x000001d8, + 0x000300f7,0x0000027d,0x00000000,0x000400fa,0x0000027b,0x0000027c,0x0000027d,0x000200f8, + 0x0000027c,0x00050041,0x00000014,0x0000027e,0x00000070,0x000001bf,0x0004003d,0x00000013, + 0x0000027f,0x0000027e,0x000500bc,0x0000006e,0x00000280,0x0000027f,0x000001dc,0x000200f9, + 0x0000027d,0x000200f8,0x0000027d,0x000700f5,0x0000006e,0x00000281,0x0000027b,0x00000072, + 0x00000280,0x0000027c,0x000300f7,0x00000283,0x00000000,0x000400fa,0x00000281,0x00000282, + 0x00000283,0x000200f8,0x00000282,0x00050041,0x00000014,0x00000284,0x00000070,0x00000172, + 0x0004003d,0x00000013,0x00000285,0x00000284,0x000500be,0x0000006e,0x00000286,0x00000285, + 0x000001d8,0x000300f7,0x00000288,0x00000000,0x000400fa,0x00000286,0x00000287,0x00000288, + 0x000200f8,0x00000287,0x00050041,0x00000014,0x00000289,0x00000070,0x00000172,0x0004003d, + 0x00000013,0x0000028a,0x00000289,0x000500bc,0x0000006e,0x0000028b,0x0000028a,0x000001dc, + 0x000200f9,0x00000288,0x000200f8,0x00000288,0x000700f5,0x0000006e,0x0000028c,0x00000286, + 0x00000282,0x0000028b,0x00000287,0x000200f9,0x00000283,0x000200f8,0x00000283,0x000700f5, + 0x0000006e,0x0000028d,0x00000281,0x0000027d,0x0000028c,0x00000288,0x000200fe,0x0000028d, + 0x00010038,0x00050036,0x00000032,0x00000077,0x00000000,0x00000073,0x00030037,0x00000049, + 0x00000074,0x00030037,0x00000049,0x00000075,0x00030037,0x00000049,0x00000076,0x000200f8, + 0x00000078,0x0004003b,0x00000049,0x00000290,0x00000007,0x0004003b,0x0000001b,0x00000297, + 0x00000007,0x0004003b,0x0000001b,0x0000029a,0x00000007,0x0004003b,0x0000001b,0x0000029c, + 0x00000007,0x0004003b,0x0000001b,0x0000029d,0x00000007,0x0004003b,0x0000001b,0x000002a3, + 0x00000007,0x0004003b,0x0000001b,0x000002a6,0x00000007,0x0004003b,0x0000001b,0x000002a8, + 0x00000007,0x0004003b,0x0000001b,0x000002a9,0x00000007,0x0004003d,0x00000032,0x00000291, + 0x00000074,0x0004003d,0x00000032,0x00000292,0x00000075,0x00050080,0x00000032,0x00000293, + 0x00000291,0x00000292,0x0003003e,0x00000290,0x00000293,0x00050041,0x0000001b,0x00000294, + 0x00000076,0x000001bf,0x0004003d,0x0000001a,0x00000295,0x00000294,0x00050082,0x0000001a, + 0x00000296,0x00000295,0x00000191,0x00050041,0x0000001b,0x00000298,0x00000290,0x000001bf, + 0x0004003d,0x0000001a,0x00000299,0x00000298,0x0003003e,0x00000297,0x00000299,0x0003003e, + 0x0000029a,0x00000296,0x00060039,0x0000001a,0x0000029b,0x0000001f,0x00000297,0x0000029a, + 0x0003003e,0x0000029c,0x0000014c,0x0003003e,0x0000029d,0x0000029b,0x00060039,0x0000001a, + 0x0000029e,0x00000027,0x0000029c,0x0000029d,0x00050041,0x0000001b,0x0000029f,0x00000290, + 0x000001bf,0x0003003e,0x0000029f,0x0000029e,0x00050041,0x0000001b,0x000002a0,0x00000076, + 0x00000172,0x0004003d,0x0000001a,0x000002a1,0x000002a0,0x00050082,0x0000001a,0x000002a2, + 0x000002a1,0x00000191,0x00050041,0x0000001b,0x000002a4,0x00000290,0x00000172,0x0004003d, + 0x0000001a,0x000002a5,0x000002a4,0x0003003e,0x000002a3,0x000002a5,0x0003003e,0x000002a6, + 0x000002a2,0x00060039,0x0000001a,0x000002a7,0x0000001f,0x000002a3,0x000002a6,0x0003003e, + 0x000002a8,0x0000014c,0x0003003e,0x000002a9,0x000002a7,0x00060039,0x0000001a,0x000002aa, + 0x00000027,0x000002a8,0x000002a9,0x00050041,0x0000001b,0x000002ab,0x00000290,0x00000172, + 0x0003003e,0x000002ab,0x000002aa,0x0004003d,0x00000032,0x000002ac,0x00000290,0x000200fe, + 0x000002ac,0x00010038,0x00050036,0x00000002,0x0000007a,0x00000000,0x00000063,0x00030037, + 0x00000007,0x00000079,0x000200f8,0x0000007b,0x0004003b,0x00000007,0x000002b1,0x00000007, + 0x0004003d,0x00000006,0x000002b2,0x000002b0,0x0003003e,0x000002b1,0x000002b2,0x00050039, + 0x00000002,0x000002b3,0x00000065,0x000002b1,0x0004003d,0x00000006,0x000002b4,0x000002b1, + 0x0003003e,0x000002b0,0x000002b4,0x000100fd,0x00010038,0x00050036,0x00000006,0x0000007c, + 0x00000000,0x00000041,0x000200f8,0x0000007d,0x0004003d,0x00000006,0x000002b5,0x000002b0, + 0x000200fe,0x000002b5,0x00010038,0x00050036,0x00000002,0x0000007f,0x00000000,0x00000063, + 0x00030037,0x00000007,0x0000007e,0x000200f8,0x00000080,0x00040039,0x00000002,0x000002b8, + 0x00000067,0x000100fd,0x00010038,0x00050036,0x00000002,0x00000087,0x00000000,0x00000085, + 0x00030037,0x00000084,0x00000086,0x000200f8,0x00000088,0x0004003b,0x00000014,0x000002b9, + 0x00000007,0x0004003b,0x00000014,0x000002bb,0x00000007,0x0004003b,0x00000014,0x000002be, + 0x00000007,0x0004003b,0x00000014,0x000002c2,0x00000007,0x0004003b,0x00000014,0x000002c5, + 0x00000007,0x0004003b,0x00000014,0x000002cc,0x00000007,0x0004003b,0x00000014,0x000002ce, + 0x00000007,0x0004003b,0x00000014,0x000002d1,0x00000007,0x0004003b,0x00000014,0x000002d5, + 0x00000007,0x0004003b,0x00000014,0x000002d8,0x00000007,0x0004003b,0x00000014,0x000002df, + 0x00000007,0x0004003b,0x00000014,0x000002e0,0x00000007,0x0004003b,0x00000014,0x000002e3, + 0x00000007,0x0004003b,0x00000014,0x000002e7,0x00000007,0x0004003b,0x00000014,0x000002ea, + 0x00000007,0x0004003b,0x00000014,0x000002f1,0x00000007,0x0004003b,0x00000014,0x000002f2, + 0x00000007,0x0004003b,0x00000014,0x000002f5,0x00000007,0x0004003b,0x00000014,0x000002f9, + 0x00000007,0x0004003b,0x00000014,0x000002fc,0x00000007,0x0004003b,0x00000014,0x00000303, + 0x00000007,0x0004003b,0x00000014,0x00000304,0x00000007,0x0004003b,0x00000014,0x00000307, + 0x00000007,0x0004003b,0x00000014,0x0000030b,0x00000007,0x0004003b,0x00000014,0x0000030e, + 0x00000007,0x0004003b,0x00000014,0x00000315,0x00000007,0x0004003b,0x00000014,0x00000316, + 0x00000007,0x0004003b,0x00000014,0x00000319,0x00000007,0x0004003b,0x00000014,0x0000031d, + 0x00000007,0x0004003b,0x00000014,0x00000320,0x00000007,0x0004003b,0x00000014,0x00000327, + 0x00000007,0x0004003b,0x00000014,0x00000328,0x00000007,0x0004003b,0x00000014,0x0000032b, + 0x00000007,0x0004003b,0x00000014,0x0000032f,0x00000007,0x0004003b,0x00000014,0x00000332, + 0x00000007,0x0004003b,0x00000014,0x00000339,0x00000007,0x0004003b,0x00000014,0x0000033a, + 0x00000007,0x0004003b,0x00000014,0x0000033d,0x00000007,0x0004003b,0x00000014,0x00000341, + 0x00000007,0x0004003b,0x00000014,0x00000344,0x00000007,0x0004003b,0x00000014,0x0000034b, + 0x00000007,0x0004003b,0x00000014,0x0000034c,0x00000007,0x0004003b,0x00000014,0x0000034f, + 0x00000007,0x0004003b,0x00000014,0x00000353,0x00000007,0x0004003b,0x00000014,0x00000356, + 0x00000007,0x00060041,0x00000014,0x000002bc,0x00000086,0x0000014c,0x0000014c,0x0004003d, + 0x00000013,0x000002bd,0x000002bc,0x0003003e,0x000002bb,0x000002bd,0x00060041,0x00000014, + 0x000002bf,0x00000086,0x0000014c,0x000002ba,0x0004003d,0x00000013,0x000002c0,0x000002bf, + 0x0003003e,0x000002be,0x000002c0,0x00060039,0x00000013,0x000002c1,0x00000018,0x000002bb, + 0x000002be,0x0003003e,0x000002b9,0x000002c1,0x00060041,0x00000014,0x000002c3,0x00000086, + 0x0000014c,0x0000014c,0x0004003d,0x00000013,0x000002c4,0x000002c3,0x0003003e,0x000002c2, + 0x000002c4,0x00060041,0x00000014,0x000002c6,0x00000086,0x0000014c,0x000002ba,0x0004003d, + 0x00000013,0x000002c7,0x000002c6,0x0003003e,0x000002c5,0x000002c7,0x00060039,0x00000013, + 0x000002c8,0x00000023,0x000002c2,0x000002c5,0x00060041,0x00000014,0x000002c9,0x00000086, + 0x0000014c,0x000002ba,0x0003003e,0x000002c9,0x000002c8,0x0004003d,0x00000013,0x000002ca, + 0x000002b9,0x00060041,0x00000014,0x000002cb,0x00000086,0x0000014c,0x0000014c,0x0003003e, + 0x000002cb,0x000002ca,0x00060041,0x00000014,0x000002cf,0x00000086,0x0000014c,0x00000191, + 0x0004003d,0x00000013,0x000002d0,0x000002cf,0x0003003e,0x000002ce,0x000002d0,0x00060041, + 0x00000014,0x000002d2,0x00000086,0x0000014c,0x000002cd,0x0004003d,0x00000013,0x000002d3, + 0x000002d2,0x0003003e,0x000002d1,0x000002d3,0x00060039,0x00000013,0x000002d4,0x00000018, + 0x000002ce,0x000002d1,0x0003003e,0x000002cc,0x000002d4,0x00060041,0x00000014,0x000002d6, + 0x00000086,0x0000014c,0x00000191,0x0004003d,0x00000013,0x000002d7,0x000002d6,0x0003003e, + 0x000002d5,0x000002d7,0x00060041,0x00000014,0x000002d9,0x00000086,0x0000014c,0x000002cd, + 0x0004003d,0x00000013,0x000002da,0x000002d9,0x0003003e,0x000002d8,0x000002da,0x00060039, + 0x00000013,0x000002db,0x00000023,0x000002d5,0x000002d8,0x00060041,0x00000014,0x000002dc, + 0x00000086,0x0000014c,0x000002cd,0x0003003e,0x000002dc,0x000002db,0x0004003d,0x00000013, + 0x000002dd,0x000002cc,0x00060041,0x00000014,0x000002de,0x00000086,0x0000014c,0x00000191, + 0x0003003e,0x000002de,0x000002dd,0x00060041,0x00000014,0x000002e1,0x00000086,0x0000014c, + 0x0000014c,0x0004003d,0x00000013,0x000002e2,0x000002e1,0x0003003e,0x000002e0,0x000002e2, + 0x00060041,0x00000014,0x000002e4,0x00000086,0x0000014c,0x000001b3,0x0004003d,0x00000013, + 0x000002e5,0x000002e4,0x0003003e,0x000002e3,0x000002e5,0x00060039,0x00000013,0x000002e6, + 0x00000018,0x000002e0,0x000002e3,0x0003003e,0x000002df,0x000002e6,0x00060041,0x00000014, + 0x000002e8,0x00000086,0x0000014c,0x0000014c,0x0004003d,0x00000013,0x000002e9,0x000002e8, + 0x0003003e,0x000002e7,0x000002e9,0x00060041,0x00000014,0x000002eb,0x00000086,0x0000014c, + 0x000001b3,0x0004003d,0x00000013,0x000002ec,0x000002eb,0x0003003e,0x000002ea,0x000002ec, + 0x00060039,0x00000013,0x000002ed,0x00000023,0x000002e7,0x000002ea,0x00060041,0x00000014, + 0x000002ee,0x00000086,0x0000014c,0x000001b3,0x0003003e,0x000002ee,0x000002ed,0x0004003d, + 0x00000013,0x000002ef,0x000002df,0x00060041,0x00000014,0x000002f0,0x00000086,0x0000014c, + 0x0000014c,0x0003003e,0x000002f0,0x000002ef,0x00060041,0x00000014,0x000002f3,0x00000086, + 0x0000014c,0x00000191,0x0004003d,0x00000013,0x000002f4,0x000002f3,0x0003003e,0x000002f2, + 0x000002f4,0x00060041,0x00000014,0x000002f6,0x00000086,0x0000014c,0x000002ba,0x0004003d, + 0x00000013,0x000002f7,0x000002f6,0x0003003e,0x000002f5,0x000002f7,0x00060039,0x00000013, + 0x000002f8,0x00000018,0x000002f2,0x000002f5,0x0003003e,0x000002f1,0x000002f8,0x00060041, + 0x00000014,0x000002fa,0x00000086,0x0000014c,0x00000191,0x0004003d,0x00000013,0x000002fb, + 0x000002fa,0x0003003e,0x000002f9,0x000002fb,0x00060041,0x00000014,0x000002fd,0x00000086, + 0x0000014c,0x000002ba,0x0004003d,0x00000013,0x000002fe,0x000002fd,0x0003003e,0x000002fc, + 0x000002fe,0x00060039,0x00000013,0x000002ff,0x00000023,0x000002f9,0x000002fc,0x00060041, + 0x00000014,0x00000300,0x00000086,0x0000014c,0x000002ba,0x0003003e,0x00000300,0x000002ff, + 0x0004003d,0x00000013,0x00000301,0x000002f1,0x00060041,0x00000014,0x00000302,0x00000086, + 0x0000014c,0x00000191,0x0003003e,0x00000302,0x00000301,0x00060041,0x00000014,0x00000305, + 0x00000086,0x0000014c,0x0000014c,0x0004003d,0x00000013,0x00000306,0x00000305,0x0003003e, + 0x00000304,0x00000306,0x00060041,0x00000014,0x00000308,0x00000086,0x0000014c,0x00000191, + 0x0004003d,0x00000013,0x00000309,0x00000308,0x0003003e,0x00000307,0x00000309,0x00060039, + 0x00000013,0x0000030a,0x00000018,0x00000304,0x00000307,0x0003003e,0x00000303,0x0000030a, + 0x00060041,0x00000014,0x0000030c,0x00000086,0x0000014c,0x0000014c,0x0004003d,0x00000013, + 0x0000030d,0x0000030c,0x0003003e,0x0000030b,0x0000030d,0x00060041,0x00000014,0x0000030f, + 0x00000086,0x0000014c,0x00000191,0x0004003d,0x00000013,0x00000310,0x0000030f,0x0003003e, + 0x0000030e,0x00000310,0x00060039,0x00000013,0x00000311,0x00000023,0x0000030b,0x0000030e, + 0x00060041,0x00000014,0x00000312,0x00000086,0x0000014c,0x00000191,0x0003003e,0x00000312, + 0x00000311,0x0004003d,0x00000013,0x00000313,0x00000303,0x00060041,0x00000014,0x00000314, + 0x00000086,0x0000014c,0x0000014c,0x0003003e,0x00000314,0x00000313,0x00060041,0x00000014, + 0x00000317,0x00000086,0x0000014c,0x000001b3,0x0004003d,0x00000013,0x00000318,0x00000317, + 0x0003003e,0x00000316,0x00000318,0x00060041,0x00000014,0x0000031a,0x00000086,0x0000014c, + 0x000002cd,0x0004003d,0x00000013,0x0000031b,0x0000031a,0x0003003e,0x00000319,0x0000031b, + 0x00060039,0x00000013,0x0000031c,0x00000018,0x00000316,0x00000319,0x0003003e,0x00000315, + 0x0000031c,0x00060041,0x00000014,0x0000031e,0x00000086,0x0000014c,0x000001b3,0x0004003d, + 0x00000013,0x0000031f,0x0000031e,0x0003003e,0x0000031d,0x0000031f,0x00060041,0x00000014, + 0x00000321,0x00000086,0x0000014c,0x000002cd,0x0004003d,0x00000013,0x00000322,0x00000321, + 0x0003003e,0x00000320,0x00000322,0x00060039,0x00000013,0x00000323,0x00000023,0x0000031d, + 0x00000320,0x00060041,0x00000014,0x00000324,0x00000086,0x0000014c,0x000002cd,0x0003003e, + 0x00000324,0x00000323,0x0004003d,0x00000013,0x00000325,0x00000315,0x00060041,0x00000014, + 0x00000326,0x00000086,0x0000014c,0x000001b3,0x0003003e,0x00000326,0x00000325,0x00060041, + 0x00000014,0x00000329,0x00000086,0x0000014c,0x00000191,0x0004003d,0x00000013,0x0000032a, + 0x00000329,0x0003003e,0x00000328,0x0000032a,0x00060041,0x00000014,0x0000032c,0x00000086, + 0x0000014c,0x000001b3,0x0004003d,0x00000013,0x0000032d,0x0000032c,0x0003003e,0x0000032b, + 0x0000032d,0x00060039,0x00000013,0x0000032e,0x00000018,0x00000328,0x0000032b,0x0003003e, + 0x00000327,0x0000032e,0x00060041,0x00000014,0x00000330,0x00000086,0x0000014c,0x00000191, + 0x0004003d,0x00000013,0x00000331,0x00000330,0x0003003e,0x0000032f,0x00000331,0x00060041, + 0x00000014,0x00000333,0x00000086,0x0000014c,0x000001b3,0x0004003d,0x00000013,0x00000334, + 0x00000333,0x0003003e,0x00000332,0x00000334,0x00060039,0x00000013,0x00000335,0x00000023, + 0x0000032f,0x00000332,0x00060041,0x00000014,0x00000336,0x00000086,0x0000014c,0x000001b3, + 0x0003003e,0x00000336,0x00000335,0x0004003d,0x00000013,0x00000337,0x00000327,0x00060041, + 0x00000014,0x00000338,0x00000086,0x0000014c,0x00000191,0x0003003e,0x00000338,0x00000337, + 0x00060041,0x00000014,0x0000033b,0x00000086,0x0000014c,0x000002ba,0x0004003d,0x00000013, + 0x0000033c,0x0000033b,0x0003003e,0x0000033a,0x0000033c,0x00060041,0x00000014,0x0000033e, + 0x00000086,0x0000014c,0x000002cd,0x0004003d,0x00000013,0x0000033f,0x0000033e,0x0003003e, + 0x0000033d,0x0000033f,0x00060039,0x00000013,0x00000340,0x00000018,0x0000033a,0x0000033d, + 0x0003003e,0x00000339,0x00000340,0x00060041,0x00000014,0x00000342,0x00000086,0x0000014c, + 0x000002ba,0x0004003d,0x00000013,0x00000343,0x00000342,0x0003003e,0x00000341,0x00000343, + 0x00060041,0x00000014,0x00000345,0x00000086,0x0000014c,0x000002cd,0x0004003d,0x00000013, + 0x00000346,0x00000345,0x0003003e,0x00000344,0x00000346,0x00060039,0x00000013,0x00000347, + 0x00000023,0x00000341,0x00000344,0x00060041,0x00000014,0x00000348,0x00000086,0x0000014c, + 0x000002cd,0x0003003e,0x00000348,0x00000347,0x0004003d,0x00000013,0x00000349,0x00000339, + 0x00060041,0x00000014,0x0000034a,0x00000086,0x0000014c,0x000002ba,0x0003003e,0x0000034a, + 0x00000349,0x00060041,0x00000014,0x0000034d,0x00000086,0x0000014c,0x000001b3,0x0004003d, + 0x00000013,0x0000034e,0x0000034d,0x0003003e,0x0000034c,0x0000034e,0x00060041,0x00000014, + 0x00000350,0x00000086,0x0000014c,0x000002ba,0x0004003d,0x00000013,0x00000351,0x00000350, + 0x0003003e,0x0000034f,0x00000351,0x00060039,0x00000013,0x00000352,0x00000018,0x0000034c, + 0x0000034f,0x0003003e,0x0000034b,0x00000352,0x00060041,0x00000014,0x00000354,0x00000086, + 0x0000014c,0x000001b3,0x0004003d,0x00000013,0x00000355,0x00000354,0x0003003e,0x00000353, + 0x00000355,0x00060041,0x00000014,0x00000357,0x00000086,0x0000014c,0x000002ba,0x0004003d, + 0x00000013,0x00000358,0x00000357,0x0003003e,0x00000356,0x00000358,0x00060039,0x00000013, + 0x00000359,0x00000023,0x00000353,0x00000356,0x00060041,0x00000014,0x0000035a,0x00000086, + 0x0000014c,0x000002ba,0x0003003e,0x0000035a,0x00000359,0x0004003d,0x00000013,0x0000035b, + 0x0000034b,0x00060041,0x00000014,0x0000035c,0x00000086,0x0000014c,0x000001b3,0x0003003e, + 0x0000035c,0x0000035b,0x000100fd,0x00010038,0x00050036,0x00000013,0x0000008d,0x00000000, + 0x00000089,0x00030037,0x00000049,0x0000008a,0x00030037,0x00000084,0x0000008b,0x00030037, + 0x00000084,0x0000008c,0x000200f8,0x0000008e,0x0004003b,0x00000014,0x0000035d,0x00000007, + 0x0004003b,0x0000001b,0x0000035f,0x00000007,0x0004003b,0x0000001b,0x00000360,0x00000007, + 0x0004003b,0x00000084,0x00000361,0x00000007,0x0004003b,0x00000084,0x00000365,0x00000007, + 0x0004003b,0x00000014,0x00000369,0x00000007,0x0004003b,0x00000014,0x0000036a,0x00000007, + 0x0004003b,0x00000014,0x0000036d,0x00000007,0x0004003b,0x0000001b,0x00000376,0x00000007, + 0x0004003b,0x00000014,0x00000383,0x00000007,0x0003003e,0x0000035d,0x0000035e,0x0003003e, + 0x0000035f,0x0000014c,0x0003003e,0x00000360,0x0000014c,0x0004003d,0x00000083,0x00000362, + 0x0000008b,0x0003003e,0x00000361,0x00000362,0x00050039,0x00000002,0x00000363,0x00000087, + 0x00000361,0x0004003d,0x00000083,0x00000364,0x00000361,0x0003003e,0x0000008b,0x00000364, + 0x0004003d,0x00000083,0x00000366,0x0000008c,0x0003003e,0x00000365,0x00000366,0x00050039, + 0x00000002,0x00000367,0x00000087,0x00000365,0x0004003d,0x00000083,0x00000368,0x00000365, + 0x0003003e,0x0000008c,0x00000368,0x00060041,0x00000014,0x0000036b,0x0000008b,0x0000014c, + 0x000002cd,0x0004003d,0x00000013,0x0000036c,0x0000036b,0x0003003e,0x0000036a,0x0000036c, + 0x00060041,0x00000014,0x0000036e,0x0000008c,0x0000014c,0x000002cd,0x0004003d,0x00000013, + 0x0000036f,0x0000036e,0x0003003e,0x0000036d,0x0000036f,0x00060039,0x00000013,0x00000370, + 0x00000018,0x0000036a,0x0000036d,0x0003003e,0x00000369,0x00000370,0x0004003d,0x00000013, + 0x00000371,0x00000369,0x000500ba,0x0000006e,0x00000373,0x00000371,0x00000372,0x000300f7, + 0x00000375,0x00000000,0x000400fa,0x00000373,0x00000374,0x00000375,0x000200f8,0x00000374, + 0x0003003e,0x00000376,0x0000014c,0x000200f9,0x00000377,0x000200f8,0x00000377,0x000400f6, + 0x00000379,0x0000037a,0x00000000,0x000200f9,0x0000037b,0x000200f8,0x0000037b,0x0004003d, + 0x0000001a,0x0000037c,0x00000376,0x000500b1,0x0000006e,0x0000037e,0x0000037c,0x0000037d, + 0x0004003d,0x00000013,0x0000037f,0x0000035d,0x000500b8,0x0000006e,0x00000381,0x0000037f, + 0x00000380,0x000500a7,0x0000006e,0x00000382,0x0000037e,0x00000381,0x000400fa,0x00000382, + 0x00000378,0x00000379,0x000200f8,0x00000378,0x0004003d,0x0000001a,0x00000384,0x0000035f, + 0x00060041,0x00000014,0x00000385,0x0000008b,0x0000014c,0x00000384,0x0004003d,0x00000013, + 0x00000386,0x00000385,0x0004003d,0x0000001a,0x00000387,0x00000360,0x00060041,0x00000014, + 0x00000388,0x0000008c,0x0000014c,0x00000387,0x0004003d,0x00000013,0x00000389,0x00000388, + 0x00050083,0x00000013,0x0000038a,0x00000386,0x00000389,0x0003003e,0x00000383,0x0000038a, + 0x0004003d,0x00000013,0x0000038b,0x00000383,0x0006000c,0x00000013,0x0000038c,0x00000001, + 0x00000004,0x0000038b,0x000500ba,0x0000006e,0x0000038e,0x0000038c,0x0000038d,0x000300f7, + 0x00000390,0x00000000,0x000400fa,0x0000038e,0x0000038f,0x000003b8,0x000200f8,0x0000038f, + 0x0004003d,0x00000013,0x00000391,0x00000383,0x0006000c,0x00000013,0x00000392,0x00000001, + 0x00000006,0x00000391,0x0004003d,0x0000001a,0x00000393,0x0000035f,0x00060041,0x00000014, + 0x00000394,0x0000008b,0x0000014c,0x00000393,0x0004003d,0x00000013,0x00000395,0x00000394, + 0x0004003d,0x0000001a,0x00000396,0x00000360,0x00060041,0x00000014,0x00000397,0x0000008c, + 0x0000014c,0x00000396,0x0004003d,0x00000013,0x00000398,0x00000397,0x00060039,0x00000013, + 0x00000399,0x0000006c,0x00000395,0x00000398,0x00050083,0x00000013,0x0000039a,0x000001dc, + 0x00000399,0x00050085,0x00000013,0x0000039b,0x00000392,0x0000039a,0x0003003e,0x00000383, + 0x0000039b,0x0004003d,0x00000013,0x0000039c,0x00000383,0x0006000c,0x00000013,0x0000039d, + 0x00000001,0x00000004,0x0000039c,0x0004003d,0x00000013,0x0000039e,0x0000035d,0x0006000c, + 0x00000013,0x0000039f,0x00000001,0x00000004,0x0000039e,0x000500b8,0x0000006e,0x000003a0, + 0x0000039d,0x0000039f,0x0004003d,0x00000013,0x000003a1,0x00000383,0x0004003d,0x00000013, + 0x000003a2,0x0000035d,0x000600a9,0x00000013,0x000003a3,0x000003a0,0x000003a1,0x000003a2, + 0x0003003e,0x0000035d,0x000003a3,0x0004003d,0x0000001a,0x000003a4,0x0000035f,0x00060041, + 0x00000014,0x000003a5,0x0000008b,0x0000014c,0x000003a4,0x0004003d,0x00000013,0x000003a6, + 0x000003a5,0x0004003d,0x0000001a,0x000003a7,0x00000360,0x00060041,0x00000014,0x000003a8, + 0x0000008c,0x0000014c,0x000003a7,0x0004003d,0x00000013,0x000003a9,0x000003a8,0x000500b8, + 0x0000006e,0x000003aa,0x000003a6,0x000003a9,0x000600a9,0x0000001a,0x000003ab,0x000003aa, + 0x00000191,0x0000014c,0x0004003d,0x0000001a,0x000003ac,0x0000035f,0x00050080,0x0000001a, + 0x000003ad,0x000003ac,0x000003ab,0x0003003e,0x0000035f,0x000003ad,0x0004003d,0x0000001a, + 0x000003ae,0x0000035f,0x00060041,0x00000014,0x000003af,0x0000008b,0x0000014c,0x000003ae, + 0x0004003d,0x00000013,0x000003b0,0x000003af,0x0004003d,0x0000001a,0x000003b1,0x00000360, + 0x00060041,0x00000014,0x000003b2,0x0000008c,0x0000014c,0x000003b1,0x0004003d,0x00000013, + 0x000003b3,0x000003b2,0x000500be,0x0000006e,0x000003b4,0x000003b0,0x000003b3,0x000600a9, + 0x0000001a,0x000003b5,0x000003b4,0x00000191,0x0000014c,0x0004003d,0x0000001a,0x000003b6, + 0x00000360,0x00050080,0x0000001a,0x000003b7,0x000003b6,0x000003b5,0x0003003e,0x00000360, + 0x000003b7,0x000200f9,0x00000390,0x000200f8,0x000003b8,0x0003003e,0x0000035d,0x00000380, + 0x000200f9,0x00000390,0x000200f8,0x00000390,0x000200f9,0x0000037a,0x000200f8,0x0000037a, + 0x0004003d,0x0000001a,0x000003b9,0x00000376,0x00050080,0x0000001a,0x000003ba,0x000003b9, + 0x00000191,0x0003003e,0x00000376,0x000003ba,0x000200f9,0x00000377,0x000200f8,0x00000379, + 0x000200f9,0x00000375,0x000200f8,0x00000375,0x0004003d,0x00000013,0x000003bb,0x0000035d, + 0x0004003d,0x00000013,0x000003bc,0x0000035d,0x000500b8,0x0000006e,0x000003bd,0x000003bc, + 0x0000035e,0x000600a9,0x00000013,0x000003be,0x000003bd,0x000001dc,0x000001d8,0x00050085, + 0x00000013,0x000003bf,0x000003bb,0x000003be,0x000200fe,0x000003bf,0x00010038,0x00050036, + 0x00000083,0x00000091,0x00000000,0x0000008f,0x00030037,0x0000005c,0x00000090,0x000200f8, + 0x00000092,0x0004003b,0x0000005c,0x000003c2,0x00000007,0x0004003b,0x00000049,0x000003c9, + 0x00000007,0x0004003b,0x0000001b,0x000003d0,0x00000007,0x0004003b,0x00000049,0x000003d8, + 0x00000007,0x0004003b,0x00000049,0x000003e2,0x00000007,0x0004003b,0x00000049,0x000003e4, + 0x00000007,0x0004003b,0x000003e5,0x000003e6,0x00000007,0x0004003b,0x00000049,0x000003e9, + 0x00000007,0x0004003b,0x00000084,0x000003eb,0x00000007,0x0004003b,0x00000049,0x000003ed, + 0x00000007,0x0004003b,0x00000014,0x000003f5,0x00000007,0x0004003b,0x00000014,0x000003f8, + 0x00000007,0x0004003b,0x00000014,0x000003fd,0x00000007,0x0004003b,0x00000014,0x00000400, + 0x00000007,0x0004003d,0x00000038,0x000003c3,0x00000090,0x00040039,0x00000038,0x000003c4, + 0x0000003a,0x00040039,0x00000032,0x000003c5,0x00000034,0x0004006f,0x00000038,0x000003c6, + 0x000003c5,0x00050088,0x00000038,0x000003c7,0x000003c4,0x000003c6,0x00050081,0x00000038, + 0x000003c8,0x000003c3,0x000003c7,0x0003003e,0x000003c2,0x000003c8,0x0004003d,0x00000038, + 0x000003ca,0x000003c2,0x00040039,0x00000032,0x000003cb,0x00000034,0x0004006f,0x00000038, + 0x000003cc,0x000003cb,0x00050085,0x00000038,0x000003cd,0x000003ca,0x000003cc,0x0006000c, + 0x00000038,0x000003ce,0x00000001,0x00000008,0x000003cd,0x0004006e,0x00000032,0x000003cf, + 0x000003ce,0x0003003e,0x000003c9,0x000003cf,0x0003003e,0x000003d0,0x0000014c,0x000200f9, + 0x000003d1,0x000200f8,0x000003d1,0x000400f6,0x000003d3,0x000003d4,0x00000000,0x000200f9, + 0x000003d5,0x000200f8,0x000003d5,0x0004003d,0x0000001a,0x000003d6,0x000003d0,0x000500b1, + 0x0000006e,0x000003d7,0x000003d6,0x0000037d,0x000400fa,0x000003d7,0x000003d2,0x000003d3, + 0x000200f8,0x000003d2,0x0004003d,0x0000001a,0x000003e0,0x000003d0,0x00040039,0x00000032, + 0x000003e1,0x00000034,0x0004003d,0x00000032,0x000003e3,0x000003c9,0x0003003e,0x000003e2, + 0x000003e3,0x0003003e,0x000003e6,0x000003df,0x00050041,0x00000049,0x000003e7,0x000003e6, + 0x000003e0,0x0004003d,0x00000032,0x000003e8,0x000003e7,0x0003003e,0x000003e4,0x000003e8, + 0x0003003e,0x000003e9,0x000003e1,0x00070039,0x00000032,0x000003ea,0x00000077,0x000003e2, + 0x000003e4,0x000003e9,0x0003003e,0x000003d8,0x000003ea,0x0004003d,0x0000001a,0x000003ec, + 0x000003d0,0x0004003d,0x00000032,0x000003ee,0x000003d8,0x0003003e,0x000003ed,0x000003ee, + 0x00050039,0x00000013,0x000003ef,0x0000004c,0x000003ed,0x00040039,0x00000013,0x000003f0, + 0x00000055,0x00050085,0x00000013,0x000003f1,0x000003ef,0x000003f0,0x00060041,0x00000014, + 0x000003f2,0x000003eb,0x0000014c,0x000003ec,0x0003003e,0x000003f2,0x000003f1,0x0004003d, + 0x0000001a,0x000003f3,0x000003d0,0x0004003d,0x0000001a,0x000003f4,0x000003d0,0x00060041, + 0x00000014,0x000003f6,0x000003eb,0x0000014c,0x000003f4,0x0004003d,0x00000013,0x000003f7, + 0x000003f6,0x0003003e,0x000003f5,0x000003f7,0x0003003e,0x000003f8,0x000001dc,0x00060039, + 0x00000013,0x000003f9,0x0000002b,0x000003f5,0x000003f8,0x00060041,0x00000014,0x000003fa, + 0x000003eb,0x0000014c,0x000003f3,0x0003003e,0x000003fa,0x000003f9,0x0004003d,0x0000001a, + 0x000003fb,0x000003d0,0x0004003d,0x0000001a,0x000003fc,0x000003d0,0x00060041,0x00000014, + 0x000003fe,0x000003eb,0x0000014c,0x000003fc,0x0004003d,0x00000013,0x000003ff,0x000003fe, + 0x0003003e,0x000003fd,0x000003ff,0x0003003e,0x00000400,0x0000038d,0x00060039,0x00000013, + 0x00000401,0x00000023,0x000003fd,0x00000400,0x00060041,0x00000014,0x00000402,0x000003eb, + 0x0000014c,0x000003fb,0x0003003e,0x00000402,0x00000401,0x000200f9,0x000003d4,0x000200f8, + 0x000003d4,0x0004003d,0x0000001a,0x00000403,0x000003d0,0x00050080,0x0000001a,0x00000404, + 0x00000403,0x00000191,0x0003003e,0x000003d0,0x00000404,0x000200f9,0x000003d1,0x000200f8, + 0x000003d3,0x0004003d,0x00000083,0x00000405,0x000003eb,0x000200fe,0x00000405,0x00010038, + 0x00050036,0x00000093,0x00000097,0x00000000,0x00000094,0x00030037,0x0000005c,0x00000095, + 0x00030037,0x0000005c,0x00000096,0x000200f8,0x00000098,0x0004003b,0x0000005c,0x00000408, + 0x00000007,0x0004003b,0x0000005c,0x0000040f,0x00000007,0x0004003b,0x00000413,0x00000414, + 0x00000007,0x0004003b,0x0000005c,0x00000415,0x00000007,0x0004003b,0x00000049,0x0000041e, + 0x00000007,0x0004003b,0x0000001b,0x00000425,0x00000007,0x0004003b,0x00000049,0x0000042d, + 0x00000007,0x0004003b,0x00000049,0x00000430,0x00000007,0x0004003b,0x00000049,0x00000432, + 0x00000007,0x0004003b,0x000003e5,0x00000433,0x00000007,0x0004003b,0x00000049,0x00000436, + 0x00000007,0x0004003b,0x00000049,0x00000439,0x00000007,0x0004003b,0x00000014,0x00000443, + 0x00000007,0x0004003b,0x00000014,0x00000446,0x00000007,0x0004003b,0x00000014,0x0000044b, + 0x00000007,0x0004003b,0x00000014,0x0000044e,0x00000007,0x0004003d,0x00000038,0x00000409, + 0x00000095,0x00040039,0x00000038,0x0000040a,0x0000003c,0x00040039,0x00000032,0x0000040b, + 0x00000036,0x0004006f,0x00000038,0x0000040c,0x0000040b,0x00050088,0x00000038,0x0000040d, + 0x0000040a,0x0000040c,0x00050081,0x00000038,0x0000040e,0x00000409,0x0000040d,0x0003003e, + 0x00000408,0x0000040e,0x0004003d,0x00000038,0x00000410,0x00000408,0x0004003d,0x00000038, + 0x00000411,0x00000096,0x00050081,0x00000038,0x00000412,0x00000410,0x00000411,0x0003003e, + 0x0000040f,0x00000412,0x0004003d,0x00000038,0x00000416,0x0000040f,0x0003003e,0x00000415, + 0x00000416,0x00050039,0x0000006e,0x00000417,0x00000071,0x00000415,0x00050041,0x00000418, + 0x00000419,0x00000414,0x00000191,0x0003003e,0x00000419,0x00000417,0x00050041,0x00000418, + 0x0000041a,0x00000414,0x00000191,0x0004003d,0x0000006e,0x0000041b,0x0000041a,0x000300f7, + 0x0000041d,0x00000000,0x000400fa,0x0000041b,0x0000041c,0x0000041d,0x000200f8,0x0000041c, + 0x0004003d,0x00000038,0x0000041f,0x0000040f,0x00040039,0x00000032,0x00000420,0x00000036, + 0x0004006f,0x00000038,0x00000421,0x00000420,0x00050085,0x00000038,0x00000422,0x0000041f, + 0x00000421,0x0006000c,0x00000038,0x00000423,0x00000001,0x00000008,0x00000422,0x0004006e, + 0x00000032,0x00000424,0x00000423,0x0003003e,0x0000041e,0x00000424,0x0003003e,0x00000425, + 0x0000014c,0x000200f9,0x00000426,0x000200f8,0x00000426,0x000400f6,0x00000428,0x00000429, + 0x00000000,0x000200f9,0x0000042a,0x000200f8,0x0000042a,0x0004003d,0x0000001a,0x0000042b, + 0x00000425,0x000500b1,0x0000006e,0x0000042c,0x0000042b,0x0000037d,0x000400fa,0x0000042c, + 0x00000427,0x00000428,0x000200f8,0x00000427,0x0004003d,0x0000001a,0x0000042e,0x00000425, + 0x00040039,0x00000032,0x0000042f,0x00000036,0x0004003d,0x00000032,0x00000431,0x0000041e, + 0x0003003e,0x00000430,0x00000431,0x0003003e,0x00000433,0x000003df,0x00050041,0x00000049, + 0x00000434,0x00000433,0x0000042e,0x0004003d,0x00000032,0x00000435,0x00000434,0x0003003e, + 0x00000432,0x00000435,0x0003003e,0x00000436,0x0000042f,0x00070039,0x00000032,0x00000437, + 0x00000077,0x00000430,0x00000432,0x00000436,0x0003003e,0x0000042d,0x00000437,0x0004003d, + 0x0000001a,0x00000438,0x00000425,0x0004003d,0x00000032,0x0000043a,0x0000042d,0x0003003e, + 0x00000439,0x0000043a,0x00050039,0x00000013,0x0000043b,0x0000004f,0x00000439,0x00040039, + 0x00000013,0x0000043c,0x0000003f,0x00050085,0x00000013,0x0000043d,0x0000043b,0x0000043c, + 0x00040039,0x00000013,0x0000043e,0x00000055,0x00050085,0x00000013,0x0000043f,0x0000043d, + 0x0000043e,0x00070041,0x00000014,0x00000440,0x00000414,0x0000014c,0x0000014c,0x00000438, + 0x0003003e,0x00000440,0x0000043f,0x0004003d,0x0000001a,0x00000441,0x00000425,0x0004003d, + 0x0000001a,0x00000442,0x00000425,0x00070041,0x00000014,0x00000444,0x00000414,0x0000014c, + 0x0000014c,0x00000442,0x0004003d,0x00000013,0x00000445,0x00000444,0x0003003e,0x00000443, + 0x00000445,0x0003003e,0x00000446,0x000001dc,0x00060039,0x00000013,0x00000447,0x0000002b, + 0x00000443,0x00000446,0x00070041,0x00000014,0x00000448,0x00000414,0x0000014c,0x0000014c, + 0x00000441,0x0003003e,0x00000448,0x00000447,0x0004003d,0x0000001a,0x00000449,0x00000425, + 0x0004003d,0x0000001a,0x0000044a,0x00000425,0x00070041,0x00000014,0x0000044c,0x00000414, + 0x0000014c,0x0000014c,0x0000044a,0x0004003d,0x00000013,0x0000044d,0x0000044c,0x0003003e, + 0x0000044b,0x0000044d,0x0003003e,0x0000044e,0x0000038d,0x00060039,0x00000013,0x0000044f, + 0x00000023,0x0000044b,0x0000044e,0x00070041,0x00000014,0x00000450,0x00000414,0x0000014c, + 0x0000014c,0x00000449,0x0003003e,0x00000450,0x0000044f,0x000200f9,0x00000429,0x000200f8, + 0x00000429,0x0004003d,0x0000001a,0x00000451,0x00000425,0x00050080,0x0000001a,0x00000452, + 0x00000451,0x00000191,0x0003003e,0x00000425,0x00000452,0x000200f9,0x00000426,0x000200f8, + 0x00000428,0x000200f9,0x0000041d,0x000200f8,0x0000041d,0x0004003d,0x00000093,0x00000453, + 0x00000414,0x000200fe,0x00000453,0x00010038,0x00050036,0x00000013,0x0000009d,0x00000000, + 0x00000099,0x00030037,0x00000049,0x0000009a,0x00030037,0x0000005c,0x0000009b,0x00030037, + 0x0000005c,0x0000009c,0x000200f8,0x0000009e,0x0004003b,0x00000014,0x00000456,0x00000007, + 0x0004003b,0x00000084,0x00000457,0x00000007,0x0004003b,0x0000005c,0x00000458,0x00000007, + 0x0004003b,0x00000413,0x0000045b,0x00000007,0x0004003b,0x0000005c,0x0000045c,0x00000007, + 0x0004003b,0x0000005c,0x0000045e,0x00000007,0x0004003b,0x00000049,0x00000465,0x00000007, + 0x0004003b,0x00000084,0x00000467,0x00000007,0x0004003b,0x00000084,0x00000469,0x00000007, + 0x0003003e,0x00000456,0x000001d8,0x0004003d,0x00000038,0x00000459,0x0000009b,0x0003003e, + 0x00000458,0x00000459,0x00050039,0x00000083,0x0000045a,0x00000091,0x00000458,0x0003003e, + 0x00000457,0x0000045a,0x0004003d,0x00000038,0x0000045d,0x0000009b,0x0003003e,0x0000045c, + 0x0000045d,0x0004003d,0x00000038,0x0000045f,0x0000009c,0x0003003e,0x0000045e,0x0000045f, + 0x00060039,0x00000093,0x00000460,0x00000097,0x0000045c,0x0000045e,0x0003003e,0x0000045b, + 0x00000460,0x00050041,0x00000418,0x00000461,0x0000045b,0x00000191,0x0004003d,0x0000006e, + 0x00000462,0x00000461,0x000300f7,0x00000464,0x00000000,0x000400fa,0x00000462,0x00000463, + 0x00000464,0x000200f8,0x00000463,0x0004003d,0x00000032,0x00000466,0x0000009a,0x0003003e, + 0x00000465,0x00000466,0x0004003d,0x00000083,0x00000468,0x00000457,0x0003003e,0x00000467, + 0x00000468,0x00050041,0x00000084,0x0000046a,0x0000045b,0x0000014c,0x0004003d,0x00000083, + 0x0000046b,0x0000046a,0x0003003e,0x00000469,0x0000046b,0x00070039,0x00000013,0x0000046c, + 0x0000008d,0x00000465,0x00000467,0x00000469,0x0003003e,0x00000456,0x0000046c,0x000200f9, + 0x00000464,0x000200f8,0x00000464,0x0004003d,0x00000013,0x0000046d,0x00000456,0x000200fe, + 0x0000046d,0x00010038,0x00050036,0x0000009f,0x000000a3,0x00000000,0x000000a0,0x00030037, + 0x0000005c,0x000000a1,0x00030037,0x00000007,0x000000a2,0x000200f8,0x000000a4,0x0004003b, + 0x00000049,0x00000470,0x00000007,0x0004003b,0x00000049,0x00000474,0x00000007,0x0004003b, + 0x00000049,0x00000475,0x00000007,0x0004003b,0x00000049,0x00000476,0x00000007,0x0004003b, + 0x0000005c,0x00000478,0x00000007,0x0004003b,0x00000049,0x00000479,0x00000007,0x0004003b, + 0x0000005c,0x0000047c,0x00000007,0x0004003b,0x00000014,0x00000485,0x00000007,0x0004003b, + 0x00000049,0x00000486,0x00000007,0x0004003b,0x0000005c,0x00000488,0x00000007,0x0004003b, + 0x0000005c,0x0000048a,0x00000007,0x0004003b,0x000000aa,0x0000048d,0x00000007,0x0004003b, + 0x00000014,0x00000493,0x00000007,0x0004003d,0x00000038,0x00000471,0x000000a1,0x0004006e, + 0x00000032,0x00000472,0x00000471,0x00040039,0x00000032,0x00000473,0x00000034,0x0003003e, + 0x00000474,0x00000472,0x0003003e,0x00000475,0x000001d4,0x0003003e,0x00000476,0x00000473, + 0x00070039,0x00000032,0x00000477,0x00000077,0x00000474,0x00000475,0x00000476,0x0003003e, + 0x00000470,0x00000477,0x0004003d,0x00000032,0x0000047a,0x00000470,0x0003003e,0x00000479, + 0x0000047a,0x00050039,0x00000038,0x0000047b,0x00000053,0x00000479,0x0003003e,0x00000478, + 0x0000047b,0x0004003d,0x00000032,0x0000047d,0x00000470,0x0004006f,0x00000038,0x0000047e, + 0x0000047d,0x00050050,0x00000038,0x00000480,0x0000047f,0x0000047f,0x00050081,0x00000038, + 0x00000481,0x0000047e,0x00000480,0x00040039,0x00000032,0x00000482,0x00000034,0x0004006f, + 0x00000038,0x00000483,0x00000482,0x00050088,0x00000038,0x00000484,0x00000481,0x00000483, + 0x0003003e,0x0000047c,0x00000484,0x0004003d,0x00000032,0x00000487,0x00000470,0x0003003e, + 0x00000486,0x00000487,0x0004003d,0x00000038,0x00000489,0x0000047c,0x0003003e,0x00000488, + 0x00000489,0x0004003d,0x00000038,0x0000048b,0x00000478,0x0003003e,0x0000048a,0x0000048b, + 0x00070039,0x00000013,0x0000048c,0x0000009d,0x00000486,0x00000488,0x0000048a,0x0003003e, + 0x00000485,0x0000048c,0x0003003e,0x0000048d,0x0000048e,0x0004003d,0x00000013,0x0000048f, + 0x00000485,0x00050041,0x00000014,0x00000490,0x0000048d,0x000001bf,0x0003003e,0x00000490, + 0x0000048f,0x0004003d,0x00000013,0x00000491,0x00000485,0x000500b7,0x0000006e,0x00000492, + 0x00000491,0x000001d8,0x000300f7,0x00000495,0x00000000,0x000400fa,0x00000492,0x00000494, + 0x00000498,0x000200f8,0x00000494,0x0004003d,0x00000013,0x00000496,0x00000485,0x0006000c, + 0x00000013,0x00000497,0x00000001,0x00000006,0x00000496,0x0003003e,0x00000493,0x00000497, + 0x000200f9,0x00000495,0x000200f8,0x00000498,0x0003003e,0x00000493,0x000001d8,0x000200f9, + 0x00000495,0x000200f8,0x00000495,0x0004003d,0x00000013,0x00000499,0x00000493,0x00050041, + 0x00000014,0x0000049a,0x0000048d,0x00000172,0x0003003e,0x0000049a,0x00000499,0x00050041, + 0x00000014,0x0000049b,0x0000048d,0x0000016b,0x0003003e,0x0000049b,0x000001dc,0x0004003d, + 0x0000009f,0x0000049c,0x0000048d,0x000200fe,0x0000049c,0x00010038,0x00050036,0x0000009f, + 0x000000a8,0x00000000,0x000000a5,0x00030037,0x00000049,0x000000a6,0x00030037,0x00000007, + 0x000000a7,0x000200f8,0x000000a9,0x0004003b,0x00000049,0x0000049f,0x00000007,0x0004003b, + 0x00000007,0x000004a1,0x00000007,0x0004003d,0x00000032,0x000004a0,0x000000a6,0x0003003e, + 0x0000049f,0x000004a0,0x0003003e,0x000004a1,0x00000081,0x00060039,0x00000038,0x000004a2, + 0x0000005a,0x0000049f,0x000004a1,0x00050051,0x00000013,0x000004a3,0x000004a2,0x00000000, + 0x00050051,0x00000013,0x000004a4,0x000004a2,0x00000001,0x00070050,0x0000009f,0x000004a5, + 0x000004a3,0x000004a4,0x000001d8,0x000001d8,0x000200fe,0x000004a5,0x00010038,0x00050036, + 0x0000009f,0x000000b0,0x00000000,0x000000ab,0x00030037,0x000000aa,0x000000ac,0x00030037, + 0x000000aa,0x000000ad,0x00030037,0x000000aa,0x000000ae,0x00030037,0x000000aa,0x000000af, + 0x000200f8,0x000000b1,0x0004003d,0x0000009f,0x000004a8,0x000000ac,0x0004003d,0x0000009f, + 0x000004a9,0x000000ad,0x00050081,0x0000009f,0x000004aa,0x000004a8,0x000004a9,0x0004003d, + 0x0000009f,0x000004ab,0x000000ae,0x00050081,0x0000009f,0x000004ac,0x000004aa,0x000004ab, + 0x0004003d,0x0000009f,0x000004ad,0x000000af,0x00050081,0x0000009f,0x000004ae,0x000004ac, + 0x000004ad,0x0005008e,0x0000009f,0x000004b0,0x000004ae,0x000004af,0x000200fe,0x000004b0, + 0x00010038,0x00050036,0x00000002,0x000000b7,0x00000000,0x000000b2,0x00030037,0x00000049, + 0x000000b3,0x00030037,0x000000aa,0x000000b4,0x00030037,0x00000007,0x000000b5,0x00030037, + 0x00000007,0x000000b6,0x000200f8,0x000000b8,0x0004003b,0x00000049,0x000004b7,0x00000007, + 0x0004003b,0x0000005c,0x000004b9,0x00000007,0x0004003b,0x00000007,0x000004bc,0x00000007, + 0x0004003d,0x00000006,0x000004b3,0x000000b5,0x000500ae,0x0000006e,0x000004b4,0x000004b3, + 0x000001bf,0x000300f7,0x000004b6,0x00000000,0x000400fa,0x000004b4,0x000004b5,0x000004b6, + 0x000200f8,0x000004b5,0x0004003d,0x00000032,0x000004b8,0x000000b3,0x0003003e,0x000004b7, + 0x000004b8,0x0004003d,0x0000009f,0x000004ba,0x000000b4,0x0007004f,0x00000038,0x000004bb, + 0x000004ba,0x000004ba,0x00000000,0x00000001,0x0003003e,0x000004b9,0x000004bb,0x0004003d, + 0x00000006,0x000004bd,0x000000b5,0x0003003e,0x000004bc,0x000004bd,0x00070039,0x00000002, + 0x000004be,0x00000061,0x000004b7,0x000004b9,0x000004bc,0x000200f9,0x000004b6,0x000200f8, + 0x000004b6,0x000100fd,0x00010038,0x00050036,0x0000009f,0x000000bc,0x00000000,0x000000b9, + 0x00030037,0x00000007,0x000000ba,0x00030037,0x00000007,0x000000bb,0x000200f8,0x000000bd, + 0x0004003d,0x00000006,0x000004c4,0x000000ba,0x0004003d,0x00000006,0x000004c5,0x000000bb, + 0x00060041,0x000004c6,0x000004c7,0x000004c3,0x000004c4,0x000004c5,0x0004003d,0x00000013, + 0x000004c8,0x000004c7,0x0004003d,0x00000006,0x000004ca,0x000000ba,0x0004003d,0x00000006, + 0x000004cb,0x000000bb,0x00060041,0x000004c6,0x000004cc,0x000004c9,0x000004ca,0x000004cb, + 0x0004003d,0x00000013,0x000004cd,0x000004cc,0x0004003d,0x00000006,0x000004cf,0x000000ba, + 0x0004003d,0x00000006,0x000004d0,0x000000bb,0x00060041,0x000004c6,0x000004d1,0x000004ce, + 0x000004cf,0x000004d0,0x0004003d,0x00000013,0x000004d2,0x000004d1,0x0004003d,0x00000006, + 0x000004d4,0x000000ba,0x0004003d,0x00000006,0x000004d5,0x000000bb,0x00060041,0x000004c6, + 0x000004d6,0x000004d3,0x000004d4,0x000004d5,0x0004003d,0x00000013,0x000004d7,0x000004d6, + 0x00070050,0x0000009f,0x000004d8,0x000004c8,0x000004cd,0x000004d2,0x000004d7,0x000200fe, + 0x000004d8,0x00010038,0x00050036,0x00000002,0x000000c2,0x00000000,0x000000be,0x00030037, + 0x00000007,0x000000bf,0x00030037,0x00000007,0x000000c0,0x00030037,0x000000aa,0x000000c1, + 0x000200f8,0x000000c3,0x0004003d,0x00000006,0x000004db,0x000000bf,0x0004003d,0x00000006, + 0x000004dc,0x000000c0,0x00050041,0x00000014,0x000004dd,0x000000c1,0x000001bf,0x0004003d, + 0x00000013,0x000004de,0x000004dd,0x00060041,0x000004c6,0x000004df,0x000004c3,0x000004db, + 0x000004dc,0x0003003e,0x000004df,0x000004de,0x0004003d,0x00000006,0x000004e0,0x000000bf, + 0x0004003d,0x00000006,0x000004e1,0x000000c0,0x00050041,0x00000014,0x000004e2,0x000000c1, + 0x00000172,0x0004003d,0x00000013,0x000004e3,0x000004e2,0x00060041,0x000004c6,0x000004e4, + 0x000004c9,0x000004e0,0x000004e1,0x0003003e,0x000004e4,0x000004e3,0x0004003d,0x00000006, + 0x000004e5,0x000000bf,0x0004003d,0x00000006,0x000004e6,0x000000c0,0x00050041,0x00000014, + 0x000004e7,0x000000c1,0x0000016b,0x0004003d,0x00000013,0x000004e8,0x000004e7,0x00060041, + 0x000004c6,0x000004e9,0x000004ce,0x000004e5,0x000004e6,0x0003003e,0x000004e9,0x000004e8, + 0x0004003d,0x00000006,0x000004ea,0x000000bf,0x0004003d,0x00000006,0x000004eb,0x000000c0, + 0x00050041,0x00000014,0x000004ec,0x000000c1,0x0000016c,0x0004003d,0x00000013,0x000004ed, + 0x000004ec,0x00060041,0x000004c6,0x000004ee,0x000004d3,0x000004ea,0x000004eb,0x0003003e, + 0x000004ee,0x000004ed,0x000100fd,0x00010038,0x00050036,0x00000002,0x000000c4,0x00000000, + 0x00000003,0x000200f8,0x000000c5,0x000300e1,0x0000016b,0x000004ef,0x000400e0,0x0000016b, + 0x0000016b,0x000004f0,0x000100fd,0x00010038,0x00050036,0x0000006e,0x000000ca,0x00000000, + 0x000000c6,0x00030037,0x00000007,0x000000c7,0x00030037,0x00000007,0x000000c8,0x00030037, + 0x00000007,0x000000c9,0x000200f8,0x000000cb,0x0004003b,0x00000007,0x000004f5,0x00000007, + 0x0004003d,0x00000006,0x000004f1,0x000000c8,0x000500aa,0x0000006e,0x000004f2,0x000004f1, + 0x000001bf,0x000300f7,0x000004f4,0x00000000,0x000400fa,0x000004f2,0x000004f3,0x000004f4, + 0x000200f8,0x000004f3,0x0004003d,0x00000006,0x000004f6,0x000000c9,0x0003003e,0x000004f5, + 0x000004f6,0x00050039,0x00000002,0x000004f7,0x0000007a,0x000004f5,0x000200f9,0x000004f4, + 0x000200f8,0x000004f4,0x00040039,0x00000002,0x000004f8,0x000000c4,0x00040039,0x00000006, + 0x000004f9,0x0000007c,0x0004003d,0x00000006,0x000004fa,0x000000c7,0x00050082,0x00000006, + 0x000004fb,0x000004fa,0x00000172,0x000500ab,0x0000006e,0x000004fc,0x000004f9,0x000004fb, + 0x000200fe,0x000004fc,0x00010038,0x00050036,0x0000009f,0x000000ce,0x00000000,0x000000cc, + 0x00030037,0x000000aa,0x000000cd,0x000200f8,0x000000cf,0x0004003b,0x000000aa,0x000004ff, + 0x00000007,0x0004003b,0x000000aa,0x00000501,0x00000007,0x0004003b,0x000000aa,0x00000504, + 0x00000007,0x0004003b,0x000000aa,0x00000507,0x00000007,0x0004003b,0x000000aa,0x0000050a, + 0x00000007,0x0004003b,0x000000aa,0x0000050c,0x00000007,0x0004003b,0x000000aa,0x0000050e, + 0x00000007,0x0004003b,0x000000aa,0x00000510,0x00000007,0x0004003d,0x0000009f,0x00000500, + 0x000000cd,0x0003003e,0x000004ff,0x00000500,0x0004003d,0x0000009f,0x00000502,0x000000cd, + 0x0006016e,0x0000009f,0x00000503,0x0000016c,0x00000502,0x000001bf,0x0003003e,0x00000501, + 0x00000503,0x0004003d,0x0000009f,0x00000505,0x000000cd,0x0006016e,0x0000009f,0x00000506, + 0x0000016c,0x00000505,0x00000172,0x0003003e,0x00000504,0x00000506,0x0004003d,0x0000009f, + 0x00000508,0x000000cd,0x0006016e,0x0000009f,0x00000509,0x0000016c,0x00000508,0x0000016b, + 0x0003003e,0x00000507,0x00000509,0x0004003d,0x0000009f,0x0000050b,0x000004ff,0x0003003e, + 0x0000050a,0x0000050b,0x0004003d,0x0000009f,0x0000050d,0x00000501,0x0003003e,0x0000050c, + 0x0000050d,0x0004003d,0x0000009f,0x0000050f,0x00000504,0x0003003e,0x0000050e,0x0000050f, + 0x0004003d,0x0000009f,0x00000511,0x00000507,0x0003003e,0x00000510,0x00000511,0x00080039, + 0x0000009f,0x00000512,0x000000b0,0x0000050a,0x0000050c,0x0000050e,0x00000510,0x000200fe, + 0x00000512,0x00010038,0x00050036,0x0000009f,0x000000d7,0x00000000,0x000000d1,0x00030037, + 0x000000d0,0x000000d2,0x00030037,0x000000d0,0x000000d3,0x00030037,0x000000d0,0x000000d4, + 0x00030037,0x000000d0,0x000000d5,0x00030037,0x00000007,0x000000d6,0x000200f8,0x000000d8, + 0x0004003b,0x000000aa,0x00000517,0x00000007,0x0004003b,0x00000049,0x0000051a,0x00000007, + 0x0004003b,0x00000007,0x0000051b,0x00000007,0x0004003b,0x000000aa,0x0000051e,0x00000007, + 0x0004003b,0x00000049,0x00000521,0x00000007,0x0004003b,0x00000007,0x00000522,0x00000007, + 0x0004003b,0x000000aa,0x00000525,0x00000007,0x0004003b,0x00000049,0x00000528,0x00000007, + 0x0004003b,0x00000007,0x00000529,0x00000007,0x0004003b,0x000000aa,0x0000052c,0x00000007, + 0x0004003b,0x00000049,0x0000052f,0x00000007,0x0004003b,0x00000007,0x00000530,0x00000007, + 0x0004003b,0x000000aa,0x00000533,0x00000007,0x0004003b,0x000000aa,0x00000535,0x00000007, + 0x0004003b,0x000000aa,0x00000537,0x00000007,0x0004003b,0x000000aa,0x00000539,0x00000007, + 0x0004003d,0x0000002d,0x00000518,0x000000d2,0x0004007c,0x00000032,0x00000519,0x00000518, + 0x0003003e,0x0000051a,0x00000519,0x0004003d,0x00000006,0x0000051c,0x000000d6,0x0003003e, + 0x0000051b,0x0000051c,0x00060039,0x0000009f,0x0000051d,0x000000a8,0x0000051a,0x0000051b, + 0x0003003e,0x00000517,0x0000051d,0x0004003d,0x0000002d,0x0000051f,0x000000d3,0x0004007c, + 0x00000032,0x00000520,0x0000051f,0x0003003e,0x00000521,0x00000520,0x0004003d,0x00000006, + 0x00000523,0x000000d6,0x0003003e,0x00000522,0x00000523,0x00060039,0x0000009f,0x00000524, + 0x000000a8,0x00000521,0x00000522,0x0003003e,0x0000051e,0x00000524,0x0004003d,0x0000002d, + 0x00000526,0x000000d4,0x0004007c,0x00000032,0x00000527,0x00000526,0x0003003e,0x00000528, + 0x00000527,0x0004003d,0x00000006,0x0000052a,0x000000d6,0x0003003e,0x00000529,0x0000052a, + 0x00060039,0x0000009f,0x0000052b,0x000000a8,0x00000528,0x00000529,0x0003003e,0x00000525, + 0x0000052b,0x0004003d,0x0000002d,0x0000052d,0x000000d5,0x0004007c,0x00000032,0x0000052e, + 0x0000052d,0x0003003e,0x0000052f,0x0000052e,0x0004003d,0x00000006,0x00000531,0x000000d6, + 0x0003003e,0x00000530,0x00000531,0x00060039,0x0000009f,0x00000532,0x000000a8,0x0000052f, + 0x00000530,0x0003003e,0x0000052c,0x00000532,0x0004003d,0x0000009f,0x00000534,0x00000517, + 0x0003003e,0x00000533,0x00000534,0x0004003d,0x0000009f,0x00000536,0x0000051e,0x0003003e, + 0x00000535,0x00000536,0x0004003d,0x0000009f,0x00000538,0x00000525,0x0003003e,0x00000537, + 0x00000538,0x0004003d,0x0000009f,0x0000053a,0x0000052c,0x0003003e,0x00000539,0x0000053a, + 0x00080039,0x0000009f,0x0000053b,0x000000b0,0x00000533,0x00000535,0x00000537,0x00000539, + 0x000200fe,0x0000053b,0x00010038,0x00050036,0x0000009f,0x000000dc,0x00000000,0x000000d9, + 0x00030037,0x000000d0,0x000000da,0x00030037,0x00000007,0x000000db,0x000200f8,0x000000dd, + 0x0004003b,0x000000d0,0x0000054a,0x00000007,0x0004003b,0x000000d0,0x0000054b,0x00000007, + 0x0004003b,0x000000d0,0x0000054c,0x00000007,0x0004003b,0x000000d0,0x0000054d,0x00000007, + 0x0004003b,0x00000007,0x0000054e,0x00000007,0x0004003d,0x0000002d,0x0000053e,0x000000da, + 0x00050080,0x0000002d,0x00000540,0x0000053e,0x0000053f,0x0004003d,0x0000002d,0x00000541, + 0x000000da,0x00050080,0x0000002d,0x00000543,0x00000541,0x00000542,0x0004003d,0x0000002d, + 0x00000544,0x000000da,0x00050080,0x0000002d,0x00000546,0x00000544,0x00000545,0x0004003d, + 0x0000002d,0x00000547,0x000000da,0x00050080,0x0000002d,0x00000549,0x00000547,0x00000548, + 0x0003003e,0x0000054a,0x00000540,0x0003003e,0x0000054b,0x00000543,0x0003003e,0x0000054c, + 0x00000546,0x0003003e,0x0000054d,0x00000549,0x0004003d,0x00000006,0x0000054f,0x000000db, + 0x0003003e,0x0000054e,0x0000054f,0x00090039,0x0000009f,0x00000550,0x000000d7,0x0000054a, + 0x0000054b,0x0000054c,0x0000054d,0x0000054e,0x000200fe,0x00000550,0x00010038,0x00050036, + 0x0000009f,0x000000e3,0x00000000,0x000000d1,0x00030037,0x000000d0,0x000000de,0x00030037, + 0x000000d0,0x000000df,0x00030037,0x000000d0,0x000000e0,0x00030037,0x000000d0,0x000000e1, + 0x00030037,0x00000007,0x000000e2,0x000200f8,0x000000e4,0x0004003b,0x000000aa,0x00000553, + 0x00000007,0x0004003b,0x0000005c,0x00000557,0x00000007,0x0004003b,0x00000007,0x00000558, + 0x00000007,0x0004003b,0x000000aa,0x0000055b,0x00000007,0x0004003b,0x0000005c,0x0000055f, + 0x00000007,0x0004003b,0x00000007,0x00000560,0x00000007,0x0004003b,0x000000aa,0x00000563, + 0x00000007,0x0004003b,0x0000005c,0x00000567,0x00000007,0x0004003b,0x00000007,0x00000568, + 0x00000007,0x0004003b,0x000000aa,0x0000056b,0x00000007,0x0004003b,0x0000005c,0x0000056f, + 0x00000007,0x0004003b,0x00000007,0x00000570,0x00000007,0x0004003b,0x000000aa,0x00000573, + 0x00000007,0x0004003b,0x000000aa,0x00000575,0x00000007,0x0004003b,0x000000aa,0x00000577, + 0x00000007,0x0004003b,0x000000aa,0x00000579,0x00000007,0x0004003d,0x0000002d,0x00000554, + 0x000000de,0x0004007c,0x00000032,0x00000555,0x00000554,0x0004006f,0x00000038,0x00000556, + 0x00000555,0x0003003e,0x00000557,0x00000556,0x0004003d,0x00000006,0x00000559,0x000000e2, + 0x0003003e,0x00000558,0x00000559,0x00060039,0x0000009f,0x0000055a,0x000000a3,0x00000557, + 0x00000558,0x0003003e,0x00000553,0x0000055a,0x0004003d,0x0000002d,0x0000055c,0x000000df, + 0x0004007c,0x00000032,0x0000055d,0x0000055c,0x0004006f,0x00000038,0x0000055e,0x0000055d, + 0x0003003e,0x0000055f,0x0000055e,0x0004003d,0x00000006,0x00000561,0x000000e2,0x0003003e, + 0x00000560,0x00000561,0x00060039,0x0000009f,0x00000562,0x000000a3,0x0000055f,0x00000560, + 0x0003003e,0x0000055b,0x00000562,0x0004003d,0x0000002d,0x00000564,0x000000e0,0x0004007c, + 0x00000032,0x00000565,0x00000564,0x0004006f,0x00000038,0x00000566,0x00000565,0x0003003e, + 0x00000567,0x00000566,0x0004003d,0x00000006,0x00000569,0x000000e2,0x0003003e,0x00000568, + 0x00000569,0x00060039,0x0000009f,0x0000056a,0x000000a3,0x00000567,0x00000568,0x0003003e, + 0x00000563,0x0000056a,0x0004003d,0x0000002d,0x0000056c,0x000000e1,0x0004007c,0x00000032, + 0x0000056d,0x0000056c,0x0004006f,0x00000038,0x0000056e,0x0000056d,0x0003003e,0x0000056f, + 0x0000056e,0x0004003d,0x00000006,0x00000571,0x000000e2,0x0003003e,0x00000570,0x00000571, + 0x00060039,0x0000009f,0x00000572,0x000000a3,0x0000056f,0x00000570,0x0003003e,0x0000056b, + 0x00000572,0x0004003d,0x0000009f,0x00000574,0x00000553,0x0003003e,0x00000573,0x00000574, + 0x0004003d,0x0000009f,0x00000576,0x0000055b,0x0003003e,0x00000575,0x00000576,0x0004003d, + 0x0000009f,0x00000578,0x00000563,0x0003003e,0x00000577,0x00000578,0x0004003d,0x0000009f, + 0x0000057a,0x0000056b,0x0003003e,0x00000579,0x0000057a,0x00080039,0x0000009f,0x0000057b, + 0x000000b0,0x00000573,0x00000575,0x00000577,0x00000579,0x000200fe,0x0000057b,0x00010038, + 0x00050036,0x0000009f,0x000000e7,0x00000000,0x000000d9,0x00030037,0x000000d0,0x000000e5, + 0x00030037,0x00000007,0x000000e6,0x000200f8,0x000000e8,0x0004003b,0x000000d0,0x00000586, + 0x00000007,0x0004003b,0x000000d0,0x00000587,0x00000007,0x0004003b,0x000000d0,0x00000588, + 0x00000007,0x0004003b,0x000000d0,0x00000589,0x00000007,0x0004003b,0x00000007,0x0000058a, + 0x00000007,0x0004003d,0x0000002d,0x0000057e,0x000000e5,0x00050080,0x0000002d,0x0000057f, + 0x0000057e,0x0000053f,0x0004003d,0x0000002d,0x00000580,0x000000e5,0x00050080,0x0000002d, + 0x00000581,0x00000580,0x00000542,0x0004003d,0x0000002d,0x00000582,0x000000e5,0x00050080, + 0x0000002d,0x00000583,0x00000582,0x00000545,0x0004003d,0x0000002d,0x00000584,0x000000e5, + 0x00050080,0x0000002d,0x00000585,0x00000584,0x00000548,0x0003003e,0x00000586,0x0000057f, + 0x0003003e,0x00000587,0x00000581,0x0003003e,0x00000588,0x00000583,0x0003003e,0x00000589, + 0x00000585,0x0004003d,0x00000006,0x0000058b,0x000000e6,0x0003003e,0x0000058a,0x0000058b, + 0x00090039,0x0000009f,0x0000058c,0x000000e3,0x00000586,0x00000587,0x00000588,0x00000589, + 0x0000058a,0x000200fe,0x0000058c,0x00010038,0x00050036,0x00000002,0x000000f0,0x00000000, + 0x000000e9,0x00030037,0x00000007,0x000000ea,0x00030037,0x00000007,0x000000eb,0x00030037, + 0x000000d0,0x000000ec,0x00030037,0x00000007,0x000000ed,0x00030037,0x00000007,0x000000ee, + 0x00030037,0x00000007,0x000000ef,0x000200f8,0x000000f1,0x0004003b,0x00000049,0x0000058f, + 0x00000007,0x0004003b,0x00000049,0x0000059d,0x00000007,0x0004003b,0x000005aa,0x000005ab, + 0x00000007,0x0004003b,0x000000d0,0x000005ae,0x00000007,0x0004003b,0x00000007,0x000005af, + 0x00000007,0x0004003b,0x00000049,0x000005b3,0x00000007,0x0004003b,0x000000aa,0x000005b5, + 0x00000007,0x0004003b,0x00000007,0x000005b8,0x00000007,0x0004003b,0x00000007,0x000005b9, + 0x00000007,0x0004003b,0x000000d0,0x000005d6,0x00000007,0x0004003b,0x00000007,0x000005d7, + 0x00000007,0x0004003b,0x00000049,0x000005db,0x00000007,0x0004003b,0x000000aa,0x000005dd, + 0x00000007,0x0004003b,0x00000007,0x000005e0,0x00000007,0x0004003b,0x00000007,0x000005e1, + 0x00000007,0x0004003b,0x000000d0,0x000005fe,0x00000007,0x0004003b,0x00000007,0x000005ff, + 0x00000007,0x0004003b,0x00000049,0x00000603,0x00000007,0x0004003b,0x000000aa,0x00000605, + 0x00000007,0x0004003b,0x00000007,0x00000608,0x00000007,0x0004003b,0x00000007,0x00000609, + 0x00000007,0x0004003b,0x000000d0,0x00000628,0x00000007,0x0004003b,0x00000007,0x00000629, + 0x00000007,0x0004003b,0x00000049,0x0000062d,0x00000007,0x0004003b,0x000000aa,0x0000062f, + 0x00000007,0x0004003b,0x00000007,0x00000632,0x00000007,0x0004003b,0x00000007,0x00000633, + 0x00000007,0x0004003b,0x000000aa,0x0000063b,0x00000007,0x0004003b,0x000000aa,0x00000640, + 0x00000007,0x0004003b,0x000000aa,0x00000645,0x00000007,0x0004003b,0x000000aa,0x0000064a, + 0x00000007,0x0004003b,0x00000049,0x00000660,0x00000007,0x0004003b,0x000000aa,0x00000661, + 0x00000007,0x0004003b,0x00000007,0x00000664,0x00000007,0x0004003b,0x00000007,0x00000665, + 0x00000007,0x0004003b,0x00000007,0x0000066c,0x00000007,0x0004003b,0x00000007,0x0000066d, + 0x00000007,0x0004003b,0x000000aa,0x0000066e,0x00000007,0x0004003b,0x00000049,0x00000680, + 0x00000007,0x0004003b,0x000000aa,0x00000681,0x00000007,0x0004003b,0x00000007,0x00000684, + 0x00000007,0x0004003b,0x00000007,0x00000685,0x00000007,0x0004003b,0x00000007,0x0000068d, + 0x00000007,0x0004003b,0x00000007,0x0000068e,0x00000007,0x0004003b,0x000000aa,0x0000068f, + 0x00000007,0x0004003b,0x00000049,0x000006a0,0x00000007,0x0004003b,0x000000aa,0x000006a1, + 0x00000007,0x0004003b,0x00000007,0x000006a4,0x00000007,0x0004003b,0x00000007,0x000006a5, + 0x00000007,0x0004003b,0x00000007,0x000006ad,0x00000007,0x0004003b,0x00000007,0x000006ae, + 0x00000007,0x0004003b,0x000000aa,0x000006af,0x00000007,0x0004003b,0x00000049,0x000006c1, + 0x00000007,0x0004003b,0x000000aa,0x000006c2,0x00000007,0x0004003b,0x00000007,0x000006c5, + 0x00000007,0x0004003b,0x00000007,0x000006c6,0x00000007,0x0004003b,0x00000007,0x000006cf, + 0x00000007,0x0004003b,0x00000007,0x000006d0,0x00000007,0x0004003b,0x000000aa,0x000006d1, + 0x00000007,0x0004003d,0x0000002d,0x00000590,0x000000ec,0x00050050,0x0000002d,0x00000592, + 0x00000591,0x00000591,0x00050084,0x0000002d,0x00000593,0x00000590,0x00000592,0x0004007c, + 0x00000032,0x00000594,0x00000593,0x0004003d,0x00000006,0x00000595,0x000000ea,0x00050084, + 0x00000006,0x00000596,0x00000595,0x0000016b,0x0004007c,0x0000001a,0x00000597,0x00000596, + 0x0004003d,0x00000006,0x00000598,0x000000eb,0x00050084,0x00000006,0x00000599,0x00000598, + 0x0000016b,0x0004007c,0x0000001a,0x0000059a,0x00000599,0x00050050,0x00000032,0x0000059b, + 0x00000597,0x0000059a,0x00050080,0x00000032,0x0000059c,0x00000594,0x0000059b,0x0003003e, + 0x0000058f,0x0000059c,0x0004003d,0x0000002d,0x0000059e,0x000000ec,0x00050050,0x0000002d, + 0x000005a0,0x0000059f,0x0000059f,0x00050084,0x0000002d,0x000005a1,0x0000059e,0x000005a0, + 0x0004007c,0x00000032,0x000005a2,0x000005a1,0x0004003d,0x00000006,0x000005a3,0x000000ea, + 0x0004007c,0x0000001a,0x000005a4,0x000005a3,0x0004003d,0x00000006,0x000005a5,0x000000eb, + 0x0004007c,0x0000001a,0x000005a6,0x000005a5,0x00050050,0x00000032,0x000005a7,0x000005a4, + 0x000005a6,0x00050080,0x00000032,0x000005a8,0x000005a2,0x000005a7,0x0003003e,0x0000059d, + 0x000005a8,0x0004003d,0x00000032,0x000005ac,0x0000058f,0x0004007c,0x0000002d,0x000005ad, + 0x000005ac,0x0003003e,0x000005ae,0x000005ad,0x0004003d,0x00000006,0x000005b0,0x000000ef, + 0x0003003e,0x000005af,0x000005b0,0x00060039,0x0000009f,0x000005b1,0x000000e7,0x000005ae, + 0x000005af,0x00050041,0x000000aa,0x000005b2,0x000005ab,0x0000014c,0x0003003e,0x000005b2, + 0x000005b1,0x0004003d,0x00000032,0x000005b4,0x0000059d,0x0003003e,0x000005b3,0x000005b4, + 0x00050041,0x000000aa,0x000005b6,0x000005ab,0x0000014c,0x0004003d,0x0000009f,0x000005b7, + 0x000005b6,0x0003003e,0x000005b5,0x000005b7,0x0003003e,0x000005b8,0x000001bf,0x0004003d, + 0x00000006,0x000005ba,0x000000ef,0x0003003e,0x000005b9,0x000005ba,0x00080039,0x00000002, + 0x000005bb,0x000000b7,0x000005b3,0x000005b5,0x000005b8,0x000005b9,0x0004003d,0x0000002d, + 0x000005bc,0x000000ec,0x00050050,0x0000002d,0x000005bd,0x00000591,0x00000591,0x00050084, + 0x0000002d,0x000005be,0x000005bc,0x000005bd,0x0004007c,0x00000032,0x000005bf,0x000005be, + 0x0004003d,0x00000006,0x000005c0,0x000000ea,0x00050084,0x00000006,0x000005c1,0x000005c0, + 0x0000016b,0x00050080,0x00000006,0x000005c2,0x000005c1,0x0000059f,0x0004007c,0x0000001a, + 0x000005c3,0x000005c2,0x0004003d,0x00000006,0x000005c4,0x000000eb,0x00050084,0x00000006, + 0x000005c5,0x000005c4,0x0000016b,0x0004007c,0x0000001a,0x000005c6,0x000005c5,0x00050050, + 0x00000032,0x000005c7,0x000005c3,0x000005c6,0x00050080,0x00000032,0x000005c8,0x000005bf, + 0x000005c7,0x0003003e,0x0000058f,0x000005c8,0x0004003d,0x0000002d,0x000005c9,0x000000ec, + 0x00050050,0x0000002d,0x000005ca,0x0000059f,0x0000059f,0x00050084,0x0000002d,0x000005cb, + 0x000005c9,0x000005ca,0x0004007c,0x00000032,0x000005cc,0x000005cb,0x0004003d,0x00000006, + 0x000005cd,0x000000ea,0x00050080,0x00000006,0x000005ce,0x000005cd,0x000004bf,0x0004007c, + 0x0000001a,0x000005cf,0x000005ce,0x0004003d,0x00000006,0x000005d0,0x000000eb,0x0004007c, + 0x0000001a,0x000005d1,0x000005d0,0x00050050,0x00000032,0x000005d2,0x000005cf,0x000005d1, + 0x00050080,0x00000032,0x000005d3,0x000005cc,0x000005d2,0x0003003e,0x0000059d,0x000005d3, + 0x0004003d,0x00000032,0x000005d4,0x0000058f,0x0004007c,0x0000002d,0x000005d5,0x000005d4, + 0x0003003e,0x000005d6,0x000005d5,0x0004003d,0x00000006,0x000005d8,0x000000ef,0x0003003e, + 0x000005d7,0x000005d8,0x00060039,0x0000009f,0x000005d9,0x000000e7,0x000005d6,0x000005d7, + 0x00050041,0x000000aa,0x000005da,0x000005ab,0x00000191,0x0003003e,0x000005da,0x000005d9, + 0x0004003d,0x00000032,0x000005dc,0x0000059d,0x0003003e,0x000005db,0x000005dc,0x00050041, + 0x000000aa,0x000005de,0x000005ab,0x00000191,0x0004003d,0x0000009f,0x000005df,0x000005de, + 0x0003003e,0x000005dd,0x000005df,0x0003003e,0x000005e0,0x000001bf,0x0004003d,0x00000006, + 0x000005e2,0x000000ef,0x0003003e,0x000005e1,0x000005e2,0x00080039,0x00000002,0x000005e3, + 0x000000b7,0x000005db,0x000005dd,0x000005e0,0x000005e1,0x0004003d,0x0000002d,0x000005e4, + 0x000000ec,0x00050050,0x0000002d,0x000005e5,0x00000591,0x00000591,0x00050084,0x0000002d, + 0x000005e6,0x000005e4,0x000005e5,0x0004007c,0x00000032,0x000005e7,0x000005e6,0x0004003d, + 0x00000006,0x000005e8,0x000000ea,0x00050084,0x00000006,0x000005e9,0x000005e8,0x0000016b, + 0x0004007c,0x0000001a,0x000005ea,0x000005e9,0x0004003d,0x00000006,0x000005eb,0x000000eb, + 0x00050084,0x00000006,0x000005ec,0x000005eb,0x0000016b,0x00050080,0x00000006,0x000005ed, + 0x000005ec,0x0000059f,0x0004007c,0x0000001a,0x000005ee,0x000005ed,0x00050050,0x00000032, + 0x000005ef,0x000005ea,0x000005ee,0x00050080,0x00000032,0x000005f0,0x000005e7,0x000005ef, + 0x0003003e,0x0000058f,0x000005f0,0x0004003d,0x0000002d,0x000005f1,0x000000ec,0x00050050, + 0x0000002d,0x000005f2,0x0000059f,0x0000059f,0x00050084,0x0000002d,0x000005f3,0x000005f1, + 0x000005f2,0x0004007c,0x00000032,0x000005f4,0x000005f3,0x0004003d,0x00000006,0x000005f5, + 0x000000ea,0x0004007c,0x0000001a,0x000005f6,0x000005f5,0x0004003d,0x00000006,0x000005f7, + 0x000000eb,0x00050080,0x00000006,0x000005f8,0x000005f7,0x000004bf,0x0004007c,0x0000001a, + 0x000005f9,0x000005f8,0x00050050,0x00000032,0x000005fa,0x000005f6,0x000005f9,0x00050080, + 0x00000032,0x000005fb,0x000005f4,0x000005fa,0x0003003e,0x0000059d,0x000005fb,0x0004003d, + 0x00000032,0x000005fc,0x0000058f,0x0004007c,0x0000002d,0x000005fd,0x000005fc,0x0003003e, + 0x000005fe,0x000005fd,0x0004003d,0x00000006,0x00000600,0x000000ef,0x0003003e,0x000005ff, + 0x00000600,0x00060039,0x0000009f,0x00000601,0x000000e7,0x000005fe,0x000005ff,0x00050041, + 0x000000aa,0x00000602,0x000005ab,0x000001b3,0x0003003e,0x00000602,0x00000601,0x0004003d, + 0x00000032,0x00000604,0x0000059d,0x0003003e,0x00000603,0x00000604,0x00050041,0x000000aa, + 0x00000606,0x000005ab,0x000001b3,0x0004003d,0x0000009f,0x00000607,0x00000606,0x0003003e, + 0x00000605,0x00000607,0x0003003e,0x00000608,0x000001bf,0x0004003d,0x00000006,0x0000060a, + 0x000000ef,0x0003003e,0x00000609,0x0000060a,0x00080039,0x00000002,0x0000060b,0x000000b7, + 0x00000603,0x00000605,0x00000608,0x00000609,0x0004003d,0x0000002d,0x0000060c,0x000000ec, + 0x00050050,0x0000002d,0x0000060d,0x00000591,0x00000591,0x00050084,0x0000002d,0x0000060e, + 0x0000060c,0x0000060d,0x0004007c,0x00000032,0x0000060f,0x0000060e,0x0004003d,0x00000006, + 0x00000610,0x000000ea,0x00050084,0x00000006,0x00000611,0x00000610,0x0000016b,0x00050080, + 0x00000006,0x00000612,0x00000611,0x0000059f,0x0004007c,0x0000001a,0x00000613,0x00000612, + 0x0004003d,0x00000006,0x00000614,0x000000eb,0x00050084,0x00000006,0x00000615,0x00000614, + 0x0000016b,0x00050080,0x00000006,0x00000616,0x00000615,0x0000059f,0x0004007c,0x0000001a, + 0x00000617,0x00000616,0x00050050,0x00000032,0x00000618,0x00000613,0x00000617,0x00050080, + 0x00000032,0x00000619,0x0000060f,0x00000618,0x0003003e,0x0000058f,0x00000619,0x0004003d, + 0x0000002d,0x0000061a,0x000000ec,0x00050050,0x0000002d,0x0000061b,0x0000059f,0x0000059f, + 0x00050084,0x0000002d,0x0000061c,0x0000061a,0x0000061b,0x0004007c,0x00000032,0x0000061d, + 0x0000061c,0x0004003d,0x00000006,0x0000061e,0x000000ea,0x00050080,0x00000006,0x0000061f, + 0x0000061e,0x000004bf,0x0004007c,0x0000001a,0x00000620,0x0000061f,0x0004003d,0x00000006, + 0x00000621,0x000000eb,0x00050080,0x00000006,0x00000622,0x00000621,0x000004bf,0x0004007c, + 0x0000001a,0x00000623,0x00000622,0x00050050,0x00000032,0x00000624,0x00000620,0x00000623, + 0x00050080,0x00000032,0x00000625,0x0000061d,0x00000624,0x0003003e,0x0000059d,0x00000625, + 0x0004003d,0x00000032,0x00000626,0x0000058f,0x0004007c,0x0000002d,0x00000627,0x00000626, + 0x0003003e,0x00000628,0x00000627,0x0004003d,0x00000006,0x0000062a,0x000000ef,0x0003003e, + 0x00000629,0x0000062a,0x00060039,0x0000009f,0x0000062b,0x000000e7,0x00000628,0x00000629, + 0x00050041,0x000000aa,0x0000062c,0x000005ab,0x000002ba,0x0003003e,0x0000062c,0x0000062b, + 0x0004003d,0x00000032,0x0000062e,0x0000059d,0x0003003e,0x0000062d,0x0000062e,0x00050041, + 0x000000aa,0x00000630,0x000005ab,0x000002ba,0x0004003d,0x0000009f,0x00000631,0x00000630, + 0x0003003e,0x0000062f,0x00000631,0x0003003e,0x00000632,0x000001bf,0x0004003d,0x00000006, + 0x00000634,0x000000ef,0x0003003e,0x00000633,0x00000634,0x00080039,0x00000002,0x00000635, + 0x000000b7,0x0000062d,0x0000062f,0x00000632,0x00000633,0x0004003d,0x00000006,0x00000636, + 0x000000ee,0x000500b2,0x0000006e,0x00000637,0x00000636,0x00000172,0x000300f7,0x00000639, + 0x00000000,0x000400fa,0x00000637,0x00000638,0x00000639,0x000200f8,0x00000638,0x000100fd, + 0x000200f8,0x00000639,0x00050041,0x000000aa,0x0000063c,0x000005ab,0x0000014c,0x0004003d, + 0x0000009f,0x0000063d,0x0000063c,0x0003003e,0x0000063b,0x0000063d,0x00050039,0x0000009f, + 0x0000063e,0x000000ce,0x0000063b,0x00050041,0x000000aa,0x0000063f,0x000005ab,0x0000014c, + 0x0003003e,0x0000063f,0x0000063e,0x00050041,0x000000aa,0x00000641,0x000005ab,0x00000191, + 0x0004003d,0x0000009f,0x00000642,0x00000641,0x0003003e,0x00000640,0x00000642,0x00050039, + 0x0000009f,0x00000643,0x000000ce,0x00000640,0x00050041,0x000000aa,0x00000644,0x000005ab, + 0x00000191,0x0003003e,0x00000644,0x00000643,0x00050041,0x000000aa,0x00000646,0x000005ab, + 0x000001b3,0x0004003d,0x0000009f,0x00000647,0x00000646,0x0003003e,0x00000645,0x00000647, + 0x00050039,0x0000009f,0x00000648,0x000000ce,0x00000645,0x00050041,0x000000aa,0x00000649, + 0x000005ab,0x000001b3,0x0003003e,0x00000649,0x00000648,0x00050041,0x000000aa,0x0000064b, + 0x000005ab,0x000002ba,0x0004003d,0x0000009f,0x0000064c,0x0000064b,0x0003003e,0x0000064a, + 0x0000064c,0x00050039,0x0000009f,0x0000064d,0x000000ce,0x0000064a,0x00050041,0x000000aa, + 0x0000064e,0x000005ab,0x000002ba,0x0003003e,0x0000064e,0x0000064d,0x0004003d,0x00000006, + 0x0000064f,0x000000ed,0x00050089,0x00000006,0x00000650,0x0000064f,0x0000020b,0x000500aa, + 0x0000006e,0x00000651,0x00000650,0x000001bf,0x000300f7,0x00000653,0x00000000,0x000400fa, + 0x00000651,0x00000652,0x00000653,0x000200f8,0x00000652,0x0004003d,0x0000002d,0x00000654, + 0x000000ec,0x00050050,0x0000002d,0x00000655,0x000004bf,0x000004bf,0x00050084,0x0000002d, + 0x00000656,0x00000654,0x00000655,0x0004007c,0x00000032,0x00000657,0x00000656,0x0004003d, + 0x00000006,0x00000658,0x000000ea,0x00050086,0x00000006,0x00000659,0x00000658,0x0000016b, + 0x0004007c,0x0000001a,0x0000065a,0x00000659,0x0004003d,0x00000006,0x0000065b,0x000000eb, + 0x00050086,0x00000006,0x0000065c,0x0000065b,0x0000016b,0x0004007c,0x0000001a,0x0000065d, + 0x0000065c,0x00050050,0x00000032,0x0000065e,0x0000065a,0x0000065d,0x00050080,0x00000032, + 0x0000065f,0x00000657,0x0000065e,0x0003003e,0x00000660,0x0000065f,0x00050041,0x000000aa, + 0x00000662,0x000005ab,0x0000014c,0x0004003d,0x0000009f,0x00000663,0x00000662,0x0003003e, + 0x00000661,0x00000663,0x0003003e,0x00000664,0x00000172,0x0004003d,0x00000006,0x00000666, + 0x000000ef,0x0003003e,0x00000665,0x00000666,0x00080039,0x00000002,0x00000667,0x000000b7, + 0x00000660,0x00000661,0x00000664,0x00000665,0x0004003d,0x00000006,0x00000668,0x000000ea, + 0x00050086,0x00000006,0x00000669,0x00000668,0x0000016b,0x0004003d,0x00000006,0x0000066a, + 0x000000eb,0x00050086,0x00000006,0x0000066b,0x0000066a,0x0000016b,0x0003003e,0x0000066c, + 0x00000669,0x0003003e,0x0000066d,0x0000066b,0x00050041,0x000000aa,0x0000066f,0x000005ab, + 0x0000014c,0x0004003d,0x0000009f,0x00000670,0x0000066f,0x0003003e,0x0000066e,0x00000670, + 0x00070039,0x00000002,0x00000671,0x000000c2,0x0000066c,0x0000066d,0x0000066e,0x0004003d, + 0x0000002d,0x00000672,0x000000ec,0x00050050,0x0000002d,0x00000673,0x000004bf,0x000004bf, + 0x00050084,0x0000002d,0x00000674,0x00000672,0x00000673,0x0004007c,0x00000032,0x00000675, + 0x00000674,0x0004003d,0x00000006,0x00000676,0x000000ea,0x00050086,0x00000006,0x00000677, + 0x00000676,0x0000016b,0x00050080,0x00000006,0x00000679,0x00000677,0x00000678,0x0004007c, + 0x0000001a,0x0000067a,0x00000679,0x0004003d,0x00000006,0x0000067b,0x000000eb,0x00050086, + 0x00000006,0x0000067c,0x0000067b,0x0000016b,0x0004007c,0x0000001a,0x0000067d,0x0000067c, + 0x00050050,0x00000032,0x0000067e,0x0000067a,0x0000067d,0x00050080,0x00000032,0x0000067f, + 0x00000675,0x0000067e,0x0003003e,0x00000680,0x0000067f,0x00050041,0x000000aa,0x00000682, + 0x000005ab,0x00000191,0x0004003d,0x0000009f,0x00000683,0x00000682,0x0003003e,0x00000681, + 0x00000683,0x0003003e,0x00000684,0x00000172,0x0004003d,0x00000006,0x00000686,0x000000ef, + 0x0003003e,0x00000685,0x00000686,0x00080039,0x00000002,0x00000687,0x000000b7,0x00000680, + 0x00000681,0x00000684,0x00000685,0x0004003d,0x00000006,0x00000688,0x000000ea,0x00050086, + 0x00000006,0x00000689,0x00000688,0x0000016b,0x00050080,0x00000006,0x0000068a,0x00000689, + 0x00000678,0x0004003d,0x00000006,0x0000068b,0x000000eb,0x00050086,0x00000006,0x0000068c, + 0x0000068b,0x0000016b,0x0003003e,0x0000068d,0x0000068a,0x0003003e,0x0000068e,0x0000068c, + 0x00050041,0x000000aa,0x00000690,0x000005ab,0x00000191,0x0004003d,0x0000009f,0x00000691, + 0x00000690,0x0003003e,0x0000068f,0x00000691,0x00070039,0x00000002,0x00000692,0x000000c2, + 0x0000068d,0x0000068e,0x0000068f,0x0004003d,0x0000002d,0x00000693,0x000000ec,0x00050050, + 0x0000002d,0x00000694,0x000004bf,0x000004bf,0x00050084,0x0000002d,0x00000695,0x00000693, + 0x00000694,0x0004007c,0x00000032,0x00000696,0x00000695,0x0004003d,0x00000006,0x00000697, + 0x000000ea,0x00050086,0x00000006,0x00000698,0x00000697,0x0000016b,0x0004007c,0x0000001a, + 0x00000699,0x00000698,0x0004003d,0x00000006,0x0000069a,0x000000eb,0x00050086,0x00000006, + 0x0000069b,0x0000069a,0x0000016b,0x00050080,0x00000006,0x0000069c,0x0000069b,0x00000678, + 0x0004007c,0x0000001a,0x0000069d,0x0000069c,0x00050050,0x00000032,0x0000069e,0x00000699, + 0x0000069d,0x00050080,0x00000032,0x0000069f,0x00000696,0x0000069e,0x0003003e,0x000006a0, + 0x0000069f,0x00050041,0x000000aa,0x000006a2,0x000005ab,0x000001b3,0x0004003d,0x0000009f, + 0x000006a3,0x000006a2,0x0003003e,0x000006a1,0x000006a3,0x0003003e,0x000006a4,0x00000172, + 0x0004003d,0x00000006,0x000006a6,0x000000ef,0x0003003e,0x000006a5,0x000006a6,0x00080039, + 0x00000002,0x000006a7,0x000000b7,0x000006a0,0x000006a1,0x000006a4,0x000006a5,0x0004003d, + 0x00000006,0x000006a8,0x000000ea,0x00050086,0x00000006,0x000006a9,0x000006a8,0x0000016b, + 0x0004003d,0x00000006,0x000006aa,0x000000eb,0x00050086,0x00000006,0x000006ab,0x000006aa, + 0x0000016b,0x00050080,0x00000006,0x000006ac,0x000006ab,0x00000678,0x0003003e,0x000006ad, + 0x000006a9,0x0003003e,0x000006ae,0x000006ac,0x00050041,0x000000aa,0x000006b0,0x000005ab, + 0x000001b3,0x0004003d,0x0000009f,0x000006b1,0x000006b0,0x0003003e,0x000006af,0x000006b1, + 0x00070039,0x00000002,0x000006b2,0x000000c2,0x000006ad,0x000006ae,0x000006af,0x0004003d, + 0x0000002d,0x000006b3,0x000000ec,0x00050050,0x0000002d,0x000006b4,0x000004bf,0x000004bf, + 0x00050084,0x0000002d,0x000006b5,0x000006b3,0x000006b4,0x0004007c,0x00000032,0x000006b6, + 0x000006b5,0x0004003d,0x00000006,0x000006b7,0x000000ea,0x00050086,0x00000006,0x000006b8, + 0x000006b7,0x0000016b,0x00050080,0x00000006,0x000006b9,0x000006b8,0x00000678,0x0004007c, + 0x0000001a,0x000006ba,0x000006b9,0x0004003d,0x00000006,0x000006bb,0x000000eb,0x00050086, + 0x00000006,0x000006bc,0x000006bb,0x0000016b,0x00050080,0x00000006,0x000006bd,0x000006bc, + 0x00000678,0x0004007c,0x0000001a,0x000006be,0x000006bd,0x00050050,0x00000032,0x000006bf, + 0x000006ba,0x000006be,0x00050080,0x00000032,0x000006c0,0x000006b6,0x000006bf,0x0003003e, + 0x000006c1,0x000006c0,0x00050041,0x000000aa,0x000006c3,0x000005ab,0x000002ba,0x0004003d, + 0x0000009f,0x000006c4,0x000006c3,0x0003003e,0x000006c2,0x000006c4,0x0003003e,0x000006c5, + 0x00000172,0x0004003d,0x00000006,0x000006c7,0x000000ef,0x0003003e,0x000006c6,0x000006c7, + 0x00080039,0x00000002,0x000006c8,0x000000b7,0x000006c1,0x000006c2,0x000006c5,0x000006c6, + 0x0004003d,0x00000006,0x000006c9,0x000000ea,0x00050086,0x00000006,0x000006ca,0x000006c9, + 0x0000016b,0x00050080,0x00000006,0x000006cb,0x000006ca,0x00000678,0x0004003d,0x00000006, + 0x000006cc,0x000000eb,0x00050086,0x00000006,0x000006cd,0x000006cc,0x0000016b,0x00050080, + 0x00000006,0x000006ce,0x000006cd,0x00000678,0x0003003e,0x000006cf,0x000006cb,0x0003003e, + 0x000006d0,0x000006ce,0x00050041,0x000000aa,0x000006d2,0x000005ab,0x000002ba,0x0004003d, + 0x0000009f,0x000006d3,0x000006d2,0x0003003e,0x000006d1,0x000006d3,0x00070039,0x00000002, + 0x000006d4,0x000000c2,0x000006cf,0x000006d0,0x000006d1,0x000200f9,0x00000653,0x000200f8, + 0x00000653,0x000100fd,0x00010038,0x00050036,0x00000002,0x000000f8,0x00000000,0x000000e9, + 0x00030037,0x00000007,0x000000f2,0x00030037,0x00000007,0x000000f3,0x00030037,0x000000d0, + 0x000000f4,0x00030037,0x00000007,0x000000f5,0x00030037,0x00000007,0x000000f6,0x00030037, + 0x00000007,0x000000f7,0x000200f8,0x000000f9,0x0004003b,0x00000007,0x000006d5,0x00000007, + 0x0004003b,0x00000007,0x000006d7,0x00000007,0x0004003b,0x000000d0,0x000006d9,0x00000007, + 0x0004003b,0x00000007,0x000006db,0x00000007,0x0004003b,0x00000007,0x000006dd,0x00000007, + 0x0004003b,0x00000007,0x000006df,0x00000007,0x0004003d,0x00000006,0x000006d6,0x000000f2, + 0x0003003e,0x000006d5,0x000006d6,0x0004003d,0x00000006,0x000006d8,0x000000f3,0x0003003e, + 0x000006d7,0x000006d8,0x0004003d,0x0000002d,0x000006da,0x000000f4,0x0003003e,0x000006d9, + 0x000006da,0x0004003d,0x00000006,0x000006dc,0x000000f5,0x0003003e,0x000006db,0x000006dc, + 0x0004003d,0x00000006,0x000006de,0x000000f6,0x0003003e,0x000006dd,0x000006de,0x0004003d, + 0x00000006,0x000006e0,0x000000f7,0x0003003e,0x000006df,0x000006e0,0x000a0039,0x00000002, + 0x000006e1,0x000000f0,0x000006d5,0x000006d7,0x000006d9,0x000006db,0x000006dd,0x000006df, + 0x000100fd,0x00010038,0x00050036,0x00000002,0x00000100,0x00000000,0x000000e9,0x00030037, + 0x00000007,0x000000fa,0x00030037,0x00000007,0x000000fb,0x00030037,0x000000d0,0x000000fc, + 0x00030037,0x00000007,0x000000fd,0x00030037,0x00000007,0x000000fe,0x00030037,0x00000007, + 0x000000ff,0x000200f8,0x00000101,0x0004003b,0x000000aa,0x000006e2,0x00000007,0x0004003b, + 0x00000007,0x000006e3,0x00000007,0x0004003b,0x00000007,0x000006e5,0x00000007,0x0004003b, + 0x000000aa,0x000006e8,0x00000007,0x0004003b,0x00000049,0x000006fc,0x00000007,0x0004003b, + 0x000000aa,0x000006fd,0x00000007,0x0004003b,0x00000007,0x000006ff,0x00000007,0x0004003b, + 0x00000007,0x00000701,0x00000007,0x0004003b,0x00000007,0x00000709,0x00000007,0x0004003b, + 0x00000007,0x0000070a,0x00000007,0x0004003b,0x000000aa,0x0000070c,0x00000007,0x0004003d, + 0x00000006,0x000006e4,0x000000fa,0x0003003e,0x000006e3,0x000006e4,0x0004003d,0x00000006, + 0x000006e6,0x000000fb,0x0003003e,0x000006e5,0x000006e6,0x00060039,0x0000009f,0x000006e7, + 0x000000bc,0x000006e3,0x000006e5,0x0003003e,0x000006e2,0x000006e7,0x0004003d,0x0000009f, + 0x000006e9,0x000006e2,0x0003003e,0x000006e8,0x000006e9,0x00050039,0x0000009f,0x000006ea, + 0x000000ce,0x000006e8,0x0003003e,0x000006e2,0x000006ea,0x0004003d,0x00000006,0x000006eb, + 0x000000fd,0x00050089,0x00000006,0x000006ec,0x000006eb,0x0000020b,0x000500aa,0x0000006e, + 0x000006ed,0x000006ec,0x000001bf,0x000300f7,0x000006ef,0x00000000,0x000400fa,0x000006ed, + 0x000006ee,0x000006ef,0x000200f8,0x000006ee,0x0004003d,0x0000002d,0x000006f0,0x000000fc, + 0x00050050,0x0000002d,0x000006f1,0x00000678,0x00000678,0x00050084,0x0000002d,0x000006f2, + 0x000006f0,0x000006f1,0x0004007c,0x00000032,0x000006f3,0x000006f2,0x0004003d,0x00000006, + 0x000006f4,0x000000fa,0x00050086,0x00000006,0x000006f5,0x000006f4,0x0000016b,0x0004007c, + 0x0000001a,0x000006f6,0x000006f5,0x0004003d,0x00000006,0x000006f7,0x000000fb,0x00050086, + 0x00000006,0x000006f8,0x000006f7,0x0000016b,0x0004007c,0x0000001a,0x000006f9,0x000006f8, + 0x00050050,0x00000032,0x000006fa,0x000006f6,0x000006f9,0x00050080,0x00000032,0x000006fb, + 0x000006f3,0x000006fa,0x0003003e,0x000006fc,0x000006fb,0x0004003d,0x0000009f,0x000006fe, + 0x000006e2,0x0003003e,0x000006fd,0x000006fe,0x0004003d,0x00000006,0x00000700,0x000000fe, + 0x0003003e,0x000006ff,0x00000700,0x0004003d,0x00000006,0x00000702,0x000000ff,0x0003003e, + 0x00000701,0x00000702,0x00080039,0x00000002,0x00000703,0x000000b7,0x000006fc,0x000006fd, + 0x000006ff,0x00000701,0x0004003d,0x00000006,0x00000704,0x000000fa,0x0004003d,0x00000006, + 0x00000705,0x000000fb,0x00050086,0x00000006,0x00000706,0x00000705,0x0000016b,0x00050089, + 0x00000006,0x00000707,0x00000706,0x0000016b,0x00050080,0x00000006,0x00000708,0x00000704, + 0x00000707,0x0003003e,0x00000709,0x00000708,0x0004003d,0x00000006,0x0000070b,0x000000fb, + 0x0003003e,0x0000070a,0x0000070b,0x0004003d,0x0000009f,0x0000070d,0x000006e2,0x0003003e, + 0x0000070c,0x0000070d,0x00070039,0x00000002,0x0000070e,0x000000c2,0x00000709,0x0000070a, + 0x0000070c,0x000200f9,0x000006ef,0x000200f8,0x000006ef,0x000100fd,0x00010038,0x00050036, + 0x00000002,0x00000108,0x00000000,0x000000e9,0x00030037,0x00000007,0x00000102,0x00030037, + 0x00000007,0x00000103,0x00030037,0x000000d0,0x00000104,0x00030037,0x00000007,0x00000105, + 0x00030037,0x00000007,0x00000106,0x00030037,0x00000007,0x00000107,0x000200f8,0x00000109, + 0x0004003b,0x000000aa,0x00000713,0x00000007,0x0004003b,0x00000007,0x0000071b,0x00000007, + 0x0004003b,0x00000007,0x0000071c,0x00000007,0x0004003b,0x000000aa,0x0000071e,0x00000007, + 0x0004003b,0x00000049,0x00000732,0x00000007,0x0004003b,0x000000aa,0x00000733,0x00000007, + 0x0004003b,0x00000007,0x00000735,0x00000007,0x0004003b,0x00000007,0x00000737,0x00000007, + 0x0004003b,0x00000007,0x00000741,0x00000007,0x0004003b,0x00000007,0x00000742,0x00000007, + 0x0004003b,0x000000aa,0x00000743,0x00000007,0x0004003d,0x00000006,0x0000070f,0x00000105, + 0x000500b0,0x0000006e,0x00000710,0x0000070f,0x00000591,0x000300f7,0x00000712,0x00000000, + 0x000400fa,0x00000710,0x00000711,0x00000712,0x000200f8,0x00000711,0x0004003d,0x00000006, + 0x00000714,0x00000102,0x00050084,0x00000006,0x00000715,0x00000714,0x0000016b,0x0004003d, + 0x00000006,0x00000716,0x00000103,0x00050089,0x00000006,0x00000717,0x00000716,0x0000016b, + 0x00050080,0x00000006,0x00000718,0x00000715,0x00000717,0x0004003d,0x00000006,0x00000719, + 0x00000103,0x00050084,0x00000006,0x0000071a,0x00000719,0x0000016b,0x0003003e,0x0000071b, + 0x00000718,0x0003003e,0x0000071c,0x0000071a,0x00060039,0x0000009f,0x0000071d,0x000000bc, + 0x0000071b,0x0000071c,0x0003003e,0x00000713,0x0000071d,0x0004003d,0x0000009f,0x0000071f, + 0x00000713,0x0003003e,0x0000071e,0x0000071f,0x00050039,0x0000009f,0x00000720,0x000000ce, + 0x0000071e,0x0003003e,0x00000713,0x00000720,0x0004003d,0x00000006,0x00000721,0x00000105, + 0x00050089,0x00000006,0x00000722,0x00000721,0x0000020b,0x000500aa,0x0000006e,0x00000723, + 0x00000722,0x000001bf,0x000300f7,0x00000725,0x00000000,0x000400fa,0x00000723,0x00000724, + 0x00000725,0x000200f8,0x00000724,0x0004003d,0x0000002d,0x00000726,0x00000104,0x00050050, + 0x0000002d,0x00000727,0x0000020b,0x0000020b,0x00050084,0x0000002d,0x00000728,0x00000726, + 0x00000727,0x0004007c,0x00000032,0x00000729,0x00000728,0x0004003d,0x00000006,0x0000072a, + 0x00000102,0x00050086,0x00000006,0x0000072b,0x0000072a,0x0000016b,0x0004007c,0x0000001a, + 0x0000072c,0x0000072b,0x0004003d,0x00000006,0x0000072d,0x00000103,0x00050086,0x00000006, + 0x0000072e,0x0000072d,0x0000016b,0x0004007c,0x0000001a,0x0000072f,0x0000072e,0x00050050, + 0x00000032,0x00000730,0x0000072c,0x0000072f,0x00050080,0x00000032,0x00000731,0x00000729, + 0x00000730,0x0003003e,0x00000732,0x00000731,0x0004003d,0x0000009f,0x00000734,0x00000713, + 0x0003003e,0x00000733,0x00000734,0x0004003d,0x00000006,0x00000736,0x00000106,0x0003003e, + 0x00000735,0x00000736,0x0004003d,0x00000006,0x00000738,0x00000107,0x0003003e,0x00000737, + 0x00000738,0x00080039,0x00000002,0x00000739,0x000000b7,0x00000732,0x00000733,0x00000735, + 0x00000737,0x0004003d,0x00000006,0x0000073a,0x00000102,0x00050084,0x00000006,0x0000073b, + 0x0000073a,0x0000016b,0x0004003d,0x00000006,0x0000073c,0x00000103,0x00050086,0x00000006, + 0x0000073d,0x0000073c,0x0000016b,0x00050080,0x00000006,0x0000073e,0x0000073b,0x0000073d, + 0x0004003d,0x00000006,0x0000073f,0x00000103,0x00050084,0x00000006,0x00000740,0x0000073f, + 0x0000016b,0x0003003e,0x00000741,0x0000073e,0x0003003e,0x00000742,0x00000740,0x0004003d, + 0x0000009f,0x00000744,0x00000713,0x0003003e,0x00000743,0x00000744,0x00070039,0x00000002, + 0x00000745,0x000000c2,0x00000741,0x00000742,0x00000743,0x000200f9,0x00000725,0x000200f8, + 0x00000725,0x000200f9,0x00000712,0x000200f8,0x00000712,0x000100fd,0x00010038,0x00050036, + 0x00000002,0x00000110,0x00000000,0x000000e9,0x00030037,0x00000007,0x0000010a,0x00030037, + 0x00000007,0x0000010b,0x00030037,0x000000d0,0x0000010c,0x00030037,0x00000007,0x0000010d, + 0x00030037,0x00000007,0x0000010e,0x00030037,0x00000007,0x0000010f,0x000200f8,0x00000111, + 0x0004003b,0x000000aa,0x0000074a,0x00000007,0x0004003b,0x00000007,0x00000751,0x00000007, + 0x0004003b,0x00000007,0x00000752,0x00000007,0x0004003b,0x000000aa,0x00000754,0x00000007, + 0x0004003b,0x00000049,0x00000768,0x00000007,0x0004003b,0x000000aa,0x00000769,0x00000007, + 0x0004003b,0x00000007,0x0000076b,0x00000007,0x0004003b,0x00000007,0x0000076d,0x00000007, + 0x0004003b,0x00000007,0x00000774,0x00000007,0x0004003b,0x00000007,0x00000775,0x00000007, + 0x0004003b,0x000000aa,0x00000776,0x00000007,0x0004003d,0x00000006,0x00000746,0x0000010d, + 0x000500b0,0x0000006e,0x00000747,0x00000746,0x000004bf,0x000300f7,0x00000749,0x00000000, + 0x000400fa,0x00000747,0x00000748,0x00000749,0x000200f8,0x00000748,0x0004003d,0x00000006, + 0x0000074b,0x0000010a,0x00050084,0x00000006,0x0000074c,0x0000074b,0x0000020b,0x0004003d, + 0x00000006,0x0000074d,0x0000010b,0x00050080,0x00000006,0x0000074e,0x0000074c,0x0000074d, + 0x0004003d,0x00000006,0x0000074f,0x0000010b,0x00050084,0x00000006,0x00000750,0x0000074f, + 0x0000020b,0x0003003e,0x00000751,0x0000074e,0x0003003e,0x00000752,0x00000750,0x00060039, + 0x0000009f,0x00000753,0x000000bc,0x00000751,0x00000752,0x0003003e,0x0000074a,0x00000753, + 0x0004003d,0x0000009f,0x00000755,0x0000074a,0x0003003e,0x00000754,0x00000755,0x00050039, + 0x0000009f,0x00000756,0x000000ce,0x00000754,0x0003003e,0x0000074a,0x00000756,0x0004003d, + 0x00000006,0x00000757,0x0000010d,0x00050089,0x00000006,0x00000758,0x00000757,0x0000020b, + 0x000500aa,0x0000006e,0x00000759,0x00000758,0x000001bf,0x000300f7,0x0000075b,0x00000000, + 0x000400fa,0x00000759,0x0000075a,0x0000075b,0x000200f8,0x0000075a,0x0004003d,0x0000002d, + 0x0000075c,0x0000010c,0x00050050,0x0000002d,0x0000075d,0x0000016b,0x0000016b,0x00050084, + 0x0000002d,0x0000075e,0x0000075c,0x0000075d,0x0004007c,0x00000032,0x0000075f,0x0000075e, + 0x0004003d,0x00000006,0x00000760,0x0000010a,0x00050086,0x00000006,0x00000761,0x00000760, + 0x0000016b,0x0004007c,0x0000001a,0x00000762,0x00000761,0x0004003d,0x00000006,0x00000763, + 0x0000010b,0x00050086,0x00000006,0x00000764,0x00000763,0x0000016b,0x0004007c,0x0000001a, + 0x00000765,0x00000764,0x00050050,0x00000032,0x00000766,0x00000762,0x00000765,0x00050080, + 0x00000032,0x00000767,0x0000075f,0x00000766,0x0003003e,0x00000768,0x00000767,0x0004003d, + 0x0000009f,0x0000076a,0x0000074a,0x0003003e,0x00000769,0x0000076a,0x0004003d,0x00000006, + 0x0000076c,0x0000010e,0x0003003e,0x0000076b,0x0000076c,0x0004003d,0x00000006,0x0000076e, + 0x0000010f,0x0003003e,0x0000076d,0x0000076e,0x00080039,0x00000002,0x0000076f,0x000000b7, + 0x00000768,0x00000769,0x0000076b,0x0000076d,0x0004003d,0x00000006,0x00000770,0x0000010a, + 0x00050086,0x00000006,0x00000771,0x00000770,0x0000016b,0x0004003d,0x00000006,0x00000772, + 0x0000010b,0x00050080,0x00000006,0x00000773,0x00000771,0x00000772,0x0003003e,0x00000774, + 0x00000773,0x0003003e,0x00000775,0x000001bf,0x0004003d,0x0000009f,0x00000777,0x0000074a, + 0x0003003e,0x00000776,0x00000777,0x00070039,0x00000002,0x00000778,0x000000c2,0x00000774, + 0x00000775,0x00000776,0x000200f9,0x0000075b,0x000200f8,0x0000075b,0x000200f9,0x00000749, + 0x000200f8,0x00000749,0x000100fd,0x00010038,0x00050036,0x00000002,0x00000117,0x00000000, + 0x00000112,0x00030037,0x000000d0,0x00000113,0x00030037,0x00000007,0x00000114,0x00030037, + 0x00000007,0x00000115,0x00030037,0x00000007,0x00000116,0x000200f8,0x00000118,0x0004003b, + 0x000000aa,0x0000077d,0x00000007,0x0004003b,0x00000007,0x0000077e,0x00000007,0x0004003b, + 0x00000007,0x00000780,0x00000007,0x0004003b,0x000000aa,0x00000782,0x00000007,0x0004003b, + 0x00000049,0x0000078c,0x00000007,0x0004003b,0x000000aa,0x0000078d,0x00000007,0x0004003b, + 0x00000007,0x0000078f,0x00000007,0x0004003b,0x00000007,0x00000791,0x00000007,0x0004003d, + 0x00000006,0x00000779,0x00000114,0x000500b0,0x0000006e,0x0000077a,0x00000779,0x0000020b, + 0x000300f7,0x0000077c,0x00000000,0x000400fa,0x0000077a,0x0000077b,0x0000077c,0x000200f8, + 0x0000077b,0x0004003d,0x00000006,0x0000077f,0x00000114,0x0003003e,0x0000077e,0x0000077f, + 0x0003003e,0x00000780,0x000001bf,0x00060039,0x0000009f,0x00000781,0x000000bc,0x0000077e, + 0x00000780,0x0003003e,0x0000077d,0x00000781,0x0004003d,0x0000009f,0x00000783,0x0000077d, + 0x0003003e,0x00000782,0x00000783,0x00050039,0x0000009f,0x00000784,0x000000ce,0x00000782, + 0x0003003e,0x0000077d,0x00000784,0x0004003d,0x00000006,0x00000785,0x00000114,0x00050089, + 0x00000006,0x00000786,0x00000785,0x0000020b,0x000500aa,0x0000006e,0x00000787,0x00000786, + 0x000001bf,0x000300f7,0x00000789,0x00000000,0x000400fa,0x00000787,0x00000788,0x00000789, + 0x000200f8,0x00000788,0x0004003d,0x0000002d,0x0000078a,0x00000113,0x0004007c,0x00000032, + 0x0000078b,0x0000078a,0x0003003e,0x0000078c,0x0000078b,0x0004003d,0x0000009f,0x0000078e, + 0x0000077d,0x0003003e,0x0000078d,0x0000078e,0x0004003d,0x00000006,0x00000790,0x00000115, + 0x0003003e,0x0000078f,0x00000790,0x0004003d,0x00000006,0x00000792,0x00000116,0x0003003e, + 0x00000791,0x00000792,0x00080039,0x00000002,0x00000793,0x000000b7,0x0000078c,0x0000078d, + 0x0000078f,0x00000791,0x000200f9,0x00000789,0x000200f8,0x00000789,0x000200f9,0x0000077c, + 0x000200f8,0x0000077c,0x000100fd,0x00010038,0x00050036,0x00000002,0x0000011e,0x00000000, + 0x00000119,0x00030037,0x00000007,0x0000011a,0x00030037,0x00000007,0x0000011b,0x00030037, + 0x00000007,0x0000011c,0x00030037,0x00000007,0x0000011d,0x000200f8,0x0000011f,0x0004003b, + 0x00000049,0x00000794,0x00000007,0x0004003b,0x00000049,0x0000079e,0x00000007,0x0004003b, + 0x000000aa,0x000007a8,0x00000007,0x0004003b,0x000000d0,0x000007ab,0x00000007,0x0004003b, + 0x00000007,0x000007ac,0x00000007,0x0004003b,0x00000049,0x000007b0,0x00000007,0x0004003b, + 0x000000aa,0x000007b2,0x00000007,0x0004003b,0x00000007,0x000007b4,0x00000007,0x0004003b, + 0x00000007,0x000007b5,0x00000007,0x0004003b,0x000000aa,0x000007ca,0x00000007,0x0004003b, + 0x000000d0,0x000007cd,0x00000007,0x0004003b,0x00000007,0x000007ce,0x00000007,0x0004003b, + 0x00000049,0x000007d1,0x00000007,0x0004003b,0x000000aa,0x000007d3,0x00000007,0x0004003b, + 0x00000007,0x000007d5,0x00000007,0x0004003b,0x00000007,0x000007d6,0x00000007,0x0004003b, + 0x000000aa,0x000007eb,0x00000007,0x0004003b,0x000000d0,0x000007ee,0x00000007,0x0004003b, + 0x00000007,0x000007ef,0x00000007,0x0004003b,0x00000049,0x000007f2,0x00000007,0x0004003b, + 0x000000aa,0x000007f4,0x00000007,0x0004003b,0x00000007,0x000007f6,0x00000007,0x0004003b, + 0x00000007,0x000007f7,0x00000007,0x0004003b,0x000000aa,0x0000080c,0x00000007,0x0004003b, + 0x000000d0,0x0000080f,0x00000007,0x0004003b,0x00000007,0x00000810,0x00000007,0x0004003b, + 0x00000049,0x00000813,0x00000007,0x0004003b,0x000000aa,0x00000815,0x00000007,0x0004003b, + 0x00000007,0x00000817,0x00000007,0x0004003b,0x00000007,0x00000818,0x00000007,0x0004003b, + 0x000000aa,0x00000821,0x00000007,0x0004003b,0x000000aa,0x00000822,0x00000007,0x0004003b, + 0x000000aa,0x00000824,0x00000007,0x0004003b,0x000000aa,0x00000826,0x00000007,0x0004003b, + 0x000000aa,0x00000828,0x00000007,0x0004003b,0x00000049,0x00000830,0x00000007,0x0004003b, + 0x000000aa,0x00000831,0x00000007,0x0004003b,0x00000007,0x00000833,0x00000007,0x0004003b, + 0x00000007,0x00000834,0x00000007,0x0004003b,0x00000007,0x00000837,0x00000007,0x0004003b, + 0x00000007,0x00000839,0x00000007,0x0004003b,0x000000aa,0x0000083b,0x00000007,0x0004003d, + 0x00000006,0x00000795,0x0000011a,0x00050084,0x00000006,0x00000796,0x00000795,0x0000020b, + 0x00050080,0x00000006,0x00000797,0x00000796,0x000001bf,0x0004007c,0x0000001a,0x00000798, + 0x00000797,0x0004003d,0x00000006,0x00000799,0x0000011b,0x00050084,0x00000006,0x0000079a, + 0x00000799,0x0000020b,0x00050080,0x00000006,0x0000079b,0x0000079a,0x000001bf,0x0004007c, + 0x0000001a,0x0000079c,0x0000079b,0x00050050,0x00000032,0x0000079d,0x00000798,0x0000079c, + 0x0003003e,0x00000794,0x0000079d,0x0004003d,0x00000006,0x0000079f,0x0000011a,0x00050084, + 0x00000006,0x000007a0,0x0000079f,0x0000016b,0x00050080,0x00000006,0x000007a1,0x000007a0, + 0x000001bf,0x0004007c,0x0000001a,0x000007a2,0x000007a1,0x0004003d,0x00000006,0x000007a3, + 0x0000011b,0x00050084,0x00000006,0x000007a4,0x000007a3,0x0000016b,0x00050080,0x00000006, + 0x000007a5,0x000007a4,0x000001bf,0x0004007c,0x0000001a,0x000007a6,0x000007a5,0x00050050, + 0x00000032,0x000007a7,0x000007a2,0x000007a6,0x0003003e,0x0000079e,0x000007a7,0x0004003d, + 0x00000032,0x000007a9,0x00000794,0x0004007c,0x0000002d,0x000007aa,0x000007a9,0x0003003e, + 0x000007ab,0x000007aa,0x0004003d,0x00000006,0x000007ad,0x0000011d,0x0003003e,0x000007ac, + 0x000007ad,0x00060039,0x0000009f,0x000007ae,0x000000dc,0x000007ab,0x000007ac,0x0003003e, + 0x000007a8,0x000007ae,0x0004003d,0x00000032,0x000007b1,0x0000079e,0x0003003e,0x000007b0, + 0x000007b1,0x0004003d,0x0000009f,0x000007b3,0x000007a8,0x0003003e,0x000007b2,0x000007b3, + 0x0003003e,0x000007b4,0x000007af,0x0004003d,0x00000006,0x000007b6,0x0000011d,0x0003003e, + 0x000007b5,0x000007b6,0x00080039,0x00000002,0x000007b7,0x000000b7,0x000007b0,0x000007b2, + 0x000007b4,0x000007b5,0x0004003d,0x00000006,0x000007b8,0x0000011a,0x00050084,0x00000006, + 0x000007b9,0x000007b8,0x0000020b,0x00050080,0x00000006,0x000007ba,0x000007b9,0x0000016b, + 0x0004007c,0x0000001a,0x000007bb,0x000007ba,0x0004003d,0x00000006,0x000007bc,0x0000011b, + 0x00050084,0x00000006,0x000007bd,0x000007bc,0x0000020b,0x00050080,0x00000006,0x000007be, + 0x000007bd,0x000001bf,0x0004007c,0x0000001a,0x000007bf,0x000007be,0x00050050,0x00000032, + 0x000007c0,0x000007bb,0x000007bf,0x0003003e,0x00000794,0x000007c0,0x0004003d,0x00000006, + 0x000007c1,0x0000011a,0x00050084,0x00000006,0x000007c2,0x000007c1,0x0000016b,0x00050080, + 0x00000006,0x000007c3,0x000007c2,0x00000172,0x0004007c,0x0000001a,0x000007c4,0x000007c3, + 0x0004003d,0x00000006,0x000007c5,0x0000011b,0x00050084,0x00000006,0x000007c6,0x000007c5, + 0x0000016b,0x00050080,0x00000006,0x000007c7,0x000007c6,0x000001bf,0x0004007c,0x0000001a, + 0x000007c8,0x000007c7,0x00050050,0x00000032,0x000007c9,0x000007c4,0x000007c8,0x0003003e, + 0x0000079e,0x000007c9,0x0004003d,0x00000032,0x000007cb,0x00000794,0x0004007c,0x0000002d, + 0x000007cc,0x000007cb,0x0003003e,0x000007cd,0x000007cc,0x0004003d,0x00000006,0x000007cf, + 0x0000011d,0x0003003e,0x000007ce,0x000007cf,0x00060039,0x0000009f,0x000007d0,0x000000dc, + 0x000007cd,0x000007ce,0x0003003e,0x000007ca,0x000007d0,0x0004003d,0x00000032,0x000007d2, + 0x0000079e,0x0003003e,0x000007d1,0x000007d2,0x0004003d,0x0000009f,0x000007d4,0x000007ca, + 0x0003003e,0x000007d3,0x000007d4,0x0003003e,0x000007d5,0x000007af,0x0004003d,0x00000006, + 0x000007d7,0x0000011d,0x0003003e,0x000007d6,0x000007d7,0x00080039,0x00000002,0x000007d8, + 0x000000b7,0x000007d1,0x000007d3,0x000007d5,0x000007d6,0x0004003d,0x00000006,0x000007d9, + 0x0000011a,0x00050084,0x00000006,0x000007da,0x000007d9,0x0000020b,0x00050080,0x00000006, + 0x000007db,0x000007da,0x000001bf,0x0004007c,0x0000001a,0x000007dc,0x000007db,0x0004003d, + 0x00000006,0x000007dd,0x0000011b,0x00050084,0x00000006,0x000007de,0x000007dd,0x0000020b, + 0x00050080,0x00000006,0x000007df,0x000007de,0x0000016b,0x0004007c,0x0000001a,0x000007e0, + 0x000007df,0x00050050,0x00000032,0x000007e1,0x000007dc,0x000007e0,0x0003003e,0x00000794, + 0x000007e1,0x0004003d,0x00000006,0x000007e2,0x0000011a,0x00050084,0x00000006,0x000007e3, + 0x000007e2,0x0000016b,0x00050080,0x00000006,0x000007e4,0x000007e3,0x000001bf,0x0004007c, + 0x0000001a,0x000007e5,0x000007e4,0x0004003d,0x00000006,0x000007e6,0x0000011b,0x00050084, + 0x00000006,0x000007e7,0x000007e6,0x0000016b,0x00050080,0x00000006,0x000007e8,0x000007e7, + 0x00000172,0x0004007c,0x0000001a,0x000007e9,0x000007e8,0x00050050,0x00000032,0x000007ea, + 0x000007e5,0x000007e9,0x0003003e,0x0000079e,0x000007ea,0x0004003d,0x00000032,0x000007ec, + 0x00000794,0x0004007c,0x0000002d,0x000007ed,0x000007ec,0x0003003e,0x000007ee,0x000007ed, + 0x0004003d,0x00000006,0x000007f0,0x0000011d,0x0003003e,0x000007ef,0x000007f0,0x00060039, + 0x0000009f,0x000007f1,0x000000dc,0x000007ee,0x000007ef,0x0003003e,0x000007eb,0x000007f1, + 0x0004003d,0x00000032,0x000007f3,0x0000079e,0x0003003e,0x000007f2,0x000007f3,0x0004003d, + 0x0000009f,0x000007f5,0x000007eb,0x0003003e,0x000007f4,0x000007f5,0x0003003e,0x000007f6, + 0x000007af,0x0004003d,0x00000006,0x000007f8,0x0000011d,0x0003003e,0x000007f7,0x000007f8, + 0x00080039,0x00000002,0x000007f9,0x000000b7,0x000007f2,0x000007f4,0x000007f6,0x000007f7, + 0x0004003d,0x00000006,0x000007fa,0x0000011a,0x00050084,0x00000006,0x000007fb,0x000007fa, + 0x0000020b,0x00050080,0x00000006,0x000007fc,0x000007fb,0x0000016b,0x0004007c,0x0000001a, + 0x000007fd,0x000007fc,0x0004003d,0x00000006,0x000007fe,0x0000011b,0x00050084,0x00000006, + 0x000007ff,0x000007fe,0x0000020b,0x00050080,0x00000006,0x00000800,0x000007ff,0x0000016b, + 0x0004007c,0x0000001a,0x00000801,0x00000800,0x00050050,0x00000032,0x00000802,0x000007fd, + 0x00000801,0x0003003e,0x00000794,0x00000802,0x0004003d,0x00000006,0x00000803,0x0000011a, + 0x00050084,0x00000006,0x00000804,0x00000803,0x0000016b,0x00050080,0x00000006,0x00000805, + 0x00000804,0x00000172,0x0004007c,0x0000001a,0x00000806,0x00000805,0x0004003d,0x00000006, + 0x00000807,0x0000011b,0x00050084,0x00000006,0x00000808,0x00000807,0x0000016b,0x00050080, + 0x00000006,0x00000809,0x00000808,0x00000172,0x0004007c,0x0000001a,0x0000080a,0x00000809, + 0x00050050,0x00000032,0x0000080b,0x00000806,0x0000080a,0x0003003e,0x0000079e,0x0000080b, + 0x0004003d,0x00000032,0x0000080d,0x00000794,0x0004007c,0x0000002d,0x0000080e,0x0000080d, + 0x0003003e,0x0000080f,0x0000080e,0x0004003d,0x00000006,0x00000811,0x0000011d,0x0003003e, + 0x00000810,0x00000811,0x00060039,0x0000009f,0x00000812,0x000000dc,0x0000080f,0x00000810, + 0x0003003e,0x0000080c,0x00000812,0x0004003d,0x00000032,0x00000814,0x0000079e,0x0003003e, + 0x00000813,0x00000814,0x0004003d,0x0000009f,0x00000816,0x0000080c,0x0003003e,0x00000815, + 0x00000816,0x0003003e,0x00000817,0x000007af,0x0004003d,0x00000006,0x00000819,0x0000011d, + 0x0003003e,0x00000818,0x00000819,0x00080039,0x00000002,0x0000081a,0x000000b7,0x00000813, + 0x00000815,0x00000817,0x00000818,0x0004003d,0x00000006,0x0000081b,0x0000011c,0x000500b2, + 0x0000006e,0x0000081d,0x0000081b,0x0000081c,0x000300f7,0x0000081f,0x00000000,0x000400fa, + 0x0000081d,0x0000081e,0x0000081f,0x000200f8,0x0000081e,0x000100fd,0x000200f8,0x0000081f, + 0x0004003d,0x0000009f,0x00000823,0x000007a8,0x0003003e,0x00000822,0x00000823,0x0004003d, + 0x0000009f,0x00000825,0x000007ca,0x0003003e,0x00000824,0x00000825,0x0004003d,0x0000009f, + 0x00000827,0x000007eb,0x0003003e,0x00000826,0x00000827,0x0004003d,0x0000009f,0x00000829, + 0x0000080c,0x0003003e,0x00000828,0x00000829,0x00080039,0x0000009f,0x0000082a,0x000000b0, + 0x00000822,0x00000824,0x00000826,0x00000828,0x0003003e,0x00000821,0x0000082a,0x0004003d, + 0x00000006,0x0000082b,0x0000011a,0x0004007c,0x0000001a,0x0000082c,0x0000082b,0x0004003d, + 0x00000006,0x0000082d,0x0000011b,0x0004007c,0x0000001a,0x0000082e,0x0000082d,0x00050050, + 0x00000032,0x0000082f,0x0000082c,0x0000082e,0x0003003e,0x00000830,0x0000082f,0x0004003d, + 0x0000009f,0x00000832,0x00000821,0x0003003e,0x00000831,0x00000832,0x0003003e,0x00000833, + 0x0000081c,0x0004003d,0x00000006,0x00000835,0x0000011d,0x0003003e,0x00000834,0x00000835, + 0x00080039,0x00000002,0x00000836,0x000000b7,0x00000830,0x00000831,0x00000833,0x00000834, + 0x0004003d,0x00000006,0x00000838,0x0000011a,0x0003003e,0x00000837,0x00000838,0x0004003d, + 0x00000006,0x0000083a,0x0000011b,0x0003003e,0x00000839,0x0000083a,0x0004003d,0x0000009f, + 0x0000083c,0x00000821,0x0003003e,0x0000083b,0x0000083c,0x00070039,0x00000002,0x0000083d, + 0x000000c2,0x00000837,0x00000839,0x0000083b,0x000100fd,0x00010038,0x00050036,0x00000002, + 0x00000128,0x00000000,0x00000120,0x00030037,0x00000007,0x00000121,0x00030037,0x00000007, + 0x00000122,0x00030037,0x000000d0,0x00000123,0x00030037,0x00000007,0x00000124,0x00030037, + 0x00000007,0x00000125,0x00030037,0x00000007,0x00000126,0x00030037,0x00000007,0x00000127, + 0x000200f8,0x00000129,0x0004003b,0x00000007,0x00000845,0x00000007,0x0004003b,0x00000007, + 0x00000847,0x00000007,0x0004003b,0x000000d0,0x00000849,0x00000007,0x0004003b,0x00000007, + 0x0000084b,0x00000007,0x0004003b,0x00000007,0x0000084d,0x00000007,0x0004003b,0x00000007, + 0x0000084f,0x00000007,0x0004003b,0x00000007,0x0000085c,0x00000007,0x0004003b,0x00000007, + 0x0000085e,0x00000007,0x0004003b,0x000000d0,0x00000860,0x00000007,0x0004003b,0x00000007, + 0x00000862,0x00000007,0x0004003b,0x00000007,0x00000864,0x00000007,0x0004003b,0x00000007, + 0x00000865,0x00000007,0x0004003b,0x00000007,0x00000872,0x00000007,0x0004003b,0x00000007, + 0x00000874,0x00000007,0x0004003b,0x000000d0,0x00000876,0x00000007,0x0004003b,0x00000007, + 0x00000878,0x00000007,0x0004003b,0x00000007,0x0000087a,0x00000007,0x0004003b,0x00000007, + 0x0000087b,0x00000007,0x0004003b,0x000000d0,0x00000888,0x00000007,0x0004003b,0x00000007, + 0x0000088a,0x00000007,0x0004003b,0x00000007,0x0000088c,0x00000007,0x0004003b,0x00000007, + 0x0000088d,0x00000007,0x0004003d,0x00000006,0x0000083e,0x00000126,0x0004003d,0x00000006, + 0x0000083f,0x00000125,0x000500b2,0x0000006e,0x00000840,0x0000083e,0x0000083f,0x000300f7, + 0x00000842,0x00000000,0x000400fa,0x00000840,0x00000841,0x00000842,0x000200f8,0x00000841, + 0x000100fd,0x000200f8,0x00000842,0x00040039,0x00000002,0x00000844,0x000000c4,0x0004003d, + 0x00000006,0x00000846,0x00000121,0x0003003e,0x00000845,0x00000846,0x0004003d,0x00000006, + 0x00000848,0x00000122,0x0003003e,0x00000847,0x00000848,0x0004003d,0x0000002d,0x0000084a, + 0x00000123,0x0003003e,0x00000849,0x0000084a,0x0004003d,0x00000006,0x0000084c,0x00000124, + 0x0003003e,0x0000084b,0x0000084c,0x0004003d,0x00000006,0x0000084e,0x00000125,0x0003003e, + 0x0000084d,0x0000084e,0x0004003d,0x00000006,0x00000850,0x00000127,0x0003003e,0x0000084f, + 0x00000850,0x000a0039,0x00000002,0x00000851,0x00000100,0x00000845,0x00000847,0x00000849, + 0x0000084b,0x0000084d,0x0000084f,0x0004003d,0x00000006,0x00000852,0x00000126,0x0004003d, + 0x00000006,0x00000853,0x00000125,0x00050080,0x00000006,0x00000854,0x00000853,0x00000172, + 0x000500b2,0x0000006e,0x00000855,0x00000852,0x00000854,0x000300f7,0x00000857,0x00000000, + 0x000400fa,0x00000855,0x00000856,0x00000857,0x000200f8,0x00000856,0x000100fd,0x000200f8, + 0x00000857,0x00040039,0x00000002,0x00000859,0x000000c4,0x0004003d,0x00000006,0x0000085a, + 0x00000125,0x00050080,0x00000006,0x0000085b,0x0000085a,0x00000172,0x0004003d,0x00000006, + 0x0000085d,0x00000121,0x0003003e,0x0000085c,0x0000085d,0x0004003d,0x00000006,0x0000085f, + 0x00000122,0x0003003e,0x0000085e,0x0000085f,0x0004003d,0x0000002d,0x00000861,0x00000123, + 0x0003003e,0x00000860,0x00000861,0x0004003d,0x00000006,0x00000863,0x00000124,0x0003003e, + 0x00000862,0x00000863,0x0003003e,0x00000864,0x0000085b,0x0004003d,0x00000006,0x00000866, + 0x00000127,0x0003003e,0x00000865,0x00000866,0x000a0039,0x00000002,0x00000867,0x00000108, + 0x0000085c,0x0000085e,0x00000860,0x00000862,0x00000864,0x00000865,0x0004003d,0x00000006, + 0x00000868,0x00000126,0x0004003d,0x00000006,0x00000869,0x00000125,0x00050080,0x00000006, + 0x0000086a,0x00000869,0x0000016b,0x000500b2,0x0000006e,0x0000086b,0x00000868,0x0000086a, + 0x000300f7,0x0000086d,0x00000000,0x000400fa,0x0000086b,0x0000086c,0x0000086d,0x000200f8, + 0x0000086c,0x000100fd,0x000200f8,0x0000086d,0x00040039,0x00000002,0x0000086f,0x000000c4, + 0x0004003d,0x00000006,0x00000870,0x00000125,0x00050080,0x00000006,0x00000871,0x00000870, + 0x0000016b,0x0004003d,0x00000006,0x00000873,0x00000121,0x0003003e,0x00000872,0x00000873, + 0x0004003d,0x00000006,0x00000875,0x00000122,0x0003003e,0x00000874,0x00000875,0x0004003d, + 0x0000002d,0x00000877,0x00000123,0x0003003e,0x00000876,0x00000877,0x0004003d,0x00000006, + 0x00000879,0x00000124,0x0003003e,0x00000878,0x00000879,0x0003003e,0x0000087a,0x00000871, + 0x0004003d,0x00000006,0x0000087c,0x00000127,0x0003003e,0x0000087b,0x0000087c,0x000a0039, + 0x00000002,0x0000087d,0x00000110,0x00000872,0x00000874,0x00000876,0x00000878,0x0000087a, + 0x0000087b,0x0004003d,0x00000006,0x0000087e,0x00000126,0x0004003d,0x00000006,0x0000087f, + 0x00000125,0x00050080,0x00000006,0x00000880,0x0000087f,0x0000016c,0x000500b2,0x0000006e, + 0x00000881,0x0000087e,0x00000880,0x000300f7,0x00000883,0x00000000,0x000400fa,0x00000881, + 0x00000882,0x00000883,0x000200f8,0x00000882,0x000100fd,0x000200f8,0x00000883,0x00040039, + 0x00000002,0x00000885,0x000000c4,0x0004003d,0x00000006,0x00000886,0x00000125,0x00050080, + 0x00000006,0x00000887,0x00000886,0x0000016c,0x0004003d,0x0000002d,0x00000889,0x00000123, + 0x0003003e,0x00000888,0x00000889,0x0004003d,0x00000006,0x0000088b,0x00000124,0x0003003e, + 0x0000088a,0x0000088b,0x0003003e,0x0000088c,0x00000887,0x0004003d,0x00000006,0x0000088e, + 0x00000127,0x0003003e,0x0000088d,0x0000088e,0x00080039,0x00000002,0x0000088f,0x00000117, + 0x00000888,0x0000088a,0x0000088c,0x0000088d,0x000100fd,0x00010038,0x00050036,0x00000002, + 0x00000130,0x00000000,0x0000012a,0x00030037,0x000000d0,0x0000012b,0x00030037,0x00000007, + 0x0000012c,0x00030037,0x00000007,0x0000012d,0x00030037,0x00000007,0x0000012e,0x00030037, + 0x00000007,0x0000012f,0x000200f8,0x00000131,0x0004003b,0x000000d0,0x00000890,0x00000007, + 0x0004003b,0x00000007,0x00000893,0x00000007,0x0004003b,0x00000007,0x00000895,0x00000007, + 0x0004003b,0x00000007,0x0000089e,0x00000007,0x0004003b,0x00000007,0x000008a5,0x00000007, + 0x0004003b,0x00000007,0x000008a7,0x00000007,0x0004003b,0x000000d0,0x000008a9,0x00000007, + 0x0004003b,0x00000007,0x000008ab,0x00000007,0x0004003b,0x00000007,0x000008ad,0x00000007, + 0x0004003b,0x00000007,0x000008af,0x00000007,0x0004003b,0x00000007,0x000008b2,0x00000007, + 0x0004003b,0x00000007,0x000008b4,0x00000007,0x0004003b,0x000000d0,0x000008b6,0x00000007, + 0x0004003b,0x00000007,0x000008b8,0x00000007,0x0004003b,0x00000007,0x000008ba,0x00000007, + 0x0004003b,0x00000007,0x000008bb,0x00000007,0x0004003b,0x00000007,0x000008bd,0x00000007, + 0x0004003b,0x00000007,0x000008c5,0x00000007,0x0004003b,0x00000007,0x000008c7,0x00000007, + 0x0004003b,0x00000007,0x000008c9,0x00000007,0x0004003b,0x00000007,0x000008cf,0x00000007, + 0x0004003b,0x00000007,0x000008d2,0x00000007,0x0004003b,0x00000007,0x000008d4,0x00000007, + 0x0004003b,0x00000007,0x000008d6,0x00000007,0x0004003b,0x00000007,0x000008d8,0x00000007, + 0x0004003b,0x00000007,0x000008db,0x00000007,0x0004003b,0x00000007,0x000008dd,0x00000007, + 0x0004003b,0x000000d0,0x000008df,0x00000007,0x0004003b,0x00000007,0x000008e0,0x00000007, + 0x0004003b,0x00000007,0x000008e2,0x00000007,0x0004003b,0x00000007,0x000008e3,0x00000007, + 0x0004003b,0x00000007,0x000008e5,0x00000007,0x0004003d,0x00000006,0x00000891,0x0000012c, + 0x00050089,0x00000006,0x00000892,0x00000891,0x00000591,0x0003003e,0x00000893,0x00000892, + 0x00050039,0x0000002d,0x00000894,0x00000030,0x00000893,0x0003003e,0x00000890,0x00000894, + 0x00050041,0x00000007,0x00000896,0x00000890,0x000001bf,0x0004003d,0x00000006,0x00000897, + 0x00000896,0x0004003d,0x00000006,0x00000898,0x0000012c,0x000500c2,0x00000006,0x0000089a, + 0x00000898,0x00000899,0x00050089,0x00000006,0x0000089b,0x0000089a,0x0000016b,0x00050084, + 0x00000006,0x0000089c,0x00000678,0x0000089b,0x00050080,0x00000006,0x0000089d,0x00000897, + 0x0000089c,0x0003003e,0x00000895,0x0000089d,0x00050041,0x00000007,0x0000089f,0x00000890, + 0x00000172,0x0004003d,0x00000006,0x000008a0,0x0000089f,0x0004003d,0x00000006,0x000008a1, + 0x0000012c,0x000500c2,0x00000006,0x000008a2,0x000008a1,0x00000196,0x00050084,0x00000006, + 0x000008a3,0x00000678,0x000008a2,0x00050080,0x00000006,0x000008a4,0x000008a0,0x000008a3, + 0x0003003e,0x0000089e,0x000008a4,0x0004003d,0x00000006,0x000008a6,0x00000895,0x0003003e, + 0x000008a5,0x000008a6,0x0004003d,0x00000006,0x000008a8,0x0000089e,0x0003003e,0x000008a7, + 0x000008a8,0x0004003d,0x0000002d,0x000008aa,0x0000012b,0x0003003e,0x000008a9,0x000008aa, + 0x0004003d,0x00000006,0x000008ac,0x0000012c,0x0003003e,0x000008ab,0x000008ac,0x0004003d, + 0x00000006,0x000008ae,0x0000012d,0x0003003e,0x000008ad,0x000008ae,0x0004003d,0x00000006, + 0x000008b0,0x0000012f,0x0003003e,0x000008af,0x000008b0,0x000a0039,0x00000002,0x000008b1, + 0x000000f8,0x000008a5,0x000008a7,0x000008a9,0x000008ab,0x000008ad,0x000008af,0x0004003d, + 0x00000006,0x000008b3,0x00000895,0x0003003e,0x000008b2,0x000008b3,0x0004003d,0x00000006, + 0x000008b5,0x0000089e,0x0003003e,0x000008b4,0x000008b5,0x0004003d,0x0000002d,0x000008b7, + 0x0000012b,0x0003003e,0x000008b6,0x000008b7,0x0004003d,0x00000006,0x000008b9,0x0000012c, + 0x0003003e,0x000008b8,0x000008b9,0x0003003e,0x000008ba,0x0000016b,0x0004003d,0x00000006, + 0x000008bc,0x0000012d,0x0003003e,0x000008bb,0x000008bc,0x0004003d,0x00000006,0x000008be, + 0x0000012f,0x0003003e,0x000008bd,0x000008be,0x000b0039,0x00000002,0x000008bf,0x00000128, + 0x000008b2,0x000008b4,0x000008b6,0x000008b8,0x000008ba,0x000008bb,0x000008bd,0x0004003d, + 0x00000006,0x000008c0,0x0000012d,0x000500b2,0x0000006e,0x000008c1,0x000008c0,0x000007af, + 0x000300f7,0x000008c3,0x00000000,0x000400fa,0x000008c1,0x000008c2,0x000008c3,0x000200f8, + 0x000008c2,0x000100fd,0x000200f8,0x000008c3,0x0004003d,0x00000006,0x000008c6,0x0000012e, + 0x0003003e,0x000008c5,0x000008c6,0x0004003d,0x00000006,0x000008c8,0x0000012c,0x0003003e, + 0x000008c7,0x000008c8,0x0004003d,0x00000006,0x000008ca,0x0000012f,0x0003003e,0x000008c9, + 0x000008ca,0x00070039,0x0000006e,0x000008cb,0x000000ca,0x000008c5,0x000008c7,0x000008c9, + 0x000300f7,0x000008cd,0x00000000,0x000400fa,0x000008cb,0x000008cc,0x000008cd,0x000200f8, + 0x000008cc,0x000100fd,0x000200f8,0x000008cd,0x0004003d,0x00000006,0x000008d0,0x0000012f, + 0x0003003e,0x000008cf,0x000008d0,0x00050039,0x00000002,0x000008d1,0x0000007f,0x000008cf, + 0x0004003d,0x00000006,0x000008d3,0x00000895,0x0003003e,0x000008d2,0x000008d3,0x0004003d, + 0x00000006,0x000008d5,0x0000089e,0x0003003e,0x000008d4,0x000008d5,0x0004003d,0x00000006, + 0x000008d7,0x0000012d,0x0003003e,0x000008d6,0x000008d7,0x0004003d,0x00000006,0x000008d9, + 0x0000012f,0x0003003e,0x000008d8,0x000008d9,0x00080039,0x00000002,0x000008da,0x0000011e, + 0x000008d2,0x000008d4,0x000008d6,0x000008d8,0x0004003d,0x00000006,0x000008dc,0x00000895, + 0x0003003e,0x000008db,0x000008dc,0x0004003d,0x00000006,0x000008de,0x0000089e,0x0003003e, + 0x000008dd,0x000008de,0x0003003e,0x000008df,0x0000053f,0x0004003d,0x00000006,0x000008e1, + 0x0000012c,0x0003003e,0x000008e0,0x000008e1,0x0003003e,0x000008e2,0x00000678,0x0004003d, + 0x00000006,0x000008e4,0x0000012d,0x0003003e,0x000008e3,0x000008e4,0x0004003d,0x00000006, + 0x000008e6,0x0000012f,0x0003003e,0x000008e5,0x000008e6,0x000b0039,0x00000002,0x000008e7, + 0x00000128,0x000008db,0x000008dd,0x000008df,0x000008e0,0x000008e2,0x000008e3,0x000008e5, + 0x000100fd,0x00010038,0x00050036,0x00000002,0x00000139,0x00000000,0x00000132,0x00030037, + 0x000000d0,0x00000133,0x00030037,0x00000007,0x00000134,0x00030037,0x00000007,0x00000135, + 0x00030037,0x00000007,0x00000136,0x00030037,0x00000007,0x00000137,0x00030037,0x000000d0, + 0x00000138,0x000200f8,0x0000013a,0x0004003b,0x000000d0,0x000008eb,0x00000007,0x0004003b, + 0x00000007,0x000008ec,0x00000007,0x0004003b,0x00000007,0x000008ee,0x00000007,0x0004003b, + 0x00000007,0x000008f0,0x00000007,0x0004003b,0x00000007,0x000008f2,0x00000007,0x0004003d, + 0x0000002d,0x000008e8,0x00000133,0x0004003d,0x0000002d,0x000008e9,0x00000138,0x00050080, + 0x0000002d,0x000008ea,0x000008e8,0x000008e9,0x0003003e,0x000008eb,0x000008ea,0x0004003d, + 0x00000006,0x000008ed,0x00000134,0x0003003e,0x000008ec,0x000008ed,0x0004003d,0x00000006, + 0x000008ef,0x00000135,0x0003003e,0x000008ee,0x000008ef,0x0004003d,0x00000006,0x000008f1, + 0x00000136,0x0003003e,0x000008f0,0x000008f1,0x0004003d,0x00000006,0x000008f3,0x00000137, + 0x0003003e,0x000008f2,0x000008f3,0x00090039,0x00000002,0x000008f4,0x00000130,0x000008eb, + 0x000008ec,0x000008ee,0x000008f0,0x000008f2,0x000100fd,0x00010038,0x00050036,0x00000002, + 0x00000140,0x00000000,0x0000013d,0x00030037,0x0000013c,0x0000013e,0x00030037,0x00000007, + 0x0000013f,0x000200f8,0x00000141,0x0004003b,0x000000d0,0x000008fd,0x00000007,0x0004003b, + 0x00000007,0x000008fe,0x00000007,0x0004003b,0x00000007,0x000008ff,0x00000007,0x0004003b, + 0x00000007,0x00000900,0x00000007,0x0004003b,0x00000007,0x00000901,0x00000007,0x0004003b, + 0x000000d0,0x00000902,0x00000007,0x0004003d,0x0000013b,0x000008f5,0x0000013e,0x0007004f, + 0x0000002d,0x000008f6,0x000008f5,0x000008f5,0x00000000,0x00000001,0x0004003d,0x00000006, + 0x000008f7,0x0000013f,0x00040039,0x00000006,0x000008f8,0x00000042,0x00040039,0x00000006, + 0x000008f9,0x00000044,0x00050041,0x00000007,0x000008fa,0x0000013e,0x0000016b,0x0004003d, + 0x00000006,0x000008fb,0x000008fa,0x00040039,0x0000002d,0x000008fc,0x00000047,0x0003003e, + 0x000008fd,0x000008f6,0x0003003e,0x000008fe,0x000008f7,0x0003003e,0x000008ff,0x000008f8, + 0x0003003e,0x00000900,0x000008f9,0x0003003e,0x00000901,0x000008fb,0x0003003e,0x00000902, + 0x000008fc,0x000a0039,0x00000002,0x00000903,0x00000139,0x000008fd,0x000008fe,0x000008ff, + 0x00000900,0x00000901,0x00000902,0x000100fd,0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_shading_change_pyramid_nowave_comp_spv.h b/gpu/vk/shaders/fsr3_shading_change_pyramid_nowave_comp_spv.h new file mode 100644 index 000000000..6b251bbb6 --- /dev/null +++ b/gpu/vk/shaders/fsr3_shading_change_pyramid_nowave_comp_spv.h @@ -0,0 +1,1942 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_SHADING_CHANGE_PYRAMID_NOWAVE_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x0000095b,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000031,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e, + 0x00000000,0x00000001,0x0007000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000945, + 0x00000947,0x00060010,0x00000004,0x00000011,0x00000100,0x00000001,0x00000001,0x00030003, + 0x00000002,0x000001c2,0x000b0004,0x455f4c47,0x735f5458,0x6c706d61,0x656c7265,0x745f7373, + 0x75747865,0x665f6572,0x74636e75,0x736e6f69,0x00000000,0x000b0004,0x455f4c47,0x735f5458, + 0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570, + 0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f, + 0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65, + 0x74636572,0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x000a0005,0x0000000c, + 0x42786666,0x69667469,0x45646c65,0x61727478,0x75287463,0x31753b31,0x3b31753b,0x00000000, + 0x00030005,0x00000009,0x00637273,0x00030005,0x0000000a,0x0066666f,0x00040005,0x0000000b, + 0x73746962,0x00000000,0x000a0005,0x00000011,0x42786666,0x69667469,0x49646c65,0x7265736e, + 0x73614d74,0x3175286b,0x3b31753b,0x003b3175,0x00030005,0x0000000e,0x00637273,0x00030005, + 0x0000000f,0x00736e69,0x00040005,0x00000010,0x73746962,0x00000000,0x00060005,0x00000018, + 0x4d786666,0x66286e69,0x31663b31,0x0000003b,0x00030005,0x00000016,0x00000078,0x00030005, + 0x00000017,0x00000079,0x00060005,0x0000001f,0x4d786666,0x69286e69,0x31693b31,0x0000003b, + 0x00030005,0x0000001d,0x00000078,0x00030005,0x0000001e,0x00000079,0x00060005,0x00000023, + 0x4d786666,0x66287861,0x31663b31,0x0000003b,0x00030005,0x00000021,0x00000078,0x00030005, + 0x00000022,0x00000079,0x00060005,0x00000027,0x4d786666,0x69287861,0x31693b31,0x0000003b, + 0x00030005,0x00000025,0x00000078,0x00030005,0x00000026,0x00000079,0x00060005,0x0000002b, + 0x50786666,0x6628776f,0x31663b31,0x0000003b,0x00030005,0x00000029,0x00000078,0x00030005, + 0x0000002a,0x00000079,0x000a0005,0x00000030,0x52786666,0x70616d65,0x57726f46,0x52657661, + 0x63756465,0x6e6f6974,0x3b317528,0x00000000,0x00030005,0x0000002f,0x00000061,0x00050005, + 0x00000034,0x646e6552,0x69537265,0x0028657a,0x00090005,0x00000036,0x76657250,0x73756f69, + 0x6d617246,0x6e655265,0x53726564,0x28657a69,0x00000000,0x00040005,0x0000003a,0x7474694a, + 0x00287265,0x00080005,0x0000003c,0x76657250,0x73756f69,0x6d617246,0x74694a65,0x28726574, + 0x00000000,0x00070005,0x0000003f,0x746c6544,0x65725061,0x6f707845,0x65727573,0x00000028, + 0x00050005,0x00000042,0x4370694d,0x746e756f,0x00000028,0x00060005,0x00000044,0x576d754e, + 0x476b726f,0x70756f72,0x00002873,0x00070005,0x00000047,0x6b726f57,0x756f7247,0x66664f70, + 0x28746573,0x00000000,0x00080005,0x0000004c,0x64616f4c,0x72727543,0x4c746e65,0x28616d75, + 0x3b326976,0x00000000,0x00040005,0x0000004b,0x50785069,0x0000736f,0x00080005,0x0000004f, + 0x64616f4c,0x76657250,0x73756f69,0x616d754c,0x32697628,0x0000003b,0x00040005,0x0000004e, + 0x50785069,0x0000736f,0x000a0005,0x00000053,0x64616f4c,0x616c6944,0x4d646574,0x6f69746f, + 0x6365566e,0x28726f74,0x3b326976,0x00000000,0x00050005,0x00000052,0x49785069,0x7475706e, + 0x00000000,0x00050005,0x00000055,0x6f707845,0x65727573,0x00000028,0x00080005,0x0000005a, + 0x6f4c5752,0x79506461,0x696d6172,0x69762864,0x31753b32,0x0000003b,0x00040005,0x00000058, + 0x50785069,0x0000736f,0x00040005,0x00000059,0x65646e69,0x00000078,0x00090005,0x00000061, + 0x726f7453,0x72795065,0x64696d61,0x32697628,0x3266763b,0x3b31753b,0x00000000,0x00040005, + 0x0000005e,0x50785069,0x0000736f,0x00050005,0x0000005f,0x5674756f,0x65756c61,0x00000000, + 0x00040005,0x00000060,0x65646e69,0x00000078,0x000a0005,0x00000065,0x5f445053,0x72636e49, + 0x65736165,0x6d6f7441,0x6f436369,0x65746e75,0x31752872,0x0000003b,0x00050005,0x00000064, + 0x43647073,0x746e756f,0x00007265,0x00080005,0x00000067,0x5f445053,0x65736552,0x6f744174, + 0x4363696d,0x746e756f,0x00287265,0x00080005,0x0000006c,0x446e694d,0x64697669,0x79426465, + 0x2878614d,0x663b3166,0x00003b31,0x00030005,0x0000006a,0x00003076,0x00030005,0x0000006b, + 0x00003176,0x00060005,0x00000071,0x76557349,0x69736e49,0x76286564,0x003b3266,0x00030005, + 0x00000070,0x00765566,0x00080005,0x00000077,0x6d616c43,0x616f4c70,0x69762864,0x69763b32, + 0x69763b32,0x00003b32,0x00050005,0x00000074,0x53785069,0x6c706d61,0x00000065,0x00050005, + 0x00000075,0x4f785069,0x65736666,0x00000074,0x00060005,0x00000076,0x78655469,0x65727574, + 0x657a6953,0x00000000,0x000a0005,0x0000007a,0x49647053,0x6572636e,0x41657361,0x696d6f74, + 0x756f4363,0x7265746e,0x3b317528,0x00000000,0x00040005,0x00000079,0x63696c73,0x00000065, + 0x00080005,0x0000007c,0x47647053,0x74417465,0x63696d6f,0x6e756f43,0x28726574,0x00000000, + 0x00090005,0x0000007f,0x52647053,0x74657365,0x6d6f7441,0x6f436369,0x65746e75,0x31752872, + 0x0000003b,0x00040005,0x0000007e,0x63696c73,0x00000065,0x00050005,0x00000083,0x706d6153, + 0x6553656c,0x00000074,0x00060006,0x00000083,0x00000000,0x6d615366,0x73656c70,0x00000000, + 0x000b0005,0x00000087,0x74726f53,0x28746553,0x75727473,0x532d7463,0x6c706d61,0x74655365, + 0x5b31662d,0x3b315d35,0x00000000,0x00040005,0x00000086,0x74655366,0x00000000,0x00160005, + 0x0000008d,0x706d6f43,0x4d657475,0x6d696e69,0x69446d75,0x72656666,0x65636e65,0x32697628, + 0x7274733b,0x2d746375,0x706d6153,0x6553656c,0x31662d74,0x315d355b,0x7274733b,0x2d746375, + 0x706d6153,0x6553656c,0x31662d74,0x315d355b,0x0000003b,0x00040005,0x0000008a,0x50785069, + 0x0000736f,0x00040005,0x0000008b,0x74655366,0x00000030,0x00040005,0x0000008c,0x74655366, + 0x00000031,0x000b0005,0x00000091,0x43746547,0x65727275,0x754c746e,0x6942616d,0x656e696c, + 0x61537261,0x656c706d,0x66762873,0x00003b32,0x00030005,0x00000090,0x00765566,0x000a0005, + 0x00000093,0x76657250,0x73756f69,0x616d754c,0x696c6942,0x7261656e,0x706d6153,0x4473656c, + 0x00617461,0x00050006,0x00000093,0x00000000,0x74655366,0x00000000,0x00080006,0x00000093, + 0x00000001,0x45734962,0x74736978,0x53676e69,0x6c706d61,0x00000065,0x000c0005,0x00000097, + 0x50746547,0x69766572,0x4c73756f,0x42616d75,0x6e696c69,0x53726165,0x6c706d61,0x76287365, + 0x763b3266,0x003b3266,0x00030005,0x00000095,0x00765566,0x00060005,0x00000096,0x746f4d66, + 0x566e6f69,0x6f746365,0x00000072,0x00090005,0x0000009d,0x706d6f43,0x44657475,0x28666669, + 0x3b326976,0x3b326676,0x3b326676,0x00000000,0x00040005,0x0000009a,0x50785069,0x0000736f, + 0x00030005,0x0000009b,0x00765566,0x00060005,0x0000009c,0x746f4d66,0x566e6f69,0x6f746365, + 0x00000072,0x00090005,0x000000a3,0x4c647053,0x5364616f,0x6372756f,0x616d4965,0x76286567, + 0x753b3266,0x00003b31,0x00040005,0x000000a1,0x50785069,0x0000736f,0x00040005,0x000000a2, + 0x63696c73,0x00000065,0x00060005,0x000000a8,0x4c647053,0x2864616f,0x3b326976,0x003b3175, + 0x00030005,0x000000a6,0x00786574,0x00040005,0x000000a7,0x63696c73,0x00000065,0x00090005, + 0x000000b0,0x52647053,0x63756465,0x76283465,0x763b3466,0x763b3466,0x763b3466,0x003b3466, + 0x00030005,0x000000ac,0x00003076,0x00030005,0x000000ad,0x00003176,0x00030005,0x000000ae, + 0x00003276,0x00030005,0x000000af,0x00003376,0x00080005,0x000000b7,0x53647053,0x65726f74, + 0x32697628,0x3466763b,0x3b31753b,0x003b3175,0x00030005,0x000000b3,0x00786970,0x00050005, + 0x000000b4,0x5674756f,0x65756c61,0x00000000,0x00040005,0x000000b5,0x65646e69,0x00000078, + 0x00040005,0x000000b6,0x63696c73,0x00000065,0x00090005,0x000000bc,0x4c647053,0x4964616f, + 0x7265746e,0x6964656d,0x28657461,0x753b3175,0x00003b31,0x00030005,0x000000ba,0x00000078, + 0x00030005,0x000000bb,0x00000079,0x000a0005,0x000000c2,0x53647053,0x65726f74,0x65746e49, + 0x64656d72,0x65746169,0x3b317528,0x763b3175,0x003b3466,0x00030005,0x000000bf,0x00000078, + 0x00030005,0x000000c0,0x00000079,0x00040005,0x000000c1,0x756c6176,0x00000065,0x000a0005, + 0x000000c4,0x53786666,0x6f576470,0x72676b72,0x5370756f,0x66667568,0x6142656c,0x65697272, + 0x00002872,0x00090005,0x000000ca,0x45647053,0x57746978,0x676b726f,0x70756f72,0x3b317528, + 0x753b3175,0x00003b31,0x00060005,0x000000c7,0x576d756e,0x476b726f,0x70756f72,0x00000073, + 0x00080005,0x000000c8,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000, + 0x00040005,0x000000c9,0x63696c73,0x00000065,0x000c0005,0x000000d2,0x52647053,0x63756465, + 0x746e4965,0x656d7265,0x74616964,0x75762865,0x75763b32,0x75763b32,0x75763b32,0x00003b32, + 0x00030005,0x000000ce,0x00003069,0x00030005,0x000000cf,0x00003169,0x00030005,0x000000d0, + 0x00003269,0x00030005,0x000000d1,0x00003369,0x000b0005,0x000000da,0x52647053,0x63756465, + 0x616f4c65,0x76283464,0x763b3275,0x763b3275,0x763b3275,0x753b3275,0x00003b31,0x00030005, + 0x000000d5,0x00003069,0x00030005,0x000000d6,0x00003169,0x00030005,0x000000d7,0x00003269, + 0x00030005,0x000000d8,0x00003369,0x00040005,0x000000d9,0x63696c73,0x00000065,0x00080005, + 0x000000df,0x52647053,0x63756465,0x616f4c65,0x76283464,0x753b3275,0x00003b31,0x00040005, + 0x000000dd,0x65736162,0x00000000,0x00040005,0x000000de,0x63696c73,0x00000065,0x000e0005, + 0x000000e6,0x52647053,0x63756465,0x616f4c65,0x756f5364,0x49656372,0x6567616d,0x75762834, + 0x75763b32,0x75763b32,0x75763b32,0x31753b32,0x0000003b,0x00030005,0x000000e1,0x00003069, + 0x00030005,0x000000e2,0x00003169,0x00030005,0x000000e3,0x00003269,0x00030005,0x000000e4, + 0x00003369,0x00040005,0x000000e5,0x63696c73,0x00000065,0x000b0005,0x000000ea,0x52647053, + 0x63756465,0x616f4c65,0x756f5364,0x49656372,0x6567616d,0x32757628,0x3b31753b,0x00000000, + 0x00040005,0x000000e8,0x65736162,0x00000000,0x00040005,0x000000e9,0x63696c73,0x00000065, + 0x000e0005,0x000000f3,0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x5f305f73,0x444c5f31, + 0x31752853,0x3b31753b,0x3b327576,0x753b3175,0x31753b31,0x0000003b,0x00030005,0x000000ed, + 0x00000078,0x00030005,0x000000ee,0x00000079,0x00050005,0x000000ef,0x6b726f77,0x756f7247, + 0x00444970,0x00080005,0x000000f0,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e, + 0x00000000,0x00030005,0x000000f1,0x0070696d,0x00040005,0x000000f2,0x63696c73,0x00000065, + 0x000d0005,0x000000fb,0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x5f305f73,0x31752831, + 0x3b31753b,0x3b327576,0x753b3175,0x31753b31,0x0000003b,0x00030005,0x000000f5,0x00000078, + 0x00030005,0x000000f6,0x00000079,0x00050005,0x000000f7,0x6b726f77,0x756f7247,0x00444970, + 0x00080005,0x000000f8,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000, + 0x00030005,0x000000f9,0x0070696d,0x00040005,0x000000fa,0x63696c73,0x00000065,0x000c0005, + 0x00000103,0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x7528325f,0x31753b31,0x3275763b, + 0x3b31753b,0x753b3175,0x00003b31,0x00030005,0x000000fd,0x00000078,0x00030005,0x000000fe, + 0x00000079,0x00050005,0x000000ff,0x6b726f77,0x756f7247,0x00444970,0x00080005,0x00000100, + 0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00030005,0x00000101, + 0x0070696d,0x00040005,0x00000102,0x63696c73,0x00000065,0x000c0005,0x0000010b,0x44647053, + 0x736e776f,0x6c706d61,0x70694d65,0x7528335f,0x31753b31,0x3275763b,0x3b31753b,0x753b3175, + 0x00003b31,0x00030005,0x00000105,0x00000078,0x00030005,0x00000106,0x00000079,0x00050005, + 0x00000107,0x6b726f77,0x756f7247,0x00444970,0x00080005,0x00000108,0x61636f6c,0x766e496c, + 0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00030005,0x00000109,0x0070696d,0x00040005, + 0x0000010a,0x63696c73,0x00000065,0x000c0005,0x00000113,0x44647053,0x736e776f,0x6c706d61, + 0x70694d65,0x7528345f,0x31753b31,0x3275763b,0x3b31753b,0x753b3175,0x00003b31,0x00030005, + 0x0000010d,0x00000078,0x00030005,0x0000010e,0x00000079,0x00050005,0x0000010f,0x6b726f77, + 0x756f7247,0x00444970,0x00080005,0x00000110,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69, + 0x7865646e,0x00000000,0x00030005,0x00000111,0x0070696d,0x00040005,0x00000112,0x63696c73, + 0x00000065,0x000b0005,0x0000011a,0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x7628355f, + 0x753b3275,0x31753b31,0x3b31753b,0x00000000,0x00050005,0x00000116,0x6b726f77,0x756f7247, + 0x00444970,0x00080005,0x00000117,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e, + 0x00000000,0x00030005,0x00000118,0x0070696d,0x00040005,0x00000119,0x63696c73,0x00000065, + 0x000b0005,0x00000121,0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x5f365f73,0x31752837, + 0x3b31753b,0x753b3175,0x00003b31,0x00030005,0x0000011d,0x00000078,0x00030005,0x0000011e, + 0x00000079,0x00040005,0x0000011f,0x7370696d,0x00000000,0x00040005,0x00000120,0x63696c73, + 0x00000065,0x000e0005,0x0000012b,0x44647053,0x736e776f,0x6c706d61,0x78654e65,0x756f4674, + 0x31752872,0x3b31753b,0x3b327576,0x753b3175,0x31753b31,0x3b31753b,0x00000000,0x00030005, + 0x00000124,0x00000078,0x00030005,0x00000125,0x00000079,0x00050005,0x00000126,0x6b726f77, + 0x756f7247,0x00444970,0x00080005,0x00000127,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69, + 0x7865646e,0x00000000,0x00040005,0x00000128,0x65736162,0x0070694d,0x00040005,0x00000129, + 0x7370696d,0x00000000,0x00040005,0x0000012a,0x63696c73,0x00000065,0x000a0005,0x00000133, + 0x44647053,0x736e776f,0x6c706d61,0x75762865,0x31753b32,0x3b31753b,0x753b3175,0x00003b31, + 0x00050005,0x0000012e,0x6b726f77,0x756f7247,0x00444970,0x00080005,0x0000012f,0x61636f6c, + 0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00040005,0x00000130,0x7370696d, + 0x00000000,0x00060005,0x00000131,0x576d756e,0x476b726f,0x70756f72,0x00000073,0x00040005, + 0x00000132,0x63696c73,0x00000065,0x000b0005,0x0000013c,0x44647053,0x736e776f,0x6c706d61, + 0x75762865,0x31753b32,0x3b31753b,0x753b3175,0x75763b31,0x00003b32,0x00050005,0x00000136, + 0x6b726f77,0x756f7247,0x00444970,0x00080005,0x00000137,0x61636f6c,0x766e496c,0x7461636f, + 0x496e6f69,0x7865646e,0x00000000,0x00040005,0x00000138,0x7370696d,0x00000000,0x00060005, + 0x00000139,0x576d756e,0x476b726f,0x70756f72,0x00000073,0x00040005,0x0000013a,0x63696c73, + 0x00000065,0x00060005,0x0000013b,0x6b726f77,0x756f7247,0x66664f70,0x00746573,0x000b0005, + 0x00000143,0x706d6f43,0x53657475,0x69646168,0x6843676e,0x65676e61,0x61727950,0x2864696d, + 0x3b337576,0x003b3175,0x00050005,0x00000141,0x6b726f57,0x756f7247,0x00644970,0x00070005, + 0x00000142,0x61636f4c,0x7268546c,0x49646165,0x7865646e,0x00000000,0x00040005,0x00000170, + 0x61726170,0x0000006d,0x00040005,0x00000172,0x61726170,0x0000006d,0x00040005,0x00000173, + 0x61726170,0x0000006d,0x00040005,0x00000176,0x61726170,0x0000006d,0x00040005,0x00000177, + 0x61726170,0x0000006d,0x00040005,0x00000179,0x61726170,0x0000006d,0x00040005,0x0000017b, + 0x61726170,0x0000006d,0x00040005,0x0000017d,0x61726170,0x0000006d,0x00040005,0x0000017e, + 0x61726170,0x0000006d,0x00040005,0x00000180,0x61726170,0x0000006d,0x00040005,0x00000182, + 0x61726170,0x0000006d,0x00040005,0x00000183,0x61726170,0x0000006d,0x00040005,0x00000185, + 0x61726170,0x0000006d,0x00040005,0x00000186,0x61726170,0x0000006d,0x00040005,0x00000187, + 0x61726170,0x0000006d,0x00070005,0x0000018c,0x53466263,0x50553352,0x4c414353,0x745f5245, + 0x00000000,0x00060006,0x0000018c,0x00000000,0x6e655269,0x53726564,0x00657a69,0x000a0006, + 0x0000018c,0x00000001,0x65725069,0x756f6976,0x61724673,0x6552656d,0x7265646e,0x657a6953, + 0x00000000,0x00070006,0x0000018c,0x00000002,0x73705569,0x656c6163,0x657a6953,0x00000000, + 0x000a0006,0x0000018c,0x00000003,0x65725069,0x756f6976,0x61724673,0x7055656d,0x6c616373, + 0x7a695365,0x00000065,0x00070006,0x0000018c,0x00000004,0x78614d69,0x646e6552,0x69537265, + 0x0000657a,0x00070006,0x0000018c,0x00000005,0x78614d69,0x63737055,0x53656c61,0x00657a69, + 0x00080006,0x0000018c,0x00000006,0x76654466,0x54656369,0x6569566f,0x70654477,0x00006874, + 0x00050006,0x0000018c,0x00000007,0x74694a66,0x00726574,0x00090006,0x0000018c,0x00000008, + 0x65725066,0x756f6976,0x61724673,0x694a656d,0x72657474,0x00000000,0x00080006,0x0000018c, + 0x00000009,0x746f4d66,0x566e6f69,0x6f746365,0x61635372,0x0000656c,0x00080006,0x0000018c, + 0x0000000a,0x776f4466,0x6163736e,0x6146656c,0x726f7463,0x00000000,0x000b0006,0x0000018c, + 0x0000000b,0x746f4d66,0x566e6f69,0x6f746365,0x74694a72,0x43726574,0x65636e61,0x74616c6c, + 0x006e6f69,0x00060006,0x0000018c,0x0000000c,0x6e615466,0x666c6148,0x00564f46,0x00090006, + 0x0000018c,0x0000000d,0x74694a66,0x53726574,0x65757165,0x4c65636e,0x74676e65,0x00000068, + 0x00060006,0x0000018c,0x0000000e,0x6c654466,0x69546174,0x0000656d,0x00080006,0x0000018c, + 0x0000000f,0x6c654466,0x72506174,0x70784565,0x7275736f,0x00000065,0x000a0006,0x0000018c, + 0x00000010,0x65695666,0x61705377,0x6f546563,0x6574654d,0x61467372,0x726f7463,0x00000000, + 0x00060006,0x0000018c,0x00000011,0x61724666,0x6e49656d,0x00786564,0x00070006,0x0000018c, + 0x00000012,0x6c655666,0x7469636f,0x63614679,0x00726f74,0x00080006,0x0000018c,0x00000013, + 0x61655266,0x76697463,0x73656e65,0x61635373,0x0000656c,0x00080006,0x0000018c,0x00000014, + 0x61685366,0x676e6964,0x6e616843,0x63536567,0x00656c61,0x000a0006,0x0000018c,0x00000015, + 0x63634166,0x6c756d75,0x6f697461,0x6464416e,0x65506465,0x61724672,0x0000656d,0x000b0006, + 0x0000018c,0x00000016,0x6e694d66,0x6f736944,0x756c6363,0x6e6f6973,0x75636341,0x616c756d, + 0x6e6f6974,0x00000000,0x00060005,0x0000018e,0x53466263,0x70553352,0x6c616373,0x00007265, + 0x00040005,0x000001aa,0x50536263,0x00745f44,0x00050006,0x000001aa,0x00000000,0x7370696d, + 0x00000000,0x00070006,0x000001aa,0x00000001,0x576d756e,0x476b726f,0x70756f72,0x00000073, + 0x00070006,0x000001aa,0x00000002,0x6b726f77,0x756f7247,0x66664f70,0x00746573,0x00060006, + 0x000001aa,0x00000003,0x646e6572,0x69537265,0x0000657a,0x00040005,0x000001ac,0x50536263, + 0x00000044,0x00060005,0x000001be,0x75635f72,0x6e657272,0x756c5f74,0x0000616d,0x00060005, + 0x000001c6,0x72705f72,0x6f697665,0x6c5f7375,0x00616d75,0x00090005,0x000001cd,0x69645f72, + 0x6574616c,0x6f6d5f64,0x6e6f6974,0x6365765f,0x73726f74,0x00000000,0x00050005,0x000001d4, + 0x6f707865,0x65727573,0x00000000,0x00070005,0x000001d5,0x6e695f72,0x5f747570,0x6f707865, + 0x65727573,0x00000000,0x00050005,0x000001e9,0x735f7772,0x6d5f6470,0x00307069,0x00050005, + 0x000001f3,0x735f7772,0x6d5f6470,0x00317069,0x00050005,0x000001fd,0x735f7772,0x6d5f6470, + 0x00327069,0x00050005,0x00000207,0x735f7772,0x6d5f6470,0x00337069,0x00050005,0x00000212, + 0x735f7772,0x6d5f6470,0x00347069,0x00050005,0x0000021c,0x735f7772,0x6d5f6470,0x00357069, + 0x00080005,0x00000263,0x735f7772,0x675f6470,0x61626f6c,0x74615f6c,0x63696d6f,0x00000000, + 0x00030005,0x0000026a,0x0000006d,0x00040005,0x0000026b,0x61726170,0x0000006d,0x00040005, + 0x0000026c,0x61726170,0x0000006d,0x00040005,0x00000273,0x61726170,0x0000006d,0x00040005, + 0x00000274,0x61726170,0x0000006d,0x00040005,0x00000293,0x75736572,0x0000746c,0x00040005, + 0x0000029a,0x61726170,0x0000006d,0x00040005,0x0000029d,0x61726170,0x0000006d,0x00040005, + 0x0000029f,0x61726170,0x0000006d,0x00040005,0x000002a0,0x61726170,0x0000006d,0x00040005, + 0x000002a6,0x61726170,0x0000006d,0x00040005,0x000002a9,0x61726170,0x0000006d,0x00040005, + 0x000002ab,0x61726170,0x0000006d,0x00040005,0x000002ac,0x61726170,0x0000006d,0x00050005, + 0x000002b3,0x43647073,0x746e756f,0x00007265,0x00040005,0x000002b4,0x61726170,0x0000006d, + 0x00040005,0x000002bc,0x706d5466,0x00000000,0x00040005,0x000002be,0x61726170,0x0000006d, + 0x00040005,0x000002c1,0x61726170,0x0000006d,0x00040005,0x000002c5,0x61726170,0x0000006d, + 0x00040005,0x000002c8,0x61726170,0x0000006d,0x00040005,0x000002cf,0x706d5466,0x00000000, + 0x00040005,0x000002d1,0x61726170,0x0000006d,0x00040005,0x000002d4,0x61726170,0x0000006d, + 0x00040005,0x000002d8,0x61726170,0x0000006d,0x00040005,0x000002db,0x61726170,0x0000006d, + 0x00040005,0x000002e2,0x706d5466,0x00000000,0x00040005,0x000002e3,0x61726170,0x0000006d, + 0x00040005,0x000002e6,0x61726170,0x0000006d,0x00040005,0x000002ea,0x61726170,0x0000006d, + 0x00040005,0x000002ed,0x61726170,0x0000006d,0x00040005,0x000002f4,0x706d5466,0x00000000, + 0x00040005,0x000002f5,0x61726170,0x0000006d,0x00040005,0x000002f8,0x61726170,0x0000006d, + 0x00040005,0x000002fc,0x61726170,0x0000006d,0x00040005,0x000002ff,0x61726170,0x0000006d, + 0x00040005,0x00000306,0x706d5466,0x00000000,0x00040005,0x00000307,0x61726170,0x0000006d, + 0x00040005,0x0000030a,0x61726170,0x0000006d,0x00040005,0x0000030e,0x61726170,0x0000006d, + 0x00040005,0x00000311,0x61726170,0x0000006d,0x00040005,0x00000318,0x706d5466,0x00000000, + 0x00040005,0x00000319,0x61726170,0x0000006d,0x00040005,0x0000031c,0x61726170,0x0000006d, + 0x00040005,0x00000320,0x61726170,0x0000006d,0x00040005,0x00000323,0x61726170,0x0000006d, + 0x00040005,0x0000032a,0x706d5466,0x00000000,0x00040005,0x0000032b,0x61726170,0x0000006d, + 0x00040005,0x0000032e,0x61726170,0x0000006d,0x00040005,0x00000332,0x61726170,0x0000006d, + 0x00040005,0x00000335,0x61726170,0x0000006d,0x00040005,0x0000033c,0x706d5466,0x00000000, + 0x00040005,0x0000033d,0x61726170,0x0000006d,0x00040005,0x00000340,0x61726170,0x0000006d, + 0x00040005,0x00000344,0x61726170,0x0000006d,0x00040005,0x00000347,0x61726170,0x0000006d, + 0x00040005,0x0000034e,0x706d5466,0x00000000,0x00040005,0x0000034f,0x61726170,0x0000006d, + 0x00040005,0x00000352,0x61726170,0x0000006d,0x00040005,0x00000356,0x61726170,0x0000006d, + 0x00040005,0x00000359,0x61726170,0x0000006d,0x00050005,0x00000360,0x6e694d66,0x66666944, + 0x00000000,0x00030005,0x00000362,0x00000061,0x00030005,0x00000363,0x00000062,0x00040005, + 0x00000364,0x61726170,0x0000006d,0x00040005,0x00000368,0x61726170,0x0000006d,0x00040005, + 0x0000036c,0x78614d66,0x00000000,0x00040005,0x0000036d,0x61726170,0x0000006d,0x00040005, + 0x00000370,0x61726170,0x0000006d,0x00030005,0x00000379,0x00000069,0x00040005,0x00000386, + 0x66694466,0x00000066,0x00050005,0x000003c5,0x4a765566,0x65747469,0x00646572,0x00050005, + 0x000003cc,0x73614269,0x736f5065,0x00000000,0x00060005,0x000003d3,0x6d615369,0x49656c70, + 0x7865646e,0x00000000,0x00050005,0x000003db,0x6d615369,0x50656c70,0x0000736f,0x00040005, + 0x000003e5,0x61726170,0x0000006d,0x00040005,0x000003e7,0x61726170,0x0000006d,0x00050005, + 0x000003e9,0x65646e69,0x6c626178,0x00000065,0x00040005,0x000003ec,0x61726170,0x0000006d, + 0x00040005,0x000003ee,0x74655366,0x00000000,0x00040005,0x000003f0,0x61726170,0x0000006d, + 0x00040005,0x000003f8,0x61726170,0x0000006d,0x00040005,0x000003fb,0x61726170,0x0000006d, + 0x00040005,0x00000400,0x61726170,0x0000006d,0x00040005,0x00000403,0x61726170,0x0000006d, + 0x00050005,0x0000040b,0x4a765566,0x65747469,0x00646572,0x00060005,0x00000412,0x70655266, + 0x656a6f72,0x64657463,0x00007655,0x00040005,0x00000417,0x61746164,0x00000000,0x00040005, + 0x00000418,0x61726170,0x0000006d,0x00050005,0x00000421,0x73614269,0x736f5065,0x00000000, + 0x00060005,0x00000428,0x6d615369,0x49656c70,0x7865646e,0x00000000,0x00050005,0x00000430, + 0x6d615369,0x50656c70,0x0000736f,0x00040005,0x00000433,0x61726170,0x0000006d,0x00040005, + 0x00000435,0x61726170,0x0000006d,0x00050005,0x00000436,0x65646e69,0x6c626178,0x00000065, + 0x00040005,0x00000439,0x61726170,0x0000006d,0x00040005,0x0000043c,0x61726170,0x0000006d, + 0x00040005,0x00000446,0x61726170,0x0000006d,0x00040005,0x00000449,0x61726170,0x0000006d, + 0x00040005,0x0000044e,0x61726170,0x0000006d,0x00040005,0x00000451,0x61726170,0x0000006d, + 0x00050005,0x00000459,0x6e694d66,0x66666944,0x00000000,0x00060005,0x0000045a,0x72754366, + 0x746e6572,0x706d6153,0x0073656c,0x00040005,0x0000045b,0x61726170,0x0000006d,0x00060005, + 0x0000045e,0x76657270,0x73756f69,0x61746144,0x00000000,0x00040005,0x0000045f,0x61726170, + 0x0000006d,0x00040005,0x00000461,0x61726170,0x0000006d,0x00040005,0x00000468,0x61726170, + 0x0000006d,0x00040005,0x0000046a,0x61726170,0x0000006d,0x00040005,0x0000046c,0x61726170, + 0x0000006d,0x00060005,0x00000473,0x53785069,0x6c706d61,0x736f5065,0x00000000,0x00040005, + 0x00000477,0x61726170,0x0000006d,0x00040005,0x00000478,0x61726170,0x0000006d,0x00040005, + 0x00000479,0x61726170,0x0000006d,0x00080005,0x0000047b,0x6c694466,0x64657461,0x69746f4d, + 0x65566e6f,0x726f7463,0x00000000,0x00040005,0x0000047c,0x61726170,0x0000006d,0x00030005, + 0x0000047f,0x00765566,0x00090005,0x00000488,0x61635366,0x4164656c,0x6953646e,0x64656e67, + 0x616d754c,0x66666944,0x00000000,0x00040005,0x00000489,0x61726170,0x0000006d,0x00040005, + 0x0000048b,0x61726170,0x0000006d,0x00040005,0x0000048d,0x61726170,0x0000006d,0x00040005, + 0x00000490,0x74754f66,0x00747570,0x00040005,0x000004a2,0x61726170,0x0000006d,0x00040005, + 0x000004a4,0x61726170,0x0000006d,0x00040005,0x000004ba,0x61726170,0x0000006d,0x00040005, + 0x000004bc,0x61726170,0x0000006d,0x00040005,0x000004bf,0x61726170,0x0000006d,0x00070005, + 0x000004c6,0x49647073,0x7265746e,0x6964656d,0x52657461,0x00000000,0x00070005,0x000004cc, + 0x49647073,0x7265746e,0x6964656d,0x47657461,0x00000000,0x00070005,0x000004d1,0x49647073, + 0x7265746e,0x6964656d,0x42657461,0x00000000,0x00070005,0x000004d6,0x49647073,0x7265746e, + 0x6964656d,0x41657461,0x00000000,0x00040005,0x000004f8,0x61726170,0x0000006d,0x00030005, + 0x00000502,0x00003076,0x00040005,0x00000503,0x61726170,0x0000006d,0x00040005,0x00000506, + 0x61726170,0x0000006d,0x00030005,0x0000050a,0x00003176,0x00040005,0x0000050b,0x61726170, + 0x0000006d,0x00040005,0x0000050e,0x61726170,0x0000006d,0x00030005,0x00000512,0x00003276, + 0x00040005,0x00000513,0x61726170,0x0000006d,0x00040005,0x00000516,0x61726170,0x0000006d, + 0x00030005,0x0000051a,0x00003376,0x00040005,0x0000051b,0x61726170,0x0000006d,0x00040005, + 0x0000051e,0x61726170,0x0000006d,0x00040005,0x00000522,0x61726170,0x0000006d,0x00040005, + 0x00000524,0x61726170,0x0000006d,0x00040005,0x00000526,0x61726170,0x0000006d,0x00040005, + 0x00000528,0x61726170,0x0000006d,0x00030005,0x0000052d,0x00003076,0x00040005,0x00000530, + 0x61726170,0x0000006d,0x00040005,0x00000531,0x61726170,0x0000006d,0x00030005,0x00000534, + 0x00003176,0x00040005,0x00000537,0x61726170,0x0000006d,0x00040005,0x00000538,0x61726170, + 0x0000006d,0x00030005,0x0000053b,0x00003276,0x00040005,0x0000053e,0x61726170,0x0000006d, + 0x00040005,0x0000053f,0x61726170,0x0000006d,0x00030005,0x00000542,0x00003376,0x00040005, + 0x00000545,0x61726170,0x0000006d,0x00040005,0x00000546,0x61726170,0x0000006d,0x00040005, + 0x00000549,0x61726170,0x0000006d,0x00040005,0x0000054b,0x61726170,0x0000006d,0x00040005, + 0x0000054d,0x61726170,0x0000006d,0x00040005,0x0000054f,0x61726170,0x0000006d,0x00040005, + 0x00000560,0x61726170,0x0000006d,0x00040005,0x00000561,0x61726170,0x0000006d,0x00040005, + 0x00000562,0x61726170,0x0000006d,0x00040005,0x00000563,0x61726170,0x0000006d,0x00040005, + 0x00000564,0x61726170,0x0000006d,0x00030005,0x00000569,0x00003076,0x00040005,0x0000056d, + 0x61726170,0x0000006d,0x00040005,0x0000056e,0x61726170,0x0000006d,0x00030005,0x00000571, + 0x00003176,0x00040005,0x00000575,0x61726170,0x0000006d,0x00040005,0x00000576,0x61726170, + 0x0000006d,0x00030005,0x00000579,0x00003276,0x00040005,0x0000057d,0x61726170,0x0000006d, + 0x00040005,0x0000057e,0x61726170,0x0000006d,0x00030005,0x00000581,0x00003376,0x00040005, + 0x00000585,0x61726170,0x0000006d,0x00040005,0x00000586,0x61726170,0x0000006d,0x00040005, + 0x00000589,0x61726170,0x0000006d,0x00040005,0x0000058b,0x61726170,0x0000006d,0x00040005, + 0x0000058d,0x61726170,0x0000006d,0x00040005,0x0000058f,0x61726170,0x0000006d,0x00040005, + 0x0000059c,0x61726170,0x0000006d,0x00040005,0x0000059d,0x61726170,0x0000006d,0x00040005, + 0x0000059e,0x61726170,0x0000006d,0x00040005,0x0000059f,0x61726170,0x0000006d,0x00040005, + 0x000005a0,0x61726170,0x0000006d,0x00030005,0x000005a5,0x00786574,0x00030005,0x000005b3, + 0x00786970,0x00030005,0x000005c1,0x00000076,0x00040005,0x000005c4,0x61726170,0x0000006d, + 0x00040005,0x000005c5,0x61726170,0x0000006d,0x00040005,0x000005c9,0x61726170,0x0000006d, + 0x00040005,0x000005cb,0x61726170,0x0000006d,0x00040005,0x000005ce,0x61726170,0x0000006d, + 0x00040005,0x000005cf,0x61726170,0x0000006d,0x00040005,0x000005ec,0x61726170,0x0000006d, + 0x00040005,0x000005ed,0x61726170,0x0000006d,0x00040005,0x000005f1,0x61726170,0x0000006d, + 0x00040005,0x000005f3,0x61726170,0x0000006d,0x00040005,0x000005f6,0x61726170,0x0000006d, + 0x00040005,0x000005f7,0x61726170,0x0000006d,0x00040005,0x00000614,0x61726170,0x0000006d, + 0x00040005,0x00000615,0x61726170,0x0000006d,0x00040005,0x00000619,0x61726170,0x0000006d, + 0x00040005,0x0000061b,0x61726170,0x0000006d,0x00040005,0x0000061e,0x61726170,0x0000006d, + 0x00040005,0x0000061f,0x61726170,0x0000006d,0x00040005,0x0000063e,0x61726170,0x0000006d, + 0x00040005,0x0000063f,0x61726170,0x0000006d,0x00040005,0x00000643,0x61726170,0x0000006d, + 0x00040005,0x00000645,0x61726170,0x0000006d,0x00040005,0x00000648,0x61726170,0x0000006d, + 0x00040005,0x00000649,0x61726170,0x0000006d,0x00030005,0x00000651,0x00000069,0x00040005, + 0x0000065a,0x61726170,0x0000006d,0x00040005,0x0000065c,0x61726170,0x0000006d,0x00040005, + 0x0000065e,0x61726170,0x0000006d,0x00040005,0x00000684,0x61726170,0x0000006d,0x00040005, + 0x00000685,0x61726170,0x0000006d,0x00040005,0x00000686,0x61726170,0x0000006d,0x00040005, + 0x00000687,0x61726170,0x0000006d,0x00040005,0x0000069e,0x61726170,0x0000006d,0x00040005, + 0x0000069f,0x61726170,0x0000006d,0x00040005,0x000006a2,0x61726170,0x0000006d,0x00040005, + 0x000006a3,0x61726170,0x0000006d,0x00040005,0x000006b1,0x61726170,0x0000006d,0x00040005, + 0x000006b2,0x61726170,0x0000006d,0x00040005,0x000006b3,0x61726170,0x0000006d,0x00040005, + 0x000006bb,0x61726170,0x0000006d,0x00040005,0x000006bc,0x61726170,0x0000006d,0x00040005, + 0x000006bd,0x61726170,0x0000006d,0x00040005,0x000006c5,0x61726170,0x0000006d,0x00040005, + 0x000006c6,0x61726170,0x0000006d,0x00040005,0x000006c7,0x61726170,0x0000006d,0x00040005, + 0x000006cf,0x61726170,0x0000006d,0x00040005,0x000006d0,0x61726170,0x0000006d,0x00040005, + 0x000006d1,0x61726170,0x0000006d,0x00040005,0x000006d5,0x61726170,0x0000006d,0x00040005, + 0x000006d7,0x61726170,0x0000006d,0x00040005,0x000006d9,0x61726170,0x0000006d,0x00040005, + 0x000006db,0x61726170,0x0000006d,0x00040005,0x000006dd,0x61726170,0x0000006d,0x00040005, + 0x000006df,0x61726170,0x0000006d,0x00030005,0x000006e6,0x00000076,0x00040005,0x00000703, + 0x61726170,0x0000006d,0x00040005,0x00000704,0x61726170,0x0000006d,0x00040005,0x00000705, + 0x61726170,0x0000006d,0x00040005,0x00000706,0x61726170,0x0000006d,0x00040005,0x00000712, + 0x61726170,0x0000006d,0x00040005,0x00000713,0x61726170,0x0000006d,0x00040005,0x00000715, + 0x61726170,0x0000006d,0x00040005,0x00000717,0x61726170,0x0000006d,0x00040005,0x00000721, + 0x61726170,0x0000006d,0x00040005,0x00000722,0x61726170,0x0000006d,0x00040005,0x00000723, + 0x61726170,0x0000006d,0x00030005,0x0000072a,0x00000076,0x00040005,0x0000074b,0x61726170, + 0x0000006d,0x00040005,0x0000074c,0x61726170,0x0000006d,0x00040005,0x0000074d,0x61726170, + 0x0000006d,0x00040005,0x0000074e,0x61726170,0x0000006d,0x00040005,0x0000075a,0x61726170, + 0x0000006d,0x00040005,0x0000075b,0x61726170,0x0000006d,0x00040005,0x0000075d,0x61726170, + 0x0000006d,0x00040005,0x0000075f,0x61726170,0x0000006d,0x00040005,0x00000768,0x61726170, + 0x0000006d,0x00040005,0x00000769,0x61726170,0x0000006d,0x00040005,0x0000076a,0x61726170, + 0x0000006d,0x00030005,0x00000771,0x00000076,0x00040005,0x0000079e,0x61726170,0x0000006d, + 0x00040005,0x0000079f,0x61726170,0x0000006d,0x00040005,0x000007a0,0x61726170,0x0000006d, + 0x00040005,0x000007a1,0x61726170,0x0000006d,0x00040005,0x000007ad,0x61726170,0x0000006d, + 0x00040005,0x000007ae,0x61726170,0x0000006d,0x00040005,0x000007b0,0x61726170,0x0000006d, + 0x00040005,0x000007b2,0x61726170,0x0000006d,0x00040005,0x000007b9,0x61726170,0x0000006d, + 0x00040005,0x000007ba,0x61726170,0x0000006d,0x00040005,0x000007bb,0x61726170,0x0000006d, + 0x00030005,0x000007c2,0x00000076,0x00040005,0x000007c5,0x61726170,0x0000006d,0x00040005, + 0x000007c6,0x61726170,0x0000006d,0x00040005,0x000007c7,0x61726170,0x0000006d,0x00040005, + 0x000007c8,0x61726170,0x0000006d,0x00040005,0x000007cc,0x61726170,0x0000006d,0x00040005, + 0x000007cd,0x61726170,0x0000006d,0x00040005,0x000007cf,0x61726170,0x0000006d,0x00040005, + 0x000007d1,0x61726170,0x0000006d,0x00030005,0x000007d4,0x00786574,0x00030005,0x000007de, + 0x00786970,0x00030005,0x000007e8,0x00003076,0x00040005,0x000007eb,0x61726170,0x0000006d, + 0x00040005,0x000007ec,0x61726170,0x0000006d,0x00040005,0x000007f0,0x61726170,0x0000006d, + 0x00040005,0x000007f2,0x61726170,0x0000006d,0x00040005,0x000007f4,0x61726170,0x0000006d, + 0x00040005,0x000007f5,0x61726170,0x0000006d,0x00030005,0x0000080a,0x00003176,0x00040005, + 0x0000080d,0x61726170,0x0000006d,0x00040005,0x0000080e,0x61726170,0x0000006d,0x00040005, + 0x00000811,0x61726170,0x0000006d,0x00040005,0x00000813,0x61726170,0x0000006d,0x00040005, + 0x00000815,0x61726170,0x0000006d,0x00040005,0x00000816,0x61726170,0x0000006d,0x00030005, + 0x0000082b,0x00003276,0x00040005,0x0000082e,0x61726170,0x0000006d,0x00040005,0x0000082f, + 0x61726170,0x0000006d,0x00040005,0x00000832,0x61726170,0x0000006d,0x00040005,0x00000834, + 0x61726170,0x0000006d,0x00040005,0x00000836,0x61726170,0x0000006d,0x00040005,0x00000837, + 0x61726170,0x0000006d,0x00030005,0x0000084c,0x00003376,0x00040005,0x0000084f,0x61726170, + 0x0000006d,0x00040005,0x00000850,0x61726170,0x0000006d,0x00040005,0x00000853,0x61726170, + 0x0000006d,0x00040005,0x00000855,0x61726170,0x0000006d,0x00040005,0x00000857,0x61726170, + 0x0000006d,0x00040005,0x00000858,0x61726170,0x0000006d,0x00030005,0x00000861,0x00000076, + 0x00040005,0x00000862,0x61726170,0x0000006d,0x00040005,0x00000864,0x61726170,0x0000006d, + 0x00040005,0x00000866,0x61726170,0x0000006d,0x00040005,0x00000868,0x61726170,0x0000006d, + 0x00040005,0x00000870,0x61726170,0x0000006d,0x00040005,0x00000871,0x61726170,0x0000006d, + 0x00040005,0x00000873,0x61726170,0x0000006d,0x00040005,0x00000874,0x61726170,0x0000006d, + 0x00040005,0x00000877,0x61726170,0x0000006d,0x00040005,0x00000879,0x61726170,0x0000006d, + 0x00040005,0x0000087b,0x61726170,0x0000006d,0x00040005,0x00000885,0x61726170,0x0000006d, + 0x00040005,0x00000887,0x61726170,0x0000006d,0x00040005,0x00000889,0x61726170,0x0000006d, + 0x00040005,0x0000088b,0x61726170,0x0000006d,0x00040005,0x0000088d,0x61726170,0x0000006d, + 0x00040005,0x0000088f,0x61726170,0x0000006d,0x00040005,0x0000089c,0x61726170,0x0000006d, + 0x00040005,0x0000089e,0x61726170,0x0000006d,0x00040005,0x000008a0,0x61726170,0x0000006d, + 0x00040005,0x000008a2,0x61726170,0x0000006d,0x00040005,0x000008a4,0x61726170,0x0000006d, + 0x00040005,0x000008a5,0x61726170,0x0000006d,0x00040005,0x000008b2,0x61726170,0x0000006d, + 0x00040005,0x000008b4,0x61726170,0x0000006d,0x00040005,0x000008b6,0x61726170,0x0000006d, + 0x00040005,0x000008b8,0x61726170,0x0000006d,0x00040005,0x000008ba,0x61726170,0x0000006d, + 0x00040005,0x000008bb,0x61726170,0x0000006d,0x00040005,0x000008c8,0x61726170,0x0000006d, + 0x00040005,0x000008ca,0x61726170,0x0000006d,0x00040005,0x000008cc,0x61726170,0x0000006d, + 0x00040005,0x000008cd,0x61726170,0x0000006d,0x00040005,0x000008d0,0x5f627573,0x00007978, + 0x00040005,0x000008d3,0x61726170,0x0000006d,0x00030005,0x000008d5,0x00000078,0x00030005, + 0x000008de,0x00000079,0x00040005,0x000008e5,0x61726170,0x0000006d,0x00040005,0x000008e7, + 0x61726170,0x0000006d,0x00040005,0x000008e9,0x61726170,0x0000006d,0x00040005,0x000008eb, + 0x61726170,0x0000006d,0x00040005,0x000008ed,0x61726170,0x0000006d,0x00040005,0x000008ef, + 0x61726170,0x0000006d,0x00040005,0x000008f2,0x61726170,0x0000006d,0x00040005,0x000008f4, + 0x61726170,0x0000006d,0x00040005,0x000008f6,0x61726170,0x0000006d,0x00040005,0x000008f8, + 0x61726170,0x0000006d,0x00040005,0x000008fa,0x61726170,0x0000006d,0x00040005,0x000008fb, + 0x61726170,0x0000006d,0x00040005,0x000008fd,0x61726170,0x0000006d,0x00040005,0x00000905, + 0x61726170,0x0000006d,0x00040005,0x00000907,0x61726170,0x0000006d,0x00040005,0x00000909, + 0x61726170,0x0000006d,0x00040005,0x0000090f,0x61726170,0x0000006d,0x00040005,0x00000912, + 0x61726170,0x0000006d,0x00040005,0x00000914,0x61726170,0x0000006d,0x00040005,0x00000916, + 0x61726170,0x0000006d,0x00040005,0x00000918,0x61726170,0x0000006d,0x00040005,0x0000091b, + 0x61726170,0x0000006d,0x00040005,0x0000091d,0x61726170,0x0000006d,0x00040005,0x0000091f, + 0x61726170,0x0000006d,0x00040005,0x00000920,0x61726170,0x0000006d,0x00040005,0x00000922, + 0x61726170,0x0000006d,0x00040005,0x00000923,0x61726170,0x0000006d,0x00040005,0x00000925, + 0x61726170,0x0000006d,0x00040005,0x0000092b,0x61726170,0x0000006d,0x00040005,0x0000092c, + 0x61726170,0x0000006d,0x00040005,0x0000092e,0x61726170,0x0000006d,0x00040005,0x00000930, + 0x61726170,0x0000006d,0x00040005,0x00000932,0x61726170,0x0000006d,0x00040005,0x0000093d, + 0x61726170,0x0000006d,0x00040005,0x0000093e,0x61726170,0x0000006d,0x00040005,0x0000093f, + 0x61726170,0x0000006d,0x00040005,0x00000940,0x61726170,0x0000006d,0x00040005,0x00000941, + 0x61726170,0x0000006d,0x00040005,0x00000942,0x61726170,0x0000006d,0x00060005,0x00000945, + 0x575f6c67,0x476b726f,0x70756f72,0x00004449,0x00080005,0x00000947,0x4c5f6c67,0x6c61636f, + 0x6f766e49,0x69746163,0x6e496e6f,0x00786564,0x00040005,0x00000948,0x61726170,0x0000006d, + 0x00040005,0x0000094a,0x61726170,0x0000006d,0x00060005,0x00000950,0x6f505f73,0x43746e69, + 0x706d616c,0x00000000,0x00060005,0x00000951,0x694c5f73,0x7261656e,0x6d616c43,0x00000070, + 0x00030047,0x0000018c,0x00000002,0x00050048,0x0000018c,0x00000000,0x00000023,0x00000000, + 0x00050048,0x0000018c,0x00000001,0x00000023,0x00000008,0x00050048,0x0000018c,0x00000002, + 0x00000023,0x00000010,0x00050048,0x0000018c,0x00000003,0x00000023,0x00000018,0x00050048, + 0x0000018c,0x00000004,0x00000023,0x00000020,0x00050048,0x0000018c,0x00000005,0x00000023, + 0x00000028,0x00050048,0x0000018c,0x00000006,0x00000023,0x00000030,0x00050048,0x0000018c, + 0x00000007,0x00000023,0x00000040,0x00050048,0x0000018c,0x00000008,0x00000023,0x00000048, + 0x00050048,0x0000018c,0x00000009,0x00000023,0x00000050,0x00050048,0x0000018c,0x0000000a, + 0x00000023,0x00000058,0x00050048,0x0000018c,0x0000000b,0x00000023,0x00000060,0x00050048, + 0x0000018c,0x0000000c,0x00000023,0x00000068,0x00050048,0x0000018c,0x0000000d,0x00000023, + 0x0000006c,0x00050048,0x0000018c,0x0000000e,0x00000023,0x00000070,0x00050048,0x0000018c, + 0x0000000f,0x00000023,0x00000074,0x00050048,0x0000018c,0x00000010,0x00000023,0x00000078, + 0x00050048,0x0000018c,0x00000011,0x00000023,0x0000007c,0x00050048,0x0000018c,0x00000012, + 0x00000023,0x00000080,0x00050048,0x0000018c,0x00000013,0x00000023,0x00000084,0x00050048, + 0x0000018c,0x00000014,0x00000023,0x00000088,0x00050048,0x0000018c,0x00000015,0x00000023, + 0x0000008c,0x00050048,0x0000018c,0x00000016,0x00000023,0x00000090,0x00040047,0x0000018e, + 0x00000021,0x0000000b,0x00040047,0x0000018e,0x00000022,0x00000000,0x00030047,0x000001aa, + 0x00000002,0x00050048,0x000001aa,0x00000000,0x00000023,0x00000000,0x00050048,0x000001aa, + 0x00000001,0x00000023,0x00000004,0x00050048,0x000001aa,0x00000002,0x00000023,0x00000008, + 0x00050048,0x000001aa,0x00000003,0x00000023,0x00000010,0x00040047,0x000001ac,0x00000021, + 0x0000000c,0x00040047,0x000001ac,0x00000022,0x00000000,0x00040047,0x000001be,0x00000021, + 0x00000000,0x00040047,0x000001be,0x00000022,0x00000000,0x00040047,0x000001c6,0x00000021, + 0x00000001,0x00040047,0x000001c6,0x00000022,0x00000000,0x00040047,0x000001cd,0x00000021, + 0x00000002,0x00040047,0x000001cd,0x00000022,0x00000000,0x00040047,0x000001d5,0x00000021, + 0x00000003,0x00040047,0x000001d5,0x00000022,0x00000000,0x00040047,0x000001e9,0x00000021, + 0x00000005,0x00040047,0x000001e9,0x00000022,0x00000000,0x00040047,0x000001f3,0x00000021, + 0x00000006,0x00040047,0x000001f3,0x00000022,0x00000000,0x00040047,0x000001fd,0x00000021, + 0x00000007,0x00040047,0x000001fd,0x00000022,0x00000000,0x00040047,0x00000207,0x00000021, + 0x00000008,0x00040047,0x00000207,0x00000022,0x00000000,0x00040047,0x00000212,0x00000021, + 0x00000009,0x00040047,0x00000212,0x00000022,0x00000000,0x00030047,0x0000021c,0x00000017, + 0x00040047,0x0000021c,0x00000021,0x0000000a,0x00040047,0x0000021c,0x00000022,0x00000000, + 0x00030047,0x00000263,0x00000017,0x00040047,0x00000263,0x00000021,0x00000004,0x00040047, + 0x00000263,0x00000022,0x00000000,0x00040047,0x00000945,0x0000000b,0x0000001a,0x00040047, + 0x00000947,0x0000000b,0x0000001d,0x00040047,0x00000950,0x00000021,0x000003e8,0x00040047, + 0x00000950,0x00000022,0x00000000,0x00040047,0x00000951,0x00000021,0x000003e9,0x00040047, + 0x00000951,0x00000022,0x00000000,0x00040047,0x0000095a,0x0000000b,0x00000019,0x00020013, + 0x00000002,0x00030021,0x00000003,0x00000002,0x00040015,0x00000006,0x00000020,0x00000000, + 0x00040020,0x00000007,0x00000007,0x00000006,0x00060021,0x00000008,0x00000006,0x00000007, + 0x00000007,0x00000007,0x00030016,0x00000013,0x00000020,0x00040020,0x00000014,0x00000007, + 0x00000013,0x00050021,0x00000015,0x00000013,0x00000014,0x00000014,0x00040015,0x0000001a, + 0x00000020,0x00000001,0x00040020,0x0000001b,0x00000007,0x0000001a,0x00050021,0x0000001c, + 0x0000001a,0x0000001b,0x0000001b,0x00040017,0x0000002d,0x00000006,0x00000002,0x00040021, + 0x0000002e,0x0000002d,0x00000007,0x00040017,0x00000032,0x0000001a,0x00000002,0x00030021, + 0x00000033,0x00000032,0x00040017,0x00000038,0x00000013,0x00000002,0x00030021,0x00000039, + 0x00000038,0x00030021,0x0000003e,0x00000013,0x00030021,0x00000041,0x00000006,0x00030021, + 0x00000046,0x0000002d,0x00040020,0x00000049,0x00000007,0x00000032,0x00040021,0x0000004a, + 0x00000013,0x00000049,0x00040021,0x00000051,0x00000038,0x00000049,0x00050021,0x00000057, + 0x00000038,0x00000049,0x00000007,0x00040020,0x0000005c,0x00000007,0x00000038,0x00060021, + 0x0000005d,0x00000002,0x00000049,0x0000005c,0x00000007,0x00040021,0x00000063,0x00000002, + 0x00000007,0x00050021,0x00000069,0x00000013,0x00000013,0x00000013,0x00020014,0x0000006e, + 0x00040021,0x0000006f,0x0000006e,0x0000005c,0x00060021,0x00000073,0x00000032,0x00000049, + 0x00000049,0x00000049,0x0004002b,0x00000006,0x00000081,0x00000005,0x0004001c,0x00000082, + 0x00000013,0x00000081,0x0003001e,0x00000083,0x00000082,0x00040020,0x00000084,0x00000007, + 0x00000083,0x00040021,0x00000085,0x00000002,0x00000084,0x00060021,0x00000089,0x00000013, + 0x00000049,0x00000084,0x00000084,0x00040021,0x0000008f,0x00000083,0x0000005c,0x0004001e, + 0x00000093,0x00000083,0x0000006e,0x00050021,0x00000094,0x00000093,0x0000005c,0x0000005c, + 0x00060021,0x00000099,0x00000013,0x00000049,0x0000005c,0x0000005c,0x00040017,0x0000009f, + 0x00000013,0x00000004,0x00050021,0x000000a0,0x0000009f,0x0000005c,0x00000007,0x00050021, + 0x000000a5,0x0000009f,0x00000049,0x00000007,0x00040020,0x000000aa,0x00000007,0x0000009f, + 0x00070021,0x000000ab,0x0000009f,0x000000aa,0x000000aa,0x000000aa,0x000000aa,0x00070021, + 0x000000b2,0x00000002,0x00000049,0x000000aa,0x00000007,0x00000007,0x00050021,0x000000b9, + 0x0000009f,0x00000007,0x00000007,0x00060021,0x000000be,0x00000002,0x00000007,0x00000007, + 0x000000aa,0x00060021,0x000000c6,0x0000006e,0x00000007,0x00000007,0x00000007,0x00040020, + 0x000000cc,0x00000007,0x0000002d,0x00070021,0x000000cd,0x0000009f,0x000000cc,0x000000cc, + 0x000000cc,0x000000cc,0x00080021,0x000000d4,0x0000009f,0x000000cc,0x000000cc,0x000000cc, + 0x000000cc,0x00000007,0x00050021,0x000000dc,0x0000009f,0x000000cc,0x00000007,0x00090021, + 0x000000ec,0x00000002,0x00000007,0x00000007,0x000000cc,0x00000007,0x00000007,0x00000007, + 0x00070021,0x00000115,0x00000002,0x000000cc,0x00000007,0x00000007,0x00000007,0x00070021, + 0x0000011c,0x00000002,0x00000007,0x00000007,0x00000007,0x00000007,0x000a0021,0x00000123, + 0x00000002,0x00000007,0x00000007,0x000000cc,0x00000007,0x00000007,0x00000007,0x00000007, + 0x00080021,0x0000012d,0x00000002,0x000000cc,0x00000007,0x00000007,0x00000007,0x00000007, + 0x00090021,0x00000135,0x00000002,0x000000cc,0x00000007,0x00000007,0x00000007,0x00000007, + 0x000000cc,0x00040017,0x0000013e,0x00000006,0x00000003,0x00040020,0x0000013f,0x00000007, + 0x0000013e,0x00050021,0x00000140,0x00000002,0x0000013f,0x00000007,0x0004002b,0x0000001a, + 0x0000014f,0x00000000,0x0004002b,0x00000006,0x0000016e,0x00000002,0x0004002b,0x00000006, + 0x0000016f,0x00000003,0x0004002b,0x00000006,0x00000175,0x00000001,0x0019001e,0x0000018c, + 0x00000032,0x00000032,0x00000032,0x00000032,0x00000032,0x00000032,0x0000009f,0x00000038, + 0x00000038,0x00000038,0x00000038,0x00000038,0x00000013,0x00000013,0x00000013,0x00000013, + 0x00000013,0x00000013,0x00000013,0x00000013,0x00000013,0x00000013,0x00000013,0x00040020, + 0x0000018d,0x00000002,0x0000018c,0x0004003b,0x0000018d,0x0000018e,0x00000002,0x00040020, + 0x0000018f,0x00000002,0x00000032,0x0004002b,0x0000001a,0x00000194,0x00000001,0x0004002b, + 0x0000001a,0x00000199,0x00000007,0x00040020,0x0000019a,0x00000002,0x00000038,0x0004002b, + 0x0000001a,0x0000019f,0x00000008,0x0004002b,0x0000001a,0x000001a4,0x0000000f,0x00040020, + 0x000001a5,0x00000002,0x00000013,0x0006001e,0x000001aa,0x00000006,0x00000006,0x0000002d, + 0x0000002d,0x00040020,0x000001ab,0x00000002,0x000001aa,0x0004003b,0x000001ab,0x000001ac, + 0x00000002,0x00040020,0x000001ad,0x00000002,0x00000006,0x0004002b,0x0000001a,0x000001b6, + 0x00000002,0x00040020,0x000001b7,0x00000002,0x0000002d,0x00090019,0x000001bc,0x00000013, + 0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x00040020,0x000001bd, + 0x00000000,0x000001bc,0x0004003b,0x000001bd,0x000001be,0x00000000,0x0004002b,0x00000006, + 0x000001c2,0x00000000,0x0004003b,0x000001bd,0x000001c6,0x00000000,0x0004003b,0x000001bd, + 0x000001cd,0x00000000,0x0004003b,0x000001bd,0x000001d5,0x00000000,0x0005002c,0x00000032, + 0x000001d7,0x0000014f,0x0000014f,0x0004002b,0x00000013,0x000001db,0x00000000,0x0004002b, + 0x00000013,0x000001df,0x3f800000,0x00090019,0x000001e7,0x00000013,0x00000001,0x00000000, + 0x00000000,0x00000000,0x00000002,0x00000007,0x00040020,0x000001e8,0x00000000,0x000001e7, + 0x0004003b,0x000001e8,0x000001e9,0x00000000,0x0004003b,0x000001e8,0x000001f3,0x00000000, + 0x0004003b,0x000001e8,0x000001fd,0x00000000,0x0004003b,0x000001e8,0x00000207,0x00000000, + 0x0004002b,0x00000006,0x0000020e,0x00000004,0x0004003b,0x000001e8,0x00000212,0x00000000, + 0x0004003b,0x000001e8,0x0000021c,0x00000000,0x0005002c,0x00000038,0x00000222,0x000001db, + 0x000001db,0x00090019,0x00000261,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000, + 0x00000002,0x00000021,0x00040020,0x00000262,0x00000000,0x00000261,0x0004003b,0x00000262, + 0x00000263,0x00000000,0x00040020,0x00000264,0x0000000b,0x00000006,0x00040017,0x00000268, + 0x00000006,0x00000004,0x0007002c,0x00000268,0x00000269,0x000001c2,0x000001c2,0x000001c2, + 0x000001c2,0x00040020,0x000002b2,0x00000004,0x00000006,0x0004003b,0x000002b2,0x000002b3, + 0x00000004,0x0004002b,0x0000001a,0x000002bd,0x00000003,0x0004002b,0x0000001a,0x000002d0, + 0x00000004,0x0004002b,0x00000013,0x00000361,0x477fdf00,0x0004002b,0x00000013,0x00000375, + 0x00800000,0x0004002b,0x0000001a,0x00000380,0x00000005,0x0004002b,0x00000013,0x00000383, + 0x477fe000,0x0004002b,0x00000013,0x00000390,0x387fda40,0x0004001c,0x000003dc,0x00000032, + 0x00000081,0x0004002b,0x0000001a,0x000003dd,0xffffffff,0x0005002c,0x00000032,0x000003de, + 0x000003dd,0x0000014f,0x0005002c,0x00000032,0x000003df,0x00000194,0x0000014f,0x0005002c, + 0x00000032,0x000003e0,0x0000014f,0x000003dd,0x0005002c,0x00000032,0x000003e1,0x0000014f, + 0x00000194,0x0008002c,0x000003dc,0x000003e2,0x000001d7,0x000003de,0x000003df,0x000003e0, + 0x000003e1,0x00040020,0x000003e8,0x00000007,0x000003dc,0x00040020,0x00000416,0x00000007, + 0x00000093,0x00040020,0x0000041b,0x00000007,0x0000006e,0x0004002b,0x00000013,0x00000482, + 0x3f000000,0x0007002c,0x0000009f,0x00000491,0x000001db,0x000001db,0x000001db,0x000001db, + 0x0004002b,0x00000013,0x000004b2,0x3e800000,0x0004002b,0x00000006,0x000004c2,0x00000010, + 0x0004001c,0x000004c3,0x00000013,0x000004c2,0x0004001c,0x000004c4,0x000004c3,0x000004c2, + 0x00040020,0x000004c5,0x00000004,0x000004c4,0x0004003b,0x000004c5,0x000004c6,0x00000004, + 0x00040020,0x000004c9,0x00000004,0x00000013,0x0004003b,0x000004c5,0x000004cc,0x00000004, + 0x0004003b,0x000004c5,0x000004d1,0x00000004,0x0004003b,0x000004c5,0x000004d6,0x00000004, + 0x0004002b,0x00000006,0x000004f2,0x00000d48,0x0004002b,0x00000006,0x000004f3,0x00000108, + 0x0005002c,0x0000002d,0x00000555,0x000001c2,0x000001c2,0x0005002c,0x0000002d,0x00000558, + 0x000001c2,0x00000175,0x0005002c,0x0000002d,0x0000055b,0x00000175,0x000001c2,0x0005002c, + 0x0000002d,0x0000055e,0x00000175,0x00000175,0x0004002b,0x00000006,0x000005a7,0x00000040, + 0x0004002b,0x00000006,0x000005b5,0x00000020,0x0004001c,0x000005bf,0x0000009f,0x0000020e, + 0x00040020,0x000005c0,0x00000007,0x000005bf,0x0004002b,0x00000006,0x00000691,0x00000008, + 0x0005002c,0x0000002d,0x000007c3,0x0000016e,0x000001c2,0x0005002c,0x0000002d,0x000007c4, + 0x0000016f,0x000001c2,0x0004002b,0x00000006,0x000007ef,0x00000006,0x0004002b,0x00000006, + 0x0000085c,0x00000007,0x0004002b,0x0000001a,0x000008d9,0x00000006,0x00040020,0x00000944, + 0x00000001,0x0000013e,0x0004003b,0x00000944,0x00000945,0x00000001,0x00040020,0x00000946, + 0x00000001,0x00000006,0x0004003b,0x00000946,0x00000947,0x00000001,0x0004002b,0x00000013, + 0x0000094d,0x37801002,0x0002001a,0x0000094e,0x00040020,0x0000094f,0x00000000,0x0000094e, + 0x0004003b,0x0000094f,0x00000950,0x00000000,0x0004003b,0x0000094f,0x00000951,0x00000000, + 0x0004002b,0x00000013,0x00000952,0x7f7fffff,0x0004002b,0x00000013,0x00000953,0x3a1fe868, + 0x0004002b,0x00000013,0x00000954,0x3d800000,0x0004002b,0x00000013,0x00000955,0x3d3d70a4, + 0x0004002b,0x00000013,0x00000956,0x3e400000,0x0004002b,0x00000013,0x00000957,0x40000000, + 0x0004002b,0x00000013,0x00000958,0x461c4000,0x0004002b,0x00000006,0x00000959,0x00000100, + 0x0006002c,0x0000013e,0x0000095a,0x00000959,0x00000175,0x00000175,0x00050036,0x00000002, + 0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x0000013f,0x00000948, + 0x00000007,0x0004003b,0x00000007,0x0000094a,0x00000007,0x0004003d,0x0000013e,0x00000949, + 0x00000945,0x0003003e,0x00000948,0x00000949,0x0004003d,0x00000006,0x0000094b,0x00000947, + 0x0003003e,0x0000094a,0x0000094b,0x00060039,0x00000002,0x0000094c,0x00000143,0x00000948, + 0x0000094a,0x000100fd,0x00010038,0x00050036,0x00000006,0x0000000c,0x00000000,0x00000008, + 0x00030037,0x00000007,0x00000009,0x00030037,0x00000007,0x0000000a,0x00030037,0x00000007, + 0x0000000b,0x000200f8,0x0000000d,0x0004003d,0x00000006,0x00000145,0x00000009,0x0004003d, + 0x00000006,0x00000146,0x0000000a,0x0004007c,0x0000001a,0x00000147,0x00000146,0x0004003d, + 0x00000006,0x00000148,0x0000000b,0x0004007c,0x0000001a,0x00000149,0x00000148,0x000600cb, + 0x00000006,0x0000014a,0x00000145,0x00000147,0x00000149,0x000200fe,0x0000014a,0x00010038, + 0x00050036,0x00000006,0x00000011,0x00000000,0x00000008,0x00030037,0x00000007,0x0000000e, + 0x00030037,0x00000007,0x0000000f,0x00030037,0x00000007,0x00000010,0x000200f8,0x00000012, + 0x0004003d,0x00000006,0x0000014d,0x0000000e,0x0004003d,0x00000006,0x0000014e,0x0000000f, + 0x0004003d,0x00000006,0x00000150,0x00000010,0x0004007c,0x0000001a,0x00000151,0x00000150, + 0x000700c9,0x00000006,0x00000152,0x0000014d,0x0000014e,0x0000014f,0x00000151,0x000200fe, + 0x00000152,0x00010038,0x00050036,0x00000013,0x00000018,0x00000000,0x00000015,0x00030037, + 0x00000014,0x00000016,0x00030037,0x00000014,0x00000017,0x000200f8,0x00000019,0x0004003d, + 0x00000013,0x00000155,0x00000016,0x0004003d,0x00000013,0x00000156,0x00000017,0x0007000c, + 0x00000013,0x00000157,0x00000001,0x00000025,0x00000155,0x00000156,0x000200fe,0x00000157, + 0x00010038,0x00050036,0x0000001a,0x0000001f,0x00000000,0x0000001c,0x00030037,0x0000001b, + 0x0000001d,0x00030037,0x0000001b,0x0000001e,0x000200f8,0x00000020,0x0004003d,0x0000001a, + 0x0000015a,0x0000001d,0x0004003d,0x0000001a,0x0000015b,0x0000001e,0x0007000c,0x0000001a, + 0x0000015c,0x00000001,0x00000027,0x0000015a,0x0000015b,0x000200fe,0x0000015c,0x00010038, + 0x00050036,0x00000013,0x00000023,0x00000000,0x00000015,0x00030037,0x00000014,0x00000021, + 0x00030037,0x00000014,0x00000022,0x000200f8,0x00000024,0x0004003d,0x00000013,0x0000015f, + 0x00000021,0x0004003d,0x00000013,0x00000160,0x00000022,0x0007000c,0x00000013,0x00000161, + 0x00000001,0x00000028,0x0000015f,0x00000160,0x000200fe,0x00000161,0x00010038,0x00050036, + 0x0000001a,0x00000027,0x00000000,0x0000001c,0x00030037,0x0000001b,0x00000025,0x00030037, + 0x0000001b,0x00000026,0x000200f8,0x00000028,0x0004003d,0x0000001a,0x00000164,0x00000025, + 0x0004003d,0x0000001a,0x00000165,0x00000026,0x0007000c,0x0000001a,0x00000166,0x00000001, + 0x0000002a,0x00000164,0x00000165,0x000200fe,0x00000166,0x00010038,0x00050036,0x00000013, + 0x0000002b,0x00000000,0x00000015,0x00030037,0x00000014,0x00000029,0x00030037,0x00000014, + 0x0000002a,0x000200f8,0x0000002c,0x0004003d,0x00000013,0x00000169,0x00000029,0x0004003d, + 0x00000013,0x0000016a,0x0000002a,0x0007000c,0x00000013,0x0000016b,0x00000001,0x0000001a, + 0x00000169,0x0000016a,0x000200fe,0x0000016b,0x00010038,0x00050036,0x0000002d,0x00000030, + 0x00000000,0x0000002e,0x00030037,0x00000007,0x0000002f,0x000200f8,0x00000031,0x0004003b, + 0x00000007,0x00000170,0x00000007,0x0004003b,0x00000007,0x00000172,0x00000007,0x0004003b, + 0x00000007,0x00000173,0x00000007,0x0004003b,0x00000007,0x00000176,0x00000007,0x0004003b, + 0x00000007,0x00000177,0x00000007,0x0004003b,0x00000007,0x00000179,0x00000007,0x0004003b, + 0x00000007,0x0000017b,0x00000007,0x0004003b,0x00000007,0x0000017d,0x00000007,0x0004003b, + 0x00000007,0x0000017e,0x00000007,0x0004003b,0x00000007,0x00000180,0x00000007,0x0004003b, + 0x00000007,0x00000182,0x00000007,0x0004003b,0x00000007,0x00000183,0x00000007,0x0004003b, + 0x00000007,0x00000185,0x00000007,0x0004003b,0x00000007,0x00000186,0x00000007,0x0004003b, + 0x00000007,0x00000187,0x00000007,0x0004003d,0x00000006,0x00000171,0x0000002f,0x0003003e, + 0x00000170,0x00000171,0x0003003e,0x00000172,0x0000016e,0x0003003e,0x00000173,0x0000016f, + 0x00070039,0x00000006,0x00000174,0x0000000c,0x00000170,0x00000172,0x00000173,0x0003003e, + 0x00000176,0x00000174,0x0004003d,0x00000006,0x00000178,0x0000002f,0x0003003e,0x00000177, + 0x00000178,0x0003003e,0x00000179,0x00000175,0x00070039,0x00000006,0x0000017a,0x00000011, + 0x00000176,0x00000177,0x00000179,0x0004003d,0x00000006,0x0000017c,0x0000002f,0x0003003e, + 0x0000017b,0x0000017c,0x0003003e,0x0000017d,0x0000016f,0x0003003e,0x0000017e,0x0000016f, + 0x00070039,0x00000006,0x0000017f,0x0000000c,0x0000017b,0x0000017d,0x0000017e,0x0004003d, + 0x00000006,0x00000181,0x0000002f,0x0003003e,0x00000180,0x00000181,0x0003003e,0x00000182, + 0x00000175,0x0003003e,0x00000183,0x0000016e,0x00070039,0x00000006,0x00000184,0x0000000c, + 0x00000180,0x00000182,0x00000183,0x0003003e,0x00000185,0x0000017f,0x0003003e,0x00000186, + 0x00000184,0x0003003e,0x00000187,0x0000016e,0x00070039,0x00000006,0x00000188,0x00000011, + 0x00000185,0x00000186,0x00000187,0x00050050,0x0000002d,0x00000189,0x0000017a,0x00000188, + 0x000200fe,0x00000189,0x00010038,0x00050036,0x00000032,0x00000034,0x00000000,0x00000033, + 0x000200f8,0x00000035,0x00050041,0x0000018f,0x00000190,0x0000018e,0x0000014f,0x0004003d, + 0x00000032,0x00000191,0x00000190,0x000200fe,0x00000191,0x00010038,0x00050036,0x00000032, + 0x00000036,0x00000000,0x00000033,0x000200f8,0x00000037,0x00050041,0x0000018f,0x00000195, + 0x0000018e,0x00000194,0x0004003d,0x00000032,0x00000196,0x00000195,0x000200fe,0x00000196, + 0x00010038,0x00050036,0x00000038,0x0000003a,0x00000000,0x00000039,0x000200f8,0x0000003b, + 0x00050041,0x0000019a,0x0000019b,0x0000018e,0x00000199,0x0004003d,0x00000038,0x0000019c, + 0x0000019b,0x000200fe,0x0000019c,0x00010038,0x00050036,0x00000038,0x0000003c,0x00000000, + 0x00000039,0x000200f8,0x0000003d,0x00050041,0x0000019a,0x000001a0,0x0000018e,0x0000019f, + 0x0004003d,0x00000038,0x000001a1,0x000001a0,0x000200fe,0x000001a1,0x00010038,0x00050036, + 0x00000013,0x0000003f,0x00000000,0x0000003e,0x000200f8,0x00000040,0x00050041,0x000001a5, + 0x000001a6,0x0000018e,0x000001a4,0x0004003d,0x00000013,0x000001a7,0x000001a6,0x000200fe, + 0x000001a7,0x00010038,0x00050036,0x00000006,0x00000042,0x00000000,0x00000041,0x000200f8, + 0x00000043,0x00050041,0x000001ad,0x000001ae,0x000001ac,0x0000014f,0x0004003d,0x00000006, + 0x000001af,0x000001ae,0x000200fe,0x000001af,0x00010038,0x00050036,0x00000006,0x00000044, + 0x00000000,0x00000041,0x000200f8,0x00000045,0x00050041,0x000001ad,0x000001b2,0x000001ac, + 0x00000194,0x0004003d,0x00000006,0x000001b3,0x000001b2,0x000200fe,0x000001b3,0x00010038, + 0x00050036,0x0000002d,0x00000047,0x00000000,0x00000046,0x000200f8,0x00000048,0x00050041, + 0x000001b7,0x000001b8,0x000001ac,0x000001b6,0x0004003d,0x0000002d,0x000001b9,0x000001b8, + 0x000200fe,0x000001b9,0x00010038,0x00050036,0x00000013,0x0000004c,0x00000000,0x0000004a, + 0x00030037,0x00000049,0x0000004b,0x000200f8,0x0000004d,0x0004003d,0x000001bc,0x000001bf, + 0x000001be,0x0004003d,0x00000032,0x000001c0,0x0000004b,0x0007005f,0x0000009f,0x000001c1, + 0x000001bf,0x000001c0,0x00000002,0x0000014f,0x00050051,0x00000013,0x000001c3,0x000001c1, + 0x00000000,0x000200fe,0x000001c3,0x00010038,0x00050036,0x00000013,0x0000004f,0x00000000, + 0x0000004a,0x00030037,0x00000049,0x0000004e,0x000200f8,0x00000050,0x0004003d,0x000001bc, + 0x000001c7,0x000001c6,0x0004003d,0x00000032,0x000001c8,0x0000004e,0x0007005f,0x0000009f, + 0x000001c9,0x000001c7,0x000001c8,0x00000002,0x0000014f,0x00050051,0x00000013,0x000001ca, + 0x000001c9,0x00000000,0x000200fe,0x000001ca,0x00010038,0x00050036,0x00000038,0x00000053, + 0x00000000,0x00000051,0x00030037,0x00000049,0x00000052,0x000200f8,0x00000054,0x0004003d, + 0x000001bc,0x000001ce,0x000001cd,0x0004003d,0x00000032,0x000001cf,0x00000052,0x0007005f, + 0x0000009f,0x000001d0,0x000001ce,0x000001cf,0x00000002,0x0000014f,0x0007004f,0x00000038, + 0x000001d1,0x000001d0,0x000001d0,0x00000000,0x00000001,0x000200fe,0x000001d1,0x00010038, + 0x00050036,0x00000013,0x00000055,0x00000000,0x0000003e,0x000200f8,0x00000056,0x0004003b, + 0x00000014,0x000001d4,0x00000007,0x0004003d,0x000001bc,0x000001d6,0x000001d5,0x0007005f, + 0x0000009f,0x000001d8,0x000001d6,0x000001d7,0x00000002,0x0000014f,0x00050051,0x00000013, + 0x000001d9,0x000001d8,0x00000000,0x0003003e,0x000001d4,0x000001d9,0x0004003d,0x00000013, + 0x000001da,0x000001d4,0x000500b4,0x0000006e,0x000001dc,0x000001da,0x000001db,0x000300f7, + 0x000001de,0x00000000,0x000400fa,0x000001dc,0x000001dd,0x000001de,0x000200f8,0x000001dd, + 0x0003003e,0x000001d4,0x000001df,0x000200f9,0x000001de,0x000200f8,0x000001de,0x0004003d, + 0x00000013,0x000001e0,0x000001d4,0x000200fe,0x000001e0,0x00010038,0x00050036,0x00000038, + 0x0000005a,0x00000000,0x00000057,0x00030037,0x00000049,0x00000058,0x00030037,0x00000007, + 0x00000059,0x000200f8,0x0000005b,0x0004003d,0x00000006,0x000001e3,0x00000059,0x000500aa, + 0x0000006e,0x000001e4,0x000001e3,0x000001c2,0x000300f7,0x000001e6,0x00000000,0x000400fa, + 0x000001e4,0x000001e5,0x000001e6,0x000200f8,0x000001e5,0x0004003d,0x000001e7,0x000001ea, + 0x000001e9,0x0004003d,0x00000032,0x000001eb,0x00000058,0x00050062,0x0000009f,0x000001ec, + 0x000001ea,0x000001eb,0x0007004f,0x00000038,0x000001ed,0x000001ec,0x000001ec,0x00000000, + 0x00000001,0x000200fe,0x000001ed,0x000200f8,0x000001e6,0x0004003d,0x00000006,0x000001ef, + 0x00000059,0x000500aa,0x0000006e,0x000001f0,0x000001ef,0x00000175,0x000300f7,0x000001f2, + 0x00000000,0x000400fa,0x000001f0,0x000001f1,0x000001f2,0x000200f8,0x000001f1,0x0004003d, + 0x000001e7,0x000001f4,0x000001f3,0x0004003d,0x00000032,0x000001f5,0x00000058,0x00050062, + 0x0000009f,0x000001f6,0x000001f4,0x000001f5,0x0007004f,0x00000038,0x000001f7,0x000001f6, + 0x000001f6,0x00000000,0x00000001,0x000200fe,0x000001f7,0x000200f8,0x000001f2,0x0004003d, + 0x00000006,0x000001f9,0x00000059,0x000500aa,0x0000006e,0x000001fa,0x000001f9,0x0000016e, + 0x000300f7,0x000001fc,0x00000000,0x000400fa,0x000001fa,0x000001fb,0x000001fc,0x000200f8, + 0x000001fb,0x0004003d,0x000001e7,0x000001fe,0x000001fd,0x0004003d,0x00000032,0x000001ff, + 0x00000058,0x00050062,0x0000009f,0x00000200,0x000001fe,0x000001ff,0x0007004f,0x00000038, + 0x00000201,0x00000200,0x00000200,0x00000000,0x00000001,0x000200fe,0x00000201,0x000200f8, + 0x000001fc,0x0004003d,0x00000006,0x00000203,0x00000059,0x000500aa,0x0000006e,0x00000204, + 0x00000203,0x0000016f,0x000300f7,0x00000206,0x00000000,0x000400fa,0x00000204,0x00000205, + 0x00000206,0x000200f8,0x00000205,0x0004003d,0x000001e7,0x00000208,0x00000207,0x0004003d, + 0x00000032,0x00000209,0x00000058,0x00050062,0x0000009f,0x0000020a,0x00000208,0x00000209, + 0x0007004f,0x00000038,0x0000020b,0x0000020a,0x0000020a,0x00000000,0x00000001,0x000200fe, + 0x0000020b,0x000200f8,0x00000206,0x0004003d,0x00000006,0x0000020d,0x00000059,0x000500aa, + 0x0000006e,0x0000020f,0x0000020d,0x0000020e,0x000300f7,0x00000211,0x00000000,0x000400fa, + 0x0000020f,0x00000210,0x00000211,0x000200f8,0x00000210,0x0004003d,0x000001e7,0x00000213, + 0x00000212,0x0004003d,0x00000032,0x00000214,0x00000058,0x00050062,0x0000009f,0x00000215, + 0x00000213,0x00000214,0x0007004f,0x00000038,0x00000216,0x00000215,0x00000215,0x00000000, + 0x00000001,0x000200fe,0x00000216,0x000200f8,0x00000211,0x0004003d,0x00000006,0x00000218, + 0x00000059,0x000500aa,0x0000006e,0x00000219,0x00000218,0x00000081,0x000300f7,0x0000021b, + 0x00000000,0x000400fa,0x00000219,0x0000021a,0x0000021b,0x000200f8,0x0000021a,0x0004003d, + 0x000001e7,0x0000021d,0x0000021c,0x0004003d,0x00000032,0x0000021e,0x00000058,0x00050062, + 0x0000009f,0x0000021f,0x0000021d,0x0000021e,0x0007004f,0x00000038,0x00000220,0x0000021f, + 0x0000021f,0x00000000,0x00000001,0x000200fe,0x00000220,0x000200f8,0x0000021b,0x000200fe, + 0x00000222,0x00010038,0x00050036,0x00000002,0x00000061,0x00000000,0x0000005d,0x00030037, + 0x00000049,0x0000005e,0x00030037,0x0000005c,0x0000005f,0x00030037,0x00000007,0x00000060, + 0x000200f8,0x00000062,0x0004003d,0x00000006,0x00000225,0x00000060,0x000500aa,0x0000006e, + 0x00000226,0x00000225,0x000001c2,0x000300f7,0x00000228,0x00000000,0x000400fa,0x00000226, + 0x00000227,0x00000228,0x000200f8,0x00000227,0x0004003d,0x000001e7,0x00000229,0x000001e9, + 0x0004003d,0x00000032,0x0000022a,0x0000005e,0x0004003d,0x00000038,0x0000022b,0x0000005f, + 0x00050051,0x00000013,0x0000022c,0x0000022b,0x00000000,0x00050051,0x00000013,0x0000022d, + 0x0000022b,0x00000001,0x00070050,0x0000009f,0x0000022e,0x0000022c,0x0000022d,0x000001db, + 0x000001db,0x00040063,0x00000229,0x0000022a,0x0000022e,0x000200f9,0x00000228,0x000200f8, + 0x00000228,0x0004003d,0x00000006,0x0000022f,0x00000060,0x000500aa,0x0000006e,0x00000230, + 0x0000022f,0x00000175,0x000300f7,0x00000232,0x00000000,0x000400fa,0x00000230,0x00000231, + 0x00000232,0x000200f8,0x00000231,0x0004003d,0x000001e7,0x00000233,0x000001f3,0x0004003d, + 0x00000032,0x00000234,0x0000005e,0x0004003d,0x00000038,0x00000235,0x0000005f,0x00050051, + 0x00000013,0x00000236,0x00000235,0x00000000,0x00050051,0x00000013,0x00000237,0x00000235, + 0x00000001,0x00070050,0x0000009f,0x00000238,0x00000236,0x00000237,0x000001db,0x000001db, + 0x00040063,0x00000233,0x00000234,0x00000238,0x000200f9,0x00000232,0x000200f8,0x00000232, + 0x0004003d,0x00000006,0x00000239,0x00000060,0x000500aa,0x0000006e,0x0000023a,0x00000239, + 0x0000016e,0x000300f7,0x0000023c,0x00000000,0x000400fa,0x0000023a,0x0000023b,0x0000023c, + 0x000200f8,0x0000023b,0x0004003d,0x000001e7,0x0000023d,0x000001fd,0x0004003d,0x00000032, + 0x0000023e,0x0000005e,0x0004003d,0x00000038,0x0000023f,0x0000005f,0x00050051,0x00000013, + 0x00000240,0x0000023f,0x00000000,0x00050051,0x00000013,0x00000241,0x0000023f,0x00000001, + 0x00070050,0x0000009f,0x00000242,0x00000240,0x00000241,0x000001db,0x000001db,0x00040063, + 0x0000023d,0x0000023e,0x00000242,0x000200f9,0x0000023c,0x000200f8,0x0000023c,0x0004003d, + 0x00000006,0x00000243,0x00000060,0x000500aa,0x0000006e,0x00000244,0x00000243,0x0000016f, + 0x000300f7,0x00000246,0x00000000,0x000400fa,0x00000244,0x00000245,0x00000246,0x000200f8, + 0x00000245,0x0004003d,0x000001e7,0x00000247,0x00000207,0x0004003d,0x00000032,0x00000248, + 0x0000005e,0x0004003d,0x00000038,0x00000249,0x0000005f,0x00050051,0x00000013,0x0000024a, + 0x00000249,0x00000000,0x00050051,0x00000013,0x0000024b,0x00000249,0x00000001,0x00070050, + 0x0000009f,0x0000024c,0x0000024a,0x0000024b,0x000001db,0x000001db,0x00040063,0x00000247, + 0x00000248,0x0000024c,0x000200f9,0x00000246,0x000200f8,0x00000246,0x0004003d,0x00000006, + 0x0000024d,0x00000060,0x000500aa,0x0000006e,0x0000024e,0x0000024d,0x0000020e,0x000300f7, + 0x00000250,0x00000000,0x000400fa,0x0000024e,0x0000024f,0x00000250,0x000200f8,0x0000024f, + 0x0004003d,0x000001e7,0x00000251,0x00000212,0x0004003d,0x00000032,0x00000252,0x0000005e, + 0x0004003d,0x00000038,0x00000253,0x0000005f,0x00050051,0x00000013,0x00000254,0x00000253, + 0x00000000,0x00050051,0x00000013,0x00000255,0x00000253,0x00000001,0x00070050,0x0000009f, + 0x00000256,0x00000254,0x00000255,0x000001db,0x000001db,0x00040063,0x00000251,0x00000252, + 0x00000256,0x000200f9,0x00000250,0x000200f8,0x00000250,0x0004003d,0x00000006,0x00000257, + 0x00000060,0x000500aa,0x0000006e,0x00000258,0x00000257,0x00000081,0x000300f7,0x0000025a, + 0x00000000,0x000400fa,0x00000258,0x00000259,0x0000025a,0x000200f8,0x00000259,0x0004003d, + 0x000001e7,0x0000025b,0x0000021c,0x0004003d,0x00000032,0x0000025c,0x0000005e,0x0004003d, + 0x00000038,0x0000025d,0x0000005f,0x00050051,0x00000013,0x0000025e,0x0000025d,0x00000000, + 0x00050051,0x00000013,0x0000025f,0x0000025d,0x00000001,0x00070050,0x0000009f,0x00000260, + 0x0000025e,0x0000025f,0x000001db,0x000001db,0x00040063,0x0000025b,0x0000025c,0x00000260, + 0x000200f9,0x0000025a,0x000200f8,0x0000025a,0x000100fd,0x00010038,0x00050036,0x00000002, + 0x00000065,0x00000000,0x00000063,0x00030037,0x00000007,0x00000064,0x000200f8,0x00000066, + 0x0006003c,0x00000264,0x00000265,0x00000263,0x000001d7,0x000001c2,0x000700ea,0x00000006, + 0x00000266,0x00000265,0x00000175,0x000001c2,0x00000175,0x0003003e,0x00000064,0x00000266, + 0x000100fd,0x00010038,0x00050036,0x00000002,0x00000067,0x00000000,0x00000003,0x000200f8, + 0x00000068,0x0004003d,0x00000261,0x00000267,0x00000263,0x00040063,0x00000267,0x000001d7, + 0x00000269,0x000100fd,0x00010038,0x00050036,0x00000013,0x0000006c,0x00000000,0x00000069, + 0x00030037,0x00000013,0x0000006a,0x00030037,0x00000013,0x0000006b,0x000200f8,0x0000006d, + 0x0004003b,0x00000014,0x0000026a,0x00000007,0x0004003b,0x00000014,0x0000026b,0x00000007, + 0x0004003b,0x00000014,0x0000026c,0x00000007,0x0004003b,0x00000014,0x00000270,0x00000007, + 0x0004003b,0x00000014,0x00000273,0x00000007,0x0004003b,0x00000014,0x00000274,0x00000007, + 0x0003003e,0x0000026b,0x0000006a,0x0003003e,0x0000026c,0x0000006b,0x00060039,0x00000013, + 0x0000026d,0x00000023,0x0000026b,0x0000026c,0x0003003e,0x0000026a,0x0000026d,0x0004003d, + 0x00000013,0x0000026e,0x0000026a,0x000500b7,0x0000006e,0x0000026f,0x0000026e,0x000001db, + 0x000300f7,0x00000272,0x00000000,0x000400fa,0x0000026f,0x00000271,0x00000278,0x000200f8, + 0x00000271,0x0003003e,0x00000273,0x0000006a,0x0003003e,0x00000274,0x0000006b,0x00060039, + 0x00000013,0x00000275,0x00000018,0x00000273,0x00000274,0x0004003d,0x00000013,0x00000276, + 0x0000026a,0x00050088,0x00000013,0x00000277,0x00000275,0x00000276,0x0003003e,0x00000270, + 0x00000277,0x000200f9,0x00000272,0x000200f8,0x00000278,0x0003003e,0x00000270,0x000001db, + 0x000200f9,0x00000272,0x000200f8,0x00000272,0x0004003d,0x00000013,0x00000279,0x00000270, + 0x000200fe,0x00000279,0x00010038,0x00050036,0x0000006e,0x00000071,0x00000000,0x0000006f, + 0x00030037,0x0000005c,0x00000070,0x000200f8,0x00000072,0x00050041,0x00000014,0x0000027c, + 0x00000070,0x000001c2,0x0004003d,0x00000013,0x0000027d,0x0000027c,0x000500be,0x0000006e, + 0x0000027e,0x0000027d,0x000001db,0x000300f7,0x00000280,0x00000000,0x000400fa,0x0000027e, + 0x0000027f,0x00000280,0x000200f8,0x0000027f,0x00050041,0x00000014,0x00000281,0x00000070, + 0x000001c2,0x0004003d,0x00000013,0x00000282,0x00000281,0x000500bc,0x0000006e,0x00000283, + 0x00000282,0x000001df,0x000200f9,0x00000280,0x000200f8,0x00000280,0x000700f5,0x0000006e, + 0x00000284,0x0000027e,0x00000072,0x00000283,0x0000027f,0x000300f7,0x00000286,0x00000000, + 0x000400fa,0x00000284,0x00000285,0x00000286,0x000200f8,0x00000285,0x00050041,0x00000014, + 0x00000287,0x00000070,0x00000175,0x0004003d,0x00000013,0x00000288,0x00000287,0x000500be, + 0x0000006e,0x00000289,0x00000288,0x000001db,0x000300f7,0x0000028b,0x00000000,0x000400fa, + 0x00000289,0x0000028a,0x0000028b,0x000200f8,0x0000028a,0x00050041,0x00000014,0x0000028c, + 0x00000070,0x00000175,0x0004003d,0x00000013,0x0000028d,0x0000028c,0x000500bc,0x0000006e, + 0x0000028e,0x0000028d,0x000001df,0x000200f9,0x0000028b,0x000200f8,0x0000028b,0x000700f5, + 0x0000006e,0x0000028f,0x00000289,0x00000285,0x0000028e,0x0000028a,0x000200f9,0x00000286, + 0x000200f8,0x00000286,0x000700f5,0x0000006e,0x00000290,0x00000284,0x00000280,0x0000028f, + 0x0000028b,0x000200fe,0x00000290,0x00010038,0x00050036,0x00000032,0x00000077,0x00000000, + 0x00000073,0x00030037,0x00000049,0x00000074,0x00030037,0x00000049,0x00000075,0x00030037, + 0x00000049,0x00000076,0x000200f8,0x00000078,0x0004003b,0x00000049,0x00000293,0x00000007, + 0x0004003b,0x0000001b,0x0000029a,0x00000007,0x0004003b,0x0000001b,0x0000029d,0x00000007, + 0x0004003b,0x0000001b,0x0000029f,0x00000007,0x0004003b,0x0000001b,0x000002a0,0x00000007, + 0x0004003b,0x0000001b,0x000002a6,0x00000007,0x0004003b,0x0000001b,0x000002a9,0x00000007, + 0x0004003b,0x0000001b,0x000002ab,0x00000007,0x0004003b,0x0000001b,0x000002ac,0x00000007, + 0x0004003d,0x00000032,0x00000294,0x00000074,0x0004003d,0x00000032,0x00000295,0x00000075, + 0x00050080,0x00000032,0x00000296,0x00000294,0x00000295,0x0003003e,0x00000293,0x00000296, + 0x00050041,0x0000001b,0x00000297,0x00000076,0x000001c2,0x0004003d,0x0000001a,0x00000298, + 0x00000297,0x00050082,0x0000001a,0x00000299,0x00000298,0x00000194,0x00050041,0x0000001b, + 0x0000029b,0x00000293,0x000001c2,0x0004003d,0x0000001a,0x0000029c,0x0000029b,0x0003003e, + 0x0000029a,0x0000029c,0x0003003e,0x0000029d,0x00000299,0x00060039,0x0000001a,0x0000029e, + 0x0000001f,0x0000029a,0x0000029d,0x0003003e,0x0000029f,0x0000014f,0x0003003e,0x000002a0, + 0x0000029e,0x00060039,0x0000001a,0x000002a1,0x00000027,0x0000029f,0x000002a0,0x00050041, + 0x0000001b,0x000002a2,0x00000293,0x000001c2,0x0003003e,0x000002a2,0x000002a1,0x00050041, + 0x0000001b,0x000002a3,0x00000076,0x00000175,0x0004003d,0x0000001a,0x000002a4,0x000002a3, + 0x00050082,0x0000001a,0x000002a5,0x000002a4,0x00000194,0x00050041,0x0000001b,0x000002a7, + 0x00000293,0x00000175,0x0004003d,0x0000001a,0x000002a8,0x000002a7,0x0003003e,0x000002a6, + 0x000002a8,0x0003003e,0x000002a9,0x000002a5,0x00060039,0x0000001a,0x000002aa,0x0000001f, + 0x000002a6,0x000002a9,0x0003003e,0x000002ab,0x0000014f,0x0003003e,0x000002ac,0x000002aa, + 0x00060039,0x0000001a,0x000002ad,0x00000027,0x000002ab,0x000002ac,0x00050041,0x0000001b, + 0x000002ae,0x00000293,0x00000175,0x0003003e,0x000002ae,0x000002ad,0x0004003d,0x00000032, + 0x000002af,0x00000293,0x000200fe,0x000002af,0x00010038,0x00050036,0x00000002,0x0000007a, + 0x00000000,0x00000063,0x00030037,0x00000007,0x00000079,0x000200f8,0x0000007b,0x0004003b, + 0x00000007,0x000002b4,0x00000007,0x0004003d,0x00000006,0x000002b5,0x000002b3,0x0003003e, + 0x000002b4,0x000002b5,0x00050039,0x00000002,0x000002b6,0x00000065,0x000002b4,0x0004003d, + 0x00000006,0x000002b7,0x000002b4,0x0003003e,0x000002b3,0x000002b7,0x000100fd,0x00010038, + 0x00050036,0x00000006,0x0000007c,0x00000000,0x00000041,0x000200f8,0x0000007d,0x0004003d, + 0x00000006,0x000002b8,0x000002b3,0x000200fe,0x000002b8,0x00010038,0x00050036,0x00000002, + 0x0000007f,0x00000000,0x00000063,0x00030037,0x00000007,0x0000007e,0x000200f8,0x00000080, + 0x00040039,0x00000002,0x000002bb,0x00000067,0x000100fd,0x00010038,0x00050036,0x00000002, + 0x00000087,0x00000000,0x00000085,0x00030037,0x00000084,0x00000086,0x000200f8,0x00000088, + 0x0004003b,0x00000014,0x000002bc,0x00000007,0x0004003b,0x00000014,0x000002be,0x00000007, + 0x0004003b,0x00000014,0x000002c1,0x00000007,0x0004003b,0x00000014,0x000002c5,0x00000007, + 0x0004003b,0x00000014,0x000002c8,0x00000007,0x0004003b,0x00000014,0x000002cf,0x00000007, + 0x0004003b,0x00000014,0x000002d1,0x00000007,0x0004003b,0x00000014,0x000002d4,0x00000007, + 0x0004003b,0x00000014,0x000002d8,0x00000007,0x0004003b,0x00000014,0x000002db,0x00000007, + 0x0004003b,0x00000014,0x000002e2,0x00000007,0x0004003b,0x00000014,0x000002e3,0x00000007, + 0x0004003b,0x00000014,0x000002e6,0x00000007,0x0004003b,0x00000014,0x000002ea,0x00000007, + 0x0004003b,0x00000014,0x000002ed,0x00000007,0x0004003b,0x00000014,0x000002f4,0x00000007, + 0x0004003b,0x00000014,0x000002f5,0x00000007,0x0004003b,0x00000014,0x000002f8,0x00000007, + 0x0004003b,0x00000014,0x000002fc,0x00000007,0x0004003b,0x00000014,0x000002ff,0x00000007, + 0x0004003b,0x00000014,0x00000306,0x00000007,0x0004003b,0x00000014,0x00000307,0x00000007, + 0x0004003b,0x00000014,0x0000030a,0x00000007,0x0004003b,0x00000014,0x0000030e,0x00000007, + 0x0004003b,0x00000014,0x00000311,0x00000007,0x0004003b,0x00000014,0x00000318,0x00000007, + 0x0004003b,0x00000014,0x00000319,0x00000007,0x0004003b,0x00000014,0x0000031c,0x00000007, + 0x0004003b,0x00000014,0x00000320,0x00000007,0x0004003b,0x00000014,0x00000323,0x00000007, + 0x0004003b,0x00000014,0x0000032a,0x00000007,0x0004003b,0x00000014,0x0000032b,0x00000007, + 0x0004003b,0x00000014,0x0000032e,0x00000007,0x0004003b,0x00000014,0x00000332,0x00000007, + 0x0004003b,0x00000014,0x00000335,0x00000007,0x0004003b,0x00000014,0x0000033c,0x00000007, + 0x0004003b,0x00000014,0x0000033d,0x00000007,0x0004003b,0x00000014,0x00000340,0x00000007, + 0x0004003b,0x00000014,0x00000344,0x00000007,0x0004003b,0x00000014,0x00000347,0x00000007, + 0x0004003b,0x00000014,0x0000034e,0x00000007,0x0004003b,0x00000014,0x0000034f,0x00000007, + 0x0004003b,0x00000014,0x00000352,0x00000007,0x0004003b,0x00000014,0x00000356,0x00000007, + 0x0004003b,0x00000014,0x00000359,0x00000007,0x00060041,0x00000014,0x000002bf,0x00000086, + 0x0000014f,0x0000014f,0x0004003d,0x00000013,0x000002c0,0x000002bf,0x0003003e,0x000002be, + 0x000002c0,0x00060041,0x00000014,0x000002c2,0x00000086,0x0000014f,0x000002bd,0x0004003d, + 0x00000013,0x000002c3,0x000002c2,0x0003003e,0x000002c1,0x000002c3,0x00060039,0x00000013, + 0x000002c4,0x00000018,0x000002be,0x000002c1,0x0003003e,0x000002bc,0x000002c4,0x00060041, + 0x00000014,0x000002c6,0x00000086,0x0000014f,0x0000014f,0x0004003d,0x00000013,0x000002c7, + 0x000002c6,0x0003003e,0x000002c5,0x000002c7,0x00060041,0x00000014,0x000002c9,0x00000086, + 0x0000014f,0x000002bd,0x0004003d,0x00000013,0x000002ca,0x000002c9,0x0003003e,0x000002c8, + 0x000002ca,0x00060039,0x00000013,0x000002cb,0x00000023,0x000002c5,0x000002c8,0x00060041, + 0x00000014,0x000002cc,0x00000086,0x0000014f,0x000002bd,0x0003003e,0x000002cc,0x000002cb, + 0x0004003d,0x00000013,0x000002cd,0x000002bc,0x00060041,0x00000014,0x000002ce,0x00000086, + 0x0000014f,0x0000014f,0x0003003e,0x000002ce,0x000002cd,0x00060041,0x00000014,0x000002d2, + 0x00000086,0x0000014f,0x00000194,0x0004003d,0x00000013,0x000002d3,0x000002d2,0x0003003e, + 0x000002d1,0x000002d3,0x00060041,0x00000014,0x000002d5,0x00000086,0x0000014f,0x000002d0, + 0x0004003d,0x00000013,0x000002d6,0x000002d5,0x0003003e,0x000002d4,0x000002d6,0x00060039, + 0x00000013,0x000002d7,0x00000018,0x000002d1,0x000002d4,0x0003003e,0x000002cf,0x000002d7, + 0x00060041,0x00000014,0x000002d9,0x00000086,0x0000014f,0x00000194,0x0004003d,0x00000013, + 0x000002da,0x000002d9,0x0003003e,0x000002d8,0x000002da,0x00060041,0x00000014,0x000002dc, + 0x00000086,0x0000014f,0x000002d0,0x0004003d,0x00000013,0x000002dd,0x000002dc,0x0003003e, + 0x000002db,0x000002dd,0x00060039,0x00000013,0x000002de,0x00000023,0x000002d8,0x000002db, + 0x00060041,0x00000014,0x000002df,0x00000086,0x0000014f,0x000002d0,0x0003003e,0x000002df, + 0x000002de,0x0004003d,0x00000013,0x000002e0,0x000002cf,0x00060041,0x00000014,0x000002e1, + 0x00000086,0x0000014f,0x00000194,0x0003003e,0x000002e1,0x000002e0,0x00060041,0x00000014, + 0x000002e4,0x00000086,0x0000014f,0x0000014f,0x0004003d,0x00000013,0x000002e5,0x000002e4, + 0x0003003e,0x000002e3,0x000002e5,0x00060041,0x00000014,0x000002e7,0x00000086,0x0000014f, + 0x000001b6,0x0004003d,0x00000013,0x000002e8,0x000002e7,0x0003003e,0x000002e6,0x000002e8, + 0x00060039,0x00000013,0x000002e9,0x00000018,0x000002e3,0x000002e6,0x0003003e,0x000002e2, + 0x000002e9,0x00060041,0x00000014,0x000002eb,0x00000086,0x0000014f,0x0000014f,0x0004003d, + 0x00000013,0x000002ec,0x000002eb,0x0003003e,0x000002ea,0x000002ec,0x00060041,0x00000014, + 0x000002ee,0x00000086,0x0000014f,0x000001b6,0x0004003d,0x00000013,0x000002ef,0x000002ee, + 0x0003003e,0x000002ed,0x000002ef,0x00060039,0x00000013,0x000002f0,0x00000023,0x000002ea, + 0x000002ed,0x00060041,0x00000014,0x000002f1,0x00000086,0x0000014f,0x000001b6,0x0003003e, + 0x000002f1,0x000002f0,0x0004003d,0x00000013,0x000002f2,0x000002e2,0x00060041,0x00000014, + 0x000002f3,0x00000086,0x0000014f,0x0000014f,0x0003003e,0x000002f3,0x000002f2,0x00060041, + 0x00000014,0x000002f6,0x00000086,0x0000014f,0x00000194,0x0004003d,0x00000013,0x000002f7, + 0x000002f6,0x0003003e,0x000002f5,0x000002f7,0x00060041,0x00000014,0x000002f9,0x00000086, + 0x0000014f,0x000002bd,0x0004003d,0x00000013,0x000002fa,0x000002f9,0x0003003e,0x000002f8, + 0x000002fa,0x00060039,0x00000013,0x000002fb,0x00000018,0x000002f5,0x000002f8,0x0003003e, + 0x000002f4,0x000002fb,0x00060041,0x00000014,0x000002fd,0x00000086,0x0000014f,0x00000194, + 0x0004003d,0x00000013,0x000002fe,0x000002fd,0x0003003e,0x000002fc,0x000002fe,0x00060041, + 0x00000014,0x00000300,0x00000086,0x0000014f,0x000002bd,0x0004003d,0x00000013,0x00000301, + 0x00000300,0x0003003e,0x000002ff,0x00000301,0x00060039,0x00000013,0x00000302,0x00000023, + 0x000002fc,0x000002ff,0x00060041,0x00000014,0x00000303,0x00000086,0x0000014f,0x000002bd, + 0x0003003e,0x00000303,0x00000302,0x0004003d,0x00000013,0x00000304,0x000002f4,0x00060041, + 0x00000014,0x00000305,0x00000086,0x0000014f,0x00000194,0x0003003e,0x00000305,0x00000304, + 0x00060041,0x00000014,0x00000308,0x00000086,0x0000014f,0x0000014f,0x0004003d,0x00000013, + 0x00000309,0x00000308,0x0003003e,0x00000307,0x00000309,0x00060041,0x00000014,0x0000030b, + 0x00000086,0x0000014f,0x00000194,0x0004003d,0x00000013,0x0000030c,0x0000030b,0x0003003e, + 0x0000030a,0x0000030c,0x00060039,0x00000013,0x0000030d,0x00000018,0x00000307,0x0000030a, + 0x0003003e,0x00000306,0x0000030d,0x00060041,0x00000014,0x0000030f,0x00000086,0x0000014f, + 0x0000014f,0x0004003d,0x00000013,0x00000310,0x0000030f,0x0003003e,0x0000030e,0x00000310, + 0x00060041,0x00000014,0x00000312,0x00000086,0x0000014f,0x00000194,0x0004003d,0x00000013, + 0x00000313,0x00000312,0x0003003e,0x00000311,0x00000313,0x00060039,0x00000013,0x00000314, + 0x00000023,0x0000030e,0x00000311,0x00060041,0x00000014,0x00000315,0x00000086,0x0000014f, + 0x00000194,0x0003003e,0x00000315,0x00000314,0x0004003d,0x00000013,0x00000316,0x00000306, + 0x00060041,0x00000014,0x00000317,0x00000086,0x0000014f,0x0000014f,0x0003003e,0x00000317, + 0x00000316,0x00060041,0x00000014,0x0000031a,0x00000086,0x0000014f,0x000001b6,0x0004003d, + 0x00000013,0x0000031b,0x0000031a,0x0003003e,0x00000319,0x0000031b,0x00060041,0x00000014, + 0x0000031d,0x00000086,0x0000014f,0x000002d0,0x0004003d,0x00000013,0x0000031e,0x0000031d, + 0x0003003e,0x0000031c,0x0000031e,0x00060039,0x00000013,0x0000031f,0x00000018,0x00000319, + 0x0000031c,0x0003003e,0x00000318,0x0000031f,0x00060041,0x00000014,0x00000321,0x00000086, + 0x0000014f,0x000001b6,0x0004003d,0x00000013,0x00000322,0x00000321,0x0003003e,0x00000320, + 0x00000322,0x00060041,0x00000014,0x00000324,0x00000086,0x0000014f,0x000002d0,0x0004003d, + 0x00000013,0x00000325,0x00000324,0x0003003e,0x00000323,0x00000325,0x00060039,0x00000013, + 0x00000326,0x00000023,0x00000320,0x00000323,0x00060041,0x00000014,0x00000327,0x00000086, + 0x0000014f,0x000002d0,0x0003003e,0x00000327,0x00000326,0x0004003d,0x00000013,0x00000328, + 0x00000318,0x00060041,0x00000014,0x00000329,0x00000086,0x0000014f,0x000001b6,0x0003003e, + 0x00000329,0x00000328,0x00060041,0x00000014,0x0000032c,0x00000086,0x0000014f,0x00000194, + 0x0004003d,0x00000013,0x0000032d,0x0000032c,0x0003003e,0x0000032b,0x0000032d,0x00060041, + 0x00000014,0x0000032f,0x00000086,0x0000014f,0x000001b6,0x0004003d,0x00000013,0x00000330, + 0x0000032f,0x0003003e,0x0000032e,0x00000330,0x00060039,0x00000013,0x00000331,0x00000018, + 0x0000032b,0x0000032e,0x0003003e,0x0000032a,0x00000331,0x00060041,0x00000014,0x00000333, + 0x00000086,0x0000014f,0x00000194,0x0004003d,0x00000013,0x00000334,0x00000333,0x0003003e, + 0x00000332,0x00000334,0x00060041,0x00000014,0x00000336,0x00000086,0x0000014f,0x000001b6, + 0x0004003d,0x00000013,0x00000337,0x00000336,0x0003003e,0x00000335,0x00000337,0x00060039, + 0x00000013,0x00000338,0x00000023,0x00000332,0x00000335,0x00060041,0x00000014,0x00000339, + 0x00000086,0x0000014f,0x000001b6,0x0003003e,0x00000339,0x00000338,0x0004003d,0x00000013, + 0x0000033a,0x0000032a,0x00060041,0x00000014,0x0000033b,0x00000086,0x0000014f,0x00000194, + 0x0003003e,0x0000033b,0x0000033a,0x00060041,0x00000014,0x0000033e,0x00000086,0x0000014f, + 0x000002bd,0x0004003d,0x00000013,0x0000033f,0x0000033e,0x0003003e,0x0000033d,0x0000033f, + 0x00060041,0x00000014,0x00000341,0x00000086,0x0000014f,0x000002d0,0x0004003d,0x00000013, + 0x00000342,0x00000341,0x0003003e,0x00000340,0x00000342,0x00060039,0x00000013,0x00000343, + 0x00000018,0x0000033d,0x00000340,0x0003003e,0x0000033c,0x00000343,0x00060041,0x00000014, + 0x00000345,0x00000086,0x0000014f,0x000002bd,0x0004003d,0x00000013,0x00000346,0x00000345, + 0x0003003e,0x00000344,0x00000346,0x00060041,0x00000014,0x00000348,0x00000086,0x0000014f, + 0x000002d0,0x0004003d,0x00000013,0x00000349,0x00000348,0x0003003e,0x00000347,0x00000349, + 0x00060039,0x00000013,0x0000034a,0x00000023,0x00000344,0x00000347,0x00060041,0x00000014, + 0x0000034b,0x00000086,0x0000014f,0x000002d0,0x0003003e,0x0000034b,0x0000034a,0x0004003d, + 0x00000013,0x0000034c,0x0000033c,0x00060041,0x00000014,0x0000034d,0x00000086,0x0000014f, + 0x000002bd,0x0003003e,0x0000034d,0x0000034c,0x00060041,0x00000014,0x00000350,0x00000086, + 0x0000014f,0x000001b6,0x0004003d,0x00000013,0x00000351,0x00000350,0x0003003e,0x0000034f, + 0x00000351,0x00060041,0x00000014,0x00000353,0x00000086,0x0000014f,0x000002bd,0x0004003d, + 0x00000013,0x00000354,0x00000353,0x0003003e,0x00000352,0x00000354,0x00060039,0x00000013, + 0x00000355,0x00000018,0x0000034f,0x00000352,0x0003003e,0x0000034e,0x00000355,0x00060041, + 0x00000014,0x00000357,0x00000086,0x0000014f,0x000001b6,0x0004003d,0x00000013,0x00000358, + 0x00000357,0x0003003e,0x00000356,0x00000358,0x00060041,0x00000014,0x0000035a,0x00000086, + 0x0000014f,0x000002bd,0x0004003d,0x00000013,0x0000035b,0x0000035a,0x0003003e,0x00000359, + 0x0000035b,0x00060039,0x00000013,0x0000035c,0x00000023,0x00000356,0x00000359,0x00060041, + 0x00000014,0x0000035d,0x00000086,0x0000014f,0x000002bd,0x0003003e,0x0000035d,0x0000035c, + 0x0004003d,0x00000013,0x0000035e,0x0000034e,0x00060041,0x00000014,0x0000035f,0x00000086, + 0x0000014f,0x000001b6,0x0003003e,0x0000035f,0x0000035e,0x000100fd,0x00010038,0x00050036, + 0x00000013,0x0000008d,0x00000000,0x00000089,0x00030037,0x00000049,0x0000008a,0x00030037, + 0x00000084,0x0000008b,0x00030037,0x00000084,0x0000008c,0x000200f8,0x0000008e,0x0004003b, + 0x00000014,0x00000360,0x00000007,0x0004003b,0x0000001b,0x00000362,0x00000007,0x0004003b, + 0x0000001b,0x00000363,0x00000007,0x0004003b,0x00000084,0x00000364,0x00000007,0x0004003b, + 0x00000084,0x00000368,0x00000007,0x0004003b,0x00000014,0x0000036c,0x00000007,0x0004003b, + 0x00000014,0x0000036d,0x00000007,0x0004003b,0x00000014,0x00000370,0x00000007,0x0004003b, + 0x0000001b,0x00000379,0x00000007,0x0004003b,0x00000014,0x00000386,0x00000007,0x0003003e, + 0x00000360,0x00000361,0x0003003e,0x00000362,0x0000014f,0x0003003e,0x00000363,0x0000014f, + 0x0004003d,0x00000083,0x00000365,0x0000008b,0x0003003e,0x00000364,0x00000365,0x00050039, + 0x00000002,0x00000366,0x00000087,0x00000364,0x0004003d,0x00000083,0x00000367,0x00000364, + 0x0003003e,0x0000008b,0x00000367,0x0004003d,0x00000083,0x00000369,0x0000008c,0x0003003e, + 0x00000368,0x00000369,0x00050039,0x00000002,0x0000036a,0x00000087,0x00000368,0x0004003d, + 0x00000083,0x0000036b,0x00000368,0x0003003e,0x0000008c,0x0000036b,0x00060041,0x00000014, + 0x0000036e,0x0000008b,0x0000014f,0x000002d0,0x0004003d,0x00000013,0x0000036f,0x0000036e, + 0x0003003e,0x0000036d,0x0000036f,0x00060041,0x00000014,0x00000371,0x0000008c,0x0000014f, + 0x000002d0,0x0004003d,0x00000013,0x00000372,0x00000371,0x0003003e,0x00000370,0x00000372, + 0x00060039,0x00000013,0x00000373,0x00000018,0x0000036d,0x00000370,0x0003003e,0x0000036c, + 0x00000373,0x0004003d,0x00000013,0x00000374,0x0000036c,0x000500ba,0x0000006e,0x00000376, + 0x00000374,0x00000375,0x000300f7,0x00000378,0x00000000,0x000400fa,0x00000376,0x00000377, + 0x00000378,0x000200f8,0x00000377,0x0003003e,0x00000379,0x0000014f,0x000200f9,0x0000037a, + 0x000200f8,0x0000037a,0x000400f6,0x0000037c,0x0000037d,0x00000000,0x000200f9,0x0000037e, + 0x000200f8,0x0000037e,0x0004003d,0x0000001a,0x0000037f,0x00000379,0x000500b1,0x0000006e, + 0x00000381,0x0000037f,0x00000380,0x0004003d,0x00000013,0x00000382,0x00000360,0x000500b8, + 0x0000006e,0x00000384,0x00000382,0x00000383,0x000500a7,0x0000006e,0x00000385,0x00000381, + 0x00000384,0x000400fa,0x00000385,0x0000037b,0x0000037c,0x000200f8,0x0000037b,0x0004003d, + 0x0000001a,0x00000387,0x00000362,0x00060041,0x00000014,0x00000388,0x0000008b,0x0000014f, + 0x00000387,0x0004003d,0x00000013,0x00000389,0x00000388,0x0004003d,0x0000001a,0x0000038a, + 0x00000363,0x00060041,0x00000014,0x0000038b,0x0000008c,0x0000014f,0x0000038a,0x0004003d, + 0x00000013,0x0000038c,0x0000038b,0x00050083,0x00000013,0x0000038d,0x00000389,0x0000038c, + 0x0003003e,0x00000386,0x0000038d,0x0004003d,0x00000013,0x0000038e,0x00000386,0x0006000c, + 0x00000013,0x0000038f,0x00000001,0x00000004,0x0000038e,0x000500ba,0x0000006e,0x00000391, + 0x0000038f,0x00000390,0x000300f7,0x00000393,0x00000000,0x000400fa,0x00000391,0x00000392, + 0x000003bb,0x000200f8,0x00000392,0x0004003d,0x00000013,0x00000394,0x00000386,0x0006000c, + 0x00000013,0x00000395,0x00000001,0x00000006,0x00000394,0x0004003d,0x0000001a,0x00000396, + 0x00000362,0x00060041,0x00000014,0x00000397,0x0000008b,0x0000014f,0x00000396,0x0004003d, + 0x00000013,0x00000398,0x00000397,0x0004003d,0x0000001a,0x00000399,0x00000363,0x00060041, + 0x00000014,0x0000039a,0x0000008c,0x0000014f,0x00000399,0x0004003d,0x00000013,0x0000039b, + 0x0000039a,0x00060039,0x00000013,0x0000039c,0x0000006c,0x00000398,0x0000039b,0x00050083, + 0x00000013,0x0000039d,0x000001df,0x0000039c,0x00050085,0x00000013,0x0000039e,0x00000395, + 0x0000039d,0x0003003e,0x00000386,0x0000039e,0x0004003d,0x00000013,0x0000039f,0x00000386, + 0x0006000c,0x00000013,0x000003a0,0x00000001,0x00000004,0x0000039f,0x0004003d,0x00000013, + 0x000003a1,0x00000360,0x0006000c,0x00000013,0x000003a2,0x00000001,0x00000004,0x000003a1, + 0x000500b8,0x0000006e,0x000003a3,0x000003a0,0x000003a2,0x0004003d,0x00000013,0x000003a4, + 0x00000386,0x0004003d,0x00000013,0x000003a5,0x00000360,0x000600a9,0x00000013,0x000003a6, + 0x000003a3,0x000003a4,0x000003a5,0x0003003e,0x00000360,0x000003a6,0x0004003d,0x0000001a, + 0x000003a7,0x00000362,0x00060041,0x00000014,0x000003a8,0x0000008b,0x0000014f,0x000003a7, + 0x0004003d,0x00000013,0x000003a9,0x000003a8,0x0004003d,0x0000001a,0x000003aa,0x00000363, + 0x00060041,0x00000014,0x000003ab,0x0000008c,0x0000014f,0x000003aa,0x0004003d,0x00000013, + 0x000003ac,0x000003ab,0x000500b8,0x0000006e,0x000003ad,0x000003a9,0x000003ac,0x000600a9, + 0x0000001a,0x000003ae,0x000003ad,0x00000194,0x0000014f,0x0004003d,0x0000001a,0x000003af, + 0x00000362,0x00050080,0x0000001a,0x000003b0,0x000003af,0x000003ae,0x0003003e,0x00000362, + 0x000003b0,0x0004003d,0x0000001a,0x000003b1,0x00000362,0x00060041,0x00000014,0x000003b2, + 0x0000008b,0x0000014f,0x000003b1,0x0004003d,0x00000013,0x000003b3,0x000003b2,0x0004003d, + 0x0000001a,0x000003b4,0x00000363,0x00060041,0x00000014,0x000003b5,0x0000008c,0x0000014f, + 0x000003b4,0x0004003d,0x00000013,0x000003b6,0x000003b5,0x000500be,0x0000006e,0x000003b7, + 0x000003b3,0x000003b6,0x000600a9,0x0000001a,0x000003b8,0x000003b7,0x00000194,0x0000014f, + 0x0004003d,0x0000001a,0x000003b9,0x00000363,0x00050080,0x0000001a,0x000003ba,0x000003b9, + 0x000003b8,0x0003003e,0x00000363,0x000003ba,0x000200f9,0x00000393,0x000200f8,0x000003bb, + 0x0003003e,0x00000360,0x00000383,0x000200f9,0x00000393,0x000200f8,0x00000393,0x000200f9, + 0x0000037d,0x000200f8,0x0000037d,0x0004003d,0x0000001a,0x000003bc,0x00000379,0x00050080, + 0x0000001a,0x000003bd,0x000003bc,0x00000194,0x0003003e,0x00000379,0x000003bd,0x000200f9, + 0x0000037a,0x000200f8,0x0000037c,0x000200f9,0x00000378,0x000200f8,0x00000378,0x0004003d, + 0x00000013,0x000003be,0x00000360,0x0004003d,0x00000013,0x000003bf,0x00000360,0x000500b8, + 0x0000006e,0x000003c0,0x000003bf,0x00000361,0x000600a9,0x00000013,0x000003c1,0x000003c0, + 0x000001df,0x000001db,0x00050085,0x00000013,0x000003c2,0x000003be,0x000003c1,0x000200fe, + 0x000003c2,0x00010038,0x00050036,0x00000083,0x00000091,0x00000000,0x0000008f,0x00030037, + 0x0000005c,0x00000090,0x000200f8,0x00000092,0x0004003b,0x0000005c,0x000003c5,0x00000007, + 0x0004003b,0x00000049,0x000003cc,0x00000007,0x0004003b,0x0000001b,0x000003d3,0x00000007, + 0x0004003b,0x00000049,0x000003db,0x00000007,0x0004003b,0x00000049,0x000003e5,0x00000007, + 0x0004003b,0x00000049,0x000003e7,0x00000007,0x0004003b,0x000003e8,0x000003e9,0x00000007, + 0x0004003b,0x00000049,0x000003ec,0x00000007,0x0004003b,0x00000084,0x000003ee,0x00000007, + 0x0004003b,0x00000049,0x000003f0,0x00000007,0x0004003b,0x00000014,0x000003f8,0x00000007, + 0x0004003b,0x00000014,0x000003fb,0x00000007,0x0004003b,0x00000014,0x00000400,0x00000007, + 0x0004003b,0x00000014,0x00000403,0x00000007,0x0004003d,0x00000038,0x000003c6,0x00000090, + 0x00040039,0x00000038,0x000003c7,0x0000003a,0x00040039,0x00000032,0x000003c8,0x00000034, + 0x0004006f,0x00000038,0x000003c9,0x000003c8,0x00050088,0x00000038,0x000003ca,0x000003c7, + 0x000003c9,0x00050081,0x00000038,0x000003cb,0x000003c6,0x000003ca,0x0003003e,0x000003c5, + 0x000003cb,0x0004003d,0x00000038,0x000003cd,0x000003c5,0x00040039,0x00000032,0x000003ce, + 0x00000034,0x0004006f,0x00000038,0x000003cf,0x000003ce,0x00050085,0x00000038,0x000003d0, + 0x000003cd,0x000003cf,0x0006000c,0x00000038,0x000003d1,0x00000001,0x00000008,0x000003d0, + 0x0004006e,0x00000032,0x000003d2,0x000003d1,0x0003003e,0x000003cc,0x000003d2,0x0003003e, + 0x000003d3,0x0000014f,0x000200f9,0x000003d4,0x000200f8,0x000003d4,0x000400f6,0x000003d6, + 0x000003d7,0x00000000,0x000200f9,0x000003d8,0x000200f8,0x000003d8,0x0004003d,0x0000001a, + 0x000003d9,0x000003d3,0x000500b1,0x0000006e,0x000003da,0x000003d9,0x00000380,0x000400fa, + 0x000003da,0x000003d5,0x000003d6,0x000200f8,0x000003d5,0x0004003d,0x0000001a,0x000003e3, + 0x000003d3,0x00040039,0x00000032,0x000003e4,0x00000034,0x0004003d,0x00000032,0x000003e6, + 0x000003cc,0x0003003e,0x000003e5,0x000003e6,0x0003003e,0x000003e9,0x000003e2,0x00050041, + 0x00000049,0x000003ea,0x000003e9,0x000003e3,0x0004003d,0x00000032,0x000003eb,0x000003ea, + 0x0003003e,0x000003e7,0x000003eb,0x0003003e,0x000003ec,0x000003e4,0x00070039,0x00000032, + 0x000003ed,0x00000077,0x000003e5,0x000003e7,0x000003ec,0x0003003e,0x000003db,0x000003ed, + 0x0004003d,0x0000001a,0x000003ef,0x000003d3,0x0004003d,0x00000032,0x000003f1,0x000003db, + 0x0003003e,0x000003f0,0x000003f1,0x00050039,0x00000013,0x000003f2,0x0000004c,0x000003f0, + 0x00040039,0x00000013,0x000003f3,0x00000055,0x00050085,0x00000013,0x000003f4,0x000003f2, + 0x000003f3,0x00060041,0x00000014,0x000003f5,0x000003ee,0x0000014f,0x000003ef,0x0003003e, + 0x000003f5,0x000003f4,0x0004003d,0x0000001a,0x000003f6,0x000003d3,0x0004003d,0x0000001a, + 0x000003f7,0x000003d3,0x00060041,0x00000014,0x000003f9,0x000003ee,0x0000014f,0x000003f7, + 0x0004003d,0x00000013,0x000003fa,0x000003f9,0x0003003e,0x000003f8,0x000003fa,0x0003003e, + 0x000003fb,0x000001df,0x00060039,0x00000013,0x000003fc,0x0000002b,0x000003f8,0x000003fb, + 0x00060041,0x00000014,0x000003fd,0x000003ee,0x0000014f,0x000003f6,0x0003003e,0x000003fd, + 0x000003fc,0x0004003d,0x0000001a,0x000003fe,0x000003d3,0x0004003d,0x0000001a,0x000003ff, + 0x000003d3,0x00060041,0x00000014,0x00000401,0x000003ee,0x0000014f,0x000003ff,0x0004003d, + 0x00000013,0x00000402,0x00000401,0x0003003e,0x00000400,0x00000402,0x0003003e,0x00000403, + 0x00000390,0x00060039,0x00000013,0x00000404,0x00000023,0x00000400,0x00000403,0x00060041, + 0x00000014,0x00000405,0x000003ee,0x0000014f,0x000003fe,0x0003003e,0x00000405,0x00000404, + 0x000200f9,0x000003d7,0x000200f8,0x000003d7,0x0004003d,0x0000001a,0x00000406,0x000003d3, + 0x00050080,0x0000001a,0x00000407,0x00000406,0x00000194,0x0003003e,0x000003d3,0x00000407, + 0x000200f9,0x000003d4,0x000200f8,0x000003d6,0x0004003d,0x00000083,0x00000408,0x000003ee, + 0x000200fe,0x00000408,0x00010038,0x00050036,0x00000093,0x00000097,0x00000000,0x00000094, + 0x00030037,0x0000005c,0x00000095,0x00030037,0x0000005c,0x00000096,0x000200f8,0x00000098, + 0x0004003b,0x0000005c,0x0000040b,0x00000007,0x0004003b,0x0000005c,0x00000412,0x00000007, + 0x0004003b,0x00000416,0x00000417,0x00000007,0x0004003b,0x0000005c,0x00000418,0x00000007, + 0x0004003b,0x00000049,0x00000421,0x00000007,0x0004003b,0x0000001b,0x00000428,0x00000007, + 0x0004003b,0x00000049,0x00000430,0x00000007,0x0004003b,0x00000049,0x00000433,0x00000007, + 0x0004003b,0x00000049,0x00000435,0x00000007,0x0004003b,0x000003e8,0x00000436,0x00000007, + 0x0004003b,0x00000049,0x00000439,0x00000007,0x0004003b,0x00000049,0x0000043c,0x00000007, + 0x0004003b,0x00000014,0x00000446,0x00000007,0x0004003b,0x00000014,0x00000449,0x00000007, + 0x0004003b,0x00000014,0x0000044e,0x00000007,0x0004003b,0x00000014,0x00000451,0x00000007, + 0x0004003d,0x00000038,0x0000040c,0x00000095,0x00040039,0x00000038,0x0000040d,0x0000003c, + 0x00040039,0x00000032,0x0000040e,0x00000036,0x0004006f,0x00000038,0x0000040f,0x0000040e, + 0x00050088,0x00000038,0x00000410,0x0000040d,0x0000040f,0x00050081,0x00000038,0x00000411, + 0x0000040c,0x00000410,0x0003003e,0x0000040b,0x00000411,0x0004003d,0x00000038,0x00000413, + 0x0000040b,0x0004003d,0x00000038,0x00000414,0x00000096,0x00050081,0x00000038,0x00000415, + 0x00000413,0x00000414,0x0003003e,0x00000412,0x00000415,0x0004003d,0x00000038,0x00000419, + 0x00000412,0x0003003e,0x00000418,0x00000419,0x00050039,0x0000006e,0x0000041a,0x00000071, + 0x00000418,0x00050041,0x0000041b,0x0000041c,0x00000417,0x00000194,0x0003003e,0x0000041c, + 0x0000041a,0x00050041,0x0000041b,0x0000041d,0x00000417,0x00000194,0x0004003d,0x0000006e, + 0x0000041e,0x0000041d,0x000300f7,0x00000420,0x00000000,0x000400fa,0x0000041e,0x0000041f, + 0x00000420,0x000200f8,0x0000041f,0x0004003d,0x00000038,0x00000422,0x00000412,0x00040039, + 0x00000032,0x00000423,0x00000036,0x0004006f,0x00000038,0x00000424,0x00000423,0x00050085, + 0x00000038,0x00000425,0x00000422,0x00000424,0x0006000c,0x00000038,0x00000426,0x00000001, + 0x00000008,0x00000425,0x0004006e,0x00000032,0x00000427,0x00000426,0x0003003e,0x00000421, + 0x00000427,0x0003003e,0x00000428,0x0000014f,0x000200f9,0x00000429,0x000200f8,0x00000429, + 0x000400f6,0x0000042b,0x0000042c,0x00000000,0x000200f9,0x0000042d,0x000200f8,0x0000042d, + 0x0004003d,0x0000001a,0x0000042e,0x00000428,0x000500b1,0x0000006e,0x0000042f,0x0000042e, + 0x00000380,0x000400fa,0x0000042f,0x0000042a,0x0000042b,0x000200f8,0x0000042a,0x0004003d, + 0x0000001a,0x00000431,0x00000428,0x00040039,0x00000032,0x00000432,0x00000036,0x0004003d, + 0x00000032,0x00000434,0x00000421,0x0003003e,0x00000433,0x00000434,0x0003003e,0x00000436, + 0x000003e2,0x00050041,0x00000049,0x00000437,0x00000436,0x00000431,0x0004003d,0x00000032, + 0x00000438,0x00000437,0x0003003e,0x00000435,0x00000438,0x0003003e,0x00000439,0x00000432, + 0x00070039,0x00000032,0x0000043a,0x00000077,0x00000433,0x00000435,0x00000439,0x0003003e, + 0x00000430,0x0000043a,0x0004003d,0x0000001a,0x0000043b,0x00000428,0x0004003d,0x00000032, + 0x0000043d,0x00000430,0x0003003e,0x0000043c,0x0000043d,0x00050039,0x00000013,0x0000043e, + 0x0000004f,0x0000043c,0x00040039,0x00000013,0x0000043f,0x0000003f,0x00050085,0x00000013, + 0x00000440,0x0000043e,0x0000043f,0x00040039,0x00000013,0x00000441,0x00000055,0x00050085, + 0x00000013,0x00000442,0x00000440,0x00000441,0x00070041,0x00000014,0x00000443,0x00000417, + 0x0000014f,0x0000014f,0x0000043b,0x0003003e,0x00000443,0x00000442,0x0004003d,0x0000001a, + 0x00000444,0x00000428,0x0004003d,0x0000001a,0x00000445,0x00000428,0x00070041,0x00000014, + 0x00000447,0x00000417,0x0000014f,0x0000014f,0x00000445,0x0004003d,0x00000013,0x00000448, + 0x00000447,0x0003003e,0x00000446,0x00000448,0x0003003e,0x00000449,0x000001df,0x00060039, + 0x00000013,0x0000044a,0x0000002b,0x00000446,0x00000449,0x00070041,0x00000014,0x0000044b, + 0x00000417,0x0000014f,0x0000014f,0x00000444,0x0003003e,0x0000044b,0x0000044a,0x0004003d, + 0x0000001a,0x0000044c,0x00000428,0x0004003d,0x0000001a,0x0000044d,0x00000428,0x00070041, + 0x00000014,0x0000044f,0x00000417,0x0000014f,0x0000014f,0x0000044d,0x0004003d,0x00000013, + 0x00000450,0x0000044f,0x0003003e,0x0000044e,0x00000450,0x0003003e,0x00000451,0x00000390, + 0x00060039,0x00000013,0x00000452,0x00000023,0x0000044e,0x00000451,0x00070041,0x00000014, + 0x00000453,0x00000417,0x0000014f,0x0000014f,0x0000044c,0x0003003e,0x00000453,0x00000452, + 0x000200f9,0x0000042c,0x000200f8,0x0000042c,0x0004003d,0x0000001a,0x00000454,0x00000428, + 0x00050080,0x0000001a,0x00000455,0x00000454,0x00000194,0x0003003e,0x00000428,0x00000455, + 0x000200f9,0x00000429,0x000200f8,0x0000042b,0x000200f9,0x00000420,0x000200f8,0x00000420, + 0x0004003d,0x00000093,0x00000456,0x00000417,0x000200fe,0x00000456,0x00010038,0x00050036, + 0x00000013,0x0000009d,0x00000000,0x00000099,0x00030037,0x00000049,0x0000009a,0x00030037, + 0x0000005c,0x0000009b,0x00030037,0x0000005c,0x0000009c,0x000200f8,0x0000009e,0x0004003b, + 0x00000014,0x00000459,0x00000007,0x0004003b,0x00000084,0x0000045a,0x00000007,0x0004003b, + 0x0000005c,0x0000045b,0x00000007,0x0004003b,0x00000416,0x0000045e,0x00000007,0x0004003b, + 0x0000005c,0x0000045f,0x00000007,0x0004003b,0x0000005c,0x00000461,0x00000007,0x0004003b, + 0x00000049,0x00000468,0x00000007,0x0004003b,0x00000084,0x0000046a,0x00000007,0x0004003b, + 0x00000084,0x0000046c,0x00000007,0x0003003e,0x00000459,0x000001db,0x0004003d,0x00000038, + 0x0000045c,0x0000009b,0x0003003e,0x0000045b,0x0000045c,0x00050039,0x00000083,0x0000045d, + 0x00000091,0x0000045b,0x0003003e,0x0000045a,0x0000045d,0x0004003d,0x00000038,0x00000460, + 0x0000009b,0x0003003e,0x0000045f,0x00000460,0x0004003d,0x00000038,0x00000462,0x0000009c, + 0x0003003e,0x00000461,0x00000462,0x00060039,0x00000093,0x00000463,0x00000097,0x0000045f, + 0x00000461,0x0003003e,0x0000045e,0x00000463,0x00050041,0x0000041b,0x00000464,0x0000045e, + 0x00000194,0x0004003d,0x0000006e,0x00000465,0x00000464,0x000300f7,0x00000467,0x00000000, + 0x000400fa,0x00000465,0x00000466,0x00000467,0x000200f8,0x00000466,0x0004003d,0x00000032, + 0x00000469,0x0000009a,0x0003003e,0x00000468,0x00000469,0x0004003d,0x00000083,0x0000046b, + 0x0000045a,0x0003003e,0x0000046a,0x0000046b,0x00050041,0x00000084,0x0000046d,0x0000045e, + 0x0000014f,0x0004003d,0x00000083,0x0000046e,0x0000046d,0x0003003e,0x0000046c,0x0000046e, + 0x00070039,0x00000013,0x0000046f,0x0000008d,0x00000468,0x0000046a,0x0000046c,0x0003003e, + 0x00000459,0x0000046f,0x000200f9,0x00000467,0x000200f8,0x00000467,0x0004003d,0x00000013, + 0x00000470,0x00000459,0x000200fe,0x00000470,0x00010038,0x00050036,0x0000009f,0x000000a3, + 0x00000000,0x000000a0,0x00030037,0x0000005c,0x000000a1,0x00030037,0x00000007,0x000000a2, + 0x000200f8,0x000000a4,0x0004003b,0x00000049,0x00000473,0x00000007,0x0004003b,0x00000049, + 0x00000477,0x00000007,0x0004003b,0x00000049,0x00000478,0x00000007,0x0004003b,0x00000049, + 0x00000479,0x00000007,0x0004003b,0x0000005c,0x0000047b,0x00000007,0x0004003b,0x00000049, + 0x0000047c,0x00000007,0x0004003b,0x0000005c,0x0000047f,0x00000007,0x0004003b,0x00000014, + 0x00000488,0x00000007,0x0004003b,0x00000049,0x00000489,0x00000007,0x0004003b,0x0000005c, + 0x0000048b,0x00000007,0x0004003b,0x0000005c,0x0000048d,0x00000007,0x0004003b,0x000000aa, + 0x00000490,0x00000007,0x0004003b,0x00000014,0x00000496,0x00000007,0x0004003d,0x00000038, + 0x00000474,0x000000a1,0x0004006e,0x00000032,0x00000475,0x00000474,0x00040039,0x00000032, + 0x00000476,0x00000034,0x0003003e,0x00000477,0x00000475,0x0003003e,0x00000478,0x000001d7, + 0x0003003e,0x00000479,0x00000476,0x00070039,0x00000032,0x0000047a,0x00000077,0x00000477, + 0x00000478,0x00000479,0x0003003e,0x00000473,0x0000047a,0x0004003d,0x00000032,0x0000047d, + 0x00000473,0x0003003e,0x0000047c,0x0000047d,0x00050039,0x00000038,0x0000047e,0x00000053, + 0x0000047c,0x0003003e,0x0000047b,0x0000047e,0x0004003d,0x00000032,0x00000480,0x00000473, + 0x0004006f,0x00000038,0x00000481,0x00000480,0x00050050,0x00000038,0x00000483,0x00000482, + 0x00000482,0x00050081,0x00000038,0x00000484,0x00000481,0x00000483,0x00040039,0x00000032, + 0x00000485,0x00000034,0x0004006f,0x00000038,0x00000486,0x00000485,0x00050088,0x00000038, + 0x00000487,0x00000484,0x00000486,0x0003003e,0x0000047f,0x00000487,0x0004003d,0x00000032, + 0x0000048a,0x00000473,0x0003003e,0x00000489,0x0000048a,0x0004003d,0x00000038,0x0000048c, + 0x0000047f,0x0003003e,0x0000048b,0x0000048c,0x0004003d,0x00000038,0x0000048e,0x0000047b, + 0x0003003e,0x0000048d,0x0000048e,0x00070039,0x00000013,0x0000048f,0x0000009d,0x00000489, + 0x0000048b,0x0000048d,0x0003003e,0x00000488,0x0000048f,0x0003003e,0x00000490,0x00000491, + 0x0004003d,0x00000013,0x00000492,0x00000488,0x00050041,0x00000014,0x00000493,0x00000490, + 0x000001c2,0x0003003e,0x00000493,0x00000492,0x0004003d,0x00000013,0x00000494,0x00000488, + 0x000500b7,0x0000006e,0x00000495,0x00000494,0x000001db,0x000300f7,0x00000498,0x00000000, + 0x000400fa,0x00000495,0x00000497,0x0000049b,0x000200f8,0x00000497,0x0004003d,0x00000013, + 0x00000499,0x00000488,0x0006000c,0x00000013,0x0000049a,0x00000001,0x00000006,0x00000499, + 0x0003003e,0x00000496,0x0000049a,0x000200f9,0x00000498,0x000200f8,0x0000049b,0x0003003e, + 0x00000496,0x000001db,0x000200f9,0x00000498,0x000200f8,0x00000498,0x0004003d,0x00000013, + 0x0000049c,0x00000496,0x00050041,0x00000014,0x0000049d,0x00000490,0x00000175,0x0003003e, + 0x0000049d,0x0000049c,0x00050041,0x00000014,0x0000049e,0x00000490,0x0000016e,0x0003003e, + 0x0000049e,0x000001df,0x0004003d,0x0000009f,0x0000049f,0x00000490,0x000200fe,0x0000049f, + 0x00010038,0x00050036,0x0000009f,0x000000a8,0x00000000,0x000000a5,0x00030037,0x00000049, + 0x000000a6,0x00030037,0x00000007,0x000000a7,0x000200f8,0x000000a9,0x0004003b,0x00000049, + 0x000004a2,0x00000007,0x0004003b,0x00000007,0x000004a4,0x00000007,0x0004003d,0x00000032, + 0x000004a3,0x000000a6,0x0003003e,0x000004a2,0x000004a3,0x0003003e,0x000004a4,0x00000081, + 0x00060039,0x00000038,0x000004a5,0x0000005a,0x000004a2,0x000004a4,0x00050051,0x00000013, + 0x000004a6,0x000004a5,0x00000000,0x00050051,0x00000013,0x000004a7,0x000004a5,0x00000001, + 0x00070050,0x0000009f,0x000004a8,0x000004a6,0x000004a7,0x000001db,0x000001db,0x000200fe, + 0x000004a8,0x00010038,0x00050036,0x0000009f,0x000000b0,0x00000000,0x000000ab,0x00030037, + 0x000000aa,0x000000ac,0x00030037,0x000000aa,0x000000ad,0x00030037,0x000000aa,0x000000ae, + 0x00030037,0x000000aa,0x000000af,0x000200f8,0x000000b1,0x0004003d,0x0000009f,0x000004ab, + 0x000000ac,0x0004003d,0x0000009f,0x000004ac,0x000000ad,0x00050081,0x0000009f,0x000004ad, + 0x000004ab,0x000004ac,0x0004003d,0x0000009f,0x000004ae,0x000000ae,0x00050081,0x0000009f, + 0x000004af,0x000004ad,0x000004ae,0x0004003d,0x0000009f,0x000004b0,0x000000af,0x00050081, + 0x0000009f,0x000004b1,0x000004af,0x000004b0,0x0005008e,0x0000009f,0x000004b3,0x000004b1, + 0x000004b2,0x000200fe,0x000004b3,0x00010038,0x00050036,0x00000002,0x000000b7,0x00000000, + 0x000000b2,0x00030037,0x00000049,0x000000b3,0x00030037,0x000000aa,0x000000b4,0x00030037, + 0x00000007,0x000000b5,0x00030037,0x00000007,0x000000b6,0x000200f8,0x000000b8,0x0004003b, + 0x00000049,0x000004ba,0x00000007,0x0004003b,0x0000005c,0x000004bc,0x00000007,0x0004003b, + 0x00000007,0x000004bf,0x00000007,0x0004003d,0x00000006,0x000004b6,0x000000b5,0x000500ae, + 0x0000006e,0x000004b7,0x000004b6,0x000001c2,0x000300f7,0x000004b9,0x00000000,0x000400fa, + 0x000004b7,0x000004b8,0x000004b9,0x000200f8,0x000004b8,0x0004003d,0x00000032,0x000004bb, + 0x000000b3,0x0003003e,0x000004ba,0x000004bb,0x0004003d,0x0000009f,0x000004bd,0x000000b4, + 0x0007004f,0x00000038,0x000004be,0x000004bd,0x000004bd,0x00000000,0x00000001,0x0003003e, + 0x000004bc,0x000004be,0x0004003d,0x00000006,0x000004c0,0x000000b5,0x0003003e,0x000004bf, + 0x000004c0,0x00070039,0x00000002,0x000004c1,0x00000061,0x000004ba,0x000004bc,0x000004bf, + 0x000200f9,0x000004b9,0x000200f8,0x000004b9,0x000100fd,0x00010038,0x00050036,0x0000009f, + 0x000000bc,0x00000000,0x000000b9,0x00030037,0x00000007,0x000000ba,0x00030037,0x00000007, + 0x000000bb,0x000200f8,0x000000bd,0x0004003d,0x00000006,0x000004c7,0x000000ba,0x0004003d, + 0x00000006,0x000004c8,0x000000bb,0x00060041,0x000004c9,0x000004ca,0x000004c6,0x000004c7, + 0x000004c8,0x0004003d,0x00000013,0x000004cb,0x000004ca,0x0004003d,0x00000006,0x000004cd, + 0x000000ba,0x0004003d,0x00000006,0x000004ce,0x000000bb,0x00060041,0x000004c9,0x000004cf, + 0x000004cc,0x000004cd,0x000004ce,0x0004003d,0x00000013,0x000004d0,0x000004cf,0x0004003d, + 0x00000006,0x000004d2,0x000000ba,0x0004003d,0x00000006,0x000004d3,0x000000bb,0x00060041, + 0x000004c9,0x000004d4,0x000004d1,0x000004d2,0x000004d3,0x0004003d,0x00000013,0x000004d5, + 0x000004d4,0x0004003d,0x00000006,0x000004d7,0x000000ba,0x0004003d,0x00000006,0x000004d8, + 0x000000bb,0x00060041,0x000004c9,0x000004d9,0x000004d6,0x000004d7,0x000004d8,0x0004003d, + 0x00000013,0x000004da,0x000004d9,0x00070050,0x0000009f,0x000004db,0x000004cb,0x000004d0, + 0x000004d5,0x000004da,0x000200fe,0x000004db,0x00010038,0x00050036,0x00000002,0x000000c2, + 0x00000000,0x000000be,0x00030037,0x00000007,0x000000bf,0x00030037,0x00000007,0x000000c0, + 0x00030037,0x000000aa,0x000000c1,0x000200f8,0x000000c3,0x0004003d,0x00000006,0x000004de, + 0x000000bf,0x0004003d,0x00000006,0x000004df,0x000000c0,0x00050041,0x00000014,0x000004e0, + 0x000000c1,0x000001c2,0x0004003d,0x00000013,0x000004e1,0x000004e0,0x00060041,0x000004c9, + 0x000004e2,0x000004c6,0x000004de,0x000004df,0x0003003e,0x000004e2,0x000004e1,0x0004003d, + 0x00000006,0x000004e3,0x000000bf,0x0004003d,0x00000006,0x000004e4,0x000000c0,0x00050041, + 0x00000014,0x000004e5,0x000000c1,0x00000175,0x0004003d,0x00000013,0x000004e6,0x000004e5, + 0x00060041,0x000004c9,0x000004e7,0x000004cc,0x000004e3,0x000004e4,0x0003003e,0x000004e7, + 0x000004e6,0x0004003d,0x00000006,0x000004e8,0x000000bf,0x0004003d,0x00000006,0x000004e9, + 0x000000c0,0x00050041,0x00000014,0x000004ea,0x000000c1,0x0000016e,0x0004003d,0x00000013, + 0x000004eb,0x000004ea,0x00060041,0x000004c9,0x000004ec,0x000004d1,0x000004e8,0x000004e9, + 0x0003003e,0x000004ec,0x000004eb,0x0004003d,0x00000006,0x000004ed,0x000000bf,0x0004003d, + 0x00000006,0x000004ee,0x000000c0,0x00050041,0x00000014,0x000004ef,0x000000c1,0x0000016f, + 0x0004003d,0x00000013,0x000004f0,0x000004ef,0x00060041,0x000004c9,0x000004f1,0x000004d6, + 0x000004ed,0x000004ee,0x0003003e,0x000004f1,0x000004f0,0x000100fd,0x00010038,0x00050036, + 0x00000002,0x000000c4,0x00000000,0x00000003,0x000200f8,0x000000c5,0x000300e1,0x0000016e, + 0x000004f2,0x000400e0,0x0000016e,0x0000016e,0x000004f3,0x000100fd,0x00010038,0x00050036, + 0x0000006e,0x000000ca,0x00000000,0x000000c6,0x00030037,0x00000007,0x000000c7,0x00030037, + 0x00000007,0x000000c8,0x00030037,0x00000007,0x000000c9,0x000200f8,0x000000cb,0x0004003b, + 0x00000007,0x000004f8,0x00000007,0x0004003d,0x00000006,0x000004f4,0x000000c8,0x000500aa, + 0x0000006e,0x000004f5,0x000004f4,0x000001c2,0x000300f7,0x000004f7,0x00000000,0x000400fa, + 0x000004f5,0x000004f6,0x000004f7,0x000200f8,0x000004f6,0x0004003d,0x00000006,0x000004f9, + 0x000000c9,0x0003003e,0x000004f8,0x000004f9,0x00050039,0x00000002,0x000004fa,0x0000007a, + 0x000004f8,0x000200f9,0x000004f7,0x000200f8,0x000004f7,0x00040039,0x00000002,0x000004fb, + 0x000000c4,0x00040039,0x00000006,0x000004fc,0x0000007c,0x0004003d,0x00000006,0x000004fd, + 0x000000c7,0x00050082,0x00000006,0x000004fe,0x000004fd,0x00000175,0x000500ab,0x0000006e, + 0x000004ff,0x000004fc,0x000004fe,0x000200fe,0x000004ff,0x00010038,0x00050036,0x0000009f, + 0x000000d2,0x00000000,0x000000cd,0x00030037,0x000000cc,0x000000ce,0x00030037,0x000000cc, + 0x000000cf,0x00030037,0x000000cc,0x000000d0,0x00030037,0x000000cc,0x000000d1,0x000200f8, + 0x000000d3,0x0004003b,0x000000aa,0x00000502,0x00000007,0x0004003b,0x00000007,0x00000503, + 0x00000007,0x0004003b,0x00000007,0x00000506,0x00000007,0x0004003b,0x000000aa,0x0000050a, + 0x00000007,0x0004003b,0x00000007,0x0000050b,0x00000007,0x0004003b,0x00000007,0x0000050e, + 0x00000007,0x0004003b,0x000000aa,0x00000512,0x00000007,0x0004003b,0x00000007,0x00000513, + 0x00000007,0x0004003b,0x00000007,0x00000516,0x00000007,0x0004003b,0x000000aa,0x0000051a, + 0x00000007,0x0004003b,0x00000007,0x0000051b,0x00000007,0x0004003b,0x00000007,0x0000051e, + 0x00000007,0x0004003b,0x000000aa,0x00000522,0x00000007,0x0004003b,0x000000aa,0x00000524, + 0x00000007,0x0004003b,0x000000aa,0x00000526,0x00000007,0x0004003b,0x000000aa,0x00000528, + 0x00000007,0x00050041,0x00000007,0x00000504,0x000000ce,0x000001c2,0x0004003d,0x00000006, + 0x00000505,0x00000504,0x0003003e,0x00000503,0x00000505,0x00050041,0x00000007,0x00000507, + 0x000000ce,0x00000175,0x0004003d,0x00000006,0x00000508,0x00000507,0x0003003e,0x00000506, + 0x00000508,0x00060039,0x0000009f,0x00000509,0x000000bc,0x00000503,0x00000506,0x0003003e, + 0x00000502,0x00000509,0x00050041,0x00000007,0x0000050c,0x000000cf,0x000001c2,0x0004003d, + 0x00000006,0x0000050d,0x0000050c,0x0003003e,0x0000050b,0x0000050d,0x00050041,0x00000007, + 0x0000050f,0x000000cf,0x00000175,0x0004003d,0x00000006,0x00000510,0x0000050f,0x0003003e, + 0x0000050e,0x00000510,0x00060039,0x0000009f,0x00000511,0x000000bc,0x0000050b,0x0000050e, + 0x0003003e,0x0000050a,0x00000511,0x00050041,0x00000007,0x00000514,0x000000d0,0x000001c2, + 0x0004003d,0x00000006,0x00000515,0x00000514,0x0003003e,0x00000513,0x00000515,0x00050041, + 0x00000007,0x00000517,0x000000d0,0x00000175,0x0004003d,0x00000006,0x00000518,0x00000517, + 0x0003003e,0x00000516,0x00000518,0x00060039,0x0000009f,0x00000519,0x000000bc,0x00000513, + 0x00000516,0x0003003e,0x00000512,0x00000519,0x00050041,0x00000007,0x0000051c,0x000000d1, + 0x000001c2,0x0004003d,0x00000006,0x0000051d,0x0000051c,0x0003003e,0x0000051b,0x0000051d, + 0x00050041,0x00000007,0x0000051f,0x000000d1,0x00000175,0x0004003d,0x00000006,0x00000520, + 0x0000051f,0x0003003e,0x0000051e,0x00000520,0x00060039,0x0000009f,0x00000521,0x000000bc, + 0x0000051b,0x0000051e,0x0003003e,0x0000051a,0x00000521,0x0004003d,0x0000009f,0x00000523, + 0x00000502,0x0003003e,0x00000522,0x00000523,0x0004003d,0x0000009f,0x00000525,0x0000050a, + 0x0003003e,0x00000524,0x00000525,0x0004003d,0x0000009f,0x00000527,0x00000512,0x0003003e, + 0x00000526,0x00000527,0x0004003d,0x0000009f,0x00000529,0x0000051a,0x0003003e,0x00000528, + 0x00000529,0x00080039,0x0000009f,0x0000052a,0x000000b0,0x00000522,0x00000524,0x00000526, + 0x00000528,0x000200fe,0x0000052a,0x00010038,0x00050036,0x0000009f,0x000000da,0x00000000, + 0x000000d4,0x00030037,0x000000cc,0x000000d5,0x00030037,0x000000cc,0x000000d6,0x00030037, + 0x000000cc,0x000000d7,0x00030037,0x000000cc,0x000000d8,0x00030037,0x00000007,0x000000d9, + 0x000200f8,0x000000db,0x0004003b,0x000000aa,0x0000052d,0x00000007,0x0004003b,0x00000049, + 0x00000530,0x00000007,0x0004003b,0x00000007,0x00000531,0x00000007,0x0004003b,0x000000aa, + 0x00000534,0x00000007,0x0004003b,0x00000049,0x00000537,0x00000007,0x0004003b,0x00000007, + 0x00000538,0x00000007,0x0004003b,0x000000aa,0x0000053b,0x00000007,0x0004003b,0x00000049, + 0x0000053e,0x00000007,0x0004003b,0x00000007,0x0000053f,0x00000007,0x0004003b,0x000000aa, + 0x00000542,0x00000007,0x0004003b,0x00000049,0x00000545,0x00000007,0x0004003b,0x00000007, + 0x00000546,0x00000007,0x0004003b,0x000000aa,0x00000549,0x00000007,0x0004003b,0x000000aa, + 0x0000054b,0x00000007,0x0004003b,0x000000aa,0x0000054d,0x00000007,0x0004003b,0x000000aa, + 0x0000054f,0x00000007,0x0004003d,0x0000002d,0x0000052e,0x000000d5,0x0004007c,0x00000032, + 0x0000052f,0x0000052e,0x0003003e,0x00000530,0x0000052f,0x0004003d,0x00000006,0x00000532, + 0x000000d9,0x0003003e,0x00000531,0x00000532,0x00060039,0x0000009f,0x00000533,0x000000a8, + 0x00000530,0x00000531,0x0003003e,0x0000052d,0x00000533,0x0004003d,0x0000002d,0x00000535, + 0x000000d6,0x0004007c,0x00000032,0x00000536,0x00000535,0x0003003e,0x00000537,0x00000536, + 0x0004003d,0x00000006,0x00000539,0x000000d9,0x0003003e,0x00000538,0x00000539,0x00060039, + 0x0000009f,0x0000053a,0x000000a8,0x00000537,0x00000538,0x0003003e,0x00000534,0x0000053a, + 0x0004003d,0x0000002d,0x0000053c,0x000000d7,0x0004007c,0x00000032,0x0000053d,0x0000053c, + 0x0003003e,0x0000053e,0x0000053d,0x0004003d,0x00000006,0x00000540,0x000000d9,0x0003003e, + 0x0000053f,0x00000540,0x00060039,0x0000009f,0x00000541,0x000000a8,0x0000053e,0x0000053f, + 0x0003003e,0x0000053b,0x00000541,0x0004003d,0x0000002d,0x00000543,0x000000d8,0x0004007c, + 0x00000032,0x00000544,0x00000543,0x0003003e,0x00000545,0x00000544,0x0004003d,0x00000006, + 0x00000547,0x000000d9,0x0003003e,0x00000546,0x00000547,0x00060039,0x0000009f,0x00000548, + 0x000000a8,0x00000545,0x00000546,0x0003003e,0x00000542,0x00000548,0x0004003d,0x0000009f, + 0x0000054a,0x0000052d,0x0003003e,0x00000549,0x0000054a,0x0004003d,0x0000009f,0x0000054c, + 0x00000534,0x0003003e,0x0000054b,0x0000054c,0x0004003d,0x0000009f,0x0000054e,0x0000053b, + 0x0003003e,0x0000054d,0x0000054e,0x0004003d,0x0000009f,0x00000550,0x00000542,0x0003003e, + 0x0000054f,0x00000550,0x00080039,0x0000009f,0x00000551,0x000000b0,0x00000549,0x0000054b, + 0x0000054d,0x0000054f,0x000200fe,0x00000551,0x00010038,0x00050036,0x0000009f,0x000000df, + 0x00000000,0x000000dc,0x00030037,0x000000cc,0x000000dd,0x00030037,0x00000007,0x000000de, + 0x000200f8,0x000000e0,0x0004003b,0x000000cc,0x00000560,0x00000007,0x0004003b,0x000000cc, + 0x00000561,0x00000007,0x0004003b,0x000000cc,0x00000562,0x00000007,0x0004003b,0x000000cc, + 0x00000563,0x00000007,0x0004003b,0x00000007,0x00000564,0x00000007,0x0004003d,0x0000002d, + 0x00000554,0x000000dd,0x00050080,0x0000002d,0x00000556,0x00000554,0x00000555,0x0004003d, + 0x0000002d,0x00000557,0x000000dd,0x00050080,0x0000002d,0x00000559,0x00000557,0x00000558, + 0x0004003d,0x0000002d,0x0000055a,0x000000dd,0x00050080,0x0000002d,0x0000055c,0x0000055a, + 0x0000055b,0x0004003d,0x0000002d,0x0000055d,0x000000dd,0x00050080,0x0000002d,0x0000055f, + 0x0000055d,0x0000055e,0x0003003e,0x00000560,0x00000556,0x0003003e,0x00000561,0x00000559, + 0x0003003e,0x00000562,0x0000055c,0x0003003e,0x00000563,0x0000055f,0x0004003d,0x00000006, + 0x00000565,0x000000de,0x0003003e,0x00000564,0x00000565,0x00090039,0x0000009f,0x00000566, + 0x000000da,0x00000560,0x00000561,0x00000562,0x00000563,0x00000564,0x000200fe,0x00000566, + 0x00010038,0x00050036,0x0000009f,0x000000e6,0x00000000,0x000000d4,0x00030037,0x000000cc, + 0x000000e1,0x00030037,0x000000cc,0x000000e2,0x00030037,0x000000cc,0x000000e3,0x00030037, + 0x000000cc,0x000000e4,0x00030037,0x00000007,0x000000e5,0x000200f8,0x000000e7,0x0004003b, + 0x000000aa,0x00000569,0x00000007,0x0004003b,0x0000005c,0x0000056d,0x00000007,0x0004003b, + 0x00000007,0x0000056e,0x00000007,0x0004003b,0x000000aa,0x00000571,0x00000007,0x0004003b, + 0x0000005c,0x00000575,0x00000007,0x0004003b,0x00000007,0x00000576,0x00000007,0x0004003b, + 0x000000aa,0x00000579,0x00000007,0x0004003b,0x0000005c,0x0000057d,0x00000007,0x0004003b, + 0x00000007,0x0000057e,0x00000007,0x0004003b,0x000000aa,0x00000581,0x00000007,0x0004003b, + 0x0000005c,0x00000585,0x00000007,0x0004003b,0x00000007,0x00000586,0x00000007,0x0004003b, + 0x000000aa,0x00000589,0x00000007,0x0004003b,0x000000aa,0x0000058b,0x00000007,0x0004003b, + 0x000000aa,0x0000058d,0x00000007,0x0004003b,0x000000aa,0x0000058f,0x00000007,0x0004003d, + 0x0000002d,0x0000056a,0x000000e1,0x0004007c,0x00000032,0x0000056b,0x0000056a,0x0004006f, + 0x00000038,0x0000056c,0x0000056b,0x0003003e,0x0000056d,0x0000056c,0x0004003d,0x00000006, + 0x0000056f,0x000000e5,0x0003003e,0x0000056e,0x0000056f,0x00060039,0x0000009f,0x00000570, + 0x000000a3,0x0000056d,0x0000056e,0x0003003e,0x00000569,0x00000570,0x0004003d,0x0000002d, + 0x00000572,0x000000e2,0x0004007c,0x00000032,0x00000573,0x00000572,0x0004006f,0x00000038, + 0x00000574,0x00000573,0x0003003e,0x00000575,0x00000574,0x0004003d,0x00000006,0x00000577, + 0x000000e5,0x0003003e,0x00000576,0x00000577,0x00060039,0x0000009f,0x00000578,0x000000a3, + 0x00000575,0x00000576,0x0003003e,0x00000571,0x00000578,0x0004003d,0x0000002d,0x0000057a, + 0x000000e3,0x0004007c,0x00000032,0x0000057b,0x0000057a,0x0004006f,0x00000038,0x0000057c, + 0x0000057b,0x0003003e,0x0000057d,0x0000057c,0x0004003d,0x00000006,0x0000057f,0x000000e5, + 0x0003003e,0x0000057e,0x0000057f,0x00060039,0x0000009f,0x00000580,0x000000a3,0x0000057d, + 0x0000057e,0x0003003e,0x00000579,0x00000580,0x0004003d,0x0000002d,0x00000582,0x000000e4, + 0x0004007c,0x00000032,0x00000583,0x00000582,0x0004006f,0x00000038,0x00000584,0x00000583, + 0x0003003e,0x00000585,0x00000584,0x0004003d,0x00000006,0x00000587,0x000000e5,0x0003003e, + 0x00000586,0x00000587,0x00060039,0x0000009f,0x00000588,0x000000a3,0x00000585,0x00000586, + 0x0003003e,0x00000581,0x00000588,0x0004003d,0x0000009f,0x0000058a,0x00000569,0x0003003e, + 0x00000589,0x0000058a,0x0004003d,0x0000009f,0x0000058c,0x00000571,0x0003003e,0x0000058b, + 0x0000058c,0x0004003d,0x0000009f,0x0000058e,0x00000579,0x0003003e,0x0000058d,0x0000058e, + 0x0004003d,0x0000009f,0x00000590,0x00000581,0x0003003e,0x0000058f,0x00000590,0x00080039, + 0x0000009f,0x00000591,0x000000b0,0x00000589,0x0000058b,0x0000058d,0x0000058f,0x000200fe, + 0x00000591,0x00010038,0x00050036,0x0000009f,0x000000ea,0x00000000,0x000000dc,0x00030037, + 0x000000cc,0x000000e8,0x00030037,0x00000007,0x000000e9,0x000200f8,0x000000eb,0x0004003b, + 0x000000cc,0x0000059c,0x00000007,0x0004003b,0x000000cc,0x0000059d,0x00000007,0x0004003b, + 0x000000cc,0x0000059e,0x00000007,0x0004003b,0x000000cc,0x0000059f,0x00000007,0x0004003b, + 0x00000007,0x000005a0,0x00000007,0x0004003d,0x0000002d,0x00000594,0x000000e8,0x00050080, + 0x0000002d,0x00000595,0x00000594,0x00000555,0x0004003d,0x0000002d,0x00000596,0x000000e8, + 0x00050080,0x0000002d,0x00000597,0x00000596,0x00000558,0x0004003d,0x0000002d,0x00000598, + 0x000000e8,0x00050080,0x0000002d,0x00000599,0x00000598,0x0000055b,0x0004003d,0x0000002d, + 0x0000059a,0x000000e8,0x00050080,0x0000002d,0x0000059b,0x0000059a,0x0000055e,0x0003003e, + 0x0000059c,0x00000595,0x0003003e,0x0000059d,0x00000597,0x0003003e,0x0000059e,0x00000599, + 0x0003003e,0x0000059f,0x0000059b,0x0004003d,0x00000006,0x000005a1,0x000000e9,0x0003003e, + 0x000005a0,0x000005a1,0x00090039,0x0000009f,0x000005a2,0x000000e6,0x0000059c,0x0000059d, + 0x0000059e,0x0000059f,0x000005a0,0x000200fe,0x000005a2,0x00010038,0x00050036,0x00000002, + 0x000000f3,0x00000000,0x000000ec,0x00030037,0x00000007,0x000000ed,0x00030037,0x00000007, + 0x000000ee,0x00030037,0x000000cc,0x000000ef,0x00030037,0x00000007,0x000000f0,0x00030037, + 0x00000007,0x000000f1,0x00030037,0x00000007,0x000000f2,0x000200f8,0x000000f4,0x0004003b, + 0x00000049,0x000005a5,0x00000007,0x0004003b,0x00000049,0x000005b3,0x00000007,0x0004003b, + 0x000005c0,0x000005c1,0x00000007,0x0004003b,0x000000cc,0x000005c4,0x00000007,0x0004003b, + 0x00000007,0x000005c5,0x00000007,0x0004003b,0x00000049,0x000005c9,0x00000007,0x0004003b, + 0x000000aa,0x000005cb,0x00000007,0x0004003b,0x00000007,0x000005ce,0x00000007,0x0004003b, + 0x00000007,0x000005cf,0x00000007,0x0004003b,0x000000cc,0x000005ec,0x00000007,0x0004003b, + 0x00000007,0x000005ed,0x00000007,0x0004003b,0x00000049,0x000005f1,0x00000007,0x0004003b, + 0x000000aa,0x000005f3,0x00000007,0x0004003b,0x00000007,0x000005f6,0x00000007,0x0004003b, + 0x00000007,0x000005f7,0x00000007,0x0004003b,0x000000cc,0x00000614,0x00000007,0x0004003b, + 0x00000007,0x00000615,0x00000007,0x0004003b,0x00000049,0x00000619,0x00000007,0x0004003b, + 0x000000aa,0x0000061b,0x00000007,0x0004003b,0x00000007,0x0000061e,0x00000007,0x0004003b, + 0x00000007,0x0000061f,0x00000007,0x0004003b,0x000000cc,0x0000063e,0x00000007,0x0004003b, + 0x00000007,0x0000063f,0x00000007,0x0004003b,0x00000049,0x00000643,0x00000007,0x0004003b, + 0x000000aa,0x00000645,0x00000007,0x0004003b,0x00000007,0x00000648,0x00000007,0x0004003b, + 0x00000007,0x00000649,0x00000007,0x0004003b,0x00000007,0x00000651,0x00000007,0x0004003b, + 0x00000007,0x0000065a,0x00000007,0x0004003b,0x00000007,0x0000065c,0x00000007,0x0004003b, + 0x000000aa,0x0000065e,0x00000007,0x0004003b,0x000000cc,0x00000684,0x00000007,0x0004003b, + 0x000000cc,0x00000685,0x00000007,0x0004003b,0x000000cc,0x00000686,0x00000007,0x0004003b, + 0x000000cc,0x00000687,0x00000007,0x0004003b,0x00000049,0x0000069e,0x00000007,0x0004003b, + 0x000000aa,0x0000069f,0x00000007,0x0004003b,0x00000007,0x000006a2,0x00000007,0x0004003b, + 0x00000007,0x000006a3,0x00000007,0x0004003b,0x00000007,0x000006b1,0x00000007,0x0004003b, + 0x00000007,0x000006b2,0x00000007,0x0004003b,0x000000aa,0x000006b3,0x00000007,0x0004003b, + 0x00000007,0x000006bb,0x00000007,0x0004003b,0x00000007,0x000006bc,0x00000007,0x0004003b, + 0x000000aa,0x000006bd,0x00000007,0x0004003b,0x00000007,0x000006c5,0x00000007,0x0004003b, + 0x00000007,0x000006c6,0x00000007,0x0004003b,0x000000aa,0x000006c7,0x00000007,0x0004003b, + 0x00000007,0x000006cf,0x00000007,0x0004003b,0x00000007,0x000006d0,0x00000007,0x0004003b, + 0x000000aa,0x000006d1,0x00000007,0x0004003d,0x0000002d,0x000005a6,0x000000ef,0x00050050, + 0x0000002d,0x000005a8,0x000005a7,0x000005a7,0x00050084,0x0000002d,0x000005a9,0x000005a6, + 0x000005a8,0x0004007c,0x00000032,0x000005aa,0x000005a9,0x0004003d,0x00000006,0x000005ab, + 0x000000ed,0x00050084,0x00000006,0x000005ac,0x000005ab,0x0000016e,0x0004007c,0x0000001a, + 0x000005ad,0x000005ac,0x0004003d,0x00000006,0x000005ae,0x000000ee,0x00050084,0x00000006, + 0x000005af,0x000005ae,0x0000016e,0x0004007c,0x0000001a,0x000005b0,0x000005af,0x00050050, + 0x00000032,0x000005b1,0x000005ad,0x000005b0,0x00050080,0x00000032,0x000005b2,0x000005aa, + 0x000005b1,0x0003003e,0x000005a5,0x000005b2,0x0004003d,0x0000002d,0x000005b4,0x000000ef, + 0x00050050,0x0000002d,0x000005b6,0x000005b5,0x000005b5,0x00050084,0x0000002d,0x000005b7, + 0x000005b4,0x000005b6,0x0004007c,0x00000032,0x000005b8,0x000005b7,0x0004003d,0x00000006, + 0x000005b9,0x000000ed,0x0004007c,0x0000001a,0x000005ba,0x000005b9,0x0004003d,0x00000006, + 0x000005bb,0x000000ee,0x0004007c,0x0000001a,0x000005bc,0x000005bb,0x00050050,0x00000032, + 0x000005bd,0x000005ba,0x000005bc,0x00050080,0x00000032,0x000005be,0x000005b8,0x000005bd, + 0x0003003e,0x000005b3,0x000005be,0x0004003d,0x00000032,0x000005c2,0x000005a5,0x0004007c, + 0x0000002d,0x000005c3,0x000005c2,0x0003003e,0x000005c4,0x000005c3,0x0004003d,0x00000006, + 0x000005c6,0x000000f2,0x0003003e,0x000005c5,0x000005c6,0x00060039,0x0000009f,0x000005c7, + 0x000000ea,0x000005c4,0x000005c5,0x00050041,0x000000aa,0x000005c8,0x000005c1,0x0000014f, + 0x0003003e,0x000005c8,0x000005c7,0x0004003d,0x00000032,0x000005ca,0x000005b3,0x0003003e, + 0x000005c9,0x000005ca,0x00050041,0x000000aa,0x000005cc,0x000005c1,0x0000014f,0x0004003d, + 0x0000009f,0x000005cd,0x000005cc,0x0003003e,0x000005cb,0x000005cd,0x0003003e,0x000005ce, + 0x000001c2,0x0004003d,0x00000006,0x000005d0,0x000000f2,0x0003003e,0x000005cf,0x000005d0, + 0x00080039,0x00000002,0x000005d1,0x000000b7,0x000005c9,0x000005cb,0x000005ce,0x000005cf, + 0x0004003d,0x0000002d,0x000005d2,0x000000ef,0x00050050,0x0000002d,0x000005d3,0x000005a7, + 0x000005a7,0x00050084,0x0000002d,0x000005d4,0x000005d2,0x000005d3,0x0004007c,0x00000032, + 0x000005d5,0x000005d4,0x0004003d,0x00000006,0x000005d6,0x000000ed,0x00050084,0x00000006, + 0x000005d7,0x000005d6,0x0000016e,0x00050080,0x00000006,0x000005d8,0x000005d7,0x000005b5, + 0x0004007c,0x0000001a,0x000005d9,0x000005d8,0x0004003d,0x00000006,0x000005da,0x000000ee, + 0x00050084,0x00000006,0x000005db,0x000005da,0x0000016e,0x0004007c,0x0000001a,0x000005dc, + 0x000005db,0x00050050,0x00000032,0x000005dd,0x000005d9,0x000005dc,0x00050080,0x00000032, + 0x000005de,0x000005d5,0x000005dd,0x0003003e,0x000005a5,0x000005de,0x0004003d,0x0000002d, + 0x000005df,0x000000ef,0x00050050,0x0000002d,0x000005e0,0x000005b5,0x000005b5,0x00050084, + 0x0000002d,0x000005e1,0x000005df,0x000005e0,0x0004007c,0x00000032,0x000005e2,0x000005e1, + 0x0004003d,0x00000006,0x000005e3,0x000000ed,0x00050080,0x00000006,0x000005e4,0x000005e3, + 0x000004c2,0x0004007c,0x0000001a,0x000005e5,0x000005e4,0x0004003d,0x00000006,0x000005e6, + 0x000000ee,0x0004007c,0x0000001a,0x000005e7,0x000005e6,0x00050050,0x00000032,0x000005e8, + 0x000005e5,0x000005e7,0x00050080,0x00000032,0x000005e9,0x000005e2,0x000005e8,0x0003003e, + 0x000005b3,0x000005e9,0x0004003d,0x00000032,0x000005ea,0x000005a5,0x0004007c,0x0000002d, + 0x000005eb,0x000005ea,0x0003003e,0x000005ec,0x000005eb,0x0004003d,0x00000006,0x000005ee, + 0x000000f2,0x0003003e,0x000005ed,0x000005ee,0x00060039,0x0000009f,0x000005ef,0x000000ea, + 0x000005ec,0x000005ed,0x00050041,0x000000aa,0x000005f0,0x000005c1,0x00000194,0x0003003e, + 0x000005f0,0x000005ef,0x0004003d,0x00000032,0x000005f2,0x000005b3,0x0003003e,0x000005f1, + 0x000005f2,0x00050041,0x000000aa,0x000005f4,0x000005c1,0x00000194,0x0004003d,0x0000009f, + 0x000005f5,0x000005f4,0x0003003e,0x000005f3,0x000005f5,0x0003003e,0x000005f6,0x000001c2, + 0x0004003d,0x00000006,0x000005f8,0x000000f2,0x0003003e,0x000005f7,0x000005f8,0x00080039, + 0x00000002,0x000005f9,0x000000b7,0x000005f1,0x000005f3,0x000005f6,0x000005f7,0x0004003d, + 0x0000002d,0x000005fa,0x000000ef,0x00050050,0x0000002d,0x000005fb,0x000005a7,0x000005a7, + 0x00050084,0x0000002d,0x000005fc,0x000005fa,0x000005fb,0x0004007c,0x00000032,0x000005fd, + 0x000005fc,0x0004003d,0x00000006,0x000005fe,0x000000ed,0x00050084,0x00000006,0x000005ff, + 0x000005fe,0x0000016e,0x0004007c,0x0000001a,0x00000600,0x000005ff,0x0004003d,0x00000006, + 0x00000601,0x000000ee,0x00050084,0x00000006,0x00000602,0x00000601,0x0000016e,0x00050080, + 0x00000006,0x00000603,0x00000602,0x000005b5,0x0004007c,0x0000001a,0x00000604,0x00000603, + 0x00050050,0x00000032,0x00000605,0x00000600,0x00000604,0x00050080,0x00000032,0x00000606, + 0x000005fd,0x00000605,0x0003003e,0x000005a5,0x00000606,0x0004003d,0x0000002d,0x00000607, + 0x000000ef,0x00050050,0x0000002d,0x00000608,0x000005b5,0x000005b5,0x00050084,0x0000002d, + 0x00000609,0x00000607,0x00000608,0x0004007c,0x00000032,0x0000060a,0x00000609,0x0004003d, + 0x00000006,0x0000060b,0x000000ed,0x0004007c,0x0000001a,0x0000060c,0x0000060b,0x0004003d, + 0x00000006,0x0000060d,0x000000ee,0x00050080,0x00000006,0x0000060e,0x0000060d,0x000004c2, + 0x0004007c,0x0000001a,0x0000060f,0x0000060e,0x00050050,0x00000032,0x00000610,0x0000060c, + 0x0000060f,0x00050080,0x00000032,0x00000611,0x0000060a,0x00000610,0x0003003e,0x000005b3, + 0x00000611,0x0004003d,0x00000032,0x00000612,0x000005a5,0x0004007c,0x0000002d,0x00000613, + 0x00000612,0x0003003e,0x00000614,0x00000613,0x0004003d,0x00000006,0x00000616,0x000000f2, + 0x0003003e,0x00000615,0x00000616,0x00060039,0x0000009f,0x00000617,0x000000ea,0x00000614, + 0x00000615,0x00050041,0x000000aa,0x00000618,0x000005c1,0x000001b6,0x0003003e,0x00000618, + 0x00000617,0x0004003d,0x00000032,0x0000061a,0x000005b3,0x0003003e,0x00000619,0x0000061a, + 0x00050041,0x000000aa,0x0000061c,0x000005c1,0x000001b6,0x0004003d,0x0000009f,0x0000061d, + 0x0000061c,0x0003003e,0x0000061b,0x0000061d,0x0003003e,0x0000061e,0x000001c2,0x0004003d, + 0x00000006,0x00000620,0x000000f2,0x0003003e,0x0000061f,0x00000620,0x00080039,0x00000002, + 0x00000621,0x000000b7,0x00000619,0x0000061b,0x0000061e,0x0000061f,0x0004003d,0x0000002d, + 0x00000622,0x000000ef,0x00050050,0x0000002d,0x00000623,0x000005a7,0x000005a7,0x00050084, + 0x0000002d,0x00000624,0x00000622,0x00000623,0x0004007c,0x00000032,0x00000625,0x00000624, + 0x0004003d,0x00000006,0x00000626,0x000000ed,0x00050084,0x00000006,0x00000627,0x00000626, + 0x0000016e,0x00050080,0x00000006,0x00000628,0x00000627,0x000005b5,0x0004007c,0x0000001a, + 0x00000629,0x00000628,0x0004003d,0x00000006,0x0000062a,0x000000ee,0x00050084,0x00000006, + 0x0000062b,0x0000062a,0x0000016e,0x00050080,0x00000006,0x0000062c,0x0000062b,0x000005b5, + 0x0004007c,0x0000001a,0x0000062d,0x0000062c,0x00050050,0x00000032,0x0000062e,0x00000629, + 0x0000062d,0x00050080,0x00000032,0x0000062f,0x00000625,0x0000062e,0x0003003e,0x000005a5, + 0x0000062f,0x0004003d,0x0000002d,0x00000630,0x000000ef,0x00050050,0x0000002d,0x00000631, + 0x000005b5,0x000005b5,0x00050084,0x0000002d,0x00000632,0x00000630,0x00000631,0x0004007c, + 0x00000032,0x00000633,0x00000632,0x0004003d,0x00000006,0x00000634,0x000000ed,0x00050080, + 0x00000006,0x00000635,0x00000634,0x000004c2,0x0004007c,0x0000001a,0x00000636,0x00000635, + 0x0004003d,0x00000006,0x00000637,0x000000ee,0x00050080,0x00000006,0x00000638,0x00000637, + 0x000004c2,0x0004007c,0x0000001a,0x00000639,0x00000638,0x00050050,0x00000032,0x0000063a, + 0x00000636,0x00000639,0x00050080,0x00000032,0x0000063b,0x00000633,0x0000063a,0x0003003e, + 0x000005b3,0x0000063b,0x0004003d,0x00000032,0x0000063c,0x000005a5,0x0004007c,0x0000002d, + 0x0000063d,0x0000063c,0x0003003e,0x0000063e,0x0000063d,0x0004003d,0x00000006,0x00000640, + 0x000000f2,0x0003003e,0x0000063f,0x00000640,0x00060039,0x0000009f,0x00000641,0x000000ea, + 0x0000063e,0x0000063f,0x00050041,0x000000aa,0x00000642,0x000005c1,0x000002bd,0x0003003e, + 0x00000642,0x00000641,0x0004003d,0x00000032,0x00000644,0x000005b3,0x0003003e,0x00000643, + 0x00000644,0x00050041,0x000000aa,0x00000646,0x000005c1,0x000002bd,0x0004003d,0x0000009f, + 0x00000647,0x00000646,0x0003003e,0x00000645,0x00000647,0x0003003e,0x00000648,0x000001c2, + 0x0004003d,0x00000006,0x0000064a,0x000000f2,0x0003003e,0x00000649,0x0000064a,0x00080039, + 0x00000002,0x0000064b,0x000000b7,0x00000643,0x00000645,0x00000648,0x00000649,0x0004003d, + 0x00000006,0x0000064c,0x000000f1,0x000500b2,0x0000006e,0x0000064d,0x0000064c,0x00000175, + 0x000300f7,0x0000064f,0x00000000,0x000400fa,0x0000064d,0x0000064e,0x0000064f,0x000200f8, + 0x0000064e,0x000100fd,0x000200f8,0x0000064f,0x0003003e,0x00000651,0x000001c2,0x000200f9, + 0x00000652,0x000200f8,0x00000652,0x000400f6,0x00000654,0x00000655,0x00000000,0x000200f9, + 0x00000656,0x000200f8,0x00000656,0x0004003d,0x00000006,0x00000657,0x00000651,0x000500b0, + 0x0000006e,0x00000658,0x00000657,0x0000020e,0x000400fa,0x00000658,0x00000653,0x00000654, + 0x000200f8,0x00000653,0x0004003d,0x00000006,0x00000659,0x00000651,0x0004003d,0x00000006, + 0x0000065b,0x000000ed,0x0003003e,0x0000065a,0x0000065b,0x0004003d,0x00000006,0x0000065d, + 0x000000ee,0x0003003e,0x0000065c,0x0000065d,0x00050041,0x000000aa,0x0000065f,0x000005c1, + 0x00000659,0x0004003d,0x0000009f,0x00000660,0x0000065f,0x0003003e,0x0000065e,0x00000660, + 0x00070039,0x00000002,0x00000661,0x000000c2,0x0000065a,0x0000065c,0x0000065e,0x00040039, + 0x00000002,0x00000662,0x000000c4,0x0004003d,0x00000006,0x00000663,0x000000f0,0x000500b0, + 0x0000006e,0x00000664,0x00000663,0x000005a7,0x000300f7,0x00000666,0x00000000,0x000400fa, + 0x00000664,0x00000665,0x00000666,0x000200f8,0x00000665,0x0004003d,0x00000006,0x00000667, + 0x00000651,0x0004003d,0x00000006,0x00000668,0x000000ed,0x00050084,0x00000006,0x00000669, + 0x00000668,0x0000016e,0x00050080,0x00000006,0x0000066a,0x00000669,0x000001c2,0x0004003d, + 0x00000006,0x0000066b,0x000000ee,0x00050084,0x00000006,0x0000066c,0x0000066b,0x0000016e, + 0x00050080,0x00000006,0x0000066d,0x0000066c,0x000001c2,0x00050050,0x0000002d,0x0000066e, + 0x0000066a,0x0000066d,0x0004003d,0x00000006,0x0000066f,0x000000ed,0x00050084,0x00000006, + 0x00000670,0x0000066f,0x0000016e,0x00050080,0x00000006,0x00000671,0x00000670,0x00000175, + 0x0004003d,0x00000006,0x00000672,0x000000ee,0x00050084,0x00000006,0x00000673,0x00000672, + 0x0000016e,0x00050080,0x00000006,0x00000674,0x00000673,0x000001c2,0x00050050,0x0000002d, + 0x00000675,0x00000671,0x00000674,0x0004003d,0x00000006,0x00000676,0x000000ed,0x00050084, + 0x00000006,0x00000677,0x00000676,0x0000016e,0x00050080,0x00000006,0x00000678,0x00000677, + 0x000001c2,0x0004003d,0x00000006,0x00000679,0x000000ee,0x00050084,0x00000006,0x0000067a, + 0x00000679,0x0000016e,0x00050080,0x00000006,0x0000067b,0x0000067a,0x00000175,0x00050050, + 0x0000002d,0x0000067c,0x00000678,0x0000067b,0x0004003d,0x00000006,0x0000067d,0x000000ed, + 0x00050084,0x00000006,0x0000067e,0x0000067d,0x0000016e,0x00050080,0x00000006,0x0000067f, + 0x0000067e,0x00000175,0x0004003d,0x00000006,0x00000680,0x000000ee,0x00050084,0x00000006, + 0x00000681,0x00000680,0x0000016e,0x00050080,0x00000006,0x00000682,0x00000681,0x00000175, + 0x00050050,0x0000002d,0x00000683,0x0000067f,0x00000682,0x0003003e,0x00000684,0x0000066e, + 0x0003003e,0x00000685,0x00000675,0x0003003e,0x00000686,0x0000067c,0x0003003e,0x00000687, + 0x00000683,0x00080039,0x0000009f,0x00000688,0x000000d2,0x00000684,0x00000685,0x00000686, + 0x00000687,0x00050041,0x000000aa,0x00000689,0x000005c1,0x00000667,0x0003003e,0x00000689, + 0x00000688,0x0004003d,0x0000002d,0x0000068a,0x000000ef,0x00050050,0x0000002d,0x0000068b, + 0x000004c2,0x000004c2,0x00050084,0x0000002d,0x0000068c,0x0000068a,0x0000068b,0x0004007c, + 0x00000032,0x0000068d,0x0000068c,0x0004003d,0x00000006,0x0000068e,0x000000ed,0x0004003d, + 0x00000006,0x0000068f,0x00000651,0x00050089,0x00000006,0x00000690,0x0000068f,0x0000016e, + 0x00050084,0x00000006,0x00000692,0x00000690,0x00000691,0x00050080,0x00000006,0x00000693, + 0x0000068e,0x00000692,0x0004007c,0x0000001a,0x00000694,0x00000693,0x0004003d,0x00000006, + 0x00000695,0x000000ee,0x0004003d,0x00000006,0x00000696,0x00000651,0x00050086,0x00000006, + 0x00000697,0x00000696,0x0000016e,0x00050084,0x00000006,0x00000698,0x00000697,0x00000691, + 0x00050080,0x00000006,0x00000699,0x00000695,0x00000698,0x0004007c,0x0000001a,0x0000069a, + 0x00000699,0x00050050,0x00000032,0x0000069b,0x00000694,0x0000069a,0x00050080,0x00000032, + 0x0000069c,0x0000068d,0x0000069b,0x0004003d,0x00000006,0x0000069d,0x00000651,0x0003003e, + 0x0000069e,0x0000069c,0x00050041,0x000000aa,0x000006a0,0x000005c1,0x0000069d,0x0004003d, + 0x0000009f,0x000006a1,0x000006a0,0x0003003e,0x0000069f,0x000006a1,0x0003003e,0x000006a2, + 0x00000175,0x0004003d,0x00000006,0x000006a4,0x000000f2,0x0003003e,0x000006a3,0x000006a4, + 0x00080039,0x00000002,0x000006a5,0x000000b7,0x0000069e,0x0000069f,0x000006a2,0x000006a3, + 0x000200f9,0x00000666,0x000200f8,0x00000666,0x00040039,0x00000002,0x000006a6,0x000000c4, + 0x000200f9,0x00000655,0x000200f8,0x00000655,0x0004003d,0x00000006,0x000006a7,0x00000651, + 0x00050080,0x00000006,0x000006a8,0x000006a7,0x00000194,0x0003003e,0x00000651,0x000006a8, + 0x000200f9,0x00000652,0x000200f8,0x00000654,0x0004003d,0x00000006,0x000006a9,0x000000f0, + 0x000500b0,0x0000006e,0x000006aa,0x000006a9,0x000005a7,0x000300f7,0x000006ac,0x00000000, + 0x000400fa,0x000006aa,0x000006ab,0x000006ac,0x000200f8,0x000006ab,0x0004003d,0x00000006, + 0x000006ad,0x000000ed,0x00050080,0x00000006,0x000006ae,0x000006ad,0x000001c2,0x0004003d, + 0x00000006,0x000006af,0x000000ee,0x00050080,0x00000006,0x000006b0,0x000006af,0x000001c2, + 0x0003003e,0x000006b1,0x000006ae,0x0003003e,0x000006b2,0x000006b0,0x00050041,0x000000aa, + 0x000006b4,0x000005c1,0x0000014f,0x0004003d,0x0000009f,0x000006b5,0x000006b4,0x0003003e, + 0x000006b3,0x000006b5,0x00070039,0x00000002,0x000006b6,0x000000c2,0x000006b1,0x000006b2, + 0x000006b3,0x0004003d,0x00000006,0x000006b7,0x000000ed,0x00050080,0x00000006,0x000006b8, + 0x000006b7,0x00000691,0x0004003d,0x00000006,0x000006b9,0x000000ee,0x00050080,0x00000006, + 0x000006ba,0x000006b9,0x000001c2,0x0003003e,0x000006bb,0x000006b8,0x0003003e,0x000006bc, + 0x000006ba,0x00050041,0x000000aa,0x000006be,0x000005c1,0x00000194,0x0004003d,0x0000009f, + 0x000006bf,0x000006be,0x0003003e,0x000006bd,0x000006bf,0x00070039,0x00000002,0x000006c0, + 0x000000c2,0x000006bb,0x000006bc,0x000006bd,0x0004003d,0x00000006,0x000006c1,0x000000ed, + 0x00050080,0x00000006,0x000006c2,0x000006c1,0x000001c2,0x0004003d,0x00000006,0x000006c3, + 0x000000ee,0x00050080,0x00000006,0x000006c4,0x000006c3,0x00000691,0x0003003e,0x000006c5, + 0x000006c2,0x0003003e,0x000006c6,0x000006c4,0x00050041,0x000000aa,0x000006c8,0x000005c1, + 0x000001b6,0x0004003d,0x0000009f,0x000006c9,0x000006c8,0x0003003e,0x000006c7,0x000006c9, + 0x00070039,0x00000002,0x000006ca,0x000000c2,0x000006c5,0x000006c6,0x000006c7,0x0004003d, + 0x00000006,0x000006cb,0x000000ed,0x00050080,0x00000006,0x000006cc,0x000006cb,0x00000691, + 0x0004003d,0x00000006,0x000006cd,0x000000ee,0x00050080,0x00000006,0x000006ce,0x000006cd, + 0x00000691,0x0003003e,0x000006cf,0x000006cc,0x0003003e,0x000006d0,0x000006ce,0x00050041, + 0x000000aa,0x000006d2,0x000005c1,0x000002bd,0x0004003d,0x0000009f,0x000006d3,0x000006d2, + 0x0003003e,0x000006d1,0x000006d3,0x00070039,0x00000002,0x000006d4,0x000000c2,0x000006cf, + 0x000006d0,0x000006d1,0x000200f9,0x000006ac,0x000200f8,0x000006ac,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x000000fb,0x00000000,0x000000ec,0x00030037,0x00000007,0x000000f5, + 0x00030037,0x00000007,0x000000f6,0x00030037,0x000000cc,0x000000f7,0x00030037,0x00000007, + 0x000000f8,0x00030037,0x00000007,0x000000f9,0x00030037,0x00000007,0x000000fa,0x000200f8, + 0x000000fc,0x0004003b,0x00000007,0x000006d5,0x00000007,0x0004003b,0x00000007,0x000006d7, + 0x00000007,0x0004003b,0x000000cc,0x000006d9,0x00000007,0x0004003b,0x00000007,0x000006db, + 0x00000007,0x0004003b,0x00000007,0x000006dd,0x00000007,0x0004003b,0x00000007,0x000006df, + 0x00000007,0x0004003d,0x00000006,0x000006d6,0x000000f5,0x0003003e,0x000006d5,0x000006d6, + 0x0004003d,0x00000006,0x000006d8,0x000000f6,0x0003003e,0x000006d7,0x000006d8,0x0004003d, + 0x0000002d,0x000006da,0x000000f7,0x0003003e,0x000006d9,0x000006da,0x0004003d,0x00000006, + 0x000006dc,0x000000f8,0x0003003e,0x000006db,0x000006dc,0x0004003d,0x00000006,0x000006de, + 0x000000f9,0x0003003e,0x000006dd,0x000006de,0x0004003d,0x00000006,0x000006e0,0x000000fa, + 0x0003003e,0x000006df,0x000006e0,0x000a0039,0x00000002,0x000006e1,0x000000f3,0x000006d5, + 0x000006d7,0x000006d9,0x000006db,0x000006dd,0x000006df,0x000100fd,0x00010038,0x00050036, + 0x00000002,0x00000103,0x00000000,0x000000ec,0x00030037,0x00000007,0x000000fd,0x00030037, + 0x00000007,0x000000fe,0x00030037,0x000000cc,0x000000ff,0x00030037,0x00000007,0x00000100, + 0x00030037,0x00000007,0x00000101,0x00030037,0x00000007,0x00000102,0x000200f8,0x00000104, + 0x0004003b,0x000000aa,0x000006e6,0x00000007,0x0004003b,0x000000cc,0x00000703,0x00000007, + 0x0004003b,0x000000cc,0x00000704,0x00000007,0x0004003b,0x000000cc,0x00000705,0x00000007, + 0x0004003b,0x000000cc,0x00000706,0x00000007,0x0004003b,0x00000049,0x00000712,0x00000007, + 0x0004003b,0x000000aa,0x00000713,0x00000007,0x0004003b,0x00000007,0x00000715,0x00000007, + 0x0004003b,0x00000007,0x00000717,0x00000007,0x0004003b,0x00000007,0x00000721,0x00000007, + 0x0004003b,0x00000007,0x00000722,0x00000007,0x0004003b,0x000000aa,0x00000723,0x00000007, + 0x0004003d,0x00000006,0x000006e2,0x00000100,0x000500b0,0x0000006e,0x000006e3,0x000006e2, + 0x000005a7,0x000300f7,0x000006e5,0x00000000,0x000400fa,0x000006e3,0x000006e4,0x000006e5, + 0x000200f8,0x000006e4,0x0004003d,0x00000006,0x000006e7,0x000000fd,0x00050084,0x00000006, + 0x000006e8,0x000006e7,0x0000016e,0x00050080,0x00000006,0x000006e9,0x000006e8,0x000001c2, + 0x0004003d,0x00000006,0x000006ea,0x000000fe,0x00050084,0x00000006,0x000006eb,0x000006ea, + 0x0000016e,0x00050080,0x00000006,0x000006ec,0x000006eb,0x000001c2,0x00050050,0x0000002d, + 0x000006ed,0x000006e9,0x000006ec,0x0004003d,0x00000006,0x000006ee,0x000000fd,0x00050084, + 0x00000006,0x000006ef,0x000006ee,0x0000016e,0x00050080,0x00000006,0x000006f0,0x000006ef, + 0x00000175,0x0004003d,0x00000006,0x000006f1,0x000000fe,0x00050084,0x00000006,0x000006f2, + 0x000006f1,0x0000016e,0x00050080,0x00000006,0x000006f3,0x000006f2,0x000001c2,0x00050050, + 0x0000002d,0x000006f4,0x000006f0,0x000006f3,0x0004003d,0x00000006,0x000006f5,0x000000fd, + 0x00050084,0x00000006,0x000006f6,0x000006f5,0x0000016e,0x00050080,0x00000006,0x000006f7, + 0x000006f6,0x000001c2,0x0004003d,0x00000006,0x000006f8,0x000000fe,0x00050084,0x00000006, + 0x000006f9,0x000006f8,0x0000016e,0x00050080,0x00000006,0x000006fa,0x000006f9,0x00000175, + 0x00050050,0x0000002d,0x000006fb,0x000006f7,0x000006fa,0x0004003d,0x00000006,0x000006fc, + 0x000000fd,0x00050084,0x00000006,0x000006fd,0x000006fc,0x0000016e,0x00050080,0x00000006, + 0x000006fe,0x000006fd,0x00000175,0x0004003d,0x00000006,0x000006ff,0x000000fe,0x00050084, + 0x00000006,0x00000700,0x000006ff,0x0000016e,0x00050080,0x00000006,0x00000701,0x00000700, + 0x00000175,0x00050050,0x0000002d,0x00000702,0x000006fe,0x00000701,0x0003003e,0x00000703, + 0x000006ed,0x0003003e,0x00000704,0x000006f4,0x0003003e,0x00000705,0x000006fb,0x0003003e, + 0x00000706,0x00000702,0x00080039,0x0000009f,0x00000707,0x000000d2,0x00000703,0x00000704, + 0x00000705,0x00000706,0x0003003e,0x000006e6,0x00000707,0x0004003d,0x0000002d,0x00000708, + 0x000000ff,0x00050050,0x0000002d,0x00000709,0x00000691,0x00000691,0x00050084,0x0000002d, + 0x0000070a,0x00000708,0x00000709,0x0004007c,0x00000032,0x0000070b,0x0000070a,0x0004003d, + 0x00000006,0x0000070c,0x000000fd,0x0004007c,0x0000001a,0x0000070d,0x0000070c,0x0004003d, + 0x00000006,0x0000070e,0x000000fe,0x0004007c,0x0000001a,0x0000070f,0x0000070e,0x00050050, + 0x00000032,0x00000710,0x0000070d,0x0000070f,0x00050080,0x00000032,0x00000711,0x0000070b, + 0x00000710,0x0003003e,0x00000712,0x00000711,0x0004003d,0x0000009f,0x00000714,0x000006e6, + 0x0003003e,0x00000713,0x00000714,0x0004003d,0x00000006,0x00000716,0x00000101,0x0003003e, + 0x00000715,0x00000716,0x0004003d,0x00000006,0x00000718,0x00000102,0x0003003e,0x00000717, + 0x00000718,0x00080039,0x00000002,0x00000719,0x000000b7,0x00000712,0x00000713,0x00000715, + 0x00000717,0x0004003d,0x00000006,0x0000071a,0x000000fd,0x00050084,0x00000006,0x0000071b, + 0x0000071a,0x0000016e,0x0004003d,0x00000006,0x0000071c,0x000000fe,0x00050089,0x00000006, + 0x0000071d,0x0000071c,0x0000016e,0x00050080,0x00000006,0x0000071e,0x0000071b,0x0000071d, + 0x0004003d,0x00000006,0x0000071f,0x000000fe,0x00050084,0x00000006,0x00000720,0x0000071f, + 0x0000016e,0x0003003e,0x00000721,0x0000071e,0x0003003e,0x00000722,0x00000720,0x0004003d, + 0x0000009f,0x00000724,0x000006e6,0x0003003e,0x00000723,0x00000724,0x00070039,0x00000002, + 0x00000725,0x000000c2,0x00000721,0x00000722,0x00000723,0x000200f9,0x000006e5,0x000200f8, + 0x000006e5,0x000100fd,0x00010038,0x00050036,0x00000002,0x0000010b,0x00000000,0x000000ec, + 0x00030037,0x00000007,0x00000105,0x00030037,0x00000007,0x00000106,0x00030037,0x000000cc, + 0x00000107,0x00030037,0x00000007,0x00000108,0x00030037,0x00000007,0x00000109,0x00030037, + 0x00000007,0x0000010a,0x000200f8,0x0000010c,0x0004003b,0x000000aa,0x0000072a,0x00000007, + 0x0004003b,0x000000cc,0x0000074b,0x00000007,0x0004003b,0x000000cc,0x0000074c,0x00000007, + 0x0004003b,0x000000cc,0x0000074d,0x00000007,0x0004003b,0x000000cc,0x0000074e,0x00000007, + 0x0004003b,0x00000049,0x0000075a,0x00000007,0x0004003b,0x000000aa,0x0000075b,0x00000007, + 0x0004003b,0x00000007,0x0000075d,0x00000007,0x0004003b,0x00000007,0x0000075f,0x00000007, + 0x0004003b,0x00000007,0x00000768,0x00000007,0x0004003b,0x00000007,0x00000769,0x00000007, + 0x0004003b,0x000000aa,0x0000076a,0x00000007,0x0004003d,0x00000006,0x00000726,0x00000108, + 0x000500b0,0x0000006e,0x00000727,0x00000726,0x000004c2,0x000300f7,0x00000729,0x00000000, + 0x000400fa,0x00000727,0x00000728,0x00000729,0x000200f8,0x00000728,0x0004003d,0x00000006, + 0x0000072b,0x00000105,0x00050084,0x00000006,0x0000072c,0x0000072b,0x0000020e,0x00050080, + 0x00000006,0x0000072d,0x0000072c,0x000001c2,0x00050080,0x00000006,0x0000072e,0x0000072d, + 0x000001c2,0x0004003d,0x00000006,0x0000072f,0x00000106,0x00050084,0x00000006,0x00000730, + 0x0000072f,0x0000020e,0x00050080,0x00000006,0x00000731,0x00000730,0x000001c2,0x00050050, + 0x0000002d,0x00000732,0x0000072e,0x00000731,0x0004003d,0x00000006,0x00000733,0x00000105, + 0x00050084,0x00000006,0x00000734,0x00000733,0x0000020e,0x00050080,0x00000006,0x00000735, + 0x00000734,0x0000016e,0x00050080,0x00000006,0x00000736,0x00000735,0x000001c2,0x0004003d, + 0x00000006,0x00000737,0x00000106,0x00050084,0x00000006,0x00000738,0x00000737,0x0000020e, + 0x00050080,0x00000006,0x00000739,0x00000738,0x000001c2,0x00050050,0x0000002d,0x0000073a, + 0x00000736,0x00000739,0x0004003d,0x00000006,0x0000073b,0x00000105,0x00050084,0x00000006, + 0x0000073c,0x0000073b,0x0000020e,0x00050080,0x00000006,0x0000073d,0x0000073c,0x000001c2, + 0x00050080,0x00000006,0x0000073e,0x0000073d,0x00000175,0x0004003d,0x00000006,0x0000073f, + 0x00000106,0x00050084,0x00000006,0x00000740,0x0000073f,0x0000020e,0x00050080,0x00000006, + 0x00000741,0x00000740,0x0000016e,0x00050050,0x0000002d,0x00000742,0x0000073e,0x00000741, + 0x0004003d,0x00000006,0x00000743,0x00000105,0x00050084,0x00000006,0x00000744,0x00000743, + 0x0000020e,0x00050080,0x00000006,0x00000745,0x00000744,0x0000016e,0x00050080,0x00000006, + 0x00000746,0x00000745,0x00000175,0x0004003d,0x00000006,0x00000747,0x00000106,0x00050084, + 0x00000006,0x00000748,0x00000747,0x0000020e,0x00050080,0x00000006,0x00000749,0x00000748, + 0x0000016e,0x00050050,0x0000002d,0x0000074a,0x00000746,0x00000749,0x0003003e,0x0000074b, + 0x00000732,0x0003003e,0x0000074c,0x0000073a,0x0003003e,0x0000074d,0x00000742,0x0003003e, + 0x0000074e,0x0000074a,0x00080039,0x0000009f,0x0000074f,0x000000d2,0x0000074b,0x0000074c, + 0x0000074d,0x0000074e,0x0003003e,0x0000072a,0x0000074f,0x0004003d,0x0000002d,0x00000750, + 0x00000107,0x00050050,0x0000002d,0x00000751,0x0000020e,0x0000020e,0x00050084,0x0000002d, + 0x00000752,0x00000750,0x00000751,0x0004007c,0x00000032,0x00000753,0x00000752,0x0004003d, + 0x00000006,0x00000754,0x00000105,0x0004007c,0x0000001a,0x00000755,0x00000754,0x0004003d, + 0x00000006,0x00000756,0x00000106,0x0004007c,0x0000001a,0x00000757,0x00000756,0x00050050, + 0x00000032,0x00000758,0x00000755,0x00000757,0x00050080,0x00000032,0x00000759,0x00000753, + 0x00000758,0x0003003e,0x0000075a,0x00000759,0x0004003d,0x0000009f,0x0000075c,0x0000072a, + 0x0003003e,0x0000075b,0x0000075c,0x0004003d,0x00000006,0x0000075e,0x00000109,0x0003003e, + 0x0000075d,0x0000075e,0x0004003d,0x00000006,0x00000760,0x0000010a,0x0003003e,0x0000075f, + 0x00000760,0x00080039,0x00000002,0x00000761,0x000000b7,0x0000075a,0x0000075b,0x0000075d, + 0x0000075f,0x0004003d,0x00000006,0x00000762,0x00000105,0x00050084,0x00000006,0x00000763, + 0x00000762,0x0000020e,0x0004003d,0x00000006,0x00000764,0x00000106,0x00050080,0x00000006, + 0x00000765,0x00000763,0x00000764,0x0004003d,0x00000006,0x00000766,0x00000106,0x00050084, + 0x00000006,0x00000767,0x00000766,0x0000020e,0x0003003e,0x00000768,0x00000765,0x0003003e, + 0x00000769,0x00000767,0x0004003d,0x0000009f,0x0000076b,0x0000072a,0x0003003e,0x0000076a, + 0x0000076b,0x00070039,0x00000002,0x0000076c,0x000000c2,0x00000768,0x00000769,0x0000076a, + 0x000200f9,0x00000729,0x000200f8,0x00000729,0x000100fd,0x00010038,0x00050036,0x00000002, + 0x00000113,0x00000000,0x000000ec,0x00030037,0x00000007,0x0000010d,0x00030037,0x00000007, + 0x0000010e,0x00030037,0x000000cc,0x0000010f,0x00030037,0x00000007,0x00000110,0x00030037, + 0x00000007,0x00000111,0x00030037,0x00000007,0x00000112,0x000200f8,0x00000114,0x0004003b, + 0x000000aa,0x00000771,0x00000007,0x0004003b,0x000000cc,0x0000079e,0x00000007,0x0004003b, + 0x000000cc,0x0000079f,0x00000007,0x0004003b,0x000000cc,0x000007a0,0x00000007,0x0004003b, + 0x000000cc,0x000007a1,0x00000007,0x0004003b,0x00000049,0x000007ad,0x00000007,0x0004003b, + 0x000000aa,0x000007ae,0x00000007,0x0004003b,0x00000007,0x000007b0,0x00000007,0x0004003b, + 0x00000007,0x000007b2,0x00000007,0x0004003b,0x00000007,0x000007b9,0x00000007,0x0004003b, + 0x00000007,0x000007ba,0x00000007,0x0004003b,0x000000aa,0x000007bb,0x00000007,0x0004003d, + 0x00000006,0x0000076d,0x00000110,0x000500b0,0x0000006e,0x0000076e,0x0000076d,0x0000020e, + 0x000300f7,0x00000770,0x00000000,0x000400fa,0x0000076e,0x0000076f,0x00000770,0x000200f8, + 0x0000076f,0x0004003d,0x00000006,0x00000772,0x0000010d,0x00050084,0x00000006,0x00000773, + 0x00000772,0x00000691,0x00050080,0x00000006,0x00000774,0x00000773,0x000001c2,0x00050080, + 0x00000006,0x00000775,0x00000774,0x000001c2,0x0004003d,0x00000006,0x00000776,0x0000010e, + 0x00050084,0x00000006,0x00000777,0x00000776,0x0000016e,0x00050080,0x00000006,0x00000778, + 0x00000775,0x00000777,0x0004003d,0x00000006,0x00000779,0x0000010e,0x00050084,0x00000006, + 0x0000077a,0x00000779,0x00000691,0x00050080,0x00000006,0x0000077b,0x0000077a,0x000001c2, + 0x00050050,0x0000002d,0x0000077c,0x00000778,0x0000077b,0x0004003d,0x00000006,0x0000077d, + 0x0000010d,0x00050084,0x00000006,0x0000077e,0x0000077d,0x00000691,0x00050080,0x00000006, + 0x0000077f,0x0000077e,0x0000020e,0x00050080,0x00000006,0x00000780,0x0000077f,0x000001c2, + 0x0004003d,0x00000006,0x00000781,0x0000010e,0x00050084,0x00000006,0x00000782,0x00000781, + 0x0000016e,0x00050080,0x00000006,0x00000783,0x00000780,0x00000782,0x0004003d,0x00000006, + 0x00000784,0x0000010e,0x00050084,0x00000006,0x00000785,0x00000784,0x00000691,0x00050080, + 0x00000006,0x00000786,0x00000785,0x000001c2,0x00050050,0x0000002d,0x00000787,0x00000783, + 0x00000786,0x0004003d,0x00000006,0x00000788,0x0000010d,0x00050084,0x00000006,0x00000789, + 0x00000788,0x00000691,0x00050080,0x00000006,0x0000078a,0x00000789,0x000001c2,0x00050080, + 0x00000006,0x0000078b,0x0000078a,0x00000175,0x0004003d,0x00000006,0x0000078c,0x0000010e, + 0x00050084,0x00000006,0x0000078d,0x0000078c,0x0000016e,0x00050080,0x00000006,0x0000078e, + 0x0000078b,0x0000078d,0x0004003d,0x00000006,0x0000078f,0x0000010e,0x00050084,0x00000006, + 0x00000790,0x0000078f,0x00000691,0x00050080,0x00000006,0x00000791,0x00000790,0x0000020e, + 0x00050050,0x0000002d,0x00000792,0x0000078e,0x00000791,0x0004003d,0x00000006,0x00000793, + 0x0000010d,0x00050084,0x00000006,0x00000794,0x00000793,0x00000691,0x00050080,0x00000006, + 0x00000795,0x00000794,0x0000020e,0x00050080,0x00000006,0x00000796,0x00000795,0x00000175, + 0x0004003d,0x00000006,0x00000797,0x0000010e,0x00050084,0x00000006,0x00000798,0x00000797, + 0x0000016e,0x00050080,0x00000006,0x00000799,0x00000796,0x00000798,0x0004003d,0x00000006, + 0x0000079a,0x0000010e,0x00050084,0x00000006,0x0000079b,0x0000079a,0x00000691,0x00050080, + 0x00000006,0x0000079c,0x0000079b,0x0000020e,0x00050050,0x0000002d,0x0000079d,0x00000799, + 0x0000079c,0x0003003e,0x0000079e,0x0000077c,0x0003003e,0x0000079f,0x00000787,0x0003003e, + 0x000007a0,0x00000792,0x0003003e,0x000007a1,0x0000079d,0x00080039,0x0000009f,0x000007a2, + 0x000000d2,0x0000079e,0x0000079f,0x000007a0,0x000007a1,0x0003003e,0x00000771,0x000007a2, + 0x0004003d,0x0000002d,0x000007a3,0x0000010f,0x00050050,0x0000002d,0x000007a4,0x0000016e, + 0x0000016e,0x00050084,0x0000002d,0x000007a5,0x000007a3,0x000007a4,0x0004007c,0x00000032, + 0x000007a6,0x000007a5,0x0004003d,0x00000006,0x000007a7,0x0000010d,0x0004007c,0x0000001a, + 0x000007a8,0x000007a7,0x0004003d,0x00000006,0x000007a9,0x0000010e,0x0004007c,0x0000001a, + 0x000007aa,0x000007a9,0x00050050,0x00000032,0x000007ab,0x000007a8,0x000007aa,0x00050080, + 0x00000032,0x000007ac,0x000007a6,0x000007ab,0x0003003e,0x000007ad,0x000007ac,0x0004003d, + 0x0000009f,0x000007af,0x00000771,0x0003003e,0x000007ae,0x000007af,0x0004003d,0x00000006, + 0x000007b1,0x00000111,0x0003003e,0x000007b0,0x000007b1,0x0004003d,0x00000006,0x000007b3, + 0x00000112,0x0003003e,0x000007b2,0x000007b3,0x00080039,0x00000002,0x000007b4,0x000000b7, + 0x000007ad,0x000007ae,0x000007b0,0x000007b2,0x0004003d,0x00000006,0x000007b5,0x0000010d, + 0x0004003d,0x00000006,0x000007b6,0x0000010e,0x00050084,0x00000006,0x000007b7,0x000007b6, + 0x0000016e,0x00050080,0x00000006,0x000007b8,0x000007b5,0x000007b7,0x0003003e,0x000007b9, + 0x000007b8,0x0003003e,0x000007ba,0x000001c2,0x0004003d,0x0000009f,0x000007bc,0x00000771, + 0x0003003e,0x000007bb,0x000007bc,0x00070039,0x00000002,0x000007bd,0x000000c2,0x000007b9, + 0x000007ba,0x000007bb,0x000200f9,0x00000770,0x000200f8,0x00000770,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x0000011a,0x00000000,0x00000115,0x00030037,0x000000cc,0x00000116, + 0x00030037,0x00000007,0x00000117,0x00030037,0x00000007,0x00000118,0x00030037,0x00000007, + 0x00000119,0x000200f8,0x0000011b,0x0004003b,0x000000aa,0x000007c2,0x00000007,0x0004003b, + 0x000000cc,0x000007c5,0x00000007,0x0004003b,0x000000cc,0x000007c6,0x00000007,0x0004003b, + 0x000000cc,0x000007c7,0x00000007,0x0004003b,0x000000cc,0x000007c8,0x00000007,0x0004003b, + 0x00000049,0x000007cc,0x00000007,0x0004003b,0x000000aa,0x000007cd,0x00000007,0x0004003b, + 0x00000007,0x000007cf,0x00000007,0x0004003b,0x00000007,0x000007d1,0x00000007,0x0004003d, + 0x00000006,0x000007be,0x00000117,0x000500b0,0x0000006e,0x000007bf,0x000007be,0x00000175, + 0x000300f7,0x000007c1,0x00000000,0x000400fa,0x000007bf,0x000007c0,0x000007c1,0x000200f8, + 0x000007c0,0x0003003e,0x000007c5,0x00000555,0x0003003e,0x000007c6,0x0000055b,0x0003003e, + 0x000007c7,0x000007c3,0x0003003e,0x000007c8,0x000007c4,0x00080039,0x0000009f,0x000007c9, + 0x000000d2,0x000007c5,0x000007c6,0x000007c7,0x000007c8,0x0003003e,0x000007c2,0x000007c9, + 0x0004003d,0x0000002d,0x000007ca,0x00000116,0x0004007c,0x00000032,0x000007cb,0x000007ca, + 0x0003003e,0x000007cc,0x000007cb,0x0004003d,0x0000009f,0x000007ce,0x000007c2,0x0003003e, + 0x000007cd,0x000007ce,0x0004003d,0x00000006,0x000007d0,0x00000118,0x0003003e,0x000007cf, + 0x000007d0,0x0004003d,0x00000006,0x000007d2,0x00000119,0x0003003e,0x000007d1,0x000007d2, + 0x00080039,0x00000002,0x000007d3,0x000000b7,0x000007cc,0x000007cd,0x000007cf,0x000007d1, + 0x000200f9,0x000007c1,0x000200f8,0x000007c1,0x000100fd,0x00010038,0x00050036,0x00000002, + 0x00000121,0x00000000,0x0000011c,0x00030037,0x00000007,0x0000011d,0x00030037,0x00000007, + 0x0000011e,0x00030037,0x00000007,0x0000011f,0x00030037,0x00000007,0x00000120,0x000200f8, + 0x00000122,0x0004003b,0x00000049,0x000007d4,0x00000007,0x0004003b,0x00000049,0x000007de, + 0x00000007,0x0004003b,0x000000aa,0x000007e8,0x00000007,0x0004003b,0x000000cc,0x000007eb, + 0x00000007,0x0004003b,0x00000007,0x000007ec,0x00000007,0x0004003b,0x00000049,0x000007f0, + 0x00000007,0x0004003b,0x000000aa,0x000007f2,0x00000007,0x0004003b,0x00000007,0x000007f4, + 0x00000007,0x0004003b,0x00000007,0x000007f5,0x00000007,0x0004003b,0x000000aa,0x0000080a, + 0x00000007,0x0004003b,0x000000cc,0x0000080d,0x00000007,0x0004003b,0x00000007,0x0000080e, + 0x00000007,0x0004003b,0x00000049,0x00000811,0x00000007,0x0004003b,0x000000aa,0x00000813, + 0x00000007,0x0004003b,0x00000007,0x00000815,0x00000007,0x0004003b,0x00000007,0x00000816, + 0x00000007,0x0004003b,0x000000aa,0x0000082b,0x00000007,0x0004003b,0x000000cc,0x0000082e, + 0x00000007,0x0004003b,0x00000007,0x0000082f,0x00000007,0x0004003b,0x00000049,0x00000832, + 0x00000007,0x0004003b,0x000000aa,0x00000834,0x00000007,0x0004003b,0x00000007,0x00000836, + 0x00000007,0x0004003b,0x00000007,0x00000837,0x00000007,0x0004003b,0x000000aa,0x0000084c, + 0x00000007,0x0004003b,0x000000cc,0x0000084f,0x00000007,0x0004003b,0x00000007,0x00000850, + 0x00000007,0x0004003b,0x00000049,0x00000853,0x00000007,0x0004003b,0x000000aa,0x00000855, + 0x00000007,0x0004003b,0x00000007,0x00000857,0x00000007,0x0004003b,0x00000007,0x00000858, + 0x00000007,0x0004003b,0x000000aa,0x00000861,0x00000007,0x0004003b,0x000000aa,0x00000862, + 0x00000007,0x0004003b,0x000000aa,0x00000864,0x00000007,0x0004003b,0x000000aa,0x00000866, + 0x00000007,0x0004003b,0x000000aa,0x00000868,0x00000007,0x0004003b,0x00000049,0x00000870, + 0x00000007,0x0004003b,0x000000aa,0x00000871,0x00000007,0x0004003b,0x00000007,0x00000873, + 0x00000007,0x0004003b,0x00000007,0x00000874,0x00000007,0x0004003b,0x00000007,0x00000877, + 0x00000007,0x0004003b,0x00000007,0x00000879,0x00000007,0x0004003b,0x000000aa,0x0000087b, + 0x00000007,0x0004003d,0x00000006,0x000007d5,0x0000011d,0x00050084,0x00000006,0x000007d6, + 0x000007d5,0x0000020e,0x00050080,0x00000006,0x000007d7,0x000007d6,0x000001c2,0x0004007c, + 0x0000001a,0x000007d8,0x000007d7,0x0004003d,0x00000006,0x000007d9,0x0000011e,0x00050084, + 0x00000006,0x000007da,0x000007d9,0x0000020e,0x00050080,0x00000006,0x000007db,0x000007da, + 0x000001c2,0x0004007c,0x0000001a,0x000007dc,0x000007db,0x00050050,0x00000032,0x000007dd, + 0x000007d8,0x000007dc,0x0003003e,0x000007d4,0x000007dd,0x0004003d,0x00000006,0x000007df, + 0x0000011d,0x00050084,0x00000006,0x000007e0,0x000007df,0x0000016e,0x00050080,0x00000006, + 0x000007e1,0x000007e0,0x000001c2,0x0004007c,0x0000001a,0x000007e2,0x000007e1,0x0004003d, + 0x00000006,0x000007e3,0x0000011e,0x00050084,0x00000006,0x000007e4,0x000007e3,0x0000016e, + 0x00050080,0x00000006,0x000007e5,0x000007e4,0x000001c2,0x0004007c,0x0000001a,0x000007e6, + 0x000007e5,0x00050050,0x00000032,0x000007e7,0x000007e2,0x000007e6,0x0003003e,0x000007de, + 0x000007e7,0x0004003d,0x00000032,0x000007e9,0x000007d4,0x0004007c,0x0000002d,0x000007ea, + 0x000007e9,0x0003003e,0x000007eb,0x000007ea,0x0004003d,0x00000006,0x000007ed,0x00000120, + 0x0003003e,0x000007ec,0x000007ed,0x00060039,0x0000009f,0x000007ee,0x000000df,0x000007eb, + 0x000007ec,0x0003003e,0x000007e8,0x000007ee,0x0004003d,0x00000032,0x000007f1,0x000007de, + 0x0003003e,0x000007f0,0x000007f1,0x0004003d,0x0000009f,0x000007f3,0x000007e8,0x0003003e, + 0x000007f2,0x000007f3,0x0003003e,0x000007f4,0x000007ef,0x0004003d,0x00000006,0x000007f6, + 0x00000120,0x0003003e,0x000007f5,0x000007f6,0x00080039,0x00000002,0x000007f7,0x000000b7, + 0x000007f0,0x000007f2,0x000007f4,0x000007f5,0x0004003d,0x00000006,0x000007f8,0x0000011d, + 0x00050084,0x00000006,0x000007f9,0x000007f8,0x0000020e,0x00050080,0x00000006,0x000007fa, + 0x000007f9,0x0000016e,0x0004007c,0x0000001a,0x000007fb,0x000007fa,0x0004003d,0x00000006, + 0x000007fc,0x0000011e,0x00050084,0x00000006,0x000007fd,0x000007fc,0x0000020e,0x00050080, + 0x00000006,0x000007fe,0x000007fd,0x000001c2,0x0004007c,0x0000001a,0x000007ff,0x000007fe, + 0x00050050,0x00000032,0x00000800,0x000007fb,0x000007ff,0x0003003e,0x000007d4,0x00000800, + 0x0004003d,0x00000006,0x00000801,0x0000011d,0x00050084,0x00000006,0x00000802,0x00000801, + 0x0000016e,0x00050080,0x00000006,0x00000803,0x00000802,0x00000175,0x0004007c,0x0000001a, + 0x00000804,0x00000803,0x0004003d,0x00000006,0x00000805,0x0000011e,0x00050084,0x00000006, + 0x00000806,0x00000805,0x0000016e,0x00050080,0x00000006,0x00000807,0x00000806,0x000001c2, + 0x0004007c,0x0000001a,0x00000808,0x00000807,0x00050050,0x00000032,0x00000809,0x00000804, + 0x00000808,0x0003003e,0x000007de,0x00000809,0x0004003d,0x00000032,0x0000080b,0x000007d4, + 0x0004007c,0x0000002d,0x0000080c,0x0000080b,0x0003003e,0x0000080d,0x0000080c,0x0004003d, + 0x00000006,0x0000080f,0x00000120,0x0003003e,0x0000080e,0x0000080f,0x00060039,0x0000009f, + 0x00000810,0x000000df,0x0000080d,0x0000080e,0x0003003e,0x0000080a,0x00000810,0x0004003d, + 0x00000032,0x00000812,0x000007de,0x0003003e,0x00000811,0x00000812,0x0004003d,0x0000009f, + 0x00000814,0x0000080a,0x0003003e,0x00000813,0x00000814,0x0003003e,0x00000815,0x000007ef, + 0x0004003d,0x00000006,0x00000817,0x00000120,0x0003003e,0x00000816,0x00000817,0x00080039, + 0x00000002,0x00000818,0x000000b7,0x00000811,0x00000813,0x00000815,0x00000816,0x0004003d, + 0x00000006,0x00000819,0x0000011d,0x00050084,0x00000006,0x0000081a,0x00000819,0x0000020e, + 0x00050080,0x00000006,0x0000081b,0x0000081a,0x000001c2,0x0004007c,0x0000001a,0x0000081c, + 0x0000081b,0x0004003d,0x00000006,0x0000081d,0x0000011e,0x00050084,0x00000006,0x0000081e, + 0x0000081d,0x0000020e,0x00050080,0x00000006,0x0000081f,0x0000081e,0x0000016e,0x0004007c, + 0x0000001a,0x00000820,0x0000081f,0x00050050,0x00000032,0x00000821,0x0000081c,0x00000820, + 0x0003003e,0x000007d4,0x00000821,0x0004003d,0x00000006,0x00000822,0x0000011d,0x00050084, + 0x00000006,0x00000823,0x00000822,0x0000016e,0x00050080,0x00000006,0x00000824,0x00000823, + 0x000001c2,0x0004007c,0x0000001a,0x00000825,0x00000824,0x0004003d,0x00000006,0x00000826, + 0x0000011e,0x00050084,0x00000006,0x00000827,0x00000826,0x0000016e,0x00050080,0x00000006, + 0x00000828,0x00000827,0x00000175,0x0004007c,0x0000001a,0x00000829,0x00000828,0x00050050, + 0x00000032,0x0000082a,0x00000825,0x00000829,0x0003003e,0x000007de,0x0000082a,0x0004003d, + 0x00000032,0x0000082c,0x000007d4,0x0004007c,0x0000002d,0x0000082d,0x0000082c,0x0003003e, + 0x0000082e,0x0000082d,0x0004003d,0x00000006,0x00000830,0x00000120,0x0003003e,0x0000082f, + 0x00000830,0x00060039,0x0000009f,0x00000831,0x000000df,0x0000082e,0x0000082f,0x0003003e, + 0x0000082b,0x00000831,0x0004003d,0x00000032,0x00000833,0x000007de,0x0003003e,0x00000832, + 0x00000833,0x0004003d,0x0000009f,0x00000835,0x0000082b,0x0003003e,0x00000834,0x00000835, + 0x0003003e,0x00000836,0x000007ef,0x0004003d,0x00000006,0x00000838,0x00000120,0x0003003e, + 0x00000837,0x00000838,0x00080039,0x00000002,0x00000839,0x000000b7,0x00000832,0x00000834, + 0x00000836,0x00000837,0x0004003d,0x00000006,0x0000083a,0x0000011d,0x00050084,0x00000006, + 0x0000083b,0x0000083a,0x0000020e,0x00050080,0x00000006,0x0000083c,0x0000083b,0x0000016e, + 0x0004007c,0x0000001a,0x0000083d,0x0000083c,0x0004003d,0x00000006,0x0000083e,0x0000011e, + 0x00050084,0x00000006,0x0000083f,0x0000083e,0x0000020e,0x00050080,0x00000006,0x00000840, + 0x0000083f,0x0000016e,0x0004007c,0x0000001a,0x00000841,0x00000840,0x00050050,0x00000032, + 0x00000842,0x0000083d,0x00000841,0x0003003e,0x000007d4,0x00000842,0x0004003d,0x00000006, + 0x00000843,0x0000011d,0x00050084,0x00000006,0x00000844,0x00000843,0x0000016e,0x00050080, + 0x00000006,0x00000845,0x00000844,0x00000175,0x0004007c,0x0000001a,0x00000846,0x00000845, + 0x0004003d,0x00000006,0x00000847,0x0000011e,0x00050084,0x00000006,0x00000848,0x00000847, + 0x0000016e,0x00050080,0x00000006,0x00000849,0x00000848,0x00000175,0x0004007c,0x0000001a, + 0x0000084a,0x00000849,0x00050050,0x00000032,0x0000084b,0x00000846,0x0000084a,0x0003003e, + 0x000007de,0x0000084b,0x0004003d,0x00000032,0x0000084d,0x000007d4,0x0004007c,0x0000002d, + 0x0000084e,0x0000084d,0x0003003e,0x0000084f,0x0000084e,0x0004003d,0x00000006,0x00000851, + 0x00000120,0x0003003e,0x00000850,0x00000851,0x00060039,0x0000009f,0x00000852,0x000000df, + 0x0000084f,0x00000850,0x0003003e,0x0000084c,0x00000852,0x0004003d,0x00000032,0x00000854, + 0x000007de,0x0003003e,0x00000853,0x00000854,0x0004003d,0x0000009f,0x00000856,0x0000084c, + 0x0003003e,0x00000855,0x00000856,0x0003003e,0x00000857,0x000007ef,0x0004003d,0x00000006, + 0x00000859,0x00000120,0x0003003e,0x00000858,0x00000859,0x00080039,0x00000002,0x0000085a, + 0x000000b7,0x00000853,0x00000855,0x00000857,0x00000858,0x0004003d,0x00000006,0x0000085b, + 0x0000011f,0x000500b2,0x0000006e,0x0000085d,0x0000085b,0x0000085c,0x000300f7,0x0000085f, + 0x00000000,0x000400fa,0x0000085d,0x0000085e,0x0000085f,0x000200f8,0x0000085e,0x000100fd, + 0x000200f8,0x0000085f,0x0004003d,0x0000009f,0x00000863,0x000007e8,0x0003003e,0x00000862, + 0x00000863,0x0004003d,0x0000009f,0x00000865,0x0000080a,0x0003003e,0x00000864,0x00000865, + 0x0004003d,0x0000009f,0x00000867,0x0000082b,0x0003003e,0x00000866,0x00000867,0x0004003d, + 0x0000009f,0x00000869,0x0000084c,0x0003003e,0x00000868,0x00000869,0x00080039,0x0000009f, + 0x0000086a,0x000000b0,0x00000862,0x00000864,0x00000866,0x00000868,0x0003003e,0x00000861, + 0x0000086a,0x0004003d,0x00000006,0x0000086b,0x0000011d,0x0004007c,0x0000001a,0x0000086c, + 0x0000086b,0x0004003d,0x00000006,0x0000086d,0x0000011e,0x0004007c,0x0000001a,0x0000086e, + 0x0000086d,0x00050050,0x00000032,0x0000086f,0x0000086c,0x0000086e,0x0003003e,0x00000870, + 0x0000086f,0x0004003d,0x0000009f,0x00000872,0x00000861,0x0003003e,0x00000871,0x00000872, + 0x0003003e,0x00000873,0x0000085c,0x0004003d,0x00000006,0x00000875,0x00000120,0x0003003e, + 0x00000874,0x00000875,0x00080039,0x00000002,0x00000876,0x000000b7,0x00000870,0x00000871, + 0x00000873,0x00000874,0x0004003d,0x00000006,0x00000878,0x0000011d,0x0003003e,0x00000877, + 0x00000878,0x0004003d,0x00000006,0x0000087a,0x0000011e,0x0003003e,0x00000879,0x0000087a, + 0x0004003d,0x0000009f,0x0000087c,0x00000861,0x0003003e,0x0000087b,0x0000087c,0x00070039, + 0x00000002,0x0000087d,0x000000c2,0x00000877,0x00000879,0x0000087b,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x0000012b,0x00000000,0x00000123,0x00030037,0x00000007,0x00000124, + 0x00030037,0x00000007,0x00000125,0x00030037,0x000000cc,0x00000126,0x00030037,0x00000007, + 0x00000127,0x00030037,0x00000007,0x00000128,0x00030037,0x00000007,0x00000129,0x00030037, + 0x00000007,0x0000012a,0x000200f8,0x0000012c,0x0004003b,0x00000007,0x00000885,0x00000007, + 0x0004003b,0x00000007,0x00000887,0x00000007,0x0004003b,0x000000cc,0x00000889,0x00000007, + 0x0004003b,0x00000007,0x0000088b,0x00000007,0x0004003b,0x00000007,0x0000088d,0x00000007, + 0x0004003b,0x00000007,0x0000088f,0x00000007,0x0004003b,0x00000007,0x0000089c,0x00000007, + 0x0004003b,0x00000007,0x0000089e,0x00000007,0x0004003b,0x000000cc,0x000008a0,0x00000007, + 0x0004003b,0x00000007,0x000008a2,0x00000007,0x0004003b,0x00000007,0x000008a4,0x00000007, + 0x0004003b,0x00000007,0x000008a5,0x00000007,0x0004003b,0x00000007,0x000008b2,0x00000007, + 0x0004003b,0x00000007,0x000008b4,0x00000007,0x0004003b,0x000000cc,0x000008b6,0x00000007, + 0x0004003b,0x00000007,0x000008b8,0x00000007,0x0004003b,0x00000007,0x000008ba,0x00000007, + 0x0004003b,0x00000007,0x000008bb,0x00000007,0x0004003b,0x000000cc,0x000008c8,0x00000007, + 0x0004003b,0x00000007,0x000008ca,0x00000007,0x0004003b,0x00000007,0x000008cc,0x00000007, + 0x0004003b,0x00000007,0x000008cd,0x00000007,0x0004003d,0x00000006,0x0000087e,0x00000129, + 0x0004003d,0x00000006,0x0000087f,0x00000128,0x000500b2,0x0000006e,0x00000880,0x0000087e, + 0x0000087f,0x000300f7,0x00000882,0x00000000,0x000400fa,0x00000880,0x00000881,0x00000882, + 0x000200f8,0x00000881,0x000100fd,0x000200f8,0x00000882,0x00040039,0x00000002,0x00000884, + 0x000000c4,0x0004003d,0x00000006,0x00000886,0x00000124,0x0003003e,0x00000885,0x00000886, + 0x0004003d,0x00000006,0x00000888,0x00000125,0x0003003e,0x00000887,0x00000888,0x0004003d, + 0x0000002d,0x0000088a,0x00000126,0x0003003e,0x00000889,0x0000088a,0x0004003d,0x00000006, + 0x0000088c,0x00000127,0x0003003e,0x0000088b,0x0000088c,0x0004003d,0x00000006,0x0000088e, + 0x00000128,0x0003003e,0x0000088d,0x0000088e,0x0004003d,0x00000006,0x00000890,0x0000012a, + 0x0003003e,0x0000088f,0x00000890,0x000a0039,0x00000002,0x00000891,0x00000103,0x00000885, + 0x00000887,0x00000889,0x0000088b,0x0000088d,0x0000088f,0x0004003d,0x00000006,0x00000892, + 0x00000129,0x0004003d,0x00000006,0x00000893,0x00000128,0x00050080,0x00000006,0x00000894, + 0x00000893,0x00000175,0x000500b2,0x0000006e,0x00000895,0x00000892,0x00000894,0x000300f7, + 0x00000897,0x00000000,0x000400fa,0x00000895,0x00000896,0x00000897,0x000200f8,0x00000896, + 0x000100fd,0x000200f8,0x00000897,0x00040039,0x00000002,0x00000899,0x000000c4,0x0004003d, + 0x00000006,0x0000089a,0x00000128,0x00050080,0x00000006,0x0000089b,0x0000089a,0x00000175, + 0x0004003d,0x00000006,0x0000089d,0x00000124,0x0003003e,0x0000089c,0x0000089d,0x0004003d, + 0x00000006,0x0000089f,0x00000125,0x0003003e,0x0000089e,0x0000089f,0x0004003d,0x0000002d, + 0x000008a1,0x00000126,0x0003003e,0x000008a0,0x000008a1,0x0004003d,0x00000006,0x000008a3, + 0x00000127,0x0003003e,0x000008a2,0x000008a3,0x0003003e,0x000008a4,0x0000089b,0x0004003d, + 0x00000006,0x000008a6,0x0000012a,0x0003003e,0x000008a5,0x000008a6,0x000a0039,0x00000002, + 0x000008a7,0x0000010b,0x0000089c,0x0000089e,0x000008a0,0x000008a2,0x000008a4,0x000008a5, + 0x0004003d,0x00000006,0x000008a8,0x00000129,0x0004003d,0x00000006,0x000008a9,0x00000128, + 0x00050080,0x00000006,0x000008aa,0x000008a9,0x0000016e,0x000500b2,0x0000006e,0x000008ab, + 0x000008a8,0x000008aa,0x000300f7,0x000008ad,0x00000000,0x000400fa,0x000008ab,0x000008ac, + 0x000008ad,0x000200f8,0x000008ac,0x000100fd,0x000200f8,0x000008ad,0x00040039,0x00000002, + 0x000008af,0x000000c4,0x0004003d,0x00000006,0x000008b0,0x00000128,0x00050080,0x00000006, + 0x000008b1,0x000008b0,0x0000016e,0x0004003d,0x00000006,0x000008b3,0x00000124,0x0003003e, + 0x000008b2,0x000008b3,0x0004003d,0x00000006,0x000008b5,0x00000125,0x0003003e,0x000008b4, + 0x000008b5,0x0004003d,0x0000002d,0x000008b7,0x00000126,0x0003003e,0x000008b6,0x000008b7, + 0x0004003d,0x00000006,0x000008b9,0x00000127,0x0003003e,0x000008b8,0x000008b9,0x0003003e, + 0x000008ba,0x000008b1,0x0004003d,0x00000006,0x000008bc,0x0000012a,0x0003003e,0x000008bb, + 0x000008bc,0x000a0039,0x00000002,0x000008bd,0x00000113,0x000008b2,0x000008b4,0x000008b6, + 0x000008b8,0x000008ba,0x000008bb,0x0004003d,0x00000006,0x000008be,0x00000129,0x0004003d, + 0x00000006,0x000008bf,0x00000128,0x00050080,0x00000006,0x000008c0,0x000008bf,0x0000016f, + 0x000500b2,0x0000006e,0x000008c1,0x000008be,0x000008c0,0x000300f7,0x000008c3,0x00000000, + 0x000400fa,0x000008c1,0x000008c2,0x000008c3,0x000200f8,0x000008c2,0x000100fd,0x000200f8, + 0x000008c3,0x00040039,0x00000002,0x000008c5,0x000000c4,0x0004003d,0x00000006,0x000008c6, + 0x00000128,0x00050080,0x00000006,0x000008c7,0x000008c6,0x0000016f,0x0004003d,0x0000002d, + 0x000008c9,0x00000126,0x0003003e,0x000008c8,0x000008c9,0x0004003d,0x00000006,0x000008cb, + 0x00000127,0x0003003e,0x000008ca,0x000008cb,0x0003003e,0x000008cc,0x000008c7,0x0004003d, + 0x00000006,0x000008ce,0x0000012a,0x0003003e,0x000008cd,0x000008ce,0x00080039,0x00000002, + 0x000008cf,0x0000011a,0x000008c8,0x000008ca,0x000008cc,0x000008cd,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x00000133,0x00000000,0x0000012d,0x00030037,0x000000cc,0x0000012e, + 0x00030037,0x00000007,0x0000012f,0x00030037,0x00000007,0x00000130,0x00030037,0x00000007, + 0x00000131,0x00030037,0x00000007,0x00000132,0x000200f8,0x00000134,0x0004003b,0x000000cc, + 0x000008d0,0x00000007,0x0004003b,0x00000007,0x000008d3,0x00000007,0x0004003b,0x00000007, + 0x000008d5,0x00000007,0x0004003b,0x00000007,0x000008de,0x00000007,0x0004003b,0x00000007, + 0x000008e5,0x00000007,0x0004003b,0x00000007,0x000008e7,0x00000007,0x0004003b,0x000000cc, + 0x000008e9,0x00000007,0x0004003b,0x00000007,0x000008eb,0x00000007,0x0004003b,0x00000007, + 0x000008ed,0x00000007,0x0004003b,0x00000007,0x000008ef,0x00000007,0x0004003b,0x00000007, + 0x000008f2,0x00000007,0x0004003b,0x00000007,0x000008f4,0x00000007,0x0004003b,0x000000cc, + 0x000008f6,0x00000007,0x0004003b,0x00000007,0x000008f8,0x00000007,0x0004003b,0x00000007, + 0x000008fa,0x00000007,0x0004003b,0x00000007,0x000008fb,0x00000007,0x0004003b,0x00000007, + 0x000008fd,0x00000007,0x0004003b,0x00000007,0x00000905,0x00000007,0x0004003b,0x00000007, + 0x00000907,0x00000007,0x0004003b,0x00000007,0x00000909,0x00000007,0x0004003b,0x00000007, + 0x0000090f,0x00000007,0x0004003b,0x00000007,0x00000912,0x00000007,0x0004003b,0x00000007, + 0x00000914,0x00000007,0x0004003b,0x00000007,0x00000916,0x00000007,0x0004003b,0x00000007, + 0x00000918,0x00000007,0x0004003b,0x00000007,0x0000091b,0x00000007,0x0004003b,0x00000007, + 0x0000091d,0x00000007,0x0004003b,0x000000cc,0x0000091f,0x00000007,0x0004003b,0x00000007, + 0x00000920,0x00000007,0x0004003b,0x00000007,0x00000922,0x00000007,0x0004003b,0x00000007, + 0x00000923,0x00000007,0x0004003b,0x00000007,0x00000925,0x00000007,0x0004003d,0x00000006, + 0x000008d1,0x0000012f,0x00050089,0x00000006,0x000008d2,0x000008d1,0x000005a7,0x0003003e, + 0x000008d3,0x000008d2,0x00050039,0x0000002d,0x000008d4,0x00000030,0x000008d3,0x0003003e, + 0x000008d0,0x000008d4,0x00050041,0x00000007,0x000008d6,0x000008d0,0x000001c2,0x0004003d, + 0x00000006,0x000008d7,0x000008d6,0x0004003d,0x00000006,0x000008d8,0x0000012f,0x000500c2, + 0x00000006,0x000008da,0x000008d8,0x000008d9,0x00050089,0x00000006,0x000008db,0x000008da, + 0x0000016e,0x00050084,0x00000006,0x000008dc,0x00000691,0x000008db,0x00050080,0x00000006, + 0x000008dd,0x000008d7,0x000008dc,0x0003003e,0x000008d5,0x000008dd,0x00050041,0x00000007, + 0x000008df,0x000008d0,0x00000175,0x0004003d,0x00000006,0x000008e0,0x000008df,0x0004003d, + 0x00000006,0x000008e1,0x0000012f,0x000500c2,0x00000006,0x000008e2,0x000008e1,0x00000199, + 0x00050084,0x00000006,0x000008e3,0x00000691,0x000008e2,0x00050080,0x00000006,0x000008e4, + 0x000008e0,0x000008e3,0x0003003e,0x000008de,0x000008e4,0x0004003d,0x00000006,0x000008e6, + 0x000008d5,0x0003003e,0x000008e5,0x000008e6,0x0004003d,0x00000006,0x000008e8,0x000008de, + 0x0003003e,0x000008e7,0x000008e8,0x0004003d,0x0000002d,0x000008ea,0x0000012e,0x0003003e, + 0x000008e9,0x000008ea,0x0004003d,0x00000006,0x000008ec,0x0000012f,0x0003003e,0x000008eb, + 0x000008ec,0x0004003d,0x00000006,0x000008ee,0x00000130,0x0003003e,0x000008ed,0x000008ee, + 0x0004003d,0x00000006,0x000008f0,0x00000132,0x0003003e,0x000008ef,0x000008f0,0x000a0039, + 0x00000002,0x000008f1,0x000000fb,0x000008e5,0x000008e7,0x000008e9,0x000008eb,0x000008ed, + 0x000008ef,0x0004003d,0x00000006,0x000008f3,0x000008d5,0x0003003e,0x000008f2,0x000008f3, + 0x0004003d,0x00000006,0x000008f5,0x000008de,0x0003003e,0x000008f4,0x000008f5,0x0004003d, + 0x0000002d,0x000008f7,0x0000012e,0x0003003e,0x000008f6,0x000008f7,0x0004003d,0x00000006, + 0x000008f9,0x0000012f,0x0003003e,0x000008f8,0x000008f9,0x0003003e,0x000008fa,0x0000016e, + 0x0004003d,0x00000006,0x000008fc,0x00000130,0x0003003e,0x000008fb,0x000008fc,0x0004003d, + 0x00000006,0x000008fe,0x00000132,0x0003003e,0x000008fd,0x000008fe,0x000b0039,0x00000002, + 0x000008ff,0x0000012b,0x000008f2,0x000008f4,0x000008f6,0x000008f8,0x000008fa,0x000008fb, + 0x000008fd,0x0004003d,0x00000006,0x00000900,0x00000130,0x000500b2,0x0000006e,0x00000901, + 0x00000900,0x000007ef,0x000300f7,0x00000903,0x00000000,0x000400fa,0x00000901,0x00000902, + 0x00000903,0x000200f8,0x00000902,0x000100fd,0x000200f8,0x00000903,0x0004003d,0x00000006, + 0x00000906,0x00000131,0x0003003e,0x00000905,0x00000906,0x0004003d,0x00000006,0x00000908, + 0x0000012f,0x0003003e,0x00000907,0x00000908,0x0004003d,0x00000006,0x0000090a,0x00000132, + 0x0003003e,0x00000909,0x0000090a,0x00070039,0x0000006e,0x0000090b,0x000000ca,0x00000905, + 0x00000907,0x00000909,0x000300f7,0x0000090d,0x00000000,0x000400fa,0x0000090b,0x0000090c, + 0x0000090d,0x000200f8,0x0000090c,0x000100fd,0x000200f8,0x0000090d,0x0004003d,0x00000006, + 0x00000910,0x00000132,0x0003003e,0x0000090f,0x00000910,0x00050039,0x00000002,0x00000911, + 0x0000007f,0x0000090f,0x0004003d,0x00000006,0x00000913,0x000008d5,0x0003003e,0x00000912, + 0x00000913,0x0004003d,0x00000006,0x00000915,0x000008de,0x0003003e,0x00000914,0x00000915, + 0x0004003d,0x00000006,0x00000917,0x00000130,0x0003003e,0x00000916,0x00000917,0x0004003d, + 0x00000006,0x00000919,0x00000132,0x0003003e,0x00000918,0x00000919,0x00080039,0x00000002, + 0x0000091a,0x00000121,0x00000912,0x00000914,0x00000916,0x00000918,0x0004003d,0x00000006, + 0x0000091c,0x000008d5,0x0003003e,0x0000091b,0x0000091c,0x0004003d,0x00000006,0x0000091e, + 0x000008de,0x0003003e,0x0000091d,0x0000091e,0x0003003e,0x0000091f,0x00000555,0x0004003d, + 0x00000006,0x00000921,0x0000012f,0x0003003e,0x00000920,0x00000921,0x0003003e,0x00000922, + 0x00000691,0x0004003d,0x00000006,0x00000924,0x00000130,0x0003003e,0x00000923,0x00000924, + 0x0004003d,0x00000006,0x00000926,0x00000132,0x0003003e,0x00000925,0x00000926,0x000b0039, + 0x00000002,0x00000927,0x0000012b,0x0000091b,0x0000091d,0x0000091f,0x00000920,0x00000922, + 0x00000923,0x00000925,0x000100fd,0x00010038,0x00050036,0x00000002,0x0000013c,0x00000000, + 0x00000135,0x00030037,0x000000cc,0x00000136,0x00030037,0x00000007,0x00000137,0x00030037, + 0x00000007,0x00000138,0x00030037,0x00000007,0x00000139,0x00030037,0x00000007,0x0000013a, + 0x00030037,0x000000cc,0x0000013b,0x000200f8,0x0000013d,0x0004003b,0x000000cc,0x0000092b, + 0x00000007,0x0004003b,0x00000007,0x0000092c,0x00000007,0x0004003b,0x00000007,0x0000092e, + 0x00000007,0x0004003b,0x00000007,0x00000930,0x00000007,0x0004003b,0x00000007,0x00000932, + 0x00000007,0x0004003d,0x0000002d,0x00000928,0x00000136,0x0004003d,0x0000002d,0x00000929, + 0x0000013b,0x00050080,0x0000002d,0x0000092a,0x00000928,0x00000929,0x0003003e,0x0000092b, + 0x0000092a,0x0004003d,0x00000006,0x0000092d,0x00000137,0x0003003e,0x0000092c,0x0000092d, + 0x0004003d,0x00000006,0x0000092f,0x00000138,0x0003003e,0x0000092e,0x0000092f,0x0004003d, + 0x00000006,0x00000931,0x00000139,0x0003003e,0x00000930,0x00000931,0x0004003d,0x00000006, + 0x00000933,0x0000013a,0x0003003e,0x00000932,0x00000933,0x00090039,0x00000002,0x00000934, + 0x00000133,0x0000092b,0x0000092c,0x0000092e,0x00000930,0x00000932,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x00000143,0x00000000,0x00000140,0x00030037,0x0000013f,0x00000141, + 0x00030037,0x00000007,0x00000142,0x000200f8,0x00000144,0x0004003b,0x000000cc,0x0000093d, + 0x00000007,0x0004003b,0x00000007,0x0000093e,0x00000007,0x0004003b,0x00000007,0x0000093f, + 0x00000007,0x0004003b,0x00000007,0x00000940,0x00000007,0x0004003b,0x00000007,0x00000941, + 0x00000007,0x0004003b,0x000000cc,0x00000942,0x00000007,0x0004003d,0x0000013e,0x00000935, + 0x00000141,0x0007004f,0x0000002d,0x00000936,0x00000935,0x00000935,0x00000000,0x00000001, + 0x0004003d,0x00000006,0x00000937,0x00000142,0x00040039,0x00000006,0x00000938,0x00000042, + 0x00040039,0x00000006,0x00000939,0x00000044,0x00050041,0x00000007,0x0000093a,0x00000141, + 0x0000016e,0x0004003d,0x00000006,0x0000093b,0x0000093a,0x00040039,0x0000002d,0x0000093c, + 0x00000047,0x0003003e,0x0000093d,0x00000936,0x0003003e,0x0000093e,0x00000937,0x0003003e, + 0x0000093f,0x00000938,0x0003003e,0x00000940,0x00000939,0x0003003e,0x00000941,0x0000093b, + 0x0003003e,0x00000942,0x0000093c,0x000a0039,0x00000002,0x00000943,0x0000013c,0x0000093d, + 0x0000093e,0x0000093f,0x00000940,0x00000941,0x00000942,0x000100fd,0x00010038 +}; diff --git a/scripts/fsr3_shaders.py b/scripts/fsr3_shaders.py new file mode 100644 index 000000000..1b584898f --- /dev/null +++ b/scripts/fsr3_shaders.py @@ -0,0 +1,118 @@ +"""Compile AMD's FSR 3.1 upscaler passes into the SPIR-V headers gpu/vk uses. + +The FidelityFX SDK ships each pass as GLSL that includes the SDK's own GPU headers, so the eleven +variants below are the same eight passes compiled with different options. They are checked in like +every other shader in gpu/vk/shaders, so a clone builds without glslang; this script regenerates +them, and --check proves the checked-in files still match their sources (tests/test_fsr3_shaders.py). + + python -I -B scripts/fsr3_shaders.py # write gpu/vk/shaders/fsr3_*_comp_spv.h + python -I -B scripts/fsr3_shaders.py --check # compare instead of writing +""" +import argparse +import difflib +import shutil +import subprocess +import sys +import tempfile +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +SDK = ROOT / "third_party/fidelityfx-sdk" +GPU = SDK / "include/FidelityFX/gpu" +PASSES = SDK / "shaders/fsr3upscaler" +OUT = ROOT / "gpu/vk/shaders" + +# The option set the renderer records these passes under. Each one is a promise about the inputs: +# the colour is HDR, the motion is low-resolution and not jittered, and the depth is reversed. They +# have to match what gpu/vk/vk_fsr3.cpp hands the passes, which is why they live in one place. +OPTIONS = [ + "-DFFX_GPU=1", + "-DFFX_GLSL=1", + "-DFFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE=2", + "-DFFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE=0", + "-DFFX_FSR3UPSCALER_OPTION_HDR_COLOR_INPUT=1", + "-DFFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS=1", + "-DFFX_FSR3UPSCALER_OPTION_JITTERED_MOTION_VECTORS=0", + "-DFFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH=1", +] + +# name, the pass GLSL it compiles, extra defines. The _nowave variants are for devices without the +# subgroup operations the single-pass downsampler prefers. +VARIANTS = [ + ("prepare_inputs", "prepare_inputs", []), + ("luma_pyramid", "luma_pyramid", []), + ("luma_pyramid_nowave", "luma_pyramid", ["-DFFX_SPD_NO_WAVE_OPERATIONS=1"]), + ("shading_change_pyramid", "shading_change_pyramid", []), + ("shading_change_pyramid_nowave", "shading_change_pyramid", ["-DFFX_SPD_NO_WAVE_OPERATIONS=1"]), + ("shading_change", "shading_change", []), + ("prepare_reactivity", "prepare_reactivity", []), + ("luma_instability", "luma_instability", []), + ("accumulate", "accumulate", []), + ("accumulate_sharpen", "accumulate", ["-DFFX_FSR3UPSCALER_OPTION_APPLY_SHARPENING=1"]), + ("rcas", "rcas", []), +] + + +def compile_one(glslang, name, pass_name, extra, out_path, target_env, variable=True): + """Compile one variant. With `variable`, glslang writes a C header; without it, binary SPIR-V, + which is what spirv-val reads.""" + defines = list(OPTIONS) + if not any("APPLY_SHARPENING" in d for d in extra): + defines.append("-DFFX_FSR3UPSCALER_OPTION_APPLY_SHARPENING=0") + cmd = [glslang, "-V", "--quiet", "-S", "comp", + "-I" + str(GPU), "-I" + str(GPU / "fsr3upscaler"), + *defines, *extra] + if variable: + cmd += ["--variable-name", f"FSR3_{name.upper()}_COMP_SPV"] + cmd += ["-o", str(out_path), + str(PASSES / f"ffx_fsr3upscaler_{pass_name}_pass.glsl"), + "--target-env", target_env] + subprocess.run(cmd, check=True) + + +def main(): + p = argparse.ArgumentParser(description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter) + p.add_argument("--glslang", default=None, help="glslangValidator; found on PATH by default") + p.add_argument("--spirv-val", default=None, help="spirv-val, to validate each module") + p.add_argument("--target-env", default="spirv1.3") + p.add_argument("--check", action="store_true", help="compare with the checked-in headers") + a = p.parse_args() + glslang = a.glslang or shutil.which("glslangValidator") or shutil.which("glslang") + if not glslang: + print("glslangValidator not found; pass --glslang", file=sys.stderr) + return 2 + + bad = [] + with tempfile.TemporaryDirectory(prefix="fsr3-shaders-") as tmp: + for name, pass_name, extra in VARIANTS: + header = OUT / f"fsr3_{name}_comp_spv.h" + made = Path(tmp) / header.name + compile_one(glslang, name, pass_name, extra, made, a.target_env) + if a.spirv_val: + spv = Path(tmp) / f"{name}.spv" + compile_one(glslang, name, pass_name, extra, spv, a.target_env, variable=False) + subprocess.run([a.spirv_val, str(spv)], check=True) + if a.check: + have = header.read_text() if header.exists() else "" + want = made.read_text() + if have != want: + bad.append(name) + if not have: + print(f"{header.name}: missing", file=sys.stderr) + else: + diff = difflib.unified_diff(have.splitlines(), want.splitlines(), + "checked in", "regenerated", n=0, lineterm="") + print("\n".join(list(diff)[:12]), file=sys.stderr) + else: + shutil.copyfile(made, header) + print(f"wrote {header.relative_to(ROOT)} ({header.stat().st_size} bytes)") + if bad: + print(f"{len(bad)} header(s) do not match their source: {', '.join(bad)}", file=sys.stderr) + return 1 + print(f"fsr3 shaders: {len(VARIANTS)} {'match' if a.check else 'written'}") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tests/run_all.py b/tests/run_all.py index 484fe4ae2..6b46b8abd 100644 --- a/tests/run_all.py +++ b/tests/run_all.py @@ -33,6 +33,7 @@ "tests/test_upscale_fallback.py": ["--cxx", "g++"], "tests/test_upscale_contract.py": ["--cxx", "g++", "--headers", "{vulkan_headers}"], "tests/test_upscale_seam.py": ["--cxx", "g++"], + "tests/test_fsr3_shaders.py": ["--glslang", "{glslang}", "--spirv-val", "{spirv_val}"], "tests/test_nvn_buffer_map.py": ["--cc", "gcc"], "tests/test_cpp_preflight.py": ["--cxx", "g++"], "tests/test_invalidate_vcore.py": ["--cxx", "g++"], @@ -100,6 +101,7 @@ def find_tools(): "spirv_headers": header_dir("HOOKSHOT_SPIRV_HEADERS", "spirv-headers", os.path.join("spirv", "unified1", "spirv.h")), "vulkan_headers": header_dir("HOOKSHOT_VULKAN_HEADERS", "vulkanheaders", os.path.join("vulkan", "vulkan.h")), "spirv_val": which("spirv-val"), + "glslang": which("glslangValidator", "glslang"), "cxx": which(os.environ.get("CXX", ""), "clang++", "g++", "c++"), } diff --git a/tests/test_fsr3_shaders.py b/tests/test_fsr3_shaders.py new file mode 100644 index 000000000..da890cf19 --- /dev/null +++ b/tests/test_fsr3_shaders.py @@ -0,0 +1,33 @@ +"""The checked-in FSR 3.1 pass shaders still match the FidelityFX SDK sources they came from. + +gpu/vk/shaders/fsr3_*_comp_spv.h are generated from third_party/fidelityfx-sdk by +scripts/fsr3_shaders.py and checked in like every other shader here, so a clone builds without +glslang. That only stays true if the headers and their sources cannot drift apart, which is what +this check is for: it recompiles every variant and compares. It also validates each module, so a +pass that compiles but is not valid SPIR-V is caught here rather than on a device. + +python -I -B tests/test_fsr3_shaders.py [--glslang glslangValidator] [--spirv-val spirv-val] +""" +import argparse +import subprocess +import sys +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] + + +def main(): + p = argparse.ArgumentParser(description=__doc__) + p.add_argument("--glslang") + p.add_argument("--spirv-val") + a = p.parse_args() + cmd = [sys.executable, "-I", "-B", str(ROOT / "scripts/fsr3_shaders.py"), "--check"] + if a.glslang: + cmd += ["--glslang", a.glslang] + if a.spirv_val: + cmd += ["--spirv-val", a.spirv_val] + subprocess.run(cmd, check=True) + + +if __name__ == "__main__": + main() diff --git a/third_party/fidelityfx-sdk/LICENSE.txt b/third_party/fidelityfx-sdk/LICENSE.txt new file mode 100644 index 000000000..3712e34ad --- /dev/null +++ b/third_party/fidelityfx-sdk/LICENSE.txt @@ -0,0 +1,21 @@ +This file is part of the FidelityFX SDK. + +Copyright (C) 2024 Advanced Micro Devices, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files(the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions : + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/third_party/fidelityfx-sdk/PROVENANCE.md b/third_party/fidelityfx-sdk/PROVENANCE.md new file mode 100644 index 000000000..a4aaf8099 --- /dev/null +++ b/third_party/fidelityfx-sdk/PROVENANCE.md @@ -0,0 +1,24 @@ +# FidelityFX SDK + +AMD FidelityFX SDK, used for the FSR 3.1 upscaler's GPU sources. Unmodified upstream copy. + +- Upstream: https://github.com/GPUOpen-LibrariesAndSDKs/FidelityFX-SDK +- Version: v1.1.4, commit `c6efa6bf7f2027b3ec94f28578bb5965eabb9e55` +- License: MIT, in `LICENSE.txt`. Keep it with any distribution. + +What is here and why: + +| | | +|---|---| +| `include/FidelityFX/gpu/` | The GPU-side headers the passes include: the common core, `fsr1/`, `spd/` (the single-pass downsampler the pyramids use) and `fsr3upscaler/` | +| `shaders/fsr3upscaler/*.glsl` | The eight upscaler passes, as AMD ships them | +| `LICENSE.txt` | AMD's MIT notice | + +No runtime library is needed, and none is included: the passes are compiled from these sources into +`gpu/vk/shaders/fsr3_*_comp_spv.h` by `scripts/fsr3_shaders.py`, which is also what +`tests/test_fsr3_shaders.py` runs to prove the checked-in headers still match. This is the SDK-source +route rather than AMD's FidelityFX API, which would load AMD's own Vulkan runtime and is Windows +only; see `docs/upscaling.md`. + +Nothing in this folder is edited. A change belongs in a new folder with its own note, per +`CONTRIBUTING.md`. diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/ffx_common_types.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/ffx_common_types.h new file mode 100644 index 000000000..2c4f0ba02 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/ffx_common_types.h @@ -0,0 +1,558 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_COMMON_TYPES_H +#define FFX_COMMON_TYPES_H + +#if defined(FFX_CPU) +#define FFX_PARAMETER_IN +#define FFX_PARAMETER_OUT +#define FFX_PARAMETER_INOUT +#define FFX_PARAMETER_UNIFORM +#elif defined(FFX_HLSL) +#define FFX_PARAMETER_IN in +#define FFX_PARAMETER_OUT out +#define FFX_PARAMETER_INOUT inout +#define FFX_PARAMETER_UNIFORM uniform +#elif defined(FFX_GLSL) +#define FFX_PARAMETER_IN in +#define FFX_PARAMETER_OUT out +#define FFX_PARAMETER_INOUT inout +#define FFX_PARAMETER_UNIFORM const //[cacao_placeholder] until a better fit is found! +#endif // #if defined(FFX_CPU) + +#if defined(FFX_CPU) +/// A typedef for a boolean value. +/// +/// @ingroup CPUTypes +typedef bool FfxBoolean; + +/// A typedef for a unsigned 8bit integer. +/// +/// @ingroup CPUTypes +typedef uint8_t FfxUInt8; + +/// A typedef for a unsigned 16bit integer. +/// +/// @ingroup CPUTypes +typedef uint16_t FfxUInt16; + +/// A typedef for a unsigned 32bit integer. +/// +/// @ingroup CPUTypes +typedef uint32_t FfxUInt32; + +/// A typedef for a unsigned 64bit integer. +/// +/// @ingroup CPUTypes +typedef uint64_t FfxUInt64; + +/// A typedef for a signed 8bit integer. +/// +/// @ingroup CPUTypes +typedef int8_t FfxInt8; + +/// A typedef for a signed 16bit integer. +/// +/// @ingroup CPUTypes +typedef int16_t FfxInt16; + +/// A typedef for a signed 32bit integer. +/// +/// @ingroup CPUTypes +typedef int32_t FfxInt32; + +/// A typedef for a signed 64bit integer. +/// +/// @ingroup CPUTypes +typedef int64_t FfxInt64; + +/// A typedef for a floating point value. +/// +/// @ingroup CPUTypes +typedef float FfxFloat32; + +/// A typedef for a 2-dimensional floating point value. +/// +/// @ingroup CPUTypes +typedef float FfxFloat32x2[2]; + +/// A typedef for a 3-dimensional floating point value. +/// +/// @ingroup CPUTypes +typedef float FfxFloat32x3[3]; + +/// A typedef for a 4-dimensional floating point value. +/// +/// @ingroup CPUTypes +typedef float FfxFloat32x4[4]; + +/// A typedef for a 2x2 floating point matrix. +/// +/// @ingroup CPUTypes +typedef float FfxFloat32x2x2[4]; + +/// A typedef for a 3x3 floating point matrix. +/// +/// @ingroup CPUTypes +typedef float FfxFloat32x3x3[9]; + +/// A typedef for a 3x4 floating point matrix. +/// +/// @ingroup CPUTypes +typedef float FfxFloat32x3x4[12]; + +/// A typedef for a 4x4 floating point matrix. +/// +/// @ingroup CPUTypes +typedef float FfxFloat32x4x4[16]; + +/// A typedef for a 2-dimensional 32bit signed integer. +/// +/// @ingroup CPUTypes +typedef int32_t FfxInt32x2[2]; + +/// A typedef for a 3-dimensional 32bit signed integer. +/// +/// @ingroup CPUTypes +typedef int32_t FfxInt32x3[3]; + +/// A typedef for a 4-dimensional 32bit signed integer. +/// +/// @ingroup CPUTypes +typedef int32_t FfxInt32x4[4]; + +/// A typedef for a 2-dimensional 32bit usigned integer. +/// +/// @ingroup CPUTypes +typedef uint32_t FfxUInt32x2[2]; + +/// A typedef for a 3-dimensional 32bit unsigned integer. +/// +/// @ingroup CPUTypes +typedef uint32_t FfxUInt32x3[3]; + +/// A typedef for a 4-dimensional 32bit unsigned integer. +/// +/// @ingroup CPUTypes +typedef uint32_t FfxUInt32x4[4]; +#endif // #if defined(FFX_CPU) + +#if defined(FFX_HLSL) + +#define FfxFloat32Mat4 matrix +#define FfxFloat32Mat3 matrix + +/// A typedef for a boolean value. +/// +/// @ingroup HLSLTypes +typedef bool FfxBoolean; + +#if FFX_HLSL_SM>=62 + +/// @defgroup HLSL62Types HLSL 6.2 And Above Types +/// HLSL 6.2 and above type defines for all commonly used variables +/// +/// @ingroup HLSLTypes + +/// A typedef for a floating point value. +/// +/// @ingroup HLSL62Types +typedef float32_t FfxFloat32; + +/// A typedef for a 2-dimensional floating point value. +/// +/// @ingroup HLSL62Types +typedef float32_t2 FfxFloat32x2; + +/// A typedef for a 3-dimensional floating point value. +/// +/// @ingroup HLSL62Types +typedef float32_t3 FfxFloat32x3; + +/// A typedef for a 4-dimensional floating point value. +/// +/// @ingroup HLSL62Types +typedef float32_t4 FfxFloat32x4; + +/// A [cacao_placeholder] typedef for matrix type until confirmed. +typedef float4x4 FfxFloat32x4x4; +typedef float3x4 FfxFloat32x3x4; +typedef float3x3 FfxFloat32x3x3; +typedef float2x2 FfxFloat32x2x2; + +/// A typedef for a unsigned 32bit integer. +/// +/// @ingroup HLSL62Types +typedef uint32_t FfxUInt32; + +/// A typedef for a 2-dimensional 32bit unsigned integer. +/// +/// @ingroup HLSL62Types +typedef uint32_t2 FfxUInt32x2; + +/// A typedef for a 3-dimensional 32bit unsigned integer. +/// +/// @ingroup HLSL62Types +typedef uint32_t3 FfxUInt32x3; + +/// A typedef for a 4-dimensional 32bit unsigned integer. +/// +/// @ingroup HLSL62Types +typedef uint32_t4 FfxUInt32x4; + +/// A typedef for a signed 32bit integer. +/// +/// @ingroup HLSL62Types +typedef int32_t FfxInt32; + +/// A typedef for a 2-dimensional signed 32bit integer. +/// +/// @ingroup HLSL62Types +typedef int32_t2 FfxInt32x2; + +/// A typedef for a 3-dimensional signed 32bit integer. +/// +/// @ingroup HLSL62Types +typedef int32_t3 FfxInt32x3; + +/// A typedef for a 4-dimensional signed 32bit integer. +/// +/// @ingroup HLSL62Types +typedef int32_t4 FfxInt32x4; + +#else // #if FFX_HLSL_SM>=62 + +/// @defgroup HLSLBaseTypes HLSL 6.1 And Below Types +/// HLSL 6.1 and below type defines for all commonly used variables +/// +/// @ingroup HLSLTypes + +#define FfxFloat32 float +#define FfxFloat32x2 float2 +#define FfxFloat32x3 float3 +#define FfxFloat32x4 float4 + +/// A [cacao_placeholder] typedef for matrix type until confirmed. +#define FfxFloat32x4x4 float4x4 +#define FfxFloat32x3x4 float3x4 +#define FfxFloat32x3x3 float3x3 +#define FfxFloat32x2x2 float2x2 + +/// A typedef for a unsigned 32bit integer. +/// +/// @ingroup GPU +typedef uint FfxUInt32; +typedef uint2 FfxUInt32x2; +typedef uint3 FfxUInt32x3; +typedef uint4 FfxUInt32x4; + +typedef int FfxInt32; +typedef int2 FfxInt32x2; +typedef int3 FfxInt32x3; +typedef int4 FfxInt32x4; + +#endif // #if FFX_HLSL_SM>=62 + +#if FFX_HALF + +#if FFX_HLSL_SM >= 62 + +typedef float16_t FfxFloat16; +typedef float16_t2 FfxFloat16x2; +typedef float16_t3 FfxFloat16x3; +typedef float16_t4 FfxFloat16x4; + +/// A typedef for an unsigned 16bit integer. +/// +/// @ingroup HLSLTypes +typedef uint16_t FfxUInt16; +typedef uint16_t2 FfxUInt16x2; +typedef uint16_t3 FfxUInt16x3; +typedef uint16_t4 FfxUInt16x4; + +/// A typedef for a signed 16bit integer. +/// +/// @ingroup HLSLTypes +typedef int16_t FfxInt16; +typedef int16_t2 FfxInt16x2; +typedef int16_t3 FfxInt16x3; +typedef int16_t4 FfxInt16x4; +#else // #if FFX_HLSL_SM>=62 +typedef min16float FfxFloat16; +typedef min16float2 FfxFloat16x2; +typedef min16float3 FfxFloat16x3; +typedef min16float4 FfxFloat16x4; + +/// A typedef for an unsigned 16bit integer. +/// +/// @ingroup HLSLTypes +typedef min16uint FfxUInt16; +typedef min16uint2 FfxUInt16x2; +typedef min16uint3 FfxUInt16x3; +typedef min16uint4 FfxUInt16x4; + +/// A typedef for a signed 16bit integer. +/// +/// @ingroup HLSLTypes +typedef min16int FfxInt16; +typedef min16int2 FfxInt16x2; +typedef min16int3 FfxInt16x3; +typedef min16int4 FfxInt16x4; +#endif // #if FFX_HLSL_SM>=62 + +#endif // FFX_HALF + +#endif // #if defined(FFX_HLSL) + +#if defined(FFX_GLSL) + +#define FfxFloat32Mat4 mat4 +#define FfxFloat32Mat3 mat3 + +/// A typedef for a boolean value. +/// +/// @ingroup GLSLTypes +#define FfxBoolean bool +#define FfxFloat32 float +#define FfxFloat32x2 vec2 +#define FfxFloat32x3 vec3 +#define FfxFloat32x4 vec4 +#define FfxUInt32 uint +#define FfxUInt32x2 uvec2 +#define FfxUInt32x3 uvec3 +#define FfxUInt32x4 uvec4 +#define FfxInt32 int +#define FfxInt32x2 ivec2 +#define FfxInt32x3 ivec3 +#define FfxInt32x4 ivec4 + +/// A [cacao_placeholder] typedef for matrix type until confirmed. +#define FfxFloat32x4x4 mat4 +#define FfxFloat32x3x4 mat4x3 +#define FfxFloat32x3x3 mat3 +#define FfxFloat32x2x2 mat2 + +#if FFX_HALF +#define FfxFloat16 float16_t +#define FfxFloat16x2 f16vec2 +#define FfxFloat16x3 f16vec3 +#define FfxFloat16x4 f16vec4 +#define FfxUInt16 uint16_t +#define FfxUInt16x2 u16vec2 +#define FfxUInt16x3 u16vec3 +#define FfxUInt16x4 u16vec4 +#define FfxInt16 int16_t +#define FfxInt16x2 i16vec2 +#define FfxInt16x3 i16vec3 +#define FfxInt16x4 i16vec4 +#endif // FFX_HALF +#endif // #if defined(FFX_GLSL) + +// Global toggles: +// #define FFX_HALF (1) +// #define FFX_HLSL_SM (62) + +#if FFX_HALF + +#if FFX_HLSL_SM >= 62 + +#define FFX_MIN16_SCALAR( TypeName, BaseComponentType ) typedef BaseComponentType##16_t TypeName; +#define FFX_MIN16_VECTOR( TypeName, BaseComponentType, COL ) typedef vector TypeName; +#define FFX_MIN16_MATRIX( TypeName, BaseComponentType, ROW, COL ) typedef matrix TypeName; + +#define FFX_16BIT_SCALAR( TypeName, BaseComponentType ) typedef BaseComponentType##16_t TypeName; +#define FFX_16BIT_VECTOR( TypeName, BaseComponentType, COL ) typedef vector TypeName; +#define FFX_16BIT_MATRIX( TypeName, BaseComponentType, ROW, COL ) typedef matrix TypeName; + +#else //FFX_HLSL_SM>=62 + +#define FFX_MIN16_SCALAR( TypeName, BaseComponentType ) typedef min16##BaseComponentType TypeName; +#define FFX_MIN16_VECTOR( TypeName, BaseComponentType, COL ) typedef vector TypeName; +#define FFX_MIN16_MATRIX( TypeName, BaseComponentType, ROW, COL ) typedef matrix TypeName; + +#define FFX_16BIT_SCALAR( TypeName, BaseComponentType ) FFX_MIN16_SCALAR( TypeName, BaseComponentType ); +#define FFX_16BIT_VECTOR( TypeName, BaseComponentType, COL ) FFX_MIN16_VECTOR( TypeName, BaseComponentType, COL ); +#define FFX_16BIT_MATRIX( TypeName, BaseComponentType, ROW, COL ) FFX_MIN16_MATRIX( TypeName, BaseComponentType, ROW, COL ); + +#endif //FFX_HLSL_SM>=62 + +#else //FFX_HALF + +#define FFX_MIN16_SCALAR( TypeName, BaseComponentType ) typedef BaseComponentType TypeName; +#define FFX_MIN16_VECTOR( TypeName, BaseComponentType, COL ) typedef vector TypeName; +#define FFX_MIN16_MATRIX( TypeName, BaseComponentType, ROW, COL ) typedef matrix TypeName; + +#define FFX_16BIT_SCALAR( TypeName, BaseComponentType ) typedef BaseComponentType TypeName; +#define FFX_16BIT_VECTOR( TypeName, BaseComponentType, COL ) typedef vector TypeName; +#define FFX_16BIT_MATRIX( TypeName, BaseComponentType, ROW, COL ) typedef matrix TypeName; + +#endif //FFX_HALF + +#if defined(FFX_GPU) +// Common typedefs: +#if defined(FFX_HLSL) +FFX_MIN16_SCALAR( FFX_MIN16_F , float ); +FFX_MIN16_VECTOR( FFX_MIN16_F2, float, 2 ); +FFX_MIN16_VECTOR( FFX_MIN16_F3, float, 3 ); +FFX_MIN16_VECTOR( FFX_MIN16_F4, float, 4 ); + +FFX_MIN16_SCALAR( FFX_MIN16_I, int ); +FFX_MIN16_VECTOR( FFX_MIN16_I2, int, 2 ); +FFX_MIN16_VECTOR( FFX_MIN16_I3, int, 3 ); +FFX_MIN16_VECTOR( FFX_MIN16_I4, int, 4 ); + +FFX_MIN16_SCALAR( FFX_MIN16_U, uint ); +FFX_MIN16_VECTOR( FFX_MIN16_U2, uint, 2 ); +FFX_MIN16_VECTOR( FFX_MIN16_U3, uint, 3 ); +FFX_MIN16_VECTOR( FFX_MIN16_U4, uint, 4 ); + +FFX_16BIT_SCALAR( FFX_F16_t , float ); +FFX_16BIT_VECTOR( FFX_F16_t2, float, 2 ); +FFX_16BIT_VECTOR( FFX_F16_t3, float, 3 ); +FFX_16BIT_VECTOR( FFX_F16_t4, float, 4 ); + +FFX_16BIT_SCALAR( FFX_I16_t, int ); +FFX_16BIT_VECTOR( FFX_I16_t2, int, 2 ); +FFX_16BIT_VECTOR( FFX_I16_t3, int, 3 ); +FFX_16BIT_VECTOR( FFX_I16_t4, int, 4 ); + +FFX_16BIT_SCALAR( FFX_U16_t, uint ); +FFX_16BIT_VECTOR( FFX_U16_t2, uint, 2 ); +FFX_16BIT_VECTOR( FFX_U16_t3, uint, 3 ); +FFX_16BIT_VECTOR( FFX_U16_t4, uint, 4 ); + +#define TYPEDEF_MIN16_TYPES(Prefix) \ +typedef FFX_MIN16_F Prefix##_F; \ +typedef FFX_MIN16_F2 Prefix##_F2; \ +typedef FFX_MIN16_F3 Prefix##_F3; \ +typedef FFX_MIN16_F4 Prefix##_F4; \ +typedef FFX_MIN16_I Prefix##_I; \ +typedef FFX_MIN16_I2 Prefix##_I2; \ +typedef FFX_MIN16_I3 Prefix##_I3; \ +typedef FFX_MIN16_I4 Prefix##_I4; \ +typedef FFX_MIN16_U Prefix##_U; \ +typedef FFX_MIN16_U2 Prefix##_U2; \ +typedef FFX_MIN16_U3 Prefix##_U3; \ +typedef FFX_MIN16_U4 Prefix##_U4; + +#define TYPEDEF_16BIT_TYPES(Prefix) \ +typedef FFX_16BIT_F Prefix##_F; \ +typedef FFX_16BIT_F2 Prefix##_F2; \ +typedef FFX_16BIT_F3 Prefix##_F3; \ +typedef FFX_16BIT_F4 Prefix##_F4; \ +typedef FFX_16BIT_I Prefix##_I; \ +typedef FFX_16BIT_I2 Prefix##_I2; \ +typedef FFX_16BIT_I3 Prefix##_I3; \ +typedef FFX_16BIT_I4 Prefix##_I4; \ +typedef FFX_16BIT_U Prefix##_U; \ +typedef FFX_16BIT_U2 Prefix##_U2; \ +typedef FFX_16BIT_U3 Prefix##_U3; \ +typedef FFX_16BIT_U4 Prefix##_U4; + +#define TYPEDEF_FULL_PRECISION_TYPES(Prefix) \ +typedef FfxFloat32 Prefix##_F; \ +typedef FfxFloat32x2 Prefix##_F2; \ +typedef FfxFloat32x3 Prefix##_F3; \ +typedef FfxFloat32x4 Prefix##_F4; \ +typedef FfxInt32 Prefix##_I; \ +typedef FfxInt32x2 Prefix##_I2; \ +typedef FfxInt32x3 Prefix##_I3; \ +typedef FfxInt32x4 Prefix##_I4; \ +typedef FfxUInt32 Prefix##_U; \ +typedef FfxUInt32x2 Prefix##_U2; \ +typedef FfxUInt32x3 Prefix##_U3; \ +typedef FfxUInt32x4 Prefix##_U4; +#endif // #if defined(FFX_HLSL) + +#if defined(FFX_GLSL) + +#if FFX_HALF + +#define FFX_MIN16_F float16_t +#define FFX_MIN16_F2 f16vec2 +#define FFX_MIN16_F3 f16vec3 +#define FFX_MIN16_F4 f16vec4 + +#define FFX_MIN16_I int16_t +#define FFX_MIN16_I2 i16vec2 +#define FFX_MIN16_I3 i16vec3 +#define FFX_MIN16_I4 i16vec4 + +#define FFX_MIN16_U uint16_t +#define FFX_MIN16_U2 u16vec2 +#define FFX_MIN16_U3 u16vec3 +#define FFX_MIN16_U4 u16vec4 + +#define FFX_16BIT_F float16_t +#define FFX_16BIT_F2 f16vec2 +#define FFX_16BIT_F3 f16vec3 +#define FFX_16BIT_F4 f16vec4 + +#define FFX_16BIT_I int16_t +#define FFX_16BIT_I2 i16vec2 +#define FFX_16BIT_I3 i16vec3 +#define FFX_16BIT_I4 i16vec4 + +#define FFX_16BIT_U uint16_t +#define FFX_16BIT_U2 u16vec2 +#define FFX_16BIT_U3 u16vec3 +#define FFX_16BIT_U4 u16vec4 + +#else // FFX_HALF + +#define FFX_MIN16_F float +#define FFX_MIN16_F2 vec2 +#define FFX_MIN16_F3 vec3 +#define FFX_MIN16_F4 vec4 + +#define FFX_MIN16_I int +#define FFX_MIN16_I2 ivec2 +#define FFX_MIN16_I3 ivec3 +#define FFX_MIN16_I4 ivec4 + +#define FFX_MIN16_U uint +#define FFX_MIN16_U2 uvec2 +#define FFX_MIN16_U3 uvec3 +#define FFX_MIN16_U4 uvec4 + +#define FFX_16BIT_F float +#define FFX_16BIT_F2 vec2 +#define FFX_16BIT_F3 vec3 +#define FFX_16BIT_F4 vec4 + +#define FFX_16BIT_I int +#define FFX_16BIT_I2 ivec2 +#define FFX_16BIT_I3 ivec3 +#define FFX_16BIT_I4 ivec4 + +#define FFX_16BIT_U uint +#define FFX_16BIT_U2 uvec2 +#define FFX_16BIT_U3 uvec3 +#define FFX_16BIT_U4 uvec4 + +#endif // FFX_HALF + +#endif // #if defined(FFX_GLSL) + +#endif // #if defined(FFX_GPU) +#endif // #ifndef FFX_COMMON_TYPES_H diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/ffx_core.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/ffx_core.h new file mode 100644 index 000000000..d1ed14419 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/ffx_core.h @@ -0,0 +1,80 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +/// @defgroup FfxGPU GPU +/// The FidelityFX SDK GPU References +/// +/// @ingroup ffxSDK + +/// @defgroup FfxHLSL HLSL References +/// FidelityFX SDK HLSL GPU References +/// +/// @ingroup FfxGPU + +/// @defgroup FfxGLSL GLSL References +/// FidelityFX SDK GLSL GPU References +/// +/// @ingroup FfxGPU + +/// @defgroup FfxGPUEffects FidelityFX GPU References +/// FidelityFX Effect GPU Reference Documentation +/// +/// @ingroup FfxGPU + +/// @defgroup GPUCore GPU Core +/// GPU defines and functions +/// +/// @ingroup FfxGPU + +#if !defined(FFX_CORE_H) +#define FFX_CORE_H + +#ifdef __hlsl_dx_compiler +#pragma dxc diagnostic push +#pragma dxc diagnostic ignored "-Wambig-lit-shift" +#endif //__hlsl_dx_compiler + +#include "ffx_common_types.h" + +#if defined(FFX_CPU) + #include "ffx_core_cpu.h" +#endif // #if defined(FFX_CPU) + +#if defined(FFX_GLSL) && defined(FFX_GPU) + #include "ffx_core_glsl.h" +#endif // #if defined(FFX_GLSL) && defined(FFX_GPU) + +#if defined(FFX_HLSL) && defined(FFX_GPU) + #include "ffx_core_hlsl.h" +#endif // #if defined(FFX_HLSL) && defined(FFX_GPU) + +#if defined(FFX_GPU) + #include "ffx_core_gpu_common.h" + #include "ffx_core_gpu_common_half.h" + #include "ffx_core_portability.h" +#endif // #if defined(FFX_GPU) + +#ifdef __hlsl_dx_compiler +#pragma dxc diagnostic pop +#endif //__hlsl_dx_compiler + +#endif // #if !defined(FFX_CORE_H) diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/ffx_core_glsl.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/ffx_core_glsl.h new file mode 100644 index 000000000..c8dccacdb --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/ffx_core_glsl.h @@ -0,0 +1,1916 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +/// @defgroup GLSLCore GLSL Core +/// GLSL core defines and functions +/// +/// @ingroup FfxGLSL + +/// A define for abstracting select functionality for pre/post HLSL 21 +/// +/// @ingroup GLSLCore +#define FFX_SELECT(cond, arg1, arg2) cond ? arg1 : arg2 + +/// A define for abstracting shared memory between shading languages. +/// +/// @ingroup GLSLCore +#define FFX_GROUPSHARED shared + +/// A define for abstracting compute memory barriers between shading languages. +/// +/// @ingroup GLSLCore +#define FFX_GROUP_MEMORY_BARRIER groupMemoryBarrier(); barrier() + +/// A define for abstracting compute atomic additions between shading languages. +/// +/// @ingroup GLSLCore +#define FFX_ATOMIC_ADD(x, y) atomicAdd(x, y) + +/// A define for abstracting compute atomic additions between shading languages. +/// +/// @ingroup GLSLCore +#define FFX_ATOMIC_ADD_RETURN(x, y, r) r = atomicAdd(x, y) + +/// A define for abstracting compute atomic OR between shading languages. +/// +/// @ingroup GLSLCore +#define FFX_ATOMIC_OR(x, y) atomicOr(x, y) + +/// A define for abstracting compute atomic min between shading languages. +/// +/// @ingroup GLSLCore +#define FFX_ATOMIC_MIN(x, y) atomicMin(x, y) + +/// A define for abstracting compute atomic max between shading languages. +/// +/// @ingroup GLSLCore +#define FFX_ATOMIC_MAX(x, y) atomicMax(x, y) + +/// A define added to accept static markup on functions to aid CPU/GPU portability of code. +/// +/// @ingroup GLSLCore +#define FFX_STATIC + +/// A define for abstracting loop unrolling between shading languages. +/// +/// @ingroup GLSLCore +#define FFX_UNROLL + +/// A define for abstracting a 'greater than' comparison operator between two types. +/// +/// @ingroup GLSLCore +#define FFX_GREATER_THAN(x, y) greaterThan(x, y) + +/// A define for abstracting a 'greater than or equal' comparison operator between two types. +/// +/// @ingroup GLSLCore +#define FFX_GREATER_THAN_EQUAL(x, y) greaterThanEqual(x, y) + +/// A define for abstracting a 'less than' comparison operator between two types. +/// +/// @ingroup GLSLCore +#define FFX_LESS_THAN(x, y) lessThan(x, y) + +/// A define for abstracting a 'less than or equal' comparison operator between two types. +/// +/// @ingroup GLSLCore +#define FFX_LESS_THAN_EQUAL(x, y) lessThanEqual(x, y) + +/// A define for abstracting an 'equal' comparison operator between two types. +/// +/// @ingroup GLSLCore +#define FFX_EQUAL(x, y) equal(x, y) + +/// A define for abstracting a 'not equal' comparison operator between two types. +/// +/// @ingroup GLSLCore +#define FFX_NOT_EQUAL(x, y) notEqual(x, y) + +/// A define for abstracting matrix multiply operations between shading languages. +/// +/// @ingroup GLSLCore +#define FFX_MATRIX_MULTIPLY(a, b) (a * b) + +/// A define for abstracting vector transformations between shading languages. +/// +/// @ingroup GLSLCore +#define FFX_TRANSFORM_VECTOR(a, b) (a * b) + +/// A define for abstracting modulo operations between shading languages. +/// +/// @ingroup GLSLCore +#define FFX_MODULO(a, b) (mod(a, b)) + +/// Broadcast a scalar value to a 1-dimensional floating point vector. +/// +/// @ingroup GLSLCore +#define FFX_BROADCAST_FLOAT32(x) FfxFloat32(x) + +/// Broadcast a scalar value to a 2-dimensional floating point vector. +/// +/// @ingroup GLSLCore +#define FFX_BROADCAST_FLOAT32X2(x) FfxFloat32x2(FfxFloat32(x)) + +/// Broadcast a scalar value to a 3-dimensional floating point vector. +/// +/// @ingroup GLSLCore +#define FFX_BROADCAST_FLOAT32X3(x) FfxFloat32x3(FfxFloat32(x)) + +/// Broadcast a scalar value to a 4-dimensional floating point vector. +/// +/// @ingroup GLSLCore +#define FFX_BROADCAST_FLOAT32X4(x) FfxFloat32x4(FfxFloat32(x)) + +/// Broadcast a scalar value to a 1-dimensional unsigned integer vector. +/// +/// @ingroup GLSLCore +#define FFX_BROADCAST_UINT32(x) FfxUInt32(x) + +/// Broadcast a scalar value to a 2-dimensional unsigned integer vector. +/// +/// @ingroup GLSLCore +#define FFX_BROADCAST_UINT32X2(x) FfxUInt32x2(FfxUInt32(x)) + +/// Broadcast a scalar value to a 3-dimensional unsigned integer vector. +/// +/// @ingroup GLSLCore +#define FFX_BROADCAST_UINT32X3(x) FfxUInt32x3(FfxUInt32(x)) + +/// Broadcast a scalar value to a 4-dimensional unsigned integer vector. +/// +/// @ingroup GLSLCore +#define FFX_BROADCAST_UINT32X4(x) FfxUInt32x4(FfxUInt32(x)) + +/// Broadcast a scalar value to a 1-dimensional signed integer vector. +/// +/// @ingroup GLSLCore +#define FFX_BROADCAST_INT32(x) FfxInt32(x) + +/// Broadcast a scalar value to a 2-dimensional signed integer vector. +/// +/// @ingroup GLSLCore +#define FFX_BROADCAST_INT32X2(x) FfxInt32x2(FfxInt32(x)) + +/// Broadcast a scalar value to a 3-dimensional signed integer vector. +/// +/// @ingroup GLSLCore +#define FFX_BROADCAST_INT32X3(x) FfxInt32x3(FfxInt32(x)) + +/// Broadcast a scalar value to a 4-dimensional signed integer vector. +/// +/// @ingroup GLSLCore +#define FFX_BROADCAST_INT32X4(x) FfxInt32x4(FfxInt32(x)) + +/// Broadcast a scalar value to a 1-dimensional half-precision floating point vector. +/// +/// @ingroup GLSLCore +#define FFX_BROADCAST_MIN_FLOAT16(x) FFX_MIN16_F(x) + +/// Broadcast a scalar value to a 2-dimensional half-precision floating point vector. +/// +/// @ingroup GLSLCore +#define FFX_BROADCAST_MIN_FLOAT16X2(x) FFX_MIN16_F2(FFX_MIN16_F(x)) + +/// Broadcast a scalar value to a 3-dimensional half-precision floating point vector. +/// +/// @ingroup GLSLCore +#define FFX_BROADCAST_MIN_FLOAT16X3(x) FFX_MIN16_F3(FFX_MIN16_F(x)) + +/// Broadcast a scalar value to a 4-dimensional half-precision floating point vector. +/// +/// @ingroup GLSLCore +#define FFX_BROADCAST_MIN_FLOAT16X4(x) FFX_MIN16_F4(FFX_MIN16_F(x)) + +/// Broadcast a scalar value to a 1-dimensional half-precision unsigned integer vector. +/// +/// @ingroup GLSLCore +#define FFX_BROADCAST_MIN_UINT16(x) FFX_MIN16_U(x) + +/// Broadcast a scalar value to a 2-dimensional half-precision unsigned integer vector. +/// +/// @ingroup GLSLCore +#define FFX_BROADCAST_MIN_UINT16X2(x) FFX_MIN16_U2(FFX_MIN16_U(x)) + +/// Broadcast a scalar value to a 3-dimensional half-precision unsigned integer vector. +/// +/// @ingroup GLSLCore +#define FFX_BROADCAST_MIN_UINT16X3(x) FFX_MIN16_U3(FFX_MIN16_U(x)) + +/// Broadcast a scalar value to a 4-dimensional half-precision unsigned integer vector. +/// +/// @ingroup GLSLCore +#define FFX_BROADCAST_MIN_UINT16X4(x) FFX_MIN16_U4(FFX_MIN16_U(x)) + +/// Broadcast a scalar value to a 1-dimensional half-precision signed integer vector. +/// +/// @ingroup GLSLCore +#define FFX_BROADCAST_MIN_INT16(x) FFX_MIN16_I(x) + +/// Broadcast a scalar value to a 2-dimensional half-precision signed integer vector. +/// +/// @ingroup GLSLCore +#define FFX_BROADCAST_MIN_INT16X2(x) FFX_MIN16_I2(FFX_MIN16_I(x)) + +/// Broadcast a scalar value to a 3-dimensional half-precision signed integer vector. +/// +/// @ingroup GLSLCore +#define FFX_BROADCAST_MIN_INT16X3(x) FFX_MIN16_I3(FFX_MIN16_I(x)) + +/// Broadcast a scalar value to a 4-dimensional half-precision signed integer vector. +/// +/// @ingroup GLSLCore +#define FFX_BROADCAST_MIN_INT16X4(x) FFX_MIN16_I4(FFX_MIN16_I(x)) + + #extension GL_EXT_shader_explicit_arithmetic_types : require +#if !defined(FFX_SKIP_EXT) +#if FFX_HALF + #extension GL_EXT_shader_16bit_storage : require +#endif // FFX_HALF + +#if defined(FFX_LONG) + #extension GL_ARB_gpu_shader_int64 : require + #extension GL_NV_shader_atomic_int64 : require +#endif // #if defined(FFX_LONG) + +#if defined(FFX_WAVE) + #extension GL_KHR_shader_subgroup_arithmetic : require + #extension GL_KHR_shader_subgroup_ballot : require + #extension GL_KHR_shader_subgroup_quad : require + #extension GL_KHR_shader_subgroup_shuffle : require +#endif // #if defined(FFX_WAVE) +#endif // #if !defined(FFX_SKIP_EXT) + +// Forward declarations +FfxFloat32 ffxSqrt(FfxFloat32 x); +FfxFloat32x2 ffxSqrt(FfxFloat32x2 x); +FfxFloat32x3 ffxSqrt(FfxFloat32x3 x); +FfxFloat32x4 ffxSqrt(FfxFloat32x4 x); + +/// Interprets the bit pattern of x as a floating-point number. +/// +/// @param [in] x The input value. +/// +/// @returns +/// The input interpreted as a floating-point number. +/// +/// @ingroup GLSLCore +FfxFloat32 ffxAsFloat(FfxUInt32 x) +{ + return uintBitsToFloat(x); +} + +/// Interprets the bit pattern of x as a floating-point number. +/// +/// @param [in] x The input value. +/// +/// @returns +/// The input interpreted as a floating-point number. +/// +/// @ingroup GLSLCore +FfxFloat32x2 ffxAsFloat(FfxUInt32x2 x) +{ + return uintBitsToFloat(x); +} + +/// Interprets the bit pattern of x as a floating-point number. +/// +/// @param [in] x The input value. +/// +/// @returns +/// The input interpreted as a floating-point number. +/// +/// @ingroup GLSLCore +FfxFloat32x3 ffxAsFloat(FfxUInt32x3 x) +{ + return uintBitsToFloat(x); +} + +/// Interprets the bit pattern of x as a floating-point number. +/// +/// @param [in] x The input value. +/// +/// @returns +/// The input interpreted as a floating-point number. +/// +/// @ingroup GLSLCore +FfxFloat32x4 ffxAsFloat(FfxUInt32x4 x) +{ + return uintBitsToFloat(x); +} + +/// Interprets the bit pattern of x as an unsigned integer. +/// +/// @param [in] x The input value. +/// +/// @returns +/// The input interpreted as an unsigned integer. +/// +/// @ingroup GLSLCore +FfxUInt32 ffxAsUInt32(FfxFloat32 x) +{ + return floatBitsToUint(x); +} + +/// Interprets the bit pattern of x as an unsigned integer. +/// +/// @param [in] x The input value. +/// +/// @returns +/// The input interpreted as an unsigned integer. +/// +/// @ingroup GLSLCore +FfxUInt32x2 ffxAsUInt32(FfxFloat32x2 x) +{ + return floatBitsToUint(x); +} + +/// Interprets the bit pattern of x as an unsigned integer. +/// +/// @param [in] x The input value. +/// +/// @returns +/// The input interpreted as an unsigned integer. +/// +/// @ingroup GLSLCore +FfxUInt32x3 ffxAsUInt32(FfxFloat32x3 x) +{ + return floatBitsToUint(x); +} + +/// Interprets the bit pattern of x as an unsigned integer. +/// +/// @param [in] x The input value. +/// +/// @returns +/// The input interpreted as an unsigned integer. +/// +/// @ingroup GLSLCore +FfxUInt32x4 ffxAsUInt32(FfxFloat32x4 x) +{ + return floatBitsToUint(x); +} + +/// Pack 2x32-bit floating point values in a single 32bit value. +/// +/// This function first converts each component of value into their nearest 16-bit floating +/// point representation, and then stores the X and Y components in the lower and upper 16 bits of the +/// 32bit unsigned integer respectively. +/// +/// @param [in] value A 2-dimensional floating point value to convert and pack. +/// +/// @returns +/// A packed 32bit value containing 2 16bit floating point values. +/// +/// @ingroup GLSLCore +FfxUInt32 ffxPackHalf2x16(FfxFloat32x2 value) +{ + return packHalf2x16(value); +} + +/// Convert a 32bit IEEE 754 floating point value to its nearest 16bit equivalent. +/// +/// @param [in] value The value to convert. +/// +/// @returns +/// The nearest 16bit equivalent of value. +/// +/// @ingroup GLSLCore +FfxUInt32 ffxF32ToF16(FfxFloat32 value) +{ + return packHalf2x16(FfxFloat32x2(value, 0.0)); +} + +/// Broadcast a scalar value to a 2-dimensional floating point vector. +/// +/// @param [in] value The value to to broadcast. +/// +/// @returns +/// A 2-dimensional floating point vector with value in each component. +/// +/// @ingroup GLSLCore +FfxFloat32x2 ffxBroadcast2(FfxFloat32 value) +{ + return FfxFloat32x2(value, value); +} + +/// Broadcast a scalar value to a 3-dimensional floating point vector. +/// +/// @param [in] value The value to to broadcast. +/// +/// @returns +/// A 3-dimensional floating point vector with value in each component. +/// +/// @ingroup GLSLCore +FfxFloat32x3 ffxBroadcast3(FfxFloat32 value) +{ + return FfxFloat32x3(value, value, value); +} + +/// Broadcast a scalar value to a 4-dimensional floating point vector. +/// +/// @param [in] value The value to to broadcast. +/// +/// @returns +/// A 4-dimensional floating point vector with value in each component. +/// +/// @ingroup GLSLCore +FfxFloat32x4 ffxBroadcast4(FfxFloat32 value) +{ + return FfxFloat32x4(value, value, value, value); +} + +/// Broadcast a scalar value to a 2-dimensional signed integer vector. +/// +/// @param [in] value The value to to broadcast. +/// +/// @returns +/// A 2-dimensional signed integer vector with value in each component. +/// +/// @ingroup GLSLCore +FfxInt32x2 ffxBroadcast2(FfxInt32 value) +{ + return FfxInt32x2(value, value); +} + +/// Broadcast a scalar value to a 3-dimensional signed integer vector. +/// +/// @param [in] value The value to to broadcast. +/// +/// @returns +/// A 3-dimensional signed integer vector with value in each component. +/// +/// @ingroup GLSLCore +FfxInt32x3 ffxBroadcast3(FfxInt32 value) +{ + return FfxInt32x3(value, value, value); +} + +/// Broadcast a scalar value to a 4-dimensional signed integer vector. +/// +/// @param [in] value The value to to broadcast. +/// +/// @returns +/// A 4-dimensional signed integer vector with value in each component. +/// +/// @ingroup GLSLCore +FfxInt32x4 ffxBroadcast4(FfxInt32 value) +{ + return FfxInt32x4(value, value, value, value); +} + +/// Broadcast a scalar value to a 2-dimensional unsigned integer vector. +/// +/// @param [in] value The value to to broadcast. +/// +/// @returns +/// A 2-dimensional unsigned integer vector with value in each component. +/// +/// @ingroup GLSLCore +FfxUInt32x2 ffxBroadcast2(FfxUInt32 value) +{ + return FfxUInt32x2(value, value); +} + +/// Broadcast a scalar value to a 3-dimensional unsigned integer vector. +/// +/// @param [in] value The value to to broadcast. +/// +/// @returns +/// A 3-dimensional unsigned integer vector with value in each component. +/// +/// @ingroup GLSLCore +FfxUInt32x3 ffxBroadcast3(FfxUInt32 value) +{ + return FfxUInt32x3(value, value, value); +} + +/// Broadcast a scalar value to a 4-dimensional unsigned integer vector. +/// +/// @param [in] value The value to to broadcast. +/// +/// @returns +/// A 4-dimensional unsigned integer vector with value in each component. +/// +/// @ingroup GLSLCore +FfxUInt32x4 ffxBroadcast4(FfxUInt32 value) +{ + return FfxUInt32x4(value, value, value, value); +} + +/// +/// +/// @ingroup GLSLCore +FfxUInt32 ffxBitfieldExtract(FfxUInt32 src, FfxUInt32 off, FfxUInt32 bits) +{ + return bitfieldExtract(src, FfxInt32(off), FfxInt32(bits)); +} + +/// +/// +/// @ingroup GLSLCore +FfxUInt32 ffxBitfieldInsert(FfxUInt32 src, FfxUInt32 ins, FfxUInt32 mask) +{ + return (ins & mask) | (src & (~mask)); +} + +// Proxy for V_BFI_B32 where the 'mask' is set as 'bits', 'mask=(1<mix instrinsic function. Implements the +/// following math: +/// +/// (1 - t) * x + t * y +/// +/// @param [in] x The first value to lerp between. +/// @param [in] y The second value to lerp between. +/// @param [in] t The value to determine how much of x and how much of y. +/// +/// @returns +/// A linearly interpolated value between x and y according to t. +/// +/// @ingroup GLSLCore +FfxFloat32 ffxLerp(FfxFloat32 x, FfxFloat32 y, FfxFloat32 t) +{ + return mix(x, y, t); +} + +/// Compute the linear interopation between two values. +/// +/// Implemented by calling the GLSL mix instrinsic function. Implements the +/// following math: +/// +/// (1 - t) * x + t * y +/// +/// @param [in] x The first value to lerp between. +/// @param [in] y The second value to lerp between. +/// @param [in] t The value to determine how much of x and how much of y. +/// +/// @returns +/// A linearly interpolated value between x and y according to t. +/// +/// @ingroup GLSLCore +FfxFloat32x2 ffxLerp(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32 t) +{ + return mix(x, y, t); +} + +/// Compute the linear interopation between two values. +/// +/// Implemented by calling the GLSL mix instrinsic function. Implements the +/// following math: +/// +/// (1 - t) * x + t * y +/// +/// @param [in] x The first value to lerp between. +/// @param [in] y The second value to lerp between. +/// @param [in] t The value to determine how much of x and how much of y. +/// +/// @returns +/// A linearly interpolated value between x and y according to t. +/// +/// @ingroup GLSLCore +FfxFloat32x2 ffxLerp(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 t) +{ + return mix(x, y, t); +} + +/// Compute the linear interopation between two values. +/// +/// Implemented by calling the GLSL mix instrinsic function. Implements the +/// following math: +/// +/// (1 - t) * x + t * y +/// +/// @param [in] x The first value to lerp between. +/// @param [in] y The second value to lerp between. +/// @param [in] t The value to determine how much of x and how much of y. +/// +/// @returns +/// A linearly interpolated value between x and y according to t. +/// +/// @ingroup GLSLCore +FfxFloat32x3 ffxLerp(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32 t) +{ + return mix(x, y, t); +} + +/// Compute the linear interopation between two values. +/// +/// Implemented by calling the GLSL mix instrinsic function. Implements the +/// following math: +/// +/// (1 - t) * x + t * y +/// +/// @param [in] x The first value to lerp between. +/// @param [in] y The second value to lerp between. +/// @param [in] t The value to determine how much of x and how much of y. +/// +/// @returns +/// A linearly interpolated value between x and y according to t. +/// +/// @ingroup GLSLCore +FfxFloat32x3 ffxLerp(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 t) +{ + return mix(x, y, t); +} + +/// Compute the linear interopation between two values. +/// +/// Implemented by calling the GLSL mix instrinsic function. Implements the +/// following math: +/// +/// (1 - t) * x + t * y +/// +/// @param [in] x The first value to lerp between. +/// @param [in] y The second value to lerp between. +/// @param [in] t The value to determine how much of x and how much of y. +/// +/// @returns +/// A linearly interpolated value between x and y according to t. +/// +/// @ingroup GLSLCore +FfxFloat32x4 ffxLerp(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32 t) +{ + return mix(x, y, t); +} + +/// Compute the linear interopation between two values. +/// +/// Implemented by calling the GLSL mix instrinsic function. Implements the +/// following math: +/// +/// (1 - t) * x + t * y +/// +/// @param [in] x The first value to lerp between. +/// @param [in] y The second value to lerp between. +/// @param [in] t The value to determine how much of x and how much of y. +/// +/// @returns +/// A linearly interpolated value between x and y according to t. +/// +/// @ingroup GLSLCore +FfxFloat32x4 ffxLerp(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 t) +{ + return mix(x, y, t); +} + +/// Compute the maximum of three values. +/// +/// NOTE: This function should compile down to a single V_MAX3_F32 operation on +/// GCN or RDNA hardware. +/// +/// @param [in] x The first value to include in the max calculation. +/// @param [in] y The second value to include in the max calcuation. +/// @param [in] z The third value to include in the max calcuation. +/// +/// @returns +/// The maximum value of x, y, and z. +/// +/// @ingroup GLSLCore +FfxFloat32 ffxMax3(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) +{ + return max(x, max(y, z)); +} + +/// Compute the maximum of three values. +/// +/// NOTE: This function should compile down to a single V_MAX3_F32 operation on +/// GCN or RDNA hardware. +/// +/// @param [in] x The first value to include in the max calculation. +/// @param [in] y The second value to include in the max calcuation. +/// @param [in] z The third value to include in the max calcuation. +/// +/// @returns +/// The maximum value of x, y, and z. +/// +/// @ingroup GLSLCore +FfxFloat32x2 ffxMax3(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) +{ + return max(x, max(y, z)); +} + +/// Compute the maximum of three values. +/// +/// NOTE: This function should compile down to a single V_MAX3_F32 operation on +/// GCN or RDNA hardware. +/// +/// @param [in] x The first value to include in the max calculation. +/// @param [in] y The second value to include in the max calcuation. +/// @param [in] z The third value to include in the max calcuation. +/// +/// @returns +/// The maximum value of x, y, and z. +/// +/// @ingroup GLSLCore +FfxFloat32x3 ffxMax3(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) +{ + return max(x, max(y, z)); +} + +/// Compute the maximum of three values. +/// +/// NOTE: This function should compile down to a single V_MAX3_F32 operation on +/// GCN or RDNA hardware. +/// +/// @param [in] x The first value to include in the max calculation. +/// @param [in] y The second value to include in the max calcuation. +/// @param [in] z The third value to include in the max calcuation. +/// +/// @returns +/// The maximum value of x, y, and z. +/// +/// @ingroup GLSLCore +FfxFloat32x4 ffxMax3(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 z) +{ + return max(x, max(y, z)); +} + +/// Compute the maximum of three values. +/// +/// NOTE: This function should compile down to a single V_MAX3_F32 operation on +/// GCN or RDNA hardware. +/// +/// @param [in] x The first value to include in the max calculation. +/// @param [in] y The second value to include in the max calcuation. +/// @param [in] z The third value to include in the max calcuation. +/// +/// @returns +/// The maximum value of x, y, and z. +/// +/// @ingroup GLSLCore +FfxUInt32 ffxMax3(FfxUInt32 x, FfxUInt32 y, FfxUInt32 z) +{ + return max(x, max(y, z)); +} + +/// Compute the maximum of three values. +/// +/// NOTE: This function should compile down to a single V_MAX3_F32 operation on +/// GCN or RDNA hardware. +/// +/// @param [in] x The first value to include in the max calculation. +/// @param [in] y The second value to include in the max calcuation. +/// @param [in] z The third value to include in the max calcuation. +/// +/// @returns +/// The maximum value of x, y, and z. +/// +/// @ingroup GLSLCore +FfxUInt32x2 ffxMax3(FfxUInt32x2 x, FfxUInt32x2 y, FfxUInt32x2 z) +{ + return max(x, max(y, z)); +} + +/// Compute the maximum of three values. +/// +/// NOTE: This function should compile down to a single V_MAX3_F32 operation on +/// GCN/RDNA hardware. +/// +/// @param [in] x The first value to include in the max calculation. +/// @param [in] y The second value to include in the max calcuation. +/// @param [in] z The third value to include in the max calcuation. +/// +/// @returns +/// The maximum value of x, y, and z. +/// +/// @ingroup GLSLCore +FfxUInt32x3 ffxMax3(FfxUInt32x3 x, FfxUInt32x3 y, FfxUInt32x3 z) +{ + return max(x, max(y, z)); +} + +/// Compute the maximum of three values. +/// +/// NOTE: This function should compile down to a single V_MAX3_F32 operation on +/// GCN/RDNA hardware. +/// +/// @param [in] x The first value to include in the max calculation. +/// @param [in] y The second value to include in the max calcuation. +/// @param [in] z The third value to include in the max calcuation. +/// +/// @returns +/// The maximum value of x, y, and z. +/// +/// @ingroup GLSLCore +FfxUInt32x4 ffxMax3(FfxUInt32x4 x, FfxUInt32x4 y, FfxUInt32x4 z) +{ + return max(x, max(y, z)); +} + +/// Compute the median of three values. +/// +/// NOTE: This function should compile down to a single V_MED3_F32 operation on +/// GCN/RDNA hardware. +/// +/// @param [in] x The first value to include in the median calculation. +/// @param [in] y The second value to include in the median calcuation. +/// @param [in] z The third value to include in the median calcuation. +/// +/// @returns +/// The median value of x, y, and z. +/// +/// @ingroup GLSLCore +FfxFloat32 ffxMed3(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) +{ + return max(min(x, y), min(max(x, y), z)); +} + +/// Compute the median of three values. +/// +/// NOTE: This function should compile down to a single V_MED3_F32 operation on +/// GCN/RDNA hardware. +/// +/// @param [in] x The first value to include in the median calculation. +/// @param [in] y The second value to include in the median calcuation. +/// @param [in] z The third value to include in the median calcuation. +/// +/// @returns +/// The median value of x, y, and z. +/// +/// @ingroup GLSLCore +FfxFloat32x2 ffxMed3(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) +{ + return max(min(x, y), min(max(x, y), z)); +} + +/// Compute the median of three values. +/// +/// NOTE: This function should compile down to a single V_MED3_F32 operation on +/// GCN/RDNA hardware. +/// +/// @param [in] x The first value to include in the median calculation. +/// @param [in] y The second value to include in the median calcuation. +/// @param [in] z The third value to include in the median calcuation. +/// +/// @returns +/// The median value of x, y, and z. +/// +/// @ingroup GLSLCore +FfxFloat32x3 ffxMed3(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) +{ + return max(min(x, y), min(max(x, y), z)); +} + +/// Compute the median of three values. +/// +/// NOTE: This function should compile down to a single V_MED3_F32 operation on +/// GCN/RDNA hardware. +/// +/// @param [in] x The first value to include in the median calculation. +/// @param [in] y The second value to include in the median calcuation. +/// @param [in] z The third value to include in the median calcuation. +/// +/// @returns +/// The median value of x, y, and z. +/// +/// @ingroup GLSLCore +FfxFloat32x4 ffxMed3(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 z) +{ + return max(min(x, y), min(max(x, y), z)); +} + +/// Compute the median of three values. +/// +/// NOTE: This function should compile down to a single V_MED3_I32 operation on +/// GCN/RDNA hardware. +/// +/// @param [in] x The first value to include in the median calculation. +/// @param [in] y The second value to include in the median calcuation. +/// @param [in] z The third value to include in the median calcuation. +/// +/// @returns +/// The median value of x, y, and z. +/// +/// @ingroup GLSLCore +FfxInt32 ffxMed3(FfxInt32 x, FfxInt32 y, FfxInt32 z) +{ + return max(min(x, y), min(max(x, y), z)); +} + +/// Compute the median of three values. +/// +/// NOTE: This function should compile down to a single V_MED3_I32 operation on +/// GCN/RDNA hardware. +/// +/// @param [in] x The first value to include in the median calculation. +/// @param [in] y The second value to include in the median calcuation. +/// @param [in] z The third value to include in the median calcuation. +/// +/// @returns +/// The median value of x, y, and z. +/// +/// @ingroup GLSLCore +FfxInt32x2 ffxMed3(FfxInt32x2 x, FfxInt32x2 y, FfxInt32x2 z) +{ + return max(min(x, y), min(max(x, y), z)); +} + +/// Compute the median of three values. +/// +/// NOTE: This function should compile down to a single V_MED3_I32 operation on +/// GCN/RDNA hardware. +/// +/// @param [in] x The first value to include in the median calculation. +/// @param [in] y The second value to include in the median calcuation. +/// @param [in] z The third value to include in the median calcuation. +/// +/// @returns +/// The median value of x, y, and z. +/// +/// @ingroup GLSLCore +FfxInt32x3 ffxMed3(FfxInt32x3 x, FfxInt32x3 y, FfxInt32x3 z) +{ + return max(min(x, y), min(max(x, y), z)); +} + +/// Compute the median of three values. +/// +/// NOTE: This function should compile down to a single V_MED3_I32 operation on +/// GCN/RDNA hardware. +/// +/// @param [in] x The first value to include in the median calculation. +/// @param [in] y The second value to include in the median calcuation. +/// @param [in] z The third value to include in the median calcuation. +/// +/// @returns +/// The median value of x, y, and z. +/// +/// @ingroup GLSLCore +FfxInt32x4 ffxMed3(FfxInt32x4 x, FfxInt32x4 y, FfxInt32x4 z) +{ + return max(min(x, y), min(max(x, y), z)); +} + + +/// Compute the minimum of three values. +/// +/// NOTE: This function should compile down to a single V_MIN3_F32 operation on +/// GCN and RDNA hardware. +/// +/// @param [in] x The first value to include in the min calculation. +/// @param [in] y The second value to include in the min calcuation. +/// @param [in] z The third value to include in the min calcuation. +/// +/// @returns +/// The minimum value of x, y, and z. +/// +/// @ingroup GLSLCore +FfxFloat32 ffxMin3(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) +{ + return min(x, min(y, z)); +} + +/// Compute the minimum of three values. +/// +/// NOTE: This function should compile down to a single V_MIN3_F32 operation on +/// GCN/RDNA hardware. +/// +/// @param [in] x The first value to include in the min calculation. +/// @param [in] y The second value to include in the min calcuation. +/// @param [in] z The third value to include in the min calcuation. +/// +/// @returns +/// The minimum value of x, y, and z. +/// +/// @ingroup GLSLCore +FfxFloat32x2 ffxMin3(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) +{ + return min(x, min(y, z)); +} + +/// Compute the minimum of three values. +/// +/// NOTE: This function should compile down to a single V_MIN3_F32 operation on +/// GCN/RDNA hardware. +/// +/// @param [in] x The first value to include in the min calculation. +/// @param [in] y The second value to include in the min calcuation. +/// @param [in] z The third value to include in the min calcuation. +/// +/// @returns +/// The minimum value of x, y, and z. +/// +/// @ingroup GLSLCore +FfxFloat32x3 ffxMin3(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) +{ + return min(x, min(y, z)); +} + +/// Compute the minimum of three values. +/// +/// NOTE: This function should compile down to a single V_MIN3_F32 operation on +/// GCN/RDNA hardware. +/// +/// @param [in] x The first value to include in the min calculation. +/// @param [in] y The second value to include in the min calcuation. +/// @param [in] z The third value to include in the min calcuation. +/// +/// @returns +/// The minimum value of x, y, and z. +/// +/// @ingroup GLSLCore +FfxFloat32x4 ffxMin3(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 z) +{ + return min(x, min(y, z)); +} + +/// Compute the minimum of three values. +/// +/// NOTE: This function should compile down to a single V_MIN3_F32 operation on +/// GCN/RDNA hardware. +/// +/// @param [in] x The first value to include in the min calculation. +/// @param [in] y The second value to include in the min calcuation. +/// @param [in] z The third value to include in the min calcuation. +/// +/// @returns +/// The minimum value of x, y, and z. +/// +/// @ingroup GLSLCore +FfxUInt32 ffxMin3(FfxUInt32 x, FfxUInt32 y, FfxUInt32 z) +{ + return min(x, min(y, z)); +} + +/// Compute the minimum of three values. +/// +/// NOTE: This function should compile down to a single V_MIN3_F32 operation on +/// GCN/RDNA hardware. +/// +/// @param [in] x The first value to include in the min calculation. +/// @param [in] y The second value to include in the min calcuation. +/// @param [in] z The third value to include in the min calcuation. +/// +/// @returns +/// The minimum value of x, y, and z. +/// +/// @ingroup GLSLCore +FfxUInt32x2 ffxMin3(FfxUInt32x2 x, FfxUInt32x2 y, FfxUInt32x2 z) +{ + return min(x, min(y, z)); +} + +/// Compute the minimum of three values. +/// +/// NOTE: This function should compile down to a single V_MIN3_F32 operation on +/// GCN/RDNA hardware. +/// +/// @param [in] x The first value to include in the min calculation. +/// @param [in] y The second value to include in the min calcuation. +/// @param [in] z The third value to include in the min calcuation. +/// +/// @returns +/// The minimum value of x, y, and z. +/// +/// @ingroup GLSLCore +FfxUInt32x3 ffxMin3(FfxUInt32x3 x, FfxUInt32x3 y, FfxUInt32x3 z) +{ + return min(x, min(y, z)); +} + +/// Compute the minimum of three values. +/// +/// NOTE: This function should compile down to a single V_MIN3_F32 operation on +/// GCN/RDNA hardware. +/// +/// @param [in] x The first value to include in the min calculation. +/// @param [in] y The second value to include in the min calcuation. +/// @param [in] z The third value to include in the min calcuation. +/// +/// @returns +/// The minimum value of x, y, and z. +/// +/// @ingroup GLSLCore +FfxUInt32x4 ffxMin3(FfxUInt32x4 x, FfxUInt32x4 y, FfxUInt32x4 z) +{ + return min(x, min(y, z)); +} + +/// Compute the reciprocal of a value. +/// +/// NOTE: This function is only provided for GLSL. In HLSL the intrinsic function rcp can be used. +/// +/// @param [in] x The value to compute the reciprocal for. +/// +/// @returns +/// The reciprocal value of x. +/// +/// @ingroup GLSLCore +FfxFloat32 ffxReciprocal(FfxFloat32 x) +{ + return FfxFloat32(1.0) / x; +} + +/// Compute the reciprocal of a value. +/// +/// NOTE: This function is only provided for GLSL. In HLSL the intrinsic function rcp can be used. +/// +/// @param [in] x The value to compute the reciprocal for. +/// +/// @returns +/// The reciprocal value of x. +/// +/// @ingroup GLSLCore +FfxFloat32x2 ffxReciprocal(FfxFloat32x2 x) +{ + return ffxBroadcast2(1.0) / x; +} + +/// Compute the reciprocal of a value. +/// +/// NOTE: This function is only provided for GLSL. In HLSL the intrinsic function rcp can be used. +/// +/// @param [in] x The value to compute the reciprocal for. +/// +/// @returns +/// The reciprocal value of x. +/// +/// @ingroup GLSLCore +FfxFloat32x3 ffxReciprocal(FfxFloat32x3 x) +{ + return ffxBroadcast3(1.0) / x; +} + +/// Compute the reciprocal of a value. +/// +/// NOTE: This function is only provided for GLSL. In HLSL the intrinsic function rcp can be used. +/// +/// @param [in] x The value to compute the reciprocal for. +/// +/// @returns +/// The reciprocal value of x. +/// +/// @ingroup GLSLCore +FfxFloat32x4 ffxReciprocal(FfxFloat32x4 x) +{ + return ffxBroadcast4(1.0) / x; +} + +/// Compute the reciprocal square root of a value. +/// +/// NOTE: This function is only provided for GLSL. In HLSL the intrinsic function rsqrt can be used. +/// +/// @param [in] x The value to compute the reciprocal for. +/// +/// @returns +/// The reciprocal square root value of x. +/// +/// @ingroup GLSLCore +FfxFloat32 ffxRsqrt(FfxFloat32 x) +{ + return FfxFloat32(1.0) / ffxSqrt(x); +} + +/// Compute the reciprocal square root of a value. +/// +/// NOTE: This function is only provided for GLSL. In HLSL the intrinsic function rsqrt can be used. +/// +/// @param [in] x The value to compute the reciprocal for. +/// +/// @returns +/// The reciprocal square root value of x. +/// +/// @ingroup GLSLCore +FfxFloat32x2 ffxRsqrt(FfxFloat32x2 x) +{ + return ffxBroadcast2(1.0) / ffxSqrt(x); +} + +/// Compute the reciprocal square root of a value. +/// +/// NOTE: This function is only provided for GLSL. In HLSL the intrinsic function rsqrt can be used. +/// +/// @param [in] x The value to compute the reciprocal for. +/// +/// @returns +/// The reciprocal square root value of x. +/// +/// @ingroup GLSLCore +FfxFloat32x3 ffxRsqrt(FfxFloat32x3 x) +{ + return ffxBroadcast3(1.0) / ffxSqrt(x); +} + +/// Compute the reciprocal square root of a value. +/// +/// NOTE: This function is only provided for GLSL. In HLSL the intrinsic function rsqrt can be used. +/// +/// @param [in] x The value to compute the reciprocal for. +/// +/// @returns +/// The reciprocal square root value of x. +/// +/// @ingroup GLSLCore +FfxFloat32x4 rsqrt(FfxFloat32x4 x) +{ + return ffxBroadcast4(1.0) / ffxSqrt(x); +} + +/// Clamp a value to a [0..1] range. +/// +/// @param [in] x The value to clamp to [0..1] range. +/// +/// @returns +/// The clamped version of x. +/// +/// @ingroup GLSLCore +FfxFloat32 ffxSaturate(FfxFloat32 x) +{ + return clamp(x, FfxFloat32(0.0), FfxFloat32(1.0)); +} + +/// Clamp a value to a [0..1] range. +/// +/// @param [in] x The value to clamp to [0..1] range. +/// +/// @returns +/// The clamped version of x. +/// +/// @ingroup GLSLCore +FfxFloat32x2 ffxSaturate(FfxFloat32x2 x) +{ + return clamp(x, ffxBroadcast2(0.0), ffxBroadcast2(1.0)); +} + +/// Clamp a value to a [0..1] range. +/// +/// @param [in] x The value to clamp to [0..1] range. +/// +/// @returns +/// The clamped version of x. +/// +/// @ingroup GLSLCore +FfxFloat32x3 ffxSaturate(FfxFloat32x3 x) +{ + return clamp(x, ffxBroadcast3(0.0), ffxBroadcast3(1.0)); +} + +/// Clamp a value to a [0..1] range. +/// +/// @param [in] x The value to clamp to [0..1] range. +/// +/// @returns +/// The clamped version of x. +/// +/// @ingroup GLSLCore +FfxFloat32x4 ffxSaturate(FfxFloat32x4 x) +{ + return clamp(x, ffxBroadcast4(0.0), ffxBroadcast4(1.0)); +} + +/// Compute the factional part of a decimal value. +/// +/// This function calculates x - floor(x). Where floor is the intrinsic HLSL function. +/// +/// NOTE: This function should compile down to a single V_MAX3_F32 operation on GCN/RDNA hardware. It is +/// worth further noting that this function is intentionally distinct from the HLSL frac intrinsic +/// function. +/// +/// @param [in] x The value to compute the fractional part from. +/// +/// @returns +/// The fractional part of x. +/// +/// @ingroup GLSLCore +FfxFloat32 ffxFract(FfxFloat32 x) +{ + return fract(x); +} + +/// Compute the factional part of a decimal value. +/// +/// This function calculates x - floor(x). Where floor is the intrinsic HLSL function. +/// +/// NOTE: This function should compile down to a single V_MAX3_F32 operation on GCN/RDNA hardware. It is +/// worth further noting that this function is intentionally distinct from the HLSL frac intrinsic +/// function. +/// +/// @param [in] x The value to compute the fractional part from. +/// +/// @returns +/// The fractional part of x. +/// +/// @ingroup GLSLCore +FfxFloat32x2 ffxFract(FfxFloat32x2 x) +{ + return fract(x); +} + +/// Compute the factional part of a decimal value. +/// +/// This function calculates x - floor(x). Where floor is the intrinsic HLSL function. +/// +/// NOTE: This function should compile down to a single V_MAX3_F32 operation on GCN/RDNA hardware. It is +/// worth further noting that this function is intentionally distinct from the HLSL frac intrinsic +/// function. +/// +/// @param [in] x The value to compute the fractional part from. +/// +/// @returns +/// The fractional part of x. +/// +/// @ingroup GLSLCore +FfxFloat32x3 ffxFract(FfxFloat32x3 x) +{ + return fract(x); +} + +/// Compute the factional part of a decimal value. +/// +/// This function calculates x - floor(x). Where floor is the intrinsic HLSL function. +/// +/// NOTE: This function should compile down to a single V_MAX3_F32 operation on GCN/RDNA hardware. It is +/// worth further noting that this function is intentionally distinct from the HLSL frac intrinsic +/// function. +/// +/// @param [in] x The value to compute the fractional part from. +/// +/// @returns +/// The fractional part of x. +/// +/// @ingroup GLSLCore +FfxFloat32x4 ffxFract(FfxFloat32x4 x) +{ + return fract(x); +} + +/// Rounds to the nearest integer. In case the fractional part is 0.5, it will round to the nearest even integer. +/// +/// @param [in] x The value to be rounded. +/// +/// @returns +/// The nearest integer from x. The nearest even integer from x if equidistant from 2 integer. +/// +/// @ingroup GLSLCore +FfxFloat32 ffxRound(FfxFloat32 x) +{ + return roundEven(x); +} + +/// Rounds to the nearest integer. In case the fractional part is 0.5, it will round to the nearest even integer. +/// +/// @param [in] x The value to be rounded. +/// +/// @returns +/// The nearest integer from x. The nearest even integer from x if equidistant from 2 integer. +/// +/// @ingroup GLSLCore +FfxFloat32x2 ffxRound(FfxFloat32x2 x) +{ + return roundEven(x); +} + +/// Rounds to the nearest integer. In case the fractional part is 0.5, it will round to the nearest even integer. +/// +/// @param [in] x The value to be rounded. +/// +/// @returns +/// The nearest integer from x. The nearest even integer from x if equidistant from 2 integer. +/// +/// @ingroup GLSLCore +FfxFloat32x3 ffxRound(FfxFloat32x3 x) +{ + return roundEven(x); +} + +/// Rounds to the nearest integer. In case the fractional part is 0.5, it will round to the nearest even integer. +/// +/// @param [in] x The value to be rounded. +/// +/// @returns +/// The nearest integer from x. The nearest even integer from x if equidistant from 2 integer. +/// +/// @ingroup GLSLCore +FfxFloat32x4 ffxRound(FfxFloat32x4 x) +{ + return roundEven(x); +} + +FfxUInt32 ffxAShrSU1(FfxUInt32 a, FfxUInt32 b) +{ + return FfxUInt32(FfxInt32(a) >> FfxInt32(b)); +} + +FfxUInt32 ffxPackF32(FfxFloat32x2 v){ + return packHalf2x16(v); +} + +FfxFloat32x2 ffxUnpackF32(FfxUInt32 u){ + return unpackHalf2x16(u); +} + +FfxUInt32x2 ffxPackF32x2(FfxFloat32x4 v){ + return FfxUInt32x2(ffxPackF32(v.xy), ffxPackF32(v.zw)); +} + +FfxFloat32x4 ffxUnpackF32x2(FfxUInt32x2 a){ + return FfxFloat32x4(ffxUnpackF32(a.x), ffxUnpackF32(a.y)); +} + +/// @brief Inverts the value while avoiding division by zero. If the value is zero, zero is returned. +/// @param v Value to invert. +/// @return If v = 0 returns 0. If v != 0 returns 1/v. +FfxFloat32 ffxInvertSafe(FfxFloat32 v){ + FfxFloat32 s = sign(v); + FfxFloat32 s2 = s*s; + return s2/(v + s2 - 1.0); +} + +/// @brief Inverts the value while avoiding division by zero. If the value is zero, zero is returned. +/// @param v Value to invert. +/// @return If v = 0 returns 0. If v != 0 returns 1/v. +FfxFloat32x2 ffxInvertSafe(FfxFloat32x2 v){ + FfxFloat32x2 s = sign(v); + FfxFloat32x2 s2 = s*s; + return s2/(v + s2 - FfxFloat32x2(1.0, 1.0)); +} + +/// @brief Inverts the value while avoiding division by zero. If the value is zero, zero is returned. +/// @param v Value to invert. +/// @return If v = 0 returns 0. If v != 0 returns 1/v. +FfxFloat32x3 ffxInvertSafe(FfxFloat32x3 v){ + FfxFloat32x3 s = sign(v); + FfxFloat32x3 s2 = s*s; + return s2/(v + s2 - FfxFloat32x3(1.0, 1.0, 1.0)); +} + +/// @brief Inverts the value while avoiding division by zero. If the value is zero, zero is returned. +/// @param v Value to invert. +/// @return If v = 0 returns 0. If v != 0 returns 1/v. +FfxFloat32x4 ffxInvertSafe(FfxFloat32x4 v){ + FfxFloat32x4 s = sign(v); + FfxFloat32x4 s2 = s*s; + return s2/(v + s2 - FfxFloat32x4(1.0, 1.0, 1.0, 1.0)); +} +#if FFX_HALF +#define FFX_UINT32_TO_FLOAT16X2(x) unpackFloat2x16(FfxUInt32(x)) + +FfxUInt32 ffxPackF16(FfxFloat16x2 v){ + return packHalf2x16(v); +} + +FfxFloat16x2 ffxUnpackF16(FfxUInt32 u){ + return FfxFloat16x2(unpackHalf2x16(u)); +} + +FfxFloat16x4 ffxUint32x2ToFloat16x4(FfxUInt32x2 x) +{ + return FfxFloat16x4(unpackFloat2x16(x.x), unpackFloat2x16(x.y)); +} +#define FFX_UINT32X2_TO_FLOAT16X4(x) ffxUint32x2ToFloat16x4(FfxUInt32x2(x)) +#define FFX_UINT32_TO_UINT16X2(x) unpackUint2x16(FfxUInt32(x)) +#define FFX_UINT32X2_TO_UINT16X4(x) unpackUint4x16(pack64(FfxUInt32x2(x))) +//------------------------------------------------------------------------------------------------------------------------------ +#define FFX_FLOAT16X2_TO_UINT32(x) packFloat2x16(FfxFloat16x2(x)) +FfxUInt32x2 ffxFloat16x4ToUint32x2(FfxFloat16x4 x) +{ + return FfxUInt32x2(packFloat2x16(x.xy), packFloat2x16(x.zw)); +} +#define FFX_FLOAT16X4_TO_UINT32X2(x) ffxFloat16x4ToUint32x2(FfxFloat16x4(x)) +#define FFX_UINT16X2_TO_UINT32(x) packUint2x16(FfxUInt16x2(x)) +#define FFX_UINT16X4_TO_UINT32X2(x) unpack32(packUint4x16(FfxUInt16x4(x))) +//============================================================================================================================== +#define FFX_TO_UINT16(x) halfBitsToUint16(FfxFloat16(x)) +#define FFX_TO_UINT16X2(x) halfBitsToUint16(FfxFloat16x2(x)) +#define FFX_TO_UINT16X3(x) halfBitsToUint16(FfxFloat16x3(x)) +#define FFX_TO_UINT16X4(x) halfBitsToUint16(FfxFloat16x4(x)) +//------------------------------------------------------------------------------------------------------------------------------ +#define FFX_TO_FLOAT16(x) uint16BitsToHalf(FfxUInt16(x)) +#define FFX_TO_FLOAT16X2(x) uint16BitsToHalf(FfxUInt16x2(x)) +#define FFX_TO_FLOAT16X3(x) uint16BitsToHalf(FfxUInt16x3(x)) +#define FFX_TO_FLOAT16X4(x) uint16BitsToHalf(FfxUInt16x4(x)) +//============================================================================================================================== +FfxFloat16 ffxBroadcastFloat16(FfxFloat16 a) +{ + return FfxFloat16(a); +} +FfxFloat16x2 ffxBroadcastFloat16x2(FfxFloat16 a) +{ + return FfxFloat16x2(a, a); +} +FfxFloat16x3 ffxBroadcastFloat16x3(FfxFloat16 a) +{ + return FfxFloat16x3(a, a, a); +} +FfxFloat16x4 ffxBroadcastFloat16x4(FfxFloat16 a) +{ + return FfxFloat16x4(a, a, a, a); +} +#define FFX_BROADCAST_FLOAT16(a) FfxFloat16(a) +#define FFX_BROADCAST_FLOAT16X2(a) FfxFloat16x2(FfxFloat16(a)) +#define FFX_BROADCAST_FLOAT16X3(a) FfxFloat16x3(FfxFloat16(a)) +#define FFX_BROADCAST_FLOAT16X4(a) FfxFloat16x4(FfxFloat16(a)) +//------------------------------------------------------------------------------------------------------------------------------ +FfxInt16 ffxBroadcastInt16(FfxInt16 a) +{ + return FfxInt16(a); +} +FfxInt16x2 ffxBroadcastInt16x2(FfxInt16 a) +{ + return FfxInt16x2(a, a); +} +FfxInt16x3 ffxBroadcastInt16x3(FfxInt16 a) +{ + return FfxInt16x3(a, a, a); +} +FfxInt16x4 ffxBroadcastInt16x4(FfxInt16 a) +{ + return FfxInt16x4(a, a, a, a); +} +#define FFX_BROADCAST_INT16(a) FfxInt16(a) +#define FFX_BROADCAST_INT16X2(a) FfxInt16x2(FfxInt16(a)) +#define FFX_BROADCAST_INT16X3(a) FfxInt16x3(FfxInt16(a)) +#define FFX_BROADCAST_INT16X4(a) FfxInt16x4(FfxInt16(a)) +//------------------------------------------------------------------------------------------------------------------------------ +FfxUInt16 ffxBroadcastUInt16(FfxUInt16 a) +{ + return FfxUInt16(a); +} +FfxUInt16x2 ffxBroadcastUInt16x2(FfxUInt16 a) +{ + return FfxUInt16x2(a, a); +} +FfxUInt16x3 ffxBroadcastUInt16x3(FfxUInt16 a) +{ + return FfxUInt16x3(a, a, a); +} +FfxUInt16x4 ffxBroadcastUInt16x4(FfxUInt16 a) +{ + return FfxUInt16x4(a, a, a, a); +} +#define FFX_BROADCAST_UINT16(a) FfxUInt16(a) +#define FFX_BROADCAST_UINT16X2(a) FfxUInt16x2(FfxUInt16(a)) +#define FFX_BROADCAST_UINT16X3(a) FfxUInt16x3(FfxUInt16(a)) +#define FFX_BROADCAST_UINT16X4(a) FfxUInt16x4(FfxUInt16(a)) +//============================================================================================================================== +FfxUInt16 ffxAbsHalf(FfxUInt16 a) +{ + return FfxUInt16(abs(FfxInt16(a))); +} +FfxUInt16x2 ffxAbsHalf(FfxUInt16x2 a) +{ + return FfxUInt16x2(abs(FfxInt16x2(a))); +} +FfxUInt16x3 ffxAbsHalf(FfxUInt16x3 a) +{ + return FfxUInt16x3(abs(FfxInt16x3(a))); +} +FfxUInt16x4 ffxAbsHalf(FfxUInt16x4 a) +{ + return FfxUInt16x4(abs(FfxInt16x4(a))); +} +//------------------------------------------------------------------------------------------------------------------------------ +FfxFloat16 ffxClampHalf(FfxFloat16 x, FfxFloat16 n, FfxFloat16 m) +{ + return clamp(x, n, m); +} +FfxFloat16x2 ffxClampHalf(FfxFloat16x2 x, FfxFloat16x2 n, FfxFloat16x2 m) +{ + return clamp(x, n, m); +} +FfxFloat16x3 ffxClampHalf(FfxFloat16x3 x, FfxFloat16x3 n, FfxFloat16x3 m) +{ + return clamp(x, n, m); +} +FfxFloat16x4 ffxClampHalf(FfxFloat16x4 x, FfxFloat16x4 n, FfxFloat16x4 m) +{ + return clamp(x, n, m); +} +//------------------------------------------------------------------------------------------------------------------------------ +FfxFloat16 ffxFract(FfxFloat16 x) +{ + return fract(x); +} +FfxFloat16x2 ffxFract(FfxFloat16x2 x) +{ + return fract(x); +} +FfxFloat16x3 ffxFract(FfxFloat16x3 x) +{ + return fract(x); +} +FfxFloat16x4 ffxFract(FfxFloat16x4 x) +{ + return fract(x); +} +//------------------------------------------------------------------------------------------------------------------------------ +FfxFloat16 ffxLerp(FfxFloat16 x, FfxFloat16 y, FfxFloat16 a) +{ + return mix(x, y, a); +} +FfxFloat16x2 ffxLerp(FfxFloat16x2 x, FfxFloat16x2 y, FfxFloat16 a) +{ + return mix(x, y, a); +} +FfxFloat16x2 ffxLerp(FfxFloat16x2 x, FfxFloat16x2 y, FfxFloat16x2 a) +{ + return mix(x, y, a); +} +FfxFloat16x3 ffxLerp(FfxFloat16x3 x, FfxFloat16x3 y, FfxFloat16x3 a) +{ + return mix(x, y, a); +} +FfxFloat16x3 ffxLerp(FfxFloat16x3 x, FfxFloat16x3 y, FfxFloat16 a) +{ + return mix(x, y, a); +} +FfxFloat16x4 ffxLerp(FfxFloat16x4 x, FfxFloat16x4 y, FfxFloat16 a) +{ + return mix(x, y, a); +} +FfxFloat16x4 ffxLerp(FfxFloat16x4 x, FfxFloat16x4 y, FfxFloat16x4 a) +{ + return mix(x, y, a); +} +//------------------------------------------------------------------------------------------------------------------------------ +// No packed version of ffxMax3. +FfxFloat16 ffxMax3Half(FfxFloat16 x, FfxFloat16 y, FfxFloat16 z) +{ + return max(x, max(y, z)); +} +FfxFloat16x2 ffxMax3Half(FfxFloat16x2 x, FfxFloat16x2 y, FfxFloat16x2 z) +{ + return max(x, max(y, z)); +} +FfxFloat16x3 ffxMax3Half(FfxFloat16x3 x, FfxFloat16x3 y, FfxFloat16x3 z) +{ + return max(x, max(y, z)); +} +FfxFloat16x4 ffxMax3Half(FfxFloat16x4 x, FfxFloat16x4 y, FfxFloat16x4 z) +{ + return max(x, max(y, z)); +} +//------------------------------------------------------------------------------------------------------------------------------ +// No packed version of ffxMin3. +FfxFloat16 ffxMin3Half(FfxFloat16 x, FfxFloat16 y, FfxFloat16 z) +{ + return min(x, min(y, z)); +} +FfxFloat16x2 ffxMin3Half(FfxFloat16x2 x, FfxFloat16x2 y, FfxFloat16x2 z) +{ + return min(x, min(y, z)); +} +FfxFloat16x3 ffxMin3Half(FfxFloat16x3 x, FfxFloat16x3 y, FfxFloat16x3 z) +{ + return min(x, min(y, z)); +} +FfxFloat16x4 ffxMin3Half(FfxFloat16x4 x, FfxFloat16x4 y, FfxFloat16x4 z) +{ + return min(x, min(y, z)); +} +//------------------------------------------------------------------------------------------------------------------------------ +FfxFloat16 ffxMed3Half(FfxFloat16 x, FfxFloat16 y, FfxFloat16 z) +{ + return max(min(x, y), min(max(x, y), z)); +} +FfxFloat16x2 ffxMed3Half(FfxFloat16x2 x, FfxFloat16x2 y, FfxFloat16x2 z) +{ + return max(min(x, y), min(max(x, y), z)); +} +FfxFloat16x3 ffxMed3Half(FfxFloat16x3 x, FfxFloat16x3 y, FfxFloat16x3 z) +{ + return max(min(x, y), min(max(x, y), z)); +} +FfxFloat16x4 ffxMed3Half(FfxFloat16x4 x, FfxFloat16x4 y, FfxFloat16x4 z) +{ + return max(min(x, y), min(max(x, y), z)); +} +//------------------------------------------------------------------------------------------------------------------------------ +FfxFloat16 ffxReciprocalHalf(FfxFloat16 x) +{ + return FFX_BROADCAST_FLOAT16(1.0) / x; +} +FfxFloat16x2 ffxReciprocalHalf(FfxFloat16x2 x) +{ + return FFX_BROADCAST_FLOAT16X2(1.0) / x; +} +FfxFloat16x3 ffxReciprocalHalf(FfxFloat16x3 x) +{ + return FFX_BROADCAST_FLOAT16X3(1.0) / x; +} +FfxFloat16x4 ffxReciprocalHalf(FfxFloat16x4 x) +{ + return FFX_BROADCAST_FLOAT16X4(1.0) / x; +} +//------------------------------------------------------------------------------------------------------------------------------ +FfxFloat16 ffxReciprocalSquareRootHalf(FfxFloat16 x) +{ + return FFX_BROADCAST_FLOAT16(1.0) / sqrt(x); +} +FfxFloat16x2 ffxReciprocalSquareRootHalf(FfxFloat16x2 x) +{ + return FFX_BROADCAST_FLOAT16X2(1.0) / sqrt(x); +} +FfxFloat16x3 ffxReciprocalSquareRootHalf(FfxFloat16x3 x) +{ + return FFX_BROADCAST_FLOAT16X3(1.0) / sqrt(x); +} +FfxFloat16x4 ffxReciprocalSquareRootHalf(FfxFloat16x4 x) +{ + return FFX_BROADCAST_FLOAT16X4(1.0) / sqrt(x); +} +//------------------------------------------------------------------------------------------------------------------------------ +FfxFloat16 ffxSaturate(FfxFloat16 x) +{ + return clamp(x, FFX_BROADCAST_FLOAT16(0.0), FFX_BROADCAST_FLOAT16(1.0)); +} +FfxFloat16x2 ffxSaturate(FfxFloat16x2 x) +{ + return clamp(x, FFX_BROADCAST_FLOAT16X2(0.0), FFX_BROADCAST_FLOAT16X2(1.0)); +} +FfxFloat16x3 ffxSaturate(FfxFloat16x3 x) +{ + return clamp(x, FFX_BROADCAST_FLOAT16X3(0.0), FFX_BROADCAST_FLOAT16X3(1.0)); +} +FfxFloat16x4 ffxSaturate(FfxFloat16x4 x) +{ + return clamp(x, FFX_BROADCAST_FLOAT16X4(0.0), FFX_BROADCAST_FLOAT16X4(1.0)); +} +//------------------------------------------------------------------------------------------------------------------------------ +FfxUInt16 ffxBitShiftRightHalf(FfxUInt16 a, FfxUInt16 b) +{ + return FfxUInt16(FfxInt16(a) >> FfxInt16(b)); +} +FfxUInt16x2 ffxBitShiftRightHalf(FfxUInt16x2 a, FfxUInt16x2 b) +{ + return FfxUInt16x2(FfxInt16x2(a) >> FfxInt16x2(b)); +} +FfxUInt16x3 ffxBitShiftRightHalf(FfxUInt16x3 a, FfxUInt16x3 b) +{ + return FfxUInt16x3(FfxInt16x3(a) >> FfxInt16x3(b)); +} +FfxUInt16x4 ffxBitShiftRightHalf(FfxUInt16x4 a, FfxUInt16x4 b) +{ + return FfxUInt16x4(FfxInt16x4(a) >> FfxInt16x4(b)); +} +#endif // FFX_HALF + +#if defined(FFX_WAVE) +// Where 'x' must be a compile time literal. +FfxFloat32 ffxWaveXorF1(FfxFloat32 v, FfxUInt32 x) +{ + return subgroupShuffleXor(v, x); +} +FfxFloat32x2 ffxWaveXorF2(FfxFloat32x2 v, FfxUInt32 x) +{ + return subgroupShuffleXor(v, x); +} +FfxFloat32x3 ffxWaveXorF3(FfxFloat32x3 v, FfxUInt32 x) +{ + return subgroupShuffleXor(v, x); +} +FfxFloat32x4 ffxWaveXorF4(FfxFloat32x4 v, FfxUInt32 x) +{ + return subgroupShuffleXor(v, x); +} +FfxUInt32 ffxWaveXorU1(FfxUInt32 v, FfxUInt32 x) +{ + return subgroupShuffleXor(v, x); +} +FfxUInt32x2 ffxWaveXorU2(FfxUInt32x2 v, FfxUInt32 x) +{ + return subgroupShuffleXor(v, x); +} +FfxUInt32x3 ffxWaveXorU3(FfxUInt32x3 v, FfxUInt32 x) +{ + return subgroupShuffleXor(v, x); +} +FfxUInt32x4 ffxWaveXorU4(FfxUInt32x4 v, FfxUInt32 x) +{ + return subgroupShuffleXor(v, x); +} +FfxBoolean ffxWaveIsFirstLane() +{ + return subgroupElect(); +} +FfxUInt32 ffxWaveLaneIndex() +{ + return gl_SubgroupInvocationID; +} +FfxBoolean ffxWaveReadAtLaneIndexB1(FfxBoolean v, FfxUInt32 x ) +{ + return subgroupShuffle(v, x); +} +FfxUInt32 ffxWavePrefixCountBits(FfxBoolean v) +{ + return subgroupBallotExclusiveBitCount(subgroupBallot(v)); +} +FfxUInt32 ffxWaveActiveCountBits(FfxBoolean v) +{ + return subgroupBallotBitCount(subgroupBallot(v)); +} +FfxUInt32 ffxWaveReadLaneFirstU1(FfxUInt32 v) +{ + return subgroupBroadcastFirst(v); +} +FfxUInt32x2 ffxWaveReadLaneFirstU2(FfxUInt32x2 v) +{ + return subgroupBroadcastFirst(v); +} +FfxBoolean ffxWaveReadLaneFirstB1(FfxBoolean v) +{ + return subgroupBroadcastFirst(v); +} +FfxUInt32 ffxWaveOr(FfxUInt32 a) +{ + return subgroupOr(a); +} +FfxUInt32 ffxWaveMin(FfxUInt32 a) +{ + return subgroupMin(a); +} +FfxFloat32 ffxWaveMin(FfxFloat32 a) +{ + return subgroupMin(a); +} +FfxUInt32 ffxWaveMax(FfxUInt32 a) +{ + return subgroupMax(a); +} +FfxFloat32 ffxWaveMax(FfxFloat32 a) +{ + return subgroupMax(a); +} +FfxUInt32 ffxWaveSum(FfxUInt32 a) +{ + return subgroupAdd(a); +} +FfxFloat32 ffxWaveSum(FfxFloat32 a) +{ + return subgroupAdd(a); +} +FfxUInt32 ffxWaveLaneCount() +{ + return gl_SubgroupSize; +} +#if defined(FFX_WAVE_ALL_TRUE) +FfxBoolean ffxWaveAllTrue(FfxBoolean v) +{ + return subgroupAll(v); +} +#endif +FfxFloat32 ffxQuadReadX(FfxFloat32 v) +{ + return subgroupQuadSwapHorizontal(v); +} +FfxFloat32x2 ffxQuadReadX(FfxFloat32x2 v) +{ + return subgroupQuadSwapHorizontal(v); +} +FfxFloat32 ffxQuadReadY(FfxFloat32 v) +{ + return subgroupQuadSwapVertical(v); +} +FfxFloat32x2 ffxQuadReadY(FfxFloat32x2 v) +{ + return subgroupQuadSwapVertical(v); +} + +//------------------------------------------------------------------------------------------------------------------------------ +#if FFX_HALF +FfxFloat16x2 ffxWaveXorFloat16x2(FfxFloat16x2 v, FfxUInt32 x) +{ + return FFX_UINT32_TO_FLOAT16X2(subgroupShuffleXor(FFX_FLOAT16X2_TO_UINT32(v), x)); +} +FfxFloat16x4 ffxWaveXorFloat16x4(FfxFloat16x4 v, FfxUInt32 x) +{ + return FFX_UINT32X2_TO_FLOAT16X4(subgroupShuffleXor(FFX_FLOAT16X4_TO_UINT32X2(v), x)); +} +FfxUInt16x2 ffxWaveXorUint16x2(FfxUInt16x2 v, FfxUInt32 x) +{ + return FFX_UINT32_TO_UINT16X2(subgroupShuffleXor(FFX_UINT16X2_TO_UINT32(v), x)); +} +FfxUInt16x4 ffxWaveXorUint16x4(FfxUInt16x4 v, FfxUInt32 x) +{ + return FFX_UINT32X2_TO_UINT16X4(subgroupShuffleXor(FFX_UINT16X4_TO_UINT32X2(v), x)); +} +#endif // FFX_HALF +#endif // #if defined(FFX_WAVE) diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/ffx_core_gpu_common.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/ffx_core_gpu_common.h new file mode 100644 index 000000000..da03b07aa --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/ffx_core_gpu_common.h @@ -0,0 +1,2736 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +/// A define for a true value in a boolean expression. +/// +/// @ingroup GPUCore +#define FFX_TRUE (true) + +/// A define for a false value in a boolean expression. +/// +/// @ingroup GPUCore +#define FFX_FALSE (false) + +/// A define value for positive infinity. +/// +/// @ingroup GPUCore +#define FFX_POSITIVE_INFINITY_FLOAT ffxAsFloat(0x7f800000u) + +/// A define value for negative infinity. +/// +/// @ingroup GPUCore +#define FFX_NEGATIVE_INFINITY_FLOAT ffxAsFloat(0xff800000u) + +/// A define value for PI. +/// +/// @ingroup GPUCore +#define FFX_PI (3.14159) + +FFX_STATIC const FfxFloat32 FFX_FP16_MIN = 6.10e-05f; +FFX_STATIC const FfxFloat32 FFX_FP16_MAX = 65504.0f; +FFX_STATIC const FfxFloat32 FFX_TONEMAP_EPSILON = 1.0f / FFX_FP16_MAX; + +#define FFX_HAS_FLAG(v, f) ((v & f) == f) + +/// Compute the min of two values. +/// +/// @param [in] x The first value to compute the min of. +/// @param [in] y The second value to compute the min of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxFloat32 ffxMin(FfxFloat32 x, FfxFloat32 y) +{ + return min(x, y); +} + +/// Compute the min of two values. +/// +/// @param [in] x The first value to compute the min of. +/// @param [in] y The second value to compute the min of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxMin(FfxFloat32x2 x, FfxFloat32x2 y) +{ + return min(x, y); +} + +/// Compute the min of two values. +/// +/// @param [in] x The first value to compute the min of. +/// @param [in] y The second value to compute the min of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxMin(FfxFloat32x3 x, FfxFloat32x3 y) +{ + return min(x, y); +} + +/// Compute the min of two values. +/// +/// @param [in] x The first value to compute the min of. +/// @param [in] y The second value to compute the min of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxFloat32x4 ffxMin(FfxFloat32x4 x, FfxFloat32x4 y) +{ + return min(x, y); +} + +/// Compute the min of two values. +/// +/// @param [in] x The first value to compute the min of. +/// @param [in] y The second value to compute the min of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxInt32 ffxMin(FfxInt32 x, FfxInt32 y) +{ + return min(x, y); +} + +/// Compute the min of two values. +/// +/// @param [in] x The first value to compute the min of. +/// @param [in] y The second value to compute the min of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxInt32x2 ffxMin(FfxInt32x2 x, FfxInt32x2 y) +{ + return min(x, y); +} + +/// Compute the min of two values. +/// +/// @param [in] x The first value to compute the min of. +/// @param [in] y The second value to compute the min of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxInt32x3 ffxMin(FfxInt32x3 x, FfxInt32x3 y) +{ + return min(x, y); +} + +/// Compute the min of two values. +/// +/// @param [in] x The first value to compute the min of. +/// @param [in] y The second value to compute the min of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxInt32x4 ffxMin(FfxInt32x4 x, FfxInt32x4 y) +{ + return min(x, y); +} + +/// Compute the min of two values. +/// +/// @param [in] x The first value to compute the min of. +/// @param [in] y The second value to compute the min of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxUInt32 ffxMin(FfxUInt32 x, FfxUInt32 y) +{ + return min(x, y); +} + +/// Compute the min of two values. +/// +/// @param [in] x The first value to compute the min of. +/// @param [in] y The second value to compute the min of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxUInt32x2 ffxMin(FfxUInt32x2 x, FfxUInt32x2 y) +{ + return min(x, y); +} + +/// Compute the min of two values. +/// +/// @param [in] x The first value to compute the min of. +/// @param [in] y The second value to compute the min of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxUInt32x3 ffxMin(FfxUInt32x3 x, FfxUInt32x3 y) +{ + return min(x, y); +} + +/// Compute the min of two values. +/// +/// @param [in] x The first value to compute the min of. +/// @param [in] y The second value to compute the min of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxUInt32x4 ffxMin(FfxUInt32x4 x, FfxUInt32x4 y) +{ + return min(x, y); +} + +/// Compute the max of two values. +/// +/// @param [in] x The first value to compute the max of. +/// @param [in] y The second value to compute the max of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxFloat32 ffxMax(FfxFloat32 x, FfxFloat32 y) +{ + return max(x, y); +} + +/// Compute the max of two values. +/// +/// @param [in] x The first value to compute the max of. +/// @param [in] y The second value to compute the max of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxMax(FfxFloat32x2 x, FfxFloat32x2 y) +{ + return max(x, y); +} + +/// Compute the max of two values. +/// +/// @param [in] x The first value to compute the max of. +/// @param [in] y The second value to compute the max of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxMax(FfxFloat32x3 x, FfxFloat32x3 y) +{ + return max(x, y); +} + +/// Compute the max of two values. +/// +/// @param [in] x The first value to compute the max of. +/// @param [in] y The second value to compute the max of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxFloat32x4 ffxMax(FfxFloat32x4 x, FfxFloat32x4 y) +{ + return max(x, y); +} + +/// Compute the max of two values. +/// +/// @param [in] x The first value to compute the max of. +/// @param [in] y The second value to compute the max of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxInt32 ffxMax(FfxInt32 x, FfxInt32 y) +{ + return max(x, y); +} + +/// Compute the max of two values. +/// +/// @param [in] x The first value to compute the max of. +/// @param [in] y The second value to compute the max of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxInt32x2 ffxMax(FfxInt32x2 x, FfxInt32x2 y) +{ + return max(x, y); +} + +/// Compute the max of two values. +/// +/// @param [in] x The first value to compute the max of. +/// @param [in] y The second value to compute the max of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxInt32x3 ffxMax(FfxInt32x3 x, FfxInt32x3 y) +{ + return max(x, y); +} + +/// Compute the max of two values. +/// +/// @param [in] x The first value to compute the max of. +/// @param [in] y The second value to compute the max of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxInt32x4 ffxMax(FfxInt32x4 x, FfxInt32x4 y) +{ + return max(x, y); +} + +/// Compute the max of two values. +/// +/// @param [in] x The first value to compute the max of. +/// @param [in] y The second value to compute the max of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxUInt32 ffxMax(FfxUInt32 x, FfxUInt32 y) +{ + return max(x, y); +} + +/// Compute the max of two values. +/// +/// @param [in] x The first value to compute the max of. +/// @param [in] y The second value to compute the max of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxUInt32x2 ffxMax(FfxUInt32x2 x, FfxUInt32x2 y) +{ + return max(x, y); +} + +/// Compute the max of two values. +/// +/// @param [in] x The first value to compute the max of. +/// @param [in] y The second value to compute the max of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxUInt32x3 ffxMax(FfxUInt32x3 x, FfxUInt32x3 y) +{ + return max(x, y); +} + +/// Compute the max of two values. +/// +/// @param [in] x The first value to compute the max of. +/// @param [in] y The second value to compute the max of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxUInt32x4 ffxMax(FfxUInt32x4 x, FfxUInt32x4 y) +{ + return max(x, y); +} + +/// Compute the value of the first parameter raised to the power of the second. +/// +/// @param [in] x The value to raise to the power y. +/// @param [in] y The power to which to raise x. +/// +/// @returns +/// The value of the first parameter raised to the power of the second. +/// +/// @ingroup GPUCore +FfxFloat32 ffxPow(FfxFloat32 x, FfxFloat32 y) +{ + return pow(x, y); +} + +/// Compute the value of the first parameter raised to the power of the second. +/// +/// @param [in] x The value to raise to the power y. +/// @param [in] y The power to which to raise x. +/// +/// @returns +/// The value of the first parameter raised to the power of the second. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxPow(FfxFloat32x2 x, FfxFloat32x2 y) +{ + return pow(x, y); +} + +/// Compute the value of the first parameter raised to the power of the second. +/// +/// @param [in] x The value to raise to the power y. +/// @param [in] y The power to which to raise x. +/// +/// @returns +/// The value of the first parameter raised to the power of the second. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxPow(FfxFloat32x3 x, FfxFloat32x3 y) +{ + return pow(x, y); +} + +/// Compute the value of the first parameter raised to the power of the second. +/// +/// @param [in] x The value to raise to the power y. +/// @param [in] y The power to which to raise x. +/// +/// @returns +/// The value of the first parameter raised to the power of the second. +/// +/// @ingroup GPUCore +FfxFloat32x4 ffxPow(FfxFloat32x4 x, FfxFloat32x4 y) +{ + return pow(x, y); +} + +/// Compute the square root of a value. +/// +/// @param [in] x The first value to compute the min of. +/// +/// @returns +/// The the square root of x. +/// +/// @ingroup GPUCore +FfxFloat32 ffxSqrt(FfxFloat32 x) +{ + return sqrt(x); +} + +/// Compute the square root of a value. +/// +/// @param [in] x The first value to compute the min of. +/// +/// @returns +/// The the square root of x. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxSqrt(FfxFloat32x2 x) +{ + return sqrt(x); +} + +/// Compute the square root of a value. +/// +/// @param [in] x The first value to compute the min of. +/// +/// @returns +/// The the square root of x. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxSqrt(FfxFloat32x3 x) +{ + return sqrt(x); +} + +/// Compute the square root of a value. +/// +/// @param [in] x The first value to compute the min of. +/// +/// @returns +/// The the square root of x. +/// +/// @ingroup GPUCore +FfxFloat32x4 ffxSqrt(FfxFloat32x4 x) +{ + return sqrt(x); +} + +/// Copy the sign bit from 's' to positive 'd'. +/// +/// @param [in] d The value to copy the sign bit into. +/// @param [in] s The value to copy the sign bit from. +/// +/// @returns +/// The value of d with the sign bit from s. +/// +/// @ingroup GPUCore +FfxFloat32 ffxCopySignBit(FfxFloat32 d, FfxFloat32 s) +{ + return ffxAsFloat(ffxAsUInt32(d) | (ffxAsUInt32(s) & FfxUInt32(0x80000000u))); +} + +/// Copy the sign bit from 's' to positive 'd'. +/// +/// @param [in] d The value to copy the sign bit into. +/// @param [in] s The value to copy the sign bit from. +/// +/// @returns +/// The value of d with the sign bit from s. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxCopySignBit(FfxFloat32x2 d, FfxFloat32x2 s) +{ + return ffxAsFloat(ffxAsUInt32(d) | (ffxAsUInt32(s) & ffxBroadcast2(0x80000000u))); +} + +/// Copy the sign bit from 's' to positive 'd'. +/// +/// @param [in] d The value to copy the sign bit into. +/// @param [in] s The value to copy the sign bit from. +/// +/// @returns +/// The value of d with the sign bit from s. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxCopySignBit(FfxFloat32x3 d, FfxFloat32x3 s) +{ + return ffxAsFloat(ffxAsUInt32(d) | (ffxAsUInt32(s) & ffxBroadcast3(0x80000000u))); +} + +/// Copy the sign bit from 's' to positive 'd'. +/// +/// @param [in] d The value to copy the sign bit into. +/// @param [in] s The value to copy the sign bit from. +/// +/// @returns +/// The value of d with the sign bit from s. +/// +/// @ingroup GPUCore +FfxFloat32x4 ffxCopySignBit(FfxFloat32x4 d, FfxFloat32x4 s) +{ + return ffxAsFloat(ffxAsUInt32(d) | (ffxAsUInt32(s) & ffxBroadcast4(0x80000000u))); +} + +/// A single operation to return the following: +/// m = NaN := 0 +/// m >= 0 := 0 +/// m < 0 := 1 +/// +/// Uses the following useful floating point logic, +/// saturate(+a*(-INF)==-INF) := 0 +/// saturate( 0*(-INF)== NaN) := 0 +/// saturate(-a*(-INF)==+INF) := 1 +/// +/// This function is useful when creating masks for branch-free logic. +/// +/// @param [in] m The value to test against 0. +/// +/// @returns +/// 1.0 when the value is negative, or 0.0 when the value is 0 or position. +/// +/// @ingroup GPUCore +FfxFloat32 ffxIsSigned(FfxFloat32 m) +{ + return ffxSaturate(m * FfxFloat32(FFX_NEGATIVE_INFINITY_FLOAT)); +} + +/// A single operation to return the following: +/// m = NaN := 0 +/// m >= 0 := 0 +/// m < 0 := 1 +/// +/// Uses the following useful floating point logic, +/// saturate(+a*(-INF)==-INF) := 0 +/// saturate( 0*(-INF)== NaN) := 0 +/// saturate(-a*(-INF)==+INF) := 1 +/// +/// This function is useful when creating masks for branch-free logic. +/// +/// @param [in] m The value to test against 0. +/// +/// @returns +/// 1.0 when the value is negative, or 0.0 when the value is 0 or position. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxIsSigned(FfxFloat32x2 m) +{ + return ffxSaturate(m * ffxBroadcast2(FFX_NEGATIVE_INFINITY_FLOAT)); +} + +/// A single operation to return the following: +/// m = NaN := 0 +/// m >= 0 := 0 +/// m < 0 := 1 +/// +/// Uses the following useful floating point logic, +/// saturate(+a*(-INF)==-INF) := 0 +/// saturate( 0*(-INF)== NaN) := 0 +/// saturate(-a*(-INF)==+INF) := 1 +/// +/// This function is useful when creating masks for branch-free logic. +/// +/// @param [in] m The value to test against 0. +/// +/// @returns +/// 1.0 when the value is negative, or 0.0 when the value is 0 or position. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxIsSigned(FfxFloat32x3 m) +{ + return ffxSaturate(m * ffxBroadcast3(FFX_NEGATIVE_INFINITY_FLOAT)); +} + +/// A single operation to return the following: +/// m = NaN := 0 +/// m >= 0 := 0 +/// m < 0 := 1 +/// +/// Uses the following useful floating point logic, +/// saturate(+a*(-INF)==-INF) := 0 +/// saturate( 0*(-INF)== NaN) := 0 +/// saturate(-a*(-INF)==+INF) := 1 +/// +/// This function is useful when creating masks for branch-free logic. +/// +/// @param [in] m The value to test against for have the sign set. +/// +/// @returns +/// 1.0 when the value is negative, or 0.0 when the value is 0 or positive. +/// +/// @ingroup GPUCore +FfxFloat32x4 ffxIsSigned(FfxFloat32x4 m) +{ + return ffxSaturate(m * ffxBroadcast4(FFX_NEGATIVE_INFINITY_FLOAT)); +} + +/// A single operation to return the following: +/// m = NaN := 1 +/// m > 0 := 0 +/// m <= 0 := 1 +/// +/// This function is useful when creating masks for branch-free logic. +/// +/// @param [in] m The value to test against zero. +/// +/// @returns +/// 1.0 when the value is position, or 0.0 when the value is 0 or negative. +/// +/// @ingroup GPUCore +FfxFloat32 ffxIsGreaterThanZero(FfxFloat32 m) +{ + return ffxSaturate(m * FfxFloat32(FFX_POSITIVE_INFINITY_FLOAT)); +} + +/// A single operation to return the following: +/// m = NaN := 1 +/// m > 0 := 0 +/// m <= 0 := 1 +/// +/// This function is useful when creating masks for branch-free logic. +/// +/// @param [in] m The value to test against zero. +/// +/// @returns +/// 1.0 when the value is position, or 0.0 when the value is 0 or negative. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxIsGreaterThanZero(FfxFloat32x2 m) +{ + return ffxSaturate(m * ffxBroadcast2(FFX_POSITIVE_INFINITY_FLOAT)); +} + +/// A single operation to return the following: +/// m = NaN := 1 +/// m > 0 := 0 +/// m <= 0 := 1 +/// +/// This function is useful when creating masks for branch-free logic. +/// +/// @param [in] m The value to test against zero. +/// +/// @returns +/// 1.0 when the value is position, or 0.0 when the value is 0 or negative. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxIsGreaterThanZero(FfxFloat32x3 m) +{ + return ffxSaturate(m * ffxBroadcast3(FFX_POSITIVE_INFINITY_FLOAT)); +} + +/// A single operation to return the following: +/// m = NaN := 1 +/// m > 0 := 0 +/// m <= 0 := 1 +/// +/// This function is useful when creating masks for branch-free logic. +/// +/// @param [in] m The value to test against zero. +/// +/// @returns +/// 1.0 when the value is position, or 0.0 when the value is 0 or negative. +/// +/// @ingroup GPUCore +FfxFloat32x4 ffxIsGreaterThanZero(FfxFloat32x4 m) +{ + return ffxSaturate(m * ffxBroadcast4(FFX_POSITIVE_INFINITY_FLOAT)); +} + +/// Convert a 32bit floating point value to sortable integer. +/// +/// - If sign bit=0, flip the sign bit (positives). +/// - If sign bit=1, flip all bits (negatives). +/// +/// The function has the side effects that: +/// - Larger integers are more positive values. +/// - Float zero is mapped to center of integers (so clear to integer zero is a nice default for atomic max usage). +/// +/// @param [in] value The floating point value to make sortable. +/// +/// @returns +/// The sortable integer value. +/// +/// @ingroup GPUCore +FfxUInt32 ffxFloatToSortableInteger(FfxUInt32 value) +{ + return value ^ ((ffxAShrSU1(value, FfxUInt32(31))) | FfxUInt32(0x80000000)); +} + +/// Convert a sortable integer to a 32bit floating point value. +/// +/// The function has the side effects that: +/// - If sign bit=1, flip the sign bit (positives). +/// - If sign bit=0, flip all bits (negatives). +/// +/// @param [in] value The floating point value to make sortable. +/// +/// @returns +/// The sortable integer value. +/// +/// @ingroup GPUCore +FfxUInt32 ffxSortableIntegerToFloat(FfxUInt32 value) +{ + return value ^ ((~ffxAShrSU1(value, FfxUInt32(31))) | FfxUInt32(0x80000000)); +} + +/// Calculate a low-quality approximation for the square root of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] value The value to calculate an approximate to the square root for. +/// +/// @returns +/// An approximation of the square root, estimated to low quality. +/// +/// @ingroup GPUCore +FfxFloat32 ffxApproximateSqrt(FfxFloat32 value) +{ + return ffxAsFloat((ffxAsUInt32(value) >> FfxUInt32(1)) + FfxUInt32(0x1fbc4639)); +} + +/// Calculate a low-quality approximation for the reciprocal of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] value The value to calculate an approximate to the reciprocal for. +/// +/// @returns +/// An approximation of the reciprocal, estimated to low quality. +/// +/// @ingroup GPUCore +FfxFloat32 ffxApproximateReciprocal(FfxFloat32 value) +{ + return ffxAsFloat(FfxUInt32(0x7ef07ebb) - ffxAsUInt32(value)); +} + +/// Calculate a medium-quality approximation for the reciprocal of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] value The value to calculate an approximate to the reciprocal for. +/// +/// @returns +/// An approximation of the reciprocal, estimated to medium quality. +/// +/// @ingroup GPUCore +FfxFloat32 ffxApproximateReciprocalMedium(FfxFloat32 value) +{ + FfxFloat32 b = ffxAsFloat(FfxUInt32(0x7ef19fff) - ffxAsUInt32(value)); + return b * (-b * value + FfxFloat32(2.0)); +} + +/// Calculate a low-quality approximation for the reciprocal of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] value The value to calculate an approximate to the reciprocal square root for. +/// +/// @returns +/// An approximation of the reciprocal square root, estimated to low quality. +/// +/// @ingroup GPUCore +FfxFloat32 ffxApproximateReciprocalSquareRoot(FfxFloat32 value) +{ + return ffxAsFloat(FfxUInt32(0x5f347d74) - (ffxAsUInt32(value) >> FfxUInt32(1))); +} + +/// Calculate a low-quality approximation for the square root of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] value The value to calculate an approximate to the square root for. +/// +/// @returns +/// An approximation of the square root, estimated to low quality. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxApproximateSqrt(FfxFloat32x2 value) +{ + return ffxAsFloat((ffxAsUInt32(value) >> ffxBroadcast2(1u)) + ffxBroadcast2(0x1fbc4639u)); +} + +/// Calculate a low-quality approximation for the reciprocal of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] value The value to calculate an approximate to the reciprocal for. +/// +/// @returns +/// An approximation of the reciprocal, estimated to low quality. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxApproximateReciprocal(FfxFloat32x2 value) +{ + return ffxAsFloat(ffxBroadcast2(0x7ef07ebbu) - ffxAsUInt32(value)); +} + +/// Calculate a medium-quality approximation for the reciprocal of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] value The value to calculate an approximate to the reciprocal for. +/// +/// @returns +/// An approximation of the reciprocal, estimated to medium quality. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxApproximateReciprocalMedium(FfxFloat32x2 value) +{ + FfxFloat32x2 b = ffxAsFloat(ffxBroadcast2(0x7ef19fffu) - ffxAsUInt32(value)); + return b * (-b * value + ffxBroadcast2(2.0f)); +} + +/// Calculate a low-quality approximation for the square root of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] value The value to calculate an approximate to the square root for. +/// +/// @returns +/// An approximation of the square root, estimated to low quality. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxApproximateReciprocalSquareRoot(FfxFloat32x2 value) +{ + return ffxAsFloat(ffxBroadcast2(0x5f347d74u) - (ffxAsUInt32(value) >> ffxBroadcast2(1u))); +} + +/// Calculate a low-quality approximation for the square root of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] value The value to calculate an approximate to the square root for. +/// +/// @returns +/// An approximation of the square root, estimated to low quality. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxApproximateSqrt(FfxFloat32x3 value) +{ + return ffxAsFloat((ffxAsUInt32(value) >> ffxBroadcast3(1u)) + ffxBroadcast3(0x1fbc4639u)); +} + +/// Calculate a low-quality approximation for the reciprocal of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] value The value to calculate an approximate to the reciprocal for. +/// +/// @returns +/// An approximation of the reciprocal, estimated to low quality. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxApproximateReciprocal(FfxFloat32x3 value) +{ + return ffxAsFloat(ffxBroadcast3(0x7ef07ebbu) - ffxAsUInt32(value)); +} + +/// Calculate a medium-quality approximation for the reciprocal of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] value The value to calculate an approximate to the reciprocal for. +/// +/// @returns +/// An approximation of the reciprocal, estimated to medium quality. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxApproximateReciprocalMedium(FfxFloat32x3 value) +{ + FfxFloat32x3 b = ffxAsFloat(ffxBroadcast3(0x7ef19fffu) - ffxAsUInt32(value)); + return b * (-b * value + ffxBroadcast3(2.0f)); +} + +/// Calculate a low-quality approximation for the square root of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] value The value to calculate an approximate to the square root for. +/// +/// @returns +/// An approximation of the square root, estimated to low quality. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxApproximateReciprocalSquareRoot(FfxFloat32x3 value) +{ + return ffxAsFloat(ffxBroadcast3(0x5f347d74u) - (ffxAsUInt32(value) >> ffxBroadcast3(1u))); +} + +/// Calculate a low-quality approximation for the square root of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] value The value to calculate an approximate to the square root for. +/// +/// @returns +/// An approximation of the square root, estimated to low quality. +/// +/// @ingroup GPUCore +FfxFloat32x4 ffxApproximateSqrt(FfxFloat32x4 value) +{ + return ffxAsFloat((ffxAsUInt32(value) >> ffxBroadcast4(1u)) + ffxBroadcast4(0x1fbc4639u)); +} + +/// Calculate a low-quality approximation for the reciprocal of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] value The value to calculate an approximate to the reciprocal for. +/// +/// @returns +/// An approximation of the reciprocal, estimated to low quality. +/// +/// @ingroup GPUCore +FfxFloat32x4 ffxApproximateReciprocal(FfxFloat32x4 value) +{ + return ffxAsFloat(ffxBroadcast4(0x7ef07ebbu) - ffxAsUInt32(value)); +} + +/// Calculate a medium-quality approximation for the reciprocal of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] value The value to calculate an approximate to the reciprocal for. +/// +/// @returns +/// An approximation of the reciprocal, estimated to medium quality. +/// +/// @ingroup GPUCore +FfxFloat32x4 ffxApproximateReciprocalMedium(FfxFloat32x4 value) +{ + FfxFloat32x4 b = ffxAsFloat(ffxBroadcast4(0x7ef19fffu) - ffxAsUInt32(value)); + return b * (-b * value + ffxBroadcast4(2.0f)); +} + +/// Calculate a low-quality approximation for the square root of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] value The value to calculate an approximate to the square root for. +/// +/// @returns +/// An approximation of the square root, estimated to low quality. +/// +/// @ingroup GPUCore +FfxFloat32x4 ffxApproximateReciprocalSquareRoot(FfxFloat32x4 value) +{ + return ffxAsFloat(ffxBroadcast4(0x5f347d74u) - (ffxAsUInt32(value) >> ffxBroadcast4(1u))); +} + +/// Calculate dot product of 'a' and 'b'. +/// +/// @param [in] a First vector input. +/// @param [in] b Second vector input. +/// +/// @returns +/// The value of a dot b. +/// +/// @ingroup GPUCore +FfxFloat32 ffxDot2(FfxFloat32x2 a, FfxFloat32x2 b) +{ + return dot(a, b); +} + +/// Calculate dot product of 'a' and 'b'. +/// +/// @param [in] a First vector input. +/// @param [in] b Second vector input. +/// +/// @returns +/// The value of a dot b. +/// +/// @ingroup GPUCore +FfxFloat32 ffxDot3(FfxFloat32x3 a, FfxFloat32x3 b) +{ + return dot(a, b); +} + +/// Calculate dot product of 'a' and 'b'. +/// +/// @param [in] a First vector input. +/// @param [in] b Second vector input. +/// +/// @returns +/// The value of a dot b. +/// +/// @ingroup GPUCore +FfxFloat32 ffxDot4(FfxFloat32x4 a, FfxFloat32x4 b) +{ + return dot(a, b); +} + + +/// Compute an approximate conversion from PQ to Gamma2 space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between PQ and Gamma2. +/// +/// @returns +/// The value a converted into Gamma2. +/// +/// @ingroup GPUCore +FfxFloat32 ffxApproximatePQToGamma2Medium(FfxFloat32 a) +{ + return a * a * a * a; +} + +/// Compute an approximate conversion from PQ to linear space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between PQ and linear. +/// +/// @returns +/// The value a converted into linear. +/// +/// @ingroup GPUCore +FfxFloat32 ffxApproximatePQToLinear(FfxFloat32 a) +{ + return a * a * a * a * a * a * a * a; +} + +/// Compute an approximate conversion from gamma2 to PQ space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between gamma2 and PQ. +/// +/// @returns +/// The value a converted into PQ. +/// +/// @ingroup GPUCore +FfxFloat32 ffxApproximateGamma2ToPQ(FfxFloat32 a) +{ + return ffxAsFloat((ffxAsUInt32(a) >> FfxUInt32(2)) + FfxUInt32(0x2F9A4E46)); +} + +/// Compute a more accurate approximate conversion from gamma2 to PQ space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between gamma2 and PQ. +/// +/// @returns +/// The value a converted into PQ. +/// +/// @ingroup GPUCore +FfxFloat32 ffxApproximateGamma2ToPQMedium(FfxFloat32 a) +{ + FfxFloat32 b = ffxAsFloat((ffxAsUInt32(a) >> FfxUInt32(2)) + FfxUInt32(0x2F9A4E46)); + FfxFloat32 b4 = b * b * b * b; + return b - b * (b4 - a) / (FfxFloat32(4.0) * b4); +} + +/// Compute a high accuracy approximate conversion from gamma2 to PQ space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between gamma2 and PQ. +/// +/// @returns +/// The value a converted into PQ. +/// +/// @ingroup GPUCore +FfxFloat32 ffxApproximateGamma2ToPQHigh(FfxFloat32 a) +{ + return ffxSqrt(ffxSqrt(a)); +} + +/// Compute an approximate conversion from linear to PQ space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between linear and PQ. +/// +/// @returns +/// The value a converted into PQ. +/// +/// @ingroup GPUCore +FfxFloat32 ffxApproximateLinearToPQ(FfxFloat32 a) +{ + return ffxAsFloat((ffxAsUInt32(a) >> FfxUInt32(3)) + FfxUInt32(0x378D8723)); +} + +/// Compute a more accurate approximate conversion from linear to PQ space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between linear and PQ. +/// +/// @returns +/// The value a converted into PQ. +/// +/// @ingroup GPUCore +FfxFloat32 ffxApproximateLinearToPQMedium(FfxFloat32 a) +{ + FfxFloat32 b = ffxAsFloat((ffxAsUInt32(a) >> FfxUInt32(3)) + FfxUInt32(0x378D8723)); + FfxFloat32 b8 = b * b * b * b * b * b * b * b; + return b - b * (b8 - a) / (FfxFloat32(8.0) * b8); +} + +/// Compute a very accurate approximate conversion from linear to PQ space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between linear and PQ. +/// +/// @returns +/// The value a converted into PQ. +/// +/// @ingroup GPUCore +FfxFloat32 ffxApproximateLinearToPQHigh(FfxFloat32 a) +{ + return ffxSqrt(ffxSqrt(ffxSqrt(a))); +} + +/// Compute an approximate conversion from PQ to Gamma2 space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between PQ and Gamma2. +/// +/// @returns +/// The value a converted into Gamma2. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxApproximatePQToGamma2Medium(FfxFloat32x2 a) +{ + return a * a * a * a; +} + +/// Compute an approximate conversion from PQ to linear space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between PQ and linear. +/// +/// @returns +/// The value a converted into linear. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxApproximatePQToLinear(FfxFloat32x2 a) +{ + return a * a * a * a * a * a * a * a; +} + +/// Compute an approximate conversion from gamma2 to PQ space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between gamma2 and PQ. +/// +/// @returns +/// The value a converted into PQ. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxApproximateGamma2ToPQ(FfxFloat32x2 a) +{ + return ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast2(2u)) + ffxBroadcast2(0x2F9A4E46u)); +} + +/// Compute a more accurate approximate conversion from gamma2 to PQ space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between gamma2 and PQ. +/// +/// @returns +/// The value a converted into PQ. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxApproximateGamma2ToPQMedium(FfxFloat32x2 a) +{ + FfxFloat32x2 b = ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast2(2u)) + ffxBroadcast2(0x2F9A4E46u)); + FfxFloat32x2 b4 = b * b * b * b; + return b - b * (b4 - a) / (FfxFloat32(4.0) * b4); +} + +/// Compute a high accuracy approximate conversion from gamma2 to PQ space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between gamma2 and PQ. +/// +/// @returns +/// The value a converted into PQ. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxApproximateGamma2ToPQHigh(FfxFloat32x2 a) +{ + return ffxSqrt(ffxSqrt(a)); +} + +/// Compute an approximate conversion from linear to PQ space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between linear and PQ. +/// +/// @returns +/// The value a converted into PQ. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxApproximateLinearToPQ(FfxFloat32x2 a) +{ + return ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast2(3u)) + ffxBroadcast2(0x378D8723u)); +} + +/// Compute a more accurate approximate conversion from linear to PQ space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between linear and PQ. +/// +/// @returns +/// The value a converted into PQ. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxApproximateLinearToPQMedium(FfxFloat32x2 a) +{ + FfxFloat32x2 b = ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast2(3u)) + ffxBroadcast2(0x378D8723u)); + FfxFloat32x2 b8 = b * b * b * b * b * b * b * b; + return b - b * (b8 - a) / (FfxFloat32(8.0) * b8); +} + +/// Compute a very accurate approximate conversion from linear to PQ space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between linear and PQ. +/// +/// @returns +/// The value a converted into PQ. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxApproximateLinearToPQHigh(FfxFloat32x2 a) +{ + return ffxSqrt(ffxSqrt(ffxSqrt(a))); +} + +/// Compute an approximate conversion from PQ to Gamma2 space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between PQ and Gamma2. +/// +/// @returns +/// The value a converted into Gamma2. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxApproximatePQToGamma2Medium(FfxFloat32x3 a) +{ + return a * a * a * a; +} + +/// Compute an approximate conversion from PQ to linear space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between PQ and linear. +/// +/// @returns +/// The value a converted into linear. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxApproximatePQToLinear(FfxFloat32x3 a) +{ + return a * a * a * a * a * a * a * a; +} + +/// Compute an approximate conversion from gamma2 to PQ space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between gamma2 and PQ. +/// +/// @returns +/// The value a converted into PQ. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxApproximateGamma2ToPQ(FfxFloat32x3 a) +{ + return ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast3(2u)) + ffxBroadcast3(0x2F9A4E46u)); +} + +/// Compute a more accurate approximate conversion from gamma2 to PQ space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between gamma2 and PQ. +/// +/// @returns +/// The value a converted into PQ. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxApproximateGamma2ToPQMedium(FfxFloat32x3 a) +{ + FfxFloat32x3 b = ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast3(2u)) + ffxBroadcast3(0x2F9A4E46u)); + FfxFloat32x3 b4 = b * b * b * b; + return b - b * (b4 - a) / (FfxFloat32(4.0) * b4); +} + +/// Compute a high accuracy approximate conversion from gamma2 to PQ space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between gamma2 and PQ. +/// +/// @returns +/// The value a converted into PQ. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxApproximateGamma2ToPQHigh(FfxFloat32x3 a) +{ + return ffxSqrt(ffxSqrt(a)); +} + +/// Compute an approximate conversion from linear to PQ space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between linear and PQ. +/// +/// @returns +/// The value a converted into PQ. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxApproximateLinearToPQ(FfxFloat32x3 a) +{ + return ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast3(3u)) + ffxBroadcast3(0x378D8723u)); +} + +/// Compute a more accurate approximate conversion from linear to PQ space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between linear and PQ. +/// +/// @returns +/// The value a converted into PQ. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxApproximateLinearToPQMedium(FfxFloat32x3 a) +{ + FfxFloat32x3 b = ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast3(3u)) + ffxBroadcast3(0x378D8723u)); + FfxFloat32x3 b8 = b * b * b * b * b * b * b * b; + return b - b * (b8 - a) / (FfxFloat32(8.0) * b8); +} + +/// Compute a very accurate approximate conversion from linear to PQ space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between linear and PQ. +/// +/// @returns +/// The value a converted into PQ. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxApproximateLinearToPQHigh(FfxFloat32x3 a) +{ + return ffxSqrt(ffxSqrt(ffxSqrt(a))); +} + +/// Compute an approximate conversion from PQ to Gamma2 space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between PQ and Gamma2. +/// +/// @returns +/// The value a converted into Gamma2. +/// +/// @ingroup GPUCore +FfxFloat32x4 ffxApproximatePQToGamma2Medium(FfxFloat32x4 a) +{ + return a * a * a * a; +} + +/// Compute an approximate conversion from PQ to linear space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between PQ and linear. +/// +/// @returns +/// The value a converted into linear. +/// +/// @ingroup GPUCore +FfxFloat32x4 ffxApproximatePQToLinear(FfxFloat32x4 a) +{ + return a * a * a * a * a * a * a * a; +} + +/// Compute an approximate conversion from gamma2 to PQ space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between gamma2 and PQ. +/// +/// @returns +/// The value a converted into PQ. +/// +/// @ingroup GPUCore +FfxFloat32x4 ffxApproximateGamma2ToPQ(FfxFloat32x4 a) +{ + return ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast4(2u)) + ffxBroadcast4(0x2F9A4E46u)); +} + +/// Compute a more accurate approximate conversion from gamma2 to PQ space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between gamma2 and PQ. +/// +/// @returns +/// The value a converted into PQ. +/// +/// @ingroup GPUCore +FfxFloat32x4 ffxApproximateGamma2ToPQMedium(FfxFloat32x4 a) +{ + FfxFloat32x4 b = ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast4(2u)) + ffxBroadcast4(0x2F9A4E46u)); + FfxFloat32x4 b4 = b * b * b * b * b * b * b * b; + return b - b * (b4 - a) / (FfxFloat32(4.0) * b4); +} + +/// Compute a high accuracy approximate conversion from gamma2 to PQ space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between gamma2 and PQ. +/// +/// @returns +/// The value a converted into PQ. +/// +/// @ingroup GPUCore +FfxFloat32x4 ffxApproximateGamma2ToPQHigh(FfxFloat32x4 a) +{ + return ffxSqrt(ffxSqrt(a)); +} + +/// Compute an approximate conversion from linear to PQ space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between linear and PQ. +/// +/// @returns +/// The value a converted into PQ. +/// +/// @ingroup GPUCore +FfxFloat32x4 ffxApproximateLinearToPQ(FfxFloat32x4 a) +{ + return ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast4(3u)) + ffxBroadcast4(0x378D8723u)); +} + +/// Compute a more accurate approximate conversion from linear to PQ space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between linear and PQ. +/// +/// @returns +/// The value a converted into PQ. +/// +/// @ingroup GPUCore +FfxFloat32x4 ffxApproximateLinearToPQMedium(FfxFloat32x4 a) +{ + FfxFloat32x4 b = ffxAsFloat((ffxAsUInt32(a) >> ffxBroadcast4(3u)) + ffxBroadcast4(0x378D8723u)); + FfxFloat32x4 b8 = b * b * b * b * b * b * b * b; + return b - b * (b8 - a) / (FfxFloat32(8.0) * b8); +} + +/// Compute a very accurate approximate conversion from linear to PQ space. +/// +/// PQ is very close to x^(1/8). The functions below Use the fast FfxFloat32 approximation method to do +/// PQ conversions to and from Gamma2 (4th power and fast 4th root), and PQ to and from Linear +/// (8th power and fast 8th root). The maximum error is approximately 0.2%. +/// +/// @param a The value to convert between linear and PQ. +/// +/// @returns +/// The value a converted into PQ. +/// +/// @ingroup GPUCore +FfxFloat32x4 ffxApproximateLinearToPQHigh(FfxFloat32x4 a) +{ + return ffxSqrt(ffxSqrt(ffxSqrt(a))); +} + +// An approximation of sine. +// +// Valid input range is {-1 to 1} representing {0 to 2 pi}, and the output range +// is {-1/4 to 1/4} representing {-1 to 1}. +// +// @param [in] value The value to calculate approximate sine for. +// +// @returns +// The approximate sine of value. +FfxFloat32 ffxParabolicSin(FfxFloat32 value) +{ + return value * abs(value) - value; +} + +// An approximation of sine. +// +// Valid input range is {-1 to 1} representing {0 to 2 pi}, and the output range +// is {-1/4 to 1/4} representing {-1 to 1}. +// +// @param [in] value The value to calculate approximate sine for. +// +// @returns +// The approximate sine of value. +FfxFloat32x2 ffxParabolicSin(FfxFloat32x2 x) +{ + return x * abs(x) - x; +} + +// An approximation of cosine. +// +// Valid input range is {-1 to 1} representing {0 to 2 pi}, and the output range +// is {-1/4 to 1/4} representing {-1 to 1}. +// +// @param [in] value The value to calculate approximate cosine for. +// +// @returns +// The approximate cosine of value. +FfxFloat32 ffxParabolicCos(FfxFloat32 x) +{ + x = ffxFract(x * FfxFloat32(0.5) + FfxFloat32(0.75)); + x = x * FfxFloat32(2.0) - FfxFloat32(1.0); + return ffxParabolicSin(x); +} + +// An approximation of cosine. +// +// Valid input range is {-1 to 1} representing {0 to 2 pi}, and the output range +// is {-1/4 to 1/4} representing {-1 to 1}. +// +// @param [in] value The value to calculate approximate cosine for. +// +// @returns +// The approximate cosine of value. +FfxFloat32x2 ffxParabolicCos(FfxFloat32x2 x) +{ + x = ffxFract(x * ffxBroadcast2(0.5f) + ffxBroadcast2(0.75f)); + x = x * ffxBroadcast2(2.0f) - ffxBroadcast2(1.0f); + return ffxParabolicSin(x); +} + +// An approximation of both sine and cosine. +// +// Valid input range is {-1 to 1} representing {0 to 2 pi}, and the output range +// is {-1/4 to 1/4} representing {-1 to 1}. +// +// @param [in] value The value to calculate approximate cosine for. +// +// @returns +// A FfxFloat32x2 containing approximations of both sine and cosine of value. +FfxFloat32x2 ffxParabolicSinCos(FfxFloat32 x) +{ + FfxFloat32 y = ffxFract(x * FfxFloat32(0.5) + FfxFloat32(0.75)); + y = y * FfxFloat32(2.0) - FfxFloat32(1.0); + return ffxParabolicSin(FfxFloat32x2(x, y)); +} + +/// Conditional free logic AND operation using values. +/// +/// @param [in] x The first value to be fed into the AND operator. +/// @param [in] y The second value to be fed into the AND operator. +/// +/// @returns +/// Result of the AND operation. +/// +/// @ingroup GPUCore +FfxUInt32 ffxZeroOneAnd(FfxUInt32 x, FfxUInt32 y) +{ + return min(x, y); +} + +/// Conditional free logic AND operation using two values. +/// +/// @param [in] x The first value to be fed into the AND operator. +/// @param [in] y The second value to be fed into the AND operator. +/// +/// @returns +/// Result of the AND operation. +/// +/// @ingroup GPUCore +FfxUInt32x2 ffxZeroOneAnd(FfxUInt32x2 x, FfxUInt32x2 y) +{ + return min(x, y); +} + +/// Conditional free logic AND operation using two values. +/// +/// @param [in] x The first value to be fed into the AND operator. +/// @param [in] y The second value to be fed into the AND operator. +/// +/// @returns +/// Result of the AND operation. +/// +/// @ingroup GPUCore +FfxUInt32x3 ffxZeroOneAnd(FfxUInt32x3 x, FfxUInt32x3 y) +{ + return min(x, y); +} + +/// Conditional free logic AND operation using two values. +/// +/// @param [in] x The first value to be fed into the AND operator. +/// @param [in] y The second value to be fed into the AND operator. +/// +/// @returns +/// Result of the AND operation. +/// +/// @ingroup GPUCore +FfxUInt32x4 ffxZeroOneAnd(FfxUInt32x4 x, FfxUInt32x4 y) +{ + return min(x, y); +} + +/// Conditional free logic NOT operation using two values. +/// +/// @param [in] x The first value to be fed into the NOT operator. +/// +/// @returns +/// Result of the NOT operation. +/// +/// @ingroup GPUCore +FfxUInt32 ffxZeroOneAnd(FfxUInt32 x) +{ + return x ^ FfxUInt32(1); +} + +/// Conditional free logic NOT operation using two values. +/// +/// @param [in] x The first value to be fed into the NOT operator. +/// +/// @returns +/// Result of the NOT operation. +/// +/// @ingroup GPUCore +FfxUInt32x2 ffxZeroOneAnd(FfxUInt32x2 x) +{ + return x ^ ffxBroadcast2(1u); +} + +/// Conditional free logic NOT operation using two values. +/// +/// @param [in] x The first value to be fed into the NOT operator. +/// +/// @returns +/// Result of the NOT operation. +/// +/// @ingroup GPUCore +FfxUInt32x3 ffxZeroOneAnd(FfxUInt32x3 x) +{ + return x ^ ffxBroadcast3(1u); +} + +/// Conditional free logic NOT operation using two values. +/// +/// @param [in] x The first value to be fed into the NOT operator. +/// +/// @returns +/// Result of the NOT operation. +/// +/// @ingroup GPUCore +FfxUInt32x4 ffxZeroOneAnd(FfxUInt32x4 x) +{ + return x ^ ffxBroadcast4(1u); +} + +/// Conditional free logic OR operation using two values. +/// +/// @param [in] x The first value to be fed into the OR operator. +/// @param [in] y The second value to be fed into the OR operator. +/// +/// @returns +/// Result of the OR operation. +/// +/// @ingroup GPUCore +FfxUInt32 ffxZeroOneOr(FfxUInt32 x, FfxUInt32 y) +{ + return max(x, y); +} + +/// Conditional free logic OR operation using two values. +/// +/// @param [in] x The first value to be fed into the OR operator. +/// @param [in] y The second value to be fed into the OR operator. +/// +/// @returns +/// Result of the OR operation. +/// +/// @ingroup GPUCore +FfxUInt32x2 ffxZeroOneOr(FfxUInt32x2 x, FfxUInt32x2 y) +{ + return max(x, y); +} + +/// Conditional free logic OR operation using two values. +/// +/// @param [in] x The first value to be fed into the OR operator. +/// @param [in] y The second value to be fed into the OR operator. +/// +/// @returns +/// Result of the OR operation. +/// +/// @ingroup GPUCore +FfxUInt32x3 ffxZeroOneOr(FfxUInt32x3 x, FfxUInt32x3 y) +{ + return max(x, y); +} + +/// Conditional free logic OR operation using two values. +/// +/// @param [in] x The first value to be fed into the OR operator. +/// @param [in] y The second value to be fed into the OR operator. +/// +/// @returns +/// Result of the OR operation. +/// +/// @ingroup GPUCore +FfxUInt32x4 ffxZeroOneOr(FfxUInt32x4 x, FfxUInt32x4 y) +{ + return max(x, y); +} + +/// Conditional free logic signed NOT operation using two half-precision FfxFloat32 values. +/// +/// @param [in] x The first value to be fed into the AND OR operator. +/// +/// @returns +/// Result of the AND OR operation. +/// +/// @ingroup GPUCore +FfxUInt32 ffxZeroOneAndToU1(FfxFloat32 x) +{ + return FfxUInt32(FfxFloat32(1.0) - x); +} + +/// Conditional free logic signed NOT operation using two half-precision FfxFloat32 values. +/// +/// @param [in] x The first value to be fed into the AND OR operator. +/// +/// @returns +/// Result of the AND OR operation. +/// +/// @ingroup GPUCore +FfxUInt32x2 ffxZeroOneAndToU2(FfxFloat32x2 x) +{ + return FfxUInt32x2(ffxBroadcast2(1.0) - x); +} + +/// Conditional free logic signed NOT operation using two half-precision FfxFloat32 values. +/// +/// @param [in] x The first value to be fed into the AND OR operator. +/// +/// @returns +/// Result of the AND OR operation. +/// +/// @ingroup GPUCore +FfxUInt32x3 ffxZeroOneAndToU3(FfxFloat32x3 x) +{ + return FfxUInt32x3(ffxBroadcast3(1.0) - x); +} + +/// Conditional free logic signed NOT operation using two half-precision FfxFloat32 values. +/// +/// @param [in] x The first value to be fed into the AND OR operator. +/// +/// @returns +/// Result of the AND OR operation. +/// +/// @ingroup GPUCore +FfxUInt32x4 ffxZeroOneAndToU4(FfxFloat32x4 x) +{ + return FfxUInt32x4(ffxBroadcast4(1.0) - x); +} + +/// Conditional free logic AND operation using two values followed by a NOT operation +/// using the resulting value and a third value. +/// +/// @param [in] x The first value to be fed into the AND operator. +/// @param [in] y The second value to be fed into the AND operator. +/// @param [in] z The second value to be fed into the OR operator. +/// +/// @returns +/// Result of the AND OR operation. +/// +/// @ingroup GPUCore +FfxFloat32 ffxZeroOneAndOr(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) +{ + return ffxSaturate(x * y + z); +} + +/// Conditional free logic AND operation using two values followed by a NOT operation +/// using the resulting value and a third value. +/// +/// @param [in] x The first value to be fed into the AND operator. +/// @param [in] y The second value to be fed into the AND operator. +/// @param [in] z The second value to be fed into the OR operator. +/// +/// @returns +/// Result of the AND OR operation. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxZeroOneAndOr(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) +{ + return ffxSaturate(x * y + z); +} + +/// Conditional free logic AND operation using two values followed by a NOT operation +/// using the resulting value and a third value. +/// +/// @param [in] x The first value to be fed into the AND operator. +/// @param [in] y The second value to be fed into the AND operator. +/// @param [in] z The second value to be fed into the OR operator. +/// +/// @returns +/// Result of the AND OR operation. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxZeroOneAndOr(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) +{ + return ffxSaturate(x * y + z); +} + +/// Conditional free logic AND operation using two values followed by a NOT operation +/// using the resulting value and a third value. +/// +/// @param [in] x The first value to be fed into the AND operator. +/// @param [in] y The second value to be fed into the AND operator. +/// @param [in] z The second value to be fed into the OR operator. +/// +/// @returns +/// Result of the AND OR operation. +/// +/// @ingroup GPUCore +FfxFloat32x4 ffxZeroOneAndOr(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 z) +{ + return ffxSaturate(x * y + z); +} + +/// Given a value, returns 1.0 if greater than zero and 0.0 if not. +/// +/// @param [in] x The value to be compared. +/// +/// @returns +/// Result of the greater than zero comparison. +/// +/// @ingroup GPUCore +FfxFloat32 ffxZeroOneIsGreaterThanZero(FfxFloat32 x) +{ + return ffxSaturate(x * FfxFloat32(FFX_POSITIVE_INFINITY_FLOAT)); +} + +/// Given a value, returns 1.0 if greater than zero and 0.0 if not. +/// +/// @param [in] x The value to be compared. +/// +/// @returns +/// Result of the greater than zero comparison. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxZeroOneIsGreaterThanZero(FfxFloat32x2 x) +{ + return ffxSaturate(x * ffxBroadcast2(FFX_POSITIVE_INFINITY_FLOAT)); +} + +/// Given a value, returns 1.0 if greater than zero and 0.0 if not. +/// +/// @param [in] x The value to be compared. +/// +/// @returns +/// Result of the greater than zero comparison. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxZeroOneIsGreaterThanZero(FfxFloat32x3 x) +{ + return ffxSaturate(x * ffxBroadcast3(FFX_POSITIVE_INFINITY_FLOAT)); +} + +/// Given a value, returns 1.0 if greater than zero and 0.0 if not. +/// +/// @param [in] x The value to be compared. +/// +/// @returns +/// Result of the greater than zero comparison. +/// +/// @ingroup GPUCore +FfxFloat32x4 ffxZeroOneIsGreaterThanZero(FfxFloat32x4 x) +{ + return ffxSaturate(x * ffxBroadcast4(FFX_POSITIVE_INFINITY_FLOAT)); +} + +/// Conditional free logic signed NOT operation using two FfxFloat32 values. +/// +/// @param [in] x The first value to be fed into the AND OR operator. +/// +/// @returns +/// Result of the AND OR operation. +/// +/// @ingroup GPUCore +FfxFloat32 ffxZeroOneAnd(FfxFloat32 x) +{ + return FfxFloat32(1.0) - x; +} + +/// Conditional free logic signed NOT operation using two FfxFloat32 values. +/// +/// @param [in] x The first value to be fed into the AND OR operator. +/// +/// @returns +/// Result of the AND OR operation. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxZeroOneAnd(FfxFloat32x2 x) +{ + return ffxBroadcast2(1.0) - x; +} + +/// Conditional free logic signed NOT operation using two FfxFloat32 values. +/// +/// @param [in] x The first value to be fed into the AND OR operator. +/// +/// @returns +/// Result of the AND OR operation. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxZeroOneAnd(FfxFloat32x3 x) +{ + return ffxBroadcast3(1.0) - x; +} + +/// Conditional free logic signed NOT operation using two FfxFloat32 values. +/// +/// @param [in] x The first value to be fed into the AND OR operator. +/// +/// @returns +/// Result of the AND OR operation. +/// +/// @ingroup GPUCore +FfxFloat32x4 ffxZeroOneAnd(FfxFloat32x4 x) +{ + return ffxBroadcast4(1.0) - x; +} + +/// Conditional free logic OR operation using two FfxFloat32 values. +/// +/// @param [in] x The first value to be fed into the OR operator. +/// @param [in] y The second value to be fed into the OR operator. +/// +/// @returns +/// Result of the OR operation. +/// +/// @ingroup GPUCore +FfxFloat32 ffxZeroOneOr(FfxFloat32 x, FfxFloat32 y) +{ + return max(x, y); +} + +/// Conditional free logic OR operation using two FfxFloat32 values. +/// +/// @param [in] x The first value to be fed into the OR operator. +/// @param [in] y The second value to be fed into the OR operator. +/// +/// @returns +/// Result of the OR operation. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxZeroOneOr(FfxFloat32x2 x, FfxFloat32x2 y) +{ + return max(x, y); +} + +/// Conditional free logic OR operation using two FfxFloat32 values. +/// +/// @param [in] x The first value to be fed into the OR operator. +/// @param [in] y The second value to be fed into the OR operator. +/// +/// @returns +/// Result of the OR operation. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxZeroOneOr(FfxFloat32x3 x, FfxFloat32x3 y) +{ + return max(x, y); +} + +/// Conditional free logic OR operation using two FfxFloat32 values. +/// +/// @param [in] x The first value to be fed into the OR operator. +/// @param [in] y The second value to be fed into the OR operator. +/// +/// @returns +/// Result of the OR operation. +/// +/// @ingroup GPUCore +FfxFloat32x4 ffxZeroOneOr(FfxFloat32x4 x, FfxFloat32x4 y) +{ + return max(x, y); +} + +/// Choose between two FfxFloat32 values if the first paramter is greater than zero. +/// +/// @param [in] x The value to compare against zero. +/// @param [in] y The value to return if the comparision is greater than zero. +/// @param [in] z The value to return if the comparision is less than or equal to zero. +/// +/// @returns +/// The selected value. +/// +/// @ingroup GPUCore +FfxFloat32 ffxZeroOneSelect(FfxFloat32 x, FfxFloat32 y, FfxFloat32 z) +{ + FfxFloat32 r = (-x) * z + z; + return x * y + r; +} + +/// Choose between two FfxFloat32 values if the first paramter is greater than zero. +/// +/// @param [in] x The value to compare against zero. +/// @param [in] y The value to return if the comparision is greater than zero. +/// @param [in] z The value to return if the comparision is less than or equal to zero. +/// +/// @returns +/// The selected value. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxZeroOneSelect(FfxFloat32x2 x, FfxFloat32x2 y, FfxFloat32x2 z) +{ + FfxFloat32x2 r = (-x) * z + z; + return x * y + r; +} + +/// Choose between two FfxFloat32 values if the first paramter is greater than zero. +/// +/// @param [in] x The value to compare against zero. +/// @param [in] y The value to return if the comparision is greater than zero. +/// @param [in] z The value to return if the comparision is less than or equal to zero. +/// +/// @returns +/// The selected value. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxZeroOneSelect(FfxFloat32x3 x, FfxFloat32x3 y, FfxFloat32x3 z) +{ + FfxFloat32x3 r = (-x) * z + z; + return x * y + r; +} + +/// Choose between two FfxFloat32 values if the first paramter is greater than zero. +/// +/// @param [in] x The value to compare against zero. +/// @param [in] y The value to return if the comparision is greater than zero. +/// @param [in] z The value to return if the comparision is less than or equal to zero. +/// +/// @returns +/// The selected value. +/// +/// @ingroup GPUCore +FfxFloat32x4 ffxZeroOneSelect(FfxFloat32x4 x, FfxFloat32x4 y, FfxFloat32x4 z) +{ + FfxFloat32x4 r = (-x) * z + z; + return x * y + r; +} + +/// Given a value, returns 1.0 if less than zero and 0.0 if not. +/// +/// @param [in] x The value to be compared. +/// +/// @returns +/// Result of the sign value. +/// +/// @ingroup GPUCore +FfxFloat32 ffxZeroOneIsSigned(FfxFloat32 x) +{ + return ffxSaturate(x * FfxFloat32(FFX_NEGATIVE_INFINITY_FLOAT)); +} + +/// Given a value, returns 1.0 if less than zero and 0.0 if not. +/// +/// @param [in] x The value to be compared. +/// +/// @returns +/// Result of the sign value. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxZeroOneIsSigned(FfxFloat32x2 x) +{ + return ffxSaturate(x * ffxBroadcast2(FFX_NEGATIVE_INFINITY_FLOAT)); +} + +/// Given a value, returns 1.0 if less than zero and 0.0 if not. +/// +/// @param [in] x The value to be compared. +/// +/// @returns +/// Result of the sign value. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxZeroOneIsSigned(FfxFloat32x3 x) +{ + return ffxSaturate(x * ffxBroadcast3(FFX_NEGATIVE_INFINITY_FLOAT)); +} + +/// Given a value, returns 1.0 if less than zero and 0.0 if not. +/// +/// @param [in] x The value to be compared. +/// +/// @returns +/// Result of the sign value. +/// +/// @ingroup GPUCore +FfxFloat32x4 ffxZeroOneIsSigned(FfxFloat32x4 x) +{ + return ffxSaturate(x * ffxBroadcast4(FFX_NEGATIVE_INFINITY_FLOAT)); +} + +/// Compute a Rec.709 color space. +/// +/// Rec.709 is used for some HDTVs. +/// +/// Both Rec.709 and sRGB have a linear segment which as spec'ed would intersect the curved segment 2 times. +/// (a.) For 8-bit sRGB, steps {0 to 10.3} are in the linear region (4% of the encoding range). +/// (b.) For 8-bit 709, steps {0 to 20.7} are in the linear region (8% of the encoding range). +/// +/// @param [in] color The color to convert to Rec. 709. +/// +/// @returns +/// The color in linear space. +/// +/// @ingroup GPUCore +FfxFloat32 ffxRec709FromLinear(FfxFloat32 color) +{ + FfxFloat32x3 j = FfxFloat32x3(0.018 * 4.5, 4.5, 0.45); + FfxFloat32x2 k = FfxFloat32x2(1.099, -0.099); + return clamp(j.x, color * j.y, pow(color, j.z) * k.x + k.y); +} + +/// Compute a Rec.709 color space. +/// +/// Rec.709 is used for some HDTVs. +/// +/// Both Rec.709 and sRGB have a linear segment which as spec'ed would intersect the curved segment 2 times. +/// (a.) For 8-bit sRGB, steps {0 to 10.3} are in the linear region (4% of the encoding range). +/// (b.) For 8-bit 709, steps {0 to 20.7} are in the linear region (8% of the encoding range). +/// +/// @param [in] color The color to convert to Rec. 709. +/// +/// @returns +/// The color in linear space. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxRec709FromLinear(FfxFloat32x2 color) +{ + FfxFloat32x3 j = FfxFloat32x3(0.018 * 4.5, 4.5, 0.45); + FfxFloat32x2 k = FfxFloat32x2(1.099, -0.099); + return clamp(j.xx, color * j.yy, pow(color, j.zz) * k.xx + k.yy); +} + +/// Compute a Rec.709 color space. +/// +/// Rec.709 is used for some HDTVs. +/// +/// Both Rec.709 and sRGB have a linear segment which as spec'ed would intersect the curved segment 2 times. +/// (a.) For 8-bit sRGB, steps {0 to 10.3} are in the linear region (4% of the encoding range). +/// (b.) For 8-bit 709, steps {0 to 20.7} are in the linear region (8% of the encoding range). +/// +/// @param [in] color The color to convert to Rec. 709. +/// +/// @returns +/// The color in linear space. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxRec709FromLinear(FfxFloat32x3 color) +{ + FfxFloat32x3 j = FfxFloat32x3(0.018 * 4.5, 4.5, 0.45); + FfxFloat32x2 k = FfxFloat32x2(1.099, -0.099); + return clamp(j.xxx, color * j.yyy, pow(color, j.zzz) * k.xxx + k.yyy); +} + +/// Compute a linear value from a REC.709 value. +/// +/// @param [in] color The value to convert to linear from REC.709. +/// +/// @returns +/// A value in linear space. +/// +/// @ingroup GPUCore +FfxFloat32 ffxLinearFromRec709(FfxFloat32 color) +{ + FfxFloat32x3 j = FfxFloat32x3(0.081 / 4.5, 1.0 / 4.5, 1.0 / 0.45); + FfxFloat32x2 k = FfxFloat32x2(1.0 / 1.099, 0.099 / 1.099); + return ffxZeroOneSelect(ffxZeroOneIsSigned(color - j.x), color * j.y, pow(color * k.x + k.y, j.z)); +} + +/// Compute a linear value from a REC.709 value. +/// +/// @param [in] color The value to convert to linear from REC.709. +/// +/// @returns +/// A value in linear space. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxLinearFromRec709(FfxFloat32x2 color) +{ + FfxFloat32x3 j = FfxFloat32x3(0.081 / 4.5, 1.0 / 4.5, 1.0 / 0.45); + FfxFloat32x2 k = FfxFloat32x2(1.0 / 1.099, 0.099 / 1.099); + return ffxZeroOneSelect(ffxZeroOneIsSigned(color - j.xx), color * j.yy, pow(color * k.xx + k.yy, j.zz)); +} + +/// Compute a linear value from a REC.709 value. +/// +/// @param [in] color The value to convert to linear from REC.709. +/// +/// @returns +/// A value in linear space. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxLinearFromRec709(FfxFloat32x3 color) +{ + FfxFloat32x3 j = FfxFloat32x3(0.081 / 4.5, 1.0 / 4.5, 1.0 / 0.45); + FfxFloat32x2 k = FfxFloat32x2(1.0 / 1.099, 0.099 / 1.099); + return ffxZeroOneSelect(ffxZeroOneIsSigned(color - j.xxx), color * j.yyy, pow(color * k.xxx + k.yyy, j.zzz)); +} + +/// Compute a gamma value from a linear value. +/// +/// Typically 2.2 for some PC displays, or 2.4-2.5 for CRTs, or 2.2 FreeSync2 native. +/// +/// Note: 'rcpX' is '1/x', where the 'x' is what would be used in ffxLinearFromGamma. +/// +/// @param [in] value The value to convert to gamma space from linear. +/// @param [in] power The reciprocal of power value used for the gamma curve. +/// +/// @returns +/// A value in gamma space. +/// +/// @ingroup GPUCore +FfxFloat32 ffxGammaFromLinear(FfxFloat32 value, FfxFloat32 power) +{ + return pow(value, FfxFloat32(power)); +} + +/// Compute a gamma value from a linear value. +/// +/// Typically 2.2 for some PC displays, or 2.4-2.5 for CRTs, or 2.2 FreeSync2 native. +/// +/// Note: 'rcpX' is '1/x', where the 'x' is what would be used in ffxLinearFromGamma. +/// +/// @param [in] value The value to convert to gamma space from linear. +/// @param [in] power The reciprocal of power value used for the gamma curve. +/// +/// @returns +/// A value in gamma space. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxGammaFromLinear(FfxFloat32x2 value, FfxFloat32 power) +{ + return pow(value, ffxBroadcast2(power)); +} + +/// Compute a gamma value from a linear value. +/// +/// Typically 2.2 for some PC displays, or 2.4-2.5 for CRTs, or 2.2 FreeSync2 native. +/// +/// Note: 'rcpX' is '1/x', where the 'x' is what would be used in ffxLinearFromGamma. +/// +/// @param [in] value The value to convert to gamma space from linear. +/// @param [in] power The reciprocal of power value used for the gamma curve. +/// +/// @returns +/// A value in gamma space. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxGammaFromLinear(FfxFloat32x3 value, FfxFloat32 power) +{ + return pow(value, ffxBroadcast3(power)); +} + +/// Compute a linear value from a value in a gamma space. +/// +/// Typically 2.2 for some PC displays, or 2.4-2.5 for CRTs, or 2.2 FreeSync2 native. +/// +/// @param [in] color The value to convert to linear in gamma space. +/// @param [in] power The power value used for the gamma curve. +/// +/// @returns +/// A value in linear space. +/// +/// @ingroup GPUCore +FfxFloat32 ffxLinearFromGamma(FfxFloat32 color, FfxFloat32 power) +{ + return pow(color, FfxFloat32(power)); +} + +/// Compute a linear value from a value in a gamma space. +/// +/// Typically 2.2 for some PC displays, or 2.4-2.5 for CRTs, or 2.2 FreeSync2 native. +/// +/// @param [in] color The value to convert to linear in gamma space. +/// @param [in] power The power value used for the gamma curve. +/// +/// @returns +/// A value in linear space. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxLinearFromGamma(FfxFloat32x2 color, FfxFloat32 power) +{ + return pow(color, ffxBroadcast2(power)); +} + +/// Compute a linear value from a value in a gamma space. +/// +/// Typically 2.2 for some PC displays, or 2.4-2.5 for CRTs, or 2.2 FreeSync2 native. +/// +/// @param [in] color The value to convert to linear in gamma space. +/// @param [in] power The power value used for the gamma curve. +/// +/// @returns +/// A value in linear space. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxLinearFromGamma(FfxFloat32x3 color, FfxFloat32 power) +{ + return pow(color, ffxBroadcast3(power)); +} + +/// Compute a PQ value from a linear value. +/// +/// @param [in] value The value to convert to PQ from linear. +/// +/// @returns +/// A value in linear space. +/// +/// @ingroup GPUCore +FfxFloat32 ffxPQFromLinear(FfxFloat32 value) +{ + FfxFloat32 p = pow(value, FfxFloat32(0.159302)); + return pow((FfxFloat32(0.835938) + FfxFloat32(18.8516) * p) / (FfxFloat32(1.0) + FfxFloat32(18.6875) * p), FfxFloat32(78.8438)); +} + +/// Compute a PQ value from a linear value. +/// +/// @param [in] value The value to convert to PQ from linear. +/// +/// @returns +/// A value in linear space. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxPQFromLinear(FfxFloat32x2 value) +{ + FfxFloat32x2 p = pow(value, ffxBroadcast2(0.159302)); + return pow((ffxBroadcast2(0.835938) + ffxBroadcast2(18.8516) * p) / (ffxBroadcast2(1.0) + ffxBroadcast2(18.6875) * p), ffxBroadcast2(78.8438)); +} + +/// Compute a PQ value from a linear value. +/// +/// @param [in] value The value to convert to PQ from linear. +/// +/// @returns +/// A value in linear space. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxPQFromLinear(FfxFloat32x3 value) +{ + FfxFloat32x3 p = pow(value, ffxBroadcast3(0.159302)); + return pow((ffxBroadcast3(0.835938) + ffxBroadcast3(18.8516) * p) / (ffxBroadcast3(1.0) + ffxBroadcast3(18.6875) * p), ffxBroadcast3(78.8438)); +} + +/// Compute a linear value from a value in a PQ space. +/// +/// Typically 2.2 for some PC displays, or 2.4-2.5 for CRTs, or 2.2 FreeSync2 native. +/// +/// @param [in] value The value to convert to linear in PQ space. +/// +/// @returns +/// A value in linear space. +/// +/// @ingroup GPUCore +FfxFloat32 ffxLinearFromPQ(FfxFloat32 value) +{ + FfxFloat32 p = pow(value, FfxFloat32(0.0126833)); + return pow(ffxSaturate(p - FfxFloat32(0.835938)) / (FfxFloat32(18.8516) - FfxFloat32(18.6875) * p), FfxFloat32(6.27739)); +} + +/// Compute a linear value from a value in a PQ space. +/// +/// Typically 2.2 for some PC displays, or 2.4-2.5 for CRTs, or 2.2 FreeSync2 native. +/// +/// @param [in] value The value to convert to linear in PQ space. +/// +/// @returns +/// A value in linear space. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxLinearFromPQ(FfxFloat32x2 value) +{ + FfxFloat32x2 p = pow(value, ffxBroadcast2(0.0126833)); + return pow(ffxSaturate(p - ffxBroadcast2(0.835938)) / (ffxBroadcast2(18.8516) - ffxBroadcast2(18.6875) * p), ffxBroadcast2(6.27739)); +} + +/// Compute a linear value from a value in a PQ space. +/// +/// Typically 2.2 for some PC displays, or 2.4-2.5 for CRTs, or 2.2 FreeSync2 native. +/// +/// @param [in] value The value to convert to linear in PQ space. +/// +/// @returns +/// A value in linear space. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxLinearFromPQ(FfxFloat32x3 value) +{ + FfxFloat32x3 p = pow(value, ffxBroadcast3(0.0126833)); + return pow(ffxSaturate(p - ffxBroadcast3(0.835938)) / (ffxBroadcast3(18.8516) - ffxBroadcast3(18.6875) * p), ffxBroadcast3(6.27739)); +} + +/// Compute an SRGB value from a linear value. +/// +/// @param [in] value The value to convert to SRGB from linear. +/// +/// @returns +/// A value in SRGB space. +/// +/// @ingroup GPUCore +FfxFloat32 ffxSrgbFromLinear(FfxFloat32 value) +{ + FfxFloat32x3 j = FfxFloat32x3(0.0031308 * 12.92, 12.92, 1.0 / 2.4); + FfxFloat32x2 k = FfxFloat32x2(1.055, -0.055); + return clamp(j.x, value * j.y, pow(value, j.z) * k.x + k.y); +} + +/// Compute an SRGB value from a linear value. +/// +/// @param [in] value The value to convert to SRGB from linear. +/// +/// @returns +/// A value in SRGB space. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxSrgbFromLinear(FfxFloat32x2 value) +{ + FfxFloat32x3 j = FfxFloat32x3(0.0031308 * 12.92, 12.92, 1.0 / 2.4); + FfxFloat32x2 k = FfxFloat32x2(1.055, -0.055); + return clamp(j.xx, value * j.yy, pow(value, j.zz) * k.xx + k.yy); +} + +/// Compute an SRGB value from a linear value. +/// +/// @param [in] value The value to convert to SRGB from linear. +/// +/// @returns +/// A value in SRGB space. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxSrgbFromLinear(FfxFloat32x3 value) +{ + FfxFloat32x3 j = FfxFloat32x3(0.0031308 * 12.92, 12.92, 1.0 / 2.4); + FfxFloat32x2 k = FfxFloat32x2(1.055, -0.055); + return clamp(j.xxx, value * j.yyy, pow(value, j.zzz) * k.xxx + k.yyy); +} + +/// Compute a linear value from a value in a SRGB space. +/// +/// Typically 2.2 for some PC displays, or 2.4-2.5 for CRTs, or 2.2 FreeSync2 native. +/// +/// @param [in] value The value to convert to linear in SRGB space. +/// +/// @returns +/// A value in linear space. +/// +/// @ingroup GPUCore +FfxFloat32 ffxLinearFromSrgb(FfxFloat32 value) +{ + FfxFloat32x3 j = FfxFloat32x3(0.04045, 1.0 / 12.92, 2.4); + FfxFloat32x2 k = FfxFloat32x2(1.0 / 1.055, 0.055 / 1.055); + return ffxZeroOneSelect(ffxZeroOneIsSigned(value - j.x), value * j.y, pow(value * k.x + k.y, j.z)); +} + +/// Compute a linear value from a value in a SRGB space. +/// +/// Typically 2.2 for some PC displays, or 2.4-2.5 for CRTs, or 2.2 FreeSync2 native. +/// +/// @param [in] value The value to convert to linear in SRGB space. +/// +/// @returns +/// A value in linear space. +/// +/// @ingroup GPUCore +FfxFloat32x2 ffxLinearFromSrgb(FfxFloat32x2 value) +{ + FfxFloat32x3 j = FfxFloat32x3(0.04045, 1.0 / 12.92, 2.4); + FfxFloat32x2 k = FfxFloat32x2(1.0 / 1.055, 0.055 / 1.055); + return ffxZeroOneSelect(ffxZeroOneIsSigned(value - j.xx), value * j.yy, pow(value * k.xx + k.yy, j.zz)); +} + +/// Compute a linear value from a value in a SRGB space. +/// +/// Typically 2.2 for some PC displays, or 2.4-2.5 for CRTs, or 2.2 FreeSync2 native. +/// +/// @param [in] value The value to convert to linear in SRGB space. +/// +/// @returns +/// A value in linear space. +/// +/// @ingroup GPUCore +FfxFloat32x3 ffxLinearFromSrgb(FfxFloat32x3 value) +{ + FfxFloat32x3 j = FfxFloat32x3(0.04045, 1.0 / 12.92, 2.4); + FfxFloat32x2 k = FfxFloat32x2(1.0 / 1.055, 0.055 / 1.055); + return ffxZeroOneSelect(ffxZeroOneIsSigned(value - j.xxx), value * j.yyy, pow(value * k.xxx + k.yyy, j.zzz)); +} + +/// A remapping of 64x1 to 8x8 imposing rotated 2x2 pixel quads in quad linear. +/// +/// Remap illustration: +/// +/// 543210 +/// ~~~~~~ +/// ..xxx. +/// yy...y +/// +/// @param [in] a The input 1D coordinates to remap. +/// +/// @returns +/// The remapped 2D coordinates. +/// +/// @ingroup GPUCore +FfxUInt32x2 ffxRemapForQuad(FfxUInt32 a) +{ + return FfxUInt32x2(ffxBitfieldExtract(a, 1u, 3u), ffxBitfieldInsertMask(ffxBitfieldExtract(a, 3u, 3u), a, 1u)); +} + +/// A helper function performing a remap 64x1 to 8x8 remapping which is necessary for 2D wave reductions. +/// +/// The 64-wide lane indices to 8x8 remapping is performed as follows: +/// +/// 00 01 08 09 10 11 18 19 +/// 02 03 0a 0b 12 13 1a 1b +/// 04 05 0c 0d 14 15 1c 1d +/// 06 07 0e 0f 16 17 1e 1f +/// 20 21 28 29 30 31 38 39 +/// 22 23 2a 2b 32 33 3a 3b +/// 24 25 2c 2d 34 35 3c 3d +/// 26 27 2e 2f 36 37 3e 3f +/// +/// @param [in] a The input 1D coordinate to remap. +/// +/// @returns +/// The remapped 2D coordinates. +/// +/// @ingroup GPUCore +FfxUInt32x2 ffxRemapForWaveReduction(FfxUInt32 a) +{ + return FfxUInt32x2(ffxBitfieldInsertMask(ffxBitfieldExtract(a, 2u, 3u), a, 1u), ffxBitfieldInsertMask(ffxBitfieldExtract(a, 3u, 3u), ffxBitfieldExtract(a, 1u, 2u), 2u)); +} diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/ffx_core_gpu_common_half.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/ffx_core_gpu_common_half.h new file mode 100644 index 000000000..6b071d590 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/ffx_core_gpu_common_half.h @@ -0,0 +1,2981 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if FFX_HALF +#if FFX_HLSL_SM >= 62 +/// A define value for 16bit positive infinity. +/// +/// @ingroup GPUCore +#define FFX_POSITIVE_INFINITY_HALF FFX_TO_FLOAT16((uint16_t)0x7c00u) + +/// A define value for 16bit negative infinity. +/// +/// @ingroup GPUCore +#define FFX_NEGATIVE_INFINITY_HALF FFX_TO_FLOAT16((uint16_t)0xfc00u) +#else +/// A define value for 16bit positive infinity. +/// +/// @ingroup GPUCore +#define FFX_POSITIVE_INFINITY_HALF FFX_TO_FLOAT16(0x7c00u) + +/// A define value for 16bit negative infinity. +/// +/// @ingroup GPUCore +#define FFX_NEGATIVE_INFINITY_HALF FFX_TO_FLOAT16(0xfc00u) +#endif // #if FFX_HLSL_SM>=62 + +/// Compute the min of two values. +/// +/// @param [in] x The first value to compute the min of. +/// @param [in] y The second value to compute the min of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxFloat16 ffxMin(FfxFloat16 x, FfxFloat16 y) +{ + return min(x, y); +} + +/// Compute the min of two values. +/// +/// @param [in] x The first value to compute the min of. +/// @param [in] y The second value to compute the min of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxMin(FfxFloat16x2 x, FfxFloat16x2 y) +{ + return min(x, y); +} + +/// Compute the min of two values. +/// +/// @param [in] x The first value to compute the min of. +/// @param [in] y The second value to compute the min of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxMin(FfxFloat16x3 x, FfxFloat16x3 y) +{ + return min(x, y); +} + +/// Compute the min of two values. +/// +/// @param [in] x The first value to compute the min of. +/// @param [in] y The second value to compute the min of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxFloat16x4 ffxMin(FfxFloat16x4 x, FfxFloat16x4 y) +{ + return min(x, y); +} + +/// Compute the min of two values. +/// +/// @param [in] x The first value to compute the min of. +/// @param [in] y The second value to compute the min of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxInt16 ffxMin(FfxInt16 x, FfxInt16 y) +{ + return min(x, y); +} + +/// Compute the min of two values. +/// +/// @param [in] x The first value to compute the min of. +/// @param [in] y The second value to compute the min of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxInt16x2 ffxMin(FfxInt16x2 x, FfxInt16x2 y) +{ + return min(x, y); +} + +/// Compute the min of two values. +/// +/// @param [in] x The first value to compute the min of. +/// @param [in] y The second value to compute the min of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxInt16x3 ffxMin(FfxInt16x3 x, FfxInt16x3 y) +{ + return min(x, y); +} + +/// Compute the min of two values. +/// +/// @param [in] x The first value to compute the min of. +/// @param [in] y The second value to compute the min of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxInt16x4 ffxMin(FfxInt16x4 x, FfxInt16x4 y) +{ + return min(x, y); +} + +/// Compute the min of two values. +/// +/// @param [in] x The first value to compute the min of. +/// @param [in] y The second value to compute the min of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxUInt16 ffxMin(FfxUInt16 x, FfxUInt16 y) +{ + return min(x, y); +} + +/// Compute the min of two values. +/// +/// @param [in] x The first value to compute the min of. +/// @param [in] y The second value to compute the min of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxUInt16x2 ffxMin(FfxUInt16x2 x, FfxUInt16x2 y) +{ + return min(x, y); +} + +/// Compute the min of two values. +/// +/// @param [in] x The first value to compute the min of. +/// @param [in] y The second value to compute the min of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxUInt16x3 ffxMin(FfxUInt16x3 x, FfxUInt16x3 y) +{ + return min(x, y); +} + +/// Compute the min of two values. +/// +/// @param [in] x The first value to compute the min of. +/// @param [in] y The second value to compute the min of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxUInt16x4 ffxMin(FfxUInt16x4 x, FfxUInt16x4 y) +{ + return min(x, y); +} + +/// Compute the max of two values. +/// +/// @param [in] x The first value to compute the max of. +/// @param [in] y The second value to compute the max of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxFloat16 ffxMax(FfxFloat16 x, FfxFloat16 y) +{ + return max(x, y); +} + +/// Compute the max of two values. +/// +/// @param [in] x The first value to compute the max of. +/// @param [in] y The second value to compute the max of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxMax(FfxFloat16x2 x, FfxFloat16x2 y) +{ + return max(x, y); +} + +/// Compute the max of two values. +/// +/// @param [in] x The first value to compute the max of. +/// @param [in] y The second value to compute the max of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxMax(FfxFloat16x3 x, FfxFloat16x3 y) +{ + return max(x, y); +} + +/// Compute the max of two values. +/// +/// @param [in] x The first value to compute the max of. +/// @param [in] y The second value to compute the max of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxFloat16x4 ffxMax(FfxFloat16x4 x, FfxFloat16x4 y) +{ + return max(x, y); +} + +/// Compute the max of two values. +/// +/// @param [in] x The first value to compute the max of. +/// @param [in] y The second value to compute the max of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxInt16 ffxMax(FfxInt16 x, FfxInt16 y) +{ + return max(x, y); +} + +/// Compute the max of two values. +/// +/// @param [in] x The first value to compute the max of. +/// @param [in] y The second value to compute the max of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxInt16x2 ffxMax(FfxInt16x2 x, FfxInt16x2 y) +{ + return max(x, y); +} + +/// Compute the max of two values. +/// +/// @param [in] x The first value to compute the max of. +/// @param [in] y The second value to compute the max of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxInt16x3 ffxMax(FfxInt16x3 x, FfxInt16x3 y) +{ + return max(x, y); +} + +/// Compute the max of two values. +/// +/// @param [in] x The first value to compute the max of. +/// @param [in] y The second value to compute the max of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxInt16x4 ffxMax(FfxInt16x4 x, FfxInt16x4 y) +{ + return max(x, y); +} + +/// Compute the max of two values. +/// +/// @param [in] x The first value to compute the max of. +/// @param [in] y The second value to compute the max of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxUInt16 ffxMax(FfxUInt16 x, FfxUInt16 y) +{ + return max(x, y); +} + +/// Compute the max of two values. +/// +/// @param [in] x The first value to compute the max of. +/// @param [in] y The second value to compute the max of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxUInt16x2 ffxMax(FfxUInt16x2 x, FfxUInt16x2 y) +{ + return max(x, y); +} + +/// Compute the max of two values. +/// +/// @param [in] x The first value to compute the max of. +/// @param [in] y The second value to compute the max of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxUInt16x3 ffxMax(FfxUInt16x3 x, FfxUInt16x3 y) +{ + return max(x, y); +} + +/// Compute the max of two values. +/// +/// @param [in] x The first value to compute the max of. +/// @param [in] y The second value to compute the max of. +/// +/// @returns +/// The the lowest of two values. +/// +/// @ingroup GPUCore +FfxUInt16x4 ffxMax(FfxUInt16x4 x, FfxUInt16x4 y) +{ + return max(x, y); +} + +/// Compute the value of the first parameter raised to the power of the second. +/// +/// @param [in] x The value to raise to the power y. +/// @param [in] y The power to which to raise x. +/// +/// @returns +/// The value of the first parameter raised to the power of the second. +/// +/// @ingroup GPUCore +FfxFloat16 ffxPow(FfxFloat16 x, FfxFloat16 y) +{ + return pow(x, y); +} + +/// Compute the value of the first parameter raised to the power of the second. +/// +/// @param [in] x The value to raise to the power y. +/// @param [in] y The power to which to raise x. +/// +/// @returns +/// The value of the first parameter raised to the power of the second. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxPow(FfxFloat16x2 x, FfxFloat16x2 y) +{ + return pow(x, y); +} + +/// Compute the value of the first parameter raised to the power of the second. +/// +/// @param [in] x The value to raise to the power y. +/// @param [in] y The power to which to raise x. +/// +/// @returns +/// The value of the first parameter raised to the power of the second. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxPow(FfxFloat16x3 x, FfxFloat16x3 y) +{ + return pow(x, y); +} + +/// Compute the value of the first parameter raised to the power of the second. +/// +/// @param [in] x The value to raise to the power y. +/// @param [in] y The power to which to raise x. +/// +/// @returns +/// The value of the first parameter raised to the power of the second. +/// +/// @ingroup GPUCore +FfxFloat16x4 ffxPow(FfxFloat16x4 x, FfxFloat16x4 y) +{ + return pow(x, y); +} + +/// Compute the square root of a value. +/// +/// @param [in] x The first value to compute the min of. +/// +/// @returns +/// The the square root of x. +/// +/// @ingroup GPUCore +FfxFloat16 ffxSqrt(FfxFloat16 x) +{ + return sqrt(x); +} + +/// Compute the square root of a value. +/// +/// @param [in] x The first value to compute the min of. +/// +/// @returns +/// The the square root of x. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxSqrt(FfxFloat16x2 x) +{ + return sqrt(x); +} + +/// Compute the square root of a value. +/// +/// @param [in] x The first value to compute the min of. +/// +/// @returns +/// The the square root of x. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxSqrt(FfxFloat16x3 x) +{ + return sqrt(x); +} + +/// Compute the square root of a value. +/// +/// @param [in] x The first value to compute the min of. +/// +/// @returns +/// The the square root of x. +/// +/// @ingroup GPUCore +FfxFloat16x4 ffxSqrt(FfxFloat16x4 x) +{ + return sqrt(x); +} + +/// Copy the sign bit from 's' to positive 'd'. +/// +/// @param [in] d The value to copy the sign bit into. +/// @param [in] s The value to copy the sign bit from. +/// +/// @returns +/// The value of d with the sign bit from s. +/// +/// @ingroup GPUCore +FfxFloat16 ffxCopySignBitHalf(FfxFloat16 d, FfxFloat16 s) +{ + return FFX_TO_FLOAT16(FFX_TO_UINT16(d) | (FFX_TO_UINT16(s) & FFX_BROADCAST_UINT16(0x8000u))); +} + +/// Copy the sign bit from 's' to positive 'd'. +/// +/// @param [in] d The value to copy the sign bit into. +/// @param [in] s The value to copy the sign bit from. +/// +/// @returns +/// The value of d with the sign bit from s. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxCopySignBitHalf(FfxFloat16x2 d, FfxFloat16x2 s) +{ + return FFX_TO_FLOAT16X2(FFX_TO_UINT16X2(d) | (FFX_TO_UINT16X2(s) & FFX_BROADCAST_UINT16X2(0x8000u))); +} + +/// Copy the sign bit from 's' to positive 'd'. +/// +/// @param [in] d The value to copy the sign bit into. +/// @param [in] s The value to copy the sign bit from. +/// +/// @returns +/// The value of d with the sign bit from s. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxCopySignBitHalf(FfxFloat16x3 d, FfxFloat16x3 s) +{ + return FFX_TO_FLOAT16X3(FFX_TO_UINT16X3(d) | (FFX_TO_UINT16X3(s) & FFX_BROADCAST_UINT16X3(0x8000u))); +} + +/// Copy the sign bit from 's' to positive 'd'. +/// +/// @param [in] d The value to copy the sign bit into. +/// @param [in] s The value to copy the sign bit from. +/// +/// @returns +/// The value of d with the sign bit from s. +/// +/// @ingroup GPUCore +FfxFloat16x4 ffxCopySignBitHalf(FfxFloat16x4 d, FfxFloat16x4 s) +{ + return FFX_TO_FLOAT16X4(FFX_TO_UINT16X4(d) | (FFX_TO_UINT16X4(s) & FFX_BROADCAST_UINT16X4(0x8000u))); +} + +/// A single operation to return the following: +/// m = NaN := 0 +/// m >= 0 := 0 +/// m < 0 := 1 +/// +/// Uses the following useful floating point logic, +/// saturate(+a*(-INF)==-INF) := 0 +/// saturate( 0*(-INF)== NaN) := 0 +/// saturate(-a*(-INF)==+INF) := 1 +/// +/// This function is useful when creating masks for branch-free logic. +/// +/// @param [in] m The value to test against 0. +/// +/// @returns +/// 1.0 when the value is negative, or 0.0 when the value is 0 or position. +/// +/// @ingroup GPUCore +FfxFloat16 ffxIsSignedHalf(FfxFloat16 m) +{ + return ffxSaturate(m * FFX_BROADCAST_FLOAT16(FFX_NEGATIVE_INFINITY_HALF)); +} + +/// A single operation to return the following: +/// m = NaN := 0 +/// m >= 0 := 0 +/// m < 0 := 1 +/// +/// Uses the following useful floating point logic, +/// saturate(+a*(-INF)==-INF) := 0 +/// saturate( 0*(-INF)== NaN) := 0 +/// saturate(-a*(-INF)==+INF) := 1 +/// +/// This function is useful when creating masks for branch-free logic. +/// +/// @param [in] m The value to test against 0. +/// +/// @returns +/// 1.0 when the value is negative, or 0.0 when the value is 0 or position. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxIsSignedHalf(FfxFloat16x2 m) +{ + return ffxSaturate(m * FFX_BROADCAST_FLOAT16X2(FFX_NEGATIVE_INFINITY_HALF)); +} + +/// A single operation to return the following: +/// m = NaN := 0 +/// m >= 0 := 0 +/// m < 0 := 1 +/// +/// Uses the following useful floating point logic, +/// saturate(+a*(-INF)==-INF) := 0 +/// saturate( 0*(-INF)== NaN) := 0 +/// saturate(-a*(-INF)==+INF) := 1 +/// +/// This function is useful when creating masks for branch-free logic. +/// +/// @param [in] m The value to test against 0. +/// +/// @returns +/// 1.0 when the value is negative, or 0.0 when the value is 0 or position. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxIsSignedHalf(FfxFloat16x3 m) +{ + return ffxSaturate(m * FFX_BROADCAST_FLOAT16X3(FFX_NEGATIVE_INFINITY_HALF)); +} + +/// A single operation to return the following: +/// m = NaN := 0 +/// m >= 0 := 0 +/// m < 0 := 1 +/// +/// Uses the following useful floating point logic, +/// saturate(+a*(-INF)==-INF) := 0 +/// saturate( 0*(-INF)== NaN) := 0 +/// saturate(-a*(-INF)==+INF) := 1 +/// +/// This function is useful when creating masks for branch-free logic. +/// +/// @param [in] m The value to test against 0. +/// +/// @returns +/// 1.0 when the value is negative, or 0.0 when the value is 0 or position. +/// +/// @ingroup GPUCore +FfxFloat16x4 ffxIsSignedHalf(FfxFloat16x4 m) +{ + return ffxSaturate(m * FFX_BROADCAST_FLOAT16X4(FFX_NEGATIVE_INFINITY_HALF)); +} + +/// A single operation to return the following: +/// m = NaN := 1 +/// m > 0 := 0 +/// m <= 0 := 1 +/// +/// This function is useful when creating masks for branch-free logic. +/// +/// @param [in] m The value to test against zero. +/// +/// @returns +/// 1.0 when the value is position, or 0.0 when the value is 0 or negative. +/// +/// @ingroup GPUCore +FfxFloat16 ffxIsGreaterThanZeroHalf(FfxFloat16 m) +{ + return ffxSaturate(m * FFX_BROADCAST_FLOAT16(FFX_POSITIVE_INFINITY_HALF)); +} + +/// A single operation to return the following: +/// m = NaN := 1 +/// m > 0 := 0 +/// m <= 0 := 1 +/// +/// This function is useful when creating masks for branch-free logic. +/// +/// @param [in] m The value to test against zero. +/// +/// @returns +/// 1.0 when the value is position, or 0.0 when the value is 0 or negative. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxIsGreaterThanZeroHalf(FfxFloat16x2 m) +{ + return ffxSaturate(m * FFX_BROADCAST_FLOAT16X2(FFX_POSITIVE_INFINITY_HALF)); +} + +/// A single operation to return the following: +/// m = NaN := 1 +/// m > 0 := 0 +/// m <= 0 := 1 +/// +/// This function is useful when creating masks for branch-free logic. +/// +/// @param [in] m The value to test against zero. +/// +/// @returns +/// 1.0 when the value is position, or 0.0 when the value is 0 or negative. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxIsGreaterThanZeroHalf(FfxFloat16x3 m) +{ + return ffxSaturate(m * FFX_BROADCAST_FLOAT16X3(FFX_POSITIVE_INFINITY_HALF)); +} + +/// A single operation to return the following: +/// m = NaN := 1 +/// m > 0 := 0 +/// m <= 0 := 1 +/// +/// This function is useful when creating masks for branch-free logic. +/// +/// @param [in] m The value to test against zero. +/// +/// @returns +/// 1.0 when the value is position, or 0.0 when the value is 0 or negative. +/// +/// @ingroup GPUCore +FfxFloat16x4 ffxIsGreaterThanZeroHalf(FfxFloat16x4 m) +{ + return ffxSaturate(m * FFX_BROADCAST_FLOAT16X4(FFX_POSITIVE_INFINITY_HALF)); +} + +/// Convert a 16bit floating point value to sortable integer. +/// +/// - If sign bit=0, flip the sign bit (positives). +/// - If sign bit=1, flip all bits (negatives). +/// +/// The function has the side effects that: +/// - Larger integers are more positive values. +/// - Float zero is mapped to center of integers (so clear to integer zero is a nice default for atomic max usage). +/// +/// @param [in] x The floating point value to make sortable. +/// +/// @returns +/// The sortable integer value. +/// +/// @ingroup GPUCore +FfxUInt16 ffxFloatToSortableIntegerHalf(FfxUInt16 x) +{ + return x ^ ((ffxBitShiftRightHalf(x, FFX_BROADCAST_UINT16(15))) | FFX_BROADCAST_UINT16(0x8000)); +} + +/// Convert a sortable integer to a 16bit floating point value. +/// +/// The function has the side effects that: +/// - If sign bit=1, flip the sign bit (positives). +/// - If sign bit=0, flip all bits (negatives). +/// +/// @param [in] x The sortable integer value to make floating point. +/// +/// @returns +/// The floating point value. +/// +/// @ingroup GPUCore +FfxUInt16 ffxSortableIntegerToFloatHalf(FfxUInt16 x) +{ + return x ^ ((~ffxBitShiftRightHalf(x, FFX_BROADCAST_UINT16(15))) | FFX_BROADCAST_UINT16(0x8000)); +} + +/// Convert a pair of 16bit floating point values to a pair of sortable integers. +/// +/// - If sign bit=0, flip the sign bit (positives). +/// - If sign bit=1, flip all bits (negatives). +/// +/// The function has the side effects that: +/// - Larger integers are more positive values. +/// - Float zero is mapped to center of integers (so clear to integer zero is a nice default for atomic max usage). +/// +/// @param [in] x The floating point values to make sortable. +/// +/// @returns +/// The sortable integer values. +/// +/// @ingroup GPUCore +FfxUInt16x2 ffxFloatToSortableIntegerHalf(FfxUInt16x2 x) +{ + return x ^ ((ffxBitShiftRightHalf(x, FFX_BROADCAST_UINT16X2(15))) | FFX_BROADCAST_UINT16X2(0x8000)); +} + +/// Convert a pair of sortable integers to a pair of 16bit floating point values. +/// +/// The function has the side effects that: +/// - If sign bit=1, flip the sign bit (positives). +/// - If sign bit=0, flip all bits (negatives). +/// +/// @param [in] x The sortable integer values to make floating point. +/// +/// @returns +/// The floating point values. +/// +/// @ingroup GPUCore +FfxUInt16x2 ffxSortableIntegerToFloatHalf(FfxUInt16x2 x) +{ + return x ^ ((~ffxBitShiftRightHalf(x, FFX_BROADCAST_UINT16X2(15))) | FFX_BROADCAST_UINT16X2(0x8000)); +} + +/// Packs the bytes from the X and Y components of a FfxUInt32x2 into a single 32-bit integer. +/// +/// The resulting integer will contain bytes in the following order, from most to least significant: +/// [Zero] Y0 [Zero] X0 +/// +/// @param [in] i The integer pair to pack. +/// +/// @returns +/// The packed integer value. +/// +/// @ingroup GPUCore +FfxUInt32 ffxPackBytesZeroY0ZeroX0(FfxUInt32x2 i) +{ + return ((i.x) & 0xffu) | ((i.y << 16) & 0xff0000u); +} + +/// Packs the bytes from the X and Y components of a FfxUInt32x2 into a single 32-bit integer. +/// +/// The resulting integer will contain bytes in the following order, from most to least significant: +/// [Zero] Y1 [Zero] X1 +/// +/// @param [in] i The integer pair to pack. +/// +/// @returns +/// The packed integer value. +/// +/// @ingroup GPUCore +FfxUInt32 ffxPackBytesZeroY1ZeroX1(FfxUInt32x2 i) +{ + return ((i.x >> 8) & 0xffu) | ((i.y << 8) & 0xff0000u); +} + +/// Packs the bytes from the X and Y components of a FfxUInt32x2 into a single 32-bit integer. +/// +/// The resulting integer will contain bytes in the following order, from most to least significant: +/// [Zero] Y2 [Zero] X2 +/// +/// @param [in] i The integer pair to pack. +/// +/// @returns +/// The packed integer value. +/// +/// @ingroup GPUCore +FfxUInt32 ffxPackBytesZeroY2ZeroX2(FfxUInt32x2 i) +{ + return ((i.x >> 16) & 0xffu) | ((i.y) & 0xff0000u); +} + +/// Packs the bytes from the X and Y components of a FfxUInt32x2 into a single 32-bit integer. +/// +/// The resulting integer will contain bytes in the following order, from most to least significant: +/// [Zero] Y3 [Zero] X3 +/// +/// @param [in] i The integer pair to pack. +/// +/// @returns +/// The packed integer value. +/// +/// @ingroup GPUCore +FfxUInt32 ffxPackBytesZeroY3ZeroX3(FfxUInt32x2 i) +{ + return ((i.x >> 24) & 0xffu) | ((i.y >> 8) & 0xff0000u); +} + +/// Packs the bytes from the X and Y components of a FfxUInt32x2 into a single 32-bit integer. +/// +/// The resulting integer will contain bytes in the following order, from most to least significant: +/// Y3 Y2 Y1 X0 +/// +/// @param [in] i The integer pair to pack. +/// +/// @returns +/// The packed integer value. +/// +/// @ingroup GPUCore +FfxUInt32 ffxPackBytesY3Y2Y1X0(FfxUInt32x2 i) +{ + return ((i.x) & 0x000000ffu) | (i.y & 0xffffff00u); +} + +/// Packs the bytes from the X and Y components of a FfxUInt32x2 into a single 32-bit integer. +/// +/// The resulting integer will contain bytes in the following order, from most to least significant: +/// Y3 Y2 Y1 X2 +/// +/// @param [in] i The integer pair to pack. +/// +/// @returns +/// The packed integer value. +/// +/// @ingroup GPUCore +FfxUInt32 ffxPackBytesY3Y2Y1X2(FfxUInt32x2 i) +{ + return ((i.x >> 16) & 0x000000ffu) | (i.y & 0xffffff00u); +} + +/// Packs the bytes from the X and Y components of a FfxUInt32x2 into a single 32-bit integer. +/// +/// The resulting integer will contain bytes in the following order, from most to least significant: +/// Y3 Y2 X0 Y0 +/// +/// @param [in] i The integer pair to pack. +/// +/// @returns +/// The packed integer value. +/// +/// @ingroup GPUCore +FfxUInt32 ffxPackBytesY3Y2X0Y0(FfxUInt32x2 i) +{ + return ((i.x << 8) & 0x0000ff00u) | (i.y & 0xffff00ffu); +} + +/// Packs the bytes from the X and Y components of a FfxUInt32x2 into a single 32-bit integer. +/// +/// The resulting integer will contain bytes in the following order, from most to least significant: +/// Y3 Y2 X2 Y0 +/// +/// @param [in] i The integer pair to pack. +/// +/// @returns +/// The packed integer value. +/// +/// @ingroup GPUCore +FfxUInt32 ffxPackBytesY3Y2X2Y0(FfxUInt32x2 i) +{ + return ((i.x >> 8) & 0x0000ff00u) | (i.y & 0xffff00ffu); +} + +/// Packs the bytes from the X and Y components of a FfxUInt32x2 into a single 32-bit integer. +/// +/// The resulting integer will contain bytes in the following order, from most to least significant: +/// Y3 X0 Y1 Y0 +/// +/// @param [in] i The integer pair to pack. +/// +/// @returns +/// The packed integer value. +/// +/// @ingroup GPUCore +FfxUInt32 ffxPackBytesY3X0Y1Y0(FfxUInt32x2 i) +{ + return ((i.x << 16) & 0x00ff0000u) | (i.y & 0xff00ffffu); +} + +/// Packs the bytes from the X and Y components of a FfxUInt32x2 into a single 32-bit integer. +/// +/// The resulting integer will contain bytes in the following order, from most to least significant: +/// Y3 X2 Y1 Y0 +/// +/// @param [in] i The integer pair to pack. +/// +/// @returns +/// The packed integer value. +/// +/// @ingroup GPUCore +FfxUInt32 ffxPackBytesY3X2Y1Y0(FfxUInt32x2 i) +{ + return ((i.x) & 0x00ff0000u) | (i.y & 0xff00ffffu); +} + +/// Packs the bytes from the X and Y components of a FfxUInt32x2 into a single 32-bit integer. +/// +/// The resulting integer will contain bytes in the following order, from most to least significant: +/// X0 Y2 Y1 Y0 +/// +/// @param [in] i The integer pair to pack. +/// +/// @returns +/// The packed integer value. +/// +/// @ingroup GPUCore +FfxUInt32 ffxPackBytesX0Y2Y1Y0(FfxUInt32x2 i) +{ + return ((i.x << 24) & 0xff000000u) | (i.y & 0x00ffffffu); +} + +/// Packs the bytes from the X and Y components of a FfxUInt32x2 into a single 32-bit integer. +/// +/// The resulting integer will contain bytes in the following order, from most to least significant: +/// X2 Y2 Y1 Y0 +/// +/// @param [in] i The integer pair to pack. +/// +/// @returns +/// The packed integer value. +/// +/// @ingroup GPUCore +FfxUInt32 ffxPackBytesX2Y2Y1Y0(FfxUInt32x2 i) +{ + return ((i.x << 8) & 0xff000000u) | (i.y & 0x00ffffffu); +} + +/// Packs the bytes from the X and Y components of a FfxUInt32x2 into a single 32-bit integer. +/// +/// The resulting integer will contain bytes in the following order, from most to least significant: +/// Y2 X2 Y0 X0 +/// +/// @param [in] i The integer pair to pack. +/// +/// @returns +/// The packed integer value. +/// +/// @ingroup GPUCore +FfxUInt32 ffxPackBytesY2X2Y0X0(FfxUInt32x2 i) +{ + return ((i.x) & 0x00ff00ffu) | ((i.y << 8) & 0xff00ff00u); +} + +/// Packs the bytes from the X and Y components of a FfxUInt32x2 into a single 32-bit integer. +/// +/// The resulting integer will contain bytes in the following order, from most to least significant: +/// Y2 Y0 X2 X0 +/// +/// @param [in] i The integer pair to pack. +/// +/// @returns +/// The packed integer value. +/// +/// @ingroup GPUCore +FfxUInt32 ffxPackBytesY2Y0X2X0(FfxUInt32x2 i) +{ + return (((i.x) & 0xffu) | ((i.x >> 8) & 0xff00u) | ((i.y << 16) & 0xff0000u) | ((i.y << 8) & 0xff000000u)); +} + +/// Takes two Float16x2 values x and y, normalizes them and builds a single Uint16x2 value in the format {{x0,y0},{x1,y1}}. +/// +/// @param [in] x The first float16x2 value to pack. +/// @param [in] y The second float16x2 value to pack. +/// +/// @returns +/// The packed FfxUInt32x2 value. +/// +/// @ingroup GPUCore +FfxUInt16x2 ffxPackX0Y0X1Y1UnsignedToUint16x2(FfxFloat16x2 x, FfxFloat16x2 y) +{ + x *= FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0); + y *= FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0); + return FFX_UINT32_TO_UINT16X2(ffxPackBytesY2X2Y0X0(FfxUInt32x2(FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(x)), FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(y))))); +} + +/// Given a FfxUInt32x2 value d, Float16x2 value i and a resulting FfxUInt32x2 value r, this function packs d.x[0:7] into r.x[0:7], +/// d.y[0:7] into r.y[0:7], i.x[8:15] into r.x[8:15], r.y[8:15] and i.y[0:15] into r.x[16:31], r.y[16:31] using 3 ops. +/// +/// r=ffxPermuteUByte0Float16x2ToUint2(d,i) +/// Where 'k0' is an SGPR with {1.0/32768.0} packed into the lower 16-bits +/// Where 'k1' is an SGPR with 0x???? +/// Where 'k2' is an SGPR with 0x???? +/// V_PK_FMA_F16 i,i,k0.x,0 +/// V_PERM_B32 r.x,i,i,k1 +/// V_PERM_B32 r.y,i,i,k2 +/// +/// @param [in] d The FfxUInt32x2 value to be packed. +/// @param [in] i The FfxFloat16x2 value to be packed. +/// +/// @returns +/// The packed FfxUInt32x2 value. +/// +/// @ingroup GPUCore +FfxUInt32x2 ffxPermuteUByte0Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) +{ + FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0))); + return FfxUInt32x2(ffxPackBytesY3Y2Y1X0(FfxUInt32x2(d.x, b)), ffxPackBytesY3Y2Y1X2(FfxUInt32x2(d.y, b))); +} + +/// Given a FfxUInt32x2 value d, Float16x2 value i and a resulting FfxUInt32x2 value r, this function packs d.x[0:7] into r.x[8:15], +/// d.y[0:7] into r.y[8:15], i.x[0:7] into r.x[0:7], r.y[0:7] and i.y[0:15] into r.x[16:31], r.y[16:31] using 3 ops. +/// +/// r=ffxPermuteUByte1Float16x2ToUint2(d,i) +/// Where 'k0' is an SGPR with {1.0/32768.0} packed into the lower 16-bits +/// Where 'k1' is an SGPR with 0x???? +/// Where 'k2' is an SGPR with 0x???? +/// V_PK_FMA_F16 i,i,k0.x,0 +/// V_PERM_B32 r.x,i,i,k1 +/// V_PERM_B32 r.y,i,i,k2 +/// +/// @param [in] d The FfxUInt32x2 value to be packed. +/// @param [in] i The FfxFloat16x2 value to be packed. +/// +/// @returns +/// The packed FfxUInt32x2 value. +/// +/// @ingroup GPUCore +FfxUInt32x2 ffxPermuteUByte1Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) +{ + FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0))); + return FfxUInt32x2(ffxPackBytesY3Y2X0Y0(FfxUInt32x2(d.x, b)), ffxPackBytesY3Y2X2Y0(FfxUInt32x2(d.y, b))); +} + +/// Given a FfxUInt32x2 value d, Float16x2 value i and a resulting FfxUInt32x2 value r, this function packs d.x[0:7] into r.x[16:23], +/// d.y[0:7] into r.y[16:23], i.x[0:15] into r.x[0:15], r.y[0:15] and i.y[8:15] into r.x[24:31], r.y[24:31] using 3 ops. +/// +/// r=ffxPermuteUByte2Float16x2ToUint2(d,i) +/// Where 'k0' is an SGPR with {1.0/32768.0} packed into the lower 16-bits +/// Where 'k1' is an SGPR with 0x???? +/// Where 'k2' is an SGPR with 0x???? +/// V_PK_FMA_F16 i,i,k0.x,0 +/// V_PERM_B32 r.x,i,i,k1 +/// V_PERM_B32 r.y,i,i,k2 +/// +/// @param [in] d The FfxUInt32x2 value to be packed. +/// @param [in] i The FfxFloat16x2 value to be packed. +/// +/// @returns +/// The packed FfxUInt32x2 value. +/// +/// @ingroup GPUCore +FfxUInt32x2 ffxPermuteUByte2Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) +{ + FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0))); + return FfxUInt32x2(ffxPackBytesY3X0Y1Y0(FfxUInt32x2(d.x, b)), ffxPackBytesY3X2Y1Y0(FfxUInt32x2(d.y, b))); +} + +/// Given a FfxUInt32x2 value d, Float16x2 value i and a resulting FfxUInt32x2 value r, this function packs d.x[0:7] into r.x[24:31], +/// d.y[0:7] into r.y[24:31], i.x[0:15] into r.x[0:15], r.y[0:15] and i.y[0:7] into r.x[16:23], r.y[16:23] using 3 ops. +/// +/// r=ffxPermuteUByte3Float16x2ToUint2(d,i) +/// Where 'k0' is an SGPR with {1.0/32768.0} packed into the lower 16-bits +/// Where 'k1' is an SGPR with 0x???? +/// Where 'k2' is an SGPR with 0x???? +/// V_PK_FMA_F16 i,i,k0.x,0 +/// V_PERM_B32 r.x,i,i,k1 +/// V_PERM_B32 r.y,i,i,k2 +/// +/// @param [in] d The FfxUInt32x2 value to be packed. +/// @param [in] i The FfxFloat16x2 value to be packed. +/// +/// @returns +/// The packed FfxUInt32x2 value. +/// +/// @ingroup GPUCore +FfxUInt32x2 ffxPermuteUByte3Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) +{ + FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0))); + return FfxUInt32x2(ffxPackBytesX0Y2Y1Y0(FfxUInt32x2(d.x, b)), ffxPackBytesX2Y2Y1Y0(FfxUInt32x2(d.y, b))); +} + +/// Given a FfxUInt32x2 value i and a resulting Float16x2 value r, this function packs i.x[0:7] into r.x[0:7] and i.y[0:7] into r.y[0:7] using 2 ops. +/// +/// @param [in] i The FfxUInt32x2 value to be unpacked. +/// +/// @returns +/// The unpacked FfxFloat16x2. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxPermuteUByte0Uint2ToFloat16x2(FfxUInt32x2 i) +{ + return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY0ZeroX0(i))) * FFX_BROADCAST_FLOAT16X2(32768.0); +} + +/// Given a FfxUInt32x2 value i and a resulting Float16x2 value r, this function packs i.x[8:15] into r.x[0:7] and i.y[8:15] into r.y[0:7] using 2 ops. +/// +/// @param [in] i The FfxUInt32x2 value to be unpacked. +/// +/// @returns +/// The unpacked FfxFloat16x2. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxPermuteUByte1Uint2ToFloat16x2(FfxUInt32x2 i) +{ + return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY1ZeroX1(i))) * FFX_BROADCAST_FLOAT16X2(32768.0); +} + +/// Given a FfxUInt32x2 value i and a resulting Float16x2 value r, this function packs i.x[16:23] into r.x[0:7] and i.y[16:23] into r.y[0:7] using 2 ops. +/// +/// @param [in] i The FfxUInt32x2 value to be unpacked. +/// +/// @returns +/// The unpacked FfxFloat16x2. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxPermuteUByte2Uint2ToFloat16x2(FfxUInt32x2 i) +{ + return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY2ZeroX2(i))) * FFX_BROADCAST_FLOAT16X2(32768.0); +} + +/// Given a FfxUInt32x2 value i and a resulting Float16x2 value r, this function packs i.x[24:31] into r.x[0:7] and i.y[24:31] into r.y[0:7] using 2 ops. +/// +/// @param [in] i The FfxUInt32x2 value to be unpacked. +/// +/// @returns +/// The unpacked FfxFloat16x2. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxPermuteUByte3Uint2ToFloat16x2(FfxUInt32x2 i) +{ + return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY3ZeroX3(i))) * FFX_BROADCAST_FLOAT16X2(32768.0); +} + +/// Takes two Float16x2 values x and y, normalizes them and builds a single Uint16x2 value in the format {{x0,y0},{x1,y1}}. +/// +/// @param [in] x The first float16x2 value to pack. +/// @param [in] y The second float16x2 value to pack. +/// +/// @returns +/// The packed FfxUInt32x2 value. +/// +/// @ingroup GPUCore +FfxUInt16x2 ffxPackX0Y0X1Y1SignedToUint16x2(FfxFloat16x2 x, FfxFloat16x2 y) +{ + x = x * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0); + y = y * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0); + return FFX_UINT32_TO_UINT16X2(ffxPackBytesY2X2Y0X0(FfxUInt32x2(FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(x)), FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(y))))); +} + +/// Given a FfxUInt32x2 value d, Float16x2 value i and a resulting FfxUInt32x2 value r, this function packs d.x[0:7] into r.x[0:7], +/// d.y[0:7] into r.y[0:7], i.x[8:15] into r.x[8:15], r.y[8:15] and i.y[0:15] into r.x[16:31], r.y[16:31] using 3 ops. +/// +/// Handles signed byte values. +/// +/// @param [in] d The FfxUInt32x2 value to be packed. +/// @param [in] i The FfxFloat16x2 value to be packed. +/// +/// @returns +/// The packed FfxUInt32x2 value. +/// +/// @ingroup GPUCore +FfxUInt32x2 ffxPermuteSByte0Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) +{ + FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0))); + return FfxUInt32x2(ffxPackBytesY3Y2Y1X0(FfxUInt32x2(d.x, b)), ffxPackBytesY3Y2Y1X2(FfxUInt32x2(d.y, b))); +} + +/// Given a FfxUInt32x2 value d, Float16x2 value i and a resulting FfxUInt32x2 value r, this function packs d.x[0:7] into r.x[8:15], +/// d.y[0:7] into r.y[8:15], i.x[0:7] into r.x[0:7], r.y[0:7] and i.y[0:15] into r.x[16:31], r.y[16:31] using 3 ops. +/// +/// Handles signed byte values. +/// +/// @param [in] d The FfxUInt32x2 value to be packed. +/// @param [in] i The FfxFloat16x2 value to be packed. +/// +/// @returns +/// The packed FfxUInt32x2 value. +/// +/// @ingroup GPUCore +FfxUInt32x2 ffxPermuteSByte1Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) +{ + FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0))); + return FfxUInt32x2(ffxPackBytesY3Y2X0Y0(FfxUInt32x2(d.x, b)), ffxPackBytesY3Y2X2Y0(FfxUInt32x2(d.y, b))); +} + +/// Given a FfxUInt32x2 value d, Float16x2 value i and a resulting FfxUInt32x2 value r, this function packs d.x[0:7] into r.x[16:23], +/// d.y[0:7] into r.y[16:23], i.x[0:15] into r.x[0:15], r.y[0:15] and i.y[8:15] into r.x[24:31], r.y[24:31] using 3 ops. +/// +/// Handles signed byte values. +/// +/// @param [in] d The FfxUInt32x2 value to be packed. +/// @param [in] i The FfxFloat16x2 value to be packed. +/// +/// @returns +/// The packed FfxUInt32x2 value. +/// +/// @ingroup GPUCore +FfxUInt32x2 ffxPermuteSByte2Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) +{ + FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0))); + return FfxUInt32x2(ffxPackBytesY3X0Y1Y0(FfxUInt32x2(d.x, b)), ffxPackBytesY3X2Y1Y0(FfxUInt32x2(d.y, b))); +} + +/// Given a FfxUInt32x2 value d, Float16x2 value i and a resulting FfxUInt32x2 value r, this function packs d.x[0:7] into r.x[24:31], +/// d.y[0:7] into r.y[24:31], i.x[0:15] into r.x[0:15], r.y[0:15] and i.y[0:7] into r.x[16:23], r.y[16:23] using 3 ops. +/// +/// Handles signed byte values. +/// +/// @param [in] d The FfxUInt32x2 value to be packed. +/// @param [in] i The FfxFloat16x2 value to be packed. +/// +/// @returns +/// The packed FfxUInt32x2 value. +/// +/// @ingroup GPUCore +FfxUInt32x2 ffxPermuteSByte3Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) +{ + FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0))); + return FfxUInt32x2(ffxPackBytesX0Y2Y1Y0(FfxUInt32x2(d.x, b)), ffxPackBytesX2Y2Y1Y0(FfxUInt32x2(d.y, b))); +} + +/// Given a FfxUInt32x2 value d, Float16x2 value i and a resulting FfxUInt32x2 value r, this function packs d.x[0:7] into r.x[0:7], +/// d.y[0:7] into r.y[0:7], i.x[8:15] into r.x[8:15], r.y[8:15] and i.y[0:15] into r.x[16:31], r.y[16:31] using 3 ops. +/// +/// Zero-based flips the MSB bit of the byte (making 128 "exact zero" actually zero). +/// This is useful if there is a desire for cleared values to decode as zero. +/// +/// Handles signed byte values. +/// +/// @param [in] d The FfxUInt32x2 value to be packed. +/// @param [in] i The FfxFloat16x2 value to be packed. +/// +/// @returns +/// The packed FfxUInt32x2 value. +/// +/// @ingroup GPUCore +FfxUInt32x2 ffxPermuteZeroBasedSByte0Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) +{ + FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0))) ^ 0x00800080u; + return FfxUInt32x2(ffxPackBytesY3Y2Y1X0(FfxUInt32x2(d.x, b)), ffxPackBytesY3Y2Y1X2(FfxUInt32x2(d.y, b))); +} + +/// Given a FfxUInt32x2 value d, Float16x2 value i and a resulting FfxUInt32x2 value r, this function packs d.x[0:7] into r.x[8:15], +/// d.y[0:7] into r.y[8:15], i.x[0:7] into r.x[0:7], r.y[0:7] and i.y[0:15] into r.x[16:31], r.y[16:31] using 3 ops. +/// +/// Zero-based flips the MSB bit of the byte (making 128 "exact zero" actually zero). +/// This is useful if there is a desire for cleared values to decode as zero. +/// +/// Handles signed byte values. +/// +/// @param [in] d The FfxUInt32x2 value to be packed. +/// @param [in] i The FfxFloat16x2 value to be packed. +/// +/// @returns +/// The packed FfxUInt32x2 value. +/// +/// @ingroup GPUCore +FfxUInt32x2 ffxPermuteZeroBasedSByte1Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) +{ + FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0))) ^ 0x00800080u; + return FfxUInt32x2(ffxPackBytesY3Y2X0Y0(FfxUInt32x2(d.x, b)), ffxPackBytesY3Y2X2Y0(FfxUInt32x2(d.y, b))); +} + +/// Given a FfxUInt32x2 value d, Float16x2 value i and a resulting FfxUInt32x2 value r, this function packs d.x[0:7] into r.x[16:23], +/// d.y[0:7] into r.y[16:23], i.x[0:15] into r.x[0:15], r.y[0:15] and i.y[8:15] into r.x[24:31], r.y[24:31] using 3 ops. +/// +/// Zero-based flips the MSB bit of the byte (making 128 "exact zero" actually zero). +/// This is useful if there is a desire for cleared values to decode as zero. +/// +/// Handles signed byte values. +/// +/// @param [in] d The FfxUInt32x2 value to be packed. +/// @param [in] i The FfxFloat16x2 value to be packed. +/// +/// @returns +/// The packed FfxUInt32x2 value. +/// +/// @ingroup GPUCore +FfxUInt32x2 ffxPermuteZeroBasedSByte2Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) +{ + FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0))) ^ 0x00800080u; + return FfxUInt32x2(ffxPackBytesY3X0Y1Y0(FfxUInt32x2(d.x, b)), ffxPackBytesY3X2Y1Y0(FfxUInt32x2(d.y, b))); +} + +/// Given a FfxUInt32x2 value d, Float16x2 value i and a resulting FfxUInt32x2 value r, this function packs d.x[0:7] into r.x[24:31], +/// d.y[0:7] into r.y[24:31], i.x[0:15] into r.x[0:15], r.y[0:15] and i.y[0:7] into r.x[16:23], r.y[16:23] using 3 ops. +/// +/// Zero-based flips the MSB bit of the byte (making 128 "exact zero" actually zero). +/// This is useful if there is a desire for cleared values to decode as zero. +/// +/// Handles signed byte values. +/// +/// @param [in] d The FfxUInt32x2 value to be packed. +/// @param [in] i The FfxFloat16x2 value to be packed. +/// +/// @returns +/// The packed FfxUInt32x2 value. +/// +/// @ingroup GPUCore +FfxUInt32x2 ffxPermuteZeroBasedSByte3Float16x2ToUint2(FfxUInt32x2 d, FfxFloat16x2 i) +{ + FfxUInt32 b = FFX_UINT16X2_TO_UINT32(FFX_TO_UINT16X2(i * FFX_BROADCAST_FLOAT16X2(1.0 / 32768.0) + FFX_BROADCAST_FLOAT16X2(0.25 / 32768.0))) ^ 0x00800080u; + return FfxUInt32x2(ffxPackBytesX0Y2Y1Y0(FfxUInt32x2(d.x, b)), ffxPackBytesX2Y2Y1Y0(FfxUInt32x2(d.y, b))); +} + +/// Given a FfxUInt32x2 value i and a resulting Float16x2 value r, this function packs i.x[0:7] into r.x[0:7] and i.y[0:7] into r.y[0:7] using 2 ops. +/// +/// Handles signed byte values. +/// +/// @param [in] i The FfxUInt32x2 value to be unpacked. +/// +/// @returns +/// The unpacked FfxFloat16x2. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxPermuteSByte0Uint2ToFloat16x2(FfxUInt32x2 i) +{ + return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY0ZeroX0(i))) * FFX_BROADCAST_FLOAT16X2(32768.0) - FFX_BROADCAST_FLOAT16X2(0.25); +} + +/// Given a FfxUInt32x2 value i and a resulting Float16x2 value r, this function packs i.x[8:15] into r.x[0:7] and i.y[8:15] into r.y[0:7] using 2 ops. +/// +/// Handles signed byte values. +/// +/// @param [in] i The FfxUInt32x2 value to be unpacked. +/// +/// @returns +/// The unpacked FfxFloat16x2. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxPermuteSByte1Uint2ToFloat16x2(FfxUInt32x2 i) +{ + return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY1ZeroX1(i))) * FFX_BROADCAST_FLOAT16X2(32768.0) - FFX_BROADCAST_FLOAT16X2(0.25); +} + +/// Given a FfxUInt32x2 value i and a resulting Float16x2 value r, this function packs i.x[16:23] into r.x[0:7] and i.y[16:23] into r.y[0:7] using 2 ops. +/// +/// Handles signed byte values. +/// +/// @param [in] i The FfxUInt32x2 value to be unpacked. +/// +/// @returns +/// The unpacked FfxFloat16x2. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxPermuteSByte2Uint2ToFloat16x2(FfxUInt32x2 i) +{ + return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY2ZeroX2(i))) * FFX_BROADCAST_FLOAT16X2(32768.0) - FFX_BROADCAST_FLOAT16X2(0.25); +} + +/// Given a FfxUInt32x2 value i and a resulting Float16x2 value r, this function packs i.x[24:31] into r.x[0:7] and i.y[24:31] into r.y[0:7] using 2 ops. +/// +/// Handles signed byte values. +/// +/// @param [in] i The FfxUInt32x2 value to be unpacked. +/// +/// @returns +/// The unpacked FfxFloat16x2. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxPermuteSByte3Uint2ToFloat16x2(FfxUInt32x2 i) +{ + return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY3ZeroX3(i))) * FFX_BROADCAST_FLOAT16X2(32768.0) - FFX_BROADCAST_FLOAT16X2(0.25); +} + +/// Given a FfxUInt32x2 value i and a resulting Float16x2 value r, this function packs i.x[0:7] into r.x[0:7] and i.y[0:7] into r.y[0:7] using 2 ops. +/// +/// Handles signed byte values. +/// +/// @param [in] i The FfxUInt32x2 value to be unpacked. +/// +/// @returns +/// The unpacked FfxFloat16x2. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxPermuteZeroBasedSByte0Uint2ToFloat16x2(FfxUInt32x2 i) +{ + return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY0ZeroX0(i) ^ 0x00800080u)) * FFX_BROADCAST_FLOAT16X2(32768.0) - FFX_BROADCAST_FLOAT16X2(0.25); +} + +/// Given a FfxUInt32x2 value i and a resulting Float16x2 value r, this function packs i.x[8:15] into r.x[0:7] and i.y[8:15] into r.y[0:7] using 2 ops. +/// +/// Handles signed byte values. +/// +/// @param [in] i The FfxUInt32x2 value to be unpacked. +/// +/// @returns +/// The unpacked FfxFloat16x2. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxPermuteZeroBasedSByte1Uint2ToFloat16x2(FfxUInt32x2 i) +{ + return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY1ZeroX1(i) ^ 0x00800080u)) * FFX_BROADCAST_FLOAT16X2(32768.0) - FFX_BROADCAST_FLOAT16X2(0.25); +} + +/// Given a FfxUInt32x2 value i and a resulting Float16x2 value r, this function packs i.x[16:23] into r.x[0:7] and i.y[16:23] into r.y[0:7] using 2 ops. +/// +/// Handles signed byte values. +/// +/// @param [in] i The FfxUInt32x2 value to be unpacked. +/// +/// @returns +/// The unpacked FfxFloat16x2. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxPermuteZeroBasedSByte2Uint2ToFloat16x2(FfxUInt32x2 i) +{ + return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY2ZeroX2(i) ^ 0x00800080u)) * FFX_BROADCAST_FLOAT16X2(32768.0) - FFX_BROADCAST_FLOAT16X2(0.25); +} + +/// Given a FfxUInt32x2 value i and a resulting Float16x2 value r, this function packs i.x[24:31] into r.x[0:7] and i.y[24:31] into r.y[0:7] using 2 ops. +/// +/// Handles signed byte values. +/// +/// @param [in] i The FfxUInt32x2 value to be unpacked. +/// +/// @returns +/// The unpacked FfxFloat16x2. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxPermuteZeroBasedSByte3Uint2ToFloat16x2(FfxUInt32x2 i) +{ + return FFX_TO_FLOAT16X2(FFX_UINT32_TO_UINT16X2(ffxPackBytesZeroY3ZeroX3(i) ^ 0x00800080u)) * FFX_BROADCAST_FLOAT16X2(32768.0) - FFX_BROADCAST_FLOAT16X2(0.25); +} + +/// Calculate a half-precision low-quality approximation for the square root of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] a The value to calculate an approximate to the square root for. +/// +/// @returns +/// An approximation of the square root, estimated to low quality. +/// +/// @ingroup GPUCore +FfxFloat16 ffxApproximateSqrtHalf(FfxFloat16 a) +{ + return FFX_TO_FLOAT16((FFX_TO_UINT16(a) >> FFX_BROADCAST_UINT16(1)) + FFX_BROADCAST_UINT16(0x1de2)); +} + +/// Calculate a half-precision low-quality approximation for the square root of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] a The value to calculate an approximate to the square root for. +/// +/// @returns +/// An approximation of the square root, estimated to low quality. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxApproximateSqrtHalf(FfxFloat16x2 a) +{ + return FFX_TO_FLOAT16X2((FFX_TO_UINT16X2(a) >> FFX_BROADCAST_UINT16X2(1)) + FFX_BROADCAST_UINT16X2(0x1de2)); +} + +/// Calculate a half-precision low-quality approximation for the square root of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] a The value to calculate an approximate to the square root for. +/// +/// @returns +/// An approximation of the square root, estimated to low quality. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxApproximateSqrtHalf(FfxFloat16x3 a) +{ + return FFX_TO_FLOAT16X3((FFX_TO_UINT16X3(a) >> FFX_BROADCAST_UINT16X3(1)) + FFX_BROADCAST_UINT16X3(0x1de2)); +} + +/// Calculate a half-precision low-quality approximation for the reciprocal of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] a The value to calculate an approximate to the reciprocal for. +/// +/// @returns +/// An approximation of the reciprocal, estimated to low quality. +/// +/// @ingroup GPUCore +FfxFloat16 ffxApproximateReciprocalHalf(FfxFloat16 a) +{ + return FFX_TO_FLOAT16(FFX_BROADCAST_UINT16(0x7784) - FFX_TO_UINT16(a)); +} + +/// Calculate a half-precision low-quality approximation for the reciprocal of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] a The value to calculate an approximate to the reciprocal for. +/// +/// @returns +/// An approximation of the reciprocal, estimated to low quality. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxApproximateReciprocalHalf(FfxFloat16x2 a) +{ + return FFX_TO_FLOAT16X2(FFX_BROADCAST_UINT16X2(0x7784) - FFX_TO_UINT16X2(a)); +} + +/// Calculate a half-precision low-quality approximation for the reciprocal of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] a The value to calculate an approximate to the reciprocal for. +/// +/// @returns +/// An approximation of the reciprocal, estimated to low quality. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxApproximateReciprocalHalf(FfxFloat16x3 a) +{ + return FFX_TO_FLOAT16X3(FFX_BROADCAST_UINT16X3(0x7784) - FFX_TO_UINT16X3(a)); +} + +/// Calculate a half-precision low-quality approximation for the reciprocal of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] a The value to calculate an approximate to the reciprocal for. +/// +/// @returns +/// An approximation of the reciprocal, estimated to low quality. +/// +/// @ingroup GPUCore +FfxFloat16x4 ffxApproximateReciprocalHalf(FfxFloat16x4 a) +{ + return FFX_TO_FLOAT16X4(FFX_BROADCAST_UINT16X4(0x7784) - FFX_TO_UINT16X4(a)); +} + +/// Calculate a half-precision medium-quality approximation for the reciprocal of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] a The value to calculate an approximate to the reciprocal for. +/// +/// @returns +/// An approximation of the reciprocal, estimated to medium quality. +/// +/// @ingroup GPUCore +FfxFloat16 ffxApproximateReciprocalMediumHalf(FfxFloat16 a) +{ + FfxFloat16 b = FFX_TO_FLOAT16(FFX_BROADCAST_UINT16(0x778d) - FFX_TO_UINT16(a)); + return b * (-b * a + FFX_BROADCAST_FLOAT16(2.0)); +} + +/// Calculate a half-precision medium-quality approximation for the reciprocal of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] a The value to calculate an approximate to the reciprocal for. +/// +/// @returns +/// An approximation of the reciprocal, estimated to medium quality. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxApproximateReciprocalMediumHalf(FfxFloat16x2 a) +{ + FfxFloat16x2 b = FFX_TO_FLOAT16X2(FFX_BROADCAST_UINT16X2(0x778d) - FFX_TO_UINT16X2(a)); + return b * (-b * a + FFX_BROADCAST_FLOAT16X2(2.0)); +} + +/// Calculate a half-precision medium-quality approximation for the reciprocal of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] a The value to calculate an approximate to the reciprocal for. +/// +/// @returns +/// An approximation of the reciprocal, estimated to medium quality. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxApproximateReciprocalMediumHalf(FfxFloat16x3 a) +{ + FfxFloat16x3 b = FFX_TO_FLOAT16X3(FFX_BROADCAST_UINT16X3(0x778d) - FFX_TO_UINT16X3(a)); + return b * (-b * a + FFX_BROADCAST_FLOAT16X3(2.0)); +} + +/// Calculate a half-precision medium-quality approximation for the reciprocal of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] a The value to calculate an approximate to the reciprocal for. +/// +/// @returns +/// An approximation of the reciprocal, estimated to medium quality. +/// +/// @ingroup GPUCore +FfxFloat16x4 ffxApproximateReciprocalMediumHalf(FfxFloat16x4 a) +{ + FfxFloat16x4 b = FFX_TO_FLOAT16X4(FFX_BROADCAST_UINT16X4(0x778d) - FFX_TO_UINT16X4(a)); + return b * (-b * a + FFX_BROADCAST_FLOAT16X4(2.0)); +} + +/// Calculate a half-precision low-quality approximation for the reciprocal of the square root of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] a The value to calculate an approximate to the reciprocal of the square root for. +/// +/// @returns +/// An approximation of the reciprocal of the square root, estimated to low quality. +/// +/// @ingroup GPUCore +FfxFloat16 ffxApproximateReciprocalSquareRootHalf(FfxFloat16 a) +{ + return FFX_TO_FLOAT16(FFX_BROADCAST_UINT16(0x59a3) - (FFX_TO_UINT16(a) >> FFX_BROADCAST_UINT16(1))); +} + +/// Calculate a half-precision low-quality approximation for the reciprocal of the square root of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] a The value to calculate an approximate to the reciprocal of the square root for. +/// +/// @returns +/// An approximation of the reciprocal of the square root, estimated to low quality. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxApproximateReciprocalSquareRootHalf(FfxFloat16x2 a) +{ + return FFX_TO_FLOAT16X2(FFX_BROADCAST_UINT16X2(0x59a3) - (FFX_TO_UINT16X2(a) >> FFX_BROADCAST_UINT16X2(1))); +} + +/// Calculate a half-precision low-quality approximation for the reciprocal of the square root of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] a The value to calculate an approximate to the reciprocal of the square root for. +/// +/// @returns +/// An approximation of the reciprocal of the square root, estimated to low quality. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxApproximateReciprocalSquareRootHalf(FfxFloat16x3 a) +{ + return FFX_TO_FLOAT16X3(FFX_BROADCAST_UINT16X3(0x59a3) - (FFX_TO_UINT16X3(a) >> FFX_BROADCAST_UINT16X3(1))); +} + +/// Calculate a half-precision low-quality approximation for the reciprocal of the square root of a value. +/// +/// For additional information on the approximation family of functions, you can refer to Michal Drobot's excellent +/// presentation materials: +/// +/// - https://michaldrobot.files.wordpress.com/2014/05/gcn_alu_opt_digitaldragons2014.pdf +/// - https://github.com/michaldrobot/ShaderFastLibs/blob/master/ShaderFastMathLib.h +/// +/// @param [in] a The value to calculate an approximate to the reciprocal of the square root for. +/// +/// @returns +/// An approximation of the reciprocal of the square root, estimated to low quality. +/// +/// @ingroup GPUCore +FfxFloat16x4 ffxApproximateReciprocalSquareRootHalf(FfxFloat16x4 a) +{ + return FFX_TO_FLOAT16X4(FFX_BROADCAST_UINT16X4(0x59a3) - (FFX_TO_UINT16X4(a) >> FFX_BROADCAST_UINT16X4(1))); +} + +/// An approximation of sine. +/// +/// Valid input range is {-1 to 1} representing {0 to 2 pi}, and the output range +/// is {-1/4 to 1/4} representing {-1 to 1}. +/// +/// @param [in] x The value to calculate approximate sine for. +/// +/// @returns +/// The approximate sine of value. +FfxFloat16 ffxParabolicSinHalf(FfxFloat16 x) +{ + return x * abs(x) - x; +} + +/// An approximation of sine. +/// +/// Valid input range is {-1 to 1} representing {0 to 2 pi}, and the output range +/// is {-1/4 to 1/4} representing {-1 to 1}. +/// +/// @param [in] x The value to calculate approximate sine for. +/// +/// @returns +/// The approximate sine of value. +FfxFloat16x2 ffxParabolicSinHalf(FfxFloat16x2 x) +{ + return x * abs(x) - x; +} + +/// An approximation of cosine. +/// +/// Valid input range is {-1 to 1} representing {0 to 2 pi}, and the output range +/// is {-1/4 to 1/4} representing {-1 to 1}. +/// +/// @param [in] x The value to calculate approximate cosine for. +/// +/// @returns +/// The approximate cosine of value. +FfxFloat16 ffxParabolicCosHalf(FfxFloat16 x) +{ + x = ffxFract(x * FFX_BROADCAST_FLOAT16(0.5) + FFX_BROADCAST_FLOAT16(0.75)); + x = x * FFX_BROADCAST_FLOAT16(2.0) - FFX_BROADCAST_FLOAT16(1.0); + return ffxParabolicSinHalf(x); +} + +/// An approximation of cosine. +/// +/// Valid input range is {-1 to 1} representing {0 to 2 pi}, and the output range +/// is {-1/4 to 1/4} representing {-1 to 1}. +/// +/// @param [in] x The value to calculate approximate cosine for. +/// +/// @returns +/// The approximate cosine of value. +FfxFloat16x2 ffxParabolicCosHalf(FfxFloat16x2 x) +{ + x = ffxFract(x * FFX_BROADCAST_FLOAT16X2(0.5) + FFX_BROADCAST_FLOAT16X2(0.75)); + x = x * FFX_BROADCAST_FLOAT16X2(2.0) - FFX_BROADCAST_FLOAT16X2(1.0); + return ffxParabolicSinHalf(x); +} + +/// An approximation of both sine and cosine. +/// +/// Valid input range is {-1 to 1} representing {0 to 2 pi}, and the output range +/// is {-1/4 to 1/4} representing {-1 to 1}. +/// +/// @param [in] x The value to calculate approximate cosine for. +/// +/// @returns +/// A FfxFloat32x2 containing approximations of both sine and cosine of value. +FfxFloat16x2 ffxParabolicSinCosHalf(FfxFloat16 x) +{ + FfxFloat16 y = ffxFract(x * FFX_BROADCAST_FLOAT16(0.5) + FFX_BROADCAST_FLOAT16(0.75)); + y = y * FFX_BROADCAST_FLOAT16(2.0) - FFX_BROADCAST_FLOAT16(1.0); + return ffxParabolicSinHalf(FfxFloat16x2(x, y)); +} + +/// Conditional free logic AND operation using two half-precision values. +/// +/// @param [in] x The first value to be fed into the AND operator. +/// @param [in] y The second value to be fed into the AND operator. +/// +/// @returns +/// Result of the AND operation. +/// +/// @ingroup GPUCore +FfxUInt16 ffxZeroOneAndHalf(FfxUInt16 x, FfxUInt16 y) +{ + return min(x, y); +} + +/// Conditional free logic AND operation using two half-precision values. +/// +/// @param [in] x The first value to be fed into the AND operator. +/// @param [in] y The second value to be fed into the AND operator. +/// +/// @returns +/// Result of the AND operation. +/// +/// @ingroup GPUCore +FfxUInt16x2 ffxZeroOneAndHalf(FfxUInt16x2 x, FfxUInt16x2 y) +{ + return min(x, y); +} + +/// Conditional free logic AND operation using two half-precision values. +/// +/// @param [in] x The first value to be fed into the AND operator. +/// @param [in] y The second value to be fed into the AND operator. +/// +/// @returns +/// Result of the AND operation. +/// +/// @ingroup GPUCore +FfxUInt16x3 ffxZeroOneAndHalf(FfxUInt16x3 x, FfxUInt16x3 y) +{ + return min(x, y); +} + +/// Conditional free logic AND operation using two half-precision values. +/// +/// @param [in] x The first value to be fed into the AND operator. +/// @param [in] y The second value to be fed into the AND operator. +/// +/// @returns +/// Result of the AND operation. +/// +/// @ingroup GPUCore +FfxUInt16x4 ffxZeroOneAndHalf(FfxUInt16x4 x, FfxUInt16x4 y) +{ + return min(x, y); +} + +/// Conditional free logic NOT operation using two half-precision values. +/// +/// @param [in] x The first value to be fed into the NOT operator. +/// @param [in] y The second value to be fed into the NOT operator. +/// +/// @returns +/// Result of the NOT operation. +/// +/// @ingroup GPUCore +FfxUInt16 ffxZeroOneNotHalf(FfxUInt16 x) +{ + return x ^ FFX_BROADCAST_UINT16(1); +} + +/// Conditional free logic NOT operation using two half-precision values. +/// +/// @param [in] x The first value to be fed into the NOT operator. +/// @param [in] y The second value to be fed into the NOT operator. +/// +/// @returns +/// Result of the NOT operation. +/// +/// @ingroup GPUCore +FfxUInt16x2 ffxZeroOneNotHalf(FfxUInt16x2 x) +{ + return x ^ FFX_BROADCAST_UINT16X2(1); +} + +/// Conditional free logic NOT operation using two half-precision values. +/// +/// @param [in] x The first value to be fed into the NOT operator. +/// @param [in] y The second value to be fed into the NOT operator. +/// +/// @returns +/// Result of the NOT operation. +/// +/// @ingroup GPUCore +FfxUInt16x3 ffxZeroOneNotHalf(FfxUInt16x3 x) +{ + return x ^ FFX_BROADCAST_UINT16X3(1); +} + +/// Conditional free logic NOT operation using two half-precision values. +/// +/// @param [in] x The first value to be fed into the NOT operator. +/// @param [in] y The second value to be fed into the NOT operator. +/// +/// @returns +/// Result of the NOT operation. +/// +/// @ingroup GPUCore +FfxUInt16x4 ffxZeroOneNotHalf(FfxUInt16x4 x) +{ + return x ^ FFX_BROADCAST_UINT16X4(1); +} + +/// Conditional free logic OR operation using two half-precision values. +/// +/// @param [in] x The first value to be fed into the OR operator. +/// @param [in] y The second value to be fed into the OR operator. +/// +/// @returns +/// Result of the OR operation. +/// +/// @ingroup GPUCore +FfxUInt16 ffxZeroOneOrHalf(FfxUInt16 x, FfxUInt16 y) +{ + return max(x, y); +} + +/// Conditional free logic OR operation using two half-precision values. +/// +/// @param [in] x The first value to be fed into the OR operator. +/// @param [in] y The second value to be fed into the OR operator. +/// +/// @returns +/// Result of the OR operation. +/// +/// @ingroup GPUCore +FfxUInt16x2 ffxZeroOneOrHalf(FfxUInt16x2 x, FfxUInt16x2 y) +{ + return max(x, y); +} + +/// Conditional free logic OR operation using two half-precision values. +/// +/// @param [in] x The first value to be fed into the OR operator. +/// @param [in] y The second value to be fed into the OR operator. +/// +/// @returns +/// Result of the OR operation. +/// +/// @ingroup GPUCore +FfxUInt16x3 ffxZeroOneOrHalf(FfxUInt16x3 x, FfxUInt16x3 y) +{ + return max(x, y); +} + +/// Conditional free logic OR operation using two half-precision values. +/// +/// @param [in] x The first value to be fed into the OR operator. +/// @param [in] y The second value to be fed into the OR operator. +/// +/// @returns +/// Result of the OR operation. +/// +/// @ingroup GPUCore +FfxUInt16x4 ffxZeroOneOrHalf(FfxUInt16x4 x, FfxUInt16x4 y) +{ + return max(x, y); +} + +/// Convert a half-precision FfxFloat32 value between 0.0f and 1.0f to a half-precision Uint. +/// +/// @param [in] x The value to converted to a Uint. +/// +/// @returns +/// The converted Uint value. +/// +/// @ingroup GPUCore +FfxUInt16 ffxZeroOneFloat16ToUint16(FfxFloat16 x) +{ + return FFX_TO_UINT16(x * FFX_TO_FLOAT16(FFX_TO_UINT16(1))); +} + +/// Convert a half-precision FfxFloat32 value between 0.0f and 1.0f to a half-precision Uint. +/// +/// @param [in] x The value to converted to a Uint. +/// +/// @returns +/// The converted Uint value. +/// +/// @ingroup GPUCore +FfxUInt16x2 ffxZeroOneFloat16x2ToUint16x2(FfxFloat16x2 x) +{ + return FFX_TO_UINT16X2(x * FFX_TO_FLOAT16X2(FfxUInt16x2(1, 1))); +} + +/// Convert a half-precision FfxFloat32 value between 0.0f and 1.0f to a half-precision Uint. +/// +/// @param [in] x The value to converted to a Uint. +/// +/// @returns +/// The converted Uint value. +/// +/// @ingroup GPUCore +FfxUInt16x3 ffxZeroOneFloat16x3ToUint16x3(FfxFloat16x3 x) +{ + return FFX_TO_UINT16X3(x * FFX_TO_FLOAT16X3(FfxUInt16x3(1, 1, 1))); +} + +/// Convert a half-precision FfxFloat32 value between 0.0f and 1.0f to a half-precision Uint. +/// +/// @param [in] x The value to converted to a Uint. +/// +/// @returns +/// The converted Uint value. +/// +/// @ingroup GPUCore +FfxUInt16x4 ffxZeroOneFloat16x4ToUint16x4(FfxFloat16x4 x) +{ + return FFX_TO_UINT16X4(x * FFX_TO_FLOAT16X4(FfxUInt16x4(1, 1, 1, 1))); +} + +/// Convert a half-precision FfxUInt32 value between 0 and 1 to a half-precision FfxFloat32. +/// +/// @param [in] x The value to converted to a half-precision FfxFloat32. +/// +/// @returns +/// The converted half-precision FfxFloat32 value. +/// +/// @ingroup GPUCore +FfxFloat16 ffxZeroOneUint16ToFloat16(FfxUInt16 x) +{ + return FFX_TO_FLOAT16(x * FFX_TO_UINT16(FFX_TO_FLOAT16(1.0))); +} + +/// Convert a half-precision FfxUInt32 value between 0 and 1 to a half-precision FfxFloat32. +/// +/// @param [in] x The value to converted to a half-precision FfxFloat32. +/// +/// @returns +/// The converted half-precision FfxFloat32 value. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxZeroOneUint16x2ToFloat16x2(FfxUInt16x2 x) +{ + return FFX_TO_FLOAT16X2(x * FFX_TO_UINT16X2(FfxUInt16x2(FFX_TO_FLOAT16(1.0), FFX_TO_FLOAT16(1.0)))); +} + +/// Convert a half-precision FfxUInt32 value between 0 and 1 to a half-precision FfxFloat32. +/// +/// @param [in] x The value to converted to a half-precision FfxFloat32. +/// +/// @returns +/// The converted half-precision FfxFloat32 value. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxZeroOneUint16x3ToFloat16x3(FfxUInt16x3 x) +{ + return FFX_TO_FLOAT16X3(x * FFX_TO_UINT16X3(FfxUInt16x3(FFX_TO_FLOAT16(1.0), FFX_TO_FLOAT16(1.0), FFX_TO_FLOAT16(1.0)))); +} + +/// Convert a half-precision FfxUInt32 value between 0 and 1 to a half-precision FfxFloat32. +/// +/// @param [in] x The value to converted to a half-precision FfxFloat32. +/// +/// @returns +/// The converted half-precision FfxFloat32 value. +/// +/// @ingroup GPUCore +FfxFloat16x4 ffxZeroOneUint16x4ToFloat16x4(FfxUInt16x4 x) +{ + return FFX_TO_FLOAT16X4(x * FFX_TO_UINT16X4(FfxUInt16x4(FFX_TO_FLOAT16(1.0), FFX_TO_FLOAT16(1.0), FFX_TO_FLOAT16(1.0), FFX_TO_FLOAT16(1.0)))); +} + +/// Conditional free logic AND operation using two half-precision values. +/// +/// @param [in] x The first value to be fed into the AND operator. +/// @param [in] y The second value to be fed into the AND operator. +/// +/// @returns +/// Result of the AND operation. +/// +/// @ingroup GPUCore +FfxFloat16 ffxZeroOneAndHalf(FfxFloat16 x, FfxFloat16 y) +{ + return min(x, y); +} + +/// Conditional free logic AND operation using two half-precision values. +/// +/// @param [in] x The first value to be fed into the AND operator. +/// @param [in] y The second value to be fed into the AND operator. +/// +/// @returns +/// Result of the AND operation. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxZeroOneAndHalf(FfxFloat16x2 x, FfxFloat16x2 y) +{ + return min(x, y); +} + +/// Conditional free logic AND operation using two half-precision values. +/// +/// @param [in] x The first value to be fed into the AND operator. +/// @param [in] y The second value to be fed into the AND operator. +/// +/// @returns +/// Result of the AND operation. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxZeroOneAndHalf(FfxFloat16x3 x, FfxFloat16x3 y) +{ + return min(x, y); +} + +/// Conditional free logic AND operation using two half-precision values. +/// +/// @param [in] x The first value to be fed into the AND operator. +/// @param [in] y The second value to be fed into the AND operator. +/// +/// @returns +/// Result of the AND operation. +/// +/// @ingroup GPUCore +FfxFloat16x4 ffxZeroOneAndHalf(FfxFloat16x4 x, FfxFloat16x4 y) +{ + return min(x, y); +} + +/// Conditional free logic AND NOT operation using two half-precision values. +/// +/// @param [in] x The first value to be fed into the AND NOT operator. +/// @param [in] y The second value to be fed into the AND NOT operator. +/// +/// @returns +/// Result of the AND NOT operation. +/// +/// @ingroup GPUCore +FfxFloat16 ffxSignedZeroOneAndOrHalf(FfxFloat16 x, FfxFloat16 y) +{ + return (-x) * y + FFX_BROADCAST_FLOAT16(1.0); +} + +/// Conditional free logic AND NOT operation using two half-precision values. +/// +/// @param [in] x The first value to be fed into the AND NOT operator. +/// @param [in] y The second value to be fed into the AND NOT operator. +/// +/// @returns +/// Result of the AND NOT operation. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxSignedZeroOneAndOrHalf(FfxFloat16x2 x, FfxFloat16x2 y) +{ + return (-x) * y + FFX_BROADCAST_FLOAT16X2(1.0); +} + +/// Conditional free logic AND NOT operation using two half-precision values. +/// +/// @param [in] x The first value to be fed into the AND NOT operator. +/// @param [in] y The second value to be fed into the AND NOT operator. +/// +/// @returns +/// Result of the AND NOT operation. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxSignedZeroOneAndOrHalf(FfxFloat16x3 x, FfxFloat16x3 y) +{ + return (-x) * y + FFX_BROADCAST_FLOAT16X3(1.0); +} + +/// Conditional free logic AND NOT operation using two half-precision values. +/// +/// @param [in] x The first value to be fed into the AND NOT operator. +/// @param [in] y The second value to be fed into the AND NOT operator. +/// +/// @returns +/// Result of the AND NOT operation. +/// +/// @ingroup GPUCore +FfxFloat16x4 ffxSignedZeroOneAndOrHalf(FfxFloat16x4 x, FfxFloat16x4 y) +{ + return (-x) * y + FFX_BROADCAST_FLOAT16X4(1.0); +} + +/// Conditional free logic AND operation using two half-precision values followed by +/// a NOT operation using the resulting value and a third half-precision value. +/// +/// @param [in] x The first value to be fed into the AND operator. +/// @param [in] y The second value to be fed into the AND operator. +/// @param [in] z The second value to be fed into the OR operator. +/// +/// @returns +/// Result of the AND OR operation. +/// +/// @ingroup GPUCore +FfxFloat16 ffxZeroOneAndOrHalf(FfxFloat16 x, FfxFloat16 y, FfxFloat16 z) +{ + return ffxSaturate(x * y + z); +} + +/// Conditional free logic AND operation using two half-precision values followed by +/// a NOT operation using the resulting value and a third half-precision value. +/// +/// @param [in] x The first value to be fed into the AND operator. +/// @param [in] y The second value to be fed into the AND operator. +/// @param [in] z The second value to be fed into the OR operator. +/// +/// @returns +/// Result of the AND OR operation. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxZeroOneAndOrHalf(FfxFloat16x2 x, FfxFloat16x2 y, FfxFloat16x2 z) +{ + return ffxSaturate(x * y + z); +} + +/// Conditional free logic AND operation using two half-precision values followed by +/// a NOT operation using the resulting value and a third half-precision value. +/// +/// @param [in] x The first value to be fed into the AND operator. +/// @param [in] y The second value to be fed into the AND operator. +/// @param [in] z The second value to be fed into the OR operator. +/// +/// @returns +/// Result of the AND OR operation. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxZeroOneAndOrHalf(FfxFloat16x3 x, FfxFloat16x3 y, FfxFloat16x3 z) +{ + return ffxSaturate(x * y + z); +} + +/// Conditional free logic AND operation using two half-precision values followed by +/// a NOT operation using the resulting value and a third half-precision value. +/// +/// @param [in] x The first value to be fed into the AND operator. +/// @param [in] y The second value to be fed into the AND operator. +/// @param [in] z The second value to be fed into the OR operator. +/// +/// @returns +/// Result of the AND OR operation. +/// +/// @ingroup GPUCore +FfxFloat16x4 ffxZeroOneAndOrHalf(FfxFloat16x4 x, FfxFloat16x4 y, FfxFloat16x4 z) +{ + return ffxSaturate(x * y + z); +} + +/// Given a half-precision value, returns 1.0 if greater than zero and 0.0 if not. +/// +/// @param [in] x The value to be compared. +/// +/// @returns +/// Result of the greater than zero comparison. +/// +/// @ingroup GPUCore +FfxFloat16 ffxZeroOneIsGreaterThanZeroHalf(FfxFloat16 x) +{ + return ffxSaturate(x * FFX_BROADCAST_FLOAT16(FFX_POSITIVE_INFINITY_HALF)); +} + +/// Given a half-precision value, returns 1.0 if greater than zero and 0.0 if not. +/// +/// @param [in] x The value to be compared. +/// +/// @returns +/// Result of the greater than zero comparison. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxZeroOneIsGreaterThanZeroHalf(FfxFloat16x2 x) +{ + return ffxSaturate(x * FFX_BROADCAST_FLOAT16X2(FFX_POSITIVE_INFINITY_HALF)); +} + +/// Given a half-precision value, returns 1.0 if greater than zero and 0.0 if not. +/// +/// @param [in] x The value to be compared. +/// +/// @returns +/// Result of the greater than zero comparison. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxZeroOneIsGreaterThanZeroHalf(FfxFloat16x3 x) +{ + return ffxSaturate(x * FFX_BROADCAST_FLOAT16X3(FFX_POSITIVE_INFINITY_HALF)); +} + +/// Given a half-precision value, returns 1.0 if greater than zero and 0.0 if not. +/// +/// @param [in] x The value to be compared. +/// +/// @returns +/// Result of the greater than zero comparison. +/// +/// @ingroup GPUCore +FfxFloat16x4 ffxZeroOneIsGreaterThanZeroHalf(FfxFloat16x4 x) +{ + return ffxSaturate(x * FFX_BROADCAST_FLOAT16X4(FFX_POSITIVE_INFINITY_HALF)); +} + +/// Conditional free logic signed NOT operation using two half-precision FfxFloat32 values. +/// +/// @param [in] x The first value to be fed into the AND OR operator. +/// +/// @returns +/// Result of the AND OR operation. +/// +/// @ingroup GPUCore +FfxFloat16 ffxZeroOneNotHalf(FfxFloat16 x) +{ + return FFX_BROADCAST_FLOAT16(1.0) - x; +} + +/// Conditional free logic signed NOT operation using two half-precision FfxFloat32 values. +/// +/// @param [in] x The first value to be fed into the AND OR operator. +/// +/// @returns +/// Result of the AND OR operation. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxZeroOneNotHalf(FfxFloat16x2 x) +{ + return FFX_BROADCAST_FLOAT16X2(1.0) - x; +} + +/// Conditional free logic signed NOT operation using two half-precision FfxFloat32 values. +/// +/// @param [in] x The first value to be fed into the AND OR operator. +/// +/// @returns +/// Result of the AND OR operation. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxZeroOneNotHalf(FfxFloat16x3 x) +{ + return FFX_BROADCAST_FLOAT16X3(1.0) - x; +} + +/// Conditional free logic signed NOT operation using two half-precision FfxFloat32 values. +/// +/// @param [in] x The first value to be fed into the AND OR operator. +/// +/// @returns +/// Result of the AND OR operation. +/// +/// @ingroup GPUCore +FfxFloat16x4 ffxZeroOneNotHalf(FfxFloat16x4 x) +{ + return FFX_BROADCAST_FLOAT16X4(1.0) - x; +} + +/// Conditional free logic OR operation using two half-precision FfxFloat32 values. +/// +/// @param [in] x The first value to be fed into the OR operator. +/// @param [in] y The second value to be fed into the OR operator. +/// +/// @returns +/// Result of the OR operation. +/// +/// @ingroup GPUCore +FfxFloat16 ffxZeroOneOrHalf(FfxFloat16 x, FfxFloat16 y) +{ + return max(x, y); +} + +/// Conditional free logic OR operation using two half-precision FfxFloat32 values. +/// +/// @param [in] x The first value to be fed into the OR operator. +/// @param [in] y The second value to be fed into the OR operator. +/// +/// @returns +/// Result of the OR operation. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxZeroOneOrHalf(FfxFloat16x2 x, FfxFloat16x2 y) +{ + return max(x, y); +} + +/// Conditional free logic OR operation using two half-precision FfxFloat32 values. +/// +/// @param [in] x The first value to be fed into the OR operator. +/// @param [in] y The second value to be fed into the OR operator. +/// +/// @returns +/// Result of the OR operation. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxZeroOneOrHalf(FfxFloat16x3 x, FfxFloat16x3 y) +{ + return max(x, y); +} + +/// Conditional free logic OR operation using two half-precision FfxFloat32 values. +/// +/// @param [in] x The first value to be fed into the OR operator. +/// @param [in] y The second value to be fed into the OR operator. +/// +/// @returns +/// Result of the OR operation. +/// +/// @ingroup GPUCore +FfxFloat16x4 ffxZeroOneOrHalf(FfxFloat16x4 x, FfxFloat16x4 y) +{ + return max(x, y); +} + +/// Choose between two half-precision FfxFloat32 values if the first paramter is greater than zero. +/// +/// @param [in] x The value to compare against zero. +/// @param [in] y The value to return if the comparision is greater than zero. +/// @param [in] z The value to return if the comparision is less than or equal to zero. +/// +/// @returns +/// The selected value. +/// +/// @ingroup GPUCore +FfxFloat16 ffxZeroOneSelectHalf(FfxFloat16 x, FfxFloat16 y, FfxFloat16 z) +{ + FfxFloat16 r = (-x) * z + z; + return x * y + r; +} + +/// Choose between two half-precision FfxFloat32 values if the first paramter is greater than zero. +/// +/// @param [in] x The value to compare against zero. +/// @param [in] y The value to return if the comparision is greater than zero. +/// @param [in] z The value to return if the comparision is less than or equal to zero. +/// +/// @returns +/// The selected value. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxZeroOneSelectHalf(FfxFloat16x2 x, FfxFloat16x2 y, FfxFloat16x2 z) +{ + FfxFloat16x2 r = (-x) * z + z; + return x * y + r; +} + +/// Choose between two half-precision FfxFloat32 values if the first paramter is greater than zero. +/// +/// @param [in] x The value to compare against zero. +/// @param [in] y The value to return if the comparision is greater than zero. +/// @param [in] z The value to return if the comparision is less than or equal to zero. +/// +/// @returns +/// The selected value. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxZeroOneSelectHalf(FfxFloat16x3 x, FfxFloat16x3 y, FfxFloat16x3 z) +{ + FfxFloat16x3 r = (-x) * z + z; + return x * y + r; +} + +/// Choose between two half-precision FfxFloat32 values if the first paramter is greater than zero. +/// +/// @param [in] x The value to compare against zero. +/// @param [in] y The value to return if the comparision is greater than zero. +/// @param [in] z The value to return if the comparision is less than or equal to zero. +/// +/// @returns +/// The selected value. +/// +/// @ingroup GPUCore +FfxFloat16x4 ffxZeroOneSelectHalf(FfxFloat16x4 x, FfxFloat16x4 y, FfxFloat16x4 z) +{ + FfxFloat16x4 r = (-x) * z + z; + return x * y + r; +} + +/// Given a half-precision value, returns 1.0 if less than zero and 0.0 if not. +/// +/// @param [in] x The value to be compared. +/// +/// @returns +/// Result of the sign value. +/// +/// @ingroup GPUCore +FfxFloat16 ffxZeroOneIsSignedHalf(FfxFloat16 x) +{ + return ffxSaturate(x * FFX_BROADCAST_FLOAT16(FFX_NEGATIVE_INFINITY_HALF)); +} + +/// Given a half-precision value, returns 1.0 if less than zero and 0.0 if not. +/// +/// @param [in] x The value to be compared. +/// +/// @returns +/// Result of the sign value. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxZeroOneIsSignedHalf(FfxFloat16x2 x) +{ + return ffxSaturate(x * FFX_BROADCAST_FLOAT16X2(FFX_NEGATIVE_INFINITY_HALF)); +} + +/// Given a half-precision value, returns 1.0 if less than zero and 0.0 if not. +/// +/// @param [in] x The value to be compared. +/// +/// @returns +/// Result of the sign value. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxZeroOneIsSignedHalf(FfxFloat16x3 x) +{ + return ffxSaturate(x * FFX_BROADCAST_FLOAT16X3(FFX_NEGATIVE_INFINITY_HALF)); +} + +/// Given a half-precision value, returns 1.0 if less than zero and 0.0 if not. +/// +/// @param [in] x The value to be compared. +/// +/// @returns +/// Result of the sign value. +/// +/// @ingroup GPUCore +FfxFloat16x4 ffxZeroOneIsSignedHalf(FfxFloat16x4 x) +{ + return ffxSaturate(x * FFX_BROADCAST_FLOAT16X4(FFX_NEGATIVE_INFINITY_HALF)); +} + +/// Compute a Rec.709 color space. +/// +/// Rec.709 is used for some HDTVs. +/// +/// Both Rec.709 and sRGB have a linear segment which as spec'ed would intersect the curved segment 2 times. +/// (a.) For 8-bit sRGB, steps {0 to 10.3} are in the linear region (4% of the encoding range). +/// (b.) For 8-bit 709, steps {0 to 20.7} are in the linear region (8% of the encoding range). +/// +/// @param [in] c The color to convert to Rec. 709. +/// +/// @returns +/// The color in Rec.709 space. +/// +/// @ingroup GPUCore +FfxFloat16 ffxRec709FromLinearHalf(FfxFloat16 c) +{ + FfxFloat16x3 j = FfxFloat16x3(0.018 * 4.5, 4.5, 0.45); + FfxFloat16x2 k = FfxFloat16x2(1.099, -0.099); + return clamp(j.x, c * j.y, pow(c, j.z) * k.x + k.y); +} + +/// Compute a Rec.709 color space. +/// +/// Rec.709 is used for some HDTVs. +/// +/// Both Rec.709 and sRGB have a linear segment which as spec'ed would intersect the curved segment 2 times. +/// (a.) For 8-bit sRGB, steps {0 to 10.3} are in the linear region (4% of the encoding range). +/// (b.) For 8-bit 709, steps {0 to 20.7} are in the linear region (8% of the encoding range). +/// +/// @param [in] c The color to convert to Rec. 709. +/// +/// @returns +/// The color in Rec.709 space. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxRec709FromLinearHalf(FfxFloat16x2 c) +{ + FfxFloat16x3 j = FfxFloat16x3(0.018 * 4.5, 4.5, 0.45); + FfxFloat16x2 k = FfxFloat16x2(1.099, -0.099); + return clamp(j.xx, c * j.yy, pow(c, j.zz) * k.xx + k.yy); +} + +/// Compute a Rec.709 color space. +/// +/// Rec.709 is used for some HDTVs. +/// +/// Both Rec.709 and sRGB have a linear segment which as spec'ed would intersect the curved segment 2 times. +/// (a.) For 8-bit sRGB, steps {0 to 10.3} are in the linear region (4% of the encoding range). +/// (b.) For 8-bit 709, steps {0 to 20.7} are in the linear region (8% of the encoding range). +/// +/// @param [in] c The color to convert to Rec. 709. +/// +/// @returns +/// The color in Rec.709 space. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxRec709FromLinearHalf(FfxFloat16x3 c) +{ + FfxFloat16x3 j = FfxFloat16x3(0.018 * 4.5, 4.5, 0.45); + FfxFloat16x2 k = FfxFloat16x2(1.099, -0.099); + return clamp(j.xxx, c * j.yyy, pow(c, j.zzz) * k.xxx + k.yyy); +} + +/// Compute a gamma value from a linear value. +/// +/// Typically 2.2 for some PC displays, or 2.4-2.5 for CRTs, or 2.2 FreeSync2 native. +/// +/// Note: 'rcpX' is '1/x', where the 'x' is what would be used in ffxLinearFromGammaHalf. +/// +/// @param [in] c The value to convert to gamma space from linear. +/// @param [in] rcpX The reciprocal of power value used for the gamma curve. +/// +/// @returns +/// A value in gamma space. +/// +/// @ingroup GPUCore +FfxFloat16 ffxGammaFromLinearHalf(FfxFloat16 c, FfxFloat16 rcpX) +{ + return pow(c, FFX_BROADCAST_FLOAT16(rcpX)); +} + +/// Compute a gamma value from a linear value. +/// +/// Typically 2.2 for some PC displays, or 2.4-2.5 for CRTs, or 2.2 FreeSync2 native. +/// +/// Note: 'rcpX' is '1/x', where the 'x' is what would be used in ffxLinearFromGammaHalf. +/// +/// @param [in] c The value to convert to gamma space from linear. +/// @param [in] rcpX The reciprocal of power value used for the gamma curve. +/// +/// @returns +/// A value in gamma space. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxGammaFromLinearHalf(FfxFloat16x2 c, FfxFloat16 rcpX) +{ + return pow(c, FFX_BROADCAST_FLOAT16X2(rcpX)); +} + +/// Compute a gamma value from a linear value. +/// +/// Typically 2.2 for some PC displays, or 2.4-2.5 for CRTs, or 2.2 FreeSync2 native. +/// +/// Note: 'rcpX' is '1/x', where the 'x' is what would be used in ffxLinearFromGammaHalf. +/// +/// @param [in] c The value to convert to gamma space from linear. +/// @param [in] rcpX The reciprocal of power value used for the gamma curve. +/// +/// @returns +/// A value in gamma space. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxGammaFromLinearHalf(FfxFloat16x3 c, FfxFloat16 rcpX) +{ + return pow(c, FFX_BROADCAST_FLOAT16X3(rcpX)); +} + +/// Compute an SRGB value from a linear value. +/// +/// @param [in] c The value to convert to SRGB from linear. +/// +/// @returns +/// A value in SRGB space. +/// +/// @ingroup GPUCore +FfxFloat16 ffxSrgbFromLinearHalf(FfxFloat16 c) +{ + FfxFloat16x3 j = FfxFloat16x3(0.0031308 * 12.92, 12.92, 1.0 / 2.4); + FfxFloat16x2 k = FfxFloat16x2(1.055, -0.055); + return clamp(j.x, c * j.y, pow(c, j.z) * k.x + k.y); +} + +/// Compute an SRGB value from a linear value. +/// +/// @param [in] c The value to convert to SRGB from linear. +/// +/// @returns +/// A value in SRGB space. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxSrgbFromLinearHalf(FfxFloat16x2 c) +{ + FfxFloat16x3 j = FfxFloat16x3(0.0031308 * 12.92, 12.92, 1.0 / 2.4); + FfxFloat16x2 k = FfxFloat16x2(1.055, -0.055); + return clamp(j.xx, c * j.yy, pow(c, j.zz) * k.xx + k.yy); +} + +/// Compute an SRGB value from a linear value. +/// +/// @param [in] c The value to convert to SRGB from linear. +/// +/// @returns +/// A value in SRGB space. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxSrgbFromLinearHalf(FfxFloat16x3 c) +{ + FfxFloat16x3 j = FfxFloat16x3(0.0031308 * 12.92, 12.92, 1.0 / 2.4); + FfxFloat16x2 k = FfxFloat16x2(1.055, -0.055); + return clamp(j.xxx, c * j.yyy, pow(c, j.zzz) * k.xxx + k.yyy); +} + +/// Compute the square root of a value. +/// +/// @param [in] c The value to compute the square root for. +/// +/// @returns +/// A square root of the input value. +/// +/// @ingroup GPUCore +FfxFloat16 ffxSquareRootHalf(FfxFloat16 c) +{ + return sqrt(c); +} + +/// Compute the square root of a value. +/// +/// @param [in] c The value to compute the square root for. +/// +/// @returns +/// A square root of the input value. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxSquareRootHalf(FfxFloat16x2 c) +{ + return sqrt(c); +} + +/// Compute the square root of a value. +/// +/// @param [in] c The value to compute the square root for. +/// +/// @returns +/// A square root of the input value. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxSquareRootHalf(FfxFloat16x3 c) +{ + return sqrt(c); +} + +/// Compute the cube root of a value. +/// +/// @param [in] c The value to compute the cube root for. +/// +/// @returns +/// A cube root of the input value. +/// +/// @ingroup GPUCore +FfxFloat16 ffxCubeRootHalf(FfxFloat16 c) +{ + return pow(c, FFX_BROADCAST_FLOAT16(1.0 / 3.0)); +} + +/// Compute the cube root of a value. +/// +/// @param [in] c The value to compute the cube root for. +/// +/// @returns +/// A cube root of the input value. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxCubeRootHalf(FfxFloat16x2 c) +{ + return pow(c, FFX_BROADCAST_FLOAT16X2(1.0 / 3.0)); +} + +/// Compute the cube root of a value. +/// +/// @param [in] c The value to compute the cube root for. +/// +/// @returns +/// A cube root of the input value. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxCubeRootHalf(FfxFloat16x3 c) +{ + return pow(c, FFX_BROADCAST_FLOAT16X3(1.0 / 3.0)); +} + +/// Compute a linear value from a REC.709 value. +/// +/// @param [in] c The value to convert to linear from REC.709. +/// +/// @returns +/// A value in linear space. +/// +/// @ingroup GPUCore +FfxFloat16 ffxLinearFromRec709Half(FfxFloat16 c) +{ + FfxFloat16x3 j = FfxFloat16x3(0.081 / 4.5, 1.0 / 4.5, 1.0 / 0.45); + FfxFloat16x2 k = FfxFloat16x2(1.0 / 1.099, 0.099 / 1.099); + return ffxZeroOneSelectHalf(ffxZeroOneIsSignedHalf(c - j.x), c * j.y, pow(c * k.x + k.y, j.z)); +} + +/// Compute a linear value from a REC.709 value. +/// +/// @param [in] c The value to convert to linear from REC.709. +/// +/// @returns +/// A value in linear space. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxLinearFromRec709Half(FfxFloat16x2 c) +{ + FfxFloat16x3 j = FfxFloat16x3(0.081 / 4.5, 1.0 / 4.5, 1.0 / 0.45); + FfxFloat16x2 k = FfxFloat16x2(1.0 / 1.099, 0.099 / 1.099); + return ffxZeroOneSelectHalf(ffxZeroOneIsSignedHalf(c - j.xx), c * j.yy, pow(c * k.xx + k.yy, j.zz)); +} + +/// Compute a linear value from a REC.709 value. +/// +/// @param [in] c The value to convert to linear from REC.709. +/// +/// @returns +/// A value in linear space. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxLinearFromRec709Half(FfxFloat16x3 c) +{ + FfxFloat16x3 j = FfxFloat16x3(0.081 / 4.5, 1.0 / 4.5, 1.0 / 0.45); + FfxFloat16x2 k = FfxFloat16x2(1.0 / 1.099, 0.099 / 1.099); + return ffxZeroOneSelectHalf(ffxZeroOneIsSignedHalf(c - j.xxx), c * j.yyy, pow(c * k.xxx + k.yyy, j.zzz)); +} + +/// Compute a linear value from a value in a gamma space. +/// +/// Typically 2.2 for some PC displays, or 2.4-2.5 for CRTs, or 2.2 FreeSync2 native. +/// +/// @param [in] c The value to convert to linear in gamma space. +/// @param [in] x The power value used for the gamma curve. +/// +/// @returns +/// A value in linear space. +/// +/// @ingroup GPUCore +FfxFloat16 ffxLinearFromGammaHalf(FfxFloat16 c, FfxFloat16 x) +{ + return pow(c, FFX_BROADCAST_FLOAT16(x)); +} + +/// Compute a linear value from a value in a gamma space. +/// +/// Typically 2.2 for some PC displays, or 2.4-2.5 for CRTs, or 2.2 FreeSync2 native. +/// +/// @param [in] c The value to convert to linear in gamma space. +/// @param [in] x The power value used for the gamma curve. +/// +/// @returns +/// A value in linear space. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxLinearFromGammaHalf(FfxFloat16x2 c, FfxFloat16 x) +{ + return pow(c, FFX_BROADCAST_FLOAT16X2(x)); +} + +/// Compute a linear value from a value in a gamma space. +/// +/// Typically 2.2 for some PC displays, or 2.4-2.5 for CRTs, or 2.2 FreeSync2 native. +/// +/// @param [in] c The value to convert to linear in gamma space. +/// @param [in] x The power value used for the gamma curve. +/// +/// @returns +/// A value in linear space. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxLinearFromGammaHalf(FfxFloat16x3 c, FfxFloat16 x) +{ + return pow(c, FFX_BROADCAST_FLOAT16X3(x)); +} + +/// Compute a linear value from a value in a SRGB space. +/// +/// Typically 2.2 for some PC displays, or 2.4-2.5 for CRTs, or 2.2 FreeSync2 native. +/// +/// @param [in] c The value to convert to linear in SRGB space. +/// +/// @returns +/// A value in linear space. +/// +/// @ingroup GPUCore +FfxFloat16 ffxLinearFromSrgbHalf(FfxFloat16 c) +{ + FfxFloat16x3 j = FfxFloat16x3(0.04045, 1.0 / 12.92, 2.4); + FfxFloat16x2 k = FfxFloat16x2(1.0 / 1.055, 0.055 / 1.055); + return ffxZeroOneSelectHalf(ffxZeroOneIsSignedHalf(c - j.x), c * j.y, pow(c * k.x + k.y, j.z)); +} + +/// Compute a linear value from a value in a SRGB space. +/// +/// Typically 2.2 for some PC displays, or 2.4-2.5 for CRTs, or 2.2 FreeSync2 native. +/// +/// @param [in] c The value to convert to linear in SRGB space. +/// +/// @returns +/// A value in linear space. +/// +/// @ingroup GPUCore +FfxFloat16x2 ffxLinearFromSrgbHalf(FfxFloat16x2 c) +{ + FfxFloat16x3 j = FfxFloat16x3(0.04045, 1.0 / 12.92, 2.4); + FfxFloat16x2 k = FfxFloat16x2(1.0 / 1.055, 0.055 / 1.055); + return ffxZeroOneSelectHalf(ffxZeroOneIsSignedHalf(c - j.xx), c * j.yy, pow(c * k.xx + k.yy, j.zz)); +} + +/// Compute a linear value from a value in a SRGB space. +/// +/// Typically 2.2 for some PC displays, or 2.4-2.5 for CRTs, or 2.2 FreeSync2 native. +/// +/// @param [in] c The value to convert to linear in SRGB space. +/// +/// @returns +/// A value in linear space. +/// +/// @ingroup GPUCore +FfxFloat16x3 ffxLinearFromSrgbHalf(FfxFloat16x3 c) +{ + FfxFloat16x3 j = FfxFloat16x3(0.04045, 1.0 / 12.92, 2.4); + FfxFloat16x2 k = FfxFloat16x2(1.0 / 1.055, 0.055 / 1.055); + return ffxZeroOneSelectHalf(ffxZeroOneIsSignedHalf(c - j.xxx), c * j.yyy, pow(c * k.xxx + k.yyy, j.zzz)); +} + +/// A remapping of 64x1 to 8x8 imposing rotated 2x2 pixel quads in quad linear. +/// +/// Remap illustration: +/// +/// 543210 +/// ~~~~~~ +/// ..xxx. +/// yy...y +/// +/// @param [in] a The input 1D coordinates to remap. +/// +/// @returns +/// The remapped 2D coordinates. +/// +/// @ingroup GPUCore +FfxUInt16x2 ffxRemapForQuadHalf(FfxUInt32 a) +{ + return FfxUInt16x2(ffxBitfieldExtract(a, 1u, 3u), ffxBitfieldInsertMask(ffxBitfieldExtract(a, 3u, 3u), a, 1u)); +} + +/// A helper function performing a remap 64x1 to 8x8 remapping which is necessary for 2D wave reductions. +/// +/// The 64-wide lane indices to 8x8 remapping is performed as follows: +/// +/// 00 01 08 09 10 11 18 19 +/// 02 03 0a 0b 12 13 1a 1b +/// 04 05 0c 0d 14 15 1c 1d +/// 06 07 0e 0f 16 17 1e 1f +/// 20 21 28 29 30 31 38 39 +/// 22 23 2a 2b 32 33 3a 3b +/// 24 25 2c 2d 34 35 3c 3d +/// 26 27 2e 2f 36 37 3e 3f +/// +/// @param [in] a The input 1D coordinate to remap. +/// +/// @returns +/// The remapped 2D coordinates. +/// +/// @ingroup GPUCore +FfxUInt16x2 ffxRemapForWaveReductionHalf(FfxUInt32 a) +{ + return FfxUInt16x2(ffxBitfieldInsertMask(ffxBitfieldExtract(a, 2u, 3u), a, 1u), ffxBitfieldInsertMask(ffxBitfieldExtract(a, 3u, 3u), ffxBitfieldExtract(a, 1u, 2u), 2u)); +} + +#endif // FFX_HALF diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/ffx_core_portability.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/ffx_core_portability.h new file mode 100644 index 000000000..12147b9a7 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/ffx_core_portability.h @@ -0,0 +1,46 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +void ffxOpAAddOneF3(FFX_PARAMETER_OUT FfxFloat32x3 d, FfxFloat32x3 a, FfxFloat32 b) +{ + d = a + ffxBroadcast3(b); +} + +void ffxOpACpyF3(FFX_PARAMETER_OUT FfxFloat32x3 d, FfxFloat32x3 a) +{ + d = a; +} + +void ffxOpAMulF3(FFX_PARAMETER_OUT FfxFloat32x3 d, FfxFloat32x3 a, FfxFloat32x3 b) +{ + d = a * b; +} + +void ffxOpAMulOneF3(FFX_PARAMETER_OUT FfxFloat32x3 d, FfxFloat32x3 a, FfxFloat32 b) +{ + d = a * b; +} + +void ffxOpARcpF3(FFX_PARAMETER_OUT FfxFloat32x3 d, FfxFloat32x3 a) +{ + d = ffxReciprocal(a); +} diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr1/ffx_fsr1.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr1/ffx_fsr1.h new file mode 100644 index 000000000..82ebf21fe --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr1/ffx_fsr1.h @@ -0,0 +1,1252 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +/// @defgroup FfxGPUFsr1 FidelityFX FSR1 +/// FidelityFX Super Resolution 1 GPU documentation +/// +/// @ingroup FfxGPUEffects + +/// Setup required constant values for EASU (works on CPU or GPU). +/// +/// @param [out] con0 +/// @param [out] con1 +/// @param [out] con2 +/// @param [out] con3 +/// @param [in] inputViewportInPixelsX The rendered image resolution being upscaled in X dimension. +/// @param [in] inputViewportInPixelsY The rendered image resolution being upscaled in Y dimension. +/// @param [in] inputSizeInPixelsX The resolution of the resource containing the input image (useful for dynamic resolution) in X dimension. +/// @param [in] inputSizeInPixelsY The resolution of the resource containing the input image (useful for dynamic resolution) in Y dimension. +/// @param [in] outputSizeInPixelsX The display resolution which the input image gets upscaled to in X dimension. +/// @param [in] outputSizeInPixelsY The display resolution which the input image gets upscaled to in Y dimension. +/// +/// @ingroup FfxGPUFsr1 +FFX_STATIC void ffxFsrPopulateEasuConstants( + FFX_PARAMETER_INOUT FfxUInt32x4 con0, + FFX_PARAMETER_INOUT FfxUInt32x4 con1, + FFX_PARAMETER_INOUT FfxUInt32x4 con2, + FFX_PARAMETER_INOUT FfxUInt32x4 con3, + FFX_PARAMETER_IN FfxFloat32 inputViewportInPixelsX, + FFX_PARAMETER_IN FfxFloat32 inputViewportInPixelsY, + FFX_PARAMETER_IN FfxFloat32 inputSizeInPixelsX, + FFX_PARAMETER_IN FfxFloat32 inputSizeInPixelsY, + FFX_PARAMETER_IN FfxFloat32 outputSizeInPixelsX, + FFX_PARAMETER_IN FfxFloat32 outputSizeInPixelsY) +{ + // Output integer position to a pixel position in viewport. + con0[0] = ffxAsUInt32(inputViewportInPixelsX * ffxReciprocal(outputSizeInPixelsX)); + con0[1] = ffxAsUInt32(inputViewportInPixelsY * ffxReciprocal(outputSizeInPixelsY)); + con0[2] = ffxAsUInt32(FfxFloat32(0.5) * inputViewportInPixelsX * ffxReciprocal(outputSizeInPixelsX) - FfxFloat32(0.5)); + con0[3] = ffxAsUInt32(FfxFloat32(0.5) * inputViewportInPixelsY * ffxReciprocal(outputSizeInPixelsY) - FfxFloat32(0.5)); + + // Viewport pixel position to normalized image space. + // This is used to get upper-left of 'F' tap. + con1[0] = ffxAsUInt32(ffxReciprocal(inputSizeInPixelsX)); + con1[1] = ffxAsUInt32(ffxReciprocal(inputSizeInPixelsY)); + + // Centers of gather4, first offset from upper-left of 'F'. + // +---+---+ + // | | | + // +--(0)--+ + // | b | c | + // +---F---+---+---+ + // | e | f | g | h | + // +--(1)--+--(2)--+ + // | i | j | k | l | + // +---+---+---+---+ + // | n | o | + // +--(3)--+ + // | | | + // +---+---+ + con1[2] = ffxAsUInt32(FfxFloat32(1.0) * ffxReciprocal(inputSizeInPixelsX)); + con1[3] = ffxAsUInt32(FfxFloat32(-1.0) * ffxReciprocal(inputSizeInPixelsY)); + + // These are from (0) instead of 'F'. + con2[0] = ffxAsUInt32(FfxFloat32(-1.0) * ffxReciprocal(inputSizeInPixelsX)); + con2[1] = ffxAsUInt32(FfxFloat32(2.0) * ffxReciprocal(inputSizeInPixelsY)); + con2[2] = ffxAsUInt32(FfxFloat32(1.0) * ffxReciprocal(inputSizeInPixelsX)); + con2[3] = ffxAsUInt32(FfxFloat32(2.0) * ffxReciprocal(inputSizeInPixelsY)); + con3[0] = ffxAsUInt32(FfxFloat32(0.0) * ffxReciprocal(inputSizeInPixelsX)); + con3[1] = ffxAsUInt32(FfxFloat32(4.0) * ffxReciprocal(inputSizeInPixelsY)); + con3[2] = con3[3] = 0; +} + +/// Setup required constant values for EASU (works on CPU or GPU). +/// +/// @param [out] con0 +/// @param [out] con1 +/// @param [out] con2 +/// @param [out] con3 +/// @param [in] inputViewportInPixelsX The resolution of the input in the X dimension. +/// @param [in] inputViewportInPixelsY The resolution of the input in the Y dimension. +/// @param [in] inputSizeInPixelsX The input size in pixels in the X dimension. +/// @param [in] inputSizeInPixelsY The input size in pixels in the Y dimension. +/// @param [in] outputSizeInPixelsX The output size in pixels in the X dimension. +/// @param [in] outputSizeInPixelsY The output size in pixels in the Y dimension. +/// @param [in] inputOffsetInPixelsX The input image offset in the X dimension into the resource containing it (useful for dynamic resolution). +/// @param [in] inputOffsetInPixelsY The input image offset in the Y dimension into the resource containing it (useful for dynamic resolution). +/// +/// @ingroup FfxGPUFsr1 +FFX_STATIC void ffxFsrPopulateEasuConstantsOffset( + FFX_PARAMETER_INOUT FfxUInt32x4 con0, + FFX_PARAMETER_INOUT FfxUInt32x4 con1, + FFX_PARAMETER_INOUT FfxUInt32x4 con2, + FFX_PARAMETER_INOUT FfxUInt32x4 con3, + FFX_PARAMETER_IN FfxFloat32 inputViewportInPixelsX, + FFX_PARAMETER_IN FfxFloat32 inputViewportInPixelsY, + FFX_PARAMETER_IN FfxFloat32 inputSizeInPixelsX, + FFX_PARAMETER_IN FfxFloat32 inputSizeInPixelsY, + FFX_PARAMETER_IN FfxFloat32 outputSizeInPixelsX, + FFX_PARAMETER_IN FfxFloat32 outputSizeInPixelsY, + FFX_PARAMETER_IN FfxFloat32 inputOffsetInPixelsX, + FFX_PARAMETER_IN FfxFloat32 inputOffsetInPixelsY) +{ + ffxFsrPopulateEasuConstants( + con0, + con1, + con2, + con3, + inputViewportInPixelsX, + inputViewportInPixelsY, + inputSizeInPixelsX, + inputSizeInPixelsY, + outputSizeInPixelsX, + outputSizeInPixelsY); + + // override + con0[2] = ffxAsUInt32(FfxFloat32(0.5) * inputViewportInPixelsX * ffxReciprocal(outputSizeInPixelsX) - FfxFloat32(0.5) + inputOffsetInPixelsX); + con0[3] = ffxAsUInt32(FfxFloat32(0.5) * inputViewportInPixelsY * ffxReciprocal(outputSizeInPixelsY) - FfxFloat32(0.5) + inputOffsetInPixelsY); +} + +#if defined(FFX_GPU) && defined(FFX_FSR_EASU_FLOAT) +// Input callback prototypes, need to be implemented by calling shader +FfxFloat32x4 FsrEasuRF(FfxFloat32x2 p); +FfxFloat32x4 FsrEasuGF(FfxFloat32x2 p); +FfxFloat32x4 FsrEasuBF(FfxFloat32x2 p); + +// Filtering for a given tap for the scalar. +void fsrEasuTapFloat( + FFX_PARAMETER_INOUT FfxFloat32x3 accumulatedColor, // Accumulated color, with negative lobe. + FFX_PARAMETER_INOUT FfxFloat32 accumulatedWeight, // Accumulated weight. + FFX_PARAMETER_IN FfxFloat32x2 pixelOffset, // Pixel offset from resolve position to tap. + FFX_PARAMETER_IN FfxFloat32x2 gradientDirection, // Gradient direction. + FFX_PARAMETER_IN FfxFloat32x2 length, // Length. + FFX_PARAMETER_IN FfxFloat32 negativeLobeStrength, // Negative lobe strength. + FFX_PARAMETER_IN FfxFloat32 clippingPoint, // Clipping point. + FFX_PARAMETER_IN FfxFloat32x3 color) // Tap color. +{ + // Rotate offset by direction. + FfxFloat32x2 rotatedOffset; + rotatedOffset.x = (pixelOffset.x * (gradientDirection.x)) + (pixelOffset.y * gradientDirection.y); + rotatedOffset.y = (pixelOffset.x * (-gradientDirection.y)) + (pixelOffset.y * gradientDirection.x); + + // Anisotropy. + rotatedOffset *= length; + + // Compute distance^2. + FfxFloat32 distanceSquared = rotatedOffset.x * rotatedOffset.x + rotatedOffset.y * rotatedOffset.y; + + // Limit to the window as at corner, 2 taps can easily be outside. + distanceSquared = ffxMin(distanceSquared, clippingPoint); + + // Approximation of lancos2 without sin() or rcp(), or sqrt() to get x. + // (25/16 * (2/5 * x^2 - 1)^2 - (25/16 - 1)) * (1/4 * x^2 - 1)^2 + // |_______________________________________| |_______________| + // base window + // The general form of the 'base' is, + // (a*(b*x^2-1)^2-(a-1)) + // Where 'a=1/(2*b-b^2)' and 'b' moves around the negative lobe. + FfxFloat32 weightB = FfxFloat32(2.0 / 5.0) * distanceSquared + FfxFloat32(-1.0); + FfxFloat32 weightA = negativeLobeStrength * distanceSquared + FfxFloat32(-1.0); + weightB *= weightB; + weightA *= weightA; + weightB = FfxFloat32(25.0 / 16.0) * weightB + FfxFloat32(-(25.0 / 16.0 - 1.0)); + FfxFloat32 weight = weightB * weightA; + + // Do weighted average. + accumulatedColor += color * weight; + accumulatedWeight += weight; +} + +// Accumulate direction and length. +void fsrEasuSetFloat( + FFX_PARAMETER_INOUT FfxFloat32x2 direction, + FFX_PARAMETER_INOUT FfxFloat32 length, + FFX_PARAMETER_IN FfxFloat32x2 pp, + FFX_PARAMETER_IN FfxBoolean biS, + FFX_PARAMETER_IN FfxBoolean biT, + FFX_PARAMETER_IN FfxBoolean biU, + FFX_PARAMETER_IN FfxBoolean biV, + FFX_PARAMETER_IN FfxFloat32 lA, + FFX_PARAMETER_IN FfxFloat32 lB, + FFX_PARAMETER_IN FfxFloat32 lC, + FFX_PARAMETER_IN FfxFloat32 lD, + FFX_PARAMETER_IN FfxFloat32 lE) +{ + // Compute bilinear weight, branches factor out as predicates are compiler time immediates. + // s t + // u v + FfxFloat32 weight = FfxFloat32(0.0); + if (biS) + weight = (FfxFloat32(1.0) - pp.x) * (FfxFloat32(1.0) - pp.y); + if (biT) + weight = pp.x * (FfxFloat32(1.0) - pp.y); + if (biU) + weight = (FfxFloat32(1.0) - pp.x) * pp.y; + if (biV) + weight = pp.x * pp.y; + + // Direction is the '+' diff. + // a + // b c d + // e + // Then takes magnitude from abs average of both sides of 'c'. + // Length converts gradient reversal to 0, smoothly to non-reversal at 1, shaped, then adding horz and vert terms. + FfxFloat32 dc = lD - lC; + FfxFloat32 cb = lC - lB; + FfxFloat32 lengthX = max(abs(dc), abs(cb)); + lengthX = ffxApproximateReciprocal(lengthX); + FfxFloat32 directionX = lD - lB; + direction.x += directionX * weight; + lengthX = ffxSaturate(abs(directionX) * lengthX); + lengthX *= lengthX; + length += lengthX * weight; + + // Repeat for the y axis. + FfxFloat32 ec = lE - lC; + FfxFloat32 ca = lC - lA; + FfxFloat32 lengthY = max(abs(ec), abs(ca)); + lengthY = ffxApproximateReciprocal(lengthY); + FfxFloat32 directionY = lE - lA; + direction.y += directionY * weight; + lengthY = ffxSaturate(abs(directionY) * lengthY); + lengthY *= lengthY; + length += lengthY * weight; +} + +/// Apply edge-aware spatial upsampling using 32bit floating point precision calculations. +/// +/// @param [out] outPixel The computed color of a pixel. +/// @param [in] integerPosition Integer pixel position within the output. +/// @param [in] con0 The first constant value generated by ffxFsrPopulateEasuConstants. +/// @param [in] con1 The second constant value generated by ffxFsrPopulateEasuConstants. +/// @param [in] con2 The third constant value generated by ffxFsrPopulateEasuConstants. +/// @param [in] con3 The fourth constant value generated by ffxFsrPopulateEasuConstants. +/// +/// @ingroup FSR +void ffxFsrEasuFloat( + FFX_PARAMETER_OUT FfxFloat32x3 pix, + FFX_PARAMETER_IN FfxUInt32x2 ip, + FFX_PARAMETER_IN FfxUInt32x4 con0, + FFX_PARAMETER_IN FfxUInt32x4 con1, + FFX_PARAMETER_IN FfxUInt32x4 con2, + FFX_PARAMETER_IN FfxUInt32x4 con3) +{ + // Get position of 'f'. + FfxFloat32x2 pp = FfxFloat32x2(ip) * ffxAsFloat(con0.xy) + ffxAsFloat(con0.zw); + FfxFloat32x2 fp = floor(pp); + pp -= fp; + + // 12-tap kernel. + // b c + // e f g h + // i j k l + // n o + // Gather 4 ordering. + // a b + // r g + // For packed FP16, need either {rg} or {ab} so using the following setup for gather in all versions, + // a b <- unused (z) + // r g + // a b a b + // r g r g + // a b + // r g <- unused (z) + // Allowing dead-code removal to remove the 'z's. + FfxFloat32x2 p0 = fp * ffxAsFloat(con1.xy) + ffxAsFloat(con1.zw); + + // These are from p0 to avoid pulling two constants on pre-Navi hardware. + FfxFloat32x2 p1 = p0 + ffxAsFloat(con2.xy); + FfxFloat32x2 p2 = p0 + ffxAsFloat(con2.zw); + FfxFloat32x2 p3 = p0 + ffxAsFloat(con3.xy); + FfxFloat32x4 bczzR = FsrEasuRF(p0); + FfxFloat32x4 bczzG = FsrEasuGF(p0); + FfxFloat32x4 bczzB = FsrEasuBF(p0); + FfxFloat32x4 ijfeR = FsrEasuRF(p1); + FfxFloat32x4 ijfeG = FsrEasuGF(p1); + FfxFloat32x4 ijfeB = FsrEasuBF(p1); + FfxFloat32x4 klhgR = FsrEasuRF(p2); + FfxFloat32x4 klhgG = FsrEasuGF(p2); + FfxFloat32x4 klhgB = FsrEasuBF(p2); + FfxFloat32x4 zzonR = FsrEasuRF(p3); + FfxFloat32x4 zzonG = FsrEasuGF(p3); + FfxFloat32x4 zzonB = FsrEasuBF(p3); + + // Simplest multi-channel approximate luma possible (luma times 2, in 2 FMA/MAD). + FfxFloat32x4 bczzL = bczzB * ffxBroadcast4(0.5) + (bczzR * ffxBroadcast4(0.5) + bczzG); + FfxFloat32x4 ijfeL = ijfeB * ffxBroadcast4(0.5) + (ijfeR * ffxBroadcast4(0.5) + ijfeG); + FfxFloat32x4 klhgL = klhgB * ffxBroadcast4(0.5) + (klhgR * ffxBroadcast4(0.5) + klhgG); + FfxFloat32x4 zzonL = zzonB * ffxBroadcast4(0.5) + (zzonR * ffxBroadcast4(0.5) + zzonG); + + // Rename. + FfxFloat32 bL = bczzL.x; + FfxFloat32 cL = bczzL.y; + FfxFloat32 iL = ijfeL.x; + FfxFloat32 jL = ijfeL.y; + FfxFloat32 fL = ijfeL.z; + FfxFloat32 eL = ijfeL.w; + FfxFloat32 kL = klhgL.x; + FfxFloat32 lL = klhgL.y; + FfxFloat32 hL = klhgL.z; + FfxFloat32 gL = klhgL.w; + FfxFloat32 oL = zzonL.z; + FfxFloat32 nL = zzonL.w; + + // Accumulate for bilinear interpolation. + FfxFloat32x2 dir = ffxBroadcast2(0.0); + FfxFloat32 len = FfxFloat32(0.0); + fsrEasuSetFloat(dir, len, pp, FFX_TRUE, FFX_FALSE, FFX_FALSE, FFX_FALSE, bL, eL, fL, gL, jL); + fsrEasuSetFloat(dir, len, pp, FFX_FALSE, FFX_TRUE, FFX_FALSE, FFX_FALSE, cL, fL, gL, hL, kL); + fsrEasuSetFloat(dir, len, pp, FFX_FALSE, FFX_FALSE, FFX_TRUE, FFX_FALSE, fL, iL, jL, kL, nL); + fsrEasuSetFloat(dir, len, pp, FFX_FALSE, FFX_FALSE, FFX_FALSE, FFX_TRUE, gL, jL, kL, lL, oL); + + // Normalize with approximation, and cleanup close to zero. + FfxFloat32x2 dir2 = dir * dir; + FfxFloat32 dirR = dir2.x + dir2.y; + FfxBoolean zro = dirR < FfxFloat32(1.0 / 32768.0); + dirR = ffxApproximateReciprocalSquareRoot(dirR); + dirR = zro ? FfxFloat32(1.0) : dirR; + dir.x = zro ? FfxFloat32(1.0) : dir.x; + dir *= ffxBroadcast2(dirR); + + // Transform from {0 to 2} to {0 to 1} range, and shape with square. + len = len * FfxFloat32(0.5); + len *= len; + + // Stretch kernel {1.0 vert|horz, to sqrt(2.0) on diagonal}. + FfxFloat32 stretch = (dir.x * dir.x + dir.y * dir.y) * ffxApproximateReciprocal(max(abs(dir.x), abs(dir.y))); + + // Anisotropic length after rotation, + // x := 1.0 lerp to 'stretch' on edges + // y := 1.0 lerp to 2x on edges + FfxFloat32x2 len2 = FfxFloat32x2(FfxFloat32(1.0) + (stretch - FfxFloat32(1.0)) * len, FfxFloat32(1.0) + FfxFloat32(-0.5) * len); + + // Based on the amount of 'edge', + // the window shifts from +/-{sqrt(2.0) to slightly beyond 2.0}. + FfxFloat32 lob = FfxFloat32(0.5) + FfxFloat32((1.0 / 4.0 - 0.04) - 0.5) * len; + + // Set distance^2 clipping point to the end of the adjustable window. + FfxFloat32 clp = ffxApproximateReciprocal(lob); + + // Accumulation mixed with min/max of 4 nearest. + // b c + // e f g h + // i j k l + // n o + FfxFloat32x3 min4 = + ffxMin(ffxMin3(FfxFloat32x3(ijfeR.z, ijfeG.z, ijfeB.z), FfxFloat32x3(klhgR.w, klhgG.w, klhgB.w), FfxFloat32x3(ijfeR.y, ijfeG.y, ijfeB.y)), + FfxFloat32x3(klhgR.x, klhgG.x, klhgB.x)); + FfxFloat32x3 max4 = + max(ffxMax3(FfxFloat32x3(ijfeR.z, ijfeG.z, ijfeB.z), FfxFloat32x3(klhgR.w, klhgG.w, klhgB.w), FfxFloat32x3(ijfeR.y, ijfeG.y, ijfeB.y)), FfxFloat32x3(klhgR.x, klhgG.x, klhgB.x)); + + // Accumulation. + FfxFloat32x3 aC = ffxBroadcast3(0.0); + FfxFloat32 aW = FfxFloat32(0.0); + fsrEasuTapFloat(aC, aW, FfxFloat32x2(0.0, -1.0) - pp, dir, len2, lob, clp, FfxFloat32x3(bczzR.x, bczzG.x, bczzB.x)); // b + fsrEasuTapFloat(aC, aW, FfxFloat32x2(1.0, -1.0) - pp, dir, len2, lob, clp, FfxFloat32x3(bczzR.y, bczzG.y, bczzB.y)); // c + fsrEasuTapFloat(aC, aW, FfxFloat32x2(-1.0, 1.0) - pp, dir, len2, lob, clp, FfxFloat32x3(ijfeR.x, ijfeG.x, ijfeB.x)); // i + fsrEasuTapFloat(aC, aW, FfxFloat32x2(0.0, 1.0) - pp, dir, len2, lob, clp, FfxFloat32x3(ijfeR.y, ijfeG.y, ijfeB.y)); // j + fsrEasuTapFloat(aC, aW, FfxFloat32x2(0.0, 0.0) - pp, dir, len2, lob, clp, FfxFloat32x3(ijfeR.z, ijfeG.z, ijfeB.z)); // f + fsrEasuTapFloat(aC, aW, FfxFloat32x2(-1.0, 0.0) - pp, dir, len2, lob, clp, FfxFloat32x3(ijfeR.w, ijfeG.w, ijfeB.w)); // e + fsrEasuTapFloat(aC, aW, FfxFloat32x2(1.0, 1.0) - pp, dir, len2, lob, clp, FfxFloat32x3(klhgR.x, klhgG.x, klhgB.x)); // k + fsrEasuTapFloat(aC, aW, FfxFloat32x2(2.0, 1.0) - pp, dir, len2, lob, clp, FfxFloat32x3(klhgR.y, klhgG.y, klhgB.y)); // l + fsrEasuTapFloat(aC, aW, FfxFloat32x2(2.0, 0.0) - pp, dir, len2, lob, clp, FfxFloat32x3(klhgR.z, klhgG.z, klhgB.z)); // h + fsrEasuTapFloat(aC, aW, FfxFloat32x2(1.0, 0.0) - pp, dir, len2, lob, clp, FfxFloat32x3(klhgR.w, klhgG.w, klhgB.w)); // g + fsrEasuTapFloat(aC, aW, FfxFloat32x2(1.0, 2.0) - pp, dir, len2, lob, clp, FfxFloat32x3(zzonR.z, zzonG.z, zzonB.z)); // o + fsrEasuTapFloat(aC, aW, FfxFloat32x2(0.0, 2.0) - pp, dir, len2, lob, clp, FfxFloat32x3(zzonR.w, zzonG.w, zzonB.w)); // n + + // Normalize and dering. + pix = ffxMin(max4, max(min4, aC * ffxBroadcast3(ffxReciprocal(aW)))); +} +#endif // #if defined(FFX_GPU) && defined(FFX_FSR_EASU_FLOAT) + +#if defined(FFX_GPU) && FFX_HALF == 1 && defined(FFX_FSR_EASU_HALF) +// Input callback prototypes, need to be implemented by calling shader +FfxFloat16x4 FsrEasuRH(FfxFloat32x2 p); +FfxFloat16x4 FsrEasuGH(FfxFloat32x2 p); +FfxFloat16x4 FsrEasuBH(FfxFloat32x2 p); + +// This runs 2 taps in parallel. +void FsrEasuTapH( + FFX_PARAMETER_INOUT FfxFloat16x2 aCR, + FFX_PARAMETER_INOUT FfxFloat16x2 aCG, + FFX_PARAMETER_INOUT FfxFloat16x2 aCB, + FFX_PARAMETER_INOUT FfxFloat16x2 aW, + FFX_PARAMETER_IN FfxFloat16x2 offX, + FFX_PARAMETER_IN FfxFloat16x2 offY, + FFX_PARAMETER_IN FfxFloat16x2 dir, + FFX_PARAMETER_IN FfxFloat16x2 len, + FFX_PARAMETER_IN FfxFloat16 lob, + FFX_PARAMETER_IN FfxFloat16 clp, + FFX_PARAMETER_IN FfxFloat16x2 cR, + FFX_PARAMETER_IN FfxFloat16x2 cG, + FFX_PARAMETER_IN FfxFloat16x2 cB) +{ + FfxFloat16x2 vX, vY; + vX = offX * dir.xx + offY * dir.yy; + vY = offX * (-dir.yy) + offY * dir.xx; + vX *= len.x; + vY *= len.y; + FfxFloat16x2 d2 = vX * vX + vY * vY; + d2 = min(d2, FFX_BROADCAST_FLOAT16X2(clp)); + FfxFloat16x2 wB = FFX_BROADCAST_FLOAT16X2(2.0 / 5.0) * d2 + FFX_BROADCAST_FLOAT16X2(-1.0); + FfxFloat16x2 wA = FFX_BROADCAST_FLOAT16X2(lob) * d2 + FFX_BROADCAST_FLOAT16X2(-1.0); + wB *= wB; + wA *= wA; + wB = FFX_BROADCAST_FLOAT16X2(25.0 / 16.0) * wB + FFX_BROADCAST_FLOAT16X2(-(25.0 / 16.0 - 1.0)); + FfxFloat16x2 w = wB * wA; + aCR += cR * w; + aCG += cG * w; + aCB += cB * w; + aW += w; +} + +// This runs 2 taps in parallel. +void FsrEasuSetH( + FFX_PARAMETER_INOUT FfxFloat16x2 dirPX, + FFX_PARAMETER_INOUT FfxFloat16x2 dirPY, + FFX_PARAMETER_INOUT FfxFloat16x2 lenP, + FFX_PARAMETER_IN FfxFloat16x2 pp, + FFX_PARAMETER_IN FfxBoolean biST, + FFX_PARAMETER_IN FfxBoolean biUV, + FFX_PARAMETER_IN FfxFloat16x2 lA, + FFX_PARAMETER_IN FfxFloat16x2 lB, + FFX_PARAMETER_IN FfxFloat16x2 lC, + FFX_PARAMETER_IN FfxFloat16x2 lD, + FFX_PARAMETER_IN FfxFloat16x2 lE) +{ + FfxFloat16x2 w = FFX_BROADCAST_FLOAT16X2(0.0); + + if (biST) + w = (FfxFloat16x2(1.0, 0.0) + FfxFloat16x2(-pp.x, pp.x)) * FFX_BROADCAST_FLOAT16X2(FFX_BROADCAST_FLOAT16(1.0) - pp.y); + + if (biUV) + w = (FfxFloat16x2(1.0, 0.0) + FfxFloat16x2(-pp.x, pp.x)) * FFX_BROADCAST_FLOAT16X2(pp.y); + + // ABS is not free in the packed FP16 path. + FfxFloat16x2 dc = lD - lC; + FfxFloat16x2 cb = lC - lB; + FfxFloat16x2 lenX = max(abs(dc), abs(cb)); + lenX = ffxReciprocalHalf(lenX); + + FfxFloat16x2 dirX = lD - lB; + dirPX += dirX * w; + lenX = ffxSaturate(abs(dirX) * lenX); + lenX *= lenX; + lenP += lenX * w; + FfxFloat16x2 ec = lE - lC; + FfxFloat16x2 ca = lC - lA; + FfxFloat16x2 lenY = max(abs(ec), abs(ca)); + lenY = ffxReciprocalHalf(lenY); + FfxFloat16x2 dirY = lE - lA; + dirPY += dirY * w; + lenY = ffxSaturate(abs(dirY) * lenY); + lenY *= lenY; + lenP += lenY * w; +} + +void FsrEasuH( + FFX_PARAMETER_OUT FfxFloat16x3 pix, + FFX_PARAMETER_IN FfxUInt32x2 ip, + FFX_PARAMETER_IN FfxUInt32x4 con0, + FFX_PARAMETER_IN FfxUInt32x4 con1, + FFX_PARAMETER_IN FfxUInt32x4 con2, + FFX_PARAMETER_IN FfxUInt32x4 con3) +{ + FfxFloat32x2 pp = FfxFloat32x2(ip) * ffxAsFloat(con0.xy) + ffxAsFloat(con0.zw); + FfxFloat32x2 fp = floor(pp); + pp -= fp; + FfxFloat16x2 ppp = FfxFloat16x2(pp); + + FfxFloat32x2 p0 = fp * ffxAsFloat(con1.xy) + ffxAsFloat(con1.zw); + FfxFloat32x2 p1 = p0 + ffxAsFloat(con2.xy); + FfxFloat32x2 p2 = p0 + ffxAsFloat(con2.zw); + FfxFloat32x2 p3 = p0 + ffxAsFloat(con3.xy); + FfxFloat16x4 bczzR = FsrEasuRH(p0); + FfxFloat16x4 bczzG = FsrEasuGH(p0); + FfxFloat16x4 bczzB = FsrEasuBH(p0); + FfxFloat16x4 ijfeR = FsrEasuRH(p1); + FfxFloat16x4 ijfeG = FsrEasuGH(p1); + FfxFloat16x4 ijfeB = FsrEasuBH(p1); + FfxFloat16x4 klhgR = FsrEasuRH(p2); + FfxFloat16x4 klhgG = FsrEasuGH(p2); + FfxFloat16x4 klhgB = FsrEasuBH(p2); + FfxFloat16x4 zzonR = FsrEasuRH(p3); + FfxFloat16x4 zzonG = FsrEasuGH(p3); + FfxFloat16x4 zzonB = FsrEasuBH(p3); + + FfxFloat16x4 bczzL = bczzB * FFX_BROADCAST_FLOAT16X4(0.5) + (bczzR * FFX_BROADCAST_FLOAT16X4(0.5) + bczzG); + FfxFloat16x4 ijfeL = ijfeB * FFX_BROADCAST_FLOAT16X4(0.5) + (ijfeR * FFX_BROADCAST_FLOAT16X4(0.5) + ijfeG); + FfxFloat16x4 klhgL = klhgB * FFX_BROADCAST_FLOAT16X4(0.5) + (klhgR * FFX_BROADCAST_FLOAT16X4(0.5) + klhgG); + FfxFloat16x4 zzonL = zzonB * FFX_BROADCAST_FLOAT16X4(0.5) + (zzonR * FFX_BROADCAST_FLOAT16X4(0.5) + zzonG); + FfxFloat16 bL = bczzL.x; + FfxFloat16 cL = bczzL.y; + FfxFloat16 iL = ijfeL.x; + FfxFloat16 jL = ijfeL.y; + FfxFloat16 fL = ijfeL.z; + FfxFloat16 eL = ijfeL.w; + FfxFloat16 kL = klhgL.x; + FfxFloat16 lL = klhgL.y; + FfxFloat16 hL = klhgL.z; + FfxFloat16 gL = klhgL.w; + FfxFloat16 oL = zzonL.z; + FfxFloat16 nL = zzonL.w; + + // This part is different, accumulating 2 taps in parallel. + FfxFloat16x2 dirPX = FFX_BROADCAST_FLOAT16X2(0.0); + FfxFloat16x2 dirPY = FFX_BROADCAST_FLOAT16X2(0.0); + FfxFloat16x2 lenP = FFX_BROADCAST_FLOAT16X2(0.0); + FsrEasuSetH(dirPX, + dirPY, + lenP, + ppp, + FfxBoolean(true), + FfxBoolean(false), + FfxFloat16x2(bL, cL), + FfxFloat16x2(eL, fL), + FfxFloat16x2(fL, gL), + FfxFloat16x2(gL, hL), + FfxFloat16x2(jL, kL)); + FsrEasuSetH(dirPX, + dirPY, + lenP, + ppp, + FfxBoolean(false), + FfxBoolean(true), + FfxFloat16x2(fL, gL), + FfxFloat16x2(iL, jL), + FfxFloat16x2(jL, kL), + FfxFloat16x2(kL, lL), + FfxFloat16x2(nL, oL)); + FfxFloat16x2 dir = FfxFloat16x2(dirPX.r + dirPX.g, dirPY.r + dirPY.g); + FfxFloat16 len = lenP.r + lenP.g; + + FfxFloat16x2 dir2 = dir * dir; + FfxFloat16 dirR = dir2.x + dir2.y; + FfxUInt32 zro = FfxUInt32(dirR < FFX_BROADCAST_FLOAT16(1.0 / 32768.0)); + dirR = ffxApproximateReciprocalSquareRootHalf(dirR); + dirR = (zro > 0) ? FFX_BROADCAST_FLOAT16(1.0) : dirR; + dir.x = (zro > 0) ? FFX_BROADCAST_FLOAT16(1.0) : dir.x; + dir *= FFX_BROADCAST_FLOAT16X2(dirR); + len = len * FFX_BROADCAST_FLOAT16(0.5); + len *= len; + FfxFloat16 stretch = (dir.x * dir.x + dir.y * dir.y) * ffxApproximateReciprocalHalf(max(abs(dir.x), abs(dir.y))); + FfxFloat16x2 len2 = + FfxFloat16x2(FFX_BROADCAST_FLOAT16(1.0) + (stretch - FFX_BROADCAST_FLOAT16(1.0)) * len, FFX_BROADCAST_FLOAT16(1.0) + FFX_BROADCAST_FLOAT16(-0.5) * len); + FfxFloat16 lob = FFX_BROADCAST_FLOAT16(0.5) + FFX_BROADCAST_FLOAT16((1.0 / 4.0 - 0.04) - 0.5) * len; + FfxFloat16 clp = ffxApproximateReciprocalHalf(lob); + + // FP16 is different, using packed trick to do min and max in same operation. + FfxFloat16x2 bothR = + max(max(FfxFloat16x2(-ijfeR.z, ijfeR.z), FfxFloat16x2(-klhgR.w, klhgR.w)), max(FfxFloat16x2(-ijfeR.y, ijfeR.y), FfxFloat16x2(-klhgR.x, klhgR.x))); + FfxFloat16x2 bothG = + max(max(FfxFloat16x2(-ijfeG.z, ijfeG.z), FfxFloat16x2(-klhgG.w, klhgG.w)), max(FfxFloat16x2(-ijfeG.y, ijfeG.y), FfxFloat16x2(-klhgG.x, klhgG.x))); + FfxFloat16x2 bothB = + max(max(FfxFloat16x2(-ijfeB.z, ijfeB.z), FfxFloat16x2(-klhgB.w, klhgB.w)), max(FfxFloat16x2(-ijfeB.y, ijfeB.y), FfxFloat16x2(-klhgB.x, klhgB.x))); + + // This part is different for FP16, working pairs of taps at a time. + FfxFloat16x2 pR = FFX_BROADCAST_FLOAT16X2(0.0); + FfxFloat16x2 pG = FFX_BROADCAST_FLOAT16X2(0.0); + FfxFloat16x2 pB = FFX_BROADCAST_FLOAT16X2(0.0); + FfxFloat16x2 pW = FFX_BROADCAST_FLOAT16X2(0.0); + FsrEasuTapH(pR, pG, pB, pW, FfxFloat16x2(0.0, 1.0) - ppp.xx, FfxFloat16x2(-1.0, -1.0) - ppp.yy, dir, len2, lob, clp, bczzR.xy, bczzG.xy, bczzB.xy); + FsrEasuTapH(pR, pG, pB, pW, FfxFloat16x2(-1.0, 0.0) - ppp.xx, FfxFloat16x2(1.0, 1.0) - ppp.yy, dir, len2, lob, clp, ijfeR.xy, ijfeG.xy, ijfeB.xy); + FsrEasuTapH(pR, pG, pB, pW, FfxFloat16x2(0.0, -1.0) - ppp.xx, FfxFloat16x2(0.0, 0.0) - ppp.yy, dir, len2, lob, clp, ijfeR.zw, ijfeG.zw, ijfeB.zw); + FsrEasuTapH(pR, pG, pB, pW, FfxFloat16x2(1.0, 2.0) - ppp.xx, FfxFloat16x2(1.0, 1.0) - ppp.yy, dir, len2, lob, clp, klhgR.xy, klhgG.xy, klhgB.xy); + FsrEasuTapH(pR, pG, pB, pW, FfxFloat16x2(2.0, 1.0) - ppp.xx, FfxFloat16x2(0.0, 0.0) - ppp.yy, dir, len2, lob, clp, klhgR.zw, klhgG.zw, klhgB.zw); + FsrEasuTapH(pR, pG, pB, pW, FfxFloat16x2(1.0, 0.0) - ppp.xx, FfxFloat16x2(2.0, 2.0) - ppp.yy, dir, len2, lob, clp, zzonR.zw, zzonG.zw, zzonB.zw); + FfxFloat16x3 aC = FfxFloat16x3(pR.x + pR.y, pG.x + pG.y, pB.x + pB.y); + FfxFloat16 aW = pW.x + pW.y; + + // Slightly different for FP16 version due to combined min and max. + pix = min(FfxFloat16x3(bothR.y, bothG.y, bothB.y), max(-FfxFloat16x3(bothR.x, bothG.x, bothB.x), aC * FFX_BROADCAST_FLOAT16X3(ffxReciprocalHalf(aW)))); +} +#endif // #if defined(FFX_GPU) && defined(FFX_HALF) && defined(FFX_FSR_EASU_HALF) + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//_____________________________________________________________/\_______________________________________________________________ +//============================================================================================================================== +// +// FSR - [RCAS] ROBUST CONTRAST ADAPTIVE SHARPENING +// +//------------------------------------------------------------------------------------------------------------------------------ +// CAS uses a simplified mechanism to convert local contrast into a variable amount of sharpness. +// RCAS uses a more exact mechanism, solving for the maximum local sharpness possible before clipping. +// RCAS also has a built in process to limit sharpening of what it detects as possible noise. +// RCAS sharper does not support scaling, as it should be applied after EASU scaling. +// Pass EASU output straight into RCAS, no color conversions necessary. +//------------------------------------------------------------------------------------------------------------------------------ +// RCAS is based on the following logic. +// RCAS uses a 5 tap filter in a cross pattern (same as CAS), +// w n +// w 1 w for taps w m e +// w s +// Where 'w' is the negative lobe weight. +// output = (w*(n+e+w+s)+m)/(4*w+1) +// RCAS solves for 'w' by seeing where the signal might clip out of the {0 to 1} input range, +// 0 == (w*(n+e+w+s)+m)/(4*w+1) -> w = -m/(n+e+w+s) +// 1 == (w*(n+e+w+s)+m)/(4*w+1) -> w = (1-m)/(n+e+w+s-4*1) +// Then chooses the 'w' which results in no clipping, limits 'w', and multiplies by the 'sharp' amount. +// This solution above has issues with MSAA input as the steps along the gradient cause edge detection issues. +// So RCAS uses 4x the maximum and 4x the minimum (depending on equation)in place of the individual taps. +// As well as switching from 'm' to either the minimum or maximum (depending on side), to help in energy conservation. +// This stabilizes RCAS. +// RCAS does a simple highpass which is normalized against the local contrast then shaped, +// 0.25 +// 0.25 -1 0.25 +// 0.25 +// This is used as a noise detection filter, to reduce the effect of RCAS on grain, and focus on real edges. +// +// GLSL example for the required callbacks : +// +// FfxFloat16x4 FsrRcasLoadH(FfxInt16x2 p){return FfxFloat16x4(imageLoad(imgSrc,FfxInt32x2(p)));} +// void FsrRcasInputH(inout FfxFloat16 r,inout FfxFloat16 g,inout FfxFloat16 b) +// { +// //do any simple input color conversions here or leave empty if none needed +// } +// +// FsrRcasCon need to be called from the CPU or GPU to set up constants. +// Including a GPU example here, the 'con' value would be stored out to a constant buffer. +// +// FfxUInt32x4 con; +// FsrRcasCon(con, +// 0.0); // The scale is {0.0 := maximum sharpness, to N>0, where N is the number of stops (halving) of the reduction of sharpness}. +// --------------- +// RCAS sharpening supports a CAS-like pass-through alpha via, +// #define FSR_RCAS_PASSTHROUGH_ALPHA 1 +// RCAS also supports a define to enable a more expensive path to avoid some sharpening of noise. +// Would suggest it is better to apply film grain after RCAS sharpening (and after scaling) instead of using this define, +// #define FSR_RCAS_DENOISE 1 +//============================================================================================================================== +// This is set at the limit of providing unnatural results for sharpening. +#define FSR_RCAS_LIMIT (0.25-(1.0/16.0)) +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//_____________________________________________________________/\_______________________________________________________________ +//============================================================================================================================== +// CONSTANT SETUP +//============================================================================================================================== +// Call to setup required constant values (works on CPU or GPU). + FFX_STATIC void FsrRcasCon(FfxUInt32x4 con, + // The scale is {0.0 := maximum, to N>0, where N is the number of stops (halving) of the reduction of sharpness}. + FfxFloat32 sharpness) + { + // Transform from stops to linear value. + sharpness = exp2(-sharpness); + FfxFloat32x2 hSharp = {sharpness, sharpness}; + con[0] = ffxAsUInt32(sharpness); + con[1] = ffxPackHalf2x16(hSharp); + con[2] = 0; + con[3] = 0; + } + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//_____________________________________________________________/\_______________________________________________________________ +//============================================================================================================================== +// NON-PACKED 32-BIT VERSION +//============================================================================================================================== +#if defined(FFX_GPU)&&defined(FSR_RCAS_F) + // Input callback prototypes that need to be implemented by calling shader + FfxFloat32x4 FsrRcasLoadF(FfxInt32x2 p); + void FsrRcasInputF(inout FfxFloat32 r,inout FfxFloat32 g,inout FfxFloat32 b); +//------------------------------------------------------------------------------------------------------------------------------ + void FsrRcasF(out FfxFloat32 pixR, // Output values, non-vector so port between RcasFilter() and RcasFilterH() is easy. + out FfxFloat32 pixG, + out FfxFloat32 pixB, +#ifdef FSR_RCAS_PASSTHROUGH_ALPHA + out FfxFloat32 pixA, +#endif + FfxUInt32x2 ip, // Integer pixel position in output. + FfxUInt32x4 con) + { // Constant generated by RcasSetup(). + // Algorithm uses minimal 3x3 pixel neighborhood. + // b + // d e f + // h + FfxInt32x2 sp = FfxInt32x2(ip); + FfxFloat32x3 b = FsrRcasLoadF(sp + FfxInt32x2(0, -1)).rgb; + FfxFloat32x3 d = FsrRcasLoadF(sp + FfxInt32x2(-1, 0)).rgb; +#ifdef FSR_RCAS_PASSTHROUGH_ALPHA + FfxFloat32x4 ee = FsrRcasLoadF(sp); + FfxFloat32x3 e = ee.rgb; + pixA = ee.a; +#else + FfxFloat32x3 e = FsrRcasLoadF(sp).rgb; +#endif + FfxFloat32x3 f = FsrRcasLoadF(sp + FfxInt32x2(1, 0)).rgb; + FfxFloat32x3 h = FsrRcasLoadF(sp + FfxInt32x2(0, 1)).rgb; + // Rename (32-bit) or regroup (16-bit). + FfxFloat32 bR = b.r; + FfxFloat32 bG = b.g; + FfxFloat32 bB = b.b; + FfxFloat32 dR = d.r; + FfxFloat32 dG = d.g; + FfxFloat32 dB = d.b; + FfxFloat32 eR = e.r; + FfxFloat32 eG = e.g; + FfxFloat32 eB = e.b; + FfxFloat32 fR = f.r; + FfxFloat32 fG = f.g; + FfxFloat32 fB = f.b; + FfxFloat32 hR = h.r; + FfxFloat32 hG = h.g; + FfxFloat32 hB = h.b; + // Run optional input transform. + FsrRcasInputF(bR, bG, bB); + FsrRcasInputF(dR, dG, dB); + FsrRcasInputF(eR, eG, eB); + FsrRcasInputF(fR, fG, fB); + FsrRcasInputF(hR, hG, hB); + // Luma times 2. + FfxFloat32 bL = bB * FfxFloat32(0.5) + (bR * FfxFloat32(0.5) + bG); + FfxFloat32 dL = dB * FfxFloat32(0.5) + (dR * FfxFloat32(0.5) + dG); + FfxFloat32 eL = eB * FfxFloat32(0.5) + (eR * FfxFloat32(0.5) + eG); + FfxFloat32 fL = fB * FfxFloat32(0.5) + (fR * FfxFloat32(0.5) + fG); + FfxFloat32 hL = hB * FfxFloat32(0.5) + (hR * FfxFloat32(0.5) + hG); + // Noise detection. + FfxFloat32 nz = FfxFloat32(0.25) * bL + FfxFloat32(0.25) * dL + FfxFloat32(0.25) * fL + FfxFloat32(0.25) * hL - eL; + nz = ffxSaturate(abs(nz) * ffxApproximateReciprocalMedium(ffxMax3(ffxMax3(bL, dL, eL), fL, hL) - ffxMin3(ffxMin3(bL, dL, eL), fL, hL))); + nz = FfxFloat32(-0.5) * nz + FfxFloat32(1.0); + // Min and max of ring. + FfxFloat32 mn4R = ffxMin(ffxMin3(bR, dR, fR), hR); + FfxFloat32 mn4G = ffxMin(ffxMin3(bG, dG, fG), hG); + FfxFloat32 mn4B = ffxMin(ffxMin3(bB, dB, fB), hB); + FfxFloat32 mx4R = max(ffxMax3(bR, dR, fR), hR); + FfxFloat32 mx4G = max(ffxMax3(bG, dG, fG), hG); + FfxFloat32 mx4B = max(ffxMax3(bB, dB, fB), hB); + // Immediate constants for peak range. + FfxFloat32x2 peakC = FfxFloat32x2(1.0, -1.0 * 4.0); + // Limiters, these need to be high precision RCPs. + FfxFloat32 hitMinR = mn4R * ffxReciprocal(FfxFloat32(4.0) * mx4R); + FfxFloat32 hitMinG = mn4G * ffxReciprocal(FfxFloat32(4.0) * mx4G); + FfxFloat32 hitMinB = mn4B * ffxReciprocal(FfxFloat32(4.0) * mx4B); + FfxFloat32 hitMaxR = (peakC.x - mx4R) * ffxReciprocal(FfxFloat32(4.0) * mn4R + peakC.y); + FfxFloat32 hitMaxG = (peakC.x - mx4G) * ffxReciprocal(FfxFloat32(4.0) * mn4G + peakC.y); + FfxFloat32 hitMaxB = (peakC.x - mx4B) * ffxReciprocal(FfxFloat32(4.0) * mn4B + peakC.y); + FfxFloat32 lobeR = max(-hitMinR, hitMaxR); + FfxFloat32 lobeG = max(-hitMinG, hitMaxG); + FfxFloat32 lobeB = max(-hitMinB, hitMaxB); + FfxFloat32 lobe = max(FfxFloat32(-FSR_RCAS_LIMIT), ffxMin(ffxMax3(lobeR, lobeG, lobeB), FfxFloat32(0.0))) * ffxAsFloat + (con.x); + // Apply noise removal. +#ifdef FSR_RCAS_DENOISE + lobe *= nz; +#endif + // Resolve, which needs the medium precision rcp approximation to avoid visible tonality changes. + FfxFloat32 rcpL = ffxApproximateReciprocalMedium(FfxFloat32(4.0) * lobe + FfxFloat32(1.0)); + pixR = (lobe * bR + lobe * dR + lobe * hR + lobe * fR + eR) * rcpL; + pixG = (lobe * bG + lobe * dG + lobe * hG + lobe * fG + eG) * rcpL; + pixB = (lobe * bB + lobe * dB + lobe * hB + lobe * fB + eB) * rcpL; + return; + } +#endif +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//_____________________________________________________________/\_______________________________________________________________ +//============================================================================================================================== +// NON-PACKED 16-BIT VERSION +//============================================================================================================================== +#if defined(FFX_GPU) && FFX_HALF == 1 && defined(FSR_RCAS_H) + // Input callback prototypes that need to be implemented by calling shader + FfxFloat16x4 FsrRcasLoadH(FfxInt16x2 p); + void FsrRcasInputH(inout FfxFloat16 r,inout FfxFloat16 g,inout FfxFloat16 b); +//------------------------------------------------------------------------------------------------------------------------------ + void FsrRcasH( + out FfxFloat16 pixR, // Output values, non-vector so port between RcasFilter() and RcasFilterH() is easy. + out FfxFloat16 pixG, + out FfxFloat16 pixB, + #ifdef FSR_RCAS_PASSTHROUGH_ALPHA + out FfxFloat16 pixA, + #endif + FfxUInt32x2 ip, // Integer pixel position in output. + FfxUInt32x4 con){ // Constant generated by RcasSetup(). + // Sharpening algorithm uses minimal 3x3 pixel neighborhood. + // b + // d e f + // h + FfxInt16x2 sp=FfxInt16x2(ip); + FfxFloat16x3 b=FsrRcasLoadH(sp+FfxInt16x2( 0,-1)).rgb; + FfxFloat16x3 d=FsrRcasLoadH(sp+FfxInt16x2(-1, 0)).rgb; + #ifdef FSR_RCAS_PASSTHROUGH_ALPHA + FfxFloat16x4 ee=FsrRcasLoadH(sp); + FfxFloat16x3 e=ee.rgb;pixA=ee.a; + #else + FfxFloat16x3 e=FsrRcasLoadH(sp).rgb; + #endif + FfxFloat16x3 f=FsrRcasLoadH(sp+FfxInt16x2( 1, 0)).rgb; + FfxFloat16x3 h=FsrRcasLoadH(sp+FfxInt16x2( 0, 1)).rgb; + // Rename (32-bit) or regroup (16-bit). + FfxFloat16 bR=b.r; + FfxFloat16 bG=b.g; + FfxFloat16 bB=b.b; + FfxFloat16 dR=d.r; + FfxFloat16 dG=d.g; + FfxFloat16 dB=d.b; + FfxFloat16 eR=e.r; + FfxFloat16 eG=e.g; + FfxFloat16 eB=e.b; + FfxFloat16 fR=f.r; + FfxFloat16 fG=f.g; + FfxFloat16 fB=f.b; + FfxFloat16 hR=h.r; + FfxFloat16 hG=h.g; + FfxFloat16 hB=h.b; + // Run optional input transform. + FsrRcasInputH(bR,bG,bB); + FsrRcasInputH(dR,dG,dB); + FsrRcasInputH(eR,eG,eB); + FsrRcasInputH(fR,fG,fB); + FsrRcasInputH(hR,hG,hB); + // Luma times 2. + FfxFloat16 bL=bB*FFX_BROADCAST_FLOAT16(0.5)+(bR*FFX_BROADCAST_FLOAT16(0.5)+bG); + FfxFloat16 dL=dB*FFX_BROADCAST_FLOAT16(0.5)+(dR*FFX_BROADCAST_FLOAT16(0.5)+dG); + FfxFloat16 eL=eB*FFX_BROADCAST_FLOAT16(0.5)+(eR*FFX_BROADCAST_FLOAT16(0.5)+eG); + FfxFloat16 fL=fB*FFX_BROADCAST_FLOAT16(0.5)+(fR*FFX_BROADCAST_FLOAT16(0.5)+fG); + FfxFloat16 hL=hB*FFX_BROADCAST_FLOAT16(0.5)+(hR*FFX_BROADCAST_FLOAT16(0.5)+hG); + // Noise detection. + FfxFloat16 nz=FFX_BROADCAST_FLOAT16(0.25)*bL+FFX_BROADCAST_FLOAT16(0.25)*dL+FFX_BROADCAST_FLOAT16(0.25)*fL+FFX_BROADCAST_FLOAT16(0.25)*hL-eL; + nz=ffxSaturate(abs(nz)*ffxApproximateReciprocalMediumHalf(ffxMax3Half(ffxMax3Half(bL,dL,eL),fL,hL)-ffxMin3Half(ffxMin3Half(bL,dL,eL),fL,hL))); + nz=FFX_BROADCAST_FLOAT16(-0.5)*nz+FFX_BROADCAST_FLOAT16(1.0); + // Min and max of ring. + FfxFloat16 mn4R=min(ffxMin3Half(bR,dR,fR),hR); + FfxFloat16 mn4G=min(ffxMin3Half(bG,dG,fG),hG); + FfxFloat16 mn4B=min(ffxMin3Half(bB,dB,fB),hB); + FfxFloat16 mx4R=max(ffxMax3Half(bR,dR,fR),hR); + FfxFloat16 mx4G=max(ffxMax3Half(bG,dG,fG),hG); + FfxFloat16 mx4B=max(ffxMax3Half(bB,dB,fB),hB); + // Immediate constants for peak range. + FfxFloat16x2 peakC=FfxFloat16x2(1.0,-1.0*4.0); + // Limiters, these need to be high precision RCPs. + FfxFloat16 hitMinR=mn4R*ffxReciprocalHalf(FFX_BROADCAST_FLOAT16(4.0)*mx4R); + FfxFloat16 hitMinG=mn4G*ffxReciprocalHalf(FFX_BROADCAST_FLOAT16(4.0)*mx4G); + FfxFloat16 hitMinB=mn4B*ffxReciprocalHalf(FFX_BROADCAST_FLOAT16(4.0)*mx4B); + FfxFloat16 hitMaxR=(peakC.x-mx4R)*ffxReciprocalHalf(FFX_BROADCAST_FLOAT16(4.0)*mn4R+peakC.y); + FfxFloat16 hitMaxG=(peakC.x-mx4G)*ffxReciprocalHalf(FFX_BROADCAST_FLOAT16(4.0)*mn4G+peakC.y); + FfxFloat16 hitMaxB=(peakC.x-mx4B)*ffxReciprocalHalf(FFX_BROADCAST_FLOAT16(4.0)*mn4B+peakC.y); + FfxFloat16 lobeR=max(-hitMinR,hitMaxR); + FfxFloat16 lobeG=max(-hitMinG,hitMaxG); + FfxFloat16 lobeB=max(-hitMinB,hitMaxB); + FfxFloat16 lobe=max(FFX_BROADCAST_FLOAT16(-FSR_RCAS_LIMIT),min(ffxMax3Half(lobeR,lobeG,lobeB),FFX_BROADCAST_FLOAT16(0.0)))*FFX_UINT32_TO_FLOAT16X2(con.y).x; + // Apply noise removal. + #ifdef FSR_RCAS_DENOISE + lobe*=nz; + #endif + // Resolve, which needs the medium precision rcp approximation to avoid visible tonality changes. + FfxFloat16 rcpL=ffxApproximateReciprocalMediumHalf(FFX_BROADCAST_FLOAT16(4.0)*lobe+FFX_BROADCAST_FLOAT16(1.0)); + pixR=(lobe*bR+lobe*dR+lobe*hR+lobe*fR+eR)*rcpL; + pixG=(lobe*bG+lobe*dG+lobe*hG+lobe*fG+eG)*rcpL; + pixB=(lobe*bB+lobe*dB+lobe*hB+lobe*fB+eB)*rcpL; +} +#endif +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//_____________________________________________________________/\_______________________________________________________________ +//============================================================================================================================== +// PACKED 16-BIT VERSION +//============================================================================================================================== +#if defined(FFX_GPU)&& FFX_HALF == 1 && defined(FSR_RCAS_HX2) + // Input callback prototypes that need to be implemented by the calling shader + FfxFloat16x4 FsrRcasLoadHx2(FfxInt16x2 p); + void FsrRcasInputHx2(inout FfxFloat16x2 r,inout FfxFloat16x2 g,inout FfxFloat16x2 b); +//------------------------------------------------------------------------------------------------------------------------------ + // Can be used to convert from packed Structures of Arrays to Arrays of Structures for store. + void FsrRcasDepackHx2(out FfxFloat16x4 pix0,out FfxFloat16x4 pix1,FfxFloat16x2 pixR,FfxFloat16x2 pixG,FfxFloat16x2 pixB){ + #ifdef FFX_HLSL + // Invoke a slower path for DX only, since it won't allow uninitialized values. + pix0.a=pix1.a=0.0; + #endif + pix0.rgb=FfxFloat16x3(pixR.x,pixG.x,pixB.x); + pix1.rgb=FfxFloat16x3(pixR.y,pixG.y,pixB.y);} +//------------------------------------------------------------------------------------------------------------------------------ + void FsrRcasHx2( + // Output values are for 2 8x8 tiles in a 16x8 region. + // pix.x = left 8x8 tile + // pix.y = right 8x8 tile + // This enables later processing to easily be packed as well. + out FfxFloat16x2 pixR, + out FfxFloat16x2 pixG, + out FfxFloat16x2 pixB, + #ifdef FSR_RCAS_PASSTHROUGH_ALPHA + out FfxFloat16x2 pixA, + #endif + FfxUInt32x2 ip, // Integer pixel position in output. + FfxUInt32x4 con){ // Constant generated by RcasSetup(). + // No scaling algorithm uses minimal 3x3 pixel neighborhood. + FfxInt16x2 sp0=FfxInt16x2(ip); + FfxFloat16x3 b0=FsrRcasLoadHx2(sp0+FfxInt16x2( 0,-1)).rgb; + FfxFloat16x3 d0=FsrRcasLoadHx2(sp0+FfxInt16x2(-1, 0)).rgb; + #ifdef FSR_RCAS_PASSTHROUGH_ALPHA + FfxFloat16x4 ee0=FsrRcasLoadHx2(sp0); + FfxFloat16x3 e0=ee0.rgb;pixA.r=ee0.a; + #else + FfxFloat16x3 e0=FsrRcasLoadHx2(sp0).rgb; + #endif + FfxFloat16x3 f0=FsrRcasLoadHx2(sp0+FfxInt16x2( 1, 0)).rgb; + FfxFloat16x3 h0=FsrRcasLoadHx2(sp0+FfxInt16x2( 0, 1)).rgb; + FfxInt16x2 sp1=sp0+FfxInt16x2(8,0); + FfxFloat16x3 b1=FsrRcasLoadHx2(sp1+FfxInt16x2( 0,-1)).rgb; + FfxFloat16x3 d1=FsrRcasLoadHx2(sp1+FfxInt16x2(-1, 0)).rgb; + #ifdef FSR_RCAS_PASSTHROUGH_ALPHA + FfxFloat16x4 ee1=FsrRcasLoadHx2(sp1); + FfxFloat16x3 e1=ee1.rgb;pixA.g=ee1.a; + #else + FfxFloat16x3 e1=FsrRcasLoadHx2(sp1).rgb; + #endif + FfxFloat16x3 f1=FsrRcasLoadHx2(sp1+FfxInt16x2( 1, 0)).rgb; + FfxFloat16x3 h1=FsrRcasLoadHx2(sp1+FfxInt16x2( 0, 1)).rgb; + // Arrays of Structures to Structures of Arrays conversion. + FfxFloat16x2 bR=FfxFloat16x2(b0.r,b1.r); + FfxFloat16x2 bG=FfxFloat16x2(b0.g,b1.g); + FfxFloat16x2 bB=FfxFloat16x2(b0.b,b1.b); + FfxFloat16x2 dR=FfxFloat16x2(d0.r,d1.r); + FfxFloat16x2 dG=FfxFloat16x2(d0.g,d1.g); + FfxFloat16x2 dB=FfxFloat16x2(d0.b,d1.b); + FfxFloat16x2 eR=FfxFloat16x2(e0.r,e1.r); + FfxFloat16x2 eG=FfxFloat16x2(e0.g,e1.g); + FfxFloat16x2 eB=FfxFloat16x2(e0.b,e1.b); + FfxFloat16x2 fR=FfxFloat16x2(f0.r,f1.r); + FfxFloat16x2 fG=FfxFloat16x2(f0.g,f1.g); + FfxFloat16x2 fB=FfxFloat16x2(f0.b,f1.b); + FfxFloat16x2 hR=FfxFloat16x2(h0.r,h1.r); + FfxFloat16x2 hG=FfxFloat16x2(h0.g,h1.g); + FfxFloat16x2 hB=FfxFloat16x2(h0.b,h1.b); + // Run optional input transform. + FsrRcasInputHx2(bR,bG,bB); + FsrRcasInputHx2(dR,dG,dB); + FsrRcasInputHx2(eR,eG,eB); + FsrRcasInputHx2(fR,fG,fB); + FsrRcasInputHx2(hR,hG,hB); + // Luma times 2. + FfxFloat16x2 bL=bB*FFX_BROADCAST_FLOAT16X2(0.5)+(bR*FFX_BROADCAST_FLOAT16X2(0.5)+bG); + FfxFloat16x2 dL=dB*FFX_BROADCAST_FLOAT16X2(0.5)+(dR*FFX_BROADCAST_FLOAT16X2(0.5)+dG); + FfxFloat16x2 eL=eB*FFX_BROADCAST_FLOAT16X2(0.5)+(eR*FFX_BROADCAST_FLOAT16X2(0.5)+eG); + FfxFloat16x2 fL=fB*FFX_BROADCAST_FLOAT16X2(0.5)+(fR*FFX_BROADCAST_FLOAT16X2(0.5)+fG); + FfxFloat16x2 hL=hB*FFX_BROADCAST_FLOAT16X2(0.5)+(hR*FFX_BROADCAST_FLOAT16X2(0.5)+hG); + // Noise detection. + FfxFloat16x2 nz=FFX_BROADCAST_FLOAT16X2(0.25)*bL+FFX_BROADCAST_FLOAT16X2(0.25)*dL+FFX_BROADCAST_FLOAT16X2(0.25)*fL+FFX_BROADCAST_FLOAT16X2(0.25)*hL-eL; + nz=ffxSaturate(abs(nz)*ffxApproximateReciprocalMediumHalf(ffxMax3Half(ffxMax3Half(bL,dL,eL),fL,hL)-ffxMin3Half(ffxMin3Half(bL,dL,eL),fL,hL))); + nz=FFX_BROADCAST_FLOAT16X2(-0.5)*nz+FFX_BROADCAST_FLOAT16X2(1.0); + // Min and max of ring. + FfxFloat16x2 mn4R=min(ffxMin3Half(bR,dR,fR),hR); + FfxFloat16x2 mn4G=min(ffxMin3Half(bG,dG,fG),hG); + FfxFloat16x2 mn4B=min(ffxMin3Half(bB,dB,fB),hB); + FfxFloat16x2 mx4R=max(ffxMax3Half(bR,dR,fR),hR); + FfxFloat16x2 mx4G=max(ffxMax3Half(bG,dG,fG),hG); + FfxFloat16x2 mx4B=max(ffxMax3Half(bB,dB,fB),hB); + // Immediate constants for peak range. + FfxFloat16x2 peakC=FfxFloat16x2(1.0,-1.0*4.0); + // Limiters, these need to be high precision RCPs. + FfxFloat16x2 hitMinR=mn4R*ffxReciprocalHalf(FFX_BROADCAST_FLOAT16X2(4.0)*mx4R); + FfxFloat16x2 hitMinG=mn4G*ffxReciprocalHalf(FFX_BROADCAST_FLOAT16X2(4.0)*mx4G); + FfxFloat16x2 hitMinB=mn4B*ffxReciprocalHalf(FFX_BROADCAST_FLOAT16X2(4.0)*mx4B); + FfxFloat16x2 hitMaxR=(peakC.x-mx4R)*ffxReciprocalHalf(FFX_BROADCAST_FLOAT16X2(4.0)*mn4R+peakC.y); + FfxFloat16x2 hitMaxG=(peakC.x-mx4G)*ffxReciprocalHalf(FFX_BROADCAST_FLOAT16X2(4.0)*mn4G+peakC.y); + FfxFloat16x2 hitMaxB=(peakC.x-mx4B)*ffxReciprocalHalf(FFX_BROADCAST_FLOAT16X2(4.0)*mn4B+peakC.y); + FfxFloat16x2 lobeR=max(-hitMinR,hitMaxR); + FfxFloat16x2 lobeG=max(-hitMinG,hitMaxG); + FfxFloat16x2 lobeB=max(-hitMinB,hitMaxB); + FfxFloat16x2 lobe=max(FFX_BROADCAST_FLOAT16X2(-FSR_RCAS_LIMIT),min(ffxMax3Half(lobeR,lobeG,lobeB),FFX_BROADCAST_FLOAT16X2(0.0)))*FFX_BROADCAST_FLOAT16X2(FFX_UINT32_TO_FLOAT16X2(con.y).x); + // Apply noise removal. + #ifdef FSR_RCAS_DENOISE + lobe*=nz; + #endif + // Resolve, which needs the medium precision rcp approximation to avoid visible tonality changes. + FfxFloat16x2 rcpL=ffxApproximateReciprocalMediumHalf(FFX_BROADCAST_FLOAT16X2(4.0)*lobe+FFX_BROADCAST_FLOAT16X2(1.0)); + pixR=(lobe*bR+lobe*dR+lobe*hR+lobe*fR+eR)*rcpL; + pixG=(lobe*bG+lobe*dG+lobe*hG+lobe*fG+eG)*rcpL; + pixB=(lobe*bB+lobe*dB+lobe*hB+lobe*fB+eB)*rcpL;} +#endif +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//_____________________________________________________________/\_______________________________________________________________ +//============================================================================================================================== +// +// FSR - [LFGA] LINEAR FILM GRAIN APPLICATOR +// +//------------------------------------------------------------------------------------------------------------------------------ +// Adding output-resolution film grain after scaling is a good way to mask both rendering and scaling artifacts. +// Suggest using tiled blue noise as film grain input, with peak noise frequency set for a specific look and feel. +// The 'Lfga*()' functions provide a convenient way to introduce grain. +// These functions limit grain based on distance to signal limits. +// This is done so that the grain is temporally energy preserving, and thus won't modify image tonality. +// Grain application should be done in a linear colorspace. +// The grain should be temporally changing, but have a temporal sum per pixel that adds to zero (non-biased). +//------------------------------------------------------------------------------------------------------------------------------ +// Usage, +// FsrLfga*( +// color, // In/out linear colorspace color {0 to 1} ranged. +// grain, // Per pixel grain texture value {-0.5 to 0.5} ranged, input is 3-channel to support colored grain. +// amount); // Amount of grain (0 to 1} ranged. +//------------------------------------------------------------------------------------------------------------------------------ +// Example if grain texture is monochrome: 'FsrLfgaF(color,ffxBroadcast3(grain),amount)' +//============================================================================================================================== +#if defined(FFX_GPU) + // Maximum grain is the minimum distance to the signal limit. + void FsrLfgaF(inout FfxFloat32x3 c, FfxFloat32x3 t, FfxFloat32 a) + { + c += (t * ffxBroadcast3(a)) * ffxMin(ffxBroadcast3(1.0) - c, c); + } +#endif +//============================================================================================================================== +#if defined(FFX_GPU)&& FFX_HALF == 1 + // Half precision version (slower). + void FsrLfgaH(inout FfxFloat16x3 c, FfxFloat16x3 t, FfxFloat16 a) + { + c += (t * FFX_BROADCAST_FLOAT16X3(a)) * min(FFX_BROADCAST_FLOAT16X3(1.0) - c, c); + } + //------------------------------------------------------------------------------------------------------------------------------ + // Packed half precision version (faster). + void FsrLfgaHx2(inout FfxFloat16x2 cR,inout FfxFloat16x2 cG,inout FfxFloat16x2 cB,FfxFloat16x2 tR,FfxFloat16x2 tG,FfxFloat16x2 tB,FfxFloat16 a){ + cR+=(tR*FFX_BROADCAST_FLOAT16X2(a))*min(FFX_BROADCAST_FLOAT16X2(1.0)-cR,cR);cG+=(tG*FFX_BROADCAST_FLOAT16X2(a))*min(FFX_BROADCAST_FLOAT16X2(1.0)-cG,cG);cB+=(tB*FFX_BROADCAST_FLOAT16X2(a))*min(FFX_BROADCAST_FLOAT16X2(1.0)-cB,cB);} +#endif +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//_____________________________________________________________/\_______________________________________________________________ +//============================================================================================================================== +// +// FSR - [SRTM] SIMPLE REVERSIBLE TONE-MAPPER +// +//------------------------------------------------------------------------------------------------------------------------------ +// This provides a way to take linear HDR color {0 to FP16_MAX} and convert it into a temporary {0 to 1} ranged post-tonemapped linear. +// The tonemapper preserves RGB ratio, which helps maintain HDR color bleed during filtering. +//------------------------------------------------------------------------------------------------------------------------------ +// Reversible tonemapper usage, +// FsrSrtm*(color); // {0 to FP16_MAX} converted to {0 to 1}. +// FsrSrtmInv*(color); // {0 to 1} converted into {0 to 32768, output peak safe for FP16}. +//============================================================================================================================== +#if defined(FFX_GPU) + void FsrSrtmF(inout FfxFloat32x3 c) + { + c *= ffxBroadcast3(ffxReciprocal(ffxMax3(c.r, c.g, c.b) + FfxFloat32(1.0))); + } + // The extra max solves the c=1.0 case (which is a /0). + void FsrSrtmInvF(inout FfxFloat32x3 c){c*=ffxBroadcast3(ffxReciprocal(max(FfxFloat32(1.0/32768.0),FfxFloat32(1.0)-ffxMax3(c.r,c.g,c.b))));} +#endif +//============================================================================================================================== +#if defined(FFX_GPU )&& FFX_HALF == 1 + void FsrSrtmH(inout FfxFloat16x3 c) + { + c *= FFX_BROADCAST_FLOAT16X3(ffxReciprocalHalf(ffxMax3Half(c.r, c.g, c.b) + FFX_BROADCAST_FLOAT16(1.0))); + } + void FsrSrtmInvH(inout FfxFloat16x3 c) + { + c *= FFX_BROADCAST_FLOAT16X3(ffxReciprocalHalf(max(FFX_BROADCAST_FLOAT16(1.0 / 32768.0), FFX_BROADCAST_FLOAT16(1.0) - ffxMax3Half(c.r, c.g, c.b)))); + } + //------------------------------------------------------------------------------------------------------------------------------ + void FsrSrtmHx2(inout FfxFloat16x2 cR, inout FfxFloat16x2 cG, inout FfxFloat16x2 cB) + { + FfxFloat16x2 rcp = ffxReciprocalHalf(ffxMax3Half(cR, cG, cB) + FFX_BROADCAST_FLOAT16X2(1.0)); + cR *= rcp; + cG *= rcp; + cB *= rcp; + } + void FsrSrtmInvHx2(inout FfxFloat16x2 cR,inout FfxFloat16x2 cG,inout FfxFloat16x2 cB) + { + FfxFloat16x2 rcp=ffxReciprocalHalf(max(FFX_BROADCAST_FLOAT16X2(1.0/32768.0),FFX_BROADCAST_FLOAT16X2(1.0)-ffxMax3Half(cR,cG,cB))); + cR*=rcp; + cG*=rcp; + cB*=rcp; + } +#endif +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//_____________________________________________________________/\_______________________________________________________________ +//============================================================================================================================== +// +// FSR - [TEPD] TEMPORAL ENERGY PRESERVING DITHER +// +//------------------------------------------------------------------------------------------------------------------------------ +// Temporally energy preserving dithered {0 to 1} linear to gamma 2.0 conversion. +// Gamma 2.0 is used so that the conversion back to linear is just to square the color. +// The conversion comes in 8-bit and 10-bit modes, designed for output to 8-bit UNORM or 10:10:10:2 respectively. +// Given good non-biased temporal blue noise as dither input, +// the output dither will temporally conserve energy. +// This is done by choosing the linear nearest step point instead of perceptual nearest. +// See code below for details. +//------------------------------------------------------------------------------------------------------------------------------ +// DX SPEC RULES FOR FLOAT->UNORM 8-BIT CONVERSION +// =============================================== +// - Output is 'FfxUInt32(floor(saturate(n)*255.0+0.5))'. +// - Thus rounding is to nearest. +// - NaN gets converted to zero. +// - INF is clamped to {0.0 to 1.0}. +//============================================================================================================================== +#if defined(FFX_GPU) + // Hand tuned integer position to dither value, with more values than simple checkerboard. + // Only 32-bit has enough precision for this compddation. + // Output is {0 to <1}. + FfxFloat32 FsrTepdDitF(FfxUInt32x2 p, FfxUInt32 f) + { + FfxFloat32 x = FfxFloat32(p.x + f); + FfxFloat32 y = FfxFloat32(p.y); + // The 1.61803 golden ratio. + FfxFloat32 a = FfxFloat32((1.0 + ffxSqrt(5.0f)) / 2.0); + // Number designed to provide a good visual pattern. + FfxFloat32 b = FfxFloat32(1.0 / 3.69); + x = x * a + (y * b); + return ffxFract(x); + } + //------------------------------------------------------------------------------------------------------------------------------ + // This version is 8-bit gamma 2.0. + // The 'c' input is {0 to 1}. + // Output is {0 to 1} ready for image store. + void FsrTepdC8F(inout FfxFloat32x3 c, FfxFloat32 dit) + { + FfxFloat32x3 n = ffxSqrt(c); + n = floor(n * ffxBroadcast3(255.0)) * ffxBroadcast3(1.0 / 255.0); + FfxFloat32x3 a = n * n; + FfxFloat32x3 b = n + ffxBroadcast3(1.0 / 255.0); + b = b * b; + // Ratio of 'a' to 'b' required to produce 'c'. + // ffxApproximateReciprocal() won't work here (at least for very high dynamic ranges). + // ffxApproximateReciprocalMedium() is an IADD,FMA,MUL. + FfxFloat32x3 r = (c - b) * ffxApproximateReciprocalMedium(a - b); + // Use the ratio as a cutoff to choose 'a' or 'b'. + // ffxIsGreaterThanZero() is a MUL. + c = ffxSaturate(n + ffxIsGreaterThanZero(ffxBroadcast3(dit) - r) * ffxBroadcast3(1.0 / 255.0)); + } + //------------------------------------------------------------------------------------------------------------------------------ + // This version is 10-bit gamma 2.0. + // The 'c' input is {0 to 1}. + // Output is {0 to 1} ready for image store. + void FsrTepdC10F(inout FfxFloat32x3 c, FfxFloat32 dit) + { + FfxFloat32x3 n = ffxSqrt(c); + n = floor(n * ffxBroadcast3(1023.0)) * ffxBroadcast3(1.0 / 1023.0); + FfxFloat32x3 a = n * n; + FfxFloat32x3 b = n + ffxBroadcast3(1.0 / 1023.0); + b = b * b; + FfxFloat32x3 r = (c - b) * ffxApproximateReciprocalMedium(a - b); + c = ffxSaturate(n + ffxIsGreaterThanZero(ffxBroadcast3(dit) - r) * ffxBroadcast3(1.0 / 1023.0)); + } +#endif +//============================================================================================================================== +#if defined(FFX_GPU)&& FFX_HALF == 1 + FfxFloat16 FsrTepdDitH(FfxUInt32x2 p, FfxUInt32 f) + { + FfxFloat32 x = FfxFloat32(p.x + f); + FfxFloat32 y = FfxFloat32(p.y); + FfxFloat32 a = FfxFloat32((1.0 + ffxSqrt(5.0f)) / 2.0); + FfxFloat32 b = FfxFloat32(1.0 / 3.69); + x = x * a + (y * b); + return FfxFloat16(ffxFract(x)); + } + //------------------------------------------------------------------------------------------------------------------------------ + void FsrTepdC8H(inout FfxFloat16x3 c, FfxFloat16 dit) + { + FfxFloat16x3 n = sqrt(c); + n = floor(n * FFX_BROADCAST_FLOAT16X3(255.0)) * FFX_BROADCAST_FLOAT16X3(1.0 / 255.0); + FfxFloat16x3 a = n * n; + FfxFloat16x3 b = n + FFX_BROADCAST_FLOAT16X3(1.0 / 255.0); + b = b * b; + FfxFloat16x3 r = (c - b) * ffxApproximateReciprocalMediumHalf(a - b); + c = ffxSaturate(n + ffxIsGreaterThanZeroHalf(FFX_BROADCAST_FLOAT16X3(dit) - r) * FFX_BROADCAST_FLOAT16X3(1.0 / 255.0)); + } + //------------------------------------------------------------------------------------------------------------------------------ + void FsrTepdC10H(inout FfxFloat16x3 c, FfxFloat16 dit) + { + FfxFloat16x3 n = sqrt(c); + n = floor(n * FFX_BROADCAST_FLOAT16X3(1023.0)) * FFX_BROADCAST_FLOAT16X3(1.0 / 1023.0); + FfxFloat16x3 a = n * n; + FfxFloat16x3 b = n + FFX_BROADCAST_FLOAT16X3(1.0 / 1023.0); + b = b * b; + FfxFloat16x3 r = (c - b) * ffxApproximateReciprocalMediumHalf(a - b); + c = ffxSaturate(n + ffxIsGreaterThanZeroHalf(FFX_BROADCAST_FLOAT16X3(dit) - r) * FFX_BROADCAST_FLOAT16X3(1.0 / 1023.0)); + } + //============================================================================================================================== + // This computes dither for positions 'p' and 'p+{8,0}'. + FfxFloat16x2 FsrTepdDitHx2(FfxUInt32x2 p, FfxUInt32 f) + { + FfxFloat32x2 x; + x.x = FfxFloat32(p.x + f); + x.y = x.x + FfxFloat32(8.0); + FfxFloat32 y = FfxFloat32(p.y); + FfxFloat32 a = FfxFloat32((1.0 + ffxSqrt(5.0f)) / 2.0); + FfxFloat32 b = FfxFloat32(1.0 / 3.69); + x = x * ffxBroadcast2(a) + ffxBroadcast2(y * b); + return FfxFloat16x2(ffxFract(x)); + } + //------------------------------------------------------------------------------------------------------------------------------ + void FsrTepdC8Hx2(inout FfxFloat16x2 cR, inout FfxFloat16x2 cG, inout FfxFloat16x2 cB, FfxFloat16x2 dit) + { + FfxFloat16x2 nR = sqrt(cR); + FfxFloat16x2 nG = sqrt(cG); + FfxFloat16x2 nB = sqrt(cB); + nR = floor(nR * FFX_BROADCAST_FLOAT16X2(255.0)) * FFX_BROADCAST_FLOAT16X2(1.0 / 255.0); + nG = floor(nG * FFX_BROADCAST_FLOAT16X2(255.0)) * FFX_BROADCAST_FLOAT16X2(1.0 / 255.0); + nB = floor(nB * FFX_BROADCAST_FLOAT16X2(255.0)) * FFX_BROADCAST_FLOAT16X2(1.0 / 255.0); + FfxFloat16x2 aR = nR * nR; + FfxFloat16x2 aG = nG * nG; + FfxFloat16x2 aB = nB * nB; + FfxFloat16x2 bR = nR + FFX_BROADCAST_FLOAT16X2(1.0 / 255.0); + bR = bR * bR; + FfxFloat16x2 bG = nG + FFX_BROADCAST_FLOAT16X2(1.0 / 255.0); + bG = bG * bG; + FfxFloat16x2 bB = nB + FFX_BROADCAST_FLOAT16X2(1.0 / 255.0); + bB = bB * bB; + FfxFloat16x2 rR = (cR - bR) * ffxApproximateReciprocalMediumHalf(aR - bR); + FfxFloat16x2 rG = (cG - bG) * ffxApproximateReciprocalMediumHalf(aG - bG); + FfxFloat16x2 rB = (cB - bB) * ffxApproximateReciprocalMediumHalf(aB - bB); + cR = ffxSaturate(nR + ffxIsGreaterThanZeroHalf(dit - rR) * FFX_BROADCAST_FLOAT16X2(1.0 / 255.0)); + cG = ffxSaturate(nG + ffxIsGreaterThanZeroHalf(dit - rG) * FFX_BROADCAST_FLOAT16X2(1.0 / 255.0)); + cB = ffxSaturate(nB + ffxIsGreaterThanZeroHalf(dit - rB) * FFX_BROADCAST_FLOAT16X2(1.0 / 255.0)); + } + //------------------------------------------------------------------------------------------------------------------------------ + void FsrTepdC10Hx2(inout FfxFloat16x2 cR,inout FfxFloat16x2 cG,inout FfxFloat16x2 cB,FfxFloat16x2 dit){ + FfxFloat16x2 nR=sqrt(cR); + FfxFloat16x2 nG=sqrt(cG); + FfxFloat16x2 nB=sqrt(cB); + nR=floor(nR*FFX_BROADCAST_FLOAT16X2(1023.0))*FFX_BROADCAST_FLOAT16X2(1.0/1023.0); + nG=floor(nG*FFX_BROADCAST_FLOAT16X2(1023.0))*FFX_BROADCAST_FLOAT16X2(1.0/1023.0); + nB=floor(nB*FFX_BROADCAST_FLOAT16X2(1023.0))*FFX_BROADCAST_FLOAT16X2(1.0/1023.0); + FfxFloat16x2 aR=nR*nR; + FfxFloat16x2 aG=nG*nG; + FfxFloat16x2 aB=nB*nB; + FfxFloat16x2 bR=nR+FFX_BROADCAST_FLOAT16X2(1.0/1023.0);bR=bR*bR; + FfxFloat16x2 bG=nG+FFX_BROADCAST_FLOAT16X2(1.0/1023.0);bG=bG*bG; + FfxFloat16x2 bB=nB+FFX_BROADCAST_FLOAT16X2(1.0/1023.0);bB=bB*bB; + FfxFloat16x2 rR=(cR-bR)*ffxApproximateReciprocalMediumHalf(aR-bR); + FfxFloat16x2 rG=(cG-bG)*ffxApproximateReciprocalMediumHalf(aG-bG); + FfxFloat16x2 rB=(cB-bB)*ffxApproximateReciprocalMediumHalf(aB-bB); + cR=ffxSaturate(nR+ffxIsGreaterThanZeroHalf(dit-rR)*FFX_BROADCAST_FLOAT16X2(1.0/1023.0)); + cG=ffxSaturate(nG+ffxIsGreaterThanZeroHalf(dit-rG)*FFX_BROADCAST_FLOAT16X2(1.0/1023.0)); + cB = ffxSaturate(nB + ffxIsGreaterThanZeroHalf(dit - rB) * FFX_BROADCAST_FLOAT16X2(1.0 / 1023.0)); +} +#endif diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_accumulate.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_accumulate.h new file mode 100644 index 000000000..a8c6daa0e --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_accumulate.h @@ -0,0 +1,172 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +void Accumulate(const AccumulationPassCommonParams params, FFX_PARAMETER_INOUT AccumulationPassData data) +{ + // Avoid invalid values when accumulation and upsampled weight is 0 + data.fHistoryWeight *= FfxFloat32(data.fHistoryWeight > FSR3UPSCALER_FP16_MIN); + data.fHistoryWeight = ffxMax(FSR3UPSCALER_EPSILON, data.fHistoryWeight + data.fUpsampledWeight); + +#if FFX_FSR3UPSCALER_OPTION_HDR_COLOR_INPUT + //YCoCg -> RGB -> Tonemap -> YCoCg (Use RGB tonemapper to avoid color desaturation) + data.fUpsampledColor = RGBToYCoCg(Tonemap(YCoCgToRGB(data.fUpsampledColor))); + data.fHistoryColor = RGBToYCoCg(Tonemap(YCoCgToRGB(data.fHistoryColor))); +#endif + + const FfxFloat32 fAlpha = ffxSaturate(data.fUpsampledWeight / data.fHistoryWeight); + data.fHistoryColor = ffxLerp(data.fHistoryColor, data.fUpsampledColor, fAlpha); + data.fHistoryColor = YCoCgToRGB(data.fHistoryColor); + +#if FFX_FSR3UPSCALER_OPTION_HDR_COLOR_INPUT + data.fHistoryColor = InverseTonemap(data.fHistoryColor); +#endif +} + +void RectifyHistory( + const AccumulationPassCommonParams params, + FFX_PARAMETER_INOUT AccumulationPassData data +) +{ + const FfxFloat32 f4kVelocityFactor = ffxSaturate(params.f4KVelocity / 20.0f); + const FfxFloat32 fDistanceFactor = ffxSaturate(0.75f - params.fFarthestDepthInMeters / 20.0f); + const FfxFloat32 fAccumulationFactor = 1.0f - params.fAccumulation; + const FfxFloat32 fReactiveFactor = ffxPow(params.fReactiveMask, 1.0f / 2.0f); + const FfxFloat32 fShadingChangeFactor = params.fShadingChange; + const FfxFloat32 fBoxScaleT = ffxMax(f4kVelocityFactor, ffxMax(fDistanceFactor, ffxMax(fAccumulationFactor, ffxMax(fReactiveFactor, fShadingChangeFactor)))); + + const FfxFloat32 fBoxScale = ffxLerp(3.0f, 1.0f, fBoxScaleT); + const FfxFloat32x3 fScaledBoxVec = data.clippingBox.boxVec * FfxFloat32x3(1.7f, 1.0f, 1.0f) * fBoxScale; + + const FfxFloat32x3 fClampedScaledBoxVec = ffxMax(fScaledBoxVec, FfxFloat32x3(1.193e-7f, 1.193e-7f, 1.193e-7f)); + const FfxFloat32x3 fTransformedHistoryColor = (data.fHistoryColor - data.clippingBox.boxCenter) / fClampedScaledBoxVec; + + if (length(fTransformedHistoryColor)>1.f) { + const FfxFloat32x3 fClampedHistoryColor = normalize(fTransformedHistoryColor); + const FfxFloat32x3 fFinalClampedHistoryColor = (fClampedHistoryColor * fScaledBoxVec) + data.clippingBox.boxCenter; + + // Scale history color using rectification info, also using accumulation mask to avoid potential invalid color protection + const FfxFloat32 fHistoryContribution = ffxMax(params.fLumaInstabilityFactor, data.fLockContributionThisFrame) * params.fAccumulation * (1 - params.fDisocclusion); + data.fHistoryColor = ffxLerp(fFinalClampedHistoryColor, data.fHistoryColor, ffxSaturate(fHistoryContribution)); + } +} + +void UpdateLockStatus(AccumulationPassCommonParams params, FFX_PARAMETER_INOUT AccumulationPassData data) +{ + data.fLock *= FfxFloat32(params.bIsNewSample == false); + + const FfxFloat32 fLifetimeDecreaseFactor = ffxMax(ffxSaturate(params.fShadingChange), ffxMax(params.fReactiveMask, params.fDisocclusion)); + data.fLock = ffxMax(0.0f, data.fLock - fLifetimeDecreaseFactor * fLockMax); + + // Compute this frame lock contribution + data.fLockContributionThisFrame = ffxSaturate(ffxSaturate(data.fLock - fLockThreshold) * (fLockMax - fLockThreshold)); + + const FfxFloat32 fNewLockIntensity = LoadRwNewLocks(params.iPxHrPos) * (1.0f - ffxMax(params.fShadingChange * 0, params.fReactiveMask)); + data.fLock = ffxMax(0.0f, ffxMin(data.fLock + fNewLockIntensity, fLockMax)); + + // Preparing for next frame + const FfxFloat32 fLifetimeDecrease = (0.1f / JitterSequenceLength()) * (1.0f - fLifetimeDecreaseFactor); + data.fLock = ffxMax(0.0f, data.fLock - fLifetimeDecrease); + + // we expect similar motion for next frame + // kill lock if that location is outside screen, avoid locks to be clamped to screen borders + const FfxFloat32x2 fEstimatedUvNextFrame = params.fHrUv - params.fMotionVector; + data.fLock *= FfxFloat32(IsUvInside(fEstimatedUvNextFrame) == true); +} + +void ComputeBaseAccumulationWeight(const AccumulationPassCommonParams params, FFX_PARAMETER_INOUT AccumulationPassData data) +{ + FfxFloat32 fBaseAccumulation = params.fAccumulation; + + fBaseAccumulation = ffxMin(fBaseAccumulation, ffxLerp(fBaseAccumulation, 0.15f, ffxSaturate(ffxMax(0.0f, (params.f4KVelocity * VelocityFactor()) / 0.5f)))); + + data.fHistoryWeight = fBaseAccumulation; +} + +void InitPassData(FfxInt32x2 iPxHrPos, FFX_PARAMETER_INOUT AccumulationPassCommonParams params, FFX_PARAMETER_INOUT AccumulationPassData data) +{ + // Init constant params + params.iPxHrPos = iPxHrPos; + const FfxFloat32x2 fHrUv = (iPxHrPos + 0.5f) / UpscaleSize(); + params.fHrUv = fHrUv; + params.fLrUvJittered = fHrUv + Jitter() / RenderSize(); + params.fLrUv_HwSampler = ClampUv(params.fLrUvJittered, RenderSize(), MaxRenderSize()); + + params.fMotionVector = GetMotionVector(iPxHrPos, fHrUv); + params.f4KVelocity = Get4KVelocity(params.fMotionVector); + + ComputeReprojectedUVs(params); + + const FfxFloat32x2 fLumaInstabilityUv_HW = ClampUv(fHrUv, RenderSize(), MaxRenderSize()); + params.fLumaInstabilityFactor = SampleLumaInstability(fLumaInstabilityUv_HW); + + const FfxFloat32x2 fFarthestDepthUv = ClampUv(params.fLrUvJittered, RenderSize() / 2, GetFarthestDepthMip1ResourceDimensions()); + params.fFarthestDepthInMeters = SampleFarthestDepthMip1(fFarthestDepthUv); + params.bIsNewSample = (params.bIsExistingSample == false || 0 == FrameIndex()); + + const FfxFloat32x4 fDilatedReactiveMasks = SampleDilatedReactiveMasks(params.fLrUv_HwSampler); + params.fReactiveMask = ffxSaturate(fDilatedReactiveMasks[REACTIVE]); + params.fDisocclusion = ffxSaturate(fDilatedReactiveMasks[DISOCCLUSION]); + params.fShadingChange = ffxSaturate(fDilatedReactiveMasks[SHADING_CHANGE]); + params.fAccumulation = ffxSaturate(fDilatedReactiveMasks[ACCUMULAION]); + params.fAccumulation *= FfxFloat32(round(params.fAccumulation * 100.0f) > 1.0f); + + // Init variable data + data.fUpsampledColor = FfxFloat32x3(0.0f, 0.0f, 0.0f); + data.fHistoryColor = FfxFloat32x3(0.0f, 0.0f, 0.0f); + data.fHistoryWeight = 1.0f; + data.fUpsampledWeight = 0.0f; + data.fLock = 0.0f; + data.fLockContributionThisFrame = 0.0f; +} + +void Accumulate(FfxInt32x2 iPxHrPos) +{ + AccumulationPassCommonParams params; + AccumulationPassData data; + InitPassData(iPxHrPos, params, data); + + if (params.bIsExistingSample && !params.bIsNewSample) { + ReprojectHistoryColor(params, data); + } + + UpdateLockStatus(params, data); + + ComputeBaseAccumulationWeight(params, data); + + ComputeUpsampledColorAndWeight(params, data); + + RectifyHistory(params, data); + + Accumulate(params, data); + + data.fHistoryColor /= Exposure(); + + data.fHistoryColor = ffxMax(data.fHistoryColor, FfxFloat32x3(0.0f, 0.0f, 0.0f)); + + StoreInternalColorAndWeight(iPxHrPos, FfxFloat32x4(data.fHistoryColor, data.fLock)); + + // Output final color when RCAS is disabled +#if FFX_FSR3UPSCALER_OPTION_APPLY_SHARPENING == 0 + StoreUpscaledOutput(iPxHrPos, data.fHistoryColor); +#endif + StoreNewLocks(iPxHrPos, 0); +} diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_callbacks_glsl.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_callbacks_glsl.h new file mode 100644 index 000000000..d0cbf9d32 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_callbacks_glsl.h @@ -0,0 +1,903 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#include "ffx_fsr3upscaler_resources.h" + +#if defined(FFX_GPU) +#include "ffx_core.h" +#endif // #if defined(FFX_GPU) + +#if defined(FFX_GPU) +#ifndef FFX_PREFER_WAVE64 +#define FFX_PREFER_WAVE64 +#endif // FFX_PREFER_WAVE64 + +#if defined(FSR3UPSCALER_BIND_CB_FSR3UPSCALER) + layout (set = 0, binding = FSR3UPSCALER_BIND_CB_FSR3UPSCALER, std140) uniform cbFSR3UPSCALER_t + { + FfxInt32x2 iRenderSize; + FfxInt32x2 iPreviousFrameRenderSize; + + FfxInt32x2 iUpscaleSize; + FfxInt32x2 iPreviousFrameUpscaleSize; + + FfxInt32x2 iMaxRenderSize; + FfxInt32x2 iMaxUpscaleSize; + + FfxFloat32x4 fDeviceToViewDepth; + + FfxFloat32x2 fJitter; + FfxFloat32x2 fPreviousFrameJitter; + + FfxFloat32x2 fMotionVectorScale; + FfxFloat32x2 fDownscaleFactor; + + FfxFloat32x2 fMotionVectorJitterCancellation; + FfxFloat32 fTanHalfFOV; + FfxFloat32 fJitterSequenceLength; + + FfxFloat32 fDeltaTime; + FfxFloat32 fDeltaPreExposure; + FfxFloat32 fViewSpaceToMetersFactor; + FfxFloat32 fFrameIndex; + + FfxFloat32 fVelocityFactor; + FfxFloat32 fReactivenessScale; + FfxFloat32 fShadingChangeScale; + FfxFloat32 fAccumulationAddedPerFrame; + FfxFloat32 fMinDisocclusionAccumulation; + } cbFSR3Upscaler; + + +FfxInt32x2 RenderSize() +{ + return cbFSR3Upscaler.iRenderSize; +} + +FfxInt32x2 PreviousFrameRenderSize() +{ + return cbFSR3Upscaler.iPreviousFrameRenderSize; +} + +FfxInt32x2 MaxRenderSize() +{ + return cbFSR3Upscaler.iMaxRenderSize; +} + +FfxInt32x2 UpscaleSize() +{ + return cbFSR3Upscaler.iUpscaleSize; +} + +FfxInt32x2 PreviousFrameUpscaleSize() +{ + return cbFSR3Upscaler.iPreviousFrameUpscaleSize; +} + +FfxInt32x2 MaxUpscaleSize() +{ + return cbFSR3Upscaler.iMaxUpscaleSize; +} + +FfxFloat32x2 Jitter() +{ + return cbFSR3Upscaler.fJitter; +} + +FfxFloat32x2 PreviousFrameJitter() +{ + return cbFSR3Upscaler.fPreviousFrameJitter; +} + +FfxFloat32x4 DeviceToViewSpaceTransformFactors() +{ + return cbFSR3Upscaler.fDeviceToViewDepth; +} + +FfxFloat32x2 MotionVectorScale() +{ + return cbFSR3Upscaler.fMotionVectorScale; +} + +FfxFloat32x2 DownscaleFactor() +{ + return cbFSR3Upscaler.fDownscaleFactor; +} + +FfxFloat32x2 MotionVectorJitterCancellation() +{ + return cbFSR3Upscaler.fMotionVectorJitterCancellation; +} + +FfxFloat32 TanHalfFoV() +{ + return cbFSR3Upscaler.fTanHalfFOV; +} + +FfxFloat32 JitterSequenceLength() +{ + return cbFSR3Upscaler.fJitterSequenceLength; +} + +FfxFloat32 DeltaTime() +{ + return cbFSR3Upscaler.fDeltaTime; +} + +FfxFloat32 DeltaPreExposure() +{ + return cbFSR3Upscaler.fDeltaPreExposure; +} + +FfxFloat32 ViewSpaceToMetersFactor() +{ + return cbFSR3Upscaler.fViewSpaceToMetersFactor; +} + +FfxFloat32 FrameIndex() +{ + return cbFSR3Upscaler.fFrameIndex; +} + +FfxFloat32 VelocityFactor() +{ + return cbFSR3Upscaler.fVelocityFactor; +} + +FfxFloat32 AccumulationAddedPerFrame() +{ + return cbFSR3Upscaler.fAccumulationAddedPerFrame; +} + +FfxFloat32 MinDisocclusionAccumulation() +{ + return cbFSR3Upscaler.fMinDisocclusionAccumulation; +} + +#endif // #if defined(FSR3UPSCALER_BIND_CB_FSR3UPSCALER) + + +#if defined(FSR3UPSCALER_BIND_CB_AUTOREACTIVE) +layout(set = 0, binding = FSR3UPSCALER_BIND_CB_AUTOREACTIVE, std140) uniform cbGenerateReactive_t +{ + FfxFloat32 fTcThreshold; // 0.1 is a good starting value, lower will result in more TC pixels + FfxFloat32 fTcScale; + FfxFloat32 fReactiveScale; + FfxFloat32 fReactiveMax; +} cbGenerateReactive; + +FfxFloat32 TcThreshold() +{ + return cbGenerateReactive.fTcThreshold; +} + +FfxFloat32 TcScale() +{ + return cbGenerateReactive.fTcScale; +} + +FfxFloat32 ReactiveScale() +{ + return cbGenerateReactive.fReactiveScale; +} + +FfxFloat32 ReactiveMax() +{ + return cbGenerateReactive.fReactiveMax; +} +#endif // #if defined(FSR3UPSCALER_BIND_CB_AUTOREACTIVE) + +#if defined(FSR3UPSCALER_BIND_CB_RCAS) +layout(set = 0, binding = FSR3UPSCALER_BIND_CB_RCAS, std140) uniform cbRCAS_t +{ + FfxUInt32x4 rcasConfig; +} cbRCAS; + +FfxUInt32x4 RCASConfig() +{ + return cbRCAS.rcasConfig; +} +#endif // #if defined(FSR3UPSCALER_BIND_CB_RCAS) + + +#if defined(FSR3UPSCALER_BIND_CB_REACTIVE) +layout(set = 0, binding = FSR3UPSCALER_BIND_CB_REACTIVE, std140) uniform cbGenerateReactive_t +{ + FfxFloat32 gen_reactive_scale; + FfxFloat32 gen_reactive_threshold; + FfxFloat32 gen_reactive_binaryValue; + FfxUInt32 gen_reactive_flags; +} cbGenerateReactive; + +FfxFloat32 GenReactiveScale() +{ + return cbGenerateReactive.gen_reactive_scale; +} + +FfxFloat32 GenReactiveThreshold() +{ + return cbGenerateReactive.gen_reactive_threshold; +} + +FfxFloat32 GenReactiveBinaryValue() +{ + return cbGenerateReactive.gen_reactive_binaryValue; +} + +FfxUInt32 GenReactiveFlags() +{ + return cbGenerateReactive.gen_reactive_flags; +} +#endif // #if defined(FSR3UPSCALER_BIND_CB_REACTIVE) + + +#if defined(FSR3UPSCALER_BIND_CB_SPD) +layout(set = 0, binding = FSR3UPSCALER_BIND_CB_SPD, std140) uniform cbSPD_t +{ + FfxUInt32 mips; + FfxUInt32 numWorkGroups; + FfxUInt32x2 workGroupOffset; + FfxUInt32x2 renderSize; +} cbSPD; + +FfxUInt32 MipCount() +{ + return cbSPD.mips; +} + +FfxUInt32 NumWorkGroups() +{ + return cbSPD.numWorkGroups; +} + +FfxUInt32x2 WorkGroupOffset() +{ + return cbSPD.workGroupOffset; +} + +FfxUInt32x2 SPD_RenderSize() +{ + return cbSPD.renderSize; +} +#endif // #if defined(FSR3UPSCALER_BIND_CB_SPD) + +layout (set = 0, binding = 1000) uniform sampler s_PointClamp; +layout (set = 0, binding = 1001) uniform sampler s_LinearClamp; + +#if defined(FSR3UPSCALER_BIND_SRV_SPD_MIPS) +layout (set = 0, binding = FSR3UPSCALER_BIND_SRV_SPD_MIPS) uniform texture2D r_spd_mips; + +FfxInt32x2 GetSPDMipDimensions(FfxUInt32 uMipLevel) +{ + return textureSize(r_spd_mips, int(uMipLevel)).xy; +} + +FfxFloat32x2 SampleSPDMipLevel(FfxFloat32x2 fUV, FfxUInt32 mipLevel) +{ + return textureLod(sampler2D(r_spd_mips, s_LinearClamp), fUV, float(mipLevel)).rg; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_INPUT_DEPTH) +layout (set = 0, binding = FSR3UPSCALER_BIND_SRV_INPUT_DEPTH) uniform texture2D r_input_depth; + +FfxFloat32 LoadInputDepth(FfxInt32x2 iPxPos) +{ + return texelFetch(r_input_depth, iPxPos, 0).r; +} + +FfxFloat32 SampleInputDepth(FfxFloat32x2 fUV) +{ + return textureLod(sampler2D(r_input_depth, s_LinearClamp), fUV, 0.0).x; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_REACTIVE_MASK) +layout (set = 0, binding = FSR3UPSCALER_BIND_SRV_REACTIVE_MASK) uniform texture2D r_reactive_mask; + +FfxFloat32 LoadReactiveMask(FfxInt32x2 iPxPos) +{ + return texelFetch(r_reactive_mask, FfxInt32x2(iPxPos), 0).r * cbFSR3Upscaler.fReactivenessScale; +} + +FfxInt32x2 GetReactiveMaskResourceDimensions() +{ + return textureSize(r_reactive_mask, 0).xy; +} + +FfxFloat32 SampleReactiveMask(FfxFloat32x2 fUV) +{ + return textureLod(sampler2D(r_reactive_mask, s_LinearClamp), fUV, 0.0).x * cbFSR3Upscaler.fReactivenessScale; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK) +layout (set = 0, binding = FSR3UPSCALER_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK) uniform texture2D r_transparency_and_composition_mask; + +FfxFloat32 LoadTransparencyAndCompositionMask(FfxUInt32x2 iPxPos) +{ + return texelFetch(r_transparency_and_composition_mask, FfxInt32x2(iPxPos), 0).r; +} + +FfxInt32x2 GetTransparencyAndCompositionMaskResourceDimensions() +{ + return textureSize(r_transparency_and_composition_mask, 0).xy; +} + +FfxFloat32 SampleTransparencyAndCompositionMask(FfxFloat32x2 fUV) +{ + return textureLod(sampler2D(r_transparency_and_composition_mask, s_LinearClamp), fUV, 0.0).x; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_INPUT_COLOR) +layout (set = 0, binding = FSR3UPSCALER_BIND_SRV_INPUT_COLOR) uniform texture2D r_input_color_jittered; + +FfxFloat32x3 LoadInputColor(FfxInt32x2 iPxPos) +{ + return texelFetch(r_input_color_jittered, iPxPos, 0).rgb; +} + +FfxFloat32x3 SampleInputColor(FfxFloat32x2 fUV) +{ + return textureLod(sampler2D(r_input_color_jittered, s_LinearClamp), fUV, 0.0).rgb; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_INPUT_MOTION_VECTORS) +layout (set = 0, binding = FSR3UPSCALER_BIND_SRV_INPUT_MOTION_VECTORS) uniform texture2D r_input_motion_vectors; + +FfxFloat32x2 LoadInputMotionVector(FfxInt32x2 iPxDilatedMotionVectorPos) +{ + FfxFloat32x2 fSrcMotionVector = texelFetch(r_input_motion_vectors, iPxDilatedMotionVectorPos, 0).xy; + + FfxFloat32x2 fUvMotionVector = fSrcMotionVector * MotionVectorScale(); + +#if FFX_FSR3UPSCALER_OPTION_JITTERED_MOTION_VECTORS + fUvMotionVector -= MotionVectorJitterCancellation(); +#endif + + return fUvMotionVector; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_INTERNAL_UPSCALED) +layout (set = 0, binding = FSR3UPSCALER_BIND_SRV_INTERNAL_UPSCALED) uniform texture2D r_internal_upscaled_color; + +FfxFloat32x4 LoadHistory(FfxInt32x2 iPxHistory) +{ + return texelFetch(r_internal_upscaled_color, iPxHistory, 0); +} + +FfxFloat32x4 SampleHistory(FfxFloat32x2 fUV) +{ + return textureLod(sampler2D(r_internal_upscaled_color, s_LinearClamp), fUV, 0.0); +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_LUMA_HISTORY) +layout (set = 0, binding = FSR3UPSCALER_BIND_UAV_LUMA_HISTORY, rgba8) uniform image2D rw_luma_history; + +void StoreLumaHistory(FfxInt32x2 iPxPos, FfxFloat32x4 fLumaHistory) +{ + imageStore(rw_luma_history, iPxPos, fLumaHistory); +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_LUMA_HISTORY) +layout (set = 0, binding = FSR3UPSCALER_BIND_SRV_LUMA_HISTORY) uniform texture2D r_luma_history; + +FfxFloat32x4 LoadLumaHistory(FfxInt32x2 iPxPos) +{ + return texelFetch(r_luma_history, iPxPos, 0); +} + +FfxFloat32x4 SampleLumaHistory(FfxFloat32x2 fUV) +{ + return textureLod(sampler2D(r_luma_history, s_LinearClamp), fUV, 0.0); +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_RCAS_INPUT) +layout (set = 0, binding = FSR3UPSCALER_BIND_SRV_RCAS_INPUT) uniform texture2D r_rcas_input; + +FfxFloat32x4 LoadRCAS_Input(FfxInt32x2 iPxPos) +{ + return texelFetch(r_rcas_input, iPxPos, 0); +} + +FfxFloat32x3 SampleRCAS_Input(FfxFloat32x2 fUV) +{ + return textureLod(sampler2D(r_rcas_input, s_LinearClamp), fUV, 0.0).rgb; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_INTERNAL_UPSCALED) +layout (set = 0, binding = FSR3UPSCALER_BIND_UAV_INTERNAL_UPSCALED, rgba16f) writeonly uniform image2D rw_internal_upscaled_color; + +void StoreReprojectedHistory(FfxInt32x2 iPxHistory, FfxFloat32x4 fHistory) +{ + imageStore(rw_internal_upscaled_color, iPxHistory, fHistory); +} + +void StoreInternalColorAndWeight(FfxInt32x2 iPxPos, FfxFloat32x4 fColorAndWeight) +{ + imageStore(rw_internal_upscaled_color, iPxPos, fColorAndWeight); +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_UPSCALED_OUTPUT) +layout (set = 0, binding = FSR3UPSCALER_BIND_UAV_UPSCALED_OUTPUT /* app controlled format */) writeonly uniform image2D rw_upscaled_output; + +void StoreUpscaledOutput(FfxInt32x2 iPxPos, FfxFloat32x3 fColor) +{ + imageStore(rw_upscaled_output, iPxPos, FfxFloat32x4(fColor, 1.0)); +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_ACCUMULATION) +layout(set = 0, binding = FSR3UPSCALER_BIND_SRV_ACCUMULATION) uniform texture2D r_accumulation; + +FfxFloat32 SampleAccumulation(FfxFloat32x2 fUV) +{ + return textureLod(sampler2D(r_accumulation, s_LinearClamp), fUV, 0.0).x; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_ACCUMULATION) +layout (set = 0, binding = FSR3UPSCALER_BIND_UAV_ACCUMULATION, r8) uniform image2D rw_accumulation; + +void StoreAccumulation(FfxInt32x2 iPxPos, FfxFloat32 fAccumulation) +{ + imageStore(rw_accumulation, iPxPos, vec4(fAccumulation, 0.0, 0.0, 0.0)); +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_SHADING_CHANGE) +layout(set = 0, binding = FSR3UPSCALER_BIND_SRV_SHADING_CHANGE) uniform texture2D r_shading_change; + +FfxFloat32 LoadShadingChange(FfxInt32x2 iPxPos) +{ + return texelFetch(r_shading_change, iPxPos, 0).x * cbFSR3Upscaler.fShadingChangeScale; +} + +FfxFloat32 SampleShadingChange(FfxFloat32x2 fUV) +{ + return textureLod(sampler2D(r_shading_change, s_LinearClamp), fUV, 0.0).x * cbFSR3Upscaler.fShadingChangeScale; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_SHADING_CHANGE) +layout (set = 0, binding = FSR3UPSCALER_BIND_UAV_SHADING_CHANGE, r8) uniform image2D rw_shading_change; + +void StoreShadingChange(FfxInt32x2 iPxPos, FfxFloat32 fShadingChange) +{ + imageStore(rw_shading_change, iPxPos, vec4(fShadingChange, 0.0, 0.0, 0.0)); +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_FARTHEST_DEPTH) +layout(set = 0, binding = FSR3UPSCALER_BIND_SRV_FARTHEST_DEPTH) uniform texture2D r_farthest_depth; + +FfxInt32x2 GetFarthestDepthResourceDimensions() +{ + return textureSize(r_farthest_depth, 0).xy; +} + +FfxFloat32 LoadFarthestDepth(FfxInt32x2 iPxPos) +{ + return texelFetch(r_farthest_depth, iPxPos, 0).x; +} + +FfxFloat32 SampleFarthestDepth(FfxFloat32x2 fUV) +{ + return textureLod(sampler2D(r_farthest_depth, s_LinearClamp), fUV, 0.0).x; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_FARTHEST_DEPTH) +layout (set = 0, binding = FSR3UPSCALER_BIND_UAV_FARTHEST_DEPTH, r16f) uniform image2D rw_farthest_depth; + +void StoreFarthestDepth(FfxInt32x2 iPxPos, FfxFloat32 fDepth) +{ + imageStore(rw_farthest_depth, iPxPos, vec4(fDepth, 0.0, 0.0, 0.0)); +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_FARTHEST_DEPTH_MIP1) +layout(set = 0, binding = FSR3UPSCALER_BIND_SRV_FARTHEST_DEPTH_MIP1) uniform texture2D r_farthest_depth_mip1; + +FfxInt32x2 GetFarthestDepthMip1ResourceDimensions() +{ + return textureSize(r_farthest_depth_mip1, 0).xy; +} + +FfxFloat32 LoadFarthestDepthMip1(FfxInt32x2 iPxPos) +{ + return texelFetch(r_farthest_depth_mip1, iPxPos, 0).x; +} + +FfxFloat32 SampleFarthestDepthMip1(FfxFloat32x2 fUV) +{ + return textureLod(sampler2D(r_farthest_depth_mip1, s_LinearClamp), fUV, 0.0).x; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_FARTHEST_DEPTH_MIP1) +layout (set = 0, binding = FSR3UPSCALER_BIND_UAV_FARTHEST_DEPTH_MIP1, r16f) uniform image2D rw_farthest_depth_mip1; + +void StoreFarthestDepthMip1(FfxInt32x2 iPxPos, FfxFloat32 fDepth) +{ + imageStore(rw_farthest_depth_mip1, iPxPos, vec4(fDepth, 0.0, 0.0, 0.0)); +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_CURRENT_LUMA) +layout(set = 0, binding = FSR3UPSCALER_BIND_SRV_CURRENT_LUMA) uniform texture2D r_current_luma; + +FfxFloat32 LoadCurrentLuma(FfxInt32x2 iPxPos) +{ + return texelFetch(r_current_luma, iPxPos, 0).r; +} + +FfxFloat32 SampleCurrentLuma(FfxFloat32x2 uv) +{ + return textureLod(sampler2D(r_current_luma, s_LinearClamp), uv, 0.0).r; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_CURRENT_LUMA) +layout (set = 0, binding = FSR3UPSCALER_BIND_UAV_CURRENT_LUMA, r16f) uniform image2D rw_current_luma; + +void StoreCurrentLuma(FfxInt32x2 iPxPos, FfxFloat32 fLuma) +{ + imageStore(rw_current_luma, iPxPos, vec4(fLuma, 0.0, 0.0, 0.0)); +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_LUMA_INSTABILITY) +layout(set = 0, binding = FSR3UPSCALER_BIND_SRV_LUMA_INSTABILITY) uniform texture2D r_luma_instability; + +FfxFloat32 SampleLumaInstability(FfxFloat32x2 uv) +{ + return textureLod(sampler2D(r_luma_instability, s_LinearClamp), uv, 0.0).x; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_LUMA_INSTABILITY) +layout (set = 0, binding = FSR3UPSCALER_BIND_UAV_LUMA_INSTABILITY, r16f) uniform image2D rw_luma_instability; + +void StoreLumaInstability(FfxInt32x2 iPxPos, FfxFloat32 fLumaInstability) +{ + imageStore(rw_luma_instability, iPxPos, vec4(fLumaInstability, 0.0, 0.0, 0.0)); +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_PREVIOUS_LUMA) +layout(set = 0, binding = FSR3UPSCALER_BIND_SRV_PREVIOUS_LUMA) uniform texture2D r_previous_luma; + +FfxFloat32 LoadPreviousLuma(FfxInt32x2 iPxPos) +{ + return texelFetch(r_previous_luma, iPxPos, 0).r; +} + +FfxFloat32 SamplePreviousLuma(FfxFloat32x2 uv) +{ + return textureLod(sampler2D(r_previous_luma, s_LinearClamp), uv, 0.0).r; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_NEW_LOCKS) +layout(set = 0, binding = FSR3UPSCALER_BIND_SRV_NEW_LOCKS) uniform texture2D r_new_locks; + +FfxFloat32 LoadNewLocks(FfxInt32x2 iPxPos) +{ + return texelFetch(r_new_locks, iPxPos, 0).r; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_NEW_LOCKS) +layout(set = 0, binding = FSR3UPSCALER_BIND_UAV_NEW_LOCKS, r8) uniform image2D rw_new_locks; + +FfxFloat32 LoadRwNewLocks(FfxInt32x2 iPxPos) +{ + return imageLoad(rw_new_locks, iPxPos).r; +} + +void StoreNewLocks(FfxInt32x2 iPxPos, FfxFloat32 newLock) +{ + imageStore(rw_new_locks, iPxPos, vec4(newLock, 0, 0, 0)); +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_RECONSTRUCTED_PREV_NEAREST_DEPTH) +layout (set = 0, binding = FSR3UPSCALER_BIND_SRV_RECONSTRUCTED_PREV_NEAREST_DEPTH) uniform utexture2D r_reconstructed_previous_nearest_depth; + +FfxFloat32 LoadReconstructedPrevDepth(FfxInt32x2 iPxPos) +{ + return uintBitsToFloat(texelFetch(r_reconstructed_previous_nearest_depth, iPxPos, 0).r); +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH) +layout (set = 0, binding = FSR3UPSCALER_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH, r32ui) uniform uimage2D rw_reconstructed_previous_nearest_depth; + +void StoreReconstructedDepth(FfxInt32x2 iPxSample, FfxFloat32 fDepth) +{ + FfxUInt32 uDepth = floatBitsToUint(fDepth); + + #if FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH + imageAtomicMax(rw_reconstructed_previous_nearest_depth, iPxSample, uDepth); + #else + imageAtomicMin(rw_reconstructed_previous_nearest_depth, iPxSample, uDepth); // min for standard, max for inverted depth + #endif +} + +void SetReconstructedDepth(FfxInt32x2 iPxSample, FfxUInt32 uValue) +{ + imageStore(rw_reconstructed_previous_nearest_depth, iPxSample, uvec4(uValue, 0, 0, 0)); +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_DILATED_DEPTH) +layout (set = 0, binding = FSR3UPSCALER_BIND_UAV_DILATED_DEPTH, r32f) writeonly uniform image2D rw_dilated_depth; + +void StoreDilatedDepth(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32 fDepth) +{ + imageStore(rw_dilated_depth, iPxPos, vec4(fDepth, 0.0, 0.0, 0.0)); +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_DILATED_MOTION_VECTORS) +layout (set = 0, binding = FSR3UPSCALER_BIND_UAV_DILATED_MOTION_VECTORS, rg16f) writeonly uniform image2D rw_dilated_motion_vectors; + +void StoreDilatedMotionVector(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x2 fMotionVector) +{ + imageStore(rw_dilated_motion_vectors, iPxPos, vec4(fMotionVector, 0.0, 0.0)); +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_DILATED_MOTION_VECTORS) +layout (set = 0, binding = FSR3UPSCALER_BIND_SRV_DILATED_MOTION_VECTORS) uniform texture2D r_dilated_motion_vectors; + +FfxFloat32x2 LoadDilatedMotionVector(FfxInt32x2 iPxInput) +{ + return texelFetch(r_dilated_motion_vectors, iPxInput, 0).xy; +} + +FfxFloat32x2 SampleDilatedMotionVector(FfxFloat32x2 fUV) +{ + return textureLod(sampler2D(r_dilated_motion_vectors, s_LinearClamp), fUV, 0.0).xy; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_DILATED_DEPTH) +layout (set = 0, binding = FSR3UPSCALER_BIND_SRV_DILATED_DEPTH) uniform texture2D r_dilated_depth; + +FfxFloat32 LoadDilatedDepth(FfxInt32x2 iPxInput) +{ + return texelFetch(r_dilated_depth, iPxInput, 0).r; +} + +FfxFloat32 SampleDilatedDepth(FfxFloat32x2 fUV) +{ + return textureLod(sampler2D(r_dilated_depth, s_LinearClamp), fUV, 0.0).r; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_INPUT_EXPOSURE) +layout (set = 0, binding = FSR3UPSCALER_BIND_SRV_INPUT_EXPOSURE) uniform texture2D r_input_exposure; + +FfxFloat32 Exposure() +{ + FfxFloat32 exposure = texelFetch(r_input_exposure, FfxInt32x2(0, 0), 0).x; + + if (exposure == 0.0) { + exposure = 1.0; + } + + return exposure; +} +#endif + +// BEGIN: FSR3UPSCALER_BIND_SRV_LANCZOS_LUT +#if defined(FSR3UPSCALER_BIND_SRV_LANCZOS_LUT) +layout (set = 0, binding = FSR3UPSCALER_BIND_SRV_LANCZOS_LUT) uniform texture2D r_lanczos_lut; +#endif + +FfxFloat32 SampleLanczos2Weight(FfxFloat32 x) +{ +#if defined(FSR3UPSCALER_BIND_SRV_LANCZOS_LUT) + return textureLod(sampler2D(r_lanczos_lut, s_LinearClamp), FfxFloat32x2(x / 2.0, 0.5), 0.0).x; +#else + return 0.f; +#endif +} +// END: FSR3UPSCALER_BIND_SRV_LANCZOS_LUT + +#if defined(FSR3UPSCALER_BIND_SRV_DILATED_REACTIVE_MASKS) +layout (set = 0, binding = FSR3UPSCALER_BIND_SRV_DILATED_REACTIVE_MASKS) uniform texture2D r_dilated_reactive_masks; + +FfxFloat32x4 SampleDilatedReactiveMasks(FfxFloat32x2 fUV) +{ + return textureLod(sampler2D(r_dilated_reactive_masks, s_LinearClamp), fUV, 0.0); +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_DILATED_REACTIVE_MASKS) +layout (set = 0, binding = FSR3UPSCALER_BIND_UAV_DILATED_REACTIVE_MASKS, rgba8) writeonly uniform image2D rw_dilated_reactive_masks; + +void StoreDilatedReactiveMasks(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x4 fDilatedReactiveMasks) +{ + imageStore(rw_dilated_reactive_masks, iPxPos, fDilatedReactiveMasks); +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_INPUT_OPAQUE_ONLY) +layout (set = 0, binding = FSR3UPSCALER_BIND_SRV_INPUT_OPAQUE_ONLY) uniform texture2D r_input_opaque_only; + +FfxFloat32x3 LoadOpaqueOnly(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos) +{ + return texelFetch(r_input_opaque_only, iPxPos, 0).xyz; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_PREV_PRE_ALPHA_COLOR) +layout(set = 0, binding = FSR3UPSCALER_BIND_SRV_PREV_PRE_ALPHA_COLOR) uniform texture2D r_input_prev_color_pre_alpha; + +FfxFloat32x3 LoadPrevPreAlpha(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos) +{ + return texelFetch(r_input_prev_color_pre_alpha, iPxPos, 0).xyz; +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_PREV_POST_ALPHA_COLOR) +layout(set = 0, binding = FSR3UPSCALER_BIND_SRV_PREV_POST_ALPHA_COLOR) uniform texture2D r_input_prev_color_post_alpha; + +FfxFloat32x3 LoadPrevPostAlpha(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos) +{ + return texelFetch(r_input_prev_color_post_alpha, iPxPos, 0).xyz; +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_AUTOREACTIVE) && \ + defined(FSR3UPSCALER_BIND_UAV_AUTOCOMPOSITION) + +layout(set = 0, binding = FSR3UPSCALER_BIND_UAV_AUTOREACTIVE, r32f) uniform image2D rw_output_autoreactive; +layout(set = 0, binding = FSR3UPSCALER_BIND_UAV_AUTOCOMPOSITION, r32f) uniform image2D rw_output_autocomposition; + +void StoreAutoReactive(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos, FFX_PARAMETER_IN FFX_MIN16_F2 fReactive) +{ + imageStore(rw_output_autoreactive, iPxPos, FfxFloat32x4(FfxFloat32(fReactive.x), 0.0, 0.0, 0.0)); + + imageStore(rw_output_autocomposition, iPxPos, FfxFloat32x4(FfxFloat32(fReactive.y), 0.0, 0.0, 0.0)); +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_PREV_PRE_ALPHA_COLOR) +layout(set = 0, binding = FSR3UPSCALER_BIND_UAV_PREV_PRE_ALPHA_COLOR, r11f_g11f_b10f) uniform image2D rw_output_prev_color_pre_alpha; + +void StorePrevPreAlpha(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos, FFX_PARAMETER_IN FFX_MIN16_F3 color) +{ + imageStore(rw_output_prev_color_pre_alpha, iPxPos, FfxFloat32x4(color, 0.0)); +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_PREV_POST_ALPHA_COLOR) +layout(set = 0, binding = FSR3UPSCALER_BIND_UAV_PREV_POST_ALPHA_COLOR, r11f_g11f_b10f) uniform image2D rw_output_prev_color_post_alpha; + +void StorePrevPostAlpha(FFX_PARAMETER_IN FFX_MIN16_I2 iPxPos, FFX_PARAMETER_IN FFX_MIN16_F3 color) +{ + imageStore(rw_output_prev_color_post_alpha, iPxPos, FfxFloat32x4(color, 0.0)); +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_FRAME_INFO) +layout (set = 0, binding = FSR3UPSCALER_BIND_UAV_FRAME_INFO, rgba32f) uniform image2D rw_frame_info; + +FfxFloat32x4 LoadFrameInfo() +{ + return imageLoad(rw_frame_info, ivec2(0, 0)); +} + +void StoreFrameInfo(FfxFloat32x4 fInfo) +{ + imageStore(rw_frame_info, ivec2(0, 0), fInfo); +} +#endif + +#if defined(FSR3UPSCALER_BIND_SRV_FRAME_INFO) +layout(set = 0, binding = FSR3UPSCALER_BIND_SRV_FRAME_INFO) uniform texture2D r_frame_info; + +FfxFloat32x4 FrameInfo() +{ + return texelFetch(r_frame_info, ivec2(0, 0), 0); +} +#endif + +#if defined(FSR3UPSCALER_BIND_UAV_SPD_MIPS_LEVEL_0) && \ + defined(FSR3UPSCALER_BIND_UAV_SPD_MIPS_LEVEL_1) && \ + defined(FSR3UPSCALER_BIND_UAV_SPD_MIPS_LEVEL_2) && \ + defined(FSR3UPSCALER_BIND_UAV_SPD_MIPS_LEVEL_3) && \ + defined(FSR3UPSCALER_BIND_UAV_SPD_MIPS_LEVEL_4) && \ + defined(FSR3UPSCALER_BIND_UAV_SPD_MIPS_LEVEL_5) + +layout (set = 0, binding = FSR3UPSCALER_BIND_UAV_SPD_MIPS_LEVEL_0, rg16f) uniform image2D rw_spd_mip0; +layout (set = 0, binding = FSR3UPSCALER_BIND_UAV_SPD_MIPS_LEVEL_1, rg16f) uniform image2D rw_spd_mip1; +layout (set = 0, binding = FSR3UPSCALER_BIND_UAV_SPD_MIPS_LEVEL_2, rg16f) uniform image2D rw_spd_mip2; +layout (set = 0, binding = FSR3UPSCALER_BIND_UAV_SPD_MIPS_LEVEL_3, rg16f) uniform image2D rw_spd_mip3; +layout (set = 0, binding = FSR3UPSCALER_BIND_UAV_SPD_MIPS_LEVEL_4, rg16f) uniform image2D rw_spd_mip4; +layout (set = 0, binding = FSR3UPSCALER_BIND_UAV_SPD_MIPS_LEVEL_5, rg16f) coherent uniform image2D rw_spd_mip5; + +FfxFloat32x2 RWLoadPyramid(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxUInt32 index) +{ +#define LOAD(idx) \ + if (index == idx) \ + { \ + return imageLoad(rw_spd_mip##idx, iPxPos).xy; \ + } + LOAD(0); + LOAD(1); + LOAD(2); + LOAD(3); + LOAD(4); + LOAD(5); + + return FfxFloat32x2(0.0, 0.0); + +#undef LOAD +} + +void StorePyramid(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x2 outValue, FFX_PARAMETER_IN FfxUInt32 index) +{ +#define STORE(idx) \ + if (index == idx) \ + { \ + imageStore(rw_spd_mip##idx, iPxPos, vec4(outValue, 0.0, 0.0)); \ + } + + STORE(0); + STORE(1); + STORE(2); + STORE(3); + STORE(4); + STORE(5); + +#undef STORE +} +#endif + +#if defined FSR3UPSCALER_BIND_UAV_SPD_GLOBAL_ATOMIC +layout (set = 0, binding = FSR3UPSCALER_BIND_UAV_SPD_GLOBAL_ATOMIC, r32ui) coherent uniform uimage2D rw_spd_global_atomic; + +void SPD_IncreaseAtomicCounter(inout FfxUInt32 spdCounter) +{ + spdCounter = imageAtomicAdd(rw_spd_global_atomic, ivec2(0, 0), 1); +} + +void SPD_ResetAtomicCounter() +{ + imageStore(rw_spd_global_atomic, ivec2(0, 0), uvec4(0)); +} +#endif + +#endif // #if defined(FFX_GPU) diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_common.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_common.h new file mode 100644 index 000000000..87aa596db --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_common.h @@ -0,0 +1,403 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if !defined(FFX_FSR3UPSCALER_COMMON_H) +#define FFX_FSR3UPSCALER_COMMON_H + +#if defined(FFX_GPU) +#pragma warning(error : 3206) // treat vector truncation warnings as errors +#pragma warning(disable : 3205) // conversion from larger type to smaller +#pragma warning(disable : 3571) // in ffxPow(f, e), f could be negative + +FFX_STATIC const FfxFloat32 FSR3UPSCALER_FP16_MIN = 6.10e-05f; +FFX_STATIC const FfxFloat32 FSR3UPSCALER_FP16_MAX = 65504.0f; +FFX_STATIC const FfxFloat32 FSR3UPSCALER_EPSILON = FSR3UPSCALER_FP16_MIN; +FFX_STATIC const FfxFloat32 FSR3UPSCALER_TONEMAP_EPSILON = FSR3UPSCALER_FP16_MIN; +FFX_STATIC const FfxFloat32 FSR3UPSCALER_FP32_MAX = 3.402823466e+38f; +FFX_STATIC const FfxFloat32 FSR3UPSCALER_FP32_MIN = 1.175494351e-38f; + +// Reconstructed depth usage +FFX_STATIC const FfxFloat32 fReconstructedDepthBilinearWeightThreshold = FSR3UPSCALER_EPSILON * 10; + +FfxFloat32 ReconstructedDepthMvPxThreshold(FfxFloat32 fNearestDepthInMeters) +{ + return ffxLerp(0.25f, 0.75f, ffxSaturate(fNearestDepthInMeters / 100.0f)); +} + +// Accumulation +FFX_STATIC const FfxFloat32 fUpsampleLanczosWeightScale = 1.0f / 16.0f; +FFX_STATIC const FfxFloat32 fAverageLanczosWeightPerFrame = 0.74f * fUpsampleLanczosWeightScale; // Average lanczos weight for jitter accumulated samples +FFX_STATIC const FfxFloat32 fAccumulationMaxOnMotion = 3.0f * fUpsampleLanczosWeightScale; + +#define SHADING_CHANGE_SET_SIZE 5 +FFX_STATIC const FfxInt32 iShadingChangeMipStart = 0; +FFX_STATIC const FfxFloat32 fShadingChangeSamplePow = 1.0f / 1.0f; + + +FFX_STATIC const FfxFloat32 fLockThreshold = 1.0f; +FFX_STATIC const FfxFloat32 fLockMax = 2.0f; + +FFX_STATIC const FfxInt32 REACTIVE = 0; +FFX_STATIC const FfxInt32 DISOCCLUSION = 1; +FFX_STATIC const FfxInt32 SHADING_CHANGE = 2; +FFX_STATIC const FfxInt32 ACCUMULAION = 3; + +FFX_STATIC const FfxInt32 FRAME_INFO_EXPOSURE = 0; +FFX_STATIC const FfxInt32 FRAME_INFO_LOG_LUMA = 1; +FFX_STATIC const FfxInt32 FRAME_INFO_SCENE_AVERAGE_LUMA = 2; + +FfxBoolean TonemapFirstFrame() +{ + const FfxBoolean bEnabled = true; + return FrameIndex() == 0 && bEnabled; +} + +FfxFloat32 AverageLanczosWeightPerFrame() +{ + return 0.74f; +} + +FfxInt32x2 ShadingChangeRenderSize() +{ + return FfxInt32x2(RenderSize() * 0.5f); +} + +FfxInt32x2 ShadingChangeMaxRenderSize() +{ + return FfxInt32x2(MaxRenderSize() * 0.5f); +} + +FfxInt32x2 PreviousFrameShadingChangeRenderSize() +{ + return FfxInt32x2(PreviousFrameRenderSize() * 0.5f); +} + +#if defined(FSR3UPSCALER_BIND_SRV_FRAME_INFO) +FfxFloat32 SceneAverageLuma() +{ + return FrameInfo()[FRAME_INFO_SCENE_AVERAGE_LUMA]; +} +#endif + +// Auto exposure +FFX_STATIC const FfxFloat32 resetAutoExposureAverageSmoothing = 1e4f; + +struct AccumulationPassCommonParams +{ + FfxInt32x2 iPxHrPos; + FfxFloat32x2 fHrUv; + FfxFloat32x2 fLrUvJittered; + FfxFloat32x2 fLrUv_HwSampler; + FfxFloat32x2 fMotionVector; + FfxFloat32x2 fReprojectedHrUv; + FfxFloat32 f4KVelocity; + FfxFloat32 fDisocclusion; + FfxFloat32 fReactiveMask; + FfxFloat32 fShadingChange; + FfxFloat32 fAccumulation; + FfxFloat32 fLumaInstabilityFactor; + FfxFloat32 fFarthestDepthInMeters; + + FfxBoolean bIsExistingSample; + FfxBoolean bIsNewSample; +}; + +FfxFloat32 Get4KVelocity(FfxFloat32x2 fMotionVector) +{ + return length(fMotionVector * FfxFloat32x2(3840.0f, 2160.0f)); +} + +struct RectificationBox +{ + FfxFloat32x3 boxCenter; + FfxFloat32x3 boxVec; + FfxFloat32x3 aabbMin; + FfxFloat32x3 aabbMax; + FfxFloat32 fBoxCenterWeight; +}; + +struct AccumulationPassData +{ + RectificationBox clippingBox; + FfxFloat32x3 fUpsampledColor; + FfxFloat32 fUpsampledWeight; + FfxFloat32x3 fHistoryColor; + FfxFloat32 fHistoryWeight; + FfxFloat32 fLock; + FfxFloat32 fLockContributionThisFrame; +}; + +void RectificationBoxAddInitialSample(FFX_PARAMETER_INOUT RectificationBox rectificationBox, const FfxFloat32x3 colorSample, const FfxFloat32 fSampleWeight) +{ + rectificationBox.aabbMin = colorSample; + rectificationBox.aabbMax = colorSample; + + FfxFloat32x3 weightedSample = colorSample * fSampleWeight; + rectificationBox.boxCenter = weightedSample; + rectificationBox.boxVec = colorSample * weightedSample; + rectificationBox.fBoxCenterWeight = fSampleWeight; +} + +void RectificationBoxAddSample(FfxBoolean bInitialSample, FFX_PARAMETER_INOUT RectificationBox rectificationBox, const FfxFloat32x3 colorSample, const FfxFloat32 fSampleWeight) +{ + if (bInitialSample) { + RectificationBoxAddInitialSample(rectificationBox, colorSample, fSampleWeight); + } else { + rectificationBox.aabbMin = ffxMin(rectificationBox.aabbMin, colorSample); + rectificationBox.aabbMax = ffxMax(rectificationBox.aabbMax, colorSample); + + FfxFloat32x3 weightedSample = colorSample * fSampleWeight; + rectificationBox.boxCenter += weightedSample; + rectificationBox.boxVec += colorSample * weightedSample; + rectificationBox.fBoxCenterWeight += fSampleWeight; + } +} + +void RectificationBoxComputeVarianceBoxData(FFX_PARAMETER_INOUT RectificationBox rectificationBox) +{ + rectificationBox.fBoxCenterWeight = (abs(rectificationBox.fBoxCenterWeight) > FfxFloat32(FSR3UPSCALER_FP32_MIN) ? rectificationBox.fBoxCenterWeight : FfxFloat32(1.f)); + rectificationBox.boxCenter /= rectificationBox.fBoxCenterWeight; + rectificationBox.boxVec /= rectificationBox.fBoxCenterWeight; + FfxFloat32x3 stdDev = sqrt(abs(rectificationBox.boxVec - rectificationBox.boxCenter * rectificationBox.boxCenter)); + rectificationBox.boxVec = stdDev; +} + +FfxFloat32x3 SafeRcp3(FfxFloat32x3 v) +{ + return (all(FFX_NOT_EQUAL(v, FfxFloat32x3(0, 0, 0)))) ? (FfxFloat32x3(1, 1, 1) / v) : FfxFloat32x3(0, 0, 0); +} + +FfxFloat32 MinDividedByMax(const FfxFloat32 v0, const FfxFloat32 v1, const FfxFloat32 fOnZeroReturnValue) +{ + const FfxFloat32 m = ffxMax(v0, v1); + return m != 0 ? ffxMin(v0, v1) / m : fOnZeroReturnValue; +} + +FfxFloat32 MinDividedByMax(const FfxFloat32 v0, const FfxFloat32 v1) +{ + const FfxFloat32 m = ffxMax(v0, v1); + return m != 0 ? ffxMin(v0, v1) / m : 0; +} + +FfxFloat32x3 YCoCgToRGB(FfxFloat32x3 fYCoCg) +{ + FfxFloat32x3 fRgb; + + fRgb = FfxFloat32x3( + fYCoCg.x + fYCoCg.y - fYCoCg.z, + fYCoCg.x + fYCoCg.z, + fYCoCg.x - fYCoCg.y - fYCoCg.z); + + return fRgb; +} + +FfxFloat32x3 RGBToYCoCg(FfxFloat32x3 fRgb) +{ + FfxFloat32x3 fYCoCg; + + fYCoCg = FfxFloat32x3( + 0.25f * fRgb.r + 0.5f * fRgb.g + 0.25f * fRgb.b, + 0.5f * fRgb.r - 0.5f * fRgb.b, + -0.25f * fRgb.r + 0.5f * fRgb.g - 0.25f * fRgb.b); + + return fYCoCg; +} + +FfxFloat32 RGBToLuma(FfxFloat32x3 fLinearRgb) +{ + return dot(fLinearRgb, FfxFloat32x3(0.2126f, 0.7152f, 0.0722f)); +} + +FfxFloat32 RGBToPerceivedLuma(FfxFloat32x3 fLinearRgb) +{ + FfxFloat32 fLuminance = RGBToLuma(fLinearRgb); + + FfxFloat32 fPercievedLuminance = 0; + if (fLuminance <= 216.0f / 24389.0f) { + fPercievedLuminance = fLuminance * (24389.0f / 27.0f); + } + else { + fPercievedLuminance = ffxPow(fLuminance, 1.0f / 3.0f) * 116.0f - 16.0f; + } + + return fPercievedLuminance * 0.01f; +} + +FfxFloat32x3 Tonemap(FfxFloat32x3 fRgb) +{ + return fRgb / (ffxMax(ffxMax(0.f, fRgb.r), ffxMax(fRgb.g, fRgb.b)) + 1.f).xxx; +} + +FfxFloat32x3 InverseTonemap(FfxFloat32x3 fRgb) +{ + return fRgb / ffxMax(FSR3UPSCALER_TONEMAP_EPSILON, 1.f - ffxMax(fRgb.r, ffxMax(fRgb.g, fRgb.b))).xxx; +} + +FfxBoolean IsUvInside(FfxFloat32x2 fUv) +{ + return (fUv.x >= 0.0f && fUv.x <= 1.0f) && (fUv.y >= 0.0f && fUv.y <= 1.0f); +} + +FfxInt32x2 ClampLoad(FfxInt32x2 iPxSample, FfxInt32x2 iPxOffset, FfxInt32x2 iTextureSize) +{ + FfxInt32x2 result = iPxSample + iPxOffset; + result.x = ffxMax(0, ffxMin(result.x, iTextureSize.x - 1)); + result.y = ffxMax(0, ffxMin(result.y, iTextureSize.y - 1)); + return result; +} + +FfxFloat32x2 ClampUv(FfxFloat32x2 fUv, FfxInt32x2 iTextureSize, FfxInt32x2 iResourceSize) +{ + const FfxFloat32x2 fSampleLocation = fUv * iTextureSize; + const FfxFloat32x2 fClampedLocation = ffxMax(FfxFloat32x2(0.5f, 0.5f), ffxMin(fSampleLocation, FfxFloat32x2(iTextureSize) - FfxFloat32x2(0.5f, 0.5f))); + const FfxFloat32x2 fClampedUv = fClampedLocation / FfxFloat32x2(iResourceSize); + + return fClampedUv; +} + +FfxBoolean IsOnScreen(FfxInt32x2 pos, FfxInt32x2 size) +{ + return all(FFX_LESS_THAN(FfxUInt32x2(pos), FfxUInt32x2(size))); +} + +FfxFloat32 ComputeAutoExposureFromLavg(FfxFloat32 Lavg) +{ + Lavg = exp(Lavg); + + const FfxFloat32 S = 100.0f; //ISO arithmetic speed + const FfxFloat32 K = 12.5f; + FfxFloat32 ExposureISO100 = log2((Lavg * S) / K); + + const FfxFloat32 q = 0.65f; + FfxFloat32 Lmax = (78.0f / (q * S)) * ffxPow(2.0f, ExposureISO100); + + return 1.0f / Lmax; +} + +FfxInt32x2 ComputeHrPosFromLrPos(FfxInt32x2 iPxLrPos) +{ + FfxFloat32x2 fSrcJitteredPos = FfxFloat32x2(iPxLrPos) + 0.5f - Jitter(); + FfxFloat32x2 fLrPosInHr = (fSrcJitteredPos / RenderSize()) * UpscaleSize(); + FfxInt32x2 iPxHrPos = FfxInt32x2(floor(fLrPosInHr)); + return iPxHrPos; +} + +FfxFloat32x2 ComputeNdc(FfxFloat32x2 fPxPos, FfxInt32x2 iSize) +{ + return fPxPos / FfxFloat32x2(iSize) * FfxFloat32x2(2.0f, -2.0f) + FfxFloat32x2(-1.0f, 1.0f); +} + +FfxFloat32 GetViewSpaceDepth(FfxFloat32 fDeviceDepth) +{ + const FfxFloat32x4 fDeviceToViewDepth = DeviceToViewSpaceTransformFactors(); + + // fDeviceToViewDepth details found in ffx_fsr3upscaler.cpp + return (fDeviceToViewDepth[1] / (fDeviceDepth - fDeviceToViewDepth[0])); +} + +FfxFloat32 GetViewSpaceDepthInMeters(FfxFloat32 fDeviceDepth) +{ + return GetViewSpaceDepth(fDeviceDepth) * ViewSpaceToMetersFactor(); +} + +FfxFloat32x3 GetViewSpacePosition(FfxInt32x2 iViewportPos, FfxInt32x2 iViewportSize, FfxFloat32 fDeviceDepth) +{ + const FfxFloat32x4 fDeviceToViewDepth = DeviceToViewSpaceTransformFactors(); + + const FfxFloat32 Z = GetViewSpaceDepth(fDeviceDepth); + + const FfxFloat32x2 fNdcPos = ComputeNdc(iViewportPos, iViewportSize); + const FfxFloat32 X = fDeviceToViewDepth[2] * fNdcPos.x * Z; + const FfxFloat32 Y = fDeviceToViewDepth[3] * fNdcPos.y * Z; + + return FfxFloat32x3(X, Y, Z); +} + +FfxFloat32x3 GetViewSpacePositionInMeters(FfxInt32x2 iViewportPos, FfxInt32x2 iViewportSize, FfxFloat32 fDeviceDepth) +{ + return GetViewSpacePosition(iViewportPos, iViewportSize, fDeviceDepth) * ViewSpaceToMetersFactor(); +} + +FfxFloat32 GetMaxDistanceInMeters() +{ +#if FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH + return GetViewSpaceDepth(0.0f) * ViewSpaceToMetersFactor(); +#else + return GetViewSpaceDepth(1.0f) * ViewSpaceToMetersFactor(); +#endif +} + + +struct BilinearSamplingData +{ + FfxInt32x2 iOffsets[4]; + FfxFloat32 fWeights[4]; + FfxInt32x2 iBasePos; +}; + +BilinearSamplingData GetBilinearSamplingData(FfxFloat32x2 fUv, FfxInt32x2 iSize) +{ + BilinearSamplingData data; + + FfxFloat32x2 fPxSample = (fUv * iSize) - FfxFloat32x2(0.5f, 0.5f); + data.iBasePos = FfxInt32x2(floor(fPxSample)); + FfxFloat32x2 fPxFrac = ffxFract(fPxSample); + + data.iOffsets[0] = FfxInt32x2(0, 0); + data.iOffsets[1] = FfxInt32x2(1, 0); + data.iOffsets[2] = FfxInt32x2(0, 1); + data.iOffsets[3] = FfxInt32x2(1, 1); + + data.fWeights[0] = (1 - fPxFrac.x) * (1 - fPxFrac.y); + data.fWeights[1] = (fPxFrac.x) * (1 - fPxFrac.y); + data.fWeights[2] = (1 - fPxFrac.x) * (fPxFrac.y); + data.fWeights[3] = (fPxFrac.x) * (fPxFrac.y); + + return data; +} + +struct PlaneData +{ + FfxFloat32x3 fNormal; + FfxFloat32 fDistanceFromOrigin; +}; + +PlaneData GetPlaneFromPoints(FfxFloat32x3 fP0, FfxFloat32x3 fP1, FfxFloat32x3 fP2) +{ + PlaneData plane; + + FfxFloat32x3 v0 = fP0 - fP1; + FfxFloat32x3 v1 = fP0 - fP2; + plane.fNormal = normalize(cross(v0, v1)); + plane.fDistanceFromOrigin = -dot(fP0, plane.fNormal); + + return plane; +} + +FfxFloat32 PointToPlaneDistance(PlaneData plane, FfxFloat32x3 fPoint) +{ + return abs(dot(plane.fNormal, fPoint) + plane.fDistanceFromOrigin); +} + +#endif // #if defined(FFX_GPU) + +#endif //!defined(FFX_FSR3UPSCALER_COMMON_H) diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_luma_instability.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_luma_instability.h new file mode 100644 index 000000000..624b7ca94 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_luma_instability.h @@ -0,0 +1,115 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +struct LumaInstabilityFactorData +{ + FfxFloat32x4 fLumaHistory; + FfxFloat32 fLumaInstabilityFactor; +}; + +LumaInstabilityFactorData ComputeLumaInstabilityFactor(LumaInstabilityFactorData data, FfxFloat32 fCurrentFrameLuma, FfxFloat32 fFarthestDepthInMeters) +{ + const FfxInt32 N_MINUS_1 = 0; + const FfxInt32 N_MINUS_2 = 1; + const FfxInt32 N_MINUS_3 = 2; + const FfxInt32 N_MINUS_4 = 3; + + FfxFloat32 fLumaInstability = 0.0f; + const FfxFloat32 fDiffs0 = (fCurrentFrameLuma - data.fLumaHistory[N_MINUS_1]); + const FfxFloat32 fSimilarity0 = MinDividedByMax(fCurrentFrameLuma, data.fLumaHistory[N_MINUS_1], 1.0f); + + FfxFloat32 fMaxSimilarity = fSimilarity0; + + if (fSimilarity0 < 1.0f) { + for (int i = N_MINUS_2; i <= N_MINUS_4; i++) { + const FfxFloat32 fDiffs1 = (fCurrentFrameLuma - data.fLumaHistory[i]); + const FfxFloat32 fSimilarity1 = MinDividedByMax(fCurrentFrameLuma, data.fLumaHistory[i]); + + if (sign(fDiffs0) == sign(fDiffs1)) { + + fMaxSimilarity = ffxMax(fMaxSimilarity, fSimilarity1); + } + } + + fLumaInstability = FfxFloat32(fMaxSimilarity > fSimilarity0); + } + + // Shift history + data.fLumaHistory[N_MINUS_4] = data.fLumaHistory[N_MINUS_3]; + data.fLumaHistory[N_MINUS_3] = data.fLumaHistory[N_MINUS_2]; + data.fLumaHistory[N_MINUS_2] = data.fLumaHistory[N_MINUS_1]; + data.fLumaHistory[N_MINUS_1] = fCurrentFrameLuma; + + data.fLumaHistory /= Exposure(); + + data.fLumaInstabilityFactor = fLumaInstability * FfxFloat32(data.fLumaHistory[N_MINUS_4] != 0); + + return data; +} + +void LumaInstability(FfxInt32x2 iPxPos) +{ + LumaInstabilityFactorData data; + data.fLumaInstabilityFactor = 0.0f; + data.fLumaHistory = FfxFloat32x4(0.0f, 0.0f, 0.0f, 0.0f); + + const FfxFloat32x2 fDilatedMotionVector = LoadDilatedMotionVector(iPxPos); + const FfxFloat32x2 fUv = (iPxPos + 0.5f) / RenderSize(); + const FfxFloat32x2 fUvCurrFrameJittered = fUv + Jitter() / RenderSize(); + const FfxFloat32x2 fUvPrevFrameJittered = fUv + PreviousFrameJitter() / PreviousFrameRenderSize(); + const FfxFloat32x2 fReprojectedUv = fUvPrevFrameJittered + fDilatedMotionVector; + + if (IsUvInside(fReprojectedUv)) + { + const FfxFloat32x2 fUvReactive_HW = ClampUv(fUvCurrFrameJittered, RenderSize(), MaxRenderSize()); + + const FfxFloat32x4 fDilatedReactiveMasks = SampleDilatedReactiveMasks(fUvReactive_HW); + const FfxFloat32 fReactiveMask = ffxSaturate(fDilatedReactiveMasks[REACTIVE]); + const FfxFloat32 fDisocclusion = ffxSaturate(fDilatedReactiveMasks[DISOCCLUSION]); + const FfxFloat32 fShadingChange = ffxSaturate(fDilatedReactiveMasks[SHADING_CHANGE]); + const FfxFloat32 fAccumulation = ffxSaturate(fDilatedReactiveMasks[ACCUMULAION]); + + const FfxBoolean bAccumulationFactor = fAccumulation > 0.9f; + + const FfxBoolean bComputeInstability = bAccumulationFactor; + + if (bComputeInstability) { + + const FfxFloat32x2 fUv_HW = ClampUv(fUvCurrFrameJittered, RenderSize(), MaxRenderSize()); + const FfxFloat32 fCurrentFrameLuma = SampleCurrentLuma(fUv_HW) * Exposure(); + + const FfxFloat32x2 fReprojectedUv_HW = ClampUv(fReprojectedUv, PreviousFrameRenderSize(), MaxRenderSize()); + data.fLumaHistory = SampleLumaHistory(fReprojectedUv_HW) * DeltaPreExposure() * Exposure(); + + const FfxFloat32x2 fFarthestDepthUv_HW = ClampUv(fUvCurrFrameJittered, RenderSize() / 2, GetFarthestDepthMip1ResourceDimensions()); + const FfxFloat32 fFarthestDepthInMeters = SampleFarthestDepthMip1(fFarthestDepthUv_HW); + + data = ComputeLumaInstabilityFactor(data, fCurrentFrameLuma, fFarthestDepthInMeters); + + const FfxFloat32 fVelocityWeight = 1.0f - ffxSaturate(Get4KVelocity(fDilatedMotionVector) / 20.0f); + data.fLumaInstabilityFactor *= fVelocityWeight * (1.0f - fDisocclusion) * (1.0f - fReactiveMask) * (1.0f - fShadingChange); + } + } + + StoreLumaHistory(iPxPos, data.fLumaHistory); + StoreLumaInstability(iPxPos, data.fLumaInstabilityFactor); +} diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_luma_pyramid.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_luma_pyramid.h new file mode 100644 index 000000000..41c5dc7f4 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_luma_pyramid.h @@ -0,0 +1,192 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +FFX_GROUPSHARED FfxUInt32 spdCounter; + +void SpdIncreaseAtomicCounter(FfxUInt32 slice) +{ + SPD_IncreaseAtomicCounter(spdCounter); +} + +FfxUInt32 SpdGetAtomicCounter() +{ + return spdCounter; +} + +void SpdResetAtomicCounter(FfxUInt32 slice) +{ + SPD_ResetAtomicCounter(); +} + +#ifndef SPD_PACKED_ONLY +FFX_GROUPSHARED FfxFloat32 spdIntermediateR[16][16]; +FFX_GROUPSHARED FfxFloat32 spdIntermediateG[16][16]; +FFX_GROUPSHARED FfxFloat32 spdIntermediateB[16][16]; +FFX_GROUPSHARED FfxFloat32 spdIntermediateA[16][16]; + +FFX_STATIC const FfxInt32 LOG_LUMA = 0; +FFX_STATIC const FfxInt32 LUMA = 1; +FFX_STATIC const FfxInt32 DEPTH_IN_METERS = 2; + +FfxFloat32x4 SpdLoadSourceImage(FfxFloat32x2 iPxPos, FfxUInt32 slice) +{ + //We assume linear data. if non-linear input (sRGB, ...), + //then we should convert to linear first and back to sRGB on output. + const FfxInt32x2 iPxSamplePos = ClampLoad(FfxInt32x2(iPxPos), FfxInt32x2(0, 0), FfxInt32x2(RenderSize())); + + const FfxFloat32 fLuma = LoadCurrentLuma(iPxSamplePos); + const FfxFloat32 fLogLuma = ffxMax(FSR3UPSCALER_EPSILON, log(fLuma)); + const FfxFloat32 fFarthestDepthInMeters = LoadFarthestDepth(iPxSamplePos); + + FfxFloat32x4 fOutput = FfxFloat32x4(0.0f, 0.0f, 0.0f, 0.0f); + fOutput[LOG_LUMA] = fLogLuma; + fOutput[LUMA] = fLuma; + fOutput[DEPTH_IN_METERS] = fFarthestDepthInMeters; + + return fOutput; +} + +FfxFloat32x4 SpdLoad(FfxInt32x2 tex, FfxUInt32 slice) +{ + return FfxFloat32x4(RWLoadPyramid(tex, 5), 0, 0); +} + +FfxFloat32x4 SpdReduce4(FfxFloat32x4 v0, FfxFloat32x4 v1, FfxFloat32x4 v2, FfxFloat32x4 v3) +{ + return (v0 + v1 + v2 + v3) * 0.25f; +} + +void SpdStore(FfxInt32x2 pix, FfxFloat32x4 outValue, FfxUInt32 index, FfxUInt32 slice) +{ + if (index == 5) + { + StorePyramid(pix, outValue.xy, index); + } + else if (index == 0) { + StoreFarthestDepthMip1(pix, outValue[DEPTH_IN_METERS]); + } + + if (index == MipCount() - 1) { //accumulate on 1x1 level + + if (all(FFX_EQUAL(pix, FfxInt32x2(0, 0)))) + { + FfxFloat32x4 frameInfo = LoadFrameInfo(); + const FfxFloat32 fSceneAvgLuma = outValue[LUMA]; + const FfxFloat32 fPrevLogLuma = frameInfo[FRAME_INFO_LOG_LUMA]; + FfxFloat32 fLogLuma = outValue[LOG_LUMA]; + + if (fPrevLogLuma < resetAutoExposureAverageSmoothing) // Compare Lavg, so small or negative values + { + fLogLuma = fPrevLogLuma + (fLogLuma - fPrevLogLuma) * (1.0f - exp(-DeltaTime())); + fLogLuma = ffxMax(0.0f, fLogLuma); + } + + frameInfo[FRAME_INFO_EXPOSURE] = ComputeAutoExposureFromLavg(fLogLuma); + frameInfo[FRAME_INFO_LOG_LUMA] = fLogLuma; + frameInfo[FRAME_INFO_SCENE_AVERAGE_LUMA] = fSceneAvgLuma; + + StoreFrameInfo(frameInfo); + } + } +} + +FfxFloat32x4 SpdLoadIntermediate(FfxUInt32 x, FfxUInt32 y) +{ + return FfxFloat32x4( + spdIntermediateR[x][y], + spdIntermediateG[x][y], + spdIntermediateB[x][y], + spdIntermediateA[x][y]); +} +void SpdStoreIntermediate(FfxUInt32 x, FfxUInt32 y, FfxFloat32x4 value) +{ + spdIntermediateR[x][y] = value.x; + spdIntermediateG[x][y] = value.y; + spdIntermediateB[x][y] = value.z; + spdIntermediateA[x][y] = value.w; +} + +#endif + +// define fetch and store functions Packed +#if FFX_HALF + +FFX_GROUPSHARED FfxFloat16x2 spdIntermediateRG[16][16]; +FFX_GROUPSHARED FfxFloat16x2 spdIntermediateBA[16][16]; + +FfxFloat16x4 SpdLoadSourceImageH(FfxFloat32x2 tex, FfxUInt32 slice) +{ + return FfxFloat16x4(0, 0, 0, 0); +} + +FfxFloat16x4 SpdLoadH(FfxInt32x2 p, FfxUInt32 slice) +{ + return FfxFloat16x4(0, 0, 0, 0); +} + +void SpdStoreH(FfxInt32x2 p, FfxFloat16x4 value, FfxUInt32 mip, FfxUInt32 slice) +{ +} + +FfxFloat16x4 SpdLoadIntermediateH(FfxUInt32 x, FfxUInt32 y) +{ + return FfxFloat16x4( + spdIntermediateRG[x][y].x, + spdIntermediateRG[x][y].y, + spdIntermediateBA[x][y].x, + spdIntermediateBA[x][y].y); +} + +void SpdStoreIntermediateH(FfxUInt32 x, FfxUInt32 y, FfxFloat16x4 value) +{ + spdIntermediateRG[x][y] = value.xy; + spdIntermediateBA[x][y] = value.zw; +} + +FfxFloat16x4 SpdReduce4H(FfxFloat16x4 v0, FfxFloat16x4 v1, FfxFloat16x4 v2, FfxFloat16x4 v3) +{ + return (v0 + v1 + v2 + v3) * FfxFloat16(0.25); +} +#endif + +#include "spd/ffx_spd.h" + +void ComputeAutoExposure(FfxUInt32x3 WorkGroupId, FfxUInt32 LocalThreadIndex) +{ +#if FFX_HALF + SpdDownsampleH( + FfxUInt32x2(WorkGroupId.xy), + FfxUInt32(LocalThreadIndex), + FfxUInt32(MipCount()), + FfxUInt32(NumWorkGroups()), + FfxUInt32(WorkGroupId.z), + FfxUInt32x2(WorkGroupOffset())); +#else + SpdDownsample( + FfxUInt32x2(WorkGroupId.xy), + FfxUInt32(LocalThreadIndex), + FfxUInt32(MipCount()), + FfxUInt32(NumWorkGroups()), + FfxUInt32(WorkGroupId.z), + FfxUInt32x2(WorkGroupOffset())); +#endif +} diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_prepare_inputs.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_prepare_inputs.h new file mode 100644 index 000000000..59c765b52 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_prepare_inputs.h @@ -0,0 +1,152 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +void ReconstructPrevDepth(FfxInt32x2 iPxPos, FfxFloat32 fDepth, FfxFloat32x2 fMotionVector) +{ + const FfxFloat32 fNearestDepthInMeters = ffxMin(GetViewSpaceDepthInMeters(fDepth), FSR3UPSCALER_FP16_MAX); + const FfxFloat32 fReconstructedDeptMvThreshold = ReconstructedDepthMvPxThreshold(fNearestDepthInMeters); + + // Discard small mvs + fMotionVector *= FfxFloat32(Get4KVelocity(fMotionVector) > fReconstructedDeptMvThreshold); + + const FfxFloat32x2 fUv = (iPxPos + FfxFloat32(0.5)) / RenderSize(); + const FfxFloat32x2 fReprojectedUv = fUv + fMotionVector; + const BilinearSamplingData bilinearInfo = GetBilinearSamplingData(fReprojectedUv, RenderSize()); + + // Project current depth into previous frame locations. + // Push to all pixels having some contribution if reprojection is using bilinear logic. + for (FfxInt32 iSampleIndex = 0; iSampleIndex < 4; iSampleIndex++) { + + const FfxInt32x2 iOffset = bilinearInfo.iOffsets[iSampleIndex]; + const FfxFloat32 fWeight = bilinearInfo.fWeights[iSampleIndex]; + + if (fWeight > fReconstructedDepthBilinearWeightThreshold) { + + const FfxInt32x2 iStorePos = bilinearInfo.iBasePos + iOffset; + if (IsOnScreen(iStorePos, RenderSize())) { + StoreReconstructedDepth(iStorePos, fDepth); + } + } + } +} + +struct DepthExtents +{ + FfxFloat32 fNearest; + FfxInt32x2 fNearestCoord; + FfxFloat32 fFarthest; +}; + +DepthExtents FindDepthExtents(FFX_PARAMETER_IN FfxInt32x2 iPxPos) +{ + DepthExtents extents; + const FfxInt32 iSampleCount = 9; + const FfxInt32x2 iSampleOffsets[iSampleCount] = { + FfxInt32x2(+0, +0), + FfxInt32x2(+1, +0), + FfxInt32x2(+0, +1), + FfxInt32x2(+0, -1), + FfxInt32x2(-1, +0), + FfxInt32x2(-1, +1), + FfxInt32x2(+1, +1), + FfxInt32x2(-1, -1), + FfxInt32x2(+1, -1), + }; + + // pull out the depth loads to allow SC to batch them + FfxFloat32 depth[9]; + FfxInt32 iSampleIndex = 0; + FFX_UNROLL + for (iSampleIndex = 0; iSampleIndex < iSampleCount; ++iSampleIndex) { + + FfxInt32x2 iPos = iPxPos + iSampleOffsets[iSampleIndex]; + depth[iSampleIndex] = LoadInputDepth(iPos); + } + + // find closest depth + extents.fNearestCoord = iPxPos; + extents.fNearest = depth[0]; + extents.fFarthest = depth[0]; + FFX_UNROLL + for (iSampleIndex = 1; iSampleIndex < iSampleCount; ++iSampleIndex) { + + const FfxInt32x2 iPos = iPxPos + iSampleOffsets[iSampleIndex]; + if (IsOnScreen(iPos, RenderSize())) { + + FfxFloat32 fNdDepth = depth[iSampleIndex]; +#if FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH + if (fNdDepth > extents.fNearest) { + extents.fFarthest = ffxMin(extents.fFarthest, fNdDepth); +#else + if (fNdDepth < extents.fNearest) { + extents.fFarthest = ffxMax(extents.fFarthest, fNdDepth); +#endif + extents.fNearestCoord = iPos; + extents.fNearest = fNdDepth; + } + } + } + + return extents; +} + +FfxFloat32x2 DilateMotionVector(FfxInt32x2 iPxPos, const DepthExtents depthExtents) +{ +#if FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS + const FfxInt32x2 iSamplePos = iPxPos; + const FfxInt32x2 iMotionVectorPos = depthExtents.fNearestCoord; +#else + const FfxInt32x2 iSamplePos = ComputeHrPosFromLrPos(iPxPos); + const FfxInt32x2 iMotionVectorPos = ComputeHrPosFromLrPos(depthExtents.fNearestCoord); +#endif + + const FfxFloat32x2 fDilatedMotionVector = LoadInputMotionVector(iMotionVectorPos); + + return fDilatedMotionVector; +} + +FfxFloat32 GetCurrentFrameLuma(FfxInt32x2 iPxPos) +{ + //We assume linear data. if non-linear input (sRGB, ...), + //then we should convert to linear first and back to sRGB on output. + const FfxFloat32x3 fRgb = ffxMax(FfxFloat32x3(0, 0, 0), LoadInputColor(iPxPos)); + const FfxFloat32 fLuma = RGBToLuma(fRgb); + + return fLuma; +} + +void PrepareInputs(FfxInt32x2 iPxPos) +{ + const DepthExtents depthExtents = FindDepthExtents(iPxPos); + const FfxFloat32x2 fDilatedMotionVector = DilateMotionVector(iPxPos, depthExtents); + + ReconstructPrevDepth(iPxPos, depthExtents.fNearest, fDilatedMotionVector); + + StoreDilatedMotionVector(iPxPos, fDilatedMotionVector); + StoreDilatedDepth(iPxPos, depthExtents.fNearest); + + const FfxFloat32 fFarthestDepthInMeters = ffxMin(GetViewSpaceDepthInMeters(depthExtents.fFarthest), FSR3UPSCALER_FP16_MAX); + StoreFarthestDepth(iPxPos, fFarthestDepthInMeters); + + const FfxFloat32 fLuma = GetCurrentFrameLuma(iPxPos); + StoreCurrentLuma(iPxPos, fLuma); +} diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_prepare_reactivity.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_prepare_reactivity.h new file mode 100644 index 000000000..ae24545c8 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_prepare_reactivity.h @@ -0,0 +1,283 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +FfxFloat32 ComputeDisocclusions(FfxFloat32x2 fUv, FfxFloat32x2 fMotionVector, FfxFloat32 fCurrentDepthViewSpace) +{ + const FfxFloat32 fNearestDepthInMeters = ffxMin(fCurrentDepthViewSpace * ViewSpaceToMetersFactor(), FSR3UPSCALER_FP16_MAX); + const FfxFloat32 fReconstructedDeptMvThreshold = ReconstructedDepthMvPxThreshold(fNearestDepthInMeters); + + fMotionVector *= FfxFloat32(Get4KVelocity(fMotionVector) > fReconstructedDeptMvThreshold); + + const FfxFloat32x2 fReprojectedUv = fUv + fMotionVector; + const BilinearSamplingData bilinearInfo = GetBilinearSamplingData(fReprojectedUv, RenderSize()); + + FfxFloat32 fDisocclusion = 0.0f; + FfxFloat32 fWeightSum = 0.0f; + FfxBoolean bPotentialDisocclusion = true; + + for (FfxInt32 iSampleIndex = 0; iSampleIndex < 4 && bPotentialDisocclusion; iSampleIndex++) + { + + const FfxInt32x2 iOffset = bilinearInfo.iOffsets[iSampleIndex]; + const FfxInt32x2 iSamplePos = ClampLoad(bilinearInfo.iBasePos, iOffset, FfxInt32x2(RenderSize())); + + if (IsOnScreen(iSamplePos, RenderSize())) { + const FfxFloat32 fWeight = bilinearInfo.fWeights[iSampleIndex]; + if (fWeight > fReconstructedDepthBilinearWeightThreshold) { + + const FfxFloat32 fPrevNearestDepthViewSpace = GetViewSpaceDepth(LoadReconstructedPrevDepth(iSamplePos)); + const FfxFloat32 fDepthDifference = fCurrentDepthViewSpace - fPrevNearestDepthViewSpace; + + bPotentialDisocclusion = bPotentialDisocclusion && (fDepthDifference > FSR3UPSCALER_FP32_MIN); + + if (bPotentialDisocclusion) { + const FfxFloat32 fHalfViewportWidth = length(FfxFloat32x2(RenderSize()) * 0.5f); + const FfxFloat32 fDepthThreshold = ffxMax(fCurrentDepthViewSpace, fPrevNearestDepthViewSpace); + + const FfxFloat32 Ksep = 1.37e-05f; + const FfxFloat32 fRequiredDepthSeparation = Ksep * fHalfViewportWidth * fDepthThreshold; + + fDisocclusion += ffxSaturate(FfxFloat32(fRequiredDepthSeparation / fDepthDifference)) * fWeight; + fWeightSum += fWeight; + } + } + } + } + + fDisocclusion = (bPotentialDisocclusion && fWeightSum > 0) ? ffxSaturate(1.0f - fDisocclusion / fWeightSum) : 0.0f; + + return fDisocclusion; +} + +FfxFloat32 ComputeMotionDivergence(FfxFloat32x2 fUv, FfxFloat32x2 fMotionVector, FfxFloat32 fCurrentDepthSample) +{ + const FfxInt32x2 iPxReprojectedPos = FfxInt32x2((fUv + fMotionVector) * RenderSize()); + const FfxFloat32 fReprojectedDepth = LoadDilatedDepth(iPxReprojectedPos); + const FfxFloat32x2 fReprojectedMotionVector = LoadDilatedMotionVector(iPxReprojectedPos); + + const FfxFloat32 fReprojectedVelocity = Get4KVelocity(fReprojectedMotionVector); + const FfxFloat32 f4KVelocity = Get4KVelocity(fMotionVector); + + const FfxFloat32 fMaxLen = max(length(fMotionVector), length(fReprojectedMotionVector)); + + const FfxFloat32 fNucleusDepthInMeters = GetViewSpaceDepthInMeters(fReprojectedDepth); + const FfxFloat32 fCurrentDepthInMeters = GetViewSpaceDepthInMeters(fCurrentDepthSample); + + const FfxFloat32 fDistanceFactor = MinDividedByMax(fNucleusDepthInMeters, fCurrentDepthInMeters); + const FfxFloat32 fVelocityFactor = ffxSaturate(f4KVelocity / 10.0f); + const FfxFloat32 fMotionVectorFieldConfidence = (1.0f - ffxSaturate(fReprojectedVelocity / f4KVelocity)) * fDistanceFactor * fVelocityFactor; + + return fMotionVectorFieldConfidence; +} + +FfxFloat32 DilateReactiveMasks(FfxInt32x2 iPxPos, FfxFloat32x2 fUv) +{ + FfxFloat32 fDilatedReactiveMasks = 0.0f; + + FFX_UNROLL + for (FfxInt32 y = -1; y <=1; y++) + { + FFX_UNROLL + for (FfxInt32 x = -1; x <= 1; x++) + { + const FfxInt32x2 sampleCoord = ClampLoad(iPxPos, FfxInt32x2(x, y), FfxInt32x2(RenderSize())); + fDilatedReactiveMasks = ffxMax(fDilatedReactiveMasks, LoadReactiveMask(sampleCoord)); + } + } + + return fDilatedReactiveMasks; +} + +FfxFloat32 DilateTransparencyAndCompositionMasks(FfxInt32x2 iPxPos, FfxFloat32x2 fUv) +{ + const FfxFloat32x2 fUvTransparencyAndCompositionMask = ClampUv(fUv, RenderSize(), GetTransparencyAndCompositionMaskResourceDimensions()); + return SampleTransparencyAndCompositionMask(fUvTransparencyAndCompositionMask); +} + +FfxFloat32 ComputeThinFeatureConfidence(FfxInt32x2 iPxPos) +{ + /* + 1 2 3 + 4 0 5 + 6 7 8 + */ + + const FfxInt32 iNucleusIndex = 0; + const FfxInt32 iSampleCount = 9; + const FfxInt32x2 iSampleOffsets[iSampleCount] = { + FfxInt32x2(+0, +0), + FfxInt32x2(-1, -1), + FfxInt32x2(+0, -1), + FfxInt32x2(+1, -1), + FfxInt32x2(-1, +0), + FfxInt32x2(+1, +0), + FfxInt32x2(-1, +1), + FfxInt32x2(+0, +1), + FfxInt32x2(+1, +1), + }; + + FfxFloat32 fSamples[iSampleCount]; + + FfxFloat32 fLumaMin = FSR3UPSCALER_FP32_MAX; + FfxFloat32 fLumaMax = FSR3UPSCALER_FP32_MIN; + + FFX_UNROLL + for (FfxInt32 iSampleIndex = 0; iSampleIndex < iSampleCount; ++iSampleIndex) { + const FfxInt32x2 iPxSamplePos = ClampLoad(iPxPos, iSampleOffsets[iSampleIndex], FfxInt32x2(RenderSize())); + fSamples[iSampleIndex] = LoadCurrentLuma(iPxSamplePos) * Exposure(); + + fLumaMin = ffxMin(fLumaMin, fSamples[iSampleIndex]); + fLumaMax = ffxMax(fLumaMax, fSamples[iSampleIndex]); + } + + const FfxFloat32 fThreshold = 0.9f; + FfxFloat32 fDissimilarLumaMin = FSR3UPSCALER_FP32_MAX; + FfxFloat32 fDissimilarLumaMax = 0; + +#define SETBIT(x) (1U << x) + + FfxUInt32 uPatternMask = SETBIT(iNucleusIndex); // Flag nucleus as similar + + const FfxUInt32 uNumRejectionMasks = 4; + const FfxUInt32 uRejectionMasks[uNumRejectionMasks] = { + SETBIT(1) | SETBIT(2) | SETBIT(4) | SETBIT(iNucleusIndex), // Upper left + SETBIT(2) | SETBIT(3) | SETBIT(5) | SETBIT(iNucleusIndex), // Upper right + SETBIT(4) | SETBIT(6) | SETBIT(7) | SETBIT(iNucleusIndex), // Lower left + SETBIT(5) | SETBIT(7) | SETBIT(8) | SETBIT(iNucleusIndex) // Lower right + }; + + FfxInt32 iBitIndex = 1; + FFX_UNROLL + for (FfxInt32 iSampleIndex = 1; iSampleIndex < iSampleCount; ++iSampleIndex, ++iBitIndex) { + + const FfxFloat32 fDifference = abs(fSamples[iSampleIndex] - fSamples[iNucleusIndex]) / (fLumaMax - fLumaMin); + + if (fDifference < fThreshold) + { + uPatternMask |= SETBIT(iBitIndex); + } + else + { + fDissimilarLumaMin = ffxMin(fDissimilarLumaMin, fSamples[iSampleIndex]); + fDissimilarLumaMax = ffxMax(fDissimilarLumaMax, fSamples[iSampleIndex]); + } + } + + const FfxBoolean bIsRidge = fSamples[iNucleusIndex] > fDissimilarLumaMax || fSamples[iNucleusIndex] < fDissimilarLumaMin; + + if (FFX_FALSE == bIsRidge) + { + return 0.0f; + } + + FFX_UNROLL + for (FfxInt32 i = 0; i < uNumRejectionMasks; i++) + { + if ((uPatternMask & uRejectionMasks[i]) == uRejectionMasks[i]) + { + return 0.0f; + } + } + + return 1.0f - fLumaMin / fLumaMax; +} + +FfxFloat32 UpdateAccumulation(FfxInt32x2 iPxPos, FfxFloat32x2 fUv, FfxFloat32x2 fMotionVector, FfxFloat32 fDisocclusion, FfxFloat32 fShadingChange) +{ + const FfxFloat32x2 fReprojectedUv = fUv + fMotionVector; + FfxFloat32 fAccumulation = 0.0f; + + if (IsUvInside(fReprojectedUv)) { + const FfxFloat32x2 fReprojectedUv_HW = ClampUv(fReprojectedUv, PreviousFrameRenderSize(), MaxRenderSize()); + fAccumulation = ffxSaturate(SampleAccumulation(fReprojectedUv_HW)); + } + const FfxFloat32 fAccumulationAddedPerFrame= AccumulationAddedPerFrame(); //default is 0.333 + + // Assume at frame N+0 fShadingChange is 1.0, and all subsequent frames fShadingChange is 0.0 and fDisocclusion is 0.0. Then, + // frame N+0 fAccumulation will be 0.000 + // frame N+2 fAccumulation will be 0.000 + 0.333 * 1 == 0.333 + // frame N+3 fAccumulation will be 0.000 + 0.333 * 2 == 0.666 + // frame N+4 fAccumulation will be 0.000 + 0.333 * 3 == 0.999 + fAccumulation = ffxLerp(fAccumulation, 0.0f, fShadingChange); + + const FfxFloat32 fMinDisocclusionAccumulation = MinDisocclusionAccumulation(); //default is -0.333 + // Assume at frame N+0 fDisocclusion is 1.0, and all subsequent frames fShadingChange is 0.0 and fDisocclusion is 0.0. Then, + // frame N+0 fAccumulation will be -0.333f (but normalized to store in unorm) + // frame N+1 fAccumulation will be -0.333f + 0.333 * 1 == 0.000 + // frame N+2 fAccumulation will be -0.333f + 0.333 * 2 == 0.333 + // frame N+3 fAccumulation will be -0.333f + 0.333 * 3 == 0.666 + // frame N+4 fAccumulation will be -0.333f + 0.333 * 4 == 0.999 + fAccumulation = ffxLerp(fAccumulation, ffxMin(fMinDisocclusionAccumulation, fAccumulation), fDisocclusion); + + fAccumulation *= FfxFloat32(round(fAccumulation * 100.0f) > 1.0f); + + // Update for next frame, normalize to store in unorm + const FfxFloat32 fAccumulatedFramesToStore = ffxSaturate(fAccumulation + fAccumulationAddedPerFrame); + StoreAccumulation(iPxPos, fAccumulatedFramesToStore); + + return fAccumulation; +} + +FfxFloat32 ComputeShadingChange(FfxFloat32x2 fUv) +{ + // NOTE: Here we re-apply jitter, will be reverted again when sampled in accumulation pass + const FfxFloat32x2 fShadingChangeUv = ClampUv(fUv - Jitter() / RenderSize(), ShadingChangeRenderSize(), ShadingChangeMaxRenderSize()); + const FfxFloat32 fShadingChange = ffxSaturate(SampleShadingChange(fShadingChangeUv)); + + return fShadingChange; +} + +void PrepareReactivity(FfxInt32x2 iPxPos) +{ + const FfxFloat32x2 fUv = (iPxPos + 0.5f) / RenderSize(); + const FfxFloat32x2 fMotionVector = LoadDilatedMotionVector(iPxPos); + + // Discard small mvs + const FfxFloat32 f4KVelocity = Get4KVelocity(fMotionVector); + + const FfxFloat32x2 fDilatedUv = fUv + fMotionVector; + const FfxFloat32 fDilatedDepth = LoadDilatedDepth(iPxPos); + const FfxFloat32 fDepthInMeters = GetViewSpaceDepthInMeters(fDilatedDepth); + + const FfxFloat32 fDisocclusion = ComputeDisocclusions(fUv, fMotionVector, GetViewSpaceDepth(fDilatedDepth)); + const FfxFloat32 fShadingChange = ffxMax(DilateReactiveMasks(iPxPos, fUv), ComputeShadingChange(fUv)); + + const FfxFloat32 fMotionDivergence = ComputeMotionDivergence(fUv, fMotionVector, fDilatedDepth); + const FfxFloat32 fDilatedTransparencyAndComposition = DilateTransparencyAndCompositionMasks(iPxPos, fUv); + const FfxFloat32 fFinalReactiveness = ffxMax(fMotionDivergence, fDilatedTransparencyAndComposition); + + const FfxFloat32 fAccumulation = UpdateAccumulation(iPxPos, fUv, fMotionVector, fDisocclusion, fShadingChange); + + FfxFloat32x4 fOutput; + fOutput[REACTIVE] = fFinalReactiveness; + fOutput[DISOCCLUSION] = fDisocclusion; + fOutput[SHADING_CHANGE] = fShadingChange; + fOutput[ACCUMULAION] = fAccumulation; + + StoreDilatedReactiveMasks(iPxPos, fOutput); + + const FfxFloat32 fLockStrength = ComputeThinFeatureConfidence(iPxPos); + if (fLockStrength > (1.0f / 100.0f)) + { + StoreNewLocks(ComputeHrPosFromLrPos(FfxInt32x2(iPxPos)), fLockStrength); + } +} diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_rcas.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_rcas.h new file mode 100644 index 000000000..f48cffb93 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_rcas.h @@ -0,0 +1,112 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#define GROUP_SIZE 8 +#define FSR_RCAS_DENOISE 1 + +#include "ffx_core.h" + +#if FFX_HALF && defined(__XBOX_SCARLETT) && defined(__XBATG_EXTRA_16_BIT_OPTIMISATION) && (__XBATG_EXTRA_16_BIT_OPTIMISATION == 1) + #define FSR_RCAS_PREFER_PAIRED_VERSION 1 +#else + #define FSR_RCAS_PREFER_PAIRED_VERSION 0 +#endif + +void WriteUpscaledOutput(FFX_MIN16_U2 iPxHrPos, FfxFloat32x3 fUpscaledColor) +{ + StoreUpscaledOutput(FFX_MIN16_I2(iPxHrPos), fUpscaledColor); +} + +#if FSR_RCAS_PREFER_PAIRED_VERSION + #define FSR_RCAS_HX2 1 + FfxFloat16x4 FsrRcasLoadHx2(FfxInt16x2 p) + { + return FfxFloat16x4(LoadRCAS_Input(p)); + } + void FsrRcasInputHx2(inout FfxFloat16x2 r, inout FfxFloat16x2 g, inout FfxFloat16x2 b) + { + FfxFloat32 e = Exposure(); + r = FfxFloat16x2(r * e); + g = FfxFloat16x2(g * e); + b = FfxFloat16x2(b * e); + } + + #include "fsr1/ffx_fsr1.h" + + void CurrFilterPaired(FFX_MIN16_U2 pos) + { + FfxFloat16x2 cr; + FfxFloat16x2 cg; + FfxFloat16x2 cb; + FsrRcasHx2(cr, cg, cb, pos, RCASConfig()); + FfxFloat32 InvExposure = 1.0f / Exposure(); + cr = FfxFloat16x2(cr * InvExposure); + cg = FfxFloat16x2(cg * InvExposure); + cb = FfxFloat16x2(cb * InvExposure); + WriteUpscaledOutput(pos, FfxFloat16x3(cr.x, cg.x, cb.x)); //TODO: fix type + pos.x += 8; + WriteUpscaledOutput(pos, FfxFloat16x3(cr.y, cg.y, cb.y)); //TODO: fix type + } +#else + #define FSR_RCAS_F 1 + FfxFloat32x4 FsrRcasLoadF(FfxInt32x2 p) + { + FfxFloat32x4 fColor = LoadRCAS_Input(p); + + fColor.rgb *= Exposure(); + + return fColor; + } + void FsrRcasInputF(inout FfxFloat32 r, inout FfxFloat32 g, inout FfxFloat32 b) {} + + #include "fsr1/ffx_fsr1.h" + + void CurrFilter(FFX_MIN16_U2 pos) + { + FfxFloat32x3 c; + FsrRcasF(c.r, c.g, c.b, pos, RCASConfig()); + + c /= Exposure(); + + WriteUpscaledOutput(pos, c); + } + +#endif // #if FSR_RCAS_PREFER_PAIRED_VERSION + +void RCAS(FfxUInt32x3 LocalThreadId, FfxUInt32x3 WorkGroupId, FfxUInt32x3 Dtid) +{ + // Do remapping of local xy in workgroup for a more PS-like swizzle pattern. + FfxUInt32x2 gxy = ffxRemapForQuad(LocalThreadId.x) + FfxUInt32x2(WorkGroupId.x << 4u, WorkGroupId.y << 4u); +#if FSR_RCAS_PREFER_PAIRED_VERSION + CurrFilterPaired(FFX_MIN16_U2(gxy)); + gxy.y += 8u; + CurrFilterPaired(FFX_MIN16_U2(gxy)); +#else + CurrFilter(FFX_MIN16_U2(gxy)); + gxy.x += 8u; + CurrFilter(FFX_MIN16_U2(gxy)); + gxy.y += 8u; + CurrFilter(FFX_MIN16_U2(gxy)); + gxy.x -= 8u; + CurrFilter(FFX_MIN16_U2(gxy)); +#endif +} diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_reproject.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_reproject.h new file mode 100644 index 000000000..c72f40fb6 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_reproject.h @@ -0,0 +1,79 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE +#define FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE 0 // Reference +#endif + +FfxFloat32x4 WrapHistory(FfxInt32x2 iPxSample) +{ + return LoadHistory(iPxSample); +} + +DeclareCustomFetchBicubicSamples(FetchHistorySamples, WrapHistory) +DeclareCustomTextureSample(HistorySample, FFX_FSR3UPSCALER_GET_LANCZOS_SAMPLER1D(FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE), FetchHistorySamples) + +#if FFX_HALF +FFX_MIN16_F4 WrapHistory16(FfxInt32x2 iPxSample) +{ + return FFX_MIN16_F4(LoadHistory(iPxSample)); +} + +DeclareCustomFetchBicubicSamplesMin16(FetchHistorySamples16, WrapHistory16) +DeclareCustomTextureSampleMin16(HistorySample16, FFX_FSR3UPSCALER_GET_LANCZOS_SAMPLER1D(FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE), FetchHistorySamples16) +#endif + +FfxFloat32x2 GetMotionVector(FfxInt32x2 iPxHrPos, FfxFloat32x2 fHrUv) +{ +#if FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS + const FfxFloat32x2 fDilatedMotionVector = LoadDilatedMotionVector(FFX_MIN16_I2(fHrUv * RenderSize())); +#else + const FfxFloat32x2 fDilatedMotionVector = LoadInputMotionVector(iPxHrPos); +#endif + + return fDilatedMotionVector; +} + +void ComputeReprojectedUVs(FFX_PARAMETER_INOUT AccumulationPassCommonParams params) +{ + params.fReprojectedHrUv = params.fHrUv + params.fMotionVector; + + params.bIsExistingSample = IsUvInside(params.fReprojectedHrUv); +} + +void ReprojectHistoryColor(const AccumulationPassCommonParams params, FFX_PARAMETER_INOUT AccumulationPassData data) + +{ +#if FFX_HALF && FFX_FSR3UPSCALER_OPTION_REPROJECT_SAMPLERS_USE_DATA_HALF + const FfxFloat32x4 fReprojectedHistory = FfxFloat32x4(HistorySample16(params.fReprojectedHrUv, UpscaleSize())); +#else + const FfxFloat32x4 fReprojectedHistory = HistorySample(params.fReprojectedHrUv, PreviousFrameUpscaleSize()); +#endif + + data.fHistoryColor = fReprojectedHistory.rgb; + data.fHistoryColor *= DeltaPreExposure(); + data.fHistoryColor *= Exposure(); + + data.fHistoryColor = RGBToYCoCg(data.fHistoryColor); + + data.fLock = fReprojectedHistory.w; +} diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_resources.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_resources.h new file mode 100644 index 000000000..b3d8ddb17 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_resources.h @@ -0,0 +1,100 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_FSR3UPSCALER_RESOURCES_H +#define FFX_FSR3UPSCALER_RESOURCES_H + +#if defined(FFX_CPU) || defined(FFX_GPU) +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_NULL 0 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INPUT_OPAQUE_ONLY 1 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INPUT_COLOR 2 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INPUT_MOTION_VECTORS 3 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INPUT_DEPTH 4 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INPUT_EXPOSURE 5 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INPUT_REACTIVE_MASK 6 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INPUT_TRANSPARENCY_AND_COMPOSITION_MASK 7 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_RECONSTRUCTED_PREVIOUS_NEAREST_DEPTH 8 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_DILATED_MOTION_VECTORS 9 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_DILATED_DEPTH 10 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INTERNAL_UPSCALED_COLOR 11 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_ACCUMULATION 12 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_NEW_LOCKS 13 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_LUMA_HISTORY 14 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_DEBUG_OUTPUT 15 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_LANCZOS_LUT 16 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SPD_ATOMIC_COUNT 17 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_UPSCALED_OUTPUT 18 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_RCAS_INPUT 19 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_ACCUMULATION_1 20 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_ACCUMULATION_2 21 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INTERNAL_UPSCALED_COLOR_1 22 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INTERNAL_UPSCALED_COLOR_2 23 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INTERNAL_DEFAULT_REACTIVITY 24 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INTERNAL_DEFAULT_TRANSPARENCY_AND_COMPOSITION 25 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_DILATED_REACTIVE_MASKS 26 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SPD_MIPS 27 // same as FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SPD_MIPS_LEVEL_0 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SPD_MIPS_LEVEL_0 27 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SPD_MIPS_LEVEL_1 28 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SPD_MIPS_LEVEL_2 29 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SPD_MIPS_LEVEL_3 30 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SPD_MIPS_LEVEL_4 31 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SPD_MIPS_LEVEL_5 32 + +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INTERNAL_DEFAULT_EXPOSURE 33 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_FRAME_INFO 34 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_AUTOREACTIVE 35 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_AUTOCOMPOSITION_DEPRECATED 36 + +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_LUMA_HISTORY_1 37 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_LUMA_HISTORY_2 38 + +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_LUMA_1 40 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_LUMA_2 41 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SHADING_CHANGE 42 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_FARTHEST_DEPTH 43 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_FARTHEST_DEPTH_MIP1 44 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_CURRENT_LUMA 45 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_PREVIOUS_LUMA 46 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_LUMA_INSTABILITY 48 +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_INTERMEDIATE_FP16x1 49 + + +// Shading change detection mip level setting, value must be in the range [FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_0, FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_12] +//#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_SHADING_CHANGE FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_4 +//#define FFX_FSR3UPSCALER_SHADING_CHANGE_MIP_LEVEL (FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE_MIPMAP_SHADING_CHANGE - FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_SCENE_LUMINANCE) + +#define FFX_FSR3UPSCALER_RESOURCE_IDENTIFIER_COUNT 60 + +#define FFX_FSR3UPSCALER_CONSTANTBUFFER_IDENTIFIER_FSR3UPSCALER 0 +#define FFX_FSR3UPSCALER_CONSTANTBUFFER_IDENTIFIER_SPD 1 +#define FFX_FSR3UPSCALER_CONSTANTBUFFER_IDENTIFIER_RCAS 2 +#define FFX_FSR3UPSCALER_CONSTANTBUFFER_IDENTIFIER_GENREACTIVE 3 +#define FFX_FSR3UPSCALER_CONSTANTBUFFER_COUNT 4 + +#define FFX_FSR3UPSCALER_AUTOREACTIVEFLAGS_APPLY_TONEMAP 1 +#define FFX_FSR3UPSCALER_AUTOREACTIVEFLAGS_APPLY_INVERSETONEMAP 2 +#define FFX_FSR3UPSCALER_AUTOREACTIVEFLAGS_APPLY_THRESHOLD 4 +#define FFX_FSR3UPSCALER_AUTOREACTIVEFLAGS_USE_COMPONENTS_MAX 8 + +#endif // #if defined(FFX_CPU) || defined(FFX_GPU) + +#endif //!defined( FFX_FSR3UPSCALER_RESOURCES_H ) diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_sample.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_sample.h new file mode 100644 index 000000000..7a723d556 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_sample.h @@ -0,0 +1,628 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_FSR3UPSCALER_SAMPLE_H +#define FFX_FSR3UPSCALER_SAMPLE_H + +// suppress warnings +#ifdef FFX_HLSL +#pragma warning(disable: 4008) // potentially divide by zero +#endif //FFX_HLSL + +struct FetchedBilinearSamples { + + FfxFloat32x4 fColor00; + FfxFloat32x4 fColor10; + + FfxFloat32x4 fColor01; + FfxFloat32x4 fColor11; +}; + +struct FetchedBicubicSamples { + + FfxFloat32x4 fColor00; + FfxFloat32x4 fColor10; + FfxFloat32x4 fColor20; + FfxFloat32x4 fColor30; + + FfxFloat32x4 fColor01; + FfxFloat32x4 fColor11; + FfxFloat32x4 fColor21; + FfxFloat32x4 fColor31; + + FfxFloat32x4 fColor02; + FfxFloat32x4 fColor12; + FfxFloat32x4 fColor22; + FfxFloat32x4 fColor32; + + FfxFloat32x4 fColor03; + FfxFloat32x4 fColor13; + FfxFloat32x4 fColor23; + FfxFloat32x4 fColor33; +}; + +#if FFX_HALF +struct FetchedBilinearSamplesMin16 { + + FFX_MIN16_F4 fColor00; + FFX_MIN16_F4 fColor10; + + FFX_MIN16_F4 fColor01; + FFX_MIN16_F4 fColor11; +}; + +struct FetchedBicubicSamplesMin16 { + + FFX_MIN16_F4 fColor00; + FFX_MIN16_F4 fColor10; + FFX_MIN16_F4 fColor20; + FFX_MIN16_F4 fColor30; + + FFX_MIN16_F4 fColor01; + FFX_MIN16_F4 fColor11; + FFX_MIN16_F4 fColor21; + FFX_MIN16_F4 fColor31; + + FFX_MIN16_F4 fColor02; + FFX_MIN16_F4 fColor12; + FFX_MIN16_F4 fColor22; + FFX_MIN16_F4 fColor32; + + FFX_MIN16_F4 fColor03; + FFX_MIN16_F4 fColor13; + FFX_MIN16_F4 fColor23; + FFX_MIN16_F4 fColor33; +}; +#else //FFX_HALF +#define FetchedBicubicSamplesMin16 FetchedBicubicSamples +#define FetchedBilinearSamplesMin16 FetchedBilinearSamples +#endif //FFX_HALF + +FfxFloat32x4 Linear(FfxFloat32x4 A, FfxFloat32x4 B, FfxFloat32 t) +{ + return A + (B - A) * t; +} + +FfxFloat32x4 Bilinear(FetchedBilinearSamples BilinearSamples, FfxFloat32x2 fPxFrac) +{ + FfxFloat32x4 fColorX0 = Linear(BilinearSamples.fColor00, BilinearSamples.fColor10, fPxFrac.x); + FfxFloat32x4 fColorX1 = Linear(BilinearSamples.fColor01, BilinearSamples.fColor11, fPxFrac.x); + FfxFloat32x4 fColorXY = Linear(fColorX0, fColorX1, fPxFrac.y); + return fColorXY; +} + +#if FFX_HALF +FFX_MIN16_F4 Linear(FFX_MIN16_F4 A, FFX_MIN16_F4 B, FFX_MIN16_F t) +{ + return A + (B - A) * t; +} + +FFX_MIN16_F4 Bilinear(FetchedBilinearSamplesMin16 BilinearSamples, FFX_MIN16_F2 fPxFrac) +{ + FFX_MIN16_F4 fColorX0 = Linear(BilinearSamples.fColor00, BilinearSamples.fColor10, fPxFrac.x); + FFX_MIN16_F4 fColorX1 = Linear(BilinearSamples.fColor01, BilinearSamples.fColor11, fPxFrac.x); + FFX_MIN16_F4 fColorXY = Linear(fColorX0, fColorX1, fPxFrac.y); + return fColorXY; +} +#endif + +FfxFloat32 Lanczos2NoClamp(FfxFloat32 x) +{ + const FfxFloat32 PI = 3.141592653589793f; // TODO: share SDK constants + return abs(x) < FSR3UPSCALER_EPSILON ? 1.f : (sin(PI * x) / (PI * x)) * (sin(0.5f * PI * x) / (0.5f * PI * x)); +} + +FfxFloat32 Lanczos2(FfxFloat32 x) +{ + x = ffxMin(abs(x), 2.0f); + return Lanczos2NoClamp(x); +} + +#if FFX_HALF + +#if 0 +FFX_MIN16_F Lanczos2NoClamp(FFX_MIN16_F x) +{ + const FFX_MIN16_F PI = FFX_MIN16_F(3.141592653589793f); // TODO: share SDK constants + return abs(x) < FFX_MIN16_F(FSR3UPSCALER_EPSILON) ? FFX_MIN16_F(1.f) : (sin(PI * x) / (PI * x)) * (sin(FFX_MIN16_F(0.5f) * PI * x) / (FFX_MIN16_F(0.5f) * PI * x)); +} +#endif + +FFX_MIN16_F Lanczos2(FFX_MIN16_F x) +{ + x = ffxMin(abs(x), FFX_MIN16_F(2.0f)); + return FFX_MIN16_F(Lanczos2NoClamp(x)); +} +#endif //FFX_HALF + +// FSR1 lanczos approximation. Input is x*x and must be <= 4. +FfxFloat32 Lanczos2ApproxSqNoClamp(FfxFloat32 x2) +{ + FfxFloat32 a = (2.0f / 5.0f) * x2 - 1; + FfxFloat32 b = (1.0f / 4.0f) * x2 - 1; + return ((25.0f / 16.0f) * a * a - (25.0f / 16.0f - 1)) * (b * b); +} + +#if FFX_HALF +FFX_MIN16_F Lanczos2ApproxSqNoClamp(FFX_MIN16_F x2) +{ + FFX_MIN16_F a = FFX_MIN16_F(2.0f / 5.0f) * x2 - FFX_MIN16_F(1); + FFX_MIN16_F b = FFX_MIN16_F(1.0f / 4.0f) * x2 - FFX_MIN16_F(1); + return (FFX_MIN16_F(25.0f / 16.0f) * a * a - FFX_MIN16_F(25.0f / 16.0f - 1)) * (b * b); +} + +#if defined(__XBOX_SCARLETT) && defined(__XBATG_EXTRA_16_BIT_OPTIMISATION) && (__XBATG_EXTRA_16_BIT_OPTIMISATION == 1) +FFX_MIN16_F2 PairedLanczos2ApproxSqNoClamp(FFX_MIN16_F2 x2) +{ + // Xbox ATG (Pavel): + // + // 2.0 * x2 - 5.0 25.0 25.0 - 16.0 (2.0 * x2 - 5.0)^2 - (3.0)^2 (2.0 * x2 - 8.0) * (2.0 * x2 - 2.0) (x2 - 4.0) * (x2 - 1.0) + // a = -------------- ==> ---- * a^2 - -------------- = ----------------------------- = ---------------------------------- = ----------------------- = b * (x2 - 1.0) + // 5.0 16.0 16.0 16.0 16.0 4.0 + // + // so we need to compute just (b * b) * (b * x2 - b), so we should get four packed instructions: 2 fma + 2 mul + // + + FFX_MIN16_F2 b = (0.25 * x2 - 1.0); + return (b * b) * (b * x2 - b); +} +#endif + +#endif //FFX_HALF + +FfxFloat32 Lanczos2ApproxSq(FfxFloat32 x2) +{ + x2 = ffxMin(x2, 4.0f); + return Lanczos2ApproxSqNoClamp(x2); +} + +#if FFX_HALF +FFX_MIN16_F Lanczos2ApproxSq(FFX_MIN16_F x2) +{ + x2 = ffxMin(x2, FFX_MIN16_F(4.0f)); + return Lanczos2ApproxSqNoClamp(x2); +} + +#if defined(__XBOX_SCARLETT) && defined(__XBATG_EXTRA_16_BIT_OPTIMISATION) && (__XBATG_EXTRA_16_BIT_OPTIMISATION == 1) +FFX_MIN16_F2 PairedLanczos2ApproxSq(FFX_MIN16_F2 x2) +{ + x2 = ffxMin(x2, FFX_MIN16_F2(4.0, 4.0)); + return PairedLanczos2ApproxSqNoClamp(x2); +} +#endif +#endif //FFX_HALF + +FfxFloat32 Lanczos2ApproxNoClamp(FfxFloat32 x) +{ + return Lanczos2ApproxSqNoClamp(x * x); +} + +#if FFX_HALF +FFX_MIN16_F Lanczos2ApproxNoClamp(FFX_MIN16_F x) +{ + return Lanczos2ApproxSqNoClamp(x * x); +} +#endif //FFX_HALF + +FfxFloat32 Lanczos2Approx(FfxFloat32 x) +{ + return Lanczos2ApproxSq(x * x); +} + +#if FFX_HALF +FFX_MIN16_F Lanczos2Approx(FFX_MIN16_F x) +{ + return Lanczos2ApproxSq(x * x); +} +#endif //FFX_HALF + +FfxFloat32 Lanczos2_UseLUT(FfxFloat32 x) +{ + return SampleLanczos2Weight(abs(x)); +} + +#if FFX_HALF +FFX_MIN16_F Lanczos2_UseLUT(FFX_MIN16_F x) +{ + return FFX_MIN16_F(SampleLanczos2Weight(abs(x))); +} +#endif //FFX_HALF + +FfxFloat32x4 Lanczos2_UseLUT(FfxFloat32x4 fColor0, FfxFloat32x4 fColor1, FfxFloat32x4 fColor2, FfxFloat32x4 fColor3, FfxFloat32 t) +{ + FfxFloat32 fWeight0 = Lanczos2_UseLUT(-1.f - t); + FfxFloat32 fWeight1 = Lanczos2_UseLUT(-0.f - t); + FfxFloat32 fWeight2 = Lanczos2_UseLUT(+1.f - t); + FfxFloat32 fWeight3 = Lanczos2_UseLUT(+2.f - t); + return (fWeight0 * fColor0 + fWeight1 * fColor1 + fWeight2 * fColor2 + fWeight3 * fColor3) / (fWeight0 + fWeight1 + fWeight2 + fWeight3); +} +#if FFX_HALF +FFX_MIN16_F4 Lanczos2_UseLUT(FFX_MIN16_F4 fColor0, FFX_MIN16_F4 fColor1, FFX_MIN16_F4 fColor2, FFX_MIN16_F4 fColor3, FFX_MIN16_F t) +{ + FFX_MIN16_F fWeight0 = Lanczos2_UseLUT(FFX_MIN16_F(-1.f) - t); + FFX_MIN16_F fWeight1 = Lanczos2_UseLUT(FFX_MIN16_F(-0.f) - t); + FFX_MIN16_F fWeight2 = Lanczos2_UseLUT(FFX_MIN16_F(+1.f) - t); + FFX_MIN16_F fWeight3 = Lanczos2_UseLUT(FFX_MIN16_F(+2.f) - t); + return (fWeight0 * fColor0 + fWeight1 * fColor1 + fWeight2 * fColor2 + fWeight3 * fColor3) / (fWeight0 + fWeight1 + fWeight2 + fWeight3); +} +#endif + +FfxFloat32x4 Lanczos2(FfxFloat32x4 fColor0, FfxFloat32x4 fColor1, FfxFloat32x4 fColor2, FfxFloat32x4 fColor3, FfxFloat32 t) +{ + FfxFloat32 fWeight0 = Lanczos2(-1.f - t); + FfxFloat32 fWeight1 = Lanczos2(-0.f - t); + FfxFloat32 fWeight2 = Lanczos2(+1.f - t); + FfxFloat32 fWeight3 = Lanczos2(+2.f - t); + return (fWeight0 * fColor0 + fWeight1 * fColor1 + fWeight2 * fColor2 + fWeight3 * fColor3) / (fWeight0 + fWeight1 + fWeight2 + fWeight3); +} + +FfxFloat32x4 Lanczos2(FetchedBicubicSamples Samples, FfxFloat32x2 fPxFrac) +{ + FfxFloat32x4 fColorX0 = Lanczos2(Samples.fColor00, Samples.fColor10, Samples.fColor20, Samples.fColor30, fPxFrac.x); + FfxFloat32x4 fColorX1 = Lanczos2(Samples.fColor01, Samples.fColor11, Samples.fColor21, Samples.fColor31, fPxFrac.x); + FfxFloat32x4 fColorX2 = Lanczos2(Samples.fColor02, Samples.fColor12, Samples.fColor22, Samples.fColor32, fPxFrac.x); + FfxFloat32x4 fColorX3 = Lanczos2(Samples.fColor03, Samples.fColor13, Samples.fColor23, Samples.fColor33, fPxFrac.x); + FfxFloat32x4 fColorXY = Lanczos2(fColorX0, fColorX1, fColorX2, fColorX3, fPxFrac.y); + + // Deringing + + // TODO: only use 4 by checking jitter + const FfxInt32 iDeringingSampleCount = 4; + const FfxFloat32x4 fDeringingSamples[4] = { + Samples.fColor11, + Samples.fColor21, + Samples.fColor12, + Samples.fColor22, + }; + + FfxFloat32x4 fDeringingMin = fDeringingSamples[0]; + FfxFloat32x4 fDeringingMax = fDeringingSamples[0]; + + FFX_UNROLL + for (FfxInt32 iSampleIndex = 1; iSampleIndex < iDeringingSampleCount; ++iSampleIndex) { + + fDeringingMin = ffxMin(fDeringingMin, fDeringingSamples[iSampleIndex]); + fDeringingMax = ffxMax(fDeringingMax, fDeringingSamples[iSampleIndex]); + } + + fColorXY = clamp(fColorXY, fDeringingMin, fDeringingMax); + + return fColorXY; +} + +#if FFX_HALF +FFX_MIN16_F4 Lanczos2(FFX_MIN16_F4 fColor0, FFX_MIN16_F4 fColor1, FFX_MIN16_F4 fColor2, FFX_MIN16_F4 fColor3, FFX_MIN16_F t) +{ + FFX_MIN16_F fWeight0 = Lanczos2(FFX_MIN16_F(-1.f) - t); + FFX_MIN16_F fWeight1 = Lanczos2(FFX_MIN16_F(-0.f) - t); + FFX_MIN16_F fWeight2 = Lanczos2(FFX_MIN16_F(+1.f) - t); + FFX_MIN16_F fWeight3 = Lanczos2(FFX_MIN16_F(+2.f) - t); + return (fWeight0 * fColor0 + fWeight1 * fColor1 + fWeight2 * fColor2 + fWeight3 * fColor3) / (fWeight0 + fWeight1 + fWeight2 + fWeight3); +} + +FFX_MIN16_F4 Lanczos2(FetchedBicubicSamplesMin16 Samples, FFX_MIN16_F2 fPxFrac) +{ + FFX_MIN16_F4 fColorX0 = Lanczos2(Samples.fColor00, Samples.fColor10, Samples.fColor20, Samples.fColor30, fPxFrac.x); + FFX_MIN16_F4 fColorX1 = Lanczos2(Samples.fColor01, Samples.fColor11, Samples.fColor21, Samples.fColor31, fPxFrac.x); + FFX_MIN16_F4 fColorX2 = Lanczos2(Samples.fColor02, Samples.fColor12, Samples.fColor22, Samples.fColor32, fPxFrac.x); + FFX_MIN16_F4 fColorX3 = Lanczos2(Samples.fColor03, Samples.fColor13, Samples.fColor23, Samples.fColor33, fPxFrac.x); + FFX_MIN16_F4 fColorXY = Lanczos2(fColorX0, fColorX1, fColorX2, fColorX3, fPxFrac.y); + + // Deringing + + // TODO: only use 4 by checking jitter + const FfxInt32 iDeringingSampleCount = 4; + const FFX_MIN16_F4 fDeringingSamples[4] = { + Samples.fColor11, + Samples.fColor21, + Samples.fColor12, + Samples.fColor22, + }; + + FFX_MIN16_F4 fDeringingMin = fDeringingSamples[0]; + FFX_MIN16_F4 fDeringingMax = fDeringingSamples[0]; + + FFX_UNROLL + for (FfxInt32 iSampleIndex = 1; iSampleIndex < iDeringingSampleCount; ++iSampleIndex) + { + fDeringingMin = ffxMin(fDeringingMin, fDeringingSamples[iSampleIndex]); + fDeringingMax = ffxMax(fDeringingMax, fDeringingSamples[iSampleIndex]); + } + + fColorXY = clamp(fColorXY, fDeringingMin, fDeringingMax); + + return fColorXY; +} +#endif //FFX_HALF + + +FfxFloat32x4 Lanczos2LUT(FetchedBicubicSamples Samples, FfxFloat32x2 fPxFrac) +{ + FfxFloat32x4 fColorX0 = Lanczos2_UseLUT(Samples.fColor00, Samples.fColor10, Samples.fColor20, Samples.fColor30, fPxFrac.x); + FfxFloat32x4 fColorX1 = Lanczos2_UseLUT(Samples.fColor01, Samples.fColor11, Samples.fColor21, Samples.fColor31, fPxFrac.x); + FfxFloat32x4 fColorX2 = Lanczos2_UseLUT(Samples.fColor02, Samples.fColor12, Samples.fColor22, Samples.fColor32, fPxFrac.x); + FfxFloat32x4 fColorX3 = Lanczos2_UseLUT(Samples.fColor03, Samples.fColor13, Samples.fColor23, Samples.fColor33, fPxFrac.x); + FfxFloat32x4 fColorXY = Lanczos2_UseLUT(fColorX0, fColorX1, fColorX2, fColorX3, fPxFrac.y); + + // Deringing + + // TODO: only use 4 by checking jitter + const FfxInt32 iDeringingSampleCount = 4; + const FfxFloat32x4 fDeringingSamples[4] = { + Samples.fColor11, + Samples.fColor21, + Samples.fColor12, + Samples.fColor22, + }; + + FfxFloat32x4 fDeringingMin = fDeringingSamples[0]; + FfxFloat32x4 fDeringingMax = fDeringingSamples[0]; + + FFX_UNROLL + for (FfxInt32 iSampleIndex = 1; iSampleIndex < iDeringingSampleCount; ++iSampleIndex) { + + fDeringingMin = ffxMin(fDeringingMin, fDeringingSamples[iSampleIndex]); + fDeringingMax = ffxMax(fDeringingMax, fDeringingSamples[iSampleIndex]); + } + + fColorXY = clamp(fColorXY, fDeringingMin, fDeringingMax); + + return fColorXY; +} + +#if FFX_HALF +FFX_MIN16_F4 Lanczos2LUT(FetchedBicubicSamplesMin16 Samples, FFX_MIN16_F2 fPxFrac) +{ + FFX_MIN16_F4 fColorX0 = Lanczos2_UseLUT(Samples.fColor00, Samples.fColor10, Samples.fColor20, Samples.fColor30, fPxFrac.x); + FFX_MIN16_F4 fColorX1 = Lanczos2_UseLUT(Samples.fColor01, Samples.fColor11, Samples.fColor21, Samples.fColor31, fPxFrac.x); + FFX_MIN16_F4 fColorX2 = Lanczos2_UseLUT(Samples.fColor02, Samples.fColor12, Samples.fColor22, Samples.fColor32, fPxFrac.x); + FFX_MIN16_F4 fColorX3 = Lanczos2_UseLUT(Samples.fColor03, Samples.fColor13, Samples.fColor23, Samples.fColor33, fPxFrac.x); + FFX_MIN16_F4 fColorXY = Lanczos2_UseLUT(fColorX0, fColorX1, fColorX2, fColorX3, fPxFrac.y); + + // Deringing + + // TODO: only use 4 by checking jitter + const FfxInt32 iDeringingSampleCount = 4; + const FFX_MIN16_F4 fDeringingSamples[4] = { + Samples.fColor11, + Samples.fColor21, + Samples.fColor12, + Samples.fColor22, + }; + + FFX_MIN16_F4 fDeringingMin = fDeringingSamples[0]; + FFX_MIN16_F4 fDeringingMax = fDeringingSamples[0]; + + FFX_UNROLL + for (FfxInt32 iSampleIndex = 1; iSampleIndex < iDeringingSampleCount; ++iSampleIndex) + { + fDeringingMin = ffxMin(fDeringingMin, fDeringingSamples[iSampleIndex]); + fDeringingMax = ffxMax(fDeringingMax, fDeringingSamples[iSampleIndex]); + } + + fColorXY = clamp(fColorXY, fDeringingMin, fDeringingMax); + + return fColorXY; +} +#endif //FFX_HALF + + + +FfxFloat32x4 Lanczos2Approx(FfxFloat32x4 fColor0, FfxFloat32x4 fColor1, FfxFloat32x4 fColor2, FfxFloat32x4 fColor3, FfxFloat32 t) +{ + FfxFloat32 fWeight0 = Lanczos2ApproxNoClamp(-1.f - t); + FfxFloat32 fWeight1 = Lanczos2ApproxNoClamp(-0.f - t); + FfxFloat32 fWeight2 = Lanczos2ApproxNoClamp(+1.f - t); + FfxFloat32 fWeight3 = Lanczos2ApproxNoClamp(+2.f - t); + return (fWeight0 * fColor0 + fWeight1 * fColor1 + fWeight2 * fColor2 + fWeight3 * fColor3) / (fWeight0 + fWeight1 + fWeight2 + fWeight3); +} + +#if FFX_HALF +FFX_MIN16_F4 Lanczos2Approx(FFX_MIN16_F4 fColor0, FFX_MIN16_F4 fColor1, FFX_MIN16_F4 fColor2, FFX_MIN16_F4 fColor3, FFX_MIN16_F t) +{ + FFX_MIN16_F fWeight0 = Lanczos2ApproxNoClamp(FFX_MIN16_F(-1.f) - t); + FFX_MIN16_F fWeight1 = Lanczos2ApproxNoClamp(FFX_MIN16_F(-0.f) - t); + FFX_MIN16_F fWeight2 = Lanczos2ApproxNoClamp(FFX_MIN16_F(+1.f) - t); + FFX_MIN16_F fWeight3 = Lanczos2ApproxNoClamp(FFX_MIN16_F(+2.f) - t); + return (fWeight0 * fColor0 + fWeight1 * fColor1 + fWeight2 * fColor2 + fWeight3 * fColor3) / (fWeight0 + fWeight1 + fWeight2 + fWeight3); +} +#endif //FFX_HALF + +FfxFloat32x4 Lanczos2Approx(FetchedBicubicSamples Samples, FfxFloat32x2 fPxFrac) +{ + FfxFloat32x4 fColorX0 = Lanczos2Approx(Samples.fColor00, Samples.fColor10, Samples.fColor20, Samples.fColor30, fPxFrac.x); + FfxFloat32x4 fColorX1 = Lanczos2Approx(Samples.fColor01, Samples.fColor11, Samples.fColor21, Samples.fColor31, fPxFrac.x); + FfxFloat32x4 fColorX2 = Lanczos2Approx(Samples.fColor02, Samples.fColor12, Samples.fColor22, Samples.fColor32, fPxFrac.x); + FfxFloat32x4 fColorX3 = Lanczos2Approx(Samples.fColor03, Samples.fColor13, Samples.fColor23, Samples.fColor33, fPxFrac.x); + FfxFloat32x4 fColorXY = Lanczos2Approx(fColorX0, fColorX1, fColorX2, fColorX3, fPxFrac.y); + + // Deringing + + // TODO: only use 4 by checking jitter + const FfxInt32 iDeringingSampleCount = 4; + const FfxFloat32x4 fDeringingSamples[4] = { + Samples.fColor11, + Samples.fColor21, + Samples.fColor12, + Samples.fColor22, + }; + + FfxFloat32x4 fDeringingMin = fDeringingSamples[0]; + FfxFloat32x4 fDeringingMax = fDeringingSamples[0]; + + FFX_UNROLL + for (FfxInt32 iSampleIndex = 1; iSampleIndex < iDeringingSampleCount; ++iSampleIndex) + { + fDeringingMin = ffxMin(fDeringingMin, fDeringingSamples[iSampleIndex]); + fDeringingMax = ffxMax(fDeringingMax, fDeringingSamples[iSampleIndex]); + } + + fColorXY = clamp(fColorXY, fDeringingMin, fDeringingMax); + + return fColorXY; +} + +#if FFX_HALF +FFX_MIN16_F4 Lanczos2Approx(FetchedBicubicSamplesMin16 Samples, FFX_MIN16_F2 fPxFrac) +{ + FFX_MIN16_F4 fColorX0 = Lanczos2Approx(Samples.fColor00, Samples.fColor10, Samples.fColor20, Samples.fColor30, fPxFrac.x); + FFX_MIN16_F4 fColorX1 = Lanczos2Approx(Samples.fColor01, Samples.fColor11, Samples.fColor21, Samples.fColor31, fPxFrac.x); + FFX_MIN16_F4 fColorX2 = Lanczos2Approx(Samples.fColor02, Samples.fColor12, Samples.fColor22, Samples.fColor32, fPxFrac.x); + FFX_MIN16_F4 fColorX3 = Lanczos2Approx(Samples.fColor03, Samples.fColor13, Samples.fColor23, Samples.fColor33, fPxFrac.x); + FFX_MIN16_F4 fColorXY = Lanczos2Approx(fColorX0, fColorX1, fColorX2, fColorX3, fPxFrac.y); + + // Deringing + + // TODO: only use 4 by checking jitter + const FfxInt32 iDeringingSampleCount = 4; + const FFX_MIN16_F4 fDeringingSamples[4] = { + Samples.fColor11, + Samples.fColor21, + Samples.fColor12, + Samples.fColor22, + }; + + FFX_MIN16_F4 fDeringingMin = fDeringingSamples[0]; + FFX_MIN16_F4 fDeringingMax = fDeringingSamples[0]; + + FFX_UNROLL + for (FfxInt32 iSampleIndex = 1; iSampleIndex < iDeringingSampleCount; ++iSampleIndex) + { + fDeringingMin = ffxMin(fDeringingMin, fDeringingSamples[iSampleIndex]); + fDeringingMax = ffxMax(fDeringingMax, fDeringingSamples[iSampleIndex]); + } + + fColorXY = clamp(fColorXY, fDeringingMin, fDeringingMax); + + return fColorXY; +} +#endif + +// Clamp by offset direction. Assuming iPxSample is already in range and iPxOffset is compile time constant. +FfxInt32x2 ClampCoord(FfxInt32x2 iPxSample, FfxInt32x2 iPxOffset, FfxInt32x2 iTextureSize) +{ + FfxInt32x2 result = iPxSample + iPxOffset; + result.x = ffxMax(1, ffxMin(result.x, iTextureSize.x - 2)); + result.y = ffxMax(1, ffxMin(result.y, iTextureSize.y - 2)); + return result; +} +#if FFX_HALF +FFX_MIN16_I2 ClampCoord(FFX_MIN16_I2 iPxSample, FFX_MIN16_I2 iPxOffset, FFX_MIN16_I2 iTextureSize) +{ + FFX_MIN16_I2 result = iPxSample + iPxOffset; + result.x = ffxMax(FFX_MIN16_I(1), ffxMin(result.x, iTextureSize.x - FFX_MIN16_I(2))); + result.y = ffxMax(FFX_MIN16_I(1), ffxMin(result.y, iTextureSize.y - FFX_MIN16_I(2))); + return result; +} +#endif //FFX_HALF + + +#define DeclareCustomFetchBicubicSamplesWithType(SampleType, TextureType, AddrType, Name, LoadTexture) \ + SampleType Name(AddrType iPxSample, AddrType iTextureSize) \ + { \ + SampleType Samples; \ + \ + Samples.fColor00 = TextureType(LoadTexture(ClampCoord(iPxSample, AddrType(-1, -1), iTextureSize))); \ + Samples.fColor10 = TextureType(LoadTexture(ClampCoord(iPxSample, AddrType(+0, -1), iTextureSize))); \ + Samples.fColor20 = TextureType(LoadTexture(ClampCoord(iPxSample, AddrType(+1, -1), iTextureSize))); \ + Samples.fColor30 = TextureType(LoadTexture(ClampCoord(iPxSample, AddrType(+2, -1), iTextureSize))); \ + \ + Samples.fColor01 = TextureType(LoadTexture(ClampCoord(iPxSample, AddrType(-1, +0), iTextureSize))); \ + Samples.fColor11 = TextureType(LoadTexture(ClampCoord(iPxSample, AddrType(+0, +0), iTextureSize))); \ + Samples.fColor21 = TextureType(LoadTexture(ClampCoord(iPxSample, AddrType(+1, +0), iTextureSize))); \ + Samples.fColor31 = TextureType(LoadTexture(ClampCoord(iPxSample, AddrType(+2, +0), iTextureSize))); \ + \ + Samples.fColor02 = TextureType(LoadTexture(ClampCoord(iPxSample, AddrType(-1, +1), iTextureSize))); \ + Samples.fColor12 = TextureType(LoadTexture(ClampCoord(iPxSample, AddrType(+0, +1), iTextureSize))); \ + Samples.fColor22 = TextureType(LoadTexture(ClampCoord(iPxSample, AddrType(+1, +1), iTextureSize))); \ + Samples.fColor32 = TextureType(LoadTexture(ClampCoord(iPxSample, AddrType(+2, +1), iTextureSize))); \ + \ + Samples.fColor03 = TextureType(LoadTexture(ClampCoord(iPxSample, AddrType(-1, +2), iTextureSize))); \ + Samples.fColor13 = TextureType(LoadTexture(ClampCoord(iPxSample, AddrType(+0, +2), iTextureSize))); \ + Samples.fColor23 = TextureType(LoadTexture(ClampCoord(iPxSample, AddrType(+1, +2), iTextureSize))); \ + Samples.fColor33 = TextureType(LoadTexture(ClampCoord(iPxSample, AddrType(+2, +2), iTextureSize))); \ + \ + return Samples; \ + } + +#define DeclareCustomFetchBicubicSamples(Name, LoadTexture) \ + DeclareCustomFetchBicubicSamplesWithType(FetchedBicubicSamples, FfxFloat32x4, FfxInt32x2, Name, LoadTexture) + +#define DeclareCustomFetchBicubicSamplesMin16(Name, LoadTexture) \ + DeclareCustomFetchBicubicSamplesWithType(FetchedBicubicSamplesMin16, FFX_MIN16_F4, FfxInt32x2, Name, LoadTexture) + +#define DeclareCustomFetchBilinearSamplesWithType(SampleType, TextureType,AddrType, Name, LoadTexture) \ + SampleType Name(AddrType iPxSample, AddrType iTextureSize) \ + { \ + SampleType Samples; \ + Samples.fColor00 = TextureType(LoadTexture(ClampCoord(iPxSample, AddrType(+0, +0), iTextureSize))); \ + Samples.fColor10 = TextureType(LoadTexture(ClampCoord(iPxSample, AddrType(+1, +0), iTextureSize))); \ + Samples.fColor01 = TextureType(LoadTexture(ClampCoord(iPxSample, AddrType(+0, +1), iTextureSize))); \ + Samples.fColor11 = TextureType(LoadTexture(ClampCoord(iPxSample, AddrType(+1, +1), iTextureSize))); \ + return Samples; \ + } + +#define DeclareCustomFetchBilinearSamples(Name, LoadTexture) \ + DeclareCustomFetchBilinearSamplesWithType(FetchedBilinearSamples, FfxFloat32x4, FfxInt32x2, Name, LoadTexture) + +#define DeclareCustomFetchBilinearSamplesMin16(Name, LoadTexture) \ + DeclareCustomFetchBilinearSamplesWithType(FetchedBilinearSamplesMin16, FFX_MIN16_F4, FfxInt32x2, Name, LoadTexture) + +// BE CAREFUL: there is some precision issues and (3253, 125) leading to (3252.9989778, 125.001102) +// is common, so iPxSample can "jitter" +#define DeclareCustomTextureSample(Name, InterpolateSamples, FetchSamples) \ + FfxFloat32x4 Name(FfxFloat32x2 fUvSample, FfxInt32x2 iTextureSize) \ + { \ + FfxFloat32x2 fPxSample = (fUvSample * FfxFloat32x2(iTextureSize)) - FfxFloat32x2(0.5f, 0.5f); \ + FfxFloat32x2 fPxFrac = ffxFract(fPxSample); \ + /* Clamp base coords */ \ + fPxSample.x = ffxMax(0.0f, ffxMin(FfxFloat32(iTextureSize.x-1), fPxSample.x)); \ + fPxSample.y = ffxMax(0.0f, ffxMin(FfxFloat32(iTextureSize.y-1), fPxSample.y)); \ + /* */ \ + FfxInt32x2 iPxSample = FfxInt32x2(floor(fPxSample)); \ + FfxFloat32x4 fColorXY = FfxFloat32x4(InterpolateSamples(FetchSamples(iPxSample, iTextureSize), fPxFrac)); \ + return fColorXY; \ + } + +#define DeclareCustomTextureSampleMin16(Name, InterpolateSamples, FetchSamples) \ + FFX_MIN16_F4 Name(FfxFloat32x2 fUvSample, FfxInt32x2 iTextureSize) \ + { \ + FfxFloat32x2 fPxSample = (fUvSample * FfxFloat32x2(iTextureSize)) - FfxFloat32x2(0.5f, 0.5f); \ + FFX_MIN16_F2 fPxFrac = FFX_MIN16_F2(ffxFract(fPxSample)); \ + /* Clamp base coords */ \ + fPxSample.x = ffxMax(0.0f, ffxMin(FfxFloat32(iTextureSize.x), fPxSample.x)); \ + fPxSample.y = ffxMax(0.0f, ffxMin(FfxFloat32(iTextureSize.y), fPxSample.y)); \ + /* */ \ + FfxInt32x2 iPxSample = FfxInt32x2(floor(fPxSample)); \ + FFX_MIN16_F4 fColorXY = FFX_MIN16_F4(InterpolateSamples(FetchSamples(iPxSample, iTextureSize), fPxFrac)); \ + return fColorXY; \ + } + +#define FFX_FSR3UPSCALER_CONCAT_ID(x, y) x ## y +#define FFX_FSR3UPSCALER_CONCAT(x, y) FFX_FSR3UPSCALER_CONCAT_ID(x, y) +#define FFX_FSR3UPSCALER_SAMPLER_1D_0 Lanczos2 +#define FFX_FSR3UPSCALER_SAMPLER_1D_1 Lanczos2LUT +#define FFX_FSR3UPSCALER_SAMPLER_1D_2 Lanczos2Approx + +#define FFX_FSR3UPSCALER_GET_LANCZOS_SAMPLER1D(x) FFX_FSR3UPSCALER_CONCAT(FFX_FSR3UPSCALER_SAMPLER_1D_, x) + +#endif //!defined( FFX_FSR3UPSCALER_SAMPLE_H ) diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_shading_change.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_shading_change.h new file mode 100644 index 000000000..2eb23aacd --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_shading_change.h @@ -0,0 +1,68 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +FFX_STATIC const FfxInt32 s_MipLevelsToUse = 3; + +struct ShadingChangeLumaInfo +{ + FfxFloat32 fSamples[s_MipLevelsToUse]; +}; + +ShadingChangeLumaInfo ComputeShadingChangeLuma(FfxInt32x2 iPxPos, FfxFloat32x2 fUv, const FfxInt32x2 iCurrentSize) +{ + ShadingChangeLumaInfo info; + + const FfxFloat32x2 fMipUv = ClampUv(fUv, ShadingChangeRenderSize(), GetSPDMipDimensions(0)); + + FFX_UNROLL + for (FfxInt32 iMipLevel = iShadingChangeMipStart; iMipLevel < s_MipLevelsToUse; iMipLevel++) { + + const FfxFloat32x2 fSample = SampleSPDMipLevel(fMipUv, iMipLevel); + + info.fSamples[iMipLevel] = abs(fSample.x * fSample.y); + } + + return info; +} + +void ShadingChange(FfxInt32x2 iPxPos) +{ + if (IsOnScreen(FfxInt32x2(iPxPos), ShadingChangeRenderSize())) { + + const FfxFloat32x2 fUv = (iPxPos + 0.5f) / ShadingChangeRenderSize(); + const FfxFloat32x2 fUvJittered = fUv + Jitter() / RenderSize(); + + const ShadingChangeLumaInfo info = ComputeShadingChangeLuma(iPxPos, fUvJittered, ShadingChangeRenderSize()); + + const FfxFloat32 fScale = 1.0f + iShadingChangeMipStart / s_MipLevelsToUse; + FfxFloat32 fShadingChange = 0.0f; + FFX_UNROLL + for (int iMipLevel = iShadingChangeMipStart; iMipLevel < s_MipLevelsToUse; iMipLevel++) + { + if (info.fSamples[iMipLevel] > 0) { + fShadingChange = ffxMax(fShadingChange, info.fSamples[iMipLevel]) * fScale; + } + } + + StoreShadingChange(iPxPos, ffxSaturate(fShadingChange)); + } +} diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_shading_change_pyramid.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_shading_change_pyramid.h new file mode 100644 index 000000000..63ca5d6d5 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_shading_change_pyramid.h @@ -0,0 +1,297 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +FFX_GROUPSHARED FfxUInt32 spdCounter; + +void SpdIncreaseAtomicCounter(FfxUInt32 slice) +{ + SPD_IncreaseAtomicCounter(spdCounter); +} + +FfxUInt32 SpdGetAtomicCounter() +{ + return spdCounter; +} + +void SpdResetAtomicCounter(FfxUInt32 slice) +{ + SPD_ResetAtomicCounter(); +} + +#ifndef SPD_PACKED_ONLY +FFX_GROUPSHARED FfxFloat32 spdIntermediateR[16][16]; +FFX_GROUPSHARED FfxFloat32 spdIntermediateG[16][16]; +FFX_GROUPSHARED FfxFloat32 spdIntermediateB[16][16]; +FFX_GROUPSHARED FfxFloat32 spdIntermediateA[16][16]; + +FFX_STATIC const FfxInt32 DIFFERENCE = 0; +FFX_STATIC const FfxInt32 SIGN_SUM = 1; +FFX_STATIC const FfxInt32 MIP0_INDICATOR = 2; + +FfxFloat32x2 Sort2(FfxFloat32x2 v) +{ + return FfxFloat32x2(ffxMin(v.x, v.y), ffxMax(v.x, v.y)); +} + +struct SampleSet +{ + FfxFloat32 fSamples[SHADING_CHANGE_SET_SIZE]; +}; + +#define CompareSwap(i, j) \ +{ \ +FfxFloat32 fTmp = ffxMin(fSet.fSamples[i], fSet.fSamples[j]);\ +fSet.fSamples[j] = ffxMax(fSet.fSamples[i], fSet.fSamples[j]);\ +fSet.fSamples[i] = fTmp;\ +} + +#if SHADING_CHANGE_SET_SIZE == 5 +FFX_STATIC const FfxInt32x2 iSampleOffsets[5] = {FfxInt32x2(+0, +0), FfxInt32x2(-1, +0), FfxInt32x2(+1, +0), FfxInt32x2(+0, -1), FfxInt32x2(+0, +1)}; + +void SortSet(FFX_PARAMETER_INOUT SampleSet fSet) +{ + CompareSwap(0, 3); + CompareSwap(1, 4); + CompareSwap(0, 2); + CompareSwap(1, 3); + CompareSwap(0, 1); + CompareSwap(2, 4); + CompareSwap(1, 2); + CompareSwap(3, 4); + CompareSwap(2, 3); +} +#endif + +FfxFloat32 ComputeMinimumDifference(FfxInt32x2 iPxPos, SampleSet fSet0, SampleSet fSet1) +{ + FfxFloat32 fMinDiff = FSR3UPSCALER_FP16_MAX - 1; + FfxInt32 a = 0; + FfxInt32 b = 0; + + SortSet(fSet0); + SortSet(fSet1); + + const FfxFloat32 fMax = ffxMin(fSet0.fSamples[SHADING_CHANGE_SET_SIZE-1], fSet1.fSamples[SHADING_CHANGE_SET_SIZE-1]); + + if (fMax > FSR3UPSCALER_FP32_MIN) { + + FFX_UNROLL + for (FfxInt32 i = 0; i < SHADING_CHANGE_SET_SIZE && (fMinDiff < FSR3UPSCALER_FP16_MAX); i++) { + + FfxFloat32 fDiff = fSet0.fSamples[a] - fSet1.fSamples[b]; + + if (abs(fDiff) > FSR3UPSCALER_FP16_MIN) { + + fDiff = sign(fDiff) * (1.0f - MinDividedByMax(fSet0.fSamples[a], fSet1.fSamples[b])); + + fMinDiff = (abs(fDiff) < abs(fMinDiff)) ? fDiff : fMinDiff; + + a += FfxInt32(fSet0.fSamples[a] < fSet1.fSamples[b]); + b += FfxInt32(fSet0.fSamples[a] >= fSet1.fSamples[b]); + } + else + { + fMinDiff = FSR3UPSCALER_FP16_MAX; + } + } + } + + return fMinDiff * FfxFloat32(fMinDiff < (FSR3UPSCALER_FP16_MAX - 1)); +} + +SampleSet GetCurrentLumaBilinearSamples(FfxFloat32x2 fUv) +{ + const FfxFloat32x2 fUvJittered = fUv + Jitter() / RenderSize(); + const FfxInt32x2 iBasePos = FfxInt32x2(floor(fUvJittered * RenderSize())); + + SampleSet fSet; + + for (FfxInt32 iSampleIndex = 0; iSampleIndex < SHADING_CHANGE_SET_SIZE; iSampleIndex++) { + const FfxInt32x2 iSamplePos = ClampLoad(iBasePos, iSampleOffsets[iSampleIndex], RenderSize()); + fSet.fSamples[iSampleIndex] = LoadCurrentLuma(iSamplePos) * Exposure(); + fSet.fSamples[iSampleIndex] = ffxPow(fSet.fSamples[iSampleIndex], fShadingChangeSamplePow); + fSet.fSamples[iSampleIndex] = ffxMax(fSet.fSamples[iSampleIndex], FSR3UPSCALER_EPSILON); + } + + return fSet; +} + +struct PreviousLumaBilinearSamplesData +{ + SampleSet fSet; + FfxBoolean bIsExistingSample; +}; + +PreviousLumaBilinearSamplesData GetPreviousLumaBilinearSamples(FfxFloat32x2 fUv, FfxFloat32x2 fMotionVector) +{ + PreviousLumaBilinearSamplesData data; + + const FfxFloat32x2 fUvJittered = fUv + PreviousFrameJitter() / PreviousFrameRenderSize(); + const FfxFloat32x2 fReprojectedUv = fUvJittered + fMotionVector; + + data.bIsExistingSample = IsUvInside(fReprojectedUv); + + if (data.bIsExistingSample) { + + const FfxInt32x2 iBasePos = FfxInt32x2(floor(fReprojectedUv * PreviousFrameRenderSize())); + + for (FfxInt32 iSampleIndex = 0; iSampleIndex < SHADING_CHANGE_SET_SIZE; iSampleIndex++) { + + const FfxInt32x2 iSamplePos = ClampLoad(iBasePos, iSampleOffsets[iSampleIndex], PreviousFrameRenderSize()); + data.fSet.fSamples[iSampleIndex] = LoadPreviousLuma(iSamplePos) * DeltaPreExposure() * Exposure(); + data.fSet.fSamples[iSampleIndex] = ffxPow(data.fSet.fSamples[iSampleIndex], fShadingChangeSamplePow); + data.fSet.fSamples[iSampleIndex] = ffxMax(data.fSet.fSamples[iSampleIndex], FSR3UPSCALER_EPSILON); + } + } + + return data; +} + +FfxFloat32 ComputeDiff(FfxInt32x2 iPxPos, FfxFloat32x2 fUv, FfxFloat32x2 fMotionVector) +{ + FfxFloat32 fMinDiff = 0.0f; + + const SampleSet fCurrentSamples = GetCurrentLumaBilinearSamples(fUv); + const PreviousLumaBilinearSamplesData previousData = GetPreviousLumaBilinearSamples(fUv, fMotionVector); + + if (previousData.bIsExistingSample) { + fMinDiff = ComputeMinimumDifference(iPxPos, fCurrentSamples, previousData.fSet); + } + + return fMinDiff; +} + +FfxFloat32x4 SpdLoadSourceImage(FfxFloat32x2 iPxPos, FfxUInt32 slice) +{ + const FfxInt32x2 iPxSamplePos = ClampLoad(FfxInt32x2(iPxPos), FfxInt32x2(0, 0), FfxInt32x2(RenderSize())); + const FfxFloat32x2 fDilatedMotionVector = LoadDilatedMotionVector(iPxSamplePos); + const FfxFloat32x2 fUv = (iPxSamplePos + 0.5f) / RenderSize(); + + const FfxFloat32 fScaledAndSignedLumaDiff = ComputeDiff(iPxSamplePos, fUv, fDilatedMotionVector); + + FfxFloat32x4 fOutput = FfxFloat32x4(0.0f, 0.0f, 0.0f, 0.0f); + fOutput[DIFFERENCE] = fScaledAndSignedLumaDiff; + fOutput[SIGN_SUM] = (fScaledAndSignedLumaDiff != 0.0f) ? sign(fScaledAndSignedLumaDiff) : 0.0f; + fOutput[MIP0_INDICATOR] = 1.0f; + + return fOutput; +} + +FfxFloat32x4 SpdLoad(FfxInt32x2 tex, FfxUInt32 slice) +{ + return FfxFloat32x4(RWLoadPyramid(tex, 5), 0, 0); +} + +FfxFloat32x4 SpdReduce4(FfxFloat32x4 v0, FfxFloat32x4 v1, FfxFloat32x4 v2, FfxFloat32x4 v3) +{ + return (v0 + v1 + v2 + v3) * 0.25f; +} + +void SpdStore(FfxInt32x2 pix, FfxFloat32x4 outValue, FfxUInt32 index, FfxUInt32 slice) +{ + if (index >= iShadingChangeMipStart) + { + StorePyramid(pix, outValue.xy, index); + } +} + +FfxFloat32x4 SpdLoadIntermediate(FfxUInt32 x, FfxUInt32 y) +{ + return FfxFloat32x4( + spdIntermediateR[x][y], + spdIntermediateG[x][y], + spdIntermediateB[x][y], + spdIntermediateA[x][y]); +} +void SpdStoreIntermediate(FfxUInt32 x, FfxUInt32 y, FfxFloat32x4 value) +{ + spdIntermediateR[x][y] = value.x; + spdIntermediateG[x][y] = value.y; + spdIntermediateB[x][y] = value.z; + spdIntermediateA[x][y] = value.w; +} + +#endif + +// define fetch and store functions Packed +#if FFX_HALF + +FFX_GROUPSHARED FfxFloat16x2 spdIntermediateRG[16][16]; +FFX_GROUPSHARED FfxFloat16x2 spdIntermediateBA[16][16]; + +FfxFloat16x4 SpdLoadSourceImageH(FfxFloat32x2 tex, FfxUInt32 slice) +{ + return FfxFloat16x4(0, 0, 0, 0); +} + +FfxFloat16x4 SpdLoadH(FfxInt32x2 p, FfxUInt32 slice) +{ + return FfxFloat16x4(0, 0, 0, 0); +} + +void SpdStoreH(FfxInt32x2 p, FfxFloat16x4 value, FfxUInt32 mip, FfxUInt32 slice) +{ +} + +FfxFloat16x4 SpdLoadIntermediateH(FfxUInt32 x, FfxUInt32 y) +{ + return FfxFloat16x4( + spdIntermediateRG[x][y].x, + spdIntermediateRG[x][y].y, + spdIntermediateBA[x][y].x, + spdIntermediateBA[x][y].y); +} + +void SpdStoreIntermediateH(FfxUInt32 x, FfxUInt32 y, FfxFloat16x4 value) +{ + spdIntermediateRG[x][y] = value.xy; + spdIntermediateBA[x][y] = value.zw; +} + +FfxFloat16x4 SpdReduce4H(FfxFloat16x4 v0, FfxFloat16x4 v1, FfxFloat16x4 v2, FfxFloat16x4 v3) +{ + return (v0 + v1 + v2 + v3) * FfxFloat16(0.25); +} +#endif + +#include "spd/ffx_spd.h" + +void ComputeShadingChangePyramid(FfxUInt32x3 WorkGroupId, FfxUInt32 LocalThreadIndex) +{ +#if FFX_HALF + SpdDownsampleH( + FfxUInt32x2(WorkGroupId.xy), + FfxUInt32(LocalThreadIndex), + FfxUInt32(MipCount()), + FfxUInt32(NumWorkGroups()), + FfxUInt32(WorkGroupId.z), + FfxUInt32x2(WorkGroupOffset())); +#else + SpdDownsample( + FfxUInt32x2(WorkGroupId.xy), + FfxUInt32(LocalThreadIndex), + FfxUInt32(MipCount()), + FfxUInt32(NumWorkGroups()), + FfxUInt32(WorkGroupId.z), + FfxUInt32x2(WorkGroupOffset())); +#endif +} diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_upsample.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_upsample.h new file mode 100644 index 000000000..801a0a907 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/fsr3upscaler/ffx_fsr3upscaler_upsample.h @@ -0,0 +1,644 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +void Deringing(RectificationBox clippingBox, FFX_PARAMETER_INOUT FfxFloat32x3 fColor) +{ + fColor = clamp(fColor, clippingBox.aabbMin, clippingBox.aabbMax); +} + +#ifndef FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE +#define FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE 2 // Approximate +#endif + +FfxFloat32 GetUpsampleLanczosWeight(FfxFloat32x2 fSrcSampleOffset, FfxFloat32 fKernelWeight) +{ + FfxFloat32x2 fSrcSampleOffsetBiased = fSrcSampleOffset * fKernelWeight.xx; +#if FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 0 // LANCZOS_TYPE_REFERENCE + FfxFloat32 fSampleWeight = Lanczos2(length(fSrcSampleOffsetBiased)); +#elif FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 1 // LANCZOS_TYPE_LUT + FfxFloat32 fSampleWeight = Lanczos2_UseLUT(length(fSrcSampleOffsetBiased)); +#elif FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 2 // LANCZOS_TYPE_APPROXIMATE + FfxFloat32 fSampleWeight = Lanczos2ApproxSq(dot(fSrcSampleOffsetBiased, fSrcSampleOffsetBiased)); +#else +#error "Invalid Lanczos type" +#endif + return fSampleWeight; +} + +#if FFX_HALF +FFX_MIN16_F GetUpsampleLanczosWeight(FFX_MIN16_F2 fSrcSampleOffset, FFX_MIN16_F fKernelWeight) +{ + FFX_MIN16_F2 fSrcSampleOffsetBiased = fSrcSampleOffset * fKernelWeight.xx; +#if FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 0 // LANCZOS_TYPE_REFERENCE + FFX_MIN16_F fSampleWeight = Lanczos2(length(fSrcSampleOffsetBiased)); +#elif FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 1 // LANCZOS_TYPE_LUT + FFX_MIN16_F fSampleWeight = Lanczos2_UseLUT(length(fSrcSampleOffsetBiased)); +#elif FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 2 // LANCZOS_TYPE_APPROXIMATE + FFX_MIN16_F fSampleWeight = Lanczos2ApproxSq(dot(fSrcSampleOffsetBiased, fSrcSampleOffsetBiased)); + + // To Test: Save reciproqual sqrt compute + // FfxFloat32 fSampleWeight = Lanczos2Sq_UseLUT(dot(fSrcSampleOffsetBiased, fSrcSampleOffsetBiased)); +#else +#error "Invalid Lanczos type" +#endif + return fSampleWeight; +} +#endif + +FfxFloat32 ComputeMaxKernelWeight(const AccumulationPassCommonParams params, FFX_PARAMETER_INOUT AccumulationPassData data) { + + const FfxFloat32 fKernelSizeBias = 1.0f + (1.0f / FfxFloat32x2(DownscaleFactor()) - 1.0f).x; + + return ffxMin(FfxFloat32(1.99f), fKernelSizeBias); +} + +FfxFloat32x3 LoadPreparedColor(FfxInt32x2 iSamplePos) +{ + const FfxFloat32x3 fRgb = ffxMax(FfxFloat32x3(0, 0, 0), LoadInputColor(iSamplePos)) * Exposure(); + const FfxFloat32x3 fPreparedYCoCg = RGBToYCoCg(fRgb); + + return fPreparedYCoCg; +} + +#if FFX_HALF && (FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 2) && defined(__XBOX_SCARLETT) && defined(__XBATG_EXTRA_16_BIT_OPTIMISATION) && (__XBATG_EXTRA_16_BIT_OPTIMISATION == 1) +#define FFX_FSR3UPSCALER_USE_XBOX_PAIRED_16BIT_MATH_OPTIMIZATIONS 1 +#else +#define FFX_FSR3UPSCALER_USE_XBOX_PAIRED_16BIT_MATH_OPTIMIZATIONS 0 +#endif + +#if FFX_FSR3UPSCALER_USE_XBOX_PAIRED_16BIT_MATH_OPTIMIZATIONS + +void LoadPreparedColorPairedRgb(FFX_PARAMETER_OUT FFX_MIN16_F2 r, + FFX_PARAMETER_OUT FFX_MIN16_F2 g, + FFX_PARAMETER_OUT FFX_MIN16_F2 b, + FfxInt32x2 iSamplePos0, + FfxInt32x2 iSamplePos1) +{ + const FFX_MIN16_F3 sample0 = FFX_MIN16_F3(LoadInputColor(iSamplePos0)); + const FFX_MIN16_F3 sample1 = FFX_MIN16_F3(LoadInputColor(iSamplePos1)); + + r = ffxMax(FFX_MIN16_F2(0, 0), FFX_MIN16_F2(sample0.r, sample1.r)); + g = ffxMax(FFX_MIN16_F2(0, 0), FFX_MIN16_F2(sample0.g, sample1.g)); + b = ffxMax(FFX_MIN16_F2(0, 0), FFX_MIN16_F2(sample0.b, sample1.b)); + + r = FFX_MIN16_F2(r * Exposure()); + g = FFX_MIN16_F2(g * Exposure()); + b = FFX_MIN16_F2(b * Exposure()); +} + +void TonemapPaired(FFX_PARAMETER_INOUT FFX_MIN16_F2 r, FFX_PARAMETER_INOUT FFX_MIN16_F2 g, FFX_PARAMETER_INOUT FFX_MIN16_F2 b) +{ + FFX_MIN16_F2 denomF16 = ffxMax(ffxMax(ffxMax(0.0, r), g), b) + FFX_MIN16_F2(1.0, 1.0); + + // NOTE: expect 2 x v_cvt_f32_f16 + FfxFloat32x2 denomF32 = FfxFloat32x2(denomF16); + // NOTE: expect 2 x v_rcp_f32 + FfxFloat32x2 normF32 = FfxFloat32x2(1.0, 1.0) / denomF32; + // NOTE: expect 2 x v_cvt_f16_f32 + FFX_MIN16_F2 normF16 = FFX_MIN16_F2(normF32); + + r *= normF16; + g *= normF16; + b *= normF16; +} + +void RGBToYCoCgPaired(FFX_PARAMETER_INOUT FFX_MIN16_F2 r, FFX_PARAMETER_INOUT FFX_MIN16_F2 g, FFX_PARAMETER_INOUT FFX_MIN16_F2 b) +{ + /** + * NOTE: given the following conversion + * + * fYCoCg = FfxFloat32x3( + * 0.25f * fRgb.r + 0.5f * fRgb.g + 0.25f * fRgb.b, + * 0.5f * fRgb.r - 0.5f * fRgb.b, + * -0.25f * fRgb.r + 0.5f * fRgb.g - 0.25f * fRgb.b); + * + * it's possible to notice that we can compute: + * RplusBdiv4 = 0.25 * (R + B) + * + * so everything else is computed in 3 instructions + * Y = G * 0.5 + RplusBdiv4 + * Co = 2 * RplusBdiv4 - G + * Cg = G * 0.5 - RplusBdiv4 + */ + + // NOTE: expect v_pk_add_f32 + v_pk_mul_f32 + FFX_MIN16_F2 RplusBdiv4 = (r + b) * 0.25; + FFX_MIN16_F2 G = g; + FFX_MIN16_F2 B = b; + + // NOTE: expect 3x v_pk_fma_f32 + r = G * 0.5 + RplusBdiv4; + g = RplusBdiv4 * 2.0 - B; + b = G * 0.5 - RplusBdiv4; +} + +FFX_MIN16_F2 Compute3x3SamplesMinMaxPaired(FFX_PARAMETER_IN FFX_MIN16_F2 sampleCenter, + FFX_PARAMETER_IN FFX_MIN16_F2 sample0, + FFX_PARAMETER_IN FFX_MIN16_F2 sample1, + FFX_PARAMETER_IN FFX_MIN16_F2 sample2, + FFX_PARAMETER_IN FFX_MIN16_F2 sample3) +{ + FFX_MIN16_F2 twoMinValues = ffxMin(ffxMin(sample0, sample1), ffxMin(sample2, sample3)); + FFX_MIN16_F2 twoMaxValues = ffxMax(ffxMax(sample0, sample1), ffxMax(sample2, sample3)); + + return FFX_MIN16_F2( + ffxMin3Half(twoMinValues.x, twoMinValues.y, sampleCenter.x), + ffxMax3Half(twoMaxValues.x, twoMaxValues.y, sampleCenter.x) + ); +} + + +FFX_MIN16_F2 Bool2ToFloat16x2(bool x, bool y) +{ + uint lo = x ? 0x00003c00 : 0x00000000; + uint hi = y ? 0x3c000000 : 0x00000000; + return FFX_MIN16_F2(__XB_AsHalf(lo).x, __XB_AsHalf(hi).y); +} + +struct PairedRectificationBoxAndAccumulatedColorAndWeight +{ + FFX_MIN16_F2 boxCenterR; + FFX_MIN16_F2 boxCenterG; + FFX_MIN16_F2 boxCenterB; + + FFX_MIN16_F2 boxVecR; + FFX_MIN16_F2 boxVecG; + FFX_MIN16_F2 boxVecB; + + FFX_MIN16_F2 fBoxCenterWeight; + + FFX_MIN16_F2 fColorR; + FFX_MIN16_F2 fColorG; + FFX_MIN16_F2 fColorB; + FFX_MIN16_F2 fWeight; + + FFX_MIN16_F fKernelBiasSq; + FFX_MIN16_F fRectificationCurveBias; + + void setKernelBiasAndRectificationCurveBias(FfxFloat32 kernelBias, FfxFloat32 rectificationCurveBias) + { + fKernelBiasSq = FFX_MIN16_F(kernelBias * kernelBias); + fRectificationCurveBias = FFX_MIN16_F(rectificationCurveBias); + } + + void initUpscaledColor(FFX_MIN16_F fSrcSampleOffsetSq, FFX_MIN16_F fOnScreenWeight, FFX_MIN16_F2 sampleR, FFX_MIN16_F2 sampleG, FFX_MIN16_F2 sampleB) + { + #if FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 2 // LANCZOS_TYPE_APPROXIMATE + const FFX_MIN16_F2 LanczosUpsampleWeight = FFX_MIN16_F2( + PairedLanczos2ApproxSq(fSrcSampleOffsetSq * fKernelBiasSq).x, + 0.0 + ); + #else + #error "Only LANCZOS_TYPE_APPROXIMATE is supported in paired version so far" + #endif + const FFX_MIN16_F2 fSampleWeight = fOnScreenWeight * LanczosUpsampleWeight; + + fColorR = sampleR * fSampleWeight; + fColorG = sampleG * fSampleWeight; + fColorB = sampleB * fSampleWeight; + fWeight = fSampleWeight; + } + + void initBox(FFX_MIN16_F fSrcSampleOffsetSq, FFX_MIN16_F fOnScreenWeight, FFX_MIN16_F2 sampleR, FFX_MIN16_F2 sampleG, FFX_MIN16_F2 sampleB) + { + const FFX_MIN16_F2 fBoxSampleWeight = FFX_MIN16_F2( + exp(fRectificationCurveBias * fSrcSampleOffsetSq) * fOnScreenWeight, + 0.0 + ); + + FFX_MIN16_F2 weightedSampleR = sampleR * fBoxSampleWeight; + FFX_MIN16_F2 weightedSampleG = sampleG * fBoxSampleWeight; + FFX_MIN16_F2 weightedSampleB = sampleB * fBoxSampleWeight; + + boxCenterR = weightedSampleR; + boxCenterG = weightedSampleG; + boxCenterB = weightedSampleB; + + boxVecR = sampleR * weightedSampleR; + boxVecG = sampleG * weightedSampleG; + boxVecB = sampleB * weightedSampleB; + + fBoxCenterWeight = fBoxSampleWeight; + } + + void addUpscaledColorSample(FFX_MIN16_F2 fSrcSampleOffsetSq, FFX_MIN16_F2 fOnScreenWeight, FFX_MIN16_F2 sampleR, FFX_MIN16_F2 sampleG, FFX_MIN16_F2 sampleB) + { + #if FFX_FSR3UPSCALER_OPTION_UPSAMPLE_USE_LANCZOS_TYPE == 2 // LANCZOS_TYPE_APPROXIMATE + const FFX_MIN16_F2 LanczosUpsampleWeight = PairedLanczos2ApproxSq(fSrcSampleOffsetSq * fKernelBiasSq); + #else + #error "Only LANCZOS_TYPE_APPROXIMATE is supported in paired version so far" + #endif + const FFX_MIN16_F2 fSampleWeight = fOnScreenWeight * LanczosUpsampleWeight; + + fColorR += sampleR * fSampleWeight; + fColorG += sampleG * fSampleWeight; + fColorB += sampleB * fSampleWeight; + fWeight += fSampleWeight; + } + + void addBoxSample(FFX_MIN16_F2 fSrcSampleOffsetSq, FFX_MIN16_F2 fOnScreenWeight, FFX_MIN16_F2 sampleR, FFX_MIN16_F2 sampleG, FFX_MIN16_F2 sampleB) + { + // NOTE: ideally expect here 2x v_fma_mix + 2x v_exp_f32 + 2x v_fma_mix + const FFX_MIN16_F2 fBoxSampleWeight = exp(fRectificationCurveBias * fSrcSampleOffsetSq) * fOnScreenWeight; + + FFX_MIN16_F2 weightedSampleR = sampleR * fBoxSampleWeight; + FFX_MIN16_F2 weightedSampleG = sampleG * fBoxSampleWeight; + FFX_MIN16_F2 weightedSampleB = sampleB * fBoxSampleWeight; + + boxCenterR += weightedSampleR; + boxCenterG += weightedSampleG; + boxCenterB += weightedSampleB; + + boxVecR += sampleR * weightedSampleR; + boxVecG += sampleG * weightedSampleG; + boxVecB += sampleB * weightedSampleB; + + fBoxCenterWeight += fBoxSampleWeight; + } + + void finalizeUpscaledColor(FFX_PARAMETER_OUT FfxFloat32x4 upscaledColorAndWeight) + { + upscaledColorAndWeight.r = fColorR.x + fColorR.y; + upscaledColorAndWeight.g = fColorG.x + fColorG.y; + upscaledColorAndWeight.b = fColorB.x + fColorB.y; + + upscaledColorAndWeight.a = fWeight.x + fWeight.y; + } + + void finalizeBox(FFX_PARAMETER_OUT FfxFloat32x2 boxCenterAndVecR, + FFX_PARAMETER_OUT FfxFloat32x2 boxCenterAndVecG, + FFX_PARAMETER_OUT FfxFloat32x2 boxCenterAndVecB, + FFX_PARAMETER_OUT FfxFloat32 boxCenterWeight) + { + boxCenterAndVecR = FfxFloat32x2(boxCenterR.x + boxCenterR.y, boxVecR.x + boxVecR.y); + boxCenterAndVecG = FfxFloat32x2(boxCenterG.x + boxCenterG.y, boxVecG.x + boxVecG.y); + boxCenterAndVecB = FfxFloat32x2(boxCenterB.x + boxCenterB.y, boxVecB.x + boxVecB.y); + + boxCenterWeight = fBoxCenterWeight.x + fBoxCenterWeight.y; + } +}; +#endif // #if FFX_FSR3UPSCALER_USE_XBOX_PAIRED_16BIT_MATH_OPTIMIZATIONS + +void ComputeUpsampledColorAndWeight(const AccumulationPassCommonParams params, FFX_PARAMETER_INOUT AccumulationPassData data) +{ + // We compute a sliced lanczos filter with 2 lobes (other slices are accumulated temporaly) + const FfxFloat32x2 fDstOutputPos = FfxFloat32x2(params.iPxHrPos) + FFX_BROADCAST_FLOAT32X2(0.5f); + const FfxFloat32x2 fSrcOutputPos = fDstOutputPos * DownscaleFactor(); + const FfxInt32x2 iSrcInputPos = FfxInt32x2(floor(fSrcOutputPos)); + const FfxFloat32x2 fSrcUnjitteredPos = (FfxFloat32x2(iSrcInputPos) + FfxFloat32x2(0.5f, 0.5f)) - Jitter(); // This is the un-jittered position of the sample at offset 0,0 + const FfxFloat32x2 fBaseSampleOffset = FfxFloat32x2(fSrcUnjitteredPos - fSrcOutputPos); + + FfxInt32x2 offsetTL; + offsetTL.x = (fSrcUnjitteredPos.x > fSrcOutputPos.x) ? FfxInt32(-2) : FfxInt32(-1); + offsetTL.y = (fSrcUnjitteredPos.y > fSrcOutputPos.y) ? FfxInt32(-2) : FfxInt32(-1); + + //Load samples + // If fSrcUnjitteredPos.y > fSrcOutputPos.y, indicates offsetTL.y = -2, sample offset Y will be [-2, 1], clipbox will be rows [1, 3]. + // Flip row# for sampling offset in this case, so first 0~2 rows in the sampled array can always be used for computing the clipbox. + // This reduces branch or cmove on sampled colors, but moving this overhead to sample position / weight calculation time which apply to less values. + const FfxBoolean bFlipRow = fSrcUnjitteredPos.y > fSrcOutputPos.y; + const FfxBoolean bFlipCol = fSrcUnjitteredPos.x > fSrcOutputPos.x; + const FfxFloat32x2 fOffsetTL = FfxFloat32x2(offsetTL); + + const FfxBoolean bIsInitialSample = (params.fAccumulation == 0.0f); + +#if FFX_FSR3UPSCALER_USE_XBOX_PAIRED_16BIT_MATH_OPTIMIZATIONS + // Unroll the loop to load samples on Scarlett to help the shader compiler + const FFX_MIN16_F2 fSampleOffsetX02 = __XB_AsHalf(bFlipCol ? __XB_AsUInt(FFX_MIN16_F2( 1, -1)) : __XB_AsUInt(FFX_MIN16_F2(-1, 1))); + const FFX_MIN16_F2 fSampleOffsetY02 = __XB_AsHalf(bFlipRow ? __XB_AsUInt(FFX_MIN16_F2( 1, -1)) : __XB_AsUInt(FFX_MIN16_F2(-1, 1))); + + typedef FfxInt32 FfxTexCoordI; + typedef FfxInt32x2 FfxTexCoordI2; + + const FfxTexCoordI2 iSrcSamplePosX01 = FfxTexCoordI2(iSrcInputPos.xx) + (bFlipCol ? FfxTexCoordI2( 1, 0) : FfxTexCoordI2(-1, 0)); + const FfxTexCoordI2 iSrcSamplePosX23 = FfxTexCoordI2(iSrcInputPos.xx) + (bFlipCol ? FfxTexCoordI2(-1, -2) : FfxTexCoordI2( 1, 2)); + + const FfxTexCoordI2 iSrcSamplePosY01 = FfxTexCoordI2(iSrcInputPos.yy) + (bFlipRow ? FfxTexCoordI2( 1, 0) : FfxTexCoordI2(-1, 0)); + const FfxTexCoordI2 iSrcSamplePosY23 = FfxTexCoordI2(iSrcInputPos.yy) + (bFlipRow ? FfxTexCoordI2(-1, -2) : FfxTexCoordI2( 1, 2)); + + const FfxTexCoordI2 renderSizeLastTexelCoord = FfxTexCoordI2(RenderSize()) - FfxTexCoordI2(1, 1); + + const FfxTexCoordI2 iSrcSamplePosX01Clamped = FfxTexCoordI2( + __XB_Med3_I32(iSrcSamplePosX01.x, 0, renderSizeLastTexelCoord.x), + __XB_Med3_I32(iSrcSamplePosX01.y, 0, renderSizeLastTexelCoord.x) + ); + + const FfxTexCoordI2 iSrcSamplePosX23Clamped = FfxTexCoordI2( + __XB_Med3_I32(iSrcSamplePosX23.x, 0, renderSizeLastTexelCoord.x), + __XB_Med3_I32(iSrcSamplePosX23.y, 0, renderSizeLastTexelCoord.x) + ); + + const FfxTexCoordI2 iSrcSamplePosY01Clamped = FfxTexCoordI2( + __XB_Med3_I32(iSrcSamplePosY01.x, 0, renderSizeLastTexelCoord.y), + __XB_Med3_I32(iSrcSamplePosY01.y, 0, renderSizeLastTexelCoord.y) + ); + + const FfxTexCoordI2 iSrcSamplePosY23Clamped = FfxTexCoordI2( + __XB_Med3_I32(iSrcSamplePosY23.x, 0, renderSizeLastTexelCoord.y), + __XB_Med3_I32(iSrcSamplePosY23.y, 0, renderSizeLastTexelCoord.y) + ); + + FFX_MIN16_F2 TopCornerR, BotCornerR, HorzR, VertR, CenterR; + FFX_MIN16_F2 TopCornerG, BotCornerG, HorzG, VertG, CenterG; + FFX_MIN16_F2 TopCornerB, BotCornerB, HorzB, VertB, CenterB; + + LoadPreparedColorPairedRgb(TopCornerR, TopCornerG, TopCornerB, + FfxTexCoordI2(iSrcSamplePosX01Clamped.x, iSrcSamplePosY01Clamped.x), + FfxTexCoordI2(iSrcSamplePosX23Clamped.x, iSrcSamplePosY01Clamped.x) + ); + + LoadPreparedColorPairedRgb(BotCornerR, BotCornerG, BotCornerB, + FfxTexCoordI2(iSrcSamplePosX01Clamped.x, iSrcSamplePosY23Clamped.x), + FfxTexCoordI2(iSrcSamplePosX23Clamped.x, iSrcSamplePosY23Clamped.x) + ); + + LoadPreparedColorPairedRgb(HorzR, HorzG, HorzB, + FfxTexCoordI2(iSrcSamplePosX01Clamped.x, iSrcSamplePosY01Clamped.y), + FfxTexCoordI2(iSrcSamplePosX23Clamped.x, iSrcSamplePosY01Clamped.y) + ); + + LoadPreparedColorPairedRgb(VertR, VertG, VertB, + FfxTexCoordI2(iSrcSamplePosX01Clamped.y, iSrcSamplePosY01Clamped.x), + FfxTexCoordI2(iSrcSamplePosX01Clamped.y, iSrcSamplePosY23Clamped.x) + ); + + // NOTE: duplicated data + LoadPreparedColorPairedRgb(CenterR, CenterG, CenterB, + FfxTexCoordI2(iSrcSamplePosX01Clamped.y, iSrcSamplePosY01Clamped.y), + FfxTexCoordI2(iSrcSamplePosX01Clamped.y, iSrcSamplePosY01Clamped.y) + ); + + #if FFX_FSR3UPSCALER_OPTION_HDR_COLOR_INPUT + if (bIsInitialSample) + { + TonemapPaired(TopCornerR, TopCornerG, TopCornerB); + TonemapPaired(BotCornerR, BotCornerG, BotCornerB); + TonemapPaired(HorzR, HorzG, HorzB); + TonemapPaired(VertR, VertG, VertB); + TonemapPaired(CenterR, CenterG, CenterB); + } + #endif + + RGBToYCoCgPaired(TopCornerR, TopCornerG, TopCornerB); + RGBToYCoCgPaired(BotCornerR, BotCornerG, BotCornerB); + RGBToYCoCgPaired(HorzR, HorzG, HorzB); + RGBToYCoCgPaired(VertR, VertG, VertB); + RGBToYCoCgPaired(CenterR, CenterG, CenterB); + +#else + FfxFloat32x3 fSamples[9]; + FfxInt32 iSampleIndex = 0; + + FFX_UNROLL + for (FfxInt32 row = 0; row < 3; row++) { + FFX_UNROLL + for (FfxInt32 col = 0; col < 3; col++) { + const FfxInt32x2 iSampleColRow = FfxInt32x2(bFlipCol ? (3 - col) : col, bFlipRow ? (3 - row) : row); + const FfxInt32x2 iSrcSamplePos = FfxInt32x2(iSrcInputPos) + offsetTL + iSampleColRow; + const FfxInt32x2 iSampleCoord = ClampLoad(iSrcSamplePos, FfxInt32x2(0, 0), FfxInt32x2(RenderSize())); + + fSamples[iSampleIndex] = LoadPreparedColor(iSampleCoord); + + ++iSampleIndex; + } + } + +#if FFX_FSR3UPSCALER_OPTION_HDR_COLOR_INPUT + if (bIsInitialSample) + { + for (iSampleIndex = 0; iSampleIndex < 9; ++iSampleIndex) + { + //YCoCg -> RGB -> Tonemap -> YCoCg (Use RGB tonemapper to avoid color desaturation) + fSamples[iSampleIndex] = RGBToYCoCg(Tonemap(YCoCgToRGB(fSamples[iSampleIndex]))); + } + } +#endif + +#endif // #if FFX_FSR3UPSCALER_USE_XBOX_PAIRED_16BIT_MATH_OPTIMIZATIONS + + // Identify how much of each upsampled color to be used for this frame + const FfxFloat32 fKernelBiasMax = ComputeMaxKernelWeight(params, data); + const FfxFloat32 fKernelBiasMin = ffxMax(1.0f, ((1.0f + fKernelBiasMax) * 0.3f)); + + const FfxFloat32 fKernelBiasWeight = + ffxMin(1.0f - params.fDisocclusion * 0.5f, + ffxMin(1.0f - params.fShadingChange, + ffxSaturate(data.fHistoryWeight * 5.0f) + )); + + const FfxFloat32 fKernelBias = ffxLerp(fKernelBiasMin, fKernelBiasMax, fKernelBiasWeight); + +#if FFX_FSR3UPSCALER_USE_XBOX_PAIRED_16BIT_MATH_OPTIMIZATIONS + // Unroll the loop to load samples on Scarlett to help the shader compiler + const bool coordX0OnScreen = iSrcSamplePosX01.x == iSrcSamplePosX01Clamped.x; + const bool coordX1OnScreen = iSrcSamplePosX01.y == iSrcSamplePosX01Clamped.y; + const bool coordX2OnScreen = iSrcSamplePosX23.x == iSrcSamplePosX23Clamped.x; + + const bool coordY0OnScreen = iSrcSamplePosY01.x == iSrcSamplePosY01Clamped.x; + const bool coordY1OnScreen = iSrcSamplePosY01.y == iSrcSamplePosY01Clamped.y; + const bool coordY2OnScreen = iSrcSamplePosY23.x == iSrcSamplePosY23Clamped.x; + + const FFX_MIN16_F2 fBaseSampleOffsetHalf = FFX_MIN16_F2(fBaseSampleOffset); + + const FFX_MIN16_F2 fSrcSampleOffsetX_02 = fBaseSampleOffsetHalf.xx + fSampleOffsetX02; + const FFX_MIN16_F2 fSrcSampleOffsetY_02 = fBaseSampleOffsetHalf.yy + fSampleOffsetY02; + + const FFX_MIN16_F2 fSrcSampleOffsetXSq_02 = fSrcSampleOffsetX_02 * fSrcSampleOffsetX_02; + const FFX_MIN16_F2 fSrcSampleOffsetYSq_02 = fSrcSampleOffsetY_02 * fSrcSampleOffsetY_02; + const FFX_MIN16_F2 fSrcSampleOffsetXYSq_11 = fBaseSampleOffsetHalf * fBaseSampleOffsetHalf; + + const FfxFloat32 fRectificationCurveBias = -2.3f; + PairedRectificationBoxAndAccumulatedColorAndWeight pairedBox; + pairedBox.setKernelBiasAndRectificationCurveBias(fKernelBias, fRectificationCurveBias); + + // init by o o o + // o x o + // o o o + pairedBox.initBox( + fSrcSampleOffsetXYSq_11.x + fSrcSampleOffsetXYSq_11.y, + Bool2ToFloat16x2(coordX1OnScreen && coordY1OnScreen, false).x, + CenterR, CenterG, CenterB + ); + + // add remaining two samples from 1st row x o x + // o * o + // o o o + pairedBox.addBoxSample( + fSrcSampleOffsetXSq_02 + fSrcSampleOffsetYSq_02.xx, + Bool2ToFloat16x2(coordX0OnScreen && coordY0OnScreen, coordX2OnScreen && coordY0OnScreen), + TopCornerR, TopCornerG, TopCornerB + ); + + // add two samples from 2nd row * o * + // o * o + // x o x + pairedBox.addBoxSample( + fSrcSampleOffsetXSq_02 + fSrcSampleOffsetYSq_02.yy, + Bool2ToFloat16x2(coordX0OnScreen && coordY2OnScreen, coordX2OnScreen && coordY2OnScreen), + BotCornerR, BotCornerG, BotCornerB + ); + + // add two samples from 3rd row * o * + // x * x + // * o * + pairedBox.addBoxSample( + fSrcSampleOffsetXSq_02 + fSrcSampleOffsetXYSq_11.yy, + Bool2ToFloat16x2(coordX0OnScreen && coordY1OnScreen, coordX2OnScreen && coordY1OnScreen), + HorzR, HorzG, HorzB + ); + + // add remaining samples * x * + // * * * + // * x * + pairedBox.addBoxSample( + fSrcSampleOffsetXYSq_11.xx + fSrcSampleOffsetYSq_02, + Bool2ToFloat16x2(coordX1OnScreen && coordY0OnScreen, coordX1OnScreen && coordY2OnScreen), + VertR, VertG, VertB + ); + + FfxFloat32x2 boxCenterAndVecR, boxCenterAndVecG, boxCenterAndVecB; + FfxFloat32 boxCenterWeight; + pairedBox.finalizeBox(boxCenterAndVecR, boxCenterAndVecG, boxCenterAndVecB, boxCenterWeight); + + if (!bIsInitialSample) + { + pairedBox.initUpscaledColor( + fSrcSampleOffsetXYSq_11.x + fSrcSampleOffsetXYSq_11.y, + Bool2ToFloat16x2(coordX1OnScreen && coordY1OnScreen, false).x, + CenterR, CenterG, CenterB + ); + + // add remaining two samples from 1st row x o x + // o * o + // o o o + pairedBox.addUpscaledColorSample( + fSrcSampleOffsetXSq_02 + fSrcSampleOffsetYSq_02.xx, + Bool2ToFloat16x2(coordX0OnScreen && coordY0OnScreen, coordX2OnScreen && coordY0OnScreen), + TopCornerR, TopCornerG, TopCornerB + ); + + // add two samples from 2nd row * o * + // o * o + // x o x + pairedBox.addUpscaledColorSample( + fSrcSampleOffsetXSq_02 + fSrcSampleOffsetYSq_02.yy, + Bool2ToFloat16x2(coordX0OnScreen && coordY2OnScreen, coordX2OnScreen && coordY2OnScreen), + BotCornerR, BotCornerG, BotCornerB + ); + + // add two samples from 3rd row * o * + // x * x + // * o * + pairedBox.addUpscaledColorSample( + fSrcSampleOffsetXSq_02 + fSrcSampleOffsetXYSq_11.yy, + Bool2ToFloat16x2(coordX0OnScreen && coordY1OnScreen, coordX2OnScreen && coordY1OnScreen), + HorzR, HorzG, HorzB + ); + + // add remaining samples * x * + // * * * + // * x * + pairedBox.addUpscaledColorSample( + fSrcSampleOffsetXYSq_11.xx + fSrcSampleOffsetYSq_02, + Bool2ToFloat16x2(coordX1OnScreen && coordY0OnScreen, coordX1OnScreen && coordY2OnScreen), + VertR, VertG, VertB + ); + + FfxFloat32x4 upscaledColorAndWeight = 0.0; + pairedBox.finalizeUpscaledColor(upscaledColorAndWeight); + + data.fUpsampledColor = FfxFloat32x3(upscaledColorAndWeight.rgb); + data.fUpsampledWeight = FfxFloat32(upscaledColorAndWeight.w); + } + + FFX_MIN16_F2 aabbMinMaxR = Compute3x3SamplesMinMaxPaired(CenterR, TopCornerR, BotCornerR, HorzR, VertR); + FFX_MIN16_F2 aabbMinMaxG = Compute3x3SamplesMinMaxPaired(CenterG, TopCornerG, BotCornerG, HorzG, VertG); + FFX_MIN16_F2 aabbMinMaxB = Compute3x3SamplesMinMaxPaired(CenterB, TopCornerB, BotCornerB, HorzB, VertB); + + data.clippingBox.boxCenter = FfxFloat32x3(boxCenterAndVecR.x, boxCenterAndVecG.x, boxCenterAndVecB.x); + data.clippingBox.boxVec = FfxFloat32x3(boxCenterAndVecR.y, boxCenterAndVecG.y, boxCenterAndVecB.y); + data.clippingBox.aabbMin = FfxFloat32x3(aabbMinMaxR.x, aabbMinMaxG.x, aabbMinMaxB.x); + data.clippingBox.aabbMax = FfxFloat32x3(aabbMinMaxR.y, aabbMinMaxG.y, aabbMinMaxB.y); + data.clippingBox.fBoxCenterWeight = FfxFloat32(boxCenterWeight); +#else + + iSampleIndex = 0; + + FFX_UNROLL + for (FfxInt32 row = 0; row < 3; row++) + { + FFX_UNROLL + for (FfxInt32 col = 0; col < 3; col++) + { + const FfxInt32x2 sampleColRow = FfxInt32x2(bFlipCol ? (3 - col) : col, bFlipRow ? (3 - row) : row); + const FfxFloat32x2 fOffset = fOffsetTL + FfxFloat32x2(sampleColRow); + const FfxFloat32x2 fSrcSampleOffset = fBaseSampleOffset + fOffset; + + const FfxInt32x2 iSrcSamplePos = FfxInt32x2(iSrcInputPos) + FfxInt32x2(offsetTL) + sampleColRow; + const FfxFloat32 fOnScreenFactor = FfxFloat32(IsOnScreen(FfxInt32x2(iSrcSamplePos), FfxInt32x2(RenderSize()))); + + if (!bIsInitialSample) + { + const FfxFloat32 fSampleWeight = fOnScreenFactor * FfxFloat32(GetUpsampleLanczosWeight(fSrcSampleOffset, fKernelBias)); + + data.fUpsampledColor += fSamples[iSampleIndex] * fSampleWeight; + data.fUpsampledWeight += fSampleWeight; + } + + // Update rectification box + { + const FfxFloat32 fRectificationCurveBias = -2.3f; + const FfxFloat32 fSrcSampleOffsetSq = dot(fSrcSampleOffset, fSrcSampleOffset); + const FfxFloat32 fBoxSampleWeight = exp(fRectificationCurveBias * fSrcSampleOffsetSq) * fOnScreenFactor; + + const FfxBoolean bInitialSample = (row == 0) && (col == 0); + RectificationBoxAddSample(bInitialSample, data.clippingBox, fSamples[iSampleIndex], fBoxSampleWeight); + } + ++iSampleIndex; + } + } + +#endif // #if FFX_FSR3UPSCALER_USE_XBOX_PAIRED_16BIT_MATH_OPTIMIZATIONS + + RectificationBoxComputeVarianceBoxData(data.clippingBox); + + data.fUpsampledWeight *= FfxFloat32(data.fUpsampledWeight > FSR3UPSCALER_EPSILON); + + if (data.fUpsampledWeight > FSR3UPSCALER_EPSILON) { + // Normalize for deringing (we need to compare colors) + data.fUpsampledColor = data.fUpsampledColor / data.fUpsampledWeight; + data.fUpsampledWeight *= fAverageLanczosWeightPerFrame; + + Deringing(data.clippingBox, data.fUpsampledColor); + } + + // Initial samples using tonemapped upsampling + if (bIsInitialSample) { +#if FFX_FSR3UPSCALER_OPTION_HDR_COLOR_INPUT + data.fUpsampledColor = RGBToYCoCg(InverseTonemap(YCoCgToRGB(data.clippingBox.boxCenter))); +#else + data.fUpsampledColor = data.clippingBox.boxCenter; +#endif + data.fUpsampledWeight = 1.0f; + data.fHistoryWeight = 0.0f; + } +} diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/spd/ffx_spd.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/spd/ffx_spd.h new file mode 100644 index 000000000..c3ee50f02 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/spd/ffx_spd.h @@ -0,0 +1,1014 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +/// @defgroup FfxGPUSpd FidelityFX SPD +/// FidelityFX Single Pass Downsampler 2.0 GPU documentation +/// +/// @ingroup FfxGPUEffects + +/// Setup required constant values for SPD (CPU). +/// +/// @param [out] dispatchThreadGroupCountXY CPU side: dispatch thread group count xy. z is number of slices of the input texture +/// @param [out] workGroupOffset GPU side: pass in as constant +/// @param [out] numWorkGroupsAndMips GPU side: pass in as constant +/// @param [in] rectInfo left, top, width, height +/// @param [in] mips optional: if -1, calculate based on rect width and height +/// +/// @ingroup FfxGPUSpd +#if defined(FFX_CPU) +FFX_STATIC void ffxSpdSetup(FfxUInt32x2 dispatchThreadGroupCountXY, + FfxUInt32x2 workGroupOffset, + FfxUInt32x2 numWorkGroupsAndMips, + FfxUInt32x4 rectInfo, + FfxInt32 mips) +{ + // determines the offset of the first tile to downsample based on + // left (rectInfo[0]) and top (rectInfo[1]) of the subregion. + workGroupOffset[0] = rectInfo[0] / 64; + workGroupOffset[1] = rectInfo[1] / 64; + + FfxUInt32 endIndexX = (rectInfo[0] + rectInfo[2] - 1) / 64; // rectInfo[0] = left, rectInfo[2] = width + FfxUInt32 endIndexY = (rectInfo[1] + rectInfo[3] - 1) / 64; // rectInfo[1] = top, rectInfo[3] = height + + // we only need to dispatch as many thread groups as tiles we need to downsample + // number of tiles per slice depends on the subregion to downsample + dispatchThreadGroupCountXY[0] = endIndexX + 1 - workGroupOffset[0]; + dispatchThreadGroupCountXY[1] = endIndexY + 1 - workGroupOffset[1]; + + // number of thread groups per slice + numWorkGroupsAndMips[0] = (dispatchThreadGroupCountXY[0]) * (dispatchThreadGroupCountXY[1]); + + if (mips >= 0) + { + numWorkGroupsAndMips[1] = FfxUInt32(mips); + } + else + { + // calculate based on rect width and height + FfxUInt32 resolution = ffxMax(rectInfo[2], rectInfo[3]); + numWorkGroupsAndMips[1] = FfxUInt32((ffxMin(floor(log2(FfxFloat32(resolution))), FfxFloat32(12)))); + } +} + +/// Setup required constant values for SPD (CPU). +/// +/// @param [out] dispatchThreadGroupCountXY CPU side: dispatch thread group count xy. z is number of slices of the input texture +/// @param [out] workGroupOffset GPU side: pass in as constant +/// @param [out] numWorkGroupsAndMips GPU side: pass in as constant +/// @param [in] rectInfo left, top, width, height +/// +/// @ingroup FfxGPUSpd +FFX_STATIC void ffxSpdSetup(FfxUInt32x2 dispatchThreadGroupCountXY, + FfxUInt32x2 workGroupOffset, + FfxUInt32x2 numWorkGroupsAndMips, + FfxUInt32x4 rectInfo) +{ + ffxSpdSetup(dispatchThreadGroupCountXY, workGroupOffset, numWorkGroupsAndMips, rectInfo, -1); +} +#endif // #if defined(FFX_CPU) + + +//============================================================================================================================== +// NON-PACKED VERSION +//============================================================================================================================== +#if defined(FFX_GPU) +#if defined(FFX_SPD_PACKED_ONLY) +// Avoid compiler errors by including default implementations of these callbacks. +FfxFloat32x4 SpdLoadSourceImage(FfxInt32x2 p, FfxUInt32 slice) +{ + return FfxFloat32x4(0.0, 0.0, 0.0, 0.0); +} + +FfxFloat32x4 SpdLoad(FfxInt32x2 p, FfxUInt32 slice) +{ + return FfxFloat32x4(0.0, 0.0, 0.0, 0.0); +} +void SpdStore(FfxInt32x2 p, FfxFloat32x4 value, FfxUInt32 mip, FfxUInt32 slice) +{ +} +FfxFloat32x4 SpdLoadIntermediate(FfxUInt32 x, FfxUInt32 y) +{ + return FfxFloat32x4(0.0, 0.0, 0.0, 0.0); +} +void SpdStoreIntermediate(FfxUInt32 x, FfxUInt32 y, FfxFloat32x4 value) +{ +} +FfxFloat32x4 SpdReduce4(FfxFloat32x4 v0, FfxFloat32x4 v1, FfxFloat32x4 v2, FfxFloat32x4 v3) +{ + return FfxFloat32x4(0.0, 0.0, 0.0, 0.0); +} +#endif // #if FFX_SPD_PACKED_ONLY + +//_____________________________________________________________/\_______________________________________________________________ +#if defined(FFX_GLSL) && !defined(FFX_SPD_NO_WAVE_OPERATIONS) +#extension GL_KHR_shader_subgroup_quad:require +#endif + +void ffxSpdWorkgroupShuffleBarrier() +{ + FFX_GROUP_MEMORY_BARRIER; +} + +// Only last active workgroup should proceed +bool SpdExitWorkgroup(FfxUInt32 numWorkGroups, FfxUInt32 localInvocationIndex, FfxUInt32 slice) +{ + // global atomic counter + if (localInvocationIndex == 0) + { + SpdIncreaseAtomicCounter(slice); + } + + ffxSpdWorkgroupShuffleBarrier(); + return (SpdGetAtomicCounter() != (numWorkGroups - 1)); +} + +// User defined: FfxFloat32x4 SpdReduce4(FfxFloat32x4 v0, FfxFloat32x4 v1, FfxFloat32x4 v2, FfxFloat32x4 v3); +FfxFloat32x4 SpdReduceQuad(FfxFloat32x4 v) +{ +#if defined(FFX_GLSL) && !defined(FFX_SPD_NO_WAVE_OPERATIONS) + + FfxFloat32x4 v0 = v; + FfxFloat32x4 v1 = subgroupQuadSwapHorizontal(v); + FfxFloat32x4 v2 = subgroupQuadSwapVertical(v); + FfxFloat32x4 v3 = subgroupQuadSwapDiagonal(v); + return SpdReduce4(v0, v1, v2, v3); + +#elif defined(FFX_HLSL) && !defined(FFX_SPD_NO_WAVE_OPERATIONS) + + // requires SM6.0 + FfxFloat32x4 v0 = v; + FfxFloat32x4 v1 = QuadReadAcrossX(v); + FfxFloat32x4 v2 = QuadReadAcrossY(v); + FfxFloat32x4 v3 = QuadReadAcrossDiagonal(v); + return SpdReduce4(v0, v1, v2, v3); +/* + // if SM6.0 is not available, you can use the AMD shader intrinsics + // the AMD shader intrinsics are available in AMD GPU Services (AGS) library: + // https://gpuopen.com/amd-gpu-services-ags-library/ + // works for DX11 + FfxFloat32x4 v0 = v; + FfxFloat32x4 v1; + v1.x = AmdExtD3DShaderIntrinsics_SwizzleF(v.x, AmdExtD3DShaderIntrinsicsSwizzle_SwapX1); + v1.y = AmdExtD3DShaderIntrinsics_SwizzleF(v.y, AmdExtD3DShaderIntrinsicsSwizzle_SwapX1); + v1.z = AmdExtD3DShaderIntrinsics_SwizzleF(v.z, AmdExtD3DShaderIntrinsicsSwizzle_SwapX1); + v1.w = AmdExtD3DShaderIntrinsics_SwizzleF(v.w, AmdExtD3DShaderIntrinsicsSwizzle_SwapX1); + FfxFloat32x4 v2; + v2.x = AmdExtD3DShaderIntrinsics_SwizzleF(v.x, AmdExtD3DShaderIntrinsicsSwizzle_SwapX2); + v2.y = AmdExtD3DShaderIntrinsics_SwizzleF(v.y, AmdExtD3DShaderIntrinsicsSwizzle_SwapX2); + v2.z = AmdExtD3DShaderIntrinsics_SwizzleF(v.z, AmdExtD3DShaderIntrinsicsSwizzle_SwapX2); + v2.w = AmdExtD3DShaderIntrinsics_SwizzleF(v.w, AmdExtD3DShaderIntrinsicsSwizzle_SwapX2); + FfxFloat32x4 v3; + v3.x = AmdExtD3DShaderIntrinsics_SwizzleF(v.x, AmdExtD3DShaderIntrinsicsSwizzle_ReverseX4); + v3.y = AmdExtD3DShaderIntrinsics_SwizzleF(v.y, AmdExtD3DShaderIntrinsicsSwizzle_ReverseX4); + v3.z = AmdExtD3DShaderIntrinsics_SwizzleF(v.z, AmdExtD3DShaderIntrinsicsSwizzle_ReverseX4); + v3.w = AmdExtD3DShaderIntrinsics_SwizzleF(v.w, AmdExtD3DShaderIntrinsicsSwizzle_ReverseX4); + return SpdReduce4(v0, v1, v2, v3); + */ +#endif + return v; +} + +FfxFloat32x4 SpdReduceIntermediate(FfxUInt32x2 i0, FfxUInt32x2 i1, FfxUInt32x2 i2, FfxUInt32x2 i3) +{ + FfxFloat32x4 v0 = SpdLoadIntermediate(i0.x, i0.y); + FfxFloat32x4 v1 = SpdLoadIntermediate(i1.x, i1.y); + FfxFloat32x4 v2 = SpdLoadIntermediate(i2.x, i2.y); + FfxFloat32x4 v3 = SpdLoadIntermediate(i3.x, i3.y); + return SpdReduce4(v0, v1, v2, v3); +} + +FfxFloat32x4 SpdReduceLoad4(FfxUInt32x2 i0, FfxUInt32x2 i1, FfxUInt32x2 i2, FfxUInt32x2 i3, FfxUInt32 slice) +{ + FfxFloat32x4 v0 = SpdLoad(FfxInt32x2(i0), slice); + FfxFloat32x4 v1 = SpdLoad(FfxInt32x2(i1), slice); + FfxFloat32x4 v2 = SpdLoad(FfxInt32x2(i2), slice); + FfxFloat32x4 v3 = SpdLoad(FfxInt32x2(i3), slice); + return SpdReduce4(v0, v1, v2, v3); +} + +FfxFloat32x4 SpdReduceLoad4(FfxUInt32x2 base, FfxUInt32 slice) +{ + return SpdReduceLoad4(FfxUInt32x2(base + FfxUInt32x2(0, 0)), FfxUInt32x2(base + FfxUInt32x2(0, 1)), FfxUInt32x2(base + FfxUInt32x2(1, 0)), FfxUInt32x2(base + FfxUInt32x2(1, 1)), slice); +} + +FfxFloat32x4 SpdReduceLoadSourceImage4(FfxUInt32x2 i0, FfxUInt32x2 i1, FfxUInt32x2 i2, FfxUInt32x2 i3, FfxUInt32 slice) +{ + FfxFloat32x4 v0 = SpdLoadSourceImage(FfxInt32x2(i0), slice); + FfxFloat32x4 v1 = SpdLoadSourceImage(FfxInt32x2(i1), slice); + FfxFloat32x4 v2 = SpdLoadSourceImage(FfxInt32x2(i2), slice); + FfxFloat32x4 v3 = SpdLoadSourceImage(FfxInt32x2(i3), slice); + return SpdReduce4(v0, v1, v2, v3); +} + +FfxFloat32x4 SpdReduceLoadSourceImage(FfxUInt32x2 base, FfxUInt32 slice) +{ +#if defined(SPD_LINEAR_SAMPLER) + return SpdLoadSourceImage(FfxInt32x2(base), slice); +#else + return SpdReduceLoadSourceImage4(FfxUInt32x2(base + FfxUInt32x2(0, 0)), FfxUInt32x2(base + FfxUInt32x2(0, 1)), FfxUInt32x2(base + FfxUInt32x2(1, 0)), FfxUInt32x2(base + FfxUInt32x2(1, 1)), slice); +#endif +} + +void SpdDownsampleMips_0_1_Intrinsics(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) +{ + FfxFloat32x4 v[4]; + + FfxInt32x2 tex = FfxInt32x2(workGroupID.xy * 64) + FfxInt32x2(x * 2, y * 2); + FfxInt32x2 pix = FfxInt32x2(workGroupID.xy * 32) + FfxInt32x2(x, y); + v[0] = SpdReduceLoadSourceImage(tex, slice); + SpdStore(pix, v[0], 0, slice); + + tex = FfxInt32x2(workGroupID.xy * 64) + FfxInt32x2(x * 2 + 32, y * 2); + pix = FfxInt32x2(workGroupID.xy * 32) + FfxInt32x2(x + 16, y); + v[1] = SpdReduceLoadSourceImage(tex, slice); + SpdStore(pix, v[1], 0, slice); + + tex = FfxInt32x2(workGroupID.xy * 64) + FfxInt32x2(x * 2, y * 2 + 32); + pix = FfxInt32x2(workGroupID.xy * 32) + FfxInt32x2(x, y + 16); + v[2] = SpdReduceLoadSourceImage(tex, slice); + SpdStore(pix, v[2], 0, slice); + + tex = FfxInt32x2(workGroupID.xy * 64) + FfxInt32x2(x * 2 + 32, y * 2 + 32); + pix = FfxInt32x2(workGroupID.xy * 32) + FfxInt32x2(x + 16, y + 16); + v[3] = SpdReduceLoadSourceImage(tex, slice); + SpdStore(pix, v[3], 0, slice); + + if (mip <= 1) + return; + + v[0] = SpdReduceQuad(v[0]); + v[1] = SpdReduceQuad(v[1]); + v[2] = SpdReduceQuad(v[2]); + v[3] = SpdReduceQuad(v[3]); + + if ((localInvocationIndex % 4) == 0) + { + SpdStore(FfxInt32x2(workGroupID.xy * 16) + FfxInt32x2(x / 2, y / 2), v[0], 1, slice); + SpdStoreIntermediate(x / 2, y / 2, v[0]); + + SpdStore(FfxInt32x2(workGroupID.xy * 16) + FfxInt32x2(x / 2 + 8, y / 2), v[1], 1, slice); + SpdStoreIntermediate(x / 2 + 8, y / 2, v[1]); + + SpdStore(FfxInt32x2(workGroupID.xy * 16) + FfxInt32x2(x / 2, y / 2 + 8), v[2], 1, slice); + SpdStoreIntermediate(x / 2, y / 2 + 8, v[2]); + + SpdStore(FfxInt32x2(workGroupID.xy * 16) + FfxInt32x2(x / 2 + 8, y / 2 + 8), v[3], 1, slice); + SpdStoreIntermediate(x / 2 + 8, y / 2 + 8, v[3]); + } +} + +void SpdDownsampleMips_0_1_LDS(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) +{ + FfxFloat32x4 v[4]; + + FfxInt32x2 tex = FfxInt32x2(workGroupID.xy * 64) + FfxInt32x2(x * 2, y * 2); + FfxInt32x2 pix = FfxInt32x2(workGroupID.xy * 32) + FfxInt32x2(x, y); + v[0] = SpdReduceLoadSourceImage(tex, slice); + SpdStore(pix, v[0], 0, slice); + + tex = FfxInt32x2(workGroupID.xy * 64) + FfxInt32x2(x * 2 + 32, y * 2); + pix = FfxInt32x2(workGroupID.xy * 32) + FfxInt32x2(x + 16, y); + v[1] = SpdReduceLoadSourceImage(tex, slice); + SpdStore(pix, v[1], 0, slice); + + tex = FfxInt32x2(workGroupID.xy * 64) + FfxInt32x2(x * 2, y * 2 + 32); + pix = FfxInt32x2(workGroupID.xy * 32) + FfxInt32x2(x, y + 16); + v[2] = SpdReduceLoadSourceImage(tex, slice); + SpdStore(pix, v[2], 0, slice); + + tex = FfxInt32x2(workGroupID.xy * 64) + FfxInt32x2(x * 2 + 32, y * 2 + 32); + pix = FfxInt32x2(workGroupID.xy * 32) + FfxInt32x2(x + 16, y + 16); + v[3] = SpdReduceLoadSourceImage(tex, slice); + SpdStore(pix, v[3], 0, slice); + + if (mip <= 1) + return; + + for (FfxUInt32 i = 0; i < 4; i++) + { + SpdStoreIntermediate(x, y, v[i]); + ffxSpdWorkgroupShuffleBarrier(); + if (localInvocationIndex < 64) + { + v[i] = SpdReduceIntermediate(FfxUInt32x2(x * 2 + 0, y * 2 + 0), FfxUInt32x2(x * 2 + 1, y * 2 + 0), FfxUInt32x2(x * 2 + 0, y * 2 + 1), FfxUInt32x2(x * 2 + 1, y * 2 + 1)); + SpdStore(FfxInt32x2(workGroupID.xy * 16) + FfxInt32x2(x + (i % 2) * 8, y + (i / 2) * 8), v[i], 1, slice); + } + ffxSpdWorkgroupShuffleBarrier(); + } + + if (localInvocationIndex < 64) + { + SpdStoreIntermediate(x + 0, y + 0, v[0]); + SpdStoreIntermediate(x + 8, y + 0, v[1]); + SpdStoreIntermediate(x + 0, y + 8, v[2]); + SpdStoreIntermediate(x + 8, y + 8, v[3]); + } +} + +void SpdDownsampleMips_0_1(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) +{ +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) + SpdDownsampleMips_0_1_LDS(x, y, workGroupID, localInvocationIndex, mip, slice); +#else + SpdDownsampleMips_0_1_Intrinsics(x, y, workGroupID, localInvocationIndex, mip, slice); +#endif +} + + +void SpdDownsampleMip_2(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) +{ +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) + if (localInvocationIndex < 64) + { + FfxFloat32x4 v = SpdReduceIntermediate(FfxUInt32x2(x * 2 + 0, y * 2 + 0), FfxUInt32x2(x * 2 + 1, y * 2 + 0), FfxUInt32x2(x * 2 + 0, y * 2 + 1), FfxUInt32x2(x * 2 + 1, y * 2 + 1)); + SpdStore(FfxInt32x2(workGroupID.xy * 8) + FfxInt32x2(x, y), v, mip, slice); + // store to LDS, try to reduce bank conflicts + // x 0 x 0 x 0 x 0 x 0 x 0 x 0 x 0 + // 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + // 0 x 0 x 0 x 0 x 0 x 0 x 0 x 0 x + // 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + // x 0 x 0 x 0 x 0 x 0 x 0 x 0 x 0 + // ... + // x 0 x 0 x 0 x 0 x 0 x 0 x 0 x 0 + SpdStoreIntermediate(x * 2 + y % 2, y * 2, v); + } +#else + FfxFloat32x4 v = SpdLoadIntermediate(x, y); + v = SpdReduceQuad(v); + // quad index 0 stores result + if (localInvocationIndex % 4 == 0) + { + SpdStore(FfxInt32x2(workGroupID.xy * 8) + FfxInt32x2(x / 2, y / 2), v, mip, slice); + SpdStoreIntermediate(x + (y / 2) % 2, y, v); + } +#endif +} + +void SpdDownsampleMip_3(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) +{ +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) + if (localInvocationIndex < 16) + { + // x 0 x 0 + // 0 0 0 0 + // 0 x 0 x + // 0 0 0 0 + FfxFloat32x4 v = + SpdReduceIntermediate(FfxUInt32x2(x * 4 + 0 + 0, y * 4 + 0), FfxUInt32x2(x * 4 + 2 + 0, y * 4 + 0), FfxUInt32x2(x * 4 + 0 + 1, y * 4 + 2), FfxUInt32x2(x * 4 + 2 + 1, y * 4 + 2)); + SpdStore(FfxInt32x2(workGroupID.xy * 4) + FfxInt32x2(x, y), v, mip, slice); + // store to LDS + // x 0 0 0 x 0 0 0 x 0 0 0 x 0 0 0 + // 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + // 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + // 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + // 0 x 0 0 0 x 0 0 0 x 0 0 0 x 0 0 + // ... + // 0 0 x 0 0 0 x 0 0 0 x 0 0 0 x 0 + // ... + // 0 0 0 x 0 0 0 x 0 0 0 x 0 0 0 x + // ... + SpdStoreIntermediate(x * 4 + y, y * 4, v); + } +#else + if (localInvocationIndex < 64) + { + FfxFloat32x4 v = SpdLoadIntermediate(x * 2 + y % 2, y * 2); + v = SpdReduceQuad(v); + // quad index 0 stores result + if (localInvocationIndex % 4 == 0) + { + SpdStore(FfxInt32x2(workGroupID.xy * 4) + FfxInt32x2(x / 2, y / 2), v, mip, slice); + SpdStoreIntermediate(x * 2 + y / 2, y * 2, v); + } + } +#endif +} + +void SpdDownsampleMip_4(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) +{ +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) + if (localInvocationIndex < 4) + { + // x 0 0 0 x 0 0 0 + // ... + // 0 x 0 0 0 x 0 0 + FfxFloat32x4 v = SpdReduceIntermediate(FfxUInt32x2(x * 8 + 0 + 0 + y * 2, y * 8 + 0), + FfxUInt32x2(x * 8 + 4 + 0 + y * 2, y * 8 + 0), + FfxUInt32x2(x * 8 + 0 + 1 + y * 2, y * 8 + 4), + FfxUInt32x2(x * 8 + 4 + 1 + y * 2, y * 8 + 4)); + SpdStore(FfxInt32x2(workGroupID.xy * 2) + FfxInt32x2(x, y), v, mip, slice); + // store to LDS + // x x x x 0 ... + // 0 ... + SpdStoreIntermediate(x + y * 2, 0, v); + } +#else + if (localInvocationIndex < 16) + { + FfxFloat32x4 v = SpdLoadIntermediate(x * 4 + y, y * 4); + v = SpdReduceQuad(v); + // quad index 0 stores result + if (localInvocationIndex % 4 == 0) + { + SpdStore(FfxInt32x2(workGroupID.xy * 2) + FfxInt32x2(x / 2, y / 2), v, mip, slice); + SpdStoreIntermediate(x / 2 + y, 0, v); + } + } +#endif +} + +void SpdDownsampleMip_5(FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) +{ +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) + if (localInvocationIndex < 1) + { + // x x x x 0 ... + // 0 ... + FfxFloat32x4 v = SpdReduceIntermediate(FfxUInt32x2(0, 0), FfxUInt32x2(1, 0), FfxUInt32x2(2, 0), FfxUInt32x2(3, 0)); + SpdStore(FfxInt32x2(workGroupID.xy), v, mip, slice); + } +#else + if (localInvocationIndex < 4) + { + FfxFloat32x4 v = SpdLoadIntermediate(localInvocationIndex, 0); + v = SpdReduceQuad(v); + // quad index 0 stores result + if (localInvocationIndex % 4 == 0) + { + SpdStore(FfxInt32x2(workGroupID.xy), v, mip, slice); + } + } +#endif +} + +void SpdDownsampleMips_6_7(FfxUInt32 x, FfxUInt32 y, FfxUInt32 mips, FfxUInt32 slice) +{ + FfxInt32x2 tex = FfxInt32x2(x * 4 + 0, y * 4 + 0); + FfxInt32x2 pix = FfxInt32x2(x * 2 + 0, y * 2 + 0); + FfxFloat32x4 v0 = SpdReduceLoad4(tex, slice); + SpdStore(pix, v0, 6, slice); + + tex = FfxInt32x2(x * 4 + 2, y * 4 + 0); + pix = FfxInt32x2(x * 2 + 1, y * 2 + 0); + FfxFloat32x4 v1 = SpdReduceLoad4(tex, slice); + SpdStore(pix, v1, 6, slice); + + tex = FfxInt32x2(x * 4 + 0, y * 4 + 2); + pix = FfxInt32x2(x * 2 + 0, y * 2 + 1); + FfxFloat32x4 v2 = SpdReduceLoad4(tex, slice); + SpdStore(pix, v2, 6, slice); + + tex = FfxInt32x2(x * 4 + 2, y * 4 + 2); + pix = FfxInt32x2(x * 2 + 1, y * 2 + 1); + FfxFloat32x4 v3 = SpdReduceLoad4(tex, slice); + SpdStore(pix, v3, 6, slice); + + if (mips <= 7) + return; + // no barrier needed, working on values only from the same thread + + FfxFloat32x4 v = SpdReduce4(v0, v1, v2, v3); + SpdStore(FfxInt32x2(x, y), v, 7, slice); + SpdStoreIntermediate(x, y, v); +} + +void SpdDownsampleNextFour(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 baseMip, FfxUInt32 mips, FfxUInt32 slice) +{ + if (mips <= baseMip) + return; + ffxSpdWorkgroupShuffleBarrier(); + SpdDownsampleMip_2(x, y, workGroupID, localInvocationIndex, baseMip, slice); + + if (mips <= baseMip + 1) + return; + ffxSpdWorkgroupShuffleBarrier(); + SpdDownsampleMip_3(x, y, workGroupID, localInvocationIndex, baseMip + 1, slice); + + if (mips <= baseMip + 2) + return; + ffxSpdWorkgroupShuffleBarrier(); + SpdDownsampleMip_4(x, y, workGroupID, localInvocationIndex, baseMip + 2, slice); + + if (mips <= baseMip + 3) + return; + ffxSpdWorkgroupShuffleBarrier(); + SpdDownsampleMip_5(workGroupID, localInvocationIndex, baseMip + 3, slice); +} + +/// Downsamples a 64x64 tile based on the work group id. +/// If after downsampling it's the last active thread group, computes the remaining MIP levels. +/// +/// @param [in] workGroupID index of the work group / thread group +/// @param [in] localInvocationIndex index of the thread within the thread group in 1D +/// @param [in] mips the number of total MIP levels to compute for the input texture +/// @param [in] numWorkGroups the total number of dispatched work groups / thread groups for this slice +/// @param [in] slice the slice of the input texture +/// +/// @ingroup FfxGPUSpd +void SpdDownsample(FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mips, FfxUInt32 numWorkGroups, FfxUInt32 slice) +{ + // compute MIP level 0 and 1 + FfxUInt32x2 sub_xy = ffxRemapForWaveReduction(localInvocationIndex % 64); + FfxUInt32 x = sub_xy.x + 8 * ((localInvocationIndex >> 6) % 2); + FfxUInt32 y = sub_xy.y + 8 * ((localInvocationIndex >> 7)); + SpdDownsampleMips_0_1(x, y, workGroupID, localInvocationIndex, mips, slice); + + // compute MIP level 2, 3, 4, 5 + SpdDownsampleNextFour(x, y, workGroupID, localInvocationIndex, 2, mips, slice); + + if (mips <= 6) + return; + + // increase the global atomic counter for the given slice and check if it's the last remaining thread group: + // terminate if not, continue if yes. + if (SpdExitWorkgroup(numWorkGroups, localInvocationIndex, slice)) + return; + + // reset the global atomic counter back to 0 for the next spd dispatch + SpdResetAtomicCounter(slice); + + // After mip 5 there is only a single workgroup left that downsamples the remaining up to 64x64 texels. + // compute MIP level 6 and 7 + SpdDownsampleMips_6_7(x, y, mips, slice); + + // compute MIP level 8, 9, 10, 11 + SpdDownsampleNextFour(x, y, FfxUInt32x2(0, 0), localInvocationIndex, 8, mips, slice); +} +/// Downsamples a 64x64 tile based on the work group id and work group offset. +/// If after downsampling it's the last active thread group, computes the remaining MIP levels. +/// +/// @param [in] workGroupID index of the work group / thread group +/// @param [in] localInvocationIndex index of the thread within the thread group in 1D +/// @param [in] mips the number of total MIP levels to compute for the input texture +/// @param [in] numWorkGroups the total number of dispatched work groups / thread groups for this slice +/// @param [in] slice the slice of the input texture +/// @param [in] workGroupOffset the work group offset. it's (0,0) in case the entire input texture is downsampled. +/// +/// @ingroup FfxGPUSpd +void SpdDownsample(FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mips, FfxUInt32 numWorkGroups, FfxUInt32 slice, FfxUInt32x2 workGroupOffset) +{ + SpdDownsample(workGroupID + workGroupOffset, localInvocationIndex, mips, numWorkGroups, slice); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +//============================================================================================================================== +// PACKED VERSION +//============================================================================================================================== + +#if FFX_HALF + +#if defined(FFX_GLSL) +#extension GL_EXT_shader_subgroup_extended_types_float16:require +#endif + +FfxFloat16x4 SpdReduceQuadH(FfxFloat16x4 v) +{ +#if defined(FFX_GLSL) && !defined(FFX_SPD_NO_WAVE_OPERATIONS) + FfxFloat16x4 v0 = v; + FfxFloat16x4 v1 = subgroupQuadSwapHorizontal(v); + FfxFloat16x4 v2 = subgroupQuadSwapVertical(v); + FfxFloat16x4 v3 = subgroupQuadSwapDiagonal(v); + return SpdReduce4H(v0, v1, v2, v3); +#elif defined(FFX_HLSL) && !defined(FFX_SPD_NO_WAVE_OPERATIONS) + // requires SM6.0 + FfxFloat16x4 v0 = v; + FfxFloat16x4 v1 = QuadReadAcrossX(v); + FfxFloat16x4 v2 = QuadReadAcrossY(v); + FfxFloat16x4 v3 = QuadReadAcrossDiagonal(v); + return SpdReduce4H(v0, v1, v2, v3); +/* + // if SM6.0 is not available, you can use the AMD shader intrinsics + // the AMD shader intrinsics are available in AMD GPU Services (AGS) library: + // https://gpuopen.com/amd-gpu-services-ags-library/ + // works for DX11 + FfxFloat16x4 v0 = v; + FfxFloat16x4 v1; + v1.x = AmdExtD3DShaderIntrinsics_SwizzleF(v.x, AmdExtD3DShaderIntrinsicsSwizzle_SwapX1); + v1.y = AmdExtD3DShaderIntrinsics_SwizzleF(v.y, AmdExtD3DShaderIntrinsicsSwizzle_SwapX1); + v1.z = AmdExtD3DShaderIntrinsics_SwizzleF(v.z, AmdExtD3DShaderIntrinsicsSwizzle_SwapX1); + v1.w = AmdExtD3DShaderIntrinsics_SwizzleF(v.w, AmdExtD3DShaderIntrinsicsSwizzle_SwapX1); + FfxFloat16x4 v2; + v2.x = AmdExtD3DShaderIntrinsics_SwizzleF(v.x, AmdExtD3DShaderIntrinsicsSwizzle_SwapX2); + v2.y = AmdExtD3DShaderIntrinsics_SwizzleF(v.y, AmdExtD3DShaderIntrinsicsSwizzle_SwapX2); + v2.z = AmdExtD3DShaderIntrinsics_SwizzleF(v.z, AmdExtD3DShaderIntrinsicsSwizzle_SwapX2); + v2.w = AmdExtD3DShaderIntrinsics_SwizzleF(v.w, AmdExtD3DShaderIntrinsicsSwizzle_SwapX2); + FfxFloat16x4 v3; + v3.x = AmdExtD3DShaderIntrinsics_SwizzleF(v.x, AmdExtD3DShaderIntrinsicsSwizzle_ReverseX4); + v3.y = AmdExtD3DShaderIntrinsics_SwizzleF(v.y, AmdExtD3DShaderIntrinsicsSwizzle_ReverseX4); + v3.z = AmdExtD3DShaderIntrinsics_SwizzleF(v.z, AmdExtD3DShaderIntrinsicsSwizzle_ReverseX4); + v3.w = AmdExtD3DShaderIntrinsics_SwizzleF(v.w, AmdExtD3DShaderIntrinsicsSwizzle_ReverseX4); + return SpdReduce4H(v0, v1, v2, v3); + */ +#endif + return FfxFloat16x4(0.0, 0.0, 0.0, 0.0); +} + +FfxFloat16x4 SpdReduceIntermediateH(FfxUInt32x2 i0, FfxUInt32x2 i1, FfxUInt32x2 i2, FfxUInt32x2 i3) +{ + FfxFloat16x4 v0 = SpdLoadIntermediateH(i0.x, i0.y); + FfxFloat16x4 v1 = SpdLoadIntermediateH(i1.x, i1.y); + FfxFloat16x4 v2 = SpdLoadIntermediateH(i2.x, i2.y); + FfxFloat16x4 v3 = SpdLoadIntermediateH(i3.x, i3.y); + return SpdReduce4H(v0, v1, v2, v3); +} + +FfxFloat16x4 SpdReduceLoad4H(FfxUInt32x2 i0, FfxUInt32x2 i1, FfxUInt32x2 i2, FfxUInt32x2 i3, FfxUInt32 slice) +{ + FfxFloat16x4 v0 = SpdLoadH(FfxInt32x2(i0), slice); + FfxFloat16x4 v1 = SpdLoadH(FfxInt32x2(i1), slice); + FfxFloat16x4 v2 = SpdLoadH(FfxInt32x2(i2), slice); + FfxFloat16x4 v3 = SpdLoadH(FfxInt32x2(i3), slice); + return SpdReduce4H(v0, v1, v2, v3); +} + +FfxFloat16x4 SpdReduceLoad4H(FfxUInt32x2 base, FfxUInt32 slice) +{ + return SpdReduceLoad4H(FfxUInt32x2(base + FfxUInt32x2(0, 0)), FfxUInt32x2(base + FfxUInt32x2(0, 1)), FfxUInt32x2(base + FfxUInt32x2(1, 0)), FfxUInt32x2(base + FfxUInt32x2(1, 1)), slice); +} + +FfxFloat16x4 SpdReduceLoadSourceImage4H(FfxUInt32x2 i0, FfxUInt32x2 i1, FfxUInt32x2 i2, FfxUInt32x2 i3, FfxUInt32 slice) +{ + FfxFloat16x4 v0 = SpdLoadSourceImageH(FfxInt32x2(i0), slice); + FfxFloat16x4 v1 = SpdLoadSourceImageH(FfxInt32x2(i1), slice); + FfxFloat16x4 v2 = SpdLoadSourceImageH(FfxInt32x2(i2), slice); + FfxFloat16x4 v3 = SpdLoadSourceImageH(FfxInt32x2(i3), slice); + return SpdReduce4H(v0, v1, v2, v3); +} + +FfxFloat16x4 SpdReduceLoadSourceImageH(FfxUInt32x2 base, FfxUInt32 slice) +{ +#if defined(SPD_LINEAR_SAMPLER) + return SpdLoadSourceImageH(FfxInt32x2(base), slice); +#else + return SpdReduceLoadSourceImage4H(FfxUInt32x2(base + FfxUInt32x2(0, 0)), FfxUInt32x2(base + FfxUInt32x2(0, 1)), FfxUInt32x2(base + FfxUInt32x2(1, 0)), FfxUInt32x2(base + FfxUInt32x2(1, 1)), slice); +#endif +} + +void SpdDownsampleMips_0_1_IntrinsicsH(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mips, FfxUInt32 slice) +{ + FfxFloat16x4 v[4]; + + FfxInt32x2 tex = FfxInt32x2(workGroupID.xy * 64) + FfxInt32x2(x * 2, y * 2); + FfxInt32x2 pix = FfxInt32x2(workGroupID.xy * 32) + FfxInt32x2(x, y); + v[0] = SpdReduceLoadSourceImageH(tex, slice); + SpdStoreH(pix, v[0], 0, slice); + + tex = FfxInt32x2(workGroupID.xy * 64) + FfxInt32x2(x * 2 + 32, y * 2); + pix = FfxInt32x2(workGroupID.xy * 32) + FfxInt32x2(x + 16, y); + v[1] = SpdReduceLoadSourceImageH(tex, slice); + SpdStoreH(pix, v[1], 0, slice); + + tex = FfxInt32x2(workGroupID.xy * 64) + FfxInt32x2(x * 2, y * 2 + 32); + pix = FfxInt32x2(workGroupID.xy * 32) + FfxInt32x2(x, y + 16); + v[2] = SpdReduceLoadSourceImageH(tex, slice); + SpdStoreH(pix, v[2], 0, slice); + + tex = FfxInt32x2(workGroupID.xy * 64) + FfxInt32x2(x * 2 + 32, y * 2 + 32); + pix = FfxInt32x2(workGroupID.xy * 32) + FfxInt32x2(x + 16, y + 16); + v[3] = SpdReduceLoadSourceImageH(tex, slice); + SpdStoreH(pix, v[3], 0, slice); + + if (mips <= 1) + return; + + v[0] = SpdReduceQuadH(v[0]); + v[1] = SpdReduceQuadH(v[1]); + v[2] = SpdReduceQuadH(v[2]); + v[3] = SpdReduceQuadH(v[3]); + + if ((localInvocationIndex % 4) == 0) + { + SpdStoreH(FfxInt32x2(workGroupID.xy * 16) + FfxInt32x2(x / 2, y / 2), v[0], 1, slice); + SpdStoreIntermediateH(x / 2, y / 2, v[0]); + + SpdStoreH(FfxInt32x2(workGroupID.xy * 16) + FfxInt32x2(x / 2 + 8, y / 2), v[1], 1, slice); + SpdStoreIntermediateH(x / 2 + 8, y / 2, v[1]); + + SpdStoreH(FfxInt32x2(workGroupID.xy * 16) + FfxInt32x2(x / 2, y / 2 + 8), v[2], 1, slice); + SpdStoreIntermediateH(x / 2, y / 2 + 8, v[2]); + + SpdStoreH(FfxInt32x2(workGroupID.xy * 16) + FfxInt32x2(x / 2 + 8, y / 2 + 8), v[3], 1, slice); + SpdStoreIntermediateH(x / 2 + 8, y / 2 + 8, v[3]); + } +} + +void SpdDownsampleMips_0_1_LDSH(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mips, FfxUInt32 slice) +{ + FfxFloat16x4 v[4]; + + FfxInt32x2 tex = FfxInt32x2(workGroupID.xy * 64) + FfxInt32x2(x * 2, y * 2); + FfxInt32x2 pix = FfxInt32x2(workGroupID.xy * 32) + FfxInt32x2(x, y); + v[0] = SpdReduceLoadSourceImageH(tex, slice); + SpdStoreH(pix, v[0], 0, slice); + + tex = FfxInt32x2(workGroupID.xy * 64) + FfxInt32x2(x * 2 + 32, y * 2); + pix = FfxInt32x2(workGroupID.xy * 32) + FfxInt32x2(x + 16, y); + v[1] = SpdReduceLoadSourceImageH(tex, slice); + SpdStoreH(pix, v[1], 0, slice); + + tex = FfxInt32x2(workGroupID.xy * 64) + FfxInt32x2(x * 2, y * 2 + 32); + pix = FfxInt32x2(workGroupID.xy * 32) + FfxInt32x2(x, y + 16); + v[2] = SpdReduceLoadSourceImageH(tex, slice); + SpdStoreH(pix, v[2], 0, slice); + + tex = FfxInt32x2(workGroupID.xy * 64) + FfxInt32x2(x * 2 + 32, y * 2 + 32); + pix = FfxInt32x2(workGroupID.xy * 32) + FfxInt32x2(x + 16, y + 16); + v[3] = SpdReduceLoadSourceImageH(tex, slice); + SpdStoreH(pix, v[3], 0, slice); + + if (mips <= 1) + return; + + for (FfxInt32 i = 0; i < 4; i++) + { + SpdStoreIntermediateH(x, y, v[i]); + ffxSpdWorkgroupShuffleBarrier(); + if (localInvocationIndex < 64) + { + v[i] = SpdReduceIntermediateH(FfxUInt32x2(x * 2 + 0, y * 2 + 0), FfxUInt32x2(x * 2 + 1, y * 2 + 0), FfxUInt32x2(x * 2 + 0, y * 2 + 1), FfxUInt32x2(x * 2 + 1, y * 2 + 1)); + SpdStoreH(FfxInt32x2(workGroupID.xy * 16) + FfxInt32x2(x + (i % 2) * 8, y + (i / 2) * 8), v[i], 1, slice); + } + ffxSpdWorkgroupShuffleBarrier(); + } + + if (localInvocationIndex < 64) + { + SpdStoreIntermediateH(x + 0, y + 0, v[0]); + SpdStoreIntermediateH(x + 8, y + 0, v[1]); + SpdStoreIntermediateH(x + 0, y + 8, v[2]); + SpdStoreIntermediateH(x + 8, y + 8, v[3]); + } +} + +void SpdDownsampleMips_0_1H(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mips, FfxUInt32 slice) +{ +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) + SpdDownsampleMips_0_1_LDSH(x, y, workGroupID, localInvocationIndex, mips, slice); +#else + SpdDownsampleMips_0_1_IntrinsicsH(x, y, workGroupID, localInvocationIndex, mips, slice); +#endif +} + + +void SpdDownsampleMip_2H(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) +{ +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) + if (localInvocationIndex < 64) + { + FfxFloat16x4 v = SpdReduceIntermediateH(FfxUInt32x2(x * 2 + 0, y * 2 + 0), FfxUInt32x2(x * 2 + 1, y * 2 + 0), FfxUInt32x2(x * 2 + 0, y * 2 + 1), FfxUInt32x2(x * 2 + 1, y * 2 + 1)); + SpdStoreH(FfxInt32x2(workGroupID.xy * 8) + FfxInt32x2(x, y), v, mip, slice); + // store to LDS, try to reduce bank conflicts + // x 0 x 0 x 0 x 0 x 0 x 0 x 0 x 0 + // 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + // 0 x 0 x 0 x 0 x 0 x 0 x 0 x 0 x + // 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + // x 0 x 0 x 0 x 0 x 0 x 0 x 0 x 0 + // ... + // x 0 x 0 x 0 x 0 x 0 x 0 x 0 x 0 + SpdStoreIntermediateH(x * 2 + y % 2, y * 2, v); + } +#else + FfxFloat16x4 v = SpdLoadIntermediateH(x, y); + v = SpdReduceQuadH(v); + // quad index 0 stores result + if (localInvocationIndex % 4 == 0) + { + SpdStoreH(FfxInt32x2(workGroupID.xy * 8) + FfxInt32x2(x / 2, y / 2), v, mip, slice); + SpdStoreIntermediateH(x + (y / 2) % 2, y, v); + } +#endif +} + +void SpdDownsampleMip_3H(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) +{ +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) + if (localInvocationIndex < 16) + { + // x 0 x 0 + // 0 0 0 0 + // 0 x 0 x + // 0 0 0 0 + FfxFloat16x4 v = + SpdReduceIntermediateH(FfxUInt32x2(x * 4 + 0 + 0, y * 4 + 0), FfxUInt32x2(x * 4 + 2 + 0, y * 4 + 0), FfxUInt32x2(x * 4 + 0 + 1, y * 4 + 2), FfxUInt32x2(x * 4 + 2 + 1, y * 4 + 2)); + SpdStoreH(FfxInt32x2(workGroupID.xy * 4) + FfxInt32x2(x, y), v, mip, slice); + // store to LDS + // x 0 0 0 x 0 0 0 x 0 0 0 x 0 0 0 + // 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + // 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + // 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + // 0 x 0 0 0 x 0 0 0 x 0 0 0 x 0 0 + // ... + // 0 0 x 0 0 0 x 0 0 0 x 0 0 0 x 0 + // ... + // 0 0 0 x 0 0 0 x 0 0 0 x 0 0 0 x + // ... + SpdStoreIntermediateH(x * 4 + y, y * 4, v); + } +#else + if (localInvocationIndex < 64) + { + FfxFloat16x4 v = SpdLoadIntermediateH(x * 2 + y % 2, y * 2); + v = SpdReduceQuadH(v); + // quad index 0 stores result + if (localInvocationIndex % 4 == 0) + { + SpdStoreH(FfxInt32x2(workGroupID.xy * 4) + FfxInt32x2(x / 2, y / 2), v, mip, slice); + SpdStoreIntermediateH(x * 2 + y / 2, y * 2, v); + } + } +#endif +} + +void SpdDownsampleMip_4H(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) +{ +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) + if (localInvocationIndex < 4) + { + // x 0 0 0 x 0 0 0 + // ... + // 0 x 0 0 0 x 0 0 + FfxFloat16x4 v = SpdReduceIntermediateH(FfxUInt32x2(x * 8 + 0 + 0 + y * 2, y * 8 + 0), + FfxUInt32x2(x * 8 + 4 + 0 + y * 2, y * 8 + 0), + FfxUInt32x2(x * 8 + 0 + 1 + y * 2, y * 8 + 4), + FfxUInt32x2(x * 8 + 4 + 1 + y * 2, y * 8 + 4)); + SpdStoreH(FfxInt32x2(workGroupID.xy * 2) + FfxInt32x2(x, y), v, mip, slice); + // store to LDS + // x x x x 0 ... + // 0 ... + SpdStoreIntermediateH(x + y * 2, 0, v); + } +#else + if (localInvocationIndex < 16) + { + FfxFloat16x4 v = SpdLoadIntermediateH(x * 4 + y, y * 4); + v = SpdReduceQuadH(v); + // quad index 0 stores result + if (localInvocationIndex % 4 == 0) + { + SpdStoreH(FfxInt32x2(workGroupID.xy * 2) + FfxInt32x2(x / 2, y / 2), v, mip, slice); + SpdStoreIntermediateH(x / 2 + y, 0, v); + } + } +#endif +} + +void SpdDownsampleMip_5H(FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mip, FfxUInt32 slice) +{ +#if defined(FFX_SPD_NO_WAVE_OPERATIONS) + if (localInvocationIndex < 1) + { + // x x x x 0 ... + // 0 ... + FfxFloat16x4 v = SpdReduceIntermediateH(FfxUInt32x2(0, 0), FfxUInt32x2(1, 0), FfxUInt32x2(2, 0), FfxUInt32x2(3, 0)); + SpdStoreH(FfxInt32x2(workGroupID.xy), v, mip, slice); + } +#else + if (localInvocationIndex < 4) + { + FfxFloat16x4 v = SpdLoadIntermediateH(localInvocationIndex, 0); + v = SpdReduceQuadH(v); + // quad index 0 stores result + if (localInvocationIndex % 4 == 0) + { + SpdStoreH(FfxInt32x2(workGroupID.xy), v, mip, slice); + } + } +#endif +} + +void SpdDownsampleMips_6_7H(FfxUInt32 x, FfxUInt32 y, FfxUInt32 mips, FfxUInt32 slice) +{ + FfxInt32x2 tex = FfxInt32x2(x * 4 + 0, y * 4 + 0); + FfxInt32x2 pix = FfxInt32x2(x * 2 + 0, y * 2 + 0); + FfxFloat16x4 v0 = SpdReduceLoad4H(tex, slice); + SpdStoreH(pix, v0, 6, slice); + + tex = FfxInt32x2(x * 4 + 2, y * 4 + 0); + pix = FfxInt32x2(x * 2 + 1, y * 2 + 0); + FfxFloat16x4 v1 = SpdReduceLoad4H(tex, slice); + SpdStoreH(pix, v1, 6, slice); + + tex = FfxInt32x2(x * 4 + 0, y * 4 + 2); + pix = FfxInt32x2(x * 2 + 0, y * 2 + 1); + FfxFloat16x4 v2 = SpdReduceLoad4H(tex, slice); + SpdStoreH(pix, v2, 6, slice); + + tex = FfxInt32x2(x * 4 + 2, y * 4 + 2); + pix = FfxInt32x2(x * 2 + 1, y * 2 + 1); + FfxFloat16x4 v3 = SpdReduceLoad4H(tex, slice); + SpdStoreH(pix, v3, 6, slice); + + if (mips < 8) + return; + // no barrier needed, working on values only from the same thread + + FfxFloat16x4 v = SpdReduce4H(v0, v1, v2, v3); + SpdStoreH(FfxInt32x2(x, y), v, 7, slice); + SpdStoreIntermediateH(x, y, v); +} + +void SpdDownsampleNextFourH(FfxUInt32 x, FfxUInt32 y, FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 baseMip, FfxUInt32 mips, FfxUInt32 slice) +{ + if (mips <= baseMip) + return; + ffxSpdWorkgroupShuffleBarrier(); + SpdDownsampleMip_2H(x, y, workGroupID, localInvocationIndex, baseMip, slice); + + if (mips <= baseMip + 1) + return; + ffxSpdWorkgroupShuffleBarrier(); + SpdDownsampleMip_3H(x, y, workGroupID, localInvocationIndex, baseMip + 1, slice); + + if (mips <= baseMip + 2) + return; + ffxSpdWorkgroupShuffleBarrier(); + SpdDownsampleMip_4H(x, y, workGroupID, localInvocationIndex, baseMip + 2, slice); + + if (mips <= baseMip + 3) + return; + ffxSpdWorkgroupShuffleBarrier(); + SpdDownsampleMip_5H(workGroupID, localInvocationIndex, baseMip + 3, slice); +} + +/// Downsamples a 64x64 tile based on the work group id and work group offset. +/// If after downsampling it's the last active thread group, computes the remaining MIP levels. +/// Uses half types. +/// +/// @param [in] workGroupID index of the work group / thread group +/// @param [in] localInvocationIndex index of the thread within the thread group in 1D +/// @param [in] mips the number of total MIP levels to compute for the input texture +/// @param [in] numWorkGroups the total number of dispatched work groups / thread groups for this slice +/// @param [in] slice the slice of the input texture +/// +/// @ingroup FfxGPUSpd +void SpdDownsampleH(FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mips, FfxUInt32 numWorkGroups, FfxUInt32 slice) +{ + FfxUInt32x2 sub_xy = ffxRemapForWaveReduction(localInvocationIndex % 64); + FfxUInt32 x = sub_xy.x + 8 * ((localInvocationIndex >> 6) % 2); + FfxUInt32 y = sub_xy.y + 8 * ((localInvocationIndex >> 7)); + + // compute MIP level 0 and 1 + SpdDownsampleMips_0_1H(x, y, workGroupID, localInvocationIndex, mips, slice); + + // compute MIP level 2, 3, 4, 5 + SpdDownsampleNextFourH(x, y, workGroupID, localInvocationIndex, 2, mips, slice); + + if (mips < 7) + return; + + // increase the global atomic counter for the given slice and check if it's the last remaining thread group: + // terminate if not, continue if yes. + if (SpdExitWorkgroup(numWorkGroups, localInvocationIndex, slice)) + return; + + // reset the global atomic counter back to 0 for the next spd dispatch + SpdResetAtomicCounter(slice); + + // After mip 5 there is only a single workgroup left that downsamples the remaining up to 64x64 texels. + // compute MIP level 6 and 7 + SpdDownsampleMips_6_7H(x, y, mips, slice); + + // compute MIP level 8, 9, 10, 11 + SpdDownsampleNextFourH(x, y, FfxUInt32x2(0, 0), localInvocationIndex, 8, mips, slice); +} + +/// Downsamples a 64x64 tile based on the work group id and work group offset. +/// If after downsampling it's the last active thread group, computes the remaining MIP levels. +/// Uses half types. +/// +/// @param [in] workGroupID index of the work group / thread group +/// @param [in] localInvocationIndex index of the thread within the thread group in 1D +/// @param [in] mips the number of total MIP levels to compute for the input texture +/// @param [in] numWorkGroups the total number of dispatched work groups / thread groups for this slice +/// @param [in] slice the slice of the input texture +/// @param [in] workGroupOffset the work group offset. it's (0,0) in case the entire input texture is downsampled. +/// +/// @ingroup FfxGPUSpd +void SpdDownsampleH(FfxUInt32x2 workGroupID, FfxUInt32 localInvocationIndex, FfxUInt32 mips, FfxUInt32 numWorkGroups, FfxUInt32 slice, FfxUInt32x2 workGroupOffset) +{ + SpdDownsampleH(workGroupID + workGroupOffset, localInvocationIndex, mips, numWorkGroups, slice); +} + +#endif // #if FFX_HALF +#endif // #if defined(FFX_GPU) diff --git a/third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_accumulate_pass.glsl b/third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_accumulate_pass.glsl new file mode 100644 index 000000000..3b9357553 --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_accumulate_pass.glsl @@ -0,0 +1,75 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require +// Needed for rw_upscaled_output declaration +#extension GL_EXT_shader_image_load_formatted : require + +#define FSR3UPSCALER_BIND_SRV_INPUT_EXPOSURE 0 +#define FSR3UPSCALER_BIND_SRV_DILATED_REACTIVE_MASKS 1 +#if FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS +#define FSR3UPSCALER_BIND_SRV_DILATED_MOTION_VECTORS 2 +#else +#define FSR3UPSCALER_BIND_SRV_INPUT_MOTION_VECTORS 2 +#endif +#define FSR3UPSCALER_BIND_SRV_INTERNAL_UPSCALED 3 +#define FSR3UPSCALER_BIND_SRV_LANCZOS_LUT 4 +#define FSR3UPSCALER_BIND_SRV_FARTHEST_DEPTH_MIP1 5 + +#define FSR3UPSCALER_BIND_SRV_CURRENT_LUMA 6 +#define FSR3UPSCALER_BIND_SRV_LUMA_INSTABILITY 7 +#define FSR3UPSCALER_BIND_SRV_INPUT_COLOR 8 + +#define FSR3UPSCALER_BIND_UAV_INTERNAL_UPSCALED 9 +#define FSR3UPSCALER_BIND_UAV_UPSCALED_OUTPUT 10 +#define FSR3UPSCALER_BIND_UAV_NEW_LOCKS 11 + +#define FSR3UPSCALER_BIND_CB_FSR3UPSCALER 12 + +#include "fsr3upscaler/ffx_fsr3upscaler_callbacks_glsl.h" +#include "fsr3upscaler/ffx_fsr3upscaler_common.h" +#include "fsr3upscaler/ffx_fsr3upscaler_sample.h" +#include "fsr3upscaler/ffx_fsr3upscaler_upsample.h" +#include "fsr3upscaler/ffx_fsr3upscaler_reproject.h" +#include "fsr3upscaler/ffx_fsr3upscaler_accumulate.h" + +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#define FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT 8 +#endif // FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#ifndef FFX_FSR3UPSCALER_NUM_THREADS +#define FFX_FSR3UPSCALER_NUM_THREADS layout (local_size_x = FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, local_size_y = FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT, local_size_z = FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_FSR3UPSCALER_NUM_THREADS + +FFX_FSR3UPSCALER_NUM_THREADS +void main() +{ + Accumulate(FfxInt32x2(gl_GlobalInvocationID.xy)); +} diff --git a/third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_luma_instability_pass.glsl b/third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_luma_instability_pass.glsl new file mode 100644 index 000000000..6d5db88e1 --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_luma_instability_pass.glsl @@ -0,0 +1,62 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require + +#define FSR3UPSCALER_BIND_SRV_INPUT_EXPOSURE 0 +#define FSR3UPSCALER_BIND_SRV_DILATED_REACTIVE_MASKS 1 +#define FSR3UPSCALER_BIND_SRV_DILATED_MOTION_VECTORS 2 +#define FSR3UPSCALER_BIND_SRV_FRAME_INFO 3 +#define FSR3UPSCALER_BIND_SRV_LUMA_HISTORY 4 +#define FSR3UPSCALER_BIND_SRV_FARTHEST_DEPTH_MIP1 5 +#define FSR3UPSCALER_BIND_SRV_CURRENT_LUMA 6 + +#define FSR3UPSCALER_BIND_UAV_LUMA_HISTORY 7 +#define FSR3UPSCALER_BIND_UAV_LUMA_INSTABILITY 8 + +#define FSR3UPSCALER_BIND_CB_FSR3UPSCALER 9 + +#include "fsr3upscaler/ffx_fsr3upscaler_callbacks_glsl.h" +#include "fsr3upscaler/ffx_fsr3upscaler_common.h" +#include "fsr3upscaler/ffx_fsr3upscaler_luma_instability.h" + +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#define FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT 8 +#endif // FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#ifndef FFX_FSR3UPSCALER_NUM_THREADS +#define FFX_FSR3UPSCALER_NUM_THREADS layout (local_size_x = FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, local_size_y = FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT, local_size_z = FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_FSR3UPSCALER_NUM_THREADS + +FFX_FSR3UPSCALER_NUM_THREADS +void main() +{ + LumaInstability(FfxInt32x2(gl_GlobalInvocationID.xy)); +} diff --git a/third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_luma_pyramid_pass.glsl b/third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_luma_pyramid_pass.glsl new file mode 100644 index 000000000..29f4c8f8d --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_luma_pyramid_pass.glsl @@ -0,0 +1,65 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require + +#define FSR3UPSCALER_BIND_SRV_CURRENT_LUMA 0 +#define FSR3UPSCALER_BIND_SRV_FARTHEST_DEPTH 1 + +#define FSR3UPSCALER_BIND_UAV_SPD_GLOBAL_ATOMIC 2 +#define FSR3UPSCALER_BIND_UAV_FRAME_INFO 3 +#define FSR3UPSCALER_BIND_UAV_SPD_MIPS_LEVEL_0 4 +#define FSR3UPSCALER_BIND_UAV_SPD_MIPS_LEVEL_1 5 +#define FSR3UPSCALER_BIND_UAV_SPD_MIPS_LEVEL_2 6 +#define FSR3UPSCALER_BIND_UAV_SPD_MIPS_LEVEL_3 7 +#define FSR3UPSCALER_BIND_UAV_SPD_MIPS_LEVEL_4 8 +#define FSR3UPSCALER_BIND_UAV_SPD_MIPS_LEVEL_5 9 +#define FSR3UPSCALER_BIND_UAV_FARTHEST_DEPTH_MIP1 10 + +#define FSR3UPSCALER_BIND_CB_FSR3UPSCALER 11 +#define FSR3UPSCALER_BIND_CB_SPD 12 + +#include "fsr3upscaler/ffx_fsr3upscaler_callbacks_glsl.h" +#include "fsr3upscaler/ffx_fsr3upscaler_common.h" +#include "fsr3upscaler/ffx_fsr3upscaler_luma_pyramid.h" + +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH 256 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#define FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#ifndef FFX_FSR3UPSCALER_NUM_THREADS +#define FFX_FSR3UPSCALER_NUM_THREADS layout (local_size_x = FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, local_size_y = FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT, local_size_z = FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_FSR3UPSCALER_NUM_THREADS + +FFX_FSR3UPSCALER_NUM_THREADS +void main() +{ + ComputeAutoExposure(gl_WorkGroupID, gl_LocalInvocationIndex); +} diff --git a/third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_prepare_inputs_pass.glsl b/third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_prepare_inputs_pass.glsl new file mode 100644 index 000000000..6e3c57223 --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_prepare_inputs_pass.glsl @@ -0,0 +1,61 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require + +#define FSR3UPSCALER_BIND_SRV_INPUT_MOTION_VECTORS 0 +#define FSR3UPSCALER_BIND_SRV_INPUT_DEPTH 1 +#define FSR3UPSCALER_BIND_SRV_INPUT_COLOR 2 + +#define FSR3UPSCALER_BIND_UAV_DILATED_MOTION_VECTORS 3 +#define FSR3UPSCALER_BIND_UAV_DILATED_DEPTH 4 +#define FSR3UPSCALER_BIND_UAV_RECONSTRUCTED_PREV_NEAREST_DEPTH 5 +#define FSR3UPSCALER_BIND_UAV_FARTHEST_DEPTH 6 +#define FSR3UPSCALER_BIND_UAV_CURRENT_LUMA 7 + +#define FSR3UPSCALER_BIND_CB_FSR3UPSCALER 8 + +#include "fsr3upscaler/ffx_fsr3upscaler_callbacks_glsl.h" +#include "fsr3upscaler/ffx_fsr3upscaler_common.h" +#include "fsr3upscaler/ffx_fsr3upscaler_prepare_inputs.h" + +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#define FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#ifndef FFX_FSR3UPSCALER_NUM_THREADS +#define FFX_FSR3UPSCALER_NUM_THREADS layout (local_size_x = FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, local_size_y = FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT, local_size_z = FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_FSR3UPSCALER_NUM_THREADS + +FFX_FSR3UPSCALER_NUM_THREADS +void main() +{ + PrepareInputs(FfxInt32x2(gl_GlobalInvocationID.xy)); +} diff --git a/third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_prepare_reactivity_pass.glsl b/third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_prepare_reactivity_pass.glsl new file mode 100644 index 000000000..e09d5d36d --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_prepare_reactivity_pass.glsl @@ -0,0 +1,65 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require + +#define FSR3UPSCALER_BIND_SRV_RECONSTRUCTED_PREV_NEAREST_DEPTH 0 +#define FSR3UPSCALER_BIND_SRV_DILATED_MOTION_VECTORS 1 +#define FSR3UPSCALER_BIND_SRV_DILATED_DEPTH 2 +#define FSR3UPSCALER_BIND_SRV_REACTIVE_MASK 3 +#define FSR3UPSCALER_BIND_SRV_TRANSPARENCY_AND_COMPOSITION_MASK 4 +#define FSR3UPSCALER_BIND_SRV_ACCUMULATION 5 +#define FSR3UPSCALER_BIND_SRV_SHADING_CHANGE 6 +#define FSR3UPSCALER_BIND_SRV_CURRENT_LUMA 7 +#define FSR3UPSCALER_BIND_SRV_INPUT_EXPOSURE 8 + +#define FSR3UPSCALER_BIND_UAV_DILATED_REACTIVE_MASKS 9 +#define FSR3UPSCALER_BIND_UAV_NEW_LOCKS 10 +#define FSR3UPSCALER_BIND_UAV_ACCUMULATION 11 + +#define FSR3UPSCALER_BIND_CB_FSR3UPSCALER 12 + +#include "fsr3upscaler/ffx_fsr3upscaler_callbacks_glsl.h" +#include "fsr3upscaler/ffx_fsr3upscaler_common.h" +#include "fsr3upscaler/ffx_fsr3upscaler_prepare_reactivity.h" + +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#define FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#ifndef FFX_FSR3UPSCALER_NUM_THREADS +#define FFX_FSR3UPSCALER_NUM_THREADS layout (local_size_x = FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, local_size_y = FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT, local_size_z = FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_FSR3UPSCALER_NUM_THREADS + +FFX_FSR3UPSCALER_NUM_THREADS +void main() +{ + PrepareReactivity(FfxInt32x2(gl_GlobalInvocationID.xy)); +} diff --git a/third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_rcas_pass.glsl b/third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_rcas_pass.glsl new file mode 100644 index 000000000..112c2e5fb --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_rcas_pass.glsl @@ -0,0 +1,59 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require +// Needed for rw_upscaled_output declaration +#extension GL_EXT_shader_image_load_formatted : require + +#define FSR3UPSCALER_BIND_SRV_INPUT_EXPOSURE 0 +#define FSR3UPSCALER_BIND_SRV_RCAS_INPUT 1 + +#define FSR3UPSCALER_BIND_UAV_UPSCALED_OUTPUT 2 + +#define FSR3UPSCALER_BIND_CB_FSR3UPSCALER 3 +#define FSR3UPSCALER_BIND_CB_RCAS 4 + +#include "fsr3upscaler/ffx_fsr3upscaler_callbacks_glsl.h" +#include "fsr3upscaler/ffx_fsr3upscaler_common.h" +#include "fsr3upscaler/ffx_fsr3upscaler_rcas.h" + +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH 64 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#define FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#ifndef FFX_FSR3UPSCALER_NUM_THREADS +#define FFX_FSR3UPSCALER_NUM_THREADS layout (local_size_x = FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, local_size_y = FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT, local_size_z = FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_FSR3UPSCALER_NUM_THREADS + +FFX_FSR3UPSCALER_NUM_THREADS +void main() +{ + RCAS(gl_LocalInvocationID.xyz, gl_WorkGroupID.xyz, gl_GlobalInvocationID.xyz); +} diff --git a/third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_shading_change_pass.glsl b/third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_shading_change_pass.glsl new file mode 100644 index 000000000..539728f0a --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_shading_change_pass.glsl @@ -0,0 +1,55 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require + +#define FSR3UPSCALER_BIND_SRV_SPD_MIPS 0 + +#define FSR3UPSCALER_BIND_UAV_SHADING_CHANGE 1 + +#define FSR3UPSCALER_BIND_CB_FSR3UPSCALER 2 + +#include "fsr3upscaler/ffx_fsr3upscaler_callbacks_glsl.h" +#include "fsr3upscaler/ffx_fsr3upscaler_common.h" +#include "fsr3upscaler/ffx_fsr3upscaler_shading_change.h" + +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#define FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#ifndef FFX_FSR3UPSCALER_NUM_THREADS +#define FFX_FSR3UPSCALER_NUM_THREADS layout (local_size_x = FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, local_size_y = FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT, local_size_z = FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_FSR3UPSCALER_NUM_THREADS + +FFX_FSR3UPSCALER_NUM_THREADS +void main() +{ + ShadingChange(FfxInt32x2(gl_GlobalInvocationID.xy)); +} diff --git a/third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_shading_change_pyramid_pass.glsl b/third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_shading_change_pyramid_pass.glsl new file mode 100644 index 000000000..5e02d3da9 --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/fsr3upscaler/ffx_fsr3upscaler_shading_change_pyramid_pass.glsl @@ -0,0 +1,67 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require + +#define FSR3UPSCALER_BIND_SRV_CURRENT_LUMA 0 +#define FSR3UPSCALER_BIND_SRV_PREVIOUS_LUMA 1 +#define FSR3UPSCALER_BIND_SRV_DILATED_MOTION_VECTORS 2 +#define FSR3UPSCALER_BIND_SRV_INPUT_EXPOSURE 3 + + +#define FSR3UPSCALER_BIND_UAV_SPD_GLOBAL_ATOMIC 4 +#define FSR3UPSCALER_BIND_UAV_SPD_MIPS_LEVEL_0 5 +#define FSR3UPSCALER_BIND_UAV_SPD_MIPS_LEVEL_1 6 +#define FSR3UPSCALER_BIND_UAV_SPD_MIPS_LEVEL_2 7 +#define FSR3UPSCALER_BIND_UAV_SPD_MIPS_LEVEL_3 8 +#define FSR3UPSCALER_BIND_UAV_SPD_MIPS_LEVEL_4 9 +#define FSR3UPSCALER_BIND_UAV_SPD_MIPS_LEVEL_5 10 + + +#define FSR3UPSCALER_BIND_CB_FSR3UPSCALER 11 +#define FSR3UPSCALER_BIND_CB_SPD 12 + +#include "fsr3upscaler/ffx_fsr3upscaler_callbacks_glsl.h" +#include "fsr3upscaler/ffx_fsr3upscaler_common.h" +#include "fsr3upscaler/ffx_fsr3upscaler_shading_change_pyramid.h" + +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH 256 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#define FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#define FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#ifndef FFX_FSR3UPSCALER_NUM_THREADS +#define FFX_FSR3UPSCALER_NUM_THREADS layout (local_size_x = FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH, local_size_y = FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT, local_size_z = FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_FSR3UPSCALER_NUM_THREADS + +FFX_FSR3UPSCALER_NUM_THREADS +void main() +{ + ComputeShadingChangePyramid(gl_WorkGroupID, gl_LocalInvocationIndex); +} From 8f2fda3934792091692a97744af9596c35e57845 Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 16:01:02 -0600 Subject: [PATCH 006/119] feat: census the render target sets, to settle whether a G-buffer exists Whether a denoising upscaler can ever work here -- NVIDIA's Ray Reconstruction or AMD's Ray Regeneration -- turns on one question: does this game write a G-buffer. Neither takes colour, motion and depth; both want a ray-traced renderer's guides, which means albedo, normals, roughness and specular hit distance. I have been answering "no" from one piece of evidence, that nothing in gpu/ names such a target, which is weak: the replay does not name what it replays. A deferred renderer writes its guides as several colour attachments of one extent in one pass, so that is what to look for. RX_VK_MRT_CENSUS=1 logs each distinct render target set once -- the colour attachment count, their formats and the extent -- from targets(), which resolves once per NOP_SET_RT rather than per draw, so the cost is one line per distinct set and nothing at all while off. Capped at 512 distinct sets so a pathological run cannot fill a log. Never more than one colour attachment means there is no G-buffer and the feature is settled as not applicable to this title. Three or four at one extent means guides may exist and identifying them becomes ordinary work. Either way the docs can then state a finding instead of an assumption. docs/upscaling.md also records what is actually deliverable per vendor, and splits FSR 3 and FSR 4 into two backends rather than two versions: FSR 4 is not source-available, ships as prebuilt signed libraries in AMD's SDK releases, and is reached by loading AMD's runtime and asking for a provider, on AMD hardware. The API it is reached through is the FSR 3.1 API, so row 3 is the path to it. No behaviour change while the switch is unset. Tested with python -I -B tests/run_all.py: 90 passed, with the same 8 failures and 12 skips as upstream/main here. The census needs a run to produce its answer, which needs a built game. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- docs/upscaling.md | 52 +++++++++++++++++++++++++++++++++++++--------- gpu/vk/vk_draw.cpp | 31 +++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 10 deletions(-) diff --git a/docs/upscaling.md b/docs/upscaling.md index bdec33782..b92fd80e4 100644 --- a/docs/upscaling.md +++ b/docs/upscaling.md @@ -100,6 +100,7 @@ Each row is one pull request, and each one is useful on its own. | 2 | A vendor-neutral seam at `taau_stand_in`, with the stand-in as its only backend | No behaviour change, and it is the review that decides the shape | | 3 | FSR 3.1 temporal upscaling as the first backend | MIT sources, no external runtime, works on every vendor, so it is the backend that can be the default | | 4 | DLSS Super Resolution: Streamline on Windows, NGX on Linux | Needs a user-supplied runtime, so it comes after a working fallback exists | +| 4b | FSR 4 through AMD's runtime, behind the same seam | The same API as row 3, so it is a backend rather than a rewrite; AMD hardware only | | 5 | Presets, quality modes and DLAA in the Insert menu and `hookshot_options.ini` | Settings for backends that exist, rather than settings-first | | 6 | Frame generation from real motion and depth | Replaces the block matcher's guess where the inputs are available | @@ -138,18 +139,49 @@ sits beside the binary. The same two backends therefore need two loaders behind Neither backend may be a build requirement: a tree with no SDK present builds, and a machine with no runtime present runs, with the stand-in. -## Ray Reconstruction +## Denoising upscalers, and how to find out -Ray Reconstruction (DLSS's denoising upscaler) is **not** on the list above, and should not be -promised for this game. It replaces a ray-traced renderer's denoiser, and it needs guide buffers — -albedo, normals, roughness, specular hit distance — that only a ray-traced or G-buffer pipeline -produces. OoT's Switch 2 build is rasterized, and nothing in the replayed command stream identifies -such targets: a search of `gpu/` finds no normal, albedo or roughness target anywhere. Turning it on -with color, motion and depth alone would give a different upscaling network, not denoising, and would -be a worse-documented version of row 4. +NVIDIA calls it Ray Reconstruction, AMD calls it Ray Regeneration (RDNA 4 and newer only). Both are the same kind of +thing and neither takes colour, motion and depth: they replace a ray-traced renderer's denoiser, and they want guide +buffers — albedo, normals, roughness, specular hit distance. Nothing in `gpu/` names such a target, and this game is +rasterized, so the working assumption has been that they cannot be given what they need here. -If the intent is "the newest DLSS quality", that is the transformer presets in row 5, on top of -Super Resolution in row 4. +That assumption is now testable rather than repeated. A deferred renderer writes its guides as several colour +attachments of one extent in one pass, so `RX_VK_MRT_CENSUS=1` logs each distinct render target set once — how many +colour attachments the game binds together, their formats and the extent — from `targets()`, which resolves once per +`NOP_SET_RT` rather than per draw. Off by default and free while off. + +Two outcomes, both useful: + +- **Never more than one colour attachment.** There is no G-buffer, there are no guides, and a denoising upscaler is + settled as not applicable to this title. Say so in the docs and stop proposing it. +- **Three or four at one extent.** Guides may exist, and identifying which attachment is which becomes the same kind + of work the input contract above already is. + +Until that log has been read off a run, this section states a question, not a conclusion. + +What *is* deliverable, and is what "the newest upscaling" means in practice on each vendor: + +| | | +|---|---| +| NVIDIA | DLSS Super Resolution with the transformer presets, and DLAA at native resolution. A neural network upscaler, through NGX on Linux and Streamline on Windows | +| AMD | FSR 4's machine-learning upscaler, reached through the FSR 3.1 API that row 4 below targets. Radeon RX 9000/7000/6000; AMD's own API falls back to FSR 3.1.6 elsewhere | +| Everyone | FSR 3.1 compiled from the SDK sources in this tree, which needs no runtime and no particular vendor | + +## FSR 3 and FSR 4 are two backends, not two versions + +FSR 4 is not source-available: it ships as prebuilt signed libraries inside AMD's SDK releases, so it cannot come out +of `third_party/fidelityfx-sdk/`. It is reached by loading AMD's runtime (`amd_fidelityfx_loader_vk.dll` and +`amd_fidelityfx_upscaler_vk.dll`, which the user supplies) and asking it for a provider. That makes FSR 4 a *second +backend* behind the same seam, not an upgrade of the first: + +- **FSR 3.1, from the SDK sources here.** No runtime, no downloads, every vendor and both platforms. This is the one + that can be a default. +- **FSR 4, through AMD's runtime.** AMD hardware, where the installed runtime exposes a provider; it must not + silently become FSR 3 or FSR 2, because then nobody can tell which ran. + +The API that reaches FSR 4 is the FSR 3.1 API, which AMD kept stable for exactly this, so integrating 3.1 properly is +the path to 4 rather than a detour away from it. ## Frame generation, honestly diff --git a/gpu/vk/vk_draw.cpp b/gpu/vk/vk_draw.cpp index 1e216331c..d49faf923 100644 --- a/gpu/vk/vk_draw.cpp +++ b/gpu/vk/vk_draw.cpp @@ -2587,6 +2587,36 @@ struct IndexBind { thread_local IndexBind last_ib; int64_t st_desc_reused; +/// (hookshot) Once per distinct render target set, with RX_VK_MRT_CENSUS=1: how many colour attachments the game +/// binds at once, their formats and the extent. Off by default and free while off. +/// +/// This is here to answer one question with evidence instead of assumption. A denoising upscaler -- NVIDIA's DLSS +/// Ray Reconstruction, AMD's FSR Ray Regeneration -- does not take colour, motion and depth; it takes a ray-traced +/// renderer's guide buffers, which means albedo, normals, roughness and specular hit distance. A deferred renderer +/// writes those as several colour attachments of one extent in one pass. So if this game never binds more than one +/// colour attachment, it has no G-buffer, there are no guides to hand such an upscaler, and the question is closed; +/// if it binds three or four at one extent, there may be. docs/upscaling.md records what the census found. +static void mrt_census(const Targets& at) { + static const bool on = getenv("RX_VK_MRT_CENSUS") != nullptr; + if (!on) return; + uint64_t key = (uint64_t)at.n | ((uint64_t)at.width << 8) | ((uint64_t)at.height << 32); + for (int i = 0; i < at.n && i < 8; i++) key = key * 1000003ull + (uint64_t)at.color_format[i]; + key = key * 1000003ull + (at.depth ? (uint64_t)at.depth_format + 1 : 0); + static std::mutex mu; + static std::unordered_set seen; + { + std::lock_guard lk(mu); + if (seen.size() >= 512 || !seen.insert(key).second) return; + } + char line[400]; + int k = snprintf(line, sizeof line, "vk: targets %d colour %ux%u:", at.n, at.width, at.height); + for (int i = 0; i < at.n && i < 8 && k < 340; i++) + k += snprintf(line + k, sizeof line - k, " %u", (unsigned)at.color_format[i]); + if (at.n == 0 && k < 340) k += snprintf(line + k, sizeof line - k, " (none)"); + if (at.depth && k < 340) k += snprintf(line + k, sizeof line - k, ", depth %u", (unsigned)at.depth_format); + logf("%s", line); +} + thread_local uint64_t targets_serial = ~0ull; // (the state's render targets resolved once per NOP_SET_RT) thread_local Targets cached_targets; @@ -2637,6 +2667,7 @@ Targets targets(NvnState& s) { } } } + mrt_census(at); targets_serial = s.rt_serial; cached_targets = at; return at; From 7042b339ec3b109fda6d58e3ae45d15a694dbb8b Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 16:31:44 -0600 Subject: [PATCH 007/119] docs: the render target census ran, and the count alone does not settle it A 240 s run of the opening with RX_VK_MRT_CENSUS=1: 136 distinct target sets, 491 presents. The test I set was "if the game never binds more than one colour attachment, there is no G-buffer" -- and it binds more. Seven sets bind six, two bind three, six bind two. Reading them settles it the other way. The six-attachment sets are 1x1 through 64x64 with every attachment B10G11R11: six cubemap faces down a mip chain, an environment or irradiance probe. The two- and three-attachment sets are 170x96 to 768x432 in single-channel float pairs or HDR pairs, which is post-processing at a quarter resolution or less. The main scene is one HDR target at 2048x1152, and the present is 2560x1440 RGBA8 sRGB. A deferred G-buffer is three or four attachments at the main render resolution carrying albedo, packed normals and roughness. Nothing here is that, so there are still no guides for a denoising upscaler and Ray Reconstruction and Ray Regeneration stay inapplicable here. The conclusion is the one I had been asserting; the argument I was asserting it from (no target in gpu/ is named "normal") was not a sound one, and the census is. Also confirms the rest of the series runs: the per-network log prints its roles and verdict for real networks (the movie upscalers report "no upscaler inputs", correctly -- they sample one 1920x1080 texture and nothing else), and the census costs one line per distinct set. The gameplay TAAU dispatch was not reached in this run, so the seam has not fired yet: with RX_VK_PRECOMPILE=0 the opening runs at about 2 fps because every pipeline compiles on demand, which is not an fps measurement and does not get past the titles. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- docs/upscaling.md | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/docs/upscaling.md b/docs/upscaling.md index b92fd80e4..24282ec0d 100644 --- a/docs/upscaling.md +++ b/docs/upscaling.md @@ -158,7 +158,27 @@ Two outcomes, both useful: - **Three or four at one extent.** Guides may exist, and identifying which attachment is which becomes the same kind of work the input contract above already is. -Until that log has been read off a run, this section states a question, not a conclusion. +**The log has now been read, and the naive reading of it is the opposite of what was expected.** A +240 s run of the opening (`RX_VK_MRT_CENSUS=1`, 136 distinct target sets, 491 presents) found that +the game *does* bind multi-attachment passes: + +| sets | colour attachments | what they are | +|---|---|---| +| 103 | 1 | the main scene at 2048x1152 B10G11R11, the 2560x1440 RGBA8 sRGB present, and the UI | +| 18 | 0 | depth-only passes | +| 7 | **6** | 1x1 through 64x64, every attachment B10G11R11: six faces of a cubemap down a mip chain, so an environment or irradiance probe | +| 6 | 2 | 170x96 and 384x216 R16F + R32F with D32; 341x192 and 768x432 RGBA16F + RGBA16F with D32; 480x270 two B10G11R11; 960x540 B10G11R11 + R8 | +| 2 | 3 | 341x192 and 768x432, R32F + *undefined* + R16F with D32 (slot 1 unbound) | + +So the count alone does not settle it — the formats and extents do. A deferred G-buffer is three or +four attachments **at the main render resolution** carrying albedo (an 8-bit or sRGB colour), +packed normals (RGB10A2 or RG16) and roughness/metallic. Nothing here is that. The main scene is a +*single* HDR target; every multi-attachment pass is either a cubemap face chain or a small +post-process at a quarter resolution or less, in single-channel float or HDR pairs. + +**Conclusion: there are no albedo, normal or roughness guides to give a denoising upscaler, so Ray +Reconstruction and Ray Regeneration remain inapplicable to this title** — but on the evidence above +rather than on the absence of a target named "normal" in `gpu/`, which was never a sound argument. What *is* deliverable, and is what "the newest upscaling" means in practice on each vendor: From 6b51433e8a5ad39920e5e6b6f2652f13d412b00c Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 16:40:05 -0600 Subject: [PATCH 008/119] feat: create FSR 3.1's pipelines and internal images The first half of the backend: what an evaluation needs before one can be recorded. gpu/vk/vk_fsr3.cpp builds the eleven pass pipelines from the SPIR-V the previous commit checked in, the two samplers every pass declares at bindings 1000 and 1001, and the SDK's eighteen internal images. The resource table and the per-pass binding lists are written out in the SDK's order rather than derived, because they are the SDK's and not ours: ffx_fsr3upscaler.cpp fixes the formats and sizes, and each pass file numbers its own bindings. One wrong entry is a validation error at best and a wrong picture at worst. The one place that knowingly departs from the SDK is the luma history, allocated R8G8B8A8_UNORM because that is what the pass files declare as its storage format, where the SDK allocates RGBA16F -- a storage format qualifier has to match. supported() asks once whether the device has push descriptors and every storage format the images need, so a device that cannot run the passes says so before an allocation fails mid-frame rather than after. prepare() re-makes the images when the render or upscale size changes and tears everything down rather than leaving a half-built set behind. Nothing calls this yet, so there is no behaviour change. The dispatch half needs one input it cannot get from the renderer alone: device_to_view_depth and tan_half_fov come from the game's near plane and field of view, which for this title means reading its camera out of the dispatch's own constant buffer. That is the next commit, and the seam logs what it would need. Builds clean with RX_VK_ONLY=1, 0 warnings. Linux, RTX 5060 Ti, driver 615.71.09. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- gpu/vk/vk_fsr3.cpp | 311 +++++++++++++++++++++++++++++++++++++++++++++ gpu/vk/vk_fsr3.h | 32 +++++ 2 files changed, 343 insertions(+) create mode 100644 gpu/vk/vk_fsr3.cpp create mode 100644 gpu/vk/vk_fsr3.h diff --git a/gpu/vk/vk_fsr3.cpp b/gpu/vk/vk_fsr3.cpp new file mode 100644 index 000000000..6c20c0fdc --- /dev/null +++ b/gpu/vk/vk_fsr3.cpp @@ -0,0 +1,311 @@ +// (hookshot) FSR 3.1's pipelines and internal images. The dispatch half follows; see vk_fsr3.h. +// +// The resource table and the per-pass binding lists are the SDK's, not ours: ffx_fsr3upscaler.cpp +// decides the formats and sizes, and each pass file numbers its own bindings (FSR3UPSCALER_BIND_*). +// Getting one wrong is a validation error at best and a wrong picture at worst, so they are written +// out here in the SDK's order rather than derived. +#include +#include +#include +#include + +#include "vk_fsr3.h" + +#include "shaders/fsr3_accumulate_comp_spv.h" +#include "shaders/fsr3_accumulate_sharpen_comp_spv.h" +#include "shaders/fsr3_luma_instability_comp_spv.h" +#include "shaders/fsr3_luma_pyramid_comp_spv.h" +#include "shaders/fsr3_luma_pyramid_nowave_comp_spv.h" +#include "shaders/fsr3_prepare_inputs_comp_spv.h" +#include "shaders/fsr3_prepare_reactivity_comp_spv.h" +#include "shaders/fsr3_rcas_comp_spv.h" +#include "shaders/fsr3_shading_change_comp_spv.h" +#include "shaders/fsr3_shading_change_pyramid_comp_spv.h" +#include "shaders/fsr3_shading_change_pyramid_nowave_comp_spv.h" + +namespace mkwvk::fsr3 { +namespace { + +/// A descriptor's kind, in the binding order each pass file declares. Every pass also takes the two +/// samplers at bindings 1000 (point clamp) and 1001 (linear clamp). +enum Kind : uint8_t { T, I, U }; // sampled texture, storage image, uniform buffer + +struct PassInfo { + const char* name; + const uint32_t* spv; + size_t spv_bytes; + const Kind* bindings; + size_t binding_count; +}; + +constexpr Kind PREPARE_INPUTS[]{T, T, T, I, I, I, I, I, U}; +constexpr Kind LUMA_PYRAMID[]{T, T, I, I, I, I, I, I, I, I, I, U, U}; +constexpr Kind SHADING_CHANGE_PYRAMID[]{T, T, T, T, I, I, I, I, I, I, I, U, U}; +constexpr Kind SHADING_CHANGE[]{T, I, U}; +constexpr Kind PREPARE_REACTIVITY[]{T, T, T, T, T, T, T, T, T, I, I, I, U}; +constexpr Kind LUMA_INSTABILITY[]{T, T, T, T, T, T, T, I, I, U}; +constexpr Kind ACCUMULATE[]{T, T, T, T, T, T, T, T, T, I, I, I, U}; +constexpr Kind RCAS[]{T, T, I, U, U}; + +#define PASS(n, spv, b) PassInfo{n, spv, sizeof spv, b, sizeof b / sizeof b[0]} + +/// The passes, in the order PassId numbers them. The two _nowave pyramids are alternatives to the +/// two before them, for devices without the subgroup operations the single-pass downsampler wants. +const PassInfo PASSES[]{ + PASS("prepare_inputs", FSR3_PREPARE_INPUTS_COMP_SPV, PREPARE_INPUTS), + PASS("luma_pyramid", FSR3_LUMA_PYRAMID_COMP_SPV, LUMA_PYRAMID), + PASS("luma_pyramid_nowave", FSR3_LUMA_PYRAMID_NOWAVE_COMP_SPV, LUMA_PYRAMID), + PASS("shading_change_pyramid", FSR3_SHADING_CHANGE_PYRAMID_COMP_SPV, SHADING_CHANGE_PYRAMID), + PASS("shading_change_pyramid_nowave", FSR3_SHADING_CHANGE_PYRAMID_NOWAVE_COMP_SPV, + SHADING_CHANGE_PYRAMID), + PASS("shading_change", FSR3_SHADING_CHANGE_COMP_SPV, SHADING_CHANGE), + PASS("prepare_reactivity", FSR3_PREPARE_REACTIVITY_COMP_SPV, PREPARE_REACTIVITY), + PASS("luma_instability", FSR3_LUMA_INSTABILITY_COMP_SPV, LUMA_INSTABILITY), + PASS("accumulate", FSR3_ACCUMULATE_COMP_SPV, ACCUMULATE), + PASS("accumulate_sharpen", FSR3_ACCUMULATE_SHARPEN_COMP_SPV, ACCUMULATE), + PASS("rcas", FSR3_RCAS_COMP_SPV, RCAS), +}; +#undef PASS + +constexpr size_t kPassCount = sizeof PASSES / sizeof PASSES[0]; +constexpr uint32_t kSpdStoredMips = 6; + +struct Pipeline { + VkDescriptorSetLayout set = VK_NULL_HANDLE; + VkPipelineLayout layout = VK_NULL_HANDLE; + VkPipeline pipeline = VK_NULL_HANDLE; +}; + +struct Image { + VkImage image = VK_NULL_HANDLE; + VmaAllocation memory = nullptr; + VkImageView view = VK_NULL_HANDLE; ///< every level + std::vector levels; ///< one per level, for the mipped ones + uint32_t width = 0, height = 0, level_count = 1; + VkFormat format = VK_FORMAT_UNDEFINED; +}; + +struct State { + bool tried = false; + bool ok = false; + Pipeline passes[kPassCount]; + VkSampler point = VK_NULL_HANDLE; + VkSampler linear = VK_NULL_HANDLE; + // The SDK's internal images. The pairs ping-pong on frame parity, as its resource tables do. + Image accumulation[2], luma[2], luma_history[2], internal_upscaled[2]; + Image farthest_depth, shading_change, new_locks, spd_mips, farthest_depth_mip1; + Image dilated_motion_vectors, dilated_depth, previous_nearest_depth, dilated_reactive_masks; + Image frame_info, spd_atomic, lanczos_lut, default_reactive, output; + uint32_t render_width = 0, render_height = 0, upscale_width = 0, upscale_height = 0; +}; + +State g; + +void drop_image(Image& t) { + for (VkImageView v : t.levels) vkDestroyImageView(dev.device, v, nullptr); + t.levels.clear(); + if (t.view) vkDestroyImageView(dev.device, t.view, nullptr); + if (t.image) mkwvk::destroy_image(t.image, t.memory); + t = Image{}; +} + +/// One of the SDK's internal images: storage and sampled, GENERAL throughout, with a view per level +/// when it has more than one (the pyramids bind their levels separately). +bool make_image(Image& t, VkFormat format, uint32_t width, uint32_t height, uint32_t levels = 1) { + drop_image(t); + t.format = format, t.width = std::max(1u, width), t.height = std::max(1u, height); + t.level_count = std::max(1u, levels); + VkImageCreateInfo ci{VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO}; + ci.imageType = VK_IMAGE_TYPE_2D; + ci.format = format; + ci.extent = {t.width, t.height, 1}; + ci.mipLevels = t.level_count; + ci.arrayLayers = 1; + ci.samples = VK_SAMPLE_COUNT_1_BIT; + ci.tiling = VK_IMAGE_TILING_OPTIMAL; + ci.usage = VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_SAMPLED_BIT | + VK_IMAGE_USAGE_TRANSFER_DST_BIT; + ci.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; + if (!create_image(ci, t.image, t.memory, false)) { + logf("vk: fsr3: a %ux%u image (format %d) was not made", t.width, t.height, (int)format); + return false; + } + VkImageViewCreateInfo vi{VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO}; + vi.image = t.image; + vi.viewType = VK_IMAGE_VIEW_TYPE_2D; + vi.format = format; + vi.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, t.level_count, 0, 1}; + if (vkCreateImageView(dev.device, &vi, nullptr, &t.view) != VK_SUCCESS) return false; + if (t.level_count > 1) { + for (uint32_t level = 0; level < t.level_count; level++) { + vi.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, level, 1, 0, 1}; + VkImageView v = VK_NULL_HANDLE; + if (vkCreateImageView(dev.device, &vi, nullptr, &v) != VK_SUCCESS) return false; + t.levels.push_back(v); + } + } + return true; +} + +bool make_pipeline(Pipeline& p, const PassInfo& info) { + std::vector bindings; + bindings.reserve(info.binding_count + 2); + for (size_t i = 0; i < info.binding_count; i++) { + const VkDescriptorType type = info.bindings[i] == T ? VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE + : info.bindings[i] == I ? VK_DESCRIPTOR_TYPE_STORAGE_IMAGE + : VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + bindings.push_back({(uint32_t)i, type, 1, VK_SHADER_STAGE_COMPUTE_BIT, nullptr}); + } + // (the two samplers every pass declares, at the bindings the SDK's GLSL fixes them to) + bindings.push_back({1000, VK_DESCRIPTOR_TYPE_SAMPLER, 1, VK_SHADER_STAGE_COMPUTE_BIT, nullptr}); + bindings.push_back({1001, VK_DESCRIPTOR_TYPE_SAMPLER, 1, VK_SHADER_STAGE_COMPUTE_BIT, nullptr}); + VkDescriptorSetLayoutCreateInfo li{VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO}; + li.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR; + li.bindingCount = (uint32_t)bindings.size(); + li.pBindings = bindings.data(); + if (vkCreateDescriptorSetLayout(dev.device, &li, nullptr, &p.set) != VK_SUCCESS) return false; + VkPipelineLayoutCreateInfo pi{VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO}; + pi.setLayoutCount = 1, pi.pSetLayouts = &p.set; + if (vkCreatePipelineLayout(dev.device, &pi, nullptr, &p.layout) != VK_SUCCESS) return false; + VkShaderModuleCreateInfo mi{VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO}; + mi.codeSize = info.spv_bytes; + mi.pCode = info.spv; + VkShaderModule m = VK_NULL_HANDLE; + if (vkCreateShaderModule(dev.device, &mi, nullptr, &m) != VK_SUCCESS) return false; + VkComputePipelineCreateInfo ci{VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO}; + ci.stage = {VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, nullptr, 0, + VK_SHADER_STAGE_COMPUTE_BIT, m, "main", nullptr}; + ci.layout = p.layout; + const VkResult made = vkCreateComputePipelines(dev.device, VK_NULL_HANDLE, 1, &ci, nullptr, &p.pipeline); + vkDestroyShaderModule(dev.device, m, nullptr); + if (made != VK_SUCCESS) { + logf("vk: fsr3: the %s pass pipeline was not made (%d)", info.name, (int)made); + p.pipeline = VK_NULL_HANDLE; + return false; + } + return true; +} + +bool make_samplers() { + VkSamplerCreateInfo si{VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO}; + si.addressModeU = si.addressModeV = si.addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; + si.minLod = 0.0f, si.maxLod = VK_LOD_CLAMP_NONE; + si.magFilter = si.minFilter = VK_FILTER_NEAREST; + si.mipmapMode = VK_SAMPLER_MIPMAP_MODE_NEAREST; + if (vkCreateSampler(dev.device, &si, nullptr, &g.point) != VK_SUCCESS) return false; + si.magFilter = si.minFilter = VK_FILTER_LINEAR; + si.mipmapMode = VK_SAMPLER_MIPMAP_MODE_LINEAR; + return vkCreateSampler(dev.device, &si, nullptr, &g.linear) == VK_SUCCESS; +} + +/// Every storage format the internal images need. A device missing one cannot run the passes, and +/// finding that out here is better than a failed image allocation in the middle of a frame. +bool formats_supported() { + static const VkFormat needed[]{ + VK_FORMAT_R8_UNORM, VK_FORMAT_R16_SFLOAT, VK_FORMAT_R8G8B8A8_UNORM, + VK_FORMAT_R16G16B16A16_SFLOAT, VK_FORMAT_R16G16_SFLOAT, VK_FORMAT_R32_SFLOAT, + VK_FORMAT_R32_UINT, VK_FORMAT_R32G32B32A32_SFLOAT, VK_FORMAT_R16_SNORM, + }; + for (VkFormat f : needed) { + VkFormatProperties props{}; + vkGetPhysicalDeviceFormatProperties(dev.physical, f, &props); + if (!(props.optimalTilingFeatures & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT) || + !(props.optimalTilingFeatures & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)) { + logf("vk: fsr3: format %d cannot be a storage and sampled image here", (int)f); + return false; + } + } + return true; +} + +} // namespace + +bool supported() { + static const bool answer = [] { + if (!dev.push_descriptor || !vkCmdPushDescriptorSetKHR) { + logf("vk: fsr3: no push descriptors"); + return false; + } + return formats_supported(); + }(); + return answer; +} + +bool prepare(uint32_t render_width, uint32_t render_height, uint32_t upscale_width, + uint32_t upscale_height) { + if (!supported()) return false; + if (!g.tried) { + g.tried = true; + g.ok = make_samplers(); + for (size_t i = 0; i < kPassCount && g.ok; i++) g.ok = make_pipeline(g.passes[i], PASSES[i]); + if (g.ok) logf("vk: fsr3: %zu pass pipelines ready", kPassCount); + } + if (!g.ok) return false; + const bool same = g.output.image && g.render_width == render_width && + g.render_height == render_height && g.upscale_width == upscale_width && + g.upscale_height == upscale_height; + if (same) return true; + + const uint32_t rw = std::max(1u, render_width), rh = std::max(1u, render_height); + const uint32_t uw = std::max(1u, upscale_width), uh = std::max(1u, upscale_height); + bool made = true; + for (size_t i = 0; i < 2 && made; i++) { + made = made && make_image(g.accumulation[i], VK_FORMAT_R8_UNORM, rw, rh); + made = made && make_image(g.luma[i], VK_FORMAT_R16_SFLOAT, rw, rh); + // (the pass files declare the luma history as rgba8; the SDK allocates RGBA16F, which a + // storage format qualifier does not match, so allocate what the shaders store) + made = made && make_image(g.luma_history[i], VK_FORMAT_R8G8B8A8_UNORM, rw, rh); + made = made && make_image(g.internal_upscaled[i], VK_FORMAT_R16G16B16A16_SFLOAT, uw, uh); + } + const uint32_t half_w = std::max(1u, rw / 2), half_h = std::max(1u, rh / 2); + const uint32_t spd_levels = + (uint32_t)std::floor(std::log2((float)std::max(half_w, half_h))) + 1; + made = made && make_image(g.farthest_depth, VK_FORMAT_R16_SFLOAT, rw, rh); + made = made && make_image(g.shading_change, VK_FORMAT_R8_UNORM, half_w, half_h); + made = made && make_image(g.new_locks, VK_FORMAT_R8_UNORM, uw, uh); + made = made && make_image(g.spd_mips, VK_FORMAT_R16G16_SFLOAT, half_w, half_h, + std::max(spd_levels, kSpdStoredMips)); + made = made && make_image(g.farthest_depth_mip1, VK_FORMAT_R16_SFLOAT, half_w, half_h); + made = made && make_image(g.dilated_motion_vectors, VK_FORMAT_R16G16_SFLOAT, rw, rh); + made = made && make_image(g.dilated_depth, VK_FORMAT_R32_SFLOAT, rw, rh); + made = made && make_image(g.previous_nearest_depth, VK_FORMAT_R32_UINT, rw, rh); + made = made && make_image(g.dilated_reactive_masks, VK_FORMAT_R8G8B8A8_UNORM, rw, rh); + made = made && make_image(g.frame_info, VK_FORMAT_R32G32B32A32_SFLOAT, 1, 1); + made = made && make_image(g.spd_atomic, VK_FORMAT_R32_UINT, 1, 1); + made = made && make_image(g.lanczos_lut, VK_FORMAT_R16_SNORM, 128, 1); + made = made && make_image(g.default_reactive, VK_FORMAT_R8_UNORM, 1, 1); + made = made && make_image(g.output, VK_FORMAT_R16G16B16A16_SFLOAT, uw, uh); + if (!made) { + shutdown(); + return false; + } + g.render_width = rw, g.render_height = rh, g.upscale_width = uw, g.upscale_height = uh; + logf("vk: fsr3: %ux%u -> %ux%u", rw, rh, uw, uh); + return true; +} + +VkImage output_image() { + return g.output.image; +} + +VkImageView output_view() { + return g.output.view; +} + +void shutdown() { + for (Image* t : {&g.farthest_depth, &g.shading_change, &g.new_locks, &g.spd_mips, + &g.farthest_depth_mip1, &g.dilated_motion_vectors, &g.dilated_depth, + &g.previous_nearest_depth, &g.dilated_reactive_masks, &g.frame_info, + &g.spd_atomic, &g.lanczos_lut, &g.default_reactive, &g.output}) { + drop_image(*t); + } + for (size_t i = 0; i < 2; i++) { + drop_image(g.accumulation[i]); + drop_image(g.luma[i]); + drop_image(g.luma_history[i]); + drop_image(g.internal_upscaled[i]); + } + g.render_width = g.render_height = g.upscale_width = g.upscale_height = 0; +} + +} // namespace mkwvk::fsr3 diff --git a/gpu/vk/vk_fsr3.h b/gpu/vk/vk_fsr3.h new file mode 100644 index 000000000..a8aee5724 --- /dev/null +++ b/gpu/vk/vk_fsr3.h @@ -0,0 +1,32 @@ +// (hookshot) AMD FidelityFX Super Resolution 3.1 (the FSR 3.1.4 upscaler from FidelityFX SDK +// v1.1.4, shaders in third_party/fidelityfx-sdk compiled by scripts/fsr3_shaders.py) as a backend +// for the game's own upscale dispatch: docs/upscaling.md and gpu/vk/upscale_seam.h. +// +// This file holds what an evaluation needs before it can be recorded -- the eleven pipelines and +// the SDK's internal images -- and nothing that records one. The dispatch half follows. +#pragma once + +#include + +#include "vk_internal.h" + +namespace mkwvk::fsr3 { + +/// Whether this device can run the passes at all: push descriptors, and every storage format the +/// SDK's internal images need. Asked once; the answer is cached. +[[nodiscard]] bool supported(); + +/// Makes the pipelines and the internal images for an evaluation at these sizes, re-making them +/// when the sizes change. False when anything could not be made, which leaves FSR unavailable +/// rather than half-built. +[[nodiscard]] bool prepare(uint32_t render_width, uint32_t render_height, uint32_t upscale_width, + uint32_t upscale_height); + +/// The image an evaluation resolves into: RGBA16F at the upscale size, or null before prepare(). +[[nodiscard]] VkImage output_image(); +[[nodiscard]] VkImageView output_view(); + +/// Frees everything. Safe to call when nothing was made. +void shutdown(); + +} // namespace mkwvk::fsr3 From 8769c80ebfd9a3d808389336947ad0324af75313 Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 16:49:06 -0600 Subject: [PATCH 009/119] feat: record FSR 3.1's nine dispatches The other half: the constants, the clears, the barriers and the nine dispatches, following the SDK's ffx_fsr3upscaler.cpp rather than inventing an order. cbFSR3Upscaler is laid out field for field with a static_assert on its 148 bytes, because every pass reads it by offset and a field out of place is a wrong picture rather than a compile error. What is faithful to the SDK and worth checking in review: the jitter phase count moves one step a frame toward 8*(ratio^2) instead of jumping; the SPD counter, its mips and the previous-nearest-depth scratch are cleared every frame while the accumulation and frame info are cleared only on a reset; the Lanczos weights are built once and copied in; the two ping-pong sets swap on parity at the end; and RCAS only runs when sharpening is asked for, otherwise the sharpening accumulate variant writes the output directly. Three things specific to this renderer rather than the reference. Barriers are synchronization2, which is what this tree loads (vkCmdPipelineBarrier is not in vk_loader.h). The constant blocks live in one host-visible mapped buffer with a set of slots per frame in flight, so writing one frame cannot disturb a frame still being read. And descriptors are pushed per pass, with the two samplers at the bindings the SDK's GLSL fixes them to. upscale() refuses rather than guesses. No colour, depth or motion is a refusal, and so is a missing near plane or field of view: device_to_view_depth and tan_half_fov are built from them, and a guessed camera makes disocclusion wrong in a way that reads as a renderer bug. Nothing calls this yet, so there is no behaviour change; wiring it to the seam needs the camera read out of the dispatch's own constant buffer, which is the next commit. Untested beyond compiling: builds clean with RX_VK_ONLY=1, 0 warnings, Linux, RTX 5060 Ti, driver 615.71.09. No pass has executed, so nothing here is claimed to produce a correct image yet. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- gpu/vk/vk_fsr3.cpp | 388 ++++++++++++++++++++++++++++++++++++++++++++- gpu/vk/vk_fsr3.h | 27 ++++ 2 files changed, 414 insertions(+), 1 deletion(-) diff --git a/gpu/vk/vk_fsr3.cpp b/gpu/vk/vk_fsr3.cpp index 6c20c0fdc..099b35b69 100644 --- a/gpu/vk/vk_fsr3.cpp +++ b/gpu/vk/vk_fsr3.cpp @@ -5,11 +5,16 @@ // Getting one wrong is a validation error at best and a wrong picture at worst, so they are written // out here in the SDK's order rather than derived. #include +#include #include +#include +#include +#include #include #include #include "vk_fsr3.h" +#include "vk_texture.h" // (full_barrier: what the rest of the renderer uses between passes) #include "shaders/fsr3_accumulate_comp_spv.h" #include "shaders/fsr3_accumulate_sharpen_comp_spv.h" @@ -85,6 +90,90 @@ struct Image { VkFormat format = VK_FORMAT_UNDEFINED; }; +/// cbFSR3Upscaler, exactly as ffx_fsr3upscaler.cpp lays it out. The size is asserted because every +/// pass reads it by offset: a field out of place is a wrong picture, not a compile error. +struct Constants { + int32_t render_size[2]; + int32_t previous_render_size[2]; + int32_t upscale_size[2]; + int32_t previous_upscale_size[2]; + int32_t max_render_size[2]; + int32_t max_upscale_size[2]; + float device_to_view_depth[4]; + float jitter[2]; + float previous_jitter[2]; + float motion_vector_scale[2]; + float downscale_factor[2]; + float motion_vector_jitter_cancellation[2]; + float tan_half_fov; + float jitter_phase_count; + float delta_time; + float delta_pre_exposure; + float view_space_to_meters; + float frame_index; + float velocity_factor; + float reactiveness_scale; + float shading_change_scale; + float accumulation_added_per_frame; + float min_disocclusion_accumulation; +}; +static_assert(sizeof(Constants) == 148, "cbFSR3Upscaler must match the SDK's layout"); + +struct SpdConstants { + uint32_t mips; + uint32_t num_work_groups; + uint32_t work_group_offset[2]; + uint32_t render_size[2]; +}; + +struct RcasConstants { + uint32_t config[4]; +}; + +/// ffxFsr3UpscalerGetJitterPhaseCount. +int32_t jitter_phase_count_for(uint32_t render_width, uint32_t display_width) { + const float ratio = (float)display_width / (float)std::max(1u, render_width); + return (int32_t)(8.0f * ratio * ratio); +} + +/// FidelityFX's AU1_AH1_AF1: a float's bits as a half's. +uint32_t half_bits(float v) { + const _Float16 h = (_Float16)v; + uint16_t bits = 0; + memcpy(&bits, &h, 2); + return bits; +} + +/// FsrRcasCon from ffx_fsr1.h: the sharpness in both halves of the second word. +void rcas_con(uint32_t* con, float sharpness) { + sharpness = std::exp2(-sharpness); + memcpy(&con[0], &sharpness, 4); + con[1] = half_bits(sharpness) | (half_bits(sharpness) << 16); + con[2] = 0; + con[3] = 0; +} + +/// One descriptor of a dispatch: an image view, or a range of the uniform buffer. +struct Resource { + VkImageView view = VK_NULL_HANDLE; + VkBuffer buffer = VK_NULL_HANDLE; + VkDeviceSize offset = 0; + VkDeviceSize size = 0; +}; + +/// A memory dependency over the whole queue, in the synchronization2 form this renderer loads. +void memory_barrier(VkCommandBuffer cmd, VkPipelineStageFlags2 src_stage, VkAccessFlags2 src, + VkPipelineStageFlags2 dst_stage, VkAccessFlags2 dst) { + VkMemoryBarrier2 b{VK_STRUCTURE_TYPE_MEMORY_BARRIER_2}; + b.srcStageMask = src_stage, b.srcAccessMask = src; + b.dstStageMask = dst_stage, b.dstAccessMask = dst; + VkDependencyInfo di{VK_STRUCTURE_TYPE_DEPENDENCY_INFO}; + di.memoryBarrierCount = 1, di.pMemoryBarriers = &b; + vkCmdPipelineBarrier2(cmd, &di); +} + +constexpr VkImageSubresourceRange ALL_LEVELS{VK_IMAGE_ASPECT_COLOR_BIT, 0, VK_REMAINING_MIP_LEVELS, 0, 1}; + struct State { bool tried = false; bool ok = false; @@ -97,8 +186,26 @@ struct State { Image dilated_motion_vectors, dilated_depth, previous_nearest_depth, dilated_reactive_masks; Image frame_info, spd_atomic, lanczos_lut, default_reactive, output; uint32_t render_width = 0, render_height = 0, upscale_width = 0, upscale_height = 0; + // The uniform buffer the three constant blocks are written into, one set of slots per frame in + // flight so a frame being read is not overwritten. + VkBuffer uniforms = VK_NULL_HANDLE; + VmaAllocation uniforms_memory = nullptr; + void* uniforms_mapped = nullptr; + VkDeviceSize slot_fsr = 0, slot_spd = 0, slot_rcas = 0, frame_stride = 0; + uint32_t uniform_frame = 0; + // History, as fsr3upscalerDispatch carries it. + int32_t previous_render_size[2]{}; + int32_t previous_upscale_size[2]{}; + float previous_jitter[2]{}; + float jitter_phase_count = 0.0f; + float frame_index = 0.0f; + uint32_t parity = 0; + bool first_evaluation = true; + bool lut_uploaded = false; }; +constexpr uint32_t kUniformFrames = 4; // (more than the swapchain's images in flight) + State g; void drop_image(Image& t) { @@ -218,6 +325,66 @@ bool formats_supported() { return true; } +/// The uniform buffer the three constant blocks are written into: host visible and mapped, with a +/// set of slots per frame in flight so writing one frame cannot disturb a frame still being read. +bool make_uniforms() { + const VkDeviceSize align = std::max(dev.props.limits.minUniformBufferOffsetAlignment, 16); + const auto round_up = [align](VkDeviceSize n) { return (n + align - 1) / align * align; }; + g.slot_fsr = round_up(sizeof(Constants)); + g.slot_spd = round_up(sizeof(SpdConstants)); + g.slot_rcas = round_up(sizeof(RcasConstants)); + g.frame_stride = g.slot_fsr + g.slot_spd + g.slot_rcas + round_up(128 * sizeof(int16_t)); + return create_buffer(g.frame_stride * kUniformFrames, + VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT, true, + g.uniforms, g.uniforms_memory, &g.uniforms_mapped); +} + +/// Records one pass: its descriptors pushed in the order the pass file numbers them, then the two +/// samplers it declares at 1000 and 1001, then the dispatch. +void record_pass(VkCommandBuffer cmd, const Pipeline& p, const PassInfo& info, const Resource* res, + size_t count, uint32_t groups_x, uint32_t groups_y) { + std::vector images(count); + std::vector buffers(count); + std::vector writes; + writes.reserve(count + 2); + for (size_t i = 0; i < count; i++) { + VkWriteDescriptorSet w{VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET}; + w.dstBinding = (uint32_t)i; + w.descriptorCount = 1; + if (info.bindings[i] == U) { + buffers[i] = {res[i].buffer, res[i].offset, res[i].size}; + w.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + w.pBufferInfo = &buffers[i]; + } else { + images[i] = {VK_NULL_HANDLE, res[i].view, VK_IMAGE_LAYOUT_GENERAL}; + w.descriptorType = info.bindings[i] == T ? VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE + : VK_DESCRIPTOR_TYPE_STORAGE_IMAGE; + w.pImageInfo = &images[i]; + } + writes.push_back(w); + } + const VkDescriptorImageInfo point{g.point, VK_NULL_HANDLE, VK_IMAGE_LAYOUT_UNDEFINED}; + const VkDescriptorImageInfo linear{g.linear, VK_NULL_HANDLE, VK_IMAGE_LAYOUT_UNDEFINED}; + for (const auto& [binding, info_ptr] : + {std::pair{1000, &point}, + std::pair{1001, &linear}}) { + VkWriteDescriptorSet w{VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET}; + w.dstBinding = binding; + w.descriptorCount = 1; + w.descriptorType = VK_DESCRIPTOR_TYPE_SAMPLER; + w.pImageInfo = info_ptr; + writes.push_back(w); + } + vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, p.pipeline); + vkCmdPushDescriptorSetKHR(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, p.layout, 0, + (uint32_t)writes.size(), writes.data()); + vkCmdDispatch(cmd, std::max(1u, groups_x), std::max(1u, groups_y), 1); + // (every pass reads what the one before it wrote) + memory_barrier(cmd, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_WRITE_BIT, + VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, + VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_SHADER_WRITE_BIT); +} + } // namespace bool supported() { @@ -236,7 +403,7 @@ bool prepare(uint32_t render_width, uint32_t render_height, uint32_t upscale_wid if (!supported()) return false; if (!g.tried) { g.tried = true; - g.ok = make_samplers(); + g.ok = make_samplers() && make_uniforms(); for (size_t i = 0; i < kPassCount && g.ok; i++) g.ok = make_pipeline(g.passes[i], PASSES[i]); if (g.ok) logf("vk: fsr3: %zu pass pipelines ready", kPassCount); } @@ -284,6 +451,222 @@ bool prepare(uint32_t render_width, uint32_t render_height, uint32_t upscale_wid return true; } +bool upscale(VkCommandBuffer cmd, const Inputs& in) { + if (!in.color || !in.depth || !in.motion) return false; + // (a guessed camera makes disocclusion wrong in a way that reads as a renderer bug, so a + // missing one is a refusal: docs/upscaling.md) + if (!(in.near_plane > 0.0f) || !(in.fov_y > 0.0f)) return false; + if (!prepare(in.render_width, in.render_height, in.upscale_width, in.upscale_height)) return false; + + const bool first = g.first_evaluation; + const bool reset = in.reset || first; + g.first_evaluation = false; + const int32_t rw = (int32_t)g.render_width, rh = (int32_t)g.render_height; + const int32_t uw = (int32_t)g.upscale_width, uh = (int32_t)g.upscale_height; + + Constants k{}; + k.render_size[0] = rw, k.render_size[1] = rh; + k.upscale_size[0] = uw, k.upscale_size[1] = uh; + k.max_render_size[0] = rw, k.max_render_size[1] = rh; + k.max_upscale_size[0] = uw, k.max_upscale_size[1] = uh; + for (int i = 0; i < 2; i++) { + k.previous_render_size[i] = first ? k.render_size[i] : g.previous_render_size[i]; + k.previous_upscale_size[i] = first ? k.upscale_size[i] : g.previous_upscale_size[i]; + k.jitter[i] = in.jitter[i]; + k.previous_jitter[i] = first ? in.jitter[i] : g.previous_jitter[i]; + } + { // (setupDeviceDepthToViewSpaceDepthParams for reversed infinite depth) + const float aspect = (float)rw / (float)std::max(1, rh); + const float cot_half_fov = std::cos(0.5f * in.fov_y) / std::sin(0.5f * in.fov_y); + k.device_to_view_depth[0] = -1.0f * FLT_EPSILON; + k.device_to_view_depth[1] = in.near_plane; + k.device_to_view_depth[2] = 1.0f / (cot_half_fov / aspect); + k.device_to_view_depth[3] = 1.0f / cot_half_fov; + k.tan_half_fov = std::tan(std::atan(std::tan(in.fov_y * 0.5f) * aspect)); + } + k.motion_vector_scale[0] = in.motion_scale[0] / (float)std::max(1, rw); + k.motion_vector_scale[1] = in.motion_scale[1] / (float)std::max(1, rh); + k.downscale_factor[0] = (float)rw / (float)std::max(1, uw); + k.downscale_factor[1] = (float)rh / (float)std::max(1, uh); + const float phases = (float)jitter_phase_count_for(g.render_width, g.upscale_width); + if (reset || g.jitter_phase_count == 0.0f) g.jitter_phase_count = phases; + else if (phases > g.jitter_phase_count) g.jitter_phase_count += 1.0f; + else if (phases < g.jitter_phase_count) g.jitter_phase_count -= 1.0f; + k.jitter_phase_count = g.jitter_phase_count; + k.delta_time = std::clamp(in.frame_time_ms / 1000.0f, 0.0f, 1.0f); + k.delta_pre_exposure = 1.0f; + k.view_space_to_meters = 1.0f; + g.frame_index = reset ? 0.0f : g.frame_index + 1.0f; + k.frame_index = g.frame_index; + k.velocity_factor = 1.0f; // (the SDK's FFX_FSR3UPSCALER_CONFIGURE_UPSCALE_KEY_* defaults) + k.reactiveness_scale = 1.0f; + k.shading_change_scale = 1.0f; + k.accumulation_added_per_frame = 1.0f / 3.0f; + k.min_disocclusion_accumulation = -1.0f / 3.0f; + for (int i = 0; i < 2; i++) { + g.previous_render_size[i] = k.render_size[i]; + g.previous_upscale_size[i] = k.upscale_size[i]; + g.previous_jitter[i] = in.jitter[i]; + } + + const uint32_t spd_x = (g.render_width - 1) / 64 + 1; + const uint32_t spd_y = (g.render_height - 1) / 64 + 1; + SpdConstants spd{}; + spd.mips = (uint32_t)std::min(std::floor(std::log2((float)std::max(g.render_width, g.render_height))), 12.0f); + spd.num_work_groups = spd_x * spd_y; + spd.render_size[0] = g.render_width, spd.render_size[1] = g.render_height; + RcasConstants rcas{}; + rcas_con(rcas.config, 2.0f - 2.0f * std::clamp(in.sharpness, 0.0f, 1.0f)); + + // This frame's slots, written through the mapped buffer. + const VkDeviceSize base = (VkDeviceSize)(g.uniform_frame % kUniformFrames) * g.frame_stride; + g.uniform_frame++; + uint8_t* const mapped = (uint8_t*)g.uniforms_mapped + base; + memcpy(mapped, &k, sizeof k); + memcpy(mapped + g.slot_fsr, &spd, sizeof spd); + memcpy(mapped + g.slot_fsr + g.slot_spd, &rcas, sizeof rcas); + const VkDeviceSize lut_at = g.slot_fsr + g.slot_spd + g.slot_rcas; + if (!g.lut_uploaded) { // (the accumulate pass's Lanczos weights, 128 taps as the SDK builds them) + int16_t weights[128]; + for (size_t i = 0; i < 128; i++) { + const float x = 2.0f * (float)i / 127.0f; + const float pi_x = 3.14159265358979f * x; + const float y = std::abs(x) < FLT_EPSILON + ? 1.0f + : (std::sin(pi_x) / pi_x) * (std::sin(0.5f * pi_x) / (0.5f * pi_x)); + weights[i] = (int16_t)std::lround(y * 32767.0f); + } + memcpy(mapped + lut_at, weights, sizeof weights); + } + flush_mapped(g.uniforms_memory, g.frame_stride * kUniformFrames); + + const uint32_t p = g.parity, q = p ^ 1u; + + // What the game's draws wrote has to be visible, and our images need their first layout. + { + memory_barrier(cmd, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, + VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT | + VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT | + VK_ACCESS_2_SHADER_WRITE_BIT | VK_ACCESS_2_TRANSFER_WRITE_BIT, + VK_PIPELINE_STAGE_2_TRANSFER_BIT | VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, + VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_SHADER_WRITE_BIT | + VK_ACCESS_2_TRANSFER_WRITE_BIT); + } + std::vector all{&g.farthest_depth, &g.shading_change, &g.new_locks, &g.spd_mips, + &g.farthest_depth_mip1, &g.dilated_motion_vectors, &g.dilated_depth, + &g.previous_nearest_depth, &g.dilated_reactive_masks, &g.frame_info, + &g.spd_atomic, &g.lanczos_lut, &g.default_reactive, &g.output}; + for (size_t i = 0; i < 2; i++) { + all.push_back(&g.accumulation[i]); + all.push_back(&g.luma[i]); + all.push_back(&g.luma_history[i]); + all.push_back(&g.internal_upscaled[i]); + } + if (first) { + std::vector to_general; + to_general.reserve(all.size()); + for (const Image* t : all) { + VkImageMemoryBarrier2 b{VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2}; + b.srcStageMask = VK_PIPELINE_STAGE_2_NONE; + b.dstStageMask = VK_PIPELINE_STAGE_2_TRANSFER_BIT; + b.dstAccessMask = VK_ACCESS_2_TRANSFER_WRITE_BIT; + b.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; + b.newLayout = VK_IMAGE_LAYOUT_GENERAL; + b.srcQueueFamilyIndex = b.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + b.image = t->image; + b.subresourceRange = ALL_LEVELS; + to_general.push_back(b); + } + VkDependencyInfo di{VK_STRUCTURE_TYPE_DEPENDENCY_INFO}; + di.imageMemoryBarrierCount = (uint32_t)to_general.size(); + di.pImageMemoryBarriers = to_general.data(); + vkCmdPipelineBarrier2(cmd, &di); + const VkClearColorValue zero{}; + for (const Image* t : all) { + vkCmdClearColorImage(cmd, t->image, VK_IMAGE_LAYOUT_GENERAL, &zero, 1, &ALL_LEVELS); + } + } + if (!g.lut_uploaded) { + g.lut_uploaded = true; + VkBufferImageCopy copy{}; + copy.bufferOffset = base + lut_at; + copy.imageSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}; + copy.imageExtent = {128, 1, 1}; + vkCmdCopyBufferToImage(cmd, g.uniforms, g.lanczos_lut.image, VK_IMAGE_LAYOUT_GENERAL, 1, ©); + } + // Per frame: the nearest-depth scratch, the SPD counter and its mips; the history on a reset. + const VkClearColorValue zero{}; + for (const Image* t : {&g.previous_nearest_depth, &g.spd_atomic, &g.spd_mips}) { + vkCmdClearColorImage(cmd, t->image, VK_IMAGE_LAYOUT_GENERAL, &zero, 1, &ALL_LEVELS); + } + if (reset) { + vkCmdClearColorImage(cmd, g.accumulation[p].image, VK_IMAGE_LAYOUT_GENERAL, &zero, 1, &ALL_LEVELS); + VkClearColorValue info{}; + info.float32[0] = -1.0f, info.float32[1] = 1.0f; + vkCmdClearColorImage(cmd, g.frame_info.image, VK_IMAGE_LAYOUT_GENERAL, &info, 1, &ALL_LEVELS); + } + { + memory_barrier(cmd, VK_PIPELINE_STAGE_2_TRANSFER_BIT, VK_ACCESS_2_TRANSFER_WRITE_BIT, + VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, + VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_SHADER_WRITE_BIT); + } + + const auto tex = [](const Image& t) { return Resource{t.view}; }; + const auto mip = [](uint32_t level) { + const size_t n = g.spd_mips.levels.size(); + return Resource{g.spd_mips.levels[std::min(level, n ? n - 1 : 0)]}; + }; + const Resource color{in.color}, depth{in.depth}, motion{in.motion}; + const Resource exposure = tex(g.frame_info); // (FSR computes its own exposure) + const Resource current_luma = tex(g.luma[p]); + const Resource cb_fsr{VK_NULL_HANDLE, g.uniforms, base, g.slot_fsr}; + const Resource cb_spd{VK_NULL_HANDLE, g.uniforms, base + g.slot_fsr, g.slot_spd}; + const Resource cb_rcas{VK_NULL_HANDLE, g.uniforms, base + g.slot_fsr + g.slot_spd, g.slot_rcas}; + const auto groups = [](int32_t size, uint32_t tile) { + return ((uint32_t)std::max(1, size) + tile - 1) / tile; + }; + const auto run = [&](size_t pass, std::initializer_list res, uint32_t gx, uint32_t gy) { + record_pass(cmd, g.passes[pass], PASSES[pass], res.begin(), res.size(), gx, gy); + }; + + run(0, {motion, depth, color, tex(g.dilated_motion_vectors), tex(g.dilated_depth), + tex(g.previous_nearest_depth), tex(g.farthest_depth), current_luma, cb_fsr}, + groups(rw, 8), groups(rh, 8)); + run(1, {current_luma, tex(g.farthest_depth), tex(g.spd_atomic), tex(g.frame_info), mip(0), mip(1), + mip(2), mip(3), mip(4), mip(5), tex(g.farthest_depth_mip1), cb_fsr, cb_spd}, + spd_x, spd_y); + run(3, {current_luma, tex(g.luma[q]), tex(g.dilated_motion_vectors), exposure, tex(g.spd_atomic), + mip(0), mip(1), mip(2), mip(3), mip(4), mip(5), cb_fsr, cb_spd}, + spd_x, spd_y); + run(5, {tex(g.spd_mips), tex(g.shading_change), cb_fsr}, groups(rw / 2, 8), groups(rh / 2, 8)); + run(6, {tex(g.previous_nearest_depth), tex(g.dilated_motion_vectors), tex(g.dilated_depth), + tex(g.default_reactive), tex(g.default_reactive), tex(g.accumulation[p]), + tex(g.shading_change), current_luma, exposure, tex(g.dilated_reactive_masks), + tex(g.new_locks), tex(g.accumulation[q]), cb_fsr}, + groups(rw, 8), groups(rh, 8)); + run(7, {exposure, tex(g.dilated_reactive_masks), tex(g.dilated_motion_vectors), tex(g.frame_info), + tex(g.luma_history[p]), tex(g.farthest_depth_mip1), current_luma, tex(g.luma_history[q]), + tex(g.farthest_depth), cb_fsr}, + groups(rw, 8), groups(rh, 8)); + run(in.sharpen ? 9 : 8, + {exposure, tex(g.dilated_reactive_masks), tex(g.dilated_motion_vectors), + tex(g.internal_upscaled[p]), tex(g.lanczos_lut), tex(g.farthest_depth_mip1), current_luma, + tex(g.farthest_depth), color, tex(g.internal_upscaled[q]), tex(g.output), tex(g.new_locks), + cb_fsr}, + groups(uw, 8), groups(uh, 8)); + if (in.sharpen) { + run(10, {exposure, tex(g.internal_upscaled[q]), tex(g.output), cb_fsr, cb_rcas}, + groups(uw, 16), groups(uh, 16)); + } + { + memory_barrier(cmd, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_WRITE_BIT, + VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, + VK_ACCESS_2_SHADER_READ_BIT); + } + g.parity = q; + return true; +} + VkImage output_image() { return g.output.image; } @@ -306,6 +689,9 @@ void shutdown() { drop_image(g.internal_upscaled[i]); } g.render_width = g.render_height = g.upscale_width = g.upscale_height = 0; + g.first_evaluation = true; + g.lut_uploaded = false; + g.parity = 0; } } // namespace mkwvk::fsr3 diff --git a/gpu/vk/vk_fsr3.h b/gpu/vk/vk_fsr3.h index a8aee5724..97a977367 100644 --- a/gpu/vk/vk_fsr3.h +++ b/gpu/vk/vk_fsr3.h @@ -12,6 +12,29 @@ namespace mkwvk::fsr3 { +/// One evaluation's inputs. Every field is the SDK's meaning, not a guess: the colour is HDR and +/// jittered at the render size, the depth is reversed, the motion points at the previous frame, and +/// the jitter is in render pixels (input texel k is sampled at k + 0.5 - jitter). +struct Inputs { + VkImageView color = VK_NULL_HANDLE; + VkImageView depth = VK_NULL_HANDLE; + VkImageView motion = VK_NULL_HANDLE; + uint32_t render_width = 0, render_height = 0; + uint32_t upscale_width = 0, upscale_height = 0; + float jitter[2]{}; + /// Turns a motion vector into render pixels (the render size, for vectors in UV). + float motion_scale[2]{1.0f, 1.0f}; + /// The game's camera, which device_to_view_depth and tan_half_fov are built from. Both must be + /// real: a guessed near plane or field of view makes disocclusion wrong in a way that looks + /// like a renderer bug. + float near_plane = 0.0f; + float fov_y = 0.0f; + float frame_time_ms = 16.667f; + bool reset = false; + bool sharpen = false; + float sharpness = 0.0f; ///< 0 to 1 as FSR takes it +}; + /// Whether this device can run the passes at all: push descriptors, and every storage format the /// SDK's internal images need. Asked once; the answer is cached. [[nodiscard]] bool supported(); @@ -22,6 +45,10 @@ namespace mkwvk::fsr3 { [[nodiscard]] bool prepare(uint32_t render_width, uint32_t render_height, uint32_t upscale_width, uint32_t upscale_height); +/// Records one evaluation. False when the inputs are not usable, which leaves the caller to keep +/// whatever it would otherwise have done. +[[nodiscard]] bool upscale(VkCommandBuffer cmd, const Inputs& in); + /// The image an evaluation resolves into: RGBA16F at the upscale size, or null before prepare(). [[nodiscard]] VkImage output_image(); [[nodiscard]] VkImageView output_view(); From 853cfe379c5bbc215538c57ca7a01a9f96dc4af5 Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 16:53:15 -0600 Subject: [PATCH 010/119] fix: the game's network takes one texture, so it is not a temporal upscaler A warmed run reached gameplay and the per-network log answered the question this series was built on: vk: network fd029a317a9a4b94: dispatch 32x36x1, 1 textures 1 images: 0:1536x864; no upscaler inputs One sampled texture, one written image, nothing else. No motion, no depth. All eleven networks in the game are that shape: at most two sampled textures, and never a motion or depth target among them. So OoT's upscaler is a single-image neural upscaler, not a motion-vector temporal one, and docs/upscaling.md's premise -- that a vendor upscaler takes that dispatch's place -- was wrong. FSR 3.1 and DLSS Super Resolution are temporal. They need motion and depth, and this dispatch is never handed either, so temporal_possible() refuses at it and will keep refusing however a backend is wired. The doc now says so above the section it contradicts. The gate doing exactly that is the one good outcome: it refused rather than handing FSR whichever texture happened to be bound, which is the failure the descriptor-order commit was about. What the run does confirm is that the opportunity is real. The input is 1536x864 against a 2048x1152 scene, so the game already renders the 3D at 75% and upscales it. The inputs for a temporal upscaler have to be assembled instead of taken: depth exists on the scene passes and has to be carried to the resolve, and motion exists nowhere as a target and has to be derived from the camera, which ghosts on anything moving by itself. That is #577's integration point, and this is the argument for it. Also in here, since they were written before the run: FSR is wired to the seam behind RX_VK_FSR=1 (it cannot fire, by the above, but the path is complete and compiles), and the camera is no longer a precondition. The reference implementation documents that device_to_view_depth only scales FSR's disocclusion thresholds and uses a typical near plane and field of view, so refusing without the real camera was stricter than the evidence warrants. Builds clean with RX_VK_ONLY=1, 0 warnings. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- docs/upscaling.md | 37 ++++++++++++++++++++++++++++++++++++- gpu/vk/vk_draw.cpp | 32 ++++++++++++++++++++++++++++++++ gpu/vk/vk_fsr3.cpp | 4 +--- gpu/vk/vk_fsr3.h | 10 +++++----- 4 files changed, 74 insertions(+), 9 deletions(-) diff --git a/docs/upscaling.md b/docs/upscaling.md index 24282ec0d..d22a8d0d3 100644 --- a/docs/upscaling.md +++ b/docs/upscaling.md @@ -27,7 +27,42 @@ the composited frame, after the HUD. A temporal upscaler there has no depth, no baked into its history. That is why the existing interpolator block-matches: it has nothing better to work from. -## The integration point +## Correction: the game's network is not a temporal upscaler + +**A run settles this, and it contradicts the section above.** With the per-network log reading the +contract, the gameplay network reports: + +``` +vk: network fd029a317a9a4b94: dispatch 32x36x1, 1 textures 1 images: 0:1536x864; no upscaler inputs +``` + +**One sampled texture, one written image, and nothing else.** No motion, no depth. Every one of the +eleven networks in the game is the same shape: at most two sampled textures, never a motion or depth +target among them. + +So OoT's upscaler is a *single-image* neural upscaler, not a motion-vector temporal one, and the +premise this document started from — that a vendor upscaler takes that dispatch's place — is wrong. +FSR 3.1 and DLSS Super Resolution are temporal: they need motion and depth, and this dispatch is +never handed either. `temporal_possible()` therefore refuses at it, correctly, and will keep +refusing however the backend is wired. + +What the run does confirm is that the opportunity is real: the input is **1536x864** against a +2048x1152 scene, so the game already renders the 3D at 75% and upscales. There is a genuine upscale +to improve on. + +What it means is that the inputs have to be **assembled** rather than taken: + +- **Depth** exists — the census found D32 depth attached to the scene passes — but it has to be + carried to the resolve rather than read off this dispatch. +- **Motion** does not exist anywhere in the frame as a target. It has to be derived, and the only + cheap source is the camera, which gives camera-only motion: correct for a still world, ghosting + on anything that moves by itself. + +That is precisely what #577 does, at the final resolve rather than at this dispatch, and this +finding is the argument for its integration point over the one below. The contract, the census and +the FSR passes stand; where they are plugged in has to change. + +## The integration point (superseded by the correction above) `taau_stand_in()` in `gpu/vk/vk_draw.cpp` already recognizes the network's dispatch by program key and substitutes its own resolve. A vendor upscaler replaces the same dispatch, under the same diff --git a/gpu/vk/vk_draw.cpp b/gpu/vk/vk_draw.cpp index 1de445c13..3621a49d4 100644 --- a/gpu/vk/vk_draw.cpp +++ b/gpu/vk/vk_draw.cpp @@ -41,6 +41,7 @@ #include "shaders/taau_upscale_comp_spv.h" #include "upscale_format.h" #include "upscale_seam.h" +#include "vk_fsr3.h" #include "shaders/movie_upscale_comp_spv.h" #include "shader_recompiler/backend/spirv/mma_layout.h" #include "vk_work.h" // (after the others: counts the commands that do GPU work, for full_barrier) @@ -5492,6 +5493,37 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { why ? "could not be given this: " : "could be given this", why ? why : ""); } } + // (hookshot) FSR 3.1 in the dispatch's place, opt-in with RX_VK_FSR=1 and only where the + // contract holds. Its own RGBA16F output is blitted into the game's target, which is the + // format conversion the game's network would have done itself. + static const bool fsr_wanted = getenv("RX_VK_FSR") && atoi(getenv("RX_VK_FSR")) != 0; + if (fsr_wanted && upscale::temporal_possible(req) && fsr3::supported()) { + fsr3::Inputs fi; + fi.color = dw.imgs[req.colour_binding].imageView; + fi.depth = dw.imgs[req.inputs.depth].imageView; + fi.motion = dw.imgs[req.inputs.motion].imageView; + fi.render_width = req.inputs.render_width, fi.render_height = req.inputs.render_height; + fi.upscale_width = req.output_width, fi.upscale_height = req.output_height; + fi.motion_scale[0] = (float)req.inputs.render_width; + fi.motion_scale[1] = (float)req.inputs.render_height; + // (the jitter the game's own network used is not extracted yet, so this says no sub-pixel + // offset: the picture is a plumbing check, not FSR at its quality. Logged once so a report + // of a soft image is not mistaken for FSR behaving badly) + if (fsr3::upscale(cmd, fi)) { + static std::atomic told{0}; + if (told++ == 0) + logf("vk: fsr3 standing in for %016llx (jitter not extracted yet: the image is a " + "plumbing check, not FSR's quality)", (unsigned long long)p.key); + VkImageBlit blit{}; + blit.srcSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}; + blit.srcOffsets[1] = {(int32_t)req.output_width, (int32_t)req.output_height, 1}; + blit.dstSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, level, 0, 1}; + blit.dstOffsets[1] = {(int32_t)req.output_width, (int32_t)req.output_height, 1}; + vkCmdBlitImage(cmd, fsr3::output_image(), VK_IMAGE_LAYOUT_GENERAL, out->image, + VK_IMAGE_LAYOUT_GENERAL, 1, &blit, VK_FILTER_NEAREST); + return true; + } + } return typed_upscale(cmd, dw.imgs[0].imageView, dw.imgs[ntex].imageView, out, level, p.key, keys, true); } diff --git a/gpu/vk/vk_fsr3.cpp b/gpu/vk/vk_fsr3.cpp index 099b35b69..427ab7cb7 100644 --- a/gpu/vk/vk_fsr3.cpp +++ b/gpu/vk/vk_fsr3.cpp @@ -453,9 +453,7 @@ bool prepare(uint32_t render_width, uint32_t render_height, uint32_t upscale_wid bool upscale(VkCommandBuffer cmd, const Inputs& in) { if (!in.color || !in.depth || !in.motion) return false; - // (a guessed camera makes disocclusion wrong in a way that reads as a renderer bug, so a - // missing one is a refusal: docs/upscaling.md) - if (!(in.near_plane > 0.0f) || !(in.fov_y > 0.0f)) return false; + if (!(in.near_plane > 0.0f) || !(in.fov_y > 0.0f)) return false; // (Inputs defaults them) if (!prepare(in.render_width, in.render_height, in.upscale_width, in.upscale_height)) return false; const bool first = g.first_evaluation; diff --git a/gpu/vk/vk_fsr3.h b/gpu/vk/vk_fsr3.h index 97a977367..3638eb6fb 100644 --- a/gpu/vk/vk_fsr3.h +++ b/gpu/vk/vk_fsr3.h @@ -24,11 +24,11 @@ struct Inputs { float jitter[2]{}; /// Turns a motion vector into render pixels (the render size, for vectors in UV). float motion_scale[2]{1.0f, 1.0f}; - /// The game's camera, which device_to_view_depth and tan_half_fov are built from. Both must be - /// real: a guessed near plane or field of view makes disocclusion wrong in a way that looks - /// like a renderer bug. - float near_plane = 0.0f; - float fov_y = 0.0f; + /// The game's camera, which device_to_view_depth and tan_half_fov are built from. That + /// conversion only scales FSR's disocclusion thresholds, so a typical camera is usable and is + /// what these default to; supplying the real one is better but is not a precondition. + float near_plane = 0.1f; + float fov_y = 60.0f * 3.14159265358979f / 180.0f; float frame_time_ms = 16.667f; bool reset = false; bool sharpen = false; From 52bfca258a224177b5f6b3ec26ba5b111238638b Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 16:59:22 -0600 Subject: [PATCH 011/119] docs: the camera's field layout, read out of sead's projection update The previous commit left the camera as a typical value, which is what the reference implementation settles for because DLSS hands it none. It does not have to be a guess here: sead's perspective projection carries it, and its matrix update is already a patch site (nx2/oot_wide.py, main+0x3485cc0, the whole function f_834a5cc0). Reading that function's lifted C gives the layout, each offset from what the code does with it: +0x98, +0x9C the near and far planes, loaded as a pair and swapped by the byte at +0x0A before their difference is taken, so that byte is a reversed-depth flag +0xAC tan(fovy / 2): 1.0f / it becomes m11, which is 1 / tan(fovy/2), so the field of view is 2 * atan(it) +0xB0 the aspect ratio, divided into m00 (and where the ultrawide patch stores its own) +0xB4, +0xB8 the projection's offsets, each doubled into m02 and m12 x0 is the projection object throughout that function and x1 is the 4x4 it writes, so one injected block there can publish the near plane, the far plane and the field of view to host globals the renderer reads, the way hos_wide_ratio already travels the other way. It is also the same data camera-derived motion vectors need, which is what the integration point this series is moving to requires. Docs only. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- docs/upscaling.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/docs/upscaling.md b/docs/upscaling.md index d22a8d0d3..d29a1c785 100644 --- a/docs/upscaling.md +++ b/docs/upscaling.md @@ -73,6 +73,32 @@ The replay rules in [design notes, section 4](design.md#4-the-lessons-from-mkw-a unchanged. In particular the inputs are read from the submitted dispatch's own descriptors during ordered replay, never from live guest memory. +## The camera, read out of the game rather than guessed + +FSR's `device_to_view_depth` and `tan_half_fov` want the near plane and the vertical field of view, +and camera-derived motion wants the view-projection. Both are available: sead's perspective +projection object carries them, and its matrix update is already a patch site (`nx2/oot_wide.py`, +main+`0x3485cc0`, which is the whole function `f_834a5cc0`). + +Reading that function's lifted C gives the layout, each offset from what the code does with it +rather than from a guess: + +| offset | what it is | how the code shows it | +|---|---|---| +| `+0x98`, `+0x9C` | the near and far planes | loaded as a pair (`ldp s4, s3, [x0, #0x98]`), then **swapped by the byte at `+0x0A`** — a reversed-depth flag — before their difference is taken | +| `+0x0A` | which way round the depth runs | selects between the two above | +| `+0xAC` | `tan(fovy / 2)` | `1.0f / it` becomes the matrix's m11, which is `1 / tan(fovy/2)`. So the field of view is `2 * atan(it)` | +| `+0xB0` | the aspect ratio | divided into m00, and the ultrawide patch stores its own ratio back here | +| `+0xB4`, `+0xB8` | the projection's offsets | each doubled into m02 and m12 | + +`x0` is the projection object throughout that function and `x1` is the 4x4 it writes, so one +injected block there can publish the near plane, the far plane and the field of view to host globals +for the renderer to read, the way `hos_wide_ratio` already travels the other way. + +That removes the approximation the reference implementation settles for — it documents using "a +typical near plane and vertical field of view" because DLSS hands it no camera — and it is the same +data camera-derived motion needs. + ## The input contract A temporal upscaler needs the network's own inputs, and it must only run when they are all present and From 8bd7c8d7924addcd82ab188f9cad7fddd554750c Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 17:02:33 -0600 Subject: [PATCH 012/119] feat: publish Ocarina's camera, and make a backend reachable without the stand-in Two fixes that the first run found. **The camera is no longer a typical value.** nx2/oot_camera.py appends a block to sead's perspective projection update (main+0x3485cc0, f_834a5cc0), where x0 is the projection object, that publishes the near plane, the far plane and tan(fovy/2) to host/hos_oot_camera.c. The renderer reads them and gives FSR the real camera; without them the Inputs defaults stand, which only scales FSR's disocclusion thresholds. docs/upscaling.md has how each offset was identified from what the function does with it. The site is shared with oot_wide.py's camera-ratio patch, so this appends to lifter.after rather than replacing it, and lift.py installs the ratio first. Which of +0x98 and +0x9C is the near plane depends on the byte at +0x0A that the function uses to swap them, so rather than decide what that flag means this takes the smaller as the near plane and the larger as the far, and publishes nothing unless both are positive and ordered. **A backend that is not the stand-in has to be reachable without it.** My previous commit put the FSR path inside taau_stand_in, after a guard that returns unless taau_key matches -- and on a card with hardware f16 matrix multiply taau_key defaults to "-", because the real network runs there. So FSR was unreachable on exactly the hardware that can run it. That is the same flaw the doc correction describes, reproduced in code one commit later. RX_VK_FSR=1 now brings the function in on its own, keyed by a list of its own (RX_VK_UPSCALE_KEYS, default the gameplay network) rather than by the stand-in's conditional default, and the stand-in only runs when it was asked for. Builds clean with RX_VK_ONLY=1, 0 warnings. The camera publish needs a full game build to take effect, since it is lifted C and a host global. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- gpu/vk/vk_draw.cpp | 44 ++++++++++++++++++++++++++++++++++--- host/hos_oot_camera.c | 27 +++++++++++++++++++++++ nx2/lift.py | 2 ++ nx2/oot_camera.py | 51 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 121 insertions(+), 3 deletions(-) create mode 100644 host/hos_oot_camera.c create mode 100644 nx2/oot_camera.py diff --git a/gpu/vk/vk_draw.cpp b/gpu/vk/vk_draw.cpp index 3621a49d4..8ddd064ea 100644 --- a/gpu/vk/vk_draw.cpp +++ b/gpu/vk/vk_draw.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -5286,6 +5287,27 @@ bool upscale_stub(VkCommandBuffer cmd, const NvnState& s, uint64_t key) { return true; } +/// (host/hos_oot_camera.c: tan(fovy/2) and the planes sead's projection published, 0 when nothing +/// has, which leaves a backend on its own defaults) +extern "C" float hos_oot_camera(float* near_plane, float* far_plane); + +/// (hookshot) Whether a program is one an upscaler backend may be given, by key prefix and +/// independent of whether the stand-in wants it: RX_VK_UPSCALE_KEYS, default the gameplay TAAU +/// network. taau_key's own default turns itself off where the card can run the real network, which +/// is the wrong condition for a backend that is meant to replace it. +static bool upscale_trace_key(uint64_t key) { + const char* keys = getenv("RX_VK_UPSCALE_KEYS") ? getenv("RX_VK_UPSCALE_KEYS") : "fd029a317a9a4b94"; + char hex[24]; + snprintf(hex, sizeof hex, "%016llx", (unsigned long long)key); + for (const char* q = keys; *q;) { + const char* e = q; + while (*e && *e != ',') e++; + if (e > q && *q != '-' && !strncmp(hex, q, (size_t)(e - q))) return true; + q = *e ? e + 1 : e; + } + return false; +} + /// (hookshot) The dispatch's sampled textures in descriptor order, in the terms of the upscaler input contract /// (gpu/vk/upscale_contract.h). Resolved exactly as build_descriptors resolves them, including the storage-pointer /// guard, so index i here is dw.imgs[i] -- the descriptor a backend is actually handed. @@ -5458,7 +5480,14 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { avail.stand_in_wanted = taau_key(p.key); upscale::Request req; req.program_key = p.key; - if (upscale::choose(avail, req) != upscale::Backend::StandIn || p.stages.empty()) return false; + // (hookshot) A backend that is not the stand-in has to be reachable without it. On a card with + // hardware f16 matrix multiply taau_key defaults to "-", so the network runs as itself and the + // stand-in never does; gating everything on it would have made FSR unreachable on exactly the + // hardware that can run it. RX_VK_FSR=1 therefore brings us in here on its own. + static const bool fsr_wanted = getenv("RX_VK_FSR") && atoi(getenv("RX_VK_FSR")) != 0; + const bool fsr_here = fsr_wanted && avail.push_descriptor && upscale_trace_key(p.key); + if (p.stages.empty()) return false; + if (upscale::choose(avail, req) != upscale::Backend::StandIn && !fsr_here) return false; const Stage& st = p.stages[0]; if (st.info.texture_descriptors.empty() || st.info.image_descriptors.empty()) return false; size_t ntex = 0; // (build_descriptors' image infos: the textures', then the images') @@ -5496,8 +5525,7 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { // (hookshot) FSR 3.1 in the dispatch's place, opt-in with RX_VK_FSR=1 and only where the // contract holds. Its own RGBA16F output is blitted into the game's target, which is the // format conversion the game's network would have done itself. - static const bool fsr_wanted = getenv("RX_VK_FSR") && atoi(getenv("RX_VK_FSR")) != 0; - if (fsr_wanted && upscale::temporal_possible(req) && fsr3::supported()) { + if (fsr_here && upscale::temporal_possible(req) && fsr3::supported()) { fsr3::Inputs fi; fi.color = dw.imgs[req.colour_binding].imageView; fi.depth = dw.imgs[req.inputs.depth].imageView; @@ -5506,6 +5534,15 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { fi.upscale_width = req.output_width, fi.upscale_height = req.output_height; fi.motion_scale[0] = (float)req.inputs.render_width; fi.motion_scale[1] = (float)req.inputs.render_height; + { // (the game's own camera where the patch published it: nx2/oot_camera.py. Without it + // the Inputs defaults stand, which only scales FSR's disocclusion thresholds) + float near_plane = 0.0f, far_plane = 0.0f; + const float tan_half = hos_oot_camera(&near_plane, &far_plane); + if (tan_half > 0.0f && near_plane > 0.0f) { + fi.near_plane = near_plane; + fi.fov_y = 2.0f * std::atan(tan_half); + } + } // (the jitter the game's own network used is not extracted yet, so this says no sub-pixel // offset: the picture is a plumbing check, not FSR at its quality. Logged once so a report // of a soft image is not mistaken for FSR behaving badly) @@ -5524,6 +5561,7 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { return true; } } + if (!avail.stand_in_wanted) return false; // (we came in for FSR, which did not take it) return typed_upscale(cmd, dw.imgs[0].imageView, dw.imgs[ntex].imageView, out, level, p.key, keys, true); } diff --git a/host/hos_oot_camera.c b/host/hos_oot_camera.c new file mode 100644 index 000000000..57c331fb1 --- /dev/null +++ b/host/hos_oot_camera.c @@ -0,0 +1,27 @@ +/* (hookshot) Ocarina's camera, published by the lifted code so the renderer can read it. + * + * sead's perspective projection carries the near and far planes and the field of view, and + * nx2/oot_camera.py injects a block into its matrix update (main+0x3485cc0, f_834a5cc0) that writes + * them here. The renderer wants them for a temporal upscaler: FSR builds device_to_view_depth and + * tan_half_fov from the near plane and the field of view, and camera-derived motion needs the same + * projection. docs/upscaling.md has the field layout and how each offset was identified. + * + * Everything stays 0 until the game updates a projection, and hos_oot_camera_valid stays 0 with it, + * so a reader that checks it gets the renderer's own defaults on another game version where the + * patch site is left out. */ +#include + +volatile float hos_oot_cam_near = 0.0f; +volatile float hos_oot_cam_far = 0.0f; +volatile float hos_oot_cam_tan_half_fov = 0.0f; +volatile int hos_oot_camera_valid = 0; + +/* The renderer's side: the field of view in radians, or 0 when nothing has been published. + tan_half_fov is what the game stores (1 / it becomes the projection's m11), so the angle is + twice its arc tangent. */ +float hos_oot_camera(float *near_plane, float *far_plane) { + if (!hos_oot_camera_valid) return 0.0f; + if (near_plane) *near_plane = hos_oot_cam_near; + if (far_plane) *far_plane = hos_oot_cam_far; + return hos_oot_cam_tan_half_fov; +} diff --git a/nx2/lift.py b/nx2/lift.py index 1ffd043cd..b2e837b4a 100644 --- a/nx2/lift.py +++ b/nx2/lift.py @@ -158,6 +158,8 @@ def main(): if a.standalone: # (hookshot) widescreen and ultrawide: C after a few of the game's instructions import oot_wide oot_wide.install(L, img) + import oot_camera # (after oot_wide: it appends to the same site) + oot_camera.install(L, img) import oot_occlusion # (no occlusion queries when HOOKSHOT_OCCLUSION_OFF=1: Fritchii's Occlusion Off) oot_occlusion.install(L, img) L.discover(max_insns=a.max_func) diff --git a/nx2/oot_camera.py b/nx2/oot_camera.py new file mode 100644 index 000000000..b5ac10fc1 --- /dev/null +++ b/nx2/oot_camera.py @@ -0,0 +1,51 @@ +"""Ocarina's camera, published from sead's perspective projection so the renderer can read it. + +The projection's matrix update (main+0x3485cc0, the whole function f_834a5cc0) has the object in x0 +and has just loaded tan(fovy/2) and the aspect ratio from it. This appends a block there that also +reads the near and far planes and writes all three to host globals (host/hos_oot_camera.c), which a +temporal upscaler needs: FSR builds device_to_view_depth and tan_half_fov from the near plane and +the field of view, and camera-derived motion needs the same projection. + +The field layout, and how each offset was identified from what the function does with it, is in +docs/upscaling.md. The site is shared with nx2/oot_wide.py's camera-ratio patch, so this appends to +whatever is already there rather than replacing it; lift.py installs the ratio first. + +Which of +0x98 and +0x9C is the near plane depends on the byte at +0x0A, which the function uses to +swap them before taking their difference. Rather than decide what that flag means, this takes the +smaller of the two as the near plane and the larger as the far, and publishes nothing unless both +are positive and ordered. A projection with a near plane behind the eye is not one to hand an +upscaler. +""" + +MAIN = 0x80020000 +SITE = 0x3485cc0 +WORD = 0x2d558400 # (ldp s0, s1, [x0, #0xac]: the same word nx2/oot_wide.py checks) + +PUBLISH = ( + "{ extern volatile float hos_oot_cam_near, hos_oot_cam_far, hos_oot_cam_tan_half_fov; " + "extern volatile int hos_oot_camera_valid; const uint64_t _cp = c->x[0]; " + "uint32_t _c0 = (uint32_t)recomp_load32(c, _cp + 0x98), _c1 = (uint32_t)recomp_load32(c, _cp + 0x9c), " + "_ct = (uint32_t)recomp_load32(c, _cp + 0xac); float _f0, _f1, _ft; " + "memcpy(&_f0, &_c0, 4); memcpy(&_f1, &_c1, 4); memcpy(&_ft, &_ct, 4); " + "{ const float _nr = _f0 < _f1 ? _f0 : _f1, _fr = _f0 < _f1 ? _f1 : _f0; " + "if (_nr > 0.0f && _fr > _nr && _ft > 0.0f) { hos_oot_cam_near = _nr; hos_oot_cam_far = _fr; " + "hos_oot_cam_tan_half_fov = _ft; hos_oot_camera_valid = 1; } } }" + " /* (nx2/oot_camera.py: the camera a temporal upscaler needs) */" +) + + +def install(lifter, img): + """Appends the publish to the projection update. 0 when the site's word differs (another game + version), which leaves the renderer on its own defaults.""" + pc = MAIN + SITE + try: + have = img.word(pc) + except Exception: + have = None + if have != WORD: + print("camera: main+%#x holds %s, not %08x: left out" + % (SITE, "?" if have is None else "%08x" % have, WORD)) + return 0 + lifter.after[pc] = lifter.after.get(pc, "") + "\n" + PUBLISH + print("camera: the projection update publishes the near plane, far plane and field of view") + return 1 From 29c7cbe508bc8a7ede6f488f1de315357bfa1f10 Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 17:08:17 -0600 Subject: [PATCH 013/119] feat: derive camera motion from the scene's depth, and keep that depth The two inputs the game never hands its upscaler, assembled instead of taken. **The depth.** targets() now keeps the depth target bound with a colour target, the largest one seen, so a shadow map or a quarter-resolution effect pass does not displace the one the scene was drawn with. That is the only depth there is: the gameplay network samples one colour texture and nothing else. **The motion.** gpu/vk/shaders/camera_motion.comp reconstructs each pixel's world position from the reversed device depth with the inverse of this frame's view projection, projects it with the previous frame's, and writes where it was in render pixels, which is what FSR 3.1 is compiled for (LOW_RESOLUTION_MOTION_VECTORS=1, unjittered). Far-plane pixels, a degenerate reconstruction and anything behind the previous camera all get zero motion rather than a vector from nonsense. This is camera-only by construction. It is right for a world that does not move, and a character, foliage or a particle ghosts, because its own motion is not in the depth buffer. That belongs in whatever setting turns it on, not only in a comment. The host side makes the pipeline and an R16G16F target, inverts the matrix in doubles and refuses a singular one, and stands this frame's matrix in for the previous one on the first frame and after a reset, which makes the motion exactly zero rather than arbitrary. **What is still missing is the matrix.** sead's projection update gives the projection alone; a temporal upscaler reprojects with view * projection. Rather than guess which offset of which object holds the view, nx2/oot_camera.py now also publishes the guest addresses of the projection object and of the 4x4 it writes, and HOS_CAMERA_DUMP=1 logs a window of floats around both so the matrix can be identified from what it contains. Guest addresses only. The seam's log also reports the camera it was given and the scene depth it found, so one run says whether both arrived. Builds clean with RX_VK_ONLY=1, 0 warnings; the shader compiles and passes spirv-val. Nothing calls the motion pass yet. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- gpu/vk/shaders/camera_motion.comp | 60 +++++++ gpu/vk/shaders/camera_motion_comp_spv.h | 125 ++++++++++++++ gpu/vk/vk_camera_motion.cpp | 217 ++++++++++++++++++++++++ gpu/vk/vk_camera_motion.h | 32 ++++ gpu/vk/vk_draw.cpp | 27 +++ host/hos_oot_camera.c | 34 ++++ host/nn_vi.c | 2 + nx2/oot_camera.py | 9 +- 8 files changed, 505 insertions(+), 1 deletion(-) create mode 100644 gpu/vk/shaders/camera_motion.comp create mode 100644 gpu/vk/shaders/camera_motion_comp_spv.h create mode 100644 gpu/vk/vk_camera_motion.cpp create mode 100644 gpu/vk/vk_camera_motion.h diff --git a/gpu/vk/shaders/camera_motion.comp b/gpu/vk/shaders/camera_motion.comp new file mode 100644 index 000000000..89e05d297 --- /dev/null +++ b/gpu/vk/shaders/camera_motion.comp @@ -0,0 +1,60 @@ +#version 460 core +// (hookshot) Camera-only motion vectors from depth, for a temporal upscaler. +// +// Ocarina hands its own upscaler one colour texture and nothing else, so motion has to be derived +// rather than taken (docs/upscaling.md). For each pixel this reconstructs the world position from +// the reversed device depth with the inverse of this frame's view-projection, projects it with the +// previous frame's, and writes where it was, in render pixels, pointing at the previous frame. +// +// This is camera-only by construction: it is right for a world that does not move, and anything +// moving by itself -- a character, foliage, a particle -- ghosts, because its own motion is not in +// the depth buffer. That limit belongs in the setting that turns it on, not in a comment nobody +// reads. +layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in; + +layout(binding = 0) uniform texture2D in_depth; +layout(binding = 1, rg16f) uniform writeonly image2D out_motion; +layout(binding = 1000) uniform sampler point_clamp; + +layout(push_constant) uniform Push { + mat4 inverse_view_projection; // this frame's, inverted + mat4 previous_view_projection; // the frame before's + ivec2 render_size; + // The depth value that means "nothing here". With reversed depth the far plane is 0, and a + // pixel at the far plane has no position to reproject, so it gets zero motion rather than a + // vector derived from a degenerate reconstruction. + float far_depth; + float pad; +} push; + +void main() { + const ivec2 at = ivec2(gl_GlobalInvocationID.xy); + if (any(greaterThanEqual(at, push.render_size))) { + return; + } + const float depth = texelFetch(sampler2D(in_depth, point_clamp), at, 0).r; + if (depth == push.far_depth) { + imageStore(out_motion, at, vec4(0.0)); + return; + } + // The pixel's centre in clip space. Vulkan's y runs down the screen, so it is flipped here and + // flipped back below; getting that wrong gives motion that is right in x and inverted in y, + // which looks like a correct upscaler with vertical smearing. + const vec2 uv = (vec2(at) + 0.5) / vec2(push.render_size); + const vec4 clip = vec4(uv.x * 2.0 - 1.0, 1.0 - uv.y * 2.0, depth, 1.0); + const vec4 world = push.inverse_view_projection * clip; + if (world.w == 0.0) { + imageStore(out_motion, at, vec4(0.0)); + return; + } + const vec4 previous = push.previous_view_projection * (world / world.w); + if (previous.w <= 0.0) { // (behind the previous camera: no on-screen history to point at) + imageStore(out_motion, at, vec4(0.0)); + return; + } + const vec2 previous_ndc = previous.xy / previous.w; + const vec2 previous_uv = vec2(previous_ndc.x * 0.5 + 0.5, 0.5 - previous_ndc.y * 0.5); + // Toward the previous frame, in render pixels, which is what FSR 3.1 is compiled for + // (FFX_FSR3UPSCALER_OPTION_LOW_RESOLUTION_MOTION_VECTORS=1, unjittered). + imageStore(out_motion, at, vec4((previous_uv - uv) * vec2(push.render_size), 0.0, 0.0)); +} diff --git a/gpu/vk/shaders/camera_motion_comp_spv.h b/gpu/vk/shaders/camera_motion_comp_spv.h new file mode 100644 index 000000000..9c801a95c --- /dev/null +++ b/gpu/vk/shaders/camera_motion_comp_spv.h @@ -0,0 +1,125 @@ + // 1116.2.0 + #pragma once +const uint32_t CAMERA_MOTION_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x000000a1,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000031,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e, + 0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x0000000d, + 0x00060010,0x00000004,0x00000011,0x00000008,0x00000008,0x00000001,0x00030003,0x00000002, + 0x000001cc,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00030005,0x00000009,0x00007461, + 0x00080005,0x0000000d,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044, + 0x00040005,0x00000016,0x68737550,0x00000000,0x00090006,0x00000016,0x00000000,0x65766e69, + 0x5f657372,0x77656976,0x6f72705f,0x7463656a,0x006e6f69,0x000a0006,0x00000016,0x00000001, + 0x76657270,0x73756f69,0x6569765f,0x72705f77,0x63656a6f,0x6e6f6974,0x00000000,0x00060006, + 0x00000016,0x00000002,0x646e6572,0x735f7265,0x00657a69,0x00060006,0x00000016,0x00000003, + 0x5f726166,0x74706564,0x00000068,0x00040006,0x00000016,0x00000004,0x00646170,0x00040005, + 0x00000018,0x68737570,0x00000000,0x00040005,0x00000025,0x74706564,0x00000068,0x00050005, + 0x00000028,0x645f6e69,0x68747065,0x00000000,0x00050005,0x0000002c,0x6e696f70,0x6c635f74, + 0x00706d61,0x00050005,0x00000040,0x5f74756f,0x69746f6d,0x00006e6f,0x00030005,0x00000048, + 0x00007675,0x00040005,0x00000053,0x70696c63,0x00000000,0x00040005,0x00000061,0x6c726f77, + 0x00000064,0x00050005,0x00000070,0x76657270,0x73756f69,0x00000000,0x00060005,0x00000082, + 0x76657270,0x73756f69,0x63646e5f,0x00000000,0x00050005,0x00000089,0x76657270,0x73756f69, + 0x0076755f,0x00040047,0x0000000d,0x0000000b,0x0000001c,0x00030047,0x00000016,0x00000002, + 0x00040048,0x00000016,0x00000000,0x00000005,0x00050048,0x00000016,0x00000000,0x00000007, + 0x00000010,0x00050048,0x00000016,0x00000000,0x00000023,0x00000000,0x00040048,0x00000016, + 0x00000001,0x00000005,0x00050048,0x00000016,0x00000001,0x00000007,0x00000010,0x00050048, + 0x00000016,0x00000001,0x00000023,0x00000040,0x00050048,0x00000016,0x00000002,0x00000023, + 0x00000080,0x00050048,0x00000016,0x00000003,0x00000023,0x00000088,0x00050048,0x00000016, + 0x00000004,0x00000023,0x0000008c,0x00040047,0x00000028,0x00000021,0x00000000,0x00040047, + 0x00000028,0x00000022,0x00000000,0x00040047,0x0000002c,0x00000021,0x000003e8,0x00040047, + 0x0000002c,0x00000022,0x00000000,0x00030047,0x00000040,0x00000019,0x00040047,0x00000040, + 0x00000021,0x00000001,0x00040047,0x00000040,0x00000022,0x00000000,0x00040047,0x000000a0, + 0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015, + 0x00000006,0x00000020,0x00000001,0x00040017,0x00000007,0x00000006,0x00000002,0x00040020, + 0x00000008,0x00000007,0x00000007,0x00040015,0x0000000a,0x00000020,0x00000000,0x00040017, + 0x0000000b,0x0000000a,0x00000003,0x00040020,0x0000000c,0x00000001,0x0000000b,0x0004003b, + 0x0000000c,0x0000000d,0x00000001,0x00040017,0x0000000e,0x0000000a,0x00000002,0x00030016, + 0x00000013,0x00000020,0x00040017,0x00000014,0x00000013,0x00000004,0x00040018,0x00000015, + 0x00000014,0x00000004,0x0007001e,0x00000016,0x00000015,0x00000015,0x00000007,0x00000013, + 0x00000013,0x00040020,0x00000017,0x00000009,0x00000016,0x0004003b,0x00000017,0x00000018, + 0x00000009,0x0004002b,0x00000006,0x00000019,0x00000002,0x00040020,0x0000001a,0x00000009, + 0x00000007,0x00020014,0x0000001d,0x00040017,0x0000001e,0x0000001d,0x00000002,0x00040020, + 0x00000024,0x00000007,0x00000013,0x00090019,0x00000026,0x00000013,0x00000001,0x00000000, + 0x00000000,0x00000000,0x00000001,0x00000000,0x00040020,0x00000027,0x00000000,0x00000026, + 0x0004003b,0x00000027,0x00000028,0x00000000,0x0002001a,0x0000002a,0x00040020,0x0000002b, + 0x00000000,0x0000002a,0x0004003b,0x0000002b,0x0000002c,0x00000000,0x0003001b,0x0000002e, + 0x00000026,0x0004002b,0x00000006,0x00000031,0x00000000,0x0004002b,0x0000000a,0x00000034, + 0x00000000,0x0004002b,0x00000006,0x00000037,0x00000003,0x00040020,0x00000038,0x00000009, + 0x00000013,0x00090019,0x0000003e,0x00000013,0x00000001,0x00000000,0x00000000,0x00000000, + 0x00000002,0x00000007,0x00040020,0x0000003f,0x00000000,0x0000003e,0x0004003b,0x0000003f, + 0x00000040,0x00000000,0x0004002b,0x00000013,0x00000043,0x00000000,0x0007002c,0x00000014, + 0x00000044,0x00000043,0x00000043,0x00000043,0x00000043,0x00040017,0x00000046,0x00000013, + 0x00000002,0x00040020,0x00000047,0x00000007,0x00000046,0x0004002b,0x00000013,0x0000004b, + 0x3f000000,0x00040020,0x00000052,0x00000007,0x00000014,0x0004002b,0x00000013,0x00000056, + 0x40000000,0x0004002b,0x00000013,0x00000058,0x3f800000,0x0004002b,0x0000000a,0x0000005a, + 0x00000001,0x00040020,0x00000062,0x00000009,0x00000015,0x0004002b,0x0000000a,0x00000067, + 0x00000003,0x0004002b,0x00000006,0x00000071,0x00000001,0x0004002b,0x0000000a,0x0000009f, + 0x00000008,0x0006002c,0x0000000b,0x000000a0,0x0000009f,0x0000009f,0x0000005a,0x00050036, + 0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000008, + 0x00000009,0x00000007,0x0004003b,0x00000024,0x00000025,0x00000007,0x0004003b,0x00000047, + 0x00000048,0x00000007,0x0004003b,0x00000052,0x00000053,0x00000007,0x0004003b,0x00000052, + 0x00000061,0x00000007,0x0004003b,0x00000052,0x00000070,0x00000007,0x0004003b,0x00000047, + 0x00000082,0x00000007,0x0004003b,0x00000047,0x00000089,0x00000007,0x0004003d,0x0000000b, + 0x0000000f,0x0000000d,0x0007004f,0x0000000e,0x00000010,0x0000000f,0x0000000f,0x00000000, + 0x00000001,0x0004007c,0x00000007,0x00000011,0x00000010,0x0003003e,0x00000009,0x00000011, + 0x0004003d,0x00000007,0x00000012,0x00000009,0x00050041,0x0000001a,0x0000001b,0x00000018, + 0x00000019,0x0004003d,0x00000007,0x0000001c,0x0000001b,0x000500af,0x0000001e,0x0000001f, + 0x00000012,0x0000001c,0x0004009a,0x0000001d,0x00000020,0x0000001f,0x000300f7,0x00000022, + 0x00000000,0x000400fa,0x00000020,0x00000021,0x00000022,0x000200f8,0x00000021,0x000100fd, + 0x000200f8,0x00000022,0x0004003d,0x00000026,0x00000029,0x00000028,0x0004003d,0x0000002a, + 0x0000002d,0x0000002c,0x00050056,0x0000002e,0x0000002f,0x00000029,0x0000002d,0x0004003d, + 0x00000007,0x00000030,0x00000009,0x00040064,0x00000026,0x00000032,0x0000002f,0x0007005f, + 0x00000014,0x00000033,0x00000032,0x00000030,0x00000002,0x00000031,0x00050051,0x00000013, + 0x00000035,0x00000033,0x00000000,0x0003003e,0x00000025,0x00000035,0x0004003d,0x00000013, + 0x00000036,0x00000025,0x00050041,0x00000038,0x00000039,0x00000018,0x00000037,0x0004003d, + 0x00000013,0x0000003a,0x00000039,0x000500b4,0x0000001d,0x0000003b,0x00000036,0x0000003a, + 0x000300f7,0x0000003d,0x00000000,0x000400fa,0x0000003b,0x0000003c,0x0000003d,0x000200f8, + 0x0000003c,0x0004003d,0x0000003e,0x00000041,0x00000040,0x0004003d,0x00000007,0x00000042, + 0x00000009,0x00040063,0x00000041,0x00000042,0x00000044,0x000100fd,0x000200f8,0x0000003d, + 0x0004003d,0x00000007,0x00000049,0x00000009,0x0004006f,0x00000046,0x0000004a,0x00000049, + 0x00050050,0x00000046,0x0000004c,0x0000004b,0x0000004b,0x00050081,0x00000046,0x0000004d, + 0x0000004a,0x0000004c,0x00050041,0x0000001a,0x0000004e,0x00000018,0x00000019,0x0004003d, + 0x00000007,0x0000004f,0x0000004e,0x0004006f,0x00000046,0x00000050,0x0000004f,0x00050088, + 0x00000046,0x00000051,0x0000004d,0x00000050,0x0003003e,0x00000048,0x00000051,0x00050041, + 0x00000024,0x00000054,0x00000048,0x00000034,0x0004003d,0x00000013,0x00000055,0x00000054, + 0x00050085,0x00000013,0x00000057,0x00000055,0x00000056,0x00050083,0x00000013,0x00000059, + 0x00000057,0x00000058,0x00050041,0x00000024,0x0000005b,0x00000048,0x0000005a,0x0004003d, + 0x00000013,0x0000005c,0x0000005b,0x00050085,0x00000013,0x0000005d,0x0000005c,0x00000056, + 0x00050083,0x00000013,0x0000005e,0x00000058,0x0000005d,0x0004003d,0x00000013,0x0000005f, + 0x00000025,0x00070050,0x00000014,0x00000060,0x00000059,0x0000005e,0x0000005f,0x00000058, + 0x0003003e,0x00000053,0x00000060,0x00050041,0x00000062,0x00000063,0x00000018,0x00000031, + 0x0004003d,0x00000015,0x00000064,0x00000063,0x0004003d,0x00000014,0x00000065,0x00000053, + 0x00050091,0x00000014,0x00000066,0x00000064,0x00000065,0x0003003e,0x00000061,0x00000066, + 0x00050041,0x00000024,0x00000068,0x00000061,0x00000067,0x0004003d,0x00000013,0x00000069, + 0x00000068,0x000500b4,0x0000001d,0x0000006a,0x00000069,0x00000043,0x000300f7,0x0000006c, + 0x00000000,0x000400fa,0x0000006a,0x0000006b,0x0000006c,0x000200f8,0x0000006b,0x0004003d, + 0x0000003e,0x0000006d,0x00000040,0x0004003d,0x00000007,0x0000006e,0x00000009,0x00040063, + 0x0000006d,0x0000006e,0x00000044,0x000100fd,0x000200f8,0x0000006c,0x00050041,0x00000062, + 0x00000072,0x00000018,0x00000071,0x0004003d,0x00000015,0x00000073,0x00000072,0x0004003d, + 0x00000014,0x00000074,0x00000061,0x00050041,0x00000024,0x00000075,0x00000061,0x00000067, + 0x0004003d,0x00000013,0x00000076,0x00000075,0x00070050,0x00000014,0x00000077,0x00000076, + 0x00000076,0x00000076,0x00000076,0x00050088,0x00000014,0x00000078,0x00000074,0x00000077, + 0x00050091,0x00000014,0x00000079,0x00000073,0x00000078,0x0003003e,0x00000070,0x00000079, + 0x00050041,0x00000024,0x0000007a,0x00000070,0x00000067,0x0004003d,0x00000013,0x0000007b, + 0x0000007a,0x000500bc,0x0000001d,0x0000007c,0x0000007b,0x00000043,0x000300f7,0x0000007e, + 0x00000000,0x000400fa,0x0000007c,0x0000007d,0x0000007e,0x000200f8,0x0000007d,0x0004003d, + 0x0000003e,0x0000007f,0x00000040,0x0004003d,0x00000007,0x00000080,0x00000009,0x00040063, + 0x0000007f,0x00000080,0x00000044,0x000100fd,0x000200f8,0x0000007e,0x0004003d,0x00000014, + 0x00000083,0x00000070,0x0007004f,0x00000046,0x00000084,0x00000083,0x00000083,0x00000000, + 0x00000001,0x00050041,0x00000024,0x00000085,0x00000070,0x00000067,0x0004003d,0x00000013, + 0x00000086,0x00000085,0x00050050,0x00000046,0x00000087,0x00000086,0x00000086,0x00050088, + 0x00000046,0x00000088,0x00000084,0x00000087,0x0003003e,0x00000082,0x00000088,0x00050041, + 0x00000024,0x0000008a,0x00000082,0x00000034,0x0004003d,0x00000013,0x0000008b,0x0000008a, + 0x00050085,0x00000013,0x0000008c,0x0000008b,0x0000004b,0x00050081,0x00000013,0x0000008d, + 0x0000008c,0x0000004b,0x00050041,0x00000024,0x0000008e,0x00000082,0x0000005a,0x0004003d, + 0x00000013,0x0000008f,0x0000008e,0x00050085,0x00000013,0x00000090,0x0000008f,0x0000004b, + 0x00050083,0x00000013,0x00000091,0x0000004b,0x00000090,0x00050050,0x00000046,0x00000092, + 0x0000008d,0x00000091,0x0003003e,0x00000089,0x00000092,0x0004003d,0x0000003e,0x00000093, + 0x00000040,0x0004003d,0x00000007,0x00000094,0x00000009,0x0004003d,0x00000046,0x00000095, + 0x00000089,0x0004003d,0x00000046,0x00000096,0x00000048,0x00050083,0x00000046,0x00000097, + 0x00000095,0x00000096,0x00050041,0x0000001a,0x00000098,0x00000018,0x00000019,0x0004003d, + 0x00000007,0x00000099,0x00000098,0x0004006f,0x00000046,0x0000009a,0x00000099,0x00050085, + 0x00000046,0x0000009b,0x00000097,0x0000009a,0x00050051,0x00000013,0x0000009c,0x0000009b, + 0x00000000,0x00050051,0x00000013,0x0000009d,0x0000009b,0x00000001,0x00070050,0x00000014, + 0x0000009e,0x0000009c,0x0000009d,0x00000043,0x00000043,0x00040063,0x00000093,0x00000094, + 0x0000009e,0x000100fd,0x00010038 +}; diff --git a/gpu/vk/vk_camera_motion.cpp b/gpu/vk/vk_camera_motion.cpp new file mode 100644 index 000000000..318a64841 --- /dev/null +++ b/gpu/vk/vk_camera_motion.cpp @@ -0,0 +1,217 @@ +// (hookshot) See vk_camera_motion.h. One pipeline, one R16G16F target, one dispatch. +#include +#include + +#include "vk_camera_motion.h" +#include "vk_texture.h" + +#include "shaders/camera_motion_comp_spv.h" + +namespace mkwvk::camera_motion { +namespace { + +struct Push { + float inverse_view_projection[16]; + float previous_view_projection[16]; + int32_t render_size[2]; + float far_depth; + float pad; +}; +static_assert(sizeof(Push) == 16 * 4 * 2 + 16, "the shader's push constants"); + +struct State { + bool tried = false; + VkDescriptorSetLayout set = VK_NULL_HANDLE; + VkPipelineLayout layout = VK_NULL_HANDLE; + VkPipeline pipeline = VK_NULL_HANDLE; + VkSampler point = VK_NULL_HANDLE; + VkImage image = VK_NULL_HANDLE; + VmaAllocation memory = nullptr; + VkImageView view = VK_NULL_HANDLE; + uint32_t width = 0, height = 0; + Matrix previous{}; + bool have_previous = false; +}; + +State g; + +/// The inverse of a row-major 4x4 by Gauss-Jordan, in doubles. False when it is singular, which a +/// projection with a zero field of view or a degenerate viewport can be: the caller then writes no +/// motion rather than reprojecting through nonsense. +bool invert(const float* a, float* out) { + double m[4][8]{}; + for (int r = 0; r < 4; r++) { + for (int c = 0; c < 4; c++) { + const float v = a[r * 4 + c]; + if (!(v == v) || v > 1e30f || v < -1e30f) return false; // (NaN or absurd) + m[r][c] = v; + m[r][c + 4] = r == c ? 1.0 : 0.0; + } + } + for (int c = 0; c < 4; c++) { + int pivot = c; + for (int r = c + 1; r < 4; r++) { + if (std::abs(m[r][c]) > std::abs(m[pivot][c])) pivot = r; + } + const double d = m[pivot][c]; + if (d > -1e-12 && d < 1e-12) return false; + if (pivot != c) { + for (int k = 0; k < 8; k++) { + const double t = m[c][k]; + m[c][k] = m[pivot][k]; + m[pivot][k] = t; + } + } + for (int k = 0; k < 8; k++) m[c][k] /= d; + for (int r = 0; r < 4; r++) { + if (r == c) continue; + const double f = m[r][c]; + if (f == 0.0) continue; + for (int k = 0; k < 8; k++) m[r][k] -= f * m[c][k]; + } + } + for (int r = 0; r < 4; r++) + for (int c = 0; c < 4; c++) out[r * 4 + c] = (float)m[r][c + 4]; + return true; +} + +bool make_pipeline() { + const VkDescriptorSetLayoutBinding b[3]{ + {0, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, 1, VK_SHADER_STAGE_COMPUTE_BIT, nullptr}, + {1, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1, VK_SHADER_STAGE_COMPUTE_BIT, nullptr}, + {1000, VK_DESCRIPTOR_TYPE_SAMPLER, 1, VK_SHADER_STAGE_COMPUTE_BIT, nullptr}, + }; + VkDescriptorSetLayoutCreateInfo li{VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO}; + li.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR; + li.bindingCount = 3, li.pBindings = b; + if (vkCreateDescriptorSetLayout(dev.device, &li, nullptr, &g.set) != VK_SUCCESS) return false; + const VkPushConstantRange pr{VK_SHADER_STAGE_COMPUTE_BIT, 0, sizeof(Push)}; + VkPipelineLayoutCreateInfo pi{VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO}; + pi.setLayoutCount = 1, pi.pSetLayouts = &g.set; + pi.pushConstantRangeCount = 1, pi.pPushConstantRanges = ≺ + if (vkCreatePipelineLayout(dev.device, &pi, nullptr, &g.layout) != VK_SUCCESS) return false; + VkShaderModuleCreateInfo mi{VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO}; + mi.codeSize = sizeof CAMERA_MOTION_COMP_SPV, mi.pCode = CAMERA_MOTION_COMP_SPV; + VkShaderModule m = VK_NULL_HANDLE; + if (vkCreateShaderModule(dev.device, &mi, nullptr, &m) != VK_SUCCESS) return false; + VkComputePipelineCreateInfo ci{VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO}; + ci.stage = {VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, nullptr, 0, + VK_SHADER_STAGE_COMPUTE_BIT, m, "main", nullptr}; + ci.layout = g.layout; + const VkResult made = vkCreateComputePipelines(dev.device, VK_NULL_HANDLE, 1, &ci, nullptr, &g.pipeline); + vkDestroyShaderModule(dev.device, m, nullptr); + if (made != VK_SUCCESS) { + g.pipeline = VK_NULL_HANDLE; + logf("vk: camera motion: its pipeline was not made (%d)", (int)made); + return false; + } + VkSamplerCreateInfo si{VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO}; + si.magFilter = si.minFilter = VK_FILTER_NEAREST; + si.mipmapMode = VK_SAMPLER_MIPMAP_MODE_NEAREST; + si.addressModeU = si.addressModeV = si.addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; + return vkCreateSampler(dev.device, &si, nullptr, &g.point) == VK_SUCCESS; +} + +bool make_target(uint32_t width, uint32_t height) { + if (g.image && g.width == width && g.height == height) return true; + if (g.view) vkDestroyImageView(dev.device, g.view, nullptr), g.view = VK_NULL_HANDLE; + if (g.image) destroy_image(g.image, g.memory), g.image = VK_NULL_HANDLE; + VkImageCreateInfo ci{VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO}; + ci.imageType = VK_IMAGE_TYPE_2D; + ci.format = VK_FORMAT_R16G16_SFLOAT; + ci.extent = {width, height, 1}; + ci.mipLevels = ci.arrayLayers = 1; + ci.samples = VK_SAMPLE_COUNT_1_BIT; + ci.tiling = VK_IMAGE_TILING_OPTIMAL; + ci.usage = VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_SAMPLED_BIT; + ci.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; + if (!create_image(ci, g.image, g.memory, false)) return false; + VkImageViewCreateInfo vi{VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO}; + vi.image = g.image; + vi.viewType = VK_IMAGE_VIEW_TYPE_2D; + vi.format = ci.format; + vi.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}; + if (vkCreateImageView(dev.device, &vi, nullptr, &g.view) != VK_SUCCESS) return false; + g.width = width, g.height = height; + // (GENERAL from here on, as the rest of this renderer's own images are) + VkImageMemoryBarrier2 b{VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2}; + b.srcStageMask = VK_PIPELINE_STAGE_2_NONE; + b.dstStageMask = VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT; + b.dstAccessMask = VK_ACCESS_2_SHADER_WRITE_BIT; + b.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; + b.newLayout = VK_IMAGE_LAYOUT_GENERAL; + b.srcQueueFamilyIndex = b.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + b.image = g.image; + b.subresourceRange = vi.subresourceRange; + g.have_previous = false; // (a new size has no history to reproject through) + logf("vk: camera motion: %ux%u R16G16F", width, height); + return true; +} + +} // namespace + +VkImageView record(VkCommandBuffer cmd, VkImageView depth, VkFormat depth_format, uint32_t width, + uint32_t height, const Matrix& view_projection) { + if (!depth || width == 0 || height == 0) return VK_NULL_HANDLE; + if (!dev.push_descriptor || !vkCmdPushDescriptorSetKHR) return VK_NULL_HANDLE; + if (!g.tried) { + g.tried = true; + if (!make_pipeline()) return VK_NULL_HANDLE; + } + if (!g.pipeline || !make_target(width, height)) return VK_NULL_HANDLE; + + Push push{}; + if (!invert(view_projection.m, push.inverse_view_projection)) return VK_NULL_HANDLE; + // The first frame, and the frame after a reset, have nothing to reproject through: this frame's + // matrix stands in, which makes the motion exactly zero rather than arbitrary. + memcpy(push.previous_view_projection, g.have_previous ? g.previous.m : view_projection.m, + sizeof push.previous_view_projection); + push.render_size[0] = (int32_t)width, push.render_size[1] = (int32_t)height; + // (reversed depth: the far plane is 0. A format that is not reversed would want 1 here, and + // nothing in this game has been seen using one) + push.far_depth = 0.0f; + (void)depth_format; + + const VkDescriptorImageInfo depth_info{VK_NULL_HANDLE, depth, VK_IMAGE_LAYOUT_GENERAL}; + const VkDescriptorImageInfo motion_info{VK_NULL_HANDLE, g.view, VK_IMAGE_LAYOUT_GENERAL}; + const VkDescriptorImageInfo sampler_info{g.point, VK_NULL_HANDLE, VK_IMAGE_LAYOUT_UNDEFINED}; + VkWriteDescriptorSet w[3]{}; + for (int i = 0; i < 3; i++) w[i].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, w[i].descriptorCount = 1; + w[0].dstBinding = 0, w[0].descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, w[0].pImageInfo = &depth_info; + w[1].dstBinding = 1, w[1].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, w[1].pImageInfo = &motion_info; + w[2].dstBinding = 1000, w[2].descriptorType = VK_DESCRIPTOR_TYPE_SAMPLER, w[2].pImageInfo = &sampler_info; + + vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, g.pipeline); + vkCmdPushDescriptorSetKHR(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, g.layout, 0, 3, w); + vkCmdPushConstants(cmd, g.layout, VK_SHADER_STAGE_COMPUTE_BIT, 0, sizeof push, &push); + vkCmdDispatch(cmd, (width + 7) / 8, (height + 7) / 8, 1); + + VkMemoryBarrier2 mb{VK_STRUCTURE_TYPE_MEMORY_BARRIER_2}; + mb.srcStageMask = VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT; + mb.srcAccessMask = VK_ACCESS_2_SHADER_WRITE_BIT; + mb.dstStageMask = VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT; + mb.dstAccessMask = VK_ACCESS_2_SHADER_READ_BIT; + VkDependencyInfo di{VK_STRUCTURE_TYPE_DEPENDENCY_INFO}; + di.memoryBarrierCount = 1, di.pMemoryBarriers = &mb; + vkCmdPipelineBarrier2(cmd, &di); + + g.previous = view_projection; + g.have_previous = true; + return g.view; +} + +void reset() { + g.have_previous = false; +} + +void shutdown() { + if (g.view) vkDestroyImageView(dev.device, g.view, nullptr); + if (g.image) destroy_image(g.image, g.memory); + if (g.point) vkDestroySampler(dev.device, g.point, nullptr); + if (g.pipeline) vkDestroyPipeline(dev.device, g.pipeline, nullptr); + if (g.layout) vkDestroyPipelineLayout(dev.device, g.layout, nullptr); + if (g.set) vkDestroyDescriptorSetLayout(dev.device, g.set, nullptr); + g = State{}; +} + +} // namespace mkwvk::camera_motion diff --git a/gpu/vk/vk_camera_motion.h b/gpu/vk/vk_camera_motion.h new file mode 100644 index 000000000..bc27c18ab --- /dev/null +++ b/gpu/vk/vk_camera_motion.h @@ -0,0 +1,32 @@ +// (hookshot) Camera-only motion vectors from the scene's depth, for a temporal upscaler. +// +// Ocarina hands its own upscaler one colour texture and nothing else (docs/upscaling.md), so motion +// has to be derived. This reprojects each pixel through the inverse of this frame's view projection +// and the previous frame's, which is right for a world that does not move and ghosts on anything +// that moves by itself. The shader is gpu/vk/shaders/camera_motion.comp. +#pragma once + +#include + +#include "vk_internal.h" + +namespace mkwvk::camera_motion { + +/// A view projection, row major as the shader multiplies it. +struct Matrix { + float m[16]{}; +}; + +/// Records the pass for this frame and returns the motion target, or null when it cannot run: no +/// depth, no matrices yet, or the pipeline could not be made. The caller keeps nothing; the +/// previous frame's matrix is remembered here. +[[nodiscard]] VkImageView record(VkCommandBuffer cmd, VkImageView depth, VkFormat depth_format, + uint32_t width, uint32_t height, const Matrix& view_projection); + +/// Forgets the previous frame, so the next pass writes zero motion rather than reprojecting through +/// a matrix from before a cut or a load. +void reset(); + +void shutdown(); + +} // namespace mkwvk::camera_motion diff --git a/gpu/vk/vk_draw.cpp b/gpu/vk/vk_draw.cpp index 8ddd064ea..e2758045c 100644 --- a/gpu/vk/vk_draw.cpp +++ b/gpu/vk/vk_draw.cpp @@ -2611,6 +2611,18 @@ struct IndexBind { thread_local IndexBind last_ib; int64_t st_desc_reused; +/// (hookshot) The last depth target the game bound with a colour target, kept for an upscaler that +/// has to derive motion from it. Ocarina hands its own upscaler no depth at all +/// (docs/upscaling.md), so the scene's own depth buffer is the only one there is. Written where the +/// targets are resolved, which is once per NOP_SET_RT rather than per draw. +struct SceneDepth { + VkImage image = VK_NULL_HANDLE; + VkImageView view = VK_NULL_HANDLE; + VkFormat format = VK_FORMAT_UNDEFINED; + uint32_t width = 0, height = 0; +}; +SceneDepth scene_depth; + /// (hookshot) Once per distinct render target set, with RX_VK_MRT_CENSUS=1: how many colour attachments the game /// binds at once, their formats and the extent. Off by default and free while off. /// @@ -2692,6 +2704,12 @@ Targets targets(NvnState& s) { } } mrt_census(at); + // (the scene's depth, for an upscaler's reprojection: the largest one seen, so a shadow map or + // a quarter-resolution effect pass does not displace the one the scene was drawn with) + if (at.depth && at.depth_view && at.n >= 1 && + (uint64_t)at.width * at.height >= (uint64_t)scene_depth.width * scene_depth.height) { + scene_depth = {at.depth->image, at.depth_view, at.depth_format, at.width, at.height}; + } targets_serial = s.rt_serial; cached_targets = at; return at; @@ -5516,10 +5534,19 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { std::lock_guard lk(mu); if (said[p.key]++ == 0) { const char* why = upscale::temporal_refusal(req); + float near_plane = 0.0f, far_plane = 0.0f; + const float tan_half = hos_oot_camera(&near_plane, &far_plane); logf("vk: upscale seam %016llx: %s, output %ux%u, inputs %ux%u; a temporal backend %s%s", (unsigned long long)p.key, upscale::backend_name(upscale::Backend::StandIn), req.output_width, req.output_height, req.inputs.render_width, req.inputs.render_height, why ? "could not be given this: " : "could be given this", why ? why : ""); + // (what a backend would be given besides the dispatch: the camera the lifted code + // published and the scene depth the targets kept, neither of which is in this dispatch) + logf("vk: upscale seam %016llx: camera %s (near %.4f far %.1f fov %.1f deg), scene depth " + "%ux%u format %d", + (unsigned long long)p.key, tan_half > 0.0f ? "published" : "not published yet", + near_plane, far_plane, tan_half > 0.0f ? 2.0f * std::atan(tan_half) * 57.29578f : 0.0f, + scene_depth.width, scene_depth.height, (int)scene_depth.format); } } // (hookshot) FSR 3.1 in the dispatch's place, opt-in with RX_VK_FSR=1 and only where the diff --git a/host/hos_oot_camera.c b/host/hos_oot_camera.c index 57c331fb1..3c67c5e86 100644 --- a/host/hos_oot_camera.c +++ b/host/hos_oot_camera.c @@ -10,11 +10,45 @@ * so a reader that checks it gets the renderer's own defaults on another game version where the * patch site is left out. */ #include +#include +#include +#include + +#include "hos.h" volatile float hos_oot_cam_near = 0.0f; volatile float hos_oot_cam_far = 0.0f; volatile float hos_oot_cam_tan_half_fov = 0.0f; volatile int hos_oot_camera_valid = 0; +/* The guest addresses of sead's projection object and of the 4x4 it writes. Published so the view + projection can be identified from real data: this matrix is the projection alone, and a temporal + upscaler reprojects with view * projection. */ +volatile uint64_t hos_oot_proj_object = 0; +volatile uint64_t hos_oot_proj_matrix = 0; + +/* HOS_CAMERA_DUMP=1: once, a window of floats around each published object, so the view matrix can + be found by reading what is there rather than by guessing an offset. Guest addresses only; no + game data leaves the machine. */ +void hos_oot_camera_dump(void) { + static int done; + const char *on = getenv("HOS_CAMERA_DUMP"); + if (done || !on || !*on || *on == '0' || !hos_oot_camera_valid) return; + done = 1; + for (int which = 0; which < 2; which++) { + const uint64_t base = which ? hos_oot_proj_matrix : hos_oot_proj_object; + if (!base) continue; + for (int row = 0; row < 8; row++) { + char line[200]; + int n = snprintf(line, sizeof line, "camera: %s +%#03x:", which ? "matrix" : "object", row * 32); + for (int i = 0; i < 8; i++) { + float v; + memcpy(&v, (const char *)GP(base + (uint64_t)row * 32 + (uint64_t)i * 4), 4); + n += snprintf(line + n, sizeof line - n, " %.4g", (double)v); + } + hos_log("%s", line); + } + } +} /* The renderer's side: the field of view in radians, or 0 when nothing has been published. tan_half_fov is what the game stores (1 / it becomes the projection's m11), so the angle is diff --git a/host/nn_vi.c b/host/nn_vi.c index aeb015431..09ce38c64 100644 --- a/host/nn_vi.c +++ b/host/nn_vi.c @@ -194,6 +194,8 @@ static float text_scale(const char *env, int menu) { } static void realtime_step(int64_t now) { int rx_option(int id, int otherwise); + void hos_oot_camera_dump(void); /* (host/hos_oot_camera.c: once, with HOS_CAMERA_DUMP=1) */ + hos_oot_camera_dump(); /* (Resolution 100% from the start: the fixed path skipped the dynamic block from the first frame, its fields stayed unset and the 3D came out black. The dynamic path runs a few frames first, as when the menu turns it on in game) */ hos_fixed_resolution = !rx_option(2, 1) && hos_dynres_runs >= 30; diff --git a/nx2/oot_camera.py b/nx2/oot_camera.py index b5ac10fc1..35e1a143e 100644 --- a/nx2/oot_camera.py +++ b/nx2/oot_camera.py @@ -15,6 +15,11 @@ smaller of the two as the near plane and the larger as the far, and publishes nothing unless both are positive and ordered. A projection with a near plane behind the eye is not one to hand an upscaler. + +It also publishes the guest addresses of the projection object and of the 4x4 it writes. The view +projection a temporal upscaler reprojects with is not this matrix -- this is the projection alone -- +and rather than guess which offset of which object holds the view, HOS_CAMERA_DUMP=1 logs a window +of floats around both so the matrix can be identified from what it contains. """ MAIN = 0x80020000 @@ -29,7 +34,9 @@ "memcpy(&_f0, &_c0, 4); memcpy(&_f1, &_c1, 4); memcpy(&_ft, &_ct, 4); " "{ const float _nr = _f0 < _f1 ? _f0 : _f1, _fr = _f0 < _f1 ? _f1 : _f0; " "if (_nr > 0.0f && _fr > _nr && _ft > 0.0f) { hos_oot_cam_near = _nr; hos_oot_cam_far = _fr; " - "hos_oot_cam_tan_half_fov = _ft; hos_oot_camera_valid = 1; } } }" + "hos_oot_cam_tan_half_fov = _ft; hos_oot_camera_valid = 1; } } " + "{ extern volatile uint64_t hos_oot_proj_object, hos_oot_proj_matrix; " + "hos_oot_proj_object = _cp; hos_oot_proj_matrix = c->x[1]; } }" " /* (nx2/oot_camera.py: the camera a temporal upscaler needs) */" ) From bf0382c21977d7f4c19ae21035adef32b88e7fc9 Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 17:09:29 -0600 Subject: [PATCH 014/119] docs: the baseline, which says an upscaler is not what gets this to 60 Measured before any of this changes anything, because it decides whether an upscaler is worth having here. Linux, RTX 5060 Ti, driver 615.71.09, headless under Xvfb with a warmed shader cache, the opening and Kokiri Forest: 57-60 fps, held over 33,600 presents in one run and 9,000 in another 1106 draws (0 skipped), 99 dispatches, 148 passes a frame 1536x864 internal, resolved to a 2048x1152 scene, presented at 2560x1440 Ocarina already runs at its target frame rate. An upscaler is not what gets it there, and the argument for FSR or DLSS in this title is image quality at a given cost, or headroom in areas this run did not reach -- not frames. Anyone reading this document to decide whether to spend time on it should see that first. 1106 draws and 148 passes a frame at 60 fps is also not an upscaler-shaped problem, which is worth saying where someone is choosing what to work on. Docs only. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- docs/upscaling.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/docs/upscaling.md b/docs/upscaling.md index d29a1c785..20dbabb26 100644 --- a/docs/upscaling.md +++ b/docs/upscaling.md @@ -27,6 +27,27 @@ the composited frame, after the HUD. A temporal upscaler there has no depth, no baked into its history. That is why the existing interpolator block-matches: it has nothing better to work from. +## What the baseline actually is + +Measured before any of this changes anything, because it decides whether an upscaler is worth +having here at all. Linux, RTX 5060 Ti, driver 615.71.09, headless under Xvfb, a warmed shader +cache, the opening and Kokiri Forest: + +| | | +|---|---| +| Frame rate | **57-60 fps**, held over 33,600 presents in one run and 9,000 in another | +| A frame | 1106 draws (0 skipped), 99 dispatches, 148 passes | +| Scene | 1536x864 internal, resolved by the game's own network into a 2048x1152 scene | +| Present | 2560x1440 | + +So **Ocarina already runs at its target frame rate**, and an upscaler is not what gets it there. +What one would buy is a higher internal resolution at the same frame rate, or headroom in the areas +this run did not reach. That is worth knowing before spending more effort on it: the argument for +FSR or DLSS here is image quality at a given cost, not frames. + +The same numbers also say the obvious thing about where the time goes: 1106 draws and 148 passes a +frame at 60 fps is not an upscaler-shaped problem. + ## Correction: the game's network is not a temporal upscaler **A run settles this, and it contradicts the section above.** With the per-network log reading the From af0f87185a4eef8a348097e9870341d0c368aee1 Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 17:11:22 -0600 Subject: [PATCH 015/119] docs: 60 fps is the floor here, not the target The baseline section said Ocarina already ran at its target frame rate, which misstates the objective. 60 is the floor. The limiter at mod + 0xfc takes any rate from 40 up when variable refresh is on, so HOS_FPS_TARGET can ask for more, and the real-time frame step at main+0x6e6cc4 keeps game speed honest at whatever comes out. What an upscaler buys against a floor is the two things a floor does not give: a higher internal resolution at the same rate, and the headroom to hold a higher rate at all. The scene is 1536x864 for a 2560x1440 present, so there is a lot of resolution being left behind, and that is the gap FSR or DLSS closes. Docs only. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- docs/upscaling.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/docs/upscaling.md b/docs/upscaling.md index 20dbabb26..5d09a8985 100644 --- a/docs/upscaling.md +++ b/docs/upscaling.md @@ -40,13 +40,16 @@ cache, the opening and Kokiri Forest: | Scene | 1536x864 internal, resolved by the game's own network into a 2048x1152 scene | | Present | 2560x1440 | -So **Ocarina already runs at its target frame rate**, and an upscaler is not what gets it there. -What one would buy is a higher internal resolution at the same frame rate, or headroom in the areas -this run did not reach. That is worth knowing before spending more effort on it: the argument for -FSR or DLSS here is image quality at a given cost, not frames. - -The same numbers also say the obvious thing about where the time goes: 1106 draws and 148 passes a -frame at 60 fps is not an upscaler-shaped problem. +**60 fps is the floor here, not the target.** The game's own limiter lives at `mod + 0xfc` and the +engine's adaptive controller writes any rate from 40 up when variable refresh is on (`+0x231`), so +`HOS_FPS_TARGET=` can ask for more; the real-time frame step at `main+0x6e6cc4` already keeps +game speed honest at whatever rate comes out. What an upscaler buys against that is the two things +a floor does not give you: a higher internal resolution at the same rate, and the headroom to hold +a higher rate at all. The scene is 1536x864 for a 2560x1440 present — there is a lot of resolution +being left behind, and that is the gap FSR or DLSS closes. + +So the argument for this work is image quality and headroom at a given cost. It is not "getting to +60", and this document should not be read as saying the job is done at 60. ## Correction: the game's network is not a temporal upscaler From 481b957d7de8e2de2c55945549b834b202233b94 Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 17:14:29 -0600 Subject: [PATCH 016/119] feat: give FSR the assembled depth and camera motion The seam now builds the inputs rather than looking for them in a dispatch that does not carry them: the scene depth targets() kept, and motion reprojected from it by the camera-motion pass. Only where the depth's extent matches the network's input, so a shadow map or an effect pass cannot stand in for the buffer the scene was drawn with. The Request is rebuilt for the assembled set before temporal_possible() sees it, because the gate is about what a backend will be handed and that is no longer the dispatch's own bindings. Motion scale is 1 because the pass already writes render pixels. It stays off for one honest reason, which is the last one: hos_oot_view_projection answers 0. sead's projection update gives the projection alone and the view is not identified yet, so reprojecting would be through a matrix that is not the one the depth came from. HOS_CAMERA_DUMP=1 is how that gets found; until it is, camera motion does not run and FSR falls through, rather than producing a plausible picture built on the wrong matrix. Builds clean with RX_VK_ONLY=1, 0 warnings. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- gpu/vk/vk_draw.cpp | 48 +++++++++++++++++++++++++++++++++++++++++++ host/hos_oot_camera.c | 13 ++++++++++++ 2 files changed, 61 insertions(+) diff --git a/gpu/vk/vk_draw.cpp b/gpu/vk/vk_draw.cpp index e2758045c..6cf1d3315 100644 --- a/gpu/vk/vk_draw.cpp +++ b/gpu/vk/vk_draw.cpp @@ -42,6 +42,7 @@ #include "shaders/taau_upscale_comp_spv.h" #include "upscale_format.h" #include "upscale_seam.h" +#include "vk_camera_motion.h" #include "vk_fsr3.h" #include "shaders/movie_upscale_comp_spv.h" #include "shader_recompiler/backend/spirv/mma_layout.h" @@ -5308,6 +5309,9 @@ bool upscale_stub(VkCommandBuffer cmd, const NvnState& s, uint64_t key) { /// (host/hos_oot_camera.c: tan(fovy/2) and the planes sead's projection published, 0 when nothing /// has, which leaves a backend on its own defaults) extern "C" float hos_oot_camera(float* near_plane, float* far_plane); +/// (host/hos_oot_camera.c: the view projection the depth was rendered with, row major; false until +/// something publishes it, which is what keeps camera motion from reprojecting through a guess) +extern "C" int hos_oot_view_projection(float* row_major_4x4); /// (hookshot) Whether a program is one an upscaler backend may be given, by key prefix and /// independent of whether the stand-in wants it: RX_VK_UPSCALE_KEYS, default the gameplay TAAU @@ -5552,6 +5556,50 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { // (hookshot) FSR 3.1 in the dispatch's place, opt-in with RX_VK_FSR=1 and only where the // contract holds. Its own RGBA16F output is blitted into the game's target, which is the // format conversion the game's network would have done itself. + // (hookshot) The two inputs this dispatch never carries, assembled: the scene's own depth, and + // motion reprojected from it. docs/upscaling.md says why they cannot be taken from here. + if (fsr_here && scene_depth.view && fsr3::supported() && + scene_depth.width == req.inputs.render_width && scene_depth.height == req.inputs.render_height) { + camera_motion::Matrix vp{}; + if (hos_oot_view_projection(vp.m)) { + const VkImageView motion = camera_motion::record(cmd, scene_depth.view, scene_depth.format, + scene_depth.width, scene_depth.height, vp); + if (motion) { + req.inputs.motion = 0; // (assembled, not a binding of this dispatch) + upscale::Request assembled = req; + assembled.inputs.inputs_complete = true; + assembled.inputs.render_width = scene_depth.width; + assembled.inputs.render_height = scene_depth.height; + assembled.colour_binding = assembled.inputs.colour; + if (upscale::temporal_possible(assembled)) { + fsr3::Inputs ai; + ai.color = dw.imgs[req.inputs.colour != upscale::kNone ? req.inputs.colour : 0].imageView; + ai.depth = scene_depth.view; + ai.motion = motion; + ai.render_width = scene_depth.width, ai.render_height = scene_depth.height; + ai.upscale_width = req.output_width, ai.upscale_height = req.output_height; + ai.motion_scale[0] = 1.0f, ai.motion_scale[1] = 1.0f; // (already render pixels) + float np = 0.0f, fp = 0.0f; + const float th = hos_oot_camera(&np, &fp); + if (th > 0.0f && np > 0.0f) ai.near_plane = np, ai.fov_y = 2.0f * std::atan(th); + if (fsr3::upscale(cmd, ai)) { + static std::atomic said{0}; + if (said++ == 0) + logf("vk: fsr3 %ux%u -> %ux%u with assembled depth and camera motion", + ai.render_width, ai.render_height, ai.upscale_width, ai.upscale_height); + VkImageBlit b{}; + b.srcSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}; + b.srcOffsets[1] = {(int32_t)req.output_width, (int32_t)req.output_height, 1}; + b.dstSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, level, 0, 1}; + b.dstOffsets[1] = {(int32_t)req.output_width, (int32_t)req.output_height, 1}; + vkCmdBlitImage(cmd, fsr3::output_image(), VK_IMAGE_LAYOUT_GENERAL, out->image, + VK_IMAGE_LAYOUT_GENERAL, 1, &b, VK_FILTER_NEAREST); + return true; + } + } + } + } + } if (fsr_here && upscale::temporal_possible(req) && fsr3::supported()) { fsr3::Inputs fi; fi.color = dw.imgs[req.colour_binding].imageView; diff --git a/host/hos_oot_camera.c b/host/hos_oot_camera.c index 3c67c5e86..79381468b 100644 --- a/host/hos_oot_camera.c +++ b/host/hos_oot_camera.c @@ -50,6 +50,19 @@ void hos_oot_camera_dump(void) { } } +/* The view projection the scene's depth was rendered with, row major, or 0 when nothing has + published one. sead's projection update gives the projection alone; the view is not identified + yet (HOS_CAMERA_DUMP=1 is for finding it), so this answers 0 and camera motion stays off rather + than reprojecting through a matrix that is not the one the depth came from. */ +volatile int hos_oot_view_projection_valid = 0; +volatile float hos_oot_view_projection_rows[16]; + +int hos_oot_view_projection(float *row_major_4x4) { + if (!hos_oot_view_projection_valid || !row_major_4x4) return 0; + for (int i = 0; i < 16; i++) row_major_4x4[i] = hos_oot_view_projection_rows[i]; + return 1; +} + /* The renderer's side: the field of view in radians, or 0 when nothing has been published. tan_half_fov is what the game stores (1 / it becomes the projection's m11), so the angle is twice its arc tangent. */ From c630d5923ba8d1746ccfcda2583a95365c4b4aa4 Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 17:15:31 -0600 Subject: [PATCH 017/119] fix: publish the camera from the inlined projection copies too A run reached gameplay and published nothing. The reason is in oot_wide.py's own comment: sead's perspective projection matrix update has "three inlined copies", and the path that actually runs is one of them, not the out-of-line function I patched. So the publish now goes at all four sites oot_wide patches for the camera ratio, with the projection object taken from the register each copy holds it in -- x0, x21, x0 and x2, which are the second argument of oot_wide's _ratio() at the same offsets. The 4x4's address is published only from the out-of-line copy, where x1 was verified to hold it by reading the function. The dump dereferences that address, so publishing a guessed one from an inlined copy could fault rather than merely log nonsense. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- nx2/oot_camera.py | 57 ++++++++++++++++++++++++++++++----------------- 1 file changed, 37 insertions(+), 20 deletions(-) diff --git a/nx2/oot_camera.py b/nx2/oot_camera.py index 35e1a143e..3ed520993 100644 --- a/nx2/oot_camera.py +++ b/nx2/oot_camera.py @@ -23,10 +23,23 @@ """ MAIN = 0x80020000 -SITE = 0x3485cc0 -WORD = 0x2d558400 # (ldp s0, s1, [x0, #0xac]: the same word nx2/oot_wide.py checks) -PUBLISH = ( +# The same four sites nx2/oot_wide.py patches for the camera ratio: sead's perspective projection +# matrix update and its three inlined copies. The projection object is in a different register in +# each, which is the second argument of oot_wide's _ratio() at the same offsets. Patching only the +# out-of-line copy published nothing in a real run, because the path that runs is inlined. +SITES = ( + # (offset, the original word, the register holding the projection, whether x1 is known to hold + # the 4x4 it writes: verified only in the out-of-line copy, and the dump dereferences it) + (0x3485cc0, 0x2d558400, 0, True), + (0x4f1e8, 0x2d558ea0, 21, False), + (0x23b9a8, 0x2d558c00, 0, False), + (0x33b82c, 0x2d558440, 2, False), +) + +def _publish(base, with_matrix): + matrix = ("hos_oot_proj_matrix = c->x[1]; " if with_matrix else "") + return ( "{ extern volatile float hos_oot_cam_near, hos_oot_cam_far, hos_oot_cam_tan_half_fov; " "extern volatile int hos_oot_camera_valid; const uint64_t _cp = c->x[0]; " "uint32_t _c0 = (uint32_t)recomp_load32(c, _cp + 0x98), _c1 = (uint32_t)recomp_load32(c, _cp + 0x9c), " @@ -35,24 +48,28 @@ "{ const float _nr = _f0 < _f1 ? _f0 : _f1, _fr = _f0 < _f1 ? _f1 : _f0; " "if (_nr > 0.0f && _fr > _nr && _ft > 0.0f) { hos_oot_cam_near = _nr; hos_oot_cam_far = _fr; " "hos_oot_cam_tan_half_fov = _ft; hos_oot_camera_valid = 1; } } " - "{ extern volatile uint64_t hos_oot_proj_object, hos_oot_proj_matrix; " - "hos_oot_proj_object = _cp; hos_oot_proj_matrix = c->x[1]; } }" + "{ extern volatile uint64_t hos_oot_proj_object, hos_oot_proj_matrix; (void)hos_oot_proj_matrix; " + "hos_oot_proj_object = _cp; " + matrix + "} }" " /* (nx2/oot_camera.py: the camera a temporal upscaler needs) */" -) + ).replace("const uint64_t _cp = c->x[0];", "const uint64_t _cp = c->x[%d];" % base) def install(lifter, img): - """Appends the publish to the projection update. 0 when the site's word differs (another game - version), which leaves the renderer on its own defaults.""" - pc = MAIN + SITE - try: - have = img.word(pc) - except Exception: - have = None - if have != WORD: - print("camera: main+%#x holds %s, not %08x: left out" - % (SITE, "?" if have is None else "%08x" % have, WORD)) - return 0 - lifter.after[pc] = lifter.after.get(pc, "") + "\n" + PUBLISH - print("camera: the projection update publishes the near plane, far plane and field of view") - return 1 + """Appends the publish to every projection update site. A site whose word differs is left out; + 0 sites leaves the renderer on its own defaults.""" + n = 0 + for off, word, base, with_matrix in SITES: + pc = MAIN + off + try: + have = img.word(pc) + except Exception: + have = None + if have != word: + print("camera: main+%#x holds %s, not %08x: left out" + % (off, "?" if have is None else "%08x" % have, word)) + continue + lifter.after[pc] = lifter.after.get(pc, "") + "\n" + _publish(base, with_matrix) + n += 1 + print("camera: %d of %d projection sites publish the near plane, far plane and field of view" + % (n, len(SITES))) + return n From 2008ac73d6d6f04c1495c2dffd5cd00809c31be7 Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 17:19:31 -0600 Subject: [PATCH 018/119] feat: HOS_FPS_FORCE, because raising the limiter alone does not hold A run with HOS_FPS_TARGET=120 presents a locked 60 and logs "frame limiter 60" at every sample, 300 presents apart. The log reads +0xfc before the raise, so reading 60 every time means the engine writes it back between samples: with variable refresh on, the adaptive controller owns that word, exactly as the comment above it says. HOS_FPS_FORCE=1 also raises the three controller words that sample reads as 60 (+0x270+0x58, +0x28, +0x2c) and the nominal rate at +0x2c8, to find out whether the rate the controller settles on is what caps the frame or whether something else does. Labelled an experiment and off by default on purpose: it writes engine fields every frame whose meaning is inferred from one log line, and the real-time frame step already derives game speed from +0x2c8, so forcing that word changes two things at once. If it turns out to be the cap, the fix belongs at whatever writes the controller rather than in a host loop fighting it. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- host/nn_vi.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/host/nn_vi.c b/host/nn_vi.c index 09ce38c64..ef7a738a5 100644 --- a/host/nn_vi.c +++ b/host/nn_vi.c @@ -233,6 +233,18 @@ static void realtime_step(int64_t now) { *(uint8_t *)GP(mod + 0x232), *(int *)GP(mod + 0x2c8), *(int *)GP(mod + 0x270 + 0x58), *(int *)GP(mod + 0x270 + 0x28), *(int *)GP(mod + 0x270 + 0x2c), *(int *)GP(mod + 0x270 + 0x30)); if (target && *limit > 0 && *limit < target) *limit = target; + /* (hookshot) EXPERIMENT, HOS_FPS_FORCE=1: raising +0xfc alone does not hold. With variable + refresh on the engine's adaptive controller writes it back every frame, so a run with + HOS_FPS_TARGET=120 logs "frame limiter 60" at every sample and presents a locked 60. This + also raises the three controller words that sample read as 60, and the nominal rate, to + see whether the rate the controller settles on is what caps the frame. Unknown engine + fields written every frame: opt-in, and off by default for that reason. */ + if (target && getenv("HOS_FPS_FORCE")) { + int *const words[] = {(int *)GP(mod + 0x270 + 0x58), (int *)GP(mod + 0x270 + 0x28), + (int *)GP(mod + 0x270 + 0x2c), (int *)GP(mod + 0x2c8)}; + for (size_t i = 0; i < sizeof words / sizeof words[0]; i++) + if (*words[i] > 0 && *words[i] < target) *words[i] = target; + } } if (!rx_option(0, 1)) { /* (the Insert menu: per frame) */ int *slot = (int *)GP(mod + 0x2c8); From 37905564f534f3201d555e460145efd5c33d0528 Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 17:22:31 -0600 Subject: [PATCH 019/119] fix: snapshot the projection's fields, and name what caps the frame rate **The projection object is transient.** Publishing its address and reading it a frame later came back all zeros, while the publish itself had validated a sane near plane, far plane and field of view from the same object. The inlined copies build it on the stack, so a pointer kept for later is a pointer to nothing. The publish now copies the first 48 floats at publish time, which is the only honest way to see what is in it, and HOS_CAMERA_DUMP=1 logs that window. The view half of the view projection gets identified from those values rather than from a guess. **And the frame limiter's gate is found.** HOS_FPS_FORCE raising the three controller words and the nominal rate to 120 took -- the sample reads "nominal 120, controller 120 120 120" -- and the frame rate did not move: 60.0 fps, with the limiter still reading 60. So those words are not the cap. f_804fc0f0 is what stores a rate into +0xfc, and reading it gives three conditions: a mode must be 1, the rate must be 40 or more, and the byte at +0x232 must be set. The sample prints that byte as the second half of "vrr %d %d", and it reads 1 0: +0x231 is on, +0x232 is off, so the store never runs and +0xfc keeps its 60 whatever else is set. HOS_FPS_FORCE now sets that byte, so the game's own code can take a higher rate. Still an experiment and still off by default: it writes engine fields whose meaning comes from reading one function and one log line. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- host/hos_oot_camera.c | 12 ++++++++++++ host/nn_vi.c | 7 +++++++ nx2/oot_camera.py | 15 ++++++++++----- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/host/hos_oot_camera.c b/host/hos_oot_camera.c index 79381468b..5b1756dab 100644 --- a/host/hos_oot_camera.c +++ b/host/hos_oot_camera.c @@ -25,6 +25,11 @@ volatile int hos_oot_camera_valid = 0; upscaler reprojects with view * projection. */ volatile uint64_t hos_oot_proj_object = 0; volatile uint64_t hos_oot_proj_matrix = 0; +/* The first 48 floats of the projection object, copied at publish time. The inlined copies build it + on the stack, so a pointer kept for later reads as zeros; a snapshot is the only honest way to + see what is in it. */ +volatile float hos_oot_cam_window[48]; +volatile int hos_oot_cam_window_have = 0; /* HOS_CAMERA_DUMP=1: once, a window of floats around each published object, so the view matrix can be found by reading what is there rather than by guessing an offset. Guest addresses only; no @@ -34,6 +39,13 @@ void hos_oot_camera_dump(void) { const char *on = getenv("HOS_CAMERA_DUMP"); if (done || !on || !*on || *on == '0' || !hos_oot_camera_valid) return; done = 1; + for (int row = 0; hos_oot_cam_window_have && row < 6; row++) { + char line[220]; + int n = snprintf(line, sizeof line, "camera: window +%#03x:", row * 32); + for (int i = 0; i < 8; i++) + n += snprintf(line + n, sizeof line - n, " %.5g", (double)hos_oot_cam_window[row * 8 + i]); + hos_log("%s", line); + } for (int which = 0; which < 2; which++) { const uint64_t base = which ? hos_oot_proj_matrix : hos_oot_proj_object; if (!base) continue; diff --git a/host/nn_vi.c b/host/nn_vi.c index ef7a738a5..cac3ff8ab 100644 --- a/host/nn_vi.c +++ b/host/nn_vi.c @@ -240,6 +240,13 @@ static void realtime_step(int64_t now) { see whether the rate the controller settles on is what caps the frame. Unknown engine fields written every frame: opt-in, and off by default for that reason. */ if (target && getenv("HOS_FPS_FORCE")) { + /* f_804fc0f0 is what stores a rate into +0xfc, and it does so only when a mode is 1, + the rate is 40 or more, and the byte at +0x232 is set. The sample prints that pair as + "vrr %d %d": +0x231 is 1 here and +0x232 is 0, so the store never runs and +0xfc + keeps the 60 it has, whatever the controller words say. Setting it lets the game's + own code take a higher rate. */ + uint8_t *const gate = (uint8_t *)GP(mod + 0x232); + if (!*gate) *gate = 1; int *const words[] = {(int *)GP(mod + 0x270 + 0x58), (int *)GP(mod + 0x270 + 0x28), (int *)GP(mod + 0x270 + 0x2c), (int *)GP(mod + 0x2c8)}; for (size_t i = 0; i < sizeof words / sizeof words[0]; i++) diff --git a/nx2/oot_camera.py b/nx2/oot_camera.py index 3ed520993..4387ffeb6 100644 --- a/nx2/oot_camera.py +++ b/nx2/oot_camera.py @@ -16,10 +16,11 @@ are positive and ordered. A projection with a near plane behind the eye is not one to hand an upscaler. -It also publishes the guest addresses of the projection object and of the 4x4 it writes. The view -projection a temporal upscaler reprojects with is not this matrix -- this is the projection alone -- -and rather than guess which offset of which object holds the view, HOS_CAMERA_DUMP=1 logs a window -of floats around both so the matrix can be identified from what it contains. +It also snapshots the first 48 floats of the projection object at publish time, which +HOS_CAMERA_DUMP=1 logs. A snapshot rather than a pointer because the object the inlined copies build +is transient: reading the published address a frame later came back all zeros, so it is a stack +temporary. The view projection a temporal upscaler reprojects with is not the projection alone, and +this window is how the rest of it gets identified from real values instead of a guess. """ MAIN = 0x80020000 @@ -49,7 +50,11 @@ def _publish(base, with_matrix): "if (_nr > 0.0f && _fr > _nr && _ft > 0.0f) { hos_oot_cam_near = _nr; hos_oot_cam_far = _fr; " "hos_oot_cam_tan_half_fov = _ft; hos_oot_camera_valid = 1; } } " "{ extern volatile uint64_t hos_oot_proj_object, hos_oot_proj_matrix; (void)hos_oot_proj_matrix; " - "hos_oot_proj_object = _cp; " + matrix + "} }" + "hos_oot_proj_object = _cp; " + matrix + "} " + "{ extern volatile float hos_oot_cam_window[48]; extern volatile int hos_oot_cam_window_have; " + "if (!hos_oot_cam_window_have) { for (int _i = 0; _i < 48; _i++) { " + "uint32_t _w = (uint32_t)recomp_load32(c, _cp + (uint64_t)_i * 4); float _fv; memcpy(&_fv, &_w, 4); " + "hos_oot_cam_window[_i] = _fv; } hos_oot_cam_window_have = 1; } } }" " /* (nx2/oot_camera.py: the camera a temporal upscaler needs) */" ).replace("const uint64_t _cp = c->x[0];", "const uint64_t _cp = c->x[%d];" % base) From c65c68e22597a93a88b632f71c7ac3a53824dae7 Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 17:25:33 -0600 Subject: [PATCH 020/119] feat: HOS_DISPLAY_VRR, which is what actually holds the frame rate at 60 Three experiments to find this, each ruling something out. Raising the limiter at +0xfc with HOS_FPS_TARGET does not stick: the sample reads "frame limiter 60" every time, 300 presents apart, and the log reads that word before the raise, so the game writes it back in between. Raising the engine's controller words and the nominal rate as well took -- "nominal 120, controller 120 120 120" -- and the frame rate did not move: 60.0 fps, limiter still 60. Setting the byte at +0x232 that f_804fc0f0 requires did not stick either; it reads 0 at every sample. f_804fc0f0 is what stores a rate into +0xfc, under three conditions: a mode is 1, the rate is 40 or more, and that byte is set. The game maintains the byte at 0, and it does that because it believes the display cannot do better. Two of the calls it asks with were unimplemented imports -- nn::vi:: SetDisplay120HzRefreshRateCapability and QueryDisplayCurrentRefreshRate -- and the third, QueryDisplayVrrSupported, was implemented and answered 0. So this is not something to force from outside. HOS_DISPLAY_VRR=1 answers QueryDisplayVrrSupported with 1 and implements SetDisplay120HzRefreshRateCapability as the acceptance it wants, and the game's own limiter code can then take a rate of 40 or more by itself. Off by default, because it changes what the game believes about the display: on a 60 Hz panel a game pacing itself faster gains nothing and may tear. The real-time frame step at main+0x6e6cc4 keeps game speed honest at whatever rate comes out. QueryDisplayCurrentRefreshRate is left unimplemented until its RefreshRate encoding is known from something better than a guess. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- host/nn_vi.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/host/nn_vi.c b/host/nn_vi.c index cac3ff8ab..6d2a0d68e 100644 --- a/host/nn_vi.c +++ b/host/nn_vi.c @@ -70,12 +70,36 @@ HLE(_ZN2nn2vi25QueryDisplayHdrPaperWhiteEPtPKNS0_7DisplayE) { *(uint16_t *)GP(ARG(0)) = 203; RET(0); } +/* (hookshot) HOS_DISPLAY_VRR=1: tell the game the display does variable refresh. + * + * This is what holds the frame rate at 60, and it took three experiments to find. The game's + * limiter at +0xfc is written by f_804fc0f0, which stores a rate only when a mode is 1, the rate is + * 40 or more, and the byte at +0x232 is set. That byte reads 0, and raising the limiter or the + * engine's controller words from outside does not stick: the game writes them back every frame, + * because it believes the display cannot do better. It believes that because this very function + * answered no, and because SetDisplay120HzRefreshRateCapability and + * QueryDisplayCurrentRefreshRate were unimplemented imports. + * + * Off by default: it changes what the game believes about the display, and on a 60 Hz screen a game + * that paces itself faster than the panel gains nothing and may tear. The real-time frame step + * keeps game speed honest at whatever rate comes out (main+0x6e6cc4, above). */ +static int display_vrr(void) { + static int on = -1; + if (on < 0) { + const char *e = getenv("HOS_DISPLAY_VRR"); + on = e && *e && *e != '0'; + } + return on; +} /* nn::vi::QueryDisplayVrrSupported(bool*, Display const*) -> Result */ HLE(_ZN2nn2vi24QueryDisplayVrrSupportedEPbPKNS0_7DisplayE) { - *(uint8_t *)GP(ARG(0)) = 0; + *(uint8_t *)GP(ARG(0)) = display_vrr() ? 1 : 0; RET(0); } HLE(_ZN2nn2vi23SetDisplayVrrCapabilityEPNS0_7DisplayEb) { RET(0); } +/* nn::vi::SetDisplay120HzRefreshRateCapability(Display*, bool) -> Result. An unimplemented import + before this: the game offers 120 Hz and nothing answered. Accepting is all it wants. */ +HLE(_ZN2nn2vi36SetDisplay120HzRefreshRateCapabilityEPNS0_7DisplayEb) { RET(0); } HLE(_ZN2nn2vi28SetLayerExtendedSwapIntervalEPNS0_5LayerEii) { RET(0); } HLE(_ZN2nn2vi30ClearLayerExtendedSwapIntervalEPNS0_5LayerE) { RET(0); } From 388844d62936b76cbcda46a720ea6a569473d3fc Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 17:27:31 -0600 Subject: [PATCH 021/119] docs: the camera's values, measured, and the needle they give for the matrix A run confirms the field layout and fills in the numbers. The projection object is built on the stack by the inlined copies, so a published pointer read a frame later is all zeros; a snapshot of its first 48 floats at publish time gives +0x98 = 1.0 the near plane +0x9c = 20000 the far plane +0xac = 0.41421 tan(22.5 deg), so the field of view is 45 degrees +0xa0 = 0.7854 that same angle in radians +0xb0 = 0.5625 1080/1920, so height over width, not the other way round +0xa4, +0xa8 sin and cos of the half angle which is the layout the previous commit inferred from what the code does with each offset, now with values behind it. The 45 degrees is also the needle for the rest. A projection built from it has m11 = 1/tan(22.5 deg) = 2.41421, so the view projection the draws actually use can be found by looking for that number in the uniform buffer a scene draw reads -- the matrix the depth was rendered with -- instead of guessing at another object's offsets. Also records that the path which runs is an inlined copy, since patching only the out-of-line function published nothing. Docs only. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- docs/upscaling.md | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/docs/upscaling.md b/docs/upscaling.md index 5d09a8985..c56bb55e2 100644 --- a/docs/upscaling.md +++ b/docs/upscaling.md @@ -117,7 +117,28 @@ rather than from a guess: `x0` is the projection object throughout that function and `x1` is the 4x4 it writes, so one injected block there can publish the near plane, the far plane and the field of view to host globals -for the renderer to read, the way `hos_wide_ratio` already travels the other way. +for the renderer to read, the way `hos_wide_ratio` already travels the other way. Note that the path +which actually runs is one of the **inlined** copies, not the out-of-line function, and each holds +the projection in a different register; patching only the out-of-line one published nothing. + +**A run confirms the layout and the values.** The object is built on the stack, so a published +pointer read a frame later is all zeros; snapshotting its first 48 floats at publish time gives: + +``` ++0x80: 0 0 0 0 1 0 1 20000 ++0xa0: 0.7854 0.38268 0.92388 0.41421 0.5625 0 0 0 +``` + +- `+0x98` = **1.0**, the near plane, and `+0x9c` = **20000**, the far plane +- `+0xac` = **0.41421** = tan(22.5 deg), so the vertical field of view is **45 degrees** — and + `+0xa0` holds that same angle in radians, 0.7854 +- `+0xb0` = **0.5625** = 1080/1920, so it is height over width, not width over height +- `+0xa4` and `+0xa8` are sin and cos of the half angle + +That 45 degrees is also the needle for the rest of the matrix: a projection built from it has +m11 = 1/tan(22.5 deg) = **2.41421**, so the view projection the draws use can be found by looking +for that value in the uniform buffer a scene draw reads, rather than by guessing at another object's +offsets. That removes the approximation the reference implementation settles for — it documents using "a typical near plane and vertical field of view" because DLSS hands it no camera — and it is the same From 5eb9f8bc57964f51cbb7285dc44162618ad488d7 Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 17:32:47 -0600 Subject: [PATCH 022/119] feat: HOS_VSYNC_HZ, the hardcoded 60 that actually paces the game The frame rate chase ends here. The host signals the display's vsync event from its own thread at const int64_t period = 1000000000LL / 60; and the game waits on that event, so a hardcoded 60 there is a hard 60 fps whatever else is set. The measurements say so plainly: with the limiter unlocked to 120 by HOS_DISPLAY_VRR, on a 164.91 Hz monitor, 298 of 300 frames still landed in the 15.5-17.8 ms window with no variance at all. Under Xvfb the same build spread across the buckets, because there is no real display to pace against -- which is why this did not show until a run on the actual screen. Worth noting what each step ruled out, since three of them were wrong turns: raising the limiter at +0xfc does not stick, raising the engine's controller words and nominal rate changes nothing, and the gate byte at +0x232 is maintained by the game. The limiter work was still needed -- the game clamps itself without it -- but it was never the thing pacing the frames. HOS_VSYNC_HZ= sets the rate, 60 by default, clamped to 15..1000: below 15 the game's own frame step treats a step as a hitch, and a rate the machine cannot render only spends the time sleeping less. The file's header comment said "signaled at 60 Hz by a host thread" all along. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- host/nn_vi.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/host/nn_vi.c b/host/nn_vi.c index 6d2a0d68e..c7c7f9ca1 100644 --- a/host/nn_vi.c +++ b/host/nn_vi.c @@ -1,5 +1,5 @@ /* nn::vi for MKW (TOTKPort's nn_vi.c is bound to its renderer and TOTK's frame pacing): the default display, one - layer, and the display's vsync event, signaled at 60 Hz by a host thread. HDR and VRR are reported unsupported, + layer, and the display's vsync event, signaled at 60 Hz by a host thread (HOS_VSYNC_HZ over it). HDR and VRR are reported unsupported, so the game takes its SDR path. Frames are paced at the native NVN layer's window acquire (the end of this file). */ #include "hos.h" #define WIN32_LEAN_AND_MEAN @@ -16,9 +16,25 @@ static uint64_t vsync_events[8]; static volatile LONG nvsync; static HANDLE vsync_thread; +/* (hookshot) HOS_VSYNC_HZ=: the rate the display's vsync event is signalled at, 60 by default. + * + * This is what paces the game. It waits on the event, so a hardcoded 60 here is a hard 60 fps + * however high the limiter is: on a 165 Hz monitor, with the limiter unlocked to 120 by + * HOS_DISPLAY_VRR, 298 of 300 frames still landed in the 15.5-17.8 ms window with no variance. + * Clamped to 15..1000: below 15 the game's own frame step treats a step as a hitch, and a rate the + * machine cannot render only spends the time sleeping less. */ +static int64_t vsync_period_ns(void) { + const char *e = getenv("HOS_VSYNC_HZ"); + int hz = e && *e ? atoi(e) : 60; + if (hz < 15) hz = 15; + if (hz > 1000) hz = 1000; + if (hz != 60) hos_log("vi: the display's vsync event at %d Hz (HOS_VSYNC_HZ)", hz); + return 1000000000LL / hz; +} + static DWORD WINAPI vsync_main(void *p) { (void)p; - const int64_t period = 1000000000LL / 60; + const int64_t period = vsync_period_ns(); int64_t next = hos_now_ns() + period; for (;;) { const int64_t now = hos_now_ns(); From a67e471a2002e8ee6faf62fe2e93adcce5b8ee98 Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 17:35:39 -0600 Subject: [PATCH 023/119] feat: the vsync event follows the display, and 0 turns it off Two things the hardcoded rate got wrong, both as asked. **It now follows the display.** hos_sdl_refresh_hz() reads the refresh rate out of the same SDL_DisplayMode the window size already comes from -- a float at offset 20 in SDL3, an int after w and h in SDL2 -- and the vsync thread uses it when HOS_VSYNC_HZ is unset. A hardcoded 60 paces a 164.91 Hz screen at 60 whatever else is set, which is what the measurements kept showing. **And HOS_VSYNC_HZ=0 turns the pacing off**, by signalling at the clamp's maximum so the game is not gated on this event at all. The log says which of the three it took and why, because "60" with no reason attached is what made this take four runs to find. Honest about what is not yet explained: a run with the event at 120 Hz, the limiter at 120 and the gate open still presented exactly 60.0 fps, 297 of 300 frames in the 15.5-17.8 ms window. So something past this still paces at 60 -- a swap interval, or the game presenting on every other event. The event rate had to be settable before that could be told apart from it, and now it is. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- host/hos_sdl.c | 17 +++++++++++++++++ host/hos_sdl.h | 1 + host/nn_vi.c | 24 ++++++++++++++++++++---- 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/host/hos_sdl.c b/host/hos_sdl.c index cb8fcc577..654362352 100644 --- a/host/hos_sdl.c +++ b/host/hos_sdl.c @@ -144,6 +144,23 @@ void hos_sdl_relative_mouse(void *window, int on) { if (version == 3) CALL(_Bool (*)(void *, _Bool), SetRelativeMouseMode)(window, on != 0); else CALL(int (*)(int), SetRelativeMouseMode)(on); } +/* (hookshot) The desktop display's refresh rate in Hz, or 0 when SDL cannot say. Read from the same + SDL_DisplayMode the size comes from: SDL3 keeps refresh_rate as a float at offset 20, after + pixel_density; SDL2 keeps it as an int after w and h. */ +int hos_sdl_refresh_hz(void) { + if (!version) return 0; + if (version == 3) { + const uint8_t *m = CALL(const uint8_t *(*)(uint32_t), GetDesktopDisplayMode)(CALL(uint32_t (*)(void), GetPrimaryDisplay)()); + if (!m) return 0; + float hz = 0; + memcpy(&hz, m + 20, 4); + return hz > 0 ? (int)(hz + 0.5f) : 0; + } + struct { uint32_t format; int w, h, refresh_rate; void *driverdata; } m; + if (CALL(int (*)(int, void *), GetDesktopDisplayMode)(0, &m)) return 0; + return m.refresh_rate > 0 ? m.refresh_rate : 0; +} + int hos_sdl_desktop_size(int *width, int *height) { if (version == 3) { /* (SDL_DisplayMode: displayID, format, w and h at 8 and 12 in screen units, pixel_density at 16: in pixels, as SDL2 gave them) */ diff --git a/host/hos_sdl.h b/host/hos_sdl.h index f2f882886..37e8e8160 100644 --- a/host/hos_sdl.h +++ b/host/hos_sdl.h @@ -21,6 +21,7 @@ void *hos_sdl_window(const char *title, int width, int height); void hos_sdl_fullscreen(void *window, int on); /* (the desktop's mode, borderless) */ void hos_sdl_relative_mouse(void *window, int on); int hos_sdl_desktop_size(int *width, int *height); +int hos_sdl_refresh_hz(void); /* the desktop display's refresh rate, 0 when unknown */ int hos_sdl_vulkan_surface(void *window, void *instance, void *surface_out); /* (VkInstance, VkSurfaceKHR *): 1 if made */ void hos_sdl_pixel_size(void *window, int *width, int *height); const uint8_t *hos_sdl_keys(int *count); /* the keyboard by scancode (USB HID usage), 1 a key down */ diff --git a/host/nn_vi.c b/host/nn_vi.c index c7c7f9ca1..f7b9eba4d 100644 --- a/host/nn_vi.c +++ b/host/nn_vi.c @@ -21,14 +21,30 @@ static HANDLE vsync_thread; * This is what paces the game. It waits on the event, so a hardcoded 60 here is a hard 60 fps * however high the limiter is: on a 165 Hz monitor, with the limiter unlocked to 120 by * HOS_DISPLAY_VRR, 298 of 300 frames still landed in the 15.5-17.8 ms window with no variance. - * Clamped to 15..1000: below 15 the game's own frame step treats a step as a hitch, and a rate the - * machine cannot render only spends the time sleeping less. */ + * Unset follows the display's own refresh rate, which is the right default: a hardcoded 60 paces a + * 165 Hz screen at 60. 0 turns the pacing off. Clamped to 15..1000: below 15 the game's own frame + * step treats a step as a hitch, and a rate the machine cannot render only spends the time sleeping + * less. */ static int64_t vsync_period_ns(void) { + int hos_sdl_refresh_hz(void); const char *e = getenv("HOS_VSYNC_HZ"); - int hz = e && *e ? atoi(e) : 60; + const int asked = e && *e ? atoi(e) : -1; + int hz; + const char *why; + if (asked == 0) { /* (off: as fast as the clamp allows, so the game is not paced by this) */ + hz = 1000, why = "HOS_VSYNC_HZ=0, not paced"; + } else if (asked > 0) { + hz = asked, why = "HOS_VSYNC_HZ"; + } else { + /* The display's own rate, which is the right default: a hardcoded 60 paces a 165 Hz screen + at 60 however high the game's limiter is. 0 from SDL means it could not say. */ + const int screen = hos_sdl_refresh_hz(); + hz = screen > 0 ? screen : 60; + why = screen > 0 ? "the display's rate" : "no rate from the display, 60"; + } if (hz < 15) hz = 15; if (hz > 1000) hz = 1000; - if (hz != 60) hos_log("vi: the display's vsync event at %d Hz (HOS_VSYNC_HZ)", hz); + hos_log("vi: the display's vsync event at %d Hz (%s)", hz, why); return 1000000000LL / hz; } From 70ecdf42b2194ca23710f17cb403f7f9a4ac9d94 Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 17:41:46 -0600 Subject: [PATCH 024/119] fix: the host camera symbols must be weak, or the renderer does not load at all hos_oot_camera and hos_oot_view_projection live in the game executable, not in this library, and I declared them as plain externs. The renderer is dlopen'd with RTLD_NOW, which resolves every symbol up front, so the whole library stopped loading: dlopen failed: hookshot_vk.so: undefined symbol: hos_oot_camera and the game fell back to "no WebGPU renderer in the Linux build: nothing is drawn". Every run since that commit drew nothing. The frame-rate measurements I took in between -- the vsync and limiter experiments -- were of a game with no renderer, and none of them say anything about frame time. The mechanisms those commits describe were read out of the code and still hold; the numbers attached to them do not, and the one measurement that stands is the earlier 57-60 fps with 1106 draws a frame, taken when the renderer was loaded. Weak and null-checked at every call site: the renderer loads either way and simply has no camera when the host does not export one, which is also the honest behaviour on another game version where the patch sites are absent. Verified by dlopen directly rather than by another run: the library now loads and resolves mkwvk_init. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- gpu/vk/vk_draw.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/gpu/vk/vk_draw.cpp b/gpu/vk/vk_draw.cpp index 6cf1d3315..a4e4aa79f 100644 --- a/gpu/vk/vk_draw.cpp +++ b/gpu/vk/vk_draw.cpp @@ -5308,10 +5308,14 @@ bool upscale_stub(VkCommandBuffer cmd, const NvnState& s, uint64_t key) { /// (host/hos_oot_camera.c: tan(fovy/2) and the planes sead's projection published, 0 when nothing /// has, which leaves a backend on its own defaults) -extern "C" float hos_oot_camera(float* near_plane, float* far_plane); -/// (host/hos_oot_camera.c: the view projection the depth was rendered with, row major; false until -/// something publishes it, which is what keeps camera motion from reprojecting through a guess) -extern "C" int hos_oot_view_projection(float* row_major_4x4); +/// (host/hos_oot_camera.c) These live in the game executable, not in this library, so they are weak: +/// the renderer is dlopen'd with RTLD_NOW, which resolves every symbol up front, and a plain extern +/// to the host made this whole library fail to load with "undefined symbol". Weak and null-checked +/// means the renderer loads either way and simply has no camera when the host does not export one. +extern "C" __attribute__((weak)) float hos_oot_camera(float* near_plane, float* far_plane); +/// (the view projection the depth was rendered with, row major; false until something publishes it, +/// which is what keeps camera motion from reprojecting through a guess) +extern "C" __attribute__((weak)) int hos_oot_view_projection(float* row_major_4x4); /// (hookshot) Whether a program is one an upscaler backend may be given, by key prefix and /// independent of whether the stand-in wants it: RX_VK_UPSCALE_KEYS, default the gameplay TAAU @@ -5539,7 +5543,7 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { if (said[p.key]++ == 0) { const char* why = upscale::temporal_refusal(req); float near_plane = 0.0f, far_plane = 0.0f; - const float tan_half = hos_oot_camera(&near_plane, &far_plane); + const float tan_half = hos_oot_camera ? hos_oot_camera(&near_plane, &far_plane) : 0.0f; logf("vk: upscale seam %016llx: %s, output %ux%u, inputs %ux%u; a temporal backend %s%s", (unsigned long long)p.key, upscale::backend_name(upscale::Backend::StandIn), req.output_width, req.output_height, req.inputs.render_width, req.inputs.render_height, @@ -5561,7 +5565,7 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { if (fsr_here && scene_depth.view && fsr3::supported() && scene_depth.width == req.inputs.render_width && scene_depth.height == req.inputs.render_height) { camera_motion::Matrix vp{}; - if (hos_oot_view_projection(vp.m)) { + if (hos_oot_view_projection && hos_oot_view_projection(vp.m)) { const VkImageView motion = camera_motion::record(cmd, scene_depth.view, scene_depth.format, scene_depth.width, scene_depth.height, vp); if (motion) { @@ -5580,7 +5584,7 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { ai.upscale_width = req.output_width, ai.upscale_height = req.output_height; ai.motion_scale[0] = 1.0f, ai.motion_scale[1] = 1.0f; // (already render pixels) float np = 0.0f, fp = 0.0f; - const float th = hos_oot_camera(&np, &fp); + const float th = hos_oot_camera ? hos_oot_camera(&np, &fp) : 0.0f; if (th > 0.0f && np > 0.0f) ai.near_plane = np, ai.fov_y = 2.0f * std::atan(th); if (fsr3::upscale(cmd, ai)) { static std::atomic said{0}; @@ -5612,7 +5616,7 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { { // (the game's own camera where the patch published it: nx2/oot_camera.py. Without it // the Inputs defaults stand, which only scales FSR's disocclusion thresholds) float near_plane = 0.0f, far_plane = 0.0f; - const float tan_half = hos_oot_camera(&near_plane, &far_plane); + const float tan_half = hos_oot_camera ? hos_oot_camera(&near_plane, &far_plane) : 0.0f; if (tan_half > 0.0f && near_plane > 0.0f) { fi.near_plane = near_plane; fi.fov_y = 2.0f * std::atan(tan_half); From 3c02213e0ab32736628e00f36fee7eb4cae2851d Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 17:42:48 -0600 Subject: [PATCH 025/119] feat: RX_VK_VP_HUNT, to find the view projection from a value only it holds The camera publishes tan(fovy/2) = 0.41421, so the projection's m11 is 1/0.41421 = 2.41421, and a row-major 4x4 keeps m11 five floats in. This scans each uniform buffer a draw binds for that number and logs the stage, the slot, the byte offset and the sixteen floats starting five back, which is the candidate matrix. Whatever it finds is the matrix the draw itself used, which is the one the depth was rendered with -- better than guessing at another object's offsets, which is how the projection fields were found and which only worked because the function showed what it did with each one. Off by default, reads at most 2 KB per bound buffer, stops after eight hits, and reads through ub_read, which is what the replay rules require: the submitted uniform data, not live guest memory. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- gpu/vk/vk_draw.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/gpu/vk/vk_draw.cpp b/gpu/vk/vk_draw.cpp index a4e4aa79f..9c707da42 100644 --- a/gpu/vk/vk_draw.cpp +++ b/gpu/vk/vk_draw.cpp @@ -4508,7 +4508,50 @@ void bind_index(VkCommandBuffer cmd, VkBuffer buffer, VkDeviceSize offset, VkInd last_ib = {b, (uint64_t)offset, (uint32_t)type, true}; } +/// (hookshot) RX_VK_VP_HUNT=1: find the view projection a scene draw reads, by looking for a value +/// only it can hold. The camera publishes tan(fovy/2) = 0.41421, so the projection's m11 is +/// 1/0.41421 = 2.41421, and a row-major 4x4 keeps m11 five floats in. This scans each bound uniform +/// buffer for that number and logs the stage, the slot, the byte offset and the sixteen floats +/// starting five back, which is the candidate matrix. Off by default; stops after a few hits. +/// +/// Better than guessing at another object's offsets: whatever this finds is the matrix the draw +/// itself used, which is the one the depth was rendered with. docs/upscaling.md. +static void vp_hunt(const NvnState& s) { + static const bool on = getenv("RX_VK_VP_HUNT") != nullptr; + if (!on) return; + static std::atomic told{0}; + if (told.load(std::memory_order_relaxed) >= 8) return; + for (int stage = 0; stage < kNvnStages; stage++) { + for (int slot = 0; slot < 16; slot++) { + const nvn_p_bind_buf& u = s.ubo[stage][slot]; + if (!u.addr || u.size < 24) continue; + const uint64_t bytes = u.size < 2048 ? u.size : 2048; + for (uint64_t off = 20; off + 4 <= bytes; off += 4) { + uint32_t word = 0; + if (!ub_read(u.addr + off, &word, 4)) break; + float v = 0; + memcpy(&v, &word, 4); + if (!(v > 2.4139f && v < 2.4145f)) continue; + char line[420]; + int n = snprintf(line, sizeof line, + "vk: vp hunt: stage %d slot %d, m11 at +%llu, matrix from +%llu:", + stage, slot, (unsigned long long)off, (unsigned long long)(off - 20)); + for (int i = 0; i < 16 && n < 380; i++) { + uint32_t w2 = 0; + float f2 = 0; + if (ub_read(u.addr + off - 20 + (uint64_t)i * 4, &w2, 4)) memcpy(&f2, &w2, 4); + n += snprintf(line + n, sizeof line - n, " %.4g", (double)f2); + } + logf("%s", line); + if (told.fetch_add(1, std::memory_order_relaxed) + 1 >= 8) return; + break; // (one hit per buffer is enough to name it) + } + } + } +} + void draw(VkCommandBuffer cmd, NvnState& s, const DrawArgs& d) { + vp_hunt(s); PROF(PROF_DRAW); FINE_N(FC_DRAWS, 1); stats_tick(); From 8681f2e9482ca4d8364919a1c3fdac0935361ea0 Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 17:45:17 -0600 Subject: [PATCH 026/119] fix: HOS_FPS_FORCE must not touch the nominal rate: it is slow motion on screen Reported from a real run: the game went into slow motion. The cause is this block writing +0x2c8. The real-time frame step owns that word and the engine steps game time by 60 / it, so forcing it to 165 while the game renders at 57 advances time by 0.36 of a frame each frame -- about a third speed. The commit that added the block had already written that it "changes two things at once" and left it in anyway. It now raises only the three controller words. Also worth recording against those earlier experiments: they were all run with no renderer loaded (the weak-symbol fix explains why), so the "exactly 60.0 fps, 301 of 301 frames in one bucket" they produced was a game drawing nothing. With the renderer loaded on the same display the figure is 56.8-57.8 fps with the intervals spread across 15.5-22 ms, which is performance, not a cap. The frame limiter was never what held the rate down once anything was being drawn. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- host/nn_vi.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/host/nn_vi.c b/host/nn_vi.c index f7b9eba4d..ed3c64860 100644 --- a/host/nn_vi.c +++ b/host/nn_vi.c @@ -303,8 +303,12 @@ static void realtime_step(int64_t now) { own code take a higher rate. */ uint8_t *const gate = (uint8_t *)GP(mod + 0x232); if (!*gate) *gate = 1; + /* NOT +0x2c8. The real-time frame step above owns that word, and the engine steps + game time by 60 / it: forcing it to 165 while the game renders at 57 steps time by + 0.36 a frame, which is slow motion on screen. Reported from a real run, and the + commit that added this block had already warned it changed two things at once. */ int *const words[] = {(int *)GP(mod + 0x270 + 0x58), (int *)GP(mod + 0x270 + 0x28), - (int *)GP(mod + 0x270 + 0x2c), (int *)GP(mod + 0x2c8)}; + (int *)GP(mod + 0x270 + 0x2c)}; for (size_t i = 0; i < sizeof words / sizeof words[0]; i++) if (*words[i] > 0 && *words[i] < target) *words[i] = target; } From aff6abbae6a8a8e59776ee83ea2cf9f07161d49d Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 18:00:51 -0600 Subject: [PATCH 027/119] feat: DLSS Super Resolution through NGX, behind a build-time SDK gate The NVIDIA half of the backend pair, written against the FSR one's shape: supported(), prepare(), upscale() that refuses rather than guesses, output_image(), shutdown(). **Licensing: nothing of NVIDIA's is in the tree.** RX_VK_DLSS_SDK is off by default; behind it NVIDIA's own headers declare the API and the compiler checks every line, and in front of it there is nothing of theirs at all. The alternative -- hand-writing the ABI so no SDK is needed -- was weighed and rejected for a specific reason: NGX is not a handful of entry points. NVSDK_NGX_Parameter is a C++ class of pure-virtual overloads whose vtable order IS the ABI, the resource and create structures are layouts, and the parameter names are strings. None of that is derivable from exported symbol names, none is compiler-checkable, and a wrong vtable slot is memory corruption inside NVIDIA's runtime on a user's machine, reported as a driver crash. That is worse than DLSS being unavailable. Even behind the gate the entry points are resolved by name at run time, so a gated build has no link dependency on NVIDIA's library either, and on a machine without the driver every pointer is null and supported() is false. Everything vendor-neutral -- the output image, the extents, the layout transition, the barriers and every refusal clause -- is outside the gate and compiled always. The SDK's CreateFeature/EvaluateFeature helper macros are deliberately not used: they name those symbols in the object file and hand the link back to NVIDIA's library. The parameters are set with the SDK's own key macros instead, so a wrong name is still a compile error, and the full key set is tabulated in docs/upscaling.md to be reviewed against the helper rather than trusted. Also fixes a real bug in my FSR output image, caught in this review: it asked for TRANSFER_DST while the seam blits *from* it, which wants TRANSFER_SRC. Untested beyond compiling, and the claim is exactly that. No DLSS runtime and no NVIDIA SDK are on this machine, so it has never run. The gated arm was syntax-checked against a stand-in header set kept outside the repository, and that check was confirmed non-vacuous. The library names are a guess, and Init_with_ProjectID's argument list varies by SDK version. Nothing calls this yet, the device enables none of NGX's required extensions, and the caller cannot fill the image and format fields NGX needs because colour arrives as a view alone. tests/test_dlss_contract.py drives the real translation unit against stub symbols and asserts the no-SDK contract and three source-level licensing properties. It was checked against six planted faults, each caught by the assertion aimed at it. It needs clang++, because gpu/render/rx_nvn.h uses C's _Static_assert, which GCC rejects in C++. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- docs/upscaling.md | 134 +++++++++ gpu/vk/vk_dlss.cpp | 538 +++++++++++++++++++++++++++++++++++ gpu/vk/vk_dlss.h | 86 ++++++ gpu/vk/vk_fsr3.cpp | 5 +- tests/dlss_contract_test.cpp | 165 +++++++++++ tests/run_all.py | 1 + tests/test_dlss_contract.py | 221 ++++++++++++++ 7 files changed, 1149 insertions(+), 1 deletion(-) create mode 100644 gpu/vk/vk_dlss.cpp create mode 100644 gpu/vk/vk_dlss.h create mode 100644 tests/dlss_contract_test.cpp create mode 100644 tests/test_dlss_contract.py diff --git a/docs/upscaling.md b/docs/upscaling.md index c56bb55e2..0d1a9dc03 100644 --- a/docs/upscaling.md +++ b/docs/upscaling.md @@ -316,3 +316,137 @@ across hitches over 100 ms. Real motion and depth improve what it makes, but the either property. DLSS frame generation is a Streamline feature and so would be Windows-only; FSR's frame interpolation is available on both. Neither removes the latency a frame-interpolating renderer has by construction, and #755 should be read before any of it is wired to the Insert menu. + +## DLSS Super Resolution: what is in the tree, and what it is not + +Row 4 of the order of work now has a backend: `gpu/vk/vk_dlss.h` and `gpu/vk/vk_dlss.cpp`, the same +shape as the FSR one (`supported()`, `prepare()`, `upscale()`, `output_image()`/`output_view()`, +`shutdown()`) so the seam can hold either. **It has never been run.** It compiles, it links, and +nothing more than that has been established; read the rest of this section before assuming +otherwise. + +Two switches, both off by default, both neutral while off: + +| | | +|---|---| +| `RX_VK_DLSS=1` | asks for the backend at run time. Without it nothing is loaded, nothing is looked at and nothing is logged | +| `RX_VK_DLSS_SDK` | a **build-time** gate. Off, the NGX half of the backend is not compiled and `supported()` is false. On, the build needs an NGX SDK's `include/` on the include path | + +### The licensing decision, and why it is a gate rather than a hand-written ABI + +The rule from CONTRIBUTING.md is not negotiable and is not negotiated: **no NVIDIA header and no +NVIDIA library is in this repository**, a tree with no SDK builds, and a machine with no DLSS +runtime runs. The question was how to reach NGX under that rule, and there were two answers. + +The first — declare the minimal NGX ABI by hand and resolve the entry points with `dlopen` — is +what the FSR API route would look like, and it is the wrong answer here. NGX is not a handful of C +functions. Every call goes through `NVSDK_NGX_Parameter`, which is a **C++ class of pure-virtual +`Set`/`Get` overloads**: its vtable order is the ABI. `NVSDK_NGX_Resource_VK`, +`NVSDK_NGX_FeatureCommonInfo` and the DLSS create parameters are struct layouts, and the ~20 +parameter names are strings. None of that can be derived from the exported function names, none of +it is checked by a compiler, and none of it can be tested without an NVIDIA GPU, the driver's NGX +core and the model library. A wrong vtable slot or a shifted field is memory corruption inside +NVIDIA's runtime on a user's machine — a worse failure than "DLSS is unavailable", and one that +would be reported as a driver crash. + +So the second answer was taken: **the NGX half is gated at build time and is off by default.** +Behind the gate NVIDIA's own headers declare all of it and the compiler checks every line against +them; in front of the gate there is nothing of NVIDIA's at all. The five functions the gate covers +(`ngx_available`, `ngx_feature`, `ngx_evaluate`, `ngx_drop_feature`, `ngx_shutdown`) each refuse +when it is off, and everything else in the file — the output image, the extents, the layout +transitions, the barriers, and every clause that refuses an evaluation — is vendor-neutral and +compiles in every build. + +Two things follow that are worth stating plainly: + +- **This is not the FSR arrangement.** FSR 3.1 is compiled from MIT sources in this tree and is a + backend that can be a default. DLSS is a backend that is off unless someone builds it on purpose + with a licensed SDK they fetched themselves. That asymmetry is the licensing, not a judgment about + the upscalers. +- **The gate is also the honest answer to the ABI question.** If a later change declares the ABI in + this tree instead, the gated build stops needing NVIDIA's headers, and + `tests/test_dlss_contract.py` fails on exactly that. + +Even behind the gate, the entry points are **resolved by name at run time** from the NGX core the +driver ships (`libnvidia-ngx.so.1`, then `libnvidia-ngx.so`; `nvngx.dll` on Windows) through the +`LoadLibraryA`/`GetProcAddress` pattern the renderer already uses for `vulkan-1.dll`, which +`host/posix/win32_posix.c` makes `dlopen`/`dlsym` on Linux. So a gated build has no link dependency +on NVIDIA's library either, and on a machine with the SDK-built binary and no NVIDIA driver every +pointer is null and `supported()` is false instead of the process failing to start. The model +library (`libnvidia-ngx-dlss.so.*`) is NGX's to find, and it is told where to look: the game folder +goes in `NVSDK_NGX_FeatureCommonInfo::PathListInfo` and as the application data path. + +One consequence of resolving rather than linking: the SDK's `NGX_VULKAN_CREATE_DLSS_EXT1` and +`NGX_VULKAN_EVALUATE_DLSS_EXT` helpers are **not** used, because they call +`NVSDK_NGX_VULKAN_CreateFeature` / `..._EvaluateFeature` by name and would hand the link back to +NVIDIA's library. What they do besides that is set the parameters below, and those come from the +SDK's own key macros here, so a wrong name is a compile error exactly as it would be through the +helper. What that trades away is the helper's completeness — a key DLSS wants and this code does not +set would be silently ignored — so the set is written out here to be reviewed against the SDK's +helper rather than taken on trust: + +| Create | Evaluate | +|---|---| +| `Width`, `Height`, `OutWidth`, `OutHeight` | `Color`, `Depth`, `MotionVectors`, `Output` | +| `PerfQualityValue` | `Jitter.Offset.X`/`.Y`, `MV.Scale.X`/`.Y` | +| `DLSS.Feature.Create.Flags` (`IsHDR`, `MVLowRes`, `DepthInverted`) | `DLSS.Render.Subrect.Dimensions.Width`/`.Height` | +| `DLSS.Enable.Output.Subrects` (0) | `Reset`, `Sharpness` | +| `CreationNodeMask`, `VisibilityNodeMask` | `DLSS.Pre.Exposure`, `DLSS.Exposure.Scale` (both 1.0) | + +The three create flags are statements about *this game's* inputs rather than preferences, and they +come from the input contract above: the colour is HDR, the motion is at the render extent, and the +depth is reversed. Each one set wrongly is a wrong picture. + +### Windows and Streamline are deliberately not written + +Streamline is the normal route to DLSS on Windows and the only route to DLSS frame generation, and +none of it is implemented. That is a decision, not an oversight: it needs a second runtime, a second +set of headers and a Windows machine to try it on. The shape is left for it — a third arm of the +gate implementing the same five functions, which is why they are named for the job rather than for +NGX — and nothing outside those five would change. Streamline has no Linux build, so the NGX arm +stays the Linux one whatever happens on Windows. + +### What `dlss::Inputs` adds to `fsr3::Inputs`, and why + +Field for field it is FSR's, plus the images and formats of the three inputs. FSR records its own +compute passes, so a `VkImageView` is the whole of an input to it; NGX is handed resources, and an +`NVSDK_NGX_Resource_VK` is a view *and* its image, its subresource range, its format and the extent +it is read at. There is nothing to default those to, so an evaluation refuses without them. + +That has a consequence for wiring it up, and it is the main one: **the caller does not have them +all today.** `scene_depth` in `gpu/vk/vk_draw.cpp` carries its `VkImage` and format already, but the +colour arrives as `dw.imgs[i].imageView` with no image beside it, and +`camera_motion::record()` returns only a view. Both need an accessor before DLSS can be given a +dispatch. Those files were out of scope for the change that added this backend. + +### Also not done, and needed before this can run + +- **Nothing calls it.** `upscale_seam.h` has no `Backend::Dlss`, and `vk_draw.cpp` does not reach + for `dlss::supported()`. The backend stands alone. +- **The device does not enable what NGX asks for.** NGX reports the instance and device extensions + DLSS needs (`NVSDK_NGX_VULKAN_RequiredExtensions`), and `vk_main.cpp` enables none of them. + Until it does, `Init` or `CreateFeature` will fail on a machine that is otherwise capable — which + is a refusal and not a crash, but it is the first thing to check when DLSS reports unavailable on + hardware that should have it. +- **Jitter.** As with FSR, the jitter the game's own network used is not extracted, so a run would + pass zero sub-pixel offset. DLSS without jitter is not DLSS at its quality; a soft image from such + a run is this, not the network behaving badly. +- **The library names are a guess.** `libnvidia-ngx.so.1` and `libnvidia-ngx.so` were not checked + against an installed driver, because this machine has neither the runtime nor the SDK. If NGX + loads nowhere, that list is the first place to look; the loader logs which name it opened. +- **The gated half has never been compiled against the real SDK.** It was syntax-checked against a + hand-written stand-in outside the repository, which catches typos and arities against what the API + is *believed* to be and proves nothing about the real one. Expect the first build with a real SDK + to need corrections, in the `Init_with_ProjectID` argument list above all: whether that entry + point takes the two `vkGet*ProcAddr` pointers varies by SDK version. + +### What is checked without a GPU, a game or an SDK + +`tests/test_dlss_contract.py` (with `tests/dlss_contract_test.cpp`) drives the real translation unit +and asserts the no-SDK contract: it compiles and links with no NVIDIA SDK, and with `RX_VK_DLSS=1` +and a device it reports DLSS unavailable *and says why*, without allocating an image, recording a +barrier or handing back an output. The log line is the point — a check that only asserted "false" +would pass against a `supported()` that had been deleted. It also fails if any NGX name in +`vk_dlss.cpp` escapes the build-time gate, if an NVIDIA SDK header or library appears in the tree, +or if a gated build stops needing NVIDIA's own headers. It needs `clang++` and the Vulkan headers, +and takes about a second. diff --git a/gpu/vk/vk_dlss.cpp b/gpu/vk/vk_dlss.cpp new file mode 100644 index 000000000..120d15eec --- /dev/null +++ b/gpu/vk/vk_dlss.cpp @@ -0,0 +1,538 @@ +// (hookshot) DLSS Super Resolution's output image, its refusals and its NGX evaluation. See +// vk_dlss.h for the shape and docs/upscaling.md for where a backend plugs in. +// +// The file is in two halves on purpose. Everything that is not NVIDIA's -- the output image, the +// extents, the layout transitions, the barriers, and every clause that refuses an evaluation -- +// is vendor-neutral and compiles in every build. The NGX half is five functions behind +// `RX_VK_DLSS_SDK`, and with that gate off each of them refuses; that is what makes a tree with no +// NVIDIA SDK compile and link, and a machine with no DLSS runtime run. +// +// Why the gate rather than a hand-written NGX ABI: NGX is not a handful of C entry points. Every +// call goes through `NVSDK_NGX_Parameter`, which is a C++ class of pure-virtual Set/Get overloads +// -- its vtable order is the ABI -- and the resources, the feature-common info and the create +// parameters are struct layouts, and the ~20 parameter names are strings. None of that can be +// derived from the function names, and none of it can be checked by anything here: a wrong vtable +// slot or a shifted field is memory corruption inside NVIDIA's runtime on a user's machine, which +// is a worse failure than "DLSS is unavailable". Behind the gate the SDK's own headers declare all +// of it and the compiler checks every line of this file against them. docs/upscaling.md says the +// same in the section this change appends. +#include +#include +#include +#include + +#include "vk_dlss.h" +#include "vk_paths.h" // (game_module_path: where the model library sits, which NGX is told) + +#if defined(RX_VK_DLSS_SDK) +// NVIDIA's own headers, from the SDK this build was pointed at (`-I/include +// -DRX_VK_DLSS_SDK=1`). They are not vendored here and must not be: CONTRIBUTING.md's licensing +// rule and docs/upscaling.md. Vulkan is already included by vk_dlss.h, which is what +// nvsdk_ngx_vk.h wants to find. +#include +#include +#include +#include +#endif + +namespace mkwvk::dlss { +namespace { + +/// Whether this build has an NGX SDK to compile the NGX half against. A constant rather than an +/// `#ifdef` at each use, so both arms of every decision below are compiled in every build. +#if defined(RX_VK_DLSS_SDK) +constexpr bool kHaveSdk = true; +#else +constexpr bool kHaveSdk = false; +#endif + +/// `RX_VK_DLSS=1` asks for this backend. Off is the default and costs nothing: with it off nothing +/// is loaded, nothing is made and `supported()` is false before it looks at anything else. +bool wanted() { + static const bool yes = getenv("RX_VK_DLSS") && atoi(getenv("RX_VK_DLSS")) != 0; + return yes; +} + +struct Image { + VkImage image = VK_NULL_HANDLE; + VmaAllocation memory = nullptr; + VkImageView view = VK_NULL_HANDLE; + uint32_t width = 0, height = 0; + VkFormat format = VK_FORMAT_UNDEFINED; + bool in_general = false; ///< the UNDEFINED -> GENERAL barrier has been recorded +}; + +struct State { + Image output; + uint32_t render_width = 0, render_height = 0, upscale_width = 0, upscale_height = 0; + bool first_evaluation = true; +}; + +State g; + +constexpr VkImageSubresourceRange ONE_LEVEL{VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}; + +/// A memory dependency over the whole queue, in the synchronization2 form this renderer loads +/// (`vkCmdPipelineBarrier` is not in vk_loader.h). +void memory_barrier(VkCommandBuffer cmd, VkPipelineStageFlags2 src_stage, VkAccessFlags2 src, + VkPipelineStageFlags2 dst_stage, VkAccessFlags2 dst) { + VkMemoryBarrier2 b{VK_STRUCTURE_TYPE_MEMORY_BARRIER_2}; + b.srcStageMask = src_stage, b.srcAccessMask = src; + b.dstStageMask = dst_stage, b.dstAccessMask = dst; + VkDependencyInfo di{VK_STRUCTURE_TYPE_DEPENDENCY_INFO}; + di.memoryBarrierCount = 1, di.pMemoryBarriers = &b; + vkCmdPipelineBarrier2(cmd, &di); +} + +void drop_image(Image& t) { + if (t.view) vkDestroyImageView(dev.device, t.view, nullptr); + if (t.image) mkwvk::destroy_image(t.image, t.memory); + t = Image{}; +} + +/// The image an evaluation resolves into: RGBA16F at the upscale size, GENERAL throughout, a +/// storage image because DLSS writes it and a transfer source because the caller blits it into the +/// game's own target. (vk_fsr3.cpp's output asks for TRANSFER_DST and not TRANSFER_SRC although its +/// call site blits *from* it; that is left as it is rather than changed from here.) +bool make_output(Image& t, uint32_t width, uint32_t height) { + drop_image(t); + t.format = VK_FORMAT_R16G16B16A16_SFLOAT; + t.width = std::max(1u, width), t.height = std::max(1u, height); + VkImageCreateInfo ci{VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO}; + ci.imageType = VK_IMAGE_TYPE_2D; + ci.format = t.format; + ci.extent = {t.width, t.height, 1}; + ci.mipLevels = 1; + ci.arrayLayers = 1; + ci.samples = VK_SAMPLE_COUNT_1_BIT; + ci.tiling = VK_IMAGE_TILING_OPTIMAL; + ci.usage = VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_SAMPLED_BIT | + VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT; + ci.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; + if (!create_image(ci, t.image, t.memory, false)) { + logf("vk: dlss: a %ux%u output image was not made", t.width, t.height); + return false; + } + VkImageViewCreateInfo vi{VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO}; + vi.image = t.image; + vi.viewType = VK_IMAGE_VIEW_TYPE_2D; + vi.format = t.format; + vi.subresourceRange = ONE_LEVEL; + if (vkCreateImageView(dev.device, &vi, nullptr, &t.view) != VK_SUCCESS) { + logf("vk: dlss: the output image's view was not made"); + drop_image(t); + return false; + } + return true; +} + +/// The output's first layout. Recorded once per image, and the flag is set only where the barrier +/// really went into a command buffer, so a run that got this far and then refused does not leave +/// the image remembered as GENERAL while it is still UNDEFINED. +void output_to_general(VkCommandBuffer cmd, Image& t) { + if (t.in_general || !t.image) return; + VkImageMemoryBarrier2 b{VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2}; + b.srcStageMask = VK_PIPELINE_STAGE_2_NONE; + b.dstStageMask = VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT; + b.dstAccessMask = VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_SHADER_WRITE_BIT; + b.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; + b.newLayout = VK_IMAGE_LAYOUT_GENERAL; + b.srcQueueFamilyIndex = b.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + b.image = t.image; + b.subresourceRange = ONE_LEVEL; + VkDependencyInfo di{VK_STRUCTURE_TYPE_DEPENDENCY_INFO}; + di.imageMemoryBarrierCount = 1, di.pImageMemoryBarriers = &b; + vkCmdPipelineBarrier2(cmd, &di); + t.in_general = true; +} + +// --------------------------------------------------------------------------------------------- +// The NGX half. Five functions, two implementations, and the only part of this file that needs +// anything of NVIDIA's. +// --------------------------------------------------------------------------------------------- + +/// NGX started, and this driver and GPU reporting Super Resolution as available. Asked once by +/// `supported()`, which logs the one line saying why not. +bool ngx_available(); +/// The feature handle for these extents, made on first use because `CreateFeature` records into a +/// command buffer. True when a handle is there afterwards. +bool ngx_feature(VkCommandBuffer cmd); +/// One evaluation, into `out`. False when NGX refused it. +bool ngx_evaluate(VkCommandBuffer cmd, const Inputs& in, const Image& out); +/// Lets the feature handle go: the extents changed, or we are shutting down. +void ngx_drop_feature(); +/// Lets NGX itself go. +void ngx_shutdown(); + +#if defined(RX_VK_DLSS_SDK) + +/// The entry points this backend calls, resolved by name from the NGX core the NVIDIA driver ships +/// (`libnvidia-ngx.so`), through the loader pattern the rest of the renderer uses for +/// vulkan-1.dll (vk_main.cpp; on Linux host/posix/win32_posix.c makes that dlopen/dlsym). +/// +/// They are resolved rather than linked for two reasons: the SDK's own library is then not a link +/// requirement of a gated build, and a machine with the SDK-built binary but no NVIDIA driver has +/// every pointer null here, so `supported()` is false instead of the process failing to start. +/// +/// The two `NGX_VULKAN_*_DLSS_EXT*` helpers in nvsdk_ngx_helpers_vk.h are deliberately *not* used, +/// which is the one place this backend departs from the obvious reading of NVIDIA's sample code. +/// They are inline wrappers that call `NVSDK_NGX_VULKAN_CreateFeature` / `..._EvaluateFeature` by +/// name, so using them puts those symbols in this object file and hands the link back to NVIDIA's +/// library. What they do besides that is set the parameter keys below -- and those keys are the +/// SDK's own macros here, so a wrong one is a compile error, the same check using the helper would +/// have given. The risk this trades for is a key DLSS wants and this code does not set; the set is +/// written out in docs/upscaling.md so that it can be reviewed against the SDK's helper. +struct Ngx { + HMODULE module = nullptr; + decltype(&NVSDK_NGX_VULKAN_Init_with_ProjectID) init = nullptr; + decltype(&NVSDK_NGX_VULKAN_Shutdown1) shutdown = nullptr; + decltype(&NVSDK_NGX_VULKAN_GetCapabilityParameters) capability = nullptr; + decltype(&NVSDK_NGX_VULKAN_AllocateParameters) allocate = nullptr; + decltype(&NVSDK_NGX_VULKAN_DestroyParameters) destroy = nullptr; + decltype(&NVSDK_NGX_VULKAN_CreateFeature) create = nullptr; + decltype(&NVSDK_NGX_VULKAN_EvaluateFeature) evaluate = nullptr; + decltype(&NVSDK_NGX_VULKAN_ReleaseFeature) release = nullptr; + bool started = false; + NVSDK_NGX_Parameter* params = nullptr; ///< the evaluation's own parameters + NVSDK_NGX_Handle* feature = nullptr; +}; +Ngx ngx; + +/// A project id of our own. NVIDIA's analytics key one is for licensed titles; the project-id form +/// exists exactly so a project without one can initialize. +constexpr const char* kProjectId = "a6b7c0de-7a1f-4f1e-9d2a-hookshot-dlss"; +constexpr const char* kEngineVersion = "1.0"; + +bool ngx_load() { + if (ngx.module) return true; + // The core ships with the driver and is found on the usual search path; the model library + // (libnvidia-ngx-dlss.so.*) sits beside the binary and is NGX's to find, which is what the + // application data path below is for. +#ifdef _WIN32 + static const char* const names[]{"nvngx.dll", "_nvngx.dll"}; +#else + static const char* const names[]{"libnvidia-ngx.so.1", "libnvidia-ngx.so"}; +#endif + for (const char* name : names) { + ngx.module = LoadLibraryA(name); + if (ngx.module) { + logf("vk: dlss: NGX loaded from %s", name); + break; + } + } + if (!ngx.module) { + logf("vk: dlss: no NGX runtime here (%s), so DLSS is unavailable", names[0]); + return false; + } +#define NGX_RESOLVE(field, name) \ + ngx.field = (decltype(ngx.field))(void*)GetProcAddress(ngx.module, name); \ + if (!ngx.field) { \ + logf("vk: dlss: the NGX runtime has no %s", name); \ + return false; \ + } + NGX_RESOLVE(init, "NVSDK_NGX_VULKAN_Init_with_ProjectID") + NGX_RESOLVE(shutdown, "NVSDK_NGX_VULKAN_Shutdown1") + NGX_RESOLVE(capability, "NVSDK_NGX_VULKAN_GetCapabilityParameters") + NGX_RESOLVE(allocate, "NVSDK_NGX_VULKAN_AllocateParameters") + NGX_RESOLVE(destroy, "NVSDK_NGX_VULKAN_DestroyParameters") + NGX_RESOLVE(create, "NVSDK_NGX_VULKAN_CreateFeature") + NGX_RESOLVE(evaluate, "NVSDK_NGX_VULKAN_EvaluateFeature") + NGX_RESOLVE(release, "NVSDK_NGX_VULKAN_ReleaseFeature") +#undef NGX_RESOLVE + return true; +} + +/// The game folder, wide, for NGX's application data path: where it writes what it keeps and where +/// the model library beside the binary is looked for. +const wchar_t* data_path() { + static wchar_t wide[MAX_PATH + 1]; + static const bool once = [] { + char path[MAX_PATH + 1]{}; + const DWORD n = game_module_path(path, (DWORD)sizeof path); + if (!n || n >= sizeof path) { + wide[0] = L'.', wide[1] = 0; + return true; + } + char* name = path + n; + while (name > path && name[-1] != '\\' && name[-1] != '/') name--; + *name = 0; + size_t i = 0; + for (; path[i] && i < MAX_PATH; i++) wide[i] = (wchar_t)(unsigned char)path[i]; + wide[i] = 0; + if (!i) wide[0] = L'.', wide[1] = 0; + return true; + }(); + (void)once; + return wide; +} + +bool ngx_available() { + if (!ngx_load()) return false; + if (!ngx.started) { + NVSDK_NGX_FeatureCommonInfo common{}; + const wchar_t* paths[]{data_path()}; + common.PathListInfo.Path = paths; + common.PathListInfo.Length = 1; + const NVSDK_NGX_Result res = + ngx.init(kProjectId, NVSDK_NGX_ENGINE_TYPE_CUSTOM, kEngineVersion, data_path(), + dev.instance, dev.physical, dev.device, instance_proc(), vkGetDeviceProcAddr, + &common, NVSDK_NGX_Version_API); + if (NVSDK_NGX_FAILED(res)) { + logf("vk: dlss: NGX did not initialize (0x%08x)", (unsigned)res); + return false; + } + ngx.started = true; + } + NVSDK_NGX_Parameter* caps = nullptr; + if (NVSDK_NGX_FAILED(ngx.capability(&caps)) || !caps) { + logf("vk: dlss: NGX gave no capability parameters"); + return false; + } + int available = 0; + if (NVSDK_NGX_FAILED(caps->Get(NVSDK_NGX_Parameter_SuperSampling_Available, &available)) || + !available) { + // (what NGX says about it: an old driver and a feature that failed to initialize are + // different reports, and a user with the first can act on it) + int needs_driver = 0, major = 0, minor = 0; + caps->Get(NVSDK_NGX_Parameter_SuperSampling_NeedsUpdatedDriver, &needs_driver); + caps->Get(NVSDK_NGX_Parameter_SuperSampling_MinDriverVersionMajor, &major); + caps->Get(NVSDK_NGX_Parameter_SuperSampling_MinDriverVersionMinor, &minor); + if (needs_driver) + logf("vk: dlss: this driver is too old for DLSS (%d.%d or newer wanted)", major, minor); + else + logf("vk: dlss: this GPU and driver do not report Super Resolution"); + return false; + } + if (!ngx.params && NVSDK_NGX_FAILED(ngx.allocate(&ngx.params))) { + logf("vk: dlss: NGX gave no parameters to evaluate with"); + ngx.params = nullptr; + return false; + } + return ngx.params != nullptr; +} + +bool ngx_feature(VkCommandBuffer cmd) { + if (ngx.feature) return true; + if (!ngx.params) return false; + // Quality: the extents are the seam's, not a preset's, so DLSS is told the ratio it is being + // given rather than being asked to pick one. Presets belong with the rest of the settings + // (docs/upscaling.md, row 5) and are not invented here. + ngx.params->Set(NVSDK_NGX_Parameter_Width, g.render_width); + ngx.params->Set(NVSDK_NGX_Parameter_Height, g.render_height); + ngx.params->Set(NVSDK_NGX_Parameter_OutWidth, g.upscale_width); + ngx.params->Set(NVSDK_NGX_Parameter_OutHeight, g.upscale_height); + ngx.params->Set(NVSDK_NGX_Parameter_PerfQualityValue, + (int)NVSDK_NGX_PerfQuality_Value_MaxQuality); + // The three flags that are statements about this game's inputs rather than preferences: the + // colour is HDR, the motion is at the render extent, and the depth is reversed. The input + // contract in docs/upscaling.md is where each comes from; getting one wrong is a wrong picture. + ngx.params->Set(NVSDK_NGX_Parameter_DLSS_Feature_Create_Flags, + (int)(NVSDK_NGX_DLSS_Feature_Flags_IsHDR | + NVSDK_NGX_DLSS_Feature_Flags_MVLowRes | + NVSDK_NGX_DLSS_Feature_Flags_DepthInverted)); + ngx.params->Set(NVSDK_NGX_Parameter_DLSS_Enable_Output_Subrects, 0); + ngx.params->Set(NVSDK_NGX_Parameter_CreationNodeMask, 1u); + ngx.params->Set(NVSDK_NGX_Parameter_VisibilityNodeMask, 1u); + const NVSDK_NGX_Result res = + ngx.create(cmd, NVSDK_NGX_Feature_SuperSampling, ngx.params, &ngx.feature); + if (NVSDK_NGX_FAILED(res) || !ngx.feature) { + logf("vk: dlss: the feature was not created for %ux%u -> %ux%u (0x%08x)", g.render_width, + g.render_height, g.upscale_width, g.upscale_height, (unsigned)res); + ngx.feature = nullptr; + return false; + } + logf("vk: dlss: feature ready, %ux%u -> %ux%u", g.render_width, g.render_height, + g.upscale_width, g.upscale_height); + return true; +} + +/// One input as NGX takes it: the view, its image, its range, its format and the extent it is read +/// at. Nothing here is defaulted; `upscale()` has already refused inputs that cannot fill it. +NVSDK_NGX_Resource_VK as_resource(VkImageView view, VkImage image, VkFormat format, uint32_t width, + uint32_t height, bool read_write) { + VkImageSubresourceRange range{}; + range.aspectMask = + is_depth_format(format) ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_COLOR_BIT; + range.baseMipLevel = 0, range.levelCount = 1; + range.baseArrayLayer = 0, range.layerCount = 1; + return NVSDK_NGX_Create_ImageView_Resource_VK(view, image, range, format, width, height, + read_write); +} + +bool ngx_evaluate(VkCommandBuffer cmd, const Inputs& in, const Image& out) { + if (!ngx.feature || !ngx.params) return false; + NVSDK_NGX_Resource_VK color = as_resource(in.color, in.color_image, in.color_format, + in.render_width, in.render_height, false); + NVSDK_NGX_Resource_VK depth = as_resource(in.depth, in.depth_image, in.depth_format, + in.render_width, in.render_height, false); + NVSDK_NGX_Resource_VK motion = as_resource(in.motion, in.motion_image, in.motion_format, + in.render_width, in.render_height, false); + NVSDK_NGX_Resource_VK target = + as_resource(out.view, out.image, out.format, out.width, out.height, true); + ngx.params->Set(NVSDK_NGX_Parameter_Color, &color); + ngx.params->Set(NVSDK_NGX_Parameter_Depth, &depth); + ngx.params->Set(NVSDK_NGX_Parameter_MotionVectors, &motion); + ngx.params->Set(NVSDK_NGX_Parameter_Output, &target); + ngx.params->Set(NVSDK_NGX_Parameter_Jitter_Offset_X, in.jitter[0]); + ngx.params->Set(NVSDK_NGX_Parameter_Jitter_Offset_Y, in.jitter[1]); + ngx.params->Set(NVSDK_NGX_Parameter_MV_Scale_X, in.motion_scale[0]); + ngx.params->Set(NVSDK_NGX_Parameter_MV_Scale_Y, in.motion_scale[1]); + ngx.params->Set(NVSDK_NGX_Parameter_DLSS_Render_Subrect_Dimensions_Width, g.render_width); + ngx.params->Set(NVSDK_NGX_Parameter_DLSS_Render_Subrect_Dimensions_Height, g.render_height); + ngx.params->Set(NVSDK_NGX_Parameter_Reset, in.reset ? 1 : 0); + ngx.params->Set(NVSDK_NGX_Parameter_Sharpness, in.sharpen ? in.sharpness : 0.0f); + // The game does not expose an exposure, and the colour it hands over is already in the range + // its own resolve worked in, so both of these are the neutral value rather than a guess. + ngx.params->Set(NVSDK_NGX_Parameter_DLSS_Pre_Exposure, 1.0f); + ngx.params->Set(NVSDK_NGX_Parameter_DLSS_Exposure_Scale, 1.0f); + const NVSDK_NGX_Result res = ngx.evaluate(cmd, ngx.feature, ngx.params, nullptr); + if (NVSDK_NGX_FAILED(res)) { + logf("vk: dlss: the evaluation was refused (0x%08x)", (unsigned)res); + return false; + } + return true; +} + +void ngx_drop_feature() { + if (ngx.feature && ngx.release) ngx.release(ngx.feature); + ngx.feature = nullptr; +} + +void ngx_shutdown() { + ngx_drop_feature(); + if (ngx.params && ngx.destroy) ngx.destroy(ngx.params); + ngx.params = nullptr; + if (ngx.started && ngx.shutdown) ngx.shutdown(dev.device); + ngx.started = false; + // (the module is left loaded: the driver's own libraries are not ours to unload under a device + // that may still be alive) +} + +#else // no NGX SDK: the gate is off, and each of the five refuses + +bool ngx_available() { + return false; +} +bool ngx_feature(VkCommandBuffer) { + return false; +} +bool ngx_evaluate(VkCommandBuffer, const Inputs&, const Image&) { + return false; +} +void ngx_drop_feature() {} +void ngx_shutdown() {} + +#endif // RX_VK_DLSS_SDK + +// ---- Windows and Streamline, deliberately not written ---- +// +// On Windows the normal route to DLSS is Streamline (sl.dlss) rather than NGX directly, and +// Streamline is also the only route to DLSS frame generation. It is not implemented here, and that +// is a decision rather than an omission: it needs a second runtime, a second set of headers and a +// Windows machine to try it on, and none of that is wanted in the same change as the Linux path. +// +// The shape it would take is already here. Streamline would be a third arm of the gate above -- +// `#elif defined(RX_VK_DLSS_SL)` -- implementing the same five `ngx_*` functions (named for the +// job, not for NGX, for exactly this reason) with slInit / slSetFeatureLoaded / +// slAllocateResources / slEvaluateFeature. Nothing outside those five would change: `Inputs`, the +// output image, the layout transitions, the barriers and every refusal below are vendor-neutral. +// Streamline has no Linux build, so the NGX arm stays the Linux one whatever happens on Windows. + +} // namespace + +bool supported() { + static const bool answer = [] { + if (!wanted()) return false; // (RX_VK_DLSS=1: nothing below runs unless it is asked for) + if (!dev.device) { + logf("vk: dlss: no device yet"); + return false; + } + if (!kHaveSdk) { + logf("vk: dlss: this build has no NGX SDK (RX_VK_DLSS_SDK), so DLSS is unavailable; " + "docs/upscaling.md says what to point it at"); + return false; + } + return ngx_available(); + }(); + return answer; +} + +bool prepare(uint32_t render_width, uint32_t render_height, uint32_t upscale_width, + uint32_t upscale_height) { + if (!supported()) return false; + const uint32_t rw = std::max(1u, render_width), rh = std::max(1u, render_height); + const uint32_t uw = std::max(1u, upscale_width), uh = std::max(1u, upscale_height); + if (g.output.image && g.render_width == rw && g.render_height == rh && g.upscale_width == uw && + g.upscale_height == uh) { + return true; + } + // A feature is created for one pair of extents, so a change of either ends this one. The next + // evaluation makes another, because that is the first place there is a command buffer. + ngx_drop_feature(); + if (!make_output(g.output, uw, uh)) { + shutdown(); + return false; + } + g.render_width = rw, g.render_height = rh, g.upscale_width = uw, g.upscale_height = uh; + g.first_evaluation = true; + logf("vk: dlss: %ux%u -> %ux%u", rw, rh, uw, uh); + return true; +} + +bool upscale(VkCommandBuffer cmd, const Inputs& in) { + // Every clause here is a refusal rather than a default, for the reason docs/upscaling.md gives: + // an upscaler running on inputs it has guessed produces ghosting that is reported as a renderer + // bug. The caller keeps whatever it would otherwise have done. + if (!in.color || !in.depth || !in.motion) return false; + // NGX is handed resources, not views (vk_dlss.h): without the images and their formats an + // evaluation would be describing something NVIDIA's runtime cannot see. + if (!in.color_image || !in.depth_image || !in.motion_image) return false; + if (in.color_format == VK_FORMAT_UNDEFINED || in.depth_format == VK_FORMAT_UNDEFINED || + in.motion_format == VK_FORMAT_UNDEFINED) { + return false; + } + if (!in.render_width || !in.render_height || !in.upscale_width || !in.upscale_height) return false; + // An upscaler cannot resolve into something smaller than what it was given; equal is DLAA. + if (in.upscale_width < in.render_width || in.upscale_height < in.render_height) return false; + if (!(in.near_plane > 0.0f) || !(in.fov_y > 0.0f)) return false; // (Inputs defaults them) + if (!prepare(in.render_width, in.render_height, in.upscale_width, in.upscale_height)) return false; + + const bool first = g.first_evaluation; + output_to_general(cmd, g.output); + if (!ngx_feature(cmd)) return false; + g.first_evaluation = false; + + // What the game's draws and the motion pass wrote has to be visible to NGX's own passes. + memory_barrier(cmd, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, + VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT | + VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT | + VK_ACCESS_2_SHADER_WRITE_BIT | VK_ACCESS_2_TRANSFER_WRITE_BIT, + VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, + VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_SHADER_WRITE_BIT); + Inputs evaluated = in; + evaluated.reset = in.reset || first; // (the first evaluation has no history to carry) + if (!ngx_evaluate(cmd, evaluated, g.output)) return false; + // (what reads the output: the blit into the game's target, and anything sampling it after) + memory_barrier(cmd, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_WRITE_BIT, + VK_PIPELINE_STAGE_2_TRANSFER_BIT | VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT | + VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, + VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_TRANSFER_READ_BIT); + return true; +} + +VkImage output_image() { + return g.output.image; +} + +VkImageView output_view() { + return g.output.view; +} + +void shutdown() { + ngx_shutdown(); + drop_image(g.output); + g.render_width = g.render_height = g.upscale_width = g.upscale_height = 0; + g.first_evaluation = true; +} + +} // namespace mkwvk::dlss diff --git a/gpu/vk/vk_dlss.h b/gpu/vk/vk_dlss.h new file mode 100644 index 000000000..3f3cdbef5 --- /dev/null +++ b/gpu/vk/vk_dlss.h @@ -0,0 +1,86 @@ +// (hookshot) NVIDIA DLSS Super Resolution as a backend for the game's own upscale dispatch: +// docs/upscaling.md and gpu/vk/upscale_seam.h. The same shape as gpu/vk/vk_fsr3.h, so the seam can +// hold either one, and the same assembled inputs: the depth the scene passes carry and the motion +// gpu/vk/vk_camera_motion.h reprojects from it, because this dispatch is handed neither. +// +// Nothing of NVIDIA's is in this repository and nothing of NVIDIA's is needed to build it. DLSS is +// reached through NGX on Linux, and NGX's API -- not just its runtime -- is NVIDIA's licensed SDK, +// so the NGX half of the backend sits behind a build-time gate, `RX_VK_DLSS_SDK`, that is off by +// default. With the gate off this file still compiles, links and runs: every entry point below +// answers, and `supported()` answers false. The "DLSS Super Resolution" section of +// docs/upscaling.md says why the ABI is not declared here by hand instead. +#pragma once + +#include + +#include "vk_internal.h" + +namespace mkwvk::dlss { + +/// One evaluation's inputs. The first block is FSR's, field for field and meaning for meaning (see +/// gpu/vk/vk_fsr3.h): the colour is HDR and jittered at the render size, the depth is reversed, the +/// motion points at the previous frame, and the jitter is in render pixels. +struct Inputs { + VkImageView color = VK_NULL_HANDLE; + VkImageView depth = VK_NULL_HANDLE; + VkImageView motion = VK_NULL_HANDLE; + uint32_t render_width = 0, render_height = 0; + uint32_t upscale_width = 0, upscale_height = 0; + float jitter[2]{}; + /// Turns a motion vector into render pixels (the render size, for vectors in UV). + float motion_scale[2]{1.0f, 1.0f}; + /// The game's camera. DLSS does not take a projection, so unlike FSR these two only decide + /// whether the inputs are believable at all; an evaluation refuses a non-positive one rather + /// than carrying on with a camera it was not given. + float near_plane = 0.1f; + float fov_y = 60.0f * 3.14159265358979f / 180.0f; + float frame_time_ms = 16.667f; + bool reset = false; + bool sharpen = false; + /// 0 to 1. DLSS's own sharpening pass is deprecated from 3.x on and newer runtimes ignore it, + /// so this is passed through and nothing is promised by it. + float sharpness = 0.0f; + + // ---- what NGX needs and FSR does not ---- + // + // FSR records its own compute passes, so a view is the whole of an input to it. NGX is handed + // resources instead: an `NVSDK_NGX_Resource_VK` is a view *and* its image, its subresource + // range, its format and its extent, and the extent it is given is the extent DLSS reads. There + // is nothing to default these to -- a wrong format or a null image is a wrong picture or a + // crash inside the runtime, not a worse picture -- so an evaluation refuses without them. This + // is the one place `dlss::Inputs` is not `fsr3::Inputs`, and it is why it is its own struct. + VkImage color_image = VK_NULL_HANDLE; + VkImage depth_image = VK_NULL_HANDLE; + VkImage motion_image = VK_NULL_HANDLE; + VkFormat color_format = VK_FORMAT_UNDEFINED; + VkFormat depth_format = VK_FORMAT_UNDEFINED; + VkFormat motion_format = VK_FORMAT_UNDEFINED; +}; + +/// Whether DLSS can run here at all: asked for (`RX_VK_DLSS=1`), built with an NGX SDK, the NGX +/// runtime loaded, and this driver and GPU reporting Super Resolution as available. Asked once; the +/// answer is cached, and the one line saying why it is false is logged once. +[[nodiscard]] bool supported(); + +/// Makes the image an evaluation resolves into and remembers these extents, re-making them when the +/// extents change. False when anything could not be made, which leaves DLSS unavailable rather than +/// half-built. +/// +/// Unlike FSR's, this does not make the thing that does the work: `NVSDK_NGX_VULKAN_CreateFeature` +/// records into a command buffer, and there is none here. The feature is created at the first +/// `upscale()` after a change of extents instead, which is why this signature can stay FSR's. +[[nodiscard]] bool prepare(uint32_t render_width, uint32_t render_height, uint32_t upscale_width, + uint32_t upscale_height); + +/// Records one evaluation. False when the inputs are not usable, which leaves the caller to keep +/// whatever it would otherwise have done. +[[nodiscard]] bool upscale(VkCommandBuffer cmd, const Inputs& in); + +/// The image an evaluation resolves into: RGBA16F at the upscale size, or null before prepare(). +[[nodiscard]] VkImage output_image(); +[[nodiscard]] VkImageView output_view(); + +/// Frees everything, the NGX feature and NGX itself included. Safe to call when nothing was made. +void shutdown(); + +} // namespace mkwvk::dlss diff --git a/gpu/vk/vk_fsr3.cpp b/gpu/vk/vk_fsr3.cpp index 427ab7cb7..31a1b7042 100644 --- a/gpu/vk/vk_fsr3.cpp +++ b/gpu/vk/vk_fsr3.cpp @@ -230,8 +230,11 @@ bool make_image(Image& t, VkFormat format, uint32_t width, uint32_t height, uint ci.arrayLayers = 1; ci.samples = VK_SAMPLE_COUNT_1_BIT; ci.tiling = VK_IMAGE_TILING_OPTIMAL; + // (TRANSFER_SRC as well as DST: the output is blitted from, which is how the seam gets it into + // the game's target. Asking only for DST while blitting from it is a validation error waiting + // on a device that checks; caught in review, not by a run) ci.usage = VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_SAMPLED_BIT | - VK_IMAGE_USAGE_TRANSFER_DST_BIT; + VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT; ci.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; if (!create_image(ci, t.image, t.memory, false)) { logf("vk: fsr3: a %ux%u image (format %d) was not made", t.width, t.height, (int)format); diff --git a/tests/dlss_contract_test.cpp b/tests/dlss_contract_test.cpp new file mode 100644 index 000000000..c87627a74 --- /dev/null +++ b/tests/dlss_contract_test.cpp @@ -0,0 +1,165 @@ +// (hookshot) What gpu/vk/vk_dlss.cpp promises when no NVIDIA SDK built it, driven without a GPU, a +// game or a DLSS runtime: the real translation unit, linked against the seven symbols it needs. +// +// That promise is the whole basis of the licensing decision in docs/upscaling.md -- the renderer +// compiles and links with no NVIDIA SDK present and runs with DLSS reported unavailable -- and it +// is the kind of thing that passes review by inspection and then stops being true. So it is a +// check rather than a comment. +// +// The checks that matter are the ones that would fail if nothing ran: in "on" mode `supported()` +// has to say *why* it is false, which it can only do by reaching the branch that looks for the +// SDK, and in "nodev" mode it has to say the earlier thing instead. A test that only asserted +// "false" would pass against a `supported()` that had been deleted. tests/test_dlss_contract.py +// compiles and runs this, once per mode. +#include +#include +#include +#include +#include +#include + +#include "vk_dlss.h" + +// ---- the seven symbols gpu/vk/vk_dlss.cpp needs, and nothing else ---- + +namespace { +std::vector log_lines; +int images_created = 0, images_destroyed = 0, barriers = 0; + +bool said(const char* needle) { + for (const std::string& line : log_lines) + if (line.find(needle) != std::string::npos) return true; + return false; +} +} // namespace + +namespace { +VKAPI_ATTR VkResult VKAPI_CALL stub_create_view(VkDevice, const VkImageViewCreateInfo*, + const VkAllocationCallbacks*, VkImageView* out) { + *out = (VkImageView)(uintptr_t)0x4000; + return VK_SUCCESS; +} +VKAPI_ATTR void VKAPI_CALL stub_destroy_view(VkDevice, VkImageView, const VkAllocationCallbacks*) {} +VKAPI_ATTR void VKAPI_CALL stub_barrier2(VkCommandBuffer, const VkDependencyInfo*) { + barriers++; +} +} // namespace + +namespace vkx { +PFN_vkCreateImageView vkCreateImageView = stub_create_view; +PFN_vkDestroyImageView vkDestroyImageView = stub_destroy_view; +PFN_vkCmdPipelineBarrier2 vkCmdPipelineBarrier2 = stub_barrier2; +} // namespace vkx + +namespace mkwvk { +Device dev; + +void logf(const char* fmt, ...) { + char b[1024]; + std::va_list a; + va_start(a, fmt); + std::vsnprintf(b, sizeof b, fmt, a); + va_end(a); + log_lines.emplace_back(b); +} + +bool create_image(const VkImageCreateInfo&, VkImage& image, VmaAllocation& allocation, bool) { + images_created++; + image = (VkImage)(uintptr_t)0x5000; + allocation = (VmaAllocation)(uintptr_t)0x6000; + return true; +} + +void destroy_image(VkImage, VmaAllocation) { + images_destroyed++; +} +} // namespace mkwvk + +// ---- the checks ---- + +static int failures = 0; + +static void check(bool ok, const char* what) { + if (!ok) { + std::fprintf(stderr, "FAIL: %s\n", what); + ++failures; + } +} + +/// An input set with nothing missing: a 1536x864 scene resolved to 2048x1152, which is the shape +/// docs/upscaling.md measured in this game. Every field DLSS refuses without is filled, so a +/// refusal of this one is about DLSS being unavailable and nothing else. +static mkwvk::dlss::Inputs complete_inputs() { + mkwvk::dlss::Inputs in; + in.color = (VkImageView)(uintptr_t)0x11; + in.depth = (VkImageView)(uintptr_t)0x12; + in.motion = (VkImageView)(uintptr_t)0x13; + in.color_image = (VkImage)(uintptr_t)0x21; + in.depth_image = (VkImage)(uintptr_t)0x22; + in.motion_image = (VkImage)(uintptr_t)0x23; + in.color_format = VK_FORMAT_R16G16B16A16_SFLOAT; + in.depth_format = VK_FORMAT_D32_SFLOAT; + in.motion_format = VK_FORMAT_R16G16_SFLOAT; + in.render_width = 1536, in.render_height = 864; + in.upscale_width = 2048, in.upscale_height = 1152; + in.motion_scale[0] = 1.0f, in.motion_scale[1] = 1.0f; + in.near_plane = 1.0f; + in.fov_y = 45.0f * 3.14159265358979f / 180.0f; + return in; +} + +/// Whatever the mode, none of this may allocate, record or hand back anything. A backend that is +/// unavailable and still makes its output image is a VRAM cost for a feature that cannot run. +static void nothing_was_made(const char* mode) { + const VkCommandBuffer cmd = (VkCommandBuffer)(uintptr_t)0x1; + check(!mkwvk::dlss::prepare(1536, 864, 2048, 1152), "prepare() refuses"); + check(!mkwvk::dlss::upscale(cmd, complete_inputs()), "upscale() refuses complete inputs"); + check(mkwvk::dlss::output_image() == VK_NULL_HANDLE, "there is no output image"); + check(mkwvk::dlss::output_view() == VK_NULL_HANDLE, "there is no output view"); + check(images_created == 0, "no image was allocated"); + check(barriers == 0, "nothing was recorded into the command buffer"); + mkwvk::dlss::shutdown(); + mkwvk::dlss::shutdown(); // (safe when nothing was made, and safe twice) + check(images_destroyed == 0, "nothing was freed, because nothing was made"); + std::printf("dlss %s: %zu log line(s)\n", mode, log_lines.size()); + for (const std::string& line : log_lines) std::printf(" %s\n", line.c_str()); +} + +int main(int argc, char** argv) { + const char* mode = argc > 1 ? argv[1] : "off"; + + if (!std::strcmp(mode, "off")) { + // RX_VK_DLSS is unset. The switch is neutral: nothing is loaded, nothing is looked at, and + // nothing is said -- a renderer that logged about DLSS on every start would be a cost of + // having the backend at all. + check(getenv("RX_VK_DLSS") == nullptr, "the mode's environment is what it says"); + check(!mkwvk::dlss::supported(), "supported() is false with the switch off"); + check(log_lines.empty(), "nothing is logged with the switch off"); + nothing_was_made(mode); + } else if (!std::strcmp(mode, "nodev")) { + // Asked for before there is a device. This has to be the answer it gives, and not the one + // below, or the "no SDK" line would be the only thing a user ever sees. + check(getenv("RX_VK_DLSS") != nullptr, "the mode's environment is what it says"); + check(mkwvk::dev.device == VK_NULL_HANDLE, "no device in this mode"); + check(!mkwvk::dlss::supported(), "supported() is false before there is a device"); + check(said("no device"), "it says there is no device yet"); + check(!said("SDK"), "it does not blame the SDK for a missing device"); + nothing_was_made(mode); + } else if (!std::strcmp(mode, "on")) { + // Asked for, with a device, in a build with no NGX SDK. This is the case the licensing + // decision rests on, and the log line is the proof that `supported()` reached the branch + // that looks for one rather than refusing somewhere earlier. + check(getenv("RX_VK_DLSS") != nullptr, "the mode's environment is what it says"); + mkwvk::dev.device = (VkDevice)(uintptr_t)0x3000; + check(!mkwvk::dlss::supported(), "supported() is false in a build with no NGX SDK"); + check(said("NGX SDK"), "it says the build has no NGX SDK"); + check(said("RX_VK_DLSS_SDK"), "it names the gate, so the message is actionable"); + nothing_was_made(mode); + } else { + std::fprintf(stderr, "unknown mode %s\n", mode); + return 2; + } + + if (failures) std::fprintf(stderr, "%d check(s) failed in mode %s\n", failures, mode); + return failures ? 1 : 0; +} diff --git a/tests/run_all.py b/tests/run_all.py index 6b46b8abd..8c7ba46a5 100644 --- a/tests/run_all.py +++ b/tests/run_all.py @@ -33,6 +33,7 @@ "tests/test_upscale_fallback.py": ["--cxx", "g++"], "tests/test_upscale_contract.py": ["--cxx", "g++", "--headers", "{vulkan_headers}"], "tests/test_upscale_seam.py": ["--cxx", "g++"], + "tests/test_dlss_contract.py": ["--cxx", "clang++", "--headers", "{vulkan_headers}"], "tests/test_fsr3_shaders.py": ["--glslang", "{glslang}", "--spirv-val", "{spirv_val}"], "tests/test_nvn_buffer_map.py": ["--cc", "gcc"], "tests/test_cpp_preflight.py": ["--cxx", "g++"], diff --git a/tests/test_dlss_contract.py b/tests/test_dlss_contract.py new file mode 100644 index 000000000..9c1af18d6 --- /dev/null +++ b/tests/test_dlss_contract.py @@ -0,0 +1,221 @@ +"""DLSS's no-SDK contract and the licensing gate it rests on. No game, no GPU, no NVIDIA SDK and no +DLSS runtime. + +Three things are checked, and each one is a rule from CONTRIBUTING.md or docs/upscaling.md that +would otherwise only be a comment: + +1. gpu/vk/vk_dlss.cpp compiles and links with no NVIDIA SDK, and the backend it makes reports DLSS + unavailable without allocating, recording or handing back anything. tests/dlss_contract_test.cpp + drives the real translation unit; its own header says why its checks read the log. +2. With the gate on, the file cannot compile without NVIDIA's own headers. That is the proof that + the NGX ABI is *not* written out in this tree: if someone replaces the gated include with a + hand-copied declaration, this compile starts succeeding and this check fails. +3. Every NGX name in gpu/vk/vk_dlss.cpp and gpu/vk/vk_dlss.h is inside that gate, and no NVIDIA SDK + header or library is tracked in the repository. + +python -I -B tests/test_dlss_contract.py [--cxx clang++] [--headers ] + +clang++ rather than g++: gpu/render/rx_nvn.h, which vk_api.h pulls in, uses C's _Static_assert, +which clang accepts in C++ and GCC does not. The renderer itself is built with clang. +""" +import argparse +import os +import re +import subprocess +import sys +import tempfile +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +SOURCE = ROOT / "gpu/vk/vk_dlss.cpp" +HEADER = ROOT / "gpu/vk/vk_dlss.h" +DRIVER = ROOT / "tests/dlss_contract_test.cpp" +GATE = "RX_VK_DLSS_SDK" + +# Anything that is NVIDIA's NGX API by name: the identifiers, the helper macros, the headers and the +# libraries. Deliberately wider than what vk_dlss.cpp uses, so a new call is caught rather than +# needing the pattern extended with it. +NGX = re.compile(r"NVSDK_NGX[A-Za-z0-9_]*|NGX_VULKAN[A-Za-z0-9_]*|nvsdk_ngx[A-Za-z0-9_.]*" + r"|nvngx[A-Za-z0-9_.]*|libnvidia-ngx[A-Za-z0-9_.]*") +# Files that would be NVIDIA's SDK, vendored. CONTRIBUTING.md's licensing rule forbids it and +# docs/upscaling.md says why DLSS in particular cannot be vendored at all. +VENDORED = re.compile(r"^(nvsdk_ngx|nvngx|_nvngx|libnvidia-ngx|sl\.|sl_)", re.I) + + +def strip_comments(text): + """Comments out, string and character literals kept. + + Both halves matter. This file's own prose names NVSDK_NGX_Parameter outside the gate while + explaining why the ABI is not written here -- a scan that read comments would report the + explanation as the violation. And the NGX entry points are resolved by name, so a *string* + holding one outside the gate is a real violation, which a scan that stripped strings could + never see. + """ + out, i, n = [], 0, len(text) + while i < n: + c = text[i] + if c == "/" and i + 1 < n and text[i + 1] == "/": + j = text.find("\n", i) + i = n if j < 0 else j + elif c == "/" and i + 1 < n and text[i + 1] == "*": + j = text.find("*/", i + 2) + end = n if j < 0 else j + 2 + out.append("\n" * text.count("\n", i, end)) # (line numbers survive) + i = end + elif c in "\"'": + j = i + 1 + while j < n and text[j] != c: + j += 2 if text[j] == "\\" else 1 + out.append(text[i:min(j + 1, n)]) + i = min(j + 1, n) + else: + out.append(c) + i += 1 + return "".join(out) + + +def scan(text, what): + """Every NGX name in `text`, split by whether the gate encloses it: (inside, outside). + + Scope comes from the preprocessor's own nesting, not from a line window: a frame per #if, the + arm flag flipped by #elif and #else, popped by #endif. A fixed lookback would read the + neighbouring block's #if as this line's, in either direction. + + The floors are here rather than in the caller, so no later edit can leave a caller asserting + nothing: a scan that read no text, or whose pattern has stopped matching, fails as a scan. + """ + assert text.strip(), "%s: nothing to scan" % what + inside, outside, frames = [], [], [] + for number, line in enumerate(strip_comments(text).splitlines(), 1): + stripped = line.strip() + directive = stripped.split(None, 1)[0] if stripped.startswith("#") else "" + rest = stripped[len(directive):] + if directive in ("#if", "#ifdef", "#ifndef"): + frames.append(GATE in rest and directive != "#ifndef") + elif directive in ("#elif", "#else") and frames: + frames[-1] = directive == "#elif" and GATE in rest + elif directive == "#endif" and frames: + frames.pop() + gated = any(frames) + for name in NGX.findall(line): + (inside if gated else outside).append((number, name)) + assert inside or outside, "%s: the NGX pattern matched nothing, so this scan says nothing" % what + return inside, outside + + +FIXTURE = """ +// A comment naming NVSDK_NGX_Parameter_Width outside the gate: prose, not a violation. +#if defined(RX_VK_DLSS_SDK) + NVSDK_NGX_Result ok = ngx.init(p); +#endif + NVSDK_NGX_Result leaked = other_init(); + const char* resolved = "NVSDK_NGX_VULKAN_CreateFeature"; +#if defined(RX_VK_DLSS_SDK) + NVSDK_NGX_Handle* right_arm = nullptr; +#else + NVSDK_NGX_Handle* wrong_arm = nullptr; +#endif +#ifdef SOMETHING_ELSE +#if defined(RX_VK_DLSS_SDK) + NVSDK_NGX_Feature nested = NVSDK_NGX_Feature_SuperSampling; +#endif +#endif +""" + + +def check_scanner(): + """The scan, against text whose answer is known. + + Every decoy sits directly beside a correctly gated line, because that adjacency is the false + negative a fixture of separate blocks cannot see: a gated call one line above an ungated one is + exactly what a line-window scan excuses. The expected set is asserted exactly -- "nothing was + reported" is also what a dead pattern and an unread file look like. + """ + inside, outside = scan(FIXTURE, "the scanner's own fixture") + got = sorted(name for _, name in outside) + want = sorted(["NVSDK_NGX_Result", "NVSDK_NGX_VULKAN_CreateFeature", "NVSDK_NGX_Handle"]) + assert got == want, "the scanner reported %s outside the gate, wanted %s" % (got, want) + gated = sorted(name for _, name in inside) + assert gated == sorted(["NVSDK_NGX_Result", "NVSDK_NGX_Handle", "NVSDK_NGX_Feature", + "NVSDK_NGX_Feature_SuperSampling"]), \ + "the scanner reported %s inside the gate" % gated + + +def check_sources(): + inside, outside = scan(SOURCE.read_text(encoding="utf-8"), SOURCE.name) + if outside: + lines = ", ".join("%s:%d %s" % (SOURCE.name, n, name) for n, name in outside) + raise SystemExit("NGX outside the %s gate: %s" % (GATE, lines)) + assert len(inside) >= 20, "only %d NGX names in %s: has the gated half gone?" % (len(inside), SOURCE.name) + print("%s: %d NGX name(s), all inside the %s gate" % (SOURCE.name, len(inside), GATE)) + # The header is included by every build, gate or no gate, so it may not name NGX at all -- not + # even inside one. Absence is the property here, and an empty result is also what a pattern that + # has stopped matching looks like, so the planted name makes the control inseparable from the + # assertion rather than a separate check someone can delete. + text = strip_comments(HEADER.read_text(encoding="utf-8")) + found = NGX.findall(text + "\nNVSDK_NGX_Handle* planted;\n") + assert found == ["NVSDK_NGX_Handle"], \ + "%s names NGX (%s), or the pattern has died" % (HEADER.name, found) + print("%s: no NGX name at all, as a header every build reads must have" % HEADER.name) + + +def check_nothing_vendored(): + # Tracked and not-yet-tracked alike, .gitignore honoured: a vendored header is a problem while + # it sits in the working tree, not only once it is committed. + out = subprocess.run(["git", "-C", str(ROOT), "ls-files", "--cached", "--others", + "--exclude-standard"], check=True, stdout=subprocess.PIPE, + text=True).stdout.split() + assert "gpu/vk/vk_dlss.cpp" in out, "this is not the repository the checks above read" + bad = [f for f in out if VENDORED.match(os.path.basename(f))] + if bad: + raise SystemExit("NVIDIA SDK files in the repository: %s" % ", ".join(bad)) + print("%d files in the tree, none an NVIDIA SDK header or library" % len(out)) + + +def compile_flags(a): + flags = [a.cxx, "-std=c++20", "-O1", "-DVK_NO_PROTOTYPES", "-I" + str(ROOT / "gpu/vk")] + if sys.platform != "win32": # (the Win32 calls of gpu/vk on POSIX, as nx2/build.py does) + flags += ["-D_GNU_SOURCE", "-I" + str(ROOT / "host/posix")] + if a.headers: + flags.append("-I" + a.headers) + return flags + + +def check_runs(a, tmp): + exe = Path(tmp) / ("dlss_contract_test" + (".exe" if sys.platform == "win32" else "")) + subprocess.run(compile_flags(a) + [str(SOURCE), str(DRIVER), "-o", str(exe)], check=True) + for mode in ("off", "nodev", "on"): + env = dict(os.environ) + env.pop("RX_VK_DLSS", None) + if mode != "off": + env["RX_VK_DLSS"] = "1" + subprocess.run([str(exe), mode], check=True, env=env) + + +def check_gate_needs_nvidias_headers(a, tmp): + done = subprocess.run(compile_flags(a) + ["-fsyntax-only", "-D%s=1" % GATE, str(SOURCE)], + cwd=tmp, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True) + if done.returncode == 0: + raise SystemExit("gpu/vk/vk_dlss.cpp compiles with %s on and no NVIDIA SDK present, so the " + "NGX ABI is declared somewhere in this tree. It must not be." % GATE) + if "nvsdk_ngx" not in done.stdout: + raise SystemExit("with %s on the compile failed for some other reason than NVIDIA's missing " + "headers, so this check proves nothing:\n%s" % (GATE, done.stdout)) + print("with %s on, the build asks for NVIDIA's own headers and stops without them" % GATE) + + +def main(): + p = argparse.ArgumentParser(description=__doc__) + p.add_argument("--cxx", default="clang++") + p.add_argument("--headers", help="a Vulkan headers include folder; the compiler's own path by default") + a = p.parse_args() + check_scanner() + check_sources() + check_nothing_vendored() + with tempfile.TemporaryDirectory(prefix="dlss-contract-") as tmp: + check_runs(a, tmp) + check_gate_needs_nvidias_headers(a, tmp) + + +if __name__ == "__main__": + main() From 2946a3228227208d3db67e0a48cc9af84df56d41 Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 18:05:43 -0600 Subject: [PATCH 028/119] feat: the hunt found the projection, so widen it to find the view RX_VK_VP_HUNT=1 found the needle on its first run: vp hunt: stage 5 slot 0, m11 at +68, matrix from +48: 1.358 0 0 0 0 2.414 0 0 0 0 -1 -0.2 0 0 -1 0 m11 is 2.414 as the 45 degree field of view predicts, 2.414 / 1.358 is 1.777 = 16/9, and the last row makes w = -z. The scene draws read their projection from stage 5, slot 0, byte 48 of a uniform buffer, and it agrees with the camera the lifted code publishes -- two independent sources now say the same thing. It is the projection alone: the upper-left 3x3 came back diagonal, with no rotation or translation. A temporal upscaler reprojects with view times projection, so the view is still to be found, and it should be in the same buffer because a draw needs both. The hunt now dumps that whole buffer in rows of four, which is how a 4x4 reads, instead of sixteen floats around the hit, and stops after one buffer since one dump is the point. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- docs/upscaling.md | 18 +++++++++++++++++- gpu/vk/vk_draw.cpp | 31 +++++++++++++++++++------------ 2 files changed, 36 insertions(+), 13 deletions(-) diff --git a/docs/upscaling.md b/docs/upscaling.md index 0d1a9dc03..c3ba5c8c0 100644 --- a/docs/upscaling.md +++ b/docs/upscaling.md @@ -138,7 +138,23 @@ pointer read a frame later is all zeros; snapshotting its first 48 floats at pub That 45 degrees is also the needle for the rest of the matrix: a projection built from it has m11 = 1/tan(22.5 deg) = **2.41421**, so the view projection the draws use can be found by looking for that value in the uniform buffer a scene draw reads, rather than by guessing at another object's -offsets. +offsets. `RX_VK_VP_HUNT=1` does that, and found it at once: + +``` +vp hunt: stage 5 slot 0, m11 at +68, matrix from +48: + 1.358 0 0 0 + 0 2.414 0 0 + 0 0 -1 -0.2 + 0 0 -1 0 +``` + +m11 is 2.414 as predicted, 2.414 / 1.358 = 1.777 = 16/9, and the last row makes w = -z. So the +scene draws read their projection from **stage 5, slot 0, byte 48** of a uniform buffer, and it +agrees with the camera the lifted code publishes. + +It is the projection **alone**, though: the upper-left 3x3 is diagonal, with no rotation or +translation in it. A temporal upscaler reprojects with view times projection, so the view is still +to be found -- and it should be in the same buffer, since a draw needs both. That removes the approximation the reference implementation settles for — it documents using "a typical near plane and vertical field of view" because DLSS hands it no camera — and it is the same diff --git a/gpu/vk/vk_draw.cpp b/gpu/vk/vk_draw.cpp index 9c707da42..1c96e7e6f 100644 --- a/gpu/vk/vk_draw.cpp +++ b/gpu/vk/vk_draw.cpp @@ -4520,7 +4520,7 @@ static void vp_hunt(const NvnState& s) { static const bool on = getenv("RX_VK_VP_HUNT") != nullptr; if (!on) return; static std::atomic told{0}; - if (told.load(std::memory_order_relaxed) >= 8) return; + if (told.load(std::memory_order_relaxed) >= 1) return; // (one buffer dump is the point) for (int stage = 0; stage < kNvnStages; stage++) { for (int slot = 0; slot < 16; slot++) { const nvn_p_bind_buf& u = s.ubo[stage][slot]; @@ -4532,18 +4532,25 @@ static void vp_hunt(const NvnState& s) { float v = 0; memcpy(&v, &word, 4); if (!(v > 2.4139f && v < 2.4145f)) continue; - char line[420]; - int n = snprintf(line, sizeof line, - "vk: vp hunt: stage %d slot %d, m11 at +%llu, matrix from +%llu:", - stage, slot, (unsigned long long)off, (unsigned long long)(off - 20)); - for (int i = 0; i < 16 && n < 380; i++) { - uint32_t w2 = 0; - float f2 = 0; - if (ub_read(u.addr + off - 20 + (uint64_t)i * 4, &w2, 4)) memcpy(&f2, &w2, 4); - n += snprintf(line + n, sizeof line - n, " %.4g", (double)f2); + // The matrix at the hit is the projection alone -- its upper-left 3x3 came back + // diagonal -- so the view, or a combined view projection, is elsewhere in the same + // buffer. Dump the whole buffer in rows of four, which is how a 4x4 reads, and look + // for a rotated 3x3. + logf("vk: vp hunt: stage %d slot %d, m11 at +%llu, buffer %llu bytes", stage, slot, + (unsigned long long)off, (unsigned long long)u.size); + for (uint64_t row = 0; row * 16 < bytes; row++) { + char line[160]; + int n = snprintf(line, sizeof line, "vk: +%3llu:", (unsigned long long)(row * 16)); + for (int i = 0; i < 4 && n < 130; i++) { + uint32_t w2 = 0; + float f2 = 0; + if (ub_read(u.addr + row * 16 + (uint64_t)i * 4, &w2, 4)) memcpy(&f2, &w2, 4); + n += snprintf(line + n, sizeof line - n, " %11.4g", (double)f2); + } + logf("%s", line); + if (row >= 23) break; // (24 rows: six 4x4s is more than enough to find it) } - logf("%s", line); - if (told.fetch_add(1, std::memory_order_relaxed) + 1 >= 8) return; + if (told.fetch_add(1, std::memory_order_relaxed) + 1 >= 1) return; break; // (one hit per buffer is enough to name it) } } From df82d909aeb0a8b6593f23ae5c847db8c98a99e3 Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 18:08:24 -0600 Subject: [PATCH 029/119] feat: compose the scene's view projection, and transpose it for the shader The hunt's wider dump gave the whole buffer, 192 bytes at stage 5 slot 0: + 0: 1 0 0 -0 the view, 3x4 row major + 16: 0 0.9487 -0.3162 -0.4743 (orthonormal: 0.9487^2 + 0.3162^2 = 1) + 32: 0 0.3162 0.9487 -3.32 + 48: 1.358 0 0 0 the projection, 4x4 + 64: 0 2.414 0 0 + 80: 0 0 -1 -0.2 + 96: 0 0 -1 0 +112: 80 45 0.0125 0.02222 the viewport and its reciprocals so the renderer composes projection times view itself, with the view's implied fourth row, and that is the matrix a reprojection needs: the one the depth was actually rendered with, not one read out of a game object a frame later. The buffer is recognized by its contents rather than by a program key -- the projection's m11 is 1/tan(fovy/2), its last row makes w = -z, and the rows that should be zero are -- so a buffer that does not look like a projection is left alone. Read through ub_read, which is the submitted uniform data and not live guest memory, as the replay rules require. Also fixes a bug that would have been invisible: GLSL loads a mat4 column by column and everything here is row major, so both matrices now go into the push constants transposed. Untransposed it does not fail, it reprojects through the transpose, which looks like plausible motion pointing the wrong way. Builds clean with RX_VK_ONLY=1. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- gpu/vk/vk_camera_motion.cpp | 14 +++++++-- gpu/vk/vk_camera_motion.h | 3 +- gpu/vk/vk_draw.cpp | 57 ++++++++++++++++++++++++++++++++++++- 3 files changed, 69 insertions(+), 5 deletions(-) diff --git a/gpu/vk/vk_camera_motion.cpp b/gpu/vk/vk_camera_motion.cpp index 318a64841..0384e3f01 100644 --- a/gpu/vk/vk_camera_motion.cpp +++ b/gpu/vk/vk_camera_motion.cpp @@ -160,12 +160,20 @@ VkImageView record(VkCommandBuffer cmd, VkImageView depth, VkFormat depth_format } if (!g.pipeline || !make_target(width, height)) return VK_NULL_HANDLE; + // GLSL loads a mat4 from sixteen floats column by column, and everything here is row major, so + // both matrices go in transposed. Getting this wrong does not fail: it reprojects through the + // transpose, which looks like plausible motion pointing the wrong way. + const auto transpose_into = [](const float* src, float* dst) { + for (int r = 0; r < 4; r++) + for (int c = 0; c < 4; c++) dst[c * 4 + r] = src[r * 4 + c]; + }; Push push{}; - if (!invert(view_projection.m, push.inverse_view_projection)) return VK_NULL_HANDLE; + float inverse_row[16]; + if (!invert(view_projection.m, inverse_row)) return VK_NULL_HANDLE; + transpose_into(inverse_row, push.inverse_view_projection); // The first frame, and the frame after a reset, have nothing to reproject through: this frame's // matrix stands in, which makes the motion exactly zero rather than arbitrary. - memcpy(push.previous_view_projection, g.have_previous ? g.previous.m : view_projection.m, - sizeof push.previous_view_projection); + transpose_into(g.have_previous ? g.previous.m : view_projection.m, push.previous_view_projection); push.render_size[0] = (int32_t)width, push.render_size[1] = (int32_t)height; // (reversed depth: the far plane is 0. A format that is not reversed would want 1 here, and // nothing in this game has been seen using one) diff --git a/gpu/vk/vk_camera_motion.h b/gpu/vk/vk_camera_motion.h index bc27c18ab..204664da8 100644 --- a/gpu/vk/vk_camera_motion.h +++ b/gpu/vk/vk_camera_motion.h @@ -12,7 +12,8 @@ namespace mkwvk::camera_motion { -/// A view projection, row major as the shader multiplies it. +/// A view projection, row major. record() transposes it for the shader, which loads a mat4 column +/// by column. struct Matrix { float m[16]{}; }; diff --git a/gpu/vk/vk_draw.cpp b/gpu/vk/vk_draw.cpp index 1c96e7e6f..46cd91dab 100644 --- a/gpu/vk/vk_draw.cpp +++ b/gpu/vk/vk_draw.cpp @@ -4508,6 +4508,57 @@ void bind_index(VkCommandBuffer cmd, VkBuffer buffer, VkDeviceSize offset, VkInd last_ib = {b, (uint64_t)offset, (uint32_t)type, true}; } +/// (hookshot) The view projection a scene draw read, composed from the two matrices its uniform +/// buffer carries. RX_VK_VP_HUNT found the layout and docs/upscaling.md records it: 192 bytes at +/// stage 5 slot 0, a 3x4 row-major view at +0 (its last row implied 0,0,0,1), the 4x4 projection at +/// +48, and the viewport with its reciprocals at +112. +/// +/// Taken from the draw rather than from a game object, because this is the matrix the depth was +/// actually rendered with, which is what a reprojection needs. Read through ub_read, so it is the +/// submitted uniform data and not live guest memory. +struct SceneViewProjection { + float m[16]{}; ///< row major, projection times view + bool have = false; +}; +SceneViewProjection scene_vp; + +/// Recognizes the buffer by its own contents rather than by a program key: the projection's m11 is +/// 1/tan(fovy/2) and its last row makes w = -z. A buffer that does not look like that is left alone. +static void capture_view_projection(const NvnState& s) { + for (int stage = 0; stage < kNvnStages; stage++) { + for (int slot = 0; slot < 16; slot++) { + const nvn_p_bind_buf& u = s.ubo[stage][slot]; + if (!u.addr || u.size < 112) continue; + float f[28]; + if (!ub_read(u.addr, f, sizeof f)) continue; + // (the projection at +48: f[12..27]. m11 = f[17], and f[26] = -1 with f[27] = 0 is w = -z) + if (!(f[17] > 0.5f && f[17] < 20.0f) || f[26] > -0.5f || f[27] != 0.0f) continue; + if (f[13] != 0.0f || f[14] != 0.0f || f[16] != 0.0f) continue; // (a clean projection) + const float* v = f; // the 3x4 view + const float* pr = f + 12; // the 4x4 projection + float vp[16]; + for (int r = 0; r < 4; r++) { + for (int c = 0; c < 4; c++) { + float sum = 0; + for (int k = 0; k < 4; k++) { + // (the view's implied fourth row is 0,0,0,1) + const float vk = k < 3 ? v[k * 4 + c] : (c == 3 ? 1.0f : 0.0f); + sum += pr[r * 4 + k] * vk; + } + vp[r * 4 + c] = sum; + } + } + memcpy(scene_vp.m, vp, sizeof vp); + scene_vp.have = true; + static std::atomic told{0}; + if (told++ == 0) + logf("vk: the scene's view projection: stage %d slot %d, view at +0 and projection " + "at +48 (m11 %.3f)", stage, slot, (double)f[17]); + return; + } + } +} + /// (hookshot) RX_VK_VP_HUNT=1: find the view projection a scene draw reads, by looking for a value /// only it can hold. The camera publishes tan(fovy/2) = 0.41421, so the projection's m11 is /// 1/0.41421 = 2.41421, and a row-major 4x4 keeps m11 five floats in. This scans each bound uniform @@ -4559,6 +4610,7 @@ static void vp_hunt(const NvnState& s) { void draw(VkCommandBuffer cmd, NvnState& s, const DrawArgs& d) { vp_hunt(s); + capture_view_projection(s); PROF(PROF_DRAW); FINE_N(FC_DRAWS, 1); stats_tick(); @@ -5615,7 +5667,10 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { if (fsr_here && scene_depth.view && fsr3::supported() && scene_depth.width == req.inputs.render_width && scene_depth.height == req.inputs.render_height) { camera_motion::Matrix vp{}; - if (hos_oot_view_projection && hos_oot_view_projection(vp.m)) { + bool have_vp = scene_vp.have; + if (have_vp) memcpy(vp.m, scene_vp.m, sizeof vp.m); + else if (hos_oot_view_projection) have_vp = hos_oot_view_projection(vp.m) != 0; + if (have_vp) { const VkImageView motion = camera_motion::record(cmd, scene_depth.view, scene_depth.format, scene_depth.width, scene_depth.height, vp); if (motion) { From 2d9b4e8d62923f352896b4c7869bb8eeda609a0a Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 18:11:01 -0600 Subject: [PATCH 030/119] fix: the view projection scan ran per draw, which stuttered hard Reported from a real run. capture_view_projection was called from draw(), which runs about 1106 times a frame in this game, and each call walked every stage and all sixteen slots doing a ub_read on each bound uniform buffer -- tens of thousands of uniform reads a frame. It is now bounded to once per render target set, which is a handful of times a frame, and still refreshes every frame because the serial changes with the targets. Also fixes the reason FSR never ran at all in that run, which the log made plain: the gate compared the scene depth's extent against req.inputs.render_width, and the contract leaves that at 0 for this dispatch because it has no motion or depth among its bindings. Gating on a value that is always 0 meant the branch could not be taken. It now uses the dispatch's own input extent -- the single sampled texture the network upscales from -- which is the thing the depth has to match. So the stutter was not FSR: FSR had not executed a single dispatch. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- gpu/vk/vk_draw.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/gpu/vk/vk_draw.cpp b/gpu/vk/vk_draw.cpp index 46cd91dab..9f5964ab5 100644 --- a/gpu/vk/vk_draw.cpp +++ b/gpu/vk/vk_draw.cpp @@ -4525,6 +4525,11 @@ SceneViewProjection scene_vp; /// Recognizes the buffer by its own contents rather than by a program key: the projection's m11 is /// 1/tan(fovy/2) and its last row makes w = -z. A buffer that does not look like that is left alone. static void capture_view_projection(const NvnState& s) { + // Once per render target set, not once per draw. Called from draw() it ran 1106 times a frame + // and walked every stage and slot reading uniforms each time, which stuttered hard on a real + // display. The serial changes when the targets do, so the matrix still refreshes every frame. + static thread_local uint64_t done_for = ~0ull; + if (done_for == targets_serial) return; for (int stage = 0; stage < kNvnStages; stage++) { for (int slot = 0; slot < 16; slot++) { const nvn_p_bind_buf& u = s.ubo[stage][slot]; @@ -4550,6 +4555,7 @@ static void capture_view_projection(const NvnState& s) { } memcpy(scene_vp.m, vp, sizeof vp); scene_vp.have = true; + done_for = targets_serial; static std::atomic told{0}; if (told++ == 0) logf("vk: the scene's view projection: stage %d slot %d, view at +0 and projection " @@ -5664,8 +5670,13 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { // format conversion the game's network would have done itself. // (hookshot) The two inputs this dispatch never carries, assembled: the scene's own depth, and // motion reprojected from it. docs/upscaling.md says why they cannot be taken from here. - if (fsr_here && scene_depth.view && fsr3::supported() && - scene_depth.width == req.inputs.render_width && scene_depth.height == req.inputs.render_height) { + // (the dispatch's own input extent, which is what the network upscales from. req.inputs is the + // contract's view of the bindings and leaves the render extent at 0 for this dispatch, because + // it has no motion or depth among them -- gating on that meant FSR could never be reached) + uint32_t in_w = 0, in_h = 0; + if (!bindings.empty()) in_w = bindings[0].width, in_h = bindings[0].height; + if (fsr_here && scene_depth.view && fsr3::supported() && in_w && in_h && + scene_depth.width == in_w && scene_depth.height == in_h) { camera_motion::Matrix vp{}; bool have_vp = scene_vp.have; if (have_vp) memcpy(vp.m, scene_vp.m, sizeof vp.m); @@ -5679,10 +5690,11 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { assembled.inputs.inputs_complete = true; assembled.inputs.render_width = scene_depth.width; assembled.inputs.render_height = scene_depth.height; + assembled.inputs.colour = 0; // (the dispatch's single sampled texture) assembled.colour_binding = assembled.inputs.colour; if (upscale::temporal_possible(assembled)) { fsr3::Inputs ai; - ai.color = dw.imgs[req.inputs.colour != upscale::kNone ? req.inputs.colour : 0].imageView; + ai.color = dw.imgs[0].imageView; // (its only sampled texture) ai.depth = scene_depth.view; ai.motion = motion; ai.render_width = scene_depth.width, ai.render_height = scene_depth.height; From 85a3ea21e7dc8f92bb06891b5b35f6d37a075ed2 Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 18:15:20 -0600 Subject: [PATCH 031/119] feat: count FSR evaluations, because nine passes a call is cheap or ruinous FSR runs end to end -- eleven pipelines, 1536x864 to 2048x1152, with the assembled depth and the camera motion -- and costs about 320 ms a frame, which is 3.1 fps and unusable. Ruled out from the log already: no fallback of its images to system memory, no failed allocation, and prepare() is not rebuilding its eighteen images per frame, since the size line appears once. The hypothesis worth testing first is how often this is called. Nine passes over two million pixels is a few milliseconds once a frame and ruinous twenty times a frame, and the per-network log prints once per program key rather than per call, so there was no count. This logs the running total every 300 evaluations, so the rate reads off the gap between timestamps against a known frame rate. Measurement only; RX_VK_FSR stays off by default. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- gpu/vk/vk_draw.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/gpu/vk/vk_draw.cpp b/gpu/vk/vk_draw.cpp index 9f5964ab5..948915cb6 100644 --- a/gpu/vk/vk_draw.cpp +++ b/gpu/vk/vk_draw.cpp @@ -5704,10 +5704,15 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { const float th = hos_oot_camera ? hos_oot_camera(&np, &fp) : 0.0f; if (th > 0.0f && np > 0.0f) ai.near_plane = np, ai.fov_y = 2.0f * std::atan(th); if (fsr3::upscale(cmd, ai)) { + // (how often this runs, with the log's own timestamps: nine passes a call + // is cheap once a frame and ruinous twenty times, and 3 fps said one of + // those was happening. Every 300 so the rate is readable from the gap) static std::atomic said{0}; - if (said++ == 0) + const int n = said++; + if (n == 0) logf("vk: fsr3 %ux%u -> %ux%u with assembled depth and camera motion", ai.render_width, ai.render_height, ai.upscale_width, ai.upscale_height); + if (n % 300 == 0) logf("vk: fsr3 evaluations: %d", n + 1); VkImageBlit b{}; b.srcSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}; b.srcOffsets[1] = {(int32_t)req.output_width, (int32_t)req.output_height, 1}; From 66e8c3a6fd90d3a41abf7a69eaac6f3468e5c06f Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 18:19:43 -0600 Subject: [PATCH 032/119] fix: clear the SPD counter between the pyramid passes (did not fix the cost) The two pyramid passes share one atomic counter and the single-pass downsampler uses it to elect the workgroup that finishes the mip chain. Clearing it once a frame left the second pass starting at the workgroup total, so this clears it between them, with barriers either side. That is correct on its own terms -- the SDK does not hand two passes a counter one of them has already run to the top -- but it is **not** the cost. Measured before and after: the frame rate still falls from about 60 to 3.6 fps the moment FSR engages. Recording that here so the next person does not read this commit as the fix. What is known: one evaluation a frame (the counter says so), about half a second each, no image in system memory, no failed allocation, prepare() not rebuilding. Two hypotheses tried and wrong -- that it ran many times a frame, and this. The next step is GPU timing per pass, not another guess. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- gpu/vk/vk_fsr3.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/gpu/vk/vk_fsr3.cpp b/gpu/vk/vk_fsr3.cpp index 31a1b7042..5f54f2ff3 100644 --- a/gpu/vk/vk_fsr3.cpp +++ b/gpu/vk/vk_fsr3.cpp @@ -636,6 +636,20 @@ bool upscale(VkCommandBuffer cmd, const Inputs& in) { run(1, {current_luma, tex(g.farthest_depth), tex(g.spd_atomic), tex(g.frame_info), mip(0), mip(1), mip(2), mip(3), mip(4), mip(5), tex(g.farthest_depth_mip1), cb_fsr, cb_spd}, spd_x, spd_y); + // (hookshot) The two pyramid passes share one atomic counter, and the single-pass downsampler + // uses it to elect the workgroup that finishes the chain: it counts up to num_work_groups and + // the last one through does the tail. Clearing it only once a frame leaves the second pass + // starting at the total, so no workgroup is elected and the ones waiting on the tail spin. One + // FSR evaluation cost about half a second before this, with the frame rate falling to 1.9 fps. + { + const VkClearColorValue zero_again{}; + memory_barrier(cmd, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_WRITE_BIT, + VK_PIPELINE_STAGE_2_TRANSFER_BIT, VK_ACCESS_2_TRANSFER_WRITE_BIT); + vkCmdClearColorImage(cmd, g.spd_atomic.image, VK_IMAGE_LAYOUT_GENERAL, &zero_again, 1, &ALL_LEVELS); + memory_barrier(cmd, VK_PIPELINE_STAGE_2_TRANSFER_BIT, VK_ACCESS_2_TRANSFER_WRITE_BIT, + VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, + VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_SHADER_WRITE_BIT); + } run(3, {current_luma, tex(g.luma[q]), tex(g.dilated_motion_vectors), exposure, tex(g.spd_atomic), mip(0), mip(1), mip(2), mip(3), mip(4), mip(5), cb_fsr, cb_spd}, spd_x, spd_y); From 1d7f262574bfe18de93289b34b13ae6011eec0d8 Mon Sep 17 00:00:00 2001 From: notquiteog Date: Sun, 8 Nov 2026 18:24:05 -0600 Subject: [PATCH 033/119] feat: a timed span per FSR pass, so the cost has a number per pass Two hypotheses about the 3.6 fps have been wrong, so this stops guessing. The renderer already has a GPU profiler that times every compute dispatch (RX_VK_PASS_TIMING=1, gpu/vk/vk_gprof.h) and reports the labels that took the most GPU time every 600 presents; each FSR pass now opens a span labelled with its own name, so the report gives milliseconds by pass instead of one total. Nine passes costing half a second between them is either one pathological pass or all nine being slow, and those want different fixes. A number per pass tells them apart in one run. No cost when the profiler is off: gprof_begin returns false and the span is not opened. Assisted-by: Claude Opus 5 Co-Authored-By: Claude Opus 5 --- gpu/vk/vk_fsr3.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/gpu/vk/vk_fsr3.cpp b/gpu/vk/vk_fsr3.cpp index 5f54f2ff3..92653f2f1 100644 --- a/gpu/vk/vk_fsr3.cpp +++ b/gpu/vk/vk_fsr3.cpp @@ -8,12 +8,14 @@ #include #include #include +#include #include #include #include #include #include "vk_fsr3.h" +#include "vk_gprof.h" // (RX_VK_PASS_TIMING: a span per pass, so the report names them) #include "vk_texture.h" // (full_barrier: what the rest of the renderer uses between passes) #include "shaders/fsr3_accumulate_comp_spv.h" @@ -378,10 +380,15 @@ void record_pass(VkCommandBuffer cmd, const Pipeline& p, const PassInfo& info, c w.pImageInfo = info_ptr; writes.push_back(w); } + // (one timed span per pass with RX_VK_PASS_TIMING=1, so the profiler's report gives GPU ms by + // pass name. Nine passes costing half a second between them needs a number per pass, not + // another hypothesis) + const bool timed = gprof_begin(cmd); vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, p.pipeline); vkCmdPushDescriptorSetKHR(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, p.layout, 0, (uint32_t)writes.size(), writes.data()); vkCmdDispatch(cmd, std::max(1u, groups_x), std::max(1u, groups_y), 1); + if (timed) gprof_end(cmd, std::string("fsr3 ") + info.name); // (every pass reads what the one before it wrote) memory_barrier(cmd, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_WRITE_BIT, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, From 6aa9f48f438768ca553915b1a847a39a8a6ba1d4 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Sun, 8 Nov 2026 18:43:57 -0600 Subject: [PATCH 034/119] feat: DLSS at the seam, and a stage switch for the FSR cost The seam can now hold either vendor backend. upscale::choose gains Fsr3 and Dlss, both of them only where temporal_possible agrees: each produces a wrong picture rather than a worse one when handed less than colour, motion and depth at one extent, which is the difference between them and the spatial stand-in. DLSS is preferred where the hardware has it, since its availability already means an NVIDIA driver reporting Super Resolution. NGX is handed whole resources rather than views, so the renderer now records what each sampled binding is a view of (DescWriter::Source, pushed in lockstep with imgs) and camera_motion publishes its target's image and format. Without those a dispatch's colour cannot be given to DLSS at all. The device is created with what DLSS needs, asked of NGX itself (NVSDK_NGX_VULKAN_GetFeatureDeviceExtensionRequirements) rather than from a list written out here that would be wrong on the next driver. An extension NGX names and the GPU lacks is logged and left out, so DLSS reports itself unavailable instead of vkCreateDevice failing and taking the renderer with it. RX_VK_DLSS_SDK= now reaches the compiler, which is the whole of what a builder needs to do: nothing of NVIDIA's is in this repository, or may be. Also RX_VK_FSR_STAGE, which cuts the upscale path short at four points so a run names the cost of a stage instead of another hypothesis, and a line every 30 evaluations giving the milliseconds between them. Co-Authored-By: Claude Opus 5 --- gpu/vk/upscale_seam.h | 18 ++++++++- gpu/vk/vk_camera_motion.cpp | 8 ++++ gpu/vk/vk_camera_motion.h | 5 +++ gpu/vk/vk_dlss.cpp | 56 +++++++++++++++++++++++++ gpu/vk/vk_dlss.h | 14 +++++++ gpu/vk/vk_draw.cpp | 81 ++++++++++++++++++++++++++++++++----- gpu/vk/vk_fsr3.cpp | 36 ++++++++++++++++- gpu/vk/vk_fsr3.h | 12 ++++++ gpu/vk/vk_main.cpp | 24 +++++++++++ nx2/build.py | 6 +++ tests/upscale_seam_test.cpp | 22 ++++++++++ 11 files changed, 271 insertions(+), 11 deletions(-) diff --git a/gpu/vk/upscale_seam.h b/gpu/vk/upscale_seam.h index afa601782..390ea9671 100644 --- a/gpu/vk/upscale_seam.h +++ b/gpu/vk/upscale_seam.h @@ -14,6 +14,8 @@ namespace mkwvk::upscale { enum class Backend : uint8_t { None, ///< nothing does: the dispatch runs as itself StandIn, ///< the compute resolve in shaders/taau_upscale.comp + Fsr3, ///< AMD FSR 3.1, recorded as our own compute passes (gpu/vk/vk_fsr3.h) + Dlss, ///< NVIDIA DLSS Super Resolution through NGX (gpu/vk/vk_dlss.h) }; /// What the renderer can offer this dispatch. A backend that is not here cannot be chosen, whatever the inputs say. @@ -22,6 +24,10 @@ struct Availability { bool push_descriptor = false; /// The program key is in the stand-in's list (RX_VK_TAAU_KEYS), so the translated network is not to be trusted. bool stand_in_wanted = false; + /// FSR 3.1 was asked for (RX_VK_FSR=1) and this device can run its passes. + bool fsr3 = false; + /// DLSS was asked for (RX_VK_DLSS=1), this build has an NGX SDK, and the driver reports Super Resolution. + bool dlss = false; }; /// A dispatch resolved once, in the terms a backend needs. Extents are in pixels; zero means the renderer could not @@ -73,8 +79,16 @@ inline const char* temporal_refusal(const Request& r) { /// The stand-in does not need the contract: it is a spatial resolve, and it runs wherever the key list asks for it, /// exactly as it did before this seam existed. A temporal backend will be preferred here once there is one, and only /// where `temporal_possible` agrees. -inline Backend choose(const Availability& a, const Request&) { +inline Backend choose(const Availability& a, const Request& r) { if (!a.push_descriptor) return Backend::None; + // A vendor upscaler only where the inputs are all there: both of them resolve from colour, motion and depth at + // one extent, and neither degrades gracefully when handed less -- it produces a wrong picture instead. + if (temporal_possible(r)) { + // DLSS first where the hardware has it, because on that hardware it is the better of the two and its + // availability already means an NVIDIA driver reporting Super Resolution; FSR runs anywhere. + if (a.dlss) return Backend::Dlss; + if (a.fsr3) return Backend::Fsr3; + } if (a.stand_in_wanted) return Backend::StandIn; return Backend::None; } @@ -82,6 +96,8 @@ inline Backend choose(const Availability& a, const Request&) { inline const char* backend_name(Backend b) { switch (b) { case Backend::StandIn: return "stand-in"; + case Backend::Fsr3: return "FSR 3.1"; + case Backend::Dlss: return "DLSS"; default: break; } return "none"; diff --git a/gpu/vk/vk_camera_motion.cpp b/gpu/vk/vk_camera_motion.cpp index 0384e3f01..de5d5db5f 100644 --- a/gpu/vk/vk_camera_motion.cpp +++ b/gpu/vk/vk_camera_motion.cpp @@ -208,6 +208,14 @@ VkImageView record(VkCommandBuffer cmd, VkImageView depth, VkFormat depth_format return g.view; } +VkImage motion_image() { + return g.image; +} + +VkFormat motion_format() { + return g.image ? VK_FORMAT_R16G16_SFLOAT : VK_FORMAT_UNDEFINED; +} + void reset() { g.have_previous = false; } diff --git a/gpu/vk/vk_camera_motion.h b/gpu/vk/vk_camera_motion.h index 204664da8..a3cfca160 100644 --- a/gpu/vk/vk_camera_motion.h +++ b/gpu/vk/vk_camera_motion.h @@ -28,6 +28,11 @@ struct Matrix { /// a matrix from before a cut or a load. void reset(); +/// The motion target this module writes, for a backend that is handed resources rather than views +/// (gpu/vk/vk_dlss.h). Null and VK_FORMAT_UNDEFINED before the first record(). +[[nodiscard]] VkImage motion_image(); +[[nodiscard]] VkFormat motion_format(); + void shutdown(); } // namespace mkwvk::camera_motion diff --git a/gpu/vk/vk_dlss.cpp b/gpu/vk/vk_dlss.cpp index 120d15eec..382022aba 100644 --- a/gpu/vk/vk_dlss.cpp +++ b/gpu/vk/vk_dlss.cpp @@ -192,6 +192,11 @@ struct Ngx { decltype(&NVSDK_NGX_VULKAN_CreateFeature) create = nullptr; decltype(&NVSDK_NGX_VULKAN_EvaluateFeature) evaluate = nullptr; decltype(&NVSDK_NGX_VULKAN_ReleaseFeature) release = nullptr; + /// The two discovery calls, which answer before a device exists. Optional: an NGX without them + /// is an NGX whose DLSS needs nothing beyond the core, and refusing to load over a missing + /// discovery call would turn a working configuration into an unavailable one. + decltype(&NVSDK_NGX_VULKAN_GetFeatureInstanceExtensionRequirements) instance_exts = nullptr; + decltype(&NVSDK_NGX_VULKAN_GetFeatureDeviceExtensionRequirements) device_exts = nullptr; bool started = false; NVSDK_NGX_Parameter* params = nullptr; ///< the evaluation's own parameters NVSDK_NGX_Handle* feature = nullptr; @@ -239,9 +244,28 @@ bool ngx_load() { NGX_RESOLVE(evaluate, "NVSDK_NGX_VULKAN_EvaluateFeature") NGX_RESOLVE(release, "NVSDK_NGX_VULKAN_ReleaseFeature") #undef NGX_RESOLVE + ngx.instance_exts = (decltype(ngx.instance_exts))(void*)GetProcAddress( + ngx.module, "NVSDK_NGX_VULKAN_GetFeatureInstanceExtensionRequirements"); + ngx.device_exts = (decltype(ngx.device_exts))(void*)GetProcAddress( + ngx.module, "NVSDK_NGX_VULKAN_GetFeatureDeviceExtensionRequirements"); return true; } +const wchar_t* data_path(); // (defined below: the folder NGX keeps its own files in) + +/// What a discovery call is asked about: Super Resolution, this SDK's version, our project id. +NVSDK_NGX_FeatureDiscoveryInfo discovery_info() { + NVSDK_NGX_FeatureDiscoveryInfo info{}; + info.SDKVersion = NVSDK_NGX_Version_API; + info.FeatureID = NVSDK_NGX_Feature_SuperSampling; + info.Identifier.IdentifierType = NVSDK_NGX_Application_Identifier_Type_Project_Id; + info.Identifier.v.ProjectDesc.ProjectId = kProjectId; + info.Identifier.v.ProjectDesc.EngineType = NVSDK_NGX_ENGINE_TYPE_CUSTOM; + info.Identifier.v.ProjectDesc.EngineVersion = kEngineVersion; + info.ApplicationDataPath = data_path(); + return info; +} + /// The game folder, wide, for NGX's application data path: where it writes what it keeps and where /// the model library beside the binary is looked for. const wchar_t* data_path() { @@ -457,6 +481,38 @@ bool supported() { return answer; } +size_t instance_extensions(const char** out, size_t max) { +#if defined(RX_VK_DLSS_SDK) + if (!wanted() || !ngx_load() || !ngx.instance_exts) return 0; + const NVSDK_NGX_FeatureDiscoveryInfo info = discovery_info(); + uint32_t n = 0; + VkExtensionProperties* props = nullptr; + if (NVSDK_NGX_FAILED(ngx.instance_exts(&info, &n, &props)) || !props) return 0; + size_t kept = 0; + for (uint32_t i = 0; i < n && kept < max; i++) out[kept++] = props[i].extensionName; + return kept; +#else + (void)out, (void)max; + return 0; +#endif +} + +size_t device_extensions(VkInstance instance, VkPhysicalDevice gpu, const char** out, size_t max) { +#if defined(RX_VK_DLSS_SDK) + if (!wanted() || !instance || !gpu || !ngx_load() || !ngx.device_exts) return 0; + const NVSDK_NGX_FeatureDiscoveryInfo info = discovery_info(); + uint32_t n = 0; + VkExtensionProperties* props = nullptr; + if (NVSDK_NGX_FAILED(ngx.device_exts(instance, gpu, &info, &n, &props)) || !props) return 0; + size_t kept = 0; + for (uint32_t i = 0; i < n && kept < max; i++) out[kept++] = props[i].extensionName; + return kept; +#else + (void)instance, (void)gpu, (void)out, (void)max; + return 0; +#endif +} + bool prepare(uint32_t render_width, uint32_t render_height, uint32_t upscale_width, uint32_t upscale_height) { if (!supported()) return false; diff --git a/gpu/vk/vk_dlss.h b/gpu/vk/vk_dlss.h index 3f3cdbef5..c1a1be4aa 100644 --- a/gpu/vk/vk_dlss.h +++ b/gpu/vk/vk_dlss.h @@ -69,6 +69,20 @@ struct Inputs { /// Unlike FSR's, this does not make the thing that does the work: `NVSDK_NGX_VULKAN_CreateFeature` /// records into a command buffer, and there is none here. The feature is created at the first /// `upscale()` after a change of extents instead, which is why this signature can stay FSR's. +/// The instance and device extensions DLSS needs here, asked of NGX itself rather than written out +/// from the documentation: the set depends on the driver, and a list hard-coded here would be wrong +/// on the next one. Both answer before the thing they are about exists, which is why they take what +/// they do and not `dev`. `out` is filled with at most `max` names and the count is returned; zero +/// means DLSS was not asked for, this build has no NGX SDK, or NGX does not answer -- in every one +/// of those the device is created as it would have been. The names are NGX's own storage and last +/// as long as the process. +/// +/// Call them before vkCreateInstance / vkCreateDevice. DLSS cannot be made to work afterwards: an +/// extension it needs and the device does not have is the one failure that is not recoverable at +/// evaluation time. +size_t instance_extensions(const char** out, size_t max); +size_t device_extensions(VkInstance instance, VkPhysicalDevice gpu, const char** out, size_t max); + [[nodiscard]] bool prepare(uint32_t render_width, uint32_t render_height, uint32_t upscale_width, uint32_t upscale_height); diff --git a/gpu/vk/vk_draw.cpp b/gpu/vk/vk_draw.cpp index 948915cb6..8ae7d00fa 100644 --- a/gpu/vk/vk_draw.cpp +++ b/gpu/vk/vk_draw.cpp @@ -43,6 +43,7 @@ #include "upscale_format.h" #include "upscale_seam.h" #include "vk_camera_motion.h" +#include "vk_dlss.h" #include "vk_fsr3.h" #include "shaders/movie_upscale_comp_spv.h" #include "shader_recompiler/backend/spirv/mma_layout.h" @@ -1673,8 +1674,19 @@ struct DescWriter { std::vector bufs; std::vector imgs; std::vector views; + /// (hookshot) What each entry of `imgs` is a view of, pushed in lockstep so index i is the same binding in + /// both. A view is the whole of an input to a draw and to our own compute passes, but NGX is handed whole + /// resources (gpu/vk/vk_dlss.h: a view *and* its image, format and extent), so DLSS cannot be given a + /// dispatch's colour from `imgs` alone. Default-constructed where the binding fell back to a dummy, which is + /// what a backend has to refuse on. + struct Source { + VkImage image = VK_NULL_HANDLE; + VkFormat format = VK_FORMAT_UNDEFINED; + uint32_t width = 0, height = 0; + }; + std::vector srcs; void reset() { - writes.clear(), bufs.clear(), imgs.clear(), views.clear(); + writes.clear(), bufs.clear(), imgs.clear(), views.clear(), srcs.clear(); } }; thread_local DescWriter dw; @@ -2139,6 +2151,8 @@ void build_descriptors(const NvnState& s, const Program& p) { if (view && tex && tex->gpu_written) draw_sampled.push_back(tex); if (!view) view = dummies.view[(int)vt], st_dummy_textures += handle != 0; dw.imgs.push_back({sampler_for((int)(handle >> 20), d.is_depth), view, VK_IMAGE_LAYOUT_GENERAL}); + dw.srcs.push_back(tex ? DescWriter::Source{tex->image, tex->format, tex->width, tex->height} + : DescWriter::Source{}); } w.pImageInfo = &dw.imgs[first]; dw.writes.push_back(w); @@ -2174,6 +2188,8 @@ void build_descriptors(const NvnState& s, const Program& p) { if (dump_on()) dump_input(d.is_written ? 'W' : 'R', (uint32_t)dw.imgs.size(), handle, view ? tex : nullptr); if (!view && !dev.null_descriptor) view = VK_NULL_HANDLE; dw.imgs.push_back({VK_NULL_HANDLE, view, VK_IMAGE_LAYOUT_GENERAL}); + dw.srcs.push_back(tex ? DescWriter::Source{tex->image, tex->format, tex->width, tex->height} + : DescWriter::Source{}); } w.pImageInfo = &dw.imgs[first]; dw.writes.push_back(w); @@ -5619,7 +5635,13 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { // stand-in never does; gating everything on it would have made FSR unreachable on exactly the // hardware that can run it. RX_VK_FSR=1 therefore brings us in here on its own. static const bool fsr_wanted = getenv("RX_VK_FSR") && atoi(getenv("RX_VK_FSR")) != 0; - const bool fsr_here = fsr_wanted && avail.push_descriptor && upscale_trace_key(p.key); + // (hookshot) Both vendor backends ask their own question: FSR whether this device can run its + // passes, DLSS whether this is an NVIDIA driver reporting Super Resolution with an NGX runtime + // loaded. Each answers once and caches, so this costs nothing per dispatch. upscale::choose + // picks between them; this function does not. + avail.fsr3 = fsr_wanted && fsr3::supported(); + avail.dlss = dlss::supported(); + const bool fsr_here = (avail.fsr3 || avail.dlss) && avail.push_descriptor && upscale_trace_key(p.key); if (p.stages.empty()) return false; if (upscale::choose(avail, req) != upscale::Backend::StandIn && !fsr_here) return false; const Stage& st = p.stages[0]; @@ -5677,6 +5699,7 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { if (!bindings.empty()) in_w = bindings[0].width, in_h = bindings[0].height; if (fsr_here && scene_depth.view && fsr3::supported() && in_w && in_h && scene_depth.width == in_w && scene_depth.height == in_h) { + fsr3::note_frame(); // (the frame time at this seam, for every RX_VK_FSR_STAGE) camera_motion::Matrix vp{}; bool have_vp = scene_vp.have; if (have_vp) memcpy(vp.m, scene_vp.m, sizeof vp.m); @@ -5692,6 +5715,43 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { assembled.inputs.render_height = scene_depth.height; assembled.inputs.colour = 0; // (the dispatch's single sampled texture) assembled.colour_binding = assembled.inputs.colour; + if (upscale::choose(avail, assembled) == upscale::Backend::Dlss) { + // NGX is handed whole resources, not views: the colour's image and format come from the + // lockstep DescWriter::Source, the depth's from the targets, and the motion's from the + // module that just wrote it. A missing one is a refusal inside the backend. + dlss::Inputs di; + di.color = dw.imgs[0].imageView; + di.depth = scene_depth.view; + di.motion = motion; + di.color_image = dw.srcs.empty() ? VK_NULL_HANDLE : dw.srcs[0].image; + di.color_format = dw.srcs.empty() ? VK_FORMAT_UNDEFINED : dw.srcs[0].format; + di.depth_image = scene_depth.image; + di.depth_format = scene_depth.format; + di.motion_image = camera_motion::motion_image(); + di.motion_format = camera_motion::motion_format(); + di.render_width = scene_depth.width, di.render_height = scene_depth.height; + di.upscale_width = req.output_width, di.upscale_height = req.output_height; + di.motion_scale[0] = 1.0f, di.motion_scale[1] = 1.0f; // (already render pixels) + float dnp = 0.0f, dfp = 0.0f; + const float dth = hos_oot_camera ? hos_oot_camera(&dnp, &dfp) : 0.0f; + if (dth > 0.0f && dnp > 0.0f) di.near_plane = dnp, di.fov_y = 2.0f * std::atan(dth); + if (dlss::upscale(cmd, di)) { + static std::atomic said_dlss{0}; + if (said_dlss++ == 0) + logf("vk: dlss %ux%u -> %ux%u with assembled depth and camera motion", + di.render_width, di.render_height, di.upscale_width, di.upscale_height); + VkImageBlit b{}; + b.srcSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}; + b.srcOffsets[1] = {(int32_t)req.output_width, (int32_t)req.output_height, 1}; + b.dstSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, level, 0, 1}; + b.dstOffsets[1] = {(int32_t)req.output_width, (int32_t)req.output_height, 1}; + vkCmdBlitImage(cmd, dlss::output_image(), VK_IMAGE_LAYOUT_GENERAL, out->image, + VK_IMAGE_LAYOUT_GENERAL, 1, &b, VK_FILTER_NEAREST); + return true; + } + // (DLSS refused this one, so FSR below where it is available rather than nothing. The + // backend logs its own refusal, once.) + } if (upscale::temporal_possible(assembled)) { fsr3::Inputs ai; ai.color = dw.imgs[0].imageView; // (its only sampled texture) @@ -5713,13 +5773,16 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { logf("vk: fsr3 %ux%u -> %ux%u with assembled depth and camera motion", ai.render_width, ai.render_height, ai.upscale_width, ai.upscale_height); if (n % 300 == 0) logf("vk: fsr3 evaluations: %d", n + 1); - VkImageBlit b{}; - b.srcSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}; - b.srcOffsets[1] = {(int32_t)req.output_width, (int32_t)req.output_height, 1}; - b.dstSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, level, 0, 1}; - b.dstOffsets[1] = {(int32_t)req.output_width, (int32_t)req.output_height, 1}; - vkCmdBlitImage(cmd, fsr3::output_image(), VK_IMAGE_LAYOUT_GENERAL, out->image, - VK_IMAGE_LAYOUT_GENERAL, 1, &b, VK_FILTER_NEAREST); + if (fsr3::fsr_stage() != 3) { // (3: everything but this blit, so its cost shows) + VkImageBlit b{}; + b.srcSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}; + b.srcOffsets[1] = {(int32_t)req.output_width, (int32_t)req.output_height, 1}; + b.dstSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, level, 0, 1}; + b.dstOffsets[1] = {(int32_t)req.output_width, (int32_t)req.output_height, 1}; + vkCmdBlitImage(cmd, fsr3::output_image(), VK_IMAGE_LAYOUT_GENERAL, + out->image, VK_IMAGE_LAYOUT_GENERAL, 1, &b, + VK_FILTER_NEAREST); + } return true; } } diff --git a/gpu/vk/vk_fsr3.cpp b/gpu/vk/vk_fsr3.cpp index 92653f2f1..13b0c9355 100644 --- a/gpu/vk/vk_fsr3.cpp +++ b/gpu/vk/vk_fsr3.cpp @@ -16,6 +16,8 @@ #include "vk_fsr3.h" #include "vk_gprof.h" // (RX_VK_PASS_TIMING: a span per pass, so the report names them) +#include + #include "vk_texture.h" // (full_barrier: what the rest of the renderer uses between passes) #include "shaders/fsr3_accumulate_comp_spv.h" @@ -31,6 +33,14 @@ #include "shaders/fsr3_shading_change_pyramid_nowave_comp_spv.h" namespace mkwvk::fsr3 { +int fsr_stage() { + static const int n = []() { + const char* e = getenv("RX_VK_FSR_STAGE"); + return e ? atoi(e) : 0; + }(); + return n; +} + namespace { /// A descriptor's kind, in the binding order each pass file declares. Every pass also takes the two @@ -383,11 +393,13 @@ void record_pass(VkCommandBuffer cmd, const Pipeline& p, const PassInfo& info, c // (one timed span per pass with RX_VK_PASS_TIMING=1, so the profiler's report gives GPU ms by // pass name. Nine passes costing half a second between them needs a number per pass, not // another hypothesis) + // (hookshot, diagnostics) RX_VK_FSR_STAGE cuts this path short so each run names a cost + // instead of a hypothesis: 2 records every barrier, clear and descriptor but no dispatch. const bool timed = gprof_begin(cmd); vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, p.pipeline); vkCmdPushDescriptorSetKHR(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, p.layout, 0, (uint32_t)writes.size(), writes.data()); - vkCmdDispatch(cmd, std::max(1u, groups_x), std::max(1u, groups_y), 1); + if (fsr_stage() != 2) vkCmdDispatch(cmd, std::max(1u, groups_x), std::max(1u, groups_y), 1); if (timed) gprof_end(cmd, std::string("fsr3 ") + info.name); // (every pass reads what the one before it wrote) memory_barrier(cmd, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_WRITE_BIT, @@ -461,6 +473,28 @@ bool prepare(uint32_t render_width, uint32_t render_height, uint32_t upscale_wid return true; } +// (hookshot, diagnostics) How far down this path a run goes, and how far apart the evaluations are. +// 0 (default) is the whole path; 1 stops before it (vk_draw.cpp); 2 records everything but the nine +// dispatches; 3 keeps the dispatches and drops the blit (vk_draw.cpp). The interval is the frame +// time when the scene evaluates once a frame, so one line says whether a stage is the cost. + +void note_frame() { + using clk = std::chrono::steady_clock; + static clk::time_point last{}; + static double sum_ms = 0.0; + static int n = 0; + const clk::time_point now = clk::now(); + if (last.time_since_epoch().count() != 0) { + sum_ms += std::chrono::duration(now - last).count(); + if (++n == 30) { + logf("vk: fsr3 stage %d: %.1f ms between evaluations (%.1f a second)", fsr_stage(), + sum_ms / n, 1000.0 * n / sum_ms); + sum_ms = 0.0, n = 0; + } + } + last = now; +} + bool upscale(VkCommandBuffer cmd, const Inputs& in) { if (!in.color || !in.depth || !in.motion) return false; if (!(in.near_plane > 0.0f) || !(in.fov_y > 0.0f)) return false; // (Inputs defaults them) diff --git a/gpu/vk/vk_fsr3.h b/gpu/vk/vk_fsr3.h index 3638eb6fb..564242ff6 100644 --- a/gpu/vk/vk_fsr3.h +++ b/gpu/vk/vk_fsr3.h @@ -49,6 +49,18 @@ struct Inputs { /// whatever it would otherwise have done. [[nodiscard]] bool upscale(VkCommandBuffer cmd, const Inputs& in); +/// (diagnostics) How far down the upscale path a run goes: RX_VK_FSR_STAGE, 0 (the whole path) by +/// default. 1 stops before FSR, 2 drops the nine dispatches, 3 drops the blit into the game's +/// target. It exists so a run names a cost instead of a hypothesis; every stage but 0 is wrong +/// output on purpose. +int fsr_stage(); + +/// (diagnostics) Called once where the scene's upscale is reached, whatever stage the run is in: +/// every 30 calls it logs the milliseconds between them, which is the frame time when the scene +/// evaluates once a frame. One line per run, so a stage that is the cost shows up as a stage whose +/// removal returns the rate. +void note_frame(); + /// The image an evaluation resolves into: RGBA16F at the upscale size, or null before prepare(). [[nodiscard]] VkImage output_image(); [[nodiscard]] VkImageView output_view(); diff --git a/gpu/vk/vk_main.cpp b/gpu/vk/vk_main.cpp index 908e29f63..d48f10423 100644 --- a/gpu/vk/vk_main.cpp +++ b/gpu/vk/vk_main.cpp @@ -4,6 +4,8 @@ #include "vk_paths.h" #include "vk_loader.h" +#include "vk_dlss.h" // (the device extensions DLSS needs, asked of NGX before the device is made) + #include #include #include @@ -229,6 +231,28 @@ bool create_device() { optional(VK_EXT_DEVICE_FAULT_EXTENSION_NAME, dev.device_fault); optional(VK_KHR_COOPERATIVE_MATRIX_EXTENSION_NAME, dev.coop_matrix); + // (hookshot) What DLSS needs on this driver, asked of NGX rather than written out here: the set + // is the driver's to state and a list hard-coded in our source would be wrong on the next one. + // Only where RX_VK_DLSS=1 and this build has an NGX SDK, so a run that did not ask for DLSS + // creates exactly the device it created before. An extension NGX names and this GPU does not + // have is named in the log and left out: DLSS will then report itself unavailable, which is the + // honest outcome, rather than vkCreateDevice failing and taking the whole renderer with it. + { + const char* dlss_want[16] = {}; + const size_t dlss_n = dlss::device_extensions(dev.instance, dev.physical, dlss_want, + sizeof dlss_want / sizeof *dlss_want); + for (size_t i = 0; i < dlss_n; i++) { + if (!has_extension(exts, dlss_want[i])) { + logf("vk: dlss wants %s, which this GPU does not have: DLSS will be unavailable", + dlss_want[i]); + continue; + } + bool already = false; + for (const char* have : want) already = already || strcmp(have, dlss_want[i]) == 0; + if (!already) want.push_back(dlss_want[i]), logf("vk: dlss wants %s: enabled", dlss_want[i]); + } + } + // the queue: one family for graphics, compute and transfer vkGetPhysicalDeviceQueueFamilyProperties(dev.physical, &n, nullptr); std::vector families(n); diff --git a/nx2/build.py b/nx2/build.py index 3d4b0f589..fcda8370a 100644 --- a/nx2/build.py +++ b/nx2/build.py @@ -702,6 +702,12 @@ def main(): "-include", "string", "-include", "vector", "-std=c++20", "-O2", "-g0", "-DNDEBUG", "-Wno-everything", "-DVK_NO_PROTOTYPES", "-DMKWVK_BUILDING", *(["-DHOOKSHOT_RELEASE"] if os.environ.get("RX_RELEASE") == "1" else []), # (the shaders precompiled before the game) + # (hookshot) RX_VK_DLSS_SDK= compiles the DLSS backend's NGX half + # against that SDK's headers. Nothing of NVIDIA's is in this repository and nothing of + # NVIDIA's may be put in it (CONTRIBUTING.md): the SDK is the builder's own copy, named + # here, and a build without it leaves DLSS reporting itself unavailable. + *(["-DRX_VK_DLSS_SDK=1", "-I" + os.path.join(os.environ["RX_VK_DLSS_SDK"], "include")] + if os.environ.get("RX_VK_DLSS_SDK") else []), # (Eden's recompiler before suyu's root: suyu has its own shader_recompiler/ headers, and a Shader::Info # of the other layout in some objects is what crashed the descriptor walk. MKWVK_INCLUDES changes the # object keys, which leave the include folders out, when this order changes) diff --git a/tests/upscale_seam_test.cpp b/tests/upscale_seam_test.cpp index 0be2f7f5e..57b7ab771 100644 --- a/tests/upscale_seam_test.cpp +++ b/tests/upscale_seam_test.cpp @@ -95,6 +95,28 @@ int main() { a.stand_in_wanted = true, a.push_descriptor = false; check(choose(a, good()) == Backend::None, "without push descriptors nothing can be recorded"); } + + // The vendor backends. Each one is a wrong picture rather than a worse one when the inputs are short, so + // neither may be chosen where the contract is not met -- that is the difference between them and the stand-in. + { + Availability a; + a.push_descriptor = true; + a.fsr3 = true; + check(choose(a, good()) == Backend::Fsr3, "FSR takes a dispatch whose inputs are complete"); + Request bare; + check(choose(a, bare) == Backend::None, "FSR is not given a dispatch without the inputs"); + a.stand_in_wanted = true; + check(choose(a, bare) == Backend::StandIn, "the stand-in still takes what FSR cannot"); + check(choose(a, good()) == Backend::Fsr3, "a vendor backend is preferred over the stand-in"); + a.dlss = true; + check(choose(a, good()) == Backend::Dlss, "DLSS is preferred where the hardware has it"); + a.fsr3 = false; + check(choose(a, good()) == Backend::Dlss, "DLSS does not need FSR to be available"); + a.push_descriptor = false; + check(choose(a, good()) == Backend::None, "without push descriptors no backend can be recorded"); + } + check(backend_name(Backend::Fsr3)[0] == 'F' && backend_name(Backend::Dlss)[0] == 'D', + "the vendor backends are named"); check(backend_name(Backend::StandIn)[0] == 's' && backend_name(Backend::None)[0] == 'n', "backends are named"); if (failures != 0) { From 12d4d83191446484f10bf621dd7849dcec3142e1 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Sun, 8 Nov 2026 18:56:24 -0600 Subject: [PATCH 035/119] fix: scan for the view projection once a target set, not once a draw capture_view_projection walks five stages and sixteen slots, reading a uniform buffer from each, and is meant to do that once per render target set. It armed its guard only on the branch that found a matrix. Most target sets -- shadow, UI, post -- hold none, so for those the guard never armed and the whole scan ran again on every draw of them: about 30,000 reads of guest memory a frame, each read landing in a captured page copying that whole 4 KB page out of it, roughly 67 MB of memcpy a frame. Measured in the same scene, driven there by a frame-clocked input script so that a slow arm and a fast one reach the same place: before 2.7-3.0 fps, submit 331 ms a frame of which 17 ms is accounted for after 29.3-29.6 fps It ran with RX_VK_FSR=0 exactly as with RX_VK_FSR=1, which is why FSR looked like the cause of a collapse it had nothing to do with. FSR's own nine passes measure 0.03 ms a frame in the GPU profiler. docs/upscaling.md now records the correction and what the earlier comparison got wrong, and tests/test_vp_scan_once.py fails on the old shape. Co-Authored-By: Claude Opus 5 --- docs/upscaling.md | 62 ++++++- gpu/vk/vk_dlss.cpp | 216 ++++------------------- gpu/vk/vk_dlssg.cpp | 342 +++++++++++++++++++++++++++++++++++++ gpu/vk/vk_dlssg.h | 101 +++++++++++ gpu/vk/vk_draw.cpp | 8 +- gpu/vk/vk_ngx.cpp | 245 ++++++++++++++++++++++++++ gpu/vk/vk_ngx.h | 84 +++++++++ tests/test_vp_scan_once.py | 59 +++++++ 8 files changed, 927 insertions(+), 190 deletions(-) create mode 100644 gpu/vk/vk_dlssg.cpp create mode 100644 gpu/vk/vk_dlssg.h create mode 100644 gpu/vk/vk_ngx.cpp create mode 100644 gpu/vk/vk_ngx.h create mode 100644 tests/test_vp_scan_once.py diff --git a/docs/upscaling.md b/docs/upscaling.md index c3ba5c8c0..73544d854 100644 --- a/docs/upscaling.md +++ b/docs/upscaling.md @@ -310,6 +310,44 @@ What *is* deliverable, and is what "the newest upscaling" means in practice on e | AMD | FSR 4's machine-learning upscaler, reached through the FSR 3.1 API that row 4 below targets. Radeon RX 9000/7000/6000; AMD's own API falls back to FSR 3.1.6 elsewhere | | Everyone | FSR 3.1 compiled from the SDK sources in this tree, which needs no runtime and no particular vendor | +## Correction: FSR was not what cost the frame rate + +For several rounds of work the record here said that engaging FSR 3.1 dropped the game from about +60 fps to 3. It did not. The cost was a bug in this project's own `capture_view_projection`, and +every hypothesis chased before that -- the pass count, the shared SPD counter, a system-memory +fallback, repeated evaluation -- was chasing a cost that was not there. + +What settled it was a controlled pair rather than another hypothesis. Both arms ran headless, with +the pad driven by a frame-clocked `HOS_INPUT_SCRIPT` so that a slow arm and a fast one reach the +same place in the game, and both reached the same scene (same draw, dispatch and pass counts): + +| | frame rate | note | +|---|---|---| +| `RX_VK_FSR=0` | 2.7, 2.9 fps | | +| `RX_VK_FSR=1` | 2.7, 3.0 fps | FSR running, `1536x864 -> 2048x1152`, its own log line present | + +Identical. Two GPU measurements already agreed and had been read wrongly: the nine passes together +measured **0.03 ms a frame, 0.7% of GPU time, 102 us a span**, which is about a millisecond of GPU +work per evaluation. A backend costing a millisecond cannot take 300 off a frame. + +The 300 ms was `capture_view_projection`, which walks five stages and sixteen slots reading a +uniform buffer from each to find the scene's view projection. It is meant to run once per render +target set, and it set its `done_for` guard **only when it found a matrix**. Most target sets -- +shadow, UI, post -- hold no projection, so for those the guard never armed and the whole scan ran +again on every draw of them. At 1800 draws a frame that came to roughly 30,000 reads of guest +memory a frame; each read that lands in a captured page copies that whole 4 KB page out of the +capture, which is about 67 MB of memcpy a frame. It ran with FSR off exactly as with FSR on, which +is why both arms were slow and why the earlier comparison -- a heavy scene with FSR against a title +screen without it -- looked like FSR's doing. + +Two things worth keeping from this: + +- **A guard that is armed only on the path that succeeds is not a guard.** The failing path is the + common one, and it is the one that repeats. +- **Compare two arms in the same place in the game, or do not compare.** The frame-clocked input + script exists for that: without it, "before" and "after" are two different scenes and the + difference between them is whatever you want it to be. + ## FSR 3 and FSR 4 are two backends, not two versions FSR 4 is not source-available: it ships as prebuilt signed libraries inside AMD's SDK releases, so it cannot come out @@ -337,14 +375,32 @@ has by construction, and #755 should be read before any of it is wired to the In Row 4 of the order of work now has a backend: `gpu/vk/vk_dlss.h` and `gpu/vk/vk_dlss.cpp`, the same shape as the FSR one (`supported()`, `prepare()`, `upscale()`, `output_image()`/`output_view()`, -`shutdown()`) so the seam can hold either. **It has never been run.** It compiles, it links, and -nothing more than that has been established; read the rest of this section before assuming -otherwise. +`shutdown()`) so the seam can hold either. + +It is now built against a real NGX SDK (`NVSDK_NGX_VERSION_API_MACRO` 0x15, the SDK whose Linux +feature libraries are `libnvidia-ngx-dlss.so.310.9.16` and its `dlssd`/`dlssg` companions), and the +whole renderer compiles with the NGX half enabled. What has *not* happened yet is an evaluation +against a running game; until that line is in this document, treat the backend as plumbing. + +Two things the backend needs that the upscaler half does not, both added with the seam wiring: + +- **The device has to be created for it.** `dlss::device_extensions()` asks NGX itself + (`NVSDK_NGX_VULKAN_GetFeatureDeviceExtensionRequirements`) what Super Resolution needs on this + driver, and `vk_main.cpp` enables what the GPU has. A list written out in our own source would be + wrong on the next driver, and an extension missing at device creation is the one DLSS failure that + cannot be recovered at evaluation time. Where the GPU lacks something NGX names, it is logged and + left out: DLSS then reports itself unavailable, rather than `vkCreateDevice` failing and taking + the renderer down with it. +- **NGX is handed resources, not views.** An `NVSDK_NGX_Resource_VK` is a view *and* its image, + format and extent, so `DescWriter::Source` now records what each sampled binding is a view of, + pushed in lockstep with the descriptor infos, and `camera_motion` publishes its target's image and + format. Without those, a dispatch's colour cannot be given to DLSS at all. Two switches, both off by default, both neutral while off: | | | |---|---| +| `RX_VK_FSR_STAGE=<0-3>` | diagnostics, and wrong output on purpose above 0: how far down the upscale path a run goes. 1 stops before the backend, 2 records every barrier, clear and descriptor but none of the nine dispatches, 3 keeps the dispatches and drops the blit into the game's target. It exists because three hypotheses about a frame-rate cost were each disproved by a measurement that a stage switch would have given in one run | | `RX_VK_DLSS=1` | asks for the backend at run time. Without it nothing is loaded, nothing is looked at and nothing is logged | | `RX_VK_DLSS_SDK` | a **build-time** gate. Off, the NGX half of the backend is not compiled and `supported()` is false. On, the build needs an NGX SDK's `include/` on the include path | diff --git a/gpu/vk/vk_dlss.cpp b/gpu/vk/vk_dlss.cpp index 382022aba..b9ffcaf5a 100644 --- a/gpu/vk/vk_dlss.cpp +++ b/gpu/vk/vk_dlss.cpp @@ -25,14 +25,10 @@ #include "vk_paths.h" // (game_module_path: where the model library sits, which NGX is told) #if defined(RX_VK_DLSS_SDK) -// NVIDIA's own headers, from the SDK this build was pointed at (`-I/include -// -DRX_VK_DLSS_SDK=1`). They are not vendored here and must not be: CONTRIBUTING.md's licensing -// rule and docs/upscaling.md. Vulkan is already included by vk_dlss.h, which is what -// nvsdk_ngx_vk.h wants to find. -#include -#include -#include -#include +// The one NGX session every DLSS backend shares (gpu/vk/vk_ngx.h), which is where NVIDIA's own +// headers are reached from. They are not vendored here and must not be: CONTRIBUTING.md's licensing +// rule and docs/upscaling.md. +#include "vk_ngx.h" #endif namespace mkwvk::dlss { @@ -182,156 +178,23 @@ void ngx_shutdown(); /// SDK's own macros here, so a wrong one is a compile error, the same check using the helper would /// have given. The risk this trades for is a key DLSS wants and this code does not set; the set is /// written out in docs/upscaling.md so that it can be reviewed against the SDK's helper. -struct Ngx { - HMODULE module = nullptr; - decltype(&NVSDK_NGX_VULKAN_Init_with_ProjectID) init = nullptr; - decltype(&NVSDK_NGX_VULKAN_Shutdown1) shutdown = nullptr; - decltype(&NVSDK_NGX_VULKAN_GetCapabilityParameters) capability = nullptr; - decltype(&NVSDK_NGX_VULKAN_AllocateParameters) allocate = nullptr; - decltype(&NVSDK_NGX_VULKAN_DestroyParameters) destroy = nullptr; - decltype(&NVSDK_NGX_VULKAN_CreateFeature) create = nullptr; - decltype(&NVSDK_NGX_VULKAN_EvaluateFeature) evaluate = nullptr; - decltype(&NVSDK_NGX_VULKAN_ReleaseFeature) release = nullptr; - /// The two discovery calls, which answer before a device exists. Optional: an NGX without them - /// is an NGX whose DLSS needs nothing beyond the core, and refusing to load over a missing - /// discovery call would turn a working configuration into an unavailable one. - decltype(&NVSDK_NGX_VULKAN_GetFeatureInstanceExtensionRequirements) instance_exts = nullptr; - decltype(&NVSDK_NGX_VULKAN_GetFeatureDeviceExtensionRequirements) device_exts = nullptr; - bool started = false; - NVSDK_NGX_Parameter* params = nullptr; ///< the evaluation's own parameters +/// This backend's own NGX state: a parameter block and a feature handle, and nothing else. The +/// session itself -- loading NGX, initializing it, the capability block, the discovery calls -- is +/// shared with the other DLSS features and lives in gpu/vk/vk_ngx.cpp. +struct Feature { + NVSDK_NGX_Parameter* params = nullptr; NVSDK_NGX_Handle* feature = nullptr; }; -Ngx ngx; - -/// A project id of our own. NVIDIA's analytics key one is for licensed titles; the project-id form -/// exists exactly so a project without one can initialize. -constexpr const char* kProjectId = "a6b7c0de-7a1f-4f1e-9d2a-hookshot-dlss"; -constexpr const char* kEngineVersion = "1.0"; - -bool ngx_load() { - if (ngx.module) return true; - // The core ships with the driver and is found on the usual search path; the model library - // (libnvidia-ngx-dlss.so.*) sits beside the binary and is NGX's to find, which is what the - // application data path below is for. -#ifdef _WIN32 - static const char* const names[]{"nvngx.dll", "_nvngx.dll"}; -#else - static const char* const names[]{"libnvidia-ngx.so.1", "libnvidia-ngx.so"}; -#endif - for (const char* name : names) { - ngx.module = LoadLibraryA(name); - if (ngx.module) { - logf("vk: dlss: NGX loaded from %s", name); - break; - } - } - if (!ngx.module) { - logf("vk: dlss: no NGX runtime here (%s), so DLSS is unavailable", names[0]); - return false; - } -#define NGX_RESOLVE(field, name) \ - ngx.field = (decltype(ngx.field))(void*)GetProcAddress(ngx.module, name); \ - if (!ngx.field) { \ - logf("vk: dlss: the NGX runtime has no %s", name); \ - return false; \ - } - NGX_RESOLVE(init, "NVSDK_NGX_VULKAN_Init_with_ProjectID") - NGX_RESOLVE(shutdown, "NVSDK_NGX_VULKAN_Shutdown1") - NGX_RESOLVE(capability, "NVSDK_NGX_VULKAN_GetCapabilityParameters") - NGX_RESOLVE(allocate, "NVSDK_NGX_VULKAN_AllocateParameters") - NGX_RESOLVE(destroy, "NVSDK_NGX_VULKAN_DestroyParameters") - NGX_RESOLVE(create, "NVSDK_NGX_VULKAN_CreateFeature") - NGX_RESOLVE(evaluate, "NVSDK_NGX_VULKAN_EvaluateFeature") - NGX_RESOLVE(release, "NVSDK_NGX_VULKAN_ReleaseFeature") -#undef NGX_RESOLVE - ngx.instance_exts = (decltype(ngx.instance_exts))(void*)GetProcAddress( - ngx.module, "NVSDK_NGX_VULKAN_GetFeatureInstanceExtensionRequirements"); - ngx.device_exts = (decltype(ngx.device_exts))(void*)GetProcAddress( - ngx.module, "NVSDK_NGX_VULKAN_GetFeatureDeviceExtensionRequirements"); - return true; -} - -const wchar_t* data_path(); // (defined below: the folder NGX keeps its own files in) - -/// What a discovery call is asked about: Super Resolution, this SDK's version, our project id. -NVSDK_NGX_FeatureDiscoveryInfo discovery_info() { - NVSDK_NGX_FeatureDiscoveryInfo info{}; - info.SDKVersion = NVSDK_NGX_Version_API; - info.FeatureID = NVSDK_NGX_Feature_SuperSampling; - info.Identifier.IdentifierType = NVSDK_NGX_Application_Identifier_Type_Project_Id; - info.Identifier.v.ProjectDesc.ProjectId = kProjectId; - info.Identifier.v.ProjectDesc.EngineType = NVSDK_NGX_ENGINE_TYPE_CUSTOM; - info.Identifier.v.ProjectDesc.EngineVersion = kEngineVersion; - info.ApplicationDataPath = data_path(); - return info; -} - -/// The game folder, wide, for NGX's application data path: where it writes what it keeps and where -/// the model library beside the binary is looked for. -const wchar_t* data_path() { - static wchar_t wide[MAX_PATH + 1]; - static const bool once = [] { - char path[MAX_PATH + 1]{}; - const DWORD n = game_module_path(path, (DWORD)sizeof path); - if (!n || n >= sizeof path) { - wide[0] = L'.', wide[1] = 0; - return true; - } - char* name = path + n; - while (name > path && name[-1] != '\\' && name[-1] != '/') name--; - *name = 0; - size_t i = 0; - for (; path[i] && i < MAX_PATH; i++) wide[i] = (wchar_t)(unsigned char)path[i]; - wide[i] = 0; - if (!i) wide[0] = L'.', wide[1] = 0; - return true; - }(); - (void)once; - return wide; -} +Feature ngx; bool ngx_available() { - if (!ngx_load()) return false; - if (!ngx.started) { - NVSDK_NGX_FeatureCommonInfo common{}; - const wchar_t* paths[]{data_path()}; - common.PathListInfo.Path = paths; - common.PathListInfo.Length = 1; - const NVSDK_NGX_Result res = - ngx.init(kProjectId, NVSDK_NGX_ENGINE_TYPE_CUSTOM, kEngineVersion, data_path(), - dev.instance, dev.physical, dev.device, instance_proc(), vkGetDeviceProcAddr, - &common, NVSDK_NGX_Version_API); - if (NVSDK_NGX_FAILED(res)) { - logf("vk: dlss: NGX did not initialize (0x%08x)", (unsigned)res); - return false; - } - ngx.started = true; - } - NVSDK_NGX_Parameter* caps = nullptr; - if (NVSDK_NGX_FAILED(ngx.capability(&caps)) || !caps) { - logf("vk: dlss: NGX gave no capability parameters"); - return false; - } - int available = 0; - if (NVSDK_NGX_FAILED(caps->Get(NVSDK_NGX_Parameter_SuperSampling_Available, &available)) || - !available) { - // (what NGX says about it: an old driver and a feature that failed to initialize are - // different reports, and a user with the first can act on it) - int needs_driver = 0, major = 0, minor = 0; - caps->Get(NVSDK_NGX_Parameter_SuperSampling_NeedsUpdatedDriver, &needs_driver); - caps->Get(NVSDK_NGX_Parameter_SuperSampling_MinDriverVersionMajor, &major); - caps->Get(NVSDK_NGX_Parameter_SuperSampling_MinDriverVersionMinor, &minor); - if (needs_driver) - logf("vk: dlss: this driver is too old for DLSS (%d.%d or newer wanted)", major, minor); - else - logf("vk: dlss: this GPU and driver do not report Super Resolution"); + if (!ngx::feature_available(NVSDK_NGX_Parameter_SuperSampling_Available, + NVSDK_NGX_Parameter_SuperSampling_NeedsUpdatedDriver, + NVSDK_NGX_Parameter_SuperSampling_MinDriverVersionMajor, + NVSDK_NGX_Parameter_SuperSampling_MinDriverVersionMinor, + "Super Resolution")) return false; - } - if (!ngx.params && NVSDK_NGX_FAILED(ngx.allocate(&ngx.params))) { - logf("vk: dlss: NGX gave no parameters to evaluate with"); - ngx.params = nullptr; - return false; - } + if (!ngx.params) ngx.params = ngx::allocate_params(); return ngx.params != nullptr; } @@ -358,7 +221,7 @@ bool ngx_feature(VkCommandBuffer cmd) { ngx.params->Set(NVSDK_NGX_Parameter_CreationNodeMask, 1u); ngx.params->Set(NVSDK_NGX_Parameter_VisibilityNodeMask, 1u); const NVSDK_NGX_Result res = - ngx.create(cmd, NVSDK_NGX_Feature_SuperSampling, ngx.params, &ngx.feature); + ngx::create_feature(cmd, NVSDK_NGX_Feature_SuperSampling, ngx.params, &ngx.feature); if (NVSDK_NGX_FAILED(res) || !ngx.feature) { logf("vk: dlss: the feature was not created for %ux%u -> %ux%u (0x%08x)", g.render_width, g.render_height, g.upscale_width, g.upscale_height, (unsigned)res); @@ -370,17 +233,11 @@ bool ngx_feature(VkCommandBuffer cmd) { return true; } -/// One input as NGX takes it: the view, its image, its range, its format and the extent it is read -/// at. Nothing here is defaulted; `upscale()` has already refused inputs that cannot fill it. +/// One input as NGX takes it. Nothing here is defaulted; `upscale()` has already refused inputs +/// that cannot fill it. NVSDK_NGX_Resource_VK as_resource(VkImageView view, VkImage image, VkFormat format, uint32_t width, uint32_t height, bool read_write) { - VkImageSubresourceRange range{}; - range.aspectMask = - is_depth_format(format) ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_COLOR_BIT; - range.baseMipLevel = 0, range.levelCount = 1; - range.baseArrayLayer = 0, range.layerCount = 1; - return NVSDK_NGX_Create_ImageView_Resource_VK(view, image, range, format, width, height, - read_write); + return ngx::resource(view, image, format, width, height, read_write); } bool ngx_evaluate(VkCommandBuffer cmd, const Inputs& in, const Image& out) { @@ -409,7 +266,7 @@ bool ngx_evaluate(VkCommandBuffer cmd, const Inputs& in, const Image& out) { // its own resolve worked in, so both of these are the neutral value rather than a guess. ngx.params->Set(NVSDK_NGX_Parameter_DLSS_Pre_Exposure, 1.0f); ngx.params->Set(NVSDK_NGX_Parameter_DLSS_Exposure_Scale, 1.0f); - const NVSDK_NGX_Result res = ngx.evaluate(cmd, ngx.feature, ngx.params, nullptr); + const NVSDK_NGX_Result res = ngx::evaluate_feature(cmd, ngx.feature, ngx.params); if (NVSDK_NGX_FAILED(res)) { logf("vk: dlss: the evaluation was refused (0x%08x)", (unsigned)res); return false; @@ -418,18 +275,17 @@ bool ngx_evaluate(VkCommandBuffer cmd, const Inputs& in, const Image& out) { } void ngx_drop_feature() { - if (ngx.feature && ngx.release) ngx.release(ngx.feature); + ngx::release_feature(ngx.feature); ngx.feature = nullptr; } void ngx_shutdown() { ngx_drop_feature(); - if (ngx.params && ngx.destroy) ngx.destroy(ngx.params); + ngx::destroy_params(ngx.params); ngx.params = nullptr; - if (ngx.started && ngx.shutdown) ngx.shutdown(dev.device); - ngx.started = false; - // (the module is left loaded: the driver's own libraries are not ours to unload under a device - // that may still be alive) + // (the session itself is ended by whoever ends the renderer, not by one of its features: the + // other DLSS backends may still be using it. gpu/vk/vk_ngx.h) + ngx::shutdown(); } #else // no NGX SDK: the gate is off, and each of the five refuses @@ -483,14 +339,8 @@ bool supported() { size_t instance_extensions(const char** out, size_t max) { #if defined(RX_VK_DLSS_SDK) - if (!wanted() || !ngx_load() || !ngx.instance_exts) return 0; - const NVSDK_NGX_FeatureDiscoveryInfo info = discovery_info(); - uint32_t n = 0; - VkExtensionProperties* props = nullptr; - if (NVSDK_NGX_FAILED(ngx.instance_exts(&info, &n, &props)) || !props) return 0; - size_t kept = 0; - for (uint32_t i = 0; i < n && kept < max; i++) out[kept++] = props[i].extensionName; - return kept; + if (!wanted()) return 0; + return ngx::instance_extensions(NVSDK_NGX_Feature_SuperSampling, out, max); #else (void)out, (void)max; return 0; @@ -499,14 +349,8 @@ size_t instance_extensions(const char** out, size_t max) { size_t device_extensions(VkInstance instance, VkPhysicalDevice gpu, const char** out, size_t max) { #if defined(RX_VK_DLSS_SDK) - if (!wanted() || !instance || !gpu || !ngx_load() || !ngx.device_exts) return 0; - const NVSDK_NGX_FeatureDiscoveryInfo info = discovery_info(); - uint32_t n = 0; - VkExtensionProperties* props = nullptr; - if (NVSDK_NGX_FAILED(ngx.device_exts(instance, gpu, &info, &n, &props)) || !props) return 0; - size_t kept = 0; - for (uint32_t i = 0; i < n && kept < max; i++) out[kept++] = props[i].extensionName; - return kept; + if (!wanted()) return 0; + return ngx::device_extensions(instance, gpu, NVSDK_NGX_Feature_SuperSampling, out, max); #else (void)instance, (void)gpu, (void)out, (void)max; return 0; diff --git a/gpu/vk/vk_dlssg.cpp b/gpu/vk/vk_dlssg.cpp new file mode 100644 index 000000000..0697ac437 --- /dev/null +++ b/gpu/vk/vk_dlssg.cpp @@ -0,0 +1,342 @@ +// (hookshot) DLSS Frame Generation: gpu/vk/vk_dlssg.h says what it is for and where it slots in. +#include "vk_dlssg.h" + +#include +#include +#include + +#if defined(RX_VK_DLSS_SDK) +// The shared NGX session (gpu/vk/vk_ngx.h), which is where NVIDIA's own headers are reached from. +// They are not vendored here and must not be: CONTRIBUTING.md's licensing rule. +#include "vk_ngx.h" + +#include +#include +#endif + +namespace mkwvk::dlssg { +namespace { + +/// Whether this build has an NGX SDK to compile the NGX half against. A constant rather than an +/// `#ifdef` at each use, so both arms of every decision below are compiled in every build. +#if defined(RX_VK_DLSS_SDK) +constexpr bool kHaveSdk = true; +#else +constexpr bool kHaveSdk = false; +#endif + +constexpr uint32_t kMaxMade = 3; ///< (DLSS 4's multi-frame generation: up to three made frames) + +/// `RX_VK_DLSSG=<1-3>` asks for this backend and says how many frames to make between two of the +/// game's. Off is the default and costs nothing. +uint32_t asked() { + static const uint32_t n = []() -> uint32_t { + const char* e = getenv("RX_VK_DLSSG"); + if (!e || !*e) return 0; + const int v = atoi(e); + if (v <= 0) return 0; + return (uint32_t)std::min(v, (int)kMaxMade); + }(); + return n; +} + +struct Image { + VkImage image = VK_NULL_HANDLE; + VmaAllocation memory = nullptr; + VkImageView view = VK_NULL_HANDLE; + uint32_t width = 0, height = 0; + VkFormat format = VK_FORMAT_UNDEFINED; + bool in_general = false; ///< the UNDEFINED -> GENERAL barrier has been recorded +}; + +struct State { + Image made[kMaxMade]; + uint32_t width = 0, height = 0, render_width = 0, render_height = 0; + VkFormat present_format = VK_FORMAT_UNDEFINED; + uint32_t ready = 0; ///< how many of `made` exist + bool first_evaluation = true; +}; +State g; + +constexpr VkImageSubresourceRange ONE_LEVEL{VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}; + +void drop_image(Image& t) { + if (t.view) vkDestroyImageView(dev.device, t.view, nullptr); + if (t.image) mkwvk::destroy_image(t.image, t.memory); + t = Image{}; +} + +/// A made frame's image: the format the window is presented in, because this is shown as a frame and +/// not read back into the game's own target. Storage because the network writes it, transfer source +/// because the present path blits it to the window. +bool make_frame(Image& t, uint32_t width, uint32_t height, VkFormat format) { + drop_image(t); + t.format = format; + t.width = std::max(1u, width), t.height = std::max(1u, height); + VkImageCreateInfo ci{VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO}; + ci.imageType = VK_IMAGE_TYPE_2D; + ci.format = t.format; + ci.extent = {t.width, t.height, 1}; + ci.mipLevels = 1; + ci.arrayLayers = 1; + ci.samples = VK_SAMPLE_COUNT_1_BIT; + ci.tiling = VK_IMAGE_TILING_OPTIMAL; + ci.usage = VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_SAMPLED_BIT | + VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT; + ci.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; + if (!create_image(ci, t.image, t.memory, false)) { + logf("vk: dlssg: a %ux%u frame image was not made", t.width, t.height); + return false; + } + VkImageViewCreateInfo vi{VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO}; + vi.image = t.image; + vi.viewType = VK_IMAGE_VIEW_TYPE_2D; + vi.format = t.format; + vi.subresourceRange = ONE_LEVEL; + if (vkCreateImageView(dev.device, &vi, nullptr, &t.view) != VK_SUCCESS) { + logf("vk: dlssg: a frame image's view was not made"); + drop_image(t); + return false; + } + return true; +} + +/// UNDEFINED -> GENERAL, once per image. NGX is handed images in GENERAL, as everything else in this +/// renderer is. +void to_general(VkCommandBuffer cmd, Image& t) { + if (t.in_general || !t.image) return; + VkImageMemoryBarrier2 b{VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2}; + b.srcStageMask = VK_PIPELINE_STAGE_2_NONE; + b.dstStageMask = VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT; + b.dstAccessMask = VK_ACCESS_2_SHADER_WRITE_BIT; + b.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; + b.newLayout = VK_IMAGE_LAYOUT_GENERAL; + b.srcQueueFamilyIndex = b.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + b.image = t.image; + b.subresourceRange = ONE_LEVEL; + VkDependencyInfo di{VK_STRUCTURE_TYPE_DEPENDENCY_INFO}; + di.imageMemoryBarrierCount = 1, di.pImageMemoryBarriers = &b; + vkCmdPipelineBarrier2(cmd, &di); + t.in_general = true; +} + +// ---- the NGX half ---- + +#if defined(RX_VK_DLSS_SDK) + +NVSDK_NGX_Parameter* params = nullptr; +NVSDK_NGX_Handle* feature = nullptr; + +bool ngx_available() { + if (!ngx::feature_available(NVSDK_NGX_Parameter_FrameGeneration_Available, + NVSDK_NGX_Parameter_FrameGeneration_NeedsUpdatedDriver, + NVSDK_NGX_Parameter_FrameGeneration_MinDriverVersionMajor, + NVSDK_NGX_Parameter_FrameGeneration_MinDriverVersionMinor, + "Frame Generation")) + return false; + if (!params) params = ngx::allocate_params(); + return params != nullptr; +} + +/// The feature, made at the first evaluation after a change of extents. Creation records into a +/// command buffer, which is why it cannot be done in `prepare()`. +bool ngx_feature(VkCommandBuffer cmd) { + if (feature) return true; + if (!params) return false; + // The keys NGX_VK_CREATE_DLSSG sets, set here for the reason vk_dlss.cpp gives: using the + // inline helper would put NVSDK_NGX_VULKAN_CreateFeature in this object file and hand the link + // back to NVIDIA's library. The keys themselves are the SDK's own macros, so a wrong one is a + // compile error. + params->Set(NVSDK_NGX_Parameter_CreationNodeMask, 1u); + params->Set(NVSDK_NGX_Parameter_VisibilityNodeMask, 1u); + params->Set(NVSDK_NGX_Parameter_Width, g.width); + params->Set(NVSDK_NGX_Parameter_Height, g.height); + params->Set(NVSDK_NGX_DLSSG_Parameter_BackbufferFormat, (unsigned)g.present_format); + const NVSDK_NGX_Result res = + ngx::create_feature(cmd, NVSDK_NGX_Feature_FrameGeneration, params, &feature); + if (NVSDK_NGX_FAILED(res) || !feature) { + logf("vk: dlssg: the feature was not created for %ux%u (0x%08x)", g.width, g.height, + (unsigned)res); + feature = nullptr; + return false; + } + logf("vk: dlssg: feature ready, %ux%u from %ux%u, up to %u made frames", g.width, g.height, + g.render_width, g.render_height, asked()); + return true; +} + +bool ngx_generate(VkCommandBuffer cmd, const Inputs& in, Image& out) { + if (!feature || !params) return false; + NVSDK_NGX_Resource_VK colour = + ngx::resource(in.color, in.color_image, in.color_format, in.width, in.height, false); + NVSDK_NGX_Resource_VK depth = ngx::resource(in.depth, in.depth_image, in.depth_format, + in.render_width, in.render_height, false); + NVSDK_NGX_Resource_VK motion = ngx::resource(in.motion, in.motion_image, in.motion_format, + in.render_width, in.render_height, false); + NVSDK_NGX_Resource_VK made = + ngx::resource(out.view, out.image, out.format, out.width, out.height, true); + params->Set(NVSDK_NGX_DLSSG_Parameter_Backbuffer, &colour); + params->Set(NVSDK_NGX_DLSSG_Parameter_Depth, &depth); + params->Set(NVSDK_NGX_DLSSG_Parameter_MVecs, &motion); + params->Set(NVSDK_NGX_DLSSG_Parameter_OutputInterpolated, &made); + // The optional inputs this game does not have: no separate HUD-less colour, no UI layer, no + // distortion field. They are set to null rather than left from the frame before, because a + // parameter block is reused and a stale resource is a use-after-free inside the runtime. + params->Set(NVSDK_NGX_DLSSG_Parameter_HUDLess, (void*)nullptr); + params->Set(NVSDK_NGX_DLSSG_Parameter_UI, (void*)nullptr); + params->Set(NVSDK_NGX_DLSSG_Parameter_UIAlpha, (void*)nullptr); + params->Set(NVSDK_NGX_DLSSG_Parameter_BidirectionalDistortionField, (void*)nullptr); + params->Set(NVSDK_NGX_DLSSG_Parameter_OutputReal, (void*)nullptr); + params->Set(NVSDK_NGX_DLSSG_Parameter_OutputDisableInterpolation, (void*)nullptr); + + params->Set(NVSDK_NGX_DLSSG_Parameter_MultiFrameCount, in.frames_made); + params->Set(NVSDK_NGX_DLSSG_Parameter_MultiFrameIndex, in.frame_index); + // The matrices are the whole of what places a made frame in time. They are passed as the SDK + // takes them -- a pointer to sixteen floats -- in the row-major order the rest of this renderer + // uses; the camera-motion pass uses the same pair and its picture agreed with the game's, which + // is the only check available without NVIDIA's own tooling. + if (in.have_matrices) { + params->Set(NVSDK_NGX_DLSSG_Parameter_ClipToPrevClip, (void*)in.clip_to_prev_clip); + params->Set(NVSDK_NGX_DLSSG_Parameter_PrevClipToClip, (void*)in.prev_clip_to_clip); + } + params->Set(NVSDK_NGX_DLSSG_Parameter_JitterOffsetX, in.jitter[0]); + params->Set(NVSDK_NGX_DLSSG_Parameter_JitterOffsetY, in.jitter[1]); + params->Set(NVSDK_NGX_DLSSG_Parameter_MvecScaleX, in.motion_scale[0]); + params->Set(NVSDK_NGX_DLSSG_Parameter_MvecScaleY, in.motion_scale[1]); + params->Set(NVSDK_NGX_DLSSG_Parameter_CameraNear, in.near_plane); + params->Set(NVSDK_NGX_DLSSG_Parameter_CameraFar, in.far_plane); + params->Set(NVSDK_NGX_DLSSG_Parameter_CameraFOV, in.fov_y); + params->Set(NVSDK_NGX_DLSSG_Parameter_CameraAspectRatio, in.aspect); + params->Set(NVSDK_NGX_DLSSG_Parameter_ColorBuffersHDR, in.colour_hdr ? 1u : 0u); + params->Set(NVSDK_NGX_DLSSG_Parameter_DepthInverted, in.depth_inverted ? 1u : 0u); + params->Set(NVSDK_NGX_DLSSG_Parameter_CameraMotionIncluded, + in.camera_motion_included ? 1u : 0u); + params->Set(NVSDK_NGX_DLSSG_Parameter_Reset, (in.reset || g.first_evaluation) ? 1u : 0u); + params->Set(NVSDK_NGX_DLSSG_Parameter_NotRenderingGameFrames, 0u); + const NVSDK_NGX_Result res = ngx::evaluate_feature(cmd, feature, params); + if (NVSDK_NGX_FAILED(res)) { + static int told = 0; + if (told++ < 4) logf("vk: dlssg: the evaluation was refused (0x%08x)", (unsigned)res); + return false; + } + g.first_evaluation = false; + return true; +} + +void ngx_drop_feature() { + ngx::release_feature(feature); + feature = nullptr; +} + +void ngx_shutdown() { + ngx_drop_feature(); + ngx::destroy_params(params); + params = nullptr; +} + +#else // no NGX SDK: the gate is off, and each of these refuses + +bool ngx_available() { + return false; +} +bool ngx_feature(VkCommandBuffer) { + return false; +} +bool ngx_generate(VkCommandBuffer, const Inputs&, Image&) { + return false; +} +void ngx_drop_feature() {} +void ngx_shutdown() {} + +#endif + +} // namespace + +bool supported() { + static const bool yes = []() { + if (!asked()) return false; // (RX_VK_DLSSG: nothing below runs unless it is asked for) + if (!kHaveSdk) { + logf("vk: dlssg: this build has no NGX SDK (RX_VK_DLSS_SDK), so frame generation is " + "unavailable; the renderer's own interpolation is unaffected"); + return false; + } + if (!ngx_available()) return false; + logf("vk: dlssg: frame generation is available, %u made frame(s) asked for", asked()); + return true; + }(); + return yes; +} + +uint32_t frames_wanted() { + return supported() ? asked() : 0; +} + +bool prepare(uint32_t width, uint32_t height, uint32_t render_width, uint32_t render_height, + VkFormat present_format) { + if (!supported()) return false; + if (!width || !height || !render_width || !render_height) return false; + if (present_format == VK_FORMAT_UNDEFINED) return false; + const uint32_t n = asked(); + if (g.ready == n && g.width == width && g.height == height && g.render_width == render_width && + g.render_height == render_height && g.present_format == present_format) + return true; + // Extents or format changed: the feature was made for the old ones. + ngx_drop_feature(); + g.width = width, g.height = height; + g.render_width = render_width, g.render_height = render_height; + g.present_format = present_format; + g.first_evaluation = true; + for (uint32_t i = 0; i < n; i++) { + if (!make_frame(g.made[i], width, height, present_format)) { + for (uint32_t k = 0; k <= i; k++) drop_image(g.made[k]); + g.ready = 0; + return false; + } + } + for (uint32_t i = n; i < kMaxMade; i++) drop_image(g.made[i]); + g.ready = n; + logf("vk: dlssg: %u frame image(s) of %ux%u (format %d), from %ux%u inputs", n, width, height, + (int)present_format, render_width, render_height); + return true; +} + +bool generate(VkCommandBuffer cmd, const Inputs& in) { + if (!supported()) return false; + if (!in.color || !in.depth || !in.motion) return false; + if (!in.color_image || !in.depth_image || !in.motion_image) return false; + if (in.color_format == VK_FORMAT_UNDEFINED || in.depth_format == VK_FORMAT_UNDEFINED || + in.motion_format == VK_FORMAT_UNDEFINED) + return false; + if (!in.width || !in.height || !in.render_width || !in.render_height) return false; + if (!in.frame_index || in.frame_index > asked()) return false; + if (!(in.near_plane > 0.0f) || !(in.fov_y > 0.0f)) return false; // (Inputs defaults them) + if (!prepare(in.width, in.height, in.render_width, in.render_height, in.color_format)) + return false; + if (!ngx_feature(cmd)) return false; + Image& out = g.made[in.frame_index - 1]; + if (!out.image) return false; + to_general(cmd, out); + return ngx_generate(cmd, in, out); +} + +VkImage made_image(uint32_t index) { + if (!index || index > g.ready) return VK_NULL_HANDLE; + return g.made[index - 1].image; +} + +VkImageView made_view(uint32_t index) { + if (!index || index > g.ready) return VK_NULL_HANDLE; + return g.made[index - 1].view; +} + +void reset() { + g.first_evaluation = true; +} + +void shutdown() { + ngx_shutdown(); + for (Image& t : g.made) drop_image(t); + g = State{}; +} + +} // namespace mkwvk::dlssg diff --git a/gpu/vk/vk_dlssg.h b/gpu/vk/vk_dlssg.h new file mode 100644 index 000000000..e42def60c --- /dev/null +++ b/gpu/vk/vk_dlssg.h @@ -0,0 +1,101 @@ +// (hookshot) NVIDIA DLSS Frame Generation as a source of the frames shown between the game's. +// +// The renderer already shows made frames: vk_framegen.cpp interpolates between the last two +// presented frames and the display thread paces them (gpu/vk/vk_framegen.h). That interpolation is +// made from colour alone, which is all it has. This backend answers the same question with the +// game's motion and depth and NVIDIA's network, and with MultiFrameCount it can make more than one +// frame between two real ones -- which is the only way past a frame rate the game's own simulation +// limits. +// +// It slots in where the hand-written interpolation does, and where it refuses -- no NGX, no runtime, +// a GPU that does not report Frame Generation, inputs the seam could not assemble -- that +// interpolation runs exactly as before. Nothing here changes what the game submits. +// +// Nothing of NVIDIA's is in this repository and nothing of NVIDIA's is needed to build it: the NGX +// half is inside `RX_VK_DLSS_SDK` and the session is shared (gpu/vk/vk_ngx.h). docs/upscaling.md has +// the licensing decision and the input contract. +#pragma once + +#include + +#include "vk_internal.h" + +namespace mkwvk::dlssg { + +/// One evaluation's inputs. +/// +/// The colour is the frame the game has just finished, at the size it is presented; the motion and +/// depth are the scene's, at the render size, with `motion_scale` taking a vector to render pixels +/// and `depth_inverted` saying which way the depth runs. The two clip matrices are what let the +/// network place the made frame in time: `clip_to_prev_clip` carries this frame's clip space to the +/// one before it, and `prev_clip_to_clip` is its inverse. Both are row major, as everywhere else in +/// this renderer, and are transposed on the way in. +struct Inputs { + VkImageView color = VK_NULL_HANDLE; + VkImage color_image = VK_NULL_HANDLE; + VkFormat color_format = VK_FORMAT_UNDEFINED; + uint32_t width = 0, height = 0; + + VkImageView depth = VK_NULL_HANDLE; + VkImage depth_image = VK_NULL_HANDLE; + VkFormat depth_format = VK_FORMAT_UNDEFINED; + VkImageView motion = VK_NULL_HANDLE; + VkImage motion_image = VK_NULL_HANDLE; + VkFormat motion_format = VK_FORMAT_UNDEFINED; + uint32_t render_width = 0, render_height = 0; + + float motion_scale[2]{1.0f, 1.0f}; + float jitter[2]{}; + float clip_to_prev_clip[16]{}; + float prev_clip_to_clip[16]{}; + bool have_matrices = false; + + float near_plane = 0.1f; + float far_plane = 1000.0f; + float fov_y = 60.0f * 3.14159265358979f / 180.0f; + float aspect = 16.0f / 9.0f; + bool depth_inverted = true; + bool colour_hdr = true; + /// The motion already includes the camera's movement. Ours does: it *is* the camera's movement + /// (gpu/vk/vk_camera_motion.h), which is why this defaults true and why saying otherwise would + /// have the network apply the camera twice. + bool camera_motion_included = true; + bool reset = false; + + /// How many frames to make between this one and the last, and which of them this evaluation is + /// (1-based). 1 and 1 is ordinary 2x generation; a count of 2 or 3 is what DLSS 4 calls + /// multi-frame generation, and needs an evaluation per made frame. + uint32_t frames_made = 1; + uint32_t frame_index = 1; +}; + +/// Whether frame generation can run here at all: asked for (`RX_VK_DLSSG=1`), built with an NGX SDK, +/// the NGX runtime loaded, and this driver and GPU reporting Frame Generation. Asked once; the one +/// line saying why it is false is logged once. +[[nodiscard]] bool supported(); + +/// How many frames the run asks to be made between two of the game's: `RX_VK_DLSSG=<1-3>`, 1 by +/// default. Zero where frame generation is not asked for at all. +[[nodiscard]] uint32_t frames_wanted(); + +/// Makes the images the made frames resolve into and remembers these extents, re-making them when +/// the extents change. False when anything could not be made, which leaves generation unavailable +/// rather than half-built. +[[nodiscard]] bool prepare(uint32_t width, uint32_t height, uint32_t render_width, + uint32_t render_height, VkFormat present_format); + +/// Records one made frame. False when the inputs are not usable or NGX refused, which leaves the +/// caller to show whatever it would otherwise have shown. +[[nodiscard]] bool generate(VkCommandBuffer cmd, const Inputs& in); + +/// The made frame of the last `generate`, by index (1-based, as `Inputs::frame_index`), or null. +[[nodiscard]] VkImage made_image(uint32_t index); +[[nodiscard]] VkImageView made_view(uint32_t index); + +/// Forgets the sequence, so the next evaluation is told to reset: a cut, a load, a resize. +void reset(); + +/// Frees everything this backend made. The shared NGX session is not ended here. +void shutdown(); + +} // namespace mkwvk::dlssg diff --git a/gpu/vk/vk_draw.cpp b/gpu/vk/vk_draw.cpp index 8ae7d00fa..f7acbd2af 100644 --- a/gpu/vk/vk_draw.cpp +++ b/gpu/vk/vk_draw.cpp @@ -4546,6 +4546,13 @@ static void capture_view_projection(const NvnState& s) { // display. The serial changes when the targets do, so the matrix still refreshes every frame. static thread_local uint64_t done_for = ~0ull; if (done_for == targets_serial) return; + // Looked at once per target set whether or not a matrix is found. Setting this only on success + // was the bug: most target sets -- shadow, UI, post -- hold no projection, so the guard never + // armed for them and the scan below ran on every draw of them instead. At 1800 draws a frame + // that was 30,000 reads of guest memory a frame, each one copying the 4 KB page it landed in + // out of the capture, and it cost the frame about 300 ms. It is what made a 57-60 fps scene run + // at 3, with FSR off as much as on, and it is why the frame-rate collapse looked like FSR's. + done_for = targets_serial; for (int stage = 0; stage < kNvnStages; stage++) { for (int slot = 0; slot < 16; slot++) { const nvn_p_bind_buf& u = s.ubo[stage][slot]; @@ -4571,7 +4578,6 @@ static void capture_view_projection(const NvnState& s) { } memcpy(scene_vp.m, vp, sizeof vp); scene_vp.have = true; - done_for = targets_serial; static std::atomic told{0}; if (told++ == 0) logf("vk: the scene's view projection: stage %d slot %d, view at +0 and projection " diff --git a/gpu/vk/vk_ngx.cpp b/gpu/vk/vk_ngx.cpp new file mode 100644 index 000000000..38ccdfb0b --- /dev/null +++ b/gpu/vk/vk_ngx.cpp @@ -0,0 +1,245 @@ +// (hookshot) The shared NGX session: gpu/vk/vk_ngx.h says why there is only one. +#if defined(RX_VK_DLSS_SDK) + +#include "vk_ngx.h" + +#include +#include + +#include "vk_loader.h" + +namespace mkwvk::ngx { +namespace { + +/// The entry points the backends call, resolved by name from the NGX core the NVIDIA driver ships +/// (`libnvidia-ngx.so`), through the loader pattern the rest of the renderer uses for vulkan-1.dll. +/// +/// Resolved rather than linked for two reasons: the SDK's own library is then not a link requirement +/// of a gated build, and a machine with the SDK-built binary but no NVIDIA driver has every pointer +/// null here, so every backend reports itself unavailable instead of the process failing to start. +struct Session { + HMODULE module = nullptr; + decltype(&NVSDK_NGX_VULKAN_Init_with_ProjectID) init = nullptr; + decltype(&NVSDK_NGX_VULKAN_Shutdown1) shutdown = nullptr; + decltype(&NVSDK_NGX_VULKAN_GetCapabilityParameters) capability = nullptr; + decltype(&NVSDK_NGX_VULKAN_AllocateParameters) allocate = nullptr; + decltype(&NVSDK_NGX_VULKAN_DestroyParameters) destroy = nullptr; + decltype(&NVSDK_NGX_VULKAN_CreateFeature) create = nullptr; + decltype(&NVSDK_NGX_VULKAN_EvaluateFeature) evaluate = nullptr; + decltype(&NVSDK_NGX_VULKAN_ReleaseFeature) release = nullptr; + /// The two discovery calls, which answer before a device exists. Optional: an NGX without them + /// is one whose features need nothing beyond the core, and refusing to load over a missing + /// discovery call would turn a working configuration into an unavailable one. + decltype(&NVSDK_NGX_VULKAN_GetFeatureInstanceExtensionRequirements) instance_exts = nullptr; + decltype(&NVSDK_NGX_VULKAN_GetFeatureDeviceExtensionRequirements) device_exts = nullptr; + bool started = false; + bool load_failed = false; +}; +Session s; + +/// A project id of our own. NVIDIA's analytics-key form is for licensed titles; the project-id form +/// exists exactly so a project without one can initialize. +constexpr const char* kProjectId = "a6b7c0de-7a1f-4f1e-9d2a-hookshot-dlss"; +constexpr const char* kEngineVersion = "1.0"; + +/// The game folder, wide, for NGX's application data path: where it writes what it keeps and where +/// it looks for the feature libraries (libnvidia-ngx-dlss.so.* and its siblings), which the player +/// supplies beside the binary and which are never ours to ship. +const wchar_t* data_path() { + static wchar_t wide[MAX_PATH + 1]; + static const bool once = []() { + char path[MAX_PATH + 1]{}; + const DWORD n = GetModuleFileNameA(nullptr, path, MAX_PATH); + if (!n) { + wide[0] = L'.', wide[1] = 0; + return true; + } + char* name = path + n; + while (name > path && name[-1] != '\\' && name[-1] != '/') name--; + *name = 0; + size_t i = 0; + for (; path[i] && i < MAX_PATH; i++) wide[i] = (wchar_t)(unsigned char)path[i]; + wide[i] = 0; + if (!i) wide[0] = L'.', wide[1] = 0; + return true; + }(); + (void)once; + return wide; +} + +} // namespace + +bool load() { + if (s.module) return true; + if (s.load_failed) return false; + // The core ships with the driver and is found on the usual search path; the model libraries sit + // beside the binary and are NGX's to find, which is what the application data path is for. +#ifdef _WIN32 + static const char* const names[]{"nvngx.dll", "_nvngx.dll"}; +#else + static const char* const names[]{"libnvidia-ngx.so.1", "libnvidia-ngx.so"}; +#endif + for (const char* name : names) { + s.module = LoadLibraryA(name); + if (s.module) { + logf("vk: ngx loaded from %s", name); + break; + } + } + if (!s.module) { + logf("vk: ngx: no NGX runtime here (%s), so every DLSS feature is unavailable", names[0]); + s.load_failed = true; + return false; + } +#define NGX_RESOLVE(field, name) \ + s.field = (decltype(s.field))(void*)GetProcAddress(s.module, name); \ + if (!s.field) { \ + logf("vk: ngx: the NGX runtime has no %s", name); \ + s.load_failed = true; \ + return false; \ + } + NGX_RESOLVE(init, "NVSDK_NGX_VULKAN_Init_with_ProjectID") + NGX_RESOLVE(shutdown, "NVSDK_NGX_VULKAN_Shutdown1") + NGX_RESOLVE(capability, "NVSDK_NGX_VULKAN_GetCapabilityParameters") + NGX_RESOLVE(allocate, "NVSDK_NGX_VULKAN_AllocateParameters") + NGX_RESOLVE(destroy, "NVSDK_NGX_VULKAN_DestroyParameters") + NGX_RESOLVE(create, "NVSDK_NGX_VULKAN_CreateFeature") + NGX_RESOLVE(evaluate, "NVSDK_NGX_VULKAN_EvaluateFeature") + NGX_RESOLVE(release, "NVSDK_NGX_VULKAN_ReleaseFeature") +#undef NGX_RESOLVE + s.instance_exts = (decltype(s.instance_exts))(void*)GetProcAddress( + s.module, "NVSDK_NGX_VULKAN_GetFeatureInstanceExtensionRequirements"); + s.device_exts = (decltype(s.device_exts))(void*)GetProcAddress( + s.module, "NVSDK_NGX_VULKAN_GetFeatureDeviceExtensionRequirements"); + return true; +} + +bool start() { + if (!load()) return false; + if (s.started) return true; + NVSDK_NGX_FeatureCommonInfo common{}; + const wchar_t* paths[]{data_path()}; + common.PathListInfo.Path = paths; + common.PathListInfo.Length = 1; + const NVSDK_NGX_Result res = + s.init(kProjectId, NVSDK_NGX_ENGINE_TYPE_CUSTOM, kEngineVersion, data_path(), dev.instance, + dev.physical, dev.device, instance_proc(), vkGetDeviceProcAddr, &common, + NVSDK_NGX_Version_API); + if (NVSDK_NGX_FAILED(res)) { + logf("vk: ngx did not initialize (0x%08x)", (unsigned)res); + return false; + } + s.started = true; + return true; +} + +bool feature_available(const char* available_key, const char* needs_driver_key, + const char* major_key, const char* minor_key, const char* name) { + if (!start()) return false; + NVSDK_NGX_Parameter* caps = nullptr; + if (NVSDK_NGX_FAILED(s.capability(&caps)) || !caps) { + logf("vk: ngx gave no capability parameters"); + return false; + } + int available = 0; + if (NVSDK_NGX_FAILED(caps->Get(available_key, &available)) || !available) { + // What NGX says about it: an old driver and a feature that failed to initialize are + // different reports, and a user with the first can act on it. + int needs_driver = 0, major = 0, minor = 0; + caps->Get(needs_driver_key, &needs_driver); + caps->Get(major_key, &major); + caps->Get(minor_key, &minor); + if (needs_driver) + logf("vk: ngx: this driver is too old for %s (%d.%d or newer wanted)", name, major, + minor); + else + logf("vk: ngx: this GPU and driver do not report %s", name); + return false; + } + return true; +} + +NVSDK_NGX_Parameter* allocate_params() { + if (!start()) return nullptr; + NVSDK_NGX_Parameter* params = nullptr; + if (NVSDK_NGX_FAILED(s.allocate(¶ms))) { + logf("vk: ngx gave no parameters to evaluate with"); + return nullptr; + } + return params; +} + +void destroy_params(NVSDK_NGX_Parameter* params) { + if (params && s.destroy) s.destroy(params); +} + +NVSDK_NGX_Result create_feature(VkCommandBuffer cmd, NVSDK_NGX_Feature feature, + NVSDK_NGX_Parameter* params, NVSDK_NGX_Handle** out_handle) { + if (!s.create) return NVSDK_NGX_Result_Fail; + return s.create(cmd, feature, params, out_handle); +} + +NVSDK_NGX_Result evaluate_feature(VkCommandBuffer cmd, NVSDK_NGX_Handle* handle, + NVSDK_NGX_Parameter* params) { + if (!s.evaluate) return NVSDK_NGX_Result_Fail; + return s.evaluate(cmd, handle, params, nullptr); +} + +void release_feature(NVSDK_NGX_Handle* handle) { + if (handle && s.release) s.release(handle); +} + +NVSDK_NGX_FeatureDiscoveryInfo discovery_info(NVSDK_NGX_Feature feature) { + NVSDK_NGX_FeatureDiscoveryInfo info{}; + info.SDKVersion = NVSDK_NGX_Version_API; + info.FeatureID = feature; + info.Identifier.IdentifierType = NVSDK_NGX_Application_Identifier_Type_Project_Id; + info.Identifier.v.ProjectDesc.ProjectId = kProjectId; + info.Identifier.v.ProjectDesc.EngineType = NVSDK_NGX_ENGINE_TYPE_CUSTOM; + info.Identifier.v.ProjectDesc.EngineVersion = kEngineVersion; + info.ApplicationDataPath = data_path(); + return info; +} + +size_t instance_extensions(NVSDK_NGX_Feature feature, const char** out, size_t max) { + if (!load() || !s.instance_exts) return 0; + const NVSDK_NGX_FeatureDiscoveryInfo info = discovery_info(feature); + uint32_t n = 0; + VkExtensionProperties* props = nullptr; + if (NVSDK_NGX_FAILED(s.instance_exts(&info, &n, &props)) || !props) return 0; + size_t kept = 0; + for (uint32_t i = 0; i < n && kept < max; i++) out[kept++] = props[i].extensionName; + return kept; +} + +size_t device_extensions(VkInstance instance, VkPhysicalDevice gpu, NVSDK_NGX_Feature feature, + const char** out, size_t max) { + if (!instance || !gpu || !load() || !s.device_exts) return 0; + const NVSDK_NGX_FeatureDiscoveryInfo info = discovery_info(feature); + uint32_t n = 0; + VkExtensionProperties* props = nullptr; + if (NVSDK_NGX_FAILED(s.device_exts(instance, gpu, &info, &n, &props)) || !props) return 0; + size_t kept = 0; + for (uint32_t i = 0; i < n && kept < max; i++) out[kept++] = props[i].extensionName; + return kept; +} + +NVSDK_NGX_Resource_VK resource(VkImageView view, VkImage image, VkFormat format, uint32_t width, + uint32_t height, bool read_write) { + VkImageSubresourceRange range{}; + range.aspectMask = + is_depth_format(format) ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_COLOR_BIT; + range.baseMipLevel = 0, range.levelCount = 1; + range.baseArrayLayer = 0, range.layerCount = 1; + return NVSDK_NGX_Create_ImageView_Resource_VK(view, image, range, format, width, height, + read_write); +} + +void shutdown() { + if (s.started && s.shutdown) s.shutdown(dev.device); + s.started = false; +} + +} // namespace mkwvk::ngx + +#endif // RX_VK_DLSS_SDK diff --git a/gpu/vk/vk_ngx.h b/gpu/vk/vk_ngx.h new file mode 100644 index 000000000..827c6f74d --- /dev/null +++ b/gpu/vk/vk_ngx.h @@ -0,0 +1,84 @@ +// (hookshot) The one NGX session the DLSS backends share. +// +// NGX initializes once per process and hands back one capability-parameter block for every feature +// it knows, so three backends that each loaded and initialized it would be three bugs: a second +// NVSDK_NGX_VULKAN_Init over a live session, a second set of parameters, and a shutdown by whichever +// one finished first. Super Resolution (gpu/vk/vk_dlss.h), Frame Generation (gpu/vk/vk_dlssg.h) and +// Ray Reconstruction all come through here instead, and each one owns nothing but its own feature +// handle. +// +// Nothing of NVIDIA's is in this repository and nothing of NVIDIA's is needed to build it: this +// whole file is inside the build-time gate `RX_VK_DLSS_SDK`, which names the builder's own copy of +// an NGX SDK. A tree without it does not compile this file at all, and the backends' public headers +// stay free of NGX types so that the renderer can call them either way. docs/upscaling.md has the +// licensing decision in full. +#pragma once + +#if defined(RX_VK_DLSS_SDK) + +#include + +#include "vk_internal.h" + +#include +#include +#include +#include + +namespace mkwvk::ngx { + +/// Loads the NGX core the driver ships and resolves what the backends call. False, with one line +/// logged, where there is no NGX runtime here or it is missing an entry point. Asked more than once +/// is free: the answer is kept. +[[nodiscard]] bool load(); + +/// Initializes the session if it is not up yet. False where NGX refused, which it does on a GPU or +/// driver it does not serve. +[[nodiscard]] bool start(); + +/// Whether NGX reports this feature as available on this GPU and driver. `available_key` is the +/// feature's own capability key (`NVSDK_NGX_Parameter_SuperSampling_Available` and its siblings) and +/// `name` only names it in the log. A feature that is unavailable because the driver is too old is +/// reported differently from one that failed to initialize, because a user can act on the first. +[[nodiscard]] bool feature_available(const char* available_key, const char* needs_driver_key, + const char* major_key, const char* minor_key, const char* name); + +/// A parameter block of this backend's own, to create and evaluate a feature with. Null where NGX +/// would not give one. The caller keeps it for the life of its feature and frees it with +/// `destroy_params`. +[[nodiscard]] NVSDK_NGX_Parameter* allocate_params(); +void destroy_params(NVSDK_NGX_Parameter* params); + +/// Creates / evaluates / releases one feature. Thin passes to NGX, here only so that the resolved +/// entry points stay in one place. +[[nodiscard]] NVSDK_NGX_Result create_feature(VkCommandBuffer cmd, NVSDK_NGX_Feature feature, + NVSDK_NGX_Parameter* params, + NVSDK_NGX_Handle** out_handle); +[[nodiscard]] NVSDK_NGX_Result evaluate_feature(VkCommandBuffer cmd, NVSDK_NGX_Handle* handle, + NVSDK_NGX_Parameter* params); +void release_feature(NVSDK_NGX_Handle* handle); + +/// What a discovery call is asked about, for a feature. Used before the device exists, which is why +/// it takes no device. +[[nodiscard]] NVSDK_NGX_FeatureDiscoveryInfo discovery_info(NVSDK_NGX_Feature feature); + +/// The extensions a feature needs here, asked of NGX. Both return how many names were written, at +/// most `max`; the names are NGX's own storage and last as long as the process. Zero means NGX does +/// not answer, which leaves the device created as it would have been. +size_t instance_extensions(NVSDK_NGX_Feature feature, const char** out, size_t max); +size_t device_extensions(VkInstance instance, VkPhysicalDevice gpu, NVSDK_NGX_Feature feature, + const char** out, size_t max); + +/// One image as NGX takes it: a view *and* its image, range, format and the extent it is read at. +/// NGX is handed resources, not views, which is the whole reason the renderer records what each +/// binding is a view of. +[[nodiscard]] NVSDK_NGX_Resource_VK resource(VkImageView view, VkImage image, VkFormat format, + uint32_t width, uint32_t height, bool read_write); + +/// Ends the session. The backends release their own features first; this is safe when nothing was +/// started. +void shutdown(); + +} // namespace mkwvk::ngx + +#endif // RX_VK_DLSS_SDK diff --git a/tests/test_vp_scan_once.py b/tests/test_vp_scan_once.py new file mode 100644 index 000000000..d203ff7fa --- /dev/null +++ b/tests/test_vp_scan_once.py @@ -0,0 +1,59 @@ +"""The view-projection scan runs once per render target set, however it ends. + +capture_view_projection walks five stages and sixteen slots, reading a uniform buffer from each, to +find the matrix the scene was drawn with. It is meant to do that once per render target set. It used +to arm its guard only on the branch that *found* a matrix, so for every target set that holds none +-- shadow, UI, post, which is most of them -- the guard never armed and the whole scan ran again on +every draw of that set: about 30,000 reads of guest memory a frame, each read landing in a captured +page copying that whole 4 KB page. It cost roughly 300 ms a frame and was mistaken for the cost of +FSR (docs/upscaling.md, "Correction: FSR was not what cost the frame rate"). + +So: the assignment has to come before the loop, not inside it. + +python -I -B tests/test_vp_scan_once.py +""" +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +GUARD = "done_for = targets_serial;" + + +def block(text, marker): + if marker not in text: + raise SystemExit(f"{marker!r} is not in vk_draw.cpp: this test no longer checks anything") + start = text.index(marker) + end = text.index("{", start) + 1 + depth = 1 + while depth: + depth += (text[end] == "{") - (text[end] == "}") + end += 1 + return text[start:end] + + +def main(): + source = (ROOT / "gpu" / "vk" / "vk_draw.cpp").read_text(encoding="utf-8") + fn = block(source, "static void capture_view_projection(") + + # the scan this is about: without these the function is something else and the check is empty + if "ub_read(" not in fn: + raise SystemExit("capture_view_projection no longer reads uniform buffers") + if "for (int stage" not in fn: + raise SystemExit("capture_view_projection no longer walks the stages") + if "if (done_for == targets_serial) return;" not in fn: + raise SystemExit("capture_view_projection no longer skips a target set it has looked at") + + assignments = [i for i in range(len(fn)) if fn.startswith(GUARD, i)] + if not assignments: + raise SystemExit("capture_view_projection never records the target set it looked at") + loop = fn.index("for (int stage") + late = [i for i in assignments if i > loop] + if late: + raise SystemExit( + "capture_view_projection arms its guard inside the scan, so a target set with no " + "projection in it is scanned again on every draw" + ) + print(f"PASS: the view-projection scan arms its guard before the loop ({len(assignments)} assignment)") + + +if __name__ == "__main__": + main() From 43e3360aa268fb99ff392d3bbc18c7232265a950 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Sun, 8 Nov 2026 19:06:39 -0600 Subject: [PATCH 036/119] feat: link NGX properly, frame generation at the seam, AMD's interpolation sources Three things, all of them opt-in and all neutral while off. **NGX is linked, not resolved.** On Linux the driver's core (libnvidia-ngx.so) exports none of the public NVSDK_NGX_* API: resolving them from it found NVSDK_NGX_VULKAN_Init_with_ProjectID simply missing. Those entry points live in the SDK's own static library, which calls into the core, so a build with RX_VK_DLSS_SDK= links that library (nx2/build.py's dlss_sdk_link) and the session calls NGX directly. Nothing of NVIDIA's is in this repository and nothing may be: the SDK is the builder's own copy under the path they name, and a build without it links exactly what it linked before. The session itself is now gpu/vk/vk_ngx.cpp, shared by every DLSS feature. NGX initializes once per process and hands back one capability block, so three backends each loading it would have been three bugs. The project id had to become a real UUID. NGX validates the shape and answers FAIL_InvalidParameter for anything else; ours spelled "hookshot-dlss" into the last two groups, which is not hex, and that is the error a run got. **DLSS frame generation** (gpu/vk/vk_dlssg.*, RX_VK_DLSSG=<1-3>) makes the frames the renderer's own interpolator would have made, from the scene's depth and the camera motion reprojected from it, with MultiFrameCount for more than one between two real frames. It slots into framegen_record ahead of the colour interpolation; where it refuses or makes fewer than asked, that interpolation runs as before and a set is never shown half made. The docs used to say DLSS frame generation was a Streamline feature and so Windows-only. It is not: it is an NGX feature of its own and the SDK ships libnvidia-ngx-dlssg.so for Linux. Asking camera_motion for a frame's motion twice is now answered with the one already written. Recording it again would reproject through the matrix the first recording had just stored as "previous" -- this same frame's -- and the second caller would have got exactly zero motion, silently. **AMD's frame-interpolation sources are vendored** (third_party/fidelityfx-sdk, same SDK commit, MIT): eleven interpolation passes, seven optical-flow passes and their GPU headers. scripts/fsr3_shaders.py compiles all 28 passes now and --check still proves the checked-in headers match their sources. The backend that records them is not written yet. Co-Authored-By: Claude Opus 5 --- docs/upscaling.md | 30 +- .../fsr3_fi_disocclusion_mask_comp_spv.h | 818 +++++++++ ...sr3_fi_game_motion_vector_field_comp_spv.h | 842 +++++++++ ...vector_field_inpainting_pyramid_comp_spv.h | 1551 +++++++++++++++++ gpu/vk/shaders/fsr3_fi_inpainting_comp_spv.h | 748 ++++++++ .../fsr3_fi_inpainting_pyramid_comp_spv.h | 1488 ++++++++++++++++ gpu/vk/shaders/fsr3_fi_interpolate_comp_spv.h | 1260 +++++++++++++ ...r3_fi_optical_flow_vector_field_comp_spv.h | 789 +++++++++ .../fsr3_fi_reconstruct_and_dilate_comp_spv.h | 426 +++++ ...3_fi_reconstruct_previous_depth_comp_spv.h | 307 ++++ gpu/vk/shaders/fsr3_fi_setup_comp_spv.h | 232 +++ ...fsr3_of_compute_optical_flow_v5_comp_spv.h | 957 ++++++++++ .../fsr3_of_compute_scd_divergence_comp_spv.h | 625 +++++++ .../fsr3_of_filter_optical_flow_v5_comp_spv.h | 167 ++ .../fsr3_of_generate_scd_histogram_comp_spv.h | 243 +++ .../fsr3_of_luminance_pyramid_comp_spv.h | 1196 +++++++++++++ .../shaders/fsr3_of_prepare_luma_comp_spv.h | 302 ++++ .../fsr3_of_scale_optical_flow_v5_comp_spv.h | 522 ++++++ gpu/vk/vk_camera_motion.cpp | 9 + gpu/vk/vk_dlss.cpp | 3 +- gpu/vk/vk_draw.cpp | 17 + gpu/vk/vk_draw.h | 16 + gpu/vk/vk_framegen.cpp | 87 +- gpu/vk/vk_ngx.cpp | 121 +- nx2/build.py | 25 +- scripts/fsr3_shaders.py | 79 +- third_party/fidelityfx-sdk/PROVENANCE.md | 4 +- .../CMakeCompileFrameinterpolationShaders.txt | 55 + .../ffx_frameinterpolation.h | 187 ++ .../ffx_frameinterpolation_callbacks_glsl.h | 758 ++++++++ .../ffx_frameinterpolation_callbacks_hlsl.h | 814 +++++++++ .../ffx_frameinterpolation_common.h | 445 +++++ ...ute_game_vector_field_inpainting_pyramid.h | 121 ++ ...interpolation_compute_inpainting_pyramid.h | 120 ++ .../ffx_frameinterpolation_debug_view.h | 172 ++ ...ffx_frameinterpolation_disocclusion_mask.h | 146 ++ ...meinterpolation_game_motion_vector_field.h | 123 ++ .../ffx_frameinterpolation_inpainting.h | 150 ++ ...einterpolation_optical_flow_vector_field.h | 123 ++ ...ruct_dilated_velocity_and_previous_depth.h | 123 ++ ...interpolation_reconstruct_previous_depth.h | 63 + .../ffx_frameinterpolation_resources.h | 95 + .../ffx_frameinterpolation_setup.h | 50 + .../CMakeCompileOpticalflowShaders.txt | 55 + .../ffx_opticalflow_callbacks_glsl.h | 578 ++++++ .../ffx_opticalflow_callbacks_hlsl.h | 634 +++++++ .../gpu/opticalflow/ffx_opticalflow_common.h | 99 ++ ...fx_opticalflow_compute_luminance_pyramid.h | 107 ++ .../ffx_opticalflow_compute_optical_flow_v5.h | 279 +++ .../ffx_opticalflow_compute_scd_divergence.h | 159 ++ .../ffx_opticalflow_filter_optical_flow_v5.h | 58 + .../ffx_opticalflow_generate_scd_histogram.h | 92 + .../ffx_opticalflow_prepare_luma.h | 106 ++ .../opticalflow/ffx_opticalflow_resources.h | 74 + ...ticalflow_scale_optical_flow_advanced_v5.h | 99 ++ ..._vector_field_inpainting_pyramid_pass.glsl | 75 + ...ation_compute_inpainting_pyramid_pass.glsl | 74 + ...fx_frameinterpolation_debug_view_pass.glsl | 65 + ...einterpolation_disocclusion_mask_pass.glsl | 61 + ...olation_game_motion_vector_field_pass.glsl | 60 + ...fx_frameinterpolation_inpainting_pass.glsl | 60 + ...lation_optical_flow_vector_field_pass.glsl | 60 + .../ffx_frameinterpolation_pass.glsl | 65 + ...rpolation_reconstruct_and_dilate_pass.glsl | 58 + ...ation_reconstruct_previous_depth_pass.glsl | 58 + .../ffx_frameinterpolation_setup_pass.glsl | 60 + ...alflow_compute_luminance_pyramid_pass.glsl | 60 + ...compute_optical_flow_advanced_pass_v5.glsl | 66 + ...ticalflow_compute_scd_divergence_pass.glsl | 57 + ...ticalflow_filter_optical_flow_pass_v5.glsl | 57 + ...ticalflow_generate_scd_histogram_pass.glsl | 55 + .../ffx_opticalflow_prepare_luma_pass.glsl | 55 + ...w_scale_optical_flow_advanced_pass_v5.glsl | 66 + 73 files changed, 19767 insertions(+), 94 deletions(-) create mode 100644 gpu/vk/shaders/fsr3_fi_disocclusion_mask_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_fi_game_motion_vector_field_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_fi_game_vector_field_inpainting_pyramid_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_fi_inpainting_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_fi_inpainting_pyramid_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_fi_interpolate_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_fi_optical_flow_vector_field_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_fi_reconstruct_and_dilate_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_fi_reconstruct_previous_depth_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_fi_setup_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_of_compute_optical_flow_v5_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_of_compute_scd_divergence_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_of_filter_optical_flow_v5_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_of_generate_scd_histogram_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_of_luminance_pyramid_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_of_prepare_luma_comp_spv.h create mode 100644 gpu/vk/shaders/fsr3_of_scale_optical_flow_v5_comp_spv.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/CMakeCompileFrameinterpolationShaders.txt create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_callbacks_glsl.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_callbacks_hlsl.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_common.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_compute_game_vector_field_inpainting_pyramid.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_compute_inpainting_pyramid.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_debug_view.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_disocclusion_mask.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_game_motion_vector_field.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_inpainting.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_optical_flow_vector_field.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_reconstruct_dilated_velocity_and_previous_depth.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_reconstruct_previous_depth.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_resources.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_setup.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/CMakeCompileOpticalflowShaders.txt create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_callbacks_glsl.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_callbacks_hlsl.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_common.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_compute_luminance_pyramid.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_compute_optical_flow_v5.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_compute_scd_divergence.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_filter_optical_flow_v5.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_generate_scd_histogram.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_prepare_luma.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_resources.h create mode 100644 third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_scale_optical_flow_advanced_v5.h create mode 100644 third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_compute_game_vector_field_inpainting_pyramid_pass.glsl create mode 100644 third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_compute_inpainting_pyramid_pass.glsl create mode 100644 third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_debug_view_pass.glsl create mode 100644 third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_disocclusion_mask_pass.glsl create mode 100644 third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_game_motion_vector_field_pass.glsl create mode 100644 third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_inpainting_pass.glsl create mode 100644 third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_optical_flow_vector_field_pass.glsl create mode 100644 third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_pass.glsl create mode 100644 third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_reconstruct_and_dilate_pass.glsl create mode 100644 third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_reconstruct_previous_depth_pass.glsl create mode 100644 third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_setup_pass.glsl create mode 100644 third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_compute_luminance_pyramid_pass.glsl create mode 100644 third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_compute_optical_flow_advanced_pass_v5.glsl create mode 100644 third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_compute_scd_divergence_pass.glsl create mode 100644 third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_filter_optical_flow_pass_v5.glsl create mode 100644 third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_generate_scd_histogram_pass.glsl create mode 100644 third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_prepare_luma_pass.glsl create mode 100644 third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_scale_optical_flow_advanced_pass_v5.glsl diff --git a/docs/upscaling.md b/docs/upscaling.md index 73544d854..a56f8746b 100644 --- a/docs/upscaling.md +++ b/docs/upscaling.md @@ -367,9 +367,32 @@ the path to 4 rather than a detour away from it. The existing interpolator shows made frames about one frame behind the game, and skips interpolation across hitches over 100 ms. Real motion and depth improve what it makes, but they do not change -either property. DLSS frame generation is a Streamline feature and so would be Windows-only; FSR's -frame interpolation is available on both. Neither removes the latency a frame-interpolating renderer -has by construction, and #755 should be read before any of it is wired to the Insert menu. +either property. Neither removes the latency a frame-interpolating renderer has by construction, and +#755 should be read before any of it is wired to the Insert menu. + +**Correction: DLSS frame generation is not Windows-only.** This section used to say it was a +Streamline feature and therefore out of reach on Linux. Streamline has no Linux build, but frame +generation is an NGX feature in its own right -- `NVSDK_NGX_Feature_FrameGeneration`, with +`NVSDK_NGX_Parameter_FrameGeneration_Available` to ask about it and a full set of evaluation +parameters in `nvsdk_ngx_params_dlssg.h` -- and the SDK ships `libnvidia-ngx-dlssg.so` for +`Linux_x86_64` beside the super-resolution and ray-reconstruction libraries. It is reached exactly +as super resolution is, through the shared session in `gpu/vk/vk_ngx.h`. + +`gpu/vk/vk_dlssg.h` is that backend. It makes the frames the existing interpolator would have made, +from the scene's own depth and the camera motion reprojected from it, and `MultiFrameCount` lets it +make more than one between two real frames -- which is the only way past a rate the game's own +simulation limits. It slots into `framegen_record` ahead of the colour interpolation: where it +refuses, or makes fewer frames than were asked for, the interpolation runs exactly as before and the +set is never shown half made. `RX_VK_DLSSG=<1-3>` asks for it and says how many frames to make; +without it nothing is loaded and nothing is logged. + +The inputs it needs that colour interpolation does not -- the scene's depth, and the matrix its +draws used -- are kept by the draw path and read back through `scene_frame_inputs()`, because frame +generation is recorded at present time where neither is otherwise in reach. The motion is the same +camera-only reprojection the upscalers use, and asking for it twice in one frame is answered with +the one already written: recording it again would reproject through the matrix the first recording +had just stored as "previous", which is this same frame's, and the second caller would silently get +exactly zero motion. ## DLSS Super Resolution: what is in the tree, and what it is not @@ -400,6 +423,7 @@ Two switches, both off by default, both neutral while off: | | | |---|---| +| `RX_VK_DLSSG=<1-3>` | asks for DLSS frame generation and says how many frames to make between two of the game's. Without it nothing is loaded, nothing is looked at and nothing is logged; the renderer's own interpolation is unaffected either way | | `RX_VK_FSR_STAGE=<0-3>` | diagnostics, and wrong output on purpose above 0: how far down the upscale path a run goes. 1 stops before the backend, 2 records every barrier, clear and descriptor but none of the nine dispatches, 3 keeps the dispatches and drops the blit into the game's target. It exists because three hypotheses about a frame-rate cost were each disproved by a measurement that a stage switch would have given in one run | | `RX_VK_DLSS=1` | asks for the backend at run time. Without it nothing is loaded, nothing is looked at and nothing is logged | | `RX_VK_DLSS_SDK` | a **build-time** gate. Off, the NGX half of the backend is not compiled and `supported()` is false. On, the build needs an NGX SDK's `include/` on the include path | diff --git a/gpu/vk/shaders/fsr3_fi_disocclusion_mask_comp_spv.h b/gpu/vk/shaders/fsr3_fi_disocclusion_mask_comp_spv.h new file mode 100644 index 000000000..089fe9ad1 --- /dev/null +++ b/gpu/vk/shaders/fsr3_fi_disocclusion_mask_comp_spv.h @@ -0,0 +1,818 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_FI_DISOCCLUSION_MASK_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x000003d6,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000031,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e, + 0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x000003c6, + 0x00060010,0x00000004,0x00000011,0x00000008,0x00000008,0x00000001,0x00030003,0x00000002, + 0x000001c2,0x000b0004,0x455f4c47,0x735f5458,0x6c706d61,0x656c7265,0x745f7373,0x75747865, + 0x665f6572,0x74636e75,0x736e6f69,0x00000000,0x000b0004,0x455f4c47,0x735f5458,0x65646168, + 0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004, + 0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365, + 0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572, + 0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000b,0x41786666, + 0x6f6c4673,0x75287461,0x00003b31,0x00030005,0x0000000a,0x00000078,0x00070005,0x00000011, + 0x42786666,0x64616f72,0x74736163,0x31662832,0x0000003b,0x00040005,0x00000010,0x756c6176, + 0x00000065,0x00070005,0x00000017,0x4c786666,0x28707265,0x663b3166,0x31663b31,0x0000003b, + 0x00030005,0x00000014,0x00000078,0x00030005,0x00000015,0x00000079,0x00030005,0x00000016, + 0x00000074,0x00060005,0x0000001b,0x53786666,0x72757461,0x28657461,0x003b3166,0x00030005, + 0x0000001a,0x00000078,0x00060005,0x00000020,0x46786666,0x74636172,0x32667628,0x0000003b, + 0x00030005,0x0000001f,0x00000078,0x00070005,0x00000024,0x55786666,0x6361706e,0x3233466b, + 0x3b317528,0x00000000,0x00030005,0x00000023,0x00000075,0x00060005,0x00000029,0x4d786666, + 0x66286e69,0x31663b31,0x0000003b,0x00030005,0x00000027,0x00000078,0x00030005,0x00000028, + 0x00000079,0x00050005,0x0000002e,0x646e6552,0x69537265,0x0028657a,0x000b0005,0x00000032, + 0x69766544,0x6f546563,0x77656956,0x63617053,0x61725465,0x6f66736e,0x61466d72,0x726f7463, + 0x00002873,0x00080005,0x00000037,0x64616f4c,0x616c6944,0x44646574,0x68747065,0x32697628, + 0x0000003b,0x00040005,0x00000036,0x50785069,0x0000736f,0x000d0005,0x0000003a,0x64616f4c, + 0x6f636552,0x7274736e,0x65746375,0x70654464,0x72506874,0x6f697665,0x72467375,0x28656d61, + 0x3b326976,0x00000000,0x00050005,0x00000039,0x49785069,0x7475706e,0x00000000,0x000d0005, + 0x0000003d,0x64616f4c,0x69747345,0x6574616d,0x746e4964,0x6f707265,0x6974616c,0x72466e6f, + 0x44656d61,0x68747065,0x32697628,0x0000003b,0x00050005,0x0000003c,0x49785069,0x7475706e, + 0x00000000,0x00080005,0x00000042,0x64616f4c,0x656d6147,0x6c656946,0x28764d64,0x3b326976, + 0x00000000,0x00050005,0x00000041,0x53785069,0x6c706d61,0x00000065,0x000a0005,0x00000049, + 0x64616f4c,0x61706e49,0x69746e69,0x7950676e,0x696d6172,0x31692864,0x3275763b,0x0000003b, + 0x00050005,0x00000047,0x4c70696d,0x6c657665,0x00000000,0x00050005,0x00000048,0x49785069, + 0x7475706e,0x00000000,0x00090005,0x0000004c,0x706d6153,0x6944656c,0x726f7473,0x6e6f6974, + 0x6c656946,0x66762864,0x00003b32,0x00030005,0x0000004b,0x00765566,0x000a0005,0x00000051, + 0x726f7453,0x73694465,0x6c63636f,0x6f697375,0x73614d6e,0x6976286b,0x66763b32,0x00003b32, + 0x00040005,0x0000004f,0x50785069,0x0000736f,0x00030005,0x00000050,0x006c6176,0x00080005, + 0x00000056,0x696c6942,0x7261656e,0x706d6153,0x676e696c,0x61746144,0x00000000,0x00060006, + 0x00000056,0x00000000,0x66664f69,0x73746573,0x00000000,0x00060006,0x00000056,0x00000001, + 0x69655766,0x73746867,0x00000000,0x00060006,0x00000056,0x00000002,0x73614269,0x736f5065, + 0x00000000,0x000b0005,0x0000005a,0x42746547,0x6e696c69,0x53726165,0x6c706d61,0x44676e69, + 0x28617461,0x3b326676,0x3b326976,0x00000000,0x00030005,0x00000058,0x00765566,0x00040005, + 0x00000059,0x7a695369,0x00000065,0x000c0005,0x0000005d,0x766e6f43,0x46747265,0x446d6f72, + 0x63697665,0x70654465,0x6f546874,0x77656956,0x63617053,0x31662865,0x0000003b,0x00060005, + 0x0000005c,0x76654466,0x44656369,0x68747065,0x00000000,0x00070005,0x00000062,0x706d6f43, + 0x4e657475,0x76286364,0x763b3266,0x003b3269,0x00040005,0x00000060,0x50785066,0x0000736f, + 0x00040005,0x00000061,0x7a695369,0x00000065,0x000b0005,0x00000069,0x56746547,0x53776569, + 0x65636170,0x69736f50,0x6e6f6974,0x32697628,0x3269763b,0x3b31663b,0x00000000,0x00060005, + 0x00000066,0x65695669,0x726f7077,0x736f5074,0x00000000,0x00060005,0x00000067,0x65695669, + 0x726f7077,0x7a695374,0x00000065,0x00060005,0x00000068,0x76654466,0x44656369,0x68747065, + 0x00000000,0x00070005,0x0000006f,0x6e4f7349,0x65726353,0x76286e65,0x763b3269,0x003b3269, + 0x00030005,0x0000006d,0x00736f70,0x00040005,0x0000006e,0x657a6973,0x00000000,0x00060005, + 0x00000073,0x76557349,0x69736e49,0x76286564,0x003b3266,0x00030005,0x00000072,0x00765566, + 0x000b0005,0x00000077,0x6b636150,0x65566465,0x726f7463,0x6c656946,0x746e4564,0x73497972, + 0x6d697250,0x28797261,0x003b3175,0x00050005,0x00000076,0x6b636170,0x6e456465,0x00797274, + 0x00070005,0x00000079,0x74636556,0x6946726f,0x45646c65,0x7972746e,0x00000000,0x00070006, + 0x00000079,0x00000000,0x746f4d66,0x566e6f69,0x6f746365,0x00000072,0x00080006,0x00000079, + 0x00000001,0x67694875,0x69725068,0x7469726f,0x63614679,0x00726f74,0x00080006,0x00000079, + 0x00000002,0x776f4c75,0x6f697250,0x79746972,0x74636146,0x0000726f,0x00050006,0x00000079, + 0x00000003,0x6c615662,0x00006469,0x00060006,0x00000079,0x00000004,0x69725062,0x7972616d, + 0x00000000,0x00060006,0x00000079,0x00000005,0x63655362,0x61646e6f,0x00007972,0x00060006, + 0x00000079,0x00000006,0x506e4962,0x746e6961,0x00006465,0x00060006,0x00000079,0x00000007, + 0x6c655666,0x7469636f,0x00000079,0x00060006,0x00000079,0x00000008,0x67654e62,0x7374754f, + 0x00656469,0x00060006,0x00000079,0x00000009,0x736f5062,0x7374754f,0x00656469,0x00180005, + 0x0000007e,0x61706e55,0x65566b63,0x726f7463,0x6c656946,0x746e4564,0x73656972,0x32757628, + 0x7274733b,0x2d746375,0x74636556,0x6946726f,0x45646c65,0x7972746e,0x3266762d,0x2d31662d, + 0x622d3166,0x31622d31,0x2d31622d,0x662d3162,0x31622d31,0x3131622d,0x0000003b,0x00040005, + 0x0000007c,0x6b636170,0x00006465,0x00050005,0x0000007d,0x6c456676,0x6e656d65,0x00000074, + 0x000c0005,0x00000084,0x706d6f43,0x4d657475,0x706e4976,0x746e6961,0x4c676e69,0x6c657665, + 0x32667628,0x3b31693b,0x3b326976,0x00000000,0x00030005,0x00000081,0x00765566,0x00050005, + 0x00000082,0x70694d69,0x6576654c,0x0000006c,0x00050005,0x00000083,0x78655469,0x657a6953, + 0x00000000,0x00180005,0x00000089,0x64616f4c,0x61706e49,0x65746e69,0x6d614764,0x65694665, + 0x764d646c,0x32667628,0x7274733b,0x2d746375,0x74636556,0x6946726f,0x45646c65,0x7972746e, + 0x3266762d,0x2d31662d,0x622d3166,0x31622d31,0x2d31622d,0x662d3162,0x31622d31,0x3131622d, + 0x0000003b,0x00030005,0x00000087,0x00765566,0x00050005,0x00000088,0x6c456676,0x6e656d65, + 0x00000074,0x00090005,0x0000008e,0x64616f4c,0x69747345,0x6574616d,0x70654464,0x75286874, + 0x69763b31,0x00003b32,0x00060005,0x0000008c,0x69747365,0x6574616d,0x646e4964,0x00007865, + 0x00050005,0x0000008d,0x6d615369,0x50656c70,0x0000736f,0x00090005,0x00000094,0x706d6f43, + 0x44657475,0x68747065,0x70696c43,0x3b317528,0x3b326676,0x003b3166,0x00060005,0x00000091, + 0x69747365,0x6574616d,0x646e4964,0x00007865,0x00050005,0x00000092,0x53765566,0x6c706d61, + 0x00000065,0x00070005,0x00000093,0x72754366,0x746e6572,0x74706544,0x6d615368,0x00656c70, + 0x000a0005,0x00000098,0x706d6f63,0x44657475,0x636f7369,0x73756c63,0x4d6e6f69,0x286b7361, + 0x3b326976,0x00000000,0x00040005,0x00000097,0x50785069,0x0000736f,0x00040005,0x000000bb, + 0x49466263,0x0000745f,0x00060006,0x000000bb,0x00000000,0x646e6572,0x69537265,0x0000657a, + 0x00060006,0x000000bb,0x00000001,0x70736964,0x5379616c,0x00657a69,0x00070006,0x000000bb, + 0x00000002,0x70736964,0x5379616c,0x52657a69,0x00007063,0x00060006,0x000000bb,0x00000003, + 0x656d6163,0x654e6172,0x00007261,0x00060006,0x000000bb,0x00000004,0x656d6163,0x61466172, + 0x00000072,0x00080006,0x000000bb,0x00000005,0x63737075,0x72656c61,0x67726154,0x69537465, + 0x0000657a,0x00050006,0x000000bb,0x00000006,0x65646f4d,0x00000000,0x00050006,0x000000bb, + 0x00000007,0x65736572,0x00000074,0x00080006,0x000000bb,0x00000008,0x76654466,0x54656369, + 0x6569566f,0x70654477,0x00006874,0x00060006,0x000000bb,0x00000009,0x746c6564,0x6d695461, + 0x00000065,0x00090006,0x000000bb,0x0000000a,0x4c445548,0x41737365,0x63617474,0x46646568, + 0x6f746361,0x00000072,0x00080006,0x000000bb,0x0000000b,0x74736964,0x6974726f,0x69466e6f, + 0x53646c65,0x00657a69,0x00080006,0x000000bb,0x0000000c,0x6974706f,0x466c6163,0x53776f6c, + 0x656c6163,0x00000000,0x00090006,0x000000bb,0x0000000d,0x6974706f,0x466c6163,0x42776f6c, + 0x6b636f6c,0x657a6953,0x00000000,0x00070006,0x000000bb,0x0000000e,0x70736964,0x68637461, + 0x67616c46,0x00000073,0x00070006,0x000000bb,0x0000000f,0x5278616d,0x65646e65,0x7a695372, + 0x00000065,0x00090006,0x000000bb,0x00000010,0x6974706f,0x466c6163,0x48776f6c,0x52666c61, + 0x6f4d7365,0x00006564,0x00070006,0x000000bb,0x00000011,0x496d754e,0x6174736e,0x7365636e, + 0x00000000,0x00090006,0x000000bb,0x00000012,0x65746e69,0x6c6f7072,0x6f697461,0x6365526e, + 0x73614274,0x00000065,0x00090006,0x000000bb,0x00000013,0x65746e69,0x6c6f7072,0x6f697461, + 0x6365526e,0x7a695374,0x00000065,0x00070006,0x000000bb,0x00000014,0x75626564,0x72614267, + 0x6f6c6f43,0x00000072,0x000a0006,0x000000bb,0x00000015,0x6b636162,0x66667542,0x72547265, + 0x66736e61,0x75467265,0x6974636e,0x00006e6f,0x00070006,0x000000bb,0x00000016,0x4d6e696d, + 0x754c7861,0x616e696d,0x0065636e,0x00060006,0x000000bb,0x00000017,0x6e615466,0x666c6148, + 0x00564f46,0x00050006,0x000000bb,0x00000018,0x6461705f,0x00000031,0x00050006,0x000000bb, + 0x00000019,0x74694a66,0x00726574,0x00080006,0x000000bb,0x0000001a,0x746f4d66,0x566e6f69, + 0x6f746365,0x61635372,0x0000656c,0x00040005,0x000000bd,0x49466263,0x00000000,0x00060005, + 0x000000cc,0x69645f72,0x6574616c,0x65645f64,0x00687470,0x000c0005,0x000000d6,0x65725f72, + 0x736e6f63,0x63757274,0x5f646574,0x74706564,0x72705f68,0x6f697665,0x665f7375,0x656d6172, + 0x00000000,0x00040005,0x000000db,0x61726170,0x0000006d,0x000d0005,0x000000e0,0x65725f72, + 0x736e6f63,0x63757274,0x5f646574,0x74706564,0x6e695f68,0x70726574,0x74616c6f,0x665f6465, + 0x656d6172,0x00000000,0x00040005,0x000000e4,0x61726170,0x0000006d,0x00040005,0x000000e9, + 0x6b636170,0x00586465,0x000a0005,0x000000ea,0x61675f72,0x6d5f656d,0x6f69746f,0x65765f6e, + 0x726f7463,0x6569665f,0x785f646c,0x00000000,0x00040005,0x000000ef,0x6b636170,0x00596465, + 0x000a0005,0x000000f0,0x61675f72,0x6d5f656d,0x6f69746f,0x65765f6e,0x726f7463,0x6569665f, + 0x795f646c,0x00000000,0x00080005,0x000000fa,0x6e695f72,0x6e696170,0x676e6974,0x7279705f, + 0x64696d61,0x00000000,0x00090005,0x00000102,0x6e695f72,0x5f747570,0x74736964,0x6974726f, + 0x665f6e6f,0x646c6569,0x00000000,0x00060005,0x00000106,0x694c5f73,0x7261656e,0x6d616c43, + 0x00000070,0x00080005,0x00000111,0x645f7772,0x636f7369,0x73756c63,0x5f6e6f69,0x6b73616d, + 0x00000000,0x00050005,0x00000118,0x53785066,0x6c706d61,0x00000065,0x00040005,0x00000121, + 0x61746164,0x00000000,0x00040005,0x00000127,0x46785066,0x00636172,0x00040005,0x00000128, + 0x61726170,0x0000006d,0x00070005,0x00000156,0x69766564,0x6f546563,0x77656956,0x74706544, + 0x00000068,0x00070005,0x0000016e,0x76654466,0x54656369,0x6569566f,0x70654477,0x00006874, + 0x00030005,0x00000170,0x0000005a,0x00040005,0x00000171,0x61726170,0x0000006d,0x00040005, + 0x00000174,0x63644e66,0x00736f50,0x00040005,0x00000177,0x61726170,0x0000006d,0x00040005, + 0x00000178,0x61726170,0x0000006d,0x00030005,0x0000017b,0x00000058,0x00030005,0x00000184, + 0x00000059,0x00040005,0x000001ce,0x61726170,0x0000006d,0x00040005,0x000001ea,0x61726170, + 0x0000006d,0x00040005,0x000001f0,0x61726170,0x0000006d,0x00060005,0x000001f9,0x696c6962, + 0x7261656e,0x6f666e49,0x00000000,0x00040005,0x000001fa,0x61726170,0x0000006d,0x00040005, + 0x000001fc,0x61726170,0x0000006d,0x00040005,0x000001fe,0x6d755366,0x00000000,0x00040005, + 0x000001ff,0x6c6f4366,0x0000726f,0x00060005,0x00000202,0x6d615369,0x49656c70,0x7865646e, + 0x00000000,0x00040005,0x0000020a,0x66664f69,0x00746573,0x00050005,0x0000020e,0x6d615369, + 0x50656c70,0x0000736f,0x00040005,0x00000213,0x61726170,0x0000006d,0x00040005,0x00000215, + 0x61726170,0x0000006d,0x00040005,0x00000219,0x6d615366,0x00656c70,0x00040005,0x0000021c, + 0x61726170,0x0000006d,0x00040005,0x0000021d,0x61726170,0x0000006d,0x00060005,0x0000021f, + 0x69725066,0x7469726f,0x63614679,0x00726f74,0x00060005,0x00000222,0x6c615666,0x764d6469, + 0x74636146,0x0000726f,0x00060005,0x00000227,0x6d615366,0x57656c70,0x68676965,0x00000074, + 0x00050005,0x00000243,0x53785069,0x6c706d61,0x00000065,0x00070005,0x00000249,0x6b636170, + 0x61476465,0x6946656d,0x4d646c65,0x00000076,0x00040005,0x0000024a,0x61726170,0x0000006d, + 0x00040005,0x0000024d,0x61726170,0x0000006d,0x00040005,0x0000024f,0x61726170,0x0000006d, + 0x00050005,0x00000257,0x78655469,0x657a6953,0x00000000,0x00070005,0x00000259,0x506e4966, + 0x746e6961,0x65566465,0x726f7463,0x00000000,0x00050005,0x0000025a,0x70694d69,0x6576654c, + 0x0000006c,0x00040005,0x0000026e,0x61726170,0x0000006d,0x00040005,0x00000282,0x61726170, + 0x0000006d,0x00040005,0x0000028b,0x61726170,0x0000006d,0x00030005,0x00000294,0x00765566, + 0x00070005,0x0000029c,0x73694466,0x74726f74,0x466e6f69,0x646c6569,0x00007655,0x00040005, + 0x0000029d,0x61726170,0x0000006d,0x00080005,0x000002a0,0x73694469,0x74726f74,0x506e6f69, + 0x6c657869,0x7366664f,0x00007465,0x00040005,0x000002ad,0x61726170,0x0000006d,0x00040005, + 0x000002b8,0x61726170,0x0000006d,0x00080005,0x000002bd,0x72754366,0x746e6572,0x74706544, + 0x65695668,0x61705377,0x00006563,0x00040005,0x000002be,0x61726170,0x0000006d,0x00060005, + 0x000002c1,0x696c6962,0x7261656e,0x6f666e49,0x00000000,0x00040005,0x000002c3,0x61726170, + 0x0000006d,0x00040005,0x000002c5,0x61726170,0x0000006d,0x00050005,0x000002c7,0x6c694466, + 0x64657461,0x006d7553,0x00040005,0x000002c8,0x70654466,0x00006874,0x00050005,0x000002c9, + 0x69655766,0x53746867,0x00006d75,0x00060005,0x000002ca,0x6d615369,0x49656c70,0x7865646e, + 0x00000000,0x00040005,0x000002d2,0x66664f69,0x00746573,0x00050005,0x000002d6,0x6d615369, + 0x50656c70,0x0000736f,0x00040005,0x000002dc,0x61726170,0x0000006d,0x00040005,0x000002de, + 0x61726170,0x0000006d,0x00040005,0x000002e2,0x69655766,0x00746867,0x00070005,0x000002eb, + 0x65725066,0x70654476,0x61536874,0x656c706d,0x00000000,0x00040005,0x000002ec,0x61726170, + 0x0000006d,0x00040005,0x000002ee,0x61726170,0x0000006d,0x00090005,0x000002f1,0x65725066, + 0x61654e76,0x74736572,0x74706544,0x65695668,0x61705377,0x00006563,0x00040005,0x000002f2, + 0x61726170,0x0000006d,0x00050005,0x000002f5,0x70654466,0x69446874,0x00006666,0x00050005, + 0x000002fd,0x616c5066,0x6544656e,0x00687470,0x00040005,0x000002fe,0x61726170,0x0000006d, + 0x00040005,0x00000300,0x61726170,0x0000006d,0x00040005,0x00000304,0x6e654366,0x00726574, + 0x00040005,0x0000030a,0x61726170,0x0000006d,0x00040005,0x0000030b,0x61726170,0x0000006d, + 0x00040005,0x0000030c,0x61726170,0x0000006d,0x00040005,0x0000030f,0x726f4366,0x0072656e, + 0x00040005,0x00000311,0x61726170,0x0000006d,0x00040005,0x00000312,0x61726170,0x0000006d, + 0x00040005,0x00000313,0x61726170,0x0000006d,0x00070005,0x00000316,0x6c614866,0x65695666, + 0x726f7077,0x64695774,0x00006874,0x00060005,0x0000031a,0x70654466,0x68546874,0x68736572, + 0x00646c6f,0x00040005,0x0000031b,0x61726170,0x0000006d,0x00040005,0x0000031d,0x61726170, + 0x0000006d,0x00040005,0x00000320,0x766f664b,0x00000000,0x00090005,0x00000326,0x71655266, + 0x65726975,0x70654464,0x65536874,0x61726170,0x6e6f6974,0x00000000,0x00070005,0x0000032e, + 0x73655266,0x74756c6f,0x466e6f69,0x6f746361,0x00000072,0x00040005,0x00000334,0x61726170, + 0x0000006d,0x00040005,0x00000336,0x776f5066,0x00007265,0x00040005,0x00000338,0x61726170, + 0x0000006d,0x00040005,0x00000339,0x61726170,0x0000006d,0x00040005,0x0000033a,0x61726170, + 0x0000006d,0x00040005,0x00000354,0x61726170,0x0000006d,0x00060005,0x0000035a,0x6c694466, + 0x64657461,0x74706544,0x00000068,0x00040005,0x0000035b,0x61726170,0x0000006d,0x00050005, + 0x0000035e,0x70654466,0x76556874,0x00000000,0x00080005,0x00000366,0x72754366,0x746e6572, + 0x74706544,0x65695668,0x61705377,0x00006563,0x00040005,0x00000367,0x61726170,0x0000006d, + 0x00040005,0x0000036a,0x656d6167,0x0000764d,0x00040005,0x0000036b,0x61726170,0x0000006d, + 0x00040005,0x0000036d,0x61726170,0x0000006d,0x000b0005,0x00000370,0x70654466,0x6c436874, + 0x6e497069,0x70726574,0x74616c6f,0x6f546465,0x76657250,0x73756f69,0x00000000,0x00040005, + 0x00000375,0x61726170,0x0000006d,0x00040005,0x00000376,0x61726170,0x0000006d,0x00040005, + 0x00000377,0x61726170,0x0000006d,0x000a0005,0x0000037b,0x70654466,0x6c436874,0x6e497069, + 0x70726574,0x74616c6f,0x6f546465,0x72727543,0x00746e65,0x00040005,0x00000380,0x61726170, + 0x0000006d,0x00040005,0x00000381,0x61726170,0x0000006d,0x00040005,0x00000382,0x61726170, + 0x0000006d,0x00070005,0x00000386,0x73694466,0x6c63636f,0x6f697375,0x73614d6e,0x0000006b, + 0x00040005,0x0000038b,0x61726170,0x0000006d,0x00070005,0x00000391,0x63725366,0x69746f4d, + 0x65566e6f,0x726f7463,0x00000000,0x00070005,0x00000395,0x6d615369,0x50656c70,0x7250736f, + 0x6f697665,0x00007375,0x00040005,0x000003a0,0x61726170,0x0000006d,0x00040005,0x000003a2, + 0x61726170,0x0000006d,0x00040005,0x000003a7,0x61726170,0x0000006d,0x00070005,0x000003aa, + 0x6d615369,0x50656c70,0x7543736f,0x6e657272,0x00000074,0x00040005,0x000003b5,0x61726170, + 0x0000006d,0x00040005,0x000003b7,0x61726170,0x0000006d,0x00040005,0x000003bc,0x61726170, + 0x0000006d,0x00040005,0x000003bf,0x61726170,0x0000006d,0x00040005,0x000003c1,0x61726170, + 0x0000006d,0x00080005,0x000003c6,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69, + 0x00000044,0x00040005,0x000003ca,0x61726170,0x0000006d,0x00030047,0x000000bb,0x00000002, + 0x00050048,0x000000bb,0x00000000,0x00000023,0x00000000,0x00050048,0x000000bb,0x00000001, + 0x00000023,0x00000008,0x00050048,0x000000bb,0x00000002,0x00000023,0x00000010,0x00050048, + 0x000000bb,0x00000003,0x00000023,0x00000018,0x00050048,0x000000bb,0x00000004,0x00000023, + 0x0000001c,0x00050048,0x000000bb,0x00000005,0x00000023,0x00000020,0x00050048,0x000000bb, + 0x00000006,0x00000023,0x00000028,0x00050048,0x000000bb,0x00000007,0x00000023,0x0000002c, + 0x00050048,0x000000bb,0x00000008,0x00000023,0x00000030,0x00050048,0x000000bb,0x00000009, + 0x00000023,0x00000040,0x00050048,0x000000bb,0x0000000a,0x00000023,0x00000044,0x00050048, + 0x000000bb,0x0000000b,0x00000023,0x00000048,0x00050048,0x000000bb,0x0000000c,0x00000023, + 0x00000050,0x00050048,0x000000bb,0x0000000d,0x00000023,0x00000058,0x00050048,0x000000bb, + 0x0000000e,0x00000023,0x0000005c,0x00050048,0x000000bb,0x0000000f,0x00000023,0x00000060, + 0x00050048,0x000000bb,0x00000010,0x00000023,0x00000068,0x00050048,0x000000bb,0x00000011, + 0x00000023,0x0000006c,0x00050048,0x000000bb,0x00000012,0x00000023,0x00000070,0x00050048, + 0x000000bb,0x00000013,0x00000023,0x00000078,0x00050048,0x000000bb,0x00000014,0x00000023, + 0x00000080,0x00050048,0x000000bb,0x00000015,0x00000023,0x0000008c,0x00050048,0x000000bb, + 0x00000016,0x00000023,0x00000090,0x00050048,0x000000bb,0x00000017,0x00000023,0x00000098, + 0x00050048,0x000000bb,0x00000018,0x00000023,0x0000009c,0x00050048,0x000000bb,0x00000019, + 0x00000023,0x000000a0,0x00050048,0x000000bb,0x0000001a,0x00000023,0x000000a8,0x00040047, + 0x000000bd,0x00000021,0x00000008,0x00040047,0x000000bd,0x00000022,0x00000000,0x00040047, + 0x000000cc,0x00000021,0x00000003,0x00040047,0x000000cc,0x00000022,0x00000000,0x00040047, + 0x000000d6,0x00000021,0x00000002,0x00040047,0x000000d6,0x00000022,0x00000000,0x00040047, + 0x000000e0,0x00000021,0x00000004,0x00040047,0x000000e0,0x00000022,0x00000000,0x00040047, + 0x000000ea,0x00000021,0x00000000,0x00040047,0x000000ea,0x00000022,0x00000000,0x00040047, + 0x000000f0,0x00000021,0x00000001,0x00040047,0x000000f0,0x00000022,0x00000000,0x00040047, + 0x000000fa,0x00000021,0x00000005,0x00040047,0x000000fa,0x00000022,0x00000000,0x00040047, + 0x00000102,0x00000021,0x00000006,0x00040047,0x00000102,0x00000022,0x00000000,0x00040047, + 0x00000106,0x00000021,0x000003e8,0x00040047,0x00000106,0x00000022,0x00000000,0x00040047, + 0x00000111,0x00000021,0x00000007,0x00040047,0x00000111,0x00000022,0x00000000,0x00040047, + 0x000003c6,0x0000000b,0x0000001c,0x00040047,0x000003d5,0x0000000b,0x00000019,0x00020013, + 0x00000002,0x00030021,0x00000003,0x00000002,0x00040015,0x00000006,0x00000020,0x00000000, + 0x00040020,0x00000007,0x00000007,0x00000006,0x00030016,0x00000008,0x00000020,0x00040021, + 0x00000009,0x00000008,0x00000007,0x00040020,0x0000000d,0x00000007,0x00000008,0x00040017, + 0x0000000e,0x00000008,0x00000002,0x00040021,0x0000000f,0x0000000e,0x0000000d,0x00060021, + 0x00000013,0x00000008,0x0000000d,0x0000000d,0x0000000d,0x00040021,0x00000019,0x00000008, + 0x0000000d,0x00040020,0x0000001d,0x00000007,0x0000000e,0x00040021,0x0000001e,0x0000000e, + 0x0000001d,0x00040021,0x00000022,0x0000000e,0x00000007,0x00050021,0x00000026,0x00000008, + 0x0000000d,0x0000000d,0x00040015,0x0000002b,0x00000020,0x00000001,0x00040017,0x0000002c, + 0x0000002b,0x00000002,0x00030021,0x0000002d,0x0000002c,0x00040017,0x00000030,0x00000008, + 0x00000004,0x00030021,0x00000031,0x00000030,0x00040020,0x00000034,0x00000007,0x0000002c, + 0x00040021,0x00000035,0x00000008,0x00000034,0x00040017,0x0000003f,0x00000006,0x00000002, + 0x00040021,0x00000040,0x0000003f,0x00000034,0x00040020,0x00000044,0x00000007,0x0000002b, + 0x00040020,0x00000045,0x00000007,0x0000003f,0x00050021,0x00000046,0x00000030,0x00000044, + 0x00000045,0x00050021,0x0000004e,0x00000002,0x00000034,0x0000001d,0x0004002b,0x00000006, + 0x00000053,0x00000004,0x0004001c,0x00000054,0x0000002c,0x00000053,0x0004001c,0x00000055, + 0x00000008,0x00000053,0x0005001e,0x00000056,0x00000054,0x00000055,0x0000002c,0x00050021, + 0x00000057,0x00000056,0x0000001d,0x00000034,0x00050021,0x0000005f,0x0000000e,0x0000001d, + 0x00000034,0x00040017,0x00000064,0x00000008,0x00000003,0x00060021,0x00000065,0x00000064, + 0x00000034,0x00000034,0x0000000d,0x00020014,0x0000006b,0x00050021,0x0000006c,0x0000006b, + 0x00000034,0x00000034,0x00040021,0x00000071,0x0000006b,0x0000001d,0x00040021,0x00000075, + 0x0000006b,0x00000007,0x000c001e,0x00000079,0x0000000e,0x00000008,0x00000008,0x0000006b, + 0x0000006b,0x0000006b,0x0000006b,0x00000008,0x0000006b,0x0000006b,0x00040020,0x0000007a, + 0x00000007,0x00000079,0x00050021,0x0000007b,0x00000002,0x00000045,0x0000007a,0x00060021, + 0x00000080,0x00000030,0x0000001d,0x0000002b,0x0000002c,0x00050021,0x00000086,0x00000002, + 0x0000001d,0x0000007a,0x00050021,0x0000008b,0x00000008,0x00000007,0x00000034,0x00060021, + 0x00000090,0x00000008,0x00000007,0x0000001d,0x0000000d,0x00040021,0x00000096,0x00000002, + 0x00000034,0x0004002b,0x00000008,0x000000a9,0x00000000,0x0004002b,0x00000008,0x000000aa, + 0x3f800000,0x001d001e,0x000000bb,0x0000002c,0x0000002c,0x0000000e,0x00000008,0x00000008, + 0x0000002c,0x0000002b,0x0000002b,0x00000030,0x00000008,0x0000002b,0x0000002c,0x0000000e, + 0x0000002b,0x00000006,0x0000002c,0x0000002b,0x0000002b,0x0000002c,0x0000002c,0x00000064, + 0x00000006,0x0000000e,0x00000008,0x0000002b,0x0000000e,0x0000000e,0x00040020,0x000000bc, + 0x00000002,0x000000bb,0x0004003b,0x000000bc,0x000000bd,0x00000002,0x0004002b,0x0000002b, + 0x000000be,0x00000000,0x00040020,0x000000bf,0x00000002,0x0000002c,0x0004002b,0x0000002b, + 0x000000c4,0x00000008,0x00040020,0x000000c5,0x00000002,0x00000030,0x00090019,0x000000ca, + 0x00000008,0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x00040020, + 0x000000cb,0x00000000,0x000000ca,0x0004003b,0x000000cb,0x000000cc,0x00000000,0x0004002b, + 0x00000006,0x000000d0,0x00000000,0x00090019,0x000000d4,0x00000006,0x00000001,0x00000000, + 0x00000000,0x00000000,0x00000001,0x00000000,0x00040020,0x000000d5,0x00000000,0x000000d4, + 0x0004003b,0x000000d5,0x000000d6,0x00000000,0x00040017,0x000000d9,0x00000006,0x00000004, + 0x0004003b,0x000000d5,0x000000e0,0x00000000,0x0004003b,0x000000d5,0x000000ea,0x00000000, + 0x0004003b,0x000000d5,0x000000f0,0x00000000,0x0004003b,0x000000cb,0x000000fa,0x00000000, + 0x0004003b,0x000000cb,0x00000102,0x00000000,0x0002001a,0x00000104,0x00040020,0x00000105, + 0x00000000,0x00000104,0x0004003b,0x00000105,0x00000106,0x00000000,0x0003001b,0x00000108, + 0x000000ca,0x00090019,0x0000010f,0x00000008,0x00000001,0x00000000,0x00000000,0x00000000, + 0x00000002,0x0000000d,0x00040020,0x00000110,0x00000000,0x0000010f,0x0004003b,0x00000110, + 0x00000111,0x00000000,0x0004002b,0x00000008,0x0000011d,0x3f000000,0x0005002c,0x0000000e, + 0x0000011e,0x0000011d,0x0000011d,0x00040020,0x00000120,0x00000007,0x00000056,0x0004002b, + 0x0000002b,0x00000122,0x00000002,0x0005002c,0x0000002c,0x0000012b,0x000000be,0x000000be, + 0x0004002b,0x0000002b,0x0000012d,0x00000001,0x0005002c,0x0000002c,0x0000012e,0x0000012d, + 0x000000be,0x0005002c,0x0000002c,0x00000130,0x000000be,0x0000012d,0x0004002b,0x0000002b, + 0x00000132,0x00000003,0x0005002c,0x0000002c,0x00000133,0x0000012d,0x0000012d,0x0004002b, + 0x00000006,0x00000138,0x00000001,0x00040020,0x00000155,0x00000007,0x00000030,0x0004002b, + 0x00000008,0x00000165,0x40000000,0x0004002b,0x00000008,0x00000166,0xc0000000,0x0005002c, + 0x0000000e,0x00000167,0x00000165,0x00000166,0x0004002b,0x00000008,0x00000169,0xbf800000, + 0x0005002c,0x0000000e,0x0000016a,0x00000169,0x000000aa,0x0004002b,0x00000006,0x0000017c, + 0x00000002,0x0004002b,0x00000006,0x00000185,0x00000003,0x00040017,0x00000197,0x0000006b, + 0x00000002,0x0004002b,0x00000006,0x000001b4,0x80000000,0x0004002b,0x00000006,0x000001bb, + 0x00000015,0x0004002b,0x00000006,0x000001bd,0x000003ff,0x0004002b,0x00000008,0x000001c0, + 0x447fc000,0x0004002b,0x00000006,0x000001c5,0x00000010,0x0004002b,0x00000006,0x000001c7, + 0x0000001f,0x0004002b,0x00000008,0x000001ca,0x41f80000,0x0004002b,0x0000002b,0x000001cd, + 0x00000004,0x00040020,0x000001d2,0x00000007,0x0000006b,0x0004002b,0x0000002b,0x000001d8, + 0x00000005,0x0004002b,0x0000002b,0x000001f6,0x00000006,0x0003002a,0x0000006b,0x000001f7, + 0x0007002c,0x00000030,0x00000200,0x000000a9,0x000000a9,0x000000a9,0x000000a9,0x0004002b, + 0x0000002b,0x00000261,0x0000000b,0x00030029,0x0000006b,0x0000027c,0x0004002b,0x0000002b, + 0x00000286,0x00000009,0x0004002b,0x0000002b,0x0000028f,0x00000007,0x0004002b,0x00000008, + 0x000002e7,0x3a83126f,0x00040020,0x00000303,0x00000007,0x00000064,0x0004002b,0x00000008, + 0x00000327,0x3765d90d,0x0004002b,0x00000008,0x00000332,0x4509ae84,0x0004002b,0x00000008, + 0x00000337,0x40400000,0x0005002c,0x0000000e,0x0000038e,0x000000a9,0x000000a9,0x0005002c, + 0x0000000e,0x0000038f,0x000000aa,0x000000aa,0x00040017,0x000003c4,0x00000006,0x00000003, + 0x00040020,0x000003c5,0x00000001,0x000003c4,0x0004003b,0x000003c5,0x000003c6,0x00000001, + 0x0004002b,0x00000008,0x000003cc,0x387fda40,0x0004002b,0x00000008,0x000003cd,0x477fe000, + 0x0004002b,0x00000008,0x000003ce,0x37801002,0x0004002b,0x00000008,0x000003cf,0x7f7fffff, + 0x0004002b,0x00000008,0x000003d0,0x00800000,0x0004002b,0x00000006,0x000003d1,0x00000020, + 0x0004002b,0x00000006,0x000003d2,0x00000005,0x0004002b,0x00000006,0x000003d3,0x0000000a, + 0x0004002b,0x00000006,0x000003d4,0x00000008,0x0006002c,0x000003c4,0x000003d5,0x000003d4, + 0x000003d4,0x00000138,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8, + 0x00000005,0x0004003b,0x00000034,0x000003ca,0x00000007,0x0004003d,0x000003c4,0x000003c7, + 0x000003c6,0x0007004f,0x0000003f,0x000003c8,0x000003c7,0x000003c7,0x00000000,0x00000001, + 0x0004007c,0x0000002c,0x000003c9,0x000003c8,0x0003003e,0x000003ca,0x000003c9,0x00050039, + 0x00000002,0x000003cb,0x00000098,0x000003ca,0x000100fd,0x00010038,0x00050036,0x00000008, + 0x0000000b,0x00000000,0x00000009,0x00030037,0x00000007,0x0000000a,0x000200f8,0x0000000c, + 0x0004003d,0x00000006,0x0000009a,0x0000000a,0x0004007c,0x00000008,0x0000009b,0x0000009a, + 0x000200fe,0x0000009b,0x00010038,0x00050036,0x0000000e,0x00000011,0x00000000,0x0000000f, + 0x00030037,0x0000000d,0x00000010,0x000200f8,0x00000012,0x0004003d,0x00000008,0x0000009e, + 0x00000010,0x00050050,0x0000000e,0x0000009f,0x0000009e,0x0000009e,0x000200fe,0x0000009f, + 0x00010038,0x00050036,0x00000008,0x00000017,0x00000000,0x00000013,0x00030037,0x0000000d, + 0x00000014,0x00030037,0x0000000d,0x00000015,0x00030037,0x0000000d,0x00000016,0x000200f8, + 0x00000018,0x0004003d,0x00000008,0x000000a2,0x00000014,0x0004003d,0x00000008,0x000000a3, + 0x00000015,0x0004003d,0x00000008,0x000000a4,0x00000016,0x0008000c,0x00000008,0x000000a5, + 0x00000001,0x0000002e,0x000000a2,0x000000a3,0x000000a4,0x000200fe,0x000000a5,0x00010038, + 0x00050036,0x00000008,0x0000001b,0x00000000,0x00000019,0x00030037,0x0000000d,0x0000001a, + 0x000200f8,0x0000001c,0x0004003d,0x00000008,0x000000a8,0x0000001a,0x0008000c,0x00000008, + 0x000000ab,0x00000001,0x0000002b,0x000000a8,0x000000a9,0x000000aa,0x000200fe,0x000000ab, + 0x00010038,0x00050036,0x0000000e,0x00000020,0x00000000,0x0000001e,0x00030037,0x0000001d, + 0x0000001f,0x000200f8,0x00000021,0x0004003d,0x0000000e,0x000000ae,0x0000001f,0x0006000c, + 0x0000000e,0x000000af,0x00000001,0x0000000a,0x000000ae,0x000200fe,0x000000af,0x00010038, + 0x00050036,0x0000000e,0x00000024,0x00000000,0x00000022,0x00030037,0x00000007,0x00000023, + 0x000200f8,0x00000025,0x0004003d,0x00000006,0x000000b2,0x00000023,0x0006000c,0x0000000e, + 0x000000b3,0x00000001,0x0000003e,0x000000b2,0x000200fe,0x000000b3,0x00010038,0x00050036, + 0x00000008,0x00000029,0x00000000,0x00000026,0x00030037,0x0000000d,0x00000027,0x00030037, + 0x0000000d,0x00000028,0x000200f8,0x0000002a,0x0004003d,0x00000008,0x000000b6,0x00000027, + 0x0004003d,0x00000008,0x000000b7,0x00000028,0x0007000c,0x00000008,0x000000b8,0x00000001, + 0x00000025,0x000000b6,0x000000b7,0x000200fe,0x000000b8,0x00010038,0x00050036,0x0000002c, + 0x0000002e,0x00000000,0x0000002d,0x000200f8,0x0000002f,0x00050041,0x000000bf,0x000000c0, + 0x000000bd,0x000000be,0x0004003d,0x0000002c,0x000000c1,0x000000c0,0x000200fe,0x000000c1, + 0x00010038,0x00050036,0x00000030,0x00000032,0x00000000,0x00000031,0x000200f8,0x00000033, + 0x00050041,0x000000c5,0x000000c6,0x000000bd,0x000000c4,0x0004003d,0x00000030,0x000000c7, + 0x000000c6,0x000200fe,0x000000c7,0x00010038,0x00050036,0x00000008,0x00000037,0x00000000, + 0x00000035,0x00030037,0x00000034,0x00000036,0x000200f8,0x00000038,0x0004003d,0x000000ca, + 0x000000cd,0x000000cc,0x0004003d,0x0000002c,0x000000ce,0x00000036,0x0007005f,0x00000030, + 0x000000cf,0x000000cd,0x000000ce,0x00000002,0x000000be,0x00050051,0x00000008,0x000000d1, + 0x000000cf,0x00000000,0x000200fe,0x000000d1,0x00010038,0x00050036,0x00000008,0x0000003a, + 0x00000000,0x00000035,0x00030037,0x00000034,0x00000039,0x000200f8,0x0000003b,0x0004003b, + 0x00000007,0x000000db,0x00000007,0x0004003d,0x000000d4,0x000000d7,0x000000d6,0x0004003d, + 0x0000002c,0x000000d8,0x00000039,0x0007005f,0x000000d9,0x000000da,0x000000d7,0x000000d8, + 0x00000002,0x000000be,0x00050051,0x00000006,0x000000dc,0x000000da,0x00000000,0x0003003e, + 0x000000db,0x000000dc,0x00050039,0x00000008,0x000000dd,0x0000000b,0x000000db,0x000200fe, + 0x000000dd,0x00010038,0x00050036,0x00000008,0x0000003d,0x00000000,0x00000035,0x00030037, + 0x00000034,0x0000003c,0x000200f8,0x0000003e,0x0004003b,0x00000007,0x000000e4,0x00000007, + 0x0004003d,0x000000d4,0x000000e1,0x000000e0,0x0004003d,0x0000002c,0x000000e2,0x0000003c, + 0x0007005f,0x000000d9,0x000000e3,0x000000e1,0x000000e2,0x00000002,0x000000be,0x00050051, + 0x00000006,0x000000e5,0x000000e3,0x00000000,0x0003003e,0x000000e4,0x000000e5,0x00050039, + 0x00000008,0x000000e6,0x0000000b,0x000000e4,0x000200fe,0x000000e6,0x00010038,0x00050036, + 0x0000003f,0x00000042,0x00000000,0x00000040,0x00030037,0x00000034,0x00000041,0x000200f8, + 0x00000043,0x0004003b,0x00000007,0x000000e9,0x00000007,0x0004003b,0x00000007,0x000000ef, + 0x00000007,0x0004003d,0x000000d4,0x000000eb,0x000000ea,0x0004003d,0x0000002c,0x000000ec, + 0x00000041,0x0007005f,0x000000d9,0x000000ed,0x000000eb,0x000000ec,0x00000002,0x000000be, + 0x00050051,0x00000006,0x000000ee,0x000000ed,0x00000000,0x0003003e,0x000000e9,0x000000ee, + 0x0004003d,0x000000d4,0x000000f1,0x000000f0,0x0004003d,0x0000002c,0x000000f2,0x00000041, + 0x0007005f,0x000000d9,0x000000f3,0x000000f1,0x000000f2,0x00000002,0x000000be,0x00050051, + 0x00000006,0x000000f4,0x000000f3,0x00000000,0x0003003e,0x000000ef,0x000000f4,0x0004003d, + 0x00000006,0x000000f5,0x000000e9,0x0004003d,0x00000006,0x000000f6,0x000000ef,0x00050050, + 0x0000003f,0x000000f7,0x000000f5,0x000000f6,0x000200fe,0x000000f7,0x00010038,0x00050036, + 0x00000030,0x00000049,0x00000000,0x00000046,0x00030037,0x00000044,0x00000047,0x00030037, + 0x00000045,0x00000048,0x000200f8,0x0000004a,0x0004003d,0x000000ca,0x000000fb,0x000000fa, + 0x0004003d,0x0000003f,0x000000fc,0x00000048,0x0004007c,0x0000002c,0x000000fd,0x000000fc, + 0x0004003d,0x0000002b,0x000000fe,0x00000047,0x0007005f,0x00000030,0x000000ff,0x000000fb, + 0x000000fd,0x00000002,0x000000fe,0x000200fe,0x000000ff,0x00010038,0x00050036,0x0000000e, + 0x0000004c,0x00000000,0x0000001e,0x00030037,0x0000001d,0x0000004b,0x000200f8,0x0000004d, + 0x0004003d,0x000000ca,0x00000103,0x00000102,0x0004003d,0x00000104,0x00000107,0x00000106, + 0x00050056,0x00000108,0x00000109,0x00000103,0x00000107,0x0004003d,0x0000000e,0x0000010a, + 0x0000004b,0x00070058,0x00000030,0x0000010b,0x00000109,0x0000010a,0x00000002,0x000000a9, + 0x0007004f,0x0000000e,0x0000010c,0x0000010b,0x0000010b,0x00000000,0x00000001,0x000200fe, + 0x0000010c,0x00010038,0x00050036,0x00000002,0x00000051,0x00000000,0x0000004e,0x00030037, + 0x00000034,0x0000004f,0x00030037,0x0000001d,0x00000050,0x000200f8,0x00000052,0x0004003d, + 0x0000010f,0x00000112,0x00000111,0x0004003d,0x0000002c,0x00000113,0x0000004f,0x0004003d, + 0x0000000e,0x00000114,0x00000050,0x00050051,0x00000008,0x00000115,0x00000114,0x00000000, + 0x00050051,0x00000008,0x00000116,0x00000114,0x00000001,0x00070050,0x00000030,0x00000117, + 0x00000115,0x00000116,0x000000a9,0x000000a9,0x00040063,0x00000112,0x00000113,0x00000117, + 0x000100fd,0x00010038,0x00050036,0x00000056,0x0000005a,0x00000000,0x00000057,0x00030037, + 0x0000001d,0x00000058,0x00030037,0x00000034,0x00000059,0x000200f8,0x0000005b,0x0004003b, + 0x0000001d,0x00000118,0x00000007,0x0004003b,0x00000120,0x00000121,0x00000007,0x0004003b, + 0x0000001d,0x00000127,0x00000007,0x0004003b,0x0000001d,0x00000128,0x00000007,0x0004003d, + 0x0000000e,0x00000119,0x00000058,0x0004003d,0x0000002c,0x0000011a,0x00000059,0x0004006f, + 0x0000000e,0x0000011b,0x0000011a,0x00050085,0x0000000e,0x0000011c,0x00000119,0x0000011b, + 0x00050083,0x0000000e,0x0000011f,0x0000011c,0x0000011e,0x0003003e,0x00000118,0x0000011f, + 0x0004003d,0x0000000e,0x00000123,0x00000118,0x0006000c,0x0000000e,0x00000124,0x00000001, + 0x00000008,0x00000123,0x0004006e,0x0000002c,0x00000125,0x00000124,0x00050041,0x00000034, + 0x00000126,0x00000121,0x00000122,0x0003003e,0x00000126,0x00000125,0x0004003d,0x0000000e, + 0x00000129,0x00000118,0x0003003e,0x00000128,0x00000129,0x00050039,0x0000000e,0x0000012a, + 0x00000020,0x00000128,0x0003003e,0x00000127,0x0000012a,0x00060041,0x00000034,0x0000012c, + 0x00000121,0x000000be,0x000000be,0x0003003e,0x0000012c,0x0000012b,0x00060041,0x00000034, + 0x0000012f,0x00000121,0x000000be,0x0000012d,0x0003003e,0x0000012f,0x0000012e,0x00060041, + 0x00000034,0x00000131,0x00000121,0x000000be,0x00000122,0x0003003e,0x00000131,0x00000130, + 0x00060041,0x00000034,0x00000134,0x00000121,0x000000be,0x00000132,0x0003003e,0x00000134, + 0x00000133,0x00050041,0x0000000d,0x00000135,0x00000127,0x000000d0,0x0004003d,0x00000008, + 0x00000136,0x00000135,0x00050083,0x00000008,0x00000137,0x000000aa,0x00000136,0x00050041, + 0x0000000d,0x00000139,0x00000127,0x00000138,0x0004003d,0x00000008,0x0000013a,0x00000139, + 0x00050083,0x00000008,0x0000013b,0x000000aa,0x0000013a,0x00050085,0x00000008,0x0000013c, + 0x00000137,0x0000013b,0x00060041,0x0000000d,0x0000013d,0x00000121,0x0000012d,0x000000be, + 0x0003003e,0x0000013d,0x0000013c,0x00050041,0x0000000d,0x0000013e,0x00000127,0x000000d0, + 0x0004003d,0x00000008,0x0000013f,0x0000013e,0x00050041,0x0000000d,0x00000140,0x00000127, + 0x00000138,0x0004003d,0x00000008,0x00000141,0x00000140,0x00050083,0x00000008,0x00000142, + 0x000000aa,0x00000141,0x00050085,0x00000008,0x00000143,0x0000013f,0x00000142,0x00060041, + 0x0000000d,0x00000144,0x00000121,0x0000012d,0x0000012d,0x0003003e,0x00000144,0x00000143, + 0x00050041,0x0000000d,0x00000145,0x00000127,0x000000d0,0x0004003d,0x00000008,0x00000146, + 0x00000145,0x00050083,0x00000008,0x00000147,0x000000aa,0x00000146,0x00050041,0x0000000d, + 0x00000148,0x00000127,0x00000138,0x0004003d,0x00000008,0x00000149,0x00000148,0x00050085, + 0x00000008,0x0000014a,0x00000147,0x00000149,0x00060041,0x0000000d,0x0000014b,0x00000121, + 0x0000012d,0x00000122,0x0003003e,0x0000014b,0x0000014a,0x00050041,0x0000000d,0x0000014c, + 0x00000127,0x000000d0,0x0004003d,0x00000008,0x0000014d,0x0000014c,0x00050041,0x0000000d, + 0x0000014e,0x00000127,0x00000138,0x0004003d,0x00000008,0x0000014f,0x0000014e,0x00050085, + 0x00000008,0x00000150,0x0000014d,0x0000014f,0x00060041,0x0000000d,0x00000151,0x00000121, + 0x0000012d,0x00000132,0x0003003e,0x00000151,0x00000150,0x0004003d,0x00000056,0x00000152, + 0x00000121,0x000200fe,0x00000152,0x00010038,0x00050036,0x00000008,0x0000005d,0x00000000, + 0x00000019,0x00030037,0x0000000d,0x0000005c,0x000200f8,0x0000005e,0x0004003b,0x00000155, + 0x00000156,0x00000007,0x00040039,0x00000030,0x00000157,0x00000032,0x0003003e,0x00000156, + 0x00000157,0x00050041,0x0000000d,0x00000158,0x00000156,0x00000138,0x0004003d,0x00000008, + 0x00000159,0x00000158,0x0004003d,0x00000008,0x0000015a,0x0000005c,0x00050041,0x0000000d, + 0x0000015b,0x00000156,0x000000d0,0x0004003d,0x00000008,0x0000015c,0x0000015b,0x00050083, + 0x00000008,0x0000015d,0x0000015a,0x0000015c,0x00050088,0x00000008,0x0000015e,0x00000159, + 0x0000015d,0x000200fe,0x0000015e,0x00010038,0x00050036,0x0000000e,0x00000062,0x00000000, + 0x0000005f,0x00030037,0x0000001d,0x00000060,0x00030037,0x00000034,0x00000061,0x000200f8, + 0x00000063,0x0004003d,0x0000000e,0x00000161,0x00000060,0x0004003d,0x0000002c,0x00000162, + 0x00000061,0x0004006f,0x0000000e,0x00000163,0x00000162,0x00050088,0x0000000e,0x00000164, + 0x00000161,0x00000163,0x00050085,0x0000000e,0x00000168,0x00000164,0x00000167,0x00050081, + 0x0000000e,0x0000016b,0x00000168,0x0000016a,0x000200fe,0x0000016b,0x00010038,0x00050036, + 0x00000064,0x00000069,0x00000000,0x00000065,0x00030037,0x00000034,0x00000066,0x00030037, + 0x00000034,0x00000067,0x00030037,0x0000000d,0x00000068,0x000200f8,0x0000006a,0x0004003b, + 0x00000155,0x0000016e,0x00000007,0x0004003b,0x0000000d,0x00000170,0x00000007,0x0004003b, + 0x0000000d,0x00000171,0x00000007,0x0004003b,0x0000001d,0x00000174,0x00000007,0x0004003b, + 0x0000001d,0x00000177,0x00000007,0x0004003b,0x00000034,0x00000178,0x00000007,0x0004003b, + 0x0000000d,0x0000017b,0x00000007,0x0004003b,0x0000000d,0x00000184,0x00000007,0x00040039, + 0x00000030,0x0000016f,0x00000032,0x0003003e,0x0000016e,0x0000016f,0x0004003d,0x00000008, + 0x00000172,0x00000068,0x0003003e,0x00000171,0x00000172,0x00050039,0x00000008,0x00000173, + 0x0000005d,0x00000171,0x0003003e,0x00000170,0x00000173,0x0004003d,0x0000002c,0x00000175, + 0x00000066,0x0004006f,0x0000000e,0x00000176,0x00000175,0x0003003e,0x00000177,0x00000176, + 0x0004003d,0x0000002c,0x00000179,0x00000067,0x0003003e,0x00000178,0x00000179,0x00060039, + 0x0000000e,0x0000017a,0x00000062,0x00000177,0x00000178,0x0003003e,0x00000174,0x0000017a, + 0x00050041,0x0000000d,0x0000017d,0x0000016e,0x0000017c,0x0004003d,0x00000008,0x0000017e, + 0x0000017d,0x00050041,0x0000000d,0x0000017f,0x00000174,0x000000d0,0x0004003d,0x00000008, + 0x00000180,0x0000017f,0x00050085,0x00000008,0x00000181,0x0000017e,0x00000180,0x0004003d, + 0x00000008,0x00000182,0x00000170,0x00050085,0x00000008,0x00000183,0x00000181,0x00000182, + 0x0003003e,0x0000017b,0x00000183,0x00050041,0x0000000d,0x00000186,0x0000016e,0x00000185, + 0x0004003d,0x00000008,0x00000187,0x00000186,0x00050041,0x0000000d,0x00000188,0x00000174, + 0x00000138,0x0004003d,0x00000008,0x00000189,0x00000188,0x00050085,0x00000008,0x0000018a, + 0x00000187,0x00000189,0x0004003d,0x00000008,0x0000018b,0x00000170,0x00050085,0x00000008, + 0x0000018c,0x0000018a,0x0000018b,0x0003003e,0x00000184,0x0000018c,0x0004003d,0x00000008, + 0x0000018d,0x0000017b,0x0004003d,0x00000008,0x0000018e,0x00000184,0x0004003d,0x00000008, + 0x0000018f,0x00000170,0x00060050,0x00000064,0x00000190,0x0000018d,0x0000018e,0x0000018f, + 0x000200fe,0x00000190,0x00010038,0x00050036,0x0000006b,0x0000006f,0x00000000,0x0000006c, + 0x00030037,0x00000034,0x0000006d,0x00030037,0x00000034,0x0000006e,0x000200f8,0x00000070, + 0x0004003d,0x0000002c,0x00000193,0x0000006d,0x0004007c,0x0000003f,0x00000194,0x00000193, + 0x0004003d,0x0000002c,0x00000195,0x0000006e,0x0004007c,0x0000003f,0x00000196,0x00000195, + 0x000500b0,0x00000197,0x00000198,0x00000194,0x00000196,0x0004009b,0x0000006b,0x00000199, + 0x00000198,0x000200fe,0x00000199,0x00010038,0x00050036,0x0000006b,0x00000073,0x00000000, + 0x00000071,0x00030037,0x0000001d,0x00000072,0x000200f8,0x00000074,0x00050041,0x0000000d, + 0x0000019c,0x00000072,0x000000d0,0x0004003d,0x00000008,0x0000019d,0x0000019c,0x000500ba, + 0x0000006b,0x0000019e,0x0000019d,0x000000a9,0x000300f7,0x000001a0,0x00000000,0x000400fa, + 0x0000019e,0x0000019f,0x000001a0,0x000200f8,0x0000019f,0x00050041,0x0000000d,0x000001a1, + 0x00000072,0x000000d0,0x0004003d,0x00000008,0x000001a2,0x000001a1,0x000500b8,0x0000006b, + 0x000001a3,0x000001a2,0x000000aa,0x000200f9,0x000001a0,0x000200f8,0x000001a0,0x000700f5, + 0x0000006b,0x000001a4,0x0000019e,0x00000074,0x000001a3,0x0000019f,0x000300f7,0x000001a6, + 0x00000000,0x000400fa,0x000001a4,0x000001a5,0x000001a6,0x000200f8,0x000001a5,0x00050041, + 0x0000000d,0x000001a7,0x00000072,0x00000138,0x0004003d,0x00000008,0x000001a8,0x000001a7, + 0x000500ba,0x0000006b,0x000001a9,0x000001a8,0x000000a9,0x000300f7,0x000001ab,0x00000000, + 0x000400fa,0x000001a9,0x000001aa,0x000001ab,0x000200f8,0x000001aa,0x00050041,0x0000000d, + 0x000001ac,0x00000072,0x00000138,0x0004003d,0x00000008,0x000001ad,0x000001ac,0x000500b8, + 0x0000006b,0x000001ae,0x000001ad,0x000000aa,0x000200f9,0x000001ab,0x000200f8,0x000001ab, + 0x000700f5,0x0000006b,0x000001af,0x000001a9,0x000001a5,0x000001ae,0x000001aa,0x000200f9, + 0x000001a6,0x000200f8,0x000001a6,0x000700f5,0x0000006b,0x000001b0,0x000001a4,0x000001a0, + 0x000001af,0x000001ab,0x000200fe,0x000001b0,0x00010038,0x00050036,0x0000006b,0x00000077, + 0x00000000,0x00000075,0x00030037,0x00000007,0x00000076,0x000200f8,0x00000078,0x0004003d, + 0x00000006,0x000001b3,0x00000076,0x000500c7,0x00000006,0x000001b5,0x000001b3,0x000001b4, + 0x000500ab,0x0000006b,0x000001b6,0x000001b5,0x000000d0,0x000200fe,0x000001b6,0x00010038, + 0x00050036,0x00000002,0x0000007e,0x00000000,0x0000007b,0x00030037,0x00000045,0x0000007c, + 0x00030037,0x0000007a,0x0000007d,0x000200f8,0x0000007f,0x0004003b,0x00000007,0x000001ce, + 0x00000007,0x0004003b,0x00000007,0x000001ea,0x00000007,0x0004003b,0x00000007,0x000001f0, + 0x00000007,0x00050041,0x00000007,0x000001b9,0x0000007c,0x000000d0,0x0004003d,0x00000006, + 0x000001ba,0x000001b9,0x000500c2,0x00000006,0x000001bc,0x000001ba,0x000001bb,0x000500c7, + 0x00000006,0x000001be,0x000001bc,0x000001bd,0x00040070,0x00000008,0x000001bf,0x000001be, + 0x00050088,0x00000008,0x000001c1,0x000001bf,0x000001c0,0x00050041,0x0000000d,0x000001c2, + 0x0000007d,0x0000012d,0x0003003e,0x000001c2,0x000001c1,0x00050041,0x00000007,0x000001c3, + 0x0000007c,0x000000d0,0x0004003d,0x00000006,0x000001c4,0x000001c3,0x000500c2,0x00000006, + 0x000001c6,0x000001c4,0x000001c5,0x000500c7,0x00000006,0x000001c8,0x000001c6,0x000001c7, + 0x00040070,0x00000008,0x000001c9,0x000001c8,0x00050088,0x00000008,0x000001cb,0x000001c9, + 0x000001ca,0x00050041,0x0000000d,0x000001cc,0x0000007d,0x00000122,0x0003003e,0x000001cc, + 0x000001cb,0x00050041,0x00000007,0x000001cf,0x0000007c,0x000000d0,0x0004003d,0x00000006, + 0x000001d0,0x000001cf,0x0003003e,0x000001ce,0x000001d0,0x00050039,0x0000006b,0x000001d1, + 0x00000077,0x000001ce,0x00050041,0x000001d2,0x000001d3,0x0000007d,0x000001cd,0x0003003e, + 0x000001d3,0x000001d1,0x00050041,0x0000000d,0x000001d4,0x0000007d,0x0000012d,0x0004003d, + 0x00000008,0x000001d5,0x000001d4,0x000500ba,0x0000006b,0x000001d6,0x000001d5,0x000000a9, + 0x00050041,0x000001d2,0x000001d7,0x0000007d,0x00000132,0x0003003e,0x000001d7,0x000001d6, + 0x00050041,0x000001d2,0x000001d9,0x0000007d,0x00000132,0x0004003d,0x0000006b,0x000001da, + 0x000001d9,0x000300f7,0x000001dc,0x00000000,0x000400fa,0x000001da,0x000001db,0x000001dc, + 0x000200f8,0x000001db,0x00050041,0x000001d2,0x000001dd,0x0000007d,0x000001cd,0x0004003d, + 0x0000006b,0x000001de,0x000001dd,0x000400a8,0x0000006b,0x000001df,0x000001de,0x000200f9, + 0x000001dc,0x000200f8,0x000001dc,0x000700f5,0x0000006b,0x000001e0,0x000001da,0x0000007f, + 0x000001df,0x000001db,0x00050041,0x000001d2,0x000001e1,0x0000007d,0x000001d8,0x0003003e, + 0x000001e1,0x000001e0,0x00050041,0x000001d2,0x000001e2,0x0000007d,0x000001d8,0x0004003d, + 0x0000006b,0x000001e3,0x000001e2,0x000300f7,0x000001e5,0x00000000,0x000400fa,0x000001e3, + 0x000001e4,0x000001e5,0x000200f8,0x000001e4,0x00050041,0x0000000d,0x000001e6,0x0000007d, + 0x0000012d,0x0004003d,0x00000008,0x000001e7,0x000001e6,0x00050083,0x00000008,0x000001e8, + 0x000000aa,0x000001e7,0x00050041,0x0000000d,0x000001e9,0x0000007d,0x0000012d,0x0003003e, + 0x000001e9,0x000001e8,0x000200f9,0x000001e5,0x000200f8,0x000001e5,0x00050041,0x00000007, + 0x000001eb,0x0000007c,0x000000d0,0x0004003d,0x00000006,0x000001ec,0x000001eb,0x0003003e, + 0x000001ea,0x000001ec,0x00050039,0x0000000e,0x000001ed,0x00000024,0x000001ea,0x00050051, + 0x00000008,0x000001ee,0x000001ed,0x00000000,0x00060041,0x0000000d,0x000001ef,0x0000007d, + 0x000000be,0x000000d0,0x0003003e,0x000001ef,0x000001ee,0x00050041,0x00000007,0x000001f1, + 0x0000007c,0x00000138,0x0004003d,0x00000006,0x000001f2,0x000001f1,0x0003003e,0x000001f0, + 0x000001f2,0x00050039,0x0000000e,0x000001f3,0x00000024,0x000001f0,0x00050051,0x00000008, + 0x000001f4,0x000001f3,0x00000000,0x00060041,0x0000000d,0x000001f5,0x0000007d,0x000000be, + 0x00000138,0x0003003e,0x000001f5,0x000001f4,0x00050041,0x000001d2,0x000001f8,0x0000007d, + 0x000001f6,0x0003003e,0x000001f8,0x000001f7,0x000100fd,0x00010038,0x00050036,0x00000030, + 0x00000084,0x00000000,0x00000080,0x00030037,0x0000001d,0x00000081,0x00030037,0x0000002b, + 0x00000082,0x00030037,0x0000002c,0x00000083,0x000200f8,0x00000085,0x0004003b,0x00000120, + 0x000001f9,0x00000007,0x0004003b,0x0000001d,0x000001fa,0x00000007,0x0004003b,0x00000034, + 0x000001fc,0x00000007,0x0004003b,0x0000000d,0x000001fe,0x00000007,0x0004003b,0x00000155, + 0x000001ff,0x00000007,0x0004003b,0x00000044,0x00000202,0x00000007,0x0004003b,0x00000034, + 0x0000020a,0x00000007,0x0004003b,0x00000034,0x0000020e,0x00000007,0x0004003b,0x00000034, + 0x00000213,0x00000007,0x0004003b,0x00000034,0x00000215,0x00000007,0x0004003b,0x00000155, + 0x00000219,0x00000007,0x0004003b,0x00000044,0x0000021c,0x00000007,0x0004003b,0x00000045, + 0x0000021d,0x00000007,0x0004003b,0x0000000d,0x0000021f,0x00000007,0x0004003b,0x0000000d, + 0x00000222,0x00000007,0x0004003b,0x0000000d,0x00000227,0x00000007,0x0004003d,0x0000000e, + 0x000001fb,0x00000081,0x0003003e,0x000001fa,0x000001fb,0x0003003e,0x000001fc,0x00000083, + 0x00060039,0x00000056,0x000001fd,0x0000005a,0x000001fa,0x000001fc,0x0003003e,0x000001f9, + 0x000001fd,0x0003003e,0x000001fe,0x000000a9,0x0003003e,0x000001ff,0x00000200,0x00050041, + 0x0000000d,0x00000201,0x000001ff,0x0000017c,0x0003003e,0x00000201,0x000000a9,0x0003003e, + 0x00000202,0x000000be,0x000200f9,0x00000203,0x000200f8,0x00000203,0x000400f6,0x00000205, + 0x00000206,0x00000000,0x000200f9,0x00000207,0x000200f8,0x00000207,0x0004003d,0x0000002b, + 0x00000208,0x00000202,0x000500b1,0x0000006b,0x00000209,0x00000208,0x000001cd,0x000400fa, + 0x00000209,0x00000204,0x00000205,0x000200f8,0x00000204,0x0004003d,0x0000002b,0x0000020b, + 0x00000202,0x00060041,0x00000034,0x0000020c,0x000001f9,0x000000be,0x0000020b,0x0004003d, + 0x0000002c,0x0000020d,0x0000020c,0x0003003e,0x0000020a,0x0000020d,0x00050041,0x00000034, + 0x0000020f,0x000001f9,0x00000122,0x0004003d,0x0000002c,0x00000210,0x0000020f,0x0004003d, + 0x0000002c,0x00000211,0x0000020a,0x00050080,0x0000002c,0x00000212,0x00000210,0x00000211, + 0x0003003e,0x0000020e,0x00000212,0x0004003d,0x0000002c,0x00000214,0x0000020e,0x0003003e, + 0x00000213,0x00000214,0x0003003e,0x00000215,0x00000083,0x00060039,0x0000006b,0x00000216, + 0x0000006f,0x00000213,0x00000215,0x000300f7,0x00000218,0x00000000,0x000400fa,0x00000216, + 0x00000217,0x00000218,0x000200f8,0x00000217,0x0004003d,0x0000002c,0x0000021a,0x0000020e, + 0x0004007c,0x0000003f,0x0000021b,0x0000021a,0x0003003e,0x0000021c,0x00000082,0x0003003e, + 0x0000021d,0x0000021b,0x00060039,0x00000030,0x0000021e,0x00000049,0x0000021c,0x0000021d, + 0x0003003e,0x00000219,0x0000021e,0x00050041,0x0000000d,0x00000220,0x00000219,0x0000017c, + 0x0004003d,0x00000008,0x00000221,0x00000220,0x0003003e,0x0000021f,0x00000221,0x00050041, + 0x0000000d,0x00000223,0x00000219,0x0000017c,0x0004003d,0x00000008,0x00000224,0x00000223, + 0x000500ba,0x0000006b,0x00000225,0x00000224,0x000000a9,0x000600a9,0x00000008,0x00000226, + 0x00000225,0x000000aa,0x000000a9,0x0003003e,0x00000222,0x00000226,0x0004003d,0x0000002b, + 0x00000228,0x00000202,0x00060041,0x0000000d,0x00000229,0x000001f9,0x0000012d,0x00000228, + 0x0004003d,0x00000008,0x0000022a,0x00000229,0x0004003d,0x00000008,0x0000022b,0x00000222, + 0x00050085,0x00000008,0x0000022c,0x0000022a,0x0000022b,0x0004003d,0x00000008,0x0000022d, + 0x0000021f,0x00050085,0x00000008,0x0000022e,0x0000022c,0x0000022d,0x0003003e,0x00000227, + 0x0000022e,0x0004003d,0x00000008,0x0000022f,0x00000227,0x0004003d,0x00000008,0x00000230, + 0x000001fe,0x00050081,0x00000008,0x00000231,0x00000230,0x0000022f,0x0003003e,0x000001fe, + 0x00000231,0x0004003d,0x00000030,0x00000232,0x00000219,0x0004003d,0x00000008,0x00000233, + 0x00000227,0x0005008e,0x00000030,0x00000234,0x00000232,0x00000233,0x0004003d,0x00000030, + 0x00000235,0x000001ff,0x00050081,0x00000030,0x00000236,0x00000235,0x00000234,0x0003003e, + 0x000001ff,0x00000236,0x000200f9,0x00000218,0x000200f8,0x00000218,0x000200f9,0x00000206, + 0x000200f8,0x00000206,0x0004003d,0x0000002b,0x00000237,0x00000202,0x00050080,0x0000002b, + 0x00000238,0x00000237,0x0000012d,0x0003003e,0x00000202,0x00000238,0x000200f9,0x00000203, + 0x000200f8,0x00000205,0x0004003d,0x00000008,0x00000239,0x000001fe,0x000500ba,0x0000006b, + 0x0000023a,0x00000239,0x000000a9,0x0004003d,0x00000008,0x0000023b,0x000001fe,0x000600a9, + 0x00000008,0x0000023c,0x0000023a,0x0000023b,0x000000aa,0x0004003d,0x00000030,0x0000023d, + 0x000001ff,0x00070050,0x00000030,0x0000023e,0x0000023c,0x0000023c,0x0000023c,0x0000023c, + 0x00050088,0x00000030,0x0000023f,0x0000023d,0x0000023e,0x0003003e,0x000001ff,0x0000023f, + 0x0004003d,0x00000030,0x00000240,0x000001ff,0x000200fe,0x00000240,0x00010038,0x00050036, + 0x00000002,0x00000089,0x00000000,0x00000086,0x00030037,0x0000001d,0x00000087,0x00030037, + 0x0000007a,0x00000088,0x000200f8,0x0000008a,0x0004003b,0x00000034,0x00000243,0x00000007, + 0x0004003b,0x00000045,0x00000249,0x00000007,0x0004003b,0x00000034,0x0000024a,0x00000007, + 0x0004003b,0x00000045,0x0000024d,0x00000007,0x0004003b,0x0000007a,0x0000024f,0x00000007, + 0x0004003b,0x00000034,0x00000257,0x00000007,0x0004003b,0x00000155,0x00000259,0x00000007, + 0x0004003b,0x00000044,0x0000025a,0x00000007,0x0004003b,0x0000001d,0x0000026e,0x00000007, + 0x0004003b,0x0000001d,0x00000282,0x00000007,0x0004003b,0x0000001d,0x0000028b,0x00000007, + 0x0004003d,0x0000000e,0x00000244,0x00000087,0x00040039,0x0000002c,0x00000245,0x0000002e, + 0x0004006f,0x0000000e,0x00000246,0x00000245,0x00050085,0x0000000e,0x00000247,0x00000244, + 0x00000246,0x0004006e,0x0000002c,0x00000248,0x00000247,0x0003003e,0x00000243,0x00000248, + 0x0004003d,0x0000002c,0x0000024b,0x00000243,0x0003003e,0x0000024a,0x0000024b,0x00050039, + 0x0000003f,0x0000024c,0x00000042,0x0000024a,0x0003003e,0x00000249,0x0000024c,0x0004003d, + 0x0000003f,0x0000024e,0x00000249,0x0003003e,0x0000024d,0x0000024e,0x00060039,0x00000002, + 0x00000250,0x0000007e,0x0000024d,0x0000024f,0x0004003d,0x00000079,0x00000251,0x0000024f, + 0x0003003e,0x00000088,0x00000251,0x00050041,0x000001d2,0x00000252,0x00000088,0x00000132, + 0x0004003d,0x0000006b,0x00000253,0x00000252,0x000400a8,0x0000006b,0x00000254,0x00000253, + 0x000300f7,0x00000256,0x00000000,0x000400fa,0x00000254,0x00000255,0x00000256,0x000200f8, + 0x00000255,0x00040039,0x0000002c,0x00000258,0x0000002e,0x0003003e,0x00000257,0x00000258, + 0x0003003e,0x00000259,0x00000200,0x0003003e,0x0000025a,0x000000be,0x000200f9,0x0000025b, + 0x000200f8,0x0000025b,0x000400f6,0x0000025d,0x0000025e,0x00000000,0x000200f9,0x0000025f, + 0x000200f8,0x0000025f,0x0004003d,0x0000002b,0x00000260,0x0000025a,0x000500b1,0x0000006b, + 0x00000262,0x00000260,0x00000261,0x000300f7,0x00000264,0x00000000,0x000400fa,0x00000262, + 0x00000263,0x00000264,0x000200f8,0x00000263,0x00050041,0x0000000d,0x00000265,0x00000259, + 0x00000185,0x0004003d,0x00000008,0x00000266,0x00000265,0x000500b4,0x0000006b,0x00000267, + 0x00000266,0x000000a9,0x000200f9,0x00000264,0x000200f8,0x00000264,0x000700f5,0x0000006b, + 0x00000268,0x00000262,0x0000025f,0x00000267,0x00000263,0x000400fa,0x00000268,0x0000025c, + 0x0000025d,0x000200f8,0x0000025c,0x0004003d,0x0000002c,0x00000269,0x00000257,0x00050050, + 0x0000002c,0x0000026a,0x00000122,0x00000122,0x00050087,0x0000002c,0x0000026b,0x00000269, + 0x0000026a,0x0003003e,0x00000257,0x0000026b,0x0004003d,0x0000002b,0x0000026c,0x0000025a, + 0x0004003d,0x0000002c,0x0000026d,0x00000257,0x0004003d,0x0000000e,0x0000026f,0x00000087, + 0x0003003e,0x0000026e,0x0000026f,0x00070039,0x00000030,0x00000270,0x00000084,0x0000026e, + 0x0000026c,0x0000026d,0x0003003e,0x00000259,0x00000270,0x000200f9,0x0000025e,0x000200f8, + 0x0000025e,0x0004003d,0x0000002b,0x00000271,0x0000025a,0x00050080,0x0000002b,0x00000272, + 0x00000271,0x0000012d,0x0003003e,0x0000025a,0x00000272,0x000200f9,0x0000025b,0x000200f8, + 0x0000025d,0x0004003d,0x00000030,0x00000273,0x00000259,0x0007004f,0x0000000e,0x00000274, + 0x00000273,0x00000273,0x00000000,0x00000001,0x00050041,0x0000001d,0x00000275,0x00000088, + 0x000000be,0x0003003e,0x00000275,0x00000274,0x00050041,0x0000000d,0x00000276,0x00000259, + 0x0000017c,0x0004003d,0x00000008,0x00000277,0x00000276,0x00050041,0x0000000d,0x00000278, + 0x00000088,0x0000012d,0x0003003e,0x00000278,0x00000277,0x00050041,0x0000000d,0x00000279, + 0x00000259,0x00000185,0x0004003d,0x00000008,0x0000027a,0x00000279,0x00050041,0x0000000d, + 0x0000027b,0x00000088,0x00000122,0x0003003e,0x0000027b,0x0000027a,0x00050041,0x000001d2, + 0x0000027d,0x00000088,0x000001f6,0x0003003e,0x0000027d,0x0000027c,0x000200f9,0x00000256, + 0x000200f8,0x00000256,0x0004003d,0x0000000e,0x0000027e,0x00000087,0x00050041,0x0000001d, + 0x0000027f,0x00000088,0x000000be,0x0004003d,0x0000000e,0x00000280,0x0000027f,0x00050083, + 0x0000000e,0x00000281,0x0000027e,0x00000280,0x0003003e,0x00000282,0x00000281,0x00050039, + 0x0000006b,0x00000283,0x00000073,0x00000282,0x000400a8,0x0000006b,0x00000284,0x00000283, + 0x00050041,0x000001d2,0x00000285,0x00000088,0x000000c4,0x0003003e,0x00000285,0x00000284, + 0x0004003d,0x0000000e,0x00000287,0x00000087,0x00050041,0x0000001d,0x00000288,0x00000088, + 0x000000be,0x0004003d,0x0000000e,0x00000289,0x00000288,0x00050081,0x0000000e,0x0000028a, + 0x00000287,0x00000289,0x0003003e,0x0000028b,0x0000028a,0x00050039,0x0000006b,0x0000028c, + 0x00000073,0x0000028b,0x000400a8,0x0000006b,0x0000028d,0x0000028c,0x00050041,0x000001d2, + 0x0000028e,0x00000088,0x00000286,0x0003003e,0x0000028e,0x0000028d,0x00050041,0x0000001d, + 0x00000290,0x00000088,0x000000be,0x0004003d,0x0000000e,0x00000291,0x00000290,0x0006000c, + 0x00000008,0x00000292,0x00000001,0x00000042,0x00000291,0x00050041,0x0000000d,0x00000293, + 0x00000088,0x0000028f,0x0003003e,0x00000293,0x00000292,0x000100fd,0x00010038,0x00050036, + 0x00000008,0x0000008e,0x00000000,0x0000008b,0x00030037,0x00000007,0x0000008c,0x00030037, + 0x00000034,0x0000008d,0x000200f8,0x0000008f,0x0004003b,0x0000001d,0x00000294,0x00000007, + 0x0004003b,0x0000001d,0x0000029c,0x00000007,0x0004003b,0x0000001d,0x0000029d,0x00000007, + 0x0004003b,0x00000034,0x000002a0,0x00000007,0x0004003b,0x00000034,0x000002ad,0x00000007, + 0x0004003b,0x00000034,0x000002b8,0x00000007,0x0004003d,0x0000002c,0x00000295,0x0000008d, + 0x0004006f,0x0000000e,0x00000296,0x00000295,0x00050050,0x0000000e,0x00000297,0x0000011d, + 0x0000011d,0x00050081,0x0000000e,0x00000298,0x00000296,0x00000297,0x00040039,0x0000002c, + 0x00000299,0x0000002e,0x0004006f,0x0000000e,0x0000029a,0x00000299,0x00050088,0x0000000e, + 0x0000029b,0x00000298,0x0000029a,0x0003003e,0x00000294,0x0000029b,0x0004003d,0x0000000e, + 0x0000029e,0x00000294,0x0003003e,0x0000029d,0x0000029e,0x00050039,0x0000000e,0x0000029f, + 0x0000004c,0x0000029d,0x0003003e,0x0000029c,0x0000029f,0x0004003d,0x0000000e,0x000002a1, + 0x0000029c,0x00040039,0x0000002c,0x000002a2,0x0000002e,0x0004006f,0x0000000e,0x000002a3, + 0x000002a2,0x00050085,0x0000000e,0x000002a4,0x000002a1,0x000002a3,0x0004006e,0x0000002c, + 0x000002a5,0x000002a4,0x0003003e,0x000002a0,0x000002a5,0x0004003d,0x00000006,0x000002a6, + 0x0000008c,0x000500aa,0x0000006b,0x000002a7,0x000002a6,0x000000d0,0x000300f7,0x000002a9, + 0x00000000,0x000400fa,0x000002a7,0x000002a8,0x000002b0,0x000200f8,0x000002a8,0x0004003d, + 0x0000002c,0x000002aa,0x0000008d,0x0004003d,0x0000002c,0x000002ab,0x000002a0,0x00050080, + 0x0000002c,0x000002ac,0x000002aa,0x000002ab,0x0003003e,0x000002ad,0x000002ac,0x00050039, + 0x00000008,0x000002ae,0x0000003a,0x000002ad,0x000200fe,0x000002ae,0x000200f8,0x000002b0, + 0x0004003d,0x00000006,0x000002b1,0x0000008c,0x000500aa,0x0000006b,0x000002b2,0x000002b1, + 0x00000138,0x000300f7,0x000002b4,0x00000000,0x000400fa,0x000002b2,0x000002b3,0x000002b4, + 0x000200f8,0x000002b3,0x0004003d,0x0000002c,0x000002b5,0x0000008d,0x0004003d,0x0000002c, + 0x000002b6,0x000002a0,0x00050080,0x0000002c,0x000002b7,0x000002b5,0x000002b6,0x0003003e, + 0x000002b8,0x000002b7,0x00050039,0x00000008,0x000002b9,0x00000037,0x000002b8,0x000200fe, + 0x000002b9,0x000200f8,0x000002b4,0x000200f9,0x000002a9,0x000200f8,0x000002a9,0x000200fe, + 0x000000a9,0x00010038,0x00050036,0x00000008,0x00000094,0x00000000,0x00000090,0x00030037, + 0x00000007,0x00000091,0x00030037,0x0000001d,0x00000092,0x00030037,0x0000000d,0x00000093, + 0x000200f8,0x00000095,0x0004003b,0x0000000d,0x000002bd,0x00000007,0x0004003b,0x0000000d, + 0x000002be,0x00000007,0x0004003b,0x00000120,0x000002c1,0x00000007,0x0004003b,0x0000001d, + 0x000002c3,0x00000007,0x0004003b,0x00000034,0x000002c5,0x00000007,0x0004003b,0x0000000d, + 0x000002c7,0x00000007,0x0004003b,0x0000000d,0x000002c8,0x00000007,0x0004003b,0x0000000d, + 0x000002c9,0x00000007,0x0004003b,0x00000044,0x000002ca,0x00000007,0x0004003b,0x00000034, + 0x000002d2,0x00000007,0x0004003b,0x00000034,0x000002d6,0x00000007,0x0004003b,0x00000034, + 0x000002dc,0x00000007,0x0004003b,0x00000034,0x000002de,0x00000007,0x0004003b,0x0000000d, + 0x000002e2,0x00000007,0x0004003b,0x0000000d,0x000002eb,0x00000007,0x0004003b,0x00000007, + 0x000002ec,0x00000007,0x0004003b,0x00000034,0x000002ee,0x00000007,0x0004003b,0x0000000d, + 0x000002f1,0x00000007,0x0004003b,0x0000000d,0x000002f2,0x00000007,0x0004003b,0x0000000d, + 0x000002f5,0x00000007,0x0004003b,0x0000000d,0x000002fd,0x00000007,0x0004003b,0x0000000d, + 0x000002fe,0x00000007,0x0004003b,0x0000000d,0x00000300,0x00000007,0x0004003b,0x00000303, + 0x00000304,0x00000007,0x0004003b,0x00000034,0x0000030a,0x00000007,0x0004003b,0x00000034, + 0x0000030b,0x00000007,0x0004003b,0x0000000d,0x0000030c,0x00000007,0x0004003b,0x00000303, + 0x0000030f,0x00000007,0x0004003b,0x00000034,0x00000311,0x00000007,0x0004003b,0x00000034, + 0x00000312,0x00000007,0x0004003b,0x0000000d,0x00000313,0x00000007,0x0004003b,0x0000000d, + 0x00000316,0x00000007,0x0004003b,0x0000000d,0x0000031a,0x00000007,0x0004003b,0x0000000d, + 0x0000031b,0x00000007,0x0004003b,0x0000000d,0x0000031d,0x00000007,0x0004003b,0x0000000d, + 0x00000320,0x00000007,0x0004003b,0x0000000d,0x00000326,0x00000007,0x0004003b,0x0000000d, + 0x0000032e,0x00000007,0x0004003b,0x0000000d,0x00000334,0x00000007,0x0004003b,0x0000000d, + 0x00000336,0x00000007,0x0004003b,0x0000000d,0x00000338,0x00000007,0x0004003b,0x0000000d, + 0x00000339,0x00000007,0x0004003b,0x0000000d,0x0000033a,0x00000007,0x0004003b,0x0000000d, + 0x0000034d,0x00000007,0x0004003b,0x0000000d,0x00000354,0x00000007,0x0004003d,0x00000008, + 0x000002bf,0x00000093,0x0003003e,0x000002be,0x000002bf,0x00050039,0x00000008,0x000002c0, + 0x0000005d,0x000002be,0x0003003e,0x000002bd,0x000002c0,0x00040039,0x0000002c,0x000002c2, + 0x0000002e,0x0004003d,0x0000000e,0x000002c4,0x00000092,0x0003003e,0x000002c3,0x000002c4, + 0x0003003e,0x000002c5,0x000002c2,0x00060039,0x00000056,0x000002c6,0x0000005a,0x000002c3, + 0x000002c5,0x0003003e,0x000002c1,0x000002c6,0x0003003e,0x000002c7,0x000000a9,0x0003003e, + 0x000002c8,0x000000a9,0x0003003e,0x000002c9,0x000000a9,0x0003003e,0x000002ca,0x000000be, + 0x000200f9,0x000002cb,0x000200f8,0x000002cb,0x000400f6,0x000002cd,0x000002ce,0x00000000, + 0x000200f9,0x000002cf,0x000200f8,0x000002cf,0x0004003d,0x0000002b,0x000002d0,0x000002ca, + 0x000500b1,0x0000006b,0x000002d1,0x000002d0,0x000001cd,0x000400fa,0x000002d1,0x000002cc, + 0x000002cd,0x000200f8,0x000002cc,0x0004003d,0x0000002b,0x000002d3,0x000002ca,0x00060041, + 0x00000034,0x000002d4,0x000002c1,0x000000be,0x000002d3,0x0004003d,0x0000002c,0x000002d5, + 0x000002d4,0x0003003e,0x000002d2,0x000002d5,0x00050041,0x00000034,0x000002d7,0x000002c1, + 0x00000122,0x0004003d,0x0000002c,0x000002d8,0x000002d7,0x0004003d,0x0000002c,0x000002d9, + 0x000002d2,0x00050080,0x0000002c,0x000002da,0x000002d8,0x000002d9,0x0003003e,0x000002d6, + 0x000002da,0x00040039,0x0000002c,0x000002db,0x0000002e,0x0004003d,0x0000002c,0x000002dd, + 0x000002d6,0x0003003e,0x000002dc,0x000002dd,0x0003003e,0x000002de,0x000002db,0x00060039, + 0x0000006b,0x000002df,0x0000006f,0x000002dc,0x000002de,0x000300f7,0x000002e1,0x00000000, + 0x000400fa,0x000002df,0x000002e0,0x000002e1,0x000200f8,0x000002e0,0x0004003d,0x0000002b, + 0x000002e3,0x000002ca,0x00060041,0x0000000d,0x000002e4,0x000002c1,0x0000012d,0x000002e3, + 0x0004003d,0x00000008,0x000002e5,0x000002e4,0x0003003e,0x000002e2,0x000002e5,0x0004003d, + 0x00000008,0x000002e6,0x000002e2,0x000500ba,0x0000006b,0x000002e8,0x000002e6,0x000002e7, + 0x000300f7,0x000002ea,0x00000000,0x000400fa,0x000002e8,0x000002e9,0x000002ea,0x000200f8, + 0x000002e9,0x0004003d,0x00000006,0x000002ed,0x00000091,0x0003003e,0x000002ec,0x000002ed, + 0x0004003d,0x0000002c,0x000002ef,0x000002d6,0x0003003e,0x000002ee,0x000002ef,0x00060039, + 0x00000008,0x000002f0,0x0000008e,0x000002ec,0x000002ee,0x0003003e,0x000002eb,0x000002f0, + 0x0004003d,0x00000008,0x000002f3,0x000002eb,0x0003003e,0x000002f2,0x000002f3,0x00050039, + 0x00000008,0x000002f4,0x0000005d,0x000002f2,0x0003003e,0x000002f1,0x000002f4,0x0004003d, + 0x00000008,0x000002f6,0x000002bd,0x0004003d,0x00000008,0x000002f7,0x000002f1,0x00050083, + 0x00000008,0x000002f8,0x000002f6,0x000002f7,0x0003003e,0x000002f5,0x000002f8,0x0004003d, + 0x00000008,0x000002f9,0x000002f5,0x000500ba,0x0000006b,0x000002fa,0x000002f9,0x000000a9, + 0x000300f7,0x000002fc,0x00000000,0x000400fa,0x000002fa,0x000002fb,0x000002fc,0x000200f8, + 0x000002fb,0x0004003d,0x00000008,0x000002ff,0x000002eb,0x0003003e,0x000002fe,0x000002ff, + 0x0004003d,0x00000008,0x00000301,0x00000093,0x0003003e,0x00000300,0x00000301,0x00060039, + 0x00000008,0x00000302,0x00000029,0x000002fe,0x00000300,0x0003003e,0x000002fd,0x00000302, + 0x00040039,0x0000002c,0x00000305,0x0000002e,0x0004006f,0x0000000e,0x00000306,0x00000305, + 0x0005008e,0x0000000e,0x00000307,0x00000306,0x0000011d,0x0004006e,0x0000002c,0x00000308, + 0x00000307,0x00040039,0x0000002c,0x00000309,0x0000002e,0x0003003e,0x0000030a,0x00000308, + 0x0003003e,0x0000030b,0x00000309,0x0004003d,0x00000008,0x0000030d,0x000002fd,0x0003003e, + 0x0000030c,0x0000030d,0x00070039,0x00000064,0x0000030e,0x00000069,0x0000030a,0x0000030b, + 0x0000030c,0x0003003e,0x00000304,0x0000030e,0x00040039,0x0000002c,0x00000310,0x0000002e, + 0x0003003e,0x00000311,0x0000012b,0x0003003e,0x00000312,0x00000310,0x0004003d,0x00000008, + 0x00000314,0x000002fd,0x0003003e,0x00000313,0x00000314,0x00070039,0x00000064,0x00000315, + 0x00000069,0x00000311,0x00000312,0x00000313,0x0003003e,0x0000030f,0x00000315,0x00040039, + 0x0000002c,0x00000317,0x0000002e,0x0004006f,0x0000000e,0x00000318,0x00000317,0x0006000c, + 0x00000008,0x00000319,0x00000001,0x00000042,0x00000318,0x0003003e,0x00000316,0x00000319, + 0x0004003d,0x00000008,0x0000031c,0x000002bd,0x0003003e,0x0000031b,0x0000031c,0x0004003d, + 0x00000008,0x0000031e,0x000002f1,0x0003003e,0x0000031d,0x0000031e,0x00060039,0x00000008, + 0x0000031f,0x00000029,0x0000031b,0x0000031d,0x0003003e,0x0000031a,0x0000031f,0x0004003d, + 0x00000064,0x00000321,0x0000030f,0x0006000c,0x00000008,0x00000322,0x00000001,0x00000042, + 0x00000321,0x0004003d,0x00000064,0x00000323,0x00000304,0x0006000c,0x00000008,0x00000324, + 0x00000001,0x00000042,0x00000323,0x00050088,0x00000008,0x00000325,0x00000322,0x00000324, + 0x0003003e,0x00000320,0x00000325,0x0004003d,0x00000008,0x00000328,0x00000320,0x00050085, + 0x00000008,0x00000329,0x00000327,0x00000328,0x0004003d,0x00000008,0x0000032a,0x00000316, + 0x00050085,0x00000008,0x0000032b,0x00000329,0x0000032a,0x0004003d,0x00000008,0x0000032c, + 0x0000031a,0x00050085,0x00000008,0x0000032d,0x0000032b,0x0000032c,0x0003003e,0x00000326, + 0x0000032d,0x00040039,0x0000002c,0x0000032f,0x0000002e,0x0004006f,0x0000000e,0x00000330, + 0x0000032f,0x0006000c,0x00000008,0x00000331,0x00000001,0x00000042,0x00000330,0x00050088, + 0x00000008,0x00000333,0x00000331,0x00000332,0x0003003e,0x00000334,0x00000333,0x00050039, + 0x00000008,0x00000335,0x0000001b,0x00000334,0x0003003e,0x0000032e,0x00000335,0x0003003e, + 0x00000338,0x000000aa,0x0003003e,0x00000339,0x00000337,0x0004003d,0x00000008,0x0000033b, + 0x0000032e,0x0003003e,0x0000033a,0x0000033b,0x00070039,0x00000008,0x0000033c,0x00000017, + 0x00000338,0x00000339,0x0000033a,0x0003003e,0x00000336,0x0000033c,0x0004003d,0x00000008, + 0x0000033d,0x00000326,0x0004003d,0x00000008,0x0000033e,0x000002f5,0x00050088,0x00000008, + 0x0000033f,0x0000033d,0x0000033e,0x000500be,0x0000006b,0x00000340,0x0000033f,0x000000aa, + 0x000600a9,0x00000008,0x00000341,0x00000340,0x000000aa,0x000000a9,0x0004003d,0x00000008, + 0x00000342,0x000002e2,0x00050085,0x00000008,0x00000343,0x00000341,0x00000342,0x0004003d, + 0x00000008,0x00000344,0x000002c8,0x00050081,0x00000008,0x00000345,0x00000344,0x00000343, + 0x0003003e,0x000002c8,0x00000345,0x0004003d,0x00000008,0x00000346,0x000002e2,0x0004003d, + 0x00000008,0x00000347,0x000002c9,0x00050081,0x00000008,0x00000348,0x00000347,0x00000346, + 0x0003003e,0x000002c9,0x00000348,0x000200f9,0x000002fc,0x000200f8,0x000002fc,0x000200f9, + 0x000002ea,0x000200f8,0x000002ea,0x000200f9,0x000002e1,0x000200f8,0x000002e1,0x000200f9, + 0x000002ce,0x000200f8,0x000002ce,0x0004003d,0x0000002b,0x00000349,0x000002ca,0x00050080, + 0x0000002b,0x0000034a,0x00000349,0x0000012d,0x0003003e,0x000002ca,0x0000034a,0x000200f9, + 0x000002cb,0x000200f8,0x000002cd,0x0004003d,0x00000008,0x0000034b,0x000002c9,0x000500ba, + 0x0000006b,0x0000034c,0x0000034b,0x000000a9,0x000300f7,0x0000034f,0x00000000,0x000400fa, + 0x0000034c,0x0000034e,0x00000356,0x000200f8,0x0000034e,0x0004003d,0x00000008,0x00000350, + 0x000002c8,0x0004003d,0x00000008,0x00000351,0x000002c9,0x00050088,0x00000008,0x00000352, + 0x00000350,0x00000351,0x00050083,0x00000008,0x00000353,0x000000aa,0x00000352,0x0003003e, + 0x00000354,0x00000353,0x00050039,0x00000008,0x00000355,0x0000001b,0x00000354,0x0003003e, + 0x0000034d,0x00000355,0x000200f9,0x0000034f,0x000200f8,0x00000356,0x0003003e,0x0000034d, + 0x000000a9,0x000200f9,0x0000034f,0x000200f8,0x0000034f,0x0004003d,0x00000008,0x00000357, + 0x0000034d,0x000200fe,0x00000357,0x00010038,0x00050036,0x00000002,0x00000098,0x00000000, + 0x00000096,0x00030037,0x00000034,0x00000097,0x000200f8,0x00000099,0x0004003b,0x0000000d, + 0x0000035a,0x00000007,0x0004003b,0x00000034,0x0000035b,0x00000007,0x0004003b,0x0000001d, + 0x0000035e,0x00000007,0x0004003b,0x0000000d,0x00000366,0x00000007,0x0004003b,0x0000000d, + 0x00000367,0x00000007,0x0004003b,0x0000007a,0x0000036a,0x00000007,0x0004003b,0x0000001d, + 0x0000036b,0x00000007,0x0004003b,0x0000007a,0x0000036d,0x00000007,0x0004003b,0x0000000d, + 0x00000370,0x00000007,0x0004003b,0x00000007,0x00000375,0x00000007,0x0004003b,0x0000001d, + 0x00000376,0x00000007,0x0004003b,0x0000000d,0x00000377,0x00000007,0x0004003b,0x0000000d, + 0x0000037b,0x00000007,0x0004003b,0x00000007,0x00000380,0x00000007,0x0004003b,0x0000001d, + 0x00000381,0x00000007,0x0004003b,0x0000000d,0x00000382,0x00000007,0x0004003b,0x0000001d, + 0x00000386,0x00000007,0x0004003b,0x0000000d,0x0000038b,0x00000007,0x0004003b,0x0000001d, + 0x00000391,0x00000007,0x0004003b,0x00000034,0x00000395,0x00000007,0x0004003b,0x00000034, + 0x000003a0,0x00000007,0x0004003b,0x00000034,0x000003a2,0x00000007,0x0004003b,0x0000000d, + 0x000003a7,0x00000007,0x0004003b,0x00000034,0x000003aa,0x00000007,0x0004003b,0x00000034, + 0x000003b5,0x00000007,0x0004003b,0x00000034,0x000003b7,0x00000007,0x0004003b,0x0000000d, + 0x000003bc,0x00000007,0x0004003b,0x00000034,0x000003bf,0x00000007,0x0004003b,0x0000001d, + 0x000003c1,0x00000007,0x0004003d,0x0000002c,0x0000035c,0x00000097,0x0003003e,0x0000035b, + 0x0000035c,0x00050039,0x00000008,0x0000035d,0x0000003d,0x0000035b,0x0003003e,0x0000035a, + 0x0000035d,0x0004003d,0x0000002c,0x0000035f,0x00000097,0x0004006f,0x0000000e,0x00000360, + 0x0000035f,0x00050050,0x0000000e,0x00000361,0x0000011d,0x0000011d,0x00050081,0x0000000e, + 0x00000362,0x00000360,0x00000361,0x00040039,0x0000002c,0x00000363,0x0000002e,0x0004006f, + 0x0000000e,0x00000364,0x00000363,0x00050088,0x0000000e,0x00000365,0x00000362,0x00000364, + 0x0003003e,0x0000035e,0x00000365,0x0004003d,0x00000008,0x00000368,0x0000035a,0x0003003e, + 0x00000367,0x00000368,0x00050039,0x00000008,0x00000369,0x0000005d,0x00000367,0x0003003e, + 0x00000366,0x00000369,0x0004003d,0x0000000e,0x0000036c,0x0000035e,0x0003003e,0x0000036b, + 0x0000036c,0x00060039,0x00000002,0x0000036e,0x00000089,0x0000036b,0x0000036d,0x0004003d, + 0x00000079,0x0000036f,0x0000036d,0x0003003e,0x0000036a,0x0000036f,0x0004003d,0x0000000e, + 0x00000371,0x0000035e,0x00050041,0x0000001d,0x00000372,0x0000036a,0x000000be,0x0004003d, + 0x0000000e,0x00000373,0x00000372,0x00050081,0x0000000e,0x00000374,0x00000371,0x00000373, + 0x0003003e,0x00000375,0x000000d0,0x0003003e,0x00000376,0x00000374,0x0004003d,0x00000008, + 0x00000378,0x0000035a,0x0003003e,0x00000377,0x00000378,0x00070039,0x00000008,0x00000379, + 0x00000094,0x00000375,0x00000376,0x00000377,0x00050083,0x00000008,0x0000037a,0x000000aa, + 0x00000379,0x0003003e,0x00000370,0x0000037a,0x0004003d,0x0000000e,0x0000037c,0x0000035e, + 0x00050041,0x0000001d,0x0000037d,0x0000036a,0x000000be,0x0004003d,0x0000000e,0x0000037e, + 0x0000037d,0x00050083,0x0000000e,0x0000037f,0x0000037c,0x0000037e,0x0003003e,0x00000380, + 0x00000138,0x0003003e,0x00000381,0x0000037f,0x0004003d,0x00000008,0x00000383,0x0000035a, + 0x0003003e,0x00000382,0x00000383,0x00070039,0x00000008,0x00000384,0x00000094,0x00000380, + 0x00000381,0x00000382,0x00050083,0x00000008,0x00000385,0x000000aa,0x00000384,0x0003003e, + 0x0000037b,0x00000385,0x0004003d,0x00000008,0x00000387,0x00000370,0x0004003d,0x00000008, + 0x00000388,0x0000037b,0x00050050,0x0000000e,0x00000389,0x00000387,0x00000388,0x0003003e, + 0x00000386,0x00000389,0x0004003d,0x0000000e,0x0000038a,0x00000386,0x0003003e,0x0000038b, + 0x000002e7,0x00050039,0x0000000e,0x0000038c,0x00000011,0x0000038b,0x000500be,0x00000197, + 0x0000038d,0x0000038a,0x0000038c,0x000600a9,0x0000000e,0x00000390,0x0000038d,0x0000038f, + 0x0000038e,0x0003003e,0x00000386,0x00000390,0x00050041,0x0000001d,0x00000392,0x0000036a, + 0x000000be,0x0004003d,0x0000000e,0x00000393,0x00000392,0x0005008e,0x0000000e,0x00000394, + 0x00000393,0x00000165,0x0003003e,0x00000391,0x00000394,0x0004003d,0x0000000e,0x00000396, + 0x0000035e,0x0004003d,0x0000000e,0x00000397,0x00000391,0x00050081,0x0000000e,0x00000398, + 0x00000396,0x00000397,0x00040039,0x0000002c,0x00000399,0x0000002e,0x0004006f,0x0000000e, + 0x0000039a,0x00000399,0x00050085,0x0000000e,0x0000039b,0x00000398,0x0000039a,0x0004006e, + 0x0000002c,0x0000039c,0x0000039b,0x0003003e,0x00000395,0x0000039c,0x00050041,0x0000000d, + 0x0000039d,0x00000386,0x000000d0,0x0004003d,0x00000008,0x0000039e,0x0000039d,0x00040039, + 0x0000002c,0x0000039f,0x0000002e,0x0004003d,0x0000002c,0x000003a1,0x00000395,0x0003003e, + 0x000003a0,0x000003a1,0x0003003e,0x000003a2,0x0000039f,0x00060039,0x0000006b,0x000003a3, + 0x0000006f,0x000003a0,0x000003a2,0x000400a8,0x0000006b,0x000003a4,0x000003a3,0x000600a9, + 0x00000008,0x000003a5,0x000003a4,0x000000aa,0x000000a9,0x00050081,0x00000008,0x000003a6, + 0x0000039e,0x000003a5,0x0003003e,0x000003a7,0x000003a6,0x00050039,0x00000008,0x000003a8, + 0x0000001b,0x000003a7,0x00050041,0x0000000d,0x000003a9,0x00000386,0x000000d0,0x0003003e, + 0x000003a9,0x000003a8,0x0004003d,0x0000000e,0x000003ab,0x0000035e,0x0004003d,0x0000000e, + 0x000003ac,0x00000391,0x00050083,0x0000000e,0x000003ad,0x000003ab,0x000003ac,0x00040039, + 0x0000002c,0x000003ae,0x0000002e,0x0004006f,0x0000000e,0x000003af,0x000003ae,0x00050085, + 0x0000000e,0x000003b0,0x000003ad,0x000003af,0x0004006e,0x0000002c,0x000003b1,0x000003b0, + 0x0003003e,0x000003aa,0x000003b1,0x00050041,0x0000000d,0x000003b2,0x00000386,0x00000138, + 0x0004003d,0x00000008,0x000003b3,0x000003b2,0x00040039,0x0000002c,0x000003b4,0x0000002e, + 0x0004003d,0x0000002c,0x000003b6,0x000003aa,0x0003003e,0x000003b5,0x000003b6,0x0003003e, + 0x000003b7,0x000003b4,0x00060039,0x0000006b,0x000003b8,0x0000006f,0x000003b5,0x000003b7, + 0x000400a8,0x0000006b,0x000003b9,0x000003b8,0x000600a9,0x00000008,0x000003ba,0x000003b9, + 0x000000aa,0x000000a9,0x00050081,0x00000008,0x000003bb,0x000003b3,0x000003ba,0x0003003e, + 0x000003bc,0x000003bb,0x00050039,0x00000008,0x000003bd,0x0000001b,0x000003bc,0x00050041, + 0x0000000d,0x000003be,0x00000386,0x00000138,0x0003003e,0x000003be,0x000003bd,0x0004003d, + 0x0000002c,0x000003c0,0x00000097,0x0003003e,0x000003bf,0x000003c0,0x0004003d,0x0000000e, + 0x000003c2,0x00000386,0x0003003e,0x000003c1,0x000003c2,0x00060039,0x00000002,0x000003c3, + 0x00000051,0x000003bf,0x000003c1,0x000100fd,0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_fi_game_motion_vector_field_comp_spv.h b/gpu/vk/shaders/fsr3_fi_game_motion_vector_field_comp_spv.h new file mode 100644 index 000000000..a7165b391 --- /dev/null +++ b/gpu/vk/shaders/fsr3_fi_game_motion_vector_field_comp_spv.h @@ -0,0 +1,842 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_FI_GAME_MOTION_VECTOR_FIELD_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x0000041c,0x00000000,0x00020011,0x00000001,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x0000040c,0x00060010,0x00000004, + 0x00000011,0x00000008,0x00000008,0x00000001,0x00030003,0x00000002,0x000001c2,0x000b0004, + 0x455f4c47,0x735f5458,0x6c706d61,0x656c7265,0x745f7373,0x75747865,0x665f6572,0x74636e75, + 0x736e6f69,0x00000000,0x000b0004,0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70, + 0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f, + 0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004, + 0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669,0x00040005, + 0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000b,0x41786666,0x6f6c4673,0x75287461, + 0x00003b31,0x00030005,0x0000000a,0x00000078,0x00060005,0x00000010,0x46786666,0x6f543233, + 0x28363146,0x003b3166,0x00040005,0x0000000f,0x756c6176,0x00000065,0x00070005,0x00000015, + 0x42786666,0x64616f72,0x74736163,0x31662833,0x0000003b,0x00040005,0x00000014,0x756c6176, + 0x00000065,0x00070005,0x0000001a,0x53786666,0x72757461,0x28657461,0x3b336676,0x00000000, + 0x00030005,0x00000019,0x00000078,0x00060005,0x00000020,0x46786666,0x74636172,0x32667628, + 0x0000003b,0x00030005,0x0000001f,0x00000078,0x00060005,0x00000024,0x52786666,0x646e756f, + 0x3b316628,0x00000000,0x00030005,0x00000023,0x00000078,0x00060005,0x00000029,0x4d786666, + 0x66286e69,0x31663b31,0x0000003b,0x00030005,0x00000027,0x00000078,0x00030005,0x00000028, + 0x00000079,0x00060005,0x0000002d,0x4d786666,0x66287861,0x31663b31,0x0000003b,0x00030005, + 0x0000002b,0x00000078,0x00030005,0x0000002c,0x00000079,0x00060005,0x00000032,0x4d786666, + 0x75287861,0x31753b31,0x0000003b,0x00030005,0x00000030,0x00000078,0x00030005,0x00000031, + 0x00000079,0x00060005,0x00000036,0x50786666,0x6628776f,0x31663b31,0x0000003b,0x00030005, + 0x00000034,0x00000078,0x00030005,0x00000035,0x00000079,0x000a0005,0x0000003c,0x5a786666, + 0x4f6f7265,0x6553656e,0x7463656c,0x33667628,0x3366763b,0x3366763b,0x0000003b,0x00030005, + 0x00000039,0x00000078,0x00030005,0x0000003a,0x00000079,0x00030005,0x0000003b,0x0000007a, + 0x00080005,0x0000003f,0x5a786666,0x4f6f7265,0x7349656e,0x6e676953,0x76286465,0x003b3366, + 0x00030005,0x0000003e,0x00000078,0x00080005,0x00000042,0x4c786666,0x61656e69,0x6f724672, + 0x2851506d,0x3b336676,0x00000000,0x00040005,0x00000041,0x756c6176,0x00000065,0x00080005, + 0x00000045,0x4c786666,0x61656e69,0x6f724672,0x6772536d,0x66762862,0x00003b33,0x00040005, + 0x00000044,0x756c6176,0x00000065,0x00080005,0x0000004a,0x65746e49,0x6c6f7072,0x6f697461, + 0x6365526e,0x73614274,0x00002865,0x00080005,0x0000004c,0x65746e49,0x6c6f7072,0x6f697461, + 0x6365526e,0x7a695374,0x00002865,0x00050005,0x0000004e,0x646e6552,0x69537265,0x0028657a, + 0x00060005,0x00000050,0x70736944,0x5379616c,0x28657a69,0x00000000,0x000b0005,0x00000054, + 0x69766544,0x6f546563,0x77656956,0x63617053,0x61725465,0x6f66736e,0x61466d72,0x726f7463, + 0x00002873,0x00090005,0x00000057,0x6b636142,0x66667542,0x72547265,0x66736e61,0x75467265, + 0x6974636e,0x00286e6f,0x00060005,0x0000005a,0x4c6e694d,0x6e696d75,0x65636e61,0x00000028, + 0x00060005,0x0000005c,0x4c78614d,0x6e696d75,0x65636e61,0x00000028,0x000a0005,0x00000060, + 0x706d6153,0x7250656c,0x6f697665,0x61427375,0x75626b63,0x72656666,0x32667628,0x0000003b, + 0x00030005,0x0000005f,0x00765566,0x000a0005,0x00000063,0x706d6153,0x7543656c,0x6e657272, + 0x63614274,0x6675626b,0x28726566,0x3b326676,0x00000000,0x00030005,0x00000062,0x00765566, + 0x000a0005,0x00000068,0x64616f4c,0x616c6944,0x4d646574,0x6f69746f,0x6365566e,0x28726f74, + 0x3b326976,0x00000000,0x00040005,0x00000067,0x50785069,0x0000736f,0x00080005,0x0000006c, + 0x64616f4c,0x616c6944,0x44646574,0x68747065,0x32697628,0x0000003b,0x00040005,0x0000006b, + 0x50785069,0x0000736f,0x00090005,0x0000006f,0x706d6153,0x6944656c,0x726f7473,0x6e6f6974, + 0x6c656946,0x66762864,0x00003b32,0x00030005,0x0000006e,0x00765566,0x000c0005,0x00000076, + 0x61647055,0x61476574,0x6f4d656d,0x6e6f6974,0x74636556,0x6946726f,0x28646c65,0x3b326976, + 0x3b327576,0x00000000,0x00040005,0x00000074,0x50785069,0x0000736f,0x00060005,0x00000075, + 0x6b636170,0x65566465,0x726f7463,0x00000000,0x000c0005,0x0000007b,0x61647055,0x61476574, + 0x6f4d656d,0x6e6f6974,0x74636556,0x6946726f,0x45646c65,0x69762878,0x75763b32,0x00003b32, + 0x00040005,0x00000079,0x50785069,0x0000736f,0x00060005,0x0000007a,0x6b636170,0x65566465, + 0x726f7463,0x00000000,0x00060005,0x0000007f,0x54424752,0x6d754c6f,0x66762861,0x00003b33, + 0x00050005,0x0000007e,0x6e694c66,0x52726165,0x00006267,0x000a0005,0x00000082,0x656e694c, + 0x65527261,0x32303263,0x4c6f5430,0x6e696d75,0x65636e61,0x33667628,0x0000003b,0x00070005, + 0x00000081,0x656e696c,0x65527261,0x32303263,0x42475230,0x00000000,0x00090005,0x00000088, + 0x73786666,0x42475263,0x694c6f54,0x7261656e,0x33667628,0x3b31663b,0x003b3166,0x00040005, + 0x00000085,0x756c6176,0x00000065,0x00060005,0x00000086,0x4c6e696d,0x6e696d75,0x65636e61, + 0x00000000,0x00060005,0x00000087,0x4c78616d,0x6e696d75,0x65636e61,0x00000000,0x00070005, + 0x0000008b,0x52776152,0x6f544247,0x656e694c,0x76287261,0x003b3366,0x00040005,0x0000008a, + 0x77615266,0x00626752,0x00080005,0x0000008e,0x52776152,0x6f544247,0x696d754c,0x636e616e, + 0x66762865,0x00003b33,0x00040005,0x0000008d,0x77615266,0x00626752,0x00080005,0x00000093, + 0x696c6942,0x7261656e,0x706d6153,0x676e696c,0x61746144,0x00000000,0x00060006,0x00000093, + 0x00000000,0x66664f69,0x73746573,0x00000000,0x00060006,0x00000093,0x00000001,0x69655766, + 0x73746867,0x00000000,0x00060006,0x00000093,0x00000002,0x73614269,0x736f5065,0x00000000, + 0x000b0005,0x00000097,0x42746547,0x6e696c69,0x53726165,0x6c706d61,0x44676e69,0x28617461, + 0x3b326676,0x3b326976,0x00000000,0x00030005,0x00000095,0x00765566,0x00040005,0x00000096, + 0x7a695369,0x00000065,0x000c0005,0x0000009a,0x766e6f43,0x46747265,0x446d6f72,0x63697665, + 0x70654465,0x6f546874,0x77656956,0x63617053,0x31662865,0x0000003b,0x00060005,0x00000099, + 0x76654466,0x44656369,0x68747065,0x00000000,0x00070005,0x000000a0,0x6e4f7349,0x65726353, + 0x76286e65,0x763b3269,0x003b3269,0x00030005,0x0000009e,0x00736f70,0x00040005,0x0000009f, + 0x657a6973,0x00000000,0x00060005,0x000000a4,0x76557349,0x69736e49,0x76286564,0x003b3266, + 0x00030005,0x000000a3,0x00765566,0x00080005,0x000000a9,0x446e694d,0x64697669,0x79426465, + 0x2878614d,0x663b3166,0x00003b31,0x00030005,0x000000a7,0x00003076,0x00030005,0x000000a8, + 0x00003176,0x000b0005,0x000000ad,0x6b636150,0x65566465,0x726f7463,0x6c656946,0x746e4564, + 0x73497972,0x6d697250,0x28797261,0x003b3175,0x00050005,0x000000ac,0x6b636170,0x6e456465, + 0x00797274,0x000c0005,0x000000b5,0x6b636150,0x74636556,0x6946726f,0x45646c65,0x6972746e, + 0x62287365,0x31753b31,0x3b31753b,0x3b326676,0x00000000,0x00050005,0x000000b1,0x50734962, + 0x616d6972,0x00007972,0x00070005,0x000000b2,0x67694875,0x69725068,0x7469726f,0x63614679, + 0x00726f74,0x00070005,0x000000b3,0x776f4c75,0x6f697250,0x79746972,0x74636146,0x0000726f, + 0x00060005,0x000000b4,0x746f4d66,0x566e6f69,0x6f746365,0x00000072,0x000c0005,0x000000b8, + 0x50746567,0x726f6972,0x46797469,0x6f746361,0x6f724672,0x6569566d,0x61705377,0x65446563, + 0x28687470,0x003b3166,0x00080005,0x000000b7,0x65695666,0x61705377,0x65446563,0x49687470, + 0x74654d6e,0x00737265,0x00090005,0x000000bc,0x706d6f63,0x47657475,0x46656d61,0x646c6569, + 0x2873764d,0x3b326976,0x00000000,0x00040005,0x000000bb,0x50785069,0x0000736f,0x00040005, + 0x000000cd,0x61726170,0x0000006d,0x00040005,0x000000d0,0x61726170,0x0000006d,0x00030005, + 0x000000f1,0x00000072,0x00040005,0x00000101,0x61726170,0x0000006d,0x00040005,0x00000103, + 0x61726170,0x0000006d,0x00040005,0x00000106,0x61726170,0x0000006d,0x00030005,0x0000010a, + 0x00000070,0x00040005,0x0000010d,0x61726170,0x0000006d,0x00040005,0x00000112,0x61726170, + 0x0000006d,0x00040005,0x00000115,0x61726170,0x0000006d,0x00040005,0x00000118,0x61726170, + 0x0000006d,0x00040005,0x0000011b,0x61726170,0x0000006d,0x00040005,0x00000122,0x61726170, + 0x0000006d,0x00030005,0x00000127,0x0000006a,0x00030005,0x0000012c,0x0000006b,0x00040005, + 0x00000134,0x61726170,0x0000006d,0x00040005,0x00000144,0x61726170,0x0000006d,0x00040005, + 0x00000145,0x61726170,0x0000006d,0x00040005,0x00000146,0x61726170,0x0000006d,0x00040005, + 0x0000014a,0x49466263,0x0000745f,0x00060006,0x0000014a,0x00000000,0x646e6572,0x69537265, + 0x0000657a,0x00060006,0x0000014a,0x00000001,0x70736964,0x5379616c,0x00657a69,0x00070006, + 0x0000014a,0x00000002,0x70736964,0x5379616c,0x52657a69,0x00007063,0x00060006,0x0000014a, + 0x00000003,0x656d6163,0x654e6172,0x00007261,0x00060006,0x0000014a,0x00000004,0x656d6163, + 0x61466172,0x00000072,0x00080006,0x0000014a,0x00000005,0x63737075,0x72656c61,0x67726154, + 0x69537465,0x0000657a,0x00050006,0x0000014a,0x00000006,0x65646f4d,0x00000000,0x00050006, + 0x0000014a,0x00000007,0x65736572,0x00000074,0x00080006,0x0000014a,0x00000008,0x76654466, + 0x54656369,0x6569566f,0x70654477,0x00006874,0x00060006,0x0000014a,0x00000009,0x746c6564, + 0x6d695461,0x00000065,0x00090006,0x0000014a,0x0000000a,0x4c445548,0x41737365,0x63617474, + 0x46646568,0x6f746361,0x00000072,0x00080006,0x0000014a,0x0000000b,0x74736964,0x6974726f, + 0x69466e6f,0x53646c65,0x00657a69,0x00080006,0x0000014a,0x0000000c,0x6974706f,0x466c6163, + 0x53776f6c,0x656c6163,0x00000000,0x00090006,0x0000014a,0x0000000d,0x6974706f,0x466c6163, + 0x42776f6c,0x6b636f6c,0x657a6953,0x00000000,0x00070006,0x0000014a,0x0000000e,0x70736964, + 0x68637461,0x67616c46,0x00000073,0x00070006,0x0000014a,0x0000000f,0x5278616d,0x65646e65, + 0x7a695372,0x00000065,0x00090006,0x0000014a,0x00000010,0x6974706f,0x466c6163,0x48776f6c, + 0x52666c61,0x6f4d7365,0x00006564,0x00070006,0x0000014a,0x00000011,0x496d754e,0x6174736e, + 0x7365636e,0x00000000,0x00090006,0x0000014a,0x00000012,0x65746e69,0x6c6f7072,0x6f697461, + 0x6365526e,0x73614274,0x00000065,0x00090006,0x0000014a,0x00000013,0x65746e69,0x6c6f7072, + 0x6f697461,0x6365526e,0x7a695374,0x00000065,0x00070006,0x0000014a,0x00000014,0x75626564, + 0x72614267,0x6f6c6f43,0x00000072,0x000a0006,0x0000014a,0x00000015,0x6b636162,0x66667542, + 0x72547265,0x66736e61,0x75467265,0x6974636e,0x00006e6f,0x00070006,0x0000014a,0x00000016, + 0x4d6e696d,0x754c7861,0x616e696d,0x0065636e,0x00060006,0x0000014a,0x00000017,0x6e615466, + 0x666c6148,0x00564f46,0x00050006,0x0000014a,0x00000018,0x6461705f,0x00000031,0x00050006, + 0x0000014a,0x00000019,0x74694a66,0x00726574,0x00080006,0x0000014a,0x0000001a,0x746f4d66, + 0x566e6f69,0x6f746365,0x61635372,0x0000656c,0x00040005,0x0000014c,0x49466263,0x00000000, + 0x000a0005,0x0000017c,0x72705f72,0x6f697665,0x695f7375,0x7265746e,0x616c6f70,0x6e6f6974, + 0x756f735f,0x00656372,0x00060005,0x00000180,0x694c5f73,0x7261656e,0x6d616c43,0x00000070, + 0x000a0005,0x00000189,0x75635f72,0x6e657272,0x6e695f74,0x70726574,0x74616c6f,0x5f6e6f69, + 0x72756f73,0x00006563,0x00090005,0x00000192,0x69645f72,0x6574616c,0x6f6d5f64,0x6e6f6974, + 0x6365765f,0x73726f74,0x00000000,0x00060005,0x00000199,0x69645f72,0x6574616c,0x65645f64, + 0x00687470,0x00090005,0x000001a0,0x6e695f72,0x5f747570,0x74736964,0x6974726f,0x665f6e6f, + 0x646c6569,0x00000000,0x000a0005,0x000001ab,0x675f7772,0x5f656d61,0x69746f6d,0x765f6e6f, + 0x6f746365,0x69665f72,0x5f646c65,0x00000078,0x000a0005,0x000001b2,0x675f7772,0x5f656d61, + 0x69746f6d,0x765f6e6f,0x6f746365,0x69665f72,0x5f646c65,0x00000079,0x00060005,0x000001b8, + 0x65725075,0x756f6976,0x6c615673,0x00586575,0x00060005,0x000001be,0x65725075,0x756f6976, + 0x6c615673,0x00596575,0x00090005,0x000001c4,0x69784575,0x6e697473,0x63655667,0x46726f74, + 0x646c6569,0x72746e45,0x00000079,0x00040005,0x000001c5,0x61726170,0x0000006d,0x00040005, + 0x000001c7,0x61726170,0x0000006d,0x00030005,0x000001d5,0x00005966,0x00030005,0x000001e8, + 0x00000070,0x00040005,0x000001ed,0x61726170,0x0000006d,0x00040005,0x000001f5,0x61726170, + 0x0000006d,0x00050005,0x000001ff,0x6e694c66,0x52726165,0x00006267,0x00040005,0x00000200, + 0x61726170,0x0000006d,0x00040005,0x00000204,0x61726170,0x0000006d,0x00040005,0x0000020e, + 0x61726170,0x0000006d,0x00040005,0x00000210,0x61726170,0x0000006d,0x00040005,0x00000211, + 0x61726170,0x0000006d,0x00050005,0x00000218,0x6d754c66,0x6e616e69,0x00006563,0x00040005, + 0x0000021e,0x61726170,0x0000006d,0x00040005,0x00000221,0x61726170,0x0000006d,0x00040005, + 0x00000224,0x61726170,0x0000006d,0x00040005,0x00000227,0x61726170,0x0000006d,0x00040005, + 0x0000022a,0x61726170,0x0000006d,0x00040005,0x0000022d,0x61726170,0x0000006d,0x00050005, + 0x00000234,0x53785066,0x6c706d61,0x00000065,0x00040005,0x0000023d,0x61746164,0x00000000, + 0x00040005,0x00000243,0x46785066,0x00636172,0x00040005,0x00000244,0x61726170,0x0000006d, + 0x00070005,0x00000270,0x69766564,0x6f546563,0x77656956,0x74706544,0x00000068,0x00030005, + 0x0000029b,0x0000006d,0x00040005,0x0000029c,0x61726170,0x0000006d,0x00040005,0x0000029d, + 0x61726170,0x0000006d,0x00040005,0x000002a4,0x61726170,0x0000006d,0x00040005,0x000002a5, + 0x61726170,0x0000006d,0x00050005,0x000002b3,0x69725075,0x7469726f,0x00000079,0x00040005, + 0x000002c3,0x6b636170,0x00586465,0x00040005,0x000002c5,0x61726170,0x0000006d,0x00040005, + 0x000002ca,0x6b636170,0x00596465,0x00040005,0x000002cc,0x61726170,0x0000006d,0x00040005, + 0x000002d7,0x61726170,0x0000006d,0x00040005,0x000002d9,0x61726170,0x0000006d,0x00060005, + 0x000002db,0x69725075,0x7469726f,0x63614679,0x00726f74,0x00040005,0x000002e5,0x61726170, + 0x0000006d,0x00040005,0x000002e6,0x61726170,0x0000006d,0x00070005,0x000002eb,0x49765566, + 0x7263536e,0x536e6565,0x65636170,0x00000000,0x00070005,0x000002f3,0x73694466,0x74726f74, + 0x466e6f69,0x646c6569,0x00007655,0x00040005,0x000002f4,0x61726170,0x0000006d,0x00080005, + 0x000002f7,0x73694469,0x74726f74,0x506e6f69,0x6c657869,0x7366664f,0x00007465,0x00090005, + 0x000002fd,0x49765566,0x746e496e,0x6f707265,0x6974616c,0x65526e6f,0x74537463,0x00747261, + 0x00070005,0x00000303,0x4c765566,0x65747465,0x786f4272,0x6c616353,0x00000065,0x00080005, + 0x00000309,0x49765566,0x746e496e,0x6f707265,0x6974616c,0x65526e6f,0x00007463,0x00060005, + 0x0000030f,0x70654466,0x61536874,0x656c706d,0x00000000,0x00040005,0x00000313,0x61726170, + 0x0000006d,0x00070005,0x00000315,0x6d614766,0x746f4d65,0x566e6f69,0x6f746365,0x00000072, + 0x00040005,0x00000319,0x61726170,0x0000006d,0x00070005,0x0000031b,0x746f4d66,0x566e6f69, + 0x6f746365,0x6c614872,0x00000066,0x00080005,0x0000031e,0x746e4966,0x6f707265,0x6574616c, + 0x636f4c64,0x6f697461,0x0076556e,0x00060005,0x00000322,0x65695666,0x61705377,0x65446563, + 0x00687470,0x00040005,0x00000323,0x61726170,0x0000006d,0x00090005,0x00000326,0x67694875, + 0x69725068,0x7469726f,0x63614679,0x50726f74,0x616d6972,0x00007972,0x00040005,0x00000327, + 0x61726170,0x0000006d,0x00070005,0x0000032a,0x76657270,0x6b636142,0x66667562,0x6f437265, + 0x0000006c,0x00040005,0x00000330,0x61726170,0x0000006d,0x00070005,0x00000332,0x42727563, + 0x626b6361,0x65666675,0x6c6f4372,0x00000000,0x00040005,0x00000333,0x61726170,0x0000006d, + 0x00050005,0x00000336,0x76657270,0x616d754c,0x00000000,0x00040005,0x00000338,0x61726170, + 0x0000006d,0x00050005,0x0000033c,0x72727563,0x616d754c,0x00000000,0x00040005,0x0000033d, + 0x61726170,0x0000006d,0x00070005,0x00000341,0x776f4c75,0x6f697250,0x79746972,0x74636146, + 0x0000726f,0x00040005,0x00000345,0x61726170,0x0000006d,0x00040005,0x00000346,0x61726170, + 0x0000006d,0x00040005,0x0000034a,0x61726170,0x0000006d,0x00040005,0x00000352,0x61726170, + 0x0000006d,0x00070005,0x00000356,0x6b636170,0x65566465,0x726f7463,0x6d697250,0x00797261, + 0x00040005,0x00000358,0x61726170,0x0000006d,0x00040005,0x00000359,0x61726170,0x0000006d, + 0x00040005,0x0000035b,0x61726170,0x0000006d,0x00040005,0x0000035d,0x61726170,0x0000006d, + 0x00060005,0x00000360,0x696c6962,0x7261656e,0x6f666e49,0x00000000,0x00040005,0x00000362, + 0x61726170,0x0000006d,0x00040005,0x00000364,0x61726170,0x0000006d,0x00060005,0x00000367, + 0x6d615369,0x49656c70,0x7865646e,0x00000000,0x00040005,0x00000370,0x66664f69,0x00746573, + 0x00050005,0x00000374,0x6d615369,0x50656c70,0x0000736f,0x00040005,0x0000037a,0x61726170, + 0x0000006d,0x00040005,0x0000037c,0x61726170,0x0000006d,0x00040005,0x00000380,0x61726170, + 0x0000006d,0x00040005,0x00000382,0x61726170,0x0000006d,0x00080005,0x00000387,0x69725762, + 0x65536574,0x646e6f63,0x56797261,0x6f746365,0x00007372,0x00060005,0x00000391,0x69725762, + 0x65536574,0x646e6f63,0x00797261,0x00060005,0x00000392,0x6d754e75,0x6d697250,0x48797261, + 0x00737469,0x00070005,0x00000393,0x63655366,0x61646e6f,0x74537972,0x63537065,0x00656c61, + 0x00040005,0x00000399,0x65745366,0x00764d70,0x00050005,0x0000039c,0x65724266,0x69446b61, + 0x00007473,0x00040005,0x000003a0,0x61726170,0x0000006d,0x00040005,0x000003a1,0x61726170, + 0x0000006d,0x00050005,0x000003a3,0x53764d66,0x656c6163,0x00000000,0x00080005,0x000003af, + 0x63655366,0x61646e6f,0x6f4c7972,0x69746163,0x76556e6f,0x00000000,0x00060005,0x000003b5, + 0x696c6962,0x7261656e,0x6f666e49,0x00000000,0x00040005,0x000003b7,0x61726170,0x0000006d, + 0x00040005,0x000003b9,0x61726170,0x0000006d,0x000a0005,0x000003bb,0x67694875,0x69725068, + 0x7469726f,0x63614679,0x53726f74,0x6e6f6365,0x79726164,0x00000000,0x00040005,0x000003be, + 0x61726170,0x0000006d,0x00040005,0x000003bf,0x61726170,0x0000006d,0x00050005,0x000003c1, + 0x436f5466,0x65746e65,0x00000072,0x00040005,0x000003c8,0x61726170,0x0000006d,0x00040005, + 0x000003c9,0x61726170,0x0000006d,0x00080005,0x000003cd,0x6b636170,0x65566465,0x726f7463, + 0x6f636553,0x7261646e,0x00000079,0x00040005,0x000003cf,0x61726170,0x0000006d,0x00040005, + 0x000003d0,0x61726170,0x0000006d,0x00040005,0x000003d2,0x61726170,0x0000006d,0x00040005, + 0x000003d4,0x61726170,0x0000006d,0x00060005,0x000003d7,0x6d615369,0x49656c70,0x7865646e, + 0x00000000,0x00040005,0x000003df,0x66664f69,0x00746573,0x00050005,0x000003e3,0x6d615369, + 0x50656c70,0x0000736f,0x00040005,0x000003ec,0x61726170,0x0000006d,0x00040005,0x000003ee, + 0x61726170,0x0000006d,0x00090005,0x000003f4,0x69784575,0x6e697473,0x63655667,0x46726f74, + 0x646c6569,0x72746e45,0x00000079,0x00040005,0x000003f5,0x61726170,0x0000006d,0x00040005, + 0x000003f7,0x61726170,0x0000006d,0x00040005,0x000003fa,0x61726170,0x0000006d,0x00080005, + 0x0000040c,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00040005, + 0x00000410,0x61726170,0x0000006d,0x00030047,0x0000014a,0x00000002,0x00050048,0x0000014a, + 0x00000000,0x00000023,0x00000000,0x00050048,0x0000014a,0x00000001,0x00000023,0x00000008, + 0x00050048,0x0000014a,0x00000002,0x00000023,0x00000010,0x00050048,0x0000014a,0x00000003, + 0x00000023,0x00000018,0x00050048,0x0000014a,0x00000004,0x00000023,0x0000001c,0x00050048, + 0x0000014a,0x00000005,0x00000023,0x00000020,0x00050048,0x0000014a,0x00000006,0x00000023, + 0x00000028,0x00050048,0x0000014a,0x00000007,0x00000023,0x0000002c,0x00050048,0x0000014a, + 0x00000008,0x00000023,0x00000030,0x00050048,0x0000014a,0x00000009,0x00000023,0x00000040, + 0x00050048,0x0000014a,0x0000000a,0x00000023,0x00000044,0x00050048,0x0000014a,0x0000000b, + 0x00000023,0x00000048,0x00050048,0x0000014a,0x0000000c,0x00000023,0x00000050,0x00050048, + 0x0000014a,0x0000000d,0x00000023,0x00000058,0x00050048,0x0000014a,0x0000000e,0x00000023, + 0x0000005c,0x00050048,0x0000014a,0x0000000f,0x00000023,0x00000060,0x00050048,0x0000014a, + 0x00000010,0x00000023,0x00000068,0x00050048,0x0000014a,0x00000011,0x00000023,0x0000006c, + 0x00050048,0x0000014a,0x00000012,0x00000023,0x00000070,0x00050048,0x0000014a,0x00000013, + 0x00000023,0x00000078,0x00050048,0x0000014a,0x00000014,0x00000023,0x00000080,0x00050048, + 0x0000014a,0x00000015,0x00000023,0x0000008c,0x00050048,0x0000014a,0x00000016,0x00000023, + 0x00000090,0x00050048,0x0000014a,0x00000017,0x00000023,0x00000098,0x00050048,0x0000014a, + 0x00000018,0x00000023,0x0000009c,0x00050048,0x0000014a,0x00000019,0x00000023,0x000000a0, + 0x00050048,0x0000014a,0x0000001a,0x00000023,0x000000a8,0x00040047,0x0000014c,0x00000021, + 0x00000007,0x00040047,0x0000014c,0x00000022,0x00000000,0x00040047,0x0000017c,0x00000021, + 0x00000002,0x00040047,0x0000017c,0x00000022,0x00000000,0x00040047,0x00000180,0x00000021, + 0x000003e8,0x00040047,0x00000180,0x00000022,0x00000000,0x00040047,0x00000189,0x00000021, + 0x00000003,0x00040047,0x00000189,0x00000022,0x00000000,0x00040047,0x00000192,0x00000021, + 0x00000000,0x00040047,0x00000192,0x00000022,0x00000000,0x00040047,0x00000199,0x00000021, + 0x00000001,0x00040047,0x00000199,0x00000022,0x00000000,0x00040047,0x000001a0,0x00000021, + 0x00000004,0x00040047,0x000001a0,0x00000022,0x00000000,0x00040047,0x000001ab,0x00000021, + 0x00000005,0x00040047,0x000001ab,0x00000022,0x00000000,0x00040047,0x000001b2,0x00000021, + 0x00000006,0x00040047,0x000001b2,0x00000022,0x00000000,0x00040047,0x0000040c,0x0000000b, + 0x0000001c,0x00040047,0x0000041b,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021, + 0x00000003,0x00000002,0x00040015,0x00000006,0x00000020,0x00000000,0x00040020,0x00000007, + 0x00000007,0x00000006,0x00030016,0x00000008,0x00000020,0x00040021,0x00000009,0x00000008, + 0x00000007,0x00040020,0x0000000d,0x00000007,0x00000008,0x00040021,0x0000000e,0x00000006, + 0x0000000d,0x00040017,0x00000012,0x00000008,0x00000003,0x00040021,0x00000013,0x00000012, + 0x0000000d,0x00040020,0x00000017,0x00000007,0x00000012,0x00040021,0x00000018,0x00000012, + 0x00000017,0x00040017,0x0000001c,0x00000008,0x00000002,0x00040020,0x0000001d,0x00000007, + 0x0000001c,0x00040021,0x0000001e,0x0000001c,0x0000001d,0x00040021,0x00000022,0x00000008, + 0x0000000d,0x00050021,0x00000026,0x00000008,0x0000000d,0x0000000d,0x00050021,0x0000002f, + 0x00000006,0x00000007,0x00000007,0x00060021,0x00000038,0x00000012,0x00000017,0x00000017, + 0x00000017,0x00040015,0x00000047,0x00000020,0x00000001,0x00040017,0x00000048,0x00000047, + 0x00000002,0x00030021,0x00000049,0x00000048,0x00040017,0x00000052,0x00000008,0x00000004, + 0x00030021,0x00000053,0x00000052,0x00030021,0x00000056,0x00000006,0x00030021,0x00000059, + 0x00000008,0x00040021,0x0000005e,0x00000012,0x0000001d,0x00040020,0x00000065,0x00000007, + 0x00000048,0x00040021,0x00000066,0x0000001c,0x00000065,0x00040021,0x0000006a,0x00000008, + 0x00000065,0x00040017,0x00000071,0x00000006,0x00000002,0x00040020,0x00000072,0x00000007, + 0x00000071,0x00050021,0x00000073,0x00000002,0x00000065,0x00000072,0x00050021,0x00000078, + 0x00000006,0x00000065,0x00000072,0x00040021,0x0000007d,0x00000008,0x00000017,0x00060021, + 0x00000084,0x00000012,0x00000017,0x0000000d,0x0000000d,0x0004002b,0x00000006,0x00000090, + 0x00000004,0x0004001c,0x00000091,0x00000048,0x00000090,0x0004001c,0x00000092,0x00000008, + 0x00000090,0x0005001e,0x00000093,0x00000091,0x00000092,0x00000048,0x00050021,0x00000094, + 0x00000093,0x0000001d,0x00000065,0x00020014,0x0000009c,0x00050021,0x0000009d,0x0000009c, + 0x00000065,0x00000065,0x00040021,0x000000a2,0x0000009c,0x0000001d,0x00050021,0x000000a6, + 0x00000008,0x00000008,0x00000008,0x00040021,0x000000ab,0x0000009c,0x00000007,0x00040020, + 0x000000af,0x00000007,0x0000009c,0x00070021,0x000000b0,0x00000071,0x000000af,0x00000007, + 0x00000007,0x0000001d,0x00040021,0x000000ba,0x00000002,0x00000065,0x0004002b,0x00000008, + 0x000000c3,0x00000000,0x0004002b,0x00000008,0x000000cf,0x3f800000,0x0004002b,0x00000006, + 0x00000100,0xff800000,0x0004002b,0x00000008,0x0000010c,0x3c4fcd9e,0x0004002b,0x00000008, + 0x00000111,0x3f560008,0x0004002b,0x00000008,0x00000117,0x4196d014,0x0004002b,0x00000008, + 0x0000011a,0x41958000,0x0004002b,0x00000008,0x00000121,0x40c8e061,0x0004002b,0x00000008, + 0x00000128,0x3d25aee6,0x0004002b,0x00000008,0x00000129,0x3d9e8391,0x0004002b,0x00000008, + 0x0000012a,0x4019999a,0x0006002c,0x00000012,0x0000012b,0x00000128,0x00000129,0x0000012a, + 0x0004002b,0x00000008,0x0000012d,0x3f72a76e,0x0004002b,0x00000008,0x0000012e,0x3d558919, + 0x0005002c,0x0000001c,0x0000012f,0x0000012d,0x0000012e,0x001d001e,0x0000014a,0x00000048, + 0x00000048,0x0000001c,0x00000008,0x00000008,0x00000048,0x00000047,0x00000047,0x00000052, + 0x00000008,0x00000047,0x00000048,0x0000001c,0x00000047,0x00000006,0x00000048,0x00000047, + 0x00000047,0x00000048,0x00000048,0x00000012,0x00000006,0x0000001c,0x00000008,0x00000047, + 0x0000001c,0x0000001c,0x00040020,0x0000014b,0x00000002,0x0000014a,0x0004003b,0x0000014b, + 0x0000014c,0x00000002,0x0004002b,0x00000047,0x0000014d,0x00000012,0x00040020,0x0000014e, + 0x00000002,0x00000048,0x0004002b,0x00000047,0x00000153,0x00000013,0x0004002b,0x00000047, + 0x00000158,0x00000000,0x0004002b,0x00000047,0x0000015d,0x00000001,0x0004002b,0x00000047, + 0x00000162,0x00000008,0x00040020,0x00000163,0x00000002,0x00000052,0x0004002b,0x00000047, + 0x00000168,0x00000015,0x00040020,0x00000169,0x00000002,0x00000006,0x0004002b,0x00000047, + 0x0000016e,0x00000016,0x0004002b,0x00000006,0x0000016f,0x00000000,0x00040020,0x00000170, + 0x00000002,0x00000008,0x0004002b,0x00000006,0x00000175,0x00000001,0x00090019,0x0000017a, + 0x00000008,0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x00040020, + 0x0000017b,0x00000000,0x0000017a,0x0004003b,0x0000017b,0x0000017c,0x00000000,0x0002001a, + 0x0000017e,0x00040020,0x0000017f,0x00000000,0x0000017e,0x0004003b,0x0000017f,0x00000180, + 0x00000000,0x0003001b,0x00000182,0x0000017a,0x0004003b,0x0000017b,0x00000189,0x00000000, + 0x0004003b,0x0000017b,0x00000192,0x00000000,0x0004003b,0x0000017b,0x00000199,0x00000000, + 0x0004003b,0x0000017b,0x000001a0,0x00000000,0x00090019,0x000001a9,0x00000006,0x00000001, + 0x00000000,0x00000000,0x00000000,0x00000002,0x00000021,0x00040020,0x000001aa,0x00000000, + 0x000001a9,0x0004003b,0x000001aa,0x000001ab,0x00000000,0x00040020,0x000001af,0x0000000b, + 0x00000006,0x0004003b,0x000001aa,0x000001b2,0x00000000,0x0004002b,0x00000008,0x000001ce, + 0x3e59b3d0,0x0004002b,0x00000008,0x000001cf,0x3f371759,0x0004002b,0x00000008,0x000001d0, + 0x3d93dd98,0x0006002c,0x00000012,0x000001d1,0x000001ce,0x000001cf,0x000001d0,0x0004002b, + 0x00000008,0x000001d6,0x3e86809d,0x0004002b,0x00000008,0x000001da,0x3f2d9168,0x0004002b, + 0x00000008,0x000001df,0x3d72e48f,0x0004002b,0x00000006,0x000001e0,0x00000002,0x0004002b, + 0x00000008,0x000001eb,0x42a00000,0x0004002b,0x00000008,0x00000207,0x461c4000,0x0004002b, + 0x00000008,0x00000239,0x3f000000,0x0005002c,0x0000001c,0x0000023a,0x00000239,0x00000239, + 0x00040020,0x0000023c,0x00000007,0x00000093,0x0004002b,0x00000047,0x0000023e,0x00000002, + 0x0005002c,0x00000048,0x00000247,0x00000158,0x00000158,0x0005002c,0x00000048,0x00000249, + 0x0000015d,0x00000158,0x0005002c,0x00000048,0x0000024b,0x00000158,0x0000015d,0x0004002b, + 0x00000047,0x0000024d,0x00000003,0x0005002c,0x00000048,0x0000024e,0x0000015d,0x0000015d, + 0x00040020,0x0000026f,0x00000007,0x00000052,0x00040017,0x0000027f,0x0000009c,0x00000002, + 0x0004002b,0x00000006,0x000002ae,0x80000000,0x0004002b,0x00000006,0x000002b8,0x000003ff, + 0x0004002b,0x00000006,0x000002ba,0x00000015,0x0004002b,0x00000006,0x000002be,0x0000001f, + 0x0004002b,0x00000006,0x000002c0,0x00000010,0x0004002b,0x00000008,0x000002d6,0x3ea8f5c3, + 0x0004002b,0x00000008,0x000002e2,0x447fc000,0x0004002b,0x00000008,0x00000337,0x3a83126f, + 0x0004002b,0x00000008,0x00000348,0x41f80000,0x00030029,0x0000009c,0x00000357,0x00040020, + 0x00000366,0x00000007,0x00000047,0x0004002b,0x00000047,0x0000036e,0x00000004,0x0004002b, + 0x00000008,0x0000039f,0x3f3504f3,0x0003002a,0x0000009c,0x000003ce,0x0004002b,0x00000006, + 0x00000402,0x00000003,0x00040017,0x0000040a,0x00000006,0x00000003,0x00040020,0x0000040b, + 0x00000001,0x0000040a,0x0004003b,0x0000040b,0x0000040c,0x00000001,0x0004002b,0x00000008, + 0x00000412,0x387fda40,0x0004002b,0x00000008,0x00000413,0x477fe000,0x0004002b,0x00000008, + 0x00000414,0x37801002,0x0004002b,0x00000008,0x00000415,0x7f7fffff,0x0004002b,0x00000008, + 0x00000416,0x00800000,0x0004002b,0x00000006,0x00000417,0x00000020,0x0004002b,0x00000006, + 0x00000418,0x00000005,0x0004002b,0x00000006,0x00000419,0x0000000a,0x0004002b,0x00000006, + 0x0000041a,0x00000008,0x0006002c,0x0000040a,0x0000041b,0x0000041a,0x0000041a,0x00000175, + 0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b, + 0x00000065,0x00000410,0x00000007,0x0004003d,0x0000040a,0x0000040d,0x0000040c,0x0007004f, + 0x00000071,0x0000040e,0x0000040d,0x0000040d,0x00000000,0x00000001,0x0004007c,0x00000048, + 0x0000040f,0x0000040e,0x0003003e,0x00000410,0x0000040f,0x00050039,0x00000002,0x00000411, + 0x000000bc,0x00000410,0x000100fd,0x00010038,0x00050036,0x00000008,0x0000000b,0x00000000, + 0x00000009,0x00030037,0x00000007,0x0000000a,0x000200f8,0x0000000c,0x0004003d,0x00000006, + 0x000000be,0x0000000a,0x0004007c,0x00000008,0x000000bf,0x000000be,0x000200fe,0x000000bf, + 0x00010038,0x00050036,0x00000006,0x00000010,0x00000000,0x0000000e,0x00030037,0x0000000d, + 0x0000000f,0x000200f8,0x00000011,0x0004003d,0x00000008,0x000000c2,0x0000000f,0x00050050, + 0x0000001c,0x000000c4,0x000000c2,0x000000c3,0x0006000c,0x00000006,0x000000c5,0x00000001, + 0x0000003a,0x000000c4,0x000200fe,0x000000c5,0x00010038,0x00050036,0x00000012,0x00000015, + 0x00000000,0x00000013,0x00030037,0x0000000d,0x00000014,0x000200f8,0x00000016,0x0004003d, + 0x00000008,0x000000c8,0x00000014,0x00060050,0x00000012,0x000000c9,0x000000c8,0x000000c8, + 0x000000c8,0x000200fe,0x000000c9,0x00010038,0x00050036,0x00000012,0x0000001a,0x00000000, + 0x00000018,0x00030037,0x00000017,0x00000019,0x000200f8,0x0000001b,0x0004003b,0x0000000d, + 0x000000cd,0x00000007,0x0004003b,0x0000000d,0x000000d0,0x00000007,0x0004003d,0x00000012, + 0x000000cc,0x00000019,0x0003003e,0x000000cd,0x000000c3,0x00050039,0x00000012,0x000000ce, + 0x00000015,0x000000cd,0x0003003e,0x000000d0,0x000000cf,0x00050039,0x00000012,0x000000d1, + 0x00000015,0x000000d0,0x0008000c,0x00000012,0x000000d2,0x00000001,0x0000002b,0x000000cc, + 0x000000ce,0x000000d1,0x000200fe,0x000000d2,0x00010038,0x00050036,0x0000001c,0x00000020, + 0x00000000,0x0000001e,0x00030037,0x0000001d,0x0000001f,0x000200f8,0x00000021,0x0004003d, + 0x0000001c,0x000000d5,0x0000001f,0x0006000c,0x0000001c,0x000000d6,0x00000001,0x0000000a, + 0x000000d5,0x000200fe,0x000000d6,0x00010038,0x00050036,0x00000008,0x00000024,0x00000000, + 0x00000022,0x00030037,0x0000000d,0x00000023,0x000200f8,0x00000025,0x0004003d,0x00000008, + 0x000000d9,0x00000023,0x0006000c,0x00000008,0x000000da,0x00000001,0x00000002,0x000000d9, + 0x000200fe,0x000000da,0x00010038,0x00050036,0x00000008,0x00000029,0x00000000,0x00000026, + 0x00030037,0x0000000d,0x00000027,0x00030037,0x0000000d,0x00000028,0x000200f8,0x0000002a, + 0x0004003d,0x00000008,0x000000dd,0x00000027,0x0004003d,0x00000008,0x000000de,0x00000028, + 0x0007000c,0x00000008,0x000000df,0x00000001,0x00000025,0x000000dd,0x000000de,0x000200fe, + 0x000000df,0x00010038,0x00050036,0x00000008,0x0000002d,0x00000000,0x00000026,0x00030037, + 0x0000000d,0x0000002b,0x00030037,0x0000000d,0x0000002c,0x000200f8,0x0000002e,0x0004003d, + 0x00000008,0x000000e2,0x0000002b,0x0004003d,0x00000008,0x000000e3,0x0000002c,0x0007000c, + 0x00000008,0x000000e4,0x00000001,0x00000028,0x000000e2,0x000000e3,0x000200fe,0x000000e4, + 0x00010038,0x00050036,0x00000006,0x00000032,0x00000000,0x0000002f,0x00030037,0x00000007, + 0x00000030,0x00030037,0x00000007,0x00000031,0x000200f8,0x00000033,0x0004003d,0x00000006, + 0x000000e7,0x00000030,0x0004003d,0x00000006,0x000000e8,0x00000031,0x0007000c,0x00000006, + 0x000000e9,0x00000001,0x00000029,0x000000e7,0x000000e8,0x000200fe,0x000000e9,0x00010038, + 0x00050036,0x00000008,0x00000036,0x00000000,0x00000026,0x00030037,0x0000000d,0x00000034, + 0x00030037,0x0000000d,0x00000035,0x000200f8,0x00000037,0x0004003d,0x00000008,0x000000ec, + 0x00000034,0x0004003d,0x00000008,0x000000ed,0x00000035,0x0007000c,0x00000008,0x000000ee, + 0x00000001,0x0000001a,0x000000ec,0x000000ed,0x000200fe,0x000000ee,0x00010038,0x00050036, + 0x00000012,0x0000003c,0x00000000,0x00000038,0x00030037,0x00000017,0x00000039,0x00030037, + 0x00000017,0x0000003a,0x00030037,0x00000017,0x0000003b,0x000200f8,0x0000003d,0x0004003b, + 0x00000017,0x000000f1,0x00000007,0x0004003d,0x00000012,0x000000f2,0x00000039,0x0004007f, + 0x00000012,0x000000f3,0x000000f2,0x0004003d,0x00000012,0x000000f4,0x0000003b,0x00050085, + 0x00000012,0x000000f5,0x000000f3,0x000000f4,0x0004003d,0x00000012,0x000000f6,0x0000003b, + 0x00050081,0x00000012,0x000000f7,0x000000f5,0x000000f6,0x0003003e,0x000000f1,0x000000f7, + 0x0004003d,0x00000012,0x000000f8,0x00000039,0x0004003d,0x00000012,0x000000f9,0x0000003a, + 0x00050085,0x00000012,0x000000fa,0x000000f8,0x000000f9,0x0004003d,0x00000012,0x000000fb, + 0x000000f1,0x00050081,0x00000012,0x000000fc,0x000000fa,0x000000fb,0x000200fe,0x000000fc, + 0x00010038,0x00050036,0x00000012,0x0000003f,0x00000000,0x00000018,0x00030037,0x00000017, + 0x0000003e,0x000200f8,0x00000040,0x0004003b,0x00000007,0x00000101,0x00000007,0x0004003b, + 0x0000000d,0x00000103,0x00000007,0x0004003b,0x00000017,0x00000106,0x00000007,0x0004003d, + 0x00000012,0x000000ff,0x0000003e,0x0003003e,0x00000101,0x00000100,0x00050039,0x00000008, + 0x00000102,0x0000000b,0x00000101,0x0003003e,0x00000103,0x00000102,0x00050039,0x00000012, + 0x00000104,0x00000015,0x00000103,0x00050085,0x00000012,0x00000105,0x000000ff,0x00000104, + 0x0003003e,0x00000106,0x00000105,0x00050039,0x00000012,0x00000107,0x0000001a,0x00000106, + 0x000200fe,0x00000107,0x00010038,0x00050036,0x00000012,0x00000042,0x00000000,0x00000018, + 0x00030037,0x00000017,0x00000041,0x000200f8,0x00000043,0x0004003b,0x00000017,0x0000010a, + 0x00000007,0x0004003b,0x0000000d,0x0000010d,0x00000007,0x0004003b,0x0000000d,0x00000112, + 0x00000007,0x0004003b,0x00000017,0x00000115,0x00000007,0x0004003b,0x0000000d,0x00000118, + 0x00000007,0x0004003b,0x0000000d,0x0000011b,0x00000007,0x0004003b,0x0000000d,0x00000122, + 0x00000007,0x0004003d,0x00000012,0x0000010b,0x00000041,0x0003003e,0x0000010d,0x0000010c, + 0x00050039,0x00000012,0x0000010e,0x00000015,0x0000010d,0x0007000c,0x00000012,0x0000010f, + 0x00000001,0x0000001a,0x0000010b,0x0000010e,0x0003003e,0x0000010a,0x0000010f,0x0004003d, + 0x00000012,0x00000110,0x0000010a,0x0003003e,0x00000112,0x00000111,0x00050039,0x00000012, + 0x00000113,0x00000015,0x00000112,0x00050083,0x00000012,0x00000114,0x00000110,0x00000113, + 0x0003003e,0x00000115,0x00000114,0x00050039,0x00000012,0x00000116,0x0000001a,0x00000115, + 0x0003003e,0x00000118,0x00000117,0x00050039,0x00000012,0x00000119,0x00000015,0x00000118, + 0x0003003e,0x0000011b,0x0000011a,0x00050039,0x00000012,0x0000011c,0x00000015,0x0000011b, + 0x0004003d,0x00000012,0x0000011d,0x0000010a,0x00050085,0x00000012,0x0000011e,0x0000011c, + 0x0000011d,0x00050083,0x00000012,0x0000011f,0x00000119,0x0000011e,0x00050088,0x00000012, + 0x00000120,0x00000116,0x0000011f,0x0003003e,0x00000122,0x00000121,0x00050039,0x00000012, + 0x00000123,0x00000015,0x00000122,0x0007000c,0x00000012,0x00000124,0x00000001,0x0000001a, + 0x00000120,0x00000123,0x000200fe,0x00000124,0x00010038,0x00050036,0x00000012,0x00000045, + 0x00000000,0x00000018,0x00030037,0x00000017,0x00000044,0x000200f8,0x00000046,0x0004003b, + 0x00000017,0x00000127,0x00000007,0x0004003b,0x0000001d,0x0000012c,0x00000007,0x0004003b, + 0x00000017,0x00000134,0x00000007,0x0004003b,0x00000017,0x00000144,0x00000007,0x0004003b, + 0x00000017,0x00000145,0x00000007,0x0004003b,0x00000017,0x00000146,0x00000007,0x0003003e, + 0x00000127,0x0000012b,0x0003003e,0x0000012c,0x0000012f,0x0004003d,0x00000012,0x00000130, + 0x00000044,0x0004003d,0x00000012,0x00000131,0x00000127,0x0008004f,0x00000012,0x00000132, + 0x00000131,0x00000131,0x00000000,0x00000000,0x00000000,0x00050083,0x00000012,0x00000133, + 0x00000130,0x00000132,0x0003003e,0x00000134,0x00000133,0x00050039,0x00000012,0x00000135, + 0x0000003f,0x00000134,0x0004003d,0x00000012,0x00000136,0x00000044,0x0004003d,0x00000012, + 0x00000137,0x00000127,0x0008004f,0x00000012,0x00000138,0x00000137,0x00000137,0x00000001, + 0x00000001,0x00000001,0x00050085,0x00000012,0x00000139,0x00000136,0x00000138,0x0004003d, + 0x00000012,0x0000013a,0x00000044,0x0004003d,0x0000001c,0x0000013b,0x0000012c,0x0008004f, + 0x00000012,0x0000013c,0x0000013b,0x0000013b,0x00000000,0x00000000,0x00000000,0x00050085, + 0x00000012,0x0000013d,0x0000013a,0x0000013c,0x0004003d,0x0000001c,0x0000013e,0x0000012c, + 0x0008004f,0x00000012,0x0000013f,0x0000013e,0x0000013e,0x00000001,0x00000001,0x00000001, + 0x00050081,0x00000012,0x00000140,0x0000013d,0x0000013f,0x0004003d,0x00000012,0x00000141, + 0x00000127,0x0008004f,0x00000012,0x00000142,0x00000141,0x00000141,0x00000002,0x00000002, + 0x00000002,0x0007000c,0x00000012,0x00000143,0x00000001,0x0000001a,0x00000140,0x00000142, + 0x0003003e,0x00000144,0x00000135,0x0003003e,0x00000145,0x00000139,0x0003003e,0x00000146, + 0x00000143,0x00070039,0x00000012,0x00000147,0x0000003c,0x00000144,0x00000145,0x00000146, + 0x000200fe,0x00000147,0x00010038,0x00050036,0x00000048,0x0000004a,0x00000000,0x00000049, + 0x000200f8,0x0000004b,0x00050041,0x0000014e,0x0000014f,0x0000014c,0x0000014d,0x0004003d, + 0x00000048,0x00000150,0x0000014f,0x000200fe,0x00000150,0x00010038,0x00050036,0x00000048, + 0x0000004c,0x00000000,0x00000049,0x000200f8,0x0000004d,0x00050041,0x0000014e,0x00000154, + 0x0000014c,0x00000153,0x0004003d,0x00000048,0x00000155,0x00000154,0x000200fe,0x00000155, + 0x00010038,0x00050036,0x00000048,0x0000004e,0x00000000,0x00000049,0x000200f8,0x0000004f, + 0x00050041,0x0000014e,0x00000159,0x0000014c,0x00000158,0x0004003d,0x00000048,0x0000015a, + 0x00000159,0x000200fe,0x0000015a,0x00010038,0x00050036,0x00000048,0x00000050,0x00000000, + 0x00000049,0x000200f8,0x00000051,0x00050041,0x0000014e,0x0000015e,0x0000014c,0x0000015d, + 0x0004003d,0x00000048,0x0000015f,0x0000015e,0x000200fe,0x0000015f,0x00010038,0x00050036, + 0x00000052,0x00000054,0x00000000,0x00000053,0x000200f8,0x00000055,0x00050041,0x00000163, + 0x00000164,0x0000014c,0x00000162,0x0004003d,0x00000052,0x00000165,0x00000164,0x000200fe, + 0x00000165,0x00010038,0x00050036,0x00000006,0x00000057,0x00000000,0x00000056,0x000200f8, + 0x00000058,0x00050041,0x00000169,0x0000016a,0x0000014c,0x00000168,0x0004003d,0x00000006, + 0x0000016b,0x0000016a,0x000200fe,0x0000016b,0x00010038,0x00050036,0x00000008,0x0000005a, + 0x00000000,0x00000059,0x000200f8,0x0000005b,0x00060041,0x00000170,0x00000171,0x0000014c, + 0x0000016e,0x0000016f,0x0004003d,0x00000008,0x00000172,0x00000171,0x000200fe,0x00000172, + 0x00010038,0x00050036,0x00000008,0x0000005c,0x00000000,0x00000059,0x000200f8,0x0000005d, + 0x00060041,0x00000170,0x00000176,0x0000014c,0x0000016e,0x00000175,0x0004003d,0x00000008, + 0x00000177,0x00000176,0x000200fe,0x00000177,0x00010038,0x00050036,0x00000012,0x00000060, + 0x00000000,0x0000005e,0x00030037,0x0000001d,0x0000005f,0x000200f8,0x00000061,0x0004003d, + 0x0000017a,0x0000017d,0x0000017c,0x0004003d,0x0000017e,0x00000181,0x00000180,0x00050056, + 0x00000182,0x00000183,0x0000017d,0x00000181,0x0004003d,0x0000001c,0x00000184,0x0000005f, + 0x00070058,0x00000052,0x00000185,0x00000183,0x00000184,0x00000002,0x000000c3,0x0008004f, + 0x00000012,0x00000186,0x00000185,0x00000185,0x00000000,0x00000001,0x00000002,0x000200fe, + 0x00000186,0x00010038,0x00050036,0x00000012,0x00000063,0x00000000,0x0000005e,0x00030037, + 0x0000001d,0x00000062,0x000200f8,0x00000064,0x0004003d,0x0000017a,0x0000018a,0x00000189, + 0x0004003d,0x0000017e,0x0000018b,0x00000180,0x00050056,0x00000182,0x0000018c,0x0000018a, + 0x0000018b,0x0004003d,0x0000001c,0x0000018d,0x00000062,0x00070058,0x00000052,0x0000018e, + 0x0000018c,0x0000018d,0x00000002,0x000000c3,0x0008004f,0x00000012,0x0000018f,0x0000018e, + 0x0000018e,0x00000000,0x00000001,0x00000002,0x000200fe,0x0000018f,0x00010038,0x00050036, + 0x0000001c,0x00000068,0x00000000,0x00000066,0x00030037,0x00000065,0x00000067,0x000200f8, + 0x00000069,0x0004003d,0x0000017a,0x00000193,0x00000192,0x0004003d,0x00000048,0x00000194, + 0x00000067,0x0007005f,0x00000052,0x00000195,0x00000193,0x00000194,0x00000002,0x00000158, + 0x0007004f,0x0000001c,0x00000196,0x00000195,0x00000195,0x00000000,0x00000001,0x000200fe, + 0x00000196,0x00010038,0x00050036,0x00000008,0x0000006c,0x00000000,0x0000006a,0x00030037, + 0x00000065,0x0000006b,0x000200f8,0x0000006d,0x0004003d,0x0000017a,0x0000019a,0x00000199, + 0x0004003d,0x00000048,0x0000019b,0x0000006b,0x0007005f,0x00000052,0x0000019c,0x0000019a, + 0x0000019b,0x00000002,0x00000158,0x00050051,0x00000008,0x0000019d,0x0000019c,0x00000000, + 0x000200fe,0x0000019d,0x00010038,0x00050036,0x0000001c,0x0000006f,0x00000000,0x0000001e, + 0x00030037,0x0000001d,0x0000006e,0x000200f8,0x00000070,0x0004003d,0x0000017a,0x000001a1, + 0x000001a0,0x0004003d,0x0000017e,0x000001a2,0x00000180,0x00050056,0x00000182,0x000001a3, + 0x000001a1,0x000001a2,0x0004003d,0x0000001c,0x000001a4,0x0000006e,0x00070058,0x00000052, + 0x000001a5,0x000001a3,0x000001a4,0x00000002,0x000000c3,0x0007004f,0x0000001c,0x000001a6, + 0x000001a5,0x000001a5,0x00000000,0x00000001,0x000200fe,0x000001a6,0x00010038,0x00050036, + 0x00000002,0x00000076,0x00000000,0x00000073,0x00030037,0x00000065,0x00000074,0x00030037, + 0x00000072,0x00000075,0x000200f8,0x00000077,0x0004003d,0x00000048,0x000001ac,0x00000074, + 0x00050041,0x00000007,0x000001ad,0x00000075,0x0000016f,0x0004003d,0x00000006,0x000001ae, + 0x000001ad,0x0006003c,0x000001af,0x000001b0,0x000001ab,0x000001ac,0x0000016f,0x000700ef, + 0x00000006,0x000001b1,0x000001b0,0x00000175,0x0000016f,0x000001ae,0x0004003d,0x00000048, + 0x000001b3,0x00000074,0x00050041,0x00000007,0x000001b4,0x00000075,0x00000175,0x0004003d, + 0x00000006,0x000001b5,0x000001b4,0x0006003c,0x000001af,0x000001b6,0x000001b2,0x000001b3, + 0x0000016f,0x000700ef,0x00000006,0x000001b7,0x000001b6,0x00000175,0x0000016f,0x000001b5, + 0x000100fd,0x00010038,0x00050036,0x00000006,0x0000007b,0x00000000,0x00000078,0x00030037, + 0x00000065,0x00000079,0x00030037,0x00000072,0x0000007a,0x000200f8,0x0000007c,0x0004003b, + 0x00000007,0x000001b8,0x00000007,0x0004003b,0x00000007,0x000001be,0x00000007,0x0004003b, + 0x00000007,0x000001c4,0x00000007,0x0004003b,0x00000007,0x000001c5,0x00000007,0x0004003b, + 0x00000007,0x000001c7,0x00000007,0x0004003d,0x00000048,0x000001b9,0x00000079,0x00050041, + 0x00000007,0x000001ba,0x0000007a,0x0000016f,0x0004003d,0x00000006,0x000001bb,0x000001ba, + 0x0006003c,0x000001af,0x000001bc,0x000001ab,0x000001b9,0x0000016f,0x000700ef,0x00000006, + 0x000001bd,0x000001bc,0x00000175,0x0000016f,0x000001bb,0x0003003e,0x000001b8,0x000001bd, + 0x0004003d,0x00000048,0x000001bf,0x00000079,0x00050041,0x00000007,0x000001c0,0x0000007a, + 0x00000175,0x0004003d,0x00000006,0x000001c1,0x000001c0,0x0006003c,0x000001af,0x000001c2, + 0x000001b2,0x000001bf,0x0000016f,0x000700ef,0x00000006,0x000001c3,0x000001c2,0x00000175, + 0x0000016f,0x000001c1,0x0003003e,0x000001be,0x000001c3,0x0004003d,0x00000006,0x000001c6, + 0x000001b8,0x0003003e,0x000001c5,0x000001c6,0x0004003d,0x00000006,0x000001c8,0x000001be, + 0x0003003e,0x000001c7,0x000001c8,0x00060039,0x00000006,0x000001c9,0x00000032,0x000001c5, + 0x000001c7,0x0003003e,0x000001c4,0x000001c9,0x0004003d,0x00000006,0x000001ca,0x000001c4, + 0x000200fe,0x000001ca,0x00010038,0x00050036,0x00000008,0x0000007f,0x00000000,0x0000007d, + 0x00030037,0x00000017,0x0000007e,0x000200f8,0x00000080,0x0004003d,0x00000012,0x000001cd, + 0x0000007e,0x00050094,0x00000008,0x000001d2,0x000001cd,0x000001d1,0x000200fe,0x000001d2, + 0x00010038,0x00050036,0x00000008,0x00000082,0x00000000,0x0000007d,0x00030037,0x00000017, + 0x00000081,0x000200f8,0x00000083,0x0004003b,0x0000000d,0x000001d5,0x00000007,0x00050041, + 0x0000000d,0x000001d7,0x00000081,0x0000016f,0x0004003d,0x00000008,0x000001d8,0x000001d7, + 0x00050085,0x00000008,0x000001d9,0x000001d6,0x000001d8,0x00050041,0x0000000d,0x000001db, + 0x00000081,0x00000175,0x0004003d,0x00000008,0x000001dc,0x000001db,0x00050085,0x00000008, + 0x000001dd,0x000001da,0x000001dc,0x00050081,0x00000008,0x000001de,0x000001d9,0x000001dd, + 0x00050041,0x0000000d,0x000001e1,0x00000081,0x000001e0,0x0004003d,0x00000008,0x000001e2, + 0x000001e1,0x00050085,0x00000008,0x000001e3,0x000001df,0x000001e2,0x00050081,0x00000008, + 0x000001e4,0x000001de,0x000001e3,0x0003003e,0x000001d5,0x000001e4,0x0004003d,0x00000008, + 0x000001e5,0x000001d5,0x000200fe,0x000001e5,0x00010038,0x00050036,0x00000012,0x00000088, + 0x00000000,0x00000084,0x00030037,0x00000017,0x00000085,0x00030037,0x0000000d,0x00000086, + 0x00030037,0x0000000d,0x00000087,0x000200f8,0x00000089,0x0004003b,0x00000017,0x000001e8, + 0x00000007,0x0004003b,0x0000000d,0x000001ed,0x00000007,0x0004003b,0x0000000d,0x000001f5, + 0x00000007,0x0004003d,0x00000012,0x000001e9,0x00000085,0x0004003d,0x00000008,0x000001ea, + 0x00000086,0x00050088,0x00000008,0x000001ec,0x000001ea,0x000001eb,0x0003003e,0x000001ed, + 0x000001ec,0x00050039,0x00000012,0x000001ee,0x00000015,0x000001ed,0x00050083,0x00000012, + 0x000001ef,0x000001e9,0x000001ee,0x0003003e,0x000001e8,0x000001ef,0x0004003d,0x00000012, + 0x000001f0,0x000001e8,0x0004003d,0x00000008,0x000001f1,0x00000087,0x0004003d,0x00000008, + 0x000001f2,0x00000086,0x00050083,0x00000008,0x000001f3,0x000001f1,0x000001f2,0x00050088, + 0x00000008,0x000001f4,0x000001f3,0x000001eb,0x0003003e,0x000001f5,0x000001f4,0x00050039, + 0x00000012,0x000001f6,0x00000015,0x000001f5,0x00050088,0x00000012,0x000001f7,0x000001f0, + 0x000001f6,0x000200fe,0x000001f7,0x00010038,0x00050036,0x00000012,0x0000008b,0x00000000, + 0x00000018,0x00030037,0x00000017,0x0000008a,0x000200f8,0x0000008c,0x0004003b,0x00000017, + 0x000001ff,0x00000007,0x0004003b,0x00000017,0x00000200,0x00000007,0x0004003b,0x00000017, + 0x00000204,0x00000007,0x0004003b,0x00000017,0x0000020e,0x00000007,0x0004003b,0x0000000d, + 0x00000210,0x00000007,0x0004003b,0x0000000d,0x00000211,0x00000007,0x00040039,0x00000006, + 0x000001fa,0x00000057,0x000300f7,0x000001fe,0x00000000,0x000900fb,0x000001fa,0x000001fe, + 0x00000000,0x000001fb,0x00000001,0x000001fc,0x00000002,0x000001fd,0x000200f8,0x000001fb, + 0x0004003d,0x00000012,0x00000201,0x0000008a,0x0003003e,0x00000200,0x00000201,0x00050039, + 0x00000012,0x00000202,0x00000045,0x00000200,0x0003003e,0x000001ff,0x00000202,0x000200f9, + 0x000001fe,0x000200f8,0x000001fc,0x0004003d,0x00000012,0x00000205,0x0000008a,0x0003003e, + 0x00000204,0x00000205,0x00050039,0x00000012,0x00000206,0x00000042,0x00000204,0x00040039, + 0x00000008,0x00000208,0x0000005c,0x00050088,0x00000008,0x00000209,0x00000207,0x00000208, + 0x0005008e,0x00000012,0x0000020a,0x00000206,0x00000209,0x0003003e,0x000001ff,0x0000020a, + 0x000200f9,0x000001fe,0x000200f8,0x000001fd,0x00040039,0x00000008,0x0000020c,0x0000005a, + 0x00040039,0x00000008,0x0000020d,0x0000005c,0x0004003d,0x00000012,0x0000020f,0x0000008a, + 0x0003003e,0x0000020e,0x0000020f,0x0003003e,0x00000210,0x0000020c,0x0003003e,0x00000211, + 0x0000020d,0x00070039,0x00000012,0x00000212,0x00000088,0x0000020e,0x00000210,0x00000211, + 0x0003003e,0x000001ff,0x00000212,0x000200f9,0x000001fe,0x000200f8,0x000001fe,0x0004003d, + 0x00000012,0x00000215,0x000001ff,0x000200fe,0x00000215,0x00010038,0x00050036,0x00000008, + 0x0000008e,0x00000000,0x0000007d,0x00030037,0x00000017,0x0000008d,0x000200f8,0x0000008f, + 0x0004003b,0x0000000d,0x00000218,0x00000007,0x0004003b,0x00000017,0x0000021e,0x00000007, + 0x0004003b,0x00000017,0x00000221,0x00000007,0x0004003b,0x00000017,0x00000224,0x00000007, + 0x0004003b,0x00000017,0x00000227,0x00000007,0x0004003b,0x00000017,0x0000022a,0x00000007, + 0x0004003b,0x00000017,0x0000022d,0x00000007,0x0003003e,0x00000218,0x000000c3,0x00040039, + 0x00000006,0x00000219,0x00000057,0x000300f7,0x0000021d,0x00000000,0x000900fb,0x00000219, + 0x0000021d,0x00000000,0x0000021a,0x00000001,0x0000021b,0x00000002,0x0000021c,0x000200f8, + 0x0000021a,0x0004003d,0x00000012,0x0000021f,0x0000008d,0x0003003e,0x0000021e,0x0000021f, + 0x00050039,0x00000012,0x00000220,0x0000008b,0x0000021e,0x0003003e,0x00000221,0x00000220, + 0x00050039,0x00000008,0x00000222,0x0000007f,0x00000221,0x0003003e,0x00000218,0x00000222, + 0x000200f9,0x0000021d,0x000200f8,0x0000021b,0x0004003d,0x00000012,0x00000225,0x0000008d, + 0x0003003e,0x00000224,0x00000225,0x00050039,0x00000012,0x00000226,0x0000008b,0x00000224, + 0x0003003e,0x00000227,0x00000226,0x00050039,0x00000008,0x00000228,0x00000082,0x00000227, + 0x0003003e,0x00000218,0x00000228,0x000200f9,0x0000021d,0x000200f8,0x0000021c,0x0004003d, + 0x00000012,0x0000022b,0x0000008d,0x0003003e,0x0000022a,0x0000022b,0x00050039,0x00000012, + 0x0000022c,0x0000008b,0x0000022a,0x0003003e,0x0000022d,0x0000022c,0x00050039,0x00000008, + 0x0000022e,0x0000007f,0x0000022d,0x0003003e,0x00000218,0x0000022e,0x000200f9,0x0000021d, + 0x000200f8,0x0000021d,0x0004003d,0x00000008,0x00000231,0x00000218,0x000200fe,0x00000231, + 0x00010038,0x00050036,0x00000093,0x00000097,0x00000000,0x00000094,0x00030037,0x0000001d, + 0x00000095,0x00030037,0x00000065,0x00000096,0x000200f8,0x00000098,0x0004003b,0x0000001d, + 0x00000234,0x00000007,0x0004003b,0x0000023c,0x0000023d,0x00000007,0x0004003b,0x0000001d, + 0x00000243,0x00000007,0x0004003b,0x0000001d,0x00000244,0x00000007,0x0004003d,0x0000001c, + 0x00000235,0x00000095,0x0004003d,0x00000048,0x00000236,0x00000096,0x0004006f,0x0000001c, + 0x00000237,0x00000236,0x00050085,0x0000001c,0x00000238,0x00000235,0x00000237,0x00050083, + 0x0000001c,0x0000023b,0x00000238,0x0000023a,0x0003003e,0x00000234,0x0000023b,0x0004003d, + 0x0000001c,0x0000023f,0x00000234,0x0006000c,0x0000001c,0x00000240,0x00000001,0x00000008, + 0x0000023f,0x0004006e,0x00000048,0x00000241,0x00000240,0x00050041,0x00000065,0x00000242, + 0x0000023d,0x0000023e,0x0003003e,0x00000242,0x00000241,0x0004003d,0x0000001c,0x00000245, + 0x00000234,0x0003003e,0x00000244,0x00000245,0x00050039,0x0000001c,0x00000246,0x00000020, + 0x00000244,0x0003003e,0x00000243,0x00000246,0x00060041,0x00000065,0x00000248,0x0000023d, + 0x00000158,0x00000158,0x0003003e,0x00000248,0x00000247,0x00060041,0x00000065,0x0000024a, + 0x0000023d,0x00000158,0x0000015d,0x0003003e,0x0000024a,0x00000249,0x00060041,0x00000065, + 0x0000024c,0x0000023d,0x00000158,0x0000023e,0x0003003e,0x0000024c,0x0000024b,0x00060041, + 0x00000065,0x0000024f,0x0000023d,0x00000158,0x0000024d,0x0003003e,0x0000024f,0x0000024e, + 0x00050041,0x0000000d,0x00000250,0x00000243,0x0000016f,0x0004003d,0x00000008,0x00000251, + 0x00000250,0x00050083,0x00000008,0x00000252,0x000000cf,0x00000251,0x00050041,0x0000000d, + 0x00000253,0x00000243,0x00000175,0x0004003d,0x00000008,0x00000254,0x00000253,0x00050083, + 0x00000008,0x00000255,0x000000cf,0x00000254,0x00050085,0x00000008,0x00000256,0x00000252, + 0x00000255,0x00060041,0x0000000d,0x00000257,0x0000023d,0x0000015d,0x00000158,0x0003003e, + 0x00000257,0x00000256,0x00050041,0x0000000d,0x00000258,0x00000243,0x0000016f,0x0004003d, + 0x00000008,0x00000259,0x00000258,0x00050041,0x0000000d,0x0000025a,0x00000243,0x00000175, + 0x0004003d,0x00000008,0x0000025b,0x0000025a,0x00050083,0x00000008,0x0000025c,0x000000cf, + 0x0000025b,0x00050085,0x00000008,0x0000025d,0x00000259,0x0000025c,0x00060041,0x0000000d, + 0x0000025e,0x0000023d,0x0000015d,0x0000015d,0x0003003e,0x0000025e,0x0000025d,0x00050041, + 0x0000000d,0x0000025f,0x00000243,0x0000016f,0x0004003d,0x00000008,0x00000260,0x0000025f, + 0x00050083,0x00000008,0x00000261,0x000000cf,0x00000260,0x00050041,0x0000000d,0x00000262, + 0x00000243,0x00000175,0x0004003d,0x00000008,0x00000263,0x00000262,0x00050085,0x00000008, + 0x00000264,0x00000261,0x00000263,0x00060041,0x0000000d,0x00000265,0x0000023d,0x0000015d, + 0x0000023e,0x0003003e,0x00000265,0x00000264,0x00050041,0x0000000d,0x00000266,0x00000243, + 0x0000016f,0x0004003d,0x00000008,0x00000267,0x00000266,0x00050041,0x0000000d,0x00000268, + 0x00000243,0x00000175,0x0004003d,0x00000008,0x00000269,0x00000268,0x00050085,0x00000008, + 0x0000026a,0x00000267,0x00000269,0x00060041,0x0000000d,0x0000026b,0x0000023d,0x0000015d, + 0x0000024d,0x0003003e,0x0000026b,0x0000026a,0x0004003d,0x00000093,0x0000026c,0x0000023d, + 0x000200fe,0x0000026c,0x00010038,0x00050036,0x00000008,0x0000009a,0x00000000,0x00000022, + 0x00030037,0x0000000d,0x00000099,0x000200f8,0x0000009b,0x0004003b,0x0000026f,0x00000270, + 0x00000007,0x00040039,0x00000052,0x00000271,0x00000054,0x0003003e,0x00000270,0x00000271, + 0x00050041,0x0000000d,0x00000272,0x00000270,0x00000175,0x0004003d,0x00000008,0x00000273, + 0x00000272,0x0004003d,0x00000008,0x00000274,0x00000099,0x00050041,0x0000000d,0x00000275, + 0x00000270,0x0000016f,0x0004003d,0x00000008,0x00000276,0x00000275,0x00050083,0x00000008, + 0x00000277,0x00000274,0x00000276,0x00050088,0x00000008,0x00000278,0x00000273,0x00000277, + 0x000200fe,0x00000278,0x00010038,0x00050036,0x0000009c,0x000000a0,0x00000000,0x0000009d, + 0x00030037,0x00000065,0x0000009e,0x00030037,0x00000065,0x0000009f,0x000200f8,0x000000a1, + 0x0004003d,0x00000048,0x0000027b,0x0000009e,0x0004007c,0x00000071,0x0000027c,0x0000027b, + 0x0004003d,0x00000048,0x0000027d,0x0000009f,0x0004007c,0x00000071,0x0000027e,0x0000027d, + 0x000500b0,0x0000027f,0x00000280,0x0000027c,0x0000027e,0x0004009b,0x0000009c,0x00000281, + 0x00000280,0x000200fe,0x00000281,0x00010038,0x00050036,0x0000009c,0x000000a4,0x00000000, + 0x000000a2,0x00030037,0x0000001d,0x000000a3,0x000200f8,0x000000a5,0x00050041,0x0000000d, + 0x00000284,0x000000a3,0x0000016f,0x0004003d,0x00000008,0x00000285,0x00000284,0x000500ba, + 0x0000009c,0x00000286,0x00000285,0x000000c3,0x000300f7,0x00000288,0x00000000,0x000400fa, + 0x00000286,0x00000287,0x00000288,0x000200f8,0x00000287,0x00050041,0x0000000d,0x00000289, + 0x000000a3,0x0000016f,0x0004003d,0x00000008,0x0000028a,0x00000289,0x000500b8,0x0000009c, + 0x0000028b,0x0000028a,0x000000cf,0x000200f9,0x00000288,0x000200f8,0x00000288,0x000700f5, + 0x0000009c,0x0000028c,0x00000286,0x000000a5,0x0000028b,0x00000287,0x000300f7,0x0000028e, + 0x00000000,0x000400fa,0x0000028c,0x0000028d,0x0000028e,0x000200f8,0x0000028d,0x00050041, + 0x0000000d,0x0000028f,0x000000a3,0x00000175,0x0004003d,0x00000008,0x00000290,0x0000028f, + 0x000500ba,0x0000009c,0x00000291,0x00000290,0x000000c3,0x000300f7,0x00000293,0x00000000, + 0x000400fa,0x00000291,0x00000292,0x00000293,0x000200f8,0x00000292,0x00050041,0x0000000d, + 0x00000294,0x000000a3,0x00000175,0x0004003d,0x00000008,0x00000295,0x00000294,0x000500b8, + 0x0000009c,0x00000296,0x00000295,0x000000cf,0x000200f9,0x00000293,0x000200f8,0x00000293, + 0x000700f5,0x0000009c,0x00000297,0x00000291,0x0000028d,0x00000296,0x00000292,0x000200f9, + 0x0000028e,0x000200f8,0x0000028e,0x000700f5,0x0000009c,0x00000298,0x0000028c,0x00000288, + 0x00000297,0x00000293,0x000200fe,0x00000298,0x00010038,0x00050036,0x00000008,0x000000a9, + 0x00000000,0x000000a6,0x00030037,0x00000008,0x000000a7,0x00030037,0x00000008,0x000000a8, + 0x000200f8,0x000000aa,0x0004003b,0x0000000d,0x0000029b,0x00000007,0x0004003b,0x0000000d, + 0x0000029c,0x00000007,0x0004003b,0x0000000d,0x0000029d,0x00000007,0x0004003b,0x0000000d, + 0x000002a1,0x00000007,0x0004003b,0x0000000d,0x000002a4,0x00000007,0x0004003b,0x0000000d, + 0x000002a5,0x00000007,0x0003003e,0x0000029c,0x000000a7,0x0003003e,0x0000029d,0x000000a8, + 0x00060039,0x00000008,0x0000029e,0x0000002d,0x0000029c,0x0000029d,0x0003003e,0x0000029b, + 0x0000029e,0x0004003d,0x00000008,0x0000029f,0x0000029b,0x000500b7,0x0000009c,0x000002a0, + 0x0000029f,0x000000c3,0x000300f7,0x000002a3,0x00000000,0x000400fa,0x000002a0,0x000002a2, + 0x000002a9,0x000200f8,0x000002a2,0x0003003e,0x000002a4,0x000000a7,0x0003003e,0x000002a5, + 0x000000a8,0x00060039,0x00000008,0x000002a6,0x00000029,0x000002a4,0x000002a5,0x0004003d, + 0x00000008,0x000002a7,0x0000029b,0x00050088,0x00000008,0x000002a8,0x000002a6,0x000002a7, + 0x0003003e,0x000002a1,0x000002a8,0x000200f9,0x000002a3,0x000200f8,0x000002a9,0x0003003e, + 0x000002a1,0x000000c3,0x000200f9,0x000002a3,0x000200f8,0x000002a3,0x0004003d,0x00000008, + 0x000002aa,0x000002a1,0x000200fe,0x000002aa,0x00010038,0x00050036,0x0000009c,0x000000ad, + 0x00000000,0x000000ab,0x00030037,0x00000007,0x000000ac,0x000200f8,0x000000ae,0x0004003d, + 0x00000006,0x000002ad,0x000000ac,0x000500c7,0x00000006,0x000002af,0x000002ad,0x000002ae, + 0x000500ab,0x0000009c,0x000002b0,0x000002af,0x0000016f,0x000200fe,0x000002b0,0x00010038, + 0x00050036,0x00000071,0x000000b5,0x00000000,0x000000b0,0x00030037,0x000000af,0x000000b1, + 0x00030037,0x00000007,0x000000b2,0x00030037,0x00000007,0x000000b3,0x00030037,0x0000001d, + 0x000000b4,0x000200f8,0x000000b6,0x0004003b,0x00000007,0x000002b3,0x00000007,0x0004003b, + 0x00000007,0x000002c3,0x00000007,0x0004003b,0x0000000d,0x000002c5,0x00000007,0x0004003b, + 0x00000007,0x000002ca,0x00000007,0x0004003b,0x0000000d,0x000002cc,0x00000007,0x0004003d, + 0x0000009c,0x000002b4,0x000000b1,0x000600a9,0x00000006,0x000002b5,0x000002b4,0x00000175, + 0x0000016f,0x00050084,0x00000006,0x000002b6,0x000002b5,0x000002ae,0x0004003d,0x00000006, + 0x000002b7,0x000000b2,0x000500c7,0x00000006,0x000002b9,0x000002b7,0x000002b8,0x000500c4, + 0x00000006,0x000002bb,0x000002b9,0x000002ba,0x000500c5,0x00000006,0x000002bc,0x000002b6, + 0x000002bb,0x0004003d,0x00000006,0x000002bd,0x000000b3,0x000500c7,0x00000006,0x000002bf, + 0x000002bd,0x000002be,0x000500c4,0x00000006,0x000002c1,0x000002bf,0x000002c0,0x000500c5, + 0x00000006,0x000002c2,0x000002bc,0x000002c1,0x0003003e,0x000002b3,0x000002c2,0x0004003d, + 0x00000006,0x000002c4,0x000002b3,0x00050041,0x0000000d,0x000002c6,0x000000b4,0x0000016f, + 0x0004003d,0x00000008,0x000002c7,0x000002c6,0x0003003e,0x000002c5,0x000002c7,0x00050039, + 0x00000006,0x000002c8,0x00000010,0x000002c5,0x000500c5,0x00000006,0x000002c9,0x000002c4, + 0x000002c8,0x0003003e,0x000002c3,0x000002c9,0x0004003d,0x00000006,0x000002cb,0x000002b3, + 0x00050041,0x0000000d,0x000002cd,0x000000b4,0x00000175,0x0004003d,0x00000008,0x000002ce, + 0x000002cd,0x0003003e,0x000002cc,0x000002ce,0x00050039,0x00000006,0x000002cf,0x00000010, + 0x000002cc,0x000500c5,0x00000006,0x000002d0,0x000002cb,0x000002cf,0x0003003e,0x000002ca, + 0x000002d0,0x0004003d,0x00000006,0x000002d1,0x000002c3,0x0004003d,0x00000006,0x000002d2, + 0x000002ca,0x00050050,0x00000071,0x000002d3,0x000002d1,0x000002d2,0x000200fe,0x000002d3, + 0x00010038,0x00050036,0x00000006,0x000000b8,0x00000000,0x0000000e,0x00030037,0x0000000d, + 0x000000b7,0x000200f8,0x000000b9,0x0004003b,0x0000000d,0x000002d7,0x00000007,0x0004003b, + 0x0000000d,0x000002d9,0x00000007,0x0004003b,0x00000007,0x000002db,0x00000007,0x0004003b, + 0x00000007,0x000002e5,0x00000007,0x0004003b,0x00000007,0x000002e6,0x00000007,0x0004003d, + 0x00000008,0x000002d8,0x000000b7,0x0003003e,0x000002d7,0x000002d8,0x0003003e,0x000002d9, + 0x000002d6,0x00060039,0x00000008,0x000002da,0x00000036,0x000002d7,0x000002d9,0x0003003e, + 0x000000b7,0x000002da,0x0004003d,0x00000008,0x000002dc,0x000000b7,0x0004003d,0x00000008, + 0x000002dd,0x000000b7,0x00050081,0x00000008,0x000002de,0x000000cf,0x000002dd,0x00050088, + 0x00000008,0x000002df,0x000000cf,0x000002de,0x00050085,0x00000008,0x000002e0,0x000002dc, + 0x000002df,0x00050083,0x00000008,0x000002e1,0x000000cf,0x000002e0,0x00050085,0x00000008, + 0x000002e3,0x000002e1,0x000002e2,0x0004006d,0x00000006,0x000002e4,0x000002e3,0x0003003e, + 0x000002db,0x000002e4,0x0003003e,0x000002e5,0x00000175,0x0004003d,0x00000006,0x000002e7, + 0x000002db,0x0003003e,0x000002e6,0x000002e7,0x00060039,0x00000006,0x000002e8,0x00000032, + 0x000002e5,0x000002e6,0x000200fe,0x000002e8,0x00010038,0x00050036,0x00000002,0x000000bc, + 0x00000000,0x000000ba,0x00030037,0x00000065,0x000000bb,0x000200f8,0x000000bd,0x0004003b, + 0x0000001d,0x000002eb,0x00000007,0x0004003b,0x0000001d,0x000002f3,0x00000007,0x0004003b, + 0x0000001d,0x000002f4,0x00000007,0x0004003b,0x00000065,0x000002f7,0x00000007,0x0004003b, + 0x0000001d,0x000002fd,0x00000007,0x0004003b,0x0000001d,0x00000303,0x00000007,0x0004003b, + 0x0000001d,0x00000309,0x00000007,0x0004003b,0x0000000d,0x0000030f,0x00000007,0x0004003b, + 0x00000065,0x00000313,0x00000007,0x0004003b,0x0000001d,0x00000315,0x00000007,0x0004003b, + 0x00000065,0x00000319,0x00000007,0x0004003b,0x0000001d,0x0000031b,0x00000007,0x0004003b, + 0x0000001d,0x0000031e,0x00000007,0x0004003b,0x0000000d,0x00000322,0x00000007,0x0004003b, + 0x0000000d,0x00000323,0x00000007,0x0004003b,0x00000007,0x00000326,0x00000007,0x0004003b, + 0x0000000d,0x00000327,0x00000007,0x0004003b,0x00000017,0x0000032a,0x00000007,0x0004003b, + 0x0000001d,0x00000330,0x00000007,0x0004003b,0x00000017,0x00000332,0x00000007,0x0004003b, + 0x0000001d,0x00000333,0x00000007,0x0004003b,0x0000000d,0x00000336,0x00000007,0x0004003b, + 0x00000017,0x00000338,0x00000007,0x0004003b,0x0000000d,0x0000033c,0x00000007,0x0004003b, + 0x00000017,0x0000033d,0x00000007,0x0004003b,0x00000007,0x00000341,0x00000007,0x0004003b, + 0x0000000d,0x00000345,0x00000007,0x0004003b,0x0000000d,0x00000346,0x00000007,0x0004003b, + 0x0000000d,0x0000034a,0x00000007,0x0004003b,0x0000001d,0x00000352,0x00000007,0x0004003b, + 0x00000072,0x00000356,0x00000007,0x0004003b,0x000000af,0x00000358,0x00000007,0x0004003b, + 0x00000007,0x00000359,0x00000007,0x0004003b,0x00000007,0x0000035b,0x00000007,0x0004003b, + 0x0000001d,0x0000035d,0x00000007,0x0004003b,0x0000023c,0x00000360,0x00000007,0x0004003b, + 0x0000001d,0x00000362,0x00000007,0x0004003b,0x00000065,0x00000364,0x00000007,0x0004003b, + 0x00000366,0x00000367,0x00000007,0x0004003b,0x00000065,0x00000370,0x00000007,0x0004003b, + 0x00000065,0x00000374,0x00000007,0x0004003b,0x00000065,0x0000037a,0x00000007,0x0004003b, + 0x00000065,0x0000037c,0x00000007,0x0004003b,0x00000065,0x00000380,0x00000007,0x0004003b, + 0x00000072,0x00000382,0x00000007,0x0004003b,0x000000af,0x00000387,0x00000007,0x0004003b, + 0x000000af,0x00000391,0x00000007,0x0004003b,0x00000007,0x00000392,0x00000007,0x0004003b, + 0x0000000d,0x00000393,0x00000007,0x0004003b,0x0000001d,0x00000399,0x00000007,0x0004003b, + 0x0000000d,0x0000039c,0x00000007,0x0004003b,0x0000000d,0x000003a0,0x00000007,0x0004003b, + 0x0000000d,0x000003a1,0x00000007,0x0004003b,0x0000000d,0x000003a3,0x00000007,0x0004003b, + 0x0000001d,0x000003af,0x00000007,0x0004003b,0x0000023c,0x000003b5,0x00000007,0x0004003b, + 0x0000001d,0x000003b7,0x00000007,0x0004003b,0x00000065,0x000003b9,0x00000007,0x0004003b, + 0x00000007,0x000003bb,0x00000007,0x0004003b,0x00000007,0x000003be,0x00000007,0x0004003b, + 0x00000007,0x000003bf,0x00000007,0x0004003b,0x0000001d,0x000003c1,0x00000007,0x0004003b, + 0x0000000d,0x000003c8,0x00000007,0x0004003b,0x0000000d,0x000003c9,0x00000007,0x0004003b, + 0x00000072,0x000003cd,0x00000007,0x0004003b,0x000000af,0x000003cf,0x00000007,0x0004003b, + 0x00000007,0x000003d0,0x00000007,0x0004003b,0x00000007,0x000003d2,0x00000007,0x0004003b, + 0x0000001d,0x000003d4,0x00000007,0x0004003b,0x00000366,0x000003d7,0x00000007,0x0004003b, + 0x00000065,0x000003df,0x00000007,0x0004003b,0x00000065,0x000003e3,0x00000007,0x0004003b, + 0x00000065,0x000003ec,0x00000007,0x0004003b,0x00000065,0x000003ee,0x00000007,0x0004003b, + 0x00000007,0x000003f4,0x00000007,0x0004003b,0x00000065,0x000003f5,0x00000007,0x0004003b, + 0x00000072,0x000003f7,0x00000007,0x0004003b,0x00000007,0x000003fa,0x00000007,0x0004003d, + 0x00000048,0x000002ec,0x000000bb,0x0004006f,0x0000001c,0x000002ed,0x000002ec,0x00050050, + 0x0000001c,0x000002ee,0x00000239,0x00000239,0x00050081,0x0000001c,0x000002ef,0x000002ed, + 0x000002ee,0x00040039,0x00000048,0x000002f0,0x0000004e,0x0004006f,0x0000001c,0x000002f1, + 0x000002f0,0x00050088,0x0000001c,0x000002f2,0x000002ef,0x000002f1,0x0003003e,0x000002eb, + 0x000002f2,0x0004003d,0x0000001c,0x000002f5,0x000002eb,0x0003003e,0x000002f4,0x000002f5, + 0x00050039,0x0000001c,0x000002f6,0x0000006f,0x000002f4,0x0003003e,0x000002f3,0x000002f6, + 0x0004003d,0x0000001c,0x000002f8,0x000002f3,0x00040039,0x00000048,0x000002f9,0x0000004e, + 0x0004006f,0x0000001c,0x000002fa,0x000002f9,0x00050085,0x0000001c,0x000002fb,0x000002f8, + 0x000002fa,0x0004006e,0x00000048,0x000002fc,0x000002fb,0x0003003e,0x000002f7,0x000002fc, + 0x00040039,0x00000048,0x000002fe,0x0000004a,0x0004006f,0x0000001c,0x000002ff,0x000002fe, + 0x00040039,0x00000048,0x00000300,0x00000050,0x0004006f,0x0000001c,0x00000301,0x00000300, + 0x00050088,0x0000001c,0x00000302,0x000002ff,0x00000301,0x0003003e,0x000002fd,0x00000302, + 0x00040039,0x00000048,0x00000304,0x0000004c,0x0004006f,0x0000001c,0x00000305,0x00000304, + 0x00040039,0x00000048,0x00000306,0x00000050,0x0004006f,0x0000001c,0x00000307,0x00000306, + 0x00050088,0x0000001c,0x00000308,0x00000305,0x00000307,0x0003003e,0x00000303,0x00000308, + 0x0004003d,0x0000001c,0x0000030a,0x000002fd,0x0004003d,0x0000001c,0x0000030b,0x000002eb, + 0x0004003d,0x0000001c,0x0000030c,0x00000303,0x00050085,0x0000001c,0x0000030d,0x0000030b, + 0x0000030c,0x00050081,0x0000001c,0x0000030e,0x0000030a,0x0000030d,0x0003003e,0x00000309, + 0x0000030e,0x0004003d,0x00000048,0x00000310,0x000000bb,0x0004003d,0x00000048,0x00000311, + 0x000002f7,0x00050080,0x00000048,0x00000312,0x00000310,0x00000311,0x0003003e,0x00000313, + 0x00000312,0x00050039,0x00000008,0x00000314,0x0000006c,0x00000313,0x0003003e,0x0000030f, + 0x00000314,0x0004003d,0x00000048,0x00000316,0x000000bb,0x0004003d,0x00000048,0x00000317, + 0x000002f7,0x00050080,0x00000048,0x00000318,0x00000316,0x00000317,0x0003003e,0x00000319, + 0x00000318,0x00050039,0x0000001c,0x0000031a,0x00000068,0x00000319,0x0003003e,0x00000315, + 0x0000031a,0x0004003d,0x0000001c,0x0000031c,0x00000315,0x0005008e,0x0000001c,0x0000031d, + 0x0000031c,0x00000239,0x0003003e,0x0000031b,0x0000031d,0x0004003d,0x0000001c,0x0000031f, + 0x000002eb,0x0004003d,0x0000001c,0x00000320,0x0000031b,0x00050081,0x0000001c,0x00000321, + 0x0000031f,0x00000320,0x0003003e,0x0000031e,0x00000321,0x0004003d,0x00000008,0x00000324, + 0x0000030f,0x0003003e,0x00000323,0x00000324,0x00050039,0x00000008,0x00000325,0x0000009a, + 0x00000323,0x0003003e,0x00000322,0x00000325,0x0004003d,0x00000008,0x00000328,0x00000322, + 0x0003003e,0x00000327,0x00000328,0x00050039,0x00000006,0x00000329,0x000000b8,0x00000327, + 0x0003003e,0x00000326,0x00000329,0x0004003d,0x0000001c,0x0000032b,0x00000309,0x0004003d, + 0x0000001c,0x0000032c,0x00000315,0x0004003d,0x0000001c,0x0000032d,0x00000303,0x00050085, + 0x0000001c,0x0000032e,0x0000032c,0x0000032d,0x00050081,0x0000001c,0x0000032f,0x0000032b, + 0x0000032e,0x0003003e,0x00000330,0x0000032f,0x00050039,0x00000012,0x00000331,0x00000060, + 0x00000330,0x0003003e,0x0000032a,0x00000331,0x0004003d,0x0000001c,0x00000334,0x00000309, + 0x0003003e,0x00000333,0x00000334,0x00050039,0x00000012,0x00000335,0x00000063,0x00000333, + 0x0003003e,0x00000332,0x00000335,0x0004003d,0x00000012,0x00000339,0x0000032a,0x0003003e, + 0x00000338,0x00000339,0x00050039,0x00000008,0x0000033a,0x0000008e,0x00000338,0x00050081, + 0x00000008,0x0000033b,0x00000337,0x0000033a,0x0003003e,0x00000336,0x0000033b,0x0004003d, + 0x00000012,0x0000033e,0x00000332,0x0003003e,0x0000033d,0x0000033e,0x00050039,0x00000008, + 0x0000033f,0x0000008e,0x0000033d,0x00050081,0x00000008,0x00000340,0x00000337,0x0000033f, + 0x0003003e,0x0000033c,0x00000340,0x0004003d,0x00000008,0x00000342,0x00000336,0x0004003d, + 0x00000008,0x00000343,0x0000033c,0x00060039,0x00000008,0x00000344,0x000000a9,0x00000342, + 0x00000343,0x0003003e,0x00000345,0x00000344,0x0003003e,0x00000346,0x000000cf,0x00060039, + 0x00000008,0x00000347,0x00000036,0x00000345,0x00000346,0x00050085,0x00000008,0x00000349, + 0x00000347,0x00000348,0x0003003e,0x0000034a,0x00000349,0x00050039,0x00000008,0x0000034b, + 0x00000024,0x0000034a,0x0004006d,0x00000006,0x0000034c,0x0000034b,0x0004003d,0x0000001c, + 0x0000034d,0x00000309,0x0004003d,0x0000001c,0x0000034e,0x00000315,0x0004003d,0x0000001c, + 0x0000034f,0x00000303,0x00050085,0x0000001c,0x00000350,0x0000034e,0x0000034f,0x00050081, + 0x0000001c,0x00000351,0x0000034d,0x00000350,0x0003003e,0x00000352,0x00000351,0x00050039, + 0x0000009c,0x00000353,0x000000a4,0x00000352,0x000600a9,0x00000006,0x00000354,0x00000353, + 0x00000175,0x0000016f,0x00050084,0x00000006,0x00000355,0x0000034c,0x00000354,0x0003003e, + 0x00000341,0x00000355,0x0003003e,0x00000358,0x00000357,0x0004003d,0x00000006,0x0000035a, + 0x00000326,0x0003003e,0x00000359,0x0000035a,0x0004003d,0x00000006,0x0000035c,0x00000341, + 0x0003003e,0x0000035b,0x0000035c,0x0004003d,0x0000001c,0x0000035e,0x0000031b,0x0003003e, + 0x0000035d,0x0000035e,0x00080039,0x00000071,0x0000035f,0x000000b5,0x00000358,0x00000359, + 0x0000035b,0x0000035d,0x0003003e,0x00000356,0x0000035f,0x00040039,0x00000048,0x00000361, + 0x0000004e,0x0004003d,0x0000001c,0x00000363,0x0000031e,0x0003003e,0x00000362,0x00000363, + 0x0003003e,0x00000364,0x00000361,0x00060039,0x00000093,0x00000365,0x00000097,0x00000362, + 0x00000364,0x0003003e,0x00000360,0x00000365,0x0003003e,0x00000367,0x00000158,0x000200f9, + 0x00000368,0x000200f8,0x00000368,0x000400f6,0x0000036a,0x0000036b,0x00000000,0x000200f9, + 0x0000036c,0x000200f8,0x0000036c,0x0004003d,0x00000047,0x0000036d,0x00000367,0x000500b1, + 0x0000009c,0x0000036f,0x0000036d,0x0000036e,0x000400fa,0x0000036f,0x00000369,0x0000036a, + 0x000200f8,0x00000369,0x0004003d,0x00000047,0x00000371,0x00000367,0x00060041,0x00000065, + 0x00000372,0x00000360,0x00000158,0x00000371,0x0004003d,0x00000048,0x00000373,0x00000372, + 0x0003003e,0x00000370,0x00000373,0x00050041,0x00000065,0x00000375,0x00000360,0x0000023e, + 0x0004003d,0x00000048,0x00000376,0x00000375,0x0004003d,0x00000048,0x00000377,0x00000370, + 0x00050080,0x00000048,0x00000378,0x00000376,0x00000377,0x0003003e,0x00000374,0x00000378, + 0x00040039,0x00000048,0x00000379,0x0000004e,0x0004003d,0x00000048,0x0000037b,0x00000374, + 0x0003003e,0x0000037a,0x0000037b,0x0003003e,0x0000037c,0x00000379,0x00060039,0x0000009c, + 0x0000037d,0x000000a0,0x0000037a,0x0000037c,0x000300f7,0x0000037f,0x00000000,0x000400fa, + 0x0000037d,0x0000037e,0x0000037f,0x000200f8,0x0000037e,0x0004003d,0x00000048,0x00000381, + 0x00000374,0x0003003e,0x00000380,0x00000381,0x0004003d,0x00000071,0x00000383,0x00000356, + 0x0003003e,0x00000382,0x00000383,0x00060039,0x00000002,0x00000384,0x00000076,0x00000380, + 0x00000382,0x000200f9,0x0000037f,0x000200f8,0x0000037f,0x000200f9,0x0000036b,0x000200f8, + 0x0000036b,0x0004003d,0x00000047,0x00000385,0x00000367,0x00050080,0x00000047,0x00000386, + 0x00000385,0x0000015d,0x0003003e,0x00000367,0x00000386,0x000200f9,0x00000368,0x000200f8, + 0x0000036a,0x0004003d,0x0000001c,0x00000388,0x0000031b,0x00040039,0x00000048,0x00000389, + 0x0000004e,0x0004006f,0x0000001c,0x0000038a,0x00000389,0x00050085,0x0000001c,0x0000038b, + 0x00000388,0x0000038a,0x0006000c,0x00000008,0x0000038c,0x00000001,0x00000042,0x0000038b, + 0x000500ba,0x0000009c,0x0000038d,0x0000038c,0x00000337,0x0003003e,0x00000387,0x0000038d, + 0x0004003d,0x0000009c,0x0000038e,0x00000387,0x000300f7,0x00000390,0x00000000,0x000400fa, + 0x0000038e,0x0000038f,0x00000390,0x000200f8,0x0000038f,0x0003003e,0x00000391,0x00000357, + 0x0003003e,0x00000392,0x0000016f,0x00040039,0x00000048,0x00000394,0x0000004e,0x0004006f, + 0x0000001c,0x00000395,0x00000394,0x00050050,0x0000001c,0x00000396,0x000000cf,0x000000cf, + 0x00050088,0x0000001c,0x00000397,0x00000396,0x00000395,0x0006000c,0x00000008,0x00000398, + 0x00000001,0x00000042,0x00000397,0x0003003e,0x00000393,0x00000398,0x0004003d,0x0000001c, + 0x0000039a,0x00000315,0x0006000c,0x0000001c,0x0000039b,0x00000001,0x00000045,0x0000039a, + 0x0003003e,0x00000399,0x0000039b,0x0004003d,0x0000001c,0x0000039d,0x0000031b,0x0006000c, + 0x00000008,0x0000039e,0x00000001,0x00000042,0x0000039d,0x0003003e,0x000003a0,0x0000039e, + 0x0003003e,0x000003a1,0x0000039f,0x00060039,0x00000008,0x000003a2,0x00000029,0x000003a0, + 0x000003a1,0x0003003e,0x0000039c,0x000003a2,0x0004003d,0x00000008,0x000003a4,0x00000393, + 0x0003003e,0x000003a3,0x000003a4,0x000200f9,0x000003a5,0x000200f8,0x000003a5,0x000400f6, + 0x000003a7,0x000003a8,0x00000000,0x000200f9,0x000003a9,0x000200f8,0x000003a9,0x0004003d, + 0x00000008,0x000003aa,0x000003a3,0x0004003d,0x00000008,0x000003ab,0x0000039c,0x000500bc, + 0x0000009c,0x000003ac,0x000003aa,0x000003ab,0x0004003d,0x0000009c,0x000003ad,0x00000391, + 0x000500a7,0x0000009c,0x000003ae,0x000003ac,0x000003ad,0x000400fa,0x000003ae,0x000003a6, + 0x000003a7,0x000200f8,0x000003a6,0x0004003d,0x0000001c,0x000003b0,0x0000031e,0x0004003d, + 0x0000001c,0x000003b1,0x00000399,0x0004003d,0x00000008,0x000003b2,0x000003a3,0x0005008e, + 0x0000001c,0x000003b3,0x000003b1,0x000003b2,0x00050083,0x0000001c,0x000003b4,0x000003b0, + 0x000003b3,0x0003003e,0x000003af,0x000003b4,0x00040039,0x00000048,0x000003b6,0x0000004e, + 0x0004003d,0x0000001c,0x000003b8,0x000003af,0x0003003e,0x000003b7,0x000003b8,0x0003003e, + 0x000003b9,0x000003b6,0x00060039,0x00000093,0x000003ba,0x00000097,0x000003b7,0x000003b9, + 0x0003003e,0x000003b5,0x000003ba,0x0004003d,0x00000006,0x000003bc,0x00000326,0x00050082, + 0x00000006,0x000003bd,0x000002b8,0x000003bc,0x0003003e,0x000003be,0x00000175,0x0003003e, + 0x000003bf,0x000003bd,0x00060039,0x00000006,0x000003c0,0x00000032,0x000003be,0x000003bf, + 0x0003003e,0x000003bb,0x000003c0,0x0004003d,0x0000001c,0x000003c2,0x000003af,0x00050083, + 0x0000001c,0x000003c3,0x0000023a,0x000003c2,0x0006000c,0x0000001c,0x000003c4,0x00000001, + 0x00000045,0x000003c3,0x0003003e,0x000003c1,0x000003c4,0x0004003d,0x0000001c,0x000003c5, + 0x000003c1,0x0004003d,0x0000001c,0x000003c6,0x00000399,0x00050094,0x00000008,0x000003c7, + 0x000003c5,0x000003c6,0x0003003e,0x000003c8,0x000000c3,0x0003003e,0x000003c9,0x000003c7, + 0x00060039,0x00000008,0x000003ca,0x0000002d,0x000003c8,0x000003c9,0x00050085,0x00000008, + 0x000003cb,0x000003ca,0x00000348,0x0004006d,0x00000006,0x000003cc,0x000003cb,0x0003003e, + 0x00000341,0x000003cc,0x0003003e,0x000003cf,0x000003ce,0x0004003d,0x00000006,0x000003d1, + 0x000003bb,0x0003003e,0x000003d0,0x000003d1,0x0004003d,0x00000006,0x000003d3,0x00000341, + 0x0003003e,0x000003d2,0x000003d3,0x0004003d,0x0000001c,0x000003d5,0x0000031b,0x0003003e, + 0x000003d4,0x000003d5,0x00080039,0x00000071,0x000003d6,0x000000b5,0x000003cf,0x000003d0, + 0x000003d2,0x000003d4,0x0003003e,0x000003cd,0x000003d6,0x0003003e,0x000003d7,0x00000158, + 0x000200f9,0x000003d8,0x000200f8,0x000003d8,0x000400f6,0x000003da,0x000003db,0x00000000, + 0x000200f9,0x000003dc,0x000200f8,0x000003dc,0x0004003d,0x00000047,0x000003dd,0x000003d7, + 0x000500b1,0x0000009c,0x000003de,0x000003dd,0x0000015d,0x000400fa,0x000003de,0x000003d9, + 0x000003da,0x000200f8,0x000003d9,0x0004003d,0x00000047,0x000003e0,0x000003d7,0x00060041, + 0x00000065,0x000003e1,0x000003b5,0x00000158,0x000003e0,0x0004003d,0x00000048,0x000003e2, + 0x000003e1,0x0003003e,0x000003df,0x000003e2,0x00050041,0x00000065,0x000003e4,0x000003b5, + 0x0000023e,0x0004003d,0x00000048,0x000003e5,0x000003e4,0x0004003d,0x00000048,0x000003e6, + 0x000003df,0x00050080,0x00000048,0x000003e7,0x000003e5,0x000003e6,0x0003003e,0x000003e3, + 0x000003e7,0x0004003d,0x0000009c,0x000003e8,0x00000391,0x000300f7,0x000003ea,0x00000000, + 0x000400fa,0x000003e8,0x000003e9,0x000003ea,0x000200f8,0x000003e9,0x00040039,0x00000048, + 0x000003eb,0x0000004e,0x0004003d,0x00000048,0x000003ed,0x000003e3,0x0003003e,0x000003ec, + 0x000003ed,0x0003003e,0x000003ee,0x000003eb,0x00060039,0x0000009c,0x000003ef,0x000000a0, + 0x000003ec,0x000003ee,0x000200f9,0x000003ea,0x000200f8,0x000003ea,0x000700f5,0x0000009c, + 0x000003f0,0x000003e8,0x000003d9,0x000003ef,0x000003e9,0x0003003e,0x00000391,0x000003f0, + 0x0004003d,0x0000009c,0x000003f1,0x00000391,0x000300f7,0x000003f3,0x00000000,0x000400fa, + 0x000003f1,0x000003f2,0x000003f3,0x000200f8,0x000003f2,0x0004003d,0x00000048,0x000003f6, + 0x000003e3,0x0003003e,0x000003f5,0x000003f6,0x0004003d,0x00000071,0x000003f8,0x000003cd, + 0x0003003e,0x000003f7,0x000003f8,0x00060039,0x00000006,0x000003f9,0x0000007b,0x000003f5, + 0x000003f7,0x0003003e,0x000003f4,0x000003f9,0x0004003d,0x00000006,0x000003fb,0x000003f4, + 0x0003003e,0x000003fa,0x000003fb,0x00050039,0x0000009c,0x000003fc,0x000000ad,0x000003fa, + 0x000600a9,0x00000006,0x000003fd,0x000003fc,0x00000175,0x0000016f,0x0004003d,0x00000006, + 0x000003fe,0x00000392,0x00050080,0x00000006,0x000003ff,0x000003fe,0x000003fd,0x0003003e, + 0x00000392,0x000003ff,0x0004003d,0x0000009c,0x00000400,0x00000391,0x0004003d,0x00000006, + 0x00000401,0x00000392,0x000500b2,0x0000009c,0x00000403,0x00000401,0x00000402,0x000500a7, + 0x0000009c,0x00000404,0x00000400,0x00000403,0x0003003e,0x00000391,0x00000404,0x000200f9, + 0x000003f3,0x000200f8,0x000003f3,0x000200f9,0x000003db,0x000200f8,0x000003db,0x0004003d, + 0x00000047,0x00000405,0x000003d7,0x00050080,0x00000047,0x00000406,0x00000405,0x0000015d, + 0x0003003e,0x000003d7,0x00000406,0x000200f9,0x000003d8,0x000200f8,0x000003da,0x000200f9, + 0x000003a8,0x000200f8,0x000003a8,0x0004003d,0x00000008,0x00000407,0x00000393,0x0004003d, + 0x00000008,0x00000408,0x000003a3,0x00050081,0x00000008,0x00000409,0x00000408,0x00000407, + 0x0003003e,0x000003a3,0x00000409,0x000200f9,0x000003a5,0x000200f8,0x000003a7,0x000200f9, + 0x00000390,0x000200f8,0x00000390,0x000100fd,0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_fi_game_vector_field_inpainting_pyramid_comp_spv.h b/gpu/vk/shaders/fsr3_fi_game_vector_field_inpainting_pyramid_comp_spv.h new file mode 100644 index 000000000..84eac9dc3 --- /dev/null +++ b/gpu/vk/shaders/fsr3_fi_game_vector_field_inpainting_pyramid_comp_spv.h @@ -0,0 +1,1551 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_FI_GAME_VECTOR_FIELD_INPAINTING_PYRAMID_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x0000075c,0x00000000,0x00020011,0x00000001,0x00020011, + 0x0000003d,0x00020011,0x00000044,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e, + 0x00000000,0x0003000e,0x00000000,0x00000001,0x0007000f,0x00000005,0x00000004,0x6e69616d, + 0x00000000,0x00000748,0x0000074c,0x00060010,0x00000004,0x00000011,0x00000100,0x00000001, + 0x00000001,0x00030003,0x00000002,0x000001c2,0x000b0004,0x455f4c47,0x735f5458,0x6c706d61, + 0x656c7265,0x745f7373,0x75747865,0x665f6572,0x74636e75,0x736e6f69,0x00000000,0x000b0004, + 0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d, + 0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79, + 0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45, + 0x64756c63,0x69645f65,0x74636572,0x00657669,0x00090004,0x4b5f4c47,0x735f5248,0x65646168, + 0x75735f72,0x6f726762,0x625f7075,0x63697361,0x00000000,0x00080004,0x4b5f4c47,0x735f5248, + 0x65646168,0x75735f72,0x6f726762,0x715f7075,0x00646175,0x00040005,0x00000004,0x6e69616d, + 0x00000000,0x000a0005,0x0000000c,0x42786666,0x69667469,0x45646c65,0x61727478,0x75287463, + 0x31753b31,0x3b31753b,0x00000000,0x00030005,0x00000009,0x00637273,0x00030005,0x0000000a, + 0x0066666f,0x00040005,0x0000000b,0x73746962,0x00000000,0x000a0005,0x00000011,0x42786666, + 0x69667469,0x49646c65,0x7265736e,0x73614d74,0x3175286b,0x3b31753b,0x003b3175,0x00030005, + 0x0000000e,0x00637273,0x00030005,0x0000000f,0x00736e69,0x00040005,0x00000010,0x73746962, + 0x00000000,0x00070005,0x00000017,0x55786666,0x6361706e,0x3233466b,0x3b317528,0x00000000, + 0x00030005,0x00000016,0x00000075,0x000a0005,0x0000001c,0x52786666,0x70616d65,0x57726f46, + 0x52657661,0x63756465,0x6e6f6974,0x3b317528,0x00000000,0x00030005,0x0000001b,0x00000061, + 0x00060005,0x00000021,0x70736944,0x5379616c,0x28657a69,0x00000000,0x00050005,0x00000024, + 0x4d6d754e,0x28737069,0x00000000,0x00060005,0x00000026,0x576d754e,0x476b726f,0x70756f72, + 0x00002873,0x00070005,0x00000029,0x6b726f57,0x756f7247,0x66664f70,0x28746573,0x00000000, + 0x00080005,0x0000002e,0x64616f4c,0x656d6147,0x6c656946,0x28764d64,0x3b326976,0x00000000, + 0x00050005,0x0000002d,0x53785069,0x6c706d61,0x00000065,0x00070005,0x00000034,0x726f7453, + 0x756f4365,0x7265746e,0x3b316928,0x003b3175,0x00040005,0x00000032,0x50785069,0x0000736f, + 0x00040005,0x00000033,0x6e756f63,0x00726574,0x000a0005,0x00000038,0x6d6f7441,0x6e496369, + 0x61657263,0x6f436573,0x65746e75,0x31692872,0x3b31753b,0x00000000,0x00040005,0x00000036, + 0x50785069,0x0000736f,0x00040005,0x00000037,0x56646c6f,0x00006c61,0x000a0005,0x0000003e, + 0x6f4c5752,0x6e496461,0x6e696170,0x676e6974,0x61727950,0x2864696d,0x3b326976,0x003b3175, + 0x00040005,0x0000003c,0x50785069,0x0000736f,0x00040005,0x0000003d,0x65646e69,0x00000078, + 0x000b0005,0x00000045,0x726f7453,0x706e4965,0x746e6961,0x50676e69,0x6d617279,0x76286469, + 0x763b3269,0x753b3466,0x00003b31,0x00040005,0x00000042,0x50785069,0x0000736f,0x00050005, + 0x00000043,0x5674756f,0x65756c61,0x00000000,0x00040005,0x00000044,0x65646e69,0x00000078, + 0x000b0005,0x0000004a,0x6b636150,0x65566465,0x726f7463,0x6c656946,0x746e4564,0x73497972, + 0x6d697250,0x28797261,0x003b3175,0x00050005,0x00000049,0x6b636170,0x6e456465,0x00797274, + 0x00070005,0x0000004d,0x74636556,0x6946726f,0x45646c65,0x7972746e,0x00000000,0x00070006, + 0x0000004d,0x00000000,0x746f4d66,0x566e6f69,0x6f746365,0x00000072,0x00080006,0x0000004d, + 0x00000001,0x67694875,0x69725068,0x7469726f,0x63614679,0x00726f74,0x00080006,0x0000004d, + 0x00000002,0x776f4c75,0x6f697250,0x79746972,0x74636146,0x0000726f,0x00050006,0x0000004d, + 0x00000003,0x6c615662,0x00006469,0x00060006,0x0000004d,0x00000004,0x69725062,0x7972616d, + 0x00000000,0x00060006,0x0000004d,0x00000005,0x63655362,0x61646e6f,0x00007972,0x00060006, + 0x0000004d,0x00000006,0x506e4962,0x746e6961,0x00006465,0x00060006,0x0000004d,0x00000007, + 0x6c655666,0x7469636f,0x00000079,0x00060006,0x0000004d,0x00000008,0x67654e62,0x7374754f, + 0x00656469,0x00060006,0x0000004d,0x00000009,0x736f5062,0x7374754f,0x00656469,0x00180005, + 0x00000052,0x61706e55,0x65566b63,0x726f7463,0x6c656946,0x746e4564,0x73656972,0x32757628, + 0x7274733b,0x2d746375,0x74636556,0x6946726f,0x45646c65,0x7972746e,0x3266762d,0x2d31662d, + 0x622d3166,0x31622d31,0x2d31622d,0x662d3162,0x31622d31,0x3131622d,0x0000003b,0x00040005, + 0x00000050,0x6b636170,0x00006465,0x00050005,0x00000051,0x6c456676,0x6e656d65,0x00000074, + 0x00090005,0x00000056,0x4c647053,0x5364616f,0x6372756f,0x616d4965,0x76286567,0x753b3269, + 0x00003b31,0x00030005,0x00000054,0x00786574,0x00040005,0x00000055,0x63696c73,0x00000065, + 0x00060005,0x0000005a,0x4c647053,0x2864616f,0x3b326976,0x003b3175,0x00030005,0x00000058, + 0x00786574,0x00040005,0x00000059,0x63696c73,0x00000065,0x00080005,0x00000061,0x53647053, + 0x65726f74,0x32697628,0x3466763b,0x3b31753b,0x003b3175,0x00030005,0x0000005d,0x00786970, + 0x00050005,0x0000005e,0x5674756f,0x65756c61,0x00000000,0x00040005,0x0000005f,0x65646e69, + 0x00000078,0x00040005,0x00000060,0x63696c73,0x00000065,0x000a0005,0x00000065,0x49647053, + 0x6572636e,0x41657361,0x696d6f74,0x756f4363,0x7265746e,0x3b317528,0x00000000,0x00040005, + 0x00000064,0x63696c73,0x00000065,0x00080005,0x00000067,0x47647053,0x74417465,0x63696d6f, + 0x6e756f43,0x28726574,0x00000000,0x00090005,0x0000006a,0x52647053,0x74657365,0x6d6f7441, + 0x6f436369,0x65746e75,0x31752872,0x0000003b,0x00040005,0x00000069,0x63696c73,0x00000065, + 0x00090005,0x0000006f,0x4c647053,0x4964616f,0x7265746e,0x6964656d,0x28657461,0x753b3175, + 0x00003b31,0x00030005,0x0000006d,0x00000078,0x00030005,0x0000006e,0x00000079,0x000a0005, + 0x00000075,0x53647053,0x65726f74,0x65746e49,0x64656d72,0x65746169,0x3b317528,0x763b3175, + 0x003b3466,0x00030005,0x00000072,0x00000078,0x00030005,0x00000073,0x00000079,0x00040005, + 0x00000074,0x756c6176,0x00000065,0x00090005,0x0000007c,0x52647053,0x63756465,0x76283465, + 0x763b3466,0x763b3466,0x763b3466,0x003b3466,0x00030005,0x00000078,0x00003076,0x00030005, + 0x00000079,0x00003176,0x00030005,0x0000007a,0x00003276,0x00030005,0x0000007b,0x00003376, + 0x000a0005,0x0000007e,0x53786666,0x6f576470,0x72676b72,0x5370756f,0x66667568,0x6142656c, + 0x65697272,0x00002872,0x00090005,0x00000084,0x45647053,0x57746978,0x676b726f,0x70756f72, + 0x3b317528,0x753b3175,0x00003b31,0x00060005,0x00000081,0x576d756e,0x476b726f,0x70756f72, + 0x00000073,0x00080005,0x00000082,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e, + 0x00000000,0x00040005,0x00000083,0x63696c73,0x00000065,0x00070005,0x00000088,0x52647053, + 0x63756465,0x61755165,0x66762864,0x00003b34,0x00030005,0x00000087,0x00000076,0x000b0005, + 0x00000090,0x52647053,0x63756465,0x616f4c65,0x76283464,0x763b3275,0x763b3275,0x763b3275, + 0x753b3275,0x00003b31,0x00030005,0x0000008b,0x00003069,0x00030005,0x0000008c,0x00003169, + 0x00030005,0x0000008d,0x00003269,0x00030005,0x0000008e,0x00003369,0x00040005,0x0000008f, + 0x63696c73,0x00000065,0x00080005,0x00000095,0x52647053,0x63756465,0x616f4c65,0x76283464, + 0x753b3275,0x00003b31,0x00040005,0x00000093,0x65736162,0x00000000,0x00040005,0x00000094, + 0x63696c73,0x00000065,0x000e0005,0x0000009c,0x52647053,0x63756465,0x616f4c65,0x756f5364, + 0x49656372,0x6567616d,0x75762834,0x75763b32,0x75763b32,0x75763b32,0x31753b32,0x0000003b, + 0x00030005,0x00000097,0x00003069,0x00030005,0x00000098,0x00003169,0x00030005,0x00000099, + 0x00003269,0x00030005,0x0000009a,0x00003369,0x00040005,0x0000009b,0x63696c73,0x00000065, + 0x000b0005,0x000000a0,0x52647053,0x63756465,0x616f4c65,0x756f5364,0x49656372,0x6567616d, + 0x32757628,0x3b31753b,0x00000000,0x00040005,0x0000009e,0x65736162,0x00000000,0x00040005, + 0x0000009f,0x63696c73,0x00000065,0x00100005,0x000000a9,0x44647053,0x736e776f,0x6c706d61, + 0x70694d65,0x5f305f73,0x6e495f31,0x6e697274,0x73636973,0x3b317528,0x763b3175,0x753b3275, + 0x31753b31,0x3b31753b,0x00000000,0x00030005,0x000000a3,0x00000078,0x00030005,0x000000a4, + 0x00000079,0x00050005,0x000000a5,0x6b726f77,0x756f7247,0x00444970,0x00080005,0x000000a6, + 0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00030005,0x000000a7, + 0x0070696d,0x00040005,0x000000a8,0x63696c73,0x00000065,0x000d0005,0x000000b1,0x44647053, + 0x736e776f,0x6c706d61,0x70694d65,0x5f305f73,0x31752831,0x3b31753b,0x3b327576,0x753b3175, + 0x31753b31,0x0000003b,0x00030005,0x000000ab,0x00000078,0x00030005,0x000000ac,0x00000079, + 0x00050005,0x000000ad,0x6b726f77,0x756f7247,0x00444970,0x00080005,0x000000ae,0x61636f6c, + 0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00030005,0x000000af,0x0070696d, + 0x00040005,0x000000b0,0x63696c73,0x00000065,0x000c0005,0x000000b9,0x44647053,0x736e776f, + 0x6c706d61,0x70694d65,0x7528325f,0x31753b31,0x3275763b,0x3b31753b,0x753b3175,0x00003b31, + 0x00030005,0x000000b3,0x00000078,0x00030005,0x000000b4,0x00000079,0x00050005,0x000000b5, + 0x6b726f77,0x756f7247,0x00444970,0x00080005,0x000000b6,0x61636f6c,0x766e496c,0x7461636f, + 0x496e6f69,0x7865646e,0x00000000,0x00030005,0x000000b7,0x0070696d,0x00040005,0x000000b8, + 0x63696c73,0x00000065,0x000c0005,0x000000c1,0x44647053,0x736e776f,0x6c706d61,0x70694d65, + 0x7528335f,0x31753b31,0x3275763b,0x3b31753b,0x753b3175,0x00003b31,0x00030005,0x000000bb, + 0x00000078,0x00030005,0x000000bc,0x00000079,0x00050005,0x000000bd,0x6b726f77,0x756f7247, + 0x00444970,0x00080005,0x000000be,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e, + 0x00000000,0x00030005,0x000000bf,0x0070696d,0x00040005,0x000000c0,0x63696c73,0x00000065, + 0x000c0005,0x000000c9,0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x7528345f,0x31753b31, + 0x3275763b,0x3b31753b,0x753b3175,0x00003b31,0x00030005,0x000000c3,0x00000078,0x00030005, + 0x000000c4,0x00000079,0x00050005,0x000000c5,0x6b726f77,0x756f7247,0x00444970,0x00080005, + 0x000000c6,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00030005, + 0x000000c7,0x0070696d,0x00040005,0x000000c8,0x63696c73,0x00000065,0x000b0005,0x000000d0, + 0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x7628355f,0x753b3275,0x31753b31,0x3b31753b, + 0x00000000,0x00050005,0x000000cc,0x6b726f77,0x756f7247,0x00444970,0x00080005,0x000000cd, + 0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00030005,0x000000ce, + 0x0070696d,0x00040005,0x000000cf,0x63696c73,0x00000065,0x000b0005,0x000000d7,0x44647053, + 0x736e776f,0x6c706d61,0x70694d65,0x5f365f73,0x31752837,0x3b31753b,0x753b3175,0x00003b31, + 0x00030005,0x000000d3,0x00000078,0x00030005,0x000000d4,0x00000079,0x00040005,0x000000d5, + 0x7370696d,0x00000000,0x00040005,0x000000d6,0x63696c73,0x00000065,0x000e0005,0x000000e1, + 0x44647053,0x736e776f,0x6c706d61,0x78654e65,0x756f4674,0x31752872,0x3b31753b,0x3b327576, + 0x753b3175,0x31753b31,0x3b31753b,0x00000000,0x00030005,0x000000da,0x00000078,0x00030005, + 0x000000db,0x00000079,0x00050005,0x000000dc,0x6b726f77,0x756f7247,0x00444970,0x00080005, + 0x000000dd,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00040005, + 0x000000de,0x65736162,0x0070694d,0x00040005,0x000000df,0x7370696d,0x00000000,0x00040005, + 0x000000e0,0x63696c73,0x00000065,0x000a0005,0x000000e9,0x44647053,0x736e776f,0x6c706d61, + 0x75762865,0x31753b32,0x3b31753b,0x753b3175,0x00003b31,0x00050005,0x000000e4,0x6b726f77, + 0x756f7247,0x00444970,0x00080005,0x000000e5,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69, + 0x7865646e,0x00000000,0x00040005,0x000000e6,0x7370696d,0x00000000,0x00060005,0x000000e7, + 0x576d756e,0x476b726f,0x70756f72,0x00000073,0x00040005,0x000000e8,0x63696c73,0x00000065, + 0x000b0005,0x000000f2,0x44647053,0x736e776f,0x6c706d61,0x75762865,0x31753b32,0x3b31753b, + 0x753b3175,0x75763b31,0x00003b32,0x00050005,0x000000ec,0x6b726f77,0x756f7247,0x00444970, + 0x00080005,0x000000ed,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000, + 0x00040005,0x000000ee,0x7370696d,0x00000000,0x00060005,0x000000ef,0x576d756e,0x476b726f, + 0x70756f72,0x00000073,0x00040005,0x000000f0,0x63696c73,0x00000065,0x00060005,0x000000f1, + 0x6b726f77,0x756f7247,0x66664f70,0x00746573,0x00130005,0x000000f9,0x706d6f63,0x46657475, + 0x656d6172,0x65746e69,0x6c6f7072,0x6f697461,0x6d61476e,0x63655665,0x46726f74,0x646c6569, + 0x61706e49,0x69746e69,0x7950676e,0x696d6172,0x69762864,0x31693b33,0x0000003b,0x00050005, + 0x000000f7,0x6f724769,0x64497075,0x00000000,0x00050005,0x000000f8,0x636f4c69,0x6e496c61, + 0x00786564,0x00040005,0x00000111,0x61726170,0x0000006d,0x00040005,0x00000113,0x61726170, + 0x0000006d,0x00040005,0x00000114,0x61726170,0x0000006d,0x00040005,0x00000117,0x61726170, + 0x0000006d,0x00040005,0x00000118,0x61726170,0x0000006d,0x00040005,0x0000011a,0x61726170, + 0x0000006d,0x00040005,0x0000011c,0x61726170,0x0000006d,0x00040005,0x0000011e,0x61726170, + 0x0000006d,0x00040005,0x0000011f,0x61726170,0x0000006d,0x00040005,0x00000121,0x61726170, + 0x0000006d,0x00040005,0x00000123,0x61726170,0x0000006d,0x00040005,0x00000124,0x61726170, + 0x0000006d,0x00040005,0x00000126,0x61726170,0x0000006d,0x00040005,0x00000127,0x61726170, + 0x0000006d,0x00040005,0x00000128,0x61726170,0x0000006d,0x00040005,0x0000012e,0x49466263, + 0x0000745f,0x00060006,0x0000012e,0x00000000,0x646e6572,0x69537265,0x0000657a,0x00060006, + 0x0000012e,0x00000001,0x70736964,0x5379616c,0x00657a69,0x00070006,0x0000012e,0x00000002, + 0x70736964,0x5379616c,0x52657a69,0x00007063,0x00060006,0x0000012e,0x00000003,0x656d6163, + 0x654e6172,0x00007261,0x00060006,0x0000012e,0x00000004,0x656d6163,0x61466172,0x00000072, + 0x00080006,0x0000012e,0x00000005,0x63737075,0x72656c61,0x67726154,0x69537465,0x0000657a, + 0x00050006,0x0000012e,0x00000006,0x65646f4d,0x00000000,0x00050006,0x0000012e,0x00000007, + 0x65736572,0x00000074,0x00080006,0x0000012e,0x00000008,0x76654466,0x54656369,0x6569566f, + 0x70654477,0x00006874,0x00060006,0x0000012e,0x00000009,0x746c6564,0x6d695461,0x00000065, + 0x00090006,0x0000012e,0x0000000a,0x4c445548,0x41737365,0x63617474,0x46646568,0x6f746361, + 0x00000072,0x00080006,0x0000012e,0x0000000b,0x74736964,0x6974726f,0x69466e6f,0x53646c65, + 0x00657a69,0x00080006,0x0000012e,0x0000000c,0x6974706f,0x466c6163,0x53776f6c,0x656c6163, + 0x00000000,0x00090006,0x0000012e,0x0000000d,0x6974706f,0x466c6163,0x42776f6c,0x6b636f6c, + 0x657a6953,0x00000000,0x00070006,0x0000012e,0x0000000e,0x70736964,0x68637461,0x67616c46, + 0x00000073,0x00070006,0x0000012e,0x0000000f,0x5278616d,0x65646e65,0x7a695372,0x00000065, + 0x00090006,0x0000012e,0x00000010,0x6974706f,0x466c6163,0x48776f6c,0x52666c61,0x6f4d7365, + 0x00006564,0x00070006,0x0000012e,0x00000011,0x496d754e,0x6174736e,0x7365636e,0x00000000, + 0x00090006,0x0000012e,0x00000012,0x65746e69,0x6c6f7072,0x6f697461,0x6365526e,0x73614274, + 0x00000065,0x00090006,0x0000012e,0x00000013,0x65746e69,0x6c6f7072,0x6f697461,0x6365526e, + 0x7a695374,0x00000065,0x00070006,0x0000012e,0x00000014,0x75626564,0x72614267,0x6f6c6f43, + 0x00000072,0x000a0006,0x0000012e,0x00000015,0x6b636162,0x66667542,0x72547265,0x66736e61, + 0x75467265,0x6974636e,0x00006e6f,0x00070006,0x0000012e,0x00000016,0x4d6e696d,0x754c7861, + 0x616e696d,0x0065636e,0x00060006,0x0000012e,0x00000017,0x6e615466,0x666c6148,0x00564f46, + 0x00050006,0x0000012e,0x00000018,0x6461705f,0x00000031,0x00050006,0x0000012e,0x00000019, + 0x74694a66,0x00726574,0x00080006,0x0000012e,0x0000001a,0x746f4d66,0x566e6f69,0x6f746365, + 0x61635372,0x0000656c,0x00040005,0x00000130,0x49466263,0x00000000,0x00080005,0x00000137, + 0x6e496263,0x6e696170,0x676e6974,0x61727950,0x5f64696d,0x00000074,0x00050006,0x00000137, + 0x00000000,0x7370696d,0x00000000,0x00070006,0x00000137,0x00000001,0x576d756e,0x476b726f, + 0x70756f72,0x00000073,0x00070006,0x00000137,0x00000002,0x6b726f77,0x756f7247,0x66664f70, + 0x00746573,0x00070005,0x00000139,0x6e496263,0x6e696170,0x676e6974,0x61727950,0x0064696d, + 0x00040005,0x00000149,0x6b636170,0x00586465,0x000a0005,0x0000014c,0x61675f72,0x6d5f656d, + 0x6f69746f,0x65765f6e,0x726f7463,0x6569665f,0x785f646c,0x00000000,0x00040005,0x00000153, + 0x6b636170,0x00596465,0x000a0005,0x00000154,0x61675f72,0x6d5f656d,0x6f69746f,0x65765f6e, + 0x726f7463,0x6569665f,0x795f646c,0x00000000,0x000a0005,0x0000015f,0x6d617246,0x746e4965, + 0x6f707265,0x6974616c,0x57526e6f,0x6e756f43,0x73726574,0x0000745f,0x00050006,0x0000015f, + 0x00000000,0x61746164,0x00000000,0x00050005,0x00000161,0x635f7772,0x746e756f,0x00737265, + 0x00080005,0x0000016f,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00003064, + 0x00080005,0x00000178,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00003164, + 0x00080005,0x00000181,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00003264, + 0x00080005,0x0000018a,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00003364, + 0x00080005,0x00000194,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00003464, + 0x00080005,0x0000019e,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00003564, + 0x00080005,0x000001a8,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00003664, + 0x00080005,0x000001b2,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00003764, + 0x00080005,0x000001bc,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00003864, + 0x00080005,0x000001c6,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00003964, + 0x00080005,0x000001d0,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00303164, + 0x00080005,0x000001da,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00313164, + 0x00080005,0x000001e4,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00323164, + 0x00040005,0x00000264,0x61726170,0x0000006d,0x00040005,0x00000282,0x61726170,0x0000006d, + 0x00040005,0x00000288,0x61726170,0x0000006d,0x00070005,0x00000291,0x6b636170,0x61476465, + 0x6946656d,0x4d646c65,0x00000076,0x00040005,0x00000292,0x61726170,0x0000006d,0x00040005, + 0x00000295,0x656d6167,0x0000764d,0x00040005,0x00000296,0x61726170,0x0000006d,0x00040005, + 0x00000298,0x61726170,0x0000006d,0x00040005,0x000002ac,0x61726170,0x0000006d,0x00040005, + 0x000002ae,0x61726170,0x0000006d,0x00040005,0x000002b2,0x61726170,0x0000006d,0x00040005, + 0x000002b4,0x61726170,0x0000006d,0x00040005,0x000002b6,0x61726170,0x0000006d,0x00050005, + 0x000002ba,0x43647073,0x746e756f,0x00007265,0x00040005,0x000002bb,0x61726170,0x0000006d, + 0x00040005,0x000002bc,0x61726170,0x0000006d,0x00040005,0x000002c2,0x61726170,0x0000006d, + 0x00040005,0x000002c3,0x61726170,0x0000006d,0x00070005,0x000002c8,0x49647073,0x7265746e, + 0x6964656d,0x52657461,0x00000000,0x00070005,0x000002ce,0x49647073,0x7265746e,0x6964656d, + 0x47657461,0x00000000,0x00070005,0x000002d3,0x49647073,0x7265746e,0x6964656d,0x42657461, + 0x00000000,0x00070005,0x000002d8,0x49647073,0x7265746e,0x6964656d,0x41657461,0x00000000, + 0x00030005,0x000002f4,0x00636576,0x00050005,0x000002f5,0x69655766,0x53746867,0x00006d75, + 0x00040005,0x000002f6,0x69655766,0x00746867,0x00040005,0x00000303,0x69655766,0x00746867, + 0x00040005,0x00000310,0x69655766,0x00746867,0x00040005,0x0000031d,0x69655766,0x00746867, + 0x00040005,0x0000033b,0x61726170,0x0000006d,0x00030005,0x00000345,0x00003076,0x00030005, + 0x00000347,0x00003176,0x00030005,0x0000034a,0x00003276,0x00030005,0x0000034d,0x00003376, + 0x00040005,0x00000350,0x61726170,0x0000006d,0x00040005,0x00000352,0x61726170,0x0000006d, + 0x00040005,0x00000354,0x61726170,0x0000006d,0x00040005,0x00000356,0x61726170,0x0000006d, + 0x00030005,0x0000035d,0x00003076,0x00040005,0x00000360,0x61726170,0x0000006d,0x00040005, + 0x00000361,0x61726170,0x0000006d,0x00030005,0x00000364,0x00003176,0x00040005,0x00000367, + 0x61726170,0x0000006d,0x00040005,0x00000368,0x61726170,0x0000006d,0x00030005,0x0000036b, + 0x00003276,0x00040005,0x0000036e,0x61726170,0x0000006d,0x00040005,0x0000036f,0x61726170, + 0x0000006d,0x00030005,0x00000372,0x00003376,0x00040005,0x00000375,0x61726170,0x0000006d, + 0x00040005,0x00000376,0x61726170,0x0000006d,0x00040005,0x00000379,0x61726170,0x0000006d, + 0x00040005,0x0000037b,0x61726170,0x0000006d,0x00040005,0x0000037d,0x61726170,0x0000006d, + 0x00040005,0x0000037f,0x61726170,0x0000006d,0x00040005,0x00000390,0x61726170,0x0000006d, + 0x00040005,0x00000391,0x61726170,0x0000006d,0x00040005,0x00000392,0x61726170,0x0000006d, + 0x00040005,0x00000393,0x61726170,0x0000006d,0x00040005,0x00000394,0x61726170,0x0000006d, + 0x00030005,0x00000399,0x00003076,0x00040005,0x0000039c,0x61726170,0x0000006d,0x00040005, + 0x0000039d,0x61726170,0x0000006d,0x00030005,0x000003a0,0x00003176,0x00040005,0x000003a3, + 0x61726170,0x0000006d,0x00040005,0x000003a4,0x61726170,0x0000006d,0x00030005,0x000003a7, + 0x00003276,0x00040005,0x000003aa,0x61726170,0x0000006d,0x00040005,0x000003ab,0x61726170, + 0x0000006d,0x00030005,0x000003ae,0x00003376,0x00040005,0x000003b1,0x61726170,0x0000006d, + 0x00040005,0x000003b2,0x61726170,0x0000006d,0x00040005,0x000003b5,0x61726170,0x0000006d, + 0x00040005,0x000003b7,0x61726170,0x0000006d,0x00040005,0x000003b9,0x61726170,0x0000006d, + 0x00040005,0x000003bb,0x61726170,0x0000006d,0x00040005,0x000003c8,0x61726170,0x0000006d, + 0x00040005,0x000003c9,0x61726170,0x0000006d,0x00040005,0x000003ca,0x61726170,0x0000006d, + 0x00040005,0x000003cb,0x61726170,0x0000006d,0x00040005,0x000003cc,0x61726170,0x0000006d, + 0x00030005,0x000003d1,0x00786574,0x00030005,0x000003df,0x00786970,0x00030005,0x000003ed, + 0x00000076,0x00040005,0x000003f0,0x61726170,0x0000006d,0x00040005,0x000003f1,0x61726170, + 0x0000006d,0x00040005,0x000003f5,0x61726170,0x0000006d,0x00040005,0x000003f7,0x61726170, + 0x0000006d,0x00040005,0x000003fa,0x61726170,0x0000006d,0x00040005,0x000003fb,0x61726170, + 0x0000006d,0x00040005,0x00000418,0x61726170,0x0000006d,0x00040005,0x00000419,0x61726170, + 0x0000006d,0x00040005,0x0000041d,0x61726170,0x0000006d,0x00040005,0x0000041f,0x61726170, + 0x0000006d,0x00040005,0x00000422,0x61726170,0x0000006d,0x00040005,0x00000423,0x61726170, + 0x0000006d,0x00040005,0x00000440,0x61726170,0x0000006d,0x00040005,0x00000441,0x61726170, + 0x0000006d,0x00040005,0x00000445,0x61726170,0x0000006d,0x00040005,0x00000447,0x61726170, + 0x0000006d,0x00040005,0x0000044a,0x61726170,0x0000006d,0x00040005,0x0000044b,0x61726170, + 0x0000006d,0x00040005,0x0000046a,0x61726170,0x0000006d,0x00040005,0x0000046b,0x61726170, + 0x0000006d,0x00040005,0x0000046f,0x61726170,0x0000006d,0x00040005,0x00000471,0x61726170, + 0x0000006d,0x00040005,0x00000474,0x61726170,0x0000006d,0x00040005,0x00000475,0x61726170, + 0x0000006d,0x00040005,0x0000047d,0x61726170,0x0000006d,0x00040005,0x00000482,0x61726170, + 0x0000006d,0x00040005,0x00000487,0x61726170,0x0000006d,0x00040005,0x0000048c,0x61726170, + 0x0000006d,0x00040005,0x000004a2,0x61726170,0x0000006d,0x00040005,0x000004a3,0x61726170, + 0x0000006d,0x00040005,0x000004a6,0x61726170,0x0000006d,0x00040005,0x000004a7,0x61726170, + 0x0000006d,0x00040005,0x000004ae,0x61726170,0x0000006d,0x00040005,0x000004af,0x61726170, + 0x0000006d,0x00040005,0x000004b0,0x61726170,0x0000006d,0x00040005,0x000004c1,0x61726170, + 0x0000006d,0x00040005,0x000004c2,0x61726170,0x0000006d,0x00040005,0x000004c5,0x61726170, + 0x0000006d,0x00040005,0x000004c6,0x61726170,0x0000006d,0x00040005,0x000004ce,0x61726170, + 0x0000006d,0x00040005,0x000004cf,0x61726170,0x0000006d,0x00040005,0x000004d0,0x61726170, + 0x0000006d,0x00040005,0x000004e1,0x61726170,0x0000006d,0x00040005,0x000004e2,0x61726170, + 0x0000006d,0x00040005,0x000004e5,0x61726170,0x0000006d,0x00040005,0x000004e6,0x61726170, + 0x0000006d,0x00040005,0x000004ee,0x61726170,0x0000006d,0x00040005,0x000004ef,0x61726170, + 0x0000006d,0x00040005,0x000004f0,0x61726170,0x0000006d,0x00040005,0x00000502,0x61726170, + 0x0000006d,0x00040005,0x00000503,0x61726170,0x0000006d,0x00040005,0x00000506,0x61726170, + 0x0000006d,0x00040005,0x00000507,0x61726170,0x0000006d,0x00040005,0x00000510,0x61726170, + 0x0000006d,0x00040005,0x00000511,0x61726170,0x0000006d,0x00040005,0x00000512,0x61726170, + 0x0000006d,0x00040005,0x00000516,0x61726170,0x0000006d,0x00040005,0x00000518,0x61726170, + 0x0000006d,0x00040005,0x0000051a,0x61726170,0x0000006d,0x00040005,0x0000051c,0x61726170, + 0x0000006d,0x00040005,0x0000051e,0x61726170,0x0000006d,0x00040005,0x00000520,0x61726170, + 0x0000006d,0x00030005,0x00000523,0x00000076,0x00040005,0x00000524,0x61726170,0x0000006d, + 0x00040005,0x00000526,0x61726170,0x0000006d,0x00040005,0x00000529,0x61726170,0x0000006d, + 0x00040005,0x0000053d,0x61726170,0x0000006d,0x00040005,0x0000053e,0x61726170,0x0000006d, + 0x00040005,0x00000540,0x61726170,0x0000006d,0x00040005,0x00000542,0x61726170,0x0000006d, + 0x00040005,0x0000054a,0x61726170,0x0000006d,0x00040005,0x0000054b,0x61726170,0x0000006d, + 0x00040005,0x0000054d,0x61726170,0x0000006d,0x00030005,0x00000554,0x00000076,0x00040005, + 0x0000055c,0x61726170,0x0000006d,0x00040005,0x0000055d,0x61726170,0x0000006d,0x00040005, + 0x0000055f,0x61726170,0x0000006d,0x00040005,0x00000573,0x61726170,0x0000006d,0x00040005, + 0x00000574,0x61726170,0x0000006d,0x00040005,0x00000576,0x61726170,0x0000006d,0x00040005, + 0x00000578,0x61726170,0x0000006d,0x00040005,0x00000582,0x61726170,0x0000006d,0x00040005, + 0x00000583,0x61726170,0x0000006d,0x00040005,0x00000584,0x61726170,0x0000006d,0x00030005, + 0x0000058b,0x00000076,0x00040005,0x00000592,0x61726170,0x0000006d,0x00040005,0x00000593, + 0x61726170,0x0000006d,0x00040005,0x00000595,0x61726170,0x0000006d,0x00040005,0x000005a9, + 0x61726170,0x0000006d,0x00040005,0x000005aa,0x61726170,0x0000006d,0x00040005,0x000005ac, + 0x61726170,0x0000006d,0x00040005,0x000005ae,0x61726170,0x0000006d,0x00040005,0x000005b5, + 0x61726170,0x0000006d,0x00040005,0x000005b6,0x61726170,0x0000006d,0x00040005,0x000005b7, + 0x61726170,0x0000006d,0x00030005,0x000005be,0x00000076,0x00040005,0x000005bf,0x61726170, + 0x0000006d,0x00040005,0x000005c1,0x61726170,0x0000006d,0x00040005,0x000005c3,0x61726170, + 0x0000006d,0x00040005,0x000005cd,0x61726170,0x0000006d,0x00040005,0x000005ce,0x61726170, + 0x0000006d,0x00040005,0x000005d0,0x61726170,0x0000006d,0x00040005,0x000005d2,0x61726170, + 0x0000006d,0x00030005,0x000005d5,0x00786574,0x00030005,0x000005df,0x00786970,0x00030005, + 0x000005e9,0x00003076,0x00040005,0x000005ec,0x61726170,0x0000006d,0x00040005,0x000005ed, + 0x61726170,0x0000006d,0x00040005,0x000005f0,0x61726170,0x0000006d,0x00040005,0x000005f2, + 0x61726170,0x0000006d,0x00040005,0x000005f4,0x61726170,0x0000006d,0x00040005,0x000005f5, + 0x61726170,0x0000006d,0x00030005,0x0000060a,0x00003176,0x00040005,0x0000060d,0x61726170, + 0x0000006d,0x00040005,0x0000060e,0x61726170,0x0000006d,0x00040005,0x00000611,0x61726170, + 0x0000006d,0x00040005,0x00000613,0x61726170,0x0000006d,0x00040005,0x00000615,0x61726170, + 0x0000006d,0x00040005,0x00000616,0x61726170,0x0000006d,0x00030005,0x0000062b,0x00003276, + 0x00040005,0x0000062e,0x61726170,0x0000006d,0x00040005,0x0000062f,0x61726170,0x0000006d, + 0x00040005,0x00000632,0x61726170,0x0000006d,0x00040005,0x00000634,0x61726170,0x0000006d, + 0x00040005,0x00000636,0x61726170,0x0000006d,0x00040005,0x00000637,0x61726170,0x0000006d, + 0x00030005,0x0000064c,0x00003376,0x00040005,0x0000064f,0x61726170,0x0000006d,0x00040005, + 0x00000650,0x61726170,0x0000006d,0x00040005,0x00000653,0x61726170,0x0000006d,0x00040005, + 0x00000655,0x61726170,0x0000006d,0x00040005,0x00000657,0x61726170,0x0000006d,0x00040005, + 0x00000658,0x61726170,0x0000006d,0x00030005,0x00000660,0x00000076,0x00040005,0x00000661, + 0x61726170,0x0000006d,0x00040005,0x00000663,0x61726170,0x0000006d,0x00040005,0x00000665, + 0x61726170,0x0000006d,0x00040005,0x00000667,0x61726170,0x0000006d,0x00040005,0x0000066f, + 0x61726170,0x0000006d,0x00040005,0x00000670,0x61726170,0x0000006d,0x00040005,0x00000672, + 0x61726170,0x0000006d,0x00040005,0x00000673,0x61726170,0x0000006d,0x00040005,0x00000676, + 0x61726170,0x0000006d,0x00040005,0x00000678,0x61726170,0x0000006d,0x00040005,0x0000067a, + 0x61726170,0x0000006d,0x00040005,0x00000684,0x61726170,0x0000006d,0x00040005,0x00000686, + 0x61726170,0x0000006d,0x00040005,0x00000688,0x61726170,0x0000006d,0x00040005,0x0000068a, + 0x61726170,0x0000006d,0x00040005,0x0000068c,0x61726170,0x0000006d,0x00040005,0x0000068e, + 0x61726170,0x0000006d,0x00040005,0x0000069b,0x61726170,0x0000006d,0x00040005,0x0000069d, + 0x61726170,0x0000006d,0x00040005,0x0000069f,0x61726170,0x0000006d,0x00040005,0x000006a1, + 0x61726170,0x0000006d,0x00040005,0x000006a3,0x61726170,0x0000006d,0x00040005,0x000006a4, + 0x61726170,0x0000006d,0x00040005,0x000006b1,0x61726170,0x0000006d,0x00040005,0x000006b3, + 0x61726170,0x0000006d,0x00040005,0x000006b5,0x61726170,0x0000006d,0x00040005,0x000006b7, + 0x61726170,0x0000006d,0x00040005,0x000006b9,0x61726170,0x0000006d,0x00040005,0x000006ba, + 0x61726170,0x0000006d,0x00040005,0x000006c7,0x61726170,0x0000006d,0x00040005,0x000006c9, + 0x61726170,0x0000006d,0x00040005,0x000006cb,0x61726170,0x0000006d,0x00040005,0x000006cc, + 0x61726170,0x0000006d,0x00040005,0x000006cf,0x5f627573,0x00007978,0x00040005,0x000006d2, + 0x61726170,0x0000006d,0x00030005,0x000006d4,0x00000078,0x00030005,0x000006dc,0x00000079, + 0x00040005,0x000006e4,0x61726170,0x0000006d,0x00040005,0x000006e6,0x61726170,0x0000006d, + 0x00040005,0x000006e8,0x61726170,0x0000006d,0x00040005,0x000006ea,0x61726170,0x0000006d, + 0x00040005,0x000006ec,0x61726170,0x0000006d,0x00040005,0x000006ee,0x61726170,0x0000006d, + 0x00040005,0x000006f1,0x61726170,0x0000006d,0x00040005,0x000006f3,0x61726170,0x0000006d, + 0x00040005,0x000006f5,0x61726170,0x0000006d,0x00040005,0x000006f7,0x61726170,0x0000006d, + 0x00040005,0x000006f9,0x61726170,0x0000006d,0x00040005,0x000006fa,0x61726170,0x0000006d, + 0x00040005,0x000006fc,0x61726170,0x0000006d,0x00040005,0x00000704,0x61726170,0x0000006d, + 0x00040005,0x00000706,0x61726170,0x0000006d,0x00040005,0x00000708,0x61726170,0x0000006d, + 0x00040005,0x0000070e,0x61726170,0x0000006d,0x00040005,0x00000711,0x61726170,0x0000006d, + 0x00040005,0x00000713,0x61726170,0x0000006d,0x00040005,0x00000715,0x61726170,0x0000006d, + 0x00040005,0x00000717,0x61726170,0x0000006d,0x00040005,0x0000071a,0x61726170,0x0000006d, + 0x00040005,0x0000071c,0x61726170,0x0000006d,0x00040005,0x0000071e,0x61726170,0x0000006d, + 0x00040005,0x0000071f,0x61726170,0x0000006d,0x00040005,0x00000721,0x61726170,0x0000006d, + 0x00040005,0x00000722,0x61726170,0x0000006d,0x00040005,0x00000724,0x61726170,0x0000006d, + 0x00040005,0x0000072a,0x61726170,0x0000006d,0x00040005,0x0000072b,0x61726170,0x0000006d, + 0x00040005,0x0000072d,0x61726170,0x0000006d,0x00040005,0x0000072f,0x61726170,0x0000006d, + 0x00040005,0x00000731,0x61726170,0x0000006d,0x00040005,0x0000073f,0x61726170,0x0000006d, + 0x00040005,0x00000740,0x61726170,0x0000006d,0x00040005,0x00000741,0x61726170,0x0000006d, + 0x00040005,0x00000742,0x61726170,0x0000006d,0x00040005,0x00000743,0x61726170,0x0000006d, + 0x00040005,0x00000744,0x61726170,0x0000006d,0x00060005,0x00000748,0x575f6c67,0x476b726f, + 0x70756f72,0x00004449,0x00080005,0x0000074c,0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163, + 0x6e496e6f,0x00786564,0x00040005,0x0000074f,0x61726170,0x0000006d,0x00040005,0x00000750, + 0x61726170,0x0000006d,0x00060005,0x00000757,0x694c5f73,0x7261656e,0x6d616c43,0x00000070, + 0x00030047,0x0000012e,0x00000002,0x00050048,0x0000012e,0x00000000,0x00000023,0x00000000, + 0x00050048,0x0000012e,0x00000001,0x00000023,0x00000008,0x00050048,0x0000012e,0x00000002, + 0x00000023,0x00000010,0x00050048,0x0000012e,0x00000003,0x00000023,0x00000018,0x00050048, + 0x0000012e,0x00000004,0x00000023,0x0000001c,0x00050048,0x0000012e,0x00000005,0x00000023, + 0x00000020,0x00050048,0x0000012e,0x00000006,0x00000023,0x00000028,0x00050048,0x0000012e, + 0x00000007,0x00000023,0x0000002c,0x00050048,0x0000012e,0x00000008,0x00000023,0x00000030, + 0x00050048,0x0000012e,0x00000009,0x00000023,0x00000040,0x00050048,0x0000012e,0x0000000a, + 0x00000023,0x00000044,0x00050048,0x0000012e,0x0000000b,0x00000023,0x00000048,0x00050048, + 0x0000012e,0x0000000c,0x00000023,0x00000050,0x00050048,0x0000012e,0x0000000d,0x00000023, + 0x00000058,0x00050048,0x0000012e,0x0000000e,0x00000023,0x0000005c,0x00050048,0x0000012e, + 0x0000000f,0x00000023,0x00000060,0x00050048,0x0000012e,0x00000010,0x00000023,0x00000068, + 0x00050048,0x0000012e,0x00000011,0x00000023,0x0000006c,0x00050048,0x0000012e,0x00000012, + 0x00000023,0x00000070,0x00050048,0x0000012e,0x00000013,0x00000023,0x00000078,0x00050048, + 0x0000012e,0x00000014,0x00000023,0x00000080,0x00050048,0x0000012e,0x00000015,0x00000023, + 0x0000008c,0x00050048,0x0000012e,0x00000016,0x00000023,0x00000090,0x00050048,0x0000012e, + 0x00000017,0x00000023,0x00000098,0x00050048,0x0000012e,0x00000018,0x00000023,0x0000009c, + 0x00050048,0x0000012e,0x00000019,0x00000023,0x000000a0,0x00050048,0x0000012e,0x0000001a, + 0x00000023,0x000000a8,0x00040047,0x00000130,0x00000021,0x00000010,0x00040047,0x00000130, + 0x00000022,0x00000000,0x00030047,0x00000137,0x00000002,0x00050048,0x00000137,0x00000000, + 0x00000023,0x00000000,0x00050048,0x00000137,0x00000001,0x00000023,0x00000004,0x00050048, + 0x00000137,0x00000002,0x00000023,0x00000008,0x00040047,0x00000139,0x00000021,0x00000011, + 0x00040047,0x00000139,0x00000022,0x00000000,0x00040047,0x0000014c,0x00000021,0x00000000, + 0x00040047,0x0000014c,0x00000022,0x00000000,0x00040047,0x00000154,0x00000021,0x00000001, + 0x00040047,0x00000154,0x00000022,0x00000000,0x00040047,0x0000015e,0x00000006,0x00000004, + 0x00030047,0x0000015f,0x00000002,0x00040048,0x0000015f,0x00000000,0x00000017,0x00050048, + 0x0000015f,0x00000000,0x00000023,0x00000000,0x00030047,0x00000161,0x00000017,0x00040047, + 0x00000161,0x00000021,0x00000002,0x00040047,0x00000161,0x00000022,0x00000000,0x00040047, + 0x0000016f,0x00000021,0x00000003,0x00040047,0x0000016f,0x00000022,0x00000000,0x00040047, + 0x00000178,0x00000021,0x00000004,0x00040047,0x00000178,0x00000022,0x00000000,0x00040047, + 0x00000181,0x00000021,0x00000005,0x00040047,0x00000181,0x00000022,0x00000000,0x00040047, + 0x0000018a,0x00000021,0x00000006,0x00040047,0x0000018a,0x00000022,0x00000000,0x00040047, + 0x00000194,0x00000021,0x00000007,0x00040047,0x00000194,0x00000022,0x00000000,0x00030047, + 0x0000019e,0x00000017,0x00040047,0x0000019e,0x00000021,0x00000008,0x00040047,0x0000019e, + 0x00000022,0x00000000,0x00040047,0x000001a8,0x00000021,0x00000009,0x00040047,0x000001a8, + 0x00000022,0x00000000,0x00040047,0x000001b2,0x00000021,0x0000000a,0x00040047,0x000001b2, + 0x00000022,0x00000000,0x00040047,0x000001bc,0x00000021,0x0000000b,0x00040047,0x000001bc, + 0x00000022,0x00000000,0x00040047,0x000001c6,0x00000021,0x0000000c,0x00040047,0x000001c6, + 0x00000022,0x00000000,0x00040047,0x000001d0,0x00000021,0x0000000d,0x00040047,0x000001d0, + 0x00000022,0x00000000,0x00040047,0x000001da,0x00000021,0x0000000e,0x00040047,0x000001da, + 0x00000022,0x00000000,0x00040047,0x000001e4,0x00000021,0x0000000f,0x00040047,0x000001e4, + 0x00000022,0x00000000,0x00040047,0x00000748,0x0000000b,0x0000001a,0x00040047,0x0000074c, + 0x0000000b,0x0000001d,0x00040047,0x00000757,0x00000021,0x000003e8,0x00040047,0x00000757, + 0x00000022,0x00000000,0x00040047,0x0000075b,0x0000000b,0x00000019,0x00020013,0x00000002, + 0x00030021,0x00000003,0x00000002,0x00040015,0x00000006,0x00000020,0x00000000,0x00040020, + 0x00000007,0x00000007,0x00000006,0x00060021,0x00000008,0x00000006,0x00000007,0x00000007, + 0x00000007,0x00030016,0x00000013,0x00000020,0x00040017,0x00000014,0x00000013,0x00000002, + 0x00040021,0x00000015,0x00000014,0x00000007,0x00040017,0x00000019,0x00000006,0x00000002, + 0x00040021,0x0000001a,0x00000019,0x00000007,0x00040015,0x0000001e,0x00000020,0x00000001, + 0x00040017,0x0000001f,0x0000001e,0x00000002,0x00030021,0x00000020,0x0000001f,0x00030021, + 0x00000023,0x00000006,0x00030021,0x00000028,0x00000019,0x00040020,0x0000002b,0x00000007, + 0x0000001f,0x00040021,0x0000002c,0x00000019,0x0000002b,0x00040020,0x00000030,0x00000007, + 0x0000001e,0x00050021,0x00000031,0x00000002,0x00000030,0x00000007,0x00040017,0x0000003a, + 0x00000013,0x00000004,0x00050021,0x0000003b,0x0000003a,0x0000002b,0x00000007,0x00040020, + 0x00000040,0x00000007,0x0000003a,0x00060021,0x00000041,0x00000002,0x0000002b,0x00000040, + 0x00000007,0x00020014,0x00000047,0x00040021,0x00000048,0x00000047,0x00000007,0x00040020, + 0x0000004c,0x00000007,0x00000019,0x000c001e,0x0000004d,0x00000014,0x00000013,0x00000013, + 0x00000047,0x00000047,0x00000047,0x00000047,0x00000013,0x00000047,0x00000047,0x00040020, + 0x0000004e,0x00000007,0x0000004d,0x00050021,0x0000004f,0x00000002,0x0000004c,0x0000004e, + 0x00070021,0x0000005c,0x00000002,0x0000002b,0x00000040,0x00000007,0x00000007,0x00040021, + 0x00000063,0x00000002,0x00000007,0x00050021,0x0000006c,0x0000003a,0x00000007,0x00000007, + 0x00060021,0x00000071,0x00000002,0x00000007,0x00000007,0x00000040,0x00070021,0x00000077, + 0x0000003a,0x00000040,0x00000040,0x00000040,0x00000040,0x00060021,0x00000080,0x00000047, + 0x00000007,0x00000007,0x00000007,0x00040021,0x00000086,0x0000003a,0x00000040,0x00080021, + 0x0000008a,0x0000003a,0x0000004c,0x0000004c,0x0000004c,0x0000004c,0x00000007,0x00050021, + 0x00000092,0x0000003a,0x0000004c,0x00000007,0x00090021,0x000000a2,0x00000002,0x00000007, + 0x00000007,0x0000004c,0x00000007,0x00000007,0x00000007,0x00070021,0x000000cb,0x00000002, + 0x0000004c,0x00000007,0x00000007,0x00000007,0x00070021,0x000000d2,0x00000002,0x00000007, + 0x00000007,0x00000007,0x00000007,0x000a0021,0x000000d9,0x00000002,0x00000007,0x00000007, + 0x0000004c,0x00000007,0x00000007,0x00000007,0x00000007,0x00080021,0x000000e3,0x00000002, + 0x0000004c,0x00000007,0x00000007,0x00000007,0x00000007,0x00090021,0x000000eb,0x00000002, + 0x0000004c,0x00000007,0x00000007,0x00000007,0x00000007,0x0000004c,0x00040017,0x000000f4, + 0x0000001e,0x00000003,0x00040020,0x000000f5,0x00000007,0x000000f4,0x00050021,0x000000f6, + 0x00000002,0x000000f5,0x00000030,0x0004002b,0x0000001e,0x00000105,0x00000000,0x0004002b, + 0x00000006,0x0000010f,0x00000002,0x0004002b,0x00000006,0x00000110,0x00000003,0x0004002b, + 0x00000006,0x00000116,0x00000001,0x00040017,0x0000012d,0x00000013,0x00000003,0x001d001e, + 0x0000012e,0x0000001f,0x0000001f,0x00000014,0x00000013,0x00000013,0x0000001f,0x0000001e, + 0x0000001e,0x0000003a,0x00000013,0x0000001e,0x0000001f,0x00000014,0x0000001e,0x00000006, + 0x0000001f,0x0000001e,0x0000001e,0x0000001f,0x0000001f,0x0000012d,0x00000006,0x00000014, + 0x00000013,0x0000001e,0x00000014,0x00000014,0x00040020,0x0000012f,0x00000002,0x0000012e, + 0x0004003b,0x0000012f,0x00000130,0x00000002,0x0004002b,0x0000001e,0x00000131,0x00000001, + 0x00040020,0x00000132,0x00000002,0x0000001f,0x0005001e,0x00000137,0x00000006,0x00000006, + 0x00000019,0x00040020,0x00000138,0x00000002,0x00000137,0x0004003b,0x00000138,0x00000139, + 0x00000002,0x00040020,0x0000013a,0x00000002,0x00000006,0x0004002b,0x0000001e,0x00000143, + 0x00000002,0x00040020,0x00000144,0x00000002,0x00000019,0x00090019,0x0000014a,0x00000006, + 0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x00040020,0x0000014b, + 0x00000000,0x0000014a,0x0004003b,0x0000014b,0x0000014c,0x00000000,0x00040017,0x0000014f, + 0x00000006,0x00000004,0x0004002b,0x00000006,0x00000151,0x00000000,0x0004003b,0x0000014b, + 0x00000154,0x00000000,0x0003001d,0x0000015e,0x00000006,0x0003001e,0x0000015f,0x0000015e, + 0x00040020,0x00000160,0x0000000c,0x0000015f,0x0004003b,0x00000160,0x00000161,0x0000000c, + 0x00040020,0x00000164,0x0000000c,0x00000006,0x00090019,0x0000016d,0x00000013,0x00000001, + 0x00000000,0x00000000,0x00000000,0x00000002,0x00000002,0x00040020,0x0000016e,0x00000000, + 0x0000016d,0x0004003b,0x0000016e,0x0000016f,0x00000000,0x0004003b,0x0000016e,0x00000178, + 0x00000000,0x0004003b,0x0000016e,0x00000181,0x00000000,0x0004003b,0x0000016e,0x0000018a, + 0x00000000,0x0004002b,0x00000006,0x00000190,0x00000004,0x0004003b,0x0000016e,0x00000194, + 0x00000000,0x0004002b,0x00000006,0x0000019a,0x00000005,0x0004003b,0x0000016e,0x0000019e, + 0x00000000,0x0004002b,0x00000006,0x000001a4,0x00000006,0x0004003b,0x0000016e,0x000001a8, + 0x00000000,0x0004002b,0x00000006,0x000001ae,0x00000007,0x0004003b,0x0000016e,0x000001b2, + 0x00000000,0x0004002b,0x00000006,0x000001b8,0x00000008,0x0004003b,0x0000016e,0x000001bc, + 0x00000000,0x0004002b,0x00000006,0x000001c2,0x00000009,0x0004003b,0x0000016e,0x000001c6, + 0x00000000,0x0004002b,0x00000006,0x000001cc,0x0000000a,0x0004003b,0x0000016e,0x000001d0, + 0x00000000,0x0004002b,0x00000006,0x000001d6,0x0000000b,0x0004003b,0x0000016e,0x000001da, + 0x00000000,0x0004002b,0x00000006,0x000001e0,0x0000000c,0x0004003b,0x0000016e,0x000001e4, + 0x00000000,0x0004002b,0x00000013,0x000001e9,0x00000000,0x0007002c,0x0000003a,0x000001ea, + 0x000001e9,0x000001e9,0x000001e9,0x000001e9,0x0004002b,0x00000006,0x00000249,0x80000000, + 0x0004002b,0x00000006,0x00000250,0x00000015,0x0004002b,0x00000006,0x00000252,0x000003ff, + 0x0004002b,0x00000013,0x00000255,0x447fc000,0x00040020,0x00000257,0x00000007,0x00000013, + 0x0004002b,0x00000006,0x0000025b,0x00000010,0x0004002b,0x00000006,0x0000025d,0x0000001f, + 0x0004002b,0x00000013,0x00000260,0x41f80000,0x0004002b,0x0000001e,0x00000263,0x00000004, + 0x00040020,0x00000268,0x00000007,0x00000047,0x0004002b,0x0000001e,0x0000026a,0x00000003, + 0x0004002b,0x0000001e,0x0000026f,0x00000005,0x0004002b,0x00000013,0x0000027d,0x3f800000, + 0x0004002b,0x0000001e,0x0000028e,0x00000006,0x0003002a,0x00000047,0x0000028f,0x00040020, + 0x0000029b,0x00000007,0x00000014,0x00040020,0x000002b9,0x00000004,0x00000006,0x0004003b, + 0x000002b9,0x000002ba,0x00000004,0x0004001c,0x000002c5,0x00000013,0x0000025b,0x0004001c, + 0x000002c6,0x000002c5,0x0000025b,0x00040020,0x000002c7,0x00000004,0x000002c6,0x0004003b, + 0x000002c7,0x000002c8,0x00000004,0x00040020,0x000002cb,0x00000004,0x00000013,0x0004003b, + 0x000002c7,0x000002ce,0x00000004,0x0004003b,0x000002c7,0x000002d3,0x00000004,0x0004003b, + 0x000002c7,0x000002d8,0x00000004,0x0004002b,0x00000013,0x0000032b,0x3a83126f,0x0004002b, + 0x00000006,0x00000335,0x00000d48,0x0004002b,0x00000006,0x00000336,0x00000108,0x0005002c, + 0x00000019,0x00000385,0x00000151,0x00000151,0x0005002c,0x00000019,0x00000388,0x00000151, + 0x00000116,0x0005002c,0x00000019,0x0000038b,0x00000116,0x00000151,0x0005002c,0x00000019, + 0x0000038e,0x00000116,0x00000116,0x0004002b,0x00000006,0x000003d3,0x00000040,0x0004002b, + 0x00000006,0x000003e1,0x00000020,0x0004001c,0x000003eb,0x0000003a,0x00000190,0x00040020, + 0x000003ec,0x00000007,0x000003eb,0x0004002b,0x0000001e,0x000006e0,0x00000007,0x00040017, + 0x00000746,0x00000006,0x00000003,0x00040020,0x00000747,0x00000001,0x00000746,0x0004003b, + 0x00000747,0x00000748,0x00000001,0x00040020,0x0000074b,0x00000001,0x00000006,0x0004003b, + 0x0000074b,0x0000074c,0x00000001,0x0004002b,0x00000013,0x00000752,0x387fda40,0x0004002b, + 0x00000013,0x00000753,0x477fe000,0x0004002b,0x00000013,0x00000754,0x37801002,0x0002001a, + 0x00000755,0x00040020,0x00000756,0x00000000,0x00000755,0x0004003b,0x00000756,0x00000757, + 0x00000000,0x0004002b,0x00000013,0x00000758,0x7f7fffff,0x0004002b,0x00000013,0x00000759, + 0x00800000,0x0004002b,0x00000006,0x0000075a,0x00000100,0x0006002c,0x00000746,0x0000075b, + 0x0000075a,0x00000116,0x00000116,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003, + 0x000200f8,0x00000005,0x0004003b,0x000000f5,0x0000074f,0x00000007,0x0004003b,0x00000030, + 0x00000750,0x00000007,0x0004003d,0x00000746,0x00000749,0x00000748,0x0004007c,0x000000f4, + 0x0000074a,0x00000749,0x0004003d,0x00000006,0x0000074d,0x0000074c,0x0004007c,0x0000001e, + 0x0000074e,0x0000074d,0x0003003e,0x0000074f,0x0000074a,0x0003003e,0x00000750,0x0000074e, + 0x00060039,0x00000002,0x00000751,0x000000f9,0x0000074f,0x00000750,0x000100fd,0x00010038, + 0x00050036,0x00000006,0x0000000c,0x00000000,0x00000008,0x00030037,0x00000007,0x00000009, + 0x00030037,0x00000007,0x0000000a,0x00030037,0x00000007,0x0000000b,0x000200f8,0x0000000d, + 0x0004003d,0x00000006,0x000000fb,0x00000009,0x0004003d,0x00000006,0x000000fc,0x0000000a, + 0x0004007c,0x0000001e,0x000000fd,0x000000fc,0x0004003d,0x00000006,0x000000fe,0x0000000b, + 0x0004007c,0x0000001e,0x000000ff,0x000000fe,0x000600cb,0x00000006,0x00000100,0x000000fb, + 0x000000fd,0x000000ff,0x000200fe,0x00000100,0x00010038,0x00050036,0x00000006,0x00000011, + 0x00000000,0x00000008,0x00030037,0x00000007,0x0000000e,0x00030037,0x00000007,0x0000000f, + 0x00030037,0x00000007,0x00000010,0x000200f8,0x00000012,0x0004003d,0x00000006,0x00000103, + 0x0000000e,0x0004003d,0x00000006,0x00000104,0x0000000f,0x0004003d,0x00000006,0x00000106, + 0x00000010,0x0004007c,0x0000001e,0x00000107,0x00000106,0x000700c9,0x00000006,0x00000108, + 0x00000103,0x00000104,0x00000105,0x00000107,0x000200fe,0x00000108,0x00010038,0x00050036, + 0x00000014,0x00000017,0x00000000,0x00000015,0x00030037,0x00000007,0x00000016,0x000200f8, + 0x00000018,0x0004003d,0x00000006,0x0000010b,0x00000016,0x0006000c,0x00000014,0x0000010c, + 0x00000001,0x0000003e,0x0000010b,0x000200fe,0x0000010c,0x00010038,0x00050036,0x00000019, + 0x0000001c,0x00000000,0x0000001a,0x00030037,0x00000007,0x0000001b,0x000200f8,0x0000001d, + 0x0004003b,0x00000007,0x00000111,0x00000007,0x0004003b,0x00000007,0x00000113,0x00000007, + 0x0004003b,0x00000007,0x00000114,0x00000007,0x0004003b,0x00000007,0x00000117,0x00000007, + 0x0004003b,0x00000007,0x00000118,0x00000007,0x0004003b,0x00000007,0x0000011a,0x00000007, + 0x0004003b,0x00000007,0x0000011c,0x00000007,0x0004003b,0x00000007,0x0000011e,0x00000007, + 0x0004003b,0x00000007,0x0000011f,0x00000007,0x0004003b,0x00000007,0x00000121,0x00000007, + 0x0004003b,0x00000007,0x00000123,0x00000007,0x0004003b,0x00000007,0x00000124,0x00000007, + 0x0004003b,0x00000007,0x00000126,0x00000007,0x0004003b,0x00000007,0x00000127,0x00000007, + 0x0004003b,0x00000007,0x00000128,0x00000007,0x0004003d,0x00000006,0x00000112,0x0000001b, + 0x0003003e,0x00000111,0x00000112,0x0003003e,0x00000113,0x0000010f,0x0003003e,0x00000114, + 0x00000110,0x00070039,0x00000006,0x00000115,0x0000000c,0x00000111,0x00000113,0x00000114, + 0x0003003e,0x00000117,0x00000115,0x0004003d,0x00000006,0x00000119,0x0000001b,0x0003003e, + 0x00000118,0x00000119,0x0003003e,0x0000011a,0x00000116,0x00070039,0x00000006,0x0000011b, + 0x00000011,0x00000117,0x00000118,0x0000011a,0x0004003d,0x00000006,0x0000011d,0x0000001b, + 0x0003003e,0x0000011c,0x0000011d,0x0003003e,0x0000011e,0x00000110,0x0003003e,0x0000011f, + 0x00000110,0x00070039,0x00000006,0x00000120,0x0000000c,0x0000011c,0x0000011e,0x0000011f, + 0x0004003d,0x00000006,0x00000122,0x0000001b,0x0003003e,0x00000121,0x00000122,0x0003003e, + 0x00000123,0x00000116,0x0003003e,0x00000124,0x0000010f,0x00070039,0x00000006,0x00000125, + 0x0000000c,0x00000121,0x00000123,0x00000124,0x0003003e,0x00000126,0x00000120,0x0003003e, + 0x00000127,0x00000125,0x0003003e,0x00000128,0x0000010f,0x00070039,0x00000006,0x00000129, + 0x00000011,0x00000126,0x00000127,0x00000128,0x00050050,0x00000019,0x0000012a,0x0000011b, + 0x00000129,0x000200fe,0x0000012a,0x00010038,0x00050036,0x0000001f,0x00000021,0x00000000, + 0x00000020,0x000200f8,0x00000022,0x00050041,0x00000132,0x00000133,0x00000130,0x00000131, + 0x0004003d,0x0000001f,0x00000134,0x00000133,0x000200fe,0x00000134,0x00010038,0x00050036, + 0x00000006,0x00000024,0x00000000,0x00000023,0x000200f8,0x00000025,0x00050041,0x0000013a, + 0x0000013b,0x00000139,0x00000105,0x0004003d,0x00000006,0x0000013c,0x0000013b,0x000200fe, + 0x0000013c,0x00010038,0x00050036,0x00000006,0x00000026,0x00000000,0x00000023,0x000200f8, + 0x00000027,0x00050041,0x0000013a,0x0000013f,0x00000139,0x00000131,0x0004003d,0x00000006, + 0x00000140,0x0000013f,0x000200fe,0x00000140,0x00010038,0x00050036,0x00000019,0x00000029, + 0x00000000,0x00000028,0x000200f8,0x0000002a,0x00050041,0x00000144,0x00000145,0x00000139, + 0x00000143,0x0004003d,0x00000019,0x00000146,0x00000145,0x000200fe,0x00000146,0x00010038, + 0x00050036,0x00000019,0x0000002e,0x00000000,0x0000002c,0x00030037,0x0000002b,0x0000002d, + 0x000200f8,0x0000002f,0x0004003b,0x00000007,0x00000149,0x00000007,0x0004003b,0x00000007, + 0x00000153,0x00000007,0x0004003d,0x0000014a,0x0000014d,0x0000014c,0x0004003d,0x0000001f, + 0x0000014e,0x0000002d,0x0007005f,0x0000014f,0x00000150,0x0000014d,0x0000014e,0x00000002, + 0x00000105,0x00050051,0x00000006,0x00000152,0x00000150,0x00000000,0x0003003e,0x00000149, + 0x00000152,0x0004003d,0x0000014a,0x00000155,0x00000154,0x0004003d,0x0000001f,0x00000156, + 0x0000002d,0x0007005f,0x0000014f,0x00000157,0x00000155,0x00000156,0x00000002,0x00000105, + 0x00050051,0x00000006,0x00000158,0x00000157,0x00000000,0x0003003e,0x00000153,0x00000158, + 0x0004003d,0x00000006,0x00000159,0x00000149,0x0004003d,0x00000006,0x0000015a,0x00000153, + 0x00050050,0x00000019,0x0000015b,0x00000159,0x0000015a,0x000200fe,0x0000015b,0x00010038, + 0x00050036,0x00000002,0x00000034,0x00000000,0x00000031,0x00030037,0x00000030,0x00000032, + 0x00030037,0x00000007,0x00000033,0x000200f8,0x00000035,0x0004003d,0x0000001e,0x00000162, + 0x00000032,0x0004003d,0x00000006,0x00000163,0x00000033,0x00060041,0x00000164,0x00000165, + 0x00000161,0x00000105,0x00000162,0x0003003e,0x00000165,0x00000163,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x00000038,0x00000000,0x00000031,0x00030037,0x00000030,0x00000036, + 0x00030037,0x00000007,0x00000037,0x000200f8,0x00000039,0x0004003d,0x0000001e,0x00000166, + 0x00000036,0x00060041,0x00000164,0x00000167,0x00000161,0x00000105,0x00000166,0x000700ea, + 0x00000006,0x00000168,0x00000167,0x00000116,0x00000151,0x00000116,0x0003003e,0x00000037, + 0x00000168,0x000100fd,0x00010038,0x00050036,0x0000003a,0x0000003e,0x00000000,0x0000003b, + 0x00030037,0x0000002b,0x0000003c,0x00030037,0x00000007,0x0000003d,0x000200f8,0x0000003f, + 0x0004003d,0x00000006,0x00000169,0x0000003d,0x000500aa,0x00000047,0x0000016a,0x00000169, + 0x00000151,0x000300f7,0x0000016c,0x00000000,0x000400fa,0x0000016a,0x0000016b,0x0000016c, + 0x000200f8,0x0000016b,0x0004003d,0x0000016d,0x00000170,0x0000016f,0x0004003d,0x0000001f, + 0x00000171,0x0000003c,0x00050062,0x0000003a,0x00000172,0x00000170,0x00000171,0x000200fe, + 0x00000172,0x000200f8,0x0000016c,0x0004003d,0x00000006,0x00000174,0x0000003d,0x000500aa, + 0x00000047,0x00000175,0x00000174,0x00000116,0x000300f7,0x00000177,0x00000000,0x000400fa, + 0x00000175,0x00000176,0x00000177,0x000200f8,0x00000176,0x0004003d,0x0000016d,0x00000179, + 0x00000178,0x0004003d,0x0000001f,0x0000017a,0x0000003c,0x00050062,0x0000003a,0x0000017b, + 0x00000179,0x0000017a,0x000200fe,0x0000017b,0x000200f8,0x00000177,0x0004003d,0x00000006, + 0x0000017d,0x0000003d,0x000500aa,0x00000047,0x0000017e,0x0000017d,0x0000010f,0x000300f7, + 0x00000180,0x00000000,0x000400fa,0x0000017e,0x0000017f,0x00000180,0x000200f8,0x0000017f, + 0x0004003d,0x0000016d,0x00000182,0x00000181,0x0004003d,0x0000001f,0x00000183,0x0000003c, + 0x00050062,0x0000003a,0x00000184,0x00000182,0x00000183,0x000200fe,0x00000184,0x000200f8, + 0x00000180,0x0004003d,0x00000006,0x00000186,0x0000003d,0x000500aa,0x00000047,0x00000187, + 0x00000186,0x00000110,0x000300f7,0x00000189,0x00000000,0x000400fa,0x00000187,0x00000188, + 0x00000189,0x000200f8,0x00000188,0x0004003d,0x0000016d,0x0000018b,0x0000018a,0x0004003d, + 0x0000001f,0x0000018c,0x0000003c,0x00050062,0x0000003a,0x0000018d,0x0000018b,0x0000018c, + 0x000200fe,0x0000018d,0x000200f8,0x00000189,0x0004003d,0x00000006,0x0000018f,0x0000003d, + 0x000500aa,0x00000047,0x00000191,0x0000018f,0x00000190,0x000300f7,0x00000193,0x00000000, + 0x000400fa,0x00000191,0x00000192,0x00000193,0x000200f8,0x00000192,0x0004003d,0x0000016d, + 0x00000195,0x00000194,0x0004003d,0x0000001f,0x00000196,0x0000003c,0x00050062,0x0000003a, + 0x00000197,0x00000195,0x00000196,0x000200fe,0x00000197,0x000200f8,0x00000193,0x0004003d, + 0x00000006,0x00000199,0x0000003d,0x000500aa,0x00000047,0x0000019b,0x00000199,0x0000019a, + 0x000300f7,0x0000019d,0x00000000,0x000400fa,0x0000019b,0x0000019c,0x0000019d,0x000200f8, + 0x0000019c,0x0004003d,0x0000016d,0x0000019f,0x0000019e,0x0004003d,0x0000001f,0x000001a0, + 0x0000003c,0x00050062,0x0000003a,0x000001a1,0x0000019f,0x000001a0,0x000200fe,0x000001a1, + 0x000200f8,0x0000019d,0x0004003d,0x00000006,0x000001a3,0x0000003d,0x000500aa,0x00000047, + 0x000001a5,0x000001a3,0x000001a4,0x000300f7,0x000001a7,0x00000000,0x000400fa,0x000001a5, + 0x000001a6,0x000001a7,0x000200f8,0x000001a6,0x0004003d,0x0000016d,0x000001a9,0x000001a8, + 0x0004003d,0x0000001f,0x000001aa,0x0000003c,0x00050062,0x0000003a,0x000001ab,0x000001a9, + 0x000001aa,0x000200fe,0x000001ab,0x000200f8,0x000001a7,0x0004003d,0x00000006,0x000001ad, + 0x0000003d,0x000500aa,0x00000047,0x000001af,0x000001ad,0x000001ae,0x000300f7,0x000001b1, + 0x00000000,0x000400fa,0x000001af,0x000001b0,0x000001b1,0x000200f8,0x000001b0,0x0004003d, + 0x0000016d,0x000001b3,0x000001b2,0x0004003d,0x0000001f,0x000001b4,0x0000003c,0x00050062, + 0x0000003a,0x000001b5,0x000001b3,0x000001b4,0x000200fe,0x000001b5,0x000200f8,0x000001b1, + 0x0004003d,0x00000006,0x000001b7,0x0000003d,0x000500aa,0x00000047,0x000001b9,0x000001b7, + 0x000001b8,0x000300f7,0x000001bb,0x00000000,0x000400fa,0x000001b9,0x000001ba,0x000001bb, + 0x000200f8,0x000001ba,0x0004003d,0x0000016d,0x000001bd,0x000001bc,0x0004003d,0x0000001f, + 0x000001be,0x0000003c,0x00050062,0x0000003a,0x000001bf,0x000001bd,0x000001be,0x000200fe, + 0x000001bf,0x000200f8,0x000001bb,0x0004003d,0x00000006,0x000001c1,0x0000003d,0x000500aa, + 0x00000047,0x000001c3,0x000001c1,0x000001c2,0x000300f7,0x000001c5,0x00000000,0x000400fa, + 0x000001c3,0x000001c4,0x000001c5,0x000200f8,0x000001c4,0x0004003d,0x0000016d,0x000001c7, + 0x000001c6,0x0004003d,0x0000001f,0x000001c8,0x0000003c,0x00050062,0x0000003a,0x000001c9, + 0x000001c7,0x000001c8,0x000200fe,0x000001c9,0x000200f8,0x000001c5,0x0004003d,0x00000006, + 0x000001cb,0x0000003d,0x000500aa,0x00000047,0x000001cd,0x000001cb,0x000001cc,0x000300f7, + 0x000001cf,0x00000000,0x000400fa,0x000001cd,0x000001ce,0x000001cf,0x000200f8,0x000001ce, + 0x0004003d,0x0000016d,0x000001d1,0x000001d0,0x0004003d,0x0000001f,0x000001d2,0x0000003c, + 0x00050062,0x0000003a,0x000001d3,0x000001d1,0x000001d2,0x000200fe,0x000001d3,0x000200f8, + 0x000001cf,0x0004003d,0x00000006,0x000001d5,0x0000003d,0x000500aa,0x00000047,0x000001d7, + 0x000001d5,0x000001d6,0x000300f7,0x000001d9,0x00000000,0x000400fa,0x000001d7,0x000001d8, + 0x000001d9,0x000200f8,0x000001d8,0x0004003d,0x0000016d,0x000001db,0x000001da,0x0004003d, + 0x0000001f,0x000001dc,0x0000003c,0x00050062,0x0000003a,0x000001dd,0x000001db,0x000001dc, + 0x000200fe,0x000001dd,0x000200f8,0x000001d9,0x0004003d,0x00000006,0x000001df,0x0000003d, + 0x000500aa,0x00000047,0x000001e1,0x000001df,0x000001e0,0x000300f7,0x000001e3,0x00000000, + 0x000400fa,0x000001e1,0x000001e2,0x000001e3,0x000200f8,0x000001e2,0x0004003d,0x0000016d, + 0x000001e5,0x000001e4,0x0004003d,0x0000001f,0x000001e6,0x0000003c,0x00050062,0x0000003a, + 0x000001e7,0x000001e5,0x000001e6,0x000200fe,0x000001e7,0x000200f8,0x000001e3,0x000200fe, + 0x000001ea,0x00010038,0x00050036,0x00000002,0x00000045,0x00000000,0x00000041,0x00030037, + 0x0000002b,0x00000042,0x00030037,0x00000040,0x00000043,0x00030037,0x00000007,0x00000044, + 0x000200f8,0x00000046,0x0004003d,0x00000006,0x000001ed,0x00000044,0x000500aa,0x00000047, + 0x000001ee,0x000001ed,0x00000151,0x000300f7,0x000001f0,0x00000000,0x000400fa,0x000001ee, + 0x000001ef,0x000001f0,0x000200f8,0x000001ef,0x0004003d,0x0000016d,0x000001f1,0x0000016f, + 0x0004003d,0x0000001f,0x000001f2,0x00000042,0x0004003d,0x0000003a,0x000001f3,0x00000043, + 0x00040063,0x000001f1,0x000001f2,0x000001f3,0x000200f9,0x000001f0,0x000200f8,0x000001f0, + 0x0004003d,0x00000006,0x000001f4,0x00000044,0x000500aa,0x00000047,0x000001f5,0x000001f4, + 0x00000116,0x000300f7,0x000001f7,0x00000000,0x000400fa,0x000001f5,0x000001f6,0x000001f7, + 0x000200f8,0x000001f6,0x0004003d,0x0000016d,0x000001f8,0x00000178,0x0004003d,0x0000001f, + 0x000001f9,0x00000042,0x0004003d,0x0000003a,0x000001fa,0x00000043,0x00040063,0x000001f8, + 0x000001f9,0x000001fa,0x000200f9,0x000001f7,0x000200f8,0x000001f7,0x0004003d,0x00000006, + 0x000001fb,0x00000044,0x000500aa,0x00000047,0x000001fc,0x000001fb,0x0000010f,0x000300f7, + 0x000001fe,0x00000000,0x000400fa,0x000001fc,0x000001fd,0x000001fe,0x000200f8,0x000001fd, + 0x0004003d,0x0000016d,0x000001ff,0x00000181,0x0004003d,0x0000001f,0x00000200,0x00000042, + 0x0004003d,0x0000003a,0x00000201,0x00000043,0x00040063,0x000001ff,0x00000200,0x00000201, + 0x000200f9,0x000001fe,0x000200f8,0x000001fe,0x0004003d,0x00000006,0x00000202,0x00000044, + 0x000500aa,0x00000047,0x00000203,0x00000202,0x00000110,0x000300f7,0x00000205,0x00000000, + 0x000400fa,0x00000203,0x00000204,0x00000205,0x000200f8,0x00000204,0x0004003d,0x0000016d, + 0x00000206,0x0000018a,0x0004003d,0x0000001f,0x00000207,0x00000042,0x0004003d,0x0000003a, + 0x00000208,0x00000043,0x00040063,0x00000206,0x00000207,0x00000208,0x000200f9,0x00000205, + 0x000200f8,0x00000205,0x0004003d,0x00000006,0x00000209,0x00000044,0x000500aa,0x00000047, + 0x0000020a,0x00000209,0x00000190,0x000300f7,0x0000020c,0x00000000,0x000400fa,0x0000020a, + 0x0000020b,0x0000020c,0x000200f8,0x0000020b,0x0004003d,0x0000016d,0x0000020d,0x00000194, + 0x0004003d,0x0000001f,0x0000020e,0x00000042,0x0004003d,0x0000003a,0x0000020f,0x00000043, + 0x00040063,0x0000020d,0x0000020e,0x0000020f,0x000200f9,0x0000020c,0x000200f8,0x0000020c, + 0x0004003d,0x00000006,0x00000210,0x00000044,0x000500aa,0x00000047,0x00000211,0x00000210, + 0x0000019a,0x000300f7,0x00000213,0x00000000,0x000400fa,0x00000211,0x00000212,0x00000213, + 0x000200f8,0x00000212,0x0004003d,0x0000016d,0x00000214,0x0000019e,0x0004003d,0x0000001f, + 0x00000215,0x00000042,0x0004003d,0x0000003a,0x00000216,0x00000043,0x00040063,0x00000214, + 0x00000215,0x00000216,0x000200f9,0x00000213,0x000200f8,0x00000213,0x0004003d,0x00000006, + 0x00000217,0x00000044,0x000500aa,0x00000047,0x00000218,0x00000217,0x000001a4,0x000300f7, + 0x0000021a,0x00000000,0x000400fa,0x00000218,0x00000219,0x0000021a,0x000200f8,0x00000219, + 0x0004003d,0x0000016d,0x0000021b,0x000001a8,0x0004003d,0x0000001f,0x0000021c,0x00000042, + 0x0004003d,0x0000003a,0x0000021d,0x00000043,0x00040063,0x0000021b,0x0000021c,0x0000021d, + 0x000200f9,0x0000021a,0x000200f8,0x0000021a,0x0004003d,0x00000006,0x0000021e,0x00000044, + 0x000500aa,0x00000047,0x0000021f,0x0000021e,0x000001ae,0x000300f7,0x00000221,0x00000000, + 0x000400fa,0x0000021f,0x00000220,0x00000221,0x000200f8,0x00000220,0x0004003d,0x0000016d, + 0x00000222,0x000001b2,0x0004003d,0x0000001f,0x00000223,0x00000042,0x0004003d,0x0000003a, + 0x00000224,0x00000043,0x00040063,0x00000222,0x00000223,0x00000224,0x000200f9,0x00000221, + 0x000200f8,0x00000221,0x0004003d,0x00000006,0x00000225,0x00000044,0x000500aa,0x00000047, + 0x00000226,0x00000225,0x000001b8,0x000300f7,0x00000228,0x00000000,0x000400fa,0x00000226, + 0x00000227,0x00000228,0x000200f8,0x00000227,0x0004003d,0x0000016d,0x00000229,0x000001bc, + 0x0004003d,0x0000001f,0x0000022a,0x00000042,0x0004003d,0x0000003a,0x0000022b,0x00000043, + 0x00040063,0x00000229,0x0000022a,0x0000022b,0x000200f9,0x00000228,0x000200f8,0x00000228, + 0x0004003d,0x00000006,0x0000022c,0x00000044,0x000500aa,0x00000047,0x0000022d,0x0000022c, + 0x000001c2,0x000300f7,0x0000022f,0x00000000,0x000400fa,0x0000022d,0x0000022e,0x0000022f, + 0x000200f8,0x0000022e,0x0004003d,0x0000016d,0x00000230,0x000001c6,0x0004003d,0x0000001f, + 0x00000231,0x00000042,0x0004003d,0x0000003a,0x00000232,0x00000043,0x00040063,0x00000230, + 0x00000231,0x00000232,0x000200f9,0x0000022f,0x000200f8,0x0000022f,0x0004003d,0x00000006, + 0x00000233,0x00000044,0x000500aa,0x00000047,0x00000234,0x00000233,0x000001cc,0x000300f7, + 0x00000236,0x00000000,0x000400fa,0x00000234,0x00000235,0x00000236,0x000200f8,0x00000235, + 0x0004003d,0x0000016d,0x00000237,0x000001d0,0x0004003d,0x0000001f,0x00000238,0x00000042, + 0x0004003d,0x0000003a,0x00000239,0x00000043,0x00040063,0x00000237,0x00000238,0x00000239, + 0x000200f9,0x00000236,0x000200f8,0x00000236,0x0004003d,0x00000006,0x0000023a,0x00000044, + 0x000500aa,0x00000047,0x0000023b,0x0000023a,0x000001d6,0x000300f7,0x0000023d,0x00000000, + 0x000400fa,0x0000023b,0x0000023c,0x0000023d,0x000200f8,0x0000023c,0x0004003d,0x0000016d, + 0x0000023e,0x000001da,0x0004003d,0x0000001f,0x0000023f,0x00000042,0x0004003d,0x0000003a, + 0x00000240,0x00000043,0x00040063,0x0000023e,0x0000023f,0x00000240,0x000200f9,0x0000023d, + 0x000200f8,0x0000023d,0x0004003d,0x00000006,0x00000241,0x00000044,0x000500aa,0x00000047, + 0x00000242,0x00000241,0x000001e0,0x000300f7,0x00000244,0x00000000,0x000400fa,0x00000242, + 0x00000243,0x00000244,0x000200f8,0x00000243,0x0004003d,0x0000016d,0x00000245,0x000001e4, + 0x0004003d,0x0000001f,0x00000246,0x00000042,0x0004003d,0x0000003a,0x00000247,0x00000043, + 0x00040063,0x00000245,0x00000246,0x00000247,0x000200f9,0x00000244,0x000200f8,0x00000244, + 0x000100fd,0x00010038,0x00050036,0x00000047,0x0000004a,0x00000000,0x00000048,0x00030037, + 0x00000007,0x00000049,0x000200f8,0x0000004b,0x0004003d,0x00000006,0x00000248,0x00000049, + 0x000500c7,0x00000006,0x0000024a,0x00000248,0x00000249,0x000500ab,0x00000047,0x0000024b, + 0x0000024a,0x00000151,0x000200fe,0x0000024b,0x00010038,0x00050036,0x00000002,0x00000052, + 0x00000000,0x0000004f,0x00030037,0x0000004c,0x00000050,0x00030037,0x0000004e,0x00000051, + 0x000200f8,0x00000053,0x0004003b,0x00000007,0x00000264,0x00000007,0x0004003b,0x00000007, + 0x00000282,0x00000007,0x0004003b,0x00000007,0x00000288,0x00000007,0x00050041,0x00000007, + 0x0000024e,0x00000050,0x00000151,0x0004003d,0x00000006,0x0000024f,0x0000024e,0x000500c2, + 0x00000006,0x00000251,0x0000024f,0x00000250,0x000500c7,0x00000006,0x00000253,0x00000251, + 0x00000252,0x00040070,0x00000013,0x00000254,0x00000253,0x00050088,0x00000013,0x00000256, + 0x00000254,0x00000255,0x00050041,0x00000257,0x00000258,0x00000051,0x00000131,0x0003003e, + 0x00000258,0x00000256,0x00050041,0x00000007,0x00000259,0x00000050,0x00000151,0x0004003d, + 0x00000006,0x0000025a,0x00000259,0x000500c2,0x00000006,0x0000025c,0x0000025a,0x0000025b, + 0x000500c7,0x00000006,0x0000025e,0x0000025c,0x0000025d,0x00040070,0x00000013,0x0000025f, + 0x0000025e,0x00050088,0x00000013,0x00000261,0x0000025f,0x00000260,0x00050041,0x00000257, + 0x00000262,0x00000051,0x00000143,0x0003003e,0x00000262,0x00000261,0x00050041,0x00000007, + 0x00000265,0x00000050,0x00000151,0x0004003d,0x00000006,0x00000266,0x00000265,0x0003003e, + 0x00000264,0x00000266,0x00050039,0x00000047,0x00000267,0x0000004a,0x00000264,0x00050041, + 0x00000268,0x00000269,0x00000051,0x00000263,0x0003003e,0x00000269,0x00000267,0x00050041, + 0x00000257,0x0000026b,0x00000051,0x00000131,0x0004003d,0x00000013,0x0000026c,0x0000026b, + 0x000500ba,0x00000047,0x0000026d,0x0000026c,0x000001e9,0x00050041,0x00000268,0x0000026e, + 0x00000051,0x0000026a,0x0003003e,0x0000026e,0x0000026d,0x00050041,0x00000268,0x00000270, + 0x00000051,0x0000026a,0x0004003d,0x00000047,0x00000271,0x00000270,0x000300f7,0x00000273, + 0x00000000,0x000400fa,0x00000271,0x00000272,0x00000273,0x000200f8,0x00000272,0x00050041, + 0x00000268,0x00000274,0x00000051,0x00000263,0x0004003d,0x00000047,0x00000275,0x00000274, + 0x000400a8,0x00000047,0x00000276,0x00000275,0x000200f9,0x00000273,0x000200f8,0x00000273, + 0x000700f5,0x00000047,0x00000277,0x00000271,0x00000053,0x00000276,0x00000272,0x00050041, + 0x00000268,0x00000278,0x00000051,0x0000026f,0x0003003e,0x00000278,0x00000277,0x00050041, + 0x00000268,0x00000279,0x00000051,0x0000026f,0x0004003d,0x00000047,0x0000027a,0x00000279, + 0x000300f7,0x0000027c,0x00000000,0x000400fa,0x0000027a,0x0000027b,0x0000027c,0x000200f8, + 0x0000027b,0x00050041,0x00000257,0x0000027e,0x00000051,0x00000131,0x0004003d,0x00000013, + 0x0000027f,0x0000027e,0x00050083,0x00000013,0x00000280,0x0000027d,0x0000027f,0x00050041, + 0x00000257,0x00000281,0x00000051,0x00000131,0x0003003e,0x00000281,0x00000280,0x000200f9, + 0x0000027c,0x000200f8,0x0000027c,0x00050041,0x00000007,0x00000283,0x00000050,0x00000151, + 0x0004003d,0x00000006,0x00000284,0x00000283,0x0003003e,0x00000282,0x00000284,0x00050039, + 0x00000014,0x00000285,0x00000017,0x00000282,0x00050051,0x00000013,0x00000286,0x00000285, + 0x00000000,0x00060041,0x00000257,0x00000287,0x00000051,0x00000105,0x00000151,0x0003003e, + 0x00000287,0x00000286,0x00050041,0x00000007,0x00000289,0x00000050,0x00000116,0x0004003d, + 0x00000006,0x0000028a,0x00000289,0x0003003e,0x00000288,0x0000028a,0x00050039,0x00000014, + 0x0000028b,0x00000017,0x00000288,0x00050051,0x00000013,0x0000028c,0x0000028b,0x00000000, + 0x00060041,0x00000257,0x0000028d,0x00000051,0x00000105,0x00000116,0x0003003e,0x0000028d, + 0x0000028c,0x00050041,0x00000268,0x00000290,0x00000051,0x0000028e,0x0003003e,0x00000290, + 0x0000028f,0x000100fd,0x00010038,0x00050036,0x0000003a,0x00000056,0x00000000,0x0000003b, + 0x00030037,0x0000002b,0x00000054,0x00030037,0x00000007,0x00000055,0x000200f8,0x00000057, + 0x0004003b,0x0000004c,0x00000291,0x00000007,0x0004003b,0x0000002b,0x00000292,0x00000007, + 0x0004003b,0x0000004e,0x00000295,0x00000007,0x0004003b,0x0000004c,0x00000296,0x00000007, + 0x0004003b,0x0000004e,0x00000298,0x00000007,0x0004003d,0x0000001f,0x00000293,0x00000054, + 0x0003003e,0x00000292,0x00000293,0x00050039,0x00000019,0x00000294,0x0000002e,0x00000292, + 0x0003003e,0x00000291,0x00000294,0x0004003d,0x00000019,0x00000297,0x00000291,0x0003003e, + 0x00000296,0x00000297,0x00060039,0x00000002,0x00000299,0x00000052,0x00000296,0x00000298, + 0x0004003d,0x0000004d,0x0000029a,0x00000298,0x0003003e,0x00000295,0x0000029a,0x00050041, + 0x0000029b,0x0000029c,0x00000295,0x00000105,0x0004003d,0x00000014,0x0000029d,0x0000029c, + 0x00050041,0x00000257,0x0000029e,0x00000295,0x00000131,0x0004003d,0x00000013,0x0000029f, + 0x0000029e,0x00050041,0x00000257,0x000002a0,0x00000295,0x00000143,0x0004003d,0x00000013, + 0x000002a1,0x000002a0,0x00050051,0x00000013,0x000002a2,0x0000029d,0x00000000,0x00050051, + 0x00000013,0x000002a3,0x0000029d,0x00000001,0x00070050,0x0000003a,0x000002a4,0x000002a2, + 0x000002a3,0x0000029f,0x000002a1,0x00040039,0x0000001f,0x000002a5,0x00000021,0x00050051, + 0x0000001e,0x000002a6,0x000002a5,0x00000000,0x000500ad,0x00000047,0x000002a7,0x000002a6, + 0x00000105,0x000600a9,0x00000013,0x000002a8,0x000002a7,0x0000027d,0x000001e9,0x0005008e, + 0x0000003a,0x000002a9,0x000002a4,0x000002a8,0x000200fe,0x000002a9,0x00010038,0x00050036, + 0x0000003a,0x0000005a,0x00000000,0x0000003b,0x00030037,0x0000002b,0x00000058,0x00030037, + 0x00000007,0x00000059,0x000200f8,0x0000005b,0x0004003b,0x0000002b,0x000002ac,0x00000007, + 0x0004003b,0x00000007,0x000002ae,0x00000007,0x0004003d,0x0000001f,0x000002ad,0x00000058, + 0x0003003e,0x000002ac,0x000002ad,0x0003003e,0x000002ae,0x0000019a,0x00060039,0x0000003a, + 0x000002af,0x0000003e,0x000002ac,0x000002ae,0x000200fe,0x000002af,0x00010038,0x00050036, + 0x00000002,0x00000061,0x00000000,0x0000005c,0x00030037,0x0000002b,0x0000005d,0x00030037, + 0x00000040,0x0000005e,0x00030037,0x00000007,0x0000005f,0x00030037,0x00000007,0x00000060, + 0x000200f8,0x00000062,0x0004003b,0x0000002b,0x000002b2,0x00000007,0x0004003b,0x00000040, + 0x000002b4,0x00000007,0x0004003b,0x00000007,0x000002b6,0x00000007,0x0004003d,0x0000001f, + 0x000002b3,0x0000005d,0x0003003e,0x000002b2,0x000002b3,0x0004003d,0x0000003a,0x000002b5, + 0x0000005e,0x0003003e,0x000002b4,0x000002b5,0x0004003d,0x00000006,0x000002b7,0x0000005f, + 0x0003003e,0x000002b6,0x000002b7,0x00070039,0x00000002,0x000002b8,0x00000045,0x000002b2, + 0x000002b4,0x000002b6,0x000100fd,0x00010038,0x00050036,0x00000002,0x00000065,0x00000000, + 0x00000063,0x00030037,0x00000007,0x00000064,0x000200f8,0x00000066,0x0004003b,0x00000030, + 0x000002bb,0x00000007,0x0004003b,0x00000007,0x000002bc,0x00000007,0x0003003e,0x000002bb, + 0x00000105,0x00060039,0x00000002,0x000002bd,0x00000038,0x000002bb,0x000002bc,0x0004003d, + 0x00000006,0x000002be,0x000002bc,0x0003003e,0x000002ba,0x000002be,0x000100fd,0x00010038, + 0x00050036,0x00000006,0x00000067,0x00000000,0x00000023,0x000200f8,0x00000068,0x0004003d, + 0x00000006,0x000002bf,0x000002ba,0x000200fe,0x000002bf,0x00010038,0x00050036,0x00000002, + 0x0000006a,0x00000000,0x00000063,0x00030037,0x00000007,0x00000069,0x000200f8,0x0000006b, + 0x0004003b,0x00000030,0x000002c2,0x00000007,0x0004003b,0x00000007,0x000002c3,0x00000007, + 0x0003003e,0x000002c2,0x00000105,0x0003003e,0x000002c3,0x00000151,0x00060039,0x00000002, + 0x000002c4,0x00000034,0x000002c2,0x000002c3,0x000100fd,0x00010038,0x00050036,0x0000003a, + 0x0000006f,0x00000000,0x0000006c,0x00030037,0x00000007,0x0000006d,0x00030037,0x00000007, + 0x0000006e,0x000200f8,0x00000070,0x0004003d,0x00000006,0x000002c9,0x0000006d,0x0004003d, + 0x00000006,0x000002ca,0x0000006e,0x00060041,0x000002cb,0x000002cc,0x000002c8,0x000002c9, + 0x000002ca,0x0004003d,0x00000013,0x000002cd,0x000002cc,0x0004003d,0x00000006,0x000002cf, + 0x0000006d,0x0004003d,0x00000006,0x000002d0,0x0000006e,0x00060041,0x000002cb,0x000002d1, + 0x000002ce,0x000002cf,0x000002d0,0x0004003d,0x00000013,0x000002d2,0x000002d1,0x0004003d, + 0x00000006,0x000002d4,0x0000006d,0x0004003d,0x00000006,0x000002d5,0x0000006e,0x00060041, + 0x000002cb,0x000002d6,0x000002d3,0x000002d4,0x000002d5,0x0004003d,0x00000013,0x000002d7, + 0x000002d6,0x0004003d,0x00000006,0x000002d9,0x0000006d,0x0004003d,0x00000006,0x000002da, + 0x0000006e,0x00060041,0x000002cb,0x000002db,0x000002d8,0x000002d9,0x000002da,0x0004003d, + 0x00000013,0x000002dc,0x000002db,0x00070050,0x0000003a,0x000002dd,0x000002cd,0x000002d2, + 0x000002d7,0x000002dc,0x000200fe,0x000002dd,0x00010038,0x00050036,0x00000002,0x00000075, + 0x00000000,0x00000071,0x00030037,0x00000007,0x00000072,0x00030037,0x00000007,0x00000073, + 0x00030037,0x00000040,0x00000074,0x000200f8,0x00000076,0x0004003d,0x00000006,0x000002e0, + 0x00000072,0x0004003d,0x00000006,0x000002e1,0x00000073,0x00050041,0x00000257,0x000002e2, + 0x00000074,0x00000151,0x0004003d,0x00000013,0x000002e3,0x000002e2,0x00060041,0x000002cb, + 0x000002e4,0x000002c8,0x000002e0,0x000002e1,0x0003003e,0x000002e4,0x000002e3,0x0004003d, + 0x00000006,0x000002e5,0x00000072,0x0004003d,0x00000006,0x000002e6,0x00000073,0x00050041, + 0x00000257,0x000002e7,0x00000074,0x00000116,0x0004003d,0x00000013,0x000002e8,0x000002e7, + 0x00060041,0x000002cb,0x000002e9,0x000002ce,0x000002e5,0x000002e6,0x0003003e,0x000002e9, + 0x000002e8,0x0004003d,0x00000006,0x000002ea,0x00000072,0x0004003d,0x00000006,0x000002eb, + 0x00000073,0x00050041,0x00000257,0x000002ec,0x00000074,0x0000010f,0x0004003d,0x00000013, + 0x000002ed,0x000002ec,0x00060041,0x000002cb,0x000002ee,0x000002d3,0x000002ea,0x000002eb, + 0x0003003e,0x000002ee,0x000002ed,0x0004003d,0x00000006,0x000002ef,0x00000072,0x0004003d, + 0x00000006,0x000002f0,0x00000073,0x00050041,0x00000257,0x000002f1,0x00000074,0x00000110, + 0x0004003d,0x00000013,0x000002f2,0x000002f1,0x00060041,0x000002cb,0x000002f3,0x000002d8, + 0x000002ef,0x000002f0,0x0003003e,0x000002f3,0x000002f2,0x000100fd,0x00010038,0x00050036, + 0x0000003a,0x0000007c,0x00000000,0x00000077,0x00030037,0x00000040,0x00000078,0x00030037, + 0x00000040,0x00000079,0x00030037,0x00000040,0x0000007a,0x00030037,0x00000040,0x0000007b, + 0x000200f8,0x0000007d,0x0004003b,0x00000040,0x000002f4,0x00000007,0x0004003b,0x00000257, + 0x000002f5,0x00000007,0x0004003b,0x00000257,0x000002f6,0x00000007,0x0004003b,0x00000257, + 0x00000303,0x00000007,0x0004003b,0x00000257,0x00000310,0x00000007,0x0004003b,0x00000257, + 0x0000031d,0x00000007,0x0003003e,0x000002f4,0x000001ea,0x0003003e,0x000002f5,0x000001e9, + 0x00050041,0x00000257,0x000002f7,0x00000078,0x0000010f,0x0004003d,0x00000013,0x000002f8, + 0x000002f7,0x000500ba,0x00000047,0x000002f9,0x000002f8,0x000001e9,0x000600a9,0x00000013, + 0x000002fa,0x000002f9,0x0000027d,0x000001e9,0x0003003e,0x000002f6,0x000002fa,0x0004003d, + 0x0000003a,0x000002fb,0x00000078,0x0004003d,0x00000013,0x000002fc,0x000002f6,0x0005008e, + 0x0000003a,0x000002fd,0x000002fb,0x000002fc,0x0004003d,0x0000003a,0x000002fe,0x000002f4, + 0x00050081,0x0000003a,0x000002ff,0x000002fe,0x000002fd,0x0003003e,0x000002f4,0x000002ff, + 0x0004003d,0x00000013,0x00000300,0x000002f6,0x0004003d,0x00000013,0x00000301,0x000002f5, + 0x00050081,0x00000013,0x00000302,0x00000301,0x00000300,0x0003003e,0x000002f5,0x00000302, + 0x00050041,0x00000257,0x00000304,0x00000079,0x0000010f,0x0004003d,0x00000013,0x00000305, + 0x00000304,0x000500ba,0x00000047,0x00000306,0x00000305,0x000001e9,0x000600a9,0x00000013, + 0x00000307,0x00000306,0x0000027d,0x000001e9,0x0003003e,0x00000303,0x00000307,0x0004003d, + 0x0000003a,0x00000308,0x00000079,0x0004003d,0x00000013,0x00000309,0x00000303,0x0005008e, + 0x0000003a,0x0000030a,0x00000308,0x00000309,0x0004003d,0x0000003a,0x0000030b,0x000002f4, + 0x00050081,0x0000003a,0x0000030c,0x0000030b,0x0000030a,0x0003003e,0x000002f4,0x0000030c, + 0x0004003d,0x00000013,0x0000030d,0x00000303,0x0004003d,0x00000013,0x0000030e,0x000002f5, + 0x00050081,0x00000013,0x0000030f,0x0000030e,0x0000030d,0x0003003e,0x000002f5,0x0000030f, + 0x00050041,0x00000257,0x00000311,0x0000007a,0x0000010f,0x0004003d,0x00000013,0x00000312, + 0x00000311,0x000500ba,0x00000047,0x00000313,0x00000312,0x000001e9,0x000600a9,0x00000013, + 0x00000314,0x00000313,0x0000027d,0x000001e9,0x0003003e,0x00000310,0x00000314,0x0004003d, + 0x0000003a,0x00000315,0x0000007a,0x0004003d,0x00000013,0x00000316,0x00000310,0x0005008e, + 0x0000003a,0x00000317,0x00000315,0x00000316,0x0004003d,0x0000003a,0x00000318,0x000002f4, + 0x00050081,0x0000003a,0x00000319,0x00000318,0x00000317,0x0003003e,0x000002f4,0x00000319, + 0x0004003d,0x00000013,0x0000031a,0x00000310,0x0004003d,0x00000013,0x0000031b,0x000002f5, + 0x00050081,0x00000013,0x0000031c,0x0000031b,0x0000031a,0x0003003e,0x000002f5,0x0000031c, + 0x00050041,0x00000257,0x0000031e,0x0000007b,0x0000010f,0x0004003d,0x00000013,0x0000031f, + 0x0000031e,0x000500ba,0x00000047,0x00000320,0x0000031f,0x000001e9,0x000600a9,0x00000013, + 0x00000321,0x00000320,0x0000027d,0x000001e9,0x0003003e,0x0000031d,0x00000321,0x0004003d, + 0x0000003a,0x00000322,0x0000007b,0x0004003d,0x00000013,0x00000323,0x0000031d,0x0005008e, + 0x0000003a,0x00000324,0x00000322,0x00000323,0x0004003d,0x0000003a,0x00000325,0x000002f4, + 0x00050081,0x0000003a,0x00000326,0x00000325,0x00000324,0x0003003e,0x000002f4,0x00000326, + 0x0004003d,0x00000013,0x00000327,0x0000031d,0x0004003d,0x00000013,0x00000328,0x000002f5, + 0x00050081,0x00000013,0x00000329,0x00000328,0x00000327,0x0003003e,0x000002f5,0x00000329, + 0x0004003d,0x00000013,0x0000032a,0x000002f5,0x000500ba,0x00000047,0x0000032c,0x0000032a, + 0x0000032b,0x0004003d,0x00000013,0x0000032d,0x000002f5,0x000600a9,0x00000013,0x0000032e, + 0x0000032c,0x0000032d,0x0000027d,0x0004003d,0x0000003a,0x0000032f,0x000002f4,0x00070050, + 0x0000003a,0x00000330,0x0000032e,0x0000032e,0x0000032e,0x0000032e,0x00050088,0x0000003a, + 0x00000331,0x0000032f,0x00000330,0x0003003e,0x000002f4,0x00000331,0x0004003d,0x0000003a, + 0x00000332,0x000002f4,0x000200fe,0x00000332,0x00010038,0x00050036,0x00000002,0x0000007e, + 0x00000000,0x00000003,0x000200f8,0x0000007f,0x000300e1,0x0000010f,0x00000335,0x000400e0, + 0x0000010f,0x0000010f,0x00000336,0x000100fd,0x00010038,0x00050036,0x00000047,0x00000084, + 0x00000000,0x00000080,0x00030037,0x00000007,0x00000081,0x00030037,0x00000007,0x00000082, + 0x00030037,0x00000007,0x00000083,0x000200f8,0x00000085,0x0004003b,0x00000007,0x0000033b, + 0x00000007,0x0004003d,0x00000006,0x00000337,0x00000082,0x000500aa,0x00000047,0x00000338, + 0x00000337,0x00000151,0x000300f7,0x0000033a,0x00000000,0x000400fa,0x00000338,0x00000339, + 0x0000033a,0x000200f8,0x00000339,0x0004003d,0x00000006,0x0000033c,0x00000083,0x0003003e, + 0x0000033b,0x0000033c,0x00050039,0x00000002,0x0000033d,0x00000065,0x0000033b,0x000200f9, + 0x0000033a,0x000200f8,0x0000033a,0x00040039,0x00000002,0x0000033e,0x0000007e,0x00040039, + 0x00000006,0x0000033f,0x00000067,0x0004003d,0x00000006,0x00000340,0x00000081,0x00050082, + 0x00000006,0x00000341,0x00000340,0x00000116,0x000500ab,0x00000047,0x00000342,0x0000033f, + 0x00000341,0x000200fe,0x00000342,0x00010038,0x00050036,0x0000003a,0x00000088,0x00000000, + 0x00000086,0x00030037,0x00000040,0x00000087,0x000200f8,0x00000089,0x0004003b,0x00000040, + 0x00000345,0x00000007,0x0004003b,0x00000040,0x00000347,0x00000007,0x0004003b,0x00000040, + 0x0000034a,0x00000007,0x0004003b,0x00000040,0x0000034d,0x00000007,0x0004003b,0x00000040, + 0x00000350,0x00000007,0x0004003b,0x00000040,0x00000352,0x00000007,0x0004003b,0x00000040, + 0x00000354,0x00000007,0x0004003b,0x00000040,0x00000356,0x00000007,0x0004003d,0x0000003a, + 0x00000346,0x00000087,0x0003003e,0x00000345,0x00000346,0x0004003d,0x0000003a,0x00000348, + 0x00000087,0x0006016e,0x0000003a,0x00000349,0x00000110,0x00000348,0x00000151,0x0003003e, + 0x00000347,0x00000349,0x0004003d,0x0000003a,0x0000034b,0x00000087,0x0006016e,0x0000003a, + 0x0000034c,0x00000110,0x0000034b,0x00000116,0x0003003e,0x0000034a,0x0000034c,0x0004003d, + 0x0000003a,0x0000034e,0x00000087,0x0006016e,0x0000003a,0x0000034f,0x00000110,0x0000034e, + 0x0000010f,0x0003003e,0x0000034d,0x0000034f,0x0004003d,0x0000003a,0x00000351,0x00000345, + 0x0003003e,0x00000350,0x00000351,0x0004003d,0x0000003a,0x00000353,0x00000347,0x0003003e, + 0x00000352,0x00000353,0x0004003d,0x0000003a,0x00000355,0x0000034a,0x0003003e,0x00000354, + 0x00000355,0x0004003d,0x0000003a,0x00000357,0x0000034d,0x0003003e,0x00000356,0x00000357, + 0x00080039,0x0000003a,0x00000358,0x0000007c,0x00000350,0x00000352,0x00000354,0x00000356, + 0x000200fe,0x00000358,0x00010038,0x00050036,0x0000003a,0x00000090,0x00000000,0x0000008a, + 0x00030037,0x0000004c,0x0000008b,0x00030037,0x0000004c,0x0000008c,0x00030037,0x0000004c, + 0x0000008d,0x00030037,0x0000004c,0x0000008e,0x00030037,0x00000007,0x0000008f,0x000200f8, + 0x00000091,0x0004003b,0x00000040,0x0000035d,0x00000007,0x0004003b,0x0000002b,0x00000360, + 0x00000007,0x0004003b,0x00000007,0x00000361,0x00000007,0x0004003b,0x00000040,0x00000364, + 0x00000007,0x0004003b,0x0000002b,0x00000367,0x00000007,0x0004003b,0x00000007,0x00000368, + 0x00000007,0x0004003b,0x00000040,0x0000036b,0x00000007,0x0004003b,0x0000002b,0x0000036e, + 0x00000007,0x0004003b,0x00000007,0x0000036f,0x00000007,0x0004003b,0x00000040,0x00000372, + 0x00000007,0x0004003b,0x0000002b,0x00000375,0x00000007,0x0004003b,0x00000007,0x00000376, + 0x00000007,0x0004003b,0x00000040,0x00000379,0x00000007,0x0004003b,0x00000040,0x0000037b, + 0x00000007,0x0004003b,0x00000040,0x0000037d,0x00000007,0x0004003b,0x00000040,0x0000037f, + 0x00000007,0x0004003d,0x00000019,0x0000035e,0x0000008b,0x0004007c,0x0000001f,0x0000035f, + 0x0000035e,0x0003003e,0x00000360,0x0000035f,0x0004003d,0x00000006,0x00000362,0x0000008f, + 0x0003003e,0x00000361,0x00000362,0x00060039,0x0000003a,0x00000363,0x0000005a,0x00000360, + 0x00000361,0x0003003e,0x0000035d,0x00000363,0x0004003d,0x00000019,0x00000365,0x0000008c, + 0x0004007c,0x0000001f,0x00000366,0x00000365,0x0003003e,0x00000367,0x00000366,0x0004003d, + 0x00000006,0x00000369,0x0000008f,0x0003003e,0x00000368,0x00000369,0x00060039,0x0000003a, + 0x0000036a,0x0000005a,0x00000367,0x00000368,0x0003003e,0x00000364,0x0000036a,0x0004003d, + 0x00000019,0x0000036c,0x0000008d,0x0004007c,0x0000001f,0x0000036d,0x0000036c,0x0003003e, + 0x0000036e,0x0000036d,0x0004003d,0x00000006,0x00000370,0x0000008f,0x0003003e,0x0000036f, + 0x00000370,0x00060039,0x0000003a,0x00000371,0x0000005a,0x0000036e,0x0000036f,0x0003003e, + 0x0000036b,0x00000371,0x0004003d,0x00000019,0x00000373,0x0000008e,0x0004007c,0x0000001f, + 0x00000374,0x00000373,0x0003003e,0x00000375,0x00000374,0x0004003d,0x00000006,0x00000377, + 0x0000008f,0x0003003e,0x00000376,0x00000377,0x00060039,0x0000003a,0x00000378,0x0000005a, + 0x00000375,0x00000376,0x0003003e,0x00000372,0x00000378,0x0004003d,0x0000003a,0x0000037a, + 0x0000035d,0x0003003e,0x00000379,0x0000037a,0x0004003d,0x0000003a,0x0000037c,0x00000364, + 0x0003003e,0x0000037b,0x0000037c,0x0004003d,0x0000003a,0x0000037e,0x0000036b,0x0003003e, + 0x0000037d,0x0000037e,0x0004003d,0x0000003a,0x00000380,0x00000372,0x0003003e,0x0000037f, + 0x00000380,0x00080039,0x0000003a,0x00000381,0x0000007c,0x00000379,0x0000037b,0x0000037d, + 0x0000037f,0x000200fe,0x00000381,0x00010038,0x00050036,0x0000003a,0x00000095,0x00000000, + 0x00000092,0x00030037,0x0000004c,0x00000093,0x00030037,0x00000007,0x00000094,0x000200f8, + 0x00000096,0x0004003b,0x0000004c,0x00000390,0x00000007,0x0004003b,0x0000004c,0x00000391, + 0x00000007,0x0004003b,0x0000004c,0x00000392,0x00000007,0x0004003b,0x0000004c,0x00000393, + 0x00000007,0x0004003b,0x00000007,0x00000394,0x00000007,0x0004003d,0x00000019,0x00000384, + 0x00000093,0x00050080,0x00000019,0x00000386,0x00000384,0x00000385,0x0004003d,0x00000019, + 0x00000387,0x00000093,0x00050080,0x00000019,0x00000389,0x00000387,0x00000388,0x0004003d, + 0x00000019,0x0000038a,0x00000093,0x00050080,0x00000019,0x0000038c,0x0000038a,0x0000038b, + 0x0004003d,0x00000019,0x0000038d,0x00000093,0x00050080,0x00000019,0x0000038f,0x0000038d, + 0x0000038e,0x0003003e,0x00000390,0x00000386,0x0003003e,0x00000391,0x00000389,0x0003003e, + 0x00000392,0x0000038c,0x0003003e,0x00000393,0x0000038f,0x0004003d,0x00000006,0x00000395, + 0x00000094,0x0003003e,0x00000394,0x00000395,0x00090039,0x0000003a,0x00000396,0x00000090, + 0x00000390,0x00000391,0x00000392,0x00000393,0x00000394,0x000200fe,0x00000396,0x00010038, + 0x00050036,0x0000003a,0x0000009c,0x00000000,0x0000008a,0x00030037,0x0000004c,0x00000097, + 0x00030037,0x0000004c,0x00000098,0x00030037,0x0000004c,0x00000099,0x00030037,0x0000004c, + 0x0000009a,0x00030037,0x00000007,0x0000009b,0x000200f8,0x0000009d,0x0004003b,0x00000040, + 0x00000399,0x00000007,0x0004003b,0x0000002b,0x0000039c,0x00000007,0x0004003b,0x00000007, + 0x0000039d,0x00000007,0x0004003b,0x00000040,0x000003a0,0x00000007,0x0004003b,0x0000002b, + 0x000003a3,0x00000007,0x0004003b,0x00000007,0x000003a4,0x00000007,0x0004003b,0x00000040, + 0x000003a7,0x00000007,0x0004003b,0x0000002b,0x000003aa,0x00000007,0x0004003b,0x00000007, + 0x000003ab,0x00000007,0x0004003b,0x00000040,0x000003ae,0x00000007,0x0004003b,0x0000002b, + 0x000003b1,0x00000007,0x0004003b,0x00000007,0x000003b2,0x00000007,0x0004003b,0x00000040, + 0x000003b5,0x00000007,0x0004003b,0x00000040,0x000003b7,0x00000007,0x0004003b,0x00000040, + 0x000003b9,0x00000007,0x0004003b,0x00000040,0x000003bb,0x00000007,0x0004003d,0x00000019, + 0x0000039a,0x00000097,0x0004007c,0x0000001f,0x0000039b,0x0000039a,0x0003003e,0x0000039c, + 0x0000039b,0x0004003d,0x00000006,0x0000039e,0x0000009b,0x0003003e,0x0000039d,0x0000039e, + 0x00060039,0x0000003a,0x0000039f,0x00000056,0x0000039c,0x0000039d,0x0003003e,0x00000399, + 0x0000039f,0x0004003d,0x00000019,0x000003a1,0x00000098,0x0004007c,0x0000001f,0x000003a2, + 0x000003a1,0x0003003e,0x000003a3,0x000003a2,0x0004003d,0x00000006,0x000003a5,0x0000009b, + 0x0003003e,0x000003a4,0x000003a5,0x00060039,0x0000003a,0x000003a6,0x00000056,0x000003a3, + 0x000003a4,0x0003003e,0x000003a0,0x000003a6,0x0004003d,0x00000019,0x000003a8,0x00000099, + 0x0004007c,0x0000001f,0x000003a9,0x000003a8,0x0003003e,0x000003aa,0x000003a9,0x0004003d, + 0x00000006,0x000003ac,0x0000009b,0x0003003e,0x000003ab,0x000003ac,0x00060039,0x0000003a, + 0x000003ad,0x00000056,0x000003aa,0x000003ab,0x0003003e,0x000003a7,0x000003ad,0x0004003d, + 0x00000019,0x000003af,0x0000009a,0x0004007c,0x0000001f,0x000003b0,0x000003af,0x0003003e, + 0x000003b1,0x000003b0,0x0004003d,0x00000006,0x000003b3,0x0000009b,0x0003003e,0x000003b2, + 0x000003b3,0x00060039,0x0000003a,0x000003b4,0x00000056,0x000003b1,0x000003b2,0x0003003e, + 0x000003ae,0x000003b4,0x0004003d,0x0000003a,0x000003b6,0x00000399,0x0003003e,0x000003b5, + 0x000003b6,0x0004003d,0x0000003a,0x000003b8,0x000003a0,0x0003003e,0x000003b7,0x000003b8, + 0x0004003d,0x0000003a,0x000003ba,0x000003a7,0x0003003e,0x000003b9,0x000003ba,0x0004003d, + 0x0000003a,0x000003bc,0x000003ae,0x0003003e,0x000003bb,0x000003bc,0x00080039,0x0000003a, + 0x000003bd,0x0000007c,0x000003b5,0x000003b7,0x000003b9,0x000003bb,0x000200fe,0x000003bd, + 0x00010038,0x00050036,0x0000003a,0x000000a0,0x00000000,0x00000092,0x00030037,0x0000004c, + 0x0000009e,0x00030037,0x00000007,0x0000009f,0x000200f8,0x000000a1,0x0004003b,0x0000004c, + 0x000003c8,0x00000007,0x0004003b,0x0000004c,0x000003c9,0x00000007,0x0004003b,0x0000004c, + 0x000003ca,0x00000007,0x0004003b,0x0000004c,0x000003cb,0x00000007,0x0004003b,0x00000007, + 0x000003cc,0x00000007,0x0004003d,0x00000019,0x000003c0,0x0000009e,0x00050080,0x00000019, + 0x000003c1,0x000003c0,0x00000385,0x0004003d,0x00000019,0x000003c2,0x0000009e,0x00050080, + 0x00000019,0x000003c3,0x000003c2,0x00000388,0x0004003d,0x00000019,0x000003c4,0x0000009e, + 0x00050080,0x00000019,0x000003c5,0x000003c4,0x0000038b,0x0004003d,0x00000019,0x000003c6, + 0x0000009e,0x00050080,0x00000019,0x000003c7,0x000003c6,0x0000038e,0x0003003e,0x000003c8, + 0x000003c1,0x0003003e,0x000003c9,0x000003c3,0x0003003e,0x000003ca,0x000003c5,0x0003003e, + 0x000003cb,0x000003c7,0x0004003d,0x00000006,0x000003cd,0x0000009f,0x0003003e,0x000003cc, + 0x000003cd,0x00090039,0x0000003a,0x000003ce,0x0000009c,0x000003c8,0x000003c9,0x000003ca, + 0x000003cb,0x000003cc,0x000200fe,0x000003ce,0x00010038,0x00050036,0x00000002,0x000000a9, + 0x00000000,0x000000a2,0x00030037,0x00000007,0x000000a3,0x00030037,0x00000007,0x000000a4, + 0x00030037,0x0000004c,0x000000a5,0x00030037,0x00000007,0x000000a6,0x00030037,0x00000007, + 0x000000a7,0x00030037,0x00000007,0x000000a8,0x000200f8,0x000000aa,0x0004003b,0x0000002b, + 0x000003d1,0x00000007,0x0004003b,0x0000002b,0x000003df,0x00000007,0x0004003b,0x000003ec, + 0x000003ed,0x00000007,0x0004003b,0x0000004c,0x000003f0,0x00000007,0x0004003b,0x00000007, + 0x000003f1,0x00000007,0x0004003b,0x0000002b,0x000003f5,0x00000007,0x0004003b,0x00000040, + 0x000003f7,0x00000007,0x0004003b,0x00000007,0x000003fa,0x00000007,0x0004003b,0x00000007, + 0x000003fb,0x00000007,0x0004003b,0x0000004c,0x00000418,0x00000007,0x0004003b,0x00000007, + 0x00000419,0x00000007,0x0004003b,0x0000002b,0x0000041d,0x00000007,0x0004003b,0x00000040, + 0x0000041f,0x00000007,0x0004003b,0x00000007,0x00000422,0x00000007,0x0004003b,0x00000007, + 0x00000423,0x00000007,0x0004003b,0x0000004c,0x00000440,0x00000007,0x0004003b,0x00000007, + 0x00000441,0x00000007,0x0004003b,0x0000002b,0x00000445,0x00000007,0x0004003b,0x00000040, + 0x00000447,0x00000007,0x0004003b,0x00000007,0x0000044a,0x00000007,0x0004003b,0x00000007, + 0x0000044b,0x00000007,0x0004003b,0x0000004c,0x0000046a,0x00000007,0x0004003b,0x00000007, + 0x0000046b,0x00000007,0x0004003b,0x0000002b,0x0000046f,0x00000007,0x0004003b,0x00000040, + 0x00000471,0x00000007,0x0004003b,0x00000007,0x00000474,0x00000007,0x0004003b,0x00000007, + 0x00000475,0x00000007,0x0004003b,0x00000040,0x0000047d,0x00000007,0x0004003b,0x00000040, + 0x00000482,0x00000007,0x0004003b,0x00000040,0x00000487,0x00000007,0x0004003b,0x00000040, + 0x0000048c,0x00000007,0x0004003b,0x0000002b,0x000004a2,0x00000007,0x0004003b,0x00000040, + 0x000004a3,0x00000007,0x0004003b,0x00000007,0x000004a6,0x00000007,0x0004003b,0x00000007, + 0x000004a7,0x00000007,0x0004003b,0x00000007,0x000004ae,0x00000007,0x0004003b,0x00000007, + 0x000004af,0x00000007,0x0004003b,0x00000040,0x000004b0,0x00000007,0x0004003b,0x0000002b, + 0x000004c1,0x00000007,0x0004003b,0x00000040,0x000004c2,0x00000007,0x0004003b,0x00000007, + 0x000004c5,0x00000007,0x0004003b,0x00000007,0x000004c6,0x00000007,0x0004003b,0x00000007, + 0x000004ce,0x00000007,0x0004003b,0x00000007,0x000004cf,0x00000007,0x0004003b,0x00000040, + 0x000004d0,0x00000007,0x0004003b,0x0000002b,0x000004e1,0x00000007,0x0004003b,0x00000040, + 0x000004e2,0x00000007,0x0004003b,0x00000007,0x000004e5,0x00000007,0x0004003b,0x00000007, + 0x000004e6,0x00000007,0x0004003b,0x00000007,0x000004ee,0x00000007,0x0004003b,0x00000007, + 0x000004ef,0x00000007,0x0004003b,0x00000040,0x000004f0,0x00000007,0x0004003b,0x0000002b, + 0x00000502,0x00000007,0x0004003b,0x00000040,0x00000503,0x00000007,0x0004003b,0x00000007, + 0x00000506,0x00000007,0x0004003b,0x00000007,0x00000507,0x00000007,0x0004003b,0x00000007, + 0x00000510,0x00000007,0x0004003b,0x00000007,0x00000511,0x00000007,0x0004003b,0x00000040, + 0x00000512,0x00000007,0x0004003d,0x00000019,0x000003d2,0x000000a5,0x00050050,0x00000019, + 0x000003d4,0x000003d3,0x000003d3,0x00050084,0x00000019,0x000003d5,0x000003d2,0x000003d4, + 0x0004007c,0x0000001f,0x000003d6,0x000003d5,0x0004003d,0x00000006,0x000003d7,0x000000a3, + 0x00050084,0x00000006,0x000003d8,0x000003d7,0x0000010f,0x0004007c,0x0000001e,0x000003d9, + 0x000003d8,0x0004003d,0x00000006,0x000003da,0x000000a4,0x00050084,0x00000006,0x000003db, + 0x000003da,0x0000010f,0x0004007c,0x0000001e,0x000003dc,0x000003db,0x00050050,0x0000001f, + 0x000003dd,0x000003d9,0x000003dc,0x00050080,0x0000001f,0x000003de,0x000003d6,0x000003dd, + 0x0003003e,0x000003d1,0x000003de,0x0004003d,0x00000019,0x000003e0,0x000000a5,0x00050050, + 0x00000019,0x000003e2,0x000003e1,0x000003e1,0x00050084,0x00000019,0x000003e3,0x000003e0, + 0x000003e2,0x0004007c,0x0000001f,0x000003e4,0x000003e3,0x0004003d,0x00000006,0x000003e5, + 0x000000a3,0x0004007c,0x0000001e,0x000003e6,0x000003e5,0x0004003d,0x00000006,0x000003e7, + 0x000000a4,0x0004007c,0x0000001e,0x000003e8,0x000003e7,0x00050050,0x0000001f,0x000003e9, + 0x000003e6,0x000003e8,0x00050080,0x0000001f,0x000003ea,0x000003e4,0x000003e9,0x0003003e, + 0x000003df,0x000003ea,0x0004003d,0x0000001f,0x000003ee,0x000003d1,0x0004007c,0x00000019, + 0x000003ef,0x000003ee,0x0003003e,0x000003f0,0x000003ef,0x0004003d,0x00000006,0x000003f2, + 0x000000a8,0x0003003e,0x000003f1,0x000003f2,0x00060039,0x0000003a,0x000003f3,0x000000a0, + 0x000003f0,0x000003f1,0x00050041,0x00000040,0x000003f4,0x000003ed,0x00000105,0x0003003e, + 0x000003f4,0x000003f3,0x0004003d,0x0000001f,0x000003f6,0x000003df,0x0003003e,0x000003f5, + 0x000003f6,0x00050041,0x00000040,0x000003f8,0x000003ed,0x00000105,0x0004003d,0x0000003a, + 0x000003f9,0x000003f8,0x0003003e,0x000003f7,0x000003f9,0x0003003e,0x000003fa,0x00000151, + 0x0004003d,0x00000006,0x000003fc,0x000000a8,0x0003003e,0x000003fb,0x000003fc,0x00080039, + 0x00000002,0x000003fd,0x00000061,0x000003f5,0x000003f7,0x000003fa,0x000003fb,0x0004003d, + 0x00000019,0x000003fe,0x000000a5,0x00050050,0x00000019,0x000003ff,0x000003d3,0x000003d3, + 0x00050084,0x00000019,0x00000400,0x000003fe,0x000003ff,0x0004007c,0x0000001f,0x00000401, + 0x00000400,0x0004003d,0x00000006,0x00000402,0x000000a3,0x00050084,0x00000006,0x00000403, + 0x00000402,0x0000010f,0x00050080,0x00000006,0x00000404,0x00000403,0x000003e1,0x0004007c, + 0x0000001e,0x00000405,0x00000404,0x0004003d,0x00000006,0x00000406,0x000000a4,0x00050084, + 0x00000006,0x00000407,0x00000406,0x0000010f,0x0004007c,0x0000001e,0x00000408,0x00000407, + 0x00050050,0x0000001f,0x00000409,0x00000405,0x00000408,0x00050080,0x0000001f,0x0000040a, + 0x00000401,0x00000409,0x0003003e,0x000003d1,0x0000040a,0x0004003d,0x00000019,0x0000040b, + 0x000000a5,0x00050050,0x00000019,0x0000040c,0x000003e1,0x000003e1,0x00050084,0x00000019, + 0x0000040d,0x0000040b,0x0000040c,0x0004007c,0x0000001f,0x0000040e,0x0000040d,0x0004003d, + 0x00000006,0x0000040f,0x000000a3,0x00050080,0x00000006,0x00000410,0x0000040f,0x0000025b, + 0x0004007c,0x0000001e,0x00000411,0x00000410,0x0004003d,0x00000006,0x00000412,0x000000a4, + 0x0004007c,0x0000001e,0x00000413,0x00000412,0x00050050,0x0000001f,0x00000414,0x00000411, + 0x00000413,0x00050080,0x0000001f,0x00000415,0x0000040e,0x00000414,0x0003003e,0x000003df, + 0x00000415,0x0004003d,0x0000001f,0x00000416,0x000003d1,0x0004007c,0x00000019,0x00000417, + 0x00000416,0x0003003e,0x00000418,0x00000417,0x0004003d,0x00000006,0x0000041a,0x000000a8, + 0x0003003e,0x00000419,0x0000041a,0x00060039,0x0000003a,0x0000041b,0x000000a0,0x00000418, + 0x00000419,0x00050041,0x00000040,0x0000041c,0x000003ed,0x00000131,0x0003003e,0x0000041c, + 0x0000041b,0x0004003d,0x0000001f,0x0000041e,0x000003df,0x0003003e,0x0000041d,0x0000041e, + 0x00050041,0x00000040,0x00000420,0x000003ed,0x00000131,0x0004003d,0x0000003a,0x00000421, + 0x00000420,0x0003003e,0x0000041f,0x00000421,0x0003003e,0x00000422,0x00000151,0x0004003d, + 0x00000006,0x00000424,0x000000a8,0x0003003e,0x00000423,0x00000424,0x00080039,0x00000002, + 0x00000425,0x00000061,0x0000041d,0x0000041f,0x00000422,0x00000423,0x0004003d,0x00000019, + 0x00000426,0x000000a5,0x00050050,0x00000019,0x00000427,0x000003d3,0x000003d3,0x00050084, + 0x00000019,0x00000428,0x00000426,0x00000427,0x0004007c,0x0000001f,0x00000429,0x00000428, + 0x0004003d,0x00000006,0x0000042a,0x000000a3,0x00050084,0x00000006,0x0000042b,0x0000042a, + 0x0000010f,0x0004007c,0x0000001e,0x0000042c,0x0000042b,0x0004003d,0x00000006,0x0000042d, + 0x000000a4,0x00050084,0x00000006,0x0000042e,0x0000042d,0x0000010f,0x00050080,0x00000006, + 0x0000042f,0x0000042e,0x000003e1,0x0004007c,0x0000001e,0x00000430,0x0000042f,0x00050050, + 0x0000001f,0x00000431,0x0000042c,0x00000430,0x00050080,0x0000001f,0x00000432,0x00000429, + 0x00000431,0x0003003e,0x000003d1,0x00000432,0x0004003d,0x00000019,0x00000433,0x000000a5, + 0x00050050,0x00000019,0x00000434,0x000003e1,0x000003e1,0x00050084,0x00000019,0x00000435, + 0x00000433,0x00000434,0x0004007c,0x0000001f,0x00000436,0x00000435,0x0004003d,0x00000006, + 0x00000437,0x000000a3,0x0004007c,0x0000001e,0x00000438,0x00000437,0x0004003d,0x00000006, + 0x00000439,0x000000a4,0x00050080,0x00000006,0x0000043a,0x00000439,0x0000025b,0x0004007c, + 0x0000001e,0x0000043b,0x0000043a,0x00050050,0x0000001f,0x0000043c,0x00000438,0x0000043b, + 0x00050080,0x0000001f,0x0000043d,0x00000436,0x0000043c,0x0003003e,0x000003df,0x0000043d, + 0x0004003d,0x0000001f,0x0000043e,0x000003d1,0x0004007c,0x00000019,0x0000043f,0x0000043e, + 0x0003003e,0x00000440,0x0000043f,0x0004003d,0x00000006,0x00000442,0x000000a8,0x0003003e, + 0x00000441,0x00000442,0x00060039,0x0000003a,0x00000443,0x000000a0,0x00000440,0x00000441, + 0x00050041,0x00000040,0x00000444,0x000003ed,0x00000143,0x0003003e,0x00000444,0x00000443, + 0x0004003d,0x0000001f,0x00000446,0x000003df,0x0003003e,0x00000445,0x00000446,0x00050041, + 0x00000040,0x00000448,0x000003ed,0x00000143,0x0004003d,0x0000003a,0x00000449,0x00000448, + 0x0003003e,0x00000447,0x00000449,0x0003003e,0x0000044a,0x00000151,0x0004003d,0x00000006, + 0x0000044c,0x000000a8,0x0003003e,0x0000044b,0x0000044c,0x00080039,0x00000002,0x0000044d, + 0x00000061,0x00000445,0x00000447,0x0000044a,0x0000044b,0x0004003d,0x00000019,0x0000044e, + 0x000000a5,0x00050050,0x00000019,0x0000044f,0x000003d3,0x000003d3,0x00050084,0x00000019, + 0x00000450,0x0000044e,0x0000044f,0x0004007c,0x0000001f,0x00000451,0x00000450,0x0004003d, + 0x00000006,0x00000452,0x000000a3,0x00050084,0x00000006,0x00000453,0x00000452,0x0000010f, + 0x00050080,0x00000006,0x00000454,0x00000453,0x000003e1,0x0004007c,0x0000001e,0x00000455, + 0x00000454,0x0004003d,0x00000006,0x00000456,0x000000a4,0x00050084,0x00000006,0x00000457, + 0x00000456,0x0000010f,0x00050080,0x00000006,0x00000458,0x00000457,0x000003e1,0x0004007c, + 0x0000001e,0x00000459,0x00000458,0x00050050,0x0000001f,0x0000045a,0x00000455,0x00000459, + 0x00050080,0x0000001f,0x0000045b,0x00000451,0x0000045a,0x0003003e,0x000003d1,0x0000045b, + 0x0004003d,0x00000019,0x0000045c,0x000000a5,0x00050050,0x00000019,0x0000045d,0x000003e1, + 0x000003e1,0x00050084,0x00000019,0x0000045e,0x0000045c,0x0000045d,0x0004007c,0x0000001f, + 0x0000045f,0x0000045e,0x0004003d,0x00000006,0x00000460,0x000000a3,0x00050080,0x00000006, + 0x00000461,0x00000460,0x0000025b,0x0004007c,0x0000001e,0x00000462,0x00000461,0x0004003d, + 0x00000006,0x00000463,0x000000a4,0x00050080,0x00000006,0x00000464,0x00000463,0x0000025b, + 0x0004007c,0x0000001e,0x00000465,0x00000464,0x00050050,0x0000001f,0x00000466,0x00000462, + 0x00000465,0x00050080,0x0000001f,0x00000467,0x0000045f,0x00000466,0x0003003e,0x000003df, + 0x00000467,0x0004003d,0x0000001f,0x00000468,0x000003d1,0x0004007c,0x00000019,0x00000469, + 0x00000468,0x0003003e,0x0000046a,0x00000469,0x0004003d,0x00000006,0x0000046c,0x000000a8, + 0x0003003e,0x0000046b,0x0000046c,0x00060039,0x0000003a,0x0000046d,0x000000a0,0x0000046a, + 0x0000046b,0x00050041,0x00000040,0x0000046e,0x000003ed,0x0000026a,0x0003003e,0x0000046e, + 0x0000046d,0x0004003d,0x0000001f,0x00000470,0x000003df,0x0003003e,0x0000046f,0x00000470, + 0x00050041,0x00000040,0x00000472,0x000003ed,0x0000026a,0x0004003d,0x0000003a,0x00000473, + 0x00000472,0x0003003e,0x00000471,0x00000473,0x0003003e,0x00000474,0x00000151,0x0004003d, + 0x00000006,0x00000476,0x000000a8,0x0003003e,0x00000475,0x00000476,0x00080039,0x00000002, + 0x00000477,0x00000061,0x0000046f,0x00000471,0x00000474,0x00000475,0x0004003d,0x00000006, + 0x00000478,0x000000a7,0x000500b2,0x00000047,0x00000479,0x00000478,0x00000116,0x000300f7, + 0x0000047b,0x00000000,0x000400fa,0x00000479,0x0000047a,0x0000047b,0x000200f8,0x0000047a, + 0x000100fd,0x000200f8,0x0000047b,0x00050041,0x00000040,0x0000047e,0x000003ed,0x00000105, + 0x0004003d,0x0000003a,0x0000047f,0x0000047e,0x0003003e,0x0000047d,0x0000047f,0x00050039, + 0x0000003a,0x00000480,0x00000088,0x0000047d,0x00050041,0x00000040,0x00000481,0x000003ed, + 0x00000105,0x0003003e,0x00000481,0x00000480,0x00050041,0x00000040,0x00000483,0x000003ed, + 0x00000131,0x0004003d,0x0000003a,0x00000484,0x00000483,0x0003003e,0x00000482,0x00000484, + 0x00050039,0x0000003a,0x00000485,0x00000088,0x00000482,0x00050041,0x00000040,0x00000486, + 0x000003ed,0x00000131,0x0003003e,0x00000486,0x00000485,0x00050041,0x00000040,0x00000488, + 0x000003ed,0x00000143,0x0004003d,0x0000003a,0x00000489,0x00000488,0x0003003e,0x00000487, + 0x00000489,0x00050039,0x0000003a,0x0000048a,0x00000088,0x00000487,0x00050041,0x00000040, + 0x0000048b,0x000003ed,0x00000143,0x0003003e,0x0000048b,0x0000048a,0x00050041,0x00000040, + 0x0000048d,0x000003ed,0x0000026a,0x0004003d,0x0000003a,0x0000048e,0x0000048d,0x0003003e, + 0x0000048c,0x0000048e,0x00050039,0x0000003a,0x0000048f,0x00000088,0x0000048c,0x00050041, + 0x00000040,0x00000490,0x000003ed,0x0000026a,0x0003003e,0x00000490,0x0000048f,0x0004003d, + 0x00000006,0x00000491,0x000000a6,0x00050089,0x00000006,0x00000492,0x00000491,0x00000190, + 0x000500aa,0x00000047,0x00000493,0x00000492,0x00000151,0x000300f7,0x00000495,0x00000000, + 0x000400fa,0x00000493,0x00000494,0x00000495,0x000200f8,0x00000494,0x0004003d,0x00000019, + 0x00000496,0x000000a5,0x00050050,0x00000019,0x00000497,0x0000025b,0x0000025b,0x00050084, + 0x00000019,0x00000498,0x00000496,0x00000497,0x0004007c,0x0000001f,0x00000499,0x00000498, + 0x0004003d,0x00000006,0x0000049a,0x000000a3,0x00050086,0x00000006,0x0000049b,0x0000049a, + 0x0000010f,0x0004007c,0x0000001e,0x0000049c,0x0000049b,0x0004003d,0x00000006,0x0000049d, + 0x000000a4,0x00050086,0x00000006,0x0000049e,0x0000049d,0x0000010f,0x0004007c,0x0000001e, + 0x0000049f,0x0000049e,0x00050050,0x0000001f,0x000004a0,0x0000049c,0x0000049f,0x00050080, + 0x0000001f,0x000004a1,0x00000499,0x000004a0,0x0003003e,0x000004a2,0x000004a1,0x00050041, + 0x00000040,0x000004a4,0x000003ed,0x00000105,0x0004003d,0x0000003a,0x000004a5,0x000004a4, + 0x0003003e,0x000004a3,0x000004a5,0x0003003e,0x000004a6,0x00000116,0x0004003d,0x00000006, + 0x000004a8,0x000000a8,0x0003003e,0x000004a7,0x000004a8,0x00080039,0x00000002,0x000004a9, + 0x00000061,0x000004a2,0x000004a3,0x000004a6,0x000004a7,0x0004003d,0x00000006,0x000004aa, + 0x000000a3,0x00050086,0x00000006,0x000004ab,0x000004aa,0x0000010f,0x0004003d,0x00000006, + 0x000004ac,0x000000a4,0x00050086,0x00000006,0x000004ad,0x000004ac,0x0000010f,0x0003003e, + 0x000004ae,0x000004ab,0x0003003e,0x000004af,0x000004ad,0x00050041,0x00000040,0x000004b1, + 0x000003ed,0x00000105,0x0004003d,0x0000003a,0x000004b2,0x000004b1,0x0003003e,0x000004b0, + 0x000004b2,0x00070039,0x00000002,0x000004b3,0x00000075,0x000004ae,0x000004af,0x000004b0, + 0x0004003d,0x00000019,0x000004b4,0x000000a5,0x00050050,0x00000019,0x000004b5,0x0000025b, + 0x0000025b,0x00050084,0x00000019,0x000004b6,0x000004b4,0x000004b5,0x0004007c,0x0000001f, + 0x000004b7,0x000004b6,0x0004003d,0x00000006,0x000004b8,0x000000a3,0x00050086,0x00000006, + 0x000004b9,0x000004b8,0x0000010f,0x00050080,0x00000006,0x000004ba,0x000004b9,0x000001b8, + 0x0004007c,0x0000001e,0x000004bb,0x000004ba,0x0004003d,0x00000006,0x000004bc,0x000000a4, + 0x00050086,0x00000006,0x000004bd,0x000004bc,0x0000010f,0x0004007c,0x0000001e,0x000004be, + 0x000004bd,0x00050050,0x0000001f,0x000004bf,0x000004bb,0x000004be,0x00050080,0x0000001f, + 0x000004c0,0x000004b7,0x000004bf,0x0003003e,0x000004c1,0x000004c0,0x00050041,0x00000040, + 0x000004c3,0x000003ed,0x00000131,0x0004003d,0x0000003a,0x000004c4,0x000004c3,0x0003003e, + 0x000004c2,0x000004c4,0x0003003e,0x000004c5,0x00000116,0x0004003d,0x00000006,0x000004c7, + 0x000000a8,0x0003003e,0x000004c6,0x000004c7,0x00080039,0x00000002,0x000004c8,0x00000061, + 0x000004c1,0x000004c2,0x000004c5,0x000004c6,0x0004003d,0x00000006,0x000004c9,0x000000a3, + 0x00050086,0x00000006,0x000004ca,0x000004c9,0x0000010f,0x00050080,0x00000006,0x000004cb, + 0x000004ca,0x000001b8,0x0004003d,0x00000006,0x000004cc,0x000000a4,0x00050086,0x00000006, + 0x000004cd,0x000004cc,0x0000010f,0x0003003e,0x000004ce,0x000004cb,0x0003003e,0x000004cf, + 0x000004cd,0x00050041,0x00000040,0x000004d1,0x000003ed,0x00000131,0x0004003d,0x0000003a, + 0x000004d2,0x000004d1,0x0003003e,0x000004d0,0x000004d2,0x00070039,0x00000002,0x000004d3, + 0x00000075,0x000004ce,0x000004cf,0x000004d0,0x0004003d,0x00000019,0x000004d4,0x000000a5, + 0x00050050,0x00000019,0x000004d5,0x0000025b,0x0000025b,0x00050084,0x00000019,0x000004d6, + 0x000004d4,0x000004d5,0x0004007c,0x0000001f,0x000004d7,0x000004d6,0x0004003d,0x00000006, + 0x000004d8,0x000000a3,0x00050086,0x00000006,0x000004d9,0x000004d8,0x0000010f,0x0004007c, + 0x0000001e,0x000004da,0x000004d9,0x0004003d,0x00000006,0x000004db,0x000000a4,0x00050086, + 0x00000006,0x000004dc,0x000004db,0x0000010f,0x00050080,0x00000006,0x000004dd,0x000004dc, + 0x000001b8,0x0004007c,0x0000001e,0x000004de,0x000004dd,0x00050050,0x0000001f,0x000004df, + 0x000004da,0x000004de,0x00050080,0x0000001f,0x000004e0,0x000004d7,0x000004df,0x0003003e, + 0x000004e1,0x000004e0,0x00050041,0x00000040,0x000004e3,0x000003ed,0x00000143,0x0004003d, + 0x0000003a,0x000004e4,0x000004e3,0x0003003e,0x000004e2,0x000004e4,0x0003003e,0x000004e5, + 0x00000116,0x0004003d,0x00000006,0x000004e7,0x000000a8,0x0003003e,0x000004e6,0x000004e7, + 0x00080039,0x00000002,0x000004e8,0x00000061,0x000004e1,0x000004e2,0x000004e5,0x000004e6, + 0x0004003d,0x00000006,0x000004e9,0x000000a3,0x00050086,0x00000006,0x000004ea,0x000004e9, + 0x0000010f,0x0004003d,0x00000006,0x000004eb,0x000000a4,0x00050086,0x00000006,0x000004ec, + 0x000004eb,0x0000010f,0x00050080,0x00000006,0x000004ed,0x000004ec,0x000001b8,0x0003003e, + 0x000004ee,0x000004ea,0x0003003e,0x000004ef,0x000004ed,0x00050041,0x00000040,0x000004f1, + 0x000003ed,0x00000143,0x0004003d,0x0000003a,0x000004f2,0x000004f1,0x0003003e,0x000004f0, + 0x000004f2,0x00070039,0x00000002,0x000004f3,0x00000075,0x000004ee,0x000004ef,0x000004f0, + 0x0004003d,0x00000019,0x000004f4,0x000000a5,0x00050050,0x00000019,0x000004f5,0x0000025b, + 0x0000025b,0x00050084,0x00000019,0x000004f6,0x000004f4,0x000004f5,0x0004007c,0x0000001f, + 0x000004f7,0x000004f6,0x0004003d,0x00000006,0x000004f8,0x000000a3,0x00050086,0x00000006, + 0x000004f9,0x000004f8,0x0000010f,0x00050080,0x00000006,0x000004fa,0x000004f9,0x000001b8, + 0x0004007c,0x0000001e,0x000004fb,0x000004fa,0x0004003d,0x00000006,0x000004fc,0x000000a4, + 0x00050086,0x00000006,0x000004fd,0x000004fc,0x0000010f,0x00050080,0x00000006,0x000004fe, + 0x000004fd,0x000001b8,0x0004007c,0x0000001e,0x000004ff,0x000004fe,0x00050050,0x0000001f, + 0x00000500,0x000004fb,0x000004ff,0x00050080,0x0000001f,0x00000501,0x000004f7,0x00000500, + 0x0003003e,0x00000502,0x00000501,0x00050041,0x00000040,0x00000504,0x000003ed,0x0000026a, + 0x0004003d,0x0000003a,0x00000505,0x00000504,0x0003003e,0x00000503,0x00000505,0x0003003e, + 0x00000506,0x00000116,0x0004003d,0x00000006,0x00000508,0x000000a8,0x0003003e,0x00000507, + 0x00000508,0x00080039,0x00000002,0x00000509,0x00000061,0x00000502,0x00000503,0x00000506, + 0x00000507,0x0004003d,0x00000006,0x0000050a,0x000000a3,0x00050086,0x00000006,0x0000050b, + 0x0000050a,0x0000010f,0x00050080,0x00000006,0x0000050c,0x0000050b,0x000001b8,0x0004003d, + 0x00000006,0x0000050d,0x000000a4,0x00050086,0x00000006,0x0000050e,0x0000050d,0x0000010f, + 0x00050080,0x00000006,0x0000050f,0x0000050e,0x000001b8,0x0003003e,0x00000510,0x0000050c, + 0x0003003e,0x00000511,0x0000050f,0x00050041,0x00000040,0x00000513,0x000003ed,0x0000026a, + 0x0004003d,0x0000003a,0x00000514,0x00000513,0x0003003e,0x00000512,0x00000514,0x00070039, + 0x00000002,0x00000515,0x00000075,0x00000510,0x00000511,0x00000512,0x000200f9,0x00000495, + 0x000200f8,0x00000495,0x000100fd,0x00010038,0x00050036,0x00000002,0x000000b1,0x00000000, + 0x000000a2,0x00030037,0x00000007,0x000000ab,0x00030037,0x00000007,0x000000ac,0x00030037, + 0x0000004c,0x000000ad,0x00030037,0x00000007,0x000000ae,0x00030037,0x00000007,0x000000af, + 0x00030037,0x00000007,0x000000b0,0x000200f8,0x000000b2,0x0004003b,0x00000007,0x00000516, + 0x00000007,0x0004003b,0x00000007,0x00000518,0x00000007,0x0004003b,0x0000004c,0x0000051a, + 0x00000007,0x0004003b,0x00000007,0x0000051c,0x00000007,0x0004003b,0x00000007,0x0000051e, + 0x00000007,0x0004003b,0x00000007,0x00000520,0x00000007,0x0004003d,0x00000006,0x00000517, + 0x000000ab,0x0003003e,0x00000516,0x00000517,0x0004003d,0x00000006,0x00000519,0x000000ac, + 0x0003003e,0x00000518,0x00000519,0x0004003d,0x00000019,0x0000051b,0x000000ad,0x0003003e, + 0x0000051a,0x0000051b,0x0004003d,0x00000006,0x0000051d,0x000000ae,0x0003003e,0x0000051c, + 0x0000051d,0x0004003d,0x00000006,0x0000051f,0x000000af,0x0003003e,0x0000051e,0x0000051f, + 0x0004003d,0x00000006,0x00000521,0x000000b0,0x0003003e,0x00000520,0x00000521,0x000a0039, + 0x00000002,0x00000522,0x000000a9,0x00000516,0x00000518,0x0000051a,0x0000051c,0x0000051e, + 0x00000520,0x000100fd,0x00010038,0x00050036,0x00000002,0x000000b9,0x00000000,0x000000a2, + 0x00030037,0x00000007,0x000000b3,0x00030037,0x00000007,0x000000b4,0x00030037,0x0000004c, + 0x000000b5,0x00030037,0x00000007,0x000000b6,0x00030037,0x00000007,0x000000b7,0x00030037, + 0x00000007,0x000000b8,0x000200f8,0x000000ba,0x0004003b,0x00000040,0x00000523,0x00000007, + 0x0004003b,0x00000007,0x00000524,0x00000007,0x0004003b,0x00000007,0x00000526,0x00000007, + 0x0004003b,0x00000040,0x00000529,0x00000007,0x0004003b,0x0000002b,0x0000053d,0x00000007, + 0x0004003b,0x00000040,0x0000053e,0x00000007,0x0004003b,0x00000007,0x00000540,0x00000007, + 0x0004003b,0x00000007,0x00000542,0x00000007,0x0004003b,0x00000007,0x0000054a,0x00000007, + 0x0004003b,0x00000007,0x0000054b,0x00000007,0x0004003b,0x00000040,0x0000054d,0x00000007, + 0x0004003d,0x00000006,0x00000525,0x000000b3,0x0003003e,0x00000524,0x00000525,0x0004003d, + 0x00000006,0x00000527,0x000000b4,0x0003003e,0x00000526,0x00000527,0x00060039,0x0000003a, + 0x00000528,0x0000006f,0x00000524,0x00000526,0x0003003e,0x00000523,0x00000528,0x0004003d, + 0x0000003a,0x0000052a,0x00000523,0x0003003e,0x00000529,0x0000052a,0x00050039,0x0000003a, + 0x0000052b,0x00000088,0x00000529,0x0003003e,0x00000523,0x0000052b,0x0004003d,0x00000006, + 0x0000052c,0x000000b6,0x00050089,0x00000006,0x0000052d,0x0000052c,0x00000190,0x000500aa, + 0x00000047,0x0000052e,0x0000052d,0x00000151,0x000300f7,0x00000530,0x00000000,0x000400fa, + 0x0000052e,0x0000052f,0x00000530,0x000200f8,0x0000052f,0x0004003d,0x00000019,0x00000531, + 0x000000b5,0x00050050,0x00000019,0x00000532,0x000001b8,0x000001b8,0x00050084,0x00000019, + 0x00000533,0x00000531,0x00000532,0x0004007c,0x0000001f,0x00000534,0x00000533,0x0004003d, + 0x00000006,0x00000535,0x000000b3,0x00050086,0x00000006,0x00000536,0x00000535,0x0000010f, + 0x0004007c,0x0000001e,0x00000537,0x00000536,0x0004003d,0x00000006,0x00000538,0x000000b4, + 0x00050086,0x00000006,0x00000539,0x00000538,0x0000010f,0x0004007c,0x0000001e,0x0000053a, + 0x00000539,0x00050050,0x0000001f,0x0000053b,0x00000537,0x0000053a,0x00050080,0x0000001f, + 0x0000053c,0x00000534,0x0000053b,0x0003003e,0x0000053d,0x0000053c,0x0004003d,0x0000003a, + 0x0000053f,0x00000523,0x0003003e,0x0000053e,0x0000053f,0x0004003d,0x00000006,0x00000541, + 0x000000b7,0x0003003e,0x00000540,0x00000541,0x0004003d,0x00000006,0x00000543,0x000000b8, + 0x0003003e,0x00000542,0x00000543,0x00080039,0x00000002,0x00000544,0x00000061,0x0000053d, + 0x0000053e,0x00000540,0x00000542,0x0004003d,0x00000006,0x00000545,0x000000b3,0x0004003d, + 0x00000006,0x00000546,0x000000b4,0x00050086,0x00000006,0x00000547,0x00000546,0x0000010f, + 0x00050089,0x00000006,0x00000548,0x00000547,0x0000010f,0x00050080,0x00000006,0x00000549, + 0x00000545,0x00000548,0x0003003e,0x0000054a,0x00000549,0x0004003d,0x00000006,0x0000054c, + 0x000000b4,0x0003003e,0x0000054b,0x0000054c,0x0004003d,0x0000003a,0x0000054e,0x00000523, + 0x0003003e,0x0000054d,0x0000054e,0x00070039,0x00000002,0x0000054f,0x00000075,0x0000054a, + 0x0000054b,0x0000054d,0x000200f9,0x00000530,0x000200f8,0x00000530,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x000000c1,0x00000000,0x000000a2,0x00030037,0x00000007,0x000000bb, + 0x00030037,0x00000007,0x000000bc,0x00030037,0x0000004c,0x000000bd,0x00030037,0x00000007, + 0x000000be,0x00030037,0x00000007,0x000000bf,0x00030037,0x00000007,0x000000c0,0x000200f8, + 0x000000c2,0x0004003b,0x00000040,0x00000554,0x00000007,0x0004003b,0x00000007,0x0000055c, + 0x00000007,0x0004003b,0x00000007,0x0000055d,0x00000007,0x0004003b,0x00000040,0x0000055f, + 0x00000007,0x0004003b,0x0000002b,0x00000573,0x00000007,0x0004003b,0x00000040,0x00000574, + 0x00000007,0x0004003b,0x00000007,0x00000576,0x00000007,0x0004003b,0x00000007,0x00000578, + 0x00000007,0x0004003b,0x00000007,0x00000582,0x00000007,0x0004003b,0x00000007,0x00000583, + 0x00000007,0x0004003b,0x00000040,0x00000584,0x00000007,0x0004003d,0x00000006,0x00000550, + 0x000000be,0x000500b0,0x00000047,0x00000551,0x00000550,0x000003d3,0x000300f7,0x00000553, + 0x00000000,0x000400fa,0x00000551,0x00000552,0x00000553,0x000200f8,0x00000552,0x0004003d, + 0x00000006,0x00000555,0x000000bb,0x00050084,0x00000006,0x00000556,0x00000555,0x0000010f, + 0x0004003d,0x00000006,0x00000557,0x000000bc,0x00050089,0x00000006,0x00000558,0x00000557, + 0x0000010f,0x00050080,0x00000006,0x00000559,0x00000556,0x00000558,0x0004003d,0x00000006, + 0x0000055a,0x000000bc,0x00050084,0x00000006,0x0000055b,0x0000055a,0x0000010f,0x0003003e, + 0x0000055c,0x00000559,0x0003003e,0x0000055d,0x0000055b,0x00060039,0x0000003a,0x0000055e, + 0x0000006f,0x0000055c,0x0000055d,0x0003003e,0x00000554,0x0000055e,0x0004003d,0x0000003a, + 0x00000560,0x00000554,0x0003003e,0x0000055f,0x00000560,0x00050039,0x0000003a,0x00000561, + 0x00000088,0x0000055f,0x0003003e,0x00000554,0x00000561,0x0004003d,0x00000006,0x00000562, + 0x000000be,0x00050089,0x00000006,0x00000563,0x00000562,0x00000190,0x000500aa,0x00000047, + 0x00000564,0x00000563,0x00000151,0x000300f7,0x00000566,0x00000000,0x000400fa,0x00000564, + 0x00000565,0x00000566,0x000200f8,0x00000565,0x0004003d,0x00000019,0x00000567,0x000000bd, + 0x00050050,0x00000019,0x00000568,0x00000190,0x00000190,0x00050084,0x00000019,0x00000569, + 0x00000567,0x00000568,0x0004007c,0x0000001f,0x0000056a,0x00000569,0x0004003d,0x00000006, + 0x0000056b,0x000000bb,0x00050086,0x00000006,0x0000056c,0x0000056b,0x0000010f,0x0004007c, + 0x0000001e,0x0000056d,0x0000056c,0x0004003d,0x00000006,0x0000056e,0x000000bc,0x00050086, + 0x00000006,0x0000056f,0x0000056e,0x0000010f,0x0004007c,0x0000001e,0x00000570,0x0000056f, + 0x00050050,0x0000001f,0x00000571,0x0000056d,0x00000570,0x00050080,0x0000001f,0x00000572, + 0x0000056a,0x00000571,0x0003003e,0x00000573,0x00000572,0x0004003d,0x0000003a,0x00000575, + 0x00000554,0x0003003e,0x00000574,0x00000575,0x0004003d,0x00000006,0x00000577,0x000000bf, + 0x0003003e,0x00000576,0x00000577,0x0004003d,0x00000006,0x00000579,0x000000c0,0x0003003e, + 0x00000578,0x00000579,0x00080039,0x00000002,0x0000057a,0x00000061,0x00000573,0x00000574, + 0x00000576,0x00000578,0x0004003d,0x00000006,0x0000057b,0x000000bb,0x00050084,0x00000006, + 0x0000057c,0x0000057b,0x0000010f,0x0004003d,0x00000006,0x0000057d,0x000000bc,0x00050086, + 0x00000006,0x0000057e,0x0000057d,0x0000010f,0x00050080,0x00000006,0x0000057f,0x0000057c, + 0x0000057e,0x0004003d,0x00000006,0x00000580,0x000000bc,0x00050084,0x00000006,0x00000581, + 0x00000580,0x0000010f,0x0003003e,0x00000582,0x0000057f,0x0003003e,0x00000583,0x00000581, + 0x0004003d,0x0000003a,0x00000585,0x00000554,0x0003003e,0x00000584,0x00000585,0x00070039, + 0x00000002,0x00000586,0x00000075,0x00000582,0x00000583,0x00000584,0x000200f9,0x00000566, + 0x000200f8,0x00000566,0x000200f9,0x00000553,0x000200f8,0x00000553,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x000000c9,0x00000000,0x000000a2,0x00030037,0x00000007,0x000000c3, + 0x00030037,0x00000007,0x000000c4,0x00030037,0x0000004c,0x000000c5,0x00030037,0x00000007, + 0x000000c6,0x00030037,0x00000007,0x000000c7,0x00030037,0x00000007,0x000000c8,0x000200f8, + 0x000000ca,0x0004003b,0x00000040,0x0000058b,0x00000007,0x0004003b,0x00000007,0x00000592, + 0x00000007,0x0004003b,0x00000007,0x00000593,0x00000007,0x0004003b,0x00000040,0x00000595, + 0x00000007,0x0004003b,0x0000002b,0x000005a9,0x00000007,0x0004003b,0x00000040,0x000005aa, + 0x00000007,0x0004003b,0x00000007,0x000005ac,0x00000007,0x0004003b,0x00000007,0x000005ae, + 0x00000007,0x0004003b,0x00000007,0x000005b5,0x00000007,0x0004003b,0x00000007,0x000005b6, + 0x00000007,0x0004003b,0x00000040,0x000005b7,0x00000007,0x0004003d,0x00000006,0x00000587, + 0x000000c6,0x000500b0,0x00000047,0x00000588,0x00000587,0x0000025b,0x000300f7,0x0000058a, + 0x00000000,0x000400fa,0x00000588,0x00000589,0x0000058a,0x000200f8,0x00000589,0x0004003d, + 0x00000006,0x0000058c,0x000000c3,0x00050084,0x00000006,0x0000058d,0x0000058c,0x00000190, + 0x0004003d,0x00000006,0x0000058e,0x000000c4,0x00050080,0x00000006,0x0000058f,0x0000058d, + 0x0000058e,0x0004003d,0x00000006,0x00000590,0x000000c4,0x00050084,0x00000006,0x00000591, + 0x00000590,0x00000190,0x0003003e,0x00000592,0x0000058f,0x0003003e,0x00000593,0x00000591, + 0x00060039,0x0000003a,0x00000594,0x0000006f,0x00000592,0x00000593,0x0003003e,0x0000058b, + 0x00000594,0x0004003d,0x0000003a,0x00000596,0x0000058b,0x0003003e,0x00000595,0x00000596, + 0x00050039,0x0000003a,0x00000597,0x00000088,0x00000595,0x0003003e,0x0000058b,0x00000597, + 0x0004003d,0x00000006,0x00000598,0x000000c6,0x00050089,0x00000006,0x00000599,0x00000598, + 0x00000190,0x000500aa,0x00000047,0x0000059a,0x00000599,0x00000151,0x000300f7,0x0000059c, + 0x00000000,0x000400fa,0x0000059a,0x0000059b,0x0000059c,0x000200f8,0x0000059b,0x0004003d, + 0x00000019,0x0000059d,0x000000c5,0x00050050,0x00000019,0x0000059e,0x0000010f,0x0000010f, + 0x00050084,0x00000019,0x0000059f,0x0000059d,0x0000059e,0x0004007c,0x0000001f,0x000005a0, + 0x0000059f,0x0004003d,0x00000006,0x000005a1,0x000000c3,0x00050086,0x00000006,0x000005a2, + 0x000005a1,0x0000010f,0x0004007c,0x0000001e,0x000005a3,0x000005a2,0x0004003d,0x00000006, + 0x000005a4,0x000000c4,0x00050086,0x00000006,0x000005a5,0x000005a4,0x0000010f,0x0004007c, + 0x0000001e,0x000005a6,0x000005a5,0x00050050,0x0000001f,0x000005a7,0x000005a3,0x000005a6, + 0x00050080,0x0000001f,0x000005a8,0x000005a0,0x000005a7,0x0003003e,0x000005a9,0x000005a8, + 0x0004003d,0x0000003a,0x000005ab,0x0000058b,0x0003003e,0x000005aa,0x000005ab,0x0004003d, + 0x00000006,0x000005ad,0x000000c7,0x0003003e,0x000005ac,0x000005ad,0x0004003d,0x00000006, + 0x000005af,0x000000c8,0x0003003e,0x000005ae,0x000005af,0x00080039,0x00000002,0x000005b0, + 0x00000061,0x000005a9,0x000005aa,0x000005ac,0x000005ae,0x0004003d,0x00000006,0x000005b1, + 0x000000c3,0x00050086,0x00000006,0x000005b2,0x000005b1,0x0000010f,0x0004003d,0x00000006, + 0x000005b3,0x000000c4,0x00050080,0x00000006,0x000005b4,0x000005b2,0x000005b3,0x0003003e, + 0x000005b5,0x000005b4,0x0003003e,0x000005b6,0x00000151,0x0004003d,0x0000003a,0x000005b8, + 0x0000058b,0x0003003e,0x000005b7,0x000005b8,0x00070039,0x00000002,0x000005b9,0x00000075, + 0x000005b5,0x000005b6,0x000005b7,0x000200f9,0x0000059c,0x000200f8,0x0000059c,0x000200f9, + 0x0000058a,0x000200f8,0x0000058a,0x000100fd,0x00010038,0x00050036,0x00000002,0x000000d0, + 0x00000000,0x000000cb,0x00030037,0x0000004c,0x000000cc,0x00030037,0x00000007,0x000000cd, + 0x00030037,0x00000007,0x000000ce,0x00030037,0x00000007,0x000000cf,0x000200f8,0x000000d1, + 0x0004003b,0x00000040,0x000005be,0x00000007,0x0004003b,0x00000007,0x000005bf,0x00000007, + 0x0004003b,0x00000007,0x000005c1,0x00000007,0x0004003b,0x00000040,0x000005c3,0x00000007, + 0x0004003b,0x0000002b,0x000005cd,0x00000007,0x0004003b,0x00000040,0x000005ce,0x00000007, + 0x0004003b,0x00000007,0x000005d0,0x00000007,0x0004003b,0x00000007,0x000005d2,0x00000007, + 0x0004003d,0x00000006,0x000005ba,0x000000cd,0x000500b0,0x00000047,0x000005bb,0x000005ba, + 0x00000190,0x000300f7,0x000005bd,0x00000000,0x000400fa,0x000005bb,0x000005bc,0x000005bd, + 0x000200f8,0x000005bc,0x0004003d,0x00000006,0x000005c0,0x000000cd,0x0003003e,0x000005bf, + 0x000005c0,0x0003003e,0x000005c1,0x00000151,0x00060039,0x0000003a,0x000005c2,0x0000006f, + 0x000005bf,0x000005c1,0x0003003e,0x000005be,0x000005c2,0x0004003d,0x0000003a,0x000005c4, + 0x000005be,0x0003003e,0x000005c3,0x000005c4,0x00050039,0x0000003a,0x000005c5,0x00000088, + 0x000005c3,0x0003003e,0x000005be,0x000005c5,0x0004003d,0x00000006,0x000005c6,0x000000cd, + 0x00050089,0x00000006,0x000005c7,0x000005c6,0x00000190,0x000500aa,0x00000047,0x000005c8, + 0x000005c7,0x00000151,0x000300f7,0x000005ca,0x00000000,0x000400fa,0x000005c8,0x000005c9, + 0x000005ca,0x000200f8,0x000005c9,0x0004003d,0x00000019,0x000005cb,0x000000cc,0x0004007c, + 0x0000001f,0x000005cc,0x000005cb,0x0003003e,0x000005cd,0x000005cc,0x0004003d,0x0000003a, + 0x000005cf,0x000005be,0x0003003e,0x000005ce,0x000005cf,0x0004003d,0x00000006,0x000005d1, + 0x000000ce,0x0003003e,0x000005d0,0x000005d1,0x0004003d,0x00000006,0x000005d3,0x000000cf, + 0x0003003e,0x000005d2,0x000005d3,0x00080039,0x00000002,0x000005d4,0x00000061,0x000005cd, + 0x000005ce,0x000005d0,0x000005d2,0x000200f9,0x000005ca,0x000200f8,0x000005ca,0x000200f9, + 0x000005bd,0x000200f8,0x000005bd,0x000100fd,0x00010038,0x00050036,0x00000002,0x000000d7, + 0x00000000,0x000000d2,0x00030037,0x00000007,0x000000d3,0x00030037,0x00000007,0x000000d4, + 0x00030037,0x00000007,0x000000d5,0x00030037,0x00000007,0x000000d6,0x000200f8,0x000000d8, + 0x0004003b,0x0000002b,0x000005d5,0x00000007,0x0004003b,0x0000002b,0x000005df,0x00000007, + 0x0004003b,0x00000040,0x000005e9,0x00000007,0x0004003b,0x0000004c,0x000005ec,0x00000007, + 0x0004003b,0x00000007,0x000005ed,0x00000007,0x0004003b,0x0000002b,0x000005f0,0x00000007, + 0x0004003b,0x00000040,0x000005f2,0x00000007,0x0004003b,0x00000007,0x000005f4,0x00000007, + 0x0004003b,0x00000007,0x000005f5,0x00000007,0x0004003b,0x00000040,0x0000060a,0x00000007, + 0x0004003b,0x0000004c,0x0000060d,0x00000007,0x0004003b,0x00000007,0x0000060e,0x00000007, + 0x0004003b,0x0000002b,0x00000611,0x00000007,0x0004003b,0x00000040,0x00000613,0x00000007, + 0x0004003b,0x00000007,0x00000615,0x00000007,0x0004003b,0x00000007,0x00000616,0x00000007, + 0x0004003b,0x00000040,0x0000062b,0x00000007,0x0004003b,0x0000004c,0x0000062e,0x00000007, + 0x0004003b,0x00000007,0x0000062f,0x00000007,0x0004003b,0x0000002b,0x00000632,0x00000007, + 0x0004003b,0x00000040,0x00000634,0x00000007,0x0004003b,0x00000007,0x00000636,0x00000007, + 0x0004003b,0x00000007,0x00000637,0x00000007,0x0004003b,0x00000040,0x0000064c,0x00000007, + 0x0004003b,0x0000004c,0x0000064f,0x00000007,0x0004003b,0x00000007,0x00000650,0x00000007, + 0x0004003b,0x0000002b,0x00000653,0x00000007,0x0004003b,0x00000040,0x00000655,0x00000007, + 0x0004003b,0x00000007,0x00000657,0x00000007,0x0004003b,0x00000007,0x00000658,0x00000007, + 0x0004003b,0x00000040,0x00000660,0x00000007,0x0004003b,0x00000040,0x00000661,0x00000007, + 0x0004003b,0x00000040,0x00000663,0x00000007,0x0004003b,0x00000040,0x00000665,0x00000007, + 0x0004003b,0x00000040,0x00000667,0x00000007,0x0004003b,0x0000002b,0x0000066f,0x00000007, + 0x0004003b,0x00000040,0x00000670,0x00000007,0x0004003b,0x00000007,0x00000672,0x00000007, + 0x0004003b,0x00000007,0x00000673,0x00000007,0x0004003b,0x00000007,0x00000676,0x00000007, + 0x0004003b,0x00000007,0x00000678,0x00000007,0x0004003b,0x00000040,0x0000067a,0x00000007, + 0x0004003d,0x00000006,0x000005d6,0x000000d3,0x00050084,0x00000006,0x000005d7,0x000005d6, + 0x00000190,0x00050080,0x00000006,0x000005d8,0x000005d7,0x00000151,0x0004007c,0x0000001e, + 0x000005d9,0x000005d8,0x0004003d,0x00000006,0x000005da,0x000000d4,0x00050084,0x00000006, + 0x000005db,0x000005da,0x00000190,0x00050080,0x00000006,0x000005dc,0x000005db,0x00000151, + 0x0004007c,0x0000001e,0x000005dd,0x000005dc,0x00050050,0x0000001f,0x000005de,0x000005d9, + 0x000005dd,0x0003003e,0x000005d5,0x000005de,0x0004003d,0x00000006,0x000005e0,0x000000d3, + 0x00050084,0x00000006,0x000005e1,0x000005e0,0x0000010f,0x00050080,0x00000006,0x000005e2, + 0x000005e1,0x00000151,0x0004007c,0x0000001e,0x000005e3,0x000005e2,0x0004003d,0x00000006, + 0x000005e4,0x000000d4,0x00050084,0x00000006,0x000005e5,0x000005e4,0x0000010f,0x00050080, + 0x00000006,0x000005e6,0x000005e5,0x00000151,0x0004007c,0x0000001e,0x000005e7,0x000005e6, + 0x00050050,0x0000001f,0x000005e8,0x000005e3,0x000005e7,0x0003003e,0x000005df,0x000005e8, + 0x0004003d,0x0000001f,0x000005ea,0x000005d5,0x0004007c,0x00000019,0x000005eb,0x000005ea, + 0x0003003e,0x000005ec,0x000005eb,0x0004003d,0x00000006,0x000005ee,0x000000d6,0x0003003e, + 0x000005ed,0x000005ee,0x00060039,0x0000003a,0x000005ef,0x00000095,0x000005ec,0x000005ed, + 0x0003003e,0x000005e9,0x000005ef,0x0004003d,0x0000001f,0x000005f1,0x000005df,0x0003003e, + 0x000005f0,0x000005f1,0x0004003d,0x0000003a,0x000005f3,0x000005e9,0x0003003e,0x000005f2, + 0x000005f3,0x0003003e,0x000005f4,0x000001a4,0x0004003d,0x00000006,0x000005f6,0x000000d6, + 0x0003003e,0x000005f5,0x000005f6,0x00080039,0x00000002,0x000005f7,0x00000061,0x000005f0, + 0x000005f2,0x000005f4,0x000005f5,0x0004003d,0x00000006,0x000005f8,0x000000d3,0x00050084, + 0x00000006,0x000005f9,0x000005f8,0x00000190,0x00050080,0x00000006,0x000005fa,0x000005f9, + 0x0000010f,0x0004007c,0x0000001e,0x000005fb,0x000005fa,0x0004003d,0x00000006,0x000005fc, + 0x000000d4,0x00050084,0x00000006,0x000005fd,0x000005fc,0x00000190,0x00050080,0x00000006, + 0x000005fe,0x000005fd,0x00000151,0x0004007c,0x0000001e,0x000005ff,0x000005fe,0x00050050, + 0x0000001f,0x00000600,0x000005fb,0x000005ff,0x0003003e,0x000005d5,0x00000600,0x0004003d, + 0x00000006,0x00000601,0x000000d3,0x00050084,0x00000006,0x00000602,0x00000601,0x0000010f, + 0x00050080,0x00000006,0x00000603,0x00000602,0x00000116,0x0004007c,0x0000001e,0x00000604, + 0x00000603,0x0004003d,0x00000006,0x00000605,0x000000d4,0x00050084,0x00000006,0x00000606, + 0x00000605,0x0000010f,0x00050080,0x00000006,0x00000607,0x00000606,0x00000151,0x0004007c, + 0x0000001e,0x00000608,0x00000607,0x00050050,0x0000001f,0x00000609,0x00000604,0x00000608, + 0x0003003e,0x000005df,0x00000609,0x0004003d,0x0000001f,0x0000060b,0x000005d5,0x0004007c, + 0x00000019,0x0000060c,0x0000060b,0x0003003e,0x0000060d,0x0000060c,0x0004003d,0x00000006, + 0x0000060f,0x000000d6,0x0003003e,0x0000060e,0x0000060f,0x00060039,0x0000003a,0x00000610, + 0x00000095,0x0000060d,0x0000060e,0x0003003e,0x0000060a,0x00000610,0x0004003d,0x0000001f, + 0x00000612,0x000005df,0x0003003e,0x00000611,0x00000612,0x0004003d,0x0000003a,0x00000614, + 0x0000060a,0x0003003e,0x00000613,0x00000614,0x0003003e,0x00000615,0x000001a4,0x0004003d, + 0x00000006,0x00000617,0x000000d6,0x0003003e,0x00000616,0x00000617,0x00080039,0x00000002, + 0x00000618,0x00000061,0x00000611,0x00000613,0x00000615,0x00000616,0x0004003d,0x00000006, + 0x00000619,0x000000d3,0x00050084,0x00000006,0x0000061a,0x00000619,0x00000190,0x00050080, + 0x00000006,0x0000061b,0x0000061a,0x00000151,0x0004007c,0x0000001e,0x0000061c,0x0000061b, + 0x0004003d,0x00000006,0x0000061d,0x000000d4,0x00050084,0x00000006,0x0000061e,0x0000061d, + 0x00000190,0x00050080,0x00000006,0x0000061f,0x0000061e,0x0000010f,0x0004007c,0x0000001e, + 0x00000620,0x0000061f,0x00050050,0x0000001f,0x00000621,0x0000061c,0x00000620,0x0003003e, + 0x000005d5,0x00000621,0x0004003d,0x00000006,0x00000622,0x000000d3,0x00050084,0x00000006, + 0x00000623,0x00000622,0x0000010f,0x00050080,0x00000006,0x00000624,0x00000623,0x00000151, + 0x0004007c,0x0000001e,0x00000625,0x00000624,0x0004003d,0x00000006,0x00000626,0x000000d4, + 0x00050084,0x00000006,0x00000627,0x00000626,0x0000010f,0x00050080,0x00000006,0x00000628, + 0x00000627,0x00000116,0x0004007c,0x0000001e,0x00000629,0x00000628,0x00050050,0x0000001f, + 0x0000062a,0x00000625,0x00000629,0x0003003e,0x000005df,0x0000062a,0x0004003d,0x0000001f, + 0x0000062c,0x000005d5,0x0004007c,0x00000019,0x0000062d,0x0000062c,0x0003003e,0x0000062e, + 0x0000062d,0x0004003d,0x00000006,0x00000630,0x000000d6,0x0003003e,0x0000062f,0x00000630, + 0x00060039,0x0000003a,0x00000631,0x00000095,0x0000062e,0x0000062f,0x0003003e,0x0000062b, + 0x00000631,0x0004003d,0x0000001f,0x00000633,0x000005df,0x0003003e,0x00000632,0x00000633, + 0x0004003d,0x0000003a,0x00000635,0x0000062b,0x0003003e,0x00000634,0x00000635,0x0003003e, + 0x00000636,0x000001a4,0x0004003d,0x00000006,0x00000638,0x000000d6,0x0003003e,0x00000637, + 0x00000638,0x00080039,0x00000002,0x00000639,0x00000061,0x00000632,0x00000634,0x00000636, + 0x00000637,0x0004003d,0x00000006,0x0000063a,0x000000d3,0x00050084,0x00000006,0x0000063b, + 0x0000063a,0x00000190,0x00050080,0x00000006,0x0000063c,0x0000063b,0x0000010f,0x0004007c, + 0x0000001e,0x0000063d,0x0000063c,0x0004003d,0x00000006,0x0000063e,0x000000d4,0x00050084, + 0x00000006,0x0000063f,0x0000063e,0x00000190,0x00050080,0x00000006,0x00000640,0x0000063f, + 0x0000010f,0x0004007c,0x0000001e,0x00000641,0x00000640,0x00050050,0x0000001f,0x00000642, + 0x0000063d,0x00000641,0x0003003e,0x000005d5,0x00000642,0x0004003d,0x00000006,0x00000643, + 0x000000d3,0x00050084,0x00000006,0x00000644,0x00000643,0x0000010f,0x00050080,0x00000006, + 0x00000645,0x00000644,0x00000116,0x0004007c,0x0000001e,0x00000646,0x00000645,0x0004003d, + 0x00000006,0x00000647,0x000000d4,0x00050084,0x00000006,0x00000648,0x00000647,0x0000010f, + 0x00050080,0x00000006,0x00000649,0x00000648,0x00000116,0x0004007c,0x0000001e,0x0000064a, + 0x00000649,0x00050050,0x0000001f,0x0000064b,0x00000646,0x0000064a,0x0003003e,0x000005df, + 0x0000064b,0x0004003d,0x0000001f,0x0000064d,0x000005d5,0x0004007c,0x00000019,0x0000064e, + 0x0000064d,0x0003003e,0x0000064f,0x0000064e,0x0004003d,0x00000006,0x00000651,0x000000d6, + 0x0003003e,0x00000650,0x00000651,0x00060039,0x0000003a,0x00000652,0x00000095,0x0000064f, + 0x00000650,0x0003003e,0x0000064c,0x00000652,0x0004003d,0x0000001f,0x00000654,0x000005df, + 0x0003003e,0x00000653,0x00000654,0x0004003d,0x0000003a,0x00000656,0x0000064c,0x0003003e, + 0x00000655,0x00000656,0x0003003e,0x00000657,0x000001a4,0x0004003d,0x00000006,0x00000659, + 0x000000d6,0x0003003e,0x00000658,0x00000659,0x00080039,0x00000002,0x0000065a,0x00000061, + 0x00000653,0x00000655,0x00000657,0x00000658,0x0004003d,0x00000006,0x0000065b,0x000000d5, + 0x000500b2,0x00000047,0x0000065c,0x0000065b,0x000001ae,0x000300f7,0x0000065e,0x00000000, + 0x000400fa,0x0000065c,0x0000065d,0x0000065e,0x000200f8,0x0000065d,0x000100fd,0x000200f8, + 0x0000065e,0x0004003d,0x0000003a,0x00000662,0x000005e9,0x0003003e,0x00000661,0x00000662, + 0x0004003d,0x0000003a,0x00000664,0x0000060a,0x0003003e,0x00000663,0x00000664,0x0004003d, + 0x0000003a,0x00000666,0x0000062b,0x0003003e,0x00000665,0x00000666,0x0004003d,0x0000003a, + 0x00000668,0x0000064c,0x0003003e,0x00000667,0x00000668,0x00080039,0x0000003a,0x00000669, + 0x0000007c,0x00000661,0x00000663,0x00000665,0x00000667,0x0003003e,0x00000660,0x00000669, + 0x0004003d,0x00000006,0x0000066a,0x000000d3,0x0004007c,0x0000001e,0x0000066b,0x0000066a, + 0x0004003d,0x00000006,0x0000066c,0x000000d4,0x0004007c,0x0000001e,0x0000066d,0x0000066c, + 0x00050050,0x0000001f,0x0000066e,0x0000066b,0x0000066d,0x0003003e,0x0000066f,0x0000066e, + 0x0004003d,0x0000003a,0x00000671,0x00000660,0x0003003e,0x00000670,0x00000671,0x0003003e, + 0x00000672,0x000001ae,0x0004003d,0x00000006,0x00000674,0x000000d6,0x0003003e,0x00000673, + 0x00000674,0x00080039,0x00000002,0x00000675,0x00000061,0x0000066f,0x00000670,0x00000672, + 0x00000673,0x0004003d,0x00000006,0x00000677,0x000000d3,0x0003003e,0x00000676,0x00000677, + 0x0004003d,0x00000006,0x00000679,0x000000d4,0x0003003e,0x00000678,0x00000679,0x0004003d, + 0x0000003a,0x0000067b,0x00000660,0x0003003e,0x0000067a,0x0000067b,0x00070039,0x00000002, + 0x0000067c,0x00000075,0x00000676,0x00000678,0x0000067a,0x000100fd,0x00010038,0x00050036, + 0x00000002,0x000000e1,0x00000000,0x000000d9,0x00030037,0x00000007,0x000000da,0x00030037, + 0x00000007,0x000000db,0x00030037,0x0000004c,0x000000dc,0x00030037,0x00000007,0x000000dd, + 0x00030037,0x00000007,0x000000de,0x00030037,0x00000007,0x000000df,0x00030037,0x00000007, + 0x000000e0,0x000200f8,0x000000e2,0x0004003b,0x00000007,0x00000684,0x00000007,0x0004003b, + 0x00000007,0x00000686,0x00000007,0x0004003b,0x0000004c,0x00000688,0x00000007,0x0004003b, + 0x00000007,0x0000068a,0x00000007,0x0004003b,0x00000007,0x0000068c,0x00000007,0x0004003b, + 0x00000007,0x0000068e,0x00000007,0x0004003b,0x00000007,0x0000069b,0x00000007,0x0004003b, + 0x00000007,0x0000069d,0x00000007,0x0004003b,0x0000004c,0x0000069f,0x00000007,0x0004003b, + 0x00000007,0x000006a1,0x00000007,0x0004003b,0x00000007,0x000006a3,0x00000007,0x0004003b, + 0x00000007,0x000006a4,0x00000007,0x0004003b,0x00000007,0x000006b1,0x00000007,0x0004003b, + 0x00000007,0x000006b3,0x00000007,0x0004003b,0x0000004c,0x000006b5,0x00000007,0x0004003b, + 0x00000007,0x000006b7,0x00000007,0x0004003b,0x00000007,0x000006b9,0x00000007,0x0004003b, + 0x00000007,0x000006ba,0x00000007,0x0004003b,0x0000004c,0x000006c7,0x00000007,0x0004003b, + 0x00000007,0x000006c9,0x00000007,0x0004003b,0x00000007,0x000006cb,0x00000007,0x0004003b, + 0x00000007,0x000006cc,0x00000007,0x0004003d,0x00000006,0x0000067d,0x000000df,0x0004003d, + 0x00000006,0x0000067e,0x000000de,0x000500b2,0x00000047,0x0000067f,0x0000067d,0x0000067e, + 0x000300f7,0x00000681,0x00000000,0x000400fa,0x0000067f,0x00000680,0x00000681,0x000200f8, + 0x00000680,0x000100fd,0x000200f8,0x00000681,0x00040039,0x00000002,0x00000683,0x0000007e, + 0x0004003d,0x00000006,0x00000685,0x000000da,0x0003003e,0x00000684,0x00000685,0x0004003d, + 0x00000006,0x00000687,0x000000db,0x0003003e,0x00000686,0x00000687,0x0004003d,0x00000019, + 0x00000689,0x000000dc,0x0003003e,0x00000688,0x00000689,0x0004003d,0x00000006,0x0000068b, + 0x000000dd,0x0003003e,0x0000068a,0x0000068b,0x0004003d,0x00000006,0x0000068d,0x000000de, + 0x0003003e,0x0000068c,0x0000068d,0x0004003d,0x00000006,0x0000068f,0x000000e0,0x0003003e, + 0x0000068e,0x0000068f,0x000a0039,0x00000002,0x00000690,0x000000b9,0x00000684,0x00000686, + 0x00000688,0x0000068a,0x0000068c,0x0000068e,0x0004003d,0x00000006,0x00000691,0x000000df, + 0x0004003d,0x00000006,0x00000692,0x000000de,0x00050080,0x00000006,0x00000693,0x00000692, + 0x00000116,0x000500b2,0x00000047,0x00000694,0x00000691,0x00000693,0x000300f7,0x00000696, + 0x00000000,0x000400fa,0x00000694,0x00000695,0x00000696,0x000200f8,0x00000695,0x000100fd, + 0x000200f8,0x00000696,0x00040039,0x00000002,0x00000698,0x0000007e,0x0004003d,0x00000006, + 0x00000699,0x000000de,0x00050080,0x00000006,0x0000069a,0x00000699,0x00000116,0x0004003d, + 0x00000006,0x0000069c,0x000000da,0x0003003e,0x0000069b,0x0000069c,0x0004003d,0x00000006, + 0x0000069e,0x000000db,0x0003003e,0x0000069d,0x0000069e,0x0004003d,0x00000019,0x000006a0, + 0x000000dc,0x0003003e,0x0000069f,0x000006a0,0x0004003d,0x00000006,0x000006a2,0x000000dd, + 0x0003003e,0x000006a1,0x000006a2,0x0003003e,0x000006a3,0x0000069a,0x0004003d,0x00000006, + 0x000006a5,0x000000e0,0x0003003e,0x000006a4,0x000006a5,0x000a0039,0x00000002,0x000006a6, + 0x000000c1,0x0000069b,0x0000069d,0x0000069f,0x000006a1,0x000006a3,0x000006a4,0x0004003d, + 0x00000006,0x000006a7,0x000000df,0x0004003d,0x00000006,0x000006a8,0x000000de,0x00050080, + 0x00000006,0x000006a9,0x000006a8,0x0000010f,0x000500b2,0x00000047,0x000006aa,0x000006a7, + 0x000006a9,0x000300f7,0x000006ac,0x00000000,0x000400fa,0x000006aa,0x000006ab,0x000006ac, + 0x000200f8,0x000006ab,0x000100fd,0x000200f8,0x000006ac,0x00040039,0x00000002,0x000006ae, + 0x0000007e,0x0004003d,0x00000006,0x000006af,0x000000de,0x00050080,0x00000006,0x000006b0, + 0x000006af,0x0000010f,0x0004003d,0x00000006,0x000006b2,0x000000da,0x0003003e,0x000006b1, + 0x000006b2,0x0004003d,0x00000006,0x000006b4,0x000000db,0x0003003e,0x000006b3,0x000006b4, + 0x0004003d,0x00000019,0x000006b6,0x000000dc,0x0003003e,0x000006b5,0x000006b6,0x0004003d, + 0x00000006,0x000006b8,0x000000dd,0x0003003e,0x000006b7,0x000006b8,0x0003003e,0x000006b9, + 0x000006b0,0x0004003d,0x00000006,0x000006bb,0x000000e0,0x0003003e,0x000006ba,0x000006bb, + 0x000a0039,0x00000002,0x000006bc,0x000000c9,0x000006b1,0x000006b3,0x000006b5,0x000006b7, + 0x000006b9,0x000006ba,0x0004003d,0x00000006,0x000006bd,0x000000df,0x0004003d,0x00000006, + 0x000006be,0x000000de,0x00050080,0x00000006,0x000006bf,0x000006be,0x00000110,0x000500b2, + 0x00000047,0x000006c0,0x000006bd,0x000006bf,0x000300f7,0x000006c2,0x00000000,0x000400fa, + 0x000006c0,0x000006c1,0x000006c2,0x000200f8,0x000006c1,0x000100fd,0x000200f8,0x000006c2, + 0x00040039,0x00000002,0x000006c4,0x0000007e,0x0004003d,0x00000006,0x000006c5,0x000000de, + 0x00050080,0x00000006,0x000006c6,0x000006c5,0x00000110,0x0004003d,0x00000019,0x000006c8, + 0x000000dc,0x0003003e,0x000006c7,0x000006c8,0x0004003d,0x00000006,0x000006ca,0x000000dd, + 0x0003003e,0x000006c9,0x000006ca,0x0003003e,0x000006cb,0x000006c6,0x0004003d,0x00000006, + 0x000006cd,0x000000e0,0x0003003e,0x000006cc,0x000006cd,0x00080039,0x00000002,0x000006ce, + 0x000000d0,0x000006c7,0x000006c9,0x000006cb,0x000006cc,0x000100fd,0x00010038,0x00050036, + 0x00000002,0x000000e9,0x00000000,0x000000e3,0x00030037,0x0000004c,0x000000e4,0x00030037, + 0x00000007,0x000000e5,0x00030037,0x00000007,0x000000e6,0x00030037,0x00000007,0x000000e7, + 0x00030037,0x00000007,0x000000e8,0x000200f8,0x000000ea,0x0004003b,0x0000004c,0x000006cf, + 0x00000007,0x0004003b,0x00000007,0x000006d2,0x00000007,0x0004003b,0x00000007,0x000006d4, + 0x00000007,0x0004003b,0x00000007,0x000006dc,0x00000007,0x0004003b,0x00000007,0x000006e4, + 0x00000007,0x0004003b,0x00000007,0x000006e6,0x00000007,0x0004003b,0x0000004c,0x000006e8, + 0x00000007,0x0004003b,0x00000007,0x000006ea,0x00000007,0x0004003b,0x00000007,0x000006ec, + 0x00000007,0x0004003b,0x00000007,0x000006ee,0x00000007,0x0004003b,0x00000007,0x000006f1, + 0x00000007,0x0004003b,0x00000007,0x000006f3,0x00000007,0x0004003b,0x0000004c,0x000006f5, + 0x00000007,0x0004003b,0x00000007,0x000006f7,0x00000007,0x0004003b,0x00000007,0x000006f9, + 0x00000007,0x0004003b,0x00000007,0x000006fa,0x00000007,0x0004003b,0x00000007,0x000006fc, + 0x00000007,0x0004003b,0x00000007,0x00000704,0x00000007,0x0004003b,0x00000007,0x00000706, + 0x00000007,0x0004003b,0x00000007,0x00000708,0x00000007,0x0004003b,0x00000007,0x0000070e, + 0x00000007,0x0004003b,0x00000007,0x00000711,0x00000007,0x0004003b,0x00000007,0x00000713, + 0x00000007,0x0004003b,0x00000007,0x00000715,0x00000007,0x0004003b,0x00000007,0x00000717, + 0x00000007,0x0004003b,0x00000007,0x0000071a,0x00000007,0x0004003b,0x00000007,0x0000071c, + 0x00000007,0x0004003b,0x0000004c,0x0000071e,0x00000007,0x0004003b,0x00000007,0x0000071f, + 0x00000007,0x0004003b,0x00000007,0x00000721,0x00000007,0x0004003b,0x00000007,0x00000722, + 0x00000007,0x0004003b,0x00000007,0x00000724,0x00000007,0x0004003d,0x00000006,0x000006d0, + 0x000000e5,0x00050089,0x00000006,0x000006d1,0x000006d0,0x000003d3,0x0003003e,0x000006d2, + 0x000006d1,0x00050039,0x00000019,0x000006d3,0x0000001c,0x000006d2,0x0003003e,0x000006cf, + 0x000006d3,0x00050041,0x00000007,0x000006d5,0x000006cf,0x00000151,0x0004003d,0x00000006, + 0x000006d6,0x000006d5,0x0004003d,0x00000006,0x000006d7,0x000000e5,0x000500c2,0x00000006, + 0x000006d8,0x000006d7,0x0000028e,0x00050089,0x00000006,0x000006d9,0x000006d8,0x0000010f, + 0x00050084,0x00000006,0x000006da,0x000001b8,0x000006d9,0x00050080,0x00000006,0x000006db, + 0x000006d6,0x000006da,0x0003003e,0x000006d4,0x000006db,0x00050041,0x00000007,0x000006dd, + 0x000006cf,0x00000116,0x0004003d,0x00000006,0x000006de,0x000006dd,0x0004003d,0x00000006, + 0x000006df,0x000000e5,0x000500c2,0x00000006,0x000006e1,0x000006df,0x000006e0,0x00050084, + 0x00000006,0x000006e2,0x000001b8,0x000006e1,0x00050080,0x00000006,0x000006e3,0x000006de, + 0x000006e2,0x0003003e,0x000006dc,0x000006e3,0x0004003d,0x00000006,0x000006e5,0x000006d4, + 0x0003003e,0x000006e4,0x000006e5,0x0004003d,0x00000006,0x000006e7,0x000006dc,0x0003003e, + 0x000006e6,0x000006e7,0x0004003d,0x00000019,0x000006e9,0x000000e4,0x0003003e,0x000006e8, + 0x000006e9,0x0004003d,0x00000006,0x000006eb,0x000000e5,0x0003003e,0x000006ea,0x000006eb, + 0x0004003d,0x00000006,0x000006ed,0x000000e6,0x0003003e,0x000006ec,0x000006ed,0x0004003d, + 0x00000006,0x000006ef,0x000000e8,0x0003003e,0x000006ee,0x000006ef,0x000a0039,0x00000002, + 0x000006f0,0x000000b1,0x000006e4,0x000006e6,0x000006e8,0x000006ea,0x000006ec,0x000006ee, + 0x0004003d,0x00000006,0x000006f2,0x000006d4,0x0003003e,0x000006f1,0x000006f2,0x0004003d, + 0x00000006,0x000006f4,0x000006dc,0x0003003e,0x000006f3,0x000006f4,0x0004003d,0x00000019, + 0x000006f6,0x000000e4,0x0003003e,0x000006f5,0x000006f6,0x0004003d,0x00000006,0x000006f8, + 0x000000e5,0x0003003e,0x000006f7,0x000006f8,0x0003003e,0x000006f9,0x0000010f,0x0004003d, + 0x00000006,0x000006fb,0x000000e6,0x0003003e,0x000006fa,0x000006fb,0x0004003d,0x00000006, + 0x000006fd,0x000000e8,0x0003003e,0x000006fc,0x000006fd,0x000b0039,0x00000002,0x000006fe, + 0x000000e1,0x000006f1,0x000006f3,0x000006f5,0x000006f7,0x000006f9,0x000006fa,0x000006fc, + 0x0004003d,0x00000006,0x000006ff,0x000000e6,0x000500b2,0x00000047,0x00000700,0x000006ff, + 0x000001a4,0x000300f7,0x00000702,0x00000000,0x000400fa,0x00000700,0x00000701,0x00000702, + 0x000200f8,0x00000701,0x000100fd,0x000200f8,0x00000702,0x0004003d,0x00000006,0x00000705, + 0x000000e7,0x0003003e,0x00000704,0x00000705,0x0004003d,0x00000006,0x00000707,0x000000e5, + 0x0003003e,0x00000706,0x00000707,0x0004003d,0x00000006,0x00000709,0x000000e8,0x0003003e, + 0x00000708,0x00000709,0x00070039,0x00000047,0x0000070a,0x00000084,0x00000704,0x00000706, + 0x00000708,0x000300f7,0x0000070c,0x00000000,0x000400fa,0x0000070a,0x0000070b,0x0000070c, + 0x000200f8,0x0000070b,0x000100fd,0x000200f8,0x0000070c,0x0004003d,0x00000006,0x0000070f, + 0x000000e8,0x0003003e,0x0000070e,0x0000070f,0x00050039,0x00000002,0x00000710,0x0000006a, + 0x0000070e,0x0004003d,0x00000006,0x00000712,0x000006d4,0x0003003e,0x00000711,0x00000712, + 0x0004003d,0x00000006,0x00000714,0x000006dc,0x0003003e,0x00000713,0x00000714,0x0004003d, + 0x00000006,0x00000716,0x000000e6,0x0003003e,0x00000715,0x00000716,0x0004003d,0x00000006, + 0x00000718,0x000000e8,0x0003003e,0x00000717,0x00000718,0x00080039,0x00000002,0x00000719, + 0x000000d7,0x00000711,0x00000713,0x00000715,0x00000717,0x0004003d,0x00000006,0x0000071b, + 0x000006d4,0x0003003e,0x0000071a,0x0000071b,0x0004003d,0x00000006,0x0000071d,0x000006dc, + 0x0003003e,0x0000071c,0x0000071d,0x0003003e,0x0000071e,0x00000385,0x0004003d,0x00000006, + 0x00000720,0x000000e5,0x0003003e,0x0000071f,0x00000720,0x0003003e,0x00000721,0x000001b8, + 0x0004003d,0x00000006,0x00000723,0x000000e6,0x0003003e,0x00000722,0x00000723,0x0004003d, + 0x00000006,0x00000725,0x000000e8,0x0003003e,0x00000724,0x00000725,0x000b0039,0x00000002, + 0x00000726,0x000000e1,0x0000071a,0x0000071c,0x0000071e,0x0000071f,0x00000721,0x00000722, + 0x00000724,0x000100fd,0x00010038,0x00050036,0x00000002,0x000000f2,0x00000000,0x000000eb, + 0x00030037,0x0000004c,0x000000ec,0x00030037,0x00000007,0x000000ed,0x00030037,0x00000007, + 0x000000ee,0x00030037,0x00000007,0x000000ef,0x00030037,0x00000007,0x000000f0,0x00030037, + 0x0000004c,0x000000f1,0x000200f8,0x000000f3,0x0004003b,0x0000004c,0x0000072a,0x00000007, + 0x0004003b,0x00000007,0x0000072b,0x00000007,0x0004003b,0x00000007,0x0000072d,0x00000007, + 0x0004003b,0x00000007,0x0000072f,0x00000007,0x0004003b,0x00000007,0x00000731,0x00000007, + 0x0004003d,0x00000019,0x00000727,0x000000ec,0x0004003d,0x00000019,0x00000728,0x000000f1, + 0x00050080,0x00000019,0x00000729,0x00000727,0x00000728,0x0003003e,0x0000072a,0x00000729, + 0x0004003d,0x00000006,0x0000072c,0x000000ed,0x0003003e,0x0000072b,0x0000072c,0x0004003d, + 0x00000006,0x0000072e,0x000000ee,0x0003003e,0x0000072d,0x0000072e,0x0004003d,0x00000006, + 0x00000730,0x000000ef,0x0003003e,0x0000072f,0x00000730,0x0004003d,0x00000006,0x00000732, + 0x000000f0,0x0003003e,0x00000731,0x00000732,0x00090039,0x00000002,0x00000733,0x000000e9, + 0x0000072a,0x0000072b,0x0000072d,0x0000072f,0x00000731,0x000100fd,0x00010038,0x00050036, + 0x00000002,0x000000f9,0x00000000,0x000000f6,0x00030037,0x000000f5,0x000000f7,0x00030037, + 0x00000030,0x000000f8,0x000200f8,0x000000fa,0x0004003b,0x0000004c,0x0000073f,0x00000007, + 0x0004003b,0x00000007,0x00000740,0x00000007,0x0004003b,0x00000007,0x00000741,0x00000007, + 0x0004003b,0x00000007,0x00000742,0x00000007,0x0004003b,0x00000007,0x00000743,0x00000007, + 0x0004003b,0x0000004c,0x00000744,0x00000007,0x0004003d,0x000000f4,0x00000734,0x000000f7, + 0x0007004f,0x0000001f,0x00000735,0x00000734,0x00000734,0x00000000,0x00000001,0x0004007c, + 0x00000019,0x00000736,0x00000735,0x0004003d,0x0000001e,0x00000737,0x000000f8,0x0004007c, + 0x00000006,0x00000738,0x00000737,0x00040039,0x00000006,0x00000739,0x00000024,0x00040039, + 0x00000006,0x0000073a,0x00000026,0x00050041,0x00000030,0x0000073b,0x000000f7,0x0000010f, + 0x0004003d,0x0000001e,0x0000073c,0x0000073b,0x0004007c,0x00000006,0x0000073d,0x0000073c, + 0x00040039,0x00000019,0x0000073e,0x00000029,0x0003003e,0x0000073f,0x00000736,0x0003003e, + 0x00000740,0x00000738,0x0003003e,0x00000741,0x00000739,0x0003003e,0x00000742,0x0000073a, + 0x0003003e,0x00000743,0x0000073d,0x0003003e,0x00000744,0x0000073e,0x000a0039,0x00000002, + 0x00000745,0x000000f2,0x0000073f,0x00000740,0x00000741,0x00000742,0x00000743,0x00000744, + 0x000100fd,0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_fi_inpainting_comp_spv.h b/gpu/vk/shaders/fsr3_fi_inpainting_comp_spv.h new file mode 100644 index 000000000..54494dace --- /dev/null +++ b/gpu/vk/shaders/fsr3_fi_inpainting_comp_spv.h @@ -0,0 +1,748 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_FI_INPAINTING_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x000003af,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000037,0x00020011,0x00000038,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e, + 0x00000000,0x0003000e,0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d, + 0x00000000,0x00000397,0x00060010,0x00000004,0x00000011,0x00000008,0x00000008,0x00000001, + 0x00030003,0x00000002,0x000001c2,0x000b0004,0x455f4c47,0x735f5458,0x6c706d61,0x656c7265, + 0x745f7373,0x75747865,0x665f6572,0x74636e75,0x736e6f69,0x00000000,0x000b0004,0x455f4c47, + 0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63, + 0x00736570,0x000a0004,0x455f4c47,0x735f5458,0x65646168,0x6d695f72,0x5f656761,0x64616f6c, + 0x726f665f,0x7474616d,0x00006465,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70, + 0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f, + 0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669,0x00040005,0x00000004,0x6e69616d, + 0x00000000,0x00060005,0x0000000b,0x41786666,0x6f6c4673,0x75287461,0x00003b31,0x00030005, + 0x0000000a,0x00000078,0x00070005,0x00000011,0x42786666,0x64616f72,0x74736163,0x31662833, + 0x0000003b,0x00040005,0x00000010,0x756c6176,0x00000065,0x00070005,0x00000018,0x4c786666, + 0x28707265,0x3b336676,0x3b336676,0x003b3166,0x00030005,0x00000015,0x00000078,0x00030005, + 0x00000016,0x00000079,0x00030005,0x00000017,0x00000074,0x00060005,0x0000001c,0x53786666, + 0x72757461,0x28657461,0x003b3166,0x00030005,0x0000001b,0x00000078,0x00070005,0x00000020, + 0x53786666,0x72757461,0x28657461,0x3b336676,0x00000000,0x00030005,0x0000001f,0x00000078, + 0x00060005,0x00000026,0x46786666,0x74636172,0x32667628,0x0000003b,0x00030005,0x00000025, + 0x00000078,0x00060005,0x0000002b,0x4d786666,0x66286e69,0x31663b31,0x0000003b,0x00030005, + 0x00000029,0x00000078,0x00030005,0x0000002a,0x00000079,0x00060005,0x0000002f,0x4d786666, + 0x66287861,0x31663b31,0x0000003b,0x00030005,0x0000002d,0x00000078,0x00030005,0x0000002e, + 0x00000079,0x00060005,0x00000033,0x50786666,0x6628776f,0x31663b31,0x0000003b,0x00030005, + 0x00000031,0x00000078,0x00030005,0x00000032,0x00000079,0x000a0005,0x00000039,0x5a786666, + 0x4f6f7265,0x6553656e,0x7463656c,0x33667628,0x3366763b,0x3366763b,0x0000003b,0x00030005, + 0x00000036,0x00000078,0x00030005,0x00000037,0x00000079,0x00030005,0x00000038,0x0000007a, + 0x00080005,0x0000003c,0x5a786666,0x4f6f7265,0x7349656e,0x6e676953,0x76286465,0x003b3366, + 0x00030005,0x0000003b,0x00000078,0x00080005,0x0000003f,0x4c786666,0x61656e69,0x6f724672, + 0x2851506d,0x3b336676,0x00000000,0x00040005,0x0000003e,0x756c6176,0x00000065,0x00080005, + 0x00000042,0x4c786666,0x61656e69,0x6f724672,0x6772536d,0x66762862,0x00003b33,0x00040005, + 0x00000041,0x756c6176,0x00000065,0x00060005,0x00000047,0x70736944,0x5379616c,0x28657a69, + 0x00000000,0x00040005,0x0000004b,0x65736552,0x00002874,0x00090005,0x0000004e,0x48746547, + 0x654c4455,0x74417373,0x68636174,0x61466465,0x726f7463,0x00000028,0x00070005,0x00000051, + 0x44746547,0x61707369,0x46686374,0x7367616c,0x00000028,0x00070005,0x00000054,0x44746547, + 0x67756265,0x43726142,0x726f6c6f,0x00000028,0x00090005,0x00000056,0x6b636142,0x66667542, + 0x72547265,0x66736e61,0x75467265,0x6974636e,0x00286e6f,0x00060005,0x00000059,0x4c6e694d, + 0x6e696d75,0x65636e61,0x00000028,0x00060005,0x0000005b,0x4c78614d,0x6e696d75,0x65636e61, + 0x00000028,0x00090005,0x00000060,0x64616f4c,0x72727543,0x42746e65,0x626b6361,0x65666675, + 0x69762872,0x00003b32,0x00040005,0x0000005f,0x50785069,0x0000736f,0x00070005,0x00000062, + 0x53736148,0x656e6563,0x6e616843,0x28646567,0x00000000,0x000a0005,0x0000006b,0x64616f4c, + 0x61706e49,0x69746e69,0x7950676e,0x696d6172,0x31692864,0x3275763b,0x0000003b,0x00050005, + 0x00000069,0x4c70696d,0x6c657665,0x00000000,0x00050005,0x0000006a,0x49785069,0x7475706e, + 0x00000000,0x00090005,0x0000006f,0x64616f4c,0x73657250,0x42746e65,0x626b6361,0x65666675, + 0x69762872,0x00003b32,0x00050005,0x0000006e,0x49785069,0x7475706e,0x00000000,0x000b0005, + 0x00000072,0x6f4c5752,0x72466461,0x69656d61,0x7265746e,0x616c6f70,0x6e6f6974,0x7074754f, + 0x76287475,0x003b3269,0x00040005,0x00000071,0x50785069,0x0000736f,0x000c0005,0x00000078, + 0x726f7453,0x61724665,0x6e69656d,0x70726574,0x74616c6f,0x4f6e6f69,0x75707475,0x69762874, + 0x66763b32,0x00003b34,0x00040005,0x00000076,0x50785069,0x0000736f,0x00030005,0x00000077, + 0x006c6176,0x00090005,0x0000007e,0x73786666,0x42475263,0x694c6f54,0x7261656e,0x33667628, + 0x3b31663b,0x003b3166,0x00040005,0x0000007b,0x756c6176,0x00000065,0x00060005,0x0000007c, + 0x4c6e696d,0x6e696d75,0x65636e61,0x00000000,0x00060005,0x0000007d,0x4c78616d,0x6e696d75, + 0x65636e61,0x00000000,0x00070005,0x00000081,0x52776152,0x6f544247,0x656e694c,0x76287261, + 0x003b3366,0x00040005,0x00000080,0x77615266,0x00626752,0x00080005,0x00000086,0x696c6942, + 0x7261656e,0x706d6153,0x676e696c,0x61746144,0x00000000,0x00060006,0x00000086,0x00000000, + 0x66664f69,0x73746573,0x00000000,0x00060006,0x00000086,0x00000001,0x69655766,0x73746867, + 0x00000000,0x00060006,0x00000086,0x00000002,0x73614269,0x736f5065,0x00000000,0x000b0005, + 0x0000008a,0x42746547,0x6e696c69,0x53726165,0x6c706d61,0x44676e69,0x28617461,0x3b326676, + 0x3b326976,0x00000000,0x00030005,0x00000088,0x00765566,0x00040005,0x00000089,0x7a695369, + 0x00000065,0x00070005,0x0000008f,0x6e4f7349,0x65726353,0x76286e65,0x763b3269,0x003b3269, + 0x00030005,0x0000008d,0x00736f70,0x00040005,0x0000008e,0x657a6973,0x00000000,0x00080005, + 0x00000094,0x446e694d,0x64697669,0x79426465,0x2878614d,0x663b3166,0x00003b31,0x00030005, + 0x00000092,0x00003076,0x00030005,0x00000093,0x00003176,0x000c0005,0x00000099,0x636c6143, + 0x74616c75,0x61745365,0x43636974,0x65746e6f,0x6146746e,0x726f7463,0x33667628,0x3366763b, + 0x0000003b,0x00090005,0x00000097,0x72754366,0x746e6572,0x65746e49,0x6c6f7072,0x6f697461, + 0x756f536e,0x00656372,0x00060005,0x00000098,0x65725066,0x746e6573,0x6f6c6f43,0x00000072, + 0x000b0005,0x0000009f,0x706d6f43,0x49657475,0x6961706e,0x6e69746e,0x76654c67,0x76286c65, + 0x693b3266,0x69763b31,0x00003b32,0x00030005,0x0000009c,0x00765566,0x00050005,0x0000009d, + 0x70694d69,0x6576654c,0x0000006c,0x00050005,0x0000009e,0x78655469,0x657a6953,0x00000000, + 0x00080005,0x000000a2,0x706d6f43,0x49657475,0x6961706e,0x6e69746e,0x69762867,0x00003b32, + 0x00040005,0x000000a1,0x50785069,0x0000736f,0x000a0005,0x000000a9,0x77617264,0x75626544, + 0x61655467,0x6e694c72,0x76287365,0x763b3269,0x623b3366,0x00003b31,0x00040005,0x000000a6, + 0x50785069,0x0000736f,0x00040005,0x000000a7,0x6c6f4366,0x0000726f,0x00050005,0x000000a8, + 0x69725762,0x6f436574,0x00726f6c,0x000c0005,0x000000ae,0x77617264,0x75626544,0x73655267, + 0x6e497465,0x61636964,0x73726f74,0x32697628,0x3366763b,0x3b31623b,0x00000000,0x00040005, + 0x000000ab,0x50785069,0x0000736f,0x00040005,0x000000ac,0x6c6f4366,0x0000726f,0x00050005, + 0x000000ad,0x69725762,0x6f436574,0x00726f6c,0x00080005,0x000000b2,0x706d6f63,0x49657475, + 0x6961706e,0x6e69746e,0x69762867,0x00003b32,0x00040005,0x000000b1,0x50785069,0x0000736f, + 0x00040005,0x000000ca,0x61726170,0x0000006d,0x00040005,0x000000cc,0x61726170,0x0000006d, + 0x00030005,0x000000e4,0x00000072,0x00040005,0x000000f4,0x61726170,0x0000006d,0x00040005, + 0x000000f6,0x61726170,0x0000006d,0x00040005,0x000000f9,0x61726170,0x0000006d,0x00030005, + 0x000000fd,0x00000070,0x00040005,0x00000100,0x61726170,0x0000006d,0x00040005,0x00000105, + 0x61726170,0x0000006d,0x00040005,0x00000108,0x61726170,0x0000006d,0x00040005,0x0000010b, + 0x61726170,0x0000006d,0x00040005,0x0000010e,0x61726170,0x0000006d,0x00040005,0x00000115, + 0x61726170,0x0000006d,0x00030005,0x0000011a,0x0000006a,0x00030005,0x0000011f,0x0000006b, + 0x00040005,0x00000127,0x61726170,0x0000006d,0x00040005,0x00000137,0x61726170,0x0000006d, + 0x00040005,0x00000138,0x61726170,0x0000006d,0x00040005,0x00000139,0x61726170,0x0000006d, + 0x00040005,0x0000013d,0x49466263,0x0000745f,0x00060006,0x0000013d,0x00000000,0x646e6572, + 0x69537265,0x0000657a,0x00060006,0x0000013d,0x00000001,0x70736964,0x5379616c,0x00657a69, + 0x00070006,0x0000013d,0x00000002,0x70736964,0x5379616c,0x52657a69,0x00007063,0x00060006, + 0x0000013d,0x00000003,0x656d6163,0x654e6172,0x00007261,0x00060006,0x0000013d,0x00000004, + 0x656d6163,0x61466172,0x00000072,0x00080006,0x0000013d,0x00000005,0x63737075,0x72656c61, + 0x67726154,0x69537465,0x0000657a,0x00050006,0x0000013d,0x00000006,0x65646f4d,0x00000000, + 0x00050006,0x0000013d,0x00000007,0x65736572,0x00000074,0x00080006,0x0000013d,0x00000008, + 0x76654466,0x54656369,0x6569566f,0x70654477,0x00006874,0x00060006,0x0000013d,0x00000009, + 0x746c6564,0x6d695461,0x00000065,0x00090006,0x0000013d,0x0000000a,0x4c445548,0x41737365, + 0x63617474,0x46646568,0x6f746361,0x00000072,0x00080006,0x0000013d,0x0000000b,0x74736964, + 0x6974726f,0x69466e6f,0x53646c65,0x00657a69,0x00080006,0x0000013d,0x0000000c,0x6974706f, + 0x466c6163,0x53776f6c,0x656c6163,0x00000000,0x00090006,0x0000013d,0x0000000d,0x6974706f, + 0x466c6163,0x42776f6c,0x6b636f6c,0x657a6953,0x00000000,0x00070006,0x0000013d,0x0000000e, + 0x70736964,0x68637461,0x67616c46,0x00000073,0x00070006,0x0000013d,0x0000000f,0x5278616d, + 0x65646e65,0x7a695372,0x00000065,0x00090006,0x0000013d,0x00000010,0x6974706f,0x466c6163, + 0x48776f6c,0x52666c61,0x6f4d7365,0x00006564,0x00070006,0x0000013d,0x00000011,0x496d754e, + 0x6174736e,0x7365636e,0x00000000,0x00090006,0x0000013d,0x00000012,0x65746e69,0x6c6f7072, + 0x6f697461,0x6365526e,0x73614274,0x00000065,0x00090006,0x0000013d,0x00000013,0x65746e69, + 0x6c6f7072,0x6f697461,0x6365526e,0x7a695374,0x00000065,0x00070006,0x0000013d,0x00000014, + 0x75626564,0x72614267,0x6f6c6f43,0x00000072,0x000a0006,0x0000013d,0x00000015,0x6b636162, + 0x66667542,0x72547265,0x66736e61,0x75467265,0x6974636e,0x00006e6f,0x00070006,0x0000013d, + 0x00000016,0x4d6e696d,0x754c7861,0x616e696d,0x0065636e,0x00060006,0x0000013d,0x00000017, + 0x6e615466,0x666c6148,0x00564f46,0x00050006,0x0000013d,0x00000018,0x6461705f,0x00000031, + 0x00050006,0x0000013d,0x00000019,0x74694a66,0x00726574,0x00080006,0x0000013d,0x0000001a, + 0x746f4d66,0x566e6f69,0x6f746365,0x61635372,0x0000656c,0x00040005,0x0000013f,0x49466263, + 0x00000000,0x000a0005,0x00000171,0x75635f72,0x6e657272,0x6e695f74,0x70726574,0x74616c6f, + 0x5f6e6f69,0x72756f73,0x00006563,0x00070005,0x0000017b,0x706f5f72,0x61636974,0x6c665f6c, + 0x735f776f,0x00006463,0x00080005,0x00000186,0x6e695f72,0x6e696170,0x676e6974,0x7279705f, + 0x64696d61,0x00000000,0x00080005,0x0000018e,0x72705f72,0x6e657365,0x61625f74,0x75626b63, + 0x72656666,0x00000000,0x00050005,0x00000196,0x6f5f7772,0x75707475,0x00000074,0x00030005, + 0x0000019f,0x00000070,0x00040005,0x000001a4,0x61726170,0x0000006d,0x00040005,0x000001ac, + 0x61726170,0x0000006d,0x00050005,0x000001b6,0x6e694c66,0x52726165,0x00006267,0x00040005, + 0x000001b7,0x61726170,0x0000006d,0x00040005,0x000001bb,0x61726170,0x0000006d,0x00040005, + 0x000001c5,0x61726170,0x0000006d,0x00040005,0x000001c7,0x61726170,0x0000006d,0x00040005, + 0x000001c8,0x61726170,0x0000006d,0x00050005,0x000001cf,0x53785066,0x6c706d61,0x00000065, + 0x00040005,0x000001d8,0x61746164,0x00000000,0x00040005,0x000001de,0x46785066,0x00636172, + 0x00040005,0x000001df,0x61726170,0x0000006d,0x00030005,0x00000212,0x0000006d,0x00040005, + 0x00000213,0x61726170,0x0000006d,0x00040005,0x00000214,0x61726170,0x0000006d,0x00040005, + 0x0000021b,0x61726170,0x0000006d,0x00040005,0x0000021c,0x61726170,0x0000006d,0x00040005, + 0x00000224,0x63614666,0x00726f74,0x00040005,0x0000022d,0x61726170,0x0000006d,0x00040005, + 0x00000236,0x61726170,0x0000006d,0x00040005,0x00000240,0x61726170,0x0000006d,0x00040005, + 0x00000243,0x61726170,0x0000006d,0x00060005,0x0000024f,0x696c6962,0x7261656e,0x6f666e49, + 0x00000000,0x00040005,0x00000250,0x61726170,0x0000006d,0x00040005,0x00000252,0x61726170, + 0x0000006d,0x00040005,0x00000254,0x6c6f4366,0x0000726f,0x00060005,0x00000256,0x6d615369, + 0x49656c70,0x7865646e,0x00000000,0x00040005,0x0000025f,0x66664f69,0x00746573,0x00050005, + 0x00000263,0x6d615369,0x50656c70,0x0000736f,0x00040005,0x00000268,0x61726170,0x0000006d, + 0x00040005,0x0000026a,0x61726170,0x0000006d,0x00040005,0x0000026e,0x6d615366,0x00656c70, + 0x00040005,0x00000271,0x61726170,0x0000006d,0x00040005,0x00000272,0x61726170,0x0000006d, + 0x00040005,0x00000274,0x69655766,0x00746867,0x00030005,0x0000028e,0x00765566,0x00040005, + 0x00000296,0x6c6f4366,0x0000726f,0x00050005,0x00000297,0x69655766,0x53746867,0x00006d75, + 0x00050005,0x00000298,0x78655469,0x657a6953,0x00000000,0x00050005,0x0000029a,0x70694d69, + 0x6576654c,0x0000006c,0x00050005,0x000002a5,0x70694d66,0x6f6c6f43,0x00000072,0x00040005, + 0x000002a8,0x61726170,0x0000006d,0x00070005,0x000002b0,0x726f4e66,0x696c616d,0x4d64657a, + 0x6f437069,0x00726f6c,0x00050005,0x000002b7,0x70694d66,0x67696557,0x00007468,0x00040005, + 0x000002be,0x61726170,0x0000006d,0x00040005,0x000002bf,0x61726170,0x0000006d,0x00050005, + 0x00000308,0x69725762,0x6f436574,0x00726f6c,0x00070005,0x0000030a,0x746e4966,0x6f707265, + 0x6574616c,0x6c6f4364,0x0000726f,0x00040005,0x0000030b,0x61726170,0x0000006d,0x00070005, + 0x0000030e,0x506e4966,0x746e6961,0x57676e69,0x68676965,0x00000074,0x00040005,0x00000316, + 0x61726170,0x0000006d,0x00040005,0x0000031e,0x61726170,0x0000006d,0x00040005,0x00000321, + 0x61726170,0x0000006d,0x00040005,0x00000322,0x61726170,0x0000006d,0x00090005,0x0000032f, + 0x72754366,0x746e6572,0x65746e49,0x6c6f7072,0x6f697461,0x756f536e,0x00656372,0x00040005, + 0x00000330,0x61726170,0x0000006d,0x00060005,0x00000333,0x65725066,0x746e6573,0x6f6c6f43, + 0x00000072,0x00040005,0x00000334,0x61726170,0x0000006d,0x00060005,0x00000342,0x61745366, + 0x46636974,0x6f746361,0x00000072,0x00040005,0x00000343,0x61726170,0x0000006d,0x00040005, + 0x00000346,0x61726170,0x0000006d,0x00040005,0x00000349,0x61726170,0x0000006d,0x00040005, + 0x0000034a,0x61726170,0x0000006d,0x00040005,0x00000350,0x61726170,0x0000006d,0x00040005, + 0x00000353,0x61726170,0x0000006d,0x00040005,0x00000355,0x61726170,0x0000006d,0x00040005, + 0x00000363,0x61726170,0x0000006d,0x00040005,0x00000365,0x61726170,0x0000006d,0x00040005, + 0x00000368,0x61726170,0x0000006d,0x00040005,0x00000378,0x61726170,0x0000006d,0x00040005, + 0x0000037a,0x61726170,0x0000006d,0x00040005,0x0000037d,0x61726170,0x0000006d,0x00040005, + 0x00000391,0x61726170,0x0000006d,0x00040005,0x00000393,0x61726170,0x0000006d,0x00080005, + 0x00000397,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00040005, + 0x0000039b,0x61726170,0x0000006d,0x00060005,0x000003a2,0x694c5f73,0x7261656e,0x6d616c43, + 0x00000070,0x00030047,0x0000013d,0x00000002,0x00050048,0x0000013d,0x00000000,0x00000023, + 0x00000000,0x00050048,0x0000013d,0x00000001,0x00000023,0x00000008,0x00050048,0x0000013d, + 0x00000002,0x00000023,0x00000010,0x00050048,0x0000013d,0x00000003,0x00000023,0x00000018, + 0x00050048,0x0000013d,0x00000004,0x00000023,0x0000001c,0x00050048,0x0000013d,0x00000005, + 0x00000023,0x00000020,0x00050048,0x0000013d,0x00000006,0x00000023,0x00000028,0x00050048, + 0x0000013d,0x00000007,0x00000023,0x0000002c,0x00050048,0x0000013d,0x00000008,0x00000023, + 0x00000030,0x00050048,0x0000013d,0x00000009,0x00000023,0x00000040,0x00050048,0x0000013d, + 0x0000000a,0x00000023,0x00000044,0x00050048,0x0000013d,0x0000000b,0x00000023,0x00000048, + 0x00050048,0x0000013d,0x0000000c,0x00000023,0x00000050,0x00050048,0x0000013d,0x0000000d, + 0x00000023,0x00000058,0x00050048,0x0000013d,0x0000000e,0x00000023,0x0000005c,0x00050048, + 0x0000013d,0x0000000f,0x00000023,0x00000060,0x00050048,0x0000013d,0x00000010,0x00000023, + 0x00000068,0x00050048,0x0000013d,0x00000011,0x00000023,0x0000006c,0x00050048,0x0000013d, + 0x00000012,0x00000023,0x00000070,0x00050048,0x0000013d,0x00000013,0x00000023,0x00000078, + 0x00050048,0x0000013d,0x00000014,0x00000023,0x00000080,0x00050048,0x0000013d,0x00000015, + 0x00000023,0x0000008c,0x00050048,0x0000013d,0x00000016,0x00000023,0x00000090,0x00050048, + 0x0000013d,0x00000017,0x00000023,0x00000098,0x00050048,0x0000013d,0x00000018,0x00000023, + 0x0000009c,0x00050048,0x0000013d,0x00000019,0x00000023,0x000000a0,0x00050048,0x0000013d, + 0x0000001a,0x00000023,0x000000a8,0x00040047,0x0000013f,0x00000021,0x00000008,0x00040047, + 0x0000013f,0x00000022,0x00000000,0x00040047,0x00000171,0x00000021,0x00000003,0x00040047, + 0x00000171,0x00000022,0x00000000,0x00040047,0x0000017b,0x00000021,0x00000000,0x00040047, + 0x0000017b,0x00000022,0x00000000,0x00040047,0x00000186,0x00000021,0x00000001,0x00040047, + 0x00000186,0x00000022,0x00000000,0x00040047,0x0000018e,0x00000021,0x00000002,0x00040047, + 0x0000018e,0x00000022,0x00000000,0x00040047,0x00000196,0x00000021,0x00000007,0x00040047, + 0x00000196,0x00000022,0x00000000,0x00040047,0x00000397,0x0000000b,0x0000001c,0x00040047, + 0x000003a2,0x00000021,0x000003e8,0x00040047,0x000003a2,0x00000022,0x00000000,0x00040047, + 0x000003ae,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002, + 0x00040015,0x00000006,0x00000020,0x00000000,0x00040020,0x00000007,0x00000007,0x00000006, + 0x00030016,0x00000008,0x00000020,0x00040021,0x00000009,0x00000008,0x00000007,0x00040020, + 0x0000000d,0x00000007,0x00000008,0x00040017,0x0000000e,0x00000008,0x00000003,0x00040021, + 0x0000000f,0x0000000e,0x0000000d,0x00040020,0x00000013,0x00000007,0x0000000e,0x00060021, + 0x00000014,0x0000000e,0x00000013,0x00000013,0x0000000d,0x00040021,0x0000001a,0x00000008, + 0x0000000d,0x00040021,0x0000001e,0x0000000e,0x00000013,0x00040017,0x00000022,0x00000008, + 0x00000002,0x00040020,0x00000023,0x00000007,0x00000022,0x00040021,0x00000024,0x00000022, + 0x00000023,0x00050021,0x00000028,0x00000008,0x0000000d,0x0000000d,0x00060021,0x00000035, + 0x0000000e,0x00000013,0x00000013,0x00000013,0x00040015,0x00000044,0x00000020,0x00000001, + 0x00040017,0x00000045,0x00000044,0x00000002,0x00030021,0x00000046,0x00000045,0x00020014, + 0x00000049,0x00030021,0x0000004a,0x00000049,0x00030021,0x0000004d,0x00000044,0x00030021, + 0x00000050,0x00000006,0x00030021,0x00000053,0x0000000e,0x00030021,0x00000058,0x00000008, + 0x00040020,0x0000005d,0x00000007,0x00000045,0x00040021,0x0000005e,0x0000000e,0x0000005d, + 0x00040020,0x00000064,0x00000007,0x00000044,0x00040017,0x00000065,0x00000006,0x00000002, + 0x00040020,0x00000066,0x00000007,0x00000065,0x00040017,0x00000067,0x00000008,0x00000004, + 0x00050021,0x00000068,0x00000067,0x00000064,0x00000066,0x00040021,0x0000006d,0x00000067, + 0x0000005d,0x00040020,0x00000074,0x00000007,0x00000067,0x00050021,0x00000075,0x00000002, + 0x0000005d,0x00000074,0x00060021,0x0000007a,0x0000000e,0x00000013,0x0000000d,0x0000000d, + 0x0004002b,0x00000006,0x00000083,0x00000004,0x0004001c,0x00000084,0x00000045,0x00000083, + 0x0004001c,0x00000085,0x00000008,0x00000083,0x0005001e,0x00000086,0x00000084,0x00000085, + 0x00000045,0x00050021,0x00000087,0x00000086,0x00000023,0x0000005d,0x00050021,0x0000008c, + 0x00000049,0x0000005d,0x0000005d,0x00050021,0x00000091,0x00000008,0x00000008,0x00000008, + 0x00050021,0x00000096,0x00000008,0x00000013,0x00000013,0x00060021,0x0000009b,0x00000067, + 0x00000023,0x00000044,0x00000045,0x00040020,0x000000a4,0x00000007,0x00000049,0x00060021, + 0x000000a5,0x00000002,0x0000005d,0x00000013,0x000000a4,0x00040021,0x000000b0,0x00000002, + 0x0000005d,0x0004002b,0x00000008,0x000000c4,0x00000000,0x0004002b,0x00000008,0x000000c5, + 0x3f800000,0x0004002b,0x00000006,0x000000f3,0xff800000,0x0004002b,0x00000008,0x000000ff, + 0x3c4fcd9e,0x0004002b,0x00000008,0x00000104,0x3f560008,0x0004002b,0x00000008,0x0000010a, + 0x4196d014,0x0004002b,0x00000008,0x0000010d,0x41958000,0x0004002b,0x00000008,0x00000114, + 0x40c8e061,0x0004002b,0x00000008,0x0000011b,0x3d25aee6,0x0004002b,0x00000008,0x0000011c, + 0x3d9e8391,0x0004002b,0x00000008,0x0000011d,0x4019999a,0x0006002c,0x0000000e,0x0000011e, + 0x0000011b,0x0000011c,0x0000011d,0x0004002b,0x00000008,0x00000120,0x3f72a76e,0x0004002b, + 0x00000008,0x00000121,0x3d558919,0x0005002c,0x00000022,0x00000122,0x00000120,0x00000121, + 0x001d001e,0x0000013d,0x00000045,0x00000045,0x00000022,0x00000008,0x00000008,0x00000045, + 0x00000044,0x00000044,0x00000067,0x00000008,0x00000044,0x00000045,0x00000022,0x00000044, + 0x00000006,0x00000045,0x00000044,0x00000044,0x00000045,0x00000045,0x0000000e,0x00000006, + 0x00000022,0x00000008,0x00000044,0x00000022,0x00000022,0x00040020,0x0000013e,0x00000002, + 0x0000013d,0x0004003b,0x0000013e,0x0000013f,0x00000002,0x0004002b,0x00000044,0x00000140, + 0x00000001,0x00040020,0x00000141,0x00000002,0x00000045,0x0004002b,0x00000044,0x00000146, + 0x00000007,0x00040020,0x00000147,0x00000002,0x00000044,0x0004002b,0x00000044,0x0000014d, + 0x0000000a,0x0004002b,0x00000044,0x00000152,0x0000000e,0x00040020,0x00000153,0x00000002, + 0x00000006,0x0004002b,0x00000044,0x00000158,0x00000014,0x00040020,0x00000159,0x00000002, + 0x0000000e,0x0004002b,0x00000044,0x0000015e,0x00000015,0x0004002b,0x00000044,0x00000163, + 0x00000016,0x0004002b,0x00000006,0x00000164,0x00000000,0x00040020,0x00000165,0x00000002, + 0x00000008,0x0004002b,0x00000006,0x0000016a,0x00000001,0x00090019,0x0000016f,0x00000008, + 0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x00040020,0x00000170, + 0x00000000,0x0000016f,0x0004003b,0x00000170,0x00000171,0x00000000,0x0004002b,0x00000044, + 0x00000174,0x00000000,0x00090019,0x00000179,0x00000006,0x00000001,0x00000000,0x00000000, + 0x00000000,0x00000001,0x00000000,0x00040020,0x0000017a,0x00000000,0x00000179,0x0004003b, + 0x0000017a,0x0000017b,0x00000000,0x0005002c,0x00000045,0x0000017d,0x00000140,0x00000174, + 0x00040017,0x0000017e,0x00000006,0x00000004,0x0004002b,0x00000006,0x00000181,0x0000000f, + 0x0004003b,0x00000170,0x00000186,0x00000000,0x0004003b,0x00000170,0x0000018e,0x00000000, + 0x00090019,0x00000194,0x00000008,0x00000001,0x00000000,0x00000000,0x00000000,0x00000002, + 0x00000000,0x00040020,0x00000195,0x00000000,0x00000194,0x0004003b,0x00000195,0x00000196, + 0x00000000,0x0004002b,0x00000008,0x000001a2,0x42a00000,0x0004002b,0x00000008,0x000001be, + 0x461c4000,0x0004002b,0x00000008,0x000001d4,0x3f000000,0x0005002c,0x00000022,0x000001d5, + 0x000001d4,0x000001d4,0x00040020,0x000001d7,0x00000007,0x00000086,0x0004002b,0x00000044, + 0x000001d9,0x00000002,0x0005002c,0x00000045,0x000001e2,0x00000174,0x00000174,0x0005002c, + 0x00000045,0x000001e5,0x00000174,0x00000140,0x0004002b,0x00000044,0x000001e7,0x00000003, + 0x0005002c,0x00000045,0x000001e8,0x00000140,0x00000140,0x00040017,0x0000020d,0x00000049, + 0x00000002,0x0004002b,0x00000008,0x0000022b,0x3dcccccd,0x0004002b,0x00000006,0x00000238, + 0x00000002,0x0007002c,0x00000067,0x00000255,0x000000c4,0x000000c4,0x000000c4,0x000000c4, + 0x0004002b,0x00000044,0x0000025d,0x00000004,0x0004002b,0x00000006,0x00000278,0x00000003, + 0x0004002b,0x00000008,0x000002ba,0x41200000,0x0004002b,0x00000008,0x000002bd,0x40400000, + 0x0004002b,0x00000044,0x000002d9,0x00000010,0x00030029,0x00000049,0x000002de,0x0004002b, + 0x00000044,0x000002ed,0x00000020,0x0004002b,0x00000044,0x000002fe,0x00000040,0x0003002a, + 0x00000049,0x00000309,0x0004002b,0x00000008,0x00000312,0x3a83126f,0x0006002c,0x0000000e, + 0x0000033c,0x000000c4,0x000000c4,0x000000c4,0x00040017,0x0000033d,0x00000049,0x00000003, + 0x00040017,0x00000395,0x00000006,0x00000003,0x00040020,0x00000396,0x00000001,0x00000395, + 0x0004003b,0x00000396,0x00000397,0x00000001,0x0004002b,0x00000008,0x0000039d,0x387fda40, + 0x0004002b,0x00000008,0x0000039e,0x477fe000,0x0004002b,0x00000008,0x0000039f,0x37801002, + 0x0002001a,0x000003a0,0x00040020,0x000003a1,0x00000000,0x000003a0,0x0004003b,0x000003a1, + 0x000003a2,0x00000000,0x0004002b,0x00000008,0x000003a3,0x7f7fffff,0x0004002b,0x00000008, + 0x000003a4,0x00800000,0x0004002b,0x00000006,0x000003a5,0x00000020,0x0004002b,0x00000006, + 0x000003a6,0x00000010,0x0004002b,0x00000006,0x000003a7,0x00000005,0x0004002b,0x00000006, + 0x000003a8,0x0000000a,0x0004002b,0x00000006,0x000003a9,0x80000000,0x0004002b,0x00000006, + 0x000003aa,0x0000001f,0x0004002b,0x00000006,0x000003ab,0x000003ff,0x0004002b,0x00000006, + 0x000003ac,0x00000015,0x0004002b,0x00000006,0x000003ad,0x00000008,0x0006002c,0x00000395, + 0x000003ae,0x000003ad,0x000003ad,0x0000016a,0x00050036,0x00000002,0x00000004,0x00000000, + 0x00000003,0x000200f8,0x00000005,0x0004003b,0x0000005d,0x0000039b,0x00000007,0x0004003d, + 0x00000395,0x00000398,0x00000397,0x0007004f,0x00000065,0x00000399,0x00000398,0x00000398, + 0x00000000,0x00000001,0x0004007c,0x00000045,0x0000039a,0x00000399,0x0003003e,0x0000039b, + 0x0000039a,0x00050039,0x00000002,0x0000039c,0x000000b2,0x0000039b,0x000100fd,0x00010038, + 0x00050036,0x00000008,0x0000000b,0x00000000,0x00000009,0x00030037,0x00000007,0x0000000a, + 0x000200f8,0x0000000c,0x0004003d,0x00000006,0x000000b4,0x0000000a,0x0004007c,0x00000008, + 0x000000b5,0x000000b4,0x000200fe,0x000000b5,0x00010038,0x00050036,0x0000000e,0x00000011, + 0x00000000,0x0000000f,0x00030037,0x0000000d,0x00000010,0x000200f8,0x00000012,0x0004003d, + 0x00000008,0x000000b8,0x00000010,0x00060050,0x0000000e,0x000000b9,0x000000b8,0x000000b8, + 0x000000b8,0x000200fe,0x000000b9,0x00010038,0x00050036,0x0000000e,0x00000018,0x00000000, + 0x00000014,0x00030037,0x00000013,0x00000015,0x00030037,0x00000013,0x00000016,0x00030037, + 0x0000000d,0x00000017,0x000200f8,0x00000019,0x0004003d,0x0000000e,0x000000bc,0x00000015, + 0x0004003d,0x0000000e,0x000000bd,0x00000016,0x0004003d,0x00000008,0x000000be,0x00000017, + 0x00060050,0x0000000e,0x000000bf,0x000000be,0x000000be,0x000000be,0x0008000c,0x0000000e, + 0x000000c0,0x00000001,0x0000002e,0x000000bc,0x000000bd,0x000000bf,0x000200fe,0x000000c0, + 0x00010038,0x00050036,0x00000008,0x0000001c,0x00000000,0x0000001a,0x00030037,0x0000000d, + 0x0000001b,0x000200f8,0x0000001d,0x0004003d,0x00000008,0x000000c3,0x0000001b,0x0008000c, + 0x00000008,0x000000c6,0x00000001,0x0000002b,0x000000c3,0x000000c4,0x000000c5,0x000200fe, + 0x000000c6,0x00010038,0x00050036,0x0000000e,0x00000020,0x00000000,0x0000001e,0x00030037, + 0x00000013,0x0000001f,0x000200f8,0x00000021,0x0004003b,0x0000000d,0x000000ca,0x00000007, + 0x0004003b,0x0000000d,0x000000cc,0x00000007,0x0004003d,0x0000000e,0x000000c9,0x0000001f, + 0x0003003e,0x000000ca,0x000000c4,0x00050039,0x0000000e,0x000000cb,0x00000011,0x000000ca, + 0x0003003e,0x000000cc,0x000000c5,0x00050039,0x0000000e,0x000000cd,0x00000011,0x000000cc, + 0x0008000c,0x0000000e,0x000000ce,0x00000001,0x0000002b,0x000000c9,0x000000cb,0x000000cd, + 0x000200fe,0x000000ce,0x00010038,0x00050036,0x00000022,0x00000026,0x00000000,0x00000024, + 0x00030037,0x00000023,0x00000025,0x000200f8,0x00000027,0x0004003d,0x00000022,0x000000d1, + 0x00000025,0x0006000c,0x00000022,0x000000d2,0x00000001,0x0000000a,0x000000d1,0x000200fe, + 0x000000d2,0x00010038,0x00050036,0x00000008,0x0000002b,0x00000000,0x00000028,0x00030037, + 0x0000000d,0x00000029,0x00030037,0x0000000d,0x0000002a,0x000200f8,0x0000002c,0x0004003d, + 0x00000008,0x000000d5,0x00000029,0x0004003d,0x00000008,0x000000d6,0x0000002a,0x0007000c, + 0x00000008,0x000000d7,0x00000001,0x00000025,0x000000d5,0x000000d6,0x000200fe,0x000000d7, + 0x00010038,0x00050036,0x00000008,0x0000002f,0x00000000,0x00000028,0x00030037,0x0000000d, + 0x0000002d,0x00030037,0x0000000d,0x0000002e,0x000200f8,0x00000030,0x0004003d,0x00000008, + 0x000000da,0x0000002d,0x0004003d,0x00000008,0x000000db,0x0000002e,0x0007000c,0x00000008, + 0x000000dc,0x00000001,0x00000028,0x000000da,0x000000db,0x000200fe,0x000000dc,0x00010038, + 0x00050036,0x00000008,0x00000033,0x00000000,0x00000028,0x00030037,0x0000000d,0x00000031, + 0x00030037,0x0000000d,0x00000032,0x000200f8,0x00000034,0x0004003d,0x00000008,0x000000df, + 0x00000031,0x0004003d,0x00000008,0x000000e0,0x00000032,0x0007000c,0x00000008,0x000000e1, + 0x00000001,0x0000001a,0x000000df,0x000000e0,0x000200fe,0x000000e1,0x00010038,0x00050036, + 0x0000000e,0x00000039,0x00000000,0x00000035,0x00030037,0x00000013,0x00000036,0x00030037, + 0x00000013,0x00000037,0x00030037,0x00000013,0x00000038,0x000200f8,0x0000003a,0x0004003b, + 0x00000013,0x000000e4,0x00000007,0x0004003d,0x0000000e,0x000000e5,0x00000036,0x0004007f, + 0x0000000e,0x000000e6,0x000000e5,0x0004003d,0x0000000e,0x000000e7,0x00000038,0x00050085, + 0x0000000e,0x000000e8,0x000000e6,0x000000e7,0x0004003d,0x0000000e,0x000000e9,0x00000038, + 0x00050081,0x0000000e,0x000000ea,0x000000e8,0x000000e9,0x0003003e,0x000000e4,0x000000ea, + 0x0004003d,0x0000000e,0x000000eb,0x00000036,0x0004003d,0x0000000e,0x000000ec,0x00000037, + 0x00050085,0x0000000e,0x000000ed,0x000000eb,0x000000ec,0x0004003d,0x0000000e,0x000000ee, + 0x000000e4,0x00050081,0x0000000e,0x000000ef,0x000000ed,0x000000ee,0x000200fe,0x000000ef, + 0x00010038,0x00050036,0x0000000e,0x0000003c,0x00000000,0x0000001e,0x00030037,0x00000013, + 0x0000003b,0x000200f8,0x0000003d,0x0004003b,0x00000007,0x000000f4,0x00000007,0x0004003b, + 0x0000000d,0x000000f6,0x00000007,0x0004003b,0x00000013,0x000000f9,0x00000007,0x0004003d, + 0x0000000e,0x000000f2,0x0000003b,0x0003003e,0x000000f4,0x000000f3,0x00050039,0x00000008, + 0x000000f5,0x0000000b,0x000000f4,0x0003003e,0x000000f6,0x000000f5,0x00050039,0x0000000e, + 0x000000f7,0x00000011,0x000000f6,0x00050085,0x0000000e,0x000000f8,0x000000f2,0x000000f7, + 0x0003003e,0x000000f9,0x000000f8,0x00050039,0x0000000e,0x000000fa,0x00000020,0x000000f9, + 0x000200fe,0x000000fa,0x00010038,0x00050036,0x0000000e,0x0000003f,0x00000000,0x0000001e, + 0x00030037,0x00000013,0x0000003e,0x000200f8,0x00000040,0x0004003b,0x00000013,0x000000fd, + 0x00000007,0x0004003b,0x0000000d,0x00000100,0x00000007,0x0004003b,0x0000000d,0x00000105, + 0x00000007,0x0004003b,0x00000013,0x00000108,0x00000007,0x0004003b,0x0000000d,0x0000010b, + 0x00000007,0x0004003b,0x0000000d,0x0000010e,0x00000007,0x0004003b,0x0000000d,0x00000115, + 0x00000007,0x0004003d,0x0000000e,0x000000fe,0x0000003e,0x0003003e,0x00000100,0x000000ff, + 0x00050039,0x0000000e,0x00000101,0x00000011,0x00000100,0x0007000c,0x0000000e,0x00000102, + 0x00000001,0x0000001a,0x000000fe,0x00000101,0x0003003e,0x000000fd,0x00000102,0x0004003d, + 0x0000000e,0x00000103,0x000000fd,0x0003003e,0x00000105,0x00000104,0x00050039,0x0000000e, + 0x00000106,0x00000011,0x00000105,0x00050083,0x0000000e,0x00000107,0x00000103,0x00000106, + 0x0003003e,0x00000108,0x00000107,0x00050039,0x0000000e,0x00000109,0x00000020,0x00000108, + 0x0003003e,0x0000010b,0x0000010a,0x00050039,0x0000000e,0x0000010c,0x00000011,0x0000010b, + 0x0003003e,0x0000010e,0x0000010d,0x00050039,0x0000000e,0x0000010f,0x00000011,0x0000010e, + 0x0004003d,0x0000000e,0x00000110,0x000000fd,0x00050085,0x0000000e,0x00000111,0x0000010f, + 0x00000110,0x00050083,0x0000000e,0x00000112,0x0000010c,0x00000111,0x00050088,0x0000000e, + 0x00000113,0x00000109,0x00000112,0x0003003e,0x00000115,0x00000114,0x00050039,0x0000000e, + 0x00000116,0x00000011,0x00000115,0x0007000c,0x0000000e,0x00000117,0x00000001,0x0000001a, + 0x00000113,0x00000116,0x000200fe,0x00000117,0x00010038,0x00050036,0x0000000e,0x00000042, + 0x00000000,0x0000001e,0x00030037,0x00000013,0x00000041,0x000200f8,0x00000043,0x0004003b, + 0x00000013,0x0000011a,0x00000007,0x0004003b,0x00000023,0x0000011f,0x00000007,0x0004003b, + 0x00000013,0x00000127,0x00000007,0x0004003b,0x00000013,0x00000137,0x00000007,0x0004003b, + 0x00000013,0x00000138,0x00000007,0x0004003b,0x00000013,0x00000139,0x00000007,0x0003003e, + 0x0000011a,0x0000011e,0x0003003e,0x0000011f,0x00000122,0x0004003d,0x0000000e,0x00000123, + 0x00000041,0x0004003d,0x0000000e,0x00000124,0x0000011a,0x0008004f,0x0000000e,0x00000125, + 0x00000124,0x00000124,0x00000000,0x00000000,0x00000000,0x00050083,0x0000000e,0x00000126, + 0x00000123,0x00000125,0x0003003e,0x00000127,0x00000126,0x00050039,0x0000000e,0x00000128, + 0x0000003c,0x00000127,0x0004003d,0x0000000e,0x00000129,0x00000041,0x0004003d,0x0000000e, + 0x0000012a,0x0000011a,0x0008004f,0x0000000e,0x0000012b,0x0000012a,0x0000012a,0x00000001, + 0x00000001,0x00000001,0x00050085,0x0000000e,0x0000012c,0x00000129,0x0000012b,0x0004003d, + 0x0000000e,0x0000012d,0x00000041,0x0004003d,0x00000022,0x0000012e,0x0000011f,0x0008004f, + 0x0000000e,0x0000012f,0x0000012e,0x0000012e,0x00000000,0x00000000,0x00000000,0x00050085, + 0x0000000e,0x00000130,0x0000012d,0x0000012f,0x0004003d,0x00000022,0x00000131,0x0000011f, + 0x0008004f,0x0000000e,0x00000132,0x00000131,0x00000131,0x00000001,0x00000001,0x00000001, + 0x00050081,0x0000000e,0x00000133,0x00000130,0x00000132,0x0004003d,0x0000000e,0x00000134, + 0x0000011a,0x0008004f,0x0000000e,0x00000135,0x00000134,0x00000134,0x00000002,0x00000002, + 0x00000002,0x0007000c,0x0000000e,0x00000136,0x00000001,0x0000001a,0x00000133,0x00000135, + 0x0003003e,0x00000137,0x00000128,0x0003003e,0x00000138,0x0000012c,0x0003003e,0x00000139, + 0x00000136,0x00070039,0x0000000e,0x0000013a,0x00000039,0x00000137,0x00000138,0x00000139, + 0x000200fe,0x0000013a,0x00010038,0x00050036,0x00000045,0x00000047,0x00000000,0x00000046, + 0x000200f8,0x00000048,0x00050041,0x00000141,0x00000142,0x0000013f,0x00000140,0x0004003d, + 0x00000045,0x00000143,0x00000142,0x000200fe,0x00000143,0x00010038,0x00050036,0x00000049, + 0x0000004b,0x00000000,0x0000004a,0x000200f8,0x0000004c,0x00050041,0x00000147,0x00000148, + 0x0000013f,0x00000146,0x0004003d,0x00000044,0x00000149,0x00000148,0x000500aa,0x00000049, + 0x0000014a,0x00000149,0x00000140,0x000200fe,0x0000014a,0x00010038,0x00050036,0x00000044, + 0x0000004e,0x00000000,0x0000004d,0x000200f8,0x0000004f,0x00050041,0x00000147,0x0000014e, + 0x0000013f,0x0000014d,0x0004003d,0x00000044,0x0000014f,0x0000014e,0x000200fe,0x0000014f, + 0x00010038,0x00050036,0x00000006,0x00000051,0x00000000,0x00000050,0x000200f8,0x00000052, + 0x00050041,0x00000153,0x00000154,0x0000013f,0x00000152,0x0004003d,0x00000006,0x00000155, + 0x00000154,0x000200fe,0x00000155,0x00010038,0x00050036,0x0000000e,0x00000054,0x00000000, + 0x00000053,0x000200f8,0x00000055,0x00050041,0x00000159,0x0000015a,0x0000013f,0x00000158, + 0x0004003d,0x0000000e,0x0000015b,0x0000015a,0x000200fe,0x0000015b,0x00010038,0x00050036, + 0x00000006,0x00000056,0x00000000,0x00000050,0x000200f8,0x00000057,0x00050041,0x00000153, + 0x0000015f,0x0000013f,0x0000015e,0x0004003d,0x00000006,0x00000160,0x0000015f,0x000200fe, + 0x00000160,0x00010038,0x00050036,0x00000008,0x00000059,0x00000000,0x00000058,0x000200f8, + 0x0000005a,0x00060041,0x00000165,0x00000166,0x0000013f,0x00000163,0x00000164,0x0004003d, + 0x00000008,0x00000167,0x00000166,0x000200fe,0x00000167,0x00010038,0x00050036,0x00000008, + 0x0000005b,0x00000000,0x00000058,0x000200f8,0x0000005c,0x00060041,0x00000165,0x0000016b, + 0x0000013f,0x00000163,0x0000016a,0x0004003d,0x00000008,0x0000016c,0x0000016b,0x000200fe, + 0x0000016c,0x00010038,0x00050036,0x0000000e,0x00000060,0x00000000,0x0000005e,0x00030037, + 0x0000005d,0x0000005f,0x000200f8,0x00000061,0x0004003d,0x0000016f,0x00000172,0x00000171, + 0x0004003d,0x00000045,0x00000173,0x0000005f,0x0007005f,0x00000067,0x00000175,0x00000172, + 0x00000173,0x00000002,0x00000174,0x0008004f,0x0000000e,0x00000176,0x00000175,0x00000175, + 0x00000000,0x00000001,0x00000002,0x000200fe,0x00000176,0x00010038,0x00050036,0x00000049, + 0x00000062,0x00000000,0x0000004a,0x000200f8,0x00000063,0x0004003d,0x00000179,0x0000017c, + 0x0000017b,0x0007005f,0x0000017e,0x0000017f,0x0000017c,0x0000017d,0x00000002,0x00000174, + 0x00050051,0x00000006,0x00000180,0x0000017f,0x00000000,0x000500c7,0x00000006,0x00000182, + 0x00000180,0x00000181,0x000500ab,0x00000049,0x00000183,0x00000182,0x00000164,0x000200fe, + 0x00000183,0x00010038,0x00050036,0x00000067,0x0000006b,0x00000000,0x00000068,0x00030037, + 0x00000064,0x00000069,0x00030037,0x00000066,0x0000006a,0x000200f8,0x0000006c,0x0004003d, + 0x0000016f,0x00000187,0x00000186,0x0004003d,0x00000065,0x00000188,0x0000006a,0x0004007c, + 0x00000045,0x00000189,0x00000188,0x0004003d,0x00000044,0x0000018a,0x00000069,0x0007005f, + 0x00000067,0x0000018b,0x00000187,0x00000189,0x00000002,0x0000018a,0x000200fe,0x0000018b, + 0x00010038,0x00050036,0x00000067,0x0000006f,0x00000000,0x0000006d,0x00030037,0x0000005d, + 0x0000006e,0x000200f8,0x00000070,0x0004003d,0x0000016f,0x0000018f,0x0000018e,0x0004003d, + 0x00000045,0x00000190,0x0000006e,0x0007005f,0x00000067,0x00000191,0x0000018f,0x00000190, + 0x00000002,0x00000174,0x000200fe,0x00000191,0x00010038,0x00050036,0x00000067,0x00000072, + 0x00000000,0x0000006d,0x00030037,0x0000005d,0x00000071,0x000200f8,0x00000073,0x0004003d, + 0x00000194,0x00000197,0x00000196,0x0004003d,0x00000045,0x00000198,0x00000071,0x00050062, + 0x00000067,0x00000199,0x00000197,0x00000198,0x000200fe,0x00000199,0x00010038,0x00050036, + 0x00000002,0x00000078,0x00000000,0x00000075,0x00030037,0x0000005d,0x00000076,0x00030037, + 0x00000074,0x00000077,0x000200f8,0x00000079,0x0004003d,0x00000194,0x0000019c,0x00000196, + 0x0004003d,0x00000045,0x0000019d,0x00000076,0x0004003d,0x00000067,0x0000019e,0x00000077, + 0x00040063,0x0000019c,0x0000019d,0x0000019e,0x000100fd,0x00010038,0x00050036,0x0000000e, + 0x0000007e,0x00000000,0x0000007a,0x00030037,0x00000013,0x0000007b,0x00030037,0x0000000d, + 0x0000007c,0x00030037,0x0000000d,0x0000007d,0x000200f8,0x0000007f,0x0004003b,0x00000013, + 0x0000019f,0x00000007,0x0004003b,0x0000000d,0x000001a4,0x00000007,0x0004003b,0x0000000d, + 0x000001ac,0x00000007,0x0004003d,0x0000000e,0x000001a0,0x0000007b,0x0004003d,0x00000008, + 0x000001a1,0x0000007c,0x00050088,0x00000008,0x000001a3,0x000001a1,0x000001a2,0x0003003e, + 0x000001a4,0x000001a3,0x00050039,0x0000000e,0x000001a5,0x00000011,0x000001a4,0x00050083, + 0x0000000e,0x000001a6,0x000001a0,0x000001a5,0x0003003e,0x0000019f,0x000001a6,0x0004003d, + 0x0000000e,0x000001a7,0x0000019f,0x0004003d,0x00000008,0x000001a8,0x0000007d,0x0004003d, + 0x00000008,0x000001a9,0x0000007c,0x00050083,0x00000008,0x000001aa,0x000001a8,0x000001a9, + 0x00050088,0x00000008,0x000001ab,0x000001aa,0x000001a2,0x0003003e,0x000001ac,0x000001ab, + 0x00050039,0x0000000e,0x000001ad,0x00000011,0x000001ac,0x00050088,0x0000000e,0x000001ae, + 0x000001a7,0x000001ad,0x000200fe,0x000001ae,0x00010038,0x00050036,0x0000000e,0x00000081, + 0x00000000,0x0000001e,0x00030037,0x00000013,0x00000080,0x000200f8,0x00000082,0x0004003b, + 0x00000013,0x000001b6,0x00000007,0x0004003b,0x00000013,0x000001b7,0x00000007,0x0004003b, + 0x00000013,0x000001bb,0x00000007,0x0004003b,0x00000013,0x000001c5,0x00000007,0x0004003b, + 0x0000000d,0x000001c7,0x00000007,0x0004003b,0x0000000d,0x000001c8,0x00000007,0x00040039, + 0x00000006,0x000001b1,0x00000056,0x000300f7,0x000001b5,0x00000000,0x000900fb,0x000001b1, + 0x000001b5,0x00000000,0x000001b2,0x00000001,0x000001b3,0x00000002,0x000001b4,0x000200f8, + 0x000001b2,0x0004003d,0x0000000e,0x000001b8,0x00000080,0x0003003e,0x000001b7,0x000001b8, + 0x00050039,0x0000000e,0x000001b9,0x00000042,0x000001b7,0x0003003e,0x000001b6,0x000001b9, + 0x000200f9,0x000001b5,0x000200f8,0x000001b3,0x0004003d,0x0000000e,0x000001bc,0x00000080, + 0x0003003e,0x000001bb,0x000001bc,0x00050039,0x0000000e,0x000001bd,0x0000003f,0x000001bb, + 0x00040039,0x00000008,0x000001bf,0x0000005b,0x00050088,0x00000008,0x000001c0,0x000001be, + 0x000001bf,0x0005008e,0x0000000e,0x000001c1,0x000001bd,0x000001c0,0x0003003e,0x000001b6, + 0x000001c1,0x000200f9,0x000001b5,0x000200f8,0x000001b4,0x00040039,0x00000008,0x000001c3, + 0x00000059,0x00040039,0x00000008,0x000001c4,0x0000005b,0x0004003d,0x0000000e,0x000001c6, + 0x00000080,0x0003003e,0x000001c5,0x000001c6,0x0003003e,0x000001c7,0x000001c3,0x0003003e, + 0x000001c8,0x000001c4,0x00070039,0x0000000e,0x000001c9,0x0000007e,0x000001c5,0x000001c7, + 0x000001c8,0x0003003e,0x000001b6,0x000001c9,0x000200f9,0x000001b5,0x000200f8,0x000001b5, + 0x0004003d,0x0000000e,0x000001cc,0x000001b6,0x000200fe,0x000001cc,0x00010038,0x00050036, + 0x00000086,0x0000008a,0x00000000,0x00000087,0x00030037,0x00000023,0x00000088,0x00030037, + 0x0000005d,0x00000089,0x000200f8,0x0000008b,0x0004003b,0x00000023,0x000001cf,0x00000007, + 0x0004003b,0x000001d7,0x000001d8,0x00000007,0x0004003b,0x00000023,0x000001de,0x00000007, + 0x0004003b,0x00000023,0x000001df,0x00000007,0x0004003d,0x00000022,0x000001d0,0x00000088, + 0x0004003d,0x00000045,0x000001d1,0x00000089,0x0004006f,0x00000022,0x000001d2,0x000001d1, + 0x00050085,0x00000022,0x000001d3,0x000001d0,0x000001d2,0x00050083,0x00000022,0x000001d6, + 0x000001d3,0x000001d5,0x0003003e,0x000001cf,0x000001d6,0x0004003d,0x00000022,0x000001da, + 0x000001cf,0x0006000c,0x00000022,0x000001db,0x00000001,0x00000008,0x000001da,0x0004006e, + 0x00000045,0x000001dc,0x000001db,0x00050041,0x0000005d,0x000001dd,0x000001d8,0x000001d9, + 0x0003003e,0x000001dd,0x000001dc,0x0004003d,0x00000022,0x000001e0,0x000001cf,0x0003003e, + 0x000001df,0x000001e0,0x00050039,0x00000022,0x000001e1,0x00000026,0x000001df,0x0003003e, + 0x000001de,0x000001e1,0x00060041,0x0000005d,0x000001e3,0x000001d8,0x00000174,0x00000174, + 0x0003003e,0x000001e3,0x000001e2,0x00060041,0x0000005d,0x000001e4,0x000001d8,0x00000174, + 0x00000140,0x0003003e,0x000001e4,0x0000017d,0x00060041,0x0000005d,0x000001e6,0x000001d8, + 0x00000174,0x000001d9,0x0003003e,0x000001e6,0x000001e5,0x00060041,0x0000005d,0x000001e9, + 0x000001d8,0x00000174,0x000001e7,0x0003003e,0x000001e9,0x000001e8,0x00050041,0x0000000d, + 0x000001ea,0x000001de,0x00000164,0x0004003d,0x00000008,0x000001eb,0x000001ea,0x00050083, + 0x00000008,0x000001ec,0x000000c5,0x000001eb,0x00050041,0x0000000d,0x000001ed,0x000001de, + 0x0000016a,0x0004003d,0x00000008,0x000001ee,0x000001ed,0x00050083,0x00000008,0x000001ef, + 0x000000c5,0x000001ee,0x00050085,0x00000008,0x000001f0,0x000001ec,0x000001ef,0x00060041, + 0x0000000d,0x000001f1,0x000001d8,0x00000140,0x00000174,0x0003003e,0x000001f1,0x000001f0, + 0x00050041,0x0000000d,0x000001f2,0x000001de,0x00000164,0x0004003d,0x00000008,0x000001f3, + 0x000001f2,0x00050041,0x0000000d,0x000001f4,0x000001de,0x0000016a,0x0004003d,0x00000008, + 0x000001f5,0x000001f4,0x00050083,0x00000008,0x000001f6,0x000000c5,0x000001f5,0x00050085, + 0x00000008,0x000001f7,0x000001f3,0x000001f6,0x00060041,0x0000000d,0x000001f8,0x000001d8, + 0x00000140,0x00000140,0x0003003e,0x000001f8,0x000001f7,0x00050041,0x0000000d,0x000001f9, + 0x000001de,0x00000164,0x0004003d,0x00000008,0x000001fa,0x000001f9,0x00050083,0x00000008, + 0x000001fb,0x000000c5,0x000001fa,0x00050041,0x0000000d,0x000001fc,0x000001de,0x0000016a, + 0x0004003d,0x00000008,0x000001fd,0x000001fc,0x00050085,0x00000008,0x000001fe,0x000001fb, + 0x000001fd,0x00060041,0x0000000d,0x000001ff,0x000001d8,0x00000140,0x000001d9,0x0003003e, + 0x000001ff,0x000001fe,0x00050041,0x0000000d,0x00000200,0x000001de,0x00000164,0x0004003d, + 0x00000008,0x00000201,0x00000200,0x00050041,0x0000000d,0x00000202,0x000001de,0x0000016a, + 0x0004003d,0x00000008,0x00000203,0x00000202,0x00050085,0x00000008,0x00000204,0x00000201, + 0x00000203,0x00060041,0x0000000d,0x00000205,0x000001d8,0x00000140,0x000001e7,0x0003003e, + 0x00000205,0x00000204,0x0004003d,0x00000086,0x00000206,0x000001d8,0x000200fe,0x00000206, + 0x00010038,0x00050036,0x00000049,0x0000008f,0x00000000,0x0000008c,0x00030037,0x0000005d, + 0x0000008d,0x00030037,0x0000005d,0x0000008e,0x000200f8,0x00000090,0x0004003d,0x00000045, + 0x00000209,0x0000008d,0x0004007c,0x00000065,0x0000020a,0x00000209,0x0004003d,0x00000045, + 0x0000020b,0x0000008e,0x0004007c,0x00000065,0x0000020c,0x0000020b,0x000500b0,0x0000020d, + 0x0000020e,0x0000020a,0x0000020c,0x0004009b,0x00000049,0x0000020f,0x0000020e,0x000200fe, + 0x0000020f,0x00010038,0x00050036,0x00000008,0x00000094,0x00000000,0x00000091,0x00030037, + 0x00000008,0x00000092,0x00030037,0x00000008,0x00000093,0x000200f8,0x00000095,0x0004003b, + 0x0000000d,0x00000212,0x00000007,0x0004003b,0x0000000d,0x00000213,0x00000007,0x0004003b, + 0x0000000d,0x00000214,0x00000007,0x0004003b,0x0000000d,0x00000218,0x00000007,0x0004003b, + 0x0000000d,0x0000021b,0x00000007,0x0004003b,0x0000000d,0x0000021c,0x00000007,0x0003003e, + 0x00000213,0x00000092,0x0003003e,0x00000214,0x00000093,0x00060039,0x00000008,0x00000215, + 0x0000002f,0x00000213,0x00000214,0x0003003e,0x00000212,0x00000215,0x0004003d,0x00000008, + 0x00000216,0x00000212,0x000500b7,0x00000049,0x00000217,0x00000216,0x000000c4,0x000300f7, + 0x0000021a,0x00000000,0x000400fa,0x00000217,0x00000219,0x00000220,0x000200f8,0x00000219, + 0x0003003e,0x0000021b,0x00000092,0x0003003e,0x0000021c,0x00000093,0x00060039,0x00000008, + 0x0000021d,0x0000002b,0x0000021b,0x0000021c,0x0004003d,0x00000008,0x0000021e,0x00000212, + 0x00050088,0x00000008,0x0000021f,0x0000021d,0x0000021e,0x0003003e,0x00000218,0x0000021f, + 0x000200f9,0x0000021a,0x000200f8,0x00000220,0x0003003e,0x00000218,0x000000c4,0x000200f9, + 0x0000021a,0x000200f8,0x0000021a,0x0004003d,0x00000008,0x00000221,0x00000218,0x000200fe, + 0x00000221,0x00010038,0x00050036,0x00000008,0x00000099,0x00000000,0x00000096,0x00030037, + 0x00000013,0x00000097,0x00030037,0x00000013,0x00000098,0x000200f8,0x0000009a,0x0004003b, + 0x00000013,0x00000224,0x00000007,0x0004003b,0x0000000d,0x0000022d,0x00000007,0x0004003b, + 0x0000000d,0x00000236,0x00000007,0x0004003b,0x0000000d,0x00000240,0x00000007,0x0004003b, + 0x00000013,0x00000243,0x00000007,0x00050041,0x0000000d,0x00000225,0x00000097,0x00000164, + 0x0004003d,0x00000008,0x00000226,0x00000225,0x00050041,0x0000000d,0x00000227,0x00000098, + 0x00000164,0x0004003d,0x00000008,0x00000228,0x00000227,0x00060039,0x00000008,0x00000229, + 0x00000094,0x00000226,0x00000228,0x00050083,0x00000008,0x0000022a,0x000000c5,0x00000229, + 0x00050088,0x00000008,0x0000022c,0x0000022a,0x0000022b,0x0003003e,0x0000022d,0x0000022c, + 0x00050039,0x00000008,0x0000022e,0x0000001c,0x0000022d,0x00050041,0x0000000d,0x0000022f, + 0x00000097,0x0000016a,0x0004003d,0x00000008,0x00000230,0x0000022f,0x00050041,0x0000000d, + 0x00000231,0x00000098,0x0000016a,0x0004003d,0x00000008,0x00000232,0x00000231,0x00060039, + 0x00000008,0x00000233,0x00000094,0x00000230,0x00000232,0x00050083,0x00000008,0x00000234, + 0x000000c5,0x00000233,0x00050088,0x00000008,0x00000235,0x00000234,0x0000022b,0x0003003e, + 0x00000236,0x00000235,0x00050039,0x00000008,0x00000237,0x0000001c,0x00000236,0x00050041, + 0x0000000d,0x00000239,0x00000097,0x00000238,0x0004003d,0x00000008,0x0000023a,0x00000239, + 0x00050041,0x0000000d,0x0000023b,0x00000098,0x00000238,0x0004003d,0x00000008,0x0000023c, + 0x0000023b,0x00060039,0x00000008,0x0000023d,0x00000094,0x0000023a,0x0000023c,0x00050083, + 0x00000008,0x0000023e,0x000000c5,0x0000023d,0x00050088,0x00000008,0x0000023f,0x0000023e, + 0x0000022b,0x0003003e,0x00000240,0x0000023f,0x00050039,0x00000008,0x00000241,0x0000001c, + 0x00000240,0x00060050,0x0000000e,0x00000242,0x0000022e,0x00000237,0x00000241,0x0003003e, + 0x00000243,0x00000242,0x00050039,0x0000000e,0x00000244,0x00000020,0x00000243,0x0003003e, + 0x00000224,0x00000244,0x00050041,0x0000000d,0x00000245,0x00000224,0x00000164,0x0004003d, + 0x00000008,0x00000246,0x00000245,0x00050041,0x0000000d,0x00000247,0x00000224,0x0000016a, + 0x0004003d,0x00000008,0x00000248,0x00000247,0x00050041,0x0000000d,0x00000249,0x00000224, + 0x00000238,0x0004003d,0x00000008,0x0000024a,0x00000249,0x0007000c,0x00000008,0x0000024b, + 0x00000001,0x00000028,0x00000248,0x0000024a,0x0007000c,0x00000008,0x0000024c,0x00000001, + 0x00000028,0x00000246,0x0000024b,0x000200fe,0x0000024c,0x00010038,0x00050036,0x00000067, + 0x0000009f,0x00000000,0x0000009b,0x00030037,0x00000023,0x0000009c,0x00030037,0x00000044, + 0x0000009d,0x00030037,0x00000045,0x0000009e,0x000200f8,0x000000a0,0x0004003b,0x000001d7, + 0x0000024f,0x00000007,0x0004003b,0x00000023,0x00000250,0x00000007,0x0004003b,0x0000005d, + 0x00000252,0x00000007,0x0004003b,0x00000074,0x00000254,0x00000007,0x0004003b,0x00000064, + 0x00000256,0x00000007,0x0004003b,0x0000005d,0x0000025f,0x00000007,0x0004003b,0x0000005d, + 0x00000263,0x00000007,0x0004003b,0x0000005d,0x00000268,0x00000007,0x0004003b,0x0000005d, + 0x0000026a,0x00000007,0x0004003b,0x00000074,0x0000026e,0x00000007,0x0004003b,0x00000064, + 0x00000271,0x00000007,0x0004003b,0x00000066,0x00000272,0x00000007,0x0004003b,0x0000000d, + 0x00000274,0x00000007,0x0004003d,0x00000022,0x00000251,0x0000009c,0x0003003e,0x00000250, + 0x00000251,0x0003003e,0x00000252,0x0000009e,0x00060039,0x00000086,0x00000253,0x0000008a, + 0x00000250,0x00000252,0x0003003e,0x0000024f,0x00000253,0x0003003e,0x00000254,0x00000255, + 0x0003003e,0x00000256,0x00000174,0x000200f9,0x00000257,0x000200f8,0x00000257,0x000400f6, + 0x00000259,0x0000025a,0x00000000,0x000200f9,0x0000025b,0x000200f8,0x0000025b,0x0004003d, + 0x00000044,0x0000025c,0x00000256,0x000500b1,0x00000049,0x0000025e,0x0000025c,0x0000025d, + 0x000400fa,0x0000025e,0x00000258,0x00000259,0x000200f8,0x00000258,0x0004003d,0x00000044, + 0x00000260,0x00000256,0x00060041,0x0000005d,0x00000261,0x0000024f,0x00000174,0x00000260, + 0x0004003d,0x00000045,0x00000262,0x00000261,0x0003003e,0x0000025f,0x00000262,0x00050041, + 0x0000005d,0x00000264,0x0000024f,0x000001d9,0x0004003d,0x00000045,0x00000265,0x00000264, + 0x0004003d,0x00000045,0x00000266,0x0000025f,0x00050080,0x00000045,0x00000267,0x00000265, + 0x00000266,0x0003003e,0x00000263,0x00000267,0x0004003d,0x00000045,0x00000269,0x00000263, + 0x0003003e,0x00000268,0x00000269,0x0003003e,0x0000026a,0x0000009e,0x00060039,0x00000049, + 0x0000026b,0x0000008f,0x00000268,0x0000026a,0x000300f7,0x0000026d,0x00000000,0x000400fa, + 0x0000026b,0x0000026c,0x0000026d,0x000200f8,0x0000026c,0x0004003d,0x00000045,0x0000026f, + 0x00000263,0x0004007c,0x00000065,0x00000270,0x0000026f,0x0003003e,0x00000271,0x0000009d, + 0x0003003e,0x00000272,0x00000270,0x00060039,0x00000067,0x00000273,0x0000006b,0x00000271, + 0x00000272,0x0003003e,0x0000026e,0x00000273,0x0004003d,0x00000044,0x00000275,0x00000256, + 0x00060041,0x0000000d,0x00000276,0x0000024f,0x00000140,0x00000275,0x0004003d,0x00000008, + 0x00000277,0x00000276,0x00050041,0x0000000d,0x00000279,0x0000026e,0x00000278,0x0004003d, + 0x00000008,0x0000027a,0x00000279,0x000500ba,0x00000049,0x0000027b,0x0000027a,0x000000c4, + 0x000600a9,0x00000008,0x0000027c,0x0000027b,0x000000c5,0x000000c4,0x00050085,0x00000008, + 0x0000027d,0x00000277,0x0000027c,0x0003003e,0x00000274,0x0000027d,0x0004003d,0x00000067, + 0x0000027e,0x0000026e,0x0008004f,0x0000000e,0x0000027f,0x0000027e,0x0000027e,0x00000000, + 0x00000001,0x00000002,0x0004003d,0x00000008,0x00000280,0x00000274,0x0005008e,0x0000000e, + 0x00000281,0x0000027f,0x00000280,0x0004003d,0x00000008,0x00000282,0x00000274,0x00050051, + 0x00000008,0x00000283,0x00000281,0x00000000,0x00050051,0x00000008,0x00000284,0x00000281, + 0x00000001,0x00050051,0x00000008,0x00000285,0x00000281,0x00000002,0x00070050,0x00000067, + 0x00000286,0x00000283,0x00000284,0x00000285,0x00000282,0x0004003d,0x00000067,0x00000287, + 0x00000254,0x00050081,0x00000067,0x00000288,0x00000287,0x00000286,0x0003003e,0x00000254, + 0x00000288,0x000200f9,0x0000026d,0x000200f8,0x0000026d,0x000200f9,0x0000025a,0x000200f8, + 0x0000025a,0x0004003d,0x00000044,0x00000289,0x00000256,0x00050080,0x00000044,0x0000028a, + 0x00000289,0x00000140,0x0003003e,0x00000256,0x0000028a,0x000200f9,0x00000257,0x000200f8, + 0x00000259,0x0004003d,0x00000067,0x0000028b,0x00000254,0x000200fe,0x0000028b,0x00010038, + 0x00050036,0x0000000e,0x000000a2,0x00000000,0x0000005e,0x00030037,0x0000005d,0x000000a1, + 0x000200f8,0x000000a3,0x0004003b,0x00000023,0x0000028e,0x00000007,0x0004003b,0x00000074, + 0x00000296,0x00000007,0x0004003b,0x0000000d,0x00000297,0x00000007,0x0004003b,0x0000005d, + 0x00000298,0x00000007,0x0004003b,0x00000064,0x0000029a,0x00000007,0x0004003b,0x00000074, + 0x000002a5,0x00000007,0x0004003b,0x00000023,0x000002a8,0x00000007,0x0004003b,0x00000013, + 0x000002b0,0x00000007,0x0004003b,0x0000000d,0x000002b7,0x00000007,0x0004003b,0x0000000d, + 0x000002be,0x00000007,0x0004003b,0x0000000d,0x000002bf,0x00000007,0x0004003d,0x00000045, + 0x0000028f,0x000000a1,0x0004006f,0x00000022,0x00000290,0x0000028f,0x00050050,0x00000022, + 0x00000291,0x000001d4,0x000001d4,0x00050081,0x00000022,0x00000292,0x00000290,0x00000291, + 0x00040039,0x00000045,0x00000293,0x00000047,0x0004006f,0x00000022,0x00000294,0x00000293, + 0x00050088,0x00000022,0x00000295,0x00000292,0x00000294,0x0003003e,0x0000028e,0x00000295, + 0x0003003e,0x00000296,0x00000255,0x0003003e,0x00000297,0x000000c4,0x00040039,0x00000045, + 0x00000299,0x00000047,0x0003003e,0x00000298,0x00000299,0x0003003e,0x0000029a,0x00000174, + 0x000200f9,0x0000029b,0x000200f8,0x0000029b,0x000400f6,0x0000029d,0x0000029e,0x00000000, + 0x000200f9,0x0000029f,0x000200f8,0x0000029f,0x0004003d,0x00000044,0x000002a0,0x0000029a, + 0x000500b1,0x00000049,0x000002a1,0x000002a0,0x0000014d,0x000400fa,0x000002a1,0x0000029c, + 0x0000029d,0x000200f8,0x0000029c,0x0004003d,0x00000045,0x000002a2,0x00000298,0x00050050, + 0x00000045,0x000002a3,0x000001d9,0x000001d9,0x00050087,0x00000045,0x000002a4,0x000002a2, + 0x000002a3,0x0003003e,0x00000298,0x000002a4,0x0004003d,0x00000044,0x000002a6,0x0000029a, + 0x0004003d,0x00000045,0x000002a7,0x00000298,0x0004003d,0x00000022,0x000002a9,0x0000028e, + 0x0003003e,0x000002a8,0x000002a9,0x00070039,0x00000067,0x000002aa,0x0000009f,0x000002a8, + 0x000002a6,0x000002a7,0x0003003e,0x000002a5,0x000002aa,0x00050041,0x0000000d,0x000002ab, + 0x000002a5,0x00000278,0x0004003d,0x00000008,0x000002ac,0x000002ab,0x000500ba,0x00000049, + 0x000002ad,0x000002ac,0x000000c4,0x000300f7,0x000002af,0x00000000,0x000400fa,0x000002ad, + 0x000002ae,0x000002af,0x000200f8,0x000002ae,0x0004003d,0x00000067,0x000002b1,0x000002a5, + 0x0008004f,0x0000000e,0x000002b2,0x000002b1,0x000002b1,0x00000000,0x00000001,0x00000002, + 0x00050041,0x0000000d,0x000002b3,0x000002a5,0x00000278,0x0004003d,0x00000008,0x000002b4, + 0x000002b3,0x00060050,0x0000000e,0x000002b5,0x000002b4,0x000002b4,0x000002b4,0x00050088, + 0x0000000e,0x000002b6,0x000002b2,0x000002b5,0x0003003e,0x000002b0,0x000002b6,0x0004003d, + 0x00000044,0x000002b8,0x0000029a,0x0004006f,0x00000008,0x000002b9,0x000002b8,0x00050088, + 0x00000008,0x000002bb,0x000002b9,0x000002ba,0x00050083,0x00000008,0x000002bc,0x000000c5, + 0x000002bb,0x0003003e,0x000002be,0x000002bc,0x0003003e,0x000002bf,0x000002bd,0x00060039, + 0x00000008,0x000002c0,0x00000033,0x000002be,0x000002bf,0x00050041,0x0000000d,0x000002c1, + 0x000002a5,0x00000278,0x0004003d,0x00000008,0x000002c2,0x000002c1,0x00050085,0x00000008, + 0x000002c3,0x000002c0,0x000002c2,0x0003003e,0x000002b7,0x000002c3,0x0004003d,0x0000000e, + 0x000002c4,0x000002b0,0x00050051,0x00000008,0x000002c5,0x000002c4,0x00000000,0x00050051, + 0x00000008,0x000002c6,0x000002c4,0x00000001,0x00050051,0x00000008,0x000002c7,0x000002c4, + 0x00000002,0x00070050,0x00000067,0x000002c8,0x000002c5,0x000002c6,0x000002c7,0x000000c5, + 0x0004003d,0x00000008,0x000002c9,0x000002b7,0x0005008e,0x00000067,0x000002ca,0x000002c8, + 0x000002c9,0x0004003d,0x00000067,0x000002cb,0x00000296,0x00050081,0x00000067,0x000002cc, + 0x000002cb,0x000002ca,0x0003003e,0x00000296,0x000002cc,0x000200f9,0x000002af,0x000200f8, + 0x000002af,0x000200f9,0x0000029e,0x000200f8,0x0000029e,0x0004003d,0x00000044,0x000002cd, + 0x0000029a,0x00050080,0x00000044,0x000002ce,0x000002cd,0x00000140,0x0003003e,0x0000029a, + 0x000002ce,0x000200f9,0x0000029b,0x000200f8,0x0000029d,0x0004003d,0x00000067,0x000002cf, + 0x00000296,0x0008004f,0x0000000e,0x000002d0,0x000002cf,0x000002cf,0x00000000,0x00000001, + 0x00000002,0x00050041,0x0000000d,0x000002d1,0x00000296,0x00000278,0x0004003d,0x00000008, + 0x000002d2,0x000002d1,0x00060050,0x0000000e,0x000002d3,0x000002d2,0x000002d2,0x000002d2, + 0x00050088,0x0000000e,0x000002d4,0x000002d0,0x000002d3,0x000200fe,0x000002d4,0x00010038, + 0x00050036,0x00000002,0x000000a9,0x00000000,0x000000a5,0x00030037,0x0000005d,0x000000a6, + 0x00030037,0x00000013,0x000000a7,0x00030037,0x000000a4,0x000000a8,0x000200f8,0x000000aa, + 0x00050041,0x00000064,0x000002d7,0x000000a6,0x00000164,0x0004003d,0x00000044,0x000002d8, + 0x000002d7,0x000500b1,0x00000049,0x000002da,0x000002d8,0x000002d9,0x000300f7,0x000002dc, + 0x00000000,0x000400fa,0x000002da,0x000002db,0x000002df,0x000200f8,0x000002db,0x00050041, + 0x0000000d,0x000002dd,0x000000a7,0x0000016a,0x0003003e,0x000002dd,0x000000c5,0x0003003e, + 0x000000a8,0x000002de,0x000200f9,0x000002dc,0x000200f8,0x000002df,0x00050041,0x00000064, + 0x000002e0,0x000000a6,0x00000164,0x0004003d,0x00000044,0x000002e1,0x000002e0,0x00040039, + 0x00000045,0x000002e2,0x00000047,0x00050051,0x00000044,0x000002e3,0x000002e2,0x00000000, + 0x00050082,0x00000044,0x000002e4,0x000002e3,0x000002d9,0x000500ad,0x00000049,0x000002e5, + 0x000002e1,0x000002e4,0x000300f7,0x000002e7,0x00000000,0x000400fa,0x000002e5,0x000002e6, + 0x000002e7,0x000200f8,0x000002e6,0x00040039,0x0000000e,0x000002e8,0x00000054,0x0004003d, + 0x0000000e,0x000002e9,0x000000a7,0x00050081,0x0000000e,0x000002ea,0x000002e9,0x000002e8, + 0x0003003e,0x000000a7,0x000002ea,0x0003003e,0x000000a8,0x000002de,0x000200f9,0x000002e7, + 0x000200f8,0x000002e7,0x000200f9,0x000002dc,0x000200f8,0x000002dc,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x000000ae,0x00000000,0x000000a5,0x00030037,0x0000005d,0x000000ab, + 0x00030037,0x00000013,0x000000ac,0x00030037,0x000000a4,0x000000ad,0x000200f8,0x000000af, + 0x00050041,0x00000064,0x000002eb,0x000000ab,0x0000016a,0x0004003d,0x00000044,0x000002ec, + 0x000002eb,0x000500b1,0x00000049,0x000002ee,0x000002ec,0x000002ed,0x000300f7,0x000002f0, + 0x00000000,0x000400fa,0x000002ee,0x000002ef,0x000002f0,0x000200f8,0x000002ef,0x00040039, + 0x00000049,0x000002f1,0x0000004b,0x000200f9,0x000002f0,0x000200f8,0x000002f0,0x000700f5, + 0x00000049,0x000002f2,0x000002ee,0x000000af,0x000002f1,0x000002ef,0x000300f7,0x000002f4, + 0x00000000,0x000400fa,0x000002f2,0x000002f3,0x000002f6,0x000200f8,0x000002f3,0x00050041, + 0x0000000d,0x000002f5,0x000000ac,0x00000164,0x0003003e,0x000002f5,0x000000c5,0x0003003e, + 0x000000ad,0x000002de,0x000200f9,0x000002f4,0x000200f8,0x000002f6,0x00050041,0x00000064, + 0x000002f7,0x000000ab,0x0000016a,0x0004003d,0x00000044,0x000002f8,0x000002f7,0x000500ad, + 0x00000049,0x000002f9,0x000002f8,0x000002ed,0x000300f7,0x000002fb,0x00000000,0x000400fa, + 0x000002f9,0x000002fa,0x000002fb,0x000200f8,0x000002fa,0x00050041,0x00000064,0x000002fc, + 0x000000ab,0x0000016a,0x0004003d,0x00000044,0x000002fd,0x000002fc,0x000500b1,0x00000049, + 0x000002ff,0x000002fd,0x000002fe,0x000200f9,0x000002fb,0x000200f8,0x000002fb,0x000700f5, + 0x00000049,0x00000300,0x000002f9,0x000002f6,0x000002ff,0x000002fa,0x000300f7,0x00000302, + 0x00000000,0x000400fa,0x00000300,0x00000301,0x00000302,0x000200f8,0x00000301,0x00040039, + 0x00000049,0x00000303,0x00000062,0x000200f9,0x00000302,0x000200f8,0x00000302,0x000700f5, + 0x00000049,0x00000304,0x00000300,0x000002fb,0x00000303,0x00000301,0x000300f7,0x00000306, + 0x00000000,0x000400fa,0x00000304,0x00000305,0x00000306,0x000200f8,0x00000305,0x00050041, + 0x0000000d,0x00000307,0x000000ac,0x00000238,0x0003003e,0x00000307,0x000000c5,0x0003003e, + 0x000000ad,0x000002de,0x000200f9,0x00000306,0x000200f8,0x00000306,0x000200f9,0x000002f4, + 0x000200f8,0x000002f4,0x000100fd,0x00010038,0x00050036,0x00000002,0x000000b2,0x00000000, + 0x000000b0,0x00030037,0x0000005d,0x000000b1,0x000200f8,0x000000b3,0x0004003b,0x000000a4, + 0x00000308,0x00000007,0x0004003b,0x00000074,0x0000030a,0x00000007,0x0004003b,0x0000005d, + 0x0000030b,0x00000007,0x0004003b,0x0000000d,0x0000030e,0x00000007,0x0004003b,0x0000005d, + 0x00000316,0x00000007,0x0004003b,0x00000013,0x0000031e,0x00000007,0x0004003b,0x00000013, + 0x00000321,0x00000007,0x0004003b,0x0000000d,0x00000322,0x00000007,0x0004003b,0x00000013, + 0x0000032f,0x00000007,0x0004003b,0x0000005d,0x00000330,0x00000007,0x0004003b,0x00000013, + 0x00000333,0x00000007,0x0004003b,0x0000005d,0x00000334,0x00000007,0x0004003b,0x0000000d, + 0x00000342,0x00000007,0x0004003b,0x00000013,0x00000343,0x00000007,0x0004003b,0x00000013, + 0x00000346,0x00000007,0x0004003b,0x00000013,0x00000349,0x00000007,0x0004003b,0x00000013, + 0x0000034a,0x00000007,0x0004003b,0x00000013,0x00000350,0x00000007,0x0004003b,0x00000013, + 0x00000353,0x00000007,0x0004003b,0x0000000d,0x00000355,0x00000007,0x0004003b,0x0000005d, + 0x00000363,0x00000007,0x0004003b,0x00000013,0x00000365,0x00000007,0x0004003b,0x000000a4, + 0x00000368,0x00000007,0x0004003b,0x0000005d,0x00000378,0x00000007,0x0004003b,0x00000013, + 0x0000037a,0x00000007,0x0004003b,0x000000a4,0x0000037d,0x00000007,0x0004003b,0x0000005d, + 0x00000391,0x00000007,0x0004003b,0x00000074,0x00000393,0x00000007,0x0003003e,0x00000308, + 0x00000309,0x0004003d,0x00000045,0x0000030c,0x000000b1,0x0003003e,0x0000030b,0x0000030c, + 0x00050039,0x00000067,0x0000030d,0x00000072,0x0000030b,0x0003003e,0x0000030a,0x0000030d, + 0x00050041,0x0000000d,0x0000030f,0x0000030a,0x00000278,0x0004003d,0x00000008,0x00000310, + 0x0000030f,0x0003003e,0x0000030e,0x00000310,0x0004003d,0x00000008,0x00000311,0x0000030e, + 0x000500ba,0x00000049,0x00000313,0x00000311,0x00000312,0x000300f7,0x00000315,0x00000000, + 0x000400fa,0x00000313,0x00000314,0x00000315,0x000200f8,0x00000314,0x0004003d,0x00000045, + 0x00000317,0x000000b1,0x0003003e,0x00000316,0x00000317,0x00050039,0x0000000e,0x00000318, + 0x000000a2,0x00000316,0x00040039,0x00000045,0x00000319,0x00000047,0x00050051,0x00000044, + 0x0000031a,0x00000319,0x00000000,0x000500ad,0x00000049,0x0000031b,0x0000031a,0x00000174, + 0x000600a9,0x00000008,0x0000031c,0x0000031b,0x000000c5,0x000000c4,0x0005008e,0x0000000e, + 0x0000031d,0x00000318,0x0000031c,0x0004003d,0x00000067,0x0000031f,0x0000030a,0x0008004f, + 0x0000000e,0x00000320,0x0000031f,0x0000031f,0x00000000,0x00000001,0x00000002,0x0003003e, + 0x0000031e,0x00000320,0x0003003e,0x00000321,0x0000031d,0x0004003d,0x00000008,0x00000323, + 0x0000030e,0x0003003e,0x00000322,0x00000323,0x00070039,0x0000000e,0x00000324,0x00000018, + 0x0000031e,0x00000321,0x00000322,0x00050041,0x0000000d,0x00000325,0x0000030a,0x00000164, + 0x00050051,0x00000008,0x00000326,0x00000324,0x00000000,0x0003003e,0x00000325,0x00000326, + 0x00050041,0x0000000d,0x00000327,0x0000030a,0x0000016a,0x00050051,0x00000008,0x00000328, + 0x00000324,0x00000001,0x0003003e,0x00000327,0x00000328,0x00050041,0x0000000d,0x00000329, + 0x0000030a,0x00000238,0x00050051,0x00000008,0x0000032a,0x00000324,0x00000002,0x0003003e, + 0x00000329,0x0000032a,0x0003003e,0x00000308,0x000002de,0x000200f9,0x00000315,0x000200f8, + 0x00000315,0x00040039,0x00000044,0x0000032b,0x0000004e,0x000500aa,0x00000049,0x0000032c, + 0x0000032b,0x00000140,0x000300f7,0x0000032e,0x00000000,0x000400fa,0x0000032c,0x0000032d, + 0x0000032e,0x000200f8,0x0000032d,0x0004003d,0x00000045,0x00000331,0x000000b1,0x0003003e, + 0x00000330,0x00000331,0x00050039,0x0000000e,0x00000332,0x00000060,0x00000330,0x0003003e, + 0x0000032f,0x00000332,0x0004003d,0x00000045,0x00000335,0x000000b1,0x0003003e,0x00000334, + 0x00000335,0x00050039,0x00000067,0x00000336,0x0000006f,0x00000334,0x0008004f,0x0000000e, + 0x00000337,0x00000336,0x00000336,0x00000000,0x00000001,0x00000002,0x0003003e,0x00000333, + 0x00000337,0x0004003d,0x0000000e,0x00000338,0x0000032f,0x0004003d,0x0000000e,0x00000339, + 0x00000333,0x00050083,0x0000000e,0x0000033a,0x00000338,0x00000339,0x0006000c,0x0000000e, + 0x0000033b,0x00000001,0x00000004,0x0000033a,0x000500ba,0x0000033d,0x0000033e,0x0000033b, + 0x0000033c,0x0004009a,0x00000049,0x0000033f,0x0000033e,0x000300f7,0x00000341,0x00000000, + 0x000400fa,0x0000033f,0x00000340,0x00000341,0x000200f8,0x00000340,0x0004003d,0x0000000e, + 0x00000344,0x0000032f,0x0003003e,0x00000343,0x00000344,0x00050039,0x0000000e,0x00000345, + 0x00000081,0x00000343,0x0004003d,0x0000000e,0x00000347,0x00000333,0x0003003e,0x00000346, + 0x00000347,0x00050039,0x0000000e,0x00000348,0x00000081,0x00000346,0x0003003e,0x00000349, + 0x00000345,0x0003003e,0x0000034a,0x00000348,0x00060039,0x00000008,0x0000034b,0x00000099, + 0x00000349,0x0000034a,0x0003003e,0x00000342,0x0000034b,0x0004003d,0x00000008,0x0000034c, + 0x00000342,0x000500ba,0x00000049,0x0000034d,0x0000034c,0x00000312,0x000300f7,0x0000034f, + 0x00000000,0x000400fa,0x0000034d,0x0000034e,0x0000034f,0x000200f8,0x0000034e,0x0004003d, + 0x00000067,0x00000351,0x0000030a,0x0008004f,0x0000000e,0x00000352,0x00000351,0x00000351, + 0x00000000,0x00000001,0x00000002,0x0003003e,0x00000350,0x00000352,0x0004003d,0x0000000e, + 0x00000354,0x00000333,0x0003003e,0x00000353,0x00000354,0x0004003d,0x00000008,0x00000356, + 0x00000342,0x0003003e,0x00000355,0x00000356,0x00070039,0x0000000e,0x00000357,0x00000018, + 0x00000350,0x00000353,0x00000355,0x00050041,0x0000000d,0x00000358,0x0000030a,0x00000164, + 0x00050051,0x00000008,0x00000359,0x00000357,0x00000000,0x0003003e,0x00000358,0x00000359, + 0x00050041,0x0000000d,0x0000035a,0x0000030a,0x0000016a,0x00050051,0x00000008,0x0000035b, + 0x00000357,0x00000001,0x0003003e,0x0000035a,0x0000035b,0x00050041,0x0000000d,0x0000035c, + 0x0000030a,0x00000238,0x00050051,0x00000008,0x0000035d,0x00000357,0x00000002,0x0003003e, + 0x0000035c,0x0000035d,0x0003003e,0x00000308,0x000002de,0x000200f9,0x0000034f,0x000200f8, + 0x0000034f,0x000200f9,0x00000341,0x000200f8,0x00000341,0x000200f9,0x0000032e,0x000200f8, + 0x0000032e,0x00040039,0x00000006,0x0000035e,0x00000051,0x000500c7,0x00000006,0x0000035f, + 0x0000035e,0x0000016a,0x000500ab,0x00000049,0x00000360,0x0000035f,0x00000164,0x000300f7, + 0x00000362,0x00000000,0x000400fa,0x00000360,0x00000361,0x00000362,0x000200f8,0x00000361, + 0x0004003d,0x00000045,0x00000364,0x000000b1,0x0003003e,0x00000363,0x00000364,0x0004003d, + 0x00000067,0x00000366,0x0000030a,0x0008004f,0x0000000e,0x00000367,0x00000366,0x00000366, + 0x00000000,0x00000001,0x00000002,0x0003003e,0x00000365,0x00000367,0x0004003d,0x00000049, + 0x00000369,0x00000308,0x0003003e,0x00000368,0x00000369,0x00070039,0x00000002,0x0000036a, + 0x000000a9,0x00000363,0x00000365,0x00000368,0x0004003d,0x0000000e,0x0000036b,0x00000365, + 0x00050041,0x0000000d,0x0000036c,0x0000030a,0x00000164,0x00050051,0x00000008,0x0000036d, + 0x0000036b,0x00000000,0x0003003e,0x0000036c,0x0000036d,0x00050041,0x0000000d,0x0000036e, + 0x0000030a,0x0000016a,0x00050051,0x00000008,0x0000036f,0x0000036b,0x00000001,0x0003003e, + 0x0000036e,0x0000036f,0x00050041,0x0000000d,0x00000370,0x0000030a,0x00000238,0x00050051, + 0x00000008,0x00000371,0x0000036b,0x00000002,0x0003003e,0x00000370,0x00000371,0x0004003d, + 0x00000049,0x00000372,0x00000368,0x0003003e,0x00000308,0x00000372,0x000200f9,0x00000362, + 0x000200f8,0x00000362,0x00040039,0x00000006,0x00000373,0x00000051,0x000500c7,0x00000006, + 0x00000374,0x00000373,0x00000238,0x000500ab,0x00000049,0x00000375,0x00000374,0x00000164, + 0x000300f7,0x00000377,0x00000000,0x000400fa,0x00000375,0x00000376,0x00000377,0x000200f8, + 0x00000376,0x0004003d,0x00000045,0x00000379,0x000000b1,0x0003003e,0x00000378,0x00000379, + 0x0004003d,0x00000067,0x0000037b,0x0000030a,0x0008004f,0x0000000e,0x0000037c,0x0000037b, + 0x0000037b,0x00000000,0x00000001,0x00000002,0x0003003e,0x0000037a,0x0000037c,0x0004003d, + 0x00000049,0x0000037e,0x00000308,0x0003003e,0x0000037d,0x0000037e,0x00070039,0x00000002, + 0x0000037f,0x000000ae,0x00000378,0x0000037a,0x0000037d,0x0004003d,0x0000000e,0x00000380, + 0x0000037a,0x00050041,0x0000000d,0x00000381,0x0000030a,0x00000164,0x00050051,0x00000008, + 0x00000382,0x00000380,0x00000000,0x0003003e,0x00000381,0x00000382,0x00050041,0x0000000d, + 0x00000383,0x0000030a,0x0000016a,0x00050051,0x00000008,0x00000384,0x00000380,0x00000001, + 0x0003003e,0x00000383,0x00000384,0x00050041,0x0000000d,0x00000385,0x0000030a,0x00000238, + 0x00050051,0x00000008,0x00000386,0x00000380,0x00000002,0x0003003e,0x00000385,0x00000386, + 0x0004003d,0x00000049,0x00000387,0x0000037d,0x0003003e,0x00000308,0x00000387,0x000200f9, + 0x00000377,0x000200f8,0x00000377,0x0004003d,0x00000049,0x00000388,0x00000308,0x000300f7, + 0x0000038a,0x00000000,0x000400fa,0x00000388,0x00000389,0x0000038a,0x000200f8,0x00000389, + 0x0004003d,0x00000067,0x0000038b,0x0000030a,0x0008004f,0x0000000e,0x0000038c,0x0000038b, + 0x0000038b,0x00000000,0x00000001,0x00000002,0x00050051,0x00000008,0x0000038d,0x0000038c, + 0x00000000,0x00050051,0x00000008,0x0000038e,0x0000038c,0x00000001,0x00050051,0x00000008, + 0x0000038f,0x0000038c,0x00000002,0x00070050,0x00000067,0x00000390,0x0000038d,0x0000038e, + 0x0000038f,0x000000c5,0x0004003d,0x00000045,0x00000392,0x000000b1,0x0003003e,0x00000391, + 0x00000392,0x0003003e,0x00000393,0x00000390,0x00060039,0x00000002,0x00000394,0x00000078, + 0x00000391,0x00000393,0x000200f9,0x0000038a,0x000200f8,0x0000038a,0x000100fd,0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_fi_inpainting_pyramid_comp_spv.h b/gpu/vk/shaders/fsr3_fi_inpainting_pyramid_comp_spv.h new file mode 100644 index 000000000..1ce0de0d1 --- /dev/null +++ b/gpu/vk/shaders/fsr3_fi_inpainting_pyramid_comp_spv.h @@ -0,0 +1,1488 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_FI_INPAINTING_PYRAMID_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x00000726,0x00000000,0x00020011,0x00000001,0x00020011, + 0x0000003d,0x00020011,0x00000044,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e, + 0x00000000,0x0003000e,0x00000000,0x00000001,0x0007000f,0x00000005,0x00000004,0x6e69616d, + 0x00000000,0x0000070d,0x00000711,0x00060010,0x00000004,0x00000011,0x00000100,0x00000001, + 0x00000001,0x00030003,0x00000002,0x000001c2,0x000b0004,0x455f4c47,0x735f5458,0x6c706d61, + 0x656c7265,0x745f7373,0x75747865,0x665f6572,0x74636e75,0x736e6f69,0x00000000,0x000b0004, + 0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d, + 0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79, + 0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45, + 0x64756c63,0x69645f65,0x74636572,0x00657669,0x00090004,0x4b5f4c47,0x735f5248,0x65646168, + 0x75735f72,0x6f726762,0x625f7075,0x63697361,0x00000000,0x00080004,0x4b5f4c47,0x735f5248, + 0x65646168,0x75735f72,0x6f726762,0x715f7075,0x00646175,0x00040005,0x00000004,0x6e69616d, + 0x00000000,0x000a0005,0x0000000c,0x42786666,0x69667469,0x45646c65,0x61727478,0x75287463, + 0x31753b31,0x3b31753b,0x00000000,0x00030005,0x00000009,0x00637273,0x00030005,0x0000000a, + 0x0066666f,0x00040005,0x0000000b,0x73746962,0x00000000,0x000a0005,0x00000011,0x42786666, + 0x69667469,0x49646c65,0x7265736e,0x73614d74,0x3175286b,0x3b31753b,0x003b3175,0x00030005, + 0x0000000e,0x00637273,0x00030005,0x0000000f,0x00736e69,0x00040005,0x00000010,0x73746962, + 0x00000000,0x00060005,0x00000017,0x53786666,0x72757461,0x28657461,0x003b3166,0x00030005, + 0x00000016,0x00000078,0x000a0005,0x0000001c,0x52786666,0x70616d65,0x57726f46,0x52657661, + 0x63756465,0x6e6f6974,0x3b317528,0x00000000,0x00030005,0x0000001b,0x00000061,0x00080005, + 0x00000021,0x65746e49,0x6c6f7072,0x6f697461,0x6365526e,0x73614274,0x00002865,0x00080005, + 0x00000023,0x65746e49,0x6c6f7072,0x6f697461,0x6365526e,0x7a695374,0x00002865,0x00060005, + 0x00000025,0x70736944,0x5379616c,0x28657a69,0x00000000,0x00050005,0x00000028,0x4d6d754e, + 0x28737069,0x00000000,0x00060005,0x0000002a,0x576d754e,0x476b726f,0x70756f72,0x00002873, + 0x00070005,0x0000002d,0x6b726f57,0x756f7247,0x66664f70,0x28746573,0x00000000,0x000b0005, + 0x00000033,0x64616f4c,0x6d617246,0x746e4965,0x6f707265,0x6974616c,0x754f6e6f,0x74757074, + 0x32697628,0x0000003b,0x00050005,0x00000032,0x49785069,0x7475706e,0x00000000,0x00070005, + 0x00000039,0x726f7453,0x756f4365,0x7265746e,0x3b316928,0x003b3175,0x00040005,0x00000037, + 0x50785069,0x0000736f,0x00040005,0x00000038,0x6e756f63,0x00726574,0x000a0005,0x0000003d, + 0x6d6f7441,0x6e496369,0x61657263,0x6f436573,0x65746e75,0x31692872,0x3b31753b,0x00000000, + 0x00040005,0x0000003b,0x50785069,0x0000736f,0x00040005,0x0000003c,0x56646c6f,0x00006c61, + 0x000a0005,0x00000042,0x6f4c5752,0x6e496461,0x6e696170,0x676e6974,0x61727950,0x2864696d, + 0x3b326976,0x003b3175,0x00040005,0x00000040,0x50785069,0x0000736f,0x00040005,0x00000041, + 0x65646e69,0x00000078,0x000b0005,0x00000049,0x726f7453,0x706e4965,0x746e6961,0x50676e69, + 0x6d617279,0x76286469,0x763b3269,0x753b3466,0x00003b31,0x00040005,0x00000046,0x50785069, + 0x0000736f,0x00050005,0x00000047,0x5674756f,0x65756c61,0x00000000,0x00040005,0x00000048, + 0x65646e69,0x00000078,0x00090005,0x0000004d,0x4c647053,0x5364616f,0x6372756f,0x616d4965, + 0x76286567,0x753b3269,0x00003b31,0x00030005,0x0000004b,0x00786574,0x00040005,0x0000004c, + 0x63696c73,0x00000065,0x00060005,0x00000051,0x4c647053,0x2864616f,0x3b326976,0x003b3175, + 0x00030005,0x0000004f,0x00786574,0x00040005,0x00000050,0x63696c73,0x00000065,0x00080005, + 0x00000058,0x53647053,0x65726f74,0x32697628,0x3466763b,0x3b31753b,0x003b3175,0x00030005, + 0x00000054,0x00786970,0x00050005,0x00000055,0x5674756f,0x65756c61,0x00000000,0x00040005, + 0x00000056,0x65646e69,0x00000078,0x00040005,0x00000057,0x63696c73,0x00000065,0x000a0005, + 0x0000005c,0x49647053,0x6572636e,0x41657361,0x696d6f74,0x756f4363,0x7265746e,0x3b317528, + 0x00000000,0x00040005,0x0000005b,0x63696c73,0x00000065,0x00080005,0x0000005e,0x47647053, + 0x74417465,0x63696d6f,0x6e756f43,0x28726574,0x00000000,0x00090005,0x00000061,0x52647053, + 0x74657365,0x6d6f7441,0x6f436369,0x65746e75,0x31752872,0x0000003b,0x00040005,0x00000060, + 0x63696c73,0x00000065,0x00090005,0x00000066,0x4c647053,0x4964616f,0x7265746e,0x6964656d, + 0x28657461,0x753b3175,0x00003b31,0x00030005,0x00000064,0x00000078,0x00030005,0x00000065, + 0x00000079,0x000a0005,0x0000006c,0x53647053,0x65726f74,0x65746e49,0x64656d72,0x65746169, + 0x3b317528,0x763b3175,0x003b3466,0x00030005,0x00000069,0x00000078,0x00030005,0x0000006a, + 0x00000079,0x00040005,0x0000006b,0x756c6176,0x00000065,0x00090005,0x00000073,0x52647053, + 0x63756465,0x76283465,0x763b3466,0x763b3466,0x763b3466,0x003b3466,0x00030005,0x0000006f, + 0x00003076,0x00030005,0x00000070,0x00003176,0x00030005,0x00000071,0x00003276,0x00030005, + 0x00000072,0x00003376,0x000a0005,0x00000075,0x53786666,0x6f576470,0x72676b72,0x5370756f, + 0x66667568,0x6142656c,0x65697272,0x00002872,0x00090005,0x0000007c,0x45647053,0x57746978, + 0x676b726f,0x70756f72,0x3b317528,0x753b3175,0x00003b31,0x00060005,0x00000079,0x576d756e, + 0x476b726f,0x70756f72,0x00000073,0x00080005,0x0000007a,0x61636f6c,0x766e496c,0x7461636f, + 0x496e6f69,0x7865646e,0x00000000,0x00040005,0x0000007b,0x63696c73,0x00000065,0x00070005, + 0x00000080,0x52647053,0x63756465,0x61755165,0x66762864,0x00003b34,0x00030005,0x0000007f, + 0x00000076,0x000b0005,0x00000089,0x52647053,0x63756465,0x616f4c65,0x76283464,0x763b3275, + 0x763b3275,0x763b3275,0x753b3275,0x00003b31,0x00030005,0x00000084,0x00003069,0x00030005, + 0x00000085,0x00003169,0x00030005,0x00000086,0x00003269,0x00030005,0x00000087,0x00003369, + 0x00040005,0x00000088,0x63696c73,0x00000065,0x00080005,0x0000008e,0x52647053,0x63756465, + 0x616f4c65,0x76283464,0x753b3275,0x00003b31,0x00040005,0x0000008c,0x65736162,0x00000000, + 0x00040005,0x0000008d,0x63696c73,0x00000065,0x000e0005,0x00000095,0x52647053,0x63756465, + 0x616f4c65,0x756f5364,0x49656372,0x6567616d,0x75762834,0x75763b32,0x75763b32,0x75763b32, + 0x31753b32,0x0000003b,0x00030005,0x00000090,0x00003069,0x00030005,0x00000091,0x00003169, + 0x00030005,0x00000092,0x00003269,0x00030005,0x00000093,0x00003369,0x00040005,0x00000094, + 0x63696c73,0x00000065,0x000b0005,0x00000099,0x52647053,0x63756465,0x616f4c65,0x756f5364, + 0x49656372,0x6567616d,0x32757628,0x3b31753b,0x00000000,0x00040005,0x00000097,0x65736162, + 0x00000000,0x00040005,0x00000098,0x63696c73,0x00000065,0x00100005,0x000000a2,0x44647053, + 0x736e776f,0x6c706d61,0x70694d65,0x5f305f73,0x6e495f31,0x6e697274,0x73636973,0x3b317528, + 0x763b3175,0x753b3275,0x31753b31,0x3b31753b,0x00000000,0x00030005,0x0000009c,0x00000078, + 0x00030005,0x0000009d,0x00000079,0x00050005,0x0000009e,0x6b726f77,0x756f7247,0x00444970, + 0x00080005,0x0000009f,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000, + 0x00030005,0x000000a0,0x0070696d,0x00040005,0x000000a1,0x63696c73,0x00000065,0x000d0005, + 0x000000aa,0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x5f305f73,0x31752831,0x3b31753b, + 0x3b327576,0x753b3175,0x31753b31,0x0000003b,0x00030005,0x000000a4,0x00000078,0x00030005, + 0x000000a5,0x00000079,0x00050005,0x000000a6,0x6b726f77,0x756f7247,0x00444970,0x00080005, + 0x000000a7,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00030005, + 0x000000a8,0x0070696d,0x00040005,0x000000a9,0x63696c73,0x00000065,0x000c0005,0x000000b2, + 0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x7528325f,0x31753b31,0x3275763b,0x3b31753b, + 0x753b3175,0x00003b31,0x00030005,0x000000ac,0x00000078,0x00030005,0x000000ad,0x00000079, + 0x00050005,0x000000ae,0x6b726f77,0x756f7247,0x00444970,0x00080005,0x000000af,0x61636f6c, + 0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00030005,0x000000b0,0x0070696d, + 0x00040005,0x000000b1,0x63696c73,0x00000065,0x000c0005,0x000000ba,0x44647053,0x736e776f, + 0x6c706d61,0x70694d65,0x7528335f,0x31753b31,0x3275763b,0x3b31753b,0x753b3175,0x00003b31, + 0x00030005,0x000000b4,0x00000078,0x00030005,0x000000b5,0x00000079,0x00050005,0x000000b6, + 0x6b726f77,0x756f7247,0x00444970,0x00080005,0x000000b7,0x61636f6c,0x766e496c,0x7461636f, + 0x496e6f69,0x7865646e,0x00000000,0x00030005,0x000000b8,0x0070696d,0x00040005,0x000000b9, + 0x63696c73,0x00000065,0x000c0005,0x000000c2,0x44647053,0x736e776f,0x6c706d61,0x70694d65, + 0x7528345f,0x31753b31,0x3275763b,0x3b31753b,0x753b3175,0x00003b31,0x00030005,0x000000bc, + 0x00000078,0x00030005,0x000000bd,0x00000079,0x00050005,0x000000be,0x6b726f77,0x756f7247, + 0x00444970,0x00080005,0x000000bf,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e, + 0x00000000,0x00030005,0x000000c0,0x0070696d,0x00040005,0x000000c1,0x63696c73,0x00000065, + 0x000b0005,0x000000c9,0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x7628355f,0x753b3275, + 0x31753b31,0x3b31753b,0x00000000,0x00050005,0x000000c5,0x6b726f77,0x756f7247,0x00444970, + 0x00080005,0x000000c6,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000, + 0x00030005,0x000000c7,0x0070696d,0x00040005,0x000000c8,0x63696c73,0x00000065,0x000b0005, + 0x000000d0,0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x5f365f73,0x31752837,0x3b31753b, + 0x753b3175,0x00003b31,0x00030005,0x000000cc,0x00000078,0x00030005,0x000000cd,0x00000079, + 0x00040005,0x000000ce,0x7370696d,0x00000000,0x00040005,0x000000cf,0x63696c73,0x00000065, + 0x000e0005,0x000000da,0x44647053,0x736e776f,0x6c706d61,0x78654e65,0x756f4674,0x31752872, + 0x3b31753b,0x3b327576,0x753b3175,0x31753b31,0x3b31753b,0x00000000,0x00030005,0x000000d3, + 0x00000078,0x00030005,0x000000d4,0x00000079,0x00050005,0x000000d5,0x6b726f77,0x756f7247, + 0x00444970,0x00080005,0x000000d6,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e, + 0x00000000,0x00040005,0x000000d7,0x65736162,0x0070694d,0x00040005,0x000000d8,0x7370696d, + 0x00000000,0x00040005,0x000000d9,0x63696c73,0x00000065,0x000a0005,0x000000e2,0x44647053, + 0x736e776f,0x6c706d61,0x75762865,0x31753b32,0x3b31753b,0x753b3175,0x00003b31,0x00050005, + 0x000000dd,0x6b726f77,0x756f7247,0x00444970,0x00080005,0x000000de,0x61636f6c,0x766e496c, + 0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00040005,0x000000df,0x7370696d,0x00000000, + 0x00060005,0x000000e0,0x576d756e,0x476b726f,0x70756f72,0x00000073,0x00040005,0x000000e1, + 0x63696c73,0x00000065,0x000b0005,0x000000eb,0x44647053,0x736e776f,0x6c706d61,0x75762865, + 0x31753b32,0x3b31753b,0x753b3175,0x75763b31,0x00003b32,0x00050005,0x000000e5,0x6b726f77, + 0x756f7247,0x00444970,0x00080005,0x000000e6,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69, + 0x7865646e,0x00000000,0x00040005,0x000000e7,0x7370696d,0x00000000,0x00060005,0x000000e8, + 0x576d756e,0x476b726f,0x70756f72,0x00000073,0x00040005,0x000000e9,0x63696c73,0x00000065, + 0x00060005,0x000000ea,0x6b726f77,0x756f7247,0x66664f70,0x00746573,0x000f0005,0x000000f2, + 0x706d6f63,0x46657475,0x656d6172,0x65746e69,0x6c6f7072,0x6f697461,0x706e496e,0x746e6961, + 0x50676e69,0x6d617279,0x76286469,0x693b3369,0x00003b31,0x00050005,0x000000f0,0x6f724769, + 0x64497075,0x00000000,0x00050005,0x000000f1,0x636f4c69,0x6e496c61,0x00786564,0x00040005, + 0x0000010c,0x61726170,0x0000006d,0x00040005,0x0000010e,0x61726170,0x0000006d,0x00040005, + 0x0000010f,0x61726170,0x0000006d,0x00040005,0x00000112,0x61726170,0x0000006d,0x00040005, + 0x00000113,0x61726170,0x0000006d,0x00040005,0x00000115,0x61726170,0x0000006d,0x00040005, + 0x00000117,0x61726170,0x0000006d,0x00040005,0x00000119,0x61726170,0x0000006d,0x00040005, + 0x0000011a,0x61726170,0x0000006d,0x00040005,0x0000011c,0x61726170,0x0000006d,0x00040005, + 0x0000011e,0x61726170,0x0000006d,0x00040005,0x0000011f,0x61726170,0x0000006d,0x00040005, + 0x00000121,0x61726170,0x0000006d,0x00040005,0x00000122,0x61726170,0x0000006d,0x00040005, + 0x00000123,0x61726170,0x0000006d,0x00040005,0x0000012a,0x49466263,0x0000745f,0x00060006, + 0x0000012a,0x00000000,0x646e6572,0x69537265,0x0000657a,0x00060006,0x0000012a,0x00000001, + 0x70736964,0x5379616c,0x00657a69,0x00070006,0x0000012a,0x00000002,0x70736964,0x5379616c, + 0x52657a69,0x00007063,0x00060006,0x0000012a,0x00000003,0x656d6163,0x654e6172,0x00007261, + 0x00060006,0x0000012a,0x00000004,0x656d6163,0x61466172,0x00000072,0x00080006,0x0000012a, + 0x00000005,0x63737075,0x72656c61,0x67726154,0x69537465,0x0000657a,0x00050006,0x0000012a, + 0x00000006,0x65646f4d,0x00000000,0x00050006,0x0000012a,0x00000007,0x65736572,0x00000074, + 0x00080006,0x0000012a,0x00000008,0x76654466,0x54656369,0x6569566f,0x70654477,0x00006874, + 0x00060006,0x0000012a,0x00000009,0x746c6564,0x6d695461,0x00000065,0x00090006,0x0000012a, + 0x0000000a,0x4c445548,0x41737365,0x63617474,0x46646568,0x6f746361,0x00000072,0x00080006, + 0x0000012a,0x0000000b,0x74736964,0x6974726f,0x69466e6f,0x53646c65,0x00657a69,0x00080006, + 0x0000012a,0x0000000c,0x6974706f,0x466c6163,0x53776f6c,0x656c6163,0x00000000,0x00090006, + 0x0000012a,0x0000000d,0x6974706f,0x466c6163,0x42776f6c,0x6b636f6c,0x657a6953,0x00000000, + 0x00070006,0x0000012a,0x0000000e,0x70736964,0x68637461,0x67616c46,0x00000073,0x00070006, + 0x0000012a,0x0000000f,0x5278616d,0x65646e65,0x7a695372,0x00000065,0x00090006,0x0000012a, + 0x00000010,0x6974706f,0x466c6163,0x48776f6c,0x52666c61,0x6f4d7365,0x00006564,0x00070006, + 0x0000012a,0x00000011,0x496d754e,0x6174736e,0x7365636e,0x00000000,0x00090006,0x0000012a, + 0x00000012,0x65746e69,0x6c6f7072,0x6f697461,0x6365526e,0x73614274,0x00000065,0x00090006, + 0x0000012a,0x00000013,0x65746e69,0x6c6f7072,0x6f697461,0x6365526e,0x7a695374,0x00000065, + 0x00070006,0x0000012a,0x00000014,0x75626564,0x72614267,0x6f6c6f43,0x00000072,0x000a0006, + 0x0000012a,0x00000015,0x6b636162,0x66667542,0x72547265,0x66736e61,0x75467265,0x6974636e, + 0x00006e6f,0x00070006,0x0000012a,0x00000016,0x4d6e696d,0x754c7861,0x616e696d,0x0065636e, + 0x00060006,0x0000012a,0x00000017,0x6e615466,0x666c6148,0x00564f46,0x00050006,0x0000012a, + 0x00000018,0x6461705f,0x00000031,0x00050006,0x0000012a,0x00000019,0x74694a66,0x00726574, + 0x00080006,0x0000012a,0x0000001a,0x746f4d66,0x566e6f69,0x6f746365,0x61635372,0x0000656c, + 0x00040005,0x0000012c,0x49466263,0x00000000,0x00080005,0x0000013d,0x6e496263,0x6e696170, + 0x676e6974,0x61727950,0x5f64696d,0x00000074,0x00050006,0x0000013d,0x00000000,0x7370696d, + 0x00000000,0x00070006,0x0000013d,0x00000001,0x576d756e,0x476b726f,0x70756f72,0x00000073, + 0x00070006,0x0000013d,0x00000002,0x6b726f77,0x756f7247,0x66664f70,0x00746573,0x00070005, + 0x0000013f,0x6e496263,0x6e696170,0x676e6974,0x61727950,0x0064696d,0x00050005,0x00000151, + 0x756f5f72,0x74757074,0x00000000,0x000a0005,0x00000158,0x6d617246,0x746e4965,0x6f707265, + 0x6974616c,0x57526e6f,0x6e756f43,0x73726574,0x0000745f,0x00050006,0x00000158,0x00000000, + 0x61746164,0x00000000,0x00050005,0x0000015a,0x635f7772,0x746e756f,0x00737265,0x00080005, + 0x00000169,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00003064,0x00080005, + 0x00000172,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00003164,0x00080005, + 0x0000017b,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00003264,0x00080005, + 0x00000184,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00003364,0x00080005, + 0x0000018e,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00003464,0x00080005, + 0x00000198,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00003564,0x00080005, + 0x000001a2,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00003664,0x00080005, + 0x000001ac,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00003764,0x00080005, + 0x000001b6,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00003864,0x00080005, + 0x000001c0,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00003964,0x00080005, + 0x000001ca,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00303164,0x00080005, + 0x000001d4,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00313164,0x00080005, + 0x000001de,0x695f7772,0x6961706e,0x6e69746e,0x79705f67,0x696d6172,0x00323164,0x00040005, + 0x00000241,0x6c6f4366,0x0000726f,0x00040005,0x00000242,0x61726170,0x0000006d,0x00040005, + 0x0000024d,0x61726170,0x0000006d,0x00040005,0x0000027c,0x61726170,0x0000006d,0x00040005, + 0x0000027e,0x61726170,0x0000006d,0x00040005,0x00000282,0x61726170,0x0000006d,0x00040005, + 0x00000284,0x61726170,0x0000006d,0x00040005,0x00000286,0x61726170,0x0000006d,0x00050005, + 0x0000028a,0x43647073,0x746e756f,0x00007265,0x00040005,0x0000028b,0x61726170,0x0000006d, + 0x00040005,0x0000028c,0x61726170,0x0000006d,0x00040005,0x00000292,0x61726170,0x0000006d, + 0x00040005,0x00000293,0x61726170,0x0000006d,0x00070005,0x00000299,0x49647073,0x7265746e, + 0x6964656d,0x52657461,0x00000000,0x00070005,0x0000029f,0x49647073,0x7265746e,0x6964656d, + 0x47657461,0x00000000,0x00070005,0x000002a4,0x49647073,0x7265746e,0x6964656d,0x42657461, + 0x00000000,0x00070005,0x000002a9,0x49647073,0x7265746e,0x6964656d,0x41657461,0x00000000, + 0x00030005,0x000002c5,0x00000077,0x00030005,0x000002cf,0x006d7573,0x00040005,0x000002fe, + 0x61726170,0x0000006d,0x00030005,0x00000308,0x00003076,0x00030005,0x0000030a,0x00003176, + 0x00030005,0x0000030d,0x00003276,0x00030005,0x00000310,0x00003376,0x00040005,0x00000313, + 0x61726170,0x0000006d,0x00040005,0x00000315,0x61726170,0x0000006d,0x00040005,0x00000317, + 0x61726170,0x0000006d,0x00040005,0x00000319,0x61726170,0x0000006d,0x00030005,0x00000320, + 0x00003076,0x00040005,0x00000323,0x61726170,0x0000006d,0x00040005,0x00000324,0x61726170, + 0x0000006d,0x00030005,0x00000327,0x00003176,0x00040005,0x0000032a,0x61726170,0x0000006d, + 0x00040005,0x0000032b,0x61726170,0x0000006d,0x00030005,0x0000032e,0x00003276,0x00040005, + 0x00000331,0x61726170,0x0000006d,0x00040005,0x00000332,0x61726170,0x0000006d,0x00030005, + 0x00000335,0x00003376,0x00040005,0x00000338,0x61726170,0x0000006d,0x00040005,0x00000339, + 0x61726170,0x0000006d,0x00040005,0x0000033c,0x61726170,0x0000006d,0x00040005,0x0000033e, + 0x61726170,0x0000006d,0x00040005,0x00000340,0x61726170,0x0000006d,0x00040005,0x00000342, + 0x61726170,0x0000006d,0x00040005,0x00000353,0x61726170,0x0000006d,0x00040005,0x00000354, + 0x61726170,0x0000006d,0x00040005,0x00000355,0x61726170,0x0000006d,0x00040005,0x00000356, + 0x61726170,0x0000006d,0x00040005,0x00000357,0x61726170,0x0000006d,0x00030005,0x0000035c, + 0x00003076,0x00040005,0x0000035f,0x61726170,0x0000006d,0x00040005,0x00000360,0x61726170, + 0x0000006d,0x00030005,0x00000363,0x00003176,0x00040005,0x00000366,0x61726170,0x0000006d, + 0x00040005,0x00000367,0x61726170,0x0000006d,0x00030005,0x0000036a,0x00003276,0x00040005, + 0x0000036d,0x61726170,0x0000006d,0x00040005,0x0000036e,0x61726170,0x0000006d,0x00030005, + 0x00000371,0x00003376,0x00040005,0x00000374,0x61726170,0x0000006d,0x00040005,0x00000375, + 0x61726170,0x0000006d,0x00040005,0x00000378,0x61726170,0x0000006d,0x00040005,0x0000037a, + 0x61726170,0x0000006d,0x00040005,0x0000037c,0x61726170,0x0000006d,0x00040005,0x0000037e, + 0x61726170,0x0000006d,0x00040005,0x0000038b,0x61726170,0x0000006d,0x00040005,0x0000038c, + 0x61726170,0x0000006d,0x00040005,0x0000038d,0x61726170,0x0000006d,0x00040005,0x0000038e, + 0x61726170,0x0000006d,0x00040005,0x0000038f,0x61726170,0x0000006d,0x00030005,0x00000394, + 0x00786574,0x00030005,0x000003a2,0x00786970,0x00030005,0x000003b0,0x00000076,0x00040005, + 0x000003b3,0x61726170,0x0000006d,0x00040005,0x000003b4,0x61726170,0x0000006d,0x00040005, + 0x000003b8,0x61726170,0x0000006d,0x00040005,0x000003ba,0x61726170,0x0000006d,0x00040005, + 0x000003bd,0x61726170,0x0000006d,0x00040005,0x000003be,0x61726170,0x0000006d,0x00040005, + 0x000003db,0x61726170,0x0000006d,0x00040005,0x000003dc,0x61726170,0x0000006d,0x00040005, + 0x000003e0,0x61726170,0x0000006d,0x00040005,0x000003e2,0x61726170,0x0000006d,0x00040005, + 0x000003e5,0x61726170,0x0000006d,0x00040005,0x000003e6,0x61726170,0x0000006d,0x00040005, + 0x00000403,0x61726170,0x0000006d,0x00040005,0x00000404,0x61726170,0x0000006d,0x00040005, + 0x00000408,0x61726170,0x0000006d,0x00040005,0x0000040a,0x61726170,0x0000006d,0x00040005, + 0x0000040d,0x61726170,0x0000006d,0x00040005,0x0000040e,0x61726170,0x0000006d,0x00040005, + 0x0000042e,0x61726170,0x0000006d,0x00040005,0x0000042f,0x61726170,0x0000006d,0x00040005, + 0x00000433,0x61726170,0x0000006d,0x00040005,0x00000435,0x61726170,0x0000006d,0x00040005, + 0x00000438,0x61726170,0x0000006d,0x00040005,0x00000439,0x61726170,0x0000006d,0x00040005, + 0x00000441,0x61726170,0x0000006d,0x00040005,0x00000446,0x61726170,0x0000006d,0x00040005, + 0x0000044b,0x61726170,0x0000006d,0x00040005,0x00000450,0x61726170,0x0000006d,0x00040005, + 0x00000466,0x61726170,0x0000006d,0x00040005,0x00000467,0x61726170,0x0000006d,0x00040005, + 0x0000046a,0x61726170,0x0000006d,0x00040005,0x0000046b,0x61726170,0x0000006d,0x00040005, + 0x00000472,0x61726170,0x0000006d,0x00040005,0x00000473,0x61726170,0x0000006d,0x00040005, + 0x00000474,0x61726170,0x0000006d,0x00040005,0x00000485,0x61726170,0x0000006d,0x00040005, + 0x00000486,0x61726170,0x0000006d,0x00040005,0x00000489,0x61726170,0x0000006d,0x00040005, + 0x0000048a,0x61726170,0x0000006d,0x00040005,0x00000492,0x61726170,0x0000006d,0x00040005, + 0x00000493,0x61726170,0x0000006d,0x00040005,0x00000494,0x61726170,0x0000006d,0x00040005, + 0x000004a5,0x61726170,0x0000006d,0x00040005,0x000004a6,0x61726170,0x0000006d,0x00040005, + 0x000004a9,0x61726170,0x0000006d,0x00040005,0x000004aa,0x61726170,0x0000006d,0x00040005, + 0x000004b2,0x61726170,0x0000006d,0x00040005,0x000004b3,0x61726170,0x0000006d,0x00040005, + 0x000004b4,0x61726170,0x0000006d,0x00040005,0x000004c6,0x61726170,0x0000006d,0x00040005, + 0x000004c7,0x61726170,0x0000006d,0x00040005,0x000004ca,0x61726170,0x0000006d,0x00040005, + 0x000004cb,0x61726170,0x0000006d,0x00040005,0x000004d4,0x61726170,0x0000006d,0x00040005, + 0x000004d5,0x61726170,0x0000006d,0x00040005,0x000004d6,0x61726170,0x0000006d,0x00040005, + 0x000004da,0x61726170,0x0000006d,0x00040005,0x000004dc,0x61726170,0x0000006d,0x00040005, + 0x000004de,0x61726170,0x0000006d,0x00040005,0x000004e0,0x61726170,0x0000006d,0x00040005, + 0x000004e2,0x61726170,0x0000006d,0x00040005,0x000004e4,0x61726170,0x0000006d,0x00030005, + 0x000004e7,0x00000076,0x00040005,0x000004e8,0x61726170,0x0000006d,0x00040005,0x000004ea, + 0x61726170,0x0000006d,0x00040005,0x000004ed,0x61726170,0x0000006d,0x00040005,0x00000501, + 0x61726170,0x0000006d,0x00040005,0x00000502,0x61726170,0x0000006d,0x00040005,0x00000504, + 0x61726170,0x0000006d,0x00040005,0x00000506,0x61726170,0x0000006d,0x00040005,0x0000050e, + 0x61726170,0x0000006d,0x00040005,0x0000050f,0x61726170,0x0000006d,0x00040005,0x00000511, + 0x61726170,0x0000006d,0x00030005,0x00000518,0x00000076,0x00040005,0x00000520,0x61726170, + 0x0000006d,0x00040005,0x00000521,0x61726170,0x0000006d,0x00040005,0x00000523,0x61726170, + 0x0000006d,0x00040005,0x00000537,0x61726170,0x0000006d,0x00040005,0x00000538,0x61726170, + 0x0000006d,0x00040005,0x0000053a,0x61726170,0x0000006d,0x00040005,0x0000053c,0x61726170, + 0x0000006d,0x00040005,0x00000546,0x61726170,0x0000006d,0x00040005,0x00000547,0x61726170, + 0x0000006d,0x00040005,0x00000548,0x61726170,0x0000006d,0x00030005,0x0000054f,0x00000076, + 0x00040005,0x00000556,0x61726170,0x0000006d,0x00040005,0x00000557,0x61726170,0x0000006d, + 0x00040005,0x00000559,0x61726170,0x0000006d,0x00040005,0x0000056d,0x61726170,0x0000006d, + 0x00040005,0x0000056e,0x61726170,0x0000006d,0x00040005,0x00000570,0x61726170,0x0000006d, + 0x00040005,0x00000572,0x61726170,0x0000006d,0x00040005,0x00000579,0x61726170,0x0000006d, + 0x00040005,0x0000057a,0x61726170,0x0000006d,0x00040005,0x0000057b,0x61726170,0x0000006d, + 0x00030005,0x00000582,0x00000076,0x00040005,0x00000583,0x61726170,0x0000006d,0x00040005, + 0x00000585,0x61726170,0x0000006d,0x00040005,0x00000587,0x61726170,0x0000006d,0x00040005, + 0x00000591,0x61726170,0x0000006d,0x00040005,0x00000592,0x61726170,0x0000006d,0x00040005, + 0x00000594,0x61726170,0x0000006d,0x00040005,0x00000596,0x61726170,0x0000006d,0x00030005, + 0x00000599,0x00786574,0x00030005,0x000005a3,0x00786970,0x00030005,0x000005ad,0x00003076, + 0x00040005,0x000005b0,0x61726170,0x0000006d,0x00040005,0x000005b1,0x61726170,0x0000006d, + 0x00040005,0x000005b4,0x61726170,0x0000006d,0x00040005,0x000005b6,0x61726170,0x0000006d, + 0x00040005,0x000005b8,0x61726170,0x0000006d,0x00040005,0x000005b9,0x61726170,0x0000006d, + 0x00030005,0x000005ce,0x00003176,0x00040005,0x000005d1,0x61726170,0x0000006d,0x00040005, + 0x000005d2,0x61726170,0x0000006d,0x00040005,0x000005d5,0x61726170,0x0000006d,0x00040005, + 0x000005d7,0x61726170,0x0000006d,0x00040005,0x000005d9,0x61726170,0x0000006d,0x00040005, + 0x000005da,0x61726170,0x0000006d,0x00030005,0x000005ef,0x00003276,0x00040005,0x000005f2, + 0x61726170,0x0000006d,0x00040005,0x000005f3,0x61726170,0x0000006d,0x00040005,0x000005f6, + 0x61726170,0x0000006d,0x00040005,0x000005f8,0x61726170,0x0000006d,0x00040005,0x000005fa, + 0x61726170,0x0000006d,0x00040005,0x000005fb,0x61726170,0x0000006d,0x00030005,0x00000610, + 0x00003376,0x00040005,0x00000613,0x61726170,0x0000006d,0x00040005,0x00000614,0x61726170, + 0x0000006d,0x00040005,0x00000617,0x61726170,0x0000006d,0x00040005,0x00000619,0x61726170, + 0x0000006d,0x00040005,0x0000061b,0x61726170,0x0000006d,0x00040005,0x0000061c,0x61726170, + 0x0000006d,0x00030005,0x00000624,0x00000076,0x00040005,0x00000625,0x61726170,0x0000006d, + 0x00040005,0x00000627,0x61726170,0x0000006d,0x00040005,0x00000629,0x61726170,0x0000006d, + 0x00040005,0x0000062b,0x61726170,0x0000006d,0x00040005,0x00000633,0x61726170,0x0000006d, + 0x00040005,0x00000634,0x61726170,0x0000006d,0x00040005,0x00000636,0x61726170,0x0000006d, + 0x00040005,0x00000637,0x61726170,0x0000006d,0x00040005,0x0000063a,0x61726170,0x0000006d, + 0x00040005,0x0000063c,0x61726170,0x0000006d,0x00040005,0x0000063e,0x61726170,0x0000006d, + 0x00040005,0x00000648,0x61726170,0x0000006d,0x00040005,0x0000064a,0x61726170,0x0000006d, + 0x00040005,0x0000064c,0x61726170,0x0000006d,0x00040005,0x0000064e,0x61726170,0x0000006d, + 0x00040005,0x00000650,0x61726170,0x0000006d,0x00040005,0x00000652,0x61726170,0x0000006d, + 0x00040005,0x0000065f,0x61726170,0x0000006d,0x00040005,0x00000661,0x61726170,0x0000006d, + 0x00040005,0x00000663,0x61726170,0x0000006d,0x00040005,0x00000665,0x61726170,0x0000006d, + 0x00040005,0x00000667,0x61726170,0x0000006d,0x00040005,0x00000668,0x61726170,0x0000006d, + 0x00040005,0x00000675,0x61726170,0x0000006d,0x00040005,0x00000677,0x61726170,0x0000006d, + 0x00040005,0x00000679,0x61726170,0x0000006d,0x00040005,0x0000067b,0x61726170,0x0000006d, + 0x00040005,0x0000067d,0x61726170,0x0000006d,0x00040005,0x0000067e,0x61726170,0x0000006d, + 0x00040005,0x0000068b,0x61726170,0x0000006d,0x00040005,0x0000068d,0x61726170,0x0000006d, + 0x00040005,0x0000068f,0x61726170,0x0000006d,0x00040005,0x00000690,0x61726170,0x0000006d, + 0x00040005,0x00000693,0x5f627573,0x00007978,0x00040005,0x00000696,0x61726170,0x0000006d, + 0x00030005,0x00000698,0x00000078,0x00030005,0x000006a1,0x00000079,0x00040005,0x000006a9, + 0x61726170,0x0000006d,0x00040005,0x000006ab,0x61726170,0x0000006d,0x00040005,0x000006ad, + 0x61726170,0x0000006d,0x00040005,0x000006af,0x61726170,0x0000006d,0x00040005,0x000006b1, + 0x61726170,0x0000006d,0x00040005,0x000006b3,0x61726170,0x0000006d,0x00040005,0x000006b6, + 0x61726170,0x0000006d,0x00040005,0x000006b8,0x61726170,0x0000006d,0x00040005,0x000006ba, + 0x61726170,0x0000006d,0x00040005,0x000006bc,0x61726170,0x0000006d,0x00040005,0x000006be, + 0x61726170,0x0000006d,0x00040005,0x000006bf,0x61726170,0x0000006d,0x00040005,0x000006c1, + 0x61726170,0x0000006d,0x00040005,0x000006c9,0x61726170,0x0000006d,0x00040005,0x000006cb, + 0x61726170,0x0000006d,0x00040005,0x000006cd,0x61726170,0x0000006d,0x00040005,0x000006d3, + 0x61726170,0x0000006d,0x00040005,0x000006d6,0x61726170,0x0000006d,0x00040005,0x000006d8, + 0x61726170,0x0000006d,0x00040005,0x000006da,0x61726170,0x0000006d,0x00040005,0x000006dc, + 0x61726170,0x0000006d,0x00040005,0x000006df,0x61726170,0x0000006d,0x00040005,0x000006e1, + 0x61726170,0x0000006d,0x00040005,0x000006e3,0x61726170,0x0000006d,0x00040005,0x000006e4, + 0x61726170,0x0000006d,0x00040005,0x000006e6,0x61726170,0x0000006d,0x00040005,0x000006e7, + 0x61726170,0x0000006d,0x00040005,0x000006e9,0x61726170,0x0000006d,0x00040005,0x000006ef, + 0x61726170,0x0000006d,0x00040005,0x000006f0,0x61726170,0x0000006d,0x00040005,0x000006f2, + 0x61726170,0x0000006d,0x00040005,0x000006f4,0x61726170,0x0000006d,0x00040005,0x000006f6, + 0x61726170,0x0000006d,0x00040005,0x00000704,0x61726170,0x0000006d,0x00040005,0x00000705, + 0x61726170,0x0000006d,0x00040005,0x00000706,0x61726170,0x0000006d,0x00040005,0x00000707, + 0x61726170,0x0000006d,0x00040005,0x00000708,0x61726170,0x0000006d,0x00040005,0x00000709, + 0x61726170,0x0000006d,0x00060005,0x0000070d,0x575f6c67,0x476b726f,0x70756f72,0x00004449, + 0x00080005,0x00000711,0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163,0x6e496e6f,0x00786564, + 0x00040005,0x00000714,0x61726170,0x0000006d,0x00040005,0x00000715,0x61726170,0x0000006d, + 0x00060005,0x0000071c,0x694c5f73,0x7261656e,0x6d616c43,0x00000070,0x00030047,0x0000012a, + 0x00000002,0x00050048,0x0000012a,0x00000000,0x00000023,0x00000000,0x00050048,0x0000012a, + 0x00000001,0x00000023,0x00000008,0x00050048,0x0000012a,0x00000002,0x00000023,0x00000010, + 0x00050048,0x0000012a,0x00000003,0x00000023,0x00000018,0x00050048,0x0000012a,0x00000004, + 0x00000023,0x0000001c,0x00050048,0x0000012a,0x00000005,0x00000023,0x00000020,0x00050048, + 0x0000012a,0x00000006,0x00000023,0x00000028,0x00050048,0x0000012a,0x00000007,0x00000023, + 0x0000002c,0x00050048,0x0000012a,0x00000008,0x00000023,0x00000030,0x00050048,0x0000012a, + 0x00000009,0x00000023,0x00000040,0x00050048,0x0000012a,0x0000000a,0x00000023,0x00000044, + 0x00050048,0x0000012a,0x0000000b,0x00000023,0x00000048,0x00050048,0x0000012a,0x0000000c, + 0x00000023,0x00000050,0x00050048,0x0000012a,0x0000000d,0x00000023,0x00000058,0x00050048, + 0x0000012a,0x0000000e,0x00000023,0x0000005c,0x00050048,0x0000012a,0x0000000f,0x00000023, + 0x00000060,0x00050048,0x0000012a,0x00000010,0x00000023,0x00000068,0x00050048,0x0000012a, + 0x00000011,0x00000023,0x0000006c,0x00050048,0x0000012a,0x00000012,0x00000023,0x00000070, + 0x00050048,0x0000012a,0x00000013,0x00000023,0x00000078,0x00050048,0x0000012a,0x00000014, + 0x00000023,0x00000080,0x00050048,0x0000012a,0x00000015,0x00000023,0x0000008c,0x00050048, + 0x0000012a,0x00000016,0x00000023,0x00000090,0x00050048,0x0000012a,0x00000017,0x00000023, + 0x00000098,0x00050048,0x0000012a,0x00000018,0x00000023,0x0000009c,0x00050048,0x0000012a, + 0x00000019,0x00000023,0x000000a0,0x00050048,0x0000012a,0x0000001a,0x00000023,0x000000a8, + 0x00040047,0x0000012c,0x00000021,0x0000000f,0x00040047,0x0000012c,0x00000022,0x00000000, + 0x00030047,0x0000013d,0x00000002,0x00050048,0x0000013d,0x00000000,0x00000023,0x00000000, + 0x00050048,0x0000013d,0x00000001,0x00000023,0x00000004,0x00050048,0x0000013d,0x00000002, + 0x00000023,0x00000008,0x00040047,0x0000013f,0x00000021,0x00000010,0x00040047,0x0000013f, + 0x00000022,0x00000000,0x00040047,0x00000151,0x00000021,0x00000000,0x00040047,0x00000151, + 0x00000022,0x00000000,0x00040047,0x00000157,0x00000006,0x00000004,0x00030047,0x00000158, + 0x00000002,0x00040048,0x00000158,0x00000000,0x00000017,0x00050048,0x00000158,0x00000000, + 0x00000023,0x00000000,0x00030047,0x0000015a,0x00000017,0x00040047,0x0000015a,0x00000021, + 0x00000001,0x00040047,0x0000015a,0x00000022,0x00000000,0x00040047,0x00000169,0x00000021, + 0x00000002,0x00040047,0x00000169,0x00000022,0x00000000,0x00040047,0x00000172,0x00000021, + 0x00000003,0x00040047,0x00000172,0x00000022,0x00000000,0x00040047,0x0000017b,0x00000021, + 0x00000004,0x00040047,0x0000017b,0x00000022,0x00000000,0x00040047,0x00000184,0x00000021, + 0x00000005,0x00040047,0x00000184,0x00000022,0x00000000,0x00040047,0x0000018e,0x00000021, + 0x00000006,0x00040047,0x0000018e,0x00000022,0x00000000,0x00030047,0x00000198,0x00000017, + 0x00040047,0x00000198,0x00000021,0x00000007,0x00040047,0x00000198,0x00000022,0x00000000, + 0x00040047,0x000001a2,0x00000021,0x00000008,0x00040047,0x000001a2,0x00000022,0x00000000, + 0x00040047,0x000001ac,0x00000021,0x00000009,0x00040047,0x000001ac,0x00000022,0x00000000, + 0x00040047,0x000001b6,0x00000021,0x0000000a,0x00040047,0x000001b6,0x00000022,0x00000000, + 0x00040047,0x000001c0,0x00000021,0x0000000b,0x00040047,0x000001c0,0x00000022,0x00000000, + 0x00040047,0x000001ca,0x00000021,0x0000000c,0x00040047,0x000001ca,0x00000022,0x00000000, + 0x00040047,0x000001d4,0x00000021,0x0000000d,0x00040047,0x000001d4,0x00000022,0x00000000, + 0x00040047,0x000001de,0x00000021,0x0000000e,0x00040047,0x000001de,0x00000022,0x00000000, + 0x00040047,0x0000070d,0x0000000b,0x0000001a,0x00040047,0x00000711,0x0000000b,0x0000001d, + 0x00040047,0x0000071c,0x00000021,0x000003e8,0x00040047,0x0000071c,0x00000022,0x00000000, + 0x00040047,0x00000725,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003, + 0x00000002,0x00040015,0x00000006,0x00000020,0x00000000,0x00040020,0x00000007,0x00000007, + 0x00000006,0x00060021,0x00000008,0x00000006,0x00000007,0x00000007,0x00000007,0x00030016, + 0x00000013,0x00000020,0x00040020,0x00000014,0x00000007,0x00000013,0x00040021,0x00000015, + 0x00000013,0x00000014,0x00040017,0x00000019,0x00000006,0x00000002,0x00040021,0x0000001a, + 0x00000019,0x00000007,0x00040015,0x0000001e,0x00000020,0x00000001,0x00040017,0x0000001f, + 0x0000001e,0x00000002,0x00030021,0x00000020,0x0000001f,0x00030021,0x00000027,0x00000006, + 0x00030021,0x0000002c,0x00000019,0x00040020,0x0000002f,0x00000007,0x0000001f,0x00040017, + 0x00000030,0x00000013,0x00000004,0x00040021,0x00000031,0x00000030,0x0000002f,0x00040020, + 0x00000035,0x00000007,0x0000001e,0x00050021,0x00000036,0x00000002,0x00000035,0x00000007, + 0x00050021,0x0000003f,0x00000030,0x0000002f,0x00000007,0x00040020,0x00000044,0x00000007, + 0x00000030,0x00060021,0x00000045,0x00000002,0x0000002f,0x00000044,0x00000007,0x00070021, + 0x00000053,0x00000002,0x0000002f,0x00000044,0x00000007,0x00000007,0x00040021,0x0000005a, + 0x00000002,0x00000007,0x00050021,0x00000063,0x00000030,0x00000007,0x00000007,0x00060021, + 0x00000068,0x00000002,0x00000007,0x00000007,0x00000044,0x00070021,0x0000006e,0x00000030, + 0x00000044,0x00000044,0x00000044,0x00000044,0x00020014,0x00000077,0x00060021,0x00000078, + 0x00000077,0x00000007,0x00000007,0x00000007,0x00040021,0x0000007e,0x00000030,0x00000044, + 0x00040020,0x00000082,0x00000007,0x00000019,0x00080021,0x00000083,0x00000030,0x00000082, + 0x00000082,0x00000082,0x00000082,0x00000007,0x00050021,0x0000008b,0x00000030,0x00000082, + 0x00000007,0x00090021,0x0000009b,0x00000002,0x00000007,0x00000007,0x00000082,0x00000007, + 0x00000007,0x00000007,0x00070021,0x000000c4,0x00000002,0x00000082,0x00000007,0x00000007, + 0x00000007,0x00070021,0x000000cb,0x00000002,0x00000007,0x00000007,0x00000007,0x00000007, + 0x000a0021,0x000000d2,0x00000002,0x00000007,0x00000007,0x00000082,0x00000007,0x00000007, + 0x00000007,0x00000007,0x00080021,0x000000dc,0x00000002,0x00000082,0x00000007,0x00000007, + 0x00000007,0x00000007,0x00090021,0x000000e4,0x00000002,0x00000082,0x00000007,0x00000007, + 0x00000007,0x00000007,0x00000082,0x00040017,0x000000ed,0x0000001e,0x00000003,0x00040020, + 0x000000ee,0x00000007,0x000000ed,0x00050021,0x000000ef,0x00000002,0x000000ee,0x00000035, + 0x0004002b,0x0000001e,0x000000fe,0x00000000,0x0004002b,0x00000013,0x00000105,0x00000000, + 0x0004002b,0x00000013,0x00000106,0x3f800000,0x0004002b,0x00000006,0x0000010a,0x00000002, + 0x0004002b,0x00000006,0x0000010b,0x00000003,0x0004002b,0x00000006,0x00000111,0x00000001, + 0x00040017,0x00000128,0x00000013,0x00000002,0x00040017,0x00000129,0x00000013,0x00000003, + 0x001d001e,0x0000012a,0x0000001f,0x0000001f,0x00000128,0x00000013,0x00000013,0x0000001f, + 0x0000001e,0x0000001e,0x00000030,0x00000013,0x0000001e,0x0000001f,0x00000128,0x0000001e, + 0x00000006,0x0000001f,0x0000001e,0x0000001e,0x0000001f,0x0000001f,0x00000129,0x00000006, + 0x00000128,0x00000013,0x0000001e,0x00000128,0x00000128,0x00040020,0x0000012b,0x00000002, + 0x0000012a,0x0004003b,0x0000012b,0x0000012c,0x00000002,0x0004002b,0x0000001e,0x0000012d, + 0x00000012,0x00040020,0x0000012e,0x00000002,0x0000001f,0x0004002b,0x0000001e,0x00000133, + 0x00000013,0x0004002b,0x0000001e,0x00000138,0x00000001,0x0005001e,0x0000013d,0x00000006, + 0x00000006,0x00000019,0x00040020,0x0000013e,0x00000002,0x0000013d,0x0004003b,0x0000013e, + 0x0000013f,0x00000002,0x00040020,0x00000140,0x00000002,0x00000006,0x0004002b,0x0000001e, + 0x00000149,0x00000002,0x00040020,0x0000014a,0x00000002,0x00000019,0x00090019,0x0000014f, + 0x00000013,0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x00040020, + 0x00000150,0x00000000,0x0000014f,0x0004003b,0x00000150,0x00000151,0x00000000,0x0003001d, + 0x00000157,0x00000006,0x0003001e,0x00000158,0x00000157,0x00040020,0x00000159,0x0000000c, + 0x00000158,0x0004003b,0x00000159,0x0000015a,0x0000000c,0x00040020,0x0000015d,0x0000000c, + 0x00000006,0x0004002b,0x00000006,0x00000161,0x00000000,0x00090019,0x00000167,0x00000013, + 0x00000001,0x00000000,0x00000000,0x00000000,0x00000002,0x00000002,0x00040020,0x00000168, + 0x00000000,0x00000167,0x0004003b,0x00000168,0x00000169,0x00000000,0x0004003b,0x00000168, + 0x00000172,0x00000000,0x0004003b,0x00000168,0x0000017b,0x00000000,0x0004003b,0x00000168, + 0x00000184,0x00000000,0x0004002b,0x00000006,0x0000018a,0x00000004,0x0004003b,0x00000168, + 0x0000018e,0x00000000,0x0004002b,0x00000006,0x00000194,0x00000005,0x0004003b,0x00000168, + 0x00000198,0x00000000,0x0004002b,0x00000006,0x0000019e,0x00000006,0x0004003b,0x00000168, + 0x000001a2,0x00000000,0x0004002b,0x00000006,0x000001a8,0x00000007,0x0004003b,0x00000168, + 0x000001ac,0x00000000,0x0004002b,0x00000006,0x000001b2,0x00000008,0x0004003b,0x00000168, + 0x000001b6,0x00000000,0x0004002b,0x00000006,0x000001bc,0x00000009,0x0004003b,0x00000168, + 0x000001c0,0x00000000,0x0004002b,0x00000006,0x000001c6,0x0000000a,0x0004003b,0x00000168, + 0x000001ca,0x00000000,0x0004002b,0x00000006,0x000001d0,0x0000000b,0x0004003b,0x00000168, + 0x000001d4,0x00000000,0x0004002b,0x00000006,0x000001da,0x0000000c,0x0004003b,0x00000168, + 0x000001de,0x00000000,0x0007002c,0x00000030,0x000001e3,0x00000105,0x00000105,0x00000105, + 0x00000105,0x00040020,0x00000289,0x00000004,0x00000006,0x0004003b,0x00000289,0x0000028a, + 0x00000004,0x0004002b,0x00000006,0x00000295,0x00000010,0x0004001c,0x00000296,0x00000013, + 0x00000295,0x0004001c,0x00000297,0x00000296,0x00000295,0x00040020,0x00000298,0x00000004, + 0x00000297,0x0004003b,0x00000298,0x00000299,0x00000004,0x00040020,0x0000029c,0x00000004, + 0x00000013,0x0004003b,0x00000298,0x0000029f,0x00000004,0x0004003b,0x00000298,0x000002a4, + 0x00000004,0x0004003b,0x00000298,0x000002a9,0x00000004,0x0004002b,0x00000006,0x000002f8, + 0x00000d48,0x0004002b,0x00000006,0x000002f9,0x00000108,0x0005002c,0x00000019,0x00000348, + 0x00000161,0x00000161,0x0005002c,0x00000019,0x0000034b,0x00000161,0x00000111,0x0005002c, + 0x00000019,0x0000034e,0x00000111,0x00000161,0x0005002c,0x00000019,0x00000351,0x00000111, + 0x00000111,0x0004002b,0x00000006,0x00000396,0x00000040,0x0004002b,0x00000006,0x000003a4, + 0x00000020,0x0004001c,0x000003ae,0x00000030,0x0000018a,0x00040020,0x000003af,0x00000007, + 0x000003ae,0x0004002b,0x0000001e,0x0000042b,0x00000003,0x0004002b,0x0000001e,0x0000069c, + 0x00000006,0x0004002b,0x0000001e,0x000006a5,0x00000007,0x00040017,0x0000070b,0x00000006, + 0x00000003,0x00040020,0x0000070c,0x00000001,0x0000070b,0x0004003b,0x0000070c,0x0000070d, + 0x00000001,0x00040020,0x00000710,0x00000001,0x00000006,0x0004003b,0x00000710,0x00000711, + 0x00000001,0x0004002b,0x00000013,0x00000717,0x387fda40,0x0004002b,0x00000013,0x00000718, + 0x477fe000,0x0004002b,0x00000013,0x00000719,0x37801002,0x0002001a,0x0000071a,0x00040020, + 0x0000071b,0x00000000,0x0000071a,0x0004003b,0x0000071b,0x0000071c,0x00000000,0x0004002b, + 0x00000013,0x0000071d,0x3a83126f,0x0004002b,0x00000013,0x0000071e,0x7f7fffff,0x0004002b, + 0x00000013,0x0000071f,0x00800000,0x0004002b,0x00000006,0x00000720,0x80000000,0x0004002b, + 0x00000006,0x00000721,0x0000001f,0x0004002b,0x00000006,0x00000722,0x000003ff,0x0004002b, + 0x00000006,0x00000723,0x00000015,0x0004002b,0x00000006,0x00000724,0x00000100,0x0006002c, + 0x0000070b,0x00000725,0x00000724,0x00000111,0x00000111,0x00050036,0x00000002,0x00000004, + 0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x000000ee,0x00000714,0x00000007, + 0x0004003b,0x00000035,0x00000715,0x00000007,0x0004003d,0x0000070b,0x0000070e,0x0000070d, + 0x0004007c,0x000000ed,0x0000070f,0x0000070e,0x0004003d,0x00000006,0x00000712,0x00000711, + 0x0004007c,0x0000001e,0x00000713,0x00000712,0x0003003e,0x00000714,0x0000070f,0x0003003e, + 0x00000715,0x00000713,0x00060039,0x00000002,0x00000716,0x000000f2,0x00000714,0x00000715, + 0x000100fd,0x00010038,0x00050036,0x00000006,0x0000000c,0x00000000,0x00000008,0x00030037, + 0x00000007,0x00000009,0x00030037,0x00000007,0x0000000a,0x00030037,0x00000007,0x0000000b, + 0x000200f8,0x0000000d,0x0004003d,0x00000006,0x000000f4,0x00000009,0x0004003d,0x00000006, + 0x000000f5,0x0000000a,0x0004007c,0x0000001e,0x000000f6,0x000000f5,0x0004003d,0x00000006, + 0x000000f7,0x0000000b,0x0004007c,0x0000001e,0x000000f8,0x000000f7,0x000600cb,0x00000006, + 0x000000f9,0x000000f4,0x000000f6,0x000000f8,0x000200fe,0x000000f9,0x00010038,0x00050036, + 0x00000006,0x00000011,0x00000000,0x00000008,0x00030037,0x00000007,0x0000000e,0x00030037, + 0x00000007,0x0000000f,0x00030037,0x00000007,0x00000010,0x000200f8,0x00000012,0x0004003d, + 0x00000006,0x000000fc,0x0000000e,0x0004003d,0x00000006,0x000000fd,0x0000000f,0x0004003d, + 0x00000006,0x000000ff,0x00000010,0x0004007c,0x0000001e,0x00000100,0x000000ff,0x000700c9, + 0x00000006,0x00000101,0x000000fc,0x000000fd,0x000000fe,0x00000100,0x000200fe,0x00000101, + 0x00010038,0x00050036,0x00000013,0x00000017,0x00000000,0x00000015,0x00030037,0x00000014, + 0x00000016,0x000200f8,0x00000018,0x0004003d,0x00000013,0x00000104,0x00000016,0x0008000c, + 0x00000013,0x00000107,0x00000001,0x0000002b,0x00000104,0x00000105,0x00000106,0x000200fe, + 0x00000107,0x00010038,0x00050036,0x00000019,0x0000001c,0x00000000,0x0000001a,0x00030037, + 0x00000007,0x0000001b,0x000200f8,0x0000001d,0x0004003b,0x00000007,0x0000010c,0x00000007, + 0x0004003b,0x00000007,0x0000010e,0x00000007,0x0004003b,0x00000007,0x0000010f,0x00000007, + 0x0004003b,0x00000007,0x00000112,0x00000007,0x0004003b,0x00000007,0x00000113,0x00000007, + 0x0004003b,0x00000007,0x00000115,0x00000007,0x0004003b,0x00000007,0x00000117,0x00000007, + 0x0004003b,0x00000007,0x00000119,0x00000007,0x0004003b,0x00000007,0x0000011a,0x00000007, + 0x0004003b,0x00000007,0x0000011c,0x00000007,0x0004003b,0x00000007,0x0000011e,0x00000007, + 0x0004003b,0x00000007,0x0000011f,0x00000007,0x0004003b,0x00000007,0x00000121,0x00000007, + 0x0004003b,0x00000007,0x00000122,0x00000007,0x0004003b,0x00000007,0x00000123,0x00000007, + 0x0004003d,0x00000006,0x0000010d,0x0000001b,0x0003003e,0x0000010c,0x0000010d,0x0003003e, + 0x0000010e,0x0000010a,0x0003003e,0x0000010f,0x0000010b,0x00070039,0x00000006,0x00000110, + 0x0000000c,0x0000010c,0x0000010e,0x0000010f,0x0003003e,0x00000112,0x00000110,0x0004003d, + 0x00000006,0x00000114,0x0000001b,0x0003003e,0x00000113,0x00000114,0x0003003e,0x00000115, + 0x00000111,0x00070039,0x00000006,0x00000116,0x00000011,0x00000112,0x00000113,0x00000115, + 0x0004003d,0x00000006,0x00000118,0x0000001b,0x0003003e,0x00000117,0x00000118,0x0003003e, + 0x00000119,0x0000010b,0x0003003e,0x0000011a,0x0000010b,0x00070039,0x00000006,0x0000011b, + 0x0000000c,0x00000117,0x00000119,0x0000011a,0x0004003d,0x00000006,0x0000011d,0x0000001b, + 0x0003003e,0x0000011c,0x0000011d,0x0003003e,0x0000011e,0x00000111,0x0003003e,0x0000011f, + 0x0000010a,0x00070039,0x00000006,0x00000120,0x0000000c,0x0000011c,0x0000011e,0x0000011f, + 0x0003003e,0x00000121,0x0000011b,0x0003003e,0x00000122,0x00000120,0x0003003e,0x00000123, + 0x0000010a,0x00070039,0x00000006,0x00000124,0x00000011,0x00000121,0x00000122,0x00000123, + 0x00050050,0x00000019,0x00000125,0x00000116,0x00000124,0x000200fe,0x00000125,0x00010038, + 0x00050036,0x0000001f,0x00000021,0x00000000,0x00000020,0x000200f8,0x00000022,0x00050041, + 0x0000012e,0x0000012f,0x0000012c,0x0000012d,0x0004003d,0x0000001f,0x00000130,0x0000012f, + 0x000200fe,0x00000130,0x00010038,0x00050036,0x0000001f,0x00000023,0x00000000,0x00000020, + 0x000200f8,0x00000024,0x00050041,0x0000012e,0x00000134,0x0000012c,0x00000133,0x0004003d, + 0x0000001f,0x00000135,0x00000134,0x000200fe,0x00000135,0x00010038,0x00050036,0x0000001f, + 0x00000025,0x00000000,0x00000020,0x000200f8,0x00000026,0x00050041,0x0000012e,0x00000139, + 0x0000012c,0x00000138,0x0004003d,0x0000001f,0x0000013a,0x00000139,0x000200fe,0x0000013a, + 0x00010038,0x00050036,0x00000006,0x00000028,0x00000000,0x00000027,0x000200f8,0x00000029, + 0x00050041,0x00000140,0x00000141,0x0000013f,0x000000fe,0x0004003d,0x00000006,0x00000142, + 0x00000141,0x000200fe,0x00000142,0x00010038,0x00050036,0x00000006,0x0000002a,0x00000000, + 0x00000027,0x000200f8,0x0000002b,0x00050041,0x00000140,0x00000145,0x0000013f,0x00000138, + 0x0004003d,0x00000006,0x00000146,0x00000145,0x000200fe,0x00000146,0x00010038,0x00050036, + 0x00000019,0x0000002d,0x00000000,0x0000002c,0x000200f8,0x0000002e,0x00050041,0x0000014a, + 0x0000014b,0x0000013f,0x00000149,0x0004003d,0x00000019,0x0000014c,0x0000014b,0x000200fe, + 0x0000014c,0x00010038,0x00050036,0x00000030,0x00000033,0x00000000,0x00000031,0x00030037, + 0x0000002f,0x00000032,0x000200f8,0x00000034,0x0004003d,0x0000014f,0x00000152,0x00000151, + 0x0004003d,0x0000001f,0x00000153,0x00000032,0x0007005f,0x00000030,0x00000154,0x00000152, + 0x00000153,0x00000002,0x000000fe,0x000200fe,0x00000154,0x00010038,0x00050036,0x00000002, + 0x00000039,0x00000000,0x00000036,0x00030037,0x00000035,0x00000037,0x00030037,0x00000007, + 0x00000038,0x000200f8,0x0000003a,0x0004003d,0x0000001e,0x0000015b,0x00000037,0x0004003d, + 0x00000006,0x0000015c,0x00000038,0x00060041,0x0000015d,0x0000015e,0x0000015a,0x000000fe, + 0x0000015b,0x0003003e,0x0000015e,0x0000015c,0x000100fd,0x00010038,0x00050036,0x00000002, + 0x0000003d,0x00000000,0x00000036,0x00030037,0x00000035,0x0000003b,0x00030037,0x00000007, + 0x0000003c,0x000200f8,0x0000003e,0x0004003d,0x0000001e,0x0000015f,0x0000003b,0x00060041, + 0x0000015d,0x00000160,0x0000015a,0x000000fe,0x0000015f,0x000700ea,0x00000006,0x00000162, + 0x00000160,0x00000111,0x00000161,0x00000111,0x0003003e,0x0000003c,0x00000162,0x000100fd, + 0x00010038,0x00050036,0x00000030,0x00000042,0x00000000,0x0000003f,0x00030037,0x0000002f, + 0x00000040,0x00030037,0x00000007,0x00000041,0x000200f8,0x00000043,0x0004003d,0x00000006, + 0x00000163,0x00000041,0x000500aa,0x00000077,0x00000164,0x00000163,0x00000161,0x000300f7, + 0x00000166,0x00000000,0x000400fa,0x00000164,0x00000165,0x00000166,0x000200f8,0x00000165, + 0x0004003d,0x00000167,0x0000016a,0x00000169,0x0004003d,0x0000001f,0x0000016b,0x00000040, + 0x00050062,0x00000030,0x0000016c,0x0000016a,0x0000016b,0x000200fe,0x0000016c,0x000200f8, + 0x00000166,0x0004003d,0x00000006,0x0000016e,0x00000041,0x000500aa,0x00000077,0x0000016f, + 0x0000016e,0x00000111,0x000300f7,0x00000171,0x00000000,0x000400fa,0x0000016f,0x00000170, + 0x00000171,0x000200f8,0x00000170,0x0004003d,0x00000167,0x00000173,0x00000172,0x0004003d, + 0x0000001f,0x00000174,0x00000040,0x00050062,0x00000030,0x00000175,0x00000173,0x00000174, + 0x000200fe,0x00000175,0x000200f8,0x00000171,0x0004003d,0x00000006,0x00000177,0x00000041, + 0x000500aa,0x00000077,0x00000178,0x00000177,0x0000010a,0x000300f7,0x0000017a,0x00000000, + 0x000400fa,0x00000178,0x00000179,0x0000017a,0x000200f8,0x00000179,0x0004003d,0x00000167, + 0x0000017c,0x0000017b,0x0004003d,0x0000001f,0x0000017d,0x00000040,0x00050062,0x00000030, + 0x0000017e,0x0000017c,0x0000017d,0x000200fe,0x0000017e,0x000200f8,0x0000017a,0x0004003d, + 0x00000006,0x00000180,0x00000041,0x000500aa,0x00000077,0x00000181,0x00000180,0x0000010b, + 0x000300f7,0x00000183,0x00000000,0x000400fa,0x00000181,0x00000182,0x00000183,0x000200f8, + 0x00000182,0x0004003d,0x00000167,0x00000185,0x00000184,0x0004003d,0x0000001f,0x00000186, + 0x00000040,0x00050062,0x00000030,0x00000187,0x00000185,0x00000186,0x000200fe,0x00000187, + 0x000200f8,0x00000183,0x0004003d,0x00000006,0x00000189,0x00000041,0x000500aa,0x00000077, + 0x0000018b,0x00000189,0x0000018a,0x000300f7,0x0000018d,0x00000000,0x000400fa,0x0000018b, + 0x0000018c,0x0000018d,0x000200f8,0x0000018c,0x0004003d,0x00000167,0x0000018f,0x0000018e, + 0x0004003d,0x0000001f,0x00000190,0x00000040,0x00050062,0x00000030,0x00000191,0x0000018f, + 0x00000190,0x000200fe,0x00000191,0x000200f8,0x0000018d,0x0004003d,0x00000006,0x00000193, + 0x00000041,0x000500aa,0x00000077,0x00000195,0x00000193,0x00000194,0x000300f7,0x00000197, + 0x00000000,0x000400fa,0x00000195,0x00000196,0x00000197,0x000200f8,0x00000196,0x0004003d, + 0x00000167,0x00000199,0x00000198,0x0004003d,0x0000001f,0x0000019a,0x00000040,0x00050062, + 0x00000030,0x0000019b,0x00000199,0x0000019a,0x000200fe,0x0000019b,0x000200f8,0x00000197, + 0x0004003d,0x00000006,0x0000019d,0x00000041,0x000500aa,0x00000077,0x0000019f,0x0000019d, + 0x0000019e,0x000300f7,0x000001a1,0x00000000,0x000400fa,0x0000019f,0x000001a0,0x000001a1, + 0x000200f8,0x000001a0,0x0004003d,0x00000167,0x000001a3,0x000001a2,0x0004003d,0x0000001f, + 0x000001a4,0x00000040,0x00050062,0x00000030,0x000001a5,0x000001a3,0x000001a4,0x000200fe, + 0x000001a5,0x000200f8,0x000001a1,0x0004003d,0x00000006,0x000001a7,0x00000041,0x000500aa, + 0x00000077,0x000001a9,0x000001a7,0x000001a8,0x000300f7,0x000001ab,0x00000000,0x000400fa, + 0x000001a9,0x000001aa,0x000001ab,0x000200f8,0x000001aa,0x0004003d,0x00000167,0x000001ad, + 0x000001ac,0x0004003d,0x0000001f,0x000001ae,0x00000040,0x00050062,0x00000030,0x000001af, + 0x000001ad,0x000001ae,0x000200fe,0x000001af,0x000200f8,0x000001ab,0x0004003d,0x00000006, + 0x000001b1,0x00000041,0x000500aa,0x00000077,0x000001b3,0x000001b1,0x000001b2,0x000300f7, + 0x000001b5,0x00000000,0x000400fa,0x000001b3,0x000001b4,0x000001b5,0x000200f8,0x000001b4, + 0x0004003d,0x00000167,0x000001b7,0x000001b6,0x0004003d,0x0000001f,0x000001b8,0x00000040, + 0x00050062,0x00000030,0x000001b9,0x000001b7,0x000001b8,0x000200fe,0x000001b9,0x000200f8, + 0x000001b5,0x0004003d,0x00000006,0x000001bb,0x00000041,0x000500aa,0x00000077,0x000001bd, + 0x000001bb,0x000001bc,0x000300f7,0x000001bf,0x00000000,0x000400fa,0x000001bd,0x000001be, + 0x000001bf,0x000200f8,0x000001be,0x0004003d,0x00000167,0x000001c1,0x000001c0,0x0004003d, + 0x0000001f,0x000001c2,0x00000040,0x00050062,0x00000030,0x000001c3,0x000001c1,0x000001c2, + 0x000200fe,0x000001c3,0x000200f8,0x000001bf,0x0004003d,0x00000006,0x000001c5,0x00000041, + 0x000500aa,0x00000077,0x000001c7,0x000001c5,0x000001c6,0x000300f7,0x000001c9,0x00000000, + 0x000400fa,0x000001c7,0x000001c8,0x000001c9,0x000200f8,0x000001c8,0x0004003d,0x00000167, + 0x000001cb,0x000001ca,0x0004003d,0x0000001f,0x000001cc,0x00000040,0x00050062,0x00000030, + 0x000001cd,0x000001cb,0x000001cc,0x000200fe,0x000001cd,0x000200f8,0x000001c9,0x0004003d, + 0x00000006,0x000001cf,0x00000041,0x000500aa,0x00000077,0x000001d1,0x000001cf,0x000001d0, + 0x000300f7,0x000001d3,0x00000000,0x000400fa,0x000001d1,0x000001d2,0x000001d3,0x000200f8, + 0x000001d2,0x0004003d,0x00000167,0x000001d5,0x000001d4,0x0004003d,0x0000001f,0x000001d6, + 0x00000040,0x00050062,0x00000030,0x000001d7,0x000001d5,0x000001d6,0x000200fe,0x000001d7, + 0x000200f8,0x000001d3,0x0004003d,0x00000006,0x000001d9,0x00000041,0x000500aa,0x00000077, + 0x000001db,0x000001d9,0x000001da,0x000300f7,0x000001dd,0x00000000,0x000400fa,0x000001db, + 0x000001dc,0x000001dd,0x000200f8,0x000001dc,0x0004003d,0x00000167,0x000001df,0x000001de, + 0x0004003d,0x0000001f,0x000001e0,0x00000040,0x00050062,0x00000030,0x000001e1,0x000001df, + 0x000001e0,0x000200fe,0x000001e1,0x000200f8,0x000001dd,0x000200fe,0x000001e3,0x00010038, + 0x00050036,0x00000002,0x00000049,0x00000000,0x00000045,0x00030037,0x0000002f,0x00000046, + 0x00030037,0x00000044,0x00000047,0x00030037,0x00000007,0x00000048,0x000200f8,0x0000004a, + 0x0004003d,0x00000006,0x000001e6,0x00000048,0x000500aa,0x00000077,0x000001e7,0x000001e6, + 0x00000161,0x000300f7,0x000001e9,0x00000000,0x000400fa,0x000001e7,0x000001e8,0x000001e9, + 0x000200f8,0x000001e8,0x0004003d,0x00000167,0x000001ea,0x00000169,0x0004003d,0x0000001f, + 0x000001eb,0x00000046,0x0004003d,0x00000030,0x000001ec,0x00000047,0x00040063,0x000001ea, + 0x000001eb,0x000001ec,0x000200f9,0x000001e9,0x000200f8,0x000001e9,0x0004003d,0x00000006, + 0x000001ed,0x00000048,0x000500aa,0x00000077,0x000001ee,0x000001ed,0x00000111,0x000300f7, + 0x000001f0,0x00000000,0x000400fa,0x000001ee,0x000001ef,0x000001f0,0x000200f8,0x000001ef, + 0x0004003d,0x00000167,0x000001f1,0x00000172,0x0004003d,0x0000001f,0x000001f2,0x00000046, + 0x0004003d,0x00000030,0x000001f3,0x00000047,0x00040063,0x000001f1,0x000001f2,0x000001f3, + 0x000200f9,0x000001f0,0x000200f8,0x000001f0,0x0004003d,0x00000006,0x000001f4,0x00000048, + 0x000500aa,0x00000077,0x000001f5,0x000001f4,0x0000010a,0x000300f7,0x000001f7,0x00000000, + 0x000400fa,0x000001f5,0x000001f6,0x000001f7,0x000200f8,0x000001f6,0x0004003d,0x00000167, + 0x000001f8,0x0000017b,0x0004003d,0x0000001f,0x000001f9,0x00000046,0x0004003d,0x00000030, + 0x000001fa,0x00000047,0x00040063,0x000001f8,0x000001f9,0x000001fa,0x000200f9,0x000001f7, + 0x000200f8,0x000001f7,0x0004003d,0x00000006,0x000001fb,0x00000048,0x000500aa,0x00000077, + 0x000001fc,0x000001fb,0x0000010b,0x000300f7,0x000001fe,0x00000000,0x000400fa,0x000001fc, + 0x000001fd,0x000001fe,0x000200f8,0x000001fd,0x0004003d,0x00000167,0x000001ff,0x00000184, + 0x0004003d,0x0000001f,0x00000200,0x00000046,0x0004003d,0x00000030,0x00000201,0x00000047, + 0x00040063,0x000001ff,0x00000200,0x00000201,0x000200f9,0x000001fe,0x000200f8,0x000001fe, + 0x0004003d,0x00000006,0x00000202,0x00000048,0x000500aa,0x00000077,0x00000203,0x00000202, + 0x0000018a,0x000300f7,0x00000205,0x00000000,0x000400fa,0x00000203,0x00000204,0x00000205, + 0x000200f8,0x00000204,0x0004003d,0x00000167,0x00000206,0x0000018e,0x0004003d,0x0000001f, + 0x00000207,0x00000046,0x0004003d,0x00000030,0x00000208,0x00000047,0x00040063,0x00000206, + 0x00000207,0x00000208,0x000200f9,0x00000205,0x000200f8,0x00000205,0x0004003d,0x00000006, + 0x00000209,0x00000048,0x000500aa,0x00000077,0x0000020a,0x00000209,0x00000194,0x000300f7, + 0x0000020c,0x00000000,0x000400fa,0x0000020a,0x0000020b,0x0000020c,0x000200f8,0x0000020b, + 0x0004003d,0x00000167,0x0000020d,0x00000198,0x0004003d,0x0000001f,0x0000020e,0x00000046, + 0x0004003d,0x00000030,0x0000020f,0x00000047,0x00040063,0x0000020d,0x0000020e,0x0000020f, + 0x000200f9,0x0000020c,0x000200f8,0x0000020c,0x0004003d,0x00000006,0x00000210,0x00000048, + 0x000500aa,0x00000077,0x00000211,0x00000210,0x0000019e,0x000300f7,0x00000213,0x00000000, + 0x000400fa,0x00000211,0x00000212,0x00000213,0x000200f8,0x00000212,0x0004003d,0x00000167, + 0x00000214,0x000001a2,0x0004003d,0x0000001f,0x00000215,0x00000046,0x0004003d,0x00000030, + 0x00000216,0x00000047,0x00040063,0x00000214,0x00000215,0x00000216,0x000200f9,0x00000213, + 0x000200f8,0x00000213,0x0004003d,0x00000006,0x00000217,0x00000048,0x000500aa,0x00000077, + 0x00000218,0x00000217,0x000001a8,0x000300f7,0x0000021a,0x00000000,0x000400fa,0x00000218, + 0x00000219,0x0000021a,0x000200f8,0x00000219,0x0004003d,0x00000167,0x0000021b,0x000001ac, + 0x0004003d,0x0000001f,0x0000021c,0x00000046,0x0004003d,0x00000030,0x0000021d,0x00000047, + 0x00040063,0x0000021b,0x0000021c,0x0000021d,0x000200f9,0x0000021a,0x000200f8,0x0000021a, + 0x0004003d,0x00000006,0x0000021e,0x00000048,0x000500aa,0x00000077,0x0000021f,0x0000021e, + 0x000001b2,0x000300f7,0x00000221,0x00000000,0x000400fa,0x0000021f,0x00000220,0x00000221, + 0x000200f8,0x00000220,0x0004003d,0x00000167,0x00000222,0x000001b6,0x0004003d,0x0000001f, + 0x00000223,0x00000046,0x0004003d,0x00000030,0x00000224,0x00000047,0x00040063,0x00000222, + 0x00000223,0x00000224,0x000200f9,0x00000221,0x000200f8,0x00000221,0x0004003d,0x00000006, + 0x00000225,0x00000048,0x000500aa,0x00000077,0x00000226,0x00000225,0x000001bc,0x000300f7, + 0x00000228,0x00000000,0x000400fa,0x00000226,0x00000227,0x00000228,0x000200f8,0x00000227, + 0x0004003d,0x00000167,0x00000229,0x000001c0,0x0004003d,0x0000001f,0x0000022a,0x00000046, + 0x0004003d,0x00000030,0x0000022b,0x00000047,0x00040063,0x00000229,0x0000022a,0x0000022b, + 0x000200f9,0x00000228,0x000200f8,0x00000228,0x0004003d,0x00000006,0x0000022c,0x00000048, + 0x000500aa,0x00000077,0x0000022d,0x0000022c,0x000001c6,0x000300f7,0x0000022f,0x00000000, + 0x000400fa,0x0000022d,0x0000022e,0x0000022f,0x000200f8,0x0000022e,0x0004003d,0x00000167, + 0x00000230,0x000001ca,0x0004003d,0x0000001f,0x00000231,0x00000046,0x0004003d,0x00000030, + 0x00000232,0x00000047,0x00040063,0x00000230,0x00000231,0x00000232,0x000200f9,0x0000022f, + 0x000200f8,0x0000022f,0x0004003d,0x00000006,0x00000233,0x00000048,0x000500aa,0x00000077, + 0x00000234,0x00000233,0x000001d0,0x000300f7,0x00000236,0x00000000,0x000400fa,0x00000234, + 0x00000235,0x00000236,0x000200f8,0x00000235,0x0004003d,0x00000167,0x00000237,0x000001d4, + 0x0004003d,0x0000001f,0x00000238,0x00000046,0x0004003d,0x00000030,0x00000239,0x00000047, + 0x00040063,0x00000237,0x00000238,0x00000239,0x000200f9,0x00000236,0x000200f8,0x00000236, + 0x0004003d,0x00000006,0x0000023a,0x00000048,0x000500aa,0x00000077,0x0000023b,0x0000023a, + 0x000001da,0x000300f7,0x0000023d,0x00000000,0x000400fa,0x0000023b,0x0000023c,0x0000023d, + 0x000200f8,0x0000023c,0x0004003d,0x00000167,0x0000023e,0x000001de,0x0004003d,0x0000001f, + 0x0000023f,0x00000046,0x0004003d,0x00000030,0x00000240,0x00000047,0x00040063,0x0000023e, + 0x0000023f,0x00000240,0x000200f9,0x0000023d,0x000200f8,0x0000023d,0x000100fd,0x00010038, + 0x00050036,0x00000030,0x0000004d,0x00000000,0x0000003f,0x00030037,0x0000002f,0x0000004b, + 0x00030037,0x00000007,0x0000004c,0x000200f8,0x0000004e,0x0004003b,0x00000044,0x00000241, + 0x00000007,0x0004003b,0x0000002f,0x00000242,0x00000007,0x0004003b,0x00000014,0x0000024d, + 0x00000007,0x0004003d,0x0000001f,0x00000243,0x0000004b,0x0003003e,0x00000242,0x00000243, + 0x00050039,0x00000030,0x00000244,0x00000033,0x00000242,0x00040039,0x0000001f,0x00000245, + 0x00000025,0x00050051,0x0000001e,0x00000246,0x00000245,0x00000000,0x000500ad,0x00000077, + 0x00000247,0x00000246,0x000000fe,0x000600a9,0x00000013,0x00000248,0x00000247,0x00000106, + 0x00000105,0x0005008e,0x00000030,0x00000249,0x00000244,0x00000248,0x0003003e,0x00000241, + 0x00000249,0x00050041,0x00000014,0x0000024a,0x00000241,0x0000010b,0x0004003d,0x00000013, + 0x0000024b,0x0000024a,0x00050083,0x00000013,0x0000024c,0x00000106,0x0000024b,0x0003003e, + 0x0000024d,0x0000024c,0x00050039,0x00000013,0x0000024e,0x00000017,0x0000024d,0x00050041, + 0x00000014,0x0000024f,0x00000241,0x0000010b,0x0003003e,0x0000024f,0x0000024e,0x00050041, + 0x00000035,0x00000250,0x0000004b,0x00000161,0x0004003d,0x0000001e,0x00000251,0x00000250, + 0x00040039,0x0000001f,0x00000252,0x00000021,0x00050051,0x0000001e,0x00000253,0x00000252, + 0x00000000,0x000500b1,0x00000077,0x00000254,0x00000251,0x00000253,0x000400a8,0x00000077, + 0x00000255,0x00000254,0x000300f7,0x00000257,0x00000000,0x000400fa,0x00000255,0x00000256, + 0x00000257,0x000200f8,0x00000256,0x00050041,0x00000035,0x00000258,0x0000004b,0x00000161, + 0x0004003d,0x0000001e,0x00000259,0x00000258,0x00040039,0x0000001f,0x0000025a,0x00000023, + 0x00050051,0x0000001e,0x0000025b,0x0000025a,0x00000000,0x00040039,0x0000001f,0x0000025c, + 0x00000021,0x00050051,0x0000001e,0x0000025d,0x0000025c,0x00000000,0x00050080,0x0000001e, + 0x0000025e,0x0000025b,0x0000025d,0x000500af,0x00000077,0x0000025f,0x00000259,0x0000025e, + 0x000200f9,0x00000257,0x000200f8,0x00000257,0x000700f5,0x00000077,0x00000260,0x00000254, + 0x0000004e,0x0000025f,0x00000256,0x000400a8,0x00000077,0x00000261,0x00000260,0x000300f7, + 0x00000263,0x00000000,0x000400fa,0x00000261,0x00000262,0x00000263,0x000200f8,0x00000262, + 0x00050041,0x00000035,0x00000264,0x0000004b,0x00000111,0x0004003d,0x0000001e,0x00000265, + 0x00000264,0x00040039,0x0000001f,0x00000266,0x00000021,0x00050051,0x0000001e,0x00000267, + 0x00000266,0x00000001,0x000500b1,0x00000077,0x00000268,0x00000265,0x00000267,0x000200f9, + 0x00000263,0x000200f8,0x00000263,0x000700f5,0x00000077,0x00000269,0x00000260,0x00000257, + 0x00000268,0x00000262,0x000400a8,0x00000077,0x0000026a,0x00000269,0x000300f7,0x0000026c, + 0x00000000,0x000400fa,0x0000026a,0x0000026b,0x0000026c,0x000200f8,0x0000026b,0x00050041, + 0x00000035,0x0000026d,0x0000004b,0x00000111,0x0004003d,0x0000001e,0x0000026e,0x0000026d, + 0x00040039,0x0000001f,0x0000026f,0x00000023,0x00050051,0x0000001e,0x00000270,0x0000026f, + 0x00000001,0x00040039,0x0000001f,0x00000271,0x00000021,0x00050051,0x0000001e,0x00000272, + 0x00000271,0x00000001,0x00050080,0x0000001e,0x00000273,0x00000270,0x00000272,0x000500af, + 0x00000077,0x00000274,0x0000026e,0x00000273,0x000200f9,0x0000026c,0x000200f8,0x0000026c, + 0x000700f5,0x00000077,0x00000275,0x00000269,0x00000263,0x00000274,0x0000026b,0x000300f7, + 0x00000277,0x00000000,0x000400fa,0x00000275,0x00000276,0x00000277,0x000200f8,0x00000276, + 0x00050041,0x00000014,0x00000278,0x00000241,0x0000010b,0x0003003e,0x00000278,0x00000105, + 0x000200f9,0x00000277,0x000200f8,0x00000277,0x0004003d,0x00000030,0x00000279,0x00000241, + 0x000200fe,0x00000279,0x00010038,0x00050036,0x00000030,0x00000051,0x00000000,0x0000003f, + 0x00030037,0x0000002f,0x0000004f,0x00030037,0x00000007,0x00000050,0x000200f8,0x00000052, + 0x0004003b,0x0000002f,0x0000027c,0x00000007,0x0004003b,0x00000007,0x0000027e,0x00000007, + 0x0004003d,0x0000001f,0x0000027d,0x0000004f,0x0003003e,0x0000027c,0x0000027d,0x0003003e, + 0x0000027e,0x00000194,0x00060039,0x00000030,0x0000027f,0x00000042,0x0000027c,0x0000027e, + 0x000200fe,0x0000027f,0x00010038,0x00050036,0x00000002,0x00000058,0x00000000,0x00000053, + 0x00030037,0x0000002f,0x00000054,0x00030037,0x00000044,0x00000055,0x00030037,0x00000007, + 0x00000056,0x00030037,0x00000007,0x00000057,0x000200f8,0x00000059,0x0004003b,0x0000002f, + 0x00000282,0x00000007,0x0004003b,0x00000044,0x00000284,0x00000007,0x0004003b,0x00000007, + 0x00000286,0x00000007,0x0004003d,0x0000001f,0x00000283,0x00000054,0x0003003e,0x00000282, + 0x00000283,0x0004003d,0x00000030,0x00000285,0x00000055,0x0003003e,0x00000284,0x00000285, + 0x0004003d,0x00000006,0x00000287,0x00000056,0x0003003e,0x00000286,0x00000287,0x00070039, + 0x00000002,0x00000288,0x00000049,0x00000282,0x00000284,0x00000286,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x0000005c,0x00000000,0x0000005a,0x00030037,0x00000007,0x0000005b, + 0x000200f8,0x0000005d,0x0004003b,0x00000035,0x0000028b,0x00000007,0x0004003b,0x00000007, + 0x0000028c,0x00000007,0x0003003e,0x0000028b,0x000000fe,0x00060039,0x00000002,0x0000028d, + 0x0000003d,0x0000028b,0x0000028c,0x0004003d,0x00000006,0x0000028e,0x0000028c,0x0003003e, + 0x0000028a,0x0000028e,0x000100fd,0x00010038,0x00050036,0x00000006,0x0000005e,0x00000000, + 0x00000027,0x000200f8,0x0000005f,0x0004003d,0x00000006,0x0000028f,0x0000028a,0x000200fe, + 0x0000028f,0x00010038,0x00050036,0x00000002,0x00000061,0x00000000,0x0000005a,0x00030037, + 0x00000007,0x00000060,0x000200f8,0x00000062,0x0004003b,0x00000035,0x00000292,0x00000007, + 0x0004003b,0x00000007,0x00000293,0x00000007,0x0003003e,0x00000292,0x000000fe,0x0003003e, + 0x00000293,0x00000161,0x00060039,0x00000002,0x00000294,0x00000039,0x00000292,0x00000293, + 0x000100fd,0x00010038,0x00050036,0x00000030,0x00000066,0x00000000,0x00000063,0x00030037, + 0x00000007,0x00000064,0x00030037,0x00000007,0x00000065,0x000200f8,0x00000067,0x0004003d, + 0x00000006,0x0000029a,0x00000064,0x0004003d,0x00000006,0x0000029b,0x00000065,0x00060041, + 0x0000029c,0x0000029d,0x00000299,0x0000029a,0x0000029b,0x0004003d,0x00000013,0x0000029e, + 0x0000029d,0x0004003d,0x00000006,0x000002a0,0x00000064,0x0004003d,0x00000006,0x000002a1, + 0x00000065,0x00060041,0x0000029c,0x000002a2,0x0000029f,0x000002a0,0x000002a1,0x0004003d, + 0x00000013,0x000002a3,0x000002a2,0x0004003d,0x00000006,0x000002a5,0x00000064,0x0004003d, + 0x00000006,0x000002a6,0x00000065,0x00060041,0x0000029c,0x000002a7,0x000002a4,0x000002a5, + 0x000002a6,0x0004003d,0x00000013,0x000002a8,0x000002a7,0x0004003d,0x00000006,0x000002aa, + 0x00000064,0x0004003d,0x00000006,0x000002ab,0x00000065,0x00060041,0x0000029c,0x000002ac, + 0x000002a9,0x000002aa,0x000002ab,0x0004003d,0x00000013,0x000002ad,0x000002ac,0x00070050, + 0x00000030,0x000002ae,0x0000029e,0x000002a3,0x000002a8,0x000002ad,0x000200fe,0x000002ae, + 0x00010038,0x00050036,0x00000002,0x0000006c,0x00000000,0x00000068,0x00030037,0x00000007, + 0x00000069,0x00030037,0x00000007,0x0000006a,0x00030037,0x00000044,0x0000006b,0x000200f8, + 0x0000006d,0x0004003d,0x00000006,0x000002b1,0x00000069,0x0004003d,0x00000006,0x000002b2, + 0x0000006a,0x00050041,0x00000014,0x000002b3,0x0000006b,0x00000161,0x0004003d,0x00000013, + 0x000002b4,0x000002b3,0x00060041,0x0000029c,0x000002b5,0x00000299,0x000002b1,0x000002b2, + 0x0003003e,0x000002b5,0x000002b4,0x0004003d,0x00000006,0x000002b6,0x00000069,0x0004003d, + 0x00000006,0x000002b7,0x0000006a,0x00050041,0x00000014,0x000002b8,0x0000006b,0x00000111, + 0x0004003d,0x00000013,0x000002b9,0x000002b8,0x00060041,0x0000029c,0x000002ba,0x0000029f, + 0x000002b6,0x000002b7,0x0003003e,0x000002ba,0x000002b9,0x0004003d,0x00000006,0x000002bb, + 0x00000069,0x0004003d,0x00000006,0x000002bc,0x0000006a,0x00050041,0x00000014,0x000002bd, + 0x0000006b,0x0000010a,0x0004003d,0x00000013,0x000002be,0x000002bd,0x00060041,0x0000029c, + 0x000002bf,0x000002a4,0x000002bb,0x000002bc,0x0003003e,0x000002bf,0x000002be,0x0004003d, + 0x00000006,0x000002c0,0x00000069,0x0004003d,0x00000006,0x000002c1,0x0000006a,0x00050041, + 0x00000014,0x000002c2,0x0000006b,0x0000010b,0x0004003d,0x00000013,0x000002c3,0x000002c2, + 0x00060041,0x0000029c,0x000002c4,0x000002a9,0x000002c0,0x000002c1,0x0003003e,0x000002c4, + 0x000002c3,0x000100fd,0x00010038,0x00050036,0x00000030,0x00000073,0x00000000,0x0000006e, + 0x00030037,0x00000044,0x0000006f,0x00030037,0x00000044,0x00000070,0x00030037,0x00000044, + 0x00000071,0x00030037,0x00000044,0x00000072,0x000200f8,0x00000074,0x0004003b,0x00000044, + 0x000002c5,0x00000007,0x0004003b,0x00000014,0x000002cf,0x00000007,0x00050041,0x00000014, + 0x000002c6,0x0000006f,0x0000010b,0x0004003d,0x00000013,0x000002c7,0x000002c6,0x00050041, + 0x00000014,0x000002c8,0x00000070,0x0000010b,0x0004003d,0x00000013,0x000002c9,0x000002c8, + 0x00050041,0x00000014,0x000002ca,0x00000071,0x0000010b,0x0004003d,0x00000013,0x000002cb, + 0x000002ca,0x00050041,0x00000014,0x000002cc,0x00000072,0x0000010b,0x0004003d,0x00000013, + 0x000002cd,0x000002cc,0x00070050,0x00000030,0x000002ce,0x000002c7,0x000002c9,0x000002cb, + 0x000002cd,0x0003003e,0x000002c5,0x000002ce,0x00050041,0x00000014,0x000002d0,0x000002c5, + 0x00000161,0x0004003d,0x00000013,0x000002d1,0x000002d0,0x00050041,0x00000014,0x000002d2, + 0x000002c5,0x00000111,0x0004003d,0x00000013,0x000002d3,0x000002d2,0x00050081,0x00000013, + 0x000002d4,0x000002d1,0x000002d3,0x00050041,0x00000014,0x000002d5,0x000002c5,0x0000010a, + 0x0004003d,0x00000013,0x000002d6,0x000002d5,0x00050081,0x00000013,0x000002d7,0x000002d4, + 0x000002d6,0x00050041,0x00000014,0x000002d8,0x000002c5,0x0000010b,0x0004003d,0x00000013, + 0x000002d9,0x000002d8,0x00050081,0x00000013,0x000002da,0x000002d7,0x000002d9,0x0003003e, + 0x000002cf,0x000002da,0x0004003d,0x00000013,0x000002db,0x000002cf,0x000500b4,0x00000077, + 0x000002dc,0x000002db,0x00000105,0x000300f7,0x000002de,0x00000000,0x000400fa,0x000002dc, + 0x000002dd,0x000002de,0x000200f8,0x000002dd,0x000200fe,0x000001e3,0x000200f8,0x000002de, + 0x0004003d,0x00000030,0x000002e0,0x0000006f,0x00050041,0x00000014,0x000002e1,0x000002c5, + 0x00000161,0x0004003d,0x00000013,0x000002e2,0x000002e1,0x0005008e,0x00000030,0x000002e3, + 0x000002e0,0x000002e2,0x0004003d,0x00000030,0x000002e4,0x00000070,0x00050041,0x00000014, + 0x000002e5,0x000002c5,0x00000111,0x0004003d,0x00000013,0x000002e6,0x000002e5,0x0005008e, + 0x00000030,0x000002e7,0x000002e4,0x000002e6,0x00050081,0x00000030,0x000002e8,0x000002e3, + 0x000002e7,0x0004003d,0x00000030,0x000002e9,0x00000071,0x00050041,0x00000014,0x000002ea, + 0x000002c5,0x0000010a,0x0004003d,0x00000013,0x000002eb,0x000002ea,0x0005008e,0x00000030, + 0x000002ec,0x000002e9,0x000002eb,0x00050081,0x00000030,0x000002ed,0x000002e8,0x000002ec, + 0x0004003d,0x00000030,0x000002ee,0x00000072,0x00050041,0x00000014,0x000002ef,0x000002c5, + 0x0000010b,0x0004003d,0x00000013,0x000002f0,0x000002ef,0x0005008e,0x00000030,0x000002f1, + 0x000002ee,0x000002f0,0x00050081,0x00000030,0x000002f2,0x000002ed,0x000002f1,0x0004003d, + 0x00000013,0x000002f3,0x000002cf,0x00070050,0x00000030,0x000002f4,0x000002f3,0x000002f3, + 0x000002f3,0x000002f3,0x00050088,0x00000030,0x000002f5,0x000002f2,0x000002f4,0x000200fe, + 0x000002f5,0x00010038,0x00050036,0x00000002,0x00000075,0x00000000,0x00000003,0x000200f8, + 0x00000076,0x000300e1,0x0000010a,0x000002f8,0x000400e0,0x0000010a,0x0000010a,0x000002f9, + 0x000100fd,0x00010038,0x00050036,0x00000077,0x0000007c,0x00000000,0x00000078,0x00030037, + 0x00000007,0x00000079,0x00030037,0x00000007,0x0000007a,0x00030037,0x00000007,0x0000007b, + 0x000200f8,0x0000007d,0x0004003b,0x00000007,0x000002fe,0x00000007,0x0004003d,0x00000006, + 0x000002fa,0x0000007a,0x000500aa,0x00000077,0x000002fb,0x000002fa,0x00000161,0x000300f7, + 0x000002fd,0x00000000,0x000400fa,0x000002fb,0x000002fc,0x000002fd,0x000200f8,0x000002fc, + 0x0004003d,0x00000006,0x000002ff,0x0000007b,0x0003003e,0x000002fe,0x000002ff,0x00050039, + 0x00000002,0x00000300,0x0000005c,0x000002fe,0x000200f9,0x000002fd,0x000200f8,0x000002fd, + 0x00040039,0x00000002,0x00000301,0x00000075,0x00040039,0x00000006,0x00000302,0x0000005e, + 0x0004003d,0x00000006,0x00000303,0x00000079,0x00050082,0x00000006,0x00000304,0x00000303, + 0x00000111,0x000500ab,0x00000077,0x00000305,0x00000302,0x00000304,0x000200fe,0x00000305, + 0x00010038,0x00050036,0x00000030,0x00000080,0x00000000,0x0000007e,0x00030037,0x00000044, + 0x0000007f,0x000200f8,0x00000081,0x0004003b,0x00000044,0x00000308,0x00000007,0x0004003b, + 0x00000044,0x0000030a,0x00000007,0x0004003b,0x00000044,0x0000030d,0x00000007,0x0004003b, + 0x00000044,0x00000310,0x00000007,0x0004003b,0x00000044,0x00000313,0x00000007,0x0004003b, + 0x00000044,0x00000315,0x00000007,0x0004003b,0x00000044,0x00000317,0x00000007,0x0004003b, + 0x00000044,0x00000319,0x00000007,0x0004003d,0x00000030,0x00000309,0x0000007f,0x0003003e, + 0x00000308,0x00000309,0x0004003d,0x00000030,0x0000030b,0x0000007f,0x0006016e,0x00000030, + 0x0000030c,0x0000010b,0x0000030b,0x00000161,0x0003003e,0x0000030a,0x0000030c,0x0004003d, + 0x00000030,0x0000030e,0x0000007f,0x0006016e,0x00000030,0x0000030f,0x0000010b,0x0000030e, + 0x00000111,0x0003003e,0x0000030d,0x0000030f,0x0004003d,0x00000030,0x00000311,0x0000007f, + 0x0006016e,0x00000030,0x00000312,0x0000010b,0x00000311,0x0000010a,0x0003003e,0x00000310, + 0x00000312,0x0004003d,0x00000030,0x00000314,0x00000308,0x0003003e,0x00000313,0x00000314, + 0x0004003d,0x00000030,0x00000316,0x0000030a,0x0003003e,0x00000315,0x00000316,0x0004003d, + 0x00000030,0x00000318,0x0000030d,0x0003003e,0x00000317,0x00000318,0x0004003d,0x00000030, + 0x0000031a,0x00000310,0x0003003e,0x00000319,0x0000031a,0x00080039,0x00000030,0x0000031b, + 0x00000073,0x00000313,0x00000315,0x00000317,0x00000319,0x000200fe,0x0000031b,0x00010038, + 0x00050036,0x00000030,0x00000089,0x00000000,0x00000083,0x00030037,0x00000082,0x00000084, + 0x00030037,0x00000082,0x00000085,0x00030037,0x00000082,0x00000086,0x00030037,0x00000082, + 0x00000087,0x00030037,0x00000007,0x00000088,0x000200f8,0x0000008a,0x0004003b,0x00000044, + 0x00000320,0x00000007,0x0004003b,0x0000002f,0x00000323,0x00000007,0x0004003b,0x00000007, + 0x00000324,0x00000007,0x0004003b,0x00000044,0x00000327,0x00000007,0x0004003b,0x0000002f, + 0x0000032a,0x00000007,0x0004003b,0x00000007,0x0000032b,0x00000007,0x0004003b,0x00000044, + 0x0000032e,0x00000007,0x0004003b,0x0000002f,0x00000331,0x00000007,0x0004003b,0x00000007, + 0x00000332,0x00000007,0x0004003b,0x00000044,0x00000335,0x00000007,0x0004003b,0x0000002f, + 0x00000338,0x00000007,0x0004003b,0x00000007,0x00000339,0x00000007,0x0004003b,0x00000044, + 0x0000033c,0x00000007,0x0004003b,0x00000044,0x0000033e,0x00000007,0x0004003b,0x00000044, + 0x00000340,0x00000007,0x0004003b,0x00000044,0x00000342,0x00000007,0x0004003d,0x00000019, + 0x00000321,0x00000084,0x0004007c,0x0000001f,0x00000322,0x00000321,0x0003003e,0x00000323, + 0x00000322,0x0004003d,0x00000006,0x00000325,0x00000088,0x0003003e,0x00000324,0x00000325, + 0x00060039,0x00000030,0x00000326,0x00000051,0x00000323,0x00000324,0x0003003e,0x00000320, + 0x00000326,0x0004003d,0x00000019,0x00000328,0x00000085,0x0004007c,0x0000001f,0x00000329, + 0x00000328,0x0003003e,0x0000032a,0x00000329,0x0004003d,0x00000006,0x0000032c,0x00000088, + 0x0003003e,0x0000032b,0x0000032c,0x00060039,0x00000030,0x0000032d,0x00000051,0x0000032a, + 0x0000032b,0x0003003e,0x00000327,0x0000032d,0x0004003d,0x00000019,0x0000032f,0x00000086, + 0x0004007c,0x0000001f,0x00000330,0x0000032f,0x0003003e,0x00000331,0x00000330,0x0004003d, + 0x00000006,0x00000333,0x00000088,0x0003003e,0x00000332,0x00000333,0x00060039,0x00000030, + 0x00000334,0x00000051,0x00000331,0x00000332,0x0003003e,0x0000032e,0x00000334,0x0004003d, + 0x00000019,0x00000336,0x00000087,0x0004007c,0x0000001f,0x00000337,0x00000336,0x0003003e, + 0x00000338,0x00000337,0x0004003d,0x00000006,0x0000033a,0x00000088,0x0003003e,0x00000339, + 0x0000033a,0x00060039,0x00000030,0x0000033b,0x00000051,0x00000338,0x00000339,0x0003003e, + 0x00000335,0x0000033b,0x0004003d,0x00000030,0x0000033d,0x00000320,0x0003003e,0x0000033c, + 0x0000033d,0x0004003d,0x00000030,0x0000033f,0x00000327,0x0003003e,0x0000033e,0x0000033f, + 0x0004003d,0x00000030,0x00000341,0x0000032e,0x0003003e,0x00000340,0x00000341,0x0004003d, + 0x00000030,0x00000343,0x00000335,0x0003003e,0x00000342,0x00000343,0x00080039,0x00000030, + 0x00000344,0x00000073,0x0000033c,0x0000033e,0x00000340,0x00000342,0x000200fe,0x00000344, + 0x00010038,0x00050036,0x00000030,0x0000008e,0x00000000,0x0000008b,0x00030037,0x00000082, + 0x0000008c,0x00030037,0x00000007,0x0000008d,0x000200f8,0x0000008f,0x0004003b,0x00000082, + 0x00000353,0x00000007,0x0004003b,0x00000082,0x00000354,0x00000007,0x0004003b,0x00000082, + 0x00000355,0x00000007,0x0004003b,0x00000082,0x00000356,0x00000007,0x0004003b,0x00000007, + 0x00000357,0x00000007,0x0004003d,0x00000019,0x00000347,0x0000008c,0x00050080,0x00000019, + 0x00000349,0x00000347,0x00000348,0x0004003d,0x00000019,0x0000034a,0x0000008c,0x00050080, + 0x00000019,0x0000034c,0x0000034a,0x0000034b,0x0004003d,0x00000019,0x0000034d,0x0000008c, + 0x00050080,0x00000019,0x0000034f,0x0000034d,0x0000034e,0x0004003d,0x00000019,0x00000350, + 0x0000008c,0x00050080,0x00000019,0x00000352,0x00000350,0x00000351,0x0003003e,0x00000353, + 0x00000349,0x0003003e,0x00000354,0x0000034c,0x0003003e,0x00000355,0x0000034f,0x0003003e, + 0x00000356,0x00000352,0x0004003d,0x00000006,0x00000358,0x0000008d,0x0003003e,0x00000357, + 0x00000358,0x00090039,0x00000030,0x00000359,0x00000089,0x00000353,0x00000354,0x00000355, + 0x00000356,0x00000357,0x000200fe,0x00000359,0x00010038,0x00050036,0x00000030,0x00000095, + 0x00000000,0x00000083,0x00030037,0x00000082,0x00000090,0x00030037,0x00000082,0x00000091, + 0x00030037,0x00000082,0x00000092,0x00030037,0x00000082,0x00000093,0x00030037,0x00000007, + 0x00000094,0x000200f8,0x00000096,0x0004003b,0x00000044,0x0000035c,0x00000007,0x0004003b, + 0x0000002f,0x0000035f,0x00000007,0x0004003b,0x00000007,0x00000360,0x00000007,0x0004003b, + 0x00000044,0x00000363,0x00000007,0x0004003b,0x0000002f,0x00000366,0x00000007,0x0004003b, + 0x00000007,0x00000367,0x00000007,0x0004003b,0x00000044,0x0000036a,0x00000007,0x0004003b, + 0x0000002f,0x0000036d,0x00000007,0x0004003b,0x00000007,0x0000036e,0x00000007,0x0004003b, + 0x00000044,0x00000371,0x00000007,0x0004003b,0x0000002f,0x00000374,0x00000007,0x0004003b, + 0x00000007,0x00000375,0x00000007,0x0004003b,0x00000044,0x00000378,0x00000007,0x0004003b, + 0x00000044,0x0000037a,0x00000007,0x0004003b,0x00000044,0x0000037c,0x00000007,0x0004003b, + 0x00000044,0x0000037e,0x00000007,0x0004003d,0x00000019,0x0000035d,0x00000090,0x0004007c, + 0x0000001f,0x0000035e,0x0000035d,0x0003003e,0x0000035f,0x0000035e,0x0004003d,0x00000006, + 0x00000361,0x00000094,0x0003003e,0x00000360,0x00000361,0x00060039,0x00000030,0x00000362, + 0x0000004d,0x0000035f,0x00000360,0x0003003e,0x0000035c,0x00000362,0x0004003d,0x00000019, + 0x00000364,0x00000091,0x0004007c,0x0000001f,0x00000365,0x00000364,0x0003003e,0x00000366, + 0x00000365,0x0004003d,0x00000006,0x00000368,0x00000094,0x0003003e,0x00000367,0x00000368, + 0x00060039,0x00000030,0x00000369,0x0000004d,0x00000366,0x00000367,0x0003003e,0x00000363, + 0x00000369,0x0004003d,0x00000019,0x0000036b,0x00000092,0x0004007c,0x0000001f,0x0000036c, + 0x0000036b,0x0003003e,0x0000036d,0x0000036c,0x0004003d,0x00000006,0x0000036f,0x00000094, + 0x0003003e,0x0000036e,0x0000036f,0x00060039,0x00000030,0x00000370,0x0000004d,0x0000036d, + 0x0000036e,0x0003003e,0x0000036a,0x00000370,0x0004003d,0x00000019,0x00000372,0x00000093, + 0x0004007c,0x0000001f,0x00000373,0x00000372,0x0003003e,0x00000374,0x00000373,0x0004003d, + 0x00000006,0x00000376,0x00000094,0x0003003e,0x00000375,0x00000376,0x00060039,0x00000030, + 0x00000377,0x0000004d,0x00000374,0x00000375,0x0003003e,0x00000371,0x00000377,0x0004003d, + 0x00000030,0x00000379,0x0000035c,0x0003003e,0x00000378,0x00000379,0x0004003d,0x00000030, + 0x0000037b,0x00000363,0x0003003e,0x0000037a,0x0000037b,0x0004003d,0x00000030,0x0000037d, + 0x0000036a,0x0003003e,0x0000037c,0x0000037d,0x0004003d,0x00000030,0x0000037f,0x00000371, + 0x0003003e,0x0000037e,0x0000037f,0x00080039,0x00000030,0x00000380,0x00000073,0x00000378, + 0x0000037a,0x0000037c,0x0000037e,0x000200fe,0x00000380,0x00010038,0x00050036,0x00000030, + 0x00000099,0x00000000,0x0000008b,0x00030037,0x00000082,0x00000097,0x00030037,0x00000007, + 0x00000098,0x000200f8,0x0000009a,0x0004003b,0x00000082,0x0000038b,0x00000007,0x0004003b, + 0x00000082,0x0000038c,0x00000007,0x0004003b,0x00000082,0x0000038d,0x00000007,0x0004003b, + 0x00000082,0x0000038e,0x00000007,0x0004003b,0x00000007,0x0000038f,0x00000007,0x0004003d, + 0x00000019,0x00000383,0x00000097,0x00050080,0x00000019,0x00000384,0x00000383,0x00000348, + 0x0004003d,0x00000019,0x00000385,0x00000097,0x00050080,0x00000019,0x00000386,0x00000385, + 0x0000034b,0x0004003d,0x00000019,0x00000387,0x00000097,0x00050080,0x00000019,0x00000388, + 0x00000387,0x0000034e,0x0004003d,0x00000019,0x00000389,0x00000097,0x00050080,0x00000019, + 0x0000038a,0x00000389,0x00000351,0x0003003e,0x0000038b,0x00000384,0x0003003e,0x0000038c, + 0x00000386,0x0003003e,0x0000038d,0x00000388,0x0003003e,0x0000038e,0x0000038a,0x0004003d, + 0x00000006,0x00000390,0x00000098,0x0003003e,0x0000038f,0x00000390,0x00090039,0x00000030, + 0x00000391,0x00000095,0x0000038b,0x0000038c,0x0000038d,0x0000038e,0x0000038f,0x000200fe, + 0x00000391,0x00010038,0x00050036,0x00000002,0x000000a2,0x00000000,0x0000009b,0x00030037, + 0x00000007,0x0000009c,0x00030037,0x00000007,0x0000009d,0x00030037,0x00000082,0x0000009e, + 0x00030037,0x00000007,0x0000009f,0x00030037,0x00000007,0x000000a0,0x00030037,0x00000007, + 0x000000a1,0x000200f8,0x000000a3,0x0004003b,0x0000002f,0x00000394,0x00000007,0x0004003b, + 0x0000002f,0x000003a2,0x00000007,0x0004003b,0x000003af,0x000003b0,0x00000007,0x0004003b, + 0x00000082,0x000003b3,0x00000007,0x0004003b,0x00000007,0x000003b4,0x00000007,0x0004003b, + 0x0000002f,0x000003b8,0x00000007,0x0004003b,0x00000044,0x000003ba,0x00000007,0x0004003b, + 0x00000007,0x000003bd,0x00000007,0x0004003b,0x00000007,0x000003be,0x00000007,0x0004003b, + 0x00000082,0x000003db,0x00000007,0x0004003b,0x00000007,0x000003dc,0x00000007,0x0004003b, + 0x0000002f,0x000003e0,0x00000007,0x0004003b,0x00000044,0x000003e2,0x00000007,0x0004003b, + 0x00000007,0x000003e5,0x00000007,0x0004003b,0x00000007,0x000003e6,0x00000007,0x0004003b, + 0x00000082,0x00000403,0x00000007,0x0004003b,0x00000007,0x00000404,0x00000007,0x0004003b, + 0x0000002f,0x00000408,0x00000007,0x0004003b,0x00000044,0x0000040a,0x00000007,0x0004003b, + 0x00000007,0x0000040d,0x00000007,0x0004003b,0x00000007,0x0000040e,0x00000007,0x0004003b, + 0x00000082,0x0000042e,0x00000007,0x0004003b,0x00000007,0x0000042f,0x00000007,0x0004003b, + 0x0000002f,0x00000433,0x00000007,0x0004003b,0x00000044,0x00000435,0x00000007,0x0004003b, + 0x00000007,0x00000438,0x00000007,0x0004003b,0x00000007,0x00000439,0x00000007,0x0004003b, + 0x00000044,0x00000441,0x00000007,0x0004003b,0x00000044,0x00000446,0x00000007,0x0004003b, + 0x00000044,0x0000044b,0x00000007,0x0004003b,0x00000044,0x00000450,0x00000007,0x0004003b, + 0x0000002f,0x00000466,0x00000007,0x0004003b,0x00000044,0x00000467,0x00000007,0x0004003b, + 0x00000007,0x0000046a,0x00000007,0x0004003b,0x00000007,0x0000046b,0x00000007,0x0004003b, + 0x00000007,0x00000472,0x00000007,0x0004003b,0x00000007,0x00000473,0x00000007,0x0004003b, + 0x00000044,0x00000474,0x00000007,0x0004003b,0x0000002f,0x00000485,0x00000007,0x0004003b, + 0x00000044,0x00000486,0x00000007,0x0004003b,0x00000007,0x00000489,0x00000007,0x0004003b, + 0x00000007,0x0000048a,0x00000007,0x0004003b,0x00000007,0x00000492,0x00000007,0x0004003b, + 0x00000007,0x00000493,0x00000007,0x0004003b,0x00000044,0x00000494,0x00000007,0x0004003b, + 0x0000002f,0x000004a5,0x00000007,0x0004003b,0x00000044,0x000004a6,0x00000007,0x0004003b, + 0x00000007,0x000004a9,0x00000007,0x0004003b,0x00000007,0x000004aa,0x00000007,0x0004003b, + 0x00000007,0x000004b2,0x00000007,0x0004003b,0x00000007,0x000004b3,0x00000007,0x0004003b, + 0x00000044,0x000004b4,0x00000007,0x0004003b,0x0000002f,0x000004c6,0x00000007,0x0004003b, + 0x00000044,0x000004c7,0x00000007,0x0004003b,0x00000007,0x000004ca,0x00000007,0x0004003b, + 0x00000007,0x000004cb,0x00000007,0x0004003b,0x00000007,0x000004d4,0x00000007,0x0004003b, + 0x00000007,0x000004d5,0x00000007,0x0004003b,0x00000044,0x000004d6,0x00000007,0x0004003d, + 0x00000019,0x00000395,0x0000009e,0x00050050,0x00000019,0x00000397,0x00000396,0x00000396, + 0x00050084,0x00000019,0x00000398,0x00000395,0x00000397,0x0004007c,0x0000001f,0x00000399, + 0x00000398,0x0004003d,0x00000006,0x0000039a,0x0000009c,0x00050084,0x00000006,0x0000039b, + 0x0000039a,0x0000010a,0x0004007c,0x0000001e,0x0000039c,0x0000039b,0x0004003d,0x00000006, + 0x0000039d,0x0000009d,0x00050084,0x00000006,0x0000039e,0x0000039d,0x0000010a,0x0004007c, + 0x0000001e,0x0000039f,0x0000039e,0x00050050,0x0000001f,0x000003a0,0x0000039c,0x0000039f, + 0x00050080,0x0000001f,0x000003a1,0x00000399,0x000003a0,0x0003003e,0x00000394,0x000003a1, + 0x0004003d,0x00000019,0x000003a3,0x0000009e,0x00050050,0x00000019,0x000003a5,0x000003a4, + 0x000003a4,0x00050084,0x00000019,0x000003a6,0x000003a3,0x000003a5,0x0004007c,0x0000001f, + 0x000003a7,0x000003a6,0x0004003d,0x00000006,0x000003a8,0x0000009c,0x0004007c,0x0000001e, + 0x000003a9,0x000003a8,0x0004003d,0x00000006,0x000003aa,0x0000009d,0x0004007c,0x0000001e, + 0x000003ab,0x000003aa,0x00050050,0x0000001f,0x000003ac,0x000003a9,0x000003ab,0x00050080, + 0x0000001f,0x000003ad,0x000003a7,0x000003ac,0x0003003e,0x000003a2,0x000003ad,0x0004003d, + 0x0000001f,0x000003b1,0x00000394,0x0004007c,0x00000019,0x000003b2,0x000003b1,0x0003003e, + 0x000003b3,0x000003b2,0x0004003d,0x00000006,0x000003b5,0x000000a1,0x0003003e,0x000003b4, + 0x000003b5,0x00060039,0x00000030,0x000003b6,0x00000099,0x000003b3,0x000003b4,0x00050041, + 0x00000044,0x000003b7,0x000003b0,0x000000fe,0x0003003e,0x000003b7,0x000003b6,0x0004003d, + 0x0000001f,0x000003b9,0x000003a2,0x0003003e,0x000003b8,0x000003b9,0x00050041,0x00000044, + 0x000003bb,0x000003b0,0x000000fe,0x0004003d,0x00000030,0x000003bc,0x000003bb,0x0003003e, + 0x000003ba,0x000003bc,0x0003003e,0x000003bd,0x00000161,0x0004003d,0x00000006,0x000003bf, + 0x000000a1,0x0003003e,0x000003be,0x000003bf,0x00080039,0x00000002,0x000003c0,0x00000058, + 0x000003b8,0x000003ba,0x000003bd,0x000003be,0x0004003d,0x00000019,0x000003c1,0x0000009e, + 0x00050050,0x00000019,0x000003c2,0x00000396,0x00000396,0x00050084,0x00000019,0x000003c3, + 0x000003c1,0x000003c2,0x0004007c,0x0000001f,0x000003c4,0x000003c3,0x0004003d,0x00000006, + 0x000003c5,0x0000009c,0x00050084,0x00000006,0x000003c6,0x000003c5,0x0000010a,0x00050080, + 0x00000006,0x000003c7,0x000003c6,0x000003a4,0x0004007c,0x0000001e,0x000003c8,0x000003c7, + 0x0004003d,0x00000006,0x000003c9,0x0000009d,0x00050084,0x00000006,0x000003ca,0x000003c9, + 0x0000010a,0x0004007c,0x0000001e,0x000003cb,0x000003ca,0x00050050,0x0000001f,0x000003cc, + 0x000003c8,0x000003cb,0x00050080,0x0000001f,0x000003cd,0x000003c4,0x000003cc,0x0003003e, + 0x00000394,0x000003cd,0x0004003d,0x00000019,0x000003ce,0x0000009e,0x00050050,0x00000019, + 0x000003cf,0x000003a4,0x000003a4,0x00050084,0x00000019,0x000003d0,0x000003ce,0x000003cf, + 0x0004007c,0x0000001f,0x000003d1,0x000003d0,0x0004003d,0x00000006,0x000003d2,0x0000009c, + 0x00050080,0x00000006,0x000003d3,0x000003d2,0x00000295,0x0004007c,0x0000001e,0x000003d4, + 0x000003d3,0x0004003d,0x00000006,0x000003d5,0x0000009d,0x0004007c,0x0000001e,0x000003d6, + 0x000003d5,0x00050050,0x0000001f,0x000003d7,0x000003d4,0x000003d6,0x00050080,0x0000001f, + 0x000003d8,0x000003d1,0x000003d7,0x0003003e,0x000003a2,0x000003d8,0x0004003d,0x0000001f, + 0x000003d9,0x00000394,0x0004007c,0x00000019,0x000003da,0x000003d9,0x0003003e,0x000003db, + 0x000003da,0x0004003d,0x00000006,0x000003dd,0x000000a1,0x0003003e,0x000003dc,0x000003dd, + 0x00060039,0x00000030,0x000003de,0x00000099,0x000003db,0x000003dc,0x00050041,0x00000044, + 0x000003df,0x000003b0,0x00000138,0x0003003e,0x000003df,0x000003de,0x0004003d,0x0000001f, + 0x000003e1,0x000003a2,0x0003003e,0x000003e0,0x000003e1,0x00050041,0x00000044,0x000003e3, + 0x000003b0,0x00000138,0x0004003d,0x00000030,0x000003e4,0x000003e3,0x0003003e,0x000003e2, + 0x000003e4,0x0003003e,0x000003e5,0x00000161,0x0004003d,0x00000006,0x000003e7,0x000000a1, + 0x0003003e,0x000003e6,0x000003e7,0x00080039,0x00000002,0x000003e8,0x00000058,0x000003e0, + 0x000003e2,0x000003e5,0x000003e6,0x0004003d,0x00000019,0x000003e9,0x0000009e,0x00050050, + 0x00000019,0x000003ea,0x00000396,0x00000396,0x00050084,0x00000019,0x000003eb,0x000003e9, + 0x000003ea,0x0004007c,0x0000001f,0x000003ec,0x000003eb,0x0004003d,0x00000006,0x000003ed, + 0x0000009c,0x00050084,0x00000006,0x000003ee,0x000003ed,0x0000010a,0x0004007c,0x0000001e, + 0x000003ef,0x000003ee,0x0004003d,0x00000006,0x000003f0,0x0000009d,0x00050084,0x00000006, + 0x000003f1,0x000003f0,0x0000010a,0x00050080,0x00000006,0x000003f2,0x000003f1,0x000003a4, + 0x0004007c,0x0000001e,0x000003f3,0x000003f2,0x00050050,0x0000001f,0x000003f4,0x000003ef, + 0x000003f3,0x00050080,0x0000001f,0x000003f5,0x000003ec,0x000003f4,0x0003003e,0x00000394, + 0x000003f5,0x0004003d,0x00000019,0x000003f6,0x0000009e,0x00050050,0x00000019,0x000003f7, + 0x000003a4,0x000003a4,0x00050084,0x00000019,0x000003f8,0x000003f6,0x000003f7,0x0004007c, + 0x0000001f,0x000003f9,0x000003f8,0x0004003d,0x00000006,0x000003fa,0x0000009c,0x0004007c, + 0x0000001e,0x000003fb,0x000003fa,0x0004003d,0x00000006,0x000003fc,0x0000009d,0x00050080, + 0x00000006,0x000003fd,0x000003fc,0x00000295,0x0004007c,0x0000001e,0x000003fe,0x000003fd, + 0x00050050,0x0000001f,0x000003ff,0x000003fb,0x000003fe,0x00050080,0x0000001f,0x00000400, + 0x000003f9,0x000003ff,0x0003003e,0x000003a2,0x00000400,0x0004003d,0x0000001f,0x00000401, + 0x00000394,0x0004007c,0x00000019,0x00000402,0x00000401,0x0003003e,0x00000403,0x00000402, + 0x0004003d,0x00000006,0x00000405,0x000000a1,0x0003003e,0x00000404,0x00000405,0x00060039, + 0x00000030,0x00000406,0x00000099,0x00000403,0x00000404,0x00050041,0x00000044,0x00000407, + 0x000003b0,0x00000149,0x0003003e,0x00000407,0x00000406,0x0004003d,0x0000001f,0x00000409, + 0x000003a2,0x0003003e,0x00000408,0x00000409,0x00050041,0x00000044,0x0000040b,0x000003b0, + 0x00000149,0x0004003d,0x00000030,0x0000040c,0x0000040b,0x0003003e,0x0000040a,0x0000040c, + 0x0003003e,0x0000040d,0x00000161,0x0004003d,0x00000006,0x0000040f,0x000000a1,0x0003003e, + 0x0000040e,0x0000040f,0x00080039,0x00000002,0x00000410,0x00000058,0x00000408,0x0000040a, + 0x0000040d,0x0000040e,0x0004003d,0x00000019,0x00000411,0x0000009e,0x00050050,0x00000019, + 0x00000412,0x00000396,0x00000396,0x00050084,0x00000019,0x00000413,0x00000411,0x00000412, + 0x0004007c,0x0000001f,0x00000414,0x00000413,0x0004003d,0x00000006,0x00000415,0x0000009c, + 0x00050084,0x00000006,0x00000416,0x00000415,0x0000010a,0x00050080,0x00000006,0x00000417, + 0x00000416,0x000003a4,0x0004007c,0x0000001e,0x00000418,0x00000417,0x0004003d,0x00000006, + 0x00000419,0x0000009d,0x00050084,0x00000006,0x0000041a,0x00000419,0x0000010a,0x00050080, + 0x00000006,0x0000041b,0x0000041a,0x000003a4,0x0004007c,0x0000001e,0x0000041c,0x0000041b, + 0x00050050,0x0000001f,0x0000041d,0x00000418,0x0000041c,0x00050080,0x0000001f,0x0000041e, + 0x00000414,0x0000041d,0x0003003e,0x00000394,0x0000041e,0x0004003d,0x00000019,0x0000041f, + 0x0000009e,0x00050050,0x00000019,0x00000420,0x000003a4,0x000003a4,0x00050084,0x00000019, + 0x00000421,0x0000041f,0x00000420,0x0004007c,0x0000001f,0x00000422,0x00000421,0x0004003d, + 0x00000006,0x00000423,0x0000009c,0x00050080,0x00000006,0x00000424,0x00000423,0x00000295, + 0x0004007c,0x0000001e,0x00000425,0x00000424,0x0004003d,0x00000006,0x00000426,0x0000009d, + 0x00050080,0x00000006,0x00000427,0x00000426,0x00000295,0x0004007c,0x0000001e,0x00000428, + 0x00000427,0x00050050,0x0000001f,0x00000429,0x00000425,0x00000428,0x00050080,0x0000001f, + 0x0000042a,0x00000422,0x00000429,0x0003003e,0x000003a2,0x0000042a,0x0004003d,0x0000001f, + 0x0000042c,0x00000394,0x0004007c,0x00000019,0x0000042d,0x0000042c,0x0003003e,0x0000042e, + 0x0000042d,0x0004003d,0x00000006,0x00000430,0x000000a1,0x0003003e,0x0000042f,0x00000430, + 0x00060039,0x00000030,0x00000431,0x00000099,0x0000042e,0x0000042f,0x00050041,0x00000044, + 0x00000432,0x000003b0,0x0000042b,0x0003003e,0x00000432,0x00000431,0x0004003d,0x0000001f, + 0x00000434,0x000003a2,0x0003003e,0x00000433,0x00000434,0x00050041,0x00000044,0x00000436, + 0x000003b0,0x0000042b,0x0004003d,0x00000030,0x00000437,0x00000436,0x0003003e,0x00000435, + 0x00000437,0x0003003e,0x00000438,0x00000161,0x0004003d,0x00000006,0x0000043a,0x000000a1, + 0x0003003e,0x00000439,0x0000043a,0x00080039,0x00000002,0x0000043b,0x00000058,0x00000433, + 0x00000435,0x00000438,0x00000439,0x0004003d,0x00000006,0x0000043c,0x000000a0,0x000500b2, + 0x00000077,0x0000043d,0x0000043c,0x00000111,0x000300f7,0x0000043f,0x00000000,0x000400fa, + 0x0000043d,0x0000043e,0x0000043f,0x000200f8,0x0000043e,0x000100fd,0x000200f8,0x0000043f, + 0x00050041,0x00000044,0x00000442,0x000003b0,0x000000fe,0x0004003d,0x00000030,0x00000443, + 0x00000442,0x0003003e,0x00000441,0x00000443,0x00050039,0x00000030,0x00000444,0x00000080, + 0x00000441,0x00050041,0x00000044,0x00000445,0x000003b0,0x000000fe,0x0003003e,0x00000445, + 0x00000444,0x00050041,0x00000044,0x00000447,0x000003b0,0x00000138,0x0004003d,0x00000030, + 0x00000448,0x00000447,0x0003003e,0x00000446,0x00000448,0x00050039,0x00000030,0x00000449, + 0x00000080,0x00000446,0x00050041,0x00000044,0x0000044a,0x000003b0,0x00000138,0x0003003e, + 0x0000044a,0x00000449,0x00050041,0x00000044,0x0000044c,0x000003b0,0x00000149,0x0004003d, + 0x00000030,0x0000044d,0x0000044c,0x0003003e,0x0000044b,0x0000044d,0x00050039,0x00000030, + 0x0000044e,0x00000080,0x0000044b,0x00050041,0x00000044,0x0000044f,0x000003b0,0x00000149, + 0x0003003e,0x0000044f,0x0000044e,0x00050041,0x00000044,0x00000451,0x000003b0,0x0000042b, + 0x0004003d,0x00000030,0x00000452,0x00000451,0x0003003e,0x00000450,0x00000452,0x00050039, + 0x00000030,0x00000453,0x00000080,0x00000450,0x00050041,0x00000044,0x00000454,0x000003b0, + 0x0000042b,0x0003003e,0x00000454,0x00000453,0x0004003d,0x00000006,0x00000455,0x0000009f, + 0x00050089,0x00000006,0x00000456,0x00000455,0x0000018a,0x000500aa,0x00000077,0x00000457, + 0x00000456,0x00000161,0x000300f7,0x00000459,0x00000000,0x000400fa,0x00000457,0x00000458, + 0x00000459,0x000200f8,0x00000458,0x0004003d,0x00000019,0x0000045a,0x0000009e,0x00050050, + 0x00000019,0x0000045b,0x00000295,0x00000295,0x00050084,0x00000019,0x0000045c,0x0000045a, + 0x0000045b,0x0004007c,0x0000001f,0x0000045d,0x0000045c,0x0004003d,0x00000006,0x0000045e, + 0x0000009c,0x00050086,0x00000006,0x0000045f,0x0000045e,0x0000010a,0x0004007c,0x0000001e, + 0x00000460,0x0000045f,0x0004003d,0x00000006,0x00000461,0x0000009d,0x00050086,0x00000006, + 0x00000462,0x00000461,0x0000010a,0x0004007c,0x0000001e,0x00000463,0x00000462,0x00050050, + 0x0000001f,0x00000464,0x00000460,0x00000463,0x00050080,0x0000001f,0x00000465,0x0000045d, + 0x00000464,0x0003003e,0x00000466,0x00000465,0x00050041,0x00000044,0x00000468,0x000003b0, + 0x000000fe,0x0004003d,0x00000030,0x00000469,0x00000468,0x0003003e,0x00000467,0x00000469, + 0x0003003e,0x0000046a,0x00000111,0x0004003d,0x00000006,0x0000046c,0x000000a1,0x0003003e, + 0x0000046b,0x0000046c,0x00080039,0x00000002,0x0000046d,0x00000058,0x00000466,0x00000467, + 0x0000046a,0x0000046b,0x0004003d,0x00000006,0x0000046e,0x0000009c,0x00050086,0x00000006, + 0x0000046f,0x0000046e,0x0000010a,0x0004003d,0x00000006,0x00000470,0x0000009d,0x00050086, + 0x00000006,0x00000471,0x00000470,0x0000010a,0x0003003e,0x00000472,0x0000046f,0x0003003e, + 0x00000473,0x00000471,0x00050041,0x00000044,0x00000475,0x000003b0,0x000000fe,0x0004003d, + 0x00000030,0x00000476,0x00000475,0x0003003e,0x00000474,0x00000476,0x00070039,0x00000002, + 0x00000477,0x0000006c,0x00000472,0x00000473,0x00000474,0x0004003d,0x00000019,0x00000478, + 0x0000009e,0x00050050,0x00000019,0x00000479,0x00000295,0x00000295,0x00050084,0x00000019, + 0x0000047a,0x00000478,0x00000479,0x0004007c,0x0000001f,0x0000047b,0x0000047a,0x0004003d, + 0x00000006,0x0000047c,0x0000009c,0x00050086,0x00000006,0x0000047d,0x0000047c,0x0000010a, + 0x00050080,0x00000006,0x0000047e,0x0000047d,0x000001b2,0x0004007c,0x0000001e,0x0000047f, + 0x0000047e,0x0004003d,0x00000006,0x00000480,0x0000009d,0x00050086,0x00000006,0x00000481, + 0x00000480,0x0000010a,0x0004007c,0x0000001e,0x00000482,0x00000481,0x00050050,0x0000001f, + 0x00000483,0x0000047f,0x00000482,0x00050080,0x0000001f,0x00000484,0x0000047b,0x00000483, + 0x0003003e,0x00000485,0x00000484,0x00050041,0x00000044,0x00000487,0x000003b0,0x00000138, + 0x0004003d,0x00000030,0x00000488,0x00000487,0x0003003e,0x00000486,0x00000488,0x0003003e, + 0x00000489,0x00000111,0x0004003d,0x00000006,0x0000048b,0x000000a1,0x0003003e,0x0000048a, + 0x0000048b,0x00080039,0x00000002,0x0000048c,0x00000058,0x00000485,0x00000486,0x00000489, + 0x0000048a,0x0004003d,0x00000006,0x0000048d,0x0000009c,0x00050086,0x00000006,0x0000048e, + 0x0000048d,0x0000010a,0x00050080,0x00000006,0x0000048f,0x0000048e,0x000001b2,0x0004003d, + 0x00000006,0x00000490,0x0000009d,0x00050086,0x00000006,0x00000491,0x00000490,0x0000010a, + 0x0003003e,0x00000492,0x0000048f,0x0003003e,0x00000493,0x00000491,0x00050041,0x00000044, + 0x00000495,0x000003b0,0x00000138,0x0004003d,0x00000030,0x00000496,0x00000495,0x0003003e, + 0x00000494,0x00000496,0x00070039,0x00000002,0x00000497,0x0000006c,0x00000492,0x00000493, + 0x00000494,0x0004003d,0x00000019,0x00000498,0x0000009e,0x00050050,0x00000019,0x00000499, + 0x00000295,0x00000295,0x00050084,0x00000019,0x0000049a,0x00000498,0x00000499,0x0004007c, + 0x0000001f,0x0000049b,0x0000049a,0x0004003d,0x00000006,0x0000049c,0x0000009c,0x00050086, + 0x00000006,0x0000049d,0x0000049c,0x0000010a,0x0004007c,0x0000001e,0x0000049e,0x0000049d, + 0x0004003d,0x00000006,0x0000049f,0x0000009d,0x00050086,0x00000006,0x000004a0,0x0000049f, + 0x0000010a,0x00050080,0x00000006,0x000004a1,0x000004a0,0x000001b2,0x0004007c,0x0000001e, + 0x000004a2,0x000004a1,0x00050050,0x0000001f,0x000004a3,0x0000049e,0x000004a2,0x00050080, + 0x0000001f,0x000004a4,0x0000049b,0x000004a3,0x0003003e,0x000004a5,0x000004a4,0x00050041, + 0x00000044,0x000004a7,0x000003b0,0x00000149,0x0004003d,0x00000030,0x000004a8,0x000004a7, + 0x0003003e,0x000004a6,0x000004a8,0x0003003e,0x000004a9,0x00000111,0x0004003d,0x00000006, + 0x000004ab,0x000000a1,0x0003003e,0x000004aa,0x000004ab,0x00080039,0x00000002,0x000004ac, + 0x00000058,0x000004a5,0x000004a6,0x000004a9,0x000004aa,0x0004003d,0x00000006,0x000004ad, + 0x0000009c,0x00050086,0x00000006,0x000004ae,0x000004ad,0x0000010a,0x0004003d,0x00000006, + 0x000004af,0x0000009d,0x00050086,0x00000006,0x000004b0,0x000004af,0x0000010a,0x00050080, + 0x00000006,0x000004b1,0x000004b0,0x000001b2,0x0003003e,0x000004b2,0x000004ae,0x0003003e, + 0x000004b3,0x000004b1,0x00050041,0x00000044,0x000004b5,0x000003b0,0x00000149,0x0004003d, + 0x00000030,0x000004b6,0x000004b5,0x0003003e,0x000004b4,0x000004b6,0x00070039,0x00000002, + 0x000004b7,0x0000006c,0x000004b2,0x000004b3,0x000004b4,0x0004003d,0x00000019,0x000004b8, + 0x0000009e,0x00050050,0x00000019,0x000004b9,0x00000295,0x00000295,0x00050084,0x00000019, + 0x000004ba,0x000004b8,0x000004b9,0x0004007c,0x0000001f,0x000004bb,0x000004ba,0x0004003d, + 0x00000006,0x000004bc,0x0000009c,0x00050086,0x00000006,0x000004bd,0x000004bc,0x0000010a, + 0x00050080,0x00000006,0x000004be,0x000004bd,0x000001b2,0x0004007c,0x0000001e,0x000004bf, + 0x000004be,0x0004003d,0x00000006,0x000004c0,0x0000009d,0x00050086,0x00000006,0x000004c1, + 0x000004c0,0x0000010a,0x00050080,0x00000006,0x000004c2,0x000004c1,0x000001b2,0x0004007c, + 0x0000001e,0x000004c3,0x000004c2,0x00050050,0x0000001f,0x000004c4,0x000004bf,0x000004c3, + 0x00050080,0x0000001f,0x000004c5,0x000004bb,0x000004c4,0x0003003e,0x000004c6,0x000004c5, + 0x00050041,0x00000044,0x000004c8,0x000003b0,0x0000042b,0x0004003d,0x00000030,0x000004c9, + 0x000004c8,0x0003003e,0x000004c7,0x000004c9,0x0003003e,0x000004ca,0x00000111,0x0004003d, + 0x00000006,0x000004cc,0x000000a1,0x0003003e,0x000004cb,0x000004cc,0x00080039,0x00000002, + 0x000004cd,0x00000058,0x000004c6,0x000004c7,0x000004ca,0x000004cb,0x0004003d,0x00000006, + 0x000004ce,0x0000009c,0x00050086,0x00000006,0x000004cf,0x000004ce,0x0000010a,0x00050080, + 0x00000006,0x000004d0,0x000004cf,0x000001b2,0x0004003d,0x00000006,0x000004d1,0x0000009d, + 0x00050086,0x00000006,0x000004d2,0x000004d1,0x0000010a,0x00050080,0x00000006,0x000004d3, + 0x000004d2,0x000001b2,0x0003003e,0x000004d4,0x000004d0,0x0003003e,0x000004d5,0x000004d3, + 0x00050041,0x00000044,0x000004d7,0x000003b0,0x0000042b,0x0004003d,0x00000030,0x000004d8, + 0x000004d7,0x0003003e,0x000004d6,0x000004d8,0x00070039,0x00000002,0x000004d9,0x0000006c, + 0x000004d4,0x000004d5,0x000004d6,0x000200f9,0x00000459,0x000200f8,0x00000459,0x000100fd, + 0x00010038,0x00050036,0x00000002,0x000000aa,0x00000000,0x0000009b,0x00030037,0x00000007, + 0x000000a4,0x00030037,0x00000007,0x000000a5,0x00030037,0x00000082,0x000000a6,0x00030037, + 0x00000007,0x000000a7,0x00030037,0x00000007,0x000000a8,0x00030037,0x00000007,0x000000a9, + 0x000200f8,0x000000ab,0x0004003b,0x00000007,0x000004da,0x00000007,0x0004003b,0x00000007, + 0x000004dc,0x00000007,0x0004003b,0x00000082,0x000004de,0x00000007,0x0004003b,0x00000007, + 0x000004e0,0x00000007,0x0004003b,0x00000007,0x000004e2,0x00000007,0x0004003b,0x00000007, + 0x000004e4,0x00000007,0x0004003d,0x00000006,0x000004db,0x000000a4,0x0003003e,0x000004da, + 0x000004db,0x0004003d,0x00000006,0x000004dd,0x000000a5,0x0003003e,0x000004dc,0x000004dd, + 0x0004003d,0x00000019,0x000004df,0x000000a6,0x0003003e,0x000004de,0x000004df,0x0004003d, + 0x00000006,0x000004e1,0x000000a7,0x0003003e,0x000004e0,0x000004e1,0x0004003d,0x00000006, + 0x000004e3,0x000000a8,0x0003003e,0x000004e2,0x000004e3,0x0004003d,0x00000006,0x000004e5, + 0x000000a9,0x0003003e,0x000004e4,0x000004e5,0x000a0039,0x00000002,0x000004e6,0x000000a2, + 0x000004da,0x000004dc,0x000004de,0x000004e0,0x000004e2,0x000004e4,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x000000b2,0x00000000,0x0000009b,0x00030037,0x00000007,0x000000ac, + 0x00030037,0x00000007,0x000000ad,0x00030037,0x00000082,0x000000ae,0x00030037,0x00000007, + 0x000000af,0x00030037,0x00000007,0x000000b0,0x00030037,0x00000007,0x000000b1,0x000200f8, + 0x000000b3,0x0004003b,0x00000044,0x000004e7,0x00000007,0x0004003b,0x00000007,0x000004e8, + 0x00000007,0x0004003b,0x00000007,0x000004ea,0x00000007,0x0004003b,0x00000044,0x000004ed, + 0x00000007,0x0004003b,0x0000002f,0x00000501,0x00000007,0x0004003b,0x00000044,0x00000502, + 0x00000007,0x0004003b,0x00000007,0x00000504,0x00000007,0x0004003b,0x00000007,0x00000506, + 0x00000007,0x0004003b,0x00000007,0x0000050e,0x00000007,0x0004003b,0x00000007,0x0000050f, + 0x00000007,0x0004003b,0x00000044,0x00000511,0x00000007,0x0004003d,0x00000006,0x000004e9, + 0x000000ac,0x0003003e,0x000004e8,0x000004e9,0x0004003d,0x00000006,0x000004eb,0x000000ad, + 0x0003003e,0x000004ea,0x000004eb,0x00060039,0x00000030,0x000004ec,0x00000066,0x000004e8, + 0x000004ea,0x0003003e,0x000004e7,0x000004ec,0x0004003d,0x00000030,0x000004ee,0x000004e7, + 0x0003003e,0x000004ed,0x000004ee,0x00050039,0x00000030,0x000004ef,0x00000080,0x000004ed, + 0x0003003e,0x000004e7,0x000004ef,0x0004003d,0x00000006,0x000004f0,0x000000af,0x00050089, + 0x00000006,0x000004f1,0x000004f0,0x0000018a,0x000500aa,0x00000077,0x000004f2,0x000004f1, + 0x00000161,0x000300f7,0x000004f4,0x00000000,0x000400fa,0x000004f2,0x000004f3,0x000004f4, + 0x000200f8,0x000004f3,0x0004003d,0x00000019,0x000004f5,0x000000ae,0x00050050,0x00000019, + 0x000004f6,0x000001b2,0x000001b2,0x00050084,0x00000019,0x000004f7,0x000004f5,0x000004f6, + 0x0004007c,0x0000001f,0x000004f8,0x000004f7,0x0004003d,0x00000006,0x000004f9,0x000000ac, + 0x00050086,0x00000006,0x000004fa,0x000004f9,0x0000010a,0x0004007c,0x0000001e,0x000004fb, + 0x000004fa,0x0004003d,0x00000006,0x000004fc,0x000000ad,0x00050086,0x00000006,0x000004fd, + 0x000004fc,0x0000010a,0x0004007c,0x0000001e,0x000004fe,0x000004fd,0x00050050,0x0000001f, + 0x000004ff,0x000004fb,0x000004fe,0x00050080,0x0000001f,0x00000500,0x000004f8,0x000004ff, + 0x0003003e,0x00000501,0x00000500,0x0004003d,0x00000030,0x00000503,0x000004e7,0x0003003e, + 0x00000502,0x00000503,0x0004003d,0x00000006,0x00000505,0x000000b0,0x0003003e,0x00000504, + 0x00000505,0x0004003d,0x00000006,0x00000507,0x000000b1,0x0003003e,0x00000506,0x00000507, + 0x00080039,0x00000002,0x00000508,0x00000058,0x00000501,0x00000502,0x00000504,0x00000506, + 0x0004003d,0x00000006,0x00000509,0x000000ac,0x0004003d,0x00000006,0x0000050a,0x000000ad, + 0x00050086,0x00000006,0x0000050b,0x0000050a,0x0000010a,0x00050089,0x00000006,0x0000050c, + 0x0000050b,0x0000010a,0x00050080,0x00000006,0x0000050d,0x00000509,0x0000050c,0x0003003e, + 0x0000050e,0x0000050d,0x0004003d,0x00000006,0x00000510,0x000000ad,0x0003003e,0x0000050f, + 0x00000510,0x0004003d,0x00000030,0x00000512,0x000004e7,0x0003003e,0x00000511,0x00000512, + 0x00070039,0x00000002,0x00000513,0x0000006c,0x0000050e,0x0000050f,0x00000511,0x000200f9, + 0x000004f4,0x000200f8,0x000004f4,0x000100fd,0x00010038,0x00050036,0x00000002,0x000000ba, + 0x00000000,0x0000009b,0x00030037,0x00000007,0x000000b4,0x00030037,0x00000007,0x000000b5, + 0x00030037,0x00000082,0x000000b6,0x00030037,0x00000007,0x000000b7,0x00030037,0x00000007, + 0x000000b8,0x00030037,0x00000007,0x000000b9,0x000200f8,0x000000bb,0x0004003b,0x00000044, + 0x00000518,0x00000007,0x0004003b,0x00000007,0x00000520,0x00000007,0x0004003b,0x00000007, + 0x00000521,0x00000007,0x0004003b,0x00000044,0x00000523,0x00000007,0x0004003b,0x0000002f, + 0x00000537,0x00000007,0x0004003b,0x00000044,0x00000538,0x00000007,0x0004003b,0x00000007, + 0x0000053a,0x00000007,0x0004003b,0x00000007,0x0000053c,0x00000007,0x0004003b,0x00000007, + 0x00000546,0x00000007,0x0004003b,0x00000007,0x00000547,0x00000007,0x0004003b,0x00000044, + 0x00000548,0x00000007,0x0004003d,0x00000006,0x00000514,0x000000b7,0x000500b0,0x00000077, + 0x00000515,0x00000514,0x00000396,0x000300f7,0x00000517,0x00000000,0x000400fa,0x00000515, + 0x00000516,0x00000517,0x000200f8,0x00000516,0x0004003d,0x00000006,0x00000519,0x000000b4, + 0x00050084,0x00000006,0x0000051a,0x00000519,0x0000010a,0x0004003d,0x00000006,0x0000051b, + 0x000000b5,0x00050089,0x00000006,0x0000051c,0x0000051b,0x0000010a,0x00050080,0x00000006, + 0x0000051d,0x0000051a,0x0000051c,0x0004003d,0x00000006,0x0000051e,0x000000b5,0x00050084, + 0x00000006,0x0000051f,0x0000051e,0x0000010a,0x0003003e,0x00000520,0x0000051d,0x0003003e, + 0x00000521,0x0000051f,0x00060039,0x00000030,0x00000522,0x00000066,0x00000520,0x00000521, + 0x0003003e,0x00000518,0x00000522,0x0004003d,0x00000030,0x00000524,0x00000518,0x0003003e, + 0x00000523,0x00000524,0x00050039,0x00000030,0x00000525,0x00000080,0x00000523,0x0003003e, + 0x00000518,0x00000525,0x0004003d,0x00000006,0x00000526,0x000000b7,0x00050089,0x00000006, + 0x00000527,0x00000526,0x0000018a,0x000500aa,0x00000077,0x00000528,0x00000527,0x00000161, + 0x000300f7,0x0000052a,0x00000000,0x000400fa,0x00000528,0x00000529,0x0000052a,0x000200f8, + 0x00000529,0x0004003d,0x00000019,0x0000052b,0x000000b6,0x00050050,0x00000019,0x0000052c, + 0x0000018a,0x0000018a,0x00050084,0x00000019,0x0000052d,0x0000052b,0x0000052c,0x0004007c, + 0x0000001f,0x0000052e,0x0000052d,0x0004003d,0x00000006,0x0000052f,0x000000b4,0x00050086, + 0x00000006,0x00000530,0x0000052f,0x0000010a,0x0004007c,0x0000001e,0x00000531,0x00000530, + 0x0004003d,0x00000006,0x00000532,0x000000b5,0x00050086,0x00000006,0x00000533,0x00000532, + 0x0000010a,0x0004007c,0x0000001e,0x00000534,0x00000533,0x00050050,0x0000001f,0x00000535, + 0x00000531,0x00000534,0x00050080,0x0000001f,0x00000536,0x0000052e,0x00000535,0x0003003e, + 0x00000537,0x00000536,0x0004003d,0x00000030,0x00000539,0x00000518,0x0003003e,0x00000538, + 0x00000539,0x0004003d,0x00000006,0x0000053b,0x000000b8,0x0003003e,0x0000053a,0x0000053b, + 0x0004003d,0x00000006,0x0000053d,0x000000b9,0x0003003e,0x0000053c,0x0000053d,0x00080039, + 0x00000002,0x0000053e,0x00000058,0x00000537,0x00000538,0x0000053a,0x0000053c,0x0004003d, + 0x00000006,0x0000053f,0x000000b4,0x00050084,0x00000006,0x00000540,0x0000053f,0x0000010a, + 0x0004003d,0x00000006,0x00000541,0x000000b5,0x00050086,0x00000006,0x00000542,0x00000541, + 0x0000010a,0x00050080,0x00000006,0x00000543,0x00000540,0x00000542,0x0004003d,0x00000006, + 0x00000544,0x000000b5,0x00050084,0x00000006,0x00000545,0x00000544,0x0000010a,0x0003003e, + 0x00000546,0x00000543,0x0003003e,0x00000547,0x00000545,0x0004003d,0x00000030,0x00000549, + 0x00000518,0x0003003e,0x00000548,0x00000549,0x00070039,0x00000002,0x0000054a,0x0000006c, + 0x00000546,0x00000547,0x00000548,0x000200f9,0x0000052a,0x000200f8,0x0000052a,0x000200f9, + 0x00000517,0x000200f8,0x00000517,0x000100fd,0x00010038,0x00050036,0x00000002,0x000000c2, + 0x00000000,0x0000009b,0x00030037,0x00000007,0x000000bc,0x00030037,0x00000007,0x000000bd, + 0x00030037,0x00000082,0x000000be,0x00030037,0x00000007,0x000000bf,0x00030037,0x00000007, + 0x000000c0,0x00030037,0x00000007,0x000000c1,0x000200f8,0x000000c3,0x0004003b,0x00000044, + 0x0000054f,0x00000007,0x0004003b,0x00000007,0x00000556,0x00000007,0x0004003b,0x00000007, + 0x00000557,0x00000007,0x0004003b,0x00000044,0x00000559,0x00000007,0x0004003b,0x0000002f, + 0x0000056d,0x00000007,0x0004003b,0x00000044,0x0000056e,0x00000007,0x0004003b,0x00000007, + 0x00000570,0x00000007,0x0004003b,0x00000007,0x00000572,0x00000007,0x0004003b,0x00000007, + 0x00000579,0x00000007,0x0004003b,0x00000007,0x0000057a,0x00000007,0x0004003b,0x00000044, + 0x0000057b,0x00000007,0x0004003d,0x00000006,0x0000054b,0x000000bf,0x000500b0,0x00000077, + 0x0000054c,0x0000054b,0x00000295,0x000300f7,0x0000054e,0x00000000,0x000400fa,0x0000054c, + 0x0000054d,0x0000054e,0x000200f8,0x0000054d,0x0004003d,0x00000006,0x00000550,0x000000bc, + 0x00050084,0x00000006,0x00000551,0x00000550,0x0000018a,0x0004003d,0x00000006,0x00000552, + 0x000000bd,0x00050080,0x00000006,0x00000553,0x00000551,0x00000552,0x0004003d,0x00000006, + 0x00000554,0x000000bd,0x00050084,0x00000006,0x00000555,0x00000554,0x0000018a,0x0003003e, + 0x00000556,0x00000553,0x0003003e,0x00000557,0x00000555,0x00060039,0x00000030,0x00000558, + 0x00000066,0x00000556,0x00000557,0x0003003e,0x0000054f,0x00000558,0x0004003d,0x00000030, + 0x0000055a,0x0000054f,0x0003003e,0x00000559,0x0000055a,0x00050039,0x00000030,0x0000055b, + 0x00000080,0x00000559,0x0003003e,0x0000054f,0x0000055b,0x0004003d,0x00000006,0x0000055c, + 0x000000bf,0x00050089,0x00000006,0x0000055d,0x0000055c,0x0000018a,0x000500aa,0x00000077, + 0x0000055e,0x0000055d,0x00000161,0x000300f7,0x00000560,0x00000000,0x000400fa,0x0000055e, + 0x0000055f,0x00000560,0x000200f8,0x0000055f,0x0004003d,0x00000019,0x00000561,0x000000be, + 0x00050050,0x00000019,0x00000562,0x0000010a,0x0000010a,0x00050084,0x00000019,0x00000563, + 0x00000561,0x00000562,0x0004007c,0x0000001f,0x00000564,0x00000563,0x0004003d,0x00000006, + 0x00000565,0x000000bc,0x00050086,0x00000006,0x00000566,0x00000565,0x0000010a,0x0004007c, + 0x0000001e,0x00000567,0x00000566,0x0004003d,0x00000006,0x00000568,0x000000bd,0x00050086, + 0x00000006,0x00000569,0x00000568,0x0000010a,0x0004007c,0x0000001e,0x0000056a,0x00000569, + 0x00050050,0x0000001f,0x0000056b,0x00000567,0x0000056a,0x00050080,0x0000001f,0x0000056c, + 0x00000564,0x0000056b,0x0003003e,0x0000056d,0x0000056c,0x0004003d,0x00000030,0x0000056f, + 0x0000054f,0x0003003e,0x0000056e,0x0000056f,0x0004003d,0x00000006,0x00000571,0x000000c0, + 0x0003003e,0x00000570,0x00000571,0x0004003d,0x00000006,0x00000573,0x000000c1,0x0003003e, + 0x00000572,0x00000573,0x00080039,0x00000002,0x00000574,0x00000058,0x0000056d,0x0000056e, + 0x00000570,0x00000572,0x0004003d,0x00000006,0x00000575,0x000000bc,0x00050086,0x00000006, + 0x00000576,0x00000575,0x0000010a,0x0004003d,0x00000006,0x00000577,0x000000bd,0x00050080, + 0x00000006,0x00000578,0x00000576,0x00000577,0x0003003e,0x00000579,0x00000578,0x0003003e, + 0x0000057a,0x00000161,0x0004003d,0x00000030,0x0000057c,0x0000054f,0x0003003e,0x0000057b, + 0x0000057c,0x00070039,0x00000002,0x0000057d,0x0000006c,0x00000579,0x0000057a,0x0000057b, + 0x000200f9,0x00000560,0x000200f8,0x00000560,0x000200f9,0x0000054e,0x000200f8,0x0000054e, + 0x000100fd,0x00010038,0x00050036,0x00000002,0x000000c9,0x00000000,0x000000c4,0x00030037, + 0x00000082,0x000000c5,0x00030037,0x00000007,0x000000c6,0x00030037,0x00000007,0x000000c7, + 0x00030037,0x00000007,0x000000c8,0x000200f8,0x000000ca,0x0004003b,0x00000044,0x00000582, + 0x00000007,0x0004003b,0x00000007,0x00000583,0x00000007,0x0004003b,0x00000007,0x00000585, + 0x00000007,0x0004003b,0x00000044,0x00000587,0x00000007,0x0004003b,0x0000002f,0x00000591, + 0x00000007,0x0004003b,0x00000044,0x00000592,0x00000007,0x0004003b,0x00000007,0x00000594, + 0x00000007,0x0004003b,0x00000007,0x00000596,0x00000007,0x0004003d,0x00000006,0x0000057e, + 0x000000c6,0x000500b0,0x00000077,0x0000057f,0x0000057e,0x0000018a,0x000300f7,0x00000581, + 0x00000000,0x000400fa,0x0000057f,0x00000580,0x00000581,0x000200f8,0x00000580,0x0004003d, + 0x00000006,0x00000584,0x000000c6,0x0003003e,0x00000583,0x00000584,0x0003003e,0x00000585, + 0x00000161,0x00060039,0x00000030,0x00000586,0x00000066,0x00000583,0x00000585,0x0003003e, + 0x00000582,0x00000586,0x0004003d,0x00000030,0x00000588,0x00000582,0x0003003e,0x00000587, + 0x00000588,0x00050039,0x00000030,0x00000589,0x00000080,0x00000587,0x0003003e,0x00000582, + 0x00000589,0x0004003d,0x00000006,0x0000058a,0x000000c6,0x00050089,0x00000006,0x0000058b, + 0x0000058a,0x0000018a,0x000500aa,0x00000077,0x0000058c,0x0000058b,0x00000161,0x000300f7, + 0x0000058e,0x00000000,0x000400fa,0x0000058c,0x0000058d,0x0000058e,0x000200f8,0x0000058d, + 0x0004003d,0x00000019,0x0000058f,0x000000c5,0x0004007c,0x0000001f,0x00000590,0x0000058f, + 0x0003003e,0x00000591,0x00000590,0x0004003d,0x00000030,0x00000593,0x00000582,0x0003003e, + 0x00000592,0x00000593,0x0004003d,0x00000006,0x00000595,0x000000c7,0x0003003e,0x00000594, + 0x00000595,0x0004003d,0x00000006,0x00000597,0x000000c8,0x0003003e,0x00000596,0x00000597, + 0x00080039,0x00000002,0x00000598,0x00000058,0x00000591,0x00000592,0x00000594,0x00000596, + 0x000200f9,0x0000058e,0x000200f8,0x0000058e,0x000200f9,0x00000581,0x000200f8,0x00000581, + 0x000100fd,0x00010038,0x00050036,0x00000002,0x000000d0,0x00000000,0x000000cb,0x00030037, + 0x00000007,0x000000cc,0x00030037,0x00000007,0x000000cd,0x00030037,0x00000007,0x000000ce, + 0x00030037,0x00000007,0x000000cf,0x000200f8,0x000000d1,0x0004003b,0x0000002f,0x00000599, + 0x00000007,0x0004003b,0x0000002f,0x000005a3,0x00000007,0x0004003b,0x00000044,0x000005ad, + 0x00000007,0x0004003b,0x00000082,0x000005b0,0x00000007,0x0004003b,0x00000007,0x000005b1, + 0x00000007,0x0004003b,0x0000002f,0x000005b4,0x00000007,0x0004003b,0x00000044,0x000005b6, + 0x00000007,0x0004003b,0x00000007,0x000005b8,0x00000007,0x0004003b,0x00000007,0x000005b9, + 0x00000007,0x0004003b,0x00000044,0x000005ce,0x00000007,0x0004003b,0x00000082,0x000005d1, + 0x00000007,0x0004003b,0x00000007,0x000005d2,0x00000007,0x0004003b,0x0000002f,0x000005d5, + 0x00000007,0x0004003b,0x00000044,0x000005d7,0x00000007,0x0004003b,0x00000007,0x000005d9, + 0x00000007,0x0004003b,0x00000007,0x000005da,0x00000007,0x0004003b,0x00000044,0x000005ef, + 0x00000007,0x0004003b,0x00000082,0x000005f2,0x00000007,0x0004003b,0x00000007,0x000005f3, + 0x00000007,0x0004003b,0x0000002f,0x000005f6,0x00000007,0x0004003b,0x00000044,0x000005f8, + 0x00000007,0x0004003b,0x00000007,0x000005fa,0x00000007,0x0004003b,0x00000007,0x000005fb, + 0x00000007,0x0004003b,0x00000044,0x00000610,0x00000007,0x0004003b,0x00000082,0x00000613, + 0x00000007,0x0004003b,0x00000007,0x00000614,0x00000007,0x0004003b,0x0000002f,0x00000617, + 0x00000007,0x0004003b,0x00000044,0x00000619,0x00000007,0x0004003b,0x00000007,0x0000061b, + 0x00000007,0x0004003b,0x00000007,0x0000061c,0x00000007,0x0004003b,0x00000044,0x00000624, + 0x00000007,0x0004003b,0x00000044,0x00000625,0x00000007,0x0004003b,0x00000044,0x00000627, + 0x00000007,0x0004003b,0x00000044,0x00000629,0x00000007,0x0004003b,0x00000044,0x0000062b, + 0x00000007,0x0004003b,0x0000002f,0x00000633,0x00000007,0x0004003b,0x00000044,0x00000634, + 0x00000007,0x0004003b,0x00000007,0x00000636,0x00000007,0x0004003b,0x00000007,0x00000637, + 0x00000007,0x0004003b,0x00000007,0x0000063a,0x00000007,0x0004003b,0x00000007,0x0000063c, + 0x00000007,0x0004003b,0x00000044,0x0000063e,0x00000007,0x0004003d,0x00000006,0x0000059a, + 0x000000cc,0x00050084,0x00000006,0x0000059b,0x0000059a,0x0000018a,0x00050080,0x00000006, + 0x0000059c,0x0000059b,0x00000161,0x0004007c,0x0000001e,0x0000059d,0x0000059c,0x0004003d, + 0x00000006,0x0000059e,0x000000cd,0x00050084,0x00000006,0x0000059f,0x0000059e,0x0000018a, + 0x00050080,0x00000006,0x000005a0,0x0000059f,0x00000161,0x0004007c,0x0000001e,0x000005a1, + 0x000005a0,0x00050050,0x0000001f,0x000005a2,0x0000059d,0x000005a1,0x0003003e,0x00000599, + 0x000005a2,0x0004003d,0x00000006,0x000005a4,0x000000cc,0x00050084,0x00000006,0x000005a5, + 0x000005a4,0x0000010a,0x00050080,0x00000006,0x000005a6,0x000005a5,0x00000161,0x0004007c, + 0x0000001e,0x000005a7,0x000005a6,0x0004003d,0x00000006,0x000005a8,0x000000cd,0x00050084, + 0x00000006,0x000005a9,0x000005a8,0x0000010a,0x00050080,0x00000006,0x000005aa,0x000005a9, + 0x00000161,0x0004007c,0x0000001e,0x000005ab,0x000005aa,0x00050050,0x0000001f,0x000005ac, + 0x000005a7,0x000005ab,0x0003003e,0x000005a3,0x000005ac,0x0004003d,0x0000001f,0x000005ae, + 0x00000599,0x0004007c,0x00000019,0x000005af,0x000005ae,0x0003003e,0x000005b0,0x000005af, + 0x0004003d,0x00000006,0x000005b2,0x000000cf,0x0003003e,0x000005b1,0x000005b2,0x00060039, + 0x00000030,0x000005b3,0x0000008e,0x000005b0,0x000005b1,0x0003003e,0x000005ad,0x000005b3, + 0x0004003d,0x0000001f,0x000005b5,0x000005a3,0x0003003e,0x000005b4,0x000005b5,0x0004003d, + 0x00000030,0x000005b7,0x000005ad,0x0003003e,0x000005b6,0x000005b7,0x0003003e,0x000005b8, + 0x0000019e,0x0004003d,0x00000006,0x000005ba,0x000000cf,0x0003003e,0x000005b9,0x000005ba, + 0x00080039,0x00000002,0x000005bb,0x00000058,0x000005b4,0x000005b6,0x000005b8,0x000005b9, + 0x0004003d,0x00000006,0x000005bc,0x000000cc,0x00050084,0x00000006,0x000005bd,0x000005bc, + 0x0000018a,0x00050080,0x00000006,0x000005be,0x000005bd,0x0000010a,0x0004007c,0x0000001e, + 0x000005bf,0x000005be,0x0004003d,0x00000006,0x000005c0,0x000000cd,0x00050084,0x00000006, + 0x000005c1,0x000005c0,0x0000018a,0x00050080,0x00000006,0x000005c2,0x000005c1,0x00000161, + 0x0004007c,0x0000001e,0x000005c3,0x000005c2,0x00050050,0x0000001f,0x000005c4,0x000005bf, + 0x000005c3,0x0003003e,0x00000599,0x000005c4,0x0004003d,0x00000006,0x000005c5,0x000000cc, + 0x00050084,0x00000006,0x000005c6,0x000005c5,0x0000010a,0x00050080,0x00000006,0x000005c7, + 0x000005c6,0x00000111,0x0004007c,0x0000001e,0x000005c8,0x000005c7,0x0004003d,0x00000006, + 0x000005c9,0x000000cd,0x00050084,0x00000006,0x000005ca,0x000005c9,0x0000010a,0x00050080, + 0x00000006,0x000005cb,0x000005ca,0x00000161,0x0004007c,0x0000001e,0x000005cc,0x000005cb, + 0x00050050,0x0000001f,0x000005cd,0x000005c8,0x000005cc,0x0003003e,0x000005a3,0x000005cd, + 0x0004003d,0x0000001f,0x000005cf,0x00000599,0x0004007c,0x00000019,0x000005d0,0x000005cf, + 0x0003003e,0x000005d1,0x000005d0,0x0004003d,0x00000006,0x000005d3,0x000000cf,0x0003003e, + 0x000005d2,0x000005d3,0x00060039,0x00000030,0x000005d4,0x0000008e,0x000005d1,0x000005d2, + 0x0003003e,0x000005ce,0x000005d4,0x0004003d,0x0000001f,0x000005d6,0x000005a3,0x0003003e, + 0x000005d5,0x000005d6,0x0004003d,0x00000030,0x000005d8,0x000005ce,0x0003003e,0x000005d7, + 0x000005d8,0x0003003e,0x000005d9,0x0000019e,0x0004003d,0x00000006,0x000005db,0x000000cf, + 0x0003003e,0x000005da,0x000005db,0x00080039,0x00000002,0x000005dc,0x00000058,0x000005d5, + 0x000005d7,0x000005d9,0x000005da,0x0004003d,0x00000006,0x000005dd,0x000000cc,0x00050084, + 0x00000006,0x000005de,0x000005dd,0x0000018a,0x00050080,0x00000006,0x000005df,0x000005de, + 0x00000161,0x0004007c,0x0000001e,0x000005e0,0x000005df,0x0004003d,0x00000006,0x000005e1, + 0x000000cd,0x00050084,0x00000006,0x000005e2,0x000005e1,0x0000018a,0x00050080,0x00000006, + 0x000005e3,0x000005e2,0x0000010a,0x0004007c,0x0000001e,0x000005e4,0x000005e3,0x00050050, + 0x0000001f,0x000005e5,0x000005e0,0x000005e4,0x0003003e,0x00000599,0x000005e5,0x0004003d, + 0x00000006,0x000005e6,0x000000cc,0x00050084,0x00000006,0x000005e7,0x000005e6,0x0000010a, + 0x00050080,0x00000006,0x000005e8,0x000005e7,0x00000161,0x0004007c,0x0000001e,0x000005e9, + 0x000005e8,0x0004003d,0x00000006,0x000005ea,0x000000cd,0x00050084,0x00000006,0x000005eb, + 0x000005ea,0x0000010a,0x00050080,0x00000006,0x000005ec,0x000005eb,0x00000111,0x0004007c, + 0x0000001e,0x000005ed,0x000005ec,0x00050050,0x0000001f,0x000005ee,0x000005e9,0x000005ed, + 0x0003003e,0x000005a3,0x000005ee,0x0004003d,0x0000001f,0x000005f0,0x00000599,0x0004007c, + 0x00000019,0x000005f1,0x000005f0,0x0003003e,0x000005f2,0x000005f1,0x0004003d,0x00000006, + 0x000005f4,0x000000cf,0x0003003e,0x000005f3,0x000005f4,0x00060039,0x00000030,0x000005f5, + 0x0000008e,0x000005f2,0x000005f3,0x0003003e,0x000005ef,0x000005f5,0x0004003d,0x0000001f, + 0x000005f7,0x000005a3,0x0003003e,0x000005f6,0x000005f7,0x0004003d,0x00000030,0x000005f9, + 0x000005ef,0x0003003e,0x000005f8,0x000005f9,0x0003003e,0x000005fa,0x0000019e,0x0004003d, + 0x00000006,0x000005fc,0x000000cf,0x0003003e,0x000005fb,0x000005fc,0x00080039,0x00000002, + 0x000005fd,0x00000058,0x000005f6,0x000005f8,0x000005fa,0x000005fb,0x0004003d,0x00000006, + 0x000005fe,0x000000cc,0x00050084,0x00000006,0x000005ff,0x000005fe,0x0000018a,0x00050080, + 0x00000006,0x00000600,0x000005ff,0x0000010a,0x0004007c,0x0000001e,0x00000601,0x00000600, + 0x0004003d,0x00000006,0x00000602,0x000000cd,0x00050084,0x00000006,0x00000603,0x00000602, + 0x0000018a,0x00050080,0x00000006,0x00000604,0x00000603,0x0000010a,0x0004007c,0x0000001e, + 0x00000605,0x00000604,0x00050050,0x0000001f,0x00000606,0x00000601,0x00000605,0x0003003e, + 0x00000599,0x00000606,0x0004003d,0x00000006,0x00000607,0x000000cc,0x00050084,0x00000006, + 0x00000608,0x00000607,0x0000010a,0x00050080,0x00000006,0x00000609,0x00000608,0x00000111, + 0x0004007c,0x0000001e,0x0000060a,0x00000609,0x0004003d,0x00000006,0x0000060b,0x000000cd, + 0x00050084,0x00000006,0x0000060c,0x0000060b,0x0000010a,0x00050080,0x00000006,0x0000060d, + 0x0000060c,0x00000111,0x0004007c,0x0000001e,0x0000060e,0x0000060d,0x00050050,0x0000001f, + 0x0000060f,0x0000060a,0x0000060e,0x0003003e,0x000005a3,0x0000060f,0x0004003d,0x0000001f, + 0x00000611,0x00000599,0x0004007c,0x00000019,0x00000612,0x00000611,0x0003003e,0x00000613, + 0x00000612,0x0004003d,0x00000006,0x00000615,0x000000cf,0x0003003e,0x00000614,0x00000615, + 0x00060039,0x00000030,0x00000616,0x0000008e,0x00000613,0x00000614,0x0003003e,0x00000610, + 0x00000616,0x0004003d,0x0000001f,0x00000618,0x000005a3,0x0003003e,0x00000617,0x00000618, + 0x0004003d,0x00000030,0x0000061a,0x00000610,0x0003003e,0x00000619,0x0000061a,0x0003003e, + 0x0000061b,0x0000019e,0x0004003d,0x00000006,0x0000061d,0x000000cf,0x0003003e,0x0000061c, + 0x0000061d,0x00080039,0x00000002,0x0000061e,0x00000058,0x00000617,0x00000619,0x0000061b, + 0x0000061c,0x0004003d,0x00000006,0x0000061f,0x000000ce,0x000500b2,0x00000077,0x00000620, + 0x0000061f,0x000001a8,0x000300f7,0x00000622,0x00000000,0x000400fa,0x00000620,0x00000621, + 0x00000622,0x000200f8,0x00000621,0x000100fd,0x000200f8,0x00000622,0x0004003d,0x00000030, + 0x00000626,0x000005ad,0x0003003e,0x00000625,0x00000626,0x0004003d,0x00000030,0x00000628, + 0x000005ce,0x0003003e,0x00000627,0x00000628,0x0004003d,0x00000030,0x0000062a,0x000005ef, + 0x0003003e,0x00000629,0x0000062a,0x0004003d,0x00000030,0x0000062c,0x00000610,0x0003003e, + 0x0000062b,0x0000062c,0x00080039,0x00000030,0x0000062d,0x00000073,0x00000625,0x00000627, + 0x00000629,0x0000062b,0x0003003e,0x00000624,0x0000062d,0x0004003d,0x00000006,0x0000062e, + 0x000000cc,0x0004007c,0x0000001e,0x0000062f,0x0000062e,0x0004003d,0x00000006,0x00000630, + 0x000000cd,0x0004007c,0x0000001e,0x00000631,0x00000630,0x00050050,0x0000001f,0x00000632, + 0x0000062f,0x00000631,0x0003003e,0x00000633,0x00000632,0x0004003d,0x00000030,0x00000635, + 0x00000624,0x0003003e,0x00000634,0x00000635,0x0003003e,0x00000636,0x000001a8,0x0004003d, + 0x00000006,0x00000638,0x000000cf,0x0003003e,0x00000637,0x00000638,0x00080039,0x00000002, + 0x00000639,0x00000058,0x00000633,0x00000634,0x00000636,0x00000637,0x0004003d,0x00000006, + 0x0000063b,0x000000cc,0x0003003e,0x0000063a,0x0000063b,0x0004003d,0x00000006,0x0000063d, + 0x000000cd,0x0003003e,0x0000063c,0x0000063d,0x0004003d,0x00000030,0x0000063f,0x00000624, + 0x0003003e,0x0000063e,0x0000063f,0x00070039,0x00000002,0x00000640,0x0000006c,0x0000063a, + 0x0000063c,0x0000063e,0x000100fd,0x00010038,0x00050036,0x00000002,0x000000da,0x00000000, + 0x000000d2,0x00030037,0x00000007,0x000000d3,0x00030037,0x00000007,0x000000d4,0x00030037, + 0x00000082,0x000000d5,0x00030037,0x00000007,0x000000d6,0x00030037,0x00000007,0x000000d7, + 0x00030037,0x00000007,0x000000d8,0x00030037,0x00000007,0x000000d9,0x000200f8,0x000000db, + 0x0004003b,0x00000007,0x00000648,0x00000007,0x0004003b,0x00000007,0x0000064a,0x00000007, + 0x0004003b,0x00000082,0x0000064c,0x00000007,0x0004003b,0x00000007,0x0000064e,0x00000007, + 0x0004003b,0x00000007,0x00000650,0x00000007,0x0004003b,0x00000007,0x00000652,0x00000007, + 0x0004003b,0x00000007,0x0000065f,0x00000007,0x0004003b,0x00000007,0x00000661,0x00000007, + 0x0004003b,0x00000082,0x00000663,0x00000007,0x0004003b,0x00000007,0x00000665,0x00000007, + 0x0004003b,0x00000007,0x00000667,0x00000007,0x0004003b,0x00000007,0x00000668,0x00000007, + 0x0004003b,0x00000007,0x00000675,0x00000007,0x0004003b,0x00000007,0x00000677,0x00000007, + 0x0004003b,0x00000082,0x00000679,0x00000007,0x0004003b,0x00000007,0x0000067b,0x00000007, + 0x0004003b,0x00000007,0x0000067d,0x00000007,0x0004003b,0x00000007,0x0000067e,0x00000007, + 0x0004003b,0x00000082,0x0000068b,0x00000007,0x0004003b,0x00000007,0x0000068d,0x00000007, + 0x0004003b,0x00000007,0x0000068f,0x00000007,0x0004003b,0x00000007,0x00000690,0x00000007, + 0x0004003d,0x00000006,0x00000641,0x000000d8,0x0004003d,0x00000006,0x00000642,0x000000d7, + 0x000500b2,0x00000077,0x00000643,0x00000641,0x00000642,0x000300f7,0x00000645,0x00000000, + 0x000400fa,0x00000643,0x00000644,0x00000645,0x000200f8,0x00000644,0x000100fd,0x000200f8, + 0x00000645,0x00040039,0x00000002,0x00000647,0x00000075,0x0004003d,0x00000006,0x00000649, + 0x000000d3,0x0003003e,0x00000648,0x00000649,0x0004003d,0x00000006,0x0000064b,0x000000d4, + 0x0003003e,0x0000064a,0x0000064b,0x0004003d,0x00000019,0x0000064d,0x000000d5,0x0003003e, + 0x0000064c,0x0000064d,0x0004003d,0x00000006,0x0000064f,0x000000d6,0x0003003e,0x0000064e, + 0x0000064f,0x0004003d,0x00000006,0x00000651,0x000000d7,0x0003003e,0x00000650,0x00000651, + 0x0004003d,0x00000006,0x00000653,0x000000d9,0x0003003e,0x00000652,0x00000653,0x000a0039, + 0x00000002,0x00000654,0x000000b2,0x00000648,0x0000064a,0x0000064c,0x0000064e,0x00000650, + 0x00000652,0x0004003d,0x00000006,0x00000655,0x000000d8,0x0004003d,0x00000006,0x00000656, + 0x000000d7,0x00050080,0x00000006,0x00000657,0x00000656,0x00000111,0x000500b2,0x00000077, + 0x00000658,0x00000655,0x00000657,0x000300f7,0x0000065a,0x00000000,0x000400fa,0x00000658, + 0x00000659,0x0000065a,0x000200f8,0x00000659,0x000100fd,0x000200f8,0x0000065a,0x00040039, + 0x00000002,0x0000065c,0x00000075,0x0004003d,0x00000006,0x0000065d,0x000000d7,0x00050080, + 0x00000006,0x0000065e,0x0000065d,0x00000111,0x0004003d,0x00000006,0x00000660,0x000000d3, + 0x0003003e,0x0000065f,0x00000660,0x0004003d,0x00000006,0x00000662,0x000000d4,0x0003003e, + 0x00000661,0x00000662,0x0004003d,0x00000019,0x00000664,0x000000d5,0x0003003e,0x00000663, + 0x00000664,0x0004003d,0x00000006,0x00000666,0x000000d6,0x0003003e,0x00000665,0x00000666, + 0x0003003e,0x00000667,0x0000065e,0x0004003d,0x00000006,0x00000669,0x000000d9,0x0003003e, + 0x00000668,0x00000669,0x000a0039,0x00000002,0x0000066a,0x000000ba,0x0000065f,0x00000661, + 0x00000663,0x00000665,0x00000667,0x00000668,0x0004003d,0x00000006,0x0000066b,0x000000d8, + 0x0004003d,0x00000006,0x0000066c,0x000000d7,0x00050080,0x00000006,0x0000066d,0x0000066c, + 0x0000010a,0x000500b2,0x00000077,0x0000066e,0x0000066b,0x0000066d,0x000300f7,0x00000670, + 0x00000000,0x000400fa,0x0000066e,0x0000066f,0x00000670,0x000200f8,0x0000066f,0x000100fd, + 0x000200f8,0x00000670,0x00040039,0x00000002,0x00000672,0x00000075,0x0004003d,0x00000006, + 0x00000673,0x000000d7,0x00050080,0x00000006,0x00000674,0x00000673,0x0000010a,0x0004003d, + 0x00000006,0x00000676,0x000000d3,0x0003003e,0x00000675,0x00000676,0x0004003d,0x00000006, + 0x00000678,0x000000d4,0x0003003e,0x00000677,0x00000678,0x0004003d,0x00000019,0x0000067a, + 0x000000d5,0x0003003e,0x00000679,0x0000067a,0x0004003d,0x00000006,0x0000067c,0x000000d6, + 0x0003003e,0x0000067b,0x0000067c,0x0003003e,0x0000067d,0x00000674,0x0004003d,0x00000006, + 0x0000067f,0x000000d9,0x0003003e,0x0000067e,0x0000067f,0x000a0039,0x00000002,0x00000680, + 0x000000c2,0x00000675,0x00000677,0x00000679,0x0000067b,0x0000067d,0x0000067e,0x0004003d, + 0x00000006,0x00000681,0x000000d8,0x0004003d,0x00000006,0x00000682,0x000000d7,0x00050080, + 0x00000006,0x00000683,0x00000682,0x0000010b,0x000500b2,0x00000077,0x00000684,0x00000681, + 0x00000683,0x000300f7,0x00000686,0x00000000,0x000400fa,0x00000684,0x00000685,0x00000686, + 0x000200f8,0x00000685,0x000100fd,0x000200f8,0x00000686,0x00040039,0x00000002,0x00000688, + 0x00000075,0x0004003d,0x00000006,0x00000689,0x000000d7,0x00050080,0x00000006,0x0000068a, + 0x00000689,0x0000010b,0x0004003d,0x00000019,0x0000068c,0x000000d5,0x0003003e,0x0000068b, + 0x0000068c,0x0004003d,0x00000006,0x0000068e,0x000000d6,0x0003003e,0x0000068d,0x0000068e, + 0x0003003e,0x0000068f,0x0000068a,0x0004003d,0x00000006,0x00000691,0x000000d9,0x0003003e, + 0x00000690,0x00000691,0x00080039,0x00000002,0x00000692,0x000000c9,0x0000068b,0x0000068d, + 0x0000068f,0x00000690,0x000100fd,0x00010038,0x00050036,0x00000002,0x000000e2,0x00000000, + 0x000000dc,0x00030037,0x00000082,0x000000dd,0x00030037,0x00000007,0x000000de,0x00030037, + 0x00000007,0x000000df,0x00030037,0x00000007,0x000000e0,0x00030037,0x00000007,0x000000e1, + 0x000200f8,0x000000e3,0x0004003b,0x00000082,0x00000693,0x00000007,0x0004003b,0x00000007, + 0x00000696,0x00000007,0x0004003b,0x00000007,0x00000698,0x00000007,0x0004003b,0x00000007, + 0x000006a1,0x00000007,0x0004003b,0x00000007,0x000006a9,0x00000007,0x0004003b,0x00000007, + 0x000006ab,0x00000007,0x0004003b,0x00000082,0x000006ad,0x00000007,0x0004003b,0x00000007, + 0x000006af,0x00000007,0x0004003b,0x00000007,0x000006b1,0x00000007,0x0004003b,0x00000007, + 0x000006b3,0x00000007,0x0004003b,0x00000007,0x000006b6,0x00000007,0x0004003b,0x00000007, + 0x000006b8,0x00000007,0x0004003b,0x00000082,0x000006ba,0x00000007,0x0004003b,0x00000007, + 0x000006bc,0x00000007,0x0004003b,0x00000007,0x000006be,0x00000007,0x0004003b,0x00000007, + 0x000006bf,0x00000007,0x0004003b,0x00000007,0x000006c1,0x00000007,0x0004003b,0x00000007, + 0x000006c9,0x00000007,0x0004003b,0x00000007,0x000006cb,0x00000007,0x0004003b,0x00000007, + 0x000006cd,0x00000007,0x0004003b,0x00000007,0x000006d3,0x00000007,0x0004003b,0x00000007, + 0x000006d6,0x00000007,0x0004003b,0x00000007,0x000006d8,0x00000007,0x0004003b,0x00000007, + 0x000006da,0x00000007,0x0004003b,0x00000007,0x000006dc,0x00000007,0x0004003b,0x00000007, + 0x000006df,0x00000007,0x0004003b,0x00000007,0x000006e1,0x00000007,0x0004003b,0x00000082, + 0x000006e3,0x00000007,0x0004003b,0x00000007,0x000006e4,0x00000007,0x0004003b,0x00000007, + 0x000006e6,0x00000007,0x0004003b,0x00000007,0x000006e7,0x00000007,0x0004003b,0x00000007, + 0x000006e9,0x00000007,0x0004003d,0x00000006,0x00000694,0x000000de,0x00050089,0x00000006, + 0x00000695,0x00000694,0x00000396,0x0003003e,0x00000696,0x00000695,0x00050039,0x00000019, + 0x00000697,0x0000001c,0x00000696,0x0003003e,0x00000693,0x00000697,0x00050041,0x00000007, + 0x00000699,0x00000693,0x00000161,0x0004003d,0x00000006,0x0000069a,0x00000699,0x0004003d, + 0x00000006,0x0000069b,0x000000de,0x000500c2,0x00000006,0x0000069d,0x0000069b,0x0000069c, + 0x00050089,0x00000006,0x0000069e,0x0000069d,0x0000010a,0x00050084,0x00000006,0x0000069f, + 0x000001b2,0x0000069e,0x00050080,0x00000006,0x000006a0,0x0000069a,0x0000069f,0x0003003e, + 0x00000698,0x000006a0,0x00050041,0x00000007,0x000006a2,0x00000693,0x00000111,0x0004003d, + 0x00000006,0x000006a3,0x000006a2,0x0004003d,0x00000006,0x000006a4,0x000000de,0x000500c2, + 0x00000006,0x000006a6,0x000006a4,0x000006a5,0x00050084,0x00000006,0x000006a7,0x000001b2, + 0x000006a6,0x00050080,0x00000006,0x000006a8,0x000006a3,0x000006a7,0x0003003e,0x000006a1, + 0x000006a8,0x0004003d,0x00000006,0x000006aa,0x00000698,0x0003003e,0x000006a9,0x000006aa, + 0x0004003d,0x00000006,0x000006ac,0x000006a1,0x0003003e,0x000006ab,0x000006ac,0x0004003d, + 0x00000019,0x000006ae,0x000000dd,0x0003003e,0x000006ad,0x000006ae,0x0004003d,0x00000006, + 0x000006b0,0x000000de,0x0003003e,0x000006af,0x000006b0,0x0004003d,0x00000006,0x000006b2, + 0x000000df,0x0003003e,0x000006b1,0x000006b2,0x0004003d,0x00000006,0x000006b4,0x000000e1, + 0x0003003e,0x000006b3,0x000006b4,0x000a0039,0x00000002,0x000006b5,0x000000aa,0x000006a9, + 0x000006ab,0x000006ad,0x000006af,0x000006b1,0x000006b3,0x0004003d,0x00000006,0x000006b7, + 0x00000698,0x0003003e,0x000006b6,0x000006b7,0x0004003d,0x00000006,0x000006b9,0x000006a1, + 0x0003003e,0x000006b8,0x000006b9,0x0004003d,0x00000019,0x000006bb,0x000000dd,0x0003003e, + 0x000006ba,0x000006bb,0x0004003d,0x00000006,0x000006bd,0x000000de,0x0003003e,0x000006bc, + 0x000006bd,0x0003003e,0x000006be,0x0000010a,0x0004003d,0x00000006,0x000006c0,0x000000df, + 0x0003003e,0x000006bf,0x000006c0,0x0004003d,0x00000006,0x000006c2,0x000000e1,0x0003003e, + 0x000006c1,0x000006c2,0x000b0039,0x00000002,0x000006c3,0x000000da,0x000006b6,0x000006b8, + 0x000006ba,0x000006bc,0x000006be,0x000006bf,0x000006c1,0x0004003d,0x00000006,0x000006c4, + 0x000000df,0x000500b2,0x00000077,0x000006c5,0x000006c4,0x0000019e,0x000300f7,0x000006c7, + 0x00000000,0x000400fa,0x000006c5,0x000006c6,0x000006c7,0x000200f8,0x000006c6,0x000100fd, + 0x000200f8,0x000006c7,0x0004003d,0x00000006,0x000006ca,0x000000e0,0x0003003e,0x000006c9, + 0x000006ca,0x0004003d,0x00000006,0x000006cc,0x000000de,0x0003003e,0x000006cb,0x000006cc, + 0x0004003d,0x00000006,0x000006ce,0x000000e1,0x0003003e,0x000006cd,0x000006ce,0x00070039, + 0x00000077,0x000006cf,0x0000007c,0x000006c9,0x000006cb,0x000006cd,0x000300f7,0x000006d1, + 0x00000000,0x000400fa,0x000006cf,0x000006d0,0x000006d1,0x000200f8,0x000006d0,0x000100fd, + 0x000200f8,0x000006d1,0x0004003d,0x00000006,0x000006d4,0x000000e1,0x0003003e,0x000006d3, + 0x000006d4,0x00050039,0x00000002,0x000006d5,0x00000061,0x000006d3,0x0004003d,0x00000006, + 0x000006d7,0x00000698,0x0003003e,0x000006d6,0x000006d7,0x0004003d,0x00000006,0x000006d9, + 0x000006a1,0x0003003e,0x000006d8,0x000006d9,0x0004003d,0x00000006,0x000006db,0x000000df, + 0x0003003e,0x000006da,0x000006db,0x0004003d,0x00000006,0x000006dd,0x000000e1,0x0003003e, + 0x000006dc,0x000006dd,0x00080039,0x00000002,0x000006de,0x000000d0,0x000006d6,0x000006d8, + 0x000006da,0x000006dc,0x0004003d,0x00000006,0x000006e0,0x00000698,0x0003003e,0x000006df, + 0x000006e0,0x0004003d,0x00000006,0x000006e2,0x000006a1,0x0003003e,0x000006e1,0x000006e2, + 0x0003003e,0x000006e3,0x00000348,0x0004003d,0x00000006,0x000006e5,0x000000de,0x0003003e, + 0x000006e4,0x000006e5,0x0003003e,0x000006e6,0x000001b2,0x0004003d,0x00000006,0x000006e8, + 0x000000df,0x0003003e,0x000006e7,0x000006e8,0x0004003d,0x00000006,0x000006ea,0x000000e1, + 0x0003003e,0x000006e9,0x000006ea,0x000b0039,0x00000002,0x000006eb,0x000000da,0x000006df, + 0x000006e1,0x000006e3,0x000006e4,0x000006e6,0x000006e7,0x000006e9,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x000000eb,0x00000000,0x000000e4,0x00030037,0x00000082,0x000000e5, + 0x00030037,0x00000007,0x000000e6,0x00030037,0x00000007,0x000000e7,0x00030037,0x00000007, + 0x000000e8,0x00030037,0x00000007,0x000000e9,0x00030037,0x00000082,0x000000ea,0x000200f8, + 0x000000ec,0x0004003b,0x00000082,0x000006ef,0x00000007,0x0004003b,0x00000007,0x000006f0, + 0x00000007,0x0004003b,0x00000007,0x000006f2,0x00000007,0x0004003b,0x00000007,0x000006f4, + 0x00000007,0x0004003b,0x00000007,0x000006f6,0x00000007,0x0004003d,0x00000019,0x000006ec, + 0x000000e5,0x0004003d,0x00000019,0x000006ed,0x000000ea,0x00050080,0x00000019,0x000006ee, + 0x000006ec,0x000006ed,0x0003003e,0x000006ef,0x000006ee,0x0004003d,0x00000006,0x000006f1, + 0x000000e6,0x0003003e,0x000006f0,0x000006f1,0x0004003d,0x00000006,0x000006f3,0x000000e7, + 0x0003003e,0x000006f2,0x000006f3,0x0004003d,0x00000006,0x000006f5,0x000000e8,0x0003003e, + 0x000006f4,0x000006f5,0x0004003d,0x00000006,0x000006f7,0x000000e9,0x0003003e,0x000006f6, + 0x000006f7,0x00090039,0x00000002,0x000006f8,0x000000e2,0x000006ef,0x000006f0,0x000006f2, + 0x000006f4,0x000006f6,0x000100fd,0x00010038,0x00050036,0x00000002,0x000000f2,0x00000000, + 0x000000ef,0x00030037,0x000000ee,0x000000f0,0x00030037,0x00000035,0x000000f1,0x000200f8, + 0x000000f3,0x0004003b,0x00000082,0x00000704,0x00000007,0x0004003b,0x00000007,0x00000705, + 0x00000007,0x0004003b,0x00000007,0x00000706,0x00000007,0x0004003b,0x00000007,0x00000707, + 0x00000007,0x0004003b,0x00000007,0x00000708,0x00000007,0x0004003b,0x00000082,0x00000709, + 0x00000007,0x0004003d,0x000000ed,0x000006f9,0x000000f0,0x0007004f,0x0000001f,0x000006fa, + 0x000006f9,0x000006f9,0x00000000,0x00000001,0x0004007c,0x00000019,0x000006fb,0x000006fa, + 0x0004003d,0x0000001e,0x000006fc,0x000000f1,0x0004007c,0x00000006,0x000006fd,0x000006fc, + 0x00040039,0x00000006,0x000006fe,0x00000028,0x00040039,0x00000006,0x000006ff,0x0000002a, + 0x00050041,0x00000035,0x00000700,0x000000f0,0x0000010a,0x0004003d,0x0000001e,0x00000701, + 0x00000700,0x0004007c,0x00000006,0x00000702,0x00000701,0x00040039,0x00000019,0x00000703, + 0x0000002d,0x0003003e,0x00000704,0x000006fb,0x0003003e,0x00000705,0x000006fd,0x0003003e, + 0x00000706,0x000006fe,0x0003003e,0x00000707,0x000006ff,0x0003003e,0x00000708,0x00000702, + 0x0003003e,0x00000709,0x00000703,0x000a0039,0x00000002,0x0000070a,0x000000eb,0x00000704, + 0x00000705,0x00000706,0x00000707,0x00000708,0x00000709,0x000100fd,0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_fi_interpolate_comp_spv.h b/gpu/vk/shaders/fsr3_fi_interpolate_comp_spv.h new file mode 100644 index 000000000..faf6f6c6a --- /dev/null +++ b/gpu/vk/shaders/fsr3_fi_interpolate_comp_spv.h @@ -0,0 +1,1260 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_FI_INTERPOLATE_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x00000622,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000038,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e, + 0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000613, + 0x00060010,0x00000004,0x00000011,0x00000008,0x00000008,0x00000001,0x00030003,0x00000002, + 0x000001c2,0x000b0004,0x455f4c47,0x735f5458,0x6c706d61,0x656c7265,0x745f7373,0x75747865, + 0x665f6572,0x74636e75,0x736e6f69,0x00000000,0x000b0004,0x455f4c47,0x735f5458,0x65646168, + 0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004, + 0x455f4c47,0x735f5458,0x65646168,0x6d695f72,0x5f656761,0x64616f6c,0x726f665f,0x7474616d, + 0x00006465,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c, + 0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63, + 0x69645f65,0x74636572,0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005, + 0x0000000b,0x41786666,0x6f6c4673,0x75287461,0x00003b31,0x00030005,0x0000000a,0x00000078, + 0x00070005,0x00000011,0x42786666,0x64616f72,0x74736163,0x31662832,0x0000003b,0x00040005, + 0x00000010,0x756c6176,0x00000065,0x00070005,0x00000016,0x42786666,0x64616f72,0x74736163, + 0x31662833,0x0000003b,0x00040005,0x00000015,0x756c6176,0x00000065,0x00070005,0x0000001c, + 0x4c786666,0x28707265,0x663b3166,0x31663b31,0x0000003b,0x00030005,0x00000019,0x00000078, + 0x00030005,0x0000001a,0x00000079,0x00030005,0x0000001b,0x00000074,0x00070005,0x00000023, + 0x4c786666,0x28707265,0x3b336676,0x3b336676,0x003b3166,0x00030005,0x00000020,0x00000078, + 0x00030005,0x00000021,0x00000079,0x00030005,0x00000022,0x00000074,0x00060005,0x00000027, + 0x53786666,0x72757461,0x28657461,0x003b3166,0x00030005,0x00000026,0x00000078,0x00070005, + 0x0000002c,0x53786666,0x72757461,0x28657461,0x3b326676,0x00000000,0x00030005,0x0000002b, + 0x00000078,0x00070005,0x00000030,0x53786666,0x72757461,0x28657461,0x3b336676,0x00000000, + 0x00030005,0x0000002f,0x00000078,0x00060005,0x00000033,0x46786666,0x74636172,0x32667628, + 0x0000003b,0x00030005,0x00000032,0x00000078,0x00070005,0x00000037,0x55786666,0x6361706e, + 0x3233466b,0x3b317528,0x00000000,0x00030005,0x00000036,0x00000075,0x00060005,0x0000003c, + 0x4d786666,0x66286e69,0x31663b31,0x0000003b,0x00030005,0x0000003a,0x00000078,0x00030005, + 0x0000003b,0x00000079,0x00060005,0x00000040,0x4d786666,0x66287861,0x31663b31,0x0000003b, + 0x00030005,0x0000003e,0x00000078,0x00030005,0x0000003f,0x00000079,0x00060005,0x00000044, + 0x50786666,0x6628776f,0x31663b31,0x0000003b,0x00030005,0x00000042,0x00000078,0x00030005, + 0x00000043,0x00000079,0x000a0005,0x0000004a,0x5a786666,0x4f6f7265,0x6553656e,0x7463656c, + 0x33667628,0x3366763b,0x3366763b,0x0000003b,0x00030005,0x00000047,0x00000078,0x00030005, + 0x00000048,0x00000079,0x00030005,0x00000049,0x0000007a,0x00080005,0x0000004d,0x5a786666, + 0x4f6f7265,0x7349656e,0x6e676953,0x76286465,0x003b3366,0x00030005,0x0000004c,0x00000078, + 0x00080005,0x00000050,0x4c786666,0x61656e69,0x6f724672,0x2851506d,0x3b336676,0x00000000, + 0x00040005,0x0000004f,0x756c6176,0x00000065,0x00080005,0x00000053,0x4c786666,0x61656e69, + 0x6f724672,0x6772536d,0x66762862,0x00003b33,0x00040005,0x00000052,0x756c6176,0x00000065, + 0x00080005,0x00000058,0x65746e49,0x6c6f7072,0x6f697461,0x6365526e,0x73614274,0x00002865, + 0x00080005,0x0000005a,0x65746e49,0x6c6f7072,0x6f697461,0x6365526e,0x7a695374,0x00002865, + 0x00050005,0x0000005c,0x646e6552,0x69537265,0x0028657a,0x00060005,0x0000005e,0x70736944, + 0x5379616c,0x28657a69,0x00000000,0x00070005,0x00000060,0x4f746547,0x63697470,0x6c466c61, + 0x6953776f,0x0028657a,0x00080005,0x00000062,0x4f746547,0x63697470,0x6c466c61,0x6953776f, + 0x2832657a,0x00000000,0x00070005,0x00000064,0x4d746547,0x65527861,0x7265646e,0x657a6953, + 0x00000028,0x00090005,0x00000067,0x6b636142,0x66667542,0x72547265,0x66736e61,0x75467265, + 0x6974636e,0x00286e6f,0x00060005,0x0000006a,0x4c6e694d,0x6e696d75,0x65636e61,0x00000028, + 0x00060005,0x0000006c,0x4c78614d,0x6e696d75,0x65636e61,0x00000028,0x00090005,0x00000071, + 0x64616f4c,0x76657250,0x73756f69,0x6b636142,0x66667562,0x76287265,0x003b3269,0x00040005, + 0x00000070,0x50785069,0x0000736f,0x00090005,0x00000074,0x64616f4c,0x72727543,0x42746e65, + 0x626b6361,0x65666675,0x69762872,0x00003b32,0x00040005,0x00000073,0x50785069,0x0000736f, + 0x00090005,0x00000079,0x706d6153,0x6944656c,0x63636f73,0x6973756c,0x614d6e6f,0x76286b73, + 0x003b3266,0x00030005,0x00000078,0x00765566,0x00080005,0x0000007e,0x64616f4c,0x656d6147, + 0x6c656946,0x28764d64,0x3b326976,0x00000000,0x00050005,0x0000007d,0x53785069,0x6c706d61, + 0x00000065,0x00090005,0x00000081,0x64616f4c,0x6974704f,0x466c6163,0x46776f6c,0x646c6569, + 0x7628764d,0x003b3269,0x00050005,0x00000080,0x53785069,0x6c706d61,0x00000065,0x000a0005, + 0x00000088,0x64616f4c,0x61706e49,0x69746e69,0x7950676e,0x696d6172,0x31692864,0x3275763b, + 0x0000003b,0x00050005,0x00000086,0x4c70696d,0x6c657665,0x00000000,0x00050005,0x00000087, + 0x49785069,0x7475706e,0x00000000,0x00060005,0x0000008c,0x64616f4c,0x6e756f43,0x28726574, + 0x003b3169,0x00040005,0x0000008b,0x50785069,0x0000736f,0x00090005,0x0000008e,0x6d617246, + 0x646e4965,0x69537865,0x4c65636e,0x52747361,0x74657365,0x00000028,0x000c0005,0x00000094, + 0x726f7453,0x61724665,0x6e69656d,0x70726574,0x74616c6f,0x4f6e6f69,0x75707475,0x69762874, + 0x66763b32,0x00003b34,0x00040005,0x00000092,0x50785069,0x0000736f,0x00030005,0x00000093, + 0x006c6176,0x00090005,0x0000009a,0x73786666,0x42475263,0x694c6f54,0x7261656e,0x33667628, + 0x3b31663b,0x003b3166,0x00040005,0x00000097,0x756c6176,0x00000065,0x00060005,0x00000098, + 0x4c6e696d,0x6e696d75,0x65636e61,0x00000000,0x00060005,0x00000099,0x4c78616d,0x6e696d75, + 0x65636e61,0x00000000,0x00070005,0x0000009d,0x52776152,0x6f544247,0x656e694c,0x76287261, + 0x003b3366,0x00040005,0x0000009c,0x77615266,0x00626752,0x00080005,0x000000a2,0x696c6942, + 0x7261656e,0x706d6153,0x676e696c,0x61746144,0x00000000,0x00060006,0x000000a2,0x00000000, + 0x66664f69,0x73746573,0x00000000,0x00060006,0x000000a2,0x00000001,0x69655766,0x73746867, + 0x00000000,0x00060006,0x000000a2,0x00000002,0x73614269,0x736f5065,0x00000000,0x000b0005, + 0x000000a6,0x42746547,0x6e696c69,0x53726165,0x6c706d61,0x44676e69,0x28617461,0x3b326676, + 0x3b326976,0x00000000,0x00030005,0x000000a4,0x00765566,0x00040005,0x000000a5,0x7a695369, + 0x00000065,0x00070005,0x000000ac,0x6e4f7349,0x65726353,0x76286e65,0x763b3269,0x003b3269, + 0x00030005,0x000000aa,0x00736f70,0x00040005,0x000000ab,0x657a6973,0x00000000,0x00060005, + 0x000000b0,0x76557349,0x69736e49,0x76286564,0x003b3266,0x00030005,0x000000af,0x00765566, + 0x00080005,0x000000b6,0x6e497349,0x74636552,0x32697628,0x3269763b,0x3269763b,0x0000003b, + 0x00030005,0x000000b3,0x00736f70,0x00050005,0x000000b4,0x63655269,0x726f4374,0x0072656e, + 0x00050005,0x000000b5,0x63655269,0x7a695374,0x00000065,0x00080005,0x000000bb,0x6d726f4e, + 0x7a696c61,0x6f446465,0x76283374,0x763b3366,0x003b3366,0x00030005,0x000000b9,0x00003076, + 0x00030005,0x000000ba,0x00003176,0x00070005,0x000000bd,0x74636556,0x6946726f,0x45646c65, + 0x7972746e,0x00000000,0x00070006,0x000000bd,0x00000000,0x746f4d66,0x566e6f69,0x6f746365, + 0x00000072,0x00080006,0x000000bd,0x00000001,0x67694875,0x69725068,0x7469726f,0x63614679, + 0x00726f74,0x00080006,0x000000bd,0x00000002,0x776f4c75,0x6f697250,0x79746972,0x74636146, + 0x0000726f,0x00050006,0x000000bd,0x00000003,0x6c615662,0x00006469,0x00060006,0x000000bd, + 0x00000004,0x69725062,0x7972616d,0x00000000,0x00060006,0x000000bd,0x00000005,0x63655362, + 0x61646e6f,0x00007972,0x00060006,0x000000bd,0x00000006,0x506e4962,0x746e6961,0x00006465, + 0x00060006,0x000000bd,0x00000007,0x6c655666,0x7469636f,0x00000079,0x00060006,0x000000bd, + 0x00000008,0x67654e62,0x7374754f,0x00656469,0x00060006,0x000000bd,0x00000009,0x736f5062, + 0x7374754f,0x00656469,0x00080005,0x000000bf,0x5677654e,0x6f746365,0x65694672,0x6e45646c, + 0x28797274,0x00000000,0x000b0005,0x000000c3,0x6b636150,0x65566465,0x726f7463,0x6c656946, + 0x746e4564,0x73497972,0x6d697250,0x28797261,0x003b3175,0x00050005,0x000000c2,0x6b636170, + 0x6e456465,0x00797274,0x00180005,0x000000c9,0x61706e55,0x65566b63,0x726f7463,0x6c656946, + 0x746e4564,0x73656972,0x32757628,0x7274733b,0x2d746375,0x74636556,0x6946726f,0x45646c65, + 0x7972746e,0x3266762d,0x2d31662d,0x622d3166,0x31622d31,0x2d31622d,0x662d3162,0x31622d31, + 0x3131622d,0x0000003b,0x00040005,0x000000c7,0x6b636170,0x00006465,0x00050005,0x000000c8, + 0x6c456676,0x6e656d65,0x00000074,0x000c0005,0x000000cf,0x706d6f43,0x4d657475,0x706e4976, + 0x746e6961,0x4c676e69,0x6c657665,0x32667628,0x3b31693b,0x3b326976,0x00000000,0x00030005, + 0x000000cc,0x00765566,0x00050005,0x000000cd,0x70694d69,0x6576654c,0x0000006c,0x00050005, + 0x000000ce,0x78655469,0x657a6953,0x00000000,0x00180005,0x000000d4,0x64616f4c,0x61706e49, + 0x65746e69,0x6d614764,0x65694665,0x764d646c,0x32667628,0x7274733b,0x2d746375,0x74636556, + 0x6946726f,0x45646c65,0x7972746e,0x3266762d,0x2d31662d,0x622d3166,0x31622d31,0x2d31622d, + 0x662d3162,0x31622d31,0x3131622d,0x0000003b,0x00030005,0x000000d2,0x00765566,0x00050005, + 0x000000d3,0x6c456676,0x6e656d65,0x00000074,0x001a0005,0x000000d8,0x706d6153,0x704f656c, + 0x61636974,0x6f6c466c,0x746f4d77,0x566e6f69,0x6f746365,0x65694672,0x7628646c,0x733b3266, + 0x63757274,0x65562d74,0x726f7463,0x6c656946,0x746e4564,0x762d7972,0x662d3266,0x31662d31, + 0x2d31622d,0x622d3162,0x31622d31,0x2d31662d,0x622d3162,0x003b3131,0x00030005,0x000000d6, + 0x00765566,0x00050005,0x000000d7,0x6c456676,0x6e656d65,0x00000074,0x00090005,0x000000da, + 0x65746e49,0x6c6f7072,0x6f697461,0x756f536e,0x43656372,0x726f6c6f,0x00000000,0x00050006, + 0x000000da,0x00000000,0x77615266,0x00000000,0x00050006,0x000000da,0x00000001,0x6e694c66, + 0x00726165,0x00080006,0x000000da,0x00000002,0x6c694266,0x61656e69,0x69655772,0x53746867, + 0x00006d75,0x000a0005,0x000000dc,0x4977654e,0x7265746e,0x616c6f70,0x6e6f6974,0x72756f53, + 0x6f436563,0x28726f6c,0x00000000,0x000c0005,0x000000e4,0x706d6153,0x6554656c,0x72757478, + 0x6c694265,0x61656e69,0x31622872,0x3266763b,0x3266763b,0x3269763b,0x0000003b,0x00050005, + 0x000000e0,0x75437369,0x6e657272,0x00000074,0x00030005,0x000000e1,0x00765566,0x00060005, + 0x000000e2,0x746f4d66,0x566e6f69,0x6f746365,0x00000072,0x00040005,0x000000e3,0x53786574, + 0x00657a69,0x000a0005,0x000000e9,0x61647075,0x6e496574,0x6e696150,0x676e6974,0x67696557, + 0x66287468,0x31663b31,0x0000003b,0x00070005,0x000000e7,0x506e4966,0x746e6961,0x57676e69, + 0x68676965,0x00000074,0x00040005,0x000000e8,0x63614666,0x00726f74,0x000c0005,0x000000ef, + 0x706d6f63,0x49657475,0x7265746e,0x616c6f70,0x43646574,0x726f6c6f,0x32757628,0x3366763b, + 0x3b31663b,0x00000000,0x00040005,0x000000ec,0x50785069,0x0000736f,0x00070005,0x000000ed, + 0x746e4966,0x6f707265,0x6574616c,0x6c6f4364,0x0000726f,0x00070005,0x000000ee,0x506e4966, + 0x746e6961,0x57676e69,0x68676965,0x00000074,0x000a0005,0x000000f3,0x706d6f63,0x46657475, + 0x656d6172,0x65746e69,0x6c6f7072,0x6f697461,0x6976286e,0x00003b32,0x00040005,0x000000f2, + 0x50785069,0x0000736f,0x00040005,0x00000115,0x61726170,0x0000006d,0x00040005,0x00000117, + 0x61726170,0x0000006d,0x00040005,0x0000011d,0x61726170,0x0000006d,0x00040005,0x0000011f, + 0x61726170,0x0000006d,0x00030005,0x0000013b,0x00000072,0x00040005,0x0000014b,0x61726170, + 0x0000006d,0x00040005,0x0000014d,0x61726170,0x0000006d,0x00040005,0x00000150,0x61726170, + 0x0000006d,0x00030005,0x00000154,0x00000070,0x00040005,0x00000157,0x61726170,0x0000006d, + 0x00040005,0x0000015c,0x61726170,0x0000006d,0x00040005,0x0000015f,0x61726170,0x0000006d, + 0x00040005,0x00000162,0x61726170,0x0000006d,0x00040005,0x00000165,0x61726170,0x0000006d, + 0x00040005,0x0000016c,0x61726170,0x0000006d,0x00030005,0x00000171,0x0000006a,0x00030005, + 0x00000176,0x0000006b,0x00040005,0x0000017e,0x61726170,0x0000006d,0x00040005,0x0000018e, + 0x61726170,0x0000006d,0x00040005,0x0000018f,0x61726170,0x0000006d,0x00040005,0x00000190, + 0x61726170,0x0000006d,0x00040005,0x00000194,0x49466263,0x0000745f,0x00060006,0x00000194, + 0x00000000,0x646e6572,0x69537265,0x0000657a,0x00060006,0x00000194,0x00000001,0x70736964, + 0x5379616c,0x00657a69,0x00070006,0x00000194,0x00000002,0x70736964,0x5379616c,0x52657a69, + 0x00007063,0x00060006,0x00000194,0x00000003,0x656d6163,0x654e6172,0x00007261,0x00060006, + 0x00000194,0x00000004,0x656d6163,0x61466172,0x00000072,0x00080006,0x00000194,0x00000005, + 0x63737075,0x72656c61,0x67726154,0x69537465,0x0000657a,0x00050006,0x00000194,0x00000006, + 0x65646f4d,0x00000000,0x00050006,0x00000194,0x00000007,0x65736572,0x00000074,0x00080006, + 0x00000194,0x00000008,0x76654466,0x54656369,0x6569566f,0x70654477,0x00006874,0x00060006, + 0x00000194,0x00000009,0x746c6564,0x6d695461,0x00000065,0x00090006,0x00000194,0x0000000a, + 0x4c445548,0x41737365,0x63617474,0x46646568,0x6f746361,0x00000072,0x00080006,0x00000194, + 0x0000000b,0x74736964,0x6974726f,0x69466e6f,0x53646c65,0x00657a69,0x00080006,0x00000194, + 0x0000000c,0x6974706f,0x466c6163,0x53776f6c,0x656c6163,0x00000000,0x00090006,0x00000194, + 0x0000000d,0x6974706f,0x466c6163,0x42776f6c,0x6b636f6c,0x657a6953,0x00000000,0x00070006, + 0x00000194,0x0000000e,0x70736964,0x68637461,0x67616c46,0x00000073,0x00070006,0x00000194, + 0x0000000f,0x5278616d,0x65646e65,0x7a695372,0x00000065,0x00090006,0x00000194,0x00000010, + 0x6974706f,0x466c6163,0x48776f6c,0x52666c61,0x6f4d7365,0x00006564,0x00070006,0x00000194, + 0x00000011,0x496d754e,0x6174736e,0x7365636e,0x00000000,0x00090006,0x00000194,0x00000012, + 0x65746e69,0x6c6f7072,0x6f697461,0x6365526e,0x73614274,0x00000065,0x00090006,0x00000194, + 0x00000013,0x65746e69,0x6c6f7072,0x6f697461,0x6365526e,0x7a695374,0x00000065,0x00070006, + 0x00000194,0x00000014,0x75626564,0x72614267,0x6f6c6f43,0x00000072,0x000a0006,0x00000194, + 0x00000015,0x6b636162,0x66667542,0x72547265,0x66736e61,0x75467265,0x6974636e,0x00006e6f, + 0x00070006,0x00000194,0x00000016,0x4d6e696d,0x754c7861,0x616e696d,0x0065636e,0x00060006, + 0x00000194,0x00000017,0x6e615466,0x666c6148,0x00564f46,0x00050006,0x00000194,0x00000018, + 0x6461705f,0x00000031,0x00050006,0x00000194,0x00000019,0x74694a66,0x00726574,0x00080006, + 0x00000194,0x0000001a,0x746f4d66,0x566e6f69,0x6f746365,0x61635372,0x0000656c,0x00040005, + 0x00000196,0x49466263,0x00000000,0x00070005,0x000001ac,0x74704f69,0x6c616369,0x776f6c46, + 0x657a6953,0x00000000,0x000a0005,0x000001dc,0x72705f72,0x6f697665,0x695f7375,0x7265746e, + 0x616c6f70,0x6e6f6974,0x756f735f,0x00656372,0x000a0005,0x000001e3,0x75635f72,0x6e657272, + 0x6e695f74,0x70726574,0x74616c6f,0x5f6e6f69,0x72756f73,0x00006563,0x00070005,0x000001ea, + 0x69645f72,0x63636f73,0x6973756c,0x6d5f6e6f,0x006b7361,0x00060005,0x000001ee,0x694c5f73, + 0x7261656e,0x6d616c43,0x00000070,0x00040005,0x000001f6,0x6b636170,0x00586465,0x000a0005, + 0x000001f9,0x61675f72,0x6d5f656d,0x6f69746f,0x65765f6e,0x726f7463,0x6569665f,0x785f646c, + 0x00000000,0x00040005,0x000001ff,0x6b636170,0x00596465,0x000a0005,0x00000200,0x61675f72, + 0x6d5f656d,0x6f69746f,0x65765f6e,0x726f7463,0x6569665f,0x795f646c,0x00000000,0x00040005, + 0x0000020a,0x6b636170,0x00586465,0x000c0005,0x0000020b,0x706f5f72,0x61636974,0x6c665f6c, + 0x6d5f776f,0x6f69746f,0x65765f6e,0x726f7463,0x6569665f,0x785f646c,0x00000000,0x00040005, + 0x00000210,0x6b636170,0x00596465,0x000c0005,0x00000211,0x706f5f72,0x61636974,0x6c665f6c, + 0x6d5f776f,0x6f69746f,0x65765f6e,0x726f7463,0x6569665f,0x795f646c,0x00000000,0x00080005, + 0x0000021b,0x6e695f72,0x6e696170,0x676e6974,0x7279705f,0x64696d61,0x00000000,0x000a0005, + 0x00000224,0x6d617246,0x746e4965,0x6f707265,0x6974616c,0x6f436e6f,0x65746e75,0x745f7372, + 0x00000000,0x00050006,0x00000224,0x00000000,0x61746164,0x00000000,0x00050005,0x00000226, + 0x6f635f72,0x65746e75,0x00007372,0x00040005,0x0000022d,0x61726170,0x0000006d,0x00050005, + 0x00000233,0x6f5f7772,0x75707475,0x00000074,0x00030005,0x00000237,0x00000070,0x00040005, + 0x0000023c,0x61726170,0x0000006d,0x00040005,0x00000244,0x61726170,0x0000006d,0x00050005, + 0x0000024e,0x6e694c66,0x52726165,0x00006267,0x00040005,0x0000024f,0x61726170,0x0000006d, + 0x00040005,0x00000253,0x61726170,0x0000006d,0x00040005,0x0000025d,0x61726170,0x0000006d, + 0x00040005,0x0000025f,0x61726170,0x0000006d,0x00040005,0x00000260,0x61726170,0x0000006d, + 0x00050005,0x00000267,0x53785066,0x6c706d61,0x00000065,0x00040005,0x00000270,0x61746164, + 0x00000000,0x00040005,0x00000276,0x46785066,0x00636172,0x00040005,0x00000277,0x61726170, + 0x0000006d,0x00050005,0x000002e7,0x78614d66,0x676e654c,0x00006874,0x00040005,0x000002ea, + 0x61726170,0x0000006d,0x00040005,0x000002eb,0x61726170,0x0000006d,0x00030005,0x000002fd, + 0x00656676,0x00040005,0x0000032d,0x61726170,0x0000006d,0x00040005,0x00000347,0x61726170, + 0x0000006d,0x00040005,0x0000034d,0x61726170,0x0000006d,0x00060005,0x00000354,0x696c6962, + 0x7261656e,0x6f666e49,0x00000000,0x00040005,0x00000355,0x61726170,0x0000006d,0x00040005, + 0x00000357,0x61726170,0x0000006d,0x00040005,0x00000359,0x6d755366,0x00000000,0x00040005, + 0x0000035a,0x6c6f4366,0x0000726f,0x00060005,0x0000035e,0x6d615369,0x49656c70,0x7865646e, + 0x00000000,0x00040005,0x00000366,0x66664f69,0x00746573,0x00050005,0x0000036a,0x6d615369, + 0x50656c70,0x0000736f,0x00040005,0x0000036f,0x61726170,0x0000006d,0x00040005,0x00000371, + 0x61726170,0x0000006d,0x00040005,0x00000375,0x6d615366,0x00656c70,0x00040005,0x00000378, + 0x61726170,0x0000006d,0x00040005,0x00000379,0x61726170,0x0000006d,0x00060005,0x0000037b, + 0x69725066,0x7469726f,0x63614679,0x00726f74,0x00060005,0x0000037e,0x6c615666,0x764d6469, + 0x74636146,0x0000726f,0x00060005,0x00000383,0x6d615366,0x57656c70,0x68676965,0x00000074, + 0x00050005,0x0000039f,0x53785069,0x6c706d61,0x00000065,0x00070005,0x000003a5,0x6b636170, + 0x61476465,0x6946656d,0x4d646c65,0x00000076,0x00040005,0x000003a6,0x61726170,0x0000006d, + 0x00040005,0x000003a9,0x61726170,0x0000006d,0x00040005,0x000003ab,0x61726170,0x0000006d, + 0x00050005,0x000003b3,0x78655469,0x657a6953,0x00000000,0x00070005,0x000003b5,0x506e4966, + 0x746e6961,0x65566465,0x726f7463,0x00000000,0x00050005,0x000003b6,0x70694d69,0x6576654c, + 0x0000006c,0x00040005,0x000003cb,0x61726170,0x0000006d,0x00040005,0x000003df,0x61726170, + 0x0000006d,0x00040005,0x000003e7,0x61726170,0x0000006d,0x00060005,0x000003ef,0x696c6962, + 0x7261656e,0x6f666e49,0x00000000,0x00040005,0x000003f4,0x61726170,0x0000006d,0x00040005, + 0x000003f6,0x61726170,0x0000006d,0x00050005,0x000003f9,0x69655766,0x53746867,0x00006d75, + 0x00060005,0x000003fa,0x6d615369,0x49656c70,0x7865646e,0x00000000,0x00040005,0x00000402, + 0x66664f69,0x00746573,0x00050005,0x00000406,0x6d615369,0x50656c70,0x0000736f,0x00040005, + 0x0000040f,0x61726170,0x0000006d,0x00040005,0x00000411,0x61726170,0x0000006d,0x00040005, + 0x00000415,0x69655766,0x00746867,0x00060005,0x00000419,0x56664f66,0x6f746365,0x6d615372, + 0x00656c70,0x00070005,0x0000041b,0x6b636170,0x704f6465,0x61636974,0x6f6c466c,0x00764d77, + 0x00040005,0x0000041c,0x61726170,0x0000006d,0x00040005,0x00000422,0x61726170,0x0000006d, + 0x00040005,0x00000423,0x61726170,0x0000006d,0x00040005,0x0000045b,0x61726170,0x0000006d, + 0x00040005,0x00000463,0x61726170,0x0000006d,0x00030005,0x0000046c,0x00000063,0x00040005, + 0x00000474,0x75736572,0x0000746c,0x00060005,0x00000476,0x70655266,0x656a6f72,0x64657463, + 0x00007655,0x00060005,0x0000047a,0x696c6962,0x7261656e,0x6f666e49,0x00000000,0x00040005, + 0x0000047b,0x61726170,0x0000006d,0x00040005,0x0000047d,0x61726170,0x0000006d,0x00040005, + 0x00000480,0x6c6f4366,0x0000726f,0x00050005,0x00000481,0x69655766,0x53746867,0x00006d75, + 0x00060005,0x00000482,0x6d615369,0x49656c70,0x7865646e,0x00000000,0x00040005,0x0000048a, + 0x66664f69,0x00746573,0x00050005,0x0000048e,0x6d615369,0x50656c70,0x0000736f,0x00040005, + 0x00000495,0x61726170,0x0000006d,0x00040005,0x00000497,0x61726170,0x0000006d,0x00040005, + 0x00000498,0x61726170,0x0000006d,0x00040005,0x0000049c,0x69655766,0x00746867,0x00040005, + 0x000004a3,0x61726170,0x0000006d,0x00040005,0x000004ab,0x61726170,0x0000006d,0x00040005, + 0x000004c4,0x61726170,0x0000006d,0x00040005,0x000004cd,0x61726170,0x0000006d,0x00040005, + 0x000004cf,0x61726170,0x0000006d,0x00040005,0x000004d2,0x61726170,0x0000006d,0x00080005, + 0x000004d4,0x49765566,0x746e496e,0x6f707265,0x6974616c,0x65526e6f,0x00007463,0x00070005, + 0x000004df,0x49765566,0x7263536e,0x536e6565,0x65636170,0x00000000,0x00090005,0x000004e7, + 0x55724c66,0x496e4976,0x7265746e,0x616c6f70,0x6e6f6974,0x74636552,0x00000000,0x00070005, + 0x000004ef,0x4c765566,0x65747465,0x786f4272,0x6c616353,0x00000065,0x00040005,0x000004f5, + 0x656d6167,0x0000764d,0x00040005,0x000004f6,0x61726170,0x0000006d,0x00040005,0x000004f8, + 0x61726170,0x0000006d,0x00040005,0x000004fb,0x764d666f,0x00000000,0x00040005,0x000004fc, + 0x61726170,0x0000006d,0x00040005,0x000004fe,0x61726170,0x0000006d,0x00070005,0x00000501, + 0x73694466,0x6c63636f,0x6f697375,0x6361466e,0x00726f74,0x00040005,0x00000502,0x61726170, + 0x0000006d,0x00040005,0x00000505,0x61726170,0x0000006d,0x00060005,0x0000050b,0x65725066, + 0x6c6f4376,0x6147726f,0x0000656d,0x00040005,0x00000511,0x61726170,0x0000006d,0x00040005, + 0x00000512,0x61726170,0x0000006d,0x00040005,0x00000514,0x61726170,0x0000006d,0x00040005, + 0x00000515,0x61726170,0x0000006d,0x00060005,0x00000517,0x72754366,0x6c6f4372,0x6147726f, + 0x0000656d,0x00040005,0x0000051e,0x61726170,0x0000006d,0x00040005,0x0000051f,0x61726170, + 0x0000006d,0x00040005,0x00000521,0x61726170,0x0000006d,0x00040005,0x00000522,0x61726170, + 0x0000006d,0x00060005,0x00000524,0x65725066,0x6c6f4376,0x464f726f,0x00000000,0x00040005, + 0x0000052a,0x61726170,0x0000006d,0x00040005,0x0000052b,0x61726170,0x0000006d,0x00040005, + 0x0000052d,0x61726170,0x0000006d,0x00040005,0x0000052e,0x61726170,0x0000006d,0x00060005, + 0x00000530,0x72754366,0x6c6f4372,0x464f726f,0x00000000,0x00040005,0x00000537,0x61726170, + 0x0000006d,0x00040005,0x00000538,0x61726170,0x0000006d,0x00040005,0x0000053a,0x61726170, + 0x0000006d,0x00040005,0x0000053b,0x61726170,0x0000006d,0x00070005,0x0000053d,0x73694466, + 0x6c63636f,0x64656475,0x74636146,0x0000726f,0x00040005,0x00000553,0x61726170,0x0000006d, + 0x00040005,0x00000555,0x61726170,0x0000006d,0x00030005,0x00000558,0x00000074,0x00040005, + 0x00000565,0x61726170,0x0000006d,0x00040005,0x00000568,0x61726170,0x0000006d,0x00040005, + 0x0000056b,0x61726170,0x0000006d,0x00040005,0x0000056e,0x61726170,0x0000006d,0x00040005, + 0x00000570,0x61726170,0x0000006d,0x00040005,0x00000573,0x61726170,0x0000006d,0x00040005, + 0x00000578,0x61726170,0x0000006d,0x00030005,0x00000594,0x0054666f,0x00040005,0x000005a7, + 0x6f43666f,0x00726f6c,0x00040005,0x000005a8,0x61726170,0x0000006d,0x00040005,0x000005ab, + 0x61726170,0x0000006d,0x00040005,0x000005ae,0x61726170,0x0000006d,0x00040005,0x000005b1, + 0x5f464f66,0x006d6953,0x00050005,0x000005b7,0x6d614766,0x69535f65,0x0000006d,0x00040005, + 0x000005bd,0x61726170,0x0000006d,0x00040005,0x000005be,0x61726170,0x0000006d,0x00040005, + 0x000005c1,0x61726170,0x0000006d,0x00040005,0x000005c4,0x61726170,0x0000006d,0x00040005, + 0x000005c5,0x61726170,0x0000006d,0x00040005,0x000005c6,0x61726170,0x0000006d,0x00050005, + 0x000005c8,0x6d614766,0x42764d65,0x00736169,0x00040005,0x000005ca,0x61726170,0x0000006d, + 0x00040005,0x000005cb,0x61726170,0x0000006d,0x00040005,0x000005cf,0x61726170,0x0000006d, + 0x00040005,0x000005d1,0x61726170,0x0000006d,0x00040005,0x000005d2,0x61726170,0x0000006d, + 0x00070005,0x000005d4,0x61724666,0x6e49656d,0x46786564,0x6f746361,0x00000072,0x00040005, + 0x000005d9,0x61726170,0x0000006d,0x00040005,0x000005db,0x61726170,0x0000006d,0x00040005, + 0x000005dc,0x61726170,0x0000006d,0x00040005,0x000005df,0x61726170,0x0000006d,0x00040005, + 0x000005e2,0x61726170,0x0000006d,0x00040005,0x000005e4,0x61726170,0x0000006d,0x00040005, + 0x000005e6,0x61726170,0x0000006d,0x00040005,0x000005e8,0x6c6f4366,0x0000726f,0x00070005, + 0x000005e9,0x506e4966,0x746e6961,0x57676e69,0x68676965,0x00000074,0x00040005,0x000005ec, + 0x61726170,0x0000006d,0x00040005,0x000005ee,0x61726170,0x0000006d,0x00040005,0x000005ef, + 0x61726170,0x0000006d,0x00040005,0x000005fa,0x61726170,0x0000006d,0x00040005,0x00000600, + 0x61726170,0x0000006d,0x00040005,0x00000601,0x61726170,0x0000006d,0x00040005,0x00000602, + 0x61726170,0x0000006d,0x00040005,0x0000060e,0x61726170,0x0000006d,0x00040005,0x0000060f, + 0x61726170,0x0000006d,0x00080005,0x00000613,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f, + 0x496e6f69,0x00000044,0x00040005,0x00000617,0x61726170,0x0000006d,0x00030047,0x00000194, + 0x00000002,0x00050048,0x00000194,0x00000000,0x00000023,0x00000000,0x00050048,0x00000194, + 0x00000001,0x00000023,0x00000008,0x00050048,0x00000194,0x00000002,0x00000023,0x00000010, + 0x00050048,0x00000194,0x00000003,0x00000023,0x00000018,0x00050048,0x00000194,0x00000004, + 0x00000023,0x0000001c,0x00050048,0x00000194,0x00000005,0x00000023,0x00000020,0x00050048, + 0x00000194,0x00000006,0x00000023,0x00000028,0x00050048,0x00000194,0x00000007,0x00000023, + 0x0000002c,0x00050048,0x00000194,0x00000008,0x00000023,0x00000030,0x00050048,0x00000194, + 0x00000009,0x00000023,0x00000040,0x00050048,0x00000194,0x0000000a,0x00000023,0x00000044, + 0x00050048,0x00000194,0x0000000b,0x00000023,0x00000048,0x00050048,0x00000194,0x0000000c, + 0x00000023,0x00000050,0x00050048,0x00000194,0x0000000d,0x00000023,0x00000058,0x00050048, + 0x00000194,0x0000000e,0x00000023,0x0000005c,0x00050048,0x00000194,0x0000000f,0x00000023, + 0x00000060,0x00050048,0x00000194,0x00000010,0x00000023,0x00000068,0x00050048,0x00000194, + 0x00000011,0x00000023,0x0000006c,0x00050048,0x00000194,0x00000012,0x00000023,0x00000070, + 0x00050048,0x00000194,0x00000013,0x00000023,0x00000078,0x00050048,0x00000194,0x00000014, + 0x00000023,0x00000080,0x00050048,0x00000194,0x00000015,0x00000023,0x0000008c,0x00050048, + 0x00000194,0x00000016,0x00000023,0x00000090,0x00050048,0x00000194,0x00000017,0x00000023, + 0x00000098,0x00050048,0x00000194,0x00000018,0x00000023,0x0000009c,0x00050048,0x00000194, + 0x00000019,0x00000023,0x000000a0,0x00050048,0x00000194,0x0000001a,0x00000023,0x000000a8, + 0x00040047,0x00000196,0x00000021,0x0000000a,0x00040047,0x00000196,0x00000022,0x00000000, + 0x00040047,0x000001dc,0x00000021,0x00000004,0x00040047,0x000001dc,0x00000022,0x00000000, + 0x00040047,0x000001e3,0x00000021,0x00000005,0x00040047,0x000001e3,0x00000022,0x00000000, + 0x00040047,0x000001ea,0x00000021,0x00000006,0x00040047,0x000001ea,0x00000022,0x00000000, + 0x00040047,0x000001ee,0x00000021,0x000003e8,0x00040047,0x000001ee,0x00000022,0x00000000, + 0x00040047,0x000001f9,0x00000021,0x00000000,0x00040047,0x000001f9,0x00000022,0x00000000, + 0x00040047,0x00000200,0x00000021,0x00000001,0x00040047,0x00000200,0x00000022,0x00000000, + 0x00040047,0x0000020b,0x00000021,0x00000002,0x00040047,0x0000020b,0x00000022,0x00000000, + 0x00040047,0x00000211,0x00000021,0x00000003,0x00040047,0x00000211,0x00000022,0x00000000, + 0x00040047,0x0000021b,0x00000021,0x00000007,0x00040047,0x0000021b,0x00000022,0x00000000, + 0x00040047,0x00000223,0x00000006,0x00000004,0x00030047,0x00000224,0x00000002,0x00040048, + 0x00000224,0x00000000,0x00000018,0x00050048,0x00000224,0x00000000,0x00000023,0x00000000, + 0x00030047,0x00000226,0x00000018,0x00040047,0x00000226,0x00000021,0x00000008,0x00040047, + 0x00000226,0x00000022,0x00000000,0x00040047,0x00000233,0x00000021,0x00000009,0x00040047, + 0x00000233,0x00000022,0x00000000,0x00040047,0x00000613,0x0000000b,0x0000001c,0x00040047, + 0x00000621,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002, + 0x00040015,0x00000006,0x00000020,0x00000000,0x00040020,0x00000007,0x00000007,0x00000006, + 0x00030016,0x00000008,0x00000020,0x00040021,0x00000009,0x00000008,0x00000007,0x00040020, + 0x0000000d,0x00000007,0x00000008,0x00040017,0x0000000e,0x00000008,0x00000002,0x00040021, + 0x0000000f,0x0000000e,0x0000000d,0x00040017,0x00000013,0x00000008,0x00000003,0x00040021, + 0x00000014,0x00000013,0x0000000d,0x00060021,0x00000018,0x00000008,0x0000000d,0x0000000d, + 0x0000000d,0x00040020,0x0000001e,0x00000007,0x00000013,0x00060021,0x0000001f,0x00000013, + 0x0000001e,0x0000001e,0x0000000d,0x00040021,0x00000025,0x00000008,0x0000000d,0x00040020, + 0x00000029,0x00000007,0x0000000e,0x00040021,0x0000002a,0x0000000e,0x00000029,0x00040021, + 0x0000002e,0x00000013,0x0000001e,0x00040021,0x00000035,0x0000000e,0x00000007,0x00050021, + 0x00000039,0x00000008,0x0000000d,0x0000000d,0x00060021,0x00000046,0x00000013,0x0000001e, + 0x0000001e,0x0000001e,0x00040015,0x00000055,0x00000020,0x00000001,0x00040017,0x00000056, + 0x00000055,0x00000002,0x00030021,0x00000057,0x00000056,0x00030021,0x00000066,0x00000006, + 0x00030021,0x00000069,0x00000008,0x00040020,0x0000006e,0x00000007,0x00000056,0x00040021, + 0x0000006f,0x00000013,0x0000006e,0x00040017,0x00000076,0x00000008,0x00000004,0x00040021, + 0x00000077,0x00000076,0x00000029,0x00040017,0x0000007b,0x00000006,0x00000002,0x00040021, + 0x0000007c,0x0000007b,0x0000006e,0x00040020,0x00000083,0x00000007,0x00000055,0x00040020, + 0x00000084,0x00000007,0x0000007b,0x00050021,0x00000085,0x00000076,0x00000083,0x00000084, + 0x00040021,0x0000008a,0x00000006,0x00000083,0x00040020,0x00000090,0x00000007,0x00000076, + 0x00050021,0x00000091,0x00000002,0x0000006e,0x00000090,0x00060021,0x00000096,0x00000013, + 0x0000001e,0x0000000d,0x0000000d,0x0004002b,0x00000006,0x0000009f,0x00000004,0x0004001c, + 0x000000a0,0x00000056,0x0000009f,0x0004001c,0x000000a1,0x00000008,0x0000009f,0x0005001e, + 0x000000a2,0x000000a0,0x000000a1,0x00000056,0x00050021,0x000000a3,0x000000a2,0x00000029, + 0x0000006e,0x00020014,0x000000a8,0x00050021,0x000000a9,0x000000a8,0x0000006e,0x0000006e, + 0x00040021,0x000000ae,0x000000a8,0x00000029,0x00060021,0x000000b2,0x000000a8,0x0000006e, + 0x0000006e,0x0000006e,0x00050021,0x000000b8,0x00000008,0x00000013,0x00000013,0x000c001e, + 0x000000bd,0x0000000e,0x00000008,0x00000008,0x000000a8,0x000000a8,0x000000a8,0x000000a8, + 0x00000008,0x000000a8,0x000000a8,0x00030021,0x000000be,0x000000bd,0x00040021,0x000000c1, + 0x000000a8,0x00000007,0x00040020,0x000000c5,0x00000007,0x000000bd,0x00050021,0x000000c6, + 0x00000002,0x00000084,0x000000c5,0x00060021,0x000000cb,0x00000076,0x00000029,0x00000055, + 0x00000056,0x00050021,0x000000d1,0x00000002,0x00000029,0x000000c5,0x0005001e,0x000000da, + 0x00000013,0x00000013,0x00000008,0x00030021,0x000000db,0x000000da,0x00040020,0x000000de, + 0x00000007,0x000000a8,0x00070021,0x000000df,0x000000da,0x000000de,0x00000029,0x00000029, + 0x0000006e,0x00050021,0x000000e6,0x00000002,0x0000000d,0x0000000d,0x00060021,0x000000eb, + 0x00000002,0x00000084,0x0000001e,0x0000000d,0x00040021,0x000000f1,0x00000002,0x0000006e, + 0x0004002b,0x00000008,0x0000010f,0x00000000,0x0004002b,0x00000008,0x00000110,0x3f800000, + 0x0004002b,0x00000006,0x0000014a,0xff800000,0x0004002b,0x00000008,0x00000156,0x3c4fcd9e, + 0x0004002b,0x00000008,0x0000015b,0x3f560008,0x0004002b,0x00000008,0x00000161,0x4196d014, + 0x0004002b,0x00000008,0x00000164,0x41958000,0x0004002b,0x00000008,0x0000016b,0x40c8e061, + 0x0004002b,0x00000008,0x00000172,0x3d25aee6,0x0004002b,0x00000008,0x00000173,0x3d9e8391, + 0x0004002b,0x00000008,0x00000174,0x4019999a,0x0006002c,0x00000013,0x00000175,0x00000172, + 0x00000173,0x00000174,0x0004002b,0x00000008,0x00000177,0x3f72a76e,0x0004002b,0x00000008, + 0x00000178,0x3d558919,0x0005002c,0x0000000e,0x00000179,0x00000177,0x00000178,0x001d001e, + 0x00000194,0x00000056,0x00000056,0x0000000e,0x00000008,0x00000008,0x00000056,0x00000055, + 0x00000055,0x00000076,0x00000008,0x00000055,0x00000056,0x0000000e,0x00000055,0x00000006, + 0x00000056,0x00000055,0x00000055,0x00000056,0x00000056,0x00000013,0x00000006,0x0000000e, + 0x00000008,0x00000055,0x0000000e,0x0000000e,0x00040020,0x00000195,0x00000002,0x00000194, + 0x0004003b,0x00000195,0x00000196,0x00000002,0x0004002b,0x00000055,0x00000197,0x00000012, + 0x00040020,0x00000198,0x00000002,0x00000056,0x0004002b,0x00000055,0x0000019d,0x00000013, + 0x0004002b,0x00000055,0x000001a2,0x00000000,0x0004002b,0x00000055,0x000001a7,0x00000001, + 0x0004002b,0x00000055,0x000001ad,0x0000000c,0x00040020,0x000001ae,0x00000002,0x0000000e, + 0x0004002b,0x00000055,0x000001b3,0x0000000d,0x00040020,0x000001b4,0x00000002,0x00000055, + 0x0004002b,0x00000055,0x000001c3,0x0000000f,0x0004002b,0x00000055,0x000001c8,0x00000015, + 0x00040020,0x000001c9,0x00000002,0x00000006,0x0004002b,0x00000055,0x000001ce,0x00000016, + 0x0004002b,0x00000006,0x000001cf,0x00000000,0x00040020,0x000001d0,0x00000002,0x00000008, + 0x0004002b,0x00000006,0x000001d5,0x00000001,0x00090019,0x000001da,0x00000008,0x00000001, + 0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x00040020,0x000001db,0x00000000, + 0x000001da,0x0004003b,0x000001db,0x000001dc,0x00000000,0x0004003b,0x000001db,0x000001e3, + 0x00000000,0x0004003b,0x000001db,0x000001ea,0x00000000,0x0002001a,0x000001ec,0x00040020, + 0x000001ed,0x00000000,0x000001ec,0x0004003b,0x000001ed,0x000001ee,0x00000000,0x0003001b, + 0x000001f0,0x000001da,0x00090019,0x000001f7,0x00000006,0x00000001,0x00000000,0x00000000, + 0x00000000,0x00000001,0x00000000,0x00040020,0x000001f8,0x00000000,0x000001f7,0x0004003b, + 0x000001f8,0x000001f9,0x00000000,0x00040017,0x000001fc,0x00000006,0x00000004,0x0004003b, + 0x000001f8,0x00000200,0x00000000,0x0004003b,0x000001f8,0x0000020b,0x00000000,0x0004003b, + 0x000001f8,0x00000211,0x00000000,0x0004003b,0x000001db,0x0000021b,0x00000000,0x0003001d, + 0x00000223,0x00000006,0x0003001e,0x00000224,0x00000223,0x00040020,0x00000225,0x0000000c, + 0x00000224,0x0004003b,0x00000225,0x00000226,0x0000000c,0x00040020,0x00000228,0x0000000c, + 0x00000006,0x00090019,0x00000231,0x00000008,0x00000001,0x00000000,0x00000000,0x00000000, + 0x00000002,0x00000000,0x00040020,0x00000232,0x00000000,0x00000231,0x0004003b,0x00000232, + 0x00000233,0x00000000,0x0004002b,0x00000008,0x0000023a,0x42a00000,0x0004002b,0x00000008, + 0x00000256,0x461c4000,0x0004002b,0x00000008,0x0000026c,0x3f000000,0x0005002c,0x0000000e, + 0x0000026d,0x0000026c,0x0000026c,0x00040020,0x0000026f,0x00000007,0x000000a2,0x0004002b, + 0x00000055,0x00000271,0x00000002,0x0005002c,0x00000056,0x0000027a,0x000001a2,0x000001a2, + 0x0005002c,0x00000056,0x0000027c,0x000001a7,0x000001a2,0x0005002c,0x00000056,0x0000027e, + 0x000001a2,0x000001a7,0x0004002b,0x00000055,0x00000280,0x00000003,0x0005002c,0x00000056, + 0x00000281,0x000001a7,0x000001a7,0x00040017,0x000002a6,0x000000a8,0x00000002,0x0005002c, + 0x0000000e,0x000002fe,0x0000010f,0x0000010f,0x0003002a,0x000000a8,0x00000302,0x0004002b, + 0x00000055,0x00000304,0x00000004,0x0004002b,0x00000055,0x00000306,0x00000005,0x0004002b, + 0x00000055,0x00000308,0x00000006,0x0004002b,0x00000055,0x0000030a,0x00000007,0x0004002b, + 0x00000055,0x0000030c,0x00000008,0x0004002b,0x00000055,0x0000030e,0x00000009,0x0004002b, + 0x00000006,0x00000314,0x80000000,0x0004002b,0x00000006,0x0000031b,0x00000015,0x0004002b, + 0x00000006,0x0000031d,0x000003ff,0x0004002b,0x00000008,0x00000320,0x447fc000,0x0004002b, + 0x00000006,0x00000325,0x00000010,0x0004002b,0x00000006,0x00000327,0x0000001f,0x0004002b, + 0x00000008,0x0000032a,0x41f80000,0x0007002c,0x00000076,0x0000035b,0x0000010f,0x0000010f, + 0x0000010f,0x0000010f,0x0004002b,0x00000006,0x0000035c,0x00000002,0x0004002b,0x00000055, + 0x000003bd,0x0000000b,0x0004002b,0x00000006,0x000003c1,0x00000003,0x00030029,0x000000a8, + 0x000003d9,0x00040020,0x0000046b,0x00000007,0x000000da,0x0006002c,0x00000013,0x0000046d, + 0x0000010f,0x0000010f,0x0000010f,0x0005002c,0x0000000e,0x00000508,0x00000110,0x00000110, + 0x0004002b,0x00000008,0x00000550,0x3a83126f,0x0004002b,0x00000006,0x000005d6,0x0000000a, + 0x00040017,0x00000611,0x00000006,0x00000003,0x00040020,0x00000612,0x00000001,0x00000611, + 0x0004003b,0x00000612,0x00000613,0x00000001,0x0004002b,0x00000008,0x00000619,0x387fda40, + 0x0004002b,0x00000008,0x0000061a,0x477fe000,0x0004002b,0x00000008,0x0000061b,0x37801002, + 0x0004002b,0x00000008,0x0000061c,0x7f7fffff,0x0004002b,0x00000008,0x0000061d,0x00800000, + 0x0004002b,0x00000006,0x0000061e,0x00000020,0x0004002b,0x00000006,0x0000061f,0x00000005, + 0x0004002b,0x00000006,0x00000620,0x00000008,0x0006002c,0x00000611,0x00000621,0x00000620, + 0x00000620,0x000001d5,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8, + 0x00000005,0x0004003b,0x0000006e,0x00000617,0x00000007,0x0004003d,0x00000611,0x00000614, + 0x00000613,0x0007004f,0x0000007b,0x00000615,0x00000614,0x00000614,0x00000000,0x00000001, + 0x0004007c,0x00000056,0x00000616,0x00000615,0x0003003e,0x00000617,0x00000616,0x00050039, + 0x00000002,0x00000618,0x000000f3,0x00000617,0x000100fd,0x00010038,0x00050036,0x00000008, + 0x0000000b,0x00000000,0x00000009,0x00030037,0x00000007,0x0000000a,0x000200f8,0x0000000c, + 0x0004003d,0x00000006,0x000000f5,0x0000000a,0x0004007c,0x00000008,0x000000f6,0x000000f5, + 0x000200fe,0x000000f6,0x00010038,0x00050036,0x0000000e,0x00000011,0x00000000,0x0000000f, + 0x00030037,0x0000000d,0x00000010,0x000200f8,0x00000012,0x0004003d,0x00000008,0x000000f9, + 0x00000010,0x00050050,0x0000000e,0x000000fa,0x000000f9,0x000000f9,0x000200fe,0x000000fa, + 0x00010038,0x00050036,0x00000013,0x00000016,0x00000000,0x00000014,0x00030037,0x0000000d, + 0x00000015,0x000200f8,0x00000017,0x0004003d,0x00000008,0x000000fd,0x00000015,0x00060050, + 0x00000013,0x000000fe,0x000000fd,0x000000fd,0x000000fd,0x000200fe,0x000000fe,0x00010038, + 0x00050036,0x00000008,0x0000001c,0x00000000,0x00000018,0x00030037,0x0000000d,0x00000019, + 0x00030037,0x0000000d,0x0000001a,0x00030037,0x0000000d,0x0000001b,0x000200f8,0x0000001d, + 0x0004003d,0x00000008,0x00000101,0x00000019,0x0004003d,0x00000008,0x00000102,0x0000001a, + 0x0004003d,0x00000008,0x00000103,0x0000001b,0x0008000c,0x00000008,0x00000104,0x00000001, + 0x0000002e,0x00000101,0x00000102,0x00000103,0x000200fe,0x00000104,0x00010038,0x00050036, + 0x00000013,0x00000023,0x00000000,0x0000001f,0x00030037,0x0000001e,0x00000020,0x00030037, + 0x0000001e,0x00000021,0x00030037,0x0000000d,0x00000022,0x000200f8,0x00000024,0x0004003d, + 0x00000013,0x00000107,0x00000020,0x0004003d,0x00000013,0x00000108,0x00000021,0x0004003d, + 0x00000008,0x00000109,0x00000022,0x00060050,0x00000013,0x0000010a,0x00000109,0x00000109, + 0x00000109,0x0008000c,0x00000013,0x0000010b,0x00000001,0x0000002e,0x00000107,0x00000108, + 0x0000010a,0x000200fe,0x0000010b,0x00010038,0x00050036,0x00000008,0x00000027,0x00000000, + 0x00000025,0x00030037,0x0000000d,0x00000026,0x000200f8,0x00000028,0x0004003d,0x00000008, + 0x0000010e,0x00000026,0x0008000c,0x00000008,0x00000111,0x00000001,0x0000002b,0x0000010e, + 0x0000010f,0x00000110,0x000200fe,0x00000111,0x00010038,0x00050036,0x0000000e,0x0000002c, + 0x00000000,0x0000002a,0x00030037,0x00000029,0x0000002b,0x000200f8,0x0000002d,0x0004003b, + 0x0000000d,0x00000115,0x00000007,0x0004003b,0x0000000d,0x00000117,0x00000007,0x0004003d, + 0x0000000e,0x00000114,0x0000002b,0x0003003e,0x00000115,0x0000010f,0x00050039,0x0000000e, + 0x00000116,0x00000011,0x00000115,0x0003003e,0x00000117,0x00000110,0x00050039,0x0000000e, + 0x00000118,0x00000011,0x00000117,0x0008000c,0x0000000e,0x00000119,0x00000001,0x0000002b, + 0x00000114,0x00000116,0x00000118,0x000200fe,0x00000119,0x00010038,0x00050036,0x00000013, + 0x00000030,0x00000000,0x0000002e,0x00030037,0x0000001e,0x0000002f,0x000200f8,0x00000031, + 0x0004003b,0x0000000d,0x0000011d,0x00000007,0x0004003b,0x0000000d,0x0000011f,0x00000007, + 0x0004003d,0x00000013,0x0000011c,0x0000002f,0x0003003e,0x0000011d,0x0000010f,0x00050039, + 0x00000013,0x0000011e,0x00000016,0x0000011d,0x0003003e,0x0000011f,0x00000110,0x00050039, + 0x00000013,0x00000120,0x00000016,0x0000011f,0x0008000c,0x00000013,0x00000121,0x00000001, + 0x0000002b,0x0000011c,0x0000011e,0x00000120,0x000200fe,0x00000121,0x00010038,0x00050036, + 0x0000000e,0x00000033,0x00000000,0x0000002a,0x00030037,0x00000029,0x00000032,0x000200f8, + 0x00000034,0x0004003d,0x0000000e,0x00000124,0x00000032,0x0006000c,0x0000000e,0x00000125, + 0x00000001,0x0000000a,0x00000124,0x000200fe,0x00000125,0x00010038,0x00050036,0x0000000e, + 0x00000037,0x00000000,0x00000035,0x00030037,0x00000007,0x00000036,0x000200f8,0x00000038, + 0x0004003d,0x00000006,0x00000128,0x00000036,0x0006000c,0x0000000e,0x00000129,0x00000001, + 0x0000003e,0x00000128,0x000200fe,0x00000129,0x00010038,0x00050036,0x00000008,0x0000003c, + 0x00000000,0x00000039,0x00030037,0x0000000d,0x0000003a,0x00030037,0x0000000d,0x0000003b, + 0x000200f8,0x0000003d,0x0004003d,0x00000008,0x0000012c,0x0000003a,0x0004003d,0x00000008, + 0x0000012d,0x0000003b,0x0007000c,0x00000008,0x0000012e,0x00000001,0x00000025,0x0000012c, + 0x0000012d,0x000200fe,0x0000012e,0x00010038,0x00050036,0x00000008,0x00000040,0x00000000, + 0x00000039,0x00030037,0x0000000d,0x0000003e,0x00030037,0x0000000d,0x0000003f,0x000200f8, + 0x00000041,0x0004003d,0x00000008,0x00000131,0x0000003e,0x0004003d,0x00000008,0x00000132, + 0x0000003f,0x0007000c,0x00000008,0x00000133,0x00000001,0x00000028,0x00000131,0x00000132, + 0x000200fe,0x00000133,0x00010038,0x00050036,0x00000008,0x00000044,0x00000000,0x00000039, + 0x00030037,0x0000000d,0x00000042,0x00030037,0x0000000d,0x00000043,0x000200f8,0x00000045, + 0x0004003d,0x00000008,0x00000136,0x00000042,0x0004003d,0x00000008,0x00000137,0x00000043, + 0x0007000c,0x00000008,0x00000138,0x00000001,0x0000001a,0x00000136,0x00000137,0x000200fe, + 0x00000138,0x00010038,0x00050036,0x00000013,0x0000004a,0x00000000,0x00000046,0x00030037, + 0x0000001e,0x00000047,0x00030037,0x0000001e,0x00000048,0x00030037,0x0000001e,0x00000049, + 0x000200f8,0x0000004b,0x0004003b,0x0000001e,0x0000013b,0x00000007,0x0004003d,0x00000013, + 0x0000013c,0x00000047,0x0004007f,0x00000013,0x0000013d,0x0000013c,0x0004003d,0x00000013, + 0x0000013e,0x00000049,0x00050085,0x00000013,0x0000013f,0x0000013d,0x0000013e,0x0004003d, + 0x00000013,0x00000140,0x00000049,0x00050081,0x00000013,0x00000141,0x0000013f,0x00000140, + 0x0003003e,0x0000013b,0x00000141,0x0004003d,0x00000013,0x00000142,0x00000047,0x0004003d, + 0x00000013,0x00000143,0x00000048,0x00050085,0x00000013,0x00000144,0x00000142,0x00000143, + 0x0004003d,0x00000013,0x00000145,0x0000013b,0x00050081,0x00000013,0x00000146,0x00000144, + 0x00000145,0x000200fe,0x00000146,0x00010038,0x00050036,0x00000013,0x0000004d,0x00000000, + 0x0000002e,0x00030037,0x0000001e,0x0000004c,0x000200f8,0x0000004e,0x0004003b,0x00000007, + 0x0000014b,0x00000007,0x0004003b,0x0000000d,0x0000014d,0x00000007,0x0004003b,0x0000001e, + 0x00000150,0x00000007,0x0004003d,0x00000013,0x00000149,0x0000004c,0x0003003e,0x0000014b, + 0x0000014a,0x00050039,0x00000008,0x0000014c,0x0000000b,0x0000014b,0x0003003e,0x0000014d, + 0x0000014c,0x00050039,0x00000013,0x0000014e,0x00000016,0x0000014d,0x00050085,0x00000013, + 0x0000014f,0x00000149,0x0000014e,0x0003003e,0x00000150,0x0000014f,0x00050039,0x00000013, + 0x00000151,0x00000030,0x00000150,0x000200fe,0x00000151,0x00010038,0x00050036,0x00000013, + 0x00000050,0x00000000,0x0000002e,0x00030037,0x0000001e,0x0000004f,0x000200f8,0x00000051, + 0x0004003b,0x0000001e,0x00000154,0x00000007,0x0004003b,0x0000000d,0x00000157,0x00000007, + 0x0004003b,0x0000000d,0x0000015c,0x00000007,0x0004003b,0x0000001e,0x0000015f,0x00000007, + 0x0004003b,0x0000000d,0x00000162,0x00000007,0x0004003b,0x0000000d,0x00000165,0x00000007, + 0x0004003b,0x0000000d,0x0000016c,0x00000007,0x0004003d,0x00000013,0x00000155,0x0000004f, + 0x0003003e,0x00000157,0x00000156,0x00050039,0x00000013,0x00000158,0x00000016,0x00000157, + 0x0007000c,0x00000013,0x00000159,0x00000001,0x0000001a,0x00000155,0x00000158,0x0003003e, + 0x00000154,0x00000159,0x0004003d,0x00000013,0x0000015a,0x00000154,0x0003003e,0x0000015c, + 0x0000015b,0x00050039,0x00000013,0x0000015d,0x00000016,0x0000015c,0x00050083,0x00000013, + 0x0000015e,0x0000015a,0x0000015d,0x0003003e,0x0000015f,0x0000015e,0x00050039,0x00000013, + 0x00000160,0x00000030,0x0000015f,0x0003003e,0x00000162,0x00000161,0x00050039,0x00000013, + 0x00000163,0x00000016,0x00000162,0x0003003e,0x00000165,0x00000164,0x00050039,0x00000013, + 0x00000166,0x00000016,0x00000165,0x0004003d,0x00000013,0x00000167,0x00000154,0x00050085, + 0x00000013,0x00000168,0x00000166,0x00000167,0x00050083,0x00000013,0x00000169,0x00000163, + 0x00000168,0x00050088,0x00000013,0x0000016a,0x00000160,0x00000169,0x0003003e,0x0000016c, + 0x0000016b,0x00050039,0x00000013,0x0000016d,0x00000016,0x0000016c,0x0007000c,0x00000013, + 0x0000016e,0x00000001,0x0000001a,0x0000016a,0x0000016d,0x000200fe,0x0000016e,0x00010038, + 0x00050036,0x00000013,0x00000053,0x00000000,0x0000002e,0x00030037,0x0000001e,0x00000052, + 0x000200f8,0x00000054,0x0004003b,0x0000001e,0x00000171,0x00000007,0x0004003b,0x00000029, + 0x00000176,0x00000007,0x0004003b,0x0000001e,0x0000017e,0x00000007,0x0004003b,0x0000001e, + 0x0000018e,0x00000007,0x0004003b,0x0000001e,0x0000018f,0x00000007,0x0004003b,0x0000001e, + 0x00000190,0x00000007,0x0003003e,0x00000171,0x00000175,0x0003003e,0x00000176,0x00000179, + 0x0004003d,0x00000013,0x0000017a,0x00000052,0x0004003d,0x00000013,0x0000017b,0x00000171, + 0x0008004f,0x00000013,0x0000017c,0x0000017b,0x0000017b,0x00000000,0x00000000,0x00000000, + 0x00050083,0x00000013,0x0000017d,0x0000017a,0x0000017c,0x0003003e,0x0000017e,0x0000017d, + 0x00050039,0x00000013,0x0000017f,0x0000004d,0x0000017e,0x0004003d,0x00000013,0x00000180, + 0x00000052,0x0004003d,0x00000013,0x00000181,0x00000171,0x0008004f,0x00000013,0x00000182, + 0x00000181,0x00000181,0x00000001,0x00000001,0x00000001,0x00050085,0x00000013,0x00000183, + 0x00000180,0x00000182,0x0004003d,0x00000013,0x00000184,0x00000052,0x0004003d,0x0000000e, + 0x00000185,0x00000176,0x0008004f,0x00000013,0x00000186,0x00000185,0x00000185,0x00000000, + 0x00000000,0x00000000,0x00050085,0x00000013,0x00000187,0x00000184,0x00000186,0x0004003d, + 0x0000000e,0x00000188,0x00000176,0x0008004f,0x00000013,0x00000189,0x00000188,0x00000188, + 0x00000001,0x00000001,0x00000001,0x00050081,0x00000013,0x0000018a,0x00000187,0x00000189, + 0x0004003d,0x00000013,0x0000018b,0x00000171,0x0008004f,0x00000013,0x0000018c,0x0000018b, + 0x0000018b,0x00000002,0x00000002,0x00000002,0x0007000c,0x00000013,0x0000018d,0x00000001, + 0x0000001a,0x0000018a,0x0000018c,0x0003003e,0x0000018e,0x0000017f,0x0003003e,0x0000018f, + 0x00000183,0x0003003e,0x00000190,0x0000018d,0x00070039,0x00000013,0x00000191,0x0000004a, + 0x0000018e,0x0000018f,0x00000190,0x000200fe,0x00000191,0x00010038,0x00050036,0x00000056, + 0x00000058,0x00000000,0x00000057,0x000200f8,0x00000059,0x00050041,0x00000198,0x00000199, + 0x00000196,0x00000197,0x0004003d,0x00000056,0x0000019a,0x00000199,0x000200fe,0x0000019a, + 0x00010038,0x00050036,0x00000056,0x0000005a,0x00000000,0x00000057,0x000200f8,0x0000005b, + 0x00050041,0x00000198,0x0000019e,0x00000196,0x0000019d,0x0004003d,0x00000056,0x0000019f, + 0x0000019e,0x000200fe,0x0000019f,0x00010038,0x00050036,0x00000056,0x0000005c,0x00000000, + 0x00000057,0x000200f8,0x0000005d,0x00050041,0x00000198,0x000001a3,0x00000196,0x000001a2, + 0x0004003d,0x00000056,0x000001a4,0x000001a3,0x000200fe,0x000001a4,0x00010038,0x00050036, + 0x00000056,0x0000005e,0x00000000,0x00000057,0x000200f8,0x0000005f,0x00050041,0x00000198, + 0x000001a8,0x00000196,0x000001a7,0x0004003d,0x00000056,0x000001a9,0x000001a8,0x000200fe, + 0x000001a9,0x00010038,0x00050036,0x00000056,0x00000060,0x00000000,0x00000057,0x000200f8, + 0x00000061,0x0004003b,0x0000006e,0x000001ac,0x00000007,0x00050041,0x000001ae,0x000001af, + 0x00000196,0x000001ad,0x0004003d,0x0000000e,0x000001b0,0x000001af,0x00050050,0x0000000e, + 0x000001b1,0x00000110,0x00000110,0x00050088,0x0000000e,0x000001b2,0x000001b1,0x000001b0, + 0x00050041,0x000001b4,0x000001b5,0x00000196,0x000001b3,0x0004003d,0x00000055,0x000001b6, + 0x000001b5,0x00050050,0x00000056,0x000001b7,0x000001b6,0x000001b6,0x0004006f,0x0000000e, + 0x000001b8,0x000001b7,0x00050088,0x0000000e,0x000001b9,0x000001b2,0x000001b8,0x0004006e, + 0x00000056,0x000001ba,0x000001b9,0x0003003e,0x000001ac,0x000001ba,0x0004003d,0x00000056, + 0x000001bb,0x000001ac,0x000200fe,0x000001bb,0x00010038,0x00050036,0x00000056,0x00000062, + 0x00000000,0x00000057,0x000200f8,0x00000063,0x00040039,0x00000056,0x000001be,0x00000060, + 0x00050050,0x00000056,0x000001bf,0x000001a7,0x000001a7,0x00050084,0x00000056,0x000001c0, + 0x000001be,0x000001bf,0x000200fe,0x000001c0,0x00010038,0x00050036,0x00000056,0x00000064, + 0x00000000,0x00000057,0x000200f8,0x00000065,0x00050041,0x00000198,0x000001c4,0x00000196, + 0x000001c3,0x0004003d,0x00000056,0x000001c5,0x000001c4,0x000200fe,0x000001c5,0x00010038, + 0x00050036,0x00000006,0x00000067,0x00000000,0x00000066,0x000200f8,0x00000068,0x00050041, + 0x000001c9,0x000001ca,0x00000196,0x000001c8,0x0004003d,0x00000006,0x000001cb,0x000001ca, + 0x000200fe,0x000001cb,0x00010038,0x00050036,0x00000008,0x0000006a,0x00000000,0x00000069, + 0x000200f8,0x0000006b,0x00060041,0x000001d0,0x000001d1,0x00000196,0x000001ce,0x000001cf, + 0x0004003d,0x00000008,0x000001d2,0x000001d1,0x000200fe,0x000001d2,0x00010038,0x00050036, + 0x00000008,0x0000006c,0x00000000,0x00000069,0x000200f8,0x0000006d,0x00060041,0x000001d0, + 0x000001d6,0x00000196,0x000001ce,0x000001d5,0x0004003d,0x00000008,0x000001d7,0x000001d6, + 0x000200fe,0x000001d7,0x00010038,0x00050036,0x00000013,0x00000071,0x00000000,0x0000006f, + 0x00030037,0x0000006e,0x00000070,0x000200f8,0x00000072,0x0004003d,0x000001da,0x000001dd, + 0x000001dc,0x0004003d,0x00000056,0x000001de,0x00000070,0x0007005f,0x00000076,0x000001df, + 0x000001dd,0x000001de,0x00000002,0x000001a2,0x0008004f,0x00000013,0x000001e0,0x000001df, + 0x000001df,0x00000000,0x00000001,0x00000002,0x000200fe,0x000001e0,0x00010038,0x00050036, + 0x00000013,0x00000074,0x00000000,0x0000006f,0x00030037,0x0000006e,0x00000073,0x000200f8, + 0x00000075,0x0004003d,0x000001da,0x000001e4,0x000001e3,0x0004003d,0x00000056,0x000001e5, + 0x00000073,0x0007005f,0x00000076,0x000001e6,0x000001e4,0x000001e5,0x00000002,0x000001a2, + 0x0008004f,0x00000013,0x000001e7,0x000001e6,0x000001e6,0x00000000,0x00000001,0x00000002, + 0x000200fe,0x000001e7,0x00010038,0x00050036,0x00000076,0x00000079,0x00000000,0x00000077, + 0x00030037,0x00000029,0x00000078,0x000200f8,0x0000007a,0x0004003d,0x000001da,0x000001eb, + 0x000001ea,0x0004003d,0x000001ec,0x000001ef,0x000001ee,0x00050056,0x000001f0,0x000001f1, + 0x000001eb,0x000001ef,0x0004003d,0x0000000e,0x000001f2,0x00000078,0x00070058,0x00000076, + 0x000001f3,0x000001f1,0x000001f2,0x00000002,0x0000010f,0x000200fe,0x000001f3,0x00010038, + 0x00050036,0x0000007b,0x0000007e,0x00000000,0x0000007c,0x00030037,0x0000006e,0x0000007d, + 0x000200f8,0x0000007f,0x0004003b,0x00000007,0x000001f6,0x00000007,0x0004003b,0x00000007, + 0x000001ff,0x00000007,0x0004003d,0x000001f7,0x000001fa,0x000001f9,0x0004003d,0x00000056, + 0x000001fb,0x0000007d,0x0007005f,0x000001fc,0x000001fd,0x000001fa,0x000001fb,0x00000002, + 0x000001a2,0x00050051,0x00000006,0x000001fe,0x000001fd,0x00000000,0x0003003e,0x000001f6, + 0x000001fe,0x0004003d,0x000001f7,0x00000201,0x00000200,0x0004003d,0x00000056,0x00000202, + 0x0000007d,0x0007005f,0x000001fc,0x00000203,0x00000201,0x00000202,0x00000002,0x000001a2, + 0x00050051,0x00000006,0x00000204,0x00000203,0x00000000,0x0003003e,0x000001ff,0x00000204, + 0x0004003d,0x00000006,0x00000205,0x000001f6,0x0004003d,0x00000006,0x00000206,0x000001ff, + 0x00050050,0x0000007b,0x00000207,0x00000205,0x00000206,0x000200fe,0x00000207,0x00010038, + 0x00050036,0x0000007b,0x00000081,0x00000000,0x0000007c,0x00030037,0x0000006e,0x00000080, + 0x000200f8,0x00000082,0x0004003b,0x00000007,0x0000020a,0x00000007,0x0004003b,0x00000007, + 0x00000210,0x00000007,0x0004003d,0x000001f7,0x0000020c,0x0000020b,0x0004003d,0x00000056, + 0x0000020d,0x00000080,0x0007005f,0x000001fc,0x0000020e,0x0000020c,0x0000020d,0x00000002, + 0x000001a2,0x00050051,0x00000006,0x0000020f,0x0000020e,0x00000000,0x0003003e,0x0000020a, + 0x0000020f,0x0004003d,0x000001f7,0x00000212,0x00000211,0x0004003d,0x00000056,0x00000213, + 0x00000080,0x0007005f,0x000001fc,0x00000214,0x00000212,0x00000213,0x00000002,0x000001a2, + 0x00050051,0x00000006,0x00000215,0x00000214,0x00000000,0x0003003e,0x00000210,0x00000215, + 0x0004003d,0x00000006,0x00000216,0x0000020a,0x0004003d,0x00000006,0x00000217,0x00000210, + 0x00050050,0x0000007b,0x00000218,0x00000216,0x00000217,0x000200fe,0x00000218,0x00010038, + 0x00050036,0x00000076,0x00000088,0x00000000,0x00000085,0x00030037,0x00000083,0x00000086, + 0x00030037,0x00000084,0x00000087,0x000200f8,0x00000089,0x0004003d,0x000001da,0x0000021c, + 0x0000021b,0x0004003d,0x0000007b,0x0000021d,0x00000087,0x0004007c,0x00000056,0x0000021e, + 0x0000021d,0x0004003d,0x00000055,0x0000021f,0x00000086,0x0007005f,0x00000076,0x00000220, + 0x0000021c,0x0000021e,0x00000002,0x0000021f,0x000200fe,0x00000220,0x00010038,0x00050036, + 0x00000006,0x0000008c,0x00000000,0x0000008a,0x00030037,0x00000083,0x0000008b,0x000200f8, + 0x0000008d,0x0004003d,0x00000055,0x00000227,0x0000008b,0x00060041,0x00000228,0x00000229, + 0x00000226,0x000001a2,0x00000227,0x0004003d,0x00000006,0x0000022a,0x00000229,0x000200fe, + 0x0000022a,0x00010038,0x00050036,0x00000006,0x0000008e,0x00000000,0x00000066,0x000200f8, + 0x0000008f,0x0004003b,0x00000083,0x0000022d,0x00000007,0x0003003e,0x0000022d,0x000001a7, + 0x00050039,0x00000006,0x0000022e,0x0000008c,0x0000022d,0x000200fe,0x0000022e,0x00010038, + 0x00050036,0x00000002,0x00000094,0x00000000,0x00000091,0x00030037,0x0000006e,0x00000092, + 0x00030037,0x00000090,0x00000093,0x000200f8,0x00000095,0x0004003d,0x00000231,0x00000234, + 0x00000233,0x0004003d,0x00000056,0x00000235,0x00000092,0x0004003d,0x00000076,0x00000236, + 0x00000093,0x00040063,0x00000234,0x00000235,0x00000236,0x000100fd,0x00010038,0x00050036, + 0x00000013,0x0000009a,0x00000000,0x00000096,0x00030037,0x0000001e,0x00000097,0x00030037, + 0x0000000d,0x00000098,0x00030037,0x0000000d,0x00000099,0x000200f8,0x0000009b,0x0004003b, + 0x0000001e,0x00000237,0x00000007,0x0004003b,0x0000000d,0x0000023c,0x00000007,0x0004003b, + 0x0000000d,0x00000244,0x00000007,0x0004003d,0x00000013,0x00000238,0x00000097,0x0004003d, + 0x00000008,0x00000239,0x00000098,0x00050088,0x00000008,0x0000023b,0x00000239,0x0000023a, + 0x0003003e,0x0000023c,0x0000023b,0x00050039,0x00000013,0x0000023d,0x00000016,0x0000023c, + 0x00050083,0x00000013,0x0000023e,0x00000238,0x0000023d,0x0003003e,0x00000237,0x0000023e, + 0x0004003d,0x00000013,0x0000023f,0x00000237,0x0004003d,0x00000008,0x00000240,0x00000099, + 0x0004003d,0x00000008,0x00000241,0x00000098,0x00050083,0x00000008,0x00000242,0x00000240, + 0x00000241,0x00050088,0x00000008,0x00000243,0x00000242,0x0000023a,0x0003003e,0x00000244, + 0x00000243,0x00050039,0x00000013,0x00000245,0x00000016,0x00000244,0x00050088,0x00000013, + 0x00000246,0x0000023f,0x00000245,0x000200fe,0x00000246,0x00010038,0x00050036,0x00000013, + 0x0000009d,0x00000000,0x0000002e,0x00030037,0x0000001e,0x0000009c,0x000200f8,0x0000009e, + 0x0004003b,0x0000001e,0x0000024e,0x00000007,0x0004003b,0x0000001e,0x0000024f,0x00000007, + 0x0004003b,0x0000001e,0x00000253,0x00000007,0x0004003b,0x0000001e,0x0000025d,0x00000007, + 0x0004003b,0x0000000d,0x0000025f,0x00000007,0x0004003b,0x0000000d,0x00000260,0x00000007, + 0x00040039,0x00000006,0x00000249,0x00000067,0x000300f7,0x0000024d,0x00000000,0x000900fb, + 0x00000249,0x0000024d,0x00000000,0x0000024a,0x00000001,0x0000024b,0x00000002,0x0000024c, + 0x000200f8,0x0000024a,0x0004003d,0x00000013,0x00000250,0x0000009c,0x0003003e,0x0000024f, + 0x00000250,0x00050039,0x00000013,0x00000251,0x00000053,0x0000024f,0x0003003e,0x0000024e, + 0x00000251,0x000200f9,0x0000024d,0x000200f8,0x0000024b,0x0004003d,0x00000013,0x00000254, + 0x0000009c,0x0003003e,0x00000253,0x00000254,0x00050039,0x00000013,0x00000255,0x00000050, + 0x00000253,0x00040039,0x00000008,0x00000257,0x0000006c,0x00050088,0x00000008,0x00000258, + 0x00000256,0x00000257,0x0005008e,0x00000013,0x00000259,0x00000255,0x00000258,0x0003003e, + 0x0000024e,0x00000259,0x000200f9,0x0000024d,0x000200f8,0x0000024c,0x00040039,0x00000008, + 0x0000025b,0x0000006a,0x00040039,0x00000008,0x0000025c,0x0000006c,0x0004003d,0x00000013, + 0x0000025e,0x0000009c,0x0003003e,0x0000025d,0x0000025e,0x0003003e,0x0000025f,0x0000025b, + 0x0003003e,0x00000260,0x0000025c,0x00070039,0x00000013,0x00000261,0x0000009a,0x0000025d, + 0x0000025f,0x00000260,0x0003003e,0x0000024e,0x00000261,0x000200f9,0x0000024d,0x000200f8, + 0x0000024d,0x0004003d,0x00000013,0x00000264,0x0000024e,0x000200fe,0x00000264,0x00010038, + 0x00050036,0x000000a2,0x000000a6,0x00000000,0x000000a3,0x00030037,0x00000029,0x000000a4, + 0x00030037,0x0000006e,0x000000a5,0x000200f8,0x000000a7,0x0004003b,0x00000029,0x00000267, + 0x00000007,0x0004003b,0x0000026f,0x00000270,0x00000007,0x0004003b,0x00000029,0x00000276, + 0x00000007,0x0004003b,0x00000029,0x00000277,0x00000007,0x0004003d,0x0000000e,0x00000268, + 0x000000a4,0x0004003d,0x00000056,0x00000269,0x000000a5,0x0004006f,0x0000000e,0x0000026a, + 0x00000269,0x00050085,0x0000000e,0x0000026b,0x00000268,0x0000026a,0x00050083,0x0000000e, + 0x0000026e,0x0000026b,0x0000026d,0x0003003e,0x00000267,0x0000026e,0x0004003d,0x0000000e, + 0x00000272,0x00000267,0x0006000c,0x0000000e,0x00000273,0x00000001,0x00000008,0x00000272, + 0x0004006e,0x00000056,0x00000274,0x00000273,0x00050041,0x0000006e,0x00000275,0x00000270, + 0x00000271,0x0003003e,0x00000275,0x00000274,0x0004003d,0x0000000e,0x00000278,0x00000267, + 0x0003003e,0x00000277,0x00000278,0x00050039,0x0000000e,0x00000279,0x00000033,0x00000277, + 0x0003003e,0x00000276,0x00000279,0x00060041,0x0000006e,0x0000027b,0x00000270,0x000001a2, + 0x000001a2,0x0003003e,0x0000027b,0x0000027a,0x00060041,0x0000006e,0x0000027d,0x00000270, + 0x000001a2,0x000001a7,0x0003003e,0x0000027d,0x0000027c,0x00060041,0x0000006e,0x0000027f, + 0x00000270,0x000001a2,0x00000271,0x0003003e,0x0000027f,0x0000027e,0x00060041,0x0000006e, + 0x00000282,0x00000270,0x000001a2,0x00000280,0x0003003e,0x00000282,0x00000281,0x00050041, + 0x0000000d,0x00000283,0x00000276,0x000001cf,0x0004003d,0x00000008,0x00000284,0x00000283, + 0x00050083,0x00000008,0x00000285,0x00000110,0x00000284,0x00050041,0x0000000d,0x00000286, + 0x00000276,0x000001d5,0x0004003d,0x00000008,0x00000287,0x00000286,0x00050083,0x00000008, + 0x00000288,0x00000110,0x00000287,0x00050085,0x00000008,0x00000289,0x00000285,0x00000288, + 0x00060041,0x0000000d,0x0000028a,0x00000270,0x000001a7,0x000001a2,0x0003003e,0x0000028a, + 0x00000289,0x00050041,0x0000000d,0x0000028b,0x00000276,0x000001cf,0x0004003d,0x00000008, + 0x0000028c,0x0000028b,0x00050041,0x0000000d,0x0000028d,0x00000276,0x000001d5,0x0004003d, + 0x00000008,0x0000028e,0x0000028d,0x00050083,0x00000008,0x0000028f,0x00000110,0x0000028e, + 0x00050085,0x00000008,0x00000290,0x0000028c,0x0000028f,0x00060041,0x0000000d,0x00000291, + 0x00000270,0x000001a7,0x000001a7,0x0003003e,0x00000291,0x00000290,0x00050041,0x0000000d, + 0x00000292,0x00000276,0x000001cf,0x0004003d,0x00000008,0x00000293,0x00000292,0x00050083, + 0x00000008,0x00000294,0x00000110,0x00000293,0x00050041,0x0000000d,0x00000295,0x00000276, + 0x000001d5,0x0004003d,0x00000008,0x00000296,0x00000295,0x00050085,0x00000008,0x00000297, + 0x00000294,0x00000296,0x00060041,0x0000000d,0x00000298,0x00000270,0x000001a7,0x00000271, + 0x0003003e,0x00000298,0x00000297,0x00050041,0x0000000d,0x00000299,0x00000276,0x000001cf, + 0x0004003d,0x00000008,0x0000029a,0x00000299,0x00050041,0x0000000d,0x0000029b,0x00000276, + 0x000001d5,0x0004003d,0x00000008,0x0000029c,0x0000029b,0x00050085,0x00000008,0x0000029d, + 0x0000029a,0x0000029c,0x00060041,0x0000000d,0x0000029e,0x00000270,0x000001a7,0x00000280, + 0x0003003e,0x0000029e,0x0000029d,0x0004003d,0x000000a2,0x0000029f,0x00000270,0x000200fe, + 0x0000029f,0x00010038,0x00050036,0x000000a8,0x000000ac,0x00000000,0x000000a9,0x00030037, + 0x0000006e,0x000000aa,0x00030037,0x0000006e,0x000000ab,0x000200f8,0x000000ad,0x0004003d, + 0x00000056,0x000002a2,0x000000aa,0x0004007c,0x0000007b,0x000002a3,0x000002a2,0x0004003d, + 0x00000056,0x000002a4,0x000000ab,0x0004007c,0x0000007b,0x000002a5,0x000002a4,0x000500b0, + 0x000002a6,0x000002a7,0x000002a3,0x000002a5,0x0004009b,0x000000a8,0x000002a8,0x000002a7, + 0x000200fe,0x000002a8,0x00010038,0x00050036,0x000000a8,0x000000b0,0x00000000,0x000000ae, + 0x00030037,0x00000029,0x000000af,0x000200f8,0x000000b1,0x00050041,0x0000000d,0x000002ab, + 0x000000af,0x000001cf,0x0004003d,0x00000008,0x000002ac,0x000002ab,0x000500ba,0x000000a8, + 0x000002ad,0x000002ac,0x0000010f,0x000300f7,0x000002af,0x00000000,0x000400fa,0x000002ad, + 0x000002ae,0x000002af,0x000200f8,0x000002ae,0x00050041,0x0000000d,0x000002b0,0x000000af, + 0x000001cf,0x0004003d,0x00000008,0x000002b1,0x000002b0,0x000500b8,0x000000a8,0x000002b2, + 0x000002b1,0x00000110,0x000200f9,0x000002af,0x000200f8,0x000002af,0x000700f5,0x000000a8, + 0x000002b3,0x000002ad,0x000000b1,0x000002b2,0x000002ae,0x000300f7,0x000002b5,0x00000000, + 0x000400fa,0x000002b3,0x000002b4,0x000002b5,0x000200f8,0x000002b4,0x00050041,0x0000000d, + 0x000002b6,0x000000af,0x000001d5,0x0004003d,0x00000008,0x000002b7,0x000002b6,0x000500ba, + 0x000000a8,0x000002b8,0x000002b7,0x0000010f,0x000300f7,0x000002ba,0x00000000,0x000400fa, + 0x000002b8,0x000002b9,0x000002ba,0x000200f8,0x000002b9,0x00050041,0x0000000d,0x000002bb, + 0x000000af,0x000001d5,0x0004003d,0x00000008,0x000002bc,0x000002bb,0x000500b8,0x000000a8, + 0x000002bd,0x000002bc,0x00000110,0x000200f9,0x000002ba,0x000200f8,0x000002ba,0x000700f5, + 0x000000a8,0x000002be,0x000002b8,0x000002b4,0x000002bd,0x000002b9,0x000200f9,0x000002b5, + 0x000200f8,0x000002b5,0x000700f5,0x000000a8,0x000002bf,0x000002b3,0x000002af,0x000002be, + 0x000002ba,0x000200fe,0x000002bf,0x00010038,0x00050036,0x000000a8,0x000000b6,0x00000000, + 0x000000b2,0x00030037,0x0000006e,0x000000b3,0x00030037,0x0000006e,0x000000b4,0x00030037, + 0x0000006e,0x000000b5,0x000200f8,0x000000b7,0x00050041,0x00000083,0x000002c2,0x000000b3, + 0x000001cf,0x0004003d,0x00000055,0x000002c3,0x000002c2,0x00050041,0x00000083,0x000002c4, + 0x000000b4,0x000001cf,0x0004003d,0x00000055,0x000002c5,0x000002c4,0x000500af,0x000000a8, + 0x000002c6,0x000002c3,0x000002c5,0x000300f7,0x000002c8,0x00000000,0x000400fa,0x000002c6, + 0x000002c7,0x000002c8,0x000200f8,0x000002c7,0x00050041,0x00000083,0x000002c9,0x000000b3, + 0x000001cf,0x0004003d,0x00000055,0x000002ca,0x000002c9,0x00050041,0x00000083,0x000002cb, + 0x000000b5,0x000001cf,0x0004003d,0x00000055,0x000002cc,0x000002cb,0x00050041,0x00000083, + 0x000002cd,0x000000b4,0x000001cf,0x0004003d,0x00000055,0x000002ce,0x000002cd,0x00050080, + 0x00000055,0x000002cf,0x000002cc,0x000002ce,0x000500b1,0x000000a8,0x000002d0,0x000002ca, + 0x000002cf,0x000200f9,0x000002c8,0x000200f8,0x000002c8,0x000700f5,0x000000a8,0x000002d1, + 0x000002c6,0x000000b7,0x000002d0,0x000002c7,0x000300f7,0x000002d3,0x00000000,0x000400fa, + 0x000002d1,0x000002d2,0x000002d3,0x000200f8,0x000002d2,0x00050041,0x00000083,0x000002d4, + 0x000000b3,0x000001d5,0x0004003d,0x00000055,0x000002d5,0x000002d4,0x00050041,0x00000083, + 0x000002d6,0x000000b4,0x000001d5,0x0004003d,0x00000055,0x000002d7,0x000002d6,0x000500af, + 0x000000a8,0x000002d8,0x000002d5,0x000002d7,0x000200f9,0x000002d3,0x000200f8,0x000002d3, + 0x000700f5,0x000000a8,0x000002d9,0x000002d1,0x000002c8,0x000002d8,0x000002d2,0x000300f7, + 0x000002db,0x00000000,0x000400fa,0x000002d9,0x000002da,0x000002db,0x000200f8,0x000002da, + 0x00050041,0x00000083,0x000002dc,0x000000b3,0x000001d5,0x0004003d,0x00000055,0x000002dd, + 0x000002dc,0x00050041,0x00000083,0x000002de,0x000000b5,0x000001d5,0x0004003d,0x00000055, + 0x000002df,0x000002de,0x00050041,0x00000083,0x000002e0,0x000000b4,0x000001d5,0x0004003d, + 0x00000055,0x000002e1,0x000002e0,0x00050080,0x00000055,0x000002e2,0x000002df,0x000002e1, + 0x000500b1,0x000000a8,0x000002e3,0x000002dd,0x000002e2,0x000200f9,0x000002db,0x000200f8, + 0x000002db,0x000700f5,0x000000a8,0x000002e4,0x000002d9,0x000002d3,0x000002e3,0x000002da, + 0x000200fe,0x000002e4,0x00010038,0x00050036,0x00000008,0x000000bb,0x00000000,0x000000b8, + 0x00030037,0x00000013,0x000000b9,0x00030037,0x00000013,0x000000ba,0x000200f8,0x000000bc, + 0x0004003b,0x0000000d,0x000002e7,0x00000007,0x0004003b,0x0000000d,0x000002ea,0x00000007, + 0x0004003b,0x0000000d,0x000002eb,0x00000007,0x0004003b,0x0000000d,0x000002ef,0x00000007, + 0x0006000c,0x00000008,0x000002e8,0x00000001,0x00000042,0x000000b9,0x0006000c,0x00000008, + 0x000002e9,0x00000001,0x00000042,0x000000ba,0x0003003e,0x000002ea,0x000002e8,0x0003003e, + 0x000002eb,0x000002e9,0x00060039,0x00000008,0x000002ec,0x00000040,0x000002ea,0x000002eb, + 0x0003003e,0x000002e7,0x000002ec,0x0004003d,0x00000008,0x000002ed,0x000002e7,0x000500ba, + 0x000000a8,0x000002ee,0x000002ed,0x0000010f,0x000300f7,0x000002f1,0x00000000,0x000400fa, + 0x000002ee,0x000002f0,0x000002f9,0x000200f8,0x000002f0,0x0004003d,0x00000008,0x000002f2, + 0x000002e7,0x00060050,0x00000013,0x000002f3,0x000002f2,0x000002f2,0x000002f2,0x00050088, + 0x00000013,0x000002f4,0x000000b9,0x000002f3,0x0004003d,0x00000008,0x000002f5,0x000002e7, + 0x00060050,0x00000013,0x000002f6,0x000002f5,0x000002f5,0x000002f5,0x00050088,0x00000013, + 0x000002f7,0x000000ba,0x000002f6,0x00050094,0x00000008,0x000002f8,0x000002f4,0x000002f7, + 0x0003003e,0x000002ef,0x000002f8,0x000200f9,0x000002f1,0x000200f8,0x000002f9,0x0003003e, + 0x000002ef,0x00000110,0x000200f9,0x000002f1,0x000200f8,0x000002f1,0x0004003d,0x00000008, + 0x000002fa,0x000002ef,0x000200fe,0x000002fa,0x00010038,0x00050036,0x000000bd,0x000000bf, + 0x00000000,0x000000be,0x000200f8,0x000000c0,0x0004003b,0x000000c5,0x000002fd,0x00000007, + 0x00050041,0x00000029,0x000002ff,0x000002fd,0x000001a2,0x0003003e,0x000002ff,0x000002fe, + 0x00050041,0x0000000d,0x00000300,0x000002fd,0x000001a7,0x0003003e,0x00000300,0x0000010f, + 0x00050041,0x0000000d,0x00000301,0x000002fd,0x00000271,0x0003003e,0x00000301,0x0000010f, + 0x00050041,0x000000de,0x00000303,0x000002fd,0x00000280,0x0003003e,0x00000303,0x00000302, + 0x00050041,0x000000de,0x00000305,0x000002fd,0x00000304,0x0003003e,0x00000305,0x00000302, + 0x00050041,0x000000de,0x00000307,0x000002fd,0x00000306,0x0003003e,0x00000307,0x00000302, + 0x00050041,0x000000de,0x00000309,0x000002fd,0x00000308,0x0003003e,0x00000309,0x00000302, + 0x00050041,0x0000000d,0x0000030b,0x000002fd,0x0000030a,0x0003003e,0x0000030b,0x0000010f, + 0x00050041,0x000000de,0x0000030d,0x000002fd,0x0000030c,0x0003003e,0x0000030d,0x00000302, + 0x00050041,0x000000de,0x0000030f,0x000002fd,0x0000030e,0x0003003e,0x0000030f,0x00000302, + 0x0004003d,0x000000bd,0x00000310,0x000002fd,0x000200fe,0x00000310,0x00010038,0x00050036, + 0x000000a8,0x000000c3,0x00000000,0x000000c1,0x00030037,0x00000007,0x000000c2,0x000200f8, + 0x000000c4,0x0004003d,0x00000006,0x00000313,0x000000c2,0x000500c7,0x00000006,0x00000315, + 0x00000313,0x00000314,0x000500ab,0x000000a8,0x00000316,0x00000315,0x000001cf,0x000200fe, + 0x00000316,0x00010038,0x00050036,0x00000002,0x000000c9,0x00000000,0x000000c6,0x00030037, + 0x00000084,0x000000c7,0x00030037,0x000000c5,0x000000c8,0x000200f8,0x000000ca,0x0004003b, + 0x00000007,0x0000032d,0x00000007,0x0004003b,0x00000007,0x00000347,0x00000007,0x0004003b, + 0x00000007,0x0000034d,0x00000007,0x00050041,0x00000007,0x00000319,0x000000c7,0x000001cf, + 0x0004003d,0x00000006,0x0000031a,0x00000319,0x000500c2,0x00000006,0x0000031c,0x0000031a, + 0x0000031b,0x000500c7,0x00000006,0x0000031e,0x0000031c,0x0000031d,0x00040070,0x00000008, + 0x0000031f,0x0000031e,0x00050088,0x00000008,0x00000321,0x0000031f,0x00000320,0x00050041, + 0x0000000d,0x00000322,0x000000c8,0x000001a7,0x0003003e,0x00000322,0x00000321,0x00050041, + 0x00000007,0x00000323,0x000000c7,0x000001cf,0x0004003d,0x00000006,0x00000324,0x00000323, + 0x000500c2,0x00000006,0x00000326,0x00000324,0x00000325,0x000500c7,0x00000006,0x00000328, + 0x00000326,0x00000327,0x00040070,0x00000008,0x00000329,0x00000328,0x00050088,0x00000008, + 0x0000032b,0x00000329,0x0000032a,0x00050041,0x0000000d,0x0000032c,0x000000c8,0x00000271, + 0x0003003e,0x0000032c,0x0000032b,0x00050041,0x00000007,0x0000032e,0x000000c7,0x000001cf, + 0x0004003d,0x00000006,0x0000032f,0x0000032e,0x0003003e,0x0000032d,0x0000032f,0x00050039, + 0x000000a8,0x00000330,0x000000c3,0x0000032d,0x00050041,0x000000de,0x00000331,0x000000c8, + 0x00000304,0x0003003e,0x00000331,0x00000330,0x00050041,0x0000000d,0x00000332,0x000000c8, + 0x000001a7,0x0004003d,0x00000008,0x00000333,0x00000332,0x000500ba,0x000000a8,0x00000334, + 0x00000333,0x0000010f,0x00050041,0x000000de,0x00000335,0x000000c8,0x00000280,0x0003003e, + 0x00000335,0x00000334,0x00050041,0x000000de,0x00000336,0x000000c8,0x00000280,0x0004003d, + 0x000000a8,0x00000337,0x00000336,0x000300f7,0x00000339,0x00000000,0x000400fa,0x00000337, + 0x00000338,0x00000339,0x000200f8,0x00000338,0x00050041,0x000000de,0x0000033a,0x000000c8, + 0x00000304,0x0004003d,0x000000a8,0x0000033b,0x0000033a,0x000400a8,0x000000a8,0x0000033c, + 0x0000033b,0x000200f9,0x00000339,0x000200f8,0x00000339,0x000700f5,0x000000a8,0x0000033d, + 0x00000337,0x000000ca,0x0000033c,0x00000338,0x00050041,0x000000de,0x0000033e,0x000000c8, + 0x00000306,0x0003003e,0x0000033e,0x0000033d,0x00050041,0x000000de,0x0000033f,0x000000c8, + 0x00000306,0x0004003d,0x000000a8,0x00000340,0x0000033f,0x000300f7,0x00000342,0x00000000, + 0x000400fa,0x00000340,0x00000341,0x00000342,0x000200f8,0x00000341,0x00050041,0x0000000d, + 0x00000343,0x000000c8,0x000001a7,0x0004003d,0x00000008,0x00000344,0x00000343,0x00050083, + 0x00000008,0x00000345,0x00000110,0x00000344,0x00050041,0x0000000d,0x00000346,0x000000c8, + 0x000001a7,0x0003003e,0x00000346,0x00000345,0x000200f9,0x00000342,0x000200f8,0x00000342, + 0x00050041,0x00000007,0x00000348,0x000000c7,0x000001cf,0x0004003d,0x00000006,0x00000349, + 0x00000348,0x0003003e,0x00000347,0x00000349,0x00050039,0x0000000e,0x0000034a,0x00000037, + 0x00000347,0x00050051,0x00000008,0x0000034b,0x0000034a,0x00000000,0x00060041,0x0000000d, + 0x0000034c,0x000000c8,0x000001a2,0x000001cf,0x0003003e,0x0000034c,0x0000034b,0x00050041, + 0x00000007,0x0000034e,0x000000c7,0x000001d5,0x0004003d,0x00000006,0x0000034f,0x0000034e, + 0x0003003e,0x0000034d,0x0000034f,0x00050039,0x0000000e,0x00000350,0x00000037,0x0000034d, + 0x00050051,0x00000008,0x00000351,0x00000350,0x00000000,0x00060041,0x0000000d,0x00000352, + 0x000000c8,0x000001a2,0x000001d5,0x0003003e,0x00000352,0x00000351,0x00050041,0x000000de, + 0x00000353,0x000000c8,0x00000308,0x0003003e,0x00000353,0x00000302,0x000100fd,0x00010038, + 0x00050036,0x00000076,0x000000cf,0x00000000,0x000000cb,0x00030037,0x00000029,0x000000cc, + 0x00030037,0x00000055,0x000000cd,0x00030037,0x00000056,0x000000ce,0x000200f8,0x000000d0, + 0x0004003b,0x0000026f,0x00000354,0x00000007,0x0004003b,0x00000029,0x00000355,0x00000007, + 0x0004003b,0x0000006e,0x00000357,0x00000007,0x0004003b,0x0000000d,0x00000359,0x00000007, + 0x0004003b,0x00000090,0x0000035a,0x00000007,0x0004003b,0x00000083,0x0000035e,0x00000007, + 0x0004003b,0x0000006e,0x00000366,0x00000007,0x0004003b,0x0000006e,0x0000036a,0x00000007, + 0x0004003b,0x0000006e,0x0000036f,0x00000007,0x0004003b,0x0000006e,0x00000371,0x00000007, + 0x0004003b,0x00000090,0x00000375,0x00000007,0x0004003b,0x00000083,0x00000378,0x00000007, + 0x0004003b,0x00000084,0x00000379,0x00000007,0x0004003b,0x0000000d,0x0000037b,0x00000007, + 0x0004003b,0x0000000d,0x0000037e,0x00000007,0x0004003b,0x0000000d,0x00000383,0x00000007, + 0x0004003d,0x0000000e,0x00000356,0x000000cc,0x0003003e,0x00000355,0x00000356,0x0003003e, + 0x00000357,0x000000ce,0x00060039,0x000000a2,0x00000358,0x000000a6,0x00000355,0x00000357, + 0x0003003e,0x00000354,0x00000358,0x0003003e,0x00000359,0x0000010f,0x0003003e,0x0000035a, + 0x0000035b,0x00050041,0x0000000d,0x0000035d,0x0000035a,0x0000035c,0x0003003e,0x0000035d, + 0x0000010f,0x0003003e,0x0000035e,0x000001a2,0x000200f9,0x0000035f,0x000200f8,0x0000035f, + 0x000400f6,0x00000361,0x00000362,0x00000000,0x000200f9,0x00000363,0x000200f8,0x00000363, + 0x0004003d,0x00000055,0x00000364,0x0000035e,0x000500b1,0x000000a8,0x00000365,0x00000364, + 0x00000304,0x000400fa,0x00000365,0x00000360,0x00000361,0x000200f8,0x00000360,0x0004003d, + 0x00000055,0x00000367,0x0000035e,0x00060041,0x0000006e,0x00000368,0x00000354,0x000001a2, + 0x00000367,0x0004003d,0x00000056,0x00000369,0x00000368,0x0003003e,0x00000366,0x00000369, + 0x00050041,0x0000006e,0x0000036b,0x00000354,0x00000271,0x0004003d,0x00000056,0x0000036c, + 0x0000036b,0x0004003d,0x00000056,0x0000036d,0x00000366,0x00050080,0x00000056,0x0000036e, + 0x0000036c,0x0000036d,0x0003003e,0x0000036a,0x0000036e,0x0004003d,0x00000056,0x00000370, + 0x0000036a,0x0003003e,0x0000036f,0x00000370,0x0003003e,0x00000371,0x000000ce,0x00060039, + 0x000000a8,0x00000372,0x000000ac,0x0000036f,0x00000371,0x000300f7,0x00000374,0x00000000, + 0x000400fa,0x00000372,0x00000373,0x00000374,0x000200f8,0x00000373,0x0004003d,0x00000056, + 0x00000376,0x0000036a,0x0004007c,0x0000007b,0x00000377,0x00000376,0x0003003e,0x00000378, + 0x000000cd,0x0003003e,0x00000379,0x00000377,0x00060039,0x00000076,0x0000037a,0x00000088, + 0x00000378,0x00000379,0x0003003e,0x00000375,0x0000037a,0x00050041,0x0000000d,0x0000037c, + 0x00000375,0x0000035c,0x0004003d,0x00000008,0x0000037d,0x0000037c,0x0003003e,0x0000037b, + 0x0000037d,0x00050041,0x0000000d,0x0000037f,0x00000375,0x0000035c,0x0004003d,0x00000008, + 0x00000380,0x0000037f,0x000500ba,0x000000a8,0x00000381,0x00000380,0x0000010f,0x000600a9, + 0x00000008,0x00000382,0x00000381,0x00000110,0x0000010f,0x0003003e,0x0000037e,0x00000382, + 0x0004003d,0x00000055,0x00000384,0x0000035e,0x00060041,0x0000000d,0x00000385,0x00000354, + 0x000001a7,0x00000384,0x0004003d,0x00000008,0x00000386,0x00000385,0x0004003d,0x00000008, + 0x00000387,0x0000037e,0x00050085,0x00000008,0x00000388,0x00000386,0x00000387,0x0004003d, + 0x00000008,0x00000389,0x0000037b,0x00050085,0x00000008,0x0000038a,0x00000388,0x00000389, + 0x0003003e,0x00000383,0x0000038a,0x0004003d,0x00000008,0x0000038b,0x00000383,0x0004003d, + 0x00000008,0x0000038c,0x00000359,0x00050081,0x00000008,0x0000038d,0x0000038c,0x0000038b, + 0x0003003e,0x00000359,0x0000038d,0x0004003d,0x00000076,0x0000038e,0x00000375,0x0004003d, + 0x00000008,0x0000038f,0x00000383,0x0005008e,0x00000076,0x00000390,0x0000038e,0x0000038f, + 0x0004003d,0x00000076,0x00000391,0x0000035a,0x00050081,0x00000076,0x00000392,0x00000391, + 0x00000390,0x0003003e,0x0000035a,0x00000392,0x000200f9,0x00000374,0x000200f8,0x00000374, + 0x000200f9,0x00000362,0x000200f8,0x00000362,0x0004003d,0x00000055,0x00000393,0x0000035e, + 0x00050080,0x00000055,0x00000394,0x00000393,0x000001a7,0x0003003e,0x0000035e,0x00000394, + 0x000200f9,0x0000035f,0x000200f8,0x00000361,0x0004003d,0x00000008,0x00000395,0x00000359, + 0x000500ba,0x000000a8,0x00000396,0x00000395,0x0000010f,0x0004003d,0x00000008,0x00000397, + 0x00000359,0x000600a9,0x00000008,0x00000398,0x00000396,0x00000397,0x00000110,0x0004003d, + 0x00000076,0x00000399,0x0000035a,0x00070050,0x00000076,0x0000039a,0x00000398,0x00000398, + 0x00000398,0x00000398,0x00050088,0x00000076,0x0000039b,0x00000399,0x0000039a,0x0003003e, + 0x0000035a,0x0000039b,0x0004003d,0x00000076,0x0000039c,0x0000035a,0x000200fe,0x0000039c, + 0x00010038,0x00050036,0x00000002,0x000000d4,0x00000000,0x000000d1,0x00030037,0x00000029, + 0x000000d2,0x00030037,0x000000c5,0x000000d3,0x000200f8,0x000000d5,0x0004003b,0x0000006e, + 0x0000039f,0x00000007,0x0004003b,0x00000084,0x000003a5,0x00000007,0x0004003b,0x0000006e, + 0x000003a6,0x00000007,0x0004003b,0x00000084,0x000003a9,0x00000007,0x0004003b,0x000000c5, + 0x000003ab,0x00000007,0x0004003b,0x0000006e,0x000003b3,0x00000007,0x0004003b,0x00000090, + 0x000003b5,0x00000007,0x0004003b,0x00000083,0x000003b6,0x00000007,0x0004003b,0x00000029, + 0x000003cb,0x00000007,0x0004003b,0x00000029,0x000003df,0x00000007,0x0004003b,0x00000029, + 0x000003e7,0x00000007,0x0004003d,0x0000000e,0x000003a0,0x000000d2,0x00040039,0x00000056, + 0x000003a1,0x0000005c,0x0004006f,0x0000000e,0x000003a2,0x000003a1,0x00050085,0x0000000e, + 0x000003a3,0x000003a0,0x000003a2,0x0004006e,0x00000056,0x000003a4,0x000003a3,0x0003003e, + 0x0000039f,0x000003a4,0x0004003d,0x00000056,0x000003a7,0x0000039f,0x0003003e,0x000003a6, + 0x000003a7,0x00050039,0x0000007b,0x000003a8,0x0000007e,0x000003a6,0x0003003e,0x000003a5, + 0x000003a8,0x0004003d,0x0000007b,0x000003aa,0x000003a5,0x0003003e,0x000003a9,0x000003aa, + 0x00060039,0x00000002,0x000003ac,0x000000c9,0x000003a9,0x000003ab,0x0004003d,0x000000bd, + 0x000003ad,0x000003ab,0x0003003e,0x000000d3,0x000003ad,0x00050041,0x000000de,0x000003ae, + 0x000000d3,0x00000280,0x0004003d,0x000000a8,0x000003af,0x000003ae,0x000400a8,0x000000a8, + 0x000003b0,0x000003af,0x000300f7,0x000003b2,0x00000000,0x000400fa,0x000003b0,0x000003b1, + 0x000003b2,0x000200f8,0x000003b1,0x00040039,0x00000056,0x000003b4,0x0000005c,0x0003003e, + 0x000003b3,0x000003b4,0x0003003e,0x000003b5,0x0000035b,0x0003003e,0x000003b6,0x000001a2, + 0x000200f9,0x000003b7,0x000200f8,0x000003b7,0x000400f6,0x000003b9,0x000003ba,0x00000000, + 0x000200f9,0x000003bb,0x000200f8,0x000003bb,0x0004003d,0x00000055,0x000003bc,0x000003b6, + 0x000500b1,0x000000a8,0x000003be,0x000003bc,0x000003bd,0x000300f7,0x000003c0,0x00000000, + 0x000400fa,0x000003be,0x000003bf,0x000003c0,0x000200f8,0x000003bf,0x00050041,0x0000000d, + 0x000003c2,0x000003b5,0x000003c1,0x0004003d,0x00000008,0x000003c3,0x000003c2,0x000500b4, + 0x000000a8,0x000003c4,0x000003c3,0x0000010f,0x000200f9,0x000003c0,0x000200f8,0x000003c0, + 0x000700f5,0x000000a8,0x000003c5,0x000003be,0x000003bb,0x000003c4,0x000003bf,0x000400fa, + 0x000003c5,0x000003b8,0x000003b9,0x000200f8,0x000003b8,0x0004003d,0x00000056,0x000003c6, + 0x000003b3,0x00050050,0x00000056,0x000003c7,0x00000271,0x00000271,0x00050087,0x00000056, + 0x000003c8,0x000003c6,0x000003c7,0x0003003e,0x000003b3,0x000003c8,0x0004003d,0x00000055, + 0x000003c9,0x000003b6,0x0004003d,0x00000056,0x000003ca,0x000003b3,0x0004003d,0x0000000e, + 0x000003cc,0x000000d2,0x0003003e,0x000003cb,0x000003cc,0x00070039,0x00000076,0x000003cd, + 0x000000cf,0x000003cb,0x000003c9,0x000003ca,0x0003003e,0x000003b5,0x000003cd,0x000200f9, + 0x000003ba,0x000200f8,0x000003ba,0x0004003d,0x00000055,0x000003ce,0x000003b6,0x00050080, + 0x00000055,0x000003cf,0x000003ce,0x000001a7,0x0003003e,0x000003b6,0x000003cf,0x000200f9, + 0x000003b7,0x000200f8,0x000003b9,0x0004003d,0x00000076,0x000003d0,0x000003b5,0x0007004f, + 0x0000000e,0x000003d1,0x000003d0,0x000003d0,0x00000000,0x00000001,0x00050041,0x00000029, + 0x000003d2,0x000000d3,0x000001a2,0x0003003e,0x000003d2,0x000003d1,0x00050041,0x0000000d, + 0x000003d3,0x000003b5,0x0000035c,0x0004003d,0x00000008,0x000003d4,0x000003d3,0x00050041, + 0x0000000d,0x000003d5,0x000000d3,0x000001a7,0x0003003e,0x000003d5,0x000003d4,0x00050041, + 0x0000000d,0x000003d6,0x000003b5,0x000003c1,0x0004003d,0x00000008,0x000003d7,0x000003d6, + 0x00050041,0x0000000d,0x000003d8,0x000000d3,0x00000271,0x0003003e,0x000003d8,0x000003d7, + 0x00050041,0x000000de,0x000003da,0x000000d3,0x00000308,0x0003003e,0x000003da,0x000003d9, + 0x000200f9,0x000003b2,0x000200f8,0x000003b2,0x0004003d,0x0000000e,0x000003db,0x000000d2, + 0x00050041,0x00000029,0x000003dc,0x000000d3,0x000001a2,0x0004003d,0x0000000e,0x000003dd, + 0x000003dc,0x00050083,0x0000000e,0x000003de,0x000003db,0x000003dd,0x0003003e,0x000003df, + 0x000003de,0x00050039,0x000000a8,0x000003e0,0x000000b0,0x000003df,0x000400a8,0x000000a8, + 0x000003e1,0x000003e0,0x00050041,0x000000de,0x000003e2,0x000000d3,0x0000030c,0x0003003e, + 0x000003e2,0x000003e1,0x0004003d,0x0000000e,0x000003e3,0x000000d2,0x00050041,0x00000029, + 0x000003e4,0x000000d3,0x000001a2,0x0004003d,0x0000000e,0x000003e5,0x000003e4,0x00050081, + 0x0000000e,0x000003e6,0x000003e3,0x000003e5,0x0003003e,0x000003e7,0x000003e6,0x00050039, + 0x000000a8,0x000003e8,0x000000b0,0x000003e7,0x000400a8,0x000000a8,0x000003e9,0x000003e8, + 0x00050041,0x000000de,0x000003ea,0x000000d3,0x0000030e,0x0003003e,0x000003ea,0x000003e9, + 0x00050041,0x00000029,0x000003eb,0x000000d3,0x000001a2,0x0004003d,0x0000000e,0x000003ec, + 0x000003eb,0x0006000c,0x00000008,0x000003ed,0x00000001,0x00000042,0x000003ec,0x00050041, + 0x0000000d,0x000003ee,0x000000d3,0x0000030a,0x0003003e,0x000003ee,0x000003ed,0x000100fd, + 0x00010038,0x00050036,0x00000002,0x000000d8,0x00000000,0x000000d1,0x00030037,0x00000029, + 0x000000d6,0x00030037,0x000000c5,0x000000d7,0x000200f8,0x000000d9,0x0004003b,0x0000026f, + 0x000003ef,0x00000007,0x0004003b,0x00000029,0x000003f4,0x00000007,0x0004003b,0x0000006e, + 0x000003f6,0x00000007,0x0004003b,0x0000000d,0x000003f9,0x00000007,0x0004003b,0x00000083, + 0x000003fa,0x00000007,0x0004003b,0x0000006e,0x00000402,0x00000007,0x0004003b,0x0000006e, + 0x00000406,0x00000007,0x0004003b,0x0000006e,0x0000040f,0x00000007,0x0004003b,0x0000006e, + 0x00000411,0x00000007,0x0004003b,0x0000000d,0x00000415,0x00000007,0x0004003b,0x000000c5, + 0x00000419,0x00000007,0x0004003b,0x0000006e,0x0000041b,0x00000007,0x0004003b,0x0000006e, + 0x0000041c,0x00000007,0x0004003b,0x00000084,0x00000422,0x00000007,0x0004003b,0x000000c5, + 0x00000423,0x00000007,0x0004003b,0x00000029,0x0000045b,0x00000007,0x0004003b,0x00000029, + 0x00000463,0x00000007,0x00040039,0x00000056,0x000003f0,0x00000062,0x0004006f,0x0000000e, + 0x000003f1,0x000003f0,0x0005008e,0x0000000e,0x000003f2,0x000003f1,0x00000110,0x0004006e, + 0x00000056,0x000003f3,0x000003f2,0x0004003d,0x0000000e,0x000003f5,0x000000d6,0x0003003e, + 0x000003f4,0x000003f5,0x0003003e,0x000003f6,0x000003f3,0x00060039,0x000000a2,0x000003f7, + 0x000000a6,0x000003f4,0x000003f6,0x0003003e,0x000003ef,0x000003f7,0x00040039,0x000000bd, + 0x000003f8,0x000000bf,0x0003003e,0x000000d7,0x000003f8,0x0003003e,0x000003f9,0x0000010f, + 0x0003003e,0x000003fa,0x000001a2,0x000200f9,0x000003fb,0x000200f8,0x000003fb,0x000400f6, + 0x000003fd,0x000003fe,0x00000000,0x000200f9,0x000003ff,0x000200f8,0x000003ff,0x0004003d, + 0x00000055,0x00000400,0x000003fa,0x000500b1,0x000000a8,0x00000401,0x00000400,0x00000304, + 0x000400fa,0x00000401,0x000003fc,0x000003fd,0x000200f8,0x000003fc,0x0004003d,0x00000055, + 0x00000403,0x000003fa,0x00060041,0x0000006e,0x00000404,0x000003ef,0x000001a2,0x00000403, + 0x0004003d,0x00000056,0x00000405,0x00000404,0x0003003e,0x00000402,0x00000405,0x00050041, + 0x0000006e,0x00000407,0x000003ef,0x00000271,0x0004003d,0x00000056,0x00000408,0x00000407, + 0x0004003d,0x00000056,0x00000409,0x00000402,0x00050080,0x00000056,0x0000040a,0x00000408, + 0x00000409,0x0003003e,0x00000406,0x0000040a,0x00040039,0x00000056,0x0000040b,0x00000062, + 0x0004006f,0x0000000e,0x0000040c,0x0000040b,0x0005008e,0x0000000e,0x0000040d,0x0000040c, + 0x00000110,0x0004006e,0x00000056,0x0000040e,0x0000040d,0x0004003d,0x00000056,0x00000410, + 0x00000406,0x0003003e,0x0000040f,0x00000410,0x0003003e,0x00000411,0x0000040e,0x00060039, + 0x000000a8,0x00000412,0x000000ac,0x0000040f,0x00000411,0x000300f7,0x00000414,0x00000000, + 0x000400fa,0x00000412,0x00000413,0x00000414,0x000200f8,0x00000413,0x0004003d,0x00000055, + 0x00000416,0x000003fa,0x00060041,0x0000000d,0x00000417,0x000003ef,0x000001a7,0x00000416, + 0x0004003d,0x00000008,0x00000418,0x00000417,0x0003003e,0x00000415,0x00000418,0x00040039, + 0x000000bd,0x0000041a,0x000000bf,0x0003003e,0x00000419,0x0000041a,0x0004003d,0x00000056, + 0x0000041d,0x00000406,0x0003003e,0x0000041c,0x0000041d,0x00050039,0x0000007b,0x0000041e, + 0x00000081,0x0000041c,0x0004007c,0x00000056,0x0000041f,0x0000041e,0x0003003e,0x0000041b, + 0x0000041f,0x0004003d,0x00000056,0x00000420,0x0000041b,0x0004007c,0x0000007b,0x00000421, + 0x00000420,0x0003003e,0x00000422,0x00000421,0x00060039,0x00000002,0x00000424,0x000000c9, + 0x00000422,0x00000423,0x0004003d,0x000000bd,0x00000425,0x00000423,0x0003003e,0x00000419, + 0x00000425,0x00050041,0x00000029,0x00000426,0x00000419,0x000001a2,0x0004003d,0x0000000e, + 0x00000427,0x00000426,0x0004003d,0x00000008,0x00000428,0x00000415,0x0005008e,0x0000000e, + 0x00000429,0x00000427,0x00000428,0x00050041,0x00000029,0x0000042a,0x000000d7,0x000001a2, + 0x0004003d,0x0000000e,0x0000042b,0x0000042a,0x00050081,0x0000000e,0x0000042c,0x0000042b, + 0x00000429,0x00050041,0x00000029,0x0000042d,0x000000d7,0x000001a2,0x0003003e,0x0000042d, + 0x0000042c,0x00050041,0x0000000d,0x0000042e,0x00000419,0x000001a7,0x0004003d,0x00000008, + 0x0000042f,0x0000042e,0x0004003d,0x00000008,0x00000430,0x00000415,0x00050085,0x00000008, + 0x00000431,0x0000042f,0x00000430,0x00050041,0x0000000d,0x00000432,0x000000d7,0x000001a7, + 0x0004003d,0x00000008,0x00000433,0x00000432,0x00050081,0x00000008,0x00000434,0x00000433, + 0x00000431,0x00050041,0x0000000d,0x00000435,0x000000d7,0x000001a7,0x0003003e,0x00000435, + 0x00000434,0x00050041,0x0000000d,0x00000436,0x00000419,0x00000271,0x0004003d,0x00000008, + 0x00000437,0x00000436,0x0004003d,0x00000008,0x00000438,0x00000415,0x00050085,0x00000008, + 0x00000439,0x00000437,0x00000438,0x00050041,0x0000000d,0x0000043a,0x000000d7,0x00000271, + 0x0004003d,0x00000008,0x0000043b,0x0000043a,0x00050081,0x00000008,0x0000043c,0x0000043b, + 0x00000439,0x00050041,0x0000000d,0x0000043d,0x000000d7,0x00000271,0x0003003e,0x0000043d, + 0x0000043c,0x0004003d,0x00000008,0x0000043e,0x00000415,0x0004003d,0x00000008,0x0000043f, + 0x000003f9,0x00050081,0x00000008,0x00000440,0x0000043f,0x0000043e,0x0003003e,0x000003f9, + 0x00000440,0x000200f9,0x00000414,0x000200f8,0x00000414,0x000200f9,0x000003fe,0x000200f8, + 0x000003fe,0x0004003d,0x00000055,0x00000441,0x000003fa,0x00050080,0x00000055,0x00000442, + 0x00000441,0x000001a7,0x0003003e,0x000003fa,0x00000442,0x000200f9,0x000003fb,0x000200f8, + 0x000003fd,0x0004003d,0x00000008,0x00000443,0x000003f9,0x000500ba,0x000000a8,0x00000444, + 0x00000443,0x0000010f,0x000300f7,0x00000446,0x00000000,0x000400fa,0x00000444,0x00000445, + 0x00000446,0x000200f8,0x00000445,0x0004003d,0x00000008,0x00000447,0x000003f9,0x00050041, + 0x00000029,0x00000448,0x000000d7,0x000001a2,0x0004003d,0x0000000e,0x00000449,0x00000448, + 0x00050050,0x0000000e,0x0000044a,0x00000447,0x00000447,0x00050088,0x0000000e,0x0000044b, + 0x00000449,0x0000044a,0x00050041,0x00000029,0x0000044c,0x000000d7,0x000001a2,0x0003003e, + 0x0000044c,0x0000044b,0x0004003d,0x00000008,0x0000044d,0x000003f9,0x00050041,0x0000000d, + 0x0000044e,0x000000d7,0x000001a7,0x0004003d,0x00000008,0x0000044f,0x0000044e,0x00050088, + 0x00000008,0x00000450,0x0000044f,0x0000044d,0x00050041,0x0000000d,0x00000451,0x000000d7, + 0x000001a7,0x0003003e,0x00000451,0x00000450,0x0004003d,0x00000008,0x00000452,0x000003f9, + 0x00050041,0x0000000d,0x00000453,0x000000d7,0x00000271,0x0004003d,0x00000008,0x00000454, + 0x00000453,0x00050088,0x00000008,0x00000455,0x00000454,0x00000452,0x00050041,0x0000000d, + 0x00000456,0x000000d7,0x00000271,0x0003003e,0x00000456,0x00000455,0x000200f9,0x00000446, + 0x000200f8,0x00000446,0x0004003d,0x0000000e,0x00000457,0x000000d6,0x00050041,0x00000029, + 0x00000458,0x000000d7,0x000001a2,0x0004003d,0x0000000e,0x00000459,0x00000458,0x00050083, + 0x0000000e,0x0000045a,0x00000457,0x00000459,0x0003003e,0x0000045b,0x0000045a,0x00050039, + 0x000000a8,0x0000045c,0x000000b0,0x0000045b,0x000400a8,0x000000a8,0x0000045d,0x0000045c, + 0x00050041,0x000000de,0x0000045e,0x000000d7,0x0000030c,0x0003003e,0x0000045e,0x0000045d, + 0x0004003d,0x0000000e,0x0000045f,0x000000d6,0x00050041,0x00000029,0x00000460,0x000000d7, + 0x000001a2,0x0004003d,0x0000000e,0x00000461,0x00000460,0x00050081,0x0000000e,0x00000462, + 0x0000045f,0x00000461,0x0003003e,0x00000463,0x00000462,0x00050039,0x000000a8,0x00000464, + 0x000000b0,0x00000463,0x000400a8,0x000000a8,0x00000465,0x00000464,0x00050041,0x000000de, + 0x00000466,0x000000d7,0x0000030e,0x0003003e,0x00000466,0x00000465,0x00050041,0x00000029, + 0x00000467,0x000000d7,0x000001a2,0x0004003d,0x0000000e,0x00000468,0x00000467,0x0006000c, + 0x00000008,0x00000469,0x00000001,0x00000042,0x00000468,0x00050041,0x0000000d,0x0000046a, + 0x000000d7,0x0000030a,0x0003003e,0x0000046a,0x00000469,0x000100fd,0x00010038,0x00050036, + 0x000000da,0x000000dc,0x00000000,0x000000db,0x000200f8,0x000000dd,0x0004003b,0x0000046b, + 0x0000046c,0x00000007,0x00050041,0x0000001e,0x0000046e,0x0000046c,0x000001a2,0x0003003e, + 0x0000046e,0x0000046d,0x00050041,0x0000001e,0x0000046f,0x0000046c,0x000001a7,0x0003003e, + 0x0000046f,0x0000046d,0x00050041,0x0000000d,0x00000470,0x0000046c,0x00000271,0x0003003e, + 0x00000470,0x0000010f,0x0004003d,0x000000da,0x00000471,0x0000046c,0x000200fe,0x00000471, + 0x00010038,0x00050036,0x000000da,0x000000e4,0x00000000,0x000000df,0x00030037,0x000000de, + 0x000000e0,0x00030037,0x00000029,0x000000e1,0x00030037,0x00000029,0x000000e2,0x00030037, + 0x0000006e,0x000000e3,0x000200f8,0x000000e5,0x0004003b,0x0000046b,0x00000474,0x00000007, + 0x0004003b,0x00000029,0x00000476,0x00000007,0x0004003b,0x0000026f,0x0000047a,0x00000007, + 0x0004003b,0x00000029,0x0000047b,0x00000007,0x0004003b,0x0000006e,0x0000047d,0x00000007, + 0x0004003b,0x0000001e,0x00000480,0x00000007,0x0004003b,0x0000000d,0x00000481,0x00000007, + 0x0004003b,0x00000083,0x00000482,0x00000007,0x0004003b,0x0000006e,0x0000048a,0x00000007, + 0x0004003b,0x0000006e,0x0000048e,0x00000007,0x0004003b,0x0000006e,0x00000495,0x00000007, + 0x0004003b,0x0000006e,0x00000497,0x00000007,0x0004003b,0x0000006e,0x00000498,0x00000007, + 0x0004003b,0x0000000d,0x0000049c,0x00000007,0x0004003b,0x0000006e,0x000004a3,0x00000007, + 0x0004003b,0x0000006e,0x000004ab,0x00000007,0x0004003b,0x0000001e,0x000004b9,0x00000007, + 0x0004003b,0x0000001e,0x000004c4,0x00000007,0x00040039,0x000000da,0x00000475,0x000000dc, + 0x0003003e,0x00000474,0x00000475,0x0004003d,0x0000000e,0x00000477,0x000000e1,0x0004003d, + 0x0000000e,0x00000478,0x000000e2,0x00050081,0x0000000e,0x00000479,0x00000477,0x00000478, + 0x0003003e,0x00000476,0x00000479,0x0004003d,0x0000000e,0x0000047c,0x00000476,0x0003003e, + 0x0000047b,0x0000047c,0x0004003d,0x00000056,0x0000047e,0x000000e3,0x0003003e,0x0000047d, + 0x0000047e,0x00060039,0x000000a2,0x0000047f,0x000000a6,0x0000047b,0x0000047d,0x0003003e, + 0x0000047a,0x0000047f,0x0003003e,0x00000480,0x0000046d,0x0003003e,0x00000481,0x0000010f, + 0x0003003e,0x00000482,0x000001a2,0x000200f9,0x00000483,0x000200f8,0x00000483,0x000400f6, + 0x00000485,0x00000486,0x00000000,0x000200f9,0x00000487,0x000200f8,0x00000487,0x0004003d, + 0x00000055,0x00000488,0x00000482,0x000500b1,0x000000a8,0x00000489,0x00000488,0x00000304, + 0x000400fa,0x00000489,0x00000484,0x00000485,0x000200f8,0x00000484,0x0004003d,0x00000055, + 0x0000048b,0x00000482,0x00060041,0x0000006e,0x0000048c,0x0000047a,0x000001a2,0x0000048b, + 0x0004003d,0x00000056,0x0000048d,0x0000048c,0x0003003e,0x0000048a,0x0000048d,0x00050041, + 0x0000006e,0x0000048f,0x0000047a,0x00000271,0x0004003d,0x00000056,0x00000490,0x0000048f, + 0x0004003d,0x00000056,0x00000491,0x0000048a,0x00050080,0x00000056,0x00000492,0x00000490, + 0x00000491,0x0003003e,0x0000048e,0x00000492,0x00040039,0x00000056,0x00000493,0x00000058, + 0x00040039,0x00000056,0x00000494,0x0000005a,0x0004003d,0x00000056,0x00000496,0x0000048e, + 0x0003003e,0x00000495,0x00000496,0x0003003e,0x00000497,0x00000493,0x0003003e,0x00000498, + 0x00000494,0x00070039,0x000000a8,0x00000499,0x000000b6,0x00000495,0x00000497,0x00000498, + 0x000300f7,0x0000049b,0x00000000,0x000400fa,0x00000499,0x0000049a,0x0000049b,0x000200f8, + 0x0000049a,0x0004003d,0x00000055,0x0000049d,0x00000482,0x00060041,0x0000000d,0x0000049e, + 0x0000047a,0x000001a7,0x0000049d,0x0004003d,0x00000008,0x0000049f,0x0000049e,0x0003003e, + 0x0000049c,0x0000049f,0x0004003d,0x000000a8,0x000004a0,0x000000e0,0x000300f7,0x000004a2, + 0x00000000,0x000400fa,0x000004a0,0x000004a1,0x000004aa,0x000200f8,0x000004a1,0x0004003d, + 0x00000056,0x000004a4,0x0000048e,0x0003003e,0x000004a3,0x000004a4,0x00050039,0x00000013, + 0x000004a5,0x00000074,0x000004a3,0x0004003d,0x00000008,0x000004a6,0x0000049c,0x0005008e, + 0x00000013,0x000004a7,0x000004a5,0x000004a6,0x0004003d,0x00000013,0x000004a8,0x00000480, + 0x00050081,0x00000013,0x000004a9,0x000004a8,0x000004a7,0x0003003e,0x00000480,0x000004a9, + 0x000200f9,0x000004a2,0x000200f8,0x000004aa,0x0004003d,0x00000056,0x000004ac,0x0000048e, + 0x0003003e,0x000004ab,0x000004ac,0x00050039,0x00000013,0x000004ad,0x00000071,0x000004ab, + 0x0004003d,0x00000008,0x000004ae,0x0000049c,0x0005008e,0x00000013,0x000004af,0x000004ad, + 0x000004ae,0x0004003d,0x00000013,0x000004b0,0x00000480,0x00050081,0x00000013,0x000004b1, + 0x000004b0,0x000004af,0x0003003e,0x00000480,0x000004b1,0x000200f9,0x000004a2,0x000200f8, + 0x000004a2,0x0004003d,0x00000008,0x000004b2,0x0000049c,0x0004003d,0x00000008,0x000004b3, + 0x00000481,0x00050081,0x00000008,0x000004b4,0x000004b3,0x000004b2,0x0003003e,0x00000481, + 0x000004b4,0x000200f9,0x0000049b,0x000200f8,0x0000049b,0x000200f9,0x00000486,0x000200f8, + 0x00000486,0x0004003d,0x00000055,0x000004b5,0x00000482,0x00050080,0x00000055,0x000004b6, + 0x000004b5,0x000001a7,0x0003003e,0x00000482,0x000004b6,0x000200f9,0x00000483,0x000200f8, + 0x00000485,0x0004003d,0x00000008,0x000004b7,0x00000481,0x000500b7,0x000000a8,0x000004b8, + 0x000004b7,0x0000010f,0x000300f7,0x000004bb,0x00000000,0x000400fa,0x000004b8,0x000004ba, + 0x000004c0,0x000200f8,0x000004ba,0x0004003d,0x00000013,0x000004bc,0x00000480,0x0004003d, + 0x00000008,0x000004bd,0x00000481,0x00060050,0x00000013,0x000004be,0x000004bd,0x000004bd, + 0x000004bd,0x00050088,0x00000013,0x000004bf,0x000004bc,0x000004be,0x0003003e,0x000004b9, + 0x000004bf,0x000200f9,0x000004bb,0x000200f8,0x000004c0,0x0003003e,0x000004b9,0x0000046d, + 0x000200f9,0x000004bb,0x000200f8,0x000004bb,0x0004003d,0x00000013,0x000004c1,0x000004b9, + 0x0003003e,0x00000480,0x000004c1,0x0004003d,0x00000013,0x000004c2,0x00000480,0x00050041, + 0x0000001e,0x000004c3,0x00000474,0x000001a2,0x0003003e,0x000004c3,0x000004c2,0x0004003d, + 0x00000013,0x000004c5,0x00000480,0x0003003e,0x000004c4,0x000004c5,0x00050039,0x00000013, + 0x000004c6,0x0000009d,0x000004c4,0x00050041,0x0000001e,0x000004c7,0x00000474,0x000001a7, + 0x0003003e,0x000004c7,0x000004c6,0x0004003d,0x00000008,0x000004c8,0x00000481,0x00050041, + 0x0000000d,0x000004c9,0x00000474,0x00000271,0x0003003e,0x000004c9,0x000004c8,0x0004003d, + 0x000000da,0x000004ca,0x00000474,0x000200fe,0x000004ca,0x00010038,0x00050036,0x00000002, + 0x000000e9,0x00000000,0x000000e6,0x00030037,0x0000000d,0x000000e7,0x00030037,0x0000000d, + 0x000000e8,0x000200f8,0x000000ea,0x0004003b,0x0000000d,0x000004cd,0x00000007,0x0004003b, + 0x0000000d,0x000004cf,0x00000007,0x0004003b,0x0000000d,0x000004d2,0x00000007,0x0004003d, + 0x00000008,0x000004ce,0x000000e7,0x0003003e,0x000004cd,0x000004ce,0x0004003d,0x00000008, + 0x000004d0,0x000000e8,0x0003003e,0x000004cf,0x000004d0,0x00060039,0x00000008,0x000004d1, + 0x00000040,0x000004cd,0x000004cf,0x0003003e,0x000004d2,0x000004d1,0x00050039,0x00000008, + 0x000004d3,0x00000027,0x000004d2,0x0003003e,0x000000e7,0x000004d3,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x000000ef,0x00000000,0x000000eb,0x00030037,0x00000084,0x000000ec, + 0x00030037,0x0000001e,0x000000ed,0x00030037,0x0000000d,0x000000ee,0x000200f8,0x000000f0, + 0x0004003b,0x00000029,0x000004d4,0x00000007,0x0004003b,0x00000029,0x000004df,0x00000007, + 0x0004003b,0x00000029,0x000004e7,0x00000007,0x0004003b,0x00000029,0x000004ef,0x00000007, + 0x0004003b,0x000000c5,0x000004f5,0x00000007,0x0004003b,0x00000029,0x000004f6,0x00000007, + 0x0004003b,0x000000c5,0x000004f8,0x00000007,0x0004003b,0x000000c5,0x000004fb,0x00000007, + 0x0004003b,0x00000029,0x000004fc,0x00000007,0x0004003b,0x000000c5,0x000004fe,0x00000007, + 0x0004003b,0x00000029,0x00000501,0x00000007,0x0004003b,0x00000029,0x00000502,0x00000007, + 0x0004003b,0x00000029,0x00000505,0x00000007,0x0004003b,0x0000046b,0x0000050b,0x00000007, + 0x0004003b,0x000000de,0x00000511,0x00000007,0x0004003b,0x00000029,0x00000512,0x00000007, + 0x0004003b,0x00000029,0x00000514,0x00000007,0x0004003b,0x0000006e,0x00000515,0x00000007, + 0x0004003b,0x0000046b,0x00000517,0x00000007,0x0004003b,0x000000de,0x0000051e,0x00000007, + 0x0004003b,0x00000029,0x0000051f,0x00000007,0x0004003b,0x00000029,0x00000521,0x00000007, + 0x0004003b,0x0000006e,0x00000522,0x00000007,0x0004003b,0x0000046b,0x00000524,0x00000007, + 0x0004003b,0x000000de,0x0000052a,0x00000007,0x0004003b,0x00000029,0x0000052b,0x00000007, + 0x0004003b,0x00000029,0x0000052d,0x00000007,0x0004003b,0x0000006e,0x0000052e,0x00000007, + 0x0004003b,0x0000046b,0x00000530,0x00000007,0x0004003b,0x000000de,0x00000537,0x00000007, + 0x0004003b,0x00000029,0x00000538,0x00000007,0x0004003b,0x00000029,0x0000053a,0x00000007, + 0x0004003b,0x0000006e,0x0000053b,0x00000007,0x0004003b,0x0000000d,0x0000053d,0x00000007, + 0x0004003b,0x0000000d,0x00000553,0x00000007,0x0004003b,0x0000000d,0x00000555,0x00000007, + 0x0004003b,0x0000000d,0x00000558,0x00000007,0x0004003b,0x0000000d,0x00000565,0x00000007, + 0x0004003b,0x0000001e,0x00000568,0x00000007,0x0004003b,0x0000001e,0x0000056b,0x00000007, + 0x0004003b,0x0000000d,0x0000056e,0x00000007,0x0004003b,0x0000000d,0x00000570,0x00000007, + 0x0004003b,0x0000000d,0x00000573,0x00000007,0x0004003b,0x0000000d,0x00000578,0x00000007, + 0x0004003b,0x0000000d,0x00000594,0x00000007,0x0004003b,0x0000001e,0x000005a7,0x00000007, + 0x0004003b,0x0000001e,0x000005a8,0x00000007,0x0004003b,0x0000001e,0x000005ab,0x00000007, + 0x0004003b,0x0000000d,0x000005ae,0x00000007,0x0004003b,0x0000000d,0x000005b1,0x00000007, + 0x0004003b,0x0000000d,0x000005b7,0x00000007,0x0004003b,0x0000000d,0x000005bd,0x00000007, + 0x0004003b,0x0000000d,0x000005be,0x00000007,0x0004003b,0x0000000d,0x000005c1,0x00000007, + 0x0004003b,0x0000000d,0x000005c4,0x00000007,0x0004003b,0x0000000d,0x000005c5,0x00000007, + 0x0004003b,0x0000000d,0x000005c6,0x00000007,0x0004003b,0x0000000d,0x000005c8,0x00000007, + 0x0004003b,0x0000000d,0x000005ca,0x00000007,0x0004003b,0x0000000d,0x000005cb,0x00000007, + 0x0004003b,0x0000000d,0x000005cf,0x00000007,0x0004003b,0x0000000d,0x000005d1,0x00000007, + 0x0004003b,0x0000000d,0x000005d2,0x00000007,0x0004003b,0x0000000d,0x000005d4,0x00000007, + 0x0004003b,0x0000000d,0x000005d9,0x00000007,0x0004003b,0x0000000d,0x000005db,0x00000007, + 0x0004003b,0x0000000d,0x000005dc,0x00000007,0x0004003b,0x0000000d,0x000005df,0x00000007, + 0x0004003b,0x0000001e,0x000005e2,0x00000007,0x0004003b,0x0000001e,0x000005e4,0x00000007, + 0x0004003b,0x0000000d,0x000005e6,0x00000007,0x0004003d,0x0000007b,0x000004d5,0x000000ec, + 0x00040039,0x00000056,0x000004d6,0x00000058,0x0004007c,0x0000007b,0x000004d7,0x000004d6, + 0x00050082,0x0000007b,0x000004d8,0x000004d5,0x000004d7,0x00040070,0x0000000e,0x000004d9, + 0x000004d8,0x00050050,0x0000000e,0x000004da,0x0000026c,0x0000026c,0x00050081,0x0000000e, + 0x000004db,0x000004d9,0x000004da,0x00040039,0x00000056,0x000004dc,0x0000005a,0x0004006f, + 0x0000000e,0x000004dd,0x000004dc,0x00050088,0x0000000e,0x000004de,0x000004db,0x000004dd, + 0x0003003e,0x000004d4,0x000004de,0x0004003d,0x0000007b,0x000004e0,0x000000ec,0x00040070, + 0x0000000e,0x000004e1,0x000004e0,0x00050050,0x0000000e,0x000004e2,0x0000026c,0x0000026c, + 0x00050081,0x0000000e,0x000004e3,0x000004e1,0x000004e2,0x00040039,0x00000056,0x000004e4, + 0x0000005e,0x0004006f,0x0000000e,0x000004e5,0x000004e4,0x00050088,0x0000000e,0x000004e6, + 0x000004e3,0x000004e5,0x0003003e,0x000004df,0x000004e6,0x0004003d,0x0000000e,0x000004e8, + 0x000004d4,0x00040039,0x00000056,0x000004e9,0x0000005c,0x0004006f,0x0000000e,0x000004ea, + 0x000004e9,0x00040039,0x00000056,0x000004eb,0x00000064,0x0004006f,0x0000000e,0x000004ec, + 0x000004eb,0x00050088,0x0000000e,0x000004ed,0x000004ea,0x000004ec,0x00050085,0x0000000e, + 0x000004ee,0x000004e8,0x000004ed,0x0003003e,0x000004e7,0x000004ee,0x00040039,0x00000056, + 0x000004f0,0x0000005a,0x0004006f,0x0000000e,0x000004f1,0x000004f0,0x00040039,0x00000056, + 0x000004f2,0x0000005e,0x0004006f,0x0000000e,0x000004f3,0x000004f2,0x00050088,0x0000000e, + 0x000004f4,0x000004f1,0x000004f3,0x0003003e,0x000004ef,0x000004f4,0x0004003d,0x0000000e, + 0x000004f7,0x000004d4,0x0003003e,0x000004f6,0x000004f7,0x00060039,0x00000002,0x000004f9, + 0x000000d4,0x000004f6,0x000004f8,0x0004003d,0x000000bd,0x000004fa,0x000004f8,0x0003003e, + 0x000004f5,0x000004fa,0x0004003d,0x0000000e,0x000004fd,0x000004df,0x0003003e,0x000004fc, + 0x000004fd,0x00060039,0x00000002,0x000004ff,0x000000d8,0x000004fc,0x000004fe,0x0004003d, + 0x000000bd,0x00000500,0x000004fe,0x0003003e,0x000004fb,0x00000500,0x0004003d,0x0000000e, + 0x00000503,0x000004e7,0x0003003e,0x00000502,0x00000503,0x00050039,0x00000076,0x00000504, + 0x00000079,0x00000502,0x0007004f,0x0000000e,0x00000506,0x00000504,0x00000504,0x00000000, + 0x00000001,0x0003003e,0x00000505,0x00000506,0x00050039,0x0000000e,0x00000507,0x0000002c, + 0x00000505,0x000500b4,0x000002a6,0x00000509,0x00000507,0x00000508,0x000600a9,0x0000000e, + 0x0000050a,0x00000509,0x00000508,0x000002fe,0x0003003e,0x00000501,0x0000050a,0x00050041, + 0x00000029,0x0000050c,0x000004f5,0x000001a2,0x0004003d,0x0000000e,0x0000050d,0x0000050c, + 0x0004003d,0x0000000e,0x0000050e,0x000004ef,0x00050085,0x0000000e,0x0000050f,0x0000050d, + 0x0000050e,0x00040039,0x00000056,0x00000510,0x0000005e,0x0003003e,0x00000511,0x00000302, + 0x0004003d,0x0000000e,0x00000513,0x000004df,0x0003003e,0x00000512,0x00000513,0x0003003e, + 0x00000514,0x0000050f,0x0003003e,0x00000515,0x00000510,0x00080039,0x000000da,0x00000516, + 0x000000e4,0x00000511,0x00000512,0x00000514,0x00000515,0x0003003e,0x0000050b,0x00000516, + 0x00050041,0x00000029,0x00000518,0x000004f5,0x000001a2,0x0004003d,0x0000000e,0x00000519, + 0x00000518,0x0004007f,0x0000000e,0x0000051a,0x00000519,0x0004003d,0x0000000e,0x0000051b, + 0x000004ef,0x00050085,0x0000000e,0x0000051c,0x0000051a,0x0000051b,0x00040039,0x00000056, + 0x0000051d,0x0000005e,0x0003003e,0x0000051e,0x000003d9,0x0004003d,0x0000000e,0x00000520, + 0x000004df,0x0003003e,0x0000051f,0x00000520,0x0003003e,0x00000521,0x0000051c,0x0003003e, + 0x00000522,0x0000051d,0x00080039,0x000000da,0x00000523,0x000000e4,0x0000051e,0x0000051f, + 0x00000521,0x00000522,0x0003003e,0x00000517,0x00000523,0x00050041,0x00000029,0x00000525, + 0x000004fb,0x000001a2,0x0004003d,0x0000000e,0x00000526,0x00000525,0x0004003d,0x0000000e, + 0x00000527,0x000004ef,0x00050085,0x0000000e,0x00000528,0x00000526,0x00000527,0x00040039, + 0x00000056,0x00000529,0x0000005e,0x0003003e,0x0000052a,0x00000302,0x0004003d,0x0000000e, + 0x0000052c,0x000004df,0x0003003e,0x0000052b,0x0000052c,0x0003003e,0x0000052d,0x00000528, + 0x0003003e,0x0000052e,0x00000529,0x00080039,0x000000da,0x0000052f,0x000000e4,0x0000052a, + 0x0000052b,0x0000052d,0x0000052e,0x0003003e,0x00000524,0x0000052f,0x00050041,0x00000029, + 0x00000531,0x000004fb,0x000001a2,0x0004003d,0x0000000e,0x00000532,0x00000531,0x0004007f, + 0x0000000e,0x00000533,0x00000532,0x0004003d,0x0000000e,0x00000534,0x000004ef,0x00050085, + 0x0000000e,0x00000535,0x00000533,0x00000534,0x00040039,0x00000056,0x00000536,0x0000005e, + 0x0003003e,0x00000537,0x000003d9,0x0004003d,0x0000000e,0x00000539,0x000004df,0x0003003e, + 0x00000538,0x00000539,0x0003003e,0x0000053a,0x00000535,0x0003003e,0x0000053b,0x00000536, + 0x00080039,0x000000da,0x0000053c,0x000000e4,0x00000537,0x00000538,0x0000053a,0x0000053b, + 0x0003003e,0x00000530,0x0000053c,0x0003003e,0x0000053d,0x0000010f,0x00050041,0x000000de, + 0x0000053e,0x000004f5,0x0000030e,0x0004003d,0x000000a8,0x0000053f,0x0000053e,0x000400a8, + 0x000000a8,0x00000540,0x0000053f,0x000600a9,0x00000008,0x00000541,0x00000540,0x00000110, + 0x0000010f,0x00050041,0x0000000d,0x00000542,0x00000501,0x000001cf,0x0004003d,0x00000008, + 0x00000543,0x00000542,0x00050085,0x00000008,0x00000544,0x00000543,0x00000541,0x00050041, + 0x0000000d,0x00000545,0x00000501,0x000001cf,0x0003003e,0x00000545,0x00000544,0x00050041, + 0x000000de,0x00000546,0x000004f5,0x0000030c,0x0004003d,0x000000a8,0x00000547,0x00000546, + 0x000400a8,0x000000a8,0x00000548,0x00000547,0x000600a9,0x00000008,0x00000549,0x00000548, + 0x00000110,0x0000010f,0x00050041,0x0000000d,0x0000054a,0x00000501,0x000001d5,0x0004003d, + 0x00000008,0x0000054b,0x0000054a,0x00050085,0x00000008,0x0000054c,0x0000054b,0x00000549, + 0x00050041,0x0000000d,0x0000054d,0x00000501,0x000001d5,0x0003003e,0x0000054d,0x0000054c, + 0x0004003d,0x0000000e,0x0000054e,0x00000501,0x0006000c,0x00000008,0x0000054f,0x00000001, + 0x00000042,0x0000054e,0x000500bc,0x000000a8,0x00000551,0x0000054f,0x00000550,0x000600a9, + 0x00000008,0x00000552,0x00000551,0x00000110,0x0000010f,0x0004003d,0x00000008,0x00000554, + 0x000000ee,0x0003003e,0x00000553,0x00000554,0x0003003e,0x00000555,0x00000552,0x00060039, + 0x00000002,0x00000556,0x000000e9,0x00000553,0x00000555,0x0004003d,0x00000008,0x00000557, + 0x00000553,0x0003003e,0x000000ee,0x00000557,0x0003003e,0x00000558,0x0000026c,0x00050041, + 0x0000000d,0x00000559,0x00000501,0x000001cf,0x0004003d,0x00000008,0x0000055a,0x00000559, + 0x00050083,0x00000008,0x0000055b,0x00000110,0x0000055a,0x00050085,0x00000008,0x0000055c, + 0x0000026c,0x0000055b,0x0004003d,0x00000008,0x0000055d,0x00000558,0x00050081,0x00000008, + 0x0000055e,0x0000055d,0x0000055c,0x0003003e,0x00000558,0x0000055e,0x00050041,0x0000000d, + 0x0000055f,0x00000501,0x000001d5,0x0004003d,0x00000008,0x00000560,0x0000055f,0x00050083, + 0x00000008,0x00000561,0x00000110,0x00000560,0x00050085,0x00000008,0x00000562,0x0000026c, + 0x00000561,0x0004003d,0x00000008,0x00000563,0x00000558,0x00050083,0x00000008,0x00000564, + 0x00000563,0x00000562,0x0003003e,0x00000558,0x00000564,0x0004003d,0x00000008,0x00000566, + 0x00000558,0x0003003e,0x00000565,0x00000566,0x00050039,0x00000008,0x00000567,0x00000027, + 0x00000565,0x00050041,0x0000001e,0x00000569,0x0000050b,0x000001a2,0x0004003d,0x00000013, + 0x0000056a,0x00000569,0x0003003e,0x00000568,0x0000056a,0x00050041,0x0000001e,0x0000056c, + 0x00000517,0x000001a2,0x0004003d,0x00000013,0x0000056d,0x0000056c,0x0003003e,0x0000056b, + 0x0000056d,0x0003003e,0x0000056e,0x00000567,0x00070039,0x00000013,0x0000056f,0x00000023, + 0x00000568,0x0000056b,0x0000056e,0x0003003e,0x000000ed,0x0000056f,0x00050041,0x0000000d, + 0x00000571,0x00000501,0x000001cf,0x0004003d,0x00000008,0x00000572,0x00000571,0x0003003e, + 0x00000570,0x00000572,0x00050041,0x0000000d,0x00000574,0x00000501,0x000001d5,0x0004003d, + 0x00000008,0x00000575,0x00000574,0x0003003e,0x00000573,0x00000575,0x00060039,0x00000008, + 0x00000576,0x0000003c,0x00000570,0x00000573,0x00050083,0x00000008,0x00000577,0x00000110, + 0x00000576,0x0003003e,0x00000578,0x00000577,0x00050039,0x00000008,0x00000579,0x00000027, + 0x00000578,0x0003003e,0x0000053d,0x00000579,0x00050041,0x0000000d,0x0000057a,0x0000050b, + 0x00000271,0x0004003d,0x00000008,0x0000057b,0x0000057a,0x000500b4,0x000000a8,0x0000057c, + 0x0000057b,0x0000010f,0x000300f7,0x0000057e,0x00000000,0x000400fa,0x0000057c,0x0000057d, + 0x00000581,0x000200f8,0x0000057d,0x00050041,0x0000001e,0x0000057f,0x00000517,0x000001a2, + 0x0004003d,0x00000013,0x00000580,0x0000057f,0x0003003e,0x000000ed,0x00000580,0x000200f9, + 0x0000057e,0x000200f8,0x00000581,0x00050041,0x0000000d,0x00000582,0x00000517,0x00000271, + 0x0004003d,0x00000008,0x00000583,0x00000582,0x000500b4,0x000000a8,0x00000584,0x00000583, + 0x0000010f,0x000300f7,0x00000586,0x00000000,0x000400fa,0x00000584,0x00000585,0x00000586, + 0x000200f8,0x00000585,0x00050041,0x0000001e,0x00000587,0x0000050b,0x000001a2,0x0004003d, + 0x00000013,0x00000588,0x00000587,0x0003003e,0x000000ed,0x00000588,0x000200f9,0x00000586, + 0x000200f8,0x00000586,0x000200f9,0x0000057e,0x000200f8,0x0000057e,0x00050041,0x0000000d, + 0x00000589,0x0000050b,0x00000271,0x0004003d,0x00000008,0x0000058a,0x00000589,0x000500b4, + 0x000000a8,0x0000058b,0x0000058a,0x0000010f,0x000300f7,0x0000058d,0x00000000,0x000400fa, + 0x0000058b,0x0000058c,0x0000058d,0x000200f8,0x0000058c,0x00050041,0x0000000d,0x0000058e, + 0x00000517,0x00000271,0x0004003d,0x00000008,0x0000058f,0x0000058e,0x000500b4,0x000000a8, + 0x00000590,0x0000058f,0x0000010f,0x000200f9,0x0000058d,0x000200f8,0x0000058d,0x000700f5, + 0x000000a8,0x00000591,0x0000058b,0x0000057e,0x00000590,0x0000058c,0x000300f7,0x00000593, + 0x00000000,0x000400fa,0x00000591,0x00000592,0x00000593,0x000200f8,0x00000592,0x0003003e, + 0x000000ee,0x00000110,0x000200f9,0x00000593,0x000200f8,0x00000593,0x0003003e,0x00000594, + 0x0000026c,0x00050041,0x0000000d,0x00000595,0x00000524,0x00000271,0x0004003d,0x00000008, + 0x00000596,0x00000595,0x000500ba,0x000000a8,0x00000597,0x00000596,0x0000010f,0x000300f7, + 0x00000599,0x00000000,0x000400fa,0x00000597,0x00000598,0x00000599,0x000200f8,0x00000598, + 0x00050041,0x0000000d,0x0000059a,0x00000530,0x00000271,0x0004003d,0x00000008,0x0000059b, + 0x0000059a,0x000500ba,0x000000a8,0x0000059c,0x0000059b,0x0000010f,0x000200f9,0x00000599, + 0x000200f8,0x00000599,0x000700f5,0x000000a8,0x0000059d,0x00000597,0x00000593,0x0000059c, + 0x00000598,0x000300f7,0x0000059f,0x00000000,0x000400fa,0x0000059d,0x0000059e,0x000005a0, + 0x000200f8,0x0000059e,0x0003003e,0x00000594,0x0000026c,0x000200f9,0x0000059f,0x000200f8, + 0x000005a0,0x00050041,0x0000000d,0x000005a1,0x00000524,0x00000271,0x0004003d,0x00000008, + 0x000005a2,0x000005a1,0x000500ba,0x000000a8,0x000005a3,0x000005a2,0x0000010f,0x000300f7, + 0x000005a5,0x00000000,0x000400fa,0x000005a3,0x000005a4,0x000005a6,0x000200f8,0x000005a4, + 0x0003003e,0x00000594,0x0000010f,0x000200f9,0x000005a5,0x000200f8,0x000005a6,0x0003003e, + 0x00000594,0x00000110,0x000200f9,0x000005a5,0x000200f8,0x000005a5,0x000200f9,0x0000059f, + 0x000200f8,0x0000059f,0x00050041,0x0000001e,0x000005a9,0x00000524,0x000001a2,0x0004003d, + 0x00000013,0x000005aa,0x000005a9,0x0003003e,0x000005a8,0x000005aa,0x00050041,0x0000001e, + 0x000005ac,0x00000530,0x000001a2,0x0004003d,0x00000013,0x000005ad,0x000005ac,0x0003003e, + 0x000005ab,0x000005ad,0x0004003d,0x00000008,0x000005af,0x00000594,0x0003003e,0x000005ae, + 0x000005af,0x00070039,0x00000013,0x000005b0,0x00000023,0x000005a8,0x000005ab,0x000005ae, + 0x0003003e,0x000005a7,0x000005b0,0x00050041,0x0000001e,0x000005b2,0x00000524,0x000001a2, + 0x0004003d,0x00000013,0x000005b3,0x000005b2,0x00050041,0x0000001e,0x000005b4,0x00000530, + 0x000001a2,0x0004003d,0x00000013,0x000005b5,0x000005b4,0x00060039,0x00000008,0x000005b6, + 0x000000bb,0x000005b3,0x000005b5,0x0003003e,0x000005b1,0x000005b6,0x00050041,0x0000001e, + 0x000005b8,0x0000050b,0x000001a2,0x0004003d,0x00000013,0x000005b9,0x000005b8,0x00050041, + 0x0000001e,0x000005ba,0x00000517,0x000001a2,0x0004003d,0x00000013,0x000005bb,0x000005ba, + 0x00060039,0x00000008,0x000005bc,0x000000bb,0x000005b9,0x000005bb,0x0003003e,0x000005b7, + 0x000005bc,0x0003003e,0x000005bd,0x00000550,0x0004003d,0x00000008,0x000005bf,0x000005b7, + 0x0003003e,0x000005be,0x000005bf,0x00060039,0x00000008,0x000005c0,0x00000040,0x000005bd, + 0x000005be,0x0004003d,0x00000008,0x000005c2,0x0000053d,0x0003003e,0x000005c1,0x000005c2, + 0x00050039,0x00000008,0x000005c3,0x00000027,0x000005c1,0x0003003e,0x000005c4,0x000005c0, + 0x0003003e,0x000005c5,0x00000110,0x0003003e,0x000005c6,0x000005c3,0x00070039,0x00000008, + 0x000005c7,0x0000001c,0x000005c4,0x000005c5,0x000005c6,0x0003003e,0x000005b7,0x000005c7, + 0x0004003d,0x00000008,0x000005c9,0x000005b7,0x0003003e,0x000005ca,0x00000550,0x0004003d, + 0x00000008,0x000005cc,0x000005b1,0x0003003e,0x000005cb,0x000005cc,0x00060039,0x00000008, + 0x000005cd,0x00000040,0x000005ca,0x000005cb,0x00050088,0x00000008,0x000005ce,0x000005c9, + 0x000005cd,0x0003003e,0x000005cf,0x000005ce,0x00050039,0x00000008,0x000005d0,0x00000027, + 0x000005cf,0x0003003e,0x000005d1,0x000005d0,0x0003003e,0x000005d2,0x00000110,0x00060039, + 0x00000008,0x000005d3,0x00000044,0x000005d1,0x000005d2,0x0003003e,0x000005c8,0x000005d3, + 0x00040039,0x00000006,0x000005d5,0x0000008e,0x000500b0,0x000000a8,0x000005d7,0x000005d5, + 0x000005d6,0x000600a9,0x00000008,0x000005d8,0x000005d7,0x00000110,0x0000010f,0x0003003e, + 0x000005d4,0x000005d8,0x0004003d,0x00000008,0x000005da,0x000005c8,0x0003003e,0x000005d9, + 0x000005da,0x0003003e,0x000005db,0x00000110,0x0004003d,0x00000008,0x000005dd,0x000005d4, + 0x0003003e,0x000005dc,0x000005dd,0x00070039,0x00000008,0x000005de,0x0000001c,0x000005d9, + 0x000005db,0x000005dc,0x0003003e,0x000005c8,0x000005de,0x0004003d,0x00000008,0x000005e0, + 0x000005c8,0x0003003e,0x000005df,0x000005e0,0x00050039,0x00000008,0x000005e1,0x00000027, + 0x000005df,0x0004003d,0x00000013,0x000005e3,0x000005a7,0x0003003e,0x000005e2,0x000005e3, + 0x0004003d,0x00000013,0x000005e5,0x000000ed,0x0003003e,0x000005e4,0x000005e5,0x0003003e, + 0x000005e6,0x000005e1,0x00070039,0x00000013,0x000005e7,0x00000023,0x000005e2,0x000005e4, + 0x000005e6,0x0003003e,0x000000ed,0x000005e7,0x000100fd,0x00010038,0x00050036,0x00000002, + 0x000000f3,0x00000000,0x000000f1,0x00030037,0x0000006e,0x000000f2,0x000200f8,0x000000f4, + 0x0004003b,0x0000001e,0x000005e8,0x00000007,0x0004003b,0x0000000d,0x000005e9,0x00000007, + 0x0004003b,0x0000006e,0x000005ec,0x00000007,0x0004003b,0x0000006e,0x000005ee,0x00000007, + 0x0004003b,0x0000006e,0x000005ef,0x00000007,0x0004003b,0x0000006e,0x000005fa,0x00000007, + 0x0004003b,0x00000084,0x00000600,0x00000007,0x0004003b,0x0000001e,0x00000601,0x00000007, + 0x0004003b,0x0000000d,0x00000602,0x00000007,0x0004003b,0x0000006e,0x0000060e,0x00000007, + 0x0004003b,0x00000090,0x0000060f,0x00000007,0x0003003e,0x000005e8,0x0000046d,0x0003003e, + 0x000005e9,0x0000010f,0x00040039,0x00000056,0x000005ea,0x00000058,0x00040039,0x00000056, + 0x000005eb,0x0000005a,0x0004003d,0x00000056,0x000005ed,0x000000f2,0x0003003e,0x000005ec, + 0x000005ed,0x0003003e,0x000005ee,0x000005ea,0x0003003e,0x000005ef,0x000005eb,0x00070039, + 0x000000a8,0x000005f0,0x000000b6,0x000005ec,0x000005ee,0x000005ef,0x000500a4,0x000000a8, + 0x000005f1,0x000005f0,0x00000302,0x000400a8,0x000000a8,0x000005f2,0x000005f1,0x000300f7, + 0x000005f4,0x00000000,0x000400fa,0x000005f2,0x000005f3,0x000005f4,0x000200f8,0x000005f3, + 0x00040039,0x00000006,0x000005f5,0x0000008e,0x000500aa,0x000000a8,0x000005f6,0x000005f5, + 0x000001cf,0x000200f9,0x000005f4,0x000200f8,0x000005f4,0x000700f5,0x000000a8,0x000005f7, + 0x000005f1,0x000000f4,0x000005f6,0x000005f3,0x000300f7,0x000005f9,0x00000000,0x000400fa, + 0x000005f7,0x000005f8,0x000005fd,0x000200f8,0x000005f8,0x0004003d,0x00000056,0x000005fb, + 0x000000f2,0x0003003e,0x000005fa,0x000005fb,0x00050039,0x00000013,0x000005fc,0x00000074, + 0x000005fa,0x0003003e,0x000005e8,0x000005fc,0x000200f9,0x000005f9,0x000200f8,0x000005fd, + 0x0004003d,0x00000056,0x000005fe,0x000000f2,0x0004007c,0x0000007b,0x000005ff,0x000005fe, + 0x0003003e,0x00000600,0x000005ff,0x0004003d,0x00000008,0x00000603,0x000005e9,0x0003003e, + 0x00000602,0x00000603,0x00070039,0x00000002,0x00000604,0x000000ef,0x00000600,0x00000601, + 0x00000602,0x0004003d,0x00000013,0x00000605,0x00000601,0x0003003e,0x000005e8,0x00000605, + 0x0004003d,0x00000008,0x00000606,0x00000602,0x0003003e,0x000005e9,0x00000606,0x000200f9, + 0x000005f9,0x000200f8,0x000005f9,0x0004003d,0x00000056,0x00000607,0x000000f2,0x0004003d, + 0x00000013,0x00000608,0x000005e8,0x0004003d,0x00000008,0x00000609,0x000005e9,0x00050051, + 0x00000008,0x0000060a,0x00000608,0x00000000,0x00050051,0x00000008,0x0000060b,0x00000608, + 0x00000001,0x00050051,0x00000008,0x0000060c,0x00000608,0x00000002,0x00070050,0x00000076, + 0x0000060d,0x0000060a,0x0000060b,0x0000060c,0x00000609,0x0003003e,0x0000060e,0x00000607, + 0x0003003e,0x0000060f,0x0000060d,0x00060039,0x00000002,0x00000610,0x00000094,0x0000060e, + 0x0000060f,0x000100fd,0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_fi_optical_flow_vector_field_comp_spv.h b/gpu/vk/shaders/fsr3_fi_optical_flow_vector_field_comp_spv.h new file mode 100644 index 000000000..ac138fd81 --- /dev/null +++ b/gpu/vk/shaders/fsr3_fi_optical_flow_vector_field_comp_spv.h @@ -0,0 +1,789 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_FI_OPTICAL_FLOW_VECTOR_FIELD_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x000003e8,0x00000000,0x00020011,0x00000001,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x000003d7,0x00060010,0x00000004, + 0x00000011,0x00000008,0x00000008,0x00000001,0x00030003,0x00000002,0x000001c2,0x000b0004, + 0x455f4c47,0x735f5458,0x6c706d61,0x656c7265,0x745f7373,0x75747865,0x665f6572,0x74636e75, + 0x736e6f69,0x00000000,0x000b0004,0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70, + 0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f, + 0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004, + 0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669,0x00040005, + 0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000b,0x41786666,0x6f6c4673,0x75287461, + 0x00003b31,0x00030005,0x0000000a,0x00000078,0x00060005,0x00000010,0x46786666,0x6f543233, + 0x28363146,0x003b3166,0x00040005,0x0000000f,0x756c6176,0x00000065,0x00070005,0x00000015, + 0x42786666,0x64616f72,0x74736163,0x31662833,0x0000003b,0x00040005,0x00000014,0x756c6176, + 0x00000065,0x00060005,0x00000019,0x53786666,0x72757461,0x28657461,0x003b3166,0x00030005, + 0x00000018,0x00000078,0x00070005,0x0000001e,0x53786666,0x72757461,0x28657461,0x3b336676, + 0x00000000,0x00030005,0x0000001d,0x00000078,0x00060005,0x00000024,0x46786666,0x74636172, + 0x32667628,0x0000003b,0x00030005,0x00000023,0x00000078,0x00060005,0x00000027,0x52786666, + 0x646e756f,0x3b316628,0x00000000,0x00030005,0x00000026,0x00000078,0x00060005,0x0000002c, + 0x4d786666,0x66286e69,0x31663b31,0x0000003b,0x00030005,0x0000002a,0x00000078,0x00030005, + 0x0000002b,0x00000079,0x00060005,0x00000030,0x4d786666,0x66287861,0x31663b31,0x0000003b, + 0x00030005,0x0000002e,0x00000078,0x00030005,0x0000002f,0x00000079,0x00060005,0x00000034, + 0x50786666,0x6628776f,0x31663b31,0x0000003b,0x00030005,0x00000032,0x00000078,0x00030005, + 0x00000033,0x00000079,0x000a0005,0x0000003a,0x5a786666,0x4f6f7265,0x6553656e,0x7463656c, + 0x33667628,0x3366763b,0x3366763b,0x0000003b,0x00030005,0x00000037,0x00000078,0x00030005, + 0x00000038,0x00000079,0x00030005,0x00000039,0x0000007a,0x00080005,0x0000003d,0x5a786666, + 0x4f6f7265,0x7349656e,0x6e676953,0x76286465,0x003b3366,0x00030005,0x0000003c,0x00000078, + 0x00080005,0x00000040,0x4c786666,0x61656e69,0x6f724672,0x2851506d,0x3b336676,0x00000000, + 0x00040005,0x0000003f,0x756c6176,0x00000065,0x00080005,0x00000043,0x4c786666,0x61656e69, + 0x6f724672,0x6772536d,0x66762862,0x00003b33,0x00040005,0x00000042,0x756c6176,0x00000065, + 0x00080005,0x00000048,0x65746e49,0x6c6f7072,0x6f697461,0x6365526e,0x7a695374,0x00002865, + 0x00070005,0x0000004a,0x4f746547,0x63697470,0x6c466c61,0x6953776f,0x0028657a,0x00080005, + 0x0000004c,0x4f746547,0x63697470,0x6c466c61,0x6953776f,0x2832657a,0x00000000,0x00080005, + 0x0000004f,0x4f746547,0x63697470,0x6c466c61,0x6353776f,0x28656c61,0x00000000,0x00090005, + 0x00000052,0x6b636142,0x66667542,0x72547265,0x66736e61,0x75467265,0x6974636e,0x00286e6f, + 0x00060005,0x00000055,0x4c6e694d,0x6e696d75,0x65636e61,0x00000028,0x00060005,0x00000057, + 0x4c78614d,0x6e696d75,0x65636e61,0x00000028,0x000a0005,0x0000005b,0x706d6153,0x7250656c, + 0x6f697665,0x61427375,0x75626b63,0x72656666,0x32667628,0x0000003b,0x00030005,0x0000005a, + 0x00765566,0x000a0005,0x0000005e,0x706d6153,0x7543656c,0x6e657272,0x63614274,0x6675626b, + 0x28726566,0x3b326676,0x00000000,0x00030005,0x0000005d,0x00765566,0x00080005,0x00000063, + 0x64616f4c,0x6974704f,0x466c6163,0x28776f6c,0x3b326976,0x00000000,0x00040005,0x00000062, + 0x50785069,0x0000736f,0x000a0005,0x00000067,0x64616f4c,0x6974704f,0x466c6163,0x43776f6c, + 0x69666e6f,0x636e6564,0x69762865,0x00003b32,0x00040005,0x00000066,0x50785069,0x0000736f, + 0x000d0005,0x0000006e,0x61647055,0x704f6574,0x61636974,0x6f6c666c,0x746f4d77,0x566e6f69, + 0x6f746365,0x65694672,0x7628646c,0x763b3269,0x003b3275,0x00040005,0x0000006c,0x50785069, + 0x0000736f,0x00060005,0x0000006d,0x6b636170,0x65566465,0x726f7463,0x00000000,0x00060005, + 0x00000072,0x54424752,0x6d754c6f,0x66762861,0x00003b33,0x00050005,0x00000071,0x6e694c66, + 0x52726165,0x00006267,0x000a0005,0x00000075,0x656e694c,0x65527261,0x32303263,0x4c6f5430, + 0x6e696d75,0x65636e61,0x33667628,0x0000003b,0x00070005,0x00000074,0x656e696c,0x65527261, + 0x32303263,0x42475230,0x00000000,0x00090005,0x0000007b,0x73786666,0x42475263,0x694c6f54, + 0x7261656e,0x33667628,0x3b31663b,0x003b3166,0x00040005,0x00000078,0x756c6176,0x00000065, + 0x00060005,0x00000079,0x4c6e696d,0x6e696d75,0x65636e61,0x00000000,0x00060005,0x0000007a, + 0x4c78616d,0x6e696d75,0x65636e61,0x00000000,0x00070005,0x0000007e,0x52776152,0x6f544247, + 0x656e694c,0x76287261,0x003b3366,0x00040005,0x0000007d,0x77615266,0x00626752,0x00080005, + 0x00000081,0x52776152,0x6f544247,0x696d754c,0x636e616e,0x66762865,0x00003b33,0x00040005, + 0x00000080,0x77615266,0x00626752,0x00080005,0x00000086,0x696c6942,0x7261656e,0x706d6153, + 0x676e696c,0x61746144,0x00000000,0x00060006,0x00000086,0x00000000,0x66664f69,0x73746573, + 0x00000000,0x00060006,0x00000086,0x00000001,0x69655766,0x73746867,0x00000000,0x00060006, + 0x00000086,0x00000002,0x73614269,0x736f5065,0x00000000,0x000b0005,0x0000008a,0x42746547, + 0x6e696c69,0x53726165,0x6c706d61,0x44676e69,0x28617461,0x3b326676,0x3b326976,0x00000000, + 0x00030005,0x00000088,0x00765566,0x00040005,0x00000089,0x7a695369,0x00000065,0x00070005, + 0x00000090,0x6e4f7349,0x65726353,0x76286e65,0x763b3269,0x003b3269,0x00030005,0x0000008e, + 0x00736f70,0x00040005,0x0000008f,0x657a6973,0x00000000,0x00060005,0x00000094,0x76557349, + 0x69736e49,0x76286564,0x003b3266,0x00030005,0x00000093,0x00765566,0x00080005,0x00000099, + 0x446e694d,0x64697669,0x79426465,0x2878614d,0x663b3166,0x00003b31,0x00030005,0x00000097, + 0x00003076,0x00030005,0x00000098,0x00003176,0x000c0005,0x000000a1,0x6b636150,0x74636556, + 0x6946726f,0x45646c65,0x6972746e,0x62287365,0x31753b31,0x3b31753b,0x3b326676,0x00000000, + 0x00050005,0x0000009d,0x50734962,0x616d6972,0x00007972,0x00070005,0x0000009e,0x67694875, + 0x69725068,0x7469726f,0x63614679,0x00726f74,0x00070005,0x0000009f,0x776f4c75,0x6f697250, + 0x79746972,0x74636146,0x0000726f,0x00060005,0x000000a0,0x746f4d66,0x566e6f69,0x6f746365, + 0x00000072,0x000b0005,0x000000a6,0x706d6f63,0x4f657475,0x63697470,0x6c466c61,0x6946776f, + 0x4d646c65,0x76287376,0x763b3275,0x003b3266,0x00040005,0x000000a4,0x44497464,0x00000000, + 0x00070005,0x000000a5,0x74704f66,0x6c616369,0x776f6c46,0x74636556,0x0000726f,0x000b0005, + 0x000000aa,0x706d6f63,0x4f657475,0x63697470,0x6c466c61,0x6556776f,0x726f7463,0x6c656946, + 0x69762864,0x00003b32,0x00040005,0x000000a9,0x50785069,0x0000736f,0x00040005,0x000000c0, + 0x61726170,0x0000006d,0x00040005,0x000000c2,0x61726170,0x0000006d,0x00030005,0x000000de, + 0x00000072,0x00040005,0x000000ee,0x61726170,0x0000006d,0x00040005,0x000000f0,0x61726170, + 0x0000006d,0x00040005,0x000000f3,0x61726170,0x0000006d,0x00030005,0x000000f7,0x00000070, + 0x00040005,0x000000fa,0x61726170,0x0000006d,0x00040005,0x000000ff,0x61726170,0x0000006d, + 0x00040005,0x00000102,0x61726170,0x0000006d,0x00040005,0x00000105,0x61726170,0x0000006d, + 0x00040005,0x00000108,0x61726170,0x0000006d,0x00040005,0x0000010f,0x61726170,0x0000006d, + 0x00030005,0x00000114,0x0000006a,0x00030005,0x00000119,0x0000006b,0x00040005,0x00000121, + 0x61726170,0x0000006d,0x00040005,0x00000131,0x61726170,0x0000006d,0x00040005,0x00000132, + 0x61726170,0x0000006d,0x00040005,0x00000133,0x61726170,0x0000006d,0x00040005,0x00000138, + 0x49466263,0x0000745f,0x00060006,0x00000138,0x00000000,0x646e6572,0x69537265,0x0000657a, + 0x00060006,0x00000138,0x00000001,0x70736964,0x5379616c,0x00657a69,0x00070006,0x00000138, + 0x00000002,0x70736964,0x5379616c,0x52657a69,0x00007063,0x00060006,0x00000138,0x00000003, + 0x656d6163,0x654e6172,0x00007261,0x00060006,0x00000138,0x00000004,0x656d6163,0x61466172, + 0x00000072,0x00080006,0x00000138,0x00000005,0x63737075,0x72656c61,0x67726154,0x69537465, + 0x0000657a,0x00050006,0x00000138,0x00000006,0x65646f4d,0x00000000,0x00050006,0x00000138, + 0x00000007,0x65736572,0x00000074,0x00080006,0x00000138,0x00000008,0x76654466,0x54656369, + 0x6569566f,0x70654477,0x00006874,0x00060006,0x00000138,0x00000009,0x746c6564,0x6d695461, + 0x00000065,0x00090006,0x00000138,0x0000000a,0x4c445548,0x41737365,0x63617474,0x46646568, + 0x6f746361,0x00000072,0x00080006,0x00000138,0x0000000b,0x74736964,0x6974726f,0x69466e6f, + 0x53646c65,0x00657a69,0x00080006,0x00000138,0x0000000c,0x6974706f,0x466c6163,0x53776f6c, + 0x656c6163,0x00000000,0x00090006,0x00000138,0x0000000d,0x6974706f,0x466c6163,0x42776f6c, + 0x6b636f6c,0x657a6953,0x00000000,0x00070006,0x00000138,0x0000000e,0x70736964,0x68637461, + 0x67616c46,0x00000073,0x00070006,0x00000138,0x0000000f,0x5278616d,0x65646e65,0x7a695372, + 0x00000065,0x00090006,0x00000138,0x00000010,0x6974706f,0x466c6163,0x48776f6c,0x52666c61, + 0x6f4d7365,0x00006564,0x00070006,0x00000138,0x00000011,0x496d754e,0x6174736e,0x7365636e, + 0x00000000,0x00090006,0x00000138,0x00000012,0x65746e69,0x6c6f7072,0x6f697461,0x6365526e, + 0x73614274,0x00000065,0x00090006,0x00000138,0x00000013,0x65746e69,0x6c6f7072,0x6f697461, + 0x6365526e,0x7a695374,0x00000065,0x00070006,0x00000138,0x00000014,0x75626564,0x72614267, + 0x6f6c6f43,0x00000072,0x000a0006,0x00000138,0x00000015,0x6b636162,0x66667542,0x72547265, + 0x66736e61,0x75467265,0x6974636e,0x00006e6f,0x00070006,0x00000138,0x00000016,0x4d6e696d, + 0x754c7861,0x616e696d,0x0065636e,0x00060006,0x00000138,0x00000017,0x6e615466,0x666c6148, + 0x00564f46,0x00050006,0x00000138,0x00000018,0x6461705f,0x00000031,0x00050006,0x00000138, + 0x00000019,0x74694a66,0x00726574,0x00080006,0x00000138,0x0000001a,0x746f4d66,0x566e6f69, + 0x6f746365,0x61635372,0x0000656c,0x00040005,0x0000013a,0x49466263,0x00000000,0x00070005, + 0x00000141,0x74704f69,0x6c616369,0x776f6c46,0x657a6953,0x00000000,0x000a0005,0x00000171, + 0x72705f72,0x6f697665,0x695f7375,0x7265746e,0x616c6f70,0x6e6f6974,0x756f735f,0x00656372, + 0x00060005,0x00000175,0x694c5f73,0x7261656e,0x6d616c43,0x00000070,0x000a0005,0x0000017e, + 0x75635f72,0x6e657272,0x6e695f74,0x70726574,0x74616c6f,0x5f6e6f69,0x72756f73,0x00006563, + 0x00060005,0x00000189,0x706f5f72,0x61636974,0x6c665f6c,0x0000776f,0x00090005,0x00000197, + 0x706f5f72,0x61636974,0x6c665f6c,0x635f776f,0x69666e6f,0x636e6564,0x00000065,0x000c0005, + 0x000001a2,0x6f5f7772,0x63697470,0x665f6c61,0x5f776f6c,0x69746f6d,0x765f6e6f,0x6f746365, + 0x69665f72,0x5f646c65,0x00000078,0x000c0005,0x000001a9,0x6f5f7772,0x63697470,0x665f6c61, + 0x5f776f6c,0x69746f6d,0x765f6e6f,0x6f746365,0x69665f72,0x5f646c65,0x00000079,0x00030005, + 0x000001b7,0x00005966,0x00030005,0x000001ca,0x00000070,0x00040005,0x000001cf,0x61726170, + 0x0000006d,0x00040005,0x000001d7,0x61726170,0x0000006d,0x00050005,0x000001e1,0x6e694c66, + 0x52726165,0x00006267,0x00040005,0x000001e2,0x61726170,0x0000006d,0x00040005,0x000001e6, + 0x61726170,0x0000006d,0x00040005,0x000001f0,0x61726170,0x0000006d,0x00040005,0x000001f2, + 0x61726170,0x0000006d,0x00040005,0x000001f3,0x61726170,0x0000006d,0x00050005,0x000001fa, + 0x6d754c66,0x6e616e69,0x00006563,0x00040005,0x00000200,0x61726170,0x0000006d,0x00040005, + 0x00000203,0x61726170,0x0000006d,0x00040005,0x00000206,0x61726170,0x0000006d,0x00040005, + 0x00000209,0x61726170,0x0000006d,0x00040005,0x0000020c,0x61726170,0x0000006d,0x00040005, + 0x0000020f,0x61726170,0x0000006d,0x00050005,0x00000216,0x53785066,0x6c706d61,0x00000065, + 0x00040005,0x0000021f,0x61746164,0x00000000,0x00040005,0x00000225,0x46785066,0x00636172, + 0x00040005,0x00000226,0x61726170,0x0000006d,0x00030005,0x00000271,0x0000006d,0x00040005, + 0x00000272,0x61726170,0x0000006d,0x00040005,0x00000273,0x61726170,0x0000006d,0x00040005, + 0x0000027a,0x61726170,0x0000006d,0x00040005,0x0000027b,0x61726170,0x0000006d,0x00050005, + 0x00000283,0x69725075,0x7469726f,0x00000079,0x00040005,0x00000294,0x6b636170,0x00586465, + 0x00040005,0x00000296,0x61726170,0x0000006d,0x00040005,0x0000029b,0x6b636170,0x00596465, + 0x00040005,0x0000029d,0x61726170,0x0000006d,0x00030005,0x000002a7,0x00765566,0x00070005, + 0x000002af,0x746f4d66,0x566e6f69,0x6f746365,0x6c614872,0x00000066,0x00070005,0x000002b2, + 0x76657270,0x6b636142,0x66667562,0x6f437265,0x0000006c,0x00040005,0x000002b6,0x61726170, + 0x0000006d,0x00070005,0x000002b8,0x42727563,0x626b6361,0x65666675,0x6c6f4372,0x00000000, + 0x00040005,0x000002b9,0x61726170,0x0000006d,0x00050005,0x000002bc,0x76657270,0x616d754c, + 0x00000000,0x00040005,0x000002be,0x61726170,0x0000006d,0x00050005,0x000002c2,0x72727563, + 0x616d754c,0x00000000,0x00040005,0x000002c3,0x61726170,0x0000006d,0x00050005,0x000002c7, + 0x6c655666,0x7469636f,0x00000079,0x00070005,0x000002cd,0x67694875,0x69725068,0x7469726f, + 0x63614679,0x00726f74,0x00040005,0x000002d8,0x61726170,0x0000006d,0x00070005,0x000002e2, + 0x776f4c75,0x6f697250,0x79746972,0x74636146,0x0000726f,0x00040005,0x000002e6,0x61726170, + 0x0000006d,0x00040005,0x000002e7,0x61726170,0x0000006d,0x00040005,0x000002eb,0x61726170, + 0x0000006d,0x00040005,0x000002f1,0x61726170,0x0000006d,0x00070005,0x000002f5,0x6b636170, + 0x65566465,0x726f7463,0x6d697250,0x00797261,0x00040005,0x000002f7,0x61726170,0x0000006d, + 0x00040005,0x000002f8,0x61726170,0x0000006d,0x00040005,0x000002fa,0x61726170,0x0000006d, + 0x00040005,0x000002fc,0x61726170,0x0000006d,0x00060005,0x000002ff,0x696c6962,0x7261656e, + 0x6f666e49,0x00000000,0x00040005,0x00000304,0x61726170,0x0000006d,0x00040005,0x00000305, + 0x61726170,0x0000006d,0x00060005,0x00000308,0x6d615369,0x49656c70,0x7865646e,0x00000000, + 0x00040005,0x00000311,0x66664f69,0x00746573,0x00050005,0x00000315,0x6d615369,0x50656c70, + 0x0000736f,0x00040005,0x0000031b,0x61726170,0x0000006d,0x00040005,0x0000031d,0x61726170, + 0x0000006d,0x00040005,0x00000321,0x61726170,0x0000006d,0x00040005,0x00000323,0x61726170, + 0x0000006d,0x00070005,0x00000328,0x74704f66,0x6c616369,0x776f6c46,0x74636556,0x0000726f, + 0x00090005,0x0000032a,0x74704f66,0x6c616369,0x776f6c46,0x74636556,0x7833726f,0x67764133, + 0x00000000,0x00040005,0x0000032b,0x657a6973,0x00000000,0x00030005,0x0000032c,0x00007773, + 0x00030005,0x0000032d,0x00000079,0x00030005,0x00000338,0x00000078,0x00050005,0x00000343, + 0x706d6173,0x6f50656c,0x00000073,0x00030005,0x00000349,0x00007376,0x00040005,0x0000034a, + 0x61726170,0x0000006d,0x00070005,0x0000034d,0x6e6f4366,0x65646966,0x4665636e,0x6f746361, + 0x00000072,0x00040005,0x0000034e,0x61726170,0x0000006d,0x00040005,0x00000351,0x61726170, + 0x0000006d,0x00040005,0x00000352,0x61726170,0x0000006d,0x00030005,0x00000354,0x006e656c, + 0x00050005,0x0000035a,0x5f6e656c,0x74636166,0x0000726f,0x00040005,0x0000035e,0x61726170, + 0x0000006d,0x00040005,0x0000035f,0x61726170,0x0000006d,0x00030005,0x00000365,0x00000077, + 0x00030005,0x00000377,0x00000079,0x00030005,0x00000382,0x00000078,0x00050005,0x0000038d, + 0x706d6173,0x6f50656c,0x00000073,0x00030005,0x00000393,0x00007376,0x00040005,0x00000394, + 0x61726170,0x0000006d,0x00070005,0x00000397,0x6e6f4366,0x65646966,0x4665636e,0x6f746361, + 0x00000072,0x00040005,0x00000398,0x61726170,0x0000006d,0x00040005,0x0000039b,0x61726170, + 0x0000006d,0x00040005,0x0000039c,0x61726170,0x0000006d,0x00030005,0x0000039e,0x006e656c, + 0x00050005,0x000003a4,0x5f6e656c,0x74636166,0x0000726f,0x00040005,0x000003a7,0x61726170, + 0x0000006d,0x00040005,0x000003a8,0x61726170,0x0000006d,0x00030005,0x000003ae,0x00000077, + 0x00040005,0x000003b3,0x61726170,0x0000006d,0x00040005,0x000003b4,0x61726170,0x0000006d, + 0x00040005,0x000003b6,0x61726170,0x0000006d,0x00040005,0x000003b7,0x61726170,0x0000006d, + 0x00040005,0x000003d1,0x61726170,0x0000006d,0x00040005,0x000003d2,0x61726170,0x0000006d, + 0x00080005,0x000003d7,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044, + 0x00040005,0x000003db,0x61726170,0x0000006d,0x00060005,0x000003e0,0x69645f72,0x6574616c, + 0x65645f64,0x00687470,0x00030047,0x00000138,0x00000002,0x00050048,0x00000138,0x00000000, + 0x00000023,0x00000000,0x00050048,0x00000138,0x00000001,0x00000023,0x00000008,0x00050048, + 0x00000138,0x00000002,0x00000023,0x00000010,0x00050048,0x00000138,0x00000003,0x00000023, + 0x00000018,0x00050048,0x00000138,0x00000004,0x00000023,0x0000001c,0x00050048,0x00000138, + 0x00000005,0x00000023,0x00000020,0x00050048,0x00000138,0x00000006,0x00000023,0x00000028, + 0x00050048,0x00000138,0x00000007,0x00000023,0x0000002c,0x00050048,0x00000138,0x00000008, + 0x00000023,0x00000030,0x00050048,0x00000138,0x00000009,0x00000023,0x00000040,0x00050048, + 0x00000138,0x0000000a,0x00000023,0x00000044,0x00050048,0x00000138,0x0000000b,0x00000023, + 0x00000048,0x00050048,0x00000138,0x0000000c,0x00000023,0x00000050,0x00050048,0x00000138, + 0x0000000d,0x00000023,0x00000058,0x00050048,0x00000138,0x0000000e,0x00000023,0x0000005c, + 0x00050048,0x00000138,0x0000000f,0x00000023,0x00000060,0x00050048,0x00000138,0x00000010, + 0x00000023,0x00000068,0x00050048,0x00000138,0x00000011,0x00000023,0x0000006c,0x00050048, + 0x00000138,0x00000012,0x00000023,0x00000070,0x00050048,0x00000138,0x00000013,0x00000023, + 0x00000078,0x00050048,0x00000138,0x00000014,0x00000023,0x00000080,0x00050048,0x00000138, + 0x00000015,0x00000023,0x0000008c,0x00050048,0x00000138,0x00000016,0x00000023,0x00000090, + 0x00050048,0x00000138,0x00000017,0x00000023,0x00000098,0x00050048,0x00000138,0x00000018, + 0x00000023,0x0000009c,0x00050048,0x00000138,0x00000019,0x00000023,0x000000a0,0x00050048, + 0x00000138,0x0000001a,0x00000023,0x000000a8,0x00040047,0x0000013a,0x00000021,0x00000008, + 0x00040047,0x0000013a,0x00000022,0x00000000,0x00040047,0x00000171,0x00000021,0x00000003, + 0x00040047,0x00000171,0x00000022,0x00000000,0x00040047,0x00000175,0x00000021,0x000003e8, + 0x00040047,0x00000175,0x00000022,0x00000000,0x00040047,0x0000017e,0x00000021,0x00000004, + 0x00040047,0x0000017e,0x00000022,0x00000000,0x00040047,0x00000189,0x00000021,0x00000000, + 0x00040047,0x00000189,0x00000022,0x00000000,0x00040047,0x00000197,0x00000021,0x00000001, + 0x00040047,0x00000197,0x00000022,0x00000000,0x00040047,0x000001a2,0x00000021,0x00000006, + 0x00040047,0x000001a2,0x00000022,0x00000000,0x00040047,0x000001a9,0x00000021,0x00000007, + 0x00040047,0x000001a9,0x00000022,0x00000000,0x00040047,0x000003d7,0x0000000b,0x0000001c, + 0x00040047,0x000003e0,0x00000021,0x00000002,0x00040047,0x000003e0,0x00000022,0x00000000, + 0x00040047,0x000003e7,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003, + 0x00000002,0x00040015,0x00000006,0x00000020,0x00000000,0x00040020,0x00000007,0x00000007, + 0x00000006,0x00030016,0x00000008,0x00000020,0x00040021,0x00000009,0x00000008,0x00000007, + 0x00040020,0x0000000d,0x00000007,0x00000008,0x00040021,0x0000000e,0x00000006,0x0000000d, + 0x00040017,0x00000012,0x00000008,0x00000003,0x00040021,0x00000013,0x00000012,0x0000000d, + 0x00040021,0x00000017,0x00000008,0x0000000d,0x00040020,0x0000001b,0x00000007,0x00000012, + 0x00040021,0x0000001c,0x00000012,0x0000001b,0x00040017,0x00000020,0x00000008,0x00000002, + 0x00040020,0x00000021,0x00000007,0x00000020,0x00040021,0x00000022,0x00000020,0x00000021, + 0x00050021,0x00000029,0x00000008,0x0000000d,0x0000000d,0x00060021,0x00000036,0x00000012, + 0x0000001b,0x0000001b,0x0000001b,0x00040015,0x00000045,0x00000020,0x00000001,0x00040017, + 0x00000046,0x00000045,0x00000002,0x00030021,0x00000047,0x00000046,0x00030021,0x0000004e, + 0x00000020,0x00030021,0x00000051,0x00000006,0x00030021,0x00000054,0x00000008,0x00040021, + 0x00000059,0x00000012,0x00000021,0x00040020,0x00000060,0x00000007,0x00000046,0x00040021, + 0x00000061,0x00000020,0x00000060,0x00040021,0x00000065,0x00000008,0x00000060,0x00040017, + 0x00000069,0x00000006,0x00000002,0x00040020,0x0000006a,0x00000007,0x00000069,0x00050021, + 0x0000006b,0x00000002,0x00000060,0x0000006a,0x00040021,0x00000070,0x00000008,0x0000001b, + 0x00060021,0x00000077,0x00000012,0x0000001b,0x0000000d,0x0000000d,0x0004002b,0x00000006, + 0x00000083,0x00000004,0x0004001c,0x00000084,0x00000046,0x00000083,0x0004001c,0x00000085, + 0x00000008,0x00000083,0x0005001e,0x00000086,0x00000084,0x00000085,0x00000046,0x00050021, + 0x00000087,0x00000086,0x00000021,0x00000060,0x00020014,0x0000008c,0x00050021,0x0000008d, + 0x0000008c,0x00000060,0x00000060,0x00040021,0x00000092,0x0000008c,0x00000021,0x00050021, + 0x00000096,0x00000008,0x00000008,0x00000008,0x00040020,0x0000009b,0x00000007,0x0000008c, + 0x00070021,0x0000009c,0x00000069,0x0000009b,0x00000007,0x00000007,0x00000021,0x00050021, + 0x000000a3,0x00000002,0x0000006a,0x00000021,0x00040021,0x000000a8,0x00000002,0x00000060, + 0x0004002b,0x00000008,0x000000b1,0x00000000,0x0004002b,0x00000008,0x000000bb,0x3f800000, + 0x0004002b,0x00000006,0x000000ed,0xff800000,0x0004002b,0x00000008,0x000000f9,0x3c4fcd9e, + 0x0004002b,0x00000008,0x000000fe,0x3f560008,0x0004002b,0x00000008,0x00000104,0x4196d014, + 0x0004002b,0x00000008,0x00000107,0x41958000,0x0004002b,0x00000008,0x0000010e,0x40c8e061, + 0x0004002b,0x00000008,0x00000115,0x3d25aee6,0x0004002b,0x00000008,0x00000116,0x3d9e8391, + 0x0004002b,0x00000008,0x00000117,0x4019999a,0x0006002c,0x00000012,0x00000118,0x00000115, + 0x00000116,0x00000117,0x0004002b,0x00000008,0x0000011a,0x3f72a76e,0x0004002b,0x00000008, + 0x0000011b,0x3d558919,0x0005002c,0x00000020,0x0000011c,0x0000011a,0x0000011b,0x00040017, + 0x00000137,0x00000008,0x00000004,0x001d001e,0x00000138,0x00000046,0x00000046,0x00000020, + 0x00000008,0x00000008,0x00000046,0x00000045,0x00000045,0x00000137,0x00000008,0x00000045, + 0x00000046,0x00000020,0x00000045,0x00000006,0x00000046,0x00000045,0x00000045,0x00000046, + 0x00000046,0x00000012,0x00000006,0x00000020,0x00000008,0x00000045,0x00000020,0x00000020, + 0x00040020,0x00000139,0x00000002,0x00000138,0x0004003b,0x00000139,0x0000013a,0x00000002, + 0x0004002b,0x00000045,0x0000013b,0x00000013,0x00040020,0x0000013c,0x00000002,0x00000046, + 0x0004002b,0x00000045,0x00000142,0x0000000c,0x00040020,0x00000143,0x00000002,0x00000020, + 0x0004002b,0x00000045,0x00000148,0x0000000d,0x00040020,0x00000149,0x00000002,0x00000045, + 0x0004002b,0x00000045,0x00000154,0x00000001,0x0004002b,0x00000045,0x0000015d,0x00000015, + 0x00040020,0x0000015e,0x00000002,0x00000006,0x0004002b,0x00000045,0x00000163,0x00000016, + 0x0004002b,0x00000006,0x00000164,0x00000000,0x00040020,0x00000165,0x00000002,0x00000008, + 0x0004002b,0x00000006,0x0000016a,0x00000001,0x00090019,0x0000016f,0x00000008,0x00000001, + 0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x00040020,0x00000170,0x00000000, + 0x0000016f,0x0004003b,0x00000170,0x00000171,0x00000000,0x0002001a,0x00000173,0x00040020, + 0x00000174,0x00000000,0x00000173,0x0004003b,0x00000174,0x00000175,0x00000000,0x0003001b, + 0x00000177,0x0000016f,0x0004003b,0x00000170,0x0000017e,0x00000000,0x00090019,0x00000187, + 0x00000045,0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x00040020, + 0x00000188,0x00000000,0x00000187,0x0004003b,0x00000188,0x00000189,0x00000000,0x0004002b, + 0x00000045,0x0000018c,0x00000000,0x00040017,0x0000018d,0x00000045,0x00000004,0x00090019, + 0x00000195,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000, + 0x00040020,0x00000196,0x00000000,0x00000195,0x0004003b,0x00000196,0x00000197,0x00000000, + 0x00040017,0x0000019a,0x00000006,0x00000004,0x00090019,0x000001a0,0x00000006,0x00000001, + 0x00000000,0x00000000,0x00000000,0x00000002,0x00000021,0x00040020,0x000001a1,0x00000000, + 0x000001a0,0x0004003b,0x000001a1,0x000001a2,0x00000000,0x00040020,0x000001a6,0x0000000b, + 0x00000006,0x0004003b,0x000001a1,0x000001a9,0x00000000,0x0004002b,0x00000008,0x000001b0, + 0x3e59b3d0,0x0004002b,0x00000008,0x000001b1,0x3f371759,0x0004002b,0x00000008,0x000001b2, + 0x3d93dd98,0x0006002c,0x00000012,0x000001b3,0x000001b0,0x000001b1,0x000001b2,0x0004002b, + 0x00000008,0x000001b8,0x3e86809d,0x0004002b,0x00000008,0x000001bc,0x3f2d9168,0x0004002b, + 0x00000008,0x000001c1,0x3d72e48f,0x0004002b,0x00000006,0x000001c2,0x00000002,0x0004002b, + 0x00000008,0x000001cd,0x42a00000,0x0004002b,0x00000008,0x000001e9,0x461c4000,0x0004002b, + 0x00000008,0x0000021b,0x3f000000,0x0005002c,0x00000020,0x0000021c,0x0000021b,0x0000021b, + 0x00040020,0x0000021e,0x00000007,0x00000086,0x0004002b,0x00000045,0x00000220,0x00000002, + 0x0005002c,0x00000046,0x00000229,0x0000018c,0x0000018c,0x0005002c,0x00000046,0x0000022b, + 0x00000154,0x0000018c,0x0005002c,0x00000046,0x0000022d,0x0000018c,0x00000154,0x0004002b, + 0x00000045,0x0000022f,0x00000003,0x0005002c,0x00000046,0x00000230,0x00000154,0x00000154, + 0x00040017,0x00000255,0x0000008c,0x00000002,0x0004002b,0x00000006,0x00000286,0x80000000, + 0x0004002b,0x00000006,0x00000289,0x000003ff,0x0004002b,0x00000006,0x0000028b,0x00000015, + 0x0004002b,0x00000006,0x0000028f,0x0000001f,0x0004002b,0x00000006,0x00000291,0x00000010, + 0x0004002b,0x00000008,0x000002bd,0x3a83126f,0x0004002b,0x00000008,0x000002d4,0x3d4ccccd, + 0x0004002b,0x00000008,0x000002da,0x447fc000,0x0004002b,0x00000008,0x000002e9,0x41f80000, + 0x00030029,0x0000008c,0x000002f6,0x00040020,0x00000307,0x00000007,0x00000045,0x0004002b, + 0x00000045,0x0000030f,0x00000004,0x0005002c,0x00000020,0x00000329,0x000000b1,0x000000b1, + 0x0004002b,0x00000008,0x0000035b,0x44000000,0x0004002b,0x00000008,0x000003b2,0x3fa00000, + 0x00040017,0x000003d5,0x00000006,0x00000003,0x00040020,0x000003d6,0x00000001,0x000003d5, + 0x0004003b,0x000003d6,0x000003d7,0x00000001,0x0004002b,0x00000008,0x000003dd,0x387fda40, + 0x0004002b,0x00000008,0x000003de,0x477fe000,0x0004002b,0x00000008,0x000003df,0x37801002, + 0x0004003b,0x00000170,0x000003e0,0x00000000,0x0004002b,0x00000008,0x000003e1,0x7f7fffff, + 0x0004002b,0x00000008,0x000003e2,0x00800000,0x0004002b,0x00000006,0x000003e3,0x00000020, + 0x0004002b,0x00000006,0x000003e4,0x00000005,0x0004002b,0x00000006,0x000003e5,0x0000000a, + 0x0004002b,0x00000006,0x000003e6,0x00000008,0x0006002c,0x000003d5,0x000003e7,0x000003e6, + 0x000003e6,0x0000016a,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8, + 0x00000005,0x0004003b,0x00000060,0x000003db,0x00000007,0x0004003d,0x000003d5,0x000003d8, + 0x000003d7,0x0007004f,0x00000069,0x000003d9,0x000003d8,0x000003d8,0x00000000,0x00000001, + 0x0004007c,0x00000046,0x000003da,0x000003d9,0x0003003e,0x000003db,0x000003da,0x00050039, + 0x00000002,0x000003dc,0x000000aa,0x000003db,0x000100fd,0x00010038,0x00050036,0x00000008, + 0x0000000b,0x00000000,0x00000009,0x00030037,0x00000007,0x0000000a,0x000200f8,0x0000000c, + 0x0004003d,0x00000006,0x000000ac,0x0000000a,0x0004007c,0x00000008,0x000000ad,0x000000ac, + 0x000200fe,0x000000ad,0x00010038,0x00050036,0x00000006,0x00000010,0x00000000,0x0000000e, + 0x00030037,0x0000000d,0x0000000f,0x000200f8,0x00000011,0x0004003d,0x00000008,0x000000b0, + 0x0000000f,0x00050050,0x00000020,0x000000b2,0x000000b0,0x000000b1,0x0006000c,0x00000006, + 0x000000b3,0x00000001,0x0000003a,0x000000b2,0x000200fe,0x000000b3,0x00010038,0x00050036, + 0x00000012,0x00000015,0x00000000,0x00000013,0x00030037,0x0000000d,0x00000014,0x000200f8, + 0x00000016,0x0004003d,0x00000008,0x000000b6,0x00000014,0x00060050,0x00000012,0x000000b7, + 0x000000b6,0x000000b6,0x000000b6,0x000200fe,0x000000b7,0x00010038,0x00050036,0x00000008, + 0x00000019,0x00000000,0x00000017,0x00030037,0x0000000d,0x00000018,0x000200f8,0x0000001a, + 0x0004003d,0x00000008,0x000000ba,0x00000018,0x0008000c,0x00000008,0x000000bc,0x00000001, + 0x0000002b,0x000000ba,0x000000b1,0x000000bb,0x000200fe,0x000000bc,0x00010038,0x00050036, + 0x00000012,0x0000001e,0x00000000,0x0000001c,0x00030037,0x0000001b,0x0000001d,0x000200f8, + 0x0000001f,0x0004003b,0x0000000d,0x000000c0,0x00000007,0x0004003b,0x0000000d,0x000000c2, + 0x00000007,0x0004003d,0x00000012,0x000000bf,0x0000001d,0x0003003e,0x000000c0,0x000000b1, + 0x00050039,0x00000012,0x000000c1,0x00000015,0x000000c0,0x0003003e,0x000000c2,0x000000bb, + 0x00050039,0x00000012,0x000000c3,0x00000015,0x000000c2,0x0008000c,0x00000012,0x000000c4, + 0x00000001,0x0000002b,0x000000bf,0x000000c1,0x000000c3,0x000200fe,0x000000c4,0x00010038, + 0x00050036,0x00000020,0x00000024,0x00000000,0x00000022,0x00030037,0x00000021,0x00000023, + 0x000200f8,0x00000025,0x0004003d,0x00000020,0x000000c7,0x00000023,0x0006000c,0x00000020, + 0x000000c8,0x00000001,0x0000000a,0x000000c7,0x000200fe,0x000000c8,0x00010038,0x00050036, + 0x00000008,0x00000027,0x00000000,0x00000017,0x00030037,0x0000000d,0x00000026,0x000200f8, + 0x00000028,0x0004003d,0x00000008,0x000000cb,0x00000026,0x0006000c,0x00000008,0x000000cc, + 0x00000001,0x00000002,0x000000cb,0x000200fe,0x000000cc,0x00010038,0x00050036,0x00000008, + 0x0000002c,0x00000000,0x00000029,0x00030037,0x0000000d,0x0000002a,0x00030037,0x0000000d, + 0x0000002b,0x000200f8,0x0000002d,0x0004003d,0x00000008,0x000000cf,0x0000002a,0x0004003d, + 0x00000008,0x000000d0,0x0000002b,0x0007000c,0x00000008,0x000000d1,0x00000001,0x00000025, + 0x000000cf,0x000000d0,0x000200fe,0x000000d1,0x00010038,0x00050036,0x00000008,0x00000030, + 0x00000000,0x00000029,0x00030037,0x0000000d,0x0000002e,0x00030037,0x0000000d,0x0000002f, + 0x000200f8,0x00000031,0x0004003d,0x00000008,0x000000d4,0x0000002e,0x0004003d,0x00000008, + 0x000000d5,0x0000002f,0x0007000c,0x00000008,0x000000d6,0x00000001,0x00000028,0x000000d4, + 0x000000d5,0x000200fe,0x000000d6,0x00010038,0x00050036,0x00000008,0x00000034,0x00000000, + 0x00000029,0x00030037,0x0000000d,0x00000032,0x00030037,0x0000000d,0x00000033,0x000200f8, + 0x00000035,0x0004003d,0x00000008,0x000000d9,0x00000032,0x0004003d,0x00000008,0x000000da, + 0x00000033,0x0007000c,0x00000008,0x000000db,0x00000001,0x0000001a,0x000000d9,0x000000da, + 0x000200fe,0x000000db,0x00010038,0x00050036,0x00000012,0x0000003a,0x00000000,0x00000036, + 0x00030037,0x0000001b,0x00000037,0x00030037,0x0000001b,0x00000038,0x00030037,0x0000001b, + 0x00000039,0x000200f8,0x0000003b,0x0004003b,0x0000001b,0x000000de,0x00000007,0x0004003d, + 0x00000012,0x000000df,0x00000037,0x0004007f,0x00000012,0x000000e0,0x000000df,0x0004003d, + 0x00000012,0x000000e1,0x00000039,0x00050085,0x00000012,0x000000e2,0x000000e0,0x000000e1, + 0x0004003d,0x00000012,0x000000e3,0x00000039,0x00050081,0x00000012,0x000000e4,0x000000e2, + 0x000000e3,0x0003003e,0x000000de,0x000000e4,0x0004003d,0x00000012,0x000000e5,0x00000037, + 0x0004003d,0x00000012,0x000000e6,0x00000038,0x00050085,0x00000012,0x000000e7,0x000000e5, + 0x000000e6,0x0004003d,0x00000012,0x000000e8,0x000000de,0x00050081,0x00000012,0x000000e9, + 0x000000e7,0x000000e8,0x000200fe,0x000000e9,0x00010038,0x00050036,0x00000012,0x0000003d, + 0x00000000,0x0000001c,0x00030037,0x0000001b,0x0000003c,0x000200f8,0x0000003e,0x0004003b, + 0x00000007,0x000000ee,0x00000007,0x0004003b,0x0000000d,0x000000f0,0x00000007,0x0004003b, + 0x0000001b,0x000000f3,0x00000007,0x0004003d,0x00000012,0x000000ec,0x0000003c,0x0003003e, + 0x000000ee,0x000000ed,0x00050039,0x00000008,0x000000ef,0x0000000b,0x000000ee,0x0003003e, + 0x000000f0,0x000000ef,0x00050039,0x00000012,0x000000f1,0x00000015,0x000000f0,0x00050085, + 0x00000012,0x000000f2,0x000000ec,0x000000f1,0x0003003e,0x000000f3,0x000000f2,0x00050039, + 0x00000012,0x000000f4,0x0000001e,0x000000f3,0x000200fe,0x000000f4,0x00010038,0x00050036, + 0x00000012,0x00000040,0x00000000,0x0000001c,0x00030037,0x0000001b,0x0000003f,0x000200f8, + 0x00000041,0x0004003b,0x0000001b,0x000000f7,0x00000007,0x0004003b,0x0000000d,0x000000fa, + 0x00000007,0x0004003b,0x0000000d,0x000000ff,0x00000007,0x0004003b,0x0000001b,0x00000102, + 0x00000007,0x0004003b,0x0000000d,0x00000105,0x00000007,0x0004003b,0x0000000d,0x00000108, + 0x00000007,0x0004003b,0x0000000d,0x0000010f,0x00000007,0x0004003d,0x00000012,0x000000f8, + 0x0000003f,0x0003003e,0x000000fa,0x000000f9,0x00050039,0x00000012,0x000000fb,0x00000015, + 0x000000fa,0x0007000c,0x00000012,0x000000fc,0x00000001,0x0000001a,0x000000f8,0x000000fb, + 0x0003003e,0x000000f7,0x000000fc,0x0004003d,0x00000012,0x000000fd,0x000000f7,0x0003003e, + 0x000000ff,0x000000fe,0x00050039,0x00000012,0x00000100,0x00000015,0x000000ff,0x00050083, + 0x00000012,0x00000101,0x000000fd,0x00000100,0x0003003e,0x00000102,0x00000101,0x00050039, + 0x00000012,0x00000103,0x0000001e,0x00000102,0x0003003e,0x00000105,0x00000104,0x00050039, + 0x00000012,0x00000106,0x00000015,0x00000105,0x0003003e,0x00000108,0x00000107,0x00050039, + 0x00000012,0x00000109,0x00000015,0x00000108,0x0004003d,0x00000012,0x0000010a,0x000000f7, + 0x00050085,0x00000012,0x0000010b,0x00000109,0x0000010a,0x00050083,0x00000012,0x0000010c, + 0x00000106,0x0000010b,0x00050088,0x00000012,0x0000010d,0x00000103,0x0000010c,0x0003003e, + 0x0000010f,0x0000010e,0x00050039,0x00000012,0x00000110,0x00000015,0x0000010f,0x0007000c, + 0x00000012,0x00000111,0x00000001,0x0000001a,0x0000010d,0x00000110,0x000200fe,0x00000111, + 0x00010038,0x00050036,0x00000012,0x00000043,0x00000000,0x0000001c,0x00030037,0x0000001b, + 0x00000042,0x000200f8,0x00000044,0x0004003b,0x0000001b,0x00000114,0x00000007,0x0004003b, + 0x00000021,0x00000119,0x00000007,0x0004003b,0x0000001b,0x00000121,0x00000007,0x0004003b, + 0x0000001b,0x00000131,0x00000007,0x0004003b,0x0000001b,0x00000132,0x00000007,0x0004003b, + 0x0000001b,0x00000133,0x00000007,0x0003003e,0x00000114,0x00000118,0x0003003e,0x00000119, + 0x0000011c,0x0004003d,0x00000012,0x0000011d,0x00000042,0x0004003d,0x00000012,0x0000011e, + 0x00000114,0x0008004f,0x00000012,0x0000011f,0x0000011e,0x0000011e,0x00000000,0x00000000, + 0x00000000,0x00050083,0x00000012,0x00000120,0x0000011d,0x0000011f,0x0003003e,0x00000121, + 0x00000120,0x00050039,0x00000012,0x00000122,0x0000003d,0x00000121,0x0004003d,0x00000012, + 0x00000123,0x00000042,0x0004003d,0x00000012,0x00000124,0x00000114,0x0008004f,0x00000012, + 0x00000125,0x00000124,0x00000124,0x00000001,0x00000001,0x00000001,0x00050085,0x00000012, + 0x00000126,0x00000123,0x00000125,0x0004003d,0x00000012,0x00000127,0x00000042,0x0004003d, + 0x00000020,0x00000128,0x00000119,0x0008004f,0x00000012,0x00000129,0x00000128,0x00000128, + 0x00000000,0x00000000,0x00000000,0x00050085,0x00000012,0x0000012a,0x00000127,0x00000129, + 0x0004003d,0x00000020,0x0000012b,0x00000119,0x0008004f,0x00000012,0x0000012c,0x0000012b, + 0x0000012b,0x00000001,0x00000001,0x00000001,0x00050081,0x00000012,0x0000012d,0x0000012a, + 0x0000012c,0x0004003d,0x00000012,0x0000012e,0x00000114,0x0008004f,0x00000012,0x0000012f, + 0x0000012e,0x0000012e,0x00000002,0x00000002,0x00000002,0x0007000c,0x00000012,0x00000130, + 0x00000001,0x0000001a,0x0000012d,0x0000012f,0x0003003e,0x00000131,0x00000122,0x0003003e, + 0x00000132,0x00000126,0x0003003e,0x00000133,0x00000130,0x00070039,0x00000012,0x00000134, + 0x0000003a,0x00000131,0x00000132,0x00000133,0x000200fe,0x00000134,0x00010038,0x00050036, + 0x00000046,0x00000048,0x00000000,0x00000047,0x000200f8,0x00000049,0x00050041,0x0000013c, + 0x0000013d,0x0000013a,0x0000013b,0x0004003d,0x00000046,0x0000013e,0x0000013d,0x000200fe, + 0x0000013e,0x00010038,0x00050036,0x00000046,0x0000004a,0x00000000,0x00000047,0x000200f8, + 0x0000004b,0x0004003b,0x00000060,0x00000141,0x00000007,0x00050041,0x00000143,0x00000144, + 0x0000013a,0x00000142,0x0004003d,0x00000020,0x00000145,0x00000144,0x00050050,0x00000020, + 0x00000146,0x000000bb,0x000000bb,0x00050088,0x00000020,0x00000147,0x00000146,0x00000145, + 0x00050041,0x00000149,0x0000014a,0x0000013a,0x00000148,0x0004003d,0x00000045,0x0000014b, + 0x0000014a,0x00050050,0x00000046,0x0000014c,0x0000014b,0x0000014b,0x0004006f,0x00000020, + 0x0000014d,0x0000014c,0x00050088,0x00000020,0x0000014e,0x00000147,0x0000014d,0x0004006e, + 0x00000046,0x0000014f,0x0000014e,0x0003003e,0x00000141,0x0000014f,0x0004003d,0x00000046, + 0x00000150,0x00000141,0x000200fe,0x00000150,0x00010038,0x00050036,0x00000046,0x0000004c, + 0x00000000,0x00000047,0x000200f8,0x0000004d,0x00040039,0x00000046,0x00000153,0x0000004a, + 0x00050050,0x00000046,0x00000155,0x00000154,0x00000154,0x00050084,0x00000046,0x00000156, + 0x00000153,0x00000155,0x000200fe,0x00000156,0x00010038,0x00050036,0x00000020,0x0000004f, + 0x00000000,0x0000004e,0x000200f8,0x00000050,0x00050041,0x00000143,0x00000159,0x0000013a, + 0x00000142,0x0004003d,0x00000020,0x0000015a,0x00000159,0x000200fe,0x0000015a,0x00010038, + 0x00050036,0x00000006,0x00000052,0x00000000,0x00000051,0x000200f8,0x00000053,0x00050041, + 0x0000015e,0x0000015f,0x0000013a,0x0000015d,0x0004003d,0x00000006,0x00000160,0x0000015f, + 0x000200fe,0x00000160,0x00010038,0x00050036,0x00000008,0x00000055,0x00000000,0x00000054, + 0x000200f8,0x00000056,0x00060041,0x00000165,0x00000166,0x0000013a,0x00000163,0x00000164, + 0x0004003d,0x00000008,0x00000167,0x00000166,0x000200fe,0x00000167,0x00010038,0x00050036, + 0x00000008,0x00000057,0x00000000,0x00000054,0x000200f8,0x00000058,0x00060041,0x00000165, + 0x0000016b,0x0000013a,0x00000163,0x0000016a,0x0004003d,0x00000008,0x0000016c,0x0000016b, + 0x000200fe,0x0000016c,0x00010038,0x00050036,0x00000012,0x0000005b,0x00000000,0x00000059, + 0x00030037,0x00000021,0x0000005a,0x000200f8,0x0000005c,0x0004003d,0x0000016f,0x00000172, + 0x00000171,0x0004003d,0x00000173,0x00000176,0x00000175,0x00050056,0x00000177,0x00000178, + 0x00000172,0x00000176,0x0004003d,0x00000020,0x00000179,0x0000005a,0x00070058,0x00000137, + 0x0000017a,0x00000178,0x00000179,0x00000002,0x000000b1,0x0008004f,0x00000012,0x0000017b, + 0x0000017a,0x0000017a,0x00000000,0x00000001,0x00000002,0x000200fe,0x0000017b,0x00010038, + 0x00050036,0x00000012,0x0000005e,0x00000000,0x00000059,0x00030037,0x00000021,0x0000005d, + 0x000200f8,0x0000005f,0x0004003d,0x0000016f,0x0000017f,0x0000017e,0x0004003d,0x00000173, + 0x00000180,0x00000175,0x00050056,0x00000177,0x00000181,0x0000017f,0x00000180,0x0004003d, + 0x00000020,0x00000182,0x0000005d,0x00070058,0x00000137,0x00000183,0x00000181,0x00000182, + 0x00000002,0x000000b1,0x0008004f,0x00000012,0x00000184,0x00000183,0x00000183,0x00000000, + 0x00000001,0x00000002,0x000200fe,0x00000184,0x00010038,0x00050036,0x00000020,0x00000063, + 0x00000000,0x00000061,0x00030037,0x00000060,0x00000062,0x000200f8,0x00000064,0x0004003d, + 0x00000187,0x0000018a,0x00000189,0x0004003d,0x00000046,0x0000018b,0x00000062,0x0007005f, + 0x0000018d,0x0000018e,0x0000018a,0x0000018b,0x00000002,0x0000018c,0x0007004f,0x00000046, + 0x0000018f,0x0000018e,0x0000018e,0x00000000,0x00000001,0x0004006f,0x00000020,0x00000190, + 0x0000018f,0x00040039,0x00000020,0x00000191,0x0000004f,0x00050085,0x00000020,0x00000192, + 0x00000190,0x00000191,0x000200fe,0x00000192,0x00010038,0x00050036,0x00000008,0x00000067, + 0x00000000,0x00000065,0x00030037,0x00000060,0x00000066,0x000200f8,0x00000068,0x0004003d, + 0x00000195,0x00000198,0x00000197,0x0004003d,0x00000046,0x00000199,0x00000066,0x0007005f, + 0x0000019a,0x0000019b,0x00000198,0x00000199,0x00000002,0x0000018c,0x00050051,0x00000006, + 0x0000019c,0x0000019b,0x00000001,0x00040070,0x00000008,0x0000019d,0x0000019c,0x000200fe, + 0x0000019d,0x00010038,0x00050036,0x00000002,0x0000006e,0x00000000,0x0000006b,0x00030037, + 0x00000060,0x0000006c,0x00030037,0x0000006a,0x0000006d,0x000200f8,0x0000006f,0x0004003d, + 0x00000046,0x000001a3,0x0000006c,0x00050041,0x00000007,0x000001a4,0x0000006d,0x00000164, + 0x0004003d,0x00000006,0x000001a5,0x000001a4,0x0006003c,0x000001a6,0x000001a7,0x000001a2, + 0x000001a3,0x00000164,0x000700ef,0x00000006,0x000001a8,0x000001a7,0x0000016a,0x00000164, + 0x000001a5,0x0004003d,0x00000046,0x000001aa,0x0000006c,0x00050041,0x00000007,0x000001ab, + 0x0000006d,0x0000016a,0x0004003d,0x00000006,0x000001ac,0x000001ab,0x0006003c,0x000001a6, + 0x000001ad,0x000001a9,0x000001aa,0x00000164,0x000700ef,0x00000006,0x000001ae,0x000001ad, + 0x0000016a,0x00000164,0x000001ac,0x000100fd,0x00010038,0x00050036,0x00000008,0x00000072, + 0x00000000,0x00000070,0x00030037,0x0000001b,0x00000071,0x000200f8,0x00000073,0x0004003d, + 0x00000012,0x000001af,0x00000071,0x00050094,0x00000008,0x000001b4,0x000001af,0x000001b3, + 0x000200fe,0x000001b4,0x00010038,0x00050036,0x00000008,0x00000075,0x00000000,0x00000070, + 0x00030037,0x0000001b,0x00000074,0x000200f8,0x00000076,0x0004003b,0x0000000d,0x000001b7, + 0x00000007,0x00050041,0x0000000d,0x000001b9,0x00000074,0x00000164,0x0004003d,0x00000008, + 0x000001ba,0x000001b9,0x00050085,0x00000008,0x000001bb,0x000001b8,0x000001ba,0x00050041, + 0x0000000d,0x000001bd,0x00000074,0x0000016a,0x0004003d,0x00000008,0x000001be,0x000001bd, + 0x00050085,0x00000008,0x000001bf,0x000001bc,0x000001be,0x00050081,0x00000008,0x000001c0, + 0x000001bb,0x000001bf,0x00050041,0x0000000d,0x000001c3,0x00000074,0x000001c2,0x0004003d, + 0x00000008,0x000001c4,0x000001c3,0x00050085,0x00000008,0x000001c5,0x000001c1,0x000001c4, + 0x00050081,0x00000008,0x000001c6,0x000001c0,0x000001c5,0x0003003e,0x000001b7,0x000001c6, + 0x0004003d,0x00000008,0x000001c7,0x000001b7,0x000200fe,0x000001c7,0x00010038,0x00050036, + 0x00000012,0x0000007b,0x00000000,0x00000077,0x00030037,0x0000001b,0x00000078,0x00030037, + 0x0000000d,0x00000079,0x00030037,0x0000000d,0x0000007a,0x000200f8,0x0000007c,0x0004003b, + 0x0000001b,0x000001ca,0x00000007,0x0004003b,0x0000000d,0x000001cf,0x00000007,0x0004003b, + 0x0000000d,0x000001d7,0x00000007,0x0004003d,0x00000012,0x000001cb,0x00000078,0x0004003d, + 0x00000008,0x000001cc,0x00000079,0x00050088,0x00000008,0x000001ce,0x000001cc,0x000001cd, + 0x0003003e,0x000001cf,0x000001ce,0x00050039,0x00000012,0x000001d0,0x00000015,0x000001cf, + 0x00050083,0x00000012,0x000001d1,0x000001cb,0x000001d0,0x0003003e,0x000001ca,0x000001d1, + 0x0004003d,0x00000012,0x000001d2,0x000001ca,0x0004003d,0x00000008,0x000001d3,0x0000007a, + 0x0004003d,0x00000008,0x000001d4,0x00000079,0x00050083,0x00000008,0x000001d5,0x000001d3, + 0x000001d4,0x00050088,0x00000008,0x000001d6,0x000001d5,0x000001cd,0x0003003e,0x000001d7, + 0x000001d6,0x00050039,0x00000012,0x000001d8,0x00000015,0x000001d7,0x00050088,0x00000012, + 0x000001d9,0x000001d2,0x000001d8,0x000200fe,0x000001d9,0x00010038,0x00050036,0x00000012, + 0x0000007e,0x00000000,0x0000001c,0x00030037,0x0000001b,0x0000007d,0x000200f8,0x0000007f, + 0x0004003b,0x0000001b,0x000001e1,0x00000007,0x0004003b,0x0000001b,0x000001e2,0x00000007, + 0x0004003b,0x0000001b,0x000001e6,0x00000007,0x0004003b,0x0000001b,0x000001f0,0x00000007, + 0x0004003b,0x0000000d,0x000001f2,0x00000007,0x0004003b,0x0000000d,0x000001f3,0x00000007, + 0x00040039,0x00000006,0x000001dc,0x00000052,0x000300f7,0x000001e0,0x00000000,0x000900fb, + 0x000001dc,0x000001e0,0x00000000,0x000001dd,0x00000001,0x000001de,0x00000002,0x000001df, + 0x000200f8,0x000001dd,0x0004003d,0x00000012,0x000001e3,0x0000007d,0x0003003e,0x000001e2, + 0x000001e3,0x00050039,0x00000012,0x000001e4,0x00000043,0x000001e2,0x0003003e,0x000001e1, + 0x000001e4,0x000200f9,0x000001e0,0x000200f8,0x000001de,0x0004003d,0x00000012,0x000001e7, + 0x0000007d,0x0003003e,0x000001e6,0x000001e7,0x00050039,0x00000012,0x000001e8,0x00000040, + 0x000001e6,0x00040039,0x00000008,0x000001ea,0x00000057,0x00050088,0x00000008,0x000001eb, + 0x000001e9,0x000001ea,0x0005008e,0x00000012,0x000001ec,0x000001e8,0x000001eb,0x0003003e, + 0x000001e1,0x000001ec,0x000200f9,0x000001e0,0x000200f8,0x000001df,0x00040039,0x00000008, + 0x000001ee,0x00000055,0x00040039,0x00000008,0x000001ef,0x00000057,0x0004003d,0x00000012, + 0x000001f1,0x0000007d,0x0003003e,0x000001f0,0x000001f1,0x0003003e,0x000001f2,0x000001ee, + 0x0003003e,0x000001f3,0x000001ef,0x00070039,0x00000012,0x000001f4,0x0000007b,0x000001f0, + 0x000001f2,0x000001f3,0x0003003e,0x000001e1,0x000001f4,0x000200f9,0x000001e0,0x000200f8, + 0x000001e0,0x0004003d,0x00000012,0x000001f7,0x000001e1,0x000200fe,0x000001f7,0x00010038, + 0x00050036,0x00000008,0x00000081,0x00000000,0x00000070,0x00030037,0x0000001b,0x00000080, + 0x000200f8,0x00000082,0x0004003b,0x0000000d,0x000001fa,0x00000007,0x0004003b,0x0000001b, + 0x00000200,0x00000007,0x0004003b,0x0000001b,0x00000203,0x00000007,0x0004003b,0x0000001b, + 0x00000206,0x00000007,0x0004003b,0x0000001b,0x00000209,0x00000007,0x0004003b,0x0000001b, + 0x0000020c,0x00000007,0x0004003b,0x0000001b,0x0000020f,0x00000007,0x0003003e,0x000001fa, + 0x000000b1,0x00040039,0x00000006,0x000001fb,0x00000052,0x000300f7,0x000001ff,0x00000000, + 0x000900fb,0x000001fb,0x000001ff,0x00000000,0x000001fc,0x00000001,0x000001fd,0x00000002, + 0x000001fe,0x000200f8,0x000001fc,0x0004003d,0x00000012,0x00000201,0x00000080,0x0003003e, + 0x00000200,0x00000201,0x00050039,0x00000012,0x00000202,0x0000007e,0x00000200,0x0003003e, + 0x00000203,0x00000202,0x00050039,0x00000008,0x00000204,0x00000072,0x00000203,0x0003003e, + 0x000001fa,0x00000204,0x000200f9,0x000001ff,0x000200f8,0x000001fd,0x0004003d,0x00000012, + 0x00000207,0x00000080,0x0003003e,0x00000206,0x00000207,0x00050039,0x00000012,0x00000208, + 0x0000007e,0x00000206,0x0003003e,0x00000209,0x00000208,0x00050039,0x00000008,0x0000020a, + 0x00000075,0x00000209,0x0003003e,0x000001fa,0x0000020a,0x000200f9,0x000001ff,0x000200f8, + 0x000001fe,0x0004003d,0x00000012,0x0000020d,0x00000080,0x0003003e,0x0000020c,0x0000020d, + 0x00050039,0x00000012,0x0000020e,0x0000007e,0x0000020c,0x0003003e,0x0000020f,0x0000020e, + 0x00050039,0x00000008,0x00000210,0x00000072,0x0000020f,0x0003003e,0x000001fa,0x00000210, + 0x000200f9,0x000001ff,0x000200f8,0x000001ff,0x0004003d,0x00000008,0x00000213,0x000001fa, + 0x000200fe,0x00000213,0x00010038,0x00050036,0x00000086,0x0000008a,0x00000000,0x00000087, + 0x00030037,0x00000021,0x00000088,0x00030037,0x00000060,0x00000089,0x000200f8,0x0000008b, + 0x0004003b,0x00000021,0x00000216,0x00000007,0x0004003b,0x0000021e,0x0000021f,0x00000007, + 0x0004003b,0x00000021,0x00000225,0x00000007,0x0004003b,0x00000021,0x00000226,0x00000007, + 0x0004003d,0x00000020,0x00000217,0x00000088,0x0004003d,0x00000046,0x00000218,0x00000089, + 0x0004006f,0x00000020,0x00000219,0x00000218,0x00050085,0x00000020,0x0000021a,0x00000217, + 0x00000219,0x00050083,0x00000020,0x0000021d,0x0000021a,0x0000021c,0x0003003e,0x00000216, + 0x0000021d,0x0004003d,0x00000020,0x00000221,0x00000216,0x0006000c,0x00000020,0x00000222, + 0x00000001,0x00000008,0x00000221,0x0004006e,0x00000046,0x00000223,0x00000222,0x00050041, + 0x00000060,0x00000224,0x0000021f,0x00000220,0x0003003e,0x00000224,0x00000223,0x0004003d, + 0x00000020,0x00000227,0x00000216,0x0003003e,0x00000226,0x00000227,0x00050039,0x00000020, + 0x00000228,0x00000024,0x00000226,0x0003003e,0x00000225,0x00000228,0x00060041,0x00000060, + 0x0000022a,0x0000021f,0x0000018c,0x0000018c,0x0003003e,0x0000022a,0x00000229,0x00060041, + 0x00000060,0x0000022c,0x0000021f,0x0000018c,0x00000154,0x0003003e,0x0000022c,0x0000022b, + 0x00060041,0x00000060,0x0000022e,0x0000021f,0x0000018c,0x00000220,0x0003003e,0x0000022e, + 0x0000022d,0x00060041,0x00000060,0x00000231,0x0000021f,0x0000018c,0x0000022f,0x0003003e, + 0x00000231,0x00000230,0x00050041,0x0000000d,0x00000232,0x00000225,0x00000164,0x0004003d, + 0x00000008,0x00000233,0x00000232,0x00050083,0x00000008,0x00000234,0x000000bb,0x00000233, + 0x00050041,0x0000000d,0x00000235,0x00000225,0x0000016a,0x0004003d,0x00000008,0x00000236, + 0x00000235,0x00050083,0x00000008,0x00000237,0x000000bb,0x00000236,0x00050085,0x00000008, + 0x00000238,0x00000234,0x00000237,0x00060041,0x0000000d,0x00000239,0x0000021f,0x00000154, + 0x0000018c,0x0003003e,0x00000239,0x00000238,0x00050041,0x0000000d,0x0000023a,0x00000225, + 0x00000164,0x0004003d,0x00000008,0x0000023b,0x0000023a,0x00050041,0x0000000d,0x0000023c, + 0x00000225,0x0000016a,0x0004003d,0x00000008,0x0000023d,0x0000023c,0x00050083,0x00000008, + 0x0000023e,0x000000bb,0x0000023d,0x00050085,0x00000008,0x0000023f,0x0000023b,0x0000023e, + 0x00060041,0x0000000d,0x00000240,0x0000021f,0x00000154,0x00000154,0x0003003e,0x00000240, + 0x0000023f,0x00050041,0x0000000d,0x00000241,0x00000225,0x00000164,0x0004003d,0x00000008, + 0x00000242,0x00000241,0x00050083,0x00000008,0x00000243,0x000000bb,0x00000242,0x00050041, + 0x0000000d,0x00000244,0x00000225,0x0000016a,0x0004003d,0x00000008,0x00000245,0x00000244, + 0x00050085,0x00000008,0x00000246,0x00000243,0x00000245,0x00060041,0x0000000d,0x00000247, + 0x0000021f,0x00000154,0x00000220,0x0003003e,0x00000247,0x00000246,0x00050041,0x0000000d, + 0x00000248,0x00000225,0x00000164,0x0004003d,0x00000008,0x00000249,0x00000248,0x00050041, + 0x0000000d,0x0000024a,0x00000225,0x0000016a,0x0004003d,0x00000008,0x0000024b,0x0000024a, + 0x00050085,0x00000008,0x0000024c,0x00000249,0x0000024b,0x00060041,0x0000000d,0x0000024d, + 0x0000021f,0x00000154,0x0000022f,0x0003003e,0x0000024d,0x0000024c,0x0004003d,0x00000086, + 0x0000024e,0x0000021f,0x000200fe,0x0000024e,0x00010038,0x00050036,0x0000008c,0x00000090, + 0x00000000,0x0000008d,0x00030037,0x00000060,0x0000008e,0x00030037,0x00000060,0x0000008f, + 0x000200f8,0x00000091,0x0004003d,0x00000046,0x00000251,0x0000008e,0x0004007c,0x00000069, + 0x00000252,0x00000251,0x0004003d,0x00000046,0x00000253,0x0000008f,0x0004007c,0x00000069, + 0x00000254,0x00000253,0x000500b0,0x00000255,0x00000256,0x00000252,0x00000254,0x0004009b, + 0x0000008c,0x00000257,0x00000256,0x000200fe,0x00000257,0x00010038,0x00050036,0x0000008c, + 0x00000094,0x00000000,0x00000092,0x00030037,0x00000021,0x00000093,0x000200f8,0x00000095, + 0x00050041,0x0000000d,0x0000025a,0x00000093,0x00000164,0x0004003d,0x00000008,0x0000025b, + 0x0000025a,0x000500ba,0x0000008c,0x0000025c,0x0000025b,0x000000b1,0x000300f7,0x0000025e, + 0x00000000,0x000400fa,0x0000025c,0x0000025d,0x0000025e,0x000200f8,0x0000025d,0x00050041, + 0x0000000d,0x0000025f,0x00000093,0x00000164,0x0004003d,0x00000008,0x00000260,0x0000025f, + 0x000500b8,0x0000008c,0x00000261,0x00000260,0x000000bb,0x000200f9,0x0000025e,0x000200f8, + 0x0000025e,0x000700f5,0x0000008c,0x00000262,0x0000025c,0x00000095,0x00000261,0x0000025d, + 0x000300f7,0x00000264,0x00000000,0x000400fa,0x00000262,0x00000263,0x00000264,0x000200f8, + 0x00000263,0x00050041,0x0000000d,0x00000265,0x00000093,0x0000016a,0x0004003d,0x00000008, + 0x00000266,0x00000265,0x000500ba,0x0000008c,0x00000267,0x00000266,0x000000b1,0x000300f7, + 0x00000269,0x00000000,0x000400fa,0x00000267,0x00000268,0x00000269,0x000200f8,0x00000268, + 0x00050041,0x0000000d,0x0000026a,0x00000093,0x0000016a,0x0004003d,0x00000008,0x0000026b, + 0x0000026a,0x000500b8,0x0000008c,0x0000026c,0x0000026b,0x000000bb,0x000200f9,0x00000269, + 0x000200f8,0x00000269,0x000700f5,0x0000008c,0x0000026d,0x00000267,0x00000263,0x0000026c, + 0x00000268,0x000200f9,0x00000264,0x000200f8,0x00000264,0x000700f5,0x0000008c,0x0000026e, + 0x00000262,0x0000025e,0x0000026d,0x00000269,0x000200fe,0x0000026e,0x00010038,0x00050036, + 0x00000008,0x00000099,0x00000000,0x00000096,0x00030037,0x00000008,0x00000097,0x00030037, + 0x00000008,0x00000098,0x000200f8,0x0000009a,0x0004003b,0x0000000d,0x00000271,0x00000007, + 0x0004003b,0x0000000d,0x00000272,0x00000007,0x0004003b,0x0000000d,0x00000273,0x00000007, + 0x0004003b,0x0000000d,0x00000277,0x00000007,0x0004003b,0x0000000d,0x0000027a,0x00000007, + 0x0004003b,0x0000000d,0x0000027b,0x00000007,0x0003003e,0x00000272,0x00000097,0x0003003e, + 0x00000273,0x00000098,0x00060039,0x00000008,0x00000274,0x00000030,0x00000272,0x00000273, + 0x0003003e,0x00000271,0x00000274,0x0004003d,0x00000008,0x00000275,0x00000271,0x000500b7, + 0x0000008c,0x00000276,0x00000275,0x000000b1,0x000300f7,0x00000279,0x00000000,0x000400fa, + 0x00000276,0x00000278,0x0000027f,0x000200f8,0x00000278,0x0003003e,0x0000027a,0x00000097, + 0x0003003e,0x0000027b,0x00000098,0x00060039,0x00000008,0x0000027c,0x0000002c,0x0000027a, + 0x0000027b,0x0004003d,0x00000008,0x0000027d,0x00000271,0x00050088,0x00000008,0x0000027e, + 0x0000027c,0x0000027d,0x0003003e,0x00000277,0x0000027e,0x000200f9,0x00000279,0x000200f8, + 0x0000027f,0x0003003e,0x00000277,0x000000b1,0x000200f9,0x00000279,0x000200f8,0x00000279, + 0x0004003d,0x00000008,0x00000280,0x00000277,0x000200fe,0x00000280,0x00010038,0x00050036, + 0x00000069,0x000000a1,0x00000000,0x0000009c,0x00030037,0x0000009b,0x0000009d,0x00030037, + 0x00000007,0x0000009e,0x00030037,0x00000007,0x0000009f,0x00030037,0x00000021,0x000000a0, + 0x000200f8,0x000000a2,0x0004003b,0x00000007,0x00000283,0x00000007,0x0004003b,0x00000007, + 0x00000294,0x00000007,0x0004003b,0x0000000d,0x00000296,0x00000007,0x0004003b,0x00000007, + 0x0000029b,0x00000007,0x0004003b,0x0000000d,0x0000029d,0x00000007,0x0004003d,0x0000008c, + 0x00000284,0x0000009d,0x000600a9,0x00000006,0x00000285,0x00000284,0x0000016a,0x00000164, + 0x00050084,0x00000006,0x00000287,0x00000285,0x00000286,0x0004003d,0x00000006,0x00000288, + 0x0000009e,0x000500c7,0x00000006,0x0000028a,0x00000288,0x00000289,0x000500c4,0x00000006, + 0x0000028c,0x0000028a,0x0000028b,0x000500c5,0x00000006,0x0000028d,0x00000287,0x0000028c, + 0x0004003d,0x00000006,0x0000028e,0x0000009f,0x000500c7,0x00000006,0x00000290,0x0000028e, + 0x0000028f,0x000500c4,0x00000006,0x00000292,0x00000290,0x00000291,0x000500c5,0x00000006, + 0x00000293,0x0000028d,0x00000292,0x0003003e,0x00000283,0x00000293,0x0004003d,0x00000006, + 0x00000295,0x00000283,0x00050041,0x0000000d,0x00000297,0x000000a0,0x00000164,0x0004003d, + 0x00000008,0x00000298,0x00000297,0x0003003e,0x00000296,0x00000298,0x00050039,0x00000006, + 0x00000299,0x00000010,0x00000296,0x000500c5,0x00000006,0x0000029a,0x00000295,0x00000299, + 0x0003003e,0x00000294,0x0000029a,0x0004003d,0x00000006,0x0000029c,0x00000283,0x00050041, + 0x0000000d,0x0000029e,0x000000a0,0x0000016a,0x0004003d,0x00000008,0x0000029f,0x0000029e, + 0x0003003e,0x0000029d,0x0000029f,0x00050039,0x00000006,0x000002a0,0x00000010,0x0000029d, + 0x000500c5,0x00000006,0x000002a1,0x0000029c,0x000002a0,0x0003003e,0x0000029b,0x000002a1, + 0x0004003d,0x00000006,0x000002a2,0x00000294,0x0004003d,0x00000006,0x000002a3,0x0000029b, + 0x00050050,0x00000069,0x000002a4,0x000002a2,0x000002a3,0x000200fe,0x000002a4,0x00010038, + 0x00050036,0x00000002,0x000000a6,0x00000000,0x000000a3,0x00030037,0x0000006a,0x000000a4, + 0x00030037,0x00000021,0x000000a5,0x000200f8,0x000000a7,0x0004003b,0x00000021,0x000002a7, + 0x00000007,0x0004003b,0x00000021,0x000002af,0x00000007,0x0004003b,0x0000001b,0x000002b2, + 0x00000007,0x0004003b,0x00000021,0x000002b6,0x00000007,0x0004003b,0x0000001b,0x000002b8, + 0x00000007,0x0004003b,0x00000021,0x000002b9,0x00000007,0x0004003b,0x0000000d,0x000002bc, + 0x00000007,0x0004003b,0x0000001b,0x000002be,0x00000007,0x0004003b,0x0000000d,0x000002c2, + 0x00000007,0x0004003b,0x0000001b,0x000002c3,0x00000007,0x0004003b,0x0000000d,0x000002c7, + 0x00000007,0x0004003b,0x00000007,0x000002cd,0x00000007,0x0004003b,0x0000000d,0x000002d8, + 0x00000007,0x0004003b,0x00000007,0x000002e2,0x00000007,0x0004003b,0x0000000d,0x000002e6, + 0x00000007,0x0004003b,0x0000000d,0x000002e7,0x00000007,0x0004003b,0x0000000d,0x000002eb, + 0x00000007,0x0004003b,0x00000021,0x000002f1,0x00000007,0x0004003b,0x0000006a,0x000002f5, + 0x00000007,0x0004003b,0x0000009b,0x000002f7,0x00000007,0x0004003b,0x00000007,0x000002f8, + 0x00000007,0x0004003b,0x00000007,0x000002fa,0x00000007,0x0004003b,0x00000021,0x000002fc, + 0x00000007,0x0004003b,0x0000021e,0x000002ff,0x00000007,0x0004003b,0x00000021,0x00000304, + 0x00000007,0x0004003b,0x00000060,0x00000305,0x00000007,0x0004003b,0x00000307,0x00000308, + 0x00000007,0x0004003b,0x00000060,0x00000311,0x00000007,0x0004003b,0x00000060,0x00000315, + 0x00000007,0x0004003b,0x00000060,0x0000031b,0x00000007,0x0004003b,0x00000060,0x0000031d, + 0x00000007,0x0004003b,0x00000060,0x00000321,0x00000007,0x0004003b,0x0000006a,0x00000323, + 0x00000007,0x0004003d,0x00000069,0x000002a8,0x000000a4,0x00040070,0x00000020,0x000002a9, + 0x000002a8,0x00050050,0x00000020,0x000002aa,0x0000021b,0x0000021b,0x00050081,0x00000020, + 0x000002ab,0x000002a9,0x000002aa,0x00040039,0x00000046,0x000002ac,0x0000004c,0x0004006f, + 0x00000020,0x000002ad,0x000002ac,0x00050088,0x00000020,0x000002ae,0x000002ab,0x000002ad, + 0x0003003e,0x000002a7,0x000002ae,0x0004003d,0x00000020,0x000002b0,0x000000a5,0x0005008e, + 0x00000020,0x000002b1,0x000002b0,0x0000021b,0x0003003e,0x000002af,0x000002b1,0x0004003d, + 0x00000020,0x000002b3,0x000002a7,0x0004003d,0x00000020,0x000002b4,0x000000a5,0x00050081, + 0x00000020,0x000002b5,0x000002b3,0x000002b4,0x0003003e,0x000002b6,0x000002b5,0x00050039, + 0x00000012,0x000002b7,0x0000005b,0x000002b6,0x0003003e,0x000002b2,0x000002b7,0x0004003d, + 0x00000020,0x000002ba,0x000002a7,0x0003003e,0x000002b9,0x000002ba,0x00050039,0x00000012, + 0x000002bb,0x0000005e,0x000002b9,0x0003003e,0x000002b8,0x000002bb,0x0004003d,0x00000012, + 0x000002bf,0x000002b2,0x0003003e,0x000002be,0x000002bf,0x00050039,0x00000008,0x000002c0, + 0x00000081,0x000002be,0x00050081,0x00000008,0x000002c1,0x000002bd,0x000002c0,0x0003003e, + 0x000002bc,0x000002c1,0x0004003d,0x00000012,0x000002c4,0x000002b8,0x0003003e,0x000002c3, + 0x000002c4,0x00050039,0x00000008,0x000002c5,0x00000081,0x000002c3,0x00050081,0x00000008, + 0x000002c6,0x000002bd,0x000002c5,0x0003003e,0x000002c2,0x000002c6,0x0004003d,0x00000020, + 0x000002c8,0x000000a5,0x00040039,0x00000046,0x000002c9,0x00000048,0x0004006f,0x00000020, + 0x000002ca,0x000002c9,0x00050085,0x00000020,0x000002cb,0x000002c8,0x000002ca,0x0006000c, + 0x00000008,0x000002cc,0x00000001,0x00000042,0x000002cb,0x0003003e,0x000002c7,0x000002cc, + 0x0004003d,0x00000008,0x000002ce,0x000002c7,0x000500ba,0x0000008c,0x000002cf,0x000002ce, + 0x000000bb,0x000600a9,0x00000006,0x000002d0,0x000002cf,0x0000016a,0x00000164,0x0004003d, + 0x00000008,0x000002d1,0x000002c7,0x00040039,0x00000046,0x000002d2,0x00000048,0x0004006f, + 0x00000020,0x000002d3,0x000002d2,0x0005008e,0x00000020,0x000002d5,0x000002d3,0x000002d4, + 0x0006000c,0x00000008,0x000002d6,0x00000001,0x00000042,0x000002d5,0x00050088,0x00000008, + 0x000002d7,0x000002d1,0x000002d6,0x0003003e,0x000002d8,0x000002d7,0x00050039,0x00000008, + 0x000002d9,0x00000019,0x000002d8,0x00050085,0x00000008,0x000002db,0x000002d9,0x000002da, + 0x0004006d,0x00000006,0x000002dc,0x000002db,0x00050084,0x00000006,0x000002dd,0x000002d0, + 0x000002dc,0x0003003e,0x000002cd,0x000002dd,0x0004003d,0x00000006,0x000002de,0x000002cd, + 0x000500ac,0x0000008c,0x000002df,0x000002de,0x00000164,0x000300f7,0x000002e1,0x00000000, + 0x000400fa,0x000002df,0x000002e0,0x000002e1,0x000200f8,0x000002e0,0x0004003d,0x00000008, + 0x000002e3,0x000002bc,0x0004003d,0x00000008,0x000002e4,0x000002c2,0x00060039,0x00000008, + 0x000002e5,0x00000099,0x000002e3,0x000002e4,0x0003003e,0x000002e6,0x000002e5,0x0003003e, + 0x000002e7,0x000000bb,0x00060039,0x00000008,0x000002e8,0x00000034,0x000002e6,0x000002e7, + 0x00050085,0x00000008,0x000002ea,0x000002e8,0x000002e9,0x0003003e,0x000002eb,0x000002ea, + 0x00050039,0x00000008,0x000002ec,0x00000027,0x000002eb,0x0004006d,0x00000006,0x000002ed, + 0x000002ec,0x0004003d,0x00000020,0x000002ee,0x000002a7,0x0004003d,0x00000020,0x000002ef, + 0x000000a5,0x00050081,0x00000020,0x000002f0,0x000002ee,0x000002ef,0x0003003e,0x000002f1, + 0x000002f0,0x00050039,0x0000008c,0x000002f2,0x00000094,0x000002f1,0x000600a9,0x00000006, + 0x000002f3,0x000002f2,0x0000016a,0x00000164,0x00050084,0x00000006,0x000002f4,0x000002ed, + 0x000002f3,0x0003003e,0x000002e2,0x000002f4,0x0003003e,0x000002f7,0x000002f6,0x0004003d, + 0x00000006,0x000002f9,0x000002cd,0x0003003e,0x000002f8,0x000002f9,0x0004003d,0x00000006, + 0x000002fb,0x000002e2,0x0003003e,0x000002fa,0x000002fb,0x0004003d,0x00000020,0x000002fd, + 0x000002af,0x0003003e,0x000002fc,0x000002fd,0x00080039,0x00000069,0x000002fe,0x000000a1, + 0x000002f7,0x000002f8,0x000002fa,0x000002fc,0x0003003e,0x000002f5,0x000002fe,0x0004003d, + 0x00000020,0x00000300,0x000002a7,0x0004003d,0x00000020,0x00000301,0x000002af,0x00050081, + 0x00000020,0x00000302,0x00000300,0x00000301,0x00040039,0x00000046,0x00000303,0x0000004c, + 0x0003003e,0x00000304,0x00000302,0x0003003e,0x00000305,0x00000303,0x00060039,0x00000086, + 0x00000306,0x0000008a,0x00000304,0x00000305,0x0003003e,0x000002ff,0x00000306,0x0003003e, + 0x00000308,0x0000018c,0x000200f9,0x00000309,0x000200f8,0x00000309,0x000400f6,0x0000030b, + 0x0000030c,0x00000000,0x000200f9,0x0000030d,0x000200f8,0x0000030d,0x0004003d,0x00000045, + 0x0000030e,0x00000308,0x000500b1,0x0000008c,0x00000310,0x0000030e,0x0000030f,0x000400fa, + 0x00000310,0x0000030a,0x0000030b,0x000200f8,0x0000030a,0x0004003d,0x00000045,0x00000312, + 0x00000308,0x00060041,0x00000060,0x00000313,0x000002ff,0x0000018c,0x00000312,0x0004003d, + 0x00000046,0x00000314,0x00000313,0x0003003e,0x00000311,0x00000314,0x00050041,0x00000060, + 0x00000316,0x000002ff,0x00000220,0x0004003d,0x00000046,0x00000317,0x00000316,0x0004003d, + 0x00000046,0x00000318,0x00000311,0x00050080,0x00000046,0x00000319,0x00000317,0x00000318, + 0x0003003e,0x00000315,0x00000319,0x00040039,0x00000046,0x0000031a,0x0000004c,0x0004003d, + 0x00000046,0x0000031c,0x00000315,0x0003003e,0x0000031b,0x0000031c,0x0003003e,0x0000031d, + 0x0000031a,0x00060039,0x0000008c,0x0000031e,0x00000090,0x0000031b,0x0000031d,0x000300f7, + 0x00000320,0x00000000,0x000400fa,0x0000031e,0x0000031f,0x00000320,0x000200f8,0x0000031f, + 0x0004003d,0x00000046,0x00000322,0x00000315,0x0003003e,0x00000321,0x00000322,0x0004003d, + 0x00000069,0x00000324,0x000002f5,0x0003003e,0x00000323,0x00000324,0x00060039,0x00000002, + 0x00000325,0x0000006e,0x00000321,0x00000323,0x000200f9,0x00000320,0x000200f8,0x00000320, + 0x000200f9,0x0000030c,0x000200f8,0x0000030c,0x0004003d,0x00000045,0x00000326,0x00000308, + 0x00050080,0x00000045,0x00000327,0x00000326,0x00000154,0x0003003e,0x00000308,0x00000327, + 0x000200f9,0x00000309,0x000200f8,0x0000030b,0x000200f9,0x000002e1,0x000200f8,0x000002e1, + 0x000100fd,0x00010038,0x00050036,0x00000002,0x000000aa,0x00000000,0x000000a8,0x00030037, + 0x00000060,0x000000a9,0x000200f8,0x000000ab,0x0004003b,0x00000021,0x00000328,0x00000007, + 0x0004003b,0x00000021,0x0000032a,0x00000007,0x0004003b,0x00000307,0x0000032b,0x00000007, + 0x0004003b,0x0000000d,0x0000032c,0x00000007,0x0004003b,0x00000307,0x0000032d,0x00000007, + 0x0004003b,0x00000307,0x00000338,0x00000007,0x0004003b,0x00000060,0x00000343,0x00000007, + 0x0004003b,0x00000021,0x00000349,0x00000007,0x0004003b,0x00000060,0x0000034a,0x00000007, + 0x0004003b,0x0000000d,0x0000034d,0x00000007,0x0004003b,0x00000060,0x0000034e,0x00000007, + 0x0004003b,0x0000000d,0x00000351,0x00000007,0x0004003b,0x0000000d,0x00000352,0x00000007, + 0x0004003b,0x0000000d,0x00000354,0x00000007,0x0004003b,0x0000000d,0x0000035a,0x00000007, + 0x0004003b,0x0000000d,0x0000035e,0x00000007,0x0004003b,0x0000000d,0x0000035f,0x00000007, + 0x0004003b,0x0000000d,0x00000365,0x00000007,0x0004003b,0x00000307,0x00000377,0x00000007, + 0x0004003b,0x00000307,0x00000382,0x00000007,0x0004003b,0x00000060,0x0000038d,0x00000007, + 0x0004003b,0x00000021,0x00000393,0x00000007,0x0004003b,0x00000060,0x00000394,0x00000007, + 0x0004003b,0x0000000d,0x00000397,0x00000007,0x0004003b,0x00000060,0x00000398,0x00000007, + 0x0004003b,0x0000000d,0x0000039b,0x00000007,0x0004003b,0x0000000d,0x0000039c,0x00000007, + 0x0004003b,0x0000000d,0x0000039e,0x00000007,0x0004003b,0x0000000d,0x000003a4,0x00000007, + 0x0004003b,0x0000000d,0x000003a7,0x00000007,0x0004003b,0x0000000d,0x000003a8,0x00000007, + 0x0004003b,0x0000000d,0x000003ae,0x00000007,0x0004003b,0x0000000d,0x000003b3,0x00000007, + 0x0004003b,0x0000000d,0x000003b4,0x00000007,0x0004003b,0x0000000d,0x000003b6,0x00000007, + 0x0004003b,0x0000000d,0x000003b7,0x00000007,0x0004003b,0x0000006a,0x000003d1,0x00000007, + 0x0004003b,0x00000021,0x000003d2,0x00000007,0x0003003e,0x00000328,0x00000329,0x0003003e, + 0x0000032a,0x00000329,0x0003003e,0x0000032b,0x00000154,0x0003003e,0x0000032c,0x000000b1, + 0x0004003d,0x00000045,0x0000032e,0x0000032b,0x0004007e,0x00000045,0x0000032f,0x0000032e, + 0x0003003e,0x0000032d,0x0000032f,0x000200f9,0x00000330,0x000200f8,0x00000330,0x000400f6, + 0x00000332,0x00000333,0x00000000,0x000200f9,0x00000334,0x000200f8,0x00000334,0x0004003d, + 0x00000045,0x00000335,0x0000032d,0x0004003d,0x00000045,0x00000336,0x0000032b,0x000500b3, + 0x0000008c,0x00000337,0x00000335,0x00000336,0x000400fa,0x00000337,0x00000331,0x00000332, + 0x000200f8,0x00000331,0x0004003d,0x00000045,0x00000339,0x0000032b,0x0004007e,0x00000045, + 0x0000033a,0x00000339,0x0003003e,0x00000338,0x0000033a,0x000200f9,0x0000033b,0x000200f8, + 0x0000033b,0x000400f6,0x0000033d,0x0000033e,0x00000000,0x000200f9,0x0000033f,0x000200f8, + 0x0000033f,0x0004003d,0x00000045,0x00000340,0x00000338,0x0004003d,0x00000045,0x00000341, + 0x0000032b,0x000500b3,0x0000008c,0x00000342,0x00000340,0x00000341,0x000400fa,0x00000342, + 0x0000033c,0x0000033d,0x000200f8,0x0000033c,0x0004003d,0x00000046,0x00000344,0x000000a9, + 0x0004003d,0x00000045,0x00000345,0x00000338,0x0004003d,0x00000045,0x00000346,0x0000032d, + 0x00050050,0x00000046,0x00000347,0x00000345,0x00000346,0x00050080,0x00000046,0x00000348, + 0x00000344,0x00000347,0x0003003e,0x00000343,0x00000348,0x0004003d,0x00000046,0x0000034b, + 0x00000343,0x0003003e,0x0000034a,0x0000034b,0x00050039,0x00000020,0x0000034c,0x00000063, + 0x0000034a,0x0003003e,0x00000349,0x0000034c,0x0004003d,0x00000046,0x0000034f,0x00000343, + 0x0003003e,0x0000034e,0x0000034f,0x00050039,0x00000008,0x00000350,0x00000067,0x0000034e, + 0x0003003e,0x00000351,0x000002bd,0x0003003e,0x00000352,0x00000350,0x00060039,0x00000008, + 0x00000353,0x00000030,0x00000351,0x00000352,0x0003003e,0x0000034d,0x00000353,0x0004003d, + 0x00000020,0x00000355,0x00000349,0x00040039,0x00000046,0x00000356,0x00000048,0x0004006f, + 0x00000020,0x00000357,0x00000356,0x00050085,0x00000020,0x00000358,0x00000355,0x00000357, + 0x0006000c,0x00000008,0x00000359,0x00000001,0x00000042,0x00000358,0x0003003e,0x00000354, + 0x00000359,0x0004003d,0x00000008,0x0000035c,0x00000354,0x00050083,0x00000008,0x0000035d, + 0x0000035b,0x0000035c,0x0003003e,0x0000035e,0x000000b1,0x0003003e,0x0000035f,0x0000035d, + 0x00060039,0x00000008,0x00000360,0x00000030,0x0000035e,0x0000035f,0x0004003d,0x00000008, + 0x00000361,0x00000354,0x000500ba,0x0000008c,0x00000362,0x00000361,0x000000bb,0x000600a9, + 0x00000008,0x00000363,0x00000362,0x000000bb,0x000000b1,0x00050085,0x00000008,0x00000364, + 0x00000360,0x00000363,0x0003003e,0x0000035a,0x00000364,0x0004003d,0x00000008,0x00000366, + 0x0000035a,0x0003003e,0x00000365,0x00000366,0x0004003d,0x00000020,0x00000367,0x00000349, + 0x0004003d,0x00000008,0x00000368,0x00000365,0x0005008e,0x00000020,0x00000369,0x00000367, + 0x00000368,0x0004003d,0x00000020,0x0000036a,0x0000032a,0x00050081,0x00000020,0x0000036b, + 0x0000036a,0x00000369,0x0003003e,0x0000032a,0x0000036b,0x0004003d,0x00000008,0x0000036c, + 0x00000365,0x0004003d,0x00000008,0x0000036d,0x0000032c,0x00050081,0x00000008,0x0000036e, + 0x0000036d,0x0000036c,0x0003003e,0x0000032c,0x0000036e,0x000200f9,0x0000033e,0x000200f8, + 0x0000033e,0x0004003d,0x00000045,0x0000036f,0x00000338,0x00050080,0x00000045,0x00000370, + 0x0000036f,0x00000154,0x0003003e,0x00000338,0x00000370,0x000200f9,0x0000033b,0x000200f8, + 0x0000033d,0x000200f9,0x00000333,0x000200f8,0x00000333,0x0004003d,0x00000045,0x00000371, + 0x0000032d,0x00050080,0x00000045,0x00000372,0x00000371,0x00000154,0x0003003e,0x0000032d, + 0x00000372,0x000200f9,0x00000330,0x000200f8,0x00000332,0x0004003d,0x00000008,0x00000373, + 0x0000032c,0x0004003d,0x00000020,0x00000374,0x0000032a,0x00050050,0x00000020,0x00000375, + 0x00000373,0x00000373,0x00050088,0x00000020,0x00000376,0x00000374,0x00000375,0x0003003e, + 0x0000032a,0x00000376,0x0003003e,0x0000032c,0x000000b1,0x0004003d,0x00000045,0x00000378, + 0x0000032b,0x0004007e,0x00000045,0x00000379,0x00000378,0x0003003e,0x00000377,0x00000379, + 0x000200f9,0x0000037a,0x000200f8,0x0000037a,0x000400f6,0x0000037c,0x0000037d,0x00000000, + 0x000200f9,0x0000037e,0x000200f8,0x0000037e,0x0004003d,0x00000045,0x0000037f,0x00000377, + 0x0004003d,0x00000045,0x00000380,0x0000032b,0x000500b3,0x0000008c,0x00000381,0x0000037f, + 0x00000380,0x000400fa,0x00000381,0x0000037b,0x0000037c,0x000200f8,0x0000037b,0x0004003d, + 0x00000045,0x00000383,0x0000032b,0x0004007e,0x00000045,0x00000384,0x00000383,0x0003003e, + 0x00000382,0x00000384,0x000200f9,0x00000385,0x000200f8,0x00000385,0x000400f6,0x00000387, + 0x00000388,0x00000000,0x000200f9,0x00000389,0x000200f8,0x00000389,0x0004003d,0x00000045, + 0x0000038a,0x00000382,0x0004003d,0x00000045,0x0000038b,0x0000032b,0x000500b3,0x0000008c, + 0x0000038c,0x0000038a,0x0000038b,0x000400fa,0x0000038c,0x00000386,0x00000387,0x000200f8, + 0x00000386,0x0004003d,0x00000046,0x0000038e,0x000000a9,0x0004003d,0x00000045,0x0000038f, + 0x00000382,0x0004003d,0x00000045,0x00000390,0x00000377,0x00050050,0x00000046,0x00000391, + 0x0000038f,0x00000390,0x00050080,0x00000046,0x00000392,0x0000038e,0x00000391,0x0003003e, + 0x0000038d,0x00000392,0x0004003d,0x00000046,0x00000395,0x0000038d,0x0003003e,0x00000394, + 0x00000395,0x00050039,0x00000020,0x00000396,0x00000063,0x00000394,0x0003003e,0x00000393, + 0x00000396,0x0004003d,0x00000046,0x00000399,0x0000038d,0x0003003e,0x00000398,0x00000399, + 0x00050039,0x00000008,0x0000039a,0x00000067,0x00000398,0x0003003e,0x0000039b,0x000002bd, + 0x0003003e,0x0000039c,0x0000039a,0x00060039,0x00000008,0x0000039d,0x00000030,0x0000039b, + 0x0000039c,0x0003003e,0x00000397,0x0000039d,0x0004003d,0x00000020,0x0000039f,0x00000393, + 0x00040039,0x00000046,0x000003a0,0x00000048,0x0004006f,0x00000020,0x000003a1,0x000003a0, + 0x00050085,0x00000020,0x000003a2,0x0000039f,0x000003a1,0x0006000c,0x00000008,0x000003a3, + 0x00000001,0x00000042,0x000003a2,0x0003003e,0x0000039e,0x000003a3,0x0004003d,0x00000008, + 0x000003a5,0x0000039e,0x00050083,0x00000008,0x000003a6,0x0000035b,0x000003a5,0x0003003e, + 0x000003a7,0x000000b1,0x0003003e,0x000003a8,0x000003a6,0x00060039,0x00000008,0x000003a9, + 0x00000030,0x000003a7,0x000003a8,0x0004003d,0x00000008,0x000003aa,0x0000039e,0x000500ba, + 0x0000008c,0x000003ab,0x000003aa,0x000000bb,0x000600a9,0x00000008,0x000003ac,0x000003ab, + 0x000000bb,0x000000b1,0x00050085,0x00000008,0x000003ad,0x000003a9,0x000003ac,0x0003003e, + 0x000003a4,0x000003ad,0x0004003d,0x00000020,0x000003af,0x0000032a,0x0004003d,0x00000020, + 0x000003b0,0x00000393,0x00050094,0x00000008,0x000003b1,0x000003af,0x000003b0,0x0003003e, + 0x000003b3,0x000003b1,0x0003003e,0x000003b4,0x000003b2,0x00060039,0x00000008,0x000003b5, + 0x00000034,0x000003b3,0x000003b4,0x0003003e,0x000003b6,0x000000b1,0x0003003e,0x000003b7, + 0x000003b5,0x00060039,0x00000008,0x000003b8,0x00000030,0x000003b6,0x000003b7,0x0004003d, + 0x00000008,0x000003b9,0x000003a4,0x00050085,0x00000008,0x000003ba,0x000003b8,0x000003b9, + 0x0003003e,0x000003ae,0x000003ba,0x0004003d,0x00000020,0x000003bb,0x00000393,0x0004003d, + 0x00000008,0x000003bc,0x000003ae,0x0005008e,0x00000020,0x000003bd,0x000003bb,0x000003bc, + 0x0004003d,0x00000020,0x000003be,0x00000328,0x00050081,0x00000020,0x000003bf,0x000003be, + 0x000003bd,0x0003003e,0x00000328,0x000003bf,0x0004003d,0x00000008,0x000003c0,0x000003ae, + 0x0004003d,0x00000008,0x000003c1,0x0000032c,0x00050081,0x00000008,0x000003c2,0x000003c1, + 0x000003c0,0x0003003e,0x0000032c,0x000003c2,0x000200f9,0x00000388,0x000200f8,0x00000388, + 0x0004003d,0x00000045,0x000003c3,0x00000382,0x00050080,0x00000045,0x000003c4,0x000003c3, + 0x00000154,0x0003003e,0x00000382,0x000003c4,0x000200f9,0x00000385,0x000200f8,0x00000387, + 0x000200f9,0x0000037d,0x000200f8,0x0000037d,0x0004003d,0x00000045,0x000003c5,0x00000377, + 0x00050080,0x00000045,0x000003c6,0x000003c5,0x00000154,0x0003003e,0x00000377,0x000003c6, + 0x000200f9,0x0000037a,0x000200f8,0x0000037c,0x0004003d,0x00000008,0x000003c7,0x0000032c, + 0x000500ba,0x0000008c,0x000003c8,0x000003c7,0x000002bd,0x000300f7,0x000003ca,0x00000000, + 0x000400fa,0x000003c8,0x000003c9,0x000003ca,0x000200f8,0x000003c9,0x0004003d,0x00000008, + 0x000003cb,0x0000032c,0x0004003d,0x00000020,0x000003cc,0x00000328,0x00050050,0x00000020, + 0x000003cd,0x000003cb,0x000003cb,0x00050088,0x00000020,0x000003ce,0x000003cc,0x000003cd, + 0x0003003e,0x00000328,0x000003ce,0x000200f9,0x000003ca,0x000200f8,0x000003ca,0x0004003d, + 0x00000046,0x000003cf,0x000000a9,0x0004007c,0x00000069,0x000003d0,0x000003cf,0x0003003e, + 0x000003d1,0x000003d0,0x0004003d,0x00000020,0x000003d3,0x00000328,0x0003003e,0x000003d2, + 0x000003d3,0x00060039,0x00000002,0x000003d4,0x000000a6,0x000003d1,0x000003d2,0x000100fd, + 0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_fi_reconstruct_and_dilate_comp_spv.h b/gpu/vk/shaders/fsr3_fi_reconstruct_and_dilate_comp_spv.h new file mode 100644 index 000000000..627b7dd9c --- /dev/null +++ b/gpu/vk/shaders/fsr3_fi_reconstruct_and_dilate_comp_spv.h @@ -0,0 +1,426 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_FI_RECONSTRUCT_AND_DILATE_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x000001e3,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000031,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e, + 0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x000001cb, + 0x00060010,0x00000004,0x00000011,0x00000008,0x00000008,0x00000001,0x00030003,0x00000002, + 0x000001c2,0x000b0004,0x455f4c47,0x735f5458,0x6c706d61,0x656c7265,0x745f7373,0x75747865, + 0x665f6572,0x74636e75,0x736e6f69,0x00000000,0x000b0004,0x455f4c47,0x735f5458,0x65646168, + 0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004, + 0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365, + 0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572, + 0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000b,0x41786666, + 0x6e495573,0x28323374,0x003b3166,0x00030005,0x0000000a,0x00000078,0x00060005,0x00000011, + 0x46786666,0x74636172,0x32667628,0x0000003b,0x00030005,0x00000010,0x00000078,0x00040005, + 0x00000014,0x7474694a,0x00287265,0x00070005,0x00000016,0x69746f4d,0x65566e6f,0x726f7463, + 0x6c616353,0x00002865,0x00050005,0x0000001b,0x646e6552,0x69537265,0x0028657a,0x00060005, + 0x0000001d,0x70736944,0x5379616c,0x28657a69,0x00000000,0x00070005,0x00000022,0x64616f4c, + 0x75706e49,0x70654474,0x76286874,0x003b3269,0x00040005,0x00000021,0x50785069,0x0000736f, + 0x00090005,0x00000026,0x64616f4c,0x75706e49,0x746f4d74,0x566e6f69,0x6f746365,0x69762872, + 0x00003b32,0x00090005,0x00000025,0x44785069,0x74616c69,0x6f4d6465,0x6e6f6974,0x74636556, + 0x6f50726f,0x00000073,0x000b0005,0x0000002b,0x726f7453,0x6c694465,0x64657461,0x69746f4d, + 0x65566e6f,0x726f7463,0x69762873,0x66763b32,0x00003b32,0x00040005,0x00000029,0x50785069, + 0x0000736f,0x00030005,0x0000002a,0x006c6176,0x00090005,0x00000030,0x726f7453,0x6c694465, + 0x64657461,0x74706544,0x69762868,0x31663b32,0x0000003b,0x00040005,0x0000002e,0x50785069, + 0x0000736f,0x00030005,0x0000002f,0x006c6176,0x000e0005,0x00000034,0x61647055,0x65526574, + 0x736e6f63,0x63757274,0x44646574,0x68747065,0x76657250,0x73756f69,0x6d617246,0x69762865, + 0x31663b32,0x0000003b,0x00050005,0x00000032,0x53785069,0x6c706d61,0x00000065,0x00040005, + 0x00000033,0x70654466,0x00006874,0x00080005,0x00000039,0x696c6942,0x7261656e,0x706d6153, + 0x676e696c,0x61746144,0x00000000,0x00060006,0x00000039,0x00000000,0x66664f69,0x73746573, + 0x00000000,0x00060006,0x00000039,0x00000001,0x69655766,0x73746867,0x00000000,0x00060006, + 0x00000039,0x00000002,0x73614269,0x736f5065,0x00000000,0x000b0005,0x0000003d,0x42746547, + 0x6e696c69,0x53726165,0x6c706d61,0x44676e69,0x28617461,0x3b326676,0x3b326976,0x00000000, + 0x00030005,0x0000003b,0x00765566,0x00040005,0x0000003c,0x7a695369,0x00000065,0x00070005, + 0x00000043,0x6e4f7349,0x65726353,0x76286e65,0x763b3269,0x003b3269,0x00030005,0x00000041, + 0x00736f70,0x00040005,0x00000042,0x657a6973,0x00000000,0x00090005,0x00000047,0x706d6f43, + 0x48657475,0x736f5072,0x6d6f7246,0x6f50724c,0x69762873,0x00003b32,0x00050005,0x00000046, + 0x4c785069,0x736f5072,0x00000000,0x000c0005,0x0000004e,0x6f636552,0x7274736e,0x50746375, + 0x44766572,0x68747065,0x32697628,0x3b31663b,0x3b326676,0x3b326976,0x00000000,0x00040005, + 0x0000004a,0x50785069,0x0000736f,0x00040005,0x0000004b,0x70654466,0x00006874,0x00060005, + 0x0000004c,0x746f4d66,0x566e6f69,0x6f746365,0x00000072,0x00060005,0x0000004d,0x44785069, + 0x68747065,0x657a6953,0x00000000,0x000b0005,0x00000055,0x646e6946,0x7261654e,0x44747365, + 0x68747065,0x32697628,0x3269763b,0x3b31663b,0x3b326976,0x00000000,0x00040005,0x00000051, + 0x50785069,0x0000736f,0x00040005,0x00000052,0x53785069,0x00657a69,0x00060005,0x00000053, + 0x61654e66,0x74736572,0x74706544,0x00000068,0x00070005,0x00000054,0x61654e66,0x74736572, + 0x74706544,0x6f6f4368,0x00006472,0x00090005,0x00000059,0x6f636552,0x7274736e,0x41746375, + 0x6944646e,0x6574616c,0x32697628,0x0000003b,0x00050005,0x00000058,0x4c785069,0x736f5072, + 0x00000000,0x00040005,0x00000065,0x49466263,0x0000745f,0x00060006,0x00000065,0x00000000, + 0x646e6572,0x69537265,0x0000657a,0x00060006,0x00000065,0x00000001,0x70736964,0x5379616c, + 0x00657a69,0x00070006,0x00000065,0x00000002,0x70736964,0x5379616c,0x52657a69,0x00007063, + 0x00060006,0x00000065,0x00000003,0x656d6163,0x654e6172,0x00007261,0x00060006,0x00000065, + 0x00000004,0x656d6163,0x61466172,0x00000072,0x00080006,0x00000065,0x00000005,0x63737075, + 0x72656c61,0x67726154,0x69537465,0x0000657a,0x00050006,0x00000065,0x00000006,0x65646f4d, + 0x00000000,0x00050006,0x00000065,0x00000007,0x65736572,0x00000074,0x00080006,0x00000065, + 0x00000008,0x76654466,0x54656369,0x6569566f,0x70654477,0x00006874,0x00060006,0x00000065, + 0x00000009,0x746c6564,0x6d695461,0x00000065,0x00090006,0x00000065,0x0000000a,0x4c445548, + 0x41737365,0x63617474,0x46646568,0x6f746361,0x00000072,0x00080006,0x00000065,0x0000000b, + 0x74736964,0x6974726f,0x69466e6f,0x53646c65,0x00657a69,0x00080006,0x00000065,0x0000000c, + 0x6974706f,0x466c6163,0x53776f6c,0x656c6163,0x00000000,0x00090006,0x00000065,0x0000000d, + 0x6974706f,0x466c6163,0x42776f6c,0x6b636f6c,0x657a6953,0x00000000,0x00070006,0x00000065, + 0x0000000e,0x70736964,0x68637461,0x67616c46,0x00000073,0x00070006,0x00000065,0x0000000f, + 0x5278616d,0x65646e65,0x7a695372,0x00000065,0x00090006,0x00000065,0x00000010,0x6974706f, + 0x466c6163,0x48776f6c,0x52666c61,0x6f4d7365,0x00006564,0x00070006,0x00000065,0x00000011, + 0x496d754e,0x6174736e,0x7365636e,0x00000000,0x00090006,0x00000065,0x00000012,0x65746e69, + 0x6c6f7072,0x6f697461,0x6365526e,0x73614274,0x00000065,0x00090006,0x00000065,0x00000013, + 0x65746e69,0x6c6f7072,0x6f697461,0x6365526e,0x7a695374,0x00000065,0x00070006,0x00000065, + 0x00000014,0x75626564,0x72614267,0x6f6c6f43,0x00000072,0x000a0006,0x00000065,0x00000015, + 0x6b636162,0x66667542,0x72547265,0x66736e61,0x75467265,0x6974636e,0x00006e6f,0x00070006, + 0x00000065,0x00000016,0x4d6e696d,0x754c7861,0x616e696d,0x0065636e,0x00060006,0x00000065, + 0x00000017,0x6e615466,0x666c6148,0x00564f46,0x00050006,0x00000065,0x00000018,0x6461705f, + 0x00000031,0x00050006,0x00000065,0x00000019,0x74694a66,0x00726574,0x00080006,0x00000065, + 0x0000001a,0x746f4d66,0x566e6f69,0x6f746365,0x61635372,0x0000656c,0x00040005,0x00000067, + 0x49466263,0x00000000,0x00060005,0x00000080,0x6e695f72,0x5f747570,0x74706564,0x00000068, + 0x00070005,0x00000088,0x63725366,0x69746f4d,0x65566e6f,0x726f7463,0x00000000,0x00080005, + 0x00000089,0x6e695f72,0x5f747570,0x69746f6d,0x765f6e6f,0x6f746365,0x00007372,0x00060005, + 0x0000008e,0x4d765566,0x6f69746f,0x6365566e,0x00726f74,0x00090005,0x00000097,0x645f7772, + 0x74616c69,0x6d5f6465,0x6f69746f,0x65765f6e,0x726f7463,0x00000073,0x00070005,0x000000a1, + 0x645f7772,0x74616c69,0x645f6465,0x68747065,0x00000000,0x00040005,0x000000a7,0x70654475, + 0x00006874,0x00040005,0x000000a8,0x61726170,0x0000006d,0x000c0005,0x000000ad,0x725f7772, + 0x6e6f6365,0x75727473,0x64657463,0x7065645f,0x705f6874,0x69766572,0x5f73756f,0x6d617266, + 0x00000065,0x00050005,0x000000b4,0x53785066,0x6c706d61,0x00000065,0x00040005,0x000000bd, + 0x61746164,0x00000000,0x00040005,0x000000c3,0x46785066,0x00636172,0x00040005,0x000000c4, + 0x61726170,0x0000006d,0x00060005,0x000000fa,0x63725366,0x7474694a,0x64657265,0x00736f50, + 0x00050005,0x00000101,0x50724c66,0x6e49736f,0x00007248,0x00050005,0x00000109,0x48785069, + 0x736f5072,0x00000000,0x00030005,0x0000011a,0x00765566,0x00060005,0x00000122,0x70655266, + 0x656a6f72,0x64657463,0x00007655,0x00060005,0x00000126,0x696c6962,0x7261656e,0x6f666e49, + 0x00000000,0x00040005,0x00000128,0x61726170,0x0000006d,0x00040005,0x0000012a,0x61726170, + 0x0000006d,0x00060005,0x0000012d,0x6d615369,0x49656c70,0x7865646e,0x00000000,0x00040005, + 0x00000136,0x66664f69,0x00746573,0x00040005,0x0000013a,0x69655766,0x00746867,0x00050005, + 0x00000143,0x6f745369,0x6f506572,0x00000073,0x00040005,0x00000148,0x61726170,0x0000006d, + 0x00040005,0x0000014a,0x61726170,0x0000006d,0x00040005,0x0000014f,0x61726170,0x0000006d, + 0x00040005,0x00000151,0x61726170,0x0000006d,0x00060005,0x00000156,0x6d615369,0x49656c70, + 0x7865646e,0x00000000,0x00040005,0x0000015f,0x736f5069,0x00000000,0x00050005,0x0000016c, + 0x65646e69,0x6c626178,0x00000065,0x00040005,0x00000172,0x74706564,0x00000068,0x00040005, + 0x00000174,0x61726170,0x0000006d,0x00040005,0x00000184,0x736f5069,0x00000000,0x00050005, + 0x00000187,0x65646e69,0x6c626178,0x00000065,0x00040005,0x0000018b,0x61726170,0x0000006d, + 0x00040005,0x0000018d,0x61726170,0x0000006d,0x00050005,0x00000192,0x44644e66,0x68747065, + 0x00000000,0x00060005,0x000001a0,0x6c694466,0x64657461,0x74706544,0x00000068,0x00070005, + 0x000001a1,0x61654e69,0x74736572,0x74706544,0x6f6f4368,0x00006472,0x00040005,0x000001a2, + 0x61726170,0x0000006d,0x00040005,0x000001a4,0x61726170,0x0000006d,0x00040005,0x000001a5, + 0x61726170,0x0000006d,0x00040005,0x000001a6,0x61726170,0x0000006d,0x00050005,0x000001aa, + 0x6d615369,0x50656c70,0x0000736f,0x00040005,0x000001ab,0x61726170,0x0000006d,0x00070005, + 0x000001ae,0x746f4d69,0x566e6f69,0x6f746365,0x736f5072,0x00000000,0x00040005,0x000001af, + 0x61726170,0x0000006d,0x00080005,0x000001b2,0x6c694466,0x64657461,0x69746f4d,0x65566e6f, + 0x726f7463,0x00000000,0x00040005,0x000001b3,0x61726170,0x0000006d,0x00040005,0x000001b6, + 0x61726170,0x0000006d,0x00040005,0x000001b8,0x61726170,0x0000006d,0x00040005,0x000001bb, + 0x61726170,0x0000006d,0x00040005,0x000001bd,0x61726170,0x0000006d,0x00040005,0x000001c1, + 0x61726170,0x0000006d,0x00040005,0x000001c3,0x61726170,0x0000006d,0x00040005,0x000001c5, + 0x61726170,0x0000006d,0x00040005,0x000001c7,0x61726170,0x0000006d,0x00080005,0x000001cb, + 0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00040005,0x000001cf, + 0x61726170,0x0000006d,0x00060005,0x000001d6,0x694c5f73,0x7261656e,0x6d616c43,0x00000070, + 0x00030047,0x00000065,0x00000002,0x00050048,0x00000065,0x00000000,0x00000023,0x00000000, + 0x00050048,0x00000065,0x00000001,0x00000023,0x00000008,0x00050048,0x00000065,0x00000002, + 0x00000023,0x00000010,0x00050048,0x00000065,0x00000003,0x00000023,0x00000018,0x00050048, + 0x00000065,0x00000004,0x00000023,0x0000001c,0x00050048,0x00000065,0x00000005,0x00000023, + 0x00000020,0x00050048,0x00000065,0x00000006,0x00000023,0x00000028,0x00050048,0x00000065, + 0x00000007,0x00000023,0x0000002c,0x00050048,0x00000065,0x00000008,0x00000023,0x00000030, + 0x00050048,0x00000065,0x00000009,0x00000023,0x00000040,0x00050048,0x00000065,0x0000000a, + 0x00000023,0x00000044,0x00050048,0x00000065,0x0000000b,0x00000023,0x00000048,0x00050048, + 0x00000065,0x0000000c,0x00000023,0x00000050,0x00050048,0x00000065,0x0000000d,0x00000023, + 0x00000058,0x00050048,0x00000065,0x0000000e,0x00000023,0x0000005c,0x00050048,0x00000065, + 0x0000000f,0x00000023,0x00000060,0x00050048,0x00000065,0x00000010,0x00000023,0x00000068, + 0x00050048,0x00000065,0x00000011,0x00000023,0x0000006c,0x00050048,0x00000065,0x00000012, + 0x00000023,0x00000070,0x00050048,0x00000065,0x00000013,0x00000023,0x00000078,0x00050048, + 0x00000065,0x00000014,0x00000023,0x00000080,0x00050048,0x00000065,0x00000015,0x00000023, + 0x0000008c,0x00050048,0x00000065,0x00000016,0x00000023,0x00000090,0x00050048,0x00000065, + 0x00000017,0x00000023,0x00000098,0x00050048,0x00000065,0x00000018,0x00000023,0x0000009c, + 0x00050048,0x00000065,0x00000019,0x00000023,0x000000a0,0x00050048,0x00000065,0x0000001a, + 0x00000023,0x000000a8,0x00040047,0x00000067,0x00000021,0x00000005,0x00040047,0x00000067, + 0x00000022,0x00000000,0x00040047,0x00000080,0x00000021,0x00000001,0x00040047,0x00000080, + 0x00000022,0x00000000,0x00040047,0x00000089,0x00000021,0x00000000,0x00040047,0x00000089, + 0x00000022,0x00000000,0x00040047,0x00000097,0x00000021,0x00000003,0x00040047,0x00000097, + 0x00000022,0x00000000,0x00040047,0x000000a1,0x00000021,0x00000004,0x00040047,0x000000a1, + 0x00000022,0x00000000,0x00040047,0x000000ad,0x00000021,0x00000002,0x00040047,0x000000ad, + 0x00000022,0x00000000,0x00040047,0x000001cb,0x0000000b,0x0000001c,0x00040047,0x000001d6, + 0x00000021,0x000003e8,0x00040047,0x000001d6,0x00000022,0x00000000,0x00040047,0x000001e2, + 0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016, + 0x00000006,0x00000020,0x00040020,0x00000007,0x00000007,0x00000006,0x00040015,0x00000008, + 0x00000020,0x00000000,0x00040021,0x00000009,0x00000008,0x00000007,0x00040017,0x0000000d, + 0x00000006,0x00000002,0x00040020,0x0000000e,0x00000007,0x0000000d,0x00040021,0x0000000f, + 0x0000000d,0x0000000e,0x00030021,0x00000013,0x0000000d,0x00040015,0x00000018,0x00000020, + 0x00000001,0x00040017,0x00000019,0x00000018,0x00000002,0x00030021,0x0000001a,0x00000019, + 0x00040020,0x0000001f,0x00000007,0x00000019,0x00040021,0x00000020,0x00000006,0x0000001f, + 0x00040021,0x00000024,0x0000000d,0x0000001f,0x00050021,0x00000028,0x00000002,0x0000001f, + 0x0000000e,0x00050021,0x0000002d,0x00000002,0x0000001f,0x00000007,0x0004002b,0x00000008, + 0x00000036,0x00000004,0x0004001c,0x00000037,0x00000019,0x00000036,0x0004001c,0x00000038, + 0x00000006,0x00000036,0x0005001e,0x00000039,0x00000037,0x00000038,0x00000019,0x00050021, + 0x0000003a,0x00000039,0x0000000e,0x0000001f,0x00020014,0x0000003f,0x00050021,0x00000040, + 0x0000003f,0x0000001f,0x0000001f,0x00040021,0x00000045,0x00000019,0x0000001f,0x00070021, + 0x00000049,0x00000002,0x0000001f,0x00000007,0x0000000e,0x0000001f,0x00070021,0x00000050, + 0x00000002,0x0000001f,0x0000001f,0x00000007,0x0000001f,0x00040021,0x00000057,0x00000002, + 0x0000001f,0x00040017,0x00000063,0x00000006,0x00000004,0x00040017,0x00000064,0x00000006, + 0x00000003,0x001d001e,0x00000065,0x00000019,0x00000019,0x0000000d,0x00000006,0x00000006, + 0x00000019,0x00000018,0x00000018,0x00000063,0x00000006,0x00000018,0x00000019,0x0000000d, + 0x00000018,0x00000008,0x00000019,0x00000018,0x00000018,0x00000019,0x00000019,0x00000064, + 0x00000008,0x0000000d,0x00000006,0x00000018,0x0000000d,0x0000000d,0x00040020,0x00000066, + 0x00000002,0x00000065,0x0004003b,0x00000066,0x00000067,0x00000002,0x0004002b,0x00000018, + 0x00000068,0x00000019,0x00040020,0x00000069,0x00000002,0x0000000d,0x0004002b,0x00000018, + 0x0000006e,0x0000001a,0x0004002b,0x00000018,0x00000073,0x00000000,0x00040020,0x00000074, + 0x00000002,0x00000019,0x0004002b,0x00000018,0x00000079,0x00000001,0x00090019,0x0000007e, + 0x00000006,0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x00040020, + 0x0000007f,0x00000000,0x0000007e,0x0004003b,0x0000007f,0x00000080,0x00000000,0x0004002b, + 0x00000008,0x00000084,0x00000000,0x0004003b,0x0000007f,0x00000089,0x00000000,0x00090019, + 0x00000095,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000,0x00000002,0x00000007, + 0x00040020,0x00000096,0x00000000,0x00000095,0x0004003b,0x00000096,0x00000097,0x00000000, + 0x0004002b,0x00000006,0x0000009b,0x00000000,0x00090019,0x0000009f,0x00000006,0x00000001, + 0x00000000,0x00000000,0x00000000,0x00000002,0x00000003,0x00040020,0x000000a0,0x00000000, + 0x0000009f,0x0004003b,0x000000a0,0x000000a1,0x00000000,0x00040020,0x000000a6,0x00000007, + 0x00000008,0x00090019,0x000000ab,0x00000008,0x00000001,0x00000000,0x00000000,0x00000000, + 0x00000002,0x00000021,0x00040020,0x000000ac,0x00000000,0x000000ab,0x0004003b,0x000000ac, + 0x000000ad,0x00000000,0x00040020,0x000000b0,0x0000000b,0x00000008,0x0004002b,0x00000008, + 0x000000b2,0x00000001,0x0004002b,0x00000006,0x000000b9,0x3f000000,0x0005002c,0x0000000d, + 0x000000ba,0x000000b9,0x000000b9,0x00040020,0x000000bc,0x00000007,0x00000039,0x0004002b, + 0x00000018,0x000000be,0x00000002,0x0005002c,0x00000019,0x000000c7,0x00000073,0x00000073, + 0x0005002c,0x00000019,0x000000c9,0x00000079,0x00000073,0x0005002c,0x00000019,0x000000cb, + 0x00000073,0x00000079,0x0004002b,0x00000018,0x000000cd,0x00000003,0x0005002c,0x00000019, + 0x000000ce,0x00000079,0x00000079,0x0004002b,0x00000006,0x000000d0,0x3f800000,0x00040017, + 0x000000f1,0x00000008,0x00000002,0x00040017,0x000000f5,0x0000003f,0x00000002,0x0004002b, + 0x00000006,0x00000115,0x3dcccccd,0x00040020,0x0000012c,0x00000007,0x00000018,0x0004002b, + 0x00000018,0x00000134,0x00000004,0x0004002b,0x00000006,0x0000013f,0x3a83126f,0x0004002b, + 0x00000018,0x0000015d,0x00000009,0x0004002b,0x00000008,0x00000161,0x00000009,0x0004001c, + 0x00000162,0x00000019,0x00000161,0x0004002b,0x00000018,0x00000163,0xffffffff,0x0005002c, + 0x00000019,0x00000164,0x00000073,0x00000163,0x0005002c,0x00000019,0x00000165,0x00000163, + 0x00000073,0x0005002c,0x00000019,0x00000166,0x00000163,0x00000079,0x0005002c,0x00000019, + 0x00000167,0x00000163,0x00000163,0x0005002c,0x00000019,0x00000168,0x00000079,0x00000163, + 0x000c002c,0x00000162,0x00000169,0x000000c7,0x000000c9,0x000000cb,0x00000164,0x00000165, + 0x00000166,0x000000ce,0x00000167,0x00000168,0x00040020,0x0000016b,0x00000007,0x00000162, + 0x0004001c,0x00000170,0x00000006,0x00000161,0x00040020,0x00000171,0x00000007,0x00000170, + 0x00040017,0x000001c9,0x00000008,0x00000003,0x00040020,0x000001ca,0x00000001,0x000001c9, + 0x0004003b,0x000001ca,0x000001cb,0x00000001,0x0004002b,0x00000006,0x000001d1,0x387fda40, + 0x0004002b,0x00000006,0x000001d2,0x477fe000,0x0004002b,0x00000006,0x000001d3,0x37801002, + 0x0002001a,0x000001d4,0x00040020,0x000001d5,0x00000000,0x000001d4,0x0004003b,0x000001d5, + 0x000001d6,0x00000000,0x0004002b,0x00000006,0x000001d7,0x7f7fffff,0x0004002b,0x00000006, + 0x000001d8,0x00800000,0x0004002b,0x00000008,0x000001d9,0x00000020,0x0004002b,0x00000008, + 0x000001da,0x00000010,0x0004002b,0x00000008,0x000001db,0x00000005,0x0004002b,0x00000008, + 0x000001dc,0x0000000a,0x0004002b,0x00000008,0x000001dd,0x80000000,0x0004002b,0x00000008, + 0x000001de,0x0000001f,0x0004002b,0x00000008,0x000001df,0x000003ff,0x0004002b,0x00000008, + 0x000001e0,0x00000015,0x0004002b,0x00000008,0x000001e1,0x00000008,0x0006002c,0x000001c9, + 0x000001e2,0x000001e1,0x000001e1,0x000000b2,0x00050036,0x00000002,0x00000004,0x00000000, + 0x00000003,0x000200f8,0x00000005,0x0004003b,0x0000001f,0x000001cf,0x00000007,0x0004003d, + 0x000001c9,0x000001cc,0x000001cb,0x0007004f,0x000000f1,0x000001cd,0x000001cc,0x000001cc, + 0x00000000,0x00000001,0x0004007c,0x00000019,0x000001ce,0x000001cd,0x0003003e,0x000001cf, + 0x000001ce,0x00050039,0x00000002,0x000001d0,0x00000059,0x000001cf,0x000100fd,0x00010038, + 0x00050036,0x00000008,0x0000000b,0x00000000,0x00000009,0x00030037,0x00000007,0x0000000a, + 0x000200f8,0x0000000c,0x0004003d,0x00000006,0x0000005b,0x0000000a,0x0004007c,0x00000008, + 0x0000005c,0x0000005b,0x000200fe,0x0000005c,0x00010038,0x00050036,0x0000000d,0x00000011, + 0x00000000,0x0000000f,0x00030037,0x0000000e,0x00000010,0x000200f8,0x00000012,0x0004003d, + 0x0000000d,0x0000005f,0x00000010,0x0006000c,0x0000000d,0x00000060,0x00000001,0x0000000a, + 0x0000005f,0x000200fe,0x00000060,0x00010038,0x00050036,0x0000000d,0x00000014,0x00000000, + 0x00000013,0x000200f8,0x00000015,0x00050041,0x00000069,0x0000006a,0x00000067,0x00000068, + 0x0004003d,0x0000000d,0x0000006b,0x0000006a,0x000200fe,0x0000006b,0x00010038,0x00050036, + 0x0000000d,0x00000016,0x00000000,0x00000013,0x000200f8,0x00000017,0x00050041,0x00000069, + 0x0000006f,0x00000067,0x0000006e,0x0004003d,0x0000000d,0x00000070,0x0000006f,0x000200fe, + 0x00000070,0x00010038,0x00050036,0x00000019,0x0000001b,0x00000000,0x0000001a,0x000200f8, + 0x0000001c,0x00050041,0x00000074,0x00000075,0x00000067,0x00000073,0x0004003d,0x00000019, + 0x00000076,0x00000075,0x000200fe,0x00000076,0x00010038,0x00050036,0x00000019,0x0000001d, + 0x00000000,0x0000001a,0x000200f8,0x0000001e,0x00050041,0x00000074,0x0000007a,0x00000067, + 0x00000079,0x0004003d,0x00000019,0x0000007b,0x0000007a,0x000200fe,0x0000007b,0x00010038, + 0x00050036,0x00000006,0x00000022,0x00000000,0x00000020,0x00030037,0x0000001f,0x00000021, + 0x000200f8,0x00000023,0x0004003d,0x0000007e,0x00000081,0x00000080,0x0004003d,0x00000019, + 0x00000082,0x00000021,0x0007005f,0x00000063,0x00000083,0x00000081,0x00000082,0x00000002, + 0x00000073,0x00050051,0x00000006,0x00000085,0x00000083,0x00000000,0x000200fe,0x00000085, + 0x00010038,0x00050036,0x0000000d,0x00000026,0x00000000,0x00000024,0x00030037,0x0000001f, + 0x00000025,0x000200f8,0x00000027,0x0004003b,0x0000000e,0x00000088,0x00000007,0x0004003b, + 0x0000000e,0x0000008e,0x00000007,0x0004003d,0x0000007e,0x0000008a,0x00000089,0x0004003d, + 0x00000019,0x0000008b,0x00000025,0x0007005f,0x00000063,0x0000008c,0x0000008a,0x0000008b, + 0x00000002,0x00000073,0x0007004f,0x0000000d,0x0000008d,0x0000008c,0x0000008c,0x00000000, + 0x00000001,0x0003003e,0x00000088,0x0000008d,0x0004003d,0x0000000d,0x0000008f,0x00000088, + 0x00040039,0x0000000d,0x00000090,0x00000016,0x00050085,0x0000000d,0x00000091,0x0000008f, + 0x00000090,0x0003003e,0x0000008e,0x00000091,0x0004003d,0x0000000d,0x00000092,0x0000008e, + 0x000200fe,0x00000092,0x00010038,0x00050036,0x00000002,0x0000002b,0x00000000,0x00000028, + 0x00030037,0x0000001f,0x00000029,0x00030037,0x0000000e,0x0000002a,0x000200f8,0x0000002c, + 0x0004003d,0x00000095,0x00000098,0x00000097,0x0004003d,0x00000019,0x00000099,0x00000029, + 0x0004003d,0x0000000d,0x0000009a,0x0000002a,0x00050051,0x00000006,0x0000009c,0x0000009a, + 0x00000000,0x00050051,0x00000006,0x0000009d,0x0000009a,0x00000001,0x00070050,0x00000063, + 0x0000009e,0x0000009c,0x0000009d,0x0000009b,0x0000009b,0x00040063,0x00000098,0x00000099, + 0x0000009e,0x000100fd,0x00010038,0x00050036,0x00000002,0x00000030,0x00000000,0x0000002d, + 0x00030037,0x0000001f,0x0000002e,0x00030037,0x00000007,0x0000002f,0x000200f8,0x00000031, + 0x0004003d,0x0000009f,0x000000a2,0x000000a1,0x0004003d,0x00000019,0x000000a3,0x0000002e, + 0x0004003d,0x00000006,0x000000a4,0x0000002f,0x00070050,0x00000063,0x000000a5,0x000000a4, + 0x0000009b,0x0000009b,0x0000009b,0x00040063,0x000000a2,0x000000a3,0x000000a5,0x000100fd, + 0x00010038,0x00050036,0x00000002,0x00000034,0x00000000,0x0000002d,0x00030037,0x0000001f, + 0x00000032,0x00030037,0x00000007,0x00000033,0x000200f8,0x00000035,0x0004003b,0x000000a6, + 0x000000a7,0x00000007,0x0004003b,0x00000007,0x000000a8,0x00000007,0x0004003d,0x00000006, + 0x000000a9,0x00000033,0x0003003e,0x000000a8,0x000000a9,0x00050039,0x00000008,0x000000aa, + 0x0000000b,0x000000a8,0x0003003e,0x000000a7,0x000000aa,0x0004003d,0x00000019,0x000000ae, + 0x00000032,0x0004003d,0x00000008,0x000000af,0x000000a7,0x0006003c,0x000000b0,0x000000b1, + 0x000000ad,0x000000ae,0x00000084,0x000700ef,0x00000008,0x000000b3,0x000000b1,0x000000b2, + 0x00000084,0x000000af,0x000100fd,0x00010038,0x00050036,0x00000039,0x0000003d,0x00000000, + 0x0000003a,0x00030037,0x0000000e,0x0000003b,0x00030037,0x0000001f,0x0000003c,0x000200f8, + 0x0000003e,0x0004003b,0x0000000e,0x000000b4,0x00000007,0x0004003b,0x000000bc,0x000000bd, + 0x00000007,0x0004003b,0x0000000e,0x000000c3,0x00000007,0x0004003b,0x0000000e,0x000000c4, + 0x00000007,0x0004003d,0x0000000d,0x000000b5,0x0000003b,0x0004003d,0x00000019,0x000000b6, + 0x0000003c,0x0004006f,0x0000000d,0x000000b7,0x000000b6,0x00050085,0x0000000d,0x000000b8, + 0x000000b5,0x000000b7,0x00050083,0x0000000d,0x000000bb,0x000000b8,0x000000ba,0x0003003e, + 0x000000b4,0x000000bb,0x0004003d,0x0000000d,0x000000bf,0x000000b4,0x0006000c,0x0000000d, + 0x000000c0,0x00000001,0x00000008,0x000000bf,0x0004006e,0x00000019,0x000000c1,0x000000c0, + 0x00050041,0x0000001f,0x000000c2,0x000000bd,0x000000be,0x0003003e,0x000000c2,0x000000c1, + 0x0004003d,0x0000000d,0x000000c5,0x000000b4,0x0003003e,0x000000c4,0x000000c5,0x00050039, + 0x0000000d,0x000000c6,0x00000011,0x000000c4,0x0003003e,0x000000c3,0x000000c6,0x00060041, + 0x0000001f,0x000000c8,0x000000bd,0x00000073,0x00000073,0x0003003e,0x000000c8,0x000000c7, + 0x00060041,0x0000001f,0x000000ca,0x000000bd,0x00000073,0x00000079,0x0003003e,0x000000ca, + 0x000000c9,0x00060041,0x0000001f,0x000000cc,0x000000bd,0x00000073,0x000000be,0x0003003e, + 0x000000cc,0x000000cb,0x00060041,0x0000001f,0x000000cf,0x000000bd,0x00000073,0x000000cd, + 0x0003003e,0x000000cf,0x000000ce,0x00050041,0x00000007,0x000000d1,0x000000c3,0x00000084, + 0x0004003d,0x00000006,0x000000d2,0x000000d1,0x00050083,0x00000006,0x000000d3,0x000000d0, + 0x000000d2,0x00050041,0x00000007,0x000000d4,0x000000c3,0x000000b2,0x0004003d,0x00000006, + 0x000000d5,0x000000d4,0x00050083,0x00000006,0x000000d6,0x000000d0,0x000000d5,0x00050085, + 0x00000006,0x000000d7,0x000000d3,0x000000d6,0x00060041,0x00000007,0x000000d8,0x000000bd, + 0x00000079,0x00000073,0x0003003e,0x000000d8,0x000000d7,0x00050041,0x00000007,0x000000d9, + 0x000000c3,0x00000084,0x0004003d,0x00000006,0x000000da,0x000000d9,0x00050041,0x00000007, + 0x000000db,0x000000c3,0x000000b2,0x0004003d,0x00000006,0x000000dc,0x000000db,0x00050083, + 0x00000006,0x000000dd,0x000000d0,0x000000dc,0x00050085,0x00000006,0x000000de,0x000000da, + 0x000000dd,0x00060041,0x00000007,0x000000df,0x000000bd,0x00000079,0x00000079,0x0003003e, + 0x000000df,0x000000de,0x00050041,0x00000007,0x000000e0,0x000000c3,0x00000084,0x0004003d, + 0x00000006,0x000000e1,0x000000e0,0x00050083,0x00000006,0x000000e2,0x000000d0,0x000000e1, + 0x00050041,0x00000007,0x000000e3,0x000000c3,0x000000b2,0x0004003d,0x00000006,0x000000e4, + 0x000000e3,0x00050085,0x00000006,0x000000e5,0x000000e2,0x000000e4,0x00060041,0x00000007, + 0x000000e6,0x000000bd,0x00000079,0x000000be,0x0003003e,0x000000e6,0x000000e5,0x00050041, + 0x00000007,0x000000e7,0x000000c3,0x00000084,0x0004003d,0x00000006,0x000000e8,0x000000e7, + 0x00050041,0x00000007,0x000000e9,0x000000c3,0x000000b2,0x0004003d,0x00000006,0x000000ea, + 0x000000e9,0x00050085,0x00000006,0x000000eb,0x000000e8,0x000000ea,0x00060041,0x00000007, + 0x000000ec,0x000000bd,0x00000079,0x000000cd,0x0003003e,0x000000ec,0x000000eb,0x0004003d, + 0x00000039,0x000000ed,0x000000bd,0x000200fe,0x000000ed,0x00010038,0x00050036,0x0000003f, + 0x00000043,0x00000000,0x00000040,0x00030037,0x0000001f,0x00000041,0x00030037,0x0000001f, + 0x00000042,0x000200f8,0x00000044,0x0004003d,0x00000019,0x000000f0,0x00000041,0x0004007c, + 0x000000f1,0x000000f2,0x000000f0,0x0004003d,0x00000019,0x000000f3,0x00000042,0x0004007c, + 0x000000f1,0x000000f4,0x000000f3,0x000500b0,0x000000f5,0x000000f6,0x000000f2,0x000000f4, + 0x0004009b,0x0000003f,0x000000f7,0x000000f6,0x000200fe,0x000000f7,0x00010038,0x00050036, + 0x00000019,0x00000047,0x00000000,0x00000045,0x00030037,0x0000001f,0x00000046,0x000200f8, + 0x00000048,0x0004003b,0x0000000e,0x000000fa,0x00000007,0x0004003b,0x0000000e,0x00000101, + 0x00000007,0x0004003b,0x0000001f,0x00000109,0x00000007,0x0004003d,0x00000019,0x000000fb, + 0x00000046,0x0004006f,0x0000000d,0x000000fc,0x000000fb,0x00050050,0x0000000d,0x000000fd, + 0x000000b9,0x000000b9,0x00050081,0x0000000d,0x000000fe,0x000000fc,0x000000fd,0x00040039, + 0x0000000d,0x000000ff,0x00000014,0x00050083,0x0000000d,0x00000100,0x000000fe,0x000000ff, + 0x0003003e,0x000000fa,0x00000100,0x0004003d,0x0000000d,0x00000102,0x000000fa,0x00040039, + 0x00000019,0x00000103,0x0000001b,0x0004006f,0x0000000d,0x00000104,0x00000103,0x00050088, + 0x0000000d,0x00000105,0x00000102,0x00000104,0x00040039,0x00000019,0x00000106,0x0000001d, + 0x0004006f,0x0000000d,0x00000107,0x00000106,0x00050085,0x0000000d,0x00000108,0x00000105, + 0x00000107,0x0003003e,0x00000101,0x00000108,0x0004003d,0x0000000d,0x0000010a,0x00000101, + 0x0006000c,0x0000000d,0x0000010b,0x00000001,0x00000008,0x0000010a,0x0004006e,0x00000019, + 0x0000010c,0x0000010b,0x0003003e,0x00000109,0x0000010c,0x0004003d,0x00000019,0x0000010d, + 0x00000109,0x000200fe,0x0000010d,0x00010038,0x00050036,0x00000002,0x0000004e,0x00000000, + 0x00000049,0x00030037,0x0000001f,0x0000004a,0x00030037,0x00000007,0x0000004b,0x00030037, + 0x0000000e,0x0000004c,0x00030037,0x0000001f,0x0000004d,0x000200f8,0x0000004f,0x0004003b, + 0x0000000e,0x0000011a,0x00000007,0x0004003b,0x0000000e,0x00000122,0x00000007,0x0004003b, + 0x000000bc,0x00000126,0x00000007,0x0004003b,0x0000000e,0x00000128,0x00000007,0x0004003b, + 0x0000001f,0x0000012a,0x00000007,0x0004003b,0x0000012c,0x0000012d,0x00000007,0x0004003b, + 0x0000001f,0x00000136,0x00000007,0x0004003b,0x00000007,0x0000013a,0x00000007,0x0004003b, + 0x0000001f,0x00000143,0x00000007,0x0004003b,0x0000001f,0x00000148,0x00000007,0x0004003b, + 0x0000001f,0x0000014a,0x00000007,0x0004003b,0x0000001f,0x0000014f,0x00000007,0x0004003b, + 0x00000007,0x00000151,0x00000007,0x0004003d,0x0000000d,0x00000110,0x0000004c,0x00040039, + 0x00000019,0x00000111,0x0000001d,0x0004006f,0x0000000d,0x00000112,0x00000111,0x00050085, + 0x0000000d,0x00000113,0x00000110,0x00000112,0x0006000c,0x00000006,0x00000114,0x00000001, + 0x00000042,0x00000113,0x000500ba,0x0000003f,0x00000116,0x00000114,0x00000115,0x000600a9, + 0x00000006,0x00000117,0x00000116,0x000000d0,0x0000009b,0x0004003d,0x0000000d,0x00000118, + 0x0000004c,0x0005008e,0x0000000d,0x00000119,0x00000118,0x00000117,0x0003003e,0x0000004c, + 0x00000119,0x0004003d,0x00000019,0x0000011b,0x0000004a,0x0004006f,0x0000000d,0x0000011c, + 0x0000011b,0x00050050,0x0000000d,0x0000011d,0x000000b9,0x000000b9,0x00050081,0x0000000d, + 0x0000011e,0x0000011c,0x0000011d,0x0004003d,0x00000019,0x0000011f,0x0000004d,0x0004006f, + 0x0000000d,0x00000120,0x0000011f,0x00050088,0x0000000d,0x00000121,0x0000011e,0x00000120, + 0x0003003e,0x0000011a,0x00000121,0x0004003d,0x0000000d,0x00000123,0x0000011a,0x0004003d, + 0x0000000d,0x00000124,0x0000004c,0x00050081,0x0000000d,0x00000125,0x00000123,0x00000124, + 0x0003003e,0x00000122,0x00000125,0x00040039,0x00000019,0x00000127,0x0000001b,0x0004003d, + 0x0000000d,0x00000129,0x00000122,0x0003003e,0x00000128,0x00000129,0x0003003e,0x0000012a, + 0x00000127,0x00060039,0x00000039,0x0000012b,0x0000003d,0x00000128,0x0000012a,0x0003003e, + 0x00000126,0x0000012b,0x0003003e,0x0000012d,0x00000073,0x000200f9,0x0000012e,0x000200f8, + 0x0000012e,0x000400f6,0x00000130,0x00000131,0x00000000,0x000200f9,0x00000132,0x000200f8, + 0x00000132,0x0004003d,0x00000018,0x00000133,0x0000012d,0x000500b1,0x0000003f,0x00000135, + 0x00000133,0x00000134,0x000400fa,0x00000135,0x0000012f,0x00000130,0x000200f8,0x0000012f, + 0x0004003d,0x00000018,0x00000137,0x0000012d,0x00060041,0x0000001f,0x00000138,0x00000126, + 0x00000073,0x00000137,0x0004003d,0x00000019,0x00000139,0x00000138,0x0003003e,0x00000136, + 0x00000139,0x0004003d,0x00000018,0x0000013b,0x0000012d,0x00060041,0x00000007,0x0000013c, + 0x00000126,0x00000079,0x0000013b,0x0004003d,0x00000006,0x0000013d,0x0000013c,0x0003003e, + 0x0000013a,0x0000013d,0x0004003d,0x00000006,0x0000013e,0x0000013a,0x000500ba,0x0000003f, + 0x00000140,0x0000013e,0x0000013f,0x000300f7,0x00000142,0x00000000,0x000400fa,0x00000140, + 0x00000141,0x00000142,0x000200f8,0x00000141,0x00050041,0x0000001f,0x00000144,0x00000126, + 0x000000be,0x0004003d,0x00000019,0x00000145,0x00000144,0x0004003d,0x00000019,0x00000146, + 0x00000136,0x00050080,0x00000019,0x00000147,0x00000145,0x00000146,0x0003003e,0x00000143, + 0x00000147,0x0004003d,0x00000019,0x00000149,0x00000143,0x0003003e,0x00000148,0x00000149, + 0x0004003d,0x00000019,0x0000014b,0x0000004d,0x0003003e,0x0000014a,0x0000014b,0x00060039, + 0x0000003f,0x0000014c,0x00000043,0x00000148,0x0000014a,0x000300f7,0x0000014e,0x00000000, + 0x000400fa,0x0000014c,0x0000014d,0x0000014e,0x000200f8,0x0000014d,0x0004003d,0x00000019, + 0x00000150,0x00000143,0x0003003e,0x0000014f,0x00000150,0x0004003d,0x00000006,0x00000152, + 0x0000004b,0x0003003e,0x00000151,0x00000152,0x00060039,0x00000002,0x00000153,0x00000034, + 0x0000014f,0x00000151,0x000200f9,0x0000014e,0x000200f8,0x0000014e,0x000200f9,0x00000142, + 0x000200f8,0x00000142,0x000200f9,0x00000131,0x000200f8,0x00000131,0x0004003d,0x00000018, + 0x00000154,0x0000012d,0x00050080,0x00000018,0x00000155,0x00000154,0x00000079,0x0003003e, + 0x0000012d,0x00000155,0x000200f9,0x0000012e,0x000200f8,0x00000130,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x00000055,0x00000000,0x00000050,0x00030037,0x0000001f,0x00000051, + 0x00030037,0x0000001f,0x00000052,0x00030037,0x00000007,0x00000053,0x00030037,0x0000001f, + 0x00000054,0x000200f8,0x00000056,0x0004003b,0x0000012c,0x00000156,0x00000007,0x0004003b, + 0x0000001f,0x0000015f,0x00000007,0x0004003b,0x0000016b,0x0000016c,0x00000007,0x0004003b, + 0x00000171,0x00000172,0x00000007,0x0004003b,0x0000001f,0x00000174,0x00000007,0x0004003b, + 0x0000001f,0x00000184,0x00000007,0x0004003b,0x0000016b,0x00000187,0x00000007,0x0004003b, + 0x0000001f,0x0000018b,0x00000007,0x0004003b,0x0000001f,0x0000018d,0x00000007,0x0004003b, + 0x00000007,0x00000192,0x00000007,0x0003003e,0x00000156,0x00000073,0x0003003e,0x00000156, + 0x00000073,0x000200f9,0x00000157,0x000200f8,0x00000157,0x000400f6,0x00000159,0x0000015a, + 0x00000000,0x000200f9,0x0000015b,0x000200f8,0x0000015b,0x0004003d,0x00000018,0x0000015c, + 0x00000156,0x000500b1,0x0000003f,0x0000015e,0x0000015c,0x0000015d,0x000400fa,0x0000015e, + 0x00000158,0x00000159,0x000200f8,0x00000158,0x0004003d,0x00000019,0x00000160,0x00000051, + 0x0004003d,0x00000018,0x0000016a,0x00000156,0x0003003e,0x0000016c,0x00000169,0x00050041, + 0x0000001f,0x0000016d,0x0000016c,0x0000016a,0x0004003d,0x00000019,0x0000016e,0x0000016d, + 0x00050080,0x00000019,0x0000016f,0x00000160,0x0000016e,0x0003003e,0x0000015f,0x0000016f, + 0x0004003d,0x00000018,0x00000173,0x00000156,0x0004003d,0x00000019,0x00000175,0x0000015f, + 0x0003003e,0x00000174,0x00000175,0x00050039,0x00000006,0x00000176,0x00000022,0x00000174, + 0x00050041,0x00000007,0x00000177,0x00000172,0x00000173,0x0003003e,0x00000177,0x00000176, + 0x000200f9,0x0000015a,0x000200f8,0x0000015a,0x0004003d,0x00000018,0x00000178,0x00000156, + 0x00050080,0x00000018,0x00000179,0x00000178,0x00000079,0x0003003e,0x00000156,0x00000179, + 0x000200f9,0x00000157,0x000200f8,0x00000159,0x0004003d,0x00000019,0x0000017a,0x00000051, + 0x0003003e,0x00000054,0x0000017a,0x00050041,0x00000007,0x0000017b,0x00000172,0x00000073, + 0x0004003d,0x00000006,0x0000017c,0x0000017b,0x0003003e,0x00000053,0x0000017c,0x0003003e, + 0x00000156,0x00000079,0x000200f9,0x0000017d,0x000200f8,0x0000017d,0x000400f6,0x0000017f, + 0x00000180,0x00000000,0x000200f9,0x00000181,0x000200f8,0x00000181,0x0004003d,0x00000018, + 0x00000182,0x00000156,0x000500b1,0x0000003f,0x00000183,0x00000182,0x0000015d,0x000400fa, + 0x00000183,0x0000017e,0x0000017f,0x000200f8,0x0000017e,0x0004003d,0x00000019,0x00000185, + 0x00000051,0x0004003d,0x00000018,0x00000186,0x00000156,0x0003003e,0x00000187,0x00000169, + 0x00050041,0x0000001f,0x00000188,0x00000187,0x00000186,0x0004003d,0x00000019,0x00000189, + 0x00000188,0x00050080,0x00000019,0x0000018a,0x00000185,0x00000189,0x0003003e,0x00000184, + 0x0000018a,0x0004003d,0x00000019,0x0000018c,0x00000184,0x0003003e,0x0000018b,0x0000018c, + 0x0004003d,0x00000019,0x0000018e,0x00000052,0x0003003e,0x0000018d,0x0000018e,0x00060039, + 0x0000003f,0x0000018f,0x00000043,0x0000018b,0x0000018d,0x000300f7,0x00000191,0x00000000, + 0x000400fa,0x0000018f,0x00000190,0x00000191,0x000200f8,0x00000190,0x0004003d,0x00000018, + 0x00000193,0x00000156,0x00050041,0x00000007,0x00000194,0x00000172,0x00000193,0x0004003d, + 0x00000006,0x00000195,0x00000194,0x0003003e,0x00000192,0x00000195,0x0004003d,0x00000006, + 0x00000196,0x00000192,0x0004003d,0x00000006,0x00000197,0x00000053,0x000500ba,0x0000003f, + 0x00000198,0x00000196,0x00000197,0x000300f7,0x0000019a,0x00000000,0x000400fa,0x00000198, + 0x00000199,0x0000019a,0x000200f8,0x00000199,0x0004003d,0x00000019,0x0000019b,0x00000184, + 0x0003003e,0x00000054,0x0000019b,0x0004003d,0x00000006,0x0000019c,0x00000192,0x0003003e, + 0x00000053,0x0000019c,0x000200f9,0x0000019a,0x000200f8,0x0000019a,0x000200f9,0x00000191, + 0x000200f8,0x00000191,0x000200f9,0x00000180,0x000200f8,0x00000180,0x0004003d,0x00000018, + 0x0000019d,0x00000156,0x00050080,0x00000018,0x0000019e,0x0000019d,0x00000079,0x0003003e, + 0x00000156,0x0000019e,0x000200f9,0x0000017d,0x000200f8,0x0000017f,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x00000059,0x00000000,0x00000057,0x00030037,0x0000001f,0x00000058, + 0x000200f8,0x0000005a,0x0004003b,0x00000007,0x000001a0,0x00000007,0x0004003b,0x0000001f, + 0x000001a1,0x00000007,0x0004003b,0x0000001f,0x000001a2,0x00000007,0x0004003b,0x0000001f, + 0x000001a4,0x00000007,0x0004003b,0x00000007,0x000001a5,0x00000007,0x0004003b,0x0000001f, + 0x000001a6,0x00000007,0x0004003b,0x0000001f,0x000001aa,0x00000007,0x0004003b,0x0000001f, + 0x000001ab,0x00000007,0x0004003b,0x0000001f,0x000001ae,0x00000007,0x0004003b,0x0000001f, + 0x000001af,0x00000007,0x0004003b,0x0000000e,0x000001b2,0x00000007,0x0004003b,0x0000001f, + 0x000001b3,0x00000007,0x0004003b,0x0000001f,0x000001b6,0x00000007,0x0004003b,0x00000007, + 0x000001b8,0x00000007,0x0004003b,0x0000001f,0x000001bb,0x00000007,0x0004003b,0x0000000e, + 0x000001bd,0x00000007,0x0004003b,0x0000001f,0x000001c1,0x00000007,0x0004003b,0x00000007, + 0x000001c3,0x00000007,0x0004003b,0x0000000e,0x000001c5,0x00000007,0x0004003b,0x0000001f, + 0x000001c7,0x00000007,0x00040039,0x00000019,0x0000019f,0x0000001b,0x0004003d,0x00000019, + 0x000001a3,0x00000058,0x0003003e,0x000001a2,0x000001a3,0x0003003e,0x000001a4,0x0000019f, + 0x00080039,0x00000002,0x000001a7,0x00000055,0x000001a2,0x000001a4,0x000001a5,0x000001a6, + 0x0004003d,0x00000006,0x000001a8,0x000001a5,0x0003003e,0x000001a0,0x000001a8,0x0004003d, + 0x00000019,0x000001a9,0x000001a6,0x0003003e,0x000001a1,0x000001a9,0x0004003d,0x00000019, + 0x000001ac,0x00000058,0x0003003e,0x000001ab,0x000001ac,0x00050039,0x00000019,0x000001ad, + 0x00000047,0x000001ab,0x0003003e,0x000001aa,0x000001ad,0x0004003d,0x00000019,0x000001b0, + 0x000001a1,0x0003003e,0x000001af,0x000001b0,0x00050039,0x00000019,0x000001b1,0x00000047, + 0x000001af,0x0003003e,0x000001ae,0x000001b1,0x0004003d,0x00000019,0x000001b4,0x000001ae, + 0x0003003e,0x000001b3,0x000001b4,0x00050039,0x0000000d,0x000001b5,0x00000026,0x000001b3, + 0x0003003e,0x000001b2,0x000001b5,0x0004003d,0x00000019,0x000001b7,0x00000058,0x0003003e, + 0x000001b6,0x000001b7,0x0004003d,0x00000006,0x000001b9,0x000001a0,0x0003003e,0x000001b8, + 0x000001b9,0x00060039,0x00000002,0x000001ba,0x00000030,0x000001b6,0x000001b8,0x0004003d, + 0x00000019,0x000001bc,0x00000058,0x0003003e,0x000001bb,0x000001bc,0x0004003d,0x0000000d, + 0x000001be,0x000001b2,0x0003003e,0x000001bd,0x000001be,0x00060039,0x00000002,0x000001bf, + 0x0000002b,0x000001bb,0x000001bd,0x00040039,0x00000019,0x000001c0,0x0000001b,0x0004003d, + 0x00000019,0x000001c2,0x00000058,0x0003003e,0x000001c1,0x000001c2,0x0004003d,0x00000006, + 0x000001c4,0x000001a0,0x0003003e,0x000001c3,0x000001c4,0x0004003d,0x0000000d,0x000001c6, + 0x000001b2,0x0003003e,0x000001c5,0x000001c6,0x0003003e,0x000001c7,0x000001c0,0x00080039, + 0x00000002,0x000001c8,0x0000004e,0x000001c1,0x000001c3,0x000001c5,0x000001c7,0x000100fd, + 0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_fi_reconstruct_previous_depth_comp_spv.h b/gpu/vk/shaders/fsr3_fi_reconstruct_previous_depth_comp_spv.h new file mode 100644 index 000000000..9b7382807 --- /dev/null +++ b/gpu/vk/shaders/fsr3_fi_reconstruct_previous_depth_comp_spv.h @@ -0,0 +1,307 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_FI_RECONSTRUCT_PREVIOUS_DEPTH_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x0000014a,0x00000000,0x00020011,0x00000001,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000134,0x00060010,0x00000004, + 0x00000011,0x00000008,0x00000008,0x00000001,0x00030003,0x00000002,0x000001c2,0x000b0004, + 0x455f4c47,0x735f5458,0x6c706d61,0x656c7265,0x745f7373,0x75747865,0x665f6572,0x74636e75, + 0x736e6f69,0x00000000,0x000b0004,0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70, + 0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f, + 0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004, + 0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669,0x00040005, + 0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000b,0x41786666,0x6e495573,0x28323374, + 0x003b3166,0x00030005,0x0000000a,0x00000078,0x00060005,0x00000011,0x46786666,0x74636172, + 0x32667628,0x0000003b,0x00030005,0x00000010,0x00000078,0x00050005,0x00000016,0x646e6552, + 0x69537265,0x0028657a,0x000a0005,0x0000001b,0x64616f4c,0x616c6944,0x4d646574,0x6f69746f, + 0x6365566e,0x28726f74,0x3b326976,0x00000000,0x00040005,0x0000001a,0x50785069,0x0000736f, + 0x00080005,0x0000001f,0x64616f4c,0x616c6944,0x44646574,0x68747065,0x32697628,0x0000003b, + 0x00040005,0x0000001e,0x50785069,0x0000736f,0x00090005,0x00000022,0x706d6153,0x6944656c, + 0x726f7473,0x6e6f6974,0x6c656946,0x66762864,0x00003b32,0x00030005,0x00000021,0x00765566, + 0x000f0005,0x00000027,0x61647055,0x65526574,0x736e6f63,0x63757274,0x44646574,0x68747065, + 0x65746e49,0x6c6f7072,0x64657461,0x6d617246,0x69762865,0x31663b32,0x0000003b,0x00050005, + 0x00000025,0x53785069,0x6c706d61,0x00000065,0x00040005,0x00000026,0x70654466,0x00006874, + 0x00080005,0x0000002c,0x696c6942,0x7261656e,0x706d6153,0x676e696c,0x61746144,0x00000000, + 0x00060006,0x0000002c,0x00000000,0x66664f69,0x73746573,0x00000000,0x00060006,0x0000002c, + 0x00000001,0x69655766,0x73746867,0x00000000,0x00060006,0x0000002c,0x00000002,0x73614269, + 0x736f5065,0x00000000,0x000b0005,0x00000030,0x42746547,0x6e696c69,0x53726165,0x6c706d61, + 0x44676e69,0x28617461,0x3b326676,0x3b326976,0x00000000,0x00030005,0x0000002e,0x00765566, + 0x00040005,0x0000002f,0x7a695369,0x00000065,0x00070005,0x00000036,0x6e4f7349,0x65726353, + 0x76286e65,0x763b3269,0x003b3269,0x00030005,0x00000034,0x00736f70,0x00040005,0x00000035, + 0x657a6973,0x00000000,0x000c0005,0x0000003f,0x6f636552,0x7274736e,0x50746375,0x44766572, + 0x68747065,0x32697628,0x3b31753b,0x763b3166,0x763b3266,0x003b3269,0x00040005,0x0000003a, + 0x50785069,0x0000736f,0x00050005,0x0000003b,0x74706564,0x72615468,0x00746567,0x00040005, + 0x0000003c,0x70654466,0x00006874,0x00060005,0x0000003d,0x746f4d66,0x566e6f69,0x6f746365, + 0x00000072,0x00060005,0x0000003e,0x44785069,0x68747065,0x657a6953,0x00000000,0x000a0005, + 0x00000043,0x6f636572,0x7274736e,0x50746375,0x69766572,0x4473756f,0x68747065,0x32697628, + 0x0000003b,0x00040005,0x00000042,0x50785069,0x0000736f,0x00040005,0x0000004f,0x49466263, + 0x0000745f,0x00060006,0x0000004f,0x00000000,0x646e6572,0x69537265,0x0000657a,0x00060006, + 0x0000004f,0x00000001,0x70736964,0x5379616c,0x00657a69,0x00070006,0x0000004f,0x00000002, + 0x70736964,0x5379616c,0x52657a69,0x00007063,0x00060006,0x0000004f,0x00000003,0x656d6163, + 0x654e6172,0x00007261,0x00060006,0x0000004f,0x00000004,0x656d6163,0x61466172,0x00000072, + 0x00080006,0x0000004f,0x00000005,0x63737075,0x72656c61,0x67726154,0x69537465,0x0000657a, + 0x00050006,0x0000004f,0x00000006,0x65646f4d,0x00000000,0x00050006,0x0000004f,0x00000007, + 0x65736572,0x00000074,0x00080006,0x0000004f,0x00000008,0x76654466,0x54656369,0x6569566f, + 0x70654477,0x00006874,0x00060006,0x0000004f,0x00000009,0x746c6564,0x6d695461,0x00000065, + 0x00090006,0x0000004f,0x0000000a,0x4c445548,0x41737365,0x63617474,0x46646568,0x6f746361, + 0x00000072,0x00080006,0x0000004f,0x0000000b,0x74736964,0x6974726f,0x69466e6f,0x53646c65, + 0x00657a69,0x00080006,0x0000004f,0x0000000c,0x6974706f,0x466c6163,0x53776f6c,0x656c6163, + 0x00000000,0x00090006,0x0000004f,0x0000000d,0x6974706f,0x466c6163,0x42776f6c,0x6b636f6c, + 0x657a6953,0x00000000,0x00070006,0x0000004f,0x0000000e,0x70736964,0x68637461,0x67616c46, + 0x00000073,0x00070006,0x0000004f,0x0000000f,0x5278616d,0x65646e65,0x7a695372,0x00000065, + 0x00090006,0x0000004f,0x00000010,0x6974706f,0x466c6163,0x48776f6c,0x52666c61,0x6f4d7365, + 0x00006564,0x00070006,0x0000004f,0x00000011,0x496d754e,0x6174736e,0x7365636e,0x00000000, + 0x00090006,0x0000004f,0x00000012,0x65746e69,0x6c6f7072,0x6f697461,0x6365526e,0x73614274, + 0x00000065,0x00090006,0x0000004f,0x00000013,0x65746e69,0x6c6f7072,0x6f697461,0x6365526e, + 0x7a695374,0x00000065,0x00070006,0x0000004f,0x00000014,0x75626564,0x72614267,0x6f6c6f43, + 0x00000072,0x000a0006,0x0000004f,0x00000015,0x6b636162,0x66667542,0x72547265,0x66736e61, + 0x75467265,0x6974636e,0x00006e6f,0x00070006,0x0000004f,0x00000016,0x4d6e696d,0x754c7861, + 0x616e696d,0x0065636e,0x00060006,0x0000004f,0x00000017,0x6e615466,0x666c6148,0x00564f46, + 0x00050006,0x0000004f,0x00000018,0x6461705f,0x00000031,0x00050006,0x0000004f,0x00000019, + 0x74694a66,0x00726574,0x00080006,0x0000004f,0x0000001a,0x746f4d66,0x566e6f69,0x6f746365, + 0x61635372,0x0000656c,0x00040005,0x00000051,0x49466263,0x00000000,0x00090005,0x0000005a, + 0x69645f72,0x6574616c,0x6f6d5f64,0x6e6f6974,0x6365765f,0x73726f74,0x00000000,0x00060005, + 0x00000061,0x69645f72,0x6574616c,0x65645f64,0x00687470,0x00090005,0x00000069,0x6e695f72, + 0x5f747570,0x74736964,0x6974726f,0x665f6e6f,0x646c6569,0x00000000,0x00060005,0x0000006d, + 0x694c5f73,0x7261656e,0x6d616c43,0x00000070,0x00040005,0x00000077,0x70654475,0x00006874, + 0x00040005,0x00000078,0x61726170,0x0000006d,0x000d0005,0x0000007d,0x725f7772,0x6e6f6365, + 0x75727473,0x64657463,0x7065645f,0x695f6874,0x7265746e,0x616c6f70,0x5f646574,0x6d617266, + 0x00000065,0x00050005,0x00000084,0x53785066,0x6c706d61,0x00000065,0x00040005,0x0000008d, + 0x61746164,0x00000000,0x00040005,0x00000093,0x46785066,0x00636172,0x00040005,0x00000094, + 0x61726170,0x0000006d,0x00030005,0x000000cb,0x00765566,0x00060005,0x000000d3,0x696c6962, + 0x7261656e,0x6f666e49,0x00000000,0x00040005,0x000000d8,0x61726170,0x0000006d,0x00040005, + 0x000000d9,0x61726170,0x0000006d,0x00060005,0x000000dc,0x6d615369,0x49656c70,0x7865646e, + 0x00000000,0x00040005,0x000000e5,0x66664f69,0x00746573,0x00050005,0x000000e9,0x6d615369, + 0x50656c70,0x0000736f,0x00060005,0x000000ee,0x6d615366,0x57656c70,0x68676965,0x00000074, + 0x00040005,0x000000f8,0x61726170,0x0000006d,0x00040005,0x000000fa,0x61726170,0x0000006d, + 0x00040005,0x00000102,0x61726170,0x0000006d,0x00040005,0x00000104,0x61726170,0x0000006d, + 0x00030005,0x00000109,0x00765566,0x00070005,0x00000111,0x73694466,0x74726f74,0x466e6f69, + 0x646c6569,0x00007655,0x00040005,0x00000112,0x61726170,0x0000006d,0x00080005,0x00000115, + 0x73694469,0x74726f74,0x506e6f69,0x6c657869,0x7366664f,0x00007465,0x00060005,0x0000011b, + 0x746f4d66,0x566e6f69,0x6f746365,0x00000072,0x00040005,0x0000011f,0x61726170,0x0000006d, + 0x00060005,0x00000121,0x6c694466,0x64657461,0x74706544,0x00000068,0x00040005,0x00000125, + 0x61726170,0x0000006d,0x00040005,0x0000012a,0x61726170,0x0000006d,0x00040005,0x0000012c, + 0x61726170,0x0000006d,0x00040005,0x0000012d,0x61726170,0x0000006d,0x00040005,0x0000012f, + 0x61726170,0x0000006d,0x00040005,0x00000130,0x61726170,0x0000006d,0x00080005,0x00000134, + 0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00040005,0x00000138, + 0x61726170,0x0000006d,0x000a0005,0x0000013d,0x75635f72,0x6e657272,0x6e695f74,0x70726574, + 0x74616c6f,0x5f6e6f69,0x72756f73,0x00006563,0x00030047,0x0000004f,0x00000002,0x00050048, + 0x0000004f,0x00000000,0x00000023,0x00000000,0x00050048,0x0000004f,0x00000001,0x00000023, + 0x00000008,0x00050048,0x0000004f,0x00000002,0x00000023,0x00000010,0x00050048,0x0000004f, + 0x00000003,0x00000023,0x00000018,0x00050048,0x0000004f,0x00000004,0x00000023,0x0000001c, + 0x00050048,0x0000004f,0x00000005,0x00000023,0x00000020,0x00050048,0x0000004f,0x00000006, + 0x00000023,0x00000028,0x00050048,0x0000004f,0x00000007,0x00000023,0x0000002c,0x00050048, + 0x0000004f,0x00000008,0x00000023,0x00000030,0x00050048,0x0000004f,0x00000009,0x00000023, + 0x00000040,0x00050048,0x0000004f,0x0000000a,0x00000023,0x00000044,0x00050048,0x0000004f, + 0x0000000b,0x00000023,0x00000048,0x00050048,0x0000004f,0x0000000c,0x00000023,0x00000050, + 0x00050048,0x0000004f,0x0000000d,0x00000023,0x00000058,0x00050048,0x0000004f,0x0000000e, + 0x00000023,0x0000005c,0x00050048,0x0000004f,0x0000000f,0x00000023,0x00000060,0x00050048, + 0x0000004f,0x00000010,0x00000023,0x00000068,0x00050048,0x0000004f,0x00000011,0x00000023, + 0x0000006c,0x00050048,0x0000004f,0x00000012,0x00000023,0x00000070,0x00050048,0x0000004f, + 0x00000013,0x00000023,0x00000078,0x00050048,0x0000004f,0x00000014,0x00000023,0x00000080, + 0x00050048,0x0000004f,0x00000015,0x00000023,0x0000008c,0x00050048,0x0000004f,0x00000016, + 0x00000023,0x00000090,0x00050048,0x0000004f,0x00000017,0x00000023,0x00000098,0x00050048, + 0x0000004f,0x00000018,0x00000023,0x0000009c,0x00050048,0x0000004f,0x00000019,0x00000023, + 0x000000a0,0x00050048,0x0000004f,0x0000001a,0x00000023,0x000000a8,0x00040047,0x00000051, + 0x00000021,0x00000005,0x00040047,0x00000051,0x00000022,0x00000000,0x00040047,0x0000005a, + 0x00000021,0x00000000,0x00040047,0x0000005a,0x00000022,0x00000000,0x00040047,0x00000061, + 0x00000021,0x00000001,0x00040047,0x00000061,0x00000022,0x00000000,0x00040047,0x00000069, + 0x00000021,0x00000003,0x00040047,0x00000069,0x00000022,0x00000000,0x00040047,0x0000006d, + 0x00000021,0x000003e8,0x00040047,0x0000006d,0x00000022,0x00000000,0x00040047,0x0000007d, + 0x00000021,0x00000004,0x00040047,0x0000007d,0x00000022,0x00000000,0x00040047,0x00000134, + 0x0000000b,0x0000001c,0x00040047,0x0000013d,0x00000021,0x00000002,0x00040047,0x0000013d, + 0x00000022,0x00000000,0x00040047,0x00000149,0x0000000b,0x00000019,0x00020013,0x00000002, + 0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040020,0x00000007, + 0x00000007,0x00000006,0x00040015,0x00000008,0x00000020,0x00000000,0x00040021,0x00000009, + 0x00000008,0x00000007,0x00040017,0x0000000d,0x00000006,0x00000002,0x00040020,0x0000000e, + 0x00000007,0x0000000d,0x00040021,0x0000000f,0x0000000d,0x0000000e,0x00040015,0x00000013, + 0x00000020,0x00000001,0x00040017,0x00000014,0x00000013,0x00000002,0x00030021,0x00000015, + 0x00000014,0x00040020,0x00000018,0x00000007,0x00000014,0x00040021,0x00000019,0x0000000d, + 0x00000018,0x00040021,0x0000001d,0x00000006,0x00000018,0x00050021,0x00000024,0x00000002, + 0x00000018,0x00000007,0x0004002b,0x00000008,0x00000029,0x00000004,0x0004001c,0x0000002a, + 0x00000014,0x00000029,0x0004001c,0x0000002b,0x00000006,0x00000029,0x0005001e,0x0000002c, + 0x0000002a,0x0000002b,0x00000014,0x00050021,0x0000002d,0x0000002c,0x0000000e,0x00000018, + 0x00020014,0x00000032,0x00050021,0x00000033,0x00000032,0x00000018,0x00000018,0x00040020, + 0x00000038,0x00000007,0x00000008,0x00080021,0x00000039,0x00000002,0x00000018,0x00000038, + 0x00000007,0x0000000e,0x00000018,0x00040021,0x00000041,0x00000002,0x00000018,0x00040017, + 0x0000004d,0x00000006,0x00000004,0x00040017,0x0000004e,0x00000006,0x00000003,0x001d001e, + 0x0000004f,0x00000014,0x00000014,0x0000000d,0x00000006,0x00000006,0x00000014,0x00000013, + 0x00000013,0x0000004d,0x00000006,0x00000013,0x00000014,0x0000000d,0x00000013,0x00000008, + 0x00000014,0x00000013,0x00000013,0x00000014,0x00000014,0x0000004e,0x00000008,0x0000000d, + 0x00000006,0x00000013,0x0000000d,0x0000000d,0x00040020,0x00000050,0x00000002,0x0000004f, + 0x0004003b,0x00000050,0x00000051,0x00000002,0x0004002b,0x00000013,0x00000052,0x00000000, + 0x00040020,0x00000053,0x00000002,0x00000014,0x00090019,0x00000058,0x00000006,0x00000001, + 0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x00040020,0x00000059,0x00000000, + 0x00000058,0x0004003b,0x00000059,0x0000005a,0x00000000,0x0004003b,0x00000059,0x00000061, + 0x00000000,0x0004002b,0x00000008,0x00000065,0x00000000,0x0004003b,0x00000059,0x00000069, + 0x00000000,0x0002001a,0x0000006b,0x00040020,0x0000006c,0x00000000,0x0000006b,0x0004003b, + 0x0000006c,0x0000006d,0x00000000,0x0003001b,0x0000006f,0x00000058,0x0004002b,0x00000006, + 0x00000072,0x00000000,0x00090019,0x0000007b,0x00000008,0x00000001,0x00000000,0x00000000, + 0x00000000,0x00000002,0x00000021,0x00040020,0x0000007c,0x00000000,0x0000007b,0x0004003b, + 0x0000007c,0x0000007d,0x00000000,0x00040020,0x00000080,0x0000000b,0x00000008,0x0004002b, + 0x00000008,0x00000082,0x00000001,0x0004002b,0x00000006,0x00000089,0x3f000000,0x0005002c, + 0x0000000d,0x0000008a,0x00000089,0x00000089,0x00040020,0x0000008c,0x00000007,0x0000002c, + 0x0004002b,0x00000013,0x0000008e,0x00000002,0x0005002c,0x00000014,0x00000097,0x00000052, + 0x00000052,0x0004002b,0x00000013,0x00000099,0x00000001,0x0005002c,0x00000014,0x0000009a, + 0x00000099,0x00000052,0x0005002c,0x00000014,0x0000009c,0x00000052,0x00000099,0x0004002b, + 0x00000013,0x0000009e,0x00000003,0x0005002c,0x00000014,0x0000009f,0x00000099,0x00000099, + 0x0004002b,0x00000006,0x000000a1,0x3f800000,0x00040017,0x000000c2,0x00000008,0x00000002, + 0x00040017,0x000000c6,0x00000032,0x00000002,0x00040020,0x000000db,0x00000007,0x00000013, + 0x0004002b,0x00000013,0x000000e3,0x00000004,0x0004002b,0x00000006,0x000000f3,0x3a83126f, + 0x00040017,0x00000132,0x00000008,0x00000003,0x00040020,0x00000133,0x00000001,0x00000132, + 0x0004003b,0x00000133,0x00000134,0x00000001,0x0004002b,0x00000006,0x0000013a,0x387fda40, + 0x0004002b,0x00000006,0x0000013b,0x477fe000,0x0004002b,0x00000006,0x0000013c,0x37801002, + 0x0004003b,0x00000059,0x0000013d,0x00000000,0x0004002b,0x00000006,0x0000013e,0x7f7fffff, + 0x0004002b,0x00000006,0x0000013f,0x00800000,0x0004002b,0x00000008,0x00000140,0x00000020, + 0x0004002b,0x00000008,0x00000141,0x00000010,0x0004002b,0x00000008,0x00000142,0x00000005, + 0x0004002b,0x00000008,0x00000143,0x0000000a,0x0004002b,0x00000008,0x00000144,0x80000000, + 0x0004002b,0x00000008,0x00000145,0x0000001f,0x0004002b,0x00000008,0x00000146,0x000003ff, + 0x0004002b,0x00000008,0x00000147,0x00000015,0x0004002b,0x00000008,0x00000148,0x00000008, + 0x0006002c,0x00000132,0x00000149,0x00000148,0x00000148,0x00000082,0x00050036,0x00000002, + 0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000018,0x00000138, + 0x00000007,0x0004003d,0x00000132,0x00000135,0x00000134,0x0007004f,0x000000c2,0x00000136, + 0x00000135,0x00000135,0x00000000,0x00000001,0x0004007c,0x00000014,0x00000137,0x00000136, + 0x0003003e,0x00000138,0x00000137,0x00050039,0x00000002,0x00000139,0x00000043,0x00000138, + 0x000100fd,0x00010038,0x00050036,0x00000008,0x0000000b,0x00000000,0x00000009,0x00030037, + 0x00000007,0x0000000a,0x000200f8,0x0000000c,0x0004003d,0x00000006,0x00000045,0x0000000a, + 0x0004007c,0x00000008,0x00000046,0x00000045,0x000200fe,0x00000046,0x00010038,0x00050036, + 0x0000000d,0x00000011,0x00000000,0x0000000f,0x00030037,0x0000000e,0x00000010,0x000200f8, + 0x00000012,0x0004003d,0x0000000d,0x00000049,0x00000010,0x0006000c,0x0000000d,0x0000004a, + 0x00000001,0x0000000a,0x00000049,0x000200fe,0x0000004a,0x00010038,0x00050036,0x00000014, + 0x00000016,0x00000000,0x00000015,0x000200f8,0x00000017,0x00050041,0x00000053,0x00000054, + 0x00000051,0x00000052,0x0004003d,0x00000014,0x00000055,0x00000054,0x000200fe,0x00000055, + 0x00010038,0x00050036,0x0000000d,0x0000001b,0x00000000,0x00000019,0x00030037,0x00000018, + 0x0000001a,0x000200f8,0x0000001c,0x0004003d,0x00000058,0x0000005b,0x0000005a,0x0004003d, + 0x00000014,0x0000005c,0x0000001a,0x0007005f,0x0000004d,0x0000005d,0x0000005b,0x0000005c, + 0x00000002,0x00000052,0x0007004f,0x0000000d,0x0000005e,0x0000005d,0x0000005d,0x00000000, + 0x00000001,0x000200fe,0x0000005e,0x00010038,0x00050036,0x00000006,0x0000001f,0x00000000, + 0x0000001d,0x00030037,0x00000018,0x0000001e,0x000200f8,0x00000020,0x0004003d,0x00000058, + 0x00000062,0x00000061,0x0004003d,0x00000014,0x00000063,0x0000001e,0x0007005f,0x0000004d, + 0x00000064,0x00000062,0x00000063,0x00000002,0x00000052,0x00050051,0x00000006,0x00000066, + 0x00000064,0x00000000,0x000200fe,0x00000066,0x00010038,0x00050036,0x0000000d,0x00000022, + 0x00000000,0x0000000f,0x00030037,0x0000000e,0x00000021,0x000200f8,0x00000023,0x0004003d, + 0x00000058,0x0000006a,0x00000069,0x0004003d,0x0000006b,0x0000006e,0x0000006d,0x00050056, + 0x0000006f,0x00000070,0x0000006a,0x0000006e,0x0004003d,0x0000000d,0x00000071,0x00000021, + 0x00070058,0x0000004d,0x00000073,0x00000070,0x00000071,0x00000002,0x00000072,0x0007004f, + 0x0000000d,0x00000074,0x00000073,0x00000073,0x00000000,0x00000001,0x000200fe,0x00000074, + 0x00010038,0x00050036,0x00000002,0x00000027,0x00000000,0x00000024,0x00030037,0x00000018, + 0x00000025,0x00030037,0x00000007,0x00000026,0x000200f8,0x00000028,0x0004003b,0x00000038, + 0x00000077,0x00000007,0x0004003b,0x00000007,0x00000078,0x00000007,0x0004003d,0x00000006, + 0x00000079,0x00000026,0x0003003e,0x00000078,0x00000079,0x00050039,0x00000008,0x0000007a, + 0x0000000b,0x00000078,0x0003003e,0x00000077,0x0000007a,0x0004003d,0x00000014,0x0000007e, + 0x00000025,0x0004003d,0x00000008,0x0000007f,0x00000077,0x0006003c,0x00000080,0x00000081, + 0x0000007d,0x0000007e,0x00000065,0x000700ef,0x00000008,0x00000083,0x00000081,0x00000082, + 0x00000065,0x0000007f,0x000100fd,0x00010038,0x00050036,0x0000002c,0x00000030,0x00000000, + 0x0000002d,0x00030037,0x0000000e,0x0000002e,0x00030037,0x00000018,0x0000002f,0x000200f8, + 0x00000031,0x0004003b,0x0000000e,0x00000084,0x00000007,0x0004003b,0x0000008c,0x0000008d, + 0x00000007,0x0004003b,0x0000000e,0x00000093,0x00000007,0x0004003b,0x0000000e,0x00000094, + 0x00000007,0x0004003d,0x0000000d,0x00000085,0x0000002e,0x0004003d,0x00000014,0x00000086, + 0x0000002f,0x0004006f,0x0000000d,0x00000087,0x00000086,0x00050085,0x0000000d,0x00000088, + 0x00000085,0x00000087,0x00050083,0x0000000d,0x0000008b,0x00000088,0x0000008a,0x0003003e, + 0x00000084,0x0000008b,0x0004003d,0x0000000d,0x0000008f,0x00000084,0x0006000c,0x0000000d, + 0x00000090,0x00000001,0x00000008,0x0000008f,0x0004006e,0x00000014,0x00000091,0x00000090, + 0x00050041,0x00000018,0x00000092,0x0000008d,0x0000008e,0x0003003e,0x00000092,0x00000091, + 0x0004003d,0x0000000d,0x00000095,0x00000084,0x0003003e,0x00000094,0x00000095,0x00050039, + 0x0000000d,0x00000096,0x00000011,0x00000094,0x0003003e,0x00000093,0x00000096,0x00060041, + 0x00000018,0x00000098,0x0000008d,0x00000052,0x00000052,0x0003003e,0x00000098,0x00000097, + 0x00060041,0x00000018,0x0000009b,0x0000008d,0x00000052,0x00000099,0x0003003e,0x0000009b, + 0x0000009a,0x00060041,0x00000018,0x0000009d,0x0000008d,0x00000052,0x0000008e,0x0003003e, + 0x0000009d,0x0000009c,0x00060041,0x00000018,0x000000a0,0x0000008d,0x00000052,0x0000009e, + 0x0003003e,0x000000a0,0x0000009f,0x00050041,0x00000007,0x000000a2,0x00000093,0x00000065, + 0x0004003d,0x00000006,0x000000a3,0x000000a2,0x00050083,0x00000006,0x000000a4,0x000000a1, + 0x000000a3,0x00050041,0x00000007,0x000000a5,0x00000093,0x00000082,0x0004003d,0x00000006, + 0x000000a6,0x000000a5,0x00050083,0x00000006,0x000000a7,0x000000a1,0x000000a6,0x00050085, + 0x00000006,0x000000a8,0x000000a4,0x000000a7,0x00060041,0x00000007,0x000000a9,0x0000008d, + 0x00000099,0x00000052,0x0003003e,0x000000a9,0x000000a8,0x00050041,0x00000007,0x000000aa, + 0x00000093,0x00000065,0x0004003d,0x00000006,0x000000ab,0x000000aa,0x00050041,0x00000007, + 0x000000ac,0x00000093,0x00000082,0x0004003d,0x00000006,0x000000ad,0x000000ac,0x00050083, + 0x00000006,0x000000ae,0x000000a1,0x000000ad,0x00050085,0x00000006,0x000000af,0x000000ab, + 0x000000ae,0x00060041,0x00000007,0x000000b0,0x0000008d,0x00000099,0x00000099,0x0003003e, + 0x000000b0,0x000000af,0x00050041,0x00000007,0x000000b1,0x00000093,0x00000065,0x0004003d, + 0x00000006,0x000000b2,0x000000b1,0x00050083,0x00000006,0x000000b3,0x000000a1,0x000000b2, + 0x00050041,0x00000007,0x000000b4,0x00000093,0x00000082,0x0004003d,0x00000006,0x000000b5, + 0x000000b4,0x00050085,0x00000006,0x000000b6,0x000000b3,0x000000b5,0x00060041,0x00000007, + 0x000000b7,0x0000008d,0x00000099,0x0000008e,0x0003003e,0x000000b7,0x000000b6,0x00050041, + 0x00000007,0x000000b8,0x00000093,0x00000065,0x0004003d,0x00000006,0x000000b9,0x000000b8, + 0x00050041,0x00000007,0x000000ba,0x00000093,0x00000082,0x0004003d,0x00000006,0x000000bb, + 0x000000ba,0x00050085,0x00000006,0x000000bc,0x000000b9,0x000000bb,0x00060041,0x00000007, + 0x000000bd,0x0000008d,0x00000099,0x0000009e,0x0003003e,0x000000bd,0x000000bc,0x0004003d, + 0x0000002c,0x000000be,0x0000008d,0x000200fe,0x000000be,0x00010038,0x00050036,0x00000032, + 0x00000036,0x00000000,0x00000033,0x00030037,0x00000018,0x00000034,0x00030037,0x00000018, + 0x00000035,0x000200f8,0x00000037,0x0004003d,0x00000014,0x000000c1,0x00000034,0x0004007c, + 0x000000c2,0x000000c3,0x000000c1,0x0004003d,0x00000014,0x000000c4,0x00000035,0x0004007c, + 0x000000c2,0x000000c5,0x000000c4,0x000500b0,0x000000c6,0x000000c7,0x000000c3,0x000000c5, + 0x0004009b,0x00000032,0x000000c8,0x000000c7,0x000200fe,0x000000c8,0x00010038,0x00050036, + 0x00000002,0x0000003f,0x00000000,0x00000039,0x00030037,0x00000018,0x0000003a,0x00030037, + 0x00000038,0x0000003b,0x00030037,0x00000007,0x0000003c,0x00030037,0x0000000e,0x0000003d, + 0x00030037,0x00000018,0x0000003e,0x000200f8,0x00000040,0x0004003b,0x0000000e,0x000000cb, + 0x00000007,0x0004003b,0x0000008c,0x000000d3,0x00000007,0x0004003b,0x0000000e,0x000000d8, + 0x00000007,0x0004003b,0x00000018,0x000000d9,0x00000007,0x0004003b,0x000000db,0x000000dc, + 0x00000007,0x0004003b,0x00000018,0x000000e5,0x00000007,0x0004003b,0x00000018,0x000000e9, + 0x00000007,0x0004003b,0x00000007,0x000000ee,0x00000007,0x0004003b,0x00000018,0x000000f8, + 0x00000007,0x0004003b,0x00000018,0x000000fa,0x00000007,0x0004003b,0x00000018,0x00000102, + 0x00000007,0x0004003b,0x00000007,0x00000104,0x00000007,0x0004003d,0x00000014,0x000000cc, + 0x0000003a,0x0004006f,0x0000000d,0x000000cd,0x000000cc,0x00050050,0x0000000d,0x000000ce, + 0x00000089,0x00000089,0x00050081,0x0000000d,0x000000cf,0x000000cd,0x000000ce,0x0004003d, + 0x00000014,0x000000d0,0x0000003e,0x0004006f,0x0000000d,0x000000d1,0x000000d0,0x00050088, + 0x0000000d,0x000000d2,0x000000cf,0x000000d1,0x0003003e,0x000000cb,0x000000d2,0x0004003d, + 0x0000000d,0x000000d4,0x000000cb,0x0004003d,0x0000000d,0x000000d5,0x0000003d,0x00050081, + 0x0000000d,0x000000d6,0x000000d4,0x000000d5,0x00040039,0x00000014,0x000000d7,0x00000016, + 0x0003003e,0x000000d8,0x000000d6,0x0003003e,0x000000d9,0x000000d7,0x00060039,0x0000002c, + 0x000000da,0x00000030,0x000000d8,0x000000d9,0x0003003e,0x000000d3,0x000000da,0x0003003e, + 0x000000dc,0x00000052,0x000200f9,0x000000dd,0x000200f8,0x000000dd,0x000400f6,0x000000df, + 0x000000e0,0x00000000,0x000200f9,0x000000e1,0x000200f8,0x000000e1,0x0004003d,0x00000013, + 0x000000e2,0x000000dc,0x000500b1,0x00000032,0x000000e4,0x000000e2,0x000000e3,0x000400fa, + 0x000000e4,0x000000de,0x000000df,0x000200f8,0x000000de,0x0004003d,0x00000013,0x000000e6, + 0x000000dc,0x00060041,0x00000018,0x000000e7,0x000000d3,0x00000052,0x000000e6,0x0004003d, + 0x00000014,0x000000e8,0x000000e7,0x0003003e,0x000000e5,0x000000e8,0x00050041,0x00000018, + 0x000000ea,0x000000d3,0x0000008e,0x0004003d,0x00000014,0x000000eb,0x000000ea,0x0004003d, + 0x00000014,0x000000ec,0x000000e5,0x00050080,0x00000014,0x000000ed,0x000000eb,0x000000ec, + 0x0003003e,0x000000e9,0x000000ed,0x0004003d,0x00000013,0x000000ef,0x000000dc,0x00060041, + 0x00000007,0x000000f0,0x000000d3,0x00000099,0x000000ef,0x0004003d,0x00000006,0x000000f1, + 0x000000f0,0x0003003e,0x000000ee,0x000000f1,0x0004003d,0x00000006,0x000000f2,0x000000ee, + 0x000500ba,0x00000032,0x000000f4,0x000000f2,0x000000f3,0x000300f7,0x000000f6,0x00000000, + 0x000400fa,0x000000f4,0x000000f5,0x000000f6,0x000200f8,0x000000f5,0x00040039,0x00000014, + 0x000000f7,0x00000016,0x0004003d,0x00000014,0x000000f9,0x000000e9,0x0003003e,0x000000f8, + 0x000000f9,0x0003003e,0x000000fa,0x000000f7,0x00060039,0x00000032,0x000000fb,0x00000036, + 0x000000f8,0x000000fa,0x000300f7,0x000000fd,0x00000000,0x000400fa,0x000000fb,0x000000fc, + 0x000000fd,0x000200f8,0x000000fc,0x0004003d,0x00000008,0x000000fe,0x0000003b,0x000500ab, + 0x00000032,0x000000ff,0x000000fe,0x00000065,0x000300f7,0x00000101,0x00000000,0x000400fa, + 0x000000ff,0x00000100,0x00000101,0x000200f8,0x00000100,0x0004003d,0x00000014,0x00000103, + 0x000000e9,0x0003003e,0x00000102,0x00000103,0x0004003d,0x00000006,0x00000105,0x0000003c, + 0x0003003e,0x00000104,0x00000105,0x00060039,0x00000002,0x00000106,0x00000027,0x00000102, + 0x00000104,0x000200f9,0x00000101,0x000200f8,0x00000101,0x000200f9,0x000000fd,0x000200f8, + 0x000000fd,0x000200f9,0x000000f6,0x000200f8,0x000000f6,0x000200f9,0x000000e0,0x000200f8, + 0x000000e0,0x0004003d,0x00000013,0x00000107,0x000000dc,0x00050080,0x00000013,0x00000108, + 0x00000107,0x00000099,0x0003003e,0x000000dc,0x00000108,0x000200f9,0x000000dd,0x000200f8, + 0x000000df,0x000100fd,0x00010038,0x00050036,0x00000002,0x00000043,0x00000000,0x00000041, + 0x00030037,0x00000018,0x00000042,0x000200f8,0x00000044,0x0004003b,0x0000000e,0x00000109, + 0x00000007,0x0004003b,0x0000000e,0x00000111,0x00000007,0x0004003b,0x0000000e,0x00000112, + 0x00000007,0x0004003b,0x00000018,0x00000115,0x00000007,0x0004003b,0x0000000e,0x0000011b, + 0x00000007,0x0004003b,0x00000018,0x0000011f,0x00000007,0x0004003b,0x00000007,0x00000121, + 0x00000007,0x0004003b,0x00000018,0x00000125,0x00000007,0x0004003b,0x00000018,0x0000012a, + 0x00000007,0x0004003b,0x00000038,0x0000012c,0x00000007,0x0004003b,0x00000007,0x0000012d, + 0x00000007,0x0004003b,0x0000000e,0x0000012f,0x00000007,0x0004003b,0x00000018,0x00000130, + 0x00000007,0x0004003d,0x00000014,0x0000010a,0x00000042,0x0004006f,0x0000000d,0x0000010b, + 0x0000010a,0x00050050,0x0000000d,0x0000010c,0x00000089,0x00000089,0x00050081,0x0000000d, + 0x0000010d,0x0000010b,0x0000010c,0x00040039,0x00000014,0x0000010e,0x00000016,0x0004006f, + 0x0000000d,0x0000010f,0x0000010e,0x00050088,0x0000000d,0x00000110,0x0000010d,0x0000010f, + 0x0003003e,0x00000109,0x00000110,0x0004003d,0x0000000d,0x00000113,0x00000109,0x0003003e, + 0x00000112,0x00000113,0x00050039,0x0000000d,0x00000114,0x00000022,0x00000112,0x0003003e, + 0x00000111,0x00000114,0x0004003d,0x0000000d,0x00000116,0x00000111,0x00040039,0x00000014, + 0x00000117,0x00000016,0x0004006f,0x0000000d,0x00000118,0x00000117,0x00050085,0x0000000d, + 0x00000119,0x00000116,0x00000118,0x0004006e,0x00000014,0x0000011a,0x00000119,0x0003003e, + 0x00000115,0x0000011a,0x0004003d,0x00000014,0x0000011c,0x00000042,0x0004003d,0x00000014, + 0x0000011d,0x00000115,0x00050080,0x00000014,0x0000011e,0x0000011c,0x0000011d,0x0003003e, + 0x0000011f,0x0000011e,0x00050039,0x0000000d,0x00000120,0x0000001b,0x0000011f,0x0003003e, + 0x0000011b,0x00000120,0x0004003d,0x00000014,0x00000122,0x00000042,0x0004003d,0x00000014, + 0x00000123,0x00000115,0x00050080,0x00000014,0x00000124,0x00000122,0x00000123,0x0003003e, + 0x00000125,0x00000124,0x00050039,0x00000006,0x00000126,0x0000001f,0x00000125,0x0003003e, + 0x00000121,0x00000126,0x0004003d,0x0000000d,0x00000127,0x0000011b,0x0005008e,0x0000000d, + 0x00000128,0x00000127,0x00000089,0x00040039,0x00000014,0x00000129,0x00000016,0x0004003d, + 0x00000014,0x0000012b,0x00000042,0x0003003e,0x0000012a,0x0000012b,0x0003003e,0x0000012c, + 0x00000082,0x0004003d,0x00000006,0x0000012e,0x00000121,0x0003003e,0x0000012d,0x0000012e, + 0x0003003e,0x0000012f,0x00000128,0x0003003e,0x00000130,0x00000129,0x00090039,0x00000002, + 0x00000131,0x0000003f,0x0000012a,0x0000012c,0x0000012d,0x0000012f,0x00000130,0x000100fd, + 0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_fi_setup_comp_spv.h b/gpu/vk/shaders/fsr3_fi_setup_comp_spv.h new file mode 100644 index 000000000..27542e630 --- /dev/null +++ b/gpu/vk/shaders/fsr3_fi_setup_comp_spv.h @@ -0,0 +1,232 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_FI_SETUP_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x000000d1,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000031,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e, + 0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x000000b7, + 0x00060010,0x00000004,0x00000011,0x00000008,0x00000008,0x00000001,0x00030003,0x00000002, + 0x000001c2,0x000b0004,0x455f4c47,0x735f5458,0x6c706d61,0x656c7265,0x745f7373,0x75747865, + 0x665f6572,0x74636e75,0x736e6f69,0x00000000,0x000b0004,0x455f4c47,0x735f5458,0x65646168, + 0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004, + 0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365, + 0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572, + 0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00040005,0x00000008,0x65736552, + 0x00002874,0x00070005,0x0000000a,0x53736148,0x656e6563,0x6e616843,0x28646567,0x00000000, + 0x000a0005,0x00000015,0x726f7453,0x73694465,0x6c63636f,0x6f697375,0x73614d6e,0x6976286b, + 0x66763b32,0x00003b32,0x00040005,0x00000013,0x50785069,0x0000736f,0x00030005,0x00000014, + 0x006c6176,0x000b0005,0x0000001c,0x726f7453,0x6d614765,0x746f4d65,0x566e6f69,0x6f746365, + 0x65694672,0x2858646c,0x3b326976,0x003b3175,0x00040005,0x0000001a,0x50785069,0x0000736f, + 0x00030005,0x0000001b,0x006c6176,0x000b0005,0x00000020,0x726f7453,0x6d614765,0x746f4d65, + 0x566e6f69,0x6f746365,0x65694672,0x2859646c,0x3b326976,0x003b3175,0x00040005,0x0000001e, + 0x50785069,0x0000736f,0x00030005,0x0000001f,0x006c6176,0x000d0005,0x00000024,0x726f7453, + 0x74704f65,0x6c616369,0x776f6c66,0x69746f4d,0x65566e6f,0x726f7463,0x6c656946,0x76285864, + 0x753b3269,0x00003b31,0x00040005,0x00000022,0x50785069,0x0000736f,0x00030005,0x00000023, + 0x006c6176,0x000d0005,0x00000028,0x726f7453,0x74704f65,0x6c616369,0x776f6c66,0x69746f4d, + 0x65566e6f,0x726f7463,0x6c656946,0x76285964,0x753b3269,0x00003b31,0x00040005,0x00000026, + 0x50785069,0x0000736f,0x00030005,0x00000027,0x006c6176,0x00070005,0x0000002d,0x6f4c5752, + 0x6f436461,0x65746e75,0x31692872,0x0000003b,0x00040005,0x0000002c,0x50785069,0x0000736f, + 0x00070005,0x00000032,0x726f7453,0x756f4365,0x7265746e,0x3b316928,0x003b3175,0x00040005, + 0x00000030,0x50785069,0x0000736f,0x00040005,0x00000031,0x6e756f63,0x00726574,0x000c0005, + 0x00000036,0x75746573,0x61724670,0x6e69656d,0x70726574,0x74616c6f,0x526e6f69,0x756f7365, + 0x73656372,0x32697628,0x0000003b,0x00040005,0x00000035,0x50785069,0x0000736f,0x00040005, + 0x0000003a,0x49466263,0x0000745f,0x00060006,0x0000003a,0x00000000,0x646e6572,0x69537265, + 0x0000657a,0x00060006,0x0000003a,0x00000001,0x70736964,0x5379616c,0x00657a69,0x00070006, + 0x0000003a,0x00000002,0x70736964,0x5379616c,0x52657a69,0x00007063,0x00060006,0x0000003a, + 0x00000003,0x656d6163,0x654e6172,0x00007261,0x00060006,0x0000003a,0x00000004,0x656d6163, + 0x61466172,0x00000072,0x00080006,0x0000003a,0x00000005,0x63737075,0x72656c61,0x67726154, + 0x69537465,0x0000657a,0x00050006,0x0000003a,0x00000006,0x65646f4d,0x00000000,0x00050006, + 0x0000003a,0x00000007,0x65736572,0x00000074,0x00080006,0x0000003a,0x00000008,0x76654466, + 0x54656369,0x6569566f,0x70654477,0x00006874,0x00060006,0x0000003a,0x00000009,0x746c6564, + 0x6d695461,0x00000065,0x00090006,0x0000003a,0x0000000a,0x4c445548,0x41737365,0x63617474, + 0x46646568,0x6f746361,0x00000072,0x00080006,0x0000003a,0x0000000b,0x74736964,0x6974726f, + 0x69466e6f,0x53646c65,0x00657a69,0x00080006,0x0000003a,0x0000000c,0x6974706f,0x466c6163, + 0x53776f6c,0x656c6163,0x00000000,0x00090006,0x0000003a,0x0000000d,0x6974706f,0x466c6163, + 0x42776f6c,0x6b636f6c,0x657a6953,0x00000000,0x00070006,0x0000003a,0x0000000e,0x70736964, + 0x68637461,0x67616c46,0x00000073,0x00070006,0x0000003a,0x0000000f,0x5278616d,0x65646e65, + 0x7a695372,0x00000065,0x00090006,0x0000003a,0x00000010,0x6974706f,0x466c6163,0x48776f6c, + 0x52666c61,0x6f4d7365,0x00006564,0x00070006,0x0000003a,0x00000011,0x496d754e,0x6174736e, + 0x7365636e,0x00000000,0x00090006,0x0000003a,0x00000012,0x65746e69,0x6c6f7072,0x6f697461, + 0x6365526e,0x73614274,0x00000065,0x00090006,0x0000003a,0x00000013,0x65746e69,0x6c6f7072, + 0x6f697461,0x6365526e,0x7a695374,0x00000065,0x00070006,0x0000003a,0x00000014,0x75626564, + 0x72614267,0x6f6c6f43,0x00000072,0x000a0006,0x0000003a,0x00000015,0x6b636162,0x66667542, + 0x72547265,0x66736e61,0x75467265,0x6974636e,0x00006e6f,0x00070006,0x0000003a,0x00000016, + 0x4d6e696d,0x754c7861,0x616e696d,0x0065636e,0x00060006,0x0000003a,0x00000017,0x6e615466, + 0x666c6148,0x00564f46,0x00050006,0x0000003a,0x00000018,0x6461705f,0x00000031,0x00050006, + 0x0000003a,0x00000019,0x74694a66,0x00726574,0x00080006,0x0000003a,0x0000001a,0x746f4d66, + 0x566e6f69,0x6f746365,0x61635372,0x0000656c,0x00040005,0x0000003c,0x49466263,0x00000000, + 0x00070005,0x00000047,0x706f5f72,0x61636974,0x6c665f6c,0x735f776f,0x00006463,0x00080005, + 0x00000056,0x645f7772,0x636f7369,0x73756c63,0x5f6e6f69,0x6b73616d,0x00000000,0x000a0005, + 0x00000060,0x675f7772,0x5f656d61,0x69746f6d,0x765f6e6f,0x6f746365,0x69665f72,0x5f646c65, + 0x00000078,0x000a0005,0x00000065,0x675f7772,0x5f656d61,0x69746f6d,0x765f6e6f,0x6f746365, + 0x69665f72,0x5f646c65,0x00000079,0x000c0005,0x0000006a,0x6f5f7772,0x63697470,0x665f6c61, + 0x5f776f6c,0x69746f6d,0x765f6e6f,0x6f746365,0x69665f72,0x5f646c65,0x00000078,0x000c0005, + 0x0000006f,0x6f5f7772,0x63697470,0x665f6c61,0x5f776f6c,0x69746f6d,0x765f6e6f,0x6f746365, + 0x69665f72,0x5f646c65,0x00000079,0x000a0005,0x00000075,0x6d617246,0x746e4965,0x6f707265, + 0x6974616c,0x57526e6f,0x6e756f43,0x73726574,0x0000745f,0x00050006,0x00000075,0x00000000, + 0x61746164,0x00000000,0x00050005,0x00000077,0x635f7772,0x746e756f,0x00737265,0x00040005, + 0x00000081,0x61726170,0x0000006d,0x00040005,0x00000082,0x61726170,0x0000006d,0x00040005, + 0x00000093,0x61726170,0x0000006d,0x00040005,0x00000094,0x61726170,0x0000006d,0x00040005, + 0x00000097,0x6e756f63,0x00726574,0x00040005,0x00000098,0x61726170,0x0000006d,0x00040005, + 0x0000009d,0x61726170,0x0000006d,0x00040005,0x0000009e,0x61726170,0x0000006d,0x00040005, + 0x000000a0,0x61726170,0x0000006d,0x00040005,0x000000a2,0x61726170,0x0000006d,0x00040005, + 0x000000a4,0x61726170,0x0000006d,0x00040005,0x000000a6,0x61726170,0x0000006d,0x00040005, + 0x000000a8,0x61726170,0x0000006d,0x00040005,0x000000aa,0x61726170,0x0000006d,0x00040005, + 0x000000ac,0x61726170,0x0000006d,0x00040005,0x000000ae,0x61726170,0x0000006d,0x00040005, + 0x000000b1,0x61726170,0x0000006d,0x00040005,0x000000b3,0x61726170,0x0000006d,0x00080005, + 0x000000b7,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00040005, + 0x000000bc,0x61726170,0x0000006d,0x00060005,0x000000c3,0x694c5f73,0x7261656e,0x6d616c43, + 0x00000070,0x00030047,0x0000003a,0x00000002,0x00050048,0x0000003a,0x00000000,0x00000023, + 0x00000000,0x00050048,0x0000003a,0x00000001,0x00000023,0x00000008,0x00050048,0x0000003a, + 0x00000002,0x00000023,0x00000010,0x00050048,0x0000003a,0x00000003,0x00000023,0x00000018, + 0x00050048,0x0000003a,0x00000004,0x00000023,0x0000001c,0x00050048,0x0000003a,0x00000005, + 0x00000023,0x00000020,0x00050048,0x0000003a,0x00000006,0x00000023,0x00000028,0x00050048, + 0x0000003a,0x00000007,0x00000023,0x0000002c,0x00050048,0x0000003a,0x00000008,0x00000023, + 0x00000030,0x00050048,0x0000003a,0x00000009,0x00000023,0x00000040,0x00050048,0x0000003a, + 0x0000000a,0x00000023,0x00000044,0x00050048,0x0000003a,0x0000000b,0x00000023,0x00000048, + 0x00050048,0x0000003a,0x0000000c,0x00000023,0x00000050,0x00050048,0x0000003a,0x0000000d, + 0x00000023,0x00000058,0x00050048,0x0000003a,0x0000000e,0x00000023,0x0000005c,0x00050048, + 0x0000003a,0x0000000f,0x00000023,0x00000060,0x00050048,0x0000003a,0x00000010,0x00000023, + 0x00000068,0x00050048,0x0000003a,0x00000011,0x00000023,0x0000006c,0x00050048,0x0000003a, + 0x00000012,0x00000023,0x00000070,0x00050048,0x0000003a,0x00000013,0x00000023,0x00000078, + 0x00050048,0x0000003a,0x00000014,0x00000023,0x00000080,0x00050048,0x0000003a,0x00000015, + 0x00000023,0x0000008c,0x00050048,0x0000003a,0x00000016,0x00000023,0x00000090,0x00050048, + 0x0000003a,0x00000017,0x00000023,0x00000098,0x00050048,0x0000003a,0x00000018,0x00000023, + 0x0000009c,0x00050048,0x0000003a,0x00000019,0x00000023,0x000000a0,0x00050048,0x0000003a, + 0x0000001a,0x00000023,0x000000a8,0x00040047,0x0000003c,0x00000021,0x00000007,0x00040047, + 0x0000003c,0x00000022,0x00000000,0x00040047,0x00000047,0x00000021,0x00000000,0x00040047, + 0x00000047,0x00000022,0x00000000,0x00040047,0x00000056,0x00000021,0x00000005,0x00040047, + 0x00000056,0x00000022,0x00000000,0x00040047,0x00000060,0x00000021,0x00000001,0x00040047, + 0x00000060,0x00000022,0x00000000,0x00040047,0x00000065,0x00000021,0x00000002,0x00040047, + 0x00000065,0x00000022,0x00000000,0x00040047,0x0000006a,0x00000021,0x00000003,0x00040047, + 0x0000006a,0x00000022,0x00000000,0x00040047,0x0000006f,0x00000021,0x00000004,0x00040047, + 0x0000006f,0x00000022,0x00000000,0x00040047,0x00000074,0x00000006,0x00000004,0x00030047, + 0x00000075,0x00000002,0x00040048,0x00000075,0x00000000,0x00000017,0x00050048,0x00000075, + 0x00000000,0x00000023,0x00000000,0x00030047,0x00000077,0x00000017,0x00040047,0x00000077, + 0x00000021,0x00000006,0x00040047,0x00000077,0x00000022,0x00000000,0x00040047,0x000000b7, + 0x0000000b,0x0000001c,0x00040047,0x000000c3,0x00000021,0x000003e8,0x00040047,0x000000c3, + 0x00000022,0x00000000,0x00040047,0x000000d0,0x0000000b,0x00000019,0x00020013,0x00000002, + 0x00030021,0x00000003,0x00000002,0x00020014,0x00000006,0x00030021,0x00000007,0x00000006, + 0x00040015,0x0000000c,0x00000020,0x00000001,0x00040017,0x0000000d,0x0000000c,0x00000002, + 0x00040020,0x0000000e,0x00000007,0x0000000d,0x00030016,0x0000000f,0x00000020,0x00040017, + 0x00000010,0x0000000f,0x00000002,0x00040020,0x00000011,0x00000007,0x00000010,0x00050021, + 0x00000012,0x00000002,0x0000000e,0x00000011,0x00040015,0x00000017,0x00000020,0x00000000, + 0x00040020,0x00000018,0x00000007,0x00000017,0x00050021,0x00000019,0x00000002,0x0000000e, + 0x00000018,0x00040020,0x0000002a,0x00000007,0x0000000c,0x00040021,0x0000002b,0x00000017, + 0x0000002a,0x00050021,0x0000002f,0x00000002,0x0000002a,0x00000018,0x00040021,0x00000034, + 0x00000002,0x0000000e,0x00040017,0x00000038,0x0000000f,0x00000004,0x00040017,0x00000039, + 0x0000000f,0x00000003,0x001d001e,0x0000003a,0x0000000d,0x0000000d,0x00000010,0x0000000f, + 0x0000000f,0x0000000d,0x0000000c,0x0000000c,0x00000038,0x0000000f,0x0000000c,0x0000000d, + 0x00000010,0x0000000c,0x00000017,0x0000000d,0x0000000c,0x0000000c,0x0000000d,0x0000000d, + 0x00000039,0x00000017,0x00000010,0x0000000f,0x0000000c,0x00000010,0x00000010,0x00040020, + 0x0000003b,0x00000002,0x0000003a,0x0004003b,0x0000003b,0x0000003c,0x00000002,0x0004002b, + 0x0000000c,0x0000003d,0x00000007,0x00040020,0x0000003e,0x00000002,0x0000000c,0x0004002b, + 0x0000000c,0x00000041,0x00000001,0x00090019,0x00000045,0x00000017,0x00000001,0x00000000, + 0x00000000,0x00000000,0x00000001,0x00000000,0x00040020,0x00000046,0x00000000,0x00000045, + 0x0004003b,0x00000046,0x00000047,0x00000000,0x0004002b,0x0000000c,0x00000049,0x00000000, + 0x0005002c,0x0000000d,0x0000004a,0x00000041,0x00000049,0x00040017,0x0000004b,0x00000017, + 0x00000004,0x0004002b,0x00000017,0x0000004d,0x00000000,0x0004002b,0x00000017,0x0000004f, + 0x0000000f,0x00090019,0x00000054,0x0000000f,0x00000001,0x00000000,0x00000000,0x00000000, + 0x00000002,0x0000000d,0x00040020,0x00000055,0x00000000,0x00000054,0x0004003b,0x00000055, + 0x00000056,0x00000000,0x0004002b,0x0000000f,0x0000005a,0x00000000,0x00090019,0x0000005e, + 0x00000017,0x00000001,0x00000000,0x00000000,0x00000000,0x00000002,0x00000021,0x00040020, + 0x0000005f,0x00000000,0x0000005e,0x0004003b,0x0000005f,0x00000060,0x00000000,0x0004003b, + 0x0000005f,0x00000065,0x00000000,0x0004003b,0x0000005f,0x0000006a,0x00000000,0x0004003b, + 0x0000005f,0x0000006f,0x00000000,0x0003001d,0x00000074,0x00000017,0x0003001e,0x00000075, + 0x00000074,0x00040020,0x00000076,0x0000000c,0x00000075,0x0004003b,0x00000076,0x00000077, + 0x0000000c,0x00040020,0x00000079,0x0000000c,0x00000017,0x0005002c,0x0000000d,0x00000085, + 0x00000049,0x00000049,0x00040017,0x00000086,0x00000006,0x00000002,0x0004002b,0x00000017, + 0x0000009b,0x00000001,0x0005002c,0x00000010,0x000000b0,0x0000005a,0x0000005a,0x00040017, + 0x000000b5,0x00000017,0x00000003,0x00040020,0x000000b6,0x00000001,0x000000b5,0x0004003b, + 0x000000b6,0x000000b7,0x00000001,0x00040017,0x000000b8,0x00000017,0x00000002,0x0004002b, + 0x0000000f,0x000000be,0x387fda40,0x0004002b,0x0000000f,0x000000bf,0x477fe000,0x0004002b, + 0x0000000f,0x000000c0,0x37801002,0x0002001a,0x000000c1,0x00040020,0x000000c2,0x00000000, + 0x000000c1,0x0004003b,0x000000c2,0x000000c3,0x00000000,0x0004002b,0x0000000f,0x000000c4, + 0x3a83126f,0x0004002b,0x0000000f,0x000000c5,0x7f7fffff,0x0004002b,0x0000000f,0x000000c6, + 0x00800000,0x0004002b,0x00000017,0x000000c7,0x00000020,0x0004002b,0x00000017,0x000000c8, + 0x00000010,0x0004002b,0x00000017,0x000000c9,0x00000005,0x0004002b,0x00000017,0x000000ca, + 0x0000000a,0x0004002b,0x00000017,0x000000cb,0x80000000,0x0004002b,0x00000017,0x000000cc, + 0x0000001f,0x0004002b,0x00000017,0x000000cd,0x000003ff,0x0004002b,0x00000017,0x000000ce, + 0x00000015,0x0004002b,0x00000017,0x000000cf,0x00000008,0x0006002c,0x000000b5,0x000000d0, + 0x000000cf,0x000000cf,0x0000009b,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003, + 0x000200f8,0x00000005,0x0004003b,0x0000000e,0x000000bc,0x00000007,0x0004003d,0x000000b5, + 0x000000b9,0x000000b7,0x0007004f,0x000000b8,0x000000ba,0x000000b9,0x000000b9,0x00000000, + 0x00000001,0x0004007c,0x0000000d,0x000000bb,0x000000ba,0x0003003e,0x000000bc,0x000000bb, + 0x00050039,0x00000002,0x000000bd,0x00000036,0x000000bc,0x000100fd,0x00010038,0x00050036, + 0x00000006,0x00000008,0x00000000,0x00000007,0x000200f8,0x00000009,0x00050041,0x0000003e, + 0x0000003f,0x0000003c,0x0000003d,0x0004003d,0x0000000c,0x00000040,0x0000003f,0x000500aa, + 0x00000006,0x00000042,0x00000040,0x00000041,0x000200fe,0x00000042,0x00010038,0x00050036, + 0x00000006,0x0000000a,0x00000000,0x00000007,0x000200f8,0x0000000b,0x0004003d,0x00000045, + 0x00000048,0x00000047,0x0007005f,0x0000004b,0x0000004c,0x00000048,0x0000004a,0x00000002, + 0x00000049,0x00050051,0x00000017,0x0000004e,0x0000004c,0x00000000,0x000500c7,0x00000017, + 0x00000050,0x0000004e,0x0000004f,0x000500ab,0x00000006,0x00000051,0x00000050,0x0000004d, + 0x000200fe,0x00000051,0x00010038,0x00050036,0x00000002,0x00000015,0x00000000,0x00000012, + 0x00030037,0x0000000e,0x00000013,0x00030037,0x00000011,0x00000014,0x000200f8,0x00000016, + 0x0004003d,0x00000054,0x00000057,0x00000056,0x0004003d,0x0000000d,0x00000058,0x00000013, + 0x0004003d,0x00000010,0x00000059,0x00000014,0x00050051,0x0000000f,0x0000005b,0x00000059, + 0x00000000,0x00050051,0x0000000f,0x0000005c,0x00000059,0x00000001,0x00070050,0x00000038, + 0x0000005d,0x0000005b,0x0000005c,0x0000005a,0x0000005a,0x00040063,0x00000057,0x00000058, + 0x0000005d,0x000100fd,0x00010038,0x00050036,0x00000002,0x0000001c,0x00000000,0x00000019, + 0x00030037,0x0000000e,0x0000001a,0x00030037,0x00000018,0x0000001b,0x000200f8,0x0000001d, + 0x0004003d,0x0000005e,0x00000061,0x00000060,0x0004003d,0x0000000d,0x00000062,0x0000001a, + 0x0004003d,0x00000017,0x00000063,0x0000001b,0x00070050,0x0000004b,0x00000064,0x00000063, + 0x0000004d,0x0000004d,0x0000004d,0x00040063,0x00000061,0x00000062,0x00000064,0x000100fd, + 0x00010038,0x00050036,0x00000002,0x00000020,0x00000000,0x00000019,0x00030037,0x0000000e, + 0x0000001e,0x00030037,0x00000018,0x0000001f,0x000200f8,0x00000021,0x0004003d,0x0000005e, + 0x00000066,0x00000065,0x0004003d,0x0000000d,0x00000067,0x0000001e,0x0004003d,0x00000017, + 0x00000068,0x0000001f,0x00070050,0x0000004b,0x00000069,0x00000068,0x0000004d,0x0000004d, + 0x0000004d,0x00040063,0x00000066,0x00000067,0x00000069,0x000100fd,0x00010038,0x00050036, + 0x00000002,0x00000024,0x00000000,0x00000019,0x00030037,0x0000000e,0x00000022,0x00030037, + 0x00000018,0x00000023,0x000200f8,0x00000025,0x0004003d,0x0000005e,0x0000006b,0x0000006a, + 0x0004003d,0x0000000d,0x0000006c,0x00000022,0x0004003d,0x00000017,0x0000006d,0x00000023, + 0x00070050,0x0000004b,0x0000006e,0x0000006d,0x0000004d,0x0000004d,0x0000004d,0x00040063, + 0x0000006b,0x0000006c,0x0000006e,0x000100fd,0x00010038,0x00050036,0x00000002,0x00000028, + 0x00000000,0x00000019,0x00030037,0x0000000e,0x00000026,0x00030037,0x00000018,0x00000027, + 0x000200f8,0x00000029,0x0004003d,0x0000005e,0x00000070,0x0000006f,0x0004003d,0x0000000d, + 0x00000071,0x00000026,0x0004003d,0x00000017,0x00000072,0x00000027,0x00070050,0x0000004b, + 0x00000073,0x00000072,0x0000004d,0x0000004d,0x0000004d,0x00040063,0x00000070,0x00000071, + 0x00000073,0x000100fd,0x00010038,0x00050036,0x00000017,0x0000002d,0x00000000,0x0000002b, + 0x00030037,0x0000002a,0x0000002c,0x000200f8,0x0000002e,0x0004003d,0x0000000c,0x00000078, + 0x0000002c,0x00060041,0x00000079,0x0000007a,0x00000077,0x00000049,0x00000078,0x0004003d, + 0x00000017,0x0000007b,0x0000007a,0x000200fe,0x0000007b,0x00010038,0x00050036,0x00000002, + 0x00000032,0x00000000,0x0000002f,0x00030037,0x0000002a,0x00000030,0x00030037,0x00000018, + 0x00000031,0x000200f8,0x00000033,0x0004003d,0x0000000c,0x0000007e,0x00000030,0x0004003d, + 0x00000017,0x0000007f,0x00000031,0x00060041,0x00000079,0x00000080,0x00000077,0x00000049, + 0x0000007e,0x0003003e,0x00000080,0x0000007f,0x000100fd,0x00010038,0x00050036,0x00000002, + 0x00000036,0x00000000,0x00000034,0x00030037,0x0000000e,0x00000035,0x000200f8,0x00000037, + 0x0004003b,0x0000002a,0x00000081,0x00000007,0x0004003b,0x00000018,0x00000082,0x00000007, + 0x0004003b,0x0000002a,0x00000093,0x00000007,0x0004003b,0x00000018,0x00000094,0x00000007, + 0x0004003b,0x00000018,0x00000097,0x00000007,0x0004003b,0x0000002a,0x00000098,0x00000007, + 0x0004003b,0x0000002a,0x0000009d,0x00000007,0x0004003b,0x00000018,0x0000009e,0x00000007, + 0x0004003b,0x0000000e,0x000000a0,0x00000007,0x0004003b,0x00000018,0x000000a2,0x00000007, + 0x0004003b,0x0000000e,0x000000a4,0x00000007,0x0004003b,0x00000018,0x000000a6,0x00000007, + 0x0004003b,0x0000000e,0x000000a8,0x00000007,0x0004003b,0x00000018,0x000000aa,0x00000007, + 0x0004003b,0x0000000e,0x000000ac,0x00000007,0x0004003b,0x00000018,0x000000ae,0x00000007, + 0x0004003b,0x0000000e,0x000000b1,0x00000007,0x0004003b,0x00000011,0x000000b3,0x00000007, + 0x0003003e,0x00000081,0x00000049,0x0003003e,0x00000082,0x0000004d,0x00060039,0x00000002, + 0x00000083,0x00000032,0x00000081,0x00000082,0x0004003d,0x0000000d,0x00000084,0x00000035, + 0x000500aa,0x00000086,0x00000087,0x00000084,0x00000085,0x0004009b,0x00000006,0x00000088, + 0x00000087,0x000300f7,0x0000008a,0x00000000,0x000400fa,0x00000088,0x00000089,0x0000008a, + 0x000200f8,0x00000089,0x00040039,0x00000006,0x0000008b,0x00000008,0x000400a8,0x00000006, + 0x0000008c,0x0000008b,0x000300f7,0x0000008e,0x00000000,0x000400fa,0x0000008c,0x0000008d, + 0x0000008e,0x000200f8,0x0000008d,0x00040039,0x00000006,0x0000008f,0x0000000a,0x000200f9, + 0x0000008e,0x000200f8,0x0000008e,0x000700f5,0x00000006,0x00000090,0x0000008b,0x00000089, + 0x0000008f,0x0000008d,0x000300f7,0x00000092,0x00000000,0x000400fa,0x00000090,0x00000091, + 0x00000096,0x000200f8,0x00000091,0x0003003e,0x00000093,0x00000041,0x0003003e,0x00000094, + 0x0000004d,0x00060039,0x00000002,0x00000095,0x00000032,0x00000093,0x00000094,0x000200f9, + 0x00000092,0x000200f8,0x00000096,0x0003003e,0x00000098,0x00000041,0x00050039,0x00000017, + 0x00000099,0x0000002d,0x00000098,0x0003003e,0x00000097,0x00000099,0x0004003d,0x00000017, + 0x0000009a,0x00000097,0x00050080,0x00000017,0x0000009c,0x0000009a,0x0000009b,0x0003003e, + 0x0000009d,0x00000041,0x0003003e,0x0000009e,0x0000009c,0x00060039,0x00000002,0x0000009f, + 0x00000032,0x0000009d,0x0000009e,0x000200f9,0x00000092,0x000200f8,0x00000092,0x000200f9, + 0x0000008a,0x000200f8,0x0000008a,0x0004003d,0x0000000d,0x000000a1,0x00000035,0x0003003e, + 0x000000a0,0x000000a1,0x0003003e,0x000000a2,0x0000004d,0x00060039,0x00000002,0x000000a3, + 0x0000001c,0x000000a0,0x000000a2,0x0004003d,0x0000000d,0x000000a5,0x00000035,0x0003003e, + 0x000000a4,0x000000a5,0x0003003e,0x000000a6,0x0000004d,0x00060039,0x00000002,0x000000a7, + 0x00000020,0x000000a4,0x000000a6,0x0004003d,0x0000000d,0x000000a9,0x00000035,0x0003003e, + 0x000000a8,0x000000a9,0x0003003e,0x000000aa,0x0000004d,0x00060039,0x00000002,0x000000ab, + 0x00000024,0x000000a8,0x000000aa,0x0004003d,0x0000000d,0x000000ad,0x00000035,0x0003003e, + 0x000000ac,0x000000ad,0x0003003e,0x000000ae,0x0000004d,0x00060039,0x00000002,0x000000af, + 0x00000028,0x000000ac,0x000000ae,0x0004003d,0x0000000d,0x000000b2,0x00000035,0x0003003e, + 0x000000b1,0x000000b2,0x0003003e,0x000000b3,0x000000b0,0x00060039,0x00000002,0x000000b4, + 0x00000015,0x000000b1,0x000000b3,0x000100fd,0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_of_compute_optical_flow_v5_comp_spv.h b/gpu/vk/shaders/fsr3_of_compute_optical_flow_v5_comp_spv.h new file mode 100644 index 000000000..f2c41a35a --- /dev/null +++ b/gpu/vk/shaders/fsr3_of_compute_optical_flow_v5_comp_spv.h @@ -0,0 +1,957 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_OF_COMPUTE_OPTICAL_FLOW_V5_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x000004d8,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000031,0x00020011,0x0000003d,0x00020011,0x0000003f,0x0006000b,0x00000001,0x4c534c47, + 0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,0x000a000f,0x00000005, + 0x00000004,0x6e69616d,0x00000000,0x000000b2,0x000004bf,0x000004c3,0x000004c7,0x000004cb, + 0x00060010,0x00000004,0x00000011,0x00000040,0x00000001,0x00000001,0x00030003,0x00000002, + 0x000001c2,0x000b0004,0x455f4c47,0x735f5458,0x6c706d61,0x656c7265,0x745f7373,0x75747865, + 0x665f6572,0x74636e75,0x736e6f69,0x00000000,0x000b0004,0x455f4c47,0x735f5458,0x65646168, + 0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004, + 0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365, + 0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572, + 0x00657669,0x000a0004,0x4b5f4c47,0x735f5248,0x65646168,0x75735f72,0x6f726762,0x615f7075, + 0x68746972,0x6974656d,0x00000063,0x00090004,0x4b5f4c47,0x735f5248,0x65646168,0x75735f72, + 0x6f726762,0x625f7075,0x6f6c6c61,0x00000074,0x00090004,0x4b5f4c47,0x735f5248,0x65646168, + 0x75735f72,0x6f726762,0x625f7075,0x63697361,0x00000000,0x00080004,0x4b5f4c47,0x735f5248, + 0x65646168,0x75735f72,0x6f726762,0x715f7075,0x00646175,0x00090004,0x4b5f4c47,0x735f5248, + 0x65646168,0x75735f72,0x6f726762,0x735f7075,0x66667568,0x0000656c,0x00040005,0x00000004, + 0x6e69616d,0x00000000,0x00070005,0x0000000b,0x42786666,0x64616f72,0x74736163,0x31752834, + 0x0000003b,0x00040005,0x0000000a,0x756c6176,0x00000065,0x00070005,0x0000000f,0x57786666, + 0x49657661,0x72694673,0x614c7473,0x0028656e,0x00060005,0x00000013,0x57786666,0x4d657661, + 0x75286e69,0x00003b31,0x00030005,0x00000012,0x00000061,0x00060005,0x00000016,0x57786666, + 0x53657661,0x75286d75,0x00003b31,0x00030005,0x00000015,0x00000061,0x00070005,0x00000019, + 0x57786666,0x4c657661,0x43656e61,0x746e756f,0x00000028,0x00060005,0x00000020,0x4d786666, + 0x69286e69,0x31693b31,0x0000003b,0x00030005,0x0000001e,0x00000078,0x00030005,0x0000001f, + 0x00000079,0x00060005,0x00000025,0x4d786666,0x75286e69,0x31753b31,0x0000003b,0x00030005, + 0x00000023,0x00000078,0x00030005,0x00000024,0x00000079,0x00060005,0x00000029,0x4d786666, + 0x69287861,0x31693b31,0x0000003b,0x00030005,0x00000027,0x00000078,0x00030005,0x00000028, + 0x00000079,0x000b0005,0x00000032,0x50746547,0x656b6361,0x6d754c64,0x31692861,0x3b31693b, + 0x753b3175,0x31753b31,0x3b31753b,0x00000000,0x00040005,0x0000002c,0x74646977,0x00000068, + 0x00030005,0x0000002d,0x00000078,0x00040005,0x0000002e,0x616d756c,0x00000030,0x00040005, + 0x0000002f,0x616d756c,0x00000031,0x00040005,0x00000030,0x616d756c,0x00000032,0x00040005, + 0x00000031,0x616d756c,0x00000033,0x00050005,0x00000036,0x28646153,0x753b3175,0x00003b31, + 0x00030005,0x00000034,0x00000061,0x00030005,0x00000035,0x00000062,0x00060005,0x0000003c, + 0x64615351,0x3b317528,0x753b3175,0x00003b31,0x00030005,0x00000039,0x00003061,0x00030005, + 0x0000003a,0x00003161,0x00030005,0x0000003b,0x00000062,0x00060005,0x00000040,0x70736944, + 0x5379616c,0x28657a69,0x00000000,0x00050005,0x00000042,0x6d617246,0x646e4965,0x00287865, + 0x00090005,0x00000044,0x6974704f,0x466c6163,0x50776f6c,0x6d617279,0x654c6469,0x286c6576, + 0x00000000,0x000a0005,0x00000046,0x6974704f,0x466c6163,0x50776f6c,0x6d617279,0x654c6469, + 0x436c6576,0x746e756f,0x00000028,0x00090005,0x0000004b,0x64616f4c,0x6974704f,0x466c6163, + 0x49776f6c,0x7475706e,0x32697628,0x0000003b,0x00040005,0x0000004a,0x50785069,0x0000736f, + 0x000b0005,0x0000004e,0x64616f4c,0x6974704f,0x466c6163,0x50776f6c,0x69766572,0x4973756f, + 0x7475706e,0x32697628,0x0000003b,0x00040005,0x0000004d,0x50785069,0x0000736f,0x00080005, + 0x00000052,0x64616f4c,0x704f7752,0x61636974,0x6f6c466c,0x69762877,0x00003b32,0x00040005, + 0x00000051,0x50785069,0x0000736f,0x00090005,0x00000057,0x726f7453,0x74704f65,0x6c616369, + 0x776f6c46,0x32697628,0x3269763b,0x0000003b,0x00040005,0x00000055,0x50785069,0x0000736f, + 0x00060005,0x00000056,0x69746f6d,0x65566e6f,0x726f7463,0x00000000,0x00070005,0x0000005b, + 0x64616f4c,0x43537752,0x74754f44,0x28747570,0x003b3169,0x00040005,0x0000005a,0x646e4969, + 0x00007865,0x00060005,0x0000005d,0x63537349,0x43656e65,0x676e6168,0x00286465,0x000a0005, + 0x00000060,0x64616f4c,0x73726946,0x616d4974,0x61506567,0x64656b63,0x616d754c,0x32697628, + 0x0000003b,0x00040005,0x0000005f,0x50785069,0x0000736f,0x000a0005,0x00000063,0x64616f4c, + 0x6f636553,0x6d49646e,0x50656761,0x656b6361,0x6d754c64,0x69762861,0x00003b32,0x00040005, + 0x00000062,0x50785069,0x0000736f,0x00080005,0x0000006a,0x636f6c42,0x6461536b,0x75283436, + 0x31693b31,0x3b31693b,0x003b3169,0x00050005,0x00000066,0x636f6c62,0x6461536b,0x006d7553, + 0x00050005,0x00000067,0x636f4c69,0x6e496c61,0x00786564,0x00060005,0x00000068,0x6e614c69, + 0x426f5465,0x6b636f6c,0x00006449,0x00040005,0x00000069,0x636f6c62,0x0000006b,0x000a0005, + 0x0000006f,0x4d646153,0x694d7061,0x6465526e,0x69746375,0x35326e6f,0x69762836,0x31693b32, + 0x0000003b,0x00050005,0x0000006d,0x61655369,0x49686372,0x00000064,0x00050005,0x0000006e, + 0x636f4c69,0x6e496c61,0x00786564,0x00090005,0x00000074,0x64616f4c,0x72616553,0x75426863, + 0x72656666,0x3b316928,0x3b326976,0x00000000,0x00050005,0x00000072,0x636f4c69,0x6e496c61, + 0x00786564,0x00060005,0x00000073,0x50785069,0x6853736f,0x65746669,0x00000064,0x00080005, + 0x00000078,0x636c6143,0x74616c75,0x61535165,0x28327364,0x3b326976,0x00000000,0x00050005, + 0x00000077,0x61655369,0x49686372,0x00000064,0x00050005,0x0000007d,0x5f736261,0x69762832, + 0x00003b32,0x00030005,0x0000007c,0x006c6176,0x00080005,0x00000080,0x6f636e45,0x65536564, + 0x68637261,0x726f6f43,0x69762864,0x00003b32,0x00040005,0x0000007f,0x726f6f63,0x00000064, + 0x00080005,0x00000084,0x6f636544,0x65536564,0x68637261,0x726f6f43,0x31752864,0x0000003b, + 0x00040005,0x00000083,0x73746962,0x00000000,0x00080005,0x0000008a,0x70657250,0x53657261, + 0x614d6461,0x69762870,0x75763b32,0x00003b34,0x00050005,0x00000088,0x61655369,0x49686372, + 0x00000064,0x00040005,0x00000089,0x64617371,0x00000000,0x00060005,0x00000090,0x65664241, + 0x3b317528,0x753b3175,0x00003b31,0x00030005,0x0000008d,0x00637273,0x00030005,0x0000008e, + 0x0066666f,0x00040005,0x0000008f,0x73746962,0x00000000,0x000a0005,0x00000098,0x5470614d, + 0x61657268,0x76287364,0x693b3269,0x69763b31,0x69763b32,0x31693b32,0x0000003b,0x00050005, + 0x00000093,0x6f724769,0x64497075,0x00000000,0x00050005,0x00000094,0x636f4c69,0x6e496c61, + 0x00786564,0x00050005,0x00000095,0x61655369,0x49686372,0x00000064,0x00040005,0x00000096, + 0x50785069,0x0000736f,0x00060005,0x00000097,0x6e614c69,0x426f5465,0x6b636f6c,0x00006449, + 0x000d0005,0x0000009f,0x706d6f43,0x4f657475,0x63697470,0x6c466c61,0x6441776f,0x636e6176, + 0x76286465,0x763b3269,0x763b3269,0x693b3269,0x00003b31,0x00050005,0x0000009b,0x6f6c4769, + 0x496c6162,0x00000064,0x00050005,0x0000009c,0x636f4c69,0x64496c61,0x00000000,0x00050005, + 0x0000009d,0x6f724769,0x64497075,0x00000000,0x00050005,0x0000009e,0x636f4c69,0x6e496c61, + 0x00786564,0x00060005,0x000000b2,0x535f6c67,0x72676275,0x5370756f,0x00657a69,0x00050005, + 0x000000c7,0x6b636170,0x754c6465,0x0000616d,0x00070005,0x000000da,0x4f74756f,0x72635366, + 0x466e6565,0x656c6c69,0x00000072,0x00070005,0x00000101,0x4f74756f,0x72635366,0x466e6565, + 0x656c6c69,0x00000072,0x00030005,0x00000157,0x00646173,0x00040005,0x00000158,0x61726170, + 0x0000006d,0x00040005,0x0000015a,0x61726170,0x0000006d,0x00040005,0x00000167,0x61726170, + 0x0000006d,0x00040005,0x00000169,0x61726170,0x0000006d,0x00040005,0x00000176,0x61726170, + 0x0000006d,0x00040005,0x00000178,0x61726170,0x0000006d,0x00040005,0x00000183,0x61726170, + 0x0000006d,0x00040005,0x00000185,0x61726170,0x0000006d,0x00040005,0x0000018e,0x464f6263, + 0x0000745f,0x00090006,0x0000018e,0x00000000,0x706e4969,0x754c7475,0x6552616d,0x756c6f73, + 0x6e6f6974,0x00000000,0x000a0006,0x0000018e,0x00000001,0x74704f75,0x6c616369,0x776f6c46, + 0x61727950,0x4c64696d,0x6c657665,0x00000000,0x000b0006,0x0000018e,0x00000002,0x74704f75, + 0x6c616369,0x776f6c46,0x61727950,0x4c64696d,0x6c657665,0x6e756f43,0x00000074,0x00060006, + 0x0000018e,0x00000003,0x61724669,0x6e49656d,0x00786564,0x000a0006,0x0000018e,0x00000004, + 0x6b636162,0x66667562,0x72547265,0x66736e61,0x75467265,0x6974636e,0x00006e6f,0x00070006, + 0x0000018e,0x00000005,0x4d6e696d,0x754c7861,0x616e696d,0x0065636e,0x00040005,0x00000190, + 0x464f6263,0x00000000,0x00080005,0x000001a5,0x706f5f72,0x61636974,0x6c665f6c,0x695f776f, + 0x7475706e,0x00000000,0x000a0005,0x000001ac,0x706f5f72,0x61636974,0x6c665f6c,0x705f776f, + 0x69766572,0x5f73756f,0x75706e69,0x00000074,0x00060005,0x000001b5,0x6f5f7772,0x63697470, + 0x665f6c61,0x00776f6c,0x00090005,0x000001c5,0x6f5f7772,0x63697470,0x665f6c61,0x5f776f6c, + 0x5f646373,0x7074756f,0x00007475,0x00040005,0x000001d5,0x61726170,0x0000006d,0x00070005, + 0x000001dc,0x616d756c,0x74786554,0x57657275,0x68746469,0x00000000,0x00070005,0x000001e1, + 0x616d756c,0x74786554,0x48657275,0x68676965,0x00000074,0x00050005,0x000001e6,0x756a6461, + 0x64657473,0x00736f50,0x00040005,0x000001e9,0x61726170,0x0000006d,0x00040005,0x000001ea, + 0x61726170,0x0000006d,0x00040005,0x000001ee,0x61726170,0x0000006d,0x00040005,0x000001ef, + 0x61726170,0x0000006d,0x00040005,0x000001f3,0x61726170,0x0000006d,0x00040005,0x000001f4, + 0x61726170,0x0000006d,0x00040005,0x000001f8,0x61726170,0x0000006d,0x00040005,0x000001f9, + 0x61726170,0x0000006d,0x00040005,0x000001fc,0x616d756c,0x00000030,0x00040005,0x00000200, + 0x61726170,0x0000006d,0x00040005,0x00000202,0x616d756c,0x00000031,0x00040005,0x00000206, + 0x61726170,0x0000006d,0x00040005,0x00000208,0x616d756c,0x00000032,0x00040005,0x0000020c, + 0x61726170,0x0000006d,0x00040005,0x0000020e,0x616d756c,0x00000033,0x00040005,0x00000212, + 0x61726170,0x0000006d,0x00040005,0x00000214,0x61726170,0x0000006d,0x00040005,0x00000216, + 0x61726170,0x0000006d,0x00040005,0x00000219,0x61726170,0x0000006d,0x00040005,0x0000021b, + 0x61726170,0x0000006d,0x00040005,0x0000021d,0x61726170,0x0000006d,0x00040005,0x0000021f, + 0x61726170,0x0000006d,0x00070005,0x00000224,0x616d756c,0x74786554,0x57657275,0x68746469, + 0x00000000,0x00070005,0x00000229,0x616d756c,0x74786554,0x48657275,0x68676965,0x00000074, + 0x00050005,0x0000022e,0x756a6461,0x64657473,0x00736f50,0x00040005,0x00000231,0x61726170, + 0x0000006d,0x00040005,0x00000232,0x61726170,0x0000006d,0x00040005,0x00000236,0x61726170, + 0x0000006d,0x00040005,0x00000237,0x61726170,0x0000006d,0x00040005,0x0000023b,0x61726170, + 0x0000006d,0x00040005,0x0000023c,0x61726170,0x0000006d,0x00040005,0x00000240,0x61726170, + 0x0000006d,0x00040005,0x00000241,0x61726170,0x0000006d,0x00040005,0x00000244,0x616d756c, + 0x00000030,0x00040005,0x00000247,0x61726170,0x0000006d,0x00040005,0x00000249,0x616d756c, + 0x00000031,0x00040005,0x0000024c,0x61726170,0x0000006d,0x00040005,0x0000024e,0x616d756c, + 0x00000032,0x00040005,0x00000251,0x61726170,0x0000006d,0x00040005,0x00000253,0x616d756c, + 0x00000033,0x00040005,0x00000256,0x61726170,0x0000006d,0x00040005,0x00000258,0x61726170, + 0x0000006d,0x00040005,0x0000025a,0x61726170,0x0000006d,0x00040005,0x0000025d,0x61726170, + 0x0000006d,0x00040005,0x0000025f,0x61726170,0x0000006d,0x00040005,0x00000261,0x61726170, + 0x0000006d,0x00040005,0x00000263,0x61726170,0x0000006d,0x00040005,0x0000026d,0x61726170, + 0x0000006d,0x00040005,0x00000275,0x65766177,0x00006449,0x00050005,0x0000027d,0x76615773, + 0x64615365,0x00000000,0x00040005,0x0000028d,0x306e696d,0x00000031,0x00060005,0x00000294, + 0x4d646173,0x75427061,0x72656666,0x00000000,0x00040005,0x0000029d,0x61726170,0x0000006d, + 0x00040005,0x000002a0,0x61726170,0x0000006d,0x00040005,0x000002a4,0x326e696d,0x00000033, + 0x00040005,0x000002ad,0x61726170,0x0000006d,0x00040005,0x000002b0,0x61726170,0x0000006d, + 0x00040005,0x000002b4,0x306e696d,0x00333231,0x00040005,0x000002b5,0x61726170,0x0000006d, + 0x00040005,0x000002b7,0x61726170,0x0000006d,0x00040005,0x000002ba,0x61726170,0x0000006d, + 0x00040005,0x000002c1,0x65766177,0x00006449,0x00050005,0x000002c7,0x76615773,0x6e694d65, + 0x00000000,0x00040005,0x000002cd,0x61726170,0x0000006d,0x00040005,0x000002cf,0x61726170, + 0x0000006d,0x00040005,0x000002d6,0x65736162,0x00000058,0x00040005,0x000002da,0x65736162, + 0x00000059,0x00030005,0x000002de,0x00006469,0x00030005,0x000002e8,0x00786469,0x00030005, + 0x000002ec,0x00796469,0x00030005,0x000002ef,0x00000078,0x00030005,0x000002f4,0x00000079, + 0x00060005,0x000002fc,0x72616573,0x75426863,0x72656666,0x00000000,0x00040005,0x00000301, + 0x61726170,0x0000006d,0x00030005,0x00000307,0x00646173,0x00040005,0x00000308,0x61726170, + 0x0000006d,0x00030005,0x0000030a,0x00007964,0x00050005,0x00000312,0x4f776f72,0x65736666, + 0x00000074,0x00030005,0x00000318,0x00003061,0x00030005,0x0000031f,0x00003161,0x00030005, + 0x00000327,0x00003261,0x00040005,0x00000332,0x65786970,0x0000736c,0x00040005,0x00000334, + 0x61726170,0x0000006d,0x00040005,0x00000336,0x61726170,0x0000006d,0x00040005,0x00000338, + 0x61726170,0x0000006d,0x00040005,0x0000033f,0x61726170,0x0000006d,0x00040005,0x00000341, + 0x61726170,0x0000006d,0x00040005,0x00000343,0x61726170,0x0000006d,0x00030005,0x0000034e, + 0x00706d74,0x00040005,0x00000350,0x6b73616d,0x00000000,0x00030005,0x00000356,0x00736572, + 0x00050005,0x00000360,0x43736261,0x64726f6f,0x00000000,0x00040005,0x00000364,0x61726170, + 0x0000006d,0x00030005,0x00000379,0x00007864,0x00030005,0x0000037e,0x00007964,0x00040005, + 0x00000397,0x61726170,0x0000006d,0x00040005,0x000003a9,0x61726170,0x0000006d,0x00040005, + 0x000003bb,0x61726170,0x0000006d,0x00040005,0x000003cd,0x61726170,0x0000006d,0x00040005, + 0x000003d1,0x6b73616d,0x00000000,0x00040005,0x000003de,0x61726170,0x0000006d,0x00040005, + 0x000003df,0x61726170,0x0000006d,0x00040005,0x000003e0,0x61726170,0x0000006d,0x00040005, + 0x000003e5,0x61726170,0x0000006d,0x00040005,0x000003e6,0x61726170,0x0000006d,0x00040005, + 0x000003e7,0x61726170,0x0000006d,0x00040005,0x000003ed,0x61726170,0x0000006d,0x00040005, + 0x000003ee,0x61726170,0x0000006d,0x00040005,0x000003ef,0x61726170,0x0000006d,0x00040005, + 0x000003f3,0x61726170,0x0000006d,0x00040005,0x000003f4,0x61726170,0x0000006d,0x00040005, + 0x000003f5,0x61726170,0x0000006d,0x00050005,0x00000401,0x61655369,0x49686372,0x00000064, + 0x00040005,0x00000402,0x50785069,0x0000736f,0x00060005,0x00000403,0x6e614c69,0x426f5465, + 0x6b636f6c,0x00006449,0x00040005,0x00000404,0x61726170,0x0000006d,0x00040005,0x00000406, + 0x61726170,0x0000006d,0x00040005,0x00000408,0x61726170,0x0000006d,0x00040005,0x00000409, + 0x61726170,0x0000006d,0x00040005,0x0000040a,0x61726170,0x0000006d,0x00060005,0x0000040f, + 0x72727563,0x4f746e65,0x736f5046,0x00000000,0x00040005,0x00000424,0x61726170,0x0000006d, + 0x00040005,0x00000426,0x61726170,0x0000006d,0x000a0005,0x0000042a,0x65735562,0x64657250, + 0x69746369,0x72466e6f,0x72506d6f,0x6f697665,0x654c7375,0x006c6576,0x00070005,0x0000042f, + 0x6b636170,0x754c6465,0x345f616d,0x636f6c62,0x0000736b,0x00040005,0x00000430,0x61726170, + 0x0000006d,0x00080005,0x00000433,0x76657270,0x6b636150,0x754c6465,0x345f616d,0x636f6c62, + 0x0000736b,0x00040005,0x00000434,0x61726170,0x0000006d,0x00050005,0x00000437,0x5f646173, + 0x6f6c6234,0x00736b63,0x00040005,0x00000438,0x61726170,0x0000006d,0x00040005,0x0000043a, + 0x61726170,0x0000006d,0x00060005,0x0000043d,0x7247666f,0x4f70756f,0x65736666,0x00000074, + 0x00070005,0x00000441,0x65786970,0x6f72476c,0x664f7075,0x74657366,0x00000000,0x00040005, + 0x00000445,0x636f6c62,0x0064496b,0x00060005,0x00000458,0x72727563,0x56746e65,0x6f746365, + 0x00000072,0x00040005,0x0000045c,0x61726170,0x0000006d,0x00040005,0x0000047b,0x61726170, + 0x0000006d,0x00040005,0x0000047d,0x61726170,0x0000006d,0x00040005,0x0000047f,0x64617371, + 0x00000000,0x00040005,0x00000480,0x61726170,0x0000006d,0x00040005,0x00000483,0x61726170, + 0x0000006d,0x00040005,0x00000485,0x61726170,0x0000006d,0x00040005,0x00000488,0x536e696d, + 0x00006461,0x00040005,0x00000489,0x61726170,0x0000006d,0x00040005,0x0000048b,0x61726170, + 0x0000006d,0x00050005,0x0000048e,0x536e696d,0x6f436461,0x0064726f,0x00040005,0x0000048f, + 0x61726170,0x0000006d,0x00050005,0x00000492,0x5677656e,0x6f746365,0x00000072,0x00050005, + 0x00000496,0x636f6c62,0x6461536b,0x006d7553,0x00040005,0x0000049d,0x61726170,0x0000006d, + 0x00040005,0x0000049f,0x61726170,0x0000006d,0x00040005,0x000004a1,0x61726170,0x0000006d, + 0x00040005,0x000004a3,0x61726170,0x0000006d,0x00040005,0x000004b3,0x61726170,0x0000006d, + 0x00040005,0x000004b4,0x61726170,0x0000006d,0x00080005,0x000004bf,0x475f6c67,0x61626f6c, + 0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00080005,0x000004c3,0x4c5f6c67,0x6c61636f, + 0x6f766e49,0x69746163,0x44496e6f,0x00000000,0x00060005,0x000004c7,0x575f6c67,0x476b726f, + 0x70756f72,0x00004449,0x00080005,0x000004cb,0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163, + 0x6e496e6f,0x00786564,0x00040005,0x000004ce,0x61726170,0x0000006d,0x00040005,0x000004cf, + 0x61726170,0x0000006d,0x00040005,0x000004d0,0x61726170,0x0000006d,0x00040005,0x000004d1, + 0x61726170,0x0000006d,0x00030047,0x000000b2,0x00000000,0x00040047,0x000000b2,0x0000000b, + 0x00000024,0x00030047,0x000000b3,0x00000000,0x00030047,0x0000018e,0x00000002,0x00050048, + 0x0000018e,0x00000000,0x00000023,0x00000000,0x00050048,0x0000018e,0x00000001,0x00000023, + 0x00000008,0x00050048,0x0000018e,0x00000002,0x00000023,0x0000000c,0x00050048,0x0000018e, + 0x00000003,0x00000023,0x00000010,0x00050048,0x0000018e,0x00000004,0x00000023,0x00000014, + 0x00050048,0x0000018e,0x00000005,0x00000023,0x00000018,0x00040047,0x00000190,0x00000021, + 0x00000004,0x00040047,0x00000190,0x00000022,0x00000000,0x00040047,0x000001a5,0x00000021, + 0x00000000,0x00040047,0x000001a5,0x00000022,0x00000000,0x00040047,0x000001ac,0x00000021, + 0x00000001,0x00040047,0x000001ac,0x00000022,0x00000000,0x00040047,0x000001b5,0x00000021, + 0x00000002,0x00040047,0x000001b5,0x00000022,0x00000000,0x00040047,0x000001c5,0x00000021, + 0x00000003,0x00040047,0x000001c5,0x00000022,0x00000000,0x00040047,0x000004bf,0x0000000b, + 0x0000001c,0x00040047,0x000004c3,0x0000000b,0x0000001b,0x00040047,0x000004c7,0x0000000b, + 0x0000001a,0x00040047,0x000004cb,0x0000000b,0x0000001d,0x00040047,0x000004d7,0x0000000b, + 0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015,0x00000006, + 0x00000020,0x00000000,0x00040020,0x00000007,0x00000007,0x00000006,0x00040017,0x00000008, + 0x00000006,0x00000004,0x00040021,0x00000009,0x00000008,0x00000007,0x00020014,0x0000000d, + 0x00030021,0x0000000e,0x0000000d,0x00040021,0x00000011,0x00000006,0x00000007,0x00030021, + 0x00000018,0x00000006,0x00040015,0x0000001b,0x00000020,0x00000001,0x00040020,0x0000001c, + 0x00000007,0x0000001b,0x00050021,0x0000001d,0x0000001b,0x0000001c,0x0000001c,0x00050021, + 0x00000022,0x00000006,0x00000007,0x00000007,0x00090021,0x0000002b,0x00000006,0x0000001c, + 0x0000001c,0x00000007,0x00000007,0x00000007,0x00000007,0x00060021,0x00000038,0x00000008, + 0x00000007,0x00000007,0x00000007,0x00040017,0x0000003e,0x0000001b,0x00000002,0x00030021, + 0x0000003f,0x0000003e,0x00040020,0x00000048,0x00000007,0x0000003e,0x00040021,0x00000049, + 0x00000006,0x00000048,0x00040021,0x00000050,0x0000003e,0x00000048,0x00050021,0x00000054, + 0x00000002,0x00000048,0x00000048,0x00040021,0x00000059,0x00000006,0x0000001c,0x00070021, + 0x00000065,0x00000006,0x00000007,0x0000001c,0x0000001c,0x0000001c,0x00050021,0x0000006c, + 0x00000006,0x00000048,0x0000001c,0x00050021,0x00000071,0x00000002,0x0000001c,0x00000048, + 0x00040021,0x00000076,0x00000008,0x00000048,0x00040017,0x0000007a,0x00000006,0x00000002, + 0x00040021,0x0000007b,0x0000007a,0x00000048,0x00040021,0x00000082,0x0000003e,0x00000007, + 0x00040020,0x00000086,0x00000007,0x00000008,0x00050021,0x00000087,0x00000002,0x00000048, + 0x00000086,0x00060021,0x0000008c,0x00000006,0x00000007,0x00000007,0x00000007,0x00080021, + 0x00000092,0x00000002,0x00000048,0x0000001c,0x00000048,0x00000048,0x0000001c,0x00070021, + 0x0000009a,0x00000002,0x00000048,0x00000048,0x00000048,0x0000001c,0x0004002b,0x00000006, + 0x000000a5,0x00000003,0x00040020,0x000000b1,0x00000001,0x00000006,0x0004003b,0x000000b1, + 0x000000b2,0x00000001,0x0004002b,0x0000001b,0x000000ca,0x00000008,0x0004002b,0x0000001b, + 0x000000ce,0x00000010,0x0004002b,0x0000001b,0x000000d2,0x00000018,0x0004002b,0x0000001b, + 0x000000d6,0x00000000,0x0004002b,0x00000006,0x000000dc,0x000000ff,0x0004002b,0x0000001b, + 0x000000df,0xffffffff,0x0004002b,0x0000001b,0x000000e8,0xfffffffe,0x0004002b,0x0000001b, + 0x000000f1,0xfffffffd,0x0004002b,0x0000001b,0x000000fc,0x00000004,0x0004002b,0x00000006, + 0x00000103,0xff000000,0x0004002b,0x0000001b,0x00000107,0x00000003,0x0004002b,0x0000001b, + 0x00000112,0x00000002,0x0004002b,0x0000001b,0x0000011d,0x00000001,0x0004002b,0x00000006, + 0x0000015d,0x00000000,0x0004002b,0x00000006,0x0000016c,0x00000001,0x0004002b,0x00000006, + 0x0000017b,0x00000002,0x00030016,0x0000018c,0x00000020,0x00040017,0x0000018d,0x0000018c, + 0x00000002,0x0008001e,0x0000018e,0x0000003e,0x00000006,0x00000006,0x00000006,0x00000006, + 0x0000018d,0x00040020,0x0000018f,0x00000002,0x0000018e,0x0004003b,0x0000018f,0x00000190, + 0x00000002,0x00040020,0x00000191,0x00000002,0x0000003e,0x00040020,0x00000196,0x00000002, + 0x00000006,0x00090019,0x000001a3,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000, + 0x00000001,0x00000000,0x00040020,0x000001a4,0x00000000,0x000001a3,0x0004003b,0x000001a4, + 0x000001a5,0x00000000,0x0004003b,0x000001a4,0x000001ac,0x00000000,0x00090019,0x000001b3, + 0x0000001b,0x00000001,0x00000000,0x00000000,0x00000000,0x00000002,0x0000001a,0x00040020, + 0x000001b4,0x00000000,0x000001b3,0x0004003b,0x000001b4,0x000001b5,0x00000000,0x00040017, + 0x000001b8,0x0000001b,0x00000004,0x00090019,0x000001c3,0x00000006,0x00000001,0x00000000, + 0x00000000,0x00000000,0x00000002,0x00000021,0x00040020,0x000001c4,0x00000000,0x000001c3, + 0x0004003b,0x000001c4,0x000001c5,0x00000000,0x0004002b,0x00000006,0x000001ce,0x00000005, + 0x00030029,0x0000000d,0x000001d2,0x0004002b,0x00000006,0x000001d7,0x0000000f,0x0005002c, + 0x0000003e,0x000001fe,0x000000d6,0x000000d6,0x0005002c,0x0000003e,0x00000204,0x0000011d, + 0x000000d6,0x0005002c,0x0000003e,0x0000020a,0x00000112,0x000000d6,0x0005002c,0x0000003e, + 0x00000210,0x00000107,0x000000d6,0x0004002b,0x00000006,0x00000271,0x00000020,0x0004001c, + 0x0000027b,0x00000006,0x0000017b,0x00040020,0x0000027c,0x00000004,0x0000027b,0x0004003b, + 0x0000027c,0x0000027d,0x00000004,0x00040020,0x00000280,0x00000004,0x00000006,0x0004002b, + 0x00000006,0x00000282,0x00000d48,0x0004002b,0x00000006,0x00000283,0x00000108,0x0004001c, + 0x0000028e,0x00000006,0x000001ce,0x0004002b,0x00000006,0x0000028f,0x00000010,0x0004001c, + 0x00000290,0x0000028e,0x0000028f,0x0004002b,0x00000006,0x00000291,0x00000004,0x0004001c, + 0x00000292,0x00000290,0x00000291,0x00040020,0x00000293,0x00000004,0x00000292,0x0004003b, + 0x00000293,0x00000294,0x00000004,0x0004003b,0x0000027c,0x000002c7,0x00000004,0x0004002b, + 0x0000001b,0x000002e6,0x00000090,0x0004002b,0x0000001b,0x000002ea,0x00000006,0x0004002b, + 0x00000006,0x000002f8,0x00000090,0x0004001c,0x000002f9,0x00000006,0x000002f8,0x0004001c, + 0x000002fa,0x000002f9,0x0000016c,0x00040020,0x000002fb,0x00000004,0x000002fa,0x0004003b, + 0x000002fb,0x000002fc,0x00000004,0x0004002b,0x0000001b,0x00000304,0x00000040,0x0004002b, + 0x00000006,0x0000032f,0x00000008,0x0004001c,0x00000330,0x0000027b,0x0000032f,0x00040020, + 0x00000331,0x00000004,0x00000330,0x0004003b,0x00000331,0x00000332,0x00000004,0x0004002b, + 0x0000001b,0x00000352,0x0000001f,0x00040020,0x00000355,0x00000007,0x0000007a,0x0004002b, + 0x0000001b,0x00000368,0x0000000c,0x0005002c,0x0000003e,0x000003fe,0x000000fc,0x0000011d, + 0x0004002b,0x0000001b,0x00000418,0x00000007,0x00040020,0x00000429,0x00000007,0x0000000d, + 0x00040017,0x000004bd,0x00000006,0x00000003,0x00040020,0x000004be,0x00000001,0x000004bd, + 0x0004003b,0x000004be,0x000004bf,0x00000001,0x0004003b,0x000004be,0x000004c3,0x00000001, + 0x0004003b,0x000004be,0x000004c7,0x00000001,0x0004003b,0x000000b1,0x000004cb,0x00000001, + 0x0004002b,0x0000018c,0x000004d3,0x387fda40,0x0004002b,0x0000018c,0x000004d4,0x477fe000, + 0x0004002b,0x0000018c,0x000004d5,0x37801002,0x0004002b,0x00000006,0x000004d6,0x00000040, + 0x0006002c,0x000004bd,0x000004d7,0x000004d6,0x0000016c,0x0000016c,0x00050036,0x00000002, + 0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000048,0x000004ce, + 0x00000007,0x0004003b,0x00000048,0x000004cf,0x00000007,0x0004003b,0x00000048,0x000004d0, + 0x00000007,0x0004003b,0x0000001c,0x000004d1,0x00000007,0x0004003d,0x000004bd,0x000004c0, + 0x000004bf,0x0007004f,0x0000007a,0x000004c1,0x000004c0,0x000004c0,0x00000000,0x00000001, + 0x0004007c,0x0000003e,0x000004c2,0x000004c1,0x0004003d,0x000004bd,0x000004c4,0x000004c3, + 0x0007004f,0x0000007a,0x000004c5,0x000004c4,0x000004c4,0x00000000,0x00000001,0x0004007c, + 0x0000003e,0x000004c6,0x000004c5,0x0004003d,0x000004bd,0x000004c8,0x000004c7,0x0007004f, + 0x0000007a,0x000004c9,0x000004c8,0x000004c8,0x00000000,0x00000001,0x0004007c,0x0000003e, + 0x000004ca,0x000004c9,0x0004003d,0x00000006,0x000004cc,0x000004cb,0x0004007c,0x0000001b, + 0x000004cd,0x000004cc,0x0003003e,0x000004ce,0x000004c2,0x0003003e,0x000004cf,0x000004c6, + 0x0003003e,0x000004d0,0x000004ca,0x0003003e,0x000004d1,0x000004cd,0x00080039,0x00000002, + 0x000004d2,0x0000009f,0x000004ce,0x000004cf,0x000004d0,0x000004d1,0x000100fd,0x00010038, + 0x00050036,0x00000008,0x0000000b,0x00000000,0x00000009,0x00030037,0x00000007,0x0000000a, + 0x000200f8,0x0000000c,0x0004003d,0x00000006,0x000000a1,0x0000000a,0x00070050,0x00000008, + 0x000000a2,0x000000a1,0x000000a1,0x000000a1,0x000000a1,0x000200fe,0x000000a2,0x00010038, + 0x00050036,0x0000000d,0x0000000f,0x00000000,0x0000000e,0x000200f8,0x00000010,0x0004014d, + 0x0000000d,0x000000a6,0x000000a5,0x000200fe,0x000000a6,0x00010038,0x00050036,0x00000006, + 0x00000013,0x00000000,0x00000011,0x00030037,0x00000007,0x00000012,0x000200f8,0x00000014, + 0x0004003d,0x00000006,0x000000a9,0x00000012,0x00060162,0x00000006,0x000000aa,0x000000a5, + 0x00000000,0x000000a9,0x000200fe,0x000000aa,0x00010038,0x00050036,0x00000006,0x00000016, + 0x00000000,0x00000011,0x00030037,0x00000007,0x00000015,0x000200f8,0x00000017,0x0004003d, + 0x00000006,0x000000ad,0x00000015,0x0006015d,0x00000006,0x000000ae,0x000000a5,0x00000000, + 0x000000ad,0x000200fe,0x000000ae,0x00010038,0x00050036,0x00000006,0x00000019,0x00000000, + 0x00000018,0x000200f8,0x0000001a,0x0004003b,0x00000007,0x000000b4,0x00000007,0x0004003d, + 0x00000006,0x000000b3,0x000000b2,0x0003003e,0x000000b4,0x000000b3,0x0004003d,0x00000006, + 0x000000b5,0x000000b4,0x000200fe,0x000000b5,0x00010038,0x00050036,0x0000001b,0x00000020, + 0x00000000,0x0000001d,0x00030037,0x0000001c,0x0000001e,0x00030037,0x0000001c,0x0000001f, + 0x000200f8,0x00000021,0x0004003d,0x0000001b,0x000000b8,0x0000001e,0x0004003d,0x0000001b, + 0x000000b9,0x0000001f,0x0007000c,0x0000001b,0x000000ba,0x00000001,0x00000027,0x000000b8, + 0x000000b9,0x000200fe,0x000000ba,0x00010038,0x00050036,0x00000006,0x00000025,0x00000000, + 0x00000022,0x00030037,0x00000007,0x00000023,0x00030037,0x00000007,0x00000024,0x000200f8, + 0x00000026,0x0004003d,0x00000006,0x000000bd,0x00000023,0x0004003d,0x00000006,0x000000be, + 0x00000024,0x0007000c,0x00000006,0x000000bf,0x00000001,0x00000026,0x000000bd,0x000000be, + 0x000200fe,0x000000bf,0x00010038,0x00050036,0x0000001b,0x00000029,0x00000000,0x0000001d, + 0x00030037,0x0000001c,0x00000027,0x00030037,0x0000001c,0x00000028,0x000200f8,0x0000002a, + 0x0004003d,0x0000001b,0x000000c2,0x00000027,0x0004003d,0x0000001b,0x000000c3,0x00000028, + 0x0007000c,0x0000001b,0x000000c4,0x00000001,0x0000002a,0x000000c2,0x000000c3,0x000200fe, + 0x000000c4,0x00010038,0x00050036,0x00000006,0x00000032,0x00000000,0x0000002b,0x00030037, + 0x0000001c,0x0000002c,0x00030037,0x0000001c,0x0000002d,0x00030037,0x00000007,0x0000002e, + 0x00030037,0x00000007,0x0000002f,0x00030037,0x00000007,0x00000030,0x00030037,0x00000007, + 0x00000031,0x000200f8,0x00000033,0x0004003b,0x00000007,0x000000c7,0x00000007,0x0004003b, + 0x00000007,0x000000da,0x00000007,0x0004003b,0x00000007,0x00000101,0x00000007,0x0004003d, + 0x00000006,0x000000c8,0x0000002e,0x0004003d,0x00000006,0x000000c9,0x0000002f,0x000500c4, + 0x00000006,0x000000cb,0x000000c9,0x000000ca,0x000500c5,0x00000006,0x000000cc,0x000000c8, + 0x000000cb,0x0004003d,0x00000006,0x000000cd,0x00000030,0x000500c4,0x00000006,0x000000cf, + 0x000000cd,0x000000ce,0x000500c5,0x00000006,0x000000d0,0x000000cc,0x000000cf,0x0004003d, + 0x00000006,0x000000d1,0x00000031,0x000500c4,0x00000006,0x000000d3,0x000000d1,0x000000d2, + 0x000500c5,0x00000006,0x000000d4,0x000000d0,0x000000d3,0x0003003e,0x000000c7,0x000000d4, + 0x0004003d,0x0000001b,0x000000d5,0x0000002d,0x000500b1,0x0000000d,0x000000d7,0x000000d5, + 0x000000d6,0x000300f7,0x000000d9,0x00000000,0x000400fa,0x000000d7,0x000000d8,0x000000f9, + 0x000200f8,0x000000d8,0x0004003d,0x00000006,0x000000db,0x000000c7,0x000500c7,0x00000006, + 0x000000dd,0x000000db,0x000000dc,0x0003003e,0x000000da,0x000000dd,0x0004003d,0x0000001b, + 0x000000de,0x0000002d,0x000500b3,0x0000000d,0x000000e0,0x000000de,0x000000df,0x000300f7, + 0x000000e2,0x00000000,0x000400fa,0x000000e0,0x000000e1,0x000000e2,0x000200f8,0x000000e1, + 0x0004003d,0x00000006,0x000000e3,0x000000c7,0x000500c4,0x00000006,0x000000e4,0x000000e3, + 0x000000ca,0x0004003d,0x00000006,0x000000e5,0x000000da,0x000500c5,0x00000006,0x000000e6, + 0x000000e4,0x000000e5,0x0003003e,0x000000c7,0x000000e6,0x000200f9,0x000000e2,0x000200f8, + 0x000000e2,0x0004003d,0x0000001b,0x000000e7,0x0000002d,0x000500b3,0x0000000d,0x000000e9, + 0x000000e7,0x000000e8,0x000300f7,0x000000eb,0x00000000,0x000400fa,0x000000e9,0x000000ea, + 0x000000eb,0x000200f8,0x000000ea,0x0004003d,0x00000006,0x000000ec,0x000000c7,0x000500c4, + 0x00000006,0x000000ed,0x000000ec,0x000000ca,0x0004003d,0x00000006,0x000000ee,0x000000da, + 0x000500c5,0x00000006,0x000000ef,0x000000ed,0x000000ee,0x0003003e,0x000000c7,0x000000ef, + 0x000200f9,0x000000eb,0x000200f8,0x000000eb,0x0004003d,0x0000001b,0x000000f0,0x0000002d, + 0x000500b3,0x0000000d,0x000000f2,0x000000f0,0x000000f1,0x000300f7,0x000000f4,0x00000000, + 0x000400fa,0x000000f2,0x000000f3,0x000000f4,0x000200f8,0x000000f3,0x0004003d,0x00000006, + 0x000000f5,0x000000c7,0x000500c4,0x00000006,0x000000f6,0x000000f5,0x000000ca,0x0004003d, + 0x00000006,0x000000f7,0x000000da,0x000500c5,0x00000006,0x000000f8,0x000000f6,0x000000f7, + 0x0003003e,0x000000c7,0x000000f8,0x000200f9,0x000000f4,0x000200f8,0x000000f4,0x000200f9, + 0x000000d9,0x000200f8,0x000000f9,0x0004003d,0x0000001b,0x000000fa,0x0000002d,0x0004003d, + 0x0000001b,0x000000fb,0x0000002c,0x00050082,0x0000001b,0x000000fd,0x000000fb,0x000000fc, + 0x000500ad,0x0000000d,0x000000fe,0x000000fa,0x000000fd,0x000300f7,0x00000100,0x00000000, + 0x000400fa,0x000000fe,0x000000ff,0x00000100,0x000200f8,0x000000ff,0x0004003d,0x00000006, + 0x00000102,0x000000c7,0x000500c7,0x00000006,0x00000104,0x00000102,0x00000103,0x0003003e, + 0x00000101,0x00000104,0x0004003d,0x0000001b,0x00000105,0x0000002d,0x0004003d,0x0000001b, + 0x00000106,0x0000002c,0x00050082,0x0000001b,0x00000108,0x00000106,0x00000107,0x000500af, + 0x0000000d,0x00000109,0x00000105,0x00000108,0x000300f7,0x0000010b,0x00000000,0x000400fa, + 0x00000109,0x0000010a,0x0000010b,0x000200f8,0x0000010a,0x0004003d,0x00000006,0x0000010c, + 0x000000c7,0x000500c2,0x00000006,0x0000010d,0x0000010c,0x000000ca,0x0004003d,0x00000006, + 0x0000010e,0x00000101,0x000500c5,0x00000006,0x0000010f,0x0000010d,0x0000010e,0x0003003e, + 0x000000c7,0x0000010f,0x000200f9,0x0000010b,0x000200f8,0x0000010b,0x0004003d,0x0000001b, + 0x00000110,0x0000002d,0x0004003d,0x0000001b,0x00000111,0x0000002c,0x00050082,0x0000001b, + 0x00000113,0x00000111,0x00000112,0x000500af,0x0000000d,0x00000114,0x00000110,0x00000113, + 0x000300f7,0x00000116,0x00000000,0x000400fa,0x00000114,0x00000115,0x00000116,0x000200f8, + 0x00000115,0x0004003d,0x00000006,0x00000117,0x000000c7,0x000500c2,0x00000006,0x00000118, + 0x00000117,0x000000ca,0x0004003d,0x00000006,0x00000119,0x00000101,0x000500c5,0x00000006, + 0x0000011a,0x00000118,0x00000119,0x0003003e,0x000000c7,0x0000011a,0x000200f9,0x00000116, + 0x000200f8,0x00000116,0x0004003d,0x0000001b,0x0000011b,0x0000002d,0x0004003d,0x0000001b, + 0x0000011c,0x0000002c,0x00050082,0x0000001b,0x0000011e,0x0000011c,0x0000011d,0x000500af, + 0x0000000d,0x0000011f,0x0000011b,0x0000011e,0x000300f7,0x00000121,0x00000000,0x000400fa, + 0x0000011f,0x00000120,0x00000121,0x000200f8,0x00000120,0x0004003d,0x00000006,0x00000122, + 0x000000c7,0x000500c2,0x00000006,0x00000123,0x00000122,0x000000ca,0x0004003d,0x00000006, + 0x00000124,0x00000101,0x000500c5,0x00000006,0x00000125,0x00000123,0x00000124,0x0003003e, + 0x000000c7,0x00000125,0x000200f9,0x00000121,0x000200f8,0x00000121,0x000200f9,0x00000100, + 0x000200f8,0x00000100,0x000200f9,0x000000d9,0x000200f8,0x000000d9,0x0004003d,0x00000006, + 0x00000126,0x000000c7,0x000200fe,0x00000126,0x00010038,0x00050036,0x00000006,0x00000036, + 0x00000000,0x00000022,0x00030037,0x00000007,0x00000034,0x00030037,0x00000007,0x00000035, + 0x000200f8,0x00000037,0x0004003d,0x00000006,0x00000129,0x00000034,0x000500c2,0x00000006, + 0x0000012a,0x00000129,0x000000d6,0x000500c7,0x00000006,0x0000012b,0x0000012a,0x000000dc, + 0x0004007c,0x0000001b,0x0000012c,0x0000012b,0x0004003d,0x00000006,0x0000012d,0x00000035, + 0x000500c2,0x00000006,0x0000012e,0x0000012d,0x000000d6,0x000500c7,0x00000006,0x0000012f, + 0x0000012e,0x000000dc,0x0004007c,0x0000001b,0x00000130,0x0000012f,0x00050082,0x0000001b, + 0x00000131,0x0000012c,0x00000130,0x0006000c,0x0000001b,0x00000132,0x00000001,0x00000005, + 0x00000131,0x0004003d,0x00000006,0x00000133,0x00000034,0x000500c2,0x00000006,0x00000134, + 0x00000133,0x000000ca,0x000500c7,0x00000006,0x00000135,0x00000134,0x000000dc,0x0004007c, + 0x0000001b,0x00000136,0x00000135,0x0004003d,0x00000006,0x00000137,0x00000035,0x000500c2, + 0x00000006,0x00000138,0x00000137,0x000000ca,0x000500c7,0x00000006,0x00000139,0x00000138, + 0x000000dc,0x0004007c,0x0000001b,0x0000013a,0x00000139,0x00050082,0x0000001b,0x0000013b, + 0x00000136,0x0000013a,0x0006000c,0x0000001b,0x0000013c,0x00000001,0x00000005,0x0000013b, + 0x00050080,0x0000001b,0x0000013d,0x00000132,0x0000013c,0x0004003d,0x00000006,0x0000013e, + 0x00000034,0x000500c2,0x00000006,0x0000013f,0x0000013e,0x000000ce,0x000500c7,0x00000006, + 0x00000140,0x0000013f,0x000000dc,0x0004007c,0x0000001b,0x00000141,0x00000140,0x0004003d, + 0x00000006,0x00000142,0x00000035,0x000500c2,0x00000006,0x00000143,0x00000142,0x000000ce, + 0x000500c7,0x00000006,0x00000144,0x00000143,0x000000dc,0x0004007c,0x0000001b,0x00000145, + 0x00000144,0x00050082,0x0000001b,0x00000146,0x00000141,0x00000145,0x0006000c,0x0000001b, + 0x00000147,0x00000001,0x00000005,0x00000146,0x00050080,0x0000001b,0x00000148,0x0000013d, + 0x00000147,0x0004003d,0x00000006,0x00000149,0x00000034,0x000500c2,0x00000006,0x0000014a, + 0x00000149,0x000000d2,0x000500c7,0x00000006,0x0000014b,0x0000014a,0x000000dc,0x0004007c, + 0x0000001b,0x0000014c,0x0000014b,0x0004003d,0x00000006,0x0000014d,0x00000035,0x000500c2, + 0x00000006,0x0000014e,0x0000014d,0x000000d2,0x000500c7,0x00000006,0x0000014f,0x0000014e, + 0x000000dc,0x0004007c,0x0000001b,0x00000150,0x0000014f,0x00050082,0x0000001b,0x00000151, + 0x0000014c,0x00000150,0x0006000c,0x0000001b,0x00000152,0x00000001,0x00000005,0x00000151, + 0x00050080,0x0000001b,0x00000153,0x00000148,0x00000152,0x0004007c,0x00000006,0x00000154, + 0x00000153,0x000200fe,0x00000154,0x00010038,0x00050036,0x00000008,0x0000003c,0x00000000, + 0x00000038,0x00030037,0x00000007,0x00000039,0x00030037,0x00000007,0x0000003a,0x00030037, + 0x00000007,0x0000003b,0x000200f8,0x0000003d,0x0004003b,0x00000086,0x00000157,0x00000007, + 0x0004003b,0x00000007,0x00000158,0x00000007,0x0004003b,0x00000007,0x0000015a,0x00000007, + 0x0004003b,0x00000007,0x00000167,0x00000007,0x0004003b,0x00000007,0x00000169,0x00000007, + 0x0004003b,0x00000007,0x00000176,0x00000007,0x0004003b,0x00000007,0x00000178,0x00000007, + 0x0004003b,0x00000007,0x00000183,0x00000007,0x0004003b,0x00000007,0x00000185,0x00000007, + 0x0004003d,0x00000006,0x00000159,0x00000039,0x0003003e,0x00000158,0x00000159,0x0004003d, + 0x00000006,0x0000015b,0x0000003b,0x0003003e,0x0000015a,0x0000015b,0x00060039,0x00000006, + 0x0000015c,0x00000036,0x00000158,0x0000015a,0x00050041,0x00000007,0x0000015e,0x00000157, + 0x0000015d,0x0003003e,0x0000015e,0x0000015c,0x0004003d,0x00000006,0x0000015f,0x00000039, + 0x000500c2,0x00000006,0x00000160,0x0000015f,0x000000ca,0x0004003d,0x00000006,0x00000161, + 0x0000003a,0x000500c7,0x00000006,0x00000162,0x00000161,0x000000dc,0x000500c4,0x00000006, + 0x00000163,0x00000162,0x000000d2,0x000500c5,0x00000006,0x00000164,0x00000160,0x00000163, + 0x0003003e,0x00000039,0x00000164,0x0004003d,0x00000006,0x00000165,0x0000003a,0x000500c2, + 0x00000006,0x00000166,0x00000165,0x000000ca,0x0003003e,0x0000003a,0x00000166,0x0004003d, + 0x00000006,0x00000168,0x00000039,0x0003003e,0x00000167,0x00000168,0x0004003d,0x00000006, + 0x0000016a,0x0000003b,0x0003003e,0x00000169,0x0000016a,0x00060039,0x00000006,0x0000016b, + 0x00000036,0x00000167,0x00000169,0x00050041,0x00000007,0x0000016d,0x00000157,0x0000016c, + 0x0003003e,0x0000016d,0x0000016b,0x0004003d,0x00000006,0x0000016e,0x00000039,0x000500c2, + 0x00000006,0x0000016f,0x0000016e,0x000000ca,0x0004003d,0x00000006,0x00000170,0x0000003a, + 0x000500c7,0x00000006,0x00000171,0x00000170,0x000000dc,0x000500c4,0x00000006,0x00000172, + 0x00000171,0x000000d2,0x000500c5,0x00000006,0x00000173,0x0000016f,0x00000172,0x0003003e, + 0x00000039,0x00000173,0x0004003d,0x00000006,0x00000174,0x0000003a,0x000500c2,0x00000006, + 0x00000175,0x00000174,0x000000ca,0x0003003e,0x0000003a,0x00000175,0x0004003d,0x00000006, + 0x00000177,0x00000039,0x0003003e,0x00000176,0x00000177,0x0004003d,0x00000006,0x00000179, + 0x0000003b,0x0003003e,0x00000178,0x00000179,0x00060039,0x00000006,0x0000017a,0x00000036, + 0x00000176,0x00000178,0x00050041,0x00000007,0x0000017c,0x00000157,0x0000017b,0x0003003e, + 0x0000017c,0x0000017a,0x0004003d,0x00000006,0x0000017d,0x00000039,0x000500c2,0x00000006, + 0x0000017e,0x0000017d,0x000000ca,0x0004003d,0x00000006,0x0000017f,0x0000003a,0x000500c7, + 0x00000006,0x00000180,0x0000017f,0x000000dc,0x000500c4,0x00000006,0x00000181,0x00000180, + 0x000000d2,0x000500c5,0x00000006,0x00000182,0x0000017e,0x00000181,0x0003003e,0x00000039, + 0x00000182,0x0004003d,0x00000006,0x00000184,0x00000039,0x0003003e,0x00000183,0x00000184, + 0x0004003d,0x00000006,0x00000186,0x0000003b,0x0003003e,0x00000185,0x00000186,0x00060039, + 0x00000006,0x00000187,0x00000036,0x00000183,0x00000185,0x00050041,0x00000007,0x00000188, + 0x00000157,0x000000a5,0x0003003e,0x00000188,0x00000187,0x0004003d,0x00000008,0x00000189, + 0x00000157,0x000200fe,0x00000189,0x00010038,0x00050036,0x0000003e,0x00000040,0x00000000, + 0x0000003f,0x000200f8,0x00000041,0x00050041,0x00000191,0x00000192,0x00000190,0x000000d6, + 0x0004003d,0x0000003e,0x00000193,0x00000192,0x000200fe,0x00000193,0x00010038,0x00050036, + 0x00000006,0x00000042,0x00000000,0x00000018,0x000200f8,0x00000043,0x00050041,0x00000196, + 0x00000197,0x00000190,0x00000107,0x0004003d,0x00000006,0x00000198,0x00000197,0x000200fe, + 0x00000198,0x00010038,0x00050036,0x00000006,0x00000044,0x00000000,0x00000018,0x000200f8, + 0x00000045,0x00050041,0x00000196,0x0000019b,0x00000190,0x0000011d,0x0004003d,0x00000006, + 0x0000019c,0x0000019b,0x000200fe,0x0000019c,0x00010038,0x00050036,0x00000006,0x00000046, + 0x00000000,0x00000018,0x000200f8,0x00000047,0x00050041,0x00000196,0x0000019f,0x00000190, + 0x00000112,0x0004003d,0x00000006,0x000001a0,0x0000019f,0x000200fe,0x000001a0,0x00010038, + 0x00050036,0x00000006,0x0000004b,0x00000000,0x00000049,0x00030037,0x00000048,0x0000004a, + 0x000200f8,0x0000004c,0x0004003d,0x000001a3,0x000001a6,0x000001a5,0x0004003d,0x0000003e, + 0x000001a7,0x0000004a,0x0007005f,0x00000008,0x000001a8,0x000001a6,0x000001a7,0x00000002, + 0x000000d6,0x00050051,0x00000006,0x000001a9,0x000001a8,0x00000000,0x000200fe,0x000001a9, + 0x00010038,0x00050036,0x00000006,0x0000004e,0x00000000,0x00000049,0x00030037,0x00000048, + 0x0000004d,0x000200f8,0x0000004f,0x0004003d,0x000001a3,0x000001ad,0x000001ac,0x0004003d, + 0x0000003e,0x000001ae,0x0000004d,0x0007005f,0x00000008,0x000001af,0x000001ad,0x000001ae, + 0x00000002,0x000000d6,0x00050051,0x00000006,0x000001b0,0x000001af,0x00000000,0x000200fe, + 0x000001b0,0x00010038,0x00050036,0x0000003e,0x00000052,0x00000000,0x00000050,0x00030037, + 0x00000048,0x00000051,0x000200f8,0x00000053,0x0004003d,0x000001b3,0x000001b6,0x000001b5, + 0x0004003d,0x0000003e,0x000001b7,0x00000051,0x00050062,0x000001b8,0x000001b9,0x000001b6, + 0x000001b7,0x0007004f,0x0000003e,0x000001ba,0x000001b9,0x000001b9,0x00000000,0x00000001, + 0x000200fe,0x000001ba,0x00010038,0x00050036,0x00000002,0x00000057,0x00000000,0x00000054, + 0x00030037,0x00000048,0x00000055,0x00030037,0x00000048,0x00000056,0x000200f8,0x00000058, + 0x0004003d,0x000001b3,0x000001bd,0x000001b5,0x0004003d,0x0000003e,0x000001be,0x00000055, + 0x0004003d,0x0000003e,0x000001bf,0x00000056,0x00050051,0x0000001b,0x000001c0,0x000001bf, + 0x00000000,0x00050051,0x0000001b,0x000001c1,0x000001bf,0x00000001,0x00070050,0x000001b8, + 0x000001c2,0x000001c0,0x000001c1,0x000000d6,0x000000d6,0x00040063,0x000001bd,0x000001be, + 0x000001c2,0x000100fd,0x00010038,0x00050036,0x00000006,0x0000005b,0x00000000,0x00000059, + 0x00030037,0x0000001c,0x0000005a,0x000200f8,0x0000005c,0x0004003d,0x000001c3,0x000001c6, + 0x000001c5,0x0004003d,0x0000001b,0x000001c7,0x0000005a,0x00050050,0x0000003e,0x000001c8, + 0x000001c7,0x000000d6,0x00050062,0x00000008,0x000001c9,0x000001c6,0x000001c8,0x00050051, + 0x00000006,0x000001ca,0x000001c9,0x00000000,0x000200fe,0x000001ca,0x00010038,0x00050036, + 0x0000000d,0x0000005d,0x00000000,0x0000000e,0x000200f8,0x0000005e,0x0004003b,0x0000001c, + 0x000001d5,0x00000007,0x00040039,0x00000006,0x000001cd,0x00000042,0x000500b2,0x0000000d, + 0x000001cf,0x000001cd,0x000001ce,0x000300f7,0x000001d1,0x00000000,0x000400fa,0x000001cf, + 0x000001d0,0x000001d4,0x000200f8,0x000001d0,0x000200fe,0x000001d2,0x000200f8,0x000001d4, + 0x0003003e,0x000001d5,0x0000011d,0x00050039,0x00000006,0x000001d6,0x0000005b,0x000001d5, + 0x000500c7,0x00000006,0x000001d8,0x000001d6,0x000001d7,0x000500ab,0x0000000d,0x000001d9, + 0x000001d8,0x0000015d,0x000200fe,0x000001d9,0x000200f8,0x000001d1,0x000100ff,0x00010038, + 0x00050036,0x00000006,0x00000060,0x00000000,0x00000049,0x00030037,0x00000048,0x0000005f, + 0x000200f8,0x00000061,0x0004003b,0x0000001c,0x000001dc,0x00000007,0x0004003b,0x0000001c, + 0x000001e1,0x00000007,0x0004003b,0x00000048,0x000001e6,0x00000007,0x0004003b,0x0000001c, + 0x000001e9,0x00000007,0x0004003b,0x0000001c,0x000001ea,0x00000007,0x0004003b,0x0000001c, + 0x000001ee,0x00000007,0x0004003b,0x0000001c,0x000001ef,0x00000007,0x0004003b,0x0000001c, + 0x000001f3,0x00000007,0x0004003b,0x0000001c,0x000001f4,0x00000007,0x0004003b,0x0000001c, + 0x000001f8,0x00000007,0x0004003b,0x0000001c,0x000001f9,0x00000007,0x0004003b,0x00000007, + 0x000001fc,0x00000007,0x0004003b,0x00000048,0x00000200,0x00000007,0x0004003b,0x00000007, + 0x00000202,0x00000007,0x0004003b,0x00000048,0x00000206,0x00000007,0x0004003b,0x00000007, + 0x00000208,0x00000007,0x0004003b,0x00000048,0x0000020c,0x00000007,0x0004003b,0x00000007, + 0x0000020e,0x00000007,0x0004003b,0x00000048,0x00000212,0x00000007,0x0004003b,0x0000001c, + 0x00000214,0x00000007,0x0004003b,0x0000001c,0x00000216,0x00000007,0x0004003b,0x00000007, + 0x00000219,0x00000007,0x0004003b,0x00000007,0x0000021b,0x00000007,0x0004003b,0x00000007, + 0x0000021d,0x00000007,0x0004003b,0x00000007,0x0000021f,0x00000007,0x00040039,0x0000003e, + 0x000001dd,0x00000040,0x00050051,0x0000001b,0x000001de,0x000001dd,0x00000000,0x00040039, + 0x00000006,0x000001df,0x00000044,0x000500c3,0x0000001b,0x000001e0,0x000001de,0x000001df, + 0x0003003e,0x000001dc,0x000001e0,0x00040039,0x0000003e,0x000001e2,0x00000040,0x00050051, + 0x0000001b,0x000001e3,0x000001e2,0x00000001,0x00040039,0x00000006,0x000001e4,0x00000044, + 0x000500c3,0x0000001b,0x000001e5,0x000001e3,0x000001e4,0x0003003e,0x000001e1,0x000001e5, + 0x0004003d,0x0000001b,0x000001e7,0x000001dc,0x00050082,0x0000001b,0x000001e8,0x000001e7, + 0x000000fc,0x0003003e,0x000001e9,0x000001e8,0x00050041,0x0000001c,0x000001eb,0x0000005f, + 0x0000015d,0x0004003d,0x0000001b,0x000001ec,0x000001eb,0x0003003e,0x000001ea,0x000001ec, + 0x00060039,0x0000001b,0x000001ed,0x00000020,0x000001e9,0x000001ea,0x0003003e,0x000001ee, + 0x000000d6,0x0003003e,0x000001ef,0x000001ed,0x00060039,0x0000001b,0x000001f0,0x00000029, + 0x000001ee,0x000001ef,0x0004003d,0x0000001b,0x000001f1,0x000001e1,0x00050082,0x0000001b, + 0x000001f2,0x000001f1,0x0000011d,0x0003003e,0x000001f3,0x000001f2,0x00050041,0x0000001c, + 0x000001f5,0x0000005f,0x0000016c,0x0004003d,0x0000001b,0x000001f6,0x000001f5,0x0003003e, + 0x000001f4,0x000001f6,0x00060039,0x0000001b,0x000001f7,0x00000020,0x000001f3,0x000001f4, + 0x0003003e,0x000001f8,0x000000d6,0x0003003e,0x000001f9,0x000001f7,0x00060039,0x0000001b, + 0x000001fa,0x00000029,0x000001f8,0x000001f9,0x00050050,0x0000003e,0x000001fb,0x000001f0, + 0x000001fa,0x0003003e,0x000001e6,0x000001fb,0x0004003d,0x0000003e,0x000001fd,0x000001e6, + 0x00050080,0x0000003e,0x000001ff,0x000001fd,0x000001fe,0x0003003e,0x00000200,0x000001ff, + 0x00050039,0x00000006,0x00000201,0x0000004b,0x00000200,0x0003003e,0x000001fc,0x00000201, + 0x0004003d,0x0000003e,0x00000203,0x000001e6,0x00050080,0x0000003e,0x00000205,0x00000203, + 0x00000204,0x0003003e,0x00000206,0x00000205,0x00050039,0x00000006,0x00000207,0x0000004b, + 0x00000206,0x0003003e,0x00000202,0x00000207,0x0004003d,0x0000003e,0x00000209,0x000001e6, + 0x00050080,0x0000003e,0x0000020b,0x00000209,0x0000020a,0x0003003e,0x0000020c,0x0000020b, + 0x00050039,0x00000006,0x0000020d,0x0000004b,0x0000020c,0x0003003e,0x00000208,0x0000020d, + 0x0004003d,0x0000003e,0x0000020f,0x000001e6,0x00050080,0x0000003e,0x00000211,0x0000020f, + 0x00000210,0x0003003e,0x00000212,0x00000211,0x00050039,0x00000006,0x00000213,0x0000004b, + 0x00000212,0x0003003e,0x0000020e,0x00000213,0x0004003d,0x0000001b,0x00000215,0x000001dc, + 0x0003003e,0x00000214,0x00000215,0x00050041,0x0000001c,0x00000217,0x0000005f,0x0000015d, + 0x0004003d,0x0000001b,0x00000218,0x00000217,0x0003003e,0x00000216,0x00000218,0x0004003d, + 0x00000006,0x0000021a,0x000001fc,0x0003003e,0x00000219,0x0000021a,0x0004003d,0x00000006, + 0x0000021c,0x00000202,0x0003003e,0x0000021b,0x0000021c,0x0004003d,0x00000006,0x0000021e, + 0x00000208,0x0003003e,0x0000021d,0x0000021e,0x0004003d,0x00000006,0x00000220,0x0000020e, + 0x0003003e,0x0000021f,0x00000220,0x000a0039,0x00000006,0x00000221,0x00000032,0x00000214, + 0x00000216,0x00000219,0x0000021b,0x0000021d,0x0000021f,0x000200fe,0x00000221,0x00010038, + 0x00050036,0x00000006,0x00000063,0x00000000,0x00000049,0x00030037,0x00000048,0x00000062, + 0x000200f8,0x00000064,0x0004003b,0x0000001c,0x00000224,0x00000007,0x0004003b,0x0000001c, + 0x00000229,0x00000007,0x0004003b,0x00000048,0x0000022e,0x00000007,0x0004003b,0x0000001c, + 0x00000231,0x00000007,0x0004003b,0x0000001c,0x00000232,0x00000007,0x0004003b,0x0000001c, + 0x00000236,0x00000007,0x0004003b,0x0000001c,0x00000237,0x00000007,0x0004003b,0x0000001c, + 0x0000023b,0x00000007,0x0004003b,0x0000001c,0x0000023c,0x00000007,0x0004003b,0x0000001c, + 0x00000240,0x00000007,0x0004003b,0x0000001c,0x00000241,0x00000007,0x0004003b,0x00000007, + 0x00000244,0x00000007,0x0004003b,0x00000048,0x00000247,0x00000007,0x0004003b,0x00000007, + 0x00000249,0x00000007,0x0004003b,0x00000048,0x0000024c,0x00000007,0x0004003b,0x00000007, + 0x0000024e,0x00000007,0x0004003b,0x00000048,0x00000251,0x00000007,0x0004003b,0x00000007, + 0x00000253,0x00000007,0x0004003b,0x00000048,0x00000256,0x00000007,0x0004003b,0x0000001c, + 0x00000258,0x00000007,0x0004003b,0x0000001c,0x0000025a,0x00000007,0x0004003b,0x00000007, + 0x0000025d,0x00000007,0x0004003b,0x00000007,0x0000025f,0x00000007,0x0004003b,0x00000007, + 0x00000261,0x00000007,0x0004003b,0x00000007,0x00000263,0x00000007,0x00040039,0x0000003e, + 0x00000225,0x00000040,0x00050051,0x0000001b,0x00000226,0x00000225,0x00000000,0x00040039, + 0x00000006,0x00000227,0x00000044,0x000500c3,0x0000001b,0x00000228,0x00000226,0x00000227, + 0x0003003e,0x00000224,0x00000228,0x00040039,0x0000003e,0x0000022a,0x00000040,0x00050051, + 0x0000001b,0x0000022b,0x0000022a,0x00000001,0x00040039,0x00000006,0x0000022c,0x00000044, + 0x000500c3,0x0000001b,0x0000022d,0x0000022b,0x0000022c,0x0003003e,0x00000229,0x0000022d, + 0x0004003d,0x0000001b,0x0000022f,0x00000224,0x00050082,0x0000001b,0x00000230,0x0000022f, + 0x000000fc,0x0003003e,0x00000231,0x00000230,0x00050041,0x0000001c,0x00000233,0x00000062, + 0x0000015d,0x0004003d,0x0000001b,0x00000234,0x00000233,0x0003003e,0x00000232,0x00000234, + 0x00060039,0x0000001b,0x00000235,0x00000020,0x00000231,0x00000232,0x0003003e,0x00000236, + 0x000000d6,0x0003003e,0x00000237,0x00000235,0x00060039,0x0000001b,0x00000238,0x00000029, + 0x00000236,0x00000237,0x0004003d,0x0000001b,0x00000239,0x00000229,0x00050082,0x0000001b, + 0x0000023a,0x00000239,0x0000011d,0x0003003e,0x0000023b,0x0000023a,0x00050041,0x0000001c, + 0x0000023d,0x00000062,0x0000016c,0x0004003d,0x0000001b,0x0000023e,0x0000023d,0x0003003e, + 0x0000023c,0x0000023e,0x00060039,0x0000001b,0x0000023f,0x00000020,0x0000023b,0x0000023c, + 0x0003003e,0x00000240,0x000000d6,0x0003003e,0x00000241,0x0000023f,0x00060039,0x0000001b, + 0x00000242,0x00000029,0x00000240,0x00000241,0x00050050,0x0000003e,0x00000243,0x00000238, + 0x00000242,0x0003003e,0x0000022e,0x00000243,0x0004003d,0x0000003e,0x00000245,0x0000022e, + 0x00050080,0x0000003e,0x00000246,0x00000245,0x000001fe,0x0003003e,0x00000247,0x00000246, + 0x00050039,0x00000006,0x00000248,0x0000004e,0x00000247,0x0003003e,0x00000244,0x00000248, + 0x0004003d,0x0000003e,0x0000024a,0x0000022e,0x00050080,0x0000003e,0x0000024b,0x0000024a, + 0x00000204,0x0003003e,0x0000024c,0x0000024b,0x00050039,0x00000006,0x0000024d,0x0000004e, + 0x0000024c,0x0003003e,0x00000249,0x0000024d,0x0004003d,0x0000003e,0x0000024f,0x0000022e, + 0x00050080,0x0000003e,0x00000250,0x0000024f,0x0000020a,0x0003003e,0x00000251,0x00000250, + 0x00050039,0x00000006,0x00000252,0x0000004e,0x00000251,0x0003003e,0x0000024e,0x00000252, + 0x0004003d,0x0000003e,0x00000254,0x0000022e,0x00050080,0x0000003e,0x00000255,0x00000254, + 0x00000210,0x0003003e,0x00000256,0x00000255,0x00050039,0x00000006,0x00000257,0x0000004e, + 0x00000256,0x0003003e,0x00000253,0x00000257,0x0004003d,0x0000001b,0x00000259,0x00000224, + 0x0003003e,0x00000258,0x00000259,0x00050041,0x0000001c,0x0000025b,0x00000062,0x0000015d, + 0x0004003d,0x0000001b,0x0000025c,0x0000025b,0x0003003e,0x0000025a,0x0000025c,0x0004003d, + 0x00000006,0x0000025e,0x00000244,0x0003003e,0x0000025d,0x0000025e,0x0004003d,0x00000006, + 0x00000260,0x00000249,0x0003003e,0x0000025f,0x00000260,0x0004003d,0x00000006,0x00000262, + 0x0000024e,0x0003003e,0x00000261,0x00000262,0x0004003d,0x00000006,0x00000264,0x00000253, + 0x0003003e,0x00000263,0x00000264,0x000a0039,0x00000006,0x00000265,0x00000032,0x00000258, + 0x0000025a,0x0000025d,0x0000025f,0x00000261,0x00000263,0x000200fe,0x00000265,0x00010038, + 0x00050036,0x00000006,0x0000006a,0x00000000,0x00000065,0x00030037,0x00000007,0x00000066, + 0x00030037,0x0000001c,0x00000067,0x00030037,0x0000001c,0x00000068,0x00030037,0x0000001c, + 0x00000069,0x000200f8,0x0000006b,0x0004003b,0x00000007,0x0000026d,0x00000007,0x0004003b, + 0x0000001c,0x00000275,0x00000007,0x0004003d,0x0000001b,0x00000268,0x00000068,0x0004003d, + 0x0000001b,0x00000269,0x00000069,0x000500ab,0x0000000d,0x0000026a,0x00000268,0x00000269, + 0x000300f7,0x0000026c,0x00000000,0x000400fa,0x0000026a,0x0000026b,0x0000026c,0x000200f8, + 0x0000026b,0x0003003e,0x00000066,0x0000015d,0x000200f9,0x0000026c,0x000200f8,0x0000026c, + 0x0004003d,0x00000006,0x0000026e,0x00000066,0x0003003e,0x0000026d,0x0000026e,0x00050039, + 0x00000006,0x0000026f,0x00000016,0x0000026d,0x0003003e,0x00000066,0x0000026f,0x00040039, + 0x00000006,0x00000270,0x00000019,0x000500aa,0x0000000d,0x00000272,0x00000270,0x00000271, + 0x000300f7,0x00000274,0x00000000,0x000400fa,0x00000272,0x00000273,0x00000274,0x000200f8, + 0x00000273,0x0004003d,0x0000001b,0x00000276,0x00000067,0x000500c3,0x0000001b,0x00000277, + 0x00000276,0x000001ce,0x0003003e,0x00000275,0x00000277,0x00040039,0x0000000d,0x00000278, + 0x0000000f,0x000300f7,0x0000027a,0x00000000,0x000400fa,0x00000278,0x00000279,0x0000027a, + 0x000200f8,0x00000279,0x0004003d,0x0000001b,0x0000027e,0x00000275,0x0004003d,0x00000006, + 0x0000027f,0x00000066,0x00050041,0x00000280,0x00000281,0x0000027d,0x0000027e,0x0003003e, + 0x00000281,0x0000027f,0x000200f9,0x0000027a,0x000200f8,0x0000027a,0x000300e1,0x0000017b, + 0x00000282,0x000400e0,0x0000017b,0x0000017b,0x00000283,0x0004003d,0x0000001b,0x00000284, + 0x00000275,0x000500c6,0x0000001b,0x00000285,0x00000284,0x0000011d,0x00050041,0x00000280, + 0x00000286,0x0000027d,0x00000285,0x0004003d,0x00000006,0x00000287,0x00000286,0x0004003d, + 0x00000006,0x00000288,0x00000066,0x00050080,0x00000006,0x00000289,0x00000288,0x00000287, + 0x0003003e,0x00000066,0x00000289,0x000200f9,0x00000274,0x000200f8,0x00000274,0x0004003d, + 0x00000006,0x0000028a,0x00000066,0x000200fe,0x0000028a,0x00010038,0x00050036,0x00000006, + 0x0000006f,0x00000000,0x0000006c,0x00030037,0x00000048,0x0000006d,0x00030037,0x0000001c, + 0x0000006e,0x000200f8,0x00000070,0x0004003b,0x00000007,0x0000028d,0x00000007,0x0004003b, + 0x00000007,0x0000029d,0x00000007,0x0004003b,0x00000007,0x000002a0,0x00000007,0x0004003b, + 0x00000007,0x000002a4,0x00000007,0x0004003b,0x00000007,0x000002ad,0x00000007,0x0004003b, + 0x00000007,0x000002b0,0x00000007,0x0004003b,0x00000007,0x000002b4,0x00000007,0x0004003b, + 0x00000007,0x000002b5,0x00000007,0x0004003b,0x00000007,0x000002b7,0x00000007,0x0004003b, + 0x00000007,0x000002ba,0x00000007,0x0004003b,0x0000001c,0x000002c1,0x00000007,0x0004003b, + 0x00000007,0x000002cd,0x00000007,0x0004003b,0x00000007,0x000002cf,0x00000007,0x00050041, + 0x0000001c,0x00000295,0x0000006d,0x0000016c,0x0004003d,0x0000001b,0x00000296,0x00000295, + 0x00050041,0x0000001c,0x00000297,0x0000006d,0x0000015d,0x0004003d,0x0000001b,0x00000298, + 0x00000297,0x00050041,0x0000001c,0x00000299,0x0000006d,0x0000016c,0x0004003d,0x0000001b, + 0x0000029a,0x00000299,0x00050041,0x0000001c,0x0000029b,0x0000006d,0x0000015d,0x0004003d, + 0x0000001b,0x0000029c,0x0000029b,0x00070041,0x00000280,0x0000029e,0x00000294,0x000000d6, + 0x00000296,0x00000298,0x0004003d,0x00000006,0x0000029f,0x0000029e,0x0003003e,0x0000029d, + 0x0000029f,0x00070041,0x00000280,0x000002a1,0x00000294,0x0000011d,0x0000029a,0x0000029c, + 0x0004003d,0x00000006,0x000002a2,0x000002a1,0x0003003e,0x000002a0,0x000002a2,0x00060039, + 0x00000006,0x000002a3,0x00000025,0x0000029d,0x000002a0,0x0003003e,0x0000028d,0x000002a3, + 0x00050041,0x0000001c,0x000002a5,0x0000006d,0x0000016c,0x0004003d,0x0000001b,0x000002a6, + 0x000002a5,0x00050041,0x0000001c,0x000002a7,0x0000006d,0x0000015d,0x0004003d,0x0000001b, + 0x000002a8,0x000002a7,0x00050041,0x0000001c,0x000002a9,0x0000006d,0x0000016c,0x0004003d, + 0x0000001b,0x000002aa,0x000002a9,0x00050041,0x0000001c,0x000002ab,0x0000006d,0x0000015d, + 0x0004003d,0x0000001b,0x000002ac,0x000002ab,0x00070041,0x00000280,0x000002ae,0x00000294, + 0x00000112,0x000002a6,0x000002a8,0x0004003d,0x00000006,0x000002af,0x000002ae,0x0003003e, + 0x000002ad,0x000002af,0x00070041,0x00000280,0x000002b1,0x00000294,0x00000107,0x000002aa, + 0x000002ac,0x0004003d,0x00000006,0x000002b2,0x000002b1,0x0003003e,0x000002b0,0x000002b2, + 0x00060039,0x00000006,0x000002b3,0x00000025,0x000002ad,0x000002b0,0x0003003e,0x000002a4, + 0x000002b3,0x0004003d,0x00000006,0x000002b6,0x0000028d,0x0003003e,0x000002b5,0x000002b6, + 0x0004003d,0x00000006,0x000002b8,0x000002a4,0x0003003e,0x000002b7,0x000002b8,0x00060039, + 0x00000006,0x000002b9,0x00000025,0x000002b5,0x000002b7,0x0003003e,0x000002b4,0x000002b9, + 0x0004003d,0x00000006,0x000002bb,0x000002b4,0x0003003e,0x000002ba,0x000002bb,0x00050039, + 0x00000006,0x000002bc,0x00000013,0x000002ba,0x0003003e,0x000002b4,0x000002bc,0x00040039, + 0x00000006,0x000002bd,0x00000019,0x000500aa,0x0000000d,0x000002be,0x000002bd,0x00000271, + 0x000300f7,0x000002c0,0x00000000,0x000400fa,0x000002be,0x000002bf,0x000002c0,0x000200f8, + 0x000002bf,0x0004003d,0x0000001b,0x000002c2,0x0000006e,0x000500c3,0x0000001b,0x000002c3, + 0x000002c2,0x000001ce,0x0003003e,0x000002c1,0x000002c3,0x00040039,0x0000000d,0x000002c4, + 0x0000000f,0x000300f7,0x000002c6,0x00000000,0x000400fa,0x000002c4,0x000002c5,0x000002c6, + 0x000200f8,0x000002c5,0x0004003d,0x0000001b,0x000002c8,0x000002c1,0x0004003d,0x00000006, + 0x000002c9,0x000002b4,0x00050041,0x00000280,0x000002ca,0x000002c7,0x000002c8,0x0003003e, + 0x000002ca,0x000002c9,0x000200f9,0x000002c6,0x000200f8,0x000002c6,0x000300e1,0x0000017b, + 0x00000282,0x000400e0,0x0000017b,0x0000017b,0x00000283,0x0004003d,0x0000001b,0x000002cb, + 0x000002c1,0x000500c6,0x0000001b,0x000002cc,0x000002cb,0x0000011d,0x0004003d,0x00000006, + 0x000002ce,0x000002b4,0x0003003e,0x000002cd,0x000002ce,0x00050041,0x00000280,0x000002d0, + 0x000002c7,0x000002cc,0x0004003d,0x00000006,0x000002d1,0x000002d0,0x0003003e,0x000002cf, + 0x000002d1,0x00060039,0x00000006,0x000002d2,0x00000025,0x000002cd,0x000002cf,0x0003003e, + 0x000002b4,0x000002d2,0x000200f9,0x000002c0,0x000200f8,0x000002c0,0x0004003d,0x00000006, + 0x000002d3,0x000002b4,0x000200fe,0x000002d3,0x00010038,0x00050036,0x00000002,0x00000074, + 0x00000000,0x00000071,0x00030037,0x0000001c,0x00000072,0x00030037,0x00000048,0x00000073, + 0x000200f8,0x00000075,0x0004003b,0x0000001c,0x000002d6,0x00000007,0x0004003b,0x0000001c, + 0x000002da,0x00000007,0x0004003b,0x0000001c,0x000002de,0x00000007,0x0004003b,0x0000001c, + 0x000002e8,0x00000007,0x0004003b,0x0000001c,0x000002ec,0x00000007,0x0004003b,0x0000001c, + 0x000002ef,0x00000007,0x0004003b,0x0000001c,0x000002f4,0x00000007,0x0004003b,0x00000048, + 0x00000301,0x00000007,0x00050041,0x0000001c,0x000002d7,0x00000073,0x0000015d,0x0004003d, + 0x0000001b,0x000002d8,0x000002d7,0x00050082,0x0000001b,0x000002d9,0x000002d8,0x000000ca, + 0x0003003e,0x000002d6,0x000002d9,0x00050041,0x0000001c,0x000002db,0x00000073,0x0000016c, + 0x0004003d,0x0000001b,0x000002dc,0x000002db,0x00050082,0x0000001b,0x000002dd,0x000002dc, + 0x000000ca,0x0003003e,0x000002da,0x000002dd,0x0004003d,0x0000001b,0x000002df,0x00000072, + 0x0003003e,0x000002de,0x000002df,0x000200f9,0x000002e0,0x000200f8,0x000002e0,0x000400f6, + 0x000002e2,0x000002e3,0x00000000,0x000200f9,0x000002e4,0x000200f8,0x000002e4,0x0004003d, + 0x0000001b,0x000002e5,0x000002de,0x000500b1,0x0000000d,0x000002e7,0x000002e5,0x000002e6, + 0x000400fa,0x000002e7,0x000002e1,0x000002e2,0x000200f8,0x000002e1,0x0004003d,0x0000001b, + 0x000002e9,0x000002de,0x0005008b,0x0000001b,0x000002eb,0x000002e9,0x000002ea,0x0003003e, + 0x000002e8,0x000002eb,0x0004003d,0x0000001b,0x000002ed,0x000002de,0x00050087,0x0000001b, + 0x000002ee,0x000002ed,0x000002ea,0x0003003e,0x000002ec,0x000002ee,0x0004003d,0x0000001b, + 0x000002f0,0x000002d6,0x0004003d,0x0000001b,0x000002f1,0x000002e8,0x00050084,0x0000001b, + 0x000002f2,0x000002f1,0x000000fc,0x00050080,0x0000001b,0x000002f3,0x000002f0,0x000002f2, + 0x0003003e,0x000002ef,0x000002f3,0x0004003d,0x0000001b,0x000002f5,0x000002da,0x0004003d, + 0x0000001b,0x000002f6,0x000002ec,0x00050080,0x0000001b,0x000002f7,0x000002f5,0x000002f6, + 0x0003003e,0x000002f4,0x000002f7,0x0004003d,0x0000001b,0x000002fd,0x000002de,0x0004003d, + 0x0000001b,0x000002fe,0x000002ef,0x0004003d,0x0000001b,0x000002ff,0x000002f4,0x00050050, + 0x0000003e,0x00000300,0x000002fe,0x000002ff,0x0003003e,0x00000301,0x00000300,0x00050039, + 0x00000006,0x00000302,0x00000063,0x00000301,0x00060041,0x00000280,0x00000303,0x000002fc, + 0x000000d6,0x000002fd,0x0003003e,0x00000303,0x00000302,0x000200f9,0x000002e3,0x000200f8, + 0x000002e3,0x0004003d,0x0000001b,0x00000305,0x000002de,0x00050080,0x0000001b,0x00000306, + 0x00000305,0x00000304,0x0003003e,0x000002de,0x00000306,0x000200f9,0x000002e0,0x000200f8, + 0x000002e2,0x000300e1,0x0000017b,0x00000282,0x000400e0,0x0000017b,0x0000017b,0x00000283, + 0x000100fd,0x00010038,0x00050036,0x00000008,0x00000078,0x00000000,0x00000076,0x00030037, + 0x00000048,0x00000077,0x000200f8,0x00000079,0x0004003b,0x00000086,0x00000307,0x00000007, + 0x0004003b,0x00000007,0x00000308,0x00000007,0x0004003b,0x0000001c,0x0000030a,0x00000007, + 0x0004003b,0x0000001c,0x00000312,0x00000007,0x0004003b,0x00000007,0x00000318,0x00000007, + 0x0004003b,0x00000007,0x0000031f,0x00000007,0x0004003b,0x00000007,0x00000327,0x00000007, + 0x0004003b,0x00000007,0x00000334,0x00000007,0x0004003b,0x00000007,0x00000336,0x00000007, + 0x0004003b,0x00000007,0x00000338,0x00000007,0x0004003b,0x00000007,0x0000033f,0x00000007, + 0x0004003b,0x00000007,0x00000341,0x00000007,0x0004003b,0x00000007,0x00000343,0x00000007, + 0x0003003e,0x00000308,0x0000015d,0x00050039,0x00000008,0x00000309,0x0000000b,0x00000308, + 0x0003003e,0x00000307,0x00000309,0x0003003e,0x0000030a,0x000000d6,0x000200f9,0x0000030b, + 0x000200f8,0x0000030b,0x000400f6,0x0000030d,0x0000030e,0x00000000,0x000200f9,0x0000030f, + 0x000200f8,0x0000030f,0x0004003d,0x0000001b,0x00000310,0x0000030a,0x000500b1,0x0000000d, + 0x00000311,0x00000310,0x000000ca,0x000400fa,0x00000311,0x0000030c,0x0000030d,0x000200f8, + 0x0000030c,0x00050041,0x0000001c,0x00000313,0x00000077,0x0000016c,0x0004003d,0x0000001b, + 0x00000314,0x00000313,0x0004003d,0x0000001b,0x00000315,0x0000030a,0x00050080,0x0000001b, + 0x00000316,0x00000314,0x00000315,0x00050084,0x0000001b,0x00000317,0x00000316,0x000002ea, + 0x0003003e,0x00000312,0x00000317,0x0004003d,0x0000001b,0x00000319,0x00000312,0x00050041, + 0x0000001c,0x0000031a,0x00000077,0x0000015d,0x0004003d,0x0000001b,0x0000031b,0x0000031a, + 0x00050080,0x0000001b,0x0000031c,0x00000319,0x0000031b,0x00060041,0x00000280,0x0000031d, + 0x000002fc,0x000000d6,0x0000031c,0x0004003d,0x00000006,0x0000031e,0x0000031d,0x0003003e, + 0x00000318,0x0000031e,0x0004003d,0x0000001b,0x00000320,0x00000312,0x00050041,0x0000001c, + 0x00000321,0x00000077,0x0000015d,0x0004003d,0x0000001b,0x00000322,0x00000321,0x00050080, + 0x0000001b,0x00000323,0x00000320,0x00000322,0x00050080,0x0000001b,0x00000324,0x00000323, + 0x0000011d,0x00060041,0x00000280,0x00000325,0x000002fc,0x000000d6,0x00000324,0x0004003d, + 0x00000006,0x00000326,0x00000325,0x0003003e,0x0000031f,0x00000326,0x0004003d,0x0000001b, + 0x00000328,0x00000312,0x00050041,0x0000001c,0x00000329,0x00000077,0x0000015d,0x0004003d, + 0x0000001b,0x0000032a,0x00000329,0x00050080,0x0000001b,0x0000032b,0x00000328,0x0000032a, + 0x00050080,0x0000001b,0x0000032c,0x0000032b,0x00000112,0x00060041,0x00000280,0x0000032d, + 0x000002fc,0x000000d6,0x0000032c,0x0004003d,0x00000006,0x0000032e,0x0000032d,0x0003003e, + 0x00000327,0x0000032e,0x0004003d,0x0000001b,0x00000333,0x0000030a,0x0004003d,0x00000006, + 0x00000335,0x00000318,0x0003003e,0x00000334,0x00000335,0x0004003d,0x00000006,0x00000337, + 0x0000031f,0x0003003e,0x00000336,0x00000337,0x00060041,0x00000280,0x00000339,0x00000332, + 0x00000333,0x000000d6,0x0004003d,0x00000006,0x0000033a,0x00000339,0x0003003e,0x00000338, + 0x0000033a,0x00070039,0x00000008,0x0000033b,0x0000003c,0x00000334,0x00000336,0x00000338, + 0x0004003d,0x00000008,0x0000033c,0x00000307,0x00050080,0x00000008,0x0000033d,0x0000033c, + 0x0000033b,0x0003003e,0x00000307,0x0000033d,0x0004003d,0x0000001b,0x0000033e,0x0000030a, + 0x0004003d,0x00000006,0x00000340,0x0000031f,0x0003003e,0x0000033f,0x00000340,0x0004003d, + 0x00000006,0x00000342,0x00000327,0x0003003e,0x00000341,0x00000342,0x00060041,0x00000280, + 0x00000344,0x00000332,0x0000033e,0x0000011d,0x0004003d,0x00000006,0x00000345,0x00000344, + 0x0003003e,0x00000343,0x00000345,0x00070039,0x00000008,0x00000346,0x0000003c,0x0000033f, + 0x00000341,0x00000343,0x0004003d,0x00000008,0x00000347,0x00000307,0x00050080,0x00000008, + 0x00000348,0x00000347,0x00000346,0x0003003e,0x00000307,0x00000348,0x000200f9,0x0000030e, + 0x000200f8,0x0000030e,0x0004003d,0x0000001b,0x00000349,0x0000030a,0x00050080,0x0000001b, + 0x0000034a,0x00000349,0x0000011d,0x0003003e,0x0000030a,0x0000034a,0x000200f9,0x0000030b, + 0x000200f8,0x0000030d,0x0004003d,0x00000008,0x0000034b,0x00000307,0x000200fe,0x0000034b, + 0x00010038,0x00050036,0x0000007a,0x0000007d,0x00000000,0x0000007b,0x00030037,0x00000048, + 0x0000007c,0x000200f8,0x0000007e,0x0004003b,0x00000048,0x0000034e,0x00000007,0x0004003b, + 0x00000048,0x00000350,0x00000007,0x0004003b,0x00000355,0x00000356,0x00000007,0x0004003d, + 0x0000003e,0x0000034f,0x0000007c,0x0003003e,0x0000034e,0x0000034f,0x0004003d,0x0000003e, + 0x00000351,0x0000034e,0x00050050,0x0000003e,0x00000353,0x00000352,0x00000352,0x000500c3, + 0x0000003e,0x00000354,0x00000351,0x00000353,0x0003003e,0x00000350,0x00000354,0x0004003d, + 0x0000003e,0x00000357,0x0000034e,0x0004003d,0x0000003e,0x00000358,0x00000350,0x00050080, + 0x0000003e,0x00000359,0x00000357,0x00000358,0x0004003d,0x0000003e,0x0000035a,0x00000350, + 0x000500c6,0x0000003e,0x0000035b,0x00000359,0x0000035a,0x0004007c,0x0000007a,0x0000035c, + 0x0000035b,0x0003003e,0x00000356,0x0000035c,0x0004003d,0x0000007a,0x0000035d,0x00000356, + 0x000200fe,0x0000035d,0x00010038,0x00050036,0x00000006,0x00000080,0x00000000,0x00000049, + 0x00030037,0x00000048,0x0000007f,0x000200f8,0x00000081,0x0004003b,0x00000355,0x00000360, + 0x00000007,0x0004003b,0x00000048,0x00000364,0x00000007,0x0004003d,0x0000003e,0x00000361, + 0x0000007f,0x00050050,0x0000003e,0x00000362,0x000000ca,0x000000ca,0x00050082,0x0000003e, + 0x00000363,0x00000361,0x00000362,0x0003003e,0x00000364,0x00000363,0x00050039,0x0000007a, + 0x00000365,0x0000007d,0x00000364,0x0003003e,0x00000360,0x00000365,0x00050041,0x00000007, + 0x00000366,0x00000360,0x0000016c,0x0004003d,0x00000006,0x00000367,0x00000366,0x000500c4, + 0x00000006,0x00000369,0x00000367,0x00000368,0x00050041,0x00000007,0x0000036a,0x00000360, + 0x0000015d,0x0004003d,0x00000006,0x0000036b,0x0000036a,0x000500c4,0x00000006,0x0000036c, + 0x0000036b,0x000000ca,0x000500c5,0x00000006,0x0000036d,0x00000369,0x0000036c,0x00050041, + 0x0000001c,0x0000036e,0x0000007f,0x0000016c,0x0004003d,0x0000001b,0x0000036f,0x0000036e, + 0x000500c4,0x0000001b,0x00000370,0x0000036f,0x000000fc,0x0004007c,0x00000006,0x00000371, + 0x00000370,0x000500c5,0x00000006,0x00000372,0x0000036d,0x00000371,0x00050041,0x0000001c, + 0x00000373,0x0000007f,0x0000015d,0x0004003d,0x0000001b,0x00000374,0x00000373,0x0004007c, + 0x00000006,0x00000375,0x00000374,0x000500c5,0x00000006,0x00000376,0x00000372,0x00000375, + 0x000200fe,0x00000376,0x00010038,0x00050036,0x0000003e,0x00000084,0x00000000,0x00000082, + 0x00030037,0x00000007,0x00000083,0x000200f8,0x00000085,0x0004003b,0x0000001c,0x00000379, + 0x00000007,0x0004003b,0x0000001c,0x0000037e,0x00000007,0x0004003d,0x00000006,0x0000037a, + 0x00000083,0x000500c7,0x00000006,0x0000037b,0x0000037a,0x000001d7,0x0004007c,0x0000001b, + 0x0000037c,0x0000037b,0x00050082,0x0000001b,0x0000037d,0x0000037c,0x000000ca,0x0003003e, + 0x00000379,0x0000037d,0x0004003d,0x00000006,0x0000037f,0x00000083,0x000500c2,0x00000006, + 0x00000380,0x0000037f,0x000000fc,0x000500c7,0x00000006,0x00000381,0x00000380,0x000001d7, + 0x0004007c,0x0000001b,0x00000382,0x00000381,0x00050082,0x0000001b,0x00000383,0x00000382, + 0x000000ca,0x0003003e,0x0000037e,0x00000383,0x0004003d,0x0000001b,0x00000384,0x00000379, + 0x0004003d,0x0000001b,0x00000385,0x0000037e,0x00050050,0x0000003e,0x00000386,0x00000384, + 0x00000385,0x000200fe,0x00000386,0x00010038,0x00050036,0x00000002,0x0000008a,0x00000000, + 0x00000087,0x00030037,0x00000048,0x00000088,0x00030037,0x00000086,0x00000089,0x000200f8, + 0x0000008b,0x0004003b,0x00000048,0x00000397,0x00000007,0x0004003b,0x00000048,0x000003a9, + 0x00000007,0x0004003b,0x00000048,0x000003bb,0x00000007,0x0004003b,0x00000048,0x000003cd, + 0x00000007,0x00050041,0x0000001c,0x00000389,0x00000088,0x0000016c,0x0004003d,0x0000001b, + 0x0000038a,0x00000389,0x00050041,0x0000001c,0x0000038b,0x00000088,0x0000015d,0x0004003d, + 0x0000001b,0x0000038c,0x0000038b,0x00050041,0x00000007,0x0000038d,0x00000089,0x0000015d, + 0x0004003d,0x00000006,0x0000038e,0x0000038d,0x000500c4,0x00000006,0x0000038f,0x0000038e, + 0x000000ce,0x00050041,0x0000001c,0x00000390,0x00000088,0x0000015d,0x0004003d,0x0000001b, + 0x00000391,0x00000390,0x00050084,0x0000001b,0x00000392,0x00000391,0x000000fc,0x00050080, + 0x0000001b,0x00000393,0x00000392,0x000000d6,0x00050041,0x0000001c,0x00000394,0x00000088, + 0x0000016c,0x0004003d,0x0000001b,0x00000395,0x00000394,0x00050050,0x0000003e,0x00000396, + 0x00000393,0x00000395,0x0003003e,0x00000397,0x00000396,0x00050039,0x00000006,0x00000398, + 0x00000080,0x00000397,0x000500c5,0x00000006,0x00000399,0x0000038f,0x00000398,0x00070041, + 0x00000280,0x0000039a,0x00000294,0x000000d6,0x0000038a,0x0000038c,0x0003003e,0x0000039a, + 0x00000399,0x00050041,0x0000001c,0x0000039b,0x00000088,0x0000016c,0x0004003d,0x0000001b, + 0x0000039c,0x0000039b,0x00050041,0x0000001c,0x0000039d,0x00000088,0x0000015d,0x0004003d, + 0x0000001b,0x0000039e,0x0000039d,0x00050041,0x00000007,0x0000039f,0x00000089,0x0000016c, + 0x0004003d,0x00000006,0x000003a0,0x0000039f,0x000500c4,0x00000006,0x000003a1,0x000003a0, + 0x000000ce,0x00050041,0x0000001c,0x000003a2,0x00000088,0x0000015d,0x0004003d,0x0000001b, + 0x000003a3,0x000003a2,0x00050084,0x0000001b,0x000003a4,0x000003a3,0x000000fc,0x00050080, + 0x0000001b,0x000003a5,0x000003a4,0x0000011d,0x00050041,0x0000001c,0x000003a6,0x00000088, + 0x0000016c,0x0004003d,0x0000001b,0x000003a7,0x000003a6,0x00050050,0x0000003e,0x000003a8, + 0x000003a5,0x000003a7,0x0003003e,0x000003a9,0x000003a8,0x00050039,0x00000006,0x000003aa, + 0x00000080,0x000003a9,0x000500c5,0x00000006,0x000003ab,0x000003a1,0x000003aa,0x00070041, + 0x00000280,0x000003ac,0x00000294,0x0000011d,0x0000039c,0x0000039e,0x0003003e,0x000003ac, + 0x000003ab,0x00050041,0x0000001c,0x000003ad,0x00000088,0x0000016c,0x0004003d,0x0000001b, + 0x000003ae,0x000003ad,0x00050041,0x0000001c,0x000003af,0x00000088,0x0000015d,0x0004003d, + 0x0000001b,0x000003b0,0x000003af,0x00050041,0x00000007,0x000003b1,0x00000089,0x0000017b, + 0x0004003d,0x00000006,0x000003b2,0x000003b1,0x000500c4,0x00000006,0x000003b3,0x000003b2, + 0x000000ce,0x00050041,0x0000001c,0x000003b4,0x00000088,0x0000015d,0x0004003d,0x0000001b, + 0x000003b5,0x000003b4,0x00050084,0x0000001b,0x000003b6,0x000003b5,0x000000fc,0x00050080, + 0x0000001b,0x000003b7,0x000003b6,0x00000112,0x00050041,0x0000001c,0x000003b8,0x00000088, + 0x0000016c,0x0004003d,0x0000001b,0x000003b9,0x000003b8,0x00050050,0x0000003e,0x000003ba, + 0x000003b7,0x000003b9,0x0003003e,0x000003bb,0x000003ba,0x00050039,0x00000006,0x000003bc, + 0x00000080,0x000003bb,0x000500c5,0x00000006,0x000003bd,0x000003b3,0x000003bc,0x00070041, + 0x00000280,0x000003be,0x00000294,0x00000112,0x000003ae,0x000003b0,0x0003003e,0x000003be, + 0x000003bd,0x00050041,0x0000001c,0x000003bf,0x00000088,0x0000016c,0x0004003d,0x0000001b, + 0x000003c0,0x000003bf,0x00050041,0x0000001c,0x000003c1,0x00000088,0x0000015d,0x0004003d, + 0x0000001b,0x000003c2,0x000003c1,0x00050041,0x00000007,0x000003c3,0x00000089,0x000000a5, + 0x0004003d,0x00000006,0x000003c4,0x000003c3,0x000500c4,0x00000006,0x000003c5,0x000003c4, + 0x000000ce,0x00050041,0x0000001c,0x000003c6,0x00000088,0x0000015d,0x0004003d,0x0000001b, + 0x000003c7,0x000003c6,0x00050084,0x0000001b,0x000003c8,0x000003c7,0x000000fc,0x00050080, + 0x0000001b,0x000003c9,0x000003c8,0x00000107,0x00050041,0x0000001c,0x000003ca,0x00000088, + 0x0000016c,0x0004003d,0x0000001b,0x000003cb,0x000003ca,0x00050050,0x0000003e,0x000003cc, + 0x000003c9,0x000003cb,0x0003003e,0x000003cd,0x000003cc,0x00050039,0x00000006,0x000003ce, + 0x00000080,0x000003cd,0x000500c5,0x00000006,0x000003cf,0x000003c5,0x000003ce,0x00070041, + 0x00000280,0x000003d0,0x00000294,0x00000107,0x000003c0,0x000003c2,0x0003003e,0x000003d0, + 0x000003cf,0x000300e1,0x0000017b,0x00000282,0x000400e0,0x0000017b,0x0000017b,0x00000283, + 0x000100fd,0x00010038,0x00050036,0x00000006,0x00000090,0x00000000,0x0000008c,0x00030037, + 0x00000007,0x0000008d,0x00030037,0x00000007,0x0000008e,0x00030037,0x00000007,0x0000008f, + 0x000200f8,0x00000091,0x0004003b,0x00000007,0x000003d1,0x00000007,0x0004003d,0x00000006, + 0x000003d2,0x0000008f,0x000500c4,0x00000006,0x000003d3,0x0000016c,0x000003d2,0x00050082, + 0x00000006,0x000003d4,0x000003d3,0x0000016c,0x0003003e,0x000003d1,0x000003d4,0x0004003d, + 0x00000006,0x000003d5,0x0000008d,0x0004003d,0x00000006,0x000003d6,0x0000008e,0x000500c2, + 0x00000006,0x000003d7,0x000003d5,0x000003d6,0x0004003d,0x00000006,0x000003d8,0x000003d1, + 0x000500c7,0x00000006,0x000003d9,0x000003d7,0x000003d8,0x000200fe,0x000003d9,0x00010038, + 0x00050036,0x00000002,0x00000098,0x00000000,0x00000092,0x00030037,0x00000048,0x00000093, + 0x00030037,0x0000001c,0x00000094,0x00030037,0x00000048,0x00000095,0x00030037,0x00000048, + 0x00000096,0x00030037,0x0000001c,0x00000097,0x000200f8,0x00000099,0x0004003b,0x00000007, + 0x000003de,0x00000007,0x0004003b,0x00000007,0x000003df,0x00000007,0x0004003b,0x00000007, + 0x000003e0,0x00000007,0x0004003b,0x00000007,0x000003e5,0x00000007,0x0004003b,0x00000007, + 0x000003e6,0x00000007,0x0004003b,0x00000007,0x000003e7,0x00000007,0x0004003b,0x00000007, + 0x000003ed,0x00000007,0x0004003b,0x00000007,0x000003ee,0x00000007,0x0004003b,0x00000007, + 0x000003ef,0x00000007,0x0004003b,0x00000007,0x000003f3,0x00000007,0x0004003b,0x00000007, + 0x000003f4,0x00000007,0x0004003b,0x00000007,0x000003f5,0x00000007,0x0004003d,0x0000001b, + 0x000003dc,0x00000094,0x0004007c,0x00000006,0x000003dd,0x000003dc,0x0003003e,0x000003de, + 0x000003dd,0x0003003e,0x000003df,0x0000015d,0x0003003e,0x000003e0,0x0000017b,0x00070039, + 0x00000006,0x000003e1,0x00000090,0x000003de,0x000003df,0x000003e0,0x0004007c,0x0000001b, + 0x000003e2,0x000003e1,0x0004003d,0x0000001b,0x000003e3,0x00000094,0x0004007c,0x00000006, + 0x000003e4,0x000003e3,0x0003003e,0x000003e5,0x000003e4,0x0003003e,0x000003e6,0x0000017b, + 0x0003003e,0x000003e7,0x00000291,0x00070039,0x00000006,0x000003e8,0x00000090,0x000003e5, + 0x000003e6,0x000003e7,0x0004007c,0x0000001b,0x000003e9,0x000003e8,0x00050050,0x0000003e, + 0x000003ea,0x000003e2,0x000003e9,0x0003003e,0x00000095,0x000003ea,0x0004003d,0x0000001b, + 0x000003eb,0x00000094,0x0004007c,0x00000006,0x000003ec,0x000003eb,0x0003003e,0x000003ed, + 0x000003ec,0x0003003e,0x000003ee,0x0000016c,0x0003003e,0x000003ef,0x0000016c,0x00070039, + 0x00000006,0x000003f0,0x00000090,0x000003ed,0x000003ee,0x000003ef,0x0004003d,0x0000001b, + 0x000003f1,0x00000094,0x0004007c,0x00000006,0x000003f2,0x000003f1,0x0003003e,0x000003f3, + 0x000003f2,0x0003003e,0x000003f4,0x000001ce,0x0003003e,0x000003f5,0x0000016c,0x00070039, + 0x00000006,0x000003f6,0x00000090,0x000003f3,0x000003f4,0x000003f5,0x000500c4,0x00000006, + 0x000003f7,0x000003f6,0x0000016c,0x000500c5,0x00000006,0x000003f8,0x000003f0,0x000003f7, + 0x0004007c,0x0000001b,0x000003f9,0x000003f8,0x0003003e,0x00000097,0x000003f9,0x0004003d, + 0x0000003e,0x000003fa,0x00000093,0x00050050,0x0000007a,0x000003fb,0x00000291,0x00000291, + 0x000500c4,0x0000003e,0x000003fc,0x000003fa,0x000003fb,0x0004003d,0x0000003e,0x000003fd, + 0x00000095,0x00050084,0x0000003e,0x000003ff,0x000003fd,0x000003fe,0x00050080,0x0000003e, + 0x00000400,0x000003fc,0x000003ff,0x0003003e,0x00000096,0x00000400,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x0000009f,0x00000000,0x0000009a,0x00030037,0x00000048,0x0000009b, + 0x00030037,0x00000048,0x0000009c,0x00030037,0x00000048,0x0000009d,0x00030037,0x0000001c, + 0x0000009e,0x000200f8,0x000000a0,0x0004003b,0x00000048,0x00000401,0x00000007,0x0004003b, + 0x00000048,0x00000402,0x00000007,0x0004003b,0x0000001c,0x00000403,0x00000007,0x0004003b, + 0x00000048,0x00000404,0x00000007,0x0004003b,0x0000001c,0x00000406,0x00000007,0x0004003b, + 0x00000048,0x00000408,0x00000007,0x0004003b,0x00000048,0x00000409,0x00000007,0x0004003b, + 0x0000001c,0x0000040a,0x00000007,0x0004003b,0x00000048,0x0000040f,0x00000007,0x0004003b, + 0x00000048,0x00000424,0x00000007,0x0004003b,0x00000048,0x00000426,0x00000007,0x0004003b, + 0x00000429,0x0000042a,0x00000007,0x0004003b,0x00000007,0x0000042f,0x00000007,0x0004003b, + 0x00000048,0x00000430,0x00000007,0x0004003b,0x00000007,0x00000433,0x00000007,0x0004003b, + 0x00000048,0x00000434,0x00000007,0x0004003b,0x00000007,0x00000437,0x00000007,0x0004003b, + 0x00000007,0x00000438,0x00000007,0x0004003b,0x00000007,0x0000043a,0x00000007,0x0004003b, + 0x00000048,0x0000043d,0x00000007,0x0004003b,0x00000048,0x00000441,0x00000007,0x0004003b, + 0x00000048,0x00000445,0x00000007,0x0004003b,0x00000048,0x00000458,0x00000007,0x0004003b, + 0x00000048,0x0000045c,0x00000007,0x0004003b,0x0000001c,0x0000047b,0x00000007,0x0004003b, + 0x00000048,0x0000047d,0x00000007,0x0004003b,0x00000086,0x0000047f,0x00000007,0x0004003b, + 0x00000048,0x00000480,0x00000007,0x0004003b,0x00000048,0x00000483,0x00000007,0x0004003b, + 0x00000086,0x00000485,0x00000007,0x0004003b,0x00000007,0x00000488,0x00000007,0x0004003b, + 0x00000048,0x00000489,0x00000007,0x0004003b,0x0000001c,0x0000048b,0x00000007,0x0004003b, + 0x00000048,0x0000048e,0x00000007,0x0004003b,0x00000007,0x0000048f,0x00000007,0x0004003b, + 0x00000048,0x00000492,0x00000007,0x0004003b,0x00000007,0x00000496,0x00000007,0x0004003b, + 0x00000007,0x0000049d,0x00000007,0x0004003b,0x0000001c,0x0000049f,0x00000007,0x0004003b, + 0x0000001c,0x000004a1,0x00000007,0x0004003b,0x0000001c,0x000004a3,0x00000007,0x0004003b, + 0x00000048,0x000004b3,0x00000007,0x0004003b,0x00000048,0x000004b4,0x00000007,0x0004003d, + 0x0000003e,0x00000405,0x0000009d,0x0003003e,0x00000404,0x00000405,0x0004003d,0x0000001b, + 0x00000407,0x0000009e,0x0003003e,0x00000406,0x00000407,0x00090039,0x00000002,0x0000040b, + 0x00000098,0x00000404,0x00000406,0x00000408,0x00000409,0x0000040a,0x0004003d,0x0000003e, + 0x0000040c,0x00000408,0x0003003e,0x00000401,0x0000040c,0x0004003d,0x0000003e,0x0000040d, + 0x00000409,0x0003003e,0x00000402,0x0000040d,0x0004003d,0x0000001b,0x0000040e,0x0000040a, + 0x0003003e,0x00000403,0x0000040e,0x0004003d,0x0000003e,0x00000410,0x00000402,0x00050050, + 0x0000007a,0x00000411,0x000000a5,0x000000a5,0x000500c3,0x0000003e,0x00000412,0x00000410, + 0x00000411,0x0003003e,0x0000040f,0x00000412,0x00040039,0x0000000d,0x00000413,0x0000005d, + 0x000300f7,0x00000415,0x00000000,0x000400fa,0x00000413,0x00000414,0x00000415,0x000200f8, + 0x00000414,0x00050041,0x0000001c,0x00000416,0x00000401,0x0000016c,0x0004003d,0x0000001b, + 0x00000417,0x00000416,0x000500c7,0x0000001b,0x00000419,0x00000417,0x00000418,0x000500aa, + 0x0000000d,0x0000041a,0x00000419,0x000000d6,0x000300f7,0x0000041c,0x00000000,0x000400fa, + 0x0000041a,0x0000041b,0x0000041c,0x000200f8,0x0000041b,0x00050041,0x0000001c,0x0000041d, + 0x00000401,0x0000015d,0x0004003d,0x0000001b,0x0000041e,0x0000041d,0x000500c7,0x0000001b, + 0x0000041f,0x0000041e,0x0000011d,0x000500aa,0x0000000d,0x00000420,0x0000041f,0x000000d6, + 0x000200f9,0x0000041c,0x000200f8,0x0000041c,0x000700f5,0x0000000d,0x00000421,0x0000041a, + 0x00000414,0x00000420,0x0000041b,0x000300f7,0x00000423,0x00000000,0x000400fa,0x00000421, + 0x00000422,0x00000423,0x000200f8,0x00000422,0x0004003d,0x0000003e,0x00000425,0x0000040f, + 0x0003003e,0x00000424,0x00000425,0x0003003e,0x00000426,0x000001fe,0x00060039,0x00000002, + 0x00000427,0x00000057,0x00000424,0x00000426,0x000200f9,0x00000423,0x000200f8,0x00000423, + 0x000100fd,0x000200f8,0x00000415,0x00040039,0x00000006,0x0000042b,0x00000044,0x00040039, + 0x00000006,0x0000042c,0x00000046,0x00050082,0x00000006,0x0000042d,0x0000042c,0x0000016c, + 0x000500ab,0x0000000d,0x0000042e,0x0000042b,0x0000042d,0x0003003e,0x0000042a,0x0000042e, + 0x0004003d,0x0000003e,0x00000431,0x00000402,0x0003003e,0x00000430,0x00000431,0x00050039, + 0x00000006,0x00000432,0x00000060,0x00000430,0x0003003e,0x0000042f,0x00000432,0x0004003d, + 0x0000003e,0x00000435,0x00000402,0x0003003e,0x00000434,0x00000435,0x00050039,0x00000006, + 0x00000436,0x00000063,0x00000434,0x0003003e,0x00000433,0x00000436,0x0004003d,0x00000006, + 0x00000439,0x0000042f,0x0003003e,0x00000438,0x00000439,0x0004003d,0x00000006,0x0000043b, + 0x00000433,0x0003003e,0x0000043a,0x0000043b,0x00060039,0x00000006,0x0000043c,0x00000036, + 0x00000438,0x0000043a,0x0003003e,0x00000437,0x0000043c,0x0004003d,0x0000003e,0x0000043e, + 0x0000009d,0x00050050,0x0000007a,0x0000043f,0x0000016c,0x0000016c,0x000500c4,0x0000003e, + 0x00000440,0x0000043e,0x0000043f,0x0003003e,0x0000043d,0x00000440,0x0004003d,0x0000003e, + 0x00000442,0x0000009d,0x00050050,0x0000007a,0x00000443,0x00000291,0x00000291,0x000500c4, + 0x0000003e,0x00000444,0x00000442,0x00000443,0x0003003e,0x00000441,0x00000444,0x00050041, + 0x0000001c,0x00000446,0x00000445,0x0000016c,0x0003003e,0x00000446,0x000000d6,0x000200f9, + 0x00000447,0x000200f8,0x00000447,0x000400f6,0x00000449,0x0000044a,0x00000000,0x000200f9, + 0x0000044b,0x000200f8,0x0000044b,0x00050041,0x0000001c,0x0000044c,0x00000445,0x0000016c, + 0x0004003d,0x0000001b,0x0000044d,0x0000044c,0x000500b1,0x0000000d,0x0000044e,0x0000044d, + 0x00000112,0x000400fa,0x0000044e,0x00000448,0x00000449,0x000200f8,0x00000448,0x00050041, + 0x0000001c,0x0000044f,0x00000445,0x0000015d,0x0003003e,0x0000044f,0x000000d6,0x000200f9, + 0x00000450,0x000200f8,0x00000450,0x000400f6,0x00000452,0x00000453,0x00000000,0x000200f9, + 0x00000454,0x000200f8,0x00000454,0x00050041,0x0000001c,0x00000455,0x00000445,0x0000015d, + 0x0004003d,0x0000001b,0x00000456,0x00000455,0x000500b1,0x0000000d,0x00000457,0x00000456, + 0x00000112,0x000400fa,0x00000457,0x00000451,0x00000452,0x000200f8,0x00000451,0x0004003d, + 0x0000003e,0x00000459,0x0000043d,0x0004003d,0x0000003e,0x0000045a,0x00000445,0x00050080, + 0x0000003e,0x0000045b,0x00000459,0x0000045a,0x0003003e,0x0000045c,0x0000045b,0x00050039, + 0x0000003e,0x0000045d,0x00000052,0x0000045c,0x0003003e,0x00000458,0x0000045d,0x0004003d, + 0x0000000d,0x0000045e,0x0000042a,0x000400a8,0x0000000d,0x0000045f,0x0000045e,0x000300f7, + 0x00000461,0x00000000,0x000400fa,0x0000045f,0x00000460,0x00000461,0x000200f8,0x00000460, + 0x0003003e,0x00000458,0x000001fe,0x000200f9,0x00000461,0x000200f8,0x00000461,0x0004003d, + 0x0000001b,0x00000462,0x00000403,0x00050041,0x0000001c,0x00000463,0x00000445,0x0000016c, + 0x0004003d,0x0000001b,0x00000464,0x00000463,0x00050084,0x0000001b,0x00000465,0x00000464, + 0x00000112,0x00050041,0x0000001c,0x00000466,0x00000445,0x0000015d,0x0004003d,0x0000001b, + 0x00000467,0x00000466,0x00050080,0x0000001b,0x00000468,0x00000465,0x00000467,0x000500aa, + 0x0000000d,0x00000469,0x00000462,0x00000468,0x000300f7,0x0000046b,0x00000000,0x000400fa, + 0x00000469,0x0000046a,0x0000046b,0x000200f8,0x0000046a,0x00050041,0x0000001c,0x0000046c, + 0x00000401,0x0000016c,0x0004003d,0x0000001b,0x0000046d,0x0000046c,0x000500c7,0x0000001b, + 0x0000046e,0x0000046d,0x00000418,0x00050041,0x0000001c,0x0000046f,0x00000401,0x0000015d, + 0x0004003d,0x0000001b,0x00000470,0x0000046f,0x000500c7,0x0000001b,0x00000471,0x00000470, + 0x0000011d,0x0004003d,0x00000006,0x00000472,0x0000042f,0x00060041,0x00000280,0x00000473, + 0x00000332,0x0000046e,0x00000471,0x0003003e,0x00000473,0x00000472,0x000200f9,0x0000046b, + 0x000200f8,0x0000046b,0x0004003d,0x0000003e,0x00000474,0x00000441,0x0004003d,0x0000003e, + 0x00000475,0x00000445,0x00050050,0x0000003e,0x00000476,0x000000ca,0x000000ca,0x00050084, + 0x0000003e,0x00000477,0x00000475,0x00000476,0x00050080,0x0000003e,0x00000478,0x00000474, + 0x00000477,0x0004003d,0x0000003e,0x00000479,0x00000458,0x00050080,0x0000003e,0x0000047a, + 0x00000478,0x00000479,0x0004003d,0x0000001b,0x0000047c,0x0000009e,0x0003003e,0x0000047b, + 0x0000047c,0x0003003e,0x0000047d,0x0000047a,0x00060039,0x00000002,0x0000047e,0x00000074, + 0x0000047b,0x0000047d,0x0004003d,0x0000003e,0x00000481,0x00000401,0x0003003e,0x00000480, + 0x00000481,0x00050039,0x00000008,0x00000482,0x00000078,0x00000480,0x0003003e,0x0000047f, + 0x00000482,0x0004003d,0x0000003e,0x00000484,0x00000401,0x0003003e,0x00000483,0x00000484, + 0x0004003d,0x00000008,0x00000486,0x0000047f,0x0003003e,0x00000485,0x00000486,0x00060039, + 0x00000002,0x00000487,0x0000008a,0x00000483,0x00000485,0x0004003d,0x0000003e,0x0000048a, + 0x00000401,0x0003003e,0x00000489,0x0000048a,0x0004003d,0x0000001b,0x0000048c,0x0000009e, + 0x0003003e,0x0000048b,0x0000048c,0x00060039,0x00000006,0x0000048d,0x0000006f,0x00000489, + 0x0000048b,0x0003003e,0x00000488,0x0000048d,0x0004003d,0x00000006,0x00000490,0x00000488, + 0x0003003e,0x0000048f,0x00000490,0x00050039,0x0000003e,0x00000491,0x00000084,0x0000048f, + 0x0003003e,0x0000048e,0x00000491,0x0004003d,0x0000003e,0x00000493,0x00000458,0x0004003d, + 0x0000003e,0x00000494,0x0000048e,0x00050080,0x0000003e,0x00000495,0x00000493,0x00000494, + 0x0003003e,0x00000492,0x00000495,0x00050041,0x0000001c,0x00000497,0x00000445,0x0000015d, + 0x0004003d,0x0000001b,0x00000498,0x00000497,0x00050041,0x0000001c,0x00000499,0x00000445, + 0x0000016c,0x0004003d,0x0000001b,0x0000049a,0x00000499,0x00050084,0x0000001b,0x0000049b, + 0x0000049a,0x00000112,0x00050080,0x0000001b,0x0000049c,0x00000498,0x0000049b,0x0004003d, + 0x00000006,0x0000049e,0x00000437,0x0003003e,0x0000049d,0x0000049e,0x0004003d,0x0000001b, + 0x000004a0,0x0000009e,0x0003003e,0x0000049f,0x000004a0,0x0004003d,0x0000001b,0x000004a2, + 0x00000403,0x0003003e,0x000004a1,0x000004a2,0x0003003e,0x000004a3,0x0000049c,0x00080039, + 0x00000006,0x000004a4,0x0000006a,0x0000049d,0x0000049f,0x000004a1,0x000004a3,0x0003003e, + 0x00000496,0x000004a4,0x00040039,0x00000006,0x000004a5,0x00000044,0x000500aa,0x0000000d, + 0x000004a6,0x000004a5,0x0000015d,0x000300f7,0x000004a8,0x00000000,0x000400fa,0x000004a6, + 0x000004a7,0x000004a8,0x000200f8,0x000004a7,0x0004003d,0x00000006,0x000004a9,0x00000496, + 0x0004003d,0x00000006,0x000004aa,0x00000488,0x000500c2,0x00000006,0x000004ab,0x000004aa, + 0x0000028f,0x000500b2,0x0000000d,0x000004ac,0x000004a9,0x000004ab,0x000200f9,0x000004a8, + 0x000200f8,0x000004a8,0x000700f5,0x0000000d,0x000004ad,0x000004a6,0x0000046b,0x000004ac, + 0x000004a7,0x000300f7,0x000004af,0x00000000,0x000400fa,0x000004ad,0x000004ae,0x000004af, + 0x000200f8,0x000004ae,0x0003003e,0x00000492,0x000001fe,0x000200f9,0x000004af,0x000200f8, + 0x000004af,0x0004003d,0x0000003e,0x000004b0,0x0000043d,0x0004003d,0x0000003e,0x000004b1, + 0x00000445,0x00050080,0x0000003e,0x000004b2,0x000004b0,0x000004b1,0x0003003e,0x000004b3, + 0x000004b2,0x0004003d,0x0000003e,0x000004b5,0x00000492,0x0003003e,0x000004b4,0x000004b5, + 0x00060039,0x00000002,0x000004b6,0x00000057,0x000004b3,0x000004b4,0x000200f9,0x00000453, + 0x000200f8,0x00000453,0x00050041,0x0000001c,0x000004b7,0x00000445,0x0000015d,0x0004003d, + 0x0000001b,0x000004b8,0x000004b7,0x00050080,0x0000001b,0x000004b9,0x000004b8,0x0000011d, + 0x0003003e,0x000004b7,0x000004b9,0x000200f9,0x00000450,0x000200f8,0x00000452,0x000200f9, + 0x0000044a,0x000200f8,0x0000044a,0x00050041,0x0000001c,0x000004ba,0x00000445,0x0000016c, + 0x0004003d,0x0000001b,0x000004bb,0x000004ba,0x00050080,0x0000001b,0x000004bc,0x000004bb, + 0x0000011d,0x0003003e,0x000004ba,0x000004bc,0x000200f9,0x00000447,0x000200f8,0x00000449, + 0x000100fd,0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_of_compute_scd_divergence_comp_spv.h b/gpu/vk/shaders/fsr3_of_compute_scd_divergence_comp_spv.h new file mode 100644 index 000000000..c1c08bdbc --- /dev/null +++ b/gpu/vk/shaders/fsr3_of_compute_scd_divergence_comp_spv.h @@ -0,0 +1,625 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_OF_COMPUTE_SCD_DIVERGENCE_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x00000319,0x00000000,0x00020011,0x00000001,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x0009000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x000002fb,0x000002fe,0x00000304, + 0x00000307,0x00060010,0x00000004,0x00000011,0x00000100,0x00000001,0x00000001,0x00030003, + 0x00000002,0x000001c2,0x000b0004,0x455f4c47,0x735f5458,0x6c706d61,0x656c7265,0x745f7373, + 0x75747865,0x665f6572,0x74636e75,0x736e6f69,0x00000000,0x000b0004,0x455f4c47,0x735f5458, + 0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570, + 0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f, + 0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65, + 0x74636572,0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000b, + 0x41786666,0x6e495573,0x28323374,0x003b3166,0x00030005,0x0000000a,0x00000078,0x00060005, + 0x00000012,0x4d786666,0x69286e69,0x31693b31,0x0000003b,0x00030005,0x00000010,0x00000078, + 0x00030005,0x00000011,0x00000079,0x00060005,0x00000018,0x4d786666,0x75286e69,0x31753b31, + 0x0000003b,0x00030005,0x00000016,0x00000078,0x00030005,0x00000017,0x00000079,0x00060005, + 0x0000001c,0x4d786666,0x69287861,0x31693b31,0x0000003b,0x00030005,0x0000001a,0x00000078, + 0x00030005,0x0000001b,0x00000079,0x000a0005,0x00000021,0x736f7243,0x53646573,0x656e6563, + 0x6e616843,0x68546567,0x68736572,0x28646c6f,0x003b3166,0x00070005,0x00000020,0x6e656373, + 0x61684365,0x5665676e,0x65756c61,0x00000000,0x00080005,0x00000025,0x64616f4c,0x43537752, + 0x73694844,0x72676f74,0x69286d61,0x00003b31,0x00040005,0x00000024,0x646e4969,0x00007865, + 0x00090005,0x0000002a,0x726f7453,0x44435365,0x74736948,0x6172676f,0x3169286d,0x3b31753b, + 0x00000000,0x00040005,0x00000028,0x646e4969,0x00007865,0x00040005,0x00000029,0x756c6176, + 0x00000065,0x000a0005,0x0000002e,0x64616f4c,0x43537752,0x65725044,0x756f6976,0x73694873, + 0x72676f74,0x69286d61,0x00003b31,0x00040005,0x0000002d,0x646e4969,0x00007865,0x000b0005, + 0x00000033,0x726f7453,0x44435365,0x76657250,0x73756f69,0x74736948,0x6172676f,0x3169286d, + 0x3b31663b,0x00000000,0x00040005,0x00000031,0x646e4969,0x00007865,0x00040005,0x00000032, + 0x756c6176,0x00000065,0x00070005,0x00000036,0x64616f4c,0x43537752,0x6d655444,0x31692870, + 0x0000003b,0x00040005,0x00000035,0x646e4969,0x00007865,0x000a0005,0x0000003a,0x6d6f7441, + 0x6e496369,0x6d657263,0x53746e65,0x65544443,0x6928706d,0x31753b31,0x0000003b,0x00040005, + 0x00000038,0x646e4969,0x00007865,0x00050005,0x00000039,0x756c6176,0x416f5465,0x00006464, + 0x00060005,0x0000003c,0x65736552,0x44435374,0x706d6554,0x00000028,0x00070005,0x0000003f, + 0x64616f4c,0x43537752,0x74754f44,0x28747570,0x003b3169,0x00040005,0x0000003e,0x646e4969, + 0x00007865,0x00080005,0x00000043,0x726f7453,0x44435365,0x7074754f,0x69287475,0x31753b31, + 0x0000003b,0x00040005,0x00000041,0x646e4969,0x00007865,0x00040005,0x00000042,0x756c6176, + 0x00000065,0x000a0005,0x00000048,0x6d6f7441,0x6e496369,0x6d657263,0x53746e65,0x754f4443, + 0x74757074,0x3b316928,0x003b3175,0x00040005,0x00000046,0x646e4969,0x00007865,0x00050005, + 0x00000047,0x756c6176,0x416f5465,0x00006464,0x000f0005,0x00000054,0x706d6f43,0x53657475, + 0x69484443,0x676f7473,0x736d6172,0x65766944,0x6e656772,0x76286563,0x763b3369,0x693b3269, + 0x69763b31,0x69763b32,0x00003b32,0x00050005,0x0000004f,0x6f6c4769,0x496c6162,0x00000064, + 0x00050005,0x00000050,0x636f4c69,0x64496c61,0x00000000,0x00050005,0x00000051,0x636f4c69, + 0x6e496c61,0x00786564,0x00050005,0x00000052,0x6f724769,0x64497075,0x00000000,0x00050005, + 0x00000053,0x6f724769,0x69537075,0x0000657a,0x000a0005,0x00000070,0x6f5f7772,0x63697470, + 0x665f6c61,0x5f776f6c,0x5f646373,0x74736968,0x6172676f,0x0000006d,0x000c0005,0x00000082, + 0x6f5f7772,0x63697470,0x665f6c61,0x5f776f6c,0x5f646373,0x76657270,0x73756f69,0x7369685f, + 0x72676f74,0x00006d61,0x00090005,0x00000091,0x6f5f7772,0x63697470,0x665f6c61,0x5f776f6c, + 0x5f646373,0x706d6574,0x00000000,0x00090005,0x000000a9,0x6f5f7772,0x63697470,0x665f6c61, + 0x5f776f6c,0x5f646373,0x7074756f,0x00007475,0x00060005,0x000000c0,0x72756f73,0x69486563, + 0x676f7473,0x006d6172,0x00040005,0x000000c2,0x61726170,0x0000006d,0x00050005,0x000000cc, + 0x65646e69,0x526f5478,0x00646165,0x00030005,0x000000d0,0x006c6176,0x00040005,0x000000d5, + 0x61726170,0x0000006d,0x00040005,0x000000d6,0x61726170,0x0000006d,0x00040005,0x000000d8, + 0x61726170,0x0000006d,0x00040005,0x000000d9,0x61726170,0x0000006d,0x00040005,0x000000e3, + 0x61726170,0x0000006d,0x00040005,0x000000e4,0x61726170,0x0000006d,0x00040005,0x000000e6, + 0x61726170,0x0000006d,0x00040005,0x000000e7,0x61726170,0x0000006d,0x00040005,0x000000f1, + 0x61726170,0x0000006d,0x00040005,0x000000f2,0x61726170,0x0000006d,0x00040005,0x000000f4, + 0x61726170,0x0000006d,0x00040005,0x000000f5,0x61726170,0x0000006d,0x00040005,0x00000100, + 0x61726170,0x0000006d,0x00040005,0x00000101,0x61726170,0x0000006d,0x00040005,0x00000103, + 0x61726170,0x0000006d,0x00040005,0x00000104,0x61726170,0x0000006d,0x00040005,0x0000010f, + 0x61726170,0x0000006d,0x00040005,0x00000110,0x61726170,0x0000006d,0x00040005,0x00000112, + 0x61726170,0x0000006d,0x00040005,0x00000113,0x61726170,0x0000006d,0x00040005,0x0000011e, + 0x61726170,0x0000006d,0x00040005,0x0000011f,0x61726170,0x0000006d,0x00040005,0x00000121, + 0x61726170,0x0000006d,0x00040005,0x00000122,0x61726170,0x0000006d,0x00040005,0x0000012c, + 0x61726170,0x0000006d,0x00040005,0x0000012d,0x61726170,0x0000006d,0x00040005,0x0000012f, + 0x61726170,0x0000006d,0x00040005,0x00000130,0x61726170,0x0000006d,0x00040005,0x0000013a, + 0x61726170,0x0000006d,0x00040005,0x0000013b,0x61726170,0x0000006d,0x00040005,0x0000013d, + 0x61726170,0x0000006d,0x00040005,0x0000013e,0x61726170,0x0000006d,0x00040005,0x00000148, + 0x61726170,0x0000006d,0x00040005,0x00000149,0x61726170,0x0000006d,0x00040005,0x0000014b, + 0x61726170,0x0000006d,0x00040005,0x0000014c,0x61726170,0x0000006d,0x00040005,0x00000156, + 0x61726170,0x0000006d,0x00040005,0x00000157,0x61726170,0x0000006d,0x00040005,0x00000159, + 0x61726170,0x0000006d,0x00040005,0x0000015a,0x61726170,0x0000006d,0x00040005,0x00000164, + 0x61726170,0x0000006d,0x00040005,0x00000165,0x61726170,0x0000006d,0x00040005,0x00000167, + 0x61726170,0x0000006d,0x00040005,0x00000168,0x61726170,0x0000006d,0x00070005,0x0000017b, + 0x746c6966,0x64657265,0x74736948,0x6172676f,0x0000006d,0x00050005,0x0000019b,0x706d6574, + 0x66667542,0x00007265,0x000a0005,0x00000214,0x72727563,0x46746e65,0x65746c69,0x48646572, + 0x6f747369,0x6d617267,0x6c615673,0x00006575,0x00080005,0x00000218,0x76657270,0x73756f69, + 0x74736948,0x6172676f,0x6156736d,0x0065756c,0x00040005,0x00000219,0x61726170,0x0000006d, + 0x00050005,0x00000220,0x706d6574,0x66667542,0x00327265,0x00030005,0x00000291,0x006d7573, + 0x00050005,0x00000297,0x46736572,0x74616f6c,0x00000000,0x00040005,0x000002a2,0x55736572, + 0x00746e49,0x00040005,0x000002a9,0x61726170,0x0000006d,0x00040005,0x000002ac,0x61726170, + 0x0000006d,0x00080005,0x000002af,0x46646c6f,0x73696e69,0x47646568,0x70756f72,0x6e756f43, + 0x00000074,0x00040005,0x000002b0,0x61726170,0x0000006d,0x00040005,0x000002b1,0x61726170, + 0x0000006d,0x00040005,0x000002b8,0x30736572,0x00000000,0x00040005,0x000002b9,0x61726170, + 0x0000006d,0x00040005,0x000002bb,0x31736572,0x00000000,0x00040005,0x000002bc,0x61726170, + 0x0000006d,0x00040005,0x000002be,0x32736572,0x00000000,0x00040005,0x000002bf,0x61726170, + 0x0000006d,0x00070005,0x000002c1,0x6e656373,0x61684365,0x5665676e,0x65756c61,0x00000000, + 0x00040005,0x000002c2,0x61726170,0x0000006d,0x00040005,0x000002c4,0x61726170,0x0000006d, + 0x00040005,0x000002c7,0x61726170,0x0000006d,0x00040005,0x000002c9,0x61726170,0x0000006d, + 0x00040005,0x000002cd,0x74736968,0x0079726f,0x00040005,0x000002ce,0x61726170,0x0000006d, + 0x00040005,0x000002d1,0x61726170,0x0000006d,0x00040005,0x000002d8,0x61726170,0x0000006d, + 0x00040005,0x000002db,0x61726170,0x0000006d,0x00040005,0x000002dc,0x61726170,0x0000006d, + 0x00040005,0x000002de,0x61726170,0x0000006d,0x00040005,0x000002df,0x61726170,0x0000006d, + 0x00040005,0x000002e2,0x61726170,0x0000006d,0x00040005,0x000002e3,0x61726170,0x0000006d, + 0x00040005,0x000002eb,0x61726170,0x0000006d,0x00040005,0x000002ee,0x61726170,0x0000006d, + 0x00040005,0x000002f1,0x61726170,0x0000006d,0x00040005,0x000002f4,0x61726170,0x0000006d, + 0x00050005,0x000002f6,0x6f724769,0x69537075,0x0000657a,0x00080005,0x000002fb,0x475f6c67, + 0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00080005,0x000002fe,0x4c5f6c67, + 0x6c61636f,0x6f766e49,0x69746163,0x44496e6f,0x00000000,0x00080005,0x00000304,0x4c5f6c67, + 0x6c61636f,0x6f766e49,0x69746163,0x6e496e6f,0x00786564,0x00060005,0x00000307,0x575f6c67, + 0x476b726f,0x70756f72,0x00004449,0x00040005,0x0000030b,0x61726170,0x0000006d,0x00040005, + 0x0000030c,0x61726170,0x0000006d,0x00040005,0x0000030d,0x61726170,0x0000006d,0x00040005, + 0x0000030e,0x61726170,0x0000006d,0x00040005,0x0000030f,0x61726170,0x0000006d,0x00040005, + 0x00000315,0x464f6263,0x0000745f,0x00090006,0x00000315,0x00000000,0x706e4969,0x754c7475, + 0x6552616d,0x756c6f73,0x6e6f6974,0x00000000,0x000a0006,0x00000315,0x00000001,0x74704f75, + 0x6c616369,0x776f6c46,0x61727950,0x4c64696d,0x6c657665,0x00000000,0x000b0006,0x00000315, + 0x00000002,0x74704f75,0x6c616369,0x776f6c46,0x61727950,0x4c64696d,0x6c657665,0x6e756f43, + 0x00000074,0x00060006,0x00000315,0x00000003,0x61724669,0x6e49656d,0x00786564,0x000a0006, + 0x00000315,0x00000004,0x6b636162,0x66667562,0x72547265,0x66736e61,0x75467265,0x6974636e, + 0x00006e6f,0x00070006,0x00000315,0x00000005,0x4d6e696d,0x754c7861,0x616e696d,0x0065636e, + 0x00040005,0x00000317,0x464f6263,0x00000000,0x00040047,0x00000070,0x00000021,0x00000000, + 0x00040047,0x00000070,0x00000022,0x00000000,0x00040047,0x00000082,0x00000021,0x00000001, + 0x00040047,0x00000082,0x00000022,0x00000000,0x00040047,0x00000091,0x00000021,0x00000002, + 0x00040047,0x00000091,0x00000022,0x00000000,0x00040047,0x000000a9,0x00000021,0x00000003, + 0x00040047,0x000000a9,0x00000022,0x00000000,0x00040047,0x000002fb,0x0000000b,0x0000001c, + 0x00040047,0x000002fe,0x0000000b,0x0000001b,0x00040047,0x00000304,0x0000000b,0x0000001d, + 0x00040047,0x00000307,0x0000000b,0x0000001a,0x00030047,0x00000315,0x00000002,0x00050048, + 0x00000315,0x00000000,0x00000023,0x00000000,0x00050048,0x00000315,0x00000001,0x00000023, + 0x00000008,0x00050048,0x00000315,0x00000002,0x00000023,0x0000000c,0x00050048,0x00000315, + 0x00000003,0x00000023,0x00000010,0x00050048,0x00000315,0x00000004,0x00000023,0x00000014, + 0x00050048,0x00000315,0x00000005,0x00000023,0x00000018,0x00040047,0x00000317,0x00000021, + 0x00000004,0x00040047,0x00000317,0x00000022,0x00000000,0x00040047,0x00000318,0x0000000b, + 0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006, + 0x00000020,0x00040020,0x00000007,0x00000007,0x00000006,0x00040015,0x00000008,0x00000020, + 0x00000000,0x00040021,0x00000009,0x00000008,0x00000007,0x00040015,0x0000000d,0x00000020, + 0x00000001,0x00040020,0x0000000e,0x00000007,0x0000000d,0x00050021,0x0000000f,0x0000000d, + 0x0000000e,0x0000000e,0x00040020,0x00000014,0x00000007,0x00000008,0x00050021,0x00000015, + 0x00000008,0x00000014,0x00000014,0x00020014,0x0000001e,0x00040021,0x0000001f,0x0000001e, + 0x00000007,0x00040021,0x00000023,0x00000008,0x0000000e,0x00050021,0x00000027,0x00000002, + 0x0000000e,0x00000014,0x00040021,0x0000002c,0x00000006,0x0000000e,0x00050021,0x00000030, + 0x00000002,0x0000000e,0x00000007,0x00050021,0x00000045,0x00000008,0x0000000e,0x00000014, + 0x00040017,0x0000004a,0x0000000d,0x00000003,0x00040020,0x0000004b,0x00000007,0x0000004a, + 0x00040017,0x0000004c,0x0000000d,0x00000002,0x00040020,0x0000004d,0x00000007,0x0000004c, + 0x00080021,0x0000004e,0x00000002,0x0000004b,0x0000004d,0x0000000e,0x0000004d,0x0000004d, + 0x0004002b,0x00000006,0x0000006a,0x3ee66666,0x00090019,0x0000006e,0x00000008,0x00000001, + 0x00000000,0x00000000,0x00000000,0x00000002,0x00000021,0x00040020,0x0000006f,0x00000000, + 0x0000006e,0x0004003b,0x0000006f,0x00000070,0x00000000,0x0004002b,0x0000000d,0x00000073, + 0x00000000,0x00040017,0x00000075,0x00000008,0x00000004,0x0004002b,0x00000008,0x00000077, + 0x00000000,0x00090019,0x00000080,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000, + 0x00000002,0x00000003,0x00040020,0x00000081,0x00000000,0x00000080,0x0004003b,0x00000081, + 0x00000082,0x00000000,0x00040017,0x00000086,0x00000006,0x00000004,0x0004002b,0x00000006, + 0x0000008f,0x00000000,0x0004003b,0x0000006f,0x00000091,0x00000000,0x00040020,0x0000009c, + 0x0000000b,0x00000008,0x0004002b,0x00000008,0x0000009e,0x00000001,0x0005002c,0x0000004c, + 0x000000a1,0x00000073,0x00000073,0x0007002c,0x00000075,0x000000a2,0x00000077,0x00000077, + 0x00000077,0x00000077,0x0004002b,0x0000000d,0x000000a4,0x00000001,0x0005002c,0x0000004c, + 0x000000a5,0x000000a4,0x00000073,0x0004002b,0x0000000d,0x000000a7,0x00000002,0x0005002c, + 0x0000004c,0x000000a8,0x000000a7,0x00000073,0x0004003b,0x0000006f,0x000000a9,0x00000000, + 0x0004002b,0x00000008,0x000000bd,0x00000100,0x0004001c,0x000000be,0x00000006,0x000000bd, + 0x00040020,0x000000bf,0x00000004,0x000000be,0x0004003b,0x000000bf,0x000000c0,0x00000004, + 0x00040020,0x000000c7,0x00000004,0x00000006,0x0004002b,0x00000008,0x000000c9,0x00000002, + 0x0004002b,0x00000008,0x000000ca,0x00000d48,0x0004002b,0x00000008,0x000000cb,0x00000108, + 0x0004002b,0x0000000d,0x000000ce,0xfffffffb,0x0004002b,0x00000006,0x000000d1,0x3c10612b, + 0x0004002b,0x0000000d,0x000000d2,0x000000ff,0x0004002b,0x00000006,0x000000e0,0x3cde5c35, + 0x0004002b,0x00000006,0x000000ee,0x3d855a85,0x0004002b,0x00000006,0x000000fc,0x3df92326, + 0x0004002b,0x0000000d,0x000000fe,0x00000003,0x0004002b,0x00000006,0x0000010b,0x3e353f0e, + 0x0004002b,0x0000000d,0x0000010d,0x00000004,0x0004002b,0x00000006,0x0000011a,0x3e4d6105, + 0x0004002b,0x0000000d,0x0000011c,0x00000005,0x0004002b,0x0000000d,0x0000012a,0x00000006, + 0x0004002b,0x0000000d,0x00000138,0x00000007,0x0004002b,0x0000000d,0x00000146,0x00000008, + 0x0004002b,0x0000000d,0x00000154,0x00000009,0x0004002b,0x0000000d,0x00000162,0x0000000a, + 0x0004002b,0x00000006,0x0000016f,0x3f800000,0x0004003b,0x000000bf,0x0000017b,0x00000004, + 0x0004003b,0x000000bf,0x0000019b,0x00000004,0x0004002b,0x0000000d,0x000001a2,0x00000080, + 0x0004002b,0x0000000d,0x000001b0,0x00000040,0x0004002b,0x0000000d,0x000001be,0x00000020, + 0x0004002b,0x0000000d,0x000001cc,0x00000010,0x00040017,0x0000021d,0x00000006,0x00000002, + 0x0004001c,0x0000021e,0x0000021d,0x000000bd,0x00040020,0x0000021f,0x00000004,0x0000021e, + 0x0004003b,0x0000021f,0x00000220,0x00000004,0x00040020,0x0000022f,0x00000004,0x0000021d, + 0x00040020,0x00000290,0x00000007,0x0000021d,0x0004002b,0x00000006,0x000002a4,0x41100000, + 0x0004002b,0x00000006,0x000002a6,0x49742400,0x0004002b,0x00000008,0x000002b4,0x0000001a, + 0x0004002b,0x0000000d,0x000002f7,0x00000100,0x0005002c,0x0000004c,0x000002f8,0x000002f7, + 0x000000a4,0x00040017,0x000002f9,0x00000008,0x00000003,0x00040020,0x000002fa,0x00000001, + 0x000002f9,0x0004003b,0x000002fa,0x000002fb,0x00000001,0x0004003b,0x000002fa,0x000002fe, + 0x00000001,0x00040017,0x000002ff,0x00000008,0x00000002,0x00040020,0x00000303,0x00000001, + 0x00000008,0x0004003b,0x00000303,0x00000304,0x00000001,0x0004003b,0x000002fa,0x00000307, + 0x00000001,0x0004002b,0x00000006,0x00000312,0x387fda40,0x0004002b,0x00000006,0x00000313, + 0x477fe000,0x0004002b,0x00000006,0x00000314,0x37801002,0x0008001e,0x00000315,0x0000004c, + 0x00000008,0x00000008,0x00000008,0x00000008,0x0000021d,0x00040020,0x00000316,0x00000002, + 0x00000315,0x0004003b,0x00000316,0x00000317,0x00000002,0x0006002c,0x000002f9,0x00000318, + 0x000000bd,0x0000009e,0x0000009e,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003, + 0x000200f8,0x00000005,0x0004003b,0x0000004d,0x000002f6,0x00000007,0x0004003b,0x0000004b, + 0x0000030b,0x00000007,0x0004003b,0x0000004d,0x0000030c,0x00000007,0x0004003b,0x0000000e, + 0x0000030d,0x00000007,0x0004003b,0x0000004d,0x0000030e,0x00000007,0x0004003b,0x0000004d, + 0x0000030f,0x00000007,0x0003003e,0x000002f6,0x000002f8,0x0004003d,0x000002f9,0x000002fc, + 0x000002fb,0x0004007c,0x0000004a,0x000002fd,0x000002fc,0x0004003d,0x000002f9,0x00000300, + 0x000002fe,0x0007004f,0x000002ff,0x00000301,0x00000300,0x00000300,0x00000000,0x00000001, + 0x0004007c,0x0000004c,0x00000302,0x00000301,0x0004003d,0x00000008,0x00000305,0x00000304, + 0x0004007c,0x0000000d,0x00000306,0x00000305,0x0004003d,0x000002f9,0x00000308,0x00000307, + 0x0007004f,0x000002ff,0x00000309,0x00000308,0x00000308,0x00000000,0x00000001,0x0004007c, + 0x0000004c,0x0000030a,0x00000309,0x0003003e,0x0000030b,0x000002fd,0x0003003e,0x0000030c, + 0x00000302,0x0003003e,0x0000030d,0x00000306,0x0003003e,0x0000030e,0x0000030a,0x0004003d, + 0x0000004c,0x00000310,0x000002f6,0x0003003e,0x0000030f,0x00000310,0x00090039,0x00000002, + 0x00000311,0x00000054,0x0000030b,0x0000030c,0x0000030d,0x0000030e,0x0000030f,0x000100fd, + 0x00010038,0x00050036,0x00000008,0x0000000b,0x00000000,0x00000009,0x00030037,0x00000007, + 0x0000000a,0x000200f8,0x0000000c,0x0004003d,0x00000006,0x00000056,0x0000000a,0x0004007c, + 0x00000008,0x00000057,0x00000056,0x000200fe,0x00000057,0x00010038,0x00050036,0x0000000d, + 0x00000012,0x00000000,0x0000000f,0x00030037,0x0000000e,0x00000010,0x00030037,0x0000000e, + 0x00000011,0x000200f8,0x00000013,0x0004003d,0x0000000d,0x0000005a,0x00000010,0x0004003d, + 0x0000000d,0x0000005b,0x00000011,0x0007000c,0x0000000d,0x0000005c,0x00000001,0x00000027, + 0x0000005a,0x0000005b,0x000200fe,0x0000005c,0x00010038,0x00050036,0x00000008,0x00000018, + 0x00000000,0x00000015,0x00030037,0x00000014,0x00000016,0x00030037,0x00000014,0x00000017, + 0x000200f8,0x00000019,0x0004003d,0x00000008,0x0000005f,0x00000016,0x0004003d,0x00000008, + 0x00000060,0x00000017,0x0007000c,0x00000008,0x00000061,0x00000001,0x00000026,0x0000005f, + 0x00000060,0x000200fe,0x00000061,0x00010038,0x00050036,0x0000000d,0x0000001c,0x00000000, + 0x0000000f,0x00030037,0x0000000e,0x0000001a,0x00030037,0x0000000e,0x0000001b,0x000200f8, + 0x0000001d,0x0004003d,0x0000000d,0x00000064,0x0000001a,0x0004003d,0x0000000d,0x00000065, + 0x0000001b,0x0007000c,0x0000000d,0x00000066,0x00000001,0x0000002a,0x00000064,0x00000065, + 0x000200fe,0x00000066,0x00010038,0x00050036,0x0000001e,0x00000021,0x00000000,0x0000001f, + 0x00030037,0x00000007,0x00000020,0x000200f8,0x00000022,0x0004003d,0x00000006,0x00000069, + 0x00000020,0x000500ba,0x0000001e,0x0000006b,0x00000069,0x0000006a,0x000200fe,0x0000006b, + 0x00010038,0x00050036,0x00000008,0x00000025,0x00000000,0x00000023,0x00030037,0x0000000e, + 0x00000024,0x000200f8,0x00000026,0x0004003d,0x0000006e,0x00000071,0x00000070,0x0004003d, + 0x0000000d,0x00000072,0x00000024,0x00050050,0x0000004c,0x00000074,0x00000072,0x00000073, + 0x00050062,0x00000075,0x00000076,0x00000071,0x00000074,0x00050051,0x00000008,0x00000078, + 0x00000076,0x00000000,0x000200fe,0x00000078,0x00010038,0x00050036,0x00000002,0x0000002a, + 0x00000000,0x00000027,0x00030037,0x0000000e,0x00000028,0x00030037,0x00000014,0x00000029, + 0x000200f8,0x0000002b,0x0004003d,0x0000006e,0x0000007b,0x00000070,0x0004003d,0x0000000d, + 0x0000007c,0x00000028,0x00050050,0x0000004c,0x0000007d,0x0000007c,0x00000073,0x0004003d, + 0x00000008,0x0000007e,0x00000029,0x00070050,0x00000075,0x0000007f,0x0000007e,0x00000077, + 0x00000077,0x00000077,0x00040063,0x0000007b,0x0000007d,0x0000007f,0x000100fd,0x00010038, + 0x00050036,0x00000006,0x0000002e,0x00000000,0x0000002c,0x00030037,0x0000000e,0x0000002d, + 0x000200f8,0x0000002f,0x0004003d,0x00000080,0x00000083,0x00000082,0x0004003d,0x0000000d, + 0x00000084,0x0000002d,0x00050050,0x0000004c,0x00000085,0x00000084,0x00000073,0x00050062, + 0x00000086,0x00000087,0x00000083,0x00000085,0x00050051,0x00000006,0x00000088,0x00000087, + 0x00000000,0x000200fe,0x00000088,0x00010038,0x00050036,0x00000002,0x00000033,0x00000000, + 0x00000030,0x00030037,0x0000000e,0x00000031,0x00030037,0x00000007,0x00000032,0x000200f8, + 0x00000034,0x0004003d,0x00000080,0x0000008b,0x00000082,0x0004003d,0x0000000d,0x0000008c, + 0x00000031,0x00050050,0x0000004c,0x0000008d,0x0000008c,0x00000073,0x0004003d,0x00000006, + 0x0000008e,0x00000032,0x00070050,0x00000086,0x00000090,0x0000008e,0x0000008f,0x0000008f, + 0x0000008f,0x00040063,0x0000008b,0x0000008d,0x00000090,0x000100fd,0x00010038,0x00050036, + 0x00000008,0x00000036,0x00000000,0x00000023,0x00030037,0x0000000e,0x00000035,0x000200f8, + 0x00000037,0x0004003d,0x0000006e,0x00000092,0x00000091,0x0004003d,0x0000000d,0x00000093, + 0x00000035,0x00050050,0x0000004c,0x00000094,0x00000093,0x00000073,0x00050062,0x00000075, + 0x00000095,0x00000092,0x00000094,0x00050051,0x00000008,0x00000096,0x00000095,0x00000000, + 0x000200fe,0x00000096,0x00010038,0x00050036,0x00000002,0x0000003a,0x00000000,0x00000027, + 0x00030037,0x0000000e,0x00000038,0x00030037,0x00000014,0x00000039,0x000200f8,0x0000003b, + 0x0004003d,0x0000000d,0x00000099,0x00000038,0x00050050,0x0000004c,0x0000009a,0x00000099, + 0x00000073,0x0004003d,0x00000008,0x0000009b,0x00000039,0x0006003c,0x0000009c,0x0000009d, + 0x00000091,0x0000009a,0x00000077,0x000700ea,0x00000008,0x0000009f,0x0000009d,0x0000009e, + 0x00000077,0x0000009b,0x000100fd,0x00010038,0x00050036,0x00000002,0x0000003c,0x00000000, + 0x00000003,0x000200f8,0x0000003d,0x0004003d,0x0000006e,0x000000a0,0x00000091,0x00040063, + 0x000000a0,0x000000a1,0x000000a2,0x0004003d,0x0000006e,0x000000a3,0x00000091,0x00040063, + 0x000000a3,0x000000a5,0x000000a2,0x0004003d,0x0000006e,0x000000a6,0x00000091,0x00040063, + 0x000000a6,0x000000a8,0x000000a2,0x000100fd,0x00010038,0x00050036,0x00000008,0x0000003f, + 0x00000000,0x00000023,0x00030037,0x0000000e,0x0000003e,0x000200f8,0x00000040,0x0004003d, + 0x0000006e,0x000000aa,0x000000a9,0x0004003d,0x0000000d,0x000000ab,0x0000003e,0x00050050, + 0x0000004c,0x000000ac,0x000000ab,0x00000073,0x00050062,0x00000075,0x000000ad,0x000000aa, + 0x000000ac,0x00050051,0x00000008,0x000000ae,0x000000ad,0x00000000,0x000200fe,0x000000ae, + 0x00010038,0x00050036,0x00000002,0x00000043,0x00000000,0x00000027,0x00030037,0x0000000e, + 0x00000041,0x00030037,0x00000014,0x00000042,0x000200f8,0x00000044,0x0004003d,0x0000006e, + 0x000000b1,0x000000a9,0x0004003d,0x0000000d,0x000000b2,0x00000041,0x00050050,0x0000004c, + 0x000000b3,0x000000b2,0x00000073,0x0004003d,0x00000008,0x000000b4,0x00000042,0x00070050, + 0x00000075,0x000000b5,0x000000b4,0x00000077,0x00000077,0x00000077,0x00040063,0x000000b1, + 0x000000b3,0x000000b5,0x000100fd,0x00010038,0x00050036,0x00000008,0x00000048,0x00000000, + 0x00000045,0x00030037,0x0000000e,0x00000046,0x00030037,0x00000014,0x00000047,0x000200f8, + 0x00000049,0x0004003d,0x0000000d,0x000000b6,0x00000046,0x00050050,0x0000004c,0x000000b7, + 0x000000b6,0x00000073,0x0004003d,0x00000008,0x000000b8,0x00000047,0x0006003c,0x0000009c, + 0x000000b9,0x000000a9,0x000000b7,0x00000077,0x000700ea,0x00000008,0x000000ba,0x000000b9, + 0x0000009e,0x00000077,0x000000b8,0x000200fe,0x000000ba,0x00010038,0x00050036,0x00000002, + 0x00000054,0x00000000,0x0000004e,0x00030037,0x0000004b,0x0000004f,0x00030037,0x0000004d, + 0x00000050,0x00030037,0x0000000e,0x00000051,0x00030037,0x0000004d,0x00000052,0x00030037, + 0x0000004d,0x00000053,0x000200f8,0x00000055,0x0004003b,0x0000000e,0x000000c2,0x00000007, + 0x0004003b,0x0000000e,0x000000cc,0x00000007,0x0004003b,0x00000007,0x000000d0,0x00000007, + 0x0004003b,0x0000000e,0x000000d5,0x00000007,0x0004003b,0x0000000e,0x000000d6,0x00000007, + 0x0004003b,0x0000000e,0x000000d8,0x00000007,0x0004003b,0x0000000e,0x000000d9,0x00000007, + 0x0004003b,0x0000000e,0x000000e3,0x00000007,0x0004003b,0x0000000e,0x000000e4,0x00000007, + 0x0004003b,0x0000000e,0x000000e6,0x00000007,0x0004003b,0x0000000e,0x000000e7,0x00000007, + 0x0004003b,0x0000000e,0x000000f1,0x00000007,0x0004003b,0x0000000e,0x000000f2,0x00000007, + 0x0004003b,0x0000000e,0x000000f4,0x00000007,0x0004003b,0x0000000e,0x000000f5,0x00000007, + 0x0004003b,0x0000000e,0x00000100,0x00000007,0x0004003b,0x0000000e,0x00000101,0x00000007, + 0x0004003b,0x0000000e,0x00000103,0x00000007,0x0004003b,0x0000000e,0x00000104,0x00000007, + 0x0004003b,0x0000000e,0x0000010f,0x00000007,0x0004003b,0x0000000e,0x00000110,0x00000007, + 0x0004003b,0x0000000e,0x00000112,0x00000007,0x0004003b,0x0000000e,0x00000113,0x00000007, + 0x0004003b,0x0000000e,0x0000011e,0x00000007,0x0004003b,0x0000000e,0x0000011f,0x00000007, + 0x0004003b,0x0000000e,0x00000121,0x00000007,0x0004003b,0x0000000e,0x00000122,0x00000007, + 0x0004003b,0x0000000e,0x0000012c,0x00000007,0x0004003b,0x0000000e,0x0000012d,0x00000007, + 0x0004003b,0x0000000e,0x0000012f,0x00000007,0x0004003b,0x0000000e,0x00000130,0x00000007, + 0x0004003b,0x0000000e,0x0000013a,0x00000007,0x0004003b,0x0000000e,0x0000013b,0x00000007, + 0x0004003b,0x0000000e,0x0000013d,0x00000007,0x0004003b,0x0000000e,0x0000013e,0x00000007, + 0x0004003b,0x0000000e,0x00000148,0x00000007,0x0004003b,0x0000000e,0x00000149,0x00000007, + 0x0004003b,0x0000000e,0x0000014b,0x00000007,0x0004003b,0x0000000e,0x0000014c,0x00000007, + 0x0004003b,0x0000000e,0x00000156,0x00000007,0x0004003b,0x0000000e,0x00000157,0x00000007, + 0x0004003b,0x0000000e,0x00000159,0x00000007,0x0004003b,0x0000000e,0x0000015a,0x00000007, + 0x0004003b,0x0000000e,0x00000164,0x00000007,0x0004003b,0x0000000e,0x00000165,0x00000007, + 0x0004003b,0x0000000e,0x00000167,0x00000007,0x0004003b,0x0000000e,0x00000168,0x00000007, + 0x0004003b,0x00000007,0x00000214,0x00000007,0x0004003b,0x00000007,0x00000218,0x00000007, + 0x0004003b,0x0000000e,0x00000219,0x00000007,0x0004003b,0x00000290,0x00000291,0x00000007, + 0x0004003b,0x00000007,0x00000297,0x00000007,0x0004003b,0x00000014,0x000002a2,0x00000007, + 0x0004003b,0x0000000e,0x000002a9,0x00000007,0x0004003b,0x00000014,0x000002ac,0x00000007, + 0x0004003b,0x00000014,0x000002af,0x00000007,0x0004003b,0x0000000e,0x000002b0,0x00000007, + 0x0004003b,0x00000014,0x000002b1,0x00000007,0x0004003b,0x00000014,0x000002b8,0x00000007, + 0x0004003b,0x0000000e,0x000002b9,0x00000007,0x0004003b,0x00000014,0x000002bb,0x00000007, + 0x0004003b,0x0000000e,0x000002bc,0x00000007,0x0004003b,0x00000014,0x000002be,0x00000007, + 0x0004003b,0x0000000e,0x000002bf,0x00000007,0x0004003b,0x00000007,0x000002c1,0x00000007, + 0x0004003b,0x00000014,0x000002c2,0x00000007,0x0004003b,0x00000014,0x000002c4,0x00000007, + 0x0004003b,0x00000014,0x000002c7,0x00000007,0x0004003b,0x00000014,0x000002c9,0x00000007, + 0x0004003b,0x00000014,0x000002cd,0x00000007,0x0004003b,0x0000000e,0x000002ce,0x00000007, + 0x0004003b,0x00000007,0x000002d1,0x00000007,0x0004003b,0x00000007,0x000002d8,0x00000007, + 0x0004003b,0x0000000e,0x000002db,0x00000007,0x0004003b,0x00000014,0x000002dc,0x00000007, + 0x0004003b,0x0000000e,0x000002de,0x00000007,0x0004003b,0x00000014,0x000002df,0x00000007, + 0x0004003b,0x0000000e,0x000002e2,0x00000007,0x0004003b,0x00000014,0x000002e3,0x00000007, + 0x0004003b,0x0000000e,0x000002eb,0x00000007,0x0004003b,0x00000007,0x000002ee,0x00000007, + 0x0004003b,0x0000000e,0x000002f1,0x00000007,0x0004003b,0x00000014,0x000002f4,0x00000007, + 0x0004003d,0x0000000d,0x000000c1,0x00000051,0x00050041,0x0000000e,0x000000c3,0x0000004f, + 0x00000077,0x0004003d,0x0000000d,0x000000c4,0x000000c3,0x0003003e,0x000000c2,0x000000c4, + 0x00050039,0x00000008,0x000000c5,0x00000025,0x000000c2,0x00040070,0x00000006,0x000000c6, + 0x000000c5,0x00050041,0x000000c7,0x000000c8,0x000000c0,0x000000c1,0x0003003e,0x000000c8, + 0x000000c6,0x000300e1,0x000000c9,0x000000ca,0x000400e0,0x000000c9,0x000000c9,0x000000cb, + 0x0004003d,0x0000000d,0x000000cd,0x00000051,0x00050080,0x0000000d,0x000000cf,0x000000cd, + 0x000000ce,0x0003003e,0x000000cc,0x000000cf,0x0003003e,0x000000d0,0x0000008f,0x0004003d, + 0x0000000d,0x000000d3,0x000000cc,0x00050080,0x0000000d,0x000000d4,0x000000d3,0x00000073, + 0x0003003e,0x000000d5,0x000000d2,0x0003003e,0x000000d6,0x000000d4,0x00060039,0x0000000d, + 0x000000d7,0x00000012,0x000000d5,0x000000d6,0x0003003e,0x000000d8,0x00000073,0x0003003e, + 0x000000d9,0x000000d7,0x00060039,0x0000000d,0x000000da,0x0000001c,0x000000d8,0x000000d9, + 0x00050041,0x000000c7,0x000000db,0x000000c0,0x000000da,0x0004003d,0x00000006,0x000000dc, + 0x000000db,0x00050085,0x00000006,0x000000dd,0x000000d1,0x000000dc,0x0004003d,0x00000006, + 0x000000de,0x000000d0,0x00050081,0x00000006,0x000000df,0x000000de,0x000000dd,0x0003003e, + 0x000000d0,0x000000df,0x0004003d,0x0000000d,0x000000e1,0x000000cc,0x00050080,0x0000000d, + 0x000000e2,0x000000e1,0x000000a4,0x0003003e,0x000000e3,0x000000d2,0x0003003e,0x000000e4, + 0x000000e2,0x00060039,0x0000000d,0x000000e5,0x00000012,0x000000e3,0x000000e4,0x0003003e, + 0x000000e6,0x00000073,0x0003003e,0x000000e7,0x000000e5,0x00060039,0x0000000d,0x000000e8, + 0x0000001c,0x000000e6,0x000000e7,0x00050041,0x000000c7,0x000000e9,0x000000c0,0x000000e8, + 0x0004003d,0x00000006,0x000000ea,0x000000e9,0x00050085,0x00000006,0x000000eb,0x000000e0, + 0x000000ea,0x0004003d,0x00000006,0x000000ec,0x000000d0,0x00050081,0x00000006,0x000000ed, + 0x000000ec,0x000000eb,0x0003003e,0x000000d0,0x000000ed,0x0004003d,0x0000000d,0x000000ef, + 0x000000cc,0x00050080,0x0000000d,0x000000f0,0x000000ef,0x000000a7,0x0003003e,0x000000f1, + 0x000000d2,0x0003003e,0x000000f2,0x000000f0,0x00060039,0x0000000d,0x000000f3,0x00000012, + 0x000000f1,0x000000f2,0x0003003e,0x000000f4,0x00000073,0x0003003e,0x000000f5,0x000000f3, + 0x00060039,0x0000000d,0x000000f6,0x0000001c,0x000000f4,0x000000f5,0x00050041,0x000000c7, + 0x000000f7,0x000000c0,0x000000f6,0x0004003d,0x00000006,0x000000f8,0x000000f7,0x00050085, + 0x00000006,0x000000f9,0x000000ee,0x000000f8,0x0004003d,0x00000006,0x000000fa,0x000000d0, + 0x00050081,0x00000006,0x000000fb,0x000000fa,0x000000f9,0x0003003e,0x000000d0,0x000000fb, + 0x0004003d,0x0000000d,0x000000fd,0x000000cc,0x00050080,0x0000000d,0x000000ff,0x000000fd, + 0x000000fe,0x0003003e,0x00000100,0x000000d2,0x0003003e,0x00000101,0x000000ff,0x00060039, + 0x0000000d,0x00000102,0x00000012,0x00000100,0x00000101,0x0003003e,0x00000103,0x00000073, + 0x0003003e,0x00000104,0x00000102,0x00060039,0x0000000d,0x00000105,0x0000001c,0x00000103, + 0x00000104,0x00050041,0x000000c7,0x00000106,0x000000c0,0x00000105,0x0004003d,0x00000006, + 0x00000107,0x00000106,0x00050085,0x00000006,0x00000108,0x000000fc,0x00000107,0x0004003d, + 0x00000006,0x00000109,0x000000d0,0x00050081,0x00000006,0x0000010a,0x00000109,0x00000108, + 0x0003003e,0x000000d0,0x0000010a,0x0004003d,0x0000000d,0x0000010c,0x000000cc,0x00050080, + 0x0000000d,0x0000010e,0x0000010c,0x0000010d,0x0003003e,0x0000010f,0x000000d2,0x0003003e, + 0x00000110,0x0000010e,0x00060039,0x0000000d,0x00000111,0x00000012,0x0000010f,0x00000110, + 0x0003003e,0x00000112,0x00000073,0x0003003e,0x00000113,0x00000111,0x00060039,0x0000000d, + 0x00000114,0x0000001c,0x00000112,0x00000113,0x00050041,0x000000c7,0x00000115,0x000000c0, + 0x00000114,0x0004003d,0x00000006,0x00000116,0x00000115,0x00050085,0x00000006,0x00000117, + 0x0000010b,0x00000116,0x0004003d,0x00000006,0x00000118,0x000000d0,0x00050081,0x00000006, + 0x00000119,0x00000118,0x00000117,0x0003003e,0x000000d0,0x00000119,0x0004003d,0x0000000d, + 0x0000011b,0x000000cc,0x00050080,0x0000000d,0x0000011d,0x0000011b,0x0000011c,0x0003003e, + 0x0000011e,0x000000d2,0x0003003e,0x0000011f,0x0000011d,0x00060039,0x0000000d,0x00000120, + 0x00000012,0x0000011e,0x0000011f,0x0003003e,0x00000121,0x00000073,0x0003003e,0x00000122, + 0x00000120,0x00060039,0x0000000d,0x00000123,0x0000001c,0x00000121,0x00000122,0x00050041, + 0x000000c7,0x00000124,0x000000c0,0x00000123,0x0004003d,0x00000006,0x00000125,0x00000124, + 0x00050085,0x00000006,0x00000126,0x0000011a,0x00000125,0x0004003d,0x00000006,0x00000127, + 0x000000d0,0x00050081,0x00000006,0x00000128,0x00000127,0x00000126,0x0003003e,0x000000d0, + 0x00000128,0x0004003d,0x0000000d,0x00000129,0x000000cc,0x00050080,0x0000000d,0x0000012b, + 0x00000129,0x0000012a,0x0003003e,0x0000012c,0x000000d2,0x0003003e,0x0000012d,0x0000012b, + 0x00060039,0x0000000d,0x0000012e,0x00000012,0x0000012c,0x0000012d,0x0003003e,0x0000012f, + 0x00000073,0x0003003e,0x00000130,0x0000012e,0x00060039,0x0000000d,0x00000131,0x0000001c, + 0x0000012f,0x00000130,0x00050041,0x000000c7,0x00000132,0x000000c0,0x00000131,0x0004003d, + 0x00000006,0x00000133,0x00000132,0x00050085,0x00000006,0x00000134,0x0000010b,0x00000133, + 0x0004003d,0x00000006,0x00000135,0x000000d0,0x00050081,0x00000006,0x00000136,0x00000135, + 0x00000134,0x0003003e,0x000000d0,0x00000136,0x0004003d,0x0000000d,0x00000137,0x000000cc, + 0x00050080,0x0000000d,0x00000139,0x00000137,0x00000138,0x0003003e,0x0000013a,0x000000d2, + 0x0003003e,0x0000013b,0x00000139,0x00060039,0x0000000d,0x0000013c,0x00000012,0x0000013a, + 0x0000013b,0x0003003e,0x0000013d,0x00000073,0x0003003e,0x0000013e,0x0000013c,0x00060039, + 0x0000000d,0x0000013f,0x0000001c,0x0000013d,0x0000013e,0x00050041,0x000000c7,0x00000140, + 0x000000c0,0x0000013f,0x0004003d,0x00000006,0x00000141,0x00000140,0x00050085,0x00000006, + 0x00000142,0x000000fc,0x00000141,0x0004003d,0x00000006,0x00000143,0x000000d0,0x00050081, + 0x00000006,0x00000144,0x00000143,0x00000142,0x0003003e,0x000000d0,0x00000144,0x0004003d, + 0x0000000d,0x00000145,0x000000cc,0x00050080,0x0000000d,0x00000147,0x00000145,0x00000146, + 0x0003003e,0x00000148,0x000000d2,0x0003003e,0x00000149,0x00000147,0x00060039,0x0000000d, + 0x0000014a,0x00000012,0x00000148,0x00000149,0x0003003e,0x0000014b,0x00000073,0x0003003e, + 0x0000014c,0x0000014a,0x00060039,0x0000000d,0x0000014d,0x0000001c,0x0000014b,0x0000014c, + 0x00050041,0x000000c7,0x0000014e,0x000000c0,0x0000014d,0x0004003d,0x00000006,0x0000014f, + 0x0000014e,0x00050085,0x00000006,0x00000150,0x000000ee,0x0000014f,0x0004003d,0x00000006, + 0x00000151,0x000000d0,0x00050081,0x00000006,0x00000152,0x00000151,0x00000150,0x0003003e, + 0x000000d0,0x00000152,0x0004003d,0x0000000d,0x00000153,0x000000cc,0x00050080,0x0000000d, + 0x00000155,0x00000153,0x00000154,0x0003003e,0x00000156,0x000000d2,0x0003003e,0x00000157, + 0x00000155,0x00060039,0x0000000d,0x00000158,0x00000012,0x00000156,0x00000157,0x0003003e, + 0x00000159,0x00000073,0x0003003e,0x0000015a,0x00000158,0x00060039,0x0000000d,0x0000015b, + 0x0000001c,0x00000159,0x0000015a,0x00050041,0x000000c7,0x0000015c,0x000000c0,0x0000015b, + 0x0004003d,0x00000006,0x0000015d,0x0000015c,0x00050085,0x00000006,0x0000015e,0x000000e0, + 0x0000015d,0x0004003d,0x00000006,0x0000015f,0x000000d0,0x00050081,0x00000006,0x00000160, + 0x0000015f,0x0000015e,0x0003003e,0x000000d0,0x00000160,0x0004003d,0x0000000d,0x00000161, + 0x000000cc,0x00050080,0x0000000d,0x00000163,0x00000161,0x00000162,0x0003003e,0x00000164, + 0x000000d2,0x0003003e,0x00000165,0x00000163,0x00060039,0x0000000d,0x00000166,0x00000012, + 0x00000164,0x00000165,0x0003003e,0x00000167,0x00000073,0x0003003e,0x00000168,0x00000166, + 0x00060039,0x0000000d,0x00000169,0x0000001c,0x00000167,0x00000168,0x00050041,0x000000c7, + 0x0000016a,0x000000c0,0x00000169,0x0004003d,0x00000006,0x0000016b,0x0000016a,0x00050085, + 0x00000006,0x0000016c,0x000000d1,0x0000016b,0x0004003d,0x00000006,0x0000016d,0x000000d0, + 0x00050081,0x00000006,0x0000016e,0x0000016d,0x0000016c,0x0003003e,0x000000d0,0x0000016e, + 0x0004003d,0x00000006,0x00000170,0x000000d0,0x00050081,0x00000006,0x00000171,0x00000170, + 0x0000016f,0x0003003e,0x000000d0,0x00000171,0x00050041,0x0000000e,0x00000172,0x0000004f, + 0x0000009e,0x0004003d,0x0000000d,0x00000173,0x00000172,0x000500aa,0x0000001e,0x00000174, + 0x00000173,0x00000073,0x000300f7,0x00000176,0x00000000,0x000400fa,0x00000174,0x00000175, + 0x00000182,0x000200f8,0x00000175,0x0004003d,0x0000000d,0x00000177,0x00000051,0x000500aa, + 0x0000001e,0x00000178,0x00000177,0x00000073,0x000300f7,0x0000017a,0x00000000,0x000400fa, + 0x00000178,0x00000179,0x0000017d,0x000200f8,0x00000179,0x00050041,0x000000c7,0x0000017c, + 0x0000017b,0x000000d2,0x0003003e,0x0000017c,0x0000016f,0x000200f9,0x0000017a,0x000200f8, + 0x0000017d,0x0004003d,0x0000000d,0x0000017e,0x00000051,0x00050082,0x0000000d,0x0000017f, + 0x0000017e,0x000000a4,0x0004003d,0x00000006,0x00000180,0x000000d0,0x00050041,0x000000c7, + 0x00000181,0x0000017b,0x0000017f,0x0003003e,0x00000181,0x00000180,0x000200f9,0x0000017a, + 0x000200f8,0x0000017a,0x000200f9,0x00000176,0x000200f8,0x00000182,0x00050041,0x0000000e, + 0x00000183,0x0000004f,0x0000009e,0x0004003d,0x0000000d,0x00000184,0x00000183,0x000500aa, + 0x0000001e,0x00000185,0x00000184,0x000000a4,0x000300f7,0x00000187,0x00000000,0x000400fa, + 0x00000185,0x00000186,0x0000018b,0x000200f8,0x00000186,0x0004003d,0x0000000d,0x00000188, + 0x00000051,0x0004003d,0x00000006,0x00000189,0x000000d0,0x00050041,0x000000c7,0x0000018a, + 0x0000017b,0x00000188,0x0003003e,0x0000018a,0x00000189,0x000200f9,0x00000187,0x000200f8, + 0x0000018b,0x00050041,0x0000000e,0x0000018c,0x0000004f,0x0000009e,0x0004003d,0x0000000d, + 0x0000018d,0x0000018c,0x000500aa,0x0000001e,0x0000018e,0x0000018d,0x000000a7,0x000300f7, + 0x00000190,0x00000000,0x000400fa,0x0000018e,0x0000018f,0x00000190,0x000200f8,0x0000018f, + 0x0004003d,0x0000000d,0x00000191,0x00000051,0x000500aa,0x0000001e,0x00000192,0x00000191, + 0x000000d2,0x000300f7,0x00000194,0x00000000,0x000400fa,0x00000192,0x00000193,0x00000196, + 0x000200f8,0x00000193,0x00050041,0x000000c7,0x00000195,0x0000017b,0x00000073,0x0003003e, + 0x00000195,0x0000016f,0x000200f9,0x00000194,0x000200f8,0x00000196,0x0004003d,0x0000000d, + 0x00000197,0x00000051,0x00050080,0x0000000d,0x00000198,0x00000197,0x000000a4,0x0004003d, + 0x00000006,0x00000199,0x000000d0,0x00050041,0x000000c7,0x0000019a,0x0000017b,0x00000198, + 0x0003003e,0x0000019a,0x00000199,0x000200f9,0x00000194,0x000200f8,0x00000194,0x000200f9, + 0x00000190,0x000200f8,0x00000190,0x000200f9,0x00000187,0x000200f8,0x00000187,0x000200f9, + 0x00000176,0x000200f8,0x00000176,0x000300e1,0x000000c9,0x000000ca,0x000400e0,0x000000c9, + 0x000000c9,0x000000cb,0x0004003d,0x0000000d,0x0000019c,0x00000051,0x0004003d,0x0000000d, + 0x0000019d,0x00000051,0x00050041,0x000000c7,0x0000019e,0x0000017b,0x0000019d,0x0004003d, + 0x00000006,0x0000019f,0x0000019e,0x00050041,0x000000c7,0x000001a0,0x0000019b,0x0000019c, + 0x0003003e,0x000001a0,0x0000019f,0x000300e1,0x000000c9,0x000000ca,0x000400e0,0x000000c9, + 0x000000c9,0x000000cb,0x0004003d,0x0000000d,0x000001a1,0x00000051,0x000500b1,0x0000001e, + 0x000001a3,0x000001a1,0x000001a2,0x000300f7,0x000001a5,0x00000000,0x000400fa,0x000001a3, + 0x000001a4,0x000001a5,0x000200f8,0x000001a4,0x0004003d,0x0000000d,0x000001a6,0x00000051, + 0x0004003d,0x0000000d,0x000001a7,0x00000051,0x00050080,0x0000000d,0x000001a8,0x000001a7, + 0x000001a2,0x00050041,0x000000c7,0x000001a9,0x0000019b,0x000001a8,0x0004003d,0x00000006, + 0x000001aa,0x000001a9,0x00050041,0x000000c7,0x000001ab,0x0000019b,0x000001a6,0x0004003d, + 0x00000006,0x000001ac,0x000001ab,0x00050081,0x00000006,0x000001ad,0x000001ac,0x000001aa, + 0x00050041,0x000000c7,0x000001ae,0x0000019b,0x000001a6,0x0003003e,0x000001ae,0x000001ad, + 0x000200f9,0x000001a5,0x000200f8,0x000001a5,0x000300e1,0x000000c9,0x000000ca,0x000400e0, + 0x000000c9,0x000000c9,0x000000cb,0x0004003d,0x0000000d,0x000001af,0x00000051,0x000500b1, + 0x0000001e,0x000001b1,0x000001af,0x000001b0,0x000300f7,0x000001b3,0x00000000,0x000400fa, + 0x000001b1,0x000001b2,0x000001b3,0x000200f8,0x000001b2,0x0004003d,0x0000000d,0x000001b4, + 0x00000051,0x0004003d,0x0000000d,0x000001b5,0x00000051,0x00050080,0x0000000d,0x000001b6, + 0x000001b5,0x000001b0,0x00050041,0x000000c7,0x000001b7,0x0000019b,0x000001b6,0x0004003d, + 0x00000006,0x000001b8,0x000001b7,0x00050041,0x000000c7,0x000001b9,0x0000019b,0x000001b4, + 0x0004003d,0x00000006,0x000001ba,0x000001b9,0x00050081,0x00000006,0x000001bb,0x000001ba, + 0x000001b8,0x00050041,0x000000c7,0x000001bc,0x0000019b,0x000001b4,0x0003003e,0x000001bc, + 0x000001bb,0x000200f9,0x000001b3,0x000200f8,0x000001b3,0x000300e1,0x000000c9,0x000000ca, + 0x000400e0,0x000000c9,0x000000c9,0x000000cb,0x0004003d,0x0000000d,0x000001bd,0x00000051, + 0x000500b1,0x0000001e,0x000001bf,0x000001bd,0x000001be,0x000300f7,0x000001c1,0x00000000, + 0x000400fa,0x000001bf,0x000001c0,0x000001c1,0x000200f8,0x000001c0,0x0004003d,0x0000000d, + 0x000001c2,0x00000051,0x0004003d,0x0000000d,0x000001c3,0x00000051,0x00050080,0x0000000d, + 0x000001c4,0x000001c3,0x000001be,0x00050041,0x000000c7,0x000001c5,0x0000019b,0x000001c4, + 0x0004003d,0x00000006,0x000001c6,0x000001c5,0x00050041,0x000000c7,0x000001c7,0x0000019b, + 0x000001c2,0x0004003d,0x00000006,0x000001c8,0x000001c7,0x00050081,0x00000006,0x000001c9, + 0x000001c8,0x000001c6,0x00050041,0x000000c7,0x000001ca,0x0000019b,0x000001c2,0x0003003e, + 0x000001ca,0x000001c9,0x000200f9,0x000001c1,0x000200f8,0x000001c1,0x0004003d,0x0000000d, + 0x000001cb,0x00000051,0x000500b1,0x0000001e,0x000001cd,0x000001cb,0x000001cc,0x000300f7, + 0x000001cf,0x00000000,0x000400fa,0x000001cd,0x000001ce,0x000001cf,0x000200f8,0x000001ce, + 0x0004003d,0x0000000d,0x000001d0,0x00000051,0x0004003d,0x0000000d,0x000001d1,0x00000051, + 0x00050080,0x0000000d,0x000001d2,0x000001d1,0x000001cc,0x00050041,0x000000c7,0x000001d3, + 0x0000019b,0x000001d2,0x0004003d,0x00000006,0x000001d4,0x000001d3,0x00050041,0x000000c7, + 0x000001d5,0x0000019b,0x000001d0,0x0004003d,0x00000006,0x000001d6,0x000001d5,0x00050081, + 0x00000006,0x000001d7,0x000001d6,0x000001d4,0x00050041,0x000000c7,0x000001d8,0x0000019b, + 0x000001d0,0x0003003e,0x000001d8,0x000001d7,0x000200f9,0x000001cf,0x000200f8,0x000001cf, + 0x0004003d,0x0000000d,0x000001d9,0x00000051,0x000500b1,0x0000001e,0x000001da,0x000001d9, + 0x00000146,0x000300f7,0x000001dc,0x00000000,0x000400fa,0x000001da,0x000001db,0x000001dc, + 0x000200f8,0x000001db,0x0004003d,0x0000000d,0x000001dd,0x00000051,0x0004003d,0x0000000d, + 0x000001de,0x00000051,0x00050080,0x0000000d,0x000001df,0x000001de,0x00000146,0x00050041, + 0x000000c7,0x000001e0,0x0000019b,0x000001df,0x0004003d,0x00000006,0x000001e1,0x000001e0, + 0x00050041,0x000000c7,0x000001e2,0x0000019b,0x000001dd,0x0004003d,0x00000006,0x000001e3, + 0x000001e2,0x00050081,0x00000006,0x000001e4,0x000001e3,0x000001e1,0x00050041,0x000000c7, + 0x000001e5,0x0000019b,0x000001dd,0x0003003e,0x000001e5,0x000001e4,0x000200f9,0x000001dc, + 0x000200f8,0x000001dc,0x0004003d,0x0000000d,0x000001e6,0x00000051,0x000500b1,0x0000001e, + 0x000001e7,0x000001e6,0x0000010d,0x000300f7,0x000001e9,0x00000000,0x000400fa,0x000001e7, + 0x000001e8,0x000001e9,0x000200f8,0x000001e8,0x0004003d,0x0000000d,0x000001ea,0x00000051, + 0x0004003d,0x0000000d,0x000001eb,0x00000051,0x00050080,0x0000000d,0x000001ec,0x000001eb, + 0x0000010d,0x00050041,0x000000c7,0x000001ed,0x0000019b,0x000001ec,0x0004003d,0x00000006, + 0x000001ee,0x000001ed,0x00050041,0x000000c7,0x000001ef,0x0000019b,0x000001ea,0x0004003d, + 0x00000006,0x000001f0,0x000001ef,0x00050081,0x00000006,0x000001f1,0x000001f0,0x000001ee, + 0x00050041,0x000000c7,0x000001f2,0x0000019b,0x000001ea,0x0003003e,0x000001f2,0x000001f1, + 0x000200f9,0x000001e9,0x000200f8,0x000001e9,0x0004003d,0x0000000d,0x000001f3,0x00000051, + 0x000500b1,0x0000001e,0x000001f4,0x000001f3,0x000000a7,0x000300f7,0x000001f6,0x00000000, + 0x000400fa,0x000001f4,0x000001f5,0x000001f6,0x000200f8,0x000001f5,0x0004003d,0x0000000d, + 0x000001f7,0x00000051,0x0004003d,0x0000000d,0x000001f8,0x00000051,0x00050080,0x0000000d, + 0x000001f9,0x000001f8,0x000000a7,0x00050041,0x000000c7,0x000001fa,0x0000019b,0x000001f9, + 0x0004003d,0x00000006,0x000001fb,0x000001fa,0x00050041,0x000000c7,0x000001fc,0x0000019b, + 0x000001f7,0x0004003d,0x00000006,0x000001fd,0x000001fc,0x00050081,0x00000006,0x000001fe, + 0x000001fd,0x000001fb,0x00050041,0x000000c7,0x000001ff,0x0000019b,0x000001f7,0x0003003e, + 0x000001ff,0x000001fe,0x000200f9,0x000001f6,0x000200f8,0x000001f6,0x0004003d,0x0000000d, + 0x00000200,0x00000051,0x000500b1,0x0000001e,0x00000201,0x00000200,0x000000a4,0x000300f7, + 0x00000203,0x00000000,0x000400fa,0x00000201,0x00000202,0x00000203,0x000200f8,0x00000202, + 0x0004003d,0x0000000d,0x00000204,0x00000051,0x0004003d,0x0000000d,0x00000205,0x00000051, + 0x00050080,0x0000000d,0x00000206,0x00000205,0x000000a4,0x00050041,0x000000c7,0x00000207, + 0x0000019b,0x00000206,0x0004003d,0x00000006,0x00000208,0x00000207,0x00050041,0x000000c7, + 0x00000209,0x0000019b,0x00000204,0x0004003d,0x00000006,0x0000020a,0x00000209,0x00050081, + 0x00000006,0x0000020b,0x0000020a,0x00000208,0x00050041,0x000000c7,0x0000020c,0x0000019b, + 0x00000204,0x0003003e,0x0000020c,0x0000020b,0x000200f9,0x00000203,0x000200f8,0x00000203, + 0x000300e1,0x000000c9,0x000000ca,0x000400e0,0x000000c9,0x000000c9,0x000000cb,0x0004003d, + 0x0000000d,0x0000020d,0x00000051,0x00050041,0x000000c7,0x0000020e,0x0000019b,0x00000073, + 0x0004003d,0x00000006,0x0000020f,0x0000020e,0x00050041,0x000000c7,0x00000210,0x0000017b, + 0x0000020d,0x0004003d,0x00000006,0x00000211,0x00000210,0x00050088,0x00000006,0x00000212, + 0x00000211,0x0000020f,0x00050041,0x000000c7,0x00000213,0x0000017b,0x0000020d,0x0003003e, + 0x00000213,0x00000212,0x0004003d,0x0000000d,0x00000215,0x00000051,0x00050041,0x000000c7, + 0x00000216,0x0000017b,0x00000215,0x0004003d,0x00000006,0x00000217,0x00000216,0x0003003e, + 0x00000214,0x00000217,0x00050041,0x0000000e,0x0000021a,0x0000004f,0x00000077,0x0004003d, + 0x0000000d,0x0000021b,0x0000021a,0x0003003e,0x00000219,0x0000021b,0x00050039,0x00000006, + 0x0000021c,0x0000002e,0x00000219,0x0003003e,0x00000218,0x0000021c,0x0004003d,0x0000000d, + 0x00000221,0x00000051,0x0004003d,0x00000006,0x00000222,0x00000214,0x0004003d,0x00000006, + 0x00000223,0x00000214,0x0004003d,0x00000006,0x00000224,0x00000218,0x00050088,0x00000006, + 0x00000225,0x00000223,0x00000224,0x0006000c,0x00000006,0x00000226,0x00000001,0x0000001c, + 0x00000225,0x00050085,0x00000006,0x00000227,0x00000222,0x00000226,0x0004003d,0x00000006, + 0x00000228,0x00000218,0x0004003d,0x00000006,0x00000229,0x00000218,0x0004003d,0x00000006, + 0x0000022a,0x00000214,0x00050088,0x00000006,0x0000022b,0x00000229,0x0000022a,0x0006000c, + 0x00000006,0x0000022c,0x00000001,0x0000001c,0x0000022b,0x00050085,0x00000006,0x0000022d, + 0x00000228,0x0000022c,0x00050050,0x0000021d,0x0000022e,0x00000227,0x0000022d,0x00050041, + 0x0000022f,0x00000230,0x00000220,0x00000221,0x0003003e,0x00000230,0x0000022e,0x000300e1, + 0x000000c9,0x000000ca,0x000400e0,0x000000c9,0x000000c9,0x000000cb,0x0004003d,0x0000000d, + 0x00000231,0x00000051,0x000500b1,0x0000001e,0x00000232,0x00000231,0x000001a2,0x000300f7, + 0x00000234,0x00000000,0x000400fa,0x00000232,0x00000233,0x00000234,0x000200f8,0x00000233, + 0x0004003d,0x0000000d,0x00000235,0x00000051,0x0004003d,0x0000000d,0x00000236,0x00000051, + 0x00050080,0x0000000d,0x00000237,0x00000236,0x000001a2,0x00050041,0x0000022f,0x00000238, + 0x00000220,0x00000237,0x0004003d,0x0000021d,0x00000239,0x00000238,0x00050041,0x0000022f, + 0x0000023a,0x00000220,0x00000235,0x0004003d,0x0000021d,0x0000023b,0x0000023a,0x00050081, + 0x0000021d,0x0000023c,0x0000023b,0x00000239,0x00050041,0x0000022f,0x0000023d,0x00000220, + 0x00000235,0x0003003e,0x0000023d,0x0000023c,0x000200f9,0x00000234,0x000200f8,0x00000234, + 0x000300e1,0x000000c9,0x000000ca,0x000400e0,0x000000c9,0x000000c9,0x000000cb,0x0004003d, + 0x0000000d,0x0000023e,0x00000051,0x000500b1,0x0000001e,0x0000023f,0x0000023e,0x000001b0, + 0x000300f7,0x00000241,0x00000000,0x000400fa,0x0000023f,0x00000240,0x00000241,0x000200f8, + 0x00000240,0x0004003d,0x0000000d,0x00000242,0x00000051,0x0004003d,0x0000000d,0x00000243, + 0x00000051,0x00050080,0x0000000d,0x00000244,0x00000243,0x000001b0,0x00050041,0x0000022f, + 0x00000245,0x00000220,0x00000244,0x0004003d,0x0000021d,0x00000246,0x00000245,0x00050041, + 0x0000022f,0x00000247,0x00000220,0x00000242,0x0004003d,0x0000021d,0x00000248,0x00000247, + 0x00050081,0x0000021d,0x00000249,0x00000248,0x00000246,0x00050041,0x0000022f,0x0000024a, + 0x00000220,0x00000242,0x0003003e,0x0000024a,0x00000249,0x000200f9,0x00000241,0x000200f8, + 0x00000241,0x000300e1,0x000000c9,0x000000ca,0x000400e0,0x000000c9,0x000000c9,0x000000cb, + 0x0004003d,0x0000000d,0x0000024b,0x00000051,0x000500b1,0x0000001e,0x0000024c,0x0000024b, + 0x000001be,0x000300f7,0x0000024e,0x00000000,0x000400fa,0x0000024c,0x0000024d,0x0000024e, + 0x000200f8,0x0000024d,0x0004003d,0x0000000d,0x0000024f,0x00000051,0x0004003d,0x0000000d, + 0x00000250,0x00000051,0x00050080,0x0000000d,0x00000251,0x00000250,0x000001be,0x00050041, + 0x0000022f,0x00000252,0x00000220,0x00000251,0x0004003d,0x0000021d,0x00000253,0x00000252, + 0x00050041,0x0000022f,0x00000254,0x00000220,0x0000024f,0x0004003d,0x0000021d,0x00000255, + 0x00000254,0x00050081,0x0000021d,0x00000256,0x00000255,0x00000253,0x00050041,0x0000022f, + 0x00000257,0x00000220,0x0000024f,0x0003003e,0x00000257,0x00000256,0x000200f9,0x0000024e, + 0x000200f8,0x0000024e,0x0004003d,0x0000000d,0x00000258,0x00000051,0x000500b1,0x0000001e, + 0x00000259,0x00000258,0x000001cc,0x000300f7,0x0000025b,0x00000000,0x000400fa,0x00000259, + 0x0000025a,0x0000025b,0x000200f8,0x0000025a,0x0004003d,0x0000000d,0x0000025c,0x00000051, + 0x0004003d,0x0000000d,0x0000025d,0x00000051,0x00050080,0x0000000d,0x0000025e,0x0000025d, + 0x000001cc,0x00050041,0x0000022f,0x0000025f,0x00000220,0x0000025e,0x0004003d,0x0000021d, + 0x00000260,0x0000025f,0x00050041,0x0000022f,0x00000261,0x00000220,0x0000025c,0x0004003d, + 0x0000021d,0x00000262,0x00000261,0x00050081,0x0000021d,0x00000263,0x00000262,0x00000260, + 0x00050041,0x0000022f,0x00000264,0x00000220,0x0000025c,0x0003003e,0x00000264,0x00000263, + 0x000200f9,0x0000025b,0x000200f8,0x0000025b,0x0004003d,0x0000000d,0x00000265,0x00000051, + 0x000500b1,0x0000001e,0x00000266,0x00000265,0x00000146,0x000300f7,0x00000268,0x00000000, + 0x000400fa,0x00000266,0x00000267,0x00000268,0x000200f8,0x00000267,0x0004003d,0x0000000d, + 0x00000269,0x00000051,0x0004003d,0x0000000d,0x0000026a,0x00000051,0x00050080,0x0000000d, + 0x0000026b,0x0000026a,0x00000146,0x00050041,0x0000022f,0x0000026c,0x00000220,0x0000026b, + 0x0004003d,0x0000021d,0x0000026d,0x0000026c,0x00050041,0x0000022f,0x0000026e,0x00000220, + 0x00000269,0x0004003d,0x0000021d,0x0000026f,0x0000026e,0x00050081,0x0000021d,0x00000270, + 0x0000026f,0x0000026d,0x00050041,0x0000022f,0x00000271,0x00000220,0x00000269,0x0003003e, + 0x00000271,0x00000270,0x000200f9,0x00000268,0x000200f8,0x00000268,0x0004003d,0x0000000d, + 0x00000272,0x00000051,0x000500b1,0x0000001e,0x00000273,0x00000272,0x0000010d,0x000300f7, + 0x00000275,0x00000000,0x000400fa,0x00000273,0x00000274,0x00000275,0x000200f8,0x00000274, + 0x0004003d,0x0000000d,0x00000276,0x00000051,0x0004003d,0x0000000d,0x00000277,0x00000051, + 0x00050080,0x0000000d,0x00000278,0x00000277,0x0000010d,0x00050041,0x0000022f,0x00000279, + 0x00000220,0x00000278,0x0004003d,0x0000021d,0x0000027a,0x00000279,0x00050041,0x0000022f, + 0x0000027b,0x00000220,0x00000276,0x0004003d,0x0000021d,0x0000027c,0x0000027b,0x00050081, + 0x0000021d,0x0000027d,0x0000027c,0x0000027a,0x00050041,0x0000022f,0x0000027e,0x00000220, + 0x00000276,0x0003003e,0x0000027e,0x0000027d,0x000200f9,0x00000275,0x000200f8,0x00000275, + 0x0004003d,0x0000000d,0x0000027f,0x00000051,0x000500b1,0x0000001e,0x00000280,0x0000027f, + 0x000000a7,0x000300f7,0x00000282,0x00000000,0x000400fa,0x00000280,0x00000281,0x00000282, + 0x000200f8,0x00000281,0x0004003d,0x0000000d,0x00000283,0x00000051,0x0004003d,0x0000000d, + 0x00000284,0x00000051,0x00050080,0x0000000d,0x00000285,0x00000284,0x000000a7,0x00050041, + 0x0000022f,0x00000286,0x00000220,0x00000285,0x0004003d,0x0000021d,0x00000287,0x00000286, + 0x00050041,0x0000022f,0x00000288,0x00000220,0x00000283,0x0004003d,0x0000021d,0x00000289, + 0x00000288,0x00050081,0x0000021d,0x0000028a,0x00000289,0x00000287,0x00050041,0x0000022f, + 0x0000028b,0x00000220,0x00000283,0x0003003e,0x0000028b,0x0000028a,0x000200f9,0x00000282, + 0x000200f8,0x00000282,0x0004003d,0x0000000d,0x0000028c,0x00000051,0x000500aa,0x0000001e, + 0x0000028d,0x0000028c,0x00000073,0x000300f7,0x0000028f,0x00000000,0x000400fa,0x0000028d, + 0x0000028e,0x0000028f,0x000200f8,0x0000028e,0x00050041,0x0000022f,0x00000292,0x00000220, + 0x00000073,0x0004003d,0x0000021d,0x00000293,0x00000292,0x00050041,0x0000022f,0x00000294, + 0x00000220,0x000000a4,0x0004003d,0x0000021d,0x00000295,0x00000294,0x00050081,0x0000021d, + 0x00000296,0x00000293,0x00000295,0x0003003e,0x00000291,0x00000296,0x00050041,0x00000007, + 0x00000298,0x00000291,0x00000077,0x0004003d,0x00000006,0x00000299,0x00000298,0x0006000c, + 0x00000006,0x0000029a,0x00000001,0x00000004,0x00000299,0x00050041,0x00000007,0x0000029b, + 0x00000291,0x0000009e,0x0004003d,0x00000006,0x0000029c,0x0000029b,0x0006000c,0x00000006, + 0x0000029d,0x00000001,0x00000004,0x0000029c,0x00050081,0x00000006,0x0000029e,0x0000029a, + 0x0000029d,0x0004007f,0x00000006,0x0000029f,0x0000029e,0x0006000c,0x00000006,0x000002a0, + 0x00000001,0x0000001b,0x0000029f,0x00050083,0x00000006,0x000002a1,0x0000016f,0x000002a0, + 0x0003003e,0x00000297,0x000002a1,0x0004003d,0x00000006,0x000002a3,0x00000297,0x00050088, + 0x00000006,0x000002a5,0x000002a3,0x000002a4,0x00050085,0x00000006,0x000002a7,0x000002a5, + 0x000002a6,0x0004006d,0x00000008,0x000002a8,0x000002a7,0x0003003e,0x000002a2,0x000002a8, + 0x00050041,0x0000000e,0x000002aa,0x0000004f,0x0000009e,0x0004003d,0x0000000d,0x000002ab, + 0x000002aa,0x0003003e,0x000002a9,0x000002ab,0x0004003d,0x00000008,0x000002ad,0x000002a2, + 0x0003003e,0x000002ac,0x000002ad,0x00060039,0x00000002,0x000002ae,0x0000003a,0x000002a9, + 0x000002ac,0x0003003e,0x000002b0,0x000000a7,0x0003003e,0x000002b1,0x0000009e,0x00060039, + 0x00000008,0x000002b2,0x00000048,0x000002b0,0x000002b1,0x0003003e,0x000002af,0x000002b2, + 0x0004003d,0x00000008,0x000002b3,0x000002af,0x000500aa,0x0000001e,0x000002b5,0x000002b3, + 0x000002b4,0x000300f7,0x000002b7,0x00000000,0x000400fa,0x000002b5,0x000002b6,0x000002b7, + 0x000200f8,0x000002b6,0x0003003e,0x000002b9,0x00000073,0x00050039,0x00000008,0x000002ba, + 0x00000036,0x000002b9,0x0003003e,0x000002b8,0x000002ba,0x0003003e,0x000002bc,0x000000a4, + 0x00050039,0x00000008,0x000002bd,0x00000036,0x000002bc,0x0003003e,0x000002bb,0x000002bd, + 0x0003003e,0x000002bf,0x000000a7,0x00050039,0x00000008,0x000002c0,0x00000036,0x000002bf, + 0x0003003e,0x000002be,0x000002c0,0x0004003d,0x00000008,0x000002c3,0x000002bb,0x0003003e, + 0x000002c2,0x000002c3,0x0004003d,0x00000008,0x000002c5,0x000002be,0x0003003e,0x000002c4, + 0x000002c5,0x00060039,0x00000008,0x000002c6,0x00000018,0x000002c2,0x000002c4,0x0004003d, + 0x00000008,0x000002c8,0x000002b8,0x0003003e,0x000002c7,0x000002c8,0x0003003e,0x000002c9, + 0x000002c6,0x00060039,0x00000008,0x000002ca,0x00000018,0x000002c7,0x000002c9,0x00040070, + 0x00000006,0x000002cb,0x000002ca,0x00050088,0x00000006,0x000002cc,0x000002cb,0x000002a6, + 0x0003003e,0x000002c1,0x000002cc,0x0003003e,0x000002ce,0x000000a4,0x00050039,0x00000008, + 0x000002cf,0x0000003f,0x000002ce,0x000500c4,0x00000008,0x000002d0,0x000002cf,0x000000a4, + 0x0003003e,0x000002cd,0x000002d0,0x0004003d,0x00000006,0x000002d2,0x000002c1,0x0003003e, + 0x000002d1,0x000002d2,0x00050039,0x0000001e,0x000002d3,0x00000021,0x000002d1,0x000300f7, + 0x000002d5,0x00000000,0x000400fa,0x000002d3,0x000002d4,0x000002d5,0x000200f8,0x000002d4, + 0x0004003d,0x00000008,0x000002d6,0x000002cd,0x000500c5,0x00000008,0x000002d7,0x000002d6, + 0x0000009e,0x0003003e,0x000002cd,0x000002d7,0x000200f9,0x000002d5,0x000200f8,0x000002d5, + 0x0004003d,0x00000006,0x000002d9,0x000002c1,0x0003003e,0x000002d8,0x000002d9,0x00050039, + 0x00000008,0x000002da,0x0000000b,0x000002d8,0x0003003e,0x000002db,0x00000073,0x0003003e, + 0x000002dc,0x000002da,0x00060039,0x00000002,0x000002dd,0x00000043,0x000002db,0x000002dc, + 0x0003003e,0x000002de,0x000000a4,0x0004003d,0x00000008,0x000002e0,0x000002cd,0x0003003e, + 0x000002df,0x000002e0,0x00060039,0x00000002,0x000002e1,0x00000043,0x000002de,0x000002df, + 0x0003003e,0x000002e2,0x000000a7,0x0003003e,0x000002e3,0x00000077,0x00060039,0x00000002, + 0x000002e4,0x00000043,0x000002e2,0x000002e3,0x00040039,0x00000002,0x000002e5,0x0000003c, + 0x000200f9,0x000002b7,0x000200f8,0x000002b7,0x000200f9,0x0000028f,0x000200f8,0x0000028f, + 0x00050041,0x0000000e,0x000002e6,0x0000004f,0x0000009e,0x0004003d,0x0000000d,0x000002e7, + 0x000002e6,0x000500aa,0x0000001e,0x000002e8,0x000002e7,0x000000a4,0x000300f7,0x000002ea, + 0x00000000,0x000400fa,0x000002e8,0x000002e9,0x000002ea,0x000200f8,0x000002e9,0x00050041, + 0x0000000e,0x000002ec,0x0000004f,0x00000077,0x0004003d,0x0000000d,0x000002ed,0x000002ec, + 0x0003003e,0x000002eb,0x000002ed,0x0004003d,0x00000006,0x000002ef,0x00000214,0x0003003e, + 0x000002ee,0x000002ef,0x00060039,0x00000002,0x000002f0,0x00000033,0x000002eb,0x000002ee, + 0x00050041,0x0000000e,0x000002f2,0x0000004f,0x00000077,0x0004003d,0x0000000d,0x000002f3, + 0x000002f2,0x0003003e,0x000002f1,0x000002f3,0x0003003e,0x000002f4,0x00000077,0x00060039, + 0x00000002,0x000002f5,0x0000002a,0x000002f1,0x000002f4,0x000200f9,0x000002ea,0x000200f8, + 0x000002ea,0x000100fd,0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_of_filter_optical_flow_v5_comp_spv.h b/gpu/vk/shaders/fsr3_of_filter_optical_flow_v5_comp_spv.h new file mode 100644 index 000000000..5710a94f5 --- /dev/null +++ b/gpu/vk/shaders/fsr3_of_filter_optical_flow_v5_comp_spv.h @@ -0,0 +1,167 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_OF_FILTER_OPTICAL_FLOW_V5_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x000000bf,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000031,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e, + 0x00000000,0x00000001,0x0009000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x0000009e, + 0x000000a3,0x000000a7,0x000000ac,0x00060010,0x00000004,0x00000011,0x00000010,0x00000004, + 0x00000001,0x00030003,0x00000002,0x000001c2,0x000b0004,0x455f4c47,0x735f5458,0x6c706d61, + 0x656c7265,0x745f7373,0x75747865,0x665f6572,0x74636e75,0x736e6f69,0x00000000,0x000b0004, + 0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d, + 0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79, + 0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45, + 0x64756c63,0x69645f65,0x74636572,0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000, + 0x000a0005,0x0000000b,0x64616f4c,0x76657250,0x73756f69,0x6974704f,0x466c6163,0x28776f6c, + 0x3b326976,0x00000000,0x00040005,0x0000000a,0x50785069,0x0000736f,0x00090005,0x00000010, + 0x726f7453,0x74704f65,0x6c616369,0x776f6c46,0x32697628,0x3269763b,0x0000003b,0x00040005, + 0x0000000e,0x50785069,0x0000736f,0x00060005,0x0000000f,0x69746f6d,0x65566e6f,0x726f7463, + 0x00000000,0x000b0005,0x00000018,0x746c6946,0x704f7265,0x61636974,0x6f6c466c,0x69762877, + 0x69763b32,0x69763b32,0x31693b32,0x0000003b,0x00050005,0x00000014,0x6f6c4769,0x496c6162, + 0x00000064,0x00050005,0x00000015,0x636f4c69,0x64496c61,0x00000000,0x00050005,0x00000016, + 0x6f724769,0x64497075,0x00000000,0x00050005,0x00000017,0x636f4c69,0x6e496c61,0x00786564, + 0x00080005,0x0000001c,0x706f5f72,0x61636974,0x6c665f6c,0x705f776f,0x69766572,0x0073756f, + 0x00060005,0x00000027,0x6f5f7772,0x63697470,0x665f6c61,0x00776f6c,0x00030005,0x0000002e, + 0x00786469,0x00030005,0x0000002f,0x00007878,0x00030005,0x0000003a,0x00007979,0x00040005, + 0x00000046,0x4d706d74,0x00000056,0x00040005,0x0000004d,0x61726170,0x0000006d,0x00030005, + 0x00000058,0x00746572,0x00030005,0x0000005a,0x00000069,0x00030005,0x00000063,0x00706d74, + 0x00030005,0x00000065,0x0000006a,0x00040005,0x0000006d,0x746c6564,0x00000061,0x00040005, + 0x00000091,0x496e696d,0x00007864,0x00040005,0x00000096,0x61726170,0x0000006d,0x00040005, + 0x00000098,0x61726170,0x0000006d,0x00080005,0x0000009e,0x475f6c67,0x61626f6c,0x766e496c, + 0x7461636f,0x496e6f69,0x00000044,0x00080005,0x000000a3,0x4c5f6c67,0x6c61636f,0x6f766e49, + 0x69746163,0x44496e6f,0x00000000,0x00060005,0x000000a7,0x575f6c67,0x476b726f,0x70756f72, + 0x00004449,0x00080005,0x000000ac,0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163,0x6e496e6f, + 0x00786564,0x00040005,0x000000af,0x61726170,0x0000006d,0x00040005,0x000000b0,0x61726170, + 0x0000006d,0x00040005,0x000000b1,0x61726170,0x0000006d,0x00040005,0x000000b2,0x61726170, + 0x0000006d,0x00040005,0x000000b9,0x464f6263,0x0000745f,0x00090006,0x000000b9,0x00000000, + 0x706e4969,0x754c7475,0x6552616d,0x756c6f73,0x6e6f6974,0x00000000,0x000a0006,0x000000b9, + 0x00000001,0x74704f75,0x6c616369,0x776f6c46,0x61727950,0x4c64696d,0x6c657665,0x00000000, + 0x000b0006,0x000000b9,0x00000002,0x74704f75,0x6c616369,0x776f6c46,0x61727950,0x4c64696d, + 0x6c657665,0x6e756f43,0x00000074,0x00060006,0x000000b9,0x00000003,0x61724669,0x6e49656d, + 0x00786564,0x000a0006,0x000000b9,0x00000004,0x6b636162,0x66667562,0x72547265,0x66736e61, + 0x75467265,0x6974636e,0x00006e6f,0x00070006,0x000000b9,0x00000005,0x4d6e696d,0x754c7861, + 0x616e696d,0x0065636e,0x00040005,0x000000bb,0x464f6263,0x00000000,0x00040047,0x0000001c, + 0x00000021,0x00000000,0x00040047,0x0000001c,0x00000022,0x00000000,0x00040047,0x00000027, + 0x00000021,0x00000001,0x00040047,0x00000027,0x00000022,0x00000000,0x00040047,0x0000009e, + 0x0000000b,0x0000001c,0x00040047,0x000000a3,0x0000000b,0x0000001b,0x00040047,0x000000a7, + 0x0000000b,0x0000001a,0x00040047,0x000000ac,0x0000000b,0x0000001d,0x00030047,0x000000b9, + 0x00000002,0x00050048,0x000000b9,0x00000000,0x00000023,0x00000000,0x00050048,0x000000b9, + 0x00000001,0x00000023,0x00000008,0x00050048,0x000000b9,0x00000002,0x00000023,0x0000000c, + 0x00050048,0x000000b9,0x00000003,0x00000023,0x00000010,0x00050048,0x000000b9,0x00000004, + 0x00000023,0x00000014,0x00050048,0x000000b9,0x00000005,0x00000023,0x00000018,0x00040047, + 0x000000bb,0x00000021,0x00000002,0x00040047,0x000000bb,0x00000022,0x00000000,0x00040047, + 0x000000be,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002, + 0x00040015,0x00000006,0x00000020,0x00000001,0x00040017,0x00000007,0x00000006,0x00000002, + 0x00040020,0x00000008,0x00000007,0x00000007,0x00040021,0x00000009,0x00000007,0x00000008, + 0x00050021,0x0000000d,0x00000002,0x00000008,0x00000008,0x00040020,0x00000012,0x00000007, + 0x00000006,0x00070021,0x00000013,0x00000002,0x00000008,0x00000008,0x00000008,0x00000012, + 0x00090019,0x0000001a,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000,0x00000001, + 0x00000000,0x00040020,0x0000001b,0x00000000,0x0000001a,0x0004003b,0x0000001b,0x0000001c, + 0x00000000,0x0004002b,0x00000006,0x0000001f,0x00000000,0x00040017,0x00000020,0x00000006, + 0x00000004,0x00090019,0x00000025,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000, + 0x00000002,0x0000001a,0x00040020,0x00000026,0x00000000,0x00000025,0x0004003b,0x00000026, + 0x00000027,0x00000000,0x0004002b,0x00000006,0x00000030,0xffffffff,0x0004002b,0x00000006, + 0x00000037,0x00000002,0x00020014,0x00000038,0x00040015,0x00000042,0x00000020,0x00000000, + 0x0004002b,0x00000042,0x00000043,0x00000009,0x0004001c,0x00000044,0x00000007,0x00000043, + 0x00040020,0x00000045,0x00000007,0x00000044,0x0004002b,0x00000006,0x00000051,0x00000001, + 0x00040020,0x00000057,0x00000007,0x00000042,0x0004002b,0x00000042,0x00000059,0xffffffff, + 0x0004002b,0x00000006,0x00000061,0x00000009,0x0004002b,0x00000042,0x00000064,0x00000000, + 0x0004002b,0x00000042,0x0000007b,0x00000001,0x0004002b,0x00000006,0x00000088,0x00000004, + 0x0004002b,0x00000042,0x00000093,0x0000000f,0x00040017,0x0000009c,0x00000042,0x00000003, + 0x00040020,0x0000009d,0x00000001,0x0000009c,0x0004003b,0x0000009d,0x0000009e,0x00000001, + 0x00040017,0x0000009f,0x00000042,0x00000002,0x0004003b,0x0000009d,0x000000a3,0x00000001, + 0x0004003b,0x0000009d,0x000000a7,0x00000001,0x00040020,0x000000ab,0x00000001,0x00000042, + 0x0004003b,0x000000ab,0x000000ac,0x00000001,0x00030016,0x000000b4,0x00000020,0x0004002b, + 0x000000b4,0x000000b5,0x387fda40,0x0004002b,0x000000b4,0x000000b6,0x477fe000,0x0004002b, + 0x000000b4,0x000000b7,0x37801002,0x00040017,0x000000b8,0x000000b4,0x00000002,0x0008001e, + 0x000000b9,0x00000007,0x00000042,0x00000042,0x00000042,0x00000042,0x000000b8,0x00040020, + 0x000000ba,0x00000002,0x000000b9,0x0004003b,0x000000ba,0x000000bb,0x00000002,0x0004002b, + 0x00000042,0x000000bc,0x00000010,0x0004002b,0x00000042,0x000000bd,0x00000004,0x0006002c, + 0x0000009c,0x000000be,0x000000bc,0x000000bd,0x0000007b,0x00050036,0x00000002,0x00000004, + 0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000008,0x000000af,0x00000007, + 0x0004003b,0x00000008,0x000000b0,0x00000007,0x0004003b,0x00000008,0x000000b1,0x00000007, + 0x0004003b,0x00000012,0x000000b2,0x00000007,0x0004003d,0x0000009c,0x000000a0,0x0000009e, + 0x0007004f,0x0000009f,0x000000a1,0x000000a0,0x000000a0,0x00000000,0x00000001,0x0004007c, + 0x00000007,0x000000a2,0x000000a1,0x0004003d,0x0000009c,0x000000a4,0x000000a3,0x0007004f, + 0x0000009f,0x000000a5,0x000000a4,0x000000a4,0x00000000,0x00000001,0x0004007c,0x00000007, + 0x000000a6,0x000000a5,0x0004003d,0x0000009c,0x000000a8,0x000000a7,0x0007004f,0x0000009f, + 0x000000a9,0x000000a8,0x000000a8,0x00000000,0x00000001,0x0004007c,0x00000007,0x000000aa, + 0x000000a9,0x0004003d,0x00000042,0x000000ad,0x000000ac,0x0004007c,0x00000006,0x000000ae, + 0x000000ad,0x0003003e,0x000000af,0x000000a2,0x0003003e,0x000000b0,0x000000a6,0x0003003e, + 0x000000b1,0x000000aa,0x0003003e,0x000000b2,0x000000ae,0x00080039,0x00000002,0x000000b3, + 0x00000018,0x000000af,0x000000b0,0x000000b1,0x000000b2,0x000100fd,0x00010038,0x00050036, + 0x00000007,0x0000000b,0x00000000,0x00000009,0x00030037,0x00000008,0x0000000a,0x000200f8, + 0x0000000c,0x0004003d,0x0000001a,0x0000001d,0x0000001c,0x0004003d,0x00000007,0x0000001e, + 0x0000000a,0x0007005f,0x00000020,0x00000021,0x0000001d,0x0000001e,0x00000002,0x0000001f, + 0x0007004f,0x00000007,0x00000022,0x00000021,0x00000021,0x00000000,0x00000001,0x000200fe, + 0x00000022,0x00010038,0x00050036,0x00000002,0x00000010,0x00000000,0x0000000d,0x00030037, + 0x00000008,0x0000000e,0x00030037,0x00000008,0x0000000f,0x000200f8,0x00000011,0x0004003d, + 0x00000025,0x00000028,0x00000027,0x0004003d,0x00000007,0x00000029,0x0000000e,0x0004003d, + 0x00000007,0x0000002a,0x0000000f,0x00050051,0x00000006,0x0000002b,0x0000002a,0x00000000, + 0x00050051,0x00000006,0x0000002c,0x0000002a,0x00000001,0x00070050,0x00000020,0x0000002d, + 0x0000002b,0x0000002c,0x0000001f,0x0000001f,0x00040063,0x00000028,0x00000029,0x0000002d, + 0x000100fd,0x00010038,0x00050036,0x00000002,0x00000018,0x00000000,0x00000013,0x00030037, + 0x00000008,0x00000014,0x00030037,0x00000008,0x00000015,0x00030037,0x00000008,0x00000016, + 0x00030037,0x00000012,0x00000017,0x000200f8,0x00000019,0x0004003b,0x00000012,0x0000002e, + 0x00000007,0x0004003b,0x00000012,0x0000002f,0x00000007,0x0004003b,0x00000012,0x0000003a, + 0x00000007,0x0004003b,0x00000045,0x00000046,0x00000007,0x0004003b,0x00000008,0x0000004d, + 0x00000007,0x0004003b,0x00000057,0x00000058,0x00000007,0x0004003b,0x00000012,0x0000005a, + 0x00000007,0x0004003b,0x00000057,0x00000063,0x00000007,0x0004003b,0x00000012,0x00000065, + 0x00000007,0x0004003b,0x00000008,0x0000006d,0x00000007,0x0004003b,0x00000057,0x00000091, + 0x00000007,0x0004003b,0x00000008,0x00000096,0x00000007,0x0004003b,0x00000008,0x00000098, + 0x00000007,0x0003003e,0x0000002e,0x0000001f,0x0003003e,0x0000002f,0x00000030,0x000200f9, + 0x00000031,0x000200f8,0x00000031,0x000400f6,0x00000033,0x00000034,0x00000000,0x000200f9, + 0x00000035,0x000200f8,0x00000035,0x0004003d,0x00000006,0x00000036,0x0000002f,0x000500b1, + 0x00000038,0x00000039,0x00000036,0x00000037,0x000400fa,0x00000039,0x00000032,0x00000033, + 0x000200f8,0x00000032,0x0003003e,0x0000003a,0x00000030,0x000200f9,0x0000003b,0x000200f8, + 0x0000003b,0x000400f6,0x0000003d,0x0000003e,0x00000000,0x000200f9,0x0000003f,0x000200f8, + 0x0000003f,0x0004003d,0x00000006,0x00000040,0x0000003a,0x000500b1,0x00000038,0x00000041, + 0x00000040,0x00000037,0x000400fa,0x00000041,0x0000003c,0x0000003d,0x000200f8,0x0000003c, + 0x0004003d,0x00000006,0x00000047,0x0000002e,0x0004003d,0x00000007,0x00000048,0x00000014, + 0x0004003d,0x00000006,0x00000049,0x0000002f,0x0004003d,0x00000006,0x0000004a,0x0000003a, + 0x00050050,0x00000007,0x0000004b,0x00000049,0x0000004a,0x00050080,0x00000007,0x0000004c, + 0x00000048,0x0000004b,0x0003003e,0x0000004d,0x0000004c,0x00050039,0x00000007,0x0000004e, + 0x0000000b,0x0000004d,0x00050041,0x00000008,0x0000004f,0x00000046,0x00000047,0x0003003e, + 0x0000004f,0x0000004e,0x0004003d,0x00000006,0x00000050,0x0000002e,0x00050080,0x00000006, + 0x00000052,0x00000050,0x00000051,0x0003003e,0x0000002e,0x00000052,0x000200f9,0x0000003e, + 0x000200f8,0x0000003e,0x0004003d,0x00000006,0x00000053,0x0000003a,0x00050080,0x00000006, + 0x00000054,0x00000053,0x00000051,0x0003003e,0x0000003a,0x00000054,0x000200f9,0x0000003b, + 0x000200f8,0x0000003d,0x000200f9,0x00000034,0x000200f8,0x00000034,0x0004003d,0x00000006, + 0x00000055,0x0000002f,0x00050080,0x00000006,0x00000056,0x00000055,0x00000051,0x0003003e, + 0x0000002f,0x00000056,0x000200f9,0x00000031,0x000200f8,0x00000033,0x0003003e,0x00000058, + 0x00000059,0x0003003e,0x0000005a,0x0000001f,0x000200f9,0x0000005b,0x000200f8,0x0000005b, + 0x000400f6,0x0000005d,0x0000005e,0x00000000,0x000200f9,0x0000005f,0x000200f8,0x0000005f, + 0x0004003d,0x00000006,0x00000060,0x0000005a,0x000500b1,0x00000038,0x00000062,0x00000060, + 0x00000061,0x000400fa,0x00000062,0x0000005c,0x0000005d,0x000200f8,0x0000005c,0x0003003e, + 0x00000063,0x00000064,0x0003003e,0x00000065,0x0000001f,0x000200f9,0x00000066,0x000200f8, + 0x00000066,0x000400f6,0x00000068,0x00000069,0x00000000,0x000200f9,0x0000006a,0x000200f8, + 0x0000006a,0x0004003d,0x00000006,0x0000006b,0x00000065,0x000500b1,0x00000038,0x0000006c, + 0x0000006b,0x00000061,0x000400fa,0x0000006c,0x00000067,0x00000068,0x000200f8,0x00000067, + 0x0004003d,0x00000006,0x0000006e,0x0000005a,0x00050041,0x00000008,0x0000006f,0x00000046, + 0x0000006e,0x0004003d,0x00000007,0x00000070,0x0000006f,0x0004003d,0x00000006,0x00000071, + 0x00000065,0x00050041,0x00000008,0x00000072,0x00000046,0x00000071,0x0004003d,0x00000007, + 0x00000073,0x00000072,0x00050082,0x00000007,0x00000074,0x00000070,0x00000073,0x0003003e, + 0x0000006d,0x00000074,0x00050041,0x00000012,0x00000075,0x0000006d,0x00000064,0x0004003d, + 0x00000006,0x00000076,0x00000075,0x00050041,0x00000012,0x00000077,0x0000006d,0x00000064, + 0x0004003d,0x00000006,0x00000078,0x00000077,0x00050084,0x00000006,0x00000079,0x00000076, + 0x00000078,0x0004007c,0x00000042,0x0000007a,0x00000079,0x00050041,0x00000012,0x0000007c, + 0x0000006d,0x0000007b,0x0004003d,0x00000006,0x0000007d,0x0000007c,0x00050041,0x00000012, + 0x0000007e,0x0000006d,0x0000007b,0x0004003d,0x00000006,0x0000007f,0x0000007e,0x00050084, + 0x00000006,0x00000080,0x0000007d,0x0000007f,0x0004007c,0x00000042,0x00000081,0x00000080, + 0x0004003d,0x00000042,0x00000082,0x00000063,0x00050080,0x00000042,0x00000083,0x00000081, + 0x00000082,0x00050080,0x00000042,0x00000084,0x0000007a,0x00000083,0x0003003e,0x00000063, + 0x00000084,0x000200f9,0x00000069,0x000200f8,0x00000069,0x0004003d,0x00000006,0x00000085, + 0x00000065,0x00050080,0x00000006,0x00000086,0x00000085,0x00000051,0x0003003e,0x00000065, + 0x00000086,0x000200f9,0x00000066,0x000200f8,0x00000068,0x0004003d,0x00000042,0x00000087, + 0x00000063,0x000500c4,0x00000042,0x00000089,0x00000087,0x00000088,0x0004003d,0x00000006, + 0x0000008a,0x0000005a,0x0004007c,0x00000042,0x0000008b,0x0000008a,0x000500c5,0x00000042, + 0x0000008c,0x00000089,0x0000008b,0x0004003d,0x00000042,0x0000008d,0x00000058,0x0007000c, + 0x00000042,0x0000008e,0x00000001,0x00000026,0x0000008c,0x0000008d,0x0003003e,0x00000058, + 0x0000008e,0x000200f9,0x0000005e,0x000200f8,0x0000005e,0x0004003d,0x00000006,0x0000008f, + 0x0000005a,0x00050080,0x00000006,0x00000090,0x0000008f,0x00000051,0x0003003e,0x0000005a, + 0x00000090,0x000200f9,0x0000005b,0x000200f8,0x0000005d,0x0004003d,0x00000042,0x00000092, + 0x00000058,0x000500c7,0x00000042,0x00000094,0x00000092,0x00000093,0x0003003e,0x00000091, + 0x00000094,0x0004003d,0x00000042,0x00000095,0x00000091,0x0004003d,0x00000007,0x00000097, + 0x00000014,0x0003003e,0x00000096,0x00000097,0x00050041,0x00000008,0x00000099,0x00000046, + 0x00000095,0x0004003d,0x00000007,0x0000009a,0x00000099,0x0003003e,0x00000098,0x0000009a, + 0x00060039,0x00000002,0x0000009b,0x00000010,0x00000096,0x00000098,0x000100fd,0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_of_generate_scd_histogram_comp_spv.h b/gpu/vk/shaders/fsr3_of_generate_scd_histogram_comp_spv.h new file mode 100644 index 000000000..5eca05873 --- /dev/null +++ b/gpu/vk/shaders/fsr3_of_generate_scd_histogram_comp_spv.h @@ -0,0 +1,243 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_OF_GENERATE_SCD_HISTOGRAM_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x0000012d,0x00000000,0x00020011,0x00000001,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x0009000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000110,0x00000113,0x00000119, + 0x0000011c,0x00060010,0x00000004,0x00000011,0x00000020,0x00000008,0x00000001,0x00030003, + 0x00000002,0x000001c2,0x000b0004,0x455f4c47,0x735f5458,0x6c706d61,0x656c7265,0x745f7373, + 0x75747865,0x665f6572,0x74636e75,0x736e6f69,0x00000000,0x000b0004,0x455f4c47,0x735f5458, + 0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570, + 0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f, + 0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65, + 0x74636572,0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x00000009, + 0x70736944,0x5379616c,0x28657a69,0x00000000,0x00090005,0x0000000f,0x64616f4c,0x6974704f, + 0x466c6163,0x49776f6c,0x7475706e,0x32697628,0x0000003b,0x00040005,0x0000000e,0x50785069, + 0x0000736f,0x000b0005,0x00000016,0x6d6f7441,0x6e496369,0x6d657263,0x53746e65,0x69484443, + 0x676f7473,0x286d6172,0x753b3169,0x00003b31,0x00040005,0x00000014,0x646e4969,0x00007865, + 0x00050005,0x00000015,0x756c6176,0x416f5465,0x00006464,0x00110005,0x00000020,0x656e6547, + 0x65746172,0x6e656353,0x61684365,0x4465676e,0x63657465,0x6e6f6974,0x74736948,0x6172676f, + 0x6976286d,0x69763b33,0x31693b32,0x3269763b,0x3269763b,0x0000003b,0x00050005,0x0000001b, + 0x6f6c4769,0x496c6162,0x00000064,0x00050005,0x0000001c,0x636f4c69,0x64496c61,0x00000000, + 0x00050005,0x0000001d,0x636f4c69,0x6e496c61,0x00786564,0x00050005,0x0000001e,0x6f724769, + 0x64497075,0x00000000,0x00050005,0x0000001f,0x6f724769,0x69537075,0x0000657a,0x00040005, + 0x00000024,0x464f6263,0x0000745f,0x00090006,0x00000024,0x00000000,0x706e4969,0x754c7475, + 0x6552616d,0x756c6f73,0x6e6f6974,0x00000000,0x000a0006,0x00000024,0x00000001,0x74704f75, + 0x6c616369,0x776f6c46,0x61727950,0x4c64696d,0x6c657665,0x00000000,0x000b0006,0x00000024, + 0x00000002,0x74704f75,0x6c616369,0x776f6c46,0x61727950,0x4c64696d,0x6c657665,0x6e756f43, + 0x00000074,0x00060006,0x00000024,0x00000003,0x61724669,0x6e49656d,0x00786564,0x000a0006, + 0x00000024,0x00000004,0x6b636162,0x66667562,0x72547265,0x66736e61,0x75467265,0x6974636e, + 0x00006e6f,0x00070006,0x00000024,0x00000005,0x4d6e696d,0x754c7861,0x616e696d,0x0065636e, + 0x00040005,0x00000026,0x464f6263,0x00000000,0x00080005,0x0000002f,0x706f5f72,0x61636974, + 0x6c665f6c,0x695f776f,0x7475706e,0x00000000,0x000a0005,0x0000003a,0x6f5f7772,0x63697470, + 0x665f6c61,0x5f776f6c,0x5f646373,0x74736968,0x6172676f,0x0000006d,0x00040005,0x00000042, + 0x58766964,0x00000000,0x00040005,0x00000048,0x59766964,0x00000000,0x00030005,0x0000004d, + 0x0000786e,0x00030005,0x00000053,0x0000796e,0x00040005,0x00000058,0x72617473,0x00005874, + 0x00040005,0x0000005c,0x72617473,0x00005974,0x00040005,0x00000060,0x706f7473,0x00000058, + 0x00040005,0x00000064,0x706f7473,0x00000059,0x00060005,0x00000068,0x66667562,0x664f7265, + 0x74657366,0x00000000,0x00030005,0x0000006d,0x00000069,0x00050005,0x00000079,0x42646373, + 0x65666675,0x00000072,0x00040005,0x00000085,0x726f6f63,0x00000064,0x00040005,0x000000a7, + 0x6f6c6f63,0x00000072,0x00040005,0x000000ab,0x61726170,0x0000006d,0x00040005,0x000000b0, + 0x61726170,0x0000006d,0x00040005,0x000000b6,0x61726170,0x0000006d,0x00040005,0x000000bc, + 0x61726170,0x0000006d,0x00070005,0x000000c3,0x61726373,0x696c626d,0x664f676e,0x74657366, + 0x00000000,0x00040005,0x000000e4,0x756c6176,0x00000065,0x00030005,0x000000e5,0x00000069, + 0x00060005,0x000000f7,0x74736968,0x6172676f,0x6174536d,0x00007472,0x00040005,0x00000106, + 0x61726170,0x0000006d,0x00040005,0x00000107,0x61726170,0x0000006d,0x00050005,0x0000010a, + 0x6f724769,0x69537075,0x0000657a,0x00080005,0x00000110,0x475f6c67,0x61626f6c,0x766e496c, + 0x7461636f,0x496e6f69,0x00000044,0x00080005,0x00000113,0x4c5f6c67,0x6c61636f,0x6f766e49, + 0x69746163,0x44496e6f,0x00000000,0x00080005,0x00000119,0x4c5f6c67,0x6c61636f,0x6f766e49, + 0x69746163,0x6e496e6f,0x00786564,0x00060005,0x0000011c,0x575f6c67,0x476b726f,0x70756f72, + 0x00004449,0x00040005,0x00000120,0x61726170,0x0000006d,0x00040005,0x00000121,0x61726170, + 0x0000006d,0x00040005,0x00000122,0x61726170,0x0000006d,0x00040005,0x00000123,0x61726170, + 0x0000006d,0x00040005,0x00000124,0x61726170,0x0000006d,0x00030047,0x00000024,0x00000002, + 0x00050048,0x00000024,0x00000000,0x00000023,0x00000000,0x00050048,0x00000024,0x00000001, + 0x00000023,0x00000008,0x00050048,0x00000024,0x00000002,0x00000023,0x0000000c,0x00050048, + 0x00000024,0x00000003,0x00000023,0x00000010,0x00050048,0x00000024,0x00000004,0x00000023, + 0x00000014,0x00050048,0x00000024,0x00000005,0x00000023,0x00000018,0x00040047,0x00000026, + 0x00000021,0x00000002,0x00040047,0x00000026,0x00000022,0x00000000,0x00040047,0x0000002f, + 0x00000021,0x00000000,0x00040047,0x0000002f,0x00000022,0x00000000,0x00040047,0x0000003a, + 0x00000021,0x00000001,0x00040047,0x0000003a,0x00000022,0x00000000,0x00040047,0x00000110, + 0x0000000b,0x0000001c,0x00040047,0x00000113,0x0000000b,0x0000001b,0x00040047,0x00000119, + 0x0000000b,0x0000001d,0x00040047,0x0000011c,0x0000000b,0x0000001a,0x00040047,0x0000012c, + 0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015, + 0x00000006,0x00000020,0x00000001,0x00040017,0x00000007,0x00000006,0x00000002,0x00030021, + 0x00000008,0x00000007,0x00040020,0x0000000b,0x00000007,0x00000007,0x00040015,0x0000000c, + 0x00000020,0x00000000,0x00040021,0x0000000d,0x0000000c,0x0000000b,0x00040020,0x00000011, + 0x00000007,0x00000006,0x00040020,0x00000012,0x00000007,0x0000000c,0x00050021,0x00000013, + 0x00000002,0x00000011,0x00000012,0x00040017,0x00000018,0x00000006,0x00000003,0x00040020, + 0x00000019,0x00000007,0x00000018,0x00080021,0x0000001a,0x00000002,0x00000019,0x0000000b, + 0x00000011,0x0000000b,0x0000000b,0x00030016,0x00000022,0x00000020,0x00040017,0x00000023, + 0x00000022,0x00000002,0x0008001e,0x00000024,0x00000007,0x0000000c,0x0000000c,0x0000000c, + 0x0000000c,0x00000023,0x00040020,0x00000025,0x00000002,0x00000024,0x0004003b,0x00000025, + 0x00000026,0x00000002,0x0004002b,0x00000006,0x00000027,0x00000000,0x00040020,0x00000028, + 0x00000002,0x00000007,0x00090019,0x0000002d,0x0000000c,0x00000001,0x00000000,0x00000000, + 0x00000000,0x00000001,0x00000000,0x00040020,0x0000002e,0x00000000,0x0000002d,0x0004003b, + 0x0000002e,0x0000002f,0x00000000,0x00040017,0x00000032,0x0000000c,0x00000004,0x0004002b, + 0x0000000c,0x00000034,0x00000000,0x00090019,0x00000038,0x0000000c,0x00000001,0x00000000, + 0x00000000,0x00000000,0x00000002,0x00000021,0x00040020,0x00000039,0x00000000,0x00000038, + 0x0004003b,0x00000039,0x0000003a,0x00000000,0x00040020,0x0000003e,0x0000000b,0x0000000c, + 0x0004002b,0x0000000c,0x00000040,0x00000001,0x0004002b,0x0000000c,0x00000046,0x00000003, + 0x0004002b,0x0000000c,0x0000004e,0x00000002,0x0004002b,0x00000006,0x0000006a,0x0000000a, + 0x00020014,0x00000074,0x0004002b,0x0000000c,0x00000076,0x00000a00,0x0004001c,0x00000077, + 0x0000000c,0x00000076,0x00040020,0x00000078,0x00000004,0x00000077,0x0004003b,0x00000078, + 0x00000079,0x00000004,0x00040020,0x0000007e,0x00000004,0x0000000c,0x0004002b,0x00000006, + 0x00000081,0x00000001,0x0004002b,0x0000000c,0x00000083,0x00000d48,0x0004002b,0x0000000c, + 0x00000084,0x00000108,0x0004002b,0x00000006,0x00000087,0x00000004,0x00040020,0x000000a6, + 0x00000007,0x00000032,0x0005002c,0x00000007,0x000000a9,0x00000027,0x00000027,0x0005002c, + 0x00000007,0x000000ae,0x00000081,0x00000027,0x0004002b,0x00000006,0x000000b3,0x00000002, + 0x0005002c,0x00000007,0x000000b4,0x000000b3,0x00000027,0x0004002b,0x00000006,0x000000b9, + 0x00000003,0x0005002c,0x00000007,0x000000ba,0x000000b9,0x00000027,0x0004002b,0x0000000c, + 0x000000bf,0x0000000a,0x0004002b,0x00000006,0x000000df,0x00000080,0x0004002b,0x00000006, + 0x0000010b,0x00000020,0x0004002b,0x00000006,0x0000010c,0x00000008,0x0005002c,0x00000007, + 0x0000010d,0x0000010b,0x0000010c,0x00040017,0x0000010e,0x0000000c,0x00000003,0x00040020, + 0x0000010f,0x00000001,0x0000010e,0x0004003b,0x0000010f,0x00000110,0x00000001,0x0004003b, + 0x0000010f,0x00000113,0x00000001,0x00040017,0x00000114,0x0000000c,0x00000002,0x00040020, + 0x00000118,0x00000001,0x0000000c,0x0004003b,0x00000118,0x00000119,0x00000001,0x0004003b, + 0x0000010f,0x0000011c,0x00000001,0x0004002b,0x00000022,0x00000127,0x387fda40,0x0004002b, + 0x00000022,0x00000128,0x477fe000,0x0004002b,0x00000022,0x00000129,0x37801002,0x0004002b, + 0x0000000c,0x0000012a,0x00000020,0x0004002b,0x0000000c,0x0000012b,0x00000008,0x0006002c, + 0x0000010e,0x0000012c,0x0000012a,0x0000012b,0x00000040,0x00050036,0x00000002,0x00000004, + 0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x0000000b,0x0000010a,0x00000007, + 0x0004003b,0x00000019,0x00000120,0x00000007,0x0004003b,0x0000000b,0x00000121,0x00000007, + 0x0004003b,0x00000011,0x00000122,0x00000007,0x0004003b,0x0000000b,0x00000123,0x00000007, + 0x0004003b,0x0000000b,0x00000124,0x00000007,0x0003003e,0x0000010a,0x0000010d,0x0004003d, + 0x0000010e,0x00000111,0x00000110,0x0004007c,0x00000018,0x00000112,0x00000111,0x0004003d, + 0x0000010e,0x00000115,0x00000113,0x0007004f,0x00000114,0x00000116,0x00000115,0x00000115, + 0x00000000,0x00000001,0x0004007c,0x00000007,0x00000117,0x00000116,0x0004003d,0x0000000c, + 0x0000011a,0x00000119,0x0004007c,0x00000006,0x0000011b,0x0000011a,0x0004003d,0x0000010e, + 0x0000011d,0x0000011c,0x0007004f,0x00000114,0x0000011e,0x0000011d,0x0000011d,0x00000000, + 0x00000001,0x0004007c,0x00000007,0x0000011f,0x0000011e,0x0003003e,0x00000120,0x00000112, + 0x0003003e,0x00000121,0x00000117,0x0003003e,0x00000122,0x0000011b,0x0003003e,0x00000123, + 0x0000011f,0x0004003d,0x00000007,0x00000125,0x0000010a,0x0003003e,0x00000124,0x00000125, + 0x00090039,0x00000002,0x00000126,0x00000020,0x00000120,0x00000121,0x00000122,0x00000123, + 0x00000124,0x000100fd,0x00010038,0x00050036,0x00000007,0x00000009,0x00000000,0x00000008, + 0x000200f8,0x0000000a,0x00050041,0x00000028,0x00000029,0x00000026,0x00000027,0x0004003d, + 0x00000007,0x0000002a,0x00000029,0x000200fe,0x0000002a,0x00010038,0x00050036,0x0000000c, + 0x0000000f,0x00000000,0x0000000d,0x00030037,0x0000000b,0x0000000e,0x000200f8,0x00000010, + 0x0004003d,0x0000002d,0x00000030,0x0000002f,0x0004003d,0x00000007,0x00000031,0x0000000e, + 0x0007005f,0x00000032,0x00000033,0x00000030,0x00000031,0x00000002,0x00000027,0x00050051, + 0x0000000c,0x00000035,0x00000033,0x00000000,0x000200fe,0x00000035,0x00010038,0x00050036, + 0x00000002,0x00000016,0x00000000,0x00000013,0x00030037,0x00000011,0x00000014,0x00030037, + 0x00000012,0x00000015,0x000200f8,0x00000017,0x0004003d,0x00000006,0x0000003b,0x00000014, + 0x00050050,0x00000007,0x0000003c,0x0000003b,0x00000027,0x0004003d,0x0000000c,0x0000003d, + 0x00000015,0x0006003c,0x0000003e,0x0000003f,0x0000003a,0x0000003c,0x00000034,0x000700ea, + 0x0000000c,0x00000041,0x0000003f,0x00000040,0x00000034,0x0000003d,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x00000020,0x00000000,0x0000001a,0x00030037,0x00000019,0x0000001b, + 0x00030037,0x0000000b,0x0000001c,0x00030037,0x00000011,0x0000001d,0x00030037,0x0000000b, + 0x0000001e,0x00030037,0x0000000b,0x0000001f,0x000200f8,0x00000021,0x0004003b,0x00000012, + 0x00000042,0x00000007,0x0004003b,0x00000012,0x00000048,0x00000007,0x0004003b,0x00000012, + 0x0000004d,0x00000007,0x0004003b,0x00000012,0x00000053,0x00000007,0x0004003b,0x00000012, + 0x00000058,0x00000007,0x0004003b,0x00000012,0x0000005c,0x00000007,0x0004003b,0x00000012, + 0x00000060,0x00000007,0x0004003b,0x00000012,0x00000064,0x00000007,0x0004003b,0x00000012, + 0x00000068,0x00000007,0x0004003b,0x00000011,0x0000006d,0x00000007,0x0004003b,0x0000000b, + 0x00000085,0x00000007,0x0004003b,0x000000a6,0x000000a7,0x00000007,0x0004003b,0x0000000b, + 0x000000ab,0x00000007,0x0004003b,0x0000000b,0x000000b0,0x00000007,0x0004003b,0x0000000b, + 0x000000b6,0x00000007,0x0004003b,0x0000000b,0x000000bc,0x00000007,0x0004003b,0x00000012, + 0x000000c3,0x00000007,0x0004003b,0x00000012,0x000000e4,0x00000007,0x0004003b,0x00000011, + 0x000000e5,0x00000007,0x0004003b,0x00000012,0x000000f7,0x00000007,0x0004003b,0x00000011, + 0x00000106,0x00000007,0x0004003b,0x00000012,0x00000107,0x00000007,0x00040039,0x00000007, + 0x00000043,0x00000009,0x00050051,0x00000006,0x00000044,0x00000043,0x00000000,0x0004007c, + 0x0000000c,0x00000045,0x00000044,0x00050086,0x0000000c,0x00000047,0x00000045,0x00000046, + 0x0003003e,0x00000042,0x00000047,0x00040039,0x00000007,0x00000049,0x00000009,0x00050051, + 0x00000006,0x0000004a,0x00000049,0x00000001,0x0004007c,0x0000000c,0x0000004b,0x0000004a, + 0x00050086,0x0000000c,0x0000004c,0x0000004b,0x00000046,0x0003003e,0x00000048,0x0000004c, + 0x00050041,0x00000011,0x0000004f,0x0000001b,0x0000004e,0x0004003d,0x00000006,0x00000050, + 0x0000004f,0x0004007c,0x0000000c,0x00000051,0x00000050,0x00050089,0x0000000c,0x00000052, + 0x00000051,0x00000046,0x0003003e,0x0000004d,0x00000052,0x00050041,0x00000011,0x00000054, + 0x0000001b,0x0000004e,0x0004003d,0x00000006,0x00000055,0x00000054,0x0004007c,0x0000000c, + 0x00000056,0x00000055,0x00050086,0x0000000c,0x00000057,0x00000056,0x00000046,0x0003003e, + 0x00000053,0x00000057,0x0004003d,0x0000000c,0x00000059,0x00000042,0x0004003d,0x0000000c, + 0x0000005a,0x0000004d,0x00050084,0x0000000c,0x0000005b,0x00000059,0x0000005a,0x0003003e, + 0x00000058,0x0000005b,0x0004003d,0x0000000c,0x0000005d,0x00000048,0x0004003d,0x0000000c, + 0x0000005e,0x00000053,0x00050084,0x0000000c,0x0000005f,0x0000005d,0x0000005e,0x0003003e, + 0x0000005c,0x0000005f,0x0004003d,0x0000000c,0x00000061,0x00000058,0x0004003d,0x0000000c, + 0x00000062,0x00000042,0x00050080,0x0000000c,0x00000063,0x00000061,0x00000062,0x0003003e, + 0x00000060,0x00000063,0x0004003d,0x0000000c,0x00000065,0x0000005c,0x0004003d,0x0000000c, + 0x00000066,0x00000048,0x00050080,0x0000000c,0x00000067,0x00000065,0x00000066,0x0003003e, + 0x00000064,0x00000067,0x0004003d,0x00000006,0x00000069,0x0000001d,0x00050084,0x00000006, + 0x0000006b,0x00000069,0x0000006a,0x0004007c,0x0000000c,0x0000006c,0x0000006b,0x0003003e, + 0x00000068,0x0000006c,0x0003003e,0x0000006d,0x00000027,0x000200f9,0x0000006e,0x000200f8, + 0x0000006e,0x000400f6,0x00000070,0x00000071,0x00000000,0x000200f9,0x00000072,0x000200f8, + 0x00000072,0x0004003d,0x00000006,0x00000073,0x0000006d,0x000500b1,0x00000074,0x00000075, + 0x00000073,0x0000006a,0x000400fa,0x00000075,0x0000006f,0x00000070,0x000200f8,0x0000006f, + 0x0004003d,0x0000000c,0x0000007a,0x00000068,0x0004003d,0x00000006,0x0000007b,0x0000006d, + 0x0004007c,0x0000000c,0x0000007c,0x0000007b,0x00050080,0x0000000c,0x0000007d,0x0000007a, + 0x0000007c,0x00050041,0x0000007e,0x0000007f,0x00000079,0x0000007d,0x0003003e,0x0000007f, + 0x00000034,0x000200f9,0x00000071,0x000200f8,0x00000071,0x0004003d,0x00000006,0x00000080, + 0x0000006d,0x00050080,0x00000006,0x00000082,0x00000080,0x00000081,0x0003003e,0x0000006d, + 0x00000082,0x000200f9,0x0000006e,0x000200f8,0x00000070,0x000300e1,0x0000004e,0x00000083, + 0x000400e0,0x0000004e,0x0000004e,0x00000084,0x0004003d,0x0000000c,0x00000086,0x00000058, + 0x00050041,0x00000011,0x00000088,0x0000001b,0x00000034,0x0004003d,0x00000006,0x00000089, + 0x00000088,0x00050084,0x00000006,0x0000008a,0x00000087,0x00000089,0x0004007c,0x0000000c, + 0x0000008b,0x0000008a,0x00050080,0x0000000c,0x0000008c,0x00000086,0x0000008b,0x0004007c, + 0x00000006,0x0000008d,0x0000008c,0x0004003d,0x0000000c,0x0000008e,0x0000005c,0x00050041, + 0x00000011,0x0000008f,0x0000001b,0x00000040,0x0004003d,0x00000006,0x00000090,0x0000008f, + 0x0004007c,0x0000000c,0x00000091,0x00000090,0x00050080,0x0000000c,0x00000092,0x0000008e, + 0x00000091,0x0004007c,0x00000006,0x00000093,0x00000092,0x00050050,0x00000007,0x00000094, + 0x0000008d,0x00000093,0x0003003e,0x00000085,0x00000094,0x00050041,0x00000011,0x00000095, + 0x00000085,0x00000034,0x0004003d,0x00000006,0x00000096,0x00000095,0x0004007c,0x0000000c, + 0x00000097,0x00000096,0x0004003d,0x0000000c,0x00000098,0x00000060,0x000500b0,0x00000074, + 0x00000099,0x00000097,0x00000098,0x000300f7,0x0000009b,0x00000000,0x000400fa,0x00000099, + 0x0000009a,0x0000009b,0x000200f8,0x0000009a,0x000200f9,0x0000009c,0x000200f8,0x0000009c, + 0x000400f6,0x0000009e,0x0000009f,0x00000000,0x000200f9,0x000000a0,0x000200f8,0x000000a0, + 0x00050041,0x00000011,0x000000a1,0x00000085,0x00000040,0x0004003d,0x00000006,0x000000a2, + 0x000000a1,0x0004007c,0x0000000c,0x000000a3,0x000000a2,0x0004003d,0x0000000c,0x000000a4, + 0x00000064,0x000500b0,0x00000074,0x000000a5,0x000000a3,0x000000a4,0x000400fa,0x000000a5, + 0x0000009d,0x0000009e,0x000200f8,0x0000009d,0x0004003d,0x00000007,0x000000a8,0x00000085, + 0x00050080,0x00000007,0x000000aa,0x000000a8,0x000000a9,0x0003003e,0x000000ab,0x000000aa, + 0x00050039,0x0000000c,0x000000ac,0x0000000f,0x000000ab,0x0004003d,0x00000007,0x000000ad, + 0x00000085,0x00050080,0x00000007,0x000000af,0x000000ad,0x000000ae,0x0003003e,0x000000b0, + 0x000000af,0x00050039,0x0000000c,0x000000b1,0x0000000f,0x000000b0,0x0004003d,0x00000007, + 0x000000b2,0x00000085,0x00050080,0x00000007,0x000000b5,0x000000b2,0x000000b4,0x0003003e, + 0x000000b6,0x000000b5,0x00050039,0x0000000c,0x000000b7,0x0000000f,0x000000b6,0x0004003d, + 0x00000007,0x000000b8,0x00000085,0x00050080,0x00000007,0x000000bb,0x000000b8,0x000000ba, + 0x0003003e,0x000000bc,0x000000bb,0x00050039,0x0000000c,0x000000bd,0x0000000f,0x000000bc, + 0x00070050,0x00000032,0x000000be,0x000000ac,0x000000b1,0x000000b7,0x000000bd,0x0003003e, + 0x000000a7,0x000000be,0x0004003d,0x00000032,0x000000c0,0x000000a7,0x00070050,0x00000032, + 0x000000c1,0x000000bf,0x000000bf,0x000000bf,0x000000bf,0x00050084,0x00000032,0x000000c2, + 0x000000c0,0x000000c1,0x0003003e,0x000000a7,0x000000c2,0x0004003d,0x00000006,0x000000c4, + 0x0000001d,0x0005008b,0x00000006,0x000000c5,0x000000c4,0x0000006a,0x0004007c,0x0000000c, + 0x000000c6,0x000000c5,0x0003003e,0x000000c3,0x000000c6,0x00050041,0x00000012,0x000000c7, + 0x000000a7,0x00000034,0x0004003d,0x0000000c,0x000000c8,0x000000c7,0x0004003d,0x0000000c, + 0x000000c9,0x000000c3,0x00050080,0x0000000c,0x000000ca,0x000000c8,0x000000c9,0x00050041, + 0x0000007e,0x000000cb,0x00000079,0x000000ca,0x000700ea,0x0000000c,0x000000cc,0x000000cb, + 0x00000040,0x00000034,0x00000040,0x00050041,0x00000012,0x000000cd,0x000000a7,0x00000040, + 0x0004003d,0x0000000c,0x000000ce,0x000000cd,0x0004003d,0x0000000c,0x000000cf,0x000000c3, + 0x00050080,0x0000000c,0x000000d0,0x000000ce,0x000000cf,0x00050041,0x0000007e,0x000000d1, + 0x00000079,0x000000d0,0x000700ea,0x0000000c,0x000000d2,0x000000d1,0x00000040,0x00000034, + 0x00000040,0x00050041,0x00000012,0x000000d3,0x000000a7,0x0000004e,0x0004003d,0x0000000c, + 0x000000d4,0x000000d3,0x0004003d,0x0000000c,0x000000d5,0x000000c3,0x00050080,0x0000000c, + 0x000000d6,0x000000d4,0x000000d5,0x00050041,0x0000007e,0x000000d7,0x00000079,0x000000d6, + 0x000700ea,0x0000000c,0x000000d8,0x000000d7,0x00000040,0x00000034,0x00000040,0x00050041, + 0x00000012,0x000000d9,0x000000a7,0x00000046,0x0004003d,0x0000000c,0x000000da,0x000000d9, + 0x0004003d,0x0000000c,0x000000db,0x000000c3,0x00050080,0x0000000c,0x000000dc,0x000000da, + 0x000000db,0x00050041,0x0000007e,0x000000dd,0x00000079,0x000000dc,0x000700ea,0x0000000c, + 0x000000de,0x000000dd,0x00000040,0x00000034,0x00000040,0x000200f9,0x0000009f,0x000200f8, + 0x0000009f,0x00050041,0x00000011,0x000000e0,0x00000085,0x00000040,0x0004003d,0x00000006, + 0x000000e1,0x000000e0,0x00050080,0x00000006,0x000000e2,0x000000e1,0x000000df,0x00050041, + 0x00000011,0x000000e3,0x00000085,0x00000040,0x0003003e,0x000000e3,0x000000e2,0x000200f9, + 0x0000009c,0x000200f8,0x0000009e,0x000200f9,0x0000009b,0x000200f8,0x0000009b,0x000300e1, + 0x0000004e,0x00000083,0x000400e0,0x0000004e,0x0000004e,0x00000084,0x0003003e,0x000000e4, + 0x00000034,0x0003003e,0x000000e5,0x00000027,0x000200f9,0x000000e6,0x000200f8,0x000000e6, + 0x000400f6,0x000000e8,0x000000e9,0x00000000,0x000200f9,0x000000ea,0x000200f8,0x000000ea, + 0x0004003d,0x00000006,0x000000eb,0x000000e5,0x000500b1,0x00000074,0x000000ec,0x000000eb, + 0x0000006a,0x000400fa,0x000000ec,0x000000e7,0x000000e8,0x000200f8,0x000000e7,0x0004003d, + 0x0000000c,0x000000ed,0x00000068,0x0004003d,0x00000006,0x000000ee,0x000000e5,0x0004007c, + 0x0000000c,0x000000ef,0x000000ee,0x00050080,0x0000000c,0x000000f0,0x000000ed,0x000000ef, + 0x00050041,0x0000007e,0x000000f1,0x00000079,0x000000f0,0x0004003d,0x0000000c,0x000000f2, + 0x000000f1,0x0004003d,0x0000000c,0x000000f3,0x000000e4,0x00050080,0x0000000c,0x000000f4, + 0x000000f3,0x000000f2,0x0003003e,0x000000e4,0x000000f4,0x000200f9,0x000000e9,0x000200f8, + 0x000000e9,0x0004003d,0x00000006,0x000000f5,0x000000e5,0x00050080,0x00000006,0x000000f6, + 0x000000f5,0x00000081,0x0003003e,0x000000e5,0x000000f6,0x000200f9,0x000000e6,0x000200f8, + 0x000000e8,0x00050041,0x00000011,0x000000f8,0x0000001f,0x00000034,0x0004003d,0x00000006, + 0x000000f9,0x000000f8,0x00050041,0x00000011,0x000000fa,0x0000001f,0x00000040,0x0004003d, + 0x00000006,0x000000fb,0x000000fa,0x00050084,0x00000006,0x000000fc,0x000000f9,0x000000fb, + 0x00050041,0x00000011,0x000000fd,0x0000001b,0x0000004e,0x0004003d,0x00000006,0x000000fe, + 0x000000fd,0x00050084,0x00000006,0x000000ff,0x000000fc,0x000000fe,0x0004007c,0x0000000c, + 0x00000100,0x000000ff,0x0003003e,0x000000f7,0x00000100,0x0004003d,0x0000000c,0x00000101, + 0x000000f7,0x0004003d,0x00000006,0x00000102,0x0000001d,0x0004007c,0x0000000c,0x00000103, + 0x00000102,0x00050080,0x0000000c,0x00000104,0x00000101,0x00000103,0x0004007c,0x00000006, + 0x00000105,0x00000104,0x0003003e,0x00000106,0x00000105,0x0004003d,0x0000000c,0x00000108, + 0x000000e4,0x0003003e,0x00000107,0x00000108,0x00060039,0x00000002,0x00000109,0x00000016, + 0x00000106,0x00000107,0x000100fd,0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_of_luminance_pyramid_comp_spv.h b/gpu/vk/shaders/fsr3_of_luminance_pyramid_comp_spv.h new file mode 100644 index 000000000..cc578f6d9 --- /dev/null +++ b/gpu/vk/shaders/fsr3_of_luminance_pyramid_comp_spv.h @@ -0,0 +1,1196 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_OF_LUMINANCE_PYRAMID_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x000005b0,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000031,0x00020011,0x0000003d,0x00020011,0x00000044,0x0006000b,0x00000001,0x4c534c47, + 0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,0x0007000f,0x00000005, + 0x00000004,0x6e69616d,0x00000000,0x0000059d,0x000005a2,0x00060010,0x00000004,0x00000011, + 0x00000100,0x00000001,0x00000001,0x00030003,0x00000002,0x000001c2,0x000b0004,0x455f4c47, + 0x735f5458,0x6c706d61,0x656c7265,0x745f7373,0x75747865,0x665f6572,0x74636e75,0x736e6f69, + 0x00000000,0x000b0004,0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469, + 0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45, + 0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47, + 0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669,0x00090004,0x4b5f4c47, + 0x735f5248,0x65646168,0x75735f72,0x6f726762,0x625f7075,0x63697361,0x00000000,0x00080004, + 0x4b5f4c47,0x735f5248,0x65646168,0x75735f72,0x6f726762,0x715f7075,0x00646175,0x00040005, + 0x00000004,0x6e69616d,0x00000000,0x000a0005,0x0000000c,0x42786666,0x69667469,0x45646c65, + 0x61727478,0x75287463,0x31753b31,0x3b31753b,0x00000000,0x00030005,0x00000009,0x00637273, + 0x00030005,0x0000000a,0x0066666f,0x00040005,0x0000000b,0x73746962,0x00000000,0x000a0005, + 0x00000011,0x42786666,0x69667469,0x49646c65,0x7265736e,0x73614d74,0x3175286b,0x3b31753b, + 0x003b3175,0x00030005,0x0000000e,0x00637273,0x00030005,0x0000000f,0x00736e69,0x00040005, + 0x00000010,0x73746962,0x00000000,0x000a0005,0x00000016,0x52786666,0x70616d65,0x57726f46, + 0x52657661,0x63756465,0x6e6f6974,0x3b317528,0x00000000,0x00030005,0x00000015,0x00000061, + 0x00060005,0x00000019,0x576d754e,0x476b726f,0x70756f72,0x00002873,0x00090005,0x00000020, + 0x64616f4c,0x704f7752,0x61636974,0x6f6c466c,0x706e4977,0x76287475,0x003b3269,0x00040005, + 0x0000001f,0x50785069,0x0000736f,0x00090005,0x00000028,0x5f445053,0x4d746553,0x616d7069, + 0x69762870,0x31753b32,0x3b31663b,0x00000000,0x00040005,0x00000025,0x50785069,0x0000736f, + 0x00040005,0x00000026,0x65646e69,0x00000078,0x00040005,0x00000027,0x756c6176,0x00000065, + 0x00080005,0x0000002a,0x5f445053,0x65736552,0x6f744174,0x4363696d,0x746e756f,0x00287265, + 0x00090005,0x00000032,0x4c647053,0x5364616f,0x6372756f,0x616d4965,0x76286567,0x753b3266, + 0x00003b31,0x00030005,0x00000030,0x00786574,0x00040005,0x00000031,0x63696c73,0x00000065, + 0x00060005,0x00000037,0x4c647053,0x2864616f,0x3b326976,0x003b3175,0x00030005,0x00000035, + 0x00786574,0x00040005,0x00000036,0x63696c73,0x00000065,0x00080005,0x0000003f,0x53647053, + 0x65726f74,0x32697628,0x3466763b,0x3b31753b,0x003b3175,0x00030005,0x0000003b,0x00786970, + 0x00050005,0x0000003c,0x5674756f,0x65756c61,0x00000000,0x00040005,0x0000003d,0x65646e69, + 0x00000078,0x00040005,0x0000003e,0x63696c73,0x00000065,0x000a0005,0x00000043,0x49647053, + 0x6572636e,0x41657361,0x696d6f74,0x756f4363,0x7265746e,0x3b317528,0x00000000,0x00040005, + 0x00000042,0x63696c73,0x00000065,0x00080005,0x00000045,0x47647053,0x74417465,0x63696d6f, + 0x6e756f43,0x28726574,0x00000000,0x00090005,0x00000048,0x52647053,0x74657365,0x6d6f7441, + 0x6f436369,0x65746e75,0x31752872,0x0000003b,0x00040005,0x00000047,0x63696c73,0x00000065, + 0x00090005,0x0000004d,0x4c647053,0x4964616f,0x7265746e,0x6964656d,0x28657461,0x753b3175, + 0x00003b31,0x00030005,0x0000004b,0x00000078,0x00030005,0x0000004c,0x00000079,0x000a0005, + 0x00000053,0x53647053,0x65726f74,0x65746e49,0x64656d72,0x65746169,0x3b317528,0x763b3175, + 0x003b3466,0x00030005,0x00000050,0x00000078,0x00030005,0x00000051,0x00000079,0x00040005, + 0x00000052,0x756c6176,0x00000065,0x00090005,0x0000005a,0x52647053,0x63756465,0x76283465, + 0x763b3466,0x763b3466,0x763b3466,0x003b3466,0x00030005,0x00000056,0x00003076,0x00030005, + 0x00000057,0x00003176,0x00030005,0x00000058,0x00003276,0x00030005,0x00000059,0x00003376, + 0x000a0005,0x0000005c,0x53786666,0x6f576470,0x72676b72,0x5370756f,0x66667568,0x6142656c, + 0x65697272,0x00002872,0x00090005,0x00000063,0x45647053,0x57746978,0x676b726f,0x70756f72, + 0x3b317528,0x753b3175,0x00003b31,0x00060005,0x00000060,0x576d756e,0x476b726f,0x70756f72, + 0x00000073,0x00080005,0x00000061,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e, + 0x00000000,0x00040005,0x00000062,0x63696c73,0x00000065,0x00070005,0x00000067,0x52647053, + 0x63756465,0x61755165,0x66762864,0x00003b34,0x00030005,0x00000066,0x00000076,0x000b0005, + 0x00000070,0x52647053,0x63756465,0x616f4c65,0x76283464,0x763b3275,0x763b3275,0x763b3275, + 0x753b3275,0x00003b31,0x00030005,0x0000006b,0x00003069,0x00030005,0x0000006c,0x00003169, + 0x00030005,0x0000006d,0x00003269,0x00030005,0x0000006e,0x00003369,0x00040005,0x0000006f, + 0x63696c73,0x00000065,0x00080005,0x00000075,0x52647053,0x63756465,0x616f4c65,0x76283464, + 0x753b3275,0x00003b31,0x00040005,0x00000073,0x65736162,0x00000000,0x00040005,0x00000074, + 0x63696c73,0x00000065,0x000e0005,0x0000007c,0x52647053,0x63756465,0x616f4c65,0x756f5364, + 0x49656372,0x6567616d,0x75762834,0x75763b32,0x75763b32,0x75763b32,0x31753b32,0x0000003b, + 0x00030005,0x00000077,0x00003069,0x00030005,0x00000078,0x00003169,0x00030005,0x00000079, + 0x00003269,0x00030005,0x0000007a,0x00003369,0x00040005,0x0000007b,0x63696c73,0x00000065, + 0x000b0005,0x00000080,0x52647053,0x63756465,0x616f4c65,0x756f5364,0x49656372,0x6567616d, + 0x32757628,0x3b31753b,0x00000000,0x00040005,0x0000007e,0x65736162,0x00000000,0x00040005, + 0x0000007f,0x63696c73,0x00000065,0x00100005,0x00000089,0x44647053,0x736e776f,0x6c706d61, + 0x70694d65,0x5f305f73,0x6e495f31,0x6e697274,0x73636973,0x3b317528,0x763b3175,0x753b3275, + 0x31753b31,0x3b31753b,0x00000000,0x00030005,0x00000083,0x00000078,0x00030005,0x00000084, + 0x00000079,0x00050005,0x00000085,0x6b726f77,0x756f7247,0x00444970,0x00080005,0x00000086, + 0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00030005,0x00000087, + 0x0070696d,0x00040005,0x00000088,0x63696c73,0x00000065,0x000d0005,0x00000091,0x44647053, + 0x736e776f,0x6c706d61,0x70694d65,0x5f305f73,0x31752831,0x3b31753b,0x3b327576,0x753b3175, + 0x31753b31,0x0000003b,0x00030005,0x0000008b,0x00000078,0x00030005,0x0000008c,0x00000079, + 0x00050005,0x0000008d,0x6b726f77,0x756f7247,0x00444970,0x00080005,0x0000008e,0x61636f6c, + 0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00030005,0x0000008f,0x0070696d, + 0x00040005,0x00000090,0x63696c73,0x00000065,0x000c0005,0x00000099,0x44647053,0x736e776f, + 0x6c706d61,0x70694d65,0x7528325f,0x31753b31,0x3275763b,0x3b31753b,0x753b3175,0x00003b31, + 0x00030005,0x00000093,0x00000078,0x00030005,0x00000094,0x00000079,0x00050005,0x00000095, + 0x6b726f77,0x756f7247,0x00444970,0x00080005,0x00000096,0x61636f6c,0x766e496c,0x7461636f, + 0x496e6f69,0x7865646e,0x00000000,0x00030005,0x00000097,0x0070696d,0x00040005,0x00000098, + 0x63696c73,0x00000065,0x000c0005,0x000000a1,0x44647053,0x736e776f,0x6c706d61,0x70694d65, + 0x7528335f,0x31753b31,0x3275763b,0x3b31753b,0x753b3175,0x00003b31,0x00030005,0x0000009b, + 0x00000078,0x00030005,0x0000009c,0x00000079,0x00050005,0x0000009d,0x6b726f77,0x756f7247, + 0x00444970,0x00080005,0x0000009e,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e, + 0x00000000,0x00030005,0x0000009f,0x0070696d,0x00040005,0x000000a0,0x63696c73,0x00000065, + 0x000c0005,0x000000a9,0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x7528345f,0x31753b31, + 0x3275763b,0x3b31753b,0x753b3175,0x00003b31,0x00030005,0x000000a3,0x00000078,0x00030005, + 0x000000a4,0x00000079,0x00050005,0x000000a5,0x6b726f77,0x756f7247,0x00444970,0x00080005, + 0x000000a6,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00030005, + 0x000000a7,0x0070696d,0x00040005,0x000000a8,0x63696c73,0x00000065,0x000b0005,0x000000b0, + 0x44647053,0x736e776f,0x6c706d61,0x70694d65,0x7628355f,0x753b3275,0x31753b31,0x3b31753b, + 0x00000000,0x00050005,0x000000ac,0x6b726f77,0x756f7247,0x00444970,0x00080005,0x000000ad, + 0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00030005,0x000000ae, + 0x0070696d,0x00040005,0x000000af,0x63696c73,0x00000065,0x000b0005,0x000000b7,0x44647053, + 0x736e776f,0x6c706d61,0x70694d65,0x5f365f73,0x31752837,0x3b31753b,0x753b3175,0x00003b31, + 0x00030005,0x000000b3,0x00000078,0x00030005,0x000000b4,0x00000079,0x00040005,0x000000b5, + 0x7370696d,0x00000000,0x00040005,0x000000b6,0x63696c73,0x00000065,0x000e0005,0x000000c1, + 0x44647053,0x736e776f,0x6c706d61,0x78654e65,0x756f4674,0x31752872,0x3b31753b,0x3b327576, + 0x753b3175,0x31753b31,0x3b31753b,0x00000000,0x00030005,0x000000ba,0x00000078,0x00030005, + 0x000000bb,0x00000079,0x00050005,0x000000bc,0x6b726f77,0x756f7247,0x00444970,0x00080005, + 0x000000bd,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69,0x7865646e,0x00000000,0x00040005, + 0x000000be,0x65736162,0x0070694d,0x00040005,0x000000bf,0x7370696d,0x00000000,0x00040005, + 0x000000c0,0x63696c73,0x00000065,0x000a0005,0x000000c9,0x44647053,0x736e776f,0x6c706d61, + 0x75762865,0x31753b32,0x3b31753b,0x753b3175,0x00003b31,0x00050005,0x000000c4,0x6b726f77, + 0x756f7247,0x00444970,0x00080005,0x000000c5,0x61636f6c,0x766e496c,0x7461636f,0x496e6f69, + 0x7865646e,0x00000000,0x00040005,0x000000c6,0x7370696d,0x00000000,0x00060005,0x000000c7, + 0x576d756e,0x476b726f,0x70756f72,0x00000073,0x00040005,0x000000c8,0x63696c73,0x00000065, + 0x000c0005,0x000000cf,0x706d6f43,0x4f657475,0x63697470,0x6c466c61,0x6e49776f,0x50747570, + 0x6d617279,0x76286469,0x693b3269,0x00003b31,0x00050005,0x000000cd,0x6f724769,0x64497075, + 0x00000000,0x00050005,0x000000ce,0x636f4c69,0x6e496c61,0x00786564,0x00040005,0x000000e3, + 0x61726170,0x0000006d,0x00040005,0x000000e5,0x61726170,0x0000006d,0x00040005,0x000000e6, + 0x61726170,0x0000006d,0x00040005,0x000000e9,0x61726170,0x0000006d,0x00040005,0x000000ea, + 0x61726170,0x0000006d,0x00040005,0x000000ec,0x61726170,0x0000006d,0x00040005,0x000000ee, + 0x61726170,0x0000006d,0x00040005,0x000000f0,0x61726170,0x0000006d,0x00040005,0x000000f1, + 0x61726170,0x0000006d,0x00040005,0x000000f3,0x61726170,0x0000006d,0x00040005,0x000000f5, + 0x61726170,0x0000006d,0x00040005,0x000000f6,0x61726170,0x0000006d,0x00040005,0x000000f8, + 0x61726170,0x0000006d,0x00040005,0x000000f9,0x61726170,0x0000006d,0x00040005,0x000000fa, + 0x61726170,0x0000006d,0x00050005,0x000000ff,0x464f6263,0x4450535f,0x0000745f,0x00050006, + 0x000000ff,0x00000000,0x7370696d,0x00000000,0x00070006,0x000000ff,0x00000001,0x576d756e, + 0x476b726f,0x70756f72,0x00000073,0x00070006,0x000000ff,0x00000002,0x6b726f77,0x756f7247, + 0x66664f70,0x00746573,0x000c0006,0x000000ff,0x00000003,0x576d756e,0x476b726f,0x70756f72, + 0x6974704f,0x466c6163,0x49776f6c,0x7475706e,0x61727950,0x0064696d,0x00050006,0x000000ff, + 0x00000004,0x30646170,0x0000005f,0x00050006,0x000000ff,0x00000005,0x31646170,0x0000005f, + 0x00050006,0x000000ff,0x00000006,0x32646170,0x0000005f,0x00050005,0x00000101,0x464f6263, + 0x4450535f,0x00000000,0x00080005,0x0000010a,0x6f5f7772,0x63697470,0x665f6c61,0x5f776f6c, + 0x75706e69,0x00000074,0x00040005,0x00000114,0x756c6176,0x00003465,0x000a0005,0x00000120, + 0x6f5f7772,0x63697470,0x665f6c61,0x5f776f6c,0x75706e69,0x656c5f74,0x5f6c6576,0x00000031, + 0x000a0005,0x00000125,0x6f5f7772,0x63697470,0x665f6c61,0x5f776f6c,0x75706e69,0x656c5f74, + 0x5f6c6576,0x00000032,0x000a0005,0x0000012a,0x6f5f7772,0x63697470,0x665f6c61,0x5f776f6c, + 0x75706e69,0x656c5f74,0x5f6c6576,0x00000033,0x000a0005,0x0000012f,0x6f5f7772,0x63697470, + 0x665f6c61,0x5f776f6c,0x75706e69,0x656c5f74,0x5f6c6576,0x00000034,0x000a0005,0x00000134, + 0x6f5f7772,0x63697470,0x665f6c61,0x5f776f6c,0x75706e69,0x656c5f74,0x5f6c6576,0x00000035, + 0x000a0005,0x00000139,0x6f5f7772,0x63697470,0x665f6c61,0x5f776f6c,0x75706e69,0x656c5f74, + 0x5f6c6576,0x00000036,0x00040005,0x0000013f,0x616d756c,0x00000000,0x00040005,0x00000142, + 0x61726170,0x0000006d,0x00040005,0x0000014d,0x61726170,0x0000006d,0x00040005,0x0000014f, + 0x61726170,0x0000006d,0x00040005,0x00000151,0x61726170,0x0000006d,0x00070005,0x0000015c, + 0x49647073,0x7265746e,0x6964656d,0x52657461,0x00000000,0x00070005,0x00000162,0x49647073, + 0x7265746e,0x6964656d,0x47657461,0x00000000,0x00070005,0x00000167,0x49647073,0x7265746e, + 0x6964656d,0x42657461,0x00000000,0x00070005,0x0000016c,0x49647073,0x7265746e,0x6964656d, + 0x41657461,0x00000000,0x00040005,0x00000199,0x61726170,0x0000006d,0x00030005,0x000001a3, + 0x00003076,0x00030005,0x000001a5,0x00003176,0x00030005,0x000001a8,0x00003276,0x00030005, + 0x000001ab,0x00003376,0x00040005,0x000001ae,0x61726170,0x0000006d,0x00040005,0x000001b0, + 0x61726170,0x0000006d,0x00040005,0x000001b2,0x61726170,0x0000006d,0x00040005,0x000001b4, + 0x61726170,0x0000006d,0x00030005,0x000001bb,0x00003076,0x00040005,0x000001be,0x61726170, + 0x0000006d,0x00040005,0x000001bf,0x61726170,0x0000006d,0x00030005,0x000001c2,0x00003176, + 0x00040005,0x000001c5,0x61726170,0x0000006d,0x00040005,0x000001c6,0x61726170,0x0000006d, + 0x00030005,0x000001c9,0x00003276,0x00040005,0x000001cc,0x61726170,0x0000006d,0x00040005, + 0x000001cd,0x61726170,0x0000006d,0x00030005,0x000001d0,0x00003376,0x00040005,0x000001d3, + 0x61726170,0x0000006d,0x00040005,0x000001d4,0x61726170,0x0000006d,0x00040005,0x000001d7, + 0x61726170,0x0000006d,0x00040005,0x000001d9,0x61726170,0x0000006d,0x00040005,0x000001db, + 0x61726170,0x0000006d,0x00040005,0x000001dd,0x61726170,0x0000006d,0x00040005,0x000001ee, + 0x61726170,0x0000006d,0x00040005,0x000001ef,0x61726170,0x0000006d,0x00040005,0x000001f0, + 0x61726170,0x0000006d,0x00040005,0x000001f1,0x61726170,0x0000006d,0x00040005,0x000001f2, + 0x61726170,0x0000006d,0x00030005,0x000001f7,0x00003076,0x00040005,0x000001fb,0x61726170, + 0x0000006d,0x00040005,0x000001fc,0x61726170,0x0000006d,0x00030005,0x000001ff,0x00003176, + 0x00040005,0x00000203,0x61726170,0x0000006d,0x00040005,0x00000204,0x61726170,0x0000006d, + 0x00030005,0x00000207,0x00003276,0x00040005,0x0000020b,0x61726170,0x0000006d,0x00040005, + 0x0000020c,0x61726170,0x0000006d,0x00030005,0x0000020f,0x00003376,0x00040005,0x00000213, + 0x61726170,0x0000006d,0x00040005,0x00000214,0x61726170,0x0000006d,0x00040005,0x00000217, + 0x61726170,0x0000006d,0x00040005,0x00000219,0x61726170,0x0000006d,0x00040005,0x0000021b, + 0x61726170,0x0000006d,0x00040005,0x0000021d,0x61726170,0x0000006d,0x00040005,0x0000022a, + 0x61726170,0x0000006d,0x00040005,0x0000022b,0x61726170,0x0000006d,0x00040005,0x0000022c, + 0x61726170,0x0000006d,0x00040005,0x0000022d,0x61726170,0x0000006d,0x00040005,0x0000022e, + 0x61726170,0x0000006d,0x00030005,0x00000233,0x00786574,0x00030005,0x00000241,0x00786970, + 0x00030005,0x00000250,0x00000076,0x00040005,0x00000253,0x61726170,0x0000006d,0x00040005, + 0x00000254,0x61726170,0x0000006d,0x00040005,0x00000258,0x61726170,0x0000006d,0x00040005, + 0x0000025a,0x61726170,0x0000006d,0x00040005,0x0000025d,0x61726170,0x0000006d,0x00040005, + 0x0000025e,0x61726170,0x0000006d,0x00040005,0x0000027c,0x61726170,0x0000006d,0x00040005, + 0x0000027d,0x61726170,0x0000006d,0x00040005,0x00000281,0x61726170,0x0000006d,0x00040005, + 0x00000283,0x61726170,0x0000006d,0x00040005,0x00000286,0x61726170,0x0000006d,0x00040005, + 0x00000287,0x61726170,0x0000006d,0x00040005,0x000002a5,0x61726170,0x0000006d,0x00040005, + 0x000002a6,0x61726170,0x0000006d,0x00040005,0x000002aa,0x61726170,0x0000006d,0x00040005, + 0x000002ac,0x61726170,0x0000006d,0x00040005,0x000002af,0x61726170,0x0000006d,0x00040005, + 0x000002b0,0x61726170,0x0000006d,0x00040005,0x000002cf,0x61726170,0x0000006d,0x00040005, + 0x000002d0,0x61726170,0x0000006d,0x00040005,0x000002d4,0x61726170,0x0000006d,0x00040005, + 0x000002d6,0x61726170,0x0000006d,0x00040005,0x000002d9,0x61726170,0x0000006d,0x00040005, + 0x000002da,0x61726170,0x0000006d,0x00040005,0x000002e2,0x61726170,0x0000006d,0x00040005, + 0x000002e7,0x61726170,0x0000006d,0x00040005,0x000002ec,0x61726170,0x0000006d,0x00040005, + 0x000002f1,0x61726170,0x0000006d,0x00040005,0x00000307,0x61726170,0x0000006d,0x00040005, + 0x00000308,0x61726170,0x0000006d,0x00040005,0x0000030b,0x61726170,0x0000006d,0x00040005, + 0x0000030c,0x61726170,0x0000006d,0x00040005,0x00000313,0x61726170,0x0000006d,0x00040005, + 0x00000314,0x61726170,0x0000006d,0x00040005,0x00000315,0x61726170,0x0000006d,0x00040005, + 0x00000327,0x61726170,0x0000006d,0x00040005,0x00000328,0x61726170,0x0000006d,0x00040005, + 0x0000032b,0x61726170,0x0000006d,0x00040005,0x0000032c,0x61726170,0x0000006d,0x00040005, + 0x00000334,0x61726170,0x0000006d,0x00040005,0x00000335,0x61726170,0x0000006d,0x00040005, + 0x00000336,0x61726170,0x0000006d,0x00040005,0x00000347,0x61726170,0x0000006d,0x00040005, + 0x00000348,0x61726170,0x0000006d,0x00040005,0x0000034b,0x61726170,0x0000006d,0x00040005, + 0x0000034c,0x61726170,0x0000006d,0x00040005,0x00000354,0x61726170,0x0000006d,0x00040005, + 0x00000355,0x61726170,0x0000006d,0x00040005,0x00000356,0x61726170,0x0000006d,0x00040005, + 0x00000368,0x61726170,0x0000006d,0x00040005,0x00000369,0x61726170,0x0000006d,0x00040005, + 0x0000036c,0x61726170,0x0000006d,0x00040005,0x0000036d,0x61726170,0x0000006d,0x00040005, + 0x00000376,0x61726170,0x0000006d,0x00040005,0x00000377,0x61726170,0x0000006d,0x00040005, + 0x00000378,0x61726170,0x0000006d,0x00040005,0x0000037c,0x61726170,0x0000006d,0x00040005, + 0x0000037e,0x61726170,0x0000006d,0x00040005,0x00000380,0x61726170,0x0000006d,0x00040005, + 0x00000382,0x61726170,0x0000006d,0x00040005,0x00000384,0x61726170,0x0000006d,0x00040005, + 0x00000386,0x61726170,0x0000006d,0x00030005,0x00000389,0x00000076,0x00040005,0x0000038a, + 0x61726170,0x0000006d,0x00040005,0x0000038c,0x61726170,0x0000006d,0x00040005,0x0000038f, + 0x61726170,0x0000006d,0x00040005,0x000003a3,0x61726170,0x0000006d,0x00040005,0x000003a4, + 0x61726170,0x0000006d,0x00040005,0x000003a6,0x61726170,0x0000006d,0x00040005,0x000003a8, + 0x61726170,0x0000006d,0x00040005,0x000003b0,0x61726170,0x0000006d,0x00040005,0x000003b1, + 0x61726170,0x0000006d,0x00040005,0x000003b3,0x61726170,0x0000006d,0x00030005,0x000003ba, + 0x00000076,0x00040005,0x000003c2,0x61726170,0x0000006d,0x00040005,0x000003c3,0x61726170, + 0x0000006d,0x00040005,0x000003c5,0x61726170,0x0000006d,0x00040005,0x000003d9,0x61726170, + 0x0000006d,0x00040005,0x000003da,0x61726170,0x0000006d,0x00040005,0x000003dc,0x61726170, + 0x0000006d,0x00040005,0x000003de,0x61726170,0x0000006d,0x00040005,0x000003e8,0x61726170, + 0x0000006d,0x00040005,0x000003e9,0x61726170,0x0000006d,0x00040005,0x000003ea,0x61726170, + 0x0000006d,0x00030005,0x000003f1,0x00000076,0x00040005,0x000003f8,0x61726170,0x0000006d, + 0x00040005,0x000003f9,0x61726170,0x0000006d,0x00040005,0x000003fb,0x61726170,0x0000006d, + 0x00040005,0x0000040f,0x61726170,0x0000006d,0x00040005,0x00000410,0x61726170,0x0000006d, + 0x00040005,0x00000412,0x61726170,0x0000006d,0x00040005,0x00000414,0x61726170,0x0000006d, + 0x00040005,0x0000041b,0x61726170,0x0000006d,0x00040005,0x0000041c,0x61726170,0x0000006d, + 0x00040005,0x0000041d,0x61726170,0x0000006d,0x00030005,0x00000424,0x00000076,0x00040005, + 0x00000425,0x61726170,0x0000006d,0x00040005,0x00000427,0x61726170,0x0000006d,0x00040005, + 0x00000429,0x61726170,0x0000006d,0x00040005,0x00000433,0x61726170,0x0000006d,0x00040005, + 0x00000434,0x61726170,0x0000006d,0x00040005,0x00000436,0x61726170,0x0000006d,0x00040005, + 0x00000438,0x61726170,0x0000006d,0x00030005,0x0000043b,0x00786574,0x00030005,0x00000445, + 0x00786970,0x00030005,0x0000044f,0x00003076,0x00040005,0x00000452,0x61726170,0x0000006d, + 0x00040005,0x00000453,0x61726170,0x0000006d,0x00040005,0x00000457,0x61726170,0x0000006d, + 0x00040005,0x00000459,0x61726170,0x0000006d,0x00040005,0x0000045b,0x61726170,0x0000006d, + 0x00040005,0x0000045c,0x61726170,0x0000006d,0x00030005,0x00000471,0x00003176,0x00040005, + 0x00000474,0x61726170,0x0000006d,0x00040005,0x00000475,0x61726170,0x0000006d,0x00040005, + 0x00000478,0x61726170,0x0000006d,0x00040005,0x0000047a,0x61726170,0x0000006d,0x00040005, + 0x0000047c,0x61726170,0x0000006d,0x00040005,0x0000047d,0x61726170,0x0000006d,0x00030005, + 0x00000492,0x00003276,0x00040005,0x00000495,0x61726170,0x0000006d,0x00040005,0x00000496, + 0x61726170,0x0000006d,0x00040005,0x00000499,0x61726170,0x0000006d,0x00040005,0x0000049b, + 0x61726170,0x0000006d,0x00040005,0x0000049d,0x61726170,0x0000006d,0x00040005,0x0000049e, + 0x61726170,0x0000006d,0x00030005,0x000004b3,0x00003376,0x00040005,0x000004b6,0x61726170, + 0x0000006d,0x00040005,0x000004b7,0x61726170,0x0000006d,0x00040005,0x000004ba,0x61726170, + 0x0000006d,0x00040005,0x000004bc,0x61726170,0x0000006d,0x00040005,0x000004be,0x61726170, + 0x0000006d,0x00040005,0x000004bf,0x61726170,0x0000006d,0x00030005,0x000004c8,0x00000076, + 0x00040005,0x000004c9,0x61726170,0x0000006d,0x00040005,0x000004cb,0x61726170,0x0000006d, + 0x00040005,0x000004cd,0x61726170,0x0000006d,0x00040005,0x000004cf,0x61726170,0x0000006d, + 0x00040005,0x000004d7,0x61726170,0x0000006d,0x00040005,0x000004d8,0x61726170,0x0000006d, + 0x00040005,0x000004da,0x61726170,0x0000006d,0x00040005,0x000004db,0x61726170,0x0000006d, + 0x00040005,0x000004de,0x61726170,0x0000006d,0x00040005,0x000004e0,0x61726170,0x0000006d, + 0x00040005,0x000004e2,0x61726170,0x0000006d,0x00040005,0x000004ec,0x61726170,0x0000006d, + 0x00040005,0x000004ee,0x61726170,0x0000006d,0x00040005,0x000004f0,0x61726170,0x0000006d, + 0x00040005,0x000004f2,0x61726170,0x0000006d,0x00040005,0x000004f4,0x61726170,0x0000006d, + 0x00040005,0x000004f6,0x61726170,0x0000006d,0x00040005,0x00000503,0x61726170,0x0000006d, + 0x00040005,0x00000505,0x61726170,0x0000006d,0x00040005,0x00000507,0x61726170,0x0000006d, + 0x00040005,0x00000509,0x61726170,0x0000006d,0x00040005,0x0000050b,0x61726170,0x0000006d, + 0x00040005,0x0000050c,0x61726170,0x0000006d,0x00040005,0x00000519,0x61726170,0x0000006d, + 0x00040005,0x0000051b,0x61726170,0x0000006d,0x00040005,0x0000051d,0x61726170,0x0000006d, + 0x00040005,0x0000051f,0x61726170,0x0000006d,0x00040005,0x00000521,0x61726170,0x0000006d, + 0x00040005,0x00000522,0x61726170,0x0000006d,0x00040005,0x0000052f,0x61726170,0x0000006d, + 0x00040005,0x00000531,0x61726170,0x0000006d,0x00040005,0x00000533,0x61726170,0x0000006d, + 0x00040005,0x00000534,0x61726170,0x0000006d,0x00040005,0x00000537,0x5f627573,0x00007978, + 0x00040005,0x0000053a,0x61726170,0x0000006d,0x00030005,0x0000053c,0x00000078,0x00030005, + 0x00000545,0x00000079,0x00040005,0x0000054d,0x61726170,0x0000006d,0x00040005,0x0000054f, + 0x61726170,0x0000006d,0x00040005,0x00000551,0x61726170,0x0000006d,0x00040005,0x00000553, + 0x61726170,0x0000006d,0x00040005,0x00000555,0x61726170,0x0000006d,0x00040005,0x00000557, + 0x61726170,0x0000006d,0x00040005,0x0000055a,0x61726170,0x0000006d,0x00040005,0x0000055c, + 0x61726170,0x0000006d,0x00040005,0x0000055e,0x61726170,0x0000006d,0x00040005,0x00000560, + 0x61726170,0x0000006d,0x00040005,0x00000562,0x61726170,0x0000006d,0x00040005,0x00000563, + 0x61726170,0x0000006d,0x00040005,0x00000565,0x61726170,0x0000006d,0x00040005,0x0000056d, + 0x61726170,0x0000006d,0x00040005,0x0000056f,0x61726170,0x0000006d,0x00040005,0x00000571, + 0x61726170,0x0000006d,0x00040005,0x00000577,0x61726170,0x0000006d,0x00040005,0x0000057a, + 0x61726170,0x0000006d,0x00040005,0x0000057c,0x61726170,0x0000006d,0x00040005,0x0000057e, + 0x61726170,0x0000006d,0x00040005,0x00000580,0x61726170,0x0000006d,0x00040005,0x00000583, + 0x61726170,0x0000006d,0x00040005,0x00000585,0x61726170,0x0000006d,0x00040005,0x00000587, + 0x61726170,0x0000006d,0x00040005,0x00000588,0x61726170,0x0000006d,0x00040005,0x0000058a, + 0x61726170,0x0000006d,0x00040005,0x0000058b,0x61726170,0x0000006d,0x00040005,0x0000058d, + 0x61726170,0x0000006d,0x00040005,0x00000595,0x61726170,0x0000006d,0x00040005,0x00000596, + 0x61726170,0x0000006d,0x00040005,0x00000597,0x61726170,0x0000006d,0x00040005,0x00000598, + 0x61726170,0x0000006d,0x00040005,0x00000599,0x61726170,0x0000006d,0x00060005,0x0000059d, + 0x575f6c67,0x476b726f,0x70756f72,0x00004449,0x00080005,0x000005a2,0x4c5f6c67,0x6c61636f, + 0x6f766e49,0x69746163,0x6e496e6f,0x00786564,0x00040005,0x000005a5,0x61726170,0x0000006d, + 0x00040005,0x000005a6,0x61726170,0x0000006d,0x00040005,0x000005ab,0x464f6263,0x0000745f, + 0x00090006,0x000005ab,0x00000000,0x706e4969,0x754c7475,0x6552616d,0x756c6f73,0x6e6f6974, + 0x00000000,0x000a0006,0x000005ab,0x00000001,0x74704f75,0x6c616369,0x776f6c46,0x61727950, + 0x4c64696d,0x6c657665,0x00000000,0x000b0006,0x000005ab,0x00000002,0x74704f75,0x6c616369, + 0x776f6c46,0x61727950,0x4c64696d,0x6c657665,0x6e756f43,0x00000074,0x00060006,0x000005ab, + 0x00000003,0x61724669,0x6e49656d,0x00786564,0x000a0006,0x000005ab,0x00000004,0x6b636162, + 0x66667562,0x72547265,0x66736e61,0x75467265,0x6974636e,0x00006e6f,0x00070006,0x000005ab, + 0x00000005,0x4d6e696d,0x754c7861,0x616e696d,0x0065636e,0x00040005,0x000005ad,0x464f6263, + 0x00000000,0x00030047,0x000000ff,0x00000002,0x00050048,0x000000ff,0x00000000,0x00000023, + 0x00000000,0x00050048,0x000000ff,0x00000001,0x00000023,0x00000004,0x00050048,0x000000ff, + 0x00000002,0x00000023,0x00000008,0x00050048,0x000000ff,0x00000003,0x00000023,0x00000010, + 0x00050048,0x000000ff,0x00000004,0x00000023,0x00000014,0x00050048,0x000000ff,0x00000005, + 0x00000023,0x00000018,0x00050048,0x000000ff,0x00000006,0x00000023,0x0000001c,0x00040047, + 0x00000101,0x00000021,0x00000008,0x00040047,0x00000101,0x00000022,0x00000000,0x00040047, + 0x0000010a,0x00000021,0x00000000,0x00040047,0x0000010a,0x00000022,0x00000000,0x00040047, + 0x00000120,0x00000021,0x00000001,0x00040047,0x00000120,0x00000022,0x00000000,0x00040047, + 0x00000125,0x00000021,0x00000002,0x00040047,0x00000125,0x00000022,0x00000000,0x00040047, + 0x0000012a,0x00000021,0x00000003,0x00040047,0x0000012a,0x00000022,0x00000000,0x00040047, + 0x0000012f,0x00000021,0x00000004,0x00040047,0x0000012f,0x00000022,0x00000000,0x00040047, + 0x00000134,0x00000021,0x00000005,0x00040047,0x00000134,0x00000022,0x00000000,0x00040047, + 0x00000139,0x00000021,0x00000006,0x00040047,0x00000139,0x00000022,0x00000000,0x00040047, + 0x0000059d,0x0000000b,0x0000001a,0x00040047,0x000005a2,0x0000000b,0x0000001d,0x00030047, + 0x000005ab,0x00000002,0x00050048,0x000005ab,0x00000000,0x00000023,0x00000000,0x00050048, + 0x000005ab,0x00000001,0x00000023,0x00000008,0x00050048,0x000005ab,0x00000002,0x00000023, + 0x0000000c,0x00050048,0x000005ab,0x00000003,0x00000023,0x00000010,0x00050048,0x000005ab, + 0x00000004,0x00000023,0x00000014,0x00050048,0x000005ab,0x00000005,0x00000023,0x00000018, + 0x00040047,0x000005ad,0x00000021,0x00000007,0x00040047,0x000005ad,0x00000022,0x00000000, + 0x00040047,0x000005af,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003, + 0x00000002,0x00040015,0x00000006,0x00000020,0x00000000,0x00040020,0x00000007,0x00000007, + 0x00000006,0x00060021,0x00000008,0x00000006,0x00000007,0x00000007,0x00000007,0x00040017, + 0x00000013,0x00000006,0x00000002,0x00040021,0x00000014,0x00000013,0x00000007,0x00030021, + 0x00000018,0x00000006,0x00040015,0x0000001b,0x00000020,0x00000001,0x00040017,0x0000001c, + 0x0000001b,0x00000002,0x00040020,0x0000001d,0x00000007,0x0000001c,0x00040021,0x0000001e, + 0x00000006,0x0000001d,0x00030016,0x00000022,0x00000020,0x00040020,0x00000023,0x00000007, + 0x00000022,0x00060021,0x00000024,0x00000002,0x0000001d,0x00000007,0x00000023,0x00040017, + 0x0000002c,0x00000022,0x00000002,0x00040020,0x0000002d,0x00000007,0x0000002c,0x00040017, + 0x0000002e,0x00000022,0x00000004,0x00050021,0x0000002f,0x0000002e,0x0000002d,0x00000007, + 0x00050021,0x00000034,0x0000002e,0x0000001d,0x00000007,0x00040020,0x00000039,0x00000007, + 0x0000002e,0x00070021,0x0000003a,0x00000002,0x0000001d,0x00000039,0x00000007,0x00000007, + 0x00040021,0x00000041,0x00000002,0x00000007,0x00050021,0x0000004a,0x0000002e,0x00000007, + 0x00000007,0x00060021,0x0000004f,0x00000002,0x00000007,0x00000007,0x00000039,0x00070021, + 0x00000055,0x0000002e,0x00000039,0x00000039,0x00000039,0x00000039,0x00020014,0x0000005e, + 0x00060021,0x0000005f,0x0000005e,0x00000007,0x00000007,0x00000007,0x00040021,0x00000065, + 0x0000002e,0x00000039,0x00040020,0x00000069,0x00000007,0x00000013,0x00080021,0x0000006a, + 0x0000002e,0x00000069,0x00000069,0x00000069,0x00000069,0x00000007,0x00050021,0x00000072, + 0x0000002e,0x00000069,0x00000007,0x00090021,0x00000082,0x00000002,0x00000007,0x00000007, + 0x00000069,0x00000007,0x00000007,0x00000007,0x00070021,0x000000ab,0x00000002,0x00000069, + 0x00000007,0x00000007,0x00000007,0x00070021,0x000000b2,0x00000002,0x00000007,0x00000007, + 0x00000007,0x00000007,0x000a0021,0x000000b9,0x00000002,0x00000007,0x00000007,0x00000069, + 0x00000007,0x00000007,0x00000007,0x00000007,0x00080021,0x000000c3,0x00000002,0x00000069, + 0x00000007,0x00000007,0x00000007,0x00000007,0x00040020,0x000000cb,0x00000007,0x0000001b, + 0x00050021,0x000000cc,0x00000002,0x0000001d,0x000000cb,0x0004002b,0x0000001b,0x000000db, + 0x00000000,0x0004002b,0x00000006,0x000000e1,0x00000002,0x0004002b,0x00000006,0x000000e2, + 0x00000003,0x0004002b,0x00000006,0x000000e8,0x00000001,0x0009001e,0x000000ff,0x00000006, + 0x00000006,0x00000013,0x00000006,0x00000006,0x00000006,0x00000006,0x00040020,0x00000100, + 0x00000002,0x000000ff,0x0004003b,0x00000100,0x00000101,0x00000002,0x0004002b,0x0000001b, + 0x00000102,0x00000003,0x00040020,0x00000103,0x00000002,0x00000006,0x00090019,0x00000108, + 0x00000006,0x00000001,0x00000000,0x00000000,0x00000000,0x00000002,0x00000027,0x00040020, + 0x00000109,0x00000000,0x00000108,0x0004003b,0x00000109,0x0000010a,0x00000000,0x00040017, + 0x0000010d,0x00000006,0x00000004,0x0004002b,0x00000006,0x0000010f,0x00000000,0x00040020, + 0x00000113,0x00000007,0x0000010d,0x0004003b,0x00000109,0x00000120,0x00000000,0x0004003b, + 0x00000109,0x00000125,0x00000000,0x0004003b,0x00000109,0x0000012a,0x00000000,0x0004003b, + 0x00000109,0x0000012f,0x00000000,0x0004003b,0x00000109,0x00000134,0x00000000,0x0004003b, + 0x00000109,0x00000139,0x00000000,0x0004002b,0x00000022,0x00000146,0x00000000,0x0007002c, + 0x0000002e,0x0000014a,0x00000146,0x00000146,0x00000146,0x00000146,0x0004002b,0x00000006, + 0x00000158,0x00000010,0x0004001c,0x00000159,0x00000022,0x00000158,0x0004001c,0x0000015a, + 0x00000159,0x00000158,0x00040020,0x0000015b,0x00000004,0x0000015a,0x0004003b,0x0000015b, + 0x0000015c,0x00000004,0x00040020,0x0000015f,0x00000004,0x00000022,0x0004003b,0x0000015b, + 0x00000162,0x00000004,0x0004003b,0x0000015b,0x00000167,0x00000004,0x0004003b,0x0000015b, + 0x0000016c,0x00000004,0x0004002b,0x00000022,0x0000018f,0x3e800000,0x0004002b,0x00000006, + 0x00000193,0x00000d48,0x0004002b,0x00000006,0x00000194,0x00000108,0x0005002c,0x00000013, + 0x000001e3,0x0000010f,0x0000010f,0x0005002c,0x00000013,0x000001e6,0x0000010f,0x000000e8, + 0x0005002c,0x00000013,0x000001e9,0x000000e8,0x0000010f,0x0005002c,0x00000013,0x000001ec, + 0x000000e8,0x000000e8,0x0004002b,0x00000006,0x00000235,0x00000040,0x0004002b,0x00000006, + 0x00000243,0x00000020,0x0004002b,0x00000006,0x0000024d,0x00000004,0x0004001c,0x0000024e, + 0x0000002e,0x0000024d,0x00040020,0x0000024f,0x00000007,0x0000024e,0x0004002b,0x0000001b, + 0x00000279,0x00000001,0x0004002b,0x0000001b,0x000002a2,0x00000002,0x0004002b,0x00000006, + 0x0000031f,0x00000008,0x0004002b,0x00000006,0x00000456,0x00000006,0x0004002b,0x00000006, + 0x000004c3,0x00000007,0x0004002b,0x0000001b,0x00000540,0x00000006,0x0004002b,0x0000001b, + 0x00000549,0x00000007,0x00040017,0x0000059b,0x00000006,0x00000003,0x00040020,0x0000059c, + 0x00000001,0x0000059b,0x0004003b,0x0000059c,0x0000059d,0x00000001,0x00040020,0x000005a1, + 0x00000001,0x00000006,0x0004003b,0x000005a1,0x000005a2,0x00000001,0x0004002b,0x00000022, + 0x000005a8,0x387fda40,0x0004002b,0x00000022,0x000005a9,0x477fe000,0x0004002b,0x00000022, + 0x000005aa,0x37801002,0x0008001e,0x000005ab,0x0000001c,0x00000006,0x00000006,0x00000006, + 0x00000006,0x0000002c,0x00040020,0x000005ac,0x00000002,0x000005ab,0x0004003b,0x000005ac, + 0x000005ad,0x00000002,0x0004002b,0x00000006,0x000005ae,0x00000100,0x0006002c,0x0000059b, + 0x000005af,0x000005ae,0x000000e8,0x000000e8,0x00050036,0x00000002,0x00000004,0x00000000, + 0x00000003,0x000200f8,0x00000005,0x0004003b,0x0000001d,0x000005a5,0x00000007,0x0004003b, + 0x000000cb,0x000005a6,0x00000007,0x0004003d,0x0000059b,0x0000059e,0x0000059d,0x0007004f, + 0x00000013,0x0000059f,0x0000059e,0x0000059e,0x00000000,0x00000001,0x0004007c,0x0000001c, + 0x000005a0,0x0000059f,0x0004003d,0x00000006,0x000005a3,0x000005a2,0x0004007c,0x0000001b, + 0x000005a4,0x000005a3,0x0003003e,0x000005a5,0x000005a0,0x0003003e,0x000005a6,0x000005a4, + 0x00060039,0x00000002,0x000005a7,0x000000cf,0x000005a5,0x000005a6,0x000100fd,0x00010038, + 0x00050036,0x00000006,0x0000000c,0x00000000,0x00000008,0x00030037,0x00000007,0x00000009, + 0x00030037,0x00000007,0x0000000a,0x00030037,0x00000007,0x0000000b,0x000200f8,0x0000000d, + 0x0004003d,0x00000006,0x000000d1,0x00000009,0x0004003d,0x00000006,0x000000d2,0x0000000a, + 0x0004007c,0x0000001b,0x000000d3,0x000000d2,0x0004003d,0x00000006,0x000000d4,0x0000000b, + 0x0004007c,0x0000001b,0x000000d5,0x000000d4,0x000600cb,0x00000006,0x000000d6,0x000000d1, + 0x000000d3,0x000000d5,0x000200fe,0x000000d6,0x00010038,0x00050036,0x00000006,0x00000011, + 0x00000000,0x00000008,0x00030037,0x00000007,0x0000000e,0x00030037,0x00000007,0x0000000f, + 0x00030037,0x00000007,0x00000010,0x000200f8,0x00000012,0x0004003d,0x00000006,0x000000d9, + 0x0000000e,0x0004003d,0x00000006,0x000000da,0x0000000f,0x0004003d,0x00000006,0x000000dc, + 0x00000010,0x0004007c,0x0000001b,0x000000dd,0x000000dc,0x000700c9,0x00000006,0x000000de, + 0x000000d9,0x000000da,0x000000db,0x000000dd,0x000200fe,0x000000de,0x00010038,0x00050036, + 0x00000013,0x00000016,0x00000000,0x00000014,0x00030037,0x00000007,0x00000015,0x000200f8, + 0x00000017,0x0004003b,0x00000007,0x000000e3,0x00000007,0x0004003b,0x00000007,0x000000e5, + 0x00000007,0x0004003b,0x00000007,0x000000e6,0x00000007,0x0004003b,0x00000007,0x000000e9, + 0x00000007,0x0004003b,0x00000007,0x000000ea,0x00000007,0x0004003b,0x00000007,0x000000ec, + 0x00000007,0x0004003b,0x00000007,0x000000ee,0x00000007,0x0004003b,0x00000007,0x000000f0, + 0x00000007,0x0004003b,0x00000007,0x000000f1,0x00000007,0x0004003b,0x00000007,0x000000f3, + 0x00000007,0x0004003b,0x00000007,0x000000f5,0x00000007,0x0004003b,0x00000007,0x000000f6, + 0x00000007,0x0004003b,0x00000007,0x000000f8,0x00000007,0x0004003b,0x00000007,0x000000f9, + 0x00000007,0x0004003b,0x00000007,0x000000fa,0x00000007,0x0004003d,0x00000006,0x000000e4, + 0x00000015,0x0003003e,0x000000e3,0x000000e4,0x0003003e,0x000000e5,0x000000e1,0x0003003e, + 0x000000e6,0x000000e2,0x00070039,0x00000006,0x000000e7,0x0000000c,0x000000e3,0x000000e5, + 0x000000e6,0x0003003e,0x000000e9,0x000000e7,0x0004003d,0x00000006,0x000000eb,0x00000015, + 0x0003003e,0x000000ea,0x000000eb,0x0003003e,0x000000ec,0x000000e8,0x00070039,0x00000006, + 0x000000ed,0x00000011,0x000000e9,0x000000ea,0x000000ec,0x0004003d,0x00000006,0x000000ef, + 0x00000015,0x0003003e,0x000000ee,0x000000ef,0x0003003e,0x000000f0,0x000000e2,0x0003003e, + 0x000000f1,0x000000e2,0x00070039,0x00000006,0x000000f2,0x0000000c,0x000000ee,0x000000f0, + 0x000000f1,0x0004003d,0x00000006,0x000000f4,0x00000015,0x0003003e,0x000000f3,0x000000f4, + 0x0003003e,0x000000f5,0x000000e8,0x0003003e,0x000000f6,0x000000e1,0x00070039,0x00000006, + 0x000000f7,0x0000000c,0x000000f3,0x000000f5,0x000000f6,0x0003003e,0x000000f8,0x000000f2, + 0x0003003e,0x000000f9,0x000000f7,0x0003003e,0x000000fa,0x000000e1,0x00070039,0x00000006, + 0x000000fb,0x00000011,0x000000f8,0x000000f9,0x000000fa,0x00050050,0x00000013,0x000000fc, + 0x000000ed,0x000000fb,0x000200fe,0x000000fc,0x00010038,0x00050036,0x00000006,0x00000019, + 0x00000000,0x00000018,0x000200f8,0x0000001a,0x00050041,0x00000103,0x00000104,0x00000101, + 0x00000102,0x0004003d,0x00000006,0x00000105,0x00000104,0x000200fe,0x00000105,0x00010038, + 0x00050036,0x00000006,0x00000020,0x00000000,0x0000001e,0x00030037,0x0000001d,0x0000001f, + 0x000200f8,0x00000021,0x0004003d,0x00000108,0x0000010b,0x0000010a,0x0004003d,0x0000001c, + 0x0000010c,0x0000001f,0x00050062,0x0000010d,0x0000010e,0x0000010b,0x0000010c,0x00050051, + 0x00000006,0x00000110,0x0000010e,0x00000000,0x000200fe,0x00000110,0x00010038,0x00050036, + 0x00000002,0x00000028,0x00000000,0x00000024,0x00030037,0x0000001d,0x00000025,0x00030037, + 0x00000007,0x00000026,0x00030037,0x00000023,0x00000027,0x000200f8,0x00000029,0x0004003b, + 0x00000113,0x00000114,0x00000007,0x0004003d,0x00000022,0x00000115,0x00000027,0x0004006d, + 0x00000006,0x00000116,0x00000115,0x00070050,0x0000010d,0x00000117,0x00000116,0x0000010f, + 0x0000010f,0x0000010f,0x0003003e,0x00000114,0x00000117,0x0004003d,0x00000006,0x00000118, + 0x00000026,0x000300f7,0x0000011f,0x00000000,0x000f00fb,0x00000118,0x0000011f,0x00000000, + 0x00000119,0x00000001,0x0000011a,0x00000002,0x0000011b,0x00000003,0x0000011c,0x00000004, + 0x0000011d,0x00000005,0x0000011e,0x000200f8,0x00000119,0x0004003d,0x00000108,0x00000121, + 0x00000120,0x0004003d,0x0000001c,0x00000122,0x00000025,0x0004003d,0x0000010d,0x00000123, + 0x00000114,0x00040063,0x00000121,0x00000122,0x00000123,0x000200f9,0x0000011f,0x000200f8, + 0x0000011a,0x0004003d,0x00000108,0x00000126,0x00000125,0x0004003d,0x0000001c,0x00000127, + 0x00000025,0x0004003d,0x0000010d,0x00000128,0x00000114,0x00040063,0x00000126,0x00000127, + 0x00000128,0x000200f9,0x0000011f,0x000200f8,0x0000011b,0x0004003d,0x00000108,0x0000012b, + 0x0000012a,0x0004003d,0x0000001c,0x0000012c,0x00000025,0x0004003d,0x0000010d,0x0000012d, + 0x00000114,0x00040063,0x0000012b,0x0000012c,0x0000012d,0x000200f9,0x0000011f,0x000200f8, + 0x0000011c,0x0004003d,0x00000108,0x00000130,0x0000012f,0x0004003d,0x0000001c,0x00000131, + 0x00000025,0x0004003d,0x0000010d,0x00000132,0x00000114,0x00040063,0x00000130,0x00000131, + 0x00000132,0x000200f9,0x0000011f,0x000200f8,0x0000011d,0x0004003d,0x00000108,0x00000135, + 0x00000134,0x0004003d,0x0000001c,0x00000136,0x00000025,0x0004003d,0x0000010d,0x00000137, + 0x00000114,0x00040063,0x00000135,0x00000136,0x00000137,0x000200f9,0x0000011f,0x000200f8, + 0x0000011e,0x0004003d,0x00000108,0x0000013a,0x00000139,0x0004003d,0x0000001c,0x0000013b, + 0x00000025,0x0004003d,0x0000010d,0x0000013c,0x00000114,0x00040063,0x0000013a,0x0000013b, + 0x0000013c,0x000200f9,0x0000011f,0x000200f8,0x0000011f,0x000100fd,0x00010038,0x00050036, + 0x00000002,0x0000002a,0x00000000,0x00000003,0x000200f8,0x0000002b,0x000100fd,0x00010038, + 0x00050036,0x0000002e,0x00000032,0x00000000,0x0000002f,0x00030037,0x0000002d,0x00000030, + 0x00030037,0x00000007,0x00000031,0x000200f8,0x00000033,0x0004003b,0x00000023,0x0000013f, + 0x00000007,0x0004003b,0x0000001d,0x00000142,0x00000007,0x0004003d,0x0000002c,0x00000140, + 0x00000030,0x0004006e,0x0000001c,0x00000141,0x00000140,0x0003003e,0x00000142,0x00000141, + 0x00050039,0x00000006,0x00000143,0x00000020,0x00000142,0x00040070,0x00000022,0x00000144, + 0x00000143,0x0003003e,0x0000013f,0x00000144,0x0004003d,0x00000022,0x00000145,0x0000013f, + 0x00070050,0x0000002e,0x00000147,0x00000145,0x00000146,0x00000146,0x00000146,0x000200fe, + 0x00000147,0x00010038,0x00050036,0x0000002e,0x00000037,0x00000000,0x00000034,0x00030037, + 0x0000001d,0x00000035,0x00030037,0x00000007,0x00000036,0x000200f8,0x00000038,0x000200fe, + 0x0000014a,0x00010038,0x00050036,0x00000002,0x0000003f,0x00000000,0x0000003a,0x00030037, + 0x0000001d,0x0000003b,0x00030037,0x00000039,0x0000003c,0x00030037,0x00000007,0x0000003d, + 0x00030037,0x00000007,0x0000003e,0x000200f8,0x00000040,0x0004003b,0x0000001d,0x0000014d, + 0x00000007,0x0004003b,0x00000007,0x0000014f,0x00000007,0x0004003b,0x00000023,0x00000151, + 0x00000007,0x0004003d,0x0000001c,0x0000014e,0x0000003b,0x0003003e,0x0000014d,0x0000014e, + 0x0004003d,0x00000006,0x00000150,0x0000003d,0x0003003e,0x0000014f,0x00000150,0x00050041, + 0x00000023,0x00000152,0x0000003c,0x0000010f,0x0004003d,0x00000022,0x00000153,0x00000152, + 0x0003003e,0x00000151,0x00000153,0x00070039,0x00000002,0x00000154,0x00000028,0x0000014d, + 0x0000014f,0x00000151,0x000100fd,0x00010038,0x00050036,0x00000002,0x00000043,0x00000000, + 0x00000041,0x00030037,0x00000007,0x00000042,0x000200f8,0x00000044,0x000100fd,0x00010038, + 0x00050036,0x00000006,0x00000045,0x00000000,0x00000018,0x000200f8,0x00000046,0x000200fe, + 0x0000010f,0x00010038,0x00050036,0x00000002,0x00000048,0x00000000,0x00000041,0x00030037, + 0x00000007,0x00000047,0x000200f8,0x00000049,0x00040039,0x00000002,0x00000157,0x0000002a, + 0x000100fd,0x00010038,0x00050036,0x0000002e,0x0000004d,0x00000000,0x0000004a,0x00030037, + 0x00000007,0x0000004b,0x00030037,0x00000007,0x0000004c,0x000200f8,0x0000004e,0x0004003d, + 0x00000006,0x0000015d,0x0000004b,0x0004003d,0x00000006,0x0000015e,0x0000004c,0x00060041, + 0x0000015f,0x00000160,0x0000015c,0x0000015d,0x0000015e,0x0004003d,0x00000022,0x00000161, + 0x00000160,0x0004003d,0x00000006,0x00000163,0x0000004b,0x0004003d,0x00000006,0x00000164, + 0x0000004c,0x00060041,0x0000015f,0x00000165,0x00000162,0x00000163,0x00000164,0x0004003d, + 0x00000022,0x00000166,0x00000165,0x0004003d,0x00000006,0x00000168,0x0000004b,0x0004003d, + 0x00000006,0x00000169,0x0000004c,0x00060041,0x0000015f,0x0000016a,0x00000167,0x00000168, + 0x00000169,0x0004003d,0x00000022,0x0000016b,0x0000016a,0x0004003d,0x00000006,0x0000016d, + 0x0000004b,0x0004003d,0x00000006,0x0000016e,0x0000004c,0x00060041,0x0000015f,0x0000016f, + 0x0000016c,0x0000016d,0x0000016e,0x0004003d,0x00000022,0x00000170,0x0000016f,0x00070050, + 0x0000002e,0x00000171,0x00000161,0x00000166,0x0000016b,0x00000170,0x000200fe,0x00000171, + 0x00010038,0x00050036,0x00000002,0x00000053,0x00000000,0x0000004f,0x00030037,0x00000007, + 0x00000050,0x00030037,0x00000007,0x00000051,0x00030037,0x00000039,0x00000052,0x000200f8, + 0x00000054,0x0004003d,0x00000006,0x00000174,0x00000050,0x0004003d,0x00000006,0x00000175, + 0x00000051,0x00050041,0x00000023,0x00000176,0x00000052,0x0000010f,0x0004003d,0x00000022, + 0x00000177,0x00000176,0x00060041,0x0000015f,0x00000178,0x0000015c,0x00000174,0x00000175, + 0x0003003e,0x00000178,0x00000177,0x0004003d,0x00000006,0x00000179,0x00000050,0x0004003d, + 0x00000006,0x0000017a,0x00000051,0x00050041,0x00000023,0x0000017b,0x00000052,0x000000e8, + 0x0004003d,0x00000022,0x0000017c,0x0000017b,0x00060041,0x0000015f,0x0000017d,0x00000162, + 0x00000179,0x0000017a,0x0003003e,0x0000017d,0x0000017c,0x0004003d,0x00000006,0x0000017e, + 0x00000050,0x0004003d,0x00000006,0x0000017f,0x00000051,0x00050041,0x00000023,0x00000180, + 0x00000052,0x000000e1,0x0004003d,0x00000022,0x00000181,0x00000180,0x00060041,0x0000015f, + 0x00000182,0x00000167,0x0000017e,0x0000017f,0x0003003e,0x00000182,0x00000181,0x0004003d, + 0x00000006,0x00000183,0x00000050,0x0004003d,0x00000006,0x00000184,0x00000051,0x00050041, + 0x00000023,0x00000185,0x00000052,0x000000e2,0x0004003d,0x00000022,0x00000186,0x00000185, + 0x00060041,0x0000015f,0x00000187,0x0000016c,0x00000183,0x00000184,0x0003003e,0x00000187, + 0x00000186,0x000100fd,0x00010038,0x00050036,0x0000002e,0x0000005a,0x00000000,0x00000055, + 0x00030037,0x00000039,0x00000056,0x00030037,0x00000039,0x00000057,0x00030037,0x00000039, + 0x00000058,0x00030037,0x00000039,0x00000059,0x000200f8,0x0000005b,0x0004003d,0x0000002e, + 0x00000188,0x00000056,0x0004003d,0x0000002e,0x00000189,0x00000057,0x00050081,0x0000002e, + 0x0000018a,0x00000188,0x00000189,0x0004003d,0x0000002e,0x0000018b,0x00000058,0x00050081, + 0x0000002e,0x0000018c,0x0000018a,0x0000018b,0x0004003d,0x0000002e,0x0000018d,0x00000059, + 0x00050081,0x0000002e,0x0000018e,0x0000018c,0x0000018d,0x0005008e,0x0000002e,0x00000190, + 0x0000018e,0x0000018f,0x000200fe,0x00000190,0x00010038,0x00050036,0x00000002,0x0000005c, + 0x00000000,0x00000003,0x000200f8,0x0000005d,0x000300e1,0x000000e1,0x00000193,0x000400e0, + 0x000000e1,0x000000e1,0x00000194,0x000100fd,0x00010038,0x00050036,0x0000005e,0x00000063, + 0x00000000,0x0000005f,0x00030037,0x00000007,0x00000060,0x00030037,0x00000007,0x00000061, + 0x00030037,0x00000007,0x00000062,0x000200f8,0x00000064,0x0004003b,0x00000007,0x00000199, + 0x00000007,0x0004003d,0x00000006,0x00000195,0x00000061,0x000500aa,0x0000005e,0x00000196, + 0x00000195,0x0000010f,0x000300f7,0x00000198,0x00000000,0x000400fa,0x00000196,0x00000197, + 0x00000198,0x000200f8,0x00000197,0x0004003d,0x00000006,0x0000019a,0x00000062,0x0003003e, + 0x00000199,0x0000019a,0x00050039,0x00000002,0x0000019b,0x00000043,0x00000199,0x000200f9, + 0x00000198,0x000200f8,0x00000198,0x00040039,0x00000002,0x0000019c,0x0000005c,0x00040039, + 0x00000006,0x0000019d,0x00000045,0x0004003d,0x00000006,0x0000019e,0x00000060,0x00050082, + 0x00000006,0x0000019f,0x0000019e,0x000000e8,0x000500ab,0x0000005e,0x000001a0,0x0000019d, + 0x0000019f,0x000200fe,0x000001a0,0x00010038,0x00050036,0x0000002e,0x00000067,0x00000000, + 0x00000065,0x00030037,0x00000039,0x00000066,0x000200f8,0x00000068,0x0004003b,0x00000039, + 0x000001a3,0x00000007,0x0004003b,0x00000039,0x000001a5,0x00000007,0x0004003b,0x00000039, + 0x000001a8,0x00000007,0x0004003b,0x00000039,0x000001ab,0x00000007,0x0004003b,0x00000039, + 0x000001ae,0x00000007,0x0004003b,0x00000039,0x000001b0,0x00000007,0x0004003b,0x00000039, + 0x000001b2,0x00000007,0x0004003b,0x00000039,0x000001b4,0x00000007,0x0004003d,0x0000002e, + 0x000001a4,0x00000066,0x0003003e,0x000001a3,0x000001a4,0x0004003d,0x0000002e,0x000001a6, + 0x00000066,0x0006016e,0x0000002e,0x000001a7,0x000000e2,0x000001a6,0x0000010f,0x0003003e, + 0x000001a5,0x000001a7,0x0004003d,0x0000002e,0x000001a9,0x00000066,0x0006016e,0x0000002e, + 0x000001aa,0x000000e2,0x000001a9,0x000000e8,0x0003003e,0x000001a8,0x000001aa,0x0004003d, + 0x0000002e,0x000001ac,0x00000066,0x0006016e,0x0000002e,0x000001ad,0x000000e2,0x000001ac, + 0x000000e1,0x0003003e,0x000001ab,0x000001ad,0x0004003d,0x0000002e,0x000001af,0x000001a3, + 0x0003003e,0x000001ae,0x000001af,0x0004003d,0x0000002e,0x000001b1,0x000001a5,0x0003003e, + 0x000001b0,0x000001b1,0x0004003d,0x0000002e,0x000001b3,0x000001a8,0x0003003e,0x000001b2, + 0x000001b3,0x0004003d,0x0000002e,0x000001b5,0x000001ab,0x0003003e,0x000001b4,0x000001b5, + 0x00080039,0x0000002e,0x000001b6,0x0000005a,0x000001ae,0x000001b0,0x000001b2,0x000001b4, + 0x000200fe,0x000001b6,0x00010038,0x00050036,0x0000002e,0x00000070,0x00000000,0x0000006a, + 0x00030037,0x00000069,0x0000006b,0x00030037,0x00000069,0x0000006c,0x00030037,0x00000069, + 0x0000006d,0x00030037,0x00000069,0x0000006e,0x00030037,0x00000007,0x0000006f,0x000200f8, + 0x00000071,0x0004003b,0x00000039,0x000001bb,0x00000007,0x0004003b,0x0000001d,0x000001be, + 0x00000007,0x0004003b,0x00000007,0x000001bf,0x00000007,0x0004003b,0x00000039,0x000001c2, + 0x00000007,0x0004003b,0x0000001d,0x000001c5,0x00000007,0x0004003b,0x00000007,0x000001c6, + 0x00000007,0x0004003b,0x00000039,0x000001c9,0x00000007,0x0004003b,0x0000001d,0x000001cc, + 0x00000007,0x0004003b,0x00000007,0x000001cd,0x00000007,0x0004003b,0x00000039,0x000001d0, + 0x00000007,0x0004003b,0x0000001d,0x000001d3,0x00000007,0x0004003b,0x00000007,0x000001d4, + 0x00000007,0x0004003b,0x00000039,0x000001d7,0x00000007,0x0004003b,0x00000039,0x000001d9, + 0x00000007,0x0004003b,0x00000039,0x000001db,0x00000007,0x0004003b,0x00000039,0x000001dd, + 0x00000007,0x0004003d,0x00000013,0x000001bc,0x0000006b,0x0004007c,0x0000001c,0x000001bd, + 0x000001bc,0x0003003e,0x000001be,0x000001bd,0x0004003d,0x00000006,0x000001c0,0x0000006f, + 0x0003003e,0x000001bf,0x000001c0,0x00060039,0x0000002e,0x000001c1,0x00000037,0x000001be, + 0x000001bf,0x0003003e,0x000001bb,0x000001c1,0x0004003d,0x00000013,0x000001c3,0x0000006c, + 0x0004007c,0x0000001c,0x000001c4,0x000001c3,0x0003003e,0x000001c5,0x000001c4,0x0004003d, + 0x00000006,0x000001c7,0x0000006f,0x0003003e,0x000001c6,0x000001c7,0x00060039,0x0000002e, + 0x000001c8,0x00000037,0x000001c5,0x000001c6,0x0003003e,0x000001c2,0x000001c8,0x0004003d, + 0x00000013,0x000001ca,0x0000006d,0x0004007c,0x0000001c,0x000001cb,0x000001ca,0x0003003e, + 0x000001cc,0x000001cb,0x0004003d,0x00000006,0x000001ce,0x0000006f,0x0003003e,0x000001cd, + 0x000001ce,0x00060039,0x0000002e,0x000001cf,0x00000037,0x000001cc,0x000001cd,0x0003003e, + 0x000001c9,0x000001cf,0x0004003d,0x00000013,0x000001d1,0x0000006e,0x0004007c,0x0000001c, + 0x000001d2,0x000001d1,0x0003003e,0x000001d3,0x000001d2,0x0004003d,0x00000006,0x000001d5, + 0x0000006f,0x0003003e,0x000001d4,0x000001d5,0x00060039,0x0000002e,0x000001d6,0x00000037, + 0x000001d3,0x000001d4,0x0003003e,0x000001d0,0x000001d6,0x0004003d,0x0000002e,0x000001d8, + 0x000001bb,0x0003003e,0x000001d7,0x000001d8,0x0004003d,0x0000002e,0x000001da,0x000001c2, + 0x0003003e,0x000001d9,0x000001da,0x0004003d,0x0000002e,0x000001dc,0x000001c9,0x0003003e, + 0x000001db,0x000001dc,0x0004003d,0x0000002e,0x000001de,0x000001d0,0x0003003e,0x000001dd, + 0x000001de,0x00080039,0x0000002e,0x000001df,0x0000005a,0x000001d7,0x000001d9,0x000001db, + 0x000001dd,0x000200fe,0x000001df,0x00010038,0x00050036,0x0000002e,0x00000075,0x00000000, + 0x00000072,0x00030037,0x00000069,0x00000073,0x00030037,0x00000007,0x00000074,0x000200f8, + 0x00000076,0x0004003b,0x00000069,0x000001ee,0x00000007,0x0004003b,0x00000069,0x000001ef, + 0x00000007,0x0004003b,0x00000069,0x000001f0,0x00000007,0x0004003b,0x00000069,0x000001f1, + 0x00000007,0x0004003b,0x00000007,0x000001f2,0x00000007,0x0004003d,0x00000013,0x000001e2, + 0x00000073,0x00050080,0x00000013,0x000001e4,0x000001e2,0x000001e3,0x0004003d,0x00000013, + 0x000001e5,0x00000073,0x00050080,0x00000013,0x000001e7,0x000001e5,0x000001e6,0x0004003d, + 0x00000013,0x000001e8,0x00000073,0x00050080,0x00000013,0x000001ea,0x000001e8,0x000001e9, + 0x0004003d,0x00000013,0x000001eb,0x00000073,0x00050080,0x00000013,0x000001ed,0x000001eb, + 0x000001ec,0x0003003e,0x000001ee,0x000001e4,0x0003003e,0x000001ef,0x000001e7,0x0003003e, + 0x000001f0,0x000001ea,0x0003003e,0x000001f1,0x000001ed,0x0004003d,0x00000006,0x000001f3, + 0x00000074,0x0003003e,0x000001f2,0x000001f3,0x00090039,0x0000002e,0x000001f4,0x00000070, + 0x000001ee,0x000001ef,0x000001f0,0x000001f1,0x000001f2,0x000200fe,0x000001f4,0x00010038, + 0x00050036,0x0000002e,0x0000007c,0x00000000,0x0000006a,0x00030037,0x00000069,0x00000077, + 0x00030037,0x00000069,0x00000078,0x00030037,0x00000069,0x00000079,0x00030037,0x00000069, + 0x0000007a,0x00030037,0x00000007,0x0000007b,0x000200f8,0x0000007d,0x0004003b,0x00000039, + 0x000001f7,0x00000007,0x0004003b,0x0000002d,0x000001fb,0x00000007,0x0004003b,0x00000007, + 0x000001fc,0x00000007,0x0004003b,0x00000039,0x000001ff,0x00000007,0x0004003b,0x0000002d, + 0x00000203,0x00000007,0x0004003b,0x00000007,0x00000204,0x00000007,0x0004003b,0x00000039, + 0x00000207,0x00000007,0x0004003b,0x0000002d,0x0000020b,0x00000007,0x0004003b,0x00000007, + 0x0000020c,0x00000007,0x0004003b,0x00000039,0x0000020f,0x00000007,0x0004003b,0x0000002d, + 0x00000213,0x00000007,0x0004003b,0x00000007,0x00000214,0x00000007,0x0004003b,0x00000039, + 0x00000217,0x00000007,0x0004003b,0x00000039,0x00000219,0x00000007,0x0004003b,0x00000039, + 0x0000021b,0x00000007,0x0004003b,0x00000039,0x0000021d,0x00000007,0x0004003d,0x00000013, + 0x000001f8,0x00000077,0x0004007c,0x0000001c,0x000001f9,0x000001f8,0x0004006f,0x0000002c, + 0x000001fa,0x000001f9,0x0003003e,0x000001fb,0x000001fa,0x0004003d,0x00000006,0x000001fd, + 0x0000007b,0x0003003e,0x000001fc,0x000001fd,0x00060039,0x0000002e,0x000001fe,0x00000032, + 0x000001fb,0x000001fc,0x0003003e,0x000001f7,0x000001fe,0x0004003d,0x00000013,0x00000200, + 0x00000078,0x0004007c,0x0000001c,0x00000201,0x00000200,0x0004006f,0x0000002c,0x00000202, + 0x00000201,0x0003003e,0x00000203,0x00000202,0x0004003d,0x00000006,0x00000205,0x0000007b, + 0x0003003e,0x00000204,0x00000205,0x00060039,0x0000002e,0x00000206,0x00000032,0x00000203, + 0x00000204,0x0003003e,0x000001ff,0x00000206,0x0004003d,0x00000013,0x00000208,0x00000079, + 0x0004007c,0x0000001c,0x00000209,0x00000208,0x0004006f,0x0000002c,0x0000020a,0x00000209, + 0x0003003e,0x0000020b,0x0000020a,0x0004003d,0x00000006,0x0000020d,0x0000007b,0x0003003e, + 0x0000020c,0x0000020d,0x00060039,0x0000002e,0x0000020e,0x00000032,0x0000020b,0x0000020c, + 0x0003003e,0x00000207,0x0000020e,0x0004003d,0x00000013,0x00000210,0x0000007a,0x0004007c, + 0x0000001c,0x00000211,0x00000210,0x0004006f,0x0000002c,0x00000212,0x00000211,0x0003003e, + 0x00000213,0x00000212,0x0004003d,0x00000006,0x00000215,0x0000007b,0x0003003e,0x00000214, + 0x00000215,0x00060039,0x0000002e,0x00000216,0x00000032,0x00000213,0x00000214,0x0003003e, + 0x0000020f,0x00000216,0x0004003d,0x0000002e,0x00000218,0x000001f7,0x0003003e,0x00000217, + 0x00000218,0x0004003d,0x0000002e,0x0000021a,0x000001ff,0x0003003e,0x00000219,0x0000021a, + 0x0004003d,0x0000002e,0x0000021c,0x00000207,0x0003003e,0x0000021b,0x0000021c,0x0004003d, + 0x0000002e,0x0000021e,0x0000020f,0x0003003e,0x0000021d,0x0000021e,0x00080039,0x0000002e, + 0x0000021f,0x0000005a,0x00000217,0x00000219,0x0000021b,0x0000021d,0x000200fe,0x0000021f, + 0x00010038,0x00050036,0x0000002e,0x00000080,0x00000000,0x00000072,0x00030037,0x00000069, + 0x0000007e,0x00030037,0x00000007,0x0000007f,0x000200f8,0x00000081,0x0004003b,0x00000069, + 0x0000022a,0x00000007,0x0004003b,0x00000069,0x0000022b,0x00000007,0x0004003b,0x00000069, + 0x0000022c,0x00000007,0x0004003b,0x00000069,0x0000022d,0x00000007,0x0004003b,0x00000007, + 0x0000022e,0x00000007,0x0004003d,0x00000013,0x00000222,0x0000007e,0x00050080,0x00000013, + 0x00000223,0x00000222,0x000001e3,0x0004003d,0x00000013,0x00000224,0x0000007e,0x00050080, + 0x00000013,0x00000225,0x00000224,0x000001e6,0x0004003d,0x00000013,0x00000226,0x0000007e, + 0x00050080,0x00000013,0x00000227,0x00000226,0x000001e9,0x0004003d,0x00000013,0x00000228, + 0x0000007e,0x00050080,0x00000013,0x00000229,0x00000228,0x000001ec,0x0003003e,0x0000022a, + 0x00000223,0x0003003e,0x0000022b,0x00000225,0x0003003e,0x0000022c,0x00000227,0x0003003e, + 0x0000022d,0x00000229,0x0004003d,0x00000006,0x0000022f,0x0000007f,0x0003003e,0x0000022e, + 0x0000022f,0x00090039,0x0000002e,0x00000230,0x0000007c,0x0000022a,0x0000022b,0x0000022c, + 0x0000022d,0x0000022e,0x000200fe,0x00000230,0x00010038,0x00050036,0x00000002,0x00000089, + 0x00000000,0x00000082,0x00030037,0x00000007,0x00000083,0x00030037,0x00000007,0x00000084, + 0x00030037,0x00000069,0x00000085,0x00030037,0x00000007,0x00000086,0x00030037,0x00000007, + 0x00000087,0x00030037,0x00000007,0x00000088,0x000200f8,0x0000008a,0x0004003b,0x0000001d, + 0x00000233,0x00000007,0x0004003b,0x0000001d,0x00000241,0x00000007,0x0004003b,0x0000024f, + 0x00000250,0x00000007,0x0004003b,0x00000069,0x00000253,0x00000007,0x0004003b,0x00000007, + 0x00000254,0x00000007,0x0004003b,0x0000001d,0x00000258,0x00000007,0x0004003b,0x00000039, + 0x0000025a,0x00000007,0x0004003b,0x00000007,0x0000025d,0x00000007,0x0004003b,0x00000007, + 0x0000025e,0x00000007,0x0004003b,0x00000069,0x0000027c,0x00000007,0x0004003b,0x00000007, + 0x0000027d,0x00000007,0x0004003b,0x0000001d,0x00000281,0x00000007,0x0004003b,0x00000039, + 0x00000283,0x00000007,0x0004003b,0x00000007,0x00000286,0x00000007,0x0004003b,0x00000007, + 0x00000287,0x00000007,0x0004003b,0x00000069,0x000002a5,0x00000007,0x0004003b,0x00000007, + 0x000002a6,0x00000007,0x0004003b,0x0000001d,0x000002aa,0x00000007,0x0004003b,0x00000039, + 0x000002ac,0x00000007,0x0004003b,0x00000007,0x000002af,0x00000007,0x0004003b,0x00000007, + 0x000002b0,0x00000007,0x0004003b,0x00000069,0x000002cf,0x00000007,0x0004003b,0x00000007, + 0x000002d0,0x00000007,0x0004003b,0x0000001d,0x000002d4,0x00000007,0x0004003b,0x00000039, + 0x000002d6,0x00000007,0x0004003b,0x00000007,0x000002d9,0x00000007,0x0004003b,0x00000007, + 0x000002da,0x00000007,0x0004003b,0x00000039,0x000002e2,0x00000007,0x0004003b,0x00000039, + 0x000002e7,0x00000007,0x0004003b,0x00000039,0x000002ec,0x00000007,0x0004003b,0x00000039, + 0x000002f1,0x00000007,0x0004003b,0x0000001d,0x00000307,0x00000007,0x0004003b,0x00000039, + 0x00000308,0x00000007,0x0004003b,0x00000007,0x0000030b,0x00000007,0x0004003b,0x00000007, + 0x0000030c,0x00000007,0x0004003b,0x00000007,0x00000313,0x00000007,0x0004003b,0x00000007, + 0x00000314,0x00000007,0x0004003b,0x00000039,0x00000315,0x00000007,0x0004003b,0x0000001d, + 0x00000327,0x00000007,0x0004003b,0x00000039,0x00000328,0x00000007,0x0004003b,0x00000007, + 0x0000032b,0x00000007,0x0004003b,0x00000007,0x0000032c,0x00000007,0x0004003b,0x00000007, + 0x00000334,0x00000007,0x0004003b,0x00000007,0x00000335,0x00000007,0x0004003b,0x00000039, + 0x00000336,0x00000007,0x0004003b,0x0000001d,0x00000347,0x00000007,0x0004003b,0x00000039, + 0x00000348,0x00000007,0x0004003b,0x00000007,0x0000034b,0x00000007,0x0004003b,0x00000007, + 0x0000034c,0x00000007,0x0004003b,0x00000007,0x00000354,0x00000007,0x0004003b,0x00000007, + 0x00000355,0x00000007,0x0004003b,0x00000039,0x00000356,0x00000007,0x0004003b,0x0000001d, + 0x00000368,0x00000007,0x0004003b,0x00000039,0x00000369,0x00000007,0x0004003b,0x00000007, + 0x0000036c,0x00000007,0x0004003b,0x00000007,0x0000036d,0x00000007,0x0004003b,0x00000007, + 0x00000376,0x00000007,0x0004003b,0x00000007,0x00000377,0x00000007,0x0004003b,0x00000039, + 0x00000378,0x00000007,0x0004003d,0x00000013,0x00000234,0x00000085,0x00050050,0x00000013, + 0x00000236,0x00000235,0x00000235,0x00050084,0x00000013,0x00000237,0x00000234,0x00000236, + 0x0004007c,0x0000001c,0x00000238,0x00000237,0x0004003d,0x00000006,0x00000239,0x00000083, + 0x00050084,0x00000006,0x0000023a,0x00000239,0x000000e1,0x0004007c,0x0000001b,0x0000023b, + 0x0000023a,0x0004003d,0x00000006,0x0000023c,0x00000084,0x00050084,0x00000006,0x0000023d, + 0x0000023c,0x000000e1,0x0004007c,0x0000001b,0x0000023e,0x0000023d,0x00050050,0x0000001c, + 0x0000023f,0x0000023b,0x0000023e,0x00050080,0x0000001c,0x00000240,0x00000238,0x0000023f, + 0x0003003e,0x00000233,0x00000240,0x0004003d,0x00000013,0x00000242,0x00000085,0x00050050, + 0x00000013,0x00000244,0x00000243,0x00000243,0x00050084,0x00000013,0x00000245,0x00000242, + 0x00000244,0x0004007c,0x0000001c,0x00000246,0x00000245,0x0004003d,0x00000006,0x00000247, + 0x00000083,0x0004007c,0x0000001b,0x00000248,0x00000247,0x0004003d,0x00000006,0x00000249, + 0x00000084,0x0004007c,0x0000001b,0x0000024a,0x00000249,0x00050050,0x0000001c,0x0000024b, + 0x00000248,0x0000024a,0x00050080,0x0000001c,0x0000024c,0x00000246,0x0000024b,0x0003003e, + 0x00000241,0x0000024c,0x0004003d,0x0000001c,0x00000251,0x00000233,0x0004007c,0x00000013, + 0x00000252,0x00000251,0x0003003e,0x00000253,0x00000252,0x0004003d,0x00000006,0x00000255, + 0x00000088,0x0003003e,0x00000254,0x00000255,0x00060039,0x0000002e,0x00000256,0x00000080, + 0x00000253,0x00000254,0x00050041,0x00000039,0x00000257,0x00000250,0x000000db,0x0003003e, + 0x00000257,0x00000256,0x0004003d,0x0000001c,0x00000259,0x00000241,0x0003003e,0x00000258, + 0x00000259,0x00050041,0x00000039,0x0000025b,0x00000250,0x000000db,0x0004003d,0x0000002e, + 0x0000025c,0x0000025b,0x0003003e,0x0000025a,0x0000025c,0x0003003e,0x0000025d,0x0000010f, + 0x0004003d,0x00000006,0x0000025f,0x00000088,0x0003003e,0x0000025e,0x0000025f,0x00080039, + 0x00000002,0x00000260,0x0000003f,0x00000258,0x0000025a,0x0000025d,0x0000025e,0x0004003d, + 0x00000013,0x00000261,0x00000085,0x00050050,0x00000013,0x00000262,0x00000235,0x00000235, + 0x00050084,0x00000013,0x00000263,0x00000261,0x00000262,0x0004007c,0x0000001c,0x00000264, + 0x00000263,0x0004003d,0x00000006,0x00000265,0x00000083,0x00050084,0x00000006,0x00000266, + 0x00000265,0x000000e1,0x00050080,0x00000006,0x00000267,0x00000266,0x00000243,0x0004007c, + 0x0000001b,0x00000268,0x00000267,0x0004003d,0x00000006,0x00000269,0x00000084,0x00050084, + 0x00000006,0x0000026a,0x00000269,0x000000e1,0x0004007c,0x0000001b,0x0000026b,0x0000026a, + 0x00050050,0x0000001c,0x0000026c,0x00000268,0x0000026b,0x00050080,0x0000001c,0x0000026d, + 0x00000264,0x0000026c,0x0003003e,0x00000233,0x0000026d,0x0004003d,0x00000013,0x0000026e, + 0x00000085,0x00050050,0x00000013,0x0000026f,0x00000243,0x00000243,0x00050084,0x00000013, + 0x00000270,0x0000026e,0x0000026f,0x0004007c,0x0000001c,0x00000271,0x00000270,0x0004003d, + 0x00000006,0x00000272,0x00000083,0x00050080,0x00000006,0x00000273,0x00000272,0x00000158, + 0x0004007c,0x0000001b,0x00000274,0x00000273,0x0004003d,0x00000006,0x00000275,0x00000084, + 0x0004007c,0x0000001b,0x00000276,0x00000275,0x00050050,0x0000001c,0x00000277,0x00000274, + 0x00000276,0x00050080,0x0000001c,0x00000278,0x00000271,0x00000277,0x0003003e,0x00000241, + 0x00000278,0x0004003d,0x0000001c,0x0000027a,0x00000233,0x0004007c,0x00000013,0x0000027b, + 0x0000027a,0x0003003e,0x0000027c,0x0000027b,0x0004003d,0x00000006,0x0000027e,0x00000088, + 0x0003003e,0x0000027d,0x0000027e,0x00060039,0x0000002e,0x0000027f,0x00000080,0x0000027c, + 0x0000027d,0x00050041,0x00000039,0x00000280,0x00000250,0x00000279,0x0003003e,0x00000280, + 0x0000027f,0x0004003d,0x0000001c,0x00000282,0x00000241,0x0003003e,0x00000281,0x00000282, + 0x00050041,0x00000039,0x00000284,0x00000250,0x00000279,0x0004003d,0x0000002e,0x00000285, + 0x00000284,0x0003003e,0x00000283,0x00000285,0x0003003e,0x00000286,0x0000010f,0x0004003d, + 0x00000006,0x00000288,0x00000088,0x0003003e,0x00000287,0x00000288,0x00080039,0x00000002, + 0x00000289,0x0000003f,0x00000281,0x00000283,0x00000286,0x00000287,0x0004003d,0x00000013, + 0x0000028a,0x00000085,0x00050050,0x00000013,0x0000028b,0x00000235,0x00000235,0x00050084, + 0x00000013,0x0000028c,0x0000028a,0x0000028b,0x0004007c,0x0000001c,0x0000028d,0x0000028c, + 0x0004003d,0x00000006,0x0000028e,0x00000083,0x00050084,0x00000006,0x0000028f,0x0000028e, + 0x000000e1,0x0004007c,0x0000001b,0x00000290,0x0000028f,0x0004003d,0x00000006,0x00000291, + 0x00000084,0x00050084,0x00000006,0x00000292,0x00000291,0x000000e1,0x00050080,0x00000006, + 0x00000293,0x00000292,0x00000243,0x0004007c,0x0000001b,0x00000294,0x00000293,0x00050050, + 0x0000001c,0x00000295,0x00000290,0x00000294,0x00050080,0x0000001c,0x00000296,0x0000028d, + 0x00000295,0x0003003e,0x00000233,0x00000296,0x0004003d,0x00000013,0x00000297,0x00000085, + 0x00050050,0x00000013,0x00000298,0x00000243,0x00000243,0x00050084,0x00000013,0x00000299, + 0x00000297,0x00000298,0x0004007c,0x0000001c,0x0000029a,0x00000299,0x0004003d,0x00000006, + 0x0000029b,0x00000083,0x0004007c,0x0000001b,0x0000029c,0x0000029b,0x0004003d,0x00000006, + 0x0000029d,0x00000084,0x00050080,0x00000006,0x0000029e,0x0000029d,0x00000158,0x0004007c, + 0x0000001b,0x0000029f,0x0000029e,0x00050050,0x0000001c,0x000002a0,0x0000029c,0x0000029f, + 0x00050080,0x0000001c,0x000002a1,0x0000029a,0x000002a0,0x0003003e,0x00000241,0x000002a1, + 0x0004003d,0x0000001c,0x000002a3,0x00000233,0x0004007c,0x00000013,0x000002a4,0x000002a3, + 0x0003003e,0x000002a5,0x000002a4,0x0004003d,0x00000006,0x000002a7,0x00000088,0x0003003e, + 0x000002a6,0x000002a7,0x00060039,0x0000002e,0x000002a8,0x00000080,0x000002a5,0x000002a6, + 0x00050041,0x00000039,0x000002a9,0x00000250,0x000002a2,0x0003003e,0x000002a9,0x000002a8, + 0x0004003d,0x0000001c,0x000002ab,0x00000241,0x0003003e,0x000002aa,0x000002ab,0x00050041, + 0x00000039,0x000002ad,0x00000250,0x000002a2,0x0004003d,0x0000002e,0x000002ae,0x000002ad, + 0x0003003e,0x000002ac,0x000002ae,0x0003003e,0x000002af,0x0000010f,0x0004003d,0x00000006, + 0x000002b1,0x00000088,0x0003003e,0x000002b0,0x000002b1,0x00080039,0x00000002,0x000002b2, + 0x0000003f,0x000002aa,0x000002ac,0x000002af,0x000002b0,0x0004003d,0x00000013,0x000002b3, + 0x00000085,0x00050050,0x00000013,0x000002b4,0x00000235,0x00000235,0x00050084,0x00000013, + 0x000002b5,0x000002b3,0x000002b4,0x0004007c,0x0000001c,0x000002b6,0x000002b5,0x0004003d, + 0x00000006,0x000002b7,0x00000083,0x00050084,0x00000006,0x000002b8,0x000002b7,0x000000e1, + 0x00050080,0x00000006,0x000002b9,0x000002b8,0x00000243,0x0004007c,0x0000001b,0x000002ba, + 0x000002b9,0x0004003d,0x00000006,0x000002bb,0x00000084,0x00050084,0x00000006,0x000002bc, + 0x000002bb,0x000000e1,0x00050080,0x00000006,0x000002bd,0x000002bc,0x00000243,0x0004007c, + 0x0000001b,0x000002be,0x000002bd,0x00050050,0x0000001c,0x000002bf,0x000002ba,0x000002be, + 0x00050080,0x0000001c,0x000002c0,0x000002b6,0x000002bf,0x0003003e,0x00000233,0x000002c0, + 0x0004003d,0x00000013,0x000002c1,0x00000085,0x00050050,0x00000013,0x000002c2,0x00000243, + 0x00000243,0x00050084,0x00000013,0x000002c3,0x000002c1,0x000002c2,0x0004007c,0x0000001c, + 0x000002c4,0x000002c3,0x0004003d,0x00000006,0x000002c5,0x00000083,0x00050080,0x00000006, + 0x000002c6,0x000002c5,0x00000158,0x0004007c,0x0000001b,0x000002c7,0x000002c6,0x0004003d, + 0x00000006,0x000002c8,0x00000084,0x00050080,0x00000006,0x000002c9,0x000002c8,0x00000158, + 0x0004007c,0x0000001b,0x000002ca,0x000002c9,0x00050050,0x0000001c,0x000002cb,0x000002c7, + 0x000002ca,0x00050080,0x0000001c,0x000002cc,0x000002c4,0x000002cb,0x0003003e,0x00000241, + 0x000002cc,0x0004003d,0x0000001c,0x000002cd,0x00000233,0x0004007c,0x00000013,0x000002ce, + 0x000002cd,0x0003003e,0x000002cf,0x000002ce,0x0004003d,0x00000006,0x000002d1,0x00000088, + 0x0003003e,0x000002d0,0x000002d1,0x00060039,0x0000002e,0x000002d2,0x00000080,0x000002cf, + 0x000002d0,0x00050041,0x00000039,0x000002d3,0x00000250,0x00000102,0x0003003e,0x000002d3, + 0x000002d2,0x0004003d,0x0000001c,0x000002d5,0x00000241,0x0003003e,0x000002d4,0x000002d5, + 0x00050041,0x00000039,0x000002d7,0x00000250,0x00000102,0x0004003d,0x0000002e,0x000002d8, + 0x000002d7,0x0003003e,0x000002d6,0x000002d8,0x0003003e,0x000002d9,0x0000010f,0x0004003d, + 0x00000006,0x000002db,0x00000088,0x0003003e,0x000002da,0x000002db,0x00080039,0x00000002, + 0x000002dc,0x0000003f,0x000002d4,0x000002d6,0x000002d9,0x000002da,0x0004003d,0x00000006, + 0x000002dd,0x00000087,0x000500b2,0x0000005e,0x000002de,0x000002dd,0x000000e8,0x000300f7, + 0x000002e0,0x00000000,0x000400fa,0x000002de,0x000002df,0x000002e0,0x000200f8,0x000002df, + 0x000100fd,0x000200f8,0x000002e0,0x00050041,0x00000039,0x000002e3,0x00000250,0x000000db, + 0x0004003d,0x0000002e,0x000002e4,0x000002e3,0x0003003e,0x000002e2,0x000002e4,0x00050039, + 0x0000002e,0x000002e5,0x00000067,0x000002e2,0x00050041,0x00000039,0x000002e6,0x00000250, + 0x000000db,0x0003003e,0x000002e6,0x000002e5,0x00050041,0x00000039,0x000002e8,0x00000250, + 0x00000279,0x0004003d,0x0000002e,0x000002e9,0x000002e8,0x0003003e,0x000002e7,0x000002e9, + 0x00050039,0x0000002e,0x000002ea,0x00000067,0x000002e7,0x00050041,0x00000039,0x000002eb, + 0x00000250,0x00000279,0x0003003e,0x000002eb,0x000002ea,0x00050041,0x00000039,0x000002ed, + 0x00000250,0x000002a2,0x0004003d,0x0000002e,0x000002ee,0x000002ed,0x0003003e,0x000002ec, + 0x000002ee,0x00050039,0x0000002e,0x000002ef,0x00000067,0x000002ec,0x00050041,0x00000039, + 0x000002f0,0x00000250,0x000002a2,0x0003003e,0x000002f0,0x000002ef,0x00050041,0x00000039, + 0x000002f2,0x00000250,0x00000102,0x0004003d,0x0000002e,0x000002f3,0x000002f2,0x0003003e, + 0x000002f1,0x000002f3,0x00050039,0x0000002e,0x000002f4,0x00000067,0x000002f1,0x00050041, + 0x00000039,0x000002f5,0x00000250,0x00000102,0x0003003e,0x000002f5,0x000002f4,0x0004003d, + 0x00000006,0x000002f6,0x00000086,0x00050089,0x00000006,0x000002f7,0x000002f6,0x0000024d, + 0x000500aa,0x0000005e,0x000002f8,0x000002f7,0x0000010f,0x000300f7,0x000002fa,0x00000000, + 0x000400fa,0x000002f8,0x000002f9,0x000002fa,0x000200f8,0x000002f9,0x0004003d,0x00000013, + 0x000002fb,0x00000085,0x00050050,0x00000013,0x000002fc,0x00000158,0x00000158,0x00050084, + 0x00000013,0x000002fd,0x000002fb,0x000002fc,0x0004007c,0x0000001c,0x000002fe,0x000002fd, + 0x0004003d,0x00000006,0x000002ff,0x00000083,0x00050086,0x00000006,0x00000300,0x000002ff, + 0x000000e1,0x0004007c,0x0000001b,0x00000301,0x00000300,0x0004003d,0x00000006,0x00000302, + 0x00000084,0x00050086,0x00000006,0x00000303,0x00000302,0x000000e1,0x0004007c,0x0000001b, + 0x00000304,0x00000303,0x00050050,0x0000001c,0x00000305,0x00000301,0x00000304,0x00050080, + 0x0000001c,0x00000306,0x000002fe,0x00000305,0x0003003e,0x00000307,0x00000306,0x00050041, + 0x00000039,0x00000309,0x00000250,0x000000db,0x0004003d,0x0000002e,0x0000030a,0x00000309, + 0x0003003e,0x00000308,0x0000030a,0x0003003e,0x0000030b,0x000000e8,0x0004003d,0x00000006, + 0x0000030d,0x00000088,0x0003003e,0x0000030c,0x0000030d,0x00080039,0x00000002,0x0000030e, + 0x0000003f,0x00000307,0x00000308,0x0000030b,0x0000030c,0x0004003d,0x00000006,0x0000030f, + 0x00000083,0x00050086,0x00000006,0x00000310,0x0000030f,0x000000e1,0x0004003d,0x00000006, + 0x00000311,0x00000084,0x00050086,0x00000006,0x00000312,0x00000311,0x000000e1,0x0003003e, + 0x00000313,0x00000310,0x0003003e,0x00000314,0x00000312,0x00050041,0x00000039,0x00000316, + 0x00000250,0x000000db,0x0004003d,0x0000002e,0x00000317,0x00000316,0x0003003e,0x00000315, + 0x00000317,0x00070039,0x00000002,0x00000318,0x00000053,0x00000313,0x00000314,0x00000315, + 0x0004003d,0x00000013,0x00000319,0x00000085,0x00050050,0x00000013,0x0000031a,0x00000158, + 0x00000158,0x00050084,0x00000013,0x0000031b,0x00000319,0x0000031a,0x0004007c,0x0000001c, + 0x0000031c,0x0000031b,0x0004003d,0x00000006,0x0000031d,0x00000083,0x00050086,0x00000006, + 0x0000031e,0x0000031d,0x000000e1,0x00050080,0x00000006,0x00000320,0x0000031e,0x0000031f, + 0x0004007c,0x0000001b,0x00000321,0x00000320,0x0004003d,0x00000006,0x00000322,0x00000084, + 0x00050086,0x00000006,0x00000323,0x00000322,0x000000e1,0x0004007c,0x0000001b,0x00000324, + 0x00000323,0x00050050,0x0000001c,0x00000325,0x00000321,0x00000324,0x00050080,0x0000001c, + 0x00000326,0x0000031c,0x00000325,0x0003003e,0x00000327,0x00000326,0x00050041,0x00000039, + 0x00000329,0x00000250,0x00000279,0x0004003d,0x0000002e,0x0000032a,0x00000329,0x0003003e, + 0x00000328,0x0000032a,0x0003003e,0x0000032b,0x000000e8,0x0004003d,0x00000006,0x0000032d, + 0x00000088,0x0003003e,0x0000032c,0x0000032d,0x00080039,0x00000002,0x0000032e,0x0000003f, + 0x00000327,0x00000328,0x0000032b,0x0000032c,0x0004003d,0x00000006,0x0000032f,0x00000083, + 0x00050086,0x00000006,0x00000330,0x0000032f,0x000000e1,0x00050080,0x00000006,0x00000331, + 0x00000330,0x0000031f,0x0004003d,0x00000006,0x00000332,0x00000084,0x00050086,0x00000006, + 0x00000333,0x00000332,0x000000e1,0x0003003e,0x00000334,0x00000331,0x0003003e,0x00000335, + 0x00000333,0x00050041,0x00000039,0x00000337,0x00000250,0x00000279,0x0004003d,0x0000002e, + 0x00000338,0x00000337,0x0003003e,0x00000336,0x00000338,0x00070039,0x00000002,0x00000339, + 0x00000053,0x00000334,0x00000335,0x00000336,0x0004003d,0x00000013,0x0000033a,0x00000085, + 0x00050050,0x00000013,0x0000033b,0x00000158,0x00000158,0x00050084,0x00000013,0x0000033c, + 0x0000033a,0x0000033b,0x0004007c,0x0000001c,0x0000033d,0x0000033c,0x0004003d,0x00000006, + 0x0000033e,0x00000083,0x00050086,0x00000006,0x0000033f,0x0000033e,0x000000e1,0x0004007c, + 0x0000001b,0x00000340,0x0000033f,0x0004003d,0x00000006,0x00000341,0x00000084,0x00050086, + 0x00000006,0x00000342,0x00000341,0x000000e1,0x00050080,0x00000006,0x00000343,0x00000342, + 0x0000031f,0x0004007c,0x0000001b,0x00000344,0x00000343,0x00050050,0x0000001c,0x00000345, + 0x00000340,0x00000344,0x00050080,0x0000001c,0x00000346,0x0000033d,0x00000345,0x0003003e, + 0x00000347,0x00000346,0x00050041,0x00000039,0x00000349,0x00000250,0x000002a2,0x0004003d, + 0x0000002e,0x0000034a,0x00000349,0x0003003e,0x00000348,0x0000034a,0x0003003e,0x0000034b, + 0x000000e8,0x0004003d,0x00000006,0x0000034d,0x00000088,0x0003003e,0x0000034c,0x0000034d, + 0x00080039,0x00000002,0x0000034e,0x0000003f,0x00000347,0x00000348,0x0000034b,0x0000034c, + 0x0004003d,0x00000006,0x0000034f,0x00000083,0x00050086,0x00000006,0x00000350,0x0000034f, + 0x000000e1,0x0004003d,0x00000006,0x00000351,0x00000084,0x00050086,0x00000006,0x00000352, + 0x00000351,0x000000e1,0x00050080,0x00000006,0x00000353,0x00000352,0x0000031f,0x0003003e, + 0x00000354,0x00000350,0x0003003e,0x00000355,0x00000353,0x00050041,0x00000039,0x00000357, + 0x00000250,0x000002a2,0x0004003d,0x0000002e,0x00000358,0x00000357,0x0003003e,0x00000356, + 0x00000358,0x00070039,0x00000002,0x00000359,0x00000053,0x00000354,0x00000355,0x00000356, + 0x0004003d,0x00000013,0x0000035a,0x00000085,0x00050050,0x00000013,0x0000035b,0x00000158, + 0x00000158,0x00050084,0x00000013,0x0000035c,0x0000035a,0x0000035b,0x0004007c,0x0000001c, + 0x0000035d,0x0000035c,0x0004003d,0x00000006,0x0000035e,0x00000083,0x00050086,0x00000006, + 0x0000035f,0x0000035e,0x000000e1,0x00050080,0x00000006,0x00000360,0x0000035f,0x0000031f, + 0x0004007c,0x0000001b,0x00000361,0x00000360,0x0004003d,0x00000006,0x00000362,0x00000084, + 0x00050086,0x00000006,0x00000363,0x00000362,0x000000e1,0x00050080,0x00000006,0x00000364, + 0x00000363,0x0000031f,0x0004007c,0x0000001b,0x00000365,0x00000364,0x00050050,0x0000001c, + 0x00000366,0x00000361,0x00000365,0x00050080,0x0000001c,0x00000367,0x0000035d,0x00000366, + 0x0003003e,0x00000368,0x00000367,0x00050041,0x00000039,0x0000036a,0x00000250,0x00000102, + 0x0004003d,0x0000002e,0x0000036b,0x0000036a,0x0003003e,0x00000369,0x0000036b,0x0003003e, + 0x0000036c,0x000000e8,0x0004003d,0x00000006,0x0000036e,0x00000088,0x0003003e,0x0000036d, + 0x0000036e,0x00080039,0x00000002,0x0000036f,0x0000003f,0x00000368,0x00000369,0x0000036c, + 0x0000036d,0x0004003d,0x00000006,0x00000370,0x00000083,0x00050086,0x00000006,0x00000371, + 0x00000370,0x000000e1,0x00050080,0x00000006,0x00000372,0x00000371,0x0000031f,0x0004003d, + 0x00000006,0x00000373,0x00000084,0x00050086,0x00000006,0x00000374,0x00000373,0x000000e1, + 0x00050080,0x00000006,0x00000375,0x00000374,0x0000031f,0x0003003e,0x00000376,0x00000372, + 0x0003003e,0x00000377,0x00000375,0x00050041,0x00000039,0x00000379,0x00000250,0x00000102, + 0x0004003d,0x0000002e,0x0000037a,0x00000379,0x0003003e,0x00000378,0x0000037a,0x00070039, + 0x00000002,0x0000037b,0x00000053,0x00000376,0x00000377,0x00000378,0x000200f9,0x000002fa, + 0x000200f8,0x000002fa,0x000100fd,0x00010038,0x00050036,0x00000002,0x00000091,0x00000000, + 0x00000082,0x00030037,0x00000007,0x0000008b,0x00030037,0x00000007,0x0000008c,0x00030037, + 0x00000069,0x0000008d,0x00030037,0x00000007,0x0000008e,0x00030037,0x00000007,0x0000008f, + 0x00030037,0x00000007,0x00000090,0x000200f8,0x00000092,0x0004003b,0x00000007,0x0000037c, + 0x00000007,0x0004003b,0x00000007,0x0000037e,0x00000007,0x0004003b,0x00000069,0x00000380, + 0x00000007,0x0004003b,0x00000007,0x00000382,0x00000007,0x0004003b,0x00000007,0x00000384, + 0x00000007,0x0004003b,0x00000007,0x00000386,0x00000007,0x0004003d,0x00000006,0x0000037d, + 0x0000008b,0x0003003e,0x0000037c,0x0000037d,0x0004003d,0x00000006,0x0000037f,0x0000008c, + 0x0003003e,0x0000037e,0x0000037f,0x0004003d,0x00000013,0x00000381,0x0000008d,0x0003003e, + 0x00000380,0x00000381,0x0004003d,0x00000006,0x00000383,0x0000008e,0x0003003e,0x00000382, + 0x00000383,0x0004003d,0x00000006,0x00000385,0x0000008f,0x0003003e,0x00000384,0x00000385, + 0x0004003d,0x00000006,0x00000387,0x00000090,0x0003003e,0x00000386,0x00000387,0x000a0039, + 0x00000002,0x00000388,0x00000089,0x0000037c,0x0000037e,0x00000380,0x00000382,0x00000384, + 0x00000386,0x000100fd,0x00010038,0x00050036,0x00000002,0x00000099,0x00000000,0x00000082, + 0x00030037,0x00000007,0x00000093,0x00030037,0x00000007,0x00000094,0x00030037,0x00000069, + 0x00000095,0x00030037,0x00000007,0x00000096,0x00030037,0x00000007,0x00000097,0x00030037, + 0x00000007,0x00000098,0x000200f8,0x0000009a,0x0004003b,0x00000039,0x00000389,0x00000007, + 0x0004003b,0x00000007,0x0000038a,0x00000007,0x0004003b,0x00000007,0x0000038c,0x00000007, + 0x0004003b,0x00000039,0x0000038f,0x00000007,0x0004003b,0x0000001d,0x000003a3,0x00000007, + 0x0004003b,0x00000039,0x000003a4,0x00000007,0x0004003b,0x00000007,0x000003a6,0x00000007, + 0x0004003b,0x00000007,0x000003a8,0x00000007,0x0004003b,0x00000007,0x000003b0,0x00000007, + 0x0004003b,0x00000007,0x000003b1,0x00000007,0x0004003b,0x00000039,0x000003b3,0x00000007, + 0x0004003d,0x00000006,0x0000038b,0x00000093,0x0003003e,0x0000038a,0x0000038b,0x0004003d, + 0x00000006,0x0000038d,0x00000094,0x0003003e,0x0000038c,0x0000038d,0x00060039,0x0000002e, + 0x0000038e,0x0000004d,0x0000038a,0x0000038c,0x0003003e,0x00000389,0x0000038e,0x0004003d, + 0x0000002e,0x00000390,0x00000389,0x0003003e,0x0000038f,0x00000390,0x00050039,0x0000002e, + 0x00000391,0x00000067,0x0000038f,0x0003003e,0x00000389,0x00000391,0x0004003d,0x00000006, + 0x00000392,0x00000096,0x00050089,0x00000006,0x00000393,0x00000392,0x0000024d,0x000500aa, + 0x0000005e,0x00000394,0x00000393,0x0000010f,0x000300f7,0x00000396,0x00000000,0x000400fa, + 0x00000394,0x00000395,0x00000396,0x000200f8,0x00000395,0x0004003d,0x00000013,0x00000397, + 0x00000095,0x00050050,0x00000013,0x00000398,0x0000031f,0x0000031f,0x00050084,0x00000013, + 0x00000399,0x00000397,0x00000398,0x0004007c,0x0000001c,0x0000039a,0x00000399,0x0004003d, + 0x00000006,0x0000039b,0x00000093,0x00050086,0x00000006,0x0000039c,0x0000039b,0x000000e1, + 0x0004007c,0x0000001b,0x0000039d,0x0000039c,0x0004003d,0x00000006,0x0000039e,0x00000094, + 0x00050086,0x00000006,0x0000039f,0x0000039e,0x000000e1,0x0004007c,0x0000001b,0x000003a0, + 0x0000039f,0x00050050,0x0000001c,0x000003a1,0x0000039d,0x000003a0,0x00050080,0x0000001c, + 0x000003a2,0x0000039a,0x000003a1,0x0003003e,0x000003a3,0x000003a2,0x0004003d,0x0000002e, + 0x000003a5,0x00000389,0x0003003e,0x000003a4,0x000003a5,0x0004003d,0x00000006,0x000003a7, + 0x00000097,0x0003003e,0x000003a6,0x000003a7,0x0004003d,0x00000006,0x000003a9,0x00000098, + 0x0003003e,0x000003a8,0x000003a9,0x00080039,0x00000002,0x000003aa,0x0000003f,0x000003a3, + 0x000003a4,0x000003a6,0x000003a8,0x0004003d,0x00000006,0x000003ab,0x00000093,0x0004003d, + 0x00000006,0x000003ac,0x00000094,0x00050086,0x00000006,0x000003ad,0x000003ac,0x000000e1, + 0x00050089,0x00000006,0x000003ae,0x000003ad,0x000000e1,0x00050080,0x00000006,0x000003af, + 0x000003ab,0x000003ae,0x0003003e,0x000003b0,0x000003af,0x0004003d,0x00000006,0x000003b2, + 0x00000094,0x0003003e,0x000003b1,0x000003b2,0x0004003d,0x0000002e,0x000003b4,0x00000389, + 0x0003003e,0x000003b3,0x000003b4,0x00070039,0x00000002,0x000003b5,0x00000053,0x000003b0, + 0x000003b1,0x000003b3,0x000200f9,0x00000396,0x000200f8,0x00000396,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x000000a1,0x00000000,0x00000082,0x00030037,0x00000007,0x0000009b, + 0x00030037,0x00000007,0x0000009c,0x00030037,0x00000069,0x0000009d,0x00030037,0x00000007, + 0x0000009e,0x00030037,0x00000007,0x0000009f,0x00030037,0x00000007,0x000000a0,0x000200f8, + 0x000000a2,0x0004003b,0x00000039,0x000003ba,0x00000007,0x0004003b,0x00000007,0x000003c2, + 0x00000007,0x0004003b,0x00000007,0x000003c3,0x00000007,0x0004003b,0x00000039,0x000003c5, + 0x00000007,0x0004003b,0x0000001d,0x000003d9,0x00000007,0x0004003b,0x00000039,0x000003da, + 0x00000007,0x0004003b,0x00000007,0x000003dc,0x00000007,0x0004003b,0x00000007,0x000003de, + 0x00000007,0x0004003b,0x00000007,0x000003e8,0x00000007,0x0004003b,0x00000007,0x000003e9, + 0x00000007,0x0004003b,0x00000039,0x000003ea,0x00000007,0x0004003d,0x00000006,0x000003b6, + 0x0000009e,0x000500b0,0x0000005e,0x000003b7,0x000003b6,0x00000235,0x000300f7,0x000003b9, + 0x00000000,0x000400fa,0x000003b7,0x000003b8,0x000003b9,0x000200f8,0x000003b8,0x0004003d, + 0x00000006,0x000003bb,0x0000009b,0x00050084,0x00000006,0x000003bc,0x000003bb,0x000000e1, + 0x0004003d,0x00000006,0x000003bd,0x0000009c,0x00050089,0x00000006,0x000003be,0x000003bd, + 0x000000e1,0x00050080,0x00000006,0x000003bf,0x000003bc,0x000003be,0x0004003d,0x00000006, + 0x000003c0,0x0000009c,0x00050084,0x00000006,0x000003c1,0x000003c0,0x000000e1,0x0003003e, + 0x000003c2,0x000003bf,0x0003003e,0x000003c3,0x000003c1,0x00060039,0x0000002e,0x000003c4, + 0x0000004d,0x000003c2,0x000003c3,0x0003003e,0x000003ba,0x000003c4,0x0004003d,0x0000002e, + 0x000003c6,0x000003ba,0x0003003e,0x000003c5,0x000003c6,0x00050039,0x0000002e,0x000003c7, + 0x00000067,0x000003c5,0x0003003e,0x000003ba,0x000003c7,0x0004003d,0x00000006,0x000003c8, + 0x0000009e,0x00050089,0x00000006,0x000003c9,0x000003c8,0x0000024d,0x000500aa,0x0000005e, + 0x000003ca,0x000003c9,0x0000010f,0x000300f7,0x000003cc,0x00000000,0x000400fa,0x000003ca, + 0x000003cb,0x000003cc,0x000200f8,0x000003cb,0x0004003d,0x00000013,0x000003cd,0x0000009d, + 0x00050050,0x00000013,0x000003ce,0x0000024d,0x0000024d,0x00050084,0x00000013,0x000003cf, + 0x000003cd,0x000003ce,0x0004007c,0x0000001c,0x000003d0,0x000003cf,0x0004003d,0x00000006, + 0x000003d1,0x0000009b,0x00050086,0x00000006,0x000003d2,0x000003d1,0x000000e1,0x0004007c, + 0x0000001b,0x000003d3,0x000003d2,0x0004003d,0x00000006,0x000003d4,0x0000009c,0x00050086, + 0x00000006,0x000003d5,0x000003d4,0x000000e1,0x0004007c,0x0000001b,0x000003d6,0x000003d5, + 0x00050050,0x0000001c,0x000003d7,0x000003d3,0x000003d6,0x00050080,0x0000001c,0x000003d8, + 0x000003d0,0x000003d7,0x0003003e,0x000003d9,0x000003d8,0x0004003d,0x0000002e,0x000003db, + 0x000003ba,0x0003003e,0x000003da,0x000003db,0x0004003d,0x00000006,0x000003dd,0x0000009f, + 0x0003003e,0x000003dc,0x000003dd,0x0004003d,0x00000006,0x000003df,0x000000a0,0x0003003e, + 0x000003de,0x000003df,0x00080039,0x00000002,0x000003e0,0x0000003f,0x000003d9,0x000003da, + 0x000003dc,0x000003de,0x0004003d,0x00000006,0x000003e1,0x0000009b,0x00050084,0x00000006, + 0x000003e2,0x000003e1,0x000000e1,0x0004003d,0x00000006,0x000003e3,0x0000009c,0x00050086, + 0x00000006,0x000003e4,0x000003e3,0x000000e1,0x00050080,0x00000006,0x000003e5,0x000003e2, + 0x000003e4,0x0004003d,0x00000006,0x000003e6,0x0000009c,0x00050084,0x00000006,0x000003e7, + 0x000003e6,0x000000e1,0x0003003e,0x000003e8,0x000003e5,0x0003003e,0x000003e9,0x000003e7, + 0x0004003d,0x0000002e,0x000003eb,0x000003ba,0x0003003e,0x000003ea,0x000003eb,0x00070039, + 0x00000002,0x000003ec,0x00000053,0x000003e8,0x000003e9,0x000003ea,0x000200f9,0x000003cc, + 0x000200f8,0x000003cc,0x000200f9,0x000003b9,0x000200f8,0x000003b9,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x000000a9,0x00000000,0x00000082,0x00030037,0x00000007,0x000000a3, + 0x00030037,0x00000007,0x000000a4,0x00030037,0x00000069,0x000000a5,0x00030037,0x00000007, + 0x000000a6,0x00030037,0x00000007,0x000000a7,0x00030037,0x00000007,0x000000a8,0x000200f8, + 0x000000aa,0x0004003b,0x00000039,0x000003f1,0x00000007,0x0004003b,0x00000007,0x000003f8, + 0x00000007,0x0004003b,0x00000007,0x000003f9,0x00000007,0x0004003b,0x00000039,0x000003fb, + 0x00000007,0x0004003b,0x0000001d,0x0000040f,0x00000007,0x0004003b,0x00000039,0x00000410, + 0x00000007,0x0004003b,0x00000007,0x00000412,0x00000007,0x0004003b,0x00000007,0x00000414, + 0x00000007,0x0004003b,0x00000007,0x0000041b,0x00000007,0x0004003b,0x00000007,0x0000041c, + 0x00000007,0x0004003b,0x00000039,0x0000041d,0x00000007,0x0004003d,0x00000006,0x000003ed, + 0x000000a6,0x000500b0,0x0000005e,0x000003ee,0x000003ed,0x00000158,0x000300f7,0x000003f0, + 0x00000000,0x000400fa,0x000003ee,0x000003ef,0x000003f0,0x000200f8,0x000003ef,0x0004003d, + 0x00000006,0x000003f2,0x000000a3,0x00050084,0x00000006,0x000003f3,0x000003f2,0x0000024d, + 0x0004003d,0x00000006,0x000003f4,0x000000a4,0x00050080,0x00000006,0x000003f5,0x000003f3, + 0x000003f4,0x0004003d,0x00000006,0x000003f6,0x000000a4,0x00050084,0x00000006,0x000003f7, + 0x000003f6,0x0000024d,0x0003003e,0x000003f8,0x000003f5,0x0003003e,0x000003f9,0x000003f7, + 0x00060039,0x0000002e,0x000003fa,0x0000004d,0x000003f8,0x000003f9,0x0003003e,0x000003f1, + 0x000003fa,0x0004003d,0x0000002e,0x000003fc,0x000003f1,0x0003003e,0x000003fb,0x000003fc, + 0x00050039,0x0000002e,0x000003fd,0x00000067,0x000003fb,0x0003003e,0x000003f1,0x000003fd, + 0x0004003d,0x00000006,0x000003fe,0x000000a6,0x00050089,0x00000006,0x000003ff,0x000003fe, + 0x0000024d,0x000500aa,0x0000005e,0x00000400,0x000003ff,0x0000010f,0x000300f7,0x00000402, + 0x00000000,0x000400fa,0x00000400,0x00000401,0x00000402,0x000200f8,0x00000401,0x0004003d, + 0x00000013,0x00000403,0x000000a5,0x00050050,0x00000013,0x00000404,0x000000e1,0x000000e1, + 0x00050084,0x00000013,0x00000405,0x00000403,0x00000404,0x0004007c,0x0000001c,0x00000406, + 0x00000405,0x0004003d,0x00000006,0x00000407,0x000000a3,0x00050086,0x00000006,0x00000408, + 0x00000407,0x000000e1,0x0004007c,0x0000001b,0x00000409,0x00000408,0x0004003d,0x00000006, + 0x0000040a,0x000000a4,0x00050086,0x00000006,0x0000040b,0x0000040a,0x000000e1,0x0004007c, + 0x0000001b,0x0000040c,0x0000040b,0x00050050,0x0000001c,0x0000040d,0x00000409,0x0000040c, + 0x00050080,0x0000001c,0x0000040e,0x00000406,0x0000040d,0x0003003e,0x0000040f,0x0000040e, + 0x0004003d,0x0000002e,0x00000411,0x000003f1,0x0003003e,0x00000410,0x00000411,0x0004003d, + 0x00000006,0x00000413,0x000000a7,0x0003003e,0x00000412,0x00000413,0x0004003d,0x00000006, + 0x00000415,0x000000a8,0x0003003e,0x00000414,0x00000415,0x00080039,0x00000002,0x00000416, + 0x0000003f,0x0000040f,0x00000410,0x00000412,0x00000414,0x0004003d,0x00000006,0x00000417, + 0x000000a3,0x00050086,0x00000006,0x00000418,0x00000417,0x000000e1,0x0004003d,0x00000006, + 0x00000419,0x000000a4,0x00050080,0x00000006,0x0000041a,0x00000418,0x00000419,0x0003003e, + 0x0000041b,0x0000041a,0x0003003e,0x0000041c,0x0000010f,0x0004003d,0x0000002e,0x0000041e, + 0x000003f1,0x0003003e,0x0000041d,0x0000041e,0x00070039,0x00000002,0x0000041f,0x00000053, + 0x0000041b,0x0000041c,0x0000041d,0x000200f9,0x00000402,0x000200f8,0x00000402,0x000200f9, + 0x000003f0,0x000200f8,0x000003f0,0x000100fd,0x00010038,0x00050036,0x00000002,0x000000b0, + 0x00000000,0x000000ab,0x00030037,0x00000069,0x000000ac,0x00030037,0x00000007,0x000000ad, + 0x00030037,0x00000007,0x000000ae,0x00030037,0x00000007,0x000000af,0x000200f8,0x000000b1, + 0x0004003b,0x00000039,0x00000424,0x00000007,0x0004003b,0x00000007,0x00000425,0x00000007, + 0x0004003b,0x00000007,0x00000427,0x00000007,0x0004003b,0x00000039,0x00000429,0x00000007, + 0x0004003b,0x0000001d,0x00000433,0x00000007,0x0004003b,0x00000039,0x00000434,0x00000007, + 0x0004003b,0x00000007,0x00000436,0x00000007,0x0004003b,0x00000007,0x00000438,0x00000007, + 0x0004003d,0x00000006,0x00000420,0x000000ad,0x000500b0,0x0000005e,0x00000421,0x00000420, + 0x0000024d,0x000300f7,0x00000423,0x00000000,0x000400fa,0x00000421,0x00000422,0x00000423, + 0x000200f8,0x00000422,0x0004003d,0x00000006,0x00000426,0x000000ad,0x0003003e,0x00000425, + 0x00000426,0x0003003e,0x00000427,0x0000010f,0x00060039,0x0000002e,0x00000428,0x0000004d, + 0x00000425,0x00000427,0x0003003e,0x00000424,0x00000428,0x0004003d,0x0000002e,0x0000042a, + 0x00000424,0x0003003e,0x00000429,0x0000042a,0x00050039,0x0000002e,0x0000042b,0x00000067, + 0x00000429,0x0003003e,0x00000424,0x0000042b,0x0004003d,0x00000006,0x0000042c,0x000000ad, + 0x00050089,0x00000006,0x0000042d,0x0000042c,0x0000024d,0x000500aa,0x0000005e,0x0000042e, + 0x0000042d,0x0000010f,0x000300f7,0x00000430,0x00000000,0x000400fa,0x0000042e,0x0000042f, + 0x00000430,0x000200f8,0x0000042f,0x0004003d,0x00000013,0x00000431,0x000000ac,0x0004007c, + 0x0000001c,0x00000432,0x00000431,0x0003003e,0x00000433,0x00000432,0x0004003d,0x0000002e, + 0x00000435,0x00000424,0x0003003e,0x00000434,0x00000435,0x0004003d,0x00000006,0x00000437, + 0x000000ae,0x0003003e,0x00000436,0x00000437,0x0004003d,0x00000006,0x00000439,0x000000af, + 0x0003003e,0x00000438,0x00000439,0x00080039,0x00000002,0x0000043a,0x0000003f,0x00000433, + 0x00000434,0x00000436,0x00000438,0x000200f9,0x00000430,0x000200f8,0x00000430,0x000200f9, + 0x00000423,0x000200f8,0x00000423,0x000100fd,0x00010038,0x00050036,0x00000002,0x000000b7, + 0x00000000,0x000000b2,0x00030037,0x00000007,0x000000b3,0x00030037,0x00000007,0x000000b4, + 0x00030037,0x00000007,0x000000b5,0x00030037,0x00000007,0x000000b6,0x000200f8,0x000000b8, + 0x0004003b,0x0000001d,0x0000043b,0x00000007,0x0004003b,0x0000001d,0x00000445,0x00000007, + 0x0004003b,0x00000039,0x0000044f,0x00000007,0x0004003b,0x00000069,0x00000452,0x00000007, + 0x0004003b,0x00000007,0x00000453,0x00000007,0x0004003b,0x0000001d,0x00000457,0x00000007, + 0x0004003b,0x00000039,0x00000459,0x00000007,0x0004003b,0x00000007,0x0000045b,0x00000007, + 0x0004003b,0x00000007,0x0000045c,0x00000007,0x0004003b,0x00000039,0x00000471,0x00000007, + 0x0004003b,0x00000069,0x00000474,0x00000007,0x0004003b,0x00000007,0x00000475,0x00000007, + 0x0004003b,0x0000001d,0x00000478,0x00000007,0x0004003b,0x00000039,0x0000047a,0x00000007, + 0x0004003b,0x00000007,0x0000047c,0x00000007,0x0004003b,0x00000007,0x0000047d,0x00000007, + 0x0004003b,0x00000039,0x00000492,0x00000007,0x0004003b,0x00000069,0x00000495,0x00000007, + 0x0004003b,0x00000007,0x00000496,0x00000007,0x0004003b,0x0000001d,0x00000499,0x00000007, + 0x0004003b,0x00000039,0x0000049b,0x00000007,0x0004003b,0x00000007,0x0000049d,0x00000007, + 0x0004003b,0x00000007,0x0000049e,0x00000007,0x0004003b,0x00000039,0x000004b3,0x00000007, + 0x0004003b,0x00000069,0x000004b6,0x00000007,0x0004003b,0x00000007,0x000004b7,0x00000007, + 0x0004003b,0x0000001d,0x000004ba,0x00000007,0x0004003b,0x00000039,0x000004bc,0x00000007, + 0x0004003b,0x00000007,0x000004be,0x00000007,0x0004003b,0x00000007,0x000004bf,0x00000007, + 0x0004003b,0x00000039,0x000004c8,0x00000007,0x0004003b,0x00000039,0x000004c9,0x00000007, + 0x0004003b,0x00000039,0x000004cb,0x00000007,0x0004003b,0x00000039,0x000004cd,0x00000007, + 0x0004003b,0x00000039,0x000004cf,0x00000007,0x0004003b,0x0000001d,0x000004d7,0x00000007, + 0x0004003b,0x00000039,0x000004d8,0x00000007,0x0004003b,0x00000007,0x000004da,0x00000007, + 0x0004003b,0x00000007,0x000004db,0x00000007,0x0004003b,0x00000007,0x000004de,0x00000007, + 0x0004003b,0x00000007,0x000004e0,0x00000007,0x0004003b,0x00000039,0x000004e2,0x00000007, + 0x0004003d,0x00000006,0x0000043c,0x000000b3,0x00050084,0x00000006,0x0000043d,0x0000043c, + 0x0000024d,0x00050080,0x00000006,0x0000043e,0x0000043d,0x0000010f,0x0004007c,0x0000001b, + 0x0000043f,0x0000043e,0x0004003d,0x00000006,0x00000440,0x000000b4,0x00050084,0x00000006, + 0x00000441,0x00000440,0x0000024d,0x00050080,0x00000006,0x00000442,0x00000441,0x0000010f, + 0x0004007c,0x0000001b,0x00000443,0x00000442,0x00050050,0x0000001c,0x00000444,0x0000043f, + 0x00000443,0x0003003e,0x0000043b,0x00000444,0x0004003d,0x00000006,0x00000446,0x000000b3, + 0x00050084,0x00000006,0x00000447,0x00000446,0x000000e1,0x00050080,0x00000006,0x00000448, + 0x00000447,0x0000010f,0x0004007c,0x0000001b,0x00000449,0x00000448,0x0004003d,0x00000006, + 0x0000044a,0x000000b4,0x00050084,0x00000006,0x0000044b,0x0000044a,0x000000e1,0x00050080, + 0x00000006,0x0000044c,0x0000044b,0x0000010f,0x0004007c,0x0000001b,0x0000044d,0x0000044c, + 0x00050050,0x0000001c,0x0000044e,0x00000449,0x0000044d,0x0003003e,0x00000445,0x0000044e, + 0x0004003d,0x0000001c,0x00000450,0x0000043b,0x0004007c,0x00000013,0x00000451,0x00000450, + 0x0003003e,0x00000452,0x00000451,0x0004003d,0x00000006,0x00000454,0x000000b6,0x0003003e, + 0x00000453,0x00000454,0x00060039,0x0000002e,0x00000455,0x00000075,0x00000452,0x00000453, + 0x0003003e,0x0000044f,0x00000455,0x0004003d,0x0000001c,0x00000458,0x00000445,0x0003003e, + 0x00000457,0x00000458,0x0004003d,0x0000002e,0x0000045a,0x0000044f,0x0003003e,0x00000459, + 0x0000045a,0x0003003e,0x0000045b,0x00000456,0x0004003d,0x00000006,0x0000045d,0x000000b6, + 0x0003003e,0x0000045c,0x0000045d,0x00080039,0x00000002,0x0000045e,0x0000003f,0x00000457, + 0x00000459,0x0000045b,0x0000045c,0x0004003d,0x00000006,0x0000045f,0x000000b3,0x00050084, + 0x00000006,0x00000460,0x0000045f,0x0000024d,0x00050080,0x00000006,0x00000461,0x00000460, + 0x000000e1,0x0004007c,0x0000001b,0x00000462,0x00000461,0x0004003d,0x00000006,0x00000463, + 0x000000b4,0x00050084,0x00000006,0x00000464,0x00000463,0x0000024d,0x00050080,0x00000006, + 0x00000465,0x00000464,0x0000010f,0x0004007c,0x0000001b,0x00000466,0x00000465,0x00050050, + 0x0000001c,0x00000467,0x00000462,0x00000466,0x0003003e,0x0000043b,0x00000467,0x0004003d, + 0x00000006,0x00000468,0x000000b3,0x00050084,0x00000006,0x00000469,0x00000468,0x000000e1, + 0x00050080,0x00000006,0x0000046a,0x00000469,0x000000e8,0x0004007c,0x0000001b,0x0000046b, + 0x0000046a,0x0004003d,0x00000006,0x0000046c,0x000000b4,0x00050084,0x00000006,0x0000046d, + 0x0000046c,0x000000e1,0x00050080,0x00000006,0x0000046e,0x0000046d,0x0000010f,0x0004007c, + 0x0000001b,0x0000046f,0x0000046e,0x00050050,0x0000001c,0x00000470,0x0000046b,0x0000046f, + 0x0003003e,0x00000445,0x00000470,0x0004003d,0x0000001c,0x00000472,0x0000043b,0x0004007c, + 0x00000013,0x00000473,0x00000472,0x0003003e,0x00000474,0x00000473,0x0004003d,0x00000006, + 0x00000476,0x000000b6,0x0003003e,0x00000475,0x00000476,0x00060039,0x0000002e,0x00000477, + 0x00000075,0x00000474,0x00000475,0x0003003e,0x00000471,0x00000477,0x0004003d,0x0000001c, + 0x00000479,0x00000445,0x0003003e,0x00000478,0x00000479,0x0004003d,0x0000002e,0x0000047b, + 0x00000471,0x0003003e,0x0000047a,0x0000047b,0x0003003e,0x0000047c,0x00000456,0x0004003d, + 0x00000006,0x0000047e,0x000000b6,0x0003003e,0x0000047d,0x0000047e,0x00080039,0x00000002, + 0x0000047f,0x0000003f,0x00000478,0x0000047a,0x0000047c,0x0000047d,0x0004003d,0x00000006, + 0x00000480,0x000000b3,0x00050084,0x00000006,0x00000481,0x00000480,0x0000024d,0x00050080, + 0x00000006,0x00000482,0x00000481,0x0000010f,0x0004007c,0x0000001b,0x00000483,0x00000482, + 0x0004003d,0x00000006,0x00000484,0x000000b4,0x00050084,0x00000006,0x00000485,0x00000484, + 0x0000024d,0x00050080,0x00000006,0x00000486,0x00000485,0x000000e1,0x0004007c,0x0000001b, + 0x00000487,0x00000486,0x00050050,0x0000001c,0x00000488,0x00000483,0x00000487,0x0003003e, + 0x0000043b,0x00000488,0x0004003d,0x00000006,0x00000489,0x000000b3,0x00050084,0x00000006, + 0x0000048a,0x00000489,0x000000e1,0x00050080,0x00000006,0x0000048b,0x0000048a,0x0000010f, + 0x0004007c,0x0000001b,0x0000048c,0x0000048b,0x0004003d,0x00000006,0x0000048d,0x000000b4, + 0x00050084,0x00000006,0x0000048e,0x0000048d,0x000000e1,0x00050080,0x00000006,0x0000048f, + 0x0000048e,0x000000e8,0x0004007c,0x0000001b,0x00000490,0x0000048f,0x00050050,0x0000001c, + 0x00000491,0x0000048c,0x00000490,0x0003003e,0x00000445,0x00000491,0x0004003d,0x0000001c, + 0x00000493,0x0000043b,0x0004007c,0x00000013,0x00000494,0x00000493,0x0003003e,0x00000495, + 0x00000494,0x0004003d,0x00000006,0x00000497,0x000000b6,0x0003003e,0x00000496,0x00000497, + 0x00060039,0x0000002e,0x00000498,0x00000075,0x00000495,0x00000496,0x0003003e,0x00000492, + 0x00000498,0x0004003d,0x0000001c,0x0000049a,0x00000445,0x0003003e,0x00000499,0x0000049a, + 0x0004003d,0x0000002e,0x0000049c,0x00000492,0x0003003e,0x0000049b,0x0000049c,0x0003003e, + 0x0000049d,0x00000456,0x0004003d,0x00000006,0x0000049f,0x000000b6,0x0003003e,0x0000049e, + 0x0000049f,0x00080039,0x00000002,0x000004a0,0x0000003f,0x00000499,0x0000049b,0x0000049d, + 0x0000049e,0x0004003d,0x00000006,0x000004a1,0x000000b3,0x00050084,0x00000006,0x000004a2, + 0x000004a1,0x0000024d,0x00050080,0x00000006,0x000004a3,0x000004a2,0x000000e1,0x0004007c, + 0x0000001b,0x000004a4,0x000004a3,0x0004003d,0x00000006,0x000004a5,0x000000b4,0x00050084, + 0x00000006,0x000004a6,0x000004a5,0x0000024d,0x00050080,0x00000006,0x000004a7,0x000004a6, + 0x000000e1,0x0004007c,0x0000001b,0x000004a8,0x000004a7,0x00050050,0x0000001c,0x000004a9, + 0x000004a4,0x000004a8,0x0003003e,0x0000043b,0x000004a9,0x0004003d,0x00000006,0x000004aa, + 0x000000b3,0x00050084,0x00000006,0x000004ab,0x000004aa,0x000000e1,0x00050080,0x00000006, + 0x000004ac,0x000004ab,0x000000e8,0x0004007c,0x0000001b,0x000004ad,0x000004ac,0x0004003d, + 0x00000006,0x000004ae,0x000000b4,0x00050084,0x00000006,0x000004af,0x000004ae,0x000000e1, + 0x00050080,0x00000006,0x000004b0,0x000004af,0x000000e8,0x0004007c,0x0000001b,0x000004b1, + 0x000004b0,0x00050050,0x0000001c,0x000004b2,0x000004ad,0x000004b1,0x0003003e,0x00000445, + 0x000004b2,0x0004003d,0x0000001c,0x000004b4,0x0000043b,0x0004007c,0x00000013,0x000004b5, + 0x000004b4,0x0003003e,0x000004b6,0x000004b5,0x0004003d,0x00000006,0x000004b8,0x000000b6, + 0x0003003e,0x000004b7,0x000004b8,0x00060039,0x0000002e,0x000004b9,0x00000075,0x000004b6, + 0x000004b7,0x0003003e,0x000004b3,0x000004b9,0x0004003d,0x0000001c,0x000004bb,0x00000445, + 0x0003003e,0x000004ba,0x000004bb,0x0004003d,0x0000002e,0x000004bd,0x000004b3,0x0003003e, + 0x000004bc,0x000004bd,0x0003003e,0x000004be,0x00000456,0x0004003d,0x00000006,0x000004c0, + 0x000000b6,0x0003003e,0x000004bf,0x000004c0,0x00080039,0x00000002,0x000004c1,0x0000003f, + 0x000004ba,0x000004bc,0x000004be,0x000004bf,0x0004003d,0x00000006,0x000004c2,0x000000b5, + 0x000500b2,0x0000005e,0x000004c4,0x000004c2,0x000004c3,0x000300f7,0x000004c6,0x00000000, + 0x000400fa,0x000004c4,0x000004c5,0x000004c6,0x000200f8,0x000004c5,0x000100fd,0x000200f8, + 0x000004c6,0x0004003d,0x0000002e,0x000004ca,0x0000044f,0x0003003e,0x000004c9,0x000004ca, + 0x0004003d,0x0000002e,0x000004cc,0x00000471,0x0003003e,0x000004cb,0x000004cc,0x0004003d, + 0x0000002e,0x000004ce,0x00000492,0x0003003e,0x000004cd,0x000004ce,0x0004003d,0x0000002e, + 0x000004d0,0x000004b3,0x0003003e,0x000004cf,0x000004d0,0x00080039,0x0000002e,0x000004d1, + 0x0000005a,0x000004c9,0x000004cb,0x000004cd,0x000004cf,0x0003003e,0x000004c8,0x000004d1, + 0x0004003d,0x00000006,0x000004d2,0x000000b3,0x0004007c,0x0000001b,0x000004d3,0x000004d2, + 0x0004003d,0x00000006,0x000004d4,0x000000b4,0x0004007c,0x0000001b,0x000004d5,0x000004d4, + 0x00050050,0x0000001c,0x000004d6,0x000004d3,0x000004d5,0x0003003e,0x000004d7,0x000004d6, + 0x0004003d,0x0000002e,0x000004d9,0x000004c8,0x0003003e,0x000004d8,0x000004d9,0x0003003e, + 0x000004da,0x000004c3,0x0004003d,0x00000006,0x000004dc,0x000000b6,0x0003003e,0x000004db, + 0x000004dc,0x00080039,0x00000002,0x000004dd,0x0000003f,0x000004d7,0x000004d8,0x000004da, + 0x000004db,0x0004003d,0x00000006,0x000004df,0x000000b3,0x0003003e,0x000004de,0x000004df, + 0x0004003d,0x00000006,0x000004e1,0x000000b4,0x0003003e,0x000004e0,0x000004e1,0x0004003d, + 0x0000002e,0x000004e3,0x000004c8,0x0003003e,0x000004e2,0x000004e3,0x00070039,0x00000002, + 0x000004e4,0x00000053,0x000004de,0x000004e0,0x000004e2,0x000100fd,0x00010038,0x00050036, + 0x00000002,0x000000c1,0x00000000,0x000000b9,0x00030037,0x00000007,0x000000ba,0x00030037, + 0x00000007,0x000000bb,0x00030037,0x00000069,0x000000bc,0x00030037,0x00000007,0x000000bd, + 0x00030037,0x00000007,0x000000be,0x00030037,0x00000007,0x000000bf,0x00030037,0x00000007, + 0x000000c0,0x000200f8,0x000000c2,0x0004003b,0x00000007,0x000004ec,0x00000007,0x0004003b, + 0x00000007,0x000004ee,0x00000007,0x0004003b,0x00000069,0x000004f0,0x00000007,0x0004003b, + 0x00000007,0x000004f2,0x00000007,0x0004003b,0x00000007,0x000004f4,0x00000007,0x0004003b, + 0x00000007,0x000004f6,0x00000007,0x0004003b,0x00000007,0x00000503,0x00000007,0x0004003b, + 0x00000007,0x00000505,0x00000007,0x0004003b,0x00000069,0x00000507,0x00000007,0x0004003b, + 0x00000007,0x00000509,0x00000007,0x0004003b,0x00000007,0x0000050b,0x00000007,0x0004003b, + 0x00000007,0x0000050c,0x00000007,0x0004003b,0x00000007,0x00000519,0x00000007,0x0004003b, + 0x00000007,0x0000051b,0x00000007,0x0004003b,0x00000069,0x0000051d,0x00000007,0x0004003b, + 0x00000007,0x0000051f,0x00000007,0x0004003b,0x00000007,0x00000521,0x00000007,0x0004003b, + 0x00000007,0x00000522,0x00000007,0x0004003b,0x00000069,0x0000052f,0x00000007,0x0004003b, + 0x00000007,0x00000531,0x00000007,0x0004003b,0x00000007,0x00000533,0x00000007,0x0004003b, + 0x00000007,0x00000534,0x00000007,0x0004003d,0x00000006,0x000004e5,0x000000bf,0x0004003d, + 0x00000006,0x000004e6,0x000000be,0x000500b2,0x0000005e,0x000004e7,0x000004e5,0x000004e6, + 0x000300f7,0x000004e9,0x00000000,0x000400fa,0x000004e7,0x000004e8,0x000004e9,0x000200f8, + 0x000004e8,0x000100fd,0x000200f8,0x000004e9,0x00040039,0x00000002,0x000004eb,0x0000005c, + 0x0004003d,0x00000006,0x000004ed,0x000000ba,0x0003003e,0x000004ec,0x000004ed,0x0004003d, + 0x00000006,0x000004ef,0x000000bb,0x0003003e,0x000004ee,0x000004ef,0x0004003d,0x00000013, + 0x000004f1,0x000000bc,0x0003003e,0x000004f0,0x000004f1,0x0004003d,0x00000006,0x000004f3, + 0x000000bd,0x0003003e,0x000004f2,0x000004f3,0x0004003d,0x00000006,0x000004f5,0x000000be, + 0x0003003e,0x000004f4,0x000004f5,0x0004003d,0x00000006,0x000004f7,0x000000c0,0x0003003e, + 0x000004f6,0x000004f7,0x000a0039,0x00000002,0x000004f8,0x00000099,0x000004ec,0x000004ee, + 0x000004f0,0x000004f2,0x000004f4,0x000004f6,0x0004003d,0x00000006,0x000004f9,0x000000bf, + 0x0004003d,0x00000006,0x000004fa,0x000000be,0x00050080,0x00000006,0x000004fb,0x000004fa, + 0x000000e8,0x000500b2,0x0000005e,0x000004fc,0x000004f9,0x000004fb,0x000300f7,0x000004fe, + 0x00000000,0x000400fa,0x000004fc,0x000004fd,0x000004fe,0x000200f8,0x000004fd,0x000100fd, + 0x000200f8,0x000004fe,0x00040039,0x00000002,0x00000500,0x0000005c,0x0004003d,0x00000006, + 0x00000501,0x000000be,0x00050080,0x00000006,0x00000502,0x00000501,0x000000e8,0x0004003d, + 0x00000006,0x00000504,0x000000ba,0x0003003e,0x00000503,0x00000504,0x0004003d,0x00000006, + 0x00000506,0x000000bb,0x0003003e,0x00000505,0x00000506,0x0004003d,0x00000013,0x00000508, + 0x000000bc,0x0003003e,0x00000507,0x00000508,0x0004003d,0x00000006,0x0000050a,0x000000bd, + 0x0003003e,0x00000509,0x0000050a,0x0003003e,0x0000050b,0x00000502,0x0004003d,0x00000006, + 0x0000050d,0x000000c0,0x0003003e,0x0000050c,0x0000050d,0x000a0039,0x00000002,0x0000050e, + 0x000000a1,0x00000503,0x00000505,0x00000507,0x00000509,0x0000050b,0x0000050c,0x0004003d, + 0x00000006,0x0000050f,0x000000bf,0x0004003d,0x00000006,0x00000510,0x000000be,0x00050080, + 0x00000006,0x00000511,0x00000510,0x000000e1,0x000500b2,0x0000005e,0x00000512,0x0000050f, + 0x00000511,0x000300f7,0x00000514,0x00000000,0x000400fa,0x00000512,0x00000513,0x00000514, + 0x000200f8,0x00000513,0x000100fd,0x000200f8,0x00000514,0x00040039,0x00000002,0x00000516, + 0x0000005c,0x0004003d,0x00000006,0x00000517,0x000000be,0x00050080,0x00000006,0x00000518, + 0x00000517,0x000000e1,0x0004003d,0x00000006,0x0000051a,0x000000ba,0x0003003e,0x00000519, + 0x0000051a,0x0004003d,0x00000006,0x0000051c,0x000000bb,0x0003003e,0x0000051b,0x0000051c, + 0x0004003d,0x00000013,0x0000051e,0x000000bc,0x0003003e,0x0000051d,0x0000051e,0x0004003d, + 0x00000006,0x00000520,0x000000bd,0x0003003e,0x0000051f,0x00000520,0x0003003e,0x00000521, + 0x00000518,0x0004003d,0x00000006,0x00000523,0x000000c0,0x0003003e,0x00000522,0x00000523, + 0x000a0039,0x00000002,0x00000524,0x000000a9,0x00000519,0x0000051b,0x0000051d,0x0000051f, + 0x00000521,0x00000522,0x0004003d,0x00000006,0x00000525,0x000000bf,0x0004003d,0x00000006, + 0x00000526,0x000000be,0x00050080,0x00000006,0x00000527,0x00000526,0x000000e2,0x000500b2, + 0x0000005e,0x00000528,0x00000525,0x00000527,0x000300f7,0x0000052a,0x00000000,0x000400fa, + 0x00000528,0x00000529,0x0000052a,0x000200f8,0x00000529,0x000100fd,0x000200f8,0x0000052a, + 0x00040039,0x00000002,0x0000052c,0x0000005c,0x0004003d,0x00000006,0x0000052d,0x000000be, + 0x00050080,0x00000006,0x0000052e,0x0000052d,0x000000e2,0x0004003d,0x00000013,0x00000530, + 0x000000bc,0x0003003e,0x0000052f,0x00000530,0x0004003d,0x00000006,0x00000532,0x000000bd, + 0x0003003e,0x00000531,0x00000532,0x0003003e,0x00000533,0x0000052e,0x0004003d,0x00000006, + 0x00000535,0x000000c0,0x0003003e,0x00000534,0x00000535,0x00080039,0x00000002,0x00000536, + 0x000000b0,0x0000052f,0x00000531,0x00000533,0x00000534,0x000100fd,0x00010038,0x00050036, + 0x00000002,0x000000c9,0x00000000,0x000000c3,0x00030037,0x00000069,0x000000c4,0x00030037, + 0x00000007,0x000000c5,0x00030037,0x00000007,0x000000c6,0x00030037,0x00000007,0x000000c7, + 0x00030037,0x00000007,0x000000c8,0x000200f8,0x000000ca,0x0004003b,0x00000069,0x00000537, + 0x00000007,0x0004003b,0x00000007,0x0000053a,0x00000007,0x0004003b,0x00000007,0x0000053c, + 0x00000007,0x0004003b,0x00000007,0x00000545,0x00000007,0x0004003b,0x00000007,0x0000054d, + 0x00000007,0x0004003b,0x00000007,0x0000054f,0x00000007,0x0004003b,0x00000069,0x00000551, + 0x00000007,0x0004003b,0x00000007,0x00000553,0x00000007,0x0004003b,0x00000007,0x00000555, + 0x00000007,0x0004003b,0x00000007,0x00000557,0x00000007,0x0004003b,0x00000007,0x0000055a, + 0x00000007,0x0004003b,0x00000007,0x0000055c,0x00000007,0x0004003b,0x00000069,0x0000055e, + 0x00000007,0x0004003b,0x00000007,0x00000560,0x00000007,0x0004003b,0x00000007,0x00000562, + 0x00000007,0x0004003b,0x00000007,0x00000563,0x00000007,0x0004003b,0x00000007,0x00000565, + 0x00000007,0x0004003b,0x00000007,0x0000056d,0x00000007,0x0004003b,0x00000007,0x0000056f, + 0x00000007,0x0004003b,0x00000007,0x00000571,0x00000007,0x0004003b,0x00000007,0x00000577, + 0x00000007,0x0004003b,0x00000007,0x0000057a,0x00000007,0x0004003b,0x00000007,0x0000057c, + 0x00000007,0x0004003b,0x00000007,0x0000057e,0x00000007,0x0004003b,0x00000007,0x00000580, + 0x00000007,0x0004003b,0x00000007,0x00000583,0x00000007,0x0004003b,0x00000007,0x00000585, + 0x00000007,0x0004003b,0x00000069,0x00000587,0x00000007,0x0004003b,0x00000007,0x00000588, + 0x00000007,0x0004003b,0x00000007,0x0000058a,0x00000007,0x0004003b,0x00000007,0x0000058b, + 0x00000007,0x0004003b,0x00000007,0x0000058d,0x00000007,0x0004003d,0x00000006,0x00000538, + 0x000000c5,0x00050089,0x00000006,0x00000539,0x00000538,0x00000235,0x0003003e,0x0000053a, + 0x00000539,0x00050039,0x00000013,0x0000053b,0x00000016,0x0000053a,0x0003003e,0x00000537, + 0x0000053b,0x00050041,0x00000007,0x0000053d,0x00000537,0x0000010f,0x0004003d,0x00000006, + 0x0000053e,0x0000053d,0x0004003d,0x00000006,0x0000053f,0x000000c5,0x000500c2,0x00000006, + 0x00000541,0x0000053f,0x00000540,0x00050089,0x00000006,0x00000542,0x00000541,0x000000e1, + 0x00050084,0x00000006,0x00000543,0x0000031f,0x00000542,0x00050080,0x00000006,0x00000544, + 0x0000053e,0x00000543,0x0003003e,0x0000053c,0x00000544,0x00050041,0x00000007,0x00000546, + 0x00000537,0x000000e8,0x0004003d,0x00000006,0x00000547,0x00000546,0x0004003d,0x00000006, + 0x00000548,0x000000c5,0x000500c2,0x00000006,0x0000054a,0x00000548,0x00000549,0x00050084, + 0x00000006,0x0000054b,0x0000031f,0x0000054a,0x00050080,0x00000006,0x0000054c,0x00000547, + 0x0000054b,0x0003003e,0x00000545,0x0000054c,0x0004003d,0x00000006,0x0000054e,0x0000053c, + 0x0003003e,0x0000054d,0x0000054e,0x0004003d,0x00000006,0x00000550,0x00000545,0x0003003e, + 0x0000054f,0x00000550,0x0004003d,0x00000013,0x00000552,0x000000c4,0x0003003e,0x00000551, + 0x00000552,0x0004003d,0x00000006,0x00000554,0x000000c5,0x0003003e,0x00000553,0x00000554, + 0x0004003d,0x00000006,0x00000556,0x000000c6,0x0003003e,0x00000555,0x00000556,0x0004003d, + 0x00000006,0x00000558,0x000000c8,0x0003003e,0x00000557,0x00000558,0x000a0039,0x00000002, + 0x00000559,0x00000091,0x0000054d,0x0000054f,0x00000551,0x00000553,0x00000555,0x00000557, + 0x0004003d,0x00000006,0x0000055b,0x0000053c,0x0003003e,0x0000055a,0x0000055b,0x0004003d, + 0x00000006,0x0000055d,0x00000545,0x0003003e,0x0000055c,0x0000055d,0x0004003d,0x00000013, + 0x0000055f,0x000000c4,0x0003003e,0x0000055e,0x0000055f,0x0004003d,0x00000006,0x00000561, + 0x000000c5,0x0003003e,0x00000560,0x00000561,0x0003003e,0x00000562,0x000000e1,0x0004003d, + 0x00000006,0x00000564,0x000000c6,0x0003003e,0x00000563,0x00000564,0x0004003d,0x00000006, + 0x00000566,0x000000c8,0x0003003e,0x00000565,0x00000566,0x000b0039,0x00000002,0x00000567, + 0x000000c1,0x0000055a,0x0000055c,0x0000055e,0x00000560,0x00000562,0x00000563,0x00000565, + 0x0004003d,0x00000006,0x00000568,0x000000c6,0x000500b2,0x0000005e,0x00000569,0x00000568, + 0x00000456,0x000300f7,0x0000056b,0x00000000,0x000400fa,0x00000569,0x0000056a,0x0000056b, + 0x000200f8,0x0000056a,0x000100fd,0x000200f8,0x0000056b,0x0004003d,0x00000006,0x0000056e, + 0x000000c7,0x0003003e,0x0000056d,0x0000056e,0x0004003d,0x00000006,0x00000570,0x000000c5, + 0x0003003e,0x0000056f,0x00000570,0x0004003d,0x00000006,0x00000572,0x000000c8,0x0003003e, + 0x00000571,0x00000572,0x00070039,0x0000005e,0x00000573,0x00000063,0x0000056d,0x0000056f, + 0x00000571,0x000300f7,0x00000575,0x00000000,0x000400fa,0x00000573,0x00000574,0x00000575, + 0x000200f8,0x00000574,0x000100fd,0x000200f8,0x00000575,0x0004003d,0x00000006,0x00000578, + 0x000000c8,0x0003003e,0x00000577,0x00000578,0x00050039,0x00000002,0x00000579,0x00000048, + 0x00000577,0x0004003d,0x00000006,0x0000057b,0x0000053c,0x0003003e,0x0000057a,0x0000057b, + 0x0004003d,0x00000006,0x0000057d,0x00000545,0x0003003e,0x0000057c,0x0000057d,0x0004003d, + 0x00000006,0x0000057f,0x000000c6,0x0003003e,0x0000057e,0x0000057f,0x0004003d,0x00000006, + 0x00000581,0x000000c8,0x0003003e,0x00000580,0x00000581,0x00080039,0x00000002,0x00000582, + 0x000000b7,0x0000057a,0x0000057c,0x0000057e,0x00000580,0x0004003d,0x00000006,0x00000584, + 0x0000053c,0x0003003e,0x00000583,0x00000584,0x0004003d,0x00000006,0x00000586,0x00000545, + 0x0003003e,0x00000585,0x00000586,0x0003003e,0x00000587,0x000001e3,0x0004003d,0x00000006, + 0x00000589,0x000000c5,0x0003003e,0x00000588,0x00000589,0x0003003e,0x0000058a,0x0000031f, + 0x0004003d,0x00000006,0x0000058c,0x000000c6,0x0003003e,0x0000058b,0x0000058c,0x0004003d, + 0x00000006,0x0000058e,0x000000c8,0x0003003e,0x0000058d,0x0000058e,0x000b0039,0x00000002, + 0x0000058f,0x000000c1,0x00000583,0x00000585,0x00000587,0x00000588,0x0000058a,0x0000058b, + 0x0000058d,0x000100fd,0x00010038,0x00050036,0x00000002,0x000000cf,0x00000000,0x000000cc, + 0x00030037,0x0000001d,0x000000cd,0x00030037,0x000000cb,0x000000ce,0x000200f8,0x000000d0, + 0x0004003b,0x00000069,0x00000595,0x00000007,0x0004003b,0x00000007,0x00000596,0x00000007, + 0x0004003b,0x00000007,0x00000597,0x00000007,0x0004003b,0x00000007,0x00000598,0x00000007, + 0x0004003b,0x00000007,0x00000599,0x00000007,0x0004003d,0x0000001c,0x00000590,0x000000cd, + 0x0004007c,0x00000013,0x00000591,0x00000590,0x0004003d,0x0000001b,0x00000592,0x000000ce, + 0x0004007c,0x00000006,0x00000593,0x00000592,0x00040039,0x00000006,0x00000594,0x00000019, + 0x0003003e,0x00000595,0x00000591,0x0003003e,0x00000596,0x00000593,0x0003003e,0x00000597, + 0x00000456,0x0003003e,0x00000598,0x00000594,0x0003003e,0x00000599,0x000000e8,0x00090039, + 0x00000002,0x0000059a,0x000000c9,0x00000595,0x00000596,0x00000597,0x00000598,0x00000599, + 0x000100fd,0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_of_prepare_luma_comp_spv.h b/gpu/vk/shaders/fsr3_of_prepare_luma_comp_spv.h new file mode 100644 index 000000000..a9508a90f --- /dev/null +++ b/gpu/vk/shaders/fsr3_of_prepare_luma_comp_spv.h @@ -0,0 +1,302 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_OF_PREPARE_LUMA_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x0000017a,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000031,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e, + 0x00000000,0x00000001,0x0007000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x0000016a, + 0x0000016f,0x00060010,0x00000004,0x00000011,0x00000010,0x00000010,0x00000001,0x00030003, + 0x00000002,0x000001c2,0x000b0004,0x455f4c47,0x735f5458,0x6c706d61,0x656c7265,0x745f7373, + 0x75747865,0x665f6572,0x74636e75,0x736e6f69,0x00000000,0x000b0004,0x455f4c47,0x735f5458, + 0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570, + 0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f, + 0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65, + 0x74636572,0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00070005,0x0000000b, + 0x42786666,0x64616f72,0x74736163,0x31662833,0x0000003b,0x00040005,0x0000000a,0x756c6176, + 0x00000065,0x00070005,0x00000010,0x53786666,0x72757461,0x28657461,0x3b336676,0x00000000, + 0x00030005,0x0000000f,0x00000078,0x00060005,0x00000015,0x50786666,0x6628776f,0x31663b31, + 0x0000003b,0x00030005,0x00000013,0x00000078,0x00030005,0x00000014,0x00000079,0x00080005, + 0x00000018,0x4c786666,0x61656e69,0x6f724672,0x2851506d,0x3b336676,0x00000000,0x00040005, + 0x00000017,0x756c6176,0x00000065,0x00090005,0x0000001c,0x6b636142,0x66667562,0x72547265, + 0x66736e61,0x75467265,0x6974636e,0x00286e6f,0x00070005,0x00000020,0x4d6e694d,0x754c7861, + 0x616e696d,0x2865636e,0x00000000,0x00070005,0x00000027,0x64616f4c,0x75706e49,0x6c6f4374, + 0x7628726f,0x003b3275,0x00050005,0x00000026,0x48785069,0x6f747369,0x00007972,0x000a0005, + 0x00000030,0x726f7453,0x74704f65,0x6c616369,0x776f6c46,0x75706e49,0x69762874,0x31753b32, + 0x0000003b,0x00040005,0x0000002e,0x50785069,0x0000736f,0x00040005,0x0000002f,0x6d754c66, + 0x00000061,0x000b0005,0x00000034,0x696d754c,0x636e616e,0x506f5465,0x65637265,0x64657669, + 0x696d754c,0x636e616e,0x31662865,0x0000003b,0x00050005,0x00000033,0x6d754c66,0x6e616e69, + 0x00006563,0x00090005,0x00000038,0x656e694c,0x644c7261,0x4c6f5472,0x6e696d75,0x65636e61, + 0x33667628,0x0000003b,0x00060005,0x00000037,0x656e696c,0x65527261,0x39303763,0x00424752, + 0x000a0005,0x0000003b,0x656e694c,0x65527261,0x32303263,0x4c6f5430,0x6e696d75,0x65636e61, + 0x33667628,0x0000003b,0x00070005,0x0000003a,0x656e696c,0x65527261,0x32303263,0x42475230, + 0x00000000,0x000b0005,0x00000040,0x6f435150,0x63657272,0x48646574,0x6f547264,0x696d754c, + 0x636e616e,0x66762865,0x31663b33,0x0000003b,0x00030005,0x0000003e,0x00007170,0x00060005, + 0x0000003f,0x4c78616d,0x6e696d75,0x65636e61,0x00000000,0x00090005,0x00000046,0x73786666, + 0x42475263,0x694c6f54,0x7261656e,0x33667628,0x3b31663b,0x003b3166,0x00040005,0x00000043, + 0x756c6176,0x00000065,0x00060005,0x00000044,0x4c6e696d,0x6e696d75,0x65636e61,0x00000000, + 0x00060005,0x00000045,0x4c78616d,0x6e696d75,0x65636e61,0x00000000,0x000c0005,0x0000004c, + 0x47524353,0x726f4342,0x74636572,0x64486465,0x4c6f5472,0x6e696d75,0x65636e61,0x33667628, + 0x3b31663b,0x003b3166,0x00040005,0x00000049,0x47526373,0x00000042,0x00060005,0x0000004a, + 0x4c6e696d,0x6e696d75,0x65636e61,0x00000000,0x00060005,0x0000004b,0x4c78616d,0x6e696d75, + 0x65636e61,0x00000000,0x00070005,0x00000052,0x70657250,0x4c657261,0x28616d75,0x3b326976, + 0x003b3169,0x00050005,0x00000050,0x6f6c4769,0x496c6162,0x00000064,0x00050005,0x00000051, + 0x636f4c69,0x6e496c61,0x00786564,0x00040005,0x0000005a,0x61726170,0x0000006d,0x00040005, + 0x0000005d,0x61726170,0x0000006d,0x00030005,0x00000067,0x00000070,0x00040005,0x0000006a, + 0x61726170,0x0000006d,0x00040005,0x0000006f,0x61726170,0x0000006d,0x00040005,0x00000072, + 0x61726170,0x0000006d,0x00040005,0x00000075,0x61726170,0x0000006d,0x00040005,0x00000078, + 0x61726170,0x0000006d,0x00040005,0x0000007f,0x61726170,0x0000006d,0x00040005,0x00000084, + 0x464f6263,0x0000745f,0x00090006,0x00000084,0x00000000,0x706e4969,0x754c7475,0x6552616d, + 0x756c6f73,0x6e6f6974,0x00000000,0x000a0006,0x00000084,0x00000001,0x74704f75,0x6c616369, + 0x776f6c46,0x61727950,0x4c64696d,0x6c657665,0x00000000,0x000b0006,0x00000084,0x00000002, + 0x74704f75,0x6c616369,0x776f6c46,0x61727950,0x4c64696d,0x6c657665,0x6e756f43,0x00000074, + 0x00060006,0x00000084,0x00000003,0x61724669,0x6e49656d,0x00786564,0x000a0006,0x00000084, + 0x00000004,0x6b636162,0x66667562,0x72547265,0x66736e61,0x75467265,0x6974636e,0x00006e6f, + 0x00070006,0x00000084,0x00000005,0x4d6e696d,0x754c7861,0x616e696d,0x0065636e,0x00040005, + 0x00000086,0x464f6263,0x00000000,0x00060005,0x00000095,0x6e695f72,0x5f747570,0x6f6c6f63, + 0x00000072,0x00080005,0x0000009f,0x6f5f7772,0x63697470,0x665f6c61,0x5f776f6c,0x75706e69, + 0x00000074,0x00070005,0x000000a6,0x72655066,0x76656963,0x754c6465,0x616e696d,0x0065636e, + 0x00040005,0x000000b2,0x61726170,0x0000006d,0x00040005,0x000000b4,0x61726170,0x0000006d, + 0x00030005,0x000000bf,0x00005966,0x00030005,0x000000d3,0x00005966,0x00030005,0x000000e5, + 0x00005966,0x00040005,0x000000e6,0x61726170,0x0000006d,0x00040005,0x000000ed,0x61726170, + 0x0000006d,0x00030005,0x000000f2,0x00000070,0x00040005,0x000000f7,0x61726170,0x0000006d, + 0x00040005,0x000000ff,0x61726170,0x0000006d,0x00030005,0x00000104,0x00005966,0x00040005, + 0x00000105,0x61726170,0x0000006d,0x00040005,0x00000107,0x61726170,0x0000006d,0x00040005, + 0x00000109,0x61726170,0x0000006d,0x00040005,0x0000010c,0x61726170,0x0000006d,0x00030005, + 0x00000111,0x00000079,0x00030005,0x0000011a,0x00000078,0x00030005,0x00000122,0x00736f70, + 0x00050005,0x0000012a,0x48785069,0x736f5072,0x00000000,0x00030005,0x0000012c,0x00005966, + 0x00050005,0x0000012d,0x75706e69,0x6c6f4374,0x0000726f,0x00040005,0x00000130,0x61726170, + 0x0000006d,0x00090005,0x00000133,0x6b636162,0x66667562,0x72547265,0x66736e61,0x75467265, + 0x6974636e,0x00006e6f,0x00040005,0x00000139,0x61726170,0x0000006d,0x00040005,0x00000142, + 0x61726170,0x0000006d,0x00040005,0x00000144,0x61726170,0x0000006d,0x00040005,0x00000147, + 0x61726170,0x0000006d,0x00040005,0x00000151,0x61726170,0x0000006d,0x00040005,0x00000153, + 0x61726170,0x0000006d,0x00040005,0x00000155,0x61726170,0x0000006d,0x00040005,0x00000158, + 0x61726170,0x0000006d,0x00040005,0x0000015f,0x61726170,0x0000006d,0x00040005,0x00000161, + 0x61726170,0x0000006d,0x00080005,0x0000016a,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f, + 0x496e6f69,0x00000044,0x00080005,0x0000016f,0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163, + 0x6e496e6f,0x00786564,0x00040005,0x00000172,0x61726170,0x0000006d,0x00040005,0x00000173, + 0x61726170,0x0000006d,0x00030047,0x00000084,0x00000002,0x00050048,0x00000084,0x00000000, + 0x00000023,0x00000000,0x00050048,0x00000084,0x00000001,0x00000023,0x00000008,0x00050048, + 0x00000084,0x00000002,0x00000023,0x0000000c,0x00050048,0x00000084,0x00000003,0x00000023, + 0x00000010,0x00050048,0x00000084,0x00000004,0x00000023,0x00000014,0x00050048,0x00000084, + 0x00000005,0x00000023,0x00000018,0x00040047,0x00000086,0x00000021,0x00000002,0x00040047, + 0x00000086,0x00000022,0x00000000,0x00040047,0x00000095,0x00000021,0x00000000,0x00040047, + 0x00000095,0x00000022,0x00000000,0x00040047,0x0000009f,0x00000021,0x00000001,0x00040047, + 0x0000009f,0x00000022,0x00000000,0x00040047,0x0000016a,0x0000000b,0x0000001c,0x00040047, + 0x0000016f,0x0000000b,0x0000001d,0x00040047,0x00000179,0x0000000b,0x00000019,0x00020013, + 0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040020, + 0x00000007,0x00000007,0x00000006,0x00040017,0x00000008,0x00000006,0x00000003,0x00040021, + 0x00000009,0x00000008,0x00000007,0x00040020,0x0000000d,0x00000007,0x00000008,0x00040021, + 0x0000000e,0x00000008,0x0000000d,0x00050021,0x00000012,0x00000006,0x00000007,0x00000007, + 0x00040015,0x0000001a,0x00000020,0x00000000,0x00030021,0x0000001b,0x0000001a,0x00040017, + 0x0000001e,0x00000006,0x00000002,0x00030021,0x0000001f,0x0000001e,0x00040017,0x00000022, + 0x0000001a,0x00000002,0x00040020,0x00000023,0x00000007,0x00000022,0x00040017,0x00000024, + 0x00000006,0x00000004,0x00040021,0x00000025,0x00000024,0x00000023,0x00040015,0x00000029, + 0x00000020,0x00000001,0x00040017,0x0000002a,0x00000029,0x00000002,0x00040020,0x0000002b, + 0x00000007,0x0000002a,0x00040020,0x0000002c,0x00000007,0x0000001a,0x00050021,0x0000002d, + 0x00000002,0x0000002b,0x0000002c,0x00040021,0x00000032,0x00000006,0x00000007,0x00040021, + 0x00000036,0x00000006,0x0000000d,0x00050021,0x0000003d,0x00000006,0x0000000d,0x00000007, + 0x00060021,0x00000042,0x00000008,0x0000000d,0x00000007,0x00000007,0x00060021,0x00000048, + 0x00000006,0x0000000d,0x00000007,0x00000007,0x00040020,0x0000004e,0x00000007,0x00000029, + 0x00050021,0x0000004f,0x00000002,0x0000002b,0x0000004e,0x0004002b,0x00000006,0x00000059, + 0x00000000,0x0004002b,0x00000006,0x0000005c,0x3f800000,0x0004002b,0x00000006,0x00000069, + 0x3c4fcd9e,0x0004002b,0x00000006,0x0000006e,0x3f560008,0x0004002b,0x00000006,0x00000074, + 0x4196d014,0x0004002b,0x00000006,0x00000077,0x41958000,0x0004002b,0x00000006,0x0000007e, + 0x40c8e061,0x0008001e,0x00000084,0x0000002a,0x0000001a,0x0000001a,0x0000001a,0x0000001a, + 0x0000001e,0x00040020,0x00000085,0x00000002,0x00000084,0x0004003b,0x00000085,0x00000086, + 0x00000002,0x0004002b,0x00000029,0x00000087,0x00000004,0x00040020,0x00000088,0x00000002, + 0x0000001a,0x0004002b,0x00000029,0x0000008d,0x00000005,0x00040020,0x0000008e,0x00000002, + 0x0000001e,0x00090019,0x00000093,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000, + 0x00000001,0x00000000,0x00040020,0x00000094,0x00000000,0x00000093,0x0004003b,0x00000094, + 0x00000095,0x00000000,0x0004002b,0x00000029,0x00000099,0x00000000,0x00090019,0x0000009d, + 0x0000001a,0x00000001,0x00000000,0x00000000,0x00000000,0x00000002,0x00000027,0x00040020, + 0x0000009e,0x00000000,0x0000009d,0x0004003b,0x0000009e,0x0000009f,0x00000000,0x0004002b, + 0x0000001a,0x000000a3,0x00000000,0x00040017,0x000000a4,0x0000001a,0x00000004,0x0004002b, + 0x00000006,0x000000a8,0x3c111aa7,0x00020014,0x000000a9,0x0004002b,0x00000006,0x000000ae, + 0x4461d2f7,0x0004002b,0x00000006,0x000000b1,0x3eaaaaab,0x0004002b,0x00000006,0x000000b6, + 0x42e80000,0x0004002b,0x00000006,0x000000b8,0x41800000,0x0004002b,0x00000006,0x000000bb, + 0x3c23d70a,0x0004002b,0x00000006,0x000000c0,0x3e59b3d0,0x0004002b,0x00000006,0x000000c4, + 0x3f371759,0x0004002b,0x0000001a,0x000000c5,0x00000001,0x0004002b,0x00000006,0x000000ca, + 0x3d93dd98,0x0004002b,0x0000001a,0x000000cb,0x00000002,0x0004002b,0x00000006,0x000000d4, + 0x3e86809d,0x0004002b,0x00000006,0x000000d8,0x3f2d9168,0x0004002b,0x00000006,0x000000dd, + 0x3d72e48f,0x0004002b,0x00000006,0x000000e9,0x461c4000,0x0004002b,0x00000006,0x000000f5, + 0x42a00000,0x0004002b,0x00000029,0x00000118,0x00000002,0x0005002c,0x0000002a,0x00000124, + 0x00000118,0x00000118,0x0004002b,0x00000006,0x0000015c,0x437f0000,0x0004002b,0x00000029, + 0x00000164,0x00000001,0x00040017,0x00000168,0x0000001a,0x00000003,0x00040020,0x00000169, + 0x00000001,0x00000168,0x0004003b,0x00000169,0x0000016a,0x00000001,0x00040020,0x0000016e, + 0x00000001,0x0000001a,0x0004003b,0x0000016e,0x0000016f,0x00000001,0x0004002b,0x00000006, + 0x00000175,0x387fda40,0x0004002b,0x00000006,0x00000176,0x477fe000,0x0004002b,0x00000006, + 0x00000177,0x37801002,0x0004002b,0x0000001a,0x00000178,0x00000010,0x0006002c,0x00000168, + 0x00000179,0x00000178,0x00000178,0x000000c5,0x00050036,0x00000002,0x00000004,0x00000000, + 0x00000003,0x000200f8,0x00000005,0x0004003b,0x0000002b,0x00000172,0x00000007,0x0004003b, + 0x0000004e,0x00000173,0x00000007,0x0004003d,0x00000168,0x0000016b,0x0000016a,0x0007004f, + 0x00000022,0x0000016c,0x0000016b,0x0000016b,0x00000000,0x00000001,0x0004007c,0x0000002a, + 0x0000016d,0x0000016c,0x0004003d,0x0000001a,0x00000170,0x0000016f,0x0004007c,0x00000029, + 0x00000171,0x00000170,0x0003003e,0x00000172,0x0000016d,0x0003003e,0x00000173,0x00000171, + 0x00060039,0x00000002,0x00000174,0x00000052,0x00000172,0x00000173,0x000100fd,0x00010038, + 0x00050036,0x00000008,0x0000000b,0x00000000,0x00000009,0x00030037,0x00000007,0x0000000a, + 0x000200f8,0x0000000c,0x0004003d,0x00000006,0x00000054,0x0000000a,0x00060050,0x00000008, + 0x00000055,0x00000054,0x00000054,0x00000054,0x000200fe,0x00000055,0x00010038,0x00050036, + 0x00000008,0x00000010,0x00000000,0x0000000e,0x00030037,0x0000000d,0x0000000f,0x000200f8, + 0x00000011,0x0004003b,0x00000007,0x0000005a,0x00000007,0x0004003b,0x00000007,0x0000005d, + 0x00000007,0x0004003d,0x00000008,0x00000058,0x0000000f,0x0003003e,0x0000005a,0x00000059, + 0x00050039,0x00000008,0x0000005b,0x0000000b,0x0000005a,0x0003003e,0x0000005d,0x0000005c, + 0x00050039,0x00000008,0x0000005e,0x0000000b,0x0000005d,0x0008000c,0x00000008,0x0000005f, + 0x00000001,0x0000002b,0x00000058,0x0000005b,0x0000005e,0x000200fe,0x0000005f,0x00010038, + 0x00050036,0x00000006,0x00000015,0x00000000,0x00000012,0x00030037,0x00000007,0x00000013, + 0x00030037,0x00000007,0x00000014,0x000200f8,0x00000016,0x0004003d,0x00000006,0x00000062, + 0x00000013,0x0004003d,0x00000006,0x00000063,0x00000014,0x0007000c,0x00000006,0x00000064, + 0x00000001,0x0000001a,0x00000062,0x00000063,0x000200fe,0x00000064,0x00010038,0x00050036, + 0x00000008,0x00000018,0x00000000,0x0000000e,0x00030037,0x0000000d,0x00000017,0x000200f8, + 0x00000019,0x0004003b,0x0000000d,0x00000067,0x00000007,0x0004003b,0x00000007,0x0000006a, + 0x00000007,0x0004003b,0x00000007,0x0000006f,0x00000007,0x0004003b,0x0000000d,0x00000072, + 0x00000007,0x0004003b,0x00000007,0x00000075,0x00000007,0x0004003b,0x00000007,0x00000078, + 0x00000007,0x0004003b,0x00000007,0x0000007f,0x00000007,0x0004003d,0x00000008,0x00000068, + 0x00000017,0x0003003e,0x0000006a,0x00000069,0x00050039,0x00000008,0x0000006b,0x0000000b, + 0x0000006a,0x0007000c,0x00000008,0x0000006c,0x00000001,0x0000001a,0x00000068,0x0000006b, + 0x0003003e,0x00000067,0x0000006c,0x0004003d,0x00000008,0x0000006d,0x00000067,0x0003003e, + 0x0000006f,0x0000006e,0x00050039,0x00000008,0x00000070,0x0000000b,0x0000006f,0x00050083, + 0x00000008,0x00000071,0x0000006d,0x00000070,0x0003003e,0x00000072,0x00000071,0x00050039, + 0x00000008,0x00000073,0x00000010,0x00000072,0x0003003e,0x00000075,0x00000074,0x00050039, + 0x00000008,0x00000076,0x0000000b,0x00000075,0x0003003e,0x00000078,0x00000077,0x00050039, + 0x00000008,0x00000079,0x0000000b,0x00000078,0x0004003d,0x00000008,0x0000007a,0x00000067, + 0x00050085,0x00000008,0x0000007b,0x00000079,0x0000007a,0x00050083,0x00000008,0x0000007c, + 0x00000076,0x0000007b,0x00050088,0x00000008,0x0000007d,0x00000073,0x0000007c,0x0003003e, + 0x0000007f,0x0000007e,0x00050039,0x00000008,0x00000080,0x0000000b,0x0000007f,0x0007000c, + 0x00000008,0x00000081,0x00000001,0x0000001a,0x0000007d,0x00000080,0x000200fe,0x00000081, + 0x00010038,0x00050036,0x0000001a,0x0000001c,0x00000000,0x0000001b,0x000200f8,0x0000001d, + 0x00050041,0x00000088,0x00000089,0x00000086,0x00000087,0x0004003d,0x0000001a,0x0000008a, + 0x00000089,0x000200fe,0x0000008a,0x00010038,0x00050036,0x0000001e,0x00000020,0x00000000, + 0x0000001f,0x000200f8,0x00000021,0x00050041,0x0000008e,0x0000008f,0x00000086,0x0000008d, + 0x0004003d,0x0000001e,0x00000090,0x0000008f,0x000200fe,0x00000090,0x00010038,0x00050036, + 0x00000024,0x00000027,0x00000000,0x00000025,0x00030037,0x00000023,0x00000026,0x000200f8, + 0x00000028,0x0004003d,0x00000093,0x00000096,0x00000095,0x0004003d,0x00000022,0x00000097, + 0x00000026,0x0004007c,0x0000002a,0x00000098,0x00000097,0x0007005f,0x00000024,0x0000009a, + 0x00000096,0x00000098,0x00000002,0x00000099,0x000200fe,0x0000009a,0x00010038,0x00050036, + 0x00000002,0x00000030,0x00000000,0x0000002d,0x00030037,0x0000002b,0x0000002e,0x00030037, + 0x0000002c,0x0000002f,0x000200f8,0x00000031,0x0004003d,0x0000009d,0x000000a0,0x0000009f, + 0x0004003d,0x0000002a,0x000000a1,0x0000002e,0x0004003d,0x0000001a,0x000000a2,0x0000002f, + 0x00070050,0x000000a4,0x000000a5,0x000000a2,0x000000a3,0x000000a3,0x000000a3,0x00040063, + 0x000000a0,0x000000a1,0x000000a5,0x000100fd,0x00010038,0x00050036,0x00000006,0x00000034, + 0x00000000,0x00000032,0x00030037,0x00000007,0x00000033,0x000200f8,0x00000035,0x0004003b, + 0x00000007,0x000000a6,0x00000007,0x0004003b,0x00000007,0x000000b2,0x00000007,0x0004003b, + 0x00000007,0x000000b4,0x00000007,0x0003003e,0x000000a6,0x00000059,0x0004003d,0x00000006, + 0x000000a7,0x00000033,0x000500bc,0x000000a9,0x000000aa,0x000000a7,0x000000a8,0x000300f7, + 0x000000ac,0x00000000,0x000400fa,0x000000aa,0x000000ab,0x000000b0,0x000200f8,0x000000ab, + 0x0004003d,0x00000006,0x000000ad,0x00000033,0x00050085,0x00000006,0x000000af,0x000000ad, + 0x000000ae,0x0003003e,0x000000a6,0x000000af,0x000200f9,0x000000ac,0x000200f8,0x000000b0, + 0x0004003d,0x00000006,0x000000b3,0x00000033,0x0003003e,0x000000b2,0x000000b3,0x0003003e, + 0x000000b4,0x000000b1,0x00060039,0x00000006,0x000000b5,0x00000015,0x000000b2,0x000000b4, + 0x00050085,0x00000006,0x000000b7,0x000000b5,0x000000b6,0x00050083,0x00000006,0x000000b9, + 0x000000b7,0x000000b8,0x0003003e,0x000000a6,0x000000b9,0x000200f9,0x000000ac,0x000200f8, + 0x000000ac,0x0004003d,0x00000006,0x000000ba,0x000000a6,0x00050085,0x00000006,0x000000bc, + 0x000000ba,0x000000bb,0x000200fe,0x000000bc,0x00010038,0x00050036,0x00000006,0x00000038, + 0x00000000,0x00000036,0x00030037,0x0000000d,0x00000037,0x000200f8,0x00000039,0x0004003b, + 0x00000007,0x000000bf,0x00000007,0x00050041,0x00000007,0x000000c1,0x00000037,0x000000a3, + 0x0004003d,0x00000006,0x000000c2,0x000000c1,0x00050085,0x00000006,0x000000c3,0x000000c0, + 0x000000c2,0x00050041,0x00000007,0x000000c6,0x00000037,0x000000c5,0x0004003d,0x00000006, + 0x000000c7,0x000000c6,0x00050085,0x00000006,0x000000c8,0x000000c4,0x000000c7,0x00050081, + 0x00000006,0x000000c9,0x000000c3,0x000000c8,0x00050041,0x00000007,0x000000cc,0x00000037, + 0x000000cb,0x0004003d,0x00000006,0x000000cd,0x000000cc,0x00050085,0x00000006,0x000000ce, + 0x000000ca,0x000000cd,0x00050081,0x00000006,0x000000cf,0x000000c9,0x000000ce,0x0003003e, + 0x000000bf,0x000000cf,0x0004003d,0x00000006,0x000000d0,0x000000bf,0x000200fe,0x000000d0, + 0x00010038,0x00050036,0x00000006,0x0000003b,0x00000000,0x00000036,0x00030037,0x0000000d, + 0x0000003a,0x000200f8,0x0000003c,0x0004003b,0x00000007,0x000000d3,0x00000007,0x00050041, + 0x00000007,0x000000d5,0x0000003a,0x000000a3,0x0004003d,0x00000006,0x000000d6,0x000000d5, + 0x00050085,0x00000006,0x000000d7,0x000000d4,0x000000d6,0x00050041,0x00000007,0x000000d9, + 0x0000003a,0x000000c5,0x0004003d,0x00000006,0x000000da,0x000000d9,0x00050085,0x00000006, + 0x000000db,0x000000d8,0x000000da,0x00050081,0x00000006,0x000000dc,0x000000d7,0x000000db, + 0x00050041,0x00000007,0x000000de,0x0000003a,0x000000cb,0x0004003d,0x00000006,0x000000df, + 0x000000de,0x00050085,0x00000006,0x000000e0,0x000000dd,0x000000df,0x00050081,0x00000006, + 0x000000e1,0x000000dc,0x000000e0,0x0003003e,0x000000d3,0x000000e1,0x0004003d,0x00000006, + 0x000000e2,0x000000d3,0x000200fe,0x000000e2,0x00010038,0x00050036,0x00000006,0x00000040, + 0x00000000,0x0000003d,0x00030037,0x0000000d,0x0000003e,0x00030037,0x00000007,0x0000003f, + 0x000200f8,0x00000041,0x0004003b,0x00000007,0x000000e5,0x00000007,0x0004003b,0x0000000d, + 0x000000e6,0x00000007,0x0004003b,0x0000000d,0x000000ed,0x00000007,0x0004003d,0x00000008, + 0x000000e7,0x0000003e,0x0003003e,0x000000e6,0x000000e7,0x00050039,0x00000008,0x000000e8, + 0x00000018,0x000000e6,0x0004003d,0x00000006,0x000000ea,0x0000003f,0x00050088,0x00000006, + 0x000000eb,0x000000e9,0x000000ea,0x0005008e,0x00000008,0x000000ec,0x000000e8,0x000000eb, + 0x0003003e,0x000000ed,0x000000ec,0x00050039,0x00000006,0x000000ee,0x0000003b,0x000000ed, + 0x0003003e,0x000000e5,0x000000ee,0x0004003d,0x00000006,0x000000ef,0x000000e5,0x000200fe, + 0x000000ef,0x00010038,0x00050036,0x00000008,0x00000046,0x00000000,0x00000042,0x00030037, + 0x0000000d,0x00000043,0x00030037,0x00000007,0x00000044,0x00030037,0x00000007,0x00000045, + 0x000200f8,0x00000047,0x0004003b,0x0000000d,0x000000f2,0x00000007,0x0004003b,0x00000007, + 0x000000f7,0x00000007,0x0004003b,0x00000007,0x000000ff,0x00000007,0x0004003d,0x00000008, + 0x000000f3,0x00000043,0x0004003d,0x00000006,0x000000f4,0x00000044,0x00050088,0x00000006, + 0x000000f6,0x000000f4,0x000000f5,0x0003003e,0x000000f7,0x000000f6,0x00050039,0x00000008, + 0x000000f8,0x0000000b,0x000000f7,0x00050083,0x00000008,0x000000f9,0x000000f3,0x000000f8, + 0x0003003e,0x000000f2,0x000000f9,0x0004003d,0x00000008,0x000000fa,0x000000f2,0x0004003d, + 0x00000006,0x000000fb,0x00000045,0x0004003d,0x00000006,0x000000fc,0x00000044,0x00050083, + 0x00000006,0x000000fd,0x000000fb,0x000000fc,0x00050088,0x00000006,0x000000fe,0x000000fd, + 0x000000f5,0x0003003e,0x000000ff,0x000000fe,0x00050039,0x00000008,0x00000100,0x0000000b, + 0x000000ff,0x00050088,0x00000008,0x00000101,0x000000fa,0x00000100,0x000200fe,0x00000101, + 0x00010038,0x00050036,0x00000006,0x0000004c,0x00000000,0x00000048,0x00030037,0x0000000d, + 0x00000049,0x00030037,0x00000007,0x0000004a,0x00030037,0x00000007,0x0000004b,0x000200f8, + 0x0000004d,0x0004003b,0x00000007,0x00000104,0x00000007,0x0004003b,0x0000000d,0x00000105, + 0x00000007,0x0004003b,0x00000007,0x00000107,0x00000007,0x0004003b,0x00000007,0x00000109, + 0x00000007,0x0004003b,0x0000000d,0x0000010c,0x00000007,0x0004003d,0x00000008,0x00000106, + 0x00000049,0x0003003e,0x00000105,0x00000106,0x0004003d,0x00000006,0x00000108,0x0000004a, + 0x0003003e,0x00000107,0x00000108,0x0004003d,0x00000006,0x0000010a,0x0000004b,0x0003003e, + 0x00000109,0x0000010a,0x00070039,0x00000008,0x0000010b,0x00000046,0x00000105,0x00000107, + 0x00000109,0x0003003e,0x0000010c,0x0000010b,0x00050039,0x00000006,0x0000010d,0x00000038, + 0x0000010c,0x0003003e,0x00000104,0x0000010d,0x0004003d,0x00000006,0x0000010e,0x00000104, + 0x000200fe,0x0000010e,0x00010038,0x00050036,0x00000002,0x00000052,0x00000000,0x0000004f, + 0x00030037,0x0000002b,0x00000050,0x00030037,0x0000004e,0x00000051,0x000200f8,0x00000053, + 0x0004003b,0x0000004e,0x00000111,0x00000007,0x0004003b,0x0000004e,0x0000011a,0x00000007, + 0x0004003b,0x0000002b,0x00000122,0x00000007,0x0004003b,0x0000002b,0x0000012a,0x00000007, + 0x0004003b,0x00000007,0x0000012c,0x00000007,0x0004003b,0x0000000d,0x0000012d,0x00000007, + 0x0004003b,0x00000023,0x00000130,0x00000007,0x0004003b,0x0000002c,0x00000133,0x00000007, + 0x0004003b,0x0000000d,0x00000139,0x00000007,0x0004003b,0x0000000d,0x00000142,0x00000007, + 0x0004003b,0x00000007,0x00000144,0x00000007,0x0004003b,0x00000007,0x00000147,0x00000007, + 0x0004003b,0x0000000d,0x00000151,0x00000007,0x0004003b,0x00000007,0x00000153,0x00000007, + 0x0004003b,0x00000007,0x00000155,0x00000007,0x0004003b,0x00000007,0x00000158,0x00000007, + 0x0004003b,0x0000002b,0x0000015f,0x00000007,0x0004003b,0x0000002c,0x00000161,0x00000007, + 0x0003003e,0x00000111,0x00000099,0x000200f9,0x00000112,0x000200f8,0x00000112,0x000400f6, + 0x00000114,0x00000115,0x00000000,0x000200f9,0x00000116,0x000200f8,0x00000116,0x0004003d, + 0x00000029,0x00000117,0x00000111,0x000500b1,0x000000a9,0x00000119,0x00000117,0x00000118, + 0x000400fa,0x00000119,0x00000113,0x00000114,0x000200f8,0x00000113,0x0003003e,0x0000011a, + 0x00000099,0x000200f9,0x0000011b,0x000200f8,0x0000011b,0x000400f6,0x0000011d,0x0000011e, + 0x00000000,0x000200f9,0x0000011f,0x000200f8,0x0000011f,0x0004003d,0x00000029,0x00000120, + 0x0000011a,0x000500b1,0x000000a9,0x00000121,0x00000120,0x00000118,0x000400fa,0x00000121, + 0x0000011c,0x0000011d,0x000200f8,0x0000011c,0x0004003d,0x0000002a,0x00000123,0x00000050, + 0x00050084,0x0000002a,0x00000125,0x00000123,0x00000124,0x0004003d,0x00000029,0x00000126, + 0x0000011a,0x0004003d,0x00000029,0x00000127,0x00000111,0x00050050,0x0000002a,0x00000128, + 0x00000126,0x00000127,0x00050080,0x0000002a,0x00000129,0x00000125,0x00000128,0x0003003e, + 0x00000122,0x00000129,0x0004003d,0x0000002a,0x0000012b,0x00000122,0x0003003e,0x0000012a, + 0x0000012b,0x0003003e,0x0000012c,0x00000059,0x0004003d,0x0000002a,0x0000012e,0x0000012a, + 0x0004007c,0x00000022,0x0000012f,0x0000012e,0x0003003e,0x00000130,0x0000012f,0x00050039, + 0x00000024,0x00000131,0x00000027,0x00000130,0x0008004f,0x00000008,0x00000132,0x00000131, + 0x00000131,0x00000000,0x00000001,0x00000002,0x0003003e,0x0000012d,0x00000132,0x00040039, + 0x0000001a,0x00000134,0x0000001c,0x0003003e,0x00000133,0x00000134,0x0004003d,0x0000001a, + 0x00000135,0x00000133,0x000500aa,0x000000a9,0x00000136,0x00000135,0x000000a3,0x000300f7, + 0x00000138,0x00000000,0x000400fa,0x00000136,0x00000137,0x0000013c,0x000200f8,0x00000137, + 0x0004003d,0x00000008,0x0000013a,0x0000012d,0x0003003e,0x00000139,0x0000013a,0x00050039, + 0x00000006,0x0000013b,0x00000038,0x00000139,0x0003003e,0x0000012c,0x0000013b,0x000200f9, + 0x00000138,0x000200f8,0x0000013c,0x0004003d,0x0000001a,0x0000013d,0x00000133,0x000500aa, + 0x000000a9,0x0000013e,0x0000013d,0x000000c5,0x000300f7,0x00000140,0x00000000,0x000400fa, + 0x0000013e,0x0000013f,0x0000014a,0x000200f8,0x0000013f,0x00040039,0x0000001e,0x00000141, + 0x00000020,0x0004003d,0x00000008,0x00000143,0x0000012d,0x0003003e,0x00000142,0x00000143, + 0x00050051,0x00000006,0x00000145,0x00000141,0x00000001,0x0003003e,0x00000144,0x00000145, + 0x00060039,0x00000006,0x00000146,0x00000040,0x00000142,0x00000144,0x0003003e,0x0000012c, + 0x00000146,0x0004003d,0x00000006,0x00000148,0x0000012c,0x0003003e,0x00000147,0x00000148, + 0x00050039,0x00000006,0x00000149,0x00000034,0x00000147,0x0003003e,0x0000012c,0x00000149, + 0x000200f9,0x00000140,0x000200f8,0x0000014a,0x0004003d,0x0000001a,0x0000014b,0x00000133, + 0x000500aa,0x000000a9,0x0000014c,0x0000014b,0x000000cb,0x000300f7,0x0000014e,0x00000000, + 0x000400fa,0x0000014c,0x0000014d,0x0000014e,0x000200f8,0x0000014d,0x00040039,0x0000001e, + 0x0000014f,0x00000020,0x00040039,0x0000001e,0x00000150,0x00000020,0x0004003d,0x00000008, + 0x00000152,0x0000012d,0x0003003e,0x00000151,0x00000152,0x00050051,0x00000006,0x00000154, + 0x0000014f,0x00000000,0x0003003e,0x00000153,0x00000154,0x00050051,0x00000006,0x00000156, + 0x00000150,0x00000001,0x0003003e,0x00000155,0x00000156,0x00070039,0x00000006,0x00000157, + 0x0000004c,0x00000151,0x00000153,0x00000155,0x0003003e,0x0000012c,0x00000157,0x0004003d, + 0x00000006,0x00000159,0x0000012c,0x0003003e,0x00000158,0x00000159,0x00050039,0x00000006, + 0x0000015a,0x00000034,0x00000158,0x0003003e,0x0000012c,0x0000015a,0x000200f9,0x0000014e, + 0x000200f8,0x0000014e,0x000200f9,0x00000140,0x000200f8,0x00000140,0x000200f9,0x00000138, + 0x000200f8,0x00000138,0x0004003d,0x00000006,0x0000015b,0x0000012c,0x00050085,0x00000006, + 0x0000015d,0x0000015b,0x0000015c,0x0004006d,0x0000001a,0x0000015e,0x0000015d,0x0004003d, + 0x0000002a,0x00000160,0x00000122,0x0003003e,0x0000015f,0x00000160,0x0003003e,0x00000161, + 0x0000015e,0x00060039,0x00000002,0x00000162,0x00000030,0x0000015f,0x00000161,0x000200f9, + 0x0000011e,0x000200f8,0x0000011e,0x0004003d,0x00000029,0x00000163,0x0000011a,0x00050080, + 0x00000029,0x00000165,0x00000163,0x00000164,0x0003003e,0x0000011a,0x00000165,0x000200f9, + 0x0000011b,0x000200f8,0x0000011d,0x000200f9,0x00000115,0x000200f8,0x00000115,0x0004003d, + 0x00000029,0x00000166,0x00000111,0x00050080,0x00000029,0x00000167,0x00000166,0x00000164, + 0x0003003e,0x00000111,0x00000167,0x000200f9,0x00000112,0x000200f8,0x00000114,0x000100fd, + 0x00010038 +}; diff --git a/gpu/vk/shaders/fsr3_of_scale_optical_flow_v5_comp_spv.h b/gpu/vk/shaders/fsr3_of_scale_optical_flow_v5_comp_spv.h new file mode 100644 index 000000000..dcd4c90e7 --- /dev/null +++ b/gpu/vk/shaders/fsr3_of_scale_optical_flow_v5_comp_spv.h @@ -0,0 +1,522 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_OF_SCALE_OPTICAL_FLOW_V5_COMP_SPV[] = { + 0x07230203,0x00010300,0x0008000b,0x000002a7,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000031,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e, + 0x00000000,0x00000001,0x0007000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x0000029a, + 0x0000029d,0x00060010,0x00000004,0x00000011,0x00000004,0x00000004,0x00000004,0x00030003, + 0x00000002,0x000001c2,0x000b0004,0x455f4c47,0x735f5458,0x6c706d61,0x656c7265,0x745f7373, + 0x75747865,0x665f6572,0x74636e75,0x736e6f69,0x00000000,0x000b0004,0x455f4c47,0x735f5458, + 0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570, + 0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f, + 0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65, + 0x74636572,0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000b, + 0x4d786666,0x69286e69,0x31693b31,0x0000003b,0x00030005,0x00000009,0x00000078,0x00030005, + 0x0000000a,0x00000079,0x00060005,0x0000000f,0x4d786666,0x69287861,0x31693b31,0x0000003b, + 0x00030005,0x0000000d,0x00000078,0x00030005,0x0000000e,0x00000079,0x000b0005,0x0000001a, + 0x50746547,0x656b6361,0x6d754c64,0x31692861,0x3b31693b,0x753b3175,0x31753b31,0x3b31753b, + 0x00000000,0x00040005,0x00000014,0x74646977,0x00000068,0x00030005,0x00000015,0x00000078, + 0x00040005,0x00000016,0x616d756c,0x00000030,0x00040005,0x00000017,0x616d756c,0x00000031, + 0x00040005,0x00000018,0x616d756c,0x00000032,0x00040005,0x00000019,0x616d756c,0x00000033, + 0x00050005,0x0000001f,0x28646153,0x753b3175,0x00003b31,0x00030005,0x0000001d,0x00000061, + 0x00030005,0x0000001e,0x00000062,0x00060005,0x00000023,0x70736944,0x5379616c,0x28657a69, + 0x00000000,0x00050005,0x00000026,0x6d617246,0x646e4965,0x00287865,0x00090005,0x00000028, + 0x6974704f,0x466c6163,0x50776f6c,0x6d617279,0x654c6469,0x286c6576,0x00000000,0x00090005, + 0x0000002d,0x64616f4c,0x6974704f,0x466c6163,0x49776f6c,0x7475706e,0x32697628,0x0000003b, + 0x00040005,0x0000002c,0x50785069,0x0000736f,0x000b0005,0x00000030,0x64616f4c,0x6974704f, + 0x466c6163,0x50776f6c,0x69766572,0x4973756f,0x7475706e,0x32697628,0x0000003b,0x00040005, + 0x0000002f,0x50785069,0x0000736f,0x00080005,0x00000034,0x64616f4c,0x6974704f,0x466c6163, + 0x28776f6c,0x3b326976,0x00000000,0x00040005,0x00000033,0x50785069,0x0000736f,0x000b0005, + 0x00000039,0x726f7453,0x74704f65,0x6c616369,0x776f6c46,0x7478654e,0x6576654c,0x6976286c, + 0x69763b32,0x00003b32,0x00040005,0x00000037,0x50785069,0x0000736f,0x00060005,0x00000038, + 0x69746f6d,0x65566e6f,0x726f7463,0x00000000,0x00070005,0x0000003d,0x64616f4c,0x43537752, + 0x74754f44,0x28747570,0x003b3169,0x00040005,0x0000003c,0x646e4969,0x00007865,0x00060005, + 0x00000041,0x63537349,0x43656e65,0x676e6168,0x00286465,0x000a0005,0x00000044,0x64616f4c, + 0x73726946,0x616d4974,0x61506567,0x64656b63,0x616d754c,0x32697628,0x0000003b,0x00040005, + 0x00000043,0x50785069,0x0000736f,0x000a0005,0x00000047,0x64616f4c,0x6f636553,0x6d49646e, + 0x50656761,0x656b6361,0x6d754c64,0x69762861,0x00003b32,0x00040005,0x00000046,0x50785069, + 0x0000736f,0x000b0005,0x0000004e,0x6c616353,0x74704f65,0x6c616369,0x776f6c46,0x61766441, + 0x6465636e,0x33697628,0x3369763b,0x0000003b,0x00050005,0x0000004c,0x6f6c4769,0x496c6162, + 0x00000064,0x00050005,0x0000004d,0x636f4c69,0x64496c61,0x00000000,0x00050005,0x0000005a, + 0x6b636170,0x754c6465,0x0000616d,0x00070005,0x0000006d,0x4f74756f,0x72635366,0x466e6565, + 0x656c6c69,0x00000072,0x00070005,0x00000094,0x4f74756f,0x72635366,0x466e6565,0x656c6c69, + 0x00000072,0x00040005,0x000000ec,0x464f6263,0x0000745f,0x00090006,0x000000ec,0x00000000, + 0x706e4969,0x754c7475,0x6552616d,0x756c6f73,0x6e6f6974,0x00000000,0x000a0006,0x000000ec, + 0x00000001,0x74704f75,0x6c616369,0x776f6c46,0x61727950,0x4c64696d,0x6c657665,0x00000000, + 0x000b0006,0x000000ec,0x00000002,0x74704f75,0x6c616369,0x776f6c46,0x61727950,0x4c64696d, + 0x6c657665,0x6e756f43,0x00000074,0x00060006,0x000000ec,0x00000003,0x61724669,0x6e49656d, + 0x00786564,0x000a0006,0x000000ec,0x00000004,0x6b636162,0x66667562,0x72547265,0x66736e61, + 0x75467265,0x6974636e,0x00006e6f,0x00070006,0x000000ec,0x00000005,0x4d6e696d,0x754c7861, + 0x616e696d,0x0065636e,0x00040005,0x000000ee,0x464f6263,0x00000000,0x00080005,0x000000ff, + 0x706f5f72,0x61636974,0x6c665f6c,0x695f776f,0x7475706e,0x00000000,0x000a0005,0x00000108, + 0x706f5f72,0x61636974,0x6c665f6c,0x705f776f,0x69766572,0x5f73756f,0x75706e69,0x00000074, + 0x00060005,0x00000111,0x706f5f72,0x61636974,0x6c665f6c,0x0000776f,0x00090005,0x0000011b, + 0x6f5f7772,0x63697470,0x665f6c61,0x5f776f6c,0x7478656e,0x76656c5f,0x00006c65,0x00090005, + 0x00000124,0x6f5f7772,0x63697470,0x665f6c61,0x5f776f6c,0x5f646373,0x7074756f,0x00007475, + 0x00040005,0x00000134,0x61726170,0x0000006d,0x00070005,0x0000013b,0x616d756c,0x74786554, + 0x57657275,0x68746469,0x00000000,0x00070005,0x00000140,0x616d756c,0x74786554,0x48657275, + 0x68676965,0x00000074,0x00050005,0x00000146,0x756a6461,0x64657473,0x00736f50,0x00040005, + 0x00000149,0x61726170,0x0000006d,0x00040005,0x0000014a,0x61726170,0x0000006d,0x00040005, + 0x0000014e,0x61726170,0x0000006d,0x00040005,0x0000014f,0x61726170,0x0000006d,0x00040005, + 0x00000153,0x61726170,0x0000006d,0x00040005,0x00000154,0x61726170,0x0000006d,0x00040005, + 0x00000158,0x61726170,0x0000006d,0x00040005,0x00000159,0x61726170,0x0000006d,0x00040005, + 0x0000015c,0x616d756c,0x00000030,0x00040005,0x00000160,0x61726170,0x0000006d,0x00040005, + 0x00000162,0x616d756c,0x00000031,0x00040005,0x00000166,0x61726170,0x0000006d,0x00040005, + 0x00000168,0x616d756c,0x00000032,0x00040005,0x0000016c,0x61726170,0x0000006d,0x00040005, + 0x0000016e,0x616d756c,0x00000033,0x00040005,0x00000172,0x61726170,0x0000006d,0x00040005, + 0x00000174,0x61726170,0x0000006d,0x00040005,0x00000176,0x61726170,0x0000006d,0x00040005, + 0x00000179,0x61726170,0x0000006d,0x00040005,0x0000017b,0x61726170,0x0000006d,0x00040005, + 0x0000017d,0x61726170,0x0000006d,0x00040005,0x0000017f,0x61726170,0x0000006d,0x00070005, + 0x00000184,0x616d756c,0x74786554,0x57657275,0x68746469,0x00000000,0x00070005,0x00000189, + 0x616d756c,0x74786554,0x48657275,0x68676965,0x00000074,0x00050005,0x0000018e,0x756a6461, + 0x64657473,0x00736f50,0x00040005,0x00000191,0x61726170,0x0000006d,0x00040005,0x00000192, + 0x61726170,0x0000006d,0x00040005,0x00000196,0x61726170,0x0000006d,0x00040005,0x00000197, + 0x61726170,0x0000006d,0x00040005,0x0000019b,0x61726170,0x0000006d,0x00040005,0x0000019c, + 0x61726170,0x0000006d,0x00040005,0x000001a0,0x61726170,0x0000006d,0x00040005,0x000001a1, + 0x61726170,0x0000006d,0x00040005,0x000001a4,0x616d756c,0x00000030,0x00040005,0x000001a7, + 0x61726170,0x0000006d,0x00040005,0x000001a9,0x616d756c,0x00000031,0x00040005,0x000001ac, + 0x61726170,0x0000006d,0x00040005,0x000001ae,0x616d756c,0x00000032,0x00040005,0x000001b1, + 0x61726170,0x0000006d,0x00040005,0x000001b3,0x616d756c,0x00000033,0x00040005,0x000001b6, + 0x61726170,0x0000006d,0x00040005,0x000001b8,0x61726170,0x0000006d,0x00040005,0x000001ba, + 0x61726170,0x0000006d,0x00040005,0x000001bd,0x61726170,0x0000006d,0x00040005,0x000001bf, + 0x61726170,0x0000006d,0x00040005,0x000001c1,0x61726170,0x0000006d,0x00040005,0x000001c3, + 0x61726170,0x0000006d,0x00040005,0x000001cb,0x61726170,0x0000006d,0x00040005,0x000001ce, + 0x61726170,0x0000006d,0x00040005,0x000001d1,0x66664f78,0x00746573,0x00040005,0x000001db, + 0x66664f79,0x00746573,0x00050005,0x000001e4,0x4f637273,0x736f5046,0x00000000,0x00060005, + 0x000001f0,0x7261656e,0x56747365,0x6f746365,0x00000072,0x00040005,0x000001f1,0x61726170, + 0x0000006d,0x00060005,0x000001f9,0x7261656e,0x56747365,0x6f746365,0x00007372,0x00040005, + 0x00000205,0x5978616d,0x00000000,0x00030005,0x00000206,0x0000006e,0x00040005,0x00000211, + 0x616d756c,0x00736f50,0x00050005,0x0000021c,0x73726966,0x78695074,0x00006c65,0x00040005, + 0x0000021d,0x61726170,0x0000006d,0x00050005,0x00000224,0x61636f6c,0x6765526c,0x006e6f69, + 0x00030005,0x00000231,0x00646173,0x00030005,0x00000232,0x0000006e,0x00040005,0x0000023b, + 0x616d756c,0x00736f50,0x00050005,0x00000248,0x6f636573,0x6950646e,0x006c6578,0x00040005, + 0x00000249,0x61726170,0x0000006d,0x00040005,0x00000251,0x61726170,0x0000006d,0x00040005, + 0x00000254,0x61726170,0x0000006d,0x00040005,0x0000025b,0x73646173,0x00000000,0x00040005, + 0x00000269,0x74736562,0x00646153,0x00040005,0x0000026b,0x74736562,0x00006449,0x00030005, + 0x0000026c,0x0000006e,0x00060005,0x0000028a,0x7074756f,0x65567475,0x726f7463,0x00000000, + 0x00040005,0x00000292,0x61726170,0x0000006d,0x00040005,0x00000295,0x61726170,0x0000006d, + 0x00080005,0x0000029a,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044, + 0x00080005,0x0000029d,0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163,0x44496e6f,0x00000000, + 0x00040005,0x000002a0,0x61726170,0x0000006d,0x00040005,0x000002a1,0x61726170,0x0000006d, + 0x00030047,0x000000ec,0x00000002,0x00050048,0x000000ec,0x00000000,0x00000023,0x00000000, + 0x00050048,0x000000ec,0x00000001,0x00000023,0x00000008,0x00050048,0x000000ec,0x00000002, + 0x00000023,0x0000000c,0x00050048,0x000000ec,0x00000003,0x00000023,0x00000010,0x00050048, + 0x000000ec,0x00000004,0x00000023,0x00000014,0x00050048,0x000000ec,0x00000005,0x00000023, + 0x00000018,0x00040047,0x000000ee,0x00000021,0x00000005,0x00040047,0x000000ee,0x00000022, + 0x00000000,0x00040047,0x000000ff,0x00000021,0x00000000,0x00040047,0x000000ff,0x00000022, + 0x00000000,0x00040047,0x00000108,0x00000021,0x00000001,0x00040047,0x00000108,0x00000022, + 0x00000000,0x00040047,0x00000111,0x00000021,0x00000002,0x00040047,0x00000111,0x00000022, + 0x00000000,0x00040047,0x0000011b,0x00000021,0x00000003,0x00040047,0x0000011b,0x00000022, + 0x00000000,0x00040047,0x00000124,0x00000021,0x00000004,0x00040047,0x00000124,0x00000022, + 0x00000000,0x00040047,0x0000029a,0x0000000b,0x0000001c,0x00040047,0x0000029d,0x0000000b, + 0x0000001b,0x00040047,0x000002a6,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021, + 0x00000003,0x00000002,0x00040015,0x00000006,0x00000020,0x00000001,0x00040020,0x00000007, + 0x00000007,0x00000006,0x00050021,0x00000008,0x00000006,0x00000007,0x00000007,0x00040015, + 0x00000011,0x00000020,0x00000000,0x00040020,0x00000012,0x00000007,0x00000011,0x00090021, + 0x00000013,0x00000011,0x00000007,0x00000007,0x00000012,0x00000012,0x00000012,0x00000012, + 0x00050021,0x0000001c,0x00000011,0x00000012,0x00000012,0x00040017,0x00000021,0x00000006, + 0x00000002,0x00030021,0x00000022,0x00000021,0x00030021,0x00000025,0x00000011,0x00040020, + 0x0000002a,0x00000007,0x00000021,0x00040021,0x0000002b,0x00000011,0x0000002a,0x00040021, + 0x00000032,0x00000021,0x0000002a,0x00050021,0x00000036,0x00000002,0x0000002a,0x0000002a, + 0x00040021,0x0000003b,0x00000011,0x00000007,0x00020014,0x0000003f,0x00030021,0x00000040, + 0x0000003f,0x00040017,0x00000049,0x00000006,0x00000003,0x00040020,0x0000004a,0x00000007, + 0x00000049,0x00050021,0x0000004b,0x00000002,0x0000004a,0x0000004a,0x0004002b,0x00000006, + 0x0000005d,0x00000008,0x0004002b,0x00000006,0x00000061,0x00000010,0x0004002b,0x00000006, + 0x00000065,0x00000018,0x0004002b,0x00000006,0x00000069,0x00000000,0x0004002b,0x00000011, + 0x0000006f,0x000000ff,0x0004002b,0x00000006,0x00000072,0xffffffff,0x0004002b,0x00000006, + 0x0000007b,0xfffffffe,0x0004002b,0x00000006,0x00000084,0xfffffffd,0x0004002b,0x00000006, + 0x0000008f,0x00000004,0x0004002b,0x00000011,0x00000096,0xff000000,0x0004002b,0x00000006, + 0x0000009a,0x00000003,0x0004002b,0x00000006,0x000000a5,0x00000002,0x0004002b,0x00000006, + 0x000000b0,0x00000001,0x00030016,0x000000ea,0x00000020,0x00040017,0x000000eb,0x000000ea, + 0x00000002,0x0008001e,0x000000ec,0x00000021,0x00000011,0x00000011,0x00000011,0x00000011, + 0x000000eb,0x00040020,0x000000ed,0x00000002,0x000000ec,0x0004003b,0x000000ed,0x000000ee, + 0x00000002,0x00040020,0x000000ef,0x00000002,0x00000021,0x00040020,0x000000f4,0x00000002, + 0x00000011,0x00090019,0x000000fd,0x00000011,0x00000001,0x00000000,0x00000000,0x00000000, + 0x00000001,0x00000000,0x00040020,0x000000fe,0x00000000,0x000000fd,0x0004003b,0x000000fe, + 0x000000ff,0x00000000,0x00040017,0x00000102,0x00000011,0x00000004,0x0004002b,0x00000011, + 0x00000104,0x00000000,0x0004003b,0x000000fe,0x00000108,0x00000000,0x00090019,0x0000010f, + 0x00000006,0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x00040020, + 0x00000110,0x00000000,0x0000010f,0x0004003b,0x00000110,0x00000111,0x00000000,0x00040017, + 0x00000114,0x00000006,0x00000004,0x00090019,0x00000119,0x00000006,0x00000001,0x00000000, + 0x00000000,0x00000000,0x00000002,0x0000001a,0x00040020,0x0000011a,0x00000000,0x00000119, + 0x0004003b,0x0000011a,0x0000011b,0x00000000,0x00090019,0x00000122,0x00000011,0x00000001, + 0x00000000,0x00000000,0x00000000,0x00000002,0x00000021,0x00040020,0x00000123,0x00000000, + 0x00000122,0x0004003b,0x00000123,0x00000124,0x00000000,0x0004002b,0x00000011,0x0000012d, + 0x00000005,0x00030029,0x0000003f,0x00000131,0x0004002b,0x00000011,0x00000136,0x0000000f, + 0x0004002b,0x00000011,0x00000142,0x00000001,0x0005002c,0x00000021,0x0000015e,0x00000069, + 0x00000069,0x0005002c,0x00000021,0x00000164,0x000000b0,0x00000069,0x0005002c,0x00000021, + 0x0000016a,0x000000a5,0x00000069,0x0005002c,0x00000021,0x00000170,0x0000009a,0x00000069, + 0x0004002b,0x00000011,0x000001d2,0x00000002,0x0004002b,0x00000011,0x000001f4,0x00000004, + 0x0004001c,0x000001f5,0x00000021,0x000001f4,0x0004001c,0x000001f6,0x000001f5,0x000001f4, + 0x0004001c,0x000001f7,0x000001f6,0x000001f4,0x00040020,0x000001f8,0x00000004,0x000001f7, + 0x0004003b,0x000001f8,0x000001f9,0x00000004,0x00040020,0x00000203,0x00000004,0x00000021, + 0x0004001c,0x00000220,0x00000011,0x000001f4,0x0004001c,0x00000221,0x00000220,0x000001f4, + 0x0004001c,0x00000222,0x00000221,0x000001f4,0x00040020,0x00000223,0x00000004,0x00000222, + 0x0004003b,0x00000223,0x00000224,0x00000004,0x00040020,0x0000022b,0x00000004,0x00000011, + 0x0004002b,0x00000011,0x0000022f,0x00000d48,0x0004002b,0x00000011,0x00000230,0x00000108, + 0x0004003b,0x00000223,0x0000025b,0x00000004,0x0004002b,0x00000011,0x0000026a,0xffffffff, + 0x00040017,0x00000298,0x00000011,0x00000003,0x00040020,0x00000299,0x00000001,0x00000298, + 0x0004003b,0x00000299,0x0000029a,0x00000001,0x0004003b,0x00000299,0x0000029d,0x00000001, + 0x0004002b,0x000000ea,0x000002a3,0x387fda40,0x0004002b,0x000000ea,0x000002a4,0x477fe000, + 0x0004002b,0x000000ea,0x000002a5,0x37801002,0x0006002c,0x00000298,0x000002a6,0x000001f4, + 0x000001f4,0x000001f4,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8, + 0x00000005,0x0004003b,0x0000004a,0x000002a0,0x00000007,0x0004003b,0x0000004a,0x000002a1, + 0x00000007,0x0004003d,0x00000298,0x0000029b,0x0000029a,0x0004007c,0x00000049,0x0000029c, + 0x0000029b,0x0004003d,0x00000298,0x0000029e,0x0000029d,0x0004007c,0x00000049,0x0000029f, + 0x0000029e,0x0003003e,0x000002a0,0x0000029c,0x0003003e,0x000002a1,0x0000029f,0x00060039, + 0x00000002,0x000002a2,0x0000004e,0x000002a0,0x000002a1,0x000100fd,0x00010038,0x00050036, + 0x00000006,0x0000000b,0x00000000,0x00000008,0x00030037,0x00000007,0x00000009,0x00030037, + 0x00000007,0x0000000a,0x000200f8,0x0000000c,0x0004003d,0x00000006,0x00000050,0x00000009, + 0x0004003d,0x00000006,0x00000051,0x0000000a,0x0007000c,0x00000006,0x00000052,0x00000001, + 0x00000027,0x00000050,0x00000051,0x000200fe,0x00000052,0x00010038,0x00050036,0x00000006, + 0x0000000f,0x00000000,0x00000008,0x00030037,0x00000007,0x0000000d,0x00030037,0x00000007, + 0x0000000e,0x000200f8,0x00000010,0x0004003d,0x00000006,0x00000055,0x0000000d,0x0004003d, + 0x00000006,0x00000056,0x0000000e,0x0007000c,0x00000006,0x00000057,0x00000001,0x0000002a, + 0x00000055,0x00000056,0x000200fe,0x00000057,0x00010038,0x00050036,0x00000011,0x0000001a, + 0x00000000,0x00000013,0x00030037,0x00000007,0x00000014,0x00030037,0x00000007,0x00000015, + 0x00030037,0x00000012,0x00000016,0x00030037,0x00000012,0x00000017,0x00030037,0x00000012, + 0x00000018,0x00030037,0x00000012,0x00000019,0x000200f8,0x0000001b,0x0004003b,0x00000012, + 0x0000005a,0x00000007,0x0004003b,0x00000012,0x0000006d,0x00000007,0x0004003b,0x00000012, + 0x00000094,0x00000007,0x0004003d,0x00000011,0x0000005b,0x00000016,0x0004003d,0x00000011, + 0x0000005c,0x00000017,0x000500c4,0x00000011,0x0000005e,0x0000005c,0x0000005d,0x000500c5, + 0x00000011,0x0000005f,0x0000005b,0x0000005e,0x0004003d,0x00000011,0x00000060,0x00000018, + 0x000500c4,0x00000011,0x00000062,0x00000060,0x00000061,0x000500c5,0x00000011,0x00000063, + 0x0000005f,0x00000062,0x0004003d,0x00000011,0x00000064,0x00000019,0x000500c4,0x00000011, + 0x00000066,0x00000064,0x00000065,0x000500c5,0x00000011,0x00000067,0x00000063,0x00000066, + 0x0003003e,0x0000005a,0x00000067,0x0004003d,0x00000006,0x00000068,0x00000015,0x000500b1, + 0x0000003f,0x0000006a,0x00000068,0x00000069,0x000300f7,0x0000006c,0x00000000,0x000400fa, + 0x0000006a,0x0000006b,0x0000008c,0x000200f8,0x0000006b,0x0004003d,0x00000011,0x0000006e, + 0x0000005a,0x000500c7,0x00000011,0x00000070,0x0000006e,0x0000006f,0x0003003e,0x0000006d, + 0x00000070,0x0004003d,0x00000006,0x00000071,0x00000015,0x000500b3,0x0000003f,0x00000073, + 0x00000071,0x00000072,0x000300f7,0x00000075,0x00000000,0x000400fa,0x00000073,0x00000074, + 0x00000075,0x000200f8,0x00000074,0x0004003d,0x00000011,0x00000076,0x0000005a,0x000500c4, + 0x00000011,0x00000077,0x00000076,0x0000005d,0x0004003d,0x00000011,0x00000078,0x0000006d, + 0x000500c5,0x00000011,0x00000079,0x00000077,0x00000078,0x0003003e,0x0000005a,0x00000079, + 0x000200f9,0x00000075,0x000200f8,0x00000075,0x0004003d,0x00000006,0x0000007a,0x00000015, + 0x000500b3,0x0000003f,0x0000007c,0x0000007a,0x0000007b,0x000300f7,0x0000007e,0x00000000, + 0x000400fa,0x0000007c,0x0000007d,0x0000007e,0x000200f8,0x0000007d,0x0004003d,0x00000011, + 0x0000007f,0x0000005a,0x000500c4,0x00000011,0x00000080,0x0000007f,0x0000005d,0x0004003d, + 0x00000011,0x00000081,0x0000006d,0x000500c5,0x00000011,0x00000082,0x00000080,0x00000081, + 0x0003003e,0x0000005a,0x00000082,0x000200f9,0x0000007e,0x000200f8,0x0000007e,0x0004003d, + 0x00000006,0x00000083,0x00000015,0x000500b3,0x0000003f,0x00000085,0x00000083,0x00000084, + 0x000300f7,0x00000087,0x00000000,0x000400fa,0x00000085,0x00000086,0x00000087,0x000200f8, + 0x00000086,0x0004003d,0x00000011,0x00000088,0x0000005a,0x000500c4,0x00000011,0x00000089, + 0x00000088,0x0000005d,0x0004003d,0x00000011,0x0000008a,0x0000006d,0x000500c5,0x00000011, + 0x0000008b,0x00000089,0x0000008a,0x0003003e,0x0000005a,0x0000008b,0x000200f9,0x00000087, + 0x000200f8,0x00000087,0x000200f9,0x0000006c,0x000200f8,0x0000008c,0x0004003d,0x00000006, + 0x0000008d,0x00000015,0x0004003d,0x00000006,0x0000008e,0x00000014,0x00050082,0x00000006, + 0x00000090,0x0000008e,0x0000008f,0x000500ad,0x0000003f,0x00000091,0x0000008d,0x00000090, + 0x000300f7,0x00000093,0x00000000,0x000400fa,0x00000091,0x00000092,0x00000093,0x000200f8, + 0x00000092,0x0004003d,0x00000011,0x00000095,0x0000005a,0x000500c7,0x00000011,0x00000097, + 0x00000095,0x00000096,0x0003003e,0x00000094,0x00000097,0x0004003d,0x00000006,0x00000098, + 0x00000015,0x0004003d,0x00000006,0x00000099,0x00000014,0x00050082,0x00000006,0x0000009b, + 0x00000099,0x0000009a,0x000500af,0x0000003f,0x0000009c,0x00000098,0x0000009b,0x000300f7, + 0x0000009e,0x00000000,0x000400fa,0x0000009c,0x0000009d,0x0000009e,0x000200f8,0x0000009d, + 0x0004003d,0x00000011,0x0000009f,0x0000005a,0x000500c2,0x00000011,0x000000a0,0x0000009f, + 0x0000005d,0x0004003d,0x00000011,0x000000a1,0x00000094,0x000500c5,0x00000011,0x000000a2, + 0x000000a0,0x000000a1,0x0003003e,0x0000005a,0x000000a2,0x000200f9,0x0000009e,0x000200f8, + 0x0000009e,0x0004003d,0x00000006,0x000000a3,0x00000015,0x0004003d,0x00000006,0x000000a4, + 0x00000014,0x00050082,0x00000006,0x000000a6,0x000000a4,0x000000a5,0x000500af,0x0000003f, + 0x000000a7,0x000000a3,0x000000a6,0x000300f7,0x000000a9,0x00000000,0x000400fa,0x000000a7, + 0x000000a8,0x000000a9,0x000200f8,0x000000a8,0x0004003d,0x00000011,0x000000aa,0x0000005a, + 0x000500c2,0x00000011,0x000000ab,0x000000aa,0x0000005d,0x0004003d,0x00000011,0x000000ac, + 0x00000094,0x000500c5,0x00000011,0x000000ad,0x000000ab,0x000000ac,0x0003003e,0x0000005a, + 0x000000ad,0x000200f9,0x000000a9,0x000200f8,0x000000a9,0x0004003d,0x00000006,0x000000ae, + 0x00000015,0x0004003d,0x00000006,0x000000af,0x00000014,0x00050082,0x00000006,0x000000b1, + 0x000000af,0x000000b0,0x000500af,0x0000003f,0x000000b2,0x000000ae,0x000000b1,0x000300f7, + 0x000000b4,0x00000000,0x000400fa,0x000000b2,0x000000b3,0x000000b4,0x000200f8,0x000000b3, + 0x0004003d,0x00000011,0x000000b5,0x0000005a,0x000500c2,0x00000011,0x000000b6,0x000000b5, + 0x0000005d,0x0004003d,0x00000011,0x000000b7,0x00000094,0x000500c5,0x00000011,0x000000b8, + 0x000000b6,0x000000b7,0x0003003e,0x0000005a,0x000000b8,0x000200f9,0x000000b4,0x000200f8, + 0x000000b4,0x000200f9,0x00000093,0x000200f8,0x00000093,0x000200f9,0x0000006c,0x000200f8, + 0x0000006c,0x0004003d,0x00000011,0x000000b9,0x0000005a,0x000200fe,0x000000b9,0x00010038, + 0x00050036,0x00000011,0x0000001f,0x00000000,0x0000001c,0x00030037,0x00000012,0x0000001d, + 0x00030037,0x00000012,0x0000001e,0x000200f8,0x00000020,0x0004003d,0x00000011,0x000000bc, + 0x0000001d,0x000500c2,0x00000011,0x000000bd,0x000000bc,0x00000069,0x000500c7,0x00000011, + 0x000000be,0x000000bd,0x0000006f,0x0004007c,0x00000006,0x000000bf,0x000000be,0x0004003d, + 0x00000011,0x000000c0,0x0000001e,0x000500c2,0x00000011,0x000000c1,0x000000c0,0x00000069, + 0x000500c7,0x00000011,0x000000c2,0x000000c1,0x0000006f,0x0004007c,0x00000006,0x000000c3, + 0x000000c2,0x00050082,0x00000006,0x000000c4,0x000000bf,0x000000c3,0x0006000c,0x00000006, + 0x000000c5,0x00000001,0x00000005,0x000000c4,0x0004003d,0x00000011,0x000000c6,0x0000001d, + 0x000500c2,0x00000011,0x000000c7,0x000000c6,0x0000005d,0x000500c7,0x00000011,0x000000c8, + 0x000000c7,0x0000006f,0x0004007c,0x00000006,0x000000c9,0x000000c8,0x0004003d,0x00000011, + 0x000000ca,0x0000001e,0x000500c2,0x00000011,0x000000cb,0x000000ca,0x0000005d,0x000500c7, + 0x00000011,0x000000cc,0x000000cb,0x0000006f,0x0004007c,0x00000006,0x000000cd,0x000000cc, + 0x00050082,0x00000006,0x000000ce,0x000000c9,0x000000cd,0x0006000c,0x00000006,0x000000cf, + 0x00000001,0x00000005,0x000000ce,0x00050080,0x00000006,0x000000d0,0x000000c5,0x000000cf, + 0x0004003d,0x00000011,0x000000d1,0x0000001d,0x000500c2,0x00000011,0x000000d2,0x000000d1, + 0x00000061,0x000500c7,0x00000011,0x000000d3,0x000000d2,0x0000006f,0x0004007c,0x00000006, + 0x000000d4,0x000000d3,0x0004003d,0x00000011,0x000000d5,0x0000001e,0x000500c2,0x00000011, + 0x000000d6,0x000000d5,0x00000061,0x000500c7,0x00000011,0x000000d7,0x000000d6,0x0000006f, + 0x0004007c,0x00000006,0x000000d8,0x000000d7,0x00050082,0x00000006,0x000000d9,0x000000d4, + 0x000000d8,0x0006000c,0x00000006,0x000000da,0x00000001,0x00000005,0x000000d9,0x00050080, + 0x00000006,0x000000db,0x000000d0,0x000000da,0x0004003d,0x00000011,0x000000dc,0x0000001d, + 0x000500c2,0x00000011,0x000000dd,0x000000dc,0x00000065,0x000500c7,0x00000011,0x000000de, + 0x000000dd,0x0000006f,0x0004007c,0x00000006,0x000000df,0x000000de,0x0004003d,0x00000011, + 0x000000e0,0x0000001e,0x000500c2,0x00000011,0x000000e1,0x000000e0,0x00000065,0x000500c7, + 0x00000011,0x000000e2,0x000000e1,0x0000006f,0x0004007c,0x00000006,0x000000e3,0x000000e2, + 0x00050082,0x00000006,0x000000e4,0x000000df,0x000000e3,0x0006000c,0x00000006,0x000000e5, + 0x00000001,0x00000005,0x000000e4,0x00050080,0x00000006,0x000000e6,0x000000db,0x000000e5, + 0x0004007c,0x00000011,0x000000e7,0x000000e6,0x000200fe,0x000000e7,0x00010038,0x00050036, + 0x00000021,0x00000023,0x00000000,0x00000022,0x000200f8,0x00000024,0x00050041,0x000000ef, + 0x000000f0,0x000000ee,0x00000069,0x0004003d,0x00000021,0x000000f1,0x000000f0,0x000200fe, + 0x000000f1,0x00010038,0x00050036,0x00000011,0x00000026,0x00000000,0x00000025,0x000200f8, + 0x00000027,0x00050041,0x000000f4,0x000000f5,0x000000ee,0x0000009a,0x0004003d,0x00000011, + 0x000000f6,0x000000f5,0x000200fe,0x000000f6,0x00010038,0x00050036,0x00000011,0x00000028, + 0x00000000,0x00000025,0x000200f8,0x00000029,0x00050041,0x000000f4,0x000000f9,0x000000ee, + 0x000000b0,0x0004003d,0x00000011,0x000000fa,0x000000f9,0x000200fe,0x000000fa,0x00010038, + 0x00050036,0x00000011,0x0000002d,0x00000000,0x0000002b,0x00030037,0x0000002a,0x0000002c, + 0x000200f8,0x0000002e,0x0004003d,0x000000fd,0x00000100,0x000000ff,0x0004003d,0x00000021, + 0x00000101,0x0000002c,0x0007005f,0x00000102,0x00000103,0x00000100,0x00000101,0x00000002, + 0x00000069,0x00050051,0x00000011,0x00000105,0x00000103,0x00000000,0x000200fe,0x00000105, + 0x00010038,0x00050036,0x00000011,0x00000030,0x00000000,0x0000002b,0x00030037,0x0000002a, + 0x0000002f,0x000200f8,0x00000031,0x0004003d,0x000000fd,0x00000109,0x00000108,0x0004003d, + 0x00000021,0x0000010a,0x0000002f,0x0007005f,0x00000102,0x0000010b,0x00000109,0x0000010a, + 0x00000002,0x00000069,0x00050051,0x00000011,0x0000010c,0x0000010b,0x00000000,0x000200fe, + 0x0000010c,0x00010038,0x00050036,0x00000021,0x00000034,0x00000000,0x00000032,0x00030037, + 0x0000002a,0x00000033,0x000200f8,0x00000035,0x0004003d,0x0000010f,0x00000112,0x00000111, + 0x0004003d,0x00000021,0x00000113,0x00000033,0x0007005f,0x00000114,0x00000115,0x00000112, + 0x00000113,0x00000002,0x00000069,0x0007004f,0x00000021,0x00000116,0x00000115,0x00000115, + 0x00000000,0x00000001,0x000200fe,0x00000116,0x00010038,0x00050036,0x00000002,0x00000039, + 0x00000000,0x00000036,0x00030037,0x0000002a,0x00000037,0x00030037,0x0000002a,0x00000038, + 0x000200f8,0x0000003a,0x0004003d,0x00000119,0x0000011c,0x0000011b,0x0004003d,0x00000021, + 0x0000011d,0x00000037,0x0004003d,0x00000021,0x0000011e,0x00000038,0x00050051,0x00000006, + 0x0000011f,0x0000011e,0x00000000,0x00050051,0x00000006,0x00000120,0x0000011e,0x00000001, + 0x00070050,0x00000114,0x00000121,0x0000011f,0x00000120,0x00000069,0x00000069,0x00040063, + 0x0000011c,0x0000011d,0x00000121,0x000100fd,0x00010038,0x00050036,0x00000011,0x0000003d, + 0x00000000,0x0000003b,0x00030037,0x00000007,0x0000003c,0x000200f8,0x0000003e,0x0004003d, + 0x00000122,0x00000125,0x00000124,0x0004003d,0x00000006,0x00000126,0x0000003c,0x00050050, + 0x00000021,0x00000127,0x00000126,0x00000069,0x00050062,0x00000102,0x00000128,0x00000125, + 0x00000127,0x00050051,0x00000011,0x00000129,0x00000128,0x00000000,0x000200fe,0x00000129, + 0x00010038,0x00050036,0x0000003f,0x00000041,0x00000000,0x00000040,0x000200f8,0x00000042, + 0x0004003b,0x00000007,0x00000134,0x00000007,0x00040039,0x00000011,0x0000012c,0x00000026, + 0x000500b2,0x0000003f,0x0000012e,0x0000012c,0x0000012d,0x000300f7,0x00000130,0x00000000, + 0x000400fa,0x0000012e,0x0000012f,0x00000133,0x000200f8,0x0000012f,0x000200fe,0x00000131, + 0x000200f8,0x00000133,0x0003003e,0x00000134,0x000000b0,0x00050039,0x00000011,0x00000135, + 0x0000003d,0x00000134,0x000500c7,0x00000011,0x00000137,0x00000135,0x00000136,0x000500ab, + 0x0000003f,0x00000138,0x00000137,0x00000104,0x000200fe,0x00000138,0x000200f8,0x00000130, + 0x000100ff,0x00010038,0x00050036,0x00000011,0x00000044,0x00000000,0x0000002b,0x00030037, + 0x0000002a,0x00000043,0x000200f8,0x00000045,0x0004003b,0x00000007,0x0000013b,0x00000007, + 0x0004003b,0x00000007,0x00000140,0x00000007,0x0004003b,0x0000002a,0x00000146,0x00000007, + 0x0004003b,0x00000007,0x00000149,0x00000007,0x0004003b,0x00000007,0x0000014a,0x00000007, + 0x0004003b,0x00000007,0x0000014e,0x00000007,0x0004003b,0x00000007,0x0000014f,0x00000007, + 0x0004003b,0x00000007,0x00000153,0x00000007,0x0004003b,0x00000007,0x00000154,0x00000007, + 0x0004003b,0x00000007,0x00000158,0x00000007,0x0004003b,0x00000007,0x00000159,0x00000007, + 0x0004003b,0x00000012,0x0000015c,0x00000007,0x0004003b,0x0000002a,0x00000160,0x00000007, + 0x0004003b,0x00000012,0x00000162,0x00000007,0x0004003b,0x0000002a,0x00000166,0x00000007, + 0x0004003b,0x00000012,0x00000168,0x00000007,0x0004003b,0x0000002a,0x0000016c,0x00000007, + 0x0004003b,0x00000012,0x0000016e,0x00000007,0x0004003b,0x0000002a,0x00000172,0x00000007, + 0x0004003b,0x00000007,0x00000174,0x00000007,0x0004003b,0x00000007,0x00000176,0x00000007, + 0x0004003b,0x00000012,0x00000179,0x00000007,0x0004003b,0x00000012,0x0000017b,0x00000007, + 0x0004003b,0x00000012,0x0000017d,0x00000007,0x0004003b,0x00000012,0x0000017f,0x00000007, + 0x00040039,0x00000021,0x0000013c,0x00000023,0x00050051,0x00000006,0x0000013d,0x0000013c, + 0x00000000,0x00040039,0x00000011,0x0000013e,0x00000028,0x000500c3,0x00000006,0x0000013f, + 0x0000013d,0x0000013e,0x0003003e,0x0000013b,0x0000013f,0x00040039,0x00000021,0x00000141, + 0x00000023,0x00050051,0x00000006,0x00000143,0x00000141,0x00000001,0x00040039,0x00000011, + 0x00000144,0x00000028,0x000500c3,0x00000006,0x00000145,0x00000143,0x00000144,0x0003003e, + 0x00000140,0x00000145,0x0004003d,0x00000006,0x00000147,0x0000013b,0x00050082,0x00000006, + 0x00000148,0x00000147,0x0000008f,0x0003003e,0x00000149,0x00000148,0x00050041,0x00000007, + 0x0000014b,0x00000043,0x00000104,0x0004003d,0x00000006,0x0000014c,0x0000014b,0x0003003e, + 0x0000014a,0x0000014c,0x00060039,0x00000006,0x0000014d,0x0000000b,0x00000149,0x0000014a, + 0x0003003e,0x0000014e,0x00000069,0x0003003e,0x0000014f,0x0000014d,0x00060039,0x00000006, + 0x00000150,0x0000000f,0x0000014e,0x0000014f,0x0004003d,0x00000006,0x00000151,0x00000140, + 0x00050082,0x00000006,0x00000152,0x00000151,0x000000b0,0x0003003e,0x00000153,0x00000152, + 0x00050041,0x00000007,0x00000155,0x00000043,0x00000142,0x0004003d,0x00000006,0x00000156, + 0x00000155,0x0003003e,0x00000154,0x00000156,0x00060039,0x00000006,0x00000157,0x0000000b, + 0x00000153,0x00000154,0x0003003e,0x00000158,0x00000069,0x0003003e,0x00000159,0x00000157, + 0x00060039,0x00000006,0x0000015a,0x0000000f,0x00000158,0x00000159,0x00050050,0x00000021, + 0x0000015b,0x00000150,0x0000015a,0x0003003e,0x00000146,0x0000015b,0x0004003d,0x00000021, + 0x0000015d,0x00000146,0x00050080,0x00000021,0x0000015f,0x0000015d,0x0000015e,0x0003003e, + 0x00000160,0x0000015f,0x00050039,0x00000011,0x00000161,0x0000002d,0x00000160,0x0003003e, + 0x0000015c,0x00000161,0x0004003d,0x00000021,0x00000163,0x00000146,0x00050080,0x00000021, + 0x00000165,0x00000163,0x00000164,0x0003003e,0x00000166,0x00000165,0x00050039,0x00000011, + 0x00000167,0x0000002d,0x00000166,0x0003003e,0x00000162,0x00000167,0x0004003d,0x00000021, + 0x00000169,0x00000146,0x00050080,0x00000021,0x0000016b,0x00000169,0x0000016a,0x0003003e, + 0x0000016c,0x0000016b,0x00050039,0x00000011,0x0000016d,0x0000002d,0x0000016c,0x0003003e, + 0x00000168,0x0000016d,0x0004003d,0x00000021,0x0000016f,0x00000146,0x00050080,0x00000021, + 0x00000171,0x0000016f,0x00000170,0x0003003e,0x00000172,0x00000171,0x00050039,0x00000011, + 0x00000173,0x0000002d,0x00000172,0x0003003e,0x0000016e,0x00000173,0x0004003d,0x00000006, + 0x00000175,0x0000013b,0x0003003e,0x00000174,0x00000175,0x00050041,0x00000007,0x00000177, + 0x00000043,0x00000104,0x0004003d,0x00000006,0x00000178,0x00000177,0x0003003e,0x00000176, + 0x00000178,0x0004003d,0x00000011,0x0000017a,0x0000015c,0x0003003e,0x00000179,0x0000017a, + 0x0004003d,0x00000011,0x0000017c,0x00000162,0x0003003e,0x0000017b,0x0000017c,0x0004003d, + 0x00000011,0x0000017e,0x00000168,0x0003003e,0x0000017d,0x0000017e,0x0004003d,0x00000011, + 0x00000180,0x0000016e,0x0003003e,0x0000017f,0x00000180,0x000a0039,0x00000011,0x00000181, + 0x0000001a,0x00000174,0x00000176,0x00000179,0x0000017b,0x0000017d,0x0000017f,0x000200fe, + 0x00000181,0x00010038,0x00050036,0x00000011,0x00000047,0x00000000,0x0000002b,0x00030037, + 0x0000002a,0x00000046,0x000200f8,0x00000048,0x0004003b,0x00000007,0x00000184,0x00000007, + 0x0004003b,0x00000007,0x00000189,0x00000007,0x0004003b,0x0000002a,0x0000018e,0x00000007, + 0x0004003b,0x00000007,0x00000191,0x00000007,0x0004003b,0x00000007,0x00000192,0x00000007, + 0x0004003b,0x00000007,0x00000196,0x00000007,0x0004003b,0x00000007,0x00000197,0x00000007, + 0x0004003b,0x00000007,0x0000019b,0x00000007,0x0004003b,0x00000007,0x0000019c,0x00000007, + 0x0004003b,0x00000007,0x000001a0,0x00000007,0x0004003b,0x00000007,0x000001a1,0x00000007, + 0x0004003b,0x00000012,0x000001a4,0x00000007,0x0004003b,0x0000002a,0x000001a7,0x00000007, + 0x0004003b,0x00000012,0x000001a9,0x00000007,0x0004003b,0x0000002a,0x000001ac,0x00000007, + 0x0004003b,0x00000012,0x000001ae,0x00000007,0x0004003b,0x0000002a,0x000001b1,0x00000007, + 0x0004003b,0x00000012,0x000001b3,0x00000007,0x0004003b,0x0000002a,0x000001b6,0x00000007, + 0x0004003b,0x00000007,0x000001b8,0x00000007,0x0004003b,0x00000007,0x000001ba,0x00000007, + 0x0004003b,0x00000012,0x000001bd,0x00000007,0x0004003b,0x00000012,0x000001bf,0x00000007, + 0x0004003b,0x00000012,0x000001c1,0x00000007,0x0004003b,0x00000012,0x000001c3,0x00000007, + 0x00040039,0x00000021,0x00000185,0x00000023,0x00050051,0x00000006,0x00000186,0x00000185, + 0x00000000,0x00040039,0x00000011,0x00000187,0x00000028,0x000500c3,0x00000006,0x00000188, + 0x00000186,0x00000187,0x0003003e,0x00000184,0x00000188,0x00040039,0x00000021,0x0000018a, + 0x00000023,0x00050051,0x00000006,0x0000018b,0x0000018a,0x00000001,0x00040039,0x00000011, + 0x0000018c,0x00000028,0x000500c3,0x00000006,0x0000018d,0x0000018b,0x0000018c,0x0003003e, + 0x00000189,0x0000018d,0x0004003d,0x00000006,0x0000018f,0x00000184,0x00050082,0x00000006, + 0x00000190,0x0000018f,0x0000008f,0x0003003e,0x00000191,0x00000190,0x00050041,0x00000007, + 0x00000193,0x00000046,0x00000104,0x0004003d,0x00000006,0x00000194,0x00000193,0x0003003e, + 0x00000192,0x00000194,0x00060039,0x00000006,0x00000195,0x0000000b,0x00000191,0x00000192, + 0x0003003e,0x00000196,0x00000069,0x0003003e,0x00000197,0x00000195,0x00060039,0x00000006, + 0x00000198,0x0000000f,0x00000196,0x00000197,0x0004003d,0x00000006,0x00000199,0x00000189, + 0x00050082,0x00000006,0x0000019a,0x00000199,0x000000b0,0x0003003e,0x0000019b,0x0000019a, + 0x00050041,0x00000007,0x0000019d,0x00000046,0x00000142,0x0004003d,0x00000006,0x0000019e, + 0x0000019d,0x0003003e,0x0000019c,0x0000019e,0x00060039,0x00000006,0x0000019f,0x0000000b, + 0x0000019b,0x0000019c,0x0003003e,0x000001a0,0x00000069,0x0003003e,0x000001a1,0x0000019f, + 0x00060039,0x00000006,0x000001a2,0x0000000f,0x000001a0,0x000001a1,0x00050050,0x00000021, + 0x000001a3,0x00000198,0x000001a2,0x0003003e,0x0000018e,0x000001a3,0x0004003d,0x00000021, + 0x000001a5,0x0000018e,0x00050080,0x00000021,0x000001a6,0x000001a5,0x0000015e,0x0003003e, + 0x000001a7,0x000001a6,0x00050039,0x00000011,0x000001a8,0x00000030,0x000001a7,0x0003003e, + 0x000001a4,0x000001a8,0x0004003d,0x00000021,0x000001aa,0x0000018e,0x00050080,0x00000021, + 0x000001ab,0x000001aa,0x00000164,0x0003003e,0x000001ac,0x000001ab,0x00050039,0x00000011, + 0x000001ad,0x00000030,0x000001ac,0x0003003e,0x000001a9,0x000001ad,0x0004003d,0x00000021, + 0x000001af,0x0000018e,0x00050080,0x00000021,0x000001b0,0x000001af,0x0000016a,0x0003003e, + 0x000001b1,0x000001b0,0x00050039,0x00000011,0x000001b2,0x00000030,0x000001b1,0x0003003e, + 0x000001ae,0x000001b2,0x0004003d,0x00000021,0x000001b4,0x0000018e,0x00050080,0x00000021, + 0x000001b5,0x000001b4,0x00000170,0x0003003e,0x000001b6,0x000001b5,0x00050039,0x00000011, + 0x000001b7,0x00000030,0x000001b6,0x0003003e,0x000001b3,0x000001b7,0x0004003d,0x00000006, + 0x000001b9,0x00000184,0x0003003e,0x000001b8,0x000001b9,0x00050041,0x00000007,0x000001bb, + 0x00000046,0x00000104,0x0004003d,0x00000006,0x000001bc,0x000001bb,0x0003003e,0x000001ba, + 0x000001bc,0x0004003d,0x00000011,0x000001be,0x000001a4,0x0003003e,0x000001bd,0x000001be, + 0x0004003d,0x00000011,0x000001c0,0x000001a9,0x0003003e,0x000001bf,0x000001c0,0x0004003d, + 0x00000011,0x000001c2,0x000001ae,0x0003003e,0x000001c1,0x000001c2,0x0004003d,0x00000011, + 0x000001c4,0x000001b3,0x0003003e,0x000001c3,0x000001c4,0x000a0039,0x00000011,0x000001c5, + 0x0000001a,0x000001b8,0x000001ba,0x000001bd,0x000001bf,0x000001c1,0x000001c3,0x000200fe, + 0x000001c5,0x00010038,0x00050036,0x00000002,0x0000004e,0x00000000,0x0000004b,0x00030037, + 0x0000004a,0x0000004c,0x00030037,0x0000004a,0x0000004d,0x000200f8,0x0000004f,0x0004003b, + 0x0000002a,0x000001cb,0x00000007,0x0004003b,0x0000002a,0x000001ce,0x00000007,0x0004003b, + 0x00000007,0x000001d1,0x00000007,0x0004003b,0x00000007,0x000001db,0x00000007,0x0004003b, + 0x0000002a,0x000001e4,0x00000007,0x0004003b,0x0000002a,0x000001f0,0x00000007,0x0004003b, + 0x0000002a,0x000001f1,0x00000007,0x0004003b,0x00000007,0x00000205,0x00000007,0x0004003b, + 0x00000007,0x00000206,0x00000007,0x0004003b,0x0000002a,0x00000211,0x00000007,0x0004003b, + 0x00000012,0x0000021c,0x00000007,0x0004003b,0x0000002a,0x0000021d,0x00000007,0x0004003b, + 0x00000012,0x00000231,0x00000007,0x0004003b,0x00000007,0x00000232,0x00000007,0x0004003b, + 0x0000002a,0x0000023b,0x00000007,0x0004003b,0x00000012,0x00000248,0x00000007,0x0004003b, + 0x0000002a,0x00000249,0x00000007,0x0004003b,0x00000012,0x00000251,0x00000007,0x0004003b, + 0x00000012,0x00000254,0x00000007,0x0004003b,0x00000012,0x00000269,0x00000007,0x0004003b, + 0x00000012,0x0000026b,0x00000007,0x0004003b,0x00000007,0x0000026c,0x00000007,0x0004003b, + 0x0000002a,0x0000028a,0x00000007,0x0004003b,0x0000002a,0x00000292,0x00000007,0x0004003b, + 0x0000002a,0x00000295,0x00000007,0x00040039,0x0000003f,0x000001c8,0x00000041,0x000300f7, + 0x000001ca,0x00000000,0x000400fa,0x000001c8,0x000001c9,0x000001ca,0x000200f8,0x000001c9, + 0x0004003d,0x00000049,0x000001cc,0x0000004c,0x0007004f,0x00000021,0x000001cd,0x000001cc, + 0x000001cc,0x00000000,0x00000001,0x0003003e,0x000001cb,0x000001cd,0x0003003e,0x000001ce, + 0x0000015e,0x00060039,0x00000002,0x000001cf,0x00000039,0x000001cb,0x000001ce,0x000100fd, + 0x000200f8,0x000001ca,0x00050041,0x00000007,0x000001d3,0x0000004d,0x000001d2,0x0004003d, + 0x00000006,0x000001d4,0x000001d3,0x0005008b,0x00000006,0x000001d5,0x000001d4,0x000000a5, + 0x00050082,0x00000006,0x000001d6,0x000001d5,0x000000b0,0x00050041,0x00000007,0x000001d7, + 0x0000004c,0x00000104,0x0004003d,0x00000006,0x000001d8,0x000001d7,0x0005008b,0x00000006, + 0x000001d9,0x000001d8,0x000000a5,0x00050080,0x00000006,0x000001da,0x000001d6,0x000001d9, + 0x0003003e,0x000001d1,0x000001da,0x00050041,0x00000007,0x000001dc,0x0000004d,0x000001d2, + 0x0004003d,0x00000006,0x000001dd,0x000001dc,0x00050087,0x00000006,0x000001de,0x000001dd, + 0x000000a5,0x00050082,0x00000006,0x000001df,0x000001de,0x000000b0,0x00050041,0x00000007, + 0x000001e0,0x0000004c,0x00000142,0x0004003d,0x00000006,0x000001e1,0x000001e0,0x0005008b, + 0x00000006,0x000001e2,0x000001e1,0x000000a5,0x00050080,0x00000006,0x000001e3,0x000001df, + 0x000001e2,0x0003003e,0x000001db,0x000001e3,0x00050041,0x00000007,0x000001e5,0x0000004c, + 0x00000104,0x0004003d,0x00000006,0x000001e6,0x000001e5,0x00050087,0x00000006,0x000001e7, + 0x000001e6,0x000000a5,0x0004003d,0x00000006,0x000001e8,0x000001d1,0x00050080,0x00000006, + 0x000001e9,0x000001e7,0x000001e8,0x00050041,0x00000007,0x000001ea,0x0000004c,0x00000142, + 0x0004003d,0x00000006,0x000001eb,0x000001ea,0x00050087,0x00000006,0x000001ec,0x000001eb, + 0x000000a5,0x0004003d,0x00000006,0x000001ed,0x000001db,0x00050080,0x00000006,0x000001ee, + 0x000001ec,0x000001ed,0x00050050,0x00000021,0x000001ef,0x000001e9,0x000001ee,0x0003003e, + 0x000001e4,0x000001ef,0x0004003d,0x00000021,0x000001f2,0x000001e4,0x0003003e,0x000001f1, + 0x000001f2,0x00050039,0x00000021,0x000001f3,0x00000034,0x000001f1,0x0003003e,0x000001f0, + 0x000001f3,0x00050041,0x00000007,0x000001fa,0x0000004d,0x000001d2,0x0004003d,0x00000006, + 0x000001fb,0x000001fa,0x00050041,0x00000007,0x000001fc,0x0000004d,0x00000142,0x0004003d, + 0x00000006,0x000001fd,0x000001fc,0x00050041,0x00000007,0x000001fe,0x0000004d,0x00000104, + 0x0004003d,0x00000006,0x000001ff,0x000001fe,0x0004003d,0x00000021,0x00000200,0x000001f0, + 0x00050050,0x00000021,0x00000201,0x000000a5,0x000000a5,0x00050084,0x00000021,0x00000202, + 0x00000200,0x00000201,0x00070041,0x00000203,0x00000204,0x000001f9,0x000001fb,0x000001fd, + 0x000001ff,0x0003003e,0x00000204,0x00000202,0x0003003e,0x00000205,0x0000008f,0x00050041, + 0x00000007,0x00000207,0x0000004d,0x000001d2,0x0004003d,0x00000006,0x00000208,0x00000207, + 0x0003003e,0x00000206,0x00000208,0x000200f9,0x00000209,0x000200f8,0x00000209,0x000400f6, + 0x0000020b,0x0000020c,0x00000000,0x000200f9,0x0000020d,0x000200f8,0x0000020d,0x0004003d, + 0x00000006,0x0000020e,0x00000206,0x0004003d,0x00000006,0x0000020f,0x00000205,0x000500b1, + 0x0000003f,0x00000210,0x0000020e,0x0000020f,0x000400fa,0x00000210,0x0000020a,0x0000020b, + 0x000200f8,0x0000020a,0x00050041,0x00000007,0x00000212,0x0000004c,0x00000104,0x0004003d, + 0x00000006,0x00000213,0x00000212,0x00050084,0x00000006,0x00000214,0x00000213,0x0000008f, + 0x00050041,0x00000007,0x00000215,0x0000004c,0x00000142,0x0004003d,0x00000006,0x00000216, + 0x00000215,0x0004003d,0x00000006,0x00000217,0x00000205,0x00050084,0x00000006,0x00000218, + 0x00000216,0x00000217,0x0004003d,0x00000006,0x00000219,0x00000206,0x00050080,0x00000006, + 0x0000021a,0x00000218,0x00000219,0x00050050,0x00000021,0x0000021b,0x00000214,0x0000021a, + 0x0003003e,0x00000211,0x0000021b,0x0004003d,0x00000021,0x0000021e,0x00000211,0x0003003e, + 0x0000021d,0x0000021e,0x00050039,0x00000011,0x0000021f,0x00000044,0x0000021d,0x0003003e, + 0x0000021c,0x0000021f,0x0004003d,0x00000006,0x00000225,0x00000206,0x00050041,0x00000007, + 0x00000226,0x0000004d,0x00000142,0x0004003d,0x00000006,0x00000227,0x00000226,0x00050041, + 0x00000007,0x00000228,0x0000004d,0x00000104,0x0004003d,0x00000006,0x00000229,0x00000228, + 0x0004003d,0x00000011,0x0000022a,0x0000021c,0x00070041,0x0000022b,0x0000022c,0x00000224, + 0x00000225,0x00000227,0x00000229,0x0003003e,0x0000022c,0x0000022a,0x000200f9,0x0000020c, + 0x000200f8,0x0000020c,0x0004003d,0x00000006,0x0000022d,0x00000206,0x00050080,0x00000006, + 0x0000022e,0x0000022d,0x0000008f,0x0003003e,0x00000206,0x0000022e,0x000200f9,0x00000209, + 0x000200f8,0x0000020b,0x000300e1,0x000001d2,0x0000022f,0x000400e0,0x000001d2,0x000001d2, + 0x00000230,0x0003003e,0x00000231,0x00000104,0x0003003e,0x00000232,0x00000069,0x000200f9, + 0x00000233,0x000200f8,0x00000233,0x000400f6,0x00000235,0x00000236,0x00000000,0x000200f9, + 0x00000237,0x000200f8,0x00000237,0x0004003d,0x00000006,0x00000238,0x00000232,0x0004003d, + 0x00000006,0x00000239,0x00000205,0x000500b1,0x0000003f,0x0000023a,0x00000238,0x00000239, + 0x000400fa,0x0000023a,0x00000234,0x00000235,0x000200f8,0x00000234,0x00050041,0x00000007, + 0x0000023c,0x0000004c,0x00000104,0x0004003d,0x00000006,0x0000023d,0x0000023c,0x00050084, + 0x00000006,0x0000023e,0x0000023d,0x0000008f,0x00050041,0x00000007,0x0000023f,0x0000004c, + 0x00000142,0x0004003d,0x00000006,0x00000240,0x0000023f,0x0004003d,0x00000006,0x00000241, + 0x00000205,0x00050084,0x00000006,0x00000242,0x00000240,0x00000241,0x0004003d,0x00000006, + 0x00000243,0x00000232,0x00050080,0x00000006,0x00000244,0x00000242,0x00000243,0x00050050, + 0x00000021,0x00000245,0x0000023e,0x00000244,0x0004003d,0x00000021,0x00000246,0x000001f0, + 0x00050080,0x00000021,0x00000247,0x00000245,0x00000246,0x0003003e,0x0000023b,0x00000247, + 0x0004003d,0x00000021,0x0000024a,0x0000023b,0x0003003e,0x00000249,0x0000024a,0x00050039, + 0x00000011,0x0000024b,0x00000047,0x00000249,0x0003003e,0x00000248,0x0000024b,0x0004003d, + 0x00000006,0x0000024c,0x00000232,0x00050041,0x00000007,0x0000024d,0x0000004d,0x00000142, + 0x0004003d,0x00000006,0x0000024e,0x0000024d,0x00050041,0x00000007,0x0000024f,0x0000004d, + 0x00000104,0x0004003d,0x00000006,0x00000250,0x0000024f,0x00070041,0x0000022b,0x00000252, + 0x00000224,0x0000024c,0x0000024e,0x00000250,0x0004003d,0x00000011,0x00000253,0x00000252, + 0x0003003e,0x00000251,0x00000253,0x0004003d,0x00000011,0x00000255,0x00000248,0x0003003e, + 0x00000254,0x00000255,0x00060039,0x00000011,0x00000256,0x0000001f,0x00000251,0x00000254, + 0x0004003d,0x00000011,0x00000257,0x00000231,0x00050080,0x00000011,0x00000258,0x00000257, + 0x00000256,0x0003003e,0x00000231,0x00000258,0x000200f9,0x00000236,0x000200f8,0x00000236, + 0x0004003d,0x00000006,0x00000259,0x00000232,0x00050080,0x00000006,0x0000025a,0x00000259, + 0x000000b0,0x0003003e,0x00000232,0x0000025a,0x000200f9,0x00000233,0x000200f8,0x00000235, + 0x00050041,0x00000007,0x0000025c,0x0000004d,0x000001d2,0x0004003d,0x00000006,0x0000025d, + 0x0000025c,0x00050041,0x00000007,0x0000025e,0x0000004d,0x00000142,0x0004003d,0x00000006, + 0x0000025f,0x0000025e,0x00050041,0x00000007,0x00000260,0x0000004d,0x00000104,0x0004003d, + 0x00000006,0x00000261,0x00000260,0x0004003d,0x00000011,0x00000262,0x00000231,0x00070041, + 0x0000022b,0x00000263,0x0000025b,0x0000025d,0x0000025f,0x00000261,0x0003003e,0x00000263, + 0x00000262,0x000300e1,0x000001d2,0x0000022f,0x000400e0,0x000001d2,0x000001d2,0x00000230, + 0x00050041,0x00000007,0x00000264,0x0000004d,0x000001d2,0x0004003d,0x00000006,0x00000265, + 0x00000264,0x000500aa,0x0000003f,0x00000266,0x00000265,0x00000069,0x000300f7,0x00000268, + 0x00000000,0x000400fa,0x00000266,0x00000267,0x00000268,0x000200f8,0x00000267,0x0003003e, + 0x00000269,0x0000026a,0x0003003e,0x0000026b,0x00000104,0x0003003e,0x0000026c,0x00000069, + 0x000200f9,0x0000026d,0x000200f8,0x0000026d,0x000400f6,0x0000026f,0x00000270,0x00000000, + 0x000200f9,0x00000271,0x000200f8,0x00000271,0x0004003d,0x00000006,0x00000272,0x0000026c, + 0x000500b1,0x0000003f,0x00000273,0x00000272,0x0000008f,0x000400fa,0x00000273,0x0000026e, + 0x0000026f,0x000200f8,0x0000026e,0x0004003d,0x00000006,0x00000274,0x0000026c,0x00050041, + 0x00000007,0x00000275,0x0000004d,0x00000142,0x0004003d,0x00000006,0x00000276,0x00000275, + 0x00050041,0x00000007,0x00000277,0x0000004d,0x00000104,0x0004003d,0x00000006,0x00000278, + 0x00000277,0x00070041,0x0000022b,0x00000279,0x0000025b,0x00000274,0x00000276,0x00000278, + 0x0004003d,0x00000011,0x0000027a,0x00000279,0x0004003d,0x00000011,0x0000027b,0x00000269, + 0x000500b0,0x0000003f,0x0000027c,0x0000027a,0x0000027b,0x000300f7,0x0000027e,0x00000000, + 0x000400fa,0x0000027c,0x0000027d,0x0000027e,0x000200f8,0x0000027d,0x0004003d,0x00000006, + 0x0000027f,0x0000026c,0x00050041,0x00000007,0x00000280,0x0000004d,0x00000142,0x0004003d, + 0x00000006,0x00000281,0x00000280,0x00050041,0x00000007,0x00000282,0x0000004d,0x00000104, + 0x0004003d,0x00000006,0x00000283,0x00000282,0x00070041,0x0000022b,0x00000284,0x0000025b, + 0x0000027f,0x00000281,0x00000283,0x0004003d,0x00000011,0x00000285,0x00000284,0x0003003e, + 0x00000269,0x00000285,0x0004003d,0x00000006,0x00000286,0x0000026c,0x0004007c,0x00000011, + 0x00000287,0x00000286,0x0003003e,0x0000026b,0x00000287,0x000200f9,0x0000027e,0x000200f8, + 0x0000027e,0x000200f9,0x00000270,0x000200f8,0x00000270,0x0004003d,0x00000006,0x00000288, + 0x0000026c,0x00050080,0x00000006,0x00000289,0x00000288,0x000000b0,0x0003003e,0x0000026c, + 0x00000289,0x000200f9,0x0000026d,0x000200f8,0x0000026f,0x0004003d,0x00000011,0x0000028b, + 0x0000026b,0x00050041,0x00000007,0x0000028c,0x0000004d,0x00000142,0x0004003d,0x00000006, + 0x0000028d,0x0000028c,0x00050041,0x00000007,0x0000028e,0x0000004d,0x00000104,0x0004003d, + 0x00000006,0x0000028f,0x0000028e,0x00070041,0x00000203,0x00000290,0x000001f9,0x0000028b, + 0x0000028d,0x0000028f,0x0004003d,0x00000021,0x00000291,0x00000290,0x0003003e,0x0000028a, + 0x00000291,0x0004003d,0x00000049,0x00000293,0x0000004c,0x0007004f,0x00000021,0x00000294, + 0x00000293,0x00000293,0x00000000,0x00000001,0x0003003e,0x00000292,0x00000294,0x0004003d, + 0x00000021,0x00000296,0x0000028a,0x0003003e,0x00000295,0x00000296,0x00060039,0x00000002, + 0x00000297,0x00000039,0x00000292,0x00000295,0x000200f9,0x00000268,0x000200f8,0x00000268, + 0x000100fd,0x00010038 +}; diff --git a/gpu/vk/vk_camera_motion.cpp b/gpu/vk/vk_camera_motion.cpp index de5d5db5f..092dbd0f7 100644 --- a/gpu/vk/vk_camera_motion.cpp +++ b/gpu/vk/vk_camera_motion.cpp @@ -30,6 +30,7 @@ struct State { VkImageView view = VK_NULL_HANDLE; uint32_t width = 0, height = 0; Matrix previous{}; + Matrix current{}; ///< the matrix the last record() was given, for the same-frame guard bool have_previous = false; }; @@ -154,6 +155,13 @@ VkImageView record(VkCommandBuffer cmd, VkImageView depth, VkFormat depth_format uint32_t height, const Matrix& view_projection) { if (!depth || width == 0 || height == 0) return VK_NULL_HANDLE; if (!dev.push_descriptor || !vkCmdPushDescriptorSetKHR) return VK_NULL_HANDLE; + // (hookshot) Asked twice for the same frame -- the upscale seam wants motion, and so does frame + // generation at present time -- this answers with what it already wrote. Recording it a second + // time would reproject through the matrix the first recording had just stored as "previous", + // which is this same frame's: exactly zero motion, silently, for whichever caller came second. + if (g.view && g.have_previous && g.width == width && g.height == height && + memcmp(g.current.m, view_projection.m, sizeof g.current.m) == 0) + return g.view; if (!g.tried) { g.tried = true; if (!make_pipeline()) return VK_NULL_HANDLE; @@ -204,6 +212,7 @@ VkImageView record(VkCommandBuffer cmd, VkImageView depth, VkFormat depth_format vkCmdPipelineBarrier2(cmd, &di); g.previous = view_projection; + g.current = view_projection; // (what the guard above compares the next ask against) g.have_previous = true; return g.view; } diff --git a/gpu/vk/vk_dlss.cpp b/gpu/vk/vk_dlss.cpp index b9ffcaf5a..b5355ca6e 100644 --- a/gpu/vk/vk_dlss.cpp +++ b/gpu/vk/vk_dlss.cpp @@ -88,8 +88,7 @@ void drop_image(Image& t) { /// The image an evaluation resolves into: RGBA16F at the upscale size, GENERAL throughout, a /// storage image because DLSS writes it and a transfer source because the caller blits it into the -/// game's own target. (vk_fsr3.cpp's output asks for TRANSFER_DST and not TRANSFER_SRC although its -/// call site blits *from* it; that is left as it is rather than changed from here.) +/// game's own target, exactly as vk_fsr3.cpp's output does. bool make_output(Image& t, uint32_t width, uint32_t height) { drop_image(t); t.format = VK_FORMAT_R16G16B16A16_SFLOAT; diff --git a/gpu/vk/vk_draw.cpp b/gpu/vk/vk_draw.cpp index f7acbd2af..3a7aabfd0 100644 --- a/gpu/vk/vk_draw.cpp +++ b/gpu/vk/vk_draw.cpp @@ -5447,6 +5447,23 @@ extern "C" __attribute__((weak)) float hos_oot_camera(float* near_plane, float* /// which is what keeps camera motion from reprojecting through a guess) extern "C" __attribute__((weak)) int hos_oot_view_projection(float* row_major_4x4); +/// (hookshot) The scene's depth and matrix, for the present path (vk_draw.h). +bool scene_frame_inputs(SceneFrameInputs* out) { + if (!out) return false; + if (!scene_depth.view || !scene_depth.image || !scene_depth.width || !scene_depth.height) + return false; + out->depth_image = scene_depth.image; + out->depth_view = scene_depth.view; + out->depth_format = scene_depth.format; + out->render_width = scene_depth.width; + out->render_height = scene_depth.height; + out->have_view_projection = scene_vp.have; + if (scene_vp.have) memcpy(out->view_projection, scene_vp.m, sizeof out->view_projection); + else if (hos_oot_view_projection) out->have_view_projection = hos_oot_view_projection(out->view_projection) != 0; + return true; +} + + /// (hookshot) Whether a program is one an upscaler backend may be given, by key prefix and /// independent of whether the stand-in wants it: RX_VK_UPSCALE_KEYS, default the gameplay TAAU /// network. taau_key's own default turns itself off where the card can run the real network, which diff --git a/gpu/vk/vk_draw.h b/gpu/vk/vk_draw.h index b8496fbe2..37354c170 100644 --- a/gpu/vk/vk_draw.h +++ b/gpu/vk/vk_draw.h @@ -11,6 +11,22 @@ namespace mkwvk { /// Something other than the draw path pushed or bound descriptors in the recording (its next push is whole) void descriptors_disturbed(); +/// (hookshot) What the scene's last frame left behind, for a backend that runs outside the draw +/// path. Frame generation is recorded at present time, where the scene's depth and the matrix its +/// draws used are both out of reach; the draw path keeps them as it resolves the upscale dispatch +/// and this is how they are read back. False when the scene has not been seen yet, which a caller +/// takes as "do not generate this frame" rather than as a reason to guess. +struct SceneFrameInputs { + VkImage depth_image = VK_NULL_HANDLE; + VkImageView depth_view = VK_NULL_HANDLE; + VkFormat depth_format = VK_FORMAT_UNDEFINED; + uint32_t render_width = 0, render_height = 0; + /// The view projection the scene's draws read, row major, as gpu/vk/vk_camera_motion.h takes it. + float view_projection[16]{}; + bool have_view_projection = false; +}; +bool scene_frame_inputs(SceneFrameInputs* out); + /// A graphics pipeline as hookshot_pipelines.bin keeps it (the precompile's notes): what built it struct PipeNote { uint64_t key, prog, variant; diff --git a/gpu/vk/vk_framegen.cpp b/gpu/vk/vk_framegen.cpp index bf2fd9820..aa0b57670 100644 --- a/gpu/vk/vk_framegen.cpp +++ b/gpu/vk/vk_framegen.cpp @@ -17,6 +17,18 @@ #include #include "vk_framegen.h" + +#include "vk_camera_motion.h" +#include "vk_dlssg.h" +#include "vk_draw.h" // (scene_frame_inputs: the depth and matrix the draw path kept) + +#include +#include + +/// (hookshot) The camera the lifted game publishes (host/hos_oot_camera.c). Weak because the +/// renderer is dlopened with RTLD_NOW and a build of it without the game's host half must still +/// load: a null here is "the game has not published a camera", not a missing symbol. +extern "C" __attribute__((weak)) float hos_oot_camera(float* near_plane, float* far_plane); #include "vk_menu.h" #include "vk_texture.h" @@ -415,6 +427,74 @@ VkImage framegen_made_image(uint32_t* w, uint32_t* h) { return fg.recorded->frame[0].image; } +/// (hookshot) The made frames of one present, by DLSS Frame Generation: how many were made, 0 when +/// it could not run. Each one is copied into the set the display thread shows, so the rest of this +/// file does not care which of the two made them. +/// +/// The inputs it needs that colour interpolation does not -- the scene's depth, and the matrix its +/// draws were rendered with -- are kept by the draw path and read back here (vk_draw.h), because +/// this runs at present time where neither is otherwise in reach. The motion is the same +/// camera-only reprojection the upscalers use; asking for it twice in one frame is answered with +/// the one already written (gpu/vk/vk_camera_motion.cpp). +int dlssg_frames(VkCommandBuffer cmd, OutSet& set, int cur, uint32_t uw, uint32_t uh, int m) { + SceneFrameInputs scene; + if (!scene_frame_inputs(&scene) || !scene.have_view_projection) return 0; + camera_motion::Matrix vp{}; + memcpy(vp.m, scene.view_projection, sizeof vp.m); + const VkImageView motion = camera_motion::record(cmd, scene.depth_view, scene.depth_format, + scene.render_width, scene.render_height, vp); + if (!motion) return 0; + const int want = std::min(m - 1, (int)dlssg::frames_wanted()); + if (want <= 0) return 0; + + dlssg::Inputs in; + in.color = fg.frames[cur].view; + in.color_image = fg.frames[cur].image; + in.color_format = VK_FORMAT_R8G8B8A8_UNORM; // (make_img above, for fg.frames) + in.width = uw, in.height = uh; + in.depth = scene.depth_view; + in.depth_image = scene.depth_image; + in.depth_format = scene.depth_format; + in.motion = motion; + in.motion_image = camera_motion::motion_image(); + in.motion_format = camera_motion::motion_format(); + in.render_width = scene.render_width, in.render_height = scene.render_height; + in.motion_scale[0] = 1.0f, in.motion_scale[1] = 1.0f; // (already render pixels) + // The colour here is the window's R8G8B8A8, which is not HDR whatever the scene was resolved in. + in.colour_hdr = false; + in.aspect = uh ? (float)uw / (float)uh : 16.0f / 9.0f; + { // (the game's own camera where the patch published it; without it the defaults stand) + float near_plane = 0.0f, far_plane = 0.0f; + const float tan_half = hos_oot_camera ? hos_oot_camera(&near_plane, &far_plane) : 0.0f; + if (tan_half > 0.0f && near_plane > 0.0f) { + in.near_plane = near_plane; + if (far_plane > near_plane) in.far_plane = far_plane; + in.fov_y = 2.0f * std::atan(tan_half); + } + } + in.frames_made = (uint32_t)want; + int made = 0; + for (int k = 1; k <= want; k++) { + in.frame_index = (uint32_t)k; + if (!dlssg::generate(cmd, in)) break; + const VkImage from = dlssg::made_image((uint32_t)k); + if (!from) break; + const VkImageCopy c{{VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, {0, 0, 0}, + {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, {0, 0, 0}, {uw, uh, 1}}; + vkCmdCopyImage(cmd, from, VK_IMAGE_LAYOUT_GENERAL, set.frame[k - 1].image, + VK_IMAGE_LAYOUT_GENERAL, 1, &c); + made++; + } + if (made != want) { + static int told = 0; + if (told++ < 4) + logf("vk: dlssg made %d of %d frames: the renderer's own interpolation takes this one", + made, want); + return 0; // (a half-made set would show one real frame and one stale image) + } + return made; +} + bool framegen_record(VkCommandBuffer cmd, VkImageView src, uint32_t sw, uint32_t sh, const int crop[4]) { int x0 = 0, y0 = 0, w = (int)sw, h = (int)sh; if (crop && crop[2] > 0 && crop[3] > 0) x0 = crop[0], y0 = crop[1], w = crop[2], h = crop[3]; @@ -444,7 +524,12 @@ bool framegen_record(VkCommandBuffer cmd, VkImageView src, uint32_t sw, uint32_t pass(cmd, fg.copy, {{src, fg.nearest}, {fg.frames[cur].view, VK_NULL_HANDLE}}, uw, uh, pc, sizeof pc); pass(cmd, fg.luma, {{fg.frames[cur].view, fg.nearest}, {fg.lumas[cur].view, VK_NULL_HANDLE}}, qw, qh); set->made = 0; - if (blend && m > 1) { + // (hookshot) DLSS Frame Generation where it is available, which is the same job with the game's + // own motion and depth instead of colour alone. It refuses -- no NGX, no runtime, a GPU that + // does not report it, or a frame where the scene's depth and matrix are not both in hand -- and + // then the interpolation below runs exactly as it did before this existed. + if (blend && m > 1 && dlssg::supported()) set->made = dlssg_frames(cmd, *set, cur, uw, uh, m); + if (set->made == 0 && blend && m > 1) { pass(cmd, fg.flow, {{fg.lumas[prev].view, fg.nearest}, {fg.lumas[cur].view, fg.nearest}, {fg.flows[0].view, VK_NULL_HANDLE}}, cw, ch); pass(cmd, fg.median, {{fg.flows[0].view, fg.nearest}, {fg.flows[1].view, VK_NULL_HANDLE}}, cw, ch); diff --git a/gpu/vk/vk_ngx.cpp b/gpu/vk/vk_ngx.cpp index 38ccdfb0b..a38da00a5 100644 --- a/gpu/vk/vk_ngx.cpp +++ b/gpu/vk/vk_ngx.cpp @@ -11,35 +11,26 @@ namespace mkwvk::ngx { namespace { -/// The entry points the backends call, resolved by name from the NGX core the NVIDIA driver ships -/// (`libnvidia-ngx.so`), through the loader pattern the rest of the renderer uses for vulkan-1.dll. -/// -/// Resolved rather than linked for two reasons: the SDK's own library is then not a link requirement -/// of a gated build, and a machine with the SDK-built binary but no NVIDIA driver has every pointer -/// null here, so every backend reports itself unavailable instead of the process failing to start. +/// The session's own state. The NGX entry points are not resolved by name here: on Linux the +/// driver's core (libnvidia-ngx.so) exports none of the public NVSDK_NGX_* API -- it was tried, and +/// `NVSDK_NGX_VULKAN_Init_with_ProjectID` is simply not in it -- so a build that asks for DLSS links +/// the SDK's own static library, which holds those entry points and calls into the core itself. +/// nx2/build.py's `dlss_sdk_link` is the other half of that, and both are inside RX_VK_DLSS_SDK, so +/// a build without an SDK links and runs exactly as it did before. struct Session { - HMODULE module = nullptr; - decltype(&NVSDK_NGX_VULKAN_Init_with_ProjectID) init = nullptr; - decltype(&NVSDK_NGX_VULKAN_Shutdown1) shutdown = nullptr; - decltype(&NVSDK_NGX_VULKAN_GetCapabilityParameters) capability = nullptr; - decltype(&NVSDK_NGX_VULKAN_AllocateParameters) allocate = nullptr; - decltype(&NVSDK_NGX_VULKAN_DestroyParameters) destroy = nullptr; - decltype(&NVSDK_NGX_VULKAN_CreateFeature) create = nullptr; - decltype(&NVSDK_NGX_VULKAN_EvaluateFeature) evaluate = nullptr; - decltype(&NVSDK_NGX_VULKAN_ReleaseFeature) release = nullptr; - /// The two discovery calls, which answer before a device exists. Optional: an NGX without them - /// is one whose features need nothing beyond the core, and refusing to load over a missing - /// discovery call would turn a working configuration into an unavailable one. - decltype(&NVSDK_NGX_VULKAN_GetFeatureInstanceExtensionRequirements) instance_exts = nullptr; - decltype(&NVSDK_NGX_VULKAN_GetFeatureDeviceExtensionRequirements) device_exts = nullptr; bool started = false; - bool load_failed = false; + bool start_failed = false; }; Session s; /// A project id of our own. NVIDIA's analytics-key form is for licensed titles; the project-id form /// exists exactly so a project without one can initialize. -constexpr const char* kProjectId = "a6b7c0de-7a1f-4f1e-9d2a-hookshot-dlss"; +// A UUID of our own, and it has to be a real one: NGX validates the shape and answers +// NVSDK_NGX_Result_FAIL_InvalidParameter (0xbad00005) for anything that is not. The first attempt +// here spelled "hookshot-dlss" into the last two groups, which is not hex, and that is exactly the +// error it got. NVIDIA's analytics-key form of Init is for licensed titles; the project-id form +// exists so a project without one can initialize. +constexpr const char* kProjectId = "e22a11cd-c034-4e6b-bb25-1919b826f7a8"; constexpr const char* kEngineVersion = "1.0"; /// The game folder, wide, for NGX's application data path: where it writes what it keeps and where @@ -70,65 +61,29 @@ const wchar_t* data_path() { } // namespace bool load() { - if (s.module) return true; - if (s.load_failed) return false; - // The core ships with the driver and is found on the usual search path; the model libraries sit - // beside the binary and are NGX's to find, which is what the application data path is for. -#ifdef _WIN32 - static const char* const names[]{"nvngx.dll", "_nvngx.dll"}; -#else - static const char* const names[]{"libnvidia-ngx.so.1", "libnvidia-ngx.so"}; -#endif - for (const char* name : names) { - s.module = LoadLibraryA(name); - if (s.module) { - logf("vk: ngx loaded from %s", name); - break; - } - } - if (!s.module) { - logf("vk: ngx: no NGX runtime here (%s), so every DLSS feature is unavailable", names[0]); - s.load_failed = true; - return false; - } -#define NGX_RESOLVE(field, name) \ - s.field = (decltype(s.field))(void*)GetProcAddress(s.module, name); \ - if (!s.field) { \ - logf("vk: ngx: the NGX runtime has no %s", name); \ - s.load_failed = true; \ - return false; \ - } - NGX_RESOLVE(init, "NVSDK_NGX_VULKAN_Init_with_ProjectID") - NGX_RESOLVE(shutdown, "NVSDK_NGX_VULKAN_Shutdown1") - NGX_RESOLVE(capability, "NVSDK_NGX_VULKAN_GetCapabilityParameters") - NGX_RESOLVE(allocate, "NVSDK_NGX_VULKAN_AllocateParameters") - NGX_RESOLVE(destroy, "NVSDK_NGX_VULKAN_DestroyParameters") - NGX_RESOLVE(create, "NVSDK_NGX_VULKAN_CreateFeature") - NGX_RESOLVE(evaluate, "NVSDK_NGX_VULKAN_EvaluateFeature") - NGX_RESOLVE(release, "NVSDK_NGX_VULKAN_ReleaseFeature") -#undef NGX_RESOLVE - s.instance_exts = (decltype(s.instance_exts))(void*)GetProcAddress( - s.module, "NVSDK_NGX_VULKAN_GetFeatureInstanceExtensionRequirements"); - s.device_exts = (decltype(s.device_exts))(void*)GetProcAddress( - s.module, "NVSDK_NGX_VULKAN_GetFeatureDeviceExtensionRequirements"); + // Linked, not loaded: there is nothing to look for. Kept as a call of its own because the + // discovery entry points are used before the session is started, and because a future NGX that + // does want loading has one place to do it. return true; } bool start() { - if (!load()) return false; if (s.started) return true; + if (s.start_failed) return false; NVSDK_NGX_FeatureCommonInfo common{}; const wchar_t* paths[]{data_path()}; common.PathListInfo.Path = paths; common.PathListInfo.Length = 1; - const NVSDK_NGX_Result res = - s.init(kProjectId, NVSDK_NGX_ENGINE_TYPE_CUSTOM, kEngineVersion, data_path(), dev.instance, - dev.physical, dev.device, instance_proc(), vkGetDeviceProcAddr, &common, - NVSDK_NGX_Version_API); + const NVSDK_NGX_Result res = NVSDK_NGX_VULKAN_Init_with_ProjectID( + kProjectId, NVSDK_NGX_ENGINE_TYPE_CUSTOM, kEngineVersion, data_path(), dev.instance, + dev.physical, dev.device, instance_proc(), vkGetDeviceProcAddr, &common, + NVSDK_NGX_Version_API); if (NVSDK_NGX_FAILED(res)) { - logf("vk: ngx did not initialize (0x%08x)", (unsigned)res); + logf("vk: ngx did not initialize (0x%08x); DLSS is unavailable", (unsigned)res); + s.start_failed = true; return false; } + logf("vk: ngx initialized"); s.started = true; return true; } @@ -137,7 +92,7 @@ bool feature_available(const char* available_key, const char* needs_driver_key, const char* major_key, const char* minor_key, const char* name) { if (!start()) return false; NVSDK_NGX_Parameter* caps = nullptr; - if (NVSDK_NGX_FAILED(s.capability(&caps)) || !caps) { + if (NVSDK_NGX_FAILED(NVSDK_NGX_VULKAN_GetCapabilityParameters(&caps)) || !caps) { logf("vk: ngx gave no capability parameters"); return false; } @@ -162,7 +117,7 @@ bool feature_available(const char* available_key, const char* needs_driver_key, NVSDK_NGX_Parameter* allocate_params() { if (!start()) return nullptr; NVSDK_NGX_Parameter* params = nullptr; - if (NVSDK_NGX_FAILED(s.allocate(¶ms))) { + if (NVSDK_NGX_FAILED(NVSDK_NGX_VULKAN_AllocateParameters(¶ms))) { logf("vk: ngx gave no parameters to evaluate with"); return nullptr; } @@ -170,23 +125,21 @@ NVSDK_NGX_Parameter* allocate_params() { } void destroy_params(NVSDK_NGX_Parameter* params) { - if (params && s.destroy) s.destroy(params); + if (params) NVSDK_NGX_VULKAN_DestroyParameters(params); } NVSDK_NGX_Result create_feature(VkCommandBuffer cmd, NVSDK_NGX_Feature feature, NVSDK_NGX_Parameter* params, NVSDK_NGX_Handle** out_handle) { - if (!s.create) return NVSDK_NGX_Result_Fail; - return s.create(cmd, feature, params, out_handle); + return NVSDK_NGX_VULKAN_CreateFeature(cmd, feature, params, out_handle); } NVSDK_NGX_Result evaluate_feature(VkCommandBuffer cmd, NVSDK_NGX_Handle* handle, NVSDK_NGX_Parameter* params) { - if (!s.evaluate) return NVSDK_NGX_Result_Fail; - return s.evaluate(cmd, handle, params, nullptr); + return NVSDK_NGX_VULKAN_EvaluateFeature(cmd, handle, params, nullptr); } void release_feature(NVSDK_NGX_Handle* handle) { - if (handle && s.release) s.release(handle); + if (handle) NVSDK_NGX_VULKAN_ReleaseFeature(handle); } NVSDK_NGX_FeatureDiscoveryInfo discovery_info(NVSDK_NGX_Feature feature) { @@ -202,11 +155,12 @@ NVSDK_NGX_FeatureDiscoveryInfo discovery_info(NVSDK_NGX_Feature feature) { } size_t instance_extensions(NVSDK_NGX_Feature feature, const char** out, size_t max) { - if (!load() || !s.instance_exts) return 0; + if (!load()) return 0; const NVSDK_NGX_FeatureDiscoveryInfo info = discovery_info(feature); uint32_t n = 0; VkExtensionProperties* props = nullptr; - if (NVSDK_NGX_FAILED(s.instance_exts(&info, &n, &props)) || !props) return 0; + if (NVSDK_NGX_FAILED(NVSDK_NGX_VULKAN_GetFeatureInstanceExtensionRequirements(&info, &n, &props)) || !props) + return 0; size_t kept = 0; for (uint32_t i = 0; i < n && kept < max; i++) out[kept++] = props[i].extensionName; return kept; @@ -214,11 +168,14 @@ size_t instance_extensions(NVSDK_NGX_Feature feature, const char** out, size_t m size_t device_extensions(VkInstance instance, VkPhysicalDevice gpu, NVSDK_NGX_Feature feature, const char** out, size_t max) { - if (!instance || !gpu || !load() || !s.device_exts) return 0; + if (!instance || !gpu || !load()) return 0; const NVSDK_NGX_FeatureDiscoveryInfo info = discovery_info(feature); uint32_t n = 0; VkExtensionProperties* props = nullptr; - if (NVSDK_NGX_FAILED(s.device_exts(instance, gpu, &info, &n, &props)) || !props) return 0; + if (NVSDK_NGX_FAILED( + NVSDK_NGX_VULKAN_GetFeatureDeviceExtensionRequirements(instance, gpu, &info, &n, &props)) || + !props) + return 0; size_t kept = 0; for (uint32_t i = 0; i < n && kept < max; i++) out[kept++] = props[i].extensionName; return kept; @@ -236,7 +193,7 @@ NVSDK_NGX_Resource_VK resource(VkImageView view, VkImage image, VkFormat format, } void shutdown() { - if (s.started && s.shutdown) s.shutdown(dev.device); + if (s.started) NVSDK_NGX_VULKAN_Shutdown1(dev.device); s.started = false; } diff --git a/nx2/build.py b/nx2/build.py index fcda8370a..e6411ad97 100644 --- a/nx2/build.py +++ b/nx2/build.py @@ -29,6 +29,7 @@ import hashlib import json import os +import platform import subprocess import sys import threading @@ -60,6 +61,27 @@ VK_LIB = "hookshot_vk.so" if LINUX else "hookshot_vk.dll" +def dlss_sdk_link(): + """(hookshot) What a build with RX_VK_DLSS_SDK= links the DLSS backend against. + + On Linux the driver's NGX core (libnvidia-ngx.so) exports none of the public NVSDK_NGX_* API: + those entry points live in the SDK's own static library, which calls into the core. Resolving + them by name from the core was tried first and found them missing, so a build that asked for + DLSS links the SDK's static library instead. Nothing of NVIDIA's is in this repository: the + library is the builder's own copy, under the path they named, and a build without that path + links exactly what it linked before. + """ + sdk = os.environ.get("RX_VK_DLSS_SDK") + if not sdk or not LINUX: + return [] + arch = "Linux_aarch64" if platform.machine() in ("aarch64", "arm64") else "Linux_x86_64" + lib = os.path.join(sdk, "lib", arch) + if not os.path.isdir(lib): + print("RX_VK_DLSS_SDK: no %s in %s; DLSS will not link" % (arch, os.path.join(sdk, "lib"))) + return [] + return ["-L" + lib, "-lnvsdk_ngx"] + + def target(): """toolchain.native_target(), with the sysroot on Linux""" return toolchain.native_target() + (["--sysroot=" + SYSROOT] if LINUX and SYSROOT else []) @@ -875,7 +897,8 @@ def main(): if LINUX: # (its C++ runtime inside: the game folder runs where the AppImage's sysroot is older than the system) link = [toolchain.need(toolchain.find("clang++"))] + target() + [ "-fuse-ld=lld", "-shared", "-o", vdll, "-Wl,-Map=" + vdll + ".map", "-Wl,-Bsymbolic", "-Wl,--gc-sections", - "-static-libstdc++", "-static-libgcc", "@" + vrsp, "-ldl", "-lpthread", "-lm"] + "-static-libstdc++", "-static-libgcc", "@" + vrsp, "-ldl", "-lpthread", "-lm"] + \ + dlss_sdk_link() else: link = [cc] + toolchain.native_target() + toolchain.native_link() + \ ["-shared", "-o", vdll, toolchain.link_opt("/map:" + vdll[:-4] + ".map"), "@" + vrsp, "-luser32", "-lgdi32"] + (["-lc++", "-lunwind"] if toolchain.mingw() else []) diff --git a/scripts/fsr3_shaders.py b/scripts/fsr3_shaders.py index 1b584898f..4a0b48bed 100644 --- a/scripts/fsr3_shaders.py +++ b/scripts/fsr3_shaders.py @@ -20,6 +20,8 @@ SDK = ROOT / "third_party/fidelityfx-sdk" GPU = SDK / "include/FidelityFX/gpu" PASSES = SDK / "shaders/fsr3upscaler" +FI_PASSES = SDK / "shaders/frameinterpolation" +OF_PASSES = SDK / "shaders/opticalflow" OUT = ROOT / "gpu/vk/shaders" # The option set the renderer records these passes under. Each one is a promise about the inputs: @@ -53,6 +55,61 @@ ] +# (hookshot) Frame interpolation and the optical flow it runs on, the same arrangement: AMD ships +# each pass as GLSL over the SDK's own GPU headers, and the renderer records them as SPIR-V headers +# beside the upscaler's. The options are the same promises about the same inputs -- the depth is +# reversed and the motion is at the render extent -- because the inputs are the ones the upscaler is +# already given (gpu/vk/vk_fsr3fi.cpp). +FI_OPTIONS = [ + "-DFFX_GPU=1", + "-DFFX_GLSL=1", + "-DFFX_FRAMEINTERPOLATION_OPTION_INVERTED_DEPTH=1", + "-DFFX_FRAMEINTERPOLATION_OPTION_LOW_RESOLUTION_MOTION_VECTORS=1", + "-DFFX_FRAMEINTERPOLATION_OPTION_JITTERED_MOTION_VECTORS=0", +] +OF_OPTIONS = ["-DFFX_GPU=1", "-DFFX_GLSL=1"] + +# (name, the pass file, extra defines). The file is named outright rather than composed: AMD's +# optical-flow v5 passes end "_pass_v5.glsl" and the interpolation pass itself is just +# "ffx_frameinterpolation_pass.glsl", so a composed name is wrong for four of the eighteen. +FI_VARIANTS = [ + ("fi_setup", "ffx_frameinterpolation_setup_pass.glsl", []), + ("fi_reconstruct_previous_depth", "ffx_frameinterpolation_reconstruct_previous_depth_pass.glsl", []), + ("fi_reconstruct_and_dilate", "ffx_frameinterpolation_reconstruct_and_dilate_pass.glsl", []), + ("fi_game_motion_vector_field", "ffx_frameinterpolation_game_motion_vector_field_pass.glsl", []), + ("fi_optical_flow_vector_field", "ffx_frameinterpolation_optical_flow_vector_field_pass.glsl", []), + ("fi_disocclusion_mask", "ffx_frameinterpolation_disocclusion_mask_pass.glsl", []), + ("fi_game_vector_field_inpainting_pyramid", + "ffx_frameinterpolation_compute_game_vector_field_inpainting_pyramid_pass.glsl", []), + ("fi_inpainting_pyramid", "ffx_frameinterpolation_compute_inpainting_pyramid_pass.glsl", []), + ("fi_interpolate", "ffx_frameinterpolation_pass.glsl", []), + ("fi_inpainting", "ffx_frameinterpolation_inpainting_pass.glsl", []), +] +OF_VARIANTS = [ + ("of_prepare_luma", "ffx_opticalflow_prepare_luma_pass.glsl", []), + ("of_luminance_pyramid", "ffx_opticalflow_compute_luminance_pyramid_pass.glsl", []), + ("of_generate_scd_histogram", "ffx_opticalflow_generate_scd_histogram_pass.glsl", []), + ("of_compute_scd_divergence", "ffx_opticalflow_compute_scd_divergence_pass.glsl", []), + ("of_compute_optical_flow_v5", "ffx_opticalflow_compute_optical_flow_advanced_pass_v5.glsl", []), + ("of_filter_optical_flow_v5", "ffx_opticalflow_filter_optical_flow_pass_v5.glsl", []), + ("of_scale_optical_flow_v5", "ffx_opticalflow_scale_optical_flow_advanced_pass_v5.glsl", []), +] + + +def compile_family(glslang, name, source, extra, out_path, target_env, options, includes, + variable=True): + """One frame-interpolation or optical-flow pass. The upscaler's compile_one is kept as it is: + its passes are composed by name and its option set is the upscaler's own.""" + cmd = [glslang, "-V", "--quiet", "-S", "comp"] + for d in includes: + cmd.append("-I" + str(d)) + cmd += [*options, *extra] + if variable: + cmd += ["--variable-name", f"FSR3_{name.upper()}_COMP_SPV"] + cmd += ["-o", str(out_path), str(source), "--target-env", target_env] + subprocess.run(cmd, check=True) + + def compile_one(glslang, name, pass_name, extra, out_path, target_env, variable=True): """Compile one variant. With `variable`, glslang writes a C header; without it, binary SPIR-V, which is what spirv-val reads.""" @@ -85,13 +142,27 @@ def main(): bad = [] with tempfile.TemporaryDirectory(prefix="fsr3-shaders-") as tmp: - for name, pass_name, extra in VARIANTS: + # the upscaler's eleven, then frame interpolation's ten and optical flow's seven + families = [(name, None, pass_name, extra, None, None) for name, pass_name, extra in VARIANTS] + families += [(name, FI_PASSES / f, None, extra, FI_OPTIONS, + [GPU, GPU / "frameinterpolation", GPU / "opticalflow"]) + for name, f, extra in FI_VARIANTS] + families += [(name, OF_PASSES / f, None, extra, OF_OPTIONS, [GPU, GPU / "opticalflow"]) + for name, f, extra in OF_VARIANTS] + for name, source, pass_name, extra, options, includes in families: header = OUT / f"fsr3_{name}_comp_spv.h" made = Path(tmp) / header.name - compile_one(glslang, name, pass_name, extra, made, a.target_env) + if source is None: + compile_one(glslang, name, pass_name, extra, made, a.target_env) + else: + compile_family(glslang, name, source, extra, made, a.target_env, options, includes) if a.spirv_val: spv = Path(tmp) / f"{name}.spv" - compile_one(glslang, name, pass_name, extra, spv, a.target_env, variable=False) + if source is None: + compile_one(glslang, name, pass_name, extra, spv, a.target_env, variable=False) + else: + compile_family(glslang, name, source, extra, spv, a.target_env, options, + includes, variable=False) subprocess.run([a.spirv_val, str(spv)], check=True) if a.check: have = header.read_text() if header.exists() else "" @@ -110,7 +181,7 @@ def main(): if bad: print(f"{len(bad)} header(s) do not match their source: {', '.join(bad)}", file=sys.stderr) return 1 - print(f"fsr3 shaders: {len(VARIANTS)} {'match' if a.check else 'written'}") + print(f"fsr3 shaders: {len(VARIANTS) + len(FI_VARIANTS) + len(OF_VARIANTS)} {'match' if a.check else 'written'}") return 0 diff --git a/third_party/fidelityfx-sdk/PROVENANCE.md b/third_party/fidelityfx-sdk/PROVENANCE.md index a4aaf8099..e94c8aaeb 100644 --- a/third_party/fidelityfx-sdk/PROVENANCE.md +++ b/third_party/fidelityfx-sdk/PROVENANCE.md @@ -10,8 +10,10 @@ What is here and why: | | | |---|---| -| `include/FidelityFX/gpu/` | The GPU-side headers the passes include: the common core, `fsr1/`, `spd/` (the single-pass downsampler the pyramids use) and `fsr3upscaler/` | +| `include/FidelityFX/gpu/` | The GPU-side headers the passes include: the common core, `fsr1/`, `spd/` (the single-pass downsampler the pyramids use), `fsr3upscaler/`, `frameinterpolation/` and `opticalflow/` | | `shaders/fsr3upscaler/*.glsl` | The eight upscaler passes, as AMD ships them | +| `shaders/frameinterpolation/*.glsl` | The eleven frame-interpolation passes, from `sdk/src/backends/vk/shaders/frameinterpolation/` | +| `shaders/opticalflow/*.glsl` | The seven optical-flow passes frame interpolation runs on, from `sdk/src/backends/vk/shaders/opticalflow/` | | `LICENSE.txt` | AMD's MIT notice | No runtime library is needed, and none is included: the passes are compiled from these sources into diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/CMakeCompileFrameinterpolationShaders.txt b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/CMakeCompileFrameinterpolationShaders.txt new file mode 100644 index 000000000..9652cb0dd --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/CMakeCompileFrameinterpolationShaders.txt @@ -0,0 +1,55 @@ +# This file is part of the FidelityFX SDK. +# +# Copyright (C) 2024 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files(the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions : +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +set(FRAMEINTERPOLATION_BASE_ARGS + -DFFX_FRAMEINTERPOLATION_OPTION_UPSAMPLE_SAMPLERS_USE_DATA_HALF=0 + -DFFX_FRAMEINTERPOLATION_OPTION_ACCUMULATE_SAMPLERS_USE_DATA_HALF=0 + -DFFX_FRAMEINTERPOLATION_OPTION_REPROJECT_SAMPLERS_USE_DATA_HALF=1 + -DFFX_FRAMEINTERPOLATION_OPTION_POSTPROCESSLOCKSTATUS_SAMPLERS_USE_DATA_HALF=0 + # Upsample uses lanczos approximation + -DFFX_FRAMEINTERPOLATION_OPTION_UPSAMPLE_USE_LANCZOS_TYPE=2 + -reflection -deps=gcc -DFFX_GPU=1) + +set(FRAMEINTERPOLATION_PERMUTATION_ARGS + -DFFX_FRAMEINTERPOLATION_OPTION_LOW_RES_MOTION_VECTORS={0,1} + -DFFX_FRAMEINTERPOLATION_OPTION_JITTER_MOTION_VECTORS={0,1} + -DFFX_FRAMEINTERPOLATION_OPTION_INVERTED_DEPTH={0,1}) + +set(FRAMEINTERPOLATION_INCLUDE_ARGS + "${FFX_GPU_PATH}" + "${FFX_GPU_PATH}/frameinterpolation") + +if (NOT FRAMEINTERPOLATION_SHADER_EXT) + set(FRAMEINTERPOLATION_SHADER_EXT *) +endif() + +file(GLOB FRAMEINTERPOLATION_SHADERS + "shaders/frameinterpolation/*.${FRAMEINTERPOLATION_SHADER_EXT}") + +# compile all the shaders +compile_shaders_with_depfile( + "${FFX_SC_EXECUTABLE}" + "${FRAMEINTERPOLATION_BASE_ARGS}" "${FRAMEINTERPOLATION_API_BASE_ARGS}" "${FRAMEINTERPOLATION_PERMUTATION_ARGS}" "${FRAMEINTERPOLATION_INCLUDE_ARGS}" + "${FRAMEINTERPOLATION_SHADERS}" "${FFX_PASS_SHADER_OUTPUT_PATH}" FRAMEINTERPOLATION_PERMUTATION_OUTPUTS) + +# add the header files they generate to the main list of dependencies +add_shader_output("${FRAMEINTERPOLATION_PERMUTATION_OUTPUTS}") diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation.h new file mode 100644 index 000000000..ccf2e23b8 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation.h @@ -0,0 +1,187 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_FRAMEINTERPOLATION_H +#define FFX_FRAMEINTERPOLATION_H + +struct InterpolationSourceColor +{ + FfxFloat32x3 fRaw; + FfxFloat32x3 fLinear; + FfxFloat32 fBilinearWeightSum; +}; + +InterpolationSourceColor NewInterpolationSourceColor() +{ + InterpolationSourceColor c; + c.fRaw = FfxFloat32x3(0.0, 0.0, 0.0); + c.fLinear = FfxFloat32x3(0.0, 0.0, 0.0); + c.fBilinearWeightSum = 0.0; + return c; +} + +InterpolationSourceColor SampleTextureBilinear(FfxBoolean isCurrent, FfxFloat32x2 fUv, FfxFloat32x2 fMotionVector, FfxInt32x2 texSize) +{ + InterpolationSourceColor result = NewInterpolationSourceColor(); + + FfxFloat32x2 fReprojectedUv = fUv + fMotionVector; + BilinearSamplingData bilinearInfo = GetBilinearSamplingData(fReprojectedUv, texSize); + + FfxFloat32x3 fColor = FfxFloat32x3(0.0, 0.0, 0.0); + FfxFloat32 fWeightSum = 0.0f; + for (FfxInt32 iSampleIndex = 0; iSampleIndex < 4; iSampleIndex++) { + + const FfxInt32x2 iOffset = bilinearInfo.iOffsets[iSampleIndex]; + const FfxInt32x2 iSamplePos = bilinearInfo.iBasePos + iOffset; + + if (IsInRect(iSamplePos, InterpolationRectBase(), InterpolationRectSize())) + { + FfxFloat32 fWeight = bilinearInfo.fWeights[iSampleIndex]; + + if (isCurrent) + fColor += LoadCurrentBackbuffer(iSamplePos).rgb * fWeight; + else + fColor += LoadPreviousBackbuffer(iSamplePos).rgb * fWeight; + fWeightSum += fWeight; + } + } + + //normalize colors + fColor = (fWeightSum != 0.0f) ? fColor / fWeightSum : FfxFloat32x3(0.0f, 0.0f, 0.0f); + + result.fRaw = fColor; + result.fLinear = RawRGBToLinear(fColor); + result.fBilinearWeightSum = fWeightSum; + + return result; +} + +void updateInPaintingWeight(inout FfxFloat32 fInPaintingWeight, FfxFloat32 fFactor) +{ + fInPaintingWeight = ffxSaturate(ffxMax(fInPaintingWeight, fFactor)); +} + +void computeInterpolatedColor(FfxUInt32x2 iPxPos, out FfxFloat32x3 fInterpolatedColor, inout FfxFloat32 fInPaintingWeight) +{ + const FfxFloat32x2 fUvInInterpolationRect = (FfxFloat32x2(iPxPos - InterpolationRectBase()) + 0.5f) / InterpolationRectSize(); + const FfxFloat32x2 fUvInScreenSpace = (FfxFloat32x2(iPxPos) + 0.5f) / DisplaySize(); + const FfxFloat32x2 fLrUvInInterpolationRect = fUvInInterpolationRect * (FfxFloat32x2(RenderSize()) / GetMaxRenderSize()); + + const FfxFloat32x2 fUvLetterBoxScale = FfxFloat32x2(InterpolationRectSize()) / DisplaySize(); + + // game MV are top left aligned, the function scales them to render res UV + VectorFieldEntry gameMv; + LoadInpaintedGameFieldMv(fUvInInterpolationRect, gameMv); + + // OF is done on the back buffers which already have black bars + VectorFieldEntry ofMv; + SampleOpticalFlowMotionVectorField(fUvInScreenSpace, ofMv); + + // Binarize disucclusion factor + FfxFloat32x2 fDisocclusionFactor = FfxFloat32x2(FFX_EQUAL(ffxSaturate(SampleDisocclusionMask(fLrUvInInterpolationRect).xy), FfxFloat32x2(1.0, 1.0))); + + InterpolationSourceColor fPrevColorGame = SampleTextureBilinear(false, fUvInScreenSpace, +gameMv.fMotionVector * fUvLetterBoxScale, DisplaySize()); // Get in previous frame buffer, the color of interpolated pixel + InterpolationSourceColor fCurrColorGame = SampleTextureBilinear(true, fUvInScreenSpace, -gameMv.fMotionVector * fUvLetterBoxScale, DisplaySize()); // Get color in current framebuffer, of color of interpolated pixel + + InterpolationSourceColor fPrevColorOF = SampleTextureBilinear(false, fUvInScreenSpace, +ofMv.fMotionVector * fUvLetterBoxScale, DisplaySize()); + InterpolationSourceColor fCurrColorOF = SampleTextureBilinear(true, fUvInScreenSpace, -ofMv.fMotionVector * fUvLetterBoxScale, DisplaySize()); + + FfxFloat32 fDisoccludedFactor = 0.0f; + + // Disocclusion logic + { + fDisocclusionFactor.x *= FfxFloat32(!gameMv.bPosOutside); // fDisocclusionFactor.x of 1 means the pos of interpolated pixel is within bounds of previous frame. + fDisocclusionFactor.y *= FfxFloat32(!gameMv.bNegOutside); // fDisocclusionFactor.y of 1 means the pos of interpolated pixel is within bounds of current frame + + // Inpaint in bi-directional disocclusion areas + updateInPaintingWeight(fInPaintingWeight, FfxFloat32(length(fDisocclusionFactor) <= FFX_FRAMEINTERPOLATION_EPSILON)); + + FfxFloat32 t = 0.5f; + t += 0.5f * (1 - (fDisocclusionFactor.x)); + t -= 0.5f * (1 - (fDisocclusionFactor.y)); + // Say if fDisocclusionFactor.x is 1 and fDisocclusionFactor.y = 0, then t will be 0. fInterpolatedColor will be entirely from fPrevColorGame + fInterpolatedColor = ffxLerp(fPrevColorGame.fRaw, fCurrColorGame.fRaw, ffxSaturate(t)); + fDisoccludedFactor = ffxSaturate(1 - ffxMin(fDisocclusionFactor.x, fDisocclusionFactor.y)); + + if (fPrevColorGame.fBilinearWeightSum == 0.0f) + { + fInterpolatedColor = fCurrColorGame.fRaw; + } + else if (fCurrColorGame.fBilinearWeightSum == 0.0f) + { + fInterpolatedColor = fPrevColorGame.fRaw; + } + if (fPrevColorGame.fBilinearWeightSum == 0 && fCurrColorGame.fBilinearWeightSum == 0) + { + fInPaintingWeight = 1.0f; + } + } + + { + + FfxFloat32 ofT = 0.5f; + + if (fPrevColorOF.fBilinearWeightSum > 0 && fCurrColorOF.fBilinearWeightSum > 0) + { + ofT = 0.5f; + } + else if (fPrevColorOF.fBilinearWeightSum > 0) + { + ofT = 0; + } else { + ofT = 1; + } + + const FfxFloat32x3 ofColor = ffxLerp(fPrevColorOF.fRaw, fCurrColorOF.fRaw, ofT); + + FfxFloat32 fOF_Sim = NormalizedDot3(fPrevColorOF.fRaw, fCurrColorOF.fRaw); + FfxFloat32 fGame_Sim = NormalizedDot3(fPrevColorGame.fRaw, fCurrColorGame.fRaw); + + fGame_Sim = ffxLerp(ffxMax(FFX_FRAMEINTERPOLATION_EPSILON, fGame_Sim), 1.0f, ffxSaturate(fDisoccludedFactor)); + FfxFloat32 fGameMvBias = ffxPow(ffxSaturate(fGame_Sim / ffxMax(FFX_FRAMEINTERPOLATION_EPSILON, fOF_Sim)), 1.0f); + + const FfxFloat32 fFrameIndexFactor = FfxFloat32(FrameIndexSinceLastReset() < 10); + fGameMvBias = ffxLerp(fGameMvBias, 1.0f, fFrameIndexFactor); + + fInterpolatedColor = ffxLerp(ofColor, fInterpolatedColor, ffxSaturate(fGameMvBias)); + } +} + +void computeFrameinterpolation(FfxInt32x2 iPxPos) +{ + FfxFloat32x3 fColor = FfxFloat32x3(0, 0, 0); + FfxFloat32 fInPaintingWeight = 0.0f; + + if (IsInRect(iPxPos, InterpolationRectBase(), InterpolationRectSize()) == false || FrameIndexSinceLastReset() == 0) + { + // if we just reset or we are out of the interpolation rect, copy the current back buffer and don't interpolate + fColor = LoadCurrentBackbuffer(iPxPos); + } + else + { + computeInterpolatedColor(iPxPos, fColor, fInPaintingWeight); + } + + StoreFrameinterpolationOutput(FfxInt32x2(iPxPos), FfxFloat32x4(fColor, fInPaintingWeight)); +} + +#endif // FFX_FRAMEINTERPOLATION_H diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_callbacks_glsl.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_callbacks_glsl.h new file mode 100644 index 000000000..20c5c2967 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_callbacks_glsl.h @@ -0,0 +1,758 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#include "ffx_frameinterpolation_resources.h" +#include "ffx_core.h" + +#define COUNTER_SPD 0 +#define COUNTER_FRAME_INDEX_SINCE_LAST_RESET 1 + + /////////////////////////////////////////////// + // declare CBs and CB accessors +/////////////////////////////////////////////// +#if defined(FFX_FRAMEINTERPOLATION_BIND_CB_FRAMEINTERPOLATION) + layout (set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_CB_FRAMEINTERPOLATION, std140) uniform cbFI_t + { + FfxInt32x2 renderSize; + FfxInt32x2 displaySize; + + FfxFloat32x2 displaySizeRcp; + FfxFloat32 cameraNear; + FfxFloat32 cameraFar; + + FfxInt32x2 upscalerTargetSize; + FfxInt32 Mode; + FfxInt32 reset; + + FfxFloat32x4 fDeviceToViewDepth; + + FfxFloat32 deltaTime; + FfxInt32 HUDLessAttachedFactor; + FfxInt32x2 distortionFieldSize; + + FfxFloat32x2 opticalFlowScale; + FfxInt32 opticalFlowBlockSize; + FfxUInt32 dispatchFlags; + + FfxInt32x2 maxRenderSize; + FfxInt32 opticalFlowHalfResMode; + FfxInt32 NumInstances; + + FfxInt32x2 interpolationRectBase; + FfxInt32x2 interpolationRectSize; + + FfxFloat32x3 debugBarColor; + FfxUInt32 backBufferTransferFunction; + + FfxFloat32x2 minMaxLuminance; + FfxFloat32 fTanHalfFOV; + FfxInt32 _pad1; + + FfxFloat32x2 fJitter; + FfxFloat32x2 fMotionVectorScale; + } cbFI; + + FfxFloat32x2 Jitter() + { + return cbFI.fJitter; + } + + FfxInt32x2 InterpolationRectBase() + { + return cbFI.interpolationRectBase; + } + + FfxInt32x2 InterpolationRectSize() + { + return cbFI.interpolationRectSize; + } + + FfxFloat32x2 MotionVectorScale() + { + return cbFI.fMotionVectorScale; + } + + FfxInt32x2 RenderSize() + { + return cbFI.renderSize; + } + + FfxInt32x2 DisplaySize() + { + return cbFI.displaySize; + } + + FfxBoolean Reset() + { + return cbFI.reset == 1; + } + + FfxFloat32x4 DeviceToViewSpaceTransformFactors() + { + return cbFI.fDeviceToViewDepth; + } + + FfxInt32x2 GetOpticalFlowSize() + { + FfxInt32x2 iOpticalFlowSize = FfxInt32x2((1.0 / cbFI.opticalFlowScale) / FfxFloat32x2(cbFI.opticalFlowBlockSize.xx)); + + return iOpticalFlowSize; + } + + FfxInt32x2 GetOpticalFlowSize2() + { + return GetOpticalFlowSize() * 1; + } + + FfxFloat32x2 GetOpticalFlowScale() + { + return cbFI.opticalFlowScale; + } + + FfxInt32 GetOpticalFlowBlockSize() + { + return cbFI.opticalFlowBlockSize; + } + + FfxInt32 GetHUDLessAttachedFactor() + { + return cbFI.HUDLessAttachedFactor; + } + + FfxInt32x2 GetDistortionFieldSize() + { + return cbFI.distortionFieldSize; + } + + FfxUInt32 GetDispatchFlags() + { + return cbFI.dispatchFlags; + } + + FfxInt32x2 GetMaxRenderSize() + { + return cbFI.maxRenderSize; + } + + FfxInt32 GetOpticalFlowHalfResMode() + { + return cbFI.opticalFlowHalfResMode; + } + + FfxFloat32x3 GetDebugBarColor() + { + return cbFI.debugBarColor; + } + + FfxFloat32 TanHalfFoV() + { + return cbFI.fTanHalfFOV; + } + + FfxUInt32 BackBufferTransferFunction() + { + return cbFI.backBufferTransferFunction; + } + + FfxFloat32 MinLuminance() + { + return cbFI.minMaxLuminance[0]; + } + + FfxFloat32 MaxLuminance() + { + return cbFI.minMaxLuminance[1]; + } + +#endif // defined(FFX_FRAMEINTERPOLATION_BIND_CB_FRAMEINTERPOLATION) + + +#if defined(FFX_FRAMEINTERPOLATION_BIND_CB_INPAINTING_PYRAMID) + layout (set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_CB_INPAINTING_PYRAMID, std140) uniform cbInpaintingPyramid_t + { + FfxUInt32 mips; + FfxUInt32 numWorkGroups; + FfxUInt32x2 workGroupOffset; + } cbInpaintingPyramid; + + FfxUInt32 NumMips() + { + return cbInpaintingPyramid.mips; + } + FfxUInt32 NumWorkGroups() + { + return cbInpaintingPyramid.numWorkGroups; + } + FfxUInt32x2 WorkGroupOffset() + { + return cbInpaintingPyramid.workGroupOffset; + } + +#endif // defined(FFX_FRAMEINTERPOLATION_BIND_CB_INPAINTING_PYRAMID) + + + /////////////////////////////////////////////// + // declare samplers +/////////////////////////////////////////////// + + +layout (set = 0, binding = 1000) uniform sampler s_LinearClamp; + + /////////////////////////////////////////////// + // declare SRVs and SRV accessors +/////////////////////////////////////////////// + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_PREVIOUS_INTERPOLATION_SOURCE + layout (set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_SRV_PREVIOUS_INTERPOLATION_SOURCE) uniform texture2D r_previous_interpolation_source; + + FfxFloat32x3 LoadPreviousBackbuffer(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return texelFetch(r_previous_interpolation_source, iPxPos, 0).rgb; + } + FfxFloat32x3 SamplePreviousBackbuffer(FFX_PARAMETER_IN FfxFloat32x2 fUv) + { + return textureLod(sampler2D(r_previous_interpolation_source, s_LinearClamp), fUv, 0.0).xyz; + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_CURRENT_INTERPOLATION_SOURCE + layout (set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_SRV_CURRENT_INTERPOLATION_SOURCE) uniform texture2D r_current_interpolation_source; + + FfxFloat32x3 LoadCurrentBackbuffer(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return texelFetch(r_current_interpolation_source, iPxPos, 0).rgb; + } + FfxFloat32x3 SampleCurrentBackbuffer(FFX_PARAMETER_IN FfxFloat32x2 fUv) + { + return textureLod(sampler2D(r_current_interpolation_source, s_LinearClamp), fUv, 0.0).xyz; + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_DILATED_MOTION_VECTORS + layout (set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_SRV_DILATED_MOTION_VECTORS) uniform texture2D r_dilated_motion_vectors; + + FfxFloat32x2 LoadDilatedMotionVector(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return texelFetch(r_dilated_motion_vectors, iPxPos, 0).xy; + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_DILATED_DEPTH + layout (set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_SRV_DILATED_DEPTH) uniform texture2D r_dilated_depth; + + FfxFloat32 LoadDilatedDepth(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return texelFetch(r_dilated_depth, iPxPos, 0).x; + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_RECONSTRUCTED_DEPTH_PREVIOUS_FRAME + layout (set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_SRV_RECONSTRUCTED_DEPTH_PREVIOUS_FRAME) uniform utexture2D r_reconstructed_depth_previous_frame; + + FfxFloat32 LoadReconstructedDepthPreviousFrame(FFX_PARAMETER_IN FfxInt32x2 iPxInput) + { + return ffxAsFloat(texelFetch(r_reconstructed_depth_previous_frame, iPxInput, 0).x); + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_RECONSTRUCTED_DEPTH_INTERPOLATED_FRAME + layout (set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_SRV_RECONSTRUCTED_DEPTH_INTERPOLATED_FRAME) uniform utexture2D r_reconstructed_depth_interpolated_frame; + + FfxFloat32 LoadEstimatedInterpolationFrameDepth(FFX_PARAMETER_IN FfxInt32x2 iPxInput) + { + return ffxAsFloat(texelFetch(r_reconstructed_depth_interpolated_frame, iPxInput, 0).x); + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_DISOCCLUSION_MASK + layout (set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_SRV_DISOCCLUSION_MASK) uniform texture2D r_disocclusion_mask; + + FfxFloat32x4 LoadDisocclusionMask(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return texelFetch(r_disocclusion_mask, iPxPos, 0); + } + FfxFloat32x4 SampleDisocclusionMask(FFX_PARAMETER_IN FfxFloat32x2 fUv) + { + return textureLod(sampler2D(r_disocclusion_mask, s_LinearClamp), fUv, 0); + } +#endif + +#if defined(FFX_FRAMEINTERPOLATION_BIND_SRV_GAME_MOTION_VECTOR_FIELD_X) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_SRV_GAME_MOTION_VECTOR_FIELD_Y) + layout (set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_SRV_GAME_MOTION_VECTOR_FIELD_X) uniform utexture2D r_game_motion_vector_field_x; + layout (set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_SRV_GAME_MOTION_VECTOR_FIELD_Y) uniform utexture2D r_game_motion_vector_field_y; + + FfxUInt32x2 LoadGameFieldMv(FFX_PARAMETER_IN FfxInt32x2 iPxSample) + { + FfxUInt32 packedX = texelFetch(r_game_motion_vector_field_x, iPxSample, 0).x; + FfxUInt32 packedY = texelFetch(r_game_motion_vector_field_y, iPxSample, 0).x; + + return FfxUInt32x2(packedX, packedY); + } +#endif + +#if defined(FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_X) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_Y) + layout (set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_X) uniform utexture2D r_optical_flow_motion_vector_field_x; + layout (set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_Y) uniform utexture2D r_optical_flow_motion_vector_field_y; + + FfxUInt32x2 LoadOpticalFlowFieldMv(FFX_PARAMETER_IN FfxInt32x2 iPxSample) + { + FfxUInt32 packedX = texelFetch(r_optical_flow_motion_vector_field_x, iPxSample, 0).x; + FfxUInt32 packedY = texelFetch(r_optical_flow_motion_vector_field_y, iPxSample, 0).x; + + return FfxUInt32x2(packedX, packedY); + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW + layout (set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW) uniform itexture2D r_optical_flow; + + #if defined(FFX_FRAMEINTERPOLATION_BIND_CB_FRAMEINTERPOLATION) + FfxFloat32x2 LoadOpticalFlow(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return texelFetch(r_optical_flow, iPxPos, 0).xy * GetOpticalFlowScale(); + } + #endif +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_UPSAMPLED + layout (set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_UPSAMPLED) uniform texture2D r_optical_flow_upsampled; + + FfxFloat32x2 LoadOpticalFlowUpsampled(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return texelFetch(r_optical_flow_upsampled, iPxPos, 0).xy; + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_CONFIDENCE + layout (set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_CONFIDENCE) uniform utexture2D r_optical_flow_confidence; + + FfxFloat32 LoadOpticalFlowConfidence(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return texelFetch(r_optical_flow_confidence, iPxPos, 0).y; + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_GLOBAL_MOTION + layout (set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_GLOBAL_MOTION) uniform utexture2D r_optical_flow_global_motion; + + FfxUInt32 LoadOpticalFlowGlobalMotion(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return texelFetch(r_optical_flow_global_motion, iPxPos, 0).x; + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_SCENE_CHANGE_DETECTION + layout (set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_SCENE_CHANGE_DETECTION) uniform utexture2D r_optical_flow_scd; + + FfxUInt32 LoadOpticalFlowSceneChangeDetection(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return texelFetch(r_optical_flow_scd, iPxPos, 0).x; + } + + FfxBoolean HasSceneChanged() + { + #define SCD_OUTPUT_HISTORY_BITS_SLOT 1 + //if (FrameIndex() <= 5) // threshold according to original OpenCL code + //{ + // return 1.0; + //} + //else + { + // Report that the scene is changed if the change was detected in any of the + // 4 previous frames (0xfu - covers 4 history bits). + return ((texelFetch(r_optical_flow_scd, FfxInt32x2(SCD_OUTPUT_HISTORY_BITS_SLOT, 0), 0).x) & 0xfu) != 0; + } + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_DEBUG + layout (set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_DEBUG) uniform texture2D r_optical_flow_debug; + + FfxFloat32x4 LoadOpticalFlowDebug(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return texelFetch(r_optical_flow_debug, iPxPos, 0); + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_OUTPUT + layout (set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_SRV_OUTPUT) uniform texture2D r_output; + + FfxFloat32x4 LoadFrameInterpolationOutput(FFX_PARAMETER_IN FfxInt32x2 iPxInput) + { + return texelFetch(r_output, iPxInput, 0); + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_INPAINTING_PYRAMID + layout (set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_SRV_INPAINTING_PYRAMID) uniform texture2D r_inpainting_pyramid; + + FfxFloat32x4 LoadInpaintingPyramid(FFX_PARAMETER_IN FfxInt32 mipLevel, FFX_PARAMETER_IN FfxUInt32x2 iPxInput) + { + return texelFetch(r_inpainting_pyramid, FfxInt32x2(iPxInput), mipLevel); + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_PRESENT_BACKBUFFER + layout (set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_SRV_PRESENT_BACKBUFFER) uniform texture2D r_present_backbuffer; + + FfxFloat32x4 LoadPresentBackbuffer(FFX_PARAMETER_IN FfxInt32x2 iPxInput) + { + return texelFetch(r_present_backbuffer, iPxInput, 0); + } + FfxFloat32x4 SamplePresentBackbuffer(FFX_PARAMETER_IN FfxFloat32x2 fUv) + { + return textureLod(sampler2D(r_present_backbuffer, s_LinearClamp), fUv, 0.0); + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_COUNTERS + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_SRV_COUNTERS) readonly buffer FrameInterpolationCounters_t + { + FfxUInt32 data[]; + } r_counters; + + FfxUInt32 LoadCounter(FFX_PARAMETER_IN FfxInt32 iPxPos) + { + return r_counters.data[iPxPos]; + } + + FfxUInt32 FrameIndexSinceLastReset() + { + return LoadCounter(COUNTER_FRAME_INDEX_SINCE_LAST_RESET); + } +#endif + + +#if defined(FFX_FRAMEINTERPOLATION_BIND_SRV_INPUT_DEPTH) + layout (set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_SRV_INPUT_DEPTH) uniform texture2D r_input_depth; + + FfxFloat32 LoadInputDepth(FfxInt32x2 iPxPos) + { + return texelFetch(r_input_depth, iPxPos, 0).x; + } +#endif + +#if defined(FFX_FRAMEINTERPOLATION_BIND_SRV_INPUT_MOTION_VECTORS) + layout (set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_SRV_INPUT_MOTION_VECTORS) uniform texture2D r_input_motion_vectors; + + FfxFloat32x2 LoadInputMotionVector(FfxInt32x2 iPxDilatedMotionVectorPos) + { + FfxFloat32x2 fSrcMotionVector = texelFetch(r_input_motion_vectors, iPxDilatedMotionVectorPos, 0).xy; + + FfxFloat32x2 fUvMotionVector = fSrcMotionVector * MotionVectorScale(); + + #if FFX_FRAMEINTERPOLATION_OPTION_JITTERED_MOTION_VECTORS + fUvMotionVector -= MotionVectorJitterCancellation(); + #endif + + return fUvMotionVector; + } +#endif + +#if defined(FFX_FRAMEINTERPOLATION_BIND_SRV_DISTORTION_FIELD) + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_SRV_DISTORTION_FIELD) uniform texture2D r_input_distortion_field; + FfxFloat32x2 SampleDistortionField(FFX_PARAMETER_IN FfxFloat32x2 fUv) + { + return textureLod(sampler2D(r_input_distortion_field, s_LinearClamp), fUv, 0.0).xy; + } +#endif + +/////////////////////////////////////////////// +// declare UAVs and UAV accessors +/////////////////////////////////////////////// +#ifdef FFX_FRAMEINTERPOLATION_BIND_UAV_OUTPUT + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_UAV_OUTPUT /* app controlled format */) uniform image2D rw_output; + + FfxFloat32x4 RWLoadFrameinterpolationOutput(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return imageLoad(rw_output, iPxPos); + } + + void StoreFrameinterpolationOutput(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x4 val) + { + imageStore(rw_output, iPxPos, val); + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_UAV_DILATED_MOTION_VECTORS + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_UAV_DILATED_MOTION_VECTORS, rg16f) uniform image2D rw_dilated_motion_vectors; + + FfxFloat32x2 RWLoadDilatedMotionVectors(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return imageLoad(rw_dilated_motion_vectors, iPxPos).xy; + } + + void StoreDilatedMotionVectors(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x2 val) + { + imageStore(rw_dilated_motion_vectors, iPxPos, FfxFloat32x4(val, 0.0, 0.0)); + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_UAV_DILATED_DEPTH + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_UAV_DILATED_DEPTH, r32f) uniform image2D rw_dilated_depth; + + FfxFloat32 RWLoadDilatedDepth(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return imageLoad(rw_dilated_depth, iPxPos).x; + } + + void StoreDilatedDepth(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32 val) + { + imageStore(rw_dilated_depth, iPxPos, FfxFloat32x4(val, 0.0, 0.0, 0.0)); + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_UAV_RECONSTRUCTED_DEPTH_PREVIOUS_FRAME + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_UAV_RECONSTRUCTED_DEPTH_PREVIOUS_FRAME, r32ui) uniform uimage2D rw_reconstructed_depth_previous_frame; + + FfxFloat32 RWLoadReconstructedDepthPreviousFrame(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return ffxAsFloat(imageLoad(rw_reconstructed_depth_previous_frame, iPxPos).x); + } + + void UpdateReconstructedDepthPreviousFrame(FfxInt32x2 iPxSample, FfxFloat32 fDepth) + { + FfxUInt32 uDepth = ffxAsUInt32(fDepth); + +#if FFX_FRAMEINTERPOLATION_OPTION_INVERTED_DEPTH + imageAtomicMax(rw_reconstructed_depth_previous_frame, iPxSample, uDepth); +#else + imageAtomicMin(rw_reconstructed_depth_previous_frame, iPxSample, uDepth); // min for standard, max for inverted depth +#endif + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_UAV_RECONSTRUCTED_DEPTH_INTERPOLATED_FRAME + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_UAV_RECONSTRUCTED_DEPTH_INTERPOLATED_FRAME, r32ui) uniform uimage2D rw_reconstructed_depth_interpolated_frame; + + FfxFloat32 RWLoadReconstructedDepthInterpolatedFrame(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return ffxAsFloat(imageLoad(rw_reconstructed_depth_interpolated_frame, iPxPos).x); + } + + void StoreReconstructedDepthInterpolatedFrame(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32 value) + { + FfxUInt32 uDepth = ffxAsUInt32(value); + imageStore(rw_reconstructed_depth_interpolated_frame, iPxPos, FfxUInt32x4(uDepth, 0, 0, 0)); + } + + void UpdateReconstructedDepthInterpolatedFrame(FfxInt32x2 iPxSample, FfxFloat32 fDepth) + { + FfxUInt32 uDepth = ffxAsUInt32(fDepth); + +#if FFX_FRAMEINTERPOLATION_OPTION_INVERTED_DEPTH + imageAtomicMax(rw_reconstructed_depth_interpolated_frame, iPxSample, uDepth); +#else + imageAtomicMin(rw_reconstructed_depth_interpolated_frame, iPxSample, uDepth); // min for standard, max for inverted depth +#endif + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_UAV_DISOCCLUSION_MASK + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_UAV_DISOCCLUSION_MASK, rg8) uniform image2D rw_disocclusion_mask; + + FfxFloat32x2 RWLoadDisocclusionMask(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return imageLoad(rw_disocclusion_mask, iPxPos).xy; + } + + void StoreDisocclusionMask(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x2 val) + { + imageStore(rw_disocclusion_mask, iPxPos, FfxFloat32x4(val, 0.0, 0.0)); + } +#endif + +#if defined(FFX_FRAMEINTERPOLATION_BIND_UAV_GAME_MOTION_VECTOR_FIELD_X) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_GAME_MOTION_VECTOR_FIELD_Y) + + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_UAV_GAME_MOTION_VECTOR_FIELD_X, r32ui) uniform uimage2D rw_game_motion_vector_field_x; + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_UAV_GAME_MOTION_VECTOR_FIELD_Y, r32ui) uniform uimage2D rw_game_motion_vector_field_y; + + FfxUInt32 RWLoadGameMotionVectorFieldX(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return imageLoad(rw_game_motion_vector_field_x, iPxPos).x; + } + + void StoreGameMotionVectorFieldX(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxUInt32 val) + { + imageStore(rw_game_motion_vector_field_x, iPxPos, FfxUInt32x4(val, 0, 0, 0)); + } + + FfxUInt32 RWLoadGameMotionVectorFieldY(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return imageLoad(rw_game_motion_vector_field_y, iPxPos).x; + } + + void StoreGameMotionVectorFieldY(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxUInt32 val) + { + imageStore(rw_game_motion_vector_field_y, iPxPos, FfxUInt32x4(val, 0, 0, 0)); + } + + void UpdateGameMotionVectorField(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxUInt32x2 packedVector) + { + imageAtomicMax(rw_game_motion_vector_field_x, iPxPos, packedVector.x); + imageAtomicMax(rw_game_motion_vector_field_y, iPxPos, packedVector.y); + } + + FfxUInt32 UpdateGameMotionVectorFieldEx(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxUInt32x2 packedVector) + { + FfxUInt32 uPreviousValueX = imageAtomicMax(rw_game_motion_vector_field_x, iPxPos, packedVector.x); + FfxUInt32 uPreviousValueY = imageAtomicMax(rw_game_motion_vector_field_y, iPxPos, packedVector.y); + + const FfxUInt32 uExistingVectorFieldEntry = ffxMax(uPreviousValueX, uPreviousValueY); + + return uExistingVectorFieldEntry; + } +#endif + +#if defined(FFX_FRAMEINTERPOLATION_BIND_UAV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_X) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_Y) + + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_UAV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_X, r32ui) uniform uimage2D rw_optical_flow_motion_vector_field_x; + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_UAV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_Y, r32ui) uniform uimage2D rw_optical_flow_motion_vector_field_y; + + FfxUInt32 RWLoadOpticalflowMotionVectorFieldX(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return imageLoad(rw_optical_flow_motion_vector_field_x, iPxPos).x; + } + void StoreOpticalflowMotionVectorFieldX(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxUInt32 val) + { + imageStore(rw_optical_flow_motion_vector_field_x, iPxPos, FfxUInt32x4(val, 0, 0, 0)); + } + FfxUInt32 RWLoadOpticalflowMotionVectorFieldY(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return imageLoad(rw_optical_flow_motion_vector_field_y, iPxPos).x; + } + void StoreOpticalflowMotionVectorFieldY(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxUInt32 val) + { + imageStore(rw_optical_flow_motion_vector_field_y, iPxPos, FfxUInt32x4(val, 0, 0, 0)); + } + void UpdateOpticalflowMotionVectorField(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxUInt32x2 packedVector) + { + imageAtomicMax(rw_optical_flow_motion_vector_field_x, iPxPos, packedVector.x); + imageAtomicMax(rw_optical_flow_motion_vector_field_y, iPxPos, packedVector.y); + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_UAV_COUNTERS + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_UAV_COUNTERS) coherent buffer FrameInterpolationRWCounters_t + { + FfxUInt32 data[]; + } rw_counters; + + FfxUInt32 RWLoadCounter(FFX_PARAMETER_IN FfxInt32 iPxPos) + { + return rw_counters.data[iPxPos]; + } + + void StoreCounter(FFX_PARAMETER_IN FfxInt32 iPxPos, FFX_PARAMETER_IN FfxUInt32 counter) + { + rw_counters.data[iPxPos] = counter; + } + void AtomicIncreaseCounter(FFX_PARAMETER_IN FfxInt32 iPxPos, FFX_PARAMETER_OUT FfxUInt32 oldVal) + { + oldVal = atomicAdd(rw_counters.data[iPxPos], 1); + } +#endif + + +#if defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_0) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_1) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_2) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_3) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_4) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_5) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_6) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_7) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_8) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_9) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_10) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_11) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_12) + + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_0, rgba16f) uniform image2D rw_inpainting_pyramid0; + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_1, rgba16f) uniform image2D rw_inpainting_pyramid1; + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_2, rgba16f) uniform image2D rw_inpainting_pyramid2; + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_3, rgba16f) uniform image2D rw_inpainting_pyramid3; + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_4, rgba16f) uniform image2D rw_inpainting_pyramid4; + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_5, rgba16f) coherent uniform image2D rw_inpainting_pyramid5; + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_6, rgba16f) uniform image2D rw_inpainting_pyramid6; + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_7, rgba16f) uniform image2D rw_inpainting_pyramid7; + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_8, rgba16f) uniform image2D rw_inpainting_pyramid8; + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_9, rgba16f) uniform image2D rw_inpainting_pyramid9; + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_10, rgba16f) uniform image2D rw_inpainting_pyramid10; + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_11, rgba16f) uniform image2D rw_inpainting_pyramid11; + layout(set = 0, binding = FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_12, rgba16f) uniform image2D rw_inpainting_pyramid12; + + + FfxFloat32x4 RWLoadInpaintingPyramid(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxUInt32 index) + { + #define LOAD(idx) \ + if (index == idx) \ + { \ + return imageLoad(rw_inpainting_pyramid##idx, iPxPos); \ + } + LOAD(0); + LOAD(1); + LOAD(2); + LOAD(3); + LOAD(4); + LOAD(5); + LOAD(6); + LOAD(7); + LOAD(8); + LOAD(9); + LOAD(10); + LOAD(11); + LOAD(12); + return FfxFloat32x4(0.0, 0.0, 0.0, 0.0); + + #undef LOAD + } + + void StoreInpaintingPyramid(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x4 outValue, FFX_PARAMETER_IN FfxUInt32 index) + { + #define STORE(idx) \ + if (index == idx) \ + { \ + imageStore(rw_inpainting_pyramid##idx, iPxPos, outValue); \ + } + + STORE(0); + STORE(1); + STORE(2); + STORE(3); + STORE(4); + STORE(5); + STORE(6); + STORE(7); + STORE(8); + STORE(9); + STORE(10); + STORE(11); + STORE(12); + + #undef STORE + } +#endif diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_callbacks_hlsl.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_callbacks_hlsl.h new file mode 100644 index 000000000..a58743d2f --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_callbacks_hlsl.h @@ -0,0 +1,814 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#include "ffx_frameinterpolation_resources.h" + +#if defined(FFX_GPU) +#ifdef __hlsl_dx_compiler +#pragma dxc diagnostic push +#pragma dxc diagnostic ignored "-Wambig-lit-shift" +#endif //__hlsl_dx_compiler +#include "ffx_core.h" +#ifdef __hlsl_dx_compiler +#pragma dxc diagnostic pop +#endif //__hlsl_dx_compiler +#endif // #if defined(FFX_GPU) + +#if defined(FFX_GPU) + +#define COUNTER_SPD 0 +#define COUNTER_FRAME_INDEX_SINCE_LAST_RESET 1 + + /////////////////////////////////////////////// + // declare CBs and CB accessors +/////////////////////////////////////////////// +#if defined(FFX_FRAMEINTERPOLATION_BIND_CB_FRAMEINTERPOLATION) + cbuffer cbFI : FFX_DECLARE_CB(FFX_FRAMEINTERPOLATION_BIND_CB_FRAMEINTERPOLATION) + { + FfxInt32x2 renderSize; + FfxInt32x2 displaySize; + + FfxFloat32x2 displaySizeRcp; + FfxFloat32 cameraNear; + FfxFloat32 cameraFar; + + FfxInt32x2 upscalerTargetSize; + FfxInt32 Mode; + FfxInt32 reset; + + FfxFloat32x4 fDeviceToViewDepth; + + FfxFloat32 deltaTime; + FfxInt32 HUDLessAttachedFactor; + FfxInt32x2 distortionFieldSize; + + FfxFloat32x2 opticalFlowScale; + FfxInt32 opticalFlowBlockSize; + FfxUInt32 dispatchFlags; + + FfxInt32x2 maxRenderSize; + FfxInt32 opticalFlowHalfResMode; + FfxInt32 NumInstances; + + FfxInt32x2 interpolationRectBase; + FfxInt32x2 interpolationRectSize; + + FfxFloat32x3 debugBarColor; + FfxUInt32 backBufferTransferFunction; + + FfxFloat32x2 minMaxLuminance; + FfxFloat32 fTanHalfFOV; + FfxInt32 _pad1; + + FfxFloat32x2 fJitter; + FfxFloat32x2 fMotionVectorScale; + } + + const FfxFloat32x2 Jitter() + { + return fJitter; + } + + const FfxFloat32x2 MotionVectorScale() + { + return fMotionVectorScale; + } + + const FfxInt32x2 InterpolationRectBase() + { + return interpolationRectBase; + } + + const FfxInt32x2 InterpolationRectSize() + { + return interpolationRectSize; + } + + const FfxInt32x2 RenderSize() + { + return renderSize; + } + + const FfxInt32x2 DisplaySize() + { + return displaySize; + } + + const FfxBoolean Reset() + { + return reset == 1; + } + + FfxFloat32x4 DeviceToViewSpaceTransformFactors() + { + return fDeviceToViewDepth; + } + + FfxInt32x2 GetOpticalFlowSize() + { + FfxInt32x2 iOpticalFlowSize = (1.0f / opticalFlowScale) / FfxFloat32x2(opticalFlowBlockSize.xx); + + return iOpticalFlowSize; + } + + FfxInt32x2 GetOpticalFlowSize2() + { + return GetOpticalFlowSize() * 1; + } + + FfxFloat32x2 GetOpticalFlowScale() + { + return opticalFlowScale; + } + + FfxInt32 GetOpticalFlowBlockSize() + { + return opticalFlowBlockSize; + } + + FfxInt32 GetHUDLessAttachedFactor() + { + return HUDLessAttachedFactor; + } + + FfxInt32x2 GetDistortionFieldSize() + { + return distortionFieldSize; + } + + FfxUInt32 GetDispatchFlags() + { + return dispatchFlags; + } + + FfxInt32x2 GetMaxRenderSize() + { + return maxRenderSize; + } + + FfxInt32 GetOpticalFlowHalfResMode() + { + return opticalFlowHalfResMode; + } + + FfxFloat32x3 GetDebugBarColor() + { + return debugBarColor; + } + + FfxFloat32 TanHalfFoV() + { + return fTanHalfFOV; + } + + FfxUInt32 BackBufferTransferFunction() + { + return backBufferTransferFunction; + } + + FfxFloat32 MinLuminance() + { + return minMaxLuminance[0]; + } + + FfxFloat32 MaxLuminance() + { + return minMaxLuminance[1]; + } + +#endif // #if defined(FFX_FRAMEINTERPOLATION_BIND_CB_FRAMEINTERPOLATION) + +#if defined(FFX_FRAMEINTERPOLATION_BIND_CB_INPAINTING_PYRAMID) + cbuffer cbInpaintingPyramid : FFX_DECLARE_CB(FFX_FRAMEINTERPOLATION_BIND_CB_INPAINTING_PYRAMID) + { + FfxUInt32 mips; + FfxUInt32 numWorkGroups; + FfxUInt32x2 workGroupOffset; + } + + FfxUInt32 NumMips() + { + return mips; + } + FfxUInt32 NumWorkGroups() + { + return numWorkGroups; + } + FfxUInt32x2 WorkGroupOffset() + { + return workGroupOffset; + } +#endif // #if defined(FFX_FRAMEINTERPOLATION_BIND_CB_INPAINTING_PYRAMID) + +#define FFX_FRAMEINTERPOLATION_ROOTSIG_STRINGIFY(p) FFX_FRAMEINTERPOLATION_ROOTSIG_STR(p) +#define FFX_FRAMEINTERPOLATION_ROOTSIG_STR(p) #p +#define FFX_FRAMEINTERPOLATION_ROOTSIG [RootSignature( "DescriptorTable(UAV(u0, numDescriptors = " FFX_FRAMEINTERPOLATION_ROOTSIG_STRINGIFY(FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_COUNT) ")), " \ + "DescriptorTable(SRV(t0, numDescriptors = " FFX_FRAMEINTERPOLATION_ROOTSIG_STRINGIFY(FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_COUNT) ")), " \ + "CBV(b0), " \ + "StaticSampler(s0, filter = FILTER_MIN_MAG_MIP_LINEAR, " \ + "addressU = TEXTURE_ADDRESS_CLAMP, " \ + "addressV = TEXTURE_ADDRESS_CLAMP, " \ + "addressW = TEXTURE_ADDRESS_CLAMP, " \ + "comparisonFunc = COMPARISON_NEVER, " \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK)" )] + +#define FFX_FRAMEINTERPOLATION_INPAINTING_ROOTSIG [RootSignature( "DescriptorTable(UAV(u0, numDescriptors = " FFX_FRAMEINTERPOLATION_ROOTSIG_STRINGIFY(FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_COUNT) ")), " \ + "DescriptorTable(SRV(t0, numDescriptors = " FFX_FRAMEINTERPOLATION_ROOTSIG_STRINGIFY(FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_COUNT) ")), " \ + "CBV(b0), " \ + "CBV(b1), " \ + "StaticSampler(s0, filter = FILTER_MIN_MAG_MIP_LINEAR, " \ + "addressU = TEXTURE_ADDRESS_CLAMP, " \ + "addressV = TEXTURE_ADDRESS_CLAMP, " \ + "addressW = TEXTURE_ADDRESS_CLAMP, " \ + "comparisonFunc = COMPARISON_NEVER, " \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK)" )] + +#if defined(FFX_FRAMEINTERPOLATION_EMBED_ROOTSIG) +#define FFX_FRAMEINTERPOLATION_EMBED_ROOTSIG_CONTENT FFX_FRAMEINTERPOLATION_ROOTSIG +#define FFX_FRAMEINTERPOLATION_EMBED_INPAINTING_ROOTSIG_CONTENT FFX_FRAMEINTERPOLATION_INPAINTING_ROOTSIG +#else +#define FFX_FRAMEINTERPOLATION_EMBED_ROOTSIG_CONTENT +#define FFX_FRAMEINTERPOLATION_EMBED_INPAINTING_ROOTSIG_CONTENT +#endif // #if FFX_FRAMEINTERPOLATION_EMBED_ROOTSIG + +/////////////////////////////////////////////// +// declare samplers +/////////////////////////////////////////////// + +SamplerState s_LinearClamp : register(s0); + +/////////////////////////////////////////////// +// declare SRVs and SRV accessors +/////////////////////////////////////////////// + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_PREVIOUS_INTERPOLATION_SOURCE + Texture2D r_previous_interpolation_source : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_PREVIOUS_INTERPOLATION_SOURCE); + + FfxFloat32x3 LoadPreviousBackbuffer(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return r_previous_interpolation_source[iPxPos].rgb; + } + FfxFloat32x3 SamplePreviousBackbuffer(FFX_PARAMETER_IN FfxFloat32x2 fUv) + { + return r_previous_interpolation_source.SampleLevel(s_LinearClamp, fUv, 0).xyz; + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_CURRENT_INTERPOLATION_SOURCE + Texture2D r_current_interpolation_source : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_CURRENT_INTERPOLATION_SOURCE); + + FfxFloat32x3 LoadCurrentBackbuffer(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return r_current_interpolation_source[iPxPos].rgb; + } + FfxFloat32x3 SampleCurrentBackbuffer(FFX_PARAMETER_IN FfxFloat32x2 fUv) + { + return r_current_interpolation_source.SampleLevel(s_LinearClamp, fUv, 0).xyz; + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_DILATED_MOTION_VECTORS + Texture2D r_dilated_motion_vectors : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_DILATED_MOTION_VECTORS); + + FfxFloat32x2 LoadDilatedMotionVector(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return r_dilated_motion_vectors[iPxPos].xy; + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_DILATED_DEPTH + Texture2D r_dilated_depth : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_DILATED_DEPTH); + + FfxFloat32 LoadDilatedDepth(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return r_dilated_depth[iPxPos].x; + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_RECONSTRUCTED_DEPTH_PREVIOUS_FRAME + Texture2D r_reconstructed_depth_previous_frame : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_RECONSTRUCTED_DEPTH_PREVIOUS_FRAME); + + FfxFloat32 LoadReconstructedDepthPreviousFrame(FFX_PARAMETER_IN FfxInt32x2 iPxInput) + { + return asfloat(r_reconstructed_depth_previous_frame[iPxInput]); + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_RECONSTRUCTED_DEPTH_INTERPOLATED_FRAME + Texture2D r_reconstructed_depth_interpolated_frame : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_RECONSTRUCTED_DEPTH_INTERPOLATED_FRAME); + + FfxFloat32 LoadEstimatedInterpolationFrameDepth(FFX_PARAMETER_IN FfxInt32x2 iPxInput) + { + return asfloat(r_reconstructed_depth_interpolated_frame[iPxInput]); + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_DISOCCLUSION_MASK + Texture2D r_disocclusion_mask : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_DISOCCLUSION_MASK); + + FfxFloat32x4 LoadDisocclusionMask(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return r_disocclusion_mask[iPxPos]; + } + FfxFloat32x4 SampleDisocclusionMask(FFX_PARAMETER_IN FfxFloat32x2 fUv) + { + return r_disocclusion_mask.SampleLevel(s_LinearClamp, fUv, 0); + } +#endif + +#if defined(FFX_FRAMEINTERPOLATION_BIND_SRV_GAME_MOTION_VECTOR_FIELD_X) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_SRV_GAME_MOTION_VECTOR_FIELD_Y) + Texture2D r_game_motion_vector_field_x : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_GAME_MOTION_VECTOR_FIELD_X); + Texture2D r_game_motion_vector_field_y : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_GAME_MOTION_VECTOR_FIELD_Y); + + FfxUInt32x2 LoadGameFieldMv(FFX_PARAMETER_IN FfxInt32x2 iPxSample) + { + FfxUInt32 packedX = r_game_motion_vector_field_x[iPxSample]; + FfxUInt32 packedY = r_game_motion_vector_field_y[iPxSample]; + + return FfxUInt32x2(packedX, packedY); + } +#endif + +#if defined(FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_X) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_Y) + Texture2D r_optical_flow_motion_vector_field_x : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_X); + Texture2D r_optical_flow_motion_vector_field_y : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_Y); + + FfxUInt32x2 LoadOpticalFlowFieldMv(FFX_PARAMETER_IN FfxInt32x2 iPxSample) + { + FfxUInt32 packedX = r_optical_flow_motion_vector_field_x[iPxSample]; + FfxUInt32 packedY = r_optical_flow_motion_vector_field_y[iPxSample]; + + return FfxUInt32x2(packedX, packedY); + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW + Texture2D r_optical_flow : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW); + + #if defined(FFX_FRAMEINTERPOLATION_BIND_CB_FRAMEINTERPOLATION) + FfxFloat32x2 LoadOpticalFlow(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return r_optical_flow[iPxPos] * GetOpticalFlowScale(); + } + #endif +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_UPSAMPLED + Texture2D r_optical_flow_upsampled : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_UPSAMPLED); + + FfxFloat32x2 LoadOpticalFlowUpsampled(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return r_optical_flow_upsampled[iPxPos]; + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_CONFIDENCE + Texture2D r_optical_flow_confidence : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_CONFIDENCE); + + FfxFloat32 LoadOpticalFlowConfidence(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return r_optical_flow_confidence[iPxPos].y; + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_GLOBAL_MOTION + Texture2D r_optical_flow_global_motion : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_GLOBAL_MOTION); + + FfxUInt32 LoadOpticalFlowGlobalMotion(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return r_optical_flow_global_motion[iPxPos]; + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_SCENE_CHANGE_DETECTION + Texture2D r_optical_flow_scd : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_SCENE_CHANGE_DETECTION); + + FfxUInt32 LoadOpticalFlowSceneChangeDetection(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return r_optical_flow_scd[iPxPos]; + } + + FfxBoolean HasSceneChanged() + { + #define SCD_OUTPUT_HISTORY_BITS_SLOT 1 + //if (FrameIndex() <= 5) // threshold according to original OpenCL code + //{ + // return 1.0; + //} + //else + { + // Report that the scene is changed if the change was detected in any of the + // 4 previous frames (0xfu - covers 4 history bits). + return (r_optical_flow_scd[FfxInt32x2(SCD_OUTPUT_HISTORY_BITS_SLOT, 0)] & 0xfu) != 0; + } + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_DEBUG + Texture2D r_optical_flow_debug : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_DEBUG); + + FfxFloat32x4 LoadOpticalFlowDebug(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return r_optical_flow_debug[iPxPos]; + } +#endif + +#if defined(FFX_FRAMEINTERPOLATION_BIND_SRV_INPAINTING_MASK) && defined(FFX_FRAMEINTERPOLATION_BIND_SRV_OUTPUT) + Texture2D r_output : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_OUTPUT); + Texture2D r_inpainting_mask : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_INPAINTING_MASK); + + FfxFloat32x4 LoadFrameInterpolationOutput(FFX_PARAMETER_IN FfxInt32x2 iPxInput) + { + return FfxFloat32x4(r_output[iPxInput], r_inpainting_mask[iPxInput]); + } +#elif defined(FFX_FRAMEINTERPOLATION_BIND_SRV_OUTPUT) + Texture2D r_output : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_OUTPUT); + FfxFloat32x4 LoadFrameInterpolationOutput(FFX_PARAMETER_IN FfxInt32x2 iPxInput) + { + return r_output[iPxInput]; + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_INPAINTING_PYRAMID + Texture2D r_inpainting_pyramid : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_INPAINTING_PYRAMID); + + FfxFloat32x4 LoadInpaintingPyramid(FFX_PARAMETER_IN FfxInt32 mipLevel, FFX_PARAMETER_IN FfxUInt32x2 iPxInput) + { + return r_inpainting_pyramid.mips[mipLevel][iPxInput]; + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_PRESENT_BACKBUFFER + Texture2D r_present_backbuffer : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_PRESENT_BACKBUFFER); + + FfxFloat32x4 LoadPresentBackbuffer(FFX_PARAMETER_IN FfxInt32x2 iPxInput) + { + return r_present_backbuffer[iPxInput]; + } + FfxFloat32x4 SamplePresentBackbuffer(FFX_PARAMETER_IN FfxFloat32x2 fUv) + { + return r_present_backbuffer.SampleLevel(s_LinearClamp, fUv, 0); + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_SRV_COUNTERS + StructuredBuffer r_counters : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_COUNTERS); + + FfxUInt32 LoadCounter(FFX_PARAMETER_IN FfxInt32 iPxPos) + { + return r_counters[iPxPos]; + } + + const FfxUInt32 FrameIndexSinceLastReset() + { + return LoadCounter(COUNTER_FRAME_INDEX_SINCE_LAST_RESET); + } +#endif + +#if defined(FFX_FRAMEINTERPOLATION_BIND_SRV_INPUT_DEPTH) +Texture2D r_input_depth : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_INPUT_DEPTH); +FfxFloat32 LoadInputDepth(FfxInt32x2 iPxPos) +{ + return r_input_depth[iPxPos]; +} +#endif + +#if defined(FFX_FRAMEINTERPOLATION_BIND_SRV_INPUT_MOTION_VECTORS) +Texture2D r_input_motion_vectors : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_INPUT_MOTION_VECTORS); +FfxFloat32x2 LoadInputMotionVector(FfxInt32x2 iPxDilatedMotionVectorPos) +{ + FfxFloat32x2 fSrcMotionVector = r_input_motion_vectors[iPxDilatedMotionVectorPos].xy; + + FfxFloat32x2 fUvMotionVector = fSrcMotionVector * MotionVectorScale(); + +#if FFX_FRAMEINTERPOLATION_OPTION_JITTERED_MOTION_VECTORS + fUvMotionVector -= MotionVectorJitterCancellation(); +#endif + + return fUvMotionVector; +} +#endif + +#if defined(FFX_FRAMEINTERPOLATION_BIND_SRV_DISTORTION_FIELD) + Texture2D r_input_distortion_field : FFX_DECLARE_SRV(FFX_FRAMEINTERPOLATION_BIND_SRV_DISTORTION_FIELD); + FfxFloat32x2 SampleDistortionField(FFX_PARAMETER_IN FfxFloat32x2 fUv) + { + return r_input_distortion_field.SampleLevel(s_LinearClamp, fUv, 0); + } +#endif + +/////////////////////////////////////////////// +// declare UAVs and UAV accessors +/////////////////////////////////////////////// +#if defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_MASK) && defined(FFX_FRAMEINTERPOLATION_BIND_UAV_OUTPUT) + RWTexture2D rw_output : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_OUTPUT); + RWTexture2D rw_inpainting_mask : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_MASK); + + FfxFloat32x4 RWLoadFrameinterpolationOutput(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return FfxFloat32x4(rw_output[iPxPos], rw_inpainting_mask[iPxPos]); + } + + void StoreFrameinterpolationOutput(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x4 val) + { + rw_output[iPxPos] = val.rgb; + rw_inpainting_mask[iPxPos] = val.a; + } + +#elif defined(FFX_FRAMEINTERPOLATION_BIND_UAV_OUTPUT) + RWTexture2D rw_output : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_OUTPUT); + + FfxFloat32x4 RWLoadFrameinterpolationOutput(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return rw_output[iPxPos]; + } + + void StoreFrameinterpolationOutput(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x4 val) + { + rw_output[iPxPos] = val; + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_UAV_DILATED_MOTION_VECTORS + RWTexture2D rw_dilated_motion_vectors : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_DILATED_MOTION_VECTORS); + + FfxFloat32x2 RWLoadDilatedMotionVectors(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return rw_dilated_motion_vectors[iPxPos]; + } + + void StoreDilatedMotionVectors(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x2 val) + { + rw_dilated_motion_vectors[iPxPos] = val; + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_UAV_DILATED_DEPTH + RWTexture2D rw_dilated_depth : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_DILATED_DEPTH); + + FfxFloat32 RWLoadDilatedDepth(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return rw_dilated_depth[iPxPos]; + } + + void StoreDilatedDepth(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32 val) + { + rw_dilated_depth[iPxPos] = val; + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_UAV_RECONSTRUCTED_DEPTH_PREVIOUS_FRAME + RWTexture2D rw_reconstructed_depth_previous_frame : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_RECONSTRUCTED_DEPTH_PREVIOUS_FRAME); + + FfxFloat32 RWLoadReconstructedDepthPreviousFrame(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return ffxAsFloat(rw_reconstructed_depth_previous_frame[iPxPos]); + } + + void UpdateReconstructedDepthPreviousFrame(FfxInt32x2 iPxSample, FfxFloat32 fDepth) + { + FfxUInt32 uDepth = ffxAsUInt32(fDepth); + +#if FFX_FRAMEINTERPOLATION_OPTION_INVERTED_DEPTH + InterlockedMax(rw_reconstructed_depth_previous_frame[iPxSample], uDepth); +#else + InterlockedMin(rw_reconstructed_depth_previous_frame[iPxSample], uDepth); // min for standard, max for inverted depth +#endif + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_UAV_RECONSTRUCTED_DEPTH_INTERPOLATED_FRAME + RWTexture2D rw_reconstructed_depth_interpolated_frame : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_RECONSTRUCTED_DEPTH_INTERPOLATED_FRAME); + + FfxFloat32 RWLoadReconstructedDepthInterpolatedFrame(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return ffxAsFloat(rw_reconstructed_depth_interpolated_frame[iPxPos]); + } + + void StoreReconstructedDepthInterpolatedFrame(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32 value) + { + FfxUInt32 uDepth = ffxAsUInt32(value); + rw_reconstructed_depth_interpolated_frame[iPxPos] = uDepth; + } + + void UpdateReconstructedDepthInterpolatedFrame(FfxInt32x2 iPxSample, FfxFloat32 fDepth) + { + FfxUInt32 uDepth = ffxAsUInt32(fDepth); + +#if FFX_FRAMEINTERPOLATION_OPTION_INVERTED_DEPTH + InterlockedMax(rw_reconstructed_depth_interpolated_frame[iPxSample], uDepth); +#else + InterlockedMin(rw_reconstructed_depth_interpolated_frame[iPxSample], uDepth); // min for standard, max for inverted depth +#endif + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_UAV_DISOCCLUSION_MASK + RWTexture2D rw_disocclusion_mask : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_DISOCCLUSION_MASK); + + FfxFloat32x2 RWLoadDisocclusionMask(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return rw_disocclusion_mask[iPxPos]; + } + + void StoreDisocclusionMask(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x2 val) + { + rw_disocclusion_mask[iPxPos] = val; + } +#endif + +#if defined(FFX_FRAMEINTERPOLATION_BIND_UAV_GAME_MOTION_VECTOR_FIELD_X) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_GAME_MOTION_VECTOR_FIELD_Y) + + RWTexture2D rw_game_motion_vector_field_x : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_GAME_MOTION_VECTOR_FIELD_X); + RWTexture2D rw_game_motion_vector_field_y : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_GAME_MOTION_VECTOR_FIELD_Y); + + FfxUInt32 RWLoadGameMotionVectorFieldX(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return rw_game_motion_vector_field_x[iPxPos]; + } + + void StoreGameMotionVectorFieldX(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxUInt32 val) + { + rw_game_motion_vector_field_x[iPxPos] = val; + } + + FfxUInt32 RWLoadGameMotionVectorFieldY(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return rw_game_motion_vector_field_y[iPxPos]; + } + + void StoreGameMotionVectorFieldY(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxUInt32 val) + { + rw_game_motion_vector_field_y[iPxPos] = val; + } + + void UpdateGameMotionVectorField(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxUInt32x2 packedVector) + { + InterlockedMax(rw_game_motion_vector_field_x[iPxPos], packedVector.x); + InterlockedMax(rw_game_motion_vector_field_y[iPxPos], packedVector.y); + } + + FfxUInt32 UpdateGameMotionVectorFieldEx(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxUInt32x2 packedVector) + { + FfxUInt32 uPreviousValueX = 0; + FfxUInt32 uPreviousValueY = 0; + InterlockedMax(rw_game_motion_vector_field_x[iPxPos], packedVector.x, uPreviousValueX); + InterlockedMax(rw_game_motion_vector_field_y[iPxPos], packedVector.y, uPreviousValueY); + + const FfxUInt32 uExistingVectorFieldEntry = ffxMax(uPreviousValueX, uPreviousValueY); + + return uExistingVectorFieldEntry; + } +#endif + +#if defined(FFX_FRAMEINTERPOLATION_BIND_UAV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_X) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_Y) + + RWTexture2D rw_optical_flow_motion_vector_field_x : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_X); + RWTexture2D rw_optical_flow_motion_vector_field_y : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_Y); + + FfxUInt32 RWLoadOpticalflowMotionVectorFieldX(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return rw_optical_flow_motion_vector_field_x[iPxPos]; + } + void StoreOpticalflowMotionVectorFieldX(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxUInt32 val) + { + rw_optical_flow_motion_vector_field_x[iPxPos] = val; + } + FfxUInt32 RWLoadOpticalflowMotionVectorFieldY(FFX_PARAMETER_IN FfxInt32x2 iPxPos) + { + return rw_optical_flow_motion_vector_field_y[iPxPos]; + } + void StoreOpticalflowMotionVectorFieldY(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxUInt32 val) + { + rw_optical_flow_motion_vector_field_y[iPxPos] = val; + } + void UpdateOpticalflowMotionVectorField(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxUInt32x2 packedVector) + { + InterlockedMax(rw_optical_flow_motion_vector_field_x[iPxPos], packedVector.x); + InterlockedMax(rw_optical_flow_motion_vector_field_y[iPxPos], packedVector.y); + } +#endif + +#ifdef FFX_FRAMEINTERPOLATION_BIND_UAV_COUNTERS + globallycoherent RWStructuredBuffer rw_counters : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_COUNTERS); + + FfxUInt32 RWLoadCounter(FFX_PARAMETER_IN FfxInt32 iPxPos) + { + return rw_counters[iPxPos]; + } + + void StoreCounter(FFX_PARAMETER_IN FfxInt32 iPxPos, FFX_PARAMETER_IN FfxUInt32 counter) + { + rw_counters[iPxPos] = counter; + } + void AtomicIncreaseCounter(FFX_PARAMETER_IN FfxInt32 iPxPos, FFX_PARAMETER_OUT FfxUInt32 oldVal) + { + InterlockedAdd(rw_counters[iPxPos], 1, oldVal); + } +#endif + + +#if defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_0) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_1) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_2) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_3) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_4) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_5) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_6) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_7) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_8) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_9) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_10) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_11) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_12) + + RWTexture2D rw_inpainting_pyramid0 : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_0); + RWTexture2D rw_inpainting_pyramid1 : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_1); + RWTexture2D rw_inpainting_pyramid2 : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_2); + RWTexture2D rw_inpainting_pyramid3 : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_3); + RWTexture2D rw_inpainting_pyramid4 : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_4); + globallycoherent RWTexture2D rw_inpainting_pyramid5 : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_5); + RWTexture2D rw_inpainting_pyramid6 : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_6); + RWTexture2D rw_inpainting_pyramid7 : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_7); + RWTexture2D rw_inpainting_pyramid8 : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_8); + RWTexture2D rw_inpainting_pyramid9 : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_9); + RWTexture2D rw_inpainting_pyramid10 : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_10); + RWTexture2D rw_inpainting_pyramid11 : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_11); + RWTexture2D rw_inpainting_pyramid12 : FFX_DECLARE_UAV(FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_12); + + + FfxFloat32x4 RWLoadInpaintingPyramid(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxUInt32 index) + { + #define LOAD(idx) \ + if (index == idx) \ + { \ + return rw_inpainting_pyramid##idx[iPxPos]; \ + } + LOAD(0); + LOAD(1); + LOAD(2); + LOAD(3); + LOAD(4); + LOAD(5); + LOAD(6); + LOAD(7); + LOAD(8); + LOAD(9); + LOAD(10); + LOAD(11); + LOAD(12); + return 0; + + #undef LOAD + } + + void StoreInpaintingPyramid(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxFloat32x4 outValue, FFX_PARAMETER_IN FfxUInt32 index) + { + #define STORE(idx) \ + if (index == idx) \ + { \ + rw_inpainting_pyramid##idx[iPxPos] = outValue; \ + } + + STORE(0); + STORE(1); + STORE(2); + STORE(3); + STORE(4); + STORE(5); + STORE(6); + STORE(7); + STORE(8); + STORE(9); + STORE(10); + STORE(11); + STORE(12); + + #undef STORE + } +#endif + +#endif // #if defined(FFX_GPU) diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_common.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_common.h new file mode 100644 index 000000000..8206bf43b --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_common.h @@ -0,0 +1,445 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if !defined(FFX_FRAMEINTERPOLATION_COMMON_H) +#define FFX_FRAMEINTERPOLATION_COMMON_H + +#define FFX_FRAMEINTERPOLATION_DISPATCH_DRAW_DEBUG_TEAR_LINES (1 << 0) +#define FFX_FRAMEINTERPOLATION_DISPATCH_DRAW_DEBUG_RESET_INDICATORS (1 << 1) +#define FFX_FRAMEINTERPOLATION_DISPATCH_DRAW_DEBUG_VIEW (1 << 2) + +FFX_STATIC const FfxFloat32 FFX_FRAMEINTERPOLATION_EPSILON = 1e-03f; +FFX_STATIC const FfxFloat32 FFX_FRAMEINTERPOLATION_FLT_MAX = 3.402823466e+38f; +FFX_STATIC const FfxFloat32 FFX_FRAMEINTERPOLATION_FLT_MIN = 1.175494351e-38f; + +FFX_STATIC const FfxFloat32 fReconstructedDepthBilinearWeightThreshold = FFX_FRAMEINTERPOLATION_EPSILON; + +FfxFloat32 RGBToLuma(FfxFloat32x3 fLinearRgb) +{ + return dot(fLinearRgb, FfxFloat32x3(0.2126f, 0.7152f, 0.0722f)); +} + +FfxFloat32 LinearRec2020ToLuminance(FfxFloat32x3 linearRec2020RGB) +{ + FfxFloat32 fY = 0.2627 * linearRec2020RGB.x + 0.678 * linearRec2020RGB.y + 0.0593 * linearRec2020RGB.z; + return fY; +} + +FfxFloat32x3 ffxscRGBToLinear(FfxFloat32x3 value, FfxFloat32 minLuminance, FfxFloat32 maxLuminance) +{ + FfxFloat32x3 p = value - ffxBroadcast3(minLuminance / 80.0f); + return p / ffxBroadcast3((maxLuminance - minLuminance) / 80.0f); +} + +FfxFloat32x3 RawRGBToLinear(FfxFloat32x3 fRawRgb) +{ + FfxFloat32x3 fLinearRgb; + + switch (BackBufferTransferFunction()) + { + case 0: + fLinearRgb = ffxLinearFromSrgb(fRawRgb); + break; + case 1: + fLinearRgb = ffxLinearFromPQ(fRawRgb) * (10000.0f / MaxLuminance()); + break; + case 2: + fLinearRgb = ffxscRGBToLinear(fRawRgb, MinLuminance(), MaxLuminance()); + break; + } + + return fLinearRgb; +} + +FfxFloat32 RawRGBToLuminance(FfxFloat32x3 fRawRgb) +{ + FfxFloat32 fLuminance = 0.0f; + + switch (BackBufferTransferFunction()) + { + case 0: + fLuminance = RGBToLuma(RawRGBToLinear(fRawRgb)); + break; + case 1: + fLuminance = LinearRec2020ToLuminance(RawRGBToLinear(fRawRgb)); + break; + case 2: + fLuminance = RGBToLuma(RawRGBToLinear(fRawRgb)); + break; + } + + return fLuminance; +} + +FfxFloat32 RawRGBToPerceivedLuma(FfxFloat32x3 fRawRgb) +{ + FfxFloat32 fLuminance = RawRGBToLuminance(fRawRgb); + + FfxFloat32 fPercievedLuminance = 0; + if (fLuminance <= 216.0f / 24389.0f) + { + fPercievedLuminance = fLuminance * (24389.0f / 27.0f); + } + else + { + fPercievedLuminance = ffxPow(fLuminance, 1.0f / 3.0f) * 116.0f - 16.0f; + } + + return fPercievedLuminance * 0.01f; +} + +struct BilinearSamplingData +{ + FfxInt32x2 iOffsets[4]; + FfxFloat32 fWeights[4]; + FfxInt32x2 iBasePos; +}; + +BilinearSamplingData GetBilinearSamplingData(FfxFloat32x2 fUv, FfxInt32x2 iSize) +{ + BilinearSamplingData data; + + FfxFloat32x2 fPxSample = (fUv * iSize) - FfxFloat32x2(0.5f, 0.5f); + data.iBasePos = FfxInt32x2(floor(fPxSample)); + FfxFloat32x2 fPxFrac = ffxFract(fPxSample); + + data.iOffsets[0] = FfxInt32x2(0, 0); + data.iOffsets[1] = FfxInt32x2(1, 0); + data.iOffsets[2] = FfxInt32x2(0, 1); + data.iOffsets[3] = FfxInt32x2(1, 1); + + data.fWeights[0] = (1 - fPxFrac.x) * (1 - fPxFrac.y); + data.fWeights[1] = (fPxFrac.x) * (1 - fPxFrac.y); + data.fWeights[2] = (1 - fPxFrac.x) * (fPxFrac.y); + data.fWeights[3] = (fPxFrac.x) * (fPxFrac.y); + + return data; +} + +#if defined(FFX_FRAMEINTERPOLATION_BIND_CB_FRAMEINTERPOLATION) +FfxFloat32 ConvertFromDeviceDepthToViewSpace(FfxFloat32 fDeviceDepth) +{ + const FfxFloat32x4 deviceToViewDepth = DeviceToViewSpaceTransformFactors(); + return deviceToViewDepth[1] / (fDeviceDepth - deviceToViewDepth[0]); +} + +FfxFloat32x2 ComputeNdc(FfxFloat32x2 fPxPos, FfxInt32x2 iSize) +{ + return fPxPos / FfxFloat32x2(iSize) * FfxFloat32x2(2.0f, -2.0f) + FfxFloat32x2(-1.0f, 1.0f); +} + +FfxFloat32x3 GetViewSpacePosition(FfxInt32x2 iViewportPos, FfxInt32x2 iViewportSize, FfxFloat32 fDeviceDepth) +{ + const FfxFloat32x4 fDeviceToViewDepth = DeviceToViewSpaceTransformFactors(); + + const FfxFloat32 Z = ConvertFromDeviceDepthToViewSpace(fDeviceDepth); + + const FfxFloat32x2 fNdcPos = ComputeNdc(iViewportPos, iViewportSize); + const FfxFloat32 X = fDeviceToViewDepth[2] * fNdcPos.x * Z; + const FfxFloat32 Y = fDeviceToViewDepth[3] * fNdcPos.y * Z; + + return FfxFloat32x3(X, Y, Z); +} +#endif + +FfxBoolean IsOnScreen(FfxInt32x2 pos, FfxInt32x2 size) +{ + return all(FFX_LESS_THAN(FfxUInt32x2(pos), FfxUInt32x2(size))); +} + +FfxBoolean IsUvInside(FfxFloat32x2 fUv) +{ + return (fUv.x > 0.0f && fUv.x < 1.0f) && (fUv.y > 0.0f && fUv.y < 1.0f); +} + +FfxBoolean IsInRect(FfxInt32x2 pos, FfxInt32x2 iRectCorner, FfxInt32x2 iRectSize) +{ + return (pos.x >= iRectCorner.x && pos.x < (iRectSize.x + iRectCorner.x) && pos.y >= iRectCorner.y && pos.y < (iRectSize.y + iRectCorner.y)); +} + +FfxFloat32 MinDividedByMax(const FfxFloat32 v0, const FfxFloat32 v1) +{ + const FfxFloat32 m = ffxMax(v0, v1); + return m != 0 ? ffxMin(v0, v1) / m : 0; +} + +FfxFloat32 NormalizedDot3(const FfxFloat32x3 v0, const FfxFloat32x3 v1) +{ + FfxFloat32 fMaxLength = ffxMax(length(v0), length(v1)); + + return fMaxLength > 0.0f ? dot(v0 / fMaxLength, v1 / fMaxLength) : 1.0f; +} + +FfxFloat32 NormalizedDot2(const FfxFloat32x2 v0, const FfxFloat32x2 v1) +{ + FfxFloat32 fMaxLength = ffxMax(length(v0), length(v1)); + + return fMaxLength > 0.0f ? dot(v0 / fMaxLength, v1 / fMaxLength) : 1.0f; +} + +FfxFloat32 CalculateStaticContentFactor(FfxFloat32x3 fCurrentInterpolationSource, FfxFloat32x3 fPresentColor) +{ + const FfxFloat32x3 fFactor = ffxSaturate(FfxFloat32x3( + ffxSaturate((1.0f - MinDividedByMax(fCurrentInterpolationSource.r, fPresentColor.r)) / 0.1f), + ffxSaturate((1.0f - MinDividedByMax(fCurrentInterpolationSource.g, fPresentColor.g)) / 0.1f), + ffxSaturate((1.0f - MinDividedByMax(fCurrentInterpolationSource.b, fPresentColor.b)) / 0.1f) + )); + + return max(fFactor.x, max(fFactor.y, fFactor.z)); +} + +// +// MOTION VECTOR FIELD +// + +FFX_STATIC const FfxUInt32 MOTION_VECTOR_FIELD_ENTRY_BIT_COUNT = 32; + +// Make sure all bit counts add up to MOTION_VECTOR_FIELD_ENTRY_BIT_COUNT +FFX_STATIC const FfxUInt32 MOTION_VECTOR_FIELD_VECTOR_COEFFICIENT_BIT_COUNT = 16; +FFX_STATIC const FfxUInt32 MOTION_VECTOR_FIELD_PRIORITY_LOW_BIT_COUNT = 5; +FFX_STATIC const FfxUInt32 MOTION_VECTOR_FIELD_PRIORITY_HIGH_BIT_COUNT = 10; +FFX_STATIC const FfxUInt32 MOTION_VECTOR_PRIMARY_VECTOR_INDICATION_BIT_COUNT = 1; + +FFX_STATIC const FfxUInt32 MOTION_VECTOR_FIELD_PRIMARY_VECTOR_INDICATION_BIT = (1U << (MOTION_VECTOR_FIELD_ENTRY_BIT_COUNT - 1)); + +FFX_STATIC const FfxUInt32 PRIORITY_LOW_MAX = (1U << MOTION_VECTOR_FIELD_PRIORITY_LOW_BIT_COUNT) - 1; +FFX_STATIC const FfxUInt32 PRIORITY_HIGH_MAX = (1U << MOTION_VECTOR_FIELD_PRIORITY_HIGH_BIT_COUNT) - 1; + +FFX_STATIC const FfxUInt32 PRIORITY_LOW_OFFSET = MOTION_VECTOR_FIELD_VECTOR_COEFFICIENT_BIT_COUNT; +FFX_STATIC const FfxUInt32 PRIORITY_HIGH_OFFSET = PRIORITY_LOW_OFFSET + MOTION_VECTOR_FIELD_PRIORITY_LOW_BIT_COUNT; +FFX_STATIC const FfxUInt32 PRIMARY_VECTOR_INDICATION_OFFSET = PRIORITY_HIGH_OFFSET + MOTION_VECTOR_FIELD_PRIORITY_HIGH_BIT_COUNT; + +struct VectorFieldEntry +{ + FfxFloat32x2 fMotionVector; + FfxFloat32 uHighPriorityFactor; + FfxFloat32 uLowPriorityFactor; + FfxBoolean bValid; + FfxBoolean bPrimary; + FfxBoolean bSecondary; + FfxBoolean bInPainted; + FfxFloat32 fVelocity; + FfxBoolean bNegOutside; + FfxBoolean bPosOutside; +}; + +VectorFieldEntry NewVectorFieldEntry() +{ + VectorFieldEntry vfe; + vfe.fMotionVector = FfxFloat32x2(0.0, 0.0); + vfe.uHighPriorityFactor = 0.0; + vfe.uLowPriorityFactor = 0.0; + vfe.bValid = false; + vfe.bPrimary = false; + vfe.bSecondary = false; + vfe.bInPainted = false; + vfe.fVelocity = 0.0; + vfe.bNegOutside = false; + vfe.bPosOutside = false; + return vfe; +} + +FfxBoolean PackedVectorFieldEntryIsPrimary(FfxUInt32 packedEntry) +{ + return ((packedEntry & MOTION_VECTOR_FIELD_PRIMARY_VECTOR_INDICATION_BIT) != 0); +} + +FfxUInt32x2 PackVectorFieldEntries(FfxBoolean bIsPrimary, FfxUInt32 uHighPriorityFactor, FfxUInt32 uLowPriorityFactor, FfxFloat32x2 fMotionVector) +{ + const FfxUInt32 uPriority = + (FfxUInt32(bIsPrimary) * MOTION_VECTOR_FIELD_PRIMARY_VECTOR_INDICATION_BIT) + | ((uHighPriorityFactor & PRIORITY_HIGH_MAX) << PRIORITY_HIGH_OFFSET) + | ((uLowPriorityFactor & PRIORITY_LOW_MAX) << PRIORITY_LOW_OFFSET); + + FfxUInt32 packedX = uPriority | ffxF32ToF16(fMotionVector.x); + FfxUInt32 packedY = uPriority | ffxF32ToF16(fMotionVector.y); + + return FfxUInt32x2(packedX, packedY); +} + +void UnpackVectorFieldEntries(FfxUInt32x2 packed, out VectorFieldEntry vfElement) +{ + vfElement.uHighPriorityFactor = FfxFloat32((packed.x >> PRIORITY_HIGH_OFFSET) & PRIORITY_HIGH_MAX) / PRIORITY_HIGH_MAX; + vfElement.uLowPriorityFactor = FfxFloat32((packed.x >> PRIORITY_LOW_OFFSET) & PRIORITY_LOW_MAX) / PRIORITY_LOW_MAX; + + vfElement.bPrimary = PackedVectorFieldEntryIsPrimary(packed.x); + vfElement.bValid = (vfElement.uHighPriorityFactor > 0.0f); + vfElement.bSecondary = vfElement.bValid && !vfElement.bPrimary; + + // Reverse priority factor for secondary vectors + if (vfElement.bSecondary) + { + vfElement.uHighPriorityFactor = 1.0f - vfElement.uHighPriorityFactor; + } + + vfElement.fMotionVector.x = ffxUnpackF32(packed.x).x; + vfElement.fMotionVector.y = ffxUnpackF32(packed.y).x; + vfElement.bInPainted = false; +} + +// +// MOTION VECTOR FIELD +// + +#if defined(FFX_FRAMEINTERPOLATION_BIND_SRV_INPAINTING_PYRAMID) +FfxFloat32x4 ComputeMvInpaintingLevel(FfxFloat32x2 fUv, const FfxInt32 iMipLevel, const FfxInt32x2 iTexSize) +{ + BilinearSamplingData bilinearInfo = GetBilinearSamplingData(fUv, iTexSize); + + FfxFloat32 fSum = 0.0f; + FfxFloat32x4 fColor = FfxFloat32x4(0.0, 0.0, 0.0, 0.0); + fColor.z = 0; + + const FfxFloat32 fMaxPriorityFactor = 1.0f; + + for (FfxInt32 iSampleIndex = 0; iSampleIndex < 4; iSampleIndex++) + { + const FfxInt32x2 iOffset = bilinearInfo.iOffsets[iSampleIndex]; + const FfxInt32x2 iSamplePos = bilinearInfo.iBasePos + iOffset; + + if (IsOnScreen(iSamplePos, iTexSize)) + { + FfxFloat32x4 fSample = LoadInpaintingPyramid(iMipLevel, iSamplePos); + + const FfxFloat32 fPriorityFactor = fSample.z; + const FfxFloat32 fValidMvFactor = FfxFloat32(fSample.z > 0); + const FfxFloat32 fSampleWeight = bilinearInfo.fWeights[iSampleIndex] * fValidMvFactor * fPriorityFactor; + + fSum += fSampleWeight; + fColor += fSample * fSampleWeight; + } + } + + fColor /= (fSum > 0.0f) ? fSum : 1.0f; + + return fColor; +} +#if defined(FFX_FRAMEINTERPOLATION_BIND_CB_FRAMEINTERPOLATION) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_SRV_GAME_MOTION_VECTOR_FIELD_X) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_SRV_GAME_MOTION_VECTOR_FIELD_Y) + +void LoadInpaintedGameFieldMv(FfxFloat32x2 fUv, out VectorFieldEntry vfElement) +{ + FfxInt32x2 iPxSample = FfxInt32x2(fUv * RenderSize()); + FfxUInt32x2 packedGameFieldMv = LoadGameFieldMv(iPxSample); + UnpackVectorFieldEntries(packedGameFieldMv, vfElement); + + if (!vfElement.bValid) + { + //FfxFloat32x2 fUv = (FfxFloat32x2(iPxSample) + 0.5f) / RenderSize(); + FfxInt32x2 iTexSize = RenderSize(); + + FfxFloat32x4 fInPaintedVector = FfxFloat32x4(0.0, 0.0, 0.0, 0.0); + for (FfxInt32 iMipLevel = 0; iMipLevel < 11 && (fInPaintedVector.w == 0.0f); iMipLevel++) + { + iTexSize /= 2; + + fInPaintedVector = ComputeMvInpaintingLevel(fUv, iMipLevel, iTexSize); + } + + vfElement.fMotionVector = fInPaintedVector.xy; + vfElement.uHighPriorityFactor = fInPaintedVector.z; + vfElement.uLowPriorityFactor = fInPaintedVector.w; + vfElement.bInPainted = true; + } + + vfElement.bNegOutside = !IsUvInside(fUv - vfElement.fMotionVector); + vfElement.bPosOutside = !IsUvInside(fUv + vfElement.fMotionVector); + vfElement.fVelocity = length(vfElement.fMotionVector); +} +#endif +#endif + +#if defined(FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_X) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_Y) && \ + defined(FFX_FRAMEINTERPOLATION_BIND_CB_FRAMEINTERPOLATION) +void SampleOpticalFlowMotionVectorField(FfxFloat32x2 fUv, out VectorFieldEntry vfElement) +{ + const FfxFloat32 scaleFactor = 1.0f; + + BilinearSamplingData bilinearInfo = GetBilinearSamplingData(fUv, FfxInt32x2(GetOpticalFlowSize2() * scaleFactor)); + + vfElement = NewVectorFieldEntry(); + + FfxFloat32 fWeightSum = 0.0f; + for (FfxInt32 iSampleIndex = 0; iSampleIndex < 4; iSampleIndex++) + { + const FfxInt32x2 iOffset = bilinearInfo.iOffsets[iSampleIndex]; + const FfxInt32x2 iSamplePos = bilinearInfo.iBasePos + iOffset; + + if (IsOnScreen(iSamplePos, FfxInt32x2(GetOpticalFlowSize2() * scaleFactor))) + { + const FfxFloat32 fWeight = bilinearInfo.fWeights[iSampleIndex]; + + VectorFieldEntry fOfVectorSample = NewVectorFieldEntry(); + FfxInt32x2 packedOpticalFlowMv = FfxInt32x2(LoadOpticalFlowFieldMv(iSamplePos)); + UnpackVectorFieldEntries(packedOpticalFlowMv, fOfVectorSample); + + vfElement.fMotionVector += fOfVectorSample.fMotionVector * fWeight; + vfElement.uHighPriorityFactor += fOfVectorSample.uHighPriorityFactor * fWeight; + vfElement.uLowPriorityFactor += fOfVectorSample.uLowPriorityFactor * fWeight; + + fWeightSum += fWeight; + } + } + + if (fWeightSum > 0.0f) + { + vfElement.fMotionVector /= fWeightSum; + vfElement.uHighPriorityFactor /= fWeightSum; + vfElement.uLowPriorityFactor /= fWeightSum; + } + + vfElement.bNegOutside = !IsUvInside(fUv - vfElement.fMotionVector); + vfElement.bPosOutside = !IsUvInside(fUv + vfElement.fMotionVector); + vfElement.fVelocity = length(vfElement.fMotionVector); +} +#endif + +FfxFloat32x3 Tonemap(FfxFloat32x3 fRgb) +{ + return fRgb / (ffxMax(ffxMax(0.f, fRgb.r), ffxMax(fRgb.g, fRgb.b)) + 1.f).xxx; +} + +FfxFloat32x3 InverseTonemap(FfxFloat32x3 fRgb) +{ + return fRgb / ffxMax(FFX_TONEMAP_EPSILON, 1.f - ffxMax(fRgb.r, ffxMax(fRgb.g, fRgb.b))).xxx; +} + +FfxInt32x2 ComputeHrPosFromLrPos(FfxInt32x2 iPxLrPos) +{ + FfxFloat32x2 fSrcJitteredPos = FfxFloat32x2(iPxLrPos) + 0.5f - Jitter(); + FfxFloat32x2 fLrPosInHr = (fSrcJitteredPos / RenderSize()) * DisplaySize(); + FfxInt32x2 iPxHrPos = FfxInt32x2(floor(fLrPosInHr)); + return iPxHrPos; +} +#if FFX_HALF +FFX_MIN16_I2 ComputeHrPosFromLrPos(FFX_MIN16_I2 iPxLrPos) +{ + FFX_MIN16_F2 fSrcJitteredPos = FFX_MIN16_F2(iPxLrPos) + FFX_MIN16_F(0.5f) - FFX_MIN16_F2(Jitter()); + FFX_MIN16_F2 fLrPosInHr = (fSrcJitteredPos / FFX_MIN16_F2(RenderSize())) * FFX_MIN16_F2(DisplaySize()); + FFX_MIN16_I2 iPxHrPos = FFX_MIN16_I2(floor(fLrPosInHr)); + return iPxHrPos; +} +#endif + +#endif //!defined(FFX_FRAMEINTERPOLATION_COMMON_H) diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_compute_game_vector_field_inpainting_pyramid.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_compute_game_vector_field_inpainting_pyramid.h new file mode 100644 index 000000000..75b3e1e2c --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_compute_game_vector_field_inpainting_pyramid.h @@ -0,0 +1,121 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_FRAMEINTERPOLATION_COMPUTE_GAME_VECTOR_FIELD_INPAINTING_PYRAMID_H +#define FFX_FRAMEINTERPOLATION_COMPUTE_GAME_VECTOR_FIELD_INPAINTING_PYRAMID_H + +#include "ffx_frameinterpolation_common.h" +//-------------------------------------------------------------------------------------- +// Buffer definitions - global atomic counter +//-------------------------------------------------------------------------------------- + +FFX_GROUPSHARED FfxUInt32 spdCounter; +FFX_GROUPSHARED FfxFloat32 spdIntermediateR[16][16]; +FFX_GROUPSHARED FfxFloat32 spdIntermediateG[16][16]; +FFX_GROUPSHARED FfxFloat32 spdIntermediateB[16][16]; +FFX_GROUPSHARED FfxFloat32 spdIntermediateA[16][16]; + +FfxFloat32x4 SpdLoadSourceImage(FfxInt32x2 tex, FfxUInt32 slice) +{ + VectorFieldEntry gameMv; + FfxUInt32x2 packedGameFieldMv = LoadGameFieldMv(tex); + UnpackVectorFieldEntries(packedGameFieldMv, gameMv); + + return FfxFloat32x4(gameMv.fMotionVector, gameMv.uHighPriorityFactor, gameMv.uLowPriorityFactor) * FfxFloat32(DisplaySize().x > 0); +} + +FfxFloat32x4 SpdLoad(FfxInt32x2 tex, FfxUInt32 slice) +{ + return RWLoadInpaintingPyramid(tex, 5); +} + +void SpdStore(FfxInt32x2 pix, FfxFloat32x4 outValue, FfxUInt32 index, FfxUInt32 slice) +{ + StoreInpaintingPyramid(pix, outValue, index); +} + +void SpdIncreaseAtomicCounter(FfxUInt32 slice) +{ + AtomicIncreaseCounter(COUNTER_SPD, spdCounter); +} + +FfxUInt32 SpdGetAtomicCounter() +{ + return spdCounter; +} +void SpdResetAtomicCounter(FfxUInt32 slice) +{ + StoreCounter(COUNTER_SPD, 0); +} + +FfxFloat32x4 SpdLoadIntermediate(FfxUInt32 x, FfxUInt32 y) +{ + return FfxFloat32x4( + spdIntermediateR[x][y], + spdIntermediateG[x][y], + spdIntermediateB[x][y], + spdIntermediateA[x][y]); +} + +void SpdStoreIntermediate(FfxUInt32 x, FfxUInt32 y, FfxFloat32x4 value) +{ + spdIntermediateR[x][y] = value.x; + spdIntermediateG[x][y] = value.y; + spdIntermediateB[x][y] = value.z; + spdIntermediateA[x][y] = value.w; +} + +FfxFloat32x4 SpdReduce4(FfxFloat32x4 v0, FfxFloat32x4 v1, FfxFloat32x4 v2, FfxFloat32x4 v3) +{ + FfxFloat32x4 vec = FfxFloat32x4(0,0,0,0); + + FfxFloat32 fWeightSum = 0.0f; +#define ADD(SAMPLE) { \ + FfxFloat32 fWeight = FfxFloat32(SAMPLE.z > 0.0f); \ + vec += SAMPLE * fWeight; \ + fWeightSum += fWeight; \ + } + + ADD(v0); + ADD(v1); + ADD(v2); + ADD(v3); + + vec /= (fWeightSum > FFX_FRAMEINTERPOLATION_EPSILON) ? fWeightSum : 1.0f; + + return vec; +} + +#include "spd/ffx_spd.h" + +void computeFrameinterpolationGameVectorFieldInpaintingPyramid(FfxInt32x3 iGroupId, FfxInt32 iLocalIndex) +{ + SpdDownsample( + FfxUInt32x2(iGroupId.xy), + FfxUInt32(iLocalIndex), + FfxUInt32(NumMips()), + FfxUInt32(NumWorkGroups()), + FfxUInt32(iGroupId.z), + FfxUInt32x2(WorkGroupOffset())); +} + +#endif // FFX_FRAMEINTERPOLATION_COMPUTE_GAME_VECTOR_FIELD_INPAINTING_PYRAMID_H diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_compute_inpainting_pyramid.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_compute_inpainting_pyramid.h new file mode 100644 index 000000000..da2b6728a --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_compute_inpainting_pyramid.h @@ -0,0 +1,120 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_FRAMEINTERPOLATION_COMPUTE_INPAINTING_PYRAMID_H +#define FFX_FRAMEINTERPOLATION_COMPUTE_INPAINTING_PYRAMID_H + +//-------------------------------------------------------------------------------------- +// Buffer definitions - global atomic counter +//-------------------------------------------------------------------------------------- + +FFX_GROUPSHARED FfxUInt32 spdCounter; +FFX_GROUPSHARED FfxFloat32 spdIntermediateR[16][16]; +FFX_GROUPSHARED FfxFloat32 spdIntermediateG[16][16]; +FFX_GROUPSHARED FfxFloat32 spdIntermediateB[16][16]; +FFX_GROUPSHARED FfxFloat32 spdIntermediateA[16][16]; + +FfxFloat32x4 SpdLoadSourceImage(FfxInt32x2 tex, FfxUInt32 slice) +{ + FfxFloat32x4 fColor = LoadFrameInterpolationOutput(tex) * FfxFloat32(DisplaySize().x > 0); + + // reverse sample weights + fColor.w = ffxSaturate(1.0f - fColor.w); + + + if (tex.x < InterpolationRectBase().x || tex.x >= (InterpolationRectSize().x + InterpolationRectBase().x) || tex.y < InterpolationRectBase().y || + tex.y >= (InterpolationRectSize().y + InterpolationRectBase().y)) + { + fColor.w = 0.0f; // don't take contributions from outside of the interpolation rect + } + + return fColor; +} + +FfxFloat32x4 SpdLoad(FfxInt32x2 tex, FfxUInt32 slice) +{ + return RWLoadInpaintingPyramid(tex, 5); +} + +void SpdStore(FfxInt32x2 pix, FfxFloat32x4 outValue, FfxUInt32 index, FfxUInt32 slice) +{ + StoreInpaintingPyramid(pix, outValue, index); +} + +void SpdIncreaseAtomicCounter(FfxUInt32 slice) +{ + AtomicIncreaseCounter(COUNTER_SPD, spdCounter); +} + +FfxUInt32 SpdGetAtomicCounter() +{ + return spdCounter; +} +void SpdResetAtomicCounter(FfxUInt32 slice) +{ + StoreCounter(COUNTER_SPD, 0); +} + +FfxFloat32x4 SpdLoadIntermediate(FfxUInt32 x, FfxUInt32 y) +{ + return FfxFloat32x4( + spdIntermediateR[x][y], + spdIntermediateG[x][y], + spdIntermediateB[x][y], + spdIntermediateA[x][y]); +} + +void SpdStoreIntermediate(FfxUInt32 x, FfxUInt32 y, FfxFloat32x4 value) +{ + spdIntermediateR[x][y] = value.x; + spdIntermediateG[x][y] = value.y; + spdIntermediateB[x][y] = value.z; + spdIntermediateA[x][y] = value.w; +} + +FfxFloat32x4 SpdReduce4(FfxFloat32x4 v0, FfxFloat32x4 v1, FfxFloat32x4 v2, FfxFloat32x4 v3) +{ + FfxFloat32x4 w = FfxFloat32x4(v0.w, v1.w, v2.w, v3.w); + + FfxFloat32 sum = (w[0] + w[1] + w[2] + w[3]); + + if (sum == 0.0f) { + return FfxFloat32x4(0.0, 0.0, 0.0, 0.0); + } + + return (v0 * w[0] + v1 * w[1] + v2 * w[2] + v3 * w[3]) / sum; +} + +#include "spd/ffx_spd.h" + +void computeFrameinterpolationInpaintingPyramid(FfxInt32x3 iGroupId, FfxInt32 iLocalIndex) +{ + SpdDownsample( + FfxUInt32x2(iGroupId.xy), + FfxUInt32(iLocalIndex), + FfxUInt32(NumMips()), + FfxUInt32(NumWorkGroups()), + FfxUInt32(iGroupId.z), + FfxUInt32x2(WorkGroupOffset())); +} + +#endif // FFX_FRAMEINTERPOLATION_COMPUTE_INPAINTING_PYRAMID_H diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_debug_view.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_debug_view.h new file mode 100644 index 000000000..bcd3a52a7 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_debug_view.h @@ -0,0 +1,172 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_FRAMEINTERPOLATION_DEBUG_VIEW_H +#define FFX_FRAMEINTERPOLATION_DEBUG_VIEW_H + +struct FfxFrameInterpolationDebugViewport +{ + FfxInt32x2 offset; + FfxInt32x2 size; +}; + +// Macro to cull and draw debug viewport +#define DRAW_VIEWPORT(function, pos, vp) \ + { \ + if (pointIsInsideViewport(pos, vp)) \ + { \ + function(pos, vp); \ + } \ + } + +FfxFloat32x2 getTransformedUv(FfxInt32x2 iPxPos, FfxFrameInterpolationDebugViewport vp) +{ + FfxFloat32x2 fUv = (FfxFloat32x2(iPxPos - vp.offset) + 0.5f) / vp.size; + + return fUv; +} + +FfxFloat32x4 getMotionVectorColor(FfxFloat32x2 fMotionVector) +{ + return FfxFloat32x4(0.5f + fMotionVector * DisplaySize() * 0.1f, 0.5f, 1.0f); +} + +FfxFloat32x4 getUnusedIndicationColor(FfxInt32x2 iPxPos, FfxFrameInterpolationDebugViewport vp) +{ + FfxInt32x2 basePos = iPxPos - vp.offset; + + FfxFloat32 ar = FfxFloat32(vp.size.x) / FfxFloat32(vp.size.y); + + return FfxFloat32x4(basePos.x == FfxInt32(basePos.y * ar), 0, 0, 1); +} + +void drawGameMotionVectorFieldVectors(FfxInt32x2 iPxPos, FfxFrameInterpolationDebugViewport vp) +{ + FfxFloat32x2 fUv = getTransformedUv(iPxPos, vp); + + VectorFieldEntry gameMv; + LoadInpaintedGameFieldMv(fUv, gameMv); + + StoreFrameinterpolationOutput(iPxPos, getMotionVectorColor(gameMv.fMotionVector)); +} + +void drawGameMotionVectorFieldDepthPriority(FfxInt32x2 iPxPos, FfxFrameInterpolationDebugViewport vp) +{ + FfxFloat32x2 fUv = getTransformedUv(iPxPos, vp); + + VectorFieldEntry gameMv; + LoadInpaintedGameFieldMv(fUv, gameMv); + + StoreFrameinterpolationOutput(iPxPos, FfxFloat32x4(0, gameMv.uHighPriorityFactor, 0, 1)); +} + +void drawOpticalFlowMotionVectorField(FfxInt32x2 iPxPos, FfxFrameInterpolationDebugViewport vp) +{ + FfxFloat32x2 fUv = getTransformedUv(iPxPos, vp); + + VectorFieldEntry ofMv; + SampleOpticalFlowMotionVectorField(fUv, ofMv); + + StoreFrameinterpolationOutput(iPxPos, getMotionVectorColor(ofMv.fMotionVector)); +} + +void drawDisocclusionMask(FfxInt32x2 iPxPos, FfxFrameInterpolationDebugViewport vp) +{ + FfxFloat32x2 fUv = getTransformedUv(iPxPos, vp); + + FfxFloat32x2 fLrUv = fUv * (FfxFloat32x2(RenderSize()) / GetMaxRenderSize()); + + FfxFloat32x2 fDisocclusionFactor = ffxSaturate(SampleDisocclusionMask(fLrUv).xy); + + StoreFrameinterpolationOutput(iPxPos, FfxFloat32x4(fDisocclusionFactor, 0, 1)); +} + +FfxFloat32x4 getDistortionField(FfxInt32x2 iPxPos, FfxFrameInterpolationDebugViewport vp) +{ + FfxFloat32x2 fUv = getTransformedUv(iPxPos, vp); + + FfxFloat32x2 fDistortionFieldUv = abs(SampleDistortionField(fUv).xy); + + return FfxFloat32x4(fDistortionFieldUv * 10.0f, 0.0f, 1.0f); +} + +void drawPresentBackbuffer(FfxInt32x2 iPxPos, FfxFrameInterpolationDebugViewport vp) +{ + FfxFloat32x2 fUv = getTransformedUv(iPxPos, vp); + + FfxFloat32x4 fPresentColor = getDistortionField(iPxPos, vp); + + if (GetHUDLessAttachedFactor() == 1) + { + fPresentColor = SamplePresentBackbuffer(fUv); + } + + StoreFrameinterpolationOutput(iPxPos, fPresentColor); +} + +void drawCurrentInterpolationSource(FfxInt32x2 iPxPos, FfxFrameInterpolationDebugViewport vp) +{ + FfxFloat32x2 fUv = getTransformedUv(iPxPos, vp); + + FfxFloat32x4 fCurrentBackBuffer = FfxFloat32x4(SampleCurrentBackbuffer(fUv), 1.0f); + + StoreFrameinterpolationOutput(iPxPos, fCurrentBackBuffer); +} + +FfxBoolean pointIsInsideViewport(FfxInt32x2 iPxPos, FfxFrameInterpolationDebugViewport vp) +{ + FfxInt32x2 extent = vp.offset + vp.size; + + return (iPxPos.x >= vp.offset.x && iPxPos.x < extent.x) && (iPxPos.y >= vp.offset.y && iPxPos.y < extent.y); +} + +void computeDebugView(FfxInt32x2 iPxPos) +{ +#define VIEWPORT_GRID_SIZE_X 3 +#define VIEWPORT_GRID_SIZE_Y 3 + + FfxFloat32x2 fViewportScale = FfxFloat32x2(1.0f / VIEWPORT_GRID_SIZE_X, 1.0f / VIEWPORT_GRID_SIZE_Y); + FfxInt32x2 iViewportSize = FfxInt32x2(DisplaySize() * fViewportScale); + + // compute grid [y][x] for easier placement of viewports + FfxFrameInterpolationDebugViewport vp[VIEWPORT_GRID_SIZE_Y][VIEWPORT_GRID_SIZE_X]; + for (FfxInt32 y = 0; y < VIEWPORT_GRID_SIZE_Y; y++) + { + for (FfxInt32 x = 0; x < VIEWPORT_GRID_SIZE_X; x++) + { + vp[y][x].offset = iViewportSize * FfxInt32x2(x, y); + vp[y][x].size = iViewportSize; + } + } + + // top row + DRAW_VIEWPORT(drawGameMotionVectorFieldVectors, iPxPos, vp[0][0]); + DRAW_VIEWPORT(drawGameMotionVectorFieldDepthPriority, iPxPos, vp[0][1]); + DRAW_VIEWPORT(drawOpticalFlowMotionVectorField, iPxPos, vp[0][2]); + + // bottom row + DRAW_VIEWPORT(drawDisocclusionMask, iPxPos, vp[2][0]); + DRAW_VIEWPORT(drawCurrentInterpolationSource, iPxPos, vp[2][1]); + DRAW_VIEWPORT(drawPresentBackbuffer, iPxPos, vp[2][2]); +} + +#endif // FFX_FRAMEINTERPOLATION_DEBUG_VIEW_H diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_disocclusion_mask.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_disocclusion_mask.h new file mode 100644 index 000000000..03adc96f3 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_disocclusion_mask.h @@ -0,0 +1,146 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_FRAMEINTERPOLATION_DISOCCLUSION_MASK_H +#define FFX_FRAMEINTERPOLATION_DISOCCLUSION_MASK_H + +FFX_STATIC const FfxFloat32 DepthClipBaseScale = 1.0f; + +FfxFloat32 ComputeSampleDepthClip(FfxInt32x2 iPxSamplePos, FfxFloat32 fPreviousDepth, FfxFloat32 fPreviousDepthBilinearWeight, FfxFloat32 fCurrentDepthViewSpace) +{ + FfxFloat32 fPrevNearestDepthViewSpace = ConvertFromDeviceDepthToViewSpace(fPreviousDepth); + + // Depth separation logic ref: See "Minimum Triangle Separation for Correct Z-Buffer Occlusion" + // Intention: worst case of formula in Figure4 combined with Ksep factor in Section 4 + const FfxFloat32 fHalfViewportWidth = RenderSize().x * 0.5f; + FfxFloat32 fDepthThreshold = ffxMax(fCurrentDepthViewSpace, fPrevNearestDepthViewSpace); + + // WARNING: Ksep only works with reversed-z with infinite projection. + const FfxFloat32 Ksep = 1.37e-05f; + FfxFloat32 fRequiredDepthSeparation = Ksep * fDepthThreshold * TanHalfFoV() * fHalfViewportWidth; + FfxFloat32 fDepthDiff = fCurrentDepthViewSpace - fPrevNearestDepthViewSpace; + + FfxFloat32 fDepthClipFactor = (fDepthDiff > 0) ? ffxSaturate(fRequiredDepthSeparation / fDepthDiff) : 1.0f; + + return fPreviousDepthBilinearWeight * fDepthClipFactor * ffxLerp(1.0f, DepthClipBaseScale, ffxSaturate(fDepthDiff * fDepthDiff)); +} + +FfxFloat32 LoadEstimatedDepth(FfxUInt32 estimatedIndex, FfxInt32x2 iSamplePos) +{ + const FfxFloat32x2 fUv = FfxFloat32x2(iSamplePos + 0.5f) / RenderSize(); + const FfxFloat32x2 fDistortionFieldUv = SampleDistortionField(fUv); + FfxInt32x2 iDistortionPixelOffset = FfxInt32x2(fDistortionFieldUv.xy * RenderSize()); + + if (estimatedIndex == 0) + { + return LoadReconstructedDepthPreviousFrame(iSamplePos + iDistortionPixelOffset); + } + else if (estimatedIndex == 1) + { + return LoadDilatedDepth(iSamplePos + iDistortionPixelOffset); + } + + return 0; +} + +FfxFloat32 ComputeDepthClip(FfxUInt32 estimatedIndex, FfxFloat32x2 fUvSample, FfxFloat32 fCurrentDepthSample) +{ + FfxFloat32 fCurrentDepthViewSpace = ConvertFromDeviceDepthToViewSpace(fCurrentDepthSample); + BilinearSamplingData bilinearInfo = GetBilinearSamplingData(fUvSample, RenderSize()); + + FfxFloat32 fDilatedSum = 0.0f; + FfxFloat32 fDepth = 0.0f; + FfxFloat32 fWeightSum = 0.0f; + for (FfxInt32 iSampleIndex = 0; iSampleIndex < 4; iSampleIndex++) { + + const FfxInt32x2 iOffset = bilinearInfo.iOffsets[iSampleIndex]; + const FfxInt32x2 iSamplePos = bilinearInfo.iBasePos + iOffset; + + if (IsOnScreen(iSamplePos, RenderSize())) { + const FfxFloat32 fWeight = bilinearInfo.fWeights[iSampleIndex]; + if (fWeight > fReconstructedDepthBilinearWeightThreshold) { + + const FfxFloat32 fPrevDepthSample = LoadEstimatedDepth(estimatedIndex, iSamplePos); + const FfxFloat32 fPrevNearestDepthViewSpace = ConvertFromDeviceDepthToViewSpace(fPrevDepthSample); + + const FfxFloat32 fDepthDiff = fCurrentDepthViewSpace - fPrevNearestDepthViewSpace; + + if (fDepthDiff > 0.0f) { + +#if FFX_FRAMEINTERPOLATION_OPTION_INVERTED_DEPTH + const FfxFloat32 fPlaneDepth = ffxMin(fPrevDepthSample, fCurrentDepthSample); +#else + const FfxFloat32 fPlaneDepth = ffxMax(fPrevDepthSample, fCurrentDepthSample); +#endif + + const FfxFloat32x3 fCenter = GetViewSpacePosition(FfxInt32x2(RenderSize() * 0.5f), RenderSize(), fPlaneDepth); + const FfxFloat32x3 fCorner = GetViewSpacePosition(FfxInt32x2(0, 0), RenderSize(), fPlaneDepth); + + const FfxFloat32 fHalfViewportWidth = length(FfxFloat32x2(RenderSize())); + const FfxFloat32 fDepthThreshold = ffxMin(fCurrentDepthViewSpace, fPrevNearestDepthViewSpace); + + const FfxFloat32 Ksep = 1.37e-05f; + const FfxFloat32 Kfov = length(fCorner) / length(fCenter); + const FfxFloat32 fRequiredDepthSeparation = Ksep * Kfov * fHalfViewportWidth * fDepthThreshold; + + const FfxFloat32 fResolutionFactor = ffxSaturate(length(FfxFloat32x2(RenderSize())) / length(FfxFloat32x2(1920.0f, 1080.0f))); + const FfxFloat32 fPower = ffxLerp(1.0f, 3.0f, fResolutionFactor); + + fDepth += FfxFloat32((fRequiredDepthSeparation / fDepthDiff) >= 1.0f) * fWeight; + fWeightSum += fWeight; + } + } + } + } + + return (fWeightSum > 0.0f) ? ffxSaturate(1.0f - fDepth / fWeightSum) : 0.0f; +} + +void computeDisocclusionMask(FfxInt32x2 iPxPos) +{ + FfxFloat32 fDilatedDepth = LoadEstimatedInterpolationFrameDepth(iPxPos); + + FfxFloat32x2 fDepthUv = (iPxPos + 0.5f) / RenderSize(); + FfxFloat32 fCurrentDepthViewSpace = ConvertFromDeviceDepthToViewSpace(fDilatedDepth); + + VectorFieldEntry gameMv; + LoadInpaintedGameFieldMv(fDepthUv, gameMv); + + const FfxFloat32 fDepthClipInterpolatedToPrevious = 1.0f - ComputeDepthClip(0, fDepthUv + gameMv.fMotionVector, fDilatedDepth); + const FfxFloat32 fDepthClipInterpolatedToCurrent = 1.0f - ComputeDepthClip(1, fDepthUv - gameMv.fMotionVector, fDilatedDepth); + FfxFloat32x2 fDisocclusionMask = FfxFloat32x2(fDepthClipInterpolatedToPrevious, fDepthClipInterpolatedToCurrent); + + fDisocclusionMask = FfxFloat32x2(FFX_GREATER_THAN_EQUAL(fDisocclusionMask, ffxBroadcast2(FFX_FRAMEINTERPOLATION_EPSILON))); + + // Avoid false disocclusion if primary game vector pointer outside screen area + const FfxFloat32x2 fSrcMotionVector = gameMv.fMotionVector * 2.0f; + const FfxInt32x2 iSamplePosPrevious = FfxInt32x2((fDepthUv + fSrcMotionVector) * RenderSize()); + fDisocclusionMask.x = ffxSaturate(fDisocclusionMask.x + FfxFloat32(!IsOnScreen(iSamplePosPrevious, RenderSize()))); + + const FfxInt32x2 iSamplePosCurrent = FfxInt32x2((fDepthUv - fSrcMotionVector) * RenderSize()); + fDisocclusionMask.y = ffxSaturate(fDisocclusionMask.y + FfxFloat32(!IsOnScreen(iSamplePosCurrent, RenderSize()))); + + StoreDisocclusionMask(iPxPos, fDisocclusionMask); + +} + +#endif // FFX_FRAMEINTERPOLATION_DISOCCLUSION_MASK_H diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_game_motion_vector_field.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_game_motion_vector_field.h new file mode 100644 index 000000000..574e3dff2 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_game_motion_vector_field.h @@ -0,0 +1,123 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_FRAMEINTERPOLATION_GAME_MOTION_VECTOR_FIELD_H +#define FFX_FRAMEINTERPOLATION_GAME_MOTION_VECTOR_FIELD_H + +FfxUInt32 getPriorityFactorFromViewSpaceDepth(FfxFloat32 fViewSpaceDepthInMeters) +{ + fViewSpaceDepthInMeters = ffxPow(fViewSpaceDepthInMeters, 0.33f); + + FfxUInt32 uPriorityFactor = FfxUInt32(FfxFloat32(1 - (fViewSpaceDepthInMeters * (1.0f / (1.0f + fViewSpaceDepthInMeters)))) * PRIORITY_HIGH_MAX); + + return ffxMax(1, uPriorityFactor); +} + +void computeGameFieldMvs(FfxInt32x2 iPxPos) +{ + const FfxFloat32x2 fUvInScreenSpace = (FfxFloat32x2(iPxPos) + 0.5f) / RenderSize(); + + const FfxFloat32x2 fDistortionFieldUv = SampleDistortionField(fUvInScreenSpace); + FfxInt32x2 iDistortionPixelOffset = FfxInt32x2(fDistortionFieldUv.xy * RenderSize()); + + const FfxFloat32x2 fUvInInterpolationRectStart = FfxFloat32x2(InterpolationRectBase()) / DisplaySize(); + const FfxFloat32x2 fUvLetterBoxScale = FfxFloat32x2(InterpolationRectSize()) / DisplaySize(); + const FfxFloat32x2 fUvInInterpolationRect = fUvInInterpolationRectStart + fUvInScreenSpace * fUvLetterBoxScale; + + const FfxFloat32 fDepthSample = LoadDilatedDepth(iPxPos + iDistortionPixelOffset); + const FfxFloat32x2 fGameMotionVector = LoadDilatedMotionVector(iPxPos + iDistortionPixelOffset); + const FfxFloat32x2 fMotionVectorHalf = fGameMotionVector * 0.5f; + const FfxFloat32x2 fInterpolatedLocationUv = fUvInScreenSpace + fMotionVectorHalf; + + const FfxFloat32 fViewSpaceDepth = ConvertFromDeviceDepthToViewSpace(fDepthSample); + const FfxUInt32 uHighPriorityFactorPrimary = getPriorityFactorFromViewSpaceDepth(fViewSpaceDepth); + + // pixel position in current frame + Game Motion Vector -> pixel position in previous frame + FfxFloat32x3 prevBackbufferCol = SamplePreviousBackbuffer(fUvInInterpolationRect+ fGameMotionVector * fUvLetterBoxScale).xyz; //returns color of current frame's pixel in previous frame buffer + FfxFloat32x3 curBackbufferCol = SampleCurrentBackbuffer(fUvInInterpolationRect).xyz; // returns color of current frame's pixel in current frame buffer + FfxFloat32 prevLuma = 0.001f + RawRGBToLuminance(prevBackbufferCol); + FfxFloat32 currLuma = 0.001f + RawRGBToLuminance(curBackbufferCol); + + FfxUInt32 uLowPriorityFactor = FfxUInt32(ffxRound(ffxPow(MinDividedByMax(prevLuma, currLuma), 1.0f / 1.0f) * PRIORITY_LOW_MAX)) + * FfxUInt32(IsUvInside(fUvInInterpolationRect + fGameMotionVector * fUvLetterBoxScale)); + + // Update primary motion vectors + { + const FfxUInt32x2 packedVectorPrimary = PackVectorFieldEntries(true, uHighPriorityFactorPrimary, uLowPriorityFactor, fMotionVectorHalf); + + BilinearSamplingData bilinearInfo = GetBilinearSamplingData(fInterpolatedLocationUv, RenderSize()); + for (FfxInt32 iSampleIndex = 0; iSampleIndex < 4; iSampleIndex++) + { + const FfxInt32x2 iOffset = bilinearInfo.iOffsets[iSampleIndex]; + const FfxInt32x2 iSamplePos = bilinearInfo.iBasePos + iOffset; + + if (IsOnScreen(iSamplePos, RenderSize())) + { + UpdateGameMotionVectorField(iSamplePos, packedVectorPrimary); + } + } + } + + // Update secondary vectors + // Main purpose of secondary vectors is to improve quality of inpainted vectors + const FfxBoolean bWriteSecondaryVectors = length(fMotionVectorHalf * RenderSize()) > FFX_FRAMEINTERPOLATION_EPSILON; + if (bWriteSecondaryVectors) + { + FfxBoolean bWriteSecondary = true; + FfxUInt32 uNumPrimaryHits = 0; + const FfxFloat32 fSecondaryStepScale = length(1.0f / RenderSize()); + const FfxFloat32x2 fStepMv = normalize(fGameMotionVector); + const FfxFloat32 fBreakDist = ffxMin(length(fMotionVectorHalf), length(FfxFloat32x2(0.5f, 0.5f))); + + for (FfxFloat32 fMvScale = fSecondaryStepScale; fMvScale <= fBreakDist && bWriteSecondary; fMvScale += fSecondaryStepScale) + { + const FfxFloat32x2 fSecondaryLocationUv = fInterpolatedLocationUv - fStepMv * fMvScale; + BilinearSamplingData bilinearInfo = GetBilinearSamplingData(fSecondaryLocationUv, RenderSize()); + + // Reverse depth prio for secondary vectors + FfxUInt32 uHighPriorityFactorSecondary = ffxMax(1, PRIORITY_HIGH_MAX - uHighPriorityFactorPrimary); + + const FfxFloat32x2 fToCenter = normalize(FfxFloat32x2(0.5f, 0.5f) - fSecondaryLocationUv); + uLowPriorityFactor = FfxUInt32(ffxMax(0.0f, dot(fToCenter, fStepMv)) * PRIORITY_LOW_MAX); + const FfxUInt32x2 packedVectorSecondary = PackVectorFieldEntries(false, uHighPriorityFactorSecondary, uLowPriorityFactor, fMotionVectorHalf); + + // Only write secondary mvs to single bilinear location + for (FfxInt32 iSampleIndex = 0; iSampleIndex < 1; iSampleIndex++) + { + const FfxInt32x2 iOffset = bilinearInfo.iOffsets[iSampleIndex]; + const FfxInt32x2 iSamplePos = bilinearInfo.iBasePos + iOffset; + + bWriteSecondary = bWriteSecondary && IsOnScreen(iSamplePos, RenderSize()); + + if (bWriteSecondary) + { + const FfxUInt32 uExistingVectorFieldEntry = UpdateGameMotionVectorFieldEx(iSamplePos, packedVectorSecondary); + + uNumPrimaryHits += FfxUInt32(PackedVectorFieldEntryIsPrimary(uExistingVectorFieldEntry)); + bWriteSecondary = bWriteSecondary && (uNumPrimaryHits <= 3); + } + } + } + } +} + +#endif // FFX_FRAMEINTERPOLATION_GAME_MOTION_VECTOR_FIELD_H diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_inpainting.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_inpainting.h new file mode 100644 index 000000000..7ad3630e0 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_inpainting.h @@ -0,0 +1,150 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_FRAMEINTERPOLATION_INPAINTING_H +#define FFX_FRAMEINTERPOLATION_INPAINTING_H + +FfxFloat32x4 ComputeInpaintingLevel(FfxFloat32x2 fUv, const FfxInt32 iMipLevel, const FfxInt32x2 iTexSize) +{ + BilinearSamplingData bilinearInfo = GetBilinearSamplingData(fUv, iTexSize); + + FfxFloat32x4 fColor = FfxFloat32x4(0.0, 0.0, 0.0, 0.0); + + for (FfxInt32 iSampleIndex = 0; iSampleIndex < 4; iSampleIndex++) { + + const FfxInt32x2 iOffset = bilinearInfo.iOffsets[iSampleIndex]; + const FfxInt32x2 iSamplePos = bilinearInfo.iBasePos + iOffset; + + if (IsOnScreen(iSamplePos, iTexSize)) { + + FfxFloat32x4 fSample = LoadInpaintingPyramid(iMipLevel, iSamplePos); + + const FfxFloat32 fWeight = bilinearInfo.fWeights[iSampleIndex] * FfxFloat32(fSample.w > 0.0f); + + fColor += FfxFloat32x4(fSample.rgb * fWeight, fWeight); + } + } + + return fColor; +} + +FfxFloat32x3 ComputeInpainting(FfxInt32x2 iPxPos) +{ + FfxFloat32x2 fUv = (iPxPos + 0.5f) / (DisplaySize()); + + FfxFloat32x4 fColor = FfxFloat32x4(0.0, 0.0, 0.0, 0.0); + FfxFloat32 fWeightSum = 0.0f; + FfxInt32x2 iTexSize = DisplaySize(); + + for (FfxInt32 iMipLevel = 0; iMipLevel < 10; iMipLevel++) { + + iTexSize /= 2; + + FfxFloat32x4 fMipColor = ComputeInpaintingLevel(fUv, iMipLevel, iTexSize); + + if (fMipColor.w > 0.0f) { + const FfxFloat32x3 fNormalizedMipColor = fMipColor.rgb / fMipColor.w; + const FfxFloat32 fMipWeight = ffxPow(1.0f - iMipLevel / 10.0f, 3.0f) * fMipColor.w; + + fColor += FfxFloat32x4(fNormalizedMipColor, 1.0f) * fMipWeight; + } + } + + return fColor.rgb / fColor.w; +} + +void drawDebugTearLines(FfxInt32x2 iPxPos, inout FfxFloat32x3 fColor, inout FfxBoolean bWriteColor) +{ + if (iPxPos.x < 16) + { + fColor.g = 1.f; + bWriteColor = true; + } + else if (iPxPos.x > DisplaySize().x - 16) + { + fColor += GetDebugBarColor(); + bWriteColor = true; + } + +} + +void drawDebugResetIndicators(FfxInt32x2 iPxPos, inout FfxFloat32x3 fColor, inout FfxBoolean bWriteColor) +{ + if (iPxPos.y < 32 && Reset()) + { + fColor.r = 1.f; + bWriteColor = true; + } + else if (iPxPos.y > 32 && iPxPos.y < 64 && HasSceneChanged()) + { + fColor.b = 1.f; + bWriteColor = true; + } +} + +void computeInpainting(FfxInt32x2 iPxPos) +{ + FfxBoolean bWriteColor = false; + FfxFloat32x4 fInterpolatedColor = RWLoadFrameinterpolationOutput(iPxPos); + + const FfxFloat32 fInPaintingWeight = fInterpolatedColor.w; + if (fInPaintingWeight > FFX_FRAMEINTERPOLATION_EPSILON) + { + fInterpolatedColor.rgb = ffxLerp(fInterpolatedColor.rgb, ComputeInpainting(iPxPos) * FfxFloat32(DisplaySize().x > 0), fInPaintingWeight); + bWriteColor = true; + } + + if (GetHUDLessAttachedFactor() == 1) + { + const FfxFloat32x3 fCurrentInterpolationSource = LoadCurrentBackbuffer(iPxPos).rgb; + const FfxFloat32x3 fPresentColor = LoadPresentBackbuffer(iPxPos).rgb; + + if (any(FFX_GREATER_THAN(abs(fCurrentInterpolationSource - fPresentColor), FfxFloat32x3(0.0, 0.0, 0.0)))) + { + const FfxFloat32 fStaticFactor = CalculateStaticContentFactor(RawRGBToLinear(fCurrentInterpolationSource), RawRGBToLinear(fPresentColor)); + + if (fStaticFactor > FFX_FRAMEINTERPOLATION_EPSILON) + { + fInterpolatedColor.rgb = ffxLerp(fInterpolatedColor.rgb, fPresentColor, fStaticFactor); + bWriteColor = true; + } + } + } + + if ((GetDispatchFlags() & FFX_FRAMEINTERPOLATION_DISPATCH_DRAW_DEBUG_TEAR_LINES) != 0) + { + drawDebugTearLines(iPxPos, fInterpolatedColor.rgb, bWriteColor); + } + + if ((GetDispatchFlags() & FFX_FRAMEINTERPOLATION_DISPATCH_DRAW_DEBUG_RESET_INDICATORS) != 0) + { + drawDebugResetIndicators(iPxPos, fInterpolatedColor.rgb, bWriteColor); + } + + if (bWriteColor) + { + StoreFrameinterpolationOutput(iPxPos, FfxFloat32x4(fInterpolatedColor.rgb, 1.0f)); + } + +} + +#endif // FFX_FRAMEINTERPOLATION_INPAINTING_H diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_optical_flow_vector_field.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_optical_flow_vector_field.h new file mode 100644 index 000000000..843213260 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_optical_flow_vector_field.h @@ -0,0 +1,123 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_FRAMEINTERPOLATION_OPTICAL_FLOW_VECTOR_FIELD_H +#define FFX_FRAMEINTERPOLATION_OPTICAL_FLOW_VECTOR_FIELD_H + +void computeOpticalFlowFieldMvs(FfxUInt32x2 dtID, FfxFloat32x2 fOpticalFlowVector) +{ + FfxFloat32x2 fUv = FfxFloat32x2(FfxFloat32x2(dtID)+0.5f) / GetOpticalFlowSize2(); + + const FfxFloat32 scaleFactor = 1.0f; + FfxFloat32x2 fMotionVectorHalf = fOpticalFlowVector * 0.5f; + + // pixel position in current frame + fOpticalFlowVector-> pixel position in previous frame + FfxFloat32x3 prevBackbufferCol = SamplePreviousBackbuffer(fUv + fOpticalFlowVector).xyz; // returns previous backbuffer color of current frame pixel position in previous frame + FfxFloat32x3 curBackbufferCol = SampleCurrentBackbuffer(fUv).xyz; // returns current backbuffer color at current frame pixel position + + FfxFloat32 prevLuma = 0.001f + RawRGBToLuminance(prevBackbufferCol); + FfxFloat32 currLuma = 0.001f + RawRGBToLuminance(curBackbufferCol); + + FfxFloat32 fVelocity = length(fOpticalFlowVector * InterpolationRectSize()); + FfxUInt32 uHighPriorityFactor = FfxUInt32(fVelocity > 1.0f) * FfxUInt32(ffxSaturate(fVelocity / length(InterpolationRectSize() * 0.05f)) * PRIORITY_HIGH_MAX); + + if(uHighPriorityFactor > 0) { + FfxUInt32 uLowPriorityFactor = FfxUInt32(ffxRound(ffxPow(MinDividedByMax(prevLuma, currLuma), 1.0f / 1.0f) * PRIORITY_LOW_MAX)) + * FfxUInt32(IsUvInside(fUv + fOpticalFlowVector)); + + // Project current depth into previous frame locations. + // Push to all pixels having some contribution if reprojection is using bilinear logic. + + const FfxUInt32x2 packedVectorPrimary = PackVectorFieldEntries(true, uHighPriorityFactor, uLowPriorityFactor, fMotionVectorHalf); + + BilinearSamplingData bilinearInfo = GetBilinearSamplingData(fUv + fMotionVectorHalf, GetOpticalFlowSize2()); + for (FfxInt32 iSampleIndex = 0; iSampleIndex < 4; iSampleIndex++) + { + const FfxInt32x2 iOffset = bilinearInfo.iOffsets[iSampleIndex]; + const FfxInt32x2 iSamplePos = bilinearInfo.iBasePos + iOffset; + + if (IsOnScreen(iSamplePos, GetOpticalFlowSize2())) + { + UpdateOpticalflowMotionVectorField(iSamplePos, packedVectorPrimary); + } + } + } +} + +void computeOpticalFlowVectorField(FfxInt32x2 iPxPos) +{ + FfxFloat32x2 fOpticalFlowVector = FfxFloat32x2(0.0, 0.0); + FfxFloat32x2 fOpticalFlowVector3x3Avg = FfxFloat32x2(0.0, 0.0); + FfxInt32 size = 1; + FfxFloat32 sw = 0.0f; + + for(FfxInt32 y = -size; y <= size; y++) { + for(FfxInt32 x = -size; x <= size; x++) { + + FfxInt32x2 samplePos = iPxPos + FfxInt32x2(x, y); + + FfxFloat32x2 vs = LoadOpticalFlow(samplePos); + FfxFloat32 fConfidenceFactor = ffxMax(FFX_FRAMEINTERPOLATION_EPSILON, LoadOpticalFlowConfidence(samplePos)); + + + FfxFloat32 len = length(vs * InterpolationRectSize()); + FfxFloat32 len_factor = ffxMax(0.0f, 512.0f - len) * FfxFloat32(len > 1.0f); + FfxFloat32 w = len_factor; + + fOpticalFlowVector3x3Avg += vs * w; + + sw += w; + } + } + + fOpticalFlowVector3x3Avg /= sw; + + + sw = 0.0f; + for(FfxInt32 y = -size; y <= size; y++) { + for(FfxInt32 x = -size; x <= size; x++) { + + FfxInt32x2 samplePos = iPxPos + FfxInt32x2(x, y); + + FfxFloat32x2 vs = LoadOpticalFlow(samplePos); + + FfxFloat32 fConfidenceFactor = ffxMax(FFX_FRAMEINTERPOLATION_EPSILON, LoadOpticalFlowConfidence(samplePos)); + FfxFloat32 len = length(vs * InterpolationRectSize()); + FfxFloat32 len_factor = ffxMax(0.0f, 512.0f - len) * FfxFloat32(len > 1.0f); + + + FfxFloat32 w = ffxMax(0.0f, ffxPow(dot(fOpticalFlowVector3x3Avg, vs), 1.25f)) * len_factor; + + fOpticalFlowVector += vs * w; + sw += w; + } + } + + if (sw > FFX_FRAMEINTERPOLATION_EPSILON) + { + fOpticalFlowVector /= sw; + } + + computeOpticalFlowFieldMvs(iPxPos, fOpticalFlowVector); +} + +#endif // FFX_FRAMEINTERPOLATION_OPTICAL_FLOW_VECTOR_FIELD_H diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_reconstruct_dilated_velocity_and_previous_depth.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_reconstruct_dilated_velocity_and_previous_depth.h new file mode 100644 index 000000000..e92a57900 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_reconstruct_dilated_velocity_and_previous_depth.h @@ -0,0 +1,123 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_FRAMEINTERPOLATION_RECONSTRUCT_DILATED_VELOCITY_AND_PREVIOUS_DEPTH_H +#define FFX_FRAMEINTERPOLATION_RECONSTRUCT_DILATED_VELOCITY_AND_PREVIOUS_DEPTH_H + +void ReconstructPrevDepth(FfxInt32x2 iPxPos, FfxFloat32 fDepth, FfxFloat32x2 fMotionVector, FfxInt32x2 iPxDepthSize) +{ + fMotionVector *= FfxFloat32(length(fMotionVector * DisplaySize()) > 0.1f); + + FfxFloat32x2 fUv = (iPxPos + FfxFloat32(0.5)) / iPxDepthSize; + FfxFloat32x2 fReprojectedUv = fUv + fMotionVector; + + BilinearSamplingData bilinearInfo = GetBilinearSamplingData(fReprojectedUv, RenderSize()); + + // Project current depth into previous frame locations. + // Push to all pixels having some contribution if reprojection is using bilinear logic. + for (FfxInt32 iSampleIndex = 0; iSampleIndex < 4; iSampleIndex++) { + + const FfxInt32x2 iOffset = bilinearInfo.iOffsets[iSampleIndex]; + FfxFloat32 fWeight = bilinearInfo.fWeights[iSampleIndex]; + + if (fWeight > fReconstructedDepthBilinearWeightThreshold) { + + FfxInt32x2 iStorePos = bilinearInfo.iBasePos + iOffset; + if (IsOnScreen(iStorePos, iPxDepthSize)) { + UpdateReconstructedDepthPreviousFrame(iStorePos, fDepth); + } + } + } +} + +void FindNearestDepth(FFX_PARAMETER_IN FfxInt32x2 iPxPos, FFX_PARAMETER_IN FfxInt32x2 iPxSize, FFX_PARAMETER_OUT FfxFloat32 fNearestDepth, FFX_PARAMETER_OUT FfxInt32x2 fNearestDepthCoord) +{ + const FfxInt32 iSampleCount = 9; + const FfxInt32x2 iSampleOffsets[iSampleCount] = { + FfxInt32x2(+0, +0), + FfxInt32x2(+1, +0), + FfxInt32x2(+0, +1), + FfxInt32x2(+0, -1), + FfxInt32x2(-1, +0), + FfxInt32x2(-1, +1), + FfxInt32x2(+1, +1), + FfxInt32x2(-1, -1), + FfxInt32x2(+1, -1), + }; + + // pull out the depth loads to allow SC to batch them + FfxFloat32 depth[9]; + FfxInt32 iSampleIndex = 0; + FFX_UNROLL + for (iSampleIndex = 0; iSampleIndex < iSampleCount; ++iSampleIndex) { + + FfxInt32x2 iPos = iPxPos + iSampleOffsets[iSampleIndex]; + depth[iSampleIndex] = LoadInputDepth(iPos); + } + + // find closest depth + fNearestDepthCoord = iPxPos; + fNearestDepth = depth[0]; + FFX_UNROLL + for (iSampleIndex = 1; iSampleIndex < iSampleCount; ++iSampleIndex) { + + FfxInt32x2 iPos = iPxPos + iSampleOffsets[iSampleIndex]; + if (IsOnScreen(iPos, iPxSize)) { + + FfxFloat32 fNdDepth = depth[iSampleIndex]; +#if FFX_FRAMEINTERPOLATION_OPTION_INVERTED_DEPTH + if (fNdDepth > fNearestDepth) { +#else + if (fNdDepth < fNearestDepth) { +#endif + fNearestDepthCoord = iPos; + fNearestDepth = fNdDepth; + } + } + } +} + +void ReconstructAndDilate(FfxInt32x2 iPxLrPos) +{ + FfxFloat32 fDilatedDepth; + FfxInt32x2 iNearestDepthCoord; + + FindNearestDepth(iPxLrPos, RenderSize(), fDilatedDepth, iNearestDepthCoord); + +#if FFX_FRAMEINTERPOLATION_OPTION_LOW_RES_MOTION_VECTORS + FfxInt32x2 iSamplePos = iPxLrPos; + FfxInt32x2 iMotionVectorPos = iNearestDepthCoord; +#else + FfxInt32x2 iSamplePos = ComputeHrPosFromLrPos(iPxLrPos); + FfxInt32x2 iMotionVectorPos = ComputeHrPosFromLrPos(iNearestDepthCoord); +#endif + + FfxFloat32x2 fDilatedMotionVector = LoadInputMotionVector(iMotionVectorPos); + + StoreDilatedDepth(iPxLrPos, fDilatedDepth); + StoreDilatedMotionVectors(iPxLrPos, fDilatedMotionVector); + + ReconstructPrevDepth(iPxLrPos, fDilatedDepth, fDilatedMotionVector, RenderSize()); +} + + +#endif //!defined( FFX_FRAMEINTERPOLATION_RECONSTRUCT_DILATED_VELOCITY_AND_PREVIOUS_DEPTH_H ) diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_reconstruct_previous_depth.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_reconstruct_previous_depth.h new file mode 100644 index 000000000..d85f67312 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_reconstruct_previous_depth.h @@ -0,0 +1,63 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_FRAMEINTERPOLATION_RECONSTRUCT_PREVIOUS_DEPTH_H +#define FFX_FRAMEINTERPOLATION_RECONSTRUCT_PREVIOUS_DEPTH_H + +void ReconstructPrevDepth(FfxInt32x2 iPxPos, FfxUInt32 depthTarget, FfxFloat32 fDepth, FfxFloat32x2 fMotionVector, FfxInt32x2 iPxDepthSize) +{ + const FfxFloat32x2 fUv = (iPxPos + FfxFloat32(0.5)) / iPxDepthSize; + + // Project current depth into previous frame locations. + // Push to all pixels having some contribution if reprojection is using bilinear logic. + BilinearSamplingData bilinearInfo = GetBilinearSamplingData(fUv + fMotionVector, RenderSize()); + for (FfxInt32 iSampleIndex = 0; iSampleIndex < 4; iSampleIndex++) + { + const FfxInt32x2 iOffset = bilinearInfo.iOffsets[iSampleIndex]; + const FfxInt32x2 iSamplePos = bilinearInfo.iBasePos + iOffset; + const FfxFloat32 fSampleWeight = bilinearInfo.fWeights[iSampleIndex]; + + if (fSampleWeight > fReconstructedDepthBilinearWeightThreshold) + { + if (IsOnScreen(iSamplePos, RenderSize())) + { + if (depthTarget != 0) { + UpdateReconstructedDepthInterpolatedFrame(iSamplePos, fDepth); + } + } + } + } +} + +void reconstructPreviousDepth(FfxInt32x2 iPxPos) +{ + const FfxFloat32x2 fUv = (iPxPos + FfxFloat32(0.5f)) / RenderSize(); + const FfxFloat32x2 fDistortionFieldUv = SampleDistortionField(fUv); + FfxInt32x2 iDistortionPixelOffset = FfxInt32x2(fDistortionFieldUv.xy * RenderSize()); + + FfxFloat32x2 fMotionVector = LoadDilatedMotionVector(iPxPos + iDistortionPixelOffset); + FfxFloat32 fDilatedDepth = LoadDilatedDepth(iPxPos + iDistortionPixelOffset); + + ReconstructPrevDepth(iPxPos, 1, fDilatedDepth, fMotionVector * 0.5f, RenderSize()); +} + +#endif // FFX_FRAMEINTERPOLATION_RECONSTRUCT_PREVIOUS_DEPTH_H diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_resources.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_resources.h new file mode 100644 index 000000000..5505f6d15 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_resources.h @@ -0,0 +1,95 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_FRAMEINTERPOLATION_RESOURCES_H +#define FFX_FRAMEINTERPOLATION_RESOURCES_H + +#if defined(FFX_CPU) || defined(FFX_GPU) +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_NULL 0 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_OUTPUT 1 +//#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_BACKBUFFER 2 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_PREVIOUS_INTERPOLATION_SOURCE 3 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_CURRENT_INTERPOLATION_SOURCE 4 + +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_DEPTH 5 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_MOTION_VECTORS 6 + +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_RESERVED_2 7 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_RESERVED_3 8 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_RESERVED_4 9 + +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_DILATED_DEPTH 10 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_DILATED_MOTION_VECTORS 11 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_RECONSTRUCTED_DEPTH_PREVIOUS_FRAME 12 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_RECONSTRUCTED_DEPTH_INTERPOLATED_FRAME 13 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_DISOCCLUSION_MASK 14 + +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_GAME_MOTION_VECTOR_FIELD_X 15 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_GAME_MOTION_VECTOR_FIELD_Y 16 + +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_OPTICAL_FLOW_MOTION_VECTOR_FIELD_X 17 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_OPTICAL_FLOW_MOTION_VECTOR_FIELD_Y 18 + +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_OPTICAL_FLOW_VECTOR 19 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_RESERVED_5 20 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_OPTICAL_FLOW_CONFIDENCE 21 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_OPTICAL_FLOW_GLOBAL_MOTION 22 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_OPTICAL_FLOW_SCENE_CHANGE_DETECTION 23 + +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_RESERVED_6 25 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_RESERVED_7 26 + +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_DEBUG_OUTPUT_0 27 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_DEBUG_OUTPUT_1 28 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_DEBUG_OUTPUT 29 + +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_INPAINTING_MASK 30 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_PRESENT_BACKBUFFER 31 + +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_COUNTERS 32 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_INPAINTING_PYRAMID 33 // same as FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_INPAINTING_PYRAMID_MIPMAP_0 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_INPAINTING_PYRAMID_MIPMAP_0 33 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_INPAINTING_PYRAMID_MIPMAP_1 34 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_INPAINTING_PYRAMID_MIPMAP_2 35 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_INPAINTING_PYRAMID_MIPMAP_3 36 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_INPAINTING_PYRAMID_MIPMAP_4 37 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_INPAINTING_PYRAMID_MIPMAP_5 38 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_INPAINTING_PYRAMID_MIPMAP_6 39 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_INPAINTING_PYRAMID_MIPMAP_7 40 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_INPAINTING_PYRAMID_MIPMAP_8 41 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_INPAINTING_PYRAMID_MIPMAP_9 42 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_INPAINTING_PYRAMID_MIPMAP_10 43 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_INPAINTING_PYRAMID_MIPMAP_11 44 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_INPAINTING_PYRAMID_MIPMAP_12 45 + +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_DEFAULT_DISTORTION_FIELD 46 +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_DISTORTION_FIELD 47 + +#define FFX_FRAMEINTERPOLATION_RESOURCE_IDENTIFIER_COUNT 48 + +#define FFX_FRAMEINTERPOLATION_CONSTANTBUFFER_IDENTIFIER 0 +#define FFX_FRAMEINTERPOLATION_INPAINTING_PYRAMID_CONSTANTBUFFER_IDENTIFIER 1 +#define FFX_FRAMEINTERPOLATION_CONSTANTBUFFER_COUNT 2 + +#endif // #if defined(FFX_CPU) || defined(FFX_GPU) + +#endif //!defined( FFX_FRAMEINTERPOLATION_RESOURCES_H ) diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_setup.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_setup.h new file mode 100644 index 000000000..60dd32377 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_setup.h @@ -0,0 +1,50 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_FRAMEINTERPOLATION_SETUP_H +#define FFX_FRAMEINTERPOLATION_SETUP_H + +void setupFrameinterpolationResources(FfxInt32x2 iPxPos) +{ + // Update reset counters + StoreCounter(COUNTER_SPD, 0); + if (all(FFX_EQUAL(iPxPos, FfxInt32x2(0, 0)))) + { + if(Reset() || HasSceneChanged()) { + StoreCounter(COUNTER_FRAME_INDEX_SINCE_LAST_RESET, 0); + } else { + FfxUInt32 counter = RWLoadCounter(COUNTER_FRAME_INDEX_SINCE_LAST_RESET); + StoreCounter(COUNTER_FRAME_INDEX_SINCE_LAST_RESET, counter + 1); + } + } + + // Reset resources + StoreGameMotionVectorFieldX(iPxPos, 0); + StoreGameMotionVectorFieldY(iPxPos, 0); + + StoreOpticalflowMotionVectorFieldX(iPxPos, 0); + StoreOpticalflowMotionVectorFieldY(iPxPos, 0); + + StoreDisocclusionMask(iPxPos, FfxFloat32x2(0.0, 0.0)); +} + +#endif // FFX_FRAMEINTERPOLATION_SETUP_H diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/CMakeCompileOpticalflowShaders.txt b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/CMakeCompileOpticalflowShaders.txt new file mode 100644 index 000000000..5e4c27333 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/CMakeCompileOpticalflowShaders.txt @@ -0,0 +1,55 @@ +# This file is part of the FidelityFX SDK. +# +# Copyright (C) 2024 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files(the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions : +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +set(OPTICALFLOW_BASE_ARGS + -reflection -deps=gcc -DFFX_GPU=1) + +set(OPTICALFLOW_PERMUTATION_ARGS + -DFFX_OPTICALFLOW_OPTION_HDR_COLOR_INPUT={0,1} + ) + +set(OPTICALFLOW_INCLUDE_ARGS + "${FFX_GPU_PATH}" + "${FFX_GPU_PATH}/opticalflow") + +if (NOT OPTICALFLOW_SHADER_EXT) + set(OPTICALFLOW_SHADER_EXT *) +endif() + +file(GLOB OPTICALFLOW_SHADERS + "shaders/opticalflow/ffx_opticalflow_prepare_luma_pass.${OPTICALFLOW_SHADER_EXT}" + "shaders/opticalflow/ffx_opticalflow_compute_luminance_pyramid_pass.${OPTICALFLOW_SHADER_EXT}" + "shaders/opticalflow/ffx_opticalflow_generate_scd_histogram_pass.${OPTICALFLOW_SHADER_EXT}" + "shaders/opticalflow/ffx_opticalflow_compute_scd_divergence_pass.${OPTICALFLOW_SHADER_EXT}" + "shaders/opticalflow/ffx_opticalflow_compute_optical_flow_advanced_pass_v5.${OPTICALFLOW_SHADER_EXT}" + "shaders/opticalflow/ffx_opticalflow_filter_optical_flow_pass_v5.${OPTICALFLOW_SHADER_EXT}" + "shaders/opticalflow/ffx_opticalflow_scale_optical_flow_advanced_pass_v5.${OPTICALFLOW_SHADER_EXT}" +) + +# compile all the shaders +compile_shaders_with_depfile( + "${FFX_SC_EXECUTABLE}" + "${OPTICALFLOW_BASE_ARGS}" "${OPTICALFLOW_API_BASE_ARGS}" "${OPTICALFLOW_PERMUTATION_ARGS}" "${OPTICALFLOW_INCLUDE_ARGS}" + "${OPTICALFLOW_SHADERS}" "${FFX_PASS_SHADER_OUTPUT_PATH}" OPTICALFLOW_PERMUTATION_OUTPUTS) + +# add the header files they generate to the main list of dependencies +add_shader_output("${OPTICALFLOW_PERMUTATION_OUTPUTS}") diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_callbacks_glsl.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_callbacks_glsl.h new file mode 100644 index 000000000..da315ec31 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_callbacks_glsl.h @@ -0,0 +1,578 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_OPTICALFLOW_CALLBACKS_HLSL_H +#define FFX_OPTICALFLOW_CALLBACKS_HLSL_H + +#include "opticalflow/ffx_opticalflow_resources.h" + +// no msad4 in glsl +#define FFX_OPTICALFLOW_USE_MSAD4_INSTRUCTION 0 +#define FFX_OPTICALFLOW_FIX_TOP_LEFT_BIAS 1 +#define FFX_OPTICALFLOW_USE_HEURISTICS 1 +#define FFX_OPTICALFLOW_BLOCK_SIZE 8 +#define FFX_LOCAL_SEARCH_FALLBACK 1 + +// perf optimization for h/w not supporting accelerated msad4() +//#if !defined(FFX_PREFER_WAVE64) && defined(FFX_OPTICALFLOW_USE_MSAD4_INSTRUCTION) +//#undef FFX_OPTICALFLOW_USE_MSAD4_INSTRUCTION +//#endif + +#if defined(FFX_GPU) +#include "ffx_core.h" +#endif // #if defined(FFX_GPU) + +#if defined(FFX_GPU) +#ifndef FFX_PREFER_WAVE64 +#define FFX_PREFER_WAVE64 +#endif // #if defined(FFX_GPU) + + +#include "opticalflow/ffx_opticalflow_common.h" + + +#if defined(FFX_OPTICALFLOW_BIND_CB_COMMON) + layout (set = 0, binding = FFX_OPTICALFLOW_BIND_CB_COMMON, std140) uniform cbOF_t + { + FfxInt32x2 iInputLumaResolution; + FfxUInt32 uOpticalFlowPyramidLevel; + FfxUInt32 uOpticalFlowPyramidLevelCount; + + FfxUInt32 iFrameIndex; + FfxUInt32 backbufferTransferFunction; + FfxFloat32x2 minMaxLuminance; + } cbOF; + +FfxInt32x2 DisplaySize() +{ + return cbOF.iInputLumaResolution; +} + +FfxUInt32 FrameIndex() +{ + return cbOF.iFrameIndex; +} + +FfxUInt32 BackbufferTransferFunction() +{ + return cbOF.backbufferTransferFunction; +} + +FfxFloat32x2 MinMaxLuminance() +{ + return cbOF.minMaxLuminance; +} + +FfxBoolean CrossedSceneChangeThreshold(FfxFloat32 sceneChangeValue) +{ + return sceneChangeValue > 0.45f; +} + +FfxUInt32 OpticalFlowPyramidLevel() +{ + return cbOF.uOpticalFlowPyramidLevel; +} + +FfxUInt32 OpticalFlowPyramidLevelCount() +{ + return cbOF.uOpticalFlowPyramidLevelCount; +} + +FfxInt32x2 OpticalFlowHistogramMaxVelocity() +{ + const FfxInt32 searchRadius = 8; + FfxInt32 scale = FfxInt32(1) << (OpticalFlowPyramidLevelCount() - 1 - OpticalFlowPyramidLevel()); + FfxInt32 maxVelocity = searchRadius * scale; + return FfxInt32x2(maxVelocity, maxVelocity); +} +#endif //FFX_OPTICALFLOW_BIND_CB_COMMON + +#if defined(FFX_OPTICALFLOW_BIND_CB_SPD) + layout (set = 0, binding = FFX_OPTICALFLOW_BIND_CB_SPD, std140) uniform cbOF_SPD_t + { + FfxUInt32 mips; + FfxUInt32 numWorkGroups; + FfxUInt32x2 workGroupOffset; + FfxUInt32 numWorkGroupOpticalFlowInputPyramid; + FfxUInt32 pad0_; + FfxUInt32 pad1_; + FfxUInt32 pad2_; + } cbOF_SPD; + +uint NumWorkGroups() +{ + return cbOF_SPD.numWorkGroupOpticalFlowInputPyramid; +} +#endif // defined(FFX_OPTICALFLOW_BIND_CB_SPD) + + #if defined FFX_OPTICALFLOW_BIND_SRV_INPUT_COLOR + layout (set = 0, binding = FFX_OPTICALFLOW_BIND_SRV_INPUT_COLOR) uniform texture2D r_input_color; + #endif + #if defined FFX_OPTICALFLOW_BIND_SRV_INPUT_MOTION_VECTORS + layout (set = 0, binding = FFX_OPTICALFLOW_BIND_SRV_INPUT_MOTION_VECTORS) uniform texture2D r_input_motion_vectors; + #endif + #if defined FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_INPUT + layout (set = 0, binding = FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_INPUT) uniform utexture2D r_optical_flow_input; + #endif + #if defined FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_PREVIOUS_INPUT + layout (set = 0, binding = FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_PREVIOUS_INPUT) uniform utexture2D r_optical_flow_previous_input; + #endif + #if defined FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW + layout (set = 0, binding = FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW) uniform itexture2D r_optical_flow; + #endif + #if defined FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_PREVIOUS + layout (set = 0, binding = FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_PREVIOUS) uniform itexture2D r_optical_flow_previous; + #endif + #if defined FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_ADDITIONAL_INFO + layout (set = 0, binding = FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_ADDITIONAL_INFO) uniform utexture2D r_optical_flow_additional_info; + #endif + #if defined FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_ADDITIONAL_INFO_PREVIOUS + layout (set = 0, binding = FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_ADDITIONAL_INFO_PREVIOUS) uniform utexture2D r_optical_flow_additional_info_previous; + #endif + #if defined FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_HISTOGRAM + layout (set = 0, binding = FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_HISTOGRAM) uniform utexture2D r_optical_flow_histogram; + #endif + #if defined FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_GLOBAL_MOTION_SEARCH + layout (set = 0, binding = FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_GLOBAL_MOTION_SEARCH) uniform utexture2D r_optical_flow_global_motion_search; + #endif + + // UAV declarations + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT + layout (set = 0, binding = FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT, r8ui) uniform uimage2D rw_optical_flow_input; + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_1 + layout (set = 0, binding = FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_1, r8ui) uniform uimage2D rw_optical_flow_input_level_1; + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_2 + layout (set = 0, binding = FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_2, r8ui) uniform uimage2D rw_optical_flow_input_level_2; + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_3 + layout (set = 0, binding = FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_3, r8ui) uniform uimage2D rw_optical_flow_input_level_3; + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_4 + layout (set = 0, binding = FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_4, r8ui) uniform uimage2D rw_optical_flow_input_level_4; + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_5 + layout (set = 0, binding = FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_5, r8ui) uniform uimage2D rw_optical_flow_input_level_5; + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_6 + layout (set = 0, binding = FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_6, r8ui) uniform uimage2D rw_optical_flow_input_level_6; + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW + layout (set = 0, binding = FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW, rg16i) uniform iimage2D rw_optical_flow; + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_NEXT_LEVEL + layout (set = 0, binding = FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_NEXT_LEVEL, rg16i) uniform iimage2D rw_optical_flow_next_level; + #endif + //#if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_ADDITIONAL_INFO + // RWTexture2D rw_optical_flow_additional_info : FFX_OPTICALFLOW_DECLARE_UAV(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_ADDITIONAL_INFO); + // layout (set = 0, binding = FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_ADDITIONAL_INFO, r32ui) uniform uimage2D rw_optical_flow_additional_info; + //#endif + //#if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_ADDITIONAL_INFO_NEXT_LEVEL + // RWTexture2D rw_optical_flow_additional_info_next_level : FFX_OPTICALFLOW_DECLARE_UAV(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_ADDITIONAL_INFO_NEXT_LEVEL); + // layout (set = 0, binding = FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_ADDITIONAL_INFO_NEXT_LEVEL, r32ui) uniform uimage2D rw_optical_flow_additional_info_next_level; + //#endif + //#if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_HISTOGRAM + // RWTexture2D rw_optical_flow_histogram : FFX_OPTICALFLOW_DECLARE_UAV(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_HISTOGRAM); + // layout (set = 0, binding = FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_HISTOGRAM, r32ui) uniform uimage2D rw_optical_flow_histogram; + //#endif + //#if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_GLOBAL_MOTION_SEARCH + // globallycoherent RWTexture2D rw_optical_flow_global_motion_search: FFX_OPTICALFLOW_DECLARE_UAV(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_GLOBAL_MOTION_SEARCH); + // layout (set = 0, binding = FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_GLOBAL_MOTION_SEARCH, r32ui) coherent uniform uimage2D rw_optical_flow_global_motion_search; + //#endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_HISTOGRAM + layout (set = 0, binding = FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_HISTOGRAM, r32ui) uniform uimage2D rw_optical_flow_scd_histogram; + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_PREVIOUS_HISTOGRAM + layout (set = 0, binding = FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_PREVIOUS_HISTOGRAM, r32f) uniform image2D rw_optical_flow_scd_previous_histogram; + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_TEMP + layout (set = 0, binding = FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_TEMP, r32ui) uniform uimage2D rw_optical_flow_scd_temp; + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_OUTPUT + layout (set = 0, binding = FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_OUTPUT, r32ui) uniform uimage2D rw_optical_flow_scd_output; + #endif + +#if defined(FFX_OPTICALFLOW_BIND_SRV_INPUT_COLOR) +FfxFloat32x4 LoadInputColor(FfxUInt32x2 iPxHistory) +{ + return texelFetch(r_input_color, FfxInt32x2(iPxHistory), 0); +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_SRV_INPUT_MOTION_VECTORS) +FfxFloat32x2 LoadGameMotionVector(FfxInt32x2 iPxPos) +{ + FfxFloat32x2 positionScale = FfxFloat32x2(RenderSize()) / DisplaySize(); + return texelFetch(r_input_motion_vectors, FfxInt32x2(iPxPos * positionScale), 0).xy * motionVectorScale / positionScale; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT) +void StoreOpticalFlowInput(FfxInt32x2 iPxPos, FfxUInt32 fLuma) +{ + imageStore(rw_optical_flow_input, iPxPos, FfxUInt32x4(fLuma, 0, 0, 0)); +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_INPUT) +FfxUInt32 LoadOpticalFlowInput(FfxInt32x2 iPxPos) +{ +#if FFX_OPTICALFLOW_USE_MSAD4_INSTRUCTION == 1 + return max(1, texelFetch(r_optical_flow_input, iPxPos, 0).x); +#else + return texelFetch(r_optical_flow_input, iPxPos, 0).x; +#endif +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT) +FfxUInt32 LoadRwOpticalFlowInput(FfxInt32x2 iPxPos) +{ + return imageLoad(rw_optical_flow_input, iPxPos).x; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_PREVIOUS_INPUT) +FfxUInt32 LoadOpticalFlowPreviousInput(FfxInt32x2 iPxPos) +{ +#if FFX_OPTICALFLOW_USE_MSAD4_INSTRUCTION == 1 + return max(1, texelFetch(r_optical_flow_previous_input, iPxPos, 0).x); +#else + return texelFetch(r_optical_flow_previous_input, iPxPos, 0).x; +#endif +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW) +FfxInt32x2 LoadOpticalFlow(FfxInt32x2 iPxPos) +{ + return texelFetch(r_optical_flow, iPxPos, 0).xy; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW) +FfxInt32x2 LoadRwOpticalFlow(FfxInt32x2 iPxPos) +{ + return imageLoad(rw_optical_flow, iPxPos).xy; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_PREVIOUS) +FfxInt32x2 LoadPreviousOpticalFlow(FfxInt32x2 iPxPos) +{ + return texelFetch(r_optical_flow_previous, iPxPos, 0).xy; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW) +void StoreOpticalFlow(FfxInt32x2 iPxPos, FfxInt32x2 motionVector) +{ + imageStore(rw_optical_flow, iPxPos, FfxInt32x4(motionVector, 0, 0)); +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_NEXT_LEVEL) +void StoreOpticalFlowNextLevel(FfxInt32x2 iPxPos, FfxInt32x2 motionVector) +{ + imageStore(rw_optical_flow_next_level, iPxPos, FfxInt32x4(motionVector, 0, 0)); +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_ADDITIONAL_INFO) +FfxUInt32x2 LoadOpticalFlowAdditionalInfo(FfxInt32x2 iPxPos) +{ + return texelFetch(r_optical_flow_additional_info, iPxPos, 0).xy; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_ADDITIONAL_INFO) +FfxUInt32x2 LoadRwOpticalFlowAdditionalInfo(FfxInt32x2 iPxPos) +{ + return imageLoad(rw_optical_flow_additional_info, iPxPos).xy; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_ADDITIONAL_INFO_PREVIOUS) +FfxUInt32x2 LoadPreviousOpticalFlowAdditionalInfo(FfxInt32x2 iPxPos) +{ + return texelFetch(r_optical_flow_additional_info_previous, iPxPos, 0).xy; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_ADDITIONAL_INFO) +void StoreOpticalFlowAdditionalInfo(FfxInt32x2 iPxPos, FfxUInt32x2 additionalInfo) +{ + imageStore(rw_optical_flow_additional_info, iPxPos, FfxUInt32x4(additionalInfo, 0, 0)); +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_ADDITIONAL_INFO_NEXT_LEVEL) +void StoreOpticalFlowNextLevelAdditionalInfo(FfxInt32x2 iPxPos, FfxUInt32x2 additionalInfo) +{ + imageStore(rw_optical_flow_additional_info_next_level, iPxPos, FfxUInt32x4(additionalInfo, 0, 0)); +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_HISTOGRAM) +FfxUInt32 LoadOpticalFlowHistogram(FfxInt32x2 iBucketId) +{ + return texelFetch(r_optical_flow_histogram, iBucketId, 0).x; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_HISTOGRAM) +void AtomicIncrementOpticalFlowHistogram(FfxInt32x2 iBucketId) +{ + imageAtomicAdd(rw_optical_flow_histogram, iBucketId, 1); +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_GLOBAL_MOTION_SEARCH) +FfxInt32x2 LoadGlobalMotionVector() +{ + FfxInt32 vx = FfxInt32(texelFetch(r_optical_flow_global_motion_search, FfxInt32x2(0, 0), 0).x); + FfxInt32 vy = FfxInt32(texelFetch(r_optical_flow_global_motion_search, FfxInt32x2(1, 0), 0).x); + return FfxInt32x2(vx, vy); +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_GLOBAL_MOTION_SEARCH) +FfxInt32x2 LoadRwGlobalMotionVector() +{ + FfxInt32 vx = FfxInt32(imageLoad(rw_optical_flow_global_motion_search, FfxInt32x2(0, 0)).x); + FfxInt32 vy = FfxInt32(imageLoad(rw_optical_flow_global_motion_search, FfxInt32x2(1, 0)).x); + return FfxInt32x2(vx, vy); +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_GLOBAL_MOTION_SEARCH) +FfxUInt32 LoadGlobalMotionValue(FfxInt32 index) +{ + return imageLoad(rw_optical_flow_global_motion_search, FfxInt32x2(index, 0)).x; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_GLOBAL_MOTION_SEARCH) +void StoreGlobalMotionValue(FfxInt32 index, FfxUInt32 value) +{ + imageStore(rw_optical_flow_global_motion_search, FfxInt32x2(index, 0), FfxUInt32x4(value, 0, 0, 0)); +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_GLOBAL_MOTION_SEARCH) +FfxUInt32 AtomicIncrementGlobalMotionValue(FfxInt32 index) +{ + return imageAtomicAdd(rw_optical_flow_global_motion_search, FfxInt32x2(index, 0), 1); +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_HISTOGRAM) +FfxUInt32 LoadRwSCDHistogram(FfxInt32 iIndex) +{ + return imageLoad(rw_optical_flow_scd_histogram, FfxInt32x2(iIndex, 0)).x; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_HISTOGRAM) +void StoreSCDHistogram(FfxInt32 iIndex, FfxUInt32 value) +{ + imageStore(rw_optical_flow_scd_histogram, FfxInt32x2(iIndex, 0), FfxUInt32x4(value, 0, 0, 0)); +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_HISTOGRAM) +void AtomicIncrementSCDHistogram(FfxInt32 iIndex, FfxUInt32 valueToAdd) +{ + imageAtomicAdd(rw_optical_flow_scd_histogram, FfxInt32x2(iIndex, 0), valueToAdd); +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_PREVIOUS_HISTOGRAM) +FfxFloat32 LoadRwSCDPreviousHistogram(FfxInt32 iIndex) +{ + return imageLoad(rw_optical_flow_scd_previous_histogram, FfxInt32x2(iIndex, 0)).x; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_PREVIOUS_HISTOGRAM) +void StoreSCDPreviousHistogram(FfxInt32 iIndex, FfxFloat32 value) +{ + imageStore(rw_optical_flow_scd_previous_histogram, FfxInt32x2(iIndex, 0), FfxFloat32x4(value, 0.0, 0.0, 0.0)); +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_TEMP) +FfxUInt32 LoadRwSCDTemp(FfxInt32 iIndex) +{ + return imageLoad(rw_optical_flow_scd_temp, FfxInt32x2(iIndex, 0)).x; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_TEMP) +void AtomicIncrementSCDTemp(FfxInt32 iIndex, FfxUInt32 valueToAdd) +{ + imageAtomicAdd(rw_optical_flow_scd_temp, FfxInt32x2(iIndex, 0), valueToAdd); +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_TEMP) +void ResetSCDTemp() +{ + imageStore(rw_optical_flow_scd_temp, FfxInt32x2(0, 0), FfxUInt32x4(0, 0, 0, 0)); + imageStore(rw_optical_flow_scd_temp, FfxInt32x2(1, 0), FfxUInt32x4(0, 0, 0, 0)); + imageStore(rw_optical_flow_scd_temp, FfxInt32x2(2, 0), FfxUInt32x4(0, 0, 0, 0)); +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_OUTPUT) +FfxUInt32 LoadRwSCDOutput(FfxInt32 iIndex) +{ + return imageLoad(rw_optical_flow_scd_output, FfxInt32x2(iIndex, 0)).x; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_OUTPUT) +void StoreSCDOutput(FfxInt32 iIndex, FfxUInt32 value) +{ + imageStore(rw_optical_flow_scd_output, FfxInt32x2(iIndex, 0), FfxUInt32x4(value, 0, 0, 0)); +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_OUTPUT) +FfxUInt32 AtomicIncrementSCDOutput(FfxInt32 iIndex, FfxUInt32 valueToAdd) +{ + return imageAtomicAdd(rw_optical_flow_scd_output, FfxInt32x2(iIndex, 0), valueToAdd); +} +#endif + +//#if defined(FFX_OPTICALFLOW_BIND_UAV_DEBUG_VISUALIZATION) +//void StoreDebugVisualization(FfxUInt32x2 iPxPos, FfxFloat32x3 fColor) +//{ +// imageStore(rw_debug_visualization, iPxPos, FfxFloat32x4(fColor, 1.f)); +//} +//#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_OUTPUT) +FfxFloat32 GetSceneChangeValue() +{ + if (FrameIndex() <= 5) + return 1.0; + else + return ffxAsFloat(LoadRwSCDOutput(SCD_OUTPUT_SCENE_CHANGE_SLOT)); +} + +FfxBoolean IsSceneChanged() +{ + if (FrameIndex() <= 5) + { + return true; + } + else + { + return (LoadRwSCDOutput(SCD_OUTPUT_HISTORY_BITS_SLOT) & 0xfu) != 0; + } +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_INPUT) +FfxUInt32 LoadFirstImagePackedLuma(FfxInt32x2 iPxPos) +{ + const FfxInt32 lumaTextureWidth = DisplaySize().x >> OpticalFlowPyramidLevel(); + const FfxInt32 lumaTextureHeight = DisplaySize().y >> OpticalFlowPyramidLevel(); + + FfxInt32x2 adjustedPos = FfxInt32x2( + ffxClamp(iPxPos.x, 0, lumaTextureWidth - 4), + ffxClamp(iPxPos.y, 0, lumaTextureHeight - 1) + ); + + FfxUInt32 luma0 = LoadOpticalFlowInput(adjustedPos + FfxInt32x2(0, 0)); + FfxUInt32 luma1 = LoadOpticalFlowInput(adjustedPos + FfxInt32x2(1, 0)); + FfxUInt32 luma2 = LoadOpticalFlowInput(adjustedPos + FfxInt32x2(2, 0)); + FfxUInt32 luma3 = LoadOpticalFlowInput(adjustedPos + FfxInt32x2(3, 0)); + + return GetPackedLuma(lumaTextureWidth, iPxPos.x, luma0, luma1, luma2, luma3); +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_PREVIOUS_INPUT) +FfxUInt32 LoadSecondImagePackedLuma(FfxInt32x2 iPxPos) +{ + const FfxInt32 lumaTextureWidth = DisplaySize().x >> OpticalFlowPyramidLevel(); + const FfxInt32 lumaTextureHeight = DisplaySize().y >> OpticalFlowPyramidLevel(); + + FfxInt32x2 adjustedPos = FfxInt32x2( + ffxClamp(iPxPos.x, 0, lumaTextureWidth - 4), + ffxClamp(iPxPos.y, 0, lumaTextureHeight - 1) + ); + + FfxUInt32 luma0 = LoadOpticalFlowPreviousInput(adjustedPos + FfxInt32x2(0, 0)); + FfxUInt32 luma1 = LoadOpticalFlowPreviousInput(adjustedPos + FfxInt32x2(1, 0)); + FfxUInt32 luma2 = LoadOpticalFlowPreviousInput(adjustedPos + FfxInt32x2(2, 0)); + FfxUInt32 luma3 = LoadOpticalFlowPreviousInput(adjustedPos + FfxInt32x2(3, 0)); + + return GetPackedLuma(lumaTextureWidth, iPxPos.x, luma0, luma1, luma2, luma3); +} +#endif + + +void SPD_SetMipmap(FfxInt32x2 iPxPos, FfxUInt32 index, FfxFloat32 value) +{ + FfxUInt32x4 value4 = FfxUInt32x4(value, 0.0, 0.0, 0.0); + switch (index) + { + case 0: +#if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_1 + imageStore(rw_optical_flow_input_level_1, iPxPos, value4); +#endif // #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_1 + break; + case 1: +#if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_2 + imageStore(rw_optical_flow_input_level_2, iPxPos, value4); +#endif // #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_2 + break; + case 2: +#if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_3 + imageStore(rw_optical_flow_input_level_3, iPxPos, value4); +#endif // #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_3 + break; + case 3: +#if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_4 + imageStore(rw_optical_flow_input_level_4, iPxPos, value4); +#endif // #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_4 + break; + case 4: +#if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_5 + imageStore(rw_optical_flow_input_level_5, iPxPos, value4); +#endif // #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_5 + break; + case 5: +#if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_6 + imageStore(rw_optical_flow_input_level_6, iPxPos, value4); +#endif // #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_6 + break; + } +} + +#endif // #if defined(FFX_GPU) + +#endif // FFX_OPTICALFLOW_CALLBACKS_HLSL_H diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_callbacks_hlsl.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_callbacks_hlsl.h new file mode 100644 index 000000000..bd1d48493 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_callbacks_hlsl.h @@ -0,0 +1,634 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_OPTICALFLOW_CALLBACKS_HLSL_H +#define FFX_OPTICALFLOW_CALLBACKS_HLSL_H + +#if defined(FFX_GPU) +#ifdef __hlsl_dx_compiler +#pragma dxc diagnostic push +#pragma dxc diagnostic ignored "-Wambig-lit-shift" +#endif //__hlsl_dx_compiler +#include "ffx_core.h" +#ifdef __hlsl_dx_compiler +#pragma dxc diagnostic pop +#endif //__hlsl_dx_compiler + +#define FFX_OPTICALFLOW_USE_MSAD4_INSTRUCTION 1 +#define FFX_OPTICALFLOW_FIX_TOP_LEFT_BIAS 1 +#define FFX_OPTICALFLOW_USE_HEURISTICS 1 +#define FFX_OPTICALFLOW_BLOCK_SIZE 8 +#define FFX_LOCAL_SEARCH_FALLBACK 1 + +// perf optimization for h/w not supporting accelerated msad4() +#if !defined(FFX_PREFER_WAVE64) && defined(FFX_OPTICALFLOW_USE_MSAD4_INSTRUCTION) +#undef FFX_OPTICALFLOW_USE_MSAD4_INSTRUCTION +#endif + +#include "opticalflow/ffx_opticalflow_common.h" + +#ifndef FFX_PREFER_WAVE64 +#define FFX_PREFER_WAVE64 +#endif + + +#pragma warning(disable: 3205) // conversion from larger type to smaller + +#define DECLARE_SRV_REGISTER(regIndex) t##regIndex +#define DECLARE_UAV_REGISTER(regIndex) u##regIndex +#define DECLARE_CB_REGISTER(regIndex) b##regIndex +#define FFX_OPTICALFLOW_DECLARE_SRV(regIndex) register(DECLARE_SRV_REGISTER(regIndex)) +#define FFX_OPTICALFLOW_DECLARE_UAV(regIndex) register(DECLARE_UAV_REGISTER(regIndex)) +#define FFX_OPTICALFLOW_DECLARE_CB(regIndex) register(DECLARE_CB_REGISTER(regIndex)) + +#if defined(FFX_OPTICALFLOW_BIND_CB_COMMON) + cbuffer cbOF : FFX_OPTICALFLOW_DECLARE_CB(FFX_OPTICALFLOW_BIND_CB_COMMON) + { + FfxInt32x2 iInputLumaResolution; + FfxUInt32 uOpticalFlowPyramidLevel; + FfxUInt32 uOpticalFlowPyramidLevelCount; + + FfxUInt32 iFrameIndex; + FfxUInt32 backbufferTransferFunction; + FfxFloat32x2 minMaxLuminance; + }; +#define FFX_OPTICALFLOW_CONSTANT_BUFFER_1_SIZE 8 + +#endif //FFX_OPTICALFLOW_BIND_CB_COMMON + +#if defined(FFX_OPTICALFLOW_BIND_CB_SPD) +cbuffer cbOF_SPD : FFX_OPTICALFLOW_DECLARE_CB(FFX_OPTICALFLOW_BIND_CB_SPD) { + + FfxUInt32 mips; + FfxUInt32 numWorkGroups; + FfxUInt32x2 workGroupOffset; + FfxUInt32 numWorkGroupOpticalFlowInputPyramid; + FfxUInt32 pad0_; + FfxUInt32 pad1_; + FfxUInt32 pad2_; +}; + +FfxUInt32 NumWorkGroups() +{ + return numWorkGroupOpticalFlowInputPyramid; +} +#endif //FFX_OPTICALFLOW_BIND_CB_SPD + +#define FFX_OPTICALFLOW_CONSTANT_BUFFER_2_SIZE 8 + +#define FFX_OPTICALFLOW_DESCRIPTOR_COUNT 32 + +#define FFX_OPTICALFLOW_ROOTSIG_STRINGIFY(p) FFX_OPTICALFLOW_ROOTSIG_STR(p) +#define FFX_OPTICALFLOW_ROOTSIG_STR(p) #p +#define FFX_OPTICALFLOW_ROOTSIG [RootSignature( "DescriptorTable(UAV(u0, numDescriptors = " FFX_OPTICALFLOW_ROOTSIG_STRINGIFY(FFX_OPTICALFLOW_DESCRIPTOR_COUNT) ")), " \ + "DescriptorTable(SRV(t0, numDescriptors = " FFX_OPTICALFLOW_ROOTSIG_STRINGIFY(FFX_OPTICALFLOW_DESCRIPTOR_COUNT) ")), " \ + "CBV(b0), " \ + "StaticSampler(s0, filter = FILTER_MIN_MAG_MIP_POINT, " \ + "addressU = TEXTURE_ADDRESS_CLAMP, " \ + "addressV = TEXTURE_ADDRESS_CLAMP, " \ + "addressW = TEXTURE_ADDRESS_CLAMP, " \ + "comparisonFunc = COMPARISON_NEVER, " \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK), " \ + "StaticSampler(s1, filter = FILTER_MIN_MAG_MIP_LINEAR, " \ + "addressU = TEXTURE_ADDRESS_CLAMP, " \ + "addressV = TEXTURE_ADDRESS_CLAMP, " \ + "addressW = TEXTURE_ADDRESS_CLAMP, " \ + "comparisonFunc = COMPARISON_NEVER, " \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK)" )] + +#define FFX_OPTICALFLOW_CB2_ROOTSIG [RootSignature( "DescriptorTable(UAV(u0, numDescriptors = " FFX_OPTICALFLOW_ROOTSIG_STRINGIFY(FFX_OPTICALFLOW_DESCRIPTOR_COUNT) ")), " \ + "DescriptorTable(SRV(t0, numDescriptors = " FFX_OPTICALFLOW_ROOTSIG_STRINGIFY(FFX_OPTICALFLOW_DESCRIPTOR_COUNT) ")), " \ + "CBV(b0), " \ + "StaticSampler(s0, filter = FILTER_MIN_MAG_MIP_POINT, " \ + "addressU = TEXTURE_ADDRESS_CLAMP, " \ + "addressV = TEXTURE_ADDRESS_CLAMP, " \ + "addressW = TEXTURE_ADDRESS_CLAMP, " \ + "comparisonFunc = COMPARISON_NEVER, " \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK), " \ + "StaticSampler(s1, filter = FILTER_MIN_MAG_MIP_LINEAR, " \ + "addressU = TEXTURE_ADDRESS_CLAMP, " \ + "addressV = TEXTURE_ADDRESS_CLAMP, " \ + "addressW = TEXTURE_ADDRESS_CLAMP, " \ + "comparisonFunc = COMPARISON_NEVER, " \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK)" )] +#if defined(FFX_OPTICALFLOW_EMBED_ROOTSIG) +#define FFX_OPTICALFLOW_EMBED_ROOTSIG_CONTENT FFX_OPTICALFLOW_ROOTSIG +#define FFX_OPTICALFLOW_EMBED_CB2_ROOTSIG_CONTENT FFX_OPTICALFLOW_CB2_ROOTSIG +#else +#define FFX_OPTICALFLOW_EMBED_ROOTSIG_CONTENT +#define FFX_OPTICALFLOW_EMBED_CB2_ROOTSIG_CONTENT +#endif // #if FFX_OPTICALFLOW_EMBED_ROOTSIG + +FfxInt32x2 DisplaySize() +{ + return iInputLumaResolution; +} + +FfxUInt32 FrameIndex() +{ + return iFrameIndex; +} + +FfxUInt32 BackbufferTransferFunction() +{ + return backbufferTransferFunction; +} + +FfxFloat32x2 MinMaxLuminance() +{ + return minMaxLuminance; +} + +FfxBoolean CrossedSceneChangeThreshold(FfxFloat32 sceneChangeValue) +{ + return sceneChangeValue > 0.45f; +} + +FfxUInt32 OpticalFlowPyramidLevel() +{ + return uOpticalFlowPyramidLevel; +} + +FfxUInt32 OpticalFlowPyramidLevelCount() +{ + return uOpticalFlowPyramidLevelCount; +} + +FfxInt32x2 OpticalFlowHistogramMaxVelocity() +{ + const FfxInt32 searchRadius = 8; + FfxInt32 scale = FfxInt32(1) << (OpticalFlowPyramidLevelCount() - 1 - OpticalFlowPyramidLevel()); + FfxInt32 maxVelocity = searchRadius * scale; + return FfxInt32x2(maxVelocity, maxVelocity); +} + + #if defined FFX_OPTICALFLOW_BIND_SRV_INPUT_COLOR + Texture2D r_input_color : FFX_OPTICALFLOW_DECLARE_SRV(FFX_OPTICALFLOW_BIND_SRV_INPUT_COLOR); + #endif + #if defined FFX_OPTICALFLOW_BIND_SRV_INPUT_MOTION_VECTORS + Texture2D r_input_motion_vectors : FFX_OPTICALFLOW_DECLARE_SRV(FFX_OPTICALFLOW_BIND_SRV_INPUT_MOTION_VECTORS); + #endif + #if defined FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_INPUT + Texture2D r_optical_flow_input : FFX_OPTICALFLOW_DECLARE_SRV(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_INPUT); + #endif + #if defined FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_PREVIOUS_INPUT + Texture2D r_optical_flow_previous_input : FFX_OPTICALFLOW_DECLARE_SRV(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_PREVIOUS_INPUT); + #endif + #if defined FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW + Texture2D r_optical_flow : FFX_OPTICALFLOW_DECLARE_SRV(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW); + #endif + #if defined FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_PREVIOUS + Texture2D r_optical_flow_previous : FFX_OPTICALFLOW_DECLARE_SRV(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_PREVIOUS); + #endif + #if defined FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_ADDITIONAL_INFO + Texture2D r_optical_flow_additional_info : FFX_OPTICALFLOW_DECLARE_SRV(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_ADDITIONAL_INFO); + #endif + #if defined FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_ADDITIONAL_INFO_PREVIOUS + Texture2D r_optical_flow_additional_info_previous : FFX_OPTICALFLOW_DECLARE_SRV(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_ADDITIONAL_INFO_PREVIOUS); + #endif + #if defined FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_HISTOGRAM + Texture2D r_optical_flow_histogram : FFX_OPTICALFLOW_DECLARE_SRV(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_HISTOGRAM); + #endif + #if defined FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_GLOBAL_MOTION_SEARCH + Texture2D r_optical_flow_global_motion_search : FFX_OPTICALFLOW_DECLARE_SRV(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_GLOBAL_MOTION_SEARCH); + #endif + + // UAV declarations + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT + RWTexture2D rw_optical_flow_input : FFX_OPTICALFLOW_DECLARE_UAV(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT); + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_1 + globallycoherent RWTexture2D rw_optical_flow_input_level_1 : FFX_OPTICALFLOW_DECLARE_UAV(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_1); + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_2 + globallycoherent RWTexture2D rw_optical_flow_input_level_2 : FFX_OPTICALFLOW_DECLARE_UAV(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_2); + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_3 + globallycoherent RWTexture2D rw_optical_flow_input_level_3 : FFX_OPTICALFLOW_DECLARE_UAV(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_3); + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_4 + globallycoherent RWTexture2D rw_optical_flow_input_level_4 : FFX_OPTICALFLOW_DECLARE_UAV(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_4); + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_5 + globallycoherent RWTexture2D rw_optical_flow_input_level_5 : FFX_OPTICALFLOW_DECLARE_UAV(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_5); + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_6 + globallycoherent RWTexture2D rw_optical_flow_input_level_6 : FFX_OPTICALFLOW_DECLARE_UAV(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_6); + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW + RWTexture2D rw_optical_flow : FFX_OPTICALFLOW_DECLARE_UAV(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW); + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_NEXT_LEVEL + RWTexture2D rw_optical_flow_next_level : FFX_OPTICALFLOW_DECLARE_UAV(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_NEXT_LEVEL); + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_ADDITIONAL_INFO + RWTexture2D rw_optical_flow_additional_info : FFX_OPTICALFLOW_DECLARE_UAV(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_ADDITIONAL_INFO); + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_ADDITIONAL_INFO_NEXT_LEVEL + RWTexture2D rw_optical_flow_additional_info_next_level : FFX_OPTICALFLOW_DECLARE_UAV(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_ADDITIONAL_INFO_NEXT_LEVEL); + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_HISTOGRAM + RWTexture2D rw_optical_flow_histogram : FFX_OPTICALFLOW_DECLARE_UAV(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_HISTOGRAM); + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_GLOBAL_MOTION_SEARCH + globallycoherent RWTexture2D rw_optical_flow_global_motion_search: FFX_OPTICALFLOW_DECLARE_UAV(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_GLOBAL_MOTION_SEARCH); + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_HISTOGRAM + RWTexture2D rw_optical_flow_scd_histogram : FFX_OPTICALFLOW_DECLARE_UAV(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_HISTOGRAM); + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_PREVIOUS_HISTOGRAM + RWTexture2D rw_optical_flow_scd_previous_histogram : FFX_OPTICALFLOW_DECLARE_UAV(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_PREVIOUS_HISTOGRAM); + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_TEMP + RWTexture2D rw_optical_flow_scd_temp : FFX_OPTICALFLOW_DECLARE_UAV(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_TEMP); + #endif + #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_OUTPUT + RWTexture2D rw_optical_flow_scd_output : FFX_OPTICALFLOW_DECLARE_UAV(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_OUTPUT); + #endif + +#if defined(FFX_OPTICALFLOW_BIND_SRV_INPUT_COLOR) +FfxFloat32x4 LoadInputColor(FfxUInt32x2 iPxHistory) +{ + return r_input_color[iPxHistory]; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_SRV_INPUT_MOTION_VECTORS) +FfxFloat32x2 LoadGameMotionVector(FfxInt32x2 iPxPos) +{ + FfxFloat32x2 positionScale = FfxFloat32x2(RenderSize()) / DisplaySize(); + return r_input_motion_vectors[iPxPos * positionScale] * motionVectorScale / positionScale; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT) +void StoreOpticalFlowInput(FfxInt32x2 iPxPos, FfxUInt32 fLuma) +{ + rw_optical_flow_input[iPxPos] = fLuma; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_INPUT) +FfxUInt32 LoadOpticalFlowInput(FfxInt32x2 iPxPos) +{ +#if FFX_OPTICALFLOW_USE_MSAD4_INSTRUCTION == 1 + return max(1, r_optical_flow_input[iPxPos]); +#else + return r_optical_flow_input[iPxPos]; +#endif +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT) +FfxUInt32 LoadRwOpticalFlowInput(FfxInt32x2 iPxPos) +{ + return rw_optical_flow_input[iPxPos]; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_PREVIOUS_INPUT) +FfxUInt32 LoadOpticalFlowPreviousInput(FfxInt32x2 iPxPos) +{ +#if FFX_OPTICALFLOW_USE_MSAD4_INSTRUCTION == 1 + return max(1, r_optical_flow_previous_input[iPxPos]); +#else + return r_optical_flow_previous_input[iPxPos]; +#endif +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW) +FfxInt32x2 LoadOpticalFlow(FfxInt32x2 iPxPos) +{ + return r_optical_flow[iPxPos]; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW) +FfxInt32x2 LoadRwOpticalFlow(FfxInt32x2 iPxPos) +{ + return rw_optical_flow[iPxPos]; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_PREVIOUS) +FfxInt32x2 LoadPreviousOpticalFlow(FfxInt32x2 iPxPos) +{ + return r_optical_flow_previous[iPxPos]; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW) +void StoreOpticalFlow(FfxInt32x2 iPxPos, FfxInt32x2 motionVector) +{ + rw_optical_flow[iPxPos] = motionVector; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_NEXT_LEVEL) +void StoreOpticalFlowNextLevel(FfxInt32x2 iPxPos, FfxInt32x2 motionVector) +{ + rw_optical_flow_next_level[iPxPos] = motionVector; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_ADDITIONAL_INFO) +FfxUInt32x2 LoadOpticalFlowAdditionalInfo(FfxInt32x2 iPxPos) +{ + return r_optical_flow_additional_info[iPxPos]; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_ADDITIONAL_INFO) +FfxUInt32x2 LoadRwOpticalFlowAdditionalInfo(FfxInt32x2 iPxPos) +{ + return rw_optical_flow_additional_info[iPxPos]; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_ADDITIONAL_INFO_PREVIOUS) +FfxUInt32x2 LoadPreviousOpticalFlowAdditionalInfo(FfxInt32x2 iPxPos) +{ + return r_optical_flow_additional_info_previous[iPxPos]; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_ADDITIONAL_INFO) +void StoreOpticalFlowAdditionalInfo(FfxInt32x2 iPxPos, FfxUInt32x2 additionalInfo) +{ + rw_optical_flow_additional_info[iPxPos] = additionalInfo; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_ADDITIONAL_INFO_NEXT_LEVEL) +void StoreOpticalFlowNextLevelAdditionalInfo(FfxInt32x2 iPxPos, FfxUInt32x2 additionalInfo) +{ + rw_optical_flow_additional_info_next_level[iPxPos] = additionalInfo; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_HISTOGRAM) +FfxUInt32 LoadOpticalFlowHistogram(FfxInt32x2 iBucketId) +{ + return r_optical_flow_histogram[iBucketId]; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_HISTOGRAM) +void AtomicIncrementOpticalFlowHistogram(FfxInt32x2 iBucketId) +{ + InterlockedAdd(rw_optical_flow_histogram[iBucketId], 1); +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_GLOBAL_MOTION_SEARCH) +FfxInt32x2 LoadGlobalMotionVector() +{ + FfxInt32 vx = FfxInt32(r_optical_flow_global_motion_search[FfxInt32x2(0, 0)]); + FfxInt32 vy = FfxInt32(r_optical_flow_global_motion_search[FfxInt32x2(1, 0)]); + return FfxInt32x2(vx, vy); +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_GLOBAL_MOTION_SEARCH) +FfxInt32x2 LoadRwGlobalMotionVector() +{ + FfxInt32 vx = FfxInt32(rw_optical_flow_global_motion_search[FfxInt32x2(0, 0)]); + FfxInt32 vy = FfxInt32(rw_optical_flow_global_motion_search[FfxInt32x2(1, 0)]); + return FfxInt32x2(vx, vy); +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_GLOBAL_MOTION_SEARCH) +FfxUInt32 LoadGlobalMotionValue(FfxInt32 index) +{ + return rw_optical_flow_global_motion_search[FfxInt32x2(index, 0)]; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_GLOBAL_MOTION_SEARCH) +void StoreGlobalMotionValue(FfxInt32 index, FfxUInt32 value) +{ + rw_optical_flow_global_motion_search[FfxInt32x2(index, 0)] = value; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_GLOBAL_MOTION_SEARCH) +FfxUInt32 AtomicIncrementGlobalMotionValue(FfxInt32 index) +{ + FfxUInt32 initialValue; + InterlockedAdd(rw_optical_flow_global_motion_search[FfxInt32x2(index, 0)], 1, initialValue); + return initialValue; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_HISTOGRAM) +FfxUInt32 LoadRwSCDHistogram(FfxInt32 iIndex) +{ + return rw_optical_flow_scd_histogram[FfxInt32x2(iIndex, 0)]; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_HISTOGRAM) +void StoreSCDHistogram(FfxInt32 iIndex, FfxUInt32 value) +{ + rw_optical_flow_scd_histogram[FfxInt32x2(iIndex, 0)] = value; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_HISTOGRAM) +void AtomicIncrementSCDHistogram(FfxInt32 iIndex, FfxUInt32 valueToAdd) +{ + InterlockedAdd(rw_optical_flow_scd_histogram[FfxInt32x2(iIndex, 0)], valueToAdd); +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_PREVIOUS_HISTOGRAM) +FfxFloat32 LoadRwSCDPreviousHistogram(FfxInt32 iIndex) +{ + return rw_optical_flow_scd_previous_histogram[FfxInt32x2(iIndex, 0)]; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_PREVIOUS_HISTOGRAM) +void StoreSCDPreviousHistogram(FfxInt32 iIndex, FfxFloat32 value) +{ + rw_optical_flow_scd_previous_histogram[FfxInt32x2(iIndex, 0)] = value; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_TEMP) +FfxUInt32 LoadRwSCDTemp(FfxInt32 iIndex) +{ + return rw_optical_flow_scd_temp[FfxInt32x2(iIndex, 0)]; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_TEMP) +void AtomicIncrementSCDTemp(FfxInt32 iIndex, FfxUInt32 valueToAdd) +{ + InterlockedAdd(rw_optical_flow_scd_temp[FfxInt32x2(iIndex, 0)], valueToAdd); +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_TEMP) +void ResetSCDTemp() +{ + rw_optical_flow_scd_temp[FfxInt32x2(0, 0)] = 0; + rw_optical_flow_scd_temp[FfxInt32x2(1, 0)] = 0; + rw_optical_flow_scd_temp[FfxInt32x2(2, 0)] = 0; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_OUTPUT) +FfxUInt32 LoadRwSCDOutput(FfxInt32 iIndex) +{ + return rw_optical_flow_scd_output[FfxInt32x2(iIndex, 0)]; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_OUTPUT) +void StoreSCDOutput(FfxInt32 iIndex, FfxUInt32 value) +{ + rw_optical_flow_scd_output[FfxInt32x2(iIndex, 0)] = value; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_OUTPUT) +FfxUInt32 AtomicIncrementSCDOutput(FfxInt32 iIndex, FfxUInt32 valueToAdd) +{ + FfxUInt32 initialValue; + InterlockedAdd(rw_optical_flow_scd_output[FfxInt32x2(iIndex, 0)], valueToAdd, initialValue); + return initialValue; +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_DEBUG_VISUALIZATION) +void StoreDebugVisualization(FfxUInt32x2 iPxPos, FfxFloat32x3 fColor) +{ + rw_debug_visualization[iPxPos] = FfxFloat32x4(fColor, 1.f); +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_OUTPUT) +FfxFloat32 GetSceneChangeValue() +{ + if (FrameIndex() <= 5) + return 1.0; + else + return ffxAsFloat(LoadRwSCDOutput(SCD_OUTPUT_SCENE_CHANGE_SLOT)); +} + +FfxBoolean IsSceneChanged() +{ + if (FrameIndex() <= 5) + { + return 1.0; + } + else + { + return (LoadRwSCDOutput(SCD_OUTPUT_HISTORY_BITS_SLOT) & 0xfu) != 0; + } +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_INPUT) +FfxUInt32 LoadFirstImagePackedLuma(FfxInt32x2 iPxPos) +{ + const FfxInt32 lumaTextureWidth = DisplaySize().x >> OpticalFlowPyramidLevel(); + const FfxInt32 lumaTextureHeight = DisplaySize().y >> OpticalFlowPyramidLevel(); + + FfxInt32x2 adjustedPos = FfxInt32x2( + ffxClamp(iPxPos.x, 0, lumaTextureWidth - 4), + ffxClamp(iPxPos.y, 0, lumaTextureHeight - 1) + ); + + FfxUInt32 luma0 = LoadOpticalFlowInput(adjustedPos + FfxInt32x2(0, 0)); + FfxUInt32 luma1 = LoadOpticalFlowInput(adjustedPos + FfxInt32x2(1, 0)); + FfxUInt32 luma2 = LoadOpticalFlowInput(adjustedPos + FfxInt32x2(2, 0)); + FfxUInt32 luma3 = LoadOpticalFlowInput(adjustedPos + FfxInt32x2(3, 0)); + + return GetPackedLuma(lumaTextureWidth, iPxPos.x, luma0, luma1, luma2, luma3); +} +#endif + +#if defined(FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_PREVIOUS_INPUT) +FfxUInt32 LoadSecondImagePackedLuma(FfxInt32x2 iPxPos) +{ + const FfxInt32 lumaTextureWidth = DisplaySize().x >> OpticalFlowPyramidLevel(); + const FfxInt32 lumaTextureHeight = DisplaySize().y >> OpticalFlowPyramidLevel(); + + FfxInt32x2 adjustedPos = FfxInt32x2( + ffxClamp(iPxPos.x, 0, lumaTextureWidth - 4), + ffxClamp(iPxPos.y, 0, lumaTextureHeight - 1) + ); + + FfxUInt32 luma0 = LoadOpticalFlowPreviousInput(adjustedPos + FfxInt32x2(0, 0)); + FfxUInt32 luma1 = LoadOpticalFlowPreviousInput(adjustedPos + FfxInt32x2(1, 0)); + FfxUInt32 luma2 = LoadOpticalFlowPreviousInput(adjustedPos + FfxInt32x2(2, 0)); + FfxUInt32 luma3 = LoadOpticalFlowPreviousInput(adjustedPos + FfxInt32x2(3, 0)); + + return GetPackedLuma(lumaTextureWidth, iPxPos.x, luma0, luma1, luma2, luma3); +} +#endif + + +void SPD_SetMipmap(int2 iPxPos, int index, float value) +{ + switch (index) + { + case 0: +#if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_1 + rw_optical_flow_input_level_1[iPxPos] = value; +#endif // #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_1 + break; + case 1: +#if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_2 + rw_optical_flow_input_level_2[iPxPos] = value; +#endif // #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_2 + break; + case 2: +#if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_3 + rw_optical_flow_input_level_3[iPxPos] = value; +#endif // #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_3 + break; + case 3: +#if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_4 + rw_optical_flow_input_level_4[iPxPos] = value; +#endif // #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_4 + break; + case 4: +#if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_5 + rw_optical_flow_input_level_5[iPxPos] = value; +#endif // #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_5 + break; + case 5: +#if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_6 + rw_optical_flow_input_level_6[iPxPos] = value; +#endif // #if defined FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_6 + break; + } +} + +#endif // #if defined(FFX_GPU) + +#endif // FFX_OPTICALFLOW_CALLBACKS_HLSL_H diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_common.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_common.h new file mode 100644 index 000000000..907e7ac79 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_common.h @@ -0,0 +1,99 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if !defined(FFX_OPTICALFLOW_COMMON_H) +#define FFX_OPTICALFLOW_COMMON_H + +#if defined(FFX_GPU) + +#define SCD_OUTPUT_SCENE_CHANGE_SLOT 0 +#define SCD_OUTPUT_HISTORY_BITS_SLOT 1 +#define SCD_OUTPUT_COMPLETED_WORKGROUPS_SLOT 2 + + +#define ffxClamp(x, a, b) (ffxMax(a, ffxMin(b, x))) + + +FfxUInt32 GetPackedLuma(FfxInt32 width, FfxInt32 x, FfxUInt32 luma0, FfxUInt32 luma1, FfxUInt32 luma2, FfxUInt32 luma3) +{ + FfxUInt32 packedLuma = luma0 | (luma1 << 8) | (luma2 << 16) | (luma3 << 24); + + if (x < 0) + { + FfxUInt32 outOfScreenFiller = packedLuma & 0xffu; + if (x <= -1) + packedLuma = (packedLuma << 8) | outOfScreenFiller; + if (x <= -2) + packedLuma = (packedLuma << 8) | outOfScreenFiller; + if (x <= -3) + packedLuma = (packedLuma << 8) | outOfScreenFiller; + } + else if (x > width - 4) + { + FfxUInt32 outOfScreenFiller = packedLuma & 0xff000000u; + if (x >= width - 3) + packedLuma = (packedLuma >> 8) | outOfScreenFiller; + if (x >= width - 2) + packedLuma = (packedLuma >> 8) | outOfScreenFiller; + if (x >= width - 1) + packedLuma = (packedLuma >> 8) | outOfScreenFiller; + } + return packedLuma; +} + +FfxUInt32 Sad(FfxUInt32 a, FfxUInt32 b) +{ +#if FFX_OPTICALFLOW_USE_MSAD4_INSTRUCTION == 1 + return msad4(a, FfxUInt32x2(b, 0), FfxUInt32x4(0, 0, 0, 0)).x; +#else + return abs(FfxInt32((a >> 0) & 0xffu) - FfxInt32((b >> 0) & 0xffu)) + + abs(FfxInt32((a >> 8) & 0xffu) - FfxInt32((b >> 8) & 0xffu)) + + abs(FfxInt32((a >> 16) & 0xffu) - FfxInt32((b >> 16) & 0xffu)) + + abs(FfxInt32((a >> 24) & 0xffu) - FfxInt32((b >> 24) & 0xffu)); +#endif +} + +FfxUInt32x4 QSad(FfxUInt32 a0, FfxUInt32 a1, FfxUInt32 b) +{ +#if FFX_OPTICALFLOW_USE_MSAD4_INSTRUCTION == 1 + return msad4(b, FfxUInt32x2(a0, a1), FfxUInt32x4(0, 0, 0, 0)); +#else + FfxUInt32x4 sad; + sad.x = Sad(a0, b); + + a0 = (a0 >> 8) | ((a1 & 0xffu) << 24); + a1 >>= 8; + sad.y = Sad(a0, b); + + a0 = (a0 >> 8) | ((a1 & 0xffu) << 24); + a1 >>= 8; + sad.z = Sad(a0, b); + + a0 = (a0 >> 8) | ((a1 & 0xffu) << 24); + sad.w = Sad(a0, b); + return sad; +#endif +} + +#endif // #if defined(FFX_GPU) + +#endif //!defined(FFX_OPTICALFLOW_COMMON_H) diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_compute_luminance_pyramid.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_compute_luminance_pyramid.h new file mode 100644 index 000000000..b83710c95 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_compute_luminance_pyramid.h @@ -0,0 +1,107 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_OPTICALFLOW_COMPUTE_LUMINANCE_PYRAMID_H +#define FFX_OPTICALFLOW_COMPUTE_LUMINANCE_PYRAMID_H + +FFX_GROUPSHARED FfxFloat32 spdIntermediateR[16][16]; +FFX_GROUPSHARED FfxFloat32 spdIntermediateG[16][16]; +FFX_GROUPSHARED FfxFloat32 spdIntermediateB[16][16]; +FFX_GROUPSHARED FfxFloat32 spdIntermediateA[16][16]; + +void SPD_IncreaseAtomicCounter(inout FfxUInt32 spdCounter) +{ +} + +void SPD_ResetAtomicCounter() +{ +} + +FfxFloat32x4 SpdLoadSourceImage(FfxFloat32x2 tex, FfxUInt32 slice) +{ + FfxFloat32 luma = LoadRwOpticalFlowInput(FfxInt32x2(tex)); + return FfxFloat32x4(luma, 0, 0, 0); +} + +FfxFloat32x4 SpdLoad(FfxInt32x2 tex, FfxUInt32 slice) +{ + return FfxFloat32x4(0, 0, 0, 0); +} + +void SpdStore(FfxInt32x2 pix, FfxFloat32x4 outValue, FfxUInt32 index, FfxUInt32 slice) +{ + SPD_SetMipmap(pix, index, outValue.r); +} + +void SpdIncreaseAtomicCounter(FfxUInt32 slice) +{ +} + +FfxUInt32 SpdGetAtomicCounter() +{ + return 0; +} + +void SpdResetAtomicCounter(FfxUInt32 slice) +{ + SPD_ResetAtomicCounter(); +} + +FfxFloat32x4 SpdLoadIntermediate(FfxUInt32 x, FfxUInt32 y) +{ + return FfxFloat32x4( + spdIntermediateR[x][y], + spdIntermediateG[x][y], + spdIntermediateB[x][y], + spdIntermediateA[x][y]); +} +void SpdStoreIntermediate(FfxUInt32 x, FfxUInt32 y, FfxFloat32x4 value) +{ + spdIntermediateR[x][y] = value.x; + spdIntermediateG[x][y] = value.y; + spdIntermediateB[x][y] = value.z; + spdIntermediateA[x][y] = value.w; +} +FfxFloat32x4 SpdReduce4(FfxFloat32x4 v0, FfxFloat32x4 v1, FfxFloat32x4 v2, FfxFloat32x4 v3) +{ + return (v0 + v1 + v2 + v3) * 0.25; +} + +#ifdef FFX_HALF +#undef FFX_HALF +#endif + +// https://github.com/GPUOpen-Effects/FidelityFX-SPD/blob/master/docs/FidelityFX_SPD.pdf +#include "spd/ffx_spd.h" + +void ComputeOpticalFlowInputPyramid(FfxInt32x2 iGroupId, FfxInt32 iLocalIndex) +{ + SpdDownsample( + FfxUInt32x2(iGroupId.xy), + FfxUInt32(iLocalIndex), + 6, // mip levels to generate + FfxUInt32(NumWorkGroups()), + 1 // single slice + ); +} + +#endif // FFX_OPTICALFLOW_COMPUTE_LUMINANCE_PYRAMID_H diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_compute_optical_flow_v5.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_compute_optical_flow_v5.h new file mode 100644 index 000000000..9c1b522b6 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_compute_optical_flow_v5.h @@ -0,0 +1,279 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_OPTICALFLOW_COMPUTE_OPTICAL_FLOW_V5_H +#define FFX_OPTICALFLOW_COMPUTE_OPTICAL_FLOW_V5_H + +#define CompareSize (4 * 2) +#define BlockSizeY 8 +#define BlockSizeX 8 +#define ThreadCount (4 * 16) +#define SearchRadiusX (8) +#define SearchRadiusY (8) +#define BlockCount 2 + +#define SearchBufferSizeX ((CompareSize + SearchRadiusX*2)/4) +#define SearchBufferSizeY (CompareSize + SearchRadiusY*2) + +FFX_GROUPSHARED FfxUInt32 pixels[CompareSize][CompareSize / 4]; +FFX_GROUPSHARED FfxUInt32 searchBuffer[1][SearchBufferSizeY * SearchBufferSizeX]; +#define bankBreaker 1 +FFX_GROUPSHARED FfxUInt32 sadMapBuffer[4][SearchRadiusY * 2][(SearchRadiusX * 2) / 4 + bankBreaker]; + +#define MaxWaves 2 +FFX_GROUPSHARED FfxUInt32 sWaveSad[MaxWaves]; +FFX_GROUPSHARED FfxUInt32 sWaveMin[MaxWaves]; + +FfxUInt32 BlockSad64(FfxUInt32 blockSadSum, FfxInt32 iLocalIndex, FfxInt32 iLaneToBlockId, FfxInt32 block) +{ + if (iLaneToBlockId != block) + { + blockSadSum = 0u; + } + blockSadSum = ffxWaveSum(blockSadSum); + + if (ffxWaveLaneCount() == 32) + { + FfxInt32 waveId = iLocalIndex >> 5u; + if (ffxWaveIsFirstLane()) + { + sWaveSad[waveId] = blockSadSum; + } + FFX_GROUP_MEMORY_BARRIER; + blockSadSum += sWaveSad[waveId ^ 1]; + } + + return blockSadSum; +} + +FfxUInt32 SadMapMinReduction256(FfxInt32x2 iSearchId, FfxInt32 iLocalIndex) +{ + FfxUInt32 min01 = ffxMin(sadMapBuffer[0][iSearchId.y][iSearchId.x], sadMapBuffer[1][iSearchId.y][iSearchId.x]); + FfxUInt32 min23 = ffxMin(sadMapBuffer[2][iSearchId.y][iSearchId.x], sadMapBuffer[3][iSearchId.y][iSearchId.x]); + FfxUInt32 min0123 = ffxMin(min01, min23); + min0123 = ffxWaveMin(min0123); + + if (ffxWaveLaneCount() == 32) + { + FfxInt32 waveId = iLocalIndex >> 5u; + + if (ffxWaveIsFirstLane()) + { + sWaveMin[waveId] = min0123; + } + FFX_GROUP_MEMORY_BARRIER; + min0123 = ffxMin(min0123, sWaveMin[waveId ^ 1]); + } + + return min0123; +} + +void LoadSearchBuffer(FfxInt32 iLocalIndex, FfxInt32x2 iPxPosShifted) +{ + FfxInt32 baseX = (iPxPosShifted.x - SearchRadiusX); + FfxInt32 baseY = (iPxPosShifted.y - SearchRadiusY); + + for (FfxInt32 id = iLocalIndex; id < SearchBufferSizeX * SearchBufferSizeY; id += ThreadCount) + { + FfxInt32 idx = id % SearchBufferSizeX; + FfxInt32 idy = id / SearchBufferSizeX; + FfxInt32 x = baseX + idx * 4; + FfxInt32 y = baseY + idy; + searchBuffer[0][id] = LoadSecondImagePackedLuma(FfxInt32x2(x, y)); + } + FFX_GROUP_MEMORY_BARRIER; +} + +FfxUInt32x4 CalculateQSads2(FfxInt32x2 iSearchId) +{ + FfxUInt32x4 sad = ffxBroadcast4(0u); + +#if FFX_OPTICALFLOW_USE_MSAD4_INSTRUCTION == 1 + + FfxInt32 idx = iSearchId.y * 6 + iSearchId.x; + + sad = msad4(pixels[0][0], FfxUInt32x2(searchBuffer[0][idx], searchBuffer[0][idx + 1]), sad); + sad = msad4(pixels[0][1], FfxUInt32x2(searchBuffer[0][idx + 1], searchBuffer[0][idx + 2]), sad); + idx += 6; + sad = msad4(pixels[1][0], FfxUInt32x2(searchBuffer[0][idx], searchBuffer[0][idx + 1]), sad); + sad = msad4(pixels[1][1], FfxUInt32x2(searchBuffer[0][idx + 1], searchBuffer[0][idx + 2]), sad); + idx += 6; + sad = msad4(pixels[2][0], FfxUInt32x2(searchBuffer[0][idx], searchBuffer[0][idx + 1]), sad); + sad = msad4(pixels[2][1], FfxUInt32x2(searchBuffer[0][idx + 1], searchBuffer[0][idx + 2]), sad); + idx += 6; + sad = msad4(pixels[3][0], FfxUInt32x2(searchBuffer[0][idx], searchBuffer[0][idx + 1]), sad); + sad = msad4(pixels[3][1], FfxUInt32x2(searchBuffer[0][idx + 1], searchBuffer[0][idx + 2]), sad); + idx += 6; + sad = msad4(pixels[4][0], FfxUInt32x2(searchBuffer[0][idx], searchBuffer[0][idx + 1]), sad); + sad = msad4(pixels[4][1], FfxUInt32x2(searchBuffer[0][idx + 1], searchBuffer[0][idx + 2]), sad); + idx += 6; + sad = msad4(pixels[5][0], FfxUInt32x2(searchBuffer[0][idx], searchBuffer[0][idx + 1]), sad); + sad = msad4(pixels[5][1], FfxUInt32x2(searchBuffer[0][idx + 1], searchBuffer[0][idx + 2]), sad); + idx += 6; + sad = msad4(pixels[6][0], FfxUInt32x2(searchBuffer[0][idx], searchBuffer[0][idx + 1]), sad); + sad = msad4(pixels[6][1], FfxUInt32x2(searchBuffer[0][idx + 1], searchBuffer[0][idx + 2]), sad); + idx += 6; + sad = msad4(pixels[7][0], FfxUInt32x2(searchBuffer[0][idx], searchBuffer[0][idx + 1]), sad); + sad = msad4(pixels[7][1], FfxUInt32x2(searchBuffer[0][idx + 1], searchBuffer[0][idx + 2]), sad); + +#else + for (FfxInt32 dy = 0; dy < CompareSize; dy++) + { + FfxInt32 rowOffset = (iSearchId.y + dy) * SearchBufferSizeX; + FfxUInt32 a0 = searchBuffer[0][rowOffset + iSearchId.x]; + FfxUInt32 a1 = searchBuffer[0][rowOffset + iSearchId.x + 1]; + FfxUInt32 a2 = searchBuffer[0][rowOffset + iSearchId.x + 2]; + sad += QSad(a0, a1, pixels[dy][0]); + sad += QSad(a1, a2, pixels[dy][1]); + } +#endif + + return sad; +} + +FfxUInt32x2 abs_2(FfxInt32x2 val) +{ + FfxInt32x2 tmp = val; + FfxInt32x2 mask = tmp >> 31; + FfxUInt32x2 res = (tmp + mask) ^ mask; + return res; +} + +FfxUInt32 EncodeSearchCoord(FfxInt32x2 coord) +{ +#if FFX_OPTICALFLOW_FIX_TOP_LEFT_BIAS == 1 + FfxUInt32x2 absCoord = FfxUInt32x2(abs_2(coord - 8)); + return FfxUInt32(absCoord.y << 12) | FfxUInt32(absCoord.x << 8) | FfxUInt32(coord.y << 4) | FfxUInt32(coord.x); +#else //FFX_OPTICALFLOW_FIX_TOP_LEFT_BIAS == 1 + return FfxUInt32(coord.y << 8) | FfxUInt32(coord.x); +#endif //FFX_OPTICALFLOW_FIX_TOP_LEFT_BIAS == 1 +} + +FfxInt32x2 DecodeSearchCoord(FfxUInt32 bits) +{ +#if FFX_OPTICALFLOW_FIX_TOP_LEFT_BIAS == 1 + FfxInt32 dx = FfxInt32(bits & 0xfu) - SearchRadiusX; + FfxInt32 dy = FfxInt32((bits >> 4) & 0xfu) - SearchRadiusY; + + return FfxInt32x2(dx, dy); +#else + FfxInt32 dx = FfxInt32(bits & 0xffu) - SearchRadiusX; + FfxInt32 dy = FfxInt32((bits >> 8) & 0xffu) - SearchRadiusY; + + return FfxInt32x2(dx, dy); +#endif +} + +void PrepareSadMap(FfxInt32x2 iSearchId, FfxUInt32x4 qsad) +{ + sadMapBuffer[0][iSearchId.y][iSearchId.x] = (qsad.x << 16) | EncodeSearchCoord(FfxInt32x2(iSearchId.x * 4 + 0, iSearchId.y)); + sadMapBuffer[1][iSearchId.y][iSearchId.x] = (qsad.y << 16) | EncodeSearchCoord(FfxInt32x2(iSearchId.x * 4 + 1, iSearchId.y)); + sadMapBuffer[2][iSearchId.y][iSearchId.x] = (qsad.z << 16) | EncodeSearchCoord(FfxInt32x2(iSearchId.x * 4 + 2, iSearchId.y)); + sadMapBuffer[3][iSearchId.y][iSearchId.x] = (qsad.w << 16) | EncodeSearchCoord(FfxInt32x2(iSearchId.x * 4 + 3, iSearchId.y)); + FFX_GROUP_MEMORY_BARRIER; +} + + +uint ABfe(uint src, uint off, uint bits) { uint mask = (1u << bits) - 1u; return (src >> off) & mask; } +uint ABfi(uint src, uint ins, uint mask) { return (ins & mask) | (src & (~mask)); } +uint ABfiM(uint src, uint ins, uint bits) { uint mask = (1u << bits) - 1u; return (ins & mask) | (src & (~mask)); } +void MapThreads(in FfxInt32x2 iGroupId, in FfxInt32 iLocalIndex, + out FfxInt32x2 iSearchId, out FfxInt32x2 iPxPos, out FfxInt32 iLaneToBlockId) +{ + iSearchId = FfxInt32x2(ABfe(iLocalIndex, 0u, 2u), ABfe(iLocalIndex, 2u, 4u)); + iLaneToBlockId = FfxInt32(ABfe(iLocalIndex, 1u, 1u) | (ABfe(iLocalIndex, 5u, 1u) << 1u)); + iPxPos = (iGroupId << 4u) + iSearchId * FfxInt32x2(4, 1); +} + +void ComputeOpticalFlowAdvanced(FfxInt32x2 iGlobalId, FfxInt32x2 iLocalId, FfxInt32x2 iGroupId, FfxInt32 iLocalIndex) +{ + FfxInt32x2 iSearchId; + FfxInt32x2 iPxPos; + FfxInt32 iLaneToBlockId; + MapThreads(iGroupId, iLocalIndex, iSearchId, iPxPos, iLaneToBlockId); + + FfxInt32x2 currentOFPos = iPxPos >> 3u; + + if (IsSceneChanged()) + { + if ((iSearchId.y & 0x7) == 0 && (iSearchId.x & 0x1) == 0) + { + StoreOpticalFlow(currentOFPos, FfxInt32x2(0, 0)); + } + + return; + } + + const FfxBoolean bUsePredictionFromPreviousLevel = (OpticalFlowPyramidLevel() != OpticalFlowPyramidLevelCount() - 1); + + FfxUInt32 packedLuma_4blocks = LoadFirstImagePackedLuma(iPxPos); + +#if FFX_LOCAL_SEARCH_FALLBACK == 1 + FfxUInt32 prevPackedLuma_4blocks = LoadSecondImagePackedLuma(iPxPos); + FfxUInt32 sad_4blocks = Sad(packedLuma_4blocks, prevPackedLuma_4blocks); +#endif //FFX_LOCAL_SEARCH_FALLBACK + + FfxInt32x2 ofGroupOffset = iGroupId << 1u; + FfxInt32x2 pixelGroupOffset = iGroupId << 4u; + + FfxInt32x2 blockId; + for (blockId.y = 0; blockId.y < BlockCount; blockId.y++) + { + for (blockId.x = 0; blockId.x < BlockCount; blockId.x++) + { + FfxInt32x2 currentVector = LoadRwOpticalFlow(ofGroupOffset + blockId); + if (!bUsePredictionFromPreviousLevel) + { + currentVector = FfxInt32x2(0, 0); + } + + if (iLaneToBlockId == blockId.y * 2 + blockId.x) + { + pixels[iSearchId.y & 0x7][iSearchId.x & 0x1] = packedLuma_4blocks; + } + + LoadSearchBuffer(iLocalIndex, pixelGroupOffset + blockId * 8 + currentVector); + + FfxUInt32x4 qsad = CalculateQSads2(iSearchId); + + PrepareSadMap(iSearchId, qsad); + FfxUInt32 minSad = SadMapMinReduction256(iSearchId, iLocalIndex); + + FfxInt32x2 minSadCoord = DecodeSearchCoord(minSad); + FfxInt32x2 newVector = currentVector + minSadCoord; + +#if FFX_LOCAL_SEARCH_FALLBACK == 1 + FfxUInt32 blockSadSum = BlockSad64(sad_4blocks, iLocalIndex, iLaneToBlockId, blockId.x + blockId.y * 2); + if (OpticalFlowPyramidLevel() == 0 && blockSadSum <= (minSad >> 16u)) + { + newVector = FfxInt32x2(0, 0); + } +#endif //FFX_LOCAL_SEARCH_FALLBACK + + { + StoreOpticalFlow(ofGroupOffset + blockId, newVector); + } + } + } +} + +#endif // FFX_OPTICALFLOW_COMPUTE_OPTICAL_FLOW_V5_H diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_compute_scd_divergence.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_compute_scd_divergence.h new file mode 100644 index 000000000..7f473f657 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_compute_scd_divergence.h @@ -0,0 +1,159 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_OPTICALFLOW_COMPUTE_SCD_DIVERGENCE_H +#define FFX_OPTICALFLOW_COMPUTE_SCD_DIVERGENCE_H + +FFX_GROUPSHARED FfxFloat32 sourceHistogram[256]; +FFX_GROUPSHARED FfxFloat32 filteredHistogram[256]; +FFX_GROUPSHARED FfxFloat32 tempBuffer[256]; +FFX_GROUPSHARED FfxFloat32x2 tempBuffer2[256]; + +void ComputeSCDHistogramsDivergence(FfxInt32x3 iGlobalId, FfxInt32x2 iLocalId, FfxInt32 iLocalIndex, FfxInt32x2 iGroupId, FfxInt32x2 iGroupSize) +{ + FFX_STATIC const FfxFloat32 Factor = 1000000.0; + FFX_STATIC const FfxInt32 WhereToStop = 3*9 - 1; + FFX_STATIC const FfxInt32 HistogramCount = 3 * 3; + + FFX_STATIC const FfxFloat32 Kernel[] = { + 0.0088122291, 0.027143577, 0.065114059, 0.12164907, 0.17699835, 0.20056541 + }; + + sourceHistogram[iLocalIndex] = FfxFloat32(LoadRwSCDHistogram(iGlobalId.x)); + FFX_GROUP_MEMORY_BARRIER; + + const FfxInt32 kernelShift = -5; + const FfxInt32 indexToRead = iLocalIndex + kernelShift; + + FfxFloat32 val = 0.0; + val += Kernel[0] * sourceHistogram[ffxClamp(indexToRead + 0, 0, 255)]; + val += Kernel[1] * sourceHistogram[ffxClamp(indexToRead + 1, 0, 255)]; + val += Kernel[2] * sourceHistogram[ffxClamp(indexToRead + 2, 0, 255)]; + val += Kernel[3] * sourceHistogram[ffxClamp(indexToRead + 3, 0, 255)]; + val += Kernel[4] * sourceHistogram[ffxClamp(indexToRead + 4, 0, 255)]; + val += Kernel[5] * sourceHistogram[ffxClamp(indexToRead + 5, 0, 255)]; + val += Kernel[4] * sourceHistogram[ffxClamp(indexToRead + 6, 0, 255)]; + val += Kernel[3] * sourceHistogram[ffxClamp(indexToRead + 7, 0, 255)]; + val += Kernel[2] * sourceHistogram[ffxClamp(indexToRead + 8, 0, 255)]; + val += Kernel[1] * sourceHistogram[ffxClamp(indexToRead + 9, 0, 255)]; + val += Kernel[0] * sourceHistogram[ffxClamp(indexToRead + 10, 0, 255)]; + + val += 1.0; + + if (iGlobalId.y == 0) + { + if (iLocalIndex == 0) + filteredHistogram[255] = 1.0; + else + filteredHistogram[iLocalIndex - 1] = val; + } + else if (iGlobalId.y == 1) + { + filteredHistogram[iLocalIndex] = val; + } + else if (iGlobalId.y == 2) + { + if (iLocalIndex == 255) + filteredHistogram[0] = 1.0; + else + filteredHistogram[iLocalIndex + 1] = val; + } + FFX_GROUP_MEMORY_BARRIER; + + tempBuffer[iLocalIndex] = filteredHistogram[iLocalIndex]; + FFX_GROUP_MEMORY_BARRIER; + + if (iLocalIndex < 128) tempBuffer[iLocalIndex] += tempBuffer[iLocalIndex + 128]; + FFX_GROUP_MEMORY_BARRIER; + + if (iLocalIndex < 64) tempBuffer[iLocalIndex] += tempBuffer[iLocalIndex + 64]; + FFX_GROUP_MEMORY_BARRIER; + + if (iLocalIndex < 32) tempBuffer[iLocalIndex] += tempBuffer[iLocalIndex + 32]; + if (iLocalIndex < 16) tempBuffer[iLocalIndex] += tempBuffer[iLocalIndex + 16]; + if (iLocalIndex < 8 ) tempBuffer[iLocalIndex] += tempBuffer[iLocalIndex + 8]; + if (iLocalIndex < 4 ) tempBuffer[iLocalIndex] += tempBuffer[iLocalIndex + 4]; + if (iLocalIndex < 2 ) tempBuffer[iLocalIndex] += tempBuffer[iLocalIndex + 2]; + if (iLocalIndex < 1 ) tempBuffer[iLocalIndex] += tempBuffer[iLocalIndex + 1]; + FFX_GROUP_MEMORY_BARRIER; + + filteredHistogram[iLocalIndex] /= tempBuffer[0]; + + FfxFloat32 currentFilteredHistogramsValue = filteredHistogram[iLocalIndex]; + FfxFloat32 previousHistogramsValue = LoadRwSCDPreviousHistogram(iGlobalId.x); + + tempBuffer2[iLocalIndex] = FfxFloat32x2( + currentFilteredHistogramsValue * log(currentFilteredHistogramsValue / previousHistogramsValue), + previousHistogramsValue * log(previousHistogramsValue / currentFilteredHistogramsValue) + ); + FFX_GROUP_MEMORY_BARRIER; + + if (iLocalIndex < 128) tempBuffer2[iLocalIndex] += tempBuffer2[iLocalIndex + 128]; + FFX_GROUP_MEMORY_BARRIER; + + if (iLocalIndex < 64) tempBuffer2[iLocalIndex] += tempBuffer2[iLocalIndex + 64]; + FFX_GROUP_MEMORY_BARRIER; + + if (iLocalIndex < 32) tempBuffer2[iLocalIndex] += tempBuffer2[iLocalIndex + 32]; + if (iLocalIndex < 16) tempBuffer2[iLocalIndex] += tempBuffer2[iLocalIndex + 16]; + if (iLocalIndex < 8 ) tempBuffer2[iLocalIndex] += tempBuffer2[iLocalIndex + 8]; + if (iLocalIndex < 4 ) tempBuffer2[iLocalIndex] += tempBuffer2[iLocalIndex + 4]; + if (iLocalIndex < 2 ) tempBuffer2[iLocalIndex] += tempBuffer2[iLocalIndex + 2]; + + if (iLocalIndex == 0) + { + FfxFloat32x2 sum = tempBuffer2[0] + tempBuffer2[1]; + + FfxFloat32 resFloat = 1 - exp(-(abs(sum.x) + abs(sum.y))); + FfxUInt32 resUInt = FfxUInt32((resFloat / FfxFloat32(HistogramCount)) * Factor); + AtomicIncrementSCDTemp(iGlobalId.y, resUInt); + + FfxUInt32 oldFinishedGroupCount = AtomicIncrementSCDOutput(SCD_OUTPUT_COMPLETED_WORKGROUPS_SLOT, 1); + if (oldFinishedGroupCount == WhereToStop) + { + FfxUInt32 res0 = LoadRwSCDTemp(0); + FfxUInt32 res1 = LoadRwSCDTemp(1); + FfxUInt32 res2 = LoadRwSCDTemp(2); + FfxFloat32 sceneChangeValue = ffxMin(res0, ffxMin(res1, res2)) / Factor; + + FfxUInt32 history = LoadRwSCDOutput(SCD_OUTPUT_HISTORY_BITS_SLOT) << 1; + if (CrossedSceneChangeThreshold(sceneChangeValue)) + { + history |= 1; + } + StoreSCDOutput(SCD_OUTPUT_SCENE_CHANGE_SLOT, ffxAsUInt32(sceneChangeValue)); + StoreSCDOutput(SCD_OUTPUT_HISTORY_BITS_SLOT, history); + StoreSCDOutput(SCD_OUTPUT_COMPLETED_WORKGROUPS_SLOT, 0); + + ResetSCDTemp(); + } + } + + if (iGlobalId.y == 1) + { + StoreSCDPreviousHistogram(iGlobalId.x, currentFilteredHistogramsValue); + + StoreSCDHistogram(iGlobalId.x, 0); + } +} + +#endif // FFX_OPTICALFLOW_COMPUTE_SCD_DIVERGENCE_H diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_filter_optical_flow_v5.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_filter_optical_flow_v5.h new file mode 100644 index 000000000..8ebf0beb1 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_filter_optical_flow_v5.h @@ -0,0 +1,58 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_OPTICALFLOW_FILTER_OPTICAL_FLOW_V5_H +#define FFX_OPTICALFLOW_FILTER_OPTICAL_FLOW_V5_H + +void FilterOpticalFlow(FfxInt32x2 iGlobalId, FfxInt32x2 iLocalId, FfxInt32x2 iGroupId, FfxInt32 iLocalIndex) +{ + FfxInt32x2 tmpMV[9]; + FfxInt32 idx = 0; + for (FfxInt32 xx = -1; xx < 2; xx++) + { + for (FfxInt32 yy = -1; yy < 2; yy++) + { + + tmpMV[idx] = LoadPreviousOpticalFlow(iGlobalId + FfxInt32x2(xx, yy)); + idx++; + } + } + + FfxUInt32 ret = 0xFFFFFFFF; + for (FfxInt32 i = 0; i < 9; ++i) + { + FfxUInt32 tmp = 0; + for (FfxInt32 j = 0; j < 9; ++j) + { + FfxInt32x2 delta = tmpMV[i] - tmpMV[j]; + tmp = delta.x * delta.x + (delta.y * delta.y + tmp); + } + + ret = min(((tmp) << 4) | i, ret); + } + + FfxUInt32 minIdx = ret & 0xF; + + StoreOpticalFlow(iGlobalId, tmpMV[minIdx]); +} + +#endif // FFX_OPTICALFLOW_FILTER_OPTICAL_FLOW_V5_H diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_generate_scd_histogram.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_generate_scd_histogram.h new file mode 100644 index 000000000..aead43868 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_generate_scd_histogram.h @@ -0,0 +1,92 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_OPTICALFLOW_GENERATE_SCD_HISTOGRAM_H +#define FFX_OPTICALFLOW_GENERATE_SCD_HISTOGRAM_H + +#define LBASE 10 + +FFX_GROUPSHARED FfxUInt32 scdBuffer[256 * LBASE]; + +void GenerateSceneChangeDetectionHistogram(FfxInt32x3 iGlobalId, FfxInt32x2 iLocalId, FfxInt32 iLocalIndex, FfxInt32x2 iGroupId, FfxInt32x2 iGroupSize) +{ + FFX_STATIC const FfxUInt32 HistogramsPerDim = 3; + + FfxUInt32 divX = DisplaySize().x / HistogramsPerDim; + FfxUInt32 divY = DisplaySize().y / HistogramsPerDim; + + FfxUInt32 nx = iGlobalId.z % HistogramsPerDim; + FfxUInt32 ny = iGlobalId.z / HistogramsPerDim; + FfxUInt32 startX = divX * nx; + FfxUInt32 startY = divY * ny; + FfxUInt32 stopX = startX + divX; + FfxUInt32 stopY = startY + divY; + + const FfxUInt32 bufferOffset = iLocalIndex * LBASE; + + for (FfxInt32 i = 0; i < LBASE; i++) + { + scdBuffer[bufferOffset + i] = 0; + } + FFX_GROUP_MEMORY_BARRIER; + + FfxInt32x2 coord = FfxInt32x2(startX + (4 * iGlobalId.x), startY + iGlobalId.y); + if (coord.x < stopX) + { + for (; coord.y < stopY; coord.y += 128) + { + FfxUInt32x4 color = FfxUInt32x4( + LoadOpticalFlowInput(coord + FfxInt32x2(0, 0)), + LoadOpticalFlowInput(coord + FfxInt32x2(1, 0)), + LoadOpticalFlowInput(coord + FfxInt32x2(2, 0)), + LoadOpticalFlowInput(coord + FfxInt32x2(3, 0)) + ); + color *= LBASE; + + FfxUInt32 scramblingOffset = iLocalIndex % LBASE; + +#if defined(FFX_HLSL) + InterlockedAdd(scdBuffer[color.x + scramblingOffset], 1); + InterlockedAdd(scdBuffer[color.y + scramblingOffset], 1); + InterlockedAdd(scdBuffer[color.z + scramblingOffset], 1); + InterlockedAdd(scdBuffer[color.w + scramblingOffset], 1); +#elif defined(FFX_GLSL) + atomicAdd(scdBuffer[color.x + scramblingOffset], 1); + atomicAdd(scdBuffer[color.y + scramblingOffset], 1); + atomicAdd(scdBuffer[color.z + scramblingOffset], 1); + atomicAdd(scdBuffer[color.w + scramblingOffset], 1); +#endif + } + } + FFX_GROUP_MEMORY_BARRIER; + + FfxUInt32 value = 0; + for (FfxInt32 i = 0; i < LBASE; i++) + { + value += scdBuffer[bufferOffset + i]; + } + + FfxUInt32 histogramStart = (iGroupSize.x * iGroupSize.y) * iGlobalId.z; + AtomicIncrementSCDHistogram(FfxInt32(histogramStart + iLocalIndex), value); +} + +#endif // FFX_OPTICALFLOW_GENERATE_SCD_HISTOGRAM_H diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_prepare_luma.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_prepare_luma.h new file mode 100644 index 000000000..57fd8a74b --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_prepare_luma.h @@ -0,0 +1,106 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_OPTICALFLOW_PREPARE_LUMA_H +#define FFX_OPTICALFLOW_PREPARE_LUMA_H + +FfxFloat32 LuminanceToPerceivedLuminance(FfxFloat32 fLuminance) +{ + FfxFloat32 fPercievedLuminance = 0; + if (fLuminance <= 216.0f / 24389.0f) { + fPercievedLuminance = fLuminance * (24389.0f / 27.0f); + } + else { + fPercievedLuminance = ffxPow(fLuminance, 1.0f / 3.0f) * 116.0f - 16.0f; + } + + return fPercievedLuminance * 0.01f; +} + +FfxFloat32 LinearLdrToLuminance(FfxFloat32x3 linearRec709RGB) +{ + FfxFloat32 fY = 0.2126 * linearRec709RGB.x + 0.7152 * linearRec709RGB.y + 0.0722 * linearRec709RGB.z; + return fY; +} + +FfxFloat32 LinearRec2020ToLuminance(FfxFloat32x3 linearRec2020RGB) +{ + FfxFloat32 fY = 0.2627 * linearRec2020RGB.x + 0.678 * linearRec2020RGB.y + 0.0593 * linearRec2020RGB.z; + return fY; +} + +FfxFloat32 PQCorrectedHdrToLuminance(FfxFloat32x3 pq, FfxFloat32 maxLuminance) +{ + FfxFloat32 fY = LinearRec2020ToLuminance(ffxLinearFromPQ(pq) * (10000.0f / maxLuminance)); + return fY; +} + +FfxFloat32x3 ffxscRGBToLinear(FfxFloat32x3 value, FfxFloat32 minLuminance, FfxFloat32 maxLuminance) +{ + FfxFloat32x3 p = value - ffxBroadcast3(minLuminance / 80.0f); + return p / ffxBroadcast3((maxLuminance - minLuminance) / 80.0f); +} + +FfxFloat32 SCRGBCorrectedHdrToLuminance(FfxFloat32x3 scRGB, FfxFloat32 minLuminance, FfxFloat32 maxLuminance) +{ + FfxFloat32 fY = LinearLdrToLuminance(ffxscRGBToLinear(scRGB, minLuminance, maxLuminance)); + return fY; +} + +void PrepareLuma(FfxInt32x2 iGlobalId, FfxInt32 iLocalIndex) +{ +#define PixelsPerThreadX 2 +#define PixelsPerThreadY 2 +#pragma unroll + for (FfxInt32 y = 0; y < PixelsPerThreadY; y++) + { +#pragma unroll + for (FfxInt32 x = 0; x < PixelsPerThreadX; x++) + { + FfxInt32x2 pos = iGlobalId * FfxInt32x2(PixelsPerThreadX, PixelsPerThreadY) + FfxInt32x2(x, y); + FfxInt32x2 iPxHrPos = pos; + FfxFloat32 fY = 0.0; + + FfxFloat32x3 inputColor = LoadInputColor(iPxHrPos).rgb; + + FfxUInt32 backbufferTransferFunction = BackbufferTransferFunction(); + if (backbufferTransferFunction == 0) + { + fY = LinearLdrToLuminance(inputColor); + } + else if (backbufferTransferFunction == 1) + { + fY = PQCorrectedHdrToLuminance(inputColor, MinMaxLuminance()[1]); + fY = LuminanceToPerceivedLuminance(fY); + } + else if (backbufferTransferFunction == 2) + { + fY = SCRGBCorrectedHdrToLuminance(inputColor, MinMaxLuminance()[0], MinMaxLuminance()[1]); + fY = LuminanceToPerceivedLuminance(fY); + } + + StoreOpticalFlowInput(pos, FfxUInt32(fY * 255)); + } + } +} + +#endif // FFX_OPTICALFLOW_PREPARE_LUMA_H diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_resources.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_resources.h new file mode 100644 index 000000000..4676af409 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_resources.h @@ -0,0 +1,74 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_OPTICALFLOW_RESOURCES_H +#define FFX_OPTICALFLOW_RESOURCES_H + +#if defined(FFX_CPU) || defined(FFX_GPU) + +#define FFX_OF_RESOURCE_IDENTIFIER_NULL 0 + +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_INPUT_1 1 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_INPUT_1_LEVEL_1 2 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_INPUT_1_LEVEL_2 3 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_INPUT_1_LEVEL_3 4 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_INPUT_1_LEVEL_4 5 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_INPUT_1_LEVEL_5 6 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_INPUT_1_LEVEL_6 7 + +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_INPUT_2 8 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_INPUT_2_LEVEL_1 9 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_INPUT_2_LEVEL_2 10 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_INPUT_2_LEVEL_3 11 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_INPUT_2_LEVEL_4 12 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_INPUT_2_LEVEL_5 13 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_INPUT_2_LEVEL_6 14 + +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_1 15 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_1_LEVEL_1 16 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_1_LEVEL_2 17 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_1_LEVEL_3 18 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_1_LEVEL_4 19 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_1_LEVEL_5 20 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_1_LEVEL_6 21 + +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_2 22 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_2_LEVEL_1 23 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_2_LEVEL_2 24 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_2_LEVEL_3 25 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_2_LEVEL_4 26 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_2_LEVEL_5 27 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_2_LEVEL_6 28 + +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_SCD_HISTOGRAM 29 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_SCD_PREVIOUS_HISTOGRAM 30 +#define FFX_OF_RESOURCE_IDENTIFIER_OPTICAL_FLOW_SCD_TEMP 31 + +#define FFX_OF_RESOURCE_IDENTIFIER_COUNT 32 + +#define FFX_OPTICALFLOW_CONSTANTBUFFER_IDENTIFIER 0 +#define FFX_OPTICALFLOW_CONSTANTBUFFER_IDENTIFIER_SPD 1 +#define FFX_OPTICALFLOW_CONSTANTBUFFER_COUNT 2 + +#endif // #if defined(FFX_CPU) || defined(FFX_GPU) + +#endif //!defined( FFX_OPTICALFLOW_RESOURCES_H ) diff --git a/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_scale_optical_flow_advanced_v5.h b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_scale_optical_flow_advanced_v5.h new file mode 100644 index 000000000..16238f4e6 --- /dev/null +++ b/third_party/fidelityfx-sdk/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_scale_optical_flow_advanced_v5.h @@ -0,0 +1,99 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef FFX_OPTICALFLOW_SCALE_OPTICAL_FLOW_ADVANCED_V5_H +#define FFX_OPTICALFLOW_SCALE_OPTICAL_FLOW_ADVANCED_V5_H + +#define WG_WIDTH FFX_OPTICALFLOW_THREAD_GROUP_WIDTH +#define WG_HEIGHT FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT +#define WG_DEPTH FFX_OPTICALFLOW_THREAD_GROUP_DEPTH +FFX_GROUPSHARED FfxInt32x2 nearestVectors[4][WG_HEIGHT][WG_WIDTH]; +FFX_GROUPSHARED FfxUInt32 localRegion[4][WG_HEIGHT][WG_WIDTH]; +FFX_GROUPSHARED FfxUInt32 sads[4][WG_HEIGHT][WG_WIDTH]; + +void ScaleOpticalFlowAdvanced(FfxInt32x3 iGlobalId, FfxInt32x3 iLocalId) +{ + if (IsSceneChanged()) + { + StoreOpticalFlowNextLevel(iGlobalId.xy, FfxInt32x2(0, 0)); + + return; + } + + int xOffset = (iLocalId.z % 2) - 1 + iGlobalId.x % 2; + int yOffset = (iLocalId.z / 2) - 1 + iGlobalId.y % 2; + + FfxInt32x2 srcOFPos = FfxInt32x2( + (iGlobalId.x / 2) + xOffset, + (iGlobalId.y / 2) + yOffset + ); + + FfxInt32x2 nearestVector = LoadOpticalFlow(srcOFPos); + nearestVectors[iLocalId.z][iLocalId.y][iLocalId.x] = nearestVector * 2; + + int maxY = 4; + for (int n = iLocalId.z; n < maxY; n += WG_DEPTH) + { + { + FfxInt32x2 lumaPos = FfxInt32x2((iGlobalId.x) * 4, iGlobalId.y * maxY + n); + FfxUInt32 firstPixel = LoadFirstImagePackedLuma(lumaPos); + localRegion[n][iLocalId.y][iLocalId.x] = firstPixel; + } + } + FFX_GROUP_MEMORY_BARRIER; + + uint sad = 0; + for (int n = 0; n < maxY; n++) + { + { + FfxInt32x2 lumaPos = FfxInt32x2((iGlobalId.x) * 4, (iGlobalId.y * maxY + n)) + nearestVector; + FfxUInt32 secondPixel = LoadSecondImagePackedLuma(lumaPos); + sad += Sad(localRegion[n][iLocalId.y][iLocalId.x], secondPixel); + } + } + sads[iLocalId.z][iLocalId.y][iLocalId.x] = sad; + + FFX_GROUP_MEMORY_BARRIER; + + { + if (iLocalId.z == 0) + { + uint bestSad = 0xffffffff; + uint bestId = 0; + + for (int n = 0; n < 4; n++) + { + if ((sads[n][iLocalId.y][iLocalId.x]) < bestSad) + { + bestSad = sads[n][iLocalId.y][iLocalId.x]; + bestId = n; + } + } + + FfxInt32x2 outputVector = nearestVectors[bestId][iLocalId.y][iLocalId.x]; + + StoreOpticalFlowNextLevel(iGlobalId.xy, outputVector); + } + } +} + +#endif // FFX_OPTICALFLOW_SCALE_OPTICAL_FLOW_ADVANCED_V5_H diff --git a/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_compute_game_vector_field_inpainting_pyramid_pass.glsl b/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_compute_game_vector_field_inpainting_pyramid_pass.glsl new file mode 100644 index 000000000..5ece11aee --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_compute_game_vector_field_inpainting_pyramid_pass.glsl @@ -0,0 +1,75 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require + +#define FFX_FRAMEINTERPOLATION_BIND_SRV_GAME_MOTION_VECTOR_FIELD_X 0 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_GAME_MOTION_VECTOR_FIELD_Y 1 + +#define FFX_FRAMEINTERPOLATION_BIND_UAV_COUNTERS 2 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_0 3 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_1 4 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_2 5 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_3 6 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_4 7 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_5 8 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_6 9 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_7 10 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_8 11 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_9 12 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_10 13 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_11 14 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_12 15 + +#define FFX_FRAMEINTERPOLATION_BIND_CB_FRAMEINTERPOLATION 16 +#define FFX_FRAMEINTERPOLATION_BIND_CB_INPAINTING_PYRAMID 17 + +#ifdef FFX_HALF + #undef FFX_HALF + #define FFX_HALF 0 +#endif + +#include "frameinterpolation/ffx_frameinterpolation_callbacks_glsl.h" +#include "frameinterpolation/ffx_frameinterpolation_common.h" +#include "frameinterpolation/ffx_frameinterpolation_compute_game_vector_field_inpainting_pyramid.h" + +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH 256 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT 1 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH +#ifndef FFX_FRAMEINTERPOLATION_NUM_THREADS +#define FFX_FRAMEINTERPOLATION_NUM_THREADS layout (local_size_x = FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH, local_size_y = FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT, local_size_z = FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_FRAMEINTERPOLATION_NUM_THREADS + +FFX_FRAMEINTERPOLATION_NUM_THREADS +void main() +{ + computeFrameinterpolationGameVectorFieldInpaintingPyramid(FfxInt32x3(gl_WorkGroupID), FfxInt32(gl_LocalInvocationIndex)); +} diff --git a/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_compute_inpainting_pyramid_pass.glsl b/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_compute_inpainting_pyramid_pass.glsl new file mode 100644 index 000000000..cdb7bde4d --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_compute_inpainting_pyramid_pass.glsl @@ -0,0 +1,74 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require + +#define FFX_FRAMEINTERPOLATION_BIND_SRV_OUTPUT 0 + +#define FFX_FRAMEINTERPOLATION_BIND_UAV_COUNTERS 1 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_0 2 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_1 3 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_2 4 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_3 5 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_4 6 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_5 7 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_6 8 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_7 9 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_8 10 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_9 11 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_10 12 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_11 13 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_INPAINTING_PYRAMID_MIPMAP_12 14 + +#define FFX_FRAMEINTERPOLATION_BIND_CB_FRAMEINTERPOLATION 15 +#define FFX_FRAMEINTERPOLATION_BIND_CB_INPAINTING_PYRAMID 16 + +#ifdef FFX_HALF + #undef FFX_HALF + #define FFX_HALF 0 +#endif + +#include "frameinterpolation/ffx_frameinterpolation_callbacks_glsl.h" +#include "frameinterpolation/ffx_frameinterpolation_common.h" +#include "frameinterpolation/ffx_frameinterpolation_compute_inpainting_pyramid.h" + +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH 256 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT 1 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH +#ifndef FFX_FRAMEINTERPOLATION_NUM_THREADS +#define FFX_FRAMEINTERPOLATION_NUM_THREADS layout (local_size_x = FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH, local_size_y = FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT, local_size_z = FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_FRAMEINTERPOLATION_NUM_THREADS + +FFX_FRAMEINTERPOLATION_NUM_THREADS +void main() +{ + computeFrameinterpolationInpaintingPyramid(FfxInt32x3(gl_WorkGroupID), FfxInt32(gl_LocalInvocationIndex)); +} diff --git a/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_debug_view_pass.glsl b/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_debug_view_pass.glsl new file mode 100644 index 000000000..a089510fc --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_debug_view_pass.glsl @@ -0,0 +1,65 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require +// Needed for rw_output declaration +#extension GL_EXT_shader_image_load_formatted : require + +#define FFX_FRAMEINTERPOLATION_BIND_SRV_GAME_MOTION_VECTOR_FIELD_X 0 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_GAME_MOTION_VECTOR_FIELD_Y 1 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_X 2 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_Y 3 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_DISOCCLUSION_MASK 4 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_PRESENT_BACKBUFFER 5 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_INPAINTING_PYRAMID 6 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_CURRENT_INTERPOLATION_SOURCE 7 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_DISTORTION_FIELD 8 + +#define FFX_FRAMEINTERPOLATION_BIND_UAV_OUTPUT 9 + +#define FFX_FRAMEINTERPOLATION_BIND_CB_FRAMEINTERPOLATION 10 + +#include "frameinterpolation/ffx_frameinterpolation_callbacks_glsl.h" +#include "frameinterpolation/ffx_frameinterpolation_common.h" +#include "frameinterpolation/ffx_frameinterpolation_debug_view.h" + +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT 8 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH +#ifndef FFX_FRAMEINTERPOLATION_NUM_THREADS +#define FFX_FRAMEINTERPOLATION_NUM_THREADS layout (local_size_x = FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH, local_size_y = FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT, local_size_z = FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_FRAMEINTERPOLATION_NUM_THREADS + +FFX_FRAMEINTERPOLATION_NUM_THREADS +void main() +{ + computeDebugView(FfxInt32x2(gl_GlobalInvocationID.xy)); +} diff --git a/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_disocclusion_mask_pass.glsl b/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_disocclusion_mask_pass.glsl new file mode 100644 index 000000000..40bb73561 --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_disocclusion_mask_pass.glsl @@ -0,0 +1,61 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require + +#define FFX_FRAMEINTERPOLATION_BIND_SRV_GAME_MOTION_VECTOR_FIELD_X 0 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_GAME_MOTION_VECTOR_FIELD_Y 1 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_RECONSTRUCTED_DEPTH_PREVIOUS_FRAME 2 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_DILATED_DEPTH 3 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_RECONSTRUCTED_DEPTH_INTERPOLATED_FRAME 4 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_INPAINTING_PYRAMID 5 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_DISTORTION_FIELD 6 + +#define FFX_FRAMEINTERPOLATION_BIND_UAV_DISOCCLUSION_MASK 7 + +#define FFX_FRAMEINTERPOLATION_BIND_CB_FRAMEINTERPOLATION 8 + +#include "frameinterpolation/ffx_frameinterpolation_callbacks_glsl.h" +#include "frameinterpolation/ffx_frameinterpolation_common.h" +#include "frameinterpolation/ffx_frameinterpolation_disocclusion_mask.h" + +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT 8 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH +#ifndef FFX_FRAMEINTERPOLATION_NUM_THREADS +#define FFX_FRAMEINTERPOLATION_NUM_THREADS layout (local_size_x = FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH, local_size_y = FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT, local_size_z = FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_FRAMEINTERPOLATION_NUM_THREADS + +FFX_FRAMEINTERPOLATION_NUM_THREADS +void main() +{ + computeDisocclusionMask(FfxInt32x2(gl_GlobalInvocationID.xy)); +} diff --git a/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_game_motion_vector_field_pass.glsl b/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_game_motion_vector_field_pass.glsl new file mode 100644 index 000000000..1071d629a --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_game_motion_vector_field_pass.glsl @@ -0,0 +1,60 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require + +#define FFX_FRAMEINTERPOLATION_BIND_SRV_DILATED_MOTION_VECTORS 0 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_DILATED_DEPTH 1 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_PREVIOUS_INTERPOLATION_SOURCE 2 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_CURRENT_INTERPOLATION_SOURCE 3 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_DISTORTION_FIELD 4 + +#define FFX_FRAMEINTERPOLATION_BIND_UAV_GAME_MOTION_VECTOR_FIELD_X 5 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_GAME_MOTION_VECTOR_FIELD_Y 6 + +#define FFX_FRAMEINTERPOLATION_BIND_CB_FRAMEINTERPOLATION 7 + +#include "frameinterpolation/ffx_frameinterpolation_callbacks_glsl.h" +#include "frameinterpolation/ffx_frameinterpolation_common.h" +#include "frameinterpolation/ffx_frameinterpolation_game_motion_vector_field.h" + +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT 8 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH +#ifndef FFX_FRAMEINTERPOLATION_NUM_THREADS +#define FFX_FRAMEINTERPOLATION_NUM_THREADS layout (local_size_x = FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH, local_size_y = FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT, local_size_z = FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_FRAMEINTERPOLATION_NUM_THREADS + +FFX_FRAMEINTERPOLATION_NUM_THREADS +void main() +{ + computeGameFieldMvs(FfxInt32x2(gl_GlobalInvocationID.xy)); +} diff --git a/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_inpainting_pass.glsl b/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_inpainting_pass.glsl new file mode 100644 index 000000000..facfca25c --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_inpainting_pass.glsl @@ -0,0 +1,60 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require +// Needed for rw_output declaration +#extension GL_EXT_shader_image_load_formatted : require + +#define FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_SCENE_CHANGE_DETECTION 0 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_INPAINTING_PYRAMID 1 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_PRESENT_BACKBUFFER 2 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_CURRENT_INTERPOLATION_SOURCE 3 + +#define FFX_FRAMEINTERPOLATION_BIND_UAV_OUTPUT 7 + +#define FFX_FRAMEINTERPOLATION_BIND_CB_FRAMEINTERPOLATION 8 + +#include "frameinterpolation/ffx_frameinterpolation_callbacks_glsl.h" +#include "frameinterpolation/ffx_frameinterpolation_common.h" +#include "frameinterpolation/ffx_frameinterpolation_inpainting.h" + +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT 8 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH +#ifndef FFX_FRAMEINTERPOLATION_NUM_THREADS +#define FFX_FRAMEINTERPOLATION_NUM_THREADS layout (local_size_x = FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH, local_size_y = FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT, local_size_z = FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_FRAMEINTERPOLATION_NUM_THREADS + +FFX_FRAMEINTERPOLATION_NUM_THREADS +void main() +{ + computeInpainting(FfxInt32x2(gl_GlobalInvocationID.xy)); +} diff --git a/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_optical_flow_vector_field_pass.glsl b/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_optical_flow_vector_field_pass.glsl new file mode 100644 index 000000000..0de21e29c --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_optical_flow_vector_field_pass.glsl @@ -0,0 +1,60 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require + +#define FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW 0 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_CONFIDENCE 1 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_DILATED_DEPTH 2 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_PREVIOUS_INTERPOLATION_SOURCE 3 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_CURRENT_INTERPOLATION_SOURCE 4 + +#define FFX_FRAMEINTERPOLATION_BIND_UAV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_X 6 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_Y 7 + +#define FFX_FRAMEINTERPOLATION_BIND_CB_FRAMEINTERPOLATION 8 + +#include "frameinterpolation/ffx_frameinterpolation_callbacks_glsl.h" +#include "frameinterpolation/ffx_frameinterpolation_common.h" +#include "frameinterpolation/ffx_frameinterpolation_optical_flow_vector_field.h" + +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT 8 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH +#ifndef FFX_FRAMEINTERPOLATION_NUM_THREADS +#define FFX_FRAMEINTERPOLATION_NUM_THREADS layout (local_size_x = FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH, local_size_y = FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT, local_size_z = FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_FRAMEINTERPOLATION_NUM_THREADS + +FFX_FRAMEINTERPOLATION_NUM_THREADS +void main() +{ + computeOpticalFlowVectorField(FfxInt32x2(gl_GlobalInvocationID.xy)); +} diff --git a/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_pass.glsl b/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_pass.glsl new file mode 100644 index 000000000..733bd396e --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_pass.glsl @@ -0,0 +1,65 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require +// Needed for rw_output declaration +#extension GL_EXT_shader_image_load_formatted : require + +#define FFX_FRAMEINTERPOLATION_BIND_SRV_GAME_MOTION_VECTOR_FIELD_X 0 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_GAME_MOTION_VECTOR_FIELD_Y 1 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_X 2 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_Y 3 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_PREVIOUS_INTERPOLATION_SOURCE 4 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_CURRENT_INTERPOLATION_SOURCE 5 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_DISOCCLUSION_MASK 6 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_INPAINTING_PYRAMID 7 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_COUNTERS 8 + +#define FFX_FRAMEINTERPOLATION_BIND_UAV_OUTPUT 9 + +#define FFX_FRAMEINTERPOLATION_BIND_CB_FRAMEINTERPOLATION 10 + +#include "frameinterpolation/ffx_frameinterpolation_callbacks_glsl.h" +#include "frameinterpolation/ffx_frameinterpolation_common.h" +#include "frameinterpolation/ffx_frameinterpolation.h" + +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT 8 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH +#ifndef FFX_FRAMEINTERPOLATION_NUM_THREADS +#define FFX_FRAMEINTERPOLATION_NUM_THREADS layout (local_size_x = FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH, local_size_y = FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT, local_size_z = FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_FRAMEINTERPOLATION_NUM_THREADS + +FFX_FRAMEINTERPOLATION_NUM_THREADS +void main() +{ + computeFrameinterpolation(ivec2(gl_GlobalInvocationID.xy)); +} diff --git a/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_reconstruct_and_dilate_pass.glsl b/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_reconstruct_and_dilate_pass.glsl new file mode 100644 index 000000000..d29bddd1a --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_reconstruct_and_dilate_pass.glsl @@ -0,0 +1,58 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require + +#define FFX_FRAMEINTERPOLATION_BIND_SRV_INPUT_MOTION_VECTORS 0 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_INPUT_DEPTH 1 + +#define FFX_FRAMEINTERPOLATION_BIND_UAV_RECONSTRUCTED_DEPTH_PREVIOUS_FRAME 2 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_DILATED_MOTION_VECTORS 3 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_DILATED_DEPTH 4 + +#define FFX_FRAMEINTERPOLATION_BIND_CB_FRAMEINTERPOLATION 5 + +#include "frameinterpolation/ffx_frameinterpolation_callbacks_glsl.h" +#include "frameinterpolation/ffx_frameinterpolation_common.h" +#include "frameinterpolation/ffx_frameinterpolation_reconstruct_dilated_velocity_and_previous_depth.h" + +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_WIDTH +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT 8 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_HEIGHT +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FSR3UPSCALER_THREAD_GROUP_DEPTH +#ifndef FFX_FRAMEINTERPOLATION_NUM_THREADS +#define FFX_FRAMEINTERPOLATION_NUM_THREADS layout (local_size_x = FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH, local_size_y = FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT, local_size_z = FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_FSR3UPSCALER_NUM_THREADS + +FFX_FRAMEINTERPOLATION_NUM_THREADS +void main() +{ + ReconstructAndDilate(FfxInt32x2(gl_GlobalInvocationID.xy)); +} diff --git a/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_reconstruct_previous_depth_pass.glsl b/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_reconstruct_previous_depth_pass.glsl new file mode 100644 index 000000000..3608a62ef --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_reconstruct_previous_depth_pass.glsl @@ -0,0 +1,58 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require + +#define FFX_FRAMEINTERPOLATION_BIND_SRV_DILATED_MOTION_VECTORS 0 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_DILATED_DEPTH 1 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_CURRENT_INTERPOLATION_SOURCE 2 +#define FFX_FRAMEINTERPOLATION_BIND_SRV_DISTORTION_FIELD 3 + +#define FFX_FRAMEINTERPOLATION_BIND_UAV_RECONSTRUCTED_DEPTH_INTERPOLATED_FRAME 4 + +#define FFX_FRAMEINTERPOLATION_BIND_CB_FRAMEINTERPOLATION 5 + +#include "frameinterpolation/ffx_frameinterpolation_callbacks_glsl.h" +#include "frameinterpolation/ffx_frameinterpolation_common.h" +#include "frameinterpolation/ffx_frameinterpolation_reconstruct_previous_depth.h" + +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT 8 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH +#ifndef FFX_FRAMEINTERPOLATION_NUM_THREADS +#define FFX_FRAMEINTERPOLATION_NUM_THREADS layout (local_size_x = FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH, local_size_y = FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT, local_size_z = FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_FRAMEINTERPOLATION_NUM_THREADS + +FFX_FRAMEINTERPOLATION_NUM_THREADS +void main() +{ + reconstructPreviousDepth(FfxInt32x2(gl_GlobalInvocationID.xy)); +} diff --git a/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_setup_pass.glsl b/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_setup_pass.glsl new file mode 100644 index 000000000..eaf18634f --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/frameinterpolation/ffx_frameinterpolation_setup_pass.glsl @@ -0,0 +1,60 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require + +#define FFX_FRAMEINTERPOLATION_BIND_SRV_OPTICAL_FLOW_SCENE_CHANGE_DETECTION 0 + +#define FFX_FRAMEINTERPOLATION_BIND_UAV_GAME_MOTION_VECTOR_FIELD_X 1 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_GAME_MOTION_VECTOR_FIELD_Y 2 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_X 3 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_OPTICAL_FLOW_MOTION_VECTOR_FIELD_Y 4 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_DISOCCLUSION_MASK 5 +#define FFX_FRAMEINTERPOLATION_BIND_UAV_COUNTERS 6 + +#define FFX_FRAMEINTERPOLATION_BIND_CB_FRAMEINTERPOLATION 7 + +#include "frameinterpolation/ffx_frameinterpolation_callbacks_glsl.h" +#include "frameinterpolation/ffx_frameinterpolation_common.h" +#include "frameinterpolation/ffx_frameinterpolation_setup.h" + +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH 8 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT 8 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT +#ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH +#define FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH +#ifndef FFX_FRAMEINTERPOLATION_NUM_THREADS +#define FFX_FRAMEINTERPOLATION_NUM_THREADS layout (local_size_x = FFX_FRAMEINTERPOLATION_THREAD_GROUP_WIDTH, local_size_y = FFX_FRAMEINTERPOLATION_THREAD_GROUP_HEIGHT, local_size_z = FFX_FRAMEINTERPOLATION_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_FRAMEINTERPOLATION_NUM_THREADS + +FFX_FRAMEINTERPOLATION_NUM_THREADS +void main() +{ + setupFrameinterpolationResources(FfxInt32x2(gl_GlobalInvocationID.xy)); +} diff --git a/third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_compute_luminance_pyramid_pass.glsl b/third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_compute_luminance_pyramid_pass.glsl new file mode 100644 index 000000000..7713dcdda --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_compute_luminance_pyramid_pass.glsl @@ -0,0 +1,60 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require + +#define FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT 0 +#define FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_1 1 +#define FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_2 2 +#define FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_3 3 +#define FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_4 4 +#define FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_5 5 +#define FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT_LEVEL_6 6 + +#define FFX_OPTICALFLOW_BIND_CB_COMMON 7 +#define FFX_OPTICALFLOW_BIND_CB_SPD 8 + +#include "opticalflow/ffx_opticalflow_callbacks_glsl.h" +#include "opticalflow/ffx_opticalflow_common.h" +#include "opticalflow/ffx_opticalflow_compute_luminance_pyramid.h" + +#ifndef FFX_OPTICALFLOW_THREAD_GROUP_WIDTH +#define FFX_OPTICALFLOW_THREAD_GROUP_WIDTH 256 +#endif // #ifndef FFX_OPTICALFLOW_THREAD_GROUP_WIDTH +#ifndef FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT +#define FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT 1 +#endif // #ifndef FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT +#ifndef FFX_OPTICALFLOW_THREAD_GROUP_DEPTH +#define FFX_OPTICALFLOW_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_OPTICALFLOW_THREAD_GROUP_DEPTH +#ifndef FFX_OPTICALFLOW_NUM_THREADS +#define FFX_OPTICALFLOW_NUM_THREADS layout (local_size_x = FFX_OPTICALFLOW_THREAD_GROUP_WIDTH, local_size_y = FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT, local_size_z = FFX_OPTICALFLOW_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_OPTICALFLOW_NUM_THREADS + +FFX_OPTICALFLOW_NUM_THREADS +void main() +{ + ComputeOpticalFlowInputPyramid(FfxInt32x2(gl_WorkGroupID.xy), FfxInt32(gl_LocalInvocationIndex)); +} diff --git a/third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_compute_optical_flow_advanced_pass_v5.glsl b/third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_compute_optical_flow_advanced_pass_v5.glsl new file mode 100644 index 000000000..8844c2ae9 --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_compute_optical_flow_advanced_pass_v5.glsl @@ -0,0 +1,66 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require + +#define FFX_WAVE 1 +#extension GL_KHR_shader_subgroup_basic : require + +#define FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_INPUT 0 +#define FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_PREVIOUS_INPUT 1 + +#define FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW 2 +#define FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_OUTPUT 3 + +#define FFX_OPTICALFLOW_BIND_CB_COMMON 4 + + +#include "opticalflow/ffx_opticalflow_callbacks_glsl.h" +#include "opticalflow/ffx_opticalflow_common.h" + +#ifndef FFX_OPTICALFLOW_BLOCK_SIZE +#define FFX_OPTICALFLOW_BLOCK_SIZE 8 +#endif // #ifndef FFX_OPTICALFLOW_BLOCK_SIZE +#ifndef FFX_OPTICALFLOW_THREAD_GROUP_WIDTH +#define FFX_OPTICALFLOW_THREAD_GROUP_WIDTH 64 +#endif // #ifndef FFX_OPTICALFLOW_THREAD_GROUP_WIDTH +#ifndef FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT +#define FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT 1 +#endif // #ifndef FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT +#ifndef FFX_OPTICALFLOW_THREAD_GROUP_DEPTH +#define FFX_OPTICALFLOW_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_OPTICALFLOW_THREAD_GROUP_DEPTH + +#include "opticalflow/ffx_opticalflow_compute_optical_flow_v5.h" + +#ifndef FFX_OPTICALFLOW_NUM_THREADS +#define FFX_OPTICALFLOW_NUM_THREADS layout (local_size_x = FFX_OPTICALFLOW_THREAD_GROUP_WIDTH, local_size_y = FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT, local_size_z = FFX_OPTICALFLOW_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_OPTICALFLOW_NUM_THREADS + +FFX_OPTICALFLOW_NUM_THREADS +void main() +{ + ComputeOpticalFlowAdvanced(FfxInt32x2(gl_GlobalInvocationID.xy), FfxInt32x2(gl_LocalInvocationID.xy), FfxInt32x2(gl_WorkGroupID.xy), FfxInt32(gl_LocalInvocationIndex)); +} diff --git a/third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_compute_scd_divergence_pass.glsl b/third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_compute_scd_divergence_pass.glsl new file mode 100644 index 000000000..0df8d985f --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_compute_scd_divergence_pass.glsl @@ -0,0 +1,57 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require + +#define FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_HISTOGRAM 0 +#define FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_PREVIOUS_HISTOGRAM 1 +#define FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_TEMP 2 +#define FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_OUTPUT 3 + +#define FFX_OPTICALFLOW_BIND_CB_COMMON 4 + +#include "opticalflow/ffx_opticalflow_callbacks_glsl.h" +#include "opticalflow/ffx_opticalflow_common.h" +#include "opticalflow/ffx_opticalflow_compute_scd_divergence.h" + +#ifndef FFX_OPTICALFLOW_THREAD_GROUP_WIDTH +#define FFX_OPTICALFLOW_THREAD_GROUP_WIDTH 256 +#endif // #ifndef FFX_OPTICALFLOW_THREAD_GROUP_WIDTH +#ifndef FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT +#define FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT 1 +#endif // #ifndef FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT +#ifndef FFX_OPTICALFLOW_THREAD_GROUP_DEPTH +#define FFX_OPTICALFLOW_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_OPTICALFLOW_THREAD_GROUP_DEPTH +#ifndef FFX_OPTICALFLOW_NUM_THREADS +#define FFX_OPTICALFLOW_NUM_THREADS layout (local_size_x = FFX_OPTICALFLOW_THREAD_GROUP_WIDTH, local_size_y = FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT, local_size_z = FFX_OPTICALFLOW_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_OPTICALFLOW_NUM_THREADS + +FFX_OPTICALFLOW_NUM_THREADS +void main() +{ + FfxInt32x2 iGroupSize = FfxInt32x2(FFX_OPTICALFLOW_THREAD_GROUP_WIDTH, FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT); + ComputeSCDHistogramsDivergence(FfxInt32x3(gl_GlobalInvocationID.xyz), FfxInt32x2(gl_LocalInvocationID.xy), FfxInt32(gl_LocalInvocationIndex), FfxInt32x2(gl_WorkGroupID.xy), iGroupSize); +} diff --git a/third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_filter_optical_flow_pass_v5.glsl b/third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_filter_optical_flow_pass_v5.glsl new file mode 100644 index 000000000..01bb11a45 --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_filter_optical_flow_pass_v5.glsl @@ -0,0 +1,57 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require + +#define FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_PREVIOUS 0 + +#define FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW 1 + +#define FFX_OPTICALFLOW_BIND_CB_COMMON 2 + +#include "opticalflow/ffx_opticalflow_callbacks_glsl.h" +#include "opticalflow/ffx_opticalflow_common.h" + +#ifndef FFX_OPTICALFLOW_THREAD_GROUP_WIDTH +#define FFX_OPTICALFLOW_THREAD_GROUP_WIDTH 16 +#endif // #ifndef FFX_OPTICALFLOW_THREAD_GROUP_WIDTH +#ifndef FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT +#define FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT 4 +#endif // #ifndef FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT +#ifndef FFX_OPTICALFLOW_THREAD_GROUP_DEPTH +#define FFX_OPTICALFLOW_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_OPTICALFLOW_THREAD_GROUP_DEPTH + +#include "opticalflow/ffx_opticalflow_filter_optical_flow_v5.h" + +#ifndef FFX_OPTICALFLOW_NUM_THREADS +#define FFX_OPTICALFLOW_NUM_THREADS layout (local_size_x = FFX_OPTICALFLOW_THREAD_GROUP_WIDTH, local_size_y = FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT, local_size_z = FFX_OPTICALFLOW_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_OPTICALFLOW_NUM_THREADS + +FFX_OPTICALFLOW_NUM_THREADS +void main() +{ + FilterOpticalFlow(FfxInt32x2(gl_GlobalInvocationID.xy), FfxInt32x2(gl_LocalInvocationID.xy), FfxInt32x2(gl_WorkGroupID.xy), FfxInt32(gl_LocalInvocationIndex)); +} diff --git a/third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_generate_scd_histogram_pass.glsl b/third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_generate_scd_histogram_pass.glsl new file mode 100644 index 000000000..0462ef15b --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_generate_scd_histogram_pass.glsl @@ -0,0 +1,55 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require + +#define FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_INPUT 0 +#define FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_HISTOGRAM 1 + +#define FFX_OPTICALFLOW_BIND_CB_COMMON 2 + +#include "opticalflow/ffx_opticalflow_callbacks_glsl.h" +#include "opticalflow/ffx_opticalflow_common.h" +#include "opticalflow/ffx_opticalflow_generate_scd_histogram.h" + +#ifndef FFX_OPTICALFLOW_THREAD_GROUP_WIDTH +#define FFX_OPTICALFLOW_THREAD_GROUP_WIDTH 32 +#endif // #ifndef FFX_OPTICALFLOW_THREAD_GROUP_WIDTH +#ifndef FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT +#define FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT 8 +#endif // #ifndef FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT +#ifndef FFX_OPTICALFLOW_THREAD_GROUP_DEPTH +#define FFX_OPTICALFLOW_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_OPTICALFLOW_THREAD_GROUP_DEPTH +#ifndef FFX_OPTICALFLOW_NUM_THREADS +#define FFX_OPTICALFLOW_NUM_THREADS layout (local_size_x = FFX_OPTICALFLOW_THREAD_GROUP_WIDTH, local_size_y = FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT, local_size_z = FFX_OPTICALFLOW_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_OPTICALFLOW_NUM_THREADS + +FFX_OPTICALFLOW_NUM_THREADS +void main() +{ + FfxInt32x2 iGroupSize = FfxInt32x2(FFX_OPTICALFLOW_THREAD_GROUP_WIDTH, FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT); + GenerateSceneChangeDetectionHistogram(FfxInt32x3(gl_GlobalInvocationID.xyz), FfxInt32x2(gl_LocalInvocationID.xy), FfxInt32(gl_LocalInvocationIndex), FfxInt32x2(gl_WorkGroupID.xy), iGroupSize); +} diff --git a/third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_prepare_luma_pass.glsl b/third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_prepare_luma_pass.glsl new file mode 100644 index 000000000..bb37011ef --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_prepare_luma_pass.glsl @@ -0,0 +1,55 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require + +#define FFX_OPTICALFLOW_BIND_SRV_INPUT_COLOR 0 +#define FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_INPUT 1 + +#define FFX_OPTICALFLOW_BIND_CB_COMMON 2 + +#include "opticalflow/ffx_opticalflow_callbacks_glsl.h" +#include "opticalflow/ffx_opticalflow_common.h" + +#ifndef FFX_OPTICALFLOW_THREAD_GROUP_WIDTH +#define FFX_OPTICALFLOW_THREAD_GROUP_WIDTH 16 +#endif // #ifndef FFX_OPTICALFLOW_THREAD_GROUP_WIDTH +#ifndef FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT +#define FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT 16 +#endif // #ifndef FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT +#ifndef FFX_OPTICALFLOW_THREAD_GROUP_DEPTH +#define FFX_OPTICALFLOW_THREAD_GROUP_DEPTH 1 +#endif // #ifndef FFX_OPTICALFLOW_THREAD_GROUP_DEPTH +#ifndef FFX_OPTICALFLOW_NUM_THREADS +#define FFX_OPTICALFLOW_NUM_THREADS layout (local_size_x = FFX_OPTICALFLOW_THREAD_GROUP_WIDTH, local_size_y = FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT, local_size_z = FFX_OPTICALFLOW_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_OPTICALFLOW_NUM_THREADS + +#include "opticalflow/ffx_opticalflow_prepare_luma.h" + +FFX_OPTICALFLOW_NUM_THREADS +void main() +{ + PrepareLuma(FfxInt32x2(gl_GlobalInvocationID.xy), FfxInt32(gl_LocalInvocationIndex)); +} diff --git a/third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_scale_optical_flow_advanced_pass_v5.glsl b/third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_scale_optical_flow_advanced_pass_v5.glsl new file mode 100644 index 000000000..70142c25f --- /dev/null +++ b/third_party/fidelityfx-sdk/shaders/opticalflow/ffx_opticalflow_scale_optical_flow_advanced_pass_v5.glsl @@ -0,0 +1,66 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#version 450 + +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_samplerless_texture_functions : require + +#define FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_INPUT 0 +#define FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW_PREVIOUS_INPUT 1 +#define FFX_OPTICALFLOW_BIND_SRV_OPTICAL_FLOW 2 + +#define FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_NEXT_LEVEL 3 +#define FFX_OPTICALFLOW_BIND_UAV_OPTICAL_FLOW_SCD_OUTPUT 4 + +#define FFX_OPTICALFLOW_BIND_CB_COMMON 5 + +#include "opticalflow/ffx_opticalflow_callbacks_glsl.h" +#include "opticalflow/ffx_opticalflow_common.h" + +#ifndef FFX_OPTICALFLOW_BLOCK_SIZE +#define FFX_OPTICALFLOW_BLOCK_SIZE 8 +#endif // #ifndef FFX_OPTICALFLOW_BLOCK_SIZE + +#ifndef FFX_OPTICALFLOW_THREAD_GROUP_WIDTH +#define FFX_OPTICALFLOW_THREAD_GROUP_WIDTH 4 +#endif // #ifndef FFX_OPTICALFLOW_THREAD_GROUP_WIDTH + +#ifndef FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT +#define FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT 4 +#endif // #ifndef FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT + +#ifndef FFX_OPTICALFLOW_THREAD_GROUP_DEPTH +#define FFX_OPTICALFLOW_THREAD_GROUP_DEPTH 4 +#endif // #ifndef FFX_OPTICALFLOW_THREAD_GROUP_DEPTH + +#include "opticalflow/ffx_opticalflow_scale_optical_flow_advanced_v5.h" + +#ifndef FFX_OPTICALFLOW_NUM_THREADS +#define FFX_OPTICALFLOW_NUM_THREADS layout (local_size_x = FFX_OPTICALFLOW_THREAD_GROUP_WIDTH, local_size_y = FFX_OPTICALFLOW_THREAD_GROUP_HEIGHT, local_size_z = FFX_OPTICALFLOW_THREAD_GROUP_DEPTH) in; +#endif // #ifndef FFX_OPTICALFLOW_NUM_THREADS + +FFX_OPTICALFLOW_NUM_THREADS +void main() +{ + ScaleOpticalFlowAdvanced(FfxInt32x3(gl_GlobalInvocationID.xyz), FfxInt32x3(gl_LocalInvocationID.xyz)); +} From 03592b64e0a9ebca01a8910c92a9f6398bc1f330 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Sun, 8 Nov 2026 19:11:03 -0600 Subject: [PATCH 037/119] docs: what ran, what NGX needed, and what ray reconstruction has no job doing DLSS ran against the game for the first time: the three extensions NGX asked for on this driver, the feature made at 1536x864 -> 2048x1152, and evaluations with the assembled depth and camera motion. The exact lines are in the document so a later change that breaks one is recognisable. Also written down: how NGX is reached on Linux (the driver core exports none of the public API; the SDK's static library holds it), the two mistakes that cost a run each (a project id that was not a UUID, and resolving from the core), and why ray reconstruction is not wired -- it denoises ray-traced lighting from a G-buffer, and this game is rasterized with neither. Co-Authored-By: Claude Opus 5 --- docs/upscaling.md | 70 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 3 deletions(-) diff --git a/docs/upscaling.md b/docs/upscaling.md index a56f8746b..b2385e24d 100644 --- a/docs/upscaling.md +++ b/docs/upscaling.md @@ -401,9 +401,29 @@ shape as the FSR one (`supported()`, `prepare()`, `upscale()`, `output_image()`/ `shutdown()`) so the seam can hold either. It is now built against a real NGX SDK (`NVSDK_NGX_VERSION_API_MACRO` 0x15, the SDK whose Linux -feature libraries are `libnvidia-ngx-dlss.so.310.9.16` and its `dlssd`/`dlssg` companions), and the -whole renderer compiles with the NGX half enabled. What has *not* happened yet is an evaluation -against a running game; until that line is in this document, treat the backend as plumbing. +feature libraries are `libnvidia-ngx-dlss.so.310.9.16` and its `dlssd`/`dlssg` companions), and +**it has run against the game**: Linux, RTX 5060 Ti, driver 615.71.09, the feature library beside +the binary, `RX_VK_DLSS=1`. + +``` +vk: dlss wants VK_NVX_binary_import: enabled +vk: dlss wants VK_NVX_image_view_handle: enabled +vk: dlss wants VK_KHR_buffer_device_address: enabled +vk: ngx initialized +vk: dlss: feature ready, 1536x864 -> 2048x1152 +vk: dlss 1536x864 -> 2048x1152 with assembled depth and camera motion +``` + +Those three extensions are what NGX asked for on this driver, enabled at device creation because +they were asked for before it rather than written out from memory. The evaluation is the same +assembled inputs FSR gets: the dispatch's own colour, the scene's depth, and motion reprojected from +that depth. + +What is still missing is the jitter. Neither backend is given one, because the game does not appear +to jitter its own projection -- its network is single-image and has no reason to. Without sub-pixel +diversity a temporal upscaler reconstructs from motion alone, which is softer than it should be. +Supplying a jitter means perturbing the projection the game writes and telling the upscaler what was +injected, and that is the next real piece of quality work rather than a flag to set. Two things the backend needs that the upscaler half does not, both added with the seam wiring: @@ -428,6 +448,50 @@ Two switches, both off by default, both neutral while off: | `RX_VK_DLSS=1` | asks for the backend at run time. Without it nothing is loaded, nothing is looked at and nothing is logged | | `RX_VK_DLSS_SDK` | a **build-time** gate. Off, the NGX half of the backend is not compiled and `supported()` is false. On, the build needs an NGX SDK's `include/` on the include path | +### Ray Reconstruction, and what "neural rendering" can mean here + +The SDK ships three Linux feature libraries and only two of them have a job in this game. + +- `libnvidia-ngx-dlss.so` -- **Super Resolution**. Running (above). On this driver that is the + transformer model, which is the neural network people mean by DLSS 4. +- `libnvidia-ngx-dlssg.so` -- **Frame Generation**. Written and wired; `gpu/vk/vk_dlssg.h`. +- `libnvidia-ngx-dlssd.so` -- **Ray Reconstruction**, which NVIDIA also calls the neural renderer. + It replaces the denoiser in a ray-traced pipeline, and it is given a G-buffer -- albedo, normals, + roughness, specular -- plus noisy ray-traced lighting. Ocarina of Time on NX2 is a rasterized game + with no ray tracing and no such G-buffer. There is nothing here for it to denoise, and handing it + invented inputs would be a worse picture dressed up as a feature. It is not wired, and the reason + is the game, not the plumbing. + +So "neural rendering" in this project means the super-resolution network and the frame-generation +network, and on AMD it will mean FSR 4's upscaling network for the same reason. + +### How NGX is actually reached on Linux + +The first design resolved the `NVSDK_NGX_*` entry points by name from the NGX core the driver ships +(`libnvidia-ngx.so.1`), so that a gated build would not need the SDK's library at link time. That +does not work, and a run said so plainly: + +``` +vk: ngx loaded from libnvidia-ngx.so.1 +vk: ngx: the NGX runtime has no NVSDK_NGX_VULKAN_Init_with_ProjectID +``` + +The driver's core exports none of the public API. Those nineteen Vulkan entry points live in the +SDK's own static library (`lib/Linux_x86_64/libnvsdk_ngx.a`), which calls into the core. So a build +with `RX_VK_DLSS_SDK=` links that library -- `dlss_sdk_link()` in `nx2/build.py` -- and +`gpu/vk/vk_ngx.cpp` calls NGX directly. The licensing rule is unchanged and unbent: the SDK is the +builder's own copy under the path they name, nothing of NVIDIA's is in this repository, and a build +without that path links exactly what it linked before. + +Two things cost a run each and are worth writing down: + +- **The project id must be a real UUID.** NGX validates the shape and answers + `NVSDK_NGX_Result_FAIL_InvalidParameter` (`0xbad00005`) otherwise. Ours spelled `hookshot-dlss` + into the last two groups, which is not hex. +- **The feature libraries are the player's to supply.** `libnvidia-ngx-dlss.so.*` and its `dlssd` + (ray reconstruction) and `dlssg` (frame generation) companions sit beside the binary, where NGX + looks for them because the application data path points there. They are never ours to ship. + ### The licensing decision, and why it is a gate rather than a hand-written ABI The rule from CONTRIBUTING.md is not negotiable and is not negotiated: **no NVIDIA header and no From ad291d1ee822e176bf228ee3c7d605d98023802f Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Sun, 8 Nov 2026 19:15:09 -0600 Subject: [PATCH 038/119] feat: frame generation asks for its own extensions and the whole input set Two refusals, each with its cause. NGX reported Frame Generation available and then answered FAIL_PlatformError from CreateFeature. The device was made without the extensions it needs: the extension query was gated on RX_VK_DLSS, which a frame-generation run does not set, so a run that asked only for frame generation created a device for nothing. Each feature is asked separately now. With the feature made, the evaluation answered FAIL_MissingInput. NGX's own helper sets five matrices and the camera's position and axes; this set two. The draw path now keeps the view and the projection as well as their product -- factorizing them back out of the product would have been the alternative -- and the present path builds the rest: the projection's inverse, an identity lens clip, the camera's axes out of the view's rows and its position from -R transpose times the translation, and the clip-to-previous-clip pair from this frame's view projection and the last one. All of it in doubles, because a float inverse of a projection with a far plane in the thousands loses what the reprojection depends on. A frame with no previous pair makes nothing, so the renderer's own interpolation takes it, as it does for every other refusal. Co-Authored-By: Claude Opus 5 --- gpu/vk/vk_dlssg.cpp | 32 +++++++++++++++++++ gpu/vk/vk_dlssg.h | 18 +++++++++++ gpu/vk/vk_draw.cpp | 17 +++++++++- gpu/vk/vk_draw.h | 3 ++ gpu/vk/vk_framegen.cpp | 71 ++++++++++++++++++++++++++++++++++++++++++ gpu/vk/vk_main.cpp | 20 ++++++++---- 6 files changed, 154 insertions(+), 7 deletions(-) diff --git a/gpu/vk/vk_dlssg.cpp b/gpu/vk/vk_dlssg.cpp index 0697ac437..0bfe52c0f 100644 --- a/gpu/vk/vk_dlssg.cpp +++ b/gpu/vk/vk_dlssg.cpp @@ -3,6 +3,7 @@ #include #include +#include #include #if defined(RX_VK_DLSS_SDK) @@ -198,7 +199,28 @@ bool ngx_generate(VkCommandBuffer cmd, const Inputs& in, Image& out) { if (in.have_matrices) { params->Set(NVSDK_NGX_DLSSG_Parameter_ClipToPrevClip, (void*)in.clip_to_prev_clip); params->Set(NVSDK_NGX_DLSSG_Parameter_PrevClipToClip, (void*)in.prev_clip_to_clip); + params->Set(NVSDK_NGX_DLSSG_Parameter_CameraViewToClip, (void*)in.camera_view_to_clip); + params->Set(NVSDK_NGX_DLSSG_Parameter_ClipToCameraView, (void*)in.clip_to_camera_view); + params->Set(NVSDK_NGX_DLSSG_Parameter_ClipToLensClip, (void*)in.clip_to_lens_clip); + params->Set(NVSDK_NGX_DLSSG_Parameter_CameraPosX, in.camera_pos[0]); + params->Set(NVSDK_NGX_DLSSG_Parameter_CameraPosY, in.camera_pos[1]); + params->Set(NVSDK_NGX_DLSSG_Parameter_CameraPosZ, in.camera_pos[2]); + params->Set(NVSDK_NGX_DLSSG_Parameter_CameraUpX, in.camera_up[0]); + params->Set(NVSDK_NGX_DLSSG_Parameter_CameraUpY, in.camera_up[1]); + params->Set(NVSDK_NGX_DLSSG_Parameter_CameraUpZ, in.camera_up[2]); + params->Set(NVSDK_NGX_DLSSG_Parameter_CameraRightX, in.camera_right[0]); + params->Set(NVSDK_NGX_DLSSG_Parameter_CameraRightY, in.camera_right[1]); + params->Set(NVSDK_NGX_DLSSG_Parameter_CameraRightZ, in.camera_right[2]); + params->Set(NVSDK_NGX_DLSSG_Parameter_CameraFwdX, in.camera_forward[0]); + params->Set(NVSDK_NGX_DLSSG_Parameter_CameraFwdY, in.camera_forward[1]); + params->Set(NVSDK_NGX_DLSSG_Parameter_CameraFwdZ, in.camera_forward[2]); + params->Set(NVSDK_NGX_DLSSG_Parameter_CameraPinholeOffsetX, 0.0f); + params->Set(NVSDK_NGX_DLSSG_Parameter_CameraPinholeOffsetY, 0.0f); } + params->Set(NVSDK_NGX_DLSSG_Parameter_OrthoProjection, 0u); + params->Set(NVSDK_NGX_DLSSG_Parameter_MvecDilated, 0u); + params->Set(NVSDK_NGX_DLSSG_Parameter_MvecInvalidValue, -FLT_MAX); + params->Set(NVSDK_NGX_DLSSG_Parameter_MinRelativeLinearDepthObjectSeparation, 40.0f); params->Set(NVSDK_NGX_DLSSG_Parameter_JitterOffsetX, in.jitter[0]); params->Set(NVSDK_NGX_DLSSG_Parameter_JitterOffsetY, in.jitter[1]); params->Set(NVSDK_NGX_DLSSG_Parameter_MvecScaleX, in.motion_scale[0]); @@ -267,6 +289,16 @@ bool supported() { return yes; } +size_t device_extensions(VkInstance instance, VkPhysicalDevice gpu, const char** out, size_t max) { +#if defined(RX_VK_DLSS_SDK) + if (!asked()) return 0; // (RX_VK_DLSSG: a run that did not ask gets the device it had) + return ngx::device_extensions(instance, gpu, NVSDK_NGX_Feature_FrameGeneration, out, max); +#else + (void)instance, (void)gpu, (void)out, (void)max; + return 0; +#endif +} + uint32_t frames_wanted() { return supported() ? asked() : 0; } diff --git a/gpu/vk/vk_dlssg.h b/gpu/vk/vk_dlssg.h index e42def60c..b137d5df4 100644 --- a/gpu/vk/vk_dlssg.h +++ b/gpu/vk/vk_dlssg.h @@ -48,6 +48,16 @@ struct Inputs { float jitter[2]{}; float clip_to_prev_clip[16]{}; float prev_clip_to_clip[16]{}; + /// The rest of the set NGX's own helper sets. An evaluation with only the two above is refused + /// with NVSDK_NGX_Result_FAIL_MissingInput, which is what a run saw, so these are not optional + /// however optional the struct they live in is called. + float camera_view_to_clip[16]{}; ///< the projection + float clip_to_camera_view[16]{}; ///< its inverse + float clip_to_lens_clip[16]{}; ///< identity here: this game has no lens distortion + float camera_pos[3]{}; + float camera_up[3]{}; + float camera_right[3]{}; + float camera_forward[3]{}; bool have_matrices = false; float near_plane = 0.1f; @@ -74,6 +84,14 @@ struct Inputs { /// line saying why it is false is logged once. [[nodiscard]] bool supported(); +/// The device extensions frame generation needs here, asked of NGX itself before the device exists. +/// Super resolution's set is not the same set: a device made for one and not the other is where +/// `NVSDK_NGX_VULKAN_CreateFeature` answers FAIL_PlatformError with the feature still reporting +/// itself available, which is exactly what a run saw. Returns how many names were written, at most +/// `max`; zero where frame generation was not asked for, this build has no NGX SDK, or NGX does not +/// answer. The names are NGX's own storage and last as long as the process. +size_t device_extensions(VkInstance instance, VkPhysicalDevice gpu, const char** out, size_t max); + /// How many frames the run asks to be made between two of the game's: `RX_VK_DLSSG=<1-3>`, 1 by /// default. Zero where frame generation is not asked for at all. [[nodiscard]] uint32_t frames_wanted(); diff --git a/gpu/vk/vk_draw.cpp b/gpu/vk/vk_draw.cpp index 3a7aabfd0..f0f93d1e2 100644 --- a/gpu/vk/vk_draw.cpp +++ b/gpu/vk/vk_draw.cpp @@ -4534,6 +4534,12 @@ void bind_index(VkCommandBuffer cmd, VkBuffer buffer, VkDeviceSize offset, VkInd /// submitted uniform data and not live guest memory. struct SceneViewProjection { float m[16]{}; ///< row major, projection times view + /// The two halves, kept as well as their product: frame generation is handed the projection and + /// its inverse separately (NGX's cameraViewToClip / clipToCameraView), and the camera's own + /// position and axes come out of the view. Deriving them back out of the product would mean + /// factorizing it, which is worse than keeping what we already had. + float view[16]{}; ///< row major, world -> camera (the game's 3x4, with 0,0,0,1 under it) + float proj[16]{}; ///< row major, camera -> clip bool have = false; }; SceneViewProjection scene_vp; @@ -4577,6 +4583,11 @@ static void capture_view_projection(const NvnState& s) { } } memcpy(scene_vp.m, vp, sizeof vp); + for (int r = 0; r < 3; r++) + for (int c = 0; c < 4; c++) scene_vp.view[r * 4 + c] = v[r * 4 + c]; + scene_vp.view[12] = scene_vp.view[13] = scene_vp.view[14] = 0.0f; + scene_vp.view[15] = 1.0f; + memcpy(scene_vp.proj, pr, sizeof scene_vp.proj); scene_vp.have = true; static std::atomic told{0}; if (told++ == 0) @@ -5458,7 +5469,11 @@ bool scene_frame_inputs(SceneFrameInputs* out) { out->render_width = scene_depth.width; out->render_height = scene_depth.height; out->have_view_projection = scene_vp.have; - if (scene_vp.have) memcpy(out->view_projection, scene_vp.m, sizeof out->view_projection); + if (scene_vp.have) { + memcpy(out->view_projection, scene_vp.m, sizeof out->view_projection); + memcpy(out->view, scene_vp.view, sizeof out->view); + memcpy(out->projection, scene_vp.proj, sizeof out->projection); + } else if (hos_oot_view_projection) out->have_view_projection = hos_oot_view_projection(out->view_projection) != 0; return true; } diff --git a/gpu/vk/vk_draw.h b/gpu/vk/vk_draw.h index 37354c170..5e4eb701d 100644 --- a/gpu/vk/vk_draw.h +++ b/gpu/vk/vk_draw.h @@ -23,6 +23,9 @@ struct SceneFrameInputs { uint32_t render_width = 0, render_height = 0; /// The view projection the scene's draws read, row major, as gpu/vk/vk_camera_motion.h takes it. float view_projection[16]{}; + /// Its two halves, for a backend that wants them apart (frame generation does). + float view[16]{}; + float projection[16]{}; bool have_view_projection = false; }; bool scene_frame_inputs(SceneFrameInputs* out); diff --git a/gpu/vk/vk_framegen.cpp b/gpu/vk/vk_framegen.cpp index aa0b57670..96c50e514 100644 --- a/gpu/vk/vk_framegen.cpp +++ b/gpu/vk/vk_framegen.cpp @@ -427,6 +427,43 @@ VkImage framegen_made_image(uint32_t* w, uint32_t* h) { return fg.recorded->frame[0].image; } +/// (hookshot) A 4x4 inverse and a 4x4 product, row major, in doubles. Frame generation needs the +/// projection's inverse and the clip-to-previous-clip pair, and a float inverse of a projection with +/// a far plane in the thousands loses the precision the reprojection depends on. +bool invert4x4(const float* m, float* out) { + double a[16], inv[16]; + for (int i = 0; i < 16; i++) a[i] = (double)m[i]; + inv[0] = a[5] * a[10] * a[15] - a[5] * a[11] * a[14] - a[9] * a[6] * a[15] + a[9] * a[7] * a[14] + a[13] * a[6] * a[11] - a[13] * a[7] * a[10]; + inv[4] = -a[4] * a[10] * a[15] + a[4] * a[11] * a[14] + a[8] * a[6] * a[15] - a[8] * a[7] * a[14] - a[12] * a[6] * a[11] + a[12] * a[7] * a[10]; + inv[8] = a[4] * a[9] * a[15] - a[4] * a[11] * a[13] - a[8] * a[5] * a[15] + a[8] * a[7] * a[13] + a[12] * a[5] * a[11] - a[12] * a[7] * a[9]; + inv[12] = -a[4] * a[9] * a[14] + a[4] * a[10] * a[13] + a[8] * a[5] * a[14] - a[8] * a[6] * a[13] - a[12] * a[5] * a[10] + a[12] * a[6] * a[9]; + inv[1] = -a[1] * a[10] * a[15] + a[1] * a[11] * a[14] + a[9] * a[2] * a[15] - a[9] * a[3] * a[14] - a[13] * a[2] * a[11] + a[13] * a[3] * a[10]; + inv[5] = a[0] * a[10] * a[15] - a[0] * a[11] * a[14] - a[8] * a[2] * a[15] + a[8] * a[3] * a[14] + a[12] * a[2] * a[11] - a[12] * a[3] * a[10]; + inv[9] = -a[0] * a[9] * a[15] + a[0] * a[11] * a[13] + a[8] * a[1] * a[15] - a[8] * a[3] * a[13] - a[12] * a[1] * a[11] + a[12] * a[3] * a[9]; + inv[13] = a[0] * a[9] * a[14] - a[0] * a[10] * a[13] - a[8] * a[1] * a[14] + a[8] * a[2] * a[13] + a[12] * a[1] * a[10] - a[12] * a[2] * a[9]; + inv[2] = a[1] * a[6] * a[15] - a[1] * a[7] * a[14] - a[5] * a[2] * a[15] + a[5] * a[3] * a[14] + a[13] * a[2] * a[7] - a[13] * a[3] * a[6]; + inv[6] = -a[0] * a[6] * a[15] + a[0] * a[7] * a[14] + a[4] * a[2] * a[15] - a[4] * a[3] * a[14] - a[12] * a[2] * a[7] + a[12] * a[3] * a[6]; + inv[10] = a[0] * a[5] * a[15] - a[0] * a[7] * a[13] - a[4] * a[1] * a[15] + a[4] * a[3] * a[13] + a[12] * a[1] * a[7] - a[12] * a[3] * a[5]; + inv[14] = -a[0] * a[5] * a[14] + a[0] * a[6] * a[13] + a[4] * a[1] * a[14] - a[4] * a[2] * a[13] - a[12] * a[1] * a[6] + a[12] * a[2] * a[5]; + inv[3] = -a[1] * a[6] * a[11] + a[1] * a[7] * a[10] + a[5] * a[2] * a[11] - a[5] * a[3] * a[10] - a[9] * a[2] * a[7] + a[9] * a[3] * a[6]; + inv[7] = a[0] * a[6] * a[11] - a[0] * a[7] * a[10] - a[4] * a[2] * a[11] + a[4] * a[3] * a[10] + a[8] * a[2] * a[7] - a[8] * a[3] * a[6]; + inv[11] = -a[0] * a[5] * a[11] + a[0] * a[7] * a[9] + a[4] * a[1] * a[11] - a[4] * a[3] * a[9] - a[8] * a[1] * a[7] + a[8] * a[3] * a[5]; + inv[15] = a[0] * a[5] * a[10] - a[0] * a[6] * a[9] - a[4] * a[1] * a[10] + a[4] * a[2] * a[9] + a[8] * a[1] * a[6] - a[8] * a[2] * a[5]; + const double det = a[0] * inv[0] + a[1] * inv[4] + a[2] * inv[8] + a[3] * inv[12]; + if (det > -1e-12 && det < 1e-12) return false; + for (int i = 0; i < 16; i++) out[i] = (float)(inv[i] / det); + return true; +} + +void multiply4x4(const float* a, const float* b, float* out) { + for (int r = 0; r < 4; r++) + for (int c = 0; c < 4; c++) { + double sum = 0; + for (int k = 0; k < 4; k++) sum += (double)a[r * 4 + k] * (double)b[k * 4 + c]; + out[r * 4 + c] = (float)sum; + } +} + /// (hookshot) The made frames of one present, by DLSS Frame Generation: how many were made, 0 when /// it could not run. Each one is copied into the set the display thread shows, so the rest of this /// file does not care which of the two made them. @@ -472,6 +509,40 @@ int dlssg_frames(VkCommandBuffer cmd, OutSet& set, int cur, uint32_t uw, uint32_ in.fov_y = 2.0f * std::atan(tan_half); } } + // The rest of the matrix set NGX wants, built from the two halves the draw path kept. The + // camera's own position and axes come out of the view: its 3x3 is world -> camera, so the rows + // are the camera's axes in world space and the position is -R transpose times the translation. + if (scene.have_view_projection) { + memcpy(in.camera_view_to_clip, scene.projection, sizeof in.camera_view_to_clip); + if (invert4x4(scene.projection, in.clip_to_camera_view)) { + for (int i = 0; i < 16; i++) in.clip_to_lens_clip[i] = (i % 5) == 0 ? 1.0f : 0.0f; + const float* v = scene.view; + for (int c = 0; c < 3; c++) { + in.camera_right[c] = v[0 * 4 + c]; + in.camera_up[c] = v[1 * 4 + c]; + in.camera_forward[c] = v[2 * 4 + c]; + } + for (int c = 0; c < 3; c++) + in.camera_pos[c] = -(v[0 * 4 + c] * v[0 * 4 + 3] + v[1 * 4 + c] * v[1 * 4 + 3] + + v[2 * 4 + c] * v[2 * 4 + 3]); + // clip -> previous clip, and back. The camera-motion pass keeps the previous view + // projection; here the pair is built from this frame's and the last one this function + // saw, which is the same frame boundary the made frame sits on. + static float previous[16]; + static bool have_previous = false; + float inverse_vp[16]; + if (have_previous && invert4x4(scene.view_projection, inverse_vp)) { + multiply4x4(previous, inverse_vp, in.clip_to_prev_clip); + float inverse_previous[16]; + if (invert4x4(previous, inverse_previous)) + multiply4x4(scene.view_projection, inverse_previous, in.prev_clip_to_clip); + in.have_matrices = true; + } + memcpy(previous, scene.view_projection, sizeof previous); + have_previous = true; + } + } + if (!in.have_matrices) return 0; // (the first frame after a cut has no pair to interpolate on) in.frames_made = (uint32_t)want; int made = 0; for (int k = 1; k <= want; k++) { diff --git a/gpu/vk/vk_main.cpp b/gpu/vk/vk_main.cpp index d48f10423..efe1c8cb7 100644 --- a/gpu/vk/vk_main.cpp +++ b/gpu/vk/vk_main.cpp @@ -4,7 +4,8 @@ #include "vk_paths.h" #include "vk_loader.h" -#include "vk_dlss.h" // (the device extensions DLSS needs, asked of NGX before the device is made) +#include "vk_dlss.h" // (the device extensions DLSS needs, asked of NGX before the device is made) +#include "vk_dlssg.h" // (frame generation asks for its own set, which is not the same one) #include #include @@ -237,19 +238,26 @@ bool create_device() { // creates exactly the device it created before. An extension NGX names and this GPU does not // have is named in the log and left out: DLSS will then report itself unavailable, which is the // honest outcome, rather than vkCreateDevice failing and taking the whole renderer with it. - { + // Each feature is asked separately: super resolution's set is not frame generation's, and a + // device made for one and not the other is where NGX creates the feature and fails + // (FAIL_PlatformError) while still reporting it available. + for (int which = 0; which < 2; which++) { + const char* const name = which == 0 ? "dlss" : "dlssg"; const char* dlss_want[16] = {}; - const size_t dlss_n = dlss::device_extensions(dev.instance, dev.physical, dlss_want, - sizeof dlss_want / sizeof *dlss_want); + const size_t dlss_n = + which == 0 ? dlss::device_extensions(dev.instance, dev.physical, dlss_want, + sizeof dlss_want / sizeof *dlss_want) + : dlssg::device_extensions(dev.instance, dev.physical, dlss_want, + sizeof dlss_want / sizeof *dlss_want); for (size_t i = 0; i < dlss_n; i++) { if (!has_extension(exts, dlss_want[i])) { - logf("vk: dlss wants %s, which this GPU does not have: DLSS will be unavailable", + logf("vk: %s wants %s, which this GPU does not have: it will be unavailable", name, dlss_want[i]); continue; } bool already = false; for (const char* have : want) already = already || strcmp(have, dlss_want[i]) == 0; - if (!already) want.push_back(dlss_want[i]), logf("vk: dlss wants %s: enabled", dlss_want[i]); + if (!already) want.push_back(dlss_want[i]), logf("vk: %s wants %s: enabled", name, dlss_want[i]); } } From bb58e703d8b201665ff3f335ee52068d9d6948b7 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Sun, 8 Nov 2026 19:17:06 -0600 Subject: [PATCH 039/119] docs: frame generation runs, and the two refusals that got it there Co-Authored-By: Claude Opus 5 --- docs/upscaling.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/docs/upscaling.md b/docs/upscaling.md index b2385e24d..dd99e5840 100644 --- a/docs/upscaling.md +++ b/docs/upscaling.md @@ -378,7 +378,23 @@ parameters in `nvsdk_ngx_params_dlssg.h` -- and the SDK ships `libnvidia-ngx-dls `Linux_x86_64` beside the super-resolution and ray-reconstruction libraries. It is reached exactly as super resolution is, through the shared session in `gpu/vk/vk_ngx.h`. -`gpu/vk/vk_dlssg.h` is that backend. It makes the frames the existing interpolator would have made, +`gpu/vk/vk_dlssg.h` is that backend, and it has run: on this GPU NGX reports Frame Generation +available, the feature is created at 2048x1152 from 1536x864 inputs, and evaluations are accepted. +Getting there cost two refusals, both worth writing down because each names a real requirement: + +- **`FAIL_PlatformError` from `CreateFeature`, with the feature reporting itself available.** The + device had been made without the extensions frame generation needs. The extension query was gated + on `RX_VK_DLSS`, which a frame-generation run does not set, so a run that asked only for frame + generation created a device for nothing. Each feature is asked separately now. +- **`FAIL_MissingInput` from `EvaluateFeature`.** NGX's own helper sets five matrices plus the + camera's position and axes; this set two of them. They are in a struct NVIDIA calls + `Opt_Eval_Params`, and they are not optional. + +So the draw path now keeps the view and the projection as well as their product, and the present +path builds the rest: the projection's inverse, an identity lens clip, the camera's axes out of the +view's rows, its position from -R transpose times the translation, and the clip-to-previous-clip +pair from this frame's view projection and the last one. In doubles, because a float inverse of a +projection with a far plane in the thousands loses the precision the reprojection depends on. It makes the frames the existing interpolator would have made, from the scene's own depth and the camera motion reprojected from it, and `MultiFrameCount` lets it make more than one between two real frames -- which is the only way past a rate the game's own simulation limits. It slots into `framegen_record` ahead of the colour interpolation: where it From cf8b3b1ac112bdca2e1e144b80a308e22dce0ec5 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Sun, 8 Nov 2026 19:19:16 -0600 Subject: [PATCH 040/119] feat: the two backends have rows in the Insert menu "Scene upscaler" picks the game's own network, FSR 3.1 or DLSS; "Made frames by" picks the renderer's own interpolation or DLSS frame generation, with the existing "Frame generation" row still saying how many frames there are to make. Both persist in hookshot_options.ini like every other row, and both say they apply after a restart, which is true: each backend reads what it is once, and DLSS has to be known before the device is created because its extensions are asked for then. The RX_VK_* switches still win wherever they are set, so a test run is not at the mercy of a saved ini. Co-Authored-By: Claude Opus 5 --- gpu/vk/vk_dlss.cpp | 9 ++++++++- gpu/vk/vk_dlssg.cpp | 16 +++++++++++----- gpu/vk/vk_draw.cpp | 8 +++++++- gpu/vk/vk_menu.cpp | 14 ++++++++++++++ gpu/vk/vk_menu.h | 6 ++++++ 5 files changed, 46 insertions(+), 7 deletions(-) diff --git a/gpu/vk/vk_dlss.cpp b/gpu/vk/vk_dlss.cpp index b5355ca6e..128cc1b4e 100644 --- a/gpu/vk/vk_dlss.cpp +++ b/gpu/vk/vk_dlss.cpp @@ -22,6 +22,7 @@ #include #include "vk_dlss.h" +#include "vk_menu.h" // (the Insert menu's "Scene upscaler" row) #include "vk_paths.h" // (game_module_path: where the model library sits, which NGX is told) #if defined(RX_VK_DLSS_SDK) @@ -45,7 +46,13 @@ constexpr bool kHaveSdk = false; /// `RX_VK_DLSS=1` asks for this backend. Off is the default and costs nothing: with it off nothing /// is loaded, nothing is made and `supported()` is false before it looks at anything else. bool wanted() { - static const bool yes = getenv("RX_VK_DLSS") && atoi(getenv("RX_VK_DLSS")) != 0; + // RX_VK_DLSS wins where it is set; otherwise the Insert menu's "Scene upscaler" row. Read once, + // and read early -- the device extensions are asked for before the device exists -- so a change + // applies after a restart, which the row says. + static const bool yes = []() { + if (const char* e = getenv("RX_VK_DLSS")) return atoi(e) != 0; + return opts.scene_upscaler == 2; + }(); return yes; } diff --git a/gpu/vk/vk_dlssg.cpp b/gpu/vk/vk_dlssg.cpp index 0bfe52c0f..07678ef54 100644 --- a/gpu/vk/vk_dlssg.cpp +++ b/gpu/vk/vk_dlssg.cpp @@ -1,5 +1,6 @@ // (hookshot) DLSS Frame Generation: gpu/vk/vk_dlssg.h says what it is for and where it slots in. #include "vk_dlssg.h" +#include "vk_menu.h" // (the Insert menu's "Made frames by" row) #include #include @@ -32,11 +33,16 @@ constexpr uint32_t kMaxMade = 3; ///< (DLSS 4's multi-frame generation: up to /// game's. Off is the default and costs nothing. uint32_t asked() { static const uint32_t n = []() -> uint32_t { - const char* e = getenv("RX_VK_DLSSG"); - if (!e || !*e) return 0; - const int v = atoi(e); - if (v <= 0) return 0; - return (uint32_t)std::min(v, (int)kMaxMade); + if (const char* e = getenv("RX_VK_DLSSG"); e && *e) { + const int v = atoi(e); + return v <= 0 ? 0u : (uint32_t)std::min(v, (int)kMaxMade); + } + // Otherwise the Insert menu: "Made frames by" picks DLSS, and "Frame generation" says how + // many frames there are to make -- one fewer than the multiplier, since the last of each + // set is the game's own frame. + if (opts.framegen_by != 1) return 0; + const int made = std::clamp(opts.framegen - 1, 0, (int)kMaxMade); + return (uint32_t)made; }(); return n; } diff --git a/gpu/vk/vk_draw.cpp b/gpu/vk/vk_draw.cpp index f0f93d1e2..c6cf02920 100644 --- a/gpu/vk/vk_draw.cpp +++ b/gpu/vk/vk_draw.cpp @@ -44,6 +44,7 @@ #include "upscale_seam.h" #include "vk_camera_motion.h" #include "vk_dlss.h" +#include "vk_menu.h" // (the Insert menu's "Scene upscaler" row) #include "vk_fsr3.h" #include "shaders/movie_upscale_comp_spv.h" #include "shader_recompiler/backend/spirv/mma_layout.h" @@ -5672,7 +5673,12 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { // hardware f16 matrix multiply taau_key defaults to "-", so the network runs as itself and the // stand-in never does; gating everything on it would have made FSR unreachable on exactly the // hardware that can run it. RX_VK_FSR=1 therefore brings us in here on its own. - static const bool fsr_wanted = getenv("RX_VK_FSR") && atoi(getenv("RX_VK_FSR")) != 0; + // RX_VK_FSR wins where it is set, so a test run is not at the mercy of a saved ini; otherwise + // the Insert menu's "Scene upscaler" row decides. Read once: the backends cache what they are. + static const bool fsr_wanted = []() { + if (const char* e = getenv("RX_VK_FSR")) return atoi(e) != 0; + return opts.scene_upscaler == 1; + }(); // (hookshot) Both vendor backends ask their own question: FSR whether this device can run its // passes, DLSS whether this is an NVIDIA driver reporting Super Resolution with an NGX runtime // loaded. Each answers once and caches, so this costs nothing per dispatch. upscale::choose diff --git a/gpu/vk/vk_menu.cpp b/gpu/vk/vk_menu.cpp index 0d23898c2..ddc93f902 100644 --- a/gpu/vk/vk_menu.cpp +++ b/gpu/vk/vk_menu.cpp @@ -46,6 +46,14 @@ const char* tx_framegen(int v) { return t[v]; } const char* tx_onoff(int v) { return v ? "On" : "Off"; } +const char* tx_scene_upscaler(int v) { + static const char* t[] = {"The game's own", "FSR 3.1", "DLSS"}; + return t[v]; +} +const char* tx_framegen_by(int v) { + static const char* t[] = {"Renderer", "DLSS"}; + return t[v]; +} const char* tx_mousecam(int v) { return v ? "Native" : "As the stick"; } const char* tx_sens(int v) { static char b[12]; @@ -141,6 +149,12 @@ Row rows[] = { "Fills the whole screen with the game, without the window's border. The same as F11."}, {TAB_GRAPHICS, "GPU device", &opts.gpu_device, 0, 8, 1, tx_gpu, "Selects which graphics card Vulkan uses. Auto picks the best dedicated GPU. Applies after restart."}, + {TAB_GRAPHICS, "Scene upscaler", &opts.scene_upscaler, 0, 2, 1, tx_scene_upscaler, + "Which network resolves the 3D scene to its full size. The game's own is what it shipped with. FSR 3.1 runs anywhere; " + "DLSS needs an NVIDIA card, its runtime beside the game, and a build made with the NGX SDK. Applies after a restart."}, + {TAB_GRAPHICS, "Made frames by", &opts.framegen_by, 0, 1, 1, tx_framegen_by, + "What makes the frames between the game's own. Renderer blends the last two. DLSS uses the scene's depth and motion and " + "the same requirements as DLSS upscaling; where it cannot run, the renderer's own takes over. Applies after a restart."}, {TAB_GRAPHICS, "Frame generation", &opts.framegen, 0, 8, 1, tx_framegen, "Makes extra frames between the game's own (2x up to 8x), for smoother motion. Adds a little input delay, and fast motion or camera cuts " "can show artifacts."}, diff --git a/gpu/vk/vk_menu.h b/gpu/vk/vk_menu.h index ae7ad0bc9..7542caae4 100644 --- a/gpu/vk/vk_menu.h +++ b/gpu/vk/vk_menu.h @@ -30,6 +30,12 @@ struct Options { int preset = 0; // quality preset: 0 Custom, 1 Minimum (4GB), 2 Low (6GB), 3 Balanced (8GB), 4 High (12GB), 5 Ultra (16GB+) int vram_mb = 0; // dynamic texture cache budget limit in MB int mirror_mb = 0; // staging mirror limit in MB + // (hookshot) Which network resolves the scene, and which one makes the frames between the + // game's. Both are read once, at the first frame that needs them, so a change applies after a + // restart -- as the GPU device row already does. The RX_VK_* switches still win where they are + // set, so a test run is not at the mercy of a saved ini. + int scene_upscaler = 0; // 0 the game's own network, 1 FSR 3.1, 2 DLSS (gpu/vk/upscale_seam.h) + int framegen_by = 0; // 0 the renderer's own interpolation, 1 DLSS frame generation }; extern Options opts; /// (vk_memory.cpp) true when the quality preset's memory budgets (vram_mb, mirror_mb) are to be used: the card has no more From 384c41b473cef2b7008e336f6887d9a321b9d556 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Sun, 8 Nov 2026 19:41:15 -0600 Subject: [PATCH 041/119] feat: FSR 3 frame interpolation, and a jitter for the upscalers to undo **Frame interpolation.** gpu/vk/vk_fsr3fi.* records AMD's seventeen passes -- seven of optical flow, ten of interpolation -- from the sources vendored in the last commit, in the order the SDK's own dispatch schedules them. It sits behind RX_VK_FSR_FG=<1-3> and takes the same assembled inputs DLSS frame generation takes, so vk_framegen.cpp asks DLSS first, this second, and falls back to the renderer's own colour interpolation where neither takes the frame. A set is never shown half made. Written against the GLSL rather than from memory: every binding number comes from the pass file's own FFX_*_BIND_* defines, every descriptor type from the callbacks header's declarations, and each of the four constant blocks has a static_assert on its size. docs/upscaling.md records what is inferred rather than verified -- the optical-flow scale above all, which no vendored source assigns -- because the picture cannot be checked from here. FSR 3.1 interpolates the midpoint and only the midpoint: there is no phase in its constants and its own header writes t = 0.5 outright. A count above one therefore repeats that frame rather than making distinct ones, and supported() says so once. **Jitter.** Neither upscaler had one, and the game has none to extract: the projection scan refuses any matrix whose m02 is not exactly zero and still finds one, which settles it without a run. So the renderer supplies it, as a sub-pixel viewport offset on the scene's own passes -- the ones drawing into a depth target of the extent the upscaler is given, never the HUD or the menus, which have nothing to resolve them. Halton, with AMD's 8-times-ratio-squared phase count, and the offset handed to FSR and DLSS so they can undo it. The viewport rather than the projection because the projection lives in the game's memory where the GPU reads it, so changing it would mean binding a patched copy to every draw that reads it -- the kind of per-draw work that cost this renderer 300 ms a frame once already. RX_VK_JITTER=0 turns it off with an upscaler still on, which is the comparison worth having. Co-Authored-By: Claude Opus 5 --- gpu/vk/vk_draw.cpp | 102 +++- gpu/vk/vk_draw.h | 5 + gpu/vk/vk_framegen.cpp | 60 ++ gpu/vk/vk_fsr3fi.cpp | 1211 ++++++++++++++++++++++++++++++++++++++++ gpu/vk/vk_fsr3fi.h | 99 ++++ 5 files changed, 1476 insertions(+), 1 deletion(-) create mode 100644 gpu/vk/vk_fsr3fi.cpp create mode 100644 gpu/vk/vk_fsr3fi.h diff --git a/gpu/vk/vk_draw.cpp b/gpu/vk/vk_draw.cpp index c6cf02920..f2bd98e9a 100644 --- a/gpu/vk/vk_draw.cpp +++ b/gpu/vk/vk_draw.cpp @@ -2641,6 +2641,77 @@ struct SceneDepth { }; SceneDepth scene_depth; + +// (hookshot) The sub-pixel offset the scene is rasterized with, for a temporal upscaler. +// +// The game does not jitter: capture_view_projection below refuses any projection whose m02 is not +// exactly zero, and it finds one, so the projection it hands its own network carries no sub-pixel +// offset. Its network is single-image and has no use for one. FSR and DLSS do: without sample +// diversity they reconstruct from motion alone, which is softer than either is meant to be. +// +// The offset is applied to the viewport, not to the projection. The projection lives in the game's +// own memory and the GPU reads it there, so changing it would mean binding a patched copy to every +// draw that reads it -- the kind of per-draw work that has already cost this renderer 300 ms a +// frame once. A viewport offset moves rasterization by the same amount and costs two additions, and +// it applies to colour, depth and motion together because they are the same pass. +struct SceneJitter { + float x = 0.0f, y = 0.0f; ///< render pixels + int64_t frame = -1; ///< the present this was advanced for + uint32_t phase = 0; + /// What the scene is resolved to, once the seam has run once. The phase count depends on the + /// ratio, so until then the sequence is the 1:1 one, which is eight phases and not wrong -- just + /// shorter than it will be. + uint32_t display_width = 0; +}; +SceneJitter scene_jitter_state; + +/// RX_VK_JITTER=0 turns it off with an upscaler still on, which is the A/B worth having; =1 turns it +/// on with neither. Otherwise it follows whether a vendor upscaler is going to run at all, because +/// jitter without a temporal resolve is just shimmer. +bool jitter_wanted() { + static const bool yes = []() { + if (const char* e = getenv("RX_VK_JITTER")) return atoi(e) != 0; + if (const char* e = getenv("RX_VK_FSR"); e && atoi(e) != 0) return true; + if (const char* e = getenv("RX_VK_DLSS"); e && atoi(e) != 0) return true; + return opts.scene_upscaler != 0; + }(); + return yes; +} + +/// The radical inverse in a base: Halton, which is the sequence both vendors specify. +float halton_at(uint32_t index, uint32_t base) { + float f = 1.0f, r = 0.0f; + for (uint32_t i = index; i; i /= base) { + f /= (float)base; + r += f * (float)(i % base); + } + return r; +} + +/// How many phases before the sequence repeats. AMD's rule is 8 * ratio squared; NVIDIA's guidance +/// is the same shape, so one rule serves both rather than each backend inventing its own. +uint32_t jitter_phases(uint32_t render_width, uint32_t display_width) { + if (!render_width || display_width < render_width) return 8; + const float ratio = (float)display_width / (float)render_width; + const uint32_t n = (uint32_t)std::ceil(8.0f * ratio * ratio); + return std::clamp(n, 1u, 128u); +} + +/// Advances once per present. Called from the viewport path, which is the first place in a frame +/// that knows the scene's extent. +void advance_scene_jitter(uint32_t render_width, uint32_t display_width) { + extern int64_t presents_now; // (vk_replay.cpp) + if (scene_jitter_state.frame == presents_now) return; + scene_jitter_state.frame = presents_now; + const uint32_t phases = jitter_phases(render_width, display_width); + scene_jitter_state.phase = (scene_jitter_state.phase + 1) % std::max(1u, phases); + // Centred on the pixel: Halton gives [0,1), and an offset that is never negative would move the + // whole image half a pixel rather than sampling around where it is. + scene_jitter_state.x = halton_at(scene_jitter_state.phase + 1, 2) - 0.5f; + scene_jitter_state.y = halton_at(scene_jitter_state.phase + 1, 3) - 0.5f; +} + + /// (hookshot) Once per distinct render target set, with RX_VK_MRT_CENSUS=1: how many colour attachments the game /// binds at once, their formats and the extent. Off by default and free while off. /// @@ -2914,7 +2985,20 @@ void dynamic_state(VkCommandBuffer cmd, const NvnState& s, const Targets& at, Vk // the viewport upside down (negative height): NVN's NDC has +y up, Vulkan's down float vx = s.viewport[0][0], vy = s.viewport[0][1], vw = s.viewport[0][2], vh = s.viewport[0][3]; if (vw == 0.0f && vh == 0.0f) vx = 0, vy = 0, vw = (float)at.width, vh = (float)at.height; - d.vp = {vx, vy + vh, vw, -vh, std::clamp(s.depth_near, 0.0f, 1.0f), std::clamp(s.depth_far, 0.0f, 1.0f)}; + // (hookshot) The scene's own passes are jittered for a temporal upscaler: the ones that draw + // into a depth target of the extent the upscaler is given. Everything else -- the HUD, the + // menus, the movie layer -- is left alone, because a jittered HUD is a shimmering HUD and + // nothing resolves it. + float jx = 0.0f, jy = 0.0f; + if (jitter_wanted() && at.depth && depth_aspect(at.depth_format) && scene_depth.width && + at.width == scene_depth.width && at.height == scene_depth.height) { + advance_scene_jitter(scene_depth.width, scene_jitter_state.display_width + ? scene_jitter_state.display_width + : scene_depth.width); + jx = scene_jitter_state.x, jy = scene_jitter_state.y; + } + d.vp = {vx + jx, vy + vh + jy, vw, -vh, std::clamp(s.depth_near, 0.0f, 1.0f), + std::clamp(s.depth_far, 0.0f, 1.0f)}; d.sc = {{0, 0}, {at.width, at.height}}; if (s.scissor[2] > 0 && s.scissor[3] > 0) { const int32_t x0 = std::max(0, s.scissor[0]), y0 = std::max(0, s.scissor[1]); @@ -5459,6 +5543,17 @@ extern "C" __attribute__((weak)) float hos_oot_camera(float* near_plane, float* /// which is what keeps camera motion from reprojecting through a guess) extern "C" __attribute__((weak)) int hos_oot_view_projection(float* row_major_4x4); +void scene_jitter_display_width(uint32_t width) { + scene_jitter_state.display_width = width; +} + +bool scene_jitter(float* x, float* y) { + if (!jitter_wanted() || scene_jitter_state.frame < 0) return false; + if (x) *x = scene_jitter_state.x; + if (y) *y = scene_jitter_state.y; + return true; +} + /// (hookshot) The scene's depth and matrix, for the present path (vk_draw.h). bool scene_frame_inputs(SceneFrameInputs* out) { if (!out) return false; @@ -5741,6 +5836,7 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { // it has no motion or depth among them -- gating on that meant FSR could never be reached) uint32_t in_w = 0, in_h = 0; if (!bindings.empty()) in_w = bindings[0].width, in_h = bindings[0].height; + if (in_w) scene_jitter_display_width(req.output_width); if (fsr_here && scene_depth.view && fsr3::supported() && in_w && in_h && scene_depth.width == in_w && scene_depth.height == in_h) { fsr3::note_frame(); // (the frame time at this seam, for every RX_VK_FSR_STAGE) @@ -5776,6 +5872,7 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { di.render_width = scene_depth.width, di.render_height = scene_depth.height; di.upscale_width = req.output_width, di.upscale_height = req.output_height; di.motion_scale[0] = 1.0f, di.motion_scale[1] = 1.0f; // (already render pixels) + scene_jitter(&di.jitter[0], &di.jitter[1]); float dnp = 0.0f, dfp = 0.0f; const float dth = hos_oot_camera ? hos_oot_camera(&dnp, &dfp) : 0.0f; if (dth > 0.0f && dnp > 0.0f) di.near_plane = dnp, di.fov_y = 2.0f * std::atan(dth); @@ -5804,6 +5901,9 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { ai.render_width = scene_depth.width, ai.render_height = scene_depth.height; ai.upscale_width = req.output_width, ai.upscale_height = req.output_height; ai.motion_scale[0] = 1.0f, ai.motion_scale[1] = 1.0f; // (already render pixels) + // The offset this frame's scene was rasterized with, which the upscaler has to + // undo. Zero where nothing is jittering, which is what that means. + scene_jitter(&ai.jitter[0], &ai.jitter[1]); float np = 0.0f, fp = 0.0f; const float th = hos_oot_camera ? hos_oot_camera(&np, &fp) : 0.0f; if (th > 0.0f && np > 0.0f) ai.near_plane = np, ai.fov_y = 2.0f * std::atan(th); diff --git a/gpu/vk/vk_draw.h b/gpu/vk/vk_draw.h index 5e4eb701d..0d93e3817 100644 --- a/gpu/vk/vk_draw.h +++ b/gpu/vk/vk_draw.h @@ -30,6 +30,11 @@ struct SceneFrameInputs { }; bool scene_frame_inputs(SceneFrameInputs* out); +/// (hookshot) The sub-pixel offset this frame's scene was rasterized with, in render pixels, for the +/// backend that has to undo it. False when nothing is jittering, which a backend takes as "no +/// offset" and not as "use the last one". +bool scene_jitter(float* x, float* y); + /// A graphics pipeline as hookshot_pipelines.bin keeps it (the precompile's notes): what built it struct PipeNote { uint64_t key, prog, variant; diff --git a/gpu/vk/vk_framegen.cpp b/gpu/vk/vk_framegen.cpp index 96c50e514..564d5f6bd 100644 --- a/gpu/vk/vk_framegen.cpp +++ b/gpu/vk/vk_framegen.cpp @@ -20,6 +20,7 @@ #include "vk_camera_motion.h" #include "vk_dlssg.h" +#include "vk_fsr3fi.h" #include "vk_draw.h" // (scene_frame_inputs: the depth and matrix the draw path kept) #include @@ -473,6 +474,63 @@ void multiply4x4(const float* a, const float* b, float* out) { /// this runs at present time where neither is otherwise in reach. The motion is the same /// camera-only reprojection the upscalers use; asking for it twice in one frame is answered with /// the one already written (gpu/vk/vk_camera_motion.cpp). +/// (hookshot) The same job by FSR 3 frame interpolation (gpu/vk/vk_fsr3fi.h), for the GPUs DLSS does +/// not serve. The inputs it needs are the ones assembled above, so this is deliberately the same +/// shape; what it adds is the presented colour's image, which it copies into its own previous +/// source for the next frame. +int fsr3fi_frames(VkCommandBuffer cmd, OutSet& set, int cur, uint32_t uw, uint32_t uh, int m) { + SceneFrameInputs scene; + if (!scene_frame_inputs(&scene) || !scene.have_view_projection) return 0; + camera_motion::Matrix vp{}; + memcpy(vp.m, scene.view_projection, sizeof vp.m); + const VkImageView motion = camera_motion::record(cmd, scene.depth_view, scene.depth_format, + scene.render_width, scene.render_height, vp); + if (!motion) return 0; + const int want = std::min(m - 1, (int)fsr3fi::frames_wanted()); + if (want <= 0) return 0; + + fsr3fi::Inputs in; + in.color = fg.frames[cur].view; + in.color_image = fg.frames[cur].image; + in.color_format = VK_FORMAT_R8G8B8A8_UNORM; // (make_img above, for fg.frames) + in.width = uw, in.height = uh; + in.depth = scene.depth_view; + in.motion = motion; + in.render_width = scene.render_width, in.render_height = scene.render_height; + in.motion_scale[0] = 1.0f, in.motion_scale[1] = 1.0f; // (already render pixels) + scene_jitter(&in.jitter[0], &in.jitter[1]); + { + float near_plane = 0.0f, far_plane = 0.0f; + const float tan_half = hos_oot_camera ? hos_oot_camera(&near_plane, &far_plane) : 0.0f; + if (tan_half > 0.0f && near_plane > 0.0f) { + in.near_plane = near_plane; + if (far_plane > near_plane) in.far_plane = far_plane; + in.fov_y = 2.0f * std::atan(tan_half); + } + } + in.frames_made = (uint32_t)want; + int made = 0; + for (int k = 1; k <= want; k++) { + in.frame_index = (uint32_t)k; + if (!fsr3fi::generate(cmd, in)) break; + const VkImage from = fsr3fi::made_image((uint32_t)k); + if (!from) break; + const VkImageCopy c{{VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, {0, 0, 0}, + {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, {0, 0, 0}, {uw, uh, 1}}; + vkCmdCopyImage(cmd, from, VK_IMAGE_LAYOUT_GENERAL, set.frame[k - 1].image, + VK_IMAGE_LAYOUT_GENERAL, 1, &c); + made++; + } + if (made != want) { + static int told = 0; + if (told++ < 4) + logf("vk: fsr3 frame interpolation made %d of %d frames: the renderer's own takes this " + "one", made, want); + return 0; // (a half-made set would show one real frame and one stale image) + } + return made; +} + int dlssg_frames(VkCommandBuffer cmd, OutSet& set, int cur, uint32_t uw, uint32_t uh, int m) { SceneFrameInputs scene; if (!scene_frame_inputs(&scene) || !scene.have_view_projection) return 0; @@ -600,6 +658,8 @@ bool framegen_record(VkCommandBuffer cmd, VkImageView src, uint32_t sw, uint32_t // does not report it, or a frame where the scene's depth and matrix are not both in hand -- and // then the interpolation below runs exactly as it did before this existed. if (blend && m > 1 && dlssg::supported()) set->made = dlssg_frames(cmd, *set, cur, uw, uh, m); + if (set->made == 0 && blend && m > 1 && fsr3fi::supported()) + set->made = fsr3fi_frames(cmd, *set, cur, uw, uh, m); if (set->made == 0 && blend && m > 1) { pass(cmd, fg.flow, {{fg.lumas[prev].view, fg.nearest}, {fg.lumas[cur].view, fg.nearest}, {fg.flows[0].view, VK_NULL_HANDLE}}, cw, ch); diff --git a/gpu/vk/vk_fsr3fi.cpp b/gpu/vk/vk_fsr3fi.cpp new file mode 100644 index 000000000..857906391 --- /dev/null +++ b/gpu/vk/vk_fsr3fi.cpp @@ -0,0 +1,1211 @@ +// (hookshot) FSR 3 frame interpolation's pipelines, internal images and dispatches; see vk_fsr3fi.h +// for what it is for and where it slots in. +// +// The resource table, the per-pass binding lists, the pass order and the dispatch sizes are AMD's, +// not ours: ffx_opticalflow.cpp and ffx_frameinterpolation.cpp decide them, and each pass's GLSL +// numbers its own bindings (the FFX_OPTICALFLOW_BIND_* / FFX_FRAMEINTERPOLATION_BIND_* lines at the +// top of each file in third_party/fidelityfx-sdk/shaders). They are written out here in the SDK's +// order rather than derived, because getting one wrong is a validation error at best and a wrong +// picture at worst. vk_fsr3.cpp does the same for the upscaler and this file follows its shape. +#include +#include +#include +#include +#include +#include +#include +#include + +#include "vk_fsr3fi.h" +#include "vk_gprof.h" // (RX_VK_PASS_TIMING: a span per pass, so the report names them) + +#include "shaders/fsr3_fi_disocclusion_mask_comp_spv.h" +#include "shaders/fsr3_fi_game_motion_vector_field_comp_spv.h" +#include "shaders/fsr3_fi_game_vector_field_inpainting_pyramid_comp_spv.h" +#include "shaders/fsr3_fi_inpainting_comp_spv.h" +#include "shaders/fsr3_fi_inpainting_pyramid_comp_spv.h" +#include "shaders/fsr3_fi_interpolate_comp_spv.h" +#include "shaders/fsr3_fi_optical_flow_vector_field_comp_spv.h" +#include "shaders/fsr3_fi_reconstruct_and_dilate_comp_spv.h" +#include "shaders/fsr3_fi_reconstruct_previous_depth_comp_spv.h" +#include "shaders/fsr3_fi_setup_comp_spv.h" +#include "shaders/fsr3_of_compute_optical_flow_v5_comp_spv.h" +#include "shaders/fsr3_of_compute_scd_divergence_comp_spv.h" +#include "shaders/fsr3_of_filter_optical_flow_v5_comp_spv.h" +#include "shaders/fsr3_of_generate_scd_histogram_comp_spv.h" +#include "shaders/fsr3_of_luminance_pyramid_comp_spv.h" +#include "shaders/fsr3_of_prepare_luma_comp_spv.h" +#include "shaders/fsr3_of_scale_optical_flow_v5_comp_spv.h" + +namespace mkwvk::fsr3fi { +namespace { + +// ---- the passes and what each one binds ---- + +/// A descriptor's kind. The optical-flow passes declare no sampler at all (every load there is a +/// texelFetch, under GL_EXT_samplerless_texture_functions); the interpolation passes declare one, a +/// linear clamp sampler at binding 1000, which is why the sampler is per-pass below and not the +/// fixed pair of samplers vk_fsr3.cpp pushes for every upscaler pass. +enum Kind : uint8_t { T, I, U, B }; // sampled texture, storage image, uniform buffer, storage buffer + +/// One descriptor, at the binding number its pass's GLSL fixes it to. The numbers are not an index +/// into this list: three of the seventeen passes leave gaps where the SDK's HLSL root signature +/// needed a slot the GLSL does not declare. +struct Bind { + uint16_t binding; + Kind kind; +}; + +struct PassInfo { + const char* name; + const uint32_t* spv; + size_t spv_bytes; + const Bind* binds; + size_t bind_count; + bool sampler; ///< declares the linear clamp sampler at binding 1000 +}; + +// Optical flow. Seven passes, no samplers. +constexpr Bind OF_PREPARE_LUMA[]{{0, T}, {1, I}, {2, U}}; +constexpr Bind OF_LUMINANCE_PYRAMID[]{{0, I}, {1, I}, {2, I}, {3, I}, {4, I}, + {5, I}, {6, I}, {7, U}, {8, U}}; +constexpr Bind OF_SCD_HISTOGRAM[]{{0, T}, {1, I}, {2, U}}; +constexpr Bind OF_SCD_DIVERGENCE[]{{0, I}, {1, I}, {2, I}, {3, I}, {4, U}}; +constexpr Bind OF_SEARCH[]{{0, T}, {1, T}, {2, I}, {3, I}, {4, U}}; +constexpr Bind OF_FILTER[]{{0, T}, {1, I}, {2, U}}; +constexpr Bind OF_SCALE[]{{0, T}, {1, T}, {2, T}, {3, I}, {4, I}, {5, U}}; + +// Frame interpolation. Ten passes, each with the linear clamp sampler. +constexpr Bind FI_RECONSTRUCT_AND_DILATE[]{{0, T}, {1, T}, {2, I}, {3, I}, {4, I}, {5, U}}; +constexpr Bind FI_SETUP[]{{0, T}, {1, I}, {2, I}, {3, I}, {4, I}, {5, I}, {6, B}, {7, U}}; +constexpr Bind FI_RECONSTRUCT_PREVIOUS_DEPTH[]{{0, T}, {1, T}, {2, T}, {3, T}, {4, I}, {5, U}}; +constexpr Bind FI_GAME_MOTION_VECTOR_FIELD[]{{0, T}, {1, T}, {2, T}, {3, T}, + {4, T}, {5, I}, {6, I}, {7, U}}; +/// The game vector field's inpainting pyramid: two textures, the counter buffer, thirteen mip +/// levels, then both constant blocks. The pyramid is a single-pass downsampler, which is why it +/// wants every level bound at once and why it reads back level 5 through the same storage images. +constexpr Bind FI_GAME_VECTOR_FIELD_PYRAMID[]{ + {0, T}, {1, T}, {2, B}, {3, I}, {4, I}, {5, I}, + {6, I}, {7, I}, {8, I}, {9, I}, {10, I}, {11, I}, + {12, I}, {13, I}, {14, I}, {15, I}, {16, U}, {17, U}}; +/// Binding 5 is not declared by this pass: the SDK's HLSL has an optical-flow debug view there and +/// the GLSL leaves the slot out, so the list jumps from 4 to 6. +constexpr Bind FI_OPTICAL_FLOW_VECTOR_FIELD[]{{0, T}, {1, T}, {2, T}, {3, T}, + {4, T}, {6, I}, {7, I}, {8, U}}; +constexpr Bind FI_DISOCCLUSION_MASK[]{{0, T}, {1, T}, {2, T}, {3, T}, {4, T}, + {5, T}, {6, T}, {7, I}, {8, U}}; +constexpr Bind FI_INTERPOLATE[]{{0, T}, {1, T}, {2, T}, {3, T}, {4, T}, {5, T}, + {6, T}, {7, T}, {8, B}, {9, I}, {10, U}}; +constexpr Bind FI_INPAINTING_PYRAMID[]{{0, T}, {1, B}, {2, I}, {3, I}, {4, I}, {5, I}, + {6, I}, {7, I}, {8, I}, {9, I}, {10, I}, {11, I}, + {12, I}, {13, I}, {14, I}, {15, U}, {16, U}}; +/// Bindings 4 to 6 are the HUD-less and UI inputs this game does not have, which the GLSL does not +/// declare, so the output jumps to 7. +constexpr Bind FI_INPAINTING[]{{0, T}, {1, T}, {2, T}, {3, T}, {7, I}, {8, U}}; + +#define PASS(n, spv, b, s) PassInfo{n, spv, sizeof spv, b, sizeof b / sizeof b[0], s} + +/// The passes, in the order PassId numbers them. +const PassInfo PASSES[]{ + PASS("of prepare_luma", FSR3_OF_PREPARE_LUMA_COMP_SPV, OF_PREPARE_LUMA, false), + PASS("of luminance_pyramid", FSR3_OF_LUMINANCE_PYRAMID_COMP_SPV, OF_LUMINANCE_PYRAMID, false), + PASS("of scd_histogram", FSR3_OF_GENERATE_SCD_HISTOGRAM_COMP_SPV, OF_SCD_HISTOGRAM, false), + PASS("of scd_divergence", FSR3_OF_COMPUTE_SCD_DIVERGENCE_COMP_SPV, OF_SCD_DIVERGENCE, false), + PASS("of search", FSR3_OF_COMPUTE_OPTICAL_FLOW_V5_COMP_SPV, OF_SEARCH, false), + PASS("of filter", FSR3_OF_FILTER_OPTICAL_FLOW_V5_COMP_SPV, OF_FILTER, false), + PASS("of scale", FSR3_OF_SCALE_OPTICAL_FLOW_V5_COMP_SPV, OF_SCALE, false), + PASS("fi reconstruct_and_dilate", FSR3_FI_RECONSTRUCT_AND_DILATE_COMP_SPV, + FI_RECONSTRUCT_AND_DILATE, true), + PASS("fi setup", FSR3_FI_SETUP_COMP_SPV, FI_SETUP, true), + PASS("fi reconstruct_previous_depth", FSR3_FI_RECONSTRUCT_PREVIOUS_DEPTH_COMP_SPV, + FI_RECONSTRUCT_PREVIOUS_DEPTH, true), + PASS("fi game_motion_vector_field", FSR3_FI_GAME_MOTION_VECTOR_FIELD_COMP_SPV, + FI_GAME_MOTION_VECTOR_FIELD, true), + PASS("fi game_vector_field_pyramid", FSR3_FI_GAME_VECTOR_FIELD_INPAINTING_PYRAMID_COMP_SPV, + FI_GAME_VECTOR_FIELD_PYRAMID, true), + PASS("fi optical_flow_vector_field", FSR3_FI_OPTICAL_FLOW_VECTOR_FIELD_COMP_SPV, + FI_OPTICAL_FLOW_VECTOR_FIELD, true), + PASS("fi disocclusion_mask", FSR3_FI_DISOCCLUSION_MASK_COMP_SPV, FI_DISOCCLUSION_MASK, true), + PASS("fi interpolate", FSR3_FI_INTERPOLATE_COMP_SPV, FI_INTERPOLATE, true), + PASS("fi inpainting_pyramid", FSR3_FI_INPAINTING_PYRAMID_COMP_SPV, FI_INPAINTING_PYRAMID, true), + PASS("fi inpainting", FSR3_FI_INPAINTING_COMP_SPV, FI_INPAINTING, true), +}; +#undef PASS + +enum PassId : size_t { + P_OF_PREPARE_LUMA, + P_OF_LUMINANCE_PYRAMID, + P_OF_SCD_HISTOGRAM, + P_OF_SCD_DIVERGENCE, + P_OF_SEARCH, + P_OF_FILTER, + P_OF_SCALE, + P_FI_RECONSTRUCT_AND_DILATE, + P_FI_SETUP, + P_FI_RECONSTRUCT_PREVIOUS_DEPTH, + P_FI_GAME_MOTION_VECTOR_FIELD, + P_FI_GAME_VECTOR_FIELD_PYRAMID, + P_FI_OPTICAL_FLOW_VECTOR_FIELD, + P_FI_DISOCCLUSION_MASK, + P_FI_INTERPOLATE, + P_FI_INPAINTING_PYRAMID, + P_FI_INPAINTING, + P_COUNT, +}; +static_assert(sizeof PASSES / sizeof PASSES[0] == P_COUNT, "PassId must name every pass"); + +// ---- the constant blocks ---- + +/// cbFI, exactly as ffx_frameinterpolation_private.h lays out FrameInterpolationConstants and as the +/// std140 block in ffx_frameinterpolation_callbacks_glsl.h reads it. Every pass reads it by offset, +/// so a field out of place is a wrong picture and not a compile error; the size is asserted because +/// that is the one part of the layout a compiler can check for us. +struct Constants { + int32_t render_size[2]; + int32_t display_size[2]; + float display_size_rcp[2]; + float camera_near; + float camera_far; + int32_t upscaler_target_size[2]; + int32_t mode; + int32_t reset; + float device_to_view_depth[4]; + float delta_time; + int32_t hudless_attached_factor; + int32_t distortion_field_size[2]; + float optical_flow_scale[2]; + int32_t optical_flow_block_size; + uint32_t dispatch_flags; + int32_t max_render_size[2]; + int32_t optical_flow_half_res_mode; + int32_t num_instances; + int32_t interpolation_rect_base[2]; + int32_t interpolation_rect_size[2]; + float debug_bar_color[3]; + uint32_t back_buffer_transfer_function; + float min_max_luminance[2]; + float tan_half_fov; + int32_t pad1; + float jitter[2]; + float motion_vector_scale[2]; +}; +static_assert(sizeof(Constants) == 176, "cbFI must match the SDK's layout"); + +/// cbInpaintingPyramid: the single-pass downsampler's setup, staged twice a frame because the two +/// pyramid passes downsample rectangles of different sizes. +struct PyramidConstants { + uint32_t mips; + uint32_t num_work_groups; + uint32_t work_group_offset[2]; +}; +static_assert(sizeof(PyramidConstants) == 16, "cbInpaintingPyramid must match the SDK's layout"); + +/// cbOF, as ffx_opticalflow_private.h lays out OpticalflowConstants. The pyramid level in it changes +/// between dispatches, which is why there is a slot per level below rather than one block a frame. +struct OfConstants { + int32_t input_luma_resolution[2]; + uint32_t pyramid_level; + uint32_t pyramid_level_count; + int32_t frame_index; + uint32_t back_buffer_transfer_function; + float min_max_luminance[2]; +}; +static_assert(sizeof(OfConstants) == 32, "cbOF must match the SDK's layout"); + +/// cbOF_SPD. Only numWorkGroupOpticalFlowInputPyramid is read by the luma pyramid (its mip count is +/// fixed at six in the shader itself), but the whole block is written because the GLSL declares it. +struct OfSpdConstants { + uint32_t mips; + uint32_t num_work_groups; + uint32_t work_group_offset[2]; + uint32_t num_work_groups_pyramid; + uint32_t pad0, pad1, pad2; +}; +static_assert(sizeof(OfSpdConstants) == 32, "cbOF_SPD must match the SDK's layout"); + +// ---- state ---- + +constexpr uint32_t kMaxMade = 3; ///< as dlssg: up to three frames between two of the game's +constexpr uint32_t kOfLevels = 7; ///< advancedAlgorithmIterations in ffx_opticalflow.cpp +constexpr uint32_t kOfBlockSize = 8; ///< opticalFlowBlockSize, likewise +constexpr uint32_t kPyramidMips = 13; ///< the mip UAVs the two inpainting pyramid passes declare +constexpr uint32_t kScdHistogramWidth = 256 * (3 * 3); ///< HistogramBins * HistogramsPerDim^2 +constexpr uint32_t kCountersBytes = 16; ///< two uints, rounded up: COUNTER_SPD and the reset index +constexpr uint32_t kUniformFrames = 4; ///< (more than the swapchain's images in flight) + +struct Pipeline { + VkDescriptorSetLayout set = VK_NULL_HANDLE; + VkPipelineLayout layout = VK_NULL_HANDLE; + VkPipeline pipeline = VK_NULL_HANDLE; +}; + +struct Image { + VkImage image = VK_NULL_HANDLE; + VmaAllocation memory = nullptr; + VkImageView view = VK_NULL_HANDLE; ///< every level + std::vector levels; ///< one per level, for the mipped ones + uint32_t width = 0, height = 0, level_count = 1; + VkFormat format = VK_FORMAT_UNDEFINED; +}; + +/// One descriptor of a dispatch: an image view, or a range of a buffer. +struct Resource { + VkImageView view = VK_NULL_HANDLE; + VkBuffer buffer = VK_NULL_HANDLE; + VkDeviceSize offset = 0; + VkDeviceSize size = 0; +}; + +struct State { + bool tried = false; + bool ok = false; + /// An allocation failed once: the images are not re-made every frame afterwards, because a + /// device that could not find the memory for them this frame will not find it in sixteen + /// milliseconds and the retry would be a stall a frame for the rest of the run. + bool failed = false; + Pipeline passes[P_COUNT]; + VkSampler linear = VK_NULL_HANDLE; + + // Optical flow's internal images. The luma pyramids ping-pong on frame parity: one holds this + // frame's luma and the other the frame before it, which is the pair the search works on. + Image of_luma[2]; ///< R8_UINT at display size, seven levels + Image of_flow[2][kOfLevels]; ///< R16G16_SINT, one image a level (see make_sizes) + Image of_vector; ///< the flow the interpolation reads, at level 0's size + Image of_confidence; ///< zero: this flow produces none, and the SDK binds none + Image of_scd_histogram, of_scd_previous_histogram, of_scd_temp, of_scd_output; + + // Frame interpolation's internal images. The first three are the SDK's "shared" resources, which + // its own FSR3 pairing fills from the upscaler; here the reconstruct-and-dilate pass fills them. + Image fi_dilated_depth, fi_dilated_motion_vectors, fi_reconstructed_depth_previous; + Image fi_reconstructed_depth_interpolated; + Image fi_game_mv_x, fi_game_mv_y, fi_of_mv_x, fi_of_mv_y; + Image fi_disocclusion_mask, fi_inpainting_pyramid; + Image fi_previous_source; ///< the frame before this one, at display size + Image fi_distortion_field; ///< 1x1 and zero: this game has no lens distortion + Image made[kMaxMade]; + + // The counters the two pyramid passes and the setup pass share: a storage buffer, not an image, + // because that is what the GLSL declares (FrameInterpolationRWCounters_t). + VkBuffer counters = VK_NULL_HANDLE; + VmaAllocation counters_memory = nullptr; + + uint32_t width = 0, height = 0, render_width = 0, render_height = 0; + VkFormat present_format = VK_FORMAT_UNDEFINED; + uint32_t ready = 0; ///< how many of `made` exist + uint32_t flow_width[kOfLevels]{}, flow_height[kOfLevels]{}; + + // The uniform buffer the four constant blocks are written into, with a set of slots per frame in + // flight so writing one frame cannot disturb a frame still being read. + VkBuffer uniforms = VK_NULL_HANDLE; + VmaAllocation uniforms_memory = nullptr; + void* uniforms_mapped = nullptr; + VkDeviceSize slot_fi = 0, slot_pyramid = 0, slot_of = 0, slot_of_spd = 0, frame_stride = 0; + uint32_t uniform_frame = 0; + + uint32_t parity = 0; + int32_t of_frame_index = 0; + bool first_frame = true; + bool in_general = false; ///< the UNDEFINED -> GENERAL barriers have been recorded +}; + +State g; + +constexpr VkImageSubresourceRange ALL_LEVELS{VK_IMAGE_ASPECT_COLOR_BIT, 0, VK_REMAINING_MIP_LEVELS, + 0, 1}; + +/// `RX_VK_FSR_FG=<1-3>` asks for this backend and says how many frames to make between two of the +/// game's. Off is the default and costs nothing: nothing below runs and nothing is logged. +uint32_t asked() { + static const uint32_t n = []() -> uint32_t { + const char* e = getenv("RX_VK_FSR_FG"); + if (!e || !*e) return 0; + const int v = atoi(e); + return v <= 0 ? 0u : (uint32_t)std::min(v, (int)kMaxMade); + }(); + return n; +} + +/// A memory dependency over the whole queue, in the synchronization2 form this renderer loads. +void memory_barrier(VkCommandBuffer cmd, VkPipelineStageFlags2 src_stage, VkAccessFlags2 src, + VkPipelineStageFlags2 dst_stage, VkAccessFlags2 dst) { + VkMemoryBarrier2 b{VK_STRUCTURE_TYPE_MEMORY_BARRIER_2}; + b.srcStageMask = src_stage, b.srcAccessMask = src; + b.dstStageMask = dst_stage, b.dstAccessMask = dst; + VkDependencyInfo di{VK_STRUCTURE_TYPE_DEPENDENCY_INFO}; + di.memoryBarrierCount = 1, di.pMemoryBarriers = &b; + vkCmdPipelineBarrier2(cmd, &di); +} + +void drop_image(Image& t) { + for (VkImageView v : t.levels) vkDestroyImageView(dev.device, v, nullptr); + t.levels.clear(); + if (t.view) vkDestroyImageView(dev.device, t.view, nullptr); + if (t.image) mkwvk::destroy_image(t.image, t.memory); + t = Image{}; +} + +/// One of the SDK's internal images: storage and sampled, GENERAL throughout, with a view per level +/// when it has more than one (both pyramids bind their levels separately while the passes that read +/// a pyramid read it as one mipped texture). +bool make_image(Image& t, VkFormat format, uint32_t width, uint32_t height, uint32_t levels = 1) { + drop_image(t); + t.format = format, t.width = std::max(1u, width), t.height = std::max(1u, height); + t.level_count = std::max(1u, levels); + VkImageCreateInfo ci{VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO}; + ci.imageType = VK_IMAGE_TYPE_2D; + ci.format = format; + ci.extent = {t.width, t.height, 1}; + ci.mipLevels = t.level_count; + ci.arrayLayers = 1; + ci.samples = VK_SAMPLE_COUNT_1_BIT; + ci.tiling = VK_IMAGE_TILING_OPTIMAL; + // (TRANSFER_SRC as well as DST: the made frames are blitted out of by the present path, and a + // made frame of a repeated set is copied from the first one, so both directions are asked for + // everywhere rather than tracked per image) + ci.usage = VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_SAMPLED_BIT | + VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT; + ci.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; + if (!create_image(ci, t.image, t.memory, false)) { + logf("vk: fsr3fi: a %ux%u image (format %d) was not made", t.width, t.height, (int)format); + return false; + } + VkImageViewCreateInfo vi{VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO}; + vi.image = t.image; + vi.viewType = VK_IMAGE_VIEW_TYPE_2D; + vi.format = format; + vi.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, t.level_count, 0, 1}; + if (vkCreateImageView(dev.device, &vi, nullptr, &t.view) != VK_SUCCESS) return false; + if (t.level_count > 1) { + for (uint32_t level = 0; level < t.level_count; level++) { + vi.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, level, 1, 0, 1}; + VkImageView v = VK_NULL_HANDLE; + if (vkCreateImageView(dev.device, &vi, nullptr, &v) != VK_SUCCESS) return false; + t.levels.push_back(v); + } + } + return true; +} + +bool make_pipeline(Pipeline& p, const PassInfo& info) { + std::vector bindings; + bindings.reserve(info.bind_count + 1); + for (size_t i = 0; i < info.bind_count; i++) { + VkDescriptorType type = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE; + switch (info.binds[i].kind) { + case T: type = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE; break; + case I: type = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE; break; + case U: type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; break; + case B: type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; break; + } + bindings.push_back({info.binds[i].binding, type, 1, VK_SHADER_STAGE_COMPUTE_BIT, nullptr}); + } + if (info.sampler) + bindings.push_back({1000, VK_DESCRIPTOR_TYPE_SAMPLER, 1, VK_SHADER_STAGE_COMPUTE_BIT, + nullptr}); + VkDescriptorSetLayoutCreateInfo li{VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO}; + li.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR; + li.bindingCount = (uint32_t)bindings.size(); + li.pBindings = bindings.data(); + if (vkCreateDescriptorSetLayout(dev.device, &li, nullptr, &p.set) != VK_SUCCESS) return false; + VkPipelineLayoutCreateInfo pi{VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO}; + pi.setLayoutCount = 1, pi.pSetLayouts = &p.set; + if (vkCreatePipelineLayout(dev.device, &pi, nullptr, &p.layout) != VK_SUCCESS) return false; + VkShaderModuleCreateInfo mi{VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO}; + mi.codeSize = info.spv_bytes; + mi.pCode = info.spv; + VkShaderModule m = VK_NULL_HANDLE; + if (vkCreateShaderModule(dev.device, &mi, nullptr, &m) != VK_SUCCESS) return false; + VkComputePipelineCreateInfo ci{VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO}; + ci.stage = {VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, nullptr, 0, + VK_SHADER_STAGE_COMPUTE_BIT, m, "main", nullptr}; + ci.layout = p.layout; + const VkResult made = + vkCreateComputePipelines(dev.device, VK_NULL_HANDLE, 1, &ci, nullptr, &p.pipeline); + vkDestroyShaderModule(dev.device, m, nullptr); + if (made != VK_SUCCESS) { + logf("vk: fsr3fi: the %s pass pipeline was not made (%d)", info.name, (int)made); + p.pipeline = VK_NULL_HANDLE; + return false; + } + return true; +} + +void drop_pipeline(Pipeline& p) { + if (p.pipeline) vkDestroyPipeline(dev.device, p.pipeline, nullptr); + if (p.layout) vkDestroyPipelineLayout(dev.device, p.layout, nullptr); + if (p.set) vkDestroyDescriptorSetLayout(dev.device, p.set, nullptr); + p = Pipeline{}; +} + +/// The one sampler the interpolation passes declare: linear, clamped to the edge. It is the only +/// filtered read in the whole chain (the colour sources and the disocclusion mask are sampled in UV +/// space); every other load is a texelFetch and needs no sampler at all. +bool make_sampler() { + VkSamplerCreateInfo si{VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO}; + si.addressModeU = si.addressModeV = si.addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; + si.minLod = 0.0f, si.maxLod = VK_LOD_CLAMP_NONE; + si.magFilter = si.minFilter = VK_FILTER_LINEAR; + si.mipmapMode = VK_SAMPLER_MIPMAP_MODE_LINEAR; + return vkCreateSampler(dev.device, &si, nullptr, &g.linear) == VK_SUCCESS; +} + +/// Every storage format the internal images need. A device missing one cannot run the passes, and +/// finding that out here is better than a failed image allocation in the middle of a frame. +bool formats_supported() { + static const VkFormat needed[]{ + VK_FORMAT_R8_UINT, VK_FORMAT_R8G8_UNORM, VK_FORMAT_R16G16_SINT, + VK_FORMAT_R16G16_SFLOAT, VK_FORMAT_R32_UINT, VK_FORMAT_R32_SFLOAT, + VK_FORMAT_R16G16B16A16_SFLOAT, + }; + for (VkFormat f : needed) { + VkFormatProperties props{}; + vkGetPhysicalDeviceFormatProperties(dev.physical, f, &props); + if (!(props.optimalTilingFeatures & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT) || + !(props.optimalTilingFeatures & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)) { + logf("vk: fsr3fi: format %d cannot be a storage and sampled image here", (int)f); + return false; + } + } + return true; +} + +/// The device features the compiled passes ask for by capability, which is why they are checked here +/// rather than assumed. The interpolation and inpainting passes write (and the inpainting pass also +/// reads) the output image through an image declared with no format qualifier, because the SDK lets +/// the application choose the backbuffer's format; that compiles to StorageImageRead/ +/// WriteWithoutFormat. Most of the internal images are in formats outside Vulkan's mandatory storage +/// set, which is StorageImageExtendedFormats. And both single-pass downsamplers and the flow search +/// use subgroup arithmetic and quad operations. +bool features_supported() { + if (!dev.features.shaderStorageImageWriteWithoutFormat || + !dev.features.shaderStorageImageReadWithoutFormat) { + logf("vk: fsr3fi: this GPU cannot read or write a storage image without a format, which the " + "interpolation and inpainting passes need for the frame they write"); + return false; + } + if (!dev.features.shaderStorageImageExtendedFormats) { + logf("vk: fsr3fi: this GPU has no extended storage image formats"); + return false; + } + VkPhysicalDeviceSubgroupProperties sg{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES}; + VkPhysicalDeviceProperties2 p2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2}; + p2.pNext = &sg; + vkGetPhysicalDeviceProperties2(dev.physical, &p2); + const VkSubgroupFeatureFlags want = VK_SUBGROUP_FEATURE_BASIC_BIT | + VK_SUBGROUP_FEATURE_ARITHMETIC_BIT | + VK_SUBGROUP_FEATURE_QUAD_BIT; + if ((sg.supportedOperations & want) != want || + !(sg.supportedStages & VK_SHADER_STAGE_COMPUTE_BIT)) { + logf("vk: fsr3fi: this GPU's compute stage lacks the subgroup arithmetic or quad operations " + "the pyramid and flow search passes were compiled with (%#x)", + (unsigned)sg.supportedOperations); + return false; + } + // The widest pass pushes eighteen descriptors and the sampler; a device that cannot take them + // in one push would need a descriptor pool, which is a different backend from this one. + uint32_t widest = 0; + for (const PassInfo& p : PASSES) + widest = std::max(widest, (uint32_t)p.bind_count + (p.sampler ? 1u : 0u)); + if (dev.max_push_descriptors < widest) { + logf("vk: fsr3fi: this GPU takes %u push descriptors and a pass needs %u", + dev.max_push_descriptors, widest); + return false; + } + return true; +} + +/// The uniform buffer the four constant blocks are written into: host visible and mapped, with a set +/// of slots per frame in flight. cbOF gets one slot per pyramid level plus one for the passes before +/// the pyramid, because the flow walks its levels from the top down and each level's dispatches read +/// a block that names the level they are on. +bool make_uniforms() { + const VkDeviceSize align = + std::max(dev.props.limits.minUniformBufferOffsetAlignment, 16); + const auto round_up = [align](VkDeviceSize n) { return (n + align - 1) / align * align; }; + g.slot_fi = round_up(sizeof(Constants)); + g.slot_pyramid = round_up(sizeof(PyramidConstants)); + g.slot_of = round_up(sizeof(OfConstants)); + g.slot_of_spd = round_up(sizeof(OfSpdConstants)); + g.frame_stride = g.slot_fi + 2 * g.slot_pyramid + (kOfLevels + 1) * g.slot_of + g.slot_of_spd; + return create_buffer(g.frame_stride * kUniformFrames, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, true, + g.uniforms, g.uniforms_memory, &g.uniforms_mapped); +} + +/// Records one pass: its descriptors pushed at the binding numbers its GLSL fixes them to, then the +/// sampler it declares (when it declares one), then the dispatch. +void record_pass(VkCommandBuffer cmd, size_t pass, const Resource* res, size_t count, uint32_t gx, + uint32_t gy, uint32_t gz = 1) { + const PassInfo& info = PASSES[pass]; + const Pipeline& p = g.passes[pass]; + std::vector images(count); + std::vector buffers(count); + std::vector writes; + writes.reserve(count + 1); + for (size_t i = 0; i < count; i++) { + VkWriteDescriptorSet w{VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET}; + w.dstBinding = info.binds[i].binding; + w.descriptorCount = 1; + if (info.binds[i].kind == U || info.binds[i].kind == B) { + buffers[i] = {res[i].buffer, res[i].offset, res[i].size}; + w.descriptorType = info.binds[i].kind == U ? VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER + : VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; + w.pBufferInfo = &buffers[i]; + } else { + images[i] = {VK_NULL_HANDLE, res[i].view, VK_IMAGE_LAYOUT_GENERAL}; + w.descriptorType = info.binds[i].kind == T ? VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE + : VK_DESCRIPTOR_TYPE_STORAGE_IMAGE; + w.pImageInfo = &images[i]; + } + writes.push_back(w); + } + const VkDescriptorImageInfo linear{g.linear, VK_NULL_HANDLE, VK_IMAGE_LAYOUT_UNDEFINED}; + if (info.sampler) { + VkWriteDescriptorSet w{VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET}; + w.dstBinding = 1000; + w.descriptorCount = 1; + w.descriptorType = VK_DESCRIPTOR_TYPE_SAMPLER; + w.pImageInfo = &linear; + writes.push_back(w); + } + // (one timed span per pass with RX_VK_PASS_TIMING=1: seventeen dispatches a frame needs a number + // per pass name, not another hypothesis about which of them costs) + const bool timed = gprof_begin(cmd); + vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, p.pipeline); + vkCmdPushDescriptorSetKHR(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, p.layout, 0, + (uint32_t)writes.size(), writes.data()); + vkCmdDispatch(cmd, std::max(1u, gx), std::max(1u, gy), std::max(1u, gz)); + if (timed) gprof_end(cmd, std::string("fsr3fi ") + info.name); + // (every pass reads what the one before it wrote, and the two pyramids read back their own + // levels across workgroups) + memory_barrier(cmd, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_WRITE_BIT, + VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, + VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_SHADER_WRITE_BIT); +} + +/// ffxSpdSetup from ffx_spd.h: the thread group count over a rectangle in 64x64 tiles, the offset of +/// the first tile, and how many mips the downsampler is to write. `mips` below zero asks for the +/// count the rectangle's size implies, which is what both inpainting pyramids pass. +void spd_setup(uint32_t width, uint32_t height, uint32_t* groups, uint32_t* offset, uint32_t* mips, + int fixed_mips = -1) { + offset[0] = offset[1] = 0; + groups[0] = (std::max(1u, width) - 1) / 64 + 1; + groups[1] = (std::max(1u, height) - 1) / 64 + 1; + if (fixed_mips >= 0) { + *mips = (uint32_t)fixed_mips; + return; + } + const float resolution = (float)std::max(std::max(1u, width), std::max(1u, height)); + *mips = (uint32_t)std::min(std::floor(std::log2(resolution)), 12.0f); +} + +/// setupDeviceDepthToViewSpaceDepthParams for reversed infinite depth, which is the depth this +/// renderer's scene is drawn with and the permutation the vendored passes were compiled under +/// (FFX_FRAMEINTERPOLATION_OPTION_INVERTED_DEPTH=1). vk_fsr3.cpp computes the same four factors for +/// the upscaler; they are kept apart because the two constant blocks are not the same block. +void device_to_view_depth(float* out, float near_plane, float fov_y, int32_t render_width, + int32_t render_height) { + const float aspect = (float)render_width / (float)std::max(1, render_height); + const float cot_half_fov = std::cos(0.5f * fov_y) / std::sin(0.5f * fov_y); + out[0] = -1.0f * FLT_EPSILON; + out[1] = near_plane; + out[2] = 1.0f / (cot_half_fov / aspect); + out[3] = 1.0f / cot_half_fov; +} + +/// Every image this backend owns, in one list, so the one-time layout transition, the reset clears +/// and shutdown all walk the same set and none of them can forget one. +std::vector all_images() { + std::vector all{&g.of_luma[0], + &g.of_luma[1], + &g.of_vector, + &g.of_confidence, + &g.of_scd_histogram, + &g.of_scd_previous_histogram, + &g.of_scd_temp, + &g.of_scd_output, + &g.fi_dilated_depth, + &g.fi_dilated_motion_vectors, + &g.fi_reconstructed_depth_previous, + &g.fi_reconstructed_depth_interpolated, + &g.fi_game_mv_x, + &g.fi_game_mv_y, + &g.fi_of_mv_x, + &g.fi_of_mv_y, + &g.fi_disocclusion_mask, + &g.fi_inpainting_pyramid, + &g.fi_previous_source, + &g.fi_distortion_field}; + for (uint32_t i = 0; i < 2; i++) + for (uint32_t l = 0; l < kOfLevels; l++) all.push_back(&g.of_flow[i][l]); + for (uint32_t i = 0; i < kMaxMade; i++) + if (g.made[i].image) all.push_back(&g.made[i]); + return all; +} + +void clear_images(VkCommandBuffer cmd, std::initializer_list images) { + const VkClearColorValue zero{}; + for (const Image* t : images) + if (t->image) + vkCmdClearColorImage(cmd, t->image, VK_IMAGE_LAYOUT_GENERAL, &zero, 1, &ALL_LEVELS); +} + +} // namespace + +bool supported() { + static const bool yes = []() { + if (!asked()) return false; // (RX_VK_FSR_FG: nothing below runs unless it is asked for) + if (!dev.push_descriptor || !vkCmdPushDescriptorSetKHR) { + logf("vk: fsr3fi: no push descriptors"); + return false; + } + if (!formats_supported() || !features_supported()) return false; + logf("vk: fsr3fi: FSR frame interpolation is available, %u made frame(s) asked for", + asked()); + if (asked() > 1) + logf("vk: fsr3fi: FSR 3.1's interpolation has no phase input, so the %u frames of a set " + "are the same midpoint frame; only the pacing differs", + asked()); + return true; + }(); + return yes; +} + +uint32_t frames_wanted() { + return supported() ? asked() : 0; +} + +bool prepare(uint32_t width, uint32_t height, uint32_t render_width, uint32_t render_height, + VkFormat present_format) { + if (!supported() || g.failed) return false; + if (!width || !height || !render_width || !render_height) return false; + if (present_format == VK_FORMAT_UNDEFINED) return false; + // The frame this backend writes is in the format it is presented in, because it is shown as a + // frame and not read back into the game's target, and the interpolation and inpainting passes + // write it through a storage image. A presented format that cannot be one is the end of it. + { + VkFormatProperties props{}; + vkGetPhysicalDeviceFormatProperties(dev.physical, present_format, &props); + if (!(props.optimalTilingFeatures & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT) || + !(props.optimalTilingFeatures & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)) { + logf("vk: fsr3fi: the presented format %d cannot be a storage and sampled image here", + (int)present_format); + g.failed = true; + return false; + } + } + if (!g.tried) { + g.tried = true; + // (TRANSFER_DST: the counters are zeroed with vkCmdFillBuffer before the first frame) + g.ok = make_sampler() && make_uniforms() && + create_buffer(kCountersBytes, + VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, + false, g.counters, g.counters_memory, nullptr); + for (size_t i = 0; i < P_COUNT && g.ok; i++) g.ok = make_pipeline(g.passes[i], PASSES[i]); + if (g.ok) logf("vk: fsr3fi: %d pass pipelines ready", (int)P_COUNT); + } + if (!g.ok) return false; + const uint32_t n = asked(); + if (g.ready == n && g.width == width && g.height == height && + g.render_width == render_width && g.render_height == render_height && + g.present_format == present_format) + return true; + + const uint32_t rw = render_width, rh = render_height, uw = width, uh = height; + // The flow pyramid's levels are halved rounding up, which is not what a mip chain does: the SDK + // allocates a texture a level for exactly this reason, and so does this. The luma pyramid's + // levels are halved rounding down, which is a mip chain, so that one is a single mipped image. + g.flow_width[0] = (uw + kOfBlockSize - 1) / kOfBlockSize; + g.flow_height[0] = (uh + kOfBlockSize - 1) / kOfBlockSize; + for (uint32_t l = 1; l < kOfLevels; l++) { + g.flow_width[l] = (g.flow_width[l - 1] + 1) / 2; + g.flow_height[l] = (g.flow_height[l - 1] + 1) / 2; + } + const uint32_t pyramid_w = std::max(1u, uw / 2), pyramid_h = std::max(1u, uh / 2); + const uint32_t pyramid_levels = std::min( + kPyramidMips, + (uint32_t)std::floor(std::log2((float)std::max(pyramid_w, pyramid_h))) + 1u); + + // Seven luma levels is what the flow asks for, but a window smaller than 64 pixels has fewer + // mips than that; `level()` clamps the index, so a short chain costs accuracy at the coarsest + // levels rather than an invalid image. + const uint32_t luma_levels = std::min( + kOfLevels, (uint32_t)std::floor(std::log2((float)std::max(uw, uh))) + 1u); + + bool made = true; + for (uint32_t i = 0; i < 2 && made; i++) { + made = made && make_image(g.of_luma[i], VK_FORMAT_R8_UINT, uw, uh, luma_levels); + for (uint32_t l = 0; l < kOfLevels && made; l++) + made = made && make_image(g.of_flow[i][l], VK_FORMAT_R16G16_SINT, g.flow_width[l], + g.flow_height[l]); + } + made = made && make_image(g.of_vector, VK_FORMAT_R16G16_SINT, g.flow_width[0], g.flow_height[0]); + // The flow this backend records carries no per-block confidence, and neither does the SDK's: its + // own dispatch leaves the binding null and the pass reads zero through it. A cleared image of the + // flow's own size is the same answer with every fetch in bounds. + made = made && make_image(g.of_confidence, VK_FORMAT_R32_UINT, g.flow_width[0], g.flow_height[0]); + made = made && make_image(g.of_scd_histogram, VK_FORMAT_R32_UINT, kScdHistogramWidth, 1); + made = made && make_image(g.of_scd_previous_histogram, VK_FORMAT_R32_SFLOAT, kScdHistogramWidth, 1); + made = made && make_image(g.of_scd_temp, VK_FORMAT_R32_UINT, 3, 1); + made = made && make_image(g.of_scd_output, VK_FORMAT_R32_UINT, 3, 1); + + made = made && make_image(g.fi_dilated_depth, VK_FORMAT_R32_SFLOAT, rw, rh); + made = made && make_image(g.fi_dilated_motion_vectors, VK_FORMAT_R16G16_SFLOAT, rw, rh); + made = made && make_image(g.fi_reconstructed_depth_previous, VK_FORMAT_R32_UINT, rw, rh); + made = made && make_image(g.fi_reconstructed_depth_interpolated, VK_FORMAT_R32_UINT, rw, rh); + made = made && make_image(g.fi_game_mv_x, VK_FORMAT_R32_UINT, rw, rh); + made = made && make_image(g.fi_game_mv_y, VK_FORMAT_R32_UINT, rw, rh); + made = made && make_image(g.fi_of_mv_x, VK_FORMAT_R32_UINT, rw, rh); + made = made && make_image(g.fi_of_mv_y, VK_FORMAT_R32_UINT, rw, rh); + made = made && make_image(g.fi_disocclusion_mask, VK_FORMAT_R8G8_UNORM, rw, rh); + made = made && make_image(g.fi_inpainting_pyramid, VK_FORMAT_R16G16B16A16_SFLOAT, pyramid_w, + pyramid_h, pyramid_levels); + made = made && make_image(g.fi_previous_source, present_format, uw, uh); + made = made && make_image(g.fi_distortion_field, VK_FORMAT_R8G8_UNORM, 1, 1); + for (uint32_t i = 0; i < n && made; i++) + made = made && make_image(g.made[i], present_format, uw, uh); + for (uint32_t i = n; i < kMaxMade; i++) drop_image(g.made[i]); + if (!made) { + g.failed = true; + for (Image* t : all_images()) drop_image(*t); + for (Image& t : g.made) drop_image(t); + g.ready = 0; + g.width = g.height = g.render_width = g.render_height = 0; + return false; + } + g.width = uw, g.height = uh, g.render_width = rw, g.render_height = rh; + g.present_format = present_format; + g.ready = n; + g.in_general = false; + g.first_frame = true; + g.parity = 0; + g.of_frame_index = 0; + logf("vk: fsr3fi: %ux%u from %ux%u inputs, flow %ux%u, pyramid %ux%u with %u levels, %u made " + "frame(s) (format %d)", + uw, uh, rw, rh, g.flow_width[0], g.flow_height[0], pyramid_w, pyramid_h, pyramid_levels, n, + (int)present_format); + return true; +} + +bool generate(VkCommandBuffer cmd, const Inputs& in) { + if (!supported()) return false; + if (!in.color || !in.color_image || !in.depth || !in.motion) return false; + if (in.color_format == VK_FORMAT_UNDEFINED) return false; + if (!in.width || !in.height || !in.render_width || !in.render_height) return false; + if (!in.frame_index || in.frame_index > asked()) return false; + if (!(in.near_plane > 0.0f) || !(in.fov_y > 0.0f)) return false; // (Inputs defaults them) + if (!prepare(in.width, in.height, in.render_width, in.render_height, in.color_format)) + return false; + + Image& out = g.made[in.frame_index - 1]; + if (!out.image) return false; + + // Everything this backend owns starts UNDEFINED and lives in GENERAL from here on, as the rest + // of this renderer's compute resources do. + if (!g.in_general) { + g.in_general = true; + std::vector to_general; + const std::vector all = all_images(); + to_general.reserve(all.size()); + for (const Image* t : all) { + if (!t->image) continue; + VkImageMemoryBarrier2 b{VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2}; + b.srcStageMask = VK_PIPELINE_STAGE_2_NONE; + b.dstStageMask = VK_PIPELINE_STAGE_2_TRANSFER_BIT; + b.dstAccessMask = VK_ACCESS_2_TRANSFER_WRITE_BIT; + b.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; + b.newLayout = VK_IMAGE_LAYOUT_GENERAL; + b.srcQueueFamilyIndex = b.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + b.image = t->image; + b.subresourceRange = ALL_LEVELS; + to_general.push_back(b); + } + VkDependencyInfo di{VK_STRUCTURE_TYPE_DEPENDENCY_INFO}; + di.imageMemoryBarrierCount = (uint32_t)to_general.size(); + di.pImageMemoryBarriers = to_general.data(); + vkCmdPipelineBarrier2(cmd, &di); + const VkClearColorValue zero{}; + for (const Image* t : all) + if (t->image) + vkCmdClearColorImage(cmd, t->image, VK_IMAGE_LAYOUT_GENERAL, &zero, 1, &ALL_LEVELS); + vkCmdFillBuffer(cmd, g.counters, 0, kCountersBytes, 0); + memory_barrier(cmd, VK_PIPELINE_STAGE_2_TRANSFER_BIT, VK_ACCESS_2_TRANSFER_WRITE_BIT, + VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, + VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_SHADER_WRITE_BIT); + } + + // FSR 3.1 interpolates the midpoint of the interval and nothing else: there is no phase anywhere + // in cbFI and ffx_frameinterpolation.h fixes t at 0.5. A set of more than one made frame is + // therefore that one frame shown more than once, and recording the chain again per index would + // cost seventeen dispatches to produce the same picture. The later indices copy instead, and + // RX_VK_FSR_FG=1 is the setting that is worth anything. + if (in.frame_index > 1) { + const Image& midpoint = g.made[0]; + if (!midpoint.image) return false; + memory_barrier(cmd, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_WRITE_BIT, + VK_PIPELINE_STAGE_2_TRANSFER_BIT, + VK_ACCESS_2_TRANSFER_READ_BIT | VK_ACCESS_2_TRANSFER_WRITE_BIT); + const VkImageCopy copy{{VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, {0, 0, 0}, + {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, {0, 0, 0}, + {g.width, g.height, 1}}; + vkCmdCopyImage(cmd, midpoint.image, VK_IMAGE_LAYOUT_GENERAL, out.image, + VK_IMAGE_LAYOUT_GENERAL, 1, ©); + memory_barrier(cmd, VK_PIPELINE_STAGE_2_TRANSFER_BIT, VK_ACCESS_2_TRANSFER_WRITE_BIT, + VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, + VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_TRANSFER_READ_BIT); + return true; + } + + const bool reset = in.reset || g.first_frame; + g.first_frame = false; + const int32_t rw = (int32_t)g.render_width, rh = (int32_t)g.render_height; + const int32_t uw = (int32_t)g.width, uh = (int32_t)g.height; + + // ---- the constant blocks ---- + + Constants k{}; + k.render_size[0] = rw, k.render_size[1] = rh; + k.display_size[0] = uw, k.display_size[1] = uh; + k.display_size_rcp[0] = 1.0f / (float)uw, k.display_size_rcp[1] = 1.0f / (float)uh; + k.camera_near = in.near_plane; + k.camera_far = in.far_plane; + k.upscaler_target_size[0] = uw, k.upscaler_target_size[1] = uh; + k.mode = 0; + k.reset = reset ? 1 : 0; + device_to_view_depth(k.device_to_view_depth, in.near_plane, in.fov_y, rw, rh); + k.delta_time = in.frame_time_ms; + k.hudless_attached_factor = 0; // (one colour, with whatever the game drew on it) + k.distortion_field_size[0] = 1, k.distortion_field_size[1] = 1; + // GetOpticalFlowSize() in the GLSL reads this back as (1 / scale) / block size, so the scale is + // the reciprocal of the display size and nothing else; it is also what turns a flow vector in + // luma pixels into the UV motion the vector field packs. + k.optical_flow_scale[0] = 1.0f / (float)uw, k.optical_flow_scale[1] = 1.0f / (float)uh; + k.optical_flow_block_size = (int32_t)kOfBlockSize; + k.dispatch_flags = 0; // (no debug view, no debug bar) + k.max_render_size[0] = rw, k.max_render_size[1] = rh; + k.optical_flow_half_res_mode = 0; + k.num_instances = 1; + k.interpolation_rect_base[0] = 0, k.interpolation_rect_base[1] = 0; + k.interpolation_rect_size[0] = uw, k.interpolation_rect_size[1] = uh; + // The colour this backend is handed is the window's, which this renderer presents as UNORM with + // the game's own encoding on it, so the SDK's sRGB transfer function is the right one and the + // luminance pair the other two functions would need is left at the SDR range. + k.back_buffer_transfer_function = 0; + k.min_max_luminance[0] = 0.0f, k.min_max_luminance[1] = 1.0f; + { // fTanHalfFOV is the *horizontal* half angle's tangent, as ffxFrameInterpolationDispatch + // builds it from the vertical field of view and the render aspect. + const float aspect = (float)rw / (float)std::max(1, rh); + const float horizontal = 2.0f * std::atan(std::tan(in.fov_y * 0.5f) * aspect); + k.tan_half_fov = std::tan(horizontal * 0.5f); + } + k.jitter[0] = in.jitter[0], k.jitter[1] = in.jitter[1]; + k.motion_vector_scale[0] = in.motion_scale[0] / (float)rw; + k.motion_vector_scale[1] = in.motion_scale[1] / (float)rh; + + // The two inpainting pyramids downsample different rectangles -- the game vector field's is at + // the render size and the frame's is at the display size -- so each gets its own block. + uint32_t game_groups[2], game_offset[2], game_mips = 0; + spd_setup((uint32_t)rw, (uint32_t)rh, game_groups, game_offset, &game_mips); + PyramidConstants game_pyramid{}; + game_pyramid.mips = game_mips; + game_pyramid.num_work_groups = game_groups[0] * game_groups[1]; + game_pyramid.work_group_offset[0] = game_offset[0]; + game_pyramid.work_group_offset[1] = game_offset[1]; + + uint32_t frame_groups[2], frame_offset[2], frame_mips = 0; + spd_setup((uint32_t)uw, (uint32_t)uh, frame_groups, frame_offset, &frame_mips); + PyramidConstants frame_pyramid{}; + frame_pyramid.mips = frame_mips; + frame_pyramid.num_work_groups = frame_groups[0] * frame_groups[1]; + frame_pyramid.work_group_offset[0] = frame_offset[0]; + frame_pyramid.work_group_offset[1] = frame_offset[1]; + + g.of_frame_index = reset ? 0 : g.of_frame_index + 1; + OfConstants of{}; + of.input_luma_resolution[0] = uw, of.input_luma_resolution[1] = uh; + of.pyramid_level = 0; + of.pyramid_level_count = kOfLevels; + of.frame_index = g.of_frame_index; + of.back_buffer_transfer_function = 0; + of.min_max_luminance[0] = 0.0f, of.min_max_luminance[1] = 1.0f; + + uint32_t luma_groups[2], luma_offset[2], luma_mips = 0; + // The luma pyramid's own shader hard-codes six mips, so the four the SDK asks ffxSpdSetup for + // here are never read; the work group count is, and this is where it comes from. + spd_setup((uint32_t)uw, (uint32_t)uh, luma_groups, luma_offset, &luma_mips, 4); + OfSpdConstants of_spd{}; + of_spd.mips = luma_mips; + of_spd.num_work_groups = luma_groups[0] * luma_groups[1]; + of_spd.work_group_offset[0] = luma_offset[0]; + of_spd.work_group_offset[1] = luma_offset[1]; + of_spd.num_work_groups_pyramid = of_spd.num_work_groups; + + // This frame's slots, written through the mapped buffer. + const VkDeviceSize base = (VkDeviceSize)(g.uniform_frame % kUniformFrames) * g.frame_stride; + g.uniform_frame++; + uint8_t* const mapped = (uint8_t*)g.uniforms_mapped + base; + const VkDeviceSize at_fi = 0; + const VkDeviceSize at_game_pyramid = at_fi + g.slot_fi; + const VkDeviceSize at_frame_pyramid = at_game_pyramid + g.slot_pyramid; + const VkDeviceSize at_of = at_frame_pyramid + g.slot_pyramid; + const VkDeviceSize at_of_spd = at_of + (kOfLevels + 1) * g.slot_of; + memcpy(mapped + at_fi, &k, sizeof k); + memcpy(mapped + at_game_pyramid, &game_pyramid, sizeof game_pyramid); + memcpy(mapped + at_frame_pyramid, &frame_pyramid, sizeof frame_pyramid); + memcpy(mapped + at_of, &of, sizeof of); // (slot 0: the passes before the flow's own pyramid) + for (uint32_t l = 0; l < kOfLevels; l++) { + OfConstants level = of; + level.pyramid_level = l; + memcpy(mapped + at_of + (VkDeviceSize)(l + 1) * g.slot_of, &level, sizeof level); + } + memcpy(mapped + at_of_spd, &of_spd, sizeof of_spd); + flush_mapped(g.uniforms_memory, g.frame_stride * kUniformFrames); + + const Resource cb_fi{VK_NULL_HANDLE, g.uniforms, base + at_fi, g.slot_fi}; + const Resource cb_game_pyramid{VK_NULL_HANDLE, g.uniforms, base + at_game_pyramid, + g.slot_pyramid}; + const Resource cb_frame_pyramid{VK_NULL_HANDLE, g.uniforms, base + at_frame_pyramid, + g.slot_pyramid}; + const Resource cb_of_spd{VK_NULL_HANDLE, g.uniforms, base + at_of_spd, g.slot_of_spd}; + const auto cb_of = [&](uint32_t slot) { + return Resource{VK_NULL_HANDLE, g.uniforms, base + at_of + (VkDeviceSize)slot * g.slot_of, + g.slot_of}; + }; + const Resource counters{VK_NULL_HANDLE, g.counters, 0, kCountersBytes}; + + // ---- the clears the SDK's dispatch records ---- + + { // (what the game's draws and the present path wrote has to be visible to the first pass) + memory_barrier(cmd, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, + VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT | + VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT | + VK_ACCESS_2_SHADER_WRITE_BIT | VK_ACCESS_2_TRANSFER_WRITE_BIT, + VK_PIPELINE_STAGE_2_TRANSFER_BIT | VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, + VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_SHADER_WRITE_BIT | + VK_ACCESS_2_TRANSFER_WRITE_BIT); + } + // The nearest-depth scratch is cleared every frame, to zero because the depth is reversed and + // the SDK clears it to the far value, which under a reversed depth is zero. + clear_images(cmd, {&g.fi_reconstructed_depth_previous}); + if (!reset) clear_images(cmd, {&g.fi_reconstructed_depth_interpolated}); + if (reset) { + // A cut, a load or a resize: every history the flow and the scene-change detector carry + // belongs to a scene that is gone, and the SDK clears exactly this set. + clear_images(cmd, {&g.of_scd_temp, &g.of_scd_output, &g.of_scd_histogram, + &g.of_scd_previous_histogram, &g.of_luma[0], &g.of_luma[1]}); + } + { + memory_barrier(cmd, VK_PIPELINE_STAGE_2_TRANSFER_BIT, VK_ACCESS_2_TRANSFER_WRITE_BIT, + VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, + VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_SHADER_WRITE_BIT); + } + + // ---- the optical flow, over this frame's luma and the frame before it ---- + + const auto tex = [](const Image& t) { return Resource{t.view}; }; + const auto level = [](const Image& t, uint32_t l) { + const size_t n = t.levels.size(); + return Resource{n ? t.levels[std::min(l, n - 1)] : t.view}; + }; + const auto groups = [](uint32_t size, uint32_t tile) { return (std::max(1u, size) + tile - 1) / tile; }; + const uint32_t p = g.parity, q = p ^ 1u; + const Resource color{in.color}; + + { // Two pixels across and two down a thread, which is where the double rounding comes from. + const Resource res[]{color, level(g.of_luma[p], 0), cb_of(0)}; + record_pass(cmd, P_OF_PREPARE_LUMA, res, 3, groups(groups((uint32_t)uw, 2), 16), + groups(groups((uint32_t)uh, 2), 16)); + } + { + const Resource res[]{level(g.of_luma[p], 0), level(g.of_luma[p], 1), + level(g.of_luma[p], 2), level(g.of_luma[p], 3), + level(g.of_luma[p], 4), level(g.of_luma[p], 5), + level(g.of_luma[p], 6), cb_of(0), cb_of_spd}; + record_pass(cmd, P_OF_LUMINANCE_PYRAMID, res, 9, luma_groups[0], luma_groups[1]); + } + { // Scene change detection: a 3x3 grid of strata, each with its own 256-bin histogram, then + // one dispatch that compares this frame's histograms with the last frame's. + const uint32_t strata_width = (uint32_t)uw / 4 / 3; + const Resource res[]{tex(g.of_luma[p]), tex(g.of_scd_histogram), cb_of(0)}; + record_pass(cmd, P_OF_SCD_HISTOGRAM, res, 3, groups(strata_width, 32), 16, 3 * 3); + } + { + const Resource res[]{tex(g.of_scd_histogram), tex(g.of_scd_previous_histogram), + tex(g.of_scd_temp), tex(g.of_scd_output), cb_of(0)}; + record_pass(cmd, P_OF_SCD_DIVERGENCE, res, 5, 3 * 3, 3); + } + // The search walks the pyramid from the coarsest level down, and the two flow images swap roles + // at every level as well as at every frame: the search writes A, the filter reads A and writes B, + // and the scale reads B and seeds the next level down. The index arithmetic is the SDK's + // (isOddFrame != isOddLevel), written as one exclusive or. + for (int32_t l = (int32_t)kOfLevels - 1; l >= 0; l--) { + const uint32_t a = ((p ^ (uint32_t)l) & 1u), b = a ^ 1u; + const uint32_t luma_w = std::max(1u, (uint32_t)uw >> l), luma_h = std::max(1u, (uint32_t)uh >> l); + { + const Resource res[]{level(g.of_luma[p], (uint32_t)l), level(g.of_luma[q], (uint32_t)l), + tex(g.of_flow[a][l]), tex(g.of_scd_output), + cb_of((uint32_t)l + 1)}; + // 64 threads a group, each covering four luma pixels across and sixteen rows down. + record_pass(cmd, P_OF_SEARCH, res, 5, (groups(luma_w, 4) * 16 + 63) / 64, + groups(luma_h, 16)); + } + { + // At the bottom the filter writes the flow the interpolation reads, which is the one + // resource the two halves of this backend share. + const Resource out_flow = l == 0 ? tex(g.of_vector) : tex(g.of_flow[b][l]); + const Resource res[]{tex(g.of_flow[a][l]), out_flow, cb_of((uint32_t)l + 1)}; + record_pass(cmd, P_OF_FILTER, res, 3, groups(g.flow_width[l], 16), + groups(g.flow_height[l], 4)); + } + if (l > 0) { + const Resource res[]{level(g.of_luma[p], (uint32_t)l), level(g.of_luma[q], (uint32_t)l), + tex(g.of_flow[b][l]), tex(g.of_flow[b][l - 1]), + tex(g.of_scd_output), cb_of((uint32_t)l + 1)}; + record_pass(cmd, P_OF_SCALE, res, 6, groups(g.flow_width[l - 1], 4), + groups(g.flow_height[l - 1], 4)); + } + } + + // ---- frame interpolation ---- + + const uint32_t render_x = groups((uint32_t)rw, 8), render_y = groups((uint32_t)rh, 8); + const uint32_t display_x = groups((uint32_t)uw, 8), display_y = groups((uint32_t)uh, 8); + // The flow's own grid, eight blocks a group. The SDK divides the display size by the block size + // in floating point and truncates, which loses the last partial block when the display size is + // not a multiple of eight; this rounds that block up instead, so the vector field is written + // over the whole flow image. + const uint32_t flow_x = groups(g.flow_width[0], 8), flow_y = groups(g.flow_height[0], 8); + const auto pyramid = [](uint32_t l) { + const size_t n = g.fi_inpainting_pyramid.levels.size(); + return Resource{n ? g.fi_inpainting_pyramid.levels[std::min(l, n - 1)] + : g.fi_inpainting_pyramid.view}; + }; + + { // The SDK records this one from its own prepare entry point, alongside the upscaler; here + // there is no upscaler to ride along with, so it opens the interpolation instead. It is what + // fills the three resources the SDK calls shared. + const Resource res[]{Resource{in.motion}, Resource{in.depth}, + tex(g.fi_reconstructed_depth_previous), + tex(g.fi_dilated_motion_vectors), tex(g.fi_dilated_depth), cb_fi}; + record_pass(cmd, P_FI_RECONSTRUCT_AND_DILATE, res, 6, render_x, render_y); + } + { // Zeroes both vector fields and the disocclusion mask, and moves the frame counter the + // interpolation reads along -- which is why it runs even on a reset. + const Resource res[]{tex(g.of_scd_output), tex(g.fi_game_mv_x), tex(g.fi_game_mv_y), + tex(g.fi_of_mv_x), tex(g.fi_of_mv_y), tex(g.fi_disocclusion_mask), + counters, cb_fi}; + record_pass(cmd, P_FI_SETUP, res, 8, render_x, render_y); + } + if (!reset) { + { + const Resource res[]{tex(g.fi_dilated_motion_vectors), tex(g.fi_dilated_depth), color, + tex(g.fi_distortion_field), + tex(g.fi_reconstructed_depth_interpolated), cb_fi}; + record_pass(cmd, P_FI_RECONSTRUCT_PREVIOUS_DEPTH, res, 6, render_x, render_y); + } + { + const Resource res[]{tex(g.fi_dilated_motion_vectors), tex(g.fi_dilated_depth), + tex(g.fi_previous_source), color, + tex(g.fi_distortion_field), tex(g.fi_game_mv_x), + tex(g.fi_game_mv_y), cb_fi}; + record_pass(cmd, P_FI_GAME_MOTION_VECTOR_FIELD, res, 8, render_x, render_y); + } + { + const Resource res[]{tex(g.fi_game_mv_x), tex(g.fi_game_mv_y), counters, + pyramid(0), pyramid(1), pyramid(2), pyramid(3), pyramid(4), + pyramid(5), pyramid(6), pyramid(7), pyramid(8), pyramid(9), + pyramid(10), pyramid(11), pyramid(12), cb_fi, cb_game_pyramid}; + record_pass(cmd, P_FI_GAME_VECTOR_FIELD_PYRAMID, res, 18, game_groups[0], + game_groups[1]); + } + { + const Resource res[]{tex(g.of_vector), tex(g.of_confidence), + tex(g.fi_dilated_depth), tex(g.fi_previous_source), + color, tex(g.fi_of_mv_x), + tex(g.fi_of_mv_y), cb_fi}; + record_pass(cmd, P_FI_OPTICAL_FLOW_VECTOR_FIELD, res, 8, flow_x, flow_y); + } + { + const Resource res[]{tex(g.fi_game_mv_x), + tex(g.fi_game_mv_y), + tex(g.fi_reconstructed_depth_previous), + tex(g.fi_dilated_depth), + tex(g.fi_reconstructed_depth_interpolated), + tex(g.fi_inpainting_pyramid), + tex(g.fi_distortion_field), + tex(g.fi_disocclusion_mask), + cb_fi}; + record_pass(cmd, P_FI_DISOCCLUSION_MASK, res, 9, render_x, render_y); + } + } + { // The frame itself. Where it could not decide a colour it leaves the alpha low, and the two + // passes after it fill those pixels in from the pyramid they build over this very output. + const Resource res[]{tex(g.fi_game_mv_x), tex(g.fi_game_mv_y), + tex(g.fi_of_mv_x), tex(g.fi_of_mv_y), + tex(g.fi_previous_source), color, + tex(g.fi_disocclusion_mask), tex(g.fi_inpainting_pyramid), + counters, tex(out), + cb_fi}; + record_pass(cmd, P_FI_INTERPOLATE, res, 11, display_x, display_y); + } + { + const Resource res[]{tex(out), counters, + pyramid(0), pyramid(1), pyramid(2), pyramid(3), pyramid(4), + pyramid(5), pyramid(6), pyramid(7), pyramid(8), pyramid(9), + pyramid(10), pyramid(11), pyramid(12), cb_fi, cb_frame_pyramid}; + record_pass(cmd, P_FI_INPAINTING_PYRAMID, res, 17, frame_groups[0], frame_groups[1]); + } + { // The present backbuffer and the interpolation source are the same image here: this game has + // no separate HUD-less colour, so there is nothing to take the HUD from. + const Resource res[]{tex(g.of_scd_output), tex(g.fi_inpainting_pyramid), color, color, + tex(out), cb_fi}; + record_pass(cmd, P_FI_INPAINTING, res, 6, display_x, display_y); + } + + // This frame becomes the next one's "previous", and the luma pyramids swap, so the next flow + // search has the pair it needs. Both happen once a present, not once a made frame. + { + memory_barrier(cmd, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_WRITE_BIT, + VK_PIPELINE_STAGE_2_TRANSFER_BIT, + VK_ACCESS_2_TRANSFER_READ_BIT | VK_ACCESS_2_TRANSFER_WRITE_BIT); + const VkImageCopy copy{{VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, {0, 0, 0}, + {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, {0, 0, 0}, + {g.width, g.height, 1}}; + vkCmdCopyImage(cmd, in.color_image, VK_IMAGE_LAYOUT_GENERAL, g.fi_previous_source.image, + VK_IMAGE_LAYOUT_GENERAL, 1, ©); + memory_barrier(cmd, VK_PIPELINE_STAGE_2_TRANSFER_BIT, VK_ACCESS_2_TRANSFER_WRITE_BIT, + VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, + VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_TRANSFER_READ_BIT); + } + g.parity = q; + // A reset frame has no history to interpolate from: the preparation passes were skipped, so what + // the interpolation wrote is the current frame over a previous frame that is not there yet. + // Everything above still ran, which is what gives the next frame its luma pair and its previous + // source; this one is refused, and the caller's own colour interpolation takes it. + return !reset; +} + +VkImage made_image(uint32_t index) { + if (!index || index > g.ready) return VK_NULL_HANDLE; + return g.made[index - 1].image; +} + +VkImageView made_view(uint32_t index) { + if (!index || index > g.ready) return VK_NULL_HANDLE; + return g.made[index - 1].view; +} + +void reset() { + g.first_frame = true; +} + +void shutdown() { + for (Image* t : all_images()) drop_image(*t); + for (Image& t : g.made) drop_image(t); + for (Pipeline& p : g.passes) drop_pipeline(p); + if (g.linear) vkDestroySampler(dev.device, g.linear, nullptr); + if (g.uniforms) destroy_buffer(g.uniforms, g.uniforms_memory); + if (g.counters) destroy_buffer(g.counters, g.counters_memory); + g = State{}; +} + +} // namespace mkwvk::fsr3fi diff --git a/gpu/vk/vk_fsr3fi.h b/gpu/vk/vk_fsr3fi.h new file mode 100644 index 000000000..307206691 --- /dev/null +++ b/gpu/vk/vk_fsr3fi.h @@ -0,0 +1,99 @@ +// (hookshot) AMD FSR 3 frame interpolation, and the optical flow it runs on, recorded as our own +// Vulkan compute passes: the second source of the frames the renderer shows between the game's. +// +// The renderer already shows made frames. vk_framegen.cpp interpolates between the last two +// presented frames from colour alone, which is all it has at present time, and vk_dlssg.cpp answers +// the same question with the scene's motion and depth through NVIDIA's network. This backend answers +// it with AMD's: seventeen compute passes -- seven of optical flow over two frames' luma, ten of +// interpolation over the game's motion and depth -- all of them our own dispatches over AMD's +// vendored GLSL, with no FidelityFX host library linked and nothing of AMD's loaded at run time. +// +// It slots in where dlssg does, and where it refuses -- not asked for, a device without the storage +// formats or the image features the passes need, inputs the seam could not assemble -- the +// hand-written colour interpolation runs exactly as before. Nothing here changes what the game +// submits. +// +// One caveat worth knowing before reading `frames_wanted()`: FSR 3.1's interpolation has no +// interpolation-phase input at all (ffx_frameinterpolation.h fixes t at 0.5), so a set of made +// frames is one midpoint frame repeated. A count above one buys pacing, not new pictures. +#pragma once + +#include + +#include "vk_internal.h" + +namespace mkwvk::fsr3fi { + +/// One made frame's inputs. +/// +/// The colour is the frame the game has just finished, at the size it is presented, and it is the +/// only colour this backend is given: the frame before it is kept here, because the interpolation +/// needs both ends of the interval and the present path only ever hands over the newest one. The +/// depth and the motion are the scene's at the render size, with `motion_scale` taking a vector to +/// render pixels, as the SDK's FFX_FRAMEINTERPOLATION_OPTION_LOW_RESOLUTION_MOTION_VECTORS +/// permutation the vendored GLSL was compiled under expects. +/// +/// The camera's planes and vertical field of view build the device-to-view-depth factors the +/// disocclusion passes compare depths with; they only scale thresholds, so the defaults are usable +/// and the real camera is better. +struct Inputs { + VkImageView color = VK_NULL_HANDLE; + VkImage color_image = VK_NULL_HANDLE; + VkFormat color_format = VK_FORMAT_UNDEFINED; + uint32_t width = 0, height = 0; + + VkImageView depth = VK_NULL_HANDLE; + VkImageView motion = VK_NULL_HANDLE; + uint32_t render_width = 0, render_height = 0; + + /// Turns a motion vector into render pixels (the render size, for vectors in UV). + float motion_scale[2]{1.0f, 1.0f}; + float jitter[2]{}; + + float near_plane = 0.1f; + float far_plane = 1000.0f; + float fov_y = 60.0f * 3.14159265358979f / 180.0f; + float frame_time_ms = 16.667f; + + /// A cut, a load or a resize: the preparation passes are skipped for this frame, as the SDK's + /// own dispatch skips them, because every history they read belongs to a scene that is gone. + bool reset = false; + + /// How many frames to make between this one and the last, and which of them this call is + /// (1-based, as dlssg takes them). + uint32_t frames_made = 1; + uint32_t frame_index = 1; +}; + +/// Whether this backend can run at all: asked for (`RX_VK_FSR_FG=<1-3>`), push descriptors, every +/// storage format the SDK's internal images need, and the three image features and the subgroup +/// operations the vendored passes compiled down to. Asked once; the one line saying why it is false +/// is logged once, and nothing is logged at all when it was not asked for. +[[nodiscard]] bool supported(); + +/// How many frames the run asks to be made between two of the game's: `RX_VK_FSR_FG=<1-3>`, zero +/// when this backend was not asked for. See the caveat at the top of this file: FSR 3.1 interpolates +/// the midpoint and only the midpoint, so a count above one repeats that frame. +[[nodiscard]] uint32_t frames_wanted(); + +/// Makes the pipelines, the internal images and the made frames' images for these sizes, re-making +/// them when the sizes or the presented format change. False when anything could not be made, which +/// leaves this backend unavailable rather than half-built. +[[nodiscard]] bool prepare(uint32_t width, uint32_t height, uint32_t render_width, + uint32_t render_height, VkFormat present_format); + +/// Records one made frame. False when the inputs are not usable, which leaves the caller to show +/// whatever it would otherwise have shown. +[[nodiscard]] bool generate(VkCommandBuffer cmd, const Inputs& in); + +/// The made frame of the last `generate`, by index (1-based, as `Inputs::frame_index`), or null. +[[nodiscard]] VkImage made_image(uint32_t index); +[[nodiscard]] VkImageView made_view(uint32_t index); + +/// Forgets the sequence, so the next frame is made with the reset flag set: a cut, a load, a resize. +void reset(); + +/// Frees everything this backend made. Safe to call when nothing was made. +void shutdown(); + +} // namespace mkwvk::fsr3fi From 8acdae915a05182016df7f2eae14dcdd1f2bc0d2 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Sun, 8 Nov 2026 19:42:20 -0600 Subject: [PATCH 042/119] docs: the frame-interpolation backend's unverified list, and why the jitter is a viewport offset Co-Authored-By: Claude Opus 5 --- docs/upscaling.md | 57 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/docs/upscaling.md b/docs/upscaling.md index dd99e5840..21959b7c1 100644 --- a/docs/upscaling.md +++ b/docs/upscaling.md @@ -348,6 +348,63 @@ Two things worth keeping from this: script exists for that: without it, "before" and "after" are two different scenes and the difference between them is whatever you want it to be. +## FSR 3 frame interpolation: what is verified and what is not + +`gpu/vk/vk_fsr3fi.*` records AMD's seventeen passes -- seven of optical flow, ten of interpolation -- +in the order the SDK's own dispatch schedules them, behind `RX_VK_FSR_FG=<1-3>`. It takes the same +assembled inputs DLSS frame generation takes, so `framegen_record` asks DLSS first, this second, and +keeps the renderer's own colour interpolation for the frames neither takes. + +Verified against the sources, not from memory: every binding number comes from the pass file's own +`FFX_..._BIND_*` defines, every descriptor type from the declarations in the callbacks headers, the +image formats from the GLSL's format qualifiers, and each of the four constant blocks carries a +`static_assert` on its size. The dispatch sizes and the SPD setups are transcribed from AMD's host +reference. + +**What is inferred rather than verified.** The picture cannot be checked from here -- no capture, no +validation layers, no eye on the output -- so this list is the honest part, in the order worth +looking at: + +1. **`opticalFlowScale = 1 / displaySize`.** No vendored source assigns it: the FSR3 wrapper that + would is not in the SDK subset here. It is derived from `GetOpticalFlowSize()` in the GLSL having + to come out as the flow image's size. If the flow is scaled wrongly, start here. +2. **A count above one repeats a frame.** FSR 3.1 interpolates the midpoint and only the midpoint -- + no phase in its constants, and its own header writes `t = 0.5` outright -- so `RX_VK_FSR_FG=2` + copies the one made frame rather than making two. DLSS's `MultiFrameCount` is the only route to + more than one real made frame. +3. **A reset frame reports failure** although the chain is recorded, so the caller's own + interpolation takes it rather than a blend against a black previous source. The SDK returns OK + there; this is a deliberate difference. +4. **sRGB transfer and `{0, 1}` luminance**, right for the R8G8B8A8 window and untested against + anything else. AMD's own sources are inconsistent here: the optical flow's transfer-function-0 + path treats the colour as linear while the interpolation applies an sRGB decode. Left as AMD has + it. +5. Optical-flow confidence is a cleared image where the SDK binds null and reads zero through it; + the flow vector-field dispatch rounds the last partial block up where the SDK truncates in float; + the constants staged for the passes before the flow's own pyramid are a sane value rather than + the SDK's leftovers. Each is commented where it is. + +## The jitter, and why the renderer supplies it + +Neither upscaler had one, and there is none to extract. `capture_view_projection` refuses any +projection whose m02 is not exactly zero, and it finds one -- so the matrix the game hands its own +network carries no sub-pixel offset. Its network is single-image and has no use for one. That +settles the question without a run. + +So the renderer supplies it, as a sub-pixel **viewport** offset rather than a change to the +projection. The projection lives in the game's own memory where the GPU reads it, so offsetting it +would mean binding a patched copy to every draw that reads it, which is the shape of per-draw work +that has already cost this renderer 300 ms a frame once. A viewport offset moves rasterization by +the same amount, costs two additions, and applies to colour, depth and motion together because they +are one pass. + +It is applied only to the scene's own passes -- the ones drawing into a depth target of the extent +the upscaler is given -- never the HUD, the menus or the movie layer, which have nothing to resolve +them and would simply shimmer. The sequence is Halton with AMD's 8-times-ratio-squared phase count, +and the offset is handed to both backends so they can undo it. `RX_VK_JITTER=0` turns it off with an +upscaler still on, which is the comparison worth having; the sign convention is the thing to check +first if the image looks wrong, because a wrong sign there is soft or shimmering rather than broken. + ## FSR 3 and FSR 4 are two backends, not two versions FSR 4 is not source-available: it ships as prebuilt signed libraries inside AMD's SDK releases, so it cannot come out From c871a3cc6cd5a76d9198872c8b41e1a004f19d4e Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Sun, 8 Nov 2026 19:45:02 -0600 Subject: [PATCH 043/119] fix: the renderer would not load, and the build now says so extern int64_t presents_now was written inside the anonymous namespace, which makes mkwvk::(anonymous)::presents_now -- a different symbol from the one vk_replay.cpp defines. The link accepts it, because a shared object may leave symbols for its loader; dlopen(RTLD_NOW) then refuses the whole renderer, and the only sign at run time is "the renderer did not start: the window stays black" with no symbol named. One run was wasted on it, and an earlier one on the same failure through a host function referenced without weak. So nx2/build.py now checks the linked hookshot_vk.so for undefined symbols that are neither weak nor the C or C++ runtime's, and fails the build naming each one. Verified both ways: it passes on the fix and fails on the bug, printing _ZN5mkwvk12_GLOBAL__N_112presents_nowE. Co-Authored-By: Claude Opus 5 --- gpu/vk/vk_draw.cpp | 7 ++++++- nx2/build.py | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/gpu/vk/vk_draw.cpp b/gpu/vk/vk_draw.cpp index f2bd98e9a..f21a0ec38 100644 --- a/gpu/vk/vk_draw.cpp +++ b/gpu/vk/vk_draw.cpp @@ -51,6 +51,12 @@ #include "vk_work.h" // (after the others: counts the commands that do GPU work, for full_barrier) namespace mkwvk { + +/// (vk_replay.cpp) The presents so far. Declared here, at this namespace's scope and not inside +/// the anonymous one below, because a declaration in there is a *different* symbol: the link +/// leaves it undefined and dlopen(RTLD_NOW) then refuses the whole renderer, which looks like +/// "the renderer did not start" and nothing else. +extern int64_t presents_now; // (EvilOOT, RX_VK_DRAW_STATS: the pointer table's regions, vk_bank.cpp) struct PointerEntry { uint64_t addr, size; }; const PointerEntry* pointer_table(const NvnState& s, int stage); @@ -2700,7 +2706,6 @@ uint32_t jitter_phases(uint32_t render_width, uint32_t display_width) { /// Advances once per present. Called from the viewport path, which is the first place in a frame /// that knows the scene's extent. void advance_scene_jitter(uint32_t render_width, uint32_t display_width) { - extern int64_t presents_now; // (vk_replay.cpp) if (scene_jitter_state.frame == presents_now) return; scene_jitter_state.frame = presents_now; const uint32_t phases = jitter_phases(render_width, display_width); diff --git a/nx2/build.py b/nx2/build.py index e6411ad97..0efe667e0 100644 --- a/nx2/build.py +++ b/nx2/build.py @@ -30,6 +30,7 @@ import json import os import platform +import shutil import subprocess import sys import threading @@ -61,6 +62,44 @@ VK_LIB = "hookshot_vk.so" if LINUX else "hookshot_vk.dll" +def check_vk_symbols(so): + """(hookshot) The renderer is dlopened with RTLD_NOW, so one unresolved symbol stops the whole + thing loading -- and the only sign of that at run time is "the renderer did not start: the window + stays black", with no symbol named. The link itself does not fail: a shared object is allowed to + leave symbols for its loader to supply, which is exactly what the host executable does for the + weak hos_* ones. + + So: anything still undefined here that is not weak and not the C or C++ runtime's is a mistake, + and this says which. It has caught two, each of which had cost a run apiece to find by hand: a + host function referenced without __attribute__((weak)), and an `extern` of one of our own globals + written inside an anonymous namespace, which makes a different symbol that nothing defines. + """ + nm = shutil.which("nm") or shutil.which("llvm-nm") + if not nm: + return True # (not a reason to fail a build; the check is a guard, not a dependency) + try: + out = subprocess.run([nm, "-D", "--undefined-only", so], capture_output=True, text=True, + check=True).stdout + except (OSError, subprocess.CalledProcessError): + return True + bad = [] + for line in out.splitlines(): + parts = line.split() + if len(parts) < 2 or parts[0] != "U": # ("w" is weak: the host supplies those, or does not) + continue + name = parts[1] + if "@GLIBC" in name or "@CXXABI" in name or "@GLIBCXX" in name or "@GCC" in name: + continue + bad.append(name) + if not bad: + return True + print("%s has %d unresolved symbol(s); it would not load:" % (os.path.basename(so), len(bad))) + for name in bad[:20]: + print(" " + name) + print(" a host function wants __attribute__((weak)); one of our own globals wants an extern at") + print(" namespace scope, not inside an anonymous namespace") + return False + def dlss_sdk_link(): """(hookshot) What a build with RX_VK_DLSS_SDK= links the DLSS backend against. @@ -908,6 +947,8 @@ def main(): print("%s link FAILED, %d undefined symbols" % (VK_LIB, len(undefined))) print("\n".join(undefined[:60]) if undefined else (r.stdout + r.stderr)[-3000:]) return 1 + if LINUX and not check_vk_symbols(vdll): + return 1 print("linked %s: %d MB (%.0fs)" % (vdll, os.path.getsize(vdll) >> 20, time.time() - t)) if a.dll and not a.only: dll = os.path.join(out, "hookshot_game.dll") # (+ hookshot_game.map: crash offsets -> f_) From 86b6988c3bc2039e77ac588ce35d1ca6e792f2b5 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Sun, 8 Nov 2026 19:50:08 -0600 Subject: [PATCH 044/119] fix: the DLSS contract test links again vk_dlss.cpp's wanted() reads opts.scene_upscaler where RX_VK_DLSS is not set, and the contract test links that file on its own, so the test stopped linking: undefined reference to mkwvk::opts. The test driver defines one now, default-constructed, which is every feature off -- the right value, since the checks it guards are about what the backend does when it has *not* been asked for. Co-Authored-By: Claude Opus 5 --- tests/dlss_contract_test.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/dlss_contract_test.cpp b/tests/dlss_contract_test.cpp index c87627a74..51d5cb4ae 100644 --- a/tests/dlss_contract_test.cpp +++ b/tests/dlss_contract_test.cpp @@ -19,6 +19,7 @@ #include #include "vk_dlss.h" +#include "vk_menu.h" // (Options: vk_dlss.cpp reads the menu where RX_VK_DLSS is not set) // ---- the seven symbols gpu/vk/vk_dlss.cpp needs, and nothing else ---- @@ -53,6 +54,11 @@ PFN_vkCmdPipelineBarrier2 vkCmdPipelineBarrier2 = stub_barrier2; namespace mkwvk { Device dev; +/// (hookshot) The Insert menu's options. vk_dlss.cpp's `wanted()` reads `opts.scene_upscaler` where +/// RX_VK_DLSS is not set, so the backend does not link without one. Default-constructed, which is +/// every feature off: the checks below are about what the backend does when it is *not* asked for, +/// and a stub that asked for it would be testing the opposite. +Options opts; void logf(const char* fmt, ...) { char b[1024]; From f48483ce0f4d60aec9153c6024d2e1a5a5f29e0d Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Sun, 8 Nov 2026 20:44:09 -0600 Subject: [PATCH 045/119] fix: the shader check compared glslang's version, and ran where glslang is not CI went red on both runners for two different reasons, neither of them a real difference in the shaders. On Linux the only diff was the version comment glslang writes into the header it generates: 1116.2.0 against the runner's 1115.1.0. Identical SPIR-V, reported as a source mismatch. The comparison ignores that line now, and it still fails on a changed module -- checked by flipping a word and watching it fail. On Windows the runner has no glslang at all, and --strict turns a missing tool into a failure. The headers are SPIR-V and the same everywhere, so compiling them twice would only mean a second glslang to keep in step with the first -- which is the skew that caused the Linux failure above. It joins the tests already marked Linux-only for spirv-val, with its reason written out. Co-Authored-By: Claude Opus 5 --- scripts/fsr3_shaders.py | 15 ++++++++++++++- tests/run_all.py | 4 ++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/scripts/fsr3_shaders.py b/scripts/fsr3_shaders.py index 4a0b48bed..05ddba4cc 100644 --- a/scripts/fsr3_shaders.py +++ b/scripts/fsr3_shaders.py @@ -127,6 +127,19 @@ def compile_one(glslang, name, pass_name, extra, out_path, target_env, variable= subprocess.run(cmd, check=True) +def strip_generator(text): + """The header without glslang's own version comment. + + glslang writes its version into the first line as `// 1116.2.0`, so two glslang builds produce + byte-different headers from identical SPIR-V. Comparing the whole text made this check fail on + a CI runner whose glslang was one release behind the one that generated the checked-in files -- + a version bump reported as a source mismatch, which is the kind of red that teaches people to + ignore red. The words after it are the module, and those are what this is about. + """ + return [line for line in text.splitlines() + if not line.strip().startswith("// ") or not line.strip()[3:].replace(".", "").isdigit()] + + def main(): p = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) @@ -167,7 +180,7 @@ def main(): if a.check: have = header.read_text() if header.exists() else "" want = made.read_text() - if have != want: + if strip_generator(have) != strip_generator(want): bad.append(name) if not have: print(f"{header.name}: missing", file=sys.stderr) diff --git a/tests/run_all.py b/tests/run_all.py index 5da1b47c9..4d2051373 100644 --- a/tests/run_all.py +++ b/tests/run_all.py @@ -75,6 +75,10 @@ for _name in ("nx2/test_default_point_size.py", "nx2/test_draw_parameters.py", "nx2/test_coop_spirv.py", "nx2/test_spirv_struct_identity.py"): SKIP[_name] = ({"windows"}, "needs spirv-val: checked on Linux") +# (glslang: likewise a Linux runner package. The headers it checks are SPIR-V, which is the same on +# every platform, so compiling them twice would only mean a second glslang version to keep in step +# with the first -- and a version skew between the two is exactly what broke this check once.) +SKIP["tests/test_fsr3_shaders.py"] = ({"windows"}, "needs glslang: checked on Linux") def which(*names): From 47dd0978b926c5e0d9fbf4a7bd160a43289cf094 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Sun, 8 Nov 2026 20:45:17 -0600 Subject: [PATCH 046/119] fix: a fork releases its own work, not upstream's The release workflow reported success and published nothing. semantic-release takes its repository from package.json, which names the upstream repository, so on a fork it compared this main against *upstream's* main, found it "behind the remote one", and stopped -- with a green tick, which is the worst way to fail. It now passes --repository-url for the repository the run actually belongs to. On upstream the two are the same string and nothing changes; on a fork it releases the fork. Co-Authored-By: Claude Opus 5 --- .github/workflows/release.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f129b6110..edff81815 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -56,8 +56,12 @@ jobs: # RELEASE_TOKEN is a fine-grained personal access token with contents: write. It is preferred over GITHUB_TOKEN # because a tag pushed by GITHUB_TOKEN does not start the workflows that publish the release. # Without the secret, run them by hand and attach their artifacts. + # --repository-url is the repository this run belongs to, not the one package.json names. On the upstream + # repository the two are the same string and this changes nothing; on a fork they are not, and without it + # semantic-release compares the fork's main against *upstream's*, decides it is "behind the remote one", and + # publishes nothing while still reporting success. A fork releases its own work. - name: semantic-release if: steps.first.outputs.released == 'true' env: GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN || secrets.GITHUB_TOKEN }} - run: npx semantic-release + run: npx semantic-release --repository-url "${{ github.server_url }}/${{ github.repository }}.git" From 3ff9fbdaebf2773cb03e9a85002b44b1675b1fde Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Sun, 8 Nov 2026 20:46:52 -0600 Subject: [PATCH 047/119] fix: the release's commit-analyzer preset is a package, and it was not declared .releaserc.json asks both commit-analyzer and release-notes-generator for the "conventionalcommits" preset, which lives in its own package. Nothing declared it and there is no lock file, so a fresh npm install resolved without it and semantic-release stopped at MODULE_NOT_FOUND the moment it tried to analyze commits. Declared now, at the version current with semantic-release 25. This is not a fork problem: any release run from a clean checkout would have hit it. It only surfaced here because this is the first run that got as far as reading commits. Co-Authored-By: Claude Opus 5 --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index f0908db91..f622e5e57 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "@semantic-release/exec": "7.1.0", "@semantic-release/git": "11.0.1", "@semantic-release/release-notes-generator": "14.1.1", + "conventional-changelog-conventionalcommits": "10.4.1", "semantic-release": "25.0.9" } } From ca6595fa42b879361ed0e260784077a231ab8f4c Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Sun, 8 Nov 2026 20:49:34 -0600 Subject: [PATCH 048/119] fix: the conventionalcommits preset has to match the changelog writer 10.4.1 was the wrong choice: both @semantic-release/commit-analyzer 13 and release-notes-generator 14 pin conventional-changelog-writer ^8, and the 10.x preset is written for writer 10, so the notes step died inside a handlebars template. 8.0.0 is the line built against writer 8. Co-Authored-By: Claude Opus 5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f622e5e57..2c15c27a1 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "@semantic-release/exec": "7.1.0", "@semantic-release/git": "11.0.1", "@semantic-release/release-notes-generator": "14.1.1", - "conventional-changelog-conventionalcommits": "10.4.1", + "conventional-changelog-conventionalcommits": "8.0.0", "semantic-release": "25.0.9" } } From e4c5c99d9b56ee6e41d1883f05f7965bdf46ae17 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 9 Nov 2026 02:50:00 +0000 Subject: [PATCH 049/119] chore(release): 2.1.0 [skip ci] [skip release] ## [2.1.0](https://github.com/notquiteog/Hookshot/compare/v2.0.4...v2.1.0) (2026-11-09) ### Features * a timed span per FSR pass, so the cost has a number per pass ([1d7f262](https://github.com/notquiteog/Hookshot/commit/1d7f262574bfe18de93289b34b13ae6011eec0d8)) * census the render target sets, to settle whether a G-buffer exists ([8f2fda3](https://github.com/notquiteog/Hookshot/commit/8f2fda3934792091692a97744af9596c35e57845)) * compile AMD's FSR 3.1 upscaler passes from the FidelityFX SDK ([37afa2e](https://github.com/notquiteog/Hookshot/commit/37afa2e5f80db67a5fb690bcb2289b161e7df922)), closes [#577](https://github.com/notquiteog/Hookshot/issues/577) * compose the scene's view projection, and transpose it for the shader ([df82d90](https://github.com/notquiteog/Hookshot/commit/df82d909aeb0a8b6593f23ae5c847db8c98a99e3)) * count FSR evaluations, because nine passes a call is cheap or ruinous ([85a3ea2](https://github.com/notquiteog/Hookshot/commit/85a3ea21e7dc8f92bb06891b5b35f6d37a075ed2)) * create FSR 3.1's pipelines and internal images ([6b51433](https://github.com/notquiteog/Hookshot/commit/6b51433e8a5ad39920e5e6b6f2652f13d412b00c)) * derive camera motion from the scene's depth, and keep that depth ([29c7cbe](https://github.com/notquiteog/Hookshot/commit/29c7cbe508bc8a7ede6f488f1de315357bfa1f10)) * DLSS at the seam, and a stage switch for the FSR cost ([6aa9f48](https://github.com/notquiteog/Hookshot/commit/6aa9f48f438768ca553915b1a847a39a8a6ba1d4)) * DLSS Super Resolution through NGX, behind a build-time SDK gate ([aff6abb](https://github.com/notquiteog/Hookshot/commit/aff6abbae6a8a8e59776ee83ea2cf9f07161d49d)) * frame generation asks for its own extensions and the whole input set ([ad291d1](https://github.com/notquiteog/Hookshot/commit/ad291d1ee822e176bf228ee3c7d605d98023802f)) * FSR 3 frame interpolation, and a jitter for the upscalers to undo ([384c41b](https://github.com/notquiteog/Hookshot/commit/384c41b473cef2b7008e336f6887d9a321b9d556)) * give FSR the assembled depth and camera motion ([481b957](https://github.com/notquiteog/Hookshot/commit/481b957d7de8e2de2c55945549b834b202233b94)) * HOS_DISPLAY_VRR, which is what actually holds the frame rate at 60 ([c65c68e](https://github.com/notquiteog/Hookshot/commit/c65c68e22597a93a88b632f71c7ac3a53824dae7)) * HOS_FPS_FORCE, because raising the limiter alone does not hold ([2008ac7](https://github.com/notquiteog/Hookshot/commit/2008ac73d6d6f04c1495c2dffd5cd00809c31be7)) * HOS_VSYNC_HZ, the hardcoded 60 that actually paces the game ([5eb9f8b](https://github.com/notquiteog/Hookshot/commit/5eb9f8bc57964f51cbb7285dc44162618ad488d7)) * link NGX properly, frame generation at the seam, AMD's interpolation sources ([43e3360](https://github.com/notquiteog/Hookshot/commit/43e3360aa268fb99ff392d3bbc18c7232265a950)) * name each network binding's role in the upscaler input contract ([d9566a1](https://github.com/notquiteog/Hookshot/commit/d9566a137825a3733ce0104227142f6472a20eac)) * publish Ocarina's camera, and make a backend reachable without the stand-in ([8bd7c8d](https://github.com/notquiteog/Hookshot/commit/8bd7c8d7924addcd82ab188f9cad7fddd554750c)) * record FSR 3.1's nine dispatches ([8769c80](https://github.com/notquiteog/Hookshot/commit/8769c80ebfd9a3d808389336947ad0324af75313)) * route the game's upscale dispatch through one backend seam ([1a036c8](https://github.com/notquiteog/Hookshot/commit/1a036c843597588eae1f5ba43e9938ea4800c591)) * RX_VK_VP_HUNT, to find the view projection from a value only it holds ([3c02213](https://github.com/notquiteog/Hookshot/commit/3c02213e0ab32736628e00f36fee7eb4cae2851d)) * the hunt found the projection, so widen it to find the view ([2946a32](https://github.com/notquiteog/Hookshot/commit/2946a3228227208d3db67e0a48cc9af84df56d41)) * the two backends have rows in the Insert menu ([cf8b3b1](https://github.com/notquiteog/Hookshot/commit/cf8b3b1ac112bdca2e1e144b80a308e22dce0ec5)) * the vsync event follows the display, and 0 turns it off ([a67e471](https://github.com/notquiteog/Hookshot/commit/a67e471a2002e8ee6faf62fe2e93adcce5b8ee98)) ### Bug Fixes * a fork releases its own work, not upstream's ([47dd097](https://github.com/notquiteog/Hookshot/commit/47dd0978b926c5e0d9fbf4a7bd160a43289cf094)) * clear the SPD counter between the pyramid passes (did not fix the cost) ([66e8c3a](https://github.com/notquiteog/Hookshot/commit/66e8c3a6fd90d3a41abf7a69eaac6f3468e5c06f)) * HOS_FPS_FORCE must not touch the nominal rate: it is slow motion on screen ([8681f2e](https://github.com/notquiteog/Hookshot/commit/8681f2e9482ca4d8364919a1c3fdac0935361ea0)) * publish the camera from the inlined projection copies too ([c630d59](https://github.com/notquiteog/Hookshot/commit/c630d5923ba8d1746ccfcda2583a95365c4b4aa4)) * read the upscaler contract in descriptor order, not from draw_sampled ([492bcd0](https://github.com/notquiteog/Hookshot/commit/492bcd02361733fc3e0b8ce16ee16b69ed28e251)) * scan for the view projection once a target set, not once a draw ([12d4d83](https://github.com/notquiteog/Hookshot/commit/12d4d83191446484f10bf621dd7849dcec3142e1)) * snapshot the projection's fields, and name what caps the frame rate ([3790556](https://github.com/notquiteog/Hookshot/commit/37905564f534f3201d555e460145efd5c33d0528)) * the conventionalcommits preset has to match the changelog writer ([ca6595f](https://github.com/notquiteog/Hookshot/commit/ca6595fa42b879361ed0e260784077a231ab8f4c)) * the DLSS contract test links again ([86b6988](https://github.com/notquiteog/Hookshot/commit/86b6988c3bc2039e77ac588ce35d1ca6e792f2b5)) * the game's network takes one texture, so it is not a temporal upscaler ([853cfe3](https://github.com/notquiteog/Hookshot/commit/853cfe379c5bbc215538c57ca7a01a9f96dc4af5)) * the host camera symbols must be weak, or the renderer does not load at all ([70ecdf4](https://github.com/notquiteog/Hookshot/commit/70ecdf42b2194ca23710f17cb403f7f9a4ac9d94)) * the release's commit-analyzer preset is a package, and it was not declared ([3ff9fbd](https://github.com/notquiteog/Hookshot/commit/3ff9fbdaebf2773cb03e9a85002b44b1675b1fde)) * the renderer would not load, and the build now says so ([c871a3c](https://github.com/notquiteog/Hookshot/commit/c871a3cc6cd5a76d9198872c8b41e1a004f19d4e)) * the shader check compared glslang's version, and ran where glslang is not ([f48483c](https://github.com/notquiteog/Hookshot/commit/f48483ce0f4d60aec9153c6024d2e1a5a5f29e0d)) * the view projection scan ran per draw, which stuttered hard ([2d9b4e8](https://github.com/notquiteog/Hookshot/commit/2d9b4e8d62923f352896b4c7869bb8eeda609a0a)) --- changelog.txt | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/changelog.txt b/changelog.txt index 89a6d1421..3484c158b 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,48 @@ --------------------------------------------------------------------------------------------------- +Version: 2.1.0 +Date: 09. 11. 2026 + Features: + - FSR 3 frame interpolation, and a jitter for the upscalers to undo. + - The two backends have rows in the Insert menu. + - Frame generation asks for its own extensions and the whole input set. + - Link NGX properly, frame generation at the seam, AMD's interpolation sources. + - DLSS at the seam, and a stage switch for the FSR cost. + - A timed span per FSR pass, so the cost has a number per pass. + - Count FSR evaluations, because nine passes a call is cheap or ruinous. + - Compose the scene's view projection, and transpose it for the shader. + - The hunt found the projection, so widen it to find the view. + - DLSS Super Resolution through NGX, behind a build-time SDK gate. + - RX_VK_VP_HUNT, to find the view projection from a value only it holds. + - The vsync event follows the display, and 0 turns it off. + - HOS_VSYNC_HZ, the hardcoded 60 that actually paces the game. + - HOS_DISPLAY_VRR, which is what actually holds the frame rate at 60. + - HOS_FPS_FORCE, because raising the limiter alone does not hold. + - Give FSR the assembled depth and camera motion. + - Derive camera motion from the scene's depth, and keep that depth. + - Publish Ocarina's camera, and make a backend reachable without the stand-in. + - Record FSR 3.1's nine dispatches. + - Create FSR 3.1's pipelines and internal images. + - Census the render target sets, to settle whether a G-buffer exists. + - Compile AMD's FSR 3.1 upscaler passes from the FidelityFX SDK. + - Route the game's upscale dispatch through one backend seam. + - Name each network binding's role in the upscaler input contract. + Bugfixes: + - The conventionalcommits preset has to match the changelog writer. + - The release's commit-analyzer preset is a package, and it was not declared. + - A fork releases its own work, not upstream's. + - The shader check compared glslang's version, and ran where glslang is not. + - The DLSS contract test links again. + - The renderer would not load, and the build now says so. + - Scan for the view projection once a target set, not once a draw. + - Clear the SPD counter between the pyramid passes (did not fix the cost). + - The view projection scan ran per draw, which stuttered hard. + - HOS_FPS_FORCE must not touch the nominal rate: it is slow motion on screen. + - The host camera symbols must be weak, or the renderer does not load at all. + - Snapshot the projection's fields, and name what caps the frame rate. + - Publish the camera from the inlined projection copies too. + - The game's network takes one texture, so it is not a temporal upscaler. + - Read the upscaler contract in descriptor order, not from draw_sampled. +--------------------------------------------------------------------------------------------------- Version: 0.1.0 Date: 07. 11. 2026 Major Features: From 4ed2196af7455963f4a40fac873ba1ebc3af63cc Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Sun, 8 Nov 2026 20:51:04 -0600 Subject: [PATCH 050/119] docs: neural rendering on AMD is the game's own network, not FSR 4 The game ships a neural upscaler and vk_coopmat.cpp already lowers it to VK_KHR_cooperative_matrix -- the Khronos extension, which AMD exposes from RDNA 3 on -- so this is not an NVIDIA feature. What is NVIDIA-shaped is the probe: it accepts a device only when a lane holds the same matrix positions the console's fragments do, so AMD's WMMA layout falls back to the shuffle expansion and the network runs slowly rather than natively. The general lowering is to round-trip the fragments through shared memory in matrix order and let OpCooperativeMatrixLoadKHR do the mapping, which works on implementations nobody has tested instead of only the one whose layout matches. Written down rather than written, because there is no AMD GPU here and this document already records what unverifiable work costs. Co-Authored-By: Claude Opus 5 --- docs/upscaling.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/docs/upscaling.md b/docs/upscaling.md index 21959b7c1..153c14907 100644 --- a/docs/upscaling.md +++ b/docs/upscaling.md @@ -405,6 +405,40 @@ and the offset is handed to both backends so they can undo it. `RX_VK_JITTER=0` upscaler still on, which is the comparison worth having; the sign convention is the thing to check first if the image looks wrong, because a wrong sign there is soft or shimmering rather than broken. +## Neural rendering on AMD: the answer is the game's own network, not FSR 4 + +The obvious reading of "neural rendering on AMD" is FSR 4, and FSR 4 is the wrong place to start. +Its network does not ship as source: it lives in AMD's own runtime, so a backend for it would be the +same shape as the DLSS one -- a build-time gate pointing at a vendor SDK, off by default, untestable +on a machine without the hardware. Worth having eventually; not the thing that makes neural +upscaling work on AMD. + +The thing that does is already in this tree. **Ocarina ships its own neural upscaler**, and +`gpu/vk/vk_coopmat.cpp` already runs it natively: the game's TAAU and movie networks are +`HMMA.16816.F16` programs, and that module lowers them to `OpCooperativeMatrixMulAddKHR` through +**`VK_KHR_cooperative_matrix`** -- the vendor-neutral Khronos extension, not NVIDIA's `NV` one. AMD +exposes it on RDNA 3 and newer. So the neural upscaler is not an NVIDIA feature here; it is a +feature of whatever GPU can multiply matrices. + +What is not neutral is how the fragments get into the matrix. The module probes the device at start, +measuring which matrix positions each lane's elements are, and accepts the device only when a lane +holds **the same positions** the console's fragments do (PTX `mma.m16n8k16`'s layout), with at most a +different order inside the lane. Anything else falls back to the shuffle expansion in +`lower_to_maxwell.h`, which is correct but a fraction of the speed. AMD's WMMA distributes elements +differently, so the expected outcome on an AMD card today is: **the network runs, and runs slowly**. + +The fix is not to teach the emitter AMD's layout. It is to stop depending on any layout. A +cooperative matrix's element distribution is deliberately opaque -- that is what +`OpCooperativeMatrixLoadKHR` is for -- so the general lowering is to round-trip the lane fragments +through shared memory in matrix order, load the matrix, multiply, store it back, and read each +lane's fragments out. That costs shared-memory traffic and works on every implementation, including +ones nobody has tested, instead of only on the one whose layout happens to match. + +That is the recommendation, and it is deliberately not implemented here: there is no AMD GPU on this +machine, and the lesson of this document is what happens when something unverifiable gets written +anyway. The probe already reports what it measured, so the first real step is one log line from an +AMD card. + ## FSR 3 and FSR 4 are two backends, not two versions FSR 4 is not source-available: it ships as prebuilt signed libraries inside AMD's SDK releases, so it cannot come out From 9858599e9643b0507d88cf340aee24acc1d7847b Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Sun, 8 Nov 2026 20:55:25 -0600 Subject: [PATCH 051/119] fix: the history reset the document specifies, which nothing implemented docs/upscaling.md states that a temporal backend's history is reset on a resize, on first use, and after a gap of more than 250 ms. Nothing did it: every Inputs::reset was false always, and fsr3fi::reset, dlssg::reset and camera_motion::reset each existed with no caller at all. That is not a crash, which is why it survived: it is an upscaler accumulating across a loading screen or a camera cut, and a frame interpolator blending two frames taken in different places. A smear for a few frames, easy to blame on the backend rather than on the integration. The upscalers are now told by scene_history_stale(), measured between the scene's own evaluations rather than between presents, because that is what the history belongs to. The present path already knew about cuts -- it computes a 'gap' and refuses its own blend across one -- so that same signal now resets the camera motion and both frame-generation backends. Co-Authored-By: Claude Opus 5 --- gpu/vk/vk_draw.cpp | 27 +++++++++++++++++++++++++++ gpu/vk/vk_framegen.cpp | 10 ++++++++++ 2 files changed, 37 insertions(+) diff --git a/gpu/vk/vk_draw.cpp b/gpu/vk/vk_draw.cpp index f21a0ec38..975942a5d 100644 --- a/gpu/vk/vk_draw.cpp +++ b/gpu/vk/vk_draw.cpp @@ -5559,6 +5559,28 @@ bool scene_jitter(float* x, float* y) { return true; } +/// (hookshot) Whether a temporal backend should throw its history away this frame. +/// +/// docs/upscaling.md states the contract -- history is reset on a resize, on first use, and after a +/// gap of more than 250 ms -- and nothing implemented it, so every `Inputs::reset` was false +/// always. What that costs is not a crash: it is an upscaler accumulating across a loading screen +/// or a camera cut, and a frame interpolator blending two frames from different places, both of +/// which look like a smear for a few frames and are easy to blame on the backend. +/// +/// The gap is measured between the scene's own evaluations, not between presents, because that is +/// what the history belongs to. +bool scene_history_stale(uint32_t render_width, uint32_t render_height) { + using clk = std::chrono::steady_clock; + static uint32_t last_w = 0, last_h = 0; + static clk::time_point last{}; + const clk::time_point now = clk::now(); + const bool first = last.time_since_epoch().count() == 0; + const bool resized = render_width != last_w || render_height != last_h; + const bool gap = !first && now - last > std::chrono::milliseconds(250); + last_w = render_width, last_h = render_height, last = now; + return first || resized || gap; +} + /// (hookshot) The scene's depth and matrix, for the present path (vk_draw.h). bool scene_frame_inputs(SceneFrameInputs* out) { if (!out) return false; @@ -5860,6 +5882,9 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { assembled.inputs.render_height = scene_depth.height; assembled.inputs.colour = 0; // (the dispatch's single sampled texture) assembled.colour_binding = assembled.inputs.colour; + // One answer for both backends: whichever takes this dispatch gets the same + // statement about whether its history still belongs to this scene. + const bool stale = scene_history_stale(scene_depth.width, scene_depth.height); if (upscale::choose(avail, assembled) == upscale::Backend::Dlss) { // NGX is handed whole resources, not views: the colour's image and format come from the // lockstep DescWriter::Source, the depth's from the targets, and the motion's from the @@ -5878,6 +5903,7 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { di.upscale_width = req.output_width, di.upscale_height = req.output_height; di.motion_scale[0] = 1.0f, di.motion_scale[1] = 1.0f; // (already render pixels) scene_jitter(&di.jitter[0], &di.jitter[1]); + di.reset = stale; float dnp = 0.0f, dfp = 0.0f; const float dth = hos_oot_camera ? hos_oot_camera(&dnp, &dfp) : 0.0f; if (dth > 0.0f && dnp > 0.0f) di.near_plane = dnp, di.fov_y = 2.0f * std::atan(dth); @@ -5909,6 +5935,7 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { // The offset this frame's scene was rasterized with, which the upscaler has to // undo. Zero where nothing is jittering, which is what that means. scene_jitter(&ai.jitter[0], &ai.jitter[1]); + ai.reset = stale; float np = 0.0f, fp = 0.0f; const float th = hos_oot_camera ? hos_oot_camera(&np, &fp) : 0.0f; if (th > 0.0f && np > 0.0f) ai.near_plane = np, ai.fov_y = 2.0f * std::atan(th); diff --git a/gpu/vk/vk_framegen.cpp b/gpu/vk/vk_framegen.cpp index 564d5f6bd..7a6eeca47 100644 --- a/gpu/vk/vk_framegen.cpp +++ b/gpu/vk/vk_framegen.cpp @@ -646,6 +646,16 @@ bool framegen_record(VkCommandBuffer cmd, VkImageView src, uint32_t sw, uint32_t } const int cur = fg.cur, prev = cur ^ 1, m = multiplier(); const bool blend = fg.have_prev && !gap; + // (hookshot) A gap is a loading screen or a cut, and the renderer's own interpolator already + // refuses to blend across one. Everything else with a history has to be told as well: the + // camera motion would otherwise reproject through a matrix from before the cut, and either + // frame-generation backend would interpolate between two frames taken in different places. + // Each of these had a reset() that nothing ever called. + if (gap) { + camera_motion::reset(); + dlssg::reset(); + fsr3fi::reset(); + } const uint32_t uw = (uint32_t)w, uh = (uint32_t)h; const uint32_t qw = (uw + 3) / 4, qh = (uh + 3) / 4, cw = (qw + 3) / 4, ch = (qh + 3) / 4; full_barrier(cmd); From 4f26e27599eb96d8a03a93af5d8273fd1e2e8b2e Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 9 Nov 2026 02:55:51 +0000 Subject: [PATCH 052/119] chore(release): 2.1.1 [skip ci] [skip release] ## [2.1.1](https://github.com/notquiteog/Hookshot/compare/v2.1.0...v2.1.1) (2026-11-09) ### Bug Fixes * the history reset the document specifies, which nothing implemented ([9858599](https://github.com/notquiteog/Hookshot/commit/9858599e9643b0507d88cf340aee24acc1d7847b)) --- changelog.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/changelog.txt b/changelog.txt index 3484c158b..4c0a5c9f2 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,9 @@ --------------------------------------------------------------------------------------------------- +Version: 2.1.1 +Date: 09. 11. 2026 + Bugfixes: + - The history reset the document specifies, which nothing implemented. +--------------------------------------------------------------------------------------------------- Version: 2.1.0 Date: 09. 11. 2026 Features: From 16c7d39939d21f0dcf7c698a6fb387d0ca0b5d01 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 08:50:13 -0600 Subject: [PATCH 053/119] docs: the optical-flow scale checks out, so it is no longer a guess It was the first item on the frame-interpolation backend's unverified list, derived rather than read because no vendored source assigns it. It holds: GetOpticalFlowSize() is (1 / opticalFlowScale) / opticalFlowBlockSize, and the staged 1/displaySize with a block size of 8 gives displaySize/8, which is the extent prepare() allocates the flow images at and what a run reports. It is the only value that makes the shader's idea of the flow extent equal the image it is handed. Noted too that a display size which is not a multiple of 8 floors in the shader and ceils in the allocation, so the shader addresses inside the image. Co-Authored-By: Claude Opus 5 --- docs/upscaling.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/upscaling.md b/docs/upscaling.md index 153c14907..0a3595658 100644 --- a/docs/upscaling.md +++ b/docs/upscaling.md @@ -365,9 +365,15 @@ reference. validation layers, no eye on the output -- so this list is the honest part, in the order worth looking at: -1. **`opticalFlowScale = 1 / displaySize`.** No vendored source assigns it: the FSR3 wrapper that - would is not in the SDK subset here. It is derived from `GetOpticalFlowSize()` in the GLSL having - to come out as the flow image's size. If the flow is scaled wrongly, start here. +1. ~~**`opticalFlowScale = 1 / displaySize`.**~~ **Checked.** No vendored source assigns it -- the + FSR3 wrapper that would is not in the SDK subset here -- so it was derived rather than read. It + holds: `GetOpticalFlowSize()` in `ffx_frameinterpolation_callbacks_glsl.h` is + `(1.0 / opticalFlowScale) / opticalFlowBlockSize`, and with the staged `1 / displaySize` and a + block size of 8 that is `displaySize / 8` -- exactly the extent `prepare()` allocates the flow + images at, which a run confirms (`2048x1152 ... flow 256x144`). It is the only value that makes + the shader's idea of the flow extent equal the image it is given. Where the display size is not + a multiple of 8 the shader's integer divide floors while we allocate the ceiling, so it addresses + inside the image rather than past it, which is the safe direction. 2. **A count above one repeats a frame.** FSR 3.1 interpolates the midpoint and only the midpoint -- no phase in its constants, and its own header writes `t = 0.5` outright -- so `RX_VK_FSR_FG=2` copies the one made frame rather than making two. DLSS's `MultiFrameCount` is the only route to From a0ce7de16826b5cba5192e18be5088a3cc2fa1d9 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 08:56:06 -0600 Subject: [PATCH 054/119] feat: the upscalers and frame generation are the native settings, not new rows A released build offered DLSS and could never do it: CI has no NVIDIA SDK and none may be committed, so the NGX half is compiled out of every build anyone downloads. FSR frame interpolation had no setting at all -- RX_VK_FSR_FG only. Both are now the existing rows a player already knows. "Upscaling" carries the scene upscalers as further values: Off, Catmull-Rom and Lanczos filter the finished picture, FSR 3.1 and DLSS resolve the 3D scene itself in the game's own upscaler's place. One row because to a player it is one question, and because a second row asking it again is how two settings end up disagreeing. window_filter() and scene_upscaler() say which half is meant, so the filter's shader never sees a mode it does not have. "Frame generation" stays the whole frame-generation setting: how many frames to make, not which library makes them. Both backends are asked whenever it is on, and the present path tries DLSS, then FSR 3, then its own blend. Where the build has no NGX SDK the Upscaling row stops at FSR 3.1, so it never offers what the binary cannot do. A setting that silently does nothing is worse than one that is not there. Co-Authored-By: Claude Opus 5 --- gpu/vk/vk_dlss.cpp | 6 +++++- gpu/vk/vk_dlss.h | 6 ++++++ gpu/vk/vk_dlssg.cpp | 2 +- gpu/vk/vk_draw.cpp | 4 ++-- gpu/vk/vk_framegen.cpp | 6 +++--- gpu/vk/vk_fsr3fi.cpp | 16 ++++++++++++---- gpu/vk/vk_menu.cpp | 40 +++++++++++++++++++++------------------- gpu/vk/vk_menu.h | 19 +++++++++++++------ gpu/vk/vk_replay.cpp | 2 +- 9 files changed, 64 insertions(+), 37 deletions(-) diff --git a/gpu/vk/vk_dlss.cpp b/gpu/vk/vk_dlss.cpp index 128cc1b4e..21108e08b 100644 --- a/gpu/vk/vk_dlss.cpp +++ b/gpu/vk/vk_dlss.cpp @@ -51,7 +51,7 @@ bool wanted() { // applies after a restart, which the row says. static const bool yes = []() { if (const char* e = getenv("RX_VK_DLSS")) return atoi(e) != 0; - return opts.scene_upscaler == 2; + return scene_upscaler() == 2; }(); return yes; } @@ -326,6 +326,10 @@ void ngx_shutdown() {} } // namespace +bool built_with_sdk() { + return kHaveSdk; +} + bool supported() { static const bool answer = [] { if (!wanted()) return false; // (RX_VK_DLSS=1: nothing below runs unless it is asked for) diff --git a/gpu/vk/vk_dlss.h b/gpu/vk/vk_dlss.h index c1a1be4aa..486cb58d7 100644 --- a/gpu/vk/vk_dlss.h +++ b/gpu/vk/vk_dlss.h @@ -60,6 +60,12 @@ struct Inputs { /// Whether DLSS can run here at all: asked for (`RX_VK_DLSS=1`), built with an NGX SDK, the NGX /// runtime loaded, and this driver and GPU reporting Super Resolution as available. Asked once; the /// answer is cached, and the one line saying why it is false is logged once. +/// Whether this build has the NGX SDK compiled in at all. A compile-time fact, not a device one: it +/// asks nothing of the driver and loads nothing, so the menu can use it to decide whether offering +/// DLSS would be offering something this binary can never do. Every released build answers false, +/// because CI has no NVIDIA SDK and none may be committed. +[[nodiscard]] bool built_with_sdk(); + [[nodiscard]] bool supported(); /// Makes the image an evaluation resolves into and remembers these extents, re-making them when the diff --git a/gpu/vk/vk_dlssg.cpp b/gpu/vk/vk_dlssg.cpp index 07678ef54..034bbfdfb 100644 --- a/gpu/vk/vk_dlssg.cpp +++ b/gpu/vk/vk_dlssg.cpp @@ -40,7 +40,7 @@ uint32_t asked() { // Otherwise the Insert menu: "Made frames by" picks DLSS, and "Frame generation" says how // many frames there are to make -- one fewer than the multiplier, since the last of each // set is the game's own frame. - if (opts.framegen_by != 1) return 0; + // The native "Frame generation" row: how many frames, not which library (vk_fsr3fi.cpp). const int made = std::clamp(opts.framegen - 1, 0, (int)kMaxMade); return (uint32_t)made; }(); diff --git a/gpu/vk/vk_draw.cpp b/gpu/vk/vk_draw.cpp index 975942a5d..789216dda 100644 --- a/gpu/vk/vk_draw.cpp +++ b/gpu/vk/vk_draw.cpp @@ -2679,7 +2679,7 @@ bool jitter_wanted() { if (const char* e = getenv("RX_VK_JITTER")) return atoi(e) != 0; if (const char* e = getenv("RX_VK_FSR"); e && atoi(e) != 0) return true; if (const char* e = getenv("RX_VK_DLSS"); e && atoi(e) != 0) return true; - return opts.scene_upscaler != 0; + return scene_upscaler() != 0; }(); return yes; } @@ -5799,7 +5799,7 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { // the Insert menu's "Scene upscaler" row decides. Read once: the backends cache what they are. static const bool fsr_wanted = []() { if (const char* e = getenv("RX_VK_FSR")) return atoi(e) != 0; - return opts.scene_upscaler == 1; + return scene_upscaler() == 1; }(); // (hookshot) Both vendor backends ask their own question: FSR whether this device can run its // passes, DLSS whether this is an NVIDIA driver reporting Super Resolution with an NGX runtime diff --git a/gpu/vk/vk_framegen.cpp b/gpu/vk/vk_framegen.cpp index 7a6eeca47..21655044e 100644 --- a/gpu/vk/vk_framegen.cpp +++ b/gpu/vk/vk_framegen.cpp @@ -361,7 +361,7 @@ bool framegen_on() { } VkImage framegen_scale(VkCommandBuffer cmd, VkImageView src, VkImage image, uint32_t sw, uint32_t sh, const int crop[4], uint32_t dw, uint32_t dh) { - if (!opts.upscale && !opts.sharpness) return VK_NULL_HANDLE; + if (!window_filter() && !opts.sharpness) return VK_NULL_HANDLE; if (!src || !image || !sw || !sh || !dw || !dh) return VK_NULL_HANDLE; if (crop && crop[2] > 0 && crop[3] > 0 && (crop[0] < 0 || crop[1] < 0 || (uint32_t)crop[0] >= sw || (uint32_t)crop[1] >= sh)) return VK_NULL_HANDLE; @@ -409,14 +409,14 @@ VkImage framegen_scale(VkCommandBuffer cmd, VkImageView src, VkImage image, uint scale.scaled_w = dw, scale.scaled_h = dh; to_general(cmd, scale.scaled.image); } - const struct { int mode; float sharp; } pc{opts.upscale, opts.sharpness / 100.0f}; + const struct { int mode; float sharp; } pc{window_filter(), opts.sharpness / 100.0f}; pass(cmd, scale.pipe, {{src, scale.linear}, {scale.scaled.view, VK_NULL_HANDLE}}, dw, dh, &pc, sizeof pc); static const bool report = getenv("RX_VK_UPSCALE_LOG") != nullptr; static bool reported = false; if (report && !reported) { reported = true; logf("vk: upscale dispatched: mode %d, sharpness %d, source %ux%u, crop request %d,%d %dx%d, destination %ux%u", - opts.upscale, opts.sharpness, sw, sh, crop ? crop[0] : 0, crop ? crop[1] : 0, + window_filter(), opts.sharpness, sw, sh, crop ? crop[0] : 0, crop ? crop[1] : 0, crop ? crop[2] : (int)sw, crop ? crop[3] : (int)sh, dw, dh); } return scale.scaled.image; diff --git a/gpu/vk/vk_fsr3fi.cpp b/gpu/vk/vk_fsr3fi.cpp index 857906391..05c884943 100644 --- a/gpu/vk/vk_fsr3fi.cpp +++ b/gpu/vk/vk_fsr3fi.cpp @@ -17,6 +17,7 @@ #include #include "vk_fsr3fi.h" +#include "vk_menu.h" // (the Insert menu's "Made frames by" row) #include "vk_gprof.h" // (RX_VK_PASS_TIMING: a span per pass, so the report names them) #include "shaders/fsr3_fi_disocclusion_mask_comp_spv.h" @@ -317,10 +318,17 @@ constexpr VkImageSubresourceRange ALL_LEVELS{VK_IMAGE_ASPECT_COLOR_BIT, 0, VK_RE /// game's. Off is the default and costs nothing: nothing below runs and nothing is logged. uint32_t asked() { static const uint32_t n = []() -> uint32_t { - const char* e = getenv("RX_VK_FSR_FG"); - if (!e || !*e) return 0; - const int v = atoi(e); - return v <= 0 ? 0u : (uint32_t)std::min(v, (int)kMaxMade); + if (const char* e = getenv("RX_VK_FSR_FG"); e && *e) { + const int v = atoi(e); + return v <= 0 ? 0u : (uint32_t)std::min(v, (int)kMaxMade); + } + // Otherwise the Insert menu: "Made frames by" picks FSR, and "Frame generation" says how + // many frames there are to make -- one fewer than the multiplier, since the last of each + // set is the game's own frame. The same shape dlssg uses, so the two rows mean one thing. + // The native "Frame generation" row is the whole setting: a player says how many frames + // to make, not which library makes them. Both backends are asked, and vk_framegen.cpp + // tries DLSS first, this second, and keeps its own blend for what neither takes. + return (uint32_t)std::clamp(opts.framegen - 1, 0, (int)kMaxMade); }(); return n; } diff --git a/gpu/vk/vk_menu.cpp b/gpu/vk/vk_menu.cpp index c66c70b1a..966e8f803 100644 --- a/gpu/vk/vk_menu.cpp +++ b/gpu/vk/vk_menu.cpp @@ -14,6 +14,8 @@ #include "vk_paths.h" #include "vk_menu.h" + +#include "vk_dlss.h" // (built_with_sdk: whether this build can offer DLSS at all) #include "vk_work.h" // (after the others: counts the commands that do GPU work, for full_barrier) #ifndef HOOKSHOT_VERSION // (nx2/build.py gives it to this file: nx2/version.py) #define HOOKSHOT_VERSION "unknown" @@ -46,14 +48,6 @@ const char* tx_framegen(int v) { return t[v]; } const char* tx_onoff(int v) { return v ? "On" : "Off"; } -const char* tx_scene_upscaler(int v) { - static const char* t[] = {"The game's own", "FSR 3.1", "DLSS"}; - return t[v]; -} -const char* tx_framegen_by(int v) { - static const char* t[] = {"Renderer", "DLSS"}; - return t[v]; -} const char* tx_mousecam(int v) { return v ? "Native" : "As the stick"; } const char* tx_sens(int v) { static char b[12]; @@ -61,7 +55,11 @@ const char* tx_sens(int v) { return b; } const char* tx_upscale(int v) { - static const char* t[] = {"Off", "Catmull-Rom", "Lanczos"}; + // (hookshot) The first three scale the finished picture to the window; the last two resolve the + // 3D scene itself, in the game's own upscaler's place. One row because to a player it is one + // question -- what makes the picture bigger -- and because a second row asking it again is how + // you end up with two settings that can disagree. + static const char* t[] = {"Off", "Catmull-Rom", "Lanczos", "FSR 3.1", "DLSS"}; if ((unsigned)v >= sizeof t / sizeof t[0]) return t[0]; // (a setting past the row: the label, not the next bytes) return t[v]; } @@ -176,15 +174,10 @@ Row rows[] = { "Fills the whole screen with the game, without the window's border. The same as F11."}, {TAB_GRAPHICS, "GPU device", &opts.gpu_device, 0, 8, 1, tx_gpu, "Selects which graphics card Vulkan uses. Auto picks the best dedicated GPU. Applies after restart."}, - {TAB_GRAPHICS, "Scene upscaler", &opts.scene_upscaler, 0, 2, 1, tx_scene_upscaler, - "Which network resolves the 3D scene to its full size. The game's own is what it shipped with. FSR 3.1 runs anywhere; " - "DLSS needs an NVIDIA card, its runtime beside the game, and a build made with the NGX SDK. Applies after a restart."}, - {TAB_GRAPHICS, "Made frames by", &opts.framegen_by, 0, 1, 1, tx_framegen_by, - "What makes the frames between the game's own. Renderer blends the last two. DLSS uses the scene's depth and motion and " - "the same requirements as DLSS upscaling; where it cannot run, the renderer's own takes over. Applies after a restart."}, {TAB_GRAPHICS, "Frame generation", &opts.framegen, 0, 8, 1, tx_framegen, - "Makes extra frames between the game's own (2x up to 8x), for smoother motion. Adds a little input delay, and fast motion or camera cuts " - "can show artifacts."}, + "Makes extra frames between the game's own (2x up to 8x), for smoother motion. Uses DLSS or FSR 3 where the card and " + "the build allow it, and the renderer's own blend otherwise -- you do not pick. Adds a little input delay, and fast " + "motion or camera cuts can show artifacts."}, {TAB_GRAPHICS, "Frame pacing", &opts.pace, 0, 1, 1, tx_onoff, "Shows each frame at an even interval instead of as soon as it is ready. Less stutter, at up to one frame of delay."}, {TAB_GRAPHICS, "Resolution", &opts.resolution, 0, 4, 1, tx_resolution, @@ -193,8 +186,10 @@ Row rows[] = { {TAB_GRAPHICS, "Output resolution", &opts.output_res, 0, 2, 1, tx_output_res, "The size the game draws its whole frame at, HUD included, before it is scaled to your window. The 3D is drawn at the " "Resolution percentage of it. Docked only. Applies after a restart."}, - {TAB_GRAPHICS, "Upscaling", &opts.upscale, 0, 2, 1, tx_upscale, - "The filter that scales the picture to your window. Off is the plain copy. Catmull-Rom is sharper, Lanczos sharper still."}, + {TAB_GRAPHICS, "Upscaling", &opts.upscale, 0, 4, 1, tx_upscale, + "What makes the picture bigger. Off, Catmull-Rom and Lanczos are filters over the finished frame. FSR 3.1 and DLSS " + "resolve the 3D scene itself from the game's own render size, which is sharper; DLSS needs an NVIDIA card and its " + "runtime beside the game. Applies after a restart."}, {TAB_GRAPHICS, "Sharpness", &opts.sharpness, 0, 100, 10, tx_percent, "Sharpens the picture as it goes to the window, with or without an upscaling filter. Too much shows halos around edges."}, {TAB_GRAPHICS, "Handheld profile", &opts.handheld, 0, 1, 1, tx_handheld, @@ -825,6 +820,13 @@ void menu_init() { static bool done; if (done) return; done = true; + // (hookshot) A build with no NGX SDK cannot do DLSS at all -- the half that calls it is not + // compiled in -- so the row must not offer it. Every released build is such a build: CI has no + // NVIDIA SDK and none may be committed (CONTRIBUTING.md), and a setting that silently does + // nothing is worse than one that is not there. FSR needs nothing and is always offered. + if (!dlss::built_with_sdk()) + for (Row& r : rows) + if (r.value == &opts.upscale) r.hi = 3; bool has_options = false; if (FILE* f = fopen(ini_path().c_str(), "r")) { has_options = true; diff --git a/gpu/vk/vk_menu.h b/gpu/vk/vk_menu.h index 470ba8c71..7ef81d5c8 100644 --- a/gpu/vk/vk_menu.h +++ b/gpu/vk/vk_menu.h @@ -31,14 +31,21 @@ struct Options { int preset = 0; // quality preset: 0 Custom, 1 Minimum (4GB), 2 Low (6GB), 3 Balanced (8GB), 4 High (12GB), 5 Ultra (16GB+) int vram_mb = 0; // dynamic texture cache budget limit in MB int mirror_mb = 0; // staging mirror limit in MB - // (hookshot) Which network resolves the scene, and which one makes the frames between the - // game's. Both are read once, at the first frame that needs them, so a change applies after a - // restart -- as the GPU device row already does. The RX_VK_* switches still win where they are - // set, so a test run is not at the mercy of a saved ini. - int scene_upscaler = 0; // 0 the game's own network, 1 FSR 3.1, 2 DLSS (gpu/vk/upscale_seam.h) - int framegen_by = 0; // 0 the renderer's own interpolation, 1 DLSS frame generation }; extern Options opts; + +// (hookshot) The Upscaling row carries two different things under one question a player can answer: +// 0-2 are filters over the finished picture, 3 and 4 are a backend resolving the 3D scene itself in +// the game's own upscaler's place. These two say which is meant, so no caller has to know the +// encoding -- and so a scene upscaler never reaches the window filter's shader as a mode it does +// not have. +inline int window_filter() { + return opts.upscale >= 0 && opts.upscale <= 2 ? opts.upscale : 0; +} +/// 0 none (the game's own network), 1 FSR 3.1, 2 DLSS. +inline int scene_upscaler() { + return opts.upscale >= 3 ? opts.upscale - 2 : 0; +} /// (vk_memory.cpp) true when the quality preset's memory budgets (vram_mb, mirror_mb) are to be used: the card has no more /// video memory than the preset is for. A 4GB preset on an 8 GB card kept 256 MB of mirrors and 2.2 GB of textures: the /// game's memory was read over PCIe and the textures made again every frame, 5 fps with the CPU idle (Discord, 11-08) diff --git a/gpu/vk/vk_replay.cpp b/gpu/vk/vk_replay.cpp index 9bdee7e3e..f33f8a99f 100644 --- a/gpu/vk/vk_replay.cpp +++ b/gpu/vk/vk_replay.cpp @@ -2508,7 +2508,7 @@ void do_present(const nvn_tex* t, const int crop[4]) { t ? t->d.width : 0, t ? t->d.height : 0, t ? t->d.format : 0, tex ? (tex->gpu_written ? "rendered" : "never rendered") : "no image"); if (tex) src = tex->image, sw = tex->width, sh = tex->height; - if (tex && !dev.offscreen && (opts.upscale || opts.sharpness)) { + if (tex && !dev.offscreen && (window_filter() || opts.sharpness)) { // Keep the sampled view with the same cached image as the direct present, before advancing its age. direct_view = texture_view(tex, t, nullptr, VK_IMAGE_VIEW_TYPE_2D, ViewUse::Sample); tex->last_frame = texture_frame_no(); From c87ca37ef9fb0bcac31ef0f9daddb05175ab5424 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 9 Nov 2026 15:06:34 +0000 Subject: [PATCH 055/119] chore(release): 2.2.0 [skip ci] [skip release] ## [2.2.0](https://github.com/notquiteog/Hookshot/compare/v2.1.1...v2.2.0) (2026-11-09) ### Features * the upscalers and frame generation are the native settings, not new rows ([a0ce7de](https://github.com/notquiteog/Hookshot/commit/a0ce7de16826b5cba5192e18be5088a3cc2fa1d9)) * **vk:** reland the mesh shader fallback for GPUs without mesh shaders ([#640](https://github.com/notquiteog/Hookshot/issues/640)) ([07773ab](https://github.com/notquiteog/Hookshot/commit/07773abd1dc7d79d56a690207e9bc7db7272076d)) ### Bug Fixes * **builder:** Linux builder from the Actions tab builds without updating to the release first ([2c6df08](https://github.com/notquiteog/Hookshot/commit/2c6df08fa7eb3b69f4656eb0744e9db9930186fe)), closes [#902](https://github.com/notquiteog/Hookshot/issues/902) * **build:** preserve compiler failures without stderr ([a65391b](https://github.com/notquiteog/Hookshot/commit/a65391be5503996ebc1e417886f0429a71429ea4)) * keep register markers clear of native operands ([add0937](https://github.com/notquiteog/Hookshot/commit/add093762dcba75ac7013d265ee1d57999baf343)) * lower direct 1D surface atomic add ([15652af](https://github.com/notquiteog/Hookshot/commit/15652afe14c87641bbeccc02b3946c28c40ad06e)) * preserve the changelog when release generation fails ([b03a181](https://github.com/notquiteog/Hookshot/commit/b03a181088f1c2752ad6034dc8325fcd03ee005d)) * **video:** a new decoder image pool holds black, not zeros (one green frame at each scene change that opens a movie) ([67451f4](https://github.com/notquiteog/Hookshot/commit/67451f4e8228cfccfacfabf92672262fdf69323c)) * **vk:** keep background shader threads out of the replay's uniform update list ([400caf1](https://github.com/notquiteog/Hookshot/commit/400caf1fd36f24b7f041a4cd3e012a048b7cae61)) * **vk:** keep every large ASTC texture as BC3 on 8 GB cards too ([6553378](https://github.com/notquiteog/Hookshot/commit/6553378aa0ef4ef6d356f23f92e2b74fac4a63c9)) * **vk:** leave out task and mesh stages only for fallback programs ([aec016f](https://github.com/notquiteog/Hookshot/commit/aec016f79386edb73d24b24960853e040a98d309)) * **vk:** let dead transient targets go after 3 frames, not 16 ([9349f7f](https://github.com/notquiteog/Hookshot/commit/9349f7fa665fdb8dbad4320dff2f37f3d40da278)) * **vk:** let go of render targets drawn over from another start ([5bfa6aa](https://github.com/notquiteog/Hookshot/commit/5bfa6aa2fd947a2542eaddb88abc7e6940110160)) * **vk:** report a driver fault in a pipeline compile on Linux ([2079b41](https://github.com/notquiteog/Hookshot/commit/2079b41fec8aa3b153299cc545cf13fc02cdaf8f)) * **vk:** say in the log when the guard drops a pipeline ([0560ecb](https://github.com/notquiteog/Hookshot/commit/0560ecb604826c1fa89620e546a6b5b934ed7e26)) * **vk:** send the precompile compute worker through the guard ([ff95e92](https://github.com/notquiteog/Hookshot/commit/ff95e92e88b54f61b962257df02f99ccd9d6bb14)), closes [#758](https://github.com/notquiteog/Hookshot/issues/758) * **vk:** shorten the rendered-texture keep near the VRAM limit on AMD too ([2d98dcc](https://github.com/notquiteog/Hookshot/commit/2d98dccb71e65925852d5853b9ea02f53a6d3912)) ### Performance Improvements * coalesce contiguous captured mirror copies ([615d027](https://github.com/notquiteog/Hookshot/commit/615d0277b4421a8f99ed9a85950540602f1d6a40)) * **nvn:** QueueSubmitCommands gives up its virtual core for the inline replay, as Present and AcquireTexture do ([ca50be6](https://github.com/notquiteog/Hookshot/commit/ca50be6aa9f549fe21fa2ef1fa8b82e212ba2056)) * **vk:** memory_collect_written takes the captured ranges once a submit, not a lock and a pool-list refresh per dirty page ([6769b74](https://github.com/notquiteog/Hookshot/commit/6769b742173a934dc5943897f82967d145105aa1)) --- changelog.txt | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/changelog.txt b/changelog.txt index 4c0a5c9f2..4e3f5348b 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,30 @@ --------------------------------------------------------------------------------------------------- +Version: 2.2.0 +Date: 09. 11. 2026 + Features: + - The upscalers and frame generation are the native settings, not new rows. + - Vk: Reland the mesh shader fallback for GPUs without mesh shaders (#640). + Bugfixes: + - Vk: Send the precompile compute worker through the guard. + - Vk: Say in the log when the guard drops a pipeline. + - Vk: Report a driver fault in a pipeline compile on Linux. + - Vk: Keep background shader threads out of the replay's uniform update list. + - Vk: Keep every large ASTC texture as BC3 on 8 GB cards too. + - Vk: Shorten the rendered-texture keep near the VRAM limit on AMD too. + - Vk: Let dead transient targets go after 3 frames, not 16. + - Builder: Linux builder from the Actions tab builds without updating to the release first. + - Vk: Let go of render targets drawn over from another start. + - Lower direct 1D surface atomic add. + - Video: A new decoder image pool holds black, not zeros (one green frame at each scene change that opens a movie). + - Build: Preserve compiler failures without stderr. + - Vk: Leave out task and mesh stages only for fallback programs. + - Keep register markers clear of native operands. + - Preserve the changelog when release generation fails. + Optimizations: + - Coalesce contiguous captured mirror copies. + - Nvn: QueueSubmitCommands gives up its virtual core for the inline replay, as Present and AcquireTexture do. + - Vk: Memory_collect_written takes the captured ranges once a submit, not a lock and a pool-list refresh per dirty page. +--------------------------------------------------------------------------------------------------- Version: 2.1.1 Date: 09. 11. 2026 Bugfixes: From e7806a29fe830ca4a3deb84274915624c09baed6 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 09:10:21 -0600 Subject: [PATCH 056/119] docs: the settings a player sees are the two rows that were already there Co-Authored-By: Claude Opus 5 --- docs/upscaling.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/docs/upscaling.md b/docs/upscaling.md index 0a3595658..8470f7f4a 100644 --- a/docs/upscaling.md +++ b/docs/upscaling.md @@ -411,6 +411,31 @@ and the offset is handed to both backends so they can undo it. `RX_VK_JITTER=0` upscaler still on, which is the comparison worth having; the sign convention is the thing to check first if the image looks wrong, because a wrong sign there is soft or shimmering rather than broken. +## The settings a player actually sees + +None of this has a switch of its own in the menu. It is the two rows that were already there, which +is the point: a player asking "what makes the picture bigger" should find one answer, not a filter +row and a second row that can disagree with it. + +**Upscaling** carries five values. `Off`, `Catmull-Rom` and `Lanczos` are filters over the finished +picture, exactly as before. `FSR 3.1` and `DLSS` instead resolve the 3D scene itself, in the place +of the game's own upscaler. `window_filter()` and `scene_upscaler()` in `gpu/vk/vk_menu.h` say which +half a caller means, so the filter's shader is never handed a mode it does not have. + +**Frame generation** stays what it was: how many frames to make between the game's own, 2x to 8x. It +does not ask which library makes them. Both backends are asked whenever it is on, and +`framegen_record` tries DLSS, then FSR 3, then its own colour blend -- so the setting means the same +thing on every machine, and a card that cannot do one of them simply gets the next. + +**A build with no NGX SDK does not offer DLSS at all.** `dlss::built_with_sdk()` is a compile-time +fact, and `menu_init` clamps the Upscaling row to stop at FSR 3.1 when it is false. Every released +build is such a build: CI has no NVIDIA SDK and none may be committed, so a release that listed DLSS +would be listing something the binary cannot do. That was shipped once, in v2.1.0, and this is the +fix. + +The `RX_VK_*` switches still win wherever they are set, so a test run is never at the mercy of a +saved ini. + ## Neural rendering on AMD: the answer is the game's own network, not FSR 4 The obvious reading of "neural rendering on AMD" is FSR 4, and FSR 4 is the wrong place to start. From ba448466eac83f38ae451a8e4dab830896e2e2ed Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 09:18:12 -0600 Subject: [PATCH 057/119] test: the Upscaling row's two halves, and the clamp that hides DLSS The row carries filters at 0-2 and scene upscalers at 3-4, and the filter's shader takes a mode of 0..2 -- so a consumer reading opts.upscale raw would hand it a 3 and corrupt the picture rather than do nothing. The test compiles the real accessors (extracted, not retyped), checks the mapping both ways including a value from an older or newer ini, and then checks the three source facts the accessors cannot: the row offers all five values, menu_init clamps it to FSR 3.1 where the build has no NGX SDK, and no consumer reads the raw value again. Verified it fails on the shape it is for, by putting one raw read back and watching it name the file and line. Co-Authored-By: Claude Opus 5 --- tests/test_upscale_setting.py | 100 ++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 tests/test_upscale_setting.py diff --git a/tests/test_upscale_setting.py b/tests/test_upscale_setting.py new file mode 100644 index 000000000..92a61e09b --- /dev/null +++ b/tests/test_upscale_setting.py @@ -0,0 +1,100 @@ +"""The Upscaling row's two halves, and the clamp that hides DLSS from a build that cannot do it. + +The row carries five values: 0-2 are filters over the finished picture and 3-4 name a backend that +resolves the 3D scene instead. Two inline accessors in gpu/vk/vk_menu.h say which half is meant, and +everything that used to read `opts.upscale` raw now goes through them -- because the filter's shader +takes a mode of 0..2 and handing it a 3 would be a setting that corrupts the picture rather than one +that does nothing. + +This compiles the real accessors (extracted, not retyped, so a change to them changes the test) and +checks the mapping both ways. It also checks the source facts the accessors cannot: that the row +offers all five values, that menu_init clamps it where the build has no NGX SDK, and that no +consumer reads opts.upscale raw again. + +python -I -B tests/test_upscale_setting.py [--cxx g++] +""" +import argparse +from pathlib import Path +import subprocess +import tempfile + +ROOT = Path(__file__).resolve().parents[1] + + +def block(text, marker): + """The function beginning at marker, braces balanced.""" + if marker not in text: + raise SystemExit(f"{marker!r} is gone: this test no longer checks what it says it does") + start = text.index(marker) + end = text.index("{", start) + 1 + depth = 1 + while depth: + depth += (text[end] == "{") - (text[end] == "}") + end += 1 + return text[start:end] + + +PROGRAM = r''' +#include +static int failures; +#define CHECK(c) do { if (!(c)) { std::printf("FAIL: %%s\n", #c); ++failures; } } while (0) +struct Options { int upscale = 0; }; +static Options opts; +%s + +%s + +int main() { + // the three filter values pass through untouched + for (int v = 0; v <= 2; v++) { opts.upscale = v; CHECK(window_filter() == v); CHECK(scene_upscaler() == 0); } + // the two scene upscalers are not filter modes, and must not reach the filter's shader as one + opts.upscale = 3; CHECK(window_filter() == 0); CHECK(scene_upscaler() == 1); + opts.upscale = 4; CHECK(window_filter() == 0); CHECK(scene_upscaler() == 2); + // a value from an older or newer ini than this build is not a filter mode either + opts.upscale = 99; CHECK(window_filter() == 0); + opts.upscale = -1; CHECK(window_filter() == 0); CHECK(scene_upscaler() == 0); + if (failures) return 1; + std::printf("PASS: the Upscaling row's filter half and scene half stay apart\n"); + return 0; +} +''' + + +def main(): + p = argparse.ArgumentParser(description=__doc__) + p.add_argument("--cxx", default="g++") + a = p.parse_args() + + header = (ROOT / "gpu/vk/vk_menu.h").read_text(encoding="utf-8") + menu = (ROOT / "gpu/vk/vk_menu.cpp").read_text(encoding="utf-8") + + source = PROGRAM % (block(header, "inline int window_filter() {"), + block(header, "inline int scene_upscaler() {")) + with tempfile.TemporaryDirectory(prefix="upscale-setting-") as tmp: + cpp = Path(tmp) / "fixture.cpp" + cpp.write_text(source, encoding="utf-8") + exe = Path(tmp) / "fixture" + subprocess.run([a.cxx, "-std=c++17", "-Wall", "-Wextra", "-Werror", str(cpp), "-o", str(exe)], + check=True) + subprocess.run([str(exe)], check=True) + + # the row itself: all five values on offer, and the clamp for a build that cannot do DLSS + if '"Upscaling", &opts.upscale, 0, 4, 1, tx_upscale' not in menu: + raise SystemExit("the Upscaling row no longer offers 0..4") + if "dlss::built_with_sdk()" not in menu or "r.hi = 3" not in menu: + raise SystemExit("menu_init no longer clamps the row where the build has no NGX SDK") + + # nothing reads the raw value any more, or the filter gets a mode it does not have + raw = [] + for name in ("gpu/vk/vk_framegen.cpp", "gpu/vk/vk_replay.cpp", "gpu/vk/vk_draw.cpp", "gpu/vk/vk_dlss.cpp"): + for n, line in enumerate((ROOT / name).read_text(encoding="utf-8").splitlines(), 1): + if "opts.upscale" in line: + raw.append(f"{name}:{n}: {line.strip()}") + if raw: + raise SystemExit("these read opts.upscale raw instead of window_filter()/scene_upscaler():\n" + + "\n".join(raw)) + print("PASS: the row offers five values, clamps without an SDK, and no consumer reads it raw") + + +if __name__ == "__main__": + main() From c6acc00e124ba6f3e6e400827c6d939c9b2ed53a Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 09:46:44 -0600 Subject: [PATCH 058/119] docs: where the frame actually goes, and why parallel replay makes it worse The frame is CPU-bound in recording: submit is 30-35 ms against ~12 ms of GPU work, so the GPU is idle over half of it. A flat profile (this kernel cannot open perf events with -g, so cpu-clock and no call graphs) puts ~30% of CPU in one libc routine that disassembles to rep movsb -- ERMS memmove -- with spin_until_set and sched_yield adding 5.6%. The memcpy is deliberately left unattributed: without call graphs there is no honest way to name its caller. One guess was checked and was wrong -- ub_read's 4 KB page copy looks wasteful until you find submitted_page_reuse, which is what makes it pay. RX_VK_PARALLEL=4 was the obvious lever and it costs a fifth of the frame rate: 29.9-30.5 fps serial against 23.2-24.4, with submit rising from 30.55 to 38.02 ms. Its own log line says why, and it is not the dry pass (0.34 ms): the workers take one global recursive mutex 739 times per command buffer and wait 3.65 ms on it. ParLock covers textures, uploads, programs, pipelines, samplers, pools and stamps together, and three of its draw-path sites sit inside the per-binding descriptor loop. So the parallel path is serialised, not unsuited. Splitting that lock is the work that would make it pay, and the recursive reentrant use makes it delicate. Co-Authored-By: Claude Opus 5 --- docs/performance.md | 77 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 docs/performance.md diff --git a/docs/performance.md b/docs/performance.md new file mode 100644 index 000000000..4a4654c09 --- /dev/null +++ b/docs/performance.md @@ -0,0 +1,77 @@ +# Where the frame goes + +Measured on Linux, RTX 5060 Ti, driver 615.71.09, headless under Xvfb, Ocarina in Kokiri Forest with +a warmed shader cache, driven there by a frame-clocked `HOS_INPUT_SCRIPT` so that two arms measure +the same place in the game. A frame of ~1800-2800 draws is gameplay; ~5 draws a frame is the title +screen, and comparing one against the other is how this project once blamed FSR for a collapse it +had nothing to do with (`docs/upscaling.md`). + +## The frame is CPU-bound in recording, not on the GPU + +A representative gameplay frame, from `vk: a frame's replay time (ms)`: + +| | ms | +|---|---| +| `submit` (the whole of `run_submit`) | **30.6-35.0** | +| of which `draw` | 7.9-11.0 | +| `programs` | 3.3-4.7 | +| `descriptors` | 2.2-3.1 | +| `commands` | 2.0-2.6 | +| everything else named | < 1 each | +| **GPU time** | **~12** | + +The named sub-counters are subsets of `submit`, and they account for roughly two thirds of it; the +rest is inside `replay_handle` walking the game's command stream. At ~30 fps the frame is ~33 ms, so +the GPU is idle for over half of it. **Recording the commands is the limit, not drawing them.** + +## What the CPU is actually doing + +`perf` on this kernel cannot open events with `-g`, so there are no call graphs; `-e cpu-clock` +(the software event) and a flat profile work. 30 s of a gameplay scene: + +| share | symbol | +|---|---| +| **~30%** | one libc routine, disassembled to `rep movsb` -- ERMS `memmove` | +| 3.5% | `spin_until_set` | +| 2.1% | `__sched_yield` | +| ~1% each | guest code (`f_*`), `renderer_main`, `obj_lookup`, `build_descriptors`, `ub_try_gap` | + +**The memcpy is not attributed.** Without call graphs there is no honest way to say whether it is +guest-memory reads, mirror syncing, staging uploads or the game's own work, and guessing is how the +upscaling work wasted a day. One guess was checked and was wrong: `ub_read` copies a whole 4 KB page +on a read that lands in a captured page, which looks wasteful until you find `submitted_page_reuse` +-- the copy is an investment that pays off because uniform reads cluster on a page. + +## Parallel replay exists, and today it makes things worse + +`RX_VK_PARALLEL=` (default 0, off) walks the command stream once on the replay thread to +find segment boundaries, then records segments of ~160 draws across worker threads, submitted in +order. It was written for Mario Kart World, where one command buffer held nearly a frame's draws. + +Measured against the serial path, same scene: + +| arm | fps | `submit` | +|---|---|---| +| serial | 29.9 / 30.5 / 30.5 | 30.55 ms | +| `RX_VK_PARALLEL=4` | 23.2 / 23.2 / 24.4 | 38.02 ms | + +It costs about a fifth of the frame rate. The reason is in its own log line, and it is not the dry +pass: + +``` +parallel replay, a command buffer: dry pass 0.34 ms, segments 11.22 ms (4.7 of them), + lock taken 739 times, waited for 3.65 ms (all threads) +``` + +The dry pass is 0.34 ms. The workers spend **3.65 ms waiting on a lock they take 739 times** per +command buffer, across 4.7 segments. `ParLock` (gpu/vk/vk_internal.h) is **one global recursive +mutex** over everything the threads share -- textures and their uploads, programs, pipelines, +samplers, pools and memory stamps. Three of its seventeen sites in the draw path are inside +`build_descriptors`' per-binding loop, so the count rises with every texture every draw binds. + +So the parallel path is not slow because parallelism does not suit this game. It is serialised on +one lock, and then pays the coordination on top. Splitting that lock by what it protects is the +work that would make it pay, and it is delicate: the mutex is recursive and taken reentrantly, so +the split has to preserve every nesting order that exists today. + +Until then `RX_VK_PARALLEL` should stay off, which it is. From b8543c9429ea8afd7451756990497a6bb3b253c7 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 09:54:30 -0600 Subject: [PATCH 059/119] feat: the parallel lock says which site took it, and the answer is two sites "Taken 739 times, waited 3.65 ms" could not be acted on. ParLock now counts by file and line through __builtin_FILE/__builtin_LINE, so no call site changed, and the parallel-replay report names the worst six. It costs nothing when parallel replay is off, because ParLock does nothing at all then. Two sites are the whole problem, per command buffer: vk_draw.cpp:1820 taken 352, waited 1.18 ms vk_memory.cpp:2333 taken 250, waited 2.02 ms and the other four together take 140 and wait 0.57 ms. The first is the slow path of a texture touch, reached only when the lock-free texture_touch_quick misses -- so the question is why it misses, not how to make the locked path cheaper. The second takes ParLock before pools_mu, by its own documented ordering rule, and therefore holds the shared-recording lock across the whole pool lookup even when no mirror sync follows. Not fixed here on purpose: the ordering rule exists to stop a deadlock, and reversing it blind is how you get a hang nobody can reproduce. The table says exactly where to look, and the A/B harness that produced it can tell whether a change helped. Co-Authored-By: Claude Opus 5 --- docs/performance.md | 30 ++++++++++++++++++++++++++++++ gpu/vk/vk_internal.h | 22 +++++++++++++++++++--- gpu/vk/vk_replay.cpp | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 3 deletions(-) diff --git a/docs/performance.md b/docs/performance.md index 4a4654c09..c44ecbff8 100644 --- a/docs/performance.md +++ b/docs/performance.md @@ -69,6 +69,36 @@ mutex** over everything the threads share -- textures and their uploads, program samplers, pools and memory stamps. Three of its seventeen sites in the draw path are inside `build_descriptors`' per-binding loop, so the count rises with every texture every draw binds. +### Which sites take it + +`ParLock` counts by file and line now (free when parallel replay is off, since nothing in it runs +then), and the same report names them. Over 240 command buffers, per command buffer: + +| site | taken | waited | +|---|---|---| +| `vk_draw.cpp:1820` | 352 | 1.18 ms | +| **`vk_memory.cpp:2333`** | 250 | **2.02 ms** | +| `vk_draw.cpp:1829` | 56 | 0.16 ms | +| `vk_draw.cpp:3077` | 45 | 0.29 ms | +| `vk_draw.cpp:5243` | 21 | 0.08 ms | +| `vk_draw.cpp:3162` | 18 | 0.04 ms | + +Two sites are the whole problem, and each has a shape worth knowing: + +- **`vk_draw.cpp:1820`** is the slow path of a texture touch: `texture_touch_quick` is lock-free and + the lock is only taken when it misses. 352 misses a command buffer is the cost, so the question is + why the quick path misses so often, not how to make the locked path cheaper. +- **`vk_memory.cpp:2333`** waits the longest. It takes `ParLock` **before** `pools_mu`, and its own + comment says why: always in that order, because a mirror sync records into the shared upload + command buffer. So the lock is held across the whole pool lookup even when no sync follows. The + obvious fix -- take it only when a sync will actually record -- is the one thing that must not be + done casually, because the ordering rule exists to stop a deadlock against whatever takes these + two the other way round. + +So the fix is not "split the lock" in the abstract. It is two specific questions: why +`texture_touch_quick` misses, and whether the `pools_mu` path can resolve a pool without holding the +shared-recording lock. Both are measurable with the harness that produced this table. + So the parallel path is not slow because parallelism does not suit this game. It is serialised on one lock, and then pays the coordination on top. Splitting that lock by what it protects is the work that would make it pay, and it is delicate: the mutex is recursive and taken reentrantly, so diff --git a/gpu/vk/vk_internal.h b/gpu/vk/vk_internal.h index fbe3aae76..a9eff7427 100644 --- a/gpu/vk/vk_internal.h +++ b/gpu/vk/vk_internal.h @@ -120,15 +120,31 @@ extern std::atomic par_active; extern std::atomic par_lock_wait_ns, par_locks; // (contention: the time threads waited for it) std::recursive_mutex& par_mutex(); int64_t par_now_ns(); +/// (hookshot) Which site took the lock, and how long it waited there. The report says the threads +/// take this lock hundreds of times per command buffer and wait milliseconds on it, which is why +/// parallel replay is slower than the serial path -- but "739 times somewhere" cannot be acted on. +/// Counted by file and line, with no call site changed, so the next question (which of the +/// seventeen sites) has an answer. Free when parallel replay is off, because nothing below runs. +void par_lock_seen(const char* file, int line, int64_t waited_ns); +/// The sites that took it most since the last report, worst first; logged with the parallel line. +void par_sites_report(); + struct ParLock { bool on; - explicit ParLock(bool want = true) : on(want && par_active.load(std::memory_order_relaxed)) { + explicit ParLock(bool want = true, const char* file = __builtin_FILE(), + int line = __builtin_LINE()) + : on(want && par_active.load(std::memory_order_relaxed)) { if (!on) return; par_locks.fetch_add(1, std::memory_order_relaxed); - if (par_mutex().try_lock()) return; + if (par_mutex().try_lock()) { + par_lock_seen(file, line, 0); + return; + } const int64_t t0 = par_now_ns(); par_mutex().lock(); - par_lock_wait_ns.fetch_add(par_now_ns() - t0, std::memory_order_relaxed); + const int64_t waited = par_now_ns() - t0; + par_lock_wait_ns.fetch_add(waited, std::memory_order_relaxed); + par_lock_seen(file, line, waited); } ~ParLock() { if (on) par_mutex().unlock(); diff --git a/gpu/vk/vk_replay.cpp b/gpu/vk/vk_replay.cpp index 8e652bc00..c15632094 100644 --- a/gpu/vk/vk_replay.cpp +++ b/gpu/vk/vk_replay.cpp @@ -1467,6 +1467,7 @@ const uint8_t* replay_handle(VkCommandBuffer& cmd, const uint8_t* h, bool may_st if (++timed % 240 == 0) { logf("vk: parallel replay, a command buffer: dry pass %.2f ms, segments %.2f ms (%.1f of them), lock taken %.0f " "times, waited for %.2f ms (all threads)", dry_ms / 240, seg_ms / 240, segs_n / 240, locks_n / 240, wait_ms / 240); + par_sites_report(); dry_ms = seg_ms = segs_n = wait_ms = locks_n = 0; } // what follows, after them all (the uniform updates are written to guest memory at the submission's end) @@ -3580,6 +3581,39 @@ void fill_replay_table(MkwVkRenderer& t) { std::atomic par_active{false}; std::atomic par_lock_wait_ns{0}, par_locks{0}; + +/// (hookshot) Per-site lock counts, for the report below. A plain array under the same mutex the +/// caller already holds: this is only reached while the lock is taken, so it needs no lock of its +/// own, and parallel replay is off by default so it costs nothing in a normal run. +struct ParSite { + const char* file = nullptr; + int line = 0; + int64_t taken = 0, waited_ns = 0; +}; +ParSite par_sites[64]; +void par_lock_seen(const char* file, int line, int64_t waited_ns) { + for (ParSite& s : par_sites) { + if (s.file == nullptr) { s.file = file, s.line = line; } + else if (s.file != file || s.line != line) continue; + s.taken++, s.waited_ns += waited_ns; + return; + } +} + +/// The sites that took it most since the last report, worst first. +void par_sites_report() { + ParSite* order[64]; + int n = 0; + for (ParSite& s : par_sites) + if (s.file && s.taken) order[n++] = &s; + std::sort(order, order + n, [](const ParSite* a, const ParSite* b) { return a->taken > b->taken; }); + for (int i = 0; i < n && i < 6; i++) { + const char* slash = strrchr(order[i]->file, '/'); + logf("vk: lock %s:%d taken %lld times, waited %.2f ms", slash ? slash + 1 : order[i]->file, + order[i]->line, (long long)order[i]->taken, order[i]->waited_ns / 1e6); + } + for (ParSite& s : par_sites) s.taken = 0, s.waited_ns = 0; +} std::recursive_mutex& par_mutex() { return par_mu; } From 8a37a76c9c0cd5a1f9eda8d1ac03421759fef5aa Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 9 Nov 2026 15:54:52 +0000 Subject: [PATCH 060/119] chore(release): 2.3.0 [skip ci] [skip release] ## [2.3.0](https://github.com/notquiteog/Hookshot/compare/v2.2.0...v2.3.0) (2026-11-09) ### Features * the parallel lock says which site took it, and the answer is two sites ([b8543c9](https://github.com/notquiteog/Hookshot/commit/b8543c9429ea8afd7451756990497a6bb3b253c7)) --- changelog.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/changelog.txt b/changelog.txt index 4e3f5348b..5fdf97595 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,9 @@ --------------------------------------------------------------------------------------------------- +Version: 2.3.0 +Date: 09. 11. 2026 + Features: + - The parallel lock says which site took it, and the answer is two sites. +--------------------------------------------------------------------------------------------------- Version: 2.2.0 Date: 09. 11. 2026 Features: From dd8465ff3a2367f152b30f86124858ae49f8f30f Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 9 Nov 2026 16:19:23 +0000 Subject: [PATCH 061/119] chore(release): 2.3.1 [skip ci] [skip release] ## [2.3.1](https://github.com/notquiteog/Hookshot/compare/v2.3.0...v2.3.1) (2026-11-09) ### Bug Fixes * an rc AppImage launch keeps the tools it shipped with ([58c05db](https://github.com/notquiteog/Hookshot/commit/58c05db58f823af3bbcebdd505e1408768d9b62d)) * **build:** keep compile memory reservations per invocation ([c4a4d05](https://github.com/notquiteog/Hookshot/commit/c4a4d05311607f4ec50a5dfaa6759e6e2258c2bd)), closes [#1029](https://github.com/notquiteog/Hookshot/issues/1029) * escape $, backtick and backslash in the menu entry's Exec path as the Desktop Entry spec says ([4b41d55](https://github.com/notquiteog/Hookshot/commit/4b41d55b5054190dd8aa88d2353bf40483ae8afa)) * **launcher:** the folder launcher looks for the installed builder under HOOKSHOT_BUILDER_HOME/hookshot/builder ([d9244c8](https://github.com/notquiteog/Hookshot/commit/d9244c8656046b94fcbba6ea5a16b8b99ea8298a)) * **linux:** include the shared inventory header in AppImage sources ([e9f4f41](https://github.com/notquiteog/Hookshot/commit/e9f4f411b2735421a5e812eed936bc6f7889c8de)) * retry the exact failed compile job ([502544b](https://github.com/notquiteog/Hookshot/commit/502544b0ed45a09f499088479aa380a634e8d96d)) --- changelog.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/changelog.txt b/changelog.txt index 5fdf97595..968bb62a6 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,14 @@ --------------------------------------------------------------------------------------------------- +Version: 2.3.1 +Date: 09. 11. 2026 + Bugfixes: + - Launcher: The folder launcher looks for the installed builder under HOOKSHOT_BUILDER_HOME/hookshot/builder. + - Escape $, backtick and backslash in the menu entry's Exec path as the Desktop Entry spec says. + - Retry the exact failed compile job. + - Build: Keep compile memory reservations per invocation. + - An rc AppImage launch keeps the tools it shipped with. + - Linux: Include the shared inventory header in AppImage sources. +--------------------------------------------------------------------------------------------------- Version: 2.3.0 Date: 09. 11. 2026 Features: From 614f552c3408b7bb6fdc68f18d5649a85a8f4c56 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 10:26:33 -0600 Subject: [PATCH 062/119] feat: the two lock sites say why they had to take it The attribution said which sites; this says why, and the answer changes what is worth doing. Per command buffer under parallel replay: pool lock: 160 written, 0 cache miss, 202 mirror texture touch: 0 upload, 325 epoch, 0 not uploaded So the thread-local pool cache never misses -- the lock-free path works -- and every texture-touch miss is the once-an-epoch check, which is one lock per distinct sampled texture per epoch and inherent to what that check is for. Neither site is spinning on a lock it did not need; both are doing real shared work. That is a different problem from the one 'taken 739 times' suggested. Counters only, each read-and-reset into the existing parallel-replay report, and all of it free when parallel replay is off because the site is never reached. Co-Authored-By: Claude Opus 5 --- gpu/vk/vk_internal.h | 3 +++ gpu/vk/vk_memory.cpp | 19 +++++++++++++++++++ gpu/vk/vk_replay.cpp | 9 +++++++++ gpu/vk/vk_texture.cpp | 21 +++++++++++++++++++-- gpu/vk/vk_texture.h | 4 ++++ 5 files changed, 54 insertions(+), 2 deletions(-) diff --git a/gpu/vk/vk_internal.h b/gpu/vk/vk_internal.h index 9b81be789..254ab0fd8 100644 --- a/gpu/vk/vk_internal.h +++ b/gpu/vk/vk_internal.h @@ -160,6 +160,9 @@ struct ParLock { ParLock(const ParLock&) = delete; ParLock& operator=(const ParLock&) = delete; }; +/// (diagnostics) Why bindings had to take ParLock in the pool lookup, and reset: a written binding, +/// a thread-cache miss, or the mirror state. Each wants a different fix, so they are counted apart. +void memory_pool_lock_reasons(int64_t* written, int64_t* cache_miss, int64_t* mirror); void memory_pool_created(uint64_t gpu, uint64_t size); /// Whether guest memory in [lo, hi) is in an imported pool, live or retired (the GPU may read or write it) int memory_guest_imported(uint64_t lo, uint64_t hi); diff --git a/gpu/vk/vk_memory.cpp b/gpu/vk/vk_memory.cpp index 01aeb9f12..f97615c45 100644 --- a/gpu/vk/vk_memory.cpp +++ b/gpu/vk/vk_memory.cpp @@ -91,6 +91,10 @@ struct SrwMutex { // (a slim reader/writer lock: half std::mutex's cost, taken void unlock() { ReleaseSRWLockExclusive(&l); } }; SrwMutex pools_mu; +/// (hookshot, diagnostics) Why a binding had to take the lock: a written binding (the lock-free path +/// serves reads only), this thread's cached pool not matching, or the mirror state needing a +/// decision. memory_pool_lock_reasons() reads and resets them. +std::atomic pool_lock_written{0}, pool_lock_cache_miss{0}, pool_lock_mirror{0}; uint32_t generation = ~0u; uint64_t align = 4096; uint64_t max_import_size = UINT64_MAX; @@ -2462,6 +2466,13 @@ BufferRef gpu_buffer_bind(uint64_t gpu, uint64_t size, bool written) { if (p->mstate == Pool::MIRROR_ON && p->synced_epoch == mirror_epoch && p->sync_seg <= texture_segment()) return remember({p->mirror, off, size, 0}); } + // (hookshot, diagnostics) Why the lock-free path above did not answer. It is the costliest + // ParLock site in the renderer -- 250 locks and 2 ms of waiting a command buffer under + // parallel replay -- and the three reasons want different fixes, so they are counted apart. + (written ? pool_lock_written : (!tl.p || tl.gen != pools_gen.load(std::memory_order_relaxed)) + ? pool_lock_cache_miss + : pool_lock_mirror) + .fetch_add(1, std::memory_order_relaxed); ParLock plk; // (before pools_mu, always: a mirror sync records into the shared upload command buffer) std::lock_guard lk(pools_mu); Pool* p = pool_of(guest, size); @@ -3294,3 +3305,11 @@ void memory_stats(int64_t* mirrors, uint64_t* mirror_mb, int64_t* sync_bytes, in *wb_bytes = st_wb_bytes; } } // namespace mkwvk + +namespace mkwvk { +void memory_pool_lock_reasons(int64_t* written, int64_t* cache_miss, int64_t* mirror) { + *written = pool_lock_written.exchange(0, std::memory_order_relaxed); + *cache_miss = pool_lock_cache_miss.exchange(0, std::memory_order_relaxed); + *mirror = pool_lock_mirror.exchange(0, std::memory_order_relaxed); +} +} diff --git a/gpu/vk/vk_replay.cpp b/gpu/vk/vk_replay.cpp index bb03205cf..09428944e 100644 --- a/gpu/vk/vk_replay.cpp +++ b/gpu/vk/vk_replay.cpp @@ -1515,6 +1515,15 @@ const uint8_t* replay_handle(VkCommandBuffer& cmd, const uint8_t* h, bool may_st logf("vk: parallel replay, a command buffer: dry pass %.2f ms, segments %.2f ms (%.1f of them), lock taken %.0f " "times, waited for %.2f ms (all threads)", dry_ms / 240, seg_ms / 240, segs_n / 240, locks_n / 240, wait_ms / 240); par_sites_report(); + { // (hookshot) why the two busiest sites had to take it, which is what decides the fix + int64_t w = 0, cm = 0, mi = 0, tu = 0, te = 0, tun = 0; + memory_pool_lock_reasons(&w, &cm, &mi); + texture_touch_misses(&tu, &te, &tun); + logf("vk: pool lock: %lld written, %lld cache miss, %lld mirror; texture touch: %lld upload, " + "%lld epoch, %lld not uploaded (per command buffer)", + (long long)(w / 240), (long long)(cm / 240), (long long)(mi / 240), (long long)(tu / 240), + (long long)(te / 240), (long long)(tun / 240)); + } dry_ms = seg_ms = segs_n = wait_ms = locks_n = 0; } // what follows, after them all (the uniform updates are written to guest memory at the submission's end) diff --git a/gpu/vk/vk_texture.cpp b/gpu/vk/vk_texture.cpp index e5a6da5fb..163cf6262 100644 --- a/gpu/vk/vk_texture.cpp +++ b/gpu/vk/vk_texture.cpp @@ -2612,13 +2612,30 @@ void texture_written(Texture* tex) { } +/// (hookshot, diagnostics) Why the quick path gave up, counted. It is the busiest ParLock site in +/// the renderer (352 locks a command buffer under parallel replay), and "it misses" is not a thing +/// anyone can act on -- whether it is the upload check or the once-an-epoch check decides whether +/// there is anything to win here at all. Read by texture_touch_misses(). +std::atomic touch_miss_upload{0}, touch_miss_epoch{0}, touch_miss_unuploaded{0}; + bool texture_touch_quick(Texture* tex, bool for_sampling) { tex->last_frame = frame_no; // (the same values whichever thread stores them) tex->last_value = rec_value; if (!for_sampling) return true; if (tex->gpu_written && !tex->released && !tex->only_cleared) return true; - if (tex->upload_value == rec_value && tex->upload_seg > tl_seg) return false; - return tex->uploaded && tex->checked_epoch == epoch; + if (tex->upload_value == rec_value && tex->upload_seg > tl_seg) { + touch_miss_upload.fetch_add(1, std::memory_order_relaxed); + return false; + } + if (tex->uploaded && tex->checked_epoch == epoch) return true; + (tex->uploaded ? touch_miss_epoch : touch_miss_unuploaded).fetch_add(1, std::memory_order_relaxed); + return false; +} + +void texture_touch_misses(int64_t* upload, int64_t* epoch_out, int64_t* unuploaded) { + *upload = touch_miss_upload.exchange(0, std::memory_order_relaxed); + *epoch_out = touch_miss_epoch.exchange(0, std::memory_order_relaxed); + *unuploaded = touch_miss_unuploaded.exchange(0, std::memory_order_relaxed); } void texture_gpu_wrote(uint64_t gpu, uint64_t size) { if (!gpu || !size) return; diff --git a/gpu/vk/vk_texture.h b/gpu/vk/vk_texture.h index 13a34265b..04dc366c3 100644 --- a/gpu/vk/vk_texture.h +++ b/gpu/vk/vk_texture.h @@ -108,6 +108,10 @@ Texture* texture_touch(Texture* tex, bool for_sampling); /// texture_touch without the lock where it has nothing more to do (its contents up to date for this submission): /// false when the full texture_touch is needed bool texture_touch_quick(Texture* tex, bool for_sampling); +/// (diagnostics) Why that quick path last gave up, and reset: an upload still in flight, a texture +/// not uploaded at all, or one simply not checked yet this epoch. The last is once per texture per +/// epoch and inherent; the other two are not. +void texture_touch_misses(int64_t* upload, int64_t* epoch, int64_t* unuploaded); /// Whether texture_written and texture_rendered would change nothing this frame (a parallel replay: no lock then) bool texture_marked(const Texture* tex); /// The parallel replay's segment this thread records (its order in the submission; uploads and mirror syncs a later From 4fa79c7de18131b8fe4b908f40d6ee68a369ab0f Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 9 Nov 2026 16:31:01 +0000 Subject: [PATCH 063/119] chore(release): 2.4.0 [skip ci] [skip release] ## [2.4.0](https://github.com/notquiteog/Hookshot/compare/v2.3.1...v2.4.0) (2026-11-09) ### Features * the two lock sites say why they had to take it ([614f552](https://github.com/notquiteog/Hookshot/commit/614f552c3408b7bb6fdc68f18d5649a85a8f4c56)) --- changelog.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/changelog.txt b/changelog.txt index 968bb62a6..6b820862f 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,9 @@ --------------------------------------------------------------------------------------------------- +Version: 2.4.0 +Date: 09. 11. 2026 + Features: + - The two lock sites say why they had to take it. +--------------------------------------------------------------------------------------------------- Version: 2.3.1 Date: 09. 11. 2026 Bugfixes: From d72441ab9097d41a44035988c19486d32192f080 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 10:39:06 -0600 Subject: [PATCH 064/119] fix: a Windows build could ask for DLSS and then fail to link dlss_sdk_link was Linux-only. On Windows a build with the SDK compiled the NGX half and then had every NVSDK_NGX_* symbol undefined at the end of a long compile, which is exactly the platform a player with an NVIDIA card is on. It now finds the SDK's own library under lib/Windows_*, named outright because the layout nests by architecture and a link that silently found nothing is the failure above. The SDK is also found without an environment variable: a folder named `dlss-sdk` beside the tree or in the work folder does it, because the player who wants DLSS is the one building the game, and telling them to set a variable through a double-clicked builder is telling them no. Nothing is downloaded on their behalf and nothing of NVIDIA's enters this repository. The menu said nothing about any of this: the Upscaling row simply stopped one value short, which reads as "this card cannot do DLSS" rather than "this build was made without the SDK". It says which now, and readme.md has the three steps -- including that NVIDIA's runtime (nvngx_dlss.dll, libnvidia-ngx-dlss.so) is theirs to ship and the build will not copy it. test_shader_stamp_cache executes a whitelist of the production helpers that decide an object's key; dlss_sdk_path decides a compile flag, so it is one of them now. Co-Authored-By: Claude Opus 5 --- gpu/vk/vk_menu.cpp | 11 +++++- nx2/build.py | 58 ++++++++++++++++++++++++++------ readme.md | 21 ++++++++++++ tests/test_shader_stamp_cache.py | 3 +- 4 files changed, 81 insertions(+), 12 deletions(-) diff --git a/gpu/vk/vk_menu.cpp b/gpu/vk/vk_menu.cpp index 0575ac77a..7108f8c07 100644 --- a/gpu/vk/vk_menu.cpp +++ b/gpu/vk/vk_menu.cpp @@ -1110,7 +1110,16 @@ void menu_init() { // nothing is worse than one that is not there. FSR needs nothing and is always offered. if (!dlss::built_with_sdk()) for (Row& r : rows) - if (r.value == &opts.upscale) r.hi = 3; + if (r.value == &opts.upscale) { + r.hi = 3; + // Say so where the question is asked. A row that quietly stops one value short + // looks like DLSS is unsupported on the card, when what is missing is the SDK this + // build was made without -- and the player who wants it is the one building. + r.help = "What makes the picture bigger. Off, Catmull-Rom and Lanczos are filters over the finished " + "frame. FSR 3.1 resolves the 3D scene itself from the game's render size, which is sharper. " + "DLSS is not offered: this build was made without NVIDIA's NGX SDK (readme.md says how to " + "build with it). Applies after a restart."; + } bool has_options = false; const char* cheats = getenv("HOS_OOT_CHEATS"); cheats_enabled = cheats && !strcmp(cheats, "1"); diff --git a/nx2/build.py b/nx2/build.py index 83b8ade22..eb31c3967 100644 --- a/nx2/build.py +++ b/nx2/build.py @@ -101,6 +101,30 @@ def check_vk_symbols(so): print(" namespace scope, not inside an anonymous namespace") return False +def dlss_sdk_path(): + """(hookshot) The NGX SDK this build compiles DLSS against, or None. + + RX_VK_DLSS_SDK names it. Failing that, a folder called `dlss-sdk` beside the repository or in + the work folder is used, because the player who wants DLSS builds the game on their own PC and + telling them to set an environment variable through a double-clicked builder is telling them + no. Nothing of NVIDIA's is in this repository and nothing is downloaded on their behalf: the + SDK is their own copy, and a build without one is the build everyone gets today. + """ + named = os.environ.get("RX_VK_DLSS_SDK") + root = os.path.normpath(os.path.join(kit.HERE, "..")) + places = [named] if named else [os.path.join(root, "dlss-sdk"), + os.path.join(os.path.dirname(root), "dlss-sdk"), + os.path.join(os.environ.get("OOT_WORK", ""), "dlss-sdk")] + for d in places: + if d and os.path.isfile(os.path.join(d, "include", "nvsdk_ngx.h")): + return d + if d and os.path.isfile(os.path.join(d, "DLSS", "include", "nvsdk_ngx.h")): + return os.path.join(d, "DLSS") # (the SDK repository cloned whole) + if named: + print("RX_VK_DLSS_SDK=%s has no include/nvsdk_ngx.h; DLSS is left out" % named) + return None + + def dlss_sdk_link(): """(hookshot) What a build with RX_VK_DLSS_SDK= links the DLSS backend against. @@ -111,15 +135,29 @@ def dlss_sdk_link(): library is the builder's own copy, under the path they named, and a build without that path links exactly what it linked before. """ - sdk = os.environ.get("RX_VK_DLSS_SDK") - if not sdk or not LINUX: + sdk = dlss_sdk_path() + if not sdk: return [] - arch = "Linux_aarch64" if platform.machine() in ("aarch64", "arm64") else "Linux_x86_64" - lib = os.path.join(sdk, "lib", arch) - if not os.path.isdir(lib): - print("RX_VK_DLSS_SDK: no %s in %s; DLSS will not link" % (arch, os.path.join(sdk, "lib"))) - return [] - return ["-L" + lib, "-lnvsdk_ngx"] + if LINUX: + arch = "Linux_aarch64" if platform.machine() in ("aarch64", "arm64") else "Linux_x86_64" + lib = os.path.join(sdk, "lib", arch) + if not os.path.isdir(lib): + print("DLSS SDK: no %s in %s; DLSS will not link" % (arch, os.path.join(sdk, "lib"))) + return [] + return ["-L" + lib, "-lnvsdk_ngx"] + # Windows: the SDK ships an import/static library per configuration rather than a .so to -l. + # Named outright because the layout nests by architecture and the name differs by build, and a + # link that silently found nothing would leave every NVSDK_NGX_* symbol undefined at the end of + # a long compile. This was Linux-only before, so a Windows build asked for DLSS, compiled the + # NGX half and then failed to link -- which is exactly what a player on an NVIDIA card hits. + for root, _dirs, files in os.walk(os.path.join(sdk, "lib")): + if "Windows" not in root: + continue + for name in ("nvsdk_ngx_s.lib", "nvsdk_ngx_d.lib"): + if name in files: + return [os.path.join(root, name)] + print("DLSS SDK: no nvsdk_ngx_s.lib under %s; DLSS will not link" % os.path.join(sdk, "lib")) + return [] def target(): @@ -776,8 +814,8 @@ def main(): # against that SDK's headers. Nothing of NVIDIA's is in this repository and nothing of # NVIDIA's may be put in it (CONTRIBUTING.md): the SDK is the builder's own copy, named # here, and a build without it leaves DLSS reporting itself unavailable. - *(["-DRX_VK_DLSS_SDK=1", "-I" + os.path.join(os.environ["RX_VK_DLSS_SDK"], "include")] - if os.environ.get("RX_VK_DLSS_SDK") else []), + *(["-DRX_VK_DLSS_SDK=1", "-I" + os.path.join(dlss_sdk_path(), "include")] + if dlss_sdk_path() else []), # (Eden's recompiler before suyu's root: suyu has its own shader_recompiler/ headers, and a Shader::Info # of the other layout in some objects is what crashed the descriptor walk. MKWVK_INCLUDES changes the # object keys, which leave the include folders out, when this order changes) diff --git a/readme.md b/readme.md index 636384c2c..58a9d2c80 100644 --- a/readme.md +++ b/readme.md @@ -180,6 +180,27 @@ you were in the game, your graphics card, `hookshot_log.txt` and a screenshot or ## In-game menu Press Insert (or F1) in game, or on a controller the Home button (or Select and Start together). + +#### DLSS on an NVIDIA card + +The menu offers **FSR 3.1** everywhere, and **DLSS** only in a build made with NVIDIA's NGX SDK. +Released builds are not: the SDK is NVIDIA's to license and none of it may be committed here, so the +Upscaling row stops at FSR 3.1 and says why. + +You build the game yourself, so you can have DLSS: + +1. Get NVIDIA's DLSS SDK (`github.com/NVIDIA/DLSS`) and put it where the build will find it -- a + folder named `dlss-sdk` beside the Hookshot folder, or name it yourself with + `RX_VK_DLSS_SDK=`. +2. Build the game as usual. The Upscaling row then offers DLSS, and Frame generation will use DLSS + where it can and FSR 3 otherwise. +3. Put NVIDIA's DLSS runtime beside the game: `nvngx_dlss.dll` on Windows (the SDK's + `lib/Windows_x86_64/rel/`), `libnvidia-ngx-dlss.so.*` on Linux. It is theirs to ship, not ours, + so the build will not copy it for you. + +There is no "neural rendering" row. NVIDIA's ray reconstruction denoises ray-traced lighting from a +G-buffer, and this game is rasterized with neither -- so it is not a setting that was left out, it +is one that has nothing to do here. The same keys close it, and so does Esc. The menu has three tabs, Graphics, Gameplay and Controls: Q and E (or Tab and Shift+Tab) switch between them, LB and RB on a controller. Up and Down choose a row, Left and Right change it diff --git a/tests/test_shader_stamp_cache.py b/tests/test_shader_stamp_cache.py index 7c0102b10..767b7f201 100644 --- a/tests/test_shader_stamp_cache.py +++ b/tests/test_shader_stamp_cache.py @@ -21,7 +21,8 @@ def production_code(path): tree = ast.parse(path.read_text(encoding="utf-8"), filename=str(path)) - names = {"tree_headers", "vk_sources", "flag_text", "object_key"} + # dlss_sdk_path decides a compile flag, so the object key depends on it: it belongs here. + names = {"tree_headers", "vk_sources", "flag_text", "object_key", "dlss_sdk_path"} functions = [n for n in tree.body if isinstance(n, ast.FunctionDef) and n.name in names] assert {n.name for n in functions} == names main = next(n for n in tree.body if isinstance(n, ast.FunctionDef) and n.name == "main") From 7eda1d9ceba9f4a39259bd9e96a19db8870d21f1 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 9 Nov 2026 16:39:32 +0000 Subject: [PATCH 065/119] chore(release): 2.4.1 [skip ci] [skip release] ## [2.4.1](https://github.com/notquiteog/Hookshot/compare/v2.4.0...v2.4.1) (2026-11-09) ### Bug Fixes * a Windows build could ask for DLSS and then fail to link ([d72441a](https://github.com/notquiteog/Hookshot/commit/d72441ab9097d41a44035988c19486d32192f080)) --- changelog.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/changelog.txt b/changelog.txt index 6b820862f..f09129014 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,9 @@ --------------------------------------------------------------------------------------------------- +Version: 2.4.1 +Date: 09. 11. 2026 + Bugfixes: + - A Windows build could ask for DLSS and then fail to link. +--------------------------------------------------------------------------------------------------- Version: 2.4.0 Date: 09. 11. 2026 Features: From afc44960f90e0bd52a283b8ae15f9819b45e698d Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 10:41:02 -0600 Subject: [PATCH 066/119] docs: parallel replay loses at every setting, and not because of the lock Swept against serial in the same scene: serial 31.1/30.9/29.3 fps, par2 24.7-26.4, par4 23.2-24.4, par8 16.4/16.4/14.7, and par4 with 480-draw segments 7.3/18.9/18.6 -- monotonically worse with more threads, worse again with bigger segments, and unstable at the end. Two threads already lose by 5 fps, and two threads can barely contend for a lock. So the cost is the fixed work per command buffer -- dry pass, segment list, a recording each, ordered submission -- not the contention the earlier numbers pointed at. Fixing the two lock sites could not have recovered it, which is worth writing down because 739 acquisitions and 3.65 ms of waiting invite exactly that conclusion. Ocarina submits about six command buffers a frame where Mario Kart World hands over nearly a frame's draws in one, so the per-buffer overhead is paid six times for less work each. The feature is probably right for the game it was written for, which makes it worth measuring in the Mario Kart World fork rather than deleting. Co-Authored-By: Claude Opus 5 --- docs/performance.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/docs/performance.md b/docs/performance.md index c44ecbff8..0794afbb4 100644 --- a/docs/performance.md +++ b/docs/performance.md @@ -99,6 +99,37 @@ So the fix is not "split the lock" in the abstract. It is two specific questions `texture_touch_quick` misses, and whether the `pools_mu` path can resolve a pool without holding the shared-recording lock. Both are measurable with the harness that produced this table. +### It is not the lock, and tuning does not rescue it + +Swept against serial, same scene: + +| arm | fps | `submit` | +|---|---|---| +| **serial** | **31.1 / 30.9 / 29.3** | **31.65 ms** | +| `RX_VK_PARALLEL=2` | 24.7 / 25.4 / 26.4 | 34.86 ms | +| `RX_VK_PARALLEL=4` | 23.2 / 23.2 / 24.4 | 38.02 ms | +| `RX_VK_PARALLEL=8` | 16.4 / 16.4 / 14.7 | 63.41 ms | +| `=4`, `_SEG=480` | 7.3 / 18.9 / 18.6 | 50.25 ms | + +Serial wins at every setting, it gets monotonically worse with more threads, and larger segments are +worse still (that 7.3 is one sample of three, so it stutters as well as being slow). + +**Two threads already lose by 5 fps**, and two threads can barely contend. So the cost is not the +lock after all: it is the fixed work per command buffer -- the dry pass, the segment list, a +recording and command buffer per segment, and the ordered submission -- and fixing the two lock +sites above could not have recovered it. That is worth saying plainly, because the lock numbers +(739 acquisitions, 3.65 ms) invite exactly that conclusion and it is wrong. + +**Why it was written, and where it probably does pay.** The design note says Mario Kart World hands +over nearly a frame's draws in *one* command buffer, 6-10 ms of replay on the critical path. Ocarina +submits about six command buffers a frame, so each one is small and the per-buffer overhead is paid +six times for proportionally less work. The feature is likely right for the game it was written for +and wrong for this one -- which makes it worth measuring again in the Mario Kart World fork rather +than deleting. + +The frame rate is still waiting on the serial path: ~15 ms of `submit` that no sub-counter names, +and the ~30% of CPU in `memmove` that needs call graphs to attribute. + So the parallel path is not slow because parallelism does not suit this game. It is serialised on one lock, and then pays the coordination on top. Splitting that lock by what it protects is the work that would make it pay, and it is delicate: the mutex is recursive and taken reentrantly, so From 2c6780879b21557c6af346ddfa7cd7484c0041bc Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 10:51:52 -0600 Subject: [PATCH 067/119] ci: build the DLSS half on both platforms, and upload none of it dlss_sdk_link was Linux-only, so a Windows build with an SDK compiled the NGX half and then failed with every NVSDK_NGX_* symbol undefined -- and no job here would have noticed, because nothing in CI ever set RX_VK_DLSS_SDK. The fix for that went in untested, which is the shape of mistake this tree keeps paying for. Both renderer jobs now fetch NVIDIA's SDK and build the back end against it. The result is listed and thrown away: nothing from either step is uploaded, because the SDK may not be committed here and its library may not be redistributed. What it buys is that the link is exercised on the platform where it was broken. Co-Authored-By: Claude Opus 5 --- .github/workflows/linux-appimage.yml | 17 +++++++++++++++++ .github/workflows/windows-builder.yml | 18 ++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/.github/workflows/linux-appimage.yml b/.github/workflows/linux-appimage.yml index 0ea5af0a4..87a2c1363 100644 --- a/.github/workflows/linux-appimage.yml +++ b/.github/workflows/linux-appimage.yml @@ -79,6 +79,23 @@ jobs: - name: AppImage run: scripts/linux/appimage.sh + # (the DLSS half, compiled and linked and then thrown away: nothing from this step is uploaded, because + # NVIDIA's SDK may not be committed here and its library may not be redistributed. It runs after the + # AppImage so it reuses the toolchain that step already built, and it exists because this link had no + # coverage at all -- the Windows half of it was simply missing and no job noticed.) + - name: Check out NVIDIA's DLSS SDK (not redistributed) + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + repository: NVIDIA/DLSS + path: _deps/dlss-sdk + - name: hookshot_vk.so links against the NGX SDK + run: | + D=$PWD/build-linux/deps + EMSDK=$D/emsdk RX_CPM=$D/cpm OOT_WORK="$RUNNER_TEMP/vk-dlss" RX_VK_ONLY=1 \ + RX_VK_DLSS_SDK="$PWD/_deps/dlss-sdk" \ + "$D/python/bin/python3" -I nx2/build.py --standalone --jobs "$(nproc)" + ls -l "$RUNNER_TEMP/vk-dlss/sa/build/hookshot_vk.so" + - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 with: name: Hookshot-linux-x86_64 diff --git a/.github/workflows/windows-builder.yml b/.github/workflows/windows-builder.yml index 783f7b8be..5de9f4f8e 100644 --- a/.github/workflows/windows-builder.yml +++ b/.github/workflows/windows-builder.yml @@ -183,6 +183,24 @@ jobs: name: hookshot_vk-windows path: ${{ runner.temp }}/vk-work/sa/build/hookshot_vk.dll if-no-files-found: error + # (the DLSS half, compiled and linked and then thrown away. It is never part of a release: NVIDIA's SDK may + # not be committed here and its library may not be redistributed, so nothing from this step is uploaded. + # What it buys is that the link is exercised at all -- dlss_sdk_link was Linux-only once, so a Windows build + # with an SDK compiled the NGX half and then failed with every NVSDK_NGX_* symbol undefined, and no job here + # would have noticed. The SDK is fetched, not stored.) + - name: Check out NVIDIA's DLSS SDK (not redistributed) + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + repository: NVIDIA/DLSS + path: _deps/dlss-sdk + - name: hookshot_vk.dll links against the NGX SDK + env: + RX_VK_ONLY: '1' + RX_VK_DLSS_SDK: ${{ github.workspace }}/_deps/dlss-sdk + run: | + OOT_WORK="$RUNNER_TEMP/vk-dlss" RX_CPM="$GITHUB_WORKSPACE/_deps/cpm" \ + python -I nx2/build.py --standalone --jobs "$NUMBER_OF_PROCESSORS" + ls -l "$RUNNER_TEMP/vk-dlss/sa/build/hookshot_vk.dll" release: name: Release assets From 61d7d4aa3e334eb6d4e5214e83921a55c0f148d1 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 11:01:29 -0600 Subject: [PATCH 068/119] feat: the upscaler and frame generation follow the menu while you play Every backend read its switch once into a static and kept it for the process, so changing Upscaling or Frame generation did nothing until the next launch -- and five rows said 'Applies after a restart' as though that were the design rather than the limitation. The fix is to separate the two questions that were tangled together. What the *device* can do cannot change while it runs, so capable() still answers once and caches. What the *player* asked for can change at any moment, so asked() and the seam's fsr_wanted are read every time. The RX_VK_* switches keep their single read, because an environment variable cannot change under a running process. FSR upscaling and frame generation therefore take effect on the next frame. DLSS cannot: NGX's device extensions are chosen before vkCreateDevice exists, so turning it on later reaches a device that was not made for it. That value still needs a restart and the row now says so specifically, rather than making the whole row look like it needs one. Co-Authored-By: Claude Opus 5 --- gpu/vk/vk_dlssg.cpp | 29 +++++++++++++++++++---------- gpu/vk/vk_draw.cpp | 11 ++++++++--- gpu/vk/vk_fsr3fi.cpp | 37 ++++++++++++++++++++++--------------- gpu/vk/vk_menu.cpp | 6 +++--- 4 files changed, 52 insertions(+), 31 deletions(-) diff --git a/gpu/vk/vk_dlssg.cpp b/gpu/vk/vk_dlssg.cpp index 034bbfdfb..dd9689e1d 100644 --- a/gpu/vk/vk_dlssg.cpp +++ b/gpu/vk/vk_dlssg.cpp @@ -32,19 +32,23 @@ constexpr uint32_t kMaxMade = 3; ///< (DLSS 4's multi-frame generation: up to /// `RX_VK_DLSSG=<1-3>` asks for this backend and says how many frames to make between two of the /// game's. Off is the default and costs nothing. uint32_t asked() { - static const uint32_t n = []() -> uint32_t { - if (const char* e = getenv("RX_VK_DLSSG"); e && *e) { - const int v = atoi(e); - return v <= 0 ? 0u : (uint32_t)std::min(v, (int)kMaxMade); - } + // (hookshot) The switch cannot change while the process runs; the menu row can. Read once and + // every time respectively, so the setting takes effect while playing. (DLSS frame generation + // still needs its device extensions, which are chosen before the device exists -- so turning it + // on mid-game reaches a device that may not carry them, and vk_framegen.cpp falls back.) + static const int env = []() { + const char* e = getenv("RX_VK_DLSSG"); + return e && *e ? std::max(0, atoi(e)) : -1; + }(); + if (env >= 0) return (uint32_t)std::min(env, (int)kMaxMade); + { // Otherwise the Insert menu: "Made frames by" picks DLSS, and "Frame generation" says how // many frames there are to make -- one fewer than the multiplier, since the last of each // set is the game's own frame. // The native "Frame generation" row: how many frames, not which library (vk_fsr3fi.cpp). const int made = std::clamp(opts.framegen - 1, 0, (int)kMaxMade); return (uint32_t)made; - }(); - return n; + } } struct Image { @@ -280,21 +284,26 @@ void ngx_shutdown() {} } // namespace -bool supported() { +/// What this build and device can do, which cannot change while they run. +bool capable() { static const bool yes = []() { - if (!asked()) return false; // (RX_VK_DLSSG: nothing below runs unless it is asked for) if (!kHaveSdk) { logf("vk: dlssg: this build has no NGX SDK (RX_VK_DLSS_SDK), so frame generation is " "unavailable; the renderer's own interpolation is unaffected"); return false; } if (!ngx_available()) return false; - logf("vk: dlssg: frame generation is available, %u made frame(s) asked for", asked()); + logf("vk: dlssg: frame generation is available on this device"); return true; }(); return yes; } +bool supported() { + // Not cached, so the menu row takes effect on the next frame: see asked(). + return asked() != 0 && capable(); +} + size_t device_extensions(VkInstance instance, VkPhysicalDevice gpu, const char** out, size_t max) { #if defined(RX_VK_DLSS_SDK) if (!asked()) return 0; // (RX_VK_DLSSG: a run that did not ask gets the device it had) diff --git a/gpu/vk/vk_draw.cpp b/gpu/vk/vk_draw.cpp index 090167a12..78050dc1a 100644 --- a/gpu/vk/vk_draw.cpp +++ b/gpu/vk/vk_draw.cpp @@ -6317,10 +6317,15 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { // hardware that can run it. RX_VK_FSR=1 therefore brings us in here on its own. // RX_VK_FSR wins where it is set, so a test run is not at the mercy of a saved ini; otherwise // the Insert menu's "Scene upscaler" row decides. Read once: the backends cache what they are. - static const bool fsr_wanted = []() { - if (const char* e = getenv("RX_VK_FSR")) return atoi(e) != 0; - return scene_upscaler() == 1; + // (hookshot) RX_VK_FSR cannot change while the process runs, so it is asked once; the Insert + // menu's Upscaling row can change at any moment, so it is asked every dispatch. That is what + // lets a player turn FSR on and see it on the next frame instead of the next launch. The + // backend's own supported() still caches the device's answer, which cannot change. + static const int fsr_env = []() { + const char* e = getenv("RX_VK_FSR"); + return e ? (atoi(e) != 0 ? 1 : 0) : -1; }(); + const bool fsr_wanted = fsr_env >= 0 ? fsr_env != 0 : scene_upscaler() == 1; // (hookshot) Both vendor backends ask their own question: FSR whether this device can run its // passes, DLSS whether this is an NVIDIA driver reporting Super Resolution with an NGX runtime // loaded. Each answers once and caches, so this costs nothing per dispatch. upscale::choose diff --git a/gpu/vk/vk_fsr3fi.cpp b/gpu/vk/vk_fsr3fi.cpp index 05c884943..e707c3813 100644 --- a/gpu/vk/vk_fsr3fi.cpp +++ b/gpu/vk/vk_fsr3fi.cpp @@ -317,11 +317,15 @@ constexpr VkImageSubresourceRange ALL_LEVELS{VK_IMAGE_ASPECT_COLOR_BIT, 0, VK_RE /// `RX_VK_FSR_FG=<1-3>` asks for this backend and says how many frames to make between two of the /// game's. Off is the default and costs nothing: nothing below runs and nothing is logged. uint32_t asked() { - static const uint32_t n = []() -> uint32_t { - if (const char* e = getenv("RX_VK_FSR_FG"); e && *e) { - const int v = atoi(e); - return v <= 0 ? 0u : (uint32_t)std::min(v, (int)kMaxMade); - } + // (hookshot) RX_VK_FSR_FG cannot change while the process runs, so it is read once; the Insert + // menu's row can change at any moment, so it is read every time. That difference is the whole + // of what makes the setting take effect while playing instead of at the next launch. + static const int env = []() { + const char* e = getenv("RX_VK_FSR_FG"); + return e && *e ? std::max(0, atoi(e)) : -1; + }(); + if (env >= 0) return (uint32_t)std::min(env, (int)kMaxMade); + { // Otherwise the Insert menu: "Made frames by" picks FSR, and "Frame generation" says how // many frames there are to make -- one fewer than the multiplier, since the last of each // set is the game's own frame. The same shape dlssg uses, so the two rows mean one thing. @@ -329,8 +333,7 @@ uint32_t asked() { // to make, not which library makes them. Both backends are asked, and vk_framegen.cpp // tries DLSS first, this second, and keeps its own blend for what neither takes. return (uint32_t)std::clamp(opts.framegen - 1, 0, (int)kMaxMade); - }(); - return n; + } } /// A memory dependency over the whole queue, in the synchronization2 form this renderer loads. @@ -659,25 +662,29 @@ void clear_images(VkCommandBuffer cmd, std::initializer_list image } // namespace -bool supported() { +/// What this device can do, which cannot change while it runs: asked once and kept. +bool capable() { static const bool yes = []() { - if (!asked()) return false; // (RX_VK_FSR_FG: nothing below runs unless it is asked for) if (!dev.push_descriptor || !vkCmdPushDescriptorSetKHR) { logf("vk: fsr3fi: no push descriptors"); return false; } if (!formats_supported() || !features_supported()) return false; - logf("vk: fsr3fi: FSR frame interpolation is available, %u made frame(s) asked for", - asked()); - if (asked() > 1) - logf("vk: fsr3fi: FSR 3.1's interpolation has no phase input, so the %u frames of a set " - "are the same midpoint frame; only the pacing differs", - asked()); + logf("vk: fsr3fi: FSR frame interpolation is available on this device"); + logf("vk: fsr3fi: FSR 3.1's interpolation has no phase input, so a set's frames are the " + "same midpoint frame; only the pacing differs"); return true; }(); return yes; } +bool supported() { + // Deliberately not cached: `asked()` follows the menu, so a player turning frame generation on + // mid-game gets it on the next frame rather than the next launch. The device half above is the + // part that is worth asking once. + return asked() != 0 && capable(); +} + uint32_t frames_wanted() { return supported() ? asked() : 0; } diff --git a/gpu/vk/vk_menu.cpp b/gpu/vk/vk_menu.cpp index 7108f8c07..8e7e9bcbf 100644 --- a/gpu/vk/vk_menu.cpp +++ b/gpu/vk/vk_menu.cpp @@ -184,9 +184,9 @@ Row rows[] = { {TAB_GRAPHICS, "GPU device", &opts.gpu_device, 0, 8, 1, tx_gpu, "Selects which graphics card Vulkan uses. Auto picks the best dedicated GPU. Applies after restart."}, {TAB_GRAPHICS, "Frame generation", &opts.framegen, 0, 8, 1, tx_framegen, - "Makes extra frames between the game's own (2x up to 8x), for smoother motion. Uses DLSS or FSR 3 where the card and " - "the build allow it, and the renderer's own blend otherwise -- you do not pick. Adds a little input delay, and fast " - "motion or camera cuts can show artifacts."}, + "Makes extra frames between the game's own (2x up to 8x), for smoother motion, and takes effect as you change it. " + "Uses DLSS or FSR 3 where the card and the build allow it, and the renderer's own blend otherwise -- you do not " + "pick. Adds a little input delay, and fast motion or camera cuts can show artifacts."}, {TAB_GRAPHICS, "Frame pacing", &opts.pace, 0, 1, 1, tx_onoff, "Shows each frame at an even interval instead of as soon as it is ready. Less stutter, at up to one frame of delay."}, {TAB_GRAPHICS, "Resolution", &opts.resolution, 0, 4, 1, tx_resolution, From e4f1ebfaea067c2711dd2d186a0069e479df318c Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 11:03:36 -0600 Subject: [PATCH 069/119] ci: releases are built with DLSS support compiled in The released back end offered FSR and nothing else, because nothing in CI ever set RX_VK_DLSS_SDK -- so the Upscaling row stopped at FSR 3.1 on every build anyone could download, including on the NVIDIA cards DLSS exists for. Both release jobs now fetch NVIDIA's SDK to the tree root, where nx2/build.py already looks for it, so the renderer they ship carries the NGX half. The SDK is fetched and never committed, and /dlss-sdk/ is ignored so it cannot be. NVIDIA's *runtime* -- nvngx_dlss.dll, libnvidia-ngx-dlss.so -- is still not shipped. That is a separate and much larger thing to redistribute, and a player who wants DLSS puts it beside the game; readme.md says where it comes from. So DLSS is offered by these builds and reports itself unavailable until that file is there, which is honest in both directions. This replaces the compile-only check added earlier: the real build covers it now, so there is no second build to keep in step. Co-Authored-By: Claude Opus 5 --- .github/workflows/linux-appimage.yml | 26 ++++++++++---------------- .github/workflows/windows-builder.yml | 26 ++++++++------------------ .gitignore | 3 +++ 3 files changed, 21 insertions(+), 34 deletions(-) diff --git a/.github/workflows/linux-appimage.yml b/.github/workflows/linux-appimage.yml index 87a2c1363..83d0b93a1 100644 --- a/.github/workflows/linux-appimage.yml +++ b/.github/workflows/linux-appimage.yml @@ -76,25 +76,19 @@ jobs: { echo "the profile did not download: built without it"; exit 0; } ls -la work work/image - - name: AppImage - run: scripts/linux/appimage.sh - - # (the DLSS half, compiled and linked and then thrown away: nothing from this step is uploaded, because - # NVIDIA's SDK may not be committed here and its library may not be redistributed. It runs after the - # AppImage so it reuses the toolchain that step already built, and it exists because this link had no - # coverage at all -- the Windows half of it was simply missing and no job noticed.) - - name: Check out NVIDIA's DLSS SDK (not redistributed) + # (the back end this AppImage carries is built with DLSS support compiled in. NVIDIA's SDK is fetched here and + # never committed; nx2/build.py finds it because it sits at the tree root as `dlss-sdk`. The DLSS *runtime* + # (libnvidia-ngx-dlss.so) is NVIDIA's to ship and is still not included -- a player who wants DLSS puts it + # beside the game, and readme.md says so. Without this the released build offers FSR and nothing else.) + - name: Check out NVIDIA's DLSS SDK (built against, not shipped) uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: NVIDIA/DLSS - path: _deps/dlss-sdk - - name: hookshot_vk.so links against the NGX SDK - run: | - D=$PWD/build-linux/deps - EMSDK=$D/emsdk RX_CPM=$D/cpm OOT_WORK="$RUNNER_TEMP/vk-dlss" RX_VK_ONLY=1 \ - RX_VK_DLSS_SDK="$PWD/_deps/dlss-sdk" \ - "$D/python/bin/python3" -I nx2/build.py --standalone --jobs "$(nproc)" - ls -l "$RUNNER_TEMP/vk-dlss/sa/build/hookshot_vk.so" + path: dlss-sdk + + - name: AppImage + run: scripts/linux/appimage.sh + - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 with: diff --git a/.github/workflows/windows-builder.yml b/.github/workflows/windows-builder.yml index 5de9f4f8e..e3a1047ab 100644 --- a/.github/workflows/windows-builder.yml +++ b/.github/workflows/windows-builder.yml @@ -170,6 +170,14 @@ jobs: - name: llvm-mingw run: echo "HOOKSHOT_MINGW=$(python -I scripts/release_parts.py llvm-mingw "$RUNNER_TEMP/llvm")" >> "$GITHUB_ENV" # (as scripts/linux/appimage.sh builds Linux's: the back end alone, no lift, no game) + # (built with DLSS support compiled in: the SDK is fetched here, never committed, and found at the tree root + # by nx2/build.py. NVIDIA's runtime (nvngx_dlss.dll) is theirs to ship and is not included -- readme.md tells + # a player where to put it. This link had no coverage at all until now, and was Windows-broken because of it.) + - name: Check out NVIDIA's DLSS SDK (built against, not shipped) + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + repository: NVIDIA/DLSS + path: dlss-sdk - name: hookshot_vk.dll env: RX_VK_ONLY: '1' @@ -183,24 +191,6 @@ jobs: name: hookshot_vk-windows path: ${{ runner.temp }}/vk-work/sa/build/hookshot_vk.dll if-no-files-found: error - # (the DLSS half, compiled and linked and then thrown away. It is never part of a release: NVIDIA's SDK may - # not be committed here and its library may not be redistributed, so nothing from this step is uploaded. - # What it buys is that the link is exercised at all -- dlss_sdk_link was Linux-only once, so a Windows build - # with an SDK compiled the NGX half and then failed with every NVSDK_NGX_* symbol undefined, and no job here - # would have noticed. The SDK is fetched, not stored.) - - name: Check out NVIDIA's DLSS SDK (not redistributed) - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - with: - repository: NVIDIA/DLSS - path: _deps/dlss-sdk - - name: hookshot_vk.dll links against the NGX SDK - env: - RX_VK_ONLY: '1' - RX_VK_DLSS_SDK: ${{ github.workspace }}/_deps/dlss-sdk - run: | - OOT_WORK="$RUNNER_TEMP/vk-dlss" RX_CPM="$GITHUB_WORKSPACE/_deps/cpm" \ - python -I nx2/build.py --standalone --jobs "$NUMBER_OF_PROCESSORS" - ls -l "$RUNNER_TEMP/vk-dlss/sa/build/hookshot_vk.dll" release: name: Release assets diff --git a/.gitignore b/.gitignore index 67c26d131..b23edfacc 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,6 @@ __pycache__/ # ---- Linux builds ---- build-linux/ *.so + +# NVIDIA's DLSS SDK, fetched at build time and never committed (docs/upscaling.md) +/dlss-sdk/ From e14b789db97d2d70215e1bd8b68b46478099e31c Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 9 Nov 2026 17:04:35 +0000 Subject: [PATCH 070/119] chore(release): 2.5.0 [skip ci] [skip release] ## [2.5.0](https://github.com/notquiteog/Hookshot/compare/v2.4.1...v2.5.0) (2026-11-09) ### Features * the upscaler and frame generation follow the menu while you play ([61d7d4a](https://github.com/notquiteog/Hookshot/commit/61d7d4aa3e334eb6d4e5214e83921a55c0f148d1)) --- changelog.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/changelog.txt b/changelog.txt index f09129014..afd407f58 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,9 @@ --------------------------------------------------------------------------------------------------- +Version: 2.5.0 +Date: 09. 11. 2026 + Features: + - The upscaler and frame generation follow the menu while you play. +--------------------------------------------------------------------------------------------------- Version: 2.4.1 Date: 09. 11. 2026 Bugfixes: From 2851bc6b07b46212f8290e690772d03d1b5fbfd9 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 11:38:39 -0600 Subject: [PATCH 071/119] feat(vk): DLSS 5 neural rendering, with the model's own settings in the menu DLSS 5 neural rendering (DLSS-NR, NVIDIA's "3D-Guided Neural Rendering") runs over the finished frame, before the menu and the FPS counter are drawn on it. Ten rows in a new Neural tab -- the switch, Model, Style, Preset, Intensity, Local tone, Local structure, Global tone, Skin structure and Auto mask -- all read live, so a change reaches the next frame. This project refused the feature three times on the grounds that it needs ray tracing, and that was wrong. It conflated DLSS-NR with DLSS Ray Reconstruction (sl.dlss_d), which does need a G-buffer this game will never have. DLSS-NR is an uplift pass: Streamline's own public headers name kBufferTypeUpliftInputColor and kBufferTypeUpliftOutputColor, plus depth and motion. Colour in, colour out, which is why it runs on rasterized content at all. Why a second NVIDIA path beside the NGX one: DLSS-NR is not reachable through NGX. The public SDK does not name it, and slDLSSNRSetOptions lives inside sl.dlss_nr, out through slGetFeatureFunction. So Streamline sits beside the NGX session and is asked to load only kFeatureDLSS_NR -- never Streamline's own DLSS or DLSS-G -- so two NGX sessions never meet over one device. OTA plugin loading is deliberately off: a game has no business starting an updater. Three defaults inherited from openNR were wrong and are corrected, with the reasoning in docs/neural-rendering.md: preset defaults to 0 (the plugin's own model) and not 1 (which silently pins preset A); skinStructureStrength defaults to 1.0, because no source anywhere states that a negative value means "leave it to the model" -- that was read into openNR's unexplained -1 and then repeated, including by me in Elysium; and useAutoMask is declared uint32_t, because sl::Boolean is a one-byte char enum and would leave three bytes of uninitialized padding inside a struct handed to NVIDIA's code. Also fixes a real bug found on the way: the Windows link line never called dlss_sdk_link(). A Windows build that found an NGX SDK compiled every NVSDK_NGX_* call and had nothing to resolve them against -- which is why DLSS has not been appearing in the menu on Windows. The readme said released builds have no DLSS; CI has been fetching the SDK for both platforms, so that is corrected too. - gpu/vk/vk_streamline.{h,cpp}, vk_streamline_api.h: the session. Loads the player's sl.interposer.dll after checking it carries NVIDIA's signature, with a check written against what both the Windows SDK and llvm-mingw have -- Streamline's own sl_security.h uses WINTRUST_SIGNATURE_SETTINGS, which llvm-mingw does not ship, and Hookshot builds for Windows with either. - gpu/vk/vk_dlssnr.{h,cpp}, vk_dlssnr_options.h: the feature. Ten static_asserts pin the options struct's offsets, because a field at the wrong offset is not a crash but the model reading one setting as another. - The struct GUID rests on one source; eErrorInvalidParameter from slDLSSNRSetOptions now says so in the log rather than leaving it to be rediscovered. - resize() idles through device_wait_idle_locked() rather than a bare vkDeviceWaitIdle: the replay thread submits on dev.queue, and Vulkan wants every queue externally synchronized while the device idles. Windows x64 and, by the look of NVIDIA's shipped model, Blackwell. On Linux the Windows build under Proton is the path. docs/neural-rendering.md records what is measured and what is not -- including that nobody has been found shipping or measuring DLSS-NR on Vulkan at all, which makes this the least-trodden configuration of the feature. Co-Authored-By: Claude Opus 5 --- .github/workflows/windows-builder.yml | 10 + .gitignore | 1 + docs/neural-rendering.md | 133 ++++++++ docs/upscaling.md | 9 +- gpu/vk/vk_dlssnr.cpp | 428 ++++++++++++++++++++++++++ gpu/vk/vk_dlssnr.h | 57 ++++ gpu/vk/vk_dlssnr_options.h | 108 +++++++ gpu/vk/vk_main.cpp | 74 ++++- gpu/vk/vk_menu.cpp | 87 +++++- gpu/vk/vk_menu.h | 37 +++ gpu/vk/vk_menu_hit.h | 7 +- gpu/vk/vk_replay.cpp | 9 + gpu/vk/vk_streamline.cpp | 377 +++++++++++++++++++++++ gpu/vk/vk_streamline.h | 69 +++++ gpu/vk/vk_streamline_api.h | 50 +++ nx2/build.py | 50 ++- readme.md | 62 ++-- 17 files changed, 1530 insertions(+), 38 deletions(-) create mode 100644 docs/neural-rendering.md create mode 100644 gpu/vk/vk_dlssnr.cpp create mode 100644 gpu/vk/vk_dlssnr.h create mode 100644 gpu/vk/vk_dlssnr_options.h create mode 100644 gpu/vk/vk_streamline.cpp create mode 100644 gpu/vk/vk_streamline.h create mode 100644 gpu/vk/vk_streamline_api.h diff --git a/.github/workflows/windows-builder.yml b/.github/workflows/windows-builder.yml index e3a1047ab..da87a0ad3 100644 --- a/.github/workflows/windows-builder.yml +++ b/.github/workflows/windows-builder.yml @@ -178,6 +178,16 @@ jobs: with: repository: NVIDIA/DLSS path: dlss-sdk + # (DLSS 5 neural rendering: only NVIDIA Streamline's MIT-licensed headers, fetched here and never + # committed, found at the tree root by nx2/build.py streamline_sdk_path. Nothing is linked from it -- + # sl.interposer.dll and the sl.* plugins are the player's own files, loaded at run time. v2.14.1 is the + # first public tag that carries kFeatureDLSS_NR at all, so this tag is a floor, not a preference.) + - name: Check out NVIDIA Streamline's headers (DLSS 5 neural rendering) + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + repository: NVIDIA-RTX/Streamline + ref: v2.14.16 + path: streamline-sdk - name: hookshot_vk.dll env: RX_VK_ONLY: '1' diff --git a/.gitignore b/.gitignore index b23edfacc..800b37260 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,4 @@ build-linux/ # NVIDIA's DLSS SDK, fetched at build time and never committed (docs/upscaling.md) /dlss-sdk/ +/streamline-sdk/ diff --git a/docs/neural-rendering.md b/docs/neural-rendering.md new file mode 100644 index 000000000..e1957f046 --- /dev/null +++ b/docs/neural-rendering.md @@ -0,0 +1,133 @@ +# DLSS 5 neural rendering + +## What it is, and the mistake that cost a week + +DLSS 5 neural rendering (DLSS-NR; NVIDIA's own name for it is *3D-Guided Neural Rendering*) was +refused in this project three times on the grounds that it needs ray tracing. That was wrong, and +the record is kept here because the reasoning was plausible and still wrong. + +The refusal conflated DLSS-NR with **DLSS Ray Reconstruction** (`sl.dlss_d`, NGX's `DLSSD`). Ray +reconstruction denoises a ray-traced image and needs a G-buffer -- albedo, normals, roughness -- +which a recompilation of a 1998 rasterized game does not have and never will. DLSS-NR is a different +feature with a different plugin and different inputs. Streamline's own public headers settle it: + +``` +sl_core_types.h:210 kBufferTypeUpliftInputColor = 70 +sl_core_types.h:213 kBufferTypeUpliftOutputColor = 71 // may alias the input (in-place uplift) +sl_core_types.h:215 kBufferTypeUpliftControlMask = 72 // optional, 4-channel +sl_core_types.h:253 kFeatureDLSS_NR = 1004 +``` + +Colour in, colour out, plus depth and motion vectors. It is an image-enhancement pass, not a +denoiser, and it is why the feature can be put over rasterized content at all. + +## Where it runs here + +In the present, over the frame the game finished, before the menu and the FPS counter are drawn on +top (`gpu/vk/vk_replay.cpp`, `present_image`). It is not an upscaler and is not part of the +upscaling path: input and output are both at display resolution, and `Upscaling` / `Frame +generation` are untouched by it. It runs on every presented frame, so with frame generation at 4x it +runs four times per game frame -- each shown frame gets enhanced, which is the point, but it is four +times the cost. + +The model is handed a flat depth and no motion at all, with an identity camera and no jitter +(`scene_constants`). That is deliberate, not laziness: by this point in the frame the picture is +already upscaled and already has the HUD on it, so the scene's real depth buffer does not describe +the image being handed over. Giving it the real camera would have it reproject detail that is not +where it thinks it is. The renderer *does* have real scene depth and camera motion (`vk_camera_motion.cpp`), +and feeding them is the obvious next experiment -- it would mean moving the pass before the HUD. + +Dagor's shipping integration also runs NR on a **tonemapped, display-referred SDR image** and +inverse-tonemaps afterwards. Here the window image already is that, which is a second reason this is +the right place in the frame. + +## The options struct + +NVIDIA ships no `sl_dlss_nr.h`. The struct that configures the model is NDA-only, so +`gpu/vk/vk_dlssnr_options.h` declares it, and that file is the riskiest thing in this feature: it is +passed to code we did not compile, so a field at the wrong offset is not a crash but the model +reading one setting as another. Ten `static_assert`s on the offsets are there to make a future +Streamline that moves a field a build error. + +Two sources are genuinely independent of each other and agree exactly on field order, count and +types: **DagorEngine** (BSD-3-Clause), which compiles against NVIDIA's real header, and **openNR** +(MIT), which recovered the layout from a prerelease Streamline 2.13 `sl.dlss_nr.dll`. + +Three things this project previously had wrong, all inherited from openNR's defaults and all +corrected here: + +| | was | is | why | +|---|---|---|---| +| `preset` | 1 | **0** | 0 is the default model; 1-7 pin presets A-G. A default of 1 silently pins preset A. | +| `skinStructureStrength` | -1 ("leave it to the model") | **1.0** | No source states a negative sentinel. openNR defaults -1 with no comment; Dagor's real header and two others default 1.0, and the documented range is 0-1. The "-1" meaning was read into openNR's default and then repeated -- including by me, in Elysium. | +| `useAutoMask` | `sl::Boolean` | **`uint32_t`** | `sl::Boolean` is `enum Boolean : char`: one byte, leaving three bytes of *uninitialized padding* inside a struct handed to NVIDIA's code. Same offsets either way. | + +`globalToneStrength` and `performanceMode` are in the ABI and **ignored by Streamline 2.14's +plugin**. They are sent correctly anyway and the menu rows say so, because a row that looks broken +is worse than a row that explains itself. + +### Not corroborated + +The struct **GUID** `{29DFDFE0-...}` and `kStructVersion3` rest on openNR alone -- Dagor includes the +real header and so never restates them. If `slDLSSNRSetOptions` answers `eErrorInvalidParameter`, +that GUID is the first suspect, and `vk_dlssnr.cpp` says so in the log rather than leaving the next +person to rediscover it. + +## Why a second NVIDIA path + +Super resolution and frame generation go through NGX directly (`gpu/vk/vk_ngx.h`), which is measured +and works. DLSS-NR cannot: the public NGX SDK does not name the feature, and the only entry point +that configures it, `slDLSSNRSetOptions`, lives inside `sl.dlss_nr` and comes out through +`slGetFeatureFunction`. So Streamline sits beside the NGX session rather than replacing it, and it is +asked to load **only** `kFeatureDLSS_NR` -- not Streamline's own DLSS or DLSS-G plugins -- so that two +NGX sessions never come up against the same device. + +`eAllowOTA` and `eLoadDownloadedPlugins` are deliberately not set: they let Streamline fetch plugins +over the network and bootstrap `nvngx_update.exe`, and a game has no business starting an updater. + +## What a player needs + +Windows x64 only. Streamline's interposer and plugins are DLLs; on Linux, run the Windows build under +Proton, which is where this was measured for Elysium. These go beside the game, or in a `streamline` +folder beside it, or wherever `RX_VK_STREAMLINE_DIR` points: + +``` +sl.interposer.dll the loader; its signature is checked before it is loaded +sl.common.dll the interposer needs it whichever feature loads on top +sl.pcl.dll likewise +sl.dlss_nr.dll the Streamline plugin +nvngx_dlssnr.dll the model -- must sit in the same folder as sl.dlss_nr.dll +``` + +Two lessons from other people's measurements, both worth not rediscovering: the plugin and the model +**must be colocated** (in separate folders the support query returned `FeatureNotSupported`), and the +`sl.*` trio **must be version-matched** -- a 2.13 plugin with 2.14 common/interposer is not a +supported combination. + +Floor: **Streamline 2.14.1**, the first public tag carrying `kFeatureDLSS_NR` at all (2.14.0 +introduced the plugin; v2.12.0 and earlier have neither the feature nor the uplift tags). CI builds +against v2.14.16. + +**GPU**: NVIDIA's shipped `nvngx_dlssnr.dll` appears to be **Blackwell-only** (SM120). A measured +probe on an RTX 4070 SUPER with the official signed 2.13 plugin got `AdapterUnsupported` and +Streamline then ignored the plugin outright; claims of RTX 20-series support trace to openNR's +*recompiled* DLL on its NGX-direct path, which does not claim Vulkan support. So: an RTX 50-series +card is the expectation here, and anything older reporting the feature unavailable is the honest +answer rather than a bug. + +## What is still unproven + +Being plain about this, because the rest of this file reads confident: + +- **Nobody has been found shipping or measuring DLSS-NR on Vulkan.** Dagor's NR path is written to be + API-agnostic and does handle Vulkan resources, but every measurement found was D3D. This is the + least-trodden configuration of the feature. +- Elysium reached start-up and feature support but **never drove `slEvaluateFeature` over real + images**, so nothing in this project has yet seen the model produce a frame. +- Whether a flat depth and zero motion are *acceptable* rather than merely *accepted*. The four tags + are declared required and are all supplied; whether the model wants physically meaningful depth is + untested. The ReShade addon's present-time hook strongly suggests dummies are tolerated. +- In-place aliasing of tags 70 and 71. NVIDIA's header says it may alias; no integration found does + it, and this one uses two images. +- The upper bound of `style`. Three values are documented (Default, Natural, Cinematic); the row + offers exactly those three. diff --git a/docs/upscaling.md b/docs/upscaling.md index 8470f7f4a..b498e0c8f 100644 --- a/docs/upscaling.md +++ b/docs/upscaling.md @@ -600,8 +600,13 @@ The SDK ships three Linux feature libraries and only two of them have a job in t invented inputs would be a worse picture dressed up as a feature. It is not wired, and the reason is the game, not the plumbing. -So "neural rendering" in this project means the super-resolution network and the frame-generation -network, and on AMD it will mean FSR 4's upscaling network for the same reason. +That paragraph is right about ray reconstruction and was wrong about everything it was then used to +conclude. **"Neural rendering" is also the name of a different NVIDIA feature, and that one does run +here**: DLSS 5 neural rendering (`kFeatureDLSS_NR`, NVIDIA's *3D-Guided Neural Rendering*) is an +uplift pass over a finished image -- `kBufferTypeUpliftInputColor` in, `kBufferTypeUpliftOutputColor` +out -- not a denoiser, and it needs no G-buffer. It is implemented and in the menu's Neural tab; +[neural-rendering.md](neural-rendering.md) has it, including the three times this project refused it +on the strength of the paragraph above. ### How NGX is actually reached on Linux diff --git a/gpu/vk/vk_dlssnr.cpp b/gpu/vk/vk_dlssnr.cpp new file mode 100644 index 000000000..66e24441a --- /dev/null +++ b/gpu/vk/vk_dlssnr.cpp @@ -0,0 +1,428 @@ +// (hookshot) DLSS 5 neural rendering; see gpu/vk/vk_dlssnr.h for what it is and is not. Everything +// that touches Streamline is inside RX_VK_STREAMLINE and _WIN32; the stubs at the bottom are what +// every other build compiles, so the present path needs no #ifdef. + +#include "vk_dlssnr.h" + +#include "vk_menu.h" +#include "vk_streamline.h" + +#if defined(RX_VK_STREAMLINE) && defined(_WIN32) + +#include + +#include +#include + +#include +#include +#include +#include + +#include "vk_dlssnr_options.h" +#include "vk_streamline_api.h" + +namespace mkwvk::dlssnr { +namespace { + +// One viewport: the window's, and there is only ever one. +constexpr uint32_t kViewport = 1; +// The model's own working format. Eight bits a channel is what the window's image is and what the +// uplift was measured against; a float format here would only widen a picture that is already +// quantized by the time it reaches us. +constexpr VkFormat kColorFormat = VK_FORMAT_R8G8B8A8_UNORM; +constexpr VkFormat kDepthFormat = VK_FORMAT_R32_SFLOAT; +constexpr VkFormat kMotionFormat = VK_FORMAT_R16G16_SFLOAT; +constexpr VkImageUsageFlags kColorUsage = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_STORAGE_BIT | + VK_IMAGE_USAGE_TRANSFER_SRC_BIT | + VK_IMAGE_USAGE_TRANSFER_DST_BIT; +constexpr VkImageUsageFlags kSceneUsage = + VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT; +constexpr VkImageSubresourceRange kOneLevel{VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}; + +struct Image { + VkImage image{}; + VkImageView view{}; + VmaAllocation memory{}; +}; + +struct State { + bool tried{}; + bool capable{}; + std::atomic failed{}; + // A model, style or preset Streamline will not take is the player's to change, so it is held + // against those exact settings rather than turning the feature off for the run. + std::atomic options_rejected{}; + bool have_applied{}, have_rejected{}; + NrSettings applied{}, rejected{}; + PFun_slDLSSNRSetOptions* set_options{}; + Image in{}, out{}, depth{}, motion{}; + uint32_t width{}, height{}; + bool scene_cleared{}; + uint32_t frame{}; + std::mutex mu; // (Streamline's calls for one viewport are not thread-safe among themselves) +}; + +State& state() { + static State s; + return s; +} + +void drop(Image& t) { + if (t.view) vkDestroyImageView(dev.device, t.view, nullptr); + if (t.image) destroy_image(t.image, t.memory); + t = Image{}; +} + +bool make(Image& t, VkFormat format, uint32_t w, uint32_t h, VkImageUsageFlags usage) { + drop(t); + VkImageCreateInfo ci{VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO}; + ci.imageType = VK_IMAGE_TYPE_2D; + ci.format = format; + ci.extent = {w, h, 1}; + ci.mipLevels = 1; + ci.arrayLayers = 1; + ci.samples = VK_SAMPLE_COUNT_1_BIT; + ci.tiling = VK_IMAGE_TILING_OPTIMAL; + ci.usage = usage; + ci.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; + if (!create_image(ci, t.image, t.memory, false)) { + logf("vk: dlss-nr: a %ux%u image was not made", w, h); + return false; + } + VkImageViewCreateInfo vi{VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO}; + vi.image = t.image; + vi.viewType = VK_IMAGE_VIEW_TYPE_2D; + vi.format = format; + vi.subresourceRange = kOneLevel; + if (vkCreateImageView(dev.device, &vi, nullptr, &t.view) != VK_SUCCESS) { + logf("vk: dlss-nr: an image's view was not made"); + drop(t); + return false; + } + return true; +} + +void barrier(VkCommandBuffer cmd, VkImage image, VkImageLayout from, VkImageLayout to, + VkAccessFlags2 src_access, VkAccessFlags2 dst_access) { + VkImageMemoryBarrier2 b{VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2}; + b.srcStageMask = VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT; + b.dstStageMask = VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT; + b.srcAccessMask = src_access; + b.dstAccessMask = dst_access; + b.oldLayout = from; + b.newLayout = to; + b.srcQueueFamilyIndex = b.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + b.image = image; + b.subresourceRange = kOneLevel; + VkDependencyInfo di{VK_STRUCTURE_TYPE_DEPENDENCY_INFO}; + di.imageMemoryBarrierCount = 1; + di.pImageMemoryBarriers = &b; + vkCmdPipelineBarrier2(cmd, &di); +} + +sl::Resource resource(const Image& t, VkFormat format, VkImageLayout layout, uint32_t w, uint32_t h, + VkImageUsageFlags usage) { + sl::Resource r{sl::ResourceType::eTex2d, t.image, nullptr, t.view, (uint32_t)layout}; + r.width = w; + r.height = h; + r.nativeFormat = (uint32_t)format; + r.mipLevels = 1; + r.arrayLayers = 1; + r.flags = 0; + r.usage = usage; + return r; +} + +sl::float4x4 identity() { + sl::float4x4 m; + m.setRow(0, {1.0f, 0.0f, 0.0f, 0.0f}); + m.setRow(1, {0.0f, 1.0f, 0.0f, 0.0f}); + m.setRow(2, {0.0f, 0.0f, 1.0f, 0.0f}); + m.setRow(3, {0.0f, 0.0f, 0.0f, 1.0f}); + return m; +} + +/// The camera the model is told about. There is none: this runs over a finished, already-upscaled +/// frame with the HUD on it, so an identity camera with no jitter and no motion is the honest +/// description of what it is being handed, and the flat depth below agrees with it. Claiming the +/// scene's real camera here would make the model reproject detail that is not where it thinks. +sl::Constants scene_constants(uint32_t w, uint32_t h, bool reset) { + const float fw = (float)w, fh = (float)h; + sl::Constants c{}; + c.cameraViewToClip = identity(); + c.clipToCameraView = identity(); + c.clipToLensClip = identity(); + c.clipToPrevClip = identity(); + c.prevClipToClip = identity(); + c.jitterOffset = {0.0f, 0.0f}; + c.mvecScale = {1.0f / fw, 1.0f / fh}; + c.cameraPinholeOffset = {0.0f, 0.0f}; + c.cameraPos = {0.0f, 0.0f, 0.0f}; + c.cameraUp = {0.0f, 1.0f, 0.0f}; + c.cameraRight = {1.0f, 0.0f, 0.0f}; + c.cameraFwd = {0.0f, 0.0f, 1.0f}; + c.cameraNear = 0.1f; + c.cameraFar = 1000.0f; + c.cameraFOV = 1.0f; + c.cameraAspectRatio = fw / fh; + c.depthInverted = sl::eFalse; + c.cameraMotionIncluded = sl::eTrue; + c.motionVectors3D = sl::eFalse; + c.reset = reset ? sl::eTrue : sl::eFalse; + c.motionVectorsJittered = sl::eFalse; + return c; +} + +/// Depth and motion, once per size: one flat depth and no motion at all. See scene_constants. +void clear_scene(VkCommandBuffer cmd, State& s) { + barrier(cmd, s.depth.image, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 0, + VK_ACCESS_2_TRANSFER_WRITE_BIT); + barrier(cmd, s.motion.image, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 0, + VK_ACCESS_2_TRANSFER_WRITE_BIT); + // Mid-scene rather than the far plane: a depth the model reads as "everything is at one + // distance" without reading as "everything is sky", which is what 0 or 1 would say. + VkClearColorValue flat{}; + flat.float32[0] = 0.5f; + vkCmdClearColorImage(cmd, s.depth.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &flat, 1, + &kOneLevel); + const VkClearColorValue none{}; + vkCmdClearColorImage(cmd, s.motion.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &none, 1, + &kOneLevel); + barrier(cmd, s.depth.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, VK_ACCESS_2_TRANSFER_WRITE_BIT, + VK_ACCESS_2_SHADER_READ_BIT); + barrier(cmd, s.motion.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, VK_ACCESS_2_TRANSFER_WRITE_BIT, + VK_ACCESS_2_SHADER_READ_BIT); +} + +bool resize(State& s, uint32_t w, uint32_t h) { + // The old images may still be in a frame in flight, so the device has to go idle first -- and + // that is not a bare vkDeviceWaitIdle. Vulkan wants every VkQueue externally synchronized while + // it idles, and the replay thread submits on dev.queue; device_wait_idle_locked flushes the + // pending submits and takes the present queue's lock too, which is the only correct way to do + // this here. apply() runs on the display thread before present_image takes dev.present_mu for + // its own submit, so taking it here is not a second acquisition. + { + std::lock_guard qk(dev.present_mu); + device_wait_idle_locked(); + } + if (!make(s.in, kColorFormat, w, h, kColorUsage) || + !make(s.out, kColorFormat, w, h, kColorUsage) || + !make(s.depth, kDepthFormat, w, h, kSceneUsage) || + !make(s.motion, kMotionFormat, w, h, kSceneUsage)) { + drop(s.in), drop(s.out), drop(s.depth), drop(s.motion); + return false; + } + s.width = w, s.height = h, s.scene_cleared = false; + logf("vk: DLSS 5 neural rendering on %ux%u frames", w, h); + return true; +} + +void full_blit(VkCommandBuffer cmd, VkImage from, VkImage to, uint32_t w, uint32_t h) { + VkImageBlit b{}; + b.srcSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}; + b.dstSubresource = b.srcSubresource; + b.srcOffsets[1] = {(int32_t)w, (int32_t)h, 1}; + b.dstOffsets[1] = b.srcOffsets[1]; + vkCmdBlitImage(cmd, from, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, to, + VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &b, VK_FILTER_NEAREST); +} + +} // namespace + +bool built_with_sdk() { return true; } + +bool capable() { + State& s = state(); + if (s.tried) return s.capable && !s.failed.load(std::memory_order_relaxed); + s.tried = true; + if (!streamline::nr_available()) return false; + s.set_options = streamline::feature_function(sl::kFeatureDLSS_NR, + "slDLSSNRSetOptions"); + if (!s.set_options) { + logf("vk: Streamline's DLSS 5 neural rendering has no slDLSSNRSetOptions: it is off"); + return false; + } + s.capable = true; + return true; +} + +bool asked() { + // Live, every frame: the row the player just changed has to reach the next frame. + if (const char* e = getenv("RX_VK_DLSS_NR")) return atoi(e) != 0; + return nr_settings().on; +} + +VkImage apply(VkCommandBuffer cmd, VkImage src, uint32_t sw, uint32_t sh, + VkImageView* out_view) { + State& s = state(); + if (!src || !sw || !sh) return VK_NULL_HANDLE; + if (s.failed.load(std::memory_order_relaxed) || !capable() || !asked()) return VK_NULL_HANDLE; + + const NrSettings want = nr_settings(); + if (s.options_rejected.exchange(false)) { + // Streamline turned down what we last sent: hold it against those exact settings, so + // changing any row tries again. + s.rejected = s.applied; + s.have_rejected = s.have_applied; + s.have_applied = false; + } + if (s.have_rejected && s.rejected == want) return VK_NULL_HANDLE; + + const bool recreated = !s.out.image || s.width != sw || s.height != sh; + if (recreated && !resize(s, sw, sh)) { + s.failed.store(true, std::memory_order_relaxed); + return VK_NULL_HANDLE; + } + const bool options_changed = recreated || !s.have_applied || !(s.applied == want); + s.applied = want; + s.have_applied = true; + + if (!s.scene_cleared) { + clear_scene(cmd, s); + s.scene_cleared = true; + } + + // The window's image into ours. The game's is only read. + barrier(cmd, src, VK_IMAGE_LAYOUT_GENERAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_2_SHADER_WRITE_BIT | + VK_ACCESS_2_TRANSFER_WRITE_BIT, + VK_ACCESS_2_TRANSFER_READ_BIT); + barrier(cmd, s.in.image, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 0, + VK_ACCESS_2_TRANSFER_WRITE_BIT); + full_blit(cmd, src, s.in.image, sw, sh); + barrier(cmd, src, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, VK_IMAGE_LAYOUT_GENERAL, + VK_ACCESS_2_TRANSFER_READ_BIT, + VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_2_TRANSFER_READ_BIT | + VK_ACCESS_2_SHADER_READ_BIT); + barrier(cmd, s.in.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, VK_ACCESS_2_TRANSFER_WRITE_BIT, + VK_ACCESS_2_SHADER_READ_BIT); + barrier(cmd, s.out.image, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL, 0, + VK_ACCESS_2_SHADER_WRITE_BIT); + + const sl::ViewportHandle viewport{kViewport}; + sl::Result result = sl::Result::eOk; + const char* stage = "slDLSSNRSetOptions"; + { + std::lock_guard lk(s.mu); + if (options_changed) { + DlssNrOptions o; + o.mode = DlssNrMode::eOn; + o.intensity = want.intensity; + o.localToneStrength = want.local_tone; + o.localStructureStrength = want.local_structure; + o.globalToneStrength = want.global_tone; + o.style = want.style; + o.preset = want.preset; + o.useAutoMask = want.auto_mask ? 1u : 0u; + o.skinStructureStrength = want.skin; + o.performanceMode = want.quality; + result = s.set_options(viewport, o); + } + sl::FrameToken* token{}; + const uint32_t index = s.frame++; + if (result == sl::Result::eOk) { + stage = "slGetNewFrameToken"; + result = streamline::api().get_new_frame_token(token, &index); + } + if (result == sl::Result::eOk) { + stage = "slSetConstants"; + result = streamline::api().set_constants(scene_constants(sw, sh, recreated), *token, + viewport); + } + // The usage each resource is *presented to Streamline as*, which is what Dagor's shipping + // integration passes: what the model reads is sampled, what it writes is a storage image. + // Handing it the images' whole usage mask instead told it the input was writable too. + sl::Resource color_in = resource(s.in, kColorFormat, + VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, sw, sh, + VK_IMAGE_USAGE_SAMPLED_BIT); + sl::Resource color_out = resource(s.out, kColorFormat, VK_IMAGE_LAYOUT_GENERAL, sw, sh, + VK_IMAGE_USAGE_STORAGE_BIT); + sl::Resource depth = resource(s.depth, kDepthFormat, + VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, sw, sh, + VK_IMAGE_USAGE_SAMPLED_BIT); + sl::Resource motion = resource(s.motion, kMotionFormat, + VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, sw, sh, + VK_IMAGE_USAGE_SAMPLED_BIT); + const sl::Extent area{0, 0, sw, sh}; + const sl::ResourceTag tags[] = { + sl::ResourceTag{&color_in, sl::kBufferTypeUpliftInputColor, + sl::ResourceLifecycle::eValidUntilEvaluate, &area}, + sl::ResourceTag{&color_out, sl::kBufferTypeUpliftOutputColor, + sl::ResourceLifecycle::eValidUntilEvaluate, &area}, + sl::ResourceTag{&depth, sl::kBufferTypeDepth, + sl::ResourceLifecycle::eValidUntilEvaluate, &area}, + sl::ResourceTag{&motion, sl::kBufferTypeMotionVectors, + sl::ResourceLifecycle::eValidUntilEvaluate, &area}, + }; + const auto command_buffer = reinterpret_cast(cmd); + if (result == sl::Result::eOk) { + stage = "slSetTagForFrame"; + result = streamline::api().set_tag_for_frame(*token, viewport, tags, 4, command_buffer); + } + if (result == sl::Result::eOk) { + stage = "slEvaluateFeature"; + const sl::BaseStructure* inputs[] = {&viewport}; + result = streamline::api().evaluate_feature(sl::kFeatureDLSS_NR, *token, inputs, 1, + command_buffer); + // Out of VRAM is the model saying it had to work small, not that it failed. + if (result == sl::Result::eWarnOutOfVRAM) result = sl::Result::eOk; + } + } + if (result != sl::Result::eOk) { + const bool only_options = strcmp(stage, "slDLSSNRSetOptions") == 0; + logf("vk: DLSS 5 neural rendering failed at %s (Streamline result 0x%x); %s", stage, + (unsigned)result, + only_options ? "waiting for those settings to change" : "turning it off for this run"); + // The one failure with a known first suspect. Our DlssNrOptions carries a struct GUID + // recovered from a prerelease plugin and corroborated by nobody who had the real header, so + // a plugin that does not recognize the struct says exactly this. Named here so the next + // person does not spend the day the layout already cost. + if (only_options && result == sl::Result::eErrorInvalidParameter) + logf("vk: ... an invalid parameter from slDLSSNRSetOptions usually means this " + "Streamline does not know our options struct: check the GUID and struct version in " + "gpu/vk/vk_dlssnr_options.h against the plugin"); + if (only_options) s.options_rejected.store(true, std::memory_order_relaxed); + else s.failed.store(true, std::memory_order_relaxed); + return VK_NULL_HANDLE; + } + // The model wrote s.out. The caller presents it instead of the game's image. + barrier(cmd, s.out.image, VK_IMAGE_LAYOUT_GENERAL, VK_IMAGE_LAYOUT_GENERAL, + VK_ACCESS_2_SHADER_WRITE_BIT, + VK_ACCESS_2_TRANSFER_READ_BIT | VK_ACCESS_2_SHADER_READ_BIT); + if (out_view) *out_view = s.out.view; + return s.out.image; +} + +void shutdown() { + State& s = state(); + if (!s.out.image && !s.in.image) return; + { + std::lock_guard qk(dev.present_mu); + device_wait_idle_locked(); + } + if (streamline::nr_available()) + streamline::api().free_resources(sl::kFeatureDLSS_NR, sl::ViewportHandle{kViewport}); + drop(s.in), drop(s.out), drop(s.depth), drop(s.motion); + s.width = s.height = 0; + s.scene_cleared = false; +} + +} // namespace mkwvk::dlssnr + +#else // no Streamline headers, or not Windows + +namespace mkwvk::dlssnr { + +bool built_with_sdk() { return false; } +bool capable() { return false; } +bool asked() { return false; } +VkImage apply(VkCommandBuffer, VkImage, uint32_t, uint32_t, VkImageView*) { return VK_NULL_HANDLE; } +void shutdown() {} + +} // namespace mkwvk::dlssnr + +#endif diff --git a/gpu/vk/vk_dlssnr.h b/gpu/vk/vk_dlssnr.h new file mode 100644 index 000000000..58bb9c289 --- /dev/null +++ b/gpu/vk/vk_dlssnr.h @@ -0,0 +1,57 @@ +// (hookshot) DLSS 5 neural rendering (DLSS-NR): NVIDIA's model over the finished frame. +// +// What it is, because the name invites the wrong guess: DLSS-NR is *not* ray reconstruction. Ray +// reconstruction (sl.dlss_d / NGX's DLSSD) denoises a ray-traced image and needs a G-buffer, albedo, +// normals and roughness, which a 2026 recompilation of a 1998 game does not have and never will. +// DLSS-NR is an "uplift" pass: Streamline's own headers name its buffers +// kBufferTypeUpliftInputColor and kBufferTypeUpliftOutputColor, and the only other things it is +// handed are depth and motion vectors. Colour in, colour out. That is why it runs on rasterized +// content at all, and it is why it can sit here, at the end of the frame, over the picture the +// renderer is about to show -- which is where RenoDX and dlss5-anywhere put it too. +// +// So this backend does not touch the 3D scene. It takes the window's image, hands it to the model, +// and gives back the image to present in its place. Depth and motion are tagged because Streamline +// asks for them, with a flat depth and no motion: at this point in the frame the picture is already +// upscaled and already has the HUD on it, so the scene's real depth buffer does not describe it and +// feeding it would be a lie the model would act on. +// +// Windows only -- see gpu/vk/vk_streamline.h for why, and for the licensing: nothing of NVIDIA's is +// in this repository and nothing of NVIDIA's is linked. On every other build each function here +// answers "no" and the frame goes to the window as it always did. +#pragma once + +#include + +#include "vk_internal.h" + +namespace mkwvk::dlssnr { + +/// Whether this build has Streamline's headers at all (compile-time). The menu says "this build was +/// made without it" rather than "your card cannot do it", which are different problems. +[[nodiscard]] bool built_with_sdk(); + +/// Whether the feature could run: Streamline started, the device is attached and both Streamline and +/// the driver report DLSS-NR as supported here. Cached, because none of it changes while the +/// renderer lives. +[[nodiscard]] bool capable(); + +/// Whether the player has it switched on *right now*. Read live, every frame: the Insert menu's +/// Neural rendering row, or RX_VK_DLSS_NR. A backend that cached this in a `static const` is how the +/// upscaling rows shipped dead once (docs/upscaling.md). +[[nodiscard]] bool asked(); + +/// Records one uplift of `src` (GENERAL, sw x sh) and returns the image to present in its place -- +/// GENERAL, the same size, this backend's own, with its view in `out_view`. Returns VK_NULL_HANDLE +/// when the model did not run, +/// and the caller then presents `src` exactly as it would have: the frame is never lost to this. +/// +/// `src` is only read. Writing the model's result back over the game's own image was the other way +/// to do this and it is not done, because the window texture is the game's and a frame the game +/// reads back would come back changed. +[[nodiscard]] VkImage apply(VkCommandBuffer cmd, VkImage src, uint32_t sw, uint32_t sh, + VkImageView* out_view); + +/// Releases the feature's resources. Before the device goes. +void shutdown(); + +} // namespace mkwvk::dlssnr diff --git a/gpu/vk/vk_dlssnr_options.h b/gpu/vk/vk_dlssnr_options.h new file mode 100644 index 000000000..7434f170a --- /dev/null +++ b/gpu/vk/vk_dlssnr_options.h @@ -0,0 +1,108 @@ +// (hookshot) DLSS 5 neural rendering's options struct. +// +// Streamline's public headers name the feature (kFeatureDLSS_NR = 1004) and its buffers +// (kBufferTypeUpliftInputColor / UpliftOutputColor / UpliftControlMask) but ship no sl_dlss_nr.h: +// the struct that configures the model is only declared in NVIDIA's NDA SDK. It is declared here +// with the layout openNR recovered from a prerelease Streamline 2.13 sl.dlss_nr.dll +// (https://github.com/clshortfuse/openNR, MIT, Copyright 2026 Carlos Lopez). The field names, order +// and defaults follow DagorEngine (BSD-3-Clause), which is the one integration that compiles against +// NVIDIA's real sl_dlss_nr.h -- so Dagor and openNR are genuinely independent of each other and they +// agree exactly on field order, count and types. Nothing of NVIDIA's is copied into this file. +// +// What is NOT independently corroborated, and what to suspect first if this struct is rejected: the +// GUID below and kStructVersion3 come from openNR alone (Dagor includes the real header and so never +// restates them). slDLSSNRSetOptions answering eErrorInvalidParameter means this GUID, before +// anything else -- vk_dlssnr.cpp says so in the log rather than leaving you to rediscover it. +// +// The static_asserts are the point of the file. This struct is passed to code we did not compile, +// so a field at the wrong offset is not a compile error or even a crash -- it is the model reading +// one setting as another, which looks like a bad-looking picture and sends you hunting in the wrong +// place. If a future Streamline moves a field, these fail at build time and say so. +#pragma once + +#if defined(RX_VK_STREAMLINE) && defined(_WIN32) + +#include +#include + +#include + +namespace mkwvk::dlssnr { + +enum class DlssNrMode : uint32_t { + eOff = 0, + eOn = 1, +}; + +// {29DFDFE0-273A-4E72-B492-2DC823D5B1AD} +struct DlssNrOptions : sl::BaseStructure { + static constexpr sl::StructType s_structType = sl::StructType( + {0x29dfdfe0, 0x273a, 0x4e72, {0xb4, 0x92, 0x2d, 0xc8, 0x23, 0xd5, 0xb1, 0xad}}); + + DlssNrOptions() : sl::BaseStructure(s_structType, sl::kStructVersion3) {} + + DlssNrMode mode = DlssNrMode::eOff; + float intensity = 1.0f; + float localToneStrength = 1.0f; + float localStructureStrength = 1.0f; + /// In the ABI and ignored by Streamline 2.14's plugin; kept because it is part of the + /// layout and a later SDK is expected to act on it. + float globalToneStrength = 1.0f; + uint32_t style = 0; + /// 0 is the default model; 1 to 7 pin presets A to G. openNR defaults this to 1, + /// which silently pins preset A; Dagor's real header says 0, which is what this is. + uint32_t preset = 0; + /// Declared uint32_t on purpose. sl::Boolean is `enum Boolean : char`, one byte, which + /// would leave three bytes of uninitialized padding at 0x3d-0x3f inside a struct we hand + /// to code we did not compile. Dagor assigns a plain C++ bool to this field, which would + /// not compile against an unscoped char enum, so the real header's type is not + /// sl::Boolean either. Same offsets, same ABI, and the padding is guaranteed zero. + uint32_t useAutoMask = 0; + /// 0 to 1, and only meaningful where the model knows which pixels are a character: with + /// useAutoMask on, or with a control mask whose skin channel is written. + /// + /// Not -1. openNR defaults this to -1 with no comment, and "negative leaves it to the model" was + /// read into that and then repeated -- including by me, in Elysium. Dagor's real header defaults + /// it to 1.0f, so does nashglyx/ssetest, and dlss5-anywhere documents the range as 0 to 1 with no + /// sentinel. No source anywhere states that a negative value means anything. + float skinStructureStrength = 1.0f; + /// An sl::DLSSMode: 1 performance, 2 balanced, 3 quality, 6 DLAA. In the ABI and, like + /// globalToneStrength, ignored by Streamline 2.14's plugin -- openNR's NGX-direct path does act + /// on it, as PerfQualityValue = this - 1. Sent correctly regardless. + uint32_t performanceMode = 3; +}; + +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Winvalid-offsetof" +#elif defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Winvalid-offsetof" +#endif +// sl::BaseStructure is next (8) + structType (16) + structVersion (8) = 0x20, so every field below +// is offset from there. +static_assert(sizeof(void*) == 8, "DLSS 5 neural rendering is 64-bit Windows only"); +static_assert(sizeof(DlssNrOptions) == 0x48); +static_assert(offsetof(DlssNrOptions, mode) == 0x20); +static_assert(offsetof(DlssNrOptions, intensity) == 0x24); +static_assert(offsetof(DlssNrOptions, localToneStrength) == 0x28); +static_assert(offsetof(DlssNrOptions, localStructureStrength) == 0x2c); +static_assert(offsetof(DlssNrOptions, globalToneStrength) == 0x30); +static_assert(offsetof(DlssNrOptions, style) == 0x34); +static_assert(offsetof(DlssNrOptions, preset) == 0x38); +static_assert(offsetof(DlssNrOptions, useAutoMask) == 0x3c); +static_assert(sizeof(DlssNrOptions::useAutoMask) == 4, "no uninitialized padding at 0x3d"); +static_assert(offsetof(DlssNrOptions, skinStructureStrength) == 0x40); +static_assert(offsetof(DlssNrOptions, performanceMode) == 0x44); +#if defined(__clang__) +#pragma clang diagnostic pop +#elif defined(__GNUC__) +#pragma GCC diagnostic pop +#endif + +using PFun_slDLSSNRSetOptions = sl::Result(const sl::ViewportHandle& viewport, + const DlssNrOptions& options); + +} // namespace mkwvk::dlssnr + +#endif diff --git a/gpu/vk/vk_main.cpp b/gpu/vk/vk_main.cpp index 2ff4fd318..4493b3d86 100644 --- a/gpu/vk/vk_main.cpp +++ b/gpu/vk/vk_main.cpp @@ -23,6 +23,7 @@ #include "vk_internal.h" #include "gpu_choice.h" #include "vk_menu.h" +#include "vk_streamline.h" #include "vk_progress.h" namespace vkx { @@ -109,13 +110,38 @@ bool create_instance() { if (has_extension(all, want)) exts[n_exts++] = want; } #endif + // (hookshot) DLSS 5 neural rendering comes through NVIDIA Streamline, and Streamline has to be + // started before the instance exists: what it loads decides which instance and device + // extensions this instance and device must be created with. It answers "no" on a build without + // its headers, on a PC without sl.interposer.dll, and whenever the player has it switched off, + // and then nothing below changes. gpu/vk/vk_streamline.h says why it is a second NVIDIA path. + std::vector inst_exts(exts, exts + n_exts); + if (streamline::start()) { + const char* sl_want[16] = {}; + const size_t sl_n = streamline::instance_extensions(sl_want, 16); + uint32_t n_all = 0; + vkEnumerateInstanceExtensionProperties(nullptr, &n_all, nullptr); + std::vector all(n_all); + vkEnumerateInstanceExtensionProperties(nullptr, &n_all, all.data()); + for (size_t i = 0; i < sl_n; i++) { + if (!has_extension(all, sl_want[i])) { + logf("vk: streamline wants the instance extension %s, which this loader does not " + "have: DLSS 5 neural rendering will be unavailable", sl_want[i]); + continue; + } + bool already = false; + for (const char* have : inst_exts) already = already || strcmp(have, sl_want[i]) == 0; + if (!already) inst_exts.push_back(sl_want[i]), + logf("vk: streamline wants the instance extension %s: enabled", sl_want[i]); + } + } VkApplicationInfo app{VK_STRUCTURE_TYPE_APPLICATION_INFO}; app.pApplicationName = "mkw-recomp"; app.apiVersion = VK_API_VERSION_1_3; VkInstanceCreateInfo ci{VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO}; ci.pApplicationInfo = &app; - ci.enabledExtensionCount = n_exts; - ci.ppEnabledExtensionNames = exts; + ci.enabledExtensionCount = (uint32_t)inst_exts.size(); + ci.ppEnabledExtensionNames = inst_exts.data(); // RX_VK_VALIDATION=1: the Khronos validation layer (when installed) const char* layer = "VK_LAYER_KHRONOS_validation"; if (getenv("RX_VK_VALIDATION")) ci.enabledLayerCount = 1, ci.ppEnabledLayerNames = &layer; @@ -268,6 +294,25 @@ bool create_device() { } } + // (hookshot) And what Streamline's neural rendering plugin needs, asked of Streamline for the + // same reason: the set is the plugin's to state. Same handling as the NGX features above -- an + // extension this GPU does not have is named in the log and left out, and the feature then + // reports itself unavailable rather than taking vkCreateDevice down with it. + { + const char* sl_want[16] = {}; + const size_t sl_n = streamline::device_extensions(sl_want, 16); + for (size_t i = 0; i < sl_n; i++) { + if (!has_extension(exts, sl_want[i])) { + logf("vk: streamline wants %s, which this GPU does not have: DLSS 5 neural " + "rendering will be unavailable", sl_want[i]); + continue; + } + bool already = false; + for (const char* have : want) already = already || strcmp(have, sl_want[i]) == 0; + if (!already) want.push_back(sl_want[i]), logf("vk: streamline wants %s: enabled", sl_want[i]); + } + } + // the queue: one family for graphics, compute and transfer vkGetPhysicalDeviceQueueFamilyProperties(dev.physical, &n, nullptr); std::vector families(n); @@ -278,11 +323,22 @@ bool create_device() { (VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT)) dev.queue_family = i; if (dev.queue_family == UINT32_MAX) return false; - const float priority = 1.0f; + // (hookshot) Streamline's own queues follow the renderer's in the graphics family. It asks for + // none for neural rendering today, but it is asked rather than assumed: a plugin that wants one + // and does not get it fails inside a frame, which is the worst place to find out. Whatever the + // family cannot give is reported to streamline::attach_device, which turns the feature off + // cleanly instead. + const uint32_t sl_queues_wanted = streamline::extra_queues(); + const uint32_t sl_queues = + std::min(sl_queues_wanted, families[dev.queue_family].queueCount - 1); + if (sl_queues != sl_queues_wanted) + logf("vk: streamline wants %u queues of the graphics family and it has room for %u", + sl_queues_wanted, sl_queues); + const float priority[8] = {1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f}; VkDeviceQueueCreateInfo q{VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO}; q.queueFamilyIndex = dev.queue_family; - q.queueCount = 1; - q.pQueuePriorities = &priority; + q.queueCount = 1 + std::min(sl_queues, 7u); + q.pQueuePriorities = priority; // (hookshot) The presents on a queue of a compute family of their own, beside the replay's (RX_VK_PRESENT_QUEUE=1 / 0: on / // off; on by default with NVIDIA's driver on Windows, where it was measured). On the replay's queue vkQueuePresentKHR blocked // with dev.present_mu held, ~0.8 ms a present with frame interpolation at 4x and up to 8, and the game's main and presentation @@ -311,7 +367,7 @@ bool create_device() { VkDeviceQueueCreateInfo qs[2] = {q, {VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO}}; qs[1].queueFamilyIndex = compute_family; qs[1].queueCount = 1; - qs[1].pQueuePriorities = &priority; + qs[1].pQueuePriorities = priority; // features: what the hardware has of what the replay uses (all of them on the GPUs MKW-class hardware maps to) VkPhysicalDeviceMeshShaderFeaturesEXT mesh{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_EXT}; @@ -445,6 +501,12 @@ bool create_device() { dev.present_queue = VK_NULL_HANDLE; dev.present_family = dev.queue_family; if (compute_family != UINT32_MAX) vkGetDeviceQueue(dev.device, compute_family, 0, &dev.present_queue), dev.present_family = compute_family; + // (hookshot) The device goes to Streamline before anything is recorded with it: this is where + // it says whether DLSS 5 neural rendering can really run here. It is deliberately after the + // queues are fetched, because it reports how many of the queues it asked for actually exist. + // A false here is not an error -- it is the ordinary case on every card that is not NVIDIA's, + // and the renderer carries on without the feature. + streamline::attach_device(dev.instance, dev.physical, dev.device, dev.queue_family, sl_queues); if (dev.buffer_marker) buffer_markers_init(); coopmat_init(); if (dev.push_descriptor) { diff --git a/gpu/vk/vk_menu.cpp b/gpu/vk/vk_menu.cpp index 33e2b95db..100bc25b7 100644 --- a/gpu/vk/vk_menu.cpp +++ b/gpu/vk/vk_menu.cpp @@ -24,7 +24,8 @@ #include "oot_cheat_items.h" #include "vk_startup_paint.h" -#include "vk_dlss.h" // (built_with_sdk: whether this build can offer DLSS at all) +#include "vk_dlss.h" // (built_with_sdk: whether this build can offer DLSS at all) +#include "vk_dlssnr.h" // (the same, for DLSS 5 neural rendering) #include "vk_work.h" // (after the others: counts the commands that do GPU work, for full_barrier) #ifndef HOOKSHOT_VERSION // (nx2/build.py gives it to this file: nx2/version.py) #define HOOKSHOT_VERSION "unknown" @@ -41,7 +42,10 @@ enum MenuTab { TAB_GRAPHICS = 0, TAB_GAMEPLAY = 1, TAB_CONTROLS = 2, - TAB_COUNT = 3 + // (hookshot) DLSS 5 neural rendering's own tab. Its ten rows are the model's own knobs, which + // belong together and would have doubled the Graphics tab on their own. + TAB_NEURAL = 3, + TAB_COUNT = 4 }; struct Row { @@ -72,6 +76,26 @@ const char* tx_upscale(int v) { if ((unsigned)v >= sizeof t / sizeof t[0]) return t[0]; // (a setting past the row: the label, not the next bytes) return t[v]; } +// (hookshot) DLSS 5 neural rendering's rows. The model names are the quality modes DLSS-NR takes +// (an sl::DLSSMode: performance, balanced, quality, DLAA). The three styles are the plugin's own and +// these are its names for them; the presets are DLSS presets A to G, where Default lets the plugin +// pick -- which is 0, not 1: a preset of 1 silently pins A. A style or preset this plugin does not +// have is refused by Streamline, which turns the row back rather than the feature off +// (vk_dlssnr.cpp). +const char* tx_nr_model(int v) { + static const char* t[] = {"Performance", "Balanced", "Quality", "DLAA"}; + return t[std::min(std::max(v, 0), 3)]; +} +const char* tx_nr_style(int v) { + static const char* t[] = {"Default", "Natural", "Cinematic"}; + return t[std::min(std::max(v, 0), 2)]; +} +const char* tx_nr_preset(int v) { + static char b[16]; + if (v <= 0) return "Default"; + snprintf(b, sizeof b, "Preset %c", 'A' + (v - 1)); + return b; +} const char* tx_percent(int v) { static char b[8]; snprintf(b, sizeof b, "%d%%", v); @@ -244,6 +268,40 @@ Row rows[] = { "Which gamepad button and which keys press each of the Switch's buttons."}, {TAB_GAMEPLAY, "Cheats", nullptr, 0, 0, 0, nullptr, "Open the private gameplay tools."}, + + // Neural rendering (10 rows). Every row here takes effect on the next frame: the backend reads + // them live rather than caching them at start-up, which is the bug that made the upscaling rows + // look dead for a whole release (docs/upscaling.md). + {TAB_NEURAL, "Neural rendering", &opts.nr, 0, 1, 1, tx_onoff, + "DLSS 5 neural rendering: NVIDIA's model goes over the finished frame and rebuilds detail, tone and structure in it. " + "Needs an NVIDIA RTX card and NVIDIA's Streamline files beside the game (readme.md); the rows below are the model's own " + "settings and do nothing while this is Off."}, + {TAB_NEURAL, "Model", &opts.nr_model, 0, 3, 1, tx_nr_model, + "How much work the model does per frame: Performance is the cheapest, DLAA the most expensive, Quality the model's " + "own default. Streamline 2.14's plugin ignores this one -- it is sent correctly and a later NVIDIA release is " + "expected to act on it."}, + {TAB_NEURAL, "Style", &opts.nr_style, 0, 2, 1, tx_nr_style, + "Which look the model aims for. Natural keeps close to what the game drew; Cinematic is the stronger, graded look. " + "A style this version of the plugin does not have is refused and the row goes back."}, + {TAB_NEURAL, "Preset", &opts.nr_preset, 0, 7, 1, tx_nr_preset, + "Which trained network the model uses, as DLSS presets A to G. Default lets the plugin pick, which is usually the " + "newest it has."}, + {TAB_NEURAL, "Intensity", &opts.nr_intensity, 0, 100, 10, tx_percent, + "How much of the model's result is mixed into the frame. 0% leaves the picture as the game drew it; 100% is the " + "model's full effect."}, + {TAB_NEURAL, "Local tone", &opts.nr_local_tone, 0, 100, 10, tx_percent, + "How far the model may move brightness and colour within a small area. Lower keeps the game's own shading."}, + {TAB_NEURAL, "Local structure", &opts.nr_local_structure, 0, 100, 10, tx_percent, + "How much fine detail the model adds back -- texture, edges, small shapes. Too much looks etched."}, + {TAB_NEURAL, "Global tone", &opts.nr_global_tone, 0, 100, 10, tx_percent, + "How far the model may move the whole frame's brightness and contrast. Like Model, Streamline 2.14's plugin ignores " + "this and a later one is expected to use it."}, + {TAB_NEURAL, "Skin structure", &opts.nr_skin, 0, 100, 10, tx_percent, + "How much detail the model adds to faces and skin, separately from everything else. It only does anything with Auto " + "mask on, which is how the model knows which pixels are a character."}, + {TAB_NEURAL, "Auto mask", &opts.nr_auto_mask, 0, 1, 1, tx_onoff, + "Lets the model find the characters in the frame by itself, which is what Skin structure needs. Also helps it leave " + "the HUD and text alone, which it has no reason to rebuild."}, }; constexpr int kCheatsRow = sizeof rows / sizeof rows[0] - 1; bool cheats_enabled = false; @@ -334,7 +392,7 @@ constexpr int kRows = sizeof rows / sizeof rows[0]; constexpr int kMenuWidth = menu_hit::kWidth; // (at a scale of 1: 720 lines) int cur_tab = TAB_GRAPHICS; -int tab_selected[TAB_COUNT] = {0, 0, 0}; +int tab_selected[TAB_COUNT] = {0, 0, 0, 0}; int tab_row_count(int t) { int c = 0; @@ -877,9 +935,9 @@ void paint_menu(HDC dc, uint32_t w, uint32_t h, int s) { TextOutA(dc, (int)w - 16 * s - rbsz.cx, tab_y + 8 * s, rb_hint, (int)strlen(rb_hint)); HFONT tab_font = font(13 * s, FW_BOLD); SelectObject(dc, tab_font); - const char* const tab_titles[TAB_COUNT] = {"GRAPHICS", "GAMEPLAY", "CONTROLS"}; + const char* const tab_titles[TAB_COUNT] = {"GRAPHICS", "GAMEPLAY", "CONTROLS", "NEURAL"}; const int center_start = menu_hit::kTabSide * s; - const int tab_slot_w = menu_hit::tab_slot_w(s, (int)w); + const int tab_slot_w = menu_hit::tab_slot_w(s, (int)w, TAB_COUNT); for (int t = 0; t < TAB_COUNT; t++) { const bool active = (t == cur_tab); int slot_x = center_start + t * tab_slot_w; @@ -1112,9 +1170,10 @@ void menu_init() { done = true; for (auto& count : item_counts) count.store(-1, std::memory_order_relaxed); // (hookshot) A build with no NGX SDK cannot do DLSS at all -- the half that calls it is not - // compiled in -- so the row must not offer it. Every released build is such a build: CI has no - // NVIDIA SDK and none may be committed (CONTRIBUTING.md), and a setting that silently does - // nothing is worse than one that is not there. FSR needs nothing and is always offered. + // compiled in -- so the row must not offer it. A setting that silently does nothing is worse + // than one that is not there. FSR needs nothing and is always offered. (The released Windows + // and Linux builds *are* built against the SDK now: CI fetches it and nothing of NVIDIA's is + // committed. A build made by hand without it is what this covers.) if (!dlss::built_with_sdk()) for (Row& r : rows) if (r.value == &opts.upscale) { @@ -1127,6 +1186,18 @@ void menu_init() { "DLSS is not offered: this build was made without NVIDIA's NGX SDK (readme.md says how to " "build with it). Applies after a restart."; } + // The same, for DLSS 5 neural rendering: its ten rows are the model's own and none of them can + // do anything in a build with no Streamline headers, or on Linux, where Streamline has no + // plugins to load. The switch is left in place and says why, because a missing tab is a bug + // report and a tab that explains itself is not. + if (!dlssnr::built_with_sdk()) + for (Row& r : rows) + if (r.value == &opts.nr) { + r.hi = 0; + r.help = "DLSS 5 neural rendering is not offered by this build. It needs NVIDIA Streamline, which is " + "Windows-only: on Linux, run the Windows build under Proton. A Windows build made without " + "Streamline's headers says this too (readme.md says how to build with them)."; + } bool has_options = false; const char* cheats = getenv("HOS_OOT_CHEATS"); cheats_enabled = cheats && !strcmp(cheats, "1"); diff --git a/gpu/vk/vk_menu.h b/gpu/vk/vk_menu.h index 91dbe0c01..fc1179321 100644 --- a/gpu/vk/vk_menu.h +++ b/gpu/vk/vk_menu.h @@ -32,6 +32,19 @@ struct Options { int preset = 0; // quality preset: 0 Custom, 1 Minimum (4GB), 2 Low (6GB), 3 Balanced (8GB), 4 High (12GB), 5 Ultra (16GB+) int vram_mb = 0; // dynamic texture cache budget limit in MB int mirror_mb = 0; // staging mirror limit in MB + // (hookshot) DLSS 5 neural rendering (gpu/vk/vk_dlssnr.h). Off out of the box, like every other + // feature here. The model's own knobs are percentages because that is what a slider can say; the + // backend divides by 100 for the float Streamline wants. + int nr = 0; // 0 off, 1 on + int nr_model = 2; // 0 Performance, 1 Balanced, 2 Quality, 3 DLAA + int nr_style = 0; // 0 Default, 1 Natural, 2 Cinematic + int nr_preset = 0; // 0 the plugin's default model, 1 to 7 pin presets A to G + int nr_intensity = 100; // how much of the uplift is mixed in, percent + int nr_local_tone = 100; // local tone strength, percent + int nr_local_structure = 100; // local structure strength, percent + int nr_global_tone = 100; // global tone strength, percent + int nr_skin = 100; // skin structure strength, percent (Auto mask decides where) + int nr_auto_mask = 0; // the model picks what to leave alone }; extern Options opts; @@ -47,6 +60,30 @@ inline int window_filter() { inline int scene_upscaler() { return opts.upscale >= 3 ? opts.upscale - 2 : 0; } +/// (hookshot) DLSS 5 neural rendering's settings as the backend wants them, read live so that a +/// change in the menu reaches the next frame. The quality field is an sl::DLSSMode, which is what +/// DLSS-NR takes: 1 performance, 2 balanced, 3 quality, 6 DLAA. +struct NrSettings { + bool on; + unsigned quality; + unsigned style; + unsigned preset; + float intensity, local_tone, local_structure, global_tone, skin; + bool auto_mask; + bool operator==(const NrSettings&) const = default; +}; +inline NrSettings nr_settings() { + const unsigned quality = opts.nr_model == 0 ? 1u : opts.nr_model == 1 ? 2u + : opts.nr_model == 3 ? 6u : 3u; + return NrSettings{ + opts.nr != 0, quality, (unsigned)(opts.nr_style < 0 ? 0 : opts.nr_style), + (unsigned)(opts.nr_preset < 0 ? 0 : opts.nr_preset), + (float)opts.nr_intensity / 100.0f, (float)opts.nr_local_tone / 100.0f, + (float)opts.nr_local_structure / 100.0f, (float)opts.nr_global_tone / 100.0f, + (float)opts.nr_skin / 100.0f, opts.nr_auto_mask != 0, + }; +} + /// (vk_memory.cpp) true when the quality preset's memory budgets (vram_mb, mirror_mb) are to be used: the card has no more /// video memory than the preset is for. A 4GB preset on an 8 GB card kept 256 MB of mirrors and 2.2 GB of textures: the /// game's memory was read over PCIe and the textures made again every frame, 5 fps with the CPU idle (Discord, 11-08) diff --git a/gpu/vk/vk_menu_hit.h b/gpu/vk/vk_menu_hit.h index b782c961f..d0edab942 100644 --- a/gpu/vk/vk_menu_hit.h +++ b/gpu/vk/vk_menu_hit.h @@ -52,7 +52,10 @@ inline void origin(int img_w, int img_h, int menu_w, int menu_h, int* x0, int* y *y0 = (img_h - menu_h) / 2; } inline int rows_top(int s) { return (kTabY + kTabH + kRowGap) * s; } -inline int tab_slot_w(int s, int w) { return (w - 2 * kTabSide * s) / 3; } +// (hookshot) The tab titles share the width between the [Q / LB] and [E / RB] hints. `tabs` +// was 3 outright until DLSS 5 neural rendering brought a fourth tab; it defaults to 3 so the +// older callers and their tests mean what they meant. +inline int tab_slot_w(int s, int w, int tabs = 3) { return (w - 2 * kTabSide * s) / (tabs > 0 ? tabs : 1); } /// A slider's value for a point along its track (lo to hi in steps of step), nearest step, held to its ends inline int slider_value(int permille, int lo, int hi, int step) { if (step <= 0 || hi <= lo) return lo; @@ -74,7 +77,7 @@ inline Hit options(int x, int y, int s, int w, int h, int tabs, int rows, const Hit hit; if (x < 0 || y < 0 || x >= w || y >= h) return hit.part = kOutside, hit; if (y >= kTabY * s && y < (kTabY + kTabH) * s) { - const int side = kTabSide * s, slot = tab_slot_w(s, w); + const int side = kTabSide * s, slot = tab_slot_w(s, w, tabs); if (x < side) hit.part = kTabPrev; else if (x >= w - side) hit.part = kTabNext; else if (slot > 0) { diff --git a/gpu/vk/vk_replay.cpp b/gpu/vk/vk_replay.cpp index bb415adf9..242233810 100644 --- a/gpu/vk/vk_replay.cpp +++ b/gpu/vk/vk_replay.cpp @@ -29,6 +29,7 @@ #include "vk_dump.h" #include "vk_gprof.h" #include "vk_framegen.h" +#include "vk_dlssnr.h" #include "vk_menu.h" #include "vk_jobs.h" #include "vk_shader.h" @@ -3059,6 +3060,14 @@ void present_image(VkImage src, uint32_t sw, uint32_t sh, const int crop[4], VkI vkBeginCommandBuffer(f.cmd, &bi); VkImage dst = dev.swap_images[index]; full_barrier(f.cmd); // (after the game's work for the frame: earlier submits on this queue) + // (hookshot) DLSS 5 neural rendering, over the frame as the game finished it and before anything + // of ours is drawn on top: the model gets the picture, not the menu or the FPS counter, which it + // has no reason to rebuild. It gives back an image of its own and the game's is left untouched; + // a frame it could not do returns null and goes to the window exactly as it always did. + if (src) { + VkImageView nr_view = VK_NULL_HANDLE; + if (const VkImage nr = dlssnr::apply(f.cmd, src, sw, sh, &nr_view)) src = nr, view = nr_view; + } image_barrier(f.cmd, dst, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); const bool preserve_stretch = host && host->aspect_ratio && host->aspect_ratio() > 1.0f; const PresentRect rect = present_rect(sw, sh, crop, dev.swap_extent.width, dev.swap_extent.height, preserve_stretch); diff --git a/gpu/vk/vk_streamline.cpp b/gpu/vk/vk_streamline.cpp new file mode 100644 index 000000000..bc072eafb --- /dev/null +++ b/gpu/vk/vk_streamline.cpp @@ -0,0 +1,377 @@ +// (hookshot) The NVIDIA Streamline session; see gpu/vk/vk_streamline.h for why it exists beside the +// NGX one. Everything that touches Streamline is inside RX_VK_STREAMLINE and _WIN32; the stubs at +// the bottom are what a build without either compiles, so the renderer's call sites need no #ifdef. + +#include "vk_streamline.h" + +#if defined(RX_VK_STREAMLINE) && defined(_WIN32) + +#include + +#include +#include + +#include +#include +#include + +#include "vk_streamline_api.h" + +namespace mkwvk::streamline { +namespace { + +// A custom engine names itself with its own project id rather than an application id from NVIDIA. +// A real UUID, because Streamline rejects anything else outright -- the same mistake cost a day on +// the NGX side (docs/upscaling.md: FAIL_InvalidParameter 0xbad00005). +constexpr const char* kProjectId = "6f2b1d84-97c5-4ea3-bd10-5c7a4e8f20b6"; + +struct State { + HMODULE module{}; + bool started{}; + bool attached{}; + bool nr{}; + std::wstring plugin_dir; + std::vector instance_exts; + std::vector device_exts; + // Pointers into instance_exts / device_exts, handed out by the extension getters. The strings + // are never touched again once start() returns, so the pointers stay good for the process. + std::vector instance_names; + std::vector device_names; + uint32_t extra_graphics{}; + uint32_t extra_compute{}; + + Api api{}; +}; + +State& state() { + static State s; + return s; +} + +int log_level() { + const char* const v = getenv("RX_VK_STREAMLINE_LOG"); + return v ? atoi(v) : 0; +} + +void log_from_streamline(sl::LogType type, const char* message) { + std::string text{message ? message : ""}; + while (!text.empty() && (text.back() == '\n' || text.back() == '\r')) text.pop_back(); + if (type == sl::LogType::eError) logf("vk: streamline error: %s", text.c_str()); + else if (type == sl::LogType::eWarn) logf("vk: streamline warning: %s", text.c_str()); + else if (log_level() > 0) logf("vk: streamline: %s", text.c_str()); +} + +/// Where sl.interposer.dll may be: RX_VK_STREAMLINE_DIR, then a `streamline` folder beside the +/// executable, then the executable's own folder. A player who drops NVIDIA's DLLs next to the game +/// should not also have to set an environment variable. +std::vector search_dirs() { + std::vector dirs; + wchar_t env[1024]; + if (const DWORD n = GetEnvironmentVariableW(L"RX_VK_STREAMLINE_DIR", env, 1024); n && n < 1024) + dirs.emplace_back(env); + wchar_t exe[MAX_PATH]; + if (const DWORD n = GetModuleFileNameW(nullptr, exe, MAX_PATH); n && n < MAX_PATH) { + std::wstring dir{exe}; + if (const size_t cut = dir.find_last_of(L"\\/"); cut != std::wstring::npos) { + dir.resize(cut); + dirs.push_back(dir + L"\\streamline"); + dirs.push_back(dir); + } + } + return dirs; +} + +template +bool resolve(HMODULE m, const char* name, T*& fn) { + fn = reinterpret_cast(GetProcAddress(m, name)); + if (!fn) logf("vk: sl.interposer.dll has no %s: neural rendering is off", name); + return fn != nullptr; +} + +/// Whether the file carries a signature Windows trusts, and whether that signature is NVIDIA's. +/// +/// Written out here rather than taken from Streamline's own sl_security.h on purpose: that header's +/// verifyEmbeddedSignature uses WINTRUST_SIGNATURE_SETTINGS, which the Windows SDK has and +/// llvm-mingw's headers do not, and Hookshot builds for Windows with either (third_party/a64-kit). +/// This uses only what both have. Trust alone is not enough -- it would accept anything signed by +/// anyone Windows trusts -- so the subject name is read too. +bool signed_by_nvidia(const std::wstring& path) { + WINTRUST_FILE_INFO file{}; + file.cbStruct = sizeof file; + file.pcwszFilePath = path.c_str(); + GUID action = WINTRUST_ACTION_GENERIC_VERIFY_V2; + WINTRUST_DATA data{}; + data.cbStruct = sizeof data; + data.dwUIChoice = WTD_UI_NONE; + data.fdwRevocationChecks = WTD_REVOKE_NONE; // (a player may well be offline) + data.dwUnionChoice = WTD_CHOICE_FILE; + data.pFile = &file; + data.dwStateAction = WTD_STATEACTION_VERIFY; + const LONG status = WinVerifyTrust(nullptr, &action, &data); + data.dwStateAction = WTD_STATEACTION_CLOSE; + WinVerifyTrust(nullptr, &action, &data); + if (status != ERROR_SUCCESS) { + logf("vk: sl.interposer.dll has no signature Windows trusts (status %#lx)", + (unsigned long)status); + return false; + } + // Whose signature it is. A trusted signature by somebody else is not a reason to load it. + HCERTSTORE store{}; + HCRYPTMSG msg{}; + if (!CryptQueryObject(CERT_QUERY_OBJECT_FILE, path.c_str(), + CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED, + CERT_QUERY_FORMAT_FLAG_BINARY, 0, nullptr, nullptr, nullptr, &store, + &msg, nullptr)) { + logf("vk: sl.interposer.dll's signature could not be read (error %lu)", GetLastError()); + return false; + } + DWORD info_size = 0; + bool nvidia = false; + if (CryptMsgGetParam(msg, CMSG_SIGNER_INFO_PARAM, 0, nullptr, &info_size) && info_size) { + std::vector buffer(info_size); + if (CryptMsgGetParam(msg, CMSG_SIGNER_INFO_PARAM, 0, buffer.data(), &info_size)) { + const auto* signer = reinterpret_cast(buffer.data()); + CERT_INFO want{}; + want.Issuer = signer->Issuer; + want.SerialNumber = signer->SerialNumber; + if (PCCERT_CONTEXT cert = CertFindCertificateInStore( + store, X509_ASN_ENCODING, 0, CERT_FIND_SUBJECT_CERT, &want, nullptr)) { + wchar_t name[256] = {}; + CertGetNameStringW(cert, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, nullptr, name, 256); + nvidia = wcsstr(name, L"NVIDIA") != nullptr; + if (!nvidia) + logf("vk: sl.interposer.dll is signed, but not by NVIDIA: not loading it"); + CertFreeCertificateContext(cert); + } + } + } + CryptMsgClose(msg); + CertCloseStore(store, 0); + return nvidia; +} + +bool load(State& s, const std::wstring& path) { + // We are about to load code from a path a player can write to, so a file that is not NVIDIA's + // signed interposer is not loaded at all. + if (!signed_by_nvidia(path)) return false; + s.module = LoadLibraryW(path.c_str()); + if (!s.module) { + logf("vk: could not load sl.interposer.dll (error %lu)", GetLastError()); + return false; + } + HMODULE m = s.module; + Api& a = s.api; + if (resolve(m, "slInit", a.init) && resolve(m, "slShutdown", a.shutdown) && + resolve(m, "slIsFeatureSupported", a.is_feature_supported) && + resolve(m, "slGetFeatureRequirements", a.get_feature_requirements) && + resolve(m, "slGetFeatureVersion", a.get_feature_version) && + resolve(m, "slGetFeatureFunction", a.get_feature_function) && + resolve(m, "slGetNewFrameToken", a.get_new_frame_token) && + resolve(m, "slSetConstants", a.set_constants) && + resolve(m, "slEvaluateFeature", a.evaluate_feature) && + resolve(m, "slFreeResources", a.free_resources) && + resolve(m, "slSetVulkanInfo", a.set_vulkan_info) && + resolve(m, "slSetTagForFrame", a.set_tag_for_frame)) + return true; + FreeLibrary(s.module); + s.module = nullptr; + s.api = {}; + return false; +} + +void add_names(std::vector& list, uint32_t count, const char** names) { + for (uint32_t i = 0; i < count; i++) { + bool have = false; + for (const std::string& s : list) have = have || s == names[i]; + if (!have) list.emplace_back(names[i]); + } +} + +} // namespace + +const Api& api() { return state().api; } + +bool built_with_sdk() { return true; } + +bool start() { + State& s = state(); + if (s.started) return true; + if (const char* off = getenv("RX_VK_DLSS_NR"); off && atoi(off) == 0) return false; + if (!s.module) { + std::wstring found; + for (const std::wstring& dir : search_dirs()) { + const std::wstring candidate = dir + L"\\sl.interposer.dll"; + if (GetFileAttributesW(candidate.c_str()) != INVALID_FILE_ATTRIBUTES) { + found = candidate; + s.plugin_dir = dir; + break; + } + } + if (found.empty()) { + logf("vk: no sl.interposer.dll beside the game or in RX_VK_STREAMLINE_DIR: DLSS 5 " + "neural rendering is unavailable (readme.md says which files to put there)"); + return false; + } + if (!load(s, found)) return false; + } + + // Only neural rendering. Streamline's own DLSS and DLSS-G plugins are deliberately not asked + // for: super resolution and frame generation go through our own NGX session (gpu/vk/vk_ngx.h), + // and two NGX sessions over one device is the bug this avoids. + sl::Feature features[] = {sl::kFeatureDLSS_NR}; + const wchar_t* plugin_paths[] = {s.plugin_dir.c_str()}; + sl::Preferences p{}; + p.logLevel = log_level() >= 2 ? sl::LogLevel::eVerbose : sl::LogLevel::eOff; + p.logMessageCallback = log_from_streamline; + p.pathsToPlugins = plugin_paths; + p.numPathsToPlugins = 1; + // eUseManualHooking: the renderer creates its own instance and device and hands them over with + // slSetVulkanInfo, rather than letting the interposer wrap vkCreateDevice. + // eUseFrameBasedResourceTagging: slSetTagForFrame, which is how the uplift buffers are tagged. + // eDisableCLStateTracking: the feature binds its own pipelines and descriptors, and the replay + // re-establishes its state after a present anyway. + // eAllowOTA and eLoadDownloadedPlugins are deliberately NOT set: they let Streamline fetch and + // load plugins over the network and bootstrap nvngx_update.exe, and a game has no business + // starting an updater. DagorEngine's shipping integration sets neither either. + p.flags = sl::PreferenceFlags::eDisableCLStateTracking | + sl::PreferenceFlags::eUseManualHooking | + sl::PreferenceFlags::eUseFrameBasedResourceTagging; + p.featuresToLoad = features; + p.numFeaturesToLoad = 1; + p.engine = sl::EngineType::eCustom; + p.engineVersion = "1.0"; + p.projectId = kProjectId; + p.renderAPI = sl::RenderAPI::eVulkan; + if (const sl::Result r = s.api.init(p, sl::kSDKVersion); r != sl::Result::eOk) { + logf("vk: NVIDIA Streamline did not start (result 0x%x): DLSS 5 neural rendering is off", + (unsigned)r); + return false; + } + + sl::FeatureRequirements req{}; + if (const sl::Result r = s.api.get_feature_requirements(sl::kFeatureDLSS_NR, req); + r != sl::Result::eOk) { + logf("vk: Streamline found no sl.dlss_nr plugin (result 0x%x): put it next to " + "sl.interposer.dll", (unsigned)r); + s.api.shutdown(); + return false; + } + add_names(s.instance_exts, req.vkNumInstanceExtensions, req.vkInstanceExtensions); + add_names(s.device_exts, req.vkNumDeviceExtensions, req.vkDeviceExtensions); + s.extra_graphics = req.vkNumGraphicsQueuesRequired; + s.extra_compute = req.vkNumComputeQueuesRequired; + // The KHR and EXT buffer device address extensions cannot both be enabled on one device. + if (std::find(s.device_exts.begin(), s.device_exts.end(), + std::string{"VK_KHR_buffer_device_address"}) != s.device_exts.end()) + s.device_exts.erase(std::remove(s.device_exts.begin(), s.device_exts.end(), + std::string{"VK_EXT_buffer_device_address"}), + s.device_exts.end()); + for (const std::string& e : s.instance_exts) s.instance_names.push_back(e.c_str()); + for (const std::string& e : s.device_exts) s.device_names.push_back(e.c_str()); + s.nr = true; + s.started = true; + sl::FeatureVersion v{}; + if (s.api.get_feature_version(sl::kFeatureDLSS_NR, v) == sl::Result::eOk) + logf("vk: NVIDIA Streamline %s started for DLSS 5 neural rendering (NGX %s), %u instance " + "and %u device extensions, %u extra graphics and %u compute queues", + v.versionSL.toStr().c_str(), v.versionNGX.toStr().c_str(), + (unsigned)s.instance_exts.size(), (unsigned)s.device_exts.size(), s.extra_graphics, + s.extra_compute); + else + logf("vk: NVIDIA Streamline started for DLSS 5 neural rendering"); + return true; +} + +size_t instance_extensions(const char** out, size_t max) { + State& s = state(); + if (!s.started) return 0; + const size_t n = s.instance_names.size() < max ? s.instance_names.size() : max; + for (size_t i = 0; i < n; i++) out[i] = s.instance_names[i]; + return n; +} + +size_t device_extensions(const char** out, size_t max) { + State& s = state(); + if (!s.started) return 0; + const size_t n = s.device_names.size() < max ? s.device_names.size() : max; + for (size_t i = 0; i < n; i++) out[i] = s.device_names[i]; + return n; +} + +uint32_t extra_queues() { + State& s = state(); + return s.started ? s.extra_graphics + s.extra_compute : 0; +} + +bool attach_device(VkInstance instance, VkPhysicalDevice gpu, VkDevice device, + uint32_t graphics_family, uint32_t extra_queues_made) { + State& s = state(); + if (!s.started || s.attached) return false; + if (extra_queues_made < s.extra_graphics + s.extra_compute) { + logf("vk: the graphics family has no room for the %u queues Streamline wants (only %u were " + "made): DLSS 5 neural rendering is off", + s.extra_graphics + s.extra_compute, extra_queues_made); + s.nr = false; + stop(); + return false; + } + // Streamline's queues follow the renderer's own in the graphics family, graphics first. + sl::VulkanInfo info{}; + info.instance = instance; + info.physicalDevice = gpu; + info.device = device; + info.graphicsQueueFamily = graphics_family; + info.graphicsQueueIndex = 1; + info.computeQueueFamily = graphics_family; + info.computeQueueIndex = 1 + s.extra_graphics; + if (const sl::Result r = s.api.set_vulkan_info(info); r != sl::Result::eOk) { + logf("vk: Streamline did not take the Vulkan device (result 0x%x)", (unsigned)r); + stop(); + return false; + } + sl::AdapterInfo adapter{}; + adapter.vkPhysicalDevice = gpu; + if (const sl::Result r = s.api.is_feature_supported(sl::kFeatureDLSS_NR, adapter); + r != sl::Result::eOk) { + logf("vk: DLSS 5 neural rendering is not supported on this GPU or driver (Streamline " + "result 0x%x)", (unsigned)r); + s.nr = false; + stop(); + return false; + } + s.attached = true; + logf("vk: NVIDIA Streamline attached: DLSS 5 neural rendering is available"); + return true; +} + +bool nr_available() { + State& s = state(); + return s.started && s.attached && s.nr; +} + +void stop() { + State& s = state(); + if (!s.started) return; + const sl::Result r = s.api.shutdown(); + s.started = s.attached = false; + logf("vk: NVIDIA Streamline stopped (result 0x%x)", (unsigned)r); +} + +} // namespace mkwvk::streamline + +#else // no Streamline headers, or not Windows + +namespace mkwvk::streamline { + +bool built_with_sdk() { return false; } +bool start() { return false; } +size_t instance_extensions(const char**, size_t) { return 0; } +size_t device_extensions(const char**, size_t) { return 0; } +uint32_t extra_queues() { return 0; } +bool attach_device(VkInstance, VkPhysicalDevice, VkDevice, uint32_t, uint32_t) { return false; } +bool nr_available() { return false; } +void stop() {} + +} // namespace mkwvk::streamline + +#endif diff --git a/gpu/vk/vk_streamline.h b/gpu/vk/vk_streamline.h new file mode 100644 index 000000000..1192bfbd6 --- /dev/null +++ b/gpu/vk/vk_streamline.h @@ -0,0 +1,69 @@ +// (hookshot) The NVIDIA Streamline session DLSS 5 neural rendering comes through. +// +// Why a second NVIDIA path at all, when gpu/vk/vk_ngx.h already owns an NGX session: DLSS 5 neural +// rendering (DLSS-NR) is not a feature a program can create for itself through NGX. The public NGX +// SDK does not name it, and the only entry point that configures it -- slDLSSNRSetOptions -- lives +// inside NVIDIA's sl.dlss_nr plugin, reached through sl.interposer.dll. So super resolution and +// frame generation keep their direct NGX path, which is measured and works, and neural rendering +// gets this one beside it. Only the features this session asks Streamline to load are loaded, and +// it asks for neural rendering alone, so Streamline's own DLSS and DLSS-G plugins never come up +// against our NGX session over the same device. +// +// Windows only, and that is Streamline's limit rather than ours: the interposer and every sl.* +// plugin ship as DLLs. On Linux every function here answers "no" and the renderer is exactly the +// renderer it was; a player on Linux reaches DLSS-NR by running the Windows build under Proton, +// which is where it was measured (docs/neural-rendering.md). +// +// Nothing of NVIDIA's is in this repository and nothing of NVIDIA's is needed to build it. Only +// Streamline's MIT-licensed headers are compiled in, behind the build-time gate RX_VK_STREAMLINE +// (nx2/build.py streamline_sdk_path), and sl.interposer.dll is the player's own copy, loaded from +// their PC at run time and checked for NVIDIA's signature before it is trusted. +#pragma once + +#include +#include + +#include "vk_internal.h" + +namespace mkwvk::streamline { + +/// Whether this build has Streamline's headers at all. Compile-time, so the menu can say "this +/// build was made without it" rather than "your GPU cannot do it", which are different problems +/// with different fixes. +[[nodiscard]] bool built_with_sdk(); + +/// Loads sl.interposer.dll and starts Streamline with the neural rendering plugin. Must be called +/// *before* vkCreateInstance, because what it loads decides which instance and device extensions +/// the device has to be created with. False, with one line logged, where the player has no +/// interposer, where it is not signed by NVIDIA, or where Streamline refused to start; the renderer +/// then comes up without neural rendering and everything else is unaffected. +/// +/// Asked more than once is free: the answer is kept. +bool start(); + +/// The extensions neural rendering asks for, as Streamline states them. Both return how many names +/// were written, at most `max`; the names last as long as the process. Zero means Streamline is not +/// running, which leaves the instance and device created exactly as they were. Hard-coding either +/// list would be wrong on the next driver, which is why they are asked for rather than written out. +size_t instance_extensions(const char** out, size_t max); +size_t device_extensions(const char** out, size_t max); + +/// Queues of the graphics family Streamline wants beyond the renderer's own, created after it. Zero +/// when Streamline is not running. +[[nodiscard]] uint32_t extra_queues(); + +/// Hands the created device to Streamline and asks whether neural rendering can actually run on it. +/// `extra_queues_made` is how many of extra_queues() the device was created with: fewer than it +/// asked for is reported and the feature is turned off, rather than letting it fail later inside a +/// frame. False when no feature survives, and the session is stopped. +bool attach_device(VkInstance instance, VkPhysicalDevice gpu, VkDevice device, + uint32_t graphics_family, uint32_t extra_queues_made); + +/// Whether DLSS 5 neural rendering can run: Streamline started, the device is attached, and both +/// Streamline and the driver report the feature as supported here. +[[nodiscard]] bool nr_available(); + +/// Ends the session. Safe when nothing was started; call before the device is destroyed. +void stop(); + +} // namespace mkwvk::streamline diff --git a/gpu/vk/vk_streamline_api.h b/gpu/vk/vk_streamline_api.h new file mode 100644 index 000000000..3cdf9ce8f --- /dev/null +++ b/gpu/vk/vk_streamline_api.h @@ -0,0 +1,50 @@ +// (hookshot) Streamline's API as resolved from the player's sl.interposer.dll. +// +// Only for the Streamline sources: it pulls in and Streamline's headers, so the public +// gpu/vk/vk_streamline.h stays free of both and the renderer can call it on any platform. +#pragma once + +#if defined(RX_VK_STREAMLINE) && defined(_WIN32) + +#include + +#include +#include +#include +#include + +namespace mkwvk::streamline { + +/// What this renderer calls. Resolved once, when the interposer is loaded; every pointer here is +/// non-null for the life of a started session, because start() fails if any one of them is missing. +struct Api { + PFun_slInit* init{}; + PFun_slShutdown* shutdown{}; + PFun_slIsFeatureSupported* is_feature_supported{}; + PFun_slGetFeatureRequirements* get_feature_requirements{}; + PFun_slGetFeatureVersion* get_feature_version{}; + PFun_slGetFeatureFunction* get_feature_function{}; + PFun_slGetNewFrameToken* get_new_frame_token{}; + PFun_slSetConstants* set_constants{}; + PFun_slEvaluateFeature* evaluate_feature{}; + PFun_slFreeResources* free_resources{}; + PFun_slSetVulkanInfo* set_vulkan_info{}; + PFun_slSetTagForFrame* set_tag_for_frame{}; +}; + +/// The resolved functions. Only meaningful while a session is started. +[[nodiscard]] const Api& api(); + +/// A feature's own function, by name, or null where the plugin has none by that name. This is the +/// only way to reach slDLSSNRSetOptions: it is not an export of the interposer, it lives inside +/// sl.dlss_nr and comes out through here. +template +[[nodiscard]] T* feature_function(sl::Feature feature, const char* name) { + void* function{}; + if (api().get_feature_function(feature, name, function) != sl::Result::eOk) return nullptr; + return reinterpret_cast(function); +} + +} // namespace mkwvk::streamline + +#endif diff --git a/nx2/build.py b/nx2/build.py index 5adc51a25..3d9753706 100644 --- a/nx2/build.py +++ b/nx2/build.py @@ -126,6 +126,32 @@ def dlss_sdk_path(): return None +def streamline_sdk_path(): + """(hookshot) NVIDIA Streamline's public headers, for DLSS 5 neural rendering, or None. + + DLSS-NR is not an NGX feature a program can create for itself: the only way in is Streamline's + sl.dlss_nr plugin, reached through sl.interposer.dll at run time. Only Streamline's headers are + compiled in -- they are MIT-licensed, and none of them is in this repository (CONTRIBUTING.md): + RX_VK_STREAMLINE_SDK names the builder's own copy, failing that a `streamline-sdk` folder + beside the repository or in the work folder, as the NGX SDK is found above. + + Windows only, and that is Streamline's limit rather than ours: the interposer and every sl.* + plugin ship as DLLs and the headers pull in . A player on Linux gets DLSS-NR by + running the Windows build under Proton, which is where it was measured. + """ + named = os.environ.get("RX_VK_STREAMLINE_SDK") + root = os.path.normpath(os.path.join(kit.HERE, "..")) + places = [named] if named else [os.path.join(root, "streamline-sdk"), + os.path.join(os.path.dirname(root), "streamline-sdk"), + os.path.join(os.environ.get("OOT_WORK", ""), "streamline-sdk")] + for d in places: + if d and os.path.isfile(os.path.join(d, "include", "sl.h")): + return d + if named: + print("RX_VK_STREAMLINE_SDK=%s has no include/sl.h; DLSS 5 neural rendering is left out" % named) + return None + + def dlss_sdk_link(): """(hookshot) What a build with RX_VK_DLSS_SDK= links the DLSS backend against. @@ -161,6 +187,19 @@ def dlss_sdk_link(): return [] +def streamline_link(): + """(hookshot) What a Windows build with Streamline's headers links for the interposer check. + + Nothing of Streamline's and nothing of NVIDIA's: sl.interposer.dll is loaded at run time. These + two are Windows' own, and they are what gpu/vk/vk_streamline.cpp's signed_by_nvidia calls -- + WinVerifyTrust from wintrust and the certificate walk from crypt32. A build without Streamline's + headers does not compile that function and links neither. + """ + if LINUX or not streamline_sdk_path(): + return [] + return ["-lwintrust", "-lcrypt32"] + + def target(): """toolchain.native_target(), with the sysroot on Linux""" return toolchain.native_target() + (["--sysroot=" + SYSROOT] if LINUX and SYSROOT else []) @@ -817,6 +856,11 @@ def main(): # here, and a build without it leaves DLSS reporting itself unavailable. *(["-DRX_VK_DLSS_SDK=1", "-I" + os.path.join(dlss_sdk_path(), "include")] if dlss_sdk_path() else []), + # (hookshot) RX_VK_STREAMLINE_SDK= compiles DLSS 5 neural rendering + # against Streamline's MIT-licensed headers. Nothing is linked: sl.interposer.dll is + # loaded from the player's own PC at run time. Windows only (streamline_sdk_path). + *((["-DRX_VK_STREAMLINE=1", "-I" + os.path.join(streamline_sdk_path(), "include")]) + if (not LINUX and streamline_sdk_path()) else []), # (Eden's recompiler before suyu's root: suyu has its own shader_recompiler/ headers, and a Shader::Info # of the other layout in some objects is what crashed the descriptor walk. MKWVK_INCLUDES changes the # object keys, which leave the include folders out, when this order changes) @@ -990,8 +1034,12 @@ def main(): "-static-libstdc++", "-static-libgcc", "@" + vrsp, "-ldl", "-lpthread", "-lm"] + \ dlss_sdk_link() else: + # (hookshot) dlss_sdk_link() belongs here as much as on the Linux branch: without it a + # Windows build that found an NGX SDK compiled every NVSDK_NGX_* call and then had + # nothing to resolve them against, which is a link failure at the end of a long build -- + # or, worse, a release that quietly shipped without the DLSS it was supposed to have. link = [cc] + toolchain.native_target() + toolchain.native_link() + \ - ["-shared", "-o", vdll, toolchain.link_opt("/map:" + vdll[:-4] + ".map"), "@" + vrsp, "-luser32", "-lgdi32"] + (["-lc++", "-lunwind"] if toolchain.mingw() else []) + ["-shared", "-o", vdll, toolchain.link_opt("/map:" + vdll[:-4] + ".map"), "@" + vrsp, "-luser32", "-lgdi32"] + (["-lc++", "-lunwind"] if toolchain.mingw() else []) + dlss_sdk_link() + streamline_link() r = subprocess.run(link, capture_output=True, text=True) if r.returncode: undefined = sorted({l.strip() for l in (r.stdout + r.stderr).splitlines() if "undefined symbol" in l}) diff --git a/readme.md b/readme.md index 0529fbe4e..26d4a1dd8 100644 --- a/readme.md +++ b/readme.md @@ -184,25 +184,49 @@ Press Insert (or F1) in game, or on a controller the Home #### DLSS on an NVIDIA card -The menu offers **FSR 3.1** everywhere, and **DLSS** only in a build made with NVIDIA's NGX SDK. -Released builds are not: the SDK is NVIDIA's to license and none of it may be committed here, so the -Upscaling row stops at FSR 3.1 and says why. - -You build the game yourself, so you can have DLSS: - -1. Get NVIDIA's DLSS SDK (`github.com/NVIDIA/DLSS`) and put it where the build will find it -- a - folder named `dlss-sdk` beside the Hookshot folder, or name it yourself with - `RX_VK_DLSS_SDK=`. -2. Build the game as usual. The Upscaling row then offers DLSS, and Frame generation will use DLSS - where it can and FSR 3 otherwise. -3. Put NVIDIA's DLSS runtime beside the game: `nvngx_dlss.dll` on Windows (the SDK's - `lib/Windows_x86_64/rel/`), `libnvidia-ngx-dlss.so.*` on Linux. It is theirs to ship, not ours, - so the build will not copy it for you. - -There is no "neural rendering" row. NVIDIA's ray reconstruction denoises ray-traced lighting from a -G-buffer, and this game is rasterized with neither -- so it is not a setting that was left out, it -is one that has nothing to do here. -The same keys close it, and so does Esc. The menu has three tabs, Graphics, Gameplay and Controls: +The menu offers **FSR 3.1** everywhere. **DLSS** -- in the Upscaling row, and behind Frame generation +where the card allows it -- is compiled into the released Windows and Linux builds: CI fetches +NVIDIA's NGX SDK at build time and nothing of NVIDIA's is committed here. A build you make by hand +without the SDK says so in the row rather than offering a setting that does nothing. + +One file is still yours to supply, because it is NVIDIA's to ship and not ours: put **the DLSS +runtime** beside the game -- `nvngx_dlss.dll` on Windows, `libnvidia-ngx-dlss.so.*` on Linux. Both +come from NVIDIA's SDK (`github.com/NVIDIA/DLSS`, `lib/Windows_x86_64/rel/`) or from the NVIDIA app's +own downloads. + +To build with the SDK yourself: put it in a folder named `dlss-sdk` beside the Hookshot folder, or +name it with `RX_VK_DLSS_SDK=`, and build as usual. + +#### DLSS 5 neural rendering + +The **Neural** tab is NVIDIA's DLSS 5 neural rendering: a model that goes over the finished frame and +rebuilds detail, tone and structure in it. It is not an upscaler and not ray reconstruction -- it +takes the picture, not the scene -- so it works on this game, and it stacks with whatever Upscaling +and Frame generation are set to. Ten rows: the switch, Model, Style, Preset, Intensity, Local tone, +Local structure, Global tone, Skin structure and Auto mask. All of them take effect on the next +frame. + +**Windows x64 and an RTX 50-series card.** Streamline ships as DLLs, so on Linux run the Windows +build under Proton. NVIDIA's shipped model looks to be Blackwell-only: an older RTX card will report +the feature unavailable, which is the honest answer and not a bug. + +These files go beside the game, or in a `streamline` folder beside it, or wherever +`RX_VK_STREAMLINE_DIR` points. They are NVIDIA's to ship; Hookshot builds against Streamline's +MIT-licensed headers only and loads nothing it has not checked NVIDIA's signature on: + +| file | what it is | +|---|---| +| `sl.interposer.dll` | Streamline's loader | +| `sl.common.dll`, `sl.pcl.dll` | the interposer needs both, whichever feature loads on top | +| `sl.dlss_nr.dll` | the neural rendering plugin | +| `nvngx_dlssnr.dll` | the model -- it must sit in the same folder as `sl.dlss_nr.dll` | + +Keep the three `sl.*` files from one Streamline release: mixing versions is not a supported +combination. Streamline **2.14.1 or newer** -- older releases do not have the feature at all. +[docs/neural-rendering.md](docs/neural-rendering.md) has the whole picture, including what is +measured and what is not. + +The same keys close it, and so does Esc. The menu has four tabs, Graphics, Gameplay, Controls and Neural: Q and E (or Tab and Shift+Tab) switch between them, LB and RB on a controller. Up and Down choose a row, Left and Right change it (Enter changes it too). On a controller the D-pad chooses and changes, the bottom face button changes too, From 1ba2ede854efde0e8583c6aca49a5e7aa539a11b Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 11:46:28 -0600 Subject: [PATCH 072/119] test(build): the object key depends on the Streamline SDK flag too test_shader_stamp_cache execs the real flag-and-key construction out of nx2/build.py and asserts the exact set of helpers it pulls in. -DRX_VK_STREAMLINE and its include path are decided by streamline_sdk_path, so the object key depends on it exactly as it depends on dlss_sdk_path, and the test said so by failing. Adding it to the set. Co-Authored-By: Claude Opus 5 --- tests/test_shader_stamp_cache.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/test_shader_stamp_cache.py b/tests/test_shader_stamp_cache.py index 767b7f201..d8fa23736 100644 --- a/tests/test_shader_stamp_cache.py +++ b/tests/test_shader_stamp_cache.py @@ -21,8 +21,10 @@ def production_code(path): tree = ast.parse(path.read_text(encoding="utf-8"), filename=str(path)) - # dlss_sdk_path decides a compile flag, so the object key depends on it: it belongs here. - names = {"tree_headers", "vk_sources", "flag_text", "object_key", "dlss_sdk_path"} + # dlss_sdk_path decides a compile flag, so the object key depends on it: it belongs here. So does + # streamline_sdk_path, for the same reason -- it gates -DRX_VK_STREAMLINE and an include path. + names = {"tree_headers", "vk_sources", "flag_text", "object_key", "dlss_sdk_path", + "streamline_sdk_path"} functions = [n for n in tree.body if isinstance(n, ast.FunctionDef) and n.name in names] assert {n.name for n in functions} == names main = next(n for n in tree.body if isinstance(n, ast.FunctionDef) and n.name == "main") From c278ce73dd1c3e9bbe1929e97e9cfcc6dec57885 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 9 Nov 2026 17:46:53 +0000 Subject: [PATCH 073/119] chore(release): 2.6.0 [skip ci] [skip release] ## [2.6.0](https://github.com/notquiteog/Hookshot/compare/v2.5.0...v2.6.0) (2026-11-09) ### Features * add a 1920x1080 docked output mode ([f1dec99](https://github.com/notquiteog/Hookshot/commit/f1dec99690af7ca598bcc66dc8b50fde3a096ef9)), closes [#1134](https://github.com/notquiteog/Hookshot/issues/1134) * **vk:** DLSS 5 neural rendering, with the model's own settings in the menu ([2851bc6](https://github.com/notquiteog/Hookshot/commit/2851bc6b07b46212f8290e690772d03d1b5fbfd9)) --- changelog.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/changelog.txt b/changelog.txt index afd407f58..a4fea930b 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,10 @@ --------------------------------------------------------------------------------------------------- +Version: 2.6.0 +Date: 09. 11. 2026 + Features: + - Vk: DLSS 5 neural rendering, with the model's own settings in the menu. + - Add a 1920x1080 docked output mode. +--------------------------------------------------------------------------------------------------- Version: 2.5.0 Date: 09. 11. 2026 Features: From 271728795a96b8699144b06867a86f1db5827101 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 11:49:30 -0600 Subject: [PATCH 074/119] chore: ignore the release tooling's node_modules and the Streamline headers Both are fetched, never committed: streamline-sdk is NVIDIA Streamline's MIT-licensed headers (nx2/build.py streamline_sdk_path finds it there) and node_modules is what "npm install" makes from the release-only package.json. Neither was ignored, so either one showed up as untracked work in the tree. Co-Authored-By: Claude Opus 5 --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 800b37260..a670ba29b 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,5 @@ build-linux/ # NVIDIA's DLSS SDK, fetched at build time and never committed (docs/upscaling.md) /dlss-sdk/ /streamline-sdk/ +# the release tooling's packages (package.json is release-only; npm install makes this) +/node_modules/ From 70b7d255b465095f131c808cd27600a82a4e5156 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 11:52:45 -0600 Subject: [PATCH 075/119] fix(build): a Windows build linked the ARM64 NGX library, not the x64 one The Windows link started calling dlss_sdk_link() in the DLSS 5 neural rendering commit, and that is when this showed: ld.lld: error: nvsdk_ngx_s.lib(nvsdk_ngx_vulkan_lib.obj): machine type arm64 conflicts with x64 dlss_sdk_link walked the SDK's lib/ folder for the first Windows directory with an nvsdk_ngx_s.lib in it. The SDK's layout is lib/Windows_aarch64/arm64/nvsdk_ngx_s.lib lib/Windows_arm64ec/arm64ec/nvsdk_ngx_s.lib lib/Windows_x86_64/x64/nvsdk_ngx_s.lib so the walk reached Windows_aarch64 first and an x64 build linked an ARM64 library, at the end of a two-minute compile. The architecture is now chosen rather than searched for, by the *target's* name and not platform.machine()'s -- a Windows build may be a cross build from Linux, where this machine is the wrong machine to ask. The fallback search is kept but confined to that architecture's folder, so a wrong-machine library can no longer be reached at all. tests/test_dlss_sdk_link_arch.py builds a fixture in the SDK's real layout, in the order os.walk sees it, and fails if an x64 build picks up anything with aarch64 or arm64ec in its path. Nothing caught this before because nothing linked DLSS on Windows at all. Co-Authored-By: Claude Opus 5 --- nx2/build.py | 31 ++++++++---- tests/test_dlss_sdk_link_arch.py | 84 ++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+), 9 deletions(-) create mode 100644 tests/test_dlss_sdk_link_arch.py diff --git a/nx2/build.py b/nx2/build.py index 3d9753706..3202e22fc 100644 --- a/nx2/build.py +++ b/nx2/build.py @@ -172,18 +172,31 @@ def dlss_sdk_link(): print("DLSS SDK: no %s in %s; DLSS will not link" % (arch, os.path.join(sdk, "lib"))) return [] return ["-L" + lib, "-lnvsdk_ngx"] - # Windows: the SDK ships an import/static library per configuration rather than a .so to -l. - # Named outright because the layout nests by architecture and the name differs by build, and a - # link that silently found nothing would leave every NVSDK_NGX_* symbol undefined at the end of - # a long compile. This was Linux-only before, so a Windows build asked for DLSS, compiled the - # NGX half and then failed to link -- which is exactly what a player on an NVIDIA card hits. - for root, _dirs, files in os.walk(os.path.join(sdk, "lib")): - if "Windows" not in root: - continue + # Windows: the SDK ships a static library per architecture and configuration rather than a .so + # to -l, so it is named outright -- a link that silently found nothing would leave every + # NVSDK_NGX_* symbol undefined at the end of a long compile. + # + # The architecture is chosen, not searched for. Walking lib/ for the first Windows folder with + # an nvsdk_ngx_s.lib in it is what this did, and on the real SDK that folder is Windows_ARM64 -- + # so the link got an ARM64 library for an x64 build and said "machine type arm64 conflicts with + # x64" five times. The name is the target's, not this PC's: a Windows build may be a cross build + # from Linux (RX_TARGET=windows), where platform.machine() describes the wrong machine entirely. + arch = "Windows_ARM64" if "arm" in (os.environ.get("RX_ARCH", "") or "").lower() else "Windows_x86_64" + for name in ("nvsdk_ngx_s.lib", "nvsdk_ngx_d.lib"): + # The SDK keeps the import libraries in lib/Windows_x86_64/x64/ and the *runtime* DLLs in + # rel/ and dev/ beside it. x64 first, because that is where this actually is. + for sub in ("x64", "rel", "dev", ""): + lib = os.path.join(sdk, "lib", arch, sub, name) if sub else os.path.join(sdk, "lib", arch, name) + if os.path.isfile(lib): + return [lib] + # Not there under the name the SDK has used: fall back to a search, but only inside this + # architecture's folder, so a wrong-machine library can no longer be picked. + for root, _dirs, files in os.walk(os.path.join(sdk, "lib", arch)): for name in ("nvsdk_ngx_s.lib", "nvsdk_ngx_d.lib"): if name in files: return [os.path.join(root, name)] - print("DLSS SDK: no nvsdk_ngx_s.lib under %s; DLSS will not link" % os.path.join(sdk, "lib")) + print("DLSS SDK: no nvsdk_ngx_s.lib under %s; DLSS will not link" + % os.path.join(sdk, "lib", arch)) return [] diff --git a/tests/test_dlss_sdk_link_arch.py b/tests/test_dlss_sdk_link_arch.py new file mode 100644 index 000000000..5107cc1cc --- /dev/null +++ b/tests/test_dlss_sdk_link_arch.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python3 +"""The NGX library a Windows build links must be the one for its architecture. + +nx2/build.py used to walk the SDK's lib/ folder for the first Windows directory holding an +nvsdk_ngx_s.lib. On the real SDK that layout is + + lib/Windows_aarch64/arm64/nvsdk_ngx_s.lib + lib/Windows_arm64ec/arm64ec/nvsdk_ngx_s.lib + lib/Windows_x86_64/x64/nvsdk_ngx_s.lib + +and the walk reaches Windows_aarch64 first, so an x64 build linked an ARM64 library and ld.lld said +"machine type arm64 conflicts with x64" five times at the end of a two-minute compile. Nothing +caught it because nothing linked DLSS on Windows at all until the link line started calling +dlss_sdk_link(). This is that test. +""" +import ast +import io +import os +import pathlib +import tempfile +import unittest + +ROOT = pathlib.Path(__file__).resolve().parent.parent +BUILD = ROOT / "nx2" / "build.py" + + +def picker(linux): + """dlss_sdk_path and dlss_sdk_link, lifted out of build.py and run on their own.""" + tree = ast.parse(io.open(BUILD, encoding="utf-8").read(), filename=str(BUILD)) + names = {"dlss_sdk_path", "dlss_sdk_link"} + functions = [n for n in tree.body if isinstance(n, ast.FunctionDef) and n.name in names] + assert {n.name for n in functions} == names, "build.py no longer defines %s" % names + namespace = { + "os": os, "platform": __import__("platform"), "LINUX": linux, + "kit": type("Kit", (), {"HERE": str(ROOT / "nx2")})(), + } + exec(compile(ast.Module(body=functions, type_ignores=[]), str(BUILD), "exec"), namespace) + return namespace["dlss_sdk_link"] + + +class DlssSdkLinkArch(unittest.TestCase): + def setUp(self): + self.temp = tempfile.TemporaryDirectory(prefix="hookshot-dlss-sdk-") + self.addCleanup(self.temp.cleanup) + self.sdk = pathlib.Path(self.temp.name) / "dlss-sdk" + (self.sdk / "include").mkdir(parents=True) + (self.sdk / "include" / "nvsdk_ngx.h").touch() + # The SDK's own layout, in the order os.walk sees it. + for arch, sub in (("Windows_aarch64", "arm64"), ("Windows_arm64ec", "arm64ec"), + ("Windows_x86_64", "x64")): + (self.sdk / "lib" / arch / sub).mkdir(parents=True) + (self.sdk / "lib" / arch / sub / "nvsdk_ngx_s.lib").touch() + for arch in ("Linux_aarch64", "Linux_x86_64"): + (self.sdk / "lib" / arch).mkdir(parents=True) + (self.sdk / "lib" / arch / "libnvsdk_ngx.a").touch() + os.environ["RX_VK_DLSS_SDK"] = str(self.sdk) + self.addCleanup(os.environ.pop, "RX_VK_DLSS_SDK", None) + + def test_windows_links_the_x64_library(self): + got = picker(linux=False)() + self.assertEqual(len(got), 1, got) + self.assertIn("Windows_x86_64", got[0]) + self.assertTrue(os.path.isfile(got[0]), got) + + def test_windows_never_links_an_arm_library(self): + got = picker(linux=False)() + joined = " ".join(got) + for wrong in ("aarch64", "arm64ec", "Windows_arm"): + self.assertNotIn(wrong, joined, + "an x64 build must not link %s: %s" % (wrong, joined)) + + def test_linux_still_links_by_minus_l(self): + got = picker(linux=True)() + self.assertIn("-lnvsdk_ngx", got, got) + self.assertTrue(any(a.startswith("-L") and "Linux_" in a for a in got), got) + + def test_no_sdk_links_nothing(self): + os.environ.pop("RX_VK_DLSS_SDK", None) + os.environ["RX_VK_DLSS_SDK"] = str(self.sdk / "nowhere") + self.assertEqual(picker(linux=False)(), []) + + +if __name__ == "__main__": + unittest.main() From 3365a44334aec7f8c201130b0774defdde17f4d4 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 9 Nov 2026 17:53:11 +0000 Subject: [PATCH 076/119] chore(release): 2.6.1 [skip ci] [skip release] ## [2.6.1](https://github.com/notquiteog/Hookshot/compare/v2.6.0...v2.6.1) (2026-11-09) ### Bug Fixes * **build:** a Windows build linked the ARM64 NGX library, not the x64 one ([70b7d25](https://github.com/notquiteog/Hookshot/commit/70b7d255b465095f131c808cd27600a82a4e5156)) --- changelog.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/changelog.txt b/changelog.txt index a4fea930b..fb279826a 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,9 @@ --------------------------------------------------------------------------------------------------- +Version: 2.6.1 +Date: 09. 11. 2026 + Bugfixes: + - Build: A Windows build linked the ARM64 NGX library, not the x64 one. +--------------------------------------------------------------------------------------------------- Version: 2.6.0 Date: 09. 11. 2026 Features: From 6844a68ce493973a4daebcf39eab7d0526017549 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 11:55:20 -0600 Subject: [PATCH 077/119] docs(readme): the frame generation runtime, and say what a build compiled in Two things a player and a release needed and did not have: - The readme named nvngx_dlss.dll and stopped there. Frame generation with DLSS needs nvngx_dlssg.dll beside it, and without it the row quietly falls back to FSR 3 or the renderer's own blend -- which is correct behaviour and looked like DLSS frame generation being broken. Both runtimes are now in a table, with where they come from, and the fallback is stated. - The build now prints one line each for DLSS and for neural rendering, saying compiled in and from where, or left out and why. "Is DLSS actually in this release?" has been asked of a build three times and guessed at twice; it is in the build log and so in CI's now. It sits outside the branch tests/test_shader_stamp_cache.py execs, so it does not run six times inside a test that is not about printing. Co-Authored-By: Claude Opus 5 --- nx2/build.py | 13 +++++++++++++ readme.md | 15 +++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/nx2/build.py b/nx2/build.py index 3202e22fc..42f689f90 100644 --- a/nx2/build.py +++ b/nx2/build.py @@ -846,6 +846,19 @@ def main(): vk_prebuilt = os.environ.get("HOOKSHOT_VK_PREBUILT", "") if a.standalone and not a.only and vk_prebuilt: print("the Vulkan back end: %s, as built" % vk_prebuilt) + # (hookshot) Say what this back end is being built with, because "is DLSS actually in this + # release?" has been asked of a build three times and guessed at twice. One line, in the build + # log and so in CI's, naming each half. Deliberately outside the branch below: + # tests/test_shader_stamp_cache.py execs that branch to check the object keys, and a print + # inside it would run six times inside a test that is not about printing. + if a.standalone and not a.only: + print("vk: DLSS (NGX): %s" % (("compiled in, from " + dlss_sdk_path()) if dlss_sdk_path() + else "left out (no NGX SDK found; see readme.md)")) + print("vk: DLSS 5 neural rendering (Streamline): %s" + % (("compiled in, from " + streamline_sdk_path()) + if (not LINUX and streamline_sdk_path()) + else ("left out: Windows only" if LINUX else + "left out (no Streamline headers found; see readme.md)"))) elif a.standalone and not a.only and vk_headers and spirv_headers: cxx = toolchain.need(toolchain.find("clang++")) vk = os.path.join(GPU, "vk") diff --git a/readme.md b/readme.md index 659e0f74d..ecad17828 100644 --- a/readme.md +++ b/readme.md @@ -191,10 +191,17 @@ where the card allows it -- is compiled into the released Windows and Linux buil NVIDIA's NGX SDK at build time and nothing of NVIDIA's is committed here. A build you make by hand without the SDK says so in the row rather than offering a setting that does nothing. -One file is still yours to supply, because it is NVIDIA's to ship and not ours: put **the DLSS -runtime** beside the game -- `nvngx_dlss.dll` on Windows, `libnvidia-ngx-dlss.so.*` on Linux. Both -come from NVIDIA's SDK (`github.com/NVIDIA/DLSS`, `lib/Windows_x86_64/rel/`) or from the NVIDIA app's -own downloads. +The runtimes are still yours to supply, because they are NVIDIA's to ship and not ours. Put them +beside the game -- they come from NVIDIA's SDK (`github.com/NVIDIA/DLSS`, out of +`lib/Windows_x86_64/rel/` or `lib/Linux_x86_64/rel/`) or from the NVIDIA app's own downloads: + +| for | Windows | Linux | +|---|---|---| +| Upscaling: DLSS | `nvngx_dlss.dll` | `libnvidia-ngx-dlss.so.*` | +| Frame generation with DLSS | `nvngx_dlssg.dll` | `libnvidia-ngx-dlssg.so.*` | + +Without the frame-generation runtime, Frame generation still works -- it uses FSR 3 where it can and +the renderer's own blend otherwise. You do not pick; the row says what it is using in the log. To build with the SDK yourself: put it in a folder named `dlss-sdk` beside the Hookshot folder, or name it with `RX_VK_DLSS_SDK=`, and build as usual. From 114e917949aa6461a843f2530b3aadb54a3de547 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 12:02:11 -0600 Subject: [PATCH 078/119] fix(build): NGX asks for Microsoft's C++ runtime, which llvm-mingw has not With the x64 library finally chosen, the Windows link got one step further and stopped at ld.lld: error: could not open 'liblibcpmt.a' which is lld MinGW-ifying a name out of a /DEFAULTLIB directive inside NVIDIA's library. NGX's Windows libraries are built with Microsoft's compiler and name its runtime in their objects: nvsdk_ngx_s.lib wants LIBCMT, libcpmt, OLDNAMES and uuid; nvsdk_ngx_d.lib wants MSVCRT, msvcprt, OLDNAMES and uuid. toolchain.native_link already stands the MinGW runtime in for LIBCMT, OLDNAMES, msvcrt and libvcruntime -- it has to, for the prebuilt FFmpeg, which has the same problem -- but not for Microsoft's *C++* runtime. libcpmt and msvcprt finish that list, and only for an llvm-mingw build: the MSVC target has Microsoft's own runtime and nothing to stand in for. uuid is left alone, because MinGW has a libuuid.a of its own. The test grew two cases: that an llvm-mingw build suppresses both, and that the MSVC target suppresses nothing extra. Co-Authored-By: Claude Opus 5 --- nx2/build.py | 14 +- tests/test_dlss_sdk_link_arch.py | 31 ++++- tests/test_nr_settings_live.py | 230 +++++++++++++++++++++++++++++++ 3 files changed, 268 insertions(+), 7 deletions(-) create mode 100644 tests/test_nr_settings_live.py diff --git a/nx2/build.py b/nx2/build.py index 42f689f90..4ce9ba73b 100644 --- a/nx2/build.py +++ b/nx2/build.py @@ -182,19 +182,29 @@ def dlss_sdk_link(): # x64" five times. The name is the target's, not this PC's: a Windows build may be a cross build # from Linux (RX_TARGET=windows), where platform.machine() describes the wrong machine entirely. arch = "Windows_ARM64" if "arm" in (os.environ.get("RX_ARCH", "") or "").lower() else "Windows_x86_64" + # NGX's Windows libraries are built with Microsoft's compiler and ask in their objects for its + # runtime: nvsdk_ngx_s.lib wants LIBCMT, libcpmt, OLDNAMES and uuid, nvsdk_ngx_d.lib wants + # MSVCRT, msvcprt, OLDNAMES and uuid. toolchain.native_link already stands the MinGW runtime in + # for LIBCMT, OLDNAMES, msvcrt and libvcruntime (it has to, for the prebuilt FFmpeg), but not for + # Microsoft's *C++* runtime, so a Windows build stopped at + # ld.lld: error: could not open 'liblibcpmt.a' + # which is lld MinGW-ifying the name "libcpmt" out of a /DEFAULTLIB directive. These two names + # finish that list. uuid is left alone: MinGW has a libuuid.a of its own. + suppress = ["-Wl,-Xlink=/nodefaultlib:" + l for l in ("libcpmt", "msvcprt")] \ + if toolchain.mingw() else [] for name in ("nvsdk_ngx_s.lib", "nvsdk_ngx_d.lib"): # The SDK keeps the import libraries in lib/Windows_x86_64/x64/ and the *runtime* DLLs in # rel/ and dev/ beside it. x64 first, because that is where this actually is. for sub in ("x64", "rel", "dev", ""): lib = os.path.join(sdk, "lib", arch, sub, name) if sub else os.path.join(sdk, "lib", arch, name) if os.path.isfile(lib): - return [lib] + return [lib] + suppress # Not there under the name the SDK has used: fall back to a search, but only inside this # architecture's folder, so a wrong-machine library can no longer be picked. for root, _dirs, files in os.walk(os.path.join(sdk, "lib", arch)): for name in ("nvsdk_ngx_s.lib", "nvsdk_ngx_d.lib"): if name in files: - return [os.path.join(root, name)] + return [os.path.join(root, name)] + suppress print("DLSS SDK: no nvsdk_ngx_s.lib under %s; DLSS will not link" % os.path.join(sdk, "lib", arch)) return [] diff --git a/tests/test_dlss_sdk_link_arch.py b/tests/test_dlss_sdk_link_arch.py index 5107cc1cc..c0cc63567 100644 --- a/tests/test_dlss_sdk_link_arch.py +++ b/tests/test_dlss_sdk_link_arch.py @@ -24,8 +24,12 @@ BUILD = ROOT / "nx2" / "build.py" -def picker(linux): - """dlss_sdk_path and dlss_sdk_link, lifted out of build.py and run on their own.""" +def picker(linux, mingw=""): + """dlss_sdk_path and dlss_sdk_link, lifted out of build.py and run on their own. + + `mingw` stands in for toolchain.mingw(): a non-empty string is an llvm-mingw Windows build, + which needs Microsoft's C++ default-libs suppressed. + """ tree = ast.parse(io.open(BUILD, encoding="utf-8").read(), filename=str(BUILD)) names = {"dlss_sdk_path", "dlss_sdk_link"} functions = [n for n in tree.body if isinstance(n, ast.FunctionDef) and n.name in names] @@ -33,6 +37,7 @@ def picker(linux): namespace = { "os": os, "platform": __import__("platform"), "LINUX": linux, "kit": type("Kit", (), {"HERE": str(ROOT / "nx2")})(), + "toolchain": type("Toolchain", (), {"mingw": staticmethod(lambda host=False: mingw)})(), } exec(compile(ast.Module(body=functions, type_ignores=[]), str(BUILD), "exec"), namespace) return namespace["dlss_sdk_link"] @@ -58,9 +63,25 @@ def setUp(self): def test_windows_links_the_x64_library(self): got = picker(linux=False)() - self.assertEqual(len(got), 1, got) - self.assertIn("Windows_x86_64", got[0]) - self.assertTrue(os.path.isfile(got[0]), got) + libs = [a for a in got if a.endswith(".lib")] + self.assertEqual(len(libs), 1, got) + self.assertIn("Windows_x86_64", libs[0]) + self.assertTrue(os.path.isfile(libs[0]), got) + + def test_mingw_suppresses_microsofts_cxx_default_libs(self): + """NGX's libraries ask in their objects for Microsoft's C++ runtime, which MinGW has not. + + Without this a Windows build stopped at "could not open 'liblibcpmt.a'" -- lld + MinGW-ifying a name out of a /DEFAULTLIB directive -- after a two-minute compile. + """ + got = " ".join(picker(linux=False, mingw="/opt/llvm-mingw")()) + for lib in ("libcpmt", "msvcprt"): + self.assertIn("/nodefaultlib:" + lib, got, got) + + def test_the_msvc_target_suppresses_nothing_extra(self): + """With Microsoft's own runtime present there is nothing to stand in for.""" + got = " ".join(picker(linux=False, mingw="")()) + self.assertNotIn("nodefaultlib", got, got) def test_windows_never_links_an_arm_library(self): got = picker(linux=False)() diff --git a/tests/test_nr_settings_live.py b/tests/test_nr_settings_live.py new file mode 100644 index 000000000..75267d7d4 --- /dev/null +++ b/tests/test_nr_settings_live.py @@ -0,0 +1,230 @@ +#!/usr/bin/env python3 +"""DLSS 5 neural rendering's settings: the mapping, and that nothing caches them. + +Two bug classes have cost this project a release each in this exact area, and this test is aimed at +both. + +The first: a backend that reads its switch once into a `static const` and then never looks again, so +every row in the menu does nothing and the feature looks dead. That is what shipped for the +upscaling rows (docs/upscaling.md). So this checks, in the source, that dlssnr::asked() has no +static of its own and goes through nr_settings() every call. + +The second: a row whose range does not match what the model accepts -- a Style of 7 where three +exist, a Preset default of 1 that silently pins preset A rather than letting the plugin choose +(docs/neural-rendering.md). So this checks every row's range and the defaults. + +The mapping itself is compiled from the real accessor, extracted and not retyped, so a change to +nr_settings() changes this test. + +python -I -B tests/test_nr_settings_live.py [--cxx g++] +""" +import argparse +import pathlib +import re +import subprocess +import sys +import tempfile + +ROOT = pathlib.Path(__file__).resolve().parents[1] +MENU_H = ROOT / "gpu" / "vk" / "vk_menu.h" +MENU_CPP = ROOT / "gpu" / "vk" / "vk_menu.cpp" +NR_CPP = ROOT / "gpu" / "vk" / "vk_dlssnr.cpp" + +failures = [] + + +def fail(message): + failures.append(message) + + +def gone(what): + """A marker this test needs is missing: that is a failure, never a silent pass.""" + raise SystemExit("%s is gone from the source: this test no longer checks what it says it does" + % what) + + +def block(text, marker, name): + """The braced block beginning at marker.""" + if marker not in text: + gone(name) + start = text.index(marker) + end = text.index("{", start) + 1 + depth = 1 + while depth: + depth += (text[end] == "{") - (text[end] == "}") + end += 1 + return text[start:end] + + +# ---------------------------------------------------------------- the mapping, compiled for real + +PROGRAM = r""" +#include +#include +static int bad; +#define CHECK(c) do { if (!(c)) { std::printf("FAIL: %s\n", #c); ++bad; } } while (0) + +struct Options { + int nr = 0, nr_model = 2, nr_style = 0, nr_preset = 0; + int nr_intensity = 100, nr_local_tone = 100, nr_local_structure = 100, nr_global_tone = 100; + int nr_skin = 100, nr_auto_mask = 0; +}; +static Options opts; + +__STRUCT__ +__ACCESSOR__ + +static bool near(float a, float b) { return std::fabs(a - b) < 1e-6f; } + +int main() { + // The quality field is an sl::DLSSMode, which is what DLSS-NR takes: 1 performance, + // 2 balanced, 3 quality, 6 DLAA. Not the row's index. + const unsigned want[4] = {1u, 2u, 3u, 6u}; + for (int m = 0; m < 4; m++) { + opts.nr_model = m; + CHECK(nr_settings().quality == want[m]); + } + opts.nr_model = 2; + CHECK(nr_settings().quality == 3u); // the default row value is Quality + + // Percent rows become 0..1 floats. + opts.nr_intensity = 0; CHECK(near(nr_settings().intensity, 0.0f)); + opts.nr_intensity = 55; CHECK(near(nr_settings().intensity, 0.55f)); + opts.nr_intensity = 100; CHECK(near(nr_settings().intensity, 1.0f)); + opts.nr_local_tone = 40; CHECK(near(nr_settings().local_tone, 0.40f)); + opts.nr_local_structure = 70; CHECK(near(nr_settings().local_structure, 0.70f)); + opts.nr_global_tone = 10; CHECK(near(nr_settings().global_tone, 0.10f)); + opts.nr_skin = 100; CHECK(near(nr_settings().skin, 1.0f)); + opts.nr_skin = 0; CHECK(near(nr_settings().skin, 0.0f)); + + // The switch and the flags. + opts.nr = 0; CHECK(!nr_settings().on); + opts.nr = 1; CHECK(nr_settings().on); + opts.nr_auto_mask = 0; CHECK(!nr_settings().auto_mask); + opts.nr_auto_mask = 1; CHECK(nr_settings().auto_mask); + + // Style and preset pass through as the plugin's own numbers. + opts.nr_style = 2; CHECK(nr_settings().style == 2u); + opts.nr_preset = 7; CHECK(nr_settings().preset == 7u); + opts.nr_preset = 0; CHECK(nr_settings().preset == 0u); + + // Equality is what lets the backend send the options only when they changed. + opts.nr_intensity = 50; + const auto a = nr_settings(); + CHECK(a == nr_settings()); + opts.nr_intensity = 51; + CHECK(!(a == nr_settings())); + + if (bad == 0) std::printf("mapping ok\n"); + return bad != 0; +} +""" + + +def check_mapping(cxx): + text = MENU_H.read_text(encoding="utf-8") + struct = block(text, "struct NrSettings", "vk_menu.h's NrSettings") + accessor = block(text, "inline NrSettings nr_settings()", "vk_menu.h's nr_settings()") + source = PROGRAM.replace("__STRUCT__", struct + ";").replace("__ACCESSOR__", accessor) + with tempfile.TemporaryDirectory(prefix="hookshot-nr-settings-") as temp: + src = pathlib.Path(temp) / "nr_settings.cpp" + exe = pathlib.Path(temp) / "nr_settings" + src.write_text(source, encoding="utf-8") + build = subprocess.run([cxx, "-std=c++20", "-Wall", "-Wextra", "-Werror", str(src), + "-o", str(exe)], capture_output=True, text=True) + if build.returncode: + fail("the extracted nr_settings() did not compile:\n" + build.stderr) + return + run = subprocess.run([str(exe)], capture_output=True, text=True) + if run.returncode: + fail("the nr_settings() mapping is wrong:\n" + run.stdout) + + +# ------------------------------------------------------------- the source facts a compile can't see + +def check_nothing_caches(): + text = NR_CPP.read_text(encoding="utf-8") + asked = block(text, "bool asked()", "vk_dlssnr.cpp's asked()") + if "static" in asked: + fail("dlssnr::asked() holds a static: the Neural rendering row would stop reaching the " + "frame, which is the bug docs/upscaling.md is about.\n" + asked) + if "nr_settings()" not in asked: + fail("dlssnr::asked() no longer reads nr_settings(): it cannot see the menu's row.") + # apply() must read the settings every frame too, not once. + apply_fn = block(text, "VkImage apply(VkCommandBuffer cmd", "vk_dlssnr.cpp's apply()") + if "nr_settings()" not in apply_fn: + fail("dlssnr::apply() does not read nr_settings(): the model's own rows would never change.") + if re.search(r"static\s+const\s+\w+\s+\w*(want|opt|setting)", apply_fn): + fail("dlssnr::apply() caches its settings in a static.") + + +ROWS = { + # row name: (lo, hi) + "Neural rendering": (0, 1), + "Model": (0, 3), + "Style": (0, 2), # Default, Natural, Cinematic -- three, not eight + "Preset": (0, 7), # Default, then A..G + "Intensity": (0, 100), + "Local tone": (0, 100), + "Local structure": (0, 100), + "Global tone": (0, 100), + "Skin structure": (0, 100), # not -1: no source says a negative is a sentinel + "Auto mask": (0, 1), +} + +DEFAULTS = { + "nr": 0, # every feature is off out of the box + "nr_model": 2, # Quality, the model's own default + "nr_style": 0, + "nr_preset": 0, # the plugin picks; 1 would silently pin preset A + "nr_skin": 100, # 1.0, not -1 + "nr_auto_mask": 0, +} + + +def check_rows(): + text = MENU_CPP.read_text(encoding="utf-8") + if "TAB_NEURAL" not in text: + gone("the TAB_NEURAL rows") + found = {} + for name, lo, hi in re.findall( + r'\{TAB_NEURAL,\s*"([^"]+)",\s*&opts\.\w+,\s*(-?\d+),\s*(-?\d+),', text): + found[name] = (int(lo), int(hi)) + for name, want in ROWS.items(): + if name not in found: + fail('the Neural tab has no "%s" row' % name) + elif found[name] != want: + fail('the "%s" row is %s, expected %s (docs/neural-rendering.md says why)' + % (name, found[name], want)) + for extra in set(found) - set(ROWS): + fail('an unexpected Neural row "%s": add it to this test with its range' % extra) + + +def check_defaults(): + text = MENU_H.read_text(encoding="utf-8") + for field, want in DEFAULTS.items(): + match = re.search(r"\bint %s\s*=\s*(-?\d+)\s*;" % re.escape(field), text) + if not match: + gone("vk_menu.h's opts.%s" % field) + elif int(match.group(1)) != want: + fail("opts.%s defaults to %s, expected %s (docs/neural-rendering.md says why)" + % (field, match.group(1), want)) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--cxx", default="g++") + args = parser.parse_args() + check_mapping(args.cxx) + check_nothing_caches() + check_rows() + check_defaults() + if failures: + for message in failures: + print("FAIL: %s" % message) + sys.exit(1) + print("ok: the Neural rows, their defaults and the live mapping") + + +if __name__ == "__main__": + main() From 0d9ee8c7829ea375dd1129938c04753408cbe018 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 9 Nov 2026 18:02:38 +0000 Subject: [PATCH 079/119] chore(release): 2.6.2 [skip ci] [skip release] ## [2.6.2](https://github.com/notquiteog/Hookshot/compare/v2.6.1...v2.6.2) (2026-11-09) ### Bug Fixes * **build:** NGX asks for Microsoft's C++ runtime, which llvm-mingw has not ([114e917](https://github.com/notquiteog/Hookshot/commit/114e917949aa6461a843f2530b3aadb54a3de547)) --- changelog.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/changelog.txt b/changelog.txt index fb279826a..3cc046524 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,9 @@ --------------------------------------------------------------------------------------------------- +Version: 2.6.2 +Date: 09. 11. 2026 + Bugfixes: + - Build: NGX asks for Microsoft's C++ runtime, which llvm-mingw has not. +--------------------------------------------------------------------------------------------------- Version: 2.6.1 Date: 09. 11. 2026 Bugfixes: From dd3e61e7da65aa5dafb9271176ee4d2f3b4a38c7 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 12:03:39 -0600 Subject: [PATCH 080/119] fix(vk): tag the uplift colour pair as whole resources, as the shipping integration does DLSS-NR's measured integration tags kBufferTypeUpliftInputColor and UpliftOutputColor with no sl::Extent and depth and motion with one. Ours are exactly the frame's size either way, so this is fidelity to an integration that has been run against the real plugin rather than a fix for a bug seen here. Co-Authored-By: Claude Opus 5 --- gpu/vk/vk_dlssnr.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/gpu/vk/vk_dlssnr.cpp b/gpu/vk/vk_dlssnr.cpp index 66e24441a..37255bbf1 100644 --- a/gpu/vk/vk_dlssnr.cpp +++ b/gpu/vk/vk_dlssnr.cpp @@ -347,12 +347,17 @@ VkImage apply(VkCommandBuffer cmd, VkImage src, uint32_t sw, uint32_t sh, sl::Resource motion = resource(s.motion, kMotionFormat, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, sw, sh, VK_IMAGE_USAGE_SAMPLED_BIT); + // The uplift colour pair is tagged as a whole resource, with no extent, and depth and + // motion with one. That asymmetry is how the shipping integration does it: the colour + // buffers are the full frame by definition, and an extent on them is one more thing that + // can disagree with the resource it describes. Ours are exactly sw x sh either way, so this + // is fidelity to a measured integration rather than a fix for a bug we have seen. const sl::Extent area{0, 0, sw, sh}; const sl::ResourceTag tags[] = { sl::ResourceTag{&color_in, sl::kBufferTypeUpliftInputColor, - sl::ResourceLifecycle::eValidUntilEvaluate, &area}, + sl::ResourceLifecycle::eValidUntilEvaluate, nullptr}, sl::ResourceTag{&color_out, sl::kBufferTypeUpliftOutputColor, - sl::ResourceLifecycle::eValidUntilEvaluate, &area}, + sl::ResourceLifecycle::eValidUntilEvaluate, nullptr}, sl::ResourceTag{&depth, sl::kBufferTypeDepth, sl::ResourceLifecycle::eValidUntilEvaluate, &area}, sl::ResourceTag{&motion, sl::kBufferTypeMotionVectors, From 1004f37bd79489a3842f311248bbb9ba4c1f891f Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 12:06:37 -0600 Subject: [PATCH 081/119] fix(build): the feature announcement swallowed the whole Vulkan build The two "compiled in / left out" lines were put just above the Vulkan branch, as their own `if`, to keep them out of the region tests/test_shader_stamp_cache.py execs. That made them the head of the if/elif chain the branch belongs to, so if a.standalone and not a.only: <- the print, always true here elif a.standalone and not a.only and vk_headers and spirv_headers: never reached the elif. Both platforms built nothing and said so: vk: DLSS (NGX): compiled in, from D:\a\Hookshot\Hookshot\dlss-sdk vk: DLSS 5 neural rendering (Streamline): compiled in, from ...\streamline-sdk compiled in 0s, 0 failed ls: cannot access '.../hookshot_vk.dll': No such file or directory The lines are back inside the branch, where they cannot touch control flow. Two printed lines are not worth a branch, and the test printing them six times is a smaller problem than this was. The announcement earned its place either way: it is what made a build that silently produced nothing legible. Also fixes tests/test_rumble_menu.py, which has been failing since upstream's docked-1080p work: it extracts set_row and compiles it, and set_row now calls step_output_choice, so the fixture did not build at all ("step_output_choice was not declared in this scope") for a reason that had nothing to do with rumble. The fixture now extracts struct Out through step_output_choice, with the three headers those need. Co-Authored-By: Claude Opus 5 --- nx2/build.py | 28 +++++++++++++++------------- tests/test_rumble_menu.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/nx2/build.py b/nx2/build.py index 4ce9ba73b..110a241d7 100644 --- a/nx2/build.py +++ b/nx2/build.py @@ -856,19 +856,6 @@ def main(): vk_prebuilt = os.environ.get("HOOKSHOT_VK_PREBUILT", "") if a.standalone and not a.only and vk_prebuilt: print("the Vulkan back end: %s, as built" % vk_prebuilt) - # (hookshot) Say what this back end is being built with, because "is DLSS actually in this - # release?" has been asked of a build three times and guessed at twice. One line, in the build - # log and so in CI's, naming each half. Deliberately outside the branch below: - # tests/test_shader_stamp_cache.py execs that branch to check the object keys, and a print - # inside it would run six times inside a test that is not about printing. - if a.standalone and not a.only: - print("vk: DLSS (NGX): %s" % (("compiled in, from " + dlss_sdk_path()) if dlss_sdk_path() - else "left out (no NGX SDK found; see readme.md)")) - print("vk: DLSS 5 neural rendering (Streamline): %s" - % (("compiled in, from " + streamline_sdk_path()) - if (not LINUX and streamline_sdk_path()) - else ("left out: Windows only" if LINUX else - "left out (no Streamline headers found; see readme.md)"))) elif a.standalone and not a.only and vk_headers and spirv_headers: cxx = toolchain.need(toolchain.find("clang++")) vk = os.path.join(GPU, "vk") @@ -880,6 +867,21 @@ def main(): with open(f, "rb") as src: stamp.update(os.path.relpath(f, vk).replace("\\", "/").encode() + src.read().replace(bytes((13, 10)), bytes((10,)))) shader_stamp = "-DHOOKSHOT_SHADER_STAMP=0x%sull" % stamp.hexdigest()[:16] + # (hookshot) Say what this back end is being built with: "is DLSS actually in this release?" + # has been asked of a build three times and guessed at twice, and the answer belongs in the + # build log and so in CI's. + # + # Inside this branch, deliberately. It was put just above it, as its own `if`, to keep it + # out of the region tests/test_shader_stamp_cache.py execs -- and that made it the head of + # this if/elif chain, so the whole Vulkan build was skipped and a Windows run reported + # "compiled in 0s" and produced no DLL. Two printed lines are not worth a branch. + print("vk: DLSS (NGX): %s" % (("compiled in, from " + dlss_sdk_path()) if dlss_sdk_path() + else "left out (no NGX SDK found; see readme.md)")) + print("vk: DLSS 5 neural rendering (Streamline): %s" + % (("compiled in, from " + streamline_sdk_path()) + if (not LINUX and streamline_sdk_path()) + else ("left out: Windows only" if LINUX else + "left out (no Streamline headers found; see readme.md)"))) vflags = target() + CPU + (["-fPIC", "-I" + POSIX, "-D_GNU_SOURCE"] if LINUX else []) + [ # (hookshot: the replay is the frame's limit now) # (what the code takes for granted, which newer C++ libraries bring in by themselves and older ones do not: issue 48) "-include", "algorithm", "-include", "cstdio", "-include", "cstdlib", "-include", "cstring", "-include", "functional", diff --git a/tests/test_rumble_menu.py b/tests/test_rumble_menu.py index e85d9a3a2..ebdbedfc9 100644 --- a/tests/test_rumble_menu.py +++ b/tests/test_rumble_menu.py @@ -51,8 +51,10 @@ def one_line(text, head): FIXTURE = r""" #include #include +#include #include #include +#include #define CHECK(x) do { if (!(x)) { std::fprintf(stderr, "FAIL %%d %%s\n", __LINE__, #x); return 1; } } while (0) %(options)s Options opts; @@ -67,6 +69,9 @@ def one_line(text, head): %(stops)s %(snap)s %(ini_key)s +/* (the Output resolution row's own stepping, which set_row calls: extracted, not retyped, so a + change to the order of the outputs changes this test too) */ +%(outputs)s %(set_row)s /* (menu_tick's wheel over a value, as in the source) */ void wheel(Row& d, int amount) { @@ -122,6 +127,28 @@ def one_line(text, head): """ +def outputs(menu): + """struct Out through step_output_choice: what set_row needs for the Output resolution row. + + set_row calls step_output_choice, which walks kOutputOrder. Without it the fixture did not + compile at all ("step_output_choice was not declared in this scope") and this whole test failed + for a reason that had nothing to do with rumble. + """ + start = menu.find("struct Out {") + if start < 0: + raise SystemExit("the menu lost struct Out: this test no longer checks what it says it does") + marker = "int step_output_choice(int id, int dir) {" + at = menu.find(marker, start) + if at < 0: + raise SystemExit("the menu lost step_output_choice: set_row's stepping moved") + end = menu.index("{", at) + 1 + depth = 1 + while depth: + depth += (menu[end] == "{") - (menu[end] == "}") + end += 1 + return menu[start:end] + + def menu_fixture(): menu = MENU.read_text(encoding="utf-8") header = read("gpu", "vk", "vk_menu.h") @@ -145,6 +172,7 @@ def menu_fixture(): "stops": one_line(menu, "bool stops_at_ends"), "snap": one_line(menu, "int rumble_step"), "ini_key": definition(menu, "const char* ini_key"), + "outputs": outputs(menu), "set_row": definition(menu, "void set_row"), "wheel": block(tick, loop), "arrow": "bool press[5] = {false, false, false, !right, right}; " + arrow.group(1), From 35a6ac071759a5dc8356f7ec2f39da8396c83f72 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 9 Nov 2026 18:07:29 +0000 Subject: [PATCH 082/119] chore(release): 2.6.3 [skip ci] [skip release] ## [2.6.3](https://github.com/notquiteog/Hookshot/compare/v2.6.2...v2.6.3) (2026-11-09) ### Bug Fixes * **build:** the feature announcement swallowed the whole Vulkan build ([1004f37](https://github.com/notquiteog/Hookshot/commit/1004f37bd79489a3842f311248bbb9ba4c1f891f)) * **vk:** tag the uplift colour pair as whole resources, as the shipping integration does ([dd3e61e](https://github.com/notquiteog/Hookshot/commit/dd3e61e7da65aa5dafb9271176ee4d2f3b4a38c7)) --- changelog.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/changelog.txt b/changelog.txt index 3cc046524..9ab8b210f 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,10 @@ --------------------------------------------------------------------------------------------------- +Version: 2.6.3 +Date: 09. 11. 2026 + Bugfixes: + - Build: The feature announcement swallowed the whole Vulkan build. + - Vk: Tag the uplift colour pair as whole resources, as the shipping integration does. +--------------------------------------------------------------------------------------------------- Version: 2.6.2 Date: 09. 11. 2026 Bugfixes: From 7fb5b5d075230c2e529a9b5152f5d979d9563ec6 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 12:09:57 -0600 Subject: [PATCH 083/119] test(menu): the output-resolution fixture was missing an extern it reads tests/test_output_resolution.py slices hos_rt_pool_size out of host/nn_applet.c, and that function reads hos_wide_out as an extern -- defined in host/hos_main.c, which the fixture does not include. So the fixture never linked ("undefined reference to hos_wide_out") and the test failed on every platform for a reason that had nothing to do with output resolutions. Defined as 0 in the fixture, which is an ordinary 16:9 screen, so the pool size is the output's own and the assertions mean what they say. With tests/test_rumble_menu.py this leaves the suite at the same 16 failures as upstream has on this machine, all of them wanting clang, Unicorn or a game dump that is not here. Co-Authored-By: Claude Opus 5 --- tests/test_output_resolution.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/test_output_resolution.py b/tests/test_output_resolution.py index 9f5eb16bc..09fd958a6 100644 --- a/tests/test_output_resolution.py +++ b/tests/test_output_resolution.py @@ -29,6 +29,11 @@ def main(): DWORD hos_game_path_a(char *path, int size) { return snprintf(path, size, "./hookshot.exe"); } void hos_log(const char *, ...) {} struct { int handheld, output_res; } opts; +/* host/hos_main.c's, which hos_rt_pool_size reads as an extern: the output's size at the screen's + shape, or 0 for an ordinary 16:9 one. Zero here, so the pool size is the output's own -- without + this definition the fixture did not link at all ("undefined reference to hos_wide_out") and the + whole test failed for a reason that had nothing to do with output resolutions. */ +volatile uint64_t hos_wide_out; ''' + host[host.index("static int ini_option("):host.index("HLE(_ZN2nn2oe16GetOperationModeEv)")] + menu[ menu.index("struct Out {"):menu.index("const char* tx_speed(")] + r''' int main(int argc, char **argv) { From d00159a3fb4dea2f462b4d2ada93660201d9e48f Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 12:15:16 -0600 Subject: [PATCH 084/119] fix(build): the twelve MSVC runtime symbols NGX asks of an llvm-mingw link With libcpmt and msvcprt suppressed, the Windows link got all the way to the end and named exactly twelve undefined symbols -- all of them small pieces of Microsoft's runtime that NVIDIA's MSVC-built NGX libraries reference: _Init_thread_epoch/_header/_footer function-local static guards __GSHandlerCheck, __GSHandlerCheck_EH, __security_check_cookie, __security_cookie, _fltused /GS and the float marker ??2@YAPEAX_K@Z, ??3@YAXPEAX@Z operator new / operator delete ?_Xbad_alloc@std@@YAXXZ, ?_Xlength_error@std@@YAXPEBD@Z the STL's throw helpers gpu/vk/vk_msvc_shims.cpp is those twelve and nothing else. host/mingw_msvc_shims.c does the same job for the game DLL, where the MSVC-built FFmpeg has the same problem; the renderer is its own link with its own symbol table, so the four that overlap are written again rather than shared. Three things in it are deliberate and worth not undoing: - The magic-static guards take a real lock. Microsoft's contract is that _Init_thread_header holds one until the footer, and faking that would mean two threads inside NVIDIA's constructors at once -- worse than not linking at all. The epoch is INT_MIN + 1 and the constructed marker INT_MIN so that a fresh guard of 0 fails the fast-path comparison and a constructed one passes it. - _Init_thread_epoch is a plain global, not __thread. Nothing here ever writes it, so a constant global has the same meaning, and a __thread compiles to emulated TLS under some toolchains -- an __emutls_v._Init_thread_epoch is not a symbol MSVC-built objects can reference. - operator new ends the process on failure instead of returning null. MSVC's throws, and NGX is entitled to assume a non-null return; null would turn an allocation failure into a null dereference inside NVIDIA's library. The decorated names are emitted as assembly thunks with *quoted* symbol names: a `?` cannot appear in an __asm__ label unquoted, the GNU assembler rejects it, and this file has to build under whichever assembler the toolchain hands us. All twelve are verified present in the object locally. Also corrects vk_streamline.h's claim that start() answers no when the player has neural rendering switched off. It does not, and cannot: the device must be created for the feature before the options file is read, so waiting for the switch would mean a restart to honour it. The switch is read per frame instead, and RX_VK_DLSS_NR=0 is the way to not load the interposer at all. Co-Authored-By: Claude Opus 5 --- gpu/vk/vk_msvc_shims.cpp | 176 +++++++++++++++++++++++++++++++++++++++ gpu/vk/vk_streamline.cpp | 3 + gpu/vk/vk_streamline.h | 7 ++ 3 files changed, 186 insertions(+) create mode 100644 gpu/vk/vk_msvc_shims.cpp diff --git a/gpu/vk/vk_msvc_shims.cpp b/gpu/vk/vk_msvc_shims.cpp new file mode 100644 index 000000000..d201affcc --- /dev/null +++ b/gpu/vk/vk_msvc_shims.cpp @@ -0,0 +1,176 @@ +// (hookshot) What NVIDIA's NGX libraries ask of Microsoft's runtime, for the llvm-mingw build. +// +// NGX's Windows libraries (lib/Windows_x86_64/x64/nvsdk_ngx_s.lib) are built with Microsoft's +// compiler. Linking them into a GNU-ABI DLL leaves exactly twelve symbols undefined, and this file +// is those twelve. host/mingw_msvc_shims.c does the same job for the game DLL, where the +// MSVC-built FFmpeg has the same problem -- that file is not compiled into this DLL, which is its +// own link with its own symbol table, so the overlapping four are here again rather than shared. +// +// Scope, deliberately narrow: this is not an attempt at an MSVC runtime. It is the twelve names the +// linker asked for, and if NGX ever asks for a thirteenth the link fails and says which. Nothing +// here runs in a build that is not llvm-mingw, and nothing here runs in a build without an NGX SDK. +// +// The MSVC build compiles nothing of this file, and neither does Linux. + +#if defined(__MINGW32__) && defined(RX_VK_DLSS_SDK) + +#include + +#include +#include +#include + +extern "C" { + +// ---------------------------------------------------------------- /GS: the stack-buffer check +// +// A cookie in each guarded frame, checked on return. Set once at start; a fixed value would do, +// because a mismatch means the stack was overrun and then the process ends either way, as it does +// with Microsoft's runtime. The same as host/mingw_msvc_shims.c's, kept identical on purpose. +uintptr_t __security_cookie = (uintptr_t)0x00002B992DDFA232ull; + +static void init_security_cookie() { + LARGE_INTEGER t; + QueryPerformanceCounter(&t); + uintptr_t c = (uintptr_t)t.QuadPart ^ (uintptr_t)GetCurrentProcessId() ^ + ((uintptr_t)GetCurrentThreadId() << 32); + c &= 0x0000FFFFFFFFFFFFull; // (MSVC keeps the top 16 bits clear) + if (c) __security_cookie = c; +} +namespace { +struct CookieInit { + CookieInit() { init_security_cookie(); } +}; +const CookieInit cookie_init; +} // namespace + +void __security_check_cookie(uintptr_t cookie) { + if (cookie != __security_cookie) __fastfail(2); // FAST_FAIL_STACK_COOKIE_CHECK_FAILURE +} + +// The unwind handlers of /GS frames: check the frame's cookie, then let the search go on. _EH is +// the variant for a frame that also has C++ unwind state; for this purpose they do the same. +EXCEPTION_DISPOSITION __GSHandlerCheck(PEXCEPTION_RECORD record, void* frame, PCONTEXT context, + void* dispatcher) { + (void)record, (void)frame, (void)context, (void)dispatcher; + return ExceptionContinueSearch; +} +EXCEPTION_DISPOSITION __GSHandlerCheck_EH(PEXCEPTION_RECORD record, void* frame, PCONTEXT context, + void* dispatcher) { + (void)record, (void)frame, (void)context, (void)dispatcher; + return ExceptionContinueSearch; +} + +// Microsoft's marker that the image uses floating point. Only its presence matters. +int _fltused = 0x9875; + +// ------------------------------------------------- thread-safe function-local statics ("magic statics") +// +// Microsoft's compiler guards a function-local static with an int and these three calls. Its +// generated code is, in effect: +// +// if (guard <= _Init_thread_epoch) goto done; // the fast path, no lock +// _Init_thread_header(&guard); +// if (guard == -1) { ...construct...; _Init_thread_footer(&guard); } +// done: +// +// so the contract is: header takes a lock and leaves `guard` at -1 when *this* caller is the one +// that must construct; footer marks it constructed and releases the lock; and the fast path must be +// true afterwards and false before. The epoch is what makes that comparison work, which is why it +// is INT_MIN + 1 here and the constructed marker is INT_MIN: a fresh guard of 0 fails the fast path +// (0 <= INT_MIN+1 is false) and a constructed one passes it (INT_MIN <= INT_MIN+1 is true). +// +// This is a real lock, not a pretence: getting it wrong would mean two threads inside NVIDIA's +// constructors at once, which is worse than not linking at all. +namespace { +constexpr int kConstructed = INT_MIN; +constexpr int kBeingConstructed = -1; + +CRITICAL_SECTION& init_lock() { + static CRITICAL_SECTION cs; + static bool ready = false; + static LONG guard = 0; + // One-time init without relying on the very feature this file implements. + while (!ready) { + if (InterlockedCompareExchange(&guard, 1, 0) == 0) { + InitializeCriticalSection(&cs); + ready = true; + } else { + Sleep(0); + } + } + return cs; +} +} // namespace + +// Not thread-local, on purpose. Microsoft's runtime keeps a per-thread epoch and moves it; nothing +// here ever writes this one, so it is a constant the comparison reads and a plain global has +// exactly the same meaning. It also sidesteps the thread-local model entirely: a `__thread` here +// compiles to emulated TLS under some of the toolchains this file has to build with, and an +// __emutls_v._Init_thread_epoch is not a symbol NVIDIA's MSVC-built objects can reference. +int _Init_thread_epoch = INT_MIN + 1; + +void _Init_thread_header(int* guard) { + EnterCriticalSection(&init_lock()); + if (*guard == kConstructed) { + // Another thread finished while we waited: nothing to do, and we must not hold the lock. + LeaveCriticalSection(&init_lock()); + return; + } + *guard = kBeingConstructed; // the caller constructs, and calls the footer when it has +} + +void _Init_thread_footer(int* guard) { + *guard = kConstructed; + LeaveCriticalSection(&init_lock()); +} + +// Called instead of the footer when a constructor threw. Not in the twelve the linker asked for; +// here because the alternative, if NGX ever does throw out of one, is a lock held for the life of +// the process. +void _Init_thread_abort(int* guard) { + *guard = 0; + LeaveCriticalSection(&init_lock()); +} + +} // extern "C" + +// ---------------------------------------------------- Microsoft's global new / delete and two throw helpers +// +// They cannot be written as C++ operators here: this translation unit is compiled for the GNU ABI, +// so `operator new` would be emitted as `_Znwm` while NGX's objects ask for `??2@YAPEAX_K@Z`. +// +// Failure ends the process rather than returning null. MSVC's operator new throws std::bad_alloc, +// and NGX's code is entitled to assume a non-null return; handing it null would turn an allocation +// failure into a null dereference inside NVIDIA's library, which is a worse way to find out. +extern "C" { + +void* mkwvk_msvc_new(size_t size) { + void* p = malloc(size ? size : 1); + if (!p) __fastfail(FAST_FAIL_FATAL_APP_EXIT); + return p; +} +void mkwvk_msvc_delete(void* p) { free(p); } +void mkwvk_msvc_bad_alloc() { __fastfail(FAST_FAIL_FATAL_APP_EXIT); } +void mkwvk_msvc_length_error(const char* what) { + (void)what; + __fastfail(FAST_FAIL_FATAL_APP_EXIT); +} + +} // extern "C" + +// The decorated names, as jumps to the four above. Written as assembly with *quoted* symbol names +// because a `?` cannot appear in an __asm__ label unquoted: the GNU assembler rejects it outright +// and only clang's integrated assembler takes it, and this file has to build under whichever one +// the toolchain hands us. +__asm__(".text\n" + ".globl \"??2@YAPEAX_K@Z\"\n" // operator new(size_t) + "\"??2@YAPEAX_K@Z\": jmp mkwvk_msvc_new\n" + ".globl \"??3@YAXPEAX@Z\"\n" // operator delete(void*) + "\"??3@YAXPEAX@Z\": jmp mkwvk_msvc_delete\n" + ".globl \"?_Xbad_alloc@std@@YAXXZ\"\n" // std::_Xbad_alloc() + "\"?_Xbad_alloc@std@@YAXXZ\": jmp mkwvk_msvc_bad_alloc\n" + ".globl \"?_Xlength_error@std@@YAXPEBD@Z\"\n" // std::_Xlength_error(char const*) + "\"?_Xlength_error@std@@YAXPEBD@Z\": jmp mkwvk_msvc_length_error\n"); + +#endif // __MINGW32__ && RX_VK_DLSS_SDK diff --git a/gpu/vk/vk_streamline.cpp b/gpu/vk/vk_streamline.cpp index bc072eafb..9e577b723 100644 --- a/gpu/vk/vk_streamline.cpp +++ b/gpu/vk/vk_streamline.cpp @@ -196,6 +196,9 @@ bool built_with_sdk() { return true; } bool start() { State& s = state(); if (s.started) return true; + // RX_VK_DLSS_NR=0 is the only way to keep the interposer from being loaded at all. The menu's + // own switch is deliberately not consulted here: the device must be created for the feature + // before the options file is read, so waiting for the switch would mean a restart to honour it. if (const char* off = getenv("RX_VK_DLSS_NR"); off && atoi(off) == 0) return false; if (!s.module) { std::wstring found; diff --git a/gpu/vk/vk_streamline.h b/gpu/vk/vk_streamline.h index 1192bfbd6..d3703cccf 100644 --- a/gpu/vk/vk_streamline.h +++ b/gpu/vk/vk_streamline.h @@ -38,6 +38,13 @@ namespace mkwvk::streamline { /// interposer, where it is not signed by NVIDIA, or where Streamline refused to start; the renderer /// then comes up without neural rendering and everything else is unaffected. /// +/// It does *not* ask whether the player has neural rendering switched on, and that is deliberate: +/// the device has to be created for the feature before the menu's options are even read, so a +/// session that waited for the switch could never honour it without a restart. The switch is read +/// per frame instead (dlssnr::asked), and the cost of being wrong here is that a player with +/// NVIDIA's files present and the row off has loaded a plugin they are not using. RX_VK_DLSS_NR=0 +/// is the way to not load it at all. +/// /// Asked more than once is free: the answer is kept. bool start(); From 0b136d3a3da23a6e149af877d4c75d05c5549b4b Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 9 Nov 2026 18:22:30 +0000 Subject: [PATCH 085/119] chore(release): 2.6.4 [skip ci] [skip release] ## [2.6.4](https://github.com/notquiteog/Hookshot/compare/v2.6.3...v2.6.4) (2026-11-09) ### Bug Fixes * **build:** the twelve MSVC runtime symbols NGX asks of an llvm-mingw link ([d00159a](https://github.com/notquiteog/Hookshot/commit/d00159a3fb4dea2f462b4d2ada93660201d9e48f)) --- changelog.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/changelog.txt b/changelog.txt index 9ab8b210f..ddba875f3 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,9 @@ --------------------------------------------------------------------------------------------------- +Version: 2.6.4 +Date: 09. 11. 2026 + Bugfixes: + - Build: The twelve MSVC runtime symbols NGX asks of an llvm-mingw link. +--------------------------------------------------------------------------------------------------- Version: 2.6.3 Date: 09. 11. 2026 Bugfixes: From 65003cc7dcdb4055df7c27c3b23cc02beafb2d02 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 15:20:47 -0600 Subject: [PATCH 086/119] feat(vk): AMD FSR 4 upscaling and frame generation through AMD's runtime The Upscaler row's AMD FSR 4, and FSR 4's frame generation between DLSS frame generation and FSR 3.1's in the chain. gpu/vk/vk_ffx.cpp loads amd_fidelityfx_loader_vk.dll from beside the game (or RX_VK_FFX_DIR) at run time and drives AMD's FSR API: nothing is linked, and a PC without the DLLs runs as before. Compiled against AMD's FSR API headers, vendored unmodified from FSR SDK v2.4.0 (MIT) in third_party/ffx-api. Windows only: the runtime is Windows DLLs; Linux keeps FSR 3.1. - The runtime picks the provider; the log lists what it offers and names the one a run got (FSR 4 on RX 9000, its own FSR 3.1 elsewhere). - Inputs are FSR 3.1's: render-pixel jitter and motion, reversed infinite depth, HDR scene with auto exposure. - Inputs GENERIC_READ, outputs UNORDERED_ACCESS: the only API states AMD's Vulkan backend maps to VK_IMAGE_LAYOUT_GENERAL, where every image here lives. COMPUTE_READ would be SHADER_READ_ONLY_OPTIMAL. - Frame generation is configured with no swapchain and dispatched by hand (PrepareV2, then the generation) into our own images: Hookshot paces its own made frames. Not measured: no AMD GPU and no Windows on this machine. Both paths compile for Windows and log every refusal with the API's result code. Co-Authored-By: Claude Opus 5.5 --- docs/upscaling.md | 47 +- gpu/vk/vk_ffx.cpp | 537 +++++++++++++++++- third_party/ffx-api/LICENSE.txt | 5 + third_party/ffx-api/PROVENANCE.md | 23 + third_party/ffx-api/api/include/ffx_api.h | 213 +++++++ .../ffx-api/api/include/ffx_api_types.h | 257 +++++++++ .../ffx-api/api/include/vk/ffx_api_vk.h | 308 ++++++++++ .../include/ffx_framegeneration.h | 299 ++++++++++ .../include/ffx_framegeneration_api_types.h | 72 +++ .../include/vk/ffx_api_framegeneration_vk.h | 150 +++++ .../ffx-api/upscalers/include/ffx_upscale.h | 230 ++++++++ 11 files changed, 2128 insertions(+), 13 deletions(-) create mode 100644 third_party/ffx-api/LICENSE.txt create mode 100644 third_party/ffx-api/PROVENANCE.md create mode 100644 third_party/ffx-api/api/include/ffx_api.h create mode 100644 third_party/ffx-api/api/include/ffx_api_types.h create mode 100644 third_party/ffx-api/api/include/vk/ffx_api_vk.h create mode 100644 third_party/ffx-api/framegeneration/include/ffx_framegeneration.h create mode 100644 third_party/ffx-api/framegeneration/include/ffx_framegeneration_api_types.h create mode 100644 third_party/ffx-api/framegeneration/include/vk/ffx_api_framegeneration_vk.h create mode 100644 third_party/ffx-api/upscalers/include/ffx_upscale.h diff --git a/docs/upscaling.md b/docs/upscaling.md index b498e0c8f..efd67953e 100644 --- a/docs/upscaling.md +++ b/docs/upscaling.md @@ -472,18 +472,41 @@ AMD card. ## FSR 3 and FSR 4 are two backends, not two versions -FSR 4 is not source-available: it ships as prebuilt signed libraries inside AMD's SDK releases, so it cannot come out -of `third_party/fidelityfx-sdk/`. It is reached by loading AMD's runtime (`amd_fidelityfx_loader_vk.dll` and -`amd_fidelityfx_upscaler_vk.dll`, which the user supplies) and asking it for a provider. That makes FSR 4 a *second -backend* behind the same seam, not an upgrade of the first: - -- **FSR 3.1, from the SDK sources here.** No runtime, no downloads, every vendor and both platforms. This is the one - that can be a default. -- **FSR 4, through AMD's runtime.** AMD hardware, where the installed runtime exposes a provider; it must not - silently become FSR 3 or FSR 2, because then nobody can tell which ran. - -The API that reaches FSR 4 is the FSR 3.1 API, which AMD kept stable for exactly this, so integrating 3.1 properly is -the path to 4 rather than a detour away from it. +FSR 4 is not source-available: it ships as prebuilt libraries signed by AMD (`amd_fidelityfx_loader_vk.dll`, +`amd_fidelityfx_upscaler_vk.dll`, `amd_fidelityfx_framegeneration_vk.dll`, MIT-licensed in FSR SDK 2.4), so it cannot +come out of `third_party/fidelityfx-sdk/`. `gpu/vk/vk_ffx.h` is the second backend, behind the same seam: + +- **FSR 3.1, from the SDK sources here** (`vk_fsr3.cpp`). No runtime, every vendor and both platforms. +- **FSR 4, through AMD's runtime** (`vk_ffx.cpp`). Windows only, because the runtime is Windows DLLs. It is compiled + against AMD's FSR API headers (`third_party/ffx-api/`, MIT) and loads the loader from beside the game at run time: + nothing is linked, and a PC without the DLLs runs exactly as before. The Windows release puts the DLLs there + (`windows-builder.yml` packages them as the `amd-fsr` part, `nx2/make_game.py place_prebuilt_runtime`). + +The runtime chooses the provider (`ffxQuery` `GET_VERSIONS` lists them, newest first, and the log prints the list): FSR 4 +on an RX 9000 and the cards SDK 2.4 added, its own FSR 3.1 elsewhere. That is AMD's choice and the log says which was +made, so "FSR 4" in the menu on an NVIDIA card is honestly "what AMD's runtime runs on this card". + +Three things the integration depends on, each from AMD's own sources rather than guessed: + +- **Resource states.** Every image here lives in `VK_IMAGE_LAYOUT_GENERAL`, and AMD's Vulkan backend maps API states to + layouts (`backend/vk/ffx_vk.cpp getVKImageLayoutFromResourceState`): only `COMMON`, `GENERIC_READ` and + `UNORDERED_ACCESS` are `GENERAL` there. `COMPUTE_READ` -- the obvious choice for an input -- is + `SHADER_READ_ONLY_OPTIMAL`, and would have the runtime transition from a layout the image is not in. So inputs are + `GENERIC_READ` and outputs `UNORDERED_ACCESS`. +- **The inputs are FSR 3.1's.** Jitter and motion in render pixels with a scale of 1, reversed depth with an infinite far + plane (`DEPTH_INVERTED | DEPTH_INFINITE`), an HDR scene with automatic exposure. They are exactly what `vk_fsr3.cpp` + hands the same upscaler's sources, so the two backends are given the same picture. +- **Frame generation is dispatched by hand.** AMD's frame generation is built around replacing the application's + swapchain with AMD's own, which paces the presents. Hookshot presents and paces its own made frames + (`vk_framegen.cpp`), so it configures the context with no swapchain and dispatches `PrepareV2` and the generation + itself, into its own images on its own command buffer -- the manual path AMD's documentation describes and + discourages. It sits after DLSS frame generation and before FSR 3.1's in the chain, so a refusal costs nothing. + +**Not measured.** There is no AMD GPU and no Windows on the machine this was written on. Both paths compile for Windows +and their refusals are logged with the API's result code; the first run on an RX 9000 is the first real test. +`RX_VK_FFX_LOG=1` routes AMD's own messages to the log, `RX_VK_FFX_DEBUG=1` turns on its debug checking (2 also draws +frame generation's debug view), `RX_VK_FFX_FG=0` turns its frame generation off and `RX_VK_FFX_FG_MAX` caps the frames it +is asked for. ## Frame generation, honestly diff --git a/gpu/vk/vk_ffx.cpp b/gpu/vk/vk_ffx.cpp index d08882198..c519263ca 100644 --- a/gpu/vk/vk_ffx.cpp +++ b/gpu/vk/vk_ffx.cpp @@ -4,7 +4,541 @@ #include "vk_ffx.h" -// (the backend itself comes in its own change: until then every platform answers "not here") +#if defined(_WIN32) + +#include + +#include +#include +#include +#include + +#include "../../third_party/ffx-api/api/include/ffx_api.h" +#include "../../third_party/ffx-api/api/include/ffx_api_types.h" +#include "../../third_party/ffx-api/api/include/vk/ffx_api_vk.h" +#include "../../third_party/ffx-api/framegeneration/include/ffx_framegeneration.h" +#include "../../third_party/ffx-api/upscalers/include/ffx_upscale.h" +#include "vk_loader.h" + +namespace mkwvk::ffx { +namespace { + +int env_int(const char* name, int fallback) { + const char* e = getenv(name); + return e && *e ? atoi(e) : fallback; +} + +struct Image { + VkImage image = VK_NULL_HANDLE; + VmaAllocation memory = nullptr; + uint32_t width = 0, height = 0; + VkFormat format = VK_FORMAT_UNDEFINED; +}; + +struct State { + bool tried = false; + HMODULE module = nullptr; + PfnFfxCreateContext create = nullptr; + PfnFfxDestroyContext destroy = nullptr; + PfnFfxConfigure configure = nullptr; + PfnFfxQuery query = nullptr; + PfnFfxDispatch dispatch = nullptr; + + // upscaling + int up_supported = -1; + std::string up_provider; + ffxContext up = nullptr; + uint32_t up_rw = 0, up_rh = 0, up_ow = 0, up_oh = 0; + Image up_out; + bool up_first = true; + LARGE_INTEGER up_last{}; + bool up_failed = false; + + // frame generation + int fg_supported = -1; + std::string fg_provider; + ffxContext fg = nullptr; + uint32_t fg_w = 0, fg_h = 0, fg_rw = 0, fg_rh = 0; + VkFormat fg_format = VK_FORMAT_UNDEFINED; + Image made[4]; + uint64_t frame_id = 0; + bool fg_reset = true; + bool fg_failed = false; +}; +State& st() { + static State s; + return s; +} + +void message(uint32_t type, const wchar_t* text) { + char b[512]; + WideCharToMultiByte(CP_UTF8, 0, text ? text : L"", -1, b, sizeof b, nullptr, nullptr); + logf("vk: amd fsr %s: %s", type == FFX_API_MESSAGE_TYPE_ERROR ? "error" : "warning", b); +} + +/// Where amd_fidelityfx_loader_vk.dll may be: RX_VK_FFX_DIR, then the game's own folder. A player who +/// drops AMD's DLLs beside the game should not also have to set an environment variable. +std::wstring find_loader() { + std::wstring dirs[2]; + if (const wchar_t* e = _wgetenv(L"RX_VK_FFX_DIR"); e && *e) dirs[0] = e; + wchar_t exe[MAX_PATH]; + const DWORD n = GetModuleFileNameW(nullptr, exe, MAX_PATH); + if (n && n < MAX_PATH) { + std::wstring d(exe, n); + dirs[1] = d.substr(0, d.find_last_of(L"\\/")); + } + for (const std::wstring& d : dirs) { + if (d.empty()) continue; + const std::wstring p = d + L"\\amd_fidelityfx_loader_vk.dll"; + if (GetFileAttributesW(p.c_str()) != INVALID_FILE_ATTRIBUTES) return p; + } + return {}; +} + +bool load() { + State& s = st(); + if (s.tried) return s.module != nullptr; + s.tried = true; + if (env_int("RX_VK_FFX", 1) == 0) { + logf("vk: amd fsr 4: off for this run (RX_VK_FFX=0)"); + return false; + } + const std::wstring path = find_loader(); + if (path.empty()) { + logf("vk: amd fsr 4: no amd_fidelityfx_loader_vk.dll beside the game or in RX_VK_FFX_DIR (readme.md says " + "which of AMD's files to put there)"); + return false; + } + // (the loader looks for the upscaler and frame generation DLLs in its own folder) + s.module = LoadLibraryExW(path.c_str(), nullptr, LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR | LOAD_LIBRARY_SEARCH_DEFAULT_DIRS); + if (!s.module) { + logf("vk: amd fsr 4: amd_fidelityfx_loader_vk.dll did not load (error %lu)", GetLastError()); + return false; + } + s.create = (PfnFfxCreateContext)(void*)GetProcAddress(s.module, "ffxCreateContext"); + s.destroy = (PfnFfxDestroyContext)(void*)GetProcAddress(s.module, "ffxDestroyContext"); + s.configure = (PfnFfxConfigure)(void*)GetProcAddress(s.module, "ffxConfigure"); + s.query = (PfnFfxQuery)(void*)GetProcAddress(s.module, "ffxQuery"); + s.dispatch = (PfnFfxDispatch)(void*)GetProcAddress(s.module, "ffxDispatch"); + if (!s.create || !s.destroy || !s.configure || !s.query || !s.dispatch) { + logf("vk: amd fsr 4: amd_fidelityfx_loader_vk.dll is missing one of the FSR API's five entry points"); + FreeLibrary(s.module); + s.module = nullptr; + return false; + } + if (env_int("RX_VK_FFX_LOG", 0) > 0) { + ffxConfigureDescGlobalDebug d{}; + d.header.type = FFX_API_CONFIGURE_DESC_TYPE_GLOBALDEBUG; + d.fpMessage = message; + d.debugLevel = FFX_API_CONFIGURE_GLOBALDEBUG_LEVEL_VERBOSE; + s.configure(nullptr, &d.header); + } + logf("vk: amd fsr 4: AMD's FSR runtime loaded"); + return true; +} + +VkDeviceContext device_context() { + VkDeviceContext c{}; + c.vkDevice = dev.device; + c.vkPhysicalDevice = dev.physical; + c.vkDeviceProcAddr = vkGetDeviceProcAddr; + return c; +} + +/// The providers AMD's runtime has for one effect on this device, newest first as it lists them; the +/// first one's name in `name`. Zero when it has none, which is how a device it does not serve answers. +uint64_t providers(uint64_t create_type, std::string& name) { + State& s = st(); + VkDeviceContext c = device_context(); + uint64_t count = 0; + ffxQueryDescGetVersions q{}; + q.header.type = FFX_API_QUERY_DESC_TYPE_GET_VERSIONS; + q.createDescType = create_type; + q.device = &c; + q.outputCount = &count; + if (s.query(nullptr, &q.header) != FFX_API_RETURN_OK || count == 0) return 0; + uint64_t ids[16]{}; + const char* names[16]{}; + count = std::min(count, 16); + q.versionIds = ids; + q.versionNames = names; + if (s.query(nullptr, &q.header) != FFX_API_RETURN_OK) return 0; + std::string all; + for (uint64_t i = 0; i < count; i++) all += (i ? ", " : "") + std::string(names[i] ? names[i] : "?"); + name = names[0] ? names[0] : ""; + logf("vk: amd fsr 4: providers for effect 0x%llx: %s", (unsigned long long)create_type, all.c_str()); + return count; +} + +/// Our images are in GENERAL throughout, and AMD's Vulkan backend maps its states to layouts: only +/// COMMON, GENERIC_READ and UNORDERED_ACCESS are GENERAL there (COMPUTE_READ is SHADER_READ_ONLY_OPTIMAL, +/// which would have it transition from a layout the image is not in). So inputs are GENERIC_READ and +/// outputs UNORDERED_ACCESS, and nothing the runtime does to them leaves GENERAL. +FfxApiResource resource(VkImage image, VkFormat format, uint32_t w, uint32_t h, bool write) { + FfxApiResourceDescription d{}; + d.type = FFX_API_RESOURCE_TYPE_TEXTURE2D; + d.format = ffxApiGetSurfaceFormatVK(format); + d.width = w, d.height = h, d.depth = 1, d.mipCount = 1; + d.flags = FFX_API_RESOURCE_FLAGS_NONE; + d.usage = FFX_API_RESOURCE_USAGE_READ_ONLY; + if (ffxApiIsDepthFormat(format)) d.usage |= FFX_API_RESOURCE_USAGE_DEPTHTARGET; + if (write) d.usage |= FFX_API_RESOURCE_USAGE_UAV; + return ffxApiGetResourceVK((void*)image, d, + write ? FFX_API_RESOURCE_STATE_UNORDERED_ACCESS : FFX_API_RESOURCE_STATE_GENERIC_READ); +} + +void drop(Image& im) { + if (im.image) destroy_image(im.image, im.memory); + im = Image{}; +} + +/// A storage image of ours for the runtime to write, cleared to GENERAL with the command buffer given. +bool make(VkCommandBuffer cmd, Image& im, VkFormat format, uint32_t w, uint32_t h) { + drop(im); + VkImageCreateInfo ci{VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO}; + ci.imageType = VK_IMAGE_TYPE_2D; + ci.format = format; + ci.extent = {w, h, 1}; + ci.mipLevels = 1, ci.arrayLayers = 1; + ci.samples = VK_SAMPLE_COUNT_1_BIT; + ci.tiling = VK_IMAGE_TILING_OPTIMAL; + ci.usage = VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | + VK_IMAGE_USAGE_TRANSFER_DST_BIT; + ci.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; + if (!create_image(ci, im.image, im.memory, false)) { + logf("vk: amd fsr 4: a %ux%u image (format %d) was not made", w, h, (int)format); + return false; + } + im.width = w, im.height = h, im.format = format; + VkImageMemoryBarrier2 b{VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2}; + b.srcStageMask = VK_PIPELINE_STAGE_2_NONE; + b.dstStageMask = VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT; + b.dstAccessMask = VK_ACCESS_2_MEMORY_READ_BIT | VK_ACCESS_2_MEMORY_WRITE_BIT; + b.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED, b.newLayout = VK_IMAGE_LAYOUT_GENERAL; + b.srcQueueFamilyIndex = b.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + b.image = im.image; + b.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}; + VkDependencyInfo di{VK_STRUCTURE_TYPE_DEPENDENCY_INFO}; + di.imageMemoryBarrierCount = 1, di.pImageMemoryBarriers = &b; + vkCmdPipelineBarrier2(cmd, &di); + return true; +} + +/// Everything AMD's runtime may still be reading or writing has to be finished before its context or +/// one of our images goes: they are only ever destroyed on a size change or at shutdown. +void idle() { vkDeviceWaitIdle(dev.device); } + +void drop_upscaler() { + State& s = st(); + if (s.up || s.up_out.image) idle(); + if (s.up) s.destroy(&s.up, nullptr); + s.up = nullptr; + drop(s.up_out); + s.up_rw = s.up_rh = s.up_ow = s.up_oh = 0; +} + +void drop_framegen() { + State& s = st(); + if (s.fg || s.made[0].image) idle(); + if (s.fg) s.destroy(&s.fg, nullptr); + s.fg = nullptr; + for (Image& m : s.made) drop(m); + s.fg_w = s.fg_h = s.fg_rw = s.fg_rh = 0; +} + +/// A barrier around the runtime's own work: everything before it done, everything after it waiting. +/// The runtime records into our command buffer and does not know what the replay did before it. +void full_barrier(VkCommandBuffer cmd) { + VkMemoryBarrier2 m{VK_STRUCTURE_TYPE_MEMORY_BARRIER_2}; + m.srcStageMask = m.dstStageMask = VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT; + m.srcAccessMask = m.dstAccessMask = VK_ACCESS_2_MEMORY_READ_BIT | VK_ACCESS_2_MEMORY_WRITE_BIT; + VkDependencyInfo di{VK_STRUCTURE_TYPE_DEPENDENCY_INFO}; + di.memoryBarrierCount = 1, di.pMemoryBarriers = &m; + vkCmdPipelineBarrier2(cmd, &di); +} + +} // namespace + +bool built() { return true; } + +bool upscale_supported() { + State& s = st(); + if (s.up_supported >= 0) return s.up_supported != 0; + if (!dev.device) return false; // (asked again once there is a device) + s.up_supported = 0; + if (!load()) return false; + if (!providers(FFX_API_CREATE_CONTEXT_DESC_TYPE_UPSCALE, s.up_provider)) { + logf("vk: amd fsr 4: AMD's runtime has no upscaler for this GPU"); + return false; + } + logf("vk: amd fsr 4: upscaling available (%s)", s.up_provider.c_str()); + s.up_supported = 1; + return true; +} + +const char* upscale_provider() { return st().up_provider.c_str(); } + +bool upscale(VkCommandBuffer cmd, const UpscaleInputs& in) { + State& s = st(); + if (s.up_failed || !upscale_supported()) return false; + if (!in.color || !in.depth || !in.motion || !in.render_width || !in.render_height || !in.upscale_width || + !in.upscale_height || !(in.near_plane > 0.0f) || !(in.fov_y > 0.0f)) + return false; + if (s.up && (in.render_width > s.up_rw || in.render_height > s.up_rh || in.upscale_width != s.up_ow || + in.upscale_height != s.up_oh)) + drop_upscaler(); + if (!s.up) { + ffxCreateBackendVKDesc backend{}; + backend.header.type = FFX_API_CREATE_CONTEXT_DESC_TYPE_BACKEND_VK; + backend.deviceContext = device_context(); + ffxCreateContextDescUpscale c{}; + c.header.type = FFX_API_CREATE_CONTEXT_DESC_TYPE_UPSCALE; + c.header.pNext = &backend.header; + // HDR in (the scene is B10G11R11 float), reversed depth with an infinite far plane (the game's), + // and no exposure texture, so the runtime works the exposure out itself. The render size may + // change under the context as the game's dynamic resolution moves, within the maximum. + c.flags = FFX_UPSCALE_ENABLE_HIGH_DYNAMIC_RANGE | FFX_UPSCALE_ENABLE_DEPTH_INVERTED | + FFX_UPSCALE_ENABLE_DEPTH_INFINITE | FFX_UPSCALE_ENABLE_AUTO_EXPOSURE | + FFX_UPSCALE_ENABLE_DYNAMIC_RESOLUTION; + if (env_int("RX_VK_FFX_DEBUG", 0) > 0) c.flags |= FFX_UPSCALE_ENABLE_DEBUG_CHECKING; + c.maxRenderSize = {in.upscale_width, in.upscale_height}; + c.maxUpscaleSize = {in.upscale_width, in.upscale_height}; + c.fpMessage = message; + const ffxReturnCode_t r = s.create(&s.up, &c.header, nullptr); + if (r != FFX_API_RETURN_OK || !s.up) { + logf("vk: amd fsr 4: the upscaler's context was not made (FSR API result %u): FSR 4 is off", (unsigned)r); + s.up = nullptr; + s.up_failed = true; + return false; + } + if (!make(cmd, s.up_out, VK_FORMAT_R16G16B16A16_SFLOAT, in.upscale_width, in.upscale_height)) { + drop_upscaler(); + s.up_failed = true; + return false; + } + s.up_rw = in.upscale_width, s.up_rh = in.upscale_height; + s.up_ow = in.upscale_width, s.up_oh = in.upscale_height; + s.up_first = true; + ffxQueryGetProviderVersion v{}; + v.header.type = FFX_API_QUERY_DESC_TYPE_GET_PROVIDER_VERSION; + if (s.query(&s.up, &v.header) == FFX_API_RETURN_OK && v.versionName) s.up_provider = v.versionName; + logf("vk: amd fsr 4: %s from up to %ux%u to %ux%u", s.up_provider.c_str(), s.up_rw, s.up_rh, s.up_ow, s.up_oh); + } + LARGE_INTEGER now, freq; + QueryPerformanceCounter(&now); + QueryPerformanceFrequency(&freq); + float dt_ms = 16.667f; + if (!s.up_first && s.up_last.QuadPart) + dt_ms = (float)(1000.0 * (double)(now.QuadPart - s.up_last.QuadPart) / (double)freq.QuadPart); + s.up_last = now; + + ffxDispatchDescUpscale d{}; + d.header.type = FFX_API_DISPATCH_DESC_TYPE_UPSCALE; + d.commandList = (void*)cmd; + d.color = resource(in.color, in.color_format, in.render_width, in.render_height, false); + d.depth = resource(in.depth, in.depth_format, in.render_width, in.render_height, false); + d.motionVectors = resource(in.motion, in.motion_format, in.render_width, in.render_height, false); + d.output = resource(s.up_out.image, s.up_out.format, s.up_ow, s.up_oh, true); + // (the jitter and the motion as vk_fsr3.cpp hands them to the same upscaler's sources: render pixels, + // and the vectors already in render pixels, so the scale is 1) + d.jitterOffset = {in.jitter[0], in.jitter[1]}; + d.motionVectorScale = {in.motion_scale[0], in.motion_scale[1]}; + d.renderSize = {in.render_width, in.render_height}; + d.upscaleSize = {s.up_ow, s.up_oh}; + d.enableSharpening = false; // (the Sharpness row sharpens the finished picture already) + d.sharpness = 0.0f; + d.frameTimeDelta = std::clamp(dt_ms, 0.0f, 1000.0f); + d.preExposure = 1.0f; + d.reset = in.reset || s.up_first; + d.cameraNear = in.near_plane; + d.cameraFar = in.far_plane > in.near_plane ? in.far_plane : FLT_MAX; + d.cameraFovAngleVertical = in.fov_y; + d.viewSpaceToMetersFactor = 1.0f; + d.flags = 0; + full_barrier(cmd); + const ffxReturnCode_t r = s.dispatch(&s.up, &d.header); + full_barrier(cmd); + s.up_first = false; + if (r != FFX_API_RETURN_OK) { + static int told = 0; + if (told++ < 4) logf("vk: amd fsr 4: an upscale was refused (FSR API result %u)", (unsigned)r); + return false; + } + return true; +} + +VkImage output_image() { return st().up_out.image; } + +bool frames_supported() { + State& s = st(); + if (s.fg_supported >= 0) return s.fg_supported != 0; + if (!dev.device) return false; + s.fg_supported = 0; + if (env_int("RX_VK_FFX_FG", 1) == 0) return false; + if (!load()) return false; + if (!providers(FFX_API_CREATE_CONTEXT_DESC_TYPE_FRAMEGENERATION, s.fg_provider)) { + logf("vk: amd fsr 4: AMD's runtime has no frame generation for this GPU"); + return false; + } + logf("vk: amd fsr 4: frame generation available (%s)", s.fg_provider.c_str()); + s.fg_supported = 1; + return true; +} + +uint32_t frames_wanted() { + static const uint32_t cap = (uint32_t)std::clamp(env_int("RX_VK_FFX_FG_MAX", 4), 1, 4); + return cap; +} + +bool generate(VkCommandBuffer cmd, const FrameInputs& in) { + State& s = st(); + if (s.fg_failed || !frames_supported()) return false; + if (!in.color || !in.depth || !in.motion || !in.width || !in.height || !in.render_width || !in.render_height || + in.frames < 1 || in.frames > 4 || !(in.near_plane > 0.0f) || !(in.fov_y > 0.0f)) + return false; + if (s.fg && (in.width != s.fg_w || in.height != s.fg_h || in.render_width > s.fg_rw || + in.render_height > s.fg_rh || in.color_format != s.fg_format)) + drop_framegen(); + if (!s.fg) { + ffxCreateBackendVKDesc backend{}; + backend.header.type = FFX_API_CREATE_CONTEXT_DESC_TYPE_BACKEND_VK; + backend.deviceContext = device_context(); + ffxCreateContextDescFrameGenerationVersion version{}; + version.header.type = FFX_API_CREATE_CONTEXT_DESC_TYPE_FRAMEGENERATION_VERSION; + version.header.pNext = &backend.header; + version.version = FFX_FRAMEGENERATION_VERSION; + ffxCreateContextDescFrameGeneration c{}; + c.header.type = FFX_API_CREATE_CONTEXT_DESC_TYPE_FRAMEGENERATION; + c.header.pNext = &version.header; + // The presented frame is SDR (RGBA8, already tonemapped by the game), depth as the upscaler's. + // Not ASYNC_WORKLOAD_SUPPORT: the made frames are recorded into the replay's own command buffer. + c.flags = FFX_FRAMEGENERATION_ENABLE_DEPTH_INVERTED | FFX_FRAMEGENERATION_ENABLE_DEPTH_INFINITE; + if (env_int("RX_VK_FFX_DEBUG", 0) > 0) c.flags |= FFX_FRAMEGENERATION_ENABLE_DEBUG_CHECKING; + c.displaySize = {in.width, in.height}; + c.maxRenderSize = {in.width, in.height}; + c.backBufferFormat = ffxApiGetSurfaceFormatVK(in.color_format); + const ffxReturnCode_t r = s.create(&s.fg, &c.header, nullptr); + if (r != FFX_API_RETURN_OK || !s.fg) { + logf("vk: amd fsr 4: the frame generation context was not made (FSR API result %u): FSR frame " + "generation is off", + (unsigned)r); + s.fg = nullptr; + s.fg_failed = true; + return false; + } + for (Image& m : s.made) + if (!make(cmd, m, in.color_format, in.width, in.height)) { + drop_framegen(); + s.fg_failed = true; + return false; + } + s.fg_w = in.width, s.fg_h = in.height, s.fg_rw = in.width, s.fg_rh = in.height; + s.fg_format = in.color_format; + s.fg_reset = true; + ffxQueryGetProviderVersion v{}; + v.header.type = FFX_API_QUERY_DESC_TYPE_GET_PROVIDER_VERSION; + if (s.query(&s.fg, &v.header) == FFX_API_RETURN_OK && v.versionName) s.fg_provider = v.versionName; + logf("vk: amd fsr 4: %s frame generation at %ux%u", s.fg_provider.c_str(), s.fg_w, s.fg_h); + } + s.frame_id++; + const bool reset = in.reset || s.fg_reset; + s.fg_reset = false; + + // Configure, once a frame, with the frame id going up by exactly one each time (anything else resets + // the runtime's history). No swapchain of AMD's: Hookshot presents and paces its own made frames + // (vk_framegen.cpp), so the dispatch below is the "manual" one AMD's documentation describes, into + // our own images on our own command buffer. + ffxConfigureDescFrameGeneration cfg{}; + cfg.header.type = FFX_API_CONFIGURE_DESC_TYPE_FRAMEGENERATION; + cfg.swapChain = nullptr; + cfg.frameGenerationEnabled = true; + cfg.allowAsyncWorkloads = false; + cfg.flags = env_int("RX_VK_FFX_DEBUG", 0) > 1 ? FFX_FRAMEGENERATION_FLAG_DRAW_DEBUG_VIEW : 0; + cfg.generationRect = {0, 0, (int32_t)in.width, (int32_t)in.height}; + cfg.frameID = s.frame_id; + if (const ffxReturnCode_t r = s.configure(&s.fg, &cfg.header); r != FFX_API_RETURN_OK) { + static int told = 0; + if (told++ < 4) logf("vk: amd fsr 4: frame generation's configuration was refused (FSR API result %u)", (unsigned)r); + return false; + } + + ffxDispatchDescFrameGenerationPrepareV2 prep{}; + prep.header.type = FFX_API_DISPATCH_DESC_TYPE_FRAMEGENERATION_PREPARE_V2; + prep.frameID = s.frame_id; + prep.flags = 0; + prep.commandList = (void*)cmd; + prep.renderSize = {in.render_width, in.render_height}; + prep.jitterOffset = {in.jitter[0], in.jitter[1]}; + prep.motionVectorScale = {in.motion_scale[0], in.motion_scale[1]}; + prep.frameTimeDelta = std::clamp(in.frame_time_ms, 0.0f, 1000.0f); + prep.reset = reset; + prep.cameraNear = in.near_plane; + prep.cameraFar = in.far_plane > in.near_plane ? in.far_plane : FLT_MAX; + prep.cameraFovAngleVertical = in.fov_y; + prep.viewSpaceToMetersFactor = 1.0f; + prep.depth = resource(in.depth, in.depth_format, in.render_width, in.render_height, false); + prep.motionVectors = resource(in.motion, in.motion_format, in.render_width, in.render_height, false); + if (in.have_view) { + // (the view is world -> camera, 3x4 row major: its rows are the camera's axes in the world, and its + // position is minus the transposed rotation times the translation; vk_framegen.cpp's DLSS-G does + // the same) + const float* v = in.view; + for (int c = 0; c < 3; c++) { + prep.cameraRight[c] = v[0 * 4 + c]; + prep.cameraUp[c] = v[1 * 4 + c]; + prep.cameraForward[c] = v[2 * 4 + c]; + prep.cameraPosition[c] = -(v[0 * 4 + c] * v[0 * 4 + 3] + v[1 * 4 + c] * v[1 * 4 + 3] + + v[2 * 4 + c] * v[2 * 4 + 3]); + } + } + full_barrier(cmd); + if (const ffxReturnCode_t r = s.dispatch(&s.fg, &prep.header); r != FFX_API_RETURN_OK) { + static int told = 0; + if (told++ < 4) logf("vk: amd fsr 4: frame generation's preparation was refused (FSR API result %u)", (unsigned)r); + return false; + } + + ffxDispatchDescFrameGeneration d{}; + d.header.type = FFX_API_DISPATCH_DESC_TYPE_FRAMEGENERATION; + d.commandList = (void*)cmd; + d.presentColor = resource(in.color, in.color_format, in.width, in.height, false); + for (uint32_t k = 0; k < in.frames; k++) + d.outputs[k] = resource(s.made[k].image, s.made[k].format, in.width, in.height, true); + d.numGeneratedFrames = in.frames; + d.reset = reset; + d.backbufferTransferFunction = FFX_API_BACKBUFFER_TRANSFER_FUNCTION_SRGB; + d.minMaxLuminance[0] = 0.0f, d.minMaxLuminance[1] = 1.0f; + d.generationRect = {0, 0, (int32_t)in.width, (int32_t)in.height}; + d.frameID = s.frame_id; + const ffxReturnCode_t r = s.dispatch(&s.fg, &d.header); + full_barrier(cmd); + if (r != FFX_API_RETURN_OK) { + static int told = 0; + if (told++ < 4) + logf("vk: amd fsr 4: frame generation of %u frames was refused (FSR API result %u)", in.frames, (unsigned)r); + return false; + } + return true; +} + +VkImage made_image(uint32_t k) { + State& s = st(); + return k >= 1 && k <= 4 ? s.made[k - 1].image : VK_NULL_HANDLE; +} + +void reset() { st().fg_reset = true; } + +void shutdown() { + State& s = st(); + drop_upscaler(); + drop_framegen(); + if (s.module) FreeLibrary(s.module); + s = State{}; +} + +} // namespace mkwvk::ffx + +#else // not Windows: AMD's FSR 4 runtime is Windows DLLs namespace mkwvk::ffx { @@ -22,3 +556,4 @@ void shutdown() {} } // namespace mkwvk::ffx +#endif diff --git a/third_party/ffx-api/LICENSE.txt b/third_party/ffx-api/LICENSE.txt new file mode 100644 index 000000000..707e71bd9 --- /dev/null +++ b/third_party/ffx-api/LICENSE.txt @@ -0,0 +1,5 @@ +Copyright (C) Advanced Micro Devices, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. diff --git a/third_party/ffx-api/PROVENANCE.md b/third_party/ffx-api/PROVENANCE.md new file mode 100644 index 000000000..3d4419ae0 --- /dev/null +++ b/third_party/ffx-api/PROVENANCE.md @@ -0,0 +1,23 @@ +# AMD FSR API headers + +The public headers of AMD's FSR API (the "FidelityFX API"), which `gpu/vk/vk_ffx.cpp` compiles against to reach AMD FSR 4 +upscaling and frame generation. Unmodified upstream copies. + +- Upstream: https://github.com/GPUOpen-LibrariesAndSDKs/FidelityFX-SDK +- Version: FSR SDK v2.4.0, commit `7539ae8b6568ad29ed78a753404351daf3b5cca7` +- License: MIT, in `LICENSE.txt`. The SDK's `docs/license.md` lists each of these files under its MIT section; keep the + notice with any distribution. + +| here | upstream | +|---|---| +| `api/include/ffx_api.h`, `ffx_api_types.h`, `vk/ffx_api_vk.h` | `Kits/FidelityFX/api/include/` | +| `upscalers/include/ffx_upscale.h` | `Kits/FidelityFX/upscalers/include/` | +| `framegeneration/include/ffx_framegeneration.h`, `ffx_framegeneration_api_types.h`, `vk/ffx_api_framegeneration_vk.h` | `Kits/FidelityFX/framegeneration/include/` | + +The folder layout is upstream's, because the headers include each other by relative path. + +Headers only. Nothing is linked: AMD's runtime, `amd_fidelityfx_loader_vk.dll` with `amd_fidelityfx_upscaler_vk.dll` and +`amd_fidelityfx_framegeneration_vk.dll` (signed by AMD, also MIT in SDK 2.4), is loaded at run time from beside the game. +That runtime is Windows only, so on Linux these headers are not compiled at all; see `docs/upscaling.md`. + +Nothing in this folder is edited. A change belongs in a new folder with its own note, per `CONTRIBUTING.md`. diff --git a/third_party/ffx-api/api/include/ffx_api.h b/third_party/ffx-api/api/include/ffx_api.h new file mode 100644 index 000000000..d351c168e --- /dev/null +++ b/third_party/ffx-api/api/include/ffx_api.h @@ -0,0 +1,213 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2026 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#pragma once + +#if defined(__cplusplus) +extern "C" { +#endif // #if defined(__cplusplus) + +#define FFX_API_ENTRY __declspec(dllexport) + +#include + +enum FfxApiReturnCodes +{ + FFX_API_RETURN_OK = 0, ///< The oparation was successful. + FFX_API_RETURN_ERROR = 1, ///< An error occurred that is not further specified. + FFX_API_RETURN_ERROR_UNKNOWN_DESCTYPE = 2, ///< The structure type given was not recognized for the function or context with which it was used. This is likely a programming error. + FFX_API_RETURN_ERROR_RUNTIME_ERROR = 3, ///< The underlying runtime (e.g. D3D12, Vulkan) or effect returned an error code. + FFX_API_RETURN_NO_PROVIDER = 4, ///< No provider was found for the given structure type. This is likely a programming error. + FFX_API_RETURN_ERROR_MEMORY = 5, ///< A memory allocation failed. + FFX_API_RETURN_ERROR_PARAMETER = 6, ///< A parameter was invalid, e.g. a null pointer, empty resource or out-of-bounds enum value. + FFX_API_RETURN_PROVIDER_NO_SUPPORT_NEW_DESCTYPE = 7, ///< The structure type given is new and not supported in the old provider. This is likely fixed with driver upgrade or effect DLL upgrade. +}; + +typedef void* ffxContext; +typedef uint32_t ffxReturnCode_t; + +#define FFX_API_EFFECT_MASK 0x00ff0000u +#define FFX_API_BACKEND_MASK 0xff000000u +#define FFX_API_EFFECT_ID_GENERAL 0x00000000u + +// Base Descriptor types +typedef uint64_t ffxStructType_t; +typedef struct ffxApiHeader +{ + ffxStructType_t type; ///< The structure type. Must always be set to the corresponding value for any structure (found nearby with a similar name). + struct ffxApiHeader* pNext; ///< Pointer to next structure, used for optional parameters and extensions. Can be null. +} ffxApiHeader; + +typedef ffxApiHeader ffxCreateContextDescHeader; +typedef ffxApiHeader ffxConfigureDescHeader; +typedef ffxApiHeader ffxQueryDescHeader; +typedef ffxApiHeader ffxDispatchDescHeader; + +// Extensions for global debug +#define FFX_API_CONFIGURE_GLOBALDEBUG_LEVEL_SILENCE 0x0000000u +#define FFX_API_CONFIGURE_GLOBALDEBUG_LEVEL_ERRORS 0x0000001u +#define FFX_API_CONFIGURE_GLOBALDEBUG_LEVEL_WARNINGS 0x0000002u +#define FFX_API_CONFIGURE_GLOBALDEBUG_LEVEL_VERBOSE 0xfffffffu + +enum FfxApiMsgType +{ + FFX_API_MESSAGE_TYPE_ERROR = 0, + FFX_API_MESSAGE_TYPE_WARNING = 1, + FFX_API_MESSAGE_TYPE_COUNT +}; + +typedef void (*ffxApiMessage)(uint32_t type, const wchar_t* message); + +#define FFX_API_CONFIGURE_DESC_TYPE_GLOBALDEBUG 7u +struct ffxConfigureDescGlobalDebug +{ + ffxConfigureDescHeader header; + uint64_t effectId; + ffxApiMessage fpMessage; ///< A pointer to a function that can receive messages from the runtime. May be null. + uint32_t debugLevel; +}; + +#define FFX_API_QUERY_DESC_TYPE_GET_VERSIONS 4u +struct ffxQueryDescGetVersions +{ + ffxQueryDescHeader header; + uint64_t createDescType; ///< Create description for the effect whose versions should be enumerated. + void* device; ///< For DX12: pointer to ID3D12Device. For VK, pointer to VkDeviceContext. + uint64_t *outputCount; ///< Input capacity of id and name arrays. Output number of returned versions. If initially zero, output is number of available versions. + uint64_t *versionIds; ///< Output array of version ids to be used as version overrides. If null, only names and count are returned. + const char** versionNames; ///< Output array of version names for display. If null, only ids and count are returned. If both this and versionIds are null, only count is returned. +}; + +#define FFX_API_DESC_TYPE_OVERRIDE_VERSION 5u +struct ffxOverrideVersion +{ + ffxApiHeader header; + uint64_t versionId; ///< Id of version to use. Must be a value returned from a query in ffxQueryDescGetVersions.versionIds array. +}; + +#define FFX_API_QUERY_DESC_TYPE_GET_PROVIDER_VERSION 6u +struct ffxQueryGetProviderVersion +{ + ffxQueryDescHeader header; + uint64_t versionId; ///< Id of provider being used for queried context. 0 if invalid. + const char* versionName; ///< Version name for display. If nullptr, the query was invalid. +}; + +// Memory allocation function. Must return a valid pointer to at least size bytes of memory aligned to hold any type. +// May return null to indicate failure. Standard library malloc fulfills this requirement. +typedef void* (*ffxAlloc)(void* pUserData, uint64_t size); + +// Memory deallocation function. May be called with null pointer as second argument. +typedef void (*ffxDealloc)(void* pUserData, void* pMem); + +typedef struct ffxAllocationCallbacks +{ + void* pUserData; + ffxAlloc alloc; + ffxDealloc dealloc; +} ffxAllocationCallbacks; + +// Creates a FFX object context. +// Depending on the desc structures provided to this function, the context will be created with the desired version and attributes. +// Non-zero return indicates error code. +// Pointers passed in desc must remain live until ffxDestroyContext is called on the context. +// MemCb may be null; the system allocator (malloc/free) will be used in this case. +FFX_API_ENTRY ffxReturnCode_t ffxCreateContext(ffxContext* context, ffxCreateContextDescHeader* desc, const ffxAllocationCallbacks* memCb); +typedef ffxReturnCode_t (*PfnFfxCreateContext)(ffxContext* context, ffxCreateContextDescHeader* desc, const ffxAllocationCallbacks* memCb); + +// Destroys an FFX object context. +// Non-zero return indicates error code. +// MemCb must be compatible with the callbacks passed into ffxCreateContext. +FFX_API_ENTRY ffxReturnCode_t ffxDestroyContext(ffxContext* context, const ffxAllocationCallbacks* memCb); +typedef ffxReturnCode_t (*PfnFfxDestroyContext)(ffxContext* context, const ffxAllocationCallbacks* memCb); + +// Configures the provided FFX object context. +// If context is null, configure operates on any global state. +// Non-zero return indicates error code. +FFX_API_ENTRY ffxReturnCode_t ffxConfigure(ffxContext* context, const ffxConfigureDescHeader* desc); +typedef ffxReturnCode_t (*PfnFfxConfigure)(ffxContext* context, const ffxConfigureDescHeader* desc); + +// Queries the provided FFX object context. +// If context is null, query operates on any global state. +// Non-zero return indicates error code. +FFX_API_ENTRY ffxReturnCode_t ffxQuery(ffxContext* context, ffxQueryDescHeader* desc); +typedef ffxReturnCode_t (*PfnFfxQuery)(ffxContext* context, ffxQueryDescHeader* desc); + +// Dispatches work on the given FFX object context defined by the dispatch descriptor. +// Non-zero return indicates error code. +FFX_API_ENTRY ffxReturnCode_t ffxDispatch(ffxContext* context, const ffxDispatchDescHeader* desc); +typedef ffxReturnCode_t (*PfnFfxDispatch)(ffxContext* context, const ffxDispatchDescHeader* desc); + +// FFX_API_EFFECT_IDs +#define FFX_API_EFFECT_ID_UPSCALE 0x00010000u +#define FFX_API_EFFECT_ID_FRAMEGENERATION 0x00020000u +#define FFX_API_EFFECT_ID_FRAMEGENERATIONSWAPCHAIN 0x00030000u +// Need to keep this ID around for the deprecated VK frame gen swapchain +#define FFX_API_EFFECT_ID_FRAMEGENERATIONSWAPCHAIN_VK 0x00040000u +#define FFX_API_EFFECT_ID_DENOISER 0x00050000u +#define FFX_API_EFFECT_ID_RADIANCECACHE 0x00060000u +#define FFX_API_EFFECT_COUNT 6u + +#define FFX_API_MAKE_EFFECT_SUB_ID(effectId, subversion) ((effectId & FFX_API_EFFECT_MASK) | (subversion & ~FFX_API_EFFECT_MASK)) + +// FFX_APID_BACKEND_IDs +#define FFX_API_BACKEND_ID_DX12 0x00000000u +#define FFX_API_BACKEND_ID_VK 0x01000000u // For new effects going forward, please use this backend ID for vulkan specifics +#define FFX_API_BACKEND_ID_XBOX 0x02000000u + +#define FFX_API_MAKE_BACKEND_SUB_ID(backendId, subversion) ((backendId & FFX_API_BACKEND_MASK) | (subversion & ~FFX_API_BACKEND_MASK)) + +// Combiner for BACKEND-specific EFFECT sub-Ids +#define FFX_API_MAKE_BACKEND_EFFECT_SUB_ID(backendId, effectId, subversion) ((subversion & ~FFX_API_EFFECT_MASK) | (effectId & FFX_API_EFFECT_MASK) | (backendId & FFX_API_BACKEND_MASK) | (subversion & ~(FFX_API_BACKEND_MASK | FFX_API_EFFECT_MASK))) + +// Pragma macros for controlling warnings so that deprecations take affect externally but can be suppressed internally. +// This is so we can maintain the API/ABI until we are ready to make the breaking change. +// These are sadly compiler specific. +#if defined(_MSC_VER) && !defined(__clang__) && !defined(__GNUC__) && !defined(__INTEL_COMPILER) +#define FFX_PRAGMA_WARNING_PUSH warning( push ) +#define FFX_PRAGMA_WARNING_POP warning( pop ) +#define FFX_PRAGMA_WARNING_DISABLE_DEPRECATIONS warning( disable: 4996 ) +#define FFX_PRAGMA_WARNING_WARN_DEPRECATIONS warning( default: 4996 ) +#elif defined(__clang__) || defined(__GNUC__) +#define FFX_PRAGMA_WARNING_PUSH GCC diagnostic push +#define FFX_PRAGMA_WARNING_POP GCC diagnostic pop +#define FFX_PRAGMA_WARNING_DISABLE_DEPRECATIONS GCC diagnostic ignored "-Wdeprecated" +#define FFX_PRAGMA_WARNING_WARN_DEPRECATIONS GCC diagnostic warning "-Wdeprecated" +#else +#define FFX_PRAGMA_WARNING_PUSH +#define FFX_PRAGMA_WARNING_POP +#define FFX_PRAGMA_WARNING_DISABLE_DEPRECATIONS +#endif + +#define FFX_DEPRECATION(message) [[deprecated(message)]] + +#define FFX_API_CONFIGURE_DESC_TYPE_GLOBALDEBUG1 0x0000001u +struct FFX_DEPRECATION("Use ffxConfigureDescGlobalDebug instead of ffxConfigureDescGlobalDebug1.") ffxConfigureDescGlobalDebug1 +{ + ffxConfigureDescHeader header; + ffxApiMessage fpMessage; + uint32_t debugLevel; +}; + +#if defined(__cplusplus) +} +#endif // #if defined(__cplusplus) diff --git a/third_party/ffx-api/api/include/ffx_api_types.h b/third_party/ffx-api/api/include/ffx_api_types.h new file mode 100644 index 000000000..380c4c0a1 --- /dev/null +++ b/third_party/ffx-api/api/include/ffx_api_types.h @@ -0,0 +1,257 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2026 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#pragma once + +#include +#include + +/// An enumeration of surface formats. Needs to match enum FfxApiSurfaceFormat +enum FfxApiSurfaceFormat +{ + FFX_API_SURFACE_FORMAT_UNKNOWN, ///< Unknown format + FFX_API_SURFACE_FORMAT_R32G32B32A32_TYPELESS, ///< 32 bit per channel, 4 channel typeless format + FFX_API_SURFACE_FORMAT_R32G32B32A32_UINT, ///< 32 bit per channel, 4 channel uint format + FFX_API_SURFACE_FORMAT_R32G32B32A32_FLOAT, ///< 32 bit per channel, 4 channel float format + FFX_API_SURFACE_FORMAT_R16G16B16A16_FLOAT, ///< 16 bit per channel, 4 channel float format + FFX_API_SURFACE_FORMAT_R32G32B32_FLOAT, ///< 32 bit per channel, 3 channel float format + FFX_API_SURFACE_FORMAT_R32G32_FLOAT, ///< 32 bit per channel, 2 channel float format + FFX_API_SURFACE_FORMAT_R8_UINT, ///< 8 bit per channel, 1 channel float format + FFX_API_SURFACE_FORMAT_R32_UINT, ///< 32 bit per channel, 1 channel float format + FFX_API_SURFACE_FORMAT_R8G8B8A8_TYPELESS, ///< 8 bit per channel, 4 channel typeless format + FFX_API_SURFACE_FORMAT_R8G8B8A8_UNORM, ///< 8 bit per channel, 4 channel unsigned normalized format + FFX_API_SURFACE_FORMAT_R8G8B8A8_SNORM, ///< 8 bit per channel, 4 channel signed normalized format + FFX_API_SURFACE_FORMAT_R8G8B8A8_SRGB, ///< 8 bit per channel, 4 channel srgb normalized + FFX_API_SURFACE_FORMAT_B8G8R8A8_TYPELESS, ///< 8 bit per channel, 4 channel typeless format + FFX_API_SURFACE_FORMAT_B8G8R8A8_UNORM, ///< 8 bit per channel, 4 channel unsigned normalized format + FFX_API_SURFACE_FORMAT_B8G8R8A8_SRGB, ///< 8 bit per channel, 4 channel srgb normalized + FFX_API_SURFACE_FORMAT_R11G11B10_FLOAT, ///< 32 bit 3 channel float format + FFX_API_SURFACE_FORMAT_R10G10B10A2_UNORM, ///< 10 bit per 3 channel, 2 bit for 1 channel normalized format + FFX_API_SURFACE_FORMAT_R16G16_FLOAT, ///< 16 bit per channel, 2 channel float format + FFX_API_SURFACE_FORMAT_R16G16_UINT, ///< 16 bit per channel, 2 channel unsigned int format + FFX_API_SURFACE_FORMAT_R16G16_SINT, ///< 16 bit per channel, 2 channel signed int format + FFX_API_SURFACE_FORMAT_R16_FLOAT, ///< 16 bit per channel, 1 channel float format + FFX_API_SURFACE_FORMAT_R16_UINT, ///< 16 bit per channel, 1 channel unsigned int format + FFX_API_SURFACE_FORMAT_R16_UNORM, ///< 16 bit per channel, 1 channel unsigned normalized format + FFX_API_SURFACE_FORMAT_R16_SNORM, ///< 16 bit per channel, 1 channel signed normalized format + FFX_API_SURFACE_FORMAT_R8_UNORM, ///< 8 bit per channel, 1 channel unsigned normalized format + FFX_API_SURFACE_FORMAT_R8G8_UNORM, ///< 8 bit per channel, 2 channel unsigned normalized format + FFX_API_SURFACE_FORMAT_R8G8_UINT, ///< 8 bit per channel, 2 channel unsigned integer format + FFX_API_SURFACE_FORMAT_R32_FLOAT, ///< 32 bit per channel, 1 channel float format + FFX_API_SURFACE_FORMAT_R9G9B9E5_SHAREDEXP, ///< 9 bit per channel, 5 bit exponent format + + FFX_API_SURFACE_FORMAT_R16G16B16A16_TYPELESS, ///< 16 bit per channel, 4 channel typeless format + FFX_API_SURFACE_FORMAT_R32G32_TYPELESS, ///< 32 bit per channel, 2 channel typeless format + FFX_API_SURFACE_FORMAT_R10G10B10A2_TYPELESS, ///< 10 bit per 3 channel, 2 bit for 1 channel typeless format + FFX_API_SURFACE_FORMAT_R16G16_TYPELESS, ///< 16 bit per channel, 2 channel typless format + FFX_API_SURFACE_FORMAT_R16_TYPELESS, ///< 16 bit per channel, 1 channel typeless format + FFX_API_SURFACE_FORMAT_R8_TYPELESS, ///< 8 bit per channel, 1 channel typeless format + FFX_API_SURFACE_FORMAT_R8G8_TYPELESS, ///< 8 bit per channel, 2 channel typeless format + FFX_API_SURFACE_FORMAT_R32_TYPELESS, ///< 32 bit per channel, 1 channel typeless format + FFX_API_SURFACE_FORMAT_R32G32_UINT, ///< 32 bit per channel, 2 channel uint format + + FFX_API_SURFACE_FORMAT_R8_SNORM, ///< 8 bit per channel, 1 channel signed normalized format +}; + +/// An enumeration of resource usage. +enum FfxApiResourceUsage +{ + FFX_API_RESOURCE_USAGE_READ_ONLY = 0, ///< No usage flags indicate a resource is read only. + FFX_API_RESOURCE_USAGE_RENDERTARGET = (1<<0), ///< Indicates a resource will be used as render target. + FFX_API_RESOURCE_USAGE_UAV = (1<<1), ///< Indicates a resource will be used as UAV. + FFX_API_RESOURCE_USAGE_DEPTHTARGET = (1<<2), ///< Indicates a resource will be used as depth target. + FFX_API_RESOURCE_USAGE_INDIRECT = (1<<3), ///< Indicates a resource will be used as indirect argument buffer + FFX_API_RESOURCE_USAGE_ARRAYVIEW = (1<<4), ///< Indicates a resource that will generate array views. Works on 2D and cubemap textures + FFX_API_RESOURCE_USAGE_STENCILTARGET = (1<<5), ///< Indicates a resource will be used as stencil target. + + FFX_API_RESOURCE_USAGE_DCC_RENDERTARGET = (1<<15), ///< Indicates a resource that should specify optimal render target memory access flags (for console use) +}; + + +/// An enumeration of resource states. +enum FfxApiResourceState +{ + FFX_API_RESOURCE_STATE_COMMON = (1 << 0), + FFX_API_RESOURCE_STATE_UNORDERED_ACCESS = (1 << 1), ///< Indicates a resource is in the state to be used as UAV. + FFX_API_RESOURCE_STATE_COMPUTE_READ = (1 << 2), ///< Indicates a resource is in the state to be read by compute shaders. + FFX_API_RESOURCE_STATE_PIXEL_READ = (1 << 3), ///< Indicates a resource is in the state to be read by pixel shaders. + FFX_API_RESOURCE_STATE_PIXEL_COMPUTE_READ = (FFX_API_RESOURCE_STATE_PIXEL_READ | FFX_API_RESOURCE_STATE_COMPUTE_READ), ///< Indicates a resource is in the state to be read by pixel or compute shaders. + FFX_API_RESOURCE_STATE_COPY_SRC = (1 << 4), ///< Indicates a resource is in the state to be used as source in a copy command. + FFX_API_RESOURCE_STATE_COPY_DEST = (1 << 5), ///< Indicates a resource is in the state to be used as destination in a copy command. + FFX_API_RESOURCE_STATE_GENERIC_READ = (FFX_API_RESOURCE_STATE_COPY_SRC | FFX_API_RESOURCE_STATE_COMPUTE_READ), ///< Indicates a resource is in generic (slow) read state. + FFX_API_RESOURCE_STATE_INDIRECT_ARGUMENT = (1 << 6), ///< Indicates a resource is in the state to be used as an indirect command argument + FFX_API_RESOURCE_STATE_PRESENT = (1 << 7), ///< Indicates a resource is in the state to be used to present to the swap chain + FFX_API_RESOURCE_STATE_RENDER_TARGET = (1 << 8), ///< Indicates a resource is in the state to be used as render target + FFX_API_RESOURCE_STATE_DEPTH_ATTACHMENT = (1 << 9), ///< Indicates a resource is in the state to be used as depth attachment +}; + +/// An enumeration of surface dimensions. +enum FfxApiResourceDimension +{ + FFX_API_RESOURCE_DIMENSION_TEXTURE_1D, ///< A resource with a single dimension. + FFX_API_RESOURCE_DIMENSION_TEXTURE_2D, ///< A resource with two dimensions. +}; + +/// An enumeration of resource flags. +enum FfxApiResourceFlags +{ + FFX_API_RESOURCE_FLAGS_NONE = 0, ///< No flags. + FFX_API_RESOURCE_FLAGS_ALIASABLE = (1 << 0), ///< A bit indicating a resource does not need to persist across frames. + FFX_API_RESOURCE_FLAGS_UNDEFINED = (1 << 1), ///< Special case flag used internally when importing resources that require additional setup +}; + +// An enumeration for different resource types +enum FfxApiResourceType +{ + FFX_API_RESOURCE_TYPE_BUFFER, ///< The resource is a buffer. + FFX_API_RESOURCE_TYPE_TEXTURE1D, ///< The resource is a 1-dimensional texture. + FFX_API_RESOURCE_TYPE_TEXTURE2D, ///< The resource is a 2-dimensional texture. + FFX_API_RESOURCE_TYPE_TEXTURE_CUBE, ///< The resource is a cube map. + FFX_API_RESOURCE_TYPE_TEXTURE3D, ///< The resource is a 3-dimensional texture. +}; + +enum FfxApiBackbufferTransferFunction +{ + FFX_API_BACKBUFFER_TRANSFER_FUNCTION_SRGB, + FFX_API_BACKBUFFER_TRANSFER_FUNCTION_PQ, + FFX_API_BACKBUFFER_TRANSFER_FUNCTION_SCRGB +}; + +/// A structure encapsulating a 2-dimensional point, using 32bit unsigned integers. +struct FfxApiDimensions2D +{ + uint32_t width; ///< The width of a 2-dimensional range. + uint32_t height; ///< The height of a 2-dimensional range. +}; + +/// A structure encapsulating a 2-dimensional set of floating point coordinates. +struct FfxApiFloatCoords2D +{ + float x; ///< The x coordinate of a 2-dimensional point. + float y; ///< The y coordinate of a 2-dimensional point. +}; + +/// A structure encapsulating a 3-dimensional set of floating point coordinates. +struct FfxApiFloatCoords3D +{ + float x; ///< The x coordinate of a 3-dimensional point. + float y; ///< The y coordinate of a 3-dimensional point. + float z; ///< The z coordinate of a 3-dimensional point. +}; + +/// A structure encapsulating a 2-dimensional rect. +struct FfxApiRect2D +{ + int32_t left; + int32_t top; + int32_t width; + int32_t height; +}; + +/// A structure describing a resource. +/// +/// @ingroup SDKTypes +struct FfxApiResourceDescription +{ + uint32_t type; ///< The type of the resource. + uint32_t format; ///< The surface format. + union { + uint32_t width; ///< The width of the texture resource. + uint32_t size; ///< The size of the buffer resource. + }; + + union { + uint32_t height; ///< The height of the texture resource. + uint32_t stride; ///< The stride of the buffer resource. + }; + + union { + uint32_t depth; ///< The depth of the texture resource. + uint32_t alignment; ///< The alignment of the buffer resource. + }; + + uint32_t mipCount; ///< Number of mips (or 0 for full mipchain). + uint32_t flags; ///< A set of resource flags. + uint32_t usage; ///< Resource usage flags. +}; + +#define FFX_RESOURCE_NAME_SIZE 64 + +struct FfxApiResource +{ + void* resource; + struct FfxApiResourceDescription description; + uint32_t state; +}; + +//struct definition matches FfxApiEffectMemoryUsage +typedef struct FfxApiEffectMemoryUsage +{ + uint64_t totalUsageInBytes; + uint64_t aliasableUsageInBytes; +} FfxApiEffectMemoryUsage; + +/// A structure describing a constant buffer allocation. +/// +/// @ingroup SDKTypes +typedef struct FfxApiConstantBufferAllocation +{ + struct FfxApiResource resource; ///< The resource representing the constant buffer resource. + uint64_t handle; ///< The binding handle for the constant buffer + +} FfxApiConstantBufferAllocation; + +/// A function definition for a constant buffer allocation callback +/// Used to provide a constant buffer allocator to the calling backend +/// +/// @param [in] data The constant buffer data. +/// @param [in] dataSize The size of the constant buffer data. +/// +/// @ingroup SDKTypes +typedef FfxApiConstantBufferAllocation(*FfxApiConstantBufferAllocator)(void* data, const uint64_t dataSize); + +/// A 4-component floating point vector +typedef struct FfxApiFloat4 +{ + float x; + float y; + float z; + float w; +} FfxApiFloat4; + +/// A 4x4 matrix in row-major layout with row-vector convention. +/// This is the canonical format expected by FFX APIs. +/// +/// Memory layout: rows[row_index][column_index] +/// Mathematical convention: v * M (row vector multiplied by matrix) +typedef struct FfxApiMatrix4x4 +{ + FfxApiFloat4 rows[4]; ///< Four rows of the matrix. Access as rows[row].x, rows[row].y etc. +} FfxApiMatrix4x4; + +/// An inclusive floating-point interval [min, max]. +/// Valid instances must satisfy min <= max. +typedef struct FfxApiFloatBounds +{ + float min; ///< Lower bound of the interval. + float max; ///< Upper bound of the interval. +} FfxApiFloatBounds; diff --git a/third_party/ffx-api/api/include/vk/ffx_api_vk.h b/third_party/ffx-api/api/include/vk/ffx_api_vk.h new file mode 100644 index 000000000..1bbe1d9e4 --- /dev/null +++ b/third_party/ffx-api/api/include/vk/ffx_api_vk.h @@ -0,0 +1,308 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2026 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#pragma once +#include "../ffx_api.h" +#include "../ffx_api_types.h" +#include + +/// FFX specific callback type when submitting a command buffer to a queue. +typedef VkResult(*PFN_vkQueueSubmitFFXAPI)(uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence); + +/// Helper stucture +struct VkQueueInfoFFXAPI +{ + VkQueue queue; ///< the vulkan queue + uint32_t familyIndex; ///< the queue family index, that will be used to perform queue family ownership transfer + PFN_vkQueueSubmitFFXAPI submitFunc; ///< an optional submit function in case there might be some concurrent submissions +}; + +// We need to keep this one alive because of VK verison of FSR3.1.4 +// Deprecated version of the VK backend create context descriptor, please use the non-deprecated version below. +#define FFX_API_CREATE_CONTEXT_DESC_TYPE_BACKEND_VK_DEPRECATED 0x0000003u +struct ffxCreateBackendVKDesc_DEPRECATED +{ + ffxCreateContextDescHeader header; + VkDevice vkDevice; ///< the logical device used by the program. + VkPhysicalDevice vkPhysicalDevice; ///< the physical device used by the program. + PFN_vkGetDeviceProcAddr vkDeviceProcAddr; ///< function pointer to get device procedure addresses +}; + +/// Convenience structure to hold all VK-related device information. +typedef struct VkDeviceContext { + VkDevice vkDevice; ///< The Vulkan device + VkPhysicalDevice vkPhysicalDevice; ///< The Vulkan physical device + PFN_vkGetDeviceProcAddr vkDeviceProcAddr; ///< The device's function address table +} VkDeviceContext; + +#define FFX_API_CREATE_CONTEXT_DESC_TYPE_BACKEND_VK FFX_API_MAKE_BACKEND_SUB_ID(FFX_API_BACKEND_ID_VK, 0x03) +struct ffxCreateBackendVKDesc +{ + ffxCreateContextDescHeader header; + VkDeviceContext deviceContext; ///< the VK device information used by the program. +}; + +/// Resource allocation callback function. (TODO) +typedef ffxReturnCode_t(*PfnFfxResourceAllocatorFunc)(uint32_t effectId/*, + D3D12_RESOURCE_STATES initialState, + const D3D12_HEAP_PROPERTIES* pHeapProps, + const D3D12_RESOURCE_DESC* pD3DDesc, + const FfxApiResourceDescription* pFfxDesc, + const D3D12_CLEAR_VALUE* pOptimizedClear, + ID3D12Resource** ppD3DResource*/); + +/// Resource destruction callback function. (TODO) +typedef ffxReturnCode_t(*PfnFfxResourceDeallocatorFunc)(uint32_t effectId/*, ID3D12Resource* pResource*/); + +#define FFX_API_CREATE_CONTEXT_DESC_TYPE_BACKEND_VK_ALLOCATION_CALLBACKS FFX_API_MAKE_BACKEND_SUB_ID(FFX_API_BACKEND_ID_VK, 0x04) +struct ffxCreateBackendVKAllocationCallbacksDesc +{ + ffxCreateContextDescHeader header; + PfnFfxResourceAllocatorFunc pfnFfxResourceAllocator; ///< Resource allocation function (can be null) <------- NOT IMPL YET, SEE DX12/XBOX IMPL + PfnFfxResourceDeallocatorFunc pfnFfxResourceDeallocator; ///< Resource deallocation function (can be null) <------- NOT IMPL YET, SEE DX12/XBOX IMPL + FfxApiConstantBufferAllocator pfnFfxConstantBufferAllocator; ///< Constant buffer allocation function (can be null) +}; + +#if defined(__cplusplus) + +static inline uint32_t ffxApiGetSurfaceFormatVK(VkFormat fmt) +{ + switch (fmt) + { + case VK_FORMAT_R32G32B32A32_SFLOAT: + return FFX_API_SURFACE_FORMAT_R32G32B32A32_FLOAT; + case VK_FORMAT_R32G32B32_SFLOAT: + return FFX_API_SURFACE_FORMAT_R32G32B32_FLOAT; + case VK_FORMAT_R32G32B32A32_UINT: + return FFX_API_SURFACE_FORMAT_R32G32B32A32_UINT; + case VK_FORMAT_R16G16B16A16_SFLOAT: + return FFX_API_SURFACE_FORMAT_R16G16B16A16_FLOAT; + case VK_FORMAT_R32G32_SFLOAT: + return FFX_API_SURFACE_FORMAT_R32G32_FLOAT; + case VK_FORMAT_R32_UINT: + case VK_FORMAT_D24_UNORM_S8_UINT: + case VK_FORMAT_X8_D24_UNORM_PACK32: + return FFX_API_SURFACE_FORMAT_R32_UINT; + case VK_FORMAT_R8G8B8A8_UNORM: + return FFX_API_SURFACE_FORMAT_R8G8B8A8_UNORM; + case VK_FORMAT_R8G8B8A8_SNORM: + return FFX_API_SURFACE_FORMAT_R8G8B8A8_SNORM; + case VK_FORMAT_R8G8B8A8_SRGB: + return FFX_API_SURFACE_FORMAT_R8G8B8A8_SRGB; + case VK_FORMAT_B8G8R8A8_UNORM: + return FFX_API_SURFACE_FORMAT_B8G8R8A8_UNORM; + case VK_FORMAT_B8G8R8A8_SRGB: + return FFX_API_SURFACE_FORMAT_B8G8R8A8_SRGB; + case VK_FORMAT_B10G11R11_UFLOAT_PACK32: + return FFX_API_SURFACE_FORMAT_R11G11B10_FLOAT; + case VK_FORMAT_A2B10G10R10_UNORM_PACK32: + return FFX_API_SURFACE_FORMAT_R10G10B10A2_UNORM; + case VK_FORMAT_R16G16_SFLOAT: + return FFX_API_SURFACE_FORMAT_R16G16_FLOAT; + case VK_FORMAT_R16G16_UINT: + return FFX_API_SURFACE_FORMAT_R16G16_UINT; + case VK_FORMAT_R16G16_SINT: + return FFX_API_SURFACE_FORMAT_R16G16_SINT; + case VK_FORMAT_R16_SFLOAT: + return FFX_API_SURFACE_FORMAT_R16_FLOAT; + case VK_FORMAT_R16_UINT: + return FFX_API_SURFACE_FORMAT_R16_UINT; + case VK_FORMAT_R16_UNORM: + case VK_FORMAT_D16_UNORM: + case VK_FORMAT_D16_UNORM_S8_UINT: + return FFX_API_SURFACE_FORMAT_R16_UNORM; + case VK_FORMAT_R16_SNORM: + return FFX_API_SURFACE_FORMAT_R16_SNORM; + case VK_FORMAT_R8_UNORM: + return FFX_API_SURFACE_FORMAT_R8_UNORM; + case VK_FORMAT_R8_SNORM: + return FFX_API_SURFACE_FORMAT_R8_SNORM; + case VK_FORMAT_R8_UINT: + case VK_FORMAT_S8_UINT: + return FFX_API_SURFACE_FORMAT_R8_UINT; + case VK_FORMAT_R8G8_UNORM: + return FFX_API_SURFACE_FORMAT_R8G8_UNORM; + case VK_FORMAT_R8G8_UINT: + return FFX_API_SURFACE_FORMAT_R8G8_UINT; + case VK_FORMAT_R32_SFLOAT: + case VK_FORMAT_D32_SFLOAT: + case VK_FORMAT_D32_SFLOAT_S8_UINT: + return FFX_API_SURFACE_FORMAT_R32_FLOAT; + case VK_FORMAT_E5B9G9R9_UFLOAT_PACK32: + return FFX_API_SURFACE_FORMAT_R9G9B9E5_SHAREDEXP; + case VK_FORMAT_UNDEFINED: + return FFX_API_SURFACE_FORMAT_UNKNOWN; + + default: + // NOTE: we do not support typeless formats here + //FFX_ASSERT_MESSAGE(false, "Format not yet supported"); + return FFX_API_SURFACE_FORMAT_UNKNOWN; + } +} + +static inline uint32_t ffxApiGetSurfaceFormatToGamma(uint32_t fmt) +{ + switch (fmt) + { + case (FFX_API_SURFACE_FORMAT_R8G8B8A8_UNORM): + return FFX_API_SURFACE_FORMAT_R8G8B8A8_SRGB; + case (FFX_API_SURFACE_FORMAT_B8G8R8A8_UNORM): + return FFX_API_SURFACE_FORMAT_B8G8R8A8_SRGB; + default: + return fmt; + } +} + +static inline bool ffxApiIsDepthFormat(VkFormat fmt) +{ + switch (fmt) + { + case VK_FORMAT_D16_UNORM: + case VK_FORMAT_X8_D24_UNORM_PACK32: + case VK_FORMAT_D32_SFLOAT: + case VK_FORMAT_D16_UNORM_S8_UINT: + case VK_FORMAT_D24_UNORM_S8_UINT: + case VK_FORMAT_D32_SFLOAT_S8_UINT: + return true; + + default: + return false; + } +} + +static inline bool ffxApiIsStencilFormat(VkFormat fmt) +{ + switch (fmt) + { + case VK_FORMAT_S8_UINT: + case VK_FORMAT_D16_UNORM_S8_UINT: + case VK_FORMAT_D24_UNORM_S8_UINT: + case VK_FORMAT_D32_SFLOAT_S8_UINT: + return true; + + default: + return false; + } +} + +static inline FfxApiResourceDescription ffxApiGetBufferResourceDescriptionVK(const VkBuffer buffer, + const VkBufferCreateInfo createInfo, + uint32_t additionalUsages) +{ + FfxApiResourceDescription resourceDescription = {}; + + // This is valid + if (buffer == VK_NULL_HANDLE) + return resourceDescription; + + resourceDescription.flags = FFX_API_RESOURCE_FLAGS_NONE; + resourceDescription.usage = additionalUsages; + resourceDescription.size = (uint32_t)createInfo.size; + resourceDescription.stride = 0; + resourceDescription.format = FFX_API_SURFACE_FORMAT_UNKNOWN; + + if ((createInfo.usage & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT) != 0) + resourceDescription.usage |= FFX_API_RESOURCE_USAGE_UAV; + if ((createInfo.usage & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT) != 0) + resourceDescription.usage |= FFX_API_RESOURCE_USAGE_INDIRECT; + + // What should we initialize this to?? No case for this yet + resourceDescription.depth = 0; + resourceDescription.mipCount = 0; + + // Set the type + resourceDescription.type = FFX_API_RESOURCE_TYPE_BUFFER; + + return resourceDescription; +} + +static inline FfxApiResourceDescription ffxApiGetImageResourceDescriptionVK(const VkImage image, const VkImageCreateInfo createInfo, uint32_t additionalUsages) +{ + FfxApiResourceDescription resourceDescription = {}; + + // This is valid + if (image == VK_NULL_HANDLE) + return resourceDescription; + + // Set flags properly for resource registration + resourceDescription.flags = FFX_API_RESOURCE_FLAGS_NONE; + resourceDescription.usage = FFX_API_RESOURCE_USAGE_READ_ONLY; + + // Check for depth stencil use + if (ffxApiIsDepthFormat(createInfo.format)) + resourceDescription.usage |= FFX_API_RESOURCE_USAGE_DEPTHTARGET; + if (ffxApiIsStencilFormat(createInfo.format)) + resourceDescription.usage |= FFX_API_RESOURCE_USAGE_STENCILTARGET; + + // Unordered access use + if ((createInfo.usage & VK_IMAGE_USAGE_STORAGE_BIT) != 0) + resourceDescription.usage |= FFX_API_RESOURCE_USAGE_UAV; + + // Resource-specific supplemental use flags + resourceDescription.usage |= additionalUsages; + + resourceDescription.width = createInfo.extent.width; + resourceDescription.height = createInfo.extent.height; + resourceDescription.mipCount = createInfo.mipLevels; + resourceDescription.format = ffxApiGetSurfaceFormatVK(createInfo.format); + + // if the mutable flag is present, assume that the real format is sRGB + if ((createInfo.flags & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT) != 0) + resourceDescription.format = ffxApiGetSurfaceFormatToGamma(resourceDescription.format); + + switch (createInfo.imageType) + { + case VK_IMAGE_TYPE_1D: + resourceDescription.type = FFX_API_RESOURCE_TYPE_TEXTURE1D; + break; + case VK_IMAGE_TYPE_2D: + resourceDescription.depth = createInfo.arrayLayers; + if ((additionalUsages & FFX_API_RESOURCE_USAGE_ARRAYVIEW) != 0) + resourceDescription.type = FFX_API_RESOURCE_TYPE_TEXTURE2D; + else if ((createInfo.flags & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT) != 0) + resourceDescription.type = FFX_API_RESOURCE_TYPE_TEXTURE_CUBE; + else + resourceDescription.type = FFX_API_RESOURCE_TYPE_TEXTURE2D; + break; + case VK_IMAGE_TYPE_3D: + resourceDescription.depth = createInfo.extent.depth; + resourceDescription.type = FFX_API_RESOURCE_TYPE_TEXTURE3D; + break; + default: + //FFX_ASSERT_MESSAGE(false, "FFXInterface: VK: Unsupported texture dimension requested. Please implement."); + break; + } + + return resourceDescription; +} + +static inline FfxApiResource ffxApiGetResourceVK(void* vkResource, FfxApiResourceDescription ffxResDescription, uint32_t state) +{ + FfxApiResource resource = {}; + resource.resource = vkResource; + resource.state = state; + resource.description = ffxResDescription; + + return resource; +} + +#endif diff --git a/third_party/ffx-api/framegeneration/include/ffx_framegeneration.h b/third_party/ffx-api/framegeneration/include/ffx_framegeneration.h new file mode 100644 index 000000000..823a3b472 --- /dev/null +++ b/third_party/ffx-api/framegeneration/include/ffx_framegeneration.h @@ -0,0 +1,299 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2026 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#pragma once + +#include "../../api/include/ffx_api.h" +#include "ffx_framegeneration_api_types.h" + +#define FFX_FRAMEGENERATION_VERSION_MAJOR 4 +#define FFX_FRAMEGENERATION_VERSION_MINOR 0 +#define FFX_FRAMEGENERATION_VERSION_PATCH 2 + +#define FFX_FRAMEGENERATION_MAKE_VERSION(major, minor, patch) (((major) << 22) | ((minor) << 12) | (patch)) +#define FFX_FRAMEGENERATION_VERSION FFX_FRAMEGENERATION_MAKE_VERSION(FFX_FRAMEGENERATION_VERSION_MAJOR, FFX_FRAMEGENERATION_VERSION_MINOR, FFX_FRAMEGENERATION_VERSION_PATCH) + +#define FFX_FRAMEGENERATION_PREPARE_REPLACEMENT_SUFFIX "PrepareV2" + +#if defined(__cplusplus) +extern "C" { +#endif +enum FfxApiCreateContextFramegenerationFlags +{ + FFX_FRAMEGENERATION_ENABLE_ASYNC_WORKLOAD_SUPPORT = (1 << 0), ///< A bit indicating that async compute workloads should be supported. Enables generation work on async compute queues. + FFX_FRAMEGENERATION_ENABLE_DISPLAY_RESOLUTION_MOTION_VECTORS = (1 << 1), ///< A bit indicating if the motion vectors are rendered at display resolution. + FFX_FRAMEGENERATION_ENABLE_MOTION_VECTORS_JITTER_CANCELLATION = (1 << 2), ///< A bit indicating that the motion vectors have the jittering pattern applied to them. + FFX_FRAMEGENERATION_ENABLE_DEPTH_INVERTED = (1 << 3), ///< A bit indicating that the input depth buffer data provided is inverted [1..0]. + FFX_FRAMEGENERATION_ENABLE_DEPTH_INFINITE = (1 << 4), ///< A bit indicating that the input depth buffer data provided is using an infinite far plane. + FFX_FRAMEGENERATION_ENABLE_HIGH_DYNAMIC_RANGE = (1 << 5), ///< A bit indicating if the input color data provided to all inputs is using a high-dynamic range. + FFX_FRAMEGENERATION_ENABLE_DEBUG_CHECKING = (1 << 6), ///< A bit indicating that the runtime should check some API values and report issues. +}; + +enum FfxApiDispatchFramegenerationFlags +{ + FFX_FRAMEGENERATION_FLAG_DRAW_DEBUG_TEAR_LINES = (1 << 0), ///< A bit indicating that the debug tear lines will be drawn to the generated output. + FFX_FRAMEGENERATION_FLAG_DRAW_DEBUG_RESET_INDICATORS = (1 << 1), ///< A bit indicating that the debug reset indicators will be drawn to the generated output. + FFX_FRAMEGENERATION_FLAG_DRAW_DEBUG_VIEW = (1 << 2), ///< A bit indicating that the generated output resource will contain debug views with relevant information. + FFX_FRAMEGENERATION_FLAG_NO_SWAPCHAIN_CONTEXT_NOTIFY = (1 << 3), ///< A bit indicating that the context should only run frame interpolation and not modify the swapchain. + FFX_FRAMEGENERATION_FLAG_DRAW_DEBUG_PACING_LINES = (1 << 4), ///< A bit indicating that the debug pacing lines will be drawn to the generated output. + FFX_FRAMEGENERATION_FLAG_RESERVED_1 = (1 << 5), ///< Reserved for future use. + FFX_FRAMEGENERATION_FLAG_RESERVED_2 = (1 << 6), ///< Reserved for future use. +}; + +enum FfxApiUiCompositionFlags +{ + FFX_FRAMEGENERATION_UI_COMPOSITION_FLAG_USE_PREMUL_ALPHA = (1 << 0), ///< A bit indicating that we use premultiplied alpha for UI composition. + FFX_FRAMEGENERATION_UI_COMPOSITION_FLAG_ENABLE_INTERNAL_UI_DOUBLE_BUFFERING = (1 << 1), ///< A bit indicating that the swapchain should doublebuffer the UI resource. +}; + +#define FFX_API_CREATE_CONTEXT_DESC_TYPE_FRAMEGENERATION FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATION, 0x01) +struct ffxCreateContextDescFrameGeneration +{ + ffxCreateContextDescHeader header; ///< Description header for frame generation context creation. + uint32_t flags; ///< A combination of zero or more values from FfxApiCreateContextFramegenerationFlags. + struct FfxApiDimensions2D displaySize; ///< The resolution at which both rendered and generated frames will be displayed. + struct FfxApiDimensions2D maxRenderSize; ///< The maximum rendering resolution. + uint32_t backBufferFormat; ///< The surface format for the backbuffer. One of the values from FfxApiSurfaceFormat. +}; + +#define FFX_API_CALLBACK_DESC_TYPE_FRAMEGENERATION_PRESENT FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATION, 0x05) +typedef struct ffxCallbackDescFrameGenerationPresent +{ + ffxDispatchDescHeader header; ///< Description header for present callback dispatch. + void* device; ///< The GPU device (ID3D12Device for DX12, VkDevice for Vulkan) passed during context creation. + void* commandList; ///< A command list (ID3D12GraphicsCommandList for DX12, VkCommandBuffer for Vulkan) that will be executed before presentation. + struct FfxApiResource currentBackBuffer; ///< Backbuffer image either rendered or generated. + struct FfxApiResource currentUI; ///< UI image for composition if passed. Otherwise empty. + struct FfxApiResource outputSwapChainBuffer; ///< Output image that will be presented. + bool isGeneratedFrame; ///< true if this frame is generated, false if rendered. + uint64_t frameID; ///< Identifier used to select internal resources when async support is enabled. Must increment by exactly one (1) for each frame. Any non-exactly-one difference will reset the frame generation logic. +} ffxCallbackDescFrameGenerationPresent; + +#define FFX_API_DISPATCH_DESC_TYPE_FRAMEGENERATION FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATION, 0x03) +typedef struct ffxDispatchDescFrameGeneration +{ + ffxDispatchDescHeader header; ///< Description header for frame generation dispatch. + void* commandList; ///< The command list (ID3D12GraphicsCommandList for DX12, VkCommandBuffer for Vulkan) to record frame generation commands. + struct FfxApiResource presentColor; ///< The current presentation color buffer to be used as source for frame generation. + struct FfxApiResource outputs[4]; ///< Output destination targets for generated frames (1 for each frame in numGeneratedFrames). + uint32_t numGeneratedFrames; ///< The number of frames to generate from the input color target. + bool reset; ///< A boolean value which when set to true, indicates the camera has moved discontinuously and frame generation should reset. + uint32_t backbufferTransferFunction; ///< The transfer function used to convert frame generation source color data to linear RGB. One of the values from FfxApiBackbufferTransferFunction. + float minMaxLuminance[2]; ///< Min and max luminance values (in nits), used when converting HDR colors to linear RGB. + struct FfxApiRect2D generationRect; ///< The area of the backbuffer that should be used for frame generation in case only a part of the screen is active (e.g. due to movie bars). + uint64_t frameID; ///< Identifier used to select internal resources when async support is enabled. Must increment by exactly one (1) for each frame. Any non-exactly-one difference will reset the frame generation logic. +} ffxDispatchDescFrameGeneration; + +typedef ffxReturnCode_t (*FfxApiPresentCallbackFunc)(ffxCallbackDescFrameGenerationPresent* params, void* pUserCtx); +typedef ffxReturnCode_t (*FfxApiFrameGenerationDispatchFunc)(ffxDispatchDescFrameGeneration* params, void* pUserCtx); + +#define FFX_API_CONFIGURE_DESC_TYPE_FRAMEGENERATION FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATION, 0x02) +struct ffxConfigureDescFrameGeneration +{ + ffxConfigureDescHeader header; ///< Description header for frame generation configuration. + void* swapChain; ///< The swapchain to use with frame generation (IDXGISwapChain for DX12, VkSwapchainKHR for Vulkan). + FfxApiPresentCallbackFunc presentCallback; ///< Callback function called when finalizing the frame image for presentation and UI composition. + void* presentCallbackUserContext; ///< User context pointer to be passed to the present callback function. + FfxApiFrameGenerationDispatchFunc frameGenerationCallback; ///< Callback function called to dispatch frame generation work and generate interpolated frames. + void* frameGenerationCallbackUserContext; ///< User context pointer to be passed to the frame generation callback function. + bool frameGenerationEnabled; ///< Sets the state of frame generation. Set to false to disable frame generation. + bool allowAsyncWorkloads; ///< Sets the state of async workloads. Set to true to enable generation work on async compute. + struct FfxApiResource HUDLessColor; ///< The hudless back buffer image to use for UI extraction from backbuffer resource. May be empty. + uint32_t flags; ///< Zero or combination of flags from FfxApiDispatchFrameGenerationFlags. + bool onlyPresentGenerated; ///< Set to true to only present generated frames. + struct FfxApiRect2D generationRect; ///< The area of the backbuffer that should be used for generation in case only a part of the screen is used e.g. due to movie bars + uint64_t frameID; ///< Identifier used to select internal resources when async support is enabled. Must increment by exactly one (1) for each frame. Any non-exactly-one difference will reset the frame generation logic. +}; + +#pragma FFX_PRAGMA_WARNING_PUSH +#pragma FFX_PRAGMA_WARNING_DISABLE_DEPRECATIONS + +#define FFX_API_DISPATCH_DESC_TYPE_FRAMEGENERATION_PREPARE FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATION, 0x04) +struct FFX_DEPRECATION("ffxDispatchDescFrameGenerationPrepare is deprecated, use ffxDispatchDescFrameGeneration" FFX_FRAMEGENERATION_PREPARE_REPLACEMENT_SUFFIX) ffxDispatchDescFrameGenerationPrepare +{ + ffxDispatchDescHeader header; ///< Description header for frame generation prepare dispatch. + uint64_t frameID; ///< Frame identifier used to select internal resources when async support is enabled. Must increment by exactly one (1) for each frame. Any non-exactly-one difference will reset the frame generation logic. + uint32_t flags; ///< Zero or combination of values from FfxApiDispatchFrameGenerationFlags. + void* commandList; ///< The command list (ID3D12GraphicsCommandList for DX12, VkCommandBuffer for Vulkan) to record frame generation prepare commands. + struct FfxApiDimensions2D renderSize; ///< The dimensions used to render game content, dilatedDepth, dilatedMotionVectors are expected to be of ths size. + struct FfxApiFloatCoords2D jitterOffset; ///< The subpixel jitter offset applied to the camera. + struct FfxApiFloatCoords2D motionVectorScale; ///< The scale factor to convert motion vectors to pixel space. Internally: pixelSpaceMV = motionVector * motionVectorScale. Set to renderSize if motion vectors are in UV space [0,1], or to (1.0, 1.0) if motion vectors are already in pixel space. When using display-resolution motion vectors, set to displaySize. + + float frameTimeDelta; ///< Time elapsed in milliseconds since the last frame. + bool unused_reset; ///< A (currently unused) boolean value which when set to true, indicates FrameGeneration will be called in reset mode + float cameraNear; ///< The distance to the near plane of the camera. + float cameraFar; ///< The distance to the far plane of the camera. This is used only used in case of non infinite depth. + float cameraFovAngleVertical; ///< The camera angle field of view in the vertical direction (expressed in radians). + float viewSpaceToMetersFactor; ///< The scale factor to convert view space units to meters + struct FfxApiResource depth; ///< The depth buffer data for the current frame. + struct FfxApiResource motionVectors; ///< The motion vector data for the current frame. +}; + +#pragma FFX_PRAGMA_WARNING_POP + +#define FFX_API_CONFIGURE_DESC_TYPE_FRAMEGENERATION_KEYVALUE FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATION, 0x06) +struct ffxConfigureDescFrameGenerationKeyValue +{ + ffxConfigureDescHeader header; ///< Description header for frame generation key-value configuration. + uint64_t key; ///< Configuration key, member of the FfxApiConfigureFrameGenerationKey enumeration. + uint64_t u64; ///< Integer value or enum value to set. + void* ptr; ///< Pointer value to set or pointer to value to set. +}; + +enum FfxApiConfigureFrameGenerationKey +{ + FFX_API_CONFIGURE_FRAMEGENERATION_KEY_DEBUG_VIEW_MODE = 0, ///< A key to set a debug view mode of display. + FFX_API_CONFIGURE_FRAMEGENERATION_KEY_DEBUG_VIEW_FLOW_SCALE = 1, ///< A key to set a debug view scale for flow resources. +}; + +#define FFX_API_QUERY_DESC_TYPE_FRAMEGENERATION_GPU_MEMORY_USAGE FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATION, 0x07) +struct ffxQueryDescFrameGenerationGetGPUMemoryUsage +{ + ffxQueryDescHeader header; ///< Description header for GPU memory usage query. + struct FfxApiEffectMemoryUsage* gpuMemoryUsageFrameGeneration; ///< Output pointer to receive GPU memory usage information for frame generation. +}; + +#define FFX_API_CONFIGURE_DESC_TYPE_FRAMEGENERATION_REGISTERDISTORTIONRESOURCE FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATION, 0x08) +//Pass this optional linked struct after ffxConfigureDescFrameGeneration +struct ffxConfigureDescFrameGenerationRegisterDistortionFieldResource +{ + ffxConfigureDescHeader header; ///< Description header for distortion field resource configuration. + struct FfxApiResource distortionField; ///< A resource containing distortion offset data. Needs to be 2-component (ie. RG). Read by FG shaders via Sample. Pixel value encodes [UV coordinate of pixel after lens distortion effect - UV coordinate of pixel before lens distortion]. +}; + +#define FFX_API_CREATE_CONTEXT_DESC_TYPE_FRAMEGENERATION_HUDLESS FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATION, 0x09) +//Pass this optional linked struct at FG context creation to enable app to use different hudlessBackBufferformat (IE.RGBA8_UNORM) from backBufferFormat (IE. BGRA8_UNORM) +struct ffxCreateContextDescFrameGenerationHudless +{ + ffxCreateContextDescHeader header; ///< Description header for hudless context creation. + uint32_t hudlessBackBufferFormat; ///< The surface format for the hudless back buffer. One of the values from FfxApiSurfaceFormat. +}; + +#pragma FFX_PRAGMA_WARNING_PUSH +#pragma FFX_PRAGMA_WARNING_DISABLE_DEPRECATIONS + +#define FFX_API_DISPATCH_DESC_TYPE_FRAMEGENERATION_PREPARE_CAMERAINFO FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATION, 0x0a) +// Link this struct after ffxDispatchDescFrameGenerationPrepare. This is a required input to FSR3.1.4 and FSR3.1.5. +// These fields are now embedded in ffxDispatchDescFrameGenerationPrepareV2. +struct FFX_DEPRECATION("ffxDispatchDescFrameGenerationPrepareCameraInfo is deprecated, use ffxDispatchDescFrameGeneration" FFX_FRAMEGENERATION_PREPARE_REPLACEMENT_SUFFIX " instead") ffxDispatchDescFrameGenerationPrepareCameraInfo +{ + ffxConfigureDescHeader header; ///< Description header for camera info configuration. + float cameraPosition[3]; ///< The camera position in world space. + float cameraUp[3]; ///< The camera up normalized vector in world space. + float cameraRight[3]; ///< The camera right normalized vector in world space. + float cameraForward[3]; ///< The camera forward normalized vector in world space. +}; + +#pragma FFX_PRAGMA_WARNING_POP + +#define FFX_API_QUERY_DESC_TYPE_FRAMEGENERATION_GPU_MEMORY_USAGE_V2 FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATION, 0x0b) +struct ffxQueryDescFrameGenerationGetGPUMemoryUsageV2 +{ + ffxQueryDescHeader header; ///< Description header for GPU memory usage query. + void* device; ///< The GPU device. For DX12: pointer to ID3D12Device. For VK: pointer to VkDeviceContext. App needs to fill out before Query() call. + struct FfxApiDimensions2D maxRenderSize; ///< The maximum rendering resolution. App needs to fill out before Query() call. + struct FfxApiDimensions2D displaySize; ///< The resolution at which both rendered and generated frames will be displayed. App needs to fill out before Query() call. + uint32_t createFlags; ///< Context creation flags. A combination of zero or more values from FfxApiCreateContextFramegenerationFlags. App needs to fill out before Query() call. + uint32_t dispatchFlags; ///< Dispatch flags. A combination of zero or more values from FfxApiDispatchFrameGenerationFlags. App needs to fill out before Query() call. + uint32_t backBufferFormat; ///< The surface format for the backbuffer. One of the values from FfxApiSurfaceFormat. App needs to fill out before Query() call. + uint32_t hudlessBackBufferFormat; ///< The surface format for HUDLessColor resource if used. One of the values from FfxApiSurfaceFormat. Otherwise set value to FFX_API_SURFACE_FORMAT_UNKNOWN(0). App needs to fill out before Query() call. + struct FfxApiEffectMemoryUsage* gpuMemoryUsageFrameGeneration; ///< Output pointer to receive GPU memory usage information for frame generation. Populated by Query() call. +}; + + +#define FFX_API_DISPATCH_DESC_TYPE_FRAMEGENERATION_PREPARE_V2 FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATION, 0x0c) + +struct ffxDispatchDescFrameGenerationPrepareV2 + +{ + ffxDispatchDescHeader header; ///< Description header for frame generation prepare dispatch. + uint64_t frameID; ///< Frame identifier used to select internal resources when async support is enabled. Must increment by exactly one (1) for each frame. Any non-exactly-one difference will reset the frame generation logic. + uint32_t flags; ///< Zero or combination of values from FfxApiDispatchFrameGenerationFlags. + void* commandList; ///< The command list (ID3D12GraphicsCommandList for DX12, VkCommandBuffer for Vulkan) to record frame generation prepare commands. + struct FfxApiDimensions2D renderSize; ///< The dimensions used to render game content. dilatedDepth and dilatedMotionVectors are expected to be of this size. + struct FfxApiFloatCoords2D jitterOffset; ///< The subpixel jitter offset applied to the camera. + struct FfxApiFloatCoords2D motionVectorScale; ///< The scale factor to convert motion vectors to pixel space. Internally: pixelSpaceMV = motionVector * motionVectorScale. Set to renderSize if motion vectors are in UV space [0,1], or to (1.0, 1.0) if motion vectors are already in pixel space. When using display-resolution motion vectors, set to displaySize. + + float frameTimeDelta; ///< Time elapsed in milliseconds since the last frame. + bool reset; ///< A boolean value which when set to true, indicates the camera has moved discontinuously and frame generation should reset its internal state. + float cameraNear; ///< The distance to the near plane of the camera. + float cameraFar; ///< The distance to the far plane of the camera. This is used only in case of non-infinite depth. + float cameraFovAngleVertical; ///< The camera angle field of view in the vertical direction (expressed in radians). + float viewSpaceToMetersFactor; ///< The scale factor to convert view space units to meters. + struct FfxApiResource depth; ///< The depth buffer data for the current frame. + struct FfxApiResource motionVectors; ///< The motion vector data for the current frame. + + float cameraPosition[3]; ///< The camera position in world space. + float cameraUp[3]; ///< The camera up normalized vector in world space. + float cameraRight[3]; ///< The camera right normalized vector in world space. + float cameraForward[3]; ///< The camera forward normalized vector in world space. +}; + +#define FFX_API_CALLBACK_DESC_TYPE_FRAMEGENERATION_PRESENT_PREMUL_ALPHA FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATION, 0x0d) +// This is a structure that is attached to header.pNext of ffxCallbackDescFrameGenerationPresent +// Provides whether to use premultiplied alpha blending or not for the UI +typedef struct ffxCallbackDescFrameGenerationPresentPremulAlpha +{ + ffxApiHeader header; ///< Header for versioning & ABI stability. + bool usePremulAlpha; ///< Toggles whether UI gets premultiplied alpha blending or not. +} ffxCallbackDescFrameGenerationPresentPremulAlpha; + +/// Callback function for waiting on a named fence to reach a specific value. +/// @param fenceName The name of the fence to wait on. +/// @param fenceValueToWaitFor The fence value to wait for. +/// @return 0 on success, non-zero error code on failure. +typedef int32_t (*FfxWaitCallbackFunc)(wchar_t* fenceName, uint64_t fenceValueToWaitFor); + +#define FFX_API_CREATE_CONTEXT_DESC_TYPE_FRAMEGENERATION_VERSION FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATION, 0x0e) +// Pass this linked struct at FG context creation to enable new API features - omitting this will prevent new APIs from functioning. +struct ffxCreateContextDescFrameGenerationVersion +{ + ffxCreateContextDescHeader header; ///< Description header for frame generation version context creation. + uint32_t version; ///< The version of the API the application was built against. This must be set to FFX_FRAMEGENERATION_VERSION. +}; + +#define FFX_API_FRAME_GENERATION_CONFIG FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATION, 0x0f) +/// A structure representing the configuration options to pass to FrameInterpolationSwapChain +/// +/// @ingroup FfxInterface +typedef struct FfxFrameGenerationConfig +{ + ffxApiHeader header; ///< Header for versioning & ABI stability. + void* swapChain; ///< The FfxSwapchain to use with frame interpolation. + FfxApiPresentCallbackFunc presentCallback; ///< A UI composition callback to call when finalizing the frame image. + void* presentCallbackContext; ///< A pointer to be passed to the UI composition callback. + FfxApiFrameGenerationDispatchFunc frameGenerationCallback; ///< The frame generation callback to use to generate the interpolated frame. + void* frameGenerationCallbackContext; ///< A pointer to be passed to the frame generation callback. + bool frameGenerationEnabled; ///< Sets the state of frame generation. Set to false to disable frame generation. + bool allowAsyncWorkloads; ///< Sets the state of async workloads. Set to true to enable interpolation work on async compute. + bool allowAsyncPresent; ///< Sets the state of async presentation (console only). Set to true to enable present from async command queue. + struct FfxApiResource HUDLessColor; ///< The hudless back buffer image to use for UI extraction from backbuffer resource. + uint32_t flags; ///< Zero or combination of flags from FfxApiDispatchFrameGenerationFlags. + bool onlyPresentInterpolated; ///< Set to true to only present interpolated frame. + struct FfxApiRect2D interpolationRect; ///< Set the area in the backbuffer that will be interpolated. + uint64_t frameID; ///< A frame identifier used to synchronize resource usage in workloads. + bool drawDebugPacingLines; ///< Sets the state of pacing debug lines. Set to true to display debug lines. +} FfxFrameGenerationConfig; + +#if defined(__cplusplus) +} // extern "C" +#endif diff --git a/third_party/ffx-api/framegeneration/include/ffx_framegeneration_api_types.h b/third_party/ffx-api/framegeneration/include/ffx_framegeneration_api_types.h new file mode 100644 index 000000000..e7e514ddb --- /dev/null +++ b/third_party/ffx-api/framegeneration/include/ffx_framegeneration_api_types.h @@ -0,0 +1,72 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2026 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#pragma once +#include "../../api/include/ffx_api_types.h" + +/* +Tuning varianceFactor and safetyMarginInMs Tips: +Calculation of frame pacing algorithm's next target timestamp: +target frametime delta = average Frametime - (variance * varianceFactor) - safetyMarginInMs + +Default Tuning uses safetyMarginInMs==0.1ms and varianceFactor==0.1. +Say Tuning set A uses safetyMarginInMs==0.75ms, and varianceFactor==0.1. +Say Tuning Set B uses safetyMarginInMs==0.01ms and varianceFactor==0.3. + +Example #1 - Actual Game Cutscene. Game's framerate after FG ON during camera pan from normal (19ms avg frametime) to complex (37ms avg frametime over 1 sec) and back to normal scene complexity (19ms avg frametime). +After the panning is done, +- Default Tuning now gets stuck at targeting ~33ms after panning to a complex scene. GPU utilization significantly lower in this case. +- Tuning Set B and Tuning Set A are able to recover close to ~19ms because of these 2 tuning result in lower "target frametime delta" than Default Tuning. + +However, larger varianceFactor or safetyMarginInMs results in higher variance. As seen in Example #2 below. + +Example #2 - FFX_API_FSR sample. Set app fps cap to 33.33ms. Use OCAT to capture 10s at default camera position. +FSR 3.1.0 FG msbetweenpresents ping-pong between 16.552 (5th-percentile) and 16.832 (95th-percentile). Variance is 0.01116. +Tuning set A FG msbetweenpresents ping-pong between 15.901 (5th-percentile) and 17.500 (95th-percentile). Variance is 0.057674. +Tuning Set B FG msbetweenpresents ping-pong between 16.589 (5th-percentile) and 16.971 (95th-percentile). Variance is 0.014452. + +| FG output Frames timestamp | n | n+1 | n+2 | n+3 | frame delta n+1 to n+2 | frame delta n+2 to n+3 | +| -------------------------- | - | ------ | ----- | ------ | ---------------------- | ---------------------- | +| App real frame presents | 0 | | 33.33 | | | | +| Default Tuning | 0 | 16.552 | 33.33 | 49.882 | 16.778 | 16.552 | +| Tuning Set A | 0 | 15.901 | 33.33 | 49.231 | 17.429 | 15.901 | +| Tuning Set B | 0 | 16.589 | 33.33 | 49.919 | 16.741 | 16.589 | + +Analysis of table data in words: +Ignoring the cost of FI, +"Tuning set A"'s "target frametime delta" of 15.901 results in larger frame to frame delta (or in other words larger variance) vs Default tuning. +"Tuning set B"'s "target frametime delta" of 16.589 results in a bit larger frame to frame delta (or in other words a bit larger variance) vs Default tuning. + +TLDR: +If your game when using FG, frame rate is running at an unexpectedly low frame rate, after gradual transition from rendering complex to easy scene complexity, you could try setting "Tuning Set B" to recover lost FPS at cost of a bit higher variance. + +*/ + +//struct definition matches FfxSwapchainFramePacingTuning +typedef struct FfxApiSwapchainFramePacingTuning +{ + float safetyMarginInMs; ///< Frame pacing sleep time's safety margin in milliseconds. Default is 0.1ms. + float varianceFactor; ///< Variance factor for consecutive frame times. Valid range [0.0,1.0], default is 0.1. + bool allowHybridSpin; ///< Allows pacing spinlock to sleep. Less precise, but power saving. Default is false. + uint32_t hybridSpinTime; ///< How long to spin if allowHybridSpin is true, in timer resolution units. Not recommended to go below 2, as it will result in frequent overshoots. Default is 2. + bool allowWaitForSingleObjectOnFence; ///< Allows WaitForSingleObject instead of spinning for fence value. Default is false. +} FfxApiSwapchainFramePacingTuning; diff --git a/third_party/ffx-api/framegeneration/include/vk/ffx_api_framegeneration_vk.h b/third_party/ffx-api/framegeneration/include/vk/ffx_api_framegeneration_vk.h new file mode 100644 index 000000000..8d94a27d9 --- /dev/null +++ b/third_party/ffx-api/framegeneration/include/vk/ffx_api_framegeneration_vk.h @@ -0,0 +1,150 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2026 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#pragma once +#include "../../../api/include/vk/ffx_api_vk.h" + +#define FFX_FRAMEGENERATION_SWAPCHAIN_VK_VERSION_MAJOR 4 +#define FFX_FRAMEGENERATION_SWAPCHAIN_VK_VERSION_MINOR 0 +#define FFX_FRAMEGENERATION_SWAPCHAIN_VK_VERSION_PATCH 0 + +#define FFX_FRAMEGENERATION_SWAPCHAIN_VK_MAKE_VERSION(major, minor, patch) (((major) << 22) | ((minor) << 12) | (patch)) +#define FFX_FRAMEGENERATION_SWAPCHAIN_VK_VERSION FFX_FRAMEGENERATION_SWAPCHAIN_VK_MAKE_VERSION(FFX_FRAMEGENERATION_SWAPCHAIN_VK_VERSION_MAJOR, FFX_FRAMEGENERATION_SWAPCHAIN_VK_VERSION_MINOR, FFX_FRAMEGENERATION_SWAPCHAIN_VK_VERSION_PATCH) + +#define FFX_API_CREATE_CONTEXT_DESC_TYPE_FGSWAPCHAIN_VK FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATIONSWAPCHAIN_VK, 0x01) +struct ffxCreateContextDescFrameGenerationSwapChainVK +{ + ffxCreateContextDescHeader header; + VkPhysicalDevice physicalDevice; ///< the physicak device used by the program. + VkDevice device; ///< the logical device used by the program. + VkSwapchainKHR* swapchain; ///< the current swapchain to be replaced. Will be destroyed when the context is created. This can be VK_NULL_HANDLE. Will contain the new swapchain on return. + VkAllocationCallbacks* allocator; ///< optional allocation callbacks. + VkSwapchainCreateInfoKHR createInfo; ///< the description of the desired swapchain. If its VkSwapchainCreateInfoKHR::oldSwapchain field isn't VK_NULL_HANDLE, it should be the same as the ffxCreateContextDescFrameGenerationSwapChainVK::swapchain field above. + VkQueueInfoFFXAPI gameQueue; ///< the main graphics queue, where Present is called. + VkQueueInfoFFXAPI asyncComputeQueue; ///< A queue with Compute capability. + VkQueueInfoFFXAPI presentQueue; ///< A queue with Transfer and Present capabilities. + VkQueueInfoFFXAPI imageAcquireQueue; ///< A queue with no capability required. +}; + +#define FFX_API_CONFIGURE_DESC_TYPE_FGSWAPCHAIN_REGISTERUIRESOURCE_VK FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATIONSWAPCHAIN_VK, 0x02) +struct ffxConfigureDescFrameGenerationSwapChainRegisterUiResourceVK +{ + ffxConfigureDescHeader header; + struct FfxApiResource uiResource; ///< Resource containing user interface for composition. May be empty. + uint32_t flags; ///< Zero or combination of values from FfxApiUiCompositionFlags. +}; + +#define FFX_API_QUERY_DESC_TYPE_FGSWAPCHAIN_INTERPOLATIONCOMMANDLIST_VK FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATIONSWAPCHAIN_VK, 0x03) +struct ffxQueryDescFrameGenerationSwapChainInterpolationCommandListVK +{ + ffxQueryDescHeader header; + void** pOutCommandList; ///< Output command nuffer (VkCommandBuffer) to be used for frame generation dispatch. +}; + +#define FFX_API_QUERY_DESC_TYPE_FGSWAPCHAIN_INTERPOLATIONTEXTURE_VK FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATIONSWAPCHAIN_VK, 0x04) +struct ffxQueryDescFrameGenerationSwapChainInterpolationTextureVK +{ + ffxQueryDescHeader header; + struct FfxApiResource* pOutTexture; ///< Output resource in which the frame interpolation result should be placed. +}; + +#define FFX_API_DISPATCH_DESC_TYPE_FGSWAPCHAIN_WAIT_FOR_PRESENTS_VK FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATIONSWAPCHAIN_VK, 0x07) +struct ffxDispatchDescFrameGenerationSwapChainWaitForPresentsVK +{ + ffxDispatchDescHeader header; +}; + +#define FFX_API_CONFIGURE_DESC_TYPE_FRAMEGENERATIONSWAPCHAIN_KEYVALUE_VK FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATIONSWAPCHAIN_VK, 0x08) +struct ffxConfigureDescFrameGenerationSwapChainKeyValueVK +{ + ffxConfigureDescHeader header; + uint64_t key; ///< Configuration key, member of the FfxApiConfigureFrameGenerationSwapChainKeyVK enumeration. + uint64_t u64; ///< Integer value or enum value to set. + void* ptr; ///< Pointer to set or pointer to value to set. +}; + +//enum value matches enum FfxFrameInterpolationSwapchainConfigureKey +enum FfxApiConfigureFrameGenerationSwapChainKeyVK +{ + FFX_API_CONFIGURE_FG_SWAPCHAIN_KEY_WAITCALLBACK = 0, ///< Sets FfxWaitCallbackFunc + FFX_API_CONFIGURE_FG_SWAPCHAIN_KEY_FRAMEPACINGTUNING = 2, ///< Sets FfxApiSwapchainFramePacingTuning casted from ptr +}; + +#define FFX_API_QUERY_DESC_TYPE_FRAMEGENERATIONSWAPCHAIN_GPU_MEMORY_USAGE_VK FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATIONSWAPCHAIN_VK, 0x09) +struct ffxQueryFrameGenerationSwapChainGetGPUMemoryUsageVK +{ + ffxQueryDescHeader header; + struct FfxApiEffectMemoryUsage* gpuMemoryUsageFrameGenerationSwapchain; ///< Output pointer. Requires an existing swapchain context. +}; + +/// Pre-context GPU memory estimate for a Vulkan frame-generation swapchain. +/// Does not require an ffxContext. Pass the device and the swapchain configuration the application intends to create. +#define FFX_API_QUERY_DESC_TYPE_FRAMEGENERATIONSWAPCHAIN_GPU_MEMORY_USAGE_VK_V2 FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATIONSWAPCHAIN_VK, 0x0b) +struct ffxQueryFrameGenerationSwapChainGetGPUMemoryUsageVKV2 +{ + ffxQueryDescHeader header; ///< Description header for the pre-context GPU memory query. + VkDevice device; ///< Logical device used to size images. Required. + VkPhysicalDevice physicalDevice; ///< Physical device that owns the logical device. Required. Used to select an external provider. + struct FfxApiDimensions2D displaySize; ///< Resolution of rendered and generated frames. Required. + uint32_t backBufferFormat; ///< Backbuffer format. One of the values from FfxApiSurfaceFormat. Required. + uint32_t backBufferCount; ///< Number of application backbuffers, from 1 through 6. Required. + struct FfxApiDimensions2D uiResourceSize; ///< UI resource resolution. Required when flags requests internal UI double buffering, otherwise ignored. + uint32_t uiResourceFormat; ///< UI resource format. One of the values from FfxApiSurfaceFormat. Required when flags requests internal UI double buffering. + uint32_t flags; ///< UI composition flags. Zero or a combination of values from FfxApiUiCompositionFlags. + uint32_t composeOnGameQueue; ///< Nonzero when UI composition runs on the game queue. Adds the composition output image. + uint32_t reserved; ///< Must be zero. + struct FfxApiEffectMemoryUsage* gpuMemoryUsageFrameGenerationSwapchain; ///< Output. totalUsageInBytes is the sum of the swapchain images. aliasableUsageInBytes is zero because those images stay live together. +}; + +/// Function to get the number of presents. This is useful when using frame interpolation +typedef uint64_t(*PFN_getLastPresentCountFFXAPI)(VkSwapchainKHR); + +/// FFX API specific functions to create and destroy a swapchain +typedef VkResult(*PFN_vkCreateSwapchainFFXAPI)(VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain, void* pContext); +typedef void(*PFN_vkDestroySwapchainFFXAPI)(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks* pAllocator, void* pContext); + +#define FFX_API_QUERY_DESC_TYPE_FGSWAPCHAIN_FUNCTIONS_VK FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATIONSWAPCHAIN_VK, 0x05) +struct ffxQueryDescSwapchainReplacementFunctionsVK +{ + ffxQueryDescHeader header; + PFN_vkCreateSwapchainFFXAPI pOutCreateSwapchainFFXAPI; ///< Replacement of vkCreateSwapchainKHR. Recreates the swapchain in place (for example on resize or vsync toggle); pContext and the returned handle are the existing frame generation swapchain. + PFN_vkDestroySwapchainFFXAPI pOutDestroySwapchainFFXAPI; ///< Replacement of vkDestroySwapchainKHR. Must be called after the swapchain context is destroyed; pContext is the frame generation swapchain. The handle is invalid afterwards. + PFN_vkGetSwapchainImagesKHR pOutGetSwapchainImagesKHR; ///< Replacement of vkGetSwapchainImagesKHR. + PFN_vkAcquireNextImageKHR pOutAcquireNextImageKHR; ///< Replacement of vkAcquireNextImageKHR. + PFN_vkQueuePresentKHR pOutQueuePresentKHR; ///< Replacement of vkQueuePresentKHR. + PFN_vkSetHdrMetadataEXT pOutSetHdrMetadataEXT; ///< Replacement of vkSetHdrMetadataEXT. + PFN_getLastPresentCountFFXAPI pOutGetLastPresentCountFFXAPI; ///< Additional function to get the number of times present has been called since the swapchain creation. +}; + +#define FFX_API_CREATE_CONTEXT_DESC_TYPE_FGSWAPCHAIN_MODE_VK FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATIONSWAPCHAIN_VK, 0x10) +struct ffxCreateContextDescFrameGenerationSwapChainModeVK +{ + ffxCreateContextDescHeader header; + bool composeOnPresentQueue; ///< flags indicating that composition will happen on the present queue +}; + +#define FFX_API_CREATE_CONTEXT_DESC_TYPE_FRAMEGENERATIONSWAPCHAIN_VERSION_VK FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_FRAMEGENERATIONSWAPCHAIN_VK, 0x0a) +struct ffxCreateContextDescFrameGenerationSwapChainVersionVK +{ + ffxCreateContextDescHeader header; ///< Description header for frame generation swapchain version context creation. + uint32_t version; ///< The API version the application was built against. This must be set to FFX_FRAMEGENERATION_SWAPCHAIN_VK_VERSION. +}; diff --git a/third_party/ffx-api/upscalers/include/ffx_upscale.h b/third_party/ffx-api/upscalers/include/ffx_upscale.h new file mode 100644 index 000000000..9d4a3e5f6 --- /dev/null +++ b/third_party/ffx-api/upscalers/include/ffx_upscale.h @@ -0,0 +1,230 @@ +// This file is part of the FidelityFX SDK. +// +// Copyright (C) 2026 Advanced Micro Devices, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#pragma once +#include "../../api/include/ffx_api.h" +#include "../../api/include/ffx_api_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define FFX_UPSCALER_VERSION_MAJOR 4 +#define FFX_UPSCALER_VERSION_MINOR 1 +#define FFX_UPSCALER_VERSION_PATCH 2 + +#define FFX_UPSCALER_MAKE_VERSION(major, minor, patch) (((major) << 22) | ((minor) << 12) | (patch)) +#define FFX_UPSCALER_VERSION FFX_UPSCALER_MAKE_VERSION(FFX_UPSCALER_VERSION_MAJOR, FFX_UPSCALER_VERSION_MINOR, FFX_UPSCALER_VERSION_PATCH) + +enum FfxApiUpscaleQualityMode +{ + FFX_UPSCALE_QUALITY_MODE_NATIVEAA = 0, ///< Perform upscaling with a per-dimension upscaling ratio of 1.0x. + FFX_UPSCALE_QUALITY_MODE_QUALITY = 1, ///< Perform upscaling with a per-dimension upscaling ratio of 1.5x. + FFX_UPSCALE_QUALITY_MODE_BALANCED = 2, ///< Perform upscaling with a per-dimension upscaling ratio of 1.7x. + FFX_UPSCALE_QUALITY_MODE_PERFORMANCE = 3, ///< Perform upscaling with a per-dimension upscaling ratio of 2.0x. + FFX_UPSCALE_QUALITY_MODE_ULTRA_PERFORMANCE = 4 ///< Perform upscaling with a per-dimension upscaling ratio of 3.0x. +}; + +enum FfxApiCreateContextUpscaleFlags +{ + FFX_UPSCALE_ENABLE_HIGH_DYNAMIC_RANGE = (1 << 0), ///< A bit indicating if the input color data provided is using a high-dynamic range. + FFX_UPSCALE_ENABLE_DISPLAY_RESOLUTION_MOTION_VECTORS = (1 << 1), ///< A bit indicating if the motion vectors are rendered at display resolution. + FFX_UPSCALE_ENABLE_MOTION_VECTORS_JITTER_CANCELLATION = (1 << 2), ///< A bit indicating that the motion vectors have the jittering pattern applied to them. + FFX_UPSCALE_ENABLE_DEPTH_INVERTED = (1 << 3), ///< A bit indicating that the input depth buffer data provided is inverted [1..0]. + FFX_UPSCALE_ENABLE_DEPTH_INFINITE = (1 << 4), ///< A bit indicating that the input depth buffer data provided is using an infinite far plane. + FFX_UPSCALE_ENABLE_AUTO_EXPOSURE = (1 << 5), ///< A bit indicating if automatic exposure should be applied to input color data. + FFX_UPSCALE_ENABLE_DYNAMIC_RESOLUTION = (1 << 6), ///< A bit indicating that the application uses dynamic resolution scaling. + FFX_UPSCALE_ENABLE_DEBUG_CHECKING = (1 << 7), ///< A bit indicating that the runtime should check some API values and report issues. + FFX_UPSCALE_ENABLE_NON_LINEAR_COLORSPACE = (1 << 8), ///< A bit indicating that the color resource contains perceptual (gamma corrected) colors + FFX_UPSCALE_ENABLE_DEBUG_VISUALIZATION = (1 << 9), ///< A bit indicating if debug visualization is allowed. (memory consumption could increase) +}; + +enum FfxApiDispatchFsrUpscaleFlags +{ + FFX_UPSCALE_FLAG_DRAW_DEBUG_VIEW = (1 << 0), ///< A bit indicating that the output resource will contain debug views with relevant information. + FFX_UPSCALE_FLAG_NON_LINEAR_COLOR_SRGB = (1 << 1), ///< A bit indicating that the input color resource contains perceptual sRGB colors + FFX_UPSCALE_FLAG_NON_LINEAR_COLOR_PQ = (1 << 2), ///< A bit indicating that the input color resource contains perceptual PQ colors +}; + +enum FfxApiDispatchUpscaleAutoreactiveFlags +{ + FFX_UPSCALE_AUTOREACTIVEFLAGS_APPLY_TONEMAP = (1 << 0), ///< Apply tonemapping function prior to calculating reactivity. + FFX_UPSCALE_AUTOREACTIVEFLAGS_APPLY_INVERSETONEMAP = (1 << 1), ///< Apply inverse tonemapping function prior to calculating reactivity. + FFX_UPSCALE_AUTOREACTIVEFLAGS_APPLY_THRESHOLD = (1 << 2), ///< Compare to a threshold value and only record reactivity above the threshold. + FFX_UPSCALE_AUTOREACTIVEFLAGS_USE_COMPONENTS_MAX = (1 << 3), ///< When enabled use the max. component value, otherwise use the length to calculate reactivity. +}; + +#define FFX_API_CREATE_CONTEXT_DESC_TYPE_UPSCALE FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_UPSCALE, 0x00) +struct ffxCreateContextDescUpscale +{ + ffxCreateContextDescHeader header; ///< Header descriptor, use type FFX_API_CREATE_CONTEXT_DESC_TYPE_UPSCALE. + uint32_t flags; ///< Zero or a combination of values from FfxApiCreateContextUpscaleFlags. + struct FfxApiDimensions2D maxRenderSize; ///< The maximum size that rendering will be performed at. + struct FfxApiDimensions2D maxUpscaleSize; ///< The size of the presentation resolution targeted by the upscaling process. + ffxApiMessage fpMessage; ///< A pointer to a function that can receive messages from the runtime. May be null. +}; + +#define FFX_API_DISPATCH_DESC_TYPE_UPSCALE FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_UPSCALE, 0x01) +struct ffxDispatchDescUpscale +{ + ffxDispatchDescHeader header; ///< Header descriptor, use type FFX_API_DISPATCH_DESC_TYPE_UPSCALE. + void* commandList; ///< Command list to record upscaling rendering commands into. + struct FfxApiResource color; ///< Color buffer for the current frame (at render resolution). + struct FfxApiResource depth; ///< 32bit depth values for the current frame (at render resolution). + struct FfxApiResource motionVectors; ///< 2-dimensional motion vectors (at render resolution if FFX_FSR_ENABLE_DISPLAY_RESOLUTION_MOTION_VECTORS is not set). + struct FfxApiResource exposure; ///< Optional resource containing a 1x1 exposure value. + struct FfxApiResource reactive; ///< Optional resource containing alpha value of reactive objects in the scene. + struct FfxApiResource transparencyAndComposition; ///< Optional resource containing alpha value of special objects in the scene. + struct FfxApiResource output; ///< Output color buffer for the current frame (at presentation resolution). + struct FfxApiFloatCoords2D jitterOffset; ///< The subpixel jitter offset applied to the camera. + struct FfxApiFloatCoords2D motionVectorScale; ///< The scale factor to convert motion vectors to pixel space. Internally: pixelSpaceMV = motionVector * motionVectorScale. Set to renderSize if motion vectors are in UV space [0,1], or to (1.0, 1.0) if motion vectors are already in pixel space. When using display-resolution motion vectors, set to displaySize. + struct FfxApiDimensions2D renderSize; ///< The resolution that was used for rendering the input resources. + struct FfxApiDimensions2D upscaleSize; ///< The resolution that the upscaler will upscale to (optional, assumed maxUpscaleSize otherwise). + bool enableSharpening; ///< Enable an additional sharpening pass. + float sharpness; ///< The sharpness value between 0 and 1, where 0 is no additional sharpness and 1 is maximum additional sharpness. + float frameTimeDelta; ///< The time elapsed since the last frame (expressed in milliseconds). + float preExposure; ///< The pre exposure value (must be > 0.0f) + bool reset; ///< A boolean value which when set to true, indicates the camera has moved discontinuously. + float cameraNear; ///< The distance to the near plane of the camera. + float cameraFar; ///< The distance to the far plane of the camera. + float cameraFovAngleVertical; ///< The camera angle field of view in the vertical direction (expressed in radians). + float viewSpaceToMetersFactor; ///< The scale factor to convert view space units to meters + uint32_t flags; ///< Zero or a combination of values from FfxApiDispatchFsrUpscaleFlags. +}; + +#define FFX_API_QUERY_DESC_TYPE_UPSCALE_GETUPSCALERATIOFROMQUALITYMODE FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_UPSCALE, 0x02) +struct ffxQueryDescUpscaleGetUpscaleRatioFromQualityMode +{ + ffxQueryDescHeader header; ///< Header descriptor, use type FFX_API_QUERY_DESC_TYPE_UPSCALE_GETUPSCALERATIOFROMQUALITYMODE. + uint32_t qualityMode; ///< The desired quality mode for FSR upscaling. + float* pOutUpscaleRatio; ///< A pointer to a float which will hold the upscaling the per-dimension upscaling ratio. +}; + +#define FFX_API_QUERY_DESC_TYPE_UPSCALE_GETRENDERRESOLUTIONFROMQUALITYMODE FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_UPSCALE, 0x03) +struct ffxQueryDescUpscaleGetRenderResolutionFromQualityMode +{ + ffxQueryDescHeader header; ///< Header descriptor, use type FFX_API_QUERY_DESC_TYPE_UPSCALE_GETRENDERRESOLUTIONFROMQUALITYMODE. + uint32_t displayWidth; ///< The target display resolution width. + uint32_t displayHeight; ///< The target display resolution height. + uint32_t qualityMode; ///< The desired quality mode for FSR upscaling. + uint32_t* pOutRenderWidth; ///< A pointer to a uint32_t which will hold the calculated render resolution width. + uint32_t* pOutRenderHeight; ///< A pointer to a uint32_t which will hold the calculated render resolution height. +}; + +#define FFX_API_QUERY_DESC_TYPE_UPSCALE_GETJITTERPHASECOUNT FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_UPSCALE, 0x04) +struct ffxQueryDescUpscaleGetJitterPhaseCount +{ + ffxQueryDescHeader header; ///< Header descriptor, use type FFX_API_QUERY_DESC_TYPE_UPSCALE_GETJITTERPHASECOUNT. + uint32_t renderWidth; ///< The render resolution width. + uint32_t displayWidth; ///< The output resolution width. + int32_t* pOutPhaseCount; ///< A pointer to a int32_t which will hold the jitter phase count for the scaling factor between renderWidth and displayWidth. +}; + +#define FFX_API_QUERY_DESC_TYPE_UPSCALE_GETJITTEROFFSET FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_UPSCALE, 0x05) +struct ffxQueryDescUpscaleGetJitterOffset +{ + ffxQueryDescHeader header; ///< Header descriptor, use type FFX_API_QUERY_DESC_TYPE_UPSCALE_GETJITTEROFFSET. + int32_t index; ///< The index within the jitter sequence. + int32_t phaseCount; ///< The length of jitter phase. See ffxQueryDescFsrGetJitterPhaseCount. + float* pOutX; ///< A pointer to a float which will contain the subpixel jitter offset for the x dimension. + float* pOutY; ///< A pointer to a float which will contain the subpixel jitter offset for the y dimension. +}; + +#define FFX_API_DISPATCH_DESC_TYPE_UPSCALE_GENERATEREACTIVEMASK FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_UPSCALE, 0x06) +struct ffxDispatchDescUpscaleGenerateReactiveMask +{ + ffxDispatchDescHeader header; ///< Header descriptor, use type FFX_API_DISPATCH_DESC_TYPE_UPSCALE_GENERATEREACTIVEMASK. + void* commandList; ///< The FfxCommandList to record FSRUPSCALE rendering commands into. + struct FfxApiResource colorOpaqueOnly; ///< A FfxApiResource containing the opaque only color buffer for the current frame (at render resolution). + struct FfxApiResource colorPreUpscale; ///< A FfxApiResource containing the opaque+translucent color buffer for the current frame (at render resolution). + struct FfxApiResource outReactive; ///< A FfxApiResource containing the surface to generate the reactive mask into. + struct FfxApiDimensions2D renderSize; ///< The resolution that was used for rendering the input resources. + float scale; ///< A value to scale the output + float cutoffThreshold; ///< A threshold value to generate a binary reactive mask + float binaryValue; ///< A value to set for the binary reactive mask + uint32_t flags; ///< Flags to determine how to generate the reactive mask +}; + +#define FFX_API_CONFIGURE_DESC_TYPE_UPSCALE_KEYVALUE FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_UPSCALE, 0x07) +struct ffxConfigureDescUpscaleKeyValue +{ + ffxConfigureDescHeader header; ///< Header descriptor, use type FFX_API_CONFIGURE_DESC_TYPE_UPSCALE_KEYVALUE. + uint64_t key; ///< Configuration key, member of the FfxApiConfigureUpscaleKey enumeration. + uint64_t u64; ///< Integer value or enum value to set. + void* ptr; ///< Pointer to set or pointer to value to set. +}; + +enum FfxApiConfigureUpscaleKey +{ + FFX_API_CONFIGURE_UPSCALE_KEY_FVELOCITYFACTOR = 0, ///< Override constant buffer fVelocityFactor. The float value is casted from void * ptr. Value of 0.0f can improve temporal stability of bright pixels. Default value is 1.0f. Value is clamped to [0.0f, 1.0f]. + FFX_API_CONFIGURE_UPSCALE_KEY_FREACTIVENESSSCALE = 1, ///< Override constant buffer fReactivenessScale. The float value is casted from void * ptr. Meant for development purpose to test if writing a larger value to reactive mask, reduces ghosting. Default value is 1.0f. Value is clamped to [0.0f, +infinity]. + FFX_API_CONFIGURE_UPSCALE_KEY_FSHADINGCHANGESCALE = 2, ///< Override fShadingChangeScale. Increasing this scales fsr3.1 computed shading change value at read to have higher reactiveness. Default value is 1.0f. Value is clamped to [0.0f, +infinity]. + FFX_API_CONFIGURE_UPSCALE_KEY_FACCUMULATIONADDEDPERFRAME = 3, ///< Override constant buffer fAccumulationAddedPerFrame. Corresponds to amount of accumulation added per frame at pixel coordinate where disocclusion occured or when reactive mask value is > 0.0f. Decreasing this and drawing the ghosting object (IE no mv) to reactive mask with value close to 1.0f can decrease temporal ghosting. Decreasing this value could result in more thin feature pixels flickering. Default value is 0.333. Value is clamped to [0.0f, 1.0f]. + FFX_API_CONFIGURE_UPSCALE_KEY_FMINDISOCCLUSIONACCUMULATION = 4, ///< Override constant buffer fMinDisocclusionAccumulation. Increasing this value may reduce white pixel temporal flickering around swaying thin objects that are disoccluding one another often. Too high value may increase ghosting. A sufficiently negative value means for pixel coordinate at frame N that is disoccluded, add fAccumulationAddedPerFrame starting at frame N+2. Default value is -0.333. Value is clamped to [-1.0f, 1.0f]. +}; + +#define FFX_API_QUERY_DESC_TYPE_UPSCALE_GPU_MEMORY_USAGE FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_UPSCALE, 0x08) +struct ffxQueryDescUpscaleGetGPUMemoryUsage +{ + ffxQueryDescHeader header; ///< Header descriptor, use type FFX_API_QUERY_DESC_TYPE_UPSCALE_GPU_MEMORY_USAGE. + struct FfxApiEffectMemoryUsage* gpuMemoryUsageUpscaler; ///< Output values by Query() call. +}; + +#define FFX_API_QUERY_DESC_TYPE_UPSCALE_GPU_MEMORY_USAGE_V2 FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_UPSCALE, 0x09) +struct ffxQueryDescUpscaleGetGPUMemoryUsageV2 +{ + ffxQueryDescHeader header; ///< Header descriptor, use type FFX_API_QUERY_DESC_TYPE_UPSCALE_GPU_MEMORY_USAGE_V2. + void* device; ///< For DX12: pointer to ID3D12Device. For VK, pointer to VkDeviceContext. App needs to fill out before Query() call. + struct FfxApiDimensions2D maxRenderSize; ///< App needs to fill out before Query() call. + struct FfxApiDimensions2D maxUpscaleSize; ///< App needs to fill out before Query() call. + uint32_t flags; ///< Zero or a combination of values from FfxApiCreateContextUpscaleFlags. App needs to fill out before Query() call. + struct FfxApiEffectMemoryUsage* gpuMemoryUsageUpscaler; ///< Output values by Query() call. +}; + +enum FfxApiQueryResourceIdentifiers +{ + FFX_API_QUERY_RESOURCE_INPUT_COLOR = (1 << 0), ///< Color buffer for the current frame (at render resolution). + FFX_API_QUERY_RESOURCE_INPUT_DEPTH = (1 << 1), ///< 32bit depth values for the current frame (at render resolution). + FFX_API_QUERY_RESOURCE_INPUT_MV = (1 << 2), ///< 2-dimensional motion vectors (at render resolution if FFX_FSR_ENABLE_DISPLAY_RESOLUTION_MOTION_VECTORS is not set). + FFX_API_QUERY_RESOURCE_INPUT_EXPOSURE = (1 << 3), ///< A 1x1 texture containing exposure value or the FFX_UPSCALE_ENABLE_AUTO_EXPOSURE set at context creation. + FFX_API_QUERY_RESOURCE_INPUT_REACTIVEMASK = (1 << 4), ///< An R8 UNORM texture at render resolution that controls the influence of pixel history on upscaling result. + FFX_API_QUERY_RESOURCE_INPUT_TRANSPARENCYCOMPOSITION = (1 << 5), ///< An R8 UNORM texture at render resolution that controls the blending of color in the upscaling result. +}; + +#define FFX_API_QUERY_DESC_TYPE_UPSCALE_GET_RESOURCE_REQUIREMENTS FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_UPSCALE, 0x0a) +struct ffxQueryDescUpscaleGetResourceRequirements +{ + ffxQueryDescHeader header; ///< Header descriptor, use type FFX_API_QUERY_DESC_TYPE_UPSCALE_GET_RESOURCE_REQUIREMENTS. + uint64_t required_resources; ///< resources 64b bitfield, that given current context state, are required for effect correctness. + uint64_t optional_resources; ///< resources 64b bitfield, that given current context state, will be consumed if provided, but are optional. +}; + +#define FFX_API_CREATE_CONTEXT_DESC_TYPE_UPSCALE_VERSION FFX_API_MAKE_EFFECT_SUB_ID(FFX_API_EFFECT_ID_UPSCALE, 0x0b) +struct ffxCreateContextDescUpscaleVersion +{ + ffxCreateContextDescHeader header; ///< Header descriptor, use type FFX_API_CREATE_CONTEXT_DESC_TYPE_UPSCALE_VERSION. + uint32_t version; ///< The version of the API the application was built against. This must be set to FFX_UPSCALER_VERSION. +}; + +#ifdef __cplusplus +} +#endif From 60f1d2ed955eada364be971ffd8ee7890c60f8fd Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 15:20:47 -0600 Subject: [PATCH 087/119] feat(vk): say why DLSS 5 neural rendering is refused, and the RTX 20-40 route NVIDIA's nvngx_dlssnr.dll runs on RTX 50 only; community builds of it (dlssnr-patcher, openNR's 310.9.16 compatibility build) recompile the model for Turing, Ampere and Ada. Hookshot already loads whichever file is there, but a patched one carries no NVIDIA signature, and NGX loads it only with its signature override on. When Streamline refuses the feature, the log now names the GPU's generation, whether the nvngx_dlssnr.dll beside the plugin is NVIDIA's (signed) or unsigned, and the state of HKLM\SOFTWARE\NVIDIA Corporation\Global\NGXCore EnableSignatureOverride, and says which is missing. The registry is read only, never written. The Neural tab's switch shows the one-line reason. docs/neural-rendering.md: the patched-DLL route, the override, and what exists for neural rendering on AMD (NeuralHub: D3D12 only, no redistribution; OpenDLSS-NR: MIT Vulkan, NVIDIA-only kernels, no weights). Co-Authored-By: Claude Opus 5.5 --- docs/neural-rendering.md | 42 +++++++++++++++++--- gpu/vk/vk_menu.cpp | 14 ++++++- gpu/vk/vk_streamline.cpp | 86 +++++++++++++++++++++++++++++++++++++++- gpu/vk/vk_streamline.h | 3 ++ nx2/build.py | 2 +- 5 files changed, 137 insertions(+), 10 deletions(-) diff --git a/docs/neural-rendering.md b/docs/neural-rendering.md index e1957f046..c0961876e 100644 --- a/docs/neural-rendering.md +++ b/docs/neural-rendering.md @@ -108,12 +108,42 @@ Floor: **Streamline 2.14.1**, the first public tag carrying `kFeatureDLSS_NR` at introduced the plugin; v2.12.0 and earlier have neither the feature nor the uplift tags). CI builds against v2.14.16. -**GPU**: NVIDIA's shipped `nvngx_dlssnr.dll` appears to be **Blackwell-only** (SM120). A measured -probe on an RTX 4070 SUPER with the official signed 2.13 plugin got `AdapterUnsupported` and -Streamline then ignored the plugin outright; claims of RTX 20-series support trace to openNR's -*recompiled* DLL on its NGX-direct path, which does not claim Vulkan support. So: an RTX 50-series -card is the expectation here, and anything older reporting the feature unavailable is the honest -answer rather than a bug. +**GPU**: NVIDIA's shipped `nvngx_dlssnr.dll` is **Blackwell-only** (its kernels are SM120). On an RTX 20, 30 or 40 +NGX refuses it with `0xbad00001` (`FAIL_FeatureNotSupported`), and a probe on an RTX 4070 SUPER got +`AdapterUnsupported` from Streamline. The arch gate and the kernels are both inside that one file, which is why the +community route works: [dlssnr-patcher](https://github.com/dev-camo/dlssnr-patcher) (GPL-2.0) recompiles its PTX for +`sm_75`/`sm_86`/`sm_89`, rewrites the FP8 instructions older cards lack and widens the architecture the file declares, +and [openNR](https://github.com/clshortfuse/openNR) (MIT) reconstructs a pinned 310.9.16 compatibility DLL, an FP16 one +reported at about 3.5 ms on an RTX 4070 against 6 ms for the FP8 port. Both work from the player's own copy and ship +nothing of NVIDIA's. + +Hookshot needs nothing special for them -- it loads whatever `nvngx_dlssnr.dll` sits beside `sl.dlss_nr.dll`, and +signature-checks only `sl.interposer.dll` -- but **a patched file has no NVIDIA signature, and NGX loads an unsigned +feature only with its signature override** (`HKLM\SOFTWARE\NVIDIA Corporation\Global\NGXCore`, DWORD +`EnableSignatureOverride` = 1), the same switch DLSS wrappers have always needed. That is the player's to set: +`vk_streamline.cpp explain_refusal` reads it for the log and never writes it. When Streamline refuses the feature, that +function logs the GPU's generation, whether the `nvngx_dlssnr.dll` there is NVIDIA's (signed) or a patched one, and the +override's state, says which of them is missing, and gives the Neural tab a one-line reason. + +Not measured here: the patched DLLs through *Streamline* on *Vulkan*. Every report found used NGX directly from D3D12 +(RenoDX's add-on, OptiScaler). If Streamline's own plugin turns out to gate on the architecture as well, the log line will +say `AdapterUnsupported` with a signed-off DLL and the override on, and the answer is an NGX-direct path for feature 18 +beside the DLSS-G one (`gpu/vk/vk_ngx.h`) -- which would also bring NR to Linux. + +## On AMD + +What exists for neural rendering on an AMD card, as of November 2026, and what of it can be used here: + +- **[DLSS-NR on AMD](https://github.com/danielblnc/DLSS-NR-on-AMD)** (NeuralHub) reimplements the model in HIP and hooks + D3D12 games. Its licence forbids redistribution, bundling and reverse engineering, and it is D3D12 only -- Vulkan is + "planned". Hookshot is Vulkan, so it cannot hook it, and may not ship it. +- **[OpenDLSS-NR](https://github.com/maanHimself/OpenDLSS-NR)** (MIT) is a Vulkan reimplementation of the 310.8.0 + network, bit-exact block by block. Its kernels need `VK_NV_cooperative_matrix2` and `VK_NV_cuda_kernel_launch` (the + fast path is PTX), so it is NVIDIA-only as it stands, and it reads the weights from a model directory that "nothing in + this repository produces". An AMD port means rewriting its GEMMs for `VK_KHR_cooperative_matrix` with + `VK_EXT_shader_float8` (RDNA 4) or an FP16 fallback (RDNA 3), and a way for the player to get the weights out of their + own `nvngx_dlssnr.dll`. That is a project of its own, and it is the most promising one. +- **AMD's own machine-learning upscaler is now here**: FSR 4, on the Upscaler row (`docs/upscaling.md`). ## What is still unproven diff --git a/gpu/vk/vk_menu.cpp b/gpu/vk/vk_menu.cpp index 78cad6c08..28c9bcfa6 100644 --- a/gpu/vk/vk_menu.cpp +++ b/gpu/vk/vk_menu.cpp @@ -31,6 +31,7 @@ #include "vk_startup_paint.h" #include "vk_dlssnr.h" // (whether this build can offer DLSS 5 neural rendering at all) +#include "vk_streamline.h" // (nr_why: why neural rendering is not available here) #include "vk_fsr3.h" // (the Upscaler row: whether FSR 3.1 runs on this device) #include "vk_ffx.h" // (and FSR 4, AMD's runtime) #include "vk_work.h" // (after the others: counts the commands that do GPU work, for full_barrier) @@ -236,6 +237,17 @@ const char* hn_dlss_model(int v, int variant) { if (variant == 2) return env; return variant == 0 ? t[std::clamp(v, 0, ur::kModels - 1)] : nullptr; } +/// Neural rendering: the value, or why it is not available here (vk_streamline.cpp explain_refusal; the log has more) +const char* hn_nr(int v, int variant) { + static const char* const t[] = {"Off.", "On: NVIDIA's model goes over every finished frame."}; + static const char* const longest = + "Not available: NVIDIA's model is RTX 50 only. RTX 20-40: a patched nvngx_dlssnr.dll (readme)."; + if (variant < 0) { + const char* w = streamline::nr_why(); + return *w ? w : t[std::clamp(v, 0, 1)]; + } + return variant == 0 ? t[std::clamp(v, 0, 1)] : variant == 1 ? longest : nullptr; +} const char* tx_percent(int v) { static char b[8]; snprintf(b, sizeof b, "%d%%", v); @@ -585,7 +597,7 @@ Row rows[] = { {TAB_NEURAL, "Neural rendering", &opts.nr, 0, 1, 1, tx_onoff, "DLSS 5 neural rendering: NVIDIA's model goes over the finished frame and rebuilds detail, tone and structure in it. " "Needs an NVIDIA RTX card and NVIDIA's Streamline files beside the game (readme.md); the rows below are the model's own " - "settings and do nothing while this is Off."}, + "settings and do nothing while this is Off.", hn_nr}, {TAB_NEURAL, "Model", &opts.nr_model, 0, 3, 1, tx_nr_model, "How much work the model does per frame: Performance is the cheapest, DLAA the most expensive, Quality the model's " "own default. Streamline 2.14's plugin ignores this one -- it is sent correctly and a later NVIDIA release is " diff --git a/gpu/vk/vk_streamline.cpp b/gpu/vk/vk_streamline.cpp index 9e577b723..04aea6797 100644 --- a/gpu/vk/vk_streamline.cpp +++ b/gpu/vk/vk_streamline.cpp @@ -8,6 +8,8 @@ #include +#include +#include #include #include @@ -39,6 +41,7 @@ struct State { std::vector device_names; uint32_t extra_graphics{}; uint32_t extra_compute{}; + std::string why; ///< nr_why(): the short reason neural rendering is not available, for the menu Api api{}; }; @@ -179,6 +182,83 @@ bool load(State& s, const std::wstring& path) { return false; } +/// Whether Windows trusts the file's signature, whoever's it is: no signature at all is what a community-patched +/// nvngx_dlssnr.dll has (patching it invalidates NVIDIA's, and the patchers strip it). +bool trusted_signature(const std::wstring& path) { + WINTRUST_FILE_INFO file{}; + file.cbStruct = sizeof file; + file.pcwszFilePath = path.c_str(); + GUID action = WINTRUST_ACTION_GENERIC_VERIFY_V2; + WINTRUST_DATA data{}; + data.cbStruct = sizeof data; + data.dwUIChoice = WTD_UI_NONE; + data.fdwRevocationChecks = WTD_REVOKE_NONE; + data.dwUnionChoice = WTD_CHOICE_FILE; + data.pFile = &file; + data.dwStateAction = WTD_STATEACTION_VERIFY; + const LONG status = WinVerifyTrust(nullptr, &action, &data); + data.dwStateAction = WTD_STATEACTION_CLOSE; + WinVerifyTrust(nullptr, &action, &data); + return status == ERROR_SUCCESS; +} + +/// NVIDIA's NGX signature override, as the player set it (read only: changing it is theirs to do): +/// HKLM\SOFTWARE\NVIDIA Corporation\Global\NGXCore EnableSignatureOverride. -1 when it is not there. +int signature_override() { + DWORD value = 0, size = sizeof value; + if (RegGetValueW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\NVIDIA Corporation\\Global\\NGXCore", + L"EnableSignatureOverride", RRF_RT_REG_DWORD, nullptr, &value, &size) != ERROR_SUCCESS) + return -1; + return (int)value; +} + +/// The RTX generation from the device's name: 50 Blackwell, 40 Ada, 30 Ampere, 20 Turing; 0 for one it does not +/// recognize (a workstation card, a name it has not seen). Only for what the log and the menu say. +int rtx_series(VkPhysicalDevice gpu) { + VkPhysicalDeviceProperties p{}; + vkGetPhysicalDeviceProperties(gpu, &p); + const char* n = strstr(p.deviceName, "RTX "); + if (!n || !isdigit((unsigned char)n[4]) || !isdigit((unsigned char)n[5])) return 0; + const int series = (n[4] - '0') * 10; + return series >= 20 && series <= 50 ? series : 0; +} + +/// Why Streamline said no, in the log in full and for the menu in short. The usual case on an RTX 20, 30 or 40 is +/// NVIDIA's own model, which runs on RTX 50 only: NGX refuses it on older cards (FAIL_FeatureNotSupported, 0xbad00001, +/// and Streamline answers eErrorAdapterNotSupported or eErrorFeatureNotSupported). Community builds of +/// nvngx_dlssnr.dll recompile the model for Turing, Ampere and Ada (dlssnr-patcher; openNR's 310.9.16 compatibility +/// build): those carry no NVIDIA signature, so NGX loads them only with its signature override set. +void explain_refusal(State& s, VkPhysicalDevice gpu, sl::Result r) { + const int series = rtx_series(gpu); + const std::wstring dll = s.plugin_dir + L"\\nvngx_dlssnr.dll"; + const bool have = GetFileAttributesW(dll.c_str()) != INVALID_FILE_ATTRIBUTES; + const bool signed_dll = have && trusted_signature(dll); + const int override_value = signature_override(); + logf("vk: DLSS 5 neural rendering is not supported here (Streamline result %u). GPU: %s; nvngx_dlssnr.dll: %s; " + "NGX signature override: %s", + (unsigned)r, series ? (series == 50 ? "RTX 50" : series == 40 ? "RTX 40" : series == 30 ? "RTX 30" : "RTX 20") + : "not recognized as RTX 20 to 50", + !have ? "not beside sl.interposer.dll" : signed_dll ? "NVIDIA's (signed)" : "unsigned (a patched build)", + override_value < 0 ? "not set" : override_value ? "on" : "off"); + if (!have) { + logf("vk: put nvngx_dlssnr.dll beside sl.dlss_nr.dll (readme.md: DLSS 5 neural rendering)"); + s.why = "Not available: nvngx_dlssnr.dll is not beside the game's Streamline files."; + } else if (series && series < 50 && signed_dll) { + logf("vk: NVIDIA's own nvngx_dlssnr.dll runs on RTX 50 only. On an RTX %d, a community build of it that " + "adds Turing, Ampere and Ada is needed instead (readme.md says which, and how)", series); + s.why = "Not available: NVIDIA's model is RTX 50 only. RTX 20-40: a patched nvngx_dlssnr.dll (readme)."; + } else if (!signed_dll && override_value <= 0) { + logf("vk: this nvngx_dlssnr.dll is unsigned, and NGX loads an unsigned one only with its signature " + "override on: HKLM\\SOFTWARE\\NVIDIA Corporation\\Global\\NGXCore, DWORD EnableSignatureOverride = 1 " + "(readme.md). Hookshot does not change it for you"); + s.why = "Not available: the patched nvngx_dlssnr.dll needs NGX's signature override (readme)."; + } else if (r == sl::Result::eErrorDriverOutOfDate) { + s.why = "Not available: NVIDIA's driver is too old for DLSS 5 neural rendering."; + } else { + s.why = "Not available on this GPU or driver (the log says what Streamline answered)."; + } +} + void add_names(std::vector& list, uint32_t count, const char** names) { for (uint32_t i = 0; i < count; i++) { bool have = false; @@ -336,8 +416,7 @@ bool attach_device(VkInstance instance, VkPhysicalDevice gpu, VkDevice device, adapter.vkPhysicalDevice = gpu; if (const sl::Result r = s.api.is_feature_supported(sl::kFeatureDLSS_NR, adapter); r != sl::Result::eOk) { - logf("vk: DLSS 5 neural rendering is not supported on this GPU or driver (Streamline " - "result 0x%x)", (unsigned)r); + explain_refusal(s, gpu, r); s.nr = false; stop(); return false; @@ -352,6 +431,8 @@ bool nr_available() { return s.started && s.attached && s.nr; } +const char* nr_why() { return state().why.c_str(); } + void stop() { State& s = state(); if (!s.started) return; @@ -373,6 +454,7 @@ size_t device_extensions(const char**, size_t) { return 0; } uint32_t extra_queues() { return 0; } bool attach_device(VkInstance, VkPhysicalDevice, VkDevice, uint32_t, uint32_t) { return false; } bool nr_available() { return false; } +const char* nr_why() { return ""; } void stop() {} } // namespace mkwvk::streamline diff --git a/gpu/vk/vk_streamline.h b/gpu/vk/vk_streamline.h index d3703cccf..e5d3b98e4 100644 --- a/gpu/vk/vk_streamline.h +++ b/gpu/vk/vk_streamline.h @@ -69,6 +69,9 @@ bool attach_device(VkInstance instance, VkPhysicalDevice gpu, VkDevice device, /// Whether DLSS 5 neural rendering can run: Streamline started, the device is attached, and both /// Streamline and the driver report the feature as supported here. [[nodiscard]] bool nr_available(); +/// Why neural rendering is not available, in a line the menu can show: "" while it is, or before the device is +/// attached. The log has the long form (vk_streamline.cpp explain_refusal). +[[nodiscard]] const char* nr_why(); /// Ends the session. Safe when nothing was started; call before the device is destroyed. void stop(); diff --git a/nx2/build.py b/nx2/build.py index a653e2754..7e18fe4e1 100644 --- a/nx2/build.py +++ b/nx2/build.py @@ -138,7 +138,7 @@ def streamline_link(): """ if LINUX or not streamline_sdk_path(): return [] - return ["-lwintrust", "-lcrypt32"] + return ["-lwintrust", "-lcrypt32", "-ladvapi32"] # (advapi32: the NGX signature override, read for the log) def target(): From 0fa18bd32126177b58a9e8f8a44158869cb90f36 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 15:21:16 -0600 Subject: [PATCH 088/119] fix(release): the Windows release installs the renderer CI built, with DLSS, NR and FSR 4 Reported from v2.6.4: the Insert menu offered none of the DLSS upscaling, frame generation or neural rendering settings. The Windows builder job built a hookshot_vk.dll with NVIDIA's SDK and Streamline's headers, then kept it only as a workflow artifact; the release's Builder compiled the renderer on the player's PC, which has neither, so DLSS and NR were compiled out there. - windows-builder.yml: the package job waits for the Vulkan job and carries its DLL in tools/prebuilt; the Vulkan job fails unless the build log says DLSS and neural rendering were compiled in. NGX comes through upstream's scripts/ngx_sdk.py (HOOKSHOT_NGX_SDK), as vulkan-dlss.yml fetches it. - AMD's FSR runtime (FSR SDK v2.4.0 signedbin, MIT) is packaged as an amd-fsr part of its own, so the setup's cache keeps its 70 MB between releases; make_setup_parts.py treats it as optional. - nx2/make_game.py uses tools/prebuilt/hookshot_vk.dll unless HOOKSHOT_VK_PREBUILT names another or HOOKSHOT_VK_LOCAL=1, puts AMD's runtime beside the game's exe, and installs DLSS's camera jitter when the prebuilt renderer has DLSS in it (the player's PC has no SDK to say so). - Linux: the AppImage's parts list named upstream's linux-parts release, which has none of the fork's parts; it names this repository's now. The AppImage's renderer gets NGX through scripts/ngx_sdk.py too. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/linux-appimage.yml | 17 +++++---- .github/workflows/windows-builder.yml | 51 +++++++++++++++++++++------ nx2/make_game.py | 49 ++++++++++++++++++++++++- scripts/linux/appimage.sh | 5 ++- scripts/make_setup_parts.py | 15 ++++++-- scripts/release_parts.py | 16 +++++++++ 6 files changed, 129 insertions(+), 24 deletions(-) diff --git a/.github/workflows/linux-appimage.yml b/.github/workflows/linux-appimage.yml index 83d0b93a1..8dfb3da51 100644 --- a/.github/workflows/linux-appimage.yml +++ b/.github/workflows/linux-appimage.yml @@ -76,17 +76,16 @@ jobs: { echo "the profile did not download: built without it"; exit 0; } ls -la work work/image - # (the back end this AppImage carries is built with DLSS support compiled in. NVIDIA's SDK is fetched here and - # never committed; nx2/build.py finds it because it sits at the tree root as `dlss-sdk`. The DLSS *runtime* - # (libnvidia-ngx-dlss.so) is NVIDIA's to ship and is still not included -- a player who wants DLSS puts it - # beside the game, and readme.md says so. Without this the released build offers FSR and nothing else.) - - name: Check out NVIDIA's DLSS SDK (built against, not shipped) - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - with: - repository: NVIDIA/DLSS - path: dlss-sdk + # (the back end this AppImage carries is built with DLSS compiled in: NVIDIA's SDK fetched here by scripts/ngx_sdk.py + # (headers and libnvsdk_ngx.a, under NVIDIA's license), never committed. The DLSS *runtime* + # (libnvidia-ngx-dlss.so) is NVIDIA's to ship and is still not included -- a player who wants DLSS puts it in the + # game's ngx folder, and readme.md says so. Without this the released build offers FSR and nothing else.) + - name: NVIDIA's DLSS SDK (headers and libnvsdk_ngx.a) + run: python3 -I scripts/ngx_sdk.py --platform linux --build-only --accept-nvidia-license "$RUNNER_TEMP/ngx-sdk" - name: AppImage + env: + HOOKSHOT_NGX_SDK: ${{ runner.temp }}/ngx-sdk run: scripts/linux/appimage.sh diff --git a/.github/workflows/windows-builder.yml b/.github/workflows/windows-builder.yml index da87a0ad3..4ed85767e 100644 --- a/.github/workflows/windows-builder.yml +++ b/.github/workflows/windows-builder.yml @@ -30,6 +30,8 @@ jobs: name: Hookshot Builder package and setup # (builder-parts holds the installer's parts: no package there) if: github.ref_name != 'builder-parts' + # (hookshot) the package carries the renderer the vulkan job built (tools/prebuilt), so it waits for it + needs: vulkan runs-on: windows-2022 timeout-minutes: 30 steps: @@ -104,10 +106,35 @@ jobs: dotnet publish builder/HookshotBuilder/HookshotBuilder.csproj --configuration Release -p:Version="$VERSION" -p:NuGetAudit=false --output "$RUNNER_TEMP/publish" + # (hookshot) the renderer built with NVIDIA DLSS, DLSS 5 neural rendering and AMD FSR 4 compiled in + - uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 + with: + name: hookshot_vk-windows + path: ${{ runner.temp }}/vk + # (hookshot) AMD's FSR runtime: the loader, the upscaler and frame generation, signed by AMD and MIT-licensed in + # FSR SDK 2.4 (its docs/license.md lists Kits/FidelityFX/signedbin under MIT). gpu/vk/vk_ffx.cpp loads it from + # beside the game; nx2/make_game.py puts it there + - name: AMD's FSR runtime (FSR SDK v2.4.0) + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + repository: GPUOpen-LibrariesAndSDKs/FidelityFX-SDK + ref: 7539ae8b6568ad29ed78a753404351daf3b5cca7 # v2.4.0 + path: _amd + persist-credentials: false + sparse-checkout: | + Kits/FidelityFX/signedbin + sparse-checkout-cone-mode: true + - name: AMD's FSR runtime, with its notice + run: | + mkdir -p "$RUNNER_TEMP/amd-fsr" + cp _amd/Kits/FidelityFX/signedbin/amd_fidelityfx_*_vk.dll "$RUNNER_TEMP/amd-fsr/" + cp third_party/ffx-api/LICENSE.txt "$RUNNER_TEMP/amd-fsr/LICENSE.txt" + ls -l "$RUNNER_TEMP/amd-fsr" - name: Package folder run: >- python -I scripts/release_parts.py package "$RUNNER_TEMP/package" --publish "$RUNNER_TEMP/publish" --setup "$RUNNER_TEMP/HookshotBuilder-Setup.exe" ${PREVIOUS:+--list "$PREVIOUS"} + --vk "$RUNNER_TEMP/vk/hookshot_vk.dll" --amd-fsr "$RUNNER_TEMP/amd-fsr" - name: Setup parts run: | @@ -170,14 +197,13 @@ jobs: - name: llvm-mingw run: echo "HOOKSHOT_MINGW=$(python -I scripts/release_parts.py llvm-mingw "$RUNNER_TEMP/llvm")" >> "$GITHUB_ENV" # (as scripts/linux/appimage.sh builds Linux's: the back end alone, no lift, no game) - # (built with DLSS support compiled in: the SDK is fetched here, never committed, and found at the tree root - # by nx2/build.py. NVIDIA's runtime (nvngx_dlss.dll) is theirs to ship and is not included -- readme.md tells - # a player where to put it. This link had no coverage at all until now, and was Windows-broken because of it.) - - name: Check out NVIDIA's DLSS SDK (built against, not shipped) - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - with: - repository: NVIDIA/DLSS - path: dlss-sdk + # (hookshot) built with NVIDIA DLSS compiled in, as vulkan-dlss.yml builds it: NVIDIA's SDK fetched here by + # scripts/ngx_sdk.py (headers and the static library, under NVIDIA's license), never committed. NVIDIA's runtime + # (nvngx_dlss.dll) is theirs to ship and is not included -- readme.md tells a player where to put it. This DLL is + # what the release's Builder installs (nx2/make_game.py prebuilt_renderer): a renderer compiled on the player's + # PC has none of NVIDIA's SDKs, and the Insert menu then offers none of DLSS, its frame generation or NR. + - name: NVIDIA's DLSS SDK (headers and nvsdk_ngx_s.lib) + run: python -I scripts/ngx_sdk.py --platform windows --build-only --accept-nvidia-license "$RUNNER_TEMP/ngx-sdk" # (DLSS 5 neural rendering: only NVIDIA Streamline's MIT-licensed headers, fetched here and never # committed, found at the tree root by nx2/build.py streamline_sdk_path. Nothing is linked from it -- # sl.interposer.dll and the sl.* plugins are the player's own files, loaded at run time. v2.14.1 is the @@ -193,9 +219,14 @@ jobs: RX_VK_ONLY: '1' RX_RELEASE: '1' run: | - OOT_WORK="$RUNNER_TEMP/vk-work" RX_CPM="$GITHUB_WORKSPACE/_deps/cpm" \ - python -I nx2/build.py --standalone --jobs "$NUMBER_OF_PROCESSORS" + OOT_WORK="$RUNNER_TEMP/vk-work" RX_CPM="$GITHUB_WORKSPACE/_deps/cpm" HOOKSHOT_NGX_SDK="$RUNNER_TEMP/ngx-sdk" \ + python -I nx2/build.py --standalone --jobs "$NUMBER_OF_PROCESSORS" | tee "$RUNNER_TEMP/vk-build.log" + test "${PIPESTATUS[0]}" -eq 0 ls -l "$RUNNER_TEMP/vk-work/sa/build/hookshot_vk.dll" + # (a release must carry what it says: a renderer without DLSS or neural rendering compiled in fails here, + # not on a player's PC as rows missing from the Insert menu) + grep -q "vk: DLSS (NGX): compiled in" "$RUNNER_TEMP/vk-build.log" + grep -q "vk: DLSS 5 neural rendering (Streamline): compiled in" "$RUNNER_TEMP/vk-build.log" - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 with: name: hookshot_vk-windows diff --git a/nx2/make_game.py b/nx2/make_game.py index ec733289f..b1e0d4724 100644 --- a/nx2/make_game.py +++ b/nx2/make_game.py @@ -906,6 +906,47 @@ def ngx_built(): return bool(sdk) and os.path.isfile(ngx_script().library(sdk, ngx_platform())) +def prebuilt_renderer(): + """(hookshot, Windows) The renderer this release's CI built, with NVIDIA DLSS, DLSS 5 neural rendering and AMD FSR 4 compiled + in: tools/prebuilt/hookshot_vk.dll (scripts/release_parts.py package --vk). A player's PC has none of NVIDIA's SDKs, so a + renderer compiled there leaves those out and the Insert menu does not offer them. Used unless HOOKSHOT_VK_PREBUILT names + another or HOOKSHOT_VK_LOCAL=1 asks for the local compile. None when the package has none (a build from a source checkout)""" + if LINUX or os.environ.get("HOOKSHOT_VK_PREBUILT") or os.environ.get("HOOKSHOT_VK_LOCAL") == "1": + return None + dll = os.path.join(ROOT, "prebuilt", "hookshot_vk.dll") + return dll if os.path.isfile(dll) else None + + +def place_prebuilt_runtime(game_dir): + """(hookshot, Windows) The runtimes that go beside the game's exe with the prebuilt renderer: AMD's FSR runtime + (amd_fidelityfx_*_vk.dll, MIT, signed by AMD; gpu/vk/vk_ffx.cpp loads it from there). Nothing of NVIDIA's: their runtimes + are the player's own (readme.md). Returns the names placed""" + src = os.path.join(ROOT, "amd-fsr") + if LINUX or not os.path.isdir(src): + return [] + placed = [] + for f in sorted(os.listdir(src)): + if f.lower().endswith(".dll"): + dst = os.path.join(game_dir, f) + if not os.path.isfile(dst) or os.path.getsize(dst) != os.path.getsize(os.path.join(src, f)): + shutil.copyfile(os.path.join(src, f), dst) + placed.append(f) + if placed: + print("beside the game: %s" % ", ".join(placed), flush=True) + return placed + + +def prebuilt_has_dlss(): + """(hookshot) The renderer this build installs instead of compiling one (HOOKSHOT_VK_PREBUILT: the AppImage's, or a Windows + release's tools/prebuilt) has NVIDIA DLSS in it. Its NGX start line is a string only a renderer built with the SDK has + (gpu/vk/vk_dlss.cpp ngx_init), so the bytes say it without loading the library""" + vk = os.environ.get("HOOKSHOT_VK_PREBUILT", "") + if not vk or not os.path.isfile(vk): + return False + with open(vk, "rb") as f: + return b"NVIDIA DLSS: NGX started" in f.read() + + def place_ngx_runtime(out): """(NVIDIA DLSS) a game built with NVIDIA's SDK (HOOKSHOT_NGX_SDK, as nx2/build.py takes it) gets DLSS's runtime in its ngx folder, where gpu/vk/vk_dlss.cpp looks first: nvngx_dlss.dll on Windows, libnvidia-ngx-dlss.so. on Linux. Never @@ -975,6 +1016,9 @@ def main(a=None): drop_stale_objects(work) if getattr(a, "fetch_ngx_sdk", False): fetch_ngx_sdk(a) + if prebuilt_renderer(): # (hookshot: the release's renderer, with DLSS, neural rendering and FSR 4 in it) + os.environ["HOOKSHOT_VK_PREBUILT"] = prebuilt_renderer() + print("the Vulkan back end: this release's, built with NVIDIA DLSS, DLSS 5 neural rendering and AMD FSR 4", flush=True) exefs = os.path.join(work, "exefs") romfs = os.path.join(out, "romfs") @@ -1049,7 +1093,9 @@ def main(a=None): if os.path.exists(os.path.join(work, "hookshot_pieces.prof")) and profile_readable(os.path.join(work, "hookshot_pieces.prof")): env["RX_PGO"] = os.path.join(work, "hookshot_pieces.prof") - if ngx_built(): # (NVIDIA DLSS's camera jitter: only in a build with it, nx2/oot_jitter.py) + # (NVIDIA DLSS's camera jitter: only in a build with it, nx2/oot_jitter.py. A prebuilt renderer with DLSS in it counts: the + # release's Windows one and the AppImage's are built with NVIDIA's SDK, which the player's PC does not have) + if ngx_built() or prebuilt_has_dlss(): env["OOT_DLSS_JITTER"] = "1" say("stage", "lift", "Translating the game to PC code") # (the same game, tools and settings as the lift before: its C is what this lift would write, and nothing recompiles from it. A @@ -1197,6 +1243,7 @@ def compiled(line): except OSError: pass place_ngx_runtime(out) + place_prebuilt_runtime(game_dir) # every shader of the game, for its first start to translate (gpu/vk/vk_shader.cpp seed_open). Without it the game still runs, compiling them # as it meets them: not worth stopping a finished build for if run(shader_census_cmd(romfs, os.path.join(out, "hookshot_shaders.bin")), check=False, output=sys.stderr): diff --git a/scripts/linux/appimage.sh b/scripts/linux/appimage.sh index 2e158db09..6464af377 100755 --- a/scripts/linux/appimage.sh +++ b/scripts/linux/appimage.sh @@ -111,7 +111,10 @@ mkdir -p "$APPDIR/usr/share/icons/hicolor/256x256/apps" cp assets/hookshot.png "$APPDIR/usr/share/icons/hicolor/256x256/apps/hookshot.png" # (the update list, beside AppRun and not inside a hashed part: hookshot-linux.txt names each part's checksum) -python3 scripts/linux/make_parts.py "$APPDIR" "$VERSION" "$B/parts" +# (the parts are served from this repository's linux-parts release, where scripts/linux/publish_parts.sh puts them: a fork's +# list named upstream's release, which holds none of the fork's parts, so its updates could not find them) +python3 scripts/linux/make_parts.py "$APPDIR" "$VERSION" "$B/parts" \ + --base "https://github.com/${GITHUB_REPOSITORY:-NotRexed/Hookshot}/releases/download/linux-parts" OUT=$B/Hookshot-$VERSION-x86_64.AppImage rm -f "$OUT" diff --git a/scripts/make_setup_parts.py b/scripts/make_setup_parts.py index b8abbb291..36fe2c7b4 100644 --- a/scripts/make_setup_parts.py +++ b/scripts/make_setup_parts.py @@ -25,6 +25,10 @@ SKIP_EXT = {".ps1", ".psm1", ".bat", ".cmd", ".js", ".vbs", ".html", ".htm", ".hta", ".wsf", ".pyc"} SKIP_DIRS = {"__pycache__"} TOOLS_PARTS = ("python", "emsdk", "cpm", "third_party", "wgpu-native") # (tools/: each its own part) +# (hookshot) parts a package may have or not: AMD's FSR runtime (tools/amd-fsr, scripts/release_parts.py package --amd-fsr), +# about 70 MB that changes only with AMD's SDK, so a part of its own the setup keeps in its cache. Without the folder it is +# taken from --reuse when that list has it, and left out otherwise (the game then runs FSR 3.1 and not FSR 4) +OPTIONAL_PARTS = ("amd-fsr",) LLVM = ("552191b5754c49a5a20723276a6fc56541ea1922c4c50b7b669022333fc1b40f", 191037046, "llvm-mingw-20261104-ucrt-x86_64", "https://github.com/mstorsjo/llvm-mingw/releases/download/20261104/llvm-mingw-20261104-ucrt-x86_64.zip") @@ -82,11 +86,11 @@ def main(): runtime_dirs = [n for n in top if os.path.isdir(os.path.join(root, n)) and n != "tools"] tools = sorted(os.listdir(os.path.join(root, "tools"))) parts = { - "app": builder_files + [n for t in tools if t not in TOOLS_PARTS and t != "llvm-mingw" + "app": builder_files + [n for t in tools if t not in TOOLS_PARTS + OPTIONAL_PARTS and t != "llvm-mingw" for n in (["tools/" + t] if os.path.isfile(os.path.join(root, "tools", t)) else files_under(root, "tools/" + t))], "dotnet": runtime_files + [n for d in runtime_dirs for n in files_under(root, d)], } - for t in TOOLS_PARTS: + for t in TOOLS_PARTS + OPTIONAL_PARTS: if os.path.isdir(os.path.join(root, "tools", t)): parts[t] = files_under(root, "tools/" + t) reuse = {} @@ -97,8 +101,13 @@ def main(): if len(w) == 7 and w[0] == "part" and w[6].rsplit("/", 1)[-1].startswith("HookshotBuilder-"): reuse[w[6].rsplit("/", 1)[-1][len("HookshotBuilder-"):].rsplit("-", 1)[0]] = line lines = ["tag %s" % a.tag] - for name in ("app", "dotnet") + TOOLS_PARTS: + for name in ("app", "dotnet") + TOOLS_PARTS + OPTIONAL_PARTS: if not parts.get(name): + if name in OPTIONAL_PARTS: + if name in reuse: + lines.append(reuse[name]) + print("%-12s (as in %s)" % (name, os.path.basename(a.reuse)), flush=True) + continue if a.reuse and name in TOOLS_PARTS: if name not in reuse: sys.exit("no tools/%s in the package and no %s part in %s" % (name, name, a.reuse)) diff --git a/scripts/release_parts.py b/scripts/release_parts.py index 266263eef..0c4fe4c79 100644 --- a/scripts/release_parts.py +++ b/scripts/release_parts.py @@ -195,6 +195,20 @@ def package(a): print("%d prebuilt third_party files from %s" % (n, os.path.basename(tp))) else: print("no setup list: the package has no play profile and no prebuilt third_party files") + # (hookshot) the renderer CI built with NVIDIA DLSS, DLSS 5 neural rendering and AMD FSR 4 in it, which nx2/make_game.py + # uses on the player's PC instead of compiling one without those (prebuilt_renderer), and AMD's FSR runtime beside it + if a.vk: + copy(a.vk, os.path.join(tools, "prebuilt", "hookshot_vk.dll")) + print("prebuilt renderer: %s" % a.vk) + if a.amd_fsr: + n = 0 + for f in sorted(os.listdir(a.amd_fsr)): + if f.lower().startswith("amd_fidelityfx_") and f.lower().endswith("_vk.dll"): + copy(os.path.join(a.amd_fsr, f), os.path.join(tools, "amd-fsr", f)) + n += 1 + if os.path.isfile(os.path.join(a.amd_fsr, "LICENSE.txt")): + copy(os.path.join(a.amd_fsr, "LICENSE.txt"), os.path.join(tools, "amd-fsr", "LICENSE.txt")) + print("AMD FSR runtime: %d DLLs from %s" % (n, a.amd_fsr)) print("package folder: %s" % out) return 0 @@ -217,6 +231,8 @@ def main(): s.add_argument("--publish", required=True) s.add_argument("--setup", required=True) s.add_argument("--list") + s.add_argument("--vk", help="(hookshot) a hookshot_vk.dll built by CI, into tools/prebuilt") + s.add_argument("--amd-fsr", help="(hookshot) a folder holding AMD's amd_fidelityfx_*_vk.dll, into tools/amd-fsr") a = p.parse_args() return {"previous": previous, "profile": profile, "llvm-mingw": llvm_mingw, "package": package}[a.cmd](a) From 2b58d305bdf1320e8a4a0337a67062c9b83dd040 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 15:21:16 -0600 Subject: [PATCH 089/119] docs(readme): the Upscaler's four, the frame generation chain, and NR on RTX 20-40 Co-Authored-By: Claude Opus 5.5 --- readme.md | 67 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 23 deletions(-) diff --git a/readme.md b/readme.md index 72605a87d..5521e8b9f 100644 --- a/readme.md +++ b/readme.md @@ -200,27 +200,33 @@ use and cause stalls when the card runs out of headroom. To undo it, remove that Press Insert (or F1) in game, or on a controller the Home button (or Select and Start together). -#### DLSS on an NVIDIA card +#### Upscaling and frame generation: what this fork adds -The menu offers **FSR 3.1** everywhere. **DLSS** -- in the Upscaling row, and behind Frame generation -where the card allows it -- is compiled into the released Windows and Linux builds: CI fetches -NVIDIA's NGX SDK at build time and nothing of NVIDIA's is committed here. A build you make by hand -without the SDK says so in the row rather than offering a setting that does nothing. +The Graphics tab's **Upscaler** row offers whatever can run on your PC: -The runtimes are still yours to supply, because they are NVIDIA's to ship and not ours. Put them -beside the game -- they come from NVIDIA's SDK (`github.com/NVIDIA/DLSS`, out of -`lib/Windows_x86_64/rel/` or `lib/Linux_x86_64/rel/`) or from the NVIDIA app's own downloads: - -| for | Windows | Linux | +| Upscaler | runs on | what you need | |---|---|---| -| Upscaling: DLSS | `nvngx_dlss.dll` | `libnvidia-ngx-dlss.so.*` | -| Frame generation with DLSS | `nvngx_dlssg.dll` | `libnvidia-ngx-dlssg.so.*` | - -Without the frame-generation runtime, Frame generation still works -- it uses FSR 3 where it can and -the renderer's own blend otherwise. You do not pick; the row says what it is using in the log. - -To build with the SDK yourself: put it in a folder named `dlss-sdk` beside the Hookshot folder, or -name it with `RX_VK_DLSS_SDK=`, and build as usual. +| Game's own | everything | nothing | +| NVIDIA DLSS, NVIDIA DLAA | NVIDIA RTX | `nvngx_dlss.dll` (Linux: `libnvidia-ngx-dlss.so.*`) in the game folder's `ngx` folder | +| AMD FSR 3.1 | any GPU, Windows and Linux | nothing: it is built from AMD's open shaders | +| AMD FSR 4 | Windows (and the Windows build under Proton) | AMD's runtime, which the Windows release puts beside the game | + +**FSR 4** goes through AMD's own runtime (`amd_fidelityfx_loader_vk.dll`, `amd_fidelityfx_upscaler_vk.dll`, +`amd_fidelityfx_framegeneration_vk.dll`, signed by AMD and MIT-licensed in AMD's FSR SDK 2.4). The runtime picks what your +card runs: FSR 4's machine-learning upscaler on an RX 9000 (and the cards AMD added in SDK 2.4), and the FSR 3.1 it +carries on others. The log's `vk: amd fsr 4:` lines say which one you got. To try another copy of AMD's DLLs, put them in +a folder and name it with `RX_VK_FFX_DIR`; `RX_VK_FFX=0` keeps them from being loaded at all. + +**Frame generation** takes the first of these that runs on your PC: NVIDIA DLSS frame generation (`nvngx_dlssg.dll` in +the `ngx` folder, RTX 40 and 50), AMD FSR 4's (Windows), AMD FSR 3.1's (any GPU), then the renderer's own blend. You do +not pick; the log says which one is drawing. + +**The Windows release carries the renderer CI built** (`tools\prebuilt\hookshot_vk.dll`), with DLSS, DLSS 5 neural +rendering and FSR 4 compiled in, and the Builder installs that one rather than compiling its own: your PC has none of +NVIDIA's SDKs, and a renderer compiled there would leave those out. `HOOKSHOT_VK_LOCAL=1` asks for the local compile +anyway. The Linux AppImage carries its renderer the same way, with DLSS in it. NVIDIA's runtimes are NVIDIA's to ship and +are never in a release: they come from NVIDIA's DLSS SDK (`github.com/NVIDIA/DLSS`, `lib/Windows_x86_64/rel/` or +`lib/Linux_x86_64/rel/`) or a game that ships them. #### DLSS 5 neural rendering @@ -231,9 +237,24 @@ and Frame generation are set to. Ten rows: the switch, Model, Style, Preset, Int Local structure, Global tone, Skin structure and Auto mask. All of them take effect on the next frame. -**Windows x64 and an RTX 50-series card.** Streamline ships as DLLs, so on Linux run the Windows -build under Proton. NVIDIA's shipped model looks to be Blackwell-only: an older RTX card will report -the feature unavailable, which is the honest answer and not a bug. +**Windows x64.** Streamline ships as DLLs, so on Linux run the Windows build under Proton. + +**RTX 50 with NVIDIA's own model; RTX 20, 30 and 40 with a patched one.** NVIDIA's `nvngx_dlssnr.dll` runs on RTX 50 +(Blackwell) only: on an older card NGX refuses it (`0xbad00001`) and the Neural tab says so. Community builds of the same +file recompile its model for Turing, Ampere and Ada -- [dlssnr-patcher](https://github.com/dev-camo/dlssnr-patcher) +patches your own copy, and [openNR](https://github.com/clshortfuse/openNR)'s 310.9.16 compatibility build (an FP16 one, +reported much faster on RTX 30 and 40) is reconstructed from it. Hookshot loads whichever `nvngx_dlssnr.dll` is there. +Two things to know: + +- A patched file has **no NVIDIA signature**, and NVIDIA's NGX loads an unsigned feature only with its signature override + on: the DWORD `EnableSignatureOverride` = `1` under `HKEY_LOCAL_MACHINE\SOFTWARE\NVIDIA Corporation\Global\NGXCore`. + Hookshot reads it, for the log, and never sets it: that is your choice to make. It applies to every program on the + PC, so turn it back off when you are done, and keep patched DLLs away from games with anti-cheat. +- It costs more on older cards: about 1.5 times an RTX 5070 Ti's GPU time on an RTX 4070 SUPER, by one report. + +When the feature is refused, the log's `vk: DLSS 5 neural rendering is not supported here` line names the GPU, whether +the `nvngx_dlssnr.dll` there is NVIDIA's or a patched one, and whether the override is set, and the line after it says +what is missing. These files go beside the game, or in a `streamline` folder beside it, or wherever `RX_VK_STREAMLINE_DIR` points. They are NVIDIA's to ship; Hookshot builds against Streamline's @@ -272,9 +293,9 @@ choices and starts the game again, so progress since your last save is lost. | | Frame pacing | Off, On | Off | | | NVIDIA Reflex | Off, On, On + Boost (NVIDIA GPUs with `VK_NV_low_latency2`) | Off | | | Output resolution | 1920x1080, 2048x1152, 2560x1440, 3840x2160 (after a restart) | 2048x1152 | -| | Upscaler | Game's own, NVIDIA DLSS, NVIDIA DLAA (only in builds with NVIDIA's DLSS SDK, below; DLSS and DLAA on RTX GPUs) | Game's own | +| | Upscaler | Game's own, NVIDIA DLSS, NVIDIA DLAA (builds with NVIDIA's DLSS SDK, on RTX GPUs), AMD FSR 3.1 (any GPU), AMD FSR 4 (Windows, with AMD's runtime) | Game's own | | | DLSS model | Transformer (K), Transformer 2 (M), Transformer 2 (L), NVIDIA default (builds with DLSS; used by DLSS and DLAA) | Transformer (K) | -| | Render resolution | Auto (the game's own dynamic resolution), 100%, 75%, 67%, 50% (each with its size). With DLSS: Auto, Quality (67%), Balanced (58%), Performance (50%), Ultra Performance (33%). With DLAA: Native | Auto | +| | Render resolution | Auto (the game's own dynamic resolution), 100%, 75%, 67%, 50% (each with its size). With DLSS, FSR 3.1 or FSR 4: Auto, Quality (67%), Balanced (58%), Performance (50%), Ultra Performance (33%). With DLAA: Native | Auto | | | Window scaling filter | Off, Catmull-Rom, Lanczos | Off | | | Sharpness | 0 to 100%, in steps of 10 | 0% | | | Handheld profile | Off, On (after a restart) | Off | From 47c1964b9c507ff0d53295d8204e9c012616586f Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 9 Nov 2026 21:47:16 +0000 Subject: [PATCH 090/119] chore(release): 2.7.0 [skip ci] [skip release] ## [2.7.0](https://github.com/notquiteog/Hookshot/compare/v2.6.4...v2.7.0) (2026-11-09) ### Features * microphone input for the ocarina's input streams ([8a17b8c](https://github.com/notquiteog/Hookshot/commit/8a17b8c7fb2498460cdecb77248de6f341ee084a)) * microphone input on SDL2 too (the Linux AppImage's) ([eadc184](https://github.com/notquiteog/Hookshot/commit/eadc1841b6e37b4e9d51d11b786397d89aa4dc18)) * **vk:** AMD FSR 4 upscaling and frame generation through AMD's runtime ([65003cc](https://github.com/notquiteog/Hookshot/commit/65003cc7dcdb4055df7c27c3b23cc02beafb2d02)) * **vk:** say why DLSS 5 neural rendering is refused, and the RTX 20-40 route ([60f1d2e](https://github.com/notquiteog/Hookshot/commit/60f1d2ed955eada364be971ffd8ee7890c60f8fd)) ### Bug Fixes * **audio:** 5.1 surround when the default output has it ([#1124](https://github.com/notquiteog/Hookshot/issues/1124)) ([b0abeca](https://github.com/notquiteog/Hookshot/commit/b0abeca7393ebc37503915b0f42d6c500fd75715)) * **audio:** a finished wave buffer reaches the game at the renderer update, not mid-pass ([28e4a11](https://github.com/notquiteog/Hookshot/commit/28e4a117ed07d269154e85bf36d1f673194b8c60)) * **builder:** stop when generated source cleanup fails ([d254e6f](https://github.com/notquiteog/Hookshot/commit/d254e6fbe1e93933cc8fe8878c95ead5d8385b4c)) * contain pipeline cache save allocation failures ([4518a20](https://github.com/notquiteog/Hookshot/commit/4518a20aabf455f437c3a08c60a1e82e0e075939)), closes [#1022](https://github.com/notquiteog/Hookshot/issues/1022) * **lift:** clear an earlier lift's hot pieces before the patches; count every made and raw output-size place ([816a472](https://github.com/notquiteog/Hookshot/commit/816a4728ca4f330183af6fefebefcf67a7c4625e)), closes [#912](https://github.com/notquiteog/Hookshot/issues/912) * **lift:** edit_c in chunks.py, so its tests import without the lift's tools ([1c5258f](https://github.com/notquiteog/Hookshot/commit/1c5258f5d82c07edb673c6f47d041e958d68bb1c)) * **lift:** group page marks after the patches; a missing output-size edit stops the lift ([3fa6300](https://github.com/notquiteog/Hookshot/commit/3fa63001afe0e4fafac6a1efc5980f2a35b4f32f)) * microphone names past 60 bytes, unplugs that keep sending ([#937](https://github.com/notquiteog/Hookshot/issues/937), third review) ([e77bd79](https://github.com/notquiteog/Hookshot/commit/e77bd79f99983c793f20f552fd54626505be9128)) * of two microphones with one name, the one chosen opens ([602d96e](https://github.com/notquiteog/Hookshot/commit/602d96e7a9be9fe3e69d19d35f357e0d21fe2710)) * preserve NUP member names during implicit reads ([1fdfeff](https://github.com/notquiteog/Hookshot/commit/1fdfeff694aa61fdfabb9fc32e0d2e9efdb9cb02)) * **release:** the Windows release installs the renderer CI built, with DLSS, NR and FSR 4 ([0fa18bd](https://github.com/notquiteog/Hookshot/commit/0fa18bd32126177b58a9e8f8a44158869cb90f36)) * the microphone retry path ([#937](https://github.com/notquiteog/Hookshot/issues/937), second review) ([50f2392](https://github.com/notquiteog/Hookshot/commit/50f2392654fb7d55181be3a89d0775d70ee51acd)) * the microphone review's points ([#937](https://github.com/notquiteog/Hookshot/issues/937)) ([27a9b7d](https://github.com/notquiteog/Hookshot/commit/27a9b7dd3c8482d36b3ad508e0f0834ef66fd0d7)) * **vk:** a draw that waits for its pipeline runs the build at once if it is still queued ([aafbaf5](https://github.com/notquiteog/Hookshot/commit/aafbaf5d2826c69ac21c7ac3046ec94a3b7aac3c)) * **vk:** keep the last sRGB UNORM surface format, so drivers that list only sRGB keep theirs ([3408437](https://github.com/notquiteog/Hookshot/commit/340843706abdb7fbb1ba3a6fe3c61e1ff845381c)) * **vk:** Linux/Wayland: take an sRGB surface format for the swapchain ([7416487](https://github.com/notquiteog/Hookshot/commit/7416487e3b1ed7af5c65f8326ae3f66c8e1971ef)) * **vk:** no mirror is made inside a parallel replay's segment (an earlier segment read it unfilled) ([8f0ed68](https://github.com/notquiteog/Hookshot/commit/8f0ed6818d5ccaa768d9d0a09551b7894e2d78af)) * **vulkan:** preserve guest mip levels in partial clears ([d7a1207](https://github.com/notquiteog/Hookshot/commit/d7a1207b94f3d02415f8a8969618d12d3f76a3da)) * **vulkan:** release modules from rejected cache records ([2838e89](https://github.com/notquiteog/Hookshot/commit/2838e89c15964afa1f9396d0c23417b36b93bae5)) * **widescreen:** the save picture shows the middle 16:9 on ultrawide ([#952](https://github.com/notquiteog/Hookshot/issues/952)) ([e2e155e](https://github.com/notquiteog/Hookshot/commit/e2e155ee75cec98f808931b7dd9a851ad0ba7830)) ### Performance Improvements * **fpx:** keep the hardware result for FMUL/FMLA S when the flags are already set ([6de3bf1](https://github.com/notquiteog/Hookshot/commit/6de3bf1c614e2ae9ee2187b78a732280c53966a8)) * **lift:** one page mark per straight-line group of stores through a base register ([825861b](https://github.com/notquiteog/Hookshot/commit/825861b7f2c92425c33ee74b7ba2a846e9f9e389)) * stream sampled profiles instead of loading every line ([8cf6d1e](https://github.com/notquiteog/Hookshot/commit/8cf6d1e60602505145a87eac9c14c3d5742d0937)) --- changelog.txt | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/changelog.txt b/changelog.txt index ddba875f3..06bf1cc23 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,37 @@ --------------------------------------------------------------------------------------------------- +Version: 2.7.0 +Date: 09. 11. 2026 + Features: + - Vk: Say why DLSS 5 neural rendering is refused, and the RTX 20-40 route. + - Vk: AMD FSR 4 upscaling and frame generation through AMD's runtime. + - Microphone input on SDL2 too (the Linux AppImage's). + - Microphone input for the ocarina's input streams. + Bugfixes: + - Release: The Windows release installs the renderer CI built, with DLSS, NR and FSR 4. + - Lift: Edit_c in chunks.py, so its tests import without the lift's tools. + - Lift: Clear an earlier lift's hot pieces before the patches; count every made and raw output-size place. + - Lift: Group page marks after the patches; a missing output-size edit stops the lift. + - Builder: Stop when generated source cleanup fails. + - Microphone names past 60 bytes, unplugs that keep sending (#937, third review). + - Audio: A finished wave buffer reaches the game at the renderer update, not mid-pass. + - Audio: 5.1 surround when the default output has it (#1124). + - Widescreen: The save picture shows the middle 16:9 on ultrawide (#952). + - Preserve NUP member names during implicit reads. + - Vk: No mirror is made inside a parallel replay's segment (an earlier segment read it unfilled). + - Vk: A draw that waits for its pipeline runs the build at once if it is still queued. + - Vk: Keep the last sRGB UNORM surface format, so drivers that list only sRGB keep theirs. + - Vk: Linux/Wayland: take an sRGB surface format for the swapchain. + - Vulkan: Release modules from rejected cache records. + - Vulkan: Preserve guest mip levels in partial clears. + - The microphone retry path (#937, second review). + - Of two microphones with one name, the one chosen opens. + - Contain pipeline cache save allocation failures. + - The microphone review's points (#937). + Optimizations: + - Stream sampled profiles instead of loading every line. + - Lift: One page mark per straight-line group of stores through a base register. + - Fpx: Keep the hardware result for FMUL/FMLA S when the flags are already set. +--------------------------------------------------------------------------------------------------- Version: 2.6.4 Date: 09. 11. 2026 Bugfixes: From 6e0074397dadf84649214524fc0e0f0a721c4742 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 16:18:40 -0600 Subject: [PATCH 091/119] build(vk): vendor OpenDLSS-NR's host, kernels and PTX generators maanHimself/OpenDLSS-NR at 9d08f41 (MIT): src/, shaders/ and scripts/ptx/ unmodified, with LICENSE, NOTICE and a PROVENANCE.md that says what each folder is, what was left out, and that nothing here holds or produces model weights. Co-Authored-By: Claude Opus 5.5 --- third_party/opendlss-nr/LICENSE | 21 + third_party/opendlss-nr/NOTICE | 18 + third_party/opendlss-nr/PROVENANCE.md | 38 + .../opendlss-nr/scripts/ptx/block32_e4m3.py | 480 ++++++++ .../opendlss-nr/scripts/ptx/ffn_e4m3.py | 348 ++++++ .../opendlss-nr/scripts/ptx/gemm2_e4m3.py | 294 +++++ .../opendlss-nr/scripts/ptx/gemmt_e4m3.py | 210 ++++ .../opendlss-nr/scripts/ptx/gemmv_e4m3.py | 332 ++++++ .../scripts/ptx/global_attention_e4m3.py | 184 +++ .../ptx/global_attention_stream_e4m3.py | 240 ++++ .../opendlss-nr/scripts/ptx/mlp_e4m3.py | 260 +++++ third_party/opendlss-nr/scripts/ptx/ptxgen.py | 133 +++ .../opendlss-nr/scripts/ptx/qkv_e4m3.py | 276 +++++ .../opendlss-nr/scripts/ptx/reduce_e4m3.py | 59 + third_party/opendlss-nr/scripts/ptx/swin.py | 468 ++++++++ .../scripts/ptx/test_fast_divmod.py | 70 ++ .../opendlss-nr/shaders/attention_common.glsl | 206 ++++ third_party/opendlss-nr/shaders/common.glsl | 134 +++ .../opendlss-nr/shaders/fused_block32.comp | 587 ++++++++++ third_party/opendlss-nr/shaders/gemm_f16.comp | 72 ++ third_party/opendlss-nr/shaders/gemm_fp8.comp | 353 ++++++ third_party/opendlss-nr/shaders/gemm_mlp.comp | 162 +++ .../opendlss-nr/shaders/gemm_reduce.comp | 57 + .../opendlss-nr/shaders/global_attend.comp | 124 ++ .../opendlss-nr/shaders/global_attention.comp | 273 +++++ .../opendlss-nr/shaders/global_normalize.comp | 73 ++ third_party/opendlss-nr/shaders/ops.comp | 133 +++ .../opendlss-nr/shaders/preprocess.comp | 89 ++ third_party/opendlss-nr/shaders/publish.glsl | 49 + .../opendlss-nr/shaders/qkv_attention.comp | 245 ++++ .../opendlss-nr/shaders/window_attend.comp | 170 +++ .../opendlss-nr/shaders/window_normalize.comp | 73 ++ third_party/opendlss-nr/src/json.h | 133 +++ third_party/opendlss-nr/src/kernels.cpp | 1030 +++++++++++++++++ third_party/opendlss-nr/src/kernels.h | 288 +++++ third_party/opendlss-nr/src/main.cpp | 759 ++++++++++++ third_party/opendlss-nr/src/nr_graph.cpp | 1006 ++++++++++++++++ third_party/opendlss-nr/src/nr_graph.h | 140 +++ third_party/opendlss-nr/src/nr_model.cpp | 234 ++++ third_party/opendlss-nr/src/nr_model.h | 85 ++ third_party/opendlss-nr/src/numeric.h | 104 ++ third_party/opendlss-nr/src/reference.cpp | 295 +++++ third_party/opendlss-nr/src/reference.h | 49 + third_party/opendlss-nr/src/sha256.h | 56 + third_party/opendlss-nr/src/verify.cpp | 267 +++++ third_party/opendlss-nr/src/vk_context.cpp | 631 ++++++++++ third_party/opendlss-nr/src/vk_context.h | 176 +++ 47 files changed, 11484 insertions(+) create mode 100644 third_party/opendlss-nr/LICENSE create mode 100644 third_party/opendlss-nr/NOTICE create mode 100644 third_party/opendlss-nr/PROVENANCE.md create mode 100644 third_party/opendlss-nr/scripts/ptx/block32_e4m3.py create mode 100644 third_party/opendlss-nr/scripts/ptx/ffn_e4m3.py create mode 100644 third_party/opendlss-nr/scripts/ptx/gemm2_e4m3.py create mode 100644 third_party/opendlss-nr/scripts/ptx/gemmt_e4m3.py create mode 100644 third_party/opendlss-nr/scripts/ptx/gemmv_e4m3.py create mode 100644 third_party/opendlss-nr/scripts/ptx/global_attention_e4m3.py create mode 100644 third_party/opendlss-nr/scripts/ptx/global_attention_stream_e4m3.py create mode 100644 third_party/opendlss-nr/scripts/ptx/mlp_e4m3.py create mode 100644 third_party/opendlss-nr/scripts/ptx/ptxgen.py create mode 100644 third_party/opendlss-nr/scripts/ptx/qkv_e4m3.py create mode 100644 third_party/opendlss-nr/scripts/ptx/reduce_e4m3.py create mode 100644 third_party/opendlss-nr/scripts/ptx/swin.py create mode 100644 third_party/opendlss-nr/scripts/ptx/test_fast_divmod.py create mode 100644 third_party/opendlss-nr/shaders/attention_common.glsl create mode 100644 third_party/opendlss-nr/shaders/common.glsl create mode 100644 third_party/opendlss-nr/shaders/fused_block32.comp create mode 100644 third_party/opendlss-nr/shaders/gemm_f16.comp create mode 100644 third_party/opendlss-nr/shaders/gemm_fp8.comp create mode 100644 third_party/opendlss-nr/shaders/gemm_mlp.comp create mode 100644 third_party/opendlss-nr/shaders/gemm_reduce.comp create mode 100644 third_party/opendlss-nr/shaders/global_attend.comp create mode 100644 third_party/opendlss-nr/shaders/global_attention.comp create mode 100644 third_party/opendlss-nr/shaders/global_normalize.comp create mode 100644 third_party/opendlss-nr/shaders/ops.comp create mode 100644 third_party/opendlss-nr/shaders/preprocess.comp create mode 100644 third_party/opendlss-nr/shaders/publish.glsl create mode 100644 third_party/opendlss-nr/shaders/qkv_attention.comp create mode 100644 third_party/opendlss-nr/shaders/window_attend.comp create mode 100644 third_party/opendlss-nr/shaders/window_normalize.comp create mode 100644 third_party/opendlss-nr/src/json.h create mode 100644 third_party/opendlss-nr/src/kernels.cpp create mode 100644 third_party/opendlss-nr/src/kernels.h create mode 100644 third_party/opendlss-nr/src/main.cpp create mode 100644 third_party/opendlss-nr/src/nr_graph.cpp create mode 100644 third_party/opendlss-nr/src/nr_graph.h create mode 100644 third_party/opendlss-nr/src/nr_model.cpp create mode 100644 third_party/opendlss-nr/src/nr_model.h create mode 100644 third_party/opendlss-nr/src/numeric.h create mode 100644 third_party/opendlss-nr/src/reference.cpp create mode 100644 third_party/opendlss-nr/src/reference.h create mode 100644 third_party/opendlss-nr/src/sha256.h create mode 100644 third_party/opendlss-nr/src/verify.cpp create mode 100644 third_party/opendlss-nr/src/vk_context.cpp create mode 100644 third_party/opendlss-nr/src/vk_context.h diff --git a/third_party/opendlss-nr/LICENSE b/third_party/opendlss-nr/LICENSE new file mode 100644 index 000000000..c073706cd --- /dev/null +++ b/third_party/opendlss-nr/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 maan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/third_party/opendlss-nr/NOTICE b/third_party/opendlss-nr/NOTICE new file mode 100644 index 000000000..e66661a8a --- /dev/null +++ b/third_party/opendlss-nr/NOTICE @@ -0,0 +1,18 @@ +This repository is licensed under the MIT License (see LICENSE). It is not affiliated with, endorsed by, or +supported by NVIDIA Corporation. "DLSS" is a trademark of NVIDIA Corporation; it is used here only to describe +what the network implemented by this code is compatible with. No NVIDIA software, weights, headers or +documentation are included, and no rights under any NVIDIA intellectual property are granted. + +Third-party components used by the build (downloaded or cloned by the scripts, not redistributed here): + +- Filament by Google (Apache-2.0), including the third-party libraries its build brings in (SDL2 (zlib), + Dear ImGui (MIT), stb (MIT / public domain), Draco, meshoptimizer, Basis Universal, zstd, Abseil and others, + see its third_party/ directory): the demo renderer. third_party/filament.patch is a modification of Filament's + sources and is offered under the same Apache-2.0 license; demo/native_window_cocoa.mm follows Filament's + sample framework. +- volk (MIT), Vulkan-Headers (Apache-2.0 / MIT), glslang (BSD-3-Clause and others), CMake (BSD-3-Clause), + Ninja (Apache-2.0): the toolchain under tools/. +- meshoptimizer (MIT), @gltf-transform (MIT), draco3dgltf (Apache-2.0), Pillow (HPND): the optional scene + conversion scripts. +- No scene assets are included. The "Lone Monk" scene (Carlo Bergonzini, CC BY) is referenced by a camera view + file only. diff --git a/third_party/opendlss-nr/PROVENANCE.md b/third_party/opendlss-nr/PROVENANCE.md new file mode 100644 index 000000000..ac549b609 --- /dev/null +++ b/third_party/opendlss-nr/PROVENANCE.md @@ -0,0 +1,38 @@ +# OpenDLSS-NR + +A Vulkan reimplementation of the DLSS 5 neural rendering network (build 310.8.0), used by the open +neural rendering backend (`gpu/vk/vk_opennr.cpp`). Unmodified upstream copy of the parts the renderer +builds. + +- Upstream: https://github.com/maanHimself/OpenDLSS-NR +- Commit: `9d08f4184bbcb9d858e2fb7a7834ec0837a9d2f1` (2026-09-21, "chore: fix network description") +- License: MIT, in `LICENSE`; third-party notes in `NOTICE`. Keep both with any distribution. + +What is here and why: + +| | | +|---|---| +| `src/` | The host side, C++20: the Vulkan compute context (`vk_context.*`), the model directory loader and weight re-layout (`nr_model.*`), the kernel wrappers (`kernels.*`), the 71-block network graph (`nr_graph.*`), the CPU reference of the arithmetic (`reference.*`, `numeric.h`), and the upstream `dlss5vk` tool (`main.cpp`, `verify.cpp`), which the renderer does not link and the correctness harness does (`scripts/opennr_harness.py`) | +| `shaders/` | The GLSL kernels: the reference route on its own, and the GLSL half of the default route | +| `scripts/ptx/` | The Python generators of the PTX kernels (the fast route, launched through `VK_NV_cuda_kernel_launch`). Standard library only, except `test_fast_divmod.py`, which upstream runs with numpy | +| `LICENSE`, `NOTICE` | Upstream's MIT notice and its third-party note | + +Not copied: upstream's `demo/` (a Filament renderer), `ports/` (the WebGPU port), `docs/` (read them +upstream: `network.md`, `numerics.md`, `weights.md`, `execution.md`, `frame.md`), and its Windows build +scripts. Upstream builds with MSVC and PowerShell; here the same sources are compiled with Hookshot's +clang: + +- the SPIR-V of `shaders/*.comp` is checked in as `gpu/vk/shaders/opennr_kernels_spv.h`, made and + checked by `scripts/opennr_kernels.py` (`tests/test_opennr_kernels.py`), with the glslang flags of + upstream's `scripts/build_shaders.ps1`; +- the PTX is generated by `nx2/build.py` at build time, from the same generator calls as + `build_shaders.ps1` (the list is in `scripts/opennr_kernels.py`); +- `#include ` resolves to `gpu/vk/opennr/volk.h`, a shim over Hookshot's own Vulkan loader + (or, in the harness, over `libvulkan.so.1`), since upstream links volk. + +**No weights are here and nothing here produces them.** The network reads a model directory +(`manifest.json` and its stage files, upstream's `docs/weights.md`) that the player supplies. Nothing in +Hookshot extracts, converts or downloads model data, and nothing is taken from any NVIDIA binary. + +Nothing in this folder is edited. A change belongs in `gpu/vk/opennr/` (the adapter) or a new folder +with its own note, per `CONTRIBUTING.md`. diff --git a/third_party/opendlss-nr/scripts/ptx/block32_e4m3.py b/third_party/opendlss-nr/scripts/ptx/block32_e4m3.py new file mode 100644 index 000000000..75d34e8b8 --- /dev/null +++ b/third_party/opendlss-nr/scripts/ptx/block32_e4m3.py @@ -0,0 +1,480 @@ +"""Fused 32-channel Swin block (blocks 0-4, 66-70) in PTX: the fused_block32.comp dataflow at the fragment level. + +One workgroup = 4 warps = one 8x8 window (warp w: tokens 16w .. 16w+15 = window rows 2w, 2w+1), persistent over +windows. Per warp everything is a 16-row fragment: FFN (x W1 -> SiLU -> E4 -> W2 + skip * ffnScale, in four k32 +quarters with W1's columns permuted so the hidden C fragment packs straight into the W2 A fragment), q/k/v +projections, cosine normalization, K rows / transposed V into shared memory (physical token order), S = Q K^T + +prior, the specified softmax, P V, projection + ffn * attnScale, E4 output. Every arithmetic step is that of the +GLSL kernel (same instructions on the same fragment elements); only the data movement differs. + +Variants (flags): PRE (block 0: f32 features x f16 adapter in the input path), POST (block 70: learned post +blend of block-0 E4 and the 2x upsampled half-res E4), UPRES (block 66: f16 low-res projection + E4 skip * +scale), HEAD (RGBA head from the f16 result), POOL (2x2 box pool of the f16 result to E4), OUT_E4. + +python block32_e4m3.py out.ptx flags: sum of E4=2 PRE=8 POST=16 HEAD=32 POOL=64 UPRES=128 +""" +import sys +from ptxgen import Ptx +from swin import * + +F_OUT_E4, F_PRE, F_POST, F_HEAD, F_POOL, F_UPRES = 2, 8, 16, 32, 64, 128 + +# shared memory map (bytes) +W1S, W2S, WQKVS, WPROJS = 0, 4096, 8192, 11264 +KROWS, VTS = 12288, 15360 # K [64 physical][48 B]; Vt [32 dim][80 B] +STG = 17920 # per warp 1280 B: f16 tile [16][80 B]; the E4 tile [16][32 B] aliases its start +STG_WARP = 1280 +WF16S = STG + 4 * STG_WARP # adapter [32 n][16 k] f16 / head [16 n][32 k] f16 (1 KB) +SHARED_BYTES = WF16S + 1024 +THREADS = 128 +A2A_SMEM = 0 # accumulator -> A fragment through the per-warp staging tile (else shuffles) + + +def generate(flags, max_regs=None): + pre, post, upres = bool(flags & F_PRE), bool(flags & F_POST), bool(flags & F_UPRES) + head, pool, outE4 = bool(flags & F_HEAD), bool(flags & F_POOL), bool(flags & F_OUT_E4) + assert pre + post + upres <= 1 + name = f"block32_e4m3_f{flags}" + p = Ptx() + params = [("u64", "pState"), ("u64", "pLow"), ("u64", "pW1"), ("u64", "pW2"), ("u64", "pWqkv"), ("u64", "pWproj"), + ("u64", "pAux"), ("u64", "pPrior"), ("u64", "pOutE4"), ("u64", "pOut2"), ("u64", "pWf16"), + ("u32", "width"), ("u32", "height"), ("u32", "shiftX"), ("u32", "shiftY"), ("u32", "windowsX"), + ("u32", "windowCount"), ("u32", "auxFfnHalf"), ("u32", "auxAttnHalf"), ("u32", "scaleWord"), + ("u32", "auxInputHalf"), ("u32", "auxAdapterHalf"), ("u32", "lowWidth"), + ("u64", "pWait"), ("u32", "waitExpected"), ("u32", "waitShiftY"), ("u32", "waitScale"), ("u64", "pSignal"), ("u64", "pError")] + # chaining (pWait / pSignal = 0: off): wait on the producer block's window rows covering this window's pixel rows + # (waitScale 0: same resolution, 1: producer at 2x (pool), 2: producer at half (upres / post)), signal this block's + p.entry(name, params, SHARED_BYTES, THREADS, max_regs) + P = {n: (p.load_param_u64(n) if t == "u64" else p.load_param_u32(n)) for t, n in params} + tid = p.special("tid.x"); ctaid = p.special("ctaid.x"); nctaid = p.special("nctaid.x") + lane = p.and32(tid, 31); warp = p.shr32(tid, 5) + li = LaneInfo(p, lane) + g, t = li.g, li.t + smem = p.shared_addr(p.imm32(0)) + zero = imm(p, 0) + silu_k = SiluConsts(p) + exp_k = ExpConsts(p) + + # ---- stage the block weights once: [rows][32 B] tiles, chunk ^= (row >> 2) & 1 + def stage_e4_rows(src, dstBase, chunks): + for i in range((chunks + THREADS - 1) // THREADS): + c = p.add32(tid, i * THREADS) + pv = p.setp("lt.u32", c, chunks) if chunks % THREADS else None + row = p.shr32(c, 1); chunk = p.and32(c, 1) + pch = p.xor32(chunk, p.and32(p.shr32(row, 2), 1)) + dst = p.add32(p.add32(smem, dstBase), p.add32(p.shl32(row, 5), p.shl32(pch, 4))) + gaddr = p.add64(src, p.widen(p.shl32(c, 4))) + r = p.regs("b32", 4) + pred = f"@{pv} " if pv else "" + p.emit(f"{pred}ld.global.nc.v4.b32 {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}}, [{gaddr}];") + p.emit(f"{pred}st.shared.v4.b32 [{dst}], {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}};") + stage_e4_rows(P["pW1"], W1S, 256) + stage_e4_rows(P["pW2"], W2S, 256) + stage_e4_rows(P["pWqkv"], WQKVS, 192) + stage_e4_rows(P["pWproj"], WPROJS, 64) + if pre: + # adapter f16 [16 k][32 n] (global) -> shared [32 n][16 k] with the 32-byte-row chunk swizzle + n = p.shr32(tid, 2); kq = p.and32(tid, 3) + hs = [] + for i in range(4): + k = p.add32(p.shl32(kq, 2), i) + addr = p.add64(P["pWf16"], p.widen(p.shl32(p.add32(p.shl32(k, 5), n), 1))) + h = p.reg("b16"); p.emit(f"ld.global.nc.b16 {h}, [{addr}];"); hs.append(h) + w0 = p.reg("b32"); p.emit(f"mov.b32 {w0}, {{{hs[0]}, {hs[1]}}};") + w1 = p.reg("b32"); p.emit(f"mov.b32 {w1}, {{{hs[2]}, {hs[3]}}};") + pch = p.xor32(p.shr32(kq, 1), p.and32(p.shr32(n, 2), 1)) + dst = p.add32(p.add32(smem, WF16S), p.add32(p.shl32(n, 5), p.add32(p.shl32(pch, 4), p.shl32(p.and32(kq, 1), 3)))) + p.emit(f"st.shared.v2.b32 [{dst}], {{{w0}, {w1}}};") + if head: + # head f16 [32 k][16 n] (global, padded N = 16) -> shared [16 n][32 k] (64-byte rows) + n = p.shr32(tid, 3); kq = p.and32(tid, 7) + hs = [] + for i in range(4): + k = p.add32(p.shl32(kq, 2), i) + addr = p.add64(P["pWf16"], p.widen(p.shl32(p.add32(p.shl32(k, 4), n), 1))) + h = p.reg("b16"); p.emit(f"ld.global.nc.b16 {h}, [{addr}];"); hs.append(h) + w0 = p.reg("b32"); p.emit(f"mov.b32 {w0}, {{{hs[0]}, {hs[1]}}};") + w1 = p.reg("b32"); p.emit(f"mov.b32 {w1}, {{{hs[2]}, {hs[3]}}};") + dst = p.add32(p.add32(smem, WF16S), p.add32(p.shl32(n, 6), p.shl32(kq, 3))) + p.emit(f"st.shared.v2.b32 [{dst}], {{{w0}, {w1}}};") + + # ---- per-lane constants + # skip scale pairs: accumulator tile j of either row half holds columns 8j + 2t, +1 + auxBase = P["pAux"] + def aux_pairs(halfOffsetReg): + regs = [] + for j in range(4): + off = p.add32(p.shl32(halfOffsetReg, 1), p.add32(p.shl32(t, 2), p.imm32(16 * j))) + addr = p.add64(auxBase, p.widen(off)) + r = p.reg("b32"); p.emit(f"ld.global.nc.b32 {r}, [{addr}];"); regs.append(r) + return regs + auxFfn = aux_pairs(P["auxFfnHalf"]) + auxAttn = aux_pairs(P["auxAttnHalf"]) + scaleAddr = p.add64(auxBase, p.widen(p.shl32(P["scaleWord"], 2))) + scaleF = p.reg("f32"); p.emit(f"ld.global.nc.f32 {scaleF}, [{scaleAddr}];") + scaleH = p.reg("f16"); p.emit(f"cvt.rn.f16.f32 {scaleH}, {scaleF};") + scale2 = pack16(p, scaleH, scaleH) + # load lane: row = lane >> 1 of this warp's 16 tokens, part = lane & 1 (16 bytes of the E4 row) + ldRow = p.shr32(lane, 1); ldPart = p.and32(lane, 1) + ldTokX = p.and32(ldRow, 7); ldTokY = p.add32(p.shl32(warp, 1), p.shr32(lane, 4)) + ldSw = p.and32(p.shr32(ldRow, 2), 1) + stgWarp = p.add32(p.add32(smem, STG), p.mul32(warp, STG_WARP)) + stgLdE4 = p.add32(stgWarp, p.add32(p.shl32(ldRow, 5), p.shl32(p.xor32(ldPart, ldSw), 4))) # this lane's 16-byte E4 chunk + stgLdF16 = p.add32(stgWarp, p.add32(p.mul32(ldRow, 80), p.shl32(ldPart, 5))) # this lane's 32-byte f16 chunk + # ldmatrix lane addressing for [16 rows][32 B] tiles (A) and [n rows][32 B] tiles (B), both swizzled + l8 = p.and32(lane, 7); lm = p.shr32(lane, 3) + aRowL = p.add32(l8, p.shl32(p.and32(lm, 1), 3)); aChunkL = p.shr32(lane, 4) + aPch = p.xor32(aChunkL, p.and32(p.shr32(aRowL, 2), 1)) + aLaneOff = p.add32(p.shl32(aRowL, 5), p.shl32(aPch, 4)) + stgA = p.add32(stgWarp, aLaneOff) + bNL = p.add32(l8, p.shl32(p.shr32(lane, 4), 3)); bChunkL = p.and32(lm, 1) + bPch = p.xor32(bChunkL, p.and32(p.shr32(bNL, 2), 1)) + bLaneOff = p.add32(p.shl32(bNL, 5), p.shl32(bPch, 4)) + w1B = p.add32(p.add32(smem, W1S), bLaneOff) + w2B = p.add32(p.add32(smem, W2S), bLaneOff) + wqkvB = p.add32(p.add32(smem, WQKVS), bLaneOff) + wprojB = p.add32(p.add32(smem, WPROJS), bLaneOff) + wf16B = p.add32(p.add32(smem, WF16S), bLaneOff) + # C-layout b16 loads from the E4 staging tile: row g (+8), byte column 8j + 2t -> chunk j >> 1 (swizzled), +8 (j & 1) + sw_g = p.and32(p.shr32(g, 2), 1) + cBase = [p.add32(stgWarp, p.add32(p.shl32(g, 5), p.add32(p.shl32(p.xor32(p.imm32(c), sw_g), 4), p.shl32(t, 1)))) for c in range(2)] + # C-layout b32 loads from the f16 staging tile: row g (+8) at 80 B, word 4j + t + cBaseF16 = p.add32(stgWarp, p.add32(p.mul32(g, 80), p.shl32(t, 2))) + # K rows / Vt publication: this lane's tokens g and g + 8 -> physical indices + phys = [tiled_token_regs(p, p.add32(p.shl32(warp, 4), p.add32(g, p.imm32(8 * h)))) for h in range(2)] + kPub = [p.add32(p.add32(smem, KROWS), p.add32(p.mul32(phys[h], 48), p.shl32(t, 1))) for h in range(2)] + vPub = [p.add32(p.add32(smem, VTS), p.add32(p.mul32(t, 160), phys[h])) for h in range(2)] + # ldmatrix addressing for K [64][48 B] (n = key rows) and Vt [32][80 B] (n = dim rows) + kLane = p.add32(p.add32(smem, KROWS), p.add32(p.mul32(bNL, 48), p.shl32(bChunkL, 4))) + vLane = p.add32(p.add32(smem, VTS), p.add32(p.mul32(bNL, 80), p.shl32(bChunkL, 4))) + # prior rows for queries 16 warp + g (+8): [64][64] f16, keys 8m + 2t + priorLane = p.add64(P["pPrior"], p.widen(p.add32(p.shl32(p.add32(p.shl32(warp, 4), g), 7), p.shl32(t, 2)))) + quarter2 = imm(p, "0x34003400") # 0.25, 0.25 + if post or upres: + blendA = []; blendB = [] + for i in range(8): + c = p.add32(p.shl32(ldPart, 4), p.imm32(2 * i)) + a = p.add64(auxBase, p.widen(p.shl32(p.add32(P["auxInputHalf"], c), 1))) + r = p.reg("b32"); p.emit(f"ld.global.nc.b32 {r}, [{a}];"); blendA.append(r) + if post: + b = p.add64(auxBase, p.widen(p.shl32(p.add32(P["auxAdapterHalf"], c), 1))) + r = p.reg("b32"); p.emit(f"ld.global.nc.b32 {r}, [{b}];"); blendB.append(r) + # the attention prior rows of this warp's 16 queries never change: 16 registers for the whole kernel + priorRegs = [] + for m in range(8): + c0 = p.reg("b32"); p.emit(f"ld.global.nc.b32 {c0}, [{priorLane}+{16 * m}];") + c1 = p.reg("b32"); p.emit(f"ld.global.nc.b32 {c1}, [{priorLane}+{1024 + 16 * m}];") + priorRegs.append([c0, c1]) + p.emit("bar.sync 0;") # weights staged + + # ================= persistent window loop (the next window's input words are prefetched into registers) + def geometry(windowReg): + wx = p.reg("b32"); p.emit(f"rem.u32 {wx}, {windowReg}, {P['windowsX']};") + wy = p.reg("b32"); p.emit(f"div.u32 {wy}, {windowReg}, {P['windowsX']};") + gm = {} + gm["windowX"] = p.sub32(p.shl32(wx, 3), P["shiftX"]); gm["windowY"] = p.sub32(p.shl32(wy, 3), P["shiftY"]) + gm["x"] = p.add32(gm["windowX"], ldTokX); gm["y"] = p.add32(gm["windowY"], ldTokY) + pvx = p.setp("lt.u32", gm["x"], P["width"]); pvy = p.setp("lt.u32", gm["y"], P["height"]) + gm["valid"] = p.reg("pred"); p.emit(f"and.pred {gm['valid']}, {pvx}, {pvy};") + gm["pixel"] = p.mad32(gm["y"], P["width"], gm["x"]) + if post or upres: gm["lowPixel"] = p.mad32(p.shr32(gm["y"], 1), P["lowWidth"], p.shr32(gm["x"], 1)) + gm["wy"] = wy + # producer window rows: this window's pixel rows [max(8 wy - shiftY, 0), min(+7, height - 1)] mapped to the + # producer's resolution (x2 / x0.5), then (y + producer shiftY) >> 3 + yTop = gm["windowY"] + pNeg = p.setp("gt.s32", p.imm32(0), yTop) + y0 = p.selp32(pNeg, p.imm32(0), yTop) + y1 = p.add32(yTop, 7) + hm1 = p.sub32(P["height"], 1) + pBig = p.setp("gt.u32", y1, hm1) + y1 = p.selp32(pBig, hm1, y1) + pS1 = p.setp("eq.u32", P["waitScale"], 1); pS2 = p.setp("eq.u32", P["waitScale"], 2) + y0 = p.selp32(pS1, p.shl32(y0, 1), p.selp32(pS2, p.shr32(y0, 1), y0)) + y1 = p.selp32(pS1, p.add32(p.shl32(y1, 1), p.imm32(1)), p.selp32(pS2, p.shr32(y1, 1), y1)) + gm["wr0"] = p.shr32(p.add32(y0, P["waitShiftY"]), 3); gm["wr1"] = p.shr32(p.add32(y1, P["waitShiftY"]), 3) + return gm + + pWaitOn = p.setp("ne.u64", P["pWait"], 0) + pSignalOn = p.setp("ne.u64", P["pSignal"], 0) + def wait_window(gm, guard=None): + g2 = pWaitOn + if guard is not None: + g2 = p.reg("pred"); p.emit(f"and.pred {g2}, {pWaitOn}, {guard};") + sync_wait(p, P["pWait"], gm["wr0"], gm["wr1"], P["waitExpected"], lane, g2, warp, error64=P["pError"]) + + def load_v4(base, byteOff, pred, produced): + """produced: written by a chained (barrier-free) launch -> L2 path; else the non-coherent (texture) path.""" + r = p.regs("b32", 4) + for q in r: p.emit(f"mov.b32 {q}, 0;") + addr = p.add64(base, p.widen(byteOff)) + hint = "cg" if produced else "nc" + p.emit(f"@{pred} ld.global.{hint}.v4.b32 {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}}, [{addr}];") + return r + + def issue_loads(gm, pred): + pixel = gm["pixel"] + if pre: + # features [tokens][16] f32: 64 B per token, this lane's 8 floats at part * 32 + return (load_v4(P["pState"], p.add32(p.shl32(pixel, 6), p.shl32(ldPart, 5)), pred, False) + + load_v4(P["pState"], p.add32(p.add32(p.shl32(pixel, 6), p.shl32(ldPart, 5)), p.imm32(16)), pred, False)) + # the state is produced by the previous chained block except for the post block (block 0's output) and the + # upres block (the skip from the encoder); the low-resolution input of the post block is chained + regs = load_v4(P["pState"], p.add32(p.shl32(pixel, 5), p.shl32(ldPart, 4)), pred, not (post or upres)) + if post: + regs += load_v4(P["pLow"], p.add32(p.shl32(gm["lowPixel"], 5), p.shl32(ldPart, 4)), pred, True) + elif upres: + regs += load_v4(P["pLow"], p.add32(p.shl32(gm["lowPixel"], 6), p.shl32(ldPart, 5)), pred, False) + regs += load_v4(P["pLow"], p.add32(p.add32(p.shl32(gm["lowPixel"], 6), p.shl32(ldPart, 5)), p.imm32(16)), pred, False) + return regs + + window = p.reg("b32"); p.emit(f"mov.u32 {window}, {ctaid};") + pW = p.setp("lt.u32", window, P["windowCount"]) + endL = p.label("END"); loopL = p.label("WINDOW") + p.emit(f"@!{pW} bra {endL};") + gm0 = geometry(window) + wait_window(gm0) + first = issue_loads(gm0, gm0["valid"]) + carried = p.regs("b32", len(first)) + for c, f in zip(carried, first): p.emit(f"mov.b32 {c}, {f};") + p.emit(f"{loopL}:") + gm = geometry(window) + windowX, windowY, x, y, valid, pixel = gm["windowX"], gm["windowY"], gm["x"], gm["y"], gm["valid"], gm["pixel"] + inputs = carried + # prefetch the next window + nextWindow = p.add32(window, nctaid) + pNext = p.setp("lt.u32", nextWindow, P["windowCount"]) + gmN = geometry(nextWindow) + wait_window(gmN, pNext) + pLoadN = p.reg("pred"); p.emit(f"and.pred {pLoadN}, {gmN['valid']}, {pNext};") + nxt = issue_loads(gmN, pLoadN) + + def st_v4(addr, r): + p.emit(f"st.shared.v4.b32 [{addr}], {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}};") + + def warp_sync(): + p.emit("bar.warp.sync 0xffffffff;") + + def e4_word_pairs(words): + """four b32 words (16 E4 codes) -> eight .b16 code pairs in order.""" + out = [] + for w in words: + lo = p.reg("b16"); hi = p.reg("b16") + p.emit(f"mov.b32 {{{lo}, {hi}}}, {w};") + out += [lo, hi] + return out + + # ---- Phase F inputs: x (E4 A fragment) and cInit (f16 C tiles = skip) + cInit = [[None, None] for _ in range(4)] + if pre: + f0, f1 = inputs[0:4], inputs[4:8] + hw = [] + for a, b in ((f0[0], f0[1]), (f0[2], f0[3]), (f1[0], f1[1]), (f1[2], f1[3])): + r = p.reg("b32"); p.emit(f"cvt.rn.f16x2.f32 {r}, {b}, {a};"); hw.append(r) + st_v4(stgLdE4, hw) + warp_sync() + fa = ldm4(p, stgA) + adapted = [] + for i2 in range(2): + r = ldm4(p, p.add32(wf16B, i2 * 512)) + for jj in range(2): + d = zero_tile(p) + mma_f16(p, d, fa, (r[0], r[1]) if jj == 0 else (r[2], r[3]), d) + adapted.append(d) + for j in range(4): + cInit[j] = [adapted[j][0], adapted[j][1]] + xa = acc_to_a(p, adapted, li, zero) # adapter output: keep the exact NaN -> 0 (f32 features) + warp_sync() + elif post or upres: + xw = inputs[0:4] + if post: sk = inputs[4:8] + else: sk0, sk1 = inputs[4:8], inputs[8:12] + adPairs = e4_word_pairs(xw) + if post: upPairs = e4_word_pairs(sk) + raw = [] + for i in range(8): + ad = nanzero(p, e4x2_to_f16x2(p, adPairs[i]), zero) + if post: + up = nanzero(p, e4x2_to_f16x2(p, upPairs[i]), zero) + inputValue = hmul2(p, up, blendA[i]) + raw.append(hfma2(p, ad, blendB[i], inputValue)) + else: + projected = (sk0 + sk1)[i] + raw.append(hfma2(p, ad, blendA[i], projected)) + st_v4(stgLdF16, raw[0:4]); st_v4(p.add32(stgLdF16, 16), raw[4:8]) + warp_sync() + for j in range(4): + for h in range(2): + r = p.reg("b32"); p.emit(f"ld.shared.b32 {r}, [{cBaseF16}+{16 * j + 640 * h}];"); cInit[j][h] = r + warp_sync() # the E4 tile aliases the f16 tile + codes = [cvt_e4x2(p, nanzero(p, raw[i], zero)) for i in range(8)] + cw = [pack16(p, codes[2 * i], codes[2 * i + 1]) for i in range(4)] + st_v4(stgLdE4, cw) + warp_sync() + xa = ldm4(p, stgA) + warp_sync() + else: + xw = inputs[0:4] + st_v4(stgLdE4, xw) + warp_sync() + xa = ldm4(p, stgA) + for j in range(4): + for h in range(2): + hcode = p.reg("b16"); p.emit(f"ld.shared.b16 {hcode}, [{cBase[j >> 1]}+{8 * (j & 1) + 256 * h}];") + cInit[j][h] = e4x2_to_f16x2(p, hcode) + warp_sync() + # scaled skip seeds the W2 accumulators + ffn = [[hmul2(p, cInit[j][h], auxFfn[j]) for h in range(2)] for j in range(4)] + + # ---- FFN: four quarters of 32 hidden units (W1 columns permuted), W2 chained in K order + for qq in range(4): + hid = [] + for i2 in range(2): + r = ldm4(p, p.add32(w1B, (2 * qq + i2) * 512)) + for jj in range(2): + d = zero_tile(p) + mma_e4(p, d, xa, (r[0], r[1]) if jj == 0 else (r[2], r[3]), d) + hid.append(d) + for d in hid: + d[0] = silu(p, d[0], silu_k); d[1] = silu(p, d[1], silu_k) + q = [[b16_to_b32(p, cvt_e4x2(p, d[h])) for h in range(2)] for d in hid] + a2 = [prmt(p, q[0][0], q[1][0], "0x5410"), prmt(p, q[0][1], q[1][1], "0x5410"), + prmt(p, q[2][0], q[3][0], "0x5410"), prmt(p, q[2][1], q[3][1], "0x5410")] + for i2 in range(2): + r = ldm4(p, p.add32(w2B, qq * 1024 + i2 * 512)) + for jj in range(2): + j = 2 * i2 + jj + mma_e4(p, ffn[j], a2, (r[0], r[1]) if jj == 0 else (r[2], r[3]), ffn[j]) + ffnQ = acc_to_a_smem(p, ffn, cBase, stgA) if A2A_SMEM else acc_to_a(p, ffn, li) + + # ---- q, k, v + qkv = [] + for m in range(3): + acc = [] + for i2 in range(2): + r = ldm4(p, p.add32(wqkvB, (2 * m + i2) * 512)) + for jj in range(2): + d = zero_tile(p) + mma_e4(p, d, ffnQ, (r[0], r[1]) if jj == 0 else (r[2], r[3]), d) + acc.append(d) + qkv.append(acc) + qn = normalize(p, qkv[0], li, zero, scale2) + kn = normalize(p, qkv[1], li, zero) + mq = acc_to_a_smem(p, qn, cBase, stgA) if A2A_SMEM else acc_to_a(p, qn, li) + for j in range(4): + for h in range(2): + hc = cvt_e4x2(p, kn[j][h]) + p.emit(f"st.shared.b16 [{kPub[h]}+{8 * j}], {hc};") + vc = cvt_e4x2(p, qkv[2][j][h]) + vhi = p.reg("b16"); p.emit(f"shr.b16 {vhi}, {vc}, 8;") + p.emit(f"st.shared.u8 [{vPub[h]}+{640 * j}], {vc};") + p.emit(f"st.shared.u8 [{vPub[h]}+{640 * j + 80}], {vhi};") + p.emit("bar.sync 0;") # K / V rows of all four warps visible + + # ---- attention: S = prior + Q K^T (physical key order), softmax, P V + s = [] + for m in range(8): + c0 = p.reg("b32"); p.emit(f"mov.b32 {c0}, {priorRegs[m][0]};") + c1 = p.reg("b32"); p.emit(f"mov.b32 {c1}, {priorRegs[m][1]};") + s.append([c0, c1]) + for m2 in range(4): + r = ldm4(p, p.add32(kLane, m2 * 768)) + mma_e4(p, s[2 * m2], mq, (r[0], r[1]), s[2 * m2]) + mma_e4(p, s[2 * m2 + 1], mq, (r[2], r[3]), s[2 * m2 + 1]) + w = softmax(p, s, li, exp_k) + pa = [acc_to_a_smem(p, w[0:4], cBase, stgA), acc_to_a_smem(p, w[4:8], cBase, stgA)] if A2A_SMEM else [acc_to_a(p, w[0:4], li), acc_to_a(p, w[4:8], li)] + o = [zero_tile(p) for _ in range(4)] + for step in range(2): + for d2 in range(2): + r = ldm4(p, p.add32(vLane, d2 * 1280 + step * 32)) + mma_e4(p, o[2 * d2], pa[step], (r[0], r[1]), o[2 * d2]) + mma_e4(p, o[2 * d2 + 1], pa[step], (r[2], r[3]), o[2 * d2 + 1]) + attended = acc_to_a_smem(p, o, cBase, stgA) if A2A_SMEM else acc_to_a(p, o, li) + result = [[hmul2(p, ffn[j][h], auxAttn[j]) for h in range(2)] for j in range(4)] + for i2 in range(2): + r = ldm4(p, p.add32(wprojB, i2 * 512)) + for jj in range(2): + j = 2 * i2 + jj + mma_e4(p, result[j], attended, (r[0], r[1]) if jj == 0 else (r[2], r[3]), result[j]) + + # ---- outputs + stgOut = p.add32(stgWarp, p.add32(p.shl32(g, 5), p.shl32(t, 1))) # E4 output tile [16][32 B] (plain rows) + stgRead = p.add32(stgWarp, p.add32(p.shl32(ldRow, 5), p.shl32(ldPart, 4))) + if outE4: + for j in range(4): + for h in range(2): + hc = cvt_e4x2(p, result[j][h]) + p.emit(f"st.shared.b16 [{stgOut}+{8 * j + 256 * h}], {hc};") + warp_sync() + r = p.regs("b32", 4) + p.emit(f"ld.shared.v4.b32 {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}}, [{stgRead}];") + addr = p.add64(P["pOutE4"], p.widen(p.add32(p.shl32(pixel, 5), p.shl32(ldPart, 4)))) + p.emit(f"@{valid} st.global.v4.b32 [{addr}], {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}};") + warp_sync() + if pool: + # ds_fp8: window rows 2w, 2w+1 (rows g, g+8 of the tile) pool to half-resolution pixels (windowX + 2i, windowY + 2w): + # ((a + b) + (c + d)) * 0.25 in halves; lanes with even g hold pixel i = g >> 1. + poolStg = p.add32(stgWarp, 512) + gEven = p.setp("eq.u32", p.and32(g, 1), 0) + for j in range(4): + a, c = result[j][0], result[j][1] + b = shfl_xor(p, a, 4); d = shfl_xor(p, c, 4) + top = hadd2(p, a, b); bottom = hadd2(p, c, d) + sm = hadd2(p, top, bottom) + v = hmul2(p, sm, quarter2) + hc = cvt_e4x2(p, v) + addr = p.add32(poolStg, p.add32(p.shl32(p.shr32(g, 1), 5), p.add32(p.shl32(t, 1), p.imm32(8 * j)))) + p.emit(f"@{gEven} st.shared.b16 [{addr}], {hc};") + warp_sync() + pLane8 = p.setp("lt.u32", lane, 8) + i = p.shr32(lane, 1); part = p.and32(lane, 1) + r = p.regs("b32", 4) + raddr = p.add32(poolStg, p.add32(p.shl32(i, 5), p.shl32(part, 4))) + p.emit(f"@{pLane8} ld.shared.v4.b32 {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}}, [{raddr}];") + sx = p.add32(windowX, p.shl32(i, 1)); sy = p.add32(windowY, p.shl32(warp, 1)) + sx1 = p.add32(sx, 1); sy1 = p.add32(sy, 1) + pvx = p.setp("lt.u32", sx1, P["width"]); pvy = p.setp("lt.u32", sy1, P["height"]) + pv = p.reg("pred"); p.emit(f"and.pred {pv}, {pvx}, {pvy};") + p.emit(f"and.pred {pv}, {pv}, {pLane8};") + pnx = p.setp("ge.s32", sx, 0); pny = p.setp("ge.s32", sy, 0) + p.emit(f"and.pred {pv}, {pv}, {pnx};"); p.emit(f"and.pred {pv}, {pv}, {pny};") + low = p.mad32(p.shr32(sy, 1), P["lowWidth"], p.shr32(sx, 1)) + addr = p.add64(P["pOut2"], p.widen(p.add32(p.shl32(low, 5), p.shl32(part, 4)))) + p.emit(f"@{pv} st.global.v4.b32 [{addr}], {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}};") + warp_sync() + if head: + # RGBA head: two k16 steps of the f16 result x head weights [16 n][32 k] (n8 tile 0 holds columns 0..3) + hd = zero_tile(p) + hLane = p.add32(p.add32(smem, WF16S), p.add32(p.shl32(l8, 6), p.shl32(p.and32(lm, 1), 4))) + for step in range(2): + b = ldm2(p, p.add32(hLane, step * 32)) + mma_f16(p, hd, acc_f16_to_a(result, step), b, hd) + pT2 = p.setp("lt.u32", t, 2) + for h in range(2): + xo = p.add32(windowX, g); yo = p.add32(windowY, p.add32(p.shl32(warp, 1), p.imm32(h))) + pvx = p.setp("lt.u32", xo, P["width"]); pvy = p.setp("lt.u32", yo, P["height"]) + pv = p.reg("pred"); p.emit(f"and.pred {pv}, {pvx}, {pvy};"); p.emit(f"and.pred {pv}, {pv}, {pT2};") + lo, hi = unpack16(p, hd[h]) + f0 = p.reg("f32"); p.emit(f"cvt.f32.f16 {f0}, {lo};") + f1 = p.reg("f32"); p.emit(f"cvt.f32.f16 {f1}, {hi};") + px = p.mad32(yo, P["width"], xo) + addr = p.add64(P["pOut2"], p.widen(p.add32(p.shl32(px, 4), p.shl32(t, 3)))) + p.emit(f"@{pv} st.global.v2.f32 [{addr}], {{{f0}, {f1}}};") + p.emit("fence.acq_rel.gpu;") + p.emit("bar.sync 0;") # K / V and staging are reused by the next window; the window's stores are released + pSig = p.reg("pred"); p.emit(f"and.pred {pSig}, {pSignalOn}, {p.setp('eq.u32', tid, 0)};") + sigAddr = p.add64(P["pSignal"], p.widen(p.shl32(gm["wy"], 2))) + p.emit(f"@{pSig} red.release.gpu.global.add.u32 [{sigAddr}], 1;") + for c, n in zip(carried, nxt): p.emit(f"mov.b32 {c}, {n};") + p.emit(f"mov.u32 {window}, {nextWindow};") + p.emit(f"@{pNext} bra {loopL};") + p.emit(f"{endL}:") + p.emit("ret;") + return name, p.finish() + + +if __name__ == "__main__": + flags, out = int(sys.argv[1]), sys.argv[2] + max_regs = int(sys.argv[3]) if len(sys.argv) > 3 else None + name, text = generate(flags, max_regs) + open(out, "w").write(text) + print(name) diff --git a/third_party/opendlss-nr/scripts/ptx/ffn_e4m3.py b/third_party/opendlss-nr/scripts/ptx/ffn_e4m3.py new file mode 100644 index 000000000..e01fdf7a2 --- /dev/null +++ b/third_party/opendlss-nr/scripts/ptx/ffn_e4m3.py @@ -0,0 +1,348 @@ +"""Expert FFN + W3 of one block in a single PTX kernel: E4( E4(SiLU(x W1_e)) W2_e ) for every expert e of a row +group, then E4( skip * scale + narrow W3 ) with the narrow activations staged in shared memory. + +Workgroup: E experts x ROWT row tiles of 16 = 4E * ROWT / 4 ... warps = E * ROWT (warp w: expert / column group +e = w / ROWT, row tile q = w % ROWT), rows per workgroup = 16 ROWT, grid = ceil(rows / (16 ROWT)). + phase 1: hidden_e = x W1_e over K = C in k32 steps; every expert's W1 tile of the step sits in one ring stage + (E x 4 KB, chunk-swizzled rows), A fragments straight from the state rows (2 steps in flight). + phase 2: SiLU, E4, W2_e (the W2 tiles land in the free ring stage during the last W1 step; the hidden C fragment + packs into the W2 A fragment through the permuted W1 columns), narrow tile [16 ROWT][C + 16] E4 in shared. + phase 3: out[rows][32 e ..] = E4( skip * aux + narrow W3[:, 32 e ..] ), W3 tiles ring-staged per k32 step, the + narrow rows read with ldmatrix (padded stride: conflict-free), output through the narrow region. +Arithmetic identical to mlp_e4m3 + gemm2_e4m3 (verified bit-exact). Dynamic shared memory (up to ~83 KB). + +python ffn_e4m3.py out.ptx [maxregs] [proj] +""" +import sys +from ptxgen import Ptx +from swin import * + +HIDDEN = 128 + + +def generate(C, rowt, max_regs=None, proj=False): + """proj: the previous block's projection runs first (phase 0): state = E4(ffnPrev * auxAttn + attended Wproj), + kept in shared memory as the FFN input and skip (the state never touches global memory).""" + E = C // 32 + steps = C // 32 + warps = E * rowt + threads = 32 * warps + rowsPerWg = 16 * rowt + stageBytes = E * 4096 + 2048 # W1 tiles of one k32 step for all experts ([e][128 n][32 B]) + the A tile [64][32 B] + A_OFF = E * 4096 # A tile offset within a W1 stage (chunk-swizzled rows, L2 copies) + RING = 0 + NARROW = 2 * stageBytes + narrowStride = C + 16 + sharedBytes = NARROW + rowsPerWg * narrowStride + w3StageBytes = C * 32 # W3 tiles of one k32 step ([C n][32 B]) + wpStageBytes = C * 32 + 2048 # Wproj tiles + the attended A tile (phase 0 ring inside W1 stage 0) + assert 2 * wpStageBytes <= stageBytes + name = f"ffn_e4m3_C{C}_R{rowt}" + ("_proj" if proj else "") + p = Ptx() + params = [("u64", "pA"), ("u64", "pW1"), ("u64", "pW2"), ("u64", "pW3"), ("u64", "pAux"), ("u64", "pOut"), + ("u32", "rows"), ("u32", "auxHalfOffset"), + ("u64", "pAtt"), ("u64", "pFfnPrev"), ("u64", "pWproj"), ("u32", "auxAttnHalf"), ("u64", "pAuxPrev"), + ("u64", "pStateOut"), ("u32", "storeState"), + ("u64", "pWaitRows"), ("u32", "waitExpected"), ("u32", "waitShiftY"), ("u64", "pWaitBands"), ("u64", "pSignal"), + ("u32", "width"), ("u32", "waitMul"), ("u32", "waitGroupRows"), ("u64", "pError")] # chaining (0 = off): wait on the previous block's window rows / state row bands (waitMul signals per row group of waitGroupRows rows), signal this block's FFN row bands + p.entry(name, params, sharedBytes, threads, max_regs, dynamic_shared=True) + P = {n: (p.load_param_u64(n) if t == "u64" else p.load_param_u32(n)) for t, n in params} + tid = p.special("tid.x"); ctaid = p.special("ctaid.x") + lane = p.and32(tid, 31); warp = p.shr32(tid, 5) + li = LaneInfo(p, lane) + g, t = li.g, li.t + smem = p.shared_addr(p.imm32(0)) + zero = imm(p, 0) + e = p.reg("b32"); q = p.reg("b32") + if rowt & (rowt - 1) == 0: + p.emit(f"shr.u32 {e}, {warp}, {rowt.bit_length() - 1};"); p.emit(f"and.b32 {q}, {warp}, {rowt - 1};") + else: + p.emit(f"div.u32 {e}, {warp}, {rowt};"); p.emit(f"rem.u32 {q}, {warp}, {rowt};") + blockRow = p.mul32(ctaid, rowsPerWg) + rowsMinus1 = p.sub32(P["rows"], 1) + # this warp's rows g, g + 8 (clamped for the loads, never stored past the end) + rowOk = []; aRow = []; rowIdx = [] + for h in range(2): + r = p.add32(blockRow, p.add32(p.shl32(q, 4), p.add32(g, p.imm32(8 * h)))) + rowIdx.append(r) + rowOk.append(p.setp("lt.u32", r, P["rows"])) + rc = p.selp32(rowOk[h], r, rowsMinus1) + aRow.append(p.add64(P["pA"], p.widen(p.add32(p.mul32(rc, C), p.shl32(t, 2))))) + stgAddr = [p.add32(smem, RING + s * stageBytes) for s in range(2)] + # ---- chaining: wait for the producers of this workgroup's rows + rowLast = p.add32(blockRow, p.imm32(rowsPerWg - 1)) + pLastBig = p.setp("gt.u32", rowLast, rowsMinus1) + rowLast = p.selp32(pLastBig, rowsMinus1, rowLast) + yFirst = p.reg("b32"); p.emit(f"div.u32 {yFirst}, {blockRow}, {P['width']};") + yLast = p.reg("b32"); p.emit(f"div.u32 {yLast}, {rowLast}, {P['width']};") + pWaitRowsOn = p.setp("ne.u64", P["pWaitRows"], 0) + wy0 = p.shr32(p.add32(yFirst, P["waitShiftY"]), 3); wy1 = p.shr32(p.add32(yLast, P["waitShiftY"]), 3) + sync_wait(p, P["pWaitRows"], wy0, wy1, P["waitExpected"], lane, pWaitRowsOn, warp, error64=P["pError"]) + pWaitBandsOn = p.setp("ne.u64", P["pWaitBands"], 0) + b0 = p.shr32(yFirst, 3); b1 = p.shr32(yLast, 3) + sync_wait(p, P["pWaitBands"], b0, b1, lambda b: band_expected(p, b, P["width"], P["rows"], P["waitMul"], P["waitGroupRows"]), lane, pWaitBandsOn, warp, error64=P["pError"]) + + # ---- W1 ring copies: E x 256 chunks per stage, 2 per thread: c = tid + threads i -> expert c >> 8, row (c & 255) >> 1, half c & 1 + w1Copies = [] + copiesPerThread = (256 * E + threads - 1) // threads + copyExact = copiesPerThread * threads == 256 * E + w1Preds = [] + for i in range(copiesPerThread): + c = p.add32(tid, i * threads) + w1Preds.append(None if copyExact else p.setp("lt.u32", c, 256 * E)) + ce = p.shr32(c, 8); cc = p.and32(c, 255) + n = p.shr32(cc, 1); half = p.and32(cc, 1) + pch = p.xor32(half, p.and32(p.shr32(n, 2), 1)) + dst = p.add32(p.shl32(ce, 12), p.add32(p.shl32(n, 5), p.shl32(pch, 4))) + # W1 permuted tile-major [e][steps][128][32]: expert e step s row n at ((e steps + s) 128 + n) 32 + src = p.add64(P["pW1"], p.widen(p.add32(p.mul32(ce, steps * 4096), p.add32(p.shl32(n, 5), p.shl32(half, 4))))) + w1Copies.append((dst, src)) + def issue_w1(stage, step): + for (dst, src), pv in zip(w1Copies, w1Preds): + saddr = p.add32(stgAddr[stage], dst) + gaddr = p.add64(src, p.widen(p.imm32(step * 4096))) + pred = f"@{pv} " if pv else "" + p.emit(f"{pred}cp.async.cg.shared.global [{saddr}], [{gaddr}], 16;") + if not proj: issue_a(stgAddr[stage], A_OFF, P["pA"], step) + p.emit("cp.async.commit_group;") + # W2 tiles [e][4 kt][32 n][32 B] (E x 4 KB): same chunk mapping (row = kt * 32 + n within the expert) + def issue_w2(stage): + for i in range(copiesPerThread): + c = p.add32(tid, i * threads) + pv = None if copyExact else p.setp("lt.u32", c, 256 * E) + ce = p.shr32(c, 8); cc = p.and32(c, 255) + row = p.shr32(cc, 1); half = p.and32(cc, 1) + pch = p.xor32(half, p.and32(p.shr32(row, 2), 1)) + dst = p.add32(stgAddr[stage], p.add32(p.shl32(ce, 12), p.add32(p.shl32(row, 5), p.shl32(pch, 4)))) + src = p.add64(P["pW2"], p.widen(p.add32(p.shl32(ce, 12), p.add32(p.shl32(row, 5), p.shl32(half, 4))))) + pred = f"@{pv} " if pv else "" + p.emit(f"{pred}cp.async.cg.shared.global [{dst}], [{src}], 16;") + p.emit("cp.async.commit_group;") + # W3 ring copies: C x 2 chunks per stage (in the ring region, stage s at RING + s * w3StageBytes) + w3Chunks = C * 2 + w3Copies = [] + for i in range((w3Chunks + threads - 1) // threads): + c = p.add32(tid, i * threads) + pv = p.setp("lt.u32", c, w3Chunks) if w3Chunks % threads else None + n = p.shr32(c, 1); half = p.and32(c, 1) + pch = p.xor32(half, p.and32(p.shr32(n, 2), 1)) + dst = p.add32(p.shl32(n, 5), p.shl32(pch, 4)) + src = p.add64(P["pW3"], p.widen(p.add32(p.shl32(n, 5), p.shl32(half, 4)))) + w3Copies.append((dst, src, pv)) + def issue_w3(stage, step): + for dst, src, pv in w3Copies: + saddr = p.add32(p.add32(smem, RING + stage * w3StageBytes), dst) + gaddr = p.add64(src, p.widen(p.imm32(step * C * 32))) + pred = f"@{pv} " if pv else "" + p.emit(f"{pred}cp.async.cg.shared.global [{saddr}], [{gaddr}], 16;") + p.emit("cp.async.commit_group;") + + # ---- fragment addressing + l8 = p.and32(lane, 7); lm = p.shr32(lane, 3) + bNL = p.add32(l8, p.shl32(p.shr32(lane, 4), 3)); bChunkL = p.and32(lm, 1) + bPch = p.xor32(bChunkL, p.and32(p.shr32(bNL, 2), 1)) + bLaneOff = p.add32(p.shl32(bNL, 5), p.shl32(bPch, 4)) + w1B = [p.add32(stgAddr[s], p.add32(p.shl32(e, 12), bLaneOff)) for s in range(2)] # this expert's tiles + # A tile copies: 128 chunks (64 rows x 2 halves) per step, threads < 128: row = tid >> 1 (clamped to the last row) + aCopyOn = p.setp("lt.u32", tid, 128) + aRowC = p.shr32(tid, 1); aHalfC = p.and32(tid, 1) + aRowG = p.add32(blockRow, aRowC) + aRowG = p.selp32(p.setp("lt.u32", aRowG, P["rows"]), aRowG, rowsMinus1) + aDstOff = p.add32(p.shl32(aRowC, 5), p.shl32(p.xor32(aHalfC, p.and32(p.shr32(aRowC, 2), 1)), 4)) + aSrcOff = p.widen(p.add32(p.mul32(aRowG, C), p.shl32(aHalfC, 4))) + def issue_a(stageAddr, aOff, base64, step): + saddr = p.add32(stageAddr, p.add32(aDstOff, p.imm32(aOff))) + gaddr = p.add64(base64, p.add64(aSrcOff, p.widen(p.imm32(32 * step)))) + p.emit(f"@{aCopyOn} cp.async.cg.shared.global [{saddr}], [{gaddr}], 16;") + aRowL = p.add32(l8, p.shl32(p.and32(lm, 1), 3)); aChunkL = p.shr32(lane, 4) + aFragOff = p.add32(p.shl32(p.add32(aRowL, p.shl32(q, 4)), 5), p.shl32(p.xor32(aChunkL, p.and32(p.shr32(aRowL, 2), 1)), 4)) + narrowBase = p.add32(smem, NARROW) + narrowA = p.add32(narrowBase, p.add32(p.mul32(p.add32(p.shl32(q, 4), aRowL), narrowStride), p.shl32(aChunkL, 4))) + w3B = [p.add32(p.add32(smem, RING + s * w3StageBytes), p.add32(p.shl32(e, 10), bLaneOff)) for s in range(2)] # columns 32 e .. + # residual seed for phase 3: E4 state (row, 32 e + 8 j + 2 t) pairs and the aux scales + seedRegs = [] + auxAddr = p.add64(P["pAux"], p.widen(p.shl32(p.add32(P["auxHalfOffset"], p.add32(p.shl32(e, 5), p.shl32(t, 1))), 1))) + scales = [] + for j in range(4): + r = p.reg("b32"); p.emit(f"ld.global.nc.b32 {r}, [{auxAddr}+{16 * j}];"); scales.append(r) + # the state tile (proj): [rowsPerWg][C + 16] E4 aliasing the narrow region (dead before phase 2 writes it) + stateOut = p.add32(narrowBase, p.add32(p.mul32(p.add32(p.shl32(q, 4), g), narrowStride), p.add32(p.shl32(e, 5), p.shl32(t, 1)))) + if not proj: + for h in range(2): + resAddr = p.add64(P["pA"], p.widen(p.add32(p.mul32(p.selp32(rowOk[h], rowIdx[h], rowsMinus1), C), p.add32(p.shl32(e, 5), p.shl32(t, 1))))) + for j in range(4): + hc = p.reg("b16"); p.emit(f"ld.global.cg.b16 {hc}, [{resAddr}+{8 * j}];") + seedRegs.append((j, h, hc)) + + + chunksPerRow = C // 16 + def store_tile(dstBase): + """The [rowsPerWg][C] E4 tile in the narrow region -> global [rows][C] rows (16-byte chunks, one per thread).""" + for i in range((rowsPerWg * chunksPerRow + threads - 1) // threads): + c = p.add32(tid, i * threads) + pv = p.setp("lt.u32", c, rowsPerWg * chunksPerRow) if (rowsPerWg * chunksPerRow) % threads else None + row = p.reg("b32"); chunk = p.reg("b32") + p.emit(f"div.u32 {row}, {c}, {chunksPerRow};"); p.emit(f"rem.u32 {chunk}, {c}, {chunksPerRow};") + gRow = p.add32(blockRow, row) + ok = p.setp("lt.u32", gRow, P["rows"]) + if pv is not None: p.emit(f"and.pred {ok}, {ok}, {pv};") + r = p.regs("b32", 4) + src = p.add32(narrowBase, p.add32(p.mul32(row, narrowStride), p.shl32(chunk, 4))) + p.emit(f"ld.shared.v4.b32 {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}}, [{src}];") + addr = p.add64(dstBase, p.widen(p.add32(p.mul32(gRow, C), p.shl32(chunk, 4)))) + p.emit(f"@{ok} st.global.v4.b32 [{addr}], {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}};") + + w1First = 0 + if proj: + # ================= phase 0: state = E4(ffnPrev * auxAttn + attended Wproj[:, 32 e ..]); Wproj ring in stage 0, W1 step 0 -> stage 1 + w1First = 1 + auxAttnAddr = p.add64(P["pAuxPrev"], p.widen(p.shl32(p.add32(P["auxAttnHalf"], p.add32(p.shl32(e, 5), p.shl32(t, 1))), 1))) + scalesAttn = [] + for j in range(4): + r = p.reg("b32"); p.emit(f"ld.global.nc.b32 {r}, [{auxAttnAddr}+{16 * j}];") + scalesAttn.append(r) + pacc = [[None, None] for _ in range(4)] + for h in range(2): + prevAddr = p.add64(P["pFfnPrev"], p.widen(p.add32(p.mul32(p.selp32(rowOk[h], rowIdx[h], rowsMinus1), C), p.add32(p.shl32(e, 5), p.shl32(t, 1))))) + for j in range(4): + hc = p.reg("b16"); p.emit(f"ld.global.cg.b16 {hc}, [{prevAddr}+{8 * j}];") + pacc[j][h] = hmul2(p, e4x2_to_f16x2(p, hc), scalesAttn[j]) + # Wproj tiles share the W3 copy geometry: chunk offsets relative to the matrix base + wpCopies = [] + for i in range((w3Chunks + threads - 1) // threads): + c = p.add32(tid, i * threads) + pv = p.setp("lt.u32", c, w3Chunks) if w3Chunks % threads else None + n = p.shr32(c, 1); half = p.and32(c, 1) + pch = p.xor32(half, p.and32(p.shr32(n, 2), 1)) + dst = p.add32(p.shl32(n, 5), p.shl32(pch, 4)) + src = p.add64(P["pWproj"], p.widen(p.add32(p.shl32(n, 5), p.shl32(half, 4)))) + wpCopies.append((dst, src, pv)) + wpB = [p.add32(p.add32(smem, RING + st * wpStageBytes), p.add32(p.shl32(e, 10), bLaneOff)) for st in range(2)] + def issue_wproj(stage, step): + for dst, src, pv in wpCopies: + saddr = p.add32(p.add32(smem, RING + stage * wpStageBytes), dst) + gaddr = p.add64(src, p.widen(p.imm32(step * C * 32))) + pred = f"@{pv} " if pv else "" + p.emit(f"{pred}cp.async.cg.shared.global [{saddr}], [{gaddr}], 16;") + issue_a(p.add32(smem, RING + stage * wpStageBytes), C * 32, P["pAtt"], step) + p.emit("cp.async.commit_group;") + issue_wproj(0, 0) + issue_w1(1, 0) # W1 step 0 lands in stage 1 during phase 0 + for step in range(steps): + stage = step & 1 + p.emit("cp.async.wait_group 0;") + p.emit("bar.sync 0;") + if step + 1 < steps: issue_wproj(stage ^ 1, step + 1) + else: p.emit("cp.async.commit_group;") + a = ldm4(p, p.add32(p.add32(smem, RING + stage * wpStageBytes + C * 32), aFragOff)) + for i2 in range(2): + r = ldm4(p, p.add32(wpB[stage], i2 * 512)) + mma_e4(p, pacc[2 * i2], a, (r[0], r[1]), pacc[2 * i2]) + mma_e4(p, pacc[2 * i2 + 1], a, (r[2], r[3]), pacc[2 * i2 + 1]) + # publish the state tile: E4 codes (the FFN input and skip) + for j in range(4): + for h in range(2): + hc = cvt_e4x2(p, pacc[j][h]) + p.emit(f"st.shared.b16 [{stateOut}+{8 * j + 8 * narrowStride * h}], {hc};") + seedRegs.append((j, h, hc)) + p.emit("bar.sync 0;") + # W1 step 1 into stage 0 (the Wproj ring is dead) + if steps > 1: issue_w1(0, 1) + # optional materialization of the block state (parity captures) + pStore = p.setp("ne.u32", P["storeState"], 0) + skipStore = p.label("NOSTATE") + p.emit(f"@!{pStore} bra {skipStore};") + store_tile(P["pStateOut"]) + p.emit(f"{skipStore}:") + + # ================= phase 1: hidden = x W1_e + if not proj: + issue_w1(0, 0) + hid = [zero_tile(p) for _ in range(HIDDEN // 8)] + for step in range(steps): + stage = (step + w1First) & 1 + p.emit("cp.async.wait_group 0;") + p.emit("bar.sync 0;") + if step + 1 < steps: + if not proj or step >= 1: issue_w1(stage ^ 1, step + 1) + else: issue_w2(stage ^ 1) + if proj: + a = ldm4(p, p.add32(narrowA, 32 * step)) # the state tile in shared + else: + a = ldm4(p, p.add32(stgAddr[stage], p.add32(aFragOff, p.imm32(A_OFF)))) + for i2 in range(8): + r = ldm4(p, p.add32(w1B[stage], i2 * 512)) + mma_e4(p, hid[2 * i2], a, (r[0], r[1]), hid[2 * i2]) + mma_e4(p, hid[2 * i2 + 1], a, (r[2], r[3]), hid[2 * i2 + 1]) + # ================= phase 2: SiLU, E4, W2_e -> narrow tile + p.emit("cp.async.wait_group 0;") + p.emit("bar.sync 0;") + w2Stage = (steps + w1First) & 1 + k = SiluConsts(p) + for d in hid: + d[0] = silu(p, d[0], k); d[1] = silu(p, d[1], k) + narrow = [zero_tile(p) for _ in range(4)] + for kt in range(4): + qcodes = [[b16_to_b32(p, cvt_e4x2(p, hid[4 * kt + i][h])) for h in range(2)] for i in range(4)] + a2 = [prmt(p, qcodes[0][0], qcodes[1][0], "0x5410"), prmt(p, qcodes[0][1], qcodes[1][1], "0x5410"), + prmt(p, qcodes[2][0], qcodes[3][0], "0x5410"), prmt(p, qcodes[2][1], qcodes[3][1], "0x5410")] + for i2 in range(2): + r = ldm4(p, p.add32(w1B[w2Stage], kt * 1024 + i2 * 512)) + mma_e4(p, narrow[2 * i2], a2, (r[0], r[1]), narrow[2 * i2]) + mma_e4(p, narrow[2 * i2 + 1], a2, (r[2], r[3]), narrow[2 * i2 + 1]) + narrowOut = p.add32(narrowBase, p.add32(p.mul32(p.add32(p.shl32(q, 4), g), narrowStride), p.add32(p.shl32(e, 5), p.shl32(t, 1)))) + for j in range(4): + for h in range(2): + hc = cvt_e4x2(p, narrow[j][h]) + p.emit(f"st.shared.b16 [{narrowOut}+{8 * j + 8 * narrowStride * h}], {hc};") + # W3 stage 0 into the ring (both W1/W2 stages are dead after this barrier) + p.emit("bar.sync 0;") + issue_w3(0, 0) + # ================= phase 3: out = skip * aux + narrow W3[:, 32 e ..] + acc = [[None, None] for _ in range(4)] + for j, h, hc in seedRegs: + acc[j][h] = hmul2(p, e4x2_to_f16x2(p, hc), scales[j]) + for step in range(steps): + stage = step & 1 + p.emit("cp.async.wait_group 0;") + p.emit("bar.sync 0;") + if step + 1 < steps: issue_w3(stage ^ 1, step + 1) + a = ldm4(p, p.add32(narrowA, 32 * step)) + for i2 in range(2): + r = ldm4(p, p.add32(w3B[stage], i2 * 512)) + mma_e4(p, acc[2 * i2], a, (r[0], r[1]), acc[2 * i2]) + mma_e4(p, acc[2 * i2 + 1], a, (r[2], r[3]), acc[2 * i2 + 1]) + # ---- output through the narrow region (every warp finished reading it), then 16-byte stores: one chunk per thread + p.emit("bar.sync 0;") + for j in range(4): + for h in range(2): + hc = cvt_e4x2(p, acc[j][h]) + p.emit(f"st.shared.b16 [{narrowOut}+{8 * j + 8 * narrowStride * h}], {hc};") + p.emit("bar.sync 0;") + store_tile(P["pOut"]) + # ---- chaining: release the FFN rows (bands b0 .. b1 of this workgroup) + pSignalOn = p.setp("ne.u64", P["pSignal"], 0) + p.emit("fence.acq_rel.gpu;") + p.emit("bar.sync 0;") + pT0 = p.reg("pred"); p.emit(f"and.pred {pT0}, {pSignalOn}, {p.setp('eq.u32', tid, 0)};") + bIter = p.reg("b32"); p.emit(f"mov.u32 {bIter}, {b0};") + sigLoop = p.label("SIG"); sigDone = p.label("SIGDONE") + p.emit(f"@!{pT0} bra {sigDone};") + p.emit(f"{sigLoop}:") + sigAddr = p.add64(P["pSignal"], p.widen(p.shl32(bIter, 2))) + p.emit(f"red.release.gpu.global.add.u32 [{sigAddr}], 1;") + p.emit(f"add.u32 {bIter}, {bIter}, 1;") + pMoreB = p.setp("le.u32", bIter, b1) + p.emit(f"@{pMoreB} bra {sigLoop};") + p.emit(f"{sigDone}:") + p.emit("ret;") + return name, p.finish(), sharedBytes + + +if __name__ == "__main__": + C, rowt, out = int(sys.argv[1]), int(sys.argv[2]), sys.argv[3] + max_regs = int(sys.argv[4]) if len(sys.argv) > 4 else None + proj = len(sys.argv) > 5 and int(sys.argv[5]) != 0 + name, text, shared = generate(C, rowt, max_regs, proj) + open(out, "w").write(text) + print(name, shared) diff --git a/third_party/opendlss-nr/scripts/ptx/gemm2_e4m3.py b/third_party/opendlss-nr/scripts/ptx/gemm2_e4m3.py new file mode 100644 index 000000000..3d85298cb --- /dev/null +++ b/third_party/opendlss-nr/scripts/ptx/gemm2_e4m3.py @@ -0,0 +1,294 @@ +"""Exact FP8 GEMM with the block epilogues in PTX (the gemm_fp8.comp shapes of the expert stages). + +D[rows][N] = A[rows][K] (E4, at inputColumnBase of inputStride) x W (E4, k32-tile-major [K/32][Nmatrix][32] at +weightColumnOffset), f16 accumulation chained over K in order (mma.sync m16n8k32, two-group F13 arithmetic). +Flags: + RES (seed): the accumulator starts from round_f16(E4 residual * f16 scale) - residual at the output location, + scale = aux halves at auxHalfOffset + column. The scaled residual seeds the C fragments rather than + being added in the epilogue: one rounding instead of two. + SILU : cubic SiLU on the f16 result. + E4 : E4M3 output (NaN -> 0); F16: f16 output (both: dual). +Workgroup: 4 warps x 16 rows = 64 rows, 64 columns (8 n8 tiles per warp), cp.async ring of A [64][32] + W [64][32] +per k32 step, ldmatrix fragments, grid (N / 64, ceil(rows / 64)). + +python gemm2_e4m3.py out.ptx [maxregs] flags: RES=1 SILU=2 E4=4 F16=8 +""" +import sys +from ptxgen import Ptx +from swin import * + +F_RES, F_SILU, F_E4, F_F16 = 1, 2, 4, 8 +THREADS = 128 +BM, BN = 64, 64 +STAGES = 3 +STAGE_BYTES = (BM + BN) * 32 + + +def generate(K, flags, max_regs=None, stagesWanted=STAGES, ksub=1, ws=False): + """ws: warp-specialized copies - warp 4 issues every cp.async (the LSU accepts ~16 B/cycle per SM and a + cp.async issue blocks the issuing warp), warps 0..3 only run ldmatrix + MMA; the stages hand over through + named barriers FULL(slot) / EMPTY(slot). The launch has 160 threads (the PTX carries `// threads 160`).""" + assert K % (32 * ksub) == 0 + steps = K // (32 * ksub) # pipeline stages of ksub k32 tiles each + stages = min(stagesWanted, steps) + assert not ws or stages >= 2 + STAGE_BYTES = ksub * (BM + BN) * 32 + res, siluF, outE4, outF16 = bool(flags & F_RES), bool(flags & F_SILU), bool(flags & F_E4), bool(flags & F_F16) + assert outE4 or outF16 + name = f"gemm2_e4m3_K{K}_f{flags}" + (f"_s{ksub}" if ksub != 1 else "") + RESS = stages * STAGE_BYTES # residual E4 tile [64][64 B] (4 KB), then the E4 output tile + shared_bytes = RESS + 4096 + NT = THREADS + 32 if ws else THREADS # + the copy warp + p = Ptx() + if ws: p.lines.append(f"// threads {NT}") + params = [("u64", "pA"), ("u64", "pW"), ("u64", "pRes"), ("u64", "pAux"), ("u64", "pOut"), ("u64", "pOut16"), + ("u32", "rows"), ("u32", "inputStride"), ("u32", "inputColumnBase"), ("u32", "Nmatrix"), + ("u32", "weightColumnOffset"), ("u32", "outputStride"), ("u32", "outputColumnOffset"), ("u32", "auxHalfOffset"), + ("u64", "pWaitRows"), ("u32", "waitExpected"), ("u32", "waitShiftY"), ("u64", "pSignal"), ("u32", "width"), + ("u64", "pWaitBands"), ("u32", "waitMul"), ("u32", "waitGroupRows"), ("u64", "pError")] # chaining (0 = off) + p.entry(name, params, shared_bytes, NT, max_regs) + P = {n: (p.load_param_u64(n) if t == "u64" else p.load_param_u32(n)) for t, n in params} + tid = p.special("tid.x"); colGroup = p.special("ctaid.x"); rowGroup = p.special("ctaid.y") + BAR = f"bar.sync 0, {NT};" # every thread of the workgroup (the copy warp included) + BARC = "bar.sync 0, 128;" # the four MMA warps only + lane = p.and32(tid, 31); warp = p.shr32(tid, 5) + li = LaneInfo(p, lane) + g, t = li.g, li.t + smem = p.shared_addr(p.imm32(0)) + zero = imm(p, 0) + blockRow = p.shl32(rowGroup, 6) + colBase = p.shl32(colGroup, 6) # output column of this workgroup's 64 columns + rowsMinus1 = p.sub32(P["rows"], 1) + # ---- chaining: wait for the window rows covering this workgroup's rows (the attention output), signal row bands + rowLast = p.add32(blockRow, p.imm32(BM - 1)) + pLastBig = p.setp("gt.u32", rowLast, rowsMinus1) + rowLast = p.selp32(pLastBig, rowsMinus1, rowLast) + yFirst = p.reg("b32"); p.emit(f"div.u32 {yFirst}, {blockRow}, {P['width']};") + yLast = p.reg("b32"); p.emit(f"div.u32 {yLast}, {rowLast}, {P['width']};") + pWaitRowsOn = p.setp("ne.u64", P["pWaitRows"], 0) + wy0 = p.shr32(p.add32(yFirst, P["waitShiftY"]), 3); wy1 = p.shr32(p.add32(yLast, P["waitShiftY"]), 3) + sync_wait(p, P["pWaitRows"], wy0, wy1, P["waitExpected"], lane, pWaitRowsOn, warp, error64=P["pError"]) + bandFirst = p.shr32(yFirst, 3); bandLast = p.shr32(yLast, 3) + pWaitBandsOn = p.setp("ne.u64", P["pWaitBands"], 0) + sync_wait(p, P["pWaitBands"], bandFirst, bandLast, lambda b: band_expected(p, b, P["width"], P["rows"], P["waitMul"], P["waitGroupRows"]), lane, pWaitBandsOn, warp, error64=P["pError"]) + + # ---- cp.async chunks: 256 per stage (A rows 0..63 x 2 chunks, then W rows) = 2 per thread (8 per lane of the + # copy warp); chunk ^= (row >> 2) & 1 + copies = [] + copyLane = p.and32(tid, 31) + for i in range(8 if ws else 2): + c = p.add32(copyLane, i * 32) if ws else p.add32(tid, i * THREADS) + isA = p.setp("lt.u32", c, BM * 2) + row = p.shr32(c, 1); chunk = p.and32(c, 1) + pch = p.xor32(chunk, p.and32(p.shr32(row, 2), 1)) + dstA = p.add32(p.shl32(row, 5), p.shl32(pch, 4)) + gRow = p.add32(blockRow, row) + gRowC = p.selp32(p.setp("lt.u32", gRow, P["rows"]), gRow, rowsMinus1) + aOff = p.add32(p.mul32(gRowC, P["inputStride"]), p.add32(P["inputColumnBase"], p.shl32(chunk, 4))) + srcA = p.add64(P["pA"], p.widen(aOff)) + cB = p.sub32(c, BM * 2) + n = p.shr32(cB, 1); chunkB = p.and32(cB, 1) + pchB = p.xor32(chunkB, p.and32(p.shr32(n, 2), 1)) + dstB = p.add32(BM * 32, p.add32(p.shl32(n, 5), p.shl32(pchB, 4))) + wRow = p.add32(P["weightColumnOffset"], p.add32(colBase, n)) + srcB = p.add64(P["pW"], p.widen(p.add32(p.shl32(wRow, 5), p.shl32(chunkB, 4)))) + dst = p.selp32(isA, dstA, dstB) + src = p.reg("b64"); p.emit(f"selp.b64 {src}, {srcA}, {srcB}, {isA};") + adv = p.selp32(isA, p.imm32(32), p.shl32(P["Nmatrix"], 5)) # per k32 step: A +32 B, W +Nmatrix*32 B + copies.append((dst, src, adv)) + + def issue_stage(stageIndex, step): + for sub in range(ksub): + for dst, src, adv in copies: + saddr = p.add32(p.add32(smem, dst), p.imm32(stageIndex * STAGE_BYTES + sub * (BM + BN) * 32)) + gaddr = p.mad_wide(adv, p.imm32(step * ksub + sub), src) + p.emit(f"cp.async.cg.shared.global [{saddr}], [{gaddr}], 16;") + p.emit("cp.async.commit_group;") + + l8 = p.and32(lane, 7); lm = p.shr32(lane, 3) + aRowL = p.add32(l8, p.shl32(p.and32(lm, 1), 3)); aChunkL = p.shr32(lane, 4) + aPch = p.xor32(aChunkL, p.and32(p.shr32(aRowL, 2), 1)) + aLane = p.add32(smem, p.add32(p.shl32(p.add32(aRowL, p.shl32(warp, 4)), 5), p.shl32(aPch, 4))) + bNL = p.add32(l8, p.shl32(p.shr32(lane, 4), 3)); bChunkL = p.and32(lm, 1) + bPch = p.xor32(bChunkL, p.and32(p.shr32(bNL, 2), 1)) + bLane = p.add32(smem, p.add32(BM * 32, p.add32(p.shl32(bNL, 5), p.shl32(bPch, 4)))) + + # ---- output rows of this warp: g and g + 8 + outRow = [p.add32(blockRow, p.add32(p.shl32(warp, 4), p.add32(g, p.imm32(8 * h)))) for h in range(2)] + rowOk = [p.setp("lt.u32", outRow[h], P["rows"]) for h in range(2)] + outCol = p.add32(P["outputColumnOffset"], p.add32(colBase, p.shl32(t, 1))) # + 8 j + outIdx = [p.add32(p.mul32(outRow[h], P["outputStride"]), outCol) for h in range(2)] # element index + + # tile row / chunk of this thread for the 64 x 64 B residual / output tiles: 256 chunks, 2 per thread (the copy + # warp: 8 per lane for the residual) + def tile_chunks(count, base): + out = [] + for i in range(count): + c = p.add32(base, i * (256 // count)) + row = p.shr32(c, 2); chunk = p.and32(c, 3) + gRow = p.add32(blockRow, row) + ok = p.setp("lt.u32", gRow, P["rows"]) + gOff = p.add32(p.mul32(gRow, P["outputStride"]), p.add32(P["outputColumnOffset"], p.add32(colBase, p.shl32(chunk, 4)))) + out.append((p.add32(p.shl32(row, 6), p.shl32(chunk, 4)), gOff, ok)) + return out + tileChunks = tile_chunks(2, tid) + resChunks = tile_chunks(8, copyLane) if ws else tileChunks + + def issue_residual(): + # residual tile through shared memory (16-byte copies), then the C-layout pairs + for sOff, gOff, ok in resChunks: + saddr = p.add32(p.add32(smem, sOff), p.imm32(RESS)) + gaddr = p.add64(P["pRes"], p.widen(gOff)) + p.emit(f"@{ok} cp.async.cg.shared.global [{saddr}], [{gaddr}], 16;") + + acc = [] + if res: + auxAddr = p.add64(P["pAux"], p.widen(p.shl32(p.add32(P["auxHalfOffset"], p.add32(colBase, p.shl32(t, 1))), 1))) + scales = [] + for j in range(8): + r = p.reg("b32"); p.emit(f"ld.global.nc.b32 {r}, [{auxAddr}+{16 * j}];"); scales.append(r) + + def seed_from_residual(): + cRes = p.add32(p.add32(smem, RESS), p.add32(p.shl32(p.add32(p.shl32(warp, 4), g), 6), p.shl32(t, 1))) + for j in range(8): + d = [] + for h in range(2): + hc = p.reg("b16"); p.emit(f"ld.shared.b16 {hc}, [{cRes}+{8 * j + 512 * h}];") + d.append(hmul2(p, e4x2_to_f16x2(p, hc), scales[j])) + acc.append(d) + + if ws: + # ---- the copy warp: residual + stage 0 as group 0, stages 1 .. S-2, then one stage per step; FULL(slot) + # once the group landed, EMPTY(slot) before a slot is refilled. Barrier ids: FULL 1.., EMPTY 1 + stages .. + FULL = lambda slot: 1 + slot + EMPTY = lambda slot: 1 + stages + slot + pProducer = p.setp("ge.u32", tid, 128) + prodL = p.label("PRODUCER"); epiL = p.label("EPILOGUE") + p.emit(f"@{pProducer} bra {prodL};") + # ---- the MMA warps + if not res: acc = [zero_tile(p) for _ in range(8)] + for step in range(steps): + stageIndex = step % stages + p.emit(f"bar.sync {FULL(stageIndex)}, {NT};") + if step == 0 and res: seed_from_residual() + for sub in range(ksub): + subOff = stageIndex * STAGE_BYTES + sub * (BM + BN) * 32 + a = ldm4(p, p.add32(aLane, subOff)) + rr = [ldm4(p, p.add32(bLane, subOff + i2 * 512)) for i2 in range(4)] + for i2 in range(4): + r = rr[i2] + mma_e4(p, acc[2 * i2], a, (r[0], r[1]), acc[2 * i2]) + mma_e4(p, acc[2 * i2 + 1], a, (r[2], r[3]), acc[2 * i2 + 1]) + if step + stages < steps: # the slot is refilled with stage step + stages + p.emit(f"bar.arrive {EMPTY(stageIndex)}, {NT};") + p.emit(f"bra {epiL};") + # ---- the copy warp + p.emit(f"{prodL}:") + if res: issue_residual() + issue_stage(0, 0) # commits group 0 + for s in range(1, stages - 1): + issue_stage(s, s) + for step in range(steps): + j = step + stages - 1 + if j < steps: + if j >= stages: p.emit(f"bar.sync {EMPTY(j % stages)}, {NT};") + issue_stage(j % stages, j) + committed = min(j, steps - 1) + 1 # groups 0 .. min(j, steps - 1) + p.emit(f"cp.async.wait_group {committed - 1 - step};") # group `step` landed + p.emit(f"bar.arrive {FULL(step % stages)}, {NT};") + p.emit("ret;") + p.emit(f"{epiL}:") + else: + if res: + issue_residual() + p.emit("cp.async.commit_group;") + for s in range(max(stages - 1, 1)): # stages == 1 (K = 32): the only step is issued here + issue_stage(s, s) + # accumulator seed: round_f16(E4 residual * scale) at the output location + if res: + p.emit(f"cp.async.wait_group {stages - 1};") # the residual group (the oldest) has landed + p.emit("bar.sync 0;") + seed_from_residual() + else: + acc = [zero_tile(p) for _ in range(8)] + + for step in (range(steps) if not ws else []): + stageIndex = step % stages + p.emit(f"cp.async.wait_group {max(stages - 2, 0)};") + p.emit("bar.sync 0;") + if stages > 1 and step + stages - 1 < steps: + issue_stage((step + stages - 1) % stages, step + stages - 1) + elif stages > 1: + p.emit("cp.async.commit_group;") + for sub in range(ksub): + subOff = stageIndex * STAGE_BYTES + sub * (BM + BN) * 32 + a = ldm4(p, p.add32(aLane, subOff)) + rr = [ldm4(p, p.add32(bLane, subOff + i2 * 512)) for i2 in range(4)] + for i2 in range(4): + r = rr[i2] + mma_e4(p, acc[2 * i2], a, (r[0], r[1]), acc[2 * i2]) + mma_e4(p, acc[2 * i2 + 1], a, (r[2], r[3]), acc[2 * i2 + 1]) + # ---- epilogue + if siluF: + k = SiluConsts(p) + for j in range(8): + for h in range(2): + acc[j][h] = silu(p, acc[j][h], k) + p.emit(BARC) # every MMA warp finished the last stage (the ring becomes the f16 output tile) + cOut = p.add32(p.add32(smem, RESS), p.add32(p.shl32(p.add32(p.shl32(warp, 4), g), 6), p.shl32(t, 1))) + if outF16: + # f16 tile [64][128 B] in the ring area, then 16-byte stores (512 chunks, 4 per thread) + cOut16 = p.add32(smem, p.add32(p.shl32(p.add32(p.shl32(warp, 4), g), 7), p.shl32(t, 2))) + for j in range(8): + for h in range(2): + p.emit(f"st.shared.b32 [{cOut16}+{16 * j + 1024 * h}], {acc[j][h]};") + if outE4: + for j in range(8): + for h in range(2): + hc = cvt_e4x2(p, nanzero(p, acc[j][h], zero)) + p.emit(f"st.shared.b16 [{cOut}+{8 * j + 512 * h}], {hc};") + p.emit(BARC) + if outF16: + for i in range(4): + c = p.add32(tid, i * THREADS) + row = p.shr32(c, 3); chunk = p.and32(c, 7) + gRow = p.add32(blockRow, row) + ok = p.setp("lt.u32", gRow, P["rows"]) + gOff = p.add32(p.mul32(gRow, P["outputStride"]), p.add32(P["outputColumnOffset"], p.add32(colBase, p.shl32(chunk, 3)))) + r = p.regs("b32", 4) + p.emit(f"ld.shared.v4.b32 {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}}, [{p.add32(smem, p.add32(p.shl32(row, 7), p.shl32(chunk, 4)))}];") + addr = p.add64(P["pOut16"], p.widen(p.shl32(gOff, 1))) + p.emit(f"@{ok} st.global.v4.b32 [{addr}], {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}};") + if outE4: + for sOff, gOff, ok in tileChunks: + r = p.regs("b32", 4) + p.emit(f"ld.shared.v4.b32 {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}}, [{p.add32(p.add32(smem, sOff), p.imm32(RESS))}];") + addr = p.add64(P["pOut"], p.widen(gOff)) + p.emit(f"@{ok} st.global.v4.b32 [{addr}], {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}};") + pSignalOn = p.setp("ne.u64", P["pSignal"], 0) + p.emit("fence.acq_rel.gpu;") + p.emit(BARC) + pT0 = p.reg("pred"); p.emit(f"and.pred {pT0}, {pSignalOn}, {p.setp('eq.u32', tid, 0)};") + bIter = p.reg("b32"); p.emit(f"mov.u32 {bIter}, {bandFirst};") + sigLoop = p.label("SIG"); sigDone = p.label("SIGDONE") + p.emit(f"@!{pT0} bra {sigDone};") + p.emit(f"{sigLoop}:") + sigAddr = p.add64(P["pSignal"], p.widen(p.shl32(bIter, 2))) + p.emit(f"red.release.gpu.global.add.u32 [{sigAddr}], 1;") + p.emit(f"add.u32 {bIter}, {bIter}, 1;") + pMoreB = p.setp("le.u32", bIter, bandLast) + p.emit(f"@{pMoreB} bra {sigLoop};") + p.emit(f"{sigDone}:") + p.emit("ret;") + return name, p.finish() + + +if __name__ == "__main__": + K, flags, out = int(sys.argv[1]), int(sys.argv[2]), sys.argv[3] + max_regs = int(sys.argv[4]) if len(sys.argv) > 4 else None + stagesWanted = int(sys.argv[5]) if len(sys.argv) > 5 else STAGES + ksub = int(sys.argv[6]) if len(sys.argv) > 6 else 1 + ws = len(sys.argv) > 7 and int(sys.argv[7]) != 0 + name, text = generate(K, flags, max_regs, stagesWanted, ksub, ws) + open(out, "w").write(text) + print(name) diff --git a/third_party/opendlss-nr/scripts/ptx/gemmt_e4m3.py b/third_party/opendlss-nr/scripts/ptx/gemmt_e4m3.py new file mode 100644 index 000000000..c9ad8a7e9 --- /dev/null +++ b/third_party/opendlss-nr/scripts/ptx/gemmt_e4m3.py @@ -0,0 +1,210 @@ +"""Tall-tile FP8 GEMM for the few-row stages (ViT: 192 tokens): 192 x 64 output tiles (12 warps), partitions and +split-K whose partial sums are added in partition order, which is the association the unsplit chain has. + +D = A[rows][K] x W (E4, k32-tile-major [K/32][Nmatrix][32]), f16 accumulation chained in K order per partition: +total = ((seed + chain_0) + chain_1) + ... where chain_p is the MMA chain over partition p (PARTITION k values) and +seed = round_f16(E4 residual * scale) (flag RES; split 0 only). Split-K: workgroup z runs partitions +[z * partsPerSplit, (z + 1) * partsPerSplit) and stores its f16 total to the partial buffer slice z; the reduce +kernel sums the slices in order and publishes (that is `total = total + acc` of gemm_fp8 / gemm_reduce). +Without splits the epilogue publishes directly: SILU, E4 and / or F16 outputs. +The weight tile (2 KB) is read once per row group: for 192-row problems the operand traffic is the weights once +plus A once per column group. + +python gemmt_e4m3.py out.ptx [maxregs] flags: RES=1 SILU=2 E4=4 F16=8 +""" +import sys +from ptxgen import Ptx +from swin import * + +F_RES, F_SILU, F_E4, F_F16 = 1, 2, 4, 8 +BM, BN = 192, 64 +WARPS = BM // 16 +THREADS = 32 * WARPS +STAGES = 3 +STAGE_BYTES = (BM + BN) * 32 # 8 KB + + +PREFETCH = 8 # weight k32 steps prefetched into L2 ahead of the cp.async issue (DRAM latency hiding) + +def generate(K, flags, partSteps, splits, max_regs=None, stagesWanted=STAGES, prefetch=PREFETCH): + assert K % 32 == 0 + steps = K // 32 + if partSteps == 0: partSteps = steps + assert steps % partSteps == 0 and (splits == 1 or steps == partSteps * splits) # split-K: one partition per split + stepsPerSplit = steps // splits + stages = min(stagesWanted, stepsPerSplit) + res, siluF, outE4, outF16 = bool(flags & F_RES), bool(flags & F_SILU), bool(flags & F_E4), bool(flags & F_F16) + name = f"gemmt_e4m3_K{K}_f{flags}_p{partSteps}_s{splits}" + RING = 0 + OUTS = 0 # the output tile aliases the ring after the loop + hasF16 = splits > 1 or outF16 + E4OFF = BM * 128 if hasF16 else 0 # the E4 tile [192][64 B] follows the f16 tile [192][128 B] or aliases the ring + shared_bytes = max(stages * STAGE_BYTES, BM * 128 if hasF16 else 0) + (BM * 64 if (outE4 and splits == 1 and hasF16) else 0) + assert shared_bytes >= E4OFF + BM * 64 or not (outE4 and splits == 1) + p = Ptx() + params = [("u64", "pA"), ("u64", "pW"), ("u64", "pRes"), ("u64", "pAux"), ("u64", "pOut"), ("u64", "pOut16"), + ("u32", "rows"), ("u32", "inputStride"), ("u32", "inputColumnBase"), ("u32", "Nmatrix"), + ("u32", "weightColumnOffset"), ("u32", "outputStride"), ("u32", "outputColumnOffset"), ("u32", "auxHalfOffset"), + ("u32", "splitStride")] + p.entry(name, params, shared_bytes, THREADS, max_regs, dynamic_shared=True) + P = {n: (p.load_param_u64(n) if t == "u64" else p.load_param_u32(n)) for t, n in params} + tid = p.special("tid.x"); colGroup = p.special("ctaid.x"); rowGroup = p.special("ctaid.y"); split = p.special("ctaid.z") + lane = p.and32(tid, 31); warp = p.shr32(tid, 5) + li = LaneInfo(p, lane) + g, t = li.g, li.t + smem = p.shared_addr(p.imm32(0)) + zero = imm(p, 0) + blockRow = p.mul32(rowGroup, BM) + colBase = p.shl32(colGroup, 6) + rowsMinus1 = p.sub32(P["rows"], 1) + kStep0 = p.mul32(split, stepsPerSplit) # first k32 step of this split + + # ---- cp.async chunks per stage: A 384 (one per thread), W 128 (threads < 128); chunk ^= (row >> 2) & 1 + aRow = p.shr32(tid, 1); aChunk = p.and32(tid, 1) + aPch = p.xor32(aChunk, p.and32(p.shr32(aRow, 2), 1)) + aDst = p.add32(p.shl32(aRow, 5), p.shl32(aPch, 4)) + gRow = p.add32(blockRow, aRow) + gRowC = p.selp32(p.setp("lt.u32", gRow, P["rows"]), gRow, rowsMinus1) + aSrc = p.add64(P["pA"], p.widen(p.add32(p.mul32(gRowC, P["inputStride"]), p.add32(P["inputColumnBase"], p.shl32(aChunk, 4))))) + pB = p.setp("lt.u32", tid, 128) + n = p.shr32(tid, 1); bChunk = p.and32(tid, 1) + bPchC = p.xor32(bChunk, p.and32(p.shr32(n, 2), 1)) + bDst = p.add32(BM * 32, p.add32(p.shl32(n, 5), p.shl32(bPchC, 4))) + wRow = p.add32(P["weightColumnOffset"], p.add32(colBase, n)) + bSrc = p.add64(P["pW"], p.widen(p.add32(p.shl32(wRow, 5), p.shl32(bChunk, 4)))) + wStep = p.shl32(P["Nmatrix"], 5) + # L2 prefetch of the weight tile `prefetch` steps ahead of its cp.async: the 2 KB tile is 16 lines, threads 0..15 + pPf = p.setp("lt.u32", tid, 16) + pfBase = p.add64(P["pW"], p.widen(p.add32(p.shl32(p.add32(P["weightColumnOffset"], colBase), 5), p.shl32(tid, 7)))) + + def prefetch_step(stepLocal): + if not prefetch or stepLocal >= stepsPerSplit: return + stepG = p.add32(kStep0, p.imm32(stepLocal)) + p.emit(f"@{pPf} prefetch.global.L2 [{p.mad_wide(wStep, stepG, pfBase)}];") + + def issue_stage(stageIndex, stepLocal): + stepG = p.add32(kStep0, p.imm32(stepLocal)) + sa = p.add32(p.add32(smem, aDst), p.imm32(RING + stageIndex * STAGE_BYTES)) + ga = p.add64(aSrc, p.widen(p.shl32(stepG, 5))) + p.emit(f"cp.async.cg.shared.global [{sa}], [{ga}], 16;") + sb = p.add32(p.add32(smem, bDst), p.imm32(RING + stageIndex * STAGE_BYTES)) + gb = p.mad_wide(wStep, stepG, bSrc) + p.emit(f"@{pB} cp.async.cg.shared.global [{sb}], [{gb}], 16;") + p.emit("cp.async.commit_group;") + prefetch_step(stepLocal + prefetch) + + l8 = p.and32(lane, 7); lm = p.shr32(lane, 3) + aRowL = p.add32(l8, p.shl32(p.and32(lm, 1), 3)); aChunkL = p.shr32(lane, 4) + aPchL = p.xor32(aChunkL, p.and32(p.shr32(aRowL, 2), 1)) + aLane = p.add32(smem, p.add32(p.shl32(p.add32(aRowL, p.shl32(warp, 4)), 5), p.shl32(aPchL, 4))) + bNL = p.add32(l8, p.shl32(p.shr32(lane, 4), 3)); bChunkL = p.and32(lm, 1) + bPchL = p.xor32(bChunkL, p.and32(p.shr32(bNL, 2), 1)) + bLane = p.add32(smem, p.add32(BM * 32, p.add32(p.shl32(bNL, 5), p.shl32(bPchL, 4)))) + + outRow = [p.add32(blockRow, p.add32(p.shl32(warp, 4), p.add32(g, p.imm32(8 * h)))) for h in range(2)] + rowOk = [p.setp("lt.u32", outRow[h], P["rows"]) for h in range(2)] + outCol = p.add32(P["outputColumnOffset"], p.add32(colBase, p.shl32(t, 1))) + outIdx = [p.add32(p.mul32(outRow[h], P["outputStride"]), outCol) for h in range(2)] + + for s in range(max(stages - 1, 1), max(stages - 1, 1) + prefetch): + prefetch_step(s) + for s in range(max(stages - 1, 1)): + issue_stage(s, s) + # ---- accumulators: partition chain `acc`, running `total`; the seed only in split 0's first partition + acc = [zero_tile(p) for _ in range(8)] + if res: + pSeed = p.setp("eq.u32", split, 0) + auxAddr = p.add64(P["pAux"], p.widen(p.shl32(p.add32(P["auxHalfOffset"], p.add32(colBase, p.shl32(t, 1))), 1))) + scales = [] + for j in range(8): + r = p.reg("b32"); p.emit(f"ld.global.nc.b32 {r}, [{auxAddr}+{16 * j}];"); scales.append(r) + resAddr = [p.add64(P["pRes"], p.widen(outIdx[h])) for h in range(2)] + for j in range(8): + for h in range(2): + hc = p.reg("b16"); p.emit(f"mov.b16 {hc}, 0;") + pr = p.reg("pred"); p.emit(f"and.pred {pr}, {rowOk[h]}, {pSeed};") + p.emit(f"@{pr} ld.global.cg.b16 {hc}, [{resAddr[h]}+{8 * j}];") + v = hmul2(p, e4x2_to_f16x2(p, hc), scales[j]) + p.emit(f"mov.b32 {acc[j][h]}, {v};") + total = [zero_tile(p) for _ in range(8)] + for step in range(stepsPerSplit): + stageIndex = step % stages + p.emit(f"cp.async.wait_group {max(stages - 2, 0)};") + p.emit("bar.sync 0;") + if stages > 1 and step + stages - 1 < stepsPerSplit: + issue_stage((step + stages - 1) % stages, step + stages - 1) + elif stages > 1: + p.emit("cp.async.commit_group;") + a = ldm4(p, p.add32(aLane, stageIndex * STAGE_BYTES)) + for i2 in range(4): + r = ldm4(p, p.add32(bLane, stageIndex * STAGE_BYTES + i2 * 512)) + mma_e4(p, acc[2 * i2], a, (r[0], r[1]), acc[2 * i2]) + mma_e4(p, acc[2 * i2 + 1], a, (r[2], r[3]), acc[2 * i2 + 1]) + # partition boundary: total = (first partition of this split ? acc : total + acc); acc = 0 + if (step + 1) % partSteps == 0: + firstPart = (step + 1) // partSteps == 1 + for j in range(8): + for h in range(2): + if firstPart: + p.emit(f"mov.b32 {total[j][h]}, {acc[j][h]};") + else: + s2 = hadd2(p, total[j][h], acc[j][h]); p.emit(f"mov.b32 {total[j][h]}, {s2};") + p.emit(f"mov.b32 {acc[j][h]}, 0;") + # ---- epilogue (the ring is dead after this barrier: the output tile aliases it) + if siluF and splits == 1: + k = SiluConsts(p) + for j in range(8): + for h in range(2): + total[j][h] = silu(p, total[j][h], k) + p.emit("bar.sync 0;") + if splits > 1 or outF16: + # f16 tile [192][128 B] then 16-byte stores (1536 chunks, 4 per thread) + cOut16 = p.add32(smem, p.add32(p.shl32(p.add32(p.shl32(warp, 4), g), 7), p.shl32(t, 2))) + for j in range(8): + for h in range(2): + p.emit(f"st.shared.b32 [{cOut16}+{16 * j + 1024 * h}], {total[j][h]};") + if outE4 and splits == 1: + cOut = p.add32(smem, p.add32(p.imm32(E4OFF), p.add32(p.shl32(p.add32(p.shl32(warp, 4), g), 6), p.shl32(t, 1)))) + for j in range(8): + for h in range(2): + hc = cvt_e4x2(p, total[j][h]) + p.emit(f"st.shared.b16 [{cOut}+{8 * j + 512 * h}], {hc};") + p.emit("bar.sync 0;") + if splits > 1 or outF16: + dst16 = P["pOut16"] + if splits > 1: + dst16 = p.add64(dst16, p.widen(p.shl32(p.mul32(split, P["splitStride"]), 1))) + for i in range(4): + c = p.add32(tid, i * THREADS) + row = p.shr32(c, 3); chunk = p.and32(c, 7) + gRowO = p.add32(blockRow, row) + ok = p.setp("lt.u32", gRowO, P["rows"]) + r = p.regs("b32", 4) + p.emit(f"ld.shared.v4.b32 {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}}, [{p.add32(smem, p.add32(p.shl32(row, 7), p.shl32(chunk, 4)))}];") + # splits > 1: the host passes outputStride = N, outputColumnOffset = 0 (the partial slice layout) + gOff = p.add32(p.mul32(gRowO, P["outputStride"]), p.add32(P["outputColumnOffset"], p.add32(colBase, p.shl32(chunk, 3)))) + addr = p.add64(dst16, p.widen(p.shl32(gOff, 1))) + p.emit(f"@{ok} st.global.v4.b32 [{addr}], {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}};") + if outE4 and splits == 1: + for i in range(2): # 768 chunks of 16 B: 2 per thread + c = p.add32(tid, i * THREADS) + row = p.shr32(c, 2); chunk = p.and32(c, 3) + gRowO = p.add32(blockRow, row) + ok = p.setp("lt.u32", gRowO, P["rows"]) + r = p.regs("b32", 4) + p.emit(f"ld.shared.v4.b32 {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}}, [{p.add32(smem, p.add32(p.imm32(E4OFF), p.add32(p.shl32(row, 6), p.shl32(chunk, 4))))}];") + gOff = p.add32(p.mul32(gRowO, P["outputStride"]), p.add32(P["outputColumnOffset"], p.add32(colBase, p.shl32(chunk, 4)))) + addr = p.add64(P["pOut"], p.widen(gOff)) + p.emit(f"@{ok} st.global.v4.b32 [{addr}], {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}};") + p.emit("ret;") + return name, p.finish(), shared_bytes + + +if __name__ == "__main__": + K, flags, partSteps, splits, out = int(sys.argv[1]), int(sys.argv[2]), int(sys.argv[3]), int(sys.argv[4]), sys.argv[5] + max_regs = int(sys.argv[6]) if len(sys.argv) > 6 else None + stagesWanted = int(sys.argv[7]) if len(sys.argv) > 7 else STAGES + prefetch = int(sys.argv[8]) if len(sys.argv) > 8 else PREFETCH + name, text, shared = generate(K, flags, partSteps, splits, max_regs, stagesWanted, prefetch) + open(out, "w").write(text) + print(name, shared) diff --git a/third_party/opendlss-nr/scripts/ptx/gemmv_e4m3.py b/third_party/opendlss-nr/scripts/ptx/gemmv_e4m3.py new file mode 100644 index 000000000..117a00746 --- /dev/null +++ b/third_party/opendlss-nr/scripts/ptx/gemmv_e4m3.py @@ -0,0 +1,332 @@ +"""ViT FP8 GEMM (the few-row stages: 192 tokens): 192 x 128 output tiles, 8 warps of 48 x 64 (3 m-tiles x 8 n-tiles, +24 MMAs per 7 ldmatrix; two warps per sub-partition so one warp's loads hide behind the other's MMAs), one f16 MMA +chain per workgroup (the whole K, or one partition per split-K workgroup). + +D = A[rows][K] x W (E4, k32-tile-major [K/32][Nmatrix][32]); total = ((seed + chain_0) + chain_1) + ... where chain_z +is split z's chain and seed = round_f16(E4 residual * scale) in split 0 (flag RES). Split-K partials are stored in +fragment order (one 128-byte line per warp store) and summed in slice order by the last-arriving workgroup of the +column group (a per-tile counter, zeroed per frame), which then publishes: SILU, E4 and / or F16 outputs. That is +gemm_fp8's `total = total + acc` and gemm_reduce's slice order. + +Operand staging: an A ring (stages x 6 KB; the activations are L2-resident) and a deeper weight ring (bstages x 4 KB; +the DRAM stream), one cp.async group per k32 step; the fragments of the next step are loaded while the current +step's MMAs run (the ring keeps two complete stages). Chaining: the weight staging (and an optional L2 prefetch) +starts before the wait for `waitExpected` signals at pWait; pSignal is incremented once per published column group. + +python gemmv_e4m3.py out.ptx [stages] [bstages] [prefetch] [maxregs] [prefetch0] [BM] + flags: RES=1 SILU=2 E4=4 F16=8 +""" +import sys +from ptxgen import Ptx +from swin import * + +F_RES, F_SILU, F_E4, F_F16 = 1, 2, 4, 8 +BN = 128 +B_BYTES = BN * 32 # 4 KB per k32 step +STAGES, BSTAGES, PREFETCH = 6, 8, 0 +PREFETCH0 = 0 # weight tiles prefetched into L2 in the prologue beyond the staged ones (measured: hurts) + + +def generate(K, flags, splits, stages=STAGES, bstages=BSTAGES, prefetch=PREFETCH, max_regs=None, prefetch0=PREFETCH0, BM=192): + assert K % 32 == 0 and (K // 32) % splits == 0 + assert BM % 48 == 0 and (BM // 48) in (1, 2, 4) + rowQs = BM // 48 # 48-row warp quarters + WARPS, THREADS = 2 * rowQs, 64 * rowQs + A_BYTES = BM * 32 # per k32 step + RES_BYTES = BM * BN # the residual tile [BM][128 B] (E4) + PARTIAL_WG_BYTES = WARPS * 48 * 128 # the f16 partial in fragment order: [warp][48 tiles][32 lanes] x 4 B + steps = K // 32 // splits # k32 steps of this workgroup's chain + assert steps >= 3, "the fragment pipeline needs three stages" + stages = max(3, min(stages, steps)) + bstages = max(stages, min(bstages, steps)) + lead = bstages - stages # extra weight lead (steps) + res, siluF, outE4, outF16 = bool(flags & F_RES), bool(flags & F_SILU), bool(flags & F_E4), bool(flags & F_F16) + name = f"gemmv_e4m3_K{K}_f{flags}_s{splits}" + (f"_m{BM}" if BM != 192 else "") + A_RING, B_RING = 0, stages * A_BYTES + RES_OFF = B_RING + bstages * B_BYTES + ring_bytes = RES_OFF + (RES_BYTES if res else 0) + E4OFF = BM * 256 if (outE4 and outF16) else 0 # the E4 tile beside the f16 tile only for dual outputs + epilogue_bytes = max(BM * 256 if outF16 else 0, E4OFF + (BM * 128 if outE4 else 0)) + shared_bytes = max(ring_bytes, epilogue_bytes) + p = Ptx() + params = [("u64", "pA"), ("u64", "pW"), ("u64", "pRes"), ("u64", "pAux"), ("u64", "pOut"), ("u64", "pOut16"), + ("u64", "pPartial"), ("u64", "pCount"), + ("u32", "rows"), ("u32", "inputStride"), ("u32", "inputColumnBase"), ("u32", "Nmatrix"), + ("u32", "weightColumnOffset"), ("u32", "outputStride"), ("u32", "outputColumnOffset"), ("u32", "auxHalfOffset"), + ("u64", "pWait"), ("u32", "waitExpected"), ("u64", "pSignal"), ("u64", "pError")] + p.entry(name, params, shared_bytes, THREADS, max_regs, dynamic_shared=True) + P = {n: (p.load_param_u64(n) if t == "u64" else p.load_param_u32(n)) for t, n in params} + tid = p.special("tid.x"); colGroup = p.special("ctaid.x"); rowGroup = p.special("ctaid.y"); split = p.special("ctaid.z") + colGroups = p.special("nctaid.x"); rowGroups = p.special("nctaid.y") + lane = p.and32(tid, 31); warp = p.shr32(tid, 5) + rowQ = p.and32(warp, rowQs - 1); colH = p.shr32(warp, {1: 0, 2: 1, 4: 2}[rowQs]) # the warp's 48-row quarter and 64-column half + li = LaneInfo(p, lane) + g, t = li.g, li.t + smem = p.shared_addr(p.imm32(0)) + blockRow = p.mul32(rowGroup, p.imm32(BM)) + colBase = p.shl32(colGroup, p.imm32(7)) + warpCol = p.add32(colBase, p.shl32(colH, p.imm32(6))) # first output column of this warp + rowsMinus1 = p.sub32(P["rows"], p.imm32(1)) + kStep0 = p.mul32(split, p.imm32(steps)) # first k32 step of this workgroup's chain + zero32 = p.imm32(0) + + # ---- cp.async chunks per step: A 2 BM (chunks tid + THREADS i), W 256; a row is two 16-byte chunks, + # chunk ^= (row >> 2) & 1 (conflict-free ldmatrix) + aChunk = p.and32(tid, 1) + aDst = []; aSrc = []; aPred = [] + for i in range((2 * BM + THREADS - 1) // THREADS): + aPred.append(p.setp("lt.u32", tid, p.imm32(2 * BM - THREADS * i)) if THREADS * (i + 1) > 2 * BM else None) + aRow = p.add32(p.shr32(tid, 1), p.imm32(THREADS // 2 * i)) + aPch = p.xor32(aChunk, p.and32(p.shr32(aRow, 2), 1)) + aDst.append(p.add32(smem, p.add32(p.shl32(aRow, 5), p.shl32(aPch, 4)))) + gRow = p.add32(blockRow, aRow) + gRowC = p.selp32(p.setp("lt.u32", gRow, P["rows"]), gRow, rowsMinus1) + base = p.add64(P["pA"], p.widen(p.add32(p.mul32(gRowC, P["inputStride"]), p.add32(P["inputColumnBase"], p.shl32(aChunk, 4))))) + aSrc.append(p.add64(base, p.widen(p.shl32(kStep0, 5)))) # + step * 32 per k32 step + wStep = p.shl32(P["Nmatrix"], 5) + wStep64 = p.widen(wStep) + bDst = []; bPtr = [] + for i in range(256 // THREADS): + c = p.add32(tid, p.imm32(THREADS * i)) + n = p.shr32(c, 1); bChunk = p.and32(c, 1) + bPch = p.xor32(bChunk, p.and32(p.shr32(n, 2), 1)) + bDst.append(p.add32(smem, p.add32(p.imm32(B_RING), p.add32(p.shl32(n, 5), p.shl32(bPch, 4))))) + wRow = p.add32(P["weightColumnOffset"], p.add32(colBase, n)) + bSrc = p.mad_wide(wStep, kStep0, p.add64(P["pW"], p.widen(p.add32(p.shl32(wRow, 5), p.shl32(bChunk, 4))))) + r = p.reg("b64"); p.emit(f"mov.b64 {r}, {bSrc};"); bPtr.append(r) # the next weight tile to stage (advances by wStep) + pPf = p.setp("lt.u32", tid, p.imm32(32)) # the 4 KB weight tile is 32 lines + pfBase = p.add64(P["pW"], p.widen(p.add32(p.shl32(p.add32(P["weightColumnOffset"], colBase), 5), p.shl32(tid, 7)))) + pfPtr = p.reg("b64"); p.emit(f"mad.wide.u32 {pfPtr}, {wStep}, {p.add32(kStep0, p.imm32(lead + stages - 1))}, {pfBase};") + bIssued = [0]; pfIssued = [lead + stages - 1] # prefetching starts beyond the staged prologue tiles + + def issue_A(stepLocal): + slot = stepLocal % stages + for i in range(len(aDst)): + guard = f"@{aPred[i]} " if aPred[i] is not None else "" + p.emit(f"{guard}cp.async.cg.shared.global [{aDst[i]}+{A_RING + slot * A_BYTES}], [{aSrc[i]}+{32 * stepLocal}], 16;") + + def issue_B(stepLocal): + assert stepLocal == bIssued[0] + bIssued[0] += 1 + slot = stepLocal % bstages + for i in range(len(bDst)): + p.emit(f"cp.async.cg.shared.global [{bDst[i]}+{slot * B_BYTES}], [{bPtr[i]}], 16;") + p.emit(f"add.u64 {bPtr[i]}, {bPtr[i]}, {wStep64};") + + def prefetch_B(stepLocal): + if stepLocal >= steps: return + assert stepLocal == pfIssued[0] + p.emit(f"@{pPf} prefetch.global.L2 [{pfPtr}];") + p.emit(f"add.u64 {pfPtr}, {pfPtr}, {wStep64};") + pfIssued[0] += 1 + + # ---- ldmatrix lane addresses (A: 16 rows x 32 B per m-tile of this warp's quarter; B: 16 columns per x4 of + # this warp's half) + l8 = p.and32(lane, 7); lm = p.shr32(lane, 3) + aRowL = p.add32(l8, p.shl32(p.and32(lm, 1), 3)); aChunkL = p.shr32(lane, 4) + aPchL = p.xor32(aChunkL, p.and32(p.shr32(aRowL, 2), 1)) + aLane = p.add32(smem, p.add32(p.shl32(p.add32(aRowL, p.mul32(rowQ, p.imm32(48))), 5), p.shl32(aPchL, 4))) + bNL = p.add32(l8, p.shl32(p.shr32(lane, 4), 3)); bChunkL = p.and32(lm, 1) + bPchL = p.xor32(bChunkL, p.and32(p.shr32(bNL, 2), 1)) + bLane = p.add32(smem, p.add32(p.imm32(B_RING), p.add32(p.shl32(p.add32(bNL, p.shl32(colH, 6)), 5), p.shl32(bPchL, 4)))) + def load_A(stepLocal): + slot = stepLocal % stages + return [ldm4(p, f"{aLane}+{A_RING + slot * A_BYTES + 512 * m}") for m in range(3)] + + def load_B(stepLocal, i2): + slot = stepLocal % bstages + return ldm4(p, f"{bLane}+{slot * B_BYTES + 512 * i2}") + + # output rows of this warp's tiles: 48 rowQ + 16 m + g + 8 h (row & 7 = g) + outRow = [[p.add32(blockRow, p.add32(p.mul32(rowQ, p.imm32(48)), p.add32(g, p.imm32(16 * m + 8 * h)))) for h in range(2)] for m in range(3)] + rowOk = [[p.setp("lt.u32", outRow[m][h], P["rows"]) for h in range(2)] for m in range(3)] + + # ---- cp.async groups: every step commits the weight group B(s + stages - 1 + lead) and then the A group + # A(s + stages - 1); wait_group 2 stages - 6 at the top of step s completes A(s + 1) and everything older, which + # includes B(s + 1) (committed `lead` steps earlier). The weights thus lead by stages - 2 + lead steps. + # Weight staging and L2 prefetch start before the dependency wait (the weights do not depend on the producer). + for s in range(lead + stages - 1, lead + stages - 1 + prefetch0 + prefetch): # the staged tiles need no prefetch + prefetch_B(s) + for s in range(min(lead, steps)): + issue_B(s) + p.emit("cp.async.commit_group;") + pWaitOn = p.setp("ne.u64", P["pWait"], "0") + sync_wait(p, P["pWait"], zero32, zero32, P["waitExpected"], lane, pWaitOn, warp, error64=P["pError"]) + if res: + # split 0 stages the residual tile [192][128 B] (16-byte chunk ^= row & 7) at RES_OFF, within group 0 + pSeed = p.setp("eq.u32", split, zero32) + for i in range(BM * 8 // THREADS): # BM x 8 chunks + c = p.add32(tid, p.imm32(THREADS * i)) + row = p.shr32(c, 3); chunk = p.and32(c, 7) + gRow = p.add32(blockRow, row) + ok = p.reg("pred"); p.emit(f"setp.lt.and.u32 {ok}, {gRow}, {P['rows']}, {pSeed};") + src = p.add64(P["pRes"], p.widen(p.add32(p.mul32(gRow, P["outputStride"]), p.add32(P["outputColumnOffset"], p.add32(colBase, p.shl32(chunk, 4)))))) + dst = p.add32(smem, p.add32(p.imm32(RES_OFF), p.add32(p.shl32(row, 7), p.shl32(p.xor32(chunk, p.and32(row, 7)), 4)))) + p.emit(f"@{ok} cp.async.cg.shared.global [{dst}], [{src}], 16;") + auxAddr = p.add64(P["pAux"], p.widen(p.shl32(p.add32(P["auxHalfOffset"], p.add32(warpCol, p.shl32(t, 1))), 1))) + scales = [] + for j in range(8): + r = p.reg("b32"); p.emit(f"ld.global.nc.b32 {r}, [{auxAddr}+{16 * j}];"); scales.append(r) + for s in range(stages - 1): + if s + lead < steps: issue_B(s + lead) + p.emit("cp.async.commit_group;") + issue_A(s) + p.emit("cp.async.commit_group;") + acc = [[zero_tile(p) for _ in range(8)] for _ in range(3)] + # ---- main loop: step s consumes stage s (fragments loaded during step s - 1), stages s and s + 1 are complete + # after the barrier; the issue refills the slots read at step s - 1 + A = B = None + for s in range(steps): + p.emit(f"cp.async.wait_group {2 * stages - 6};") + p.emit("bar.sync 0;") + if s == 0: + if res: + # the chain seed round_f16(residual * scale) from the staged tile (split 0 only) + resLane = p.add32(smem, p.add32(p.imm32(RES_OFF), p.shl32(t, 1))) + codes = {} + for m in range(3): + for h in range(2): + rowL = p.add32(p.mul32(rowQ, p.imm32(48)), p.add32(g, p.imm32(16 * m + 8 * h))) + rowOff = p.add32(resLane, p.shl32(rowL, 7)) + for j in range(8): + chunk = p.add32(p.shl32(p.xor32(p.add32(p.shl32(colH, 2), p.imm32(j >> 1)), g), 4), p.imm32(8 * (j & 1))) + hc = p.reg("b16"); p.emit(f"ld.shared.b16 {hc}, [{p.add32(rowOff, chunk)}];") + codes[m, h, j] = hc + for m in range(3): + for h in range(2): + for j in range(8): + v = hmul2(p, e4x2_to_f16x2(p, codes[m, h, j]), scales[j]) + p.emit(f"@{pSeed} mov.b32 {acc[m][j][h]}, {v};") + A = load_A(0); B = load_B(0, 0) + j = s + stages - 1 + def issue_step(): + if j + lead < steps: issue_B(j + lead) + if prefetch: prefetch_B(j + lead + prefetch0 + prefetch) + p.emit("cp.async.commit_group;") + if j < steps: issue_A(j) + p.emit("cp.async.commit_group;") + issue_step() # the step's copies right after the barrier + for i2 in range(4): + if i2 < 3: + Bn = load_B(s, i2 + 1) + elif s + 1 < steps: + An = load_A(s + 1); Bn = load_B(s + 1, 0) + for m in range(3): + mma_e4(p, acc[m][2 * i2], A[m], (B[0], B[1]), acc[m][2 * i2]) + mma_e4(p, acc[m][2 * i2 + 1], A[m], (B[2], B[3]), acc[m][2 * i2 + 1]) + B = Bn + if i2 == 3 and s + 1 < steps: A = An + p.emit("bar.sync 0;") # the ring is dead: the staging tiles alias it + endL = p.label("END") + + if splits > 1: + # the partial in fragment order: [split][rowGroup][colGroup][warp][m, j, h][lane] f16x2 (a line per store) + tileIndex = p.add32(colGroup, p.mul32(rowGroup, colGroups)) + tiles = p.mul32(rowGroups, colGroups) + sliceBytes = p.mul32(tiles, p.imm32(PARTIAL_WG_BYTES)) + tileBase = p.mad_wide(p.add32(p.mul32(tileIndex, p.imm32(WARPS)), warp), p.imm32(48 * 128), P["pPartial"]) + laneBase = p.add64(tileBase, p.widen(p.shl32(lane, 2))) # slice 0 of this tile / warp / lane + ownBase = p.mad_wide(sliceBytes, split, laneBase) + for m in range(3): + for j in range(8): + for h in range(2): + p.emit(f"st.global.b32 [{ownBase}+{(m * 16 + j * 2 + h) * 128}], {acc[m][j][h]};") + p.emit("fence.acq_rel.gpu;") + p.emit("bar.sync 0;") + pT0 = p.setp("eq.u32", tid, zero32) + countAddr = p.add64(P["pCount"], p.widen(p.shl32(tileIndex, 2))) + if splits > 1: + # last arrival of the column group reduces (threadfence reduction) + old = p.reg("b32"); p.emit(f"mov.u32 {old}, 0;") + p.emit(f"@{pT0} atom.acq_rel.gpu.global.add.u32 {old}, [{countAddr}], 1;") + p.emit(f"@{pT0} st.shared.u32 [{smem}], {old};") + p.emit("bar.sync 0;") + p.emit(f"ld.shared.u32 {old}, [{smem}];") + pLast = p.setp("eq.u32", old, p.imm32(splits - 1)) + p.emit(f"@!{pLast} bra {endL};") + p.emit("fence.acq_rel.gpu;") + total = [[[None, None] for _ in range(8)] for _ in range(3)] + for z in range(splits): + pIs = p.setp("eq.u32", split, p.imm32(z)) + pNot = p.reg("pred"); p.emit(f"not.pred {pNot}, {pIs};") + zBase = p.mad_wide(sliceBytes, p.imm32(z), laneBase) + loaded = {} + for m in range(3): # the slice's 48 loads first (independent), then the in-order sum + for j in range(8): + for h in range(2): + v = p.reg("b32"); p.emit(f"mov.b32 {v}, 0;") + p.emit(f"@{pNot} ld.global.cg.b32 {v}, [{zBase}+{(m * 16 + j * 2 + h) * 128}];") + loaded[m, j, h] = v + for m in range(3): + for j in range(8): + for h in range(2): + v = p.selp32(pIs, acc[m][j][h], loaded[m, j, h]) + total[m][j][h] = v if z == 0 else hadd2(p, total[m][j][h], v) + acc = total + # ---- publish + if siluF: + k = SiluConsts(p) + for m in range(3): + for j in range(8): + for h in range(2): + acc[m][j][h] = silu(p, acc[m][j][h], k) + if outF16: + # f16 tile [192][256 B], 16-byte chunk ^= row & 7 (= g for this warp's rows): conflict-free C stores + for m in range(3): + for h in range(2): + rowL = p.add32(p.mul32(rowQ, p.imm32(48)), p.add32(g, p.imm32(16 * m + 8 * h))) + rowOff = p.add32(smem, p.add32(p.shl32(rowL, 8), p.shl32(t, 2))) + for j in range(8): + chunk = p.shl32(p.xor32(p.add32(p.shl32(colH, 3), p.imm32(j)), g), 4) + p.emit(f"st.shared.b32 [{p.add32(rowOff, chunk)}], {acc[m][j][h]};") + if outE4: + # E4 tile [192][128 B], 16-byte chunk ^= row & 7 + for m in range(3): + for h in range(2): + rowL = p.add32(p.mul32(rowQ, p.imm32(48)), p.add32(g, p.imm32(16 * m + 8 * h))) + rowOff = p.add32(smem, p.add32(p.imm32(E4OFF), p.add32(p.shl32(rowL, 7), p.shl32(t, 1)))) + for j in range(8): + chunk = p.add32(p.shl32(p.xor32(p.add32(p.shl32(colH, 2), p.imm32(j >> 1)), g), 4), p.imm32(8 * (j & 1))) + hc = cvt_e4x2(p, acc[m][j][h]) + p.emit(f"st.shared.b16 [{p.add32(rowOff, chunk)}], {hc};") + p.emit("bar.sync 0;") + if outF16: + for i in range(BM * 16 // THREADS): # BM x 16 chunks of 16 B + c = p.add32(tid, p.imm32(THREADS * i)) + row = p.shr32(c, 4); chunk = p.and32(c, 15) + phys = p.add32(smem, p.add32(p.shl32(row, 8), p.shl32(p.xor32(chunk, p.and32(row, 7)), 4))) + r = p.regs("b32", 4) + p.emit(f"ld.shared.v4.b32 {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}}, [{phys}];") + gRowO = p.add32(blockRow, row) + ok = p.setp("lt.u32", gRowO, P["rows"]) + off = p.add32(p.mul32(gRowO, P["outputStride"]), p.add32(P["outputColumnOffset"], p.add32(colBase, p.shl32(chunk, 3)))) + p.emit(f"@{ok} st.global.v4.b32 [{p.add64(P['pOut16'], p.widen(p.shl32(off, 1)))}], {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}};") + if outE4: + for i in range(BM * 8 // THREADS): # BM x 8 chunks of 16 B + c = p.add32(tid, p.imm32(THREADS * i)) + row = p.shr32(c, 3); chunk = p.and32(c, 7) + phys = p.add32(smem, p.add32(p.imm32(E4OFF), p.add32(p.shl32(row, 7), p.shl32(p.xor32(chunk, p.and32(row, 7)), 4)))) + r = p.regs("b32", 4) + p.emit(f"ld.shared.v4.b32 {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}}, [{phys}];") + gRowO = p.add32(blockRow, row) + ok = p.setp("lt.u32", gRowO, P["rows"]) + off = p.add32(p.mul32(gRowO, P["outputStride"]), p.add32(P["outputColumnOffset"], p.add32(colBase, p.shl32(chunk, 4)))) + p.emit(f"@{ok} st.global.v4.b32 [{p.add64(P['pOut'], p.widen(off))}], {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}};") + pSignalOn = p.setp("ne.u64", P["pSignal"], "0") + sync_signal(p, [P["pSignal"]], tid, pSignalOn) + p.emit(f"{endL}:") + p.emit("ret;") + return name, p.finish(), shared_bytes + + +if __name__ == "__main__": + K, flags, splits, out = int(sys.argv[1]), int(sys.argv[2]), int(sys.argv[3]), sys.argv[4] + stages = int(sys.argv[5]) if len(sys.argv) > 5 else STAGES + bstages = int(sys.argv[6]) if len(sys.argv) > 6 else BSTAGES + prefetch = int(sys.argv[7]) if len(sys.argv) > 7 else PREFETCH + max_regs = int(sys.argv[8]) if len(sys.argv) > 8 and int(sys.argv[8]) else None + prefetch0 = int(sys.argv[9]) if len(sys.argv) > 9 else PREFETCH0 + bm = int(sys.argv[10]) if len(sys.argv) > 10 else 192 + name, text, shared = generate(K, flags, splits, stages, bstages, prefetch, max_regs, prefetch0, bm) + open(out, "w").write(text) + print(name, shared) diff --git a/third_party/opendlss-nr/scripts/ptx/global_attention_e4m3.py b/third_party/opendlss-nr/scripts/ptx/global_attention_e4m3.py new file mode 100644 index 000000000..7c38c2887 --- /dev/null +++ b/third_party/opendlss-nr/scripts/ptx/global_attention_e4m3.py @@ -0,0 +1,184 @@ +"""Global ViT cosine attention (global_attention.comp) for one (head, 64-query block): the head's K/V rows of all +padded tokens are normalized / quantized into shared memory (K rows [token][32 B], V transposed [dim][token] with the +keys of every 32-group permuted so that the exp'd score fragments pack straight into the P·V A operand), the four +warps normalize their 16 query rows, then per 64-key block: S = Q K^T, the ViT exponential (f16 fma, clamp, bit +shift), the specified block sum ((b0 + b1) + b2) + b3 / ((t0 + t1) + t2) + t3 / even + odd, running total per row, +unnormalized E4 weights times V accumulated over the blocks in key order; the padding correction and the f32 +reciprocal (rounded to half) are applied afterwards. Arithmetic identical to the GLSL kernel. + +Chaining: waits for `waitExpected` signals at pWait (the QKV GEMM), signals pSignal once per workgroup. + +python global_attention_e4m3.py out.ptx +""" +import sys +from ptxgen import Ptx +from swin import * + +THREADS = 128 +QROWS = 0 # [64][32 B] swizzled (chunk ^= (row >> 2) & 1) +KROWS = 2048 # [padded][32 B] swizzled + + + +def generate(padded): + assert padded % 64 == 0 and padded <= 256 + blocks = padded // 64 + VT = KROWS + padded * 32 # [32 dims][VT_STRIDE B] + VT_STRIDE = padded + 16 # (stride / 4) mod 32 = 4 or 20: conflict-free ldmatrix rows + shared_bytes = VT + 32 * VT_STRIDE + name = f"global_attention_e4m3_p{padded}" + p = Ptx() + params = [("u64", "pQkv"), ("u64", "pAux"), ("u64", "pOut"), ("u32", "tokens"), ("u32", "heads"), ("u32", "scaleWordOffset"), + ("u64", "pWait"), ("u32", "waitExpected"), ("u64", "pSignal"), ("u64", "pError")] + p.entry(name, params, shared_bytes, THREADS, None, dynamic_shared=True) + P = {n: (p.load_param_u64(n) if t == "u64" else p.load_param_u32(n)) for t, n in params} + tid = p.special("tid.x"); head = p.special("ctaid.x"); qb = p.special("ctaid.y") + lane = p.and32(tid, 31); warp = p.shr32(tid, 5) + li = LaneInfo(p, lane) + g, t = li.g, li.t + smem = p.shared_addr(p.imm32(0)) + zero32 = p.imm32(0) + channels = p.mul32(P["heads"], p.imm32(32)) + rowBytes = p.mul32(P["heads"], p.imm32(192)) # f16 [heads * 96] per token + headByte = p.mul32(head, p.imm32(192)) + # per-head learned scale (f32 -> f16), f16(sqrt 32) = 0x45A8 + learned = p.reg("f32"); p.emit(f"ld.global.nc.f32 {learned}, [{p.add64(P['pAux'], p.widen(p.shl32(p.add32(P['scaleWordOffset'], head), 2)))}];") + learnedH = p.reg("f16"); p.emit(f"cvt.rn.f16.f32 {learnedH}, {learned};") + learned2 = pack16(p, learnedH, learnedH) + hs2 = imm(p, "0x45A845A8") + # ---- chain wait (the QKV rows are produced by the chained GEMM) + pWaitOn = p.setp("ne.u64", P["pWait"], "0") + sync_wait(p, P["pWait"], zero32, zero32, P["waitExpected"], lane, pWaitOn, warp, error64=P["pError"]) + + def load_row(token, valid, part): + """16 words of f16 (part 0 = Q, 1 = K, 2 = V of the head) for `token` (zeros when not valid).""" + addr = p.add64(P["pQkv"], p.widen(p.add32(p.mul32(token, rowBytes), p.add32(headByte, p.imm32(64 * part))))) + w = [] + for c in range(4): + r = p.regs("b32", 4) + for x in r: p.emit(f"mov.b32 {x}, 0;") + p.emit(f"@{valid} ld.global.cg.v4.b32 {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}}, [{addr}+{16 * c}];") + w += r + return w + + def store_row16(base, row, codes): + """8 words of E4 codes -> a [row][32 B] swizzled tile at `base`.""" + swz = p.and32(p.shr32(row, 2), 1) + for c in range(2): + addr = p.add32(base, p.add32(p.shl32(row, 5), p.shl32(p.xor32(p.imm32(c), swz), 4))) + p.emit(f"st.shared.v4.b32 [{addr}], {{{codes[4 * c]}, {codes[4 * c + 1]}, {codes[4 * c + 2]}, {codes[4 * c + 3]}}};") + + # ---- Q of this workgroup's 64 tokens (threads 0..63) + pQ = p.setp("lt.u32", tid, p.imm32(64)) + qToken = p.add32(p.shl32(qb, 6), tid) + qValid = p.reg("pred"); p.emit(f"setp.lt.and.u32 {qValid}, {qToken}, {P['tokens']}, {pQ};") + qL = p.label("QDONE") + p.emit(f"@!{pQ} bra {qL};") + wq = load_row(qToken, qValid, 0) + qc = vit_quantize(p, wq, vit_norm(p, wq), True, hs2, learned2, zero32) + qc = [p.selp32(qValid, c, zero32) for c in qc] + store_row16(p.add32(smem, p.imm32(QROWS)), tid, qc) + p.emit(f"{qL}:") + # ---- K / V of all padded tokens: thread t handles tokens t, t + 128; V transposed with the 32-group permutation + # physical position of key k: (k & ~31) | (k & 16) | (((k & 7) >> 1) << 2) | (k & 1) | (((k & 15) >> 3) << 1) + for local0 in range(0, padded, THREADS): + token = p.add32(tid, p.imm32(local0)) + pIn = p.setp("lt.u32", token, p.imm32(padded)) if local0 + THREADS > padded else None + valid = p.reg("pred") + if pIn is not None: p.emit(f"setp.lt.and.u32 {valid}, {token}, {P['tokens']}, {pIn};") + else: p.emit(f"setp.lt.u32 {valid}, {token}, {P['tokens']};") + skipL = p.label("KVSKIP") + if pIn is not None: p.emit(f"@!{pIn} bra {skipL};") + wk = load_row(token, valid, 1) + wv = load_row(token, valid, 2) + kc = vit_quantize(p, wk, vit_norm(p, wk), False, hs2, learned2, zero32) + kc = [p.selp32(valid, c, zero32) for c in kc] + store_row16(p.add32(smem, p.imm32(KROWS)), token, kc) + vc = [pack16(p, cvt_e4x2(p, wv[2 * i]), cvt_e4x2(p, wv[2 * i + 1])) for i in range(8)] + vc = [p.selp32(valid, c, zero32) for c in vc] + ppos = p.or32(p.or32(p.and32(token, p.imm32(0xffffffe0 | 16)), p.shl32(p.shr32(p.and32(token, 7), 1), 2)), + p.or32(p.and32(token, 1), p.shl32(p.shr32(p.and32(token, 15), 3), 1))) + vAddr = p.add32(smem, p.add32(p.imm32(VT), ppos)) + for i in range(8): # word i holds dims 4 i .. 4 i + 3 + for b in range(4): + byte = p.reg("b32") + if b == 0: p.emit(f"mov.b32 {byte}, {vc[i]};") + else: p.emit(f"shr.u32 {byte}, {vc[i]}, {8 * b};") + p.emit(f"st.shared.u8 [{vAddr}+{(4 * i + b) * VT_STRIDE}], {byte};") + p.emit(f"{skipL}:") + p.emit("bar.sync 0;") + # ---- fragments: Q A (this warp's 16 rows), K B rows, V^T B rows + l8 = p.and32(lane, 7); lm = p.shr32(lane, 3) + aRowL = p.add32(l8, p.shl32(p.and32(lm, 1), 3)); aChunkL = p.shr32(lane, 4) + aPchL = p.xor32(aChunkL, p.and32(p.shr32(aRowL, 2), 1)) + aLane = p.add32(smem, p.add32(p.imm32(QROWS), p.add32(p.shl32(p.add32(aRowL, p.shl32(warp, 4)), 5), p.shl32(aPchL, 4)))) + mq = ldm4(p, aLane) + bNL = p.add32(l8, p.shl32(p.shr32(lane, 4), 3)); bChunkL = p.and32(lm, 1) + bPchL = p.xor32(bChunkL, p.and32(p.shr32(bNL, 2), 1)) + kLane = p.add32(smem, p.add32(p.imm32(KROWS), p.add32(p.shl32(bNL, 5), p.shl32(bPchL, 4)))) + vLane = p.add32(smem, p.add32(p.imm32(VT), p.add32(p.mul32(bNL, p.imm32(VT_STRIDE)), p.shl32(bChunkL, 4)))) + k = VitExpConsts(p) + o = [zero_tile(p) for _ in range(4)] # 16 x 32 output: 4 n-tiles of 8 dims + total = [None, None] # f16 per row half (g, g + 8) + for b in range(blocks): + s = [zero_tile(p) for _ in range(8)] + for m2 in range(4): + r = ldm4(p, f"{kLane}+{b * 2048 + m2 * 512}") + mma_e4(p, s[2 * m2], mq, (r[0], r[1]), s[2 * m2]) + mma_e4(p, s[2 * m2 + 1], mq, (r[2], r[3]), s[2 * m2 + 1]) + e = [[vit_exp(p, s[j][h], k) for h in range(2)] for j in range(8)] + for h in range(2): + bp = [hadd2(p, e[2 * j][h], e[2 * j + 1][h]) for j in range(4)] + tp = hadd2(p, hadd2(p, hadd2(p, bp[0], bp[1]), bp[2]), bp[3]) + tq = [shfl_idx(p, tp, src) for src in li.quadLanes] + parts = [unpack16(p, x) for x in tq] + even = hadd(p, hadd(p, hadd(p, parts[0][0], parts[1][0]), parts[2][0]), parts[3][0]) + odd = hadd(p, hadd(p, hadd(p, parts[0][1], parts[1][1]), parts[2][1]), parts[3][1]) + blockSum = hadd(p, even, odd) + total[h] = blockSum if b == 0 else hadd(p, total[h], blockSum) # total = 0 + blockSum is exact + # P (E4 weights) as the A operand: k32 group kb = n-tiles 4 kb .. 4 kb + 3 (the V tile's key permutation) + for kb in range(2): + c = [[cvt_e4x2(p, e[4 * kb + j][h]) for h in range(2)] for j in range(4)] + pa = [pack16(p, c[0][0], c[1][0]), pack16(p, c[0][1], c[1][1]), pack16(p, c[2][0], c[3][0]), pack16(p, c[2][1], c[3][1])] + for d2 in range(2): + r = ldm4(p, f"{vLane}+{b * 64 + kb * 32 + d2 * 16 * VT_STRIDE}") + mma_e4(p, o[2 * d2], pa, (r[0], r[1]), o[2 * d2]) + mma_e4(p, o[2 * d2 + 1], pa, (r[2], r[3]), o[2 * d2 + 1]) + # ---- padding correction, reciprocal, output + padding = p.sub32(p.imm32(padded), P["tokens"]) + pPad = p.setp("ne.u32", padding, zero32) + expZero = vit_exp(p, zero32, k) + ez, _ = unpack16(p, expZero) + ezf = p.reg("f32"); p.emit(f"cvt.f32.f16 {ezf}, {ez};") + padf = p.reg("f32"); p.emit(f"cvt.rn.f32.u32 {padf}, {padding};") + corrF = p.reg("f32"); p.emit(f"mul.rn.f32 {corrF}, {ezf}, {padf};") + corr = p.reg("f16"); p.emit(f"cvt.rn.f16.f32 {corr}, {corrF};") + for h in range(2): + corrected = p.reg("f16"); p.emit(f"sub.rn.f16 {corrected}, {total[h]}, {corr};") + p.emit(f"@{pPad} mov.b16 {total[h]}, {corrected};") + for h in range(2): + f = p.reg("f32"); p.emit(f"cvt.f32.f16 {f}, {total[h]};") + rc = p.reg("f32"); p.emit(f"rcp.rn.f32 {rc}, {f};") + rh = p.reg("f16"); p.emit(f"cvt.rn.f16.f32 {rh}, {rc};") + rf = p.reg("f32"); p.emit(f"cvt.f32.f16 {rf}, {rh};") + token = p.add32(p.shl32(qb, 6), p.add32(p.shl32(warp, 4), p.add32(g, p.imm32(8 * h)))) + ok = p.setp("lt.u32", token, P["tokens"]) + outAddr = p.add64(P["pOut"], p.widen(p.add32(p.mul32(token, channels), p.add32(p.shl32(head, 5), p.shl32(t, 1))))) + for j in range(4): + lo, hi = unpack16(p, o[j][h]) + flo = p.reg("f32"); p.emit(f"cvt.f32.f16 {flo}, {lo};"); p.emit(f"mul.rn.f32 {flo}, {flo}, {rf};") + fhi = p.reg("f32"); p.emit(f"cvt.f32.f16 {fhi}, {hi};"); p.emit(f"mul.rn.f32 {fhi}, {fhi}, {rf};") + v = p.reg("b32"); p.emit(f"cvt.rn.f16x2.f32 {v}, {fhi}, {flo};") + hc = cvt_e4x2(p, v) + p.emit(f"@{ok} st.global.b16 [{outAddr}+{8 * j}], {hc};") + pSignalOn = p.setp("ne.u64", P["pSignal"], "0") + sync_signal(p, [P["pSignal"]], tid, pSignalOn) + p.emit("ret;") + return name, p.finish(), shared_bytes + + +if __name__ == "__main__": + padded, out = int(sys.argv[1]), sys.argv[2] + name, text, shared = generate(padded) + open(out, "w").write(text) + print(name, shared) diff --git a/third_party/opendlss-nr/scripts/ptx/global_attention_stream_e4m3.py b/third_party/opendlss-nr/scripts/ptx/global_attention_stream_e4m3.py new file mode 100644 index 000000000..b5e3784b9 --- /dev/null +++ b/third_party/opendlss-nr/scripts/ptx/global_attention_stream_e4m3.py @@ -0,0 +1,240 @@ +"""Global ViT cosine attention for any token count (high resolutions), in two PTX passes with the arithmetic of +global_attention_e4m3.py (bit-identical per key block, blocks accumulated in key order): + +1. global_normalize_e4m3: one thread per (token, head): Q normalized (times f16(sqrt 32) and the learned scale), + K normalized, V as E4 codes, written per head so the attention streams contiguous tiles: + Q [head][padded][32 B] at 0 + K [head][padded][32 B] at heads * padded * 32 + V^T[head][32 dims][padded] (32-key permutation) at 2 * heads * padded * 32 + Tokens >= `tokens` (padding) are zero codes. Grid (padded / 64, heads), 64 threads. + +2. global_attention_stream_e4m3: one workgroup per (head, 64-query block), four warps of 16 query rows; the + key blocks (K tile 2 KB + V^T tile 32 x 80 B) stream through a STAGES-deep cp.async ring; per block the same + S = Q K^T, ViT exponential, the specified block sums, unnormalized P V as the resident kernel; padding correction, + f32 reciprocal and the E4 output afterwards. Grid (heads, padded / 64), 128 threads, static shared memory. + +Chaining: the normalize waits for the QKV GEMM's signals and signals once per workgroup; the attention waits for +the normalize workgroups and signals once per workgroup (the projection GEMM waits for heads * padded / 64). + +python global_attention_stream_e4m3.py normalize|attention out.ptx [stages] +""" +import sys +from ptxgen import Ptx +from swin import * + +QTILE = 0 # [64][32 B] swizzled +STAGE0 = 2048 +K_BYTES = 2048 # [64 keys][32 B] swizzled +VT_STRIDE = 80 # 64 keys + 16 pad: (80 / 4) mod 32 = 20, conflict-free ldmatrix rows +VT_BYTES = 32 * VT_STRIDE +STAGE_BYTES = K_BYTES + VT_BYTES + + +def key_position(p, token): + """Physical key position within the V^T row: (k & ~31) | (k & 16) | (((k & 7) >> 1) << 2) | (k & 1) | (((k & 15) >> 3) << 1).""" + return p.or32(p.or32(p.and32(token, p.imm32(0xffffffe0 | 16)), p.shl32(p.shr32(p.and32(token, 7), 1), 2)), + p.or32(p.and32(token, 1), p.shl32(p.shr32(p.and32(token, 15), 3), 1))) + + +def generate_normalize(): + name = "global_normalize_e4m3" + p = Ptx() + params = [("u64", "pQkv"), ("u64", "pAux"), ("u64", "pOut"), ("u32", "tokens"), ("u32", "padded"), ("u32", "heads"), + ("u32", "scaleWordOffset"), ("u64", "pWait"), ("u32", "waitExpected"), ("u64", "pSignal"), ("u64", "pError")] + p.entry(name, params, 0, 64) + P = {n: (p.load_param_u64(n) if t == "u64" else p.load_param_u32(n)) for t, n in params} + tid = p.special("tid.x"); tb = p.special("ctaid.x"); head = p.special("ctaid.y") + lane = p.and32(tid, 31); warp = p.shr32(tid, 5) + zero32 = p.imm32(0) + token = p.add32(p.shl32(tb, 6), tid) + valid = p.setp("lt.u32", token, P["tokens"]) + pWaitOn = p.setp("ne.u64", P["pWait"], "0") + sync_wait(p, P["pWait"], zero32, zero32, P["waitExpected"], lane, pWaitOn, warp, error64=P["pError"]) + rowBytes = p.mul32(P["heads"], p.imm32(192)) + headByte = p.mul32(head, p.imm32(192)) + learned = p.reg("f32"); p.emit(f"ld.global.nc.f32 {learned}, [{p.add64(P['pAux'], p.widen(p.shl32(p.add32(P['scaleWordOffset'], head), 2)))}];") + learnedH = p.reg("f16"); p.emit(f"cvt.rn.f16.f32 {learnedH}, {learned};") + learned2 = pack16(p, learnedH, learnedH) + hs2 = imm(p, "0x45A845A8") + src = p.add64(P["pQkv"], p.widen(p.add32(p.mul32(token, rowBytes), headByte))) + + def load_row(part): + w = [] + for c in range(4): + r = p.regs("b32", 4) + for x in r: p.emit(f"mov.b32 {x}, 0;") + p.emit(f"@{valid} ld.global.cg.v4.b32 {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}}, [{src}+{64 * part + 16 * c}];") + w += r + return w + wq = load_row(0); wk = load_row(1); wv = load_row(2) + qc = vit_quantize(p, wq, vit_norm(p, wq), True, hs2, learned2, zero32) + kc = vit_quantize(p, wk, vit_norm(p, wk), False, hs2, learned2, zero32) + vc = [pack16(p, cvt_e4x2(p, wv[2 * i]), cvt_e4x2(p, wv[2 * i + 1])) for i in range(8)] + qc = [p.selp32(valid, c, zero32) for c in qc] + kc = [p.selp32(valid, c, zero32) for c in kc] + vc = [p.selp32(valid, c, zero32) for c in vc] + headRows = p.mul32(head, P["padded"]) # head * padded + rowIndex = p.add32(headRows, token) + planeBytes = p.mul32(p.mul32(P["heads"], P["padded"]), p.imm32(32)) + qAddr = p.add64(P["pOut"], p.widen(p.shl32(rowIndex, 5))) + kAddr = p.add64(qAddr, p.widen(planeBytes)) + for c in range(2): + p.emit(f"st.global.v4.b32 [{qAddr}+{16 * c}], {{{qc[4 * c]}, {qc[4 * c + 1]}, {qc[4 * c + 2]}, {qc[4 * c + 3]}}};") + p.emit(f"st.global.v4.b32 [{kAddr}+{16 * c}], {{{kc[4 * c]}, {kc[4 * c + 1]}, {kc[4 * c + 2]}, {kc[4 * c + 3]}}};") + # V^T: byte (dim) of the token at [head][dim][position] + vBase = p.add64(P["pOut"], p.widen(p.shl32(planeBytes, 1))) + vAddr = p.add64(vBase, p.widen(p.add32(p.mul32(headRows, p.imm32(32)), key_position(p, token)))) + for i in range(8): + for b in range(4): + byte = p.reg("b32") + if b == 0: p.emit(f"mov.b32 {byte}, {vc[i]};") + else: p.emit(f"shr.u32 {byte}, {vc[i]}, {8 * b};") + p.emit(f"st.global.u8 [{p.add64(vAddr, p.widen(p.mul32(P['padded'], p.imm32(4 * i + b))))}], {byte};") + pSignalOn = p.setp("ne.u64", P["pSignal"], "0") + sync_signal(p, [P["pSignal"]], tid, pSignalOn) + p.emit("ret;") + return name, p.finish(), 0 + + +def generate_attention(stages=4): + name = "global_attention_stream_e4m3" + shared_bytes = STAGE0 + stages * STAGE_BYTES + p = Ptx() + params = [("u64", "pNorm"), ("u64", "pOut"), ("u32", "tokens"), ("u32", "padded"), ("u32", "heads"), + ("u64", "pWait"), ("u32", "waitExpected"), ("u64", "pSignal"), ("u64", "pError")] + p.entry(name, params, shared_bytes, 128) + P = {n: (p.load_param_u64(n) if t == "u64" else p.load_param_u32(n)) for t, n in params} + tid = p.special("tid.x"); head = p.special("ctaid.x"); qb = p.special("ctaid.y") + lane = p.and32(tid, 31); warp = p.shr32(tid, 5) + li = LaneInfo(p, lane) + g, t = li.g, li.t + smem = p.shared_addr(p.imm32(0)) + zero32 = p.imm32(0) + channels = p.mul32(P["heads"], p.imm32(32)) + blocks = p.shr32(P["padded"], 6) + pWaitOn = p.setp("ne.u64", P["pWait"], "0") + sync_wait(p, P["pWait"], zero32, zero32, P["waitExpected"], lane, pWaitOn, warp, error64=P["pError"]) + # ---- source addresses (this head) + headRows = p.mul32(head, P["padded"]) + planeBytes = p.mul32(p.mul32(P["heads"], P["padded"]), p.imm32(32)) + qRowsAddr = p.add64(P["pNorm"], p.widen(p.shl32(p.add32(headRows, p.shl32(qb, 6)), 5))) # Q rows of the query block + kPlane = p.add64(P["pNorm"], p.widen(planeBytes)) + kHead = p.add64(kPlane, p.widen(p.shl32(headRows, 5))) # K rows of the head + vHead = p.add64(p.add64(P["pNorm"], p.widen(p.shl32(planeBytes, 1))), p.widen(p.mul32(headRows, p.imm32(32)))) # V^T rows + # per-thread copy assignments: K / Q chunk (row t >> 1, chunk t & 1, swizzled), V^T chunk (dim t >> 2, chunk t & 3) + cRow = p.shr32(tid, 1); cChunk = p.and32(tid, 1) + cSwz = p.and32(p.shr32(cRow, 2), 1) + kDstOff = p.add32(p.shl32(cRow, 5), p.shl32(p.xor32(cChunk, cSwz), 4)) # within a K / Q tile + kSrcOff = p.widen(p.add32(p.shl32(cRow, 5), p.shl32(cChunk, 4))) # within a 64-row block + vDim = p.shr32(tid, 2); vChunk = p.and32(tid, 3) + vDstOff = p.add32(p.mul32(vDim, p.imm32(VT_STRIDE)), p.shl32(vChunk, 4)) + vSrc = p.add64(vHead, p.widen(p.add32(p.mul32(vDim, P["padded"]), p.shl32(vChunk, 4)))) # + 64 * block + kSrc = p.add64(kHead, kSrcOff) # + 2048 * block + # Q tile + p.emit(f"cp.async.cg.shared.global [{p.add32(smem, p.add32(p.imm32(QTILE), kDstOff))}], [{p.add64(qRowsAddr, kSrcOff)}], 16;") + + def issue(block, stage): + """cp.async of key block `block` (register) into stage `stage` (literal), guarded by block < blocks; one group.""" + ok = p.setp("lt.u32", block, blocks) + kS = p.add64(kSrc, p.widen(p.shl32(block, 11))) + vS = p.add64(vSrc, p.widen(p.shl32(block, 6))) + kD = p.add32(smem, p.add32(p.imm32(STAGE0 + stage * STAGE_BYTES), kDstOff)) + vD = p.add32(smem, p.add32(p.imm32(STAGE0 + stage * STAGE_BYTES + K_BYTES), vDstOff)) + p.emit(f"@{ok} cp.async.cg.shared.global [{kD}], [{kS}], 16;") + p.emit(f"@{ok} cp.async.cg.shared.global [{vD}], [{vS}], 16;") + p.emit("cp.async.commit_group;") + for s in range(stages - 1): + issue(p.imm32(s), s) + # ---- fragments + l8 = p.and32(lane, 7); lm = p.shr32(lane, 3) + aRowL = p.add32(l8, p.shl32(p.and32(lm, 1), 3)); aChunkL = p.shr32(lane, 4) + aPchL = p.xor32(aChunkL, p.and32(p.shr32(aRowL, 2), 1)) + aLane = p.add32(smem, p.add32(p.imm32(QTILE), p.add32(p.shl32(p.add32(aRowL, p.shl32(warp, 4)), 5), p.shl32(aPchL, 4)))) + bNL = p.add32(l8, p.shl32(p.shr32(lane, 4), 3)); bChunkL = p.and32(lm, 1) + bPchL = p.xor32(bChunkL, p.and32(p.shr32(bNL, 2), 1)) + kLane = p.add32(smem, p.add32(p.imm32(STAGE0), p.add32(p.shl32(bNL, 5), p.shl32(bPchL, 4)))) + vLane = p.add32(smem, p.add32(p.imm32(STAGE0 + K_BYTES), p.add32(p.mul32(bNL, p.imm32(VT_STRIDE)), p.shl32(bChunkL, 4)))) + k = VitExpConsts(p) + o = [zero_tile(p) for _ in range(4)] + total = [p.reg("f16"), p.reg("f16")] + for h in range(2): p.emit(f"mov.b16 {total[h]}, 0;") + mq = None + # ---- the key-block loop, unrolled `stages` times so every stage address is a literal + b = p.reg("b32"); p.emit(f"mov.u32 {b}, 0;") + loopL = p.label("BLOCKS"); doneL = p.label("BLOCKSDONE") + p.emit(f"{loopL}:") + for s in range(stages): + pB = p.setp("lt.u32", b, blocks) + p.emit(f"@!{pB} bra {doneL};") + p.emit(f"cp.async.wait_group {stages - 2};") + p.emit("bar.sync 0;") + # refill the stage consumed last iteration with block b + stages - 1 + issue(p.add32(b, p.imm32(stages - 1)), (s + stages - 1) % stages) + if mq is None: + mq = ldm4(p, aLane) # Q fragment (the tile arrived with the first group) + st = s * STAGE_BYTES + sTiles = [zero_tile(p) for _ in range(8)] + for m2 in range(4): + r = ldm4(p, f"{kLane}+{st + m2 * 512}") + mma_e4(p, sTiles[2 * m2], mq, (r[0], r[1]), sTiles[2 * m2]) + mma_e4(p, sTiles[2 * m2 + 1], mq, (r[2], r[3]), sTiles[2 * m2 + 1]) + e = [[vit_exp(p, sTiles[j][h], k) for h in range(2)] for j in range(8)] + for h in range(2): + bp = [hadd2(p, e[2 * j][h], e[2 * j + 1][h]) for j in range(4)] + tp = hadd2(p, hadd2(p, hadd2(p, bp[0], bp[1]), bp[2]), bp[3]) + tq = [shfl_idx(p, tp, src) for src in li.quadLanes] + parts = [unpack16(p, x) for x in tq] + even = hadd(p, hadd(p, hadd(p, parts[0][0], parts[1][0]), parts[2][0]), parts[3][0]) + odd = hadd(p, hadd(p, hadd(p, parts[0][1], parts[1][1]), parts[2][1]), parts[3][1]) + blockSum = hadd(p, even, odd) + p.emit(f"add.rn.f16 {total[h]}, {total[h]}, {blockSum};") + for kb in range(2): + c = [[cvt_e4x2(p, e[4 * kb + j][h]) for h in range(2)] for j in range(4)] + pa = [pack16(p, c[0][0], c[1][0]), pack16(p, c[0][1], c[1][1]), pack16(p, c[2][0], c[3][0]), pack16(p, c[2][1], c[3][1])] + for d2 in range(2): + r = ldm4(p, f"{vLane}+{st + kb * 32 + d2 * 16 * VT_STRIDE}") + mma_e4(p, o[2 * d2], pa, (r[0], r[1]), o[2 * d2]) + mma_e4(p, o[2 * d2 + 1], pa, (r[2], r[3]), o[2 * d2 + 1]) + p.emit(f"add.u32 {b}, {b}, 1;") + p.emit(f"bra {loopL};") + p.emit(f"{doneL}:") + p.emit("cp.async.wait_group 0;") + # ---- padding correction, reciprocal, output (as the resident kernel) + padding = p.sub32(P["padded"], P["tokens"]) + pPad = p.setp("ne.u32", padding, zero32) + expZero = vit_exp(p, zero32, k) + ez, _ = unpack16(p, expZero) + ezf = p.reg("f32"); p.emit(f"cvt.f32.f16 {ezf}, {ez};") + padf = p.reg("f32"); p.emit(f"cvt.rn.f32.u32 {padf}, {padding};") + corrF = p.reg("f32"); p.emit(f"mul.rn.f32 {corrF}, {ezf}, {padf};") + corr = p.reg("f16"); p.emit(f"cvt.rn.f16.f32 {corr}, {corrF};") + for h in range(2): + corrected = p.reg("f16"); p.emit(f"sub.rn.f16 {corrected}, {total[h]}, {corr};") + p.emit(f"@{pPad} mov.b16 {total[h]}, {corrected};") + for h in range(2): + f = p.reg("f32"); p.emit(f"cvt.f32.f16 {f}, {total[h]};") + rc = p.reg("f32"); p.emit(f"rcp.rn.f32 {rc}, {f};") + rh = p.reg("f16"); p.emit(f"cvt.rn.f16.f32 {rh}, {rc};") + rf = p.reg("f32"); p.emit(f"cvt.f32.f16 {rf}, {rh};") + token = p.add32(p.shl32(qb, 6), p.add32(p.shl32(warp, 4), p.add32(g, p.imm32(8 * h)))) + ok = p.setp("lt.u32", token, P["tokens"]) + outAddr = p.add64(P["pOut"], p.widen(p.add32(p.mul32(token, channels), p.add32(p.shl32(head, 5), p.shl32(t, 1))))) + for j in range(4): + lo, hi = unpack16(p, o[j][h]) + flo = p.reg("f32"); p.emit(f"cvt.f32.f16 {flo}, {lo};"); p.emit(f"mul.rn.f32 {flo}, {flo}, {rf};") + fhi = p.reg("f32"); p.emit(f"cvt.f32.f16 {fhi}, {hi};"); p.emit(f"mul.rn.f32 {fhi}, {fhi}, {rf};") + v = p.reg("b32"); p.emit(f"cvt.rn.f16x2.f32 {v}, {fhi}, {flo};") + hc = cvt_e4x2(p, v) + p.emit(f"@{ok} st.global.b16 [{outAddr}+{8 * j}], {hc};") + pSignalOn = p.setp("ne.u64", P["pSignal"], "0") + sync_signal(p, [P["pSignal"]], tid, pSignalOn) + p.emit("ret;") + return name, p.finish(), shared_bytes + + +if __name__ == "__main__": + which, out = sys.argv[1], sys.argv[2] + stages = int(sys.argv[3]) if len(sys.argv) > 3 else 4 + name, text, shared = generate_normalize() if which == "normalize" else generate_attention(stages) + open(out, "w").write(text) + print(name, shared) diff --git a/third_party/opendlss-nr/scripts/ptx/mlp_e4m3.py b/third_party/opendlss-nr/scripts/ptx/mlp_e4m3.py new file mode 100644 index 000000000..a67cddfb1 --- /dev/null +++ b/third_party/opendlss-nr/scripts/ptx/mlp_e4m3.py @@ -0,0 +1,260 @@ +"""Exact Ada FP8 two-layer MLP in PTX: D(E4) = E4( E4(SiLU(A * W1)) * W2 ) per expert. + +Native arithmetic: mma.sync.m16n8k32 e4m3 with f16 accumulation chained over K in order +(verified bit-exact against the coopmat path). The hidden activation never leaves the +registers: W1's output columns are permuted (host side, within each 16-unit group) so that +the C fragment a lane holds after the first layer IS its A fragment for the second layer: just +two f16x2 -> e4m3x2 conversions and one byte permute per A register, no shuffles. The +within-16 relabeling is exact because the hardware sums each 16-product group without an +order dependence. + +Layouts: A E4 [rows][inputStride] (broadcast to every expert); W1 tile-major +[e][K/32][128][32] with the column permutation; W2 tile-major [e][4][32][32] +(natural hidden order); output E4 [rows][outputStride] at outputColumnOffset + e * 32. +Workgroup: 128 threads = 4 warps x 16 rows (BM = 64); grid (experts, rowGroups). +Params: A B1 B2 D(u64) rows inputStride inputColumnBase outputStride outputColumnOffset (u32). +""" +import sys +from ptxgen import Ptx +from swin import * + +HIDDEN = 128 +NOUT = 32 +THREADS = 128 +STAGES = 3 +KSUB = 1 # k32 tiles per pipeline stage (1 or 2) +MT = 1 # m16 tiles per warp (register blocking: B fragments serve MT multiplies) + + +def hidden_permutation(hidden=HIDDEN): + """W1' column c holds hidden unit u(c): lane t's C columns {2t, 2t+1, 8+2t, 9+2t} (+16, +32j) hold + units {4t .. 4t+3} (+16, +32j), so the C fragment packs straight into the A fragment.""" + perm = [0] * hidden + for block in range(hidden // 32): + for half in range(2): + for t in range(4): + for i in range(2): + perm[block * 32 + half * 16 + 2 * t + i] = block * 32 + half * 16 + 4 * t + i + perm[block * 32 + half * 16 + 8 + 2 * t + i] = block * 32 + half * 16 + 4 * t + 2 + i + return perm + + +def generate(K, stages=STAGES, ksub=KSUB, mt=MT, max_regs=None, HIDDEN=HIDDEN, NOUT=NOUT): + assert K % (32 * ksub) == 0 + BM = 64 * mt # rows per workgroup (4 warps x 16 mt) + steps = K // (32 * ksub) # pipeline stages (each ksub k32 tiles) + a_bytes = BM * 32 * ksub # A tiles [ksub][64][32] (one k32 tile after another) + w1_bytes = HIDDEN * 32 * ksub # W1 tiles [ksub][128 n][32 k] + stage_bytes = a_bytes + w1_bytes + STAGES_ = stages + w2_bytes = (HIDDEN // 32) * NOUT * 32 # W2 [HIDDEN/32 k32 tiles][NOUT n][32 k], staged once + shared_bytes = STAGES_ * stage_bytes + w2_bytes + name = f"mlp_e4m3_K{K}" + (f"_M{mt}" if mt != 1 else "") + (f"_H{HIDDEN}_N{NOUT}" if (HIDDEN, NOUT) != (128, 32) else "") + p = Ptx() + params = [("u64", "pA"), ("u64", "pW1"), ("u64", "pW2"), ("u64", "pD"), ("u32", "rows"), ("u32", "inputStride"), + ("u32", "inputColumnBase"), ("u32", "outputStride"), ("u32", "outputColumnOffset")] + p.entry(name, params, shared_bytes, THREADS, max_regs) + A = p.load_param_u64("pA"); W1 = p.load_param_u64("pW1"); W2 = p.load_param_u64("pW2"); D = p.load_param_u64("pD") + rows = p.load_param_u32("rows"); inputStride = p.load_param_u32("inputStride") + inputColumnBase = p.load_param_u32("inputColumnBase"); outputStride = p.load_param_u32("outputStride") + outputColumnOffset = p.load_param_u32("outputColumnOffset") + tid = p.special("tid.x"); expert = p.special("ctaid.x"); rowGroup = p.special("ctaid.y") + lane = p.and32(tid, 31); warp = p.shr32(tid, 5) + blockRow = p.mul32(rowGroup, BM) + smem = p.shared_addr(p.imm32(0)) + w2Smem = p.add32(smem, STAGES_ * stage_bytes) + # ---- per-thread cp.async chunks per stage: 128 threads x 3 chunks = 384 = (64 + 128) rows x 2 chunks. + # Chunk id c: rows 0..63 of A (c < 128) then W1 rows (c - 128 >> 1). Swizzle: chunk ^= (row >> 2) & 1. + rowsMinus1 = p.sub32(rows, 1) + w1Expert = p.mad_wide(expert, steps * HIDDEN * 32, W1) # this expert's W1 tiles + copies = [] + chunksPerTile = (BM + HIDDEN) * 2 + perTile = chunksPerTile // THREADS + assert chunksPerTile % THREADS == 0 + for t in range(perTile * ksub): + # chunk t of this thread: k32 tile tileIdx = t // perTile, then within the tile A rows (cid < 2 BM) or W1 rows + cid = p.add32(tid, (t % perTile) * THREADS) + tileIdx = t // perTile + isA = p.setp("lt.u32", cid, BM * 2) + row = p.shr32(cid, 1); chunk = p.and32(cid, 1) + swz = p.and32(p.shr32(row, 2), 1) + pchunk = p.xor32(chunk, swz) + dstA = p.add32(p.mul32(row, 32), p.add32(p.mul32(pchunk, 16), p.imm32(tileIdx * BM * 32))) + gRow = p.add32(blockRow, row) + gRowC = p.selp32(p.setp("lt.u32", gRow, rows), gRow, rowsMinus1) + aOff = p.add32(p.mul32(gRowC, inputStride), p.add32(inputColumnBase, p.add32(p.mul32(chunk, 16), p.imm32(tileIdx * 32)))) + srcA = p.add64(A, p.widen(aOff)) + cidB = p.sub32(cid, BM * 2) + n = p.shr32(cidB, 1); chunkB = p.and32(cidB, 1) + swzB = p.and32(p.shr32(n, 2), 1) + pchunkB = p.xor32(chunkB, swzB) + dstB = p.add32(a_bytes + tileIdx * HIDDEN * 32, p.add32(p.mul32(n, 32), p.mul32(pchunkB, 16))) + srcB = p.add64(w1Expert, p.widen(p.add32(p.mul32(n, 32), p.add32(p.mul32(chunkB, 16), p.imm32(tileIdx * HIDDEN * 32))))) + dst = p.selp32(isA, dstA, dstB) + src = p.reg("b64"); p.emit(f"selp.b64 {src}, {srcA}, {srcB}, {isA};") + adv = p.selp32(isA, p.imm32(32 * ksub), p.imm32(HIDDEN * 32 * ksub)) # per stage: A +32*ksub B, W1 +4 KB*ksub + copies.append((dst, src, adv)) + + def issue_stage(stage_off_reg, step_reg): + for dst, src, adv in copies: + saddr = p.add32(p.add32(smem, stage_off_reg), dst) + gaddr = p.mad_wide(adv, step_reg, src) + p.emit(f"cp.async.cg.shared.global [{saddr}], [{gaddr}], 16;") + + # ---- W2 [HIDDEN/32][NOUT][32] of this expert, staged once (w2_bytes / 16 chunks), same swizzle per 32-byte row + w2Expert = p.mad_wide(expert, w2_bytes, W2) + assert (w2_bytes // 16) % THREADS == 0 + for t in range(w2_bytes // 16 // THREADS): + cid = p.add32(tid, t * THREADS) # row = cid >> 1 (tile*NOUT + n), chunk = cid & 1 + row = p.shr32(cid, 1); chunk = p.and32(cid, 1) + swz = p.and32(p.shr32(row, 2), 1) + pchunk = p.xor32(chunk, swz) + dst = p.add32(w2Smem, p.add32(p.mul32(row, 32), p.mul32(pchunk, 16))) + src = p.add64(w2Expert, p.widen(p.add32(p.mul32(row, 32), p.mul32(chunk, 16)))) + p.emit(f"cp.async.cg.shared.global [{dst}], [{src}], 16;") + + # ---- fragments: ldmatrix lane addressing (relative to a stage / tile base) + l8 = p.and32(lane, 7); lm = p.shr32(lane, 3) + aRowL = p.add32(l8, p.mul32(p.and32(lm, 1), 8)); aChunkL = p.shr32(lane, 4) + aPchunkL = p.xor32(aChunkL, p.and32(p.shr32(aRowL, 2), 1)) + aLaneOff = p.add32(p.mul32(p.add32(aRowL, p.mul32(warp, 16 * mt)), 32), p.mul32(aPchunkL, 16)) # + m-tile i * 16 rows * 32 + bNL = p.add32(l8, p.mul32(p.shr32(lane, 4), 8)); bChunkL = p.and32(lm, 1) + bPchunkL = p.xor32(bChunkL, p.and32(p.shr32(bNL, 2), 1)) + bLaneOff = p.add32(p.mul32(bNL, 32), p.mul32(bPchunkL, 16)) # + tile pair q * 16 rows * 32 + aBaseL = p.add32(smem, aLaneOff) + bBaseL = p.add32(p.add32(smem, a_bytes), bLaneOff) + + # hidden accumulators per m-tile: 16 n8 tiles (128 columns), 2 regs each + accs = [[(p.reg("b32"), p.reg("b32")) for _ in range(HIDDEN // 8)] for _ in range(mt)] + for acc in accs: + for d0, d1 in acc: + p.emit(f"mov.b32 {d0}, 0;"); p.emit(f"mov.b32 {d1}, 0;") + + # prologue: stages 0..S-2 + for s in range(STAGES_ - 1): + if s < steps: + issue_stage(p.imm32(s * stage_bytes), p.imm32(s)) + p.emit("cp.async.commit_group;") + step = p.reg("b32"); p.emit(f"mov.u32 {step}, 0;") + stageOff = p.reg("b32"); p.emit(f"mov.u32 {stageOff}, 0;") + loop = p.label("KLOOP") + p.emit(f"{loop}:") + p.emit(f"cp.async.wait_group {STAGES_ - 2};") + p.emit("bar.sync 0;") + aStage = p.add32(aBaseL, stageOff); bStage = p.add32(bBaseL, stageOff) + for kt in range(ksub): + aRegs = [] + for i in range(mt): + a = p.regs("b32", 4) + aAddr = p.add32(aStage, kt * BM * 32 + i * 16 * 32) + p.emit(f"ldmatrix.sync.aligned.m8n8.x4.shared.b16 {{{a[0]}, {a[1]}, {a[2]}, {a[3]}}}, [{aAddr}];") + aRegs.append(a) + for q in range(HIDDEN // 16): + r = p.regs("b32", 4) + addr = p.add32(bStage, kt * HIDDEN * 32 + q * 16 * 32) + p.emit(f"ldmatrix.sync.aligned.m8n8.x4.shared.b16 {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}}, [{addr}];") + for i in range(mt): + a = aRegs[i] + for j in range(2): + d0, d1 = accs[i][2 * q + j] + b0, b1 = (r[0], r[1]) if j == 0 else (r[2], r[3]) + p.emit(f"mma.sync.aligned.m16n8k32.row.col.f16.e4m3.e4m3.f16 {{{d0}, {d1}}}, {{{a[0]}, {a[1]}, {a[2]}, {a[3]}}}, {{{b0}, {b1}}}, {{{d0}, {d1}}};") + nextStep = p.add32(step, STAGES_ - 1) + pNext = p.setp("lt.u32", nextStep, steps) + skip = p.label("SKIPCOPY") + p.emit(f"@!{pNext} bra {skip};") + prevOff = p.sub32(stageOff, stage_bytes) + pWrap = p.setp("lt.s32", stageOff, stage_bytes) + wrapOff = p.selp32(pWrap, p.imm32((STAGES_ - 1) * stage_bytes), prevOff) + issue_stage(wrapOff, nextStep) + p.emit(f"{skip}:") + p.emit("cp.async.commit_group;") + p.emit(f"add.u32 {step}, {step}, 1;") + nextOff = p.add32(stageOff, stage_bytes) + pLast = p.setp("eq.u32", nextOff, STAGES_ * stage_bytes) + p.emit(f"selp.b32 {stageOff}, 0, {nextOff}, {pLast};") + pDone = p.setp("lt.u32", step, steps) + p.emit(f"@{pDone} bra {loop};") + p.emit("cp.async.wait_group 0;") + p.emit("bar.sync 0;") # W2 tiles landed (and every warp finished the last stage) + + # ---- SiLU on the accumulator pairs (swin.silu: the network's one polynomial and its roundings) + siluK = SiluConsts(p) + for acc in accs: + for i, (d0, d1) in enumerate(acc): + acc[i] = (silu(p, d0, siluK), silu(p, d1, siluK)) + # ---- C fragment -> A fragments of the second layer: k32 tile kt, register a_i = (rows g/g+8, k 4t.. / 16+4t..) + # a0 = row g: pack(tile 4kt+0 pair, tile 4kt+1 pair) a2 = row g: pack(tile 4kt+2, tile 4kt+3) + # a1 = row g+8: pack(tile 4kt+0, tile 4kt+1) a3 = row g+8: pack(tile 4kt+2, tile 4kt+3) + def e4pair(v): + h = p.reg("b16"); p.emit(f"cvt.rn.satfinite.e4m3x2.f16x2 {h}, {v};") + w = p.reg("b32"); p.emit(f"cvt.u32.u16 {w}, {h};") + return w + def nan_to_zero_pairs(w): + """E4 codes 0x7f / 0xff (NaN) -> 0 per byte, on a 16-bit pair in a b32: the same publication rule as + swin.nanzero, applied after the conversion because the codes are already packed here.""" + lo = p.and32(w, 0x7f); hi = p.and32(p.shr32(w, 8), 0x7f) + pLo = p.setp("eq.u32", lo, 0x7f); pHi = p.setp("eq.u32", hi, 0x7f) + mLo = p.selp32(pLo, p.imm32(0xff00), p.imm32(0xffff)); mHi = p.selp32(pHi, p.imm32(0x00ff), p.imm32(0xffff)) + return p.and32(p.and32(w, mLo), mHi) + aFrags = [] + for acc in accs: + aFrag = [] + for kt in range(HIDDEN // 32): + regs4 = [] + for half in range(2): + for pair in range(2): + tA, tB = 4 * kt + 2 * pair, 4 * kt + 2 * pair + 1 + wA = nan_to_zero_pairs(e4pair(acc[tA][half])); wB = nan_to_zero_pairs(e4pair(acc[tB][half])) + r = p.reg("b32"); p.emit(f"prmt.b32 {r}, {wA}, {wB}, 0x5410;") # bytes: wA.0 wA.1 wB.0 wB.1 + regs4.append(r) + # order a0 (g, first pair), a1 (g+8, first pair), a2 (g, second pair), a3 (g+8, second pair) + aFrag.append([regs4[0], regs4[2], regs4[1], regs4[3]]) + aFrags.append(aFrag) + # ---- second layer: acc2[m-tile][4 n8 tiles] over the 4 k32 tiles in order, B from the staged W2 tiles + acc2s = [[(p.reg("b32"), p.reg("b32")) for _ in range(NOUT // 8)] for _ in range(mt)] + for acc2 in acc2s: + for d0, d1 in acc2: + p.emit(f"mov.b32 {d0}, 0;"); p.emit(f"mov.b32 {d1}, 0;") + w2LaneBase = p.add32(w2Smem, bLaneOff) + for kt in range(HIDDEN // 32): + for q in range(NOUT // 16): + r = p.regs("b32", 4) + addr = p.add32(w2LaneBase, kt * NOUT * 32 + q * 16 * 32) + p.emit(f"ldmatrix.sync.aligned.m8n8.x4.shared.b16 {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}}, [{addr}];") + for i in range(mt): + for j in range(2): + d0, d1 = acc2s[i][2 * q + j] + b0, b1 = (r[0], r[1]) if j == 0 else (r[2], r[3]) + af = aFrags[i][kt] + p.emit(f"mma.sync.aligned.m16n8k32.row.col.f16.e4m3.e4m3.f16 {{{d0}, {d1}}}, {{{af[0]}, {af[1]}, {af[2]}, {af[3]}}}, {{{b0}, {b1}}}, {{{d0}, {d1}}};") + # ---- output: E4 pairs (NaN -> 0), rows g / g+8 of each m-tile, columns outputColumnOffset + e*32 + 8j + 2t + g = p.shr32(lane, 2); t = p.and32(lane, 3) + colBase = p.add32(outputColumnOffset, p.add32(p.mul32(expert, NOUT), p.mul32(t, 2))) + for i in range(mt): + rowG = p.add32(p.add32(blockRow, p.mul32(warp, 16 * mt)), p.add32(g, p.imm32(i * 16))) + for half in range(2): + row = p.add32(rowG, half * 8) + pRow = p.setp("lt.u32", row, rows) + rowAddr = p.mad_wide(row, outputStride, D) + for j in range(NOUT // 8): + w = nan_to_zero_pairs(e4pair(acc2s[i][j][half])) + h = p.reg("b16"); p.emit(f"cvt.u16.u32 {h}, {w};") + addr = p.add64(rowAddr, p.widen(p.add32(colBase, j * 8))) + p.emit(f"@{pRow} st.global.b16 [{addr}], {h};") + p.emit("ret;") + return name, p.finish() + + +if __name__ == "__main__": + K, out = int(sys.argv[1]), sys.argv[2] + stages = int(sys.argv[3]) if len(sys.argv) > 3 else STAGES + ksub = int(sys.argv[4]) if len(sys.argv) > 4 else KSUB + mt = int(sys.argv[5]) if len(sys.argv) > 5 else MT + max_regs = int(sys.argv[6]) if len(sys.argv) > 6 else None + hidden = int(sys.argv[7]) if len(sys.argv) > 7 else HIDDEN + nout = int(sys.argv[8]) if len(sys.argv) > 8 else NOUT + name, text = generate(K, stages, ksub, mt, max_regs, hidden, nout) + with open(out, "w", newline="\n") as f: + f.write(text) + print(name) diff --git a/third_party/opendlss-nr/scripts/ptx/ptxgen.py b/third_party/opendlss-nr/scripts/ptx/ptxgen.py new file mode 100644 index 000000000..0c86acfd0 --- /dev/null +++ b/third_party/opendlss-nr/scripts/ptx/ptxgen.py @@ -0,0 +1,133 @@ +"""Tiny PTX emitter used by the dlss5vk kernel generators. + +Registers are virtual (PTX renames them); we only need unique names. Loops that +depend on compile-time parameters are unrolled here in Python so every shared +memory offset and fragment index is a literal. +""" + + +class Ptx: + def __init__(self, target="sm_89", version="8.7"): + self.lines = [f".version {version}", f".target {target}", ".address_size 64", ""] + self.body = [] + self.counter = {} + self.labels = 0 + + # ---- registers + def reg(self, kind): + """Return a fresh register name of the given PTX type ('b32', 'b64', 'pred', 'f32', 'b16', 'f16x2').""" + prefix = {"b32": "r", "b64": "rd", "pred": "p", "f32": "f", "b16": "h", "f16x2": "hx", "u32": "u", "f16": "hf"}[kind] + n = self.counter.get(kind, 0) + self.counter[kind] = n + 1 + return f"%{prefix}{n}" + + def regs(self, kind, count): + return [self.reg(kind) for _ in range(count)] + + def label(self, base="L"): + self.labels += 1 + return f"{base}_{self.labels}" + + # ---- emission + def emit(self, text): + self.body.append(" " + text) + + def comment(self, text): + self.body.append(" // " + text) + + def entry(self, name, params, shared_bytes, max_threads=None, max_regs=None, dynamic_shared=False): + """Begin an entry point. params: list of (ptxtype, name). dynamic_shared: declare an extern (launch-sized) + shared array instead of a static one (static arrays are limited to 48 KB).""" + decl = ", ".join(f".param .{t} {n}" for t, n in params) + header = f".visible .entry {name}({decl})" + if max_threads: + header += "\n.maxntid " + str(max_threads) + ", 1, 1" + if max_regs: + header += "\n.maxnreg " + str(max_regs) + self._entry = (header, 0 if dynamic_shared else shared_bytes) + if dynamic_shared: + self.lines.append(f"// dynamic_shared {shared_bytes}") # the launch's shared size (Kernels::ptxKernel parses it) + self.lines.append(".extern .shared .align 128 .b8 smem[];") + + def finish(self): + header, shared_bytes = self._entry + regdecl = [] + for kind, count in self.counter.items(): + ptxtype = {"b32": ".b32", "b64": ".b64", "pred": ".pred", "f32": ".f32", "b16": ".b16", "f16x2": ".b32", "u32": ".u32", "f16": ".f16"}[kind] + prefix = {"b32": "r", "b64": "rd", "pred": "p", "f32": "f", "b16": "h", "f16x2": "hx", "u32": "u", "f16": "hf"}[kind] + regdecl.append(f" .reg {ptxtype} %{prefix}<{count}>;") + shared = f" .shared .align 128 .b8 smem[{shared_bytes}];" if shared_bytes else "" + text = "\n".join(self.lines) + "\n" + header + "\n{\n" + "\n".join(regdecl) + "\n" + shared + "\n" + "\n".join(self.body) + "\n}\n" + return text + + # ---- common helpers + def load_param_u64(self, name): + r = self.reg("b64") + self.emit(f"ld.param.u64 {r}, [{name}];") + return r + + def load_param_u32(self, name): + r = self.reg("b32") + self.emit(f"ld.param.u32 {r}, [{name}];") + return r + + def special(self, sreg): + r = self.reg("b32") + self.emit(f"mov.u32 {r}, %{sreg};") + return r + + def imm32(self, value): + r = self.reg("b32") + self.emit(f"mov.u32 {r}, {value};") + return r + + def op32(self, opcode, a, b): + r = self.reg("b32") + self.emit(f"{opcode} {r}, {a}, {b};") + return r + + def add32(self, a, b): return self.op32("add.u32", a, b) + def sub32(self, a, b): return self.op32("sub.u32", a, b) + def mul32(self, a, b): return self.op32("mul.lo.u32", a, b) + def and32(self, a, b): return self.op32("and.b32", a, b) + def or32(self, a, b): return self.op32("or.b32", a, b) + def xor32(self, a, b): return self.op32("xor.b32", a, b) + def shl32(self, a, b): return self.op32("shl.b32", a, b) + def shr32(self, a, b): return self.op32("shr.u32", a, b) + + def mad32(self, a, b, c): + r = self.reg("b32") + self.emit(f"mad.lo.u32 {r}, {a}, {b}, {c};") + return r + + def mad_wide(self, a, b, c64): + """64-bit: a(u32) * b(u32) + c(u64).""" + r = self.reg("b64") + self.emit(f"mad.wide.u32 {r}, {a}, {b}, {c64};") + return r + + def add64(self, a, b): + r = self.reg("b64") + self.emit(f"add.u64 {r}, {a}, {b};") + return r + + def widen(self, a): + r = self.reg("b64") + self.emit(f"cvt.u64.u32 {r}, {a};") + return r + + def setp(self, cmp, a, b): + p = self.reg("pred") + self.emit(f"setp.{cmp} {p}, {a}, {b};") + return p + + def selp32(self, p, a, b): + r = self.reg("b32") + self.emit(f"selp.b32 {r}, {a}, {b}, {p};") + return r + + def shared_addr(self, byte_offset_reg): + """32-bit shared-space address of smem + offset.""" + r = self.reg("b32") + self.emit(f"mov.u32 {r}, smem;") + return self.add32(r, byte_offset_reg) diff --git a/third_party/opendlss-nr/scripts/ptx/qkv_e4m3.py b/third_party/opendlss-nr/scripts/ptx/qkv_e4m3.py new file mode 100644 index 000000000..2be700269 --- /dev/null +++ b/third_party/opendlss-nr/scripts/ptx/qkv_e4m3.py @@ -0,0 +1,276 @@ +"""QKV projection + cosine normalization + 8x8 window attention for (window, head) items in PTX +(the qkv_attention.comp dataflow at the fragment level; see block32_e4m3.py for the block-level version). + +Workgroup = 4 warps, persistent over items (item = head * windowCount + window, stride = grid); warp q owns the +window's tokens 16q .. 16q+15. + q/k/v = A(window rows of the E4 block state, K = C) x Wqkv[head columns] over K in k32 steps: the A fragments come + straight from global memory (ADEPTH k32 steps in flight in registers, zero outside the image); the head's 96 + weight columns per k32 step are staged in a cp.async ring (3 KB per step). + normalize q (learned scale) and k; K rows / transposed V of this head into shared (physical token order); + S = prior[head] + Q K^T; the specified softmax; P V; E4 output at columns head * 32 of the attended tensor. +NaN handling: the normalization's NaN -> 0 (zero rows at the image border) runs under a warp vote; V and the +attended tile are converted directly (finite data: every state is a saturated publication). + +python qkv_e4m3.py out.ptx [maxregs] +""" +import sys +from ptxgen import Ptx +from swin import * + +THREADS = 128 +STAGES = 2 # cp.async ring depth (steps in flight = STAGES - 1) +ALD = "cg" # A operand load cache hint (produced by the chained FFN launch: no L1 / texture path) +ADEPTH = 2 # k32 steps of A fragments in flight +B_BYTES = 96 * 32 # one k32 step of the head's B tiles: [96 n][32 B] (chunk-swizzled rows) +STEP_BYTES = B_BYTES + 64 * 32 # + the window's A tile [64 tokens][32 B] (chunk-swizzled rows, zero outside the image) +KROWS = STAGES * STEP_BYTES # K [64 physical][32 B] swizzled (2 KB) +VTS = KROWS + 2048 # Vt [32 dim][64 B] swizzled (chunk ^= (dim >> 1) & 3) +STG = VTS + 2048 # per warp 512 B output staging +SHARED_BYTES = STG + 4 * 512 + + +def generate(C, max_regs=None): + assert C % 32 == 0 + steps = C // 32 + stages = min(STAGES, steps) + name = f"qkv_e4m3_K{C}" + p = Ptx() + params = [("u64", "pState"), ("u64", "pWqkv"), ("u64", "pPrior"), ("u64", "pAux"), ("u64", "pOut"), + ("u32", "width"), ("u32", "height"), ("u32", "shiftX"), ("u32", "shiftY"), ("u32", "windowsX"), + ("u32", "scaleWord"), ("u32", "windowCount"), ("u32", "itemCount"), + ("u64", "pWait"), ("u64", "pSignal"), ("u32", "waitMul"), ("u32", "waitGroupRows"), ("u64", "pError")] # chaining: this block's FFN row bands (wait, waitMul signals per row group of waitGroupRows rows), window rows (signal); 0 = off + p.entry(name, params, SHARED_BYTES, THREADS, max_regs) + P = {n: (p.load_param_u64(n) if t == "u64" else p.load_param_u32(n)) for t, n in params} + tid = p.special("tid.x"); ctaid = p.special("ctaid.x"); nctaid = p.special("nctaid.x") + lane = p.and32(tid, 31); warp = p.shr32(tid, 5) + li = LaneInfo(p, lane) + g, t = li.g, li.t + smem = p.shared_addr(p.imm32(0)) + zero = imm(p, 0) + exp_k = ExpConsts(p) + + # ---- lane constants + l8 = p.and32(lane, 7); lm = p.shr32(lane, 3) + bNL = p.add32(l8, p.shl32(p.shr32(lane, 4), 3)); bChunkL = p.and32(lm, 1) + bPch = p.xor32(bChunkL, p.and32(p.shr32(bNL, 2), 1)) + bLaneOff = p.add32(p.shl32(bNL, 5), p.shl32(bPch, 4)) + ringB = p.add32(smem, bLaneOff) + kLane = p.add32(p.add32(smem, KROWS), bLaneOff) + vSwz = p.and32(p.shr32(bNL, 1), 3) + vLane = [p.add32(p.add32(smem, VTS), p.add32(p.shl32(bNL, 6), p.shl32(p.xor32(p.xor32(bChunkL, p.imm32(2 * st)), vSwz), 4))) + for st in range(2)] + # K rows / Vt publication of this warp's tokens g, g + 8 (physical order) + phys = [tiled_token_regs(p, p.add32(p.shl32(warp, 4), p.add32(g, p.imm32(8 * h)))) for h in range(2)] + kBase = []; vBase = [] + for h in range(2): + swz = p.and32(p.shr32(phys[h], 2), 1) + kBase.append([p.add32(p.add32(smem, KROWS), p.add32(p.shl32(phys[h], 5), p.add32(p.shl32(p.xor32(p.imm32(c), swz), 4), p.shl32(t, 1)))) for c in range(2)]) + vBase.append(p.add32(p.add32(smem, VTS), p.add32(p.shl32(t, 7), p.add32(p.shl32(p.xor32(p.shr32(phys[h], 4), t), 4), p.and32(phys[h], 15))))) + # A tile chunk of this thread (one 16-byte copy per step): token = tid >> 1, half = tid & 1 + aTok = p.shr32(tid, 1); aHalf = p.and32(tid, 1) + aTokX = p.and32(aTok, 7); aTokY = p.shr32(aTok, 3) + aDst = p.add32(smem, p.add32(p.imm32(B_BYTES), p.add32(p.shl32(aTok, 5), p.shl32(p.xor32(aHalf, p.and32(p.shr32(aTok, 2), 1)), 4)))) + aRowL = p.add32(l8, p.shl32(p.and32(lm, 1), 3)); aChunkL = p.shr32(lane, 4) + aPch = p.xor32(aChunkL, p.and32(p.shr32(aRowL, 2), 1)) + aLane = p.add32(smem, p.add32(p.imm32(B_BYTES), p.add32(p.shl32(p.add32(aRowL, p.shl32(warp, 4)), 5), p.shl32(aPch, 4)))) + # B ring copies: 192 chunks per step, 2 per thread; chunk c: row n = c >> 1, half = c & 1, chunk ^= (n >> 2) & 1 + copies = [] + for i in range(2): + c = p.add32(tid, i * THREADS) + pv = p.setp("lt.u32", c, 192) + n = p.shr32(c, 1); half = p.and32(c, 1) + pch = p.xor32(half, p.and32(p.shr32(n, 2), 1)) + dst = p.add32(smem, p.add32(p.shl32(n, 5), p.shl32(pch, 4))) + copies.append((dst, p.shl32(c, 4), pv)) + # output staging / store lane + stgWarp = p.add32(p.add32(smem, STG), p.shl32(warp, 9)) + stgOut = p.add32(stgWarp, p.add32(p.shl32(g, 5), p.shl32(t, 1))) + ldRow = p.shr32(lane, 1); ldPart = p.and32(lane, 1) + stgRead = p.add32(stgWarp, p.add32(p.shl32(ldRow, 5), p.shl32(ldPart, 4))) + priorRowOff = p.add32(p.shl32(p.add32(p.shl32(warp, 4), g), 7), p.shl32(t, 2)) # + head * 8192 + + # ================= persistent item loop (the next item's first weight stage and A fragments are prefetched + # during the current item's attention phase) + heads = C // 32 + headShift = heads.bit_length() - 1 + assert 1 << headShift == heads + windowsXRcp = rcp_f32(p, P["windowsX"]) + def geometry(itemReg): + # item = window * heads + head (heads is a power of two); window -> (wy, wx) by the f32 reciprocal + gm = {} + gm["head"] = p.and32(itemReg, heads - 1) + window = p.shr32(itemReg, headShift) + wy, wx = fast_divmod(p, window, P["windowsX"], windowsXRcp) + gm["windowX"] = p.sub32(p.shl32(wx, 3), P["shiftX"]); gm["windowY"] = p.sub32(p.shl32(wy, 3), P["shiftY"]) + # this thread's A chunk: token tid >> 1 (pixel windowX + (token & 7), windowY + (token >> 3)), half tid & 1 + xa = p.add32(gm["windowX"], aTokX); ya = p.add32(gm["windowY"], aTokY) + pvx = p.setp("lt.u32", xa, P["width"]); pvy = p.setp("lt.u32", ya, P["height"]) + pv = p.reg("pred"); p.emit(f"and.pred {pv}, {pvx}, {pvy};") + pixel = p.mad32(ya, P["width"], xa) + off = p.selp32(pv, p.add32(p.mul32(pixel, C), p.shl32(aHalf, 4)), p.imm32(0)) + gm["aSrc"] = p.add64(P["pState"], p.widen(off)) + gm["aSize"] = p.selp32(pv, p.imm32(16), p.imm32(0)) + gm["wHead"] = p.add64(P["pWqkv"], p.widen(p.mul32(gm["head"], 96 * 32))) + gm["wy"] = wy + # pixel-row bands of the window: rows [max(8 wy - shiftY, 0), min(+7, height - 1)] + yTop = gm["windowY"] + pNeg = p.setp("gt.s32", p.imm32(0), yTop) + y0 = p.selp32(pNeg, p.imm32(0), yTop) + y1 = p.add32(yTop, 7) + hm1 = p.sub32(P["height"], 1) + pBig = p.setp("gt.u32", y1, hm1) + y1 = p.selp32(pBig, hm1, y1) + gm["band0"] = p.shr32(y0, 3); gm["band1"] = p.shr32(y1, 3) + return gm + + rowsTotal = p.mul32(P["width"], P["height"]) + pWaitOn = p.setp("ne.u64", P["pWait"], 0) + pSignalOn = p.setp("ne.u64", P["pSignal"], 0) + def wait_item(gm, guard=None): + g2 = pWaitOn + if guard is not None: + g2 = p.reg("pred"); p.emit(f"and.pred {g2}, {pWaitOn}, {guard};") + sync_wait(p, P["pWait"], gm["band0"], gm["band1"], lambda b: band_expected(p, b, P["width"], rowsTotal, P["waitMul"], P["waitGroupRows"]), lane, g2, warp, error64=P["pError"]) + + def issue_stage(gm, stageIndex, step, guard=None): + # the head's weight tiles (L1-cached, constant) and the window's A tile (L2 only: produced by the chained FFN) + for dst, srcOff, pv in copies: + saddr = p.add32(dst, p.imm32(stageIndex * STEP_BYTES)) + gaddr = p.add64(gm["wHead"], p.widen(p.add32(srcOff, p.imm32(step * 3 * C * 32)))) + pred = pv + if guard is not None: + pred = p.reg("pred"); p.emit(f"and.pred {pred}, {pv}, {guard};") + p.emit(f"@{pred} cp.async.ca.shared.global [{saddr}], [{gaddr}], 16;") + saddr = p.add32(aDst, p.imm32(stageIndex * STEP_BYTES)) + gaddr = p.add64(gm["aSrc"], p.widen(p.imm32(32 * step))) + pred = f"@{guard} " if guard is not None else "" + p.emit(f"{pred}cp.async.cg.shared.global [{saddr}], [{gaddr}], 16, {gm['aSize']};") + p.emit("cp.async.commit_group;") + + def carry_regs(): + return {"head": p.reg("b32"), "windowX": p.reg("b32"), "windowY": p.reg("b32"), "wy": p.reg("b32"), + "aSrc": p.reg("b64"), "aSize": p.reg("b32"), "wHead": p.reg("b64")} + + def carry_assign(dst, gm, aList=None): + for k in ("head", "windowX", "windowY", "wy", "aSize"): p.emit(f"mov.b32 {dst[k]}, {gm[k]};") + p.emit(f"mov.b64 {dst['aSrc']}, {gm['aSrc']};") + p.emit(f"mov.b64 {dst['wHead']}, {gm['wHead']};") + + item = p.reg("b32"); p.emit(f"mov.u32 {item}, {ctaid};") + pItem = p.setp("lt.u32", item, P["itemCount"]) + endL = p.label("END"); loopL = p.label("ITEM") + p.emit(f"@!{pItem} bra {endL};") + gm0 = geometry(item) + wait_item(gm0) + for j in range(stages - 1): issue_stage(gm0, j, j) + carried = carry_regs() + carry_assign(carried, gm0) + sKeep = [[p.reg("b32"), p.reg("b32")] for _ in range(8)] # the item's scores for the attention tail + for m in range(8): + p.emit(f"mov.b32 {sKeep[m][0]}, 0;"); p.emit(f"mov.b32 {sKeep[m][1]}, 0;") + + def emit_tail(gmT): + """softmax, P V, E4 output of the item whose scores are in sKeep and geometry in gmT (straight-line code).""" + w = softmax(p, sKeep, li, exp_k) + pa = [acc_to_a(p, w[0:4], li), acc_to_a(p, w[4:8], li)] + o = [zero_tile(p) for _ in range(4)] + for step in range(2): + for d2 in range(2): + r = ldm4(p, p.add32(vLane[step], d2 * 1024)) + mma_e4(p, o[2 * d2], pa[step], (r[0], r[1]), o[2 * d2]) + mma_e4(p, o[2 * d2 + 1], pa[step], (r[2], r[3]), o[2 * d2 + 1]) + for j in range(4): + for h in range(2): + hc = cvt_e4x2(p, o[j][h]) + p.emit(f"st.shared.b16 [{stgOut}+{8 * j + 256 * h}], {hc};") + p.emit("bar.warp.sync 0xffffffff;") + r = p.regs("b32", 4) + p.emit(f"ld.shared.v4.b32 {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}}, [{stgRead}];") + tokX = p.add32(gmT["windowX"], p.and32(ldRow, 7)); tokY = p.add32(gmT["windowY"], p.add32(p.shl32(warp, 1), p.shr32(lane, 4))) + pvx2 = p.setp("lt.u32", tokX, P["width"]); pvy2 = p.setp("lt.u32", tokY, P["height"]) + pv = p.reg("pred"); p.emit(f"and.pred {pv}, {pvx2}, {pvy2};") + pixel = p.mad32(tokY, P["width"], tokX) + addr = p.add64(P["pOut"], p.widen(p.add32(p.mul32(pixel, C), p.add32(p.shl32(gmT["head"], 5), p.shl32(ldPart, 4))))) + p.emit(f"@{pv} st.global.v4.b32 [{addr}], {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}};") + + def signal_item(gmT): + # release the attended rows of the item: window row counter (fence + barrier + one red) + p.emit("fence.acq_rel.gpu;") + p.emit("bar.sync 0;") + pSig = p.reg("pred"); p.emit(f"and.pred {pSig}, {pSignalOn}, {p.setp('eq.u32', tid, 0)};") + sigAddr = p.add64(P["pSignal"], p.widen(p.shl32(gmT["wy"], 2))) + p.emit(f"@{pSig} red.release.gpu.global.add.u32 [{sigAddr}], 1;") + + p.emit(f"{loopL}:") + gm = carried + head, windowX, windowY = gm["head"], gm["windowX"], gm["windowY"] + # prior rows of this head and the head scale: issued first + priorLane = p.add64(P["pPrior"], p.widen(p.add32(p.shl32(head, 13), priorRowOff))) + priorRegs = [] + for m in range(8): + c0 = p.reg("b32"); p.emit(f"ld.global.nc.b32 {c0}, [{priorLane}+{16 * m}];") + c1 = p.reg("b32"); p.emit(f"ld.global.nc.b32 {c1}, [{priorLane}+{1024 + 16 * m}];") + priorRegs.append([c0, c1]) + scaleAddr = p.add64(P["pAux"], p.widen(p.shl32(p.add32(P["scaleWord"], head), 2))) + scaleF = p.reg("f32"); p.emit(f"ld.global.nc.f32 {scaleF}, [{scaleAddr}];") + acc = [zero_tile(p) for _ in range(12)] # q tiles 0..3, k 4..7, v 8..11 + for step in range(steps): + stageIndex = step % stages + if step + stages - 1 < steps: + issue_stage(gm, (step + stages - 1) % stages, step + stages - 1) + else: + p.emit("cp.async.commit_group;") + p.emit(f"cp.async.wait_group {stages - 1};") + p.emit("bar.sync 0;") + a = ldm4(p, p.add32(aLane, stageIndex * STEP_BYTES)) + base = p.add32(ringB, stageIndex * STEP_BYTES) + for i2 in range(6): + r = ldm4(p, p.add32(base, i2 * 512)) + mma_e4(p, acc[2 * i2], a, (r[0], r[1]), acc[2 * i2]) + mma_e4(p, acc[2 * i2 + 1], a, (r[2], r[3]), acc[2 * i2 + 1]) + if step + 1 < steps: p.emit("bar.sync 0;") # the stage is free for the next copy + scaleH = p.reg("f16"); p.emit(f"cvt.rn.f16.f32 {scaleH}, {scaleF};") + scale2 = pack16(p, scaleH, scaleH) + qn = normalize(p, acc[0:4], li, zero, scale2) + kn = normalize(p, acc[4:8], li, zero) + mq = acc_to_a(p, qn, li) + for h in range(2): + for j in range(4): + hc = cvt_e4x2(p, kn[j][h]) + p.emit(f"st.shared.b16 [{kBase[h][j >> 1]}+{8 * (j & 1)}], {hc};") + vc = cvt_e4x2(p, acc[8 + j][h]) + vhi = p.reg("b16"); p.emit(f"shr.b16 {vhi}, {vc}, 8;") + p.emit(f"st.shared.u8 [{vBase[h]}+{512 * j}], {vc};") + p.emit(f"st.shared.u8 [{vBase[h]}+{512 * j + 64}], {vhi};") + p.emit("bar.sync 0;") + # prefetch the next item: its first weight stage (the ring is free) and A fragments + nextItem = p.add32(item, nctaid) + pNext = p.setp("lt.u32", nextItem, P["itemCount"]) + gmN = geometry(nextItem) + wait_item(gmN, pNext) + for j in range(stages - 1): issue_stage(gmN, j, j, pNext) + s = [] + for m in range(8): + s.append([priorRegs[m][0], priorRegs[m][1]]) + for m2 in range(4): + r = ldm4(p, p.add32(kLane, m2 * 512)) + mma_e4(p, s[2 * m2], mq, (r[0], r[1]), s[2 * m2]) + mma_e4(p, s[2 * m2 + 1], mq, (r[2], r[3]), s[2 * m2 + 1]) + for m in range(8): + p.emit(f"mov.b32 {sKeep[m][0]}, {s[m][0]};"); p.emit(f"mov.b32 {sKeep[m][1]}, {s[m][1]};") + emit_tail(gm) + signal_item(gm) + carry_assign(carried, gmN) + p.emit(f"mov.u32 {item}, {nextItem};") + p.emit(f"@{pNext} bra {loopL};") + p.emit(f"{endL}:") + p.emit("ret;") + return name, p.finish() + + +if __name__ == "__main__": + C, out = int(sys.argv[1]), sys.argv[2] + max_regs = int(sys.argv[3]) if len(sys.argv) > 3 else None + name, text = generate(C, max_regs) + open(out, "w").write(text) + print(name) diff --git a/third_party/opendlss-nr/scripts/ptx/reduce_e4m3.py b/third_party/opendlss-nr/scripts/ptx/reduce_e4m3.py new file mode 100644 index 000000000..ec679cb7a --- /dev/null +++ b/third_party/opendlss-nr/scripts/ptx/reduce_e4m3.py @@ -0,0 +1,59 @@ +"""Split-K reduction + publication (gemm_reduce.comp): f16 partials [S][rows][N] summed in slice order +(((p0 + p1) + p2) + p3 ...), then SiLU / E4M3 / f16 outputs. One thread per 8 columns. + +python reduce_e4m3.py out.ptx flags: SILU=2 E4=4 F16=8 +""" +import sys +from ptxgen import Ptx +from swin import * + +F_SILU, F_E4, F_F16 = 2, 4, 8 + + +def generate(splits, flags): + siluF, outE4, outF16 = bool(flags & F_SILU), bool(flags & F_E4), bool(flags & F_F16) + name = f"reduce_e4m3_s{splits}_f{flags}" + p = Ptx() + params = [("u64", "pPartial"), ("u64", "pOut"), ("u64", "pOut16"), ("u32", "rows"), ("u32", "N"), ("u32", "splitStride"), + ("u32", "outputStride"), ("u32", "outputColumnOffset")] + p.entry(name, params, 0, 256) + P = {n: (p.load_param_u64(n) if t == "u64" else p.load_param_u32(n)) for t, n in params} + tid = p.special("tid.x"); ctaid = p.special("ctaid.x") + group = p.add32(tid, p.shl32(ctaid, 8)) # 8-column group index + groupsPerRow = p.shr32(P["N"], 3) + row = p.reg("b32"); p.emit(f"div.u32 {row}, {group}, {groupsPerRow};") + col = p.shl32(p.sub32(group, p.mul32(row, groupsPerRow)), 3) + pOk = p.setp("lt.u32", row, P["rows"]) + endL = p.label("END") + p.emit(f"@!{pOk} bra {endL};") + base = p.add64(P["pPartial"], p.widen(p.shl32(p.add32(p.mul32(row, P["N"]), col), 1))) + total = p.regs("b32", 4) + p.emit(f"ld.global.cg.v4.b32 {{{total[0]}, {total[1]}, {total[2]}, {total[3]}}}, [{base}];") + for s in range(1, splits): + part = p.regs("b32", 4) + addr = p.add64(base, p.widen(p.mul32(P["splitStride"], p.imm32(2 * s)))) + p.emit(f"ld.global.cg.v4.b32 {{{part[0]}, {part[1]}, {part[2]}, {part[3]}}}, [{addr}];") + for i in range(4): + total[i] = hadd2(p, total[i], part[i]) + if siluF: + k = SiluConsts(p) + for i in range(4): total[i] = silu(p, total[i], k) + outIdx = p.add32(p.mul32(row, P["outputStride"]), p.add32(P["outputColumnOffset"], col)) + if outE4: + codes = [cvt_e4x2(p, v) for v in total] + w0 = pack16(p, codes[0], codes[1]); w1 = pack16(p, codes[2], codes[3]) + addr = p.add64(P["pOut"], p.widen(outIdx)) + p.emit(f"st.global.v2.b32 [{addr}], {{{w0}, {w1}}};") + if outF16: + addr = p.add64(P["pOut16"], p.widen(p.shl32(outIdx, 1))) + p.emit(f"st.global.v4.b32 [{addr}], {{{total[0]}, {total[1]}, {total[2]}, {total[3]}}};") + p.emit(f"{endL}:") + p.emit("ret;") + return name, p.finish() + + +if __name__ == "__main__": + splits, flags, out = int(sys.argv[1]), int(sys.argv[2]), sys.argv[3] + name, text = generate(splits, flags) + open(out, "w").write(text) + print(name) diff --git a/third_party/opendlss-nr/scripts/ptx/swin.py b/third_party/opendlss-nr/scripts/ptx/swin.py new file mode 100644 index 000000000..956c7e5f5 --- /dev/null +++ b/third_party/opendlss-nr/scripts/ptx/swin.py @@ -0,0 +1,468 @@ +"""Shared PTX building blocks for the DLSS-NR Swin kernels (fragment-level, exact arithmetic). + +Fragment conventions (mma.sync m16n8k32 e4m3 -> f16, and m16n8k16 f16): + lane l: g = l >> 2 (row), t = l & 3. + C/D tile (16 x 8): [c0, c1] f16x2 regs; c0 = (row g, cols 2t, 2t+1), c1 = (row g+8, same cols). + A (16 x 32 e4m3): [a0..a3] b32; a0 = (row g, k 4t..4t+3), a1 = (row g+8, k 4t..), a2 = (row g, 16+4t..), a3 = (row g+8, 16+4t..). + B (32 x 8 e4m3): [b0, b1]; b0 = (k 4t..4t+3, col g), b1 = (k 16+4t.., col g). + A f16 (16 x 16): a0 = (row g, k 2t..2t+1), a1 = (row g+8, ..), a2 = (row g, 8+2t..), a3 = (row g+8, 8+2t..). + B f16 (16 x 8): b0 = (k 2t..2t+1, col g), b1 = (k 8+2t.., col g). +A 16 x 32 f16 accumulator (four C tiles j = 0..3) holds in lane (g, t) the columns 8j + 2t, 8j + 2t + 1 +of rows g and g + 8: the coopmat "element 8h + 2j + i" layout of the GLSL kernels. +""" + + +def mma_e4(p, d, a, b, c): + p.emit(f"mma.sync.aligned.m16n8k32.row.col.f16.e4m3.e4m3.f16 {{{d[0]}, {d[1]}}}, {{{a[0]}, {a[1]}, {a[2]}, {a[3]}}}, " + f"{{{b[0]}, {b[1]}}}, {{{c[0]}, {c[1]}}};") + + +def mma_f16(p, d, a, b, c): + p.emit(f"mma.sync.aligned.m16n8k16.row.col.f16.f16.f16.f16 {{{d[0]}, {d[1]}}}, {{{a[0]}, {a[1]}, {a[2]}, {a[3]}}}, " + f"{{{b[0]}, {b[1]}}}, {{{c[0]}, {c[1]}}};") + + +def ldm4(p, addr): + r = p.regs("b32", 4) + p.emit(f"ldmatrix.sync.aligned.m8n8.x4.shared.b16 {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}}, [{addr}];") + return r + + +def ldm2(p, addr): + r = p.regs("b32", 2) + p.emit(f"ldmatrix.sync.aligned.m8n8.x2.shared.b16 {{{r[0]}, {r[1]}}}, [{addr}];") + return r + + +def zero_tile(p): + d = p.regs("b32", 2) + p.emit(f"mov.b32 {d[0]}, 0;"); p.emit(f"mov.b32 {d[1]}, 0;") + return d + + +def imm(p, value): + r = p.reg("b32"); p.emit(f"mov.b32 {r}, {value};"); return r + + +def f16x2_op(p, op, a, b): + r = p.reg("b32"); p.emit(f"{op}.f16x2 {r}, {a}, {b};"); return r + + +def hadd2(p, a, b): return f16x2_op(p, "add.rn", a, b) +def hmul2(p, a, b): return f16x2_op(p, "mul.rn", a, b) +def hmax2(p, a, b): return f16x2_op(p, "max", a, b) +def hmin2(p, a, b): return f16x2_op(p, "min", a, b) + + +def hfma2(p, a, b, c): + r = p.reg("b32"); p.emit(f"fma.rn.f16x2 {r}, {a}, {b}, {c};"); return r + + +def hadd(p, a, b): + r = p.reg("f16"); p.emit(f"add.rn.f16 {r}, {a}, {b};"); return r + + +def unpack16(p, r): + lo = p.reg("f16"); hi = p.reg("f16") + p.emit(f"mov.b32 {{{lo}, {hi}}}, {r};") + return lo, hi + + +def pack16(p, lo, hi): + r = p.reg("b32"); p.emit(f"mov.b32 {r}, {{{lo}, {hi}}};"); return r + + +def cvt_e4x2(p, v): + """f16x2 -> two E4M3 codes (saturating, NaN -> 0x7f) in a .b16 register.""" + h = p.reg("b16"); p.emit(f"cvt.rn.satfinite.e4m3x2.f16x2 {h}, {v};"); return h + + +def e4x2_to_f16x2(p, h): + """Two E4M3 codes (.b16) -> f16x2 (exact widening; NaN codes -> NaN).""" + r = p.reg("b32"); p.emit(f"cvt.rn.f16x2.e4m3x2 {r}, {h};"); return r + + +def b16_to_b32(p, h): + r = p.reg("b32"); p.emit(f"cvt.u32.u16 {r}, {h};"); return r + + +def b32_to_b16(p, r): + h = p.reg("b16"); p.emit(f"cvt.u16.u32 {h}, {r};"); return h + + +def nanzero(p, v, zero): + """f16x2: NaN lanes -> 0, everything else unchanged (max/min return the non-NaN operand).""" + pos = hmax2(p, v, zero) + neg = hmin2(p, v, zero) + return hadd2(p, pos, neg) + + +def shfl_idx(p, v, src): + r = p.reg("b32"); p.emit(f"shfl.sync.idx.b32 {r}, {v}, {src}, 0x1f, 0xffffffff;"); return r + + +def shfl_xor(p, v, mask): + r = p.reg("b32"); p.emit(f"shfl.sync.bfly.b32 {r}, {v}, {mask}, 0x1f, 0xffffffff;"); return r + + +def prmt(p, a, b, sel): + r = p.reg("b32"); p.emit(f"prmt.b32 {r}, {a}, {b}, {sel};"); return r + + +class SiluConsts: + def __init__(self, p): + self.c4 = imm(p, "0x44004400") # 4.0 + self.cm4 = imm(p, "0xC400C400") # -4.0 + self.cA = imm(p, "0xAB28AB28") # -0.055908203125 + self.cB = imm(p, "0x37283728") # 0.447265625 + self.cC = imm(p, "0x3B283B28") # 0.89453125 + + +def silu(p, v, k): + """siluPair: clamp to [-4, 4], inner = fma(-0.0559, |bounded|, 0.4473), poly = fma(bounded, inner, 0.8945), v * poly.""" + bounded = hmax2(p, v, k.cm4) + bounded = hmin2(p, bounded, k.c4) + ab = p.reg("b32"); p.emit(f"abs.f16x2 {ab}, {bounded};") + inner = hfma2(p, k.cA, ab, k.cB) + poly = hfma2(p, bounded, inner, k.cC) + return hmul2(p, v, poly) + + +class LaneInfo: + """Per-lane constants for the fragment shuffles.""" + def __init__(self, p, lane): + self.lane = lane + self.g = p.shr32(lane, 2) + self.t = p.and32(lane, 3) + quad = p.and32(lane, 28) + self.quad = quad + # acc_to_a sources: lane (g, 2 (t & 1)) and (g, 2 (t & 1) + 1); selector picks the low pairs (t >> 1 == 0) or the high pairs + tl = p.and32(lane, 1) + self.srcA = p.add32(quad, p.shl32(tl, 1)) + self.srcB = p.add32(self.srcA, 1) + th = p.and32(p.shr32(lane, 1), 1) + pHi = p.setp("ne.u32", th, 0) + self.sel = p.selp32(pHi, imm(p, "0x7632"), imm(p, "0x5410")) + self.quadLanes = [quad, p.add32(quad, 1), p.add32(quad, 2), p.add32(quad, 3)] + + +def acc_to_a(p, tiles, li, zero=None): + """Four C tiles (16 x 32 f16) -> the E4M3 A fragment of the same 16 x 32 (NaN -> 0 when `zero` is given).""" + q = [] + for j in range(4): + row = [] + for h in range(2): + v = tiles[j][h] + if zero is not None: v = nanzero(p, v, zero) + row.append(cvt_e4x2(p, v)) + q.append(row) + a = [] + for pair in range(2): # k 0..15 (tiles 0, 1) then k 16..31 (tiles 2, 3) + for h in range(2): + w = pack16(p, q[2 * pair][h], q[2 * pair + 1][h]) + s0 = shfl_idx(p, w, li.srcA); s1 = shfl_idx(p, w, li.srcB) + a.append(prmt(p, s0, s1, li.sel)) + # order: a0 (row g, k 0..15), a1 (row g+8, k 0..15), a2 (row g, k 16..31), a3 (row g+8, k 16..31) + return [a[0], a[1], a[2], a[3]] + + +def acc_f16_to_a(tiles, step): + """16 x 32 f16 accumulator -> f16 A fragment of k16 step `step` (cols 16 step ..): a register renaming.""" + return [tiles[2 * step][0], tiles[2 * step][1], tiles[2 * step + 1][0], tiles[2 * step + 1][1]] + + +def normalize(p, tiles, li, zero, scale2=None, guarded=True): + """Cosine normalization of a 16 x 32 accumulator (per row half), reference association order: + r[c] = fma(v[c], v[c], v[c+16]^2) (c < 16), s8 = r[c] + r[c+8], s4 (lane ^ 2), s2 (lane ^ 1), s1 = s2.x + s2.y, + norm = f16(rsqrt(f32(s1))); v * norm (* scale); NaN -> 0. + guarded: NaN can only come from 0 * inf (a zero row: s1 == 0), so the NaN -> 0 pass runs under a warp-uniform + branch taken only when some lane's row sum is zero (image borders).""" + out = [[None, None] for _ in range(4)] + anyZero = p.reg("pred"); p.emit(f"setp.ne.u32 {anyZero}, 0, 0;") # false + for h in range(2): + p0, p1, p2, p3 = (tiles[j][h] for j in range(4)) + hs0 = hmul2(p, p2, p2) + r0 = hfma2(p, p0, p0, hs0) + hs1 = hmul2(p, p3, p3) + r1 = hfma2(p, p1, p1, hs1) + s8 = hadd2(p, r0, r1) + s8o = shfl_xor(p, s8, 2) + s4 = hadd2(p, s8, s8o) + s4o = shfl_xor(p, s4, 1) + s2 = hadd2(p, s4, s4o) + lo, hi = unpack16(p, s2) + s1 = hadd(p, lo, hi) + f = p.reg("f32"); p.emit(f"cvt.f32.f16 {f}, {s1};") + if guarded: + pz = p.reg("pred"); p.emit(f"setp.eq.f32 {pz}, {f}, 0f00000000;") + p.emit(f"or.pred {anyZero}, {anyZero}, {pz};") + rs = p.reg("f32"); p.emit(f"rsqrt.approx.f32 {rs}, {f};") + norm = p.reg("f16"); p.emit(f"cvt.rn.f16.f32 {norm}, {rs};") + norm2 = pack16(p, norm, norm) + for j in range(4): + n = hmul2(p, tiles[j][h], norm2) + if scale2 is not None: n = hmul2(p, n, scale2) + out[j][h] = n if guarded else nanzero(p, n, zero) + if guarded: + vote = p.reg("pred"); p.emit(f"vote.sync.any.pred {vote}, {anyZero}, 0xffffffff;") + skip = p.label("NZ") + p.emit(f"@!{vote} bra {skip};") + for j in range(4): + for h in range(2): + clean = nanzero(p, out[j][h], zero) + p.emit(f"mov.b32 {out[j][h]}, {clean};") + p.emit(f"{skip}:") + return out + + +class ExpConsts: + def __init__(self, p): + self.a = p.reg("f32"); p.emit(f"mov.f32 {self.a}, 0f3D380000;") # 0.044921875 + self.b = p.reg("f32"); p.emit(f"mov.f32 {self.b}, 0f3FA68000;") # 1.30078125 + self.lo = imm(p, "0x3C203C20") # 1.03125 + self.hi = imm(p, "0x3E473E47") # 1.5693359375 + self.m = imm(p, "0xffe0ffe0") + self.x = imm(p, "0x80008000") + + +def exp_weight(p, s, k): + """the exponential approximation on a packed pair: f32 affine, f16 clamp, (bits << 5 & 0xffe0) ^ 0x8000 per half.""" + lo, hi = unpack16(p, s) + flo = p.reg("f32"); p.emit(f"cvt.f32.f16 {flo}, {lo};") + fhi = p.reg("f32"); p.emit(f"cvt.f32.f16 {fhi}, {hi};") + p.emit(f"fma.rn.f32 {flo}, {flo}, {k.a}, {k.b};") + p.emit(f"fma.rn.f32 {fhi}, {fhi}, {k.a}, {k.b};") + h = p.reg("b32"); p.emit(f"cvt.rn.f16x2.f32 {h}, {fhi}, {flo};") + h = hmax2(p, h, k.lo) + h = hmin2(p, h, k.hi) + r = p.reg("b32"); p.emit(f"shl.b32 {r}, {h}, 5;") + d = p.reg("b32"); p.emit(f"lop3.b32 {d}, {r}, {k.m}, {k.x}, 0x6A;") # (a & b) ^ c + return d + + +def softmax(p, s_tiles, li, k): + """16 x 64 score accumulator (8 C tiles) -> attention weights in the same layout (the specified softmax reduction order).""" + w = [[None, None] for _ in range(8)] + for h in range(2): + e = [exp_weight(p, s_tiles[m][h], k) for m in range(8)] + bp = [hadd2(p, e[2 * j], e[2 * j + 1]) for j in range(4)] + t01 = hadd2(p, bp[0], bp[1]) + t012 = hadd2(p, t01, bp[2]) + tp = hadd2(p, t012, bp[3]) + tq = [shfl_idx(p, tp, src) for src in li.quadLanes] + parts = [unpack16(p, t) for t in tq] + e01 = hadd(p, parts[0][0], parts[1][0]); e012 = hadd(p, e01, parts[2][0]); even = hadd(p, e012, parts[3][0]) + o01 = hadd(p, parts[0][1], parts[1][1]); o012 = hadd(p, o01, parts[2][1]); odd = hadd(p, o012, parts[3][1]) + total = hadd(p, even, odd) + f = p.reg("f32"); p.emit(f"cvt.f32.f16 {f}, {total};") + rc = p.reg("f32"); p.emit(f"rcp.rn.f32 {rc}, {f};") + rec = p.reg("f16"); p.emit(f"cvt.rn.f16.f32 {rec}, {rc};") + rec2 = pack16(p, rec, rec) + for m in range(8): + w[m][h] = hmul2(p, e[m], rec2) + return w + + +def tiled_token_regs(p, token): + """natural token (0..63) -> physical (tiled) index: (y >> 2) * 32 + (x >> 2) * 16 + (y & 3) * 4 + (x & 3).""" + x = p.and32(token, 7); y = p.shr32(token, 3) + a = p.shl32(p.shr32(y, 2), 5) + b = p.shl32(p.shr32(x, 2), 4) + c = p.shl32(p.and32(y, 3), 2) + d = p.and32(x, 3) + return p.add32(p.add32(a, b), p.add32(c, d)) + + +def fast_divmod(p, n, d, dRcp): + """Exact unsigned division of n (< 2^24) by d (> 0) via the f32 reciprocal dRcp = 1 / d (rcp.rn), corrected by + one remainder check each way: returns (q, r).""" + f = p.reg("f32"); p.emit(f"cvt.rn.f32.u32 {f}, {n};") + qf = p.reg("f32"); p.emit(f"mul.rn.f32 {qf}, {f}, {dRcp};") + q = p.reg("b32"); p.emit(f"cvt.rzi.u32.f32 {q}, {qf};") + r = p.reg("b32"); p.emit(f"mul.lo.u32 {r}, {q}, {d};"); p.emit(f"sub.u32 {r}, {n}, {r};") + pNeg = p.setp("lt.s32", r, 0) # r < 0 as signed: q one too large + pBig = p.setp("ge.u32", r, d) # r >= d: q one too small (only when r >= 0) + p.emit(f"@{pNeg} sub.u32 {q}, {q}, 1;"); p.emit(f"@{pNeg} add.u32 {r}, {r}, {d};") + pBig2 = p.reg("pred"); p.emit(f"and.pred {pBig2}, {pBig}, !{pNeg};") + p.emit(f"@{pBig2} add.u32 {q}, {q}, 1;"); p.emit(f"@{pBig2} sub.u32 {r}, {r}, {d};") + return q, r + + +def rcp_f32(p, d): + f = p.reg("f32"); p.emit(f"cvt.rn.f32.u32 {f}, {d};") + r = p.reg("f32"); p.emit(f"rcp.rn.f32 {r}, {f};") + return r + + +def acc_to_a_smem(p, tiles, cBase, aLane, zero=None): + """Four C tiles (16 x 32 f16) -> the E4M3 A fragment through a per-warp [16][32 B] chunk-swizzled staging tile: + cBase[c] = tile + g * 32 + ((c ^ ((g >> 2) & 1)) * 16) + 2 t for chunk c (the C-layout store addresses), + aLane = tile + aRowL * 32 + (aChunkL ^ ((aRowL >> 2) & 1)) * 16 (the ldmatrix address). NaN -> 0 when `zero`.""" + p.emit("bar.warp.sync 0xffffffff;") # the previous fragment load from the tile has completed + for j in range(4): + for h in range(2): + v = tiles[j][h] + if zero is not None: v = nanzero(p, v, zero) + hc = cvt_e4x2(p, v) + p.emit(f"st.shared.b16 [{cBase[j >> 1]}+{8 * (j & 1) + 256 * h}], {hc};") + p.emit("bar.warp.sync 0xffffffff;") + return ldm4(p, aLane) + + +# ---- cross-kernel dependency counters (barrier-free chaining of consecutive launches) +# Counters are u32 in a per-frame zeroed buffer. Producers: fence.acq_rel.gpu + bar.sync + thread 0 red.release.gpu.add. +# Consumers: every warp polls its counters (lanes in parallel) with ld.acquire.gpu until all reach the expected count. + +SLEEP_MAX = 256 # ns: polling backoff ceiling +WAIT_LIMIT_NS = 1_000_000_000 # a wait this long is a failed scheduling assumption (docs/execution.md), not a slow frame + + +def sync_wait(p, base64, first, last, expected, lane, guard=None, warp=None, *, error64): + """Spin until counters [first .. last] (at most 32) at base64 (u64 byte address of counter 0) are all >= expected + (a register, or a callable emitting the expected count for the counter index register). `guard` (pred) skips the + wait when false. With `warp` given, only warp 0 polls (exponential backoff 128 .. 256 ns) and a bar.sync + releases the workgroup; otherwise every warp polls for itself. + A wait that lasts WAIT_LIMIT_NS gives up instead of hanging: it sets bit 31 of the counters it is stuck on (which + releases every other waiter on them), adds one to the u32 at error64 and, if it is the first, records the low + 32 bits of a stuck counter's address at error64 + 4. Every other wait still spinning then gives up too, so the + frame completes one limit later and the host reports it.""" + skip = p.label("NOWAIT") + if guard is not None: p.emit(f"@!{guard} bra {skip};") + if warp is not None: + pW0 = p.setp("ne.u32", warp, 0) + joinL = p.label("WJOIN") + p.emit(f"@{pW0} bra {joinL};") + idx = p.add32(first, lane) + pMine = p.setp("le.u32", idx, last) + if callable(expected): expected = expected(idx) + addr = p.add64(base64, p.widen(p.shl32(idx, 2))) + sleep = p.reg("b32"); p.emit(f"mov.u32 {sleep}, 128;") + start = p.reg("b64"); p.emit(f"mov.u64 {start}, %globaltimer;") + loop = p.label("WAIT") + p.emit(f"{loop}:") + v = p.reg("b32"); p.emit(f"mov.u32 {v}, 0xffffffff;") + p.emit(f"@{pMine} ld.acquire.gpu.global.u32 {v}, [{addr}];") + pOk = p.setp("ge.u32", v, expected) + pAll = p.reg("pred"); p.emit(f"vote.sync.all.pred {pAll}, {pOk}, 0xffffffff;") + done = p.label("WAITED") + p.emit(f"@{pAll} bra {done};") + p.emit(f"nanosleep.u32 {sleep};") + p.emit(f"shl.b32 {sleep}, {sleep}, 1;") + p.emit(f"min.u32 {sleep}, {sleep}, {SLEEP_MAX};") + elapsed = p.reg("b64"); p.emit(f"mov.u64 {elapsed}, %globaltimer;"); p.emit(f"sub.u64 {elapsed}, {elapsed}, {start};") + pLate = p.setp("gt.u64", elapsed, WAIT_LIMIT_NS) + gaveUp = p.reg("b32"); p.emit(f"ld.relaxed.gpu.global.u32 {gaveUp}, [{error64}];") # once one wait gave up, all do + pAbandon = p.setp("ne.u32", gaveUp, 0) + pGiveUp = p.reg("pred"); p.emit(f"or.pred {pGiveUp}, {pLate}, {pAbandon};") + p.emit(f"@!{pGiveUp} bra {loop};") + pStuck = p.reg("pred"); p.emit(f"and.pred {pStuck}, {pMine}, !{pOk};") + p.emit(f"@{pStuck} red.relaxed.gpu.global.or.b32 [{addr}], 0x80000000;") + pLane0 = p.setp("eq.u32", lane, 0) + p.emit(f"@{pLane0} red.relaxed.gpu.global.add.u32 [{error64}], 1;") + addrLow = p.reg("b32"); p.emit(f"cvt.u32.u64 {addrLow}, {addr};") + first_ = p.reg("b32"); p.emit(f"@{pStuck} atom.relaxed.gpu.global.cas.b32 {first_}, [{error64}+4], 0, {addrLow};") + p.emit(f"{done}:") + if warp is not None: + p.emit(f"{joinL}:") + p.emit("bar.sync 0;") + p.emit(f"{skip}:") + + +def sync_signal(p, addrs, tid, guard=None): + """After this workgroup's global stores: release them and increment the counters at addrs (u64 regs) by one. + All threads must reach this point (bar.sync inside).""" + p.emit("fence.acq_rel.gpu;") + p.emit("bar.sync 0;") + pT0 = p.setp("eq.u32", tid, 0) + if guard is not None: + pG = p.reg("pred"); p.emit(f"and.pred {pG}, {pT0}, {guard};"); pT0 = pG + for a in addrs: + p.emit(f"@{pT0} red.release.gpu.global.add.u32 [{a}], 1;") + + +def band_range(p, rowFirst, rowLast, width): + """Pixel-row bands (8 rows) touched by token rows [rowFirst, rowLast]: (b0, b1).""" + y0 = p.reg("b32"); p.emit(f"div.u32 {y0}, {rowFirst}, {width};") + y1 = p.reg("b32"); p.emit(f"div.u32 {y1}, {rowLast}, {width};") + return p.shr32(y0, 3), p.shr32(y1, 3) + + +def band_expected(p, band, width, rows, mul=None, groupRows=None): + """Number of producer row groups (of `groupRows` token rows each; a register, 64 when None) intersecting pixel-row + band `band` (rows [8 band, 8 band + 8) of `width` tokens), times `mul` (the producer's signals per row group, + e.g. its column-group count). The producer signals every band its rows touch once per workgroup, so this count + must be exactly its workgroup size: a smaller group size here would release the consumer early (the C=256 + FFN runs 48-row workgroups).""" + t0 = p.mul32(p.shl32(band, 3), width) + t1 = p.sub32(p.add32(t0, p.shl32(width, 3)), 1) + rowsMinus1 = p.sub32(rows, 1) + pClamp = p.setp("gt.u32", t1, rowsMinus1) + t1c = p.selp32(pClamp, rowsMinus1, t1) + if groupRows is None: + g0, g1 = p.shr32(t0, 6), p.shr32(t1c, 6) + else: + g0 = p.reg("b32"); p.emit(f"div.u32 {g0}, {t0}, {groupRows};") + g1 = p.reg("b32"); p.emit(f"div.u32 {g1}, {t1c}, {groupRows};") + n = p.add32(p.sub32(g1, g0), 1) + return n if mul is None else p.mul32(n, mul) + + +# ---- ViT variants of the same publication rules (different constants, different orderings) +def vit_exp(p, s, k): + """expWeightPairVit on a packed pair: fma.rn.f16x2 (0.0895, 1.709), clamp [1.4395, 1.9775], ((bits << 4) + 0x4000) & 0xffff per half.""" + a = hfma2(p, s, k.c1, k.c2) + a = hmax2(p, a, k.lo) + a = hmin2(p, a, k.hi) + lo = p.reg("b32"); p.emit(f"shl.b32 {lo}, {a}, 4;"); p.emit(f"add.u32 {lo}, {lo}, 0x4000;"); p.emit(f"and.b32 {lo}, {lo}, 0xffff;") + hi = p.reg("b32"); p.emit(f"shr.u32 {hi}, {a}, 12;"); p.emit(f"and.b32 {hi}, {hi}, 0xfff0;"); p.emit(f"add.u32 {hi}, {hi}, 0x4000;") + p.emit(f"and.b32 {hi}, {hi}, 0xffff;"); p.emit(f"shl.b32 {hi}, {hi}, 16;") + r = p.reg("b32"); p.emit(f"or.b32 {r}, {lo}, {hi};") + return r + + +class VitExpConsts: + def __init__(self, p): + self.c1 = imm(p, "0x2DBB2DBB") # f16(0.08953946828842163) + self.c2 = imm(p, "0x3ED63ED6") # f16(1.7093614339828491) + self.lo = imm(p, "0x3DC23DC2") # 1.439453125 + self.hi = imm(p, "0x3FE93FE9") # 1.9775390625 + + +def vit_norm(p, w): + """inverseNormVit on 32 halves (16 packed words): r[m] = f16(f32(v[m])^2 + f32(f16(v[m+8]^2))) per component, + s8/s4/s2 in f16x2, s1 = s2.x + s2.y, f16(rsqrt(f32(s1))) broadcast to a pair.""" + r = [] + for m in range(8): + hs = hmul2(p, w[m + 8], w[m + 8]) + lo, hi = unpack16(p, w[m]) + flo = p.reg("f32"); p.emit(f"cvt.f32.f16 {flo}, {lo};") + fhi = p.reg("f32"); p.emit(f"cvt.f32.f16 {fhi}, {hi};") + p.emit(f"mul.rn.f32 {flo}, {flo}, {flo};"); p.emit(f"mul.rn.f32 {fhi}, {fhi}, {fhi};") + hlo, hhi = unpack16(p, hs) + glo = p.reg("f32"); p.emit(f"cvt.f32.f16 {glo}, {hlo};") + ghi = p.reg("f32"); p.emit(f"cvt.f32.f16 {ghi}, {hhi};") + p.emit(f"add.rn.f32 {flo}, {flo}, {glo};"); p.emit(f"add.rn.f32 {fhi}, {fhi}, {ghi};") + d = p.reg("b32"); p.emit(f"cvt.rn.f16x2.f32 {d}, {fhi}, {flo};") + r.append(d) + s8 = [hadd2(p, r[m], r[m + 4]) for m in range(4)] + s4a = hadd2(p, s8[0], s8[2]); s4b = hadd2(p, s8[1], s8[3]) + s2 = hadd2(p, s4a, s4b) + lo, hi = unpack16(p, s2) + s1 = hadd(p, lo, hi) + f = p.reg("f32"); p.emit(f"cvt.f32.f16 {f}, {s1};") + rs = p.reg("f32"); p.emit(f"rsqrt.approx.f32 {rs}, {f};") + n = p.reg("f16"); p.emit(f"cvt.rn.f16.f32 {n}, {rs};") + return pack16(p, n, n) + + +def vit_quantize(p, w, norm2, query, hs2, learned2, zero): + """scaleQuantizeVit: 32 halves times the norm (queries: then f16(sqrt 32), then the learned scale), E4 codes (8 words). + A zero row has norm = inf and 0 * inf = NaN: the GLSL conversion yields 0 for it (nanzero before the cvt).""" + codes = [] + for i in range(8): + a = hmul2(p, w[2 * i], norm2); b = hmul2(p, w[2 * i + 1], norm2) + if query: + a = hmul2(p, hmul2(p, a, hs2), learned2); b = hmul2(p, hmul2(p, b, hs2), learned2) + a = nanzero(p, a, zero); b = nanzero(p, b, zero) + codes.append(pack16(p, cvt_e4x2(p, a), cvt_e4x2(p, b))) + return codes diff --git a/third_party/opendlss-nr/scripts/ptx/test_fast_divmod.py b/third_party/opendlss-nr/scripts/ptx/test_fast_divmod.py new file mode 100644 index 000000000..9d3072a9d --- /dev/null +++ b/third_party/opendlss-nr/scripts/ptx/test_fast_divmod.py @@ -0,0 +1,70 @@ +"""Regression test for swin.fast_divmod: interpret the PTX it emits, over every n < 2^24, and compare with exact +unsigned division. The emitted instructions are what is executed (so an impossible `setp` is caught), with the +IEEE semantics PTX gives them. Needs numpy. + + python scripts/ptx/test_fast_divmod.py [max divisor, default 32] +""" +import os, re, sys +import numpy as np + +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +import ptxgen, swin # noqa: E402 + +INSTR = re.compile(r"^(?:@(!?)(%\w+)\s+)?([\w.]+)\s+(.*);$") + + +def emit(): + p = ptxgen.Ptx() + n, d = p.reg("b32"), p.reg("b32") + q, r = swin.fast_divmod(p, n, d, swin.rcp_f32(p, d)) + return [line.strip() for line in p.body], n, d, q, r + + +def execute(lines, regs): + def val(token): + negate = token.startswith("!") + token = token.lstrip("!") + v = regs[token] if token.startswith("%") else np.uint32(int(token, 0) & 0xffffffff) + return ~v if negate else v + + s32 = lambda v: np.asarray(v, dtype=np.uint32).view(np.int32) + for line in lines: + negate, guard, op, args = INSTR.match(line).groups() + dst, *src = [a.strip() for a in args.split(",")] + a = [val(s) for s in src] + if op == "cvt.rn.f32.u32": out = a[0].astype(np.float32) + elif op == "rcp.rn.f32": out = np.float32(1) / a[0] + elif op == "mul.rn.f32": out = a[0] * a[1] + elif op == "cvt.rzi.u32.f32": out = np.clip(np.trunc(a[0].astype(np.float64)), 0, 2**32 - 1).astype(np.uint32) + elif op == "mul.lo.u32": out = (a[0].astype(np.uint64) * a[1] & 0xffffffff).astype(np.uint32) + elif op == "sub.u32": out = a[0] - a[1] + elif op == "add.u32": out = a[0] + a[1] + elif op == "and.pred": out = a[0] & a[1] + elif op.startswith("setp."): + _, cmp, kind = op.split(".") + x, y = (s32(a[0]), s32(a[1])) if kind == "s32" else (a[0], a[1]) + out = {"gt": x > y, "ge": x >= y, "lt": x < y, "le": x <= y, "eq": x == y, "ne": x != y}[cmp] + else: raise SystemExit(f"test_fast_divmod: {op} is outside the interpreted subset") + if guard: out = np.where(~regs[guard] if negate else regs[guard], out, regs[dst]) + regs[dst] = out + return regs + + +def main(): + top = int(sys.argv[1]) if len(sys.argv) > 1 else 32 + lines, nr, dr, qr, rr = emit() + n = np.arange(1 << 24, dtype=np.uint32) + failures = 0 + for d in list(range(1, top + 1)): + regs = execute(lines, {nr: n, dr: np.full(n.shape, d, dtype=np.uint32)}) + wrong = (regs[qr] != n // d) | (regs[rr] != n % d) + if wrong.any(): + first = int(np.argmax(wrong)) + print(f"d = {d}: {int(wrong.sum())} wrong, first n = {first} -> ({regs[qr][first]}, {regs[rr][first]})") + failures += 1 + print(f"fast_divmod: every n < 2^24, d = 1..{top}: " + ("FAIL" if failures else "exact")) + sys.exit(1 if failures else 0) + + +if __name__ == "__main__": + main() diff --git a/third_party/opendlss-nr/shaders/attention_common.glsl b/third_party/opendlss-nr/shaders/attention_common.glsl new file mode 100644 index 000000000..0cc935a98 --- /dev/null +++ b/third_party/opendlss-nr/shaders/attention_common.glsl @@ -0,0 +1,206 @@ +// Shared machinery of the fused window-attention kernels (fused_block32.comp, +// window_attention_fused.comp). The includer declares, before including: +// layout(...) readonly buffer Prior { float16_t prior[]; }; // [heads][64][64] f16 +// shared uvec4 kv4[...]; // per window: Kp [64][32] E4 at KP, Vp [64][32] E4 at VP (physical-tiled rows) +// shared uvec4 priv4[...]; // PRIV words per subgroup, phase-aliased: +// E4 rows @0..31 [16][32] E4, stride 2: Q (S GEMM input) -> attended (output) +// F64 @32..175 [16][64] f16, stride 9: raw q|k staging, S rows (P E4 aliases words 0..3 of each row, +// the PV epilogue stages its tiles in words 4..7) +// F32 @32..111 [16][32] f16, stride 5 +// HID @32..111 [16][64] E4, stride 5 +// and requires GL_EXT_float_e4m3, the cooperative matrix, subgroup shuffle and +// control-flow-attribute extensions plus common.glsl with DLSS_E4M3_HW. + +const uint PRIV = 176u, F64 = 32u, F32 = 32u, HID = 32u; + +#define ACC coopmat +#define MAT_A coopmat +#define MAT_B coopmat + +uint tiledToken(uint token) { // natural -> physical + uint x = token & 7u, y = token >> 3u; + return (y >> 2u) * 32u + (x >> 2u) * 16u + (y & 3u) * 4u + (x & 3u); +} + +void subgroupSync() { subgroupMemoryBarrierShared(); subgroupBarrier(); } + +// the exponential approximation on a packed pair: f32 affine, half clamp, then per half +// (bits << 5) + 0x8000 masked to 16 bits, which is (bits << 5) ^ 0x8000. +uint expWeightPair(uint scoreBits) { + precise vec2 affine32 = fma(vec2(unpackFloat2x16(scoreBits)), vec2(0.044921875), vec2(1.30078125)); + f16vec2 affine = clamp(f16vec2(affine32), f16vec2(1.03125), f16vec2(1.5693359375)); + return ((packFloat2x16(affine) << 5u) & 0xffe0ffe0u) ^ 0x80008000u; +} + +// Four E4M3 codes from two half pairs, little-endian. +uint e4x4(f16vec2 a, f16vec2 b) { return uint(e4m3HwPair(a)) | (uint(e4m3HwPair(b)) << 16u); } +uint e4x4Bits(uint a, uint b) { return e4x4(unpackFloat2x16(a), unpackFloat2x16(b)); } + +// 16 halves (two words) -> 16 E4M3 codes (one word). +uvec4 quantize16(uvec4 w0, uvec4 w1) { + return uvec4(e4x4Bits(w0.x, w0.y), e4x4Bits(w0.z, w0.w), e4x4Bits(w1.x, w1.y), e4x4Bits(w1.z, w1.w)); +} + +// 16 halves -> SiLU -> 16 E4M3 codes. +uvec4 hidden16(uvec4 w0, uvec4 w1) { + return uvec4(e4x4(siluPair(unpackFloat2x16(w0.x)), siluPair(unpackFloat2x16(w0.y))), + e4x4(siluPair(unpackFloat2x16(w0.z)), siluPair(unpackFloat2x16(w0.w))), + e4x4(siluPair(unpackFloat2x16(w1.x)), siluPair(unpackFloat2x16(w1.y))), + e4x4(siluPair(unpackFloat2x16(w1.z)), siluPair(unpackFloat2x16(w1.w)))); +} + +// round_f16(residual * scale) for eight residual/scale pairs (exact products in f32, one rounding). +uvec4 scaledResidual8(uvec4 residual, uvec4 scale) { + uvec4 r; + [[unroll]] for (uint i = 0u; i < 4u; ++i) { + vec2 product = vec2(unpackFloat2x16(residual[i])) * vec2(unpackFloat2x16(scale[i])); + r[i] = packFloat2x16(f16vec2(product)); + } + return r; +} + +// Same for eight E4M3 residual codes packed in two words. +uvec4 scaledResidualE4x8(uvec2 codes, uvec4 scale) { + uvec4 r; + [[unroll]] for (uint i = 0u; i < 4u; ++i) { + uint pair = (codes[i >> 1u] >> ((i & 1u) * 16u)) & 0xffffu; + vec2 product = vec2(e4m3HwToF32(pair & 0xffu), e4m3HwToF32(pair >> 8u)) * vec2(unpackFloat2x16(scale[i])); + r[i] = packFloat2x16(f16vec2(product)); + } + return r; +} + +// Cosine normalization of one 32-channel vector held as 16 packed pairs: +// r[c] = fma(v[c], v[c], f16(v[c+16]^2)) for c < 16, tree stride 8/4/2/1, each +// level published as half exactly like the reference reduction array. +float16_t inverseNorm(uvec4 w0, uvec4 w1, uvec4 w2, uvec4 w3) { + f16vec2 p[16]; + [[unroll]] for (uint i = 0u; i < 4u; ++i) { + p[i] = unpackFloat2x16(w0[i]); p[4u + i] = unpackFloat2x16(w1[i]); + p[8u + i] = unpackFloat2x16(w2[i]); p[12u + i] = unpackFloat2x16(w3[i]); + } + f16vec2 r[8]; + [[unroll]] for (uint m = 0u; m < 8u; ++m) { + precise f16vec2 highSquare = p[m + 8u] * p[m + 8u]; + precise f16vec2 rm = fma(p[m], p[m], highSquare); + r[m] = rm; + } + f16vec2 s8[4]; + [[unroll]] for (uint m = 0u; m < 4u; ++m) { precise f16vec2 s = r[m] + r[m + 4u]; s8[m] = s; } + precise f16vec2 s4a = s8[0] + s8[2]; + precise f16vec2 s4b = s8[1] + s8[3]; + precise f16vec2 s2 = s4a + s4b; + precise float16_t s1 = s2.x + s2.y; + return float16_t(inversesqrt(float(s1))); +} + +// 32 halves (four words) times a half (and optionally a second half), E4M3 codes of the products (two words). +void scaleQuantize32(uvec4 w0, uvec4 w1, uvec4 w2, uvec4 w3, float16_t norm, float16_t extra, bool applyExtra, + out uvec4 e0, out uvec4 e1) { + uvec4 words[4] = uvec4[4](w0, w1, w2, w3); + uint codes[8]; + [[unroll]] for (uint i = 0u; i < 8u; ++i) { + f16vec2 a = unpackFloat2x16(words[i >> 1u][(i & 1u) * 2u]), b = unpackFloat2x16(words[i >> 1u][(i & 1u) * 2u + 1u]); + precise f16vec2 na = a * norm; + precise f16vec2 nb = b * norm; + if (applyExtra) { + precise f16vec2 sa = na * extra; + precise f16vec2 sb = nb * extra; + na = sa; nb = sb; + } + codes[i] = e4x4(na, nb); + } + e0 = uvec4(codes[0], codes[1], codes[2], codes[3]); + e1 = uvec4(codes[4], codes[5], codes[6], codes[7]); +} + +// Attention for one subgroup's 16 query rows: Q (E4 rows at `base`) against the +// window's Kp/Vp, prior tile row block at `priorOffset` (halves). S = QK^T + prior +// -> the specified softmax (exponential on read, half reciprocal, E4 weights) -> O = PV +// -> attended E4 [16][32] written back into the E4 rows. +void windowAttend(uint base, uint rowBase, uint KP, uint VP, uint priorOffset) { + const uint lane = gl_SubgroupInvocationID; + const uint lr = lane >> 1u, lh = lane & 1u; + const uint sBase = base + F64; // S rows [16][64] f16, 9 words per row + MAT_A mq; coopMatLoad(mq, priv4, base, 2u, gl_CooperativeMatrixLayoutRowMajor); + ACC priors[4]; + [[unroll]] for (uint kTile = 0u; kTile < 4u; ++kTile) + coopMatLoad(priors[kTile], prior, priorOffset + kTile * 16u, 64u, gl_CooperativeMatrixLayoutRowMajor); + [[unroll]] for (uint kTile = 0u; kTile < 4u; ++kTile) { + MAT_B mb; coopMatLoad(mb, kv4, KP + kTile * 32u, 2u, gl_CooperativeMatrixLayoutColumnMajor); + ACC mc = coopMatMulAdd(mq, mb, priors[kTile]); + coopMatStore(mc, priv4, sBase + kTile * 2u, 9u, gl_CooperativeMatrixLayoutRowMajor); + } + subgroupSync(); + // Softmax: one lane pair per S row (lane = row*2 + hh, hh selects keys 0..31 or 32..63). + // the specified softmax reduction: b[g][j] = e[g+16j] + e[g+16j+8]; t[g] = ((b0+b1)+b2)+b3; + // total = (((t0+t2)+t4)+t6) + (((t1+t3)+t5)+t7). The exponentials stay in registers for the weights. + { + uint row = lr, hh = lh; + uint src = sBase + row * 9u + hh * 4u; + uvec4 s0 = priv4[src], s1 = priv4[src + 1u], s2 = priv4[src + 2u], s3 = priv4[src + 3u]; + uint e[16]; // packed exp weights of keys hh*32 + 2i, 2i+1 + [[unroll]] for (uint i = 0u; i < 4u; ++i) { + e[i] = expWeightPair(s0[i]); e[4u + i] = expWeightPair(s1[i]); + e[8u + i] = expWeightPair(s2[i]); e[12u + i] = expWeightPair(s3[i]); + } + // Own b values: this half holds j = 2*hh, 2*hh+1 for every g (local key = g + 16*(j & 1)); + // b[g][j] for g = 2m, 2m+1 live in one packed word. + uint bOwn[8]; // [jLocal * 4 + m] + [[unroll]] for (uint jl = 0u; jl < 2u; ++jl) { + [[unroll]] for (uint m = 0u; m < 4u; ++m) { + precise f16vec2 b = unpackFloat2x16(e[8u * jl + m]) + unpackFloat2x16(e[8u * jl + 4u + m]); + bOwn[jl * 4u + m] = packFloat2x16(b); + } + } + uint bOther[8]; + [[unroll]] for (uint i = 0u; i < 8u; ++i) bOther[i] = subgroupShuffleXor(bOwn[i], 1u); + f16vec2 t[4]; + [[unroll]] for (uint m = 0u; m < 4u; ++m) { + f16vec2 b0 = unpackFloat2x16(hh == 0u ? bOwn[m] : bOther[m]); + f16vec2 b1 = unpackFloat2x16(hh == 0u ? bOwn[4u + m] : bOther[4u + m]); + f16vec2 b2 = unpackFloat2x16(hh == 0u ? bOther[m] : bOwn[m]); + f16vec2 b3 = unpackFloat2x16(hh == 0u ? bOther[4u + m] : bOwn[4u + m]); + precise f16vec2 t01 = b0 + b1; + precise f16vec2 t012 = t01 + b2; + precise f16vec2 tm = t012 + b3; + t[m] = tm; // (t[2m], t[2m+1]) + } + precise float16_t e01 = t[0].x + t[1].x; + precise float16_t e012 = e01 + t[2].x; + precise float16_t even = e012 + t[3].x; + precise float16_t o01 = t[0].y + t[1].y; + precise float16_t o012 = o01 + t[2].y; + precise float16_t odd = o012 + t[3].y; + precise float16_t total = even + odd; + float16_t reciprocal = float16_t(1.0 / float(total)); + uint codes[8]; + [[unroll]] for (uint i = 0u; i < 8u; ++i) { + precise f16vec2 wa = unpackFloat2x16(e[2u * i]) * reciprocal; + precise f16vec2 wb = unpackFloat2x16(e[2u * i + 1u]) * reciprocal; + codes[i] = e4x4(wa, wb); + } + subgroupSync(); // every lane has read its S words before P overwrites words 0..3 of the rows + priv4[sBase + row * 9u + hh * 2u] = uvec4(codes[0], codes[1], codes[2], codes[3]); + priv4[sBase + row * 9u + hh * 2u + 1u] = uvec4(codes[4], codes[5], codes[6], codes[7]); + } + subgroupSync(); + // O = P V over the 64 physical keys as two k32 steps; both 16x16 tiles staged in words 4..7 of the S rows. + ACC mo[2]; + [[unroll]] for (uint cTile = 0u; cTile < 2u; ++cTile) { + mo[cTile] = ACC(0.0); + [[unroll]] for (uint kb = 0u; kb < 64u; kb += 32u) { + MAT_A mp; coopMatLoad(mp, priv4, sBase + (kb >> 4u), 9u, gl_CooperativeMatrixLayoutRowMajor); + MAT_B mv; coopMatLoad(mv, kv4, VP + kb * 2u + cTile, 2u, gl_CooperativeMatrixLayoutRowMajor); + mo[cTile] = coopMatMulAdd(mp, mv, mo[cTile]); + } + } + [[unroll]] for (uint cTile = 0u; cTile < 2u; ++cTile) + coopMatStore(mo[cTile], priv4, sBase + 4u + cTile * 2u, 9u, gl_CooperativeMatrixLayoutRowMajor); + subgroupSync(); + { + uint src = sBase + lr * 9u + 4u + lh * 2u; + priv4[base + lr * 2u + lh] = quantize16(priv4[src], priv4[src + 1u]); // attended E4 [16][32] + } + subgroupSync(); +} diff --git a/third_party/opendlss-nr/shaders/common.glsl b/third_party/opendlss-nr/shaders/common.glsl new file mode 100644 index 000000000..eca933735 --- /dev/null +++ b/third_party/opendlss-nr/shaders/common.glsl @@ -0,0 +1,134 @@ +// Shared numeric helpers: the half / E4M3 publication points of the network, implemented so that every kernel +// (and the CPU reference in src/reference.cpp) rounds identically. +#ifndef DLSS_COMMON_GLSL +#define DLSS_COMMON_GLSL + +#extension GL_EXT_shader_explicit_arithmetic_types : require +#extension GL_EXT_shader_16bit_storage : require +#extension GL_EXT_shader_8bit_storage : require + +// f32 -> RNE f16 -> f32, on the bit pattern. +// Don't write float(float16_t(x)): the NVIDIA compiler drops it as a no-op and the rounding +// goes with it. That was the first parity bug, inside the SiLU. +float roundF16(float value) { + uint bits = floatBitsToUint(value); + uint sign = bits & 0x80000000u; + uint magnitude = bits & 0x7fffffffu; + if (magnitude >= 0x7f800000u) return value; // inf / nan + if (magnitude >= 0x477ff000u) return uintBitsToFloat(sign | 0x7f800000u); // >= 65520 overflows to inf + if (magnitude < 0x38800000u) { // below 2^-14: half subnormal grid 2^-24 + float scaled = roundEven(uintBitsToFloat(magnitude) * 16777216.0); + return uintBitsToFloat(sign) + uintBitsToFloat(sign | floatBitsToUint(scaled * 0.000000059604644775390625)); + } + uint lsb = (magnitude >> 13u) & 1u; + uint rounded = (magnitude + 0xfffu + lsb) & ~0x1fffu; + return uintBitsToFloat(sign | rounded); +} + +uint f16Bits(float16_t value) { return uint(float16BitsToUint16(value)); } +float16_t f16FromBits(uint bits) { return uint16BitsToFloat16(uint16_t(bits & 0xffffu)); } + +uint shiftRne(uint value, uint shift) { + uint quotient = value >> shift; + uint remainderMask = (1u << shift) - 1u; + uint remainder = value & remainderMask; + uint halfway = 1u << (shift - 1u); + return quotient + ((remainder > halfway || (remainder == halfway && (quotient & 1u) != 0u)) ? 1u : 0u); +} + +// An already half-rounded value to its E4M3FN code: RNE, finite saturation at 448, NaN -> +0. +// The sign of a zero survives (code 0x80), as the hardware conversion does. It makes no numeric +// difference; parity compares bytes. +uint e4m3CodeFromF16Bits(uint halfBits) { + bool isNan = (halfBits & 0x7c00u) == 0x7c00u && (halfBits & 0x03ffu) != 0u; + if (isNan) return 0u; + if ((halfBits & 0x7fffu) == 0u) return (halfBits >> 8u) & 0x80u; + uint negative = (halfBits & 0x8000u) != 0u ? 0x80u : 0u; + uint exponent = (halfBits >> 10u) & 0x1fu; + uint mantissa = halfBits & 0x03ffu; + uint code; + if (exponent == 31u) { + code = 0x7eu; // inf saturates + } else if (exponent <= 8u) { // E4M3 subnormal + uint significand = exponent == 0u ? mantissa : 1024u + mantissa; + uint shift = exponent == 0u ? 15u : 16u - exponent; + code = min(shiftRne(significand, shift), 8u); + } else { + uint e4Exponent = exponent - 8u; + uint e4Mantissa = shiftRne(mantissa, 7u); + if (e4Mantissa == 8u) { e4Mantissa = 0u; e4Exponent += 1u; } + code = (e4Exponent > 15u || (e4Exponent == 15u && e4Mantissa > 6u)) ? 0x7eu : ((e4Exponent << 3u) | e4Mantissa); + } + return negative | code; +} + +uint e4m3CodeFromF32(float value) { return e4m3CodeFromF16Bits(f16Bits(float16_t(value))); } + +#ifdef DLSS_E4M3_HW +// Hardware cvt.rn.satfinite.e4m3, equal to e4m3CodeFromF16Bits for every non-NaN half. +// The guard is the whole difference: the instruction turns a NaN into the E4M3 NaN code, and a NaN gets +// here every time a zero row is cosine normalized (0 * inf). +0 keeps that code out of every tensor. +uint8_t e4m3Hw(float16_t value) { + if (isnan(value)) return uint8_t(0u); + floate4m3_t converted; + saturatedConvertEXT(converted, value); + return floate4m3BitsToUintEXT(converted); +} + +// Two halves -> two E4M3 codes packed little-endian, same rules as e4m3Hw. +uint16_t e4m3HwPair(f16vec2 value) { + f16vec2 clean = mix(value, f16vec2(0.0), isnan(value)); + fe4m3vec2 converted; + saturatedConvertEXT(converted, clean); + u8vec2 codes = floate4m3BitsToUintEXT(converted); + return uint16_t(uint(codes.x) | (uint(codes.y) << 8u)); +} + +// Hardware decode. NaN codes read back as 0, as in the reference. +float e4m3HwToF32(uint code) { + float value = float(uintBitsToFloate4m3EXT(uint8_t(code & 0xffu))); + return isnan(value) ? 0.0 : value; +} +#endif + +// The network's cubic SiLU in half FMAs: identical to the f32 formulation (mpCubicSilu below) for all +// 65536 half inputs. +float16_t siluHalf(float16_t value) { + float16_t bounded = clamp(value, float16_t(-4.0), float16_t(4.0)); + precise float16_t inner = fma(float16_t(-0.055908203125), abs(bounded), float16_t(0.447265625)); + precise float16_t polynomial = fma(bounded, inner, float16_t(0.89453125)); + precise float16_t result = value * polynomial; + return result; +} + +f16vec2 siluPair(f16vec2 value) { + f16vec2 bounded = clamp(value, f16vec2(-4.0), f16vec2(4.0)); + precise f16vec2 inner = fma(f16vec2(-0.055908203125), abs(bounded), f16vec2(0.447265625)); + precise f16vec2 polynomial = fma(bounded, inner, f16vec2(0.89453125)); + precise f16vec2 result = value * polynomial; + return result; +} + +float e4m3ToF32(uint bits) { + bool negative = (bits & 0x80u) != 0u; + uint exponent = (bits >> 3u) & 0x0fu; + uint mantissa = bits & 0x07u; + float value; + if (exponent == 0u) value = float(mantissa) * 0.001953125; + else if (exponent == 15u && mantissa == 7u) value = 0.0; + else value = (1.0 + float(mantissa) * 0.125) * uintBitsToFloat((exponent + 120u) << 23u); + return negative ? -value : value; +} + +// The f32 spelling of siluHalf: each step is one f32 operation rounded once to half. +// The explicit fma is not decoration. Without it the compiler splits the multiply-add and +// double-rounds, which was the second thing to break parity. +float mpCubicSilu(float value) { + precise float bounded = roundF16(clamp(value, -4.0, 4.0)); + precise float absolute = roundF16(abs(bounded)); + precise float inner = roundF16(fma(-0.055908203125, absolute, 0.447265625)); + precise float polynomial = roundF16(fma(bounded, inner, 0.89453125)); + return roundF16(value * polynomial); +} + +#endif diff --git a/third_party/opendlss-nr/shaders/fused_block32.comp b/third_party/opendlss-nr/shaders/fused_block32.comp new file mode 100644 index 000000000..83411c46a --- /dev/null +++ b/third_party/opendlss-nr/shaders/fused_block32.comp @@ -0,0 +1,587 @@ +#version 460 +// Fused Swin block for the 32-channel stages (blocks 0-4, 66-70): one window +// slot per four subgroups, everything between the block input and the block +// output stays on chip. +// +// FFN : x(E4) -> W1 (K32->128) -> SiLU -> E4 -> W2 (K128->32) + skip*scale +// QKV : E4(ffn) -> (K32->96) raw half +// attn : cosine normalize -> S = QK^T + prior -> exp -> softmax -> E4 P -> PV +// proj : E4(attended) -> (K32->32) + ffn*scale -> E4 output (+ raw half) +// +// v5 (fragment level, VK_NV_cooperative_matrix2): the window's token rows are one +// tensor load with constant clamping (zero outside the image); every multiply is +// a flexible-dimension coopMatMulAdd; SiLU, residual scaling and the E4M3 +// publications are per-element operations and Use conversions in registers. +// The two exact reductions run on the accumulator elements directly: in the +// accumulator layout (lane g = l>>2, t = l&3 holds rows g and g+8, columns +// 8*tile + 2t, 2t+1) the specified pairings (k, k+8) and (c, c+16), (c, c+8) are +// lane-local and the remaining tree levels are shuffles, in the reference +// association order. Shared memory holds only the block's weights and prior and +// the physical-tiled K/V rows of the two windows in flight. +// +// Every arithmetic boundary is the one verified by the unfused kernels; only the +// data movement changed. The parity gates are the proof. +#extension GL_EXT_float_e4m3 : require +#extension GL_EXT_shader_explicit_arithmetic_types : require +#extension GL_KHR_memory_scope_semantics : require +#extension GL_KHR_cooperative_matrix : require +#extension GL_NV_cooperative_matrix2 : require +#extension GL_KHR_shader_subgroup_basic : require +#extension GL_KHR_shader_subgroup_shuffle : require +#extension GL_EXT_control_flow_attributes : require +#extension GL_GOOGLE_include_directive : require +#define DLSS_E4M3_HW 1 +#ifndef PRIOR_SHARED +#define PRIOR_SHARED 1 +#endif +#include "common.glsl" +#include "publish.glsl" + +layout(local_size_x = 256) in; // two windows per workgroup, four subgroups (16-token row tiles) each + +layout(constant_id = 0) const uint FLAGS = 0; +const uint F_SKIP_F16 = 1u; // FFN residual is the f16 skip buffer (else the E4 state) +const uint F_PRE = 8u; // block 0: f32 input features x f16 adapter (binding 11) -> E4 state and f16 skip in registers +const uint F_POST = 16u; // block 70: learned_post_blend of the 2x-upsampled half-res E4 (binding 1) and block-0 E4 (binding 0) +const uint F_HEAD = 32u; // block 70: f16 head GEMM (binding 11, [32][16]) -> f32 RGBA (binding 9) +const uint F_POOL = 64u; // 2x2 box pool of the raw f16 output -> E4 half-resolution rows (binding 9) +const uint F_UPRES = 128u; // block 66: round_f16(2x-upsampled f16 projection (binding 1) + E4 skip (binding 0) * scale) -> state / skip +const uint F_OUT_E4 = 2u; // write the E4 block output +const uint F_OUT_F16 = 4u; // write the raw half block output + +layout(push_constant) uniform Push { + uint width; + uint height; + uint shiftX; + uint shiftY; + uint windowsX; + uint windowCount; + uint groupCount; // persistent workgroups: each walks window pairs gl_WorkGroupID.x, += groupCount + uint auxFfnHalfOffset; // FFN skip scale vector (half units in binding 6) + uint auxAttnHalfOffset; // attention skip scale vector + uint scaleWordOffset; // learned attention scale (f32 word in binding 6) + uint auxInputScaleHalf; // F_POST: upsampled input scale vector + uint auxAdapterScaleHalf; // F_POST: block-0 (adapter) scale vector + uint lowWidth; // F_POST: half-resolution width +} pc; + +layout(std430, binding = 0) readonly buffer State { uvec4 state4[]; }; // E4 [tokens][32] as 16-byte words (F_POST: block-0 output) +layout(std430, binding = 0) readonly buffer Features { vec4 feat4[]; }; // F_PRE: f32 [tokens][16] +layout(std430, binding = 1) readonly buffer Skip { uvec4 skip4[]; }; // f16 [tokens][32] as 16-byte words +layout(std430, binding = 1) readonly buffer LowRes { uvec4 lowres4[]; }; // F_POST: E4 [lowTokens][32]; F_UPRES: f16 [lowTokens][32] (4 words) +layout(std430, binding = 11) readonly buffer WeightsF16 { float16_t wf16[]; }; // F_PRE: [16 k][32 n]; F_HEAD: [32 k][16 n] +layout(std430, binding = 2) readonly buffer W1 { uvec4 w1v[]; }; // E4 [128 n][32 k] +layout(std430, binding = 3) readonly buffer W2 { uvec4 w2v[]; }; // E4 [32 n][128 k] +layout(std430, binding = 4) readonly buffer Wqkv { uvec4 wqkvv[]; }; // E4 [96 n][32 k] +layout(std430, binding = 5) readonly buffer Wproj { uvec4 wprojv[]; }; // E4 [32 n][32 k] +layout(std430, binding = 6) readonly buffer Aux { uint16_t aux16[]; }; +layout(std430, binding = 7) readonly buffer Prior { float16_t prior[]; }; // [64][64] f16 +layout(std430, binding = 8) writeonly buffer OutE4 { uvec4 out8x16[]; }; // E4 [tokens][32] as 16-byte words +layout(std430, binding = 9) writeonly buffer OutF16 { uvec4 out16x8[]; }; // f16 [tokens][32] as 16-byte words +layout(std430, binding = 9) writeonly buffer OutHead { vec2 head2[]; }; // F_HEAD: f32 [tokens][4] as pairs +layout(std430, binding = 9) writeonly buffer OutPooled { uint pooled32[]; }; // F_POOL: E4 [lowTokens][32] as 4-byte words + + +// Shared memory (41.5 KB of 48): wts (uvec4 words) W1 [128][32] @0, W2 [32][128] @256 at 9 words per row +// (bank-conflict-free fragment loads), Wqkv [96][32] @544, Wproj [32][32] @736; kv16 (16-bit units) per +// window slot: Kp [64][32] E4 then Vp [64][32] E4; scratch: 1 KB per subgroup for layout changes through +// shared memory (accumulator -> A operand, staged loads and stores). +shared uvec4 wts[800]; +shared uint16_t kv16[2 * 64 * 24]; // Kp per slot: [64 physical][32 k] E4 at 24 halfword slots per row (48 B) +shared uint8_t vt8[2 * 32 * 80]; // Vt per slot: [32 n][64 physical k] E4 at 80-byte rows +shared uint scratch32[8 * 256]; // per subgroup 1 KB of 32-bit words: staged inputs, then the output row tile +shared float16_t wf16s[512]; // F_PRE adapter [16][32] / F_HEAD head [32][16] f16 weights +#define tile32 scratch32 +#if PRIOR_SHARED +shared float16_t priorS[64 * 72]; // the block's attention prior, staged once per workgroup, 72-half rows +#endif + +const uint W1T = 0u, W2T = 256u, WQKV = 544u, WPROJ = 736u; + +#define ACC16x32 coopmat +#define ACC16x16H coopmat +#define A16x16H coopmat +#define B16x32H coopmat +#define B16x16H coopmat +#define ACC16x64 coopmat +#define ACC16x128 coopmat +#define A16x32 coopmat +#define A16x64 coopmat +#define A16x128 coopmat +#define B32x32 coopmat +#define B32x64 coopmat +#define B32x128 coopmat +#define B64x32 coopmat +#define B128x32 coopmat + +uint tiledToken(uint token) { // natural -> physical + uint x = token & 7u, y = token >> 3u; + return (y >> 2u) * 32u + (x >> 2u) * 16u + (y & 3u) * 4u + (x & 3u); +} + +// the exponential approximation on a packed pair: f32 affine, half clamp, per half (bits << 5) + 0x8000 == (bits << 5) ^ 0x8000. +uint expWeightPair(uint scoreBits) { + precise vec2 affine32 = fma(vec2(unpackFloat2x16(scoreBits)), vec2(0.044921875), vec2(1.30078125)); + f16vec2 affine = clamp(f16vec2(affine32), f16vec2(1.03125), f16vec2(1.5693359375)); + return ((packFloat2x16(affine) << 5u) & 0xffe0ffe0u) ^ 0x80008000u; +} + +// SiLU on the accumulator pairs (elements 2i, 2i+1 share a row): packed half FMAs, same per-half arithmetic. +void siluPairs32(inout ACC16x32 m) { + [[unroll]] for (uint i = 0u; i < 8u; ++i) { + f16vec2 v = siluPair(f16vec2(m[2u * i], m[2u * i + 1u])); + m[2u * i] = v.x; m[2u * i + 1u] = v.y; + } +} + +// round_f16(value * aux[column]) on packed pairs: the half product of two halves is exact in f32 and rounds +// once, so the half multiply is the same publication as the f32 formulation. +void scalePairs(inout ACC16x32 m, const in f16vec2 aux[4]) { + [[unroll]] for (uint h = 0u; h < 2u; ++h) { + [[unroll]] for (uint j = 0u; j < 4u; ++j) { + precise f16vec2 v = f16vec2(m[8u * h + 2u * j], m[8u * h + 2u * j + 1u]) * aux[j]; + m[8u * h + 2u * j] = v.x; m[8u * h + 2u * j + 1u] = v.y; + } + } +} + +// Per-element callbacks (elementwise, order-free; the half rounding is a real conversion). +float16_t siluElement(const in uint row, const in uint col, const in float16_t value) { return siluHalf(value); } +float16_t nanToZero(const in uint row, const in uint col, const in float16_t value) { return isnan(value) ? float16_t(0.0) : value; } +// round_f16(residual * aux[col]): exact product in f32, one rounding. +float16_t scaleByAux(const in uint row, const in uint col, const in float16_t value, const in uint auxOffset) { + precise float product = float(value) * float(uint16BitsToFloat16(aux16[auxOffset + col])); + return float16_t(product); +} + +// Cosine normalization of a 16x32 accumulator in registers. Lane (g, t) holds for row half h the +// eight elements [8h + 0..7] = columns (2t, 2t+1), (8+2t, 9+2t), (16+2t, 17+2t), (24+2t, 25+2t). +// r[c] = fma(v[c], v[c], f16(v[c+16]^2)) for c < 16, then s8 = r[c] + r[c+8], s4 = s8[c] + s8[c+4] +// (lane xor 2), s2 = s4[c] + s4[c+2] (lane xor 1), s1 = s2[0] + s2[1]: the reference association order. +// Returns the normalized (and optionally learned-scaled) values in place; zero rows give 0*inf -> 0. +void normalizeInPlace(inout ACC16x32 m, const in float16_t scale, const in bool applyScale) { + [[unroll]] for (uint h = 0u; h < 2u; ++h) { + const uint b = 8u * h; + f16vec2 p0 = f16vec2(m[b + 0u], m[b + 1u]), p1 = f16vec2(m[b + 2u], m[b + 3u]); + f16vec2 p2 = f16vec2(m[b + 4u], m[b + 5u]), p3 = f16vec2(m[b + 6u], m[b + 7u]); + precise f16vec2 hs0 = p2 * p2; + precise f16vec2 r0 = fma(p0, p0, hs0); + precise f16vec2 hs1 = p3 * p3; + precise f16vec2 r1 = fma(p1, p1, hs1); + precise f16vec2 s8 = r0 + r1; + f16vec2 s8o = unpackFloat2x16(subgroupShuffleXor(packFloat2x16(s8), 2u)); + precise f16vec2 s4 = s8 + s8o; + f16vec2 s4o = unpackFloat2x16(subgroupShuffleXor(packFloat2x16(s4), 1u)); + precise f16vec2 s2 = s4 + s4o; + precise float16_t s1 = s2.x + s2.y; + float16_t norm = float16_t(inversesqrt(float(s1))); + [[unroll]] for (uint i = 0u; i < 8u; ++i) { + precise float16_t n = m[b + i] * norm; + float16_t value = n; + if (applyScale) { precise float16_t ns = n * scale; value = ns; } + m[b + i] = isnan(value) ? float16_t(0.0) : value; + } + } +} + +// E4 codes of a 16x32 accumulator into physical-tiled K/V rows (32 bytes = 16 halfword slots per row). +void publishRows(const in ACC16x32 m, const in uint slotBase, const in uint rowBase, const in uint t, const in uint g, + const in int windowX, const in int windowY, const in bool slotActive) { + [[unroll]] for (uint h = 0u; h < 2u; ++h) { + uint token = rowBase + g + 8u * h; + int x = windowX + int(token & 7u), y = windowY + int(token >> 3u); + bool valid = slotActive && x >= 0 && y >= 0 && x < int(pc.width) && y < int(pc.height); + uint row = slotBase + tiledToken(token) * 24u; + [[unroll]] for (uint j = 0u; j < 4u; ++j) { // column pair (8j + 2t, 8j + 2t + 1) -> halfword slot 4j + t + uint16_t codes = e4m3PairFast(f16vec2(m[8u * h + 2u * j], m[8u * h + 2u * j + 1u])); + kv16[row + 4u * j + t] = valid ? codes : uint16_t(0u); + } + } +} + +// Transposed E4 rows: element (token, column) -> vt8[base + column * 80 + physical(token)]. +void publishTransposed(const in ACC16x32 m, const in uint base, const in uint rowBase, const in uint t, const in uint g, + const in int windowX, const in int windowY, const in bool slotActive) { + [[unroll]] for (uint h = 0u; h < 2u; ++h) { + uint token = rowBase + g + 8u * h; + int x = windowX + int(token & 7u), y = windowY + int(token >> 3u); + bool valid = slotActive && x >= 0 && y >= 0 && x < int(pc.width) && y < int(pc.height); + uint column = base + tiledToken(token); + [[unroll]] for (uint j = 0u; j < 4u; ++j) { + f16vec2 v = f16vec2(m[8u * h + 2u * j], m[8u * h + 2u * j + 1u]); + uint codes = valid ? uint(e4m3PairFast(mix(v, f16vec2(0.0), isnan(v)))) : 0u; + vt8[column + (8u * j + 2u * t) * 80u] = uint8_t(codes & 0xffu); + vt8[column + (8u * j + 2u * t + 1u) * 80u] = uint8_t(codes >> 8u); + } + } +} + +void main() { + const uint slot = gl_SubgroupID >> 2u; // window slot within the workgroup + const uint q = gl_SubgroupID & 3u; // row tile: tokens 16q .. 16q+15 (window rows 2q, 2q+1) + const uint lane = gl_SubgroupInvocationID; + const uint g = lane >> 2u, t = lane & 3u; + // Stage the block weights (768 words, three per thread), then the whole workgroup syncs once. + for (uint i = gl_LocalInvocationID.x; i < 768u; i += 256u) { + uvec4 word; + uint dst = i; + if (i < 256u) word = w1v[i]; + else if (i < 512u) { word = w2v[i - 256u]; dst = W2T + ((i - 256u) >> 3u) * 9u + ((i - 256u) & 7u); } + else if (i < 704u) { word = wqkvv[i - 512u]; dst = WQKV + (i - 512u); } + else { word = wprojv[i - 704u]; dst = WPROJ + (i - 704u); } + wts[dst] = word; + } +#if PRIOR_SHARED + for (uint i = gl_LocalInvocationID.x; i < 4096u; i += 256u) priorS[(i >> 6u) * 72u + (i & 63u)] = prior[i]; +#endif + if ((FLAGS & (F_PRE | F_HEAD)) != 0u) for (uint i = gl_LocalInvocationID.x; i < 512u; i += 256u) wf16s[i] = wf16[i]; + barrier(); + const uint SCR = gl_SubgroupID * 256u; // this subgroup's scratch words (32-bit) + const uint KP = slot * 64u * 24u; // halfword offset of this slot's Kp + const uint VT = slot * 32u * 80u; // byte offset of this slot's Vt + const uint rowBase = q * 16u; + // Per-lane skip scale pairs: accumulator elements (2j, 2j+1) of either row half are columns (8j + 2t, +1). + f16vec2 auxFfn[4], auxAttn[4]; + [[unroll]] for (uint j = 0u; j < 4u; ++j) { + uint column = 8u * j + 2u * t; + auxFfn[j] = f16vec2(uint16BitsToFloat16(aux16[pc.auxFfnHalfOffset + column]), uint16BitsToFloat16(aux16[pc.auxFfnHalfOffset + column + 1u])); + auxAttn[j] = f16vec2(uint16BitsToFloat16(aux16[pc.auxAttnHalfOffset + column]), uint16BitsToFloat16(aux16[pc.auxAttnHalfOffset + column + 1u])); + } + uint scaleBits = uint(aux16[pc.scaleWordOffset * 2u]) | (uint(aux16[pc.scaleWordOffset * 2u + 1u]) << 16u); + const float16_t scale = float16_t(uintBitsToFloat(scaleBits)); + // F_POST: this lane's 16 channels (16 * ldWord ..) of the blend scales, as packed half pairs. + const uint ldRow = lane >> 1u, ldWord = lane & 1u; + uint blendA[8], blendB[8]; + if ((FLAGS & (F_POST | F_UPRES)) != 0u) { + [[unroll]] for (uint i = 0u; i < 8u; ++i) { + uint c = 16u * ldWord + 2u * i; + blendA[i] = uint(aux16[pc.auxInputScaleHalf + c]) | (uint(aux16[pc.auxInputScaleHalf + c + 1u]) << 16u); + blendB[i] = (FLAGS & F_POST) != 0u ? uint(aux16[pc.auxAdapterScaleHalf + c]) | (uint(aux16[pc.auxAdapterScaleHalf + c + 1u]) << 16u) : 0u; + } + } + + // Input words of this lane: row r = lane >> 1 of the subgroup's 16 tokens, word w = lane & 1 of the E4 row + // (32 bytes) and words 2w, 2w + 1 of the f16 skip row (64 bytes). Loaded one pair ahead into registers. + // F_PRE: instead the lane's eight f32 features (two vec4) - the adapter runs at the loop top. + // F_POST: instead the block-0 E4 word (xw) and the half-resolution E4 word (sk0) - blended at the loop top. + uvec4 xw = uvec4(0u), sk0 = uvec4(0u), sk1 = uvec4(0u); + { + const uint window0 = gl_WorkGroupID.x * 2u + slot; + if (window0 < pc.windowCount) { + const uint token = rowBase + ldRow; + const int x0 = int((window0 % pc.windowsX) * 8u) - int(pc.shiftX) + int(token & 7u); + const int y0 = int((window0 / pc.windowsX) * 8u) - int(pc.shiftY) + int(token >> 3u); + if (x0 >= 0 && y0 >= 0 && x0 < int(pc.width) && y0 < int(pc.height)) { + const uint pixel = uint(y0) * pc.width + uint(x0); + if ((FLAGS & F_PRE) != 0u) { + xw = floatBitsToUint(feat4[pixel * 4u + ldWord * 2u]); sk0 = floatBitsToUint(feat4[pixel * 4u + ldWord * 2u + 1u]); + } else if ((FLAGS & F_POST) != 0u) { + xw = state4[pixel * 2u + ldWord]; + sk0 = lowres4[((uint(y0) >> 1u) * pc.lowWidth + (uint(x0) >> 1u)) * 2u + ldWord]; + } else if ((FLAGS & F_UPRES) != 0u) { + xw = state4[pixel * 2u + ldWord]; + const uint low = ((uint(y0) >> 1u) * pc.lowWidth + (uint(x0) >> 1u)) * 4u + ldWord * 2u; + sk0 = lowres4[low]; sk1 = lowres4[low + 1u]; + } else { + xw = state4[pixel * 2u + ldWord]; + if ((FLAGS & F_SKIP_F16) != 0u) { sk0 = skip4[pixel * 4u + ldWord * 2u]; sk1 = skip4[pixel * 4u + ldWord * 2u + 1u]; } + } + } + } + } + + // Persistent loop over window pairs: the staged weights serve every pair this workgroup visits. + for (uint pair = gl_WorkGroupID.x; pair * 2u < pc.windowCount; pair += pc.groupCount) { + const uint window = pair * 2u + slot; + const bool slotActive = window < pc.windowCount; // inactive slots still take part in the barrier + const uint clampedWindow = slotActive ? window : 0u; + const int windowX = int((clampedWindow % pc.windowsX) * 8u) - int(pc.shiftX); + const int windowY = int((clampedWindow / pc.windowsX) * 8u) - int(pc.shiftY); + + // Image tensors [height][width][32] with constant (zero) clamping: this subgroup's 16 tokens are the slice + // (windowY + 2q, 2 rows) x (windowX, 8 pixels) x 32 channels; out-of-image tokens read zero / store nothing. + tensorLayoutNV<3, gl_CooperativeMatrixClampModeConstantNV> image = createTensorLayoutNV(3, gl_CooperativeMatrixClampModeConstantNV); + image = setTensorLayoutDimensionNV(image, pc.height, pc.width, 32); + image = setTensorLayoutStrideNV(image, pc.width * 32u, 32, 1); + tensorLayoutNV<3, gl_CooperativeMatrixClampModeConstantNV> tile = + sliceTensorLayoutNV(image, uint(windowY + int(q * 2u)), 2, uint(windowX), 8, 0, 32); + + // ==== Phase F: FFN in registers. Operands come from the prefetched words through this subgroup's scratch. + A16x32 x; + ACC16x32 cInit; // the scaled skip seeds the W2 accumulator: the MMA's C operand carries it for free, and it + // rounds once instead of twice as a separate add afterwards would + if ((FLAGS & F_PRE) != 0u) { + // Input adapter: A = f16(features) [16 tokens][16], B = [16][32] f16, one k16 step (the F24 arithmetic of + // gemm_f16); the f16 result is the FFN skip, its E4M3 codes (NaN -> 0) the block state. + { + const uint w = SCR + (ldRow * 2u + ldWord) * 4u; + scratch32[w] = packFloat2x16(f16vec2(uintBitsToFloat(xw.xy))); + scratch32[w + 1u] = packFloat2x16(f16vec2(uintBitsToFloat(xw.zw))); + scratch32[w + 2u] = packFloat2x16(f16vec2(uintBitsToFloat(sk0.xy))); + scratch32[w + 3u] = packFloat2x16(f16vec2(uintBitsToFloat(sk0.zw))); + } + subgroupBarrier(); + A16x16H fa; coopMatLoad(fa, scratch32, SCR, 8u, gl_CooperativeMatrixLayoutRowMajor); + subgroupBarrier(); + B16x32H fb; coopMatLoad(fb, wf16s, 0u, 32u, gl_CooperativeMatrixLayoutRowMajor); + ACC16x32 adapted = ACC16x32(0.0); + adapted = coopMatMulAdd(fa, fb, adapted); + cInit = adapted; + ACC16x32 adaptedClean; + coopMatPerElementNV(adaptedClean, adapted, nanToZero); + x = A16x32(adaptedClean); + } else if ((FLAGS & (F_POST | F_UPRES)) != 0u) { + // learned_post_blend per channel: raw = round_f16(round_f16(up * sA) + adapter * sB) (products exact in f32); + // the f16 raw values are the FFN skip, their E4M3 codes the block state. + // In half arithmetic: the product of two halves rounds once (HMUL2) and the fused multiply-add rounds + // once (HFMA2) - the same two roundings as the f32 formulation with exact products. + // F_UPRES (residualAfterMatmul + scaleResidual): raw = round_f16(projection + skip * scale), one HFMA2. + uint rawWords[8]; + [[unroll]] for (uint i = 0u; i < 8u; ++i) { + uint adPair = (xw[i >> 1u] >> ((i & 1u) * 16u)) & 0xffffu; + f16vec2 sA = unpackFloat2x16(blendA[i]); + f16vec2 ad = f16vec2(uintBitsToFloate4m3EXT(u8vec2(adPair & 0xffu, adPair >> 8u))); + ad = mix(ad, f16vec2(0.0), isnan(ad)); // decode_e4m3: NaN codes read as 0 + if ((FLAGS & F_UPRES) != 0u) { + f16vec2 projected = unpackFloat2x16(i < 4u ? sk0[i] : sk1[i - 4u]); + precise f16vec2 value = fma(ad, sA, projected); + rawWords[i] = packFloat2x16(value); + } else { + uint upPair = (sk0[i >> 1u] >> ((i & 1u) * 16u)) & 0xffffu; + f16vec2 sB = unpackFloat2x16(blendB[i]); + f16vec2 up = f16vec2(uintBitsToFloate4m3EXT(u8vec2(upPair & 0xffu, upPair >> 8u))); + up = mix(up, f16vec2(0.0), isnan(up)); + precise f16vec2 inputValue = up * sA; + precise f16vec2 value = fma(ad, sB, inputValue); + rawWords[i] = packFloat2x16(value); + } + } + { + const uint w = SCR + (ldRow * 4u + ldWord * 2u) * 4u; + [[unroll]] for (uint i = 0u; i < 8u; ++i) scratch32[w + i] = rawWords[i]; + } + subgroupBarrier(); + coopMatLoad(cInit, scratch32, SCR, 16u, gl_CooperativeMatrixLayoutRowMajor); + subgroupBarrier(); + { + const uint w = SCR + (ldRow * 2u + ldWord) * 4u; + [[unroll]] for (uint i = 0u; i < 4u; ++i) + scratch32[w + i] = uint(e4m3HwPair(unpackFloat2x16(rawWords[2u * i]))) | (uint(e4m3HwPair(unpackFloat2x16(rawWords[2u * i + 1u]))) << 16u); + } + subgroupBarrier(); + coopMatLoad(x, scratch32, SCR, 8u, gl_CooperativeMatrixLayoutRowMajor); + subgroupBarrier(); + } else { + { + const uint w = SCR + (ldRow * 2u + ldWord) * 4u; + scratch32[w] = xw.x; scratch32[w + 1u] = xw.y; scratch32[w + 2u] = xw.z; scratch32[w + 3u] = xw.w; + } + subgroupBarrier(); + coopMatLoad(x, scratch32, SCR, 8u, gl_CooperativeMatrixLayoutRowMajor); + subgroupBarrier(); + { + // the FFN skip as an f16 accumulator: the f16 skip, or the state's codes widened to halves (exact). An E4M3 + // accumulator matrix would widen in one conversion, but no implementation advertises that matrix type. + uvec4 lo = sk0, hi = sk1; + if ((FLAGS & F_SKIP_F16) == 0u) { + uint halves[8]; + [[unroll]] for (uint i = 0u; i < 8u; ++i) { + uint codes = (xw[i >> 1u] >> ((i & 1u) * 16u)) & 0xffffu; + halves[i] = packFloat2x16(f16vec2(uintBitsToFloate4m3EXT(u8vec2(codes & 0xffu, codes >> 8u)))); + } + lo = uvec4(halves[0], halves[1], halves[2], halves[3]); hi = uvec4(halves[4], halves[5], halves[6], halves[7]); + } + const uint w = SCR + (ldRow * 4u + ldWord * 2u) * 4u; + scratch32[w] = lo.x; scratch32[w + 1u] = lo.y; scratch32[w + 2u] = lo.z; scratch32[w + 3u] = lo.w; + scratch32[w + 4u] = hi.x; scratch32[w + 5u] = hi.y; scratch32[w + 6u] = hi.z; scratch32[w + 7u] = hi.w; + subgroupBarrier(); + coopMatLoad(cInit, scratch32, SCR, 16u, gl_CooperativeMatrixLayoutRowMajor); + subgroupBarrier(); + } + } + scalePairs(cInit, auxFfn); + { // prefetch the next pair's words + const uint windowN = (pair + pc.groupCount) * 2u + slot; + xw = uvec4(0u); sk0 = uvec4(0u); sk1 = uvec4(0u); + if (windowN < pc.windowCount) { + const uint token = rowBase + ldRow; + const int xN = int((windowN % pc.windowsX) * 8u) - int(pc.shiftX) + int(token & 7u); + const int yN = int((windowN / pc.windowsX) * 8u) - int(pc.shiftY) + int(token >> 3u); + if (xN >= 0 && yN >= 0 && xN < int(pc.width) && yN < int(pc.height)) { + const uint pixel = uint(yN) * pc.width + uint(xN); + if ((FLAGS & F_PRE) != 0u) { + xw = floatBitsToUint(feat4[pixel * 4u + ldWord * 2u]); sk0 = floatBitsToUint(feat4[pixel * 4u + ldWord * 2u + 1u]); + } else if ((FLAGS & F_POST) != 0u) { + xw = state4[pixel * 2u + ldWord]; + sk0 = lowres4[((uint(yN) >> 1u) * pc.lowWidth + (uint(xN) >> 1u)) * 2u + ldWord]; + } else if ((FLAGS & F_UPRES) != 0u) { + xw = state4[pixel * 2u + ldWord]; + const uint low = ((uint(yN) >> 1u) * pc.lowWidth + (uint(xN) >> 1u)) * 4u + ldWord * 2u; + sk0 = lowres4[low]; sk1 = lowres4[low + 1u]; + } else { + xw = state4[pixel * 2u + ldWord]; + if ((FLAGS & F_SKIP_F16) != 0u) { sk0 = skip4[pixel * 4u + ldWord * 2u]; sk1 = skip4[pixel * 4u + ldWord * 2u + 1u]; } + } + } + } + } + ACC16x32 ffnAcc = cInit; + [[unroll]] for (uint qq = 0u; qq < 4u; ++qq) { // hidden columns 32qq..: the k32 steps of W2 in K order + B32x32 w1; + coopMatLoad(w1, wts, W1T + qq * 32u * 2u, 2u, gl_CooperativeMatrixLayoutColumnMajor); // n rows 32qq.. + ACC16x32 hidden = ACC16x32(0.0); + hidden = coopMatMulAdd(x, w1, hidden); + siluPairs32(hidden); + A16x32 hiddenE4 = A16x32(hidden); + B32x32 w2; // [32 n][128 k] at 9 words per n row: k 32qq.. is word offset 2qq + coopMatLoad(w2, wts, W2T + qq * 2u, 9u, gl_CooperativeMatrixLayoutColumnMajor); + ffnAcc = coopMatMulAdd(hiddenE4, w2, ffnAcc); + } + ACC16x32 ffnClean; + coopMatPerElementNV(ffnClean, ffnAcc, nanToZero); + A16x32 ffnQ = A16x32(ffnClean); + + // ==== Phase Q: q, k, v in registers; normalize in the accumulator layout; K/V rows to shared. + B32x32 wq; coopMatLoad(wq, wts, WQKV, 2u, gl_CooperativeMatrixLayoutColumnMajor); + B32x32 wk; coopMatLoad(wk, wts, WQKV + 32u * 2u, 2u, gl_CooperativeMatrixLayoutColumnMajor); + B32x32 wv; coopMatLoad(wv, wts, WQKV + 64u * 2u, 2u, gl_CooperativeMatrixLayoutColumnMajor); + ACC16x32 qa = ACC16x32(0.0), ka = ACC16x32(0.0), va = ACC16x32(0.0); + qa = coopMatMulAdd(ffnQ, wq, qa); + ka = coopMatMulAdd(ffnQ, wk, ka); + va = coopMatMulAdd(ffnQ, wv, va); + normalizeInPlace(qa, scale, true); + normalizeInPlace(ka, scale, false); + A16x32 mq = A16x32(qa); + publishRows(ka, KP, rowBase, t, g, windowX, windowY, slotActive); + publishTransposed(va, VT, rowBase, t, g, windowX, windowY, slotActive); + barrier(); // all K / V rows visible + + // ==== Phase A: attention and projection in registers. + B32x64 kp; coopMatLoad(kp, kv16, KP, 24u, gl_CooperativeMatrixLayoutColumnMajor); // [64 physical][32 k] + ACC16x64 s; // attention prior for these 16 query rows (staged in shared) +#if PRIOR_SHARED + coopMatLoad(s, priorS, rowBase * 72u, 72u, gl_CooperativeMatrixLayoutRowMajor); +#else + coopMatLoad(s, prior, rowBase * 64u, 64u, gl_CooperativeMatrixLayoutRowMajor); // L2-resident 8 KB per block +#endif + s = coopMatMulAdd(mq, kp, s); + // Softmax in the accumulator layout. Row half h: elements [16h + 2m, 16h + 2m + 1] are keys (8m + 2t, +1). + // the specified softmax reduction: b[g'][j] = e[g' + 16j] + e[g' + 16j + 8] for g' in {2t, 2t+1} -> pair(2j) + pair(2j+1); + // t[g'] = ((b0 + b1) + b2) + b3; even = ((t0 + t2) + t4) + t6 over lanes t = 0..3 (g' = 2t), odd likewise; + // total = even + odd; weights = e * f16(1 / f32(total)) -> E4M3 (positive, finite). + ACC16x64 wAcc = ACC16x64(0.0); + [[unroll]] for (uint h = 0u; h < 2u; ++h) { + uint e[8]; + [[unroll]] for (uint m = 0u; m < 8u; ++m) e[m] = expWeightPair(packFloat2x16(f16vec2(s[16u * h + 2u * m], s[16u * h + 2u * m + 1u]))); + f16vec2 bp[4]; + [[unroll]] for (uint j = 0u; j < 4u; ++j) { precise f16vec2 bsum = unpackFloat2x16(e[2u * j]) + unpackFloat2x16(e[2u * j + 1u]); bp[j] = bsum; } + precise f16vec2 t01 = bp[0] + bp[1]; + precise f16vec2 t012 = t01 + bp[2]; + precise f16vec2 tp = t012 + bp[3]; // (t[2t], t[2t+1]) + uint tpBits = packFloat2x16(tp); + uint quad = lane & ~3u; + f16vec2 t0 = unpackFloat2x16(subgroupShuffle(tpBits, quad)), t1 = unpackFloat2x16(subgroupShuffle(tpBits, quad + 1u)); + f16vec2 t2 = unpackFloat2x16(subgroupShuffle(tpBits, quad + 2u)), t3 = unpackFloat2x16(subgroupShuffle(tpBits, quad + 3u)); + precise float16_t e01 = t0.x + t1.x; + precise float16_t e012 = e01 + t2.x; + precise float16_t even = e012 + t3.x; + precise float16_t o01 = t0.y + t1.y; + precise float16_t o012 = o01 + t2.y; + precise float16_t odd = o012 + t3.y; + precise float16_t total = even + odd; + float16_t reciprocal = float16_t(1.0 / float(total)); + [[unroll]] for (uint m = 0u; m < 8u; ++m) { + precise f16vec2 w = unpackFloat2x16(e[m]) * reciprocal; + wAcc[16u * h + 2u * m] = w.x; + wAcc[16u * h + 2u * m + 1u] = w.y; + } + } + A16x64 p = A16x64(wAcc); + B64x32 vp; coopMatLoad(vp, vt8, VT, 80u, gl_CooperativeMatrixLayoutColumnMajor); // [32 n][64 physical k] + ACC16x32 o = ACC16x32(0.0); + o = coopMatMulAdd(p, vp, o); + ACC16x32 oClean; + coopMatPerElementNV(oClean, o, nanToZero); + A16x32 attended = A16x32(oClean); + ACC16x32 projC = ffnAcc; + scalePairs(projC, auxAttn); + B32x32 wproj; + coopMatLoad(wproj, wts, WPROJ, 2u, gl_CooperativeMatrixLayoutColumnMajor); + ACC16x32 result = coopMatMulAdd(attended, wproj, projC); + { + // Output rows: the tile is assembled in shared memory as 32-bit words, then each lane stores whole + // 16-byte words of the valid tokens (row r = word / wordsPerRow of this subgroup's 16 tokens). + const uint tileBase = SCR; + if ((FLAGS & F_OUT_F16) != 0u) { + PUBLISH_F16_TILE(result, 32u, tile32, tileBase, g, t) + subgroupBarrier(); + [[unroll]] for (uint i = 0u; i < 2u; ++i) { + const uint w = lane + 32u * i, r = w >> 2u, cw = w & 3u; + const uint tok = rowBase + r; + const int x = windowX + int(tok & 7u), y = windowY + int(tok >> 3u); + const uint base = tileBase + r * 16u + cw * 4u; + if (slotActive && x >= 0 && y >= 0 && x < int(pc.width) && y < int(pc.height)) + out16x8[(uint(y) * pc.width + uint(x)) * 4u + cw] = uvec4(tile32[base], tile32[base + 1u], tile32[base + 2u], tile32[base + 3u]); + } + subgroupBarrier(); + } + if ((FLAGS & F_POOL) != 0u) { + // ds_fp8: this subgroup's two window rows pool to one half-resolution row of four pixels: ((a + b) + (c + d)) + // * 0.25 in halves, then E4M3. Lane l: output pixel i = l >> 3, channels 4 (l & 7) .. + 3 (one 4-byte word). + PUBLISH_F16_TILE(result, 32u, tile32, tileBase, g, t) + subgroupBarrier(); + { + const uint i = lane >> 3u, pair0 = (lane & 7u) * 2u; + const int sx = windowX + int(2u * i), sy = windowY + int(q * 2u); + uint codes = 0u; + [[unroll]] for (uint p = 0u; p < 2u; ++p) { + const uint word = pair0 + p; // channel pair within the row (16 words of f16 pairs per token) + precise f16vec2 top = unpackFloat2x16(tile32[tileBase + (2u * i) * 16u + word]) + unpackFloat2x16(tile32[tileBase + (2u * i + 1u) * 16u + word]); + precise f16vec2 bottom = unpackFloat2x16(tile32[tileBase + (8u + 2u * i) * 16u + word]) + unpackFloat2x16(tile32[tileBase + (9u + 2u * i) * 16u + word]); + precise f16vec2 sum = top + bottom; + precise f16vec2 value = sum * float16_t(0.25); + codes |= uint(e4m3HwPair(value)) << (16u * p); + } + if (slotActive && sx >= 0 && sy >= 0 && sx + 1 < int(pc.width) && sy + 1 < int(pc.height)) + pooled32[((uint(sy) >> 1u) * pc.lowWidth + (uint(sx) >> 1u)) * 8u + (lane & 7u)] = codes; + } + subgroupBarrier(); + } + if ((FLAGS & F_HEAD) != 0u) { + // RGBA head: [16 tokens][32] f16 x [32][16] f16 in two k16 steps (gemm_f16 order), columns 0..3 as f32. + PUBLISH_F16_TILE(result, 32u, tile32, tileBase, g, t) + subgroupBarrier(); + A16x16H h0; coopMatLoad(h0, tile32, tileBase, 16u, gl_CooperativeMatrixLayoutRowMajor); + A16x16H h1; coopMatLoad(h1, tile32, tileBase + 8u, 16u, gl_CooperativeMatrixLayoutRowMajor); + subgroupBarrier(); + B16x16H hb0; coopMatLoad(hb0, wf16s, 0u, 16u, gl_CooperativeMatrixLayoutRowMajor); + B16x16H hb1; coopMatLoad(hb1, wf16s, 256u, 16u, gl_CooperativeMatrixLayoutRowMajor); + ACC16x16H head = ACC16x16H(0.0); + head = coopMatMulAdd(h0, hb0, head); + head = coopMatMulAdd(h1, hb1, head); + if (t < 2u) { // columns 2t, 2t+1 of rows g and g+8: elements (0, 1) and (4, 5) + [[unroll]] for (uint h = 0u; h < 2u; ++h) { + const uint tok = rowBase + g + 8u * h; + const int x = windowX + int(tok & 7u), y = windowY + int(tok >> 3u); + if (slotActive && x >= 0 && y >= 0 && x < int(pc.width) && y < int(pc.height)) + head2[(uint(y) * pc.width + uint(x)) * 2u + t] = vec2(float(head[4u * h]), float(head[4u * h + 1u])); + } + } + subgroupBarrier(); + } + if ((FLAGS & F_OUT_E4) != 0u) { + PUBLISH_E4_TILE(result, 32u, tile32, tileBase, g, t) + subgroupBarrier(); + { + const uint r = lane >> 1u, cw = lane & 1u; + const uint tok = rowBase + r; + const int x = windowX + int(tok & 7u), y = windowY + int(tok >> 3u); + const uint base = tileBase + r * 8u + cw * 4u; + if (slotActive && x >= 0 && y >= 0 && x < int(pc.width) && y < int(pc.height)) + out8x16[(uint(y) * pc.width + uint(x)) * 2u + cw] = uvec4(tile32[base], tile32[base + 1u], tile32[base + 2u], tile32[base + 3u]); + } + } + } + barrier(); // K / V rows and scratch are reused by the next pair + } +} diff --git a/third_party/opendlss-nr/shaders/gemm_f16.comp b/third_party/opendlss-nr/shaders/gemm_f16.comp new file mode 100644 index 000000000..1a3d67267 --- /dev/null +++ b/third_party/opendlss-nr/shaders/gemm_f16.comp @@ -0,0 +1,72 @@ +#version 460 +// FP16 GEMM on cooperative matrices for the network's two m16n8k16 boundaries: +// the 16 -> 32 input adapter of the fused pre block and the 32 -> 4 RGBA +// post head. A and B are f16, accumulation is f16 (two eight-product F24 +// reductions per k16 step on Ada). C starts at zero. +#extension GL_EXT_shader_explicit_arithmetic_types : require +#extension GL_KHR_memory_scope_semantics : require +#extension GL_KHR_cooperative_matrix : require +#extension GL_KHR_shader_subgroup_basic : require +#extension GL_GOOGLE_include_directive : require +#include "common.glsl" + +layout(local_size_x = 128) in; + +layout(constant_id = 0) const uint K = 16; +layout(constant_id = 1) const uint TILE_N = 32; // padded N (multiple of 16) +layout(constant_id = 2) const uint FLAGS = 0; + +const uint F_QUANTIZE = 16u; // main output E4M3 bytes (binding 5) +const uint F_DUAL = 32u; // f16 to binding 2 and E4M3 to binding 5 +const uint F_OUT_F32 = 256u; // f32 output to binding 7 + +layout(push_constant) uniform Push { + uint rows; + uint N; // valid output columns + uint inputStride; // A row stride (elements) + uint outputStride; // output row stride (elements) +} pc; + +layout(std430, binding = 0) readonly buffer InputA { float16_t a[]; }; +layout(std430, binding = 1) readonly buffer InputB { float16_t b[]; }; +layout(std430, binding = 2) writeonly buffer OutputHalf { float16_t out16[]; }; +layout(std430, binding = 5) writeonly buffer OutputE4 { uint8_t out8[]; }; +layout(std430, binding = 7) writeonly buffer OutputFloat { float out32[]; }; + +const uint TILES = TILE_N / 16u; +shared float16_t tileC[4u * 16u * TILE_N]; + +void main() { + const uint subgroup = gl_SubgroupID; + const uint lane = gl_SubgroupInvocationID; + const uint rowBase = (gl_WorkGroupID.y + gl_WorkGroupID.z * 65535u) * 64u + subgroup * 16u; + const uint tileBase = subgroup * 16u * TILE_N; + + coopmat acc[TILES]; + for (uint t = 0; t < TILES; ++t) acc[t] = coopmat(0.0); + for (uint kb = 0u; kb < K; kb += 16u) { + coopmat ma; + coopMatLoad(ma, a, rowBase * pc.inputStride + kb, pc.inputStride, gl_CooperativeMatrixLayoutRowMajor); + for (uint t = 0; t < TILES; ++t) { + coopmat mb; + coopMatLoad(mb, b, kb * TILE_N + t * 16u, TILE_N, gl_CooperativeMatrixLayoutRowMajor); + acc[t] = coopMatMulAdd(ma, mb, acc[t]); + } + } + for (uint t = 0; t < TILES; ++t) { + coopMatStore(acc[t], tileC, tileBase + t * 16u, TILE_N, gl_CooperativeMatrixLayoutRowMajor); + } + barrier(); + + for (uint i = lane; i < 16u * TILE_N; i += 32u) { + uint r = i / TILE_N, c = i % TILE_N; + uint row = rowBase + r; + if (row >= pc.rows || c >= pc.N) continue; + uint index = row * pc.outputStride + c; + float16_t value = tileC[tileBase + i]; + if ((FLAGS & F_OUT_F32) != 0u) out32[index] = float(value); + else if ((FLAGS & F_QUANTIZE) != 0u) out8[index] = uint8_t(e4m3CodeFromF16Bits(f16Bits(value))); + else out16[index] = value; + if ((FLAGS & F_DUAL) != 0u) out8[index] = uint8_t(e4m3CodeFromF16Bits(f16Bits(value))); + } +} diff --git a/third_party/opendlss-nr/shaders/gemm_fp8.comp b/third_party/opendlss-nr/shaders/gemm_fp8.comp new file mode 100644 index 000000000..f5923af43 --- /dev/null +++ b/third_party/opendlss-nr/shaders/gemm_fp8.comp @@ -0,0 +1,353 @@ +#version 460 +// Exact Ada FP8 GEMM on cooperative matrices (v4: shared-memory staged operands, +// tile-major weights, 64- or 128-row blocks, single-pass packed epilogue). +// +// D = A(E4M3, rows x K) * B(E4M3, K x N) accumulated in FP16 as a chain of +// 16x16x32 MMAs in K order (the m16n8k32 two-group F13 arithmetic of the tensor +// cores). The prologue seeds the accumulator with the residual/skip vector as +// the C fragment; the epilogue applies the publication order (residual-after, +// cubic SiLU, E4M3 quantization) element by element with the hardware half +// conversions. +// +// Data movement (measured): coopMatLoad straight from +// global memory costs 10-40 ns per tile while the MMA itself costs 3.5 ns, but +// coopMatLoad from shared memory is free and plain coalesced 16-byte loads +// move 1 KB in 12 ns (6 ns when the 512 bytes of a warp load are contiguous). +// So every k32 step stages A[BM][32] and B[BN][32] into shared memory with +// one uvec4 per thread per row half, DEPTH steps ahead through registers, and +// the MMAs read shared only. Weights are stored k32-tile-major +// ([batch][K/32][N][32]) so a B tile is one contiguous block. +// +// Work decomposition: a workgroup owns BM = 16*SUBGROUPS rows and +// BN = 16*TILES columns; the host picks both so the GPU stays occupied. +#extension GL_EXT_float_e4m3 : require +#extension GL_EXT_shader_explicit_arithmetic_types : require +#extension GL_KHR_memory_scope_semantics : require +#extension GL_KHR_cooperative_matrix : require +#extension GL_NV_cooperative_matrix2 : require +#extension GL_KHR_shader_subgroup_basic : require +#extension GL_EXT_control_flow_attributes : require +#extension GL_GOOGLE_include_directive : require +#define DLSS_E4M3_HW 1 +#include "common.glsl" + +layout(constant_id = 0) const uint K = 32; +layout(constant_id = 1) const uint TILES = 4; // 16-column tiles per subgroup; BN = 16 * TILES +layout(constant_id = 2) const uint FLAGS = 0; +layout(constant_id = 3) const uint PARTITION = 0; +layout(constant_id = 4) const uint DEPTH = 4; // global -> register prefetch depth in k32 steps (1..4) +layout(constant_id = 5) const uint PADV4 = 1; // shared row padding in uvec4 units (bank spread) +layout(constant_id = 7) const uint SUBGROUPS = 4; // 16-row tiles per workgroup; BM = 16 * SUBGROUPS +layout(local_size_x_id = 8) in; // = 32 * SUBGROUPS +layout(constant_id = 9) const uint SPLITK = 1; // K partitions computed by separate workgroups (partials to binding 2) +layout(constant_id = 10) const uint KSTEP = 32; // K per staged step and barrier: 32 or 64 (two k32 tiles, one flexible multiply) +const uint KW = KSTEP / 16u; // uvec4 words of K per staged row + +const uint F_RESIDUAL = 1u; +const uint F_SCALE_RESIDUAL = 2u; +const uint F_SILU = 8u; +const uint F_QUANTIZE = 16u; +const uint F_DUAL = 32u; +const uint F_RESIDUAL_E4 = 64u; +const uint F_BROADCAST_INPUT = 128u; + +layout(push_constant) uniform Push { + uint rows; + uint N; + uint Nmatrix; + uint weightColumnOffset; + uint inputStride; + uint inputColumnBase; + uint outputStride; + uint outputColumnOffset; + uint auxHalfOffset; // per-column f16 scale vector, in half units within binding 4 (16-byte aligned) + uint batches; + uint columnGroups; + uint splitStride; // SPLITK > 1: f16 elements per partition slice of the partial buffer +} pc; + +layout(std430, binding = 0) readonly buffer InputA { uvec4 a4[]; }; // E4M3 [rows][inputStride] +layout(std430, binding = 1) readonly buffer InputB { uvec4 b4[]; }; // E4M3 [batch][K/32][Nmatrix][32] +layout(std430, binding = 2) writeonly buffer OutputHalf { uvec4 out16x8[]; }; +layout(std430, binding = 3) readonly buffer ResidualHalf { uvec4 residual16x8[]; }; +layout(std430, binding = 3) readonly buffer ResidualHalfFlat { float16_t residual16[]; }; +layout(std430, binding = 3) readonly buffer ResidualHalfPairs { f16vec2 residual16x2[]; }; +layout(std430, binding = 4) readonly buffer Aux { uvec4 aux16x8[]; }; +layout(std430, binding = 4) readonly buffer AuxPairs { f16vec2 aux16x2[]; }; +layout(std430, binding = 5) writeonly buffer OutputE4 { uvec4 out8x16[]; }; +layout(std430, binding = 6) readonly buffer ResidualE4 { uvec4 residual8x16[]; }; +layout(std430, binding = 6) readonly buffer ResidualE4Pairs { uint16_t residual8x2[]; }; + +const uint THREADS = 32u * SUBGROUPS; +const uint BM = 16u * SUBGROUPS; +const uint BN = TILES * 16u; +const uint ROWV4 = KW + PADV4; // uvec4 per staged row: KSTEP bytes of K plus padding +const uint A_PER_THREAD = (BM * KW + THREADS - 1u) / THREADS; +const uint B_PER_THREAD = (KW * BN + THREADS - 1u) / THREADS; +const uint STAGE_WORDS = 2u * (BM + BN) * ROWV4; // two operand buffers +// Epilogue staging: per subgroup [16][64] f16 at a 9-word stride (bank-conflict free), reusing the operand buffers. +const uint EPI_WORDS = SUBGROUPS * 16u * 9u; +const uint SHARED_WORDS = STAGE_WORDS > EPI_WORDS ? STAGE_WORDS : EPI_WORDS; +shared uvec4 stage[SHARED_WORDS]; +shared float16_t tileStage[SUBGROUPS * 256u]; // per-subgroup 16x16 accumulator staging (residual prologue) + +#define ACC coopmat +#define MAT_A coopmat +#define MAT_B coopmat + +void subgroupSync() { subgroupMemoryBarrierShared(); subgroupBarrier(); } + +// Two consecutive columns of one row: residual pair as f32 (prologue path). +vec2 loadResidualPair(uint pairIndex) { + if ((FLAGS & F_RESIDUAL_E4) != 0u) { + uint packed = uint(residual8x2[pairIndex]); + return vec2(e4m3ToF32(packed & 0xffu), e4m3ToF32(packed >> 8u)); + } + return vec2(residual16x2[pairIndex]); +} + +vec2 auxPair(uint column) { return vec2(aux16x2[(pc.auxHalfOffset + column) >> 1u]); } + +// Sixteen residual values (16 columns) as eight f32 pairs. +void loadResidual16(uint elementIndex, out vec2 r[8]) { + if ((FLAGS & F_RESIDUAL_E4) != 0u) { + uvec4 codes = residual8x16[elementIndex >> 4u]; + [[unroll]] for (uint i = 0u; i < 8u; ++i) { + uint pair = (codes[i >> 1u] >> ((i & 1u) * 16u)) & 0xffffu; + r[i] = vec2(e4m3HwToF32(pair & 0xffu), e4m3HwToF32(pair >> 8u)); + } + } else { + uvec4 w0 = residual16x8[elementIndex >> 3u], w1 = residual16x8[(elementIndex >> 3u) + 1u]; + [[unroll]] for (uint i = 0u; i < 4u; ++i) { r[i] = vec2(unpackFloat2x16(w0[i])); r[4u + i] = vec2(unpackFloat2x16(w1[i])); } + } +} + +// Publication of sixteen accumulator halves (two words): output element index `index` +// (row * stride + batch column base + column, 16-aligned), scale vector column `column`. +void publish16(uvec4 v0, uvec4 v1, uint index, uint column) { + if ((FLAGS & F_SILU) != 0u) { + [[unroll]] for (uint i = 0u; i < 4u; ++i) { + v0[i] = packFloat2x16(siluPair(unpackFloat2x16(v0[i]))); + v1[i] = packFloat2x16(siluPair(unpackFloat2x16(v1[i]))); + } + } + if ((FLAGS & (F_QUANTIZE | F_DUAL)) != 0u) { + uvec4 codes; + codes.x = uint(e4m3HwPair(unpackFloat2x16(v0[0]))) | (uint(e4m3HwPair(unpackFloat2x16(v0[1]))) << 16u); + codes.y = uint(e4m3HwPair(unpackFloat2x16(v0[2]))) | (uint(e4m3HwPair(unpackFloat2x16(v0[3]))) << 16u); + codes.z = uint(e4m3HwPair(unpackFloat2x16(v1[0]))) | (uint(e4m3HwPair(unpackFloat2x16(v1[1]))) << 16u); + codes.w = uint(e4m3HwPair(unpackFloat2x16(v1[2]))) | (uint(e4m3HwPair(unpackFloat2x16(v1[3]))) << 16u); + out8x16[index >> 4u] = codes; + } + if ((FLAGS & F_QUANTIZE) == 0u) { out16x8[index >> 3u] = v0; out16x8[(index >> 3u) + 1u] = v1; } +} + +void main() { + const uint thread = gl_LocalInvocationID.x; + const uint subgroup = gl_SubgroupID; + const uint lane = gl_SubgroupInvocationID; + const uint split = gl_WorkGroupID.x % SPLITK; + const uint columnLinear = gl_WorkGroupID.x / SPLITK; + const uint batch = columnLinear / pc.columnGroups; + const uint columnGroup = columnLinear % pc.columnGroups; + const uint blockRow = (gl_WorkGroupID.y + gl_WorkGroupID.z * 65535u) * BM; + const uint rowBase = blockRow + subgroup * 16u; + const uint colBase = columnGroup * BN; + const uint stageBase = subgroup * 256u; + const uint outColumn = pc.outputColumnOffset + batch * pc.N; + const bool rowsValid = rowBase < pc.rows; // whole 16-row tile beyond the end: no MMAs, no stores + + ACC acc[TILES]; + ACC total[TILES]; + // Native mma.sync starts from FP16 accumulators holding the scaled skip. + const bool seedResidual = (FLAGS & F_RESIDUAL) != 0u && split == 0u; + [[unroll]] for (uint t = 0u; t < TILES; ++t) { + if (seedResidual) { + if ((FLAGS & (F_SCALE_RESIDUAL | F_RESIDUAL_E4)) == 0u) { + // Plain half residual: load the C tile directly (rows past the end read padding rows). + uint row = min(rowBase, pc.rows - 1u); + coopMatLoad(acc[t], residual16, row * pc.outputStride + outColumn + colBase + t * 16u, pc.outputStride, + gl_CooperativeMatrixLayoutRowMajor); + } else { + acc[t] = ACC(0.0); // filled below from the staged, scaled residual + } + } else { + acc[t] = ACC(0.0); + } + } + const uint epiBase = subgroup * 16u * 9u; // per-subgroup f16 [16][64] staging, 9-word rows + // Epilogue/prologue lane mapping: a pass covers up to 4 tiles (64 columns); LPR lanes share a row, + // each handling 16 columns (two words) with 16-byte accesses; RPI rows per instruction. + const uint LPR4 = 4u, RPI4 = 8u; // 4-tile passes + if (seedResidual && (FLAGS & (F_SCALE_RESIDUAL | F_RESIDUAL_E4)) != 0u && rowsValid) { + // Scaled and/or E4 residual: round_f16(residual * scale) staged as f16 with 16-byte loads, in passes of + // up to four tiles (all loads of a pass in flight together), then loaded as the C fragments. + [[unroll]] for (uint pass = 0u; pass < TILES; pass += 4u) { + const uint passTiles = (TILES - pass) < 4u ? (TILES - pass) : 4u; + const uint lpr = passTiles == 1u ? 1u : (passTiles == 2u ? 2u : 4u); + const uint rpi = 32u / lpr; + const uint quarter = lane % lpr; + [[unroll]] for (uint it = 0u; it < (16u + rpi - 1u) / rpi; ++it) { + uint r = it * rpi + lane / lpr; + uint row = rowBase + r; + if (r < 16u && quarter < passTiles && row < pc.rows) { + uint column = colBase + pass * 16u + quarter * 16u; + vec2 res[8]; + loadResidual16(row * pc.outputStride + outColumn + column, res); + if ((FLAGS & F_SCALE_RESIDUAL) != 0u) { + uvec4 s0 = aux16x8[(pc.auxHalfOffset + column) >> 3u], s1 = aux16x8[((pc.auxHalfOffset + column) >> 3u) + 1u]; + [[unroll]] for (uint i = 0u; i < 4u; ++i) { res[i] *= vec2(unpackFloat2x16(s0[i])); res[4u + i] *= vec2(unpackFloat2x16(s1[i])); } + } + uvec4 w0, w1; + [[unroll]] for (uint i = 0u; i < 4u; ++i) { w0[i] = packFloat2x16(f16vec2(res[i])); w1[i] = packFloat2x16(f16vec2(res[4u + i])); } + stage[epiBase + r * 9u + quarter * 2u] = w0; + stage[epiBase + r * 9u + quarter * 2u + 1u] = w1; + } + } + subgroupSync(); + [[unroll]] for (uint t = 0u; t < passTiles; ++t) + coopMatLoad(acc[pass + t], stage, epiBase + t * 2u, 9u, gl_CooperativeMatrixLayoutRowMajor); + subgroupSync(); + } + } + barrier(); // the prologue staging aliases the operand buffers + + // Per-thread staging assignment: A words idx = thread + THREADS * i -> row idx / KW, word idx % KW of the + // row's KSTEP-byte slice; B words idx -> n row idx / KW, word idx % KW (k32 tile 2s + (word >> 1), half word & 1). + const uint aColumnBase = pc.inputColumnBase + (((FLAGS & F_BROADCAST_INPUT) != 0u) ? 0u : batch * K); + const uint steps = K / KSTEP / SPLITK; // steps of this workgroup's partition + const uint kBegin = split * steps; + // B k32 tile j: words (((batch * K/32 + j) * Nmatrix + weightColumnOffset + colBase) + n) * 2 + half. + const uint bTile0 = ((batch * (K / 32u)) * pc.Nmatrix + pc.weightColumnOffset + colBase) * 2u; + const uint bTileStride = pc.Nmatrix * 2u; + const uint A_WORDS = BM * ROWV4; // per buffer + const uint B_WORDS = BN * ROWV4; + uint aIndex[A_PER_THREAD]; + [[unroll]] for (uint i = 0u; i < A_PER_THREAD; ++i) { + uint idx = thread + THREADS * i; + uint row = min(idx / KW, BM - 1u); + aIndex[i] = (min(blockRow + row, pc.rows - 1u) * pc.inputStride + aColumnBase) / 16u + (idx % KW); + } + uvec4 ra[4 * A_PER_THREAD]; + uvec4 rb[4 * B_PER_THREAD]; + +#define LOAD_STEP(d, step) \ + { \ + uint kv = (kBegin + (step)) * KW; \ + [[unroll]] for (uint i = 0u; i < A_PER_THREAD; ++i) \ + ra[(d) * A_PER_THREAD + i] = a4[aIndex[i] + kv]; \ + uint tileBase = bTile0 + (kBegin + (step)) * (KW / 2u) * bTileStride; \ + [[unroll]] for (uint i = 0u; i < B_PER_THREAD; ++i) { \ + uint idx = min(thread + THREADS * i, KW * BN - 1u); \ + uint n = idx / KW, w = idx % KW; \ + rb[(d) * B_PER_THREAD + i] = b4[tileBase + (w >> 1u) * bTileStride + n * 2u + (w & 1u)]; \ + } \ + } +#define STORE_STEP(d, buf) \ + { \ + uint aOff = (buf) * (A_WORDS + B_WORDS); \ + uint bOff = aOff + A_WORDS; \ + [[unroll]] for (uint i = 0u; i < A_PER_THREAD; ++i) { \ + uint idx = thread + THREADS * i; \ + if (idx < BM * KW) stage[aOff + (idx / KW) * ROWV4 + (idx % KW)] = ra[(d) * A_PER_THREAD + i]; \ + } \ + [[unroll]] for (uint i = 0u; i < B_PER_THREAD; ++i) { \ + uint idx = thread + THREADS * i; \ + if (idx < KW * BN) stage[bOff + (idx / KW) * ROWV4 + (idx % KW)] = rb[(d) * B_PER_THREAD + i]; \ + } \ + } +#define MMA_STEP(step, buf) \ + { \ + if (rowsValid) { \ + uint aOff = (buf) * (A_WORDS + B_WORDS); \ + uint bOff = aOff + A_WORDS; \ + MAT_A ma; \ + coopMatLoad(ma, stage, aOff + subgroup * 16u * ROWV4, ROWV4, gl_CooperativeMatrixLayoutRowMajor); \ + [[unroll]] for (uint t = 0u; t < TILES; ++t) { \ + MAT_B mb; \ + coopMatLoad(mb, stage, bOff + t * 16u * ROWV4, ROWV4, gl_CooperativeMatrixLayoutColumnMajor); \ + acc[t] = coopMatMulAdd(ma, mb, acc[t]); \ + } \ + uint kb = (step) * KSTEP; \ + if (PARTITION != 0u && (((kb + KSTEP) % PARTITION) == 0u || kb + KSTEP >= K)) { \ + [[unroll]] for (uint t = 0u; t < TILES; ++t) { \ + if (kb < PARTITION) total[t] = acc[t]; \ + else total[t] = total[t] + acc[t]; \ + acc[t] = ACC(0.0); \ + } \ + } \ + } \ + } +#define RUN_STEP(d) \ + if ((d) < DEPTH && base + (d) < steps) { \ + uint step = base + (d); \ + uint buf = step & 1u; \ + STORE_STEP(d, buf) \ + if (step + DEPTH < steps) LOAD_STEP(d, step + DEPTH) \ + barrier(); \ + MMA_STEP(step, buf) \ + } + + // Prologue: the first DEPTH steps in flight. + if (0u < steps) LOAD_STEP(0, 0u) + if (1u < DEPTH && 1u < steps) LOAD_STEP(1, 1u) + if (2u < DEPTH && 2u < steps) LOAD_STEP(2, 2u) + if (3u < DEPTH && 3u < steps) LOAD_STEP(3, 3u) + for (uint base = 0u; base < steps; base += DEPTH) { + RUN_STEP(0) + RUN_STEP(1) + RUN_STEP(2) + RUN_STEP(3) + } + if (PARTITION != 0u) { + [[unroll]] for (uint t = 0u; t < TILES; ++t) acc[t] = total[t]; + } + barrier(); // operand buffers are dead: the epilogue staging reuses them + if (!rowsValid) return; + + if (SPLITK > 1u) { + // Partial accumulators of this partition as raw f16 [rows][N] at split * splitStride. + [[unroll]] for (uint pass = 0u; pass < TILES; pass += 4u) { + const uint passTiles = (TILES - pass) < 4u ? (TILES - pass) : 4u; + [[unroll]] for (uint t = 0u; t < passTiles; ++t) + coopMatStore(acc[pass + t], stage, epiBase + t * 2u, 9u, gl_CooperativeMatrixLayoutRowMajor); + subgroupSync(); + const uint lpr = passTiles == 1u ? 1u : (passTiles == 2u ? 2u : 4u); + const uint rpi = 32u / lpr; + const uint quarter = lane % lpr; + [[unroll]] for (uint it = 0u; it < (16u + rpi - 1u) / rpi; ++it) { + uint r = it * rpi + lane / lpr; + uint row = rowBase + r; + if (r < 16u && quarter < passTiles && row < pc.rows) { + uint column = colBase + pass * 16u + quarter * 16u; + uint index = split * pc.splitStride + row * pc.N + batch * pc.N * pc.rows + column; + out16x8[index >> 3u] = stage[epiBase + r * 9u + quarter * 2u]; + out16x8[(index >> 3u) + 1u] = stage[epiBase + r * 9u + quarter * 2u + 1u]; + } + } + subgroupSync(); + } + return; + } + // Epilogue in passes of up to four tiles (64 columns): stage the tiles as f16 [16][64] per subgroup + // (9-word row stride), then lanes publish 16 columns each with 16-byte accesses (full sectors). + [[unroll]] for (uint pass = 0u; pass < TILES; pass += 4u) { + const uint passTiles = (TILES - pass) < 4u ? (TILES - pass) : 4u; + [[unroll]] for (uint t = 0u; t < passTiles; ++t) + coopMatStore(acc[pass + t], stage, epiBase + t * 2u, 9u, gl_CooperativeMatrixLayoutRowMajor); + subgroupSync(); + const uint lpr = passTiles == 1u ? 1u : (passTiles == 2u ? 2u : 4u); + const uint rpi = 32u / lpr; + const uint quarter = lane % lpr; + [[unroll]] for (uint it = 0u; it < (16u + rpi - 1u) / rpi; ++it) { + uint r = it * rpi + lane / lpr; + uint row = rowBase + r; + if (r < 16u && quarter < passTiles && row < pc.rows) { + uint column = colBase + pass * 16u + quarter * 16u; + uvec4 v0 = stage[epiBase + r * 9u + quarter * 2u], v1 = stage[epiBase + r * 9u + quarter * 2u + 1u]; + publish16(v0, v1, row * pc.outputStride + outColumn + column, column); + } + } + subgroupSync(); + } +} diff --git a/third_party/opendlss-nr/shaders/gemm_mlp.comp b/third_party/opendlss-nr/shaders/gemm_mlp.comp new file mode 100644 index 000000000..38b5a1f22 --- /dev/null +++ b/third_party/opendlss-nr/shaders/gemm_mlp.comp @@ -0,0 +1,162 @@ +#version 460 +// Fused two-layer FP8 MLP: D = E4( E4(SiLU(A * W1)) * W2 ), the expert FFN paths +// (C -> 128 -> 32 per expert) and the split-512 branches (64 -> 256 -> 64). +// +// v2 (fragment level, VK_NV_cooperative_matrix2): the hidden activation is a 16x128 +// accumulator fragment per subgroup (one flexible multiply per k32 step), SiLU is a +// per-element operation and the E4M3 publication a Use conversion in registers; W2 is +// applied as one multiply per 128-wide hidden chunk from a staged [NOUT][128] tile. The +// K order (W1 steps, then hidden chunks in order) is the same accumulation chain as the +// separate GEMMs. Shared memory: the double-buffered W1 operands only (12 KB). +// +// Weights: W1 k32-tile-major per batch [batch][K/32][HIDDEN][32]; W2 N-major per batch +// [batch][NOUT][HIDDEN] (K contiguous). +#extension GL_EXT_float_e4m3 : require +#extension GL_EXT_shader_explicit_arithmetic_types : require +#extension GL_KHR_memory_scope_semantics : require +#extension GL_KHR_cooperative_matrix : require +#extension GL_NV_cooperative_matrix2 : require +#extension GL_KHR_shader_subgroup_basic : require +#extension GL_KHR_shader_subgroup_shuffle : require +#extension GL_EXT_control_flow_attributes : require +#extension GL_GOOGLE_include_directive : require +#define DLSS_E4M3_HW 1 +#include "common.glsl" +#include "publish.glsl" + +layout(local_size_x = 128) in; // four subgroups, 16 rows each + +layout(constant_id = 0) const uint K = 64; // input channels per batch +layout(constant_id = 1) const uint HIDDEN = 128; // W1 output columns per batch (multiple of 128) +layout(constant_id = 2) const uint NOUT = 32; // W2 output columns per batch (32 or 64) +layout(constant_id = 3) const uint FLAGS = 0; +layout(constant_id = 5) const uint DEPTH = 2; // global -> register prefetch depth in k32 steps +const uint F_BROADCAST_INPUT = 1u; // every batch reads the same input columns + +layout(push_constant) uniform Push { + uint rows; + uint inputStride; // input row length in elements + uint inputColumnBase; + uint outputStride; + uint outputColumnOffset; + uint batches; +} pc; + +layout(std430, binding = 0) readonly buffer InputA { uvec4 a4[]; }; +layout(std430, binding = 1) readonly buffer WeightsOne { uvec4 w1v[]; }; +layout(std430, binding = 2) readonly buffer WeightsTwo { uvec4 w2v[]; }; +layout(std430, binding = 5) writeonly buffer OutputE4 { uvec4 out8x16[]; }; + +const uint A_WORDS = 64u * 3u; // A tile [64][32] as 2 words per row + 1 pad +const uint B1_WORDS = 128u * 3u; // W1 tile [128 n][32 k] + pad +const uint BUF_WORDS = A_WORDS + B1_WORDS; +const uint BUFFERS = 2u; // double-buffered operands +shared uvec4 stage[BUFFERS * BUF_WORDS]; // double-buffered W1 operands; then the W2 chunk tile [NOUT][128 k] (9-word rows) +shared uint stage32[4u * 16u * 16u]; // output row tiles as 32-bit words: [subgroup][16 rows][NOUT/4 words] + +#define ACC16x128 coopmat +#define ACCOUT coopmat +#define A16x32 coopmat +#define A16x128 coopmat +#define B32x128 coopmat +#define B128xOUT coopmat + +float16_t siluElement(const in uint row, const in uint col, const in float16_t value) { return siluHalf(value); } + +void main() { + const uint thread = gl_LocalInvocationID.x; + const uint subgroup = gl_SubgroupID; + const uint batch = gl_WorkGroupID.x; + const uint blockRow = (gl_WorkGroupID.y + gl_WorkGroupID.z * 65535u) * 64u; + const uint rowBase = blockRow + subgroup * 16u; + const bool rowsValid = rowBase < pc.rows; + + // Staging assignment: A row half (thread >> 1, thread & 1); W1 tile words thread and thread + 128. + const uint aRow = thread >> 1u, aHalf = thread & 1u; + const uint aColumnBase = pc.inputColumnBase + (((FLAGS & F_BROADCAST_INPUT) != 0u) ? 0u : batch * K); + const uint aIndex = (min(blockRow + aRow, pc.rows - 1u) * pc.inputStride + aColumnBase) / 16u + aHalf; + const uint kSteps = K / 32u; + const uint w1Batch = batch * kSteps * HIDDEN * 2u; // words + const uint w2Batch = batch * NOUT * HIDDEN / 16u; // words: [NOUT][HIDDEN] bytes + + ACCOUT acc2 = ACCOUT(0.0); + for (uint chunk = 0u; chunk < HIDDEN / 128u; ++chunk) { + // ---- W1 for this 128-wide hidden chunk: one flexible multiply per k32 step. + ACC16x128 hidden = ACC16x128(0.0); + const uint chunkWord = chunk * 128u * 2u; + // Register prefetch DEPTH steps ahead: slot d holds step s with s % DEPTH == d. + uvec4 ra[DEPTH], rb0[DEPTH], rb1[DEPTH]; + [[unroll]] for (uint d = 0u; d < DEPTH; ++d) { + if (d < kSteps) { + uint tile = w1Batch + d * HIDDEN * 2u + chunkWord; + ra[d] = a4[aIndex + d * 2u]; + rb0[d] = w1v[tile + thread]; + rb1[d] = w1v[tile + 128u + thread]; + } + } + // W2 chunk tile words for this thread, issued before the K loop so the loads complete during it. + uvec4 rw2[NOUT * 8u / 128u]; + [[unroll]] for (uint i = 0u; i < NOUT * 8u / 128u; ++i) { + uint idx = thread + 128u * i; + rw2[i] = w2v[w2Batch + ((idx >> 3u) * HIDDEN + chunk * 128u) / 16u + (idx & 7u)]; + } + for (uint base = 0u; base < kSteps; base += DEPTH) { + [[unroll]] for (uint d = 0u; d < DEPTH; ++d) { + const uint s = base + d; + if (s < kSteps) { + const uint buf = (BUFFERS == 1u) ? 0u : (s & 1u) * BUF_WORDS; + if (BUFFERS == 1u && s != 0u) barrier(); // previous step's fragment loads done + stage[buf + aRow * 3u + aHalf] = ra[d]; + stage[buf + A_WORDS + (thread >> 1u) * 3u + (thread & 1u)] = rb0[d]; // n rows 0..63 + stage[buf + A_WORDS + (64u + (thread >> 1u)) * 3u + (thread & 1u)] = rb1[d]; // n rows 64..127 + if (s + DEPTH < kSteps) { + uint tile = w1Batch + (s + DEPTH) * HIDDEN * 2u + chunkWord; + ra[d] = a4[aIndex + (s + DEPTH) * 2u]; + rb0[d] = w1v[tile + thread]; + rb1[d] = w1v[tile + 128u + thread]; + } + barrier(); + if (rowsValid) { + A16x32 ma; coopMatLoad(ma, stage, buf + subgroup * 16u * 3u, 3u, gl_CooperativeMatrixLayoutRowMajor); + B32x128 mb; coopMatLoad(mb, stage, buf + A_WORDS, 3u, gl_CooperativeMatrixLayoutColumnMajor); + hidden = coopMatMulAdd(ma, mb, hidden); + } + } + } + } + barrier(); // last step's operand reads done before the staging area is reused + // ---- SiLU + E4 in registers; W2 chunk tile [NOUT n][128 k] staged (9-word rows), one multiply. + coopMatPerElementNV(hidden, hidden, siluElement); + A16x128 hiddenE4 = A16x128(hidden); + [[unroll]] for (uint i = 0u; i < NOUT * 8u / 128u; ++i) { + uint idx = thread + 128u * i; + stage[(idx >> 3u) * 9u + (idx & 7u)] = rw2[i]; + } + barrier(); + if (rowsValid) { + B128xOUT w2; coopMatLoad(w2, stage, 0u, 9u, gl_CooperativeMatrixLayoutColumnMajor); + acc2 = coopMatMulAdd(hiddenE4, w2, acc2); + } + barrier(); // W2 tile reads done before the next chunk stages W1 operands + } + + // ---- Output: E4 of the W2 accumulators, NOUT columns per row at outputColumnOffset + batch * NOUT. + if (!rowsValid) return; + // Publication: lane (g, t) holds rows g, g+8 and columns 8j + 2t, +1 (j < NOUT/8) of the accumulator. Lanes t + // and t^1 exchange one pair so that the even lane assembles the 32-bit word (columns 8j + 4(t>>1) .. +3) of row g + // and the odd lane that of row g+8; the words form this subgroup's [16][NOUT] E4 row tile in shared memory, + // from which each lane stores one 16-byte word per 32 columns (rows are allocated in whole 64-row groups). + const uint lane = gl_SubgroupInvocationID; + const uint g = lane >> 2u, t = lane & 3u; + const uint rowWords = NOUT / 4u; // 32-bit words per row + const uint tileBase = subgroup * 16u * rowWords; + PUBLISH_E4_TILE(acc2, NOUT, stage32, tileBase, g, t) + subgroupBarrier(); + [[unroll]] for (uint i = 0u; i < NOUT / 32u; ++i) { + uint w = lane + 32u * i; // 16-byte word: row w / (NOUT/16), column word w % (NOUT/16) + uint r = w / (NOUT / 16u), cw = w % (NOUT / 16u); + uint base = tileBase + r * rowWords + cw * 4u; + out8x16[((rowBase + r) * pc.outputStride + pc.outputColumnOffset + batch * NOUT) / 16u + cw] = + uvec4(stage32[base], stage32[base + 1u], stage32[base + 2u], stage32[base + 3u]); + } +} diff --git a/third_party/opendlss-nr/shaders/gemm_reduce.comp b/third_party/opendlss-nr/shaders/gemm_reduce.comp new file mode 100644 index 000000000..03b4b763f --- /dev/null +++ b/third_party/opendlss-nr/shaders/gemm_reduce.comp @@ -0,0 +1,57 @@ +#version 460 +// Split-K reduction + publication for gemm_fp8 (SPLITK > 1): the partial FP16 +// accumulators of the K partitions are summed in partition order +// (((p0 + p1) + p2) + p3 ...), exactly the `total = total + acc` chain of the +// single-workgroup kernel, then published (SiLU, E4M3 quantization, f16). +#extension GL_EXT_float_e4m3 : require +#extension GL_EXT_shader_explicit_arithmetic_types : require +#extension GL_EXT_control_flow_attributes : require +#extension GL_GOOGLE_include_directive : require +#define DLSS_E4M3_HW 1 +#include "common.glsl" + +layout(local_size_x = 256) in; + +layout(constant_id = 0) const uint SPLITK = 2; +layout(constant_id = 1) const uint FLAGS = 0; +const uint F_SILU = 8u; +const uint F_QUANTIZE = 16u; +const uint F_DUAL = 32u; + +layout(push_constant) uniform Push { + uint rows; + uint N; + uint splitStride; // elements per partition slice in the partial buffer + uint outputStride; + uint outputColumnOffset; +} pc; + +layout(std430, binding = 0) readonly buffer Partials { uvec4 partial16x8[]; }; // f16 [SPLITK][rows][N] +layout(std430, binding = 2) writeonly buffer OutputHalf { uvec4 out16x8[]; }; +layout(std430, binding = 5) writeonly buffer OutputE4 { uvec2 out8x8[]; }; + +void main() { + uint group = gl_GlobalInvocationID.x + gl_GlobalInvocationID.y * 65535u * 256u; // 8 columns + uint groupsPerRow = pc.N / 8u; + uint row = group / groupsPerRow, column = (group % groupsPerRow) * 8u; + if (row >= pc.rows) return; + uvec4 total = partial16x8[(row * pc.N + column) >> 3u]; + [[unroll]] for (uint s = 1u; s < SPLITK; ++s) { + uvec4 part = partial16x8[(s * pc.splitStride + row * pc.N + column) >> 3u]; + [[unroll]] for (uint i = 0u; i < 4u; ++i) { + precise f16vec2 sum = unpackFloat2x16(total[i]) + unpackFloat2x16(part[i]); + total[i] = packFloat2x16(sum); + } + } + if ((FLAGS & F_SILU) != 0u) { + [[unroll]] for (uint i = 0u; i < 4u; ++i) total[i] = packFloat2x16(siluPair(unpackFloat2x16(total[i]))); + } + uint index = row * pc.outputStride + pc.outputColumnOffset + column; + if ((FLAGS & (F_QUANTIZE | F_DUAL)) != 0u) { + uvec2 codes; + codes.x = uint(e4m3HwPair(unpackFloat2x16(total[0]))) | (uint(e4m3HwPair(unpackFloat2x16(total[1]))) << 16u); + codes.y = uint(e4m3HwPair(unpackFloat2x16(total[2]))) | (uint(e4m3HwPair(unpackFloat2x16(total[3]))) << 16u); + out8x8[index >> 3u] = codes; + } + if ((FLAGS & F_QUANTIZE) == 0u) out16x8[index >> 3u] = total; +} diff --git a/third_party/opendlss-nr/shaders/global_attend.comp b/third_party/opendlss-nr/shaders/global_attend.comp new file mode 100644 index 000000000..10b683b40 --- /dev/null +++ b/third_party/opendlss-nr/shaders/global_attend.comp @@ -0,0 +1,124 @@ +#version 460 +// Global ViT cosine attention (exact Ada FP8 MMA). +// One subgroup per (head, 16-query tile). Keys run over the 64-padded token +// count in natural order. Padding keys have zero K/V, so they add nothing to the +// numerator, but their score is still 0 and still exponentiates: the denominator +// therefore carries padding * exp(0), which is subtracted once at the end. +// Dropping them from the sum instead is a different function, not an optimization. +// Unlike the window kernel, the E4M3 weights are unnormalized and the +// reciprocal is applied to the value accumulator afterwards. +#extension GL_EXT_float_e4m3 : require +#extension GL_EXT_shader_explicit_arithmetic_types : require +#extension GL_KHR_memory_scope_semantics : require +#extension GL_KHR_cooperative_matrix : require +#extension GL_KHR_shader_subgroup_basic : require +#extension GL_GOOGLE_include_directive : require +#include "common.glsl" + +layout(local_size_x = 32) in; + +layout(constant_id = 0) const uint PADDED_TOKENS = 192; + +layout(push_constant) uniform Push { + uint tokens; + uint heads; + uint channels; +} pc; + +layout(std430, binding = 0) readonly buffer Normalized { uint8_t qkv[]; }; // E4M3 [paddedTokens][channels*3] +layout(std430, binding = 5) writeonly buffer Attended { uint8_t attended[]; }; // E4M3 [tokens][channels] + +shared float16_t scores[16u * PADDED_TOKENS]; +shared uint8_t weights[16u * PADDED_TOKENS]; +shared float16_t outputs[16u * 32u]; +shared float16_t reciprocals[16]; + +float16_t vitExpWeight(float16_t score) { + // Global-ViT approximation constants (f32 literals converted to half by PTX). + precise float16_t affine = fma(score, float16_t(0.08953946828842163), float16_t(1.7093614339828491)); + affine = clamp(affine, float16_t(1.439453125), float16_t(1.9775390625)); + uint bits = f16Bits(affine); + uint exponentialBits = ((bits << 4u) + 0x4000u) & 0xffffu; + return f16FromBits(exponentialBits); +} + +float16_t softmaxPair(uint row, uint base, uint pair, uint parity) { + uint key = row * PADDED_TOKENS + base + pair * 2u + parity; + precise float16_t a = scores[key] + scores[key + 8u]; + precise float16_t b = scores[key + 16u] + scores[key + 24u]; + precise float16_t c = scores[key + 32u] + scores[key + 40u]; + precise float16_t d = scores[key + 48u] + scores[key + 56u]; + precise float16_t ab = a + b; + precise float16_t abc = ab + c; + return abc + d; +} + +float16_t softmax64(uint row, uint base) { + precise float16_t e0 = softmaxPair(row, base, 0u, 0u) + softmaxPair(row, base, 1u, 0u); + precise float16_t e1 = e0 + softmaxPair(row, base, 2u, 0u); + precise float16_t even = e1 + softmaxPair(row, base, 3u, 0u); + precise float16_t o0 = softmaxPair(row, base, 0u, 1u) + softmaxPair(row, base, 1u, 1u); + precise float16_t o1 = o0 + softmaxPair(row, base, 2u, 1u); + precise float16_t odd = o1 + softmaxPair(row, base, 3u, 1u); + return even + odd; +} + +void main() { + const uint lane = gl_SubgroupInvocationID; + const uint head = gl_WorkGroupID.x; + const uint qTile = gl_WorkGroupID.y; + const uint stride3 = pc.channels * 3u; + const uint headBase = head * 96u; + const uint qBase = qTile * 16u * stride3 + headBase; + + coopmat mq; + coopMatLoad(mq, qkv, qBase, stride3, gl_CooperativeMatrixLayoutRowMajor); + for (uint kTile = 0u; kTile < PADDED_TOKENS / 16u; ++kTile) { + coopmat mk; + coopMatLoad(mk, qkv, kTile * 16u * stride3 + headBase + 32u, stride3, gl_CooperativeMatrixLayoutColumnMajor); + coopmat mc = + coopmat(0.0); + mc = coopMatMulAdd(mq, mk, mc); + coopMatStore(mc, scores, kTile * 16u, PADDED_TOKENS, gl_CooperativeMatrixLayoutRowMajor); + } + barrier(); + for (uint i = lane; i < 16u * PADDED_TOKENS; i += 32u) scores[i] = vitExpWeight(scores[i]); + barrier(); + + if (lane < 16u) { + precise float16_t total = float16_t(0.0); + for (uint base = 0u; base < PADDED_TOKENS; base += 64u) total = total + softmax64(lane, base); + uint padding = PADDED_TOKENS - pc.tokens; + if (padding > 0u) { + precise float16_t correction = float16_t(float(vitExpWeight(float16_t(0.0))) * float(padding)); + total = total - correction; + } + reciprocals[lane] = float16_t(1.0 / float(total)); + } + for (uint i = lane; i < 16u * PADDED_TOKENS; i += 32u) { + weights[i] = uint8_t(e4m3CodeFromF16Bits(f16Bits(scores[i]))); + } + barrier(); + + for (uint cTile = 0u; cTile < 2u; ++cTile) { + coopmat mc = + coopmat(0.0); + for (uint kb = 0u; kb < PADDED_TOKENS; kb += 32u) { + coopmat mp; + coopMatLoad(mp, weights, kb, PADDED_TOKENS, gl_CooperativeMatrixLayoutRowMajor); + coopmat mv; + coopMatLoad(mv, qkv, kb * stride3 + headBase + 64u + cTile * 16u, stride3, gl_CooperativeMatrixLayoutRowMajor); + mc = coopMatMulAdd(mp, mv, mc); + } + coopMatStore(mc, outputs, cTile * 16u, 32u, gl_CooperativeMatrixLayoutRowMajor); + } + barrier(); + + for (uint i = lane; i < 16u * 32u; i += 32u) { + uint row = i >> 5u, component = i & 31u; + uint token = qTile * 16u + row; + if (token >= pc.tokens) continue; + precise float value = roundF16(float(outputs[i]) * float(reciprocals[row])); + attended[token * pc.channels + head * 32u + component] = uint8_t(e4m3CodeFromF32(value)); + } +} diff --git a/third_party/opendlss-nr/shaders/global_attention.comp b/third_party/opendlss-nr/shaders/global_attention.comp new file mode 100644 index 000000000..a4218931e --- /dev/null +++ b/third_party/opendlss-nr/shaders/global_attention.comp @@ -0,0 +1,273 @@ +#version 460 +// Fused global ViT cosine attention (normalize + attend) for one +// (head, 64-query block): replaces global_normalize.comp + global_attend.comp. +// Every workgroup normalizes the head's K/V rows of all padded tokens into +// shared memory (natural token order, zero rows for padding), its four +// subgroups normalize their 16 query rows each, then per 64-key block: +// S = Q K^T (no prior), the ViT exponential, the specified block sum, unnormalized +// E4M3 weights and P·V accumulated over the blocks in K order. The row total is +// ((b0 + b1) + b2 ...) minus the padding correction; the half reciprocal is +// applied to the value accumulator afterwards. +// +// Arithmetic identical to the verified unfused kernels; the lane layouts are the +// attention_common.glsl ones (one lane per token for the norms, one lane pair +// per S row for the softmax with the exponentials kept in registers). +#extension GL_EXT_float_e4m3 : require +#extension GL_EXT_shader_explicit_arithmetic_types : require +#extension GL_KHR_memory_scope_semantics : require +#extension GL_KHR_cooperative_matrix : require +#extension GL_KHR_shader_subgroup_basic : require +#extension GL_KHR_shader_subgroup_shuffle : require +#extension GL_EXT_control_flow_attributes : require +#extension GL_GOOGLE_include_directive : require +#define DLSS_E4M3_HW 1 +#include "common.glsl" + +layout(local_size_x = 128) in; + +layout(constant_id = 0) const uint PADDED_TOKENS = 192; // multiple of 64 +layout(constant_id = 1) const uint CHUNK_TOKENS = 192; // keys staged in shared memory at a time (multiple of 64, <= PADDED) +layout(constant_id = 2) const uint PRENORMALIZED = 0; // 1: binding 0 holds the E4 normalized q/k/v of global_normalize + +layout(push_constant) uniform Push { + uint tokens; + uint heads; + uint channels; // heads * 32 + uint scaleWordOffset; // per-head f32 learned scale, in words within binding 4 +} pc; + +layout(std430, binding = 0) readonly buffer Qkv { uvec4 qkv4[]; }; // f16 [paddedTokens][heads*96] as words +layout(std430, binding = 0) readonly buffer NormalizedQkv { uvec4 norm4[]; }; // PRENORMALIZED: E4 [tokens][heads*96] as words +layout(std430, binding = 4) readonly buffer Aux { uint aux32[]; }; +layout(std430, binding = 5) writeonly buffer Attended { uvec4 attended16[]; }; // E4 [tokens][channels] as words +layout(std430, binding = 7) readonly buffer Prior { float16_t prior[]; }; // unused (attention_common contract) + +const uint BLOCKS = PADDED_TOKENS / 64u; +const uint CHUNK_BLOCKS = CHUNK_TOKENS / 64u; +// kv4: K E4 rows [CHUNK_TOKENS][32] then V rows, 2 words each. priv4: attention_common layout. +shared uvec4 kv4[2u * CHUNK_TOKENS * 2u]; +shared uvec4 priv4[4 * 176]; + +#include "attention_common.glsl" + +// ViT exponential on a packed pair: half fma(score, 0.0895, 1.7094), clamp, per half (bits << 4) + 0x4000. +uint expWeightPairVit(uint scoreBits) { + precise f16vec2 affine = fma(unpackFloat2x16(scoreBits), f16vec2(0.08953946828842163), f16vec2(1.7093614339828491)); + affine = clamp(affine, f16vec2(1.439453125), f16vec2(1.9775390625)); + uint bits = packFloat2x16(affine); + uint lo = (((bits & 0xffffu) << 4u) + 0x4000u) & 0xffffu; + uint hi = (((bits >> 16u) << 4u) + 0x4000u) & 0xffffu; + return lo | (hi << 16u); +} + +// ViT square sum: r[c] = f16(f32(v[c])^2 + f32(f16(v[c+16]^2))), then the stride 8/4/2/1 tree in half. +float16_t inverseNormVit(uvec4 w0, uvec4 w1, uvec4 w2, uvec4 w3) { + f16vec2 p[16]; + [[unroll]] for (uint i = 0u; i < 4u; ++i) { + p[i] = unpackFloat2x16(w0[i]); p[4u + i] = unpackFloat2x16(w1[i]); + p[8u + i] = unpackFloat2x16(w2[i]); p[12u + i] = unpackFloat2x16(w3[i]); + } + f16vec2 r[8]; + [[unroll]] for (uint m = 0u; m < 8u; ++m) { + precise f16vec2 highSquare = p[m + 8u] * p[m + 8u]; + precise vec2 square = vec2(p[m]) * vec2(p[m]); + vec2 squareRounded = uintBitsToFloat(floatBitsToUint(square)); // no contraction into an fma + precise vec2 sum = squareRounded + vec2(highSquare); + r[m] = f16vec2(sum); + } + f16vec2 s8[4]; + [[unroll]] for (uint m = 0u; m < 4u; ++m) { precise f16vec2 s = r[m] + r[m + 4u]; s8[m] = s; } + precise f16vec2 s4a = s8[0] + s8[2]; + precise f16vec2 s4b = s8[1] + s8[3]; + precise f16vec2 s2 = s4a + s4b; + precise float16_t s1 = s2.x + s2.y; + return float16_t(inversesqrt(float(s1))); +} + +// 32 halves times norm (and for Q: times f16(sqrt 32) then the learned scale, three half multiplies), E4 codes. +void scaleQuantizeVit(uvec4 w0, uvec4 w1, uvec4 w2, uvec4 w3, float16_t norm, bool isQuery, float16_t learned, + out uvec4 e0, out uvec4 e1) { + uvec4 words[4] = uvec4[4](w0, w1, w2, w3); + const float16_t headScale = float16_t(sqrt(32.0)); + uint codes[8]; + [[unroll]] for (uint i = 0u; i < 8u; ++i) { + f16vec2 a = unpackFloat2x16(words[i >> 1u][(i & 1u) * 2u]), b = unpackFloat2x16(words[i >> 1u][(i & 1u) * 2u + 1u]); + precise f16vec2 na = a * norm; + precise f16vec2 nb = b * norm; + if (isQuery) { + precise f16vec2 ha = na * headScale; + precise f16vec2 hb = nb * headScale; + precise f16vec2 la = ha * learned; + precise f16vec2 lb = hb * learned; + na = la; nb = lb; + } + codes[i] = e4x4(na, nb); + } + e0 = uvec4(codes[0], codes[1], codes[2], codes[3]); + e1 = uvec4(codes[4], codes[5], codes[6], codes[7]); +} + +void main() { + const uint thread = gl_LocalInvocationID.x; + const uint q = gl_SubgroupID; + const uint lane = gl_SubgroupInvocationID; + const uint head = gl_WorkGroupID.x; + const uint queryBlock = gl_WorkGroupID.y; + const uint base = q * PRIV; + const uint rowBase = q * 16u; + const uint stride3Words = pc.channels * 3u / 8u; + const uint headWord = head * 12u; + const uint KP = 0u, VP = CHUNK_TOKENS * 2u; + const float16_t learned = float16_t(uintBitsToFloat(aux32[pc.scaleWordOffset + head])); + const uint strideE4Words = pc.channels * 3u / 16u; // PRENORMALIZED rows: 16 E4 codes per word + const uint headE4Word = head * 6u; + + // ---- Q of this subgroup's 16 tokens: one lane per token (lanes 16..31 idle). + const uint queryToken = queryBlock * 64u + rowBase + (lane & 15u); + if (lane < 16u) { + bool valid = queryToken < pc.tokens; + uvec4 e0, e1; + if (PRENORMALIZED != 0u) { + uint src = queryToken * strideE4Words + headE4Word; + e0 = valid ? norm4[src] : uvec4(0u); e1 = valid ? norm4[src + 1u] : uvec4(0u); + } else { + uint src = queryToken * stride3Words + headWord; + uvec4 q0 = valid ? qkv4[src] : uvec4(0u), q1 = valid ? qkv4[src + 1u] : uvec4(0u); + uvec4 q2 = valid ? qkv4[src + 2u] : uvec4(0u), q3 = valid ? qkv4[src + 3u] : uvec4(0u); + scaleQuantizeVit(q0, q1, q2, q3, inverseNormVit(q0, q1, q2, q3), true, learned, e0, e1); + } + priv4[base + (lane & 15u) * 2u] = valid ? e0 : uvec4(0u); + priv4[base + (lane & 15u) * 2u + 1u] = valid ? e1 : uvec4(0u); + } + + // ---- Attention over the key blocks. Lane pair per S row: row = lane >> 1, half hh = lane & 1. + const uint lr = lane >> 1u, hh = lane & 1u; + const uint sBase = base + F64; + ACC mo[2]; + mo[0] = ACC(0.0); mo[1] = ACC(0.0); + precise float16_t total = float16_t(0.0); + MAT_A mq; + for (uint chunk = 0u; chunk < PADDED_TOKENS; chunk += CHUNK_TOKENS) { + // The last chunk is short when CHUNK_TOKENS does not divide PADDED_TOKENS; running the full four blocks + // anyway would add whole blocks of padding keys to the softmax denominator that the correction below does + // not know about. + const uint chunkBlocks = min(CHUNK_BLOCKS, (PADDED_TOKENS - chunk) / 64u); + // ---- K/V of this chunk's tokens (zero rows for padding): thread t handles tokens t, t + 128, ... + barrier(); // the previous chunk's rows are dead (and the Q rows are visible before the first fragment load) + for (uint local = thread; local < CHUNK_TOKENS; local += 128u) { + const uint token = chunk + local; + bool valid = token < pc.tokens; + if (PRENORMALIZED != 0u) { + uint src = token * strideE4Words + headE4Word; + kv4[KP + local * 2u] = valid ? norm4[src + 2u] : uvec4(0u); + kv4[KP + local * 2u + 1u] = valid ? norm4[src + 3u] : uvec4(0u); + kv4[VP + local * 2u] = valid ? norm4[src + 4u] : uvec4(0u); + kv4[VP + local * 2u + 1u] = valid ? norm4[src + 5u] : uvec4(0u); + } else { + uint src = token * stride3Words + headWord; + uvec4 k0 = valid ? qkv4[src + 4u] : uvec4(0u), k1 = valid ? qkv4[src + 5u] : uvec4(0u); + uvec4 k2 = valid ? qkv4[src + 6u] : uvec4(0u), k3 = valid ? qkv4[src + 7u] : uvec4(0u); + uvec4 v0 = valid ? qkv4[src + 8u] : uvec4(0u), v1 = valid ? qkv4[src + 9u] : uvec4(0u); + uvec4 v2 = valid ? qkv4[src + 10u] : uvec4(0u), v3 = valid ? qkv4[src + 11u] : uvec4(0u); + uvec4 e0, e1; + scaleQuantizeVit(k0, k1, k2, k3, inverseNormVit(k0, k1, k2, k3), false, learned, e0, e1); + kv4[KP + local * 2u] = valid ? e0 : uvec4(0u); + kv4[KP + local * 2u + 1u] = valid ? e1 : uvec4(0u); + kv4[VP + local * 2u] = valid ? quantize16(v0, v1) : uvec4(0u); + kv4[VP + local * 2u + 1u] = valid ? quantize16(v2, v3) : uvec4(0u); + } + } + barrier(); + if (chunk == 0u) coopMatLoad(mq, priv4, base, 2u, gl_CooperativeMatrixLayoutRowMajor); + for (uint block = 0u; block < chunkBlocks; ++block) { + [[unroll]] for (uint kTile = 0u; kTile < 4u; ++kTile) { + MAT_B mb; coopMatLoad(mb, kv4, KP + (block * 64u + kTile * 16u) * 2u, 2u, gl_CooperativeMatrixLayoutColumnMajor); + ACC mc = ACC(0.0); + mc = coopMatMulAdd(mq, mb, mc); + coopMatStore(mc, priv4, sBase + kTile * 2u, 9u, gl_CooperativeMatrixLayoutRowMajor); + } + subgroupSync(); + { + uint src = sBase + lr * 9u + hh * 4u; + uvec4 s0 = priv4[src], s1 = priv4[src + 1u], s2 = priv4[src + 2u], s3 = priv4[src + 3u]; + uint e[16]; + [[unroll]] for (uint i = 0u; i < 4u; ++i) { + e[i] = expWeightPairVit(s0[i]); e[4u + i] = expWeightPairVit(s1[i]); + e[8u + i] = expWeightPairVit(s2[i]); e[12u + i] = expWeightPairVit(s3[i]); + } + // the specified block sum: b[g][j] = e[g+16j] + e[g+16j+8]; t[g] = ((b0+b1)+b2)+b3; + // block = (((t0+t2)+t4)+t6) + (((t1+t3)+t5)+t7); running total = (total + block) per block in order. + uint bOwn[8]; + [[unroll]] for (uint jl = 0u; jl < 2u; ++jl) { + [[unroll]] for (uint m = 0u; m < 4u; ++m) { + precise f16vec2 b = unpackFloat2x16(e[8u * jl + m]) + unpackFloat2x16(e[8u * jl + 4u + m]); + bOwn[jl * 4u + m] = packFloat2x16(b); + } + } + uint bOther[8]; + [[unroll]] for (uint i = 0u; i < 8u; ++i) bOther[i] = subgroupShuffleXor(bOwn[i], 1u); + f16vec2 t[4]; + [[unroll]] for (uint m = 0u; m < 4u; ++m) { + f16vec2 b0 = unpackFloat2x16(hh == 0u ? bOwn[m] : bOther[m]); + f16vec2 b1 = unpackFloat2x16(hh == 0u ? bOwn[4u + m] : bOther[4u + m]); + f16vec2 b2 = unpackFloat2x16(hh == 0u ? bOther[m] : bOwn[m]); + f16vec2 b3 = unpackFloat2x16(hh == 0u ? bOther[4u + m] : bOwn[4u + m]); + precise f16vec2 t01 = b0 + b1; + precise f16vec2 t012 = t01 + b2; + precise f16vec2 tm = t012 + b3; + t[m] = tm; + } + precise float16_t e01 = t[0].x + t[1].x; + precise float16_t e012 = e01 + t[2].x; + precise float16_t even = e012 + t[3].x; + precise float16_t o01 = t[0].y + t[1].y; + precise float16_t o012 = o01 + t[2].y; + precise float16_t odd = o012 + t[3].y; + precise float16_t blockSum = even + odd; + precise float16_t next = total + blockSum; + total = next; + // Unnormalized E4 weights of this block's keys -> P rows (words 0..3 of the S rows). + uint codes[8]; + [[unroll]] for (uint i = 0u; i < 8u; ++i) codes[i] = e4x4Bits(e[2u * i], e[2u * i + 1u]); + subgroupSync(); + priv4[sBase + lr * 9u + hh * 2u] = uvec4(codes[0], codes[1], codes[2], codes[3]); + priv4[sBase + lr * 9u + hh * 2u + 1u] = uvec4(codes[4], codes[5], codes[6], codes[7]); + } + subgroupSync(); + [[unroll]] for (uint cTile = 0u; cTile < 2u; ++cTile) { + [[unroll]] for (uint kb = 0u; kb < 64u; kb += 32u) { + MAT_A mp; coopMatLoad(mp, priv4, sBase + (kb >> 4u), 9u, gl_CooperativeMatrixLayoutRowMajor); + MAT_B mv; coopMatLoad(mv, kv4, VP + (block * 64u + kb) * 2u + cTile, 2u, gl_CooperativeMatrixLayoutRowMajor); + mo[cTile] = coopMatMulAdd(mp, mv, mo[cTile]); + } + } + subgroupSync(); // P rows dead before the next block's S tiles land + } + } + // Padding correction and the half reciprocal (per row; both lanes of the pair hold the total). + const uint padding = PADDED_TOKENS - pc.tokens; + if (padding > 0u) { + float16_t expZero = unpackFloat2x16(expWeightPairVit(0u)).x; + precise float16_t correction = float16_t(float(expZero) * float(padding)); + precise float16_t corrected = total - correction; + total = corrected; + } + const float reciprocal = roundF16(1.0 / float(total)); // bit-level: float(float16_t(x)) is elided by the compiler + // Output: value accumulators staged in words 4..7, times the reciprocal in f32, rounded to half, E4. + [[unroll]] for (uint cTile = 0u; cTile < 2u; ++cTile) + coopMatStore(mo[cTile], priv4, sBase + 4u + cTile * 2u, 9u, gl_CooperativeMatrixLayoutRowMajor); + subgroupSync(); + const uint outToken = queryBlock * 64u + rowBase + lr; + if (outToken < pc.tokens) { + uint src = sBase + lr * 9u + 4u + hh * 2u; + uvec4 w0 = priv4[src], w1 = priv4[src + 1u]; + uvec4 r0, r1; + [[unroll]] for (uint i = 0u; i < 4u; ++i) { + precise vec2 p0 = vec2(unpackFloat2x16(w0[i])) * reciprocal; + precise vec2 p1 = vec2(unpackFloat2x16(w1[i])) * reciprocal; + r0[i] = packFloat2x16(f16vec2(p0)); + r1[i] = packFloat2x16(f16vec2(p1)); + } + attended16[(outToken * pc.channels + head * 32u) / 16u + hh] = quantize16(r0, r1); + } +} diff --git a/third_party/opendlss-nr/shaders/global_normalize.comp b/third_party/opendlss-nr/shaders/global_normalize.comp new file mode 100644 index 000000000..79f3bf83a --- /dev/null +++ b/third_party/opendlss-nr/shaders/global_normalize.comp @@ -0,0 +1,73 @@ +#version 460 +// Global ViT cosine-attention Q/K normalization. +// One thread per (token, head). Differs from the fused-Swin variant: the pair +// squares are summed in f32 then rounded, and Q carries the sqrt(head_dim) +// and learned per-head scales as three separate half multiplies. +#extension GL_EXT_shader_explicit_arithmetic_types : require +#extension GL_GOOGLE_include_directive : require +#include "common.glsl" + +layout(local_size_x = 256) in; + +layout(push_constant) uniform Push { + uint tokens; + uint heads; + uint channels; // heads * 32 + uint scaleWordOffset; // per-head f32 learned scale, in words within binding 4 +} pc; + +layout(std430, binding = 1) readonly buffer Qkv { float16_t qkv[]; }; +layout(std430, binding = 4) readonly buffer Aux { uint aux32[]; }; +layout(std430, binding = 5) writeonly buffer Normalized { uint8_t normalized[]; }; + +float16_t treeSum16(float16_t r[16]) { + precise float16_t s8[8]; + for (uint c = 0u; c < 8u; ++c) s8[c] = r[c] + r[c + 8u]; + precise float16_t s4[4]; + for (uint c = 0u; c < 4u; ++c) s4[c] = s8[c] + s8[c + 4u]; + precise float16_t s2[2]; + s2[0] = s4[0] + s4[2]; + s2[1] = s4[1] + s4[3]; + return s2[0] + s2[1]; +} + +void main() { + uint id = gl_GlobalInvocationID.x + gl_GlobalInvocationID.y * 65535u * 256u; + if (id >= pc.tokens * pc.heads) return; + uint token = id / pc.heads; + uint head = id % pc.heads; + uint base = token * pc.channels * 3u + head * 96u; + + float16_t q[32]; + float16_t k[32]; + for (uint c = 0u; c < 32u; ++c) { + q[c] = qkv[base + c]; + k[c] = qkv[base + 32u + c]; + } + float16_t r[16]; + for (uint c = 0u; c < 16u; ++c) { + precise float16_t highSquare = q[c + 16u] * q[c + 16u]; + precise float sum = float(q[c]) * float(q[c]) + float(highSquare); + r[c] = float16_t(sum); + } + float16_t qSum = treeSum16(r); + for (uint c = 0u; c < 16u; ++c) { + precise float16_t highSquare = k[c + 16u] * k[c + 16u]; + precise float sum = float(k[c]) * float(k[c]) + float(highSquare); + r[c] = float16_t(sum); + } + float16_t kSum = treeSum16(r); + float16_t qNorm = float16_t(inversesqrt(float(qSum))); + float16_t kNorm = float16_t(inversesqrt(float(kSum))); + float16_t learnedScale = float16_t(uintBitsToFloat(aux32[pc.scaleWordOffset + head])); + float16_t headScale = float16_t(sqrt(32.0)); + for (uint c = 0u; c < 32u; ++c) { + precise float16_t nq0 = q[c] * qNorm; + precise float16_t nq1 = nq0 * headScale; + precise float16_t nq2 = nq1 * learnedScale; + precise float16_t nk = k[c] * kNorm; + normalized[base + c] = uint8_t(e4m3CodeFromF16Bits(f16Bits(nq2))); + normalized[base + 32u + c] = uint8_t(e4m3CodeFromF16Bits(f16Bits(nk))); + normalized[base + 64u + c] = uint8_t(e4m3CodeFromF16Bits(f16Bits(qkv[base + 64u + c]))); + } +} diff --git a/third_party/opendlss-nr/shaders/ops.comp b/third_party/opendlss-nr/shaders/ops.comp new file mode 100644 index 000000000..330691fa2 --- /dev/null +++ b/third_party/opendlss-nr/shaders/ops.comp @@ -0,0 +1,133 @@ +#version 460 +// Elementwise tensor operations of the NR graph, selected by MODE. +// v2: one thread per eight consecutive channels of one pixel (16-byte f16 and +// 8-byte E4M3 accesses, packed hardware conversions); every half rounding is +// the bit-level roundF16 or a packed 16-bit conversion, never float(float16_t()). +#extension GL_EXT_float_e4m3 : require +#extension GL_EXT_shader_explicit_arithmetic_types : require +#extension GL_EXT_control_flow_attributes : require +#extension GL_GOOGLE_include_directive : require +#define DLSS_E4M3_HW 1 +#include "common.glsl" + +layout(local_size_x = 256) in; + +layout(constant_id = 0) const uint MODE = 0; +const uint MODE_F32_TO_F16 = 0u; // input features -> f16 A operand +const uint MODE_QUANTIZE = 1u; // f16 -> E4M3 +const uint MODE_DOWNSAMPLE_FP8 = 2u; // raw f16 2x box pool -> E4M3 +const uint MODE_POST_BLEND = 3u; // 2x upsample E4 * scale + adapter E4 * scale -> f16 raw + E4M3 +const uint MODE_UPSAMPLE_RESIDUAL = 4u; // f16 projection (low res) + E4 skip * scale -> E4M3 (+ f16 raw) + +layout(push_constant) uniform Push { + uint count; // output elements (multiple of 8) + uint channels; // multiple of 8 + uint inWidth; + uint inHeight; + uint outWidth; + uint outHeight; + uint auxOffsetA; // half units in binding 4 + uint auxOffsetB; + uint dual; // also publish f16 raw output (binding 6) +} pc; + +layout(std430, binding = 0) readonly buffer In32 { vec4 in32x4[]; }; +layout(std430, binding = 1) readonly buffer In16 { uvec4 in16x8[]; }; +layout(std430, binding = 2) readonly buffer In8 { uvec2 in8x8[]; }; +layout(std430, binding = 3) readonly buffer Skip8 { uvec2 skip8x8[]; }; +layout(std430, binding = 4) readonly buffer Aux { uint16_t aux16[]; }; +layout(std430, binding = 5) writeonly buffer Out8 { uvec2 out8x8[]; }; +layout(std430, binding = 6) writeonly buffer Out16 { uvec4 out16x8[]; }; + +// Eight scale halves as f32 (aux offsets are not 16-byte aligned in general). +void auxScales(uint offset, uint channel, out float s[8]) { + [[unroll]] for (uint i = 0u; i < 8u; ++i) s[i] = float(uint16BitsToFloat16(aux16[offset + channel + i])); +} + +void unpack8(uvec4 words, out float v[8]) { + [[unroll]] for (uint i = 0u; i < 4u; ++i) { vec2 p = vec2(unpackFloat2x16(words[i])); v[2u * i] = p.x; v[2u * i + 1u] = p.y; } +} + +void unpackE4x8(uvec2 codes, out float v[8]) { + [[unroll]] for (uint i = 0u; i < 8u; ++i) v[i] = e4m3HwToF32((codes[i >> 2u] >> ((i & 3u) * 8u)) & 0xffu); +} + +// f32 values already rounded to half -> packed halves (exact) and E4M3 codes. +uvec4 packHalves8(float v[8]) { + uvec4 w; + [[unroll]] for (uint i = 0u; i < 4u; ++i) w[i] = packFloat2x16(f16vec2(v[2u * i], v[2u * i + 1u])); + return w; +} +uvec2 quantize8(uvec4 halves) { + return uvec2(uint(e4m3HwPair(unpackFloat2x16(halves.x))) | (uint(e4m3HwPair(unpackFloat2x16(halves.y))) << 16u), + uint(e4m3HwPair(unpackFloat2x16(halves.z))) | (uint(e4m3HwPair(unpackFloat2x16(halves.w))) << 16u)); +} + +void main() { + uint group = gl_GlobalInvocationID.x + gl_GlobalInvocationID.y * 65535u * 256u; // 8-channel group + if (group * 8u >= pc.count) return; + const uint groupsPerPixel = pc.channels / 8u; + const uint c = (group % groupsPerPixel) * 8u; + const uint pixel = group / groupsPerPixel; + if (MODE == MODE_F32_TO_F16) { + vec4 a = in32x4[group * 2u], b = in32x4[group * 2u + 1u]; + out16x8[group] = uvec4(packFloat2x16(f16vec2(a.xy)), packFloat2x16(f16vec2(a.zw)), packFloat2x16(f16vec2(b.xy)), + packFloat2x16(f16vec2(b.zw))); + } else if (MODE == MODE_QUANTIZE) { + out8x8[group] = quantize8(in16x8[group]); + } else if (MODE == MODE_DOWNSAMPLE_FP8) { + uint ox = pixel % pc.outWidth, oy = pixel / pc.outWidth; + uint sx = ox * 2u, sy = oy * 2u; + uvec4 result = uvec4(0u); + if (sx + 1u < pc.inWidth && sy + 1u < pc.inHeight) { + // The 2x2 pool: three add.f16x2 as (a+b)+(c+d), one mul.f16x2 by + // 0.25, then cvt.rn.satfinite.e4m3. Every intermediate is a half. + uint i00 = ((sy * pc.inWidth + sx) * pc.channels + c) / 8u; + uint i10 = ((sy * pc.inWidth + sx + 1u) * pc.channels + c) / 8u; + uint i01 = (((sy + 1u) * pc.inWidth + sx) * pc.channels + c) / 8u; + uint i11 = (((sy + 1u) * pc.inWidth + sx + 1u) * pc.channels + c) / 8u; + uvec4 w00 = in16x8[i00], w10 = in16x8[i10], w01 = in16x8[i01], w11 = in16x8[i11]; + [[unroll]] for (uint i = 0u; i < 4u; ++i) { + precise f16vec2 top = unpackFloat2x16(w00[i]) + unpackFloat2x16(w10[i]); + precise f16vec2 bottom = unpackFloat2x16(w01[i]) + unpackFloat2x16(w11[i]); + precise f16vec2 sum = top + bottom; + precise f16vec2 value = sum * float16_t(0.25); + result[i] = packFloat2x16(value); + } + } + out8x8[group] = quantize8(result); + } else if (MODE == MODE_POST_BLEND) { + uint ox = pixel % pc.outWidth, oy = pixel / pc.outWidth; + uint source = ((oy >> 1u) * pc.inWidth + (ox >> 1u)) * pc.channels + c; + float up[8], adapter[8], scaleA[8], scaleB[8], raw[8]; + unpackE4x8(in8x8[source / 8u], up); + unpackE4x8(skip8x8[group], adapter); + auxScales(pc.auxOffsetA, c, scaleA); + auxScales(pc.auxOffsetB, c, scaleB); + // learned_post_blend: mul.f16x2, mul.f16x2, add.f16x2 with the adapter + // product contracted into the final add before its half rounding. + [[unroll]] for (uint i = 0u; i < 8u; ++i) { + precise float inputValue = roundF16(up[i] * scaleA[i]); + precise float value = inputValue + adapter[i] * scaleB[i]; + raw[i] = roundF16(value); + } + uvec4 halves = packHalves8(raw); + out16x8[group] = halves; + out8x8[group] = quantize8(halves); + } else if (MODE == MODE_UPSAMPLE_RESIDUAL) { + uint ox = pixel % pc.outWidth, oy = pixel / pc.outWidth; + uint source = ((oy >> 1u) * pc.inWidth + (ox >> 1u)) * pc.channels + c; + float projected[8], skip[8], scale[8], value[8]; + unpack8(in16x8[source / 8u], projected); + unpackE4x8(skip8x8[group], skip); + auxScales(pc.auxOffsetA, c, scale); + // residualAfterMatmul + scaleResidual: round_f16(value + residual * scale). + [[unroll]] for (uint i = 0u; i < 8u; ++i) { + precise float sum = projected[i] + skip[i] * scale[i]; + value[i] = roundF16(sum); + } + uvec4 halves = packHalves8(value); + out8x8[group] = quantize8(halves); + if (pc.dual != 0u) out16x8[group] = halves; + } +} diff --git a/third_party/opendlss-nr/shaders/preprocess.comp b/third_party/opendlss-nr/shaders/preprocess.comp new file mode 100644 index 000000000..97edc1b97 --- /dev/null +++ b/third_party/opendlss-nr/shaders/preprocess.comp @@ -0,0 +1,89 @@ +#version 460 +// Input feature generation. Sixteen f32 lanes per padded pixel: +// three Box-Muller Gaussian lanes evaluated with the GPU's approximate f32 +// transcendentals, constant 1, the centered proxy +// color twice (the second copy is the history when temporal input is valid), +// and the five conditioning lanes. +#extension GL_EXT_shader_explicit_arithmetic_types : require +#extension GL_GOOGLE_include_directive : require +#include "common.glsl" + +layout(local_size_x = 8, local_size_y = 8) in; + +layout(push_constant) uniform Push { + uint fullWidth; + uint fullHeight; + uint validWidth; + uint validHeight; + uint sourceWidth; + uint sourceHeight; + uint seed; + float autoMask; // > 0 enables the auto-mask lane pair + float localTone; + float localStructure; + float skinStructure; + float style; +} pc; + +layout(std430, binding = 0) readonly buffer Source { vec4 proxy[]; }; // RGBA f32 proxy code values +layout(std430, binding = 7) writeonly buffer Features { float features[]; }; + +float hashUniform(uint value) { + uint mixed = value; + mixed = (mixed >> ((mixed >> 28u) + 4u)) ^ mixed; + mixed *= 0x108ef2d9u; + uint integer = ((mixed >> 30u) ^ (mixed >> 8u)) + 1u; + return float(integer) * uintBitsToFloat(0x33800000u); +} + +// Scalar form of the network's Box-Muller sequence (instruction order preserved: +// the approximate transcendentals make it order dependent). +vec3 gaussian3(uint x, uint y, uint seed) { + uint base = (x * 0x8da6b343u) ^ (seed * 0x9e3779b9u) ^ (y * 0xd8163841u) ^ 0x243f6a88u; + base = (base >> ((base >> 28u) + 4u)) ^ base; + base *= 0x108ef2d9u; + base = (base >> 22u) ^ base; + float u0 = hashUniform(base * 0x2c9277b5u + 0xac564b05u); + float u1 = hashUniform(base * 0xfa6dc5f9u + 0x4712a88eu); + float u2 = hashUniform(base * 0xcaa5b80du + 0x21dd796bu); + float u3 = hashUniform(base * 0x83232c31u + 0x3463e0acu); + float radius0 = sqrt(log2(u0) * uintBitsToFloat(0x3f317218u) * -2.0); + float radius1 = sqrt(log2(u2) * uintBitsToFloat(0x3f317218u) * -2.0); + float angle0 = u1 * uintBitsToFloat(0x40c90fdbu); + float angle1 = u3 * uintBitsToFloat(0x40c90fdbu); + return vec3(roundF16(radius0 * cos(angle0)), roundF16(radius0 * sin(angle0)), roundF16(radius1 * cos(angle1))); +} + +void main() { + uvec2 id = gl_GlobalInvocationID.xy; + if (id.x >= pc.fullWidth || id.y >= pc.fullHeight) return; + // Coordinates outside the valid image are mirrored, while the noise channels still hash the original + // padded coordinate. + uint sourceX = id.x < pc.validWidth ? id.x : 2u * pc.validWidth - id.x - 2u; + uint sourceY = id.y < pc.validHeight ? id.y : 2u * pc.validHeight - id.y - 2u; + uint imageX = ((2u * sourceX + 1u) * pc.sourceWidth) / (2u * pc.validWidth); + uint imageY = ((2u * sourceY + 1u) * pc.sourceHeight) / (2u * pc.validHeight); + vec4 rgba = proxy[imageY * pc.sourceWidth + imageX]; + // Native: texture sample -> cvt.rn.f16, sub.f16(0.5), mul.f16(0.125). + float r = roundF16(roundF16(roundF16(rgba.r) - 0.5) * 0.125); + float g = roundF16(roundF16(roundF16(rgba.g) - 0.5) * 0.125); + float b = roundF16(roundF16(roundF16(rgba.b) - 0.5) * 0.125); + vec3 noise = gaussian3(id.x, id.y, pc.seed); + uint base = (id.y * pc.fullWidth + id.x) * 16u; + features[base + 0u] = noise.x; + features[base + 1u] = noise.y; + features[base + 2u] = noise.z; + features[base + 3u] = 1.0; + features[base + 4u] = r; + features[base + 5u] = g; + features[base + 6u] = b; + features[base + 7u] = r; + features[base + 8u] = g; + features[base + 9u] = b; + features[base + 10u] = pc.style / 128.0; + features[base + 11u] = roundF16(pc.localTone); + features[base + 12u] = roundF16(pc.autoMask > 0.0 ? 1.0 : pc.localStructure); + features[base + 13u] = roundF16(pc.autoMask > 0.0 ? (pc.skinStructure < 0.0 ? pc.localStructure : pc.skinStructure) : -1.0); + features[base + 14u] = roundF16(pc.autoMask > 0.0 ? pc.localStructure : -1.0); + features[base + 15u] = 0.0; +} diff --git a/third_party/opendlss-nr/shaders/publish.glsl b/third_party/opendlss-nr/shaders/publish.glsl new file mode 100644 index 000000000..ce2df5fbd --- /dev/null +++ b/third_party/opendlss-nr/shaders/publish.glsl @@ -0,0 +1,49 @@ +// Accumulator publication helpers (fragment level). The coopmat2 tensor stores and the plain +// coopMatStore of 8-bit accumulators to global memory compile to scattered narrow stores that +// cost ~8000 SM cycles per 16x32 tile (measured in gemm_mlp); these macros assemble the row tile in +// shared memory as 32-bit words and store whole 16-byte words. +// +// Accumulator layout (verified on Ada): lane (g = l>>2, t = l&3) holds rows g and +// g+8; element j of a row half is column 8*(j>>1) + 2t + (j&1). Requires GL_KHR_shader_subgroup_shuffle. +#ifndef DLSS_PUBLISH_GLSL +#define DLSS_PUBLISH_GLSL + +// E4 codes of a NaN-free pair: the saturating hardware conversion (= common.glsl e4m3HwPair without the NaN +// guard, for accumulators whose NaNs the caller has already removed). +uint16_t e4m3PairFast(f16vec2 value) { + fe4m3vec2 converted; + saturatedConvertEXT(converted, value); + u8vec2 codes = floate4m3BitsToUintEXT(converted); + return uint16_t(uint(codes.x) | (uint(codes.y) << 8u)); +} + +// 16 x N f16 accumulator `acc` -> E4 row tile of N/4 32-bit words per row in `words32` at `base` +// (NaN -> 0). Lanes t, t^1 exchange one pair per column group so the even lane assembles the word of +// row g and the odd lane that of row g+8. Follow with subgroupBarrier() before reading the tile. +#define PUBLISH_E4_TILE(acc, N, words32, base, g, t) \ + { \ + [[unroll]] for (uint j = 0u; j < (N) / 8u; ++j) { \ + f16vec2 v0 = f16vec2(acc[2u * j], acc[2u * j + 1u]); \ + f16vec2 v1 = f16vec2(acc[(N) / 4u + 2u * j], acc[(N) / 4u + 2u * j + 1u]); \ + uint c0 = uint(e4m3PairFast(mix(v0, f16vec2(0.0), isnan(v0)))); \ + uint c1 = uint(e4m3PairFast(mix(v1, f16vec2(0.0), isnan(v1)))); \ + bool odd = ((t) & 1u) != 0u; \ + uint recv = subgroupShuffleXor(odd ? c0 : c1, 1u); \ + uint word = odd ? (recv | (c1 << 16u)) : (c0 | (recv << 16u)); \ + uint row = odd ? (g) + 8u : (g); \ + words32[(base) + row * ((N) / 4u) + 2u * j + ((t) >> 1u)] = word; \ + } \ + } + +// 16 x N f16 accumulator -> f16 row tile of N/2 32-bit words per row (pairs are already words). +#define PUBLISH_F16_TILE(acc, N, words32, base, g, t) \ + { \ + [[unroll]] for (uint h = 0u; h < 2u; ++h) { \ + [[unroll]] for (uint j = 0u; j < (N) / 8u; ++j) { \ + words32[(base) + ((g) + 8u * h) * ((N) / 2u) + 4u * j + (t)] = \ + packFloat2x16(f16vec2(acc[(N) / 4u * h + 2u * j], acc[(N) / 4u * h + 2u * j + 1u])); \ + } \ + } \ + } + +#endif diff --git a/third_party/opendlss-nr/shaders/qkv_attention.comp b/third_party/opendlss-nr/shaders/qkv_attention.comp new file mode 100644 index 000000000..705951d62 --- /dev/null +++ b/third_party/opendlss-nr/shaders/qkv_attention.comp @@ -0,0 +1,245 @@ +#version 460 +// Fused QKV projection + cosine normalization + 8x8 window attention for one +// (window, head): replaces the raw-half QKV GEMM (whose f16 output round trip +// through memory was the largest activation traffic of the multi-head stages) +// and window_attention_fused.comp. +// +// (fragment level, VK_NV_cooperative_matrix2): the window's token rows of the +// E4 FFN publication come straight from the image tensor per k32 step (constant +// clamping zeroes tokens outside the image); the head's 96 weight columns are +// staged in shared memory once per step (double buffered, one barrier); q, k, v +// accumulate as three 16x32 fragments; normalization and the specified softmax run +// on the accumulator elements (see fused_block32.comp for the layout argument); +// K/V rows are the only per-window shared data. +#extension GL_EXT_float_e4m3 : require +#extension GL_EXT_shader_explicit_arithmetic_types : require +#extension GL_KHR_memory_scope_semantics : require +#extension GL_KHR_cooperative_matrix : require +#extension GL_NV_cooperative_matrix2 : require +#extension GL_KHR_shader_subgroup_basic : require +#extension GL_KHR_shader_subgroup_shuffle : require +#extension GL_EXT_control_flow_attributes : require +#extension GL_GOOGLE_include_directive : require +#define DLSS_E4M3_HW 1 +#include "common.glsl" +#include "publish.glsl" + +layout(local_size_x = 128) in; // four subgroups, one 16-token row tile of the window each +const uint THREADS = 128u; + +layout(constant_id = 0) const uint K = 64; // channels = heads * 32 + +layout(push_constant) uniform Push { + uint width; + uint height; + uint channels; // heads * 32 (= K) + uint heads; + uint shiftX; + uint shiftY; + uint windowsX; + uint windowCount; + uint scaleWordOffset; // per-head f32 learned scales (words in binding 4) + uint Nmatrix; // 3 * channels: weight columns per k32 tile +} pc; + +layout(std430, binding = 0) readonly buffer Input { uvec4 in4[]; }; // E4 [tokens][channels] as 16-byte words +layout(std430, binding = 1) readonly buffer Weights { uvec4 w4[]; }; // E4 [K/32][Nmatrix][32], head-major columns +layout(std430, binding = 2) readonly buffer Prior { float16_t prior[]; }; // [heads][64][64] f16 +layout(std430, binding = 4) readonly buffer Aux { uint aux32[]; }; +layout(std430, binding = 5) writeonly buffer Attended { uvec4 attended16[]; }; // E4 [tokens][channels] as 16-byte words + + +// Shared (18.5 KB): one K=64 chunk of operands - A [64 tokens][64 k] E4 (256 words) and the head's 96 weight +// columns re-laid out n-major [96 n][64 k] (384 words); kv16: Kp [64][32] then Vp [64][32] E4. +shared uvec4 stage[64 * 5 + 96 * 5]; // 5-word (80-byte) rows: bank-conflict-free fragment loads +shared uint16_t kv16[2048]; +shared uint tile32[4 * 16 * 8]; // per subgroup: the attended row tile as 32-bit words [16 rows][8] + +#define ACC16x32 coopmat +#define ACC16x64 coopmat +#define A16x32 coopmat +#define A16x64 coopmat +#define B32x32 coopmat +#define B64x32k coopmat +#define B32x64 coopmat +#define B64x32 coopmat + +uint tiledToken(uint token) { // natural -> physical + uint x = token & 7u, y = token >> 3u; + return (y >> 2u) * 32u + (x >> 2u) * 16u + (y & 3u) * 4u + (x & 3u); +} + +uint expWeightPair(uint scoreBits) { + precise vec2 affine32 = fma(vec2(unpackFloat2x16(scoreBits)), vec2(0.044921875), vec2(1.30078125)); + f16vec2 affine = clamp(f16vec2(affine32), f16vec2(1.03125), f16vec2(1.5693359375)); + return ((packFloat2x16(affine) << 5u) & 0xffe0ffe0u) ^ 0x80008000u; +} + +float16_t nanToZero(const in uint row, const in uint col, const in float16_t value) { return isnan(value) ? float16_t(0.0) : value; } + +// Cosine normalization in the accumulator layout (reference association order; see fused_block32.comp). +void normalizeInPlace(inout ACC16x32 m, const in float16_t scale, const in bool applyScale) { + [[unroll]] for (uint h = 0u; h < 2u; ++h) { + const uint b = 8u * h; + f16vec2 p0 = f16vec2(m[b + 0u], m[b + 1u]), p1 = f16vec2(m[b + 2u], m[b + 3u]); + f16vec2 p2 = f16vec2(m[b + 4u], m[b + 5u]), p3 = f16vec2(m[b + 6u], m[b + 7u]); + precise f16vec2 hs0 = p2 * p2; + precise f16vec2 r0 = fma(p0, p0, hs0); + precise f16vec2 hs1 = p3 * p3; + precise f16vec2 r1 = fma(p1, p1, hs1); + precise f16vec2 s8 = r0 + r1; + f16vec2 s8o = unpackFloat2x16(subgroupShuffleXor(packFloat2x16(s8), 2u)); + precise f16vec2 s4 = s8 + s8o; + f16vec2 s4o = unpackFloat2x16(subgroupShuffleXor(packFloat2x16(s4), 1u)); + precise f16vec2 s2 = s4 + s4o; + precise float16_t s1 = s2.x + s2.y; + float16_t norm = float16_t(inversesqrt(float(s1))); + [[unroll]] for (uint i = 0u; i < 8u; ++i) { + precise float16_t n = m[b + i] * norm; + float16_t value = n; + if (applyScale) { precise float16_t ns = n * scale; value = ns; } + m[b + i] = isnan(value) ? float16_t(0.0) : value; + } + } +} + +void publishRows(const in ACC16x32 m, const in uint slotBase, const in uint rowBase, const in uint t, const in uint g, + const in int windowX, const in int windowY) { + [[unroll]] for (uint h = 0u; h < 2u; ++h) { + uint token = rowBase + g + 8u * h; + int x = windowX + int(token & 7u), y = windowY + int(token >> 3u); + bool valid = x >= 0 && y >= 0 && x < int(pc.width) && y < int(pc.height); + uint row = slotBase + tiledToken(token) * 16u; + [[unroll]] for (uint j = 0u; j < 4u; ++j) { + uint16_t codes = e4m3HwPair(f16vec2(m[8u * h + 2u * j], m[8u * h + 2u * j + 1u])); + kv16[row + 4u * j + t] = valid ? codes : uint16_t(0u); + } + } +} + +void main() { + const uint thread = gl_LocalInvocationID.x; + const uint q = gl_SubgroupID; // row tile: tokens 16q .. 16q + 15 + const uint lane = gl_SubgroupInvocationID; + const uint g = lane >> 2u, t = lane & 3u; + const uint head = gl_WorkGroupID.x; + const uint window = gl_WorkGroupID.y + gl_WorkGroupID.z * 65535u; + if (window >= pc.windowCount) return; + const int windowX = int((window % pc.windowsX) * 8u) - int(pc.shiftX); + const int windowY = int((window / pc.windowsX) * 8u) - int(pc.shiftY); + const uint rowBase = q * 16u; + const uint KP = 0u, VP = 1024u; + + // Image tensor [height][width][channels] E4; this subgroup's 16 tokens are rows windowY + 2q.. (+2), pixels windowX.. (+8). + tensorLayoutNV<3, gl_CooperativeMatrixClampModeConstantNV> image = createTensorLayoutNV(3, gl_CooperativeMatrixClampModeConstantNV); + image = setTensorLayoutDimensionNV(image, pc.height, pc.width, pc.channels); + image = setTensorLayoutStrideNV(image, pc.width * pc.channels, pc.channels, 1); + + // The attention prior (learned 64x64 bias per head) and the head scale: independent loads issued first. + ACC16x64 s; + coopMatLoad(s, prior, head * 4096u + rowBase * 64u, 64u, gl_CooperativeMatrixLayoutRowMajor); + const float16_t scale = float16_t(uintBitsToFloat(aux32[pc.scaleWordOffset + head])); + + // ---- q, k, v projections in K = 64 chunks; A rows gathered by token (zero outside the image) and the + // head's 96 weight columns (re-laid out n-major) staged per chunk with plain 16-byte loads. + ACC16x32 qa = ACC16x32(0.0), ka = ACC16x32(0.0), va = ACC16x32(0.0); + const uint bColumnBase = head * 96u; + const uint chunks = K / 64u; + const uint rowWords = K / 16u; + // Staging words per thread: A word idx < 256 -> token idx >> 2, word idx & 3 of the 64-byte chunk row (zero + // outside the image); B word idx < 384 -> n = idx >> 2, word w = idx & 3: source word (chunk * 2 + (w >> 1)) * + // Nmatrix * 2 + (bColumnBase + n) * 2 + (w & 1), destination 320 + n * 5 + w. + const uint A_PER = (256u + THREADS - 1u) / THREADS, B_PER = (384u + THREADS - 1u) / THREADS; + uint aSrc[A_PER], aDst[A_PER]; bool aValid[A_PER]; + [[unroll]] for (uint i = 0u; i < A_PER; ++i) { + uint idx = thread + THREADS * i; + uint token = (idx >> 2u) & 63u, w = idx & 3u; + int xA = windowX + int(token & 7u), yA = windowY + int(token >> 3u); + aValid[i] = idx < 256u && xA >= 0 && yA >= 0 && xA < int(pc.width) && yA < int(pc.height); + aSrc[i] = aValid[i] ? (uint(yA) * pc.width + uint(xA)) * rowWords + w : 0u; + aDst[i] = token * 5u + w; + } + uint bSrc[B_PER], bDst[B_PER]; + [[unroll]] for (uint i = 0u; i < B_PER; ++i) { + uint idx = min(thread + THREADS * i, 383u); + uint n = idx >> 2u, w = idx & 3u; + bSrc[i] = (w >> 1u) * pc.Nmatrix * 2u + (bColumnBase + n) * 2u + (w & 1u); + bDst[i] = 320u + n * 5u + w; + } + // One chunk of operands prefetched into registers: the next chunk's loads are issued before this chunk's + // barrier and multiplies, so the L2 latency overlaps them. + uvec4 ra[A_PER], rb[B_PER]; + [[unroll]] for (uint i = 0u; i < A_PER; ++i) ra[i] = aValid[i] ? in4[aSrc[i]] : uvec4(0u); + [[unroll]] for (uint i = 0u; i < B_PER; ++i) rb[i] = w4[bSrc[i]]; + for (uint c = 0u; c < chunks; ++c) { + [[unroll]] for (uint i = 0u; i < A_PER; ++i) if (thread + THREADS * i < 256u) stage[aDst[i]] = ra[i]; + [[unroll]] for (uint i = 0u; i < B_PER; ++i) if (thread + THREADS * i < 384u) stage[bDst[i]] = rb[i]; + if (c + 1u < chunks) { + [[unroll]] for (uint i = 0u; i < A_PER; ++i) ra[i] = aValid[i] ? in4[aSrc[i] + (c + 1u) * 4u] : uvec4(0u); + [[unroll]] for (uint i = 0u; i < B_PER; ++i) rb[i] = w4[bSrc[i] + (c + 1u) * 2u * pc.Nmatrix * 2u]; + } + barrier(); + A16x64 a; coopMatLoad(a, stage, rowBase * 5u, 5u, gl_CooperativeMatrixLayoutRowMajor); + B64x32k wq; coopMatLoad(wq, stage, 320u, 5u, gl_CooperativeMatrixLayoutColumnMajor); // n 0..31 (q) + B64x32k wk; coopMatLoad(wk, stage, 320u + 32u * 5u, 5u, gl_CooperativeMatrixLayoutColumnMajor); // n 32..63 (k) + B64x32k wv; coopMatLoad(wv, stage, 320u + 64u * 5u, 5u, gl_CooperativeMatrixLayoutColumnMajor); // n 64..95 (v) + qa = coopMatMulAdd(a, wq, qa); + ka = coopMatMulAdd(a, wk, ka); + va = coopMatMulAdd(a, wv, va); + barrier(); // fragment loads done before the next chunk overwrites the stage + } + normalizeInPlace(qa, scale, true); + normalizeInPlace(ka, scale, false); + A16x32 mq = A16x32(qa); + publishRows(ka, KP, rowBase, t, g, windowX, windowY); + publishRows(va, VP, rowBase, t, g, windowX, windowY); + barrier(); + + // ---- Attention in registers. + B32x64 kp; coopMatLoad(kp, kv16, KP, 16u, gl_CooperativeMatrixLayoutColumnMajor); + s = coopMatMulAdd(mq, kp, s); + ACC16x64 wAcc = ACC16x64(0.0); + [[unroll]] for (uint h = 0u; h < 2u; ++h) { + uint e[8]; + [[unroll]] for (uint m = 0u; m < 8u; ++m) e[m] = expWeightPair(packFloat2x16(f16vec2(s[16u * h + 2u * m], s[16u * h + 2u * m + 1u]))); + f16vec2 bp[4]; + [[unroll]] for (uint j = 0u; j < 4u; ++j) { precise f16vec2 bsum = unpackFloat2x16(e[2u * j]) + unpackFloat2x16(e[2u * j + 1u]); bp[j] = bsum; } + precise f16vec2 t01 = bp[0] + bp[1]; + precise f16vec2 t012 = t01 + bp[2]; + precise f16vec2 tp = t012 + bp[3]; + uint tpBits = packFloat2x16(tp); + uint quad = lane & ~3u; + f16vec2 t0 = unpackFloat2x16(subgroupShuffle(tpBits, quad)), t1 = unpackFloat2x16(subgroupShuffle(tpBits, quad + 1u)); + f16vec2 t2 = unpackFloat2x16(subgroupShuffle(tpBits, quad + 2u)), t3 = unpackFloat2x16(subgroupShuffle(tpBits, quad + 3u)); + precise float16_t e01 = t0.x + t1.x; + precise float16_t e012 = e01 + t2.x; + precise float16_t even = e012 + t3.x; + precise float16_t o01 = t0.y + t1.y; + precise float16_t o012 = o01 + t2.y; + precise float16_t odd = o012 + t3.y; + precise float16_t total = even + odd; + float16_t reciprocal = float16_t(1.0 / float(total)); + [[unroll]] for (uint m = 0u; m < 8u; ++m) { + precise f16vec2 w = unpackFloat2x16(e[m]) * reciprocal; + wAcc[16u * h + 2u * m] = w.x; + wAcc[16u * h + 2u * m + 1u] = w.y; + } + } + A16x64 p = A16x64(wAcc); + B64x32 vp; coopMatLoad(vp, kv16, VP, 16u, gl_CooperativeMatrixLayoutRowMajor); + ACC16x32 o = ACC16x32(0.0); + o = coopMatMulAdd(p, vp, o); + { + // 16 tokens x 32 E4: the tile as 32-bit words in shared memory, then one 16-byte word per lane. + const uint tileBase = q * 128u; + PUBLISH_E4_TILE(o, 32u, tile32, tileBase, g, t) + subgroupBarrier(); + const uint r = lane >> 1u, part = lane & 1u; + const uint tok = rowBase + r; + const int x = windowX + int(tok & 7u), y = windowY + int(tok >> 3u); + const uint base = tileBase + r * 8u + part * 4u; + if (x >= 0 && y >= 0 && x < int(pc.width) && y < int(pc.height)) + attended16[(uint(y) * pc.width + uint(x)) * (pc.channels / 16u) + head * 2u + part] = + uvec4(tile32[base], tile32[base + 1u], tile32[base + 2u], tile32[base + 3u]); + } +} diff --git a/third_party/opendlss-nr/shaders/window_attend.comp b/third_party/opendlss-nr/shaders/window_attend.comp new file mode 100644 index 000000000..1a137a5d9 --- /dev/null +++ b/third_party/opendlss-nr/shaders/window_attend.comp @@ -0,0 +1,170 @@ +#version 460 +// Fused 8x8 window cosine attention (exact Ada FP8 MMA, tiled 4x4 token order for the +// learned prior and the value MMA, the network's softmax reduction order). +// +// One workgroup = one (window, head). Four subgroups. +// S = Q K^T + prior 16 MMAs (16x16x32, C = learned prior tile) +// w = expWeight(S) per element, FP16 bit approximation +// p = fp8(w * f16(1/sum)) the specified softmax order, E4M3 weights +// O = p V 16 MMAs (16x16x32, two k32 steps over 64 keys) +// Keys are kept in physical (tiled) order p = tile*16 + within so the +// prior, the softmax tree and the value K dimension all index the same way. +#extension GL_EXT_float_e4m3 : require +#extension GL_EXT_shader_explicit_arithmetic_types : require +#extension GL_KHR_memory_scope_semantics : require +#extension GL_KHR_cooperative_matrix : require +#extension GL_KHR_shader_subgroup_basic : require +#extension GL_GOOGLE_include_directive : require +#include "common.glsl" + +layout(local_size_x = 128) in; + +layout(push_constant) uniform Push { + uint width; + uint height; + uint channels; // heads * 32 + uint heads; + uint shiftX; // window origin offset (0 or 4) + uint shiftY; + uint windowsX; // ceil((width + shiftX) / 8) + uint windowCount; +} pc; + +layout(std430, binding = 0) readonly buffer Normalized { uint8_t qkv[]; }; // E4M3 [tokens][channels*3] +layout(std430, binding = 1) readonly buffer Prior { float16_t prior[]; }; // [heads][64 query][64 physical key] +layout(std430, binding = 5) writeonly buffer Attended { uint8_t attended[]; }; // E4M3 [tokens][channels] + +shared uint8_t qs[64 * 32]; // [query][component] +shared uint8_t ks[64 * 32]; // [physical key][component] +shared uint8_t vs[64 * 32]; // [physical key][component] +shared float16_t priors[64 * 64]; +shared float16_t scores[64 * 64]; // [query][physical key] +shared uint8_t weights[64 * 64]; // E4M3 [query][physical key] +shared float16_t outputs[64 * 32]; + +uint inverseTiledToken(uint token) { + uint tile = token >> 4u, within = token & 15u; + uint x = (tile & 1u) * 4u + (within & 3u); + uint y = (tile >> 1u) * 4u + (within >> 2u); + return y * 8u + x; +} + +// the exponential approximation: packed FP16 affine + exponent-field remap (the network's exponential approximation). +float16_t expWeight(float16_t score) { + precise float affine32 = fma(float(score), 0.044921875, 1.30078125); + float16_t affine = clamp(float16_t(affine32), float16_t(1.03125), float16_t(1.5693359375)); + uint bits = f16Bits(affine); + uint exponentialBits = ((bits << 5u) + 0x8000u) & 0xffffu; + return f16FromBits(exponentialBits); +} + +// the specified softmax reduction (keys in physical order): eight 8-key fragments reduced +// per lane pair, then the four column pairs, then even/odd halves. +float16_t softmaxPair(uint row, uint pair, uint parity) { + uint key = pair * 2u + parity; + precise float16_t blocks01 = scores[row * 64u + key] + scores[row * 64u + key + 8u]; + precise float16_t blocks23 = scores[row * 64u + key + 16u] + scores[row * 64u + key + 24u]; + precise float16_t blocks45 = scores[row * 64u + key + 32u] + scores[row * 64u + key + 40u]; + precise float16_t blocks67 = scores[row * 64u + key + 48u] + scores[row * 64u + key + 56u]; + precise float16_t a = blocks01 + blocks23; + precise float16_t b = a + blocks45; + return b + blocks67; +} + +float16_t softmaxSum(uint row) { + precise float16_t e0 = softmaxPair(row, 0u, 0u) + softmaxPair(row, 1u, 0u); + precise float16_t e1 = e0 + softmaxPair(row, 2u, 0u); + precise float16_t even = e1 + softmaxPair(row, 3u, 0u); + precise float16_t o0 = softmaxPair(row, 0u, 1u) + softmaxPair(row, 1u, 1u); + precise float16_t o1 = o0 + softmaxPair(row, 2u, 1u); + precise float16_t odd = o1 + softmaxPair(row, 3u, 1u); + return even + odd; +} + +void main() { + const uint thread = gl_LocalInvocationID.x; + const uint subgroup = gl_SubgroupID; + const uint head = gl_WorkGroupID.x; + const uint window = gl_WorkGroupID.y + gl_WorkGroupID.z * 65535u; + if (window >= pc.windowCount) return; + const int windowX = int((window % pc.windowsX) * 8u) - int(pc.shiftX); + const int windowY = int((window / pc.windowsX) * 8u) - int(pc.shiftY); + const uint stride3 = pc.channels * 3u; + const uint headBase = head * 96u; + + // Stage Q (query order), K/V (physical key order) and the prior. + for (uint i = thread; i < 64u * 32u; i += 128u) { + uint token = i >> 5u, component = i & 31u; + int qx = windowX + int(token & 7u), qy = windowY + int(token >> 3u); + uint8_t q = uint8_t(0); + if (qx >= 0 && qy >= 0 && qx < int(pc.width) && qy < int(pc.height)) { + q = qkv[(uint(qy) * pc.width + uint(qx)) * stride3 + headBase + component]; + } + qs[i] = q; + uint keyLocal = inverseTiledToken(token); + int kx = windowX + int(keyLocal & 7u), ky = windowY + int(keyLocal >> 3u); + uint8_t k = uint8_t(0), v = uint8_t(0); + if (kx >= 0 && ky >= 0 && kx < int(pc.width) && ky < int(pc.height)) { + uint keyBase = (uint(ky) * pc.width + uint(kx)) * stride3 + headBase; + k = qkv[keyBase + 32u + component]; + v = qkv[keyBase + 64u + component]; + } + ks[i] = k; + vs[i] = v; + } + for (uint i = thread; i < 64u * 64u; i += 128u) priors[i] = prior[head * 4096u + i]; + barrier(); + + // S = Q K^T with the learned prior as the incoming FP16 accumulator. + for (uint tile = subgroup; tile < 16u; tile += 4u) { + uint qTile = tile >> 2u, kTile = tile & 3u; + coopmat ma; + coopMatLoad(ma, qs, qTile * 16u * 32u, 32u, gl_CooperativeMatrixLayoutRowMajor); + coopmat mb; + coopMatLoad(mb, ks, kTile * 16u * 32u, 32u, gl_CooperativeMatrixLayoutColumnMajor); + coopmat mc; + coopMatLoad(mc, priors, qTile * 16u * 64u + kTile * 16u, 64u, gl_CooperativeMatrixLayoutRowMajor); + mc = coopMatMulAdd(ma, mb, mc); + coopMatStore(mc, scores, qTile * 16u * 64u + kTile * 16u, 64u, gl_CooperativeMatrixLayoutRowMajor); + } + barrier(); + + // Exponential weights, then the specified reduction, reciprocal and E4M3 publication. + for (uint i = thread; i < 64u * 64u; i += 128u) scores[i] = expWeight(scores[i]); + barrier(); + if (thread < 64u) { + uint row = thread; + float16_t total = softmaxSum(row); + float16_t reciprocal = float16_t(1.0 / float(total)); + for (uint key = 0u; key < 64u; ++key) { + precise float16_t normalized = scores[row * 64u + key] * reciprocal; + weights[row * 64u + key] = uint8_t(e4m3CodeFromF16Bits(f16Bits(normalized))); + } + } + barrier(); + + // O = P V over the 64 physical keys as two k32 steps (four F13 groups in + // tile order 0,1,2,3), FP16 accumulation from zero. + for (uint tile = subgroup; tile < 8u; tile += 4u) { + uint qTile = tile >> 1u, cTile = tile & 1u; + coopmat mc = + coopmat(0.0); + for (uint kb = 0u; kb < 64u; kb += 32u) { + coopmat ma; + coopMatLoad(ma, weights, qTile * 16u * 64u + kb, 64u, gl_CooperativeMatrixLayoutRowMajor); + coopmat mb; + coopMatLoad(mb, vs, kb * 32u + cTile * 16u, 32u, gl_CooperativeMatrixLayoutRowMajor); + mc = coopMatMulAdd(ma, mb, mc); + } + coopMatStore(mc, outputs, qTile * 16u * 32u + cTile * 16u, 32u, gl_CooperativeMatrixLayoutRowMajor); + } + barrier(); + + for (uint i = thread; i < 64u * 32u; i += 128u) { + uint token = i >> 5u, component = i & 31u; + int qx = windowX + int(token & 7u), qy = windowY + int(token >> 3u); + if (qx < 0 || qy < 0 || qx >= int(pc.width) || qy >= int(pc.height)) continue; + uint index = (uint(qy) * pc.width + uint(qx)) * pc.channels + head * 32u + component; + attended[index] = uint8_t(e4m3CodeFromF16Bits(f16Bits(outputs[i]))); + } +} diff --git a/third_party/opendlss-nr/shaders/window_normalize.comp b/third_party/opendlss-nr/shaders/window_normalize.comp new file mode 100644 index 000000000..1d04d5bf4 --- /dev/null +++ b/third_party/opendlss-nr/shaders/window_normalize.comp @@ -0,0 +1,73 @@ +#version 460 +// Cosine-attention Q/K normalization for the fused Swin blocks +// (the network's normalization order). +// One thread per (token, head); the square sums use the specified half +// reduction order: fma(low, low, f16(high*high)) for the 16 pairs, then a +// stride 8/4/2/1 tree, every add published as FP16. +#extension GL_EXT_shader_explicit_arithmetic_types : require +#extension GL_GOOGLE_include_directive : require +#include "common.glsl" + +layout(local_size_x = 256) in; + +layout(push_constant) uniform Push { + uint tokens; + uint heads; + uint channels; // heads * 32 + uint scaleWordOffset; // per-head f32 learned scale, in 32-bit words within binding 4 +} pc; + +layout(std430, binding = 1) readonly buffer Qkv { float16_t qkv[]; }; // [tokens][channels*3] raw half +layout(std430, binding = 4) readonly buffer Aux { uint aux32[]; }; +layout(std430, binding = 5) writeonly buffer Normalized { uint8_t normalized[]; }; // E4M3 [tokens][channels*3] + +float16_t treeSum16(float16_t r[16]) { + // reduction[c] += reduction[c + stride] for stride 8, 4, 2, 1. + precise float16_t s8[8]; + for (uint c = 0u; c < 8u; ++c) s8[c] = r[c] + r[c + 8u]; + precise float16_t s4[4]; + for (uint c = 0u; c < 4u; ++c) s4[c] = s8[c] + s8[c + 4u]; + precise float16_t s2[2]; + s2[0] = s4[0] + s4[2]; + s2[1] = s4[1] + s4[3]; + return s2[0] + s2[1]; +} + +void main() { + uint id = gl_GlobalInvocationID.x + gl_GlobalInvocationID.y * 65535u * 256u; + if (id >= pc.tokens * pc.heads) return; + uint token = id / pc.heads; + uint head = id % pc.heads; + // Native fused-Swin QKV weights are head-major: q, k, v of one head are + // three consecutive 32-channel groups. + uint base = token * pc.channels * 3u + head * 96u; + + float16_t q[32]; + float16_t k[32]; + for (uint c = 0u; c < 32u; ++c) { + q[c] = qkv[base + c]; + k[c] = qkv[base + 32u + c]; + } + float16_t r[16]; + for (uint c = 0u; c < 16u; ++c) { + precise float16_t highSquare = q[c + 16u] * q[c + 16u]; + r[c] = fma(q[c], q[c], highSquare); + } + float16_t qSum = treeSum16(r); + for (uint c = 0u; c < 16u; ++c) { + precise float16_t highSquare = k[c + 16u] * k[c + 16u]; + r[c] = fma(k[c], k[c], highSquare); + } + float16_t kSum = treeSum16(r); + float16_t qNorm = float16_t(inversesqrt(float(qSum))); + float16_t kNorm = float16_t(inversesqrt(float(kSum))); + float16_t scale = float16_t(uintBitsToFloat(aux32[pc.scaleWordOffset + head])); + for (uint c = 0u; c < 32u; ++c) { + precise float16_t nq = q[c] * qNorm; + precise float16_t nqs = nq * scale; + precise float16_t nk = k[c] * kNorm; + normalized[base + c] = uint8_t(e4m3CodeFromF16Bits(f16Bits(nqs))); + normalized[base + 32u + c] = uint8_t(e4m3CodeFromF16Bits(f16Bits(nk))); + normalized[base + 64u + c] = uint8_t(e4m3CodeFromF16Bits(f16Bits(qkv[base + 64u + c]))); + } +} diff --git a/third_party/opendlss-nr/src/json.h b/third_party/opendlss-nr/src/json.h new file mode 100644 index 000000000..169138fb0 --- /dev/null +++ b/third_party/opendlss-nr/src/json.h @@ -0,0 +1,133 @@ +// Tiny read-only JSON parser: enough for the NR/SR manifests and fixtures. +#pragma once +#include +#include +#include +#include +#include +#include + +namespace json { + +struct Value { + enum Kind { Null, Bool, Number, String, Array, Object } kind = Null; + bool boolean = false; + double number = 0; + std::string string; + std::vector array; + std::map object; + + const Value& operator[](const std::string& key) const { + auto it = object.find(key); + if (it == object.end()) throw std::runtime_error("missing JSON key " + key); + return it->second; + } + const Value& operator[](size_t index) const { + if (index >= array.size()) throw std::runtime_error("JSON index out of range"); + return array[index]; + } + bool has(const std::string& key) const { return object.count(key) != 0; } + int64_t integer() const { return (int64_t)number; } + const std::string& str() const { return string; } + size_t size() const { return kind == Array ? array.size() : object.size(); } +}; + +class Parser { + public: + explicit Parser(const std::string& text) : text_(text) {} + Value parse() { + Value value = parseValue(); + skipSpace(); + if (position_ != text_.size()) fail("trailing characters"); + return value; + } + + private: + void fail(const char* what) { throw std::runtime_error(std::string("JSON: ") + what + " at " + std::to_string(position_)); } + void skipSpace() { while (position_ < text_.size() && isspace((unsigned char)text_[position_])) ++position_; } + char peek() { skipSpace(); return position_ < text_.size() ? text_[position_] : '\0'; } + void expect(char c) { if (peek() != c) fail("unexpected character"); ++position_; } + Value parseValue() { + char c = peek(); + Value value; + if (c == '{') { + value.kind = Value::Object; + ++position_; + if (peek() == '}') { ++position_; return value; } + while (true) { + std::string key = parseString(); + expect(':'); + value.object[key] = parseValue(); + char next = peek(); + ++position_; + if (next == '}') break; + if (next != ',') fail("expected , or }"); + } + } else if (c == '[') { + value.kind = Value::Array; + ++position_; + if (peek() == ']') { ++position_; return value; } + while (true) { + value.array.push_back(parseValue()); + char next = peek(); + ++position_; + if (next == ']') break; + if (next != ',') fail("expected , or ]"); + } + } else if (c == '"') { + value.kind = Value::String; + value.string = parseString(); + } else if (c == 't' || c == 'f') { + value.kind = Value::Bool; + value.boolean = c == 't'; + position_ += value.boolean ? 4 : 5; + } else if (c == 'n') { + position_ += 4; + } else { + value.kind = Value::Number; + const char* start = text_.c_str() + position_; + char* end = nullptr; + value.number = strtod(start, &end); + if (end == start) fail("bad number"); + position_ += (size_t)(end - start); + } + return value; + } + std::string parseString() { + expect('"'); + std::string result; + while (position_ < text_.size()) { + char c = text_[position_++]; + if (c == '"') return result; + if (c == '\\') { + char escape = text_[position_++]; + switch (escape) { + case 'n': result += '\n'; break; + case 't': result += '\t'; break; + case 'r': result += '\r'; break; + case 'b': result += '\b'; break; + case 'f': result += '\f'; break; + case 'u': { + unsigned code = (unsigned)strtoul(text_.substr(position_, 4).c_str(), nullptr, 16); + position_ += 4; + if (code < 0x80) result += (char)code; + else if (code < 0x800) { result += (char)(0xc0 | (code >> 6)); result += (char)(0x80 | (code & 0x3f)); } + else { result += (char)(0xe0 | (code >> 12)); result += (char)(0x80 | ((code >> 6) & 0x3f)); result += (char)(0x80 | (code & 0x3f)); } + break; + } + default: result += escape; + } + } else { + result += c; + } + } + fail("unterminated string"); + return result; + } + const std::string& text_; + size_t position_ = 0; +}; + +inline Value parse(const std::string& text) { return Parser(text).parse(); } + +} // namespace json diff --git a/third_party/opendlss-nr/src/kernels.cpp b/third_party/opendlss-nr/src/kernels.cpp new file mode 100644 index 000000000..62bb8c3c4 --- /dev/null +++ b/third_party/opendlss-nr/src/kernels.cpp @@ -0,0 +1,1030 @@ +#include "kernels.h" + +#include +#include + +#include +#include + +namespace nr { + +namespace { +constexpr uint32_t F_RESIDUAL = 1, F_SCALE_RESIDUAL = 2, F_SILU = 8, F_QUANTIZE = 16, + F_DUAL = 32, F_RESIDUAL_E4 = 64, F_BROADCAST_INPUT = 128, F_OUT_F32 = 256; + +// Workgroup shape for the GLSL FP8 GEMM: BM = 16 * subgroups rows, BN = 16 * tiles columns. Take the widest +// column tile that still fills the GPU; below that, the shape that comes closest. Wider tiles beat more +// workgroups (they amortize the staged K64 steps), so "fills" is one and a half workgroups per SM, measured. +// The shape changes no arithmetic: every output element sums its K in the same order whatever the tiling. +void chooseGemmShape(uint32_t N, uint32_t rows, uint32_t batches, uint32_t smCount, uint32_t& subgroups, uint32_t& tiles) { + if (N % 16) throw std::runtime_error("GEMM N must be a multiple of 16: " + std::to_string(N)); + constexpr uint32_t maxTiles = 8u, maxSubgroups = 4u; + const uint32_t minGroups = smCount * 3 / 2; + uint32_t bestGroups = 0; + subgroups = 4; tiles = 1; + for (uint32_t sg : {8u, 4u}) { + if (sg > maxSubgroups) continue; + uint32_t rowGroups = (rows + 16 * sg - 1) / (16 * sg); + for (uint32_t t : {8u, 6u, 4u, 3u, 2u, 1u}) { + if (t > maxTiles || N % (t * 16) != 0) continue; + uint32_t workgroups = batches * (N / (t * 16)) * rowGroups; + if (workgroups >= minGroups) { subgroups = sg; tiles = t; return; } + if (workgroups > bestGroups) { bestGroups = workgroups; subgroups = sg; tiles = t; } + } + } +} + +void check(bool condition, const char* message) { + if (!condition) throw std::runtime_error(message); +} +} // namespace + +Kernels::Kernels(vk::Context& context, const std::string& shaderDirectory) : context_(context) { + ptxDirectory_ = getenv("DLSS5VK_PTX_DIR") ? getenv("DLSS5VK_PTX_DIR") : shaderDirectory + "/../ptx"; + for (const char* name : {"gemm_fp8", "gemm_f16", "ops", "window_normalize", "window_attend", "global_normalize", + "global_attend", "preprocess", "fused_block32", "qkv_attention", "gemm_mlp", "global_attention", "gemm_reduce"}) { + modules_[name] = context_.loadShaderModule(shaderDirectory + "/" + name + ".spv"); + } +} + +Kernels::~Kernels() { + for (auto& [key, pipeline] : pipelines_) context_.destroyPipeline(pipeline); + for (auto& [file, kernel] : ptxKernels_) { + context_.destroyCudaFunction(kernel.function); + context_.destroyCudaModule(kernel.module); + } + if (profileQueries_) vkDestroyQueryPool(context_.device(), profileQueries_, nullptr); + context_.destroyBuffer(siluTable_); + context_.destroyBuffer(syncBuffer_); + context_.destroyBuffer(chainStatus_); + context_.destroyBuffer(splitScratch_); +} + +void Kernels::setSiluTable(const std::vector& table) { + if (table.size() != 65536) throw std::runtime_error("SiLU table must have 65536 entries"); + if (!siluTable_.buffer) siluTable_ = context_.createBuffer(65536 * 2, false, "SiLU table"); + context_.upload(siluTable_, table.data(), 65536 * 2); +} + +VkPipeline Kernels::pipeline(const char* shader, const vk::SpecConstants& constants, uint32_t requiredSubgroupSize) { + std::string key = shader; + for (uint32_t value : constants.data) key += ":" + std::to_string(value); + auto it = pipelines_.find(key); + if (it != pipelines_.end()) return it->second.pipeline; + vk::Pipeline created = context_.createComputePipeline(modules_.at(shader), constants, shader, requiredSubgroupSize); + pipelines_[key] = created; + return created.pipeline; +} + +void Kernels::beginProfile(VkCommandBuffer commands, uint32_t maxDispatches) { + if (profileQueries_) vkDestroyQueryPool(context_.device(), profileQueries_, nullptr); + profileCapacity_ = maxDispatches + 1; + profileQueries_ = context_.createTimestampPool(profileCapacity_); + vkCmdResetQueryPool(commands, profileQueries_, 0, profileCapacity_); + vkCmdWriteTimestamp(commands, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, profileQueries_, 0); + profileCount_ = 1; + profileLabels_.clear(); + dispatches_ = 0; +} + +std::vector Kernels::endProfile() { + std::vector entries; + if (!profileQueries_) return entries; + std::vector stamps = context_.readTimestampsMs(profileQueries_, profileCount_); + for (uint32_t i = 1; i < profileCount_; ++i) entries.push_back({profileLabels_[i - 1], stamps[i] - stamps[i - 1]}); + vkDestroyQueryPool(context_.device(), profileQueries_, nullptr); + profileQueries_ = VK_NULL_HANDLE; + return entries; +} + +void Kernels::dispatch(VkCommandBuffer commands, VkPipeline pipeline, + const vk::Buffer* const bindings[vk::kGenericBindings], const void* push, uint32_t pushBytes, + uint32_t x, uint32_t y, uint32_t z) { + VkDescriptorSet set = context_.allocateSet(bindings); + vkCmdBindPipeline(commands, VK_PIPELINE_BIND_POINT_COMPUTE, pipeline); + vkCmdBindDescriptorSets(commands, VK_PIPELINE_BIND_POINT_COMPUTE, context_.pipelineLayout(), 0, 1, &set, 0, nullptr); + vkCmdPushConstants(commands, context_.pipelineLayout(), VK_SHADER_STAGE_COMPUTE_BIT, 0, pushBytes, push); + vkCmdDispatch(commands, x, y, z); + context_.computeBarrier(commands); + if (profileQueries_ && profileCount_ < profileCapacity_) { + vkCmdWriteTimestamp(commands, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, profileQueries_, profileCount_++); + profileLabels_.push_back(stageLabel_ + " | " + dispatchLabel_); + } + ++dispatches_; +} + +static bool g_chainEnabled = getenv("DLSS5VK_CHAIN") ? atoi(getenv("DLSS5VK_CHAIN")) != 0 : true; +bool Kernels::chainEnabled() { return g_chainEnabled; } +void Kernels::setChainEnabled(bool on) { g_chainEnabled = on; } + +VkDeviceAddress Kernels::syncAddress(int block, SyncRegion region) { + if (syncBuffer_.buffer == VK_NULL_HANDLE) { syncBuffer_ = context_.createBuffer((VkDeviceSize)kSyncSlots * kSyncSlotBytes, false, "sync counters"); context_.fillZero(syncBuffer_); } + check(block >= 0 && (uint32_t)block < kSyncSlots, "sync slot"); + return context_.deviceAddress(syncBuffer_) + (VkDeviceSize)block * kSyncSlotBytes + (VkDeviceSize)region * kSyncRegionBytes; +} + +VkDeviceAddress Kernels::tileCounters(uint32_t count) { + const uint32_t bytes = (count * 4 + 15) & ~15u; + check(tileCounterCursor_ + bytes <= (kSyncSlots - kTileCounterSlot) * kSyncSlotBytes, "tile counters exhausted (per frame)"); + VkDeviceAddress address = syncAddress(kTileCounterSlot, kSyncBands) + tileCounterCursor_; + tileCounterCursor_ += bytes; + return address; +} + +// Consumers spin on these. A stale count starts one early. +void Kernels::resetSync(VkCommandBuffer commands) { + if (syncBuffer_.buffer == VK_NULL_HANDLE) syncAddress(0, kSyncBands); + vkCmdFillBuffer(commands, syncBuffer_.buffer, 0, VK_WHOLE_SIZE, 0); + context_.transferBarrier(commands); + chainLaunches_.clear(); +} + +void Kernels::noteChain(VkDeviceAddress waitA, VkDeviceAddress waitB, VkDeviceAddress signal) { + if (waitA || waitB || signal) chainLaunches_.push_back({stageLabel_ + " | " + dispatchLabel_, {waitA, waitB}, signal}); +} + +void Kernels::checkChainOrder() const { + for (size_t i = 0; i < chainLaunches_.size(); ++i) { + const ChainLaunch& launch = chainLaunches_[i]; + for (VkDeviceAddress wait : launch.waits) { + if (!wait) continue; + if (wait == launch.signal) throw std::runtime_error("chain order: " + launch.label + " waits on the counters it signals"); + bool signalledBefore = false; + for (size_t j = 0; j < i && !signalledBefore; ++j) signalledBefore = chainLaunches_[j].signal == wait; + if (!signalledBefore) throw std::runtime_error("chain order: " + launch.label + " waits on counters no earlier launch signals"); + } + } +} + +VkDeviceAddress Kernels::chainStatusAddress() { + if (chainStatus_.buffer == VK_NULL_HANDLE) { + chainStatus_ = context_.createBuffer(16, true, "chain status"); + memset(chainStatus_.mapped, 0, 16); + } + return context_.deviceAddress(chainStatus_); +} + +Kernels::ChainTimeouts Kernels::chainTimeouts() const { + ChainTimeouts timeouts; + if (!chainStatus_.mapped) return timeouts; + const volatile uint32_t* status = static_cast(chainStatus_.mapped); + timeouts.waits = status[0]; + if (timeouts.waits && syncBuffer_.buffer) { + const uint32_t base = (uint32_t)context_.deviceAddress(syncBuffer_), offset = status[1] - base; + timeouts.counter = offset < kSyncSlots * kSyncSlotBytes + ? "slot " + std::to_string(offset / kSyncSlotBytes) + " region " + + std::to_string(offset % kSyncSlotBytes / kSyncRegionBytes) + " counter " + + std::to_string(offset % kSyncRegionBytes / 4) + : "an address outside the counters"; + } + return timeouts; +} + +void Kernels::resetChainTimeouts() { + if (chainStatus_.mapped) memset(chainStatus_.mapped, 0, 16); +} + +void Kernels::cudaLaunchTracked(VkCommandBuffer commands, VkCudaFunctionNV function, uint32_t gridX, uint32_t gridY, + uint32_t gridZ, uint32_t blockX, uint32_t sharedBytes, const void* const* params, + size_t paramCount, bool chained) { + context_.cudaLaunch(commands, function, gridX, gridY, gridZ, blockX, sharedBytes, params, paramCount); + if (!(chained && g_chainEnabled)) context_.computeBarrier(commands); + if (profileQueries_ && profileCount_ < profileCapacity_) { + vkCmdWriteTimestamp(commands, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, profileQueries_, profileCount_++); + profileLabels_.push_back(stageLabel_ + " | " + dispatchLabel_); + } + ++dispatches_; +} + +void Kernels::dispatchLinear(VkCommandBuffer commands, VkPipeline pipeline, + const vk::Buffer* const bindings[vk::kGenericBindings], const void* push, + uint32_t pushBytes, uint32_t count) { + uint32_t groups = (count + 255) / 256; + uint32_t y = (groups + 65534) / 65535; + dispatch(commands, pipeline, bindings, push, pushBytes, std::min(groups, 65535u), y, 1); +} + +bool Kernels::ptxGemmEnabled() { + static const bool enabled = getenv("DLSS5VK_PTX_GEMM") ? atoi(getenv("DLSS5VK_PTX_GEMM")) != 0 : true; + return enabled; +} + +bool Kernels::ptxQkvEnabled() { + static const bool enabled = getenv("DLSS5VK_PTX_QKV") ? atoi(getenv("DLSS5VK_PTX_QKV")) != 0 : true; + return enabled; +} + +void Kernels::gemmFp8(VkCommandBuffer commands, const GemmFp8Args& a) { + check(a.input && a.input->format == Format::E4, "FP8 GEMM input must be E4M3"); + check(a.K % 32 == 0, "FP8 GEMM K must be a multiple of 32"); + check(a.output, "FP8 GEMM needs an output"); + check(a.output->format == (a.quantize ? Format::E4 : Format::F16), "FP8 GEMM output format mismatch"); + check(!a.dualOutput || (a.dualOutput->format == Format::E4 && !a.quantize), "dual output must be E4 beside f16"); + check(a.output->allocRows >= alignRows(a.rows), "GEMM output rows"); + check(a.input->allocRows >= alignRows(a.rows), "GEMM input rows"); + check(a.inputColumnBase + (a.broadcastInput ? a.K : a.batches * a.K) <= a.input->channels, "GEMM input columns"); + check(a.outputColumnOffset + a.batches * a.N <= a.output->channels, "GEMM output columns"); + check(a.weightColumnOffset + a.N <= a.Nmatrix, "GEMM weight columns"); + check(!a.residual || a.residual->channels == a.output->channels, "residual must share the output layout"); + check(a.partition == 0 || (a.partition % 32 == 0 && a.K % a.partition == 0), "GEMM partition"); + check(a.input->channels % 16 == 0 && a.inputColumnBase % 16 == 0, "GEMM input rows must be 16-byte aligned"); + check(!a.residual || a.residual->allocRows >= alignRows(a.rows), "GEMM residual rows"); + // Split-K: independent partition chains in separate workgroups plus a reduce pass, for the + // small-M partitioned GEMMs (ViT) whose workgroup count would otherwise starve the GPU. + uint32_t splits = 1; + static const int splitEnv = getenv("DLSS5VK_SPLITK") ? atoi(getenv("DLSS5VK_SPLITK")) : -1; // -1 auto, 0 off, K value: only that K + if (a.partition && a.K > a.partition && a.batches == 1 && + ((a.rows + 63) / 64) * std::max(1u, a.N / 64) < 2 * context_.smCount() && splitEnv != 0 && (splitEnv <= 0 || (uint32_t)splitEnv == a.K) && + (VkDeviceSize)(a.K / a.partition) * alignRows(a.rows) * a.N * 2 <= (16u << 20)) + splits = a.K / a.partition; + // PTX GEMM (scripts/ptx/gemm2_e4m3.py): the expert-stage shapes (single batch, N % 64 == 0, no partition, + // residual seeded from an E4 tensor with a scale, E4 / f16 / dual outputs, optional SiLU). + const bool ptxGemm = ptxGemmEnabled(); + // ViT PTX GEMM (gemmv_e4m3.py: 192 x 128 tiles of eight 48 x 64 warps, one chain per workgroup = the whole K or + // one partition per split-K workgroup, the reduce folded into the last-arriving workgroup, counter chaining). + const bool ptxGemmV = ptxGemmVEnabled(); + if (ptxGemmV && ptxGemm && a.batches == 1 && !a.broadcastInput && a.N % 128 == 0 && + (!a.residual || (a.scaleResidual && a.residual->format == Format::E4)) && a.K / 32 >= 3 && + (a.chainSingle || (!a.chainWaitRows && !a.chainWaitBands && !a.chainSignal))) { // gemmv chains on one counter + const uint32_t bm = vitGemmTileRows(a.rows), warps = bm / 24; + const uint32_t rowGroups = (a.rows + bm - 1) / bm, colGroups = a.N / 128; + // The partition count is the network's K split: the f16 partial sums are combined in that order, so it is part + // of the arithmetic, not a performance choice. Large token counts just get a larger split-K scratch. + const uint32_t vsplits = (a.partition && a.K > a.partition) ? a.K / a.partition : 1; + const uint32_t vflags = (a.residual ? 1u : 0u) | (a.silu ? 2u : 0u) | ((a.quantize || a.dualOutput) ? 4u : 0u) | (a.quantize ? 0u : 8u); + const std::string entry = "gemmv_e4m3_K" + std::to_string(a.K) + "_f" + std::to_string(vflags) + "_s" + std::to_string(vsplits) + + (bm != 192 ? "_m" + std::to_string(bm) : ""); + std::ifstream probe(ptxDirectory_ + "/" + entry + ".ptx"); + const VkDeviceSize partialBytes = (VkDeviceSize)vsplits * rowGroups * colGroups * warps * 48 * 128; // fragment-order slices + if (probe.good() && rowGroups <= 65535) { + PtxKernel& kernel = ptxKernel(entry + ".ptx", entry); + if (vsplits > 1 && splitScratch_.buffer == VK_NULL_HANDLE) { + // sized once (launches already recorded hold its address): four times the first split shape covers the + // widest ViT GEMM of the same token count (qkv: 24 column groups x 2 splits vs the contract's 8 x 4) + splitScratchBytes_ = std::max(16u << 20, 4 * partialBytes); + splitScratch_ = context_.createBuffer(splitScratchBytes_, false, "split-K partials"); + } + check(vsplits == 1 || partialBytes <= splitScratchBytes_, "split-K partials exceed the scratch buffer (gemmv)"); + VkDeviceAddress pA = context_.deviceAddress(a.input->buffer), pW = context_.deviceAddress(*a.weights); + VkDeviceAddress pRes = a.residual ? context_.deviceAddress(a.residual->buffer) : pA; + VkDeviceAddress pAux = a.auxTensor ? context_.deviceAddress(a.auxTensor->raw) : pA; + VkDeviceAddress pOut = a.quantize ? context_.deviceAddress(a.output->buffer) : a.dualOutput ? context_.deviceAddress(a.dualOutput->buffer) : pA; + VkDeviceAddress pOut16 = a.quantize ? pA : context_.deviceAddress(a.output->buffer); + VkDeviceAddress pPartial = vsplits > 1 ? context_.deviceAddress(splitScratch_) : pA; + VkDeviceAddress pCount = vsplits > 1 ? tileCounters(rowGroups * colGroups) : pA; + VkDeviceAddress pWait = a.chainWaitRows, pSignal = a.chainSignal; + uint32_t rows = a.rows, inputStride = a.input->channels, inputColumnBase = a.inputColumnBase, Nmatrix = a.Nmatrix, + weightColumnOffset = a.weightColumnOffset, outputStride = a.output->channels, outputColumnOffset = a.outputColumnOffset, + auxHalfOffset = a.auxByteOffset / 2, waitExpected = a.chainWaitExpected; + VkDeviceAddress pError = chainStatusAddress(); + const void* params[] = {&pA, &pW, &pRes, &pAux, &pOut, &pOut16, &pPartial, &pCount, &rows, &inputStride, &inputColumnBase, &Nmatrix, + &weightColumnOffset, &outputStride, &outputColumnOffset, &auxHalfOffset, &pWait, &waitExpected, &pSignal, &pError}; + check(kernel.dynamicShared, "gemmv PTX without a dynamic_shared size"); + dispatchLabel_ = "gemmv_ptx " + std::to_string(a.rows) + "x" + std::to_string(a.K) + "->" + std::to_string(a.N) + " f" + + std::to_string(vflags) + (vsplits > 1 ? " s" + std::to_string(vsplits) : ""); + noteChain(pWait, 0, pSignal); + cudaLaunchTracked(commands, kernel.function, colGroups, rowGroups, vsplits, 32 * warps, kernel.dynamicShared, params, 20, a.chained); + return; + } + } + // Tall-tile PTX GEMM (gemmt_e4m3.py, 192-row tiles, partitions in the workgroup or one partition per split-K + // workgroup + a PTX reduce): the few-row stages (ViT / transitions), when the variant was generated. + static const bool ptxGemmT = getenv("DLSS5VK_PTX_GEMMT") ? atoi(getenv("DLSS5VK_PTX_GEMMT")) != 0 : true; + if (ptxGemmT && ptxGemm && a.batches == 1 && !a.broadcastInput && a.N % 64 == 0 && + (!a.residual || (a.scaleResidual && a.residual->format == Format::E4)) && a.partition != 0 && // (rows <= 384 without a partition: gemm2 is faster) + (a.rows + 191) / 192 <= 65535) { + const uint32_t partSteps = (a.partition ? a.partition : a.K) / 32; + const uint32_t rowGroups = (a.rows + 191) / 192, colGroups = a.N / 64; + uint32_t tsplits = 1; + if (a.partition && a.K > a.partition && rowGroups * colGroups < 2 * context_.smCount() && splitEnv != 0 && + (VkDeviceSize)(a.K / a.partition) * alignRows(a.rows) * a.N * 2 <= (16u << 20)) + tsplits = a.K / a.partition; + const uint32_t outFlags = (a.silu ? 2u : 0u) | ((a.quantize || a.dualOutput) ? 4u : 0u) | (a.quantize ? 0u : 8u); + const uint32_t gflags = (a.residual ? 1u : 0u) | (tsplits == 1 ? outFlags : 0u); + const std::string entry = "gemmt_e4m3_K" + std::to_string(a.K) + "_f" + std::to_string(gflags) + "_p" + std::to_string(partSteps) + + "_s" + std::to_string(tsplits); + std::ifstream probe(ptxDirectory_ + "/" + entry + ".ptx"); + if (probe.good()) { + check(!a.chainWaitRows && !a.chainWaitBands && !a.chainSignal && !a.chained, + "the tall-tile PTX GEMM does not implement counter chaining"); + PtxKernel& kernel = ptxKernel(entry + ".ptx", entry); + const uint32_t splitStride = alignRows(a.rows) * a.N; + if (tsplits > 1) { + if (splitScratch_.buffer == VK_NULL_HANDLE) { splitScratchBytes_ = 16u << 20; splitScratch_ = context_.createBuffer(splitScratchBytes_, false, "split-K partials"); } + check((VkDeviceSize)tsplits * splitStride * 2 <= splitScratchBytes_, "split-K partials exceed the scratch buffer"); + } + VkDeviceAddress pA = context_.deviceAddress(a.input->buffer), pW = context_.deviceAddress(*a.weights); + VkDeviceAddress pRes = a.residual ? context_.deviceAddress(a.residual->buffer) : pA; + VkDeviceAddress pAux = a.auxTensor ? context_.deviceAddress(a.auxTensor->raw) : pA; + VkDeviceAddress pOut = a.quantize ? context_.deviceAddress(a.output->buffer) : a.dualOutput ? context_.deviceAddress(a.dualOutput->buffer) : pA; + VkDeviceAddress pOut16 = tsplits > 1 ? context_.deviceAddress(splitScratch_) : a.quantize ? pA : context_.deviceAddress(a.output->buffer); + uint32_t rows = a.rows, inputStride = a.input->channels, inputColumnBase = a.inputColumnBase, Nmatrix = a.Nmatrix, + weightColumnOffset = a.weightColumnOffset, outputStride = tsplits > 1 ? a.N : a.output->channels, + outputColumnOffset = tsplits > 1 ? 0u : a.outputColumnOffset, auxHalfOffset = a.auxByteOffset / 2, sStride = splitStride; + const void* params[] = {&pA, &pW, &pRes, &pAux, &pOut, &pOut16, &rows, &inputStride, &inputColumnBase, &Nmatrix, + &weightColumnOffset, &outputStride, &outputColumnOffset, &auxHalfOffset, &sStride}; + // = gemmt_e4m3.py shared_bytes: a 3-stage ring (8 KB per stage) or the f16 tile, then the E4 tile only next to an f16 tile. + const bool hasF16 = tsplits > 1 || !a.quantize, hasE4 = tsplits == 1 && (a.quantize || a.dualOutput); + const uint32_t sharedBytes = std::max(std::min(3u, a.K / 32 / tsplits) * 8192u, hasF16 ? 192u * 128u : 0u) + (hasE4 && hasF16 ? 192u * 64u : 0u); + dispatchLabel_ = "gemmt_ptx " + std::to_string(a.rows) + "x" + std::to_string(a.K) + "->" + std::to_string(a.N) + " f" + + std::to_string(gflags) + (a.partition ? " p" + std::to_string(a.partition) : "") + (tsplits > 1 ? " s" + std::to_string(tsplits) : ""); + cudaLaunchTracked(commands, kernel.function, colGroups, rowGroups, tsplits, 384, sharedBytes, params, 15); + if (tsplits > 1) { + const std::string rentry = "reduce_e4m3_s" + std::to_string(tsplits) + "_f" + std::to_string(outFlags); + PtxKernel& rkernel = ptxKernel(rentry + ".ptx", rentry); + VkDeviceAddress pPartial = context_.deviceAddress(splitScratch_); + VkDeviceAddress rOut = a.quantize ? context_.deviceAddress(a.output->buffer) : a.dualOutput ? context_.deviceAddress(a.dualOutput->buffer) : pA; + VkDeviceAddress rOut16 = a.quantize ? pA : context_.deviceAddress(a.output->buffer); + uint32_t N = a.N, oStride = a.output->channels, oCol = a.outputColumnOffset; + const void* rparams[] = {&pPartial, &rOut, &rOut16, &rows, &N, &sStride, &oStride, &oCol}; + dispatchLabel_ = "reduce_ptx " + std::to_string(a.rows) + "x" + std::to_string(a.N) + " s" + std::to_string(tsplits); + cudaLaunchTracked(commands, rkernel.function, (a.rows * a.N / 8 + 255) / 256, 1, 1, 256, 0, rparams, 8); + } + return; + } + } + if (ptxGemm && a.batches == 1 && !a.broadcastInput && a.partition == 0 && a.N % 64 == 0 && splits == 1 && + (!a.residual || (a.scaleResidual && a.residual->format == Format::E4)) && + (a.rows + 63) / 64 <= 65535) { + uint32_t pflags = (a.residual ? 1u : 0u) | (a.silu ? 2u : 0u) | ((a.quantize || a.dualOutput) ? 4u : 0u) | (a.quantize ? 0u : 8u); + const std::string entry = "gemm2_e4m3_K" + std::to_string(a.K) + "_f" + std::to_string(pflags); + PtxKernel& kernel = ptxKernel(entry + ".ptx", entry); + VkDeviceAddress pA = context_.deviceAddress(a.input->buffer), pW = context_.deviceAddress(*a.weights); + VkDeviceAddress pRes = a.residual ? context_.deviceAddress(a.residual->buffer) : pA; + VkDeviceAddress pAux = a.auxTensor ? context_.deviceAddress(a.auxTensor->raw) : pA; + VkDeviceAddress pOut = a.quantize ? context_.deviceAddress(a.output->buffer) : a.dualOutput ? context_.deviceAddress(a.dualOutput->buffer) : pA; + VkDeviceAddress pOut16 = a.quantize ? pA : context_.deviceAddress(a.output->buffer); + uint32_t rows = a.rows, inputStride = a.input->channels, inputColumnBase = a.inputColumnBase, Nmatrix = a.Nmatrix, + weightColumnOffset = a.weightColumnOffset, outputStride = a.output->channels, outputColumnOffset = a.outputColumnOffset, + auxHalfOffset = a.auxByteOffset / 2; + VkDeviceAddress pWaitRows = a.chainWaitRows, pSignal = a.chainSignal, pWaitBands = a.chainWaitBands; + uint32_t waitExpected = a.chainWaitExpected, waitShiftY = a.chainWaitShiftY, width = a.chainWidth, waitMul = a.chainWaitMul, waitGroupRows = a.chainWaitGroupRows; + if ((pWaitRows || pSignal || pWaitBands) && !width) + throw std::runtime_error("PTX GEMM chaining needs the token row width (" + stageLabel_ + ": " + std::to_string(a.rows) + "x" + + std::to_string(a.K) + "->" + std::to_string(a.N) + ")"); + VkDeviceAddress pError = chainStatusAddress(); + const void* params[] = {&pA, &pW, &pRes, &pAux, &pOut, &pOut16, &rows, &inputStride, &inputColumnBase, &Nmatrix, + &weightColumnOffset, &outputStride, &outputColumnOffset, &auxHalfOffset, + &pWaitRows, &waitExpected, &waitShiftY, &pSignal, &width, &pWaitBands, &waitMul, &waitGroupRows, &pError}; + dispatchLabel_ = "gemm_ptx " + std::to_string(a.rows) + "x" + std::to_string(a.K) + "->" + std::to_string(a.N) + " f" + std::to_string(pflags); + noteChain(pWaitRows, pWaitBands, pSignal); + cudaLaunchTracked(commands, kernel.function, a.N / 64, (a.rows + 63) / 64, 1, kernel.threads ? kernel.threads : 128, 0, params, 23, a.chained); + return; + } + if (a.chainWaitRows || a.chainWaitBands || a.chainSignal || a.chained) + throw std::runtime_error("chained GEMM has no PTX route (" + stageLabel_ + ": " + std::to_string(a.rows) + "x" + std::to_string(a.K) + + "->" + std::to_string(a.N) + " p" + std::to_string(a.partition) + ")"); + uint32_t subgroups = 4, tiles = 1; + chooseGemmShape(a.N, a.rows, a.batches * splits, context_.smCount(), subgroups, tiles); + uint32_t tile = tiles * 16, blockRows = subgroups * 16; + uint32_t flags = 0; + if (a.residual) flags |= F_RESIDUAL; + if (a.scaleResidual) flags |= F_SCALE_RESIDUAL; + if (a.silu) flags |= F_SILU; + if (a.quantize) flags |= F_QUANTIZE; + if (a.dualOutput) flags |= F_DUAL; + if (a.residual && a.residual->format == Format::E4) flags |= F_RESIDUAL_E4; + if (a.broadcastInput) flags |= F_BROADCAST_INPUT; + check(!a.scaleResidual || a.auxTensor, "scaled residual needs an aux tensor"); + check(a.output->channels % 16 == 0 && (a.outputColumnOffset % 16) == 0 && (a.auxByteOffset % 16) == 0 && a.N % 16 == 0, + "GEMM epilogue needs 16-column aligned outputs"); + const uint32_t publishFlags = flags & (F_SILU | F_QUANTIZE | F_DUAL); + if (splits > 1) flags &= ~publishFlags; // publication moves to the reduce pass + vk::SpecConstants constants; + constants.add(0, a.K); + constants.add(1, tiles); + constants.add(2, flags); + constants.add(3, splits > 1 ? 0u : a.partition); + constexpr uint32_t depthEnv = 4u; // k32 steps in flight + constants.add(4, std::max(1u, std::min(depthEnv, std::max(1u, a.K / 32)))); + constants.add(5, 1u); // padded shared rows + constants.add(7, subgroups); + constants.add(8, subgroups * 32); + constants.add(9, splits); + // K per staged step: 64 (one flexible 16xNx64 multiply per barrier) when the partition allows it. + const uint32_t partitionK = a.partition ? a.partition : a.K; + const uint32_t kstep = partitionK % 64 == 0 ? 64u : 32u; + constants.add(10, kstep); + { // prefetch depth in KSTEP units: the same bytes in flight as DEPTH k32 steps + const uint32_t stepsTotal = std::max(1u, a.K / kstep / std::max(1u, splits)); + constants.data[4] = std::max(1u, std::min(depthEnv * 32 / kstep, stepsTotal)); + } + const uint32_t splitStride = alignRows(a.rows) * a.N; // f16 elements per partition slice + struct Push { + uint32_t rows, N, Nmatrix, weightColumnOffset, inputStride, inputColumnBase, outputStride, outputColumnOffset, + auxHalfOffset, batches, columnGroups, splitStride; + } push{a.rows, a.N, a.Nmatrix, a.weightColumnOffset, a.input->channels, a.inputColumnBase, a.output->channels, + a.outputColumnOffset, a.auxByteOffset / 2, a.batches, a.N / tile, splitStride}; + if (splits > 1) { + // One fixed scratch: it may not be reallocated while recorded dispatches still reference it. + if (splitScratch_.buffer == VK_NULL_HANDLE) { + splitScratchBytes_ = 16u << 20; + splitScratch_ = context_.createBuffer(splitScratchBytes_, false, "split-K partials"); + } + check((VkDeviceSize)splits * splitStride * 2 <= splitScratchBytes_, "split-K partials exceed the scratch buffer"); + } + const vk::Buffer* bindings[vk::kGenericBindings] = {}; + bindings[0] = &a.input->buffer; + bindings[1] = a.weights; + if (!a.quantize) bindings[2] = &a.output->buffer; + if (splits > 1) bindings[2] = &splitScratch_; + if (a.residual && a.residual->format == Format::F16) bindings[3] = &a.residual->buffer; + if (a.auxTensor) bindings[4] = &a.auxTensor->raw; + if (a.quantize) bindings[5] = &a.output->buffer; + if (a.dualOutput) bindings[5] = &a.dualOutput->buffer; + if (a.residual && a.residual->format == Format::E4) bindings[6] = &a.residual->buffer; + uint32_t rowGroups = (a.rows + blockRows - 1) / blockRows; + uint32_t z = (rowGroups + 65534) / 65535; + dispatchLabel_ = "gemm_fp8 " + std::to_string(a.rows) + "x" + std::to_string(a.K) + "->" + std::to_string(a.N) + + (a.batches > 1 ? " x" + std::to_string(a.batches) : "") + (a.silu ? " silu" : "") + + (a.partition ? " p" + std::to_string(a.partition) : "") + " f" + std::to_string(flags) + + " " + std::to_string(subgroups) + "x" + std::to_string(tiles); + if (splits > 1) dispatchLabel_ += " s" + std::to_string(splits); + dispatch(commands, pipeline("gemm_fp8", constants), bindings, &push, sizeof(push), a.batches * (a.N / tile) * splits, + std::min(rowGroups, 65535u), z); + if (splits > 1) { + vk::SpecConstants reduceConstants; + reduceConstants.add(0, splits); + reduceConstants.add(1, publishFlags); + struct ReducePush { uint32_t rows, N, splitStride, outputStride, outputColumnOffset; } + reducePush{a.rows, a.N, splitStride, a.output->channels, a.outputColumnOffset}; + const vk::Buffer* reduceBindings[vk::kGenericBindings] = {}; + reduceBindings[0] = &splitScratch_; + if (!a.quantize) reduceBindings[2] = &a.output->buffer; + if (a.quantize) reduceBindings[5] = &a.output->buffer; + if (a.dualOutput) reduceBindings[5] = &a.dualOutput->buffer; + dispatchLabel_ = "gemm_reduce " + std::to_string(a.rows) + "x" + std::to_string(a.N) + " s" + std::to_string(splits); + dispatchLinear(commands, pipeline("gemm_reduce", reduceConstants), reduceBindings, &reducePush, sizeof(reducePush), + a.rows * a.N / 8); + } +} + +void Kernels::gemmF16(VkCommandBuffer commands, const GemmF16Args& a) { + check(a.input && a.input->format == Format::F16, "f16 GEMM input must be f16"); + check(a.K % 16 == 0 && a.paddedN % 16 == 0 && a.N <= a.paddedN, "f16 GEMM shape"); + check(a.input->allocRows >= alignRows(a.rows) && a.output->allocRows >= alignRows(a.rows), "f16 GEMM rows"); + uint32_t flags = 0; + if (a.output->format == Format::F32) flags |= F_OUT_F32; + else if (a.output->format == Format::E4) flags |= F_QUANTIZE; + if (a.dualOutput) flags |= F_DUAL; + vk::SpecConstants constants; + constants.add(0, a.K); + constants.add(1, a.paddedN); + constants.add(2, flags); + struct Push { uint32_t rows, N, inputStride, outputStride; } push{a.rows, a.N, a.input->channels, a.output->channels}; + const vk::Buffer* bindings[vk::kGenericBindings] = {}; + bindings[0] = &a.input->buffer; + bindings[1] = a.weights; + if (a.output->format == Format::F16) bindings[2] = &a.output->buffer; + if (a.output->format == Format::E4) bindings[5] = &a.output->buffer; + if (a.dualOutput) bindings[5] = &a.dualOutput->buffer; + if (a.output->format == Format::F32) bindings[7] = &a.output->buffer; + uint32_t rowGroups = (a.rows + 63) / 64; + dispatchLabel_ = "gemm_f16 " + std::to_string(a.rows) + "x" + std::to_string(a.K) + "->" + std::to_string(a.N); + dispatch(commands, pipeline("gemm_f16", constants), bindings, &push, sizeof(push), 1, std::min(rowGroups, 65535u), + (rowGroups + 65534) / 65535); +} + +namespace { +struct OpsPush { + uint32_t count, channels, inWidth, inHeight, outWidth, outHeight, auxOffsetA, auxOffsetB, dual; +}; +} // namespace + +void Kernels::preprocessFromProxy(VkCommandBuffer commands, const vk::Buffer& proxy, Activation& features, + const PreprocessArgs& a) { + check(features.format == Format::F32 && features.channels == 16 && features.rows == a.fullWidth * a.fullHeight, + "preprocess output must be f32 [full][16]"); + struct Push { + uint32_t fullWidth, fullHeight, validWidth, validHeight, sourceWidth, sourceHeight, seed; + float autoMask, localTone, localStructure, skinStructure, style; + } push{a.fullWidth, a.fullHeight, a.validWidth, a.validHeight, a.sourceWidth, a.sourceHeight, a.seed, + a.autoMask ? 1.0f : -1.0f, a.localTone, a.localStructure, a.skinStructure, a.style}; + const vk::Buffer* bindings[vk::kGenericBindings] = {}; + bindings[0] = &proxy; + bindings[7] = &features.buffer; + dispatchLabel_ = "preprocess"; + dispatch(commands, pipeline("preprocess", {}, 0), bindings, &push, sizeof(push), (a.fullWidth + 7) / 8, + (a.fullHeight + 7) / 8, 1); +} + +void Kernels::convertF32ToF16(VkCommandBuffer commands, const Activation& input, Activation& output) { + check(input.format == Format::F32 && output.format == Format::F16, "convert formats"); + uint32_t count = input.rows * input.channels; + vk::SpecConstants constants; + constants.add(0, 0); + OpsPush push{count, input.channels, 0, 0, 0, 0, 0, 0, 0}; + const vk::Buffer* bindings[vk::kGenericBindings] = {}; + bindings[0] = &input.buffer; + bindings[6] = &output.buffer; + dispatchLabel_ = "convert f32->f16"; + check(count % 8 == 0, "ops: element count must be a multiple of 8"); + dispatchLinear(commands, pipeline("ops", constants), bindings, &push, sizeof(push), count / 8); +} + +void Kernels::quantize(VkCommandBuffer commands, const Activation& input, Activation& output) { + check(input.format == Format::F16 && output.format == Format::E4, "quantize formats"); + uint32_t count = input.rows * input.channels; + vk::SpecConstants constants; + constants.add(0, 1); + OpsPush push{count, input.channels, 0, 0, 0, 0, 0, 0, 0}; + const vk::Buffer* bindings[vk::kGenericBindings] = {}; + bindings[1] = &input.buffer; + bindings[5] = &output.buffer; + dispatchLabel_ = "quantize"; + check(count % 8 == 0, "ops: element count must be a multiple of 8"); + dispatchLinear(commands, pipeline("ops", constants), bindings, &push, sizeof(push), count / 8); +} + +void Kernels::downsample2x(VkCommandBuffer commands, const Activation& input, Activation& output, uint32_t inWidth, + uint32_t inHeight, uint32_t outWidth, uint32_t outHeight) { + check(input.format == Format::F16 && output.format == Format::E4, "downsample formats"); + check(input.rows == inWidth * inHeight && output.rows == outWidth * outHeight, "downsample geometry"); + uint32_t count = output.rows * output.channels; + vk::SpecConstants constants; + constants.add(0, 2); + OpsPush push{count, output.channels, inWidth, inHeight, outWidth, outHeight, 0, 0, 0}; + const vk::Buffer* bindings[vk::kGenericBindings] = {}; + bindings[1] = &input.buffer; + bindings[5] = &output.buffer; + dispatchLabel_ = "downsample2x"; + check(count % 8 == 0, "ops: element count must be a multiple of 8"); + dispatchLinear(commands, pipeline("ops", constants), bindings, &push, sizeof(push), count / 8); +} + +void Kernels::postBlend(VkCommandBuffer commands, const Activation& upsampleSource, const Activation& adapter, + const Tensor& tensor, uint32_t inputScaleByteOffset, uint32_t skipScaleByteOffset, + Activation& rawOutput, Activation& quantizedOutput, uint32_t inWidth, uint32_t inHeight, + uint32_t outWidth, uint32_t outHeight) { + check(upsampleSource.format == Format::E4 && adapter.format == Format::E4, "post blend inputs"); + check(rawOutput.format == Format::F16 && quantizedOutput.format == Format::E4, "post blend outputs"); + uint32_t count = quantizedOutput.rows * quantizedOutput.channels; + vk::SpecConstants constants; + constants.add(0, 3); + OpsPush push{count, quantizedOutput.channels, inWidth, inHeight, outWidth, outHeight, inputScaleByteOffset / 2, + skipScaleByteOffset / 2, 1}; + const vk::Buffer* bindings[vk::kGenericBindings] = {}; + bindings[2] = &upsampleSource.buffer; + bindings[3] = &adapter.buffer; + bindings[4] = &tensor.raw; + bindings[5] = &quantizedOutput.buffer; + bindings[6] = &rawOutput.buffer; + dispatchLabel_ = "postBlend"; + check(count % 8 == 0, "ops: element count must be a multiple of 8"); + dispatchLinear(commands, pipeline("ops", constants), bindings, &push, sizeof(push), count / 8); +} + +void Kernels::upsampleResidual(VkCommandBuffer commands, const Activation& projection, const Activation& skip, + const Tensor& tensor, uint32_t scaleByteOffset, Activation& output, + Activation* rawOutput, uint32_t inWidth, uint32_t inHeight, uint32_t outWidth, + uint32_t outHeight) { + check(projection.format == Format::F16 && skip.format == Format::E4 && output.format == Format::E4, + "upsample residual formats"); + check(!rawOutput || rawOutput->format == Format::F16, "upsample residual raw output"); + check(projection.rows == inWidth * inHeight && output.rows == outWidth * outHeight, "upsample residual geometry"); + uint32_t count = output.rows * output.channels; + vk::SpecConstants constants; + constants.add(0, 4); + OpsPush push{count, output.channels, inWidth, inHeight, outWidth, outHeight, scaleByteOffset / 2, 0, + rawOutput ? 1u : 0u}; + const vk::Buffer* bindings[vk::kGenericBindings] = {}; + bindings[1] = &projection.buffer; + bindings[3] = &skip.buffer; + bindings[4] = &tensor.raw; + bindings[5] = &output.buffer; + if (rawOutput) bindings[6] = &rawOutput->buffer; + dispatchLabel_ = "upsampleResidual"; + check(count % 8 == 0, "ops: element count must be a multiple of 8"); + dispatchLinear(commands, pipeline("ops", constants), bindings, &push, sizeof(push), count / 8); +} + +bool Kernels::ptxGemmVEnabled() { + static const bool enabled = getenv("DLSS5VK_PTX_GEMMV") ? atoi(getenv("DLSS5VK_PTX_GEMMV")) != 0 : true; + return enabled && ptxGemmEnabled(); // DLSS5VK_PTX_GEMM=0 turns off every PTX GEMM route +} + +uint32_t Kernels::vitGemmTileRows(uint32_t rows) { + // 192-row tiles (8 warps, one per SM) for the ViT's single row group; 96-row tiles (4 warps, two per SM) for the + // few-row-group shapes (split-512: 672 rows -> 7 x 4 workgroups, 12% faster than gemm2's 64 x 64 tiles). + return rows <= 192 ? 192u : 96u; +} + +// One signal per published (row group, column group) tile; with split-K the last-arriving split publishes the +// tile, so the count does not depend on the split. +uint32_t Kernels::vitGemmSignals(uint32_t rows, uint32_t N) { + const uint32_t bm = vitGemmTileRows(rows); + return (N / 128) * ((rows + bm - 1) / bm); +} + +bool Kernels::ptxBlock32Enabled() { + static const bool enabled = getenv("DLSS5VK_PTX_BLOCK32") ? atoi(getenv("DLSS5VK_PTX_BLOCK32")) != 0 : true; + return enabled; +} + +void Kernels::fusedBlock32Ptx(VkCommandBuffer commands, const FusedBlock32Args& a) { + check(a.w1Ptx && a.w2Ptx, "PTX fused block needs the permuted / tiled weights"); + check(!a.skip16 && !a.outF16, "PTX fused block: f16 skip / raw output variants are not generated"); + uint32_t flags = (a.outE4 ? 2u : 0u) | (a.features ? 8u : 0u) | (a.lowRes ? 16u : 0u) | (a.head ? 32u : 0u) | + (a.pooled ? 64u : 0u) | (a.lowProjection ? 128u : 0u); + const std::string entry = "block32_e4m3_f" + std::to_string(flags); + PtxKernel& kernel = ptxKernel(entry + ".ptx", entry); + uint32_t windowsX = (a.width + a.shiftX + 7) / 8, windowsY = (a.height + a.shiftY + 7) / 8; + uint32_t windows = windowsX * windowsY; + VkDeviceAddress pState = context_.deviceAddress(a.features ? a.features->buffer : a.state->buffer); + VkDeviceAddress pLow = a.lowRes ? context_.deviceAddress(a.lowRes->buffer) + : a.lowProjection ? context_.deviceAddress(a.lowProjection->buffer) : pState; + VkDeviceAddress pW1 = context_.deviceAddress(*a.w1Ptx), pW2 = context_.deviceAddress(*a.w2Ptx), + pWqkv = context_.deviceAddress(*a.wqkv), pWproj = context_.deviceAddress(*a.wproj), + pAux = context_.deviceAddress(a.tensor->raw), pPrior = context_.deviceAddress(*a.prior); + VkDeviceAddress pOutE4 = a.outE4 ? context_.deviceAddress(a.outE4->buffer) : pState; + VkDeviceAddress pOut2 = a.pooled ? context_.deviceAddress(a.pooled->buffer) : a.head ? context_.deviceAddress(a.head->buffer) : pState; + VkDeviceAddress pWf16 = a.features ? context_.deviceAddress(*a.adapterWeights) : a.head ? context_.deviceAddress(*a.headWeights) : pState; + uint32_t width = a.width, height = a.height, shiftX = a.shiftX, shiftY = a.shiftY, auxFfnHalf = a.ffnScaleByteOffset / 2, + auxAttnHalf = a.attnScaleByteOffset / 2, scaleWord = a.attentionScaleByteOffset / 4, auxInputHalf = a.inputScaleByteOffset / 2, + auxAdapterHalf = a.adapterScaleByteOffset / 2, lowWidth = a.pooled ? a.pooledWidth : a.lowWidth; + VkDeviceAddress pWait = a.chainWait, pSignal = a.chainSignal; + uint32_t waitExpected = a.chainWaitExpected, waitShiftY = a.chainWaitShiftY, waitScale = a.chainWaitScale; + VkDeviceAddress pError = chainStatusAddress(); + const void* params[] = {&pState, &pLow, &pW1, &pW2, &pWqkv, &pWproj, &pAux, &pPrior, &pOutE4, &pOut2, &pWf16, + &width, &height, &shiftX, &shiftY, &windowsX, &windows, &auxFfnHalf, &auxAttnHalf, &scaleWord, + &auxInputHalf, &auxAdapterHalf, &lowWidth, &pWait, &waitExpected, &waitShiftY, &waitScale, &pSignal, &pError}; + // Persistent: eight resident workgroups per SM, each walking windows. The grid must stay co-resident, which is + // also what keeps a chained consumer from starving the producer it spins on. + uint32_t groups = std::min(windows, 8 * context_.smCount()); + dispatchLabel_ = "block32_ptx " + std::to_string(windows) + "w f" + std::to_string(flags); + noteChain(pWait, 0, pSignal); + cudaLaunchTracked(commands, kernel.function, groups, 1, 1, 128, 0, params, 29, a.chained); +} + +bool Kernels::fusedBlock32IsPtx(const FusedBlock32Args& a) { + return ptxBlock32Enabled() && a.w1Ptx && a.w2Ptx && !a.skip16 && !a.outF16; +} + +void Kernels::fusedBlock32(VkCommandBuffer commands, const FusedBlock32Args& a) { + if (fusedBlock32IsPtx(a)) { fusedBlock32Ptx(commands, a); return; } + check(!a.chainWait && !a.chainSignal && !a.chained, "the GLSL fused block does not implement counter chaining"); + check(a.features || (a.state && a.state->format == Format::E4 && a.state->channels == 32), "fused block state"); + check(!a.skip16 || (a.skip16->format == Format::F16 && a.skip16->channels == 32), "fused block skip"); + check(a.outE4 || a.outF16 || a.head || a.pooled, "fused block needs an output"); + check(!a.pooled || (a.pooled->format == Format::E4 && a.pooled->channels == 32 && !a.outF16 && !a.head && a.pooledWidth), "fused pool output"); + check(!a.outE4 || (a.outE4->format == Format::E4 && a.outE4->channels == 32), "fused block E4 output"); + check(!a.outF16 || (a.outF16->format == Format::F16 && a.outF16->channels == 32), "fused block f16 output"); + check(a.ffnScaleByteOffset % 16 == 0 && a.attnScaleByteOffset % 16 == 0, "fused block scale vectors must be 16-byte aligned"); + uint32_t flags = (a.skip16 ? 1u : 0u) | (a.outE4 ? 2u : 0u) | (a.outF16 ? 4u : 0u) | (a.features ? 8u : 0u) | + (a.lowRes ? 16u : 0u) | (a.head ? 32u : 0u) | (a.pooled ? 64u : 0u) | (a.lowProjection ? 128u : 0u); + vk::SpecConstants constants; + constants.add(0, flags); + uint32_t windowsX = (a.width + a.shiftX + 7) / 8, windowsY = (a.height + a.shiftY + 7) / 8; + uint32_t windows = windowsX * windowsY; + struct Push { + uint32_t width, height, shiftX, shiftY, windowsX, windowCount, groupCount, auxFfnHalfOffset, auxAttnHalfOffset, scaleWordOffset, + auxInputScaleHalf, auxAdapterScaleHalf, lowWidth; + } push{a.width, a.height, a.shiftX, a.shiftY, windowsX, windows, 0u, a.ffnScaleByteOffset / 2, a.attnScaleByteOffset / 2, + a.attentionScaleByteOffset / 4, a.inputScaleByteOffset / 2, a.adapterScaleByteOffset / 2, + a.pooled ? a.pooledWidth : a.lowWidth}; + const vk::Buffer* bindings[vk::kGenericBindings] = {}; + if (a.state) bindings[0] = &a.state->buffer; + if (a.skip16) bindings[1] = &a.skip16->buffer; + bindings[2] = a.w1; + bindings[3] = a.w2; + bindings[4] = a.wqkv; + bindings[5] = a.wproj; + bindings[6] = &a.tensor->raw; + bindings[7] = a.prior; + if (a.outE4) bindings[8] = &a.outE4->buffer; + if (a.outF16) bindings[9] = &a.outF16->buffer; + if (a.features) { check(a.features->format == Format::F32 && a.features->channels == 16 && a.adapterWeights, "fused pre inputs"); bindings[0] = &a.features->buffer; bindings[11] = a.adapterWeights; } + if (a.lowRes) { check(a.lowRes->format == Format::E4 && a.state && a.state->format == Format::E4, "fused post inputs"); bindings[1] = &a.lowRes->buffer; } + if (a.lowProjection) { check(a.lowProjection->format == Format::F16 && a.lowProjection->channels == 32 && a.state && !a.lowRes && !a.skip16, "fused upres inputs"); bindings[1] = &a.lowProjection->buffer; } + if (a.head) { check(a.head->format == Format::F32 && a.head->channels == 4 && a.headWeights, "fused head"); bindings[9] = &a.head->buffer; bindings[11] = a.headWeights; } + if (a.pooled) bindings[9] = &a.pooled->buffer; + dispatchLabel_ = "fused_block32 " + std::to_string(windows) + "w"; + // Persistent: two resident workgroups per SM, each walking window pairs. + uint32_t groups = std::min((windows + 1) / 2, 2 * context_.smCount()); + push.groupCount = groups; + dispatch(commands, pipeline("fused_block32", constants), bindings, &push, sizeof(push), groups, 1, 1); +} + +Kernels::PtxKernel& Kernels::ptxKernel(const std::string& file, const std::string& entry) { + auto it = ptxKernels_.find(file); + if (it != ptxKernels_.end()) return it->second; + std::ifstream in(ptxDirectory_ + "/" + file); + if (!in) throw std::runtime_error("cannot read PTX kernel " + ptxDirectory_ + "/" + file); + std::stringstream buffer; buffer << in.rdbuf(); + PtxKernel kernel; + const std::string text = buffer.str(); + if (size_t at = text.find("// dynamic_shared "); at != std::string::npos) kernel.dynamicShared = (uint32_t)atoi(text.c_str() + at + 18); + if (size_t at = text.find("// threads "); at != std::string::npos) kernel.threads = (uint32_t)atoi(text.c_str() + at + 11); + kernel.module = context_.createCudaModule(text); + kernel.function = context_.createCudaFunction(kernel.module, entry.c_str()); + return ptxKernels_[file] = kernel; +} + +std::vector Kernels::mlpHiddenPermutation(uint32_t hidden) { + // W1' column c holds hidden unit u(c) (mlp_e4m3.py hidden_permutation): per 32-block and 16-half, + // columns 2t + i -> units 4t + i, columns 8 + 2t + i -> units 4t + 2 + i. + std::vector perm(hidden); + for (uint32_t block = 0; block < hidden / 32; ++block) + for (uint32_t half = 0; half < 2; ++half) + for (uint32_t t = 0; t < 4; ++t) + for (uint32_t i = 0; i < 2; ++i) { + perm[block * 32 + half * 16 + 2 * t + i] = block * 32 + half * 16 + 4 * t + i; + perm[block * 32 + half * 16 + 8 + 2 * t + i] = block * 32 + half * 16 + 4 * t + 2 + i; + } + return perm; +} + +void Kernels::mlpPtx(VkCommandBuffer commands, const MlpArgs& a) { + check(a.input && a.input->format == Format::E4 && a.output && a.output->format == Format::E4, "PTX MLP formats"); + check(a.hidden % 32 == 0 && a.nout % 16 == 0 && a.K % 32 == 0, "PTX MLP shape"); + check(a.broadcastInput || a.inputColumnBase + a.batches * a.K <= a.input->channels, "PTX MLP input columns"); + check(a.input->channels % 16 == 0 && a.inputColumnBase % 16 == 0 && a.outputColumnOffset % 16 == 0, "PTX MLP alignment"); + check(a.output->allocRows >= alignRows(a.rows) && a.input->allocRows >= alignRows(a.rows), "PTX MLP rows"); + check(a.broadcastInput && a.hidden == 128 && a.nout == 32, "PTX MLP: the expert variant (broadcast input, 128 -> 32) only"); + const std::string entry = "mlp_e4m3_K" + std::to_string(a.K); + PtxKernel& kernel = ptxKernel(entry + ".ptx", entry); + VkDeviceAddress aAddr = context_.deviceAddress(a.input->buffer), w1Addr = context_.deviceAddress(*a.w1), + w2Addr = context_.deviceAddress(*a.w2), dAddr = context_.deviceAddress(a.output->buffer); + uint32_t rows = a.rows, inputStride = a.input->channels, inputColumnBase = a.inputColumnBase, + outputStride = a.output->channels, outputColumnOffset = a.outputColumnOffset; + const void* params[] = {&aAddr, &w1Addr, &w2Addr, &dAddr, &rows, &inputStride, &inputColumnBase, &outputStride, &outputColumnOffset}; + uint32_t rowGroups = (a.rows + 63) / 64; + dispatchLabel_ = "mlp_ptx " + std::to_string(a.rows) + "x" + std::to_string(a.K) + "->" + std::to_string(a.hidden) + "->" + + std::to_string(a.nout) + " x" + std::to_string(a.batches); + cudaLaunchTracked(commands, kernel.function, a.batches, rowGroups, 1, 128, 0, params, 9); +} + +void Kernels::gemmMlp(VkCommandBuffer commands, const MlpArgs& a) { + check(a.input && a.input->format == Format::E4, "MLP input must be E4M3"); + check(a.output && a.output->format == Format::E4, "MLP output must be E4M3"); + check(a.K % 32 == 0 && a.hidden % 128 == 0 && a.nout % 16 == 0 && a.nout <= 64, "MLP shape"); + check(a.input->channels % 16 == 0 && a.inputColumnBase % 16 == 0, "MLP input alignment"); + check(a.inputColumnBase + (a.broadcastInput ? a.K : a.batches * a.K) <= a.input->channels, "MLP input columns"); + check(a.outputColumnOffset % 16 == 0 && a.output->channels % 16 == 0 && a.nout % 16 == 0, "MLP output alignment"); + check(a.outputColumnOffset + a.batches * a.nout <= a.output->channels, "MLP output columns"); + check(a.output->allocRows >= alignRows(a.rows) && a.input->allocRows >= alignRows(a.rows), "MLP rows"); + vk::SpecConstants constants; + constants.add(0, a.K); + constants.add(1, a.hidden); + constants.add(2, a.nout); + constants.add(3, a.broadcastInput ? 1u : 0u); + constexpr uint32_t mlpDepth = 2u; // k32 steps in flight + constants.add(5, std::max(1u, std::min(mlpDepth, a.K / 32))); + struct Push { uint32_t rows, inputStride, inputColumnBase, outputStride, outputColumnOffset, batches; } + push{a.rows, a.input->channels, a.inputColumnBase, a.output->channels, a.outputColumnOffset, a.batches}; + const vk::Buffer* bindings[vk::kGenericBindings] = {}; + bindings[0] = &a.input->buffer; + bindings[1] = a.w1; + bindings[2] = a.w2; + bindings[5] = &a.output->buffer; + uint32_t rowGroups = (a.rows + 63) / 64; + dispatchLabel_ = "gemm_mlp " + std::to_string(a.rows) + "x" + std::to_string(a.K) + "->" + std::to_string(a.hidden) + + "->" + std::to_string(a.nout) + " x" + std::to_string(a.batches); + dispatch(commands, pipeline("gemm_mlp", constants), bindings, &push, sizeof(push), a.batches, + std::min(rowGroups, 65535u), (rowGroups + 65534) / 65535); +} + +bool Kernels::ptxFfnEnabled() { + static const bool enabled = getenv("DLSS5VK_PTX_FFN") ? atoi(getenv("DLSS5VK_PTX_FFN")) != 0 : true; + return enabled; +} + +uint32_t Kernels::ffnRowTiles(uint32_t channels) { + return channels == 256 ? 3u : 4u; // warps = E * rowTiles (<= 32); C=256: 24 warps at .maxnreg 80 keep one workgroup per SM +} + +void Kernels::expertFfnPtx(VkCommandBuffer commands, const ExpertFfnArgs& a, const Chain& chain) { + check(a.input && a.input->format == Format::E4 && a.output && a.output->format == Format::E4, "PTX FFN formats"); + check(a.channels == 64 || a.channels == 128 || a.channels == 256, "PTX FFN channels"); + check(a.input->channels == a.channels && a.output->channels == a.channels, "PTX FFN strides"); + check(a.output->allocRows >= alignRows(a.rows) && a.input->allocRows >= alignRows(a.rows), "PTX FFN rows"); + const uint32_t E = a.channels / 32; + const uint32_t rowTiles = ffnRowTiles(a.channels); + check(rowTiles >= 1 && rowTiles <= 4, "PTX FFN row tiles (the A tile covers 64 rows)"); + const uint32_t sharedBytes = 2u * (E * 4096u + 2048u) + 16u * rowTiles * (a.channels + 16u); // = ffn_e4m3.py sharedBytes + const bool proj = a.attended != nullptr; + check(!proj || (a.ffnPrev && a.wproj && a.auxTensorPrev && a.attended->format == Format::E4 && a.ffnPrev->format == Format::E4 && + a.attended->channels == a.channels && a.ffnPrev->channels == a.channels), "PTX FFN proj inputs"); + const std::string entry = "ffn_e4m3_C" + std::to_string(a.channels) + "_R" + std::to_string(rowTiles) + (proj ? "_proj" : ""); + PtxKernel& kernel = ptxKernel(entry + ".ptx", entry); + VkDeviceAddress pA = context_.deviceAddress(a.input->buffer), pW1 = context_.deviceAddress(*a.w1), + pW2 = context_.deviceAddress(*a.w2), pW3 = context_.deviceAddress(*a.w3), + pAux = context_.deviceAddress(a.auxTensor->raw), pOut = context_.deviceAddress(a.output->buffer); + VkDeviceAddress pAtt = proj ? context_.deviceAddress(a.attended->buffer) : pA; + VkDeviceAddress pPrev = proj ? context_.deviceAddress(a.ffnPrev->buffer) : pA; + VkDeviceAddress pWproj = proj ? context_.deviceAddress(*a.wproj) : pA; + VkDeviceAddress pAuxPrev = proj ? context_.deviceAddress(a.auxTensorPrev->raw) : pAux; + uint32_t rows = a.rows, auxHalf = a.auxByteOffset / 2, auxAttnHalf = a.auxAttnByteOffset / 2; + VkDeviceAddress pStateOut = a.stateOut ? context_.deviceAddress(a.stateOut->buffer) : pA; + uint32_t storeState = a.stateOut ? 1u : 0u; + VkDeviceAddress pWaitRows = chain.waitRows, pWaitBands = chain.waitBands, pSignal = chain.signal; + uint32_t waitExpected = chain.waitExpected, waitShiftY = chain.waitShiftY, width = a.width, waitMul = chain.waitMul, waitGroupRows = chain.waitGroupRows; + check(!(pWaitRows || pWaitBands || pSignal) || width, "PTX FFN chaining needs the token row width"); + VkDeviceAddress pError = chainStatusAddress(); + const void* params[] = {&pA, &pW1, &pW2, &pW3, &pAux, &pOut, &rows, &auxHalf, &pAtt, &pPrev, &pWproj, &auxAttnHalf, &pAuxPrev, + &pStateOut, &storeState, &pWaitRows, &waitExpected, &waitShiftY, &pWaitBands, &pSignal, &width, &waitMul, &waitGroupRows, &pError}; + const uint32_t groups = (a.rows + 16 * rowTiles - 1) / (16 * rowTiles); + dispatchLabel_ = "ffn_ptx " + std::to_string(a.rows) + "x" + std::to_string(a.channels) + " e" + std::to_string(E) + " r" + + std::to_string(rowTiles) + (proj ? " +proj" : ""); + noteChain(pWaitRows, pWaitBands, pSignal); + cudaLaunchTracked(commands, kernel.function, groups, 1, 1, 32 * E * rowTiles, sharedBytes, params, 24, chain.chained); +} + +void Kernels::qkvAttention(VkCommandBuffer commands, const Activation& input, const vk::Buffer& weights, uint32_t Nmatrix, + const Tensor& tensor, uint32_t scaleByteOffset, const vk::Buffer& prior, Activation& attended, + uint32_t width, uint32_t height, uint32_t heads, uint32_t shiftX, uint32_t shiftY, const Chain& chain) { + check(input.format == Format::E4 && input.channels == heads * 32, "qkv attention input"); + check(Nmatrix == heads * 96, "qkv attention weight columns"); + check(attended.format == Format::E4 && attended.channels == heads * 32, "qkv attention output"); + check(scaleByteOffset % 4 == 0, "qkv attention scale offset"); + uint32_t windowsX = (width + shiftX + 7) / 8, windowsY = (height + shiftY + 7) / 8; + uint32_t windows = windowsX * windowsY; + if (ptxQkvEnabled()) { + // PTX kernel (scripts/ptx/qkv_e4m3.py): grid (heads, windows), 128 threads per (window, head). + const std::string entry = "qkv_e4m3_K" + std::to_string(heads * 32); + PtxKernel& kernel = ptxKernel(entry + ".ptx", entry); + VkDeviceAddress pState = context_.deviceAddress(input.buffer), pW = context_.deviceAddress(weights), + pPrior = context_.deviceAddress(prior), pAux = context_.deviceAddress(tensor.raw), + pOut = context_.deviceAddress(attended.buffer); + const uint32_t qkvGroups = 12 * context_.smCount(); // persistent, each walking (window, head) items + uint32_t w = width, h = height, sx = shiftX, sy = shiftY, wxs = windowsX, scaleWord = scaleByteOffset / 4, wc = windows, + items = heads * windows; + VkDeviceAddress pWait = chain.waitBands, pSignal = chain.signal; + uint32_t waitMul = chain.waitMul, waitGroupRows = chain.waitGroupRows; + VkDeviceAddress pError = chainStatusAddress(); + const void* params[] = {&pState, &pW, &pPrior, &pAux, &pOut, &w, &h, &sx, &sy, &wxs, &scaleWord, &wc, &items, &pWait, &pSignal, &waitMul, &waitGroupRows, &pError}; + dispatchLabel_ = "qkv_ptx " + std::to_string(windows) + "w x" + std::to_string(heads) + " K" + std::to_string(heads * 32); + check((heads & (heads - 1)) == 0 && windows * heads < (1u << 24), "PTX qkv item indexing"); + noteChain(pWait, 0, pSignal); + cudaLaunchTracked(commands, kernel.function, std::min(items, qkvGroups), 1, 1, 128, 0, params, 18, chain.chained); + return; + } + check(!chain.waitBands && !chain.waitRows && !chain.signal && !chain.chained, + "the GLSL fused QKV + attention does not implement counter chaining"); + struct Push { uint32_t width, height, channels, heads, shiftX, shiftY, windowsX, windowCount, scaleWordOffset, Nmatrix; } + push{width, height, heads * 32, heads, shiftX, shiftY, windowsX, windows, scaleByteOffset / 4, Nmatrix}; + vk::SpecConstants constants; + constants.add(0, heads * 32); + const vk::Buffer* bindings[vk::kGenericBindings] = {}; + bindings[0] = &input.buffer; + bindings[1] = &weights; + bindings[2] = &prior; + bindings[4] = &tensor.raw; + bindings[5] = &attended.buffer; + dispatchLabel_ = "qkv_attention " + std::to_string(windows) + "w x" + std::to_string(heads) + " K" + std::to_string(heads * 32); + dispatch(commands, pipeline("qkv_attention", constants), bindings, &push, sizeof(push), heads, + std::min(windows, 65535u), (windows + 65534) / 65535); +} + +void Kernels::windowNormalize(VkCommandBuffer commands, const Activation& qkv, const Tensor& tensor, + uint32_t scaleByteOffset, Activation& normalized, uint32_t tokens, uint32_t heads) { + check(qkv.format == Format::F16 && normalized.format == Format::E4, "normalize formats"); + check(qkv.channels == heads * 96 && normalized.channels == heads * 96, "normalize channels"); + struct Push { uint32_t tokens, heads, channels, scaleWordOffset; } push{tokens, heads, heads * 32, scaleByteOffset / 4}; + const vk::Buffer* bindings[vk::kGenericBindings] = {}; + bindings[1] = &qkv.buffer; + bindings[4] = &tensor.raw; + bindings[5] = &normalized.buffer; + dispatchLabel_ = "window_normalize " + std::to_string(tokens) + "x" + std::to_string(heads); + dispatchLinear(commands, pipeline("window_normalize", {}), bindings, &push, sizeof(push), tokens * heads); +} + +void Kernels::windowAttend(VkCommandBuffer commands, const Activation& normalized, const vk::Buffer& prior, + Activation& attended, uint32_t width, uint32_t height, uint32_t heads, uint32_t shiftX, + uint32_t shiftY) { + check(normalized.format == Format::E4 && attended.format == Format::E4, "attend formats"); + check(attended.channels == heads * 32, "attend channels"); + uint32_t windowsX = (width + shiftX + 7) / 8; + uint32_t windowsY = (height + shiftY + 7) / 8; + uint32_t windows = windowsX * windowsY; + struct Push { uint32_t width, height, channels, heads, shiftX, shiftY, windowsX, windowCount; } + push{width, height, heads * 32, heads, shiftX, shiftY, windowsX, windows}; + const vk::Buffer* bindings[vk::kGenericBindings] = {}; + bindings[0] = &normalized.buffer; + bindings[1] = &prior; + bindings[5] = &attended.buffer; + dispatchLabel_ = "window_attend " + std::to_string(windows) + "w x" + std::to_string(heads); + dispatch(commands, pipeline("window_attend", {}), bindings, &push, sizeof(push), heads, std::min(windows, 65535u), + (windows + 65534) / 65535); +} + +bool Kernels::ptxGlobalAttentionEnabled() { + static const bool enabled = getenv("DLSS5VK_PTX_ATTN") ? atoi(getenv("DLSS5VK_PTX_ATTN")) != 0 : true; + return enabled; +} + +bool Kernels::globalAttentionPtx(uint32_t paddedTokens, const Activation* normalized) const { + return ptxGlobalAttentionEnabled() && !normalized && paddedTokens <= 256; +} + +// DLSS5VK_ATTN_STREAM: -1 (default) streamed route for padded > 256 (the resident kernel below), 1 always, 0 never. +bool Kernels::globalAttentionStreamPtx(uint32_t paddedTokens) const { + static const int mode = getenv("DLSS5VK_ATTN_STREAM") ? atoi(getenv("DLSS5VK_ATTN_STREAM")) : -1; + if (!ptxGlobalAttentionEnabled() || mode == 0) return false; + if (mode < 0 && paddedTokens <= 256) return false; + static const bool available = std::ifstream(ptxDirectory_ + "/global_attention_stream_e4m3.ptx").good() && + std::ifstream(ptxDirectory_ + "/global_normalize_e4m3.ptx").good(); + return available; +} + +void Kernels::globalNormalizePtx(VkCommandBuffer commands, const Activation& qkv, const Tensor& tensor, uint32_t scaleByteOffset, + Activation& normalized, uint32_t tokens, uint32_t paddedTokens, uint32_t heads, const Chain* chain) { + check(qkv.format == Format::F16 && qkv.channels == heads * 96 && normalized.format == Format::E4 && + (VkDeviceSize)normalized.allocRows * normalized.channels >= (VkDeviceSize)3 * heads * paddedTokens * 32, + "global normalize (PTX) formats"); + check(paddedTokens % 64 == 0 && paddedTokens >= tokens && scaleByteOffset % 4 == 0, "global normalize (PTX) tokens"); + const std::string entry = "global_normalize_e4m3"; + PtxKernel& kernel = ptxKernel(entry + ".ptx", entry); + VkDeviceAddress pQkv = context_.deviceAddress(qkv.buffer), pAux = context_.deviceAddress(tensor.raw), pOut = context_.deviceAddress(normalized.buffer); + VkDeviceAddress pWait = chain ? chain->waitRows : 0, pSignal = chain ? chain->signal : 0; + uint32_t tok = tokens, pad = paddedTokens, h = heads, scaleWord = scaleByteOffset / 4, waitExpected = chain ? chain->waitExpected : 0; + VkDeviceAddress pError = chainStatusAddress(); + const void* params[] = {&pQkv, &pAux, &pOut, &tok, &pad, &h, &scaleWord, &pWait, &waitExpected, &pSignal, &pError}; + dispatchLabel_ = "global_normalize_ptx " + std::to_string(tokens) + "t x" + std::to_string(heads); + noteChain(pWait, 0, pSignal); + cudaLaunchTracked(commands, kernel.function, paddedTokens / 64, heads, 1, 64, 0, params, 11, chain && chain->chained); +} + +void Kernels::globalAttentionStream(VkCommandBuffer commands, const Activation& normalized, Activation& attended, uint32_t tokens, + uint32_t paddedTokens, uint32_t heads, const Chain* chain) { + check(normalized.format == Format::E4 && attended.format == Format::E4 && attended.channels == heads * 32, "global attention (stream) formats"); + check(paddedTokens % 64 == 0 && paddedTokens >= tokens && attended.allocRows >= tokens, "global attention (stream) tokens"); + const std::string entry = "global_attention_stream_e4m3"; + PtxKernel& kernel = ptxKernel(entry + ".ptx", entry); + VkDeviceAddress pNorm = context_.deviceAddress(normalized.buffer), pOut = context_.deviceAddress(attended.buffer); + VkDeviceAddress pWait = chain ? chain->waitRows : 0, pSignal = chain ? chain->signal : 0; + uint32_t tok = tokens, pad = paddedTokens, h = heads, waitExpected = chain ? chain->waitExpected : 0; + VkDeviceAddress pError = chainStatusAddress(); + const void* params[] = {&pNorm, &pOut, &tok, &pad, &h, &pWait, &waitExpected, &pSignal, &pError}; + dispatchLabel_ = "global_attention_stream_ptx " + std::to_string(tokens) + "t x" + std::to_string(heads); + noteChain(pWait, 0, pSignal); + cudaLaunchTracked(commands, kernel.function, heads, paddedTokens / 64, 1, 128, 0, params, 9, chain && chain->chained); +} + +void Kernels::globalAttention(VkCommandBuffer commands, const Activation& qkv, const Tensor& tensor, uint32_t scaleByteOffset, + Activation& attended, uint32_t tokens, uint32_t paddedTokens, uint32_t heads, + const Activation* normalized, const Chain* chain) { + check(qkv.format == Format::F16 && qkv.channels == heads * 96 && attended.format == Format::E4 && + attended.channels == heads * 32, "global attention formats"); + check(paddedTokens % 64 == 0 && paddedTokens >= tokens && qkv.allocRows >= tokens, "global attention tokens"); + check(scaleByteOffset % 4 == 0, "global attention scale offset"); + // PTX route (scripts/ptx/global_attention_e4m3.py): one workgroup per (head, 64-query block), counter chaining. + if (globalAttentionPtx(paddedTokens, normalized)) { + const std::string entry = "global_attention_e4m3_p" + std::to_string(paddedTokens); + PtxKernel& kernel = ptxKernel(entry + ".ptx", entry); + VkDeviceAddress pQkv = context_.deviceAddress(qkv.buffer), pAux = context_.deviceAddress(tensor.raw), pOut = context_.deviceAddress(attended.buffer); + VkDeviceAddress pWait = chain ? chain->waitRows : 0, pSignal = chain ? chain->signal : 0; + uint32_t tok = tokens, h = heads, scaleWord = scaleByteOffset / 4, waitExpected = chain ? chain->waitExpected : 0; + VkDeviceAddress pError = chainStatusAddress(); + const void* params[] = {&pQkv, &pAux, &pOut, &tok, &h, &scaleWord, &pWait, &waitExpected, &pSignal, &pError}; + check(kernel.dynamicShared, "global attention PTX without a dynamic_shared size"); + dispatchLabel_ = "global_attention_ptx " + std::to_string(tokens) + "t x" + std::to_string(heads); + noteChain(pWait, 0, pSignal); + cudaLaunchTracked(commands, kernel.function, heads, paddedTokens / 64, 1, 128, kernel.dynamicShared, params, 10, chain && chain->chained); + return; + } + // Keys are staged in chunks of 256 tokens (16 KB); beyond one chunk the q/k/v are normalized once by + // global_normalize (an E4 [padded][heads*96] buffer) instead of once per query block. + const bool prenormalized = normalized != nullptr; + const uint32_t chunk = std::min(paddedTokens, 256u); + check(!prenormalized || (normalized->format == Format::E4 && normalized->allocRows >= paddedTokens), "global attention normalized buffer"); + vk::SpecConstants constants; + constants.add(0, paddedTokens); + constants.add(1, chunk); + constants.add(2, prenormalized ? 1u : 0u); + struct Push { uint32_t tokens, heads, channels, scaleWordOffset; } push{tokens, heads, heads * 32, scaleByteOffset / 4}; + const vk::Buffer* bindings[vk::kGenericBindings] = {}; + bindings[0] = prenormalized ? &normalized->buffer : &qkv.buffer; + bindings[4] = &tensor.raw; + bindings[5] = &attended.buffer; + dispatchLabel_ = "global_attention " + std::to_string(tokens) + "t x" + std::to_string(heads) + (prenormalized ? " pre" : ""); + dispatch(commands, pipeline("global_attention", constants), bindings, &push, sizeof(push), heads, paddedTokens / 64, 1); +} + +void Kernels::globalNormalize(VkCommandBuffer commands, const Activation& qkv, const Tensor& tensor, + uint32_t scaleByteOffset, Activation& normalized, uint32_t tokens, uint32_t heads) { + check(qkv.format == Format::F16 && normalized.format == Format::E4, "global normalize formats"); + struct Push { uint32_t tokens, heads, channels, scaleWordOffset; } push{tokens, heads, heads * 32, scaleByteOffset / 4}; + const vk::Buffer* bindings[vk::kGenericBindings] = {}; + bindings[1] = &qkv.buffer; + bindings[4] = &tensor.raw; + bindings[5] = &normalized.buffer; + dispatchLabel_ = "global_normalize"; + dispatchLinear(commands, pipeline("global_normalize", {}), bindings, &push, sizeof(push), tokens * heads); +} + +void Kernels::globalAttend(VkCommandBuffer commands, const Activation& normalized, Activation& attended, + uint32_t tokens, uint32_t paddedTokens, uint32_t heads) { + check(normalized.format == Format::E4 && attended.format == Format::E4, "global attend formats"); + check(paddedTokens % 64 == 0 && paddedTokens >= tokens && normalized.allocRows >= paddedTokens, "global attend tokens"); + vk::SpecConstants constants; + constants.add(0, paddedTokens); + struct Push { uint32_t tokens, heads, channels; } push{tokens, heads, heads * 32}; + const vk::Buffer* bindings[vk::kGenericBindings] = {}; + bindings[0] = &normalized.buffer; + bindings[5] = &attended.buffer; + dispatchLabel_ = "global_attend"; + dispatch(commands, pipeline("global_attend", constants), bindings, &push, sizeof(push), heads, paddedTokens / 16, 1); +} + +} // namespace nr diff --git a/third_party/opendlss-nr/src/kernels.h b/third_party/opendlss-nr/src/kernels.h new file mode 100644 index 000000000..472bd3631 --- /dev/null +++ b/third_party/opendlss-nr/src/kernels.h @@ -0,0 +1,288 @@ +// Compute kernel wrappers: pipeline specialization cache plus dispatch helpers with the exact operand contracts +// of the network (GLSL cooperative-matrix reference kernels and the PTX kernels of scripts/ptx/). +#pragma once +#include +#include +#include + +#include "nr_model.h" +#include "vk_context.h" + +namespace nr { + +enum class Format { E4, F16, F32 }; + +inline uint32_t formatBytes(Format format) { return format == Format::E4 ? 1 : format == Format::F16 ? 2 : 4; } +inline uint32_t alignRows(uint32_t rows) { return (rows + 63) & ~63u; } + +// A [rows][channels] activation tensor. Rows are allocated padded to 64 so +// cooperative-matrix A loads never leave the buffer. +struct Activation { + vk::Buffer buffer; + Format format = Format::E4; + uint32_t rows = 0; + uint32_t channels = 0; + uint32_t allocRows = 0; + std::string label; + VkDeviceSize validBytes() const { return (VkDeviceSize)rows * channels * formatBytes(format); } +}; + +struct GemmFp8Args { + const Activation* input = nullptr; + uint32_t inputColumnBase = 0; // added for every batch + const vk::Buffer* weights = nullptr; // plain [batches*K][Nmatrix] E4M3 + uint32_t Nmatrix = 0; + uint32_t weightColumnOffset = 0; + Activation* output = nullptr; // F16 unless quantize (E4) + uint32_t outputColumnOffset = 0; + Activation* dualOutput = nullptr; // E4 copy of the published value + const Activation* residual = nullptr; + bool scaleResidual = false; + const Tensor* auxTensor = nullptr; + uint32_t auxByteOffset = 0; + bool silu = false; + bool quantize = true; + uint32_t rows = 0, K = 0, N = 0; + uint32_t batches = 1; + bool broadcastInput = false; + uint32_t partition = 0; // 0 or 256/512/1024 (split-K modes) + // PTX path chaining (see Kernels::Chain): wait on window rows, signal row bands, no barrier after the launch. + VkDeviceAddress chainWaitRows = 0; uint32_t chainWaitExpected = 0, chainWaitShiftY = 0, chainWidth = 0; + VkDeviceAddress chainWaitBands = 0; uint32_t chainWaitMul = 1; // row-band counters of the A / residual producer, its signals per row group + uint32_t chainWaitGroupRows = 64; // the producer's rows per workgroup (its signals cover whole workgroups) + VkDeviceAddress chainSignal = 0; bool chained = false; + bool chainSingle = false; // chainWaitRows / chainSignal are single completion counters (the ViT GEMM route) +}; + +struct GemmF16Args { + const Activation* input = nullptr; // F16 + const vk::Buffer* weights = nullptr; // plain [K][paddedN] f16 + uint32_t paddedN = 0; + Activation* output = nullptr; // F16 / E4 / F32 by format + Activation* dualOutput = nullptr; // E4 + uint32_t rows = 0, K = 0, N = 0; +}; + +class Kernels { + public: + Kernels(vk::Context& context, const std::string& shaderDirectory); + ~Kernels(); + + void gemmFp8(VkCommandBuffer commands, const GemmFp8Args& args); + void gemmF16(VkCommandBuffer commands, const GemmF16Args& args); + static bool ptxGemmEnabled(); // the gemm2 PTX route (DLSS5VK_PTX_GEMM, default on) + static bool ptxQkvEnabled(); // the fused QKV + window attention PTX route (DLSS5VK_PTX_QKV, default on) + + struct PreprocessArgs { + uint32_t fullWidth, fullHeight, validWidth, validHeight, sourceWidth, sourceHeight, seed; + bool autoMask; + float localTone, localStructure, skinStructure, style; + }; + // Input features from an RGBA f32 proxy image (display code values). + void preprocessFromProxy(VkCommandBuffer commands, const vk::Buffer& proxy, Activation& features, + const PreprocessArgs& args); + void convertF32ToF16(VkCommandBuffer commands, const Activation& input, Activation& output); + void quantize(VkCommandBuffer commands, const Activation& input, Activation& output); + void downsample2x(VkCommandBuffer commands, const Activation& input, Activation& output, uint32_t inWidth, + uint32_t inHeight, uint32_t outWidth, uint32_t outHeight); + // learned_post_blend: raw f16 and E4 copies of up*inputScale + adapter*skipScale. + void postBlend(VkCommandBuffer commands, const Activation& upsampleSource, const Activation& adapter, + const Tensor& tensor, uint32_t inputScaleByteOffset, uint32_t skipScaleByteOffset, + Activation& rawOutput, Activation& quantizedOutput, uint32_t inWidth, uint32_t inHeight, + uint32_t outWidth, uint32_t outHeight); + // Decoder transition: E4 (and optionally raw f16) of round_f16(projection[low] + skip * scale). + void upsampleResidual(VkCommandBuffer commands, const Activation& projection, const Activation& skip, + const Tensor& tensor, uint32_t scaleByteOffset, Activation& output, Activation* rawOutput, + uint32_t inWidth, uint32_t inHeight, uint32_t outWidth, uint32_t outHeight); + + // Fused 32-channel Swin block: one dispatch per block (see fused_block32.comp). + struct FusedBlock32Args { + // Pre / post fusion (block 0 / block 70): the input adapter, the post blend and the RGBA head in the block. + const Activation* features = nullptr; // F_PRE: f32 [tokens][16] input features (replaces state / skip16) + const vk::Buffer* adapterWeights = nullptr; // F_PRE: f16 [16][32] (f16Matrix layout 1) + const Activation* lowRes = nullptr; // F_POST: half-resolution E4 block output (state = block-0 output) + const Activation* lowProjection = nullptr; // F_UPRES: half-resolution f16 projection (state = E4 skip, scaled by inputScale) + uint32_t inputScaleByteOffset = 0, adapterScaleByteOffset = 0, lowWidth = 0; // F_POST + const vk::Buffer* headWeights = nullptr; // F_HEAD: f16 [32][16] (f16Matrix layout 2, padded) + Activation* head = nullptr; // F_HEAD: f32 [tokens][4] output (replaces outF16) + Activation* pooled = nullptr; // F_POOL: E4 half-resolution 2x2 box pool of the raw output (replaces outF16) + uint32_t pooledWidth = 0; + const Activation* state = nullptr; // E4 [tokens][32] + const Activation* skip16 = nullptr; // optional f16 FFN skip (else the state) + const vk::Buffer* w1 = nullptr; // [32][128] + const vk::Buffer* w2 = nullptr; // [128][32] + const vk::Buffer* w1Ptx = nullptr; // PTX path: W1 with the hidden permutation (mlpHiddenPermutation), tile-major + const vk::Buffer* w2Ptx = nullptr; // PTX path: W2 tile-major [4][32][32] + const vk::Buffer* wqkv = nullptr; // [32][96] + const vk::Buffer* wproj = nullptr; // [32][32] + const vk::Buffer* prior = nullptr; // [64][64] f16 + const Tensor* tensor = nullptr; + uint32_t ffnScaleByteOffset = 0, attnScaleByteOffset = 0, attentionScaleByteOffset = 0; + Activation* outE4 = nullptr; + Activation* outF16 = nullptr; + uint32_t width = 0, height = 0, shiftX = 0, shiftY = 0; + // chaining (PTX path): wait on the producer block's window rows, signal this block's, no barrier after the launch + VkDeviceAddress chainWait = 0; uint32_t chainWaitExpected = 0, chainWaitShiftY = 0, chainWaitScale = 0; + VkDeviceAddress chainSignal = 0; bool chained = false; + }; + void fusedBlock32(VkCommandBuffer commands, const FusedBlock32Args& args); + // PTX (VK_NV_cuda_kernel_launch) version of the fused 32-channel block (scripts/ptx/block32_e4m3.py). + static bool ptxBlock32Enabled(); + // Whether these arguments take the PTX route (only PTX launches take part in counter chaining): the f16 skip and + // raw-output variants of the block are GLSL only. + static bool fusedBlock32IsPtx(const FusedBlock32Args& args); + static bool ptxGemmVEnabled(); // the ViT GEMM PTX route (DLSS5VK_PTX_GEMMV, default on; implies ptxGemmEnabled) + static uint32_t vitGemmTileRows(uint32_t rows); // 192 or 96 + static uint32_t vitGemmSignals(uint32_t rows, uint32_t N); // chain signals of a gemmv launch: one per published tile + void fusedBlock32Ptx(VkCommandBuffer commands, const FusedBlock32Args& args); + + // Split-K partial sums (one fixed scratch: launches already recorded hold its address). + vk::Buffer splitScratch_{}; + VkDeviceSize splitScratchBytes_ = 0; + + // Fused two-layer MLP (gemm_mlp.comp / mlp_e4m3.py): E4(E4(SiLU(A W1)) W2) per batch, hidden on chip. + struct MlpArgs { + const Activation* input = nullptr; + uint32_t inputColumnBase = 0; + bool broadcastInput = false; + const vk::Buffer* w1 = nullptr; // tile-major [batch][K/32][hidden][32] + const vk::Buffer* w2 = nullptr; // N-major [batch][nout][hidden] (fp8Matrix tileMajor = false) + Activation* output = nullptr; // E4, columns outputColumnOffset + batch * nout + uint32_t outputColumnOffset = 0; + uint32_t rows = 0, K = 0, hidden = 0, nout = 0, batches = 1; + }; + void gemmMlp(VkCommandBuffer commands, const MlpArgs& args); + // PTX (VK_NV_cuda_kernel_launch) version of the expert MLP: mlp_e4m3.py. W1 columns permuted with + // mlpHiddenPermutation() (register-resident hidden layer), W2 tile-major per expert. + void mlpPtx(VkCommandBuffer commands, const MlpArgs& args); + static std::vector mlpHiddenPermutation(uint32_t hidden = 128); + struct PtxKernel { VkCudaModuleNV module = VK_NULL_HANDLE; VkCudaFunctionNV function = VK_NULL_HANDLE; uint32_t dynamicShared = 0, threads = 0; }; + std::map ptxKernels_; + PtxKernel& ptxKernel(const std::string& file, const std::string& entry); + std::string ptxDirectory_; + + // Barrier-free chaining of consecutive PTX launches: producers increment per-frame dependency counters after their + // stores, consumers spin on them (see swin.py sync_wait / sync_signal). Counter slots per block in syncBuffer_: + // row bands of the FFN output (kSyncBands), window rows of the attention output (kSyncRows), row bands of the + // projection output = the next block's state (kSyncState). A launch marked `chained` omits the compute barrier. + static bool chainEnabled(); + static void setChainEnabled(bool on); + enum SyncRegion { kSyncBands = 0, kSyncRows = 1, kSyncState = 2 }; + // Counters within a region are indexed by pixel-row band (row / 8) or by window row, so the region bounds the + // field height a chain can cover. + static constexpr uint32_t kSyncRegionBytes = 2048, kSyncCountersPerRegion = kSyncRegionBytes / 4; + VkDeviceAddress syncAddress(int block, SyncRegion region); + void resetSync(VkCommandBuffer commands); // zero the counters (top of every frame) + // Every counter wait of a recording must be on counters an earlier launch of the same recording signals, and on + // none the waiting launch signals itself: the chain is a forward DAG. Graph::record checks it every time. + void checkChainOrder() const; + // A wait that outlives swin.WAIT_LIMIT_NS gives up instead of hanging (the frame completes with wrong bytes) and + // records itself in a host-visible word that only resetChainTimeouts() clears; read it once the frame is done. + struct ChainTimeouts { uint32_t waits = 0; std::string counter; }; // counter: where the first stuck wait was + ChainTimeouts chainTimeouts() const; + void resetChainTimeouts(); + struct Chain { + VkDeviceAddress waitRows = 0; uint32_t waitExpected = 0, waitShiftY = 0; // window-row counters (attention output) + VkDeviceAddress waitBands = 0; uint32_t waitMul = 1, waitGroupRows = 64; // row-band counters (FFN / projection output), signals per row group, the producer's rows per workgroup + VkDeviceAddress signal = 0; // counters to increment + bool chained = false; // no barrier after this launch + }; + struct ExpertFfnArgs { + const Activation* input = nullptr; // block state, E4 [rows][channels]; also the skip + const vk::Buffer* w1 = nullptr; // tile-major [expert][channels/32][128][32] + const vk::Buffer* w2 = nullptr; // N-major [expert][32][128] + const vk::Buffer* w3 = nullptr; // tile-major [channels/32][channels][32] + const Tensor* auxTensor = nullptr; // ffn skip scale halves at auxByteOffset + uint32_t auxByteOffset = 0; + Activation* output = nullptr; // E4 [rows][channels] + uint32_t rows = 0, channels = 0; + // PTX proj fusion: the previous block's projection (attended x wproj + ffnPrev * attn scale) computed in the + // kernel as the block state (input == nullptr use); attended / ffnPrev E4 [rows][channels]. + const Activation* attended = nullptr; + const Activation* ffnPrev = nullptr; + const vk::Buffer* wproj = nullptr; // tile-major [channels/32][channels][32] + const Tensor* auxTensorPrev = nullptr; // the previous block's tensor (its attention skip scales) + uint32_t auxAttnByteOffset = 0; + Activation* stateOut = nullptr; // optional: also write the computed block state (parity captures) + uint32_t width = 0; // tokens per pixel row (chaining row-band math) + }; + // Expert FFN + W3 in one PTX kernel (scripts/ptx/ffn_e4m3.py): w1 permuted tile-major [e][K/32][128][32], + // w2 tile-major [e][4][32][32], w3 tile-major [K/32][K][32]. + static bool ptxFfnEnabled(); + static uint32_t ffnRowTiles(uint32_t channels); // PTX expert FFN: 16-row tiles per workgroup (its chaining signals cover 16 * tiles rows) + void expertFfnPtx(VkCommandBuffer commands, const ExpertFfnArgs& args, const Chain& chain = Chain()); + + // Fused QKV projection + normalize + attention (qkv_attention.comp): E4 input in, E4 attended out. + void qkvAttention(VkCommandBuffer commands, const Activation& input, const vk::Buffer& weights, uint32_t Nmatrix, + const Tensor& tensor, uint32_t scaleByteOffset, const vk::Buffer& prior, Activation& attended, + uint32_t width, uint32_t height, uint32_t heads, uint32_t shiftX, uint32_t shiftY, + const Chain& chain = Chain()); + void windowNormalize(VkCommandBuffer commands, const Activation& qkv, const Tensor& tensor, + uint32_t scaleByteOffset, Activation& normalized, uint32_t tokens, uint32_t heads); + void windowAttend(VkCommandBuffer commands, const Activation& normalized, const vk::Buffer& prior, + Activation& attended, uint32_t width, uint32_t height, uint32_t heads, uint32_t shiftX, + uint32_t shiftY); + // Fused ViT normalize + global attention (global_attention.comp): raw half QKV in, E4 attended out. + void globalAttention(VkCommandBuffer commands, const Activation& qkv, const Tensor& tensor, uint32_t scaleByteOffset, + Activation& attended, uint32_t tokens, uint32_t paddedTokens, uint32_t heads, + const Activation* normalized = nullptr, const Chain* chain = nullptr); // normalized: E4 q/k/v from globalNormalize (large token counts) + static bool ptxGlobalAttentionEnabled(); + bool globalAttentionPtx(uint32_t paddedTokens, const Activation* normalized) const; // the PTX route applies + // Streamed PTX route for any token count (global_attention_stream_e4m3.py): normalize once per (token, head) + // into the per-head E4 layout, then attention with the key blocks streamed through shared memory. + bool globalAttentionStreamPtx(uint32_t paddedTokens) const; + void globalNormalizePtx(VkCommandBuffer commands, const Activation& qkv, const Tensor& tensor, uint32_t scaleByteOffset, + Activation& normalized, uint32_t tokens, uint32_t paddedTokens, uint32_t heads, const Chain* chain); + void globalAttentionStream(VkCommandBuffer commands, const Activation& normalized, Activation& attended, uint32_t tokens, + uint32_t paddedTokens, uint32_t heads, const Chain* chain); + void globalNormalize(VkCommandBuffer commands, const Activation& qkv, const Tensor& tensor, + uint32_t scaleByteOffset, Activation& normalized, uint32_t tokens, uint32_t heads); + void globalAttend(VkCommandBuffer commands, const Activation& normalized, Activation& attended, uint32_t tokens, + uint32_t paddedTokens, uint32_t heads); + + uint32_t dispatchCount() const { return dispatches_; } + void resetDispatchCount() { dispatches_ = 0; tileCounterCursor_ = 0; } + // Per-frame zeroed tile counters (split-K last-arrival reduction), carved from the sync buffer's spare slots. + VkDeviceAddress tileCounters(uint32_t count); + // Optional per-dispatch profiling: timestamps after every dispatch with a label. + void beginProfile(VkCommandBuffer commands, uint32_t maxDispatches); + struct ProfileEntry { std::string label; double milliseconds; }; + std::vector endProfile(); // call after the queue is idle + void setStageLabel(const std::string& label) { stageLabel_ = label; } + const std::map& pipelines() const { return pipelines_; } + // Replace the SiLU table (65536 f16 codes indexed by f16 input bits). + void setSiluTable(const std::vector& table); + + private: + // requiredSubgroupSize 0: no subgroup requirement (kernels without subgroup operations and a workgroup that is not a + // multiple of 32) + VkPipeline pipeline(const char* shader, const vk::SpecConstants& constants, uint32_t requiredSubgroupSize = 32); + void dispatch(VkCommandBuffer commands, VkPipeline pipeline, const vk::Buffer* const bindings[vk::kGenericBindings], + const void* push, uint32_t pushBytes, uint32_t x, uint32_t y, uint32_t z); + void cudaLaunchTracked(VkCommandBuffer commands, VkCudaFunctionNV function, uint32_t gridX, uint32_t gridY, + uint32_t gridZ, uint32_t blockX, uint32_t sharedBytes, const void* const* params, size_t paramCount, + bool chained = false); + vk::Buffer syncBuffer_{}; + static constexpr uint32_t kSyncSlotBytes = 6144, kSyncSlots = 96, kTileCounterSlot = 72; // slots >= 72 hold tile counters + uint32_t tileCounterCursor_ = 0; + vk::Buffer chainStatus_{}; // host-visible: [0] waits that timed out, [1] low 32 bits of the first stuck counter's address + VkDeviceAddress chainStatusAddress(); + struct ChainLaunch { std::string label; VkDeviceAddress waits[2]; VkDeviceAddress signal; }; + std::vector chainLaunches_; // this recording's PTX launches with counters, in order + void noteChain(VkDeviceAddress waitA, VkDeviceAddress waitB, VkDeviceAddress signal); + void dispatchLinear(VkCommandBuffer commands, VkPipeline pipeline, + const vk::Buffer* const bindings[vk::kGenericBindings], const void* push, uint32_t pushBytes, + uint32_t count); + vk::Context& context_; + std::map modules_; + std::map pipelines_; + vk::Buffer siluTable_; + uint32_t dispatches_ = 0; + VkQueryPool profileQueries_ = VK_NULL_HANDLE; + uint32_t profileCapacity_ = 0, profileCount_ = 0; + std::vector profileLabels_; + std::string stageLabel_; + std::string dispatchLabel_; +}; + +} // namespace nr diff --git a/third_party/opendlss-nr/src/main.cpp b/third_party/opendlss-nr/src/main.cpp new file mode 100644 index 000000000..6d57e3a77 --- /dev/null +++ b/third_party/opendlss-nr/src/main.cpp @@ -0,0 +1,759 @@ +// dlss5vk: standalone Vulkan DLSS-NR runner. +// dlss5vk parity --model --fixture [--repeat N] [--shaders ] [--dump ] +// dlss5vk bench --model --width W --height H [--frames N] +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "json.h" +#include "kernels.h" +#include "nr_graph.h" +#include "nr_model.h" +#include "numeric.h" +#include "reference.h" +#include "vk_context.h" + +namespace { + +std::vector readFile(const std::string& path) { + std::ifstream file(path, std::ios::binary | std::ios::ate); + if (!file) throw std::runtime_error("cannot read " + path); + std::streamsize size = file.tellg(); + file.seekg(0); + std::vector bytes((size_t)size); + file.read(reinterpret_cast(bytes.data()), size); + return bytes; +} + +std::string readText(const std::string& path) { + std::vector bytes = readFile(path); + return std::string(bytes.begin(), bytes.end()); +} + +std::string argValue(int argc, char** argv, const char* name, const std::string& fallback = "") { + for (int i = 1; i + 1 < argc; ++i) if (!strcmp(argv[i], name)) return argv[i + 1]; + return fallback; +} + +bool hasFlag(int argc, char** argv, const char* name) { + for (int i = 1; i < argc; ++i) if (!strcmp(argv[i], name)) return true; + return false; +} + +std::string executableDirectory(const char* argv0) { + std::string path = argv0; + size_t slash = path.find_last_of("/\\"); + return slash == std::string::npos ? "." : path.substr(0, slash); +} + +// After a frame: a chained wait that gave up means its output is wrong (docs/execution.md, "Barrier-free chaining"). +void checkChainTimeouts(const nr::Kernels& kernels) { + const nr::Kernels::ChainTimeouts timeouts = kernels.chainTimeouts(); + if (timeouts.waits) + throw std::runtime_error(std::to_string(timeouts.waits) + " chained wait(s) timed out, the first on " + timeouts.counter + + ": the frame is invalid (DLSS5VK_CHAIN=0 runs without chaining)"); +} + +// DLSS5VK_UNFUSED=1 runs the least fused form of the graph (the GLSL reference kernels). +static bool fusedBlocksEnabled() { + const char* unfused = getenv("DLSS5VK_UNFUSED"); + return !(unfused && !strcmp(unfused, "1")); +} + +// ---- parity ---------------------------------------------------------------------------------------------------- +// A fixture declares the comparisons it exists for ("checks") and carries one reference per comparison. The whole +// declaration is validated before the GPU runs and nothing is ever dropped from a count: a declared check that +// cannot run, a missing, malformed or unknown reference, or a reference no declared check uses rejects the fixture. +// Every verdict names the equality it proved (docs/numerics.md): bit-exact, equal only up to the sign of zero (a +// failure: not the same bytes), or within a stated tolerance. + +struct BoundaryReference { std::string name, file; uint32_t width = 0, height = 0, channels = 0; }; + +struct FixturePlan { + uint32_t validWidth = 0, validHeight = 0, fullWidth = 0, fullHeight = 0; + std::string proxyFile, featuresFile; + uint32_t proxyWidth = 0, proxyHeight = 0; + bool checkBoundaries = false, checkHead = false, checkOutput = false; + std::vector boundaries; // graph order + std::vector> omitted; // boundary, why the fixture has no reference for it + std::string headFile, outputFile; + bool outputBytes = false; // an RGBA8 image (a tolerance check), not RGBA f32 halves +}; + +int64_t fileSize(const std::string& path) { + std::error_code error; + const uintmax_t size = std::filesystem::file_size(path, error); + return error ? -1 : (int64_t)size; +} + +FixturePlan planFixture(const json::Value& manifest, const std::string& fixtureDir) { + FixturePlan plan; + std::vector problems; + auto fail = [&](const std::string& text) { problems.push_back(text); }; + auto dims = [&](const char* key, uint32_t& width, uint32_t& height) { + if (!manifest.has(key) || manifest[key].kind != json::Value::Array || manifest[key].size() != 2) { + fail(std::string("\"") + key + "\" must be [width, height]"); + return; + } + width = (uint32_t)manifest[key][0].integer(); height = (uint32_t)manifest[key][1].integer(); + }; + auto positive = [&](const std::string& what, const json::Value& entry, const char* key) -> uint32_t { + if (!entry.has(key) || entry[key].integer() <= 0) { fail(what + ": \"" + key + "\" missing or not positive"); return 0; } + return (uint32_t)entry[key].integer(); + }; + // A reference file must exist and hold exactly the bytes its shape says. + auto reference = [&](const std::string& what, const json::Value& entry, int64_t bytes) -> std::string { + if (!entry.has("file") || entry["file"].str().empty()) { fail(what + ": no \"file\""); return ""; } + const std::string path = fixtureDir + "/" + entry["file"].str(); + const int64_t size = fileSize(path); + if (size < 0) fail(what + ": cannot read " + path); + else if (size != bytes) fail(what + ": " + path + " holds " + std::to_string(size) + " bytes, its shape needs " + std::to_string(bytes)); + return path; + }; + dims("sourceDimensions", plan.validWidth, plan.validHeight); + dims("fullDimensions", plan.fullWidth, plan.fullHeight); + const int64_t fullRows = (int64_t)plan.fullWidth * plan.fullHeight; + + // The input: the proxy image the features are generated from, or the recorded features themselves. + if (manifest.has("proxy") == manifest.has("inputFeatures")) fail("exactly one of \"proxy\" and \"inputFeatures\" is the input"); + if (manifest.has("proxy")) { + const json::Value& proxy = manifest["proxy"]; + plan.proxyWidth = positive("proxy", proxy, "width"); + plan.proxyHeight = positive("proxy", proxy, "height"); + plan.proxyFile = reference("proxy", proxy, (int64_t)plan.proxyWidth * plan.proxyHeight * 16); + for (const char* key : {"conditioning", "seed", "autoMask"}) + if (!manifest.has(key)) fail(std::string("a proxy fixture needs \"") + key + "\""); + } else if (manifest.has("inputFeatures")) { + plan.featuresFile = reference("inputFeatures", manifest["inputFeatures"], fullRows * 16 * 4); + } + + // The declared check set. + std::set checks; + if (!manifest.has("checks") || manifest["checks"].kind != json::Value::Array || manifest["checks"].size() == 0) { + fail("\"checks\" must list what the fixture gates: \"boundaries\", \"head\", \"output\""); + } else { + for (const json::Value& check : manifest["checks"].array) { + if (check.str() != "boundaries" && check.str() != "head" && check.str() != "output") fail("unknown check \"" + check.str() + "\""); + else if (!checks.insert(check.str()).second) fail("check \"" + check.str() + "\" listed twice"); + } + } + plan.checkBoundaries = checks.count("boundaries") != 0; + plan.checkHead = checks.count("head") != 0; + plan.checkOutput = checks.count("output") != 0; + + // Boundaries: every stored output the graph has a reference name for is either compared or declared omitted, + // with a reason, so a shortened export cannot pass as a smaller suite. + const bool hasBoundaryKeys = (manifest.has("blocks") && manifest["blocks"].size()) || + (manifest.has("transitions") && manifest["transitions"].size()) || manifest.has("omittedBoundaries"); + if (plan.checkBoundaries) { + std::map byName; + auto add = [&](const std::string& name, const json::Value& entry) { + BoundaryReference ref{name}; + ref.width = positive(name, entry, "width"); ref.height = positive(name, entry, "height"); + ref.channels = positive(name, entry, "channels"); + ref.file = reference(name, entry, (int64_t)ref.width * ref.height * ref.channels); + if (!byName.emplace(name, ref).second) fail(name + " listed twice"); + }; + if (manifest.has("blocks")) + for (const json::Value& entry : manifest["blocks"].array) { + if (!entry.has("block")) { fail("a \"blocks\" entry has no \"block\""); continue; } + add("block-" + std::to_string(entry["block"].integer()), entry); + } + if (manifest.has("transitions")) + for (const json::Value& entry : manifest["transitions"].array) { + if (!entry.has("id")) { fail("a \"transitions\" entry has no \"id\""); continue; } + add("transition-" + entry["id"].str(), entry); + } + std::map omitted; + if (manifest.has("omittedBoundaries")) + for (const auto& [name, reason] : manifest["omittedBoundaries"].object) { + if (reason.str().empty()) fail("omitted boundary " + name + " gives no reason"); + omitted[name] = reason.str(); + } + const std::vector& names = nr::Graph::referenceBoundaryNames(); + for (const auto& [name, ref] : byName) + if (std::find(names.begin(), names.end(), name) == names.end()) fail(name + " is not a boundary of this graph"); + for (const auto& [name, reason] : omitted) { + if (std::find(names.begin(), names.end(), name) == names.end()) fail("omitted " + name + " is not a boundary of this graph"); + if (byName.count(name)) fail(name + " is both compared and declared omitted"); + } + std::vector unaccounted; + for (const std::string& name : names) { + if (byName.count(name)) plan.boundaries.push_back(byName[name]); + else if (omitted.count(name)) plan.omitted.emplace_back(name, omitted[name]); + else unaccounted.push_back(name); + } + if (!unaccounted.empty()) { + std::string list; + for (size_t i = 0; i < unaccounted.size() && i < 8; ++i) list += (i ? ", " : "") + unaccounted[i]; + fail(std::to_string(unaccounted.size()) + " of " + std::to_string(names.size()) + " graph boundaries have neither a reference nor an omission reason (" + + list + (unaccounted.size() > 8 ? ", ..." : "") + ")"); + } + } else if (hasBoundaryKeys) { + fail("the fixture carries boundary references but does not declare the \"boundaries\" check"); + } + + if (plan.checkHead != manifest.has("referenceHead")) + fail(plan.checkHead ? "the \"head\" check needs \"referenceHead\"" : "\"referenceHead\" is carried but the \"head\" check is not declared"); + else if (plan.checkHead) + plan.headFile = reference("referenceHead", manifest["referenceHead"], fullRows * 16); + + if (plan.checkOutput != manifest.has("nativeOutput")) { + fail(plan.checkOutput ? "the \"output\" check needs \"nativeOutput\"" : "\"nativeOutput\" is carried but the \"output\" check is not declared"); + } else if (plan.checkOutput) { + const json::Value& output = manifest["nativeOutput"]; + const std::string dtype = output.has("dtype") ? output["dtype"].str() : ""; + const uint32_t width = positive("nativeOutput", output, "width"), height = positive("nativeOutput", output, "height"); + if (width != plan.validWidth || height != plan.validHeight) fail("nativeOutput is not the source size"); + if (dtype == "f32") { + if (plan.proxyFile.empty()) fail("an f32 nativeOutput is composed from the proxy, and the fixture has none"); + plan.outputFile = reference("nativeOutput", output, (int64_t)width * height * 16); + } else if (dtype == "u8") { + plan.outputBytes = true; + plan.outputFile = reference("nativeOutput", output, (int64_t)width * height * 4); + } else { + fail("nativeOutput \"dtype\" must be \"f32\" (RGBA f32 halves) or \"u8\" (RGBA8)"); + } + } + + if (!problems.empty()) { + for (const std::string& problem : problems) fprintf(stderr, "fixture: %s\n", problem.c_str()); + throw std::runtime_error("fixture rejected (" + std::to_string(problems.size()) + " problem" + (problems.size() == 1 ? "" : "s") + + "); nothing was run"); + } + return plan; +} + +// One comparison, element by element. `signedZeros` counts elements that differ only in the sign of a zero; +// `tolerated` those within the check's stated tolerance; `differing` everything else. +struct Tally { + size_t count = 0, differing = 0, signedZeros = 0, tolerated = 0; + size_t first = SIZE_MAX; + double maxAbs = 0, sumSquares = 0; + std::map codeDeltas; // E4M3: signed code distance, clamped to +-9 + void miss(size_t index, double difference) { + if (first == SIZE_MAX) first = index; + ++differing; + maxAbs = std::max(maxAbs, std::fabs(difference)); + sumSquares += difference * difference; + } +}; + +Tally compareE4(const std::vector& actual, const std::vector& expected) { + Tally t; + t.count = expected.size(); + for (size_t i = 0; i < expected.size(); ++i) { + const uint8_t a = actual[i], e = expected[i]; + if (a == e) continue; + if ((a & 0x7f) == 0 && (e & 0x7f) == 0) { ++t.signedZeros; continue; } + t.miss(i, (double)num::e4m3ToF32(a) - num::e4m3ToF32(e)); + const int signedA = (a & 0x80) ? -(int)(a & 0x7f) : (int)(a & 0x7f); + const int signedE = (e & 0x80) ? -(int)(e & 0x7f) : (int)(e & 0x7f); + t.codeDeltas[std::max(-9, std::min(9, signedA - signedE))]++; + } + return t; +} + +// f32 elements by bit pattern: +0 and -0 differ, a NaN equals only the same NaN. +Tally compareBits(const float* actual, const float* expected, size_t count) { + Tally t; + t.count = count; + for (size_t i = 0; i < count; ++i) { + uint32_t a, e; + memcpy(&a, actual + i, 4); memcpy(&e, expected + i, 4); + if (a == e) continue; + if (((a | e) & 0x7fffffffu) == 0) { ++t.signedZeros; continue; } + t.miss(i, (double)actual[i] - expected[i]); + } + return t; +} + +// Truncation (toward zero) to the half grid: the composite's publication of the neural result. +float truncateHalf(float value) { + uint32_t bits; memcpy(&bits, &value, 4); + const uint32_t signBit = (bits >> 16) & 0x8000u, exponent = (bits >> 23) & 0xffu, mantissa = bits & 0x7fffffu; + uint32_t halfBits; + if (exponent == 0xffu) halfBits = signBit | (mantissa ? 0x7e00u : 0x7c00u); + else { + const int halfExponent = (int)exponent - 112; + if (halfExponent >= 31) halfBits = signBit | 0x7c00u; + else if (halfExponent <= 0) halfBits = halfExponent < -10 ? signBit : signBit | ((mantissa | 0x800000u) >> (14 - halfExponent)); + else halfBits = signBit | ((uint32_t)halfExponent << 10) | (mantissa >> 13); + } + return num::f16ToF32((uint16_t)halfBits); +} + +// The composed RGB of one frame with no history, as the demo composite publishes it: +// neural = clamp((head / 32 + centred) * 8 + 0.5, 0, 1), truncated to the half grid. `inner * 8` is exact, so there +// is one rounding whether or not the last multiply-add is contracted. +float composed(float head, float centred) { + const float inner = std::fmaf(head, 0.03125f, centred); + return truncateHalf(std::fmin(std::fmax(inner * 8.0f + 0.5f, 0.0f), 1.0f)); +} + +Tally compareOutput(const FixturePlan& plan, const float* head, const std::vector& input, const std::vector& reference) { + const float* values = reinterpret_cast(input.data()); + Tally t; + t.count = (size_t)plan.validWidth * plan.validHeight * 3; + for (uint32_t y = 0; y < plan.validHeight; ++y) + for (uint32_t x = 0; x < plan.validWidth; ++x) + for (uint32_t c = 0; c < 3; ++c) { + const float h = head[((size_t)y * plan.fullWidth + x) * 4 + c]; + const size_t pixel = (size_t)y * plan.validWidth + x; + if (plan.outputBytes) { + // An RGBA8 capture is the same image quantized to eight bits by a rounding this repository does not know + // exactly, so the check is a tolerance: one code either way. The centred proxy is the features' lane 4 + c. + const float centred = values[((size_t)y * plan.fullWidth + x) * 16 + 4 + c]; + const int published = (int)std::fmin(255.0f, std::fmax(0.0f, std::floor(composed(h, centred) * 255.0f + 0.5f))); + const int expected = reference[pixel * 4 + c]; + if (published == expected) continue; + if (std::abs(published - expected) == 1) { ++t.tolerated; continue; } + t.miss(pixel * 3 + c, published - expected); + } else { + const float centred = std::fmaf(values[pixel * 4 + c], 0.125f, -0.0625f); + const float published = composed(h, centred); + const float expected = reinterpret_cast(reference.data())[pixel * 4 + c]; + const Tally one = compareBits(&published, &expected, 1); + t.signedZeros += one.signedZeros; + if (one.differing) t.miss(pixel * 3 + c, (double)published - expected); + } + } + return t; +} + +enum class Verdict { BitExact, SignedZeroOnly, WithinTolerance, Mismatch }; + +Verdict verdictOf(const Tally& t) { + if (t.differing) return Verdict::Mismatch; + if (t.signedZeros) return Verdict::SignedZeroOnly; + return t.tolerated ? Verdict::WithinTolerance : Verdict::BitExact; +} + +std::string describe(const Tally& t) { + char text[256]; + switch (verdictOf(t)) { + case Verdict::BitExact: snprintf(text, sizeof(text), "bit-exact (%zu)", t.count); break; + case Verdict::SignedZeroOnly: + snprintf(text, sizeof(text), "NOT BIT-EXACT: %zu of %zu differ only in the sign of zero", t.signedZeros, t.count); break; + case Verdict::WithinTolerance: + snprintf(text, sizeof(text), "within one code (%zu exact, %zu one code off)", t.count - t.tolerated, t.tolerated); break; + case Verdict::Mismatch: + snprintf(text, sizeof(text), "MISMATCH %zu/%zu (%.4f%%) max|d| %.6g rmse %.6g%s", t.differing, t.count, 100.0 * t.differing / t.count, + t.maxAbs, std::sqrt(t.sumSquares / t.count), t.signedZeros ? " (+ signed zeros)" : ""); + break; + } + return text; +} + +// A graph built for one schedule, recorded and submitted `submissions` times on the same buffers (as the demo +// resubmits its frame); `repeatable` says whether every submission gave the first one's head. +struct GraphRun { + std::vector head; + std::map> boundaries; + double minGpuMs = 1e30; + uint32_t dispatches = 0; + bool chained = false, repeatable = true; +}; + +GraphRun runGraph(vk::Context& context, nr::Model& model, nr::Kernels& kernels, const nr::Geometry& geometry, + const nr::Activation& features, bool chain, bool capture, int submissions) { + const bool chainBefore = nr::Kernels::chainEnabled(); + nr::Kernels::setChainEnabled(chainBefore && chain); + GraphRun run; + { + nr::Graph::Options options; + options.captureBoundaries = capture; + options.fusedBlocks = fusedBlocksEnabled(); + nr::Graph graph(context, model, kernels, geometry, options); + run.chained = graph.chained(); + VkQueryPool queries = context.createTimestampPool(2); + for (int submission = 0; submission < submissions; ++submission) { + context.resetDescriptorPool(); + VkCommandBuffer commands = context.beginCommands(); + vkCmdResetQueryPool(commands, queries, 0, 2); + vkCmdWriteTimestamp(commands, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, queries, 0); + graph.record(commands, features); + vkCmdWriteTimestamp(commands, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, queries, 1); + context.endAndSubmit(commands, true); + checkChainTimeouts(kernels); + std::vector stamps = context.readTimestampsMs(queries, 2); + run.minGpuMs = std::min(run.minGpuMs, stamps[1] - stamps[0]); + run.dispatches = kernels.dispatchCount(); + std::vector head = context.download(graph.head().buffer, graph.head().validBytes()); + if (submission == 0) run.head = std::move(head); + else run.repeatable = run.repeatable && head == run.head; + } + vkDestroyQueryPool(context.device(), queries, nullptr); + for (const auto& [name, activation] : graph.boundaries()) + run.boundaries[name] = context.download(activation->buffer, activation->validBytes()); + } + nr::Kernels::setChainEnabled(chainBefore); + return run; +} + +int runParity(int argc, char** argv) { + std::string modelDir = argValue(argc, argv, "--model"); + std::string fixtureDir = argValue(argc, argv, "--fixture"); + std::string shaderDir = argValue(argc, argv, "--shaders", executableDirectory(argv[0]) + "/shaders"); + std::string dumpDir = argValue(argc, argv, "--dump"); + const int repeats = std::max(2, atoi(argValue(argc, argv, "--repeat", "3").c_str())); + if (modelDir.empty() || fixtureDir.empty()) { + fprintf(stderr, "usage: dlss5vk parity --model --fixture [--repeat N] [--shaders ] [--dump ]\n"); + return 2; + } + json::Value manifest = json::parse(readText(fixtureDir + "/manifest.json")); + const FixturePlan plan = planFixture(manifest, fixtureDir); + + vk::Context context; + printf("device: %s\n", context.deviceName().c_str()); + auto started = std::chrono::steady_clock::now(); + nr::Model model(context, modelDir, !hasFlag(argc, argv, "--no-verify")); + printf("model loaded in %.2f s\n", std::chrono::duration(std::chrono::steady_clock::now() - started).count()); + nr::Kernels kernels(context, shaderDir); + kernels.setSiluTable(ref::siluTable()); + nr::Geometry geometry = nr::Geometry::fromValid(plan.validWidth, plan.validHeight); + printf("geometry %ux%u -> full %ux%u, levels", plan.validWidth, plan.validHeight, geometry.fullWidth, geometry.fullHeight); + for (auto level : geometry.levels) printf(" %ux%u", level.width, level.height); + printf("\n"); + if (geometry.fullWidth != plan.fullWidth || geometry.fullHeight != plan.fullHeight) + throw std::runtime_error("fixture full dimensions disagree with the runtime profile"); + printf("checks:%s%s%s\n", plan.checkBoundaries ? " boundaries" : "", plan.checkHead ? " head" : "", plan.checkOutput ? " output" : ""); + if (plan.checkBoundaries) { + printf(" boundaries: %zu references, %zu declared omitted\n", plan.boundaries.size(), plan.omitted.size()); + std::map> byReason; + for (const auto& [name, reason] : plan.omitted) byReason[reason].push_back(name); + for (const auto& [reason, names] : byReason) + printf(" omitted (%s): %s%s%s\n", reason.c_str(), names.front().c_str(), names.size() > 1 ? " .. " : "", + names.size() > 1 ? names.back().c_str() : ""); + } + if (plan.checkOutput) printf(" output: %s\n", plan.outputBytes ? "RGBA8, compared within one code" : "RGBA f32 halves, bit-exact"); + + // The features the graph reads, generated from the proxy on the GPU or uploaded as recorded. + const uint32_t fullRows = geometry.fullWidth * geometry.fullHeight; + nr::Activation features; + features.format = nr::Format::F32; features.rows = fullRows; features.channels = 16; features.allocRows = nr::alignRows(fullRows); + features.label = "input features"; + features.buffer = context.createBuffer((VkDeviceSize)features.allocRows * 16 * 4, false, "input features"); + context.fillZero(features.buffer); + std::vector inputBytes = readFile(plan.proxyFile.empty() ? plan.featuresFile : plan.proxyFile); + vk::Buffer proxyBuffer; + if (!plan.proxyFile.empty()) { + proxyBuffer = context.createBuffer(inputBytes.size(), false, "proxy"); + context.upload(proxyBuffer, inputBytes.data(), inputBytes.size()); + const json::Value& conditioning = manifest["conditioning"]; + nr::Kernels::PreprocessArgs preprocess{geometry.fullWidth, geometry.fullHeight, plan.validWidth, plan.validHeight, + plan.proxyWidth, plan.proxyHeight, (uint32_t)manifest["seed"].integer(), + manifest["autoMask"].boolean, (float)conditioning["localTone"].number, + (float)conditioning["localStructure"].number, (float)conditioning["skinStructure"].number, + (float)conditioning["style"].number}; + VkCommandBuffer commands = context.beginCommands(); + kernels.preprocessFromProxy(commands, proxyBuffer, features, preprocess); + context.endAndSubmit(commands, true); + } else { + context.upload(features.buffer, inputBytes.data(), inputBytes.size()); + } + if (!dumpDir.empty()) { + std::vector bytes = context.download(features.buffer, features.validBytes()); + std::ofstream(dumpDir + "/features.f32", std::ios::binary).write(reinterpret_cast(bytes.data()), bytes.size()); + } + size_t failures = 0, tolerated = 0, bitExact = 0; + auto require = [&](bool ok, const char* what) { + printf("%s: %s\n", what, ok ? "identical" : "DIFFERENT"); + if (!ok) ++failures; + }; + + // The production schedule (no captures, chaining as configured) is what the head and output references are + // compared against, resubmitted several times: its head must not change between submissions. + const GraphRun production = runGraph(context, model, kernels, geometry, features, true, false, repeats); + printf("production schedule (%s, no captures): %u dispatches, GPU %.3f ms (min of %d)\n", + production.chained ? "counter chaining" : "barriers", production.dispatches, production.minGpuMs, repeats); + printf("NaN weight codes replaced: %zu\n", model.nanWeightsReplaced()); + require(production.repeatable, ("head over " + std::to_string(repeats) + " production submissions").c_str()); + // Chaining is scheduling, not arithmetic: the same graph with a barrier after every launch gives the same head. + if (production.chained) + require(runGraph(context, model, kernels, geometry, features, false, false, 1).head == production.head, "head with barriers instead of chaining"); + else + printf("chaining is off in this configuration: the barrier schedule is the production schedule\n"); + // Boundaries come from an instrumented schedule, which adds a copy and two barriers at every boundary (and + // materializes the deferred projections); that must not change the head either. + GraphRun instrumented; + if (plan.checkBoundaries) { + instrumented = runGraph(context, model, kernels, geometry, features, true, true, 1); + require(instrumented.head == production.head, "head of the instrumented schedule (boundary captures) vs production"); + } + + printf("\n"); + auto count = [&](const Tally& t) { + const Verdict v = verdictOf(t); + if (v == Verdict::BitExact) ++bitExact; + else if (v == Verdict::WithinTolerance) ++tolerated; + else ++failures; + }; + bool codeHistogramShown = false; + for (const BoundaryReference& ref : plan.boundaries) { + auto it = instrumented.boundaries.find(ref.name); + if (it == instrumented.boundaries.end()) { + printf("%-16s NOT CAPTURED by this route\n", ref.name.c_str()); + ++failures; + continue; + } + const std::vector expected = readFile(ref.file); + if (it->second.size() != expected.size()) { + printf("%-16s SHAPE: the graph has %zu bytes, the reference %zu\n", ref.name.c_str(), it->second.size(), expected.size()); + ++failures; + continue; + } + if (!dumpDir.empty()) + std::ofstream(dumpDir + "/" + ref.name + ".u8", std::ios::binary).write(reinterpret_cast(it->second.data()), it->second.size()); + const Tally t = compareE4(it->second, expected); + count(t); + printf("%-16s %ux%ux%u %s", ref.name.c_str(), ref.width, ref.height, ref.channels, describe(t).c_str()); + if (t.differing) { + const size_t pixel = t.first / ref.channels; + printf(" first@ x%zu y%zu c%zu: got 0x%02x exp 0x%02x", pixel % ref.width, pixel / ref.width, t.first % ref.channels, + it->second[t.first], expected[t.first]); + if (!codeHistogramShown) { + printf(" code-delta histogram:"); + for (auto& [delta, n] : t.codeDeltas) printf(" %+d:%zu", delta, n); + codeHistogramShown = true; + } + } + printf("\n"); + } + + const float* head = reinterpret_cast(production.head.data()); + const size_t headValues = (size_t)fullRows * 4; + if (plan.checkHead) { + const std::vector reference = readFile(plan.headFile); + const Tally t = compareBits(head, reinterpret_cast(reference.data()), headValues); + count(t); + printf("head vs reference: %s", describe(t).c_str()); + if (t.differing) printf(" first@ x%zu y%zu c%zu", (t.first / 4) % geometry.fullWidth, (t.first / 4) / geometry.fullWidth, t.first % 4); + printf("\n"); + } + if (plan.checkOutput) { + const Tally t = compareOutput(plan, head, inputBytes, readFile(plan.outputFile)); + count(t); + printf("composed RGB vs native output: %s", describe(t).c_str()); + if (t.differing) printf(" first@ x%zu y%zu c%zu", (t.first / 3) % plan.validWidth, (t.first / 3) / plan.validWidth, t.first % 3); + printf("\n"); + } + double sum = 0, sumSquares = 0; size_t nonFinite = 0; + for (size_t i = 0; i < headValues; ++i) { + if (!std::isfinite(head[i])) { ++nonFinite; continue; } + sum += head[i]; sumSquares += (double)head[i] * head[i]; + } + printf("head: %zu values, mean %.6f, rms %.6f, non-finite %zu\n", headValues, sum / headValues, std::sqrt(sumSquares / headValues), nonFinite); + if (!dumpDir.empty()) + std::ofstream(dumpDir + "/head.f32", std::ios::binary).write(reinterpret_cast(production.head.data()), production.head.size()); + if (proxyBuffer.buffer) context.destroyBuffer(proxyBuffer); + context.destroyBuffer(features.buffer); + + printf("\nVERDICT: %s - %zu bit-exact, %zu within tolerance, %zu failed\n", failures ? "FAIL" : "PASS", bitExact, tolerated, failures); + return failures ? 1 : 0; +} + +int runBench(int argc, char** argv) { + std::string modelDir = argValue(argc, argv, "--model"); + std::string shaderDir = argValue(argc, argv, "--shaders", executableDirectory(argv[0]) + "/shaders"); + uint32_t width = (uint32_t)atoi(argValue(argc, argv, "--width", "768").c_str()); + uint32_t height = (uint32_t)atoi(argValue(argc, argv, "--height", "768").c_str()); + int frames = atoi(argValue(argc, argv, "--frames", "10").c_str()); + if (modelDir.empty()) { fprintf(stderr, "usage: dlss5vk bench --model [--width W --height H --frames N]\n"); return 2; } + vk::Context context; + printf("device: %s\n", context.deviceName().c_str()); + nr::Model model(context, modelDir, false); + nr::Kernels kernels(context, shaderDir); + kernels.setSiluTable(ref::siluTable()); + nr::Geometry geometry = nr::Geometry::fromValid(width, height); + nr::Graph graph(context, model, kernels, geometry, {.fusedBlocks = fusedBlocksEnabled()}); + const uint32_t fullRows = geometry.fullWidth * geometry.fullHeight; + nr::Activation* features = graph.allocate("input features", fullRows, 16, nr::Format::F32); + std::vector synthetic((size_t)fullRows * 16); + for (size_t i = 0; i < synthetic.size(); ++i) synthetic[i] = num::roundF16(std::sin(i * 0.0017f) * 0.125f); + context.upload(features->buffer, synthetic.data(), synthetic.size() * 4); + // Warm compile. + { + VkCommandBuffer commands = context.beginCommands(); + graph.record(commands, *features); + context.endAndSubmit(commands, true); + checkChainTimeouts(kernels); + } + VkQueryPool queries = context.createTimestampPool(2); + std::vector samples; + for (int frame = 0; frame < frames; ++frame) { + context.resetDescriptorPool(); + VkCommandBuffer commands = context.beginCommands(); + vkCmdResetQueryPool(commands, queries, 0, 2); + vkCmdWriteTimestamp(commands, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, queries, 0); + graph.record(commands, *features); + vkCmdWriteTimestamp(commands, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, queries, 1); + context.endAndSubmit(commands, true); + checkChainTimeouts(kernels); + std::vector stamps = context.readTimestampsMs(queries, 2); + samples.push_back(stamps[1] - stamps[0]); + printf("frame %d: %.3f ms GPU (%u dispatches)\n", frame, samples.back(), kernels.dispatchCount()); + } + std::sort(samples.begin(), samples.end()); + printf("median %.3f ms, min %.3f ms over %d frames at %ux%u (full %ux%u)\n", samples[samples.size() / 2], + samples.front(), frames, width, height, geometry.fullWidth, geometry.fullHeight); + vkDestroyQueryPool(context.device(), queries, nullptr); + return 0; +} + +} // namespace + +int runVerify(int argc, char** argv); + +namespace { +int runShaderInfo(int argc, char** argv) { + std::string modelDir = argValue(argc, argv, "--model"); + std::string shaderDir = argValue(argc, argv, "--shaders", executableDirectory(argv[0]) + "/shaders"); + std::string filter = argValue(argc, argv, "--filter", ""); + bool sass = hasFlag(argc, argv, "--sass"); + if (modelDir.empty()) { fprintf(stderr, "usage: dlss5vk shaderinfo --model [--filter name] [--sass]\n"); return 2; } + vk::Context context; + context.setCaptureStatistics(true); + nr::Model model(context, modelDir, false); + nr::Kernels kernels(context, shaderDir); + kernels.setSiluTable(ref::siluTable()); + nr::Geometry geometry = nr::Geometry::fromValid(768, 768); + nr::Graph graph(context, model, kernels, geometry, {.fusedBlocks = fusedBlocksEnabled()}); + nr::Activation* features = graph.allocate("input features", geometry.fullWidth * geometry.fullHeight, 16, nr::Format::F32); + VkCommandBuffer commands = context.beginCommands(); + graph.record(commands, *features); + context.endAndSubmit(commands, true); + checkChainTimeouts(kernels); + for (const auto& [key, pipeline] : kernels.pipelines()) { + if (!filter.empty() && key.find(filter) == std::string::npos) continue; + printf("== %s\n%s\n", key.c_str(), context.pipelineStatistics(pipeline, sass).c_str()); + } + return 0; +} +} // namespace + +namespace { +int runProfile(int argc, char** argv) { + std::string modelDir = argValue(argc, argv, "--model"); + std::string shaderDir = argValue(argc, argv, "--shaders", executableDirectory(argv[0]) + "/shaders"); + uint32_t width = (uint32_t)atoi(argValue(argc, argv, "--width", "768").c_str()); + uint32_t height = (uint32_t)atoi(argValue(argc, argv, "--height", "768").c_str()); + if (modelDir.empty()) { fprintf(stderr, "usage: dlss5vk profile --model [--width W --height H]\n"); return 2; } + if (!getenv("DLSS5VK_CHAIN")) nr::Kernels::setChainEnabled(false); // per-dispatch timings need the barriers + vk::Context context; + printf("maxComputeSharedMemorySize %u bytes\n", context.maxComputeSharedMemory()); + nr::Model model(context, modelDir, false); + nr::Kernels kernels(context, shaderDir); + kernels.setSiluTable(ref::siluTable()); + // Barrier/dispatch overhead: 400 trivial dispatches each followed by a full compute barrier. + { + nr::Activation tiny; tiny.format = nr::Format::F16; tiny.rows = 64; tiny.channels = 16; tiny.allocRows = 64; + tiny.buffer = context.createBuffer(64 * 16 * 2, false, "tiny"); + nr::Activation tinyOut = tiny; tinyOut.format = nr::Format::E4; + tinyOut.buffer = context.createBuffer(64 * 16, false, "tiny out"); + VkQueryPool pool = context.createTimestampPool(2); + VkCommandBuffer commands = context.beginCommands(); + vkCmdResetQueryPool(commands, pool, 0, 2); + vkCmdWriteTimestamp(commands, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, pool, 0); + for (int i = 0; i < 400; ++i) kernels.quantize(commands, tiny, tinyOut); + vkCmdWriteTimestamp(commands, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, pool, 1); + context.endAndSubmit(commands, true); + std::vector stamps = context.readTimestampsMs(pool, 2); + printf("400 trivial dispatches + barriers: %.3f ms (%.2f us each)\n", stamps[1] - stamps[0], (stamps[1] - stamps[0]) * 2.5); + vkDestroyQueryPool(context.device(), pool, nullptr); + context.destroyBuffer(tiny.buffer); context.destroyBuffer(tinyOut.buffer); + context.resetDescriptorPool(); + } + nr::Geometry geometry = nr::Geometry::fromValid(width, height); + nr::Graph graph(context, model, kernels, geometry, {.fusedBlocks = fusedBlocksEnabled()}); + const uint32_t fullRows = geometry.fullWidth * geometry.fullHeight; + nr::Activation* features = graph.allocate("input features", fullRows, 16, nr::Format::F32); + std::vector synthetic((size_t)fullRows * 16); + for (size_t i = 0; i < synthetic.size(); ++i) synthetic[i] = num::roundF16(std::sin(i * 0.0017f) * 0.125f); + context.upload(features->buffer, synthetic.data(), synthetic.size() * 4); + { + VkCommandBuffer commands = context.beginCommands(); + graph.record(commands, *features); + context.endAndSubmit(commands, true); + checkChainTimeouts(kernels); + } + std::map byLabel; + std::map byStage; + double total = 0; + // Other programs share the GPU: take the per-dispatch minimum over several frames. + const int frames = atoi(argValue(argc, argv, "--frames", "7").c_str()); + std::vector best; + for (int frame = 0; frame < frames; ++frame) { + context.resetDescriptorPool(); + VkCommandBuffer commands = context.beginCommands(); + kernels.beginProfile(commands, 4096); + graph.record(commands, *features); + context.endAndSubmit(commands, true); + checkChainTimeouts(kernels); + std::vector entries = kernels.endProfile(); + if (best.empty()) best = entries; + for (size_t i = 0; i < entries.size() && i < best.size(); ++i) + best[i].milliseconds = std::min(best[i].milliseconds, entries[i].milliseconds); + } + const std::string stageFilter = argValue(argc, argv, "--stage", ""); + for (size_t index = 0; index < best.size(); ++index) { + const auto& entry = best[index]; + size_t bar = entry.label.find(" | "); + std::string stage = entry.label.substr(0, bar), kernel = entry.label.substr(bar + 3); + if (!stageFilter.empty() && stage.find(stageFilter) != std::string::npos) + printf(" %8.2f us [%3zu] %s | %s\n", entry.milliseconds * 1000.0, index, stage.c_str(), kernel.c_str()); + byLabel[kernel] += entry.milliseconds; + byStage[stage] += entry.milliseconds; + total += entry.milliseconds; + } + std::vector> sorted(byLabel.begin(), byLabel.end()); + std::sort(sorted.begin(), sorted.end(), [](auto& a, auto& b) { return a.second > b.second; }); + printf("total %.3f ms (sum of per-dispatch spans, %ux%u)\n\nby kernel:\n", total, width, height); + for (size_t i = 0; i < sorted.size() && i < 40; ++i) + printf(" %8.3f ms %5.1f%% %s\n", sorted[i].second, 100 * sorted[i].second / total, sorted[i].first.c_str()); + std::vector> stages(byStage.begin(), byStage.end()); + std::sort(stages.begin(), stages.end(), [](auto& a, auto& b) { return a.second > b.second; }); + printf("\nby stage:\n"); + for (size_t i = 0; i < stages.size(); ++i) + printf(" %8.3f ms %5.1f%% %s\n", stages[i].second, 100 * stages[i].second / total, stages[i].first.c_str()); + return 0; +} +} // namespace + +int runCommand(int argc, char** argv) { + if (argc >= 2 && !strcmp(argv[1], "verify")) return runVerify(argc, argv); + if (argc >= 2 && !strcmp(argv[1], "shaderinfo")) return runShaderInfo(argc, argv); + if (argc >= 2 && !strcmp(argv[1], "profile")) return runProfile(argc, argv); + if (argc >= 2 && !strcmp(argv[1], "parity")) return runParity(argc, argv); + if (argc >= 2 && !strcmp(argv[1], "bench")) return runBench(argc, argv); + fprintf(stderr, "usage: dlss5vk parity|verify|bench|profile|shaderinfo --model ...\n"); + return 2; +} + +int main(int argc, char** argv) { + int code = 1; + try { + code = runCommand(argc, argv); + } catch (const std::exception& error) { + fprintf(stderr, "error: %s\n", error.what()); + } + // With the validation layer on, an error it reported fails the run, whatever the command concluded. + const char* validation = getenv("DLSS5VK_VALIDATION"); + if (validation && *validation && strcmp(validation, "0")) { + const uint32_t errors = vk::Context::validationErrors(); + printf("validation: %u error%s reported by the layer\n", errors, errors == 1 ? "" : "s"); + if (errors && code == 0) code = 1; + } + return code; +} diff --git a/third_party/opendlss-nr/src/nr_graph.cpp b/third_party/opendlss-nr/src/nr_graph.cpp new file mode 100644 index 000000000..5c8a2e1f9 --- /dev/null +++ b/third_party/opendlss-nr/src/nr_graph.cpp @@ -0,0 +1,1006 @@ +#include "nr_graph.h" + +#include +#include +#include + +namespace nr { + +namespace { +uint32_t alignUp(uint32_t value, uint32_t alignment) { return (value + alignment - 1) / alignment * alignment; } +uint32_t standardHidden(uint32_t channels) { + if (channels == 32 || channels == 64 || channels == 128 || channels == 256) return 128; + throw std::runtime_error("no fused layout for " + std::to_string(channels) + " channels"); +} +// The four window views of the shifted-window attention, as origin offsets (-shiftX, -shiftY). Each resolution +// level cycles through them, one step per block at that level (Graph::takeWindowPhase). +void windowPhase(uint32_t index, uint32_t& shiftX, uint32_t& shiftY) { + static const uint32_t phases[4][2] = {{0, 0}, {4, 4}, {4, 0}, {0, 4}}; + shiftX = phases[index & 3][0]; + shiftY = phases[index & 3][1]; +} +} // namespace + +// Every level halves its input and rounds the result up to 4; the decoder doubles the chain back up. A +// dimension therefore needs enough headroom for all of those halvings to be exact, which is what the padded +// ("full") field provides: it is aligned to two to the power of the number of size reductions the graph makes +// on that axis. Six of them are the halvings themselves; level 0 adds a seventh when it is not a whole number +// of 8-pixel windows, because the decoder's level-0 upsample produces whole windows and is then cropped back. +static uint32_t fieldAlignment(uint32_t valid) { + uint32_t reductions = 0, size = valid; + for (int level = 0; level < 6; ++level) { + const uint32_t half = alignUp((size + 1) / 2, 4); + if (half < size) ++reductions; + if (level == 0 && half % 8 != 0) ++reductions; + size = half; + } + return 1u << reductions; +} + +Geometry Geometry::fromValid(uint32_t validWidth, uint32_t validHeight) { + Geometry g; + g.validWidth = validWidth; + g.validHeight = validHeight; + const uint32_t alignWidth = fieldAlignment(validWidth), alignHeight = fieldAlignment(validHeight); + g.fullWidth = std::max(320u, alignUp(validWidth, alignWidth)); + g.fullHeight = std::max(320u, alignUp(validHeight, alignHeight)); + // One more alignment step on the width when both axes are a multiple of four alignments. It is native's + // rule and there is no stated reason for it; it has to be reproduced because the field size decides the + // window grid and therefore the result inside the valid rectangle as well. + if (g.fullWidth % (4 * alignWidth) == 0 && g.fullHeight % (4 * alignHeight) == 0) g.fullWidth += alignWidth; + uint32_t width = g.fullWidth, height = g.fullHeight; + for (int level = 0; level < 6; ++level) { + width = alignUp((width + 1) / 2, 4); + height = alignUp((height + 1) / 2, 4); + g.levels[level] = {width, height}; + } + // The extra reduction above exists so that level 0 is a whole number of 8-pixel windows and the decoder's + // level-0 upsample can write it directly. The 320 floor can break that for a very small axis (widths 1-16 and + // 25-32), where the network runs its level-0 decoder stage on alignUp(level0, 8) and crops in the last block; + // this port does not implement that crop, so it refuses the size rather than differing silently. + if (g.levels[0].width % 8 || g.levels[0].height % 8) + throw std::runtime_error("unsupported size " + std::to_string(validWidth) + "x" + std::to_string(validHeight) + + ": level 0 (" + std::to_string(g.levels[0].width) + "x" + std::to_string(g.levels[0].height) + + ") is not a whole number of 8-pixel windows; use at least 33 pixels on each axis"); + return g; +} + +FusedLayout fusedLayout(uint32_t channels, uint32_t base) { + FusedLayout l; + l.hidden = standardHidden(channels); + l.heads = channels / 32; + l.expand = base; + l.expertFfn = channels >= 64; + l.expertCount = l.expertFfn ? channels / 32 : 0; + uint32_t expandBytes = l.expertFfn ? l.expertCount * channels * 128 : channels * l.hidden; + l.contractWeights = base + expandBytes; + uint32_t ffnWeightBytes = l.expertFfn ? expandBytes + l.expertCount * 128 * 32 + l.expertCount * 32 * channels + : expandBytes + l.hidden * channels; + l.ffnCosSkip = base + ffnWeightBytes + 16; + l.qkv = l.ffnCosSkip + channels * 2 + 16; + l.relative = l.qkv + channels * channels * 3; + l.scale = l.relative + l.heads * 8192; + l.projection = l.scale + alignUp(l.heads * 4, 16); + l.attnCosSkip = l.projection + channels * channels; + l.endWithoutPadding = l.attnCosSkip + channels * 2; + return l; +} + +FusedLayout preFusedLayout() { + FusedLayout l; + l.hidden = 128; l.heads = 1; + l.expand = 0; l.contractWeights = 4096; l.inputAdapter = 8208; l.ffnCosSkip = 9232; l.qkv = 9312; + l.relative = 12384; l.scale = 20576; l.projection = 20592; l.attnCosSkip = 21616; l.endWithoutPadding = 21680; + return l; +} + +FusedLayout upsampleFusedLayout(uint32_t inputChannels, uint32_t channels) { + if (inputChannels != channels * 2) throw std::runtime_error("upsample layout expects 2x input channels"); + FusedLayout l; + l.hidden = standardHidden(channels); + l.heads = channels / 32; + uint32_t narrowPadding = channels == 32 ? 16 : 0; + l.expand = 0; + l.expertFfn = channels >= 64; + l.expertCount = l.expertFfn ? channels / 32 : 0; + uint32_t expandBytes = l.expertFfn ? l.expertCount * channels * 128 : channels * l.hidden; + l.contractWeights = expandBytes; + uint32_t ffnWeightBytes = l.expertFfn ? expandBytes + l.expertCount * 128 * 32 + l.expertCount * 32 * channels + : expandBytes + l.hidden * channels; + l.upsampleWeight = ffnWeightBytes; + l.ffnCosSkip = l.upsampleWeight + inputChannels * channels + narrowPadding; + l.transitionScale = l.ffnCosSkip + channels * 2 + narrowPadding; + l.qkv = l.transitionScale + channels * 2; + l.relative = l.qkv + channels * channels * 3; + l.scale = l.relative + l.heads * 8192; + l.projection = l.scale + alignUp(l.heads * 4, 16); + l.attnCosSkip = l.projection + channels * channels; + l.endWithoutPadding = l.attnCosSkip + channels * 2; + return l; +} + +FusedLayout postFusedLayout() { + FusedLayout l; + l.hidden = 128; l.heads = 1; + l.expand = 0; l.contractWeights = 4096; l.ffnCosSkip = 8208; l.inputScale = 8272; l.adapterScale = 8336; + l.qkv = 8400; l.relative = 11472; l.scale = 19664; l.projection = 19680; l.attnCosSkip = 20704; + l.postWeights = 20784; l.endWithoutPadding = 21808; + return l; +} + +Graph::Routes Graph::routesFromEnvironment() { + Routes r; + r.fusePre = !getenv("DLSS5VK_NO_FUSE_PRE"); + r.fusePool = !getenv("DLSS5VK_NO_FUSE_POOL"); + r.fuseUpres = !getenv("DLSS5VK_NO_FUSE_UPRES"); + r.fusePost = !getenv("DLSS5VK_NO_FUSE_POST"); + r.chainMask = getenv("DLSS5VK_CHAIN_MASK") ? atoi(getenv("DLSS5VK_CHAIN_MASK")) : 3; // bit 4 measured neutral + r.deferMax = getenv("DLSS5VK_DEFER_MAX") ? (uint32_t)atoi(getenv("DLSS5VK_DEFER_MAX")) : 128u; + r.vitChain = getenv("DLSS5VK_VIT_CHAIN") ? atoi(getenv("DLSS5VK_VIT_CHAIN")) != 0 : true; + return r; +} + +Graph::Graph(vk::Context& context, Model& model, Kernels& kernels, const Geometry& geometry, Options options) + : context_(context), model_(model), kernels_(kernels), geometry_(geometry), options_(options), + routes_(routesFromEnvironment()) { + // Chaining links consecutive PTX launches through device counters and drops the barrier between them, so every + // launch in the chain must take its PTX route. Any switch that sends one kernel family (or one fused block) + // back to GLSL takes the whole graph back to barriers. + routes_.chain = Kernels::chainEnabled() && options_.fusedBlocks && !options_.captureIntermediates && + Kernels::ptxGemmEnabled() && Kernels::ptxFfnEnabled() && Kernels::ptxQkvEnabled() && + Kernels::ptxBlock32Enabled() && routes_.fusePre && routes_.fusePool && routes_.fuseUpres && + routes_.fusePost; + // The ViT launches are their own chain (a single completion counter per GEMM); they need only the ViT routes. + routes_.vitChain = routes_.vitChain && Kernels::chainEnabled() && options_.fusedBlocks && + !options_.captureIntermediates && Kernels::ptxGemmVEnabled(); + // A chain's counters are indexed by pixel-row band or window row of the tallest stage, which is the field + // itself (blocks 0 and 70). Past the region's capacity the indices would run into the next region. + const uint32_t tallestRow = (geometry_.fullHeight + 4 + 7) / 8; // + the largest window shift + if (tallestRow > Kernels::kSyncCountersPerRegion) { + fprintf(stderr, "warning: field height %u needs %u chaining counters per block (limit %u); running with barriers\n", + geometry_.fullHeight, tallestRow, Kernels::kSyncCountersPerRegion); + routes_.chain = routes_.vitChain = false; + } + if (model_.blockCount() != kBlockCount) + throw std::runtime_error("the model has " + std::to_string(model_.blockCount()) + " blocks; this graph is the " + + std::to_string(kBlockCount) + "-block network"); +} + +Graph::~Graph() { + for (auto& activation : activations_) context_.destroyBuffer(activation->buffer); +} + +Activation* Graph::allocate(const std::string& label, uint32_t rows, uint32_t channels, Format format) { + // Re-recording the graph reuses the buffers allocated by the first pass. + std::string key = label + "/" + std::to_string(rows) + "x" + std::to_string(channels) + "/" + std::to_string((int)format); + auto existing = allocationsByKey_.find(key); + if (existing != allocationsByKey_.end()) { + if (!usedThisRecord_.insert(key).second) throw std::runtime_error("duplicate activation label " + label); + return existing->second; + } + if (!usedThisRecord_.insert(key).second) throw std::runtime_error("duplicate activation label " + label); + auto activation = std::make_unique(); + activation->format = format; + activation->rows = rows; + activation->channels = channels; + activation->allocRows = alignRows(rows); + activation->label = label; + VkDeviceSize bytes = (VkDeviceSize)activation->allocRows * channels * formatBytes(format); + activation->buffer = context_.createBuffer(bytes, false, activation->label.c_str()); + context_.fillZero(activation->buffer); + activations_.push_back(std::move(activation)); + allocationsByKey_[key] = activations_.back().get(); + return activations_.back().get(); +} + +const std::vector& Graph::referenceBoundaryNames() { + static const std::vector names = [] { + std::vector list; + const int transitionsAfter[] = {0, 4, 8, 14, 22}; + for (int block = 0; block <= 69; ++block) { + list.push_back("block-" + std::to_string(block)); + if (std::find(std::begin(transitionsAfter), std::end(transitionsAfter), block) != std::end(transitionsAfter)) + list.push_back("transition-" + std::to_string(block) + "-" + std::to_string(block + 1)); + } + return list; + }(); + return names; +} + +void Graph::capture(VkCommandBuffer commands, const std::string& name, const Activation& source) { + if (!options_.captureBoundaries) return; + Activation* copy = allocate("boundary " + name, source.rows, source.channels, source.format); + VkBufferCopy region{0, 0, source.validBytes()}; + context_.transferBarrier(commands); + vkCmdCopyBuffer(commands, source.buffer.buffer, copy->buffer.buffer, 1, ®ion); + context_.transferBarrier(commands); + boundaries_[name] = copy; +} + +Graph::Temporaries Graph::createTemporaries(const std::string& label, uint32_t rows, uint32_t channels) { + Temporaries t; + FusedLayout layout = fusedLayout(channels); + uint32_t hidden = layout.expertFfn ? layout.expertCount * 128 : layout.hidden; + const bool fused = options_.fusedBlocks && !options_.captureIntermediates; + if (fused && channels == 32) return t; // the fused 32-channel block keeps everything on chip + if (!fused) t.ffn = allocate(label + " FFN", rows, hidden, Format::E4); + if (layout.expertFfn) t.ffnNarrow = allocate(label + " FFN narrow", rows, channels, Format::E4); + if (!fused) t.ffnResidual = allocate(label + " FFN residual", rows, channels, Format::F16); + t.ffnQuantized = allocate(label + " FFN quantized", rows, channels, Format::E4); + // c256 (one workgroup per SM) is faster with the separate projection GEMM, hence the default width limit. + if (fused && layout.expertFfn && Kernels::ptxFfnEnabled() && channels <= routes_.deferMax) + t.ffnQuantized2 = allocate(label + " FFN quantized B", rows, channels, Format::E4); + if (!fused) t.qkv = allocate(label + " QKV", rows, channels * 3, Format::F16); + if (!fused) t.normalized = allocate(label + " normalized QKV", rows, channels * 3, Format::E4); + t.attended = allocate(label + " attended", rows, channels, Format::E4); + return t; +} + +Graph::SplitTemporaries Graph::createSplitTemporaries(const std::string& label, uint32_t rows) { + SplitTemporaries t; + t.branch = allocate(label + " split branch", rows, 512, Format::E4); + t.middle = allocate(label + " split middle", rows, 2048, Format::E4); + t.layer0 = allocate(label + " split layer0", rows, 512, Format::E4); + t.ffnResidual = allocate(label + " split residual", rows, 512, Format::E4); + t.qkv = allocate(label + " split QKV", rows, 1536, Format::F16); + t.normalized = allocate(label + " split normalized", rows, 1536, Format::E4); + t.attended = allocate(label + " split attended", rows, 512, Format::E4); + return t; +} + +void Graph::chainBlock32(Kernels::FusedBlock32Args& f, int block, uint32_t waitScale, bool chainOut) { + const bool chain = routes_.chain && (routes_.chainMask & 2) && Kernels::fusedBlock32IsPtx(f); + if (!chain) { c32Prev_.valid = false; return; } + if (c32Prev_.valid) { + f.chainWait = c32Prev_.rows; f.chainWaitExpected = c32Prev_.expected; f.chainWaitShiftY = c32Prev_.shiftY; f.chainWaitScale = waitScale; + } + if (chainOut) { f.chainSignal = kernels_.syncAddress(block, Kernels::kSyncRows); f.chained = true; } + c32Prev_.rows = f.chainSignal; c32Prev_.expected = (f.width + f.shiftX + 7) / 8; c32Prev_.shiftY = f.shiftY; c32Prev_.valid = chainOut; +} + +// encodeFusedBlock: FFN (dense 32 or C/32 experts) -> QKV -> window attention -> projection. +void Graph::encodeFusedBlock(VkCommandBuffer commands, Temporaries& temps, const Activation& state, + Activation* output, int block, uint32_t channels, uint32_t width, uint32_t height, + uint32_t phase, const FusedLayout& layout, const Tensor& tensor, + const Activation* ffnSkipOverride, Activation* rawOutput, Activation* pooledOutput, + uint32_t pooledWidth, bool deferProjection, bool firstInStage, bool lastInStage, + uint32_t c32WaitScale, bool c32ChainOut) { + const uint32_t rows = width * height; + // Barrier-free chaining of the expert-stage PTX launches (FFN -> attention -> projection / next FFN). + const bool chain = routes_.chain && (routes_.chainMask & 1) && layout.expertFfn && channels <= 256; + uint32_t chainShiftX = 0, chainShiftY = 0; + windowPhase(phase, chainShiftX, chainShiftY); + const uint32_t chainWindowsX = (width + chainShiftX + 7) / 8; + const uint32_t chainWinExpected = chainWindowsX * layout.heads; + // This block's FFN publication alternates between two buffers so a deferred projection can still read the previous one. + Activation* ffnOut = (temps.ffnQuantized2 && (block & 1)) ? temps.ffnQuantized2 : temps.ffnQuantized; + kernels_.setStageLabel("block " + std::to_string(block) + " c" + std::to_string(channels)); + const Activation* residual = ffnSkipOverride ? ffnSkipOverride : &state; + if (options_.fusedBlocks && !options_.captureIntermediates && channels == 32) { + uint32_t shiftX, shiftY; + windowPhase(phase, shiftX, shiftY); + Kernels::FusedBlock32Args f; + f.state = &state; + f.skip16 = ffnSkipOverride; + f.w1 = &model_.fp8Matrix(tensor, layout.expand, 32, layout.hidden); + f.w2 = &model_.fp8Matrix(tensor, layout.contractWeights, layout.hidden, 32, true, 0, false); // [32 n][128 k] + if (Kernels::ptxBlock32Enabled()) { + static const std::vector hiddenPerm = Kernels::mlpHiddenPermutation(); + f.w1Ptx = &model_.fp8MatrixPermuted(tensor, layout.expand, 32, layout.hidden, 32, hiddenPerm, "mlp"); + f.w2Ptx = &model_.fp8Matrix(tensor, layout.contractWeights, layout.hidden, 32, true, layout.hidden); // tile-major [4][32][32] + } + f.wqkv = &model_.fp8Matrix(tensor, layout.qkv, 32, 96); + f.wproj = &model_.fp8Matrix(tensor, layout.projection, 32, 32); + f.prior = &model_.relativeBias(tensor, layout.relative, 1); + f.tensor = &tensor; + f.ffnScaleByteOffset = layout.ffnCosSkip; + f.attnScaleByteOffset = layout.attnCosSkip; + f.attentionScaleByteOffset = layout.scale; + f.outE4 = output; + f.outF16 = rawOutput; + f.pooled = pooledOutput; f.pooledWidth = pooledWidth; + f.width = width; f.height = height; f.shiftX = shiftX; f.shiftY = shiftY; + chainBlock32(f, block, c32WaitScale, c32ChainOut); + kernels_.fusedBlock32(commands, f); + return; + } + if (pooledOutput) throw std::runtime_error("pooled output needs the fused 32-channel block"); + uint32_t ffnRowsPerGroup = 64; // rows per producer workgroup behind the FFN row-band signals (the qkv wait's group size) + if (layout.expertFfn) { + // C/32 expert paths, each C -> 128 -> 32 -> C. MpCubicSiLU after W1 only; + // W3 is expert-major so one K = C GEMM chains every expert into the + // scaled skip with the F13 accumulation grouping. + const uint32_t experts = layout.expertCount; + const uint32_t w2Base = layout.expand + experts * channels * 128; + const uint32_t w3Base = w2Base + experts * 128 * 32; + const vk::Buffer& w1Weights = model_.fp8Matrix(tensor, layout.expand, experts * channels, 128, true, channels); + if (options_.fusedBlocks && !options_.captureIntermediates && Kernels::ptxFfnEnabled() && channels <= 256) { + // PTX expert FFN + W3 in one kernel (ffn_e4m3.py): every expert of a row group in one workgroup. + if (ffnSkipOverride) throw std::runtime_error("PTX expert FFN assumes the block state is the FFN skip"); + static const std::vector hiddenPerm = Kernels::mlpHiddenPermutation(); + Kernels::ExpertFfnArgs ffn; + ffnRowsPerGroup = 16 * Kernels::ffnRowTiles(channels); + ffn.input = &state; + ffn.w1 = &model_.fp8MatrixPermuted(tensor, layout.expand, experts * channels, 128, channels, hiddenPerm, "mlp"); + ffn.w2 = &model_.fp8Matrix(tensor, w2Base, experts * 128, 32, true, 128); + ffn.w3 = &model_.fp8Matrix(tensor, w3Base, channels, channels); + ffn.auxTensor = &tensor; ffn.auxByteOffset = layout.ffnCosSkip; + ffn.output = ffnOut; ffn.rows = rows; ffn.channels = channels; ffn.width = width; + Kernels::Chain fc; + if (chain) { + if (hasPendingProjection_) { + fc.waitRows = kernels_.syncAddress(pendingProjection_.block, Kernels::kSyncRows); + fc.waitExpected = pendingProjection_.winExpected; fc.waitShiftY = pendingProjection_.shiftY; + } else if (!firstInStage) { + fc.waitBands = kernels_.syncAddress(block, Kernels::kSyncState); // the previous block's projection GEMM + fc.waitMul = channels / 64; // one signal per (row group, column group) + } + fc.signal = kernels_.syncAddress(block, Kernels::kSyncBands); + fc.chained = true; + } + if (hasPendingProjection_) { // the previous block's projection runs inside this kernel + ffn.attended = pendingProjection_.attended; ffn.ffnPrev = pendingProjection_.ffnQ; + ffn.wproj = pendingProjection_.wproj; ffn.auxAttnByteOffset = pendingProjection_.auxAttn; ffn.auxTensorPrev = pendingProjection_.tensor; + if (options_.captureBoundaries) ffn.stateOut = pendingProjection_.stateOut; // materialize the previous block's output for the gate + hasPendingProjection_ = false; + } + kernels_.expertFfnPtx(commands, ffn, fc); + if (ffn.stateOut) capture(commands, "block-" + std::to_string(pendingProjection_.block), *ffn.stateOut); + } else if (options_.fusedBlocks && !options_.captureIntermediates) { + static const bool ptxMlp = !getenv("DLSS5VK_NO_PTX_MLP"); + Kernels::MlpArgs mlp; + mlp.input = &state; mlp.broadcastInput = true; + mlp.output = temps.ffnNarrow; mlp.rows = rows; mlp.K = channels; mlp.hidden = 128; mlp.nout = 32; + mlp.batches = experts; + if (ptxMlp) { + // PTX MLP: W1 columns permuted per expert (register-resident hidden layer), W2 tile-major per expert. + static const std::vector hiddenPerm = Kernels::mlpHiddenPermutation(); + mlp.w1 = &model_.fp8MatrixPermuted(tensor, layout.expand, experts * channels, 128, channels, hiddenPerm, "mlp"); + mlp.w2 = &model_.fp8Matrix(tensor, w2Base, experts * 128, 32, true, 128); + kernels_.mlpPtx(commands, mlp); + } else { + const vk::Buffer& w2Weights = model_.fp8Matrix(tensor, w2Base, experts * 128, 32, true, 128, false); + mlp.w1 = &w1Weights; mlp.w2 = &w2Weights; + kernels_.gemmMlp(commands, mlp); + } + GemmFp8Args w3; + w3.input = temps.ffnNarrow; w3.rows = rows; w3.K = channels; w3.N = channels; + w3.weights = &model_.fp8Matrix(tensor, w3Base, channels, channels); w3.Nmatrix = channels; + w3.output = temps.ffnQuantized; w3.quantize = true; // the f16 twin was never read by the expert blocks + w3.residual = residual; w3.scaleResidual = true; w3.auxTensor = &tensor; w3.auxByteOffset = layout.ffnCosSkip; + kernels_.gemmFp8(commands, w3); + } else { + const vk::Buffer& w2Weights = model_.fp8Matrix(tensor, w2Base, experts * 128, 32, true, 128); + GemmFp8Args w1; + w1.input = &state; w1.rows = rows; w1.K = channels; w1.N = 128; w1.batches = experts; w1.broadcastInput = true; + w1.weights = &w1Weights; w1.Nmatrix = 128; + w1.output = temps.ffn; w1.silu = true; w1.quantize = true; + kernels_.gemmFp8(commands, w1); + GemmFp8Args w2; + w2.input = temps.ffn; w2.rows = rows; w2.K = 128; w2.N = 32; w2.batches = experts; + w2.weights = &w2Weights; w2.Nmatrix = 32; + w2.output = temps.ffnNarrow; w2.quantize = true; + kernels_.gemmFp8(commands, w2); + GemmFp8Args w3; + w3.input = temps.ffnNarrow; w3.rows = rows; w3.K = channels; w3.N = channels; + w3.weights = &model_.fp8Matrix(tensor, w3Base, channels, channels); w3.Nmatrix = channels; + w3.output = temps.ffnResidual; w3.quantize = false; w3.dualOutput = temps.ffnQuantized; + w3.residual = residual; w3.scaleResidual = true; w3.auxTensor = &tensor; w3.auxByteOffset = layout.ffnCosSkip; + kernels_.gemmFp8(commands, w3); + } + } else { + GemmFp8Args expand; + expand.input = &state; expand.rows = rows; expand.K = channels; expand.N = layout.hidden; + expand.weights = &model_.fp8Matrix(tensor, layout.expand, channels, layout.hidden); expand.Nmatrix = layout.hidden; + expand.output = temps.ffn; expand.silu = true; expand.quantize = true; + kernels_.gemmFp8(commands, expand); + GemmFp8Args contract; + contract.input = temps.ffn; contract.rows = rows; contract.K = layout.hidden; contract.N = channels; + contract.weights = &model_.fp8Matrix(tensor, layout.contractWeights, layout.hidden, channels); + contract.Nmatrix = channels; + contract.output = temps.ffnResidual; contract.quantize = false; contract.dualOutput = temps.ffnQuantized; + contract.residual = residual; contract.scaleResidual = true; contract.auxTensor = &tensor; + contract.auxByteOffset = layout.ffnCosSkip; + kernels_.gemmFp8(commands, contract); + } + + std::string prefix = "block-" + std::to_string(block) + "/"; + if (options_.captureIntermediates) { + capture(commands, prefix + "ffn", *temps.ffn); + capture(commands, prefix + "ffnResidual", *temps.ffnResidual); + capture(commands, prefix + "ffnQuantized", *temps.ffnQuantized); + } + uint32_t shiftX, shiftY; + windowPhase(phase, shiftX, shiftY); + const vk::Buffer& qkvWeights = model_.fp8Matrix(tensor, layout.qkv, channels, channels * 3); + if (options_.fusedBlocks && !options_.captureIntermediates) { + // The raw half QKV never leaves the SM: projection + normalize + attention per (window, head). + Kernels::Chain qc; + if (chain) { + qc.waitBands = kernels_.syncAddress(block, Kernels::kSyncBands); + qc.waitGroupRows = ffnRowsPerGroup; // the FFN signals each band once per workgroup of this many rows + qc.signal = kernels_.syncAddress(block, Kernels::kSyncRows); + qc.chained = true; + } + kernels_.qkvAttention(commands, *ffnOut, qkvWeights, channels * 3, tensor, layout.scale, + model_.relativeBias(tensor, layout.relative, layout.heads), *temps.attended, width, height, + layout.heads, shiftX, shiftY, qc); + } else { + GemmFp8Args qkv; + qkv.input = temps.ffnQuantized; qkv.rows = rows; qkv.K = channels; qkv.N = channels * 3; + qkv.weights = &qkvWeights; qkv.Nmatrix = channels * 3; + qkv.output = temps.qkv; qkv.quantize = false; + kernels_.gemmFp8(commands, qkv); + if (options_.captureIntermediates) capture(commands, prefix + "qkv", *temps.qkv); + kernels_.windowNormalize(commands, *temps.qkv, tensor, layout.scale, *temps.normalized, rows, layout.heads); + if (options_.captureIntermediates) capture(commands, prefix + "normalized", *temps.normalized); + kernels_.windowAttend(commands, *temps.normalized, model_.relativeBias(tensor, layout.relative, layout.heads), + *temps.attended, width, height, layout.heads, shiftX, shiftY); + } + if (options_.captureIntermediates) capture(commands, prefix + "attended", *temps.attended); + + // The expert kernels reuse the E4 FFN publication as the attention skip; + // the dense 32-channel blocks keep the raw FP16 residual. + if (deferProjection) { + if (!layout.expertFfn || rawOutput) throw std::runtime_error("deferred projection needs an expert block without a raw output"); + pendingProjection_ = {temps.attended, ffnOut, &model_.fp8Matrix(tensor, layout.projection, channels, channels), layout.attnCosSkip, &tensor, output, block, + chainWinExpected, chainShiftY}; + hasPendingProjection_ = true; + return; + } + GemmFp8Args projection; + projection.input = temps.attended; projection.rows = rows; projection.K = channels; projection.N = channels; + projection.weights = &model_.fp8Matrix(tensor, layout.projection, channels, channels); + projection.Nmatrix = channels; + projection.residual = layout.expertFfn ? (const Activation*)ffnOut : (const Activation*)temps.ffnResidual; + projection.scaleResidual = true; projection.auxTensor = &tensor; projection.auxByteOffset = layout.attnCosSkip; + if (rawOutput) { + projection.output = rawOutput; projection.quantize = false; projection.dualOutput = output; + } else { + projection.output = output; projection.quantize = true; + } + if (chain) { + projection.chainWaitRows = kernels_.syncAddress(block, Kernels::kSyncRows); + projection.chainWaitExpected = chainWinExpected; projection.chainWaitShiftY = chainShiftY; projection.chainWidth = width; + if (!lastInStage) { projection.chainSignal = kernels_.syncAddress(block + 1, Kernels::kSyncState); projection.chained = true; } + } + kernels_.gemmFp8(commands, projection); +} + +// encodeSplitBlock: eight independent 512 -> 64 -> 256 -> 64 FFN branches +// (SiLU after the 256-wide middle only), concatenated and contracted, then +// 16-head window attention. Every inter-GEMM boundary is E4M3. +void Graph::encodeSplitBlock(VkCommandBuffer commands, SplitTemporaries& temps, const Activation& state, + Activation* output, int block, uint32_t width, uint32_t height, uint32_t phase, + Activation* rawOutput, bool firstInStage, bool lastInStage) { + const uint32_t rows = width * height; + // Chaining: contract GEMM -> attention -> projection -> next block's layer-0 GEMM without barriers (the branch MLP + // stays a barrier-separated GLSL dispatch). Bit 4 of the mask is off by default: measured neutral, and leaving it + // off lets the split GEMMs take the (faster) gemmv route, which chains on a single counter instead. + const bool chain = routes_.chain && (routes_.chainMask & 4); + uint32_t chainShiftX = 0, chainShiftY = 0; + windowPhase(phase, chainShiftX, chainShiftY); + const uint32_t chainWinExpected = ((width + chainShiftX + 7) / 8) * 16; // windows x heads + kernels_.setStageLabel("block " + std::to_string(block) + " split512"); + const uint32_t channels = 512; + const Tensor& branchTensor = model_.tensor(block, 0); + const Tensor& contract = model_.tensor(block, 1); + const Tensor& qkvTensor = model_.tensor(block, 2); + const Tensor& projection = model_.tensor(block, 3); + const uint32_t branches = 8, branchChannels = 64, middleChannels = 256; + const uint32_t w2Base = branches * channels * branchChannels; + const uint32_t w3Base = w2Base + branches * branchChannels * middleChannels; + // The qkv tensor of a split block is [512][1536] weights, then the 16 per-head 64x64 priors, then the per-head + // f32 attention scales; the projection tensor is [512][512] weights then its attention skip scales. + const uint32_t heads = 16; + const uint32_t qkvRelative = channels * channels * 3, qkvScale = qkvRelative + heads * 8192; + + GemmFp8Args w1; + w1.input = &state; w1.rows = rows; w1.K = channels; w1.N = channels; + w1.weights = &model_.fp8Matrix(branchTensor, 0, channels, channels); w1.Nmatrix = channels; + w1.output = temps.branch; w1.quantize = true; + // Chained pieces: 1 contract -> attention, 2 attention -> projection, 4 projection -> the next block's layer 0 + // (the branch MLP stays a barrier-separated dispatch). + constexpr int splitChain = 7; + if (chain && !firstInStage && (splitChain & 4)) { w1.chainWaitBands = kernels_.syncAddress(block, Kernels::kSyncState); w1.chainWidth = width; w1.chainWaitMul = channels / 64; } + kernels_.gemmFp8(commands, w1); + if (options_.fusedBlocks && !options_.captureIntermediates) { + const vk::Buffer& w2Weights = + model_.fp8Matrix(branchTensor, w2Base, branches * branchChannels, middleChannels, true, branchChannels); + // Fused MLP: W3 N-major per branch ([branch][64 n][256 k]). + const vk::Buffer& w3Weights = + model_.fp8Matrix(branchTensor, w3Base, branches * middleChannels, branchChannels, true, middleChannels, false); + Kernels::MlpArgs mlp; + mlp.input = temps.branch; mlp.w1 = &w2Weights; mlp.w2 = &w3Weights; mlp.output = temps.layer0; + mlp.rows = rows; mlp.K = branchChannels; mlp.hidden = middleChannels; mlp.nout = branchChannels; mlp.batches = branches; + kernels_.gemmMlp(commands, mlp); + } else { + const vk::Buffer& w2Weights = + model_.fp8Matrix(branchTensor, w2Base, branches * branchChannels, middleChannels, true, branchChannels); + const vk::Buffer& w3Weights = + model_.fp8Matrix(branchTensor, w3Base, branches * middleChannels, branchChannels, true, middleChannels); + GemmFp8Args w2; + w2.input = temps.branch; w2.rows = rows; w2.K = branchChannels; w2.N = middleChannels; w2.batches = branches; + w2.weights = &w2Weights; w2.Nmatrix = middleChannels; w2.output = temps.middle; w2.silu = true; w2.quantize = true; + kernels_.gemmFp8(commands, w2); + GemmFp8Args w3; + w3.input = temps.middle; w3.rows = rows; w3.K = middleChannels; w3.N = branchChannels; w3.batches = branches; + w3.weights = &w3Weights; w3.Nmatrix = branchChannels; w3.output = temps.layer0; w3.quantize = true; + kernels_.gemmFp8(commands, w3); + } + + GemmFp8Args ffn; + ffn.input = temps.layer0; ffn.rows = rows; ffn.K = channels; ffn.N = channels; + ffn.weights = &model_.fp8Matrix(contract, 0, channels, channels); ffn.Nmatrix = channels; + ffn.output = temps.ffnResidual; ffn.quantize = true; + ffn.residual = &state; ffn.scaleResidual = true; ffn.auxTensor = &contract; ffn.auxByteOffset = channels * channels; + if (chain && (splitChain & 1)) { ffn.chainSignal = kernels_.syncAddress(block, Kernels::kSyncBands); ffn.chainWidth = width; ffn.chained = true; } + kernels_.gemmFp8(commands, ffn); + + uint32_t shiftX, shiftY; + windowPhase(phase, shiftX, shiftY); + std::string prefix = "block-" + std::to_string(block) + "/"; + const vk::Buffer& qkvWeights = model_.fp8Matrix(qkvTensor, 0, channels, channels * 3); + if (options_.fusedBlocks && !options_.captureIntermediates) { + Kernels::Chain qc; + if (chain && (splitChain & 1)) { qc.waitBands = kernels_.syncAddress(block, Kernels::kSyncBands); qc.waitMul = channels / 64; } + if (chain && (splitChain & 2)) { qc.signal = kernels_.syncAddress(block, Kernels::kSyncRows); qc.chained = true; } + kernels_.qkvAttention(commands, *temps.ffnResidual, qkvWeights, channels * 3, qkvTensor, qkvScale, + model_.relativeBias(qkvTensor, qkvRelative, heads), *temps.attended, width, height, heads, + shiftX, shiftY, qc); + } else { + GemmFp8Args qkv; + qkv.input = temps.ffnResidual; qkv.rows = rows; qkv.K = channels; qkv.N = channels * 3; + qkv.weights = &qkvWeights; qkv.Nmatrix = channels * 3; + qkv.output = temps.qkv; qkv.quantize = false; + kernels_.gemmFp8(commands, qkv); + if (options_.captureIntermediates) capture(commands, prefix + "qkv", *temps.qkv); + kernels_.windowNormalize(commands, *temps.qkv, qkvTensor, qkvScale, *temps.normalized, rows, heads); + kernels_.windowAttend(commands, *temps.normalized, model_.relativeBias(qkvTensor, qkvRelative, heads), + *temps.attended, width, height, heads, shiftX, shiftY); + } + if (options_.captureIntermediates) capture(commands, prefix + "attended", *temps.attended); + + GemmFp8Args proj; + proj.input = temps.attended; proj.rows = rows; proj.K = channels; proj.N = channels; + proj.weights = &model_.fp8Matrix(projection, 0, channels, channels); proj.Nmatrix = channels; + proj.residual = temps.ffnResidual; proj.scaleResidual = true; proj.auxTensor = &projection; + proj.auxByteOffset = channels * channels; + if (rawOutput) { + proj.output = rawOutput; proj.quantize = false; proj.dualOutput = output; + } else { + proj.output = output; proj.quantize = true; + } + if (chain && (splitChain & 2)) { + proj.chainWaitRows = kernels_.syncAddress(block, Kernels::kSyncRows); + proj.chainWaitExpected = chainWinExpected; proj.chainWaitShiftY = chainShiftY; proj.chainWidth = width; + } + if (chain && (splitChain & 4) && !lastInStage) { proj.chainSignal = kernels_.syncAddress(block + 1, Kernels::kSyncState); proj.chainWidth = width; proj.chained = true; } + kernels_.gemmFp8(commands, proj); +} + +// Global ViT: eight 1024-channel blocks over the coarsest tokens. +void Graph::encodeVit(VkCommandBuffer commands, Activation& state, uint32_t tokens) { + const uint32_t channels = 1024, heads = 32, ffnChannels = 4096; + const uint32_t padded = geometry_.paddedVitTokens(); + Activation* expanded = allocate("ViT FFN 4096", tokens, ffnChannels, Format::E4); + Activation* ffnResidual = allocate("ViT FFN residual", tokens, channels, Format::E4); + Activation* qkv = allocate("ViT QKV", tokens, channels * 3, Format::F16); + Activation* normalized = allocate("ViT normalized QKV", padded, channels * 3, Format::E4); + Activation* attended = allocate("ViT attended", tokens, channels, Format::E4); + // Counter chaining of the ViT GEMMs (gemmv PTX: one signal per published column group; the consumer waits for + // the producer's column-group count at kSyncRows + 4 * {0 expand, 1 contract, 2 qkv, 4 projection}). + const bool chain = routes_.vitChain; + auto vitCounter = [&](int block, int op) { return kernels_.syncAddress(block, Kernels::kSyncRows) + 4 * op; }; + for (int block = 31; block <= 38; ++block) { + kernels_.setStageLabel("block " + std::to_string(block) + " vit"); + const Tensor& expand = model_.tensor(block, 0); + const Tensor& contract = model_.tensor(block, 1); + const Tensor& qkvTensor = model_.tensor(block, 2); + const Tensor& projection = model_.tensor(block, 4); + GemmFp8Args e; + e.input = &state; e.rows = tokens; e.K = channels; e.N = ffnChannels; + e.weights = &model_.fp8Matrix(expand, 0, channels, ffnChannels); e.Nmatrix = ffnChannels; + e.output = expanded; e.silu = true; e.quantize = true; + e.chainSingle = true; + if (chain) { + if (block > 31) { e.chainWaitRows = vitCounter(block - 1, 4); e.chainWaitExpected = Kernels::vitGemmSignals(tokens, channels); } + e.chainSignal = vitCounter(block, 0); e.chained = true; + } + kernels_.gemmFp8(commands, e); + GemmFp8Args c; + c.chainSingle = true; + c.input = expanded; c.rows = tokens; c.K = ffnChannels; c.N = channels; c.partition = 1024; + c.weights = &model_.fp8Matrix(contract, 0, ffnChannels, channels); c.Nmatrix = channels; + c.output = ffnResidual; c.quantize = true; + c.residual = &state; c.scaleResidual = true; c.auxTensor = &contract; c.auxByteOffset = ffnChannels * channels; + if (chain) { c.chainWaitRows = vitCounter(block, 0); c.chainWaitExpected = Kernels::vitGemmSignals(tokens, ffnChannels); c.chainSignal = vitCounter(block, 1); c.chained = true; } + kernels_.gemmFp8(commands, c); + const bool streamPtx = kernels_.globalAttentionStreamPtx(padded) && options_.fusedBlocks; + const bool attnPtx = (streamPtx || (kernels_.globalAttentionPtx(padded, nullptr) && padded <= 256)) && options_.fusedBlocks; + GemmFp8Args q; + q.chainSingle = true; + q.input = ffnResidual; q.rows = tokens; q.K = channels; q.N = channels * 3; q.partition = 512; + q.weights = &model_.fp8Matrix(qkvTensor, heads * 4, channels, channels * 3); q.Nmatrix = channels * 3; + q.output = qkv; q.quantize = false; + if (chain) { + q.chainWaitRows = vitCounter(block, 1); q.chainWaitExpected = Kernels::vitGemmSignals(tokens, channels); + if (attnPtx) { q.chainSignal = vitCounter(block, 2); q.chained = true; } // else the GLSL attention follows a barrier + } + kernels_.gemmFp8(commands, q); + std::string prefix = "block-" + std::to_string(block) + "/"; + if (options_.captureIntermediates) capture(commands, prefix + "qkv", *qkv); + if (streamPtx) { + // any token count: normalize once (per-head E4 layout), then stream the key blocks; both chained + Kernels::Chain nc, ac; + if (chain) { + nc.waitRows = vitCounter(block, 2); nc.waitExpected = Kernels::vitGemmSignals(tokens, channels * 3); + nc.signal = vitCounter(block, 5); nc.chained = true; + ac.waitRows = vitCounter(block, 5); ac.waitExpected = heads * (padded / 64); ac.signal = vitCounter(block, 3); ac.chained = true; + } + kernels_.globalNormalizePtx(commands, *qkv, qkvTensor, 0, *normalized, tokens, padded, heads, &nc); + kernels_.globalAttentionStream(commands, *normalized, *attended, tokens, padded, heads, &ac); + } else if (options_.fusedBlocks && padded <= 256) { + Kernels::Chain ac; + if (chain && attnPtx) { ac.waitRows = vitCounter(block, 2); ac.waitExpected = Kernels::vitGemmSignals(tokens, channels * 3); ac.signal = vitCounter(block, 3); ac.chained = true; } + kernels_.globalAttention(commands, *qkv, qkvTensor, 0, *attended, tokens, padded, heads, nullptr, &ac); + } else if (options_.fusedBlocks) { + // Large ViT sequences (high resolutions): normalize once, then stream the keys in chunks. + kernels_.globalNormalize(commands, *qkv, qkvTensor, 0, *normalized, tokens, heads); + kernels_.globalAttention(commands, *qkv, qkvTensor, 0, *attended, tokens, padded, heads, normalized); + } else { + kernels_.globalNormalize(commands, *qkv, qkvTensor, 0, *normalized, tokens, heads); + if (options_.captureIntermediates) capture(commands, prefix + "normalized", *normalized); + kernels_.globalAttend(commands, *normalized, *attended, tokens, padded, heads); + } + if (options_.captureIntermediates) capture(commands, prefix + "attended", *attended); + GemmFp8Args p; + p.chainSingle = true; + p.input = attended; p.rows = tokens; p.K = channels; p.N = channels; p.partition = 256; + p.weights = &model_.fp8Matrix(projection, 0, channels, channels); p.Nmatrix = channels; + p.output = &state; p.quantize = true; + p.residual = ffnResidual; p.scaleResidual = true; p.auxTensor = &projection; p.auxByteOffset = channels * channels; + if (chain && attnPtx) { p.chainWaitRows = vitCounter(block, 3); p.chainWaitExpected = heads * (padded / 64); } + if (chain && block < 38) { p.chainSignal = vitCounter(block, 4); p.chained = true; } // the next block's expand waits + kernels_.gemmFp8(commands, p); + capture(commands, "block-" + std::to_string(block), state); + } +} + +void Graph::record(VkCommandBuffer commands, const Activation& inputFeatures) { + kernels_.resetDispatchCount(); + kernels_.resetSync(commands); // chaining and split-K tile counters + const Geometry& g = geometry_; + const uint32_t fullRows = g.fullWidth * g.fullHeight; + if (inputFeatures.format != Format::F32 || inputFeatures.rows != fullRows || inputFeatures.channels != 16) + throw std::runtime_error("input features must be f32 [fullWidth*fullHeight][16]"); + boundaries_.clear(); + usedThisRecord_.clear(); + for (uint32_t& phase : windowPhase_) phase = 0; + usedThisRecord_.insert(inputFeatures.label + "/" + std::to_string(inputFeatures.rows) + "x" + std::to_string(inputFeatures.channels) + "/" + std::to_string((int)inputFeatures.format)); + + // ---- Encoder 32 pre: FP16 input adapter, full-resolution block 0, downsample. + kernels_.setStageLabel("pre"); + const Tensor& preTensor = model_.tensor(0); + FusedLayout preLayout = preFusedLayout(); + if (preTensor.byteLength != preLayout.endWithoutPadding + 16) throw std::runtime_error("unexpected block0 layout"); + const bool fusePre = routes_.fusePre, fusePool = routes_.fusePool; + Activation* adapter = allocate("retained full block0", fullRows, 32, Format::E4); + Activation* resized = allocate("block0 downsample", g.levels[0].width * g.levels[0].height, 32, Format::E4); + Activation* adapterRaw = allocate("raw FP16 block0", fullRows, 32, Format::F16); + Temporaries fullTemps = createTemporaries("pre block0", fullRows, 32); + if (options_.fusedBlocks && !options_.captureIntermediates && fusePre) { + // The f32 -> f16 conversion and the 16 -> 32 input adapter run inside block 0 (register-resident skip / state). + uint32_t paddedN = 0; + const vk::Buffer& adapterWeights = model_.f16Matrix(preTensor, preLayout.inputAdapter, 16, 32, paddedN); + uint32_t shiftX, shiftY; + windowPhase(takeWindowPhase(kFullLevel), shiftX, shiftY); + kernels_.setStageLabel("block 0 c32"); + Kernels::FusedBlock32Args f; + f.features = &inputFeatures; f.adapterWeights = &adapterWeights; + f.w1 = &model_.fp8Matrix(preTensor, preLayout.expand, 32, preLayout.hidden); + f.w2 = &model_.fp8Matrix(preTensor, preLayout.contractWeights, preLayout.hidden, 32, true, 0, false); + if (Kernels::ptxBlock32Enabled()) { + static const std::vector hiddenPerm = Kernels::mlpHiddenPermutation(); + f.w1Ptx = &model_.fp8MatrixPermuted(preTensor, preLayout.expand, 32, preLayout.hidden, 32, hiddenPerm, "mlp"); + f.w2Ptx = &model_.fp8Matrix(preTensor, preLayout.contractWeights, preLayout.hidden, 32, true, preLayout.hidden); // tile-major [4][32][32] + } + f.wqkv = &model_.fp8Matrix(preTensor, preLayout.qkv, 32, 96); + f.wproj = &model_.fp8Matrix(preTensor, preLayout.projection, 32, 32); + f.prior = &model_.relativeBias(preTensor, preLayout.relative, 1); + f.tensor = &preTensor; + f.ffnScaleByteOffset = preLayout.ffnCosSkip; + f.attnScaleByteOffset = preLayout.attnCosSkip; + f.attentionScaleByteOffset = preLayout.scale; + f.outE4 = adapter; + if (fusePool) { f.pooled = resized; f.pooledWidth = g.levels[0].width; } else f.outF16 = adapterRaw; + f.width = g.fullWidth; f.height = g.fullHeight; f.shiftX = shiftX; f.shiftY = shiftY; + c32Prev_.valid = false; + chainBlock32(f, 0, 0, fusePool); // block 1 reads the pooled rows + kernels_.fusedBlock32(commands, f); + } else { + inputHalf_ = allocate("input features f16", fullRows, 16, Format::F16); + kernels_.convertF32ToF16(commands, inputFeatures, *inputHalf_); + Activation* projectedFp16 = allocate("full FP16 input adapter", fullRows, 32, Format::F16); + Activation* projected = allocate("full FP8 input adapter", fullRows, 32, Format::E4); + { + uint32_t paddedN = 0; + GemmF16Args pre; + pre.input = inputHalf_; + pre.weights = &model_.f16Matrix(preTensor, preLayout.inputAdapter, 16, 32, paddedN); + pre.paddedN = paddedN; pre.output = projectedFp16; pre.dualOutput = projected; + pre.rows = fullRows; pre.K = 16; pre.N = 32; + kernels_.gemmF16(commands, pre); + } + if (options_.captureIntermediates) { + capture(commands, "block-0/projectedFp16", *projectedFp16); + capture(commands, "block-0/projected", *projected); + } + encodeFusedBlock(commands, fullTemps, *projected, adapter, 0, 32, g.fullWidth, g.fullHeight, + takeWindowPhase(kFullLevel), preLayout, preTensor, projectedFp16, adapterRaw); + } + capture(commands, "block-0", *adapter); + if (options_.captureIntermediates) capture(commands, "block-0/adapterRaw", *adapterRaw); + + const Geometry::Level d0 = g.levels[0], d1 = g.levels[1], d2 = g.levels[2], d3 = g.levels[3], d4 = g.levels[4], + d5 = g.levels[5]; + const uint32_t rows0 = d0.width * d0.height; + kernels_.setStageLabel("transition 0-1"); + if (!(options_.fusedBlocks && !options_.captureIntermediates && fusePre && fusePool)) + kernels_.downsample2x(commands, *adapterRaw, *resized, g.fullWidth, g.fullHeight, d0.width, d0.height); + capture(commands, "transition-0-1", *resized); + + Activation* state = resized; + Activation* scratch = allocate("encoder 32 state", rows0, 32, Format::E4); + Activation* transitionRaw32 = allocate("raw FP16 block4", rows0, 32, Format::F16); + Temporaries latentTemps = createTemporaries("encoder 32", rows0, 32); + const uint32_t rows1 = d1.width * d1.height; + Activation* downsampled32 = allocate("encoder 32 downsample", rows1, 32, Format::E4); + const bool poolBlock4 = options_.fusedBlocks && !options_.captureIntermediates && fusePool; + for (int block = 1; block <= 4; ++block) { + encodeFusedBlock(commands, latentTemps, *state, scratch, block, 32, d0.width, d0.height, takeWindowPhase(0), + fusedLayout(32), model_.tensor(block), nullptr, (block == 4 && !poolBlock4) ? transitionRaw32 : nullptr, + (block == 4 && poolBlock4) ? downsampled32 : nullptr, d1.width, false, true, true, + block == 1 ? 1u : 0u, block != 4); + std::swap(state, scratch); + capture(commands, "block-" + std::to_string(block), *state); + } + Activation* skip32 = state; + kernels_.setStageLabel("transition 4-5"); + if (!poolBlock4) kernels_.downsample2x(commands, *transitionRaw32, *downsampled32, d0.width, d0.height, d1.width, d1.height); + capture(commands, "pooled-4-5", *downsampled32); + Activation* next64 = allocate("encoder 64 input", rows1, 64, Format::E4); + { + GemmFp8Args t; + t.input = downsampled32; t.rows = rows1; t.K = 32; t.N = 64; + t.weights = &model_.fp8Matrix(model_.tensor(4), fusedLayout(32).endWithoutPadding, 32, 64); t.Nmatrix = 64; + t.output = next64; t.quantize = true; + kernels_.gemmFp8(commands, t); + } + capture(commands, "transition-4-5", *next64); + + // ---- Encoder fused stages 64 / 128 / 256. + struct FusedStage { Geometry::Level level, next; uint32_t channels; int first, last, levelIndex; }; + const FusedStage encoderStages[] = {{d1, d2, 64, 5, 8, 1}, {d2, d3, 128, 9, 14, 2}, {d3, d4, 256, 15, 22, 3}}; + Activation* skips[3] = {}; + Activation* stageInput = next64; + for (int s = 0; s < 3; ++s) { + const FusedStage& stage = encoderStages[s]; + const uint32_t rows = stage.level.width * stage.level.height; + const uint32_t nextRows = stage.next.width * stage.next.height; + std::string label = "encoder " + std::to_string(stage.channels); + Activation* st = stageInput; + Activation* sc = allocate(label + " state", rows, stage.channels, Format::E4); + Activation* raw = allocate(label + " raw transition", rows, stage.channels, Format::F16); + Temporaries temps = createTemporaries(label, rows, stage.channels); + const bool deferProj = temps.ffnQuantized2 != nullptr; // PTX FFN with the projection of the previous block fused + for (int block = stage.first; block <= stage.last; ++block) { + encodeFusedBlock(commands, temps, *st, sc, block, stage.channels, stage.level.width, stage.level.height, + takeWindowPhase(stage.levelIndex), fusedLayout(stage.channels), model_.tensor(block), nullptr, + block == stage.last ? raw : nullptr, nullptr, 0, deferProj && block != stage.last, + block == stage.first, block == stage.last); + std::swap(st, sc); + if (!hasPendingProjection_) capture(commands, "block-" + std::to_string(block), *st); + } + skips[s] = st; + kernels_.setStageLabel("transition " + std::to_string(stage.last)); + Activation* pooled = allocate(label + " downsample", nextRows, stage.channels, Format::E4); + kernels_.downsample2x(commands, *raw, *pooled, stage.level.width, stage.level.height, stage.next.width, + stage.next.height); + capture(commands, "pooled-" + std::to_string(stage.last) + "-" + std::to_string(stage.last + 1), *pooled); + Activation* next = allocate(label + " next stage", nextRows, stage.channels * 2, Format::E4); + GemmFp8Args t; + t.input = pooled; t.rows = nextRows; t.K = stage.channels; t.N = stage.channels * 2; + t.weights = &model_.fp8Matrix(model_.tensor(stage.last), fusedLayout(stage.channels).endWithoutPadding, + stage.channels, stage.channels * 2); + t.Nmatrix = stage.channels * 2; t.output = next; t.quantize = true; + kernels_.gemmFp8(commands, t); + capture(commands, "transition-" + std::to_string(stage.last) + "-" + std::to_string(stage.last + 1), *next); + stageInput = next; + } + Activation* skip64 = skips[0]; + Activation* skip128 = skips[1]; + Activation* skip256 = skips[2]; + + // ---- Encoder 512 (split blocks 23-30) and the pooled ViT input. + const uint32_t rows4 = d4.width * d4.height; + { + Activation* st = stageInput; + Activation* sc = allocate("encoder 512 state", rows4, 512, Format::E4); + Activation* raw = allocate("encoder 512 raw transition", rows4, 512, Format::F16); + SplitTemporaries temps = createSplitTemporaries("encoder 512", rows4); + for (int block = 23; block <= 30; ++block) { + encodeSplitBlock(commands, temps, *st, sc, block, d4.width, d4.height, takeWindowPhase(4), + block == 30 ? raw : nullptr, block == 23, block == 30); + std::swap(st, sc); + capture(commands, "block-" + std::to_string(block), *st); + } + Activation* skip512 = st; + kernels_.setStageLabel("transition 30-31"); + const uint32_t tokens = g.vitTokens(); + Activation* pooled = allocate("encoder 512 pooled", tokens, 512, Format::E4); + kernels_.downsample2x(commands, *raw, *pooled, d4.width, d4.height, d5.width, d5.height); + Activation* vitState = allocate("ViT state", tokens, 1024, Format::E4); + GemmFp8Args t; + t.input = pooled; t.rows = tokens; t.K = 512; t.N = 1024; + t.weights = &model_.fp8Matrix(model_.tensor(30, 4), 0, 512, 1024); t.Nmatrix = 1024; + t.output = vitState; t.quantize = true; + kernels_.gemmFp8(commands, t); + + // ---- ViT 31-38. + encodeVit(commands, *vitState, tokens); + + // ---- Decoder 512 (39-47): projected ViT output upsampled onto the encoder skip. + kernels_.setStageLabel("transition 38-39"); + Activation* projected512 = allocate("decoder 512 projection", tokens, 512, Format::F16); + GemmFp8Args p; + p.input = vitState; p.rows = tokens; p.K = 1024; p.N = 512; p.partition = 256; + p.weights = &model_.fp8Matrix(model_.tensor(39), 0, 1024, 512); p.Nmatrix = 512; + p.output = projected512; p.quantize = false; + kernels_.gemmFp8(commands, p); + Activation* merged = allocate("decoder 512 skip merge", rows4, 512, Format::E4); + kernels_.upsampleResidual(commands, *projected512, *skip512, model_.tensor(39), 1024 * 512, *merged, nullptr, + d5.width, d5.height, d4.width, d4.height); + capture(commands, "block-39", *merged); + Activation* dst = merged; + Activation* dsc = allocate("decoder 512 state", rows4, 512, Format::E4); + SplitTemporaries dtemps = createSplitTemporaries("decoder 512", rows4); + for (int block = 40; block <= 47; ++block) { + encodeSplitBlock(commands, dtemps, *dst, dsc, block, d4.width, d4.height, takeWindowPhase(4), nullptr, + block == 40, block == 47); + std::swap(dst, dsc); + capture(commands, "block-" + std::to_string(block), *dst); + } + stageInput = dst; + } + + // ---- Decoder fused stages 256 / 128 / 64 / 32. + struct DecoderStage { Geometry::Level low, high; uint32_t channels; int first, last, levelIndex; Activation* skip; }; + const DecoderStage decoderStages[] = {{d4, d3, 256, 48, 55, 3, skip256}, {d3, d2, 128, 56, 61, 2, skip128}, + {d2, d1, 64, 62, 65, 1, skip64}, {d1, d0, 32, 66, 69, 0, skip32}}; + for (const DecoderStage& stage : decoderStages) { + const uint32_t lowRows = stage.low.width * stage.low.height; + const uint32_t rows = stage.high.width * stage.high.height; + std::string label = "decoder " + std::to_string(stage.channels); + const Tensor& transition = model_.tensor(stage.first); + kernels_.setStageLabel("transition ->" + std::to_string(stage.first)); + FusedLayout layout = upsampleFusedLayout(stage.channels * 2, stage.channels); + if (transition.byteLength != layout.endWithoutPadding + 16) + throw std::runtime_error("unexpected upsample layout for block " + std::to_string(stage.first)); + Activation* projection = allocate(label + " projection", lowRows, stage.channels, Format::F16); + GemmFp8Args p; + p.input = stageInput; p.rows = lowRows; p.K = stage.channels * 2; p.N = stage.channels; + p.weights = &model_.fp8Matrix(transition, layout.upsampleWeight, stage.channels * 2, stage.channels); + p.Nmatrix = stage.channels; p.output = projection; p.quantize = false; + kernels_.gemmFp8(commands, p); + Activation* merged = allocate(label + " skip merge", rows, stage.channels, Format::E4); + Activation* rawMerged = stage.channels == 32 ? allocate(label + " raw skip merge", rows, 32, Format::F16) : nullptr; + const bool upresInBlock = stage.channels == 32 && options_.fusedBlocks && !options_.captureIntermediates && routes_.fuseUpres; + if (!upresInBlock) + kernels_.upsampleResidual(commands, *projection, *stage.skip, transition, layout.transitionScale, *merged, + rawMerged, stage.low.width, stage.low.height, stage.high.width, stage.high.height); + Activation* st = merged; + Activation* sc = allocate(label + " state", rows, stage.channels, Format::E4); + Temporaries temps = createTemporaries(label, rows, stage.channels); + for (int block = stage.first; block <= stage.last; ++block) { + int index = block - stage.first; + const uint32_t phase = takeWindowPhase(stage.levelIndex); + if (index == 0 && upresInBlock) { + // The 2x upsample + scaled skip merge runs inside the first block's input path (F_UPRES). + uint32_t shiftX, shiftY; + windowPhase(phase, shiftX, shiftY); + kernels_.setStageLabel("block " + std::to_string(block) + " c32"); + const Tensor& tensor = model_.tensor(block); + Kernels::FusedBlock32Args f; + f.state = stage.skip; f.lowProjection = projection; f.lowWidth = stage.low.width; + f.inputScaleByteOffset = layout.transitionScale; + f.w1 = &model_.fp8Matrix(tensor, layout.expand, 32, layout.hidden); + f.w2 = &model_.fp8Matrix(tensor, layout.contractWeights, layout.hidden, 32, true, 0, false); + if (Kernels::ptxBlock32Enabled()) { + static const std::vector hiddenPerm = Kernels::mlpHiddenPermutation(); + f.w1Ptx = &model_.fp8MatrixPermuted(tensor, layout.expand, 32, layout.hidden, 32, hiddenPerm, "mlp"); + f.w2Ptx = &model_.fp8Matrix(tensor, layout.contractWeights, layout.hidden, 32, true, layout.hidden); // tile-major [4][32][32] + } + f.wqkv = &model_.fp8Matrix(tensor, layout.qkv, 32, 96); + f.wproj = &model_.fp8Matrix(tensor, layout.projection, 32, 32); + f.prior = &model_.relativeBias(tensor, layout.relative, 1); + f.tensor = &tensor; + f.ffnScaleByteOffset = layout.ffnCosSkip; + f.attnScaleByteOffset = layout.attnCosSkip; + f.attentionScaleByteOffset = layout.scale; + f.outE4 = sc; + f.width = stage.high.width; f.height = stage.high.height; f.shiftX = shiftX; f.shiftY = shiftY; + c32Prev_.valid = false; // the upsampled inputs come from barrier-separated launches + chainBlock32(f, block, 0, true); + kernels_.fusedBlock32(commands, f); + } else { + const bool deferProj = temps.ffnQuantized2 != nullptr && block != stage.last; + encodeFusedBlock(commands, temps, *st, sc, block, stage.channels, stage.high.width, stage.high.height, + phase, block == stage.first ? layout : fusedLayout(stage.channels), + model_.tensor(block), index == 0 ? rawMerged : nullptr, nullptr, nullptr, 0, deferProj, + block == stage.first, block == stage.last, 0u, stage.channels == 32); // block 69 -> block 70 (post) + } + std::swap(st, sc); + if (!hasPendingProjection_) capture(commands, "block-" + std::to_string(block), *st); + } + stageInput = st; + } + + // ---- Full-resolution post block 70 and the RGBA head. + { + const Tensor& tensor = model_.tensor(70); + kernels_.setStageLabel("post"); + FusedLayout layout = postFusedLayout(); + if (tensor.byteLength != layout.endWithoutPadding) throw std::runtime_error("unexpected block70 layout"); + head_ = allocate("RGBA neural head", fullRows, 4, Format::F32); + if (options_.fusedBlocks && !options_.captureIntermediates && routes_.fusePost) { + // The post blend (2x upsample of block 69 + block 0, learned scales) feeds block 70 in registers and the + // RGBA head runs in its epilogue: the frame's last full-resolution round trips disappear. + uint32_t paddedN = 0; + const vk::Buffer& headWeights = model_.f16Matrix(tensor, layout.postWeights, 32, 4, paddedN); + uint32_t shiftX, shiftY; + windowPhase(takeWindowPhase(kFullLevel), shiftX, shiftY); + kernels_.setStageLabel("block 70 c32"); + Kernels::FusedBlock32Args f; + f.state = adapter; f.lowRes = stageInput; f.lowWidth = d0.width; + f.inputScaleByteOffset = layout.inputScale; f.adapterScaleByteOffset = layout.adapterScale; + f.w1 = &model_.fp8Matrix(tensor, layout.expand, 32, layout.hidden); + f.w2 = &model_.fp8Matrix(tensor, layout.contractWeights, layout.hidden, 32, true, 0, false); + if (Kernels::ptxBlock32Enabled()) { + static const std::vector hiddenPerm = Kernels::mlpHiddenPermutation(); + f.w1Ptx = &model_.fp8MatrixPermuted(tensor, layout.expand, 32, layout.hidden, 32, hiddenPerm, "mlp"); + f.w2Ptx = &model_.fp8Matrix(tensor, layout.contractWeights, layout.hidden, 32, true, layout.hidden); // tile-major [4][32][32] + } + f.wqkv = &model_.fp8Matrix(tensor, layout.qkv, 32, 96); + f.wproj = &model_.fp8Matrix(tensor, layout.projection, 32, 32); + f.prior = &model_.relativeBias(tensor, layout.relative, 1); + f.tensor = &tensor; + f.ffnScaleByteOffset = layout.ffnCosSkip; + f.attnScaleByteOffset = layout.attnCosSkip; + f.attentionScaleByteOffset = layout.scale; + f.headWeights = &headWeights; f.head = head_; + f.width = g.fullWidth; f.height = g.fullHeight; f.shiftX = shiftX; f.shiftY = shiftY; + chainBlock32(f, 70, 2, false); + kernels_.fusedBlock32(commands, f); + } else { + Activation* rawMerged = allocate("post raw merge", fullRows, 32, Format::F16); + Activation* merged = allocate("post merge", fullRows, 32, Format::E4); + kernels_.postBlend(commands, *stageInput, *adapter, tensor, layout.inputScale, layout.adapterScale, *rawMerged, + *merged, d0.width, d0.height, g.fullWidth, g.fullHeight); + Activation* rawBlockOutput = allocate("post raw block output", fullRows, 32, Format::F16); + Temporaries temps = createTemporaries("post", fullRows, 32); + encodeFusedBlock(commands, temps, *merged, nullptr, 70, 32, g.fullWidth, g.fullHeight, + takeWindowPhase(kFullLevel), layout, tensor, rawMerged, rawBlockOutput); + kernels_.setStageLabel("head"); + uint32_t paddedN = 0; + GemmF16Args post; + post.input = rawBlockOutput; + post.weights = &model_.f16Matrix(tensor, layout.postWeights, 32, 4, paddedN); + post.paddedN = paddedN; post.output = head_; post.rows = fullRows; post.K = 32; post.N = 4; + kernels_.gemmF16(commands, post); + } + } + kernels_.checkChainOrder(); +} + +} // namespace nr diff --git a/third_party/opendlss-nr/src/nr_graph.h b/third_party/opendlss-nr/src/nr_graph.h new file mode 100644 index 000000000..a21ae0f31 --- /dev/null +++ b/third_party/opendlss-nr/src/nr_graph.h @@ -0,0 +1,140 @@ +// The NR network graph: 71 blocks over a six-level encoder/decoder with a global +// ViT bottleneck, recorded into one Vulkan command buffer. +#pragma once +#include +#include +#include +#include +#include +#include + +#include "kernels.h" +#include "nr_model.h" + +namespace nr { + +struct Geometry { + uint32_t validWidth = 0, validHeight = 0; + uint32_t fullWidth = 0, fullHeight = 0; + struct Level { uint32_t width, height; } levels[6]; + static Geometry fromValid(uint32_t validWidth, uint32_t validHeight); + uint32_t vitTokens() const { return levels[5].width * levels[5].height; } + uint32_t paddedVitTokens() const { return (vitTokens() + 63) & ~63u; } +}; + +struct FusedLayout { + uint32_t hidden = 128, heads = 1; + uint32_t expand = 0, contractWeights = 0, inputAdapter = 0, ffnCosSkip = 0, qkv = 0, relative = 0, scale = 0, + projection = 0, attnCosSkip = 0, endWithoutPadding = 0; + uint32_t upsampleWeight = 0, transitionScale = 0, inputScale = 0, adapterScale = 0, postWeights = 0; + bool expertFfn = false; + uint32_t expertCount = 0; +}; +FusedLayout fusedLayout(uint32_t channels, uint32_t base = 0); +FusedLayout preFusedLayout(); +FusedLayout upsampleFusedLayout(uint32_t inputChannels, uint32_t channels); +FusedLayout postFusedLayout(); + +class Graph { + public: + static constexpr uint32_t kBlockCount = 71; // blocks 0..70; the graph's stage boundaries are hard-coded + + struct Options { + bool captureBoundaries = false; // copy every block/transition output for parity checks + bool captureIntermediates = false; // also copy the intra-block tensors (FFN, QKV, attention) + bool fusedBlocks = true; // one fused dispatch per 32-channel block (false: reference kernels) + }; + Graph(vk::Context& context, Model& model, Kernels& kernels, const Geometry& geometry, Options options); + ~Graph(); + + // Record the complete network. `inputFeatures` is f32 [fullWidth*fullHeight][16]. + void record(VkCommandBuffer commands, const Activation& inputFeatures); + + const Activation& head() const { return *head_; } // f32 [full rows][4] + const std::map& boundaries() const { return boundaries_; } + const Geometry& geometry() const { return geometry_; } + // Whether consecutive launches are linked by device counters instead of barriers (docs/execution.md). + bool chained() const { return routes_.chain || routes_.vitChain; } + // The stored outputs a boundary fixture can hold references for, in graph order: blocks 0-69 and the five encoder + // stage transitions. Block 70 feeds the head on chip; the pooled-* captures have no reference counterpart. + static const std::vector& referenceBoundaryNames(); + + Activation* allocate(const std::string& label, uint32_t rows, uint32_t channels, Format format); + + private: + // Window phases. Every resolution level runs its own four-phase cycle of half-window shifts; the phase advances + // once per block at that level in visit order, and a decoder stage continues the count its encoder stage left. + static constexpr int kFullLevel = 6; // levels 0..5 are Geometry::levels, 6 is the un-pooled field + uint32_t windowPhase_[7]{}; + uint32_t takeWindowPhase(int level) { return windowPhase_[level]++; } + // Which optional fusions and which PTX routes this recording uses. Counter chaining only links PTX launches + // (the GLSL kernels neither wait nor signal, and a chained launch has no barrier after it), so it is all or + // nothing: one switch off takes the whole graph back to barriers. + struct Routes { + bool fusePre = true, fusePool = true, fuseUpres = true, fusePost = true; + bool chain = false; // counter chaining usable at all (the window and expert stages) + bool vitChain = false; // counter chaining of the ViT GEMM + attention launches + int chainMask = 3; // 1 expert stages, 2 c32 blocks, 4 split-512 GEMMs + uint32_t deferMax = 128; // widest expert stage whose projection is fused into the next block's FFN + }; + static Routes routesFromEnvironment(); + Routes routes_; + struct Temporaries { + Activation* ffn = nullptr; // E4 [rows][hidden or experts*128] + Activation* ffnNarrow = nullptr; // E4 [rows][channels] (expert W2 outputs) + Activation* ffnResidual = nullptr; // F16 [rows][channels] + Activation* ffnQuantized = nullptr; // E4 [rows][channels] + Activation* ffnQuantized2 = nullptr; // second buffer (alternating blocks) when the projection is deferred into the next FFN + Activation* qkv = nullptr; // F16 [rows][3*channels] + Activation* normalized = nullptr; // E4 [rows][3*channels] + Activation* attended = nullptr; // E4 [rows][channels] + }; + struct SplitTemporaries { + Activation* branch = nullptr; // E4 [rows][512] + Activation* middle = nullptr; // E4 [rows][2048] + Activation* layer0 = nullptr; // E4 [rows][512] + Activation* ffnResidual = nullptr; // E4 [rows][512] + Activation* qkv = nullptr; // F16 [rows][1536] + Activation* normalized = nullptr; // E4 + Activation* attended = nullptr; // E4 [rows][512] + }; + Temporaries createTemporaries(const std::string& label, uint32_t rows, uint32_t channels); + SplitTemporaries createSplitTemporaries(const std::string& label, uint32_t rows); + + void encodeFusedBlock(VkCommandBuffer commands, Temporaries& temps, const Activation& state, Activation* output, + int block, uint32_t channels, uint32_t width, uint32_t height, uint32_t phase, + const FusedLayout& layout, const Tensor& tensor, const Activation* ffnSkipOverride, + Activation* rawOutput, Activation* pooledOutput = nullptr, uint32_t pooledWidth = 0, + bool deferProjection = false, bool firstInStage = true, bool lastInStage = true, + uint32_t c32WaitScale = 0, bool c32ChainOut = false); + // Deferred projection: the previous block's attended tile, FFN publication and projection weights, consumed by + // the next block's PTX FFN kernel (which computes the block state on chip). + struct PendingProjection { const Activation* attended = nullptr; const Activation* ffnQ = nullptr; const vk::Buffer* wproj = nullptr; uint32_t auxAttn = 0; const Tensor* tensor = nullptr; Activation* stateOut = nullptr; int block = 0; + uint32_t winExpected = 0, shiftY = 0; }; + PendingProjection pendingProjection_{}; + bool hasPendingProjection_ = false; + // Chained 32-channel blocks: the producer block's window-row counters (consumed by the next fused block). + struct C32Chain { VkDeviceAddress rows = 0; uint32_t expected = 0, shiftY = 0; bool valid = false; } c32Prev_{}; + // Fill the chain fields of a fused 32-channel block: wait on c32Prev_ (waitScale: 0 same, 1 producer 2x, 2 producer + // half resolution), signal / chain when a consumer follows; then records this block as the producer. + void chainBlock32(Kernels::FusedBlock32Args& f, int block, uint32_t waitScale, bool chainOut); + void encodeSplitBlock(VkCommandBuffer commands, SplitTemporaries& temps, const Activation& state, + Activation* output, int block, uint32_t width, uint32_t height, uint32_t phase, + Activation* rawOutput, bool firstInStage = true, bool lastInStage = true); + void encodeVit(VkCommandBuffer commands, Activation& state, uint32_t tokens); + void capture(VkCommandBuffer commands, const std::string& name, const Activation& source); + + vk::Context& context_; + Model& model_; + Kernels& kernels_; + Geometry geometry_; + Options options_; + std::vector> activations_; + std::map allocationsByKey_; + std::set usedThisRecord_; + std::map boundaries_; + Activation* head_ = nullptr; + Activation* inputHalf_ = nullptr; +}; + +} // namespace nr diff --git a/third_party/opendlss-nr/src/nr_model.cpp b/third_party/opendlss-nr/src/nr_model.cpp new file mode 100644 index 000000000..9f4eb9f2f --- /dev/null +++ b/third_party/opendlss-nr/src/nr_model.cpp @@ -0,0 +1,234 @@ +#include "nr_model.h" + +#include +#include +#include + +#include "json.h" +#include "numeric.h" +#include "sha256.h" + +namespace nr { + +uint32_t packedInputIndex(uint32_t k) { + uint32_t base = k & ~31u; + uint32_t within = k & 31u; + uint32_t half = within & 16u; + uint32_t quarter = within & 15u; + return base + half + (quarter >> 2) * 2 + (quarter & 1) + (((quarter & 2) != 0) ? 8 : 0); +} + +uint32_t inversePackedInputIndex(uint32_t k) { + uint32_t base = k & ~31u; + uint32_t within = k & 31u; + return base + (within & 17u) + ((within & 2u) << 1) + ((within & 4u) << 1) + ((within & 8u) >> 2); +} + +uint32_t packedWeightIndex(uint32_t k, uint32_t n, uint32_t outputChannels) { + uint32_t kTile = k >> 5, kIn = k & 31; + uint32_t nTile = n >> 7, nIn = n & 127; + uint32_t nHalf = nIn >> 6, nGroup = (nIn & 63) >> 4, nInGroup = nIn & 15; + uint32_t lane = ((nInGroup & 7) << 2) | ((kIn & 15) >> 2); + uint32_t byteInLane = ((nInGroup >> 3) << 3) | ((kIn >> 4) << 2) | (kIn & 3); + return kTile * outputChannels * 32 + nTile * 4096 + nHalf * 2048 + nGroup * 512 + lane * 16 + byteInLane; +} + +namespace { +std::string readText(const std::string& path) { + std::ifstream file(path, std::ios::binary); + if (!file) throw std::runtime_error("cannot read " + path); + std::stringstream stream; + stream << file.rdbuf(); + return stream.str(); +} + +std::vector readBinary(const std::string& path) { + std::ifstream file(path, std::ios::binary | std::ios::ate); + if (!file) throw std::runtime_error("cannot read " + path); + std::streamsize size = file.tellg(); + file.seekg(0); + std::vector bytes((size_t)size); + file.read(reinterpret_cast(bytes.data()), size); + return bytes; +} + +// Half index of an f16 weight inside a packed matrix: 16x16 tiles in (k, n) row-major order, each tile one +// m16n8k16 B fragment pair - lane (n % 8) * 4 + (k % 8) / 2, four halves per lane per 8-column half. +// The two f16 matrices of the network (the 16 -> 32 input adapter and the 32 -> 4 head) are the two ways this +// tiling degenerates: one k tile by two n tiles, and two k tiles by one n tile. +uint32_t packedF16WeightIndex(uint32_t inputChannel, uint32_t outputChannel, uint32_t outputChannels) { + const uint32_t nTiles = (outputChannels + 15) / 16; + const uint32_t tile = (inputChannel >> 4) * nTiles + (outputChannel >> 4); + const uint32_t k = inputChannel & 15, n = outputChannel & 15; + const uint32_t lane = ((n & 7) << 2) | ((k & 7) >> 1); + const uint32_t fragment = (k >= 8 ? 2 : 0) + (k & 1); + return tile * 256 + lane * 8 + ((n >> 3) & 1) * 4 + fragment; +} + +// Natural window token (row-major in the 8x8 window) -> physical token (4x4 tiles of 16). +uint32_t tiledToken(uint32_t token) { + uint32_t x = token & 7, y = token >> 3; + return (y >> 2) * 32 + (x >> 2) * 16 + (y & 3) * 4 + (x & 3); +} +} // namespace + +Model::Model(vk::Context& context, const std::string& directory, bool verifyHashes) : context_(context) { + json::Value manifest = json::parse(readText(directory + "/manifest.json")); + blockCount_ = (uint32_t)manifest["totals"]["blockCount"].integer(); + for (const json::Value& stage : manifest["stages"].array) { + Stage loaded; + loaded.id = stage["id"].str(); + loaded.bytes = readBinary(directory + "/model/" + stage["file"].str()); + if (loaded.bytes.size() != (size_t)stage["packedByteLength"].integer()) + throw std::runtime_error("stage size mismatch: " + loaded.id); + if (verifyHashes) { + std::string digest = sha256Hex(loaded.bytes.data(), loaded.bytes.size()); + if (digest != stage["sha256"].str()) throw std::runtime_error("stage SHA-256 mismatch: " + loaded.id); + } + stages_.push_back(std::move(loaded)); + } + for (const json::Value& entry : manifest["tensors"].array) { + Tensor tensor; + tensor.name = entry["name"].str(); + tensor.block = (int)entry["block"].integer(); + tensor.layer = (int)entry["layer"].integer(); + tensor.parameter = entry["parameter"].str(); + tensor.stage = entry["stage"].str(); + tensor.stageOffset = (uint32_t)entry["stageOffset"].integer(); + tensor.byteLength = (uint32_t)entry["byteLength"].integer(); + const Stage* stage = nullptr; + for (const Stage& candidate : stages_) if (candidate.id == tensor.stage) stage = &candidate; + if (!stage) throw std::runtime_error("tensor references unknown stage " + tensor.stage); + if ((size_t)tensor.stageOffset + tensor.byteLength > stage->bytes.size()) + throw std::runtime_error("tensor exceeds stage " + tensor.name); + tensor.bytes = stage->bytes.data() + tensor.stageOffset; + // Raw bytes on the GPU for per-column aux vectors (padded to 4 bytes). + size_t padded = (tensor.byteLength + 3) & ~3u; + std::vector paddedBytes(padded, 0); + memcpy(paddedBytes.data(), tensor.bytes, tensor.byteLength); + tensor.raw = context_.createBuffer(padded, false, "tensor raw"); + context_.upload(tensor.raw, paddedBytes.data(), padded); + tensors_[tensor.name] = std::move(tensor); + } + for (uint32_t k = 0; k < 64; ++k) { + if (inversePackedInputIndex(packedInputIndex(k)) != k) + throw std::runtime_error("chained index permutation is not invertible"); + } +} + +Model::~Model() { + for (auto& [name, buffer] : matrices_) context_.destroyBuffer(buffer); + for (auto& [name, tensor] : tensors_) context_.destroyBuffer(tensor.raw); +} + +const Tensor& Model::tensor(int block, int layer, const std::string& parameter) const { + std::string name = "block" + std::to_string(block) + ".layer" + std::to_string(layer) + "." + parameter; + auto it = tensors_.find(name); + if (it == tensors_.end()) throw std::runtime_error("missing tensor " + name); + return it->second; +} + +std::vector Model::fp8MatrixBytes(const Tensor& tensor, uint32_t byteOffset, uint32_t K, uint32_t Nmatrix, + bool swizzleK, uint32_t batchK, bool tileMajor, + const std::vector* columnSource) { + if (batchK == 0) batchK = K; + std::string key = tensor.name + "/" + std::to_string(byteOffset) + "/" + std::to_string(K) + "x" + std::to_string(Nmatrix); + if (K % 32 || Nmatrix % 16 || batchK % 32 || K % batchK) + throw std::runtime_error("FP8 matrix shape must be K%32==0, N%16==0, batchK | K: " + key); + size_t bytes = (size_t)K * Nmatrix; + if ((size_t)byteOffset + bytes > tensor.byteLength) + throw std::runtime_error("FP8 matrix exceeds tensor " + key); + std::vector plain(bytes); + for (uint32_t j = 0; j < K; ++j) { + uint32_t k = swizzleK ? inversePackedInputIndex(j) : j; + for (uint32_t n = 0; n < Nmatrix; ++n) { + const uint32_t sourceColumn = columnSource ? (*columnSource)[n] : n; + uint8_t code = tensor.bytes[byteOffset + packedWeightIndex(k, sourceColumn, Nmatrix)]; + if ((code & 0x7f) == 0x7f) { code = 0; ++nanWeights_; } // E4M3FN NaN decodes to 0 in the reference + // The chained permutation stays within 32-groups, so it commutes with the batch split. + uint32_t kk = j % batchK; + if (tileMajor) plain[(((size_t)(j / batchK) * (batchK / 32) + kk / 32) * Nmatrix + n) * 32 + (kk % 32)] = code; + else plain[((size_t)(j / batchK) * Nmatrix + n) * batchK + kk] = code; + } + } + return plain; +} + +const vk::Buffer& Model::fp8Matrix(const Tensor& tensor, uint32_t byteOffset, uint32_t K, uint32_t Nmatrix, + bool swizzleK, uint32_t batchK, bool tileMajor) { + if (batchK == 0) batchK = K; + std::string key = tensor.name + (tileMajor ? "/fp8K32/" : "/fp8T/") + std::to_string(byteOffset) + "/" + std::to_string(K) + + "x" + std::to_string(Nmatrix) + "/" + std::to_string(batchK) + (swizzleK ? "/s" : "/n"); + auto it = matrices_.find(key); + if (it != matrices_.end()) return it->second; + std::vector plain = fp8MatrixBytes(tensor, byteOffset, K, Nmatrix, swizzleK, batchK, tileMajor); + vk::Buffer buffer = context_.createBuffer(plain.size(), false, "fp8 weights"); + context_.upload(buffer, plain.data(), plain.size()); + return matrices_[key] = buffer; +} + +const vk::Buffer& Model::fp8MatrixPermuted(const Tensor& tensor, uint32_t byteOffset, uint32_t K, uint32_t Nmatrix, + uint32_t batchK, const std::vector& columnSource, const std::string& tag) { + std::string key = tensor.name + "/fp8perm/" + tag + "/" + std::to_string(byteOffset) + "/" + std::to_string(K) + "x" + + std::to_string(Nmatrix) + "/" + std::to_string(batchK); + auto it = matrices_.find(key); + if (it != matrices_.end()) return it->second; + if (columnSource.size() != Nmatrix) throw std::runtime_error("column permutation size mismatch: " + key); + std::vector plain = fp8MatrixBytes(tensor, byteOffset, K, Nmatrix, true, batchK, true, &columnSource); + vk::Buffer buffer = context_.createBuffer(plain.size(), false, "fp8 weights (permuted)"); + context_.upload(buffer, plain.data(), plain.size()); + return matrices_[key] = buffer; +} + +const vk::Buffer& Model::f16Matrix(const Tensor& tensor, uint32_t byteOffset, uint32_t K, uint32_t N, + uint32_t& paddedN) { + paddedN = (N + 15) & ~15u; + std::string key = tensor.name + "/f16/" + std::to_string(byteOffset) + "/" + std::to_string(K) + "x" + + std::to_string(N); + auto it = matrices_.find(key); + if (it != matrices_.end()) return it->second; + if (K % 16) throw std::runtime_error("f16 matrix K must be a multiple of 16"); + std::vector plain((size_t)K * paddedN, 0); + for (uint32_t k = 0; k < K; ++k) { + for (uint32_t n = 0; n < N; ++n) { + uint32_t halfIndex = (byteOffset >> 1) + packedF16WeightIndex(k, n, N); + const uint8_t* p = tensor.bytes + halfIndex * 2; + if (halfIndex * 2 + 1 >= tensor.byteLength) throw std::runtime_error("f16 matrix exceeds tensor " + key); + plain[(size_t)k * paddedN + n] = (uint16_t)(p[0] | (p[1] << 8)); + } + } + vk::Buffer buffer = context_.createBuffer(plain.size() * 2, false, "f16 weights"); + context_.upload(buffer, plain.data(), plain.size() * 2); + return matrices_[key] = buffer; +} + +const vk::Buffer& Model::relativeBias(const Tensor& tensor, uint32_t relativeByteOffset, uint32_t heads) { + std::string key = tensor.name + "/prior/" + std::to_string(relativeByteOffset) + "/" + std::to_string(heads); + auto it = matrices_.find(key); + if (it != matrices_.end()) return it->second; + std::vector prior((size_t)heads * 64 * 64); + // Native stores the bias with both tokens in physical order; the kernels want the query in natural order (the + // A rows of S = Q K^T) and the key in physical order (the B columns, which is how K / V are staged). + for (uint32_t head = 0; head < heads; ++head) { + for (uint32_t query = 0; query < 64; ++query) { + for (uint32_t physical = 0; physical < 64; ++physical) { + uint32_t q = tiledToken(query), k = physical; + uint32_t m = q & 15, n = k & 15; + uint32_t lane = ((m & 7) << 2) | ((n & 7) >> 1); + uint32_t fragment = (m >= 8 ? 2 : 0) + (n & 1); + uint32_t tileOffset = (q >> 4) * 1024 + (k >> 4) * 256; + uint32_t laneOffset = lane * 8 + (n >> 3) * 4; + uint32_t halfIndex = tileOffset + laneOffset + fragment; + uint32_t byteIndex = relativeByteOffset + head * 8192 + halfIndex * 2; + if (byteIndex + 1 >= tensor.byteLength) throw std::runtime_error("relative bias exceeds tensor " + key); + prior[((size_t)head * 64 + query) * 64 + physical] = + (uint16_t)(tensor.bytes[byteIndex] | (tensor.bytes[byteIndex + 1] << 8)); + } + } + } + vk::Buffer buffer = context_.createBuffer(prior.size() * 2, false, "attention prior"); + context_.upload(buffer, prior.data(), prior.size() * 2); + return matrices_[key] = buffer; +} + +} // namespace nr diff --git a/third_party/opendlss-nr/src/nr_model.h b/third_party/opendlss-nr/src/nr_model.h new file mode 100644 index 000000000..867c97eb2 --- /dev/null +++ b/third_party/opendlss-nr/src/nr_model.h @@ -0,0 +1,85 @@ +// Model loading: manifest, packed E4M3 stage files and the host-side re-layout of the MMA-fragment-ordered +// weights into plain matrices that cooperative-matrix loads consume directly. +#pragma once +#include +#include +#include +#include + +#include "vk_context.h" + +namespace nr { + +struct Tensor { + std::string name; + int block = 0; + int layer = 0; + std::string parameter; + std::string stage; + uint32_t stageOffset = 0; + uint32_t byteLength = 0; + const uint8_t* bytes = nullptr; // into the owning stage + vk::Buffer raw; // raw packed bytes on the GPU (aux vectors, scales) +}; + +// Native within-32 chained activation index used by every FP8 GEMM A operand. +uint32_t packedInputIndex(uint32_t k); +uint32_t inversePackedInputIndex(uint32_t k); +// Byte index of weight (k, n) inside a packed FP8 matrix of N columns, as the model file stores it. +uint32_t packedWeightIndex(uint32_t k, uint32_t n, uint32_t outputChannels); + +class Model { + public: + Model(vk::Context& context, const std::string& directory, bool verifyHashes = true); + ~Model(); + + const Tensor& tensor(int block, int layer = 0, const std::string& parameter = "layer") const; + + // Plain [K][Nmatrix] E4M3 matrix for coopmat B loads. When swizzleK is set the + // K rows are permuted by the inverse chained index so that A operands load in + // natural channel order (the permutation stays inside each 16-product group). + // Plain E4M3 weights, k32-tile-major for the GEMM: [K / batchK][batchK / 32][Nmatrix][32]. + // batchK = 0 means a single batch (the whole K). + // tileMajor = false: [K / batchK][Nmatrix][batchK] (N-major, K contiguous) for single-multiply B operands. + const vk::Buffer& fp8Matrix(const Tensor& tensor, uint32_t byteOffset, uint32_t K, uint32_t Nmatrix, + bool swizzleK = true, uint32_t batchK = 0, bool tileMajor = true); + // The same bytes without a buffer (for packed multi-matrix buffers). + std::vector fp8MatrixBytes(const Tensor& tensor, uint32_t byteOffset, uint32_t K, uint32_t Nmatrix, + bool swizzleK = true, uint32_t batchK = 0, bool tileMajor = true, + const std::vector* columnSource = nullptr); + // fp8Matrix with the output columns permuted: plain column c holds tensor column columnSource[c]. + const vk::Buffer& fp8MatrixPermuted(const Tensor& tensor, uint32_t byteOffset, uint32_t K, uint32_t Nmatrix, + uint32_t batchK, const std::vector& columnSource, const std::string& tag); + // Plain [K][Npadded] f16 matrix (the pre adapter and the post head). + const vk::Buffer& f16Matrix(const Tensor& tensor, uint32_t byteOffset, uint32_t K, uint32_t N, uint32_t& paddedN); + // Learned 64x64 attention prior per head as f16 [heads][64 query][64 physical key]. + const vk::Buffer& relativeBias(const Tensor& tensor, uint32_t relativeByteOffset, uint32_t heads); + + size_t nanWeightsReplaced() const { return nanWeights_; } + uint32_t blockCount() const { return blockCount_; } + + private: + struct Stage { + std::string id; + std::vector bytes; + }; + vk::Context& context_; + std::vector stages_; + std::map tensors_; + std::map matrices_; + size_t nanWeights_ = 0; + uint32_t blockCount_ = 0; +}; + +// Exact float16 load of the aux (per-column) vectors stored inside a tensor. +inline uint16_t auxHalf(const Tensor& tensor, uint32_t byteOffset, uint32_t column) { + const uint8_t* p = tensor.bytes + byteOffset + column * 2; + return (uint16_t)(p[0] | (p[1] << 8)); +} +inline float auxF32(const Tensor& tensor, uint32_t byteOffset) { + float value; + memcpy(&value, tensor.bytes + byteOffset, 4); + return value; +} + +} // namespace nr diff --git a/third_party/opendlss-nr/src/numeric.h b/third_party/opendlss-nr/src/numeric.h new file mode 100644 index 000000000..2c03c10f9 --- /dev/null +++ b/third_party/opendlss-nr/src/numeric.h @@ -0,0 +1,104 @@ +// CPU-side E4M3FN / IEEE binary16 helpers. These mirror the shaders' fp8 / half publication functions so +// host-side preprocessing rounds exactly like the kernels. +#pragma once +#include +#include +#include + +namespace num { + +inline uint32_t f32Bits(float value) { uint32_t bits; memcpy(&bits, &value, 4); return bits; } +inline float f32FromBits(uint32_t bits) { float value; memcpy(&value, &bits, 4); return value; } + +// IEEE RNE f32 -> f16 (the shaders' roundF16). +inline uint16_t f16Bits(float value) { + uint32_t bits = f32Bits(value); + uint32_t sign = (bits >> 16) & 0x8000; + uint32_t exponent = (bits >> 23) & 0xff; + uint32_t mantissa = bits & 0x7fffff; + if (exponent == 0xff) return (uint16_t)(sign | (mantissa ? 0x7e00 : 0x7c00)); + int halfExponent = (int)exponent - 112; + if (halfExponent >= 31) return (uint16_t)(sign | 0x7c00); + if (halfExponent <= 0) { + if (halfExponent < -10) return (uint16_t)sign; + uint32_t normalized = mantissa | 0x800000; + uint32_t shift = (uint32_t)(14 - halfExponent); + uint32_t rounded = normalized >> shift; + uint32_t remainder = normalized & ((1u << shift) - 1); + uint32_t halfway = 1u << (shift - 1); + if (remainder > halfway || (remainder == halfway && (rounded & 1))) rounded += 1; + return (uint16_t)(sign | rounded); + } + uint32_t rounded = mantissa >> 13; + uint32_t remainder = mantissa & 0x1fff; + if (remainder > 0x1000 || (remainder == 0x1000 && (rounded & 1))) { + rounded += 1; + if (rounded == 0x400) { rounded = 0; halfExponent += 1; } + } + if (halfExponent >= 31) return (uint16_t)(sign | 0x7c00); + return (uint16_t)(sign | ((uint32_t)halfExponent << 10) | rounded); +} + +inline float f16ToF32(uint16_t bits) { + uint32_t sign = (uint32_t)(bits & 0x8000) << 16; + uint32_t exponent = (bits >> 10) & 0x1f; + uint32_t mantissa = bits & 0x3ff; + if (exponent == 0) { + if (mantissa == 0) return f32FromBits(sign); + // subnormal + int shift = 0; + while (!(mantissa & 0x400)) { mantissa <<= 1; shift += 1; } + mantissa &= 0x3ff; + return f32FromBits(sign | ((uint32_t)(113 - shift) << 23) | (mantissa << 13)); + } + if (exponent == 31) return f32FromBits(sign | 0x7f800000 | (mantissa << 13)); + return f32FromBits(sign | ((exponent + 112) << 23) | (mantissa << 13)); +} + +inline float roundF16(float value) { return f16ToF32(f16Bits(value)); } + +// e4m3ToNumber: E4M3FN byte to float (NaN code 0x7f/0xff decodes to NaN). +inline float e4m3ToF32(uint8_t byte) { + int sign = (byte & 0x80) ? -1 : 1; + int exponent = (byte >> 3) & 0xf; + int mantissa = byte & 0x7; + if (exponent == 0) return sign * (float)mantissa * (1.0f / 512.0f); + if (exponent == 0xf && mantissa == 0x7) return NAN; + return sign * (1.0f + mantissa / 8.0f) * std::ldexp(1.0f, exponent - 7); +} + +// Already-rounded half -> E4M3FN code with RNE, finite saturation at 448 and NaN -> +0; the sign of a zero +// survives, as in the shaders' publication (common.glsl e4m3CodeFromF16Bits). +inline uint8_t e4m3FromF16Bits(uint16_t half) { + bool isNaN = (half & 0x7c00) == 0x7c00 && (half & 0x03ff) != 0; + if (isNaN) return 0; + if ((half & 0x7fff) == 0) return (uint8_t)((half >> 8) & 0x80); + uint32_t negative = (half & 0x8000) ? 0x80 : 0; + uint32_t exponent = (half >> 10) & 0x1f; + uint32_t mantissa = half & 0x3ff; + auto shiftRne = [](uint32_t value, uint32_t shift) { + uint32_t quotient = value >> shift; + uint32_t remainder = value & ((1u << shift) - 1); + uint32_t halfway = 1u << (shift - 1); + return quotient + ((remainder > halfway || (remainder == halfway && (quotient & 1))) ? 1u : 0u); + }; + uint32_t code; + if (exponent == 31) { + code = 0x7e; + } else if (exponent <= 8) { + uint32_t significand = exponent == 0 ? mantissa : 1024 + mantissa; + uint32_t shift = exponent == 0 ? 15 : 16 - exponent; + code = shiftRne(significand, shift); + if (code > 8) code = 8; + } else { + uint32_t e4Exponent = exponent - 8; + uint32_t e4Mantissa = shiftRne(mantissa, 7); + if (e4Mantissa == 8) { e4Mantissa = 0; e4Exponent += 1; } + code = (e4Exponent > 15 || (e4Exponent == 15 && e4Mantissa > 6)) ? 0x7e : ((e4Exponent << 3) | e4Mantissa); + } + return (uint8_t)(negative | code); +} + +inline uint8_t e4m3FromF32(float value) { return e4m3FromF16Bits(f16Bits(value)); } + +} // namespace num diff --git a/third_party/opendlss-nr/src/reference.cpp b/third_party/opendlss-nr/src/reference.cpp new file mode 100644 index 000000000..1a47ab58f --- /dev/null +++ b/third_party/opendlss-nr/src/reference.cpp @@ -0,0 +1,295 @@ +#include "reference.h" + +#include +#include +#include + +#include "numeric.h" + +namespace ref { + +namespace { +int normalExponent(float value) { + uint32_t bits = num::f32Bits(std::fabs(value)); + return (int)((bits >> 23) & 0xff) - 127; +} +int e4m3Exponent(float value) { return std::max(normalExponent(value), -6); } +int f16Exponent(float value) { return std::max(normalExponent(value), -14); } + +uint32_t roundShiftRightEven(uint32_t value, uint32_t shift) { + if (shift == 0) return value; + if (shift > 31) return 0; + uint32_t truncated = value >> shift; + uint32_t remainder = value & ((1u << shift) - 1); + uint32_t halfway = 1u << (shift - 1); + return truncated + ((remainder > halfway || (remainder == halfway && (truncated & 1))) ? 1u : 0u); +} + +int countLeadingZeros(uint32_t value) { + int count = 0; + for (int bit = 31; bit >= 0; --bit) { if (value & (1u << bit)) break; ++count; } + return count; +} + +// Exact signed F24 integer -> IEEE half. +float fixedToF16(int64_t fixedSum, int binaryExponent) { + if (fixedSum == 0) return 0.0f; + bool negative = fixedSum < 0; + uint32_t magnitude = (uint32_t)(negative ? -fixedSum : fixedSum); + uint32_t msb = 31 - (uint32_t)countLeadingZeros(magnitude); + int valueExponent = (int)msb + binaryExponent; + uint32_t halfBits = negative ? 0x8000 : 0; + if (valueExponent >= -14) { + uint32_t significand = msb > 10 ? roundShiftRightEven(magnitude, msb - 10) : magnitude << (10 - msb); + if (significand >= 2048) { significand = 1024; valueExponent += 1; } + if (valueExponent >= 16) halfBits |= 0x7c00; + else { halfBits |= (uint32_t)(valueExponent + 15) << 10; halfBits |= significand - 1024; } + } else { + int subnormalScale = binaryExponent + 24; + uint32_t mantissa = subnormalScale >= 0 ? magnitude << subnormalScale + : roundShiftRightEven(magnitude, (uint32_t)-subnormalScale); + halfBits |= std::min(mantissa, 1024u); + } + return num::f16ToF32((uint16_t)halfBits); +} + +uint32_t inverseTiledToken(uint32_t token) { + uint32_t tile = token >> 4, within = token & 15; + uint32_t x = (tile & 1) * 4 + (within & 3); + uint32_t y = (tile >> 1) * 4 + (within >> 2); + return y * 8 + x; +} + +uint32_t mapRelativeTokenTiled(uint32_t token) { + uint32_t x = token & 7, y = token >> 3; + return (y >> 2) * 32 + (x >> 2) * 16 + (y & 3) * 4 + (x & 3); +} + +float loadHalf(const nr::Tensor& tensor, uint32_t byteOffset) { + return num::f16ToF32((uint16_t)(tensor.bytes[byteOffset] | (tensor.bytes[byteOffset + 1] << 8))); +} + +float loadRelativeBias(const nr::Tensor& tensor, uint32_t relativeByteOffset, uint32_t head, uint32_t queryLocal, + uint32_t keyLocal) { + uint32_t q = mapRelativeTokenTiled(queryLocal), k = mapRelativeTokenTiled(keyLocal); + uint32_t m = q & 15, n = k & 15; + uint32_t lane = ((m & 7) << 2) | ((n & 7) >> 1); + uint32_t fragment = (m >= 8 ? 2 : 0) + (n & 1); + uint32_t tileOffset = (q >> 4) * 1024 + (k >> 4) * 256; + uint32_t laneOffset = lane * 8 + (n >> 3) * 4; + uint32_t halfIndex = tileOffset + laneOffset + fragment; + return loadHalf(tensor, relativeByteOffset + head * 8192 + halfIndex * 2); +} + +float expWeight(float score) { + float fusedAffine = roundF16(std::fma(score, 0.044921875f, 1.30078125f)); + float affine = std::min(std::max(fusedAffine, 1.03125f), 1.5693359375f); + uint32_t bits = num::f16Bits(affine); + uint32_t exponentialBits = ((bits << 5) + 0x8000u) & 0xffffu; + return num::f16ToF32((uint16_t)exponentialBits); +} + +float addF16(float a, float b) { return roundF16((float)((double)a + (double)b)); } +} // namespace + +float roundF16(float value) { return num::roundF16(value); } + +float fp8Domain(float value) { + if (value != value) return 0.0f; + float magnitude = std::min(std::fabs(value), 448.0f); + if (magnitude == 0.0f) return 0.0f; + float quantized; + if (magnitude < 0.015625f) { + quantized = std::nearbyint(magnitude * 512.0f) / 512.0f; // nearbyint: RNE in default rounding mode + } else { + float step = std::ldexp(1.0f, (int)std::floor(std::log2(magnitude)) - 3); + quantized = std::min(std::nearbyint(magnitude / step) * step, 448.0f); + } + return value < 0.0f ? -quantized : quantized; +} + +float mpCubicSilu(float value) { + float bounded = roundF16(std::min(std::max(value, -4.0f), 4.0f)); + float absolute = roundF16(std::fabs(bounded)); + float inner = roundF16(-0.055908203125f * absolute + 0.447265625f); + float polynomial = roundF16(bounded * inner + 0.89453125f); + return roundF16(value * polynomial); +} + +std::vector siluTable() { + std::vector table(65536); + for (uint32_t bits = 0; bits < 65536; ++bits) table[bits] = num::f16Bits(mpCubicSilu(num::f16ToF32((uint16_t)bits))); + return table; +} + +float adaFp8Fdpa16(const float* a, const float* b, int count, float accumulator) { + if (std::isinf(accumulator) || std::isnan(accumulator)) return accumulator; + int maximumExponent = -21; + if (accumulator != 0.0f) maximumExponent = f16Exponent(accumulator); + for (int i = 0; i < count; ++i) { + if (a[i] != 0.0f && b[i] != 0.0f) maximumExponent = std::max(maximumExponent, e4m3Exponent(a[i]) + e4m3Exponent(b[i])); + } + double fused = 0.0; + if (accumulator != 0.0f) { + int exponent = f16Exponent(accumulator); + float significand = accumulator * std::ldexp(1.0f, -exponent); + fused += std::trunc(significand * std::ldexp(1.0f, exponent - maximumExponent + 13)) * 0.0001220703125; + } + for (int i = 0; i < count; ++i) { + if (a[i] != 0.0f && b[i] != 0.0f) { + int ea = e4m3Exponent(a[i]), eb = e4m3Exponent(b[i]); + float sa = a[i] * std::ldexp(1.0f, -ea), sb = b[i] * std::ldexp(1.0f, -eb); + fused += std::trunc(sa * sb * std::ldexp(1.0f, ea + eb - maximumExponent + 13)) * 0.0001220703125; + } + } + return roundF16((float)(fused * std::ldexp(1.0, maximumExponent))); +} + +float adaF16Fdpa8(const float* a, const float* b, int count, float accumulator) { + int maximumExponent = -21; + if (accumulator != 0.0f) maximumExponent = f16Exponent(accumulator); + for (int i = 0; i < count; ++i) { + if (a[i] != 0.0f && b[i] != 0.0f) maximumExponent = std::max(maximumExponent, f16Exponent(a[i]) + f16Exponent(b[i])); + } + int64_t fixedSum = 0; + if (accumulator != 0.0f) { + int exponent = f16Exponent(accumulator); + float significand = accumulator * std::ldexp(1.0f, -exponent); + fixedSum += (int64_t)std::trunc(significand * std::ldexp(1.0f, exponent - maximumExponent + 24)); + } + for (int i = 0; i < count; ++i) { + if (a[i] != 0.0f && b[i] != 0.0f) { + int ea = f16Exponent(a[i]), eb = f16Exponent(b[i]); + float sa = a[i] * std::ldexp(1.0f, -ea), sb = b[i] * std::ldexp(1.0f, -eb); + fixedSum += (int64_t)std::trunc(sa * sb * std::ldexp(1.0f, ea + eb - maximumExponent + 24)); + } + } + return fixedToF16(fixedSum, maximumExponent - 24); +} + +float gemmFp8Element(const GemmRef& gemm, const float* inputRow, uint32_t column, float initial) { + float sums = roundF16(initial); + float partitionSums = 0.0f; + float a[32], b[32]; + for (uint32_t kb = 0; kb < gemm.K; kb += 32) { + for (uint32_t k = 0; k < 32; ++k) { + uint32_t logical = kb + k; + uint32_t inputK = gemm.swizzleInput ? nr::packedInputIndex(logical) : logical; + a[k] = inputRow[inputK]; + uint8_t code = gemm.tensor->bytes[gemm.weightByteOffset + + nr::packedWeightIndex(logical, column + gemm.weightColumnOffset, gemm.Nmatrix)]; + b[k] = (code & 0x7f) == 0x7f ? 0.0f : num::e4m3ToF32(code); + } + sums = adaFp8Fdpa16(a, b, 16, sums); + sums = adaFp8Fdpa16(a + 16, b + 16, 16, sums); + if (gemm.partition && (((kb + 32) % gemm.partition) == 0 || kb + 32 >= gemm.K)) { + partitionSums = kb < gemm.partition ? sums : roundF16(partitionSums + sums); + sums = 0.0f; + } + } + return gemm.partition ? partitionSums : sums; +} + +float gemmF16Element(const nr::Tensor& tensor, uint32_t weightByteOffset, uint32_t K, uint32_t N, + const float* inputRow, uint32_t column) { + const uint32_t nTiles = (N + 15) / 16; + auto weightIndex = [&](uint32_t k, uint32_t n) -> uint32_t { // = nr_model.cpp packedF16WeightIndex + uint32_t tile = (k >> 4) * nTiles + (n >> 4); + uint32_t kk = k & 15, nn = n & 15; + uint32_t lane = ((nn & 7) << 2) | ((kk & 7) >> 1); + uint32_t fragment = (kk >= 8 ? 2 : 0) + (kk & 1); + return tile * 256 + lane * 8 + ((nn >> 3) & 1) * 4 + fragment; + }; + float value = 0.0f; + float a[8], b[8]; + for (uint32_t base = 0; base < K; base += 8) { + for (uint32_t i = 0; i < 8; ++i) { + a[i] = roundF16(inputRow[base + i]); + b[i] = loadHalf(tensor, weightByteOffset + weightIndex(base + i, column) * 2); + } + value = adaF16Fdpa8(a, b, 8, value); + } + return value; +} + +void windowNormalizeRef(const float* qkvRow, uint32_t head, float scale, float* out) { + const float* q = qkvRow + head * 96; + const float* k = q + 32; + const float* v = q + 64; + auto normOf = [](const float* x) { + float r[16]; + for (int c = 0; c < 16; ++c) { + float highSquare = roundF16(x[c + 16] * x[c + 16]); + r[c] = roundF16((float)((double)x[c] * (double)x[c] + (double)highSquare)); // exact half fma + } + for (int stride = 8; stride > 0; stride >>= 1) + for (int c = 0; c < stride; ++c) r[c] = addF16(r[c], r[c + stride]); + return roundF16(1.0f / std::sqrt(r[0])); + }; + float qNorm = normOf(q), kNorm = normOf(k); + float scaleHalf = roundF16(scale); + for (int c = 0; c < 32; ++c) { + out[c] = fp8Domain(roundF16(roundF16(q[c] * qNorm) * scaleHalf)); + out[32 + c] = fp8Domain(roundF16(k[c] * kNorm)); + out[64 + c] = fp8Domain(v[c]); + } +} + +void windowAttendRef(const std::vector& normalized, uint32_t width, uint32_t height, uint32_t channels, + uint32_t head, int windowX, int windowY, const nr::Tensor& tensor, uint32_t relativeByteOffset, + float* out) { + const uint32_t stride3 = channels * 3; + const uint32_t headBase = head * 96; + for (uint32_t queryLocal = 0; queryLocal < 64; ++queryLocal) { + int qx = windowX + (int)(queryLocal & 7), qy = windowY + (int)(queryLocal >> 3); + if (qx < 0 || qy < 0 || qx >= (int)width || qy >= (int)height) { + for (int c = 0; c < 32; ++c) out[queryLocal * 32 + c] = NAN; + continue; + } + const float* q = &normalized[((uint32_t)qy * width + (uint32_t)qx) * stride3 + headBase]; + float scores[64]; + float keys[64][32]; + float values[64][32]; + for (uint32_t keyLocal = 0; keyLocal < 64; ++keyLocal) { + int kx = windowX + (int)(keyLocal & 7), ky = windowY + (int)(keyLocal >> 3); + bool valid = kx >= 0 && ky >= 0 && kx < (int)width && ky < (int)height; + for (int c = 0; c < 32; ++c) { + keys[keyLocal][c] = valid ? normalized[((uint32_t)ky * width + (uint32_t)kx) * stride3 + headBase + 32 + c] : 0.0f; + values[keyLocal][c] = valid ? normalized[((uint32_t)ky * width + (uint32_t)kx) * stride3 + headBase + 64 + c] : 0.0f; + } + float prior = loadRelativeBias(tensor, relativeByteOffset, head, queryLocal, keyLocal); + float score = adaFp8Fdpa16(q, keys[keyLocal], 16, prior); + score = adaFp8Fdpa16(q + 16, keys[keyLocal] + 16, 16, score); + scores[keyLocal] = expWeight(roundF16(score)); + } + auto physical = [&](uint32_t p) { return scores[inverseTiledToken(p)]; }; + auto pair = [&](uint32_t pairIndex, uint32_t parity) { + uint32_t key = pairIndex * 2 + parity; + float b01 = addF16(physical(key), physical(key + 8)); + float b23 = addF16(physical(key + 16), physical(key + 24)); + float b45 = addF16(physical(key + 32), physical(key + 40)); + float b67 = addF16(physical(key + 48), physical(key + 56)); + return addF16(addF16(addF16(b01, b23), b45), b67); + }; + float even = addF16(addF16(addF16(pair(0, 0), pair(1, 0)), pair(2, 0)), pair(3, 0)); + float odd = addF16(addF16(addF16(pair(0, 1), pair(1, 1)), pair(2, 1)), pair(3, 1)); + float total = addF16(even, odd); + float reciprocal = roundF16(1.0f / total); + for (uint32_t key = 0; key < 64; ++key) scores[key] = fp8Domain(roundF16(scores[key] * reciprocal)); + for (int c = 0; c < 32; ++c) { + float value = 0.0f; + for (uint32_t group = 0; group < 4; ++group) { + float w[16], v[16]; + for (uint32_t i = 0; i < 16; ++i) { + uint32_t keyLocal = inverseTiledToken(group * 16 + i); + w[i] = scores[keyLocal]; + v[i] = values[keyLocal][c]; + } + value = adaFp8Fdpa16(w, v, 16, value); + } + out[queryLocal * 32 + c] = fp8Domain(value); + } + } +} + +} // namespace ref diff --git a/third_party/opendlss-nr/src/reference.h b/third_party/opendlss-nr/src/reference.h new file mode 100644 index 000000000..48da139d9 --- /dev/null +++ b/third_party/opendlss-nr/src/reference.h @@ -0,0 +1,49 @@ +// CPU reference of the network's exact arithmetic (FP8 GEMM accumulation order, half publications, window +// attention). Used to bisect the GPU kernels one by one: each check feeds the GPU's own inputs so a mismatch names +// the responsible kernel rather than a compounded downstream effect. +#pragma once +#include +#include + +#include "nr_model.h" + +namespace ref { + +float roundF16(float value); +float fp8Domain(float value); // E4M3 RNE saturating publication, as a value +float mpCubicSilu(float value); +// 65536-entry f16 -> f16 SiLU table, which is the form the GLSL kernels use. +std::vector siluTable(); + +// Ada FP8 m16n8k32 half of a k32 step: 16 products + incoming half accumulator, +// shared exponent, F=13 truncation, half RNE result. +float adaFp8Fdpa16(const float* a, const float* b, int count, float accumulator); +// Ada FP16 m16n8k16 half step: 8 products, F=24 truncation, integer publication. +float adaF16Fdpa8(const float* a, const float* b, int count, float accumulator); + +struct GemmRef { + const nr::Tensor* tensor = nullptr; + uint32_t weightByteOffset = 0; + uint32_t K = 0; + uint32_t Nmatrix = 0; + uint32_t weightColumnOffset = 0; + uint32_t partition = 0; + bool swizzleInput = true; +}; +// One FP8 GEMM output element with the literal accumulation contract. `input` holds +// the activation row values (E4M3-decoded) in natural channel order. +float gemmFp8Element(const GemmRef& gemm, const float* inputRow, uint32_t column, float initial); + +float gemmF16Element(const nr::Tensor& tensor, uint32_t weightByteOffset, uint32_t K, uint32_t N, + const float* inputRow, uint32_t column); + +// Window attention reference for one (window origin, head): returns the 64x32 +// attended E4M3 values (as floats) in query-local order, NaN for OOB queries. +// `normalized` is the E4M3-decoded [tokens][channels*3] tensor. +void windowAttendRef(const std::vector& normalized, uint32_t width, uint32_t height, uint32_t channels, + uint32_t head, int windowX, int windowY, const nr::Tensor& tensor, uint32_t relativeByteOffset, + float* out /*64*32*/); +// Normalized Q/K/V (E4M3 values) for one token/head from raw half QKV. +void windowNormalizeRef(const float* qkvRow /*channels*3*/, uint32_t head, float scale, float* out /*96*/); + +} // namespace ref diff --git a/third_party/opendlss-nr/src/sha256.h b/third_party/opendlss-nr/src/sha256.h new file mode 100644 index 000000000..8bdad8e02 --- /dev/null +++ b/third_party/opendlss-nr/src/sha256.h @@ -0,0 +1,56 @@ +#pragma once +#include +#include +#include +#include + +// Compact SHA-256 for verifying the model stage files against the manifest. +inline std::string sha256Hex(const uint8_t* data, size_t length) { + static const uint32_t k[64] = { + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2}; + uint32_t h[8] = {0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19}; + auto rotr = [](uint32_t x, int n) { return (x >> n) | (x << (32 - n)); }; + auto block = [&](const uint8_t* chunk) { + uint32_t w[64]; + for (int i = 0; i < 16; ++i) + w[i] = (uint32_t)chunk[i * 4] << 24 | (uint32_t)chunk[i * 4 + 1] << 16 | (uint32_t)chunk[i * 4 + 2] << 8 | chunk[i * 4 + 3]; + for (int i = 16; i < 64; ++i) { + uint32_t s0 = rotr(w[i - 15], 7) ^ rotr(w[i - 15], 18) ^ (w[i - 15] >> 3); + uint32_t s1 = rotr(w[i - 2], 17) ^ rotr(w[i - 2], 19) ^ (w[i - 2] >> 10); + w[i] = w[i - 16] + s0 + w[i - 7] + s1; + } + uint32_t a = h[0], b = h[1], c = h[2], d = h[3], e = h[4], f = h[5], g = h[6], hh = h[7]; + for (int i = 0; i < 64; ++i) { + uint32_t s1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25); + uint32_t ch = (e & f) ^ (~e & g); + uint32_t t1 = hh + s1 + ch + k[i] + w[i]; + uint32_t s0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22); + uint32_t maj = (a & b) ^ (a & c) ^ (b & c); + uint32_t t2 = s0 + maj; + hh = g; g = f; f = e; e = d + t1; d = c; c = b; b = a; a = t1 + t2; + } + h[0] += a; h[1] += b; h[2] += c; h[3] += d; h[4] += e; h[5] += f; h[6] += g; h[7] += hh; + }; + size_t full = length / 64; + for (size_t i = 0; i < full; ++i) block(data + i * 64); + uint8_t tail[128] = {0}; + size_t rest = length - full * 64; + memcpy(tail, data + full * 64, rest); + tail[rest] = 0x80; + size_t tailBlocks = rest + 9 <= 64 ? 1 : 2; + uint64_t bits = (uint64_t)length * 8; + for (int i = 0; i < 8; ++i) tail[tailBlocks * 64 - 1 - i] = (uint8_t)(bits >> (8 * i)); + for (size_t i = 0; i < tailBlocks; ++i) block(tail + i * 64); + static const char* digits = "0123456789ABCDEF"; + std::string hex; + for (uint32_t word : h) + for (int shift = 28; shift >= 0; shift -= 4) hex += digits[(word >> shift) & 0xf]; + return hex; +} diff --git a/third_party/opendlss-nr/src/verify.cpp b/third_party/opendlss-nr/src/verify.cpp new file mode 100644 index 000000000..a950410b2 --- /dev/null +++ b/third_party/opendlss-nr/src/verify.cpp @@ -0,0 +1,267 @@ +// dlss5vk verify: run the graph with intra-block captures on a fixture and compare each block-0 kernel output +// against the CPU reference, feeding every check the GPU's own inputs so a mismatch names one kernel. +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "json.h" +#include "kernels.h" +#include "nr_graph.h" +#include "nr_model.h" +#include "numeric.h" +#include "reference.h" +#include "vk_context.h" + +namespace { + +std::vector readFile(const std::string& path) { + std::ifstream file(path, std::ios::binary | std::ios::ate); + if (!file) throw std::runtime_error("cannot read " + path); + std::streamsize size = file.tellg(); + file.seekg(0); + std::vector bytes((size_t)size); + file.read(reinterpret_cast(bytes.data()), size); + return bytes; +} + +std::string argValue(int argc, char** argv, const char* name, const std::string& fallback = "") { + for (int i = 1; i + 1 < argc; ++i) if (!strcmp(argv[i], name)) return argv[i + 1]; + return fallback; +} + +std::string executableDirectory(const char* argv0) { + std::string path = argv0; + size_t slash = path.find_last_of("/\\"); + return slash == std::string::npos ? "." : path.substr(0, slash); +} + +struct Tensor2D { + std::vector values; + std::vector halfBits; + std::vector codes; + uint32_t rows = 0, channels = 0; + nr::Format format = nr::Format::E4; + const float* row(uint32_t r) const { return values.data() + (size_t)r * channels; } +}; + +Tensor2D fetch(vk::Context& context, const nr::Graph& graph, const std::string& name) { + auto it = graph.boundaries().find(name); + if (it == graph.boundaries().end()) throw std::runtime_error("missing capture " + name); + const nr::Activation& activation = *it->second; + Tensor2D t; + t.rows = activation.rows; + t.channels = activation.channels; + t.format = activation.format; + std::vector bytes = context.download(activation.buffer, activation.validBytes()); + size_t count = (size_t)t.rows * t.channels; + t.values.resize(count); + if (t.format == nr::Format::E4) { + t.codes.assign(bytes.begin(), bytes.end()); + for (size_t i = 0; i < count; ++i) t.values[i] = (t.codes[i] & 0x7f) == 0x7f ? 0.0f : num::e4m3ToF32(t.codes[i]); + } else if (t.format == nr::Format::F16) { + t.halfBits.resize(count); + memcpy(t.halfBits.data(), bytes.data(), count * 2); + for (size_t i = 0; i < count; ++i) t.values[i] = num::f16ToF32(t.halfBits[i]); + } else { + memcpy(t.values.data(), bytes.data(), count * 4); + } + return t; +} + +// Value comparisons against the CPU reference (a NaN equals a NaN, +0 equals -0): verify localizes an arithmetic +// difference to one kernel; `parity` is the bit-exact gate. +size_t g_mismatchedChecks = 0; + +struct Stats { + size_t count = 0, mismatches = 0; + size_t firstRow = 0, firstColumn = 0; + float firstActual = 0, firstExpected = 0; + void add(size_t row, size_t column, float actual, float expected) { + ++count; + bool same = actual == expected || (actual != actual && expected != expected) || (actual == 0 && expected == 0); + if (same) return; + if (!mismatches) { firstRow = row; firstColumn = column; firstActual = actual; firstExpected = expected; } + ++mismatches; + } + void report(const char* label) const { + if (!mismatches) printf(" %-28s equal (%zu values)\n", label, count); + else printf(" %-28s MISMATCH %zu/%zu first row %zu col %zu: gpu %.8g ref %.8g (gpu bits %04x ref bits %04x)\n", + label, mismatches, count, firstRow, firstColumn, firstActual, firstExpected, num::f16Bits(firstActual), + num::f16Bits(firstExpected)); + if (mismatches || !count) ++g_mismatchedChecks; + } +}; +} // namespace + +int runVerify(int argc, char** argv) { + std::string modelDir = argValue(argc, argv, "--model"); + std::string fixtureDir = argValue(argc, argv, "--fixture"); + std::string shaderDir = argValue(argc, argv, "--shaders", executableDirectory(argv[0]) + "/shaders"); + uint32_t sampleRows = (uint32_t)atoi(argValue(argc, argv, "--rows", "2048").c_str()); + if (modelDir.empty() || fixtureDir.empty()) { + fprintf(stderr, "usage: dlss5vk verify --model --fixture [--rows N]\n"); + return 2; + } + std::string manifestText; + { std::vector b = readFile(fixtureDir + "/manifest.json"); manifestText.assign(b.begin(), b.end()); } + json::Value manifest = json::parse(manifestText); + uint32_t validWidth = (uint32_t)manifest["sourceDimensions"][0].integer(); + uint32_t validHeight = (uint32_t)manifest["sourceDimensions"][1].integer(); + + vk::Context context; + nr::Model model(context, modelDir, false); + nr::Kernels kernels(context, shaderDir); + kernels.setSiluTable(ref::siluTable()); + nr::Geometry geometry = nr::Geometry::fromValid(validWidth, validHeight); + nr::Graph::Options options; + options.captureBoundaries = true; + options.captureIntermediates = true; + options.fusedBlocks = false; + nr::Graph graph(context, model, kernels, geometry, options); + const uint32_t fullRows = geometry.fullWidth * geometry.fullHeight; + nr::Activation* features = graph.allocate("input features", fullRows, 16, nr::Format::F32); + std::vector featureBytes = readFile(fixtureDir + "/" + manifest["inputFeatures"]["file"].str()); + if (featureBytes.size() != features->validBytes()) throw std::runtime_error("input feature size mismatch"); + std::string block0File; + for (const json::Value& entry : manifest["blocks"].array) + if (entry["block"].integer() == 0) block0File = fixtureDir + "/" + entry["file"].str(); + if (block0File.empty()) throw std::runtime_error("verify needs the fixture's block-0 reference"); + context.upload(features->buffer, featureBytes.data(), featureBytes.size()); + VkCommandBuffer commands = context.beginCommands(); + graph.record(commands, *features); + context.endAndSubmit(commands, true); + printf("graph executed; checking block 0 against the CPU reference on %u rows\n", sampleRows); + + const nr::Tensor& tensor = model.tensor(0); + nr::FusedLayout layout = nr::preFusedLayout(); + const float* featureValues = reinterpret_cast(featureBytes.data()); + const uint32_t width = geometry.fullWidth; + sampleRows = std::min(sampleRows, fullRows); + + Tensor2D projectedFp16 = fetch(context, graph, "block-0/projectedFp16"); + Tensor2D projected = fetch(context, graph, "block-0/projected"); + { + Stats raw, quantized; + for (uint32_t r = 0; r < sampleRows; ++r) { + for (uint32_t n = 0; n < 32; ++n) { + float expected = ref::gemmF16Element(tensor, layout.inputAdapter, 16, 32, featureValues + (size_t)r * 16, n); + raw.add(r, n, projectedFp16.values[(size_t)r * 32 + n], expected); + quantized.add(r, n, projected.values[(size_t)r * 32 + n], ref::fp8Domain(expected)); + } + } + raw.report("pre adapter f16 GEMM"); + quantized.report("pre adapter quantize"); + } + + Tensor2D ffn = fetch(context, graph, "block-0/ffn"); + { + Stats s; + ref::GemmRef gemm{&tensor, layout.expand, 32, 128, 0, 0, true}; + for (uint32_t r = 0; r < sampleRows; ++r) { + for (uint32_t n = 0; n < 128; ++n) { + float pre = ref::gemmFp8Element(gemm, projected.row(r), n, 0.0f); + s.add(r, n, ffn.values[(size_t)r * 128 + n], ref::fp8Domain(ref::mpCubicSilu(pre))); + } + } + s.report("FFN expand + SiLU"); + } + + Tensor2D ffnResidual = fetch(context, graph, "block-0/ffnResidual"); + Tensor2D ffnQuantized = fetch(context, graph, "block-0/ffnQuantized"); + { + Stats raw, quantized; + ref::GemmRef gemm{&tensor, layout.contractWeights, 128, 32, 0, 0, true}; + for (uint32_t r = 0; r < sampleRows; ++r) { + for (uint32_t n = 0; n < 32; ++n) { + float scale = num::f16ToF32(nr::auxHalf(tensor, layout.ffnCosSkip, n)); + float initial = projectedFp16.values[(size_t)r * 32 + n] * scale; + float expected = ref::gemmFp8Element(gemm, ffn.row(r), n, initial); + raw.add(r, n, ffnResidual.values[(size_t)r * 32 + n], expected); + quantized.add(r, n, ffnQuantized.values[(size_t)r * 32 + n], ref::fp8Domain(expected)); + } + } + raw.report("FFN contract (raw f16)"); + quantized.report("FFN contract (E4 dual)"); + } + + Tensor2D qkv = fetch(context, graph, "block-0/qkv"); + { + Stats s; + ref::GemmRef gemm{&tensor, layout.qkv, 32, 96, 0, 0, true}; + for (uint32_t r = 0; r < sampleRows; ++r) + for (uint32_t n = 0; n < 96; ++n) + s.add(r, n, qkv.values[(size_t)r * 96 + n], ref::gemmFp8Element(gemm, ffnQuantized.row(r), n, 0.0f)); + s.report("QKV GEMM"); + } + + Tensor2D normalized = fetch(context, graph, "block-0/normalized"); + { + Stats s; + float scale = nr::auxF32(tensor, layout.scale); + float out[96]; + for (uint32_t r = 0; r < sampleRows; ++r) { + ref::windowNormalizeRef(qkv.row(r), 0, scale, out); + for (uint32_t c = 0; c < 96; ++c) s.add(r, c, normalized.values[(size_t)r * 96 + c], out[c]); + } + s.report("window normalize"); + } + + Tensor2D attended = fetch(context, graph, "block-0/attended"); + { + Stats s; + std::vector out(64 * 32); + uint32_t windowsX = (width + 7) / 8; + uint32_t sampleWindows = std::min((sampleRows + width * 8 - 1) / (width * 8) * windowsX, + windowsX * ((geometry.fullHeight + 7) / 8)); + for (uint32_t w = 0; w < sampleWindows; ++w) { + int windowX = (int)((w % windowsX) * 8), windowY = (int)((w / windowsX) * 8); + ref::windowAttendRef(normalized.values, width, geometry.fullHeight, 32, 0, windowX, windowY, tensor, + layout.relative, out.data()); + for (uint32_t q = 0; q < 64; ++q) { + int x = windowX + (int)(q & 7), y = windowY + (int)(q >> 3); + if (x >= (int)width || y >= (int)geometry.fullHeight) continue; + size_t token = (size_t)y * width + x; + for (uint32_t c = 0; c < 32; ++c) s.add(token, c, attended.values[token * 32 + c], out[q * 32 + c]); + } + } + s.report("window attention"); + } + + Tensor2D adapterRaw = fetch(context, graph, "block-0/adapterRaw"); + Tensor2D adapter = fetch(context, graph, "block-0"); + { + Stats raw, quantized; + ref::GemmRef gemm{&tensor, layout.projection, 32, 32, 0, 0, true}; + for (uint32_t r = 0; r < sampleRows; ++r) { + for (uint32_t n = 0; n < 32; ++n) { + float scale = num::f16ToF32(nr::auxHalf(tensor, layout.attnCosSkip, n)); + float initial = ffnResidual.values[(size_t)r * 32 + n] * scale; + float expected = ref::gemmFp8Element(gemm, attended.row(r), n, initial); + raw.add(r, n, adapterRaw.values[(size_t)r * 32 + n], expected); + quantized.add(r, n, adapter.values[(size_t)r * 32 + n], ref::fp8Domain(expected)); + } + } + raw.report("projection (raw f16)"); + quantized.report("projection (E4 block-0)"); + } + + { + std::vector expected = readFile(block0File); + if (expected.size() != (size_t)fullRows * 32) throw std::runtime_error("block-0 reference size mismatch"); + Stats s; + for (uint32_t r = 0; r < sampleRows; ++r) + for (uint32_t n = 0; n < 32; ++n) { + uint8_t code = expected[(size_t)r * 32 + n]; + s.add(r, n, adapter.values[(size_t)r * 32 + n], (code & 0x7f) == 0x7f ? 0.0f : num::e4m3ToF32(code)); + } + s.report("block-0 vs fixture"); + } + printf("%s\n", g_mismatchedChecks ? "VERIFY: MISMATCH" : "VERIFY: every kernel of block 0 equals the CPU reference (values)"); + return g_mismatchedChecks ? 1 : 0; +} diff --git a/third_party/opendlss-nr/src/vk_context.cpp b/third_party/opendlss-nr/src/vk_context.cpp new file mode 100644 index 000000000..5b02732a4 --- /dev/null +++ b/third_party/opendlss-nr/src/vk_context.cpp @@ -0,0 +1,631 @@ +#include "vk_context.h" + +#include +#include +#include +#include + +namespace vk { + +namespace { +constexpr VkDeviceSize kStagingBytes = 256ull << 20; // 256 MiB staging window +constexpr const char* kValidationLayer = "VK_LAYER_KHRONOS_validation"; +std::atomic g_validationErrors{0}; + +bool envFlag(const char* name) { + const char* value = getenv(name); + return value && *value && strcmp(value, "0") != 0; +} + +VkBool32 VKAPI_PTR onDebugMessage(VkDebugUtilsMessageSeverityFlagBitsEXT severity, VkDebugUtilsMessageTypeFlagsEXT type, + const VkDebugUtilsMessengerCallbackDataEXT* data, void*) { + if ((severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT) && (type & VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT)) + ++g_validationErrors; + fprintf(stderr, "[vk] %s\n", data->pMessage ? data->pMessage : ""); + return VK_FALSE; +} +} // namespace + +uint32_t Context::validationErrors() { return g_validationErrors.load(); } + +Context::Context() { + if (volkInitialize() != VK_SUCCESS) throw std::runtime_error("vulkan-1.dll unavailable"); + + VkApplicationInfo app{VK_STRUCTURE_TYPE_APPLICATION_INFO}; + app.pApplicationName = "dlss5-vulkan"; + app.apiVersion = VK_API_VERSION_1_3; + VkInstanceCreateInfo instanceInfo{VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO}; + instanceInfo.pApplicationInfo = &app; + validation_ = envFlag("DLSS5VK_VALIDATION"); + const bool debug = envFlag("DLSS5VK_DEBUG"); + const char* instanceExtensions[] = {VK_EXT_DEBUG_UTILS_EXTENSION_NAME}; + if (validation_ || debug) { instanceInfo.enabledExtensionCount = 1; instanceInfo.ppEnabledExtensionNames = instanceExtensions; } + if (validation_) { + uint32_t count = 0; + VK_CHECK(vkEnumerateInstanceLayerProperties(&count, nullptr)); + std::vector layers(count); + VK_CHECK(vkEnumerateInstanceLayerProperties(&count, layers.data())); + auto layer = std::find_if(layers.begin(), layers.end(), [](const VkLayerProperties& l) { return !strcmp(l.layerName, kValidationLayer); }); + if (layer == layers.end()) + throw std::runtime_error(std::string("DLSS5VK_VALIDATION=1 but ") + kValidationLayer + + " is not installed (a Vulkan SDK, or VK_LAYER_PATH at a Vulkan-ValidationLayers build)"); + instanceInfo.enabledLayerCount = 1; + instanceInfo.ppEnabledLayerNames = &kValidationLayer; + fprintf(stderr, "validation: %s enabled (API %u.%u.%u)\n", kValidationLayer, VK_API_VERSION_MAJOR(layer->specVersion), + VK_API_VERSION_MINOR(layer->specVersion), VK_API_VERSION_PATCH(layer->specVersion)); + } + VK_CHECK(vkCreateInstance(&instanceInfo, nullptr, &instance_)); + volkLoadInstance(instance_); + if (validation_ || debug) { + VkDebugUtilsMessengerCreateInfoEXT messengerInfo{VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT}; + messengerInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; + if (debug) messengerInfo.messageSeverity |= VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT; + messengerInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; + messengerInfo.pfnUserCallback = onDebugMessage; + VK_CHECK(vkCreateDebugUtilsMessengerEXT(instance_, &messengerInfo, nullptr, &messenger_)); + } + + uint32_t count = 0; + VK_CHECK(vkEnumeratePhysicalDevices(instance_, &count, nullptr)); + if (!count) throw std::runtime_error("no Vulkan physical devices"); + std::vector devices(count); + VK_CHECK(vkEnumeratePhysicalDevices(instance_, &count, devices.data())); + // Prefer a discrete device exposing FP8 cooperative matrices. + for (VkPhysicalDevice candidate : devices) { + uint32_t extensionCount = 0; + vkEnumerateDeviceExtensionProperties(candidate, nullptr, &extensionCount, nullptr); + std::vector extensions(extensionCount); + vkEnumerateDeviceExtensionProperties(candidate, nullptr, &extensionCount, extensions.data()); + bool coop = false, fp8 = false; + for (const auto& extension : extensions) { + if (!strcmp(extension.extensionName, VK_KHR_COOPERATIVE_MATRIX_EXTENSION_NAME)) coop = true; + if (!strcmp(extension.extensionName, VK_EXT_SHADER_FLOAT8_EXTENSION_NAME)) fp8 = true; + if (getenv("DLSS5VK_LIST_EXTENSIONS") && (strstr(extension.extensionName, "cooperative") || strstr(extension.extensionName, "NV_"))) + printf(" device extension: %s (v%u)\n", extension.extensionName, extension.specVersion); + } + if (coop && fp8) { physical_ = candidate; break; } + } + if (!physical_) throw std::runtime_error("no device with VK_KHR_cooperative_matrix + VK_EXT_shader_float8"); + if (getenv("DLSS5VK_LIST_EXTENSIONS")) { + VkPhysicalDeviceCooperativeMatrix2FeaturesNV cm2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_FEATURES_NV}; + VkPhysicalDeviceFeatures2 f2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2}; + f2.pNext = &cm2; + vkGetPhysicalDeviceFeatures2(physical_, &f2); + printf("coopmat2 features: workgroupScope %u flexibleDimensions %u reductions %u conversions %u perElement %u tensorAddressing %u blockLoads %u\n", + cm2.cooperativeMatrixWorkgroupScope, cm2.cooperativeMatrixFlexibleDimensions, cm2.cooperativeMatrixReductions, + cm2.cooperativeMatrixConversions, cm2.cooperativeMatrixPerElementOperations, cm2.cooperativeMatrixTensorAddressing, + cm2.cooperativeMatrixBlockLoads); + VkPhysicalDeviceCooperativeMatrix2PropertiesNV p2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_PROPERTIES_NV}; + VkPhysicalDeviceProperties2 props2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2}; + props2.pNext = &p2; + vkGetPhysicalDeviceProperties2(physical_, &props2); + printf("coopmat2 properties: maxWorkgroupSize %u maxFlexibleDimension %u reservedShared %u\n", + p2.cooperativeMatrixWorkgroupScopeMaxWorkgroupSize, p2.cooperativeMatrixFlexibleDimensionsMaxDimension, + p2.cooperativeMatrixWorkgroupScopeReservedSharedMemory); + auto getFlex = (PFN_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV)vkGetInstanceProcAddr( + instance_, "vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV"); + if (getFlex) { + uint32_t n = 0; + getFlex(physical_, &n, nullptr); + std::vector flex(n); + for (auto& f : flex) f.sType = VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_FLEXIBLE_DIMENSIONS_PROPERTIES_NV; + getFlex(physical_, &n, flex.data()); + for (auto& f : flex) + printf(" flexible: gran M%u N%u K%u A %u B %u C %u R %u sat %u scope %u wgInvocations %u\n", f.MGranularity, f.NGranularity, + f.KGranularity, f.AType, f.BType, f.CType, f.ResultType, f.saturatingAccumulation, f.scope, f.workgroupInvocations); + } + } + + VkPhysicalDeviceProperties2 properties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2}; + VkPhysicalDeviceSubgroupProperties subgroup{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES}; + VkPhysicalDeviceShaderSMBuiltinsPropertiesNV smBuiltins{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV}; + properties.pNext = &subgroup; + subgroup.pNext = &smBuiltins; + vkGetPhysicalDeviceProperties2(physical_, &properties); + smCount_ = smBuiltins.shaderSMCount; + deviceName_ = properties.properties.deviceName; + timestampPeriod_ = properties.properties.limits.timestampPeriod; + maxSharedMemory_ = properties.properties.limits.maxComputeSharedMemorySize; + if (subgroup.subgroupSize != 32) + fprintf(stderr, "warning: subgroup size %u (cooperative kernels assume 32)\n", subgroup.subgroupSize); + vkGetPhysicalDeviceMemoryProperties(physical_, &memoryProperties_); + + uint32_t familyCount = 0; + vkGetPhysicalDeviceQueueFamilyProperties(physical_, &familyCount, nullptr); + std::vector families(familyCount); + vkGetPhysicalDeviceQueueFamilyProperties(physical_, &familyCount, families.data()); + queueFamily_ = UINT32_MAX; + for (uint32_t index = 0; index < familyCount; ++index) { + if ((families[index].queueFlags & VK_QUEUE_COMPUTE_BIT) && families[index].timestampValidBits) { + // Prefer a family that also has graphics (the "main" queue) for widest support. + if (queueFamily_ == UINT32_MAX || (families[index].queueFlags & VK_QUEUE_GRAPHICS_BIT)) queueFamily_ = index; + } + } + if (queueFamily_ == UINT32_MAX) throw std::runtime_error("no compute queue with timestamps"); + + float priority = 1.0f; + VkDeviceQueueCreateInfo queueInfo{VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO}; + queueInfo.queueFamilyIndex = queueFamily_; + queueInfo.queueCount = 1; + queueInfo.pQueuePriorities = &priority; + + DeviceRequirements req; + VkDeviceCreateInfo deviceInfo{VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO}; + deviceInfo.pNext = &req.features; + deviceInfo.queueCreateInfoCount = 1; + deviceInfo.pQueueCreateInfos = &queueInfo; + deviceInfo.enabledExtensionCount = (uint32_t)req.extensions.size(); + deviceInfo.ppEnabledExtensionNames = req.extensions.data(); + VK_CHECK(vkCreateDevice(physical_, &deviceInfo, nullptr, &device_)); + volkLoadDevice(device_); + initCommon(); +} + +Context::Context(VkInstance instance, VkPhysicalDevice physical, VkDevice device, uint32_t queueFamily, uint32_t queueIndex) { + if (volkInitialize() != VK_SUCCESS) throw std::runtime_error("vulkan-1.dll unavailable"); + instance_ = instance; physical_ = physical; device_ = device; queueFamily_ = queueFamily; queueIndex_ = queueIndex; owned_ = false; + volkLoadInstance(instance_); + volkLoadDevice(device_); + VkPhysicalDeviceProperties2 properties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2}; + VkPhysicalDeviceSubgroupProperties subgroup{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES}; + VkPhysicalDeviceShaderSMBuiltinsPropertiesNV smBuiltins{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV}; + properties.pNext = &subgroup; + subgroup.pNext = &smBuiltins; + vkGetPhysicalDeviceProperties2(physical_, &properties); + smCount_ = smBuiltins.shaderSMCount; + deviceName_ = properties.properties.deviceName; + timestampPeriod_ = properties.properties.limits.timestampPeriod; + maxSharedMemory_ = properties.properties.limits.maxComputeSharedMemorySize; + vkGetPhysicalDeviceMemoryProperties(physical_, &memoryProperties_); + initCommon(); +} + +DeviceRequirements::DeviceRequirements() { + f11.storageBuffer16BitAccess = VK_TRUE; + f11.uniformAndStorageBuffer16BitAccess = VK_TRUE; + f12.pNext = &f11; + f12.storageBuffer8BitAccess = VK_TRUE; + f12.uniformAndStorageBuffer8BitAccess = VK_TRUE; + f12.shaderFloat16 = VK_TRUE; + f12.shaderInt8 = VK_TRUE; + f12.vulkanMemoryModel = VK_TRUE; + f12.vulkanMemoryModelDeviceScope = VK_TRUE; + f12.hostQueryReset = VK_TRUE; + f12.bufferDeviceAddress = VK_TRUE; + f13.pNext = &f12; + f13.subgroupSizeControl = VK_TRUE; + f13.computeFullSubgroups = VK_TRUE; + f13.synchronization2 = VK_TRUE; + f13.maintenance4 = VK_TRUE; // LocalSizeId: gemm_fp8.comp takes its workgroup size from a specialization constant + coop.pNext = &f13; + coop.cooperativeMatrix = VK_TRUE; + coop2.pNext = &coop; + coop2.cooperativeMatrixWorkgroupScope = VK_TRUE; + coop2.cooperativeMatrixFlexibleDimensions = VK_TRUE; + coop2.cooperativeMatrixReductions = VK_TRUE; + coop2.cooperativeMatrixConversions = VK_TRUE; + coop2.cooperativeMatrixPerElementOperations = VK_TRUE; + coop2.cooperativeMatrixTensorAddressing = VK_TRUE; + coop2.cooperativeMatrixBlockLoads = VK_TRUE; + fp8.pNext = &coop2; + fp8.shaderFloat8 = VK_TRUE; + fp8.shaderFloat8CooperativeMatrix = VK_TRUE; + features.pNext = &fp8; + features.features.shaderInt16 = VK_TRUE; + features.features.shaderInt64 = VK_TRUE; + // robustBufferAccess stays off (15% cost, masks bugs); experiment shaders must check their own ranges. + features.features.robustBufferAccess = VK_FALSE; + + VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR& executableFeatures = executable; + executableFeatures.pipelineExecutableInfo = VK_TRUE; + executableFeatures.pNext = features.pNext; + features.pNext = &executableFeatures; + // Shader clocks (clockARB / clockRealtimeEXT). + VkPhysicalDeviceShaderClockFeaturesKHR& clockFeatures = clock; + clockFeatures.shaderSubgroupClock = VK_TRUE; + clockFeatures.shaderDeviceClock = VK_TRUE; + clockFeatures.pNext = features.pNext; + features.pNext = &clockFeatures; + VkPhysicalDeviceShaderSMBuiltinsFeaturesNV& smFeatures = sm; + smFeatures.shaderSMBuiltins = VK_TRUE; + smFeatures.pNext = features.pNext; + features.pNext = &smFeatures; + extensions = {VK_KHR_COOPERATIVE_MATRIX_EXTENSION_NAME, VK_EXT_SHADER_FLOAT8_EXTENSION_NAME, + VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME, VK_NV_COOPERATIVE_MATRIX_2_EXTENSION_NAME, + VK_NV_CUDA_KERNEL_LAUNCH_EXTENSION_NAME, VK_KHR_SHADER_CLOCK_EXTENSION_NAME, + VK_NV_SHADER_SM_BUILTINS_EXTENSION_NAME}; +} + +void Context::initCommon() { + vkGetDeviceQueue(device_, queueFamily_, queueIndex_, &queue_); + + VkCommandPoolCreateInfo poolInfo{VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO}; + poolInfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT; + poolInfo.queueFamilyIndex = queueFamily_; + VK_CHECK(vkCreateCommandPool(device_, &poolInfo, nullptr, &commandPool_)); + + VkDescriptorSetLayoutBinding bindings[kGenericBindings]; + for (uint32_t index = 0; index < kGenericBindings; ++index) { + bindings[index] = {index, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1, VK_SHADER_STAGE_COMPUTE_BIT, nullptr}; + } + VkDescriptorSetLayoutCreateInfo layoutInfo{VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO}; + layoutInfo.bindingCount = kGenericBindings; + layoutInfo.pBindings = bindings; + VK_CHECK(vkCreateDescriptorSetLayout(device_, &layoutInfo, nullptr, &setLayout_)); + + VkPushConstantRange pushRange{VK_SHADER_STAGE_COMPUTE_BIT, 0, kPushConstantBytes}; + VkPipelineLayoutCreateInfo pipelineLayoutInfo{VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO}; + pipelineLayoutInfo.setLayoutCount = 1; + pipelineLayoutInfo.pSetLayouts = &setLayout_; + pipelineLayoutInfo.pushConstantRangeCount = 1; + pipelineLayoutInfo.pPushConstantRanges = &pushRange; + VK_CHECK(vkCreatePipelineLayout(device_, &pipelineLayoutInfo, nullptr, &pipelineLayout_)); + + VkDescriptorPoolSize poolSize{VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 8192 * kGenericBindings}; + VkDescriptorPoolCreateInfo descriptorPoolInfo{VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO}; + descriptorPoolInfo.maxSets = 8192; + descriptorPoolInfo.poolSizeCount = 1; + descriptorPoolInfo.pPoolSizes = &poolSize; + for (VkDescriptorPool& pool : descriptorPools_) VK_CHECK(vkCreateDescriptorPool(device_, &descriptorPoolInfo, nullptr, &pool)); + descriptorPool_ = descriptorPools_[0]; + + dummy_ = createBuffer(256, false, "dummy binding"); + fillZero(dummy_); + staging_ = createBuffer(kStagingBytes, true, "staging"); +} + +Context::~Context() { + if (!device_) return; + vkDeviceWaitIdle(device_); + for (VkShaderModule module : modules_) vkDestroyShaderModule(device_, module, nullptr); + destroyBuffer(dummy_); + destroyBuffer(staging_); + for (VkDescriptorPool pool : descriptorPools_) vkDestroyDescriptorPool(device_, pool, nullptr); + vkDestroyPipelineLayout(device_, pipelineLayout_, nullptr); + vkDestroyDescriptorSetLayout(device_, setLayout_, nullptr); + vkDestroyCommandPool(device_, commandPool_, nullptr); + if (owned_) { + vkDestroyDevice(device_, nullptr); + if (messenger_) vkDestroyDebugUtilsMessengerEXT(instance_, messenger_, nullptr); + vkDestroyInstance(instance_, nullptr); + } +} + +uint32_t Context::findMemoryType(uint32_t typeBits, VkMemoryPropertyFlags required) { + for (uint32_t index = 0; index < memoryProperties_.memoryTypeCount; ++index) { + if ((typeBits & (1u << index)) && + (memoryProperties_.memoryTypes[index].propertyFlags & required) == required) + return index; + } + throw std::runtime_error("no suitable memory type"); +} + +Buffer Context::createBuffer(VkDeviceSize size, bool hostVisible, const char* label, VkBufferUsageFlags extra) { + Buffer result; + result.size = std::max(size, 16); + result.hostVisible = hostVisible; + result.label = label; + VkBufferCreateInfo info{VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO}; + info.size = result.size; + info.usage = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT | + VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT | extra; + info.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + VK_CHECK(vkCreateBuffer(device_, &info, nullptr, &result.buffer)); + VkMemoryRequirements requirements; + vkGetBufferMemoryRequirements(device_, result.buffer, &requirements); + VkMemoryAllocateFlagsInfo allocateFlags{VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO}; + allocateFlags.flags = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT; + VkMemoryAllocateInfo allocateInfo{VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO}; + allocateInfo.pNext = &allocateFlags; + allocateInfo.allocationSize = requirements.size; + allocateInfo.memoryTypeIndex = findMemoryType( + requirements.memoryTypeBits, + hostVisible ? (VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT) + : VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + VK_CHECK(vkAllocateMemory(device_, &allocateInfo, nullptr, &result.memory)); + VK_CHECK(vkBindBufferMemory(device_, result.buffer, result.memory, 0)); + if (hostVisible) VK_CHECK(vkMapMemory(device_, result.memory, 0, VK_WHOLE_SIZE, 0, &result.mapped)); + return result; +} + +void Context::destroyBuffer(Buffer& buffer) { + if (buffer.mapped) vkUnmapMemory(device_, buffer.memory); + if (buffer.buffer) vkDestroyBuffer(device_, buffer.buffer, nullptr); + if (buffer.memory) vkFreeMemory(device_, buffer.memory, nullptr); + buffer = Buffer{}; +} + +void Context::upload(const Buffer& target, const void* data, VkDeviceSize size, VkDeviceSize offset) { + if (offset + size > target.size) throw std::runtime_error(std::string("upload overflows ") + target.label); + const uint8_t* bytes = static_cast(data); + VkDeviceSize done = 0; + while (done < size) { + VkDeviceSize chunk = std::min(size - done, staging_.size); + memcpy(staging_.mapped, bytes + done, chunk); + VkCommandBuffer commands = beginCommands(); + VkBufferCopy region{0, offset + done, chunk}; + vkCmdCopyBuffer(commands, staging_.buffer, target.buffer, 1, ®ion); + endAndSubmit(commands, true); + done += chunk; + } +} + +void Context::fillZero(const Buffer& target) { + VkCommandBuffer commands = beginCommands(); + vkCmdFillBuffer(commands, target.buffer, 0, VK_WHOLE_SIZE, 0); + endAndSubmit(commands, true); +} + +std::vector Context::download(const Buffer& source, VkDeviceSize size, VkDeviceSize offset) { + if (offset + size > source.size) throw std::runtime_error(std::string("download overflows ") + source.label); + std::vector result(size); + VkDeviceSize done = 0; + while (done < size) { + VkDeviceSize chunk = std::min(size - done, staging_.size); + VkCommandBuffer commands = beginCommands(); + VkBufferCopy region{offset + done, 0, chunk}; + vkCmdCopyBuffer(commands, source.buffer, staging_.buffer, 1, ®ion); + endAndSubmit(commands, true); + memcpy(result.data() + done, staging_.mapped, chunk); + done += chunk; + } + return result; +} + +VkShaderModule Context::loadShaderModule(const std::string& spvPath) { + std::ifstream file(spvPath, std::ios::binary | std::ios::ate); + if (!file) throw std::runtime_error("missing shader " + spvPath); + std::streamsize size = file.tellg(); + file.seekg(0); + std::vector words((size + 3) / 4); + file.read(reinterpret_cast(words.data()), size); + VkShaderModuleCreateInfo info{VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO}; + info.codeSize = size; + info.pCode = words.data(); + VkShaderModule module; + VK_CHECK(vkCreateShaderModule(device_, &info, nullptr, &module)); + modules_.push_back(module); + return module; +} + +Pipeline Context::createComputePipeline(VkShaderModule module, const SpecConstants& constants, + const char* label, uint32_t requiredSubgroupSize) { + VkSpecializationInfo specialization{}; + specialization.mapEntryCount = (uint32_t)constants.entries.size(); + specialization.pMapEntries = constants.entries.data(); + specialization.dataSize = constants.data.size() * 4; + specialization.pData = constants.data.data(); + VkPipelineShaderStageRequiredSubgroupSizeCreateInfo subgroupInfo{ + VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO}; + subgroupInfo.requiredSubgroupSize = requiredSubgroupSize; + VkPipelineShaderStageCreateInfo stage{VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO}; + stage.pNext = requiredSubgroupSize ? &subgroupInfo : nullptr; + stage.flags = requiredSubgroupSize ? VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT : 0; + stage.stage = VK_SHADER_STAGE_COMPUTE_BIT; + stage.module = module; + stage.pName = "main"; + stage.pSpecializationInfo = constants.entries.empty() ? nullptr : &specialization; + VkComputePipelineCreateInfo info{VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO}; + info.stage = stage; + info.layout = pipelineLayout_; + if (captureStatistics_) + info.flags |= VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR | VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR; + Pipeline result; + result.label = label; + VK_CHECK(vkCreateComputePipelines(device_, VK_NULL_HANDLE, 1, &info, nullptr, &result.pipeline)); + return result; +} + +std::string Context::pipelineStatistics(const Pipeline& pipeline, bool includeInternal) { + std::string report; + VkPipelineInfoKHR pipelineInfo{VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR}; + pipelineInfo.pipeline = pipeline.pipeline; + uint32_t executableCount = 0; + if (vkGetPipelineExecutablePropertiesKHR(device_, &pipelineInfo, &executableCount, nullptr) != VK_SUCCESS) return "n/a"; + std::vector executables(executableCount, + {VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR}); + vkGetPipelineExecutablePropertiesKHR(device_, &pipelineInfo, &executableCount, executables.data()); + for (uint32_t e = 0; e < executableCount; ++e) { + report += std::string(executables[e].name) + " (" + executables[e].description + ") subgroup " + + std::to_string(executables[e].subgroupSize) + "\n"; + VkPipelineExecutableInfoKHR executableInfo{VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR}; + executableInfo.pipeline = pipeline.pipeline; + executableInfo.executableIndex = e; + uint32_t statisticCount = 0; + vkGetPipelineExecutableStatisticsKHR(device_, &executableInfo, &statisticCount, nullptr); + std::vector statistics(statisticCount, + {VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR}); + vkGetPipelineExecutableStatisticsKHR(device_, &executableInfo, &statisticCount, statistics.data()); + for (const auto& statistic : statistics) { + report += " " + std::string(statistic.name) + " = "; + switch (statistic.format) { + case VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR: report += statistic.value.b32 ? "true" : "false"; break; + case VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR: report += std::to_string(statistic.value.i64); break; + case VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR: report += std::to_string(statistic.value.u64); break; + case VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR: report += std::to_string(statistic.value.f64); break; + default: break; + } + report += " (" + std::string(statistic.description) + ")\n"; + } + if (includeInternal) { + uint32_t irCount = 0; + vkGetPipelineExecutableInternalRepresentationsKHR(device_, &executableInfo, &irCount, nullptr); + std::vector irs( + irCount, {VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR}); + vkGetPipelineExecutableInternalRepresentationsKHR(device_, &executableInfo, &irCount, irs.data()); + std::vector> storage(irCount); + for (uint32_t i = 0; i < irCount; ++i) { storage[i].resize(irs[i].dataSize + 1); irs[i].pData = storage[i].data(); } + vkGetPipelineExecutableInternalRepresentationsKHR(device_, &executableInfo, &irCount, irs.data()); + for (uint32_t i = 0; i < irCount; ++i) { + report += " --- " + std::string(irs[i].name) + " (" + irs[i].description + ", " + std::to_string(irs[i].dataSize) + + " bytes, text=" + (irs[i].isText ? "yes" : "no") + ")\n"; + if (irs[i].isText) report += std::string(storage[i].data(), irs[i].dataSize) + "\n"; + } + } + } + return report; +} + +void Context::destroyPipeline(Pipeline& pipeline) { + if (pipeline.pipeline) vkDestroyPipeline(device_, pipeline.pipeline, nullptr); + pipeline = Pipeline{}; +} + +VkDescriptorSet Context::allocateSet(const Buffer* const bindings[kGenericBindings], + const VkDeviceSize offsets[kGenericBindings], + const VkDeviceSize ranges[kGenericBindings]) { + VkDescriptorSetAllocateInfo allocateInfo{VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO}; + allocateInfo.descriptorPool = descriptorPool_; + allocateInfo.descriptorSetCount = 1; + allocateInfo.pSetLayouts = &setLayout_; + VkDescriptorSet set; + VK_CHECK(vkAllocateDescriptorSets(device_, &allocateInfo, &set)); + VkDescriptorBufferInfo infos[kGenericBindings]; + VkWriteDescriptorSet writes[kGenericBindings]; + for (uint32_t index = 0; index < kGenericBindings; ++index) { + const Buffer* buffer = bindings[index] ? bindings[index] : &dummy_; + infos[index] = {buffer->buffer, offsets ? offsets[index] : 0, + ranges && ranges[index] ? ranges[index] : VK_WHOLE_SIZE}; + writes[index] = {VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET}; + writes[index].dstSet = set; + writes[index].dstBinding = index; + writes[index].descriptorCount = 1; + writes[index].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; + writes[index].pBufferInfo = &infos[index]; + } + vkUpdateDescriptorSets(device_, kGenericBindings, writes, 0, nullptr); + return set; +} + +// Two pools in rotation: a frame's sets stay valid while the next frame is recorded (the caller waits for the +// frame before the previous one, as the demo's two frames in flight do). +void Context::resetDescriptorPool() { resetDescriptorPool((uint32_t)((descriptorPoolIndex_ + 1) % descriptorPools_.size())); } + +void Context::resetDescriptorPool(uint32_t slot) { + descriptorPoolIndex_ = slot % descriptorPools_.size(); + descriptorPool_ = descriptorPools_[descriptorPoolIndex_]; + VK_CHECK(vkResetDescriptorPool(device_, descriptorPool_, 0)); +} + +VkCommandBuffer Context::beginCommands() { + VkCommandBufferAllocateInfo allocateInfo{VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO}; + allocateInfo.commandPool = commandPool_; + allocateInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; + allocateInfo.commandBufferCount = 1; + VkCommandBuffer commands; + VK_CHECK(vkAllocateCommandBuffers(device_, &allocateInfo, &commands)); + VkCommandBufferBeginInfo beginInfo{VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO}; + beginInfo.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT; + VK_CHECK(vkBeginCommandBuffer(commands, &beginInfo)); + return commands; +} + +void Context::endAndSubmit(VkCommandBuffer commands, bool wait) { + VK_CHECK(vkEndCommandBuffer(commands)); + VkSubmitInfo submit{VK_STRUCTURE_TYPE_SUBMIT_INFO}; + submit.commandBufferCount = 1; + submit.pCommandBuffers = &commands; + VK_CHECK(vkQueueSubmit(queue_, 1, &submit, VK_NULL_HANDLE)); + if (wait) { + VK_CHECK(vkQueueWaitIdle(queue_)); + vkFreeCommandBuffers(device_, commandPool_, 1, &commands); + } +} + +void Context::computeBarrier(VkCommandBuffer commands) { + // Compute -> compute only. Including the transfer stages here made NVIDIA flush + // caches between every dispatch (tens of microseconds per barrier once L2 is dirty). + VkMemoryBarrier2 barrier{VK_STRUCTURE_TYPE_MEMORY_BARRIER_2}; + barrier.srcStageMask = VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT; + barrier.srcAccessMask = VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT; + barrier.dstStageMask = VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT; + barrier.dstAccessMask = VK_ACCESS_2_SHADER_STORAGE_READ_BIT | VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT; + VkDependencyInfo dependency{VK_STRUCTURE_TYPE_DEPENDENCY_INFO}; + dependency.memoryBarrierCount = 1; + dependency.pMemoryBarriers = &barrier; + vkCmdPipelineBarrier2(commands, &dependency); +} + +// Captures and uploads only. +void Context::transferBarrier(VkCommandBuffer commands) { + VkMemoryBarrier2 barrier{VK_STRUCTURE_TYPE_MEMORY_BARRIER_2}; + barrier.srcStageMask = VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT | VK_PIPELINE_STAGE_2_TRANSFER_BIT; + barrier.srcAccessMask = VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT | VK_ACCESS_2_TRANSFER_WRITE_BIT; + barrier.dstStageMask = VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT | VK_PIPELINE_STAGE_2_TRANSFER_BIT; + barrier.dstAccessMask = VK_ACCESS_2_SHADER_STORAGE_READ_BIT | VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT | + VK_ACCESS_2_TRANSFER_READ_BIT | VK_ACCESS_2_TRANSFER_WRITE_BIT; + VkDependencyInfo dependency{VK_STRUCTURE_TYPE_DEPENDENCY_INFO}; + dependency.memoryBarrierCount = 1; + dependency.pMemoryBarriers = &barrier; + vkCmdPipelineBarrier2(commands, &dependency); +} + +VkQueryPool Context::createTimestampPool(uint32_t count) { + VkQueryPoolCreateInfo info{VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO}; + info.queryType = VK_QUERY_TYPE_TIMESTAMP; + info.queryCount = count; + VkQueryPool pool; + VK_CHECK(vkCreateQueryPool(device_, &info, nullptr, &pool)); + vkResetQueryPool(device_, pool, 0, count); + return pool; +} + +std::vector Context::readTimestampsMs(VkQueryPool pool, uint32_t count) { + std::vector ticks(count); + VK_CHECK(vkGetQueryPoolResults(device_, pool, 0, count, ticks.size() * 8, ticks.data(), 8, + VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT)); + std::vector result(count); + for (uint32_t index = 0; index < count; ++index) result[index] = ticks[index] * (double)timestampPeriod_ * 1e-6; + return result; +} + +} // namespace vk + +namespace vk { + +VkDeviceAddress Context::deviceAddress(const Buffer& buffer) const { + VkBufferDeviceAddressInfo info{VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO}; + info.buffer = buffer.buffer; + return vkGetBufferDeviceAddress(device_, &info); +} + +VkCudaModuleNV Context::createCudaModule(const std::string& ptx) { + VkCudaModuleCreateInfoNV info{VK_STRUCTURE_TYPE_CUDA_MODULE_CREATE_INFO_NV}; + info.dataSize = ptx.size() + 1; + info.pData = ptx.c_str(); + VkCudaModuleNV module = VK_NULL_HANDLE; + VK_CHECK(vkCreateCudaModuleNV(device_, &info, nullptr, &module)); + return module; +} + +VkCudaFunctionNV Context::createCudaFunction(VkCudaModuleNV module, const char* name) { + VkCudaFunctionCreateInfoNV info{VK_STRUCTURE_TYPE_CUDA_FUNCTION_CREATE_INFO_NV}; + info.module = module; + info.pName = name; + VkCudaFunctionNV function = VK_NULL_HANDLE; + VK_CHECK(vkCreateCudaFunctionNV(device_, &info, nullptr, &function)); + return function; +} + +void Context::destroyCudaFunction(VkCudaFunctionNV function) { + if (function) vkDestroyCudaFunctionNV(device_, function, nullptr); +} + +void Context::destroyCudaModule(VkCudaModuleNV module) { + if (module) vkDestroyCudaModuleNV(device_, module, nullptr); +} + +void Context::cudaLaunch(VkCommandBuffer commands, VkCudaFunctionNV function, uint32_t gridX, uint32_t gridY, uint32_t gridZ, + uint32_t blockX, uint32_t sharedBytes, const void* const* params, size_t paramCount) { + VkCudaLaunchInfoNV info{VK_STRUCTURE_TYPE_CUDA_LAUNCH_INFO_NV}; + info.function = function; + info.gridDimX = gridX; info.gridDimY = gridY; info.gridDimZ = gridZ; + info.blockDimX = blockX; info.blockDimY = 1; info.blockDimZ = 1; + info.sharedMemBytes = sharedBytes; + info.paramCount = paramCount; + info.pParams = params; + vkCmdCudaLaunchKernelNV(commands, &info); +} + +} // namespace vk diff --git a/third_party/opendlss-nr/src/vk_context.h b/third_party/opendlss-nr/src/vk_context.h new file mode 100644 index 000000000..13a19e9ee --- /dev/null +++ b/third_party/opendlss-nr/src/vk_context.h @@ -0,0 +1,176 @@ +// Minimal Vulkan compute host for the DLSS-NR port: one device, one queue, +// storage buffers, compute pipelines with specialization constants, a generic +// eight-binding descriptor layout and GPU timestamps. No graphics, no windows. +#pragma once +#include + +#include +#include +#include +#include +#include +#include + +#define VK_CHECK(expr) \ + do { \ + VkResult vk_check_result_ = (expr); \ + if (vk_check_result_ != VK_SUCCESS) \ + throw std::runtime_error(std::string(#expr) + " failed: " + \ + std::to_string((int)vk_check_result_)); \ + } while (0) + +namespace vk { + +struct Buffer { + VkBuffer buffer = VK_NULL_HANDLE; + VkDeviceMemory memory = VK_NULL_HANDLE; + VkDeviceSize size = 0; + bool hostVisible = false; + void* mapped = nullptr; + const char* label = ""; +}; + +constexpr uint32_t kGenericBindings = 12; +constexpr uint32_t kPushConstantBytes = 128; + +struct SpecConstants { + std::vector entries; + std::vector data; + void add(uint32_t id, uint32_t value) { + entries.push_back({id, (uint32_t)(data.size() * 4), 4}); + data.push_back(value); + } + void addFloat(uint32_t id, float value) { + uint32_t bits; + memcpy(&bits, &value, 4); + add(id, bits); + } +}; + +struct Pipeline { + VkPipeline pipeline = VK_NULL_HANDLE; + const char* label = ""; +}; + +// The device features / extensions the NR kernels need, as a stable pNext chain (the demo hands it to the +// renderer's device creation; Context::Context() uses it for its own device). +struct DeviceRequirements { + VkPhysicalDeviceVulkan11Features f11{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES}; + VkPhysicalDeviceVulkan12Features f12{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES}; + VkPhysicalDeviceVulkan13Features f13{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES}; + VkPhysicalDeviceCooperativeMatrixFeaturesKHR coop{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR}; + VkPhysicalDeviceCooperativeMatrix2FeaturesNV coop2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_FEATURES_NV}; + VkPhysicalDeviceShaderFloat8FeaturesEXT fp8{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT8_FEATURES_EXT}; + VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR executable{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR}; + VkPhysicalDeviceShaderClockFeaturesKHR clock{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR}; + VkPhysicalDeviceShaderSMBuiltinsFeaturesNV sm{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV}; + VkPhysicalDeviceFeatures2 features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2}; + std::vector extensions; + DeviceRequirements(); // fills the chain (features.pNext -> ...) and the extension list + void* pNextChain() { return features.pNext; } // for a VkDeviceCreateInfo that carries VkPhysicalDeviceFeatures itself +}; + +class Context { + public: + Context(); + // Adopt a device created elsewhere (the demo renderer) with DeviceRequirements applied; the instance / device + // are not destroyed by this object. + Context(VkInstance instance, VkPhysicalDevice physical, VkDevice device, uint32_t queueFamily, uint32_t queueIndex = 0); + ~Context(); + uint32_t queueFamily() const { return queueFamily_; } + uint32_t queueIndex() const { return queueIndex_; } + VkInstance instance() const { return instance_; } + // Instance diagnostics of the tool's own instance. DLSS5VK_VALIDATION=1 enables VK_LAYER_KHRONOS_validation and + // refuses to start without it; DLSS5VK_DEBUG=1 only installs a debug messenger for the driver's own messages + // (PTX compiler diagnostics among them), which checks nothing. + bool validationEnabled() const { return validation_; } + static uint32_t validationErrors(); // error-severity validation messages so far, over every Context + + VkDevice device() const { return device_; } + + uint32_t smCount() const { return smCount_; } + VkQueue queue() const { return queue_; } + VkPhysicalDevice physical() const { return physical_; } + float timestampPeriodNs() const { return timestampPeriod_; } + VkPipelineLayout pipelineLayout() const { return pipelineLayout_; } + VkDescriptorSetLayout setLayout() const { return setLayout_; } + const std::string& deviceName() const { return deviceName_; } + + // Buffers ----------------------------------------------------------------- + Buffer createBuffer(VkDeviceSize size, bool hostVisible, const char* label, + VkBufferUsageFlags extra = 0); + void destroyBuffer(Buffer& buffer); + // Upload through a staging buffer and wait for completion. + void upload(const Buffer& target, const void* data, VkDeviceSize size, VkDeviceSize offset = 0); + void fillZero(const Buffer& target); + // Download via staging buffer and wait for completion. + std::vector download(const Buffer& source, VkDeviceSize size, VkDeviceSize offset = 0); + const Buffer& dummyBuffer() const { return dummy_; } + + // Pipelines ----------------------------------------------------------------- + VkShaderModule loadShaderModule(const std::string& spvPath); + Pipeline createComputePipeline(VkShaderModule module, const SpecConstants& constants, + const char* label, uint32_t requiredSubgroupSize = 32); + void destroyPipeline(Pipeline& pipeline); + // VK_KHR_pipeline_executable_properties: register/spill statistics (and SASS when available). + void setCaptureStatistics(bool enabled) { captureStatistics_ = enabled; } + std::string pipelineStatistics(const Pipeline& pipeline, bool includeInternal = false); + + // Descriptors: one generic layout with kGenericBindings storage buffers. + VkDescriptorSet allocateSet(const Buffer* const bindings[kGenericBindings], + const VkDeviceSize offsets[kGenericBindings] = nullptr, + const VkDeviceSize ranges[kGenericBindings] = nullptr); + void resetDescriptorPool(); // advance to the next pool and reset it + void resetDescriptorPool(uint32_t slot); // reset and use a specific pool (the caller's frame-in-flight slot) + + // Commands -------------------------------------------------------------------- + VkCommandBuffer beginCommands(); + void endAndSubmit(VkCommandBuffer commands, bool wait = true); + void waitIdle() { VK_CHECK(vkQueueWaitIdle(queue_)); } + void computeBarrier(VkCommandBuffer commands); // compute -> compute + // VK_NV_cuda_kernel_launch: PTX modules launched from the command buffer on buffer device addresses. + VkDeviceAddress deviceAddress(const Buffer& buffer) const; + VkCudaModuleNV createCudaModule(const std::string& ptx); + VkCudaFunctionNV createCudaFunction(VkCudaModuleNV module, const char* name); + void destroyCudaFunction(VkCudaFunctionNV function); + void destroyCudaModule(VkCudaModuleNV module); + void cudaLaunch(VkCommandBuffer commands, VkCudaFunctionNV function, uint32_t gridX, uint32_t gridY, uint32_t gridZ, + uint32_t blockX, uint32_t sharedBytes, const void* const* params, size_t paramCount); + void transferBarrier(VkCommandBuffer commands); // compute/transfer -> compute/transfer (captures, uploads) + + // Timestamps ----------------------------------------------------------------- + VkQueryPool createTimestampPool(uint32_t count); + std::vector readTimestampsMs(VkQueryPool pool, uint32_t count); + + uint32_t maxComputeSharedMemory() const { return maxSharedMemory_; } + + private: + uint32_t findMemoryType(uint32_t typeBits, VkMemoryPropertyFlags required); + VkInstance instance_ = VK_NULL_HANDLE; + VkDebugUtilsMessengerEXT messenger_ = VK_NULL_HANDLE; + bool validation_ = false; + VkPhysicalDevice physical_ = VK_NULL_HANDLE; + VkDevice device_ = VK_NULL_HANDLE; + VkQueue queue_ = VK_NULL_HANDLE; + uint32_t queueFamily_ = 0; + uint32_t queueIndex_ = 0; + VkCommandPool commandPool_ = VK_NULL_HANDLE; + VkDescriptorSetLayout setLayout_ = VK_NULL_HANDLE; + VkPipelineLayout pipelineLayout_ = VK_NULL_HANDLE; + VkDescriptorPool descriptorPool_ = VK_NULL_HANDLE; + std::array descriptorPools_{}; + size_t descriptorPoolIndex_ = 0; + VkPhysicalDeviceMemoryProperties memoryProperties_{}; + float timestampPeriod_ = 1.0f; + uint32_t maxSharedMemory_ = 0; + uint32_t smCount_ = 0; // streaming multiprocessors (co-residency bound of spinning grids) + bool captureStatistics_ = false; + bool owned_ = true; + std::string deviceName_; + void initCommon(); // properties, memory types, command pool, layouts, pools, staging + Buffer dummy_; + Buffer staging_; + std::vector modules_; +}; + +} // namespace vk From ca639de1fd2168a46b0142fcb9b5ffde3196588d Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 16:32:19 -0600 Subject: [PATCH 092/119] ci(windows): pin NVIDIA Streamline's headers to a commit, not a tag v2.14.16 is 625db07d4bca5abc67d781c42af7e7fb0761f1b6. A tag can be moved; a commit cannot, which is how the AMD SDK checkout is already pinned. Raised in review upstream (NotRexed/Hookshot#1335). Co-Authored-By: Claude Opus 5.5 --- .github/workflows/windows-builder.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/windows-builder.yml b/.github/workflows/windows-builder.yml index 4ed85767e..54242093d 100644 --- a/.github/workflows/windows-builder.yml +++ b/.github/workflows/windows-builder.yml @@ -212,7 +212,7 @@ jobs: uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: NVIDIA-RTX/Streamline - ref: v2.14.16 + ref: 625db07d4bca5abc67d781c42af7e7fb0761f1b6 # v2.14.16 path: streamline-sdk - name: hookshot_vk.dll env: From 778439998fe20a33606079c20adc6a4d7703b928 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 16:34:49 -0600 Subject: [PATCH 093/119] feat(vk): DLSS 5 neural rendering through NGX directly, beside Streamline A second backend for NVIDIA's DLSS-NR model: NGX feature 18 (NVSDK_NGX_Feature_Reserved18), created over the one NGX session DLSS super resolution owns, with no Streamline. It is fed what the Streamline path is fed (the finished frame, flat depth, no motion) and drives the feature with openNR's parameter set (MIT; names taken as facts, no code copied), through NGX's C parameter functions. - gpu/vk/vk_dlssnr_ngx.{h,cpp}: the backend, and nr::apply / nr::why, the dispatch between it and Streamline. Reads DLSSNR.Available and DLSSNR.FeatureInitResult from NGX's capabilities and logs them. On Linux, where NVIDIA ships no libnvidia-ngx-dlssnr.so, it says so and points at the Windows build under Proton; on Windows it explains a refusal as vk_streamline.cpp explain_refusal does (GPU generation, the nvngx_dlssnr.dll found, its signature, NGX's signature override, read only). - Neural tab: a Backend row (Auto / Streamline / NGX direct, saved as nr_backend; RX_VK_DLSS_NR_BACKEND over it). Auto is Streamline where it is attached, NGX direct otherwise. The switch is offered in any build with either SDK. - vk_main.cpp asks NGX for feature 18's device extensions. - vk_dlss.cpp: ngx_init's folder list is one function now, and dlss_ngx_runtime says where NGX looks for a feature's library. - tests/test_nr_settings_live.py covers the new row, its default, and the NGX backend's live reads. Co-Authored-By: Claude Opus 5.5 --- gpu/vk/vk_dlss.cpp | 48 ++- gpu/vk/vk_dlss.h | 6 + gpu/vk/vk_dlssnr_ngx.cpp | 639 +++++++++++++++++++++++++++++++++ gpu/vk/vk_dlssnr_ngx.h | 73 ++++ gpu/vk/vk_main.cpp | 17 + gpu/vk/vk_menu.cpp | 39 +- gpu/vk/vk_menu.h | 1 + gpu/vk/vk_replay.cpp | 3 +- nx2/build.py | 6 +- tests/test_nr_settings_live.py | 23 +- 10 files changed, 827 insertions(+), 28 deletions(-) create mode 100644 gpu/vk/vk_dlssnr_ngx.cpp create mode 100644 gpu/vk/vk_dlssnr_ngx.h diff --git a/gpu/vk/vk_dlss.cpp b/gpu/vk/vk_dlss.cpp index 17fb7a751..6e43dab2d 100644 --- a/gpu/vk/vk_dlss.cpp +++ b/gpu/vk/vk_dlss.cpp @@ -322,12 +322,10 @@ constexpr const char* kRuntime = "libnvidia-ngx-dlss.so"; constexpr const fs::path::value_type* kRuntimeName = "libnvidia-ngx-dlss.so"; #endif -/// NGX on this device, once: false when DLSS cannot run here (the reason logged) -bool ngx_init() { - State& s = st(); - if (s.ngx_tried) return s.ngx_ok; - s.ngx_tried = true; - // where DLSS's runtime (kRuntime) is looked for (NGX takes the newest it finds), and its own files go +/// Where NGX is told to look for its features' runtimes (kRuntime, and every other feature's: NGX takes the newest it finds +/// of each), in that order. (hookshot) One list, so that DLSS 5 neural rendering's NGX path (vk_dlssnr_ngx.cpp) names the +/// same folders in its log as NGX was given here +std::vector ngx_dirs() { std::vector dirs; #ifdef _WIN32 if (fs::path e = env_path(L"RX_VK_DLSS_DIR"); !e.empty()) dirs.push_back(e); @@ -339,6 +337,16 @@ bool ngx_init() { if (fs::path x = env_path("XDG_DATA_HOME"); !x.empty()) dirs.push_back(x / "hookshot" / "ngx"); else if (fs::path h = env_path("HOME"); !h.empty()) dirs.push_back(h / ".local" / "share" / "hookshot" / "ngx"); #endif + return dirs; +} + +/// NGX on this device, once: false when DLSS cannot run here (the reason logged) +bool ngx_init() { + State& s = st(); + if (s.ngx_tried) return s.ngx_ok; + s.ngx_tried = true; + // where DLSS's runtime (kRuntime) is looked for (NGX takes the newest it finds), and its own files go + const std::vector dirs = ngx_dirs(); std::vector wdirs; for (const auto& d : dirs) wdirs.push_back(wide(d)); std::vector paths; @@ -800,6 +808,29 @@ bool dlss_ngx_session() { return s.ngx_started; } +bool dlss_ngx_runtime(const char* name, std::string* where, std::string* found) { + if (where) where->clear(); + if (found) found->clear(); + bool have = false; + std::error_code ec; + // (and the game folder itself, after them: NGX looks there too, which its own log shows with RX_VK_DLSS_LOG=1, and + // it is where the DLSS SDK's runtimes are usually put) + std::vector dirs = ngx_dirs(); + dirs.push_back(game_dir()); + for (const fs::path& d : dirs) { + if (where) *where += (where->empty() ? "" : ", ") + shown(d); + if (have) continue; + for (const auto& f : fs::directory_iterator(d, ec)) { + const std::string file = shown(f.path().filename()); + if (file.rfind(name, 0) != 0) continue; + have = true; + if (found) *found = shown(f.path()); + break; + } + } + return have; +} + void dlss_probe() { if (dlss_why() != DLSS_OK || g_why.load(std::memory_order_relaxed) >= 0 || !dev.device) return; State& s = st(); @@ -1159,6 +1190,11 @@ bool dlss_upscale(VkCommandBuffer cmd, uint64_t key, bool known, Texture* in, Vk bool dlss_built() { return false; } bool dlss_ngx_session() { return false; } +bool dlss_ngx_runtime(const char*, std::string* where, std::string* found) { + if (where) where->clear(); + if (found) found->clear(); + return false; +} void dlss_probe() {} void dlss_instance_extensions(std::vector&, const std::vector&) {} void dlss_device_extensions(std::vector&, const std::vector&) {} diff --git a/gpu/vk/vk_dlss.h b/gpu/vk/vk_dlss.h index 528e2a667..15c7198f2 100644 --- a/gpu/vk/vk_dlss.h +++ b/gpu/vk/vk_dlss.h @@ -2,6 +2,7 @@ // SDK (HOOKSHOT_NGX, scripts/ngx_sdk.py: Linux and Windows); without it these say DLSS is not there and the game's network runs. #pragma once +#include #include #include "vk_internal.h" @@ -23,6 +24,11 @@ void dlss_probe(); /// NVSDK_NGX_VULKAN_Init_with_ProjectID beside this one is what it avoids. True even where super resolution itself is not /// available, since the session is. Starts it if dlss_probe has not yet (and RX_VK_DLSS is not 0) bool dlss_ngx_session(); +/// (hookshot) Whether a file whose name begins `name` ("nvngx_dlssnr.dll", "libnvidia-ngx-dlssnr.so") is in one of the folders +/// NGX is told to look for its features' runtimes in (ngx_init's: RX_VK_DLSS_DIR, the game folder's ngx, then +/// %LOCALAPPDATA%\Hookshot\ngx or $XDG_DATA_HOME/hookshot/ngx), or the game folder itself, which NGX also searches. `where` gets the folders, in UTF-8 for the log; `found` the +/// first such file's path. False and both empty in a build without DLSS +bool dlss_ngx_runtime(const char* name, std::string* where, std::string* found); /// What is asked for: 0 off, 1 DLSS (in place of the game's gameplay upscale, at any render share), 2 DLAA (anti-aliasing at the render size, the 3D at full scale): /// the Insert menu's Upscaler row (opts.dlss), or RX_VK_DLSS=0 / 1 / 2 over it. 0 when dlss_why() says it cannot run int dlss_mode(); diff --git a/gpu/vk/vk_dlssnr_ngx.cpp b/gpu/vk/vk_dlssnr_ngx.cpp new file mode 100644 index 000000000..70fcb642f --- /dev/null +++ b/gpu/vk/vk_dlssnr_ngx.cpp @@ -0,0 +1,639 @@ +// (hookshot) DLSS 5 neural rendering through NGX directly; gpu/vk/vk_dlssnr_ngx.h says why there are two paths and where +// the parameter names come from (openNR, MIT). Everything that touches NGX is inside HOOKSHOT_NGX; the stubs at the bottom +// of the first namespace are what a build without an NGX SDK compiles, and `nr::` dispatches either way. +#include "vk_dlssnr_ngx.h" + +#include +#include +#include +#include +#include + +#include "vk_dlssnr.h" +#include "vk_menu.h" +#include "vk_streamline.h" + +#if defined(HOOKSHOT_NGX) +#include "vk_dlss.h" // (dlss_ngx_session, dlss_ngx_runtime: the one NGX session and the folders it was given) +#include "vk_ngx.h" +#if defined(_WIN32) +#include +#if defined(RX_VK_STREAMLINE) +// (only where the Streamline build already links wintrust and crypt32: nx2/build.py streamline_link) +#include +#include +#include +#endif +#endif +#endif + +namespace mkwvk::dlssnr_ngx { +namespace { + +/// The same switch as the Streamline path's (dlssnr::asked), read live every call: the row the player just changed has to +/// reach the next frame (tests/test_nr_settings_live.py says why that matters here). +bool asked() { + if (const char* e = getenv("RX_VK_DLSS_NR")) return atoi(e) != 0; + return nr_settings().on; +} + +} // namespace + +#if defined(HOOKSHOT_NGX) + +namespace { + +constexpr NVSDK_NGX_Feature kFeature = NVSDK_NGX_Feature_Reserved18; +#if defined(_WIN32) +constexpr const char* kRuntime = "nvngx_dlssnr.dll"; +#else +constexpr const char* kRuntime = "libnvidia-ngx-dlssnr.so"; // (NGX's Linux name for a feature: libnvidia-ngx-.so*) +#endif + +// The capability keys. The public SDK defines none for this feature; these follow the naming every NGX feature's keys use +// (SuperSampling.Available, FrameGeneration.FeatureInitResult, ...), and the first two are the ones the Linux NGX core +// answers for. A key NGX does not set is reported as not answered, never guessed at. +constexpr const char* kAvailable = "DLSSNR.Available"; +constexpr const char* kInitResult = "DLSSNR.FeatureInitResult"; +constexpr const char* kNeedsDriver = "DLSSNR.NeedsUpdatedDriver"; +constexpr const char* kDriverMajor = "DLSSNR.MinDriverVersionMajor"; +constexpr const char* kDriverMinor = "DLSSNR.MinDriverVersionMinor"; + +// The working formats: eight bits a channel, as the Streamline path uses and as the window's image already is, so the two +// backends are handed the same picture; a flat float depth and two-channel float motion, as DLSS's own inputs are. +constexpr VkFormat kColorFormat = VK_FORMAT_R8G8B8A8_UNORM; +constexpr VkFormat kDepthFormat = VK_FORMAT_R32_SFLOAT; +constexpr VkFormat kMotionFormat = VK_FORMAT_R16G16_SFLOAT; +constexpr VkImageSubresourceRange kOneLevel{VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}; +/// Failures after which the path stays off for the run instead of trying again at every change of a row. +constexpr int kMaxFailures = 6; + +struct Image { + VkImage image{}; + VkImageView view{}; + VmaAllocation memory{}; +}; + +struct State { + bool probed{}, ok{}; + std::string why; + NVSDK_NGX_Parameter* params{}; + NVSDK_NGX_Handle* feature{}; + uint32_t feature_w{}, feature_h{}; + unsigned feature_preset{}, feature_quality{}; + Image in{}, out{}, depth{}, motion{}; + uint32_t width{}, height{}; + bool scene_cleared{}; + bool reset_next{true}; + // A setting NGX would not take is the player's to change: it is held against those exact settings and that size, so + // changing any row tries again, and after kMaxFailures the path is off for the run. + bool have_rejected{}; + NrSettings rejected{}; + uint32_t rejected_w{}, rejected_h{}; + int failures{}; + bool explained{}; + std::atomic failed{}; + bool told_running{}; +}; + +State& state() { + static State s; + return s; +} + +void drop(Image& t) { + if (t.view) vkDestroyImageView(dev.device, t.view, nullptr); + if (t.image) destroy_image(t.image, t.memory); + t = Image{}; +} + +bool make(Image& t, VkFormat format, uint32_t w, uint32_t h, VkImageUsageFlags usage) { + drop(t); + VkImageCreateInfo ci{VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO}; + ci.imageType = VK_IMAGE_TYPE_2D; + ci.format = format; + ci.extent = {w, h, 1}; + ci.mipLevels = 1; + ci.arrayLayers = 1; + ci.samples = VK_SAMPLE_COUNT_1_BIT; + ci.tiling = VK_IMAGE_TILING_OPTIMAL; + ci.usage = usage; + ci.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; + if (!create_image(ci, t.image, t.memory, false)) { + logf("vk: dlss-nr (ngx): a %ux%u image was not made", w, h); + return false; + } + VkImageViewCreateInfo vi{VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO}; + vi.image = t.image; + vi.viewType = VK_IMAGE_VIEW_TYPE_2D; + vi.format = format; + vi.subresourceRange = kOneLevel; + if (vkCreateImageView(dev.device, &vi, nullptr, &t.view) != VK_SUCCESS) { + logf("vk: dlss-nr (ngx): an image's view was not made"); + drop(t); + return false; + } + return true; +} + +void barrier(VkCommandBuffer cmd, VkImage image, VkImageLayout from, VkImageLayout to, VkAccessFlags2 src_access, + VkAccessFlags2 dst_access) { + VkImageMemoryBarrier2 b{VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2}; + b.srcStageMask = VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT; + b.dstStageMask = VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT; + b.srcAccessMask = src_access; + b.dstAccessMask = dst_access; + b.oldLayout = from; + b.newLayout = to; + b.srcQueueFamilyIndex = b.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + b.image = image; + b.subresourceRange = kOneLevel; + VkDependencyInfo di{VK_STRUCTURE_TYPE_DEPENDENCY_INFO}; + di.imageMemoryBarrierCount = 1; + di.pImageMemoryBarriers = &b; + vkCmdPipelineBarrier2(cmd, &di); +} + +/// The device idle, for freeing what a frame in flight may still use. Not a bare vkDeviceWaitIdle: vk_dlssnr.cpp's resize +/// says why (every queue externally synchronized; apply runs on the display thread before present_image takes the lock). +void idle() { + std::lock_guard qk(dev.present_mu); + device_wait_idle_locked(); +} + +// ---- the platform's half of why it was refused ---- + +#if defined(_WIN32) +/// The RTX generation from the device's name (vk_streamline.cpp's rule): 50, 40, 30, 20, or 0 when not recognized. +int rtx_series() { + VkPhysicalDeviceProperties p{}; + vkGetPhysicalDeviceProperties(dev.physical, &p); + const char* n = strstr(p.deviceName, "RTX "); + if (!n || n[4] < '0' || n[4] > '9' || n[5] < '0' || n[5] > '9') return 0; + const int series = (n[4] - '0') * 10; + return series >= 20 && series <= 50 ? series : 0; +} + +/// NVIDIA's NGX signature override as the player set it: read only, never written. -1 when it is not there. +int signature_override() { + DWORD value = 0, size = sizeof value; + if (RegGetValueW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\NVIDIA Corporation\\Global\\NGXCore", L"EnableSignatureOverride", + RRF_RT_REG_DWORD, nullptr, &value, &size) != ERROR_SUCCESS) + return -1; + return (int)value; +} + +/// 1 when Windows trusts the file's signature, 0 when it does not (a patched nvngx_dlssnr.dll has none), -1 where this +/// build cannot ask (no wintrust linked: a build without Streamline's headers). +int signed_file(const std::string& utf8) { +#if defined(RX_VK_STREAMLINE) + std::wstring path(utf8.size() + 1, L'\0'); + const int n = MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), (int)utf8.size(), path.data(), (int)path.size()); + path.resize(n > 0 ? n : 0); + WINTRUST_FILE_INFO file{}; + file.cbStruct = sizeof file; + file.pcwszFilePath = path.c_str(); + GUID action = WINTRUST_ACTION_GENERIC_VERIFY_V2; + WINTRUST_DATA data{}; + data.cbStruct = sizeof data; + data.dwUIChoice = WTD_UI_NONE; + data.fdwRevocationChecks = WTD_REVOKE_NONE; + data.dwUnionChoice = WTD_CHOICE_FILE; + data.pFile = &file; + data.dwStateAction = WTD_STATEACTION_VERIFY; + const LONG status = WinVerifyTrust(nullptr, &action, &data); + data.dwStateAction = WTD_STATEACTION_CLOSE; + WinVerifyTrust(nullptr, &action, &data); + return status == ERROR_SUCCESS ? 1 : 0; +#else + (void)utf8; + return -1; +#endif +} +#endif + +/// Why NGX said no (`result`: the feature's init result or CreateFeature's answer), in the log in full and for the menu in +/// short. Once: the first refusal is the one worth explaining. +void explain(State& s, unsigned result, bool needs_driver, unsigned major, unsigned minor) { + if (s.explained) return; + s.explained = true; + std::string where, found; + const bool have = dlss_ngx_runtime(kRuntime, &where, &found); + if (needs_driver) { + logf("vk: DLSS 5 neural rendering (NGX direct): NGX says this driver is too old (%u.%u or newer wanted)", major, + minor); + s.why = "Not available: NVIDIA's driver is too old for DLSS 5 neural rendering."; + return; + } +#if defined(_WIN32) + const int series = rtx_series(); + const int signature = have ? signed_file(found) : -1; + const int override_value = signature_override(); + logf("vk: DLSS 5 neural rendering (NGX direct) is not available here (NGX result %#x). GPU: %s; %s: %s; NGX signature " + "override: %s", + result, series ? (series == 50 ? "RTX 50" : series == 40 ? "RTX 40" : series == 30 ? "RTX 30" : "RTX 20") + : "not recognized as RTX 20 to 50", + kRuntime, + !have ? ("in none of " + where).c_str() + : (found + (signature == 1 ? " (NVIDIA's, signed)" : signature == 0 ? " (unsigned: a patched build)" : "")) + .c_str(), + override_value < 0 ? "not set" : override_value ? "on" : "off"); + if (!have) { + logf("vk: put nvngx_dlssnr.dll in the game folder's ngx folder, or in one of: %s (readme.md: DLSS 5 neural " + "rendering)", where.c_str()); + s.why = "Not available: no nvngx_dlssnr.dll in the game folder's ngx folder (readme)."; + } else if (series && series < 50 && signature != 0) { + logf("vk: NVIDIA's own nvngx_dlssnr.dll runs on RTX 50 only. On an RTX %d, a community build of it that adds " + "Turing, Ampere and Ada is needed instead, and NGX loads that unsigned file only with its signature override " + "on: HKLM\\SOFTWARE\\NVIDIA Corporation\\Global\\NGXCore, DWORD EnableSignatureOverride = 1 (readme.md). " + "Hookshot reads it and never sets it", series); + s.why = "Not available: NVIDIA's model is RTX 50 only. RTX 20-40: a patched nvngx_dlssnr.dll (readme)."; + } else if (signature == 0 && override_value <= 0) { + logf("vk: this nvngx_dlssnr.dll is unsigned, and NGX loads an unsigned one only with its signature override on: " + "HKLM\\SOFTWARE\\NVIDIA Corporation\\Global\\NGXCore, DWORD EnableSignatureOverride = 1 (readme.md). " + "Hookshot does not change it for you"); + s.why = "Not available: the patched nvngx_dlssnr.dll needs NGX's signature override (readme)."; + } else { + s.why = "Not available on this GPU or driver (the log says what NGX answered)."; + } +#else + if (!have) { + logf("vk: DLSS 5 neural rendering (NGX direct): NVIDIA has not shipped it for Linux yet. NGX knows the feature (NGX " + "result %#x), but there is no %s to load: the driver has none and NVIDIA's SDK ships none (looked in %s too). " + "On Linux, run the Windows build under Proton for it (readme.md). The day NVIDIA ships the library, putting " + "it in the game folder's ngx folder should be all this needs", + result, kRuntime, where.c_str()); + s.why = "Not on Linux yet: NVIDIA ships no Linux library for it. The Windows build under Proton has it."; + } else { + logf("vk: DLSS 5 neural rendering (NGX direct): NGX refused %s (NGX result %#x)", found.c_str(), result); + s.why = "Not available: NGX refused libnvidia-ngx-dlssnr.so (the log says why)."; + } +#endif +} + +/// Asks NGX once, after the device exists, whether the feature is here. False until then, without asking. +bool probe(State& s) { + if (s.probed) return s.ok; + if (!dev.device) return false; + s.probed = true; + if (dlss_why() == DLSS_ENV_OFF) { + logf("vk: DLSS 5 neural rendering (NGX direct): NGX is off for this run (RX_VK_DLSS=0)"); + s.why = "Not available: NGX is off for this run (RX_VK_DLSS=0)."; + return false; + } + if (!dlss_ngx_session()) { + logf("vk: DLSS 5 neural rendering (NGX direct): no NGX session on this device (the NVIDIA DLSS lines say why)"); + s.why = "Not available: NGX did not start on this GPU (NVIDIA RTX only)."; + return false; + } + NVSDK_NGX_Parameter* caps = nullptr; + if (NVSDK_NGX_FAILED(NVSDK_NGX_VULKAN_GetCapabilityParameters(&caps)) || !caps) { + logf("vk: DLSS 5 neural rendering (NGX direct): NGX gave no capability parameters"); + s.why = "Not available: NGX gave no capabilities on this GPU."; + return false; + } + // (NGX's C functions, not NVSDK_NGX_Parameter's virtual ones: vk_dlss.cpp ngx_init says why) + int available = 0, init = 0, needs_driver = 0; + unsigned major = 0, minor = 0; + const bool available_known = NVSDK_NGX_SUCCEED(NVSDK_NGX_Parameter_GetI(caps, kAvailable, &available)); + const bool init_known = NVSDK_NGX_SUCCEED(NVSDK_NGX_Parameter_GetI(caps, kInitResult, &init)); + const bool driver_known = NVSDK_NGX_SUCCEED(NVSDK_NGX_Parameter_GetI(caps, kNeedsDriver, &needs_driver)); + NVSDK_NGX_Parameter_GetUI(caps, kDriverMajor, &major); + NVSDK_NGX_Parameter_GetUI(caps, kDriverMinor, &minor); + NVSDK_NGX_VULKAN_DestroyParameters(caps); + char a[16], r[16]; + snprintf(a, sizeof a, "%d", available); + snprintf(r, sizeof r, "%#x", (unsigned)init); + logf("vk: DLSS 5 neural rendering (NGX direct): NGX answers %s = %s, %s = %s%s", kAvailable, + available_known ? a : "(not answered)", kInitResult, init_known ? r : "(not answered)", + driver_known && needs_driver ? ", and says the driver is too old" : ""); + if (available_known && available) { + logf("vk: DLSS 5 neural rendering (NGX direct) is available on this device"); + s.ok = true; + return true; + } + if (!available_known) { + // A core that does not answer for the feature at all may still create it (openNR's benchmark never asks): the + // creation's own answer is then the one explained. + logf("vk: DLSS 5 neural rendering (NGX direct): NGX does not answer for the feature; it is tried at the first " + "frame and its answer is what counts"); + s.ok = true; + return true; + } + explain(s, init_known ? (unsigned)init : 0u, driver_known && needs_driver, major, minor); + return false; +} + +/// NGX asks the feature's caller for the ratio of output to input through this; it is always 1 here, the uplift being +/// at the size it is shown (openNR answers the same). +NVSDK_NGX_Result NVSDK_CONV compute_scaling_ratio(NVSDK_NGX_Parameter* params) { + if (!params) return NVSDK_NGX_Result_FAIL_InvalidParameter; + NVSDK_NGX_Parameter_SetF(params, "DLSSNR.ScalingRatio", 1.0f); + return NVSDK_NGX_Result_Success; +} + +/// The sizes, at creation and again at every evaluation (openNR sets both): input and output are one size here. +void set_sizes(NVSDK_NGX_Parameter* p, uint32_t w, uint32_t h) { + NVSDK_NGX_Parameter_SetUI(p, NVSDK_NGX_Parameter_Width, w); + NVSDK_NGX_Parameter_SetUI(p, NVSDK_NGX_Parameter_Height, h); + NVSDK_NGX_Parameter_SetUI(p, NVSDK_NGX_Parameter_OutWidth, w); + NVSDK_NGX_Parameter_SetUI(p, NVSDK_NGX_Parameter_OutHeight, h); + NVSDK_NGX_Parameter_SetUI(p, "DLSSNR.Width", w); + NVSDK_NGX_Parameter_SetUI(p, "DLSSNR.Height", h); + NVSDK_NGX_Parameter_SetUI(p, "DLSSNR.InputWidth", w); + NVSDK_NGX_Parameter_SetUI(p, "DLSSNR.InputHeight", h); + NVSDK_NGX_Parameter_SetUI(p, "DLSSNR.OutputWidth", w); + NVSDK_NGX_Parameter_SetUI(p, "DLSSNR.OutputHeight", h); + NVSDK_NGX_Parameter_SetUI(p, "DLSSNR.Output.Width", w); + NVSDK_NGX_Parameter_SetUI(p, "DLSSNR.Output.Height", h); +} + +void set_subrect(NVSDK_NGX_Parameter* p, const char* which, uint32_t w, uint32_t h) { + // ("DLSSNR.ColorSubrectBaseX" and its siblings, for each of the four images) + const struct { + const char* field; + uint32_t value; + } fields[] = {{"BaseX", 0u}, {"BaseY", 0u}, {"Width", w}, {"Height", h}}; + for (const auto& f : fields) { + char key[64]; + snprintf(key, sizeof key, "DLSSNR.%sSubrect%s", which, f.field); + NVSDK_NGX_Parameter_SetUI(p, key, f.value); + } +} + +/// Holds a refusal against these settings and this size, and turns the path off after too many. +void refused(State& s, const NrSettings& want, uint32_t w, uint32_t h) { + s.have_rejected = true; + s.rejected = want; + s.rejected_w = w, s.rejected_h = h; + if (++s.failures >= kMaxFailures) { + logf("vk: DLSS 5 neural rendering (NGX direct): refused %d times, off for this run", s.failures); + s.failed.store(true, std::memory_order_relaxed); + } +} + +void release_feature(State& s) { + if (!s.feature) return; + idle(); + ngx::release_feature(s.feature); + s.feature = nullptr; +} + +/// The feature, made for this size, preset and quality: those are creation parameters, so a change of any of them makes +/// it again. Creation records into `cmd`. +bool ensure_feature(State& s, VkCommandBuffer cmd, const NrSettings& want, uint32_t w, uint32_t h) { + if (s.feature && s.feature_w == w && s.feature_h == h && s.feature_preset == want.preset && + s.feature_quality == want.quality) + return true; + release_feature(s); + if (!s.params) s.params = ngx::allocate_params(); + if (!s.params) { + s.failed.store(true, std::memory_order_relaxed); + return false; + } + NVSDK_NGX_Parameter* p = s.params; + NVSDK_NGX_Parameter_SetUI(p, NVSDK_NGX_Parameter_CreationNodeMask, 1u); + NVSDK_NGX_Parameter_SetUI(p, NVSDK_NGX_Parameter_VisibilityNodeMask, 1u); + set_sizes(p, w, h); + // 0 is the model's default; 1 to 7 pin presets A to G (docs/neural-rendering.md: a default of 1 silently pins A). + NVSDK_NGX_Parameter_SetUI(p, "DLSSNR.Hint.Render.Preset", want.preset); + // The quality is an sl::DLSSMode (1 performance, 2 balanced, 3 quality, 6 DLAA); NGX's PerfQualityValue is that less + // one (NVSDK_NGX_PerfQuality_Value_MaxPerf 0 ... _DLAA 5), as openNR sends it. + NVSDK_NGX_Parameter_SetI(p, NVSDK_NGX_Parameter_PerfQualityValue, (int)want.quality - 1); + NVSDK_NGX_Parameter_SetVoidPointer(p, "DLSSNRComputeScalingRatioCallback", (void*)&compute_scaling_ratio); + NVSDK_NGX_Parameter_SetF(p, "DLSSNR.ScalingRatio", 1.0f); + NVSDK_NGX_Parameter_SetF(p, "DLSSNR.Scale", 1.0f); + NVSDK_NGX_Parameter_SetI(p, "DLSSNR.Upscaling", 0); + NVSDK_NGX_Handle* handle = nullptr; + const NVSDK_NGX_Result res = ngx::create_feature(cmd, kFeature, p, &handle); + if (NVSDK_NGX_FAILED(res) || !handle) { + logf("vk: DLSS 5 neural rendering (NGX direct): CreateFeature(18) refused %ux%u, preset %u, quality %u (%#x)", w, + h, want.preset, want.quality, (unsigned)res); + if (res == NVSDK_NGX_Result_FAIL_PlatformError) + logf("vk: FAIL_PlatformError: usually a device made without the feature's extensions (the \"dlss-nr wants\" " + "lines at start-up), or a model file this GPU cannot run"); + explain(s, (unsigned)res, false, 0, 0); + if (handle) ngx::release_feature(handle); + refused(s, want, w, h); + return false; + } + s.feature = handle; + s.feature_w = w, s.feature_h = h; + s.feature_preset = want.preset, s.feature_quality = want.quality; + s.reset_next = true; + s.why.clear(); + logf("vk: DLSS 5 neural rendering (NGX direct): feature ready, %ux%u, preset %u, quality %u", w, h, want.preset, + want.quality); + return true; +} + +bool resize(State& s, uint32_t w, uint32_t h) { + idle(); + constexpr VkImageUsageFlags color = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_STORAGE_BIT | + VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT; + constexpr VkImageUsageFlags scene = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT; + if (!make(s.in, kColorFormat, w, h, color) || !make(s.out, kColorFormat, w, h, color) || + !make(s.depth, kDepthFormat, w, h, scene) || !make(s.motion, kMotionFormat, w, h, scene)) { + drop(s.in), drop(s.out), drop(s.depth), drop(s.motion); + return false; + } + s.width = w, s.height = h, s.scene_cleared = false; + return true; +} + +/// Depth and motion, once per size: one flat depth at mid-scene and no motion (vk_dlssnr.cpp clear_scene says why), left +/// in GENERAL as NGX takes every image. +void clear_scene(VkCommandBuffer cmd, State& s) { + for (VkImage i : {s.depth.image, s.motion.image}) + barrier(cmd, i, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 0, VK_ACCESS_2_TRANSFER_WRITE_BIT); + VkClearColorValue flat{}; + flat.float32[0] = 0.5f; + vkCmdClearColorImage(cmd, s.depth.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &flat, 1, &kOneLevel); + const VkClearColorValue none{}; + vkCmdClearColorImage(cmd, s.motion.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &none, 1, &kOneLevel); + for (VkImage i : {s.depth.image, s.motion.image}) + barrier(cmd, i, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_GENERAL, VK_ACCESS_2_TRANSFER_WRITE_BIT, + VK_ACCESS_2_SHADER_READ_BIT); +} + +} // namespace + +bool built_with_sdk() { return true; } + +bool capable() { + State& s = state(); + return probe(s) && !s.failed.load(std::memory_order_relaxed); +} + +const char* why() { + State& s = state(); + (void)probe(s); // (the menu asks before any frame has: the answer is NGX's either way, and asked once) + return s.why.c_str(); +} + +size_t device_extensions(VkInstance instance, VkPhysicalDevice gpu, const char** out, size_t max) { + // Asked whatever the switch says: the device is made before a player can turn the row on, and a device without these + // could never run the feature this session. RX_VK_DLSS_NR=0 (or RX_VK_DLSS=0, which leaves NGX off) asks nothing. + if (const char* e = getenv("RX_VK_DLSS_NR"); e && atoi(e) == 0) return 0; + if (const char* e = getenv("RX_VK_DLSS"); e && *e && atoi(e) == 0) return 0; + return ngx::device_extensions(instance, gpu, kFeature, out, max); +} + +VkImage apply(VkCommandBuffer cmd, VkImage src, uint32_t sw, uint32_t sh, VkImageView* out_view) { + State& s = state(); + if (!src || !sw || !sh || !asked()) return VK_NULL_HANDLE; + if (s.failed.load(std::memory_order_relaxed) || !probe(s)) return VK_NULL_HANDLE; + const NrSettings want = nr_settings(); + if (s.have_rejected && s.rejected == want && s.rejected_w == sw && s.rejected_h == sh) return VK_NULL_HANDLE; + + if ((!s.out.image || s.width != sw || s.height != sh) && !resize(s, sw, sh)) { + s.failed.store(true, std::memory_order_relaxed); + return VK_NULL_HANDLE; + } + if (!s.scene_cleared) { + clear_scene(cmd, s); + s.scene_cleared = true; + } + if (!ensure_feature(s, cmd, want, sw, sh)) return VK_NULL_HANDLE; + + // The window's image into ours, read in place (GENERAL is a layout a blit may read from): the game's is only read. + barrier(cmd, src, VK_IMAGE_LAYOUT_GENERAL, VK_IMAGE_LAYOUT_GENERAL, + VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_2_SHADER_WRITE_BIT | VK_ACCESS_2_TRANSFER_WRITE_BIT, + VK_ACCESS_2_TRANSFER_READ_BIT); + barrier(cmd, s.in.image, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 0, + VK_ACCESS_2_TRANSFER_WRITE_BIT); + VkImageBlit b{}; + b.srcSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}; + b.dstSubresource = b.srcSubresource; + b.srcOffsets[1] = {(int32_t)sw, (int32_t)sh, 1}; + b.dstOffsets[1] = b.srcOffsets[1]; + vkCmdBlitImage(cmd, src, VK_IMAGE_LAYOUT_GENERAL, s.in.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &b, + VK_FILTER_NEAREST); + barrier(cmd, s.in.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_GENERAL, VK_ACCESS_2_TRANSFER_WRITE_BIT, + VK_ACCESS_2_SHADER_READ_BIT); + barrier(cmd, s.out.image, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL, 0, + VK_ACCESS_2_SHADER_WRITE_BIT | VK_ACCESS_2_SHADER_READ_BIT); + + // The evaluation's parameters: openNR's set, by name (vk_dlssnr_ngx.h). The resources must outlive the call, which + // these do; the UI pair is set to null rather than left from before, a parameter block being reused. + NVSDK_NGX_Parameter* p = s.params; + NVSDK_NGX_Resource_VK color = ngx::resource(s.in.view, s.in.image, kColorFormat, sw, sh, false); + NVSDK_NGX_Resource_VK output = ngx::resource(s.out.view, s.out.image, kColorFormat, sw, sh, true); + NVSDK_NGX_Resource_VK motion = ngx::resource(s.motion.view, s.motion.image, kMotionFormat, sw, sh, false); + NVSDK_NGX_Resource_VK depth = ngx::resource(s.depth.view, s.depth.image, kDepthFormat, sw, sh, false); + set_sizes(p, sw, sh); + NVSDK_NGX_Parameter_SetVoidPointer(p, "DLSSNR.Color", &color); + NVSDK_NGX_Parameter_SetVoidPointer(p, "DLSSNR.Output", &output); + NVSDK_NGX_Parameter_SetVoidPointer(p, "DLSSNR.MVec", &motion); + NVSDK_NGX_Parameter_SetVoidPointer(p, "DLSSNR.Depth", &depth); + NVSDK_NGX_Parameter_SetVoidPointer(p, "DLSSNR.UI", nullptr); + NVSDK_NGX_Parameter_SetVoidPointer(p, "DLSSNR.UIAlpha", nullptr); + for (const char* which : {"Color", "Output", "MVec", "Depth"}) set_subrect(p, which, sw, sh); + // No camera: an identity one with no jitter and no motion is the honest description of a finished frame + // (vk_dlssnr.cpp scene_constants). + NVSDK_NGX_Parameter_SetF(p, NVSDK_NGX_Parameter_Jitter_Offset_X, 0.0f); + NVSDK_NGX_Parameter_SetF(p, NVSDK_NGX_Parameter_Jitter_Offset_Y, 0.0f); + NVSDK_NGX_Parameter_SetF(p, "DLSSNR.JitterOffsetX", 0.0f); + NVSDK_NGX_Parameter_SetF(p, "DLSSNR.JitterOffsetY", 0.0f); + NVSDK_NGX_Parameter_SetF(p, "DLSSNR.MVecScaleX", 1.0f); + NVSDK_NGX_Parameter_SetF(p, "DLSSNR.MVecScaleY", 1.0f); + NVSDK_NGX_Parameter_SetI(p, "DLSSNR.DepthInverted", 0); + NVSDK_NGX_Parameter_SetI(p, "DLSSNR.Enabled", 1); + NVSDK_NGX_Parameter_SetI(p, "DLSSNR.Reset", s.reset_next ? 1 : 0); + NVSDK_NGX_Parameter_SetF(p, "DLSSNR.Intensity", want.intensity); + NVSDK_NGX_Parameter_SetF(p, "DLSSNR.LocalToneStrength", want.local_tone); + NVSDK_NGX_Parameter_SetF(p, "DLSSNR.LocalStructureStrength", want.local_structure); + NVSDK_NGX_Parameter_SetF(p, "DLSSNR.GlobalToneStrength", want.global_tone); + NVSDK_NGX_Parameter_SetI(p, "DLSSNR.UseAutoMask", want.auto_mask ? 1 : 0); + NVSDK_NGX_Parameter_SetF(p, "DLSSNR.SkinStructureStrength", want.skin); + NVSDK_NGX_Parameter_SetUI(p, "DLSSNR.Style", want.style); + NVSDK_NGX_Parameter_SetI(p, "DLSSNR.UICorrection", 0); // (no UI layer handed over: there is none to correct) + NVSDK_NGX_Parameter_SetI(p, "DLSS.Indicator.Invert.X.Axis", 0); + NVSDK_NGX_Parameter_SetI(p, "DLSS.Indicator.Invert.Y.Axis", 0); + const NVSDK_NGX_Result res = ngx::evaluate_feature(cmd, s.feature, p); + if (NVSDK_NGX_FAILED(res)) { + logf("vk: DLSS 5 neural rendering (NGX direct): the evaluation was refused (%#x); waiting for a setting to change", + (unsigned)res); + refused(s, want, sw, sh); + return VK_NULL_HANDLE; + } + s.reset_next = false; + if (!s.told_running) { + s.told_running = true; + logf("vk: DLSS 5 neural rendering (NGX direct) runs over %ux%u frames", sw, sh); + } + barrier(cmd, s.out.image, VK_IMAGE_LAYOUT_GENERAL, VK_IMAGE_LAYOUT_GENERAL, VK_ACCESS_2_SHADER_WRITE_BIT, + VK_ACCESS_2_TRANSFER_READ_BIT | VK_ACCESS_2_SHADER_READ_BIT); + if (out_view) *out_view = s.out.view; + return s.out.image; +} + +void shutdown() { + State& s = state(); + release_feature(s); + ngx::destroy_params(s.params); + s.params = nullptr; + if (s.in.image || s.out.image) idle(); + drop(s.in), drop(s.out), drop(s.depth), drop(s.motion); + s.width = s.height = 0; + s.scene_cleared = false; +} + +#else // no NGX SDK + +bool built_with_sdk() { return false; } +bool capable() { return false; } +const char* why() { return ""; } +size_t device_extensions(VkInstance, VkPhysicalDevice, const char**, size_t) { return 0; } +VkImage apply(VkCommandBuffer, VkImage, uint32_t, uint32_t, VkImageView*) { + (void)asked; + return VK_NULL_HANDLE; +} +void shutdown() {} + +#endif + +} // namespace mkwvk::dlssnr_ngx + +namespace mkwvk::nr { + +bool built() { return dlssnr::built_with_sdk() || dlssnr_ngx::built_with_sdk(); } + +int asked_backend() { + // Live, every call, like the switch: the row changes the next frame. + if (const char* e = getenv("RX_VK_DLSS_NR_BACKEND"); e && *e) { + if (!strcmp(e, "streamline") || !strcmp(e, "1")) return STREAMLINE; + if (!strcmp(e, "ngx") || !strcmp(e, "2")) return NGX; + return AUTO; + } + return opts.nr_backend == STREAMLINE || opts.nr_backend == NGX ? opts.nr_backend : AUTO; +} + +int running_backend() { + const int b = asked_backend(); + if (b != AUTO) return b; + if (streamline::nr_available()) return STREAMLINE; + return dlssnr_ngx::built_with_sdk() ? NGX : STREAMLINE; +} + +VkImage apply(VkCommandBuffer cmd, VkImage src, uint32_t sw, uint32_t sh, VkImageView* out_view) { + static int told = -1; + const int b = running_backend(); + if (b != told && nr_settings().on) { + told = b; + logf("vk: DLSS 5 neural rendering through %s (Backend: %s)", b == NGX ? "NGX directly" : "Streamline", + asked_backend() == AUTO ? "Auto" : b == NGX ? "NGX direct" : "Streamline"); + } + return b == NGX ? dlssnr_ngx::apply(cmd, src, sw, sh, out_view) : dlssnr::apply(cmd, src, sw, sh, out_view); +} + +const char* why() { + if (running_backend() == NGX) { + if (!dlssnr_ngx::built_with_sdk()) return "Not available: this build has no NGX SDK, so no NGX direct (readme)."; + return dlssnr_ngx::why(); + } + if (!dlssnr::built_with_sdk()) return "Not available: Streamline is not in this build (Windows only). Try Auto."; + return streamline::nr_why(); +} + +} // namespace mkwvk::nr diff --git a/gpu/vk/vk_dlssnr_ngx.h b/gpu/vk/vk_dlssnr_ngx.h new file mode 100644 index 000000000..ed31249eb --- /dev/null +++ b/gpu/vk/vk_dlssnr_ngx.h @@ -0,0 +1,73 @@ +// (hookshot) DLSS 5 neural rendering through NGX directly: the same model as gpu/vk/vk_dlssnr.h, without Streamline. +// +// NGX knows the feature as NVSDK_NGX_Feature_Reserved18. The public SDK names nothing else about it -- no capability keys, +// no parameters -- so the parameter set below is the one openNR (https://github.com/clshortfuse/openNR, MIT, Copyright +// 2026 Carlos Lopez) drives it with in its native benchmark: the names are facts about the feature, written out here; none +// of openNR's code is copied. Nothing of NVIDIA's is in this repository, and nothing here reads or patches NVIDIA's files. +// +// Why a second path to the same model: +// - Windows without Streamline. sl.dlss_nr's own checks may refuse an RTX 20, 30 or 40 even where the model itself (a +// community-patched nvngx_dlssnr.dll) would run on it; through NGX, the only gate is the one inside that file. +// - Linux. Streamline is Windows-only, but NGX is not: the Linux NGX core loads features as libnvidia-ngx-.so* and +// already answers for DLSS-NR's capability keys. What is missing, as of SDK 310.9.16 and driver 615, is NVIDIA's +// libnvidia-ngx-dlssnr.so itself. Until it ships this path says so plainly; the day it does, it should simply run. +// +// It shares the one NGX session DLSS super resolution owns (dlss_ngx_session, gpu/vk/vk_dlss.h; gpu/vk/vk_ngx.h says why +// there is one), and it is fed exactly what the Streamline path is fed: the finished frame, a flat depth, no motion. +// +// `nr::` below is which of the two runs: the Insert menu's Neural tab "Backend" row (opts.nr_backend: Auto, Streamline, NGX +// direct), or RX_VK_DLSS_NR_BACKEND=auto|streamline|ngx over it. Auto takes Streamline where it is attached and NGX direct +// otherwise, which on Linux is always. +#pragma once + +#include +#include + +#include "vk_internal.h" + +namespace mkwvk::dlssnr_ngx { + +/// Whether this build has an NGX SDK (HOOKSHOT_NGX) to compile this path against. +[[nodiscard]] bool built_with_sdk(); + +/// Whether NGX reports the feature on this GPU and driver. Asked of NGX once, after the device exists; the answer and why +/// are logged once. +[[nodiscard]] bool capable(); + +/// Why it cannot run, in a line the menu can show: "" while it can, or before it has been asked. +[[nodiscard]] const char* why(); + +/// The device extensions NGX says feature 18 needs here, asked before the device exists (a device made without a +/// feature's extensions is where CreateFeature answers FAIL_PlatformError). How many names were written, at most `max`; +/// zero in a build without NGX, with RX_VK_DLSS_NR=0, or where NGX does not answer. +size_t device_extensions(VkInstance instance, VkPhysicalDevice gpu, const char** out, size_t max); + +/// As dlssnr::apply: one uplift of `src` (GENERAL, sw x sh), recorded into `cmd`, and the image to present in its place +/// (GENERAL, the same size, this path's own) with its view in `out_view`; VK_NULL_HANDLE when the model did not run, and +/// the caller presents `src` as it would have. +[[nodiscard]] VkImage apply(VkCommandBuffer cmd, VkImage src, uint32_t sw, uint32_t sh, VkImageView* out_view); + +/// Releases the feature and its images. Before the device goes. +void shutdown(); + +} // namespace mkwvk::dlssnr_ngx + +namespace mkwvk::nr { + +enum Backend : int { AUTO = 0, STREAMLINE = 1, NGX = 2 }; + +/// Whether this build can offer neural rendering at all: Streamline's headers (Windows) or an NGX SDK. +[[nodiscard]] bool built(); + +/// The backend asked for (the row, or RX_VK_DLSS_NR_BACKEND over it), and the one that runs for it: STREAMLINE or NGX. +/// Auto is Streamline when Streamline is attached with the feature, NGX direct otherwise. +[[nodiscard]] int asked_backend(); +[[nodiscard]] int running_backend(); + +/// The present's one call: the running backend's apply. +[[nodiscard]] VkImage apply(VkCommandBuffer cmd, VkImage src, uint32_t sw, uint32_t sh, VkImageView* out_view); + +/// Why the running backend cannot run, for the menu: "" while it can or is not known yet. +[[nodiscard]] const char* why(); + +} // namespace mkwvk::nr diff --git a/gpu/vk/vk_main.cpp b/gpu/vk/vk_main.cpp index 81c87cb10..9c4012827 100644 --- a/gpu/vk/vk_main.cpp +++ b/gpu/vk/vk_main.cpp @@ -9,6 +9,7 @@ #include "vk_dlss.h" // (the device extensions DLSS needs, asked of NGX before the device is made) #include "vk_dlssg.h" // (frame generation asks for its own set, which is not the same one) +#include "vk_dlssnr_ngx.h" // (and DLSS 5 neural rendering through NGX for its own) #include #include #include @@ -297,6 +298,22 @@ bool create_device() { } } + // (hookshot) DLSS 5 neural rendering through NGX directly (vk_dlssnr_ngx.h) asks NGX for feature 18's set, for the same + // reason and with the same handling as frame generation's above. + { + const char* nr_want[16] = {}; + const size_t nr_n = dlssnr_ngx::device_extensions(dev.instance, dev.physical, nr_want, sizeof nr_want / sizeof *nr_want); + for (size_t i = 0; i < nr_n; i++) { + if (!has_extension(exts, nr_want[i])) { + logf("vk: dlss-nr wants %s, which this GPU does not have: NGX direct will be unavailable", nr_want[i]); + continue; + } + bool already = false; + for (const char* have : want) already = already || strcmp(have, nr_want[i]) == 0; + if (!already) want.push_back(nr_want[i]), logf("vk: dlss-nr wants %s: enabled", nr_want[i]); + } + } + // (hookshot) And what Streamline's neural rendering plugin needs, asked of Streamline for the // same reason: the set is the plugin's to state. Same handling as the NGX features above -- an // extension this GPU does not have is named in the log and left out, and the feature then diff --git a/gpu/vk/vk_menu.cpp b/gpu/vk/vk_menu.cpp index 28c9bcfa6..595b9d1f2 100644 --- a/gpu/vk/vk_menu.cpp +++ b/gpu/vk/vk_menu.cpp @@ -32,6 +32,7 @@ #include "vk_dlssnr.h" // (whether this build can offer DLSS 5 neural rendering at all) #include "vk_streamline.h" // (nr_why: why neural rendering is not available here) +#include "vk_dlssnr_ngx.h" // (nr::why, nr::built: whichever backend the Backend row runs) #include "vk_fsr3.h" // (the Upscaler row: whether FSR 3.1 runs on this device) #include "vk_ffx.h" // (and FSR 4, AMD's runtime) #include "vk_work.h" // (after the others: counts the commands that do GPU work, for full_barrier) @@ -133,6 +134,18 @@ const char* tx_nr_style(int v) { static const char* t[] = {"Default", "Natural", "Cinematic"}; return t[std::min(std::max(v, 0), 2)]; } +// (hookshot) Which path NVIDIA's model is reached by (vk_dlssnr_ngx.h): the same model and the same rows either way. +const char* tx_nr_backend(int v) { + static const char* t[] = {"Auto", "Streamline", "NGX direct"}; + return t[std::min(std::max(v, 0), 2)]; +} +const char* hn_nr_backend(int v, int variant) { + static char b[96]; + if (variant >= 0) return variant == 0 ? "Auto: running through NGX directly." : nullptr; // (the longest) + if (v != nr::AUTO) return nullptr; + snprintf(b, sizeof b, "Auto: running through %s.", nr::running_backend() == nr::NGX ? "NGX directly" : "Streamline"); + return b; +} const char* tx_nr_preset(int v) { static char b[16]; if (v <= 0) return "Default"; @@ -243,7 +256,7 @@ const char* hn_nr(int v, int variant) { static const char* const longest = "Not available: NVIDIA's model is RTX 50 only. RTX 20-40: a patched nvngx_dlssnr.dll (readme)."; if (variant < 0) { - const char* w = streamline::nr_why(); + const char* w = nr::why(); return *w ? w : t[std::clamp(v, 0, 1)]; } return variant == 0 ? t[std::clamp(v, 0, 1)] : variant == 1 ? longest : nullptr; @@ -591,13 +604,17 @@ Row rows[] = { {TAB_GAMEPLAY, "Cheats", nullptr, 0, 0, 0, nullptr, "Open the private gameplay tools."}, - // Neural rendering (10 rows). Every row here takes effect on the next frame: the backend reads + // Neural rendering (11 rows). Every row here takes effect on the next frame: the backend reads // them live rather than caching them at start-up, which is the bug that made the upscaling rows // look dead for a whole release (docs/upscaling.md). {TAB_NEURAL, "Neural rendering", &opts.nr, 0, 1, 1, tx_onoff, "DLSS 5 neural rendering: NVIDIA's model goes over the finished frame and rebuilds detail, tone and structure in it. " - "Needs an NVIDIA RTX card and NVIDIA's Streamline files beside the game (readme.md); the rows below are the model's own " + "Needs an NVIDIA RTX card and NVIDIA's model file (readme.md; Backend says how it is reached); the rows below are the model's own " "settings and do nothing while this is Off.", hn_nr}, + {TAB_NEURAL, "Backend", &opts.nr_backend, 0, 2, 1, tx_nr_backend, + "How the game reaches NVIDIA's model. Auto uses Streamline where its files are beside the game and it accepts this " + "GPU, and NGX directly otherwise -- always, on Linux. NGX direct needs nvngx_dlssnr.dll in the game folder's ngx " + "folder (readme.md). The rows below apply to whichever runs.", hn_nr_backend}, {TAB_NEURAL, "Model", &opts.nr_model, 0, 3, 1, tx_nr_model, "How much work the model does per frame: Performance is the cheapest, DLAA the most expensive, Quality the model's " "own default. Streamline 2.14's plugin ignores this one -- it is sent correctly and a later NVIDIA release is " @@ -832,6 +849,7 @@ const char* ini_key(const Row& r) { if (r.value == &opts.resolution) return "resolution"; if (r.value == &opts.upscale) return "upscaling"; if (r.value == &opts.dlss) return "dlss"; // (as opts.dlss and RX_VK_DLSS) + if (r.value == &opts.nr_backend) return "nr_backend"; // (hookshot: "backend" alone says nothing in the file) static char k[32]; size_t n = 0; for (const char* p = r.name; *p && n + 1 < sizeof k; p++) k[n++] = *p == ' ' ? '_' : (char)tolower(*p); @@ -1694,17 +1712,16 @@ void menu_init() { if (done) return; done = true; for (auto& count : item_counts) count.store(-1, std::memory_order_relaxed); - // (hookshot) DLSS 5 neural rendering: its ten rows are the model's own and none of them can - // do anything in a build with no Streamline headers, or on Linux, where Streamline has no - // plugins to load. The switch is left in place and says why, because a missing tab is a bug - // report and a tab that explains itself is not. - if (!dlssnr::built_with_sdk()) + // (hookshot) DLSS 5 neural rendering: its rows are the model's own and none of them can do + // anything in a build with neither Streamline's headers (Windows) nor an NGX SDK (either + // platform: vk_dlssnr_ngx.h). The switch is left in place and says why, because a missing tab + // is a bug report and a tab that explains itself is not. + if (!nr::built()) for (Row& r : rows) if (r.value == &opts.nr) { r.hi = 0; - r.help = "DLSS 5 neural rendering is not offered by this build. It needs NVIDIA Streamline, which is " - "Windows-only: on Linux, run the Windows build under Proton. A Windows build made without " - "Streamline's headers says this too (readme.md says how to build with them)."; + r.help = "DLSS 5 neural rendering is not offered by this build. It needs NVIDIA's NGX SDK, or on " + "Windows NVIDIA Streamline's headers, at build time (readme.md says how to build with them)."; } bool has_options = false; const char* cheats = getenv("HOS_OOT_CHEATS"); diff --git a/gpu/vk/vk_menu.h b/gpu/vk/vk_menu.h index 72947aa4a..ecd362556 100644 --- a/gpu/vk/vk_menu.h +++ b/gpu/vk/vk_menu.h @@ -47,6 +47,7 @@ struct Options { // feature here. The model's own knobs are percentages because that is what a slider can say; the // backend divides by 100 for the float Streamline wants. int nr = 0; // 0 off, 1 on + int nr_backend = 0; // 0 Auto (Streamline where it is attached, else NGX direct), 1 Streamline, 2 NGX direct (vk_dlssnr_ngx.h) int nr_model = 2; // 0 Performance, 1 Balanced, 2 Quality, 3 DLAA int nr_style = 0; // 0 Default, 1 Natural, 2 Cinematic int nr_preset = 0; // 0 the plugin's default model, 1 to 7 pin presets A to G diff --git a/gpu/vk/vk_replay.cpp b/gpu/vk/vk_replay.cpp index ccd1ec190..fc968e487 100644 --- a/gpu/vk/vk_replay.cpp +++ b/gpu/vk/vk_replay.cpp @@ -34,6 +34,7 @@ #include "vk_gprof.h" #include "vk_framegen.h" #include "vk_dlssnr.h" +#include "vk_dlssnr_ngx.h" // (nr::apply: whichever neural rendering backend runs) #include "vk_menu.h" #include "vk_jobs.h" #include "vk_shader.h" @@ -3127,7 +3128,7 @@ void present_image(VkImage src, uint32_t sw, uint32_t sh, const int crop[4], VkI // a frame it could not do returns null and goes to the window exactly as it always did. if (src) { VkImageView nr_view = VK_NULL_HANDLE; - if (const VkImage nr = dlssnr::apply(f.cmd, src, sw, sh, &nr_view)) src = nr, view = nr_view; + if (const VkImage up = nr::apply(f.cmd, src, sw, sh, &nr_view)) src = up, view = nr_view; // (Streamline or NGX direct: vk_dlssnr_ngx.h) } image_barrier(f.cmd, dst, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); const bool preserve_stretch = host && host->aspect_ratio && host->aspect_ratio() > 1.0f; diff --git a/nx2/build.py b/nx2/build.py index 7e18fe4e1..519b272bd 100644 --- a/nx2/build.py +++ b/nx2/build.py @@ -855,9 +855,9 @@ def main(): # (NVIDIA DLSS, a local build's option: scripts/ngx_sdk.py. Only vk_dlss.cpp sees NVIDIA's headers; without them # it is the stubs that say DLSS is not there) ngx_flags = ["-DHOOKSHOT_NGX", "-I" + os.path.join(NGX_SDK, "include")] if NGX_SDK else [] - # (hookshot) the files that see NVIDIA's headers: DLSS super resolution, and DLSS frame generation over the same NGX - # session (vk_ngx.cpp, vk_dlssg.cpp) - ngx_files = ("vk_dlss.cpp", "vk_ngx.cpp", "vk_dlssg.cpp") + # (hookshot) the files that see NVIDIA's headers: DLSS super resolution, and DLSS frame generation and DLSS 5 neural + # rendering over the same NGX session (vk_ngx.cpp, vk_dlssg.cpp, vk_dlssnr_ngx.cpp) + ngx_files = ("vk_dlss.cpp", "vk_ngx.cpp", "vk_dlssg.cpp", "vk_dlssnr_ngx.cpp") if NGX_SDK: print("the Vulkan back end: with NVIDIA DLSS (NVIDIA's NGX SDK in %s)" % NGX_SDK, flush=True) # (Eden's recompiler and sirit see only their own headers: a change to the back end's vk_*.h does not diff --git a/tests/test_nr_settings_live.py b/tests/test_nr_settings_live.py index 75267d7d4..9014a7a09 100644 --- a/tests/test_nr_settings_live.py +++ b/tests/test_nr_settings_live.py @@ -29,6 +29,7 @@ MENU_H = ROOT / "gpu" / "vk" / "vk_menu.h" MENU_CPP = ROOT / "gpu" / "vk" / "vk_menu.cpp" NR_CPP = ROOT / "gpu" / "vk" / "vk_dlssnr.cpp" +NR_NGX_CPP = ROOT / "gpu" / "vk" / "vk_dlssnr_ngx.cpp" # (the NGX direct backend: the same rule) failures = [] @@ -143,24 +144,31 @@ def check_mapping(cxx): # ------------------------------------------------------------- the source facts a compile can't see def check_nothing_caches(): - text = NR_CPP.read_text(encoding="utf-8") - asked = block(text, "bool asked()", "vk_dlssnr.cpp's asked()") + for path in (NR_CPP, NR_NGX_CPP): + check_backend_live(path) + + +def check_backend_live(path): + text = path.read_text(encoding="utf-8") + name = path.name + asked = block(text, "bool asked()", name + "'s asked()") if "static" in asked: - fail("dlssnr::asked() holds a static: the Neural rendering row would stop reaching the " + fail(name + ": asked() holds a static: the Neural rendering row would stop reaching the " "frame, which is the bug docs/upscaling.md is about.\n" + asked) if "nr_settings()" not in asked: - fail("dlssnr::asked() no longer reads nr_settings(): it cannot see the menu's row.") + fail(name + ": asked() no longer reads nr_settings(): it cannot see the menu's row.") # apply() must read the settings every frame too, not once. - apply_fn = block(text, "VkImage apply(VkCommandBuffer cmd", "vk_dlssnr.cpp's apply()") + apply_fn = block(text, "VkImage apply(VkCommandBuffer cmd", name + "'s apply()") if "nr_settings()" not in apply_fn: - fail("dlssnr::apply() does not read nr_settings(): the model's own rows would never change.") + fail(name + ": apply() does not read nr_settings(): the model's own rows would never change.") if re.search(r"static\s+const\s+\w+\s+\w*(want|opt|setting)", apply_fn): - fail("dlssnr::apply() caches its settings in a static.") + fail(name + ": apply() caches its settings in a static.") ROWS = { # row name: (lo, hi) "Neural rendering": (0, 1), + "Backend": (0, 2), # Auto, Streamline, NGX direct (vk_dlssnr_ngx.h) "Model": (0, 3), "Style": (0, 2), # Default, Natural, Cinematic -- three, not eight "Preset": (0, 7), # Default, then A..G @@ -174,6 +182,7 @@ def check_nothing_caches(): DEFAULTS = { "nr": 0, # every feature is off out of the box + "nr_backend": 0, # Auto: Streamline where attached, else NGX direct "nr_model": 2, # Quality, the model's own default "nr_style": 0, "nr_preset": 0, # the plugin picks; 1 would silently pin preset A From 6cdc49a5c7b78168095cc5894e942dff498dccae Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 16:34:49 -0600 Subject: [PATCH 094/119] docs: DLSS 5 neural rendering's NGX direct backend, where NGX looks, what is measured readme.md: the Backend row, where NGX looks for nvngx_dlssnr.dll (the folders vk_dlss.cpp ngx_init gives it, then the game folder), that NVIDIA ships no Linux library yet, and openNR in the credits. docs/neural-rendering.md: the parameter set and its source, how a refusal is explained, and what the Linux run measured versus what is not measured at all (anything on Windows, any frame from feature 18). Co-Authored-By: Claude Opus 5.5 --- docs/neural-rendering.md | 77 ++++++++++++++++++++++++++++++++++++++-- readme.md | 31 ++++++++++++---- 2 files changed, 99 insertions(+), 9 deletions(-) diff --git a/docs/neural-rendering.md b/docs/neural-rendering.md index c0961876e..24ccea864 100644 --- a/docs/neural-rendering.md +++ b/docs/neural-rendering.md @@ -85,6 +85,79 @@ NGX sessions never come up against the same device. `eAllowOTA` and `eLoadDownloadedPlugins` are deliberately not set: they let Streamline fetch plugins over the network and bootstrap `nvngx_update.exe`, and a game has no business starting an updater. +## NGX direct: the second backend + +`gpu/vk/vk_dlssnr_ngx.{h,cpp}` creates the same model as NGX feature 18 (`NVSDK_NGX_Feature_Reserved18`), over the one NGX +session DLSS super resolution owns (`dlss_ngx_session`), and needs no Streamline at all. The Neural tab's **Backend** row +(`opts.nr_backend`, saved as `nr_backend`; `RX_VK_DLSS_NR_BACKEND=auto|streamline|ngx` over it) chooses: Auto is Streamline +where `streamline::nr_available()`, NGX direct otherwise. `nr::apply` is the present's one call (`vk_replay.cpp` +`present_image`), and every other row applies to whichever runs. + +Why it exists: Streamline's own plugin may gate RTX 20-40 even with a patched `nvngx_dlssnr.dll` (the "not measured here" +below), and on Linux there is no Streamline at all while NGX is there. + +**The parameter set is openNR's** ([clshortfuse/openNR](https://github.com/clshortfuse/openNR), MIT), from its native +benchmark (`benchmarks/native/d3d11/main.cpp`, `benchmarks/native/include/neural_rendering_direct.hpp`). The public NGX +SDK names the feature id and nothing else. Names and types were taken as facts; no code was copied: + +| when | keys | type | +|---|---|---| +| create | `Width`/`Height`/`OutWidth`/`OutHeight`, `DLSSNR.Width`/`Height`, `DLSSNR.InputWidth`/`InputHeight`, `DLSSNR.OutputWidth`/`OutputHeight`, `DLSSNR.Output.Width`/`Output.Height` | uint | +| create | `DLSSNR.Hint.Render.Preset` (0 default, 1-7 = A-G) | uint | +| create | `PerfQualityValue` = sl::DLSSMode - 1 (the Model row: 0 perf, 1 balanced, 2 quality, 5 DLAA) | int | +| create | `DLSSNRComputeScalingRatioCallback`: NGX calls it with a parameter block and it answers `DLSSNR.ScalingRatio` = 1, i.e. no upscaling | void* | +| create | `DLSSNR.ScalingRatio` 1, `DLSSNR.Scale` 1 / `DLSSNR.Upscaling` 0 | float / int | +| evaluate | `DLSSNR.Color`, `Output`, `MVec`, `Depth` (`NVSDK_NGX_Resource_VK`, images in `GENERAL`), `UI`/`UIAlpha` null | void* | +| evaluate | `DLSSNR.Subrect` | uint | +| evaluate | `Jitter.Offset.X/Y`, `DLSSNR.JitterOffsetX/Y` 0, `DLSSNR.MVecScaleX/Y` 1 | float | +| evaluate | `DLSSNR.DepthInverted` 0, `Enabled` 1, `Reset` (first frame of a feature), `UseAutoMask`, `UICorrection` 0 | int | +| evaluate | `DLSSNR.Intensity`, `LocalToneStrength`, `LocalStructureStrength`, `GlobalToneStrength`, `SkinStructureStrength` | float | +| evaluate | `DLSSNR.Style` | uint | + +All of them are set with NGX's C functions (`NVSDK_NGX_Parameter_SetUI/SetI/SetF/SetVoidPointer`), not the +`NVSDK_NGX_Parameter` virtuals: NGX's Windows object is MSVC-built and llvm-mingw's vtable does not line up with it +(`vk_dlss.cpp`). Preset and Model are creation parameters, so changing either remakes the feature; the rest go with every +evaluation. A refusal is held against those exact settings (any row change tries again), and six refusals turn it off +for the run. The device is created with whatever extensions NGX names for feature 18 +(`NVSDK_NGX_VULKAN_GetFeatureDeviceExtensionRequirements`, `vk_main.cpp`), asked whatever the switch says because the +device exists before a player can turn it on. + +Its inputs are the Streamline path's: the window image copied into an `R8G8B8A8_UNORM` image of its own, a flat 0.5 `R32` +depth, zero `R16G16` motion, no jitter. openNR's benchmark feeds `RGBA16F`; whether 8-bit colour is accepted by feature +18 on Vulkan is not known yet. + +**Availability.** It reads `DLSSNR.Available` and `DLSSNR.FeatureInitResult` from NGX's capability parameters (and +`DLSSNR.NeedsUpdatedDriver` / `MinDriverVersionMajor/Minor` by the naming every NGX feature's keys follow; a key NGX does +not answer is reported as such) and logs them. Where NGX does not answer for the feature at all, the first frame's +`CreateFeature` is the answer. When it is refused: + +- **Linux**: NGX loads features as `libnvidia-ngx-.so*` from the folders `vk_dlss.cpp ngx_init` gives it, and then + the game folder itself (`dlss_ngx_runtime` lists them all), and NVIDIA ships no `libnvidia-ngx-dlssnr.so` -- SDK 310.9.16's Linux libraries are + dlss, dlssd and dlssg only. The log and the Neural tab say exactly that, and that the Windows build under Proton is the + way to the feature today. The day NVIDIA ships the library, putting it in the game folder's `ngx` folder should be all + it takes. That is a prediction, not a measurement. +- **Windows**: the same reasoning as `vk_streamline.cpp explain_refusal` -- the GPU's generation, the `nvngx_dlssnr.dll` + found in NGX's folders and whether Windows trusts its signature (only in a build that links wintrust, i.e. one with + Streamline's headers), and NGX's signature override, read and never written. + +### What is measured for NGX direct, and what is not + +- Measured, 2026-11-09, Linux, RTX 5060 Ti (Blackwell), driver 615.71.09, NGX SDK 310.9.16, windowed on Xvfb (a + `HOS_HEADLESS=1` run never reaches `present_image`, so it never reaches either backend): + - NGX asks for `VK_KHR_buffer_device_address` for feature 18 (`vk: dlss-nr wants ...: enabled`). + - With Backend Auto, the run chose NGX direct (no Streamline on Linux); with NGX direct, the same. + - NGX's own log (`RX_VK_DLSS_LOG=1`) shows it looking for `libnvidia-ngx-dlssnr.so` in the game folder's `ngx`, then + `~/.local/share/hookshot/ngx`, then the game folder itself, and finding none. + - NGX answers `DLSSNR.Available = 0`, `DLSSNR.FeatureInitResult = 0xbad00004` (`FAIL_FeatureNotFound`): the core + knows the feature and has no library for it. The Linux message is logged once; the game went on to gameplay + (~2,185 draws a frame, ~36 fps) for 10,000+ presents. + - Nothing on Linux has created or evaluated feature 18, because there is nothing to create it from. +- Not measured: anything on Windows. No run has created feature 18 through NGX on Vulkan, evaluated it, or seen a frame + from it; whether NGX's Windows core answers `DLSSNR.Available` for a patched DLL on RTX 20-40; whether + `PerfQualityValue` and `Hint.Render.Preset` are taken at creation as openNR's D3D11/D3D12 benchmark takes them; and + whether openNR's D3D parameter set is the whole Vulkan set (its benchmark loads the snippet itself, not through NGX's + core, so the core's own checks are not exercised by it). + ## What a player needs Windows x64 only. Streamline's interposer and plugins are DLLs; on Linux, run the Windows build under @@ -127,8 +200,8 @@ override's state, says which of them is missing, and gives the Neural tab a one- Not measured here: the patched DLLs through *Streamline* on *Vulkan*. Every report found used NGX directly from D3D12 (RenoDX's add-on, OptiScaler). If Streamline's own plugin turns out to gate on the architecture as well, the log line will -say `AdapterUnsupported` with a signed-off DLL and the override on, and the answer is an NGX-direct path for feature 18 -beside the DLSS-G one (`gpu/vk/vk_ngx.h`) -- which would also bring NR to Linux. +say `AdapterUnsupported` with a signed-off DLL and the override on, and the answer is the NGX-direct path for feature 18 +(above, the Backend row's NGX direct) -- which is also the one that would bring NR to Linux. ## On AMD diff --git a/readme.md b/readme.md index 5521e8b9f..38f6a65ad 100644 --- a/readme.md +++ b/readme.md @@ -233,11 +233,26 @@ are never in a release: they come from NVIDIA's DLSS SDK (`github.com/NVIDIA/DLS The **Neural** tab is NVIDIA's DLSS 5 neural rendering: a model that goes over the finished frame and rebuilds detail, tone and structure in it. It is not an upscaler and not ray reconstruction -- it takes the picture, not the scene -- so it works on this game, and it stacks with whatever Upscaling -and Frame generation are set to. Ten rows: the switch, Model, Style, Preset, Intensity, Local tone, -Local structure, Global tone, Skin structure and Auto mask. All of them take effect on the next -frame. - -**Windows x64.** Streamline ships as DLLs, so on Linux run the Windows build under Proton. +and Frame generation are set to. Eleven rows: the switch, Backend, Model, Style, Preset, Intensity, +Local tone, Local structure, Global tone, Skin structure and Auto mask. All of them take effect on +the next frame. + +**Two ways to the same model** (the **Backend** row, saved as `nr_backend`; `RX_VK_DLSS_NR_BACKEND=auto|streamline|ngx` +over it for one run): **Streamline**, NVIDIA's plugin and the files in the table below; or **NGX direct**, which asks +NVIDIA's NGX for the feature itself, through the same NGX session DLSS uses, and needs only `nvngx_dlssnr.dll`. **Auto** +takes Streamline where it is attached and accepts the GPU, and NGX direct otherwise. The other rows apply to whichever +runs. + +**NGX direct** looks for `nvngx_dlssnr.dll` where NGX looks for DLSS's own runtime: the folder `RX_VK_DLSS_DIR` names, then +the **`ngx` folder in the game folder**, then `%LOCALAPPDATA%\Hookshot\ngx`, then the game folder itself. On Linux NGX +looks in the same places (`$XDG_DATA_HOME/hookshot/ngx` or `~/.local/share/hookshot/ngx` third) for +`libnvidia-ngx-dlssnr.so`, which **NVIDIA has not shipped yet**: the Linux NGX core knows the feature, but NVIDIA's SDK has Linux libraries only for DLSS, Ray +Reconstruction and Frame Generation. Until it does, the Neural tab and the log say so, and on Linux the way to the +feature is the Windows build under Proton. NGX direct's log lines start `vk: DLSS 5 neural rendering (NGX direct)`; when +NGX refuses it on Windows they name the GPU, the `nvngx_dlssnr.dll` found, whether it is signed, and the override, as the +Streamline path's do. + +**Streamline is Windows x64 only**: it ships as DLLs. **RTX 50 with NVIDIA's own model; RTX 20, 30 and 40 with a patched one.** NVIDIA's `nvngx_dlssnr.dll` runs on RTX 50 (Blackwell) only: on an older card NGX refuses it (`0xbad00001`) and the Neural tab says so. Community builds of the same @@ -252,11 +267,11 @@ Two things to know: PC, so turn it back off when you are done, and keep patched DLLs away from games with anti-cheat. - It costs more on older cards: about 1.5 times an RTX 5070 Ti's GPU time on an RTX 4070 SUPER, by one report. -When the feature is refused, the log's `vk: DLSS 5 neural rendering is not supported here` line names the GPU, whether +When Streamline refuses the feature, the log's `vk: DLSS 5 neural rendering is not supported here` line names the GPU, whether the `nvngx_dlssnr.dll` there is NVIDIA's or a patched one, and whether the override is set, and the line after it says what is missing. -These files go beside the game, or in a `streamline` folder beside it, or wherever +For Streamline, these files go beside the game, or in a `streamline` folder beside it, or wherever `RX_VK_STREAMLINE_DIR` points. They are NVIDIA's to ship; Hookshot builds against Streamline's MIT-licensed headers only and loads nothing it has not checked NVIDIA's signature on: @@ -652,6 +667,8 @@ Hookshot exists thanks to the work of many people: - **[mstorsjo/llvm-mingw](https://github.com/mstorsjo/llvm-mingw)**: the bundled Windows compiler (no Visual Studio needed). - **NVIDIA DLSS**: builds made with NVIDIA's DLSS SDK (optional, downloaded by each build, never bundled) use NVIDIA DLSS Super Resolution, NVIDIA's technology. NVIDIA and DLSS are trademarks of NVIDIA Corporation. +- **[openNR](https://github.com/clshortfuse/openNR)** (MIT, Carlos Lopez): the NGX parameter names DLSS 5 neural rendering's + NGX direct backend drives feature 18 with, and the layout of its Streamline options. - **[kinnay/zbic](https://github.com/kinnay/zbic)**, **Opus** and **SDL**: decompression, audio and controllers. - **[sostenesfreitas/ocarina-recomp](https://github.com/sostenesfreitas/ocarina-recomp)**: this README's layout, and its notes confirmed the mesh stage's control section. From 2c19b633adc5ae7f7406233013fa3c6a44ff417d Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 16:37:39 -0600 Subject: [PATCH 095/119] fix(vk): DLSS frame generation sets NGX's parameters through its C functions vk_dlssg.cpp set all 53 of its parameters, and vk_ngx.cpp read the capability parameters, through NVSDK_NGX_Parameter's virtual Set and Get. That object comes from NVIDIA's MSVC-built library, whose vtable follows Microsoft's ABI; llvm-mingw's calls follow Itanium's, so on the Windows build the overloads line up by luck if at all (upstream's vk_dlss.cpp already avoids them for this reason). vk_ngx.h now has set()/get() overloads over NVSDK_NGX_Parameter_SetUI/SetI/SetF/SetD/SetVoidPointer and GetI/GetUI, one per type NGX takes, with any other type deleted so a wrong one cannot compile. Found while adding the NGX-direct neural rendering backend. Co-Authored-By: Claude Opus 5.5 --- gpu/vk/vk_dlssg.cpp | 108 ++++++++++++++++++++++---------------------- gpu/vk/vk_ngx.cpp | 8 ++-- gpu/vk/vk_ngx.h | 19 ++++++++ 3 files changed, 77 insertions(+), 58 deletions(-) diff --git a/gpu/vk/vk_dlssg.cpp b/gpu/vk/vk_dlssg.cpp index facdc2291..4b71ccd18 100644 --- a/gpu/vk/vk_dlssg.cpp +++ b/gpu/vk/vk_dlssg.cpp @@ -158,11 +158,11 @@ bool ngx_feature(VkCommandBuffer cmd) { // inline helper would put NVSDK_NGX_VULKAN_CreateFeature in this object file and hand the link // back to NVIDIA's library. The keys themselves are the SDK's own macros, so a wrong one is a // compile error. - params->Set(NVSDK_NGX_Parameter_CreationNodeMask, 1u); - params->Set(NVSDK_NGX_Parameter_VisibilityNodeMask, 1u); - params->Set(NVSDK_NGX_Parameter_Width, g.width); - params->Set(NVSDK_NGX_Parameter_Height, g.height); - params->Set(NVSDK_NGX_DLSSG_Parameter_BackbufferFormat, (unsigned)g.present_format); + ngx::set(params, NVSDK_NGX_Parameter_CreationNodeMask, 1u); + ngx::set(params, NVSDK_NGX_Parameter_VisibilityNodeMask, 1u); + ngx::set(params, NVSDK_NGX_Parameter_Width, g.width); + ngx::set(params, NVSDK_NGX_Parameter_Height, g.height); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_BackbufferFormat, (unsigned)g.present_format); const NVSDK_NGX_Result res = ngx::create_feature(cmd, NVSDK_NGX_Feature_FrameGeneration, params, &feature); if (NVSDK_NGX_FAILED(res) || !feature) { @@ -186,65 +186,65 @@ bool ngx_generate(VkCommandBuffer cmd, const Inputs& in, Image& out) { in.render_width, in.render_height, false); NVSDK_NGX_Resource_VK made = ngx::resource(out.view, out.image, out.format, out.width, out.height, true); - params->Set(NVSDK_NGX_DLSSG_Parameter_Backbuffer, &colour); - params->Set(NVSDK_NGX_DLSSG_Parameter_Depth, &depth); - params->Set(NVSDK_NGX_DLSSG_Parameter_MVecs, &motion); - params->Set(NVSDK_NGX_DLSSG_Parameter_OutputInterpolated, &made); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_Backbuffer, &colour); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_Depth, &depth); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_MVecs, &motion); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_OutputInterpolated, &made); // The optional inputs this game does not have: no separate HUD-less colour, no UI layer, no // distortion field. They are set to null rather than left from the frame before, because a // parameter block is reused and a stale resource is a use-after-free inside the runtime. - params->Set(NVSDK_NGX_DLSSG_Parameter_HUDLess, (void*)nullptr); - params->Set(NVSDK_NGX_DLSSG_Parameter_UI, (void*)nullptr); - params->Set(NVSDK_NGX_DLSSG_Parameter_UIAlpha, (void*)nullptr); - params->Set(NVSDK_NGX_DLSSG_Parameter_BidirectionalDistortionField, (void*)nullptr); - params->Set(NVSDK_NGX_DLSSG_Parameter_OutputReal, (void*)nullptr); - params->Set(NVSDK_NGX_DLSSG_Parameter_OutputDisableInterpolation, (void*)nullptr); - - params->Set(NVSDK_NGX_DLSSG_Parameter_MultiFrameCount, in.frames_made); - params->Set(NVSDK_NGX_DLSSG_Parameter_MultiFrameIndex, in.frame_index); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_HUDLess, (void*)nullptr); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_UI, (void*)nullptr); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_UIAlpha, (void*)nullptr); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_BidirectionalDistortionField, (void*)nullptr); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_OutputReal, (void*)nullptr); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_OutputDisableInterpolation, (void*)nullptr); + + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_MultiFrameCount, in.frames_made); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_MultiFrameIndex, in.frame_index); // The matrices are the whole of what places a made frame in time. They are passed as the SDK // takes them -- a pointer to sixteen floats -- in the row-major order the rest of this renderer // uses; the camera-motion pass uses the same pair and its picture agreed with the game's, which // is the only check available without NVIDIA's own tooling. if (in.have_matrices) { - params->Set(NVSDK_NGX_DLSSG_Parameter_ClipToPrevClip, (void*)in.clip_to_prev_clip); - params->Set(NVSDK_NGX_DLSSG_Parameter_PrevClipToClip, (void*)in.prev_clip_to_clip); - params->Set(NVSDK_NGX_DLSSG_Parameter_CameraViewToClip, (void*)in.camera_view_to_clip); - params->Set(NVSDK_NGX_DLSSG_Parameter_ClipToCameraView, (void*)in.clip_to_camera_view); - params->Set(NVSDK_NGX_DLSSG_Parameter_ClipToLensClip, (void*)in.clip_to_lens_clip); - params->Set(NVSDK_NGX_DLSSG_Parameter_CameraPosX, in.camera_pos[0]); - params->Set(NVSDK_NGX_DLSSG_Parameter_CameraPosY, in.camera_pos[1]); - params->Set(NVSDK_NGX_DLSSG_Parameter_CameraPosZ, in.camera_pos[2]); - params->Set(NVSDK_NGX_DLSSG_Parameter_CameraUpX, in.camera_up[0]); - params->Set(NVSDK_NGX_DLSSG_Parameter_CameraUpY, in.camera_up[1]); - params->Set(NVSDK_NGX_DLSSG_Parameter_CameraUpZ, in.camera_up[2]); - params->Set(NVSDK_NGX_DLSSG_Parameter_CameraRightX, in.camera_right[0]); - params->Set(NVSDK_NGX_DLSSG_Parameter_CameraRightY, in.camera_right[1]); - params->Set(NVSDK_NGX_DLSSG_Parameter_CameraRightZ, in.camera_right[2]); - params->Set(NVSDK_NGX_DLSSG_Parameter_CameraFwdX, in.camera_forward[0]); - params->Set(NVSDK_NGX_DLSSG_Parameter_CameraFwdY, in.camera_forward[1]); - params->Set(NVSDK_NGX_DLSSG_Parameter_CameraFwdZ, in.camera_forward[2]); - params->Set(NVSDK_NGX_DLSSG_Parameter_CameraPinholeOffsetX, 0.0f); - params->Set(NVSDK_NGX_DLSSG_Parameter_CameraPinholeOffsetY, 0.0f); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_ClipToPrevClip, (void*)in.clip_to_prev_clip); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_PrevClipToClip, (void*)in.prev_clip_to_clip); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_CameraViewToClip, (void*)in.camera_view_to_clip); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_ClipToCameraView, (void*)in.clip_to_camera_view); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_ClipToLensClip, (void*)in.clip_to_lens_clip); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_CameraPosX, in.camera_pos[0]); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_CameraPosY, in.camera_pos[1]); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_CameraPosZ, in.camera_pos[2]); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_CameraUpX, in.camera_up[0]); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_CameraUpY, in.camera_up[1]); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_CameraUpZ, in.camera_up[2]); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_CameraRightX, in.camera_right[0]); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_CameraRightY, in.camera_right[1]); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_CameraRightZ, in.camera_right[2]); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_CameraFwdX, in.camera_forward[0]); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_CameraFwdY, in.camera_forward[1]); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_CameraFwdZ, in.camera_forward[2]); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_CameraPinholeOffsetX, 0.0f); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_CameraPinholeOffsetY, 0.0f); } - params->Set(NVSDK_NGX_DLSSG_Parameter_OrthoProjection, 0u); - params->Set(NVSDK_NGX_DLSSG_Parameter_MvecDilated, 0u); - params->Set(NVSDK_NGX_DLSSG_Parameter_MvecInvalidValue, -FLT_MAX); - params->Set(NVSDK_NGX_DLSSG_Parameter_MinRelativeLinearDepthObjectSeparation, 40.0f); - params->Set(NVSDK_NGX_DLSSG_Parameter_JitterOffsetX, in.jitter[0]); - params->Set(NVSDK_NGX_DLSSG_Parameter_JitterOffsetY, in.jitter[1]); - params->Set(NVSDK_NGX_DLSSG_Parameter_MvecScaleX, in.motion_scale[0]); - params->Set(NVSDK_NGX_DLSSG_Parameter_MvecScaleY, in.motion_scale[1]); - params->Set(NVSDK_NGX_DLSSG_Parameter_CameraNear, in.near_plane); - params->Set(NVSDK_NGX_DLSSG_Parameter_CameraFar, in.far_plane); - params->Set(NVSDK_NGX_DLSSG_Parameter_CameraFOV, in.fov_y); - params->Set(NVSDK_NGX_DLSSG_Parameter_CameraAspectRatio, in.aspect); - params->Set(NVSDK_NGX_DLSSG_Parameter_ColorBuffersHDR, in.colour_hdr ? 1u : 0u); - params->Set(NVSDK_NGX_DLSSG_Parameter_DepthInverted, in.depth_inverted ? 1u : 0u); - params->Set(NVSDK_NGX_DLSSG_Parameter_CameraMotionIncluded, + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_OrthoProjection, 0u); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_MvecDilated, 0u); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_MvecInvalidValue, -FLT_MAX); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_MinRelativeLinearDepthObjectSeparation, 40.0f); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_JitterOffsetX, in.jitter[0]); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_JitterOffsetY, in.jitter[1]); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_MvecScaleX, in.motion_scale[0]); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_MvecScaleY, in.motion_scale[1]); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_CameraNear, in.near_plane); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_CameraFar, in.far_plane); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_CameraFOV, in.fov_y); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_CameraAspectRatio, in.aspect); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_ColorBuffersHDR, in.colour_hdr ? 1u : 0u); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_DepthInverted, in.depth_inverted ? 1u : 0u); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_CameraMotionIncluded, in.camera_motion_included ? 1u : 0u); - params->Set(NVSDK_NGX_DLSSG_Parameter_Reset, (in.reset || g.first_evaluation) ? 1u : 0u); - params->Set(NVSDK_NGX_DLSSG_Parameter_NotRenderingGameFrames, 0u); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_Reset, (in.reset || g.first_evaluation) ? 1u : 0u); + ngx::set(params, NVSDK_NGX_DLSSG_Parameter_NotRenderingGameFrames, 0u); const NVSDK_NGX_Result res = ngx::evaluate_feature(cmd, feature, params); if (NVSDK_NGX_FAILED(res)) { static int told = 0; diff --git a/gpu/vk/vk_ngx.cpp b/gpu/vk/vk_ngx.cpp index 3dae4dc9c..d9bcf9de3 100644 --- a/gpu/vk/vk_ngx.cpp +++ b/gpu/vk/vk_ngx.cpp @@ -93,13 +93,13 @@ bool feature_available(const char* available_key, const char* needs_driver_key, return false; } int available = 0; - if (NVSDK_NGX_FAILED(caps->Get(available_key, &available)) || !available) { + if (NVSDK_NGX_FAILED(get(caps, available_key, &available)) || !available) { // What NGX says about it: an old driver and a feature that failed to initialize are // different reports, and a user with the first can act on it. int needs_driver = 0, major = 0, minor = 0; - caps->Get(needs_driver_key, &needs_driver); - caps->Get(major_key, &major); - caps->Get(minor_key, &minor); + get(caps, needs_driver_key, &needs_driver); + get(caps, major_key, &major); + get(caps, minor_key, &minor); if (needs_driver) logf("vk: ngx: this driver is too old for %s (%d.%d or newer wanted)", name, major, minor); diff --git a/gpu/vk/vk_ngx.h b/gpu/vk/vk_ngx.h index a32477943..09591b605 100644 --- a/gpu/vk/vk_ngx.h +++ b/gpu/vk/vk_ngx.h @@ -27,6 +27,25 @@ namespace mkwvk::ngx { +/// NGX's parameters through its C functions, never NVSDK_NGX_Parameter's virtual Set/Get. The object comes from NVIDIA's +/// MSVC-built library, and its vtable is laid out by Microsoft's ABI, which llvm-mingw's Itanium-ABI calls do not follow: +/// on a Windows build the overloads line up by luck, if at all (gpu/vk/vk_dlss.cpp says the same). One overload per type +/// NGX takes, so a call site reads as it did and the value's type picks the function; any other type does not compile. +inline void set(NVSDK_NGX_Parameter* p, const char* key, unsigned v) { NVSDK_NGX_Parameter_SetUI(p, key, v); } +inline void set(NVSDK_NGX_Parameter* p, const char* key, int v) { NVSDK_NGX_Parameter_SetI(p, key, v); } +inline void set(NVSDK_NGX_Parameter* p, const char* key, float v) { NVSDK_NGX_Parameter_SetF(p, key, v); } +inline void set(NVSDK_NGX_Parameter* p, const char* key, double v) { NVSDK_NGX_Parameter_SetD(p, key, v); } +inline void set(NVSDK_NGX_Parameter* p, const char* key, void* v) { NVSDK_NGX_Parameter_SetVoidPointer(p, key, v); } +/// (a Vulkan resource is handed over by its address, as NGX's own helpers in nvsdk_ngx_helpers_vk.h do) +inline void set(NVSDK_NGX_Parameter* p, const char* key, NVSDK_NGX_Resource_VK* v) { + NVSDK_NGX_Parameter_SetVoidPointer(p, key, v); +} +template void set(NVSDK_NGX_Parameter*, const char*, T) = delete; +inline NVSDK_NGX_Result get(NVSDK_NGX_Parameter* p, const char* key, int* v) { return NVSDK_NGX_Parameter_GetI(p, key, v); } +inline NVSDK_NGX_Result get(NVSDK_NGX_Parameter* p, const char* key, unsigned* v) { + return NVSDK_NGX_Parameter_GetUI(p, key, v); +} + /// Loads the NGX core the driver ships and resolves what the backends call. False, with one line /// logged, where there is no NGX runtime here or it is missing an entry point. Asked more than once /// is free: the answer is kept. From 4e492ce7d73bd2d9678354d9ca11c3c9b3ec2444 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 9 Nov 2026 22:38:10 +0000 Subject: [PATCH 096/119] chore(release): 2.8.0 [skip ci] [skip release] ## [2.8.0](https://github.com/notquiteog/Hookshot/compare/v2.7.0...v2.8.0) (2026-11-09) ### Features * **vk:** DLSS 5 neural rendering through NGX directly, beside Streamline ([7784399](https://github.com/notquiteog/Hookshot/commit/778439998fe20a33606079c20adc6a4d7703b928)) ### Bug Fixes * **vk:** DLSS frame generation sets NGX's parameters through its C functions ([2c19b63](https://github.com/notquiteog/Hookshot/commit/2c19b633adc5ae7f7406233013fa3c6a44ff417d)) --- changelog.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/changelog.txt b/changelog.txt index 06bf1cc23..4e51210e5 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,11 @@ --------------------------------------------------------------------------------------------------- +Version: 2.8.0 +Date: 09. 11. 2026 + Features: + - Vk: DLSS 5 neural rendering through NGX directly, beside Streamline. + Bugfixes: + - Vk: DLSS frame generation sets NGX's parameters through its C functions. +--------------------------------------------------------------------------------------------------- Version: 2.7.0 Date: 09. 11. 2026 Features: From c4f7d84a3e509a517b1a4e8dd1ea348bfa69ac75 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 16:49:37 -0600 Subject: [PATCH 097/119] feat(vk): choose the frame generation method in the Insert menu A Frame generation method row under Frame generation: Auto, NVIDIA DLSS, AMD FSR 4, AMD FSR 3.1 or Built-in, offering only the methods that run on this PC (as the Upscaler row does). Auto keeps the order frame generation already took: DLSS, FSR 4, FSR 3.1, then the renderer's own blend. A method chosen outright is tried alone, and a frame it cannot make (no history yet, its runtime missing, a cut) falls back to the built-in blend rather than showing nothing. Read every frame, so a change reaches the next one; the log says which method is in effect; RX_VK_FG_METHOD picks one for a run. The rules are gpu/vk/framegen_methods.h, plain functions, checked by tests/test_framegen_methods (stepping over what runs, a saved choice that cannot run showing as Auto, Auto trying every method and a chosen one alone) and wired to the menu and vk_framegen.cpp through them. Co-Authored-By: Claude Opus 5.5 --- gpu/vk/framegen_methods.h | 39 ++++++++++++++++++++++++++++++ gpu/vk/vk_framegen.cpp | 29 ++++++++++++++++++++--- gpu/vk/vk_menu.cpp | 34 ++++++++++++++++++++++++++ gpu/vk/vk_menu.h | 1 + readme.md | 8 ++++--- tests/run_all.py | 1 + tests/test_framegen_methods.cpp | 29 +++++++++++++++++++++++ tests/test_framegen_methods.py | 42 +++++++++++++++++++++++++++++++++ tests/test_rumble_menu.py | 5 ++++ 9 files changed, 182 insertions(+), 6 deletions(-) create mode 100644 gpu/vk/framegen_methods.h create mode 100644 tests/test_framegen_methods.cpp create mode 100644 tests/test_framegen_methods.py diff --git a/gpu/vk/framegen_methods.h b/gpu/vk/framegen_methods.h new file mode 100644 index 000000000..b6f757bd7 --- /dev/null +++ b/gpu/vk/framegen_methods.h @@ -0,0 +1,39 @@ +/* (hookshot) The Insert menu's Frame generation method row (opts.framegen_method, vk_menu.cpp) and the order + gpu/vk/vk_framegen.cpp tries the methods in, as plain functions: no Vulkan, no menu. tests/test_framegen_methods.cpp + checks them. + + Auto takes the first method that runs here, best first: NVIDIA DLSS frame generation (the game's depth and motion, + NVIDIA's network), AMD FSR 4's (AMD's runtime, Windows), AMD FSR 3.1's (AMD's open shaders, any GPU), then the + renderer's own blend, which always runs. A method chosen outright is tried alone; when it refuses a frame (no history + yet, its runtime missing, a cut) that frame falls back to the built-in blend rather than showing nothing. */ +#pragma once + +namespace mkwvk::framegen_methods { + +enum { AUTO = 0, DLSS = 1, FSR4 = 2, FSR3 = 3, BUILTIN = 4, kMethods = 5 }; + +inline unsigned bit(int method) { return 1u << method; } +/// What can always be chosen: Auto and the built-in blend +inline unsigned always() { return bit(AUTO) | bit(BUILTIN); } + +/// The row's next value from v (dir +1 / -1), wrapping over what runs here (available: bit() of each) +inline int step(int v, int dir, unsigned available) { + available |= always(); + int at = v < 0 || v >= kMethods || !(available & bit(v)) ? AUTO : v; + for (int i = 0; i < kMethods; i++) { + at = (at + (dir > 0 ? 1 : kMethods - 1)) % kMethods; + if (available & bit(at)) return at; + } + return AUTO; +} + +/// The method shown and used: the one chosen when it runs here, else Auto (a saved choice is kept for a PC where it runs) +inline int effective(int chosen, unsigned available) { + available |= always(); + return chosen >= 0 && chosen < kMethods && (available & bit(chosen)) ? chosen : AUTO; +} + +/// Whether vk_framegen.cpp tries this vendor method for a frame, given the method in effect +inline bool tries(int effective_method, int method) { return effective_method == AUTO || effective_method == method; } + +} // namespace mkwvk::framegen_methods diff --git a/gpu/vk/vk_framegen.cpp b/gpu/vk/vk_framegen.cpp index 4af4bcfb9..9ca348418 100644 --- a/gpu/vk/vk_framegen.cpp +++ b/gpu/vk/vk_framegen.cpp @@ -22,6 +22,7 @@ #include "vk_dlssg.h" #include "vk_fsr3fi.h" #include "vk_ffx.h" // (hookshot: AMD FSR 4 frame generation) +#include "framegen_methods.h" #include "vk_draw.h" // (scene_frame_inputs: the depth and matrix the draw path kept) #include @@ -733,9 +734,31 @@ bool framegen_record(VkCommandBuffer cmd, VkImageView src, uint32_t sw, uint32_t // own motion and depth instead of colour alone. It refuses -- no NGX, no runtime, a GPU that // does not report it, or a frame where the scene's depth and matrix are not both in hand -- and // then the interpolation below runs exactly as it did before this existed. - if (blend && m > 1 && dlssg::supported()) set->made = dlssg_frames(cmd, *set, cur, uw, uh, m); - if (set->made == 0 && blend && m > 1 && ffx::frames_supported()) set->made = ffx_frames(cmd, *set, cur, uw, uh, m); - if (set->made == 0 && blend && m > 1 && fsr3fi::supported()) + // (hookshot) The Frame generation method row (framegen_methods.h): Auto tries each vendor method best first; one chosen + // outright is tried alone. Read every frame, so a change in the menu reaches the next one. RX_VK_FG_METHOD=<0-4> + // wins over the row for a run + namespace fgm = framegen_methods; + static const int env_method = getenv("RX_VK_FG_METHOD") ? atoi(getenv("RX_VK_FG_METHOD")) : -1; + const int chosen = env_method >= 0 ? env_method : opts.framegen_method; + unsigned avail = fgm::always(); + if (dlssg::supported()) avail |= fgm::bit(fgm::DLSS); + if (ffx::frames_supported()) avail |= fgm::bit(fgm::FSR4); + if (fsr3fi::supported()) avail |= fgm::bit(fgm::FSR3); + const int method = fgm::effective(chosen, avail); + { + static int said = -1; + if (blend && m > 1 && said != method) { + said = method; + logf("vk: frame generation method: %s (chosen %d, available mask %#x)", + method == fgm::AUTO ? "auto" : method == fgm::DLSS ? "NVIDIA DLSS" : method == fgm::FSR4 ? "AMD FSR 4" + : method == fgm::FSR3 ? "AMD FSR 3.1" : "built-in", chosen, avail); + } + } + if (blend && m > 1 && fgm::tries(method, fgm::DLSS) && (avail & fgm::bit(fgm::DLSS))) + set->made = dlssg_frames(cmd, *set, cur, uw, uh, m); + if (set->made == 0 && blend && m > 1 && fgm::tries(method, fgm::FSR4) && (avail & fgm::bit(fgm::FSR4))) + set->made = ffx_frames(cmd, *set, cur, uw, uh, m); + if (set->made == 0 && blend && m > 1 && fgm::tries(method, fgm::FSR3) && (avail & fgm::bit(fgm::FSR3))) set->made = fsr3fi_frames(cmd, *set, cur, uw, uh, m); if (set->made == 0 && blend && m > 1) { pass(cmd, fg.flow, {{fg.lumas[prev].view, fg.nearest}, {fg.lumas[cur].view, fg.nearest}, diff --git a/gpu/vk/vk_menu.cpp b/gpu/vk/vk_menu.cpp index 595b9d1f2..1e984bae5 100644 --- a/gpu/vk/vk_menu.cpp +++ b/gpu/vk/vk_menu.cpp @@ -35,6 +35,9 @@ #include "vk_dlssnr_ngx.h" // (nr::why, nr::built: whichever backend the Backend row runs) #include "vk_fsr3.h" // (the Upscaler row: whether FSR 3.1 runs on this device) #include "vk_ffx.h" // (and FSR 4, AMD's runtime) +#include "vk_dlssg.h" // (the Frame generation method row: whether DLSS frame generation runs here) +#include "vk_fsr3fi.h" // (and FSR 3.1's) +#include "framegen_methods.h" #include "vk_work.h" // (after the others: counts the commands that do GPU work, for full_barrier) #include "vk_dlss.h" #include "vk_reflex.h" @@ -480,6 +483,32 @@ const char* hn_framegen(int v, int variant) { : v == 5 ? "Four made frames" : v == 6 ? "Five made frames" : v == 7 ? "Six made frames" : "Seven made frames"); return b[std::clamp(v, 2, 8)]; } +// (hookshot) The Frame generation method (opts.framegen_method): what makes the frames, of what runs here (framegen_methods.h) +namespace fgm = framegen_methods; +/// One bit per method that runs here. Each backend caches its own answer +unsigned framegen_available() { + unsigned m = fgm::always(); + if (dlssg::supported()) m |= fgm::bit(fgm::DLSS); + if (ffx::frames_supported()) m |= fgm::bit(fgm::FSR4); + if (fsr3fi::supported()) m |= fgm::bit(fgm::FSR3); + return m; +} +const char* tx_framegen_method(int v) { + static const char* t[] = {"Auto", "NVIDIA DLSS", "AMD FSR 4", "AMD FSR 3.1", "Built-in"}; + return t[fgm::effective(v, framegen_available())]; +} +const char* hn_framegen_method(int v, int variant) { + static const char* const t[] = { + "The best that runs here: DLSS, then FSR 4, then FSR 3.1, then the built-in blend. The log says which.", + "NVIDIA's network, from the game's depth and motion: RTX 40 and 50, with nvngx_dlssg.dll in the game's ngx folder.", + "AMD's FSR 4 frame generation, through AMD's runtime beside the game: Windows.", + "AMD's FSR 3.1 frame generation, built from AMD's open shaders: any GPU.", + "The renderer's own blend of the two frames around it: every GPU, the least sharp.", + }; + if (variant < 0) v = fgm::effective(v, framegen_available()); + else if (variant > 0) return nullptr; + return t[std::clamp(v, 0, fgm::kMethods - 1)]; +} MENU_HINTS(hn_pace, 0, "As soon as it is ready.", "At an even interval: less stutter, at up to one frame of delay.") MENU_HINTS(hn_output_res, 0, "The game's own size.", "The sharpest on a 2560x1440 screen: nothing to scale to the window.", @@ -533,6 +562,9 @@ Row rows[] = { {TAB_GRAPHICS, "Frame generation", &opts.framegen, 0, 8, 1, tx_framegen, "Makes frames between the game's own, for smoother motion, at a little input delay. Fast motion or camera cuts can " "show artifacts.", hn_framegen}, + {TAB_GRAPHICS, "Frame generation method", &opts.framegen_method, 0, framegen_methods::kMethods - 1, 1, + tx_framegen_method, "What makes the frames, of the methods that run on this PC. Used while Frame generation is on; " + "a method that cannot make a frame leaves it to the built-in blend.", hn_framegen_method, false, true}, {TAB_GRAPHICS, "Frame pacing", &opts.pace, 0, 1, 1, tx_onoff, "When each frame is shown.", hn_pace}, {TAB_GRAPHICS, "NVIDIA Reflex", &opts.reflex, 0, 2, 1, tx_reflex, "NVIDIA GPUs: each frame starts as late as it can, for less input delay. Not used with frame generation.", hn_reflex}, @@ -973,6 +1005,8 @@ void set_row(Row& r, int v, int dir, bool keep = true) { if (row_fixed(r.value)) return; // (the scaling rows: only what can run here; the Render resolution row through the Upscaler's own steps) if (r.value == &opts.dlss) v = ur::step_upscaler(upscaler(), dir, upscalers_available()); + if (r.value == &opts.framegen_method) // (hookshot: only the methods that run here) + v = framegen_methods::step(framegen_methods::effective(*r.value, framegen_available()), dir, framegen_available()); if (r.value == &opts.resolution) v = ur::step(upscaler(), *r.value, dir); if (r.value == &opts.output_res) { // (smallest to largest: kOutputOrder) v = step_output_choice(*r.value, dir); diff --git a/gpu/vk/vk_menu.h b/gpu/vk/vk_menu.h index ecd362556..87d2b12c0 100644 --- a/gpu/vk/vk_menu.h +++ b/gpu/vk/vk_menu.h @@ -8,6 +8,7 @@ namespace mkwvk { // (out of the box every feature is off: what the game does on its own. The ini beside the executable keeps a player's choices) struct Options { int framegen = 0; // made frames: 0 off, or 2, 3, 4 times the game's frames + int framegen_method = 0; // (hookshot) which makes them: gpu/vk/framegen_methods.h (0 Auto, 1 DLSS, 2 FSR 4, 3 FSR 3.1, 4 built-in) int pace = 0; // frames shown on an even line (vk_framegen.cpp) int resolution = 0; // the 3D's (Render resolution): 0 Auto (the game's dynamic resolution), else a share of the output, // 1..6 = 100%, 75%, 67%, 50%, 58%, 33% (upscaler_rows.h; nx2/oot_patches.py) diff --git a/readme.md b/readme.md index 38f6a65ad..5152321f4 100644 --- a/readme.md +++ b/readme.md @@ -217,9 +217,10 @@ card runs: FSR 4's machine-learning upscaler on an RX 9000 (and the cards AMD ad carries on others. The log's `vk: amd fsr 4:` lines say which one you got. To try another copy of AMD's DLLs, put them in a folder and name it with `RX_VK_FFX_DIR`; `RX_VK_FFX=0` keeps them from being loaded at all. -**Frame generation** takes the first of these that runs on your PC: NVIDIA DLSS frame generation (`nvngx_dlssg.dll` in -the `ngx` folder, RTX 40 and 50), AMD FSR 4's (Windows), AMD FSR 3.1's (any GPU), then the renderer's own blend. You do -not pick; the log says which one is drawing. +**Frame generation** -- with **Frame generation method** on Auto -- takes the first of these that runs on your PC: NVIDIA DLSS frame generation (`nvngx_dlssg.dll` in +the `ngx` folder, RTX 40 and 50), AMD FSR 4's (Windows), AMD FSR 3.1's (any GPU), then the renderer's own blend. Or pick one in **Frame generation method**: the row offers only the methods that run here, +and a frame the chosen method cannot make falls back to the built-in blend. The log's `vk: frame generation method:` line +says which is in effect (`RX_VK_FG_METHOD=0..4` picks one for a run). **The Windows release carries the renderer CI built** (`tools\prebuilt\hookshot_vk.dll`), with DLSS, DLSS 5 neural rendering and FSR 4 compiled in, and the Builder installs that one rather than compiling its own: your PC has none of @@ -305,6 +306,7 @@ choices and starts the game again, so progress since your last save is lost. | | Fullscreen | Off, On (the same as F11) | Off | | | GPU device | Auto, or each graphics card by name (after a restart) | Auto | | | Frame generation | Off, 2x to 8x | Off | +| | Frame generation method | Auto, NVIDIA DLSS, AMD FSR 4, AMD FSR 3.1, Built-in (only those that run on this PC; Auto takes the best of them) | Auto | | | Frame pacing | Off, On | Off | | | NVIDIA Reflex | Off, On, On + Boost (NVIDIA GPUs with `VK_NV_low_latency2`) | Off | | | Output resolution | 1920x1080, 2048x1152, 2560x1440, 3840x2160 (after a restart) | 2048x1152 | diff --git a/tests/run_all.py b/tests/run_all.py index 570c0726c..eabc3f5fd 100644 --- a/tests/run_all.py +++ b/tests/run_all.py @@ -42,6 +42,7 @@ "tests/test_text_speed.py": ["--cc", "gcc"], "tests/test_audio_in.py": ["--cc", "gcc", "--cxx", "g++"], "tests/test_upscale_fallback.py": ["--cxx", "g++"], + "tests/test_framegen_methods.py": ["--cxx", "g++"], "tests/test_upscale_contract.py": ["--cxx", "g++", "--headers", "{vulkan_headers}"], "tests/test_upscale_seam.py": ["--cxx", "g++"], "tests/test_fsr3_shaders.py": ["--glslang", "{glslang}", "--spirv-val", "{spirv_val}"], diff --git a/tests/test_framegen_methods.cpp b/tests/test_framegen_methods.cpp new file mode 100644 index 000000000..ab34423df --- /dev/null +++ b/tests/test_framegen_methods.cpp @@ -0,0 +1,29 @@ +// (hookshot) gpu/vk/framegen_methods.h: the Frame generation method row's stepping and what vk_framegen.cpp tries. +#include +#include "../gpu/vk/framegen_methods.h" + +namespace fgm = mkwvk::framegen_methods; +static int failures; +#define CHECK(name, c) do { if (!(c)) { std::printf("FAIL: %s\n", name); ++failures; } } while (0) + +int main() { + using namespace fgm; + const unsigned all = bit(AUTO) | bit(DLSS) | bit(FSR4) | bit(FSR3) | bit(BUILTIN); + const unsigned fsr3 = bit(FSR3); // (Auto and Built-in are always there) + CHECK("steps through all five", step(AUTO, 1, all) == DLSS && step(DLSS, 1, all) == FSR4 && step(FSR4, 1, all) == FSR3 && + step(FSR3, 1, all) == BUILTIN && step(BUILTIN, 1, all) == AUTO); + CHECK("steps back", step(AUTO, -1, all) == BUILTIN && step(DLSS, -1, all) == AUTO); + CHECK("skips what does not run", step(AUTO, 1, fsr3) == FSR3 && step(FSR3, 1, fsr3) == BUILTIN && + step(BUILTIN, 1, fsr3) == AUTO && step(AUTO, -1, fsr3) == BUILTIN); + CHECK("nothing but the always ones", step(AUTO, 1, 0) == BUILTIN && step(BUILTIN, 1, 0) == AUTO); + CHECK("a bad value steps from Auto", step(9, 1, all) == DLSS && step(-3, -1, all) == BUILTIN); + CHECK("a choice that runs is kept", effective(FSR3, fsr3) == FSR3 && effective(BUILTIN, 0) == BUILTIN); + CHECK("a choice that does not run is Auto", effective(DLSS, fsr3) == AUTO && effective(FSR4, 0) == AUTO && + effective(7, all) == AUTO); + CHECK("Auto tries every vendor method", tries(AUTO, DLSS) && tries(AUTO, FSR4) && tries(AUTO, FSR3)); + CHECK("a chosen method alone", tries(FSR3, FSR3) && !tries(FSR3, DLSS) && !tries(FSR3, FSR4)); + CHECK("built-in tries no vendor method", !tries(BUILTIN, DLSS) && !tries(BUILTIN, FSR4) && !tries(BUILTIN, FSR3)); + if (failures) return 1; + std::printf("PASS: the Frame generation method row steps over what runs, and Auto or one method is tried\n"); + return 0; +} diff --git a/tests/test_framegen_methods.py b/tests/test_framegen_methods.py new file mode 100644 index 000000000..4936504ad --- /dev/null +++ b/tests/test_framegen_methods.py @@ -0,0 +1,42 @@ +"""The Insert menu's Frame generation method row (gpu/vk/framegen_methods.h): its stepping, what a choice means, and that +the menu and vk_framegen.cpp use those rules rather than their own. No game or GPU required. + +python -I -B tests/test_framegen_methods.py [--cxx g++] +""" +import argparse +import subprocess +import tempfile +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] + + +def main(): + p = argparse.ArgumentParser(description=__doc__) + p.add_argument("--cxx", default="g++") + a = p.parse_args() + with tempfile.TemporaryDirectory(prefix="framegen-methods-") as tmp: + exe = Path(tmp) / "t" + subprocess.run([a.cxx, "-std=c++17", "-Wall", "-Wextra", "-Werror", str(ROOT / "tests" / "test_framegen_methods.cpp"), + "-o", str(exe)], check=True) + subprocess.run([str(exe)], check=True) + menu = (ROOT / "gpu" / "vk" / "vk_menu.cpp").read_text(encoding="utf-8") + fg = (ROOT / "gpu" / "vk" / "vk_framegen.cpp").read_text(encoding="utf-8") + for needle, where, what in ( + ('"Frame generation method", &opts.framegen_method', menu, "the row"), + ("framegen_methods::step(", menu, "set_row stepping through framegen_methods.h"), + ("fgm::effective(", menu, "the row showing the method in effect"), + ("fgm::effective(chosen, avail)", fg, "vk_framegen.cpp choosing through framegen_methods.h"), + ("fgm::tries(method, fgm::DLSS)", fg, "DLSS frame generation behind the choice"), + ("fgm::tries(method, fgm::FSR4)", fg, "FSR 4 frame generation behind the choice"), + ("fgm::tries(method, fgm::FSR3)", fg, "FSR 3.1 frame generation behind the choice")): + if needle not in where: + raise SystemExit("missing: %s (%s)" % (what, needle)) + # (the choice is read each frame, so the menu's change reaches the next frame: not cached in a static) + if "static const int chosen" in fg or "static int chosen" in fg: + raise SystemExit("vk_framegen.cpp caches the method: a change in the menu would wait for a restart") + print("PASS: the menu and frame generation take the method from framegen_methods.h, read live") + + +if __name__ == "__main__": + main() diff --git a/tests/test_rumble_menu.py b/tests/test_rumble_menu.py index 395510407..4016c3fea 100644 --- a/tests/test_rumble_menu.py +++ b/tests/test_rumble_menu.py @@ -82,6 +82,10 @@ def one_line(text, head): bool can_mic() { return false; } /* (the Upscaler row's choices, which set_row steps through: the game's own only, here) */ unsigned upscalers_available() { return 1; } +/* (the Frame generation method row's stepping, which set_row calls: the real rules, Auto and Built-in here) */ +#include "%(framegen_methods)s" +namespace framegen_methods = mkwvk::framegen_methods; +unsigned framegen_available() { return framegen_methods::always(); } void mic_chosen() {} // (set_row steps the Output row through vk_menu.cpp's step_output_choice (#1144): not what this checks) int step_output_choice(int id, int dir) { return id + dir; } @@ -165,6 +169,7 @@ def menu_fixture(): "snap": one_line(menu, "int rumble_step"), "ini_key": definition(menu, "const char* ini_key"), "set_row": definition(menu, "void set_row"), + "framegen_methods": str(ROOT / "gpu" / "vk" / "framegen_methods.h"), "wheel": block(tick, loop), "arrow": "bool press[5] = {false, false, false, !right, right}; " + arrow.group(1), "exempt": ", nullptr, false, true" if exempt else "", # (after the help: no hint, no restart) From 3dd651989820e64629d9eea34d691c28ddf6700f Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 9 Nov 2026 22:50:01 +0000 Subject: [PATCH 098/119] chore(release): 2.9.0 [skip ci] [skip release] ## [2.9.0](https://github.com/notquiteog/Hookshot/compare/v2.8.0...v2.9.0) (2026-11-09) ### Features * **vk:** choose the frame generation method in the Insert menu ([c4f7d84](https://github.com/notquiteog/Hookshot/commit/c4f7d84a3e509a517b1a4e8dd1ea348bfa69ac75)) --- changelog.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/changelog.txt b/changelog.txt index 4e51210e5..6d96a47c1 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,9 @@ --------------------------------------------------------------------------------------------------- +Version: 2.9.0 +Date: 09. 11. 2026 + Features: + - Vk: Choose the frame generation method in the Insert menu. +--------------------------------------------------------------------------------------------------- Version: 2.8.0 Date: 09. 11. 2026 Features: From 6fd4364778177e6696d5c6b7380d6d9034b5a36f Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 17:06:23 -0600 Subject: [PATCH 099/119] fix(release): the setup, the Builder and the game update from the repository they were built in Reported from v2.9.0: the fork's HookshotBuilder.exe installed upstream's Builder. The setup read hookshot-setup.txt from NotRexed/Hookshot's release, and the Builder's updater, its releases link, the game's update check (host/hos_update.c) and the Linux updater all named NotRexed/Hookshot too, so a fork's release could only ever install and offer upstream's. One setting now, HOOKSHOT_REPOSITORY (owner/name), defaulting to NotRexed/Hookshot so upstream's builds are unchanged: - builder/setup/setup.c: a compile-time define; windows-builder.yml passes the repository its CI runs in. - Builder (C#): tools/repository.txt, read by the new Repository class; scripts/release_parts.py package --repository writes it. - host/hos_update.c: a define from nx2/version.py repository() (that file, HOOKSHOT_REPOSITORY, or the default), given by nx2/build.py to that file only. - builder/linux/linux_update.py: repository.txt in the AppImage's tools, which scripts/linux/appimage.sh writes from GITHUB_REPOSITORY. Checked: setup.c and hos_update.c compile for Windows (mingw) and Linux; the preprocessed setup names notquiteog/Hookshot in all three URLs with the define, and NotRexed/Hookshot without it; version.py and linux_update.py fall back to NotRexed/Hookshot without the file. The C# has not been compiled here (no .NET on this machine): CI builds it. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/windows-builder.yml | 4 ++-- builder/HookshotBuilder/MainWindow.xaml.cs | 2 +- builder/HookshotBuilder/Repository.cs | 28 ++++++++++++++++++++++ builder/HookshotBuilder/Updater.cs | 4 ++-- builder/linux/linux_update.py | 22 +++++++++++++++-- builder/setup/setup.c | 13 +++++++--- host/hos_update.c | 17 +++++++++---- nx2/build.py | 3 ++- nx2/version.py | 22 +++++++++++++++++ scripts/linux/appimage.sh | 2 ++ scripts/release_parts.py | 6 +++++ 11 files changed, 107 insertions(+), 16 deletions(-) create mode 100644 builder/HookshotBuilder/Repository.cs diff --git a/.github/workflows/windows-builder.yml b/.github/workflows/windows-builder.yml index 54242093d..551587eeb 100644 --- a/.github/workflows/windows-builder.yml +++ b/.github/workflows/windows-builder.yml @@ -97,7 +97,7 @@ jobs: working-directory: builder/setup run: | "$LLVM_MINGW/bin/x86_64-w64-mingw32-windres" setup.rc -O coff -o "$RUNNER_TEMP/setup_rc.o" - "$LLVM_MINGW/bin/x86_64-w64-mingw32-clang" -O2 -mwindows -municode setup.c "$RUNNER_TEMP/setup_rc.o" \ + "$LLVM_MINGW/bin/x86_64-w64-mingw32-clang" -O2 -mwindows -municode -DHOOKSHOT_REPOSITORY="\"$GITHUB_REPOSITORY\"" setup.c "$RUNNER_TEMP/setup_rc.o" \ -lwinhttp -lbcrypt -lcomctl32 -lshell32 -lole32 -o "$RUNNER_TEMP/HookshotBuilder-Setup.exe" ls -l "$RUNNER_TEMP/HookshotBuilder-Setup.exe" @@ -134,7 +134,7 @@ jobs: run: >- python -I scripts/release_parts.py package "$RUNNER_TEMP/package" --publish "$RUNNER_TEMP/publish" --setup "$RUNNER_TEMP/HookshotBuilder-Setup.exe" ${PREVIOUS:+--list "$PREVIOUS"} - --vk "$RUNNER_TEMP/vk/hookshot_vk.dll" --amd-fsr "$RUNNER_TEMP/amd-fsr" + --vk "$RUNNER_TEMP/vk/hookshot_vk.dll" --amd-fsr "$RUNNER_TEMP/amd-fsr" --repository "$GITHUB_REPOSITORY" - name: Setup parts run: | diff --git a/builder/HookshotBuilder/MainWindow.xaml.cs b/builder/HookshotBuilder/MainWindow.xaml.cs index 5dfc532d0..c22d06db5 100644 --- a/builder/HookshotBuilder/MainWindow.xaml.cs +++ b/builder/HookshotBuilder/MainWindow.xaml.cs @@ -1115,7 +1115,7 @@ void Repair(object sender, RoutedEventArgs e) Application.Current.Shutdown(); return; } - Process.Start(new ProcessStartInfo("https://github.com/NotRexed/Hookshot/releases/latest") { UseShellExecute = true }); + Process.Start(new ProcessStartInfo("https://github.com/" + Repository.Name + "/releases/latest") { UseShellExecute = true }); } // ================= the update (Updater.cs): the game started this app with --update ================= diff --git a/builder/HookshotBuilder/Repository.cs b/builder/HookshotBuilder/Repository.cs new file mode 100644 index 000000000..8b7720b95 --- /dev/null +++ b/builder/HookshotBuilder/Repository.cs @@ -0,0 +1,28 @@ +using System; +using System.IO; +using System.Text.RegularExpressions; + +/// (hookshot) The GitHub repository releases come from, as owner/name: tools/repository.txt, written when the release is +/// packaged from the repository its CI ran in (scripts/release_parts.py package), else NotRexed/Hookshot. A fork's Builder +/// then updates from the fork. nx2/version.py repository() is the same rule for the game's own update check. +static class Repository +{ + const string Default = "NotRexed/Hookshot"; + static readonly Lazy name = new(Read); + public static string Name => name.Value; + + static string Read() + { + try + { + var path = Path.Combine(AppContext.BaseDirectory, "tools", "repository.txt"); + if (File.Exists(path)) + { + var line = File.ReadAllText(path).Trim(); + if (Regex.IsMatch(line, "^[A-Za-z0-9-]+/[A-Za-z0-9._-]+$")) return line; + } + } + catch (Exception) { } // (an unreadable file is the default, not a failed update check) + return Default; + } +} diff --git a/builder/HookshotBuilder/Updater.cs b/builder/HookshotBuilder/Updater.cs index 6b55a57fb..6bf44ce32 100644 --- a/builder/HookshotBuilder/Updater.cs +++ b/builder/HookshotBuilder/Updater.cs @@ -13,7 +13,7 @@ namespace HookshotBuilder; /// folder keeps). static class Updater { - const string Latest = "https://api.github.com/repos/NotRexed/Hookshot/releases/latest"; + static string Latest => "https://api.github.com/repos/" + Repository.Name + "/releases/latest"; const string Asset = "HookshotBuilder.zip"; const string SetupAsset = "HookshotBuilder.exe"; // (the setup, builder/setup/setup.c: a release holds it and its list) const string SetupList = "hookshot-setup.txt"; // (scripts/make_setup_parts.py) @@ -62,7 +62,7 @@ public static void FromCommandLine(MainWindow w) { try { - var list = await http.GetStringAsync("https://github.com/NotRexed/Hookshot/releases/latest/download/" + SetupList); + var list = await http.GetStringAsync("https://github.com/" + Repository.Name + "/releases/latest/download/" + SetupList); foreach (var line in list.Split('\n')) if (line.StartsWith("tag ")) return line[4..].Trim(); } diff --git a/builder/linux/linux_update.py b/builder/linux/linux_update.py index 861ebee7b..95efb660a 100644 --- a/builder/linux/linux_update.py +++ b/builder/linux/linux_update.py @@ -21,8 +21,26 @@ import zipfile LIST_NAME = "hookshot-linux.txt" -LATEST_LIST = "https://github.com/NotRexed/Hookshot/releases/latest/download/" + LIST_NAME -LATEST_API = "https://api.github.com/repos/NotRexed/Hookshot/releases/latest" + + +def _repository(): + """(hookshot) owner/name of the repository releases come from: repository.txt in the AppImage's tools (written by + scripts/linux/appimage.sh from the repository its CI ran in), else NotRexed/Hookshot. nx2/version.py's rule""" + import re + here = os.environ.get("HOOKSHOT_TOOLS") or os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "..") + try: + with open(os.path.join(here, "repository.txt"), encoding="utf-8") as f: + name = f.readline().strip() + if re.fullmatch(r"[A-Za-z0-9-]+/[A-Za-z0-9._-]+", name): + return name + except OSError: + pass + return "NotRexed/Hookshot" + + +REPOSITORY = _repository() +LATEST_LIST = "https://github.com/%s/releases/latest/download/%s" % (REPOSITORY, LIST_NAME) +LATEST_API = "https://api.github.com/repos/%s/releases/latest" % REPOSITORY class Part(object): diff --git a/builder/setup/setup.c b/builder/setup/setup.c index e79a0357d..b91353882 100644 --- a/builder/setup/setup.c +++ b/builder/setup/setup.c @@ -426,14 +426,21 @@ static void wanted_tag(char *out, size_t n) { /* (an update to a named release reads THAT release's list: the latest/download link can answer with the release before it for a while after a publish, and the setup then installed the old version again and started it with --fetched, which builds without checking: players pressed Update and stayed on v2.0.3, 2026-11-08) */ +/* (hookshot) the repository the setup installs from, owner/name: given by CI (.github/workflows/windows-builder.yml) from the + repository it builds in, so a fork's setup installs the fork's release */ +#ifndef HOOKSHOT_REPOSITORY +#define HOOKSHOT_REPOSITORY "NotRexed/Hookshot" +#endif +#define HOOKSHOT_WIDEN2(s) L##s +#define HOOKSHOT_WIDEN(s) HOOKSHOT_WIDEN2(s) static const char *manifest_url(void) { static char u[1024]; const char *e = getenv("HOOKSHOT_SETUP_LIST"); char tag[128]; wanted_tag(tag, sizeof tag); if (e && *e) snprintf(u, sizeof u, "%s", e); - else if (tag[0]) snprintf(u, sizeof u, "https://github.com/NotRexed/Hookshot/releases/download/%s/hookshot-setup.txt", tag); - else snprintf(u, sizeof u, "%s", "https://github.com/NotRexed/Hookshot/releases/latest/download/hookshot-setup.txt"); + else if (tag[0]) snprintf(u, sizeof u, "https://github.com/" HOOKSHOT_REPOSITORY "/releases/download/%s/hookshot-setup.txt", tag); + else snprintf(u, sizeof u, "%s", "https://github.com/" HOOKSHOT_REPOSITORY "/releases/latest/download/hookshot-setup.txt"); return u; } @@ -490,7 +497,7 @@ static DWORD WINAPI work(LPVOID unused) { if (!ok) fail(g_http_status == 404 ? L"The latest Hookshot release has no setup files yet. Download HookshotBuilder.zip from the releases page for now: " - L"https://github.com/NotRexed/Hookshot/releases/latest" + L"https://github.com/" HOOKSHOT_WIDEN(HOOKSHOT_REPOSITORY) L"/releases/latest" : g_http_status ? L"GitHub's download servers are failing right now (an error 500 or above, tried 8 times over 3 minutes). " L"This is on GitHub's side: try again in a few minutes, or later today." : L"Could not reach GitHub to get the Hookshot Builder. Check your internet connection and try again."); diff --git a/host/hos_update.c b/host/hos_update.c index 99514ff7f..4ee930302 100644 --- a/host/hos_update.c +++ b/host/hos_update.c @@ -12,9 +12,16 @@ #include #include +/* (hookshot) the repository releases come from, owner/name: nx2/version.py repository(), given by nx2/build.py. A fork's release + names the fork, so its players are offered the fork's updates */ +#ifndef HOOKSHOT_REPOSITORY +#define HOOKSHOT_REPOSITORY "NotRexed/Hookshot" +#endif +#define HOOKSHOT_WIDEN2(s) L##s +#define HOOKSHOT_WIDEN(s) HOOKSHOT_WIDEN2(s) #define UPDATE_HOST L"api.github.com" -#define UPDATE_PATH L"/repos/NotRexed/Hookshot/releases/latest" -#define RELEASES_PAGE L"https://github.com/NotRexed/Hookshot/releases/latest" +#define UPDATE_PATH L"/repos/" HOOKSHOT_WIDEN(HOOKSHOT_REPOSITORY) L"/releases/latest" +#define RELEASES_PAGE L"https://github.com/" HOOKSHOT_WIDEN(HOOKSHOT_REPOSITORY) L"/releases/latest" /* (a line "name=value" of a small text file, in UTF-8: its value, trimmed) */ static int read_value(const wchar_t *path, const char *name, char *out, size_t cap) { @@ -217,10 +224,10 @@ static int pipe_tag(const char *cmd, char *tag, size_t cap) { static int latest_tag(char *tag, size_t cap) { if (pipe_tag("curl -fsSL --max-time 4 --retry 2 -A Hookshot-update-check " "-H \"Accept: application/vnd.github+json\" " - "https://api.github.com/repos/NotRexed/Hookshot/releases/latest 2>/dev/null", tag, cap)) + "https://api.github.com/repos/" HOOKSHOT_REPOSITORY "/releases/latest 2>/dev/null", tag, cap)) return 1; return pipe_tag("curl -fsSL --max-time 8 --retry 2 -A Hookshot-update-check " - "https://github.com/NotRexed/Hookshot/releases/latest/download/hookshot-linux.txt 2>/dev/null", tag, cap); + "https://github.com/" HOOKSHOT_REPOSITORY "/releases/latest/download/hookshot-linux.txt 2>/dev/null", tag, cap); } /* the builder an update installed (builder/linux/linux_update.py): /hookshot/builder/versions//AppRun. The @@ -292,7 +299,7 @@ void hos_update_check(void) { if (strncmp(answer, "Update", 6)) return; if (!has_builder) { if (fork() == 0) { - execlp("xdg-open", "xdg-open", "https://github.com/NotRexed/Hookshot/releases/latest", (char *)0); + execlp("xdg-open", "xdg-open", "https://github.com/" HOOKSHOT_REPOSITORY "/releases/latest", (char *)0); _exit(127); } return; diff --git a/nx2/build.py b/nx2/build.py index 519b272bd..4aa17ca5e 100644 --- a/nx2/build.py +++ b/nx2/build.py @@ -776,7 +776,8 @@ def main(): host_fl + ["-I" + os.path.join(OPUS, "include")] + (["-I" + os.path.join(FFMPEG, "include")] if FFMPEG else []) + (FFMPEG_LX[0] if LINUX and FFMPEG_LX else []) + - ([stamp_def] if os.path.basename(s) == "hos_main.c" else []), host_deps) for s in host_srcs] + ([stamp_def] if os.path.basename(s) == "hos_main.c" else []) + + ([version.repository_define()] if os.path.basename(s) == "hos_update.c" else []), host_deps) for s in host_srcs] # libopus 1.5.2 (third_party/opus, from TOTKPort): nn::codec's hardware Opus decoder (host/nn_codec.c) # (hookshot: built for the same CPU target as the rest (CPU), so its float code can be vectorized where the target has # AVX2: the vendored copy has no x86 intrinsics files of its own) diff --git a/nx2/version.py b/nx2/version.py index 459da023c..2dfcf88be 100644 --- a/nx2/version.py +++ b/nx2/version.py @@ -58,6 +58,28 @@ def fingerprint(root=ROOT): return h.hexdigest()[:8] +DEFAULT_REPOSITORY = "NotRexed/Hookshot" + + +def repository(root=ROOT): + """(hookshot) The GitHub repository this release came from, as owner/name: where the game's update check, the Builder's + updater and the setup look for releases. HOOKSHOT_REPOSITORY, else a repository.txt at the root (written when a release + is packaged, from the repository its CI ran in: scripts/release_parts.py package, scripts/linux/appimage.sh), else + NotRexed/Hookshot. A fork's release then updates from the fork, and a source build from this repository as before.""" + name = os.environ.get("HOOKSHOT_REPOSITORY", "").strip() + if not name: + try: + with open(os.path.join(root, "repository.txt"), encoding="utf-8") as f: + name = f.readline().strip() + except OSError: + pass + return name if re.fullmatch(r"[A-Za-z0-9-]+/[A-Za-z0-9._-]+", name or "") else DEFAULT_REPOSITORY + + +def repository_define(root=ROOT): + return '-DHOOKSHOT_REPOSITORY="%s"' % repository(root) + + def describe(root=ROOT): """'movie-sync (source 1a2b3c4d)': safe to pass as a C string literal on any command line.""" text = "%s (source %s)" % (release(root), fingerprint(root)) diff --git a/scripts/linux/appimage.sh b/scripts/linux/appimage.sh index 6464af377..0e298993c 100755 --- a/scripts/linux/appimage.sh +++ b/scripts/linux/appimage.sh @@ -44,6 +44,8 @@ L=$APPDIR/usr/lib/hookshot cp -a nx2 host LICENSE readme.md assets "$T/" printf '%s ' "$VERSION" > "$T/VERSION" # (no git history in here: nx2/version.py reads the release name from it) +# (hookshot) the repository releases come from, for the update checks (nx2/version.py repository, builder/linux/linux_update.py) +printf '%s\n' "${GITHUB_REPOSITORY:-NotRexed/Hookshot}" > "$T/repository.txt" mkdir -p "$T/builder" "$T/gpu/render" "$T/gpu/vk" "$T/third_party" cp -a builder/linux "$T/builder/" cp -a gpu/render/*.h "$T/gpu/render/" diff --git a/scripts/release_parts.py b/scripts/release_parts.py index 0c4fe4c79..82b524d2a 100644 --- a/scripts/release_parts.py +++ b/scripts/release_parts.py @@ -209,6 +209,11 @@ def package(a): if os.path.isfile(os.path.join(a.amd_fsr, "LICENSE.txt")): copy(os.path.join(a.amd_fsr, "LICENSE.txt"), os.path.join(tools, "amd-fsr", "LICENSE.txt")) print("AMD FSR runtime: %d DLLs from %s" % (n, a.amd_fsr)) + # (hookshot) the repository the release is from, for the Builder's updater and the game's update check (nx2/version.py) + if a.repository: + with open(os.path.join(tools, "repository.txt"), "w", encoding="utf-8", newline="\n") as f: + f.write(a.repository.strip() + "\n") + print("repository: %s" % a.repository.strip()) print("package folder: %s" % out) return 0 @@ -233,6 +238,7 @@ def main(): s.add_argument("--list") s.add_argument("--vk", help="(hookshot) a hookshot_vk.dll built by CI, into tools/prebuilt") s.add_argument("--amd-fsr", help="(hookshot) a folder holding AMD's amd_fidelityfx_*_vk.dll, into tools/amd-fsr") + s.add_argument("--repository", help="(hookshot) owner/name the release is from, into tools/repository.txt") a = p.parse_args() return {"previous": previous, "profile": profile, "llvm-mingw": llvm_mingw, "package": package}[a.cmd](a) From dfa6315107d8bf0eced7f769c5240709c1d0661b Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 17:07:43 -0600 Subject: [PATCH 100/119] build(vk): OpenDLSS-NR's kernels, the frame's two passes and a Vulkan shim scripts/opennr_kernels.py compiles the thirteen vendored GLSL kernels with upstream's glslang flags into gpu/vk/shaders/opennr_kernels_spv.h (checked in, like every shader here) and the backend's own preprocess and composite passes into their headers; --check recompiles and compares. The PTX is generated at build time from upstream's Python generators with exactly upstream's variant list. Upstream's host code is MSVC-only: the one construct clang and GCC refuse (a nested struct's default member initializers used in a default argument) is patched in a build-time copy, so third_party stays byte for byte upstream's. gpu/vk/opennr/volk.h stands in for volk over Hookshot's own loader, in a namespace of its own, so no global vk* symbols are exported. Co-Authored-By: Claude Opus 5.5 --- gpu/vk/opennr/volk.h | 69 + gpu/vk/opennr/volk_shim.cpp | 71 + gpu/vk/shaders/opennr_common.glsl | 112 + gpu/vk/shaders/opennr_kernels_spv.h | 10715 ++++++++++++++++++++++++ gpu/vk/shaders/opennr_post.comp | 93 + gpu/vk/shaders/opennr_post_comp_spv.h | 761 ++ gpu/vk/shaders/opennr_pre.comp | 60 + gpu/vk/shaders/opennr_pre_comp_spv.h | 620 ++ scripts/opennr_kernels.py | 281 + tests/test_opennr_kernels.py | 68 + 10 files changed, 12850 insertions(+) create mode 100644 gpu/vk/opennr/volk.h create mode 100644 gpu/vk/opennr/volk_shim.cpp create mode 100644 gpu/vk/shaders/opennr_common.glsl create mode 100644 gpu/vk/shaders/opennr_kernels_spv.h create mode 100644 gpu/vk/shaders/opennr_post.comp create mode 100644 gpu/vk/shaders/opennr_post_comp_spv.h create mode 100644 gpu/vk/shaders/opennr_pre.comp create mode 100644 gpu/vk/shaders/opennr_pre_comp_spv.h create mode 100644 scripts/opennr_kernels.py create mode 100644 tests/test_opennr_kernels.py diff --git a/gpu/vk/opennr/volk.h b/gpu/vk/opennr/volk.h new file mode 100644 index 000000000..a40c4dffd --- /dev/null +++ b/gpu/vk/opennr/volk.h @@ -0,0 +1,69 @@ +// (hookshot) The volk.h OpenDLSS-NR's host code includes (third_party/opendlss-nr/src/vk_context.h), as a shim. +// +// Upstream links volk; Hookshot has its own loader (gpu/vk/vk_loader.h) and does not. This declares the Vulkan +// entry points the vendored code calls, under the names it calls them by, in a namespace of their own (ovk) with a +// using-directive -- so they are not global C symbols named like libvulkan's own functions, which a shared object +// that exports `vkCreateBuffer` as a data symbol would be. The three volk calls the vendored code makes are here +// too. gpu/vk/opennr/volk_shim.cpp defines all of it. +// +// Only for the vendored sources and gpu/vk/opennr/*.cpp: everything else in gpu/vk uses vkx (vk_loader.h), and the +// two must not meet in one translation unit, where an unqualified vkCreateBuffer would be ambiguous. +#pragma once + +#ifndef VK_NO_PROTOTYPES +#define VK_NO_PROTOTYPES +#endif +#ifndef VK_ENABLE_BETA_EXTENSIONS +#define VK_ENABLE_BETA_EXTENSIONS // (VK_NV_cuda_kernel_launch is declared in vulkan_beta.h) +#endif +#include + +#include // (upstream's vk_context.h and nr_model.h call memcpy with no include of their own: MSVC's headers bring it) + +// global and instance level: resolved through vkGetInstanceProcAddr +#define OVK_GLOBAL(X) X(vkCreateInstance) X(vkEnumerateInstanceLayerProperties) X(vkEnumerateInstanceExtensionProperties) + +#define OVK_INSTANCE(X) \ + X(vkDestroyInstance) X(vkEnumeratePhysicalDevices) X(vkGetPhysicalDeviceProperties) \ + X(vkGetPhysicalDeviceProperties2) X(vkGetPhysicalDeviceFeatures2) X(vkGetPhysicalDeviceQueueFamilyProperties) \ + X(vkGetPhysicalDeviceMemoryProperties) X(vkEnumerateDeviceExtensionProperties) X(vkCreateDevice) \ + X(vkGetDeviceProcAddr) X(vkCreateDebugUtilsMessengerEXT) X(vkDestroyDebugUtilsMessengerEXT) \ + X(vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR) + +// device level: resolved through vkGetDeviceProcAddr once the device is known +#define OVK_DEVICE(X) \ + X(vkDestroyDevice) X(vkGetDeviceQueue) X(vkDeviceWaitIdle) X(vkQueueSubmit) X(vkQueueWaitIdle) \ + X(vkCreateBuffer) X(vkDestroyBuffer) X(vkGetBufferMemoryRequirements) X(vkAllocateMemory) X(vkFreeMemory) \ + X(vkBindBufferMemory) X(vkMapMemory) X(vkUnmapMemory) X(vkGetBufferDeviceAddress) \ + X(vkCreateShaderModule) X(vkDestroyShaderModule) X(vkCreateComputePipelines) X(vkDestroyPipeline) \ + X(vkCreatePipelineLayout) X(vkDestroyPipelineLayout) X(vkCreateDescriptorSetLayout) \ + X(vkDestroyDescriptorSetLayout) X(vkCreateDescriptorPool) X(vkDestroyDescriptorPool) X(vkResetDescriptorPool) \ + X(vkAllocateDescriptorSets) X(vkUpdateDescriptorSets) X(vkCreateCommandPool) X(vkDestroyCommandPool) \ + X(vkResetCommandPool) X(vkAllocateCommandBuffers) X(vkFreeCommandBuffers) X(vkBeginCommandBuffer) \ + X(vkEndCommandBuffer) X(vkCmdExecuteCommands) X(vkCmdBindPipeline) X(vkCmdBindDescriptorSets) \ + X(vkCmdPushConstants) X(vkCmdDispatch) X(vkCmdPipelineBarrier2) X(vkCmdCopyBuffer) X(vkCmdFillBuffer) \ + X(vkCmdUpdateBuffer) X(vkCreateQueryPool) X(vkDestroyQueryPool) X(vkResetQueryPool) X(vkCmdResetQueryPool) \ + X(vkCmdWriteTimestamp) X(vkGetQueryPoolResults) X(vkGetPipelineExecutablePropertiesKHR) \ + X(vkGetPipelineExecutableStatisticsKHR) X(vkGetPipelineExecutableInternalRepresentationsKHR) \ + X(vkCreateCudaModuleNV) X(vkCreateCudaFunctionNV) X(vkDestroyCudaFunctionNV) X(vkDestroyCudaModuleNV) \ + X(vkCmdCudaLaunchKernelNV) + +namespace ovk { +#define OVK_DECLARE(f) extern PFN_##f f; +OVK_GLOBAL(OVK_DECLARE) +OVK_INSTANCE(OVK_DECLARE) +OVK_DEVICE(OVK_DECLARE) +#undef OVK_DECLARE +extern PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr; + +/// Hookshot: resolve through the renderer's own loader instead of opening the Vulkan library a second time. Call it +/// before anything of OpenDLSS-NR's runs; the harness does not, and volkInitialize then opens the library itself. +void volkUseInstanceProcAddr(PFN_vkGetInstanceProcAddr get_instance_proc_addr); + +// volk's three, with volk's meaning: the library and the global functions; the instance's; the device's +VkResult volkInitialize(); +void volkLoadInstance(VkInstance instance); +void volkLoadDevice(VkDevice device); +} // namespace ovk + +using namespace ovk; diff --git a/gpu/vk/opennr/volk_shim.cpp b/gpu/vk/opennr/volk_shim.cpp new file mode 100644 index 000000000..357258a2b --- /dev/null +++ b/gpu/vk/opennr/volk_shim.cpp @@ -0,0 +1,71 @@ +// (hookshot) The definitions behind gpu/vk/opennr/volk.h: OpenDLSS-NR's Vulkan entry points and volk's three calls. +#include "volk.h" + +#ifdef _WIN32 +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#ifndef NOMINMAX +#define NOMINMAX +#endif +#include +#else +#include +#endif + +namespace ovk { +#define OVK_DEFINE(f) PFN_##f f = nullptr; +OVK_GLOBAL(OVK_DEFINE) +OVK_INSTANCE(OVK_DEFINE) +OVK_DEVICE(OVK_DEFINE) +#undef OVK_DEFINE +PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr = nullptr; + +namespace { +PFN_vkGetInstanceProcAddr given = nullptr; +VkInstance loaded_instance = VK_NULL_HANDLE; + +PFN_vkGetInstanceProcAddr open_library() { +#ifdef _WIN32 + HMODULE m = LoadLibraryA("vulkan-1.dll"); + return m ? (PFN_vkGetInstanceProcAddr)(void*)GetProcAddress(m, "vkGetInstanceProcAddr") : nullptr; +#else + void* m = dlopen("libvulkan.so.1", RTLD_NOW | RTLD_LOCAL); + if (!m) m = dlopen("libvulkan.so", RTLD_NOW | RTLD_LOCAL); + return m ? (PFN_vkGetInstanceProcAddr)dlsym(m, "vkGetInstanceProcAddr") : nullptr; +#endif +} +} // namespace + +void volkUseInstanceProcAddr(PFN_vkGetInstanceProcAddr get_instance_proc_addr) { + given = get_instance_proc_addr; +} + +VkResult volkInitialize() { + if (!vkGetInstanceProcAddr) vkGetInstanceProcAddr = given ? given : open_library(); + if (!vkGetInstanceProcAddr) return VK_ERROR_INITIALIZATION_FAILED; +#define OVK_LOAD_GLOBAL(f) f = (PFN_##f)vkGetInstanceProcAddr(VK_NULL_HANDLE, #f); + OVK_GLOBAL(OVK_LOAD_GLOBAL) +#undef OVK_LOAD_GLOBAL + return VK_SUCCESS; +} + +void volkLoadInstance(VkInstance instance) { + loaded_instance = instance; +#define OVK_LOAD_INSTANCE(f) f = (PFN_##f)vkGetInstanceProcAddr(instance, #f); + OVK_INSTANCE(OVK_LOAD_INSTANCE) + // (until volkLoadDevice: the device's functions through the instance, as volk does, so a caller that loads only + // the instance still has them) + OVK_DEVICE(OVK_LOAD_INSTANCE) +#undef OVK_LOAD_INSTANCE +} + +void volkLoadDevice(VkDevice device) { + if (!vkGetDeviceProcAddr && loaded_instance) + vkGetDeviceProcAddr = (PFN_vkGetDeviceProcAddr)vkGetInstanceProcAddr(loaded_instance, "vkGetDeviceProcAddr"); + if (!vkGetDeviceProcAddr) return; +#define OVK_LOAD_DEVICE(f) f = (PFN_##f)vkGetDeviceProcAddr(device, #f); + OVK_DEVICE(OVK_LOAD_DEVICE) +#undef OVK_LOAD_DEVICE +} +} // namespace ovk diff --git a/gpu/vk/shaders/opennr_common.glsl b/gpu/vk/shaders/opennr_common.glsl new file mode 100644 index 000000000..4f1e43ef0 --- /dev/null +++ b/gpu/vk/shaders/opennr_common.glsl @@ -0,0 +1,112 @@ +// (hookshot) What the open neural rendering backend's two frame passes share (opennr_pre.comp, opennr_post.comp). +// +// The arithmetic here follows OpenDLSS-NR's demo frame (https://github.com/maanHimself/OpenDLSS-NR, MIT, Copyright +// 2026 maan: demo/shaders/nr_common.glsl, nr_preprocess.comp and nr_composite.comp, and its docs/frame.md): the +// half publications are spelled on the bit pattern because NVIDIA's GLSL compiler removes float(float16_t(x)), the +// Box-Muller noise keeps upstream's instruction order (its approximate transcendentals make it order dependent), +// and the history is truncated to the half grid, not rounded, because the next frame's input reads it. + +// The binding set both passes use (gpu/vk/vk_opennr.cpp makes one layout for the two) +layout(binding = 0, rgba8) uniform readonly image2D in_color; // the frame, display-encoded code values +layout(binding = 1) uniform sampler2D history_prev; // the previous output, half code values +layout(binding = 2) uniform sampler2D motion; // render pixels toward the previous frame +layout(std430, binding = 3) buffer Features { vec4 features[]; }; // f32 [fullHeight][fullWidth][16], 4 vec4 a pixel +layout(std430, binding = 4) readonly buffer Head { float head[]; }; // f32 [fullHeight][fullWidth][4] +layout(binding = 5, rgba8) uniform writeonly image2D out_color; +layout(binding = 6, rgba16f) uniform writeonly image2D history_next; + +layout(push_constant) uniform Push { + uint full_width, full_height, valid_width, valid_height; + uint seed, history_valid, motion_valid, auto_mask; + float style, local_tone, local_structure, skin; + vec2 motion_size; // the motion target's size: the scene's render size + float blend_scale, intensity; +} pc; + +float roundF16(float value) { + uint bits = floatBitsToUint(value); + uint sign = bits & 0x80000000u; + uint magnitude = bits & 0x7fffffffu; + if (magnitude >= 0x7f800000u) return value; + if (magnitude >= 0x477ff000u) return uintBitsToFloat(sign | 0x7f800000u); + if (magnitude < 0x38800000u) { + float scaled = roundEven(uintBitsToFloat(magnitude) * 16777216.0); + return uintBitsToFloat(sign) + uintBitsToFloat(sign | floatBitsToUint(scaled * 0.000000059604644775390625)); + } + uint lsb = (magnitude >> 13u) & 1u; + uint rounded = (magnitude + 0xfffu + lsb) & ~0x1fffu; + return uintBitsToFloat(sign | rounded); +} + +float truncateHalf(float value) { + uint bits = floatBitsToUint(value); + uint signBit = (bits >> 16u) & 0x8000u; + uint exponent = (bits >> 23u) & 0xffu; + uint mantissa = bits & 0x7fffffu; + uint halfBits; + if (exponent == 0xffu) { + halfBits = signBit | (mantissa != 0u ? 0x7e00u : 0x7c00u); + } else { + int halfExponent = int(exponent) - 112; + if (halfExponent >= 31) halfBits = signBit | 0x7c00u; + else if (halfExponent <= 0) { + if (halfExponent < -10) halfBits = signBit; + else halfBits = signBit | ((mantissa | 0x800000u) >> uint(14 - halfExponent)); + } else halfBits = signBit | (uint(halfExponent) << 10u) | (mantissa >> 13u); + } + return unpackHalf2x16(halfBits).x; +} + +// A code value as the network's lanes 4-9 take it: f16((f16(c) - 0.5) * 0.125) +vec3 centred(vec3 code) { + return vec3(roundF16(roundF16(roundF16(code.r) - 0.5) * 0.125), roundF16(roundF16(roundF16(code.g) - 0.5) * 0.125), + roundF16(roundF16(roundF16(code.b) - 0.5) * 0.125)); +} + +// Where `pixel` of the frame was in the previous one, in uv. The motion is the scene's, at its render size, which +// the window's frame fills; HUD pixels get the scene's motion under them, which is wrong for them and which the +// network's own blend logit is left to reject (docs/neural-rendering.md says so). +vec2 history_uv(vec2 pixel) { + vec2 uv = (pixel + 0.5) / vec2(pc.valid_width, pc.valid_height); + ivec2 size = textureSize(motion, 0); + ivec2 at = min(ivec2(uv * vec2(size)), size - 1); + return uv + texelFetch(motion, at, 0).xy / pc.motion_size; +} + +bool has_history(vec2 pixel) { + if (pc.history_valid == 0u) return false; + if (pc.motion_valid == 0u) return true; // (no motion this frame: the history is taken at the same pixel) + vec2 uv = history_uv(pixel); + return all(greaterThanEqual(uv, vec2(0.0))) && all(lessThanEqual(uv, vec2(1.0))); +} + +// Five-tap Catmull-Rom reconstruction of the history at the reprojected position (upstream's historySample): a +// box or bilinear filter softens the image frame over frame, because the history is fed back into the input. +vec3 history_sample(vec2 pixel) { + vec2 valid = vec2(pc.valid_width, pc.valid_height); + vec2 uv = pc.motion_valid != 0u ? history_uv(pixel) : (pixel + 0.5) / valid; + vec2 position = uv * valid; + vec2 base = floor(position - 0.5) + 0.5; + vec2 f = clamp(position - base, vec2(0.0), vec2(1.0)); + vec2 square = f * f; vec2 cube = f * square; + vec2 w0 = fma(f + cube, vec2(-0.5), square); + vec2 w1 = (cube * 1.5 - square * 2.5) + 1.0; + vec2 w3 = (cube - square) * 0.5; + vec2 w2 = ((1.0 - w0) - w1) - w3; + vec2 middle = w1 + w2; + vec2 low = clamp(base - 1.0, vec2(0.5), valid - 0.5) / valid; + vec2 center = clamp(base + w2 / middle, vec2(0.5), valid - 0.5) / valid; + vec2 high = clamp(base + 2.0, vec2(0.5), valid - 0.5) / valid; + vec3 left = textureLod(history_prev, vec2(low.x, center.y), 0.0).rgb; + vec3 top = textureLod(history_prev, vec2(center.x, low.y), 0.0).rgb; + vec3 mid = textureLod(history_prev, center, 0.0).rgb; + vec3 bottom = textureLod(history_prev, vec2(center.x, high.y), 0.0).rgb; + vec3 right = textureLod(history_prev, vec2(high.x, center.y), 0.0).rgb; + float a = w0.x * middle.y; float b = w0.y * middle.x; + float c = middle.x * middle.y; float d = w3.y * middle.x; float e = w3.x * middle.y; + vec3 value = fma(left, vec3(a), top * b); + value = fma(mid, vec3(c), value); + value = fma(bottom, vec3(d), value); + value = fma(right, vec3(e), value); + return value * (1.0 / (e + (d + (c + (a + b))))); +} diff --git a/gpu/vk/shaders/opennr_kernels_spv.h b/gpu/vk/shaders/opennr_kernels_spv.h new file mode 100644 index 000000000..020aff58a --- /dev/null +++ b/gpu/vk/shaders/opennr_kernels_spv.h @@ -0,0 +1,10715 @@ +// Generated by scripts/opennr_kernels.py from third_party/opendlss-nr/shaders: do not edit. +// glslang -V --target-env vulkan1.3 -I, as upstream's scripts/build_shaders.ps1. The SPIR-V words of each module; +// gpu/vk/vk_opennr.cpp writes them out as the .spv files nr::Kernels loads. +#pragma once + +#include + +namespace mkwvk::opennr_spv { +inline constexpr uint32_t k_gemm_fp8[] = { + 0x07230203,0x00010600,0x0008000b,0x00000a83,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x00000027,0x00020011,0x0000003d,0x00020011, + 0x00001074,0x00020011,0x00001075,0x00020011,0x00001151,0x00020011,0x000014e1,0x00020011, + 0x00001786,0x0005000a,0x5f565053,0x5f545845,0x616f6c66,0x00003874,0x0008000a,0x5f565053, + 0x5f52484b,0x706f6f63,0x74617265,0x5f657669,0x7274616d,0x00007869,0x0006000b,0x00000001, + 0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000003,0x0017000f, + 0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000089,0x000000ba,0x00000144,0x00000150, + 0x0000015d,0x00000162,0x00000165,0x00000168,0x00000175,0x000001cd,0x0000026d,0x000002c6, + 0x0000036a,0x000003a2,0x00000a76,0x00000a7a,0x00000a7e,0x00000a82,0x0006014b,0x00000004, + 0x00000026,0x00000007,0x00000008,0x00000008,0x00030003,0x00000002,0x000001cc,0x00090004, + 0x455f4c47,0x635f5458,0x72746e6f,0x665f6c6f,0x5f776f6c,0x72747461,0x74756269,0x00007365, + 0x00060004,0x455f4c47,0x665f5458,0x74616f6c,0x6d34655f,0x00000033,0x00080004,0x455f4c47, + 0x735f5458,0x65646168,0x36315f72,0x5f746962,0x726f7473,0x00656761,0x00080004,0x455f4c47, + 0x735f5458,0x65646168,0x62385f72,0x735f7469,0x61726f74,0x00006567,0x000b0004,0x455f4c47, + 0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63, + 0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c, + 0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63, + 0x69645f65,0x74636572,0x00657669,0x00080004,0x4b5f4c47,0x635f5248,0x65706f6f,0x69746172, + 0x6d5f6576,0x69727461,0x00000078,0x00090004,0x4b5f4c47,0x6d5f5248,0x726f6d65,0x63735f79, + 0x5f65706f,0x616d6573,0x6369746e,0x00000073,0x00090004,0x4b5f4c47,0x735f5248,0x65646168, + 0x75735f72,0x6f726762,0x625f7075,0x63697361,0x00000000,0x00080004,0x4e5f4c47,0x6f635f56, + 0x7265706f,0x76697461,0x616d5f65,0x78697274,0x00000032,0x00040005,0x00000004,0x6e69616d, + 0x00000000,0x00070005,0x0000000f,0x336d3465,0x61507748,0x76287269,0x32363166,0x0000003b, + 0x00040005,0x0000000e,0x756c6176,0x00000065,0x00060005,0x00000015,0x336d3465,0x6f547748, + 0x28323346,0x003b3175,0x00040005,0x00000014,0x65646f63,0x00000000,0x00060005,0x00000019, + 0x756c6973,0x72696150,0x31667628,0x003b3236,0x00040005,0x00000018,0x756c6176,0x00000065, + 0x00060005,0x0000001b,0x67627573,0x70756f72,0x636e7953,0x00000028,0x00090005,0x00000024, + 0x64616f6c,0x69736552,0x6c617564,0x75283631,0x66763b31,0x5d385b32,0x0000003b,0x00060005, + 0x00000022,0x6d656c65,0x49746e65,0x7865646e,0x00000000,0x00030005,0x00000023,0x00000072, + 0x00090005,0x0000002d,0x6c627570,0x31687369,0x75762836,0x75763b34,0x31753b34,0x3b31753b, + 0x00000000,0x00030005,0x00000029,0x00003076,0x00030005,0x0000002a,0x00003176,0x00040005, + 0x0000002b,0x65646e69,0x00000078,0x00040005,0x0000002c,0x756c6f63,0x00006e6d,0x00040005, + 0x0000002f,0x61656c63,0x0000006e,0x00050005,0x0000003b,0x766e6f63,0x65747265,0x00000064, + 0x00040005,0x00000041,0x65646f63,0x00000073,0x00040005,0x00000052,0x756c6176,0x00000065, + 0x00040005,0x00000060,0x6e756f62,0x00646564,0x00040005,0x00000067,0x656e6e69,0x00000072, + 0x00050005,0x0000006f,0x796c6f70,0x696d6f6e,0x00006c61,0x00040005,0x00000075,0x75736572, + 0x0000746c,0x00040005,0x0000007f,0x47414c46,0x00000053,0x00040005,0x00000085,0x65646f63, + 0x00000073,0x00050005,0x00000087,0x69736552,0x6c617564,0x00003445,0x00070006,0x00000087, + 0x00000000,0x69736572,0x6c617564,0x36317838,0x00000000,0x00030005,0x00000089,0x00000000, + 0x00030005,0x00000092,0x00000069,0x00040005,0x0000009a,0x72696170,0x00000000,0x00040005, + 0x000000a9,0x61726170,0x0000006d,0x00040005,0x000000ad,0x61726170,0x0000006d,0x00030005, + 0x000000b6,0x00003077,0x00060005,0x000000b8,0x69736552,0x6c617564,0x666c6148,0x00000000, + 0x00070006,0x000000b8,0x00000000,0x69736572,0x6c617564,0x38783631,0x00000000,0x00030005, + 0x000000ba,0x00000000,0x00030005,0x000000bf,0x00003177,0x00030005,0x000000c5,0x00000069, + 0x00030005,0x000000e2,0x00000069,0x00040005,0x000000ef,0x61726170,0x0000006d,0x00040005, + 0x000000f8,0x61726170,0x0000006d,0x00040005,0x00000103,0x65646f63,0x00000073,0x00040005, + 0x00000107,0x61726170,0x0000006d,0x00040005,0x0000010d,0x61726170,0x0000006d,0x00040005, + 0x00000117,0x61726170,0x0000006d,0x00040005,0x0000011d,0x61726170,0x0000006d,0x00040005, + 0x00000126,0x61726170,0x0000006d,0x00040005,0x0000012c,0x61726170,0x0000006d,0x00040005, + 0x00000135,0x61726170,0x0000006d,0x00040005,0x0000013b,0x61726170,0x0000006d,0x00050005, + 0x00000142,0x7074754f,0x34457475,0x00000000,0x00050006,0x00000142,0x00000000,0x3874756f, + 0x00363178,0x00030005,0x00000144,0x00000000,0x00050005,0x0000014e,0x7074754f,0x61487475, + 0x0000666c,0x00050006,0x0000014e,0x00000000,0x3174756f,0x00387836,0x00030005,0x00000150, + 0x00000000,0x00040005,0x0000015a,0x65726874,0x00006461,0x00080005,0x0000015d,0x4c5f6c67, + 0x6c61636f,0x6f766e49,0x69746163,0x44496e6f,0x00000000,0x00050005,0x00000161,0x67627573, + 0x70756f72,0x00000000,0x00060005,0x00000162,0x535f6c67,0x72676275,0x4970756f,0x00000044, + 0x00040005,0x00000164,0x656e616c,0x00000000,0x00080005,0x00000165,0x535f6c67,0x72676275, + 0x4970756f,0x636f766e,0x6f697461,0x0044496e,0x00040005,0x00000167,0x696c7073,0x00000074, + 0x00060005,0x00000168,0x575f6c67,0x476b726f,0x70756f72,0x00004449,0x00040005,0x0000016b, + 0x494c5053,0x00004b54,0x00060005,0x0000016d,0x756c6f63,0x694c6e6d,0x7261656e,0x00000000, + 0x00040005,0x00000171,0x63746162,0x00000068,0x00040005,0x00000173,0x68737550,0x00000000, + 0x00050006,0x00000173,0x00000000,0x73776f72,0x00000000,0x00040006,0x00000173,0x00000001, + 0x0000004e,0x00050006,0x00000173,0x00000002,0x74616d4e,0x00786972,0x00080006,0x00000173, + 0x00000003,0x67696577,0x6f437468,0x6e6d756c,0x7366664f,0x00007465,0x00060006,0x00000173, + 0x00000004,0x75706e69,0x72745374,0x00656469,0x00070006,0x00000173,0x00000005,0x75706e69, + 0x6c6f4374,0x426e6d75,0x00657361,0x00070006,0x00000173,0x00000006,0x7074756f,0x74537475, + 0x65646972,0x00000000,0x00080006,0x00000173,0x00000007,0x7074756f,0x6f437475,0x6e6d756c, + 0x7366664f,0x00007465,0x00070006,0x00000173,0x00000008,0x48787561,0x4f666c61,0x65736666, + 0x00000074,0x00050006,0x00000173,0x00000009,0x63746162,0x00736568,0x00070006,0x00000173, + 0x0000000a,0x756c6f63,0x72476e6d,0x7370756f,0x00000000,0x00060006,0x00000173,0x0000000b, + 0x696c7073,0x72745374,0x00656469,0x00030005,0x00000175,0x00006370,0x00050005,0x0000017b, + 0x756c6f63,0x72476e6d,0x0070756f,0x00050005,0x00000180,0x636f6c62,0x776f526b,0x00000000, + 0x00050005,0x00000187,0x47425553,0x50554f52,0x00000053,0x00030005,0x00000188,0x00004d42, + 0x00040005,0x0000018a,0x42776f72,0x00657361,0x00040005,0x0000018f,0x426c6f63,0x00657361, + 0x00040005,0x00000191,0x454c4954,0x00000053,0x00030005,0x00000192,0x00004e42,0x00050005, + 0x00000194,0x67617473,0x73614265,0x00000065,0x00050005,0x00000198,0x4374756f,0x6d756c6f, + 0x0000006e,0x00050005,0x000001a2,0x73776f72,0x696c6156,0x00000064,0x00060005,0x000001a7, + 0x64656573,0x69736552,0x6c617564,0x00000000,0x00030005,0x000001ad,0x00000074,0x00030005, + 0x000001bd,0x00776f72,0x00030005,0x000001c6,0x00636361,0x00070005,0x000001cb,0x69736552, + 0x6c617564,0x666c6148,0x74616c46,0x00000000,0x00060006,0x000001cb,0x00000000,0x69736572, + 0x6c617564,0x00003631,0x00030005,0x000001cd,0x00000000,0x00040005,0x000001f3,0x42697065, + 0x00657361,0x00040005,0x00000202,0x73736170,0x00000000,0x00050005,0x0000020a,0x73736170, + 0x656c6954,0x00000073,0x00030005,0x00000215,0x0072706c,0x00030005,0x00000220,0x00697072, + 0x00040005,0x00000224,0x72617571,0x00726574,0x00030005,0x00000228,0x00007469,0x00030005, + 0x00000235,0x00000072,0x00030005,0x0000023d,0x00776f72,0x00040005,0x00000250,0x756c6f63, + 0x00006e6d,0x00030005,0x00000260,0x00736572,0x00040005,0x00000261,0x61726170,0x0000006d, + 0x00040005,0x00000262,0x61726170,0x0000006d,0x00030005,0x00000269,0x00003073,0x00030005, + 0x0000026b,0x00787541,0x00050006,0x0000026b,0x00000000,0x31787561,0x00387836,0x00030005, + 0x0000026d,0x00000000,0x00030005,0x00000276,0x00003173,0x00030005,0x0000027f,0x00000069, + 0x00030005,0x0000029e,0x00000069,0x00030005,0x000002a6,0x00003077,0x00030005,0x000002ae, + 0x00003177,0x00040005,0x000002bb,0x4554534b,0x00000050,0x00030005,0x000002bc,0x0000574b, + 0x00040005,0x000002bd,0x56444150,0x00000034,0x00040005,0x000002be,0x56574f52,0x00000034, + 0x00050005,0x000002bf,0x47415453,0x4f575f45,0x00534452,0x00050005,0x000002c1,0x5f495045, + 0x44524f57,0x00000053,0x00060005,0x000002c3,0x52414853,0x575f4445,0x5344524f,0x00000000, + 0x00040005,0x000002c6,0x67617473,0x00000065,0x00030005,0x000002de,0x00000074,0x00050005, + 0x000002fa,0x6c6f4361,0x426e6d75,0x00657361,0x00030005,0x00000306,0x0000004b,0x00040005, + 0x0000030a,0x6765426b,0x00006e69,0x00040005,0x0000030d,0x70657473,0x00000073,0x00040005, + 0x0000030f,0x6c695462,0x00003065,0x00050005,0x0000031e,0x6c695462,0x72745365,0x00656469, + 0x00030005,0x00000322,0x00000069,0x00040005,0x0000032a,0x45524854,0x00534441,0x00060005, + 0x0000032d,0x45505f41,0x48545f52,0x44414552,0x00000000,0x00030005,0x0000032f,0x00786469, + 0x00030005,0x00000334,0x00776f72,0x00040005,0x0000033b,0x646e4961,0x00007865,0x00030005, + 0x00000354,0x0000766b,0x00030005,0x00000358,0x00000069,0x00030005,0x00000363,0x00006172, + 0x00040005,0x00000368,0x75706e49,0x00004174,0x00040006,0x00000368,0x00000000,0x00003461, + 0x00030005,0x0000036a,0x00000000,0x00050005,0x00000375,0x656c6974,0x65736142,0x00000000, + 0x00030005,0x0000037e,0x00000069,0x00060005,0x00000388,0x45505f42,0x48545f52,0x44414552, + 0x00000000,0x00030005,0x0000038a,0x00786469,0x00030005,0x00000392,0x0000006e,0x00030005, + 0x00000395,0x00000077,0x00030005,0x0000039b,0x00006272,0x00040005,0x000003a0,0x75706e49, + 0x00004274,0x00040006,0x000003a0,0x00000000,0x00003462,0x00030005,0x000003a2,0x00000000, + 0x00040005,0x000003b4,0x54504544,0x00000048,0x00030005,0x000003ba,0x0000766b,0x00030005, + 0x000003be,0x00000069,0x00050005,0x000003d3,0x656c6974,0x65736142,0x00000000,0x00030005, + 0x000003dc,0x00000069,0x00030005,0x000003e4,0x00786469,0x00030005,0x000003ec,0x0000006e, + 0x00030005,0x000003ef,0x00000077,0x00030005,0x0000040b,0x0000766b,0x00030005,0x0000040f, + 0x00000069,0x00050005,0x00000424,0x656c6974,0x65736142,0x00000000,0x00030005,0x0000042d, + 0x00000069,0x00030005,0x00000435,0x00786469,0x00030005,0x0000043d,0x0000006e,0x00030005, + 0x00000440,0x00000077,0x00030005,0x0000045c,0x0000766b,0x00030005,0x00000460,0x00000069, + 0x00050005,0x00000475,0x656c6974,0x65736142,0x00000000,0x00030005,0x0000047e,0x00000069, + 0x00030005,0x00000486,0x00786469,0x00030005,0x0000048e,0x0000006e,0x00030005,0x00000491, + 0x00000077,0x00040005,0x000004a8,0x65736162,0x00000000,0x00040005,0x000004b9,0x70657473, + 0x00000000,0x00030005,0x000004bc,0x00667562,0x00040005,0x000004bf,0x66664f61,0x00000000, + 0x00040005,0x000004c1,0x4f575f41,0x00534452,0x00040005,0x000004c2,0x4f575f42,0x00534452, + 0x00040005,0x000004c5,0x66664f62,0x00000000,0x00030005,0x000004c8,0x00000069,0x00030005, + 0x000004d0,0x00786469,0x00030005,0x000004ea,0x00000069,0x00030005,0x000004f2,0x00786469, + 0x00030005,0x00000511,0x0000766b,0x00030005,0x00000517,0x00000069,0x00050005,0x0000052c, + 0x656c6974,0x65736142,0x00000000,0x00030005,0x00000537,0x00000069,0x00030005,0x0000053f, + 0x00786469,0x00030005,0x00000547,0x0000006e,0x00030005,0x0000054a,0x00000077,0x00040005, + 0x00000564,0x66664f61,0x00000000,0x00040005,0x00000568,0x66664f62,0x00000000,0x00030005, + 0x0000056d,0x0000616d,0x00030005,0x0000057a,0x00000074,0x00030005,0x00000584,0x0000626d, + 0x00030005,0x0000059b,0x0000626b,0x00050005,0x0000059e,0x54524150,0x4f495449,0x0000004e, + 0x00030005,0x000005b0,0x00000074,0x00040005,0x000005bc,0x61746f74,0x0000006c,0x00040005, + 0x000005d9,0x70657473,0x00000000,0x00030005,0x000005dc,0x00667562,0x00040005,0x000005df, + 0x66664f61,0x00000000,0x00040005,0x000005e3,0x66664f62,0x00000000,0x00030005,0x000005e6, + 0x00000069,0x00030005,0x000005ee,0x00786469,0x00030005,0x00000608,0x00000069,0x00030005, + 0x00000610,0x00786469,0x00030005,0x0000062f,0x0000766b,0x00030005,0x00000635,0x00000069, + 0x00050005,0x0000064a,0x656c6974,0x65736142,0x00000000,0x00030005,0x00000655,0x00000069, + 0x00030005,0x0000065d,0x00786469,0x00030005,0x00000665,0x0000006e,0x00030005,0x00000668, + 0x00000077,0x00040005,0x00000682,0x66664f61,0x00000000,0x00040005,0x00000686,0x66664f62, + 0x00000000,0x00030005,0x00000689,0x0000616d,0x00030005,0x00000696,0x00000074,0x00030005, + 0x0000069e,0x0000626d,0x00030005,0x000006b5,0x0000626b,0x00030005,0x000006c9,0x00000074, + 0x00040005,0x000006f1,0x70657473,0x00000000,0x00030005,0x000006f4,0x00667562,0x00040005, + 0x000006f7,0x66664f61,0x00000000,0x00040005,0x000006fb,0x66664f62,0x00000000,0x00030005, + 0x000006fe,0x00000069,0x00030005,0x00000706,0x00786469,0x00030005,0x00000720,0x00000069, + 0x00030005,0x00000728,0x00786469,0x00030005,0x00000747,0x0000766b,0x00030005,0x0000074d, + 0x00000069,0x00050005,0x00000762,0x656c6974,0x65736142,0x00000000,0x00030005,0x0000076d, + 0x00000069,0x00030005,0x00000775,0x00786469,0x00030005,0x0000077d,0x0000006e,0x00030005, + 0x00000780,0x00000077,0x00040005,0x0000079a,0x66664f61,0x00000000,0x00040005,0x0000079e, + 0x66664f62,0x00000000,0x00030005,0x000007a1,0x0000616d,0x00030005,0x000007ae,0x00000074, + 0x00030005,0x000007b6,0x0000626d,0x00030005,0x000007cd,0x0000626b,0x00030005,0x000007e1, + 0x00000074,0x00040005,0x00000809,0x70657473,0x00000000,0x00030005,0x0000080c,0x00667562, + 0x00040005,0x0000080f,0x66664f61,0x00000000,0x00040005,0x00000813,0x66664f62,0x00000000, + 0x00030005,0x00000816,0x00000069,0x00030005,0x0000081e,0x00786469,0x00030005,0x00000838, + 0x00000069,0x00030005,0x00000840,0x00786469,0x00030005,0x0000085f,0x0000766b,0x00030005, + 0x00000865,0x00000069,0x00050005,0x0000087a,0x656c6974,0x65736142,0x00000000,0x00030005, + 0x00000885,0x00000069,0x00030005,0x0000088d,0x00786469,0x00030005,0x00000895,0x0000006e, + 0x00030005,0x00000898,0x00000077,0x00040005,0x000008b2,0x66664f61,0x00000000,0x00040005, + 0x000008b6,0x66664f62,0x00000000,0x00030005,0x000008b9,0x0000616d,0x00030005,0x000008c6, + 0x00000074,0x00030005,0x000008ce,0x0000626d,0x00030005,0x000008e5,0x0000626b,0x00030005, + 0x000008f9,0x00000074,0x00030005,0x0000091d,0x00000074,0x00040005,0x00000934,0x73736170, + 0x00000000,0x00050005,0x0000093c,0x73736170,0x656c6954,0x00000073,0x00030005,0x00000947, + 0x00000074,0x00030005,0x00000961,0x0072706c,0x00030005,0x0000096c,0x00697072,0x00040005, + 0x0000096f,0x72617571,0x00726574,0x00030005,0x00000973,0x00007469,0x00030005,0x00000980, + 0x00000072,0x00030005,0x00000988,0x00776f72,0x00040005,0x0000099b,0x756c6f63,0x00006e6d, + 0x00040005,0x000009a3,0x65646e69,0x00000078,0x00040005,0x000009d8,0x73736170,0x00000000, + 0x00050005,0x000009e0,0x73736170,0x656c6954,0x00000073,0x00030005,0x000009eb,0x00000074, + 0x00030005,0x00000a05,0x0072706c,0x00030005,0x00000a10,0x00697072,0x00040005,0x00000a13, + 0x72617571,0x00726574,0x00030005,0x00000a17,0x00007469,0x00030005,0x00000a24,0x00000072, + 0x00030005,0x00000a2c,0x00776f72,0x00040005,0x00000a3f,0x756c6f63,0x00006e6d,0x00030005, + 0x00000a47,0x00003076,0x00030005,0x00000a51,0x00003176,0x00040005,0x00000a64,0x61726170, + 0x0000006d,0x00040005,0x00000a66,0x61726170,0x0000006d,0x00040005,0x00000a68,0x61726170, + 0x0000006d,0x00040005,0x00000a69,0x61726170,0x0000006d,0x00070005,0x00000a74,0x69736552, + 0x6c617564,0x666c6148,0x72696150,0x00000073,0x00070006,0x00000a74,0x00000000,0x69736572, + 0x6c617564,0x32783631,0x00000000,0x00030005,0x00000a76,0x00000000,0x00050005,0x00000a78, + 0x50787541,0x73726961,0x00000000,0x00050006,0x00000a78,0x00000000,0x31787561,0x00327836, + 0x00030005,0x00000a7a,0x00000000,0x00060005,0x00000a7c,0x69736552,0x6c617564,0x61503445, + 0x00737269,0x00060006,0x00000a7c,0x00000000,0x69736572,0x6c617564,0x00327838,0x00030005, + 0x00000a7e,0x00000000,0x00050005,0x00000a82,0x656c6974,0x67617453,0x00000065,0x00040047, + 0x00000007,0x00000001,0x00000008,0x00030047,0x0000003d,0x00001078,0x00030047,0x00000078, + 0x0000002a,0x00040047,0x0000007f,0x00000001,0x00000002,0x00040047,0x00000086,0x00000006, + 0x00000010,0x00030047,0x00000087,0x00000002,0x00040048,0x00000087,0x00000000,0x00000018, + 0x00050048,0x00000087,0x00000000,0x00000023,0x00000000,0x00030047,0x00000089,0x00000018, + 0x00040047,0x00000089,0x00000021,0x00000006,0x00040047,0x00000089,0x00000022,0x00000000, + 0x00040047,0x000000b7,0x00000006,0x00000010,0x00030047,0x000000b8,0x00000002,0x00040048, + 0x000000b8,0x00000000,0x00000018,0x00050048,0x000000b8,0x00000000,0x00000023,0x00000000, + 0x00030047,0x000000ba,0x00000018,0x00040047,0x000000ba,0x00000021,0x00000003,0x00040047, + 0x000000ba,0x00000022,0x00000000,0x00040047,0x00000141,0x00000006,0x00000010,0x00030047, + 0x00000142,0x00000002,0x00040048,0x00000142,0x00000000,0x00000019,0x00050048,0x00000142, + 0x00000000,0x00000023,0x00000000,0x00030047,0x00000144,0x00000019,0x00040047,0x00000144, + 0x00000021,0x00000005,0x00040047,0x00000144,0x00000022,0x00000000,0x00040047,0x0000014d, + 0x00000006,0x00000010,0x00030047,0x0000014e,0x00000002,0x00040048,0x0000014e,0x00000000, + 0x00000019,0x00050048,0x0000014e,0x00000000,0x00000023,0x00000000,0x00030047,0x00000150, + 0x00000019,0x00040047,0x00000150,0x00000021,0x00000002,0x00040047,0x00000150,0x00000022, + 0x00000000,0x00040047,0x0000015d,0x0000000b,0x0000001b,0x00040047,0x00000162,0x0000000b, + 0x00000028,0x00030047,0x00000165,0x00000000,0x00040047,0x00000165,0x0000000b,0x00000029, + 0x00030047,0x00000166,0x00000000,0x00040047,0x00000168,0x0000000b,0x0000001a,0x00040047, + 0x0000016b,0x00000001,0x00000009,0x00030047,0x00000173,0x00000002,0x00050048,0x00000173, + 0x00000000,0x00000023,0x00000000,0x00050048,0x00000173,0x00000001,0x00000023,0x00000004, + 0x00050048,0x00000173,0x00000002,0x00000023,0x00000008,0x00050048,0x00000173,0x00000003, + 0x00000023,0x0000000c,0x00050048,0x00000173,0x00000004,0x00000023,0x00000010,0x00050048, + 0x00000173,0x00000005,0x00000023,0x00000014,0x00050048,0x00000173,0x00000006,0x00000023, + 0x00000018,0x00050048,0x00000173,0x00000007,0x00000023,0x0000001c,0x00050048,0x00000173, + 0x00000008,0x00000023,0x00000020,0x00050048,0x00000173,0x00000009,0x00000023,0x00000024, + 0x00050048,0x00000173,0x0000000a,0x00000023,0x00000028,0x00050048,0x00000173,0x0000000b, + 0x00000023,0x0000002c,0x00040047,0x00000187,0x00000001,0x00000007,0x00040047,0x00000191, + 0x00000001,0x00000001,0x00040047,0x000001ca,0x00000006,0x00000002,0x00030047,0x000001cb, + 0x00000002,0x00040048,0x000001cb,0x00000000,0x00000018,0x00050048,0x000001cb,0x00000000, + 0x00000023,0x00000000,0x00030047,0x000001cd,0x00000018,0x00040047,0x000001cd,0x00000021, + 0x00000003,0x00040047,0x000001cd,0x00000022,0x00000000,0x00040047,0x0000026a,0x00000006, + 0x00000010,0x00030047,0x0000026b,0x00000002,0x00040048,0x0000026b,0x00000000,0x00000018, + 0x00050048,0x0000026b,0x00000000,0x00000023,0x00000000,0x00030047,0x0000026d,0x00000018, + 0x00040047,0x0000026d,0x00000021,0x00000004,0x00040047,0x0000026d,0x00000022,0x00000000, + 0x00040047,0x000002bb,0x00000001,0x0000000a,0x00040047,0x000002bd,0x00000001,0x00000005, + 0x00040047,0x00000306,0x00000001,0x00000000,0x00040047,0x00000367,0x00000006,0x00000010, + 0x00030047,0x00000368,0x00000002,0x00040048,0x00000368,0x00000000,0x00000018,0x00050048, + 0x00000368,0x00000000,0x00000023,0x00000000,0x00030047,0x0000036a,0x00000018,0x00040047, + 0x0000036a,0x00000021,0x00000000,0x00040047,0x0000036a,0x00000022,0x00000000,0x00040047, + 0x0000039f,0x00000006,0x00000010,0x00030047,0x000003a0,0x00000002,0x00040048,0x000003a0, + 0x00000000,0x00000018,0x00050048,0x000003a0,0x00000000,0x00000023,0x00000000,0x00030047, + 0x000003a2,0x00000018,0x00040047,0x000003a2,0x00000021,0x00000001,0x00040047,0x000003a2, + 0x00000022,0x00000000,0x00040047,0x000003b4,0x00000001,0x00000004,0x00040047,0x0000059e, + 0x00000001,0x00000003,0x00040047,0x00000a71,0x00000001,0x00000008,0x00040047,0x00000a73, + 0x00000006,0x00000004,0x00030047,0x00000a74,0x00000002,0x00040048,0x00000a74,0x00000000, + 0x00000018,0x00050048,0x00000a74,0x00000000,0x00000023,0x00000000,0x00030047,0x00000a76, + 0x00000018,0x00040047,0x00000a76,0x00000021,0x00000003,0x00040047,0x00000a76,0x00000022, + 0x00000000,0x00040047,0x00000a77,0x00000006,0x00000004,0x00030047,0x00000a78,0x00000002, + 0x00040048,0x00000a78,0x00000000,0x00000018,0x00050048,0x00000a78,0x00000000,0x00000023, + 0x00000000,0x00030047,0x00000a7a,0x00000018,0x00040047,0x00000a7a,0x00000021,0x00000004, + 0x00040047,0x00000a7a,0x00000022,0x00000000,0x00040047,0x00000a7b,0x00000006,0x00000002, + 0x00030047,0x00000a7c,0x00000002,0x00040048,0x00000a7c,0x00000000,0x00000018,0x00050048, + 0x00000a7c,0x00000000,0x00000023,0x00000000,0x00030047,0x00000a7e,0x00000018,0x00040047, + 0x00000a7e,0x00000021,0x00000006,0x00040047,0x00000a7e,0x00000022,0x00000000,0x00020013, + 0x00000002,0x00030021,0x00000003,0x00000002,0x00040015,0x00000006,0x00000020,0x00000000, + 0x00040032,0x00000006,0x00000007,0x00000001,0x0004002b,0x00000006,0x00000008,0x00000001, + 0x00030016,0x00000009,0x00000010,0x00040017,0x0000000a,0x00000009,0x00000002,0x00040020, + 0x0000000b,0x00000007,0x0000000a,0x00040015,0x0000000c,0x00000010,0x00000000,0x00040021, + 0x0000000d,0x0000000c,0x0000000b,0x00040020,0x00000011,0x00000007,0x00000006,0x00030016, + 0x00000012,0x00000020,0x00040021,0x00000013,0x00000012,0x00000011,0x00040021,0x00000017, + 0x0000000a,0x0000000b,0x00040017,0x0000001d,0x00000012,0x00000002,0x0004002b,0x00000006, + 0x0000001e,0x00000008,0x0004001c,0x0000001f,0x0000001d,0x0000001e,0x00040020,0x00000020, + 0x00000007,0x0000001f,0x00050021,0x00000021,0x00000002,0x00000011,0x00000020,0x00040017, + 0x00000026,0x00000006,0x00000004,0x00040020,0x00000027,0x00000007,0x00000026,0x00070021, + 0x00000028,0x00000002,0x00000027,0x00000027,0x00000011,0x00000011,0x0004002b,0x00000009, + 0x00000031,0x00000000,0x0005002c,0x0000000a,0x00000032,0x00000031,0x00000031,0x00020014, + 0x00000034,0x00040017,0x00000035,0x00000034,0x00000002,0x00040016,0x00000038,0x00000008, + 0x00001076,0x00040017,0x00000039,0x00000038,0x00000002,0x00040020,0x0000003a,0x00000007, + 0x00000039,0x00040015,0x0000003e,0x00000008,0x00000000,0x00040017,0x0000003f,0x0000003e, + 0x00000002,0x00040020,0x00000040,0x00000007,0x0000003f,0x0004002b,0x00000006,0x00000044, + 0x00000000,0x00040020,0x00000045,0x00000007,0x0000003e,0x00040020,0x00000051,0x00000007, + 0x00000012,0x0004002b,0x00000006,0x00000054,0x000000ff,0x0004002b,0x00000012,0x0000005b, + 0x00000000,0x0004002b,0x00000009,0x00000062,0x0000c400,0x0005002c,0x0000000a,0x00000063, + 0x00000062,0x00000062,0x0004002b,0x00000009,0x00000064,0x00004400,0x0005002c,0x0000000a, + 0x00000065,0x00000064,0x00000064,0x0004002b,0x00000009,0x00000068,0x0000ab28,0x0005002c, + 0x0000000a,0x00000069,0x00000068,0x00000068,0x0004002b,0x00000009,0x0000006c,0x00003728, + 0x0005002c,0x0000000a,0x0000006d,0x0000006c,0x0000006c,0x0004002b,0x00000009,0x00000072, + 0x00003b28,0x0005002c,0x0000000a,0x00000073,0x00000072,0x00000072,0x0004002b,0x00000006, + 0x0000007c,0x00000003,0x0004002b,0x00000006,0x0000007d,0x00000108,0x0004002b,0x00000006, + 0x0000007e,0x00000d48,0x00040032,0x00000006,0x0000007f,0x00000000,0x0004002b,0x00000006, + 0x00000080,0x00000040,0x00060034,0x00000006,0x00000081,0x000000c7,0x0000007f,0x00000080, + 0x00060034,0x00000034,0x00000082,0x000000ab,0x00000081,0x00000044,0x0003001d,0x00000086, + 0x00000026,0x0003001e,0x00000087,0x00000086,0x00040020,0x00000088,0x0000000c,0x00000087, + 0x0004003b,0x00000088,0x00000089,0x0000000c,0x00040015,0x0000008a,0x00000020,0x00000001, + 0x0004002b,0x0000008a,0x0000008b,0x00000000,0x0004002b,0x00000006,0x0000008d,0x00000004, + 0x00040020,0x0000008f,0x0000000c,0x00000026,0x0004002b,0x00000006,0x000000a1,0x00000010, + 0x0004002b,0x00000006,0x000000a4,0x0000ffff,0x00040020,0x000000b0,0x00000007,0x0000001d, + 0x0004002b,0x0000008a,0x000000b3,0x00000001,0x0003001d,0x000000b7,0x00000026,0x0003001e, + 0x000000b8,0x000000b7,0x00040020,0x000000b9,0x0000000c,0x000000b8,0x0004003b,0x000000b9, + 0x000000ba,0x0000000c,0x00060034,0x00000006,0x000000de,0x000000c7,0x0000007f,0x0000001e, + 0x00060034,0x00000034,0x000000df,0x000000ab,0x000000de,0x00000044,0x0004002b,0x00000006, + 0x000000fe,0x00000030,0x00060034,0x00000006,0x000000ff,0x000000c7,0x0000007f,0x000000fe, + 0x00060034,0x00000034,0x00000100,0x000000ab,0x000000ff,0x00000044,0x0004002b,0x00000006, + 0x00000113,0x00000002,0x0003001d,0x00000141,0x00000026,0x0003001e,0x00000142,0x00000141, + 0x00040020,0x00000143,0x0000000c,0x00000142,0x0004003b,0x00000143,0x00000144,0x0000000c, + 0x00060034,0x00000006,0x00000149,0x000000c7,0x0000007f,0x000000a1,0x00060034,0x00000034, + 0x0000014a,0x000000aa,0x00000149,0x00000044,0x0003001d,0x0000014d,0x00000026,0x0003001e, + 0x0000014e,0x0000014d,0x00040020,0x0000014f,0x0000000c,0x0000014e,0x0004003b,0x0000014f, + 0x00000150,0x0000000c,0x00040017,0x0000015b,0x00000006,0x00000003,0x00040020,0x0000015c, + 0x00000001,0x0000015b,0x0004003b,0x0000015c,0x0000015d,0x00000001,0x00040020,0x0000015e, + 0x00000001,0x00000006,0x0004003b,0x0000015e,0x00000162,0x00000001,0x0004003b,0x0000015e, + 0x00000165,0x00000001,0x0004003b,0x0000015c,0x00000168,0x00000001,0x00040032,0x00000006, + 0x0000016b,0x00000001,0x000e001e,0x00000173,0x00000006,0x00000006,0x00000006,0x00000006, + 0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006, + 0x00040020,0x00000174,0x00000009,0x00000173,0x0004003b,0x00000174,0x00000175,0x00000009, + 0x0004002b,0x0000008a,0x00000176,0x0000000a,0x00040020,0x00000177,0x00000009,0x00000006, + 0x00040032,0x00000006,0x00000187,0x00000004,0x00060034,0x00000006,0x00000188,0x00000084, + 0x000000a1,0x00000187,0x00040032,0x00000006,0x00000191,0x00000004,0x00060034,0x00000006, + 0x00000192,0x00000084,0x00000191,0x000000a1,0x0004002b,0x00000006,0x00000196,0x00000100, + 0x0004002b,0x0000008a,0x00000199,0x00000007,0x00040020,0x000001a1,0x00000007,0x00000034, + 0x00060034,0x00000006,0x000001a8,0x000000c7,0x0000007f,0x00000008,0x00060034,0x00000034, + 0x000001a9,0x000000ab,0x000001a8,0x00000044,0x0004002b,0x00000006,0x000001b8,0x00000042, + 0x00060034,0x00000006,0x000001b9,0x000000c7,0x0000007f,0x000001b8,0x00060034,0x00000034, + 0x000001ba,0x000000aa,0x000001b9,0x00000044,0x00071168,0x000001c3,0x00000009,0x0000007c, + 0x000000a1,0x000000a1,0x00000113,0x0004001c,0x000001c4,0x000001c3,0x00000191,0x00040020, + 0x000001c5,0x00000007,0x000001c4,0x00040020,0x000001c8,0x00000007,0x000001c3,0x0003001d, + 0x000001ca,0x00000009,0x0003001e,0x000001cb,0x000001ca,0x00040020,0x000001cc,0x0000000c, + 0x000001cb,0x0004003b,0x000001cc,0x000001cd,0x0000000c,0x0004002b,0x0000008a,0x000001cf, + 0x00000006,0x00040020,0x000001da,0x0000000c,0x00000009,0x0004002c,0x000001c3,0x000001ec, + 0x00000031,0x0004002b,0x00000006,0x000001f6,0x00000009,0x00060034,0x00000006,0x000001fb, + 0x000000c7,0x0000007f,0x000001b8,0x00060034,0x00000034,0x000001fc,0x000000ab,0x000001fb, + 0x00000044,0x0004002b,0x00000006,0x00000221,0x00000020,0x00060034,0x00000006,0x00000265, + 0x000000c7,0x0000007f,0x00000113,0x00060034,0x00000034,0x00000266,0x000000ab,0x00000265, + 0x00000044,0x0003001d,0x0000026a,0x00000026,0x0003001e,0x0000026b,0x0000026a,0x00040020, + 0x0000026c,0x0000000c,0x0000026b,0x0004003b,0x0000026c,0x0000026d,0x0000000c,0x0004002b, + 0x0000008a,0x0000026e,0x00000008,0x00060034,0x00000006,0x000002b9,0x00000080,0x00000188, + 0x00000192,0x00060034,0x00000006,0x000002ba,0x00000084,0x00000113,0x000002b9,0x00040032, + 0x00000006,0x000002bb,0x00000020,0x00060034,0x00000006,0x000002bc,0x00000086,0x000002bb, + 0x000000a1,0x00040032,0x00000006,0x000002bd,0x00000001,0x00060034,0x00000006,0x000002be, + 0x00000080,0x000002bc,0x000002bd,0x00060034,0x00000006,0x000002bf,0x00000084,0x000002ba, + 0x000002be,0x00060034,0x00000006,0x000002c0,0x00000084,0x00000187,0x000000a1,0x00060034, + 0x00000006,0x000002c1,0x00000084,0x000002c0,0x000001f6,0x00060034,0x00000034,0x000002c2, + 0x000000ac,0x000002bf,0x000002c1,0x00070034,0x00000006,0x000002c3,0x000000a9,0x000002c2, + 0x000002bf,0x000002c1,0x0004001c,0x000002c4,0x00000026,0x000002c3,0x00040020,0x000002c5, + 0x00000004,0x000002c4,0x0004003b,0x000002c5,0x000002c6,0x00000004,0x00040020,0x000002cf, + 0x00000004,0x00000026,0x0004002b,0x0000008a,0x000002fb,0x00000005,0x0004002b,0x00000006, + 0x000002fe,0x00000080,0x00060034,0x00000006,0x000002ff,0x000000c7,0x0000007f,0x000002fe, + 0x00060034,0x00000034,0x00000300,0x000000ab,0x000002ff,0x00000044,0x00040032,0x00000006, + 0x00000306,0x00000020,0x00060034,0x00000006,0x0000030c,0x00000086,0x00000306,0x000002bb, + 0x00060034,0x00000006,0x0000030d,0x00000086,0x0000030c,0x0000016b,0x00060034,0x00000006, + 0x00000311,0x00000086,0x00000306,0x00000221,0x0004002b,0x0000008a,0x00000313,0x00000002, + 0x0004002b,0x0000008a,0x00000317,0x00000003,0x00060034,0x00000006,0x00000329,0x00000084, + 0x00000188,0x000002bc,0x00060034,0x00000006,0x0000032a,0x00000084,0x00000221,0x00000187, + 0x00060034,0x00000006,0x0000032b,0x00000080,0x00000329,0x0000032a,0x00060034,0x00000006, + 0x0000032c,0x00000082,0x0000032b,0x00000008,0x00060034,0x00000006,0x0000032d,0x00000086, + 0x0000032c,0x0000032a,0x00060034,0x00000006,0x00000337,0x00000082,0x00000188,0x00000008, + 0x0004001c,0x00000339,0x00000006,0x0000032d,0x00040020,0x0000033a,0x00000007,0x00000339, + 0x0004002b,0x0000008a,0x00000344,0x00000004,0x00060034,0x00000034,0x00000351,0x000000b0, + 0x00000044,0x0000030d,0x00060034,0x00000006,0x00000360,0x00000084,0x0000008d,0x0000032d, + 0x0004001c,0x00000361,0x00000026,0x00000360,0x00040020,0x00000362,0x00000007,0x00000361, + 0x00060034,0x00000006,0x00000364,0x00000084,0x00000044,0x0000032d,0x0003001d,0x00000367, + 0x00000026,0x0003001e,0x00000368,0x00000367,0x00040020,0x00000369,0x0000000c,0x00000368, + 0x0004003b,0x00000369,0x0000036a,0x0000000c,0x00060034,0x00000006,0x00000379,0x00000086, + 0x000002bc,0x00000113,0x00060034,0x00000006,0x00000385,0x00000084,0x000002bc,0x00000192, + 0x00060034,0x00000006,0x00000386,0x00000080,0x00000385,0x0000032a,0x00060034,0x00000006, + 0x00000387,0x00000082,0x00000386,0x00000008,0x00060034,0x00000006,0x00000388,0x00000086, + 0x00000387,0x0000032a,0x00060034,0x00000006,0x0000038f,0x00000084,0x000002bc,0x00000192, + 0x00060034,0x00000006,0x00000390,0x00000082,0x0000038f,0x00000008,0x00060034,0x00000006, + 0x00000398,0x00000084,0x0000008d,0x00000388,0x0004001c,0x00000399,0x00000026,0x00000398, + 0x00040020,0x0000039a,0x00000007,0x00000399,0x00060034,0x00000006,0x0000039c,0x00000084, + 0x00000044,0x00000388,0x0003001d,0x0000039f,0x00000026,0x0003001e,0x000003a0,0x0000039f, + 0x00040020,0x000003a1,0x0000000c,0x000003a0,0x0004003b,0x000003a1,0x000003a2,0x0000000c, + 0x00040032,0x00000006,0x000003b4,0x00000004,0x00060034,0x00000034,0x000003b5,0x000000b0, + 0x00000008,0x000003b4,0x00060034,0x00000034,0x000003b6,0x000000b0,0x00000008,0x0000030d, + 0x00060034,0x00000034,0x000003b7,0x000000a7,0x000003b5,0x000003b6,0x00060034,0x00000006, + 0x000003c6,0x00000084,0x00000008,0x0000032d,0x00060034,0x00000006,0x000003d7,0x00000086, + 0x000002bc,0x00000113,0x00060034,0x00000006,0x000003e9,0x00000084,0x000002bc,0x00000192, + 0x00060034,0x00000006,0x000003ea,0x00000082,0x000003e9,0x00000008,0x00060034,0x00000006, + 0x000003f2,0x00000084,0x00000008,0x00000388,0x00060034,0x00000034,0x00000406,0x000000b0, + 0x00000113,0x000003b4,0x00060034,0x00000034,0x00000407,0x000000b0,0x00000113,0x0000030d, + 0x00060034,0x00000034,0x00000408,0x000000a7,0x00000406,0x00000407,0x00060034,0x00000006, + 0x00000417,0x00000084,0x00000113,0x0000032d,0x00060034,0x00000006,0x00000428,0x00000086, + 0x000002bc,0x00000113,0x00060034,0x00000006,0x0000043a,0x00000084,0x000002bc,0x00000192, + 0x00060034,0x00000006,0x0000043b,0x00000082,0x0000043a,0x00000008,0x00060034,0x00000006, + 0x00000443,0x00000084,0x00000113,0x00000388,0x00060034,0x00000034,0x00000457,0x000000b0, + 0x0000007c,0x000003b4,0x00060034,0x00000034,0x00000458,0x000000b0,0x0000007c,0x0000030d, + 0x00060034,0x00000034,0x00000459,0x000000a7,0x00000457,0x00000458,0x00060034,0x00000006, + 0x00000468,0x00000084,0x0000007c,0x0000032d,0x00060034,0x00000006,0x00000479,0x00000086, + 0x000002bc,0x00000113,0x00060034,0x00000006,0x0000048b,0x00000084,0x000002bc,0x00000192, + 0x00060034,0x00000006,0x0000048c,0x00000082,0x0000048b,0x00000008,0x00060034,0x00000006, + 0x00000494,0x00000084,0x0000007c,0x00000388,0x00060034,0x00000034,0x000004b0,0x000000b0, + 0x00000044,0x000003b4,0x00060034,0x00000006,0x000004c1,0x00000084,0x00000188,0x000002be, + 0x00060034,0x00000006,0x000004c2,0x00000084,0x00000192,0x000002be,0x00060034,0x00000006, + 0x000004c3,0x00000080,0x000004c1,0x000004c2,0x00060034,0x00000006,0x000004d6,0x00000084, + 0x00000188,0x000002bc,0x00060034,0x00000006,0x000004e2,0x00000084,0x00000044,0x0000032d, + 0x00060034,0x00000006,0x000004f8,0x00000084,0x000002bc,0x00000192,0x00060034,0x00000006, + 0x00000504,0x00000084,0x00000044,0x00000388,0x00060034,0x00000006,0x0000051f,0x00000084, + 0x00000044,0x0000032d,0x00060034,0x00000006,0x00000532,0x00000086,0x000002bc,0x00000113, + 0x00060034,0x00000006,0x00000544,0x00000084,0x000002bc,0x00000192,0x00060034,0x00000006, + 0x00000545,0x00000082,0x00000544,0x00000008,0x00060034,0x00000006,0x0000054d,0x00000084, + 0x00000044,0x00000388,0x00060034,0x00000006,0x00000566,0x00000080,0x000004c1,0x000004c2, + 0x00071168,0x0000056b,0x00000038,0x0000007c,0x000000a1,0x000002bb,0x00000044,0x00040020, + 0x0000056c,0x00000007,0x0000056b,0x00071168,0x00000582,0x00000038,0x0000007c,0x000002bb, + 0x000000a1,0x00000008,0x00040020,0x00000583,0x00000007,0x00000582,0x00040032,0x00000006, + 0x0000059e,0x00000000,0x00060034,0x00000034,0x0000059f,0x000000ab,0x0000059e,0x00000044, + 0x00060034,0x00000034,0x000005d0,0x000000b0,0x00000008,0x000003b4,0x00060034,0x00000006, + 0x000005e1,0x00000080,0x000004c1,0x000004c2,0x00060034,0x00000006,0x000005f4,0x00000084, + 0x00000188,0x000002bc,0x00060034,0x00000006,0x00000600,0x00000084,0x00000008,0x0000032d, + 0x00060034,0x00000006,0x00000616,0x00000084,0x000002bc,0x00000192,0x00060034,0x00000006, + 0x00000622,0x00000084,0x00000008,0x00000388,0x00060034,0x00000006,0x0000063d,0x00000084, + 0x00000008,0x0000032d,0x00060034,0x00000006,0x00000650,0x00000086,0x000002bc,0x00000113, + 0x00060034,0x00000006,0x00000662,0x00000084,0x000002bc,0x00000192,0x00060034,0x00000006, + 0x00000663,0x00000082,0x00000662,0x00000008,0x00060034,0x00000006,0x0000066b,0x00000084, + 0x00000008,0x00000388,0x00060034,0x00000006,0x00000684,0x00000080,0x000004c1,0x000004c2, + 0x00060034,0x00000034,0x000006b8,0x000000ab,0x0000059e,0x00000044,0x00060034,0x00000034, + 0x000006e8,0x000000b0,0x00000113,0x000003b4,0x00060034,0x00000006,0x000006f9,0x00000080, + 0x000004c1,0x000004c2,0x00060034,0x00000006,0x0000070c,0x00000084,0x00000188,0x000002bc, + 0x00060034,0x00000006,0x00000718,0x00000084,0x00000113,0x0000032d,0x00060034,0x00000006, + 0x0000072e,0x00000084,0x000002bc,0x00000192,0x00060034,0x00000006,0x0000073a,0x00000084, + 0x00000113,0x00000388,0x00060034,0x00000006,0x00000755,0x00000084,0x00000113,0x0000032d, + 0x00060034,0x00000006,0x00000768,0x00000086,0x000002bc,0x00000113,0x00060034,0x00000006, + 0x0000077a,0x00000084,0x000002bc,0x00000192,0x00060034,0x00000006,0x0000077b,0x00000082, + 0x0000077a,0x00000008,0x00060034,0x00000006,0x00000783,0x00000084,0x00000113,0x00000388, + 0x00060034,0x00000006,0x0000079c,0x00000080,0x000004c1,0x000004c2,0x00060034,0x00000034, + 0x000007d0,0x000000ab,0x0000059e,0x00000044,0x00060034,0x00000034,0x00000800,0x000000b0, + 0x0000007c,0x000003b4,0x00060034,0x00000006,0x00000811,0x00000080,0x000004c1,0x000004c2, + 0x00060034,0x00000006,0x00000824,0x00000084,0x00000188,0x000002bc,0x00060034,0x00000006, + 0x00000830,0x00000084,0x0000007c,0x0000032d,0x00060034,0x00000006,0x00000846,0x00000084, + 0x000002bc,0x00000192,0x00060034,0x00000006,0x00000852,0x00000084,0x0000007c,0x00000388, + 0x00060034,0x00000006,0x0000086d,0x00000084,0x0000007c,0x0000032d,0x00060034,0x00000006, + 0x00000880,0x00000086,0x000002bc,0x00000113,0x00060034,0x00000006,0x00000892,0x00000084, + 0x000002bc,0x00000192,0x00060034,0x00000006,0x00000893,0x00000082,0x00000892,0x00000008, + 0x00060034,0x00000006,0x0000089b,0x00000084,0x0000007c,0x00000388,0x00060034,0x00000006, + 0x000008b4,0x00000080,0x000004c1,0x000004c2,0x00060034,0x00000034,0x000008e8,0x000000ab, + 0x0000059e,0x00000044,0x00060034,0x00000034,0x0000091a,0x000000ab,0x0000059e,0x00000044, + 0x00060034,0x00000034,0x00000931,0x000000ac,0x0000016b,0x00000008,0x0004002b,0x0000008a, + 0x000009a5,0x0000000b,0x00040032,0x00000006,0x00000a71,0x00000001,0x00060033,0x0000015b, + 0x00000a72,0x00000a71,0x00000008,0x00000008,0x0003001d,0x00000a73,0x0000000a,0x0003001e, + 0x00000a74,0x00000a73,0x00040020,0x00000a75,0x0000000c,0x00000a74,0x0004003b,0x00000a75, + 0x00000a76,0x0000000c,0x0003001d,0x00000a77,0x0000000a,0x0003001e,0x00000a78,0x00000a77, + 0x00040020,0x00000a79,0x0000000c,0x00000a78,0x0004003b,0x00000a79,0x00000a7a,0x0000000c, + 0x0003001d,0x00000a7b,0x0000000c,0x0003001e,0x00000a7c,0x00000a7b,0x00040020,0x00000a7d, + 0x0000000c,0x00000a7c,0x0004003b,0x00000a7d,0x00000a7e,0x0000000c,0x00060034,0x00000006, + 0x00000a7f,0x00000084,0x00000187,0x00000196,0x0004001c,0x00000a80,0x00000009,0x00000a7f, + 0x00040020,0x00000a81,0x00000004,0x00000a80,0x0004003b,0x00000a81,0x00000a82,0x00000004, + 0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b, + 0x00000011,0x0000015a,0x00000007,0x0004003b,0x00000011,0x00000161,0x00000007,0x0004003b, + 0x00000011,0x00000164,0x00000007,0x0004003b,0x00000011,0x00000167,0x00000007,0x0004003b, + 0x00000011,0x0000016d,0x00000007,0x0004003b,0x00000011,0x00000171,0x00000007,0x0004003b, + 0x00000011,0x0000017b,0x00000007,0x0004003b,0x00000011,0x00000180,0x00000007,0x0004003b, + 0x00000011,0x0000018a,0x00000007,0x0004003b,0x00000011,0x0000018f,0x00000007,0x0004003b, + 0x00000011,0x00000194,0x00000007,0x0004003b,0x00000011,0x00000198,0x00000007,0x0004003b, + 0x000001a1,0x000001a2,0x00000007,0x0004003b,0x000001a1,0x000001a7,0x00000007,0x0004003b, + 0x00000011,0x000001ad,0x00000007,0x0004003b,0x00000011,0x000001bd,0x00000007,0x0004003b, + 0x000001c5,0x000001c6,0x00000007,0x0004003b,0x00000011,0x000001f3,0x00000007,0x0004003b, + 0x00000011,0x00000202,0x00000007,0x0004003b,0x00000011,0x0000020a,0x00000007,0x0004003b, + 0x00000011,0x0000020e,0x00000007,0x0004003b,0x00000011,0x00000215,0x00000007,0x0004003b, + 0x00000011,0x00000218,0x00000007,0x0004003b,0x00000011,0x00000220,0x00000007,0x0004003b, + 0x00000011,0x00000224,0x00000007,0x0004003b,0x00000011,0x00000228,0x00000007,0x0004003b, + 0x00000011,0x00000235,0x00000007,0x0004003b,0x00000011,0x0000023d,0x00000007,0x0004003b, + 0x00000011,0x00000250,0x00000007,0x0004003b,0x00000020,0x00000260,0x00000007,0x0004003b, + 0x00000011,0x00000261,0x00000007,0x0004003b,0x00000020,0x00000262,0x00000007,0x0004003b, + 0x00000027,0x00000269,0x00000007,0x0004003b,0x00000027,0x00000276,0x00000007,0x0004003b, + 0x00000011,0x0000027f,0x00000007,0x0004003b,0x00000011,0x0000029e,0x00000007,0x0004003b, + 0x00000027,0x000002a6,0x00000007,0x0004003b,0x00000027,0x000002ae,0x00000007,0x0004003b, + 0x00000011,0x000002de,0x00000007,0x0004003b,0x00000011,0x000002fa,0x00000007,0x0004003b, + 0x00000011,0x00000301,0x00000007,0x0004003b,0x00000011,0x0000030a,0x00000007,0x0004003b, + 0x00000011,0x0000030f,0x00000007,0x0004003b,0x00000011,0x0000031e,0x00000007,0x0004003b, + 0x00000011,0x00000322,0x00000007,0x0004003b,0x00000011,0x0000032f,0x00000007,0x0004003b, + 0x00000011,0x00000334,0x00000007,0x0004003b,0x0000033a,0x0000033b,0x00000007,0x0004003b, + 0x00000011,0x00000354,0x00000007,0x0004003b,0x00000011,0x00000358,0x00000007,0x0004003b, + 0x00000362,0x00000363,0x00000007,0x0004003b,0x00000011,0x00000375,0x00000007,0x0004003b, + 0x00000011,0x0000037e,0x00000007,0x0004003b,0x00000011,0x0000038a,0x00000007,0x0004003b, + 0x00000011,0x00000392,0x00000007,0x0004003b,0x00000011,0x00000395,0x00000007,0x0004003b, + 0x0000039a,0x0000039b,0x00000007,0x0004003b,0x00000011,0x000003ba,0x00000007,0x0004003b, + 0x00000011,0x000003be,0x00000007,0x0004003b,0x00000011,0x000003d3,0x00000007,0x0004003b, + 0x00000011,0x000003dc,0x00000007,0x0004003b,0x00000011,0x000003e4,0x00000007,0x0004003b, + 0x00000011,0x000003ec,0x00000007,0x0004003b,0x00000011,0x000003ef,0x00000007,0x0004003b, + 0x00000011,0x0000040b,0x00000007,0x0004003b,0x00000011,0x0000040f,0x00000007,0x0004003b, + 0x00000011,0x00000424,0x00000007,0x0004003b,0x00000011,0x0000042d,0x00000007,0x0004003b, + 0x00000011,0x00000435,0x00000007,0x0004003b,0x00000011,0x0000043d,0x00000007,0x0004003b, + 0x00000011,0x00000440,0x00000007,0x0004003b,0x00000011,0x0000045c,0x00000007,0x0004003b, + 0x00000011,0x00000460,0x00000007,0x0004003b,0x00000011,0x00000475,0x00000007,0x0004003b, + 0x00000011,0x0000047e,0x00000007,0x0004003b,0x00000011,0x00000486,0x00000007,0x0004003b, + 0x00000011,0x0000048e,0x00000007,0x0004003b,0x00000011,0x00000491,0x00000007,0x0004003b, + 0x00000011,0x000004a8,0x00000007,0x0004003b,0x00000011,0x000004b9,0x00000007,0x0004003b, + 0x00000011,0x000004bc,0x00000007,0x0004003b,0x00000011,0x000004bf,0x00000007,0x0004003b, + 0x00000011,0x000004c5,0x00000007,0x0004003b,0x00000011,0x000004c8,0x00000007,0x0004003b, + 0x00000011,0x000004d0,0x00000007,0x0004003b,0x00000011,0x000004ea,0x00000007,0x0004003b, + 0x00000011,0x000004f2,0x00000007,0x0004003b,0x00000011,0x00000511,0x00000007,0x0004003b, + 0x00000011,0x00000517,0x00000007,0x0004003b,0x00000011,0x0000052c,0x00000007,0x0004003b, + 0x00000011,0x00000537,0x00000007,0x0004003b,0x00000011,0x0000053f,0x00000007,0x0004003b, + 0x00000011,0x00000547,0x00000007,0x0004003b,0x00000011,0x0000054a,0x00000007,0x0004003b, + 0x00000011,0x00000564,0x00000007,0x0004003b,0x00000011,0x00000568,0x00000007,0x0004003b, + 0x0000056c,0x0000056d,0x00000007,0x0004003b,0x00000011,0x0000057a,0x00000007,0x0004003b, + 0x00000583,0x00000584,0x00000007,0x0004003b,0x00000011,0x0000059b,0x00000007,0x0004003b, + 0x00000011,0x000005b0,0x00000007,0x0004003b,0x000001c5,0x000005bc,0x00000007,0x0004003b, + 0x00000011,0x000005d9,0x00000007,0x0004003b,0x00000011,0x000005dc,0x00000007,0x0004003b, + 0x00000011,0x000005df,0x00000007,0x0004003b,0x00000011,0x000005e3,0x00000007,0x0004003b, + 0x00000011,0x000005e6,0x00000007,0x0004003b,0x00000011,0x000005ee,0x00000007,0x0004003b, + 0x00000011,0x00000608,0x00000007,0x0004003b,0x00000011,0x00000610,0x00000007,0x0004003b, + 0x00000011,0x0000062f,0x00000007,0x0004003b,0x00000011,0x00000635,0x00000007,0x0004003b, + 0x00000011,0x0000064a,0x00000007,0x0004003b,0x00000011,0x00000655,0x00000007,0x0004003b, + 0x00000011,0x0000065d,0x00000007,0x0004003b,0x00000011,0x00000665,0x00000007,0x0004003b, + 0x00000011,0x00000668,0x00000007,0x0004003b,0x00000011,0x00000682,0x00000007,0x0004003b, + 0x00000011,0x00000686,0x00000007,0x0004003b,0x0000056c,0x00000689,0x00000007,0x0004003b, + 0x00000011,0x00000696,0x00000007,0x0004003b,0x00000583,0x0000069e,0x00000007,0x0004003b, + 0x00000011,0x000006b5,0x00000007,0x0004003b,0x00000011,0x000006c9,0x00000007,0x0004003b, + 0x00000011,0x000006f1,0x00000007,0x0004003b,0x00000011,0x000006f4,0x00000007,0x0004003b, + 0x00000011,0x000006f7,0x00000007,0x0004003b,0x00000011,0x000006fb,0x00000007,0x0004003b, + 0x00000011,0x000006fe,0x00000007,0x0004003b,0x00000011,0x00000706,0x00000007,0x0004003b, + 0x00000011,0x00000720,0x00000007,0x0004003b,0x00000011,0x00000728,0x00000007,0x0004003b, + 0x00000011,0x00000747,0x00000007,0x0004003b,0x00000011,0x0000074d,0x00000007,0x0004003b, + 0x00000011,0x00000762,0x00000007,0x0004003b,0x00000011,0x0000076d,0x00000007,0x0004003b, + 0x00000011,0x00000775,0x00000007,0x0004003b,0x00000011,0x0000077d,0x00000007,0x0004003b, + 0x00000011,0x00000780,0x00000007,0x0004003b,0x00000011,0x0000079a,0x00000007,0x0004003b, + 0x00000011,0x0000079e,0x00000007,0x0004003b,0x0000056c,0x000007a1,0x00000007,0x0004003b, + 0x00000011,0x000007ae,0x00000007,0x0004003b,0x00000583,0x000007b6,0x00000007,0x0004003b, + 0x00000011,0x000007cd,0x00000007,0x0004003b,0x00000011,0x000007e1,0x00000007,0x0004003b, + 0x00000011,0x00000809,0x00000007,0x0004003b,0x00000011,0x0000080c,0x00000007,0x0004003b, + 0x00000011,0x0000080f,0x00000007,0x0004003b,0x00000011,0x00000813,0x00000007,0x0004003b, + 0x00000011,0x00000816,0x00000007,0x0004003b,0x00000011,0x0000081e,0x00000007,0x0004003b, + 0x00000011,0x00000838,0x00000007,0x0004003b,0x00000011,0x00000840,0x00000007,0x0004003b, + 0x00000011,0x0000085f,0x00000007,0x0004003b,0x00000011,0x00000865,0x00000007,0x0004003b, + 0x00000011,0x0000087a,0x00000007,0x0004003b,0x00000011,0x00000885,0x00000007,0x0004003b, + 0x00000011,0x0000088d,0x00000007,0x0004003b,0x00000011,0x00000895,0x00000007,0x0004003b, + 0x00000011,0x00000898,0x00000007,0x0004003b,0x00000011,0x000008b2,0x00000007,0x0004003b, + 0x00000011,0x000008b6,0x00000007,0x0004003b,0x0000056c,0x000008b9,0x00000007,0x0004003b, + 0x00000011,0x000008c6,0x00000007,0x0004003b,0x00000583,0x000008ce,0x00000007,0x0004003b, + 0x00000011,0x000008e5,0x00000007,0x0004003b,0x00000011,0x000008f9,0x00000007,0x0004003b, + 0x00000011,0x0000091d,0x00000007,0x0004003b,0x00000011,0x00000934,0x00000007,0x0004003b, + 0x00000011,0x0000093c,0x00000007,0x0004003b,0x00000011,0x00000940,0x00000007,0x0004003b, + 0x00000011,0x00000947,0x00000007,0x0004003b,0x00000011,0x00000961,0x00000007,0x0004003b, + 0x00000011,0x00000964,0x00000007,0x0004003b,0x00000011,0x0000096c,0x00000007,0x0004003b, + 0x00000011,0x0000096f,0x00000007,0x0004003b,0x00000011,0x00000973,0x00000007,0x0004003b, + 0x00000011,0x00000980,0x00000007,0x0004003b,0x00000011,0x00000988,0x00000007,0x0004003b, + 0x00000011,0x0000099b,0x00000007,0x0004003b,0x00000011,0x000009a3,0x00000007,0x0004003b, + 0x00000011,0x000009d8,0x00000007,0x0004003b,0x00000011,0x000009e0,0x00000007,0x0004003b, + 0x00000011,0x000009e4,0x00000007,0x0004003b,0x00000011,0x000009eb,0x00000007,0x0004003b, + 0x00000011,0x00000a05,0x00000007,0x0004003b,0x00000011,0x00000a08,0x00000007,0x0004003b, + 0x00000011,0x00000a10,0x00000007,0x0004003b,0x00000011,0x00000a13,0x00000007,0x0004003b, + 0x00000011,0x00000a17,0x00000007,0x0004003b,0x00000011,0x00000a24,0x00000007,0x0004003b, + 0x00000011,0x00000a2c,0x00000007,0x0004003b,0x00000011,0x00000a3f,0x00000007,0x0004003b, + 0x00000027,0x00000a47,0x00000007,0x0004003b,0x00000027,0x00000a51,0x00000007,0x0004003b, + 0x00000027,0x00000a64,0x00000007,0x0004003b,0x00000027,0x00000a66,0x00000007,0x0004003b, + 0x00000011,0x00000a68,0x00000007,0x0004003b,0x00000011,0x00000a69,0x00000007,0x00050041, + 0x0000015e,0x0000015f,0x0000015d,0x00000044,0x0004003d,0x00000006,0x00000160,0x0000015f, + 0x0003003e,0x0000015a,0x00000160,0x0004003d,0x00000006,0x00000163,0x00000162,0x0003003e, + 0x00000161,0x00000163,0x0004003d,0x00000006,0x00000166,0x00000165,0x0003003e,0x00000164, + 0x00000166,0x00050041,0x0000015e,0x00000169,0x00000168,0x00000044,0x0004003d,0x00000006, + 0x0000016a,0x00000169,0x00050089,0x00000006,0x0000016c,0x0000016a,0x0000016b,0x0003003e, + 0x00000167,0x0000016c,0x00050041,0x0000015e,0x0000016e,0x00000168,0x00000044,0x0004003d, + 0x00000006,0x0000016f,0x0000016e,0x00050086,0x00000006,0x00000170,0x0000016f,0x0000016b, + 0x0003003e,0x0000016d,0x00000170,0x0004003d,0x00000006,0x00000172,0x0000016d,0x00050041, + 0x00000177,0x00000178,0x00000175,0x00000176,0x0004003d,0x00000006,0x00000179,0x00000178, + 0x00050086,0x00000006,0x0000017a,0x00000172,0x00000179,0x0003003e,0x00000171,0x0000017a, + 0x0004003d,0x00000006,0x0000017c,0x0000016d,0x00050041,0x00000177,0x0000017d,0x00000175, + 0x00000176,0x0004003d,0x00000006,0x0000017e,0x0000017d,0x00050089,0x00000006,0x0000017f, + 0x0000017c,0x0000017e,0x0003003e,0x0000017b,0x0000017f,0x00050041,0x0000015e,0x00000181, + 0x00000168,0x00000008,0x0004003d,0x00000006,0x00000182,0x00000181,0x00050041,0x0000015e, + 0x00000183,0x00000168,0x00000113,0x0004003d,0x00000006,0x00000184,0x00000183,0x00050084, + 0x00000006,0x00000185,0x00000184,0x000000a4,0x00050080,0x00000006,0x00000186,0x00000182, + 0x00000185,0x00050084,0x00000006,0x00000189,0x00000186,0x00000188,0x0003003e,0x00000180, + 0x00000189,0x0004003d,0x00000006,0x0000018b,0x00000180,0x0004003d,0x00000006,0x0000018c, + 0x00000161,0x00050084,0x00000006,0x0000018d,0x0000018c,0x000000a1,0x00050080,0x00000006, + 0x0000018e,0x0000018b,0x0000018d,0x0003003e,0x0000018a,0x0000018e,0x0004003d,0x00000006, + 0x00000190,0x0000017b,0x00050084,0x00000006,0x00000193,0x00000190,0x00000192,0x0003003e, + 0x0000018f,0x00000193,0x0004003d,0x00000006,0x00000195,0x00000161,0x00050084,0x00000006, + 0x00000197,0x00000195,0x00000196,0x0003003e,0x00000194,0x00000197,0x00050041,0x00000177, + 0x0000019a,0x00000175,0x00000199,0x0004003d,0x00000006,0x0000019b,0x0000019a,0x0004003d, + 0x00000006,0x0000019c,0x00000171,0x00050041,0x00000177,0x0000019d,0x00000175,0x000000b3, + 0x0004003d,0x00000006,0x0000019e,0x0000019d,0x00050084,0x00000006,0x0000019f,0x0000019c, + 0x0000019e,0x00050080,0x00000006,0x000001a0,0x0000019b,0x0000019f,0x0003003e,0x00000198, + 0x000001a0,0x0004003d,0x00000006,0x000001a3,0x0000018a,0x00050041,0x00000177,0x000001a4, + 0x00000175,0x0000008b,0x0004003d,0x00000006,0x000001a5,0x000001a4,0x000500b0,0x00000034, + 0x000001a6,0x000001a3,0x000001a5,0x0003003e,0x000001a2,0x000001a6,0x0004003d,0x00000006, + 0x000001aa,0x00000167,0x000500aa,0x00000034,0x000001ab,0x000001aa,0x00000044,0x000500a7, + 0x00000034,0x000001ac,0x000001a9,0x000001ab,0x0003003e,0x000001a7,0x000001ac,0x0003003e, + 0x000001ad,0x00000044,0x000200f9,0x000001ae,0x000200f8,0x000001ae,0x000400f6,0x000001b0, + 0x000001b1,0x00000001,0x000200f9,0x000001b2,0x000200f8,0x000001b2,0x0004003d,0x00000006, + 0x000001b3,0x000001ad,0x000500b0,0x00000034,0x000001b4,0x000001b3,0x00000191,0x000400fa, + 0x000001b4,0x000001af,0x000001b0,0x000200f8,0x000001af,0x0004003d,0x00000034,0x000001b5, + 0x000001a7,0x000300f7,0x000001b7,0x00000000,0x000400fa,0x000001b5,0x000001b6,0x000001ee, + 0x000200f8,0x000001b6,0x000300f7,0x000001bc,0x00000000,0x000400fa,0x000001ba,0x000001bb, + 0x000001ea,0x000200f8,0x000001bb,0x0004003d,0x00000006,0x000001be,0x0000018a,0x00050041, + 0x00000177,0x000001bf,0x00000175,0x0000008b,0x0004003d,0x00000006,0x000001c0,0x000001bf, + 0x00050082,0x00000006,0x000001c1,0x000001c0,0x00000008,0x0007000c,0x00000006,0x000001c2, + 0x00000001,0x00000026,0x000001be,0x000001c1,0x0003003e,0x000001bd,0x000001c2,0x0004003d, + 0x00000006,0x000001c7,0x000001ad,0x00050041,0x000001c8,0x000001c9,0x000001c6,0x000001c7, + 0x0004003d,0x00000006,0x000001ce,0x000001bd,0x00050041,0x00000177,0x000001d0,0x00000175, + 0x000001cf,0x0004003d,0x00000006,0x000001d1,0x000001d0,0x00050084,0x00000006,0x000001d2, + 0x000001ce,0x000001d1,0x0004003d,0x00000006,0x000001d3,0x00000198,0x00050080,0x00000006, + 0x000001d4,0x000001d2,0x000001d3,0x0004003d,0x00000006,0x000001d5,0x0000018f,0x00050080, + 0x00000006,0x000001d6,0x000001d4,0x000001d5,0x0004003d,0x00000006,0x000001d7,0x000001ad, + 0x00050084,0x00000006,0x000001d8,0x000001d7,0x000000a1,0x00050080,0x00000006,0x000001d9, + 0x000001d6,0x000001d8,0x00060041,0x000001da,0x000001db,0x000001cd,0x0000008b,0x000001d9, + 0x0004003d,0x00000006,0x000001dc,0x000001bd,0x00050041,0x00000177,0x000001dd,0x00000175, + 0x000001cf,0x0004003d,0x00000006,0x000001de,0x000001dd,0x00050084,0x00000006,0x000001df, + 0x000001dc,0x000001de,0x0004003d,0x00000006,0x000001e0,0x00000198,0x00050080,0x00000006, + 0x000001e1,0x000001df,0x000001e0,0x0004003d,0x00000006,0x000001e2,0x0000018f,0x00050080, + 0x00000006,0x000001e3,0x000001e1,0x000001e2,0x0004003d,0x00000006,0x000001e4,0x000001ad, + 0x00050084,0x00000006,0x000001e5,0x000001e4,0x000000a1,0x00050080,0x00000006,0x000001e6, + 0x000001e3,0x000001e5,0x00050041,0x00000177,0x000001e7,0x00000175,0x000001cf,0x0004003d, + 0x00000006,0x000001e8,0x000001e7,0x00071169,0x000001c3,0x000001e9,0x000001db,0x0000008b, + 0x000001e8,0x00000000,0x0003003e,0x000001c9,0x000001e9,0x000200f9,0x000001bc,0x000200f8, + 0x000001ea,0x0004003d,0x00000006,0x000001eb,0x000001ad,0x00050041,0x000001c8,0x000001ed, + 0x000001c6,0x000001eb,0x0003003e,0x000001ed,0x000001ec,0x000200f9,0x000001bc,0x000200f8, + 0x000001bc,0x000200f9,0x000001b7,0x000200f8,0x000001ee,0x0004003d,0x00000006,0x000001ef, + 0x000001ad,0x00050041,0x000001c8,0x000001f0,0x000001c6,0x000001ef,0x0003003e,0x000001f0, + 0x000001ec,0x000200f9,0x000001b7,0x000200f8,0x000001b7,0x000200f9,0x000001b1,0x000200f8, + 0x000001b1,0x0004003d,0x00000006,0x000001f1,0x000001ad,0x00050080,0x00000006,0x000001f2, + 0x000001f1,0x000000b3,0x0003003e,0x000001ad,0x000001f2,0x000200f9,0x000001ae,0x000200f8, + 0x000001b0,0x0004003d,0x00000006,0x000001f4,0x00000161,0x00050084,0x00000006,0x000001f5, + 0x000001f4,0x000000a1,0x00050084,0x00000006,0x000001f7,0x000001f5,0x000001f6,0x0003003e, + 0x000001f3,0x000001f7,0x0004003d,0x00000034,0x000001f8,0x000001a7,0x000300f7,0x000001fa, + 0x00000000,0x000400fa,0x000001f8,0x000001f9,0x000001fa,0x000200f8,0x000001f9,0x000200f9, + 0x000001fa,0x000200f8,0x000001fa,0x000700f5,0x00000034,0x000001fd,0x000001f8,0x000001b0, + 0x000001fc,0x000001f9,0x0004003d,0x00000034,0x000001fe,0x000001a2,0x000500a7,0x00000034, + 0x000001ff,0x000001fd,0x000001fe,0x000300f7,0x00000201,0x00000000,0x000400fa,0x000001ff, + 0x00000200,0x00000201,0x000200f8,0x00000200,0x0003003e,0x00000202,0x00000044,0x000200f9, + 0x00000203,0x000200f8,0x00000203,0x000400f6,0x00000205,0x00000206,0x00000001,0x000200f9, + 0x00000207,0x000200f8,0x00000207,0x0004003d,0x00000006,0x00000208,0x00000202,0x000500b0, + 0x00000034,0x00000209,0x00000208,0x00000191,0x000400fa,0x00000209,0x00000204,0x00000205, + 0x000200f8,0x00000204,0x0004003d,0x00000006,0x0000020b,0x00000202,0x00050082,0x00000006, + 0x0000020c,0x00000191,0x0000020b,0x000500b0,0x00000034,0x0000020d,0x0000020c,0x0000008d, + 0x000300f7,0x00000210,0x00000000,0x000400fa,0x0000020d,0x0000020f,0x00000213,0x000200f8, + 0x0000020f,0x0004003d,0x00000006,0x00000211,0x00000202,0x00050082,0x00000006,0x00000212, + 0x00000191,0x00000211,0x0003003e,0x0000020e,0x00000212,0x000200f9,0x00000210,0x000200f8, + 0x00000213,0x0003003e,0x0000020e,0x0000008d,0x000200f9,0x00000210,0x000200f8,0x00000210, + 0x0004003d,0x00000006,0x00000214,0x0000020e,0x0003003e,0x0000020a,0x00000214,0x0004003d, + 0x00000006,0x00000216,0x0000020a,0x000500aa,0x00000034,0x00000217,0x00000216,0x00000008, + 0x000300f7,0x0000021a,0x00000000,0x000400fa,0x00000217,0x00000219,0x0000021b,0x000200f8, + 0x00000219,0x0003003e,0x00000218,0x00000008,0x000200f9,0x0000021a,0x000200f8,0x0000021b, + 0x0004003d,0x00000006,0x0000021c,0x0000020a,0x000500aa,0x00000034,0x0000021d,0x0000021c, + 0x00000113,0x000600a9,0x00000006,0x0000021e,0x0000021d,0x00000113,0x0000008d,0x0003003e, + 0x00000218,0x0000021e,0x000200f9,0x0000021a,0x000200f8,0x0000021a,0x0004003d,0x00000006, + 0x0000021f,0x00000218,0x0003003e,0x00000215,0x0000021f,0x0004003d,0x00000006,0x00000222, + 0x00000215,0x00050086,0x00000006,0x00000223,0x00000221,0x00000222,0x0003003e,0x00000220, + 0x00000223,0x0004003d,0x00000006,0x00000225,0x00000164,0x0004003d,0x00000006,0x00000226, + 0x00000215,0x00050089,0x00000006,0x00000227,0x00000225,0x00000226,0x0003003e,0x00000224, + 0x00000227,0x0003003e,0x00000228,0x00000044,0x000200f9,0x00000229,0x000200f8,0x00000229, + 0x000400f6,0x0000022b,0x0000022c,0x00000001,0x000200f9,0x0000022d,0x000200f8,0x0000022d, + 0x0004003d,0x00000006,0x0000022e,0x00000228,0x0004003d,0x00000006,0x0000022f,0x00000220, + 0x00050080,0x00000006,0x00000230,0x000000a1,0x0000022f,0x00050082,0x00000006,0x00000231, + 0x00000230,0x00000008,0x0004003d,0x00000006,0x00000232,0x00000220,0x00050086,0x00000006, + 0x00000233,0x00000231,0x00000232,0x000500b0,0x00000034,0x00000234,0x0000022e,0x00000233, + 0x000400fa,0x00000234,0x0000022a,0x0000022b,0x000200f8,0x0000022a,0x0004003d,0x00000006, + 0x00000236,0x00000228,0x0004003d,0x00000006,0x00000237,0x00000220,0x00050084,0x00000006, + 0x00000238,0x00000236,0x00000237,0x0004003d,0x00000006,0x00000239,0x00000164,0x0004003d, + 0x00000006,0x0000023a,0x00000215,0x00050086,0x00000006,0x0000023b,0x00000239,0x0000023a, + 0x00050080,0x00000006,0x0000023c,0x00000238,0x0000023b,0x0003003e,0x00000235,0x0000023c, + 0x0004003d,0x00000006,0x0000023e,0x0000018a,0x0004003d,0x00000006,0x0000023f,0x00000235, + 0x00050080,0x00000006,0x00000240,0x0000023e,0x0000023f,0x0003003e,0x0000023d,0x00000240, + 0x0004003d,0x00000006,0x00000241,0x00000235,0x000500b0,0x00000034,0x00000242,0x00000241, + 0x000000a1,0x0004003d,0x00000006,0x00000243,0x00000224,0x0004003d,0x00000006,0x00000244, + 0x0000020a,0x000500b0,0x00000034,0x00000245,0x00000243,0x00000244,0x000500a7,0x00000034, + 0x00000246,0x00000242,0x00000245,0x000300f7,0x00000248,0x00000000,0x000400fa,0x00000246, + 0x00000247,0x00000248,0x000200f8,0x00000247,0x0004003d,0x00000006,0x00000249,0x0000023d, + 0x00050041,0x00000177,0x0000024a,0x00000175,0x0000008b,0x0004003d,0x00000006,0x0000024b, + 0x0000024a,0x000500b0,0x00000034,0x0000024c,0x00000249,0x0000024b,0x000200f9,0x00000248, + 0x000200f8,0x00000248,0x000700f5,0x00000034,0x0000024d,0x00000246,0x0000022a,0x0000024c, + 0x00000247,0x000300f7,0x0000024f,0x00000000,0x000400fa,0x0000024d,0x0000024e,0x0000024f, + 0x000200f8,0x0000024e,0x0004003d,0x00000006,0x00000251,0x0000018f,0x0004003d,0x00000006, + 0x00000252,0x00000202,0x00050084,0x00000006,0x00000253,0x00000252,0x000000a1,0x00050080, + 0x00000006,0x00000254,0x00000251,0x00000253,0x0004003d,0x00000006,0x00000255,0x00000224, + 0x00050084,0x00000006,0x00000256,0x00000255,0x000000a1,0x00050080,0x00000006,0x00000257, + 0x00000254,0x00000256,0x0003003e,0x00000250,0x00000257,0x0004003d,0x00000006,0x00000258, + 0x0000023d,0x00050041,0x00000177,0x00000259,0x00000175,0x000001cf,0x0004003d,0x00000006, + 0x0000025a,0x00000259,0x00050084,0x00000006,0x0000025b,0x00000258,0x0000025a,0x0004003d, + 0x00000006,0x0000025c,0x00000198,0x00050080,0x00000006,0x0000025d,0x0000025b,0x0000025c, + 0x0004003d,0x00000006,0x0000025e,0x00000250,0x00050080,0x00000006,0x0000025f,0x0000025d, + 0x0000025e,0x0003003e,0x00000261,0x0000025f,0x00060039,0x00000002,0x00000263,0x00000024, + 0x00000261,0x00000262,0x0004003d,0x0000001f,0x00000264,0x00000262,0x0003003e,0x00000260, + 0x00000264,0x000300f7,0x00000268,0x00000000,0x000400fa,0x00000266,0x00000267,0x00000268, + 0x000200f8,0x00000267,0x00050041,0x00000177,0x0000026f,0x00000175,0x0000026e,0x0004003d, + 0x00000006,0x00000270,0x0000026f,0x0004003d,0x00000006,0x00000271,0x00000250,0x00050080, + 0x00000006,0x00000272,0x00000270,0x00000271,0x000500c2,0x00000006,0x00000273,0x00000272, + 0x0000007c,0x00060041,0x0000008f,0x00000274,0x0000026d,0x0000008b,0x00000273,0x0004003d, + 0x00000026,0x00000275,0x00000274,0x0003003e,0x00000269,0x00000275,0x00050041,0x00000177, + 0x00000277,0x00000175,0x0000026e,0x0004003d,0x00000006,0x00000278,0x00000277,0x0004003d, + 0x00000006,0x00000279,0x00000250,0x00050080,0x00000006,0x0000027a,0x00000278,0x00000279, + 0x000500c2,0x00000006,0x0000027b,0x0000027a,0x0000007c,0x00050080,0x00000006,0x0000027c, + 0x0000027b,0x00000008,0x00060041,0x0000008f,0x0000027d,0x0000026d,0x0000008b,0x0000027c, + 0x0004003d,0x00000026,0x0000027e,0x0000027d,0x0003003e,0x00000276,0x0000027e,0x0003003e, + 0x0000027f,0x00000044,0x000200f9,0x00000280,0x000200f8,0x00000280,0x000400f6,0x00000282, + 0x00000283,0x00000001,0x000200f9,0x00000284,0x000200f8,0x00000284,0x0004003d,0x00000006, + 0x00000285,0x0000027f,0x000500b0,0x00000034,0x00000286,0x00000285,0x0000008d,0x000400fa, + 0x00000286,0x00000281,0x00000282,0x000200f8,0x00000281,0x0004003d,0x00000006,0x00000287, + 0x0000027f,0x0004003d,0x00000006,0x00000288,0x0000027f,0x00050041,0x00000011,0x00000289, + 0x00000269,0x00000288,0x0004003d,0x00000006,0x0000028a,0x00000289,0x0004007c,0x0000000a, + 0x0000028b,0x0000028a,0x00040073,0x0000001d,0x0000028c,0x0000028b,0x00050041,0x000000b0, + 0x0000028d,0x00000260,0x00000287,0x0004003d,0x0000001d,0x0000028e,0x0000028d,0x00050085, + 0x0000001d,0x0000028f,0x0000028e,0x0000028c,0x00050041,0x000000b0,0x00000290,0x00000260, + 0x00000287,0x0003003e,0x00000290,0x0000028f,0x0004003d,0x00000006,0x00000291,0x0000027f, + 0x00050080,0x00000006,0x00000292,0x0000008d,0x00000291,0x0004003d,0x00000006,0x00000293, + 0x0000027f,0x00050041,0x00000011,0x00000294,0x00000276,0x00000293,0x0004003d,0x00000006, + 0x00000295,0x00000294,0x0004007c,0x0000000a,0x00000296,0x00000295,0x00040073,0x0000001d, + 0x00000297,0x00000296,0x00050041,0x000000b0,0x00000298,0x00000260,0x00000292,0x0004003d, + 0x0000001d,0x00000299,0x00000298,0x00050085,0x0000001d,0x0000029a,0x00000299,0x00000297, + 0x00050041,0x000000b0,0x0000029b,0x00000260,0x00000292,0x0003003e,0x0000029b,0x0000029a, + 0x000200f9,0x00000283,0x000200f8,0x00000283,0x0004003d,0x00000006,0x0000029c,0x0000027f, + 0x00050080,0x00000006,0x0000029d,0x0000029c,0x000000b3,0x0003003e,0x0000027f,0x0000029d, + 0x000200f9,0x00000280,0x000200f8,0x00000282,0x000200f9,0x00000268,0x000200f8,0x00000268, + 0x0003003e,0x0000029e,0x00000044,0x000200f9,0x0000029f,0x000200f8,0x0000029f,0x000400f6, + 0x000002a1,0x000002a2,0x00000001,0x000200f9,0x000002a3,0x000200f8,0x000002a3,0x0004003d, + 0x00000006,0x000002a4,0x0000029e,0x000500b0,0x00000034,0x000002a5,0x000002a4,0x0000008d, + 0x000400fa,0x000002a5,0x000002a0,0x000002a1,0x000200f8,0x000002a0,0x0004003d,0x00000006, + 0x000002a7,0x0000029e,0x0004003d,0x00000006,0x000002a8,0x0000029e,0x00050041,0x000000b0, + 0x000002a9,0x00000260,0x000002a8,0x0004003d,0x0000001d,0x000002aa,0x000002a9,0x00040073, + 0x0000000a,0x000002ab,0x000002aa,0x0004007c,0x00000006,0x000002ac,0x000002ab,0x00050041, + 0x00000011,0x000002ad,0x000002a6,0x000002a7,0x0003003e,0x000002ad,0x000002ac,0x0004003d, + 0x00000006,0x000002af,0x0000029e,0x0004003d,0x00000006,0x000002b0,0x0000029e,0x00050080, + 0x00000006,0x000002b1,0x0000008d,0x000002b0,0x00050041,0x000000b0,0x000002b2,0x00000260, + 0x000002b1,0x0004003d,0x0000001d,0x000002b3,0x000002b2,0x00040073,0x0000000a,0x000002b4, + 0x000002b3,0x0004007c,0x00000006,0x000002b5,0x000002b4,0x00050041,0x00000011,0x000002b6, + 0x000002ae,0x000002af,0x0003003e,0x000002b6,0x000002b5,0x000200f9,0x000002a2,0x000200f8, + 0x000002a2,0x0004003d,0x00000006,0x000002b7,0x0000029e,0x00050080,0x00000006,0x000002b8, + 0x000002b7,0x000000b3,0x0003003e,0x0000029e,0x000002b8,0x000200f9,0x0000029f,0x000200f8, + 0x000002a1,0x0004003d,0x00000006,0x000002c7,0x000001f3,0x0004003d,0x00000006,0x000002c8, + 0x00000235,0x00050084,0x00000006,0x000002c9,0x000002c8,0x000001f6,0x00050080,0x00000006, + 0x000002ca,0x000002c7,0x000002c9,0x0004003d,0x00000006,0x000002cb,0x00000224,0x00050084, + 0x00000006,0x000002cc,0x000002cb,0x00000113,0x00050080,0x00000006,0x000002cd,0x000002ca, + 0x000002cc,0x0004003d,0x00000026,0x000002ce,0x000002a6,0x00050041,0x000002cf,0x000002d0, + 0x000002c6,0x000002cd,0x0005003e,0x000002d0,0x000002ce,0x00000028,0x00000113,0x0004003d, + 0x00000006,0x000002d1,0x000001f3,0x0004003d,0x00000006,0x000002d2,0x00000235,0x00050084, + 0x00000006,0x000002d3,0x000002d2,0x000001f6,0x00050080,0x00000006,0x000002d4,0x000002d1, + 0x000002d3,0x0004003d,0x00000006,0x000002d5,0x00000224,0x00050084,0x00000006,0x000002d6, + 0x000002d5,0x00000113,0x00050080,0x00000006,0x000002d7,0x000002d4,0x000002d6,0x00050080, + 0x00000006,0x000002d8,0x000002d7,0x00000008,0x0004003d,0x00000026,0x000002d9,0x000002ae, + 0x00050041,0x000002cf,0x000002da,0x000002c6,0x000002d8,0x0005003e,0x000002da,0x000002d9, + 0x00000028,0x00000113,0x000200f9,0x0000024f,0x000200f8,0x0000024f,0x000200f9,0x0000022c, + 0x000200f8,0x0000022c,0x0004003d,0x00000006,0x000002db,0x00000228,0x00050080,0x00000006, + 0x000002dc,0x000002db,0x000000b3,0x0003003e,0x00000228,0x000002dc,0x000200f9,0x00000229, + 0x000200f8,0x0000022b,0x00040039,0x00000002,0x000002dd,0x0000001b,0x0003003e,0x000002de, + 0x00000044,0x000200f9,0x000002df,0x000200f8,0x000002df,0x000400f6,0x000002e1,0x000002e2, + 0x00000001,0x000200f9,0x000002e3,0x000200f8,0x000002e3,0x0004003d,0x00000006,0x000002e4, + 0x000002de,0x0004003d,0x00000006,0x000002e5,0x0000020a,0x000500b0,0x00000034,0x000002e6, + 0x000002e4,0x000002e5,0x000400fa,0x000002e6,0x000002e0,0x000002e1,0x000200f8,0x000002e0, + 0x0004003d,0x00000006,0x000002e7,0x00000202,0x0004003d,0x00000006,0x000002e8,0x000002de, + 0x00050080,0x00000006,0x000002e9,0x000002e7,0x000002e8,0x00050041,0x000001c8,0x000002ea, + 0x000001c6,0x000002e9,0x0004003d,0x00000006,0x000002eb,0x000001f3,0x0004003d,0x00000006, + 0x000002ec,0x000002de,0x00050084,0x00000006,0x000002ed,0x000002ec,0x00000113,0x00050080, + 0x00000006,0x000002ee,0x000002eb,0x000002ed,0x00050041,0x000002cf,0x000002ef,0x000002c6, + 0x000002ee,0x0004003d,0x00000006,0x000002f0,0x000001f3,0x0004003d,0x00000006,0x000002f1, + 0x000002de,0x00050084,0x00000006,0x000002f2,0x000002f1,0x00000113,0x00050080,0x00000006, + 0x000002f3,0x000002f0,0x000002f2,0x00081169,0x000001c3,0x000002f4,0x000002ef,0x0000008b, + 0x000001f6,0x00000030,0x00000113,0x0003003e,0x000002ea,0x000002f4,0x000200f9,0x000002e2, + 0x000200f8,0x000002e2,0x0004003d,0x00000006,0x000002f5,0x000002de,0x00050080,0x00000006, + 0x000002f6,0x000002f5,0x000000b3,0x0003003e,0x000002de,0x000002f6,0x000200f9,0x000002df, + 0x000200f8,0x000002e1,0x00040039,0x00000002,0x000002f7,0x0000001b,0x000200f9,0x00000206, + 0x000200f8,0x00000206,0x0004003d,0x00000006,0x000002f8,0x00000202,0x00050080,0x00000006, + 0x000002f9,0x000002f8,0x0000008d,0x0003003e,0x00000202,0x000002f9,0x000200f9,0x00000203, + 0x000200f8,0x00000205,0x000200f9,0x00000201,0x000200f8,0x00000201,0x000400e0,0x00000113, + 0x00000113,0x0000007d,0x00050041,0x00000177,0x000002fc,0x00000175,0x000002fb,0x0004003d, + 0x00000006,0x000002fd,0x000002fc,0x000300f7,0x00000303,0x00000000,0x000400fa,0x00000300, + 0x00000302,0x00000304,0x000200f8,0x00000302,0x0003003e,0x00000301,0x00000044,0x000200f9, + 0x00000303,0x000200f8,0x00000304,0x0004003d,0x00000006,0x00000305,0x00000171,0x00050084, + 0x00000006,0x00000307,0x00000305,0x00000306,0x0003003e,0x00000301,0x00000307,0x000200f9, + 0x00000303,0x000200f8,0x00000303,0x0004003d,0x00000006,0x00000308,0x00000301,0x00050080, + 0x00000006,0x00000309,0x000002fd,0x00000308,0x0003003e,0x000002fa,0x00000309,0x0004003d, + 0x00000006,0x0000030b,0x00000167,0x00050084,0x00000006,0x0000030e,0x0000030b,0x0000030d, + 0x0003003e,0x0000030a,0x0000030e,0x0004003d,0x00000006,0x00000310,0x00000171,0x00050084, + 0x00000006,0x00000312,0x00000310,0x00000311,0x00050041,0x00000177,0x00000314,0x00000175, + 0x00000313,0x0004003d,0x00000006,0x00000315,0x00000314,0x00050084,0x00000006,0x00000316, + 0x00000312,0x00000315,0x00050041,0x00000177,0x00000318,0x00000175,0x00000317,0x0004003d, + 0x00000006,0x00000319,0x00000318,0x00050080,0x00000006,0x0000031a,0x00000316,0x00000319, + 0x0004003d,0x00000006,0x0000031b,0x0000018f,0x00050080,0x00000006,0x0000031c,0x0000031a, + 0x0000031b,0x00050084,0x00000006,0x0000031d,0x0000031c,0x00000113,0x0003003e,0x0000030f, + 0x0000031d,0x00050041,0x00000177,0x0000031f,0x00000175,0x00000313,0x0004003d,0x00000006, + 0x00000320,0x0000031f,0x00050084,0x00000006,0x00000321,0x00000320,0x00000113,0x0003003e, + 0x0000031e,0x00000321,0x0003003e,0x00000322,0x00000044,0x000200f9,0x00000323,0x000200f8, + 0x00000323,0x000400f6,0x00000325,0x00000326,0x00000001,0x000200f9,0x00000327,0x000200f8, + 0x00000327,0x0004003d,0x00000006,0x00000328,0x00000322,0x000500b0,0x00000034,0x0000032e, + 0x00000328,0x0000032d,0x000400fa,0x0000032e,0x00000324,0x00000325,0x000200f8,0x00000324, + 0x0004003d,0x00000006,0x00000330,0x0000015a,0x0004003d,0x00000006,0x00000331,0x00000322, + 0x00050084,0x00000006,0x00000332,0x0000032a,0x00000331,0x00050080,0x00000006,0x00000333, + 0x00000330,0x00000332,0x0003003e,0x0000032f,0x00000333,0x0004003d,0x00000006,0x00000335, + 0x0000032f,0x00050086,0x00000006,0x00000336,0x00000335,0x000002bc,0x0007000c,0x00000006, + 0x00000338,0x00000001,0x00000026,0x00000336,0x00000337,0x0003003e,0x00000334,0x00000338, + 0x0004003d,0x00000006,0x0000033c,0x00000322,0x0004003d,0x00000006,0x0000033d,0x00000180, + 0x0004003d,0x00000006,0x0000033e,0x00000334,0x00050080,0x00000006,0x0000033f,0x0000033d, + 0x0000033e,0x00050041,0x00000177,0x00000340,0x00000175,0x0000008b,0x0004003d,0x00000006, + 0x00000341,0x00000340,0x00050082,0x00000006,0x00000342,0x00000341,0x00000008,0x0007000c, + 0x00000006,0x00000343,0x00000001,0x00000026,0x0000033f,0x00000342,0x00050041,0x00000177, + 0x00000345,0x00000175,0x00000344,0x0004003d,0x00000006,0x00000346,0x00000345,0x00050084, + 0x00000006,0x00000347,0x00000343,0x00000346,0x0004003d,0x00000006,0x00000348,0x000002fa, + 0x00050080,0x00000006,0x00000349,0x00000347,0x00000348,0x00050086,0x00000006,0x0000034a, + 0x00000349,0x000000a1,0x0004003d,0x00000006,0x0000034b,0x0000032f,0x00050089,0x00000006, + 0x0000034c,0x0000034b,0x000002bc,0x00050080,0x00000006,0x0000034d,0x0000034a,0x0000034c, + 0x00050041,0x00000011,0x0000034e,0x0000033b,0x0000033c,0x0003003e,0x0000034e,0x0000034d, + 0x000200f9,0x00000326,0x000200f8,0x00000326,0x0004003d,0x00000006,0x0000034f,0x00000322, + 0x00050080,0x00000006,0x00000350,0x0000034f,0x000000b3,0x0003003e,0x00000322,0x00000350, + 0x000200f9,0x00000323,0x000200f8,0x00000325,0x000300f7,0x00000353,0x00000000,0x000400fa, + 0x00000351,0x00000352,0x00000353,0x000200f8,0x00000352,0x0004003d,0x00000006,0x00000355, + 0x0000030a,0x00050080,0x00000006,0x00000356,0x00000355,0x00000044,0x00050084,0x00000006, + 0x00000357,0x00000356,0x000002bc,0x0003003e,0x00000354,0x00000357,0x0003003e,0x00000358, + 0x00000044,0x000200f9,0x00000359,0x000200f8,0x00000359,0x000400f6,0x0000035b,0x0000035c, + 0x00000001,0x000200f9,0x0000035d,0x000200f8,0x0000035d,0x0004003d,0x00000006,0x0000035e, + 0x00000358,0x000500b0,0x00000034,0x0000035f,0x0000035e,0x0000032d,0x000400fa,0x0000035f, + 0x0000035a,0x0000035b,0x000200f8,0x0000035a,0x0004003d,0x00000006,0x00000365,0x00000358, + 0x00050080,0x00000006,0x00000366,0x00000364,0x00000365,0x0004003d,0x00000006,0x0000036b, + 0x00000358,0x00050041,0x00000011,0x0000036c,0x0000033b,0x0000036b,0x0004003d,0x00000006, + 0x0000036d,0x0000036c,0x0004003d,0x00000006,0x0000036e,0x00000354,0x00050080,0x00000006, + 0x0000036f,0x0000036d,0x0000036e,0x00060041,0x0000008f,0x00000370,0x0000036a,0x0000008b, + 0x0000036f,0x0004003d,0x00000026,0x00000371,0x00000370,0x00050041,0x00000027,0x00000372, + 0x00000363,0x00000366,0x0003003e,0x00000372,0x00000371,0x000200f9,0x0000035c,0x000200f8, + 0x0000035c,0x0004003d,0x00000006,0x00000373,0x00000358,0x00050080,0x00000006,0x00000374, + 0x00000373,0x000000b3,0x0003003e,0x00000358,0x00000374,0x000200f9,0x00000359,0x000200f8, + 0x0000035b,0x0004003d,0x00000006,0x00000376,0x0000030f,0x0004003d,0x00000006,0x00000377, + 0x0000030a,0x00050080,0x00000006,0x00000378,0x00000377,0x00000044,0x00050084,0x00000006, + 0x0000037a,0x00000378,0x00000379,0x0004003d,0x00000006,0x0000037b,0x0000031e,0x00050084, + 0x00000006,0x0000037c,0x0000037a,0x0000037b,0x00050080,0x00000006,0x0000037d,0x00000376, + 0x0000037c,0x0003003e,0x00000375,0x0000037d,0x0003003e,0x0000037e,0x00000044,0x000200f9, + 0x0000037f,0x000200f8,0x0000037f,0x000400f6,0x00000381,0x00000382,0x00000001,0x000200f9, + 0x00000383,0x000200f8,0x00000383,0x0004003d,0x00000006,0x00000384,0x0000037e,0x000500b0, + 0x00000034,0x00000389,0x00000384,0x00000388,0x000400fa,0x00000389,0x00000380,0x00000381, + 0x000200f8,0x00000380,0x0004003d,0x00000006,0x0000038b,0x0000015a,0x0004003d,0x00000006, + 0x0000038c,0x0000037e,0x00050084,0x00000006,0x0000038d,0x0000032a,0x0000038c,0x00050080, + 0x00000006,0x0000038e,0x0000038b,0x0000038d,0x0007000c,0x00000006,0x00000391,0x00000001, + 0x00000026,0x0000038e,0x00000390,0x0003003e,0x0000038a,0x00000391,0x0004003d,0x00000006, + 0x00000393,0x0000038a,0x00050086,0x00000006,0x00000394,0x00000393,0x000002bc,0x0003003e, + 0x00000392,0x00000394,0x0004003d,0x00000006,0x00000396,0x0000038a,0x00050089,0x00000006, + 0x00000397,0x00000396,0x000002bc,0x0003003e,0x00000395,0x00000397,0x0004003d,0x00000006, + 0x0000039d,0x0000037e,0x00050080,0x00000006,0x0000039e,0x0000039c,0x0000039d,0x0004003d, + 0x00000006,0x000003a3,0x00000375,0x0004003d,0x00000006,0x000003a4,0x00000395,0x000500c2, + 0x00000006,0x000003a5,0x000003a4,0x00000008,0x0004003d,0x00000006,0x000003a6,0x0000031e, + 0x00050084,0x00000006,0x000003a7,0x000003a5,0x000003a6,0x00050080,0x00000006,0x000003a8, + 0x000003a3,0x000003a7,0x0004003d,0x00000006,0x000003a9,0x00000392,0x00050084,0x00000006, + 0x000003aa,0x000003a9,0x00000113,0x00050080,0x00000006,0x000003ab,0x000003a8,0x000003aa, + 0x0004003d,0x00000006,0x000003ac,0x00000395,0x000500c7,0x00000006,0x000003ad,0x000003ac, + 0x00000008,0x00050080,0x00000006,0x000003ae,0x000003ab,0x000003ad,0x00060041,0x0000008f, + 0x000003af,0x000003a2,0x0000008b,0x000003ae,0x0004003d,0x00000026,0x000003b0,0x000003af, + 0x00050041,0x00000027,0x000003b1,0x0000039b,0x0000039e,0x0003003e,0x000003b1,0x000003b0, + 0x000200f9,0x00000382,0x000200f8,0x00000382,0x0004003d,0x00000006,0x000003b2,0x0000037e, + 0x00050080,0x00000006,0x000003b3,0x000003b2,0x000000b3,0x0003003e,0x0000037e,0x000003b3, + 0x000200f9,0x0000037f,0x000200f8,0x00000381,0x000200f9,0x00000353,0x000200f8,0x00000353, + 0x000300f7,0x000003b9,0x00000000,0x000400fa,0x000003b7,0x000003b8,0x000003b9,0x000200f8, + 0x000003b8,0x0004003d,0x00000006,0x000003bb,0x0000030a,0x00050080,0x00000006,0x000003bc, + 0x000003bb,0x00000008,0x00050084,0x00000006,0x000003bd,0x000003bc,0x000002bc,0x0003003e, + 0x000003ba,0x000003bd,0x0003003e,0x000003be,0x00000044,0x000200f9,0x000003bf,0x000200f8, + 0x000003bf,0x000400f6,0x000003c1,0x000003c2,0x00000001,0x000200f9,0x000003c3,0x000200f8, + 0x000003c3,0x0004003d,0x00000006,0x000003c4,0x000003be,0x000500b0,0x00000034,0x000003c5, + 0x000003c4,0x0000032d,0x000400fa,0x000003c5,0x000003c0,0x000003c1,0x000200f8,0x000003c0, + 0x0004003d,0x00000006,0x000003c7,0x000003be,0x00050080,0x00000006,0x000003c8,0x000003c6, + 0x000003c7,0x0004003d,0x00000006,0x000003c9,0x000003be,0x00050041,0x00000011,0x000003ca, + 0x0000033b,0x000003c9,0x0004003d,0x00000006,0x000003cb,0x000003ca,0x0004003d,0x00000006, + 0x000003cc,0x000003ba,0x00050080,0x00000006,0x000003cd,0x000003cb,0x000003cc,0x00060041, + 0x0000008f,0x000003ce,0x0000036a,0x0000008b,0x000003cd,0x0004003d,0x00000026,0x000003cf, + 0x000003ce,0x00050041,0x00000027,0x000003d0,0x00000363,0x000003c8,0x0003003e,0x000003d0, + 0x000003cf,0x000200f9,0x000003c2,0x000200f8,0x000003c2,0x0004003d,0x00000006,0x000003d1, + 0x000003be,0x00050080,0x00000006,0x000003d2,0x000003d1,0x000000b3,0x0003003e,0x000003be, + 0x000003d2,0x000200f9,0x000003bf,0x000200f8,0x000003c1,0x0004003d,0x00000006,0x000003d4, + 0x0000030f,0x0004003d,0x00000006,0x000003d5,0x0000030a,0x00050080,0x00000006,0x000003d6, + 0x000003d5,0x00000008,0x00050084,0x00000006,0x000003d8,0x000003d6,0x000003d7,0x0004003d, + 0x00000006,0x000003d9,0x0000031e,0x00050084,0x00000006,0x000003da,0x000003d8,0x000003d9, + 0x00050080,0x00000006,0x000003db,0x000003d4,0x000003da,0x0003003e,0x000003d3,0x000003db, + 0x0003003e,0x000003dc,0x00000044,0x000200f9,0x000003dd,0x000200f8,0x000003dd,0x000400f6, + 0x000003df,0x000003e0,0x00000001,0x000200f9,0x000003e1,0x000200f8,0x000003e1,0x0004003d, + 0x00000006,0x000003e2,0x000003dc,0x000500b0,0x00000034,0x000003e3,0x000003e2,0x00000388, + 0x000400fa,0x000003e3,0x000003de,0x000003df,0x000200f8,0x000003de,0x0004003d,0x00000006, + 0x000003e5,0x0000015a,0x0004003d,0x00000006,0x000003e6,0x000003dc,0x00050084,0x00000006, + 0x000003e7,0x0000032a,0x000003e6,0x00050080,0x00000006,0x000003e8,0x000003e5,0x000003e7, + 0x0007000c,0x00000006,0x000003eb,0x00000001,0x00000026,0x000003e8,0x000003ea,0x0003003e, + 0x000003e4,0x000003eb,0x0004003d,0x00000006,0x000003ed,0x000003e4,0x00050086,0x00000006, + 0x000003ee,0x000003ed,0x000002bc,0x0003003e,0x000003ec,0x000003ee,0x0004003d,0x00000006, + 0x000003f0,0x000003e4,0x00050089,0x00000006,0x000003f1,0x000003f0,0x000002bc,0x0003003e, + 0x000003ef,0x000003f1,0x0004003d,0x00000006,0x000003f3,0x000003dc,0x00050080,0x00000006, + 0x000003f4,0x000003f2,0x000003f3,0x0004003d,0x00000006,0x000003f5,0x000003d3,0x0004003d, + 0x00000006,0x000003f6,0x000003ef,0x000500c2,0x00000006,0x000003f7,0x000003f6,0x00000008, + 0x0004003d,0x00000006,0x000003f8,0x0000031e,0x00050084,0x00000006,0x000003f9,0x000003f7, + 0x000003f8,0x00050080,0x00000006,0x000003fa,0x000003f5,0x000003f9,0x0004003d,0x00000006, + 0x000003fb,0x000003ec,0x00050084,0x00000006,0x000003fc,0x000003fb,0x00000113,0x00050080, + 0x00000006,0x000003fd,0x000003fa,0x000003fc,0x0004003d,0x00000006,0x000003fe,0x000003ef, + 0x000500c7,0x00000006,0x000003ff,0x000003fe,0x00000008,0x00050080,0x00000006,0x00000400, + 0x000003fd,0x000003ff,0x00060041,0x0000008f,0x00000401,0x000003a2,0x0000008b,0x00000400, + 0x0004003d,0x00000026,0x00000402,0x00000401,0x00050041,0x00000027,0x00000403,0x0000039b, + 0x000003f4,0x0003003e,0x00000403,0x00000402,0x000200f9,0x000003e0,0x000200f8,0x000003e0, + 0x0004003d,0x00000006,0x00000404,0x000003dc,0x00050080,0x00000006,0x00000405,0x00000404, + 0x000000b3,0x0003003e,0x000003dc,0x00000405,0x000200f9,0x000003dd,0x000200f8,0x000003df, + 0x000200f9,0x000003b9,0x000200f8,0x000003b9,0x000300f7,0x0000040a,0x00000000,0x000400fa, + 0x00000408,0x00000409,0x0000040a,0x000200f8,0x00000409,0x0004003d,0x00000006,0x0000040c, + 0x0000030a,0x00050080,0x00000006,0x0000040d,0x0000040c,0x00000113,0x00050084,0x00000006, + 0x0000040e,0x0000040d,0x000002bc,0x0003003e,0x0000040b,0x0000040e,0x0003003e,0x0000040f, + 0x00000044,0x000200f9,0x00000410,0x000200f8,0x00000410,0x000400f6,0x00000412,0x00000413, + 0x00000001,0x000200f9,0x00000414,0x000200f8,0x00000414,0x0004003d,0x00000006,0x00000415, + 0x0000040f,0x000500b0,0x00000034,0x00000416,0x00000415,0x0000032d,0x000400fa,0x00000416, + 0x00000411,0x00000412,0x000200f8,0x00000411,0x0004003d,0x00000006,0x00000418,0x0000040f, + 0x00050080,0x00000006,0x00000419,0x00000417,0x00000418,0x0004003d,0x00000006,0x0000041a, + 0x0000040f,0x00050041,0x00000011,0x0000041b,0x0000033b,0x0000041a,0x0004003d,0x00000006, + 0x0000041c,0x0000041b,0x0004003d,0x00000006,0x0000041d,0x0000040b,0x00050080,0x00000006, + 0x0000041e,0x0000041c,0x0000041d,0x00060041,0x0000008f,0x0000041f,0x0000036a,0x0000008b, + 0x0000041e,0x0004003d,0x00000026,0x00000420,0x0000041f,0x00050041,0x00000027,0x00000421, + 0x00000363,0x00000419,0x0003003e,0x00000421,0x00000420,0x000200f9,0x00000413,0x000200f8, + 0x00000413,0x0004003d,0x00000006,0x00000422,0x0000040f,0x00050080,0x00000006,0x00000423, + 0x00000422,0x000000b3,0x0003003e,0x0000040f,0x00000423,0x000200f9,0x00000410,0x000200f8, + 0x00000412,0x0004003d,0x00000006,0x00000425,0x0000030f,0x0004003d,0x00000006,0x00000426, + 0x0000030a,0x00050080,0x00000006,0x00000427,0x00000426,0x00000113,0x00050084,0x00000006, + 0x00000429,0x00000427,0x00000428,0x0004003d,0x00000006,0x0000042a,0x0000031e,0x00050084, + 0x00000006,0x0000042b,0x00000429,0x0000042a,0x00050080,0x00000006,0x0000042c,0x00000425, + 0x0000042b,0x0003003e,0x00000424,0x0000042c,0x0003003e,0x0000042d,0x00000044,0x000200f9, + 0x0000042e,0x000200f8,0x0000042e,0x000400f6,0x00000430,0x00000431,0x00000001,0x000200f9, + 0x00000432,0x000200f8,0x00000432,0x0004003d,0x00000006,0x00000433,0x0000042d,0x000500b0, + 0x00000034,0x00000434,0x00000433,0x00000388,0x000400fa,0x00000434,0x0000042f,0x00000430, + 0x000200f8,0x0000042f,0x0004003d,0x00000006,0x00000436,0x0000015a,0x0004003d,0x00000006, + 0x00000437,0x0000042d,0x00050084,0x00000006,0x00000438,0x0000032a,0x00000437,0x00050080, + 0x00000006,0x00000439,0x00000436,0x00000438,0x0007000c,0x00000006,0x0000043c,0x00000001, + 0x00000026,0x00000439,0x0000043b,0x0003003e,0x00000435,0x0000043c,0x0004003d,0x00000006, + 0x0000043e,0x00000435,0x00050086,0x00000006,0x0000043f,0x0000043e,0x000002bc,0x0003003e, + 0x0000043d,0x0000043f,0x0004003d,0x00000006,0x00000441,0x00000435,0x00050089,0x00000006, + 0x00000442,0x00000441,0x000002bc,0x0003003e,0x00000440,0x00000442,0x0004003d,0x00000006, + 0x00000444,0x0000042d,0x00050080,0x00000006,0x00000445,0x00000443,0x00000444,0x0004003d, + 0x00000006,0x00000446,0x00000424,0x0004003d,0x00000006,0x00000447,0x00000440,0x000500c2, + 0x00000006,0x00000448,0x00000447,0x00000008,0x0004003d,0x00000006,0x00000449,0x0000031e, + 0x00050084,0x00000006,0x0000044a,0x00000448,0x00000449,0x00050080,0x00000006,0x0000044b, + 0x00000446,0x0000044a,0x0004003d,0x00000006,0x0000044c,0x0000043d,0x00050084,0x00000006, + 0x0000044d,0x0000044c,0x00000113,0x00050080,0x00000006,0x0000044e,0x0000044b,0x0000044d, + 0x0004003d,0x00000006,0x0000044f,0x00000440,0x000500c7,0x00000006,0x00000450,0x0000044f, + 0x00000008,0x00050080,0x00000006,0x00000451,0x0000044e,0x00000450,0x00060041,0x0000008f, + 0x00000452,0x000003a2,0x0000008b,0x00000451,0x0004003d,0x00000026,0x00000453,0x00000452, + 0x00050041,0x00000027,0x00000454,0x0000039b,0x00000445,0x0003003e,0x00000454,0x00000453, + 0x000200f9,0x00000431,0x000200f8,0x00000431,0x0004003d,0x00000006,0x00000455,0x0000042d, + 0x00050080,0x00000006,0x00000456,0x00000455,0x000000b3,0x0003003e,0x0000042d,0x00000456, + 0x000200f9,0x0000042e,0x000200f8,0x00000430,0x000200f9,0x0000040a,0x000200f8,0x0000040a, + 0x000300f7,0x0000045b,0x00000000,0x000400fa,0x00000459,0x0000045a,0x0000045b,0x000200f8, + 0x0000045a,0x0004003d,0x00000006,0x0000045d,0x0000030a,0x00050080,0x00000006,0x0000045e, + 0x0000045d,0x0000007c,0x00050084,0x00000006,0x0000045f,0x0000045e,0x000002bc,0x0003003e, + 0x0000045c,0x0000045f,0x0003003e,0x00000460,0x00000044,0x000200f9,0x00000461,0x000200f8, + 0x00000461,0x000400f6,0x00000463,0x00000464,0x00000001,0x000200f9,0x00000465,0x000200f8, + 0x00000465,0x0004003d,0x00000006,0x00000466,0x00000460,0x000500b0,0x00000034,0x00000467, + 0x00000466,0x0000032d,0x000400fa,0x00000467,0x00000462,0x00000463,0x000200f8,0x00000462, + 0x0004003d,0x00000006,0x00000469,0x00000460,0x00050080,0x00000006,0x0000046a,0x00000468, + 0x00000469,0x0004003d,0x00000006,0x0000046b,0x00000460,0x00050041,0x00000011,0x0000046c, + 0x0000033b,0x0000046b,0x0004003d,0x00000006,0x0000046d,0x0000046c,0x0004003d,0x00000006, + 0x0000046e,0x0000045c,0x00050080,0x00000006,0x0000046f,0x0000046d,0x0000046e,0x00060041, + 0x0000008f,0x00000470,0x0000036a,0x0000008b,0x0000046f,0x0004003d,0x00000026,0x00000471, + 0x00000470,0x00050041,0x00000027,0x00000472,0x00000363,0x0000046a,0x0003003e,0x00000472, + 0x00000471,0x000200f9,0x00000464,0x000200f8,0x00000464,0x0004003d,0x00000006,0x00000473, + 0x00000460,0x00050080,0x00000006,0x00000474,0x00000473,0x000000b3,0x0003003e,0x00000460, + 0x00000474,0x000200f9,0x00000461,0x000200f8,0x00000463,0x0004003d,0x00000006,0x00000476, + 0x0000030f,0x0004003d,0x00000006,0x00000477,0x0000030a,0x00050080,0x00000006,0x00000478, + 0x00000477,0x0000007c,0x00050084,0x00000006,0x0000047a,0x00000478,0x00000479,0x0004003d, + 0x00000006,0x0000047b,0x0000031e,0x00050084,0x00000006,0x0000047c,0x0000047a,0x0000047b, + 0x00050080,0x00000006,0x0000047d,0x00000476,0x0000047c,0x0003003e,0x00000475,0x0000047d, + 0x0003003e,0x0000047e,0x00000044,0x000200f9,0x0000047f,0x000200f8,0x0000047f,0x000400f6, + 0x00000481,0x00000482,0x00000001,0x000200f9,0x00000483,0x000200f8,0x00000483,0x0004003d, + 0x00000006,0x00000484,0x0000047e,0x000500b0,0x00000034,0x00000485,0x00000484,0x00000388, + 0x000400fa,0x00000485,0x00000480,0x00000481,0x000200f8,0x00000480,0x0004003d,0x00000006, + 0x00000487,0x0000015a,0x0004003d,0x00000006,0x00000488,0x0000047e,0x00050084,0x00000006, + 0x00000489,0x0000032a,0x00000488,0x00050080,0x00000006,0x0000048a,0x00000487,0x00000489, + 0x0007000c,0x00000006,0x0000048d,0x00000001,0x00000026,0x0000048a,0x0000048c,0x0003003e, + 0x00000486,0x0000048d,0x0004003d,0x00000006,0x0000048f,0x00000486,0x00050086,0x00000006, + 0x00000490,0x0000048f,0x000002bc,0x0003003e,0x0000048e,0x00000490,0x0004003d,0x00000006, + 0x00000492,0x00000486,0x00050089,0x00000006,0x00000493,0x00000492,0x000002bc,0x0003003e, + 0x00000491,0x00000493,0x0004003d,0x00000006,0x00000495,0x0000047e,0x00050080,0x00000006, + 0x00000496,0x00000494,0x00000495,0x0004003d,0x00000006,0x00000497,0x00000475,0x0004003d, + 0x00000006,0x00000498,0x00000491,0x000500c2,0x00000006,0x00000499,0x00000498,0x00000008, + 0x0004003d,0x00000006,0x0000049a,0x0000031e,0x00050084,0x00000006,0x0000049b,0x00000499, + 0x0000049a,0x00050080,0x00000006,0x0000049c,0x00000497,0x0000049b,0x0004003d,0x00000006, + 0x0000049d,0x0000048e,0x00050084,0x00000006,0x0000049e,0x0000049d,0x00000113,0x00050080, + 0x00000006,0x0000049f,0x0000049c,0x0000049e,0x0004003d,0x00000006,0x000004a0,0x00000491, + 0x000500c7,0x00000006,0x000004a1,0x000004a0,0x00000008,0x00050080,0x00000006,0x000004a2, + 0x0000049f,0x000004a1,0x00060041,0x0000008f,0x000004a3,0x000003a2,0x0000008b,0x000004a2, + 0x0004003d,0x00000026,0x000004a4,0x000004a3,0x00050041,0x00000027,0x000004a5,0x0000039b, + 0x00000496,0x0003003e,0x000004a5,0x000004a4,0x000200f9,0x00000482,0x000200f8,0x00000482, + 0x0004003d,0x00000006,0x000004a6,0x0000047e,0x00050080,0x00000006,0x000004a7,0x000004a6, + 0x000000b3,0x0003003e,0x0000047e,0x000004a7,0x000200f9,0x0000047f,0x000200f8,0x00000481, + 0x000200f9,0x0000045b,0x000200f8,0x0000045b,0x0003003e,0x000004a8,0x00000044,0x000200f9, + 0x000004a9,0x000200f8,0x000004a9,0x000400f6,0x000004ab,0x000004ac,0x00000000,0x000200f9, + 0x000004ad,0x000200f8,0x000004ad,0x0004003d,0x00000006,0x000004ae,0x000004a8,0x000500b0, + 0x00000034,0x000004af,0x000004ae,0x0000030d,0x000400fa,0x000004af,0x000004aa,0x000004ab, + 0x000200f8,0x000004aa,0x000300f7,0x000004b2,0x00000000,0x000400fa,0x000004b0,0x000004b1, + 0x000004b2,0x000200f8,0x000004b1,0x0004003d,0x00000006,0x000004b3,0x000004a8,0x00050080, + 0x00000006,0x000004b4,0x000004b3,0x00000044,0x000500b0,0x00000034,0x000004b5,0x000004b4, + 0x0000030d,0x000200f9,0x000004b2,0x000200f8,0x000004b2,0x000700f5,0x00000034,0x000004b6, + 0x000004b0,0x000004aa,0x000004b5,0x000004b1,0x000300f7,0x000004b8,0x00000000,0x000400fa, + 0x000004b6,0x000004b7,0x000004b8,0x000200f8,0x000004b7,0x0004003d,0x00000006,0x000004ba, + 0x000004a8,0x00050080,0x00000006,0x000004bb,0x000004ba,0x00000044,0x0003003e,0x000004b9, + 0x000004bb,0x0004003d,0x00000006,0x000004bd,0x000004b9,0x000500c7,0x00000006,0x000004be, + 0x000004bd,0x00000008,0x0003003e,0x000004bc,0x000004be,0x0004003d,0x00000006,0x000004c0, + 0x000004bc,0x00050084,0x00000006,0x000004c4,0x000004c0,0x000004c3,0x0003003e,0x000004bf, + 0x000004c4,0x0004003d,0x00000006,0x000004c6,0x000004bf,0x00050080,0x00000006,0x000004c7, + 0x000004c6,0x000004c1,0x0003003e,0x000004c5,0x000004c7,0x0003003e,0x000004c8,0x00000044, + 0x000200f9,0x000004c9,0x000200f8,0x000004c9,0x000400f6,0x000004cb,0x000004cc,0x00000001, + 0x000200f9,0x000004cd,0x000200f8,0x000004cd,0x0004003d,0x00000006,0x000004ce,0x000004c8, + 0x000500b0,0x00000034,0x000004cf,0x000004ce,0x0000032d,0x000400fa,0x000004cf,0x000004ca, + 0x000004cb,0x000200f8,0x000004ca,0x0004003d,0x00000006,0x000004d1,0x0000015a,0x0004003d, + 0x00000006,0x000004d2,0x000004c8,0x00050084,0x00000006,0x000004d3,0x0000032a,0x000004d2, + 0x00050080,0x00000006,0x000004d4,0x000004d1,0x000004d3,0x0003003e,0x000004d0,0x000004d4, + 0x0004003d,0x00000006,0x000004d5,0x000004d0,0x000500b0,0x00000034,0x000004d7,0x000004d5, + 0x000004d6,0x000300f7,0x000004d9,0x00000000,0x000400fa,0x000004d7,0x000004d8,0x000004d9, + 0x000200f8,0x000004d8,0x0004003d,0x00000006,0x000004da,0x000004bf,0x0004003d,0x00000006, + 0x000004db,0x000004d0,0x00050086,0x00000006,0x000004dc,0x000004db,0x000002bc,0x00050084, + 0x00000006,0x000004dd,0x000004dc,0x000002be,0x00050080,0x00000006,0x000004de,0x000004da, + 0x000004dd,0x0004003d,0x00000006,0x000004df,0x000004d0,0x00050089,0x00000006,0x000004e0, + 0x000004df,0x000002bc,0x00050080,0x00000006,0x000004e1,0x000004de,0x000004e0,0x0004003d, + 0x00000006,0x000004e3,0x000004c8,0x00050080,0x00000006,0x000004e4,0x000004e2,0x000004e3, + 0x00050041,0x00000027,0x000004e5,0x00000363,0x000004e4,0x0004003d,0x00000026,0x000004e6, + 0x000004e5,0x00050041,0x000002cf,0x000004e7,0x000002c6,0x000004e1,0x0005003e,0x000004e7, + 0x000004e6,0x00000028,0x00000113,0x000200f9,0x000004d9,0x000200f8,0x000004d9,0x000200f9, + 0x000004cc,0x000200f8,0x000004cc,0x0004003d,0x00000006,0x000004e8,0x000004c8,0x00050080, + 0x00000006,0x000004e9,0x000004e8,0x000000b3,0x0003003e,0x000004c8,0x000004e9,0x000200f9, + 0x000004c9,0x000200f8,0x000004cb,0x0003003e,0x000004ea,0x00000044,0x000200f9,0x000004eb, + 0x000200f8,0x000004eb,0x000400f6,0x000004ed,0x000004ee,0x00000001,0x000200f9,0x000004ef, + 0x000200f8,0x000004ef,0x0004003d,0x00000006,0x000004f0,0x000004ea,0x000500b0,0x00000034, + 0x000004f1,0x000004f0,0x00000388,0x000400fa,0x000004f1,0x000004ec,0x000004ed,0x000200f8, + 0x000004ec,0x0004003d,0x00000006,0x000004f3,0x0000015a,0x0004003d,0x00000006,0x000004f4, + 0x000004ea,0x00050084,0x00000006,0x000004f5,0x0000032a,0x000004f4,0x00050080,0x00000006, + 0x000004f6,0x000004f3,0x000004f5,0x0003003e,0x000004f2,0x000004f6,0x0004003d,0x00000006, + 0x000004f7,0x000004f2,0x000500b0,0x00000034,0x000004f9,0x000004f7,0x000004f8,0x000300f7, + 0x000004fb,0x00000000,0x000400fa,0x000004f9,0x000004fa,0x000004fb,0x000200f8,0x000004fa, + 0x0004003d,0x00000006,0x000004fc,0x000004c5,0x0004003d,0x00000006,0x000004fd,0x000004f2, + 0x00050086,0x00000006,0x000004fe,0x000004fd,0x000002bc,0x00050084,0x00000006,0x000004ff, + 0x000004fe,0x000002be,0x00050080,0x00000006,0x00000500,0x000004fc,0x000004ff,0x0004003d, + 0x00000006,0x00000501,0x000004f2,0x00050089,0x00000006,0x00000502,0x00000501,0x000002bc, + 0x00050080,0x00000006,0x00000503,0x00000500,0x00000502,0x0004003d,0x00000006,0x00000505, + 0x000004ea,0x00050080,0x00000006,0x00000506,0x00000504,0x00000505,0x00050041,0x00000027, + 0x00000507,0x0000039b,0x00000506,0x0004003d,0x00000026,0x00000508,0x00000507,0x00050041, + 0x000002cf,0x00000509,0x000002c6,0x00000503,0x0005003e,0x00000509,0x00000508,0x00000028, + 0x00000113,0x000200f9,0x000004fb,0x000200f8,0x000004fb,0x000200f9,0x000004ee,0x000200f8, + 0x000004ee,0x0004003d,0x00000006,0x0000050a,0x000004ea,0x00050080,0x00000006,0x0000050b, + 0x0000050a,0x000000b3,0x0003003e,0x000004ea,0x0000050b,0x000200f9,0x000004eb,0x000200f8, + 0x000004ed,0x0004003d,0x00000006,0x0000050c,0x000004b9,0x00050080,0x00000006,0x0000050d, + 0x0000050c,0x000003b4,0x000500b0,0x00000034,0x0000050e,0x0000050d,0x0000030d,0x000300f7, + 0x00000510,0x00000000,0x000400fa,0x0000050e,0x0000050f,0x00000510,0x000200f8,0x0000050f, + 0x0004003d,0x00000006,0x00000512,0x0000030a,0x0004003d,0x00000006,0x00000513,0x000004b9, + 0x00050080,0x00000006,0x00000514,0x00000513,0x000003b4,0x00050080,0x00000006,0x00000515, + 0x00000512,0x00000514,0x00050084,0x00000006,0x00000516,0x00000515,0x000002bc,0x0003003e, + 0x00000511,0x00000516,0x0003003e,0x00000517,0x00000044,0x000200f9,0x00000518,0x000200f8, + 0x00000518,0x000400f6,0x0000051a,0x0000051b,0x00000001,0x000200f9,0x0000051c,0x000200f8, + 0x0000051c,0x0004003d,0x00000006,0x0000051d,0x00000517,0x000500b0,0x00000034,0x0000051e, + 0x0000051d,0x0000032d,0x000400fa,0x0000051e,0x00000519,0x0000051a,0x000200f8,0x00000519, + 0x0004003d,0x00000006,0x00000520,0x00000517,0x00050080,0x00000006,0x00000521,0x0000051f, + 0x00000520,0x0004003d,0x00000006,0x00000522,0x00000517,0x00050041,0x00000011,0x00000523, + 0x0000033b,0x00000522,0x0004003d,0x00000006,0x00000524,0x00000523,0x0004003d,0x00000006, + 0x00000525,0x00000511,0x00050080,0x00000006,0x00000526,0x00000524,0x00000525,0x00060041, + 0x0000008f,0x00000527,0x0000036a,0x0000008b,0x00000526,0x0004003d,0x00000026,0x00000528, + 0x00000527,0x00050041,0x00000027,0x00000529,0x00000363,0x00000521,0x0003003e,0x00000529, + 0x00000528,0x000200f9,0x0000051b,0x000200f8,0x0000051b,0x0004003d,0x00000006,0x0000052a, + 0x00000517,0x00050080,0x00000006,0x0000052b,0x0000052a,0x000000b3,0x0003003e,0x00000517, + 0x0000052b,0x000200f9,0x00000518,0x000200f8,0x0000051a,0x0004003d,0x00000006,0x0000052d, + 0x0000030f,0x0004003d,0x00000006,0x0000052e,0x0000030a,0x0004003d,0x00000006,0x0000052f, + 0x000004b9,0x00050080,0x00000006,0x00000530,0x0000052f,0x000003b4,0x00050080,0x00000006, + 0x00000531,0x0000052e,0x00000530,0x00050084,0x00000006,0x00000533,0x00000531,0x00000532, + 0x0004003d,0x00000006,0x00000534,0x0000031e,0x00050084,0x00000006,0x00000535,0x00000533, + 0x00000534,0x00050080,0x00000006,0x00000536,0x0000052d,0x00000535,0x0003003e,0x0000052c, + 0x00000536,0x0003003e,0x00000537,0x00000044,0x000200f9,0x00000538,0x000200f8,0x00000538, + 0x000400f6,0x0000053a,0x0000053b,0x00000001,0x000200f9,0x0000053c,0x000200f8,0x0000053c, + 0x0004003d,0x00000006,0x0000053d,0x00000537,0x000500b0,0x00000034,0x0000053e,0x0000053d, + 0x00000388,0x000400fa,0x0000053e,0x00000539,0x0000053a,0x000200f8,0x00000539,0x0004003d, + 0x00000006,0x00000540,0x0000015a,0x0004003d,0x00000006,0x00000541,0x00000537,0x00050084, + 0x00000006,0x00000542,0x0000032a,0x00000541,0x00050080,0x00000006,0x00000543,0x00000540, + 0x00000542,0x0007000c,0x00000006,0x00000546,0x00000001,0x00000026,0x00000543,0x00000545, + 0x0003003e,0x0000053f,0x00000546,0x0004003d,0x00000006,0x00000548,0x0000053f,0x00050086, + 0x00000006,0x00000549,0x00000548,0x000002bc,0x0003003e,0x00000547,0x00000549,0x0004003d, + 0x00000006,0x0000054b,0x0000053f,0x00050089,0x00000006,0x0000054c,0x0000054b,0x000002bc, + 0x0003003e,0x0000054a,0x0000054c,0x0004003d,0x00000006,0x0000054e,0x00000537,0x00050080, + 0x00000006,0x0000054f,0x0000054d,0x0000054e,0x0004003d,0x00000006,0x00000550,0x0000052c, + 0x0004003d,0x00000006,0x00000551,0x0000054a,0x000500c2,0x00000006,0x00000552,0x00000551, + 0x00000008,0x0004003d,0x00000006,0x00000553,0x0000031e,0x00050084,0x00000006,0x00000554, + 0x00000552,0x00000553,0x00050080,0x00000006,0x00000555,0x00000550,0x00000554,0x0004003d, + 0x00000006,0x00000556,0x00000547,0x00050084,0x00000006,0x00000557,0x00000556,0x00000113, + 0x00050080,0x00000006,0x00000558,0x00000555,0x00000557,0x0004003d,0x00000006,0x00000559, + 0x0000054a,0x000500c7,0x00000006,0x0000055a,0x00000559,0x00000008,0x00050080,0x00000006, + 0x0000055b,0x00000558,0x0000055a,0x00060041,0x0000008f,0x0000055c,0x000003a2,0x0000008b, + 0x0000055b,0x0004003d,0x00000026,0x0000055d,0x0000055c,0x00050041,0x00000027,0x0000055e, + 0x0000039b,0x0000054f,0x0003003e,0x0000055e,0x0000055d,0x000200f9,0x0000053b,0x000200f8, + 0x0000053b,0x0004003d,0x00000006,0x0000055f,0x00000537,0x00050080,0x00000006,0x00000560, + 0x0000055f,0x000000b3,0x0003003e,0x00000537,0x00000560,0x000200f9,0x00000538,0x000200f8, + 0x0000053a,0x000200f9,0x00000510,0x000200f8,0x00000510,0x000400e0,0x00000113,0x00000113, + 0x0000007d,0x0004003d,0x00000034,0x00000561,0x000001a2,0x000300f7,0x00000563,0x00000000, + 0x000400fa,0x00000561,0x00000562,0x00000563,0x000200f8,0x00000562,0x0004003d,0x00000006, + 0x00000565,0x000004bc,0x00050084,0x00000006,0x00000567,0x00000565,0x00000566,0x0003003e, + 0x00000564,0x00000567,0x0004003d,0x00000006,0x00000569,0x00000564,0x00050080,0x00000006, + 0x0000056a,0x00000569,0x000004c1,0x0003003e,0x00000568,0x0000056a,0x0004003d,0x00000006, + 0x0000056e,0x00000564,0x0004003d,0x00000006,0x0000056f,0x00000161,0x00050084,0x00000006, + 0x00000570,0x0000056f,0x000000a1,0x00050084,0x00000006,0x00000571,0x00000570,0x000002be, + 0x00050080,0x00000006,0x00000572,0x0000056e,0x00000571,0x00050041,0x000002cf,0x00000573, + 0x000002c6,0x00000572,0x0004003d,0x00000006,0x00000574,0x00000564,0x0004003d,0x00000006, + 0x00000575,0x00000161,0x00050084,0x00000006,0x00000576,0x00000575,0x000000a1,0x00050084, + 0x00000006,0x00000577,0x00000576,0x000002be,0x00050080,0x00000006,0x00000578,0x00000574, + 0x00000577,0x00081169,0x0000056b,0x00000579,0x00000573,0x0000008b,0x000002be,0x00000030, + 0x00000113,0x0003003e,0x0000056d,0x00000579,0x0003003e,0x0000057a,0x00000044,0x000200f9, + 0x0000057b,0x000200f8,0x0000057b,0x000400f6,0x0000057d,0x0000057e,0x00000001,0x000200f9, + 0x0000057f,0x000200f8,0x0000057f,0x0004003d,0x00000006,0x00000580,0x0000057a,0x000500b0, + 0x00000034,0x00000581,0x00000580,0x00000191,0x000400fa,0x00000581,0x0000057c,0x0000057d, + 0x000200f8,0x0000057c,0x0004003d,0x00000006,0x00000585,0x00000568,0x0004003d,0x00000006, + 0x00000586,0x0000057a,0x00050084,0x00000006,0x00000587,0x00000586,0x000000a1,0x00050084, + 0x00000006,0x00000588,0x00000587,0x000002be,0x00050080,0x00000006,0x00000589,0x00000585, + 0x00000588,0x00050041,0x000002cf,0x0000058a,0x000002c6,0x00000589,0x0004003d,0x00000006, + 0x0000058b,0x00000568,0x0004003d,0x00000006,0x0000058c,0x0000057a,0x00050084,0x00000006, + 0x0000058d,0x0000058c,0x000000a1,0x00050084,0x00000006,0x0000058e,0x0000058d,0x000002be, + 0x00050080,0x00000006,0x0000058f,0x0000058b,0x0000058e,0x00081169,0x00000582,0x00000590, + 0x0000058a,0x000000b3,0x000002be,0x00000030,0x00000113,0x0003003e,0x00000584,0x00000590, + 0x0004003d,0x00000006,0x00000591,0x0000057a,0x0004003d,0x0000056b,0x00000592,0x0000056d, + 0x0004003d,0x00000582,0x00000593,0x00000584,0x0004003d,0x00000006,0x00000594,0x0000057a, + 0x00050041,0x000001c8,0x00000595,0x000001c6,0x00000594,0x0004003d,0x000001c3,0x00000596, + 0x00000595,0x0006116b,0x000001c3,0x00000597,0x00000592,0x00000593,0x00000596,0x00050041, + 0x000001c8,0x00000598,0x000001c6,0x00000591,0x0003003e,0x00000598,0x00000597,0x000200f9, + 0x0000057e,0x000200f8,0x0000057e,0x0004003d,0x00000006,0x00000599,0x0000057a,0x00050080, + 0x00000006,0x0000059a,0x00000599,0x000000b3,0x0003003e,0x0000057a,0x0000059a,0x000200f9, + 0x0000057b,0x000200f8,0x0000057d,0x0004003d,0x00000006,0x0000059c,0x000004b9,0x00050084, + 0x00000006,0x0000059d,0x0000059c,0x000002bb,0x0003003e,0x0000059b,0x0000059d,0x000300f7, + 0x000005a1,0x00000000,0x000400fa,0x0000059f,0x000005a0,0x000005a1,0x000200f8,0x000005a0, + 0x0004003d,0x00000006,0x000005a2,0x0000059b,0x00050080,0x00000006,0x000005a3,0x000005a2, + 0x000002bb,0x00050089,0x00000006,0x000005a4,0x000005a3,0x0000059e,0x000500aa,0x00000034, + 0x000005a5,0x000005a4,0x00000044,0x000400a8,0x00000034,0x000005a6,0x000005a5,0x000300f7, + 0x000005a8,0x00000000,0x000400fa,0x000005a6,0x000005a7,0x000005a8,0x000200f8,0x000005a7, + 0x0004003d,0x00000006,0x000005a9,0x0000059b,0x00050080,0x00000006,0x000005aa,0x000005a9, + 0x000002bb,0x000500ae,0x00000034,0x000005ab,0x000005aa,0x00000306,0x000200f9,0x000005a8, + 0x000200f8,0x000005a8,0x000700f5,0x00000034,0x000005ac,0x000005a5,0x000005a0,0x000005ab, + 0x000005a7,0x000200f9,0x000005a1,0x000200f8,0x000005a1,0x000700f5,0x00000034,0x000005ad, + 0x0000059f,0x0000057d,0x000005ac,0x000005a8,0x000300f7,0x000005af,0x00000000,0x000400fa, + 0x000005ad,0x000005ae,0x000005af,0x000200f8,0x000005ae,0x0003003e,0x000005b0,0x00000044, + 0x000200f9,0x000005b1,0x000200f8,0x000005b1,0x000400f6,0x000005b3,0x000005b4,0x00000001, + 0x000200f9,0x000005b5,0x000200f8,0x000005b5,0x0004003d,0x00000006,0x000005b6,0x000005b0, + 0x000500b0,0x00000034,0x000005b7,0x000005b6,0x00000191,0x000400fa,0x000005b7,0x000005b2, + 0x000005b3,0x000200f8,0x000005b2,0x0004003d,0x00000006,0x000005b8,0x0000059b,0x000500b0, + 0x00000034,0x000005b9,0x000005b8,0x0000059e,0x000300f7,0x000005bb,0x00000000,0x000400fa, + 0x000005b9,0x000005ba,0x000005c2,0x000200f8,0x000005ba,0x0004003d,0x00000006,0x000005bd, + 0x000005b0,0x0004003d,0x00000006,0x000005be,0x000005b0,0x00050041,0x000001c8,0x000005bf, + 0x000001c6,0x000005be,0x0004003d,0x000001c3,0x000005c0,0x000005bf,0x00050041,0x000001c8, + 0x000005c1,0x000005bc,0x000005bd,0x0003003e,0x000005c1,0x000005c0,0x000200f9,0x000005bb, + 0x000200f8,0x000005c2,0x0004003d,0x00000006,0x000005c3,0x000005b0,0x0004003d,0x00000006, + 0x000005c4,0x000005b0,0x00050041,0x000001c8,0x000005c5,0x000005bc,0x000005c4,0x0004003d, + 0x000001c3,0x000005c6,0x000005c5,0x0004003d,0x00000006,0x000005c7,0x000005b0,0x00050041, + 0x000001c8,0x000005c8,0x000001c6,0x000005c7,0x0004003d,0x000001c3,0x000005c9,0x000005c8, + 0x00050081,0x000001c3,0x000005ca,0x000005c6,0x000005c9,0x00050041,0x000001c8,0x000005cb, + 0x000005bc,0x000005c3,0x0003003e,0x000005cb,0x000005ca,0x000200f9,0x000005bb,0x000200f8, + 0x000005bb,0x0004003d,0x00000006,0x000005cc,0x000005b0,0x00050041,0x000001c8,0x000005cd, + 0x000001c6,0x000005cc,0x0003003e,0x000005cd,0x000001ec,0x000200f9,0x000005b4,0x000200f8, + 0x000005b4,0x0004003d,0x00000006,0x000005ce,0x000005b0,0x00050080,0x00000006,0x000005cf, + 0x000005ce,0x000000b3,0x0003003e,0x000005b0,0x000005cf,0x000200f9,0x000005b1,0x000200f8, + 0x000005b3,0x000200f9,0x000005af,0x000200f8,0x000005af,0x000200f9,0x00000563,0x000200f8, + 0x00000563,0x000200f9,0x000004b8,0x000200f8,0x000004b8,0x000300f7,0x000005d2,0x00000000, + 0x000400fa,0x000005d0,0x000005d1,0x000005d2,0x000200f8,0x000005d1,0x0004003d,0x00000006, + 0x000005d3,0x000004a8,0x00050080,0x00000006,0x000005d4,0x000005d3,0x00000008,0x000500b0, + 0x00000034,0x000005d5,0x000005d4,0x0000030d,0x000200f9,0x000005d2,0x000200f8,0x000005d2, + 0x000700f5,0x00000034,0x000005d6,0x000005d0,0x000004b8,0x000005d5,0x000005d1,0x000300f7, + 0x000005d8,0x00000000,0x000400fa,0x000005d6,0x000005d7,0x000005d8,0x000200f8,0x000005d7, + 0x0004003d,0x00000006,0x000005da,0x000004a8,0x00050080,0x00000006,0x000005db,0x000005da, + 0x00000008,0x0003003e,0x000005d9,0x000005db,0x0004003d,0x00000006,0x000005dd,0x000005d9, + 0x000500c7,0x00000006,0x000005de,0x000005dd,0x00000008,0x0003003e,0x000005dc,0x000005de, + 0x0004003d,0x00000006,0x000005e0,0x000005dc,0x00050084,0x00000006,0x000005e2,0x000005e0, + 0x000005e1,0x0003003e,0x000005df,0x000005e2,0x0004003d,0x00000006,0x000005e4,0x000005df, + 0x00050080,0x00000006,0x000005e5,0x000005e4,0x000004c1,0x0003003e,0x000005e3,0x000005e5, + 0x0003003e,0x000005e6,0x00000044,0x000200f9,0x000005e7,0x000200f8,0x000005e7,0x000400f6, + 0x000005e9,0x000005ea,0x00000001,0x000200f9,0x000005eb,0x000200f8,0x000005eb,0x0004003d, + 0x00000006,0x000005ec,0x000005e6,0x000500b0,0x00000034,0x000005ed,0x000005ec,0x0000032d, + 0x000400fa,0x000005ed,0x000005e8,0x000005e9,0x000200f8,0x000005e8,0x0004003d,0x00000006, + 0x000005ef,0x0000015a,0x0004003d,0x00000006,0x000005f0,0x000005e6,0x00050084,0x00000006, + 0x000005f1,0x0000032a,0x000005f0,0x00050080,0x00000006,0x000005f2,0x000005ef,0x000005f1, + 0x0003003e,0x000005ee,0x000005f2,0x0004003d,0x00000006,0x000005f3,0x000005ee,0x000500b0, + 0x00000034,0x000005f5,0x000005f3,0x000005f4,0x000300f7,0x000005f7,0x00000000,0x000400fa, + 0x000005f5,0x000005f6,0x000005f7,0x000200f8,0x000005f6,0x0004003d,0x00000006,0x000005f8, + 0x000005df,0x0004003d,0x00000006,0x000005f9,0x000005ee,0x00050086,0x00000006,0x000005fa, + 0x000005f9,0x000002bc,0x00050084,0x00000006,0x000005fb,0x000005fa,0x000002be,0x00050080, + 0x00000006,0x000005fc,0x000005f8,0x000005fb,0x0004003d,0x00000006,0x000005fd,0x000005ee, + 0x00050089,0x00000006,0x000005fe,0x000005fd,0x000002bc,0x00050080,0x00000006,0x000005ff, + 0x000005fc,0x000005fe,0x0004003d,0x00000006,0x00000601,0x000005e6,0x00050080,0x00000006, + 0x00000602,0x00000600,0x00000601,0x00050041,0x00000027,0x00000603,0x00000363,0x00000602, + 0x0004003d,0x00000026,0x00000604,0x00000603,0x00050041,0x000002cf,0x00000605,0x000002c6, + 0x000005ff,0x0005003e,0x00000605,0x00000604,0x00000028,0x00000113,0x000200f9,0x000005f7, + 0x000200f8,0x000005f7,0x000200f9,0x000005ea,0x000200f8,0x000005ea,0x0004003d,0x00000006, + 0x00000606,0x000005e6,0x00050080,0x00000006,0x00000607,0x00000606,0x000000b3,0x0003003e, + 0x000005e6,0x00000607,0x000200f9,0x000005e7,0x000200f8,0x000005e9,0x0003003e,0x00000608, + 0x00000044,0x000200f9,0x00000609,0x000200f8,0x00000609,0x000400f6,0x0000060b,0x0000060c, + 0x00000001,0x000200f9,0x0000060d,0x000200f8,0x0000060d,0x0004003d,0x00000006,0x0000060e, + 0x00000608,0x000500b0,0x00000034,0x0000060f,0x0000060e,0x00000388,0x000400fa,0x0000060f, + 0x0000060a,0x0000060b,0x000200f8,0x0000060a,0x0004003d,0x00000006,0x00000611,0x0000015a, + 0x0004003d,0x00000006,0x00000612,0x00000608,0x00050084,0x00000006,0x00000613,0x0000032a, + 0x00000612,0x00050080,0x00000006,0x00000614,0x00000611,0x00000613,0x0003003e,0x00000610, + 0x00000614,0x0004003d,0x00000006,0x00000615,0x00000610,0x000500b0,0x00000034,0x00000617, + 0x00000615,0x00000616,0x000300f7,0x00000619,0x00000000,0x000400fa,0x00000617,0x00000618, + 0x00000619,0x000200f8,0x00000618,0x0004003d,0x00000006,0x0000061a,0x000005e3,0x0004003d, + 0x00000006,0x0000061b,0x00000610,0x00050086,0x00000006,0x0000061c,0x0000061b,0x000002bc, + 0x00050084,0x00000006,0x0000061d,0x0000061c,0x000002be,0x00050080,0x00000006,0x0000061e, + 0x0000061a,0x0000061d,0x0004003d,0x00000006,0x0000061f,0x00000610,0x00050089,0x00000006, + 0x00000620,0x0000061f,0x000002bc,0x00050080,0x00000006,0x00000621,0x0000061e,0x00000620, + 0x0004003d,0x00000006,0x00000623,0x00000608,0x00050080,0x00000006,0x00000624,0x00000622, + 0x00000623,0x00050041,0x00000027,0x00000625,0x0000039b,0x00000624,0x0004003d,0x00000026, + 0x00000626,0x00000625,0x00050041,0x000002cf,0x00000627,0x000002c6,0x00000621,0x0005003e, + 0x00000627,0x00000626,0x00000028,0x00000113,0x000200f9,0x00000619,0x000200f8,0x00000619, + 0x000200f9,0x0000060c,0x000200f8,0x0000060c,0x0004003d,0x00000006,0x00000628,0x00000608, + 0x00050080,0x00000006,0x00000629,0x00000628,0x000000b3,0x0003003e,0x00000608,0x00000629, + 0x000200f9,0x00000609,0x000200f8,0x0000060b,0x0004003d,0x00000006,0x0000062a,0x000005d9, + 0x00050080,0x00000006,0x0000062b,0x0000062a,0x000003b4,0x000500b0,0x00000034,0x0000062c, + 0x0000062b,0x0000030d,0x000300f7,0x0000062e,0x00000000,0x000400fa,0x0000062c,0x0000062d, + 0x0000062e,0x000200f8,0x0000062d,0x0004003d,0x00000006,0x00000630,0x0000030a,0x0004003d, + 0x00000006,0x00000631,0x000005d9,0x00050080,0x00000006,0x00000632,0x00000631,0x000003b4, + 0x00050080,0x00000006,0x00000633,0x00000630,0x00000632,0x00050084,0x00000006,0x00000634, + 0x00000633,0x000002bc,0x0003003e,0x0000062f,0x00000634,0x0003003e,0x00000635,0x00000044, + 0x000200f9,0x00000636,0x000200f8,0x00000636,0x000400f6,0x00000638,0x00000639,0x00000001, + 0x000200f9,0x0000063a,0x000200f8,0x0000063a,0x0004003d,0x00000006,0x0000063b,0x00000635, + 0x000500b0,0x00000034,0x0000063c,0x0000063b,0x0000032d,0x000400fa,0x0000063c,0x00000637, + 0x00000638,0x000200f8,0x00000637,0x0004003d,0x00000006,0x0000063e,0x00000635,0x00050080, + 0x00000006,0x0000063f,0x0000063d,0x0000063e,0x0004003d,0x00000006,0x00000640,0x00000635, + 0x00050041,0x00000011,0x00000641,0x0000033b,0x00000640,0x0004003d,0x00000006,0x00000642, + 0x00000641,0x0004003d,0x00000006,0x00000643,0x0000062f,0x00050080,0x00000006,0x00000644, + 0x00000642,0x00000643,0x00060041,0x0000008f,0x00000645,0x0000036a,0x0000008b,0x00000644, + 0x0004003d,0x00000026,0x00000646,0x00000645,0x00050041,0x00000027,0x00000647,0x00000363, + 0x0000063f,0x0003003e,0x00000647,0x00000646,0x000200f9,0x00000639,0x000200f8,0x00000639, + 0x0004003d,0x00000006,0x00000648,0x00000635,0x00050080,0x00000006,0x00000649,0x00000648, + 0x000000b3,0x0003003e,0x00000635,0x00000649,0x000200f9,0x00000636,0x000200f8,0x00000638, + 0x0004003d,0x00000006,0x0000064b,0x0000030f,0x0004003d,0x00000006,0x0000064c,0x0000030a, + 0x0004003d,0x00000006,0x0000064d,0x000005d9,0x00050080,0x00000006,0x0000064e,0x0000064d, + 0x000003b4,0x00050080,0x00000006,0x0000064f,0x0000064c,0x0000064e,0x00050084,0x00000006, + 0x00000651,0x0000064f,0x00000650,0x0004003d,0x00000006,0x00000652,0x0000031e,0x00050084, + 0x00000006,0x00000653,0x00000651,0x00000652,0x00050080,0x00000006,0x00000654,0x0000064b, + 0x00000653,0x0003003e,0x0000064a,0x00000654,0x0003003e,0x00000655,0x00000044,0x000200f9, + 0x00000656,0x000200f8,0x00000656,0x000400f6,0x00000658,0x00000659,0x00000001,0x000200f9, + 0x0000065a,0x000200f8,0x0000065a,0x0004003d,0x00000006,0x0000065b,0x00000655,0x000500b0, + 0x00000034,0x0000065c,0x0000065b,0x00000388,0x000400fa,0x0000065c,0x00000657,0x00000658, + 0x000200f8,0x00000657,0x0004003d,0x00000006,0x0000065e,0x0000015a,0x0004003d,0x00000006, + 0x0000065f,0x00000655,0x00050084,0x00000006,0x00000660,0x0000032a,0x0000065f,0x00050080, + 0x00000006,0x00000661,0x0000065e,0x00000660,0x0007000c,0x00000006,0x00000664,0x00000001, + 0x00000026,0x00000661,0x00000663,0x0003003e,0x0000065d,0x00000664,0x0004003d,0x00000006, + 0x00000666,0x0000065d,0x00050086,0x00000006,0x00000667,0x00000666,0x000002bc,0x0003003e, + 0x00000665,0x00000667,0x0004003d,0x00000006,0x00000669,0x0000065d,0x00050089,0x00000006, + 0x0000066a,0x00000669,0x000002bc,0x0003003e,0x00000668,0x0000066a,0x0004003d,0x00000006, + 0x0000066c,0x00000655,0x00050080,0x00000006,0x0000066d,0x0000066b,0x0000066c,0x0004003d, + 0x00000006,0x0000066e,0x0000064a,0x0004003d,0x00000006,0x0000066f,0x00000668,0x000500c2, + 0x00000006,0x00000670,0x0000066f,0x00000008,0x0004003d,0x00000006,0x00000671,0x0000031e, + 0x00050084,0x00000006,0x00000672,0x00000670,0x00000671,0x00050080,0x00000006,0x00000673, + 0x0000066e,0x00000672,0x0004003d,0x00000006,0x00000674,0x00000665,0x00050084,0x00000006, + 0x00000675,0x00000674,0x00000113,0x00050080,0x00000006,0x00000676,0x00000673,0x00000675, + 0x0004003d,0x00000006,0x00000677,0x00000668,0x000500c7,0x00000006,0x00000678,0x00000677, + 0x00000008,0x00050080,0x00000006,0x00000679,0x00000676,0x00000678,0x00060041,0x0000008f, + 0x0000067a,0x000003a2,0x0000008b,0x00000679,0x0004003d,0x00000026,0x0000067b,0x0000067a, + 0x00050041,0x00000027,0x0000067c,0x0000039b,0x0000066d,0x0003003e,0x0000067c,0x0000067b, + 0x000200f9,0x00000659,0x000200f8,0x00000659,0x0004003d,0x00000006,0x0000067d,0x00000655, + 0x00050080,0x00000006,0x0000067e,0x0000067d,0x000000b3,0x0003003e,0x00000655,0x0000067e, + 0x000200f9,0x00000656,0x000200f8,0x00000658,0x000200f9,0x0000062e,0x000200f8,0x0000062e, + 0x000400e0,0x00000113,0x00000113,0x0000007d,0x0004003d,0x00000034,0x0000067f,0x000001a2, + 0x000300f7,0x00000681,0x00000000,0x000400fa,0x0000067f,0x00000680,0x00000681,0x000200f8, + 0x00000680,0x0004003d,0x00000006,0x00000683,0x000005dc,0x00050084,0x00000006,0x00000685, + 0x00000683,0x00000684,0x0003003e,0x00000682,0x00000685,0x0004003d,0x00000006,0x00000687, + 0x00000682,0x00050080,0x00000006,0x00000688,0x00000687,0x000004c1,0x0003003e,0x00000686, + 0x00000688,0x0004003d,0x00000006,0x0000068a,0x00000682,0x0004003d,0x00000006,0x0000068b, + 0x00000161,0x00050084,0x00000006,0x0000068c,0x0000068b,0x000000a1,0x00050084,0x00000006, + 0x0000068d,0x0000068c,0x000002be,0x00050080,0x00000006,0x0000068e,0x0000068a,0x0000068d, + 0x00050041,0x000002cf,0x0000068f,0x000002c6,0x0000068e,0x0004003d,0x00000006,0x00000690, + 0x00000682,0x0004003d,0x00000006,0x00000691,0x00000161,0x00050084,0x00000006,0x00000692, + 0x00000691,0x000000a1,0x00050084,0x00000006,0x00000693,0x00000692,0x000002be,0x00050080, + 0x00000006,0x00000694,0x00000690,0x00000693,0x00081169,0x0000056b,0x00000695,0x0000068f, + 0x0000008b,0x000002be,0x00000030,0x00000113,0x0003003e,0x00000689,0x00000695,0x0003003e, + 0x00000696,0x00000044,0x000200f9,0x00000697,0x000200f8,0x00000697,0x000400f6,0x00000699, + 0x0000069a,0x00000001,0x000200f9,0x0000069b,0x000200f8,0x0000069b,0x0004003d,0x00000006, + 0x0000069c,0x00000696,0x000500b0,0x00000034,0x0000069d,0x0000069c,0x00000191,0x000400fa, + 0x0000069d,0x00000698,0x00000699,0x000200f8,0x00000698,0x0004003d,0x00000006,0x0000069f, + 0x00000686,0x0004003d,0x00000006,0x000006a0,0x00000696,0x00050084,0x00000006,0x000006a1, + 0x000006a0,0x000000a1,0x00050084,0x00000006,0x000006a2,0x000006a1,0x000002be,0x00050080, + 0x00000006,0x000006a3,0x0000069f,0x000006a2,0x00050041,0x000002cf,0x000006a4,0x000002c6, + 0x000006a3,0x0004003d,0x00000006,0x000006a5,0x00000686,0x0004003d,0x00000006,0x000006a6, + 0x00000696,0x00050084,0x00000006,0x000006a7,0x000006a6,0x000000a1,0x00050084,0x00000006, + 0x000006a8,0x000006a7,0x000002be,0x00050080,0x00000006,0x000006a9,0x000006a5,0x000006a8, + 0x00081169,0x00000582,0x000006aa,0x000006a4,0x000000b3,0x000002be,0x00000030,0x00000113, + 0x0003003e,0x0000069e,0x000006aa,0x0004003d,0x00000006,0x000006ab,0x00000696,0x0004003d, + 0x0000056b,0x000006ac,0x00000689,0x0004003d,0x00000582,0x000006ad,0x0000069e,0x0004003d, + 0x00000006,0x000006ae,0x00000696,0x00050041,0x000001c8,0x000006af,0x000001c6,0x000006ae, + 0x0004003d,0x000001c3,0x000006b0,0x000006af,0x0006116b,0x000001c3,0x000006b1,0x000006ac, + 0x000006ad,0x000006b0,0x00050041,0x000001c8,0x000006b2,0x000001c6,0x000006ab,0x0003003e, + 0x000006b2,0x000006b1,0x000200f9,0x0000069a,0x000200f8,0x0000069a,0x0004003d,0x00000006, + 0x000006b3,0x00000696,0x00050080,0x00000006,0x000006b4,0x000006b3,0x000000b3,0x0003003e, + 0x00000696,0x000006b4,0x000200f9,0x00000697,0x000200f8,0x00000699,0x0004003d,0x00000006, + 0x000006b6,0x000005d9,0x00050084,0x00000006,0x000006b7,0x000006b6,0x000002bb,0x0003003e, + 0x000006b5,0x000006b7,0x000300f7,0x000006ba,0x00000000,0x000400fa,0x000006b8,0x000006b9, + 0x000006ba,0x000200f8,0x000006b9,0x0004003d,0x00000006,0x000006bb,0x000006b5,0x00050080, + 0x00000006,0x000006bc,0x000006bb,0x000002bb,0x00050089,0x00000006,0x000006bd,0x000006bc, + 0x0000059e,0x000500aa,0x00000034,0x000006be,0x000006bd,0x00000044,0x000400a8,0x00000034, + 0x000006bf,0x000006be,0x000300f7,0x000006c1,0x00000000,0x000400fa,0x000006bf,0x000006c0, + 0x000006c1,0x000200f8,0x000006c0,0x0004003d,0x00000006,0x000006c2,0x000006b5,0x00050080, + 0x00000006,0x000006c3,0x000006c2,0x000002bb,0x000500ae,0x00000034,0x000006c4,0x000006c3, + 0x00000306,0x000200f9,0x000006c1,0x000200f8,0x000006c1,0x000700f5,0x00000034,0x000006c5, + 0x000006be,0x000006b9,0x000006c4,0x000006c0,0x000200f9,0x000006ba,0x000200f8,0x000006ba, + 0x000700f5,0x00000034,0x000006c6,0x000006b8,0x00000699,0x000006c5,0x000006c1,0x000300f7, + 0x000006c8,0x00000000,0x000400fa,0x000006c6,0x000006c7,0x000006c8,0x000200f8,0x000006c7, + 0x0003003e,0x000006c9,0x00000044,0x000200f9,0x000006ca,0x000200f8,0x000006ca,0x000400f6, + 0x000006cc,0x000006cd,0x00000001,0x000200f9,0x000006ce,0x000200f8,0x000006ce,0x0004003d, + 0x00000006,0x000006cf,0x000006c9,0x000500b0,0x00000034,0x000006d0,0x000006cf,0x00000191, + 0x000400fa,0x000006d0,0x000006cb,0x000006cc,0x000200f8,0x000006cb,0x0004003d,0x00000006, + 0x000006d1,0x000006b5,0x000500b0,0x00000034,0x000006d2,0x000006d1,0x0000059e,0x000300f7, + 0x000006d4,0x00000000,0x000400fa,0x000006d2,0x000006d3,0x000006da,0x000200f8,0x000006d3, + 0x0004003d,0x00000006,0x000006d5,0x000006c9,0x0004003d,0x00000006,0x000006d6,0x000006c9, + 0x00050041,0x000001c8,0x000006d7,0x000001c6,0x000006d6,0x0004003d,0x000001c3,0x000006d8, + 0x000006d7,0x00050041,0x000001c8,0x000006d9,0x000005bc,0x000006d5,0x0003003e,0x000006d9, + 0x000006d8,0x000200f9,0x000006d4,0x000200f8,0x000006da,0x0004003d,0x00000006,0x000006db, + 0x000006c9,0x0004003d,0x00000006,0x000006dc,0x000006c9,0x00050041,0x000001c8,0x000006dd, + 0x000005bc,0x000006dc,0x0004003d,0x000001c3,0x000006de,0x000006dd,0x0004003d,0x00000006, + 0x000006df,0x000006c9,0x00050041,0x000001c8,0x000006e0,0x000001c6,0x000006df,0x0004003d, + 0x000001c3,0x000006e1,0x000006e0,0x00050081,0x000001c3,0x000006e2,0x000006de,0x000006e1, + 0x00050041,0x000001c8,0x000006e3,0x000005bc,0x000006db,0x0003003e,0x000006e3,0x000006e2, + 0x000200f9,0x000006d4,0x000200f8,0x000006d4,0x0004003d,0x00000006,0x000006e4,0x000006c9, + 0x00050041,0x000001c8,0x000006e5,0x000001c6,0x000006e4,0x0003003e,0x000006e5,0x000001ec, + 0x000200f9,0x000006cd,0x000200f8,0x000006cd,0x0004003d,0x00000006,0x000006e6,0x000006c9, + 0x00050080,0x00000006,0x000006e7,0x000006e6,0x000000b3,0x0003003e,0x000006c9,0x000006e7, + 0x000200f9,0x000006ca,0x000200f8,0x000006cc,0x000200f9,0x000006c8,0x000200f8,0x000006c8, + 0x000200f9,0x00000681,0x000200f8,0x00000681,0x000200f9,0x000005d8,0x000200f8,0x000005d8, + 0x000300f7,0x000006ea,0x00000000,0x000400fa,0x000006e8,0x000006e9,0x000006ea,0x000200f8, + 0x000006e9,0x0004003d,0x00000006,0x000006eb,0x000004a8,0x00050080,0x00000006,0x000006ec, + 0x000006eb,0x00000113,0x000500b0,0x00000034,0x000006ed,0x000006ec,0x0000030d,0x000200f9, + 0x000006ea,0x000200f8,0x000006ea,0x000700f5,0x00000034,0x000006ee,0x000006e8,0x000005d8, + 0x000006ed,0x000006e9,0x000300f7,0x000006f0,0x00000000,0x000400fa,0x000006ee,0x000006ef, + 0x000006f0,0x000200f8,0x000006ef,0x0004003d,0x00000006,0x000006f2,0x000004a8,0x00050080, + 0x00000006,0x000006f3,0x000006f2,0x00000113,0x0003003e,0x000006f1,0x000006f3,0x0004003d, + 0x00000006,0x000006f5,0x000006f1,0x000500c7,0x00000006,0x000006f6,0x000006f5,0x00000008, + 0x0003003e,0x000006f4,0x000006f6,0x0004003d,0x00000006,0x000006f8,0x000006f4,0x00050084, + 0x00000006,0x000006fa,0x000006f8,0x000006f9,0x0003003e,0x000006f7,0x000006fa,0x0004003d, + 0x00000006,0x000006fc,0x000006f7,0x00050080,0x00000006,0x000006fd,0x000006fc,0x000004c1, + 0x0003003e,0x000006fb,0x000006fd,0x0003003e,0x000006fe,0x00000044,0x000200f9,0x000006ff, + 0x000200f8,0x000006ff,0x000400f6,0x00000701,0x00000702,0x00000001,0x000200f9,0x00000703, + 0x000200f8,0x00000703,0x0004003d,0x00000006,0x00000704,0x000006fe,0x000500b0,0x00000034, + 0x00000705,0x00000704,0x0000032d,0x000400fa,0x00000705,0x00000700,0x00000701,0x000200f8, + 0x00000700,0x0004003d,0x00000006,0x00000707,0x0000015a,0x0004003d,0x00000006,0x00000708, + 0x000006fe,0x00050084,0x00000006,0x00000709,0x0000032a,0x00000708,0x00050080,0x00000006, + 0x0000070a,0x00000707,0x00000709,0x0003003e,0x00000706,0x0000070a,0x0004003d,0x00000006, + 0x0000070b,0x00000706,0x000500b0,0x00000034,0x0000070d,0x0000070b,0x0000070c,0x000300f7, + 0x0000070f,0x00000000,0x000400fa,0x0000070d,0x0000070e,0x0000070f,0x000200f8,0x0000070e, + 0x0004003d,0x00000006,0x00000710,0x000006f7,0x0004003d,0x00000006,0x00000711,0x00000706, + 0x00050086,0x00000006,0x00000712,0x00000711,0x000002bc,0x00050084,0x00000006,0x00000713, + 0x00000712,0x000002be,0x00050080,0x00000006,0x00000714,0x00000710,0x00000713,0x0004003d, + 0x00000006,0x00000715,0x00000706,0x00050089,0x00000006,0x00000716,0x00000715,0x000002bc, + 0x00050080,0x00000006,0x00000717,0x00000714,0x00000716,0x0004003d,0x00000006,0x00000719, + 0x000006fe,0x00050080,0x00000006,0x0000071a,0x00000718,0x00000719,0x00050041,0x00000027, + 0x0000071b,0x00000363,0x0000071a,0x0004003d,0x00000026,0x0000071c,0x0000071b,0x00050041, + 0x000002cf,0x0000071d,0x000002c6,0x00000717,0x0005003e,0x0000071d,0x0000071c,0x00000028, + 0x00000113,0x000200f9,0x0000070f,0x000200f8,0x0000070f,0x000200f9,0x00000702,0x000200f8, + 0x00000702,0x0004003d,0x00000006,0x0000071e,0x000006fe,0x00050080,0x00000006,0x0000071f, + 0x0000071e,0x000000b3,0x0003003e,0x000006fe,0x0000071f,0x000200f9,0x000006ff,0x000200f8, + 0x00000701,0x0003003e,0x00000720,0x00000044,0x000200f9,0x00000721,0x000200f8,0x00000721, + 0x000400f6,0x00000723,0x00000724,0x00000001,0x000200f9,0x00000725,0x000200f8,0x00000725, + 0x0004003d,0x00000006,0x00000726,0x00000720,0x000500b0,0x00000034,0x00000727,0x00000726, + 0x00000388,0x000400fa,0x00000727,0x00000722,0x00000723,0x000200f8,0x00000722,0x0004003d, + 0x00000006,0x00000729,0x0000015a,0x0004003d,0x00000006,0x0000072a,0x00000720,0x00050084, + 0x00000006,0x0000072b,0x0000032a,0x0000072a,0x00050080,0x00000006,0x0000072c,0x00000729, + 0x0000072b,0x0003003e,0x00000728,0x0000072c,0x0004003d,0x00000006,0x0000072d,0x00000728, + 0x000500b0,0x00000034,0x0000072f,0x0000072d,0x0000072e,0x000300f7,0x00000731,0x00000000, + 0x000400fa,0x0000072f,0x00000730,0x00000731,0x000200f8,0x00000730,0x0004003d,0x00000006, + 0x00000732,0x000006fb,0x0004003d,0x00000006,0x00000733,0x00000728,0x00050086,0x00000006, + 0x00000734,0x00000733,0x000002bc,0x00050084,0x00000006,0x00000735,0x00000734,0x000002be, + 0x00050080,0x00000006,0x00000736,0x00000732,0x00000735,0x0004003d,0x00000006,0x00000737, + 0x00000728,0x00050089,0x00000006,0x00000738,0x00000737,0x000002bc,0x00050080,0x00000006, + 0x00000739,0x00000736,0x00000738,0x0004003d,0x00000006,0x0000073b,0x00000720,0x00050080, + 0x00000006,0x0000073c,0x0000073a,0x0000073b,0x00050041,0x00000027,0x0000073d,0x0000039b, + 0x0000073c,0x0004003d,0x00000026,0x0000073e,0x0000073d,0x00050041,0x000002cf,0x0000073f, + 0x000002c6,0x00000739,0x0005003e,0x0000073f,0x0000073e,0x00000028,0x00000113,0x000200f9, + 0x00000731,0x000200f8,0x00000731,0x000200f9,0x00000724,0x000200f8,0x00000724,0x0004003d, + 0x00000006,0x00000740,0x00000720,0x00050080,0x00000006,0x00000741,0x00000740,0x000000b3, + 0x0003003e,0x00000720,0x00000741,0x000200f9,0x00000721,0x000200f8,0x00000723,0x0004003d, + 0x00000006,0x00000742,0x000006f1,0x00050080,0x00000006,0x00000743,0x00000742,0x000003b4, + 0x000500b0,0x00000034,0x00000744,0x00000743,0x0000030d,0x000300f7,0x00000746,0x00000000, + 0x000400fa,0x00000744,0x00000745,0x00000746,0x000200f8,0x00000745,0x0004003d,0x00000006, + 0x00000748,0x0000030a,0x0004003d,0x00000006,0x00000749,0x000006f1,0x00050080,0x00000006, + 0x0000074a,0x00000749,0x000003b4,0x00050080,0x00000006,0x0000074b,0x00000748,0x0000074a, + 0x00050084,0x00000006,0x0000074c,0x0000074b,0x000002bc,0x0003003e,0x00000747,0x0000074c, + 0x0003003e,0x0000074d,0x00000044,0x000200f9,0x0000074e,0x000200f8,0x0000074e,0x000400f6, + 0x00000750,0x00000751,0x00000001,0x000200f9,0x00000752,0x000200f8,0x00000752,0x0004003d, + 0x00000006,0x00000753,0x0000074d,0x000500b0,0x00000034,0x00000754,0x00000753,0x0000032d, + 0x000400fa,0x00000754,0x0000074f,0x00000750,0x000200f8,0x0000074f,0x0004003d,0x00000006, + 0x00000756,0x0000074d,0x00050080,0x00000006,0x00000757,0x00000755,0x00000756,0x0004003d, + 0x00000006,0x00000758,0x0000074d,0x00050041,0x00000011,0x00000759,0x0000033b,0x00000758, + 0x0004003d,0x00000006,0x0000075a,0x00000759,0x0004003d,0x00000006,0x0000075b,0x00000747, + 0x00050080,0x00000006,0x0000075c,0x0000075a,0x0000075b,0x00060041,0x0000008f,0x0000075d, + 0x0000036a,0x0000008b,0x0000075c,0x0004003d,0x00000026,0x0000075e,0x0000075d,0x00050041, + 0x00000027,0x0000075f,0x00000363,0x00000757,0x0003003e,0x0000075f,0x0000075e,0x000200f9, + 0x00000751,0x000200f8,0x00000751,0x0004003d,0x00000006,0x00000760,0x0000074d,0x00050080, + 0x00000006,0x00000761,0x00000760,0x000000b3,0x0003003e,0x0000074d,0x00000761,0x000200f9, + 0x0000074e,0x000200f8,0x00000750,0x0004003d,0x00000006,0x00000763,0x0000030f,0x0004003d, + 0x00000006,0x00000764,0x0000030a,0x0004003d,0x00000006,0x00000765,0x000006f1,0x00050080, + 0x00000006,0x00000766,0x00000765,0x000003b4,0x00050080,0x00000006,0x00000767,0x00000764, + 0x00000766,0x00050084,0x00000006,0x00000769,0x00000767,0x00000768,0x0004003d,0x00000006, + 0x0000076a,0x0000031e,0x00050084,0x00000006,0x0000076b,0x00000769,0x0000076a,0x00050080, + 0x00000006,0x0000076c,0x00000763,0x0000076b,0x0003003e,0x00000762,0x0000076c,0x0003003e, + 0x0000076d,0x00000044,0x000200f9,0x0000076e,0x000200f8,0x0000076e,0x000400f6,0x00000770, + 0x00000771,0x00000001,0x000200f9,0x00000772,0x000200f8,0x00000772,0x0004003d,0x00000006, + 0x00000773,0x0000076d,0x000500b0,0x00000034,0x00000774,0x00000773,0x00000388,0x000400fa, + 0x00000774,0x0000076f,0x00000770,0x000200f8,0x0000076f,0x0004003d,0x00000006,0x00000776, + 0x0000015a,0x0004003d,0x00000006,0x00000777,0x0000076d,0x00050084,0x00000006,0x00000778, + 0x0000032a,0x00000777,0x00050080,0x00000006,0x00000779,0x00000776,0x00000778,0x0007000c, + 0x00000006,0x0000077c,0x00000001,0x00000026,0x00000779,0x0000077b,0x0003003e,0x00000775, + 0x0000077c,0x0004003d,0x00000006,0x0000077e,0x00000775,0x00050086,0x00000006,0x0000077f, + 0x0000077e,0x000002bc,0x0003003e,0x0000077d,0x0000077f,0x0004003d,0x00000006,0x00000781, + 0x00000775,0x00050089,0x00000006,0x00000782,0x00000781,0x000002bc,0x0003003e,0x00000780, + 0x00000782,0x0004003d,0x00000006,0x00000784,0x0000076d,0x00050080,0x00000006,0x00000785, + 0x00000783,0x00000784,0x0004003d,0x00000006,0x00000786,0x00000762,0x0004003d,0x00000006, + 0x00000787,0x00000780,0x000500c2,0x00000006,0x00000788,0x00000787,0x00000008,0x0004003d, + 0x00000006,0x00000789,0x0000031e,0x00050084,0x00000006,0x0000078a,0x00000788,0x00000789, + 0x00050080,0x00000006,0x0000078b,0x00000786,0x0000078a,0x0004003d,0x00000006,0x0000078c, + 0x0000077d,0x00050084,0x00000006,0x0000078d,0x0000078c,0x00000113,0x00050080,0x00000006, + 0x0000078e,0x0000078b,0x0000078d,0x0004003d,0x00000006,0x0000078f,0x00000780,0x000500c7, + 0x00000006,0x00000790,0x0000078f,0x00000008,0x00050080,0x00000006,0x00000791,0x0000078e, + 0x00000790,0x00060041,0x0000008f,0x00000792,0x000003a2,0x0000008b,0x00000791,0x0004003d, + 0x00000026,0x00000793,0x00000792,0x00050041,0x00000027,0x00000794,0x0000039b,0x00000785, + 0x0003003e,0x00000794,0x00000793,0x000200f9,0x00000771,0x000200f8,0x00000771,0x0004003d, + 0x00000006,0x00000795,0x0000076d,0x00050080,0x00000006,0x00000796,0x00000795,0x000000b3, + 0x0003003e,0x0000076d,0x00000796,0x000200f9,0x0000076e,0x000200f8,0x00000770,0x000200f9, + 0x00000746,0x000200f8,0x00000746,0x000400e0,0x00000113,0x00000113,0x0000007d,0x0004003d, + 0x00000034,0x00000797,0x000001a2,0x000300f7,0x00000799,0x00000000,0x000400fa,0x00000797, + 0x00000798,0x00000799,0x000200f8,0x00000798,0x0004003d,0x00000006,0x0000079b,0x000006f4, + 0x00050084,0x00000006,0x0000079d,0x0000079b,0x0000079c,0x0003003e,0x0000079a,0x0000079d, + 0x0004003d,0x00000006,0x0000079f,0x0000079a,0x00050080,0x00000006,0x000007a0,0x0000079f, + 0x000004c1,0x0003003e,0x0000079e,0x000007a0,0x0004003d,0x00000006,0x000007a2,0x0000079a, + 0x0004003d,0x00000006,0x000007a3,0x00000161,0x00050084,0x00000006,0x000007a4,0x000007a3, + 0x000000a1,0x00050084,0x00000006,0x000007a5,0x000007a4,0x000002be,0x00050080,0x00000006, + 0x000007a6,0x000007a2,0x000007a5,0x00050041,0x000002cf,0x000007a7,0x000002c6,0x000007a6, + 0x0004003d,0x00000006,0x000007a8,0x0000079a,0x0004003d,0x00000006,0x000007a9,0x00000161, + 0x00050084,0x00000006,0x000007aa,0x000007a9,0x000000a1,0x00050084,0x00000006,0x000007ab, + 0x000007aa,0x000002be,0x00050080,0x00000006,0x000007ac,0x000007a8,0x000007ab,0x00081169, + 0x0000056b,0x000007ad,0x000007a7,0x0000008b,0x000002be,0x00000030,0x00000113,0x0003003e, + 0x000007a1,0x000007ad,0x0003003e,0x000007ae,0x00000044,0x000200f9,0x000007af,0x000200f8, + 0x000007af,0x000400f6,0x000007b1,0x000007b2,0x00000001,0x000200f9,0x000007b3,0x000200f8, + 0x000007b3,0x0004003d,0x00000006,0x000007b4,0x000007ae,0x000500b0,0x00000034,0x000007b5, + 0x000007b4,0x00000191,0x000400fa,0x000007b5,0x000007b0,0x000007b1,0x000200f8,0x000007b0, + 0x0004003d,0x00000006,0x000007b7,0x0000079e,0x0004003d,0x00000006,0x000007b8,0x000007ae, + 0x00050084,0x00000006,0x000007b9,0x000007b8,0x000000a1,0x00050084,0x00000006,0x000007ba, + 0x000007b9,0x000002be,0x00050080,0x00000006,0x000007bb,0x000007b7,0x000007ba,0x00050041, + 0x000002cf,0x000007bc,0x000002c6,0x000007bb,0x0004003d,0x00000006,0x000007bd,0x0000079e, + 0x0004003d,0x00000006,0x000007be,0x000007ae,0x00050084,0x00000006,0x000007bf,0x000007be, + 0x000000a1,0x00050084,0x00000006,0x000007c0,0x000007bf,0x000002be,0x00050080,0x00000006, + 0x000007c1,0x000007bd,0x000007c0,0x00081169,0x00000582,0x000007c2,0x000007bc,0x000000b3, + 0x000002be,0x00000030,0x00000113,0x0003003e,0x000007b6,0x000007c2,0x0004003d,0x00000006, + 0x000007c3,0x000007ae,0x0004003d,0x0000056b,0x000007c4,0x000007a1,0x0004003d,0x00000582, + 0x000007c5,0x000007b6,0x0004003d,0x00000006,0x000007c6,0x000007ae,0x00050041,0x000001c8, + 0x000007c7,0x000001c6,0x000007c6,0x0004003d,0x000001c3,0x000007c8,0x000007c7,0x0006116b, + 0x000001c3,0x000007c9,0x000007c4,0x000007c5,0x000007c8,0x00050041,0x000001c8,0x000007ca, + 0x000001c6,0x000007c3,0x0003003e,0x000007ca,0x000007c9,0x000200f9,0x000007b2,0x000200f8, + 0x000007b2,0x0004003d,0x00000006,0x000007cb,0x000007ae,0x00050080,0x00000006,0x000007cc, + 0x000007cb,0x000000b3,0x0003003e,0x000007ae,0x000007cc,0x000200f9,0x000007af,0x000200f8, + 0x000007b1,0x0004003d,0x00000006,0x000007ce,0x000006f1,0x00050084,0x00000006,0x000007cf, + 0x000007ce,0x000002bb,0x0003003e,0x000007cd,0x000007cf,0x000300f7,0x000007d2,0x00000000, + 0x000400fa,0x000007d0,0x000007d1,0x000007d2,0x000200f8,0x000007d1,0x0004003d,0x00000006, + 0x000007d3,0x000007cd,0x00050080,0x00000006,0x000007d4,0x000007d3,0x000002bb,0x00050089, + 0x00000006,0x000007d5,0x000007d4,0x0000059e,0x000500aa,0x00000034,0x000007d6,0x000007d5, + 0x00000044,0x000400a8,0x00000034,0x000007d7,0x000007d6,0x000300f7,0x000007d9,0x00000000, + 0x000400fa,0x000007d7,0x000007d8,0x000007d9,0x000200f8,0x000007d8,0x0004003d,0x00000006, + 0x000007da,0x000007cd,0x00050080,0x00000006,0x000007db,0x000007da,0x000002bb,0x000500ae, + 0x00000034,0x000007dc,0x000007db,0x00000306,0x000200f9,0x000007d9,0x000200f8,0x000007d9, + 0x000700f5,0x00000034,0x000007dd,0x000007d6,0x000007d1,0x000007dc,0x000007d8,0x000200f9, + 0x000007d2,0x000200f8,0x000007d2,0x000700f5,0x00000034,0x000007de,0x000007d0,0x000007b1, + 0x000007dd,0x000007d9,0x000300f7,0x000007e0,0x00000000,0x000400fa,0x000007de,0x000007df, + 0x000007e0,0x000200f8,0x000007df,0x0003003e,0x000007e1,0x00000044,0x000200f9,0x000007e2, + 0x000200f8,0x000007e2,0x000400f6,0x000007e4,0x000007e5,0x00000001,0x000200f9,0x000007e6, + 0x000200f8,0x000007e6,0x0004003d,0x00000006,0x000007e7,0x000007e1,0x000500b0,0x00000034, + 0x000007e8,0x000007e7,0x00000191,0x000400fa,0x000007e8,0x000007e3,0x000007e4,0x000200f8, + 0x000007e3,0x0004003d,0x00000006,0x000007e9,0x000007cd,0x000500b0,0x00000034,0x000007ea, + 0x000007e9,0x0000059e,0x000300f7,0x000007ec,0x00000000,0x000400fa,0x000007ea,0x000007eb, + 0x000007f2,0x000200f8,0x000007eb,0x0004003d,0x00000006,0x000007ed,0x000007e1,0x0004003d, + 0x00000006,0x000007ee,0x000007e1,0x00050041,0x000001c8,0x000007ef,0x000001c6,0x000007ee, + 0x0004003d,0x000001c3,0x000007f0,0x000007ef,0x00050041,0x000001c8,0x000007f1,0x000005bc, + 0x000007ed,0x0003003e,0x000007f1,0x000007f0,0x000200f9,0x000007ec,0x000200f8,0x000007f2, + 0x0004003d,0x00000006,0x000007f3,0x000007e1,0x0004003d,0x00000006,0x000007f4,0x000007e1, + 0x00050041,0x000001c8,0x000007f5,0x000005bc,0x000007f4,0x0004003d,0x000001c3,0x000007f6, + 0x000007f5,0x0004003d,0x00000006,0x000007f7,0x000007e1,0x00050041,0x000001c8,0x000007f8, + 0x000001c6,0x000007f7,0x0004003d,0x000001c3,0x000007f9,0x000007f8,0x00050081,0x000001c3, + 0x000007fa,0x000007f6,0x000007f9,0x00050041,0x000001c8,0x000007fb,0x000005bc,0x000007f3, + 0x0003003e,0x000007fb,0x000007fa,0x000200f9,0x000007ec,0x000200f8,0x000007ec,0x0004003d, + 0x00000006,0x000007fc,0x000007e1,0x00050041,0x000001c8,0x000007fd,0x000001c6,0x000007fc, + 0x0003003e,0x000007fd,0x000001ec,0x000200f9,0x000007e5,0x000200f8,0x000007e5,0x0004003d, + 0x00000006,0x000007fe,0x000007e1,0x00050080,0x00000006,0x000007ff,0x000007fe,0x000000b3, + 0x0003003e,0x000007e1,0x000007ff,0x000200f9,0x000007e2,0x000200f8,0x000007e4,0x000200f9, + 0x000007e0,0x000200f8,0x000007e0,0x000200f9,0x00000799,0x000200f8,0x00000799,0x000200f9, + 0x000006f0,0x000200f8,0x000006f0,0x000300f7,0x00000802,0x00000000,0x000400fa,0x00000800, + 0x00000801,0x00000802,0x000200f8,0x00000801,0x0004003d,0x00000006,0x00000803,0x000004a8, + 0x00050080,0x00000006,0x00000804,0x00000803,0x0000007c,0x000500b0,0x00000034,0x00000805, + 0x00000804,0x0000030d,0x000200f9,0x00000802,0x000200f8,0x00000802,0x000700f5,0x00000034, + 0x00000806,0x00000800,0x000006f0,0x00000805,0x00000801,0x000300f7,0x00000808,0x00000000, + 0x000400fa,0x00000806,0x00000807,0x00000808,0x000200f8,0x00000807,0x0004003d,0x00000006, + 0x0000080a,0x000004a8,0x00050080,0x00000006,0x0000080b,0x0000080a,0x0000007c,0x0003003e, + 0x00000809,0x0000080b,0x0004003d,0x00000006,0x0000080d,0x00000809,0x000500c7,0x00000006, + 0x0000080e,0x0000080d,0x00000008,0x0003003e,0x0000080c,0x0000080e,0x0004003d,0x00000006, + 0x00000810,0x0000080c,0x00050084,0x00000006,0x00000812,0x00000810,0x00000811,0x0003003e, + 0x0000080f,0x00000812,0x0004003d,0x00000006,0x00000814,0x0000080f,0x00050080,0x00000006, + 0x00000815,0x00000814,0x000004c1,0x0003003e,0x00000813,0x00000815,0x0003003e,0x00000816, + 0x00000044,0x000200f9,0x00000817,0x000200f8,0x00000817,0x000400f6,0x00000819,0x0000081a, + 0x00000001,0x000200f9,0x0000081b,0x000200f8,0x0000081b,0x0004003d,0x00000006,0x0000081c, + 0x00000816,0x000500b0,0x00000034,0x0000081d,0x0000081c,0x0000032d,0x000400fa,0x0000081d, + 0x00000818,0x00000819,0x000200f8,0x00000818,0x0004003d,0x00000006,0x0000081f,0x0000015a, + 0x0004003d,0x00000006,0x00000820,0x00000816,0x00050084,0x00000006,0x00000821,0x0000032a, + 0x00000820,0x00050080,0x00000006,0x00000822,0x0000081f,0x00000821,0x0003003e,0x0000081e, + 0x00000822,0x0004003d,0x00000006,0x00000823,0x0000081e,0x000500b0,0x00000034,0x00000825, + 0x00000823,0x00000824,0x000300f7,0x00000827,0x00000000,0x000400fa,0x00000825,0x00000826, + 0x00000827,0x000200f8,0x00000826,0x0004003d,0x00000006,0x00000828,0x0000080f,0x0004003d, + 0x00000006,0x00000829,0x0000081e,0x00050086,0x00000006,0x0000082a,0x00000829,0x000002bc, + 0x00050084,0x00000006,0x0000082b,0x0000082a,0x000002be,0x00050080,0x00000006,0x0000082c, + 0x00000828,0x0000082b,0x0004003d,0x00000006,0x0000082d,0x0000081e,0x00050089,0x00000006, + 0x0000082e,0x0000082d,0x000002bc,0x00050080,0x00000006,0x0000082f,0x0000082c,0x0000082e, + 0x0004003d,0x00000006,0x00000831,0x00000816,0x00050080,0x00000006,0x00000832,0x00000830, + 0x00000831,0x00050041,0x00000027,0x00000833,0x00000363,0x00000832,0x0004003d,0x00000026, + 0x00000834,0x00000833,0x00050041,0x000002cf,0x00000835,0x000002c6,0x0000082f,0x0005003e, + 0x00000835,0x00000834,0x00000028,0x00000113,0x000200f9,0x00000827,0x000200f8,0x00000827, + 0x000200f9,0x0000081a,0x000200f8,0x0000081a,0x0004003d,0x00000006,0x00000836,0x00000816, + 0x00050080,0x00000006,0x00000837,0x00000836,0x000000b3,0x0003003e,0x00000816,0x00000837, + 0x000200f9,0x00000817,0x000200f8,0x00000819,0x0003003e,0x00000838,0x00000044,0x000200f9, + 0x00000839,0x000200f8,0x00000839,0x000400f6,0x0000083b,0x0000083c,0x00000001,0x000200f9, + 0x0000083d,0x000200f8,0x0000083d,0x0004003d,0x00000006,0x0000083e,0x00000838,0x000500b0, + 0x00000034,0x0000083f,0x0000083e,0x00000388,0x000400fa,0x0000083f,0x0000083a,0x0000083b, + 0x000200f8,0x0000083a,0x0004003d,0x00000006,0x00000841,0x0000015a,0x0004003d,0x00000006, + 0x00000842,0x00000838,0x00050084,0x00000006,0x00000843,0x0000032a,0x00000842,0x00050080, + 0x00000006,0x00000844,0x00000841,0x00000843,0x0003003e,0x00000840,0x00000844,0x0004003d, + 0x00000006,0x00000845,0x00000840,0x000500b0,0x00000034,0x00000847,0x00000845,0x00000846, + 0x000300f7,0x00000849,0x00000000,0x000400fa,0x00000847,0x00000848,0x00000849,0x000200f8, + 0x00000848,0x0004003d,0x00000006,0x0000084a,0x00000813,0x0004003d,0x00000006,0x0000084b, + 0x00000840,0x00050086,0x00000006,0x0000084c,0x0000084b,0x000002bc,0x00050084,0x00000006, + 0x0000084d,0x0000084c,0x000002be,0x00050080,0x00000006,0x0000084e,0x0000084a,0x0000084d, + 0x0004003d,0x00000006,0x0000084f,0x00000840,0x00050089,0x00000006,0x00000850,0x0000084f, + 0x000002bc,0x00050080,0x00000006,0x00000851,0x0000084e,0x00000850,0x0004003d,0x00000006, + 0x00000853,0x00000838,0x00050080,0x00000006,0x00000854,0x00000852,0x00000853,0x00050041, + 0x00000027,0x00000855,0x0000039b,0x00000854,0x0004003d,0x00000026,0x00000856,0x00000855, + 0x00050041,0x000002cf,0x00000857,0x000002c6,0x00000851,0x0005003e,0x00000857,0x00000856, + 0x00000028,0x00000113,0x000200f9,0x00000849,0x000200f8,0x00000849,0x000200f9,0x0000083c, + 0x000200f8,0x0000083c,0x0004003d,0x00000006,0x00000858,0x00000838,0x00050080,0x00000006, + 0x00000859,0x00000858,0x000000b3,0x0003003e,0x00000838,0x00000859,0x000200f9,0x00000839, + 0x000200f8,0x0000083b,0x0004003d,0x00000006,0x0000085a,0x00000809,0x00050080,0x00000006, + 0x0000085b,0x0000085a,0x000003b4,0x000500b0,0x00000034,0x0000085c,0x0000085b,0x0000030d, + 0x000300f7,0x0000085e,0x00000000,0x000400fa,0x0000085c,0x0000085d,0x0000085e,0x000200f8, + 0x0000085d,0x0004003d,0x00000006,0x00000860,0x0000030a,0x0004003d,0x00000006,0x00000861, + 0x00000809,0x00050080,0x00000006,0x00000862,0x00000861,0x000003b4,0x00050080,0x00000006, + 0x00000863,0x00000860,0x00000862,0x00050084,0x00000006,0x00000864,0x00000863,0x000002bc, + 0x0003003e,0x0000085f,0x00000864,0x0003003e,0x00000865,0x00000044,0x000200f9,0x00000866, + 0x000200f8,0x00000866,0x000400f6,0x00000868,0x00000869,0x00000001,0x000200f9,0x0000086a, + 0x000200f8,0x0000086a,0x0004003d,0x00000006,0x0000086b,0x00000865,0x000500b0,0x00000034, + 0x0000086c,0x0000086b,0x0000032d,0x000400fa,0x0000086c,0x00000867,0x00000868,0x000200f8, + 0x00000867,0x0004003d,0x00000006,0x0000086e,0x00000865,0x00050080,0x00000006,0x0000086f, + 0x0000086d,0x0000086e,0x0004003d,0x00000006,0x00000870,0x00000865,0x00050041,0x00000011, + 0x00000871,0x0000033b,0x00000870,0x0004003d,0x00000006,0x00000872,0x00000871,0x0004003d, + 0x00000006,0x00000873,0x0000085f,0x00050080,0x00000006,0x00000874,0x00000872,0x00000873, + 0x00060041,0x0000008f,0x00000875,0x0000036a,0x0000008b,0x00000874,0x0004003d,0x00000026, + 0x00000876,0x00000875,0x00050041,0x00000027,0x00000877,0x00000363,0x0000086f,0x0003003e, + 0x00000877,0x00000876,0x000200f9,0x00000869,0x000200f8,0x00000869,0x0004003d,0x00000006, + 0x00000878,0x00000865,0x00050080,0x00000006,0x00000879,0x00000878,0x000000b3,0x0003003e, + 0x00000865,0x00000879,0x000200f9,0x00000866,0x000200f8,0x00000868,0x0004003d,0x00000006, + 0x0000087b,0x0000030f,0x0004003d,0x00000006,0x0000087c,0x0000030a,0x0004003d,0x00000006, + 0x0000087d,0x00000809,0x00050080,0x00000006,0x0000087e,0x0000087d,0x000003b4,0x00050080, + 0x00000006,0x0000087f,0x0000087c,0x0000087e,0x00050084,0x00000006,0x00000881,0x0000087f, + 0x00000880,0x0004003d,0x00000006,0x00000882,0x0000031e,0x00050084,0x00000006,0x00000883, + 0x00000881,0x00000882,0x00050080,0x00000006,0x00000884,0x0000087b,0x00000883,0x0003003e, + 0x0000087a,0x00000884,0x0003003e,0x00000885,0x00000044,0x000200f9,0x00000886,0x000200f8, + 0x00000886,0x000400f6,0x00000888,0x00000889,0x00000001,0x000200f9,0x0000088a,0x000200f8, + 0x0000088a,0x0004003d,0x00000006,0x0000088b,0x00000885,0x000500b0,0x00000034,0x0000088c, + 0x0000088b,0x00000388,0x000400fa,0x0000088c,0x00000887,0x00000888,0x000200f8,0x00000887, + 0x0004003d,0x00000006,0x0000088e,0x0000015a,0x0004003d,0x00000006,0x0000088f,0x00000885, + 0x00050084,0x00000006,0x00000890,0x0000032a,0x0000088f,0x00050080,0x00000006,0x00000891, + 0x0000088e,0x00000890,0x0007000c,0x00000006,0x00000894,0x00000001,0x00000026,0x00000891, + 0x00000893,0x0003003e,0x0000088d,0x00000894,0x0004003d,0x00000006,0x00000896,0x0000088d, + 0x00050086,0x00000006,0x00000897,0x00000896,0x000002bc,0x0003003e,0x00000895,0x00000897, + 0x0004003d,0x00000006,0x00000899,0x0000088d,0x00050089,0x00000006,0x0000089a,0x00000899, + 0x000002bc,0x0003003e,0x00000898,0x0000089a,0x0004003d,0x00000006,0x0000089c,0x00000885, + 0x00050080,0x00000006,0x0000089d,0x0000089b,0x0000089c,0x0004003d,0x00000006,0x0000089e, + 0x0000087a,0x0004003d,0x00000006,0x0000089f,0x00000898,0x000500c2,0x00000006,0x000008a0, + 0x0000089f,0x00000008,0x0004003d,0x00000006,0x000008a1,0x0000031e,0x00050084,0x00000006, + 0x000008a2,0x000008a0,0x000008a1,0x00050080,0x00000006,0x000008a3,0x0000089e,0x000008a2, + 0x0004003d,0x00000006,0x000008a4,0x00000895,0x00050084,0x00000006,0x000008a5,0x000008a4, + 0x00000113,0x00050080,0x00000006,0x000008a6,0x000008a3,0x000008a5,0x0004003d,0x00000006, + 0x000008a7,0x00000898,0x000500c7,0x00000006,0x000008a8,0x000008a7,0x00000008,0x00050080, + 0x00000006,0x000008a9,0x000008a6,0x000008a8,0x00060041,0x0000008f,0x000008aa,0x000003a2, + 0x0000008b,0x000008a9,0x0004003d,0x00000026,0x000008ab,0x000008aa,0x00050041,0x00000027, + 0x000008ac,0x0000039b,0x0000089d,0x0003003e,0x000008ac,0x000008ab,0x000200f9,0x00000889, + 0x000200f8,0x00000889,0x0004003d,0x00000006,0x000008ad,0x00000885,0x00050080,0x00000006, + 0x000008ae,0x000008ad,0x000000b3,0x0003003e,0x00000885,0x000008ae,0x000200f9,0x00000886, + 0x000200f8,0x00000888,0x000200f9,0x0000085e,0x000200f8,0x0000085e,0x000400e0,0x00000113, + 0x00000113,0x0000007d,0x0004003d,0x00000034,0x000008af,0x000001a2,0x000300f7,0x000008b1, + 0x00000000,0x000400fa,0x000008af,0x000008b0,0x000008b1,0x000200f8,0x000008b0,0x0004003d, + 0x00000006,0x000008b3,0x0000080c,0x00050084,0x00000006,0x000008b5,0x000008b3,0x000008b4, + 0x0003003e,0x000008b2,0x000008b5,0x0004003d,0x00000006,0x000008b7,0x000008b2,0x00050080, + 0x00000006,0x000008b8,0x000008b7,0x000004c1,0x0003003e,0x000008b6,0x000008b8,0x0004003d, + 0x00000006,0x000008ba,0x000008b2,0x0004003d,0x00000006,0x000008bb,0x00000161,0x00050084, + 0x00000006,0x000008bc,0x000008bb,0x000000a1,0x00050084,0x00000006,0x000008bd,0x000008bc, + 0x000002be,0x00050080,0x00000006,0x000008be,0x000008ba,0x000008bd,0x00050041,0x000002cf, + 0x000008bf,0x000002c6,0x000008be,0x0004003d,0x00000006,0x000008c0,0x000008b2,0x0004003d, + 0x00000006,0x000008c1,0x00000161,0x00050084,0x00000006,0x000008c2,0x000008c1,0x000000a1, + 0x00050084,0x00000006,0x000008c3,0x000008c2,0x000002be,0x00050080,0x00000006,0x000008c4, + 0x000008c0,0x000008c3,0x00081169,0x0000056b,0x000008c5,0x000008bf,0x0000008b,0x000002be, + 0x00000030,0x00000113,0x0003003e,0x000008b9,0x000008c5,0x0003003e,0x000008c6,0x00000044, + 0x000200f9,0x000008c7,0x000200f8,0x000008c7,0x000400f6,0x000008c9,0x000008ca,0x00000001, + 0x000200f9,0x000008cb,0x000200f8,0x000008cb,0x0004003d,0x00000006,0x000008cc,0x000008c6, + 0x000500b0,0x00000034,0x000008cd,0x000008cc,0x00000191,0x000400fa,0x000008cd,0x000008c8, + 0x000008c9,0x000200f8,0x000008c8,0x0004003d,0x00000006,0x000008cf,0x000008b6,0x0004003d, + 0x00000006,0x000008d0,0x000008c6,0x00050084,0x00000006,0x000008d1,0x000008d0,0x000000a1, + 0x00050084,0x00000006,0x000008d2,0x000008d1,0x000002be,0x00050080,0x00000006,0x000008d3, + 0x000008cf,0x000008d2,0x00050041,0x000002cf,0x000008d4,0x000002c6,0x000008d3,0x0004003d, + 0x00000006,0x000008d5,0x000008b6,0x0004003d,0x00000006,0x000008d6,0x000008c6,0x00050084, + 0x00000006,0x000008d7,0x000008d6,0x000000a1,0x00050084,0x00000006,0x000008d8,0x000008d7, + 0x000002be,0x00050080,0x00000006,0x000008d9,0x000008d5,0x000008d8,0x00081169,0x00000582, + 0x000008da,0x000008d4,0x000000b3,0x000002be,0x00000030,0x00000113,0x0003003e,0x000008ce, + 0x000008da,0x0004003d,0x00000006,0x000008db,0x000008c6,0x0004003d,0x0000056b,0x000008dc, + 0x000008b9,0x0004003d,0x00000582,0x000008dd,0x000008ce,0x0004003d,0x00000006,0x000008de, + 0x000008c6,0x00050041,0x000001c8,0x000008df,0x000001c6,0x000008de,0x0004003d,0x000001c3, + 0x000008e0,0x000008df,0x0006116b,0x000001c3,0x000008e1,0x000008dc,0x000008dd,0x000008e0, + 0x00050041,0x000001c8,0x000008e2,0x000001c6,0x000008db,0x0003003e,0x000008e2,0x000008e1, + 0x000200f9,0x000008ca,0x000200f8,0x000008ca,0x0004003d,0x00000006,0x000008e3,0x000008c6, + 0x00050080,0x00000006,0x000008e4,0x000008e3,0x000000b3,0x0003003e,0x000008c6,0x000008e4, + 0x000200f9,0x000008c7,0x000200f8,0x000008c9,0x0004003d,0x00000006,0x000008e6,0x00000809, + 0x00050084,0x00000006,0x000008e7,0x000008e6,0x000002bb,0x0003003e,0x000008e5,0x000008e7, + 0x000300f7,0x000008ea,0x00000000,0x000400fa,0x000008e8,0x000008e9,0x000008ea,0x000200f8, + 0x000008e9,0x0004003d,0x00000006,0x000008eb,0x000008e5,0x00050080,0x00000006,0x000008ec, + 0x000008eb,0x000002bb,0x00050089,0x00000006,0x000008ed,0x000008ec,0x0000059e,0x000500aa, + 0x00000034,0x000008ee,0x000008ed,0x00000044,0x000400a8,0x00000034,0x000008ef,0x000008ee, + 0x000300f7,0x000008f1,0x00000000,0x000400fa,0x000008ef,0x000008f0,0x000008f1,0x000200f8, + 0x000008f0,0x0004003d,0x00000006,0x000008f2,0x000008e5,0x00050080,0x00000006,0x000008f3, + 0x000008f2,0x000002bb,0x000500ae,0x00000034,0x000008f4,0x000008f3,0x00000306,0x000200f9, + 0x000008f1,0x000200f8,0x000008f1,0x000700f5,0x00000034,0x000008f5,0x000008ee,0x000008e9, + 0x000008f4,0x000008f0,0x000200f9,0x000008ea,0x000200f8,0x000008ea,0x000700f5,0x00000034, + 0x000008f6,0x000008e8,0x000008c9,0x000008f5,0x000008f1,0x000300f7,0x000008f8,0x00000000, + 0x000400fa,0x000008f6,0x000008f7,0x000008f8,0x000200f8,0x000008f7,0x0003003e,0x000008f9, + 0x00000044,0x000200f9,0x000008fa,0x000200f8,0x000008fa,0x000400f6,0x000008fc,0x000008fd, + 0x00000001,0x000200f9,0x000008fe,0x000200f8,0x000008fe,0x0004003d,0x00000006,0x000008ff, + 0x000008f9,0x000500b0,0x00000034,0x00000900,0x000008ff,0x00000191,0x000400fa,0x00000900, + 0x000008fb,0x000008fc,0x000200f8,0x000008fb,0x0004003d,0x00000006,0x00000901,0x000008e5, + 0x000500b0,0x00000034,0x00000902,0x00000901,0x0000059e,0x000300f7,0x00000904,0x00000000, + 0x000400fa,0x00000902,0x00000903,0x0000090a,0x000200f8,0x00000903,0x0004003d,0x00000006, + 0x00000905,0x000008f9,0x0004003d,0x00000006,0x00000906,0x000008f9,0x00050041,0x000001c8, + 0x00000907,0x000001c6,0x00000906,0x0004003d,0x000001c3,0x00000908,0x00000907,0x00050041, + 0x000001c8,0x00000909,0x000005bc,0x00000905,0x0003003e,0x00000909,0x00000908,0x000200f9, + 0x00000904,0x000200f8,0x0000090a,0x0004003d,0x00000006,0x0000090b,0x000008f9,0x0004003d, + 0x00000006,0x0000090c,0x000008f9,0x00050041,0x000001c8,0x0000090d,0x000005bc,0x0000090c, + 0x0004003d,0x000001c3,0x0000090e,0x0000090d,0x0004003d,0x00000006,0x0000090f,0x000008f9, + 0x00050041,0x000001c8,0x00000910,0x000001c6,0x0000090f,0x0004003d,0x000001c3,0x00000911, + 0x00000910,0x00050081,0x000001c3,0x00000912,0x0000090e,0x00000911,0x00050041,0x000001c8, + 0x00000913,0x000005bc,0x0000090b,0x0003003e,0x00000913,0x00000912,0x000200f9,0x00000904, + 0x000200f8,0x00000904,0x0004003d,0x00000006,0x00000914,0x000008f9,0x00050041,0x000001c8, + 0x00000915,0x000001c6,0x00000914,0x0003003e,0x00000915,0x000001ec,0x000200f9,0x000008fd, + 0x000200f8,0x000008fd,0x0004003d,0x00000006,0x00000916,0x000008f9,0x00050080,0x00000006, + 0x00000917,0x00000916,0x000000b3,0x0003003e,0x000008f9,0x00000917,0x000200f9,0x000008fa, + 0x000200f8,0x000008fc,0x000200f9,0x000008f8,0x000200f8,0x000008f8,0x000200f9,0x000008b1, + 0x000200f8,0x000008b1,0x000200f9,0x00000808,0x000200f8,0x00000808,0x000200f9,0x000004ac, + 0x000200f8,0x000004ac,0x0004003d,0x00000006,0x00000918,0x000004a8,0x00050080,0x00000006, + 0x00000919,0x00000918,0x000003b4,0x0003003e,0x000004a8,0x00000919,0x000200f9,0x000004a9, + 0x000200f8,0x000004ab,0x000300f7,0x0000091c,0x00000000,0x000400fa,0x0000091a,0x0000091b, + 0x0000091c,0x000200f8,0x0000091b,0x0003003e,0x0000091d,0x00000044,0x000200f9,0x0000091e, + 0x000200f8,0x0000091e,0x000400f6,0x00000920,0x00000921,0x00000001,0x000200f9,0x00000922, + 0x000200f8,0x00000922,0x0004003d,0x00000006,0x00000923,0x0000091d,0x000500b0,0x00000034, + 0x00000924,0x00000923,0x00000191,0x000400fa,0x00000924,0x0000091f,0x00000920,0x000200f8, + 0x0000091f,0x0004003d,0x00000006,0x00000925,0x0000091d,0x0004003d,0x00000006,0x00000926, + 0x0000091d,0x00050041,0x000001c8,0x00000927,0x000005bc,0x00000926,0x0004003d,0x000001c3, + 0x00000928,0x00000927,0x00050041,0x000001c8,0x00000929,0x000001c6,0x00000925,0x0003003e, + 0x00000929,0x00000928,0x000200f9,0x00000921,0x000200f8,0x00000921,0x0004003d,0x00000006, + 0x0000092a,0x0000091d,0x00050080,0x00000006,0x0000092b,0x0000092a,0x000000b3,0x0003003e, + 0x0000091d,0x0000092b,0x000200f9,0x0000091e,0x000200f8,0x00000920,0x000200f9,0x0000091c, + 0x000200f8,0x0000091c,0x000400e0,0x00000113,0x00000113,0x0000007d,0x0004003d,0x00000034, + 0x0000092c,0x000001a2,0x000400a8,0x00000034,0x0000092d,0x0000092c,0x000300f7,0x0000092f, + 0x00000000,0x000400fa,0x0000092d,0x0000092e,0x0000092f,0x000200f8,0x0000092e,0x000100fd, + 0x000200f8,0x0000092f,0x000300f7,0x00000933,0x00000000,0x000400fa,0x00000931,0x00000932, + 0x00000933,0x000200f8,0x00000932,0x0003003e,0x00000934,0x00000044,0x000200f9,0x00000935, + 0x000200f8,0x00000935,0x000400f6,0x00000937,0x00000938,0x00000001,0x000200f9,0x00000939, + 0x000200f8,0x00000939,0x0004003d,0x00000006,0x0000093a,0x00000934,0x000500b0,0x00000034, + 0x0000093b,0x0000093a,0x00000191,0x000400fa,0x0000093b,0x00000936,0x00000937,0x000200f8, + 0x00000936,0x0004003d,0x00000006,0x0000093d,0x00000934,0x00050082,0x00000006,0x0000093e, + 0x00000191,0x0000093d,0x000500b0,0x00000034,0x0000093f,0x0000093e,0x0000008d,0x000300f7, + 0x00000942,0x00000000,0x000400fa,0x0000093f,0x00000941,0x00000945,0x000200f8,0x00000941, + 0x0004003d,0x00000006,0x00000943,0x00000934,0x00050082,0x00000006,0x00000944,0x00000191, + 0x00000943,0x0003003e,0x00000940,0x00000944,0x000200f9,0x00000942,0x000200f8,0x00000945, + 0x0003003e,0x00000940,0x0000008d,0x000200f9,0x00000942,0x000200f8,0x00000942,0x0004003d, + 0x00000006,0x00000946,0x00000940,0x0003003e,0x0000093c,0x00000946,0x0003003e,0x00000947, + 0x00000044,0x000200f9,0x00000948,0x000200f8,0x00000948,0x000400f6,0x0000094a,0x0000094b, + 0x00000001,0x000200f9,0x0000094c,0x000200f8,0x0000094c,0x0004003d,0x00000006,0x0000094d, + 0x00000947,0x0004003d,0x00000006,0x0000094e,0x0000093c,0x000500b0,0x00000034,0x0000094f, + 0x0000094d,0x0000094e,0x000400fa,0x0000094f,0x00000949,0x0000094a,0x000200f8,0x00000949, + 0x0004003d,0x00000006,0x00000950,0x00000934,0x0004003d,0x00000006,0x00000951,0x00000947, + 0x00050080,0x00000006,0x00000952,0x00000950,0x00000951,0x00050041,0x000001c8,0x00000953, + 0x000001c6,0x00000952,0x0004003d,0x000001c3,0x00000954,0x00000953,0x0004003d,0x00000006, + 0x00000955,0x000001f3,0x0004003d,0x00000006,0x00000956,0x00000947,0x00050084,0x00000006, + 0x00000957,0x00000956,0x00000113,0x00050080,0x00000006,0x00000958,0x00000955,0x00000957, + 0x00050041,0x000002cf,0x00000959,0x000002c6,0x00000958,0x0004003d,0x00000006,0x0000095a, + 0x000001f3,0x0004003d,0x00000006,0x0000095b,0x00000947,0x00050084,0x00000006,0x0000095c, + 0x0000095b,0x00000113,0x00050080,0x00000006,0x0000095d,0x0000095a,0x0000095c,0x0007116a, + 0x00000959,0x00000954,0x0000008b,0x000001f6,0x00000028,0x00000113,0x000200f9,0x0000094b, + 0x000200f8,0x0000094b,0x0004003d,0x00000006,0x0000095e,0x00000947,0x00050080,0x00000006, + 0x0000095f,0x0000095e,0x000000b3,0x0003003e,0x00000947,0x0000095f,0x000200f9,0x00000948, + 0x000200f8,0x0000094a,0x00040039,0x00000002,0x00000960,0x0000001b,0x0004003d,0x00000006, + 0x00000962,0x0000093c,0x000500aa,0x00000034,0x00000963,0x00000962,0x00000008,0x000300f7, + 0x00000966,0x00000000,0x000400fa,0x00000963,0x00000965,0x00000967,0x000200f8,0x00000965, + 0x0003003e,0x00000964,0x00000008,0x000200f9,0x00000966,0x000200f8,0x00000967,0x0004003d, + 0x00000006,0x00000968,0x0000093c,0x000500aa,0x00000034,0x00000969,0x00000968,0x00000113, + 0x000600a9,0x00000006,0x0000096a,0x00000969,0x00000113,0x0000008d,0x0003003e,0x00000964, + 0x0000096a,0x000200f9,0x00000966,0x000200f8,0x00000966,0x0004003d,0x00000006,0x0000096b, + 0x00000964,0x0003003e,0x00000961,0x0000096b,0x0004003d,0x00000006,0x0000096d,0x00000961, + 0x00050086,0x00000006,0x0000096e,0x00000221,0x0000096d,0x0003003e,0x0000096c,0x0000096e, + 0x0004003d,0x00000006,0x00000970,0x00000164,0x0004003d,0x00000006,0x00000971,0x00000961, + 0x00050089,0x00000006,0x00000972,0x00000970,0x00000971,0x0003003e,0x0000096f,0x00000972, + 0x0003003e,0x00000973,0x00000044,0x000200f9,0x00000974,0x000200f8,0x00000974,0x000400f6, + 0x00000976,0x00000977,0x00000001,0x000200f9,0x00000978,0x000200f8,0x00000978,0x0004003d, + 0x00000006,0x00000979,0x00000973,0x0004003d,0x00000006,0x0000097a,0x0000096c,0x00050080, + 0x00000006,0x0000097b,0x000000a1,0x0000097a,0x00050082,0x00000006,0x0000097c,0x0000097b, + 0x00000008,0x0004003d,0x00000006,0x0000097d,0x0000096c,0x00050086,0x00000006,0x0000097e, + 0x0000097c,0x0000097d,0x000500b0,0x00000034,0x0000097f,0x00000979,0x0000097e,0x000400fa, + 0x0000097f,0x00000975,0x00000976,0x000200f8,0x00000975,0x0004003d,0x00000006,0x00000981, + 0x00000973,0x0004003d,0x00000006,0x00000982,0x0000096c,0x00050084,0x00000006,0x00000983, + 0x00000981,0x00000982,0x0004003d,0x00000006,0x00000984,0x00000164,0x0004003d,0x00000006, + 0x00000985,0x00000961,0x00050086,0x00000006,0x00000986,0x00000984,0x00000985,0x00050080, + 0x00000006,0x00000987,0x00000983,0x00000986,0x0003003e,0x00000980,0x00000987,0x0004003d, + 0x00000006,0x00000989,0x0000018a,0x0004003d,0x00000006,0x0000098a,0x00000980,0x00050080, + 0x00000006,0x0000098b,0x00000989,0x0000098a,0x0003003e,0x00000988,0x0000098b,0x0004003d, + 0x00000006,0x0000098c,0x00000980,0x000500b0,0x00000034,0x0000098d,0x0000098c,0x000000a1, + 0x0004003d,0x00000006,0x0000098e,0x0000096f,0x0004003d,0x00000006,0x0000098f,0x0000093c, + 0x000500b0,0x00000034,0x00000990,0x0000098e,0x0000098f,0x000500a7,0x00000034,0x00000991, + 0x0000098d,0x00000990,0x000300f7,0x00000993,0x00000000,0x000400fa,0x00000991,0x00000992, + 0x00000993,0x000200f8,0x00000992,0x0004003d,0x00000006,0x00000994,0x00000988,0x00050041, + 0x00000177,0x00000995,0x00000175,0x0000008b,0x0004003d,0x00000006,0x00000996,0x00000995, + 0x000500b0,0x00000034,0x00000997,0x00000994,0x00000996,0x000200f9,0x00000993,0x000200f8, + 0x00000993,0x000700f5,0x00000034,0x00000998,0x00000991,0x00000975,0x00000997,0x00000992, + 0x000300f7,0x0000099a,0x00000000,0x000400fa,0x00000998,0x00000999,0x0000099a,0x000200f8, + 0x00000999,0x0004003d,0x00000006,0x0000099c,0x0000018f,0x0004003d,0x00000006,0x0000099d, + 0x00000934,0x00050084,0x00000006,0x0000099e,0x0000099d,0x000000a1,0x00050080,0x00000006, + 0x0000099f,0x0000099c,0x0000099e,0x0004003d,0x00000006,0x000009a0,0x0000096f,0x00050084, + 0x00000006,0x000009a1,0x000009a0,0x000000a1,0x00050080,0x00000006,0x000009a2,0x0000099f, + 0x000009a1,0x0003003e,0x0000099b,0x000009a2,0x0004003d,0x00000006,0x000009a4,0x00000167, + 0x00050041,0x00000177,0x000009a6,0x00000175,0x000009a5,0x0004003d,0x00000006,0x000009a7, + 0x000009a6,0x00050084,0x00000006,0x000009a8,0x000009a4,0x000009a7,0x0004003d,0x00000006, + 0x000009a9,0x00000988,0x00050041,0x00000177,0x000009aa,0x00000175,0x000000b3,0x0004003d, + 0x00000006,0x000009ab,0x000009aa,0x00050084,0x00000006,0x000009ac,0x000009a9,0x000009ab, + 0x00050080,0x00000006,0x000009ad,0x000009a8,0x000009ac,0x0004003d,0x00000006,0x000009ae, + 0x00000171,0x00050041,0x00000177,0x000009af,0x00000175,0x000000b3,0x0004003d,0x00000006, + 0x000009b0,0x000009af,0x00050084,0x00000006,0x000009b1,0x000009ae,0x000009b0,0x00050041, + 0x00000177,0x000009b2,0x00000175,0x0000008b,0x0004003d,0x00000006,0x000009b3,0x000009b2, + 0x00050084,0x00000006,0x000009b4,0x000009b1,0x000009b3,0x00050080,0x00000006,0x000009b5, + 0x000009ad,0x000009b4,0x0004003d,0x00000006,0x000009b6,0x0000099b,0x00050080,0x00000006, + 0x000009b7,0x000009b5,0x000009b6,0x0003003e,0x000009a3,0x000009b7,0x0004003d,0x00000006, + 0x000009b8,0x000009a3,0x000500c2,0x00000006,0x000009b9,0x000009b8,0x0000007c,0x0004003d, + 0x00000006,0x000009ba,0x000001f3,0x0004003d,0x00000006,0x000009bb,0x00000980,0x00050084, + 0x00000006,0x000009bc,0x000009bb,0x000001f6,0x00050080,0x00000006,0x000009bd,0x000009ba, + 0x000009bc,0x0004003d,0x00000006,0x000009be,0x0000096f,0x00050084,0x00000006,0x000009bf, + 0x000009be,0x00000113,0x00050080,0x00000006,0x000009c0,0x000009bd,0x000009bf,0x00050041, + 0x000002cf,0x000009c1,0x000002c6,0x000009c0,0x0006003d,0x00000026,0x000009c2,0x000009c1, + 0x00000030,0x00000113,0x00060041,0x0000008f,0x000009c3,0x00000150,0x0000008b,0x000009b9, + 0x0003003e,0x000009c3,0x000009c2,0x0004003d,0x00000006,0x000009c4,0x000009a3,0x000500c2, + 0x00000006,0x000009c5,0x000009c4,0x0000007c,0x00050080,0x00000006,0x000009c6,0x000009c5, + 0x00000008,0x0004003d,0x00000006,0x000009c7,0x000001f3,0x0004003d,0x00000006,0x000009c8, + 0x00000980,0x00050084,0x00000006,0x000009c9,0x000009c8,0x000001f6,0x00050080,0x00000006, + 0x000009ca,0x000009c7,0x000009c9,0x0004003d,0x00000006,0x000009cb,0x0000096f,0x00050084, + 0x00000006,0x000009cc,0x000009cb,0x00000113,0x00050080,0x00000006,0x000009cd,0x000009ca, + 0x000009cc,0x00050080,0x00000006,0x000009ce,0x000009cd,0x00000008,0x00050041,0x000002cf, + 0x000009cf,0x000002c6,0x000009ce,0x0006003d,0x00000026,0x000009d0,0x000009cf,0x00000030, + 0x00000113,0x00060041,0x0000008f,0x000009d1,0x00000150,0x0000008b,0x000009c6,0x0003003e, + 0x000009d1,0x000009d0,0x000200f9,0x0000099a,0x000200f8,0x0000099a,0x000200f9,0x00000977, + 0x000200f8,0x00000977,0x0004003d,0x00000006,0x000009d2,0x00000973,0x00050080,0x00000006, + 0x000009d3,0x000009d2,0x000000b3,0x0003003e,0x00000973,0x000009d3,0x000200f9,0x00000974, + 0x000200f8,0x00000976,0x00040039,0x00000002,0x000009d4,0x0000001b,0x000200f9,0x00000938, + 0x000200f8,0x00000938,0x0004003d,0x00000006,0x000009d5,0x00000934,0x00050080,0x00000006, + 0x000009d6,0x000009d5,0x0000008d,0x0003003e,0x00000934,0x000009d6,0x000200f9,0x00000935, + 0x000200f8,0x00000937,0x000100fd,0x000200f8,0x00000933,0x0003003e,0x000009d8,0x00000044, + 0x000200f9,0x000009d9,0x000200f8,0x000009d9,0x000400f6,0x000009db,0x000009dc,0x00000001, + 0x000200f9,0x000009dd,0x000200f8,0x000009dd,0x0004003d,0x00000006,0x000009de,0x000009d8, + 0x000500b0,0x00000034,0x000009df,0x000009de,0x00000191,0x000400fa,0x000009df,0x000009da, + 0x000009db,0x000200f8,0x000009da,0x0004003d,0x00000006,0x000009e1,0x000009d8,0x00050082, + 0x00000006,0x000009e2,0x00000191,0x000009e1,0x000500b0,0x00000034,0x000009e3,0x000009e2, + 0x0000008d,0x000300f7,0x000009e6,0x00000000,0x000400fa,0x000009e3,0x000009e5,0x000009e9, + 0x000200f8,0x000009e5,0x0004003d,0x00000006,0x000009e7,0x000009d8,0x00050082,0x00000006, + 0x000009e8,0x00000191,0x000009e7,0x0003003e,0x000009e4,0x000009e8,0x000200f9,0x000009e6, + 0x000200f8,0x000009e9,0x0003003e,0x000009e4,0x0000008d,0x000200f9,0x000009e6,0x000200f8, + 0x000009e6,0x0004003d,0x00000006,0x000009ea,0x000009e4,0x0003003e,0x000009e0,0x000009ea, + 0x0003003e,0x000009eb,0x00000044,0x000200f9,0x000009ec,0x000200f8,0x000009ec,0x000400f6, + 0x000009ee,0x000009ef,0x00000001,0x000200f9,0x000009f0,0x000200f8,0x000009f0,0x0004003d, + 0x00000006,0x000009f1,0x000009eb,0x0004003d,0x00000006,0x000009f2,0x000009e0,0x000500b0, + 0x00000034,0x000009f3,0x000009f1,0x000009f2,0x000400fa,0x000009f3,0x000009ed,0x000009ee, + 0x000200f8,0x000009ed,0x0004003d,0x00000006,0x000009f4,0x000009d8,0x0004003d,0x00000006, + 0x000009f5,0x000009eb,0x00050080,0x00000006,0x000009f6,0x000009f4,0x000009f5,0x00050041, + 0x000001c8,0x000009f7,0x000001c6,0x000009f6,0x0004003d,0x000001c3,0x000009f8,0x000009f7, + 0x0004003d,0x00000006,0x000009f9,0x000001f3,0x0004003d,0x00000006,0x000009fa,0x000009eb, + 0x00050084,0x00000006,0x000009fb,0x000009fa,0x00000113,0x00050080,0x00000006,0x000009fc, + 0x000009f9,0x000009fb,0x00050041,0x000002cf,0x000009fd,0x000002c6,0x000009fc,0x0004003d, + 0x00000006,0x000009fe,0x000001f3,0x0004003d,0x00000006,0x000009ff,0x000009eb,0x00050084, + 0x00000006,0x00000a00,0x000009ff,0x00000113,0x00050080,0x00000006,0x00000a01,0x000009fe, + 0x00000a00,0x0007116a,0x000009fd,0x000009f8,0x0000008b,0x000001f6,0x00000028,0x00000113, + 0x000200f9,0x000009ef,0x000200f8,0x000009ef,0x0004003d,0x00000006,0x00000a02,0x000009eb, + 0x00050080,0x00000006,0x00000a03,0x00000a02,0x000000b3,0x0003003e,0x000009eb,0x00000a03, + 0x000200f9,0x000009ec,0x000200f8,0x000009ee,0x00040039,0x00000002,0x00000a04,0x0000001b, + 0x0004003d,0x00000006,0x00000a06,0x000009e0,0x000500aa,0x00000034,0x00000a07,0x00000a06, + 0x00000008,0x000300f7,0x00000a0a,0x00000000,0x000400fa,0x00000a07,0x00000a09,0x00000a0b, + 0x000200f8,0x00000a09,0x0003003e,0x00000a08,0x00000008,0x000200f9,0x00000a0a,0x000200f8, + 0x00000a0b,0x0004003d,0x00000006,0x00000a0c,0x000009e0,0x000500aa,0x00000034,0x00000a0d, + 0x00000a0c,0x00000113,0x000600a9,0x00000006,0x00000a0e,0x00000a0d,0x00000113,0x0000008d, + 0x0003003e,0x00000a08,0x00000a0e,0x000200f9,0x00000a0a,0x000200f8,0x00000a0a,0x0004003d, + 0x00000006,0x00000a0f,0x00000a08,0x0003003e,0x00000a05,0x00000a0f,0x0004003d,0x00000006, + 0x00000a11,0x00000a05,0x00050086,0x00000006,0x00000a12,0x00000221,0x00000a11,0x0003003e, + 0x00000a10,0x00000a12,0x0004003d,0x00000006,0x00000a14,0x00000164,0x0004003d,0x00000006, + 0x00000a15,0x00000a05,0x00050089,0x00000006,0x00000a16,0x00000a14,0x00000a15,0x0003003e, + 0x00000a13,0x00000a16,0x0003003e,0x00000a17,0x00000044,0x000200f9,0x00000a18,0x000200f8, + 0x00000a18,0x000400f6,0x00000a1a,0x00000a1b,0x00000001,0x000200f9,0x00000a1c,0x000200f8, + 0x00000a1c,0x0004003d,0x00000006,0x00000a1d,0x00000a17,0x0004003d,0x00000006,0x00000a1e, + 0x00000a10,0x00050080,0x00000006,0x00000a1f,0x000000a1,0x00000a1e,0x00050082,0x00000006, + 0x00000a20,0x00000a1f,0x00000008,0x0004003d,0x00000006,0x00000a21,0x00000a10,0x00050086, + 0x00000006,0x00000a22,0x00000a20,0x00000a21,0x000500b0,0x00000034,0x00000a23,0x00000a1d, + 0x00000a22,0x000400fa,0x00000a23,0x00000a19,0x00000a1a,0x000200f8,0x00000a19,0x0004003d, + 0x00000006,0x00000a25,0x00000a17,0x0004003d,0x00000006,0x00000a26,0x00000a10,0x00050084, + 0x00000006,0x00000a27,0x00000a25,0x00000a26,0x0004003d,0x00000006,0x00000a28,0x00000164, + 0x0004003d,0x00000006,0x00000a29,0x00000a05,0x00050086,0x00000006,0x00000a2a,0x00000a28, + 0x00000a29,0x00050080,0x00000006,0x00000a2b,0x00000a27,0x00000a2a,0x0003003e,0x00000a24, + 0x00000a2b,0x0004003d,0x00000006,0x00000a2d,0x0000018a,0x0004003d,0x00000006,0x00000a2e, + 0x00000a24,0x00050080,0x00000006,0x00000a2f,0x00000a2d,0x00000a2e,0x0003003e,0x00000a2c, + 0x00000a2f,0x0004003d,0x00000006,0x00000a30,0x00000a24,0x000500b0,0x00000034,0x00000a31, + 0x00000a30,0x000000a1,0x0004003d,0x00000006,0x00000a32,0x00000a13,0x0004003d,0x00000006, + 0x00000a33,0x000009e0,0x000500b0,0x00000034,0x00000a34,0x00000a32,0x00000a33,0x000500a7, + 0x00000034,0x00000a35,0x00000a31,0x00000a34,0x000300f7,0x00000a37,0x00000000,0x000400fa, + 0x00000a35,0x00000a36,0x00000a37,0x000200f8,0x00000a36,0x0004003d,0x00000006,0x00000a38, + 0x00000a2c,0x00050041,0x00000177,0x00000a39,0x00000175,0x0000008b,0x0004003d,0x00000006, + 0x00000a3a,0x00000a39,0x000500b0,0x00000034,0x00000a3b,0x00000a38,0x00000a3a,0x000200f9, + 0x00000a37,0x000200f8,0x00000a37,0x000700f5,0x00000034,0x00000a3c,0x00000a35,0x00000a19, + 0x00000a3b,0x00000a36,0x000300f7,0x00000a3e,0x00000000,0x000400fa,0x00000a3c,0x00000a3d, + 0x00000a3e,0x000200f8,0x00000a3d,0x0004003d,0x00000006,0x00000a40,0x0000018f,0x0004003d, + 0x00000006,0x00000a41,0x000009d8,0x00050084,0x00000006,0x00000a42,0x00000a41,0x000000a1, + 0x00050080,0x00000006,0x00000a43,0x00000a40,0x00000a42,0x0004003d,0x00000006,0x00000a44, + 0x00000a13,0x00050084,0x00000006,0x00000a45,0x00000a44,0x000000a1,0x00050080,0x00000006, + 0x00000a46,0x00000a43,0x00000a45,0x0003003e,0x00000a3f,0x00000a46,0x0004003d,0x00000006, + 0x00000a48,0x000001f3,0x0004003d,0x00000006,0x00000a49,0x00000a24,0x00050084,0x00000006, + 0x00000a4a,0x00000a49,0x000001f6,0x00050080,0x00000006,0x00000a4b,0x00000a48,0x00000a4a, + 0x0004003d,0x00000006,0x00000a4c,0x00000a13,0x00050084,0x00000006,0x00000a4d,0x00000a4c, + 0x00000113,0x00050080,0x00000006,0x00000a4e,0x00000a4b,0x00000a4d,0x00050041,0x000002cf, + 0x00000a4f,0x000002c6,0x00000a4e,0x0006003d,0x00000026,0x00000a50,0x00000a4f,0x00000030, + 0x00000113,0x0003003e,0x00000a47,0x00000a50,0x0004003d,0x00000006,0x00000a52,0x000001f3, + 0x0004003d,0x00000006,0x00000a53,0x00000a24,0x00050084,0x00000006,0x00000a54,0x00000a53, + 0x000001f6,0x00050080,0x00000006,0x00000a55,0x00000a52,0x00000a54,0x0004003d,0x00000006, + 0x00000a56,0x00000a13,0x00050084,0x00000006,0x00000a57,0x00000a56,0x00000113,0x00050080, + 0x00000006,0x00000a58,0x00000a55,0x00000a57,0x00050080,0x00000006,0x00000a59,0x00000a58, + 0x00000008,0x00050041,0x000002cf,0x00000a5a,0x000002c6,0x00000a59,0x0006003d,0x00000026, + 0x00000a5b,0x00000a5a,0x00000030,0x00000113,0x0003003e,0x00000a51,0x00000a5b,0x0004003d, + 0x00000006,0x00000a5c,0x00000a2c,0x00050041,0x00000177,0x00000a5d,0x00000175,0x000001cf, + 0x0004003d,0x00000006,0x00000a5e,0x00000a5d,0x00050084,0x00000006,0x00000a5f,0x00000a5c, + 0x00000a5e,0x0004003d,0x00000006,0x00000a60,0x00000198,0x00050080,0x00000006,0x00000a61, + 0x00000a5f,0x00000a60,0x0004003d,0x00000006,0x00000a62,0x00000a3f,0x00050080,0x00000006, + 0x00000a63,0x00000a61,0x00000a62,0x0004003d,0x00000026,0x00000a65,0x00000a47,0x0003003e, + 0x00000a64,0x00000a65,0x0004003d,0x00000026,0x00000a67,0x00000a51,0x0003003e,0x00000a66, + 0x00000a67,0x0003003e,0x00000a68,0x00000a63,0x0004003d,0x00000006,0x00000a6a,0x00000a3f, + 0x0003003e,0x00000a69,0x00000a6a,0x00080039,0x00000002,0x00000a6b,0x0000002d,0x00000a64, + 0x00000a66,0x00000a68,0x00000a69,0x000200f9,0x00000a3e,0x000200f8,0x00000a3e,0x000200f9, + 0x00000a1b,0x000200f8,0x00000a1b,0x0004003d,0x00000006,0x00000a6c,0x00000a17,0x00050080, + 0x00000006,0x00000a6d,0x00000a6c,0x000000b3,0x0003003e,0x00000a17,0x00000a6d,0x000200f9, + 0x00000a18,0x000200f8,0x00000a1a,0x00040039,0x00000002,0x00000a6e,0x0000001b,0x000200f9, + 0x000009dc,0x000200f8,0x000009dc,0x0004003d,0x00000006,0x00000a6f,0x000009d8,0x00050080, + 0x00000006,0x00000a70,0x00000a6f,0x0000008d,0x0003003e,0x000009d8,0x00000a70,0x000200f9, + 0x000009d9,0x000200f8,0x000009db,0x000100fd,0x00010038,0x00050036,0x0000000c,0x0000000f, + 0x00000000,0x0000000d,0x00030037,0x0000000b,0x0000000e,0x000200f8,0x00000010,0x0004003b, + 0x0000000b,0x0000002f,0x00000007,0x0004003b,0x0000003a,0x0000003b,0x00000007,0x0004003b, + 0x00000040,0x00000041,0x00000007,0x0004003d,0x0000000a,0x00000030,0x0000000e,0x0004003d, + 0x0000000a,0x00000033,0x0000000e,0x0004009c,0x00000035,0x00000036,0x00000033,0x000600a9, + 0x0000000a,0x00000037,0x00000036,0x00000032,0x00000030,0x0003003e,0x0000002f,0x00000037, + 0x0004003d,0x0000000a,0x0000003c,0x0000002f,0x00040073,0x00000039,0x0000003d,0x0000003c, + 0x0003003e,0x0000003b,0x0000003d,0x0004003d,0x00000039,0x00000042,0x0000003b,0x0004007c, + 0x0000003f,0x00000043,0x00000042,0x0003003e,0x00000041,0x00000043,0x00050041,0x00000045, + 0x00000046,0x00000041,0x00000044,0x0004003d,0x0000003e,0x00000047,0x00000046,0x00040071, + 0x00000006,0x00000048,0x00000047,0x00050041,0x00000045,0x00000049,0x00000041,0x00000008, + 0x0004003d,0x0000003e,0x0000004a,0x00000049,0x00040071,0x00000006,0x0000004b,0x0000004a, + 0x000500c4,0x00000006,0x0000004c,0x0000004b,0x0000001e,0x000500c5,0x00000006,0x0000004d, + 0x00000048,0x0000004c,0x00040071,0x0000000c,0x0000004e,0x0000004d,0x000200fe,0x0000004e, + 0x00010038,0x00050036,0x00000012,0x00000015,0x00000000,0x00000013,0x00030037,0x00000011, + 0x00000014,0x000200f8,0x00000016,0x0004003b,0x00000051,0x00000052,0x00000007,0x0004003d, + 0x00000006,0x00000053,0x00000014,0x000500c7,0x00000006,0x00000055,0x00000053,0x00000054, + 0x00040071,0x0000003e,0x00000056,0x00000055,0x0004007c,0x00000038,0x00000057,0x00000056, + 0x00040073,0x00000012,0x00000058,0x00000057,0x0003003e,0x00000052,0x00000058,0x0004003d, + 0x00000012,0x00000059,0x00000052,0x0004009c,0x00000034,0x0000005a,0x00000059,0x0004003d, + 0x00000012,0x0000005c,0x00000052,0x000600a9,0x00000012,0x0000005d,0x0000005a,0x0000005b, + 0x0000005c,0x000200fe,0x0000005d,0x00010038,0x00050036,0x0000000a,0x00000019,0x00000000, + 0x00000017,0x00030037,0x0000000b,0x00000018,0x000200f8,0x0000001a,0x0004003b,0x0000000b, + 0x00000060,0x00000007,0x0004003b,0x0000000b,0x00000067,0x00000007,0x0004003b,0x0000000b, + 0x0000006f,0x00000007,0x0004003b,0x0000000b,0x00000075,0x00000007,0x0004003d,0x0000000a, + 0x00000061,0x00000018,0x0008000c,0x0000000a,0x00000066,0x00000001,0x0000002b,0x00000061, + 0x00000063,0x00000065,0x0003003e,0x00000060,0x00000066,0x0004003d,0x0000000a,0x0000006a, + 0x00000060,0x0006000c,0x0000000a,0x0000006b,0x00000001,0x00000004,0x0000006a,0x0008000c, + 0x0000000a,0x0000006e,0x00000001,0x00000032,0x00000069,0x0000006b,0x0000006d,0x0003003e, + 0x00000067,0x0000006e,0x0004003d,0x0000000a,0x00000070,0x00000060,0x0004003d,0x0000000a, + 0x00000071,0x00000067,0x0008000c,0x0000000a,0x00000074,0x00000001,0x00000032,0x00000070, + 0x00000071,0x00000073,0x0003003e,0x0000006f,0x00000074,0x0004003d,0x0000000a,0x00000076, + 0x00000018,0x0004003d,0x0000000a,0x00000077,0x0000006f,0x00050085,0x0000000a,0x00000078, + 0x00000076,0x00000077,0x0003003e,0x00000075,0x00000078,0x0004003d,0x0000000a,0x00000079, + 0x00000075,0x000200fe,0x00000079,0x00010038,0x00050036,0x00000002,0x0000001b,0x00000000, + 0x00000003,0x000200f8,0x0000001c,0x000300e1,0x0000007c,0x0000007d,0x000400e0,0x0000007c, + 0x0000007c,0x0000007e,0x000100fd,0x00010038,0x00050036,0x00000002,0x00000024,0x00000000, + 0x00000021,0x00030037,0x00000011,0x00000022,0x00030037,0x00000020,0x00000023,0x000200f8, + 0x00000025,0x0004003b,0x00000027,0x00000085,0x00000007,0x0004003b,0x00000011,0x00000092, + 0x00000007,0x0004003b,0x00000011,0x0000009a,0x00000007,0x0004003b,0x00000011,0x000000a9, + 0x00000007,0x0004003b,0x00000011,0x000000ad,0x00000007,0x0004003b,0x00000027,0x000000b6, + 0x00000007,0x0004003b,0x00000027,0x000000bf,0x00000007,0x0004003b,0x00000011,0x000000c5, + 0x00000007,0x000300f7,0x00000084,0x00000000,0x000400fa,0x00000082,0x00000083,0x000000b5, + 0x000200f8,0x00000083,0x0004003d,0x00000006,0x0000008c,0x00000022,0x000500c2,0x00000006, + 0x0000008e,0x0000008c,0x0000008d,0x00060041,0x0000008f,0x00000090,0x00000089,0x0000008b, + 0x0000008e,0x0004003d,0x00000026,0x00000091,0x00000090,0x0003003e,0x00000085,0x00000091, + 0x0003003e,0x00000092,0x00000044,0x000200f9,0x00000093,0x000200f8,0x00000093,0x000400f6, + 0x00000095,0x00000096,0x00000001,0x000200f9,0x00000097,0x000200f8,0x00000097,0x0004003d, + 0x00000006,0x00000098,0x00000092,0x000500b0,0x00000034,0x00000099,0x00000098,0x0000001e, + 0x000400fa,0x00000099,0x00000094,0x00000095,0x000200f8,0x00000094,0x0004003d,0x00000006, + 0x0000009b,0x00000092,0x000500c2,0x00000006,0x0000009c,0x0000009b,0x00000008,0x00050041, + 0x00000011,0x0000009d,0x00000085,0x0000009c,0x0004003d,0x00000006,0x0000009e,0x0000009d, + 0x0004003d,0x00000006,0x0000009f,0x00000092,0x000500c7,0x00000006,0x000000a0,0x0000009f, + 0x00000008,0x00050084,0x00000006,0x000000a2,0x000000a0,0x000000a1,0x000500c2,0x00000006, + 0x000000a3,0x0000009e,0x000000a2,0x000500c7,0x00000006,0x000000a5,0x000000a3,0x000000a4, + 0x0003003e,0x0000009a,0x000000a5,0x0004003d,0x00000006,0x000000a6,0x00000092,0x0004003d, + 0x00000006,0x000000a7,0x0000009a,0x000500c7,0x00000006,0x000000a8,0x000000a7,0x00000054, + 0x0003003e,0x000000a9,0x000000a8,0x00050039,0x00000012,0x000000aa,0x00000015,0x000000a9, + 0x0004003d,0x00000006,0x000000ab,0x0000009a,0x000500c2,0x00000006,0x000000ac,0x000000ab, + 0x0000001e,0x0003003e,0x000000ad,0x000000ac,0x00050039,0x00000012,0x000000ae,0x00000015, + 0x000000ad,0x00050050,0x0000001d,0x000000af,0x000000aa,0x000000ae,0x00050041,0x000000b0, + 0x000000b1,0x00000023,0x000000a6,0x0003003e,0x000000b1,0x000000af,0x000200f9,0x00000096, + 0x000200f8,0x00000096,0x0004003d,0x00000006,0x000000b2,0x00000092,0x00050080,0x00000006, + 0x000000b4,0x000000b2,0x000000b3,0x0003003e,0x00000092,0x000000b4,0x000200f9,0x00000093, + 0x000200f8,0x00000095,0x000200f9,0x00000084,0x000200f8,0x000000b5,0x0004003d,0x00000006, + 0x000000bb,0x00000022,0x000500c2,0x00000006,0x000000bc,0x000000bb,0x0000007c,0x00060041, + 0x0000008f,0x000000bd,0x000000ba,0x0000008b,0x000000bc,0x0004003d,0x00000026,0x000000be, + 0x000000bd,0x0003003e,0x000000b6,0x000000be,0x0004003d,0x00000006,0x000000c0,0x00000022, + 0x000500c2,0x00000006,0x000000c1,0x000000c0,0x0000007c,0x00050080,0x00000006,0x000000c2, + 0x000000c1,0x00000008,0x00060041,0x0000008f,0x000000c3,0x000000ba,0x0000008b,0x000000c2, + 0x0004003d,0x00000026,0x000000c4,0x000000c3,0x0003003e,0x000000bf,0x000000c4,0x0003003e, + 0x000000c5,0x00000044,0x000200f9,0x000000c6,0x000200f8,0x000000c6,0x000400f6,0x000000c8, + 0x000000c9,0x00000001,0x000200f9,0x000000ca,0x000200f8,0x000000ca,0x0004003d,0x00000006, + 0x000000cb,0x000000c5,0x000500b0,0x00000034,0x000000cc,0x000000cb,0x0000008d,0x000400fa, + 0x000000cc,0x000000c7,0x000000c8,0x000200f8,0x000000c7,0x0004003d,0x00000006,0x000000cd, + 0x000000c5,0x0004003d,0x00000006,0x000000ce,0x000000c5,0x00050041,0x00000011,0x000000cf, + 0x000000b6,0x000000ce,0x0004003d,0x00000006,0x000000d0,0x000000cf,0x0004007c,0x0000000a, + 0x000000d1,0x000000d0,0x00040073,0x0000001d,0x000000d2,0x000000d1,0x00050041,0x000000b0, + 0x000000d3,0x00000023,0x000000cd,0x0003003e,0x000000d3,0x000000d2,0x0004003d,0x00000006, + 0x000000d4,0x000000c5,0x00050080,0x00000006,0x000000d5,0x0000008d,0x000000d4,0x0004003d, + 0x00000006,0x000000d6,0x000000c5,0x00050041,0x00000011,0x000000d7,0x000000bf,0x000000d6, + 0x0004003d,0x00000006,0x000000d8,0x000000d7,0x0004007c,0x0000000a,0x000000d9,0x000000d8, + 0x00040073,0x0000001d,0x000000da,0x000000d9,0x00050041,0x000000b0,0x000000db,0x00000023, + 0x000000d5,0x0003003e,0x000000db,0x000000da,0x000200f9,0x000000c9,0x000200f8,0x000000c9, + 0x0004003d,0x00000006,0x000000dc,0x000000c5,0x00050080,0x00000006,0x000000dd,0x000000dc, + 0x000000b3,0x0003003e,0x000000c5,0x000000dd,0x000200f9,0x000000c6,0x000200f8,0x000000c8, + 0x000200f9,0x00000084,0x000200f8,0x00000084,0x000100fd,0x00010038,0x00050036,0x00000002, + 0x0000002d,0x00000000,0x00000028,0x00030037,0x00000027,0x00000029,0x00030037,0x00000027, + 0x0000002a,0x00030037,0x00000011,0x0000002b,0x00030037,0x00000011,0x0000002c,0x000200f8, + 0x0000002e,0x0004003b,0x00000011,0x000000e2,0x00000007,0x0004003b,0x0000000b,0x000000ef, + 0x00000007,0x0004003b,0x0000000b,0x000000f8,0x00000007,0x0004003b,0x00000027,0x00000103, + 0x00000007,0x0004003b,0x0000000b,0x00000107,0x00000007,0x0004003b,0x0000000b,0x0000010d, + 0x00000007,0x0004003b,0x0000000b,0x00000117,0x00000007,0x0004003b,0x0000000b,0x0000011d, + 0x00000007,0x0004003b,0x0000000b,0x00000126,0x00000007,0x0004003b,0x0000000b,0x0000012c, + 0x00000007,0x0004003b,0x0000000b,0x00000135,0x00000007,0x0004003b,0x0000000b,0x0000013b, + 0x00000007,0x000300f7,0x000000e1,0x00000000,0x000400fa,0x000000df,0x000000e0,0x000000e1, + 0x000200f8,0x000000e0,0x0003003e,0x000000e2,0x00000044,0x000200f9,0x000000e3,0x000200f8, + 0x000000e3,0x000400f6,0x000000e5,0x000000e6,0x00000001,0x000200f9,0x000000e7,0x000200f8, + 0x000000e7,0x0004003d,0x00000006,0x000000e8,0x000000e2,0x000500b0,0x00000034,0x000000e9, + 0x000000e8,0x0000008d,0x000400fa,0x000000e9,0x000000e4,0x000000e5,0x000200f8,0x000000e4, + 0x0004003d,0x00000006,0x000000ea,0x000000e2,0x0004003d,0x00000006,0x000000eb,0x000000e2, + 0x00050041,0x00000011,0x000000ec,0x00000029,0x000000eb,0x0004003d,0x00000006,0x000000ed, + 0x000000ec,0x0004007c,0x0000000a,0x000000ee,0x000000ed,0x0003003e,0x000000ef,0x000000ee, + 0x00050039,0x0000000a,0x000000f0,0x00000019,0x000000ef,0x0004007c,0x00000006,0x000000f1, + 0x000000f0,0x00050041,0x00000011,0x000000f2,0x00000029,0x000000ea,0x0003003e,0x000000f2, + 0x000000f1,0x0004003d,0x00000006,0x000000f3,0x000000e2,0x0004003d,0x00000006,0x000000f4, + 0x000000e2,0x00050041,0x00000011,0x000000f5,0x0000002a,0x000000f4,0x0004003d,0x00000006, + 0x000000f6,0x000000f5,0x0004007c,0x0000000a,0x000000f7,0x000000f6,0x0003003e,0x000000f8, + 0x000000f7,0x00050039,0x0000000a,0x000000f9,0x00000019,0x000000f8,0x0004007c,0x00000006, + 0x000000fa,0x000000f9,0x00050041,0x00000011,0x000000fb,0x0000002a,0x000000f3,0x0003003e, + 0x000000fb,0x000000fa,0x000200f9,0x000000e6,0x000200f8,0x000000e6,0x0004003d,0x00000006, + 0x000000fc,0x000000e2,0x00050080,0x00000006,0x000000fd,0x000000fc,0x000000b3,0x0003003e, + 0x000000e2,0x000000fd,0x000200f9,0x000000e3,0x000200f8,0x000000e5,0x000200f9,0x000000e1, + 0x000200f8,0x000000e1,0x000300f7,0x00000102,0x00000000,0x000400fa,0x00000100,0x00000101, + 0x00000102,0x000200f8,0x00000101,0x00050041,0x00000011,0x00000104,0x00000029,0x00000044, + 0x0004003d,0x00000006,0x00000105,0x00000104,0x0004007c,0x0000000a,0x00000106,0x00000105, + 0x0003003e,0x00000107,0x00000106,0x00050039,0x0000000c,0x00000108,0x0000000f,0x00000107, + 0x00040071,0x00000006,0x00000109,0x00000108,0x00050041,0x00000011,0x0000010a,0x00000029, + 0x00000008,0x0004003d,0x00000006,0x0000010b,0x0000010a,0x0004007c,0x0000000a,0x0000010c, + 0x0000010b,0x0003003e,0x0000010d,0x0000010c,0x00050039,0x0000000c,0x0000010e,0x0000000f, + 0x0000010d,0x00040071,0x00000006,0x0000010f,0x0000010e,0x000500c4,0x00000006,0x00000110, + 0x0000010f,0x000000a1,0x000500c5,0x00000006,0x00000111,0x00000109,0x00000110,0x00050041, + 0x00000011,0x00000112,0x00000103,0x00000044,0x0003003e,0x00000112,0x00000111,0x00050041, + 0x00000011,0x00000114,0x00000029,0x00000113,0x0004003d,0x00000006,0x00000115,0x00000114, + 0x0004007c,0x0000000a,0x00000116,0x00000115,0x0003003e,0x00000117,0x00000116,0x00050039, + 0x0000000c,0x00000118,0x0000000f,0x00000117,0x00040071,0x00000006,0x00000119,0x00000118, + 0x00050041,0x00000011,0x0000011a,0x00000029,0x0000007c,0x0004003d,0x00000006,0x0000011b, + 0x0000011a,0x0004007c,0x0000000a,0x0000011c,0x0000011b,0x0003003e,0x0000011d,0x0000011c, + 0x00050039,0x0000000c,0x0000011e,0x0000000f,0x0000011d,0x00040071,0x00000006,0x0000011f, + 0x0000011e,0x000500c4,0x00000006,0x00000120,0x0000011f,0x000000a1,0x000500c5,0x00000006, + 0x00000121,0x00000119,0x00000120,0x00050041,0x00000011,0x00000122,0x00000103,0x00000008, + 0x0003003e,0x00000122,0x00000121,0x00050041,0x00000011,0x00000123,0x0000002a,0x00000044, + 0x0004003d,0x00000006,0x00000124,0x00000123,0x0004007c,0x0000000a,0x00000125,0x00000124, + 0x0003003e,0x00000126,0x00000125,0x00050039,0x0000000c,0x00000127,0x0000000f,0x00000126, + 0x00040071,0x00000006,0x00000128,0x00000127,0x00050041,0x00000011,0x00000129,0x0000002a, + 0x00000008,0x0004003d,0x00000006,0x0000012a,0x00000129,0x0004007c,0x0000000a,0x0000012b, + 0x0000012a,0x0003003e,0x0000012c,0x0000012b,0x00050039,0x0000000c,0x0000012d,0x0000000f, + 0x0000012c,0x00040071,0x00000006,0x0000012e,0x0000012d,0x000500c4,0x00000006,0x0000012f, + 0x0000012e,0x000000a1,0x000500c5,0x00000006,0x00000130,0x00000128,0x0000012f,0x00050041, + 0x00000011,0x00000131,0x00000103,0x00000113,0x0003003e,0x00000131,0x00000130,0x00050041, + 0x00000011,0x00000132,0x0000002a,0x00000113,0x0004003d,0x00000006,0x00000133,0x00000132, + 0x0004007c,0x0000000a,0x00000134,0x00000133,0x0003003e,0x00000135,0x00000134,0x00050039, + 0x0000000c,0x00000136,0x0000000f,0x00000135,0x00040071,0x00000006,0x00000137,0x00000136, + 0x00050041,0x00000011,0x00000138,0x0000002a,0x0000007c,0x0004003d,0x00000006,0x00000139, + 0x00000138,0x0004007c,0x0000000a,0x0000013a,0x00000139,0x0003003e,0x0000013b,0x0000013a, + 0x00050039,0x0000000c,0x0000013c,0x0000000f,0x0000013b,0x00040071,0x00000006,0x0000013d, + 0x0000013c,0x000500c4,0x00000006,0x0000013e,0x0000013d,0x000000a1,0x000500c5,0x00000006, + 0x0000013f,0x00000137,0x0000013e,0x00050041,0x00000011,0x00000140,0x00000103,0x0000007c, + 0x0003003e,0x00000140,0x0000013f,0x0004003d,0x00000006,0x00000145,0x0000002b,0x000500c2, + 0x00000006,0x00000146,0x00000145,0x0000008d,0x0004003d,0x00000026,0x00000147,0x00000103, + 0x00060041,0x0000008f,0x00000148,0x00000144,0x0000008b,0x00000146,0x0003003e,0x00000148, + 0x00000147,0x000200f9,0x00000102,0x000200f8,0x00000102,0x000300f7,0x0000014c,0x00000000, + 0x000400fa,0x0000014a,0x0000014b,0x0000014c,0x000200f8,0x0000014b,0x0004003d,0x00000006, + 0x00000151,0x0000002b,0x000500c2,0x00000006,0x00000152,0x00000151,0x0000007c,0x0004003d, + 0x00000026,0x00000153,0x00000029,0x00060041,0x0000008f,0x00000154,0x00000150,0x0000008b, + 0x00000152,0x0003003e,0x00000154,0x00000153,0x0004003d,0x00000006,0x00000155,0x0000002b, + 0x000500c2,0x00000006,0x00000156,0x00000155,0x0000007c,0x00050080,0x00000006,0x00000157, + 0x00000156,0x00000008,0x0004003d,0x00000026,0x00000158,0x0000002a,0x00060041,0x0000008f, + 0x00000159,0x00000150,0x0000008b,0x00000157,0x0003003e,0x00000159,0x00000158,0x000200f9, + 0x0000014c,0x000200f8,0x0000014c,0x000100fd,0x00010038, +}; +inline constexpr uint32_t k_gemm_f16[] = { + 0x07230203,0x00010600,0x0008000b,0x000001ce,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x0000003d,0x00020011,0x00001151,0x00020011, + 0x00001160,0x00020011,0x000014e1,0x00020011,0x00001786,0x0008000a,0x5f565053,0x5f52484b, + 0x706f6f63,0x74617265,0x5f657669,0x7274616d,0x00007869,0x0006000b,0x00000001,0x4c534c47, + 0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000003,0x000f000f,0x00000005, + 0x00000004,0x6e69616d,0x00000000,0x000000c7,0x000000ca,0x000000cf,0x00000107,0x0000010c, + 0x0000012d,0x00000154,0x0000019d,0x000001ac,0x000001ba,0x00060010,0x00000004,0x00000011, + 0x00000080,0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc,0x00080004,0x455f4c47, + 0x735f5458,0x65646168,0x36315f72,0x5f746962,0x726f7473,0x00656761,0x00080004,0x455f4c47, + 0x735f5458,0x65646168,0x62385f72,0x735f7469,0x61726f74,0x00006567,0x000b0004,0x455f4c47, + 0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63, + 0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c, + 0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63, + 0x69645f65,0x74636572,0x00657669,0x00080004,0x4b5f4c47,0x635f5248,0x65706f6f,0x69746172, + 0x6d5f6576,0x69727461,0x00000078,0x00090004,0x4b5f4c47,0x6d5f5248,0x726f6d65,0x63735f79, + 0x5f65706f,0x616d6573,0x6369746e,0x00000073,0x00090004,0x4b5f4c47,0x735f5248,0x65646168, + 0x75735f72,0x6f726762,0x625f7075,0x63697361,0x00000000,0x00040005,0x00000004,0x6e69616d, + 0x00000000,0x00060005,0x0000000b,0x42363166,0x28737469,0x31363166,0x0000003b,0x00040005, + 0x0000000a,0x756c6176,0x00000065,0x00060005,0x00000011,0x66696873,0x656e5274,0x3b317528, + 0x003b3175,0x00040005,0x0000000f,0x756c6176,0x00000065,0x00040005,0x00000010,0x66696873, + 0x00000074,0x00080005,0x00000015,0x336d3465,0x65646f43,0x6d6f7246,0x42363146,0x28737469, + 0x003b3175,0x00050005,0x00000014,0x666c6168,0x73746942,0x00000000,0x00050005,0x0000001d, + 0x746f7571,0x746e6569,0x00000000,0x00060005,0x00000021,0x616d6572,0x65646e69,0x73614d72, + 0x0000006b,0x00050005,0x00000026,0x616d6572,0x65646e69,0x00000072,0x00040005,0x0000002a, + 0x666c6168,0x00796177,0x00040005,0x00000046,0x614e7369,0x0000006e,0x00050005,0x00000062, + 0x6167656e,0x65766974,0x00000000,0x00050005,0x00000068,0x6f707865,0x746e656e,0x00000000, + 0x00050005,0x0000006e,0x746e616d,0x61737369,0x00000000,0x00040005,0x00000075,0x65646f63, + 0x00000000,0x00050005,0x0000007c,0x6e676973,0x63696669,0x00646e61,0x00040005,0x00000088, + 0x66696873,0x00000074,0x00040005,0x00000094,0x61726170,0x0000006d,0x00040005,0x00000096, + 0x61726170,0x0000006d,0x00050005,0x0000009b,0x78453465,0x656e6f70,0x0000746e,0x00050005, + 0x0000009e,0x614d3465,0x7369746e,0x00006173,0x00040005,0x000000a0,0x61726170,0x0000006d, + 0x00040005,0x000000a2,0x61726170,0x0000006d,0x00050005,0x000000c5,0x67627573,0x70756f72, + 0x00000000,0x00060005,0x000000c7,0x535f6c67,0x72676275,0x4970756f,0x00000044,0x00040005, + 0x000000c9,0x656e616c,0x00000000,0x00080005,0x000000ca,0x535f6c67,0x72676275,0x4970756f, + 0x636f766e,0x6f697461,0x0044496e,0x00040005,0x000000cc,0x42776f72,0x00657361,0x00060005, + 0x000000cf,0x575f6c67,0x476b726f,0x70756f72,0x00004449,0x00050005,0x000000dd,0x656c6974, + 0x65736142,0x00000000,0x00040005,0x000000e0,0x454c4954,0x00004e5f,0x00030005,0x000000e2, + 0x00000074,0x00040005,0x000000e9,0x454c4954,0x00000053,0x00030005,0x000000ee,0x00636361, + 0x00030005,0x000000f8,0x0000626b,0x00030005,0x000000ff,0x0000004b,0x00030005,0x00000103, + 0x0000616d,0x00040005,0x00000105,0x75706e49,0x00004174,0x00040006,0x00000105,0x00000000, + 0x00000061,0x00030005,0x00000107,0x00000000,0x00040005,0x0000010a,0x68737550,0x00000000, + 0x00050006,0x0000010a,0x00000000,0x73776f72,0x00000000,0x00040006,0x0000010a,0x00000001, + 0x0000004e,0x00060006,0x0000010a,0x00000002,0x75706e69,0x72745374,0x00656469,0x00070006, + 0x0000010a,0x00000003,0x7074756f,0x74537475,0x65646972,0x00000000,0x00030005,0x0000010c, + 0x00006370,0x00030005,0x0000011f,0x00000074,0x00030005,0x00000129,0x0000626d,0x00040005, + 0x0000012b,0x75706e49,0x00004274,0x00040006,0x0000012b,0x00000000,0x00000062,0x00030005, + 0x0000012d,0x00000000,0x00030005,0x00000146,0x00000074,0x00040005,0x00000154,0x656c6974, + 0x00000043,0x00030005,0x00000162,0x00000069,0x00030005,0x0000016c,0x00000072,0x00030005, + 0x0000016f,0x00000063,0x00030005,0x00000172,0x00776f72,0x00040005,0x00000185,0x65646e69, + 0x00000078,0x00040005,0x0000018d,0x756c6176,0x00000065,0x00040005,0x00000193,0x47414c46, + 0x00000053,0x00050005,0x0000019b,0x7074754f,0x6c467475,0x0074616f,0x00050006,0x0000019b, + 0x00000000,0x3374756f,0x00000032,0x00030005,0x0000019d,0x00000000,0x00050005,0x000001aa, + 0x7074754f,0x34457475,0x00000000,0x00050006,0x000001aa,0x00000000,0x3874756f,0x00000000, + 0x00030005,0x000001ac,0x00000000,0x00040005,0x000001ae,0x61726170,0x0000006d,0x00040005, + 0x000001b1,0x61726170,0x0000006d,0x00050005,0x000001b8,0x7074754f,0x61487475,0x0000666c, + 0x00050006,0x000001b8,0x00000000,0x3174756f,0x00000036,0x00030005,0x000001ba,0x00000000, + 0x00040005,0x000001c4,0x61726170,0x0000006d,0x00040005,0x000001c7,0x61726170,0x0000006d, + 0x00040047,0x000000c7,0x0000000b,0x00000028,0x00030047,0x000000ca,0x00000000,0x00040047, + 0x000000ca,0x0000000b,0x00000029,0x00030047,0x000000cb,0x00000000,0x00040047,0x000000cf, + 0x0000000b,0x0000001a,0x00040047,0x000000e0,0x00000001,0x00000001,0x00040047,0x000000ff, + 0x00000001,0x00000000,0x00040047,0x00000104,0x00000006,0x00000002,0x00030047,0x00000105, + 0x00000002,0x00040048,0x00000105,0x00000000,0x00000018,0x00050048,0x00000105,0x00000000, + 0x00000023,0x00000000,0x00030047,0x00000107,0x00000018,0x00040047,0x00000107,0x00000021, + 0x00000000,0x00040047,0x00000107,0x00000022,0x00000000,0x00030047,0x0000010a,0x00000002, + 0x00050048,0x0000010a,0x00000000,0x00000023,0x00000000,0x00050048,0x0000010a,0x00000001, + 0x00000023,0x00000004,0x00050048,0x0000010a,0x00000002,0x00000023,0x00000008,0x00050048, + 0x0000010a,0x00000003,0x00000023,0x0000000c,0x00040047,0x0000012a,0x00000006,0x00000002, + 0x00030047,0x0000012b,0x00000002,0x00040048,0x0000012b,0x00000000,0x00000018,0x00050048, + 0x0000012b,0x00000000,0x00000023,0x00000000,0x00030047,0x0000012d,0x00000018,0x00040047, + 0x0000012d,0x00000021,0x00000001,0x00040047,0x0000012d,0x00000022,0x00000000,0x00040047, + 0x00000193,0x00000001,0x00000002,0x00040047,0x0000019a,0x00000006,0x00000004,0x00030047, + 0x0000019b,0x00000002,0x00040048,0x0000019b,0x00000000,0x00000019,0x00050048,0x0000019b, + 0x00000000,0x00000023,0x00000000,0x00030047,0x0000019d,0x00000019,0x00040047,0x0000019d, + 0x00000021,0x00000007,0x00040047,0x0000019d,0x00000022,0x00000000,0x00040047,0x000001a9, + 0x00000006,0x00000001,0x00030047,0x000001aa,0x00000002,0x00040048,0x000001aa,0x00000000, + 0x00000019,0x00050048,0x000001aa,0x00000000,0x00000023,0x00000000,0x00030047,0x000001ac, + 0x00000019,0x00040047,0x000001ac,0x00000021,0x00000005,0x00040047,0x000001ac,0x00000022, + 0x00000000,0x00040047,0x000001b7,0x00000006,0x00000002,0x00030047,0x000001b8,0x00000002, + 0x00040048,0x000001b8,0x00000000,0x00000019,0x00050048,0x000001b8,0x00000000,0x00000023, + 0x00000000,0x00030047,0x000001ba,0x00000019,0x00040047,0x000001ba,0x00000021,0x00000002, + 0x00040047,0x000001ba,0x00000022,0x00000000,0x00020013,0x00000002,0x00030021,0x00000003, + 0x00000002,0x00030016,0x00000006,0x00000010,0x00040020,0x00000007,0x00000007,0x00000006, + 0x00040015,0x00000008,0x00000020,0x00000000,0x00040021,0x00000009,0x00000008,0x00000007, + 0x00040020,0x0000000d,0x00000007,0x00000008,0x00050021,0x0000000e,0x00000008,0x0000000d, + 0x0000000d,0x00040021,0x00000013,0x00000008,0x0000000d,0x00040015,0x00000018,0x00000010, + 0x00000000,0x0004002b,0x00000008,0x00000022,0x00000001,0x00020014,0x0000002f,0x0004002b, + 0x00000008,0x0000003d,0x00000000,0x00040020,0x00000045,0x00000007,0x0000002f,0x0004002b, + 0x00000008,0x00000048,0x00007c00,0x0004002b,0x00000008,0x0000004e,0x000003ff,0x0004002b, + 0x00000008,0x00000057,0x00007fff,0x0004002b,0x00000008,0x0000005d,0x00000008,0x0004002b, + 0x00000008,0x0000005f,0x00000080,0x0004002b,0x00000008,0x00000064,0x00008000,0x0004002b, + 0x00000008,0x0000006a,0x0000000a,0x0004002b,0x00000008,0x0000006c,0x0000001f,0x0004002b, + 0x00000008,0x00000076,0x0000007e,0x0004002b,0x00000008,0x00000084,0x00000400,0x0004002b, + 0x00000008,0x0000008e,0x0000000f,0x0004002b,0x00000008,0x00000090,0x00000010,0x0004002b, + 0x00000008,0x0000009f,0x00000007,0x0004002b,0x00000008,0x000000b2,0x00000006,0x0004002b, + 0x00000008,0x000000bb,0x00000003,0x00040020,0x000000c6,0x00000001,0x00000008,0x0004003b, + 0x000000c6,0x000000c7,0x00000001,0x0004003b,0x000000c6,0x000000ca,0x00000001,0x00040017, + 0x000000cd,0x00000008,0x00000003,0x00040020,0x000000ce,0x00000001,0x000000cd,0x0004003b, + 0x000000ce,0x000000cf,0x00000001,0x0004002b,0x00000008,0x000000d2,0x00000002,0x0004002b, + 0x00000008,0x000000d5,0x0000ffff,0x0004002b,0x00000008,0x000000d8,0x00000040,0x00040032, + 0x00000008,0x000000e0,0x00000020,0x00060034,0x00000008,0x000000e9,0x00000086,0x000000e0, + 0x00000090,0x00071168,0x000000eb,0x00000006,0x000000bb,0x00000090,0x00000090,0x000000d2, + 0x0004001c,0x000000ec,0x000000eb,0x000000e9,0x00040020,0x000000ed,0x00000007,0x000000ec, + 0x0004002b,0x00000006,0x000000f0,0x00000000,0x0004002c,0x000000eb,0x000000f1,0x000000f0, + 0x00040020,0x000000f2,0x00000007,0x000000eb,0x00040015,0x000000f5,0x00000020,0x00000001, + 0x0004002b,0x000000f5,0x000000f6,0x00000001,0x00040032,0x00000008,0x000000ff,0x00000010, + 0x00071168,0x00000101,0x00000006,0x000000bb,0x00000090,0x00000090,0x0000003d,0x00040020, + 0x00000102,0x00000007,0x00000101,0x0003001d,0x00000104,0x00000006,0x0003001e,0x00000105, + 0x00000104,0x00040020,0x00000106,0x0000000c,0x00000105,0x0004003b,0x00000106,0x00000107, + 0x0000000c,0x0004002b,0x000000f5,0x00000108,0x00000000,0x0006001e,0x0000010a,0x00000008, + 0x00000008,0x00000008,0x00000008,0x00040020,0x0000010b,0x00000009,0x0000010a,0x0004003b, + 0x0000010b,0x0000010c,0x00000009,0x0004002b,0x000000f5,0x0000010d,0x00000002,0x00040020, + 0x0000010e,0x00000009,0x00000008,0x00040020,0x00000114,0x0000000c,0x00000006,0x00071168, + 0x00000127,0x00000006,0x000000bb,0x00000090,0x00000090,0x00000022,0x00040020,0x00000128, + 0x00000007,0x00000127,0x0003001d,0x0000012a,0x00000006,0x0003001e,0x0000012b,0x0000012a, + 0x00040020,0x0000012c,0x0000000c,0x0000012b,0x0004003b,0x0000012c,0x0000012d,0x0000000c, + 0x00060034,0x00000008,0x00000151,0x00000084,0x000000d8,0x000000e0,0x0004001c,0x00000152, + 0x00000006,0x00000151,0x00040020,0x00000153,0x00000004,0x00000152,0x0004003b,0x00000153, + 0x00000154,0x00000004,0x00040020,0x00000159,0x00000004,0x00000006,0x0004002b,0x00000008, + 0x00000161,0x00000108,0x00060034,0x00000008,0x0000016a,0x00000084,0x00000090,0x000000e0, + 0x0004002b,0x000000f5,0x00000187,0x00000003,0x00040032,0x00000008,0x00000193,0x00000000, + 0x0004002b,0x00000008,0x00000194,0x00000100,0x00060034,0x00000008,0x00000195,0x000000c7, + 0x00000193,0x00000194,0x00060034,0x0000002f,0x00000196,0x000000ab,0x00000195,0x0000003d, + 0x00030016,0x00000199,0x00000020,0x0003001d,0x0000019a,0x00000199,0x0003001e,0x0000019b, + 0x0000019a,0x00040020,0x0000019c,0x0000000c,0x0000019b,0x0004003b,0x0000019c,0x0000019d, + 0x0000000c,0x00040020,0x000001a1,0x0000000c,0x00000199,0x00060034,0x00000008,0x000001a4, + 0x000000c7,0x00000193,0x00000090,0x00060034,0x0000002f,0x000001a5,0x000000ab,0x000001a4, + 0x0000003d,0x00040015,0x000001a8,0x00000008,0x00000000,0x0003001d,0x000001a9,0x000001a8, + 0x0003001e,0x000001aa,0x000001a9,0x00040020,0x000001ab,0x0000000c,0x000001aa,0x0004003b, + 0x000001ab,0x000001ac,0x0000000c,0x00040020,0x000001b4,0x0000000c,0x000001a8,0x0003001d, + 0x000001b7,0x00000006,0x0003001e,0x000001b8,0x000001b7,0x00040020,0x000001b9,0x0000000c, + 0x000001b8,0x0004003b,0x000001b9,0x000001ba,0x0000000c,0x0004002b,0x00000008,0x000001be, + 0x00000020,0x00060034,0x00000008,0x000001bf,0x000000c7,0x00000193,0x000001be,0x00060034, + 0x0000002f,0x000001c0,0x000000ab,0x000001bf,0x0000003d,0x0006002c,0x000000cd,0x000001cd, + 0x0000005f,0x00000022,0x00000022,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003, + 0x000200f8,0x00000005,0x0004003b,0x0000000d,0x000000c5,0x00000007,0x0004003b,0x0000000d, + 0x000000c9,0x00000007,0x0004003b,0x0000000d,0x000000cc,0x00000007,0x0004003b,0x0000000d, + 0x000000dd,0x00000007,0x0004003b,0x0000000d,0x000000e2,0x00000007,0x0004003b,0x000000ed, + 0x000000ee,0x00000007,0x0004003b,0x0000000d,0x000000f8,0x00000007,0x0004003b,0x00000102, + 0x00000103,0x00000007,0x0004003b,0x0000000d,0x0000011f,0x00000007,0x0004003b,0x00000128, + 0x00000129,0x00000007,0x0004003b,0x0000000d,0x00000146,0x00000007,0x0004003b,0x0000000d, + 0x00000162,0x00000007,0x0004003b,0x0000000d,0x0000016c,0x00000007,0x0004003b,0x0000000d, + 0x0000016f,0x00000007,0x0004003b,0x0000000d,0x00000172,0x00000007,0x0004003b,0x0000000d, + 0x00000185,0x00000007,0x0004003b,0x00000007,0x0000018d,0x00000007,0x0004003b,0x00000007, + 0x000001ae,0x00000007,0x0004003b,0x0000000d,0x000001b1,0x00000007,0x0004003b,0x00000007, + 0x000001c4,0x00000007,0x0004003b,0x0000000d,0x000001c7,0x00000007,0x0004003d,0x00000008, + 0x000000c8,0x000000c7,0x0003003e,0x000000c5,0x000000c8,0x0004003d,0x00000008,0x000000cb, + 0x000000ca,0x0003003e,0x000000c9,0x000000cb,0x00050041,0x000000c6,0x000000d0,0x000000cf, + 0x00000022,0x0004003d,0x00000008,0x000000d1,0x000000d0,0x00050041,0x000000c6,0x000000d3, + 0x000000cf,0x000000d2,0x0004003d,0x00000008,0x000000d4,0x000000d3,0x00050084,0x00000008, + 0x000000d6,0x000000d4,0x000000d5,0x00050080,0x00000008,0x000000d7,0x000000d1,0x000000d6, + 0x00050084,0x00000008,0x000000d9,0x000000d7,0x000000d8,0x0004003d,0x00000008,0x000000da, + 0x000000c5,0x00050084,0x00000008,0x000000db,0x000000da,0x00000090,0x00050080,0x00000008, + 0x000000dc,0x000000d9,0x000000db,0x0003003e,0x000000cc,0x000000dc,0x0004003d,0x00000008, + 0x000000de,0x000000c5,0x00050084,0x00000008,0x000000df,0x000000de,0x00000090,0x00050084, + 0x00000008,0x000000e1,0x000000df,0x000000e0,0x0003003e,0x000000dd,0x000000e1,0x0003003e, + 0x000000e2,0x0000003d,0x000200f9,0x000000e3,0x000200f8,0x000000e3,0x000400f6,0x000000e5, + 0x000000e6,0x00000000,0x000200f9,0x000000e7,0x000200f8,0x000000e7,0x0004003d,0x00000008, + 0x000000e8,0x000000e2,0x000500b0,0x0000002f,0x000000ea,0x000000e8,0x000000e9,0x000400fa, + 0x000000ea,0x000000e4,0x000000e5,0x000200f8,0x000000e4,0x0004003d,0x00000008,0x000000ef, + 0x000000e2,0x00050041,0x000000f2,0x000000f3,0x000000ee,0x000000ef,0x0003003e,0x000000f3, + 0x000000f1,0x000200f9,0x000000e6,0x000200f8,0x000000e6,0x0004003d,0x00000008,0x000000f4, + 0x000000e2,0x00050080,0x00000008,0x000000f7,0x000000f4,0x000000f6,0x0003003e,0x000000e2, + 0x000000f7,0x000200f9,0x000000e3,0x000200f8,0x000000e5,0x0003003e,0x000000f8,0x0000003d, + 0x000200f9,0x000000f9,0x000200f8,0x000000f9,0x000400f6,0x000000fb,0x000000fc,0x00000000, + 0x000200f9,0x000000fd,0x000200f8,0x000000fd,0x0004003d,0x00000008,0x000000fe,0x000000f8, + 0x000500b0,0x0000002f,0x00000100,0x000000fe,0x000000ff,0x000400fa,0x00000100,0x000000fa, + 0x000000fb,0x000200f8,0x000000fa,0x0004003d,0x00000008,0x00000109,0x000000cc,0x00050041, + 0x0000010e,0x0000010f,0x0000010c,0x0000010d,0x0004003d,0x00000008,0x00000110,0x0000010f, + 0x00050084,0x00000008,0x00000111,0x00000109,0x00000110,0x0004003d,0x00000008,0x00000112, + 0x000000f8,0x00050080,0x00000008,0x00000113,0x00000111,0x00000112,0x00060041,0x00000114, + 0x00000115,0x00000107,0x00000108,0x00000113,0x0004003d,0x00000008,0x00000116,0x000000cc, + 0x00050041,0x0000010e,0x00000117,0x0000010c,0x0000010d,0x0004003d,0x00000008,0x00000118, + 0x00000117,0x00050084,0x00000008,0x00000119,0x00000116,0x00000118,0x0004003d,0x00000008, + 0x0000011a,0x000000f8,0x00050080,0x00000008,0x0000011b,0x00000119,0x0000011a,0x00050041, + 0x0000010e,0x0000011c,0x0000010c,0x0000010d,0x0004003d,0x00000008,0x0000011d,0x0000011c, + 0x00071169,0x00000101,0x0000011e,0x00000115,0x00000108,0x0000011d,0x00000000,0x0003003e, + 0x00000103,0x0000011e,0x0003003e,0x0000011f,0x0000003d,0x000200f9,0x00000120,0x000200f8, + 0x00000120,0x000400f6,0x00000122,0x00000123,0x00000000,0x000200f9,0x00000124,0x000200f8, + 0x00000124,0x0004003d,0x00000008,0x00000125,0x0000011f,0x000500b0,0x0000002f,0x00000126, + 0x00000125,0x000000e9,0x000400fa,0x00000126,0x00000121,0x00000122,0x000200f8,0x00000121, + 0x0004003d,0x00000008,0x0000012e,0x000000f8,0x00050084,0x00000008,0x0000012f,0x0000012e, + 0x000000e0,0x0004003d,0x00000008,0x00000130,0x0000011f,0x00050084,0x00000008,0x00000131, + 0x00000130,0x00000090,0x00050080,0x00000008,0x00000132,0x0000012f,0x00000131,0x00060041, + 0x00000114,0x00000133,0x0000012d,0x00000108,0x00000132,0x0004003d,0x00000008,0x00000134, + 0x000000f8,0x00050084,0x00000008,0x00000135,0x00000134,0x000000e0,0x0004003d,0x00000008, + 0x00000136,0x0000011f,0x00050084,0x00000008,0x00000137,0x00000136,0x00000090,0x00050080, + 0x00000008,0x00000138,0x00000135,0x00000137,0x00071169,0x00000127,0x00000139,0x00000133, + 0x00000108,0x000000e0,0x00000000,0x0003003e,0x00000129,0x00000139,0x0004003d,0x00000008, + 0x0000013a,0x0000011f,0x0004003d,0x00000101,0x0000013b,0x00000103,0x0004003d,0x00000127, + 0x0000013c,0x00000129,0x0004003d,0x00000008,0x0000013d,0x0000011f,0x00050041,0x000000f2, + 0x0000013e,0x000000ee,0x0000013d,0x0004003d,0x000000eb,0x0000013f,0x0000013e,0x0006116b, + 0x000000eb,0x00000140,0x0000013b,0x0000013c,0x0000013f,0x00050041,0x000000f2,0x00000141, + 0x000000ee,0x0000013a,0x0003003e,0x00000141,0x00000140,0x000200f9,0x00000123,0x000200f8, + 0x00000123,0x0004003d,0x00000008,0x00000142,0x0000011f,0x00050080,0x00000008,0x00000143, + 0x00000142,0x000000f6,0x0003003e,0x0000011f,0x00000143,0x000200f9,0x00000120,0x000200f8, + 0x00000122,0x000200f9,0x000000fc,0x000200f8,0x000000fc,0x0004003d,0x00000008,0x00000144, + 0x000000f8,0x00050080,0x00000008,0x00000145,0x00000144,0x00000090,0x0003003e,0x000000f8, + 0x00000145,0x000200f9,0x000000f9,0x000200f8,0x000000fb,0x0003003e,0x00000146,0x0000003d, + 0x000200f9,0x00000147,0x000200f8,0x00000147,0x000400f6,0x00000149,0x0000014a,0x00000000, + 0x000200f9,0x0000014b,0x000200f8,0x0000014b,0x0004003d,0x00000008,0x0000014c,0x00000146, + 0x000500b0,0x0000002f,0x0000014d,0x0000014c,0x000000e9,0x000400fa,0x0000014d,0x00000148, + 0x00000149,0x000200f8,0x00000148,0x0004003d,0x00000008,0x0000014e,0x00000146,0x00050041, + 0x000000f2,0x0000014f,0x000000ee,0x0000014e,0x0004003d,0x000000eb,0x00000150,0x0000014f, + 0x0004003d,0x00000008,0x00000155,0x000000dd,0x0004003d,0x00000008,0x00000156,0x00000146, + 0x00050084,0x00000008,0x00000157,0x00000156,0x00000090,0x00050080,0x00000008,0x00000158, + 0x00000155,0x00000157,0x00050041,0x00000159,0x0000015a,0x00000154,0x00000158,0x0004003d, + 0x00000008,0x0000015b,0x000000dd,0x0004003d,0x00000008,0x0000015c,0x00000146,0x00050084, + 0x00000008,0x0000015d,0x0000015c,0x00000090,0x00050080,0x00000008,0x0000015e,0x0000015b, + 0x0000015d,0x0007116a,0x0000015a,0x00000150,0x00000108,0x000000e0,0x00000028,0x000000d2, + 0x000200f9,0x0000014a,0x000200f8,0x0000014a,0x0004003d,0x00000008,0x0000015f,0x00000146, + 0x00050080,0x00000008,0x00000160,0x0000015f,0x000000f6,0x0003003e,0x00000146,0x00000160, + 0x000200f9,0x00000147,0x000200f8,0x00000149,0x000400e0,0x000000d2,0x000000d2,0x00000161, + 0x0004003d,0x00000008,0x00000163,0x000000c9,0x0003003e,0x00000162,0x00000163,0x000200f9, + 0x00000164,0x000200f8,0x00000164,0x000400f6,0x00000166,0x00000167,0x00000000,0x000200f9, + 0x00000168,0x000200f8,0x00000168,0x0004003d,0x00000008,0x00000169,0x00000162,0x000500b0, + 0x0000002f,0x0000016b,0x00000169,0x0000016a,0x000400fa,0x0000016b,0x00000165,0x00000166, + 0x000200f8,0x00000165,0x0004003d,0x00000008,0x0000016d,0x00000162,0x00050086,0x00000008, + 0x0000016e,0x0000016d,0x000000e0,0x0003003e,0x0000016c,0x0000016e,0x0004003d,0x00000008, + 0x00000170,0x00000162,0x00050089,0x00000008,0x00000171,0x00000170,0x000000e0,0x0003003e, + 0x0000016f,0x00000171,0x0004003d,0x00000008,0x00000173,0x000000cc,0x0004003d,0x00000008, + 0x00000174,0x0000016c,0x00050080,0x00000008,0x00000175,0x00000173,0x00000174,0x0003003e, + 0x00000172,0x00000175,0x0004003d,0x00000008,0x00000176,0x00000172,0x00050041,0x0000010e, + 0x00000177,0x0000010c,0x00000108,0x0004003d,0x00000008,0x00000178,0x00000177,0x000500ae, + 0x0000002f,0x00000179,0x00000176,0x00000178,0x000400a8,0x0000002f,0x0000017a,0x00000179, + 0x000300f7,0x0000017c,0x00000000,0x000400fa,0x0000017a,0x0000017b,0x0000017c,0x000200f8, + 0x0000017b,0x0004003d,0x00000008,0x0000017d,0x0000016f,0x00050041,0x0000010e,0x0000017e, + 0x0000010c,0x000000f6,0x0004003d,0x00000008,0x0000017f,0x0000017e,0x000500ae,0x0000002f, + 0x00000180,0x0000017d,0x0000017f,0x000200f9,0x0000017c,0x000200f8,0x0000017c,0x000700f5, + 0x0000002f,0x00000181,0x00000179,0x00000165,0x00000180,0x0000017b,0x000300f7,0x00000183, + 0x00000000,0x000400fa,0x00000181,0x00000182,0x00000183,0x000200f8,0x00000182,0x000200f9, + 0x00000167,0x000200f8,0x00000183,0x0004003d,0x00000008,0x00000186,0x00000172,0x00050041, + 0x0000010e,0x00000188,0x0000010c,0x00000187,0x0004003d,0x00000008,0x00000189,0x00000188, + 0x00050084,0x00000008,0x0000018a,0x00000186,0x00000189,0x0004003d,0x00000008,0x0000018b, + 0x0000016f,0x00050080,0x00000008,0x0000018c,0x0000018a,0x0000018b,0x0003003e,0x00000185, + 0x0000018c,0x0004003d,0x00000008,0x0000018e,0x000000dd,0x0004003d,0x00000008,0x0000018f, + 0x00000162,0x00050080,0x00000008,0x00000190,0x0000018e,0x0000018f,0x00050041,0x00000159, + 0x00000191,0x00000154,0x00000190,0x0006003d,0x00000006,0x00000192,0x00000191,0x00000030, + 0x000000d2,0x0003003e,0x0000018d,0x00000192,0x000300f7,0x00000198,0x00000000,0x000400fa, + 0x00000196,0x00000197,0x000001a3,0x000200f8,0x00000197,0x0004003d,0x00000008,0x0000019e, + 0x00000185,0x0004003d,0x00000006,0x0000019f,0x0000018d,0x00040073,0x00000199,0x000001a0, + 0x0000019f,0x00060041,0x000001a1,0x000001a2,0x0000019d,0x00000108,0x0000019e,0x0003003e, + 0x000001a2,0x000001a0,0x000200f9,0x00000198,0x000200f8,0x000001a3,0x000300f7,0x000001a7, + 0x00000000,0x000400fa,0x000001a5,0x000001a6,0x000001b6,0x000200f8,0x000001a6,0x0004003d, + 0x00000008,0x000001ad,0x00000185,0x0004003d,0x00000006,0x000001af,0x0000018d,0x0003003e, + 0x000001ae,0x000001af,0x00050039,0x00000008,0x000001b0,0x0000000b,0x000001ae,0x0003003e, + 0x000001b1,0x000001b0,0x00050039,0x00000008,0x000001b2,0x00000015,0x000001b1,0x00040071, + 0x000001a8,0x000001b3,0x000001b2,0x00060041,0x000001b4,0x000001b5,0x000001ac,0x00000108, + 0x000001ad,0x0003003e,0x000001b5,0x000001b3,0x000200f9,0x000001a7,0x000200f8,0x000001b6, + 0x0004003d,0x00000008,0x000001bb,0x00000185,0x0004003d,0x00000006,0x000001bc,0x0000018d, + 0x00060041,0x00000114,0x000001bd,0x000001ba,0x00000108,0x000001bb,0x0003003e,0x000001bd, + 0x000001bc,0x000200f9,0x000001a7,0x000200f8,0x000001a7,0x000200f9,0x00000198,0x000200f8, + 0x00000198,0x000300f7,0x000001c2,0x00000000,0x000400fa,0x000001c0,0x000001c1,0x000001c2, + 0x000200f8,0x000001c1,0x0004003d,0x00000008,0x000001c3,0x00000185,0x0004003d,0x00000006, + 0x000001c5,0x0000018d,0x0003003e,0x000001c4,0x000001c5,0x00050039,0x00000008,0x000001c6, + 0x0000000b,0x000001c4,0x0003003e,0x000001c7,0x000001c6,0x00050039,0x00000008,0x000001c8, + 0x00000015,0x000001c7,0x00040071,0x000001a8,0x000001c9,0x000001c8,0x00060041,0x000001b4, + 0x000001ca,0x000001ac,0x00000108,0x000001c3,0x0003003e,0x000001ca,0x000001c9,0x000200f9, + 0x000001c2,0x000200f8,0x000001c2,0x000200f9,0x00000167,0x000200f8,0x00000167,0x0004003d, + 0x00000008,0x000001cb,0x00000162,0x00050080,0x00000008,0x000001cc,0x000001cb,0x000001be, + 0x0003003e,0x00000162,0x000001cc,0x000200f9,0x00000164,0x000200f8,0x00000166,0x000100fd, + 0x00010038,0x00050036,0x00000008,0x0000000b,0x00000000,0x00000009,0x00030037,0x00000007, + 0x0000000a,0x000200f8,0x0000000c,0x0004003d,0x00000006,0x00000017,0x0000000a,0x0004007c, + 0x00000018,0x00000019,0x00000017,0x00040071,0x00000008,0x0000001a,0x00000019,0x000200fe, + 0x0000001a,0x00010038,0x00050036,0x00000008,0x00000011,0x00000000,0x0000000e,0x00030037, + 0x0000000d,0x0000000f,0x00030037,0x0000000d,0x00000010,0x000200f8,0x00000012,0x0004003b, + 0x0000000d,0x0000001d,0x00000007,0x0004003b,0x0000000d,0x00000021,0x00000007,0x0004003b, + 0x0000000d,0x00000026,0x00000007,0x0004003b,0x0000000d,0x0000002a,0x00000007,0x0004003d, + 0x00000008,0x0000001e,0x0000000f,0x0004003d,0x00000008,0x0000001f,0x00000010,0x000500c2, + 0x00000008,0x00000020,0x0000001e,0x0000001f,0x0003003e,0x0000001d,0x00000020,0x0004003d, + 0x00000008,0x00000023,0x00000010,0x000500c4,0x00000008,0x00000024,0x00000022,0x00000023, + 0x00050082,0x00000008,0x00000025,0x00000024,0x00000022,0x0003003e,0x00000021,0x00000025, + 0x0004003d,0x00000008,0x00000027,0x0000000f,0x0004003d,0x00000008,0x00000028,0x00000021, + 0x000500c7,0x00000008,0x00000029,0x00000027,0x00000028,0x0003003e,0x00000026,0x00000029, + 0x0004003d,0x00000008,0x0000002b,0x00000010,0x00050082,0x00000008,0x0000002c,0x0000002b, + 0x00000022,0x000500c4,0x00000008,0x0000002d,0x00000022,0x0000002c,0x0003003e,0x0000002a, + 0x0000002d,0x0004003d,0x00000008,0x0000002e,0x0000001d,0x0004003d,0x00000008,0x00000030, + 0x00000026,0x0004003d,0x00000008,0x00000031,0x0000002a,0x000500ac,0x0000002f,0x00000032, + 0x00000030,0x00000031,0x000400a8,0x0000002f,0x00000033,0x00000032,0x000300f7,0x00000035, + 0x00000000,0x000400fa,0x00000033,0x00000034,0x00000035,0x000200f8,0x00000034,0x0004003d, + 0x00000008,0x00000036,0x00000026,0x0004003d,0x00000008,0x00000037,0x0000002a,0x000500aa, + 0x0000002f,0x00000038,0x00000036,0x00000037,0x000300f7,0x0000003a,0x00000000,0x000400fa, + 0x00000038,0x00000039,0x0000003a,0x000200f8,0x00000039,0x0004003d,0x00000008,0x0000003b, + 0x0000001d,0x000500c7,0x00000008,0x0000003c,0x0000003b,0x00000022,0x000500ab,0x0000002f, + 0x0000003e,0x0000003c,0x0000003d,0x000200f9,0x0000003a,0x000200f8,0x0000003a,0x000700f5, + 0x0000002f,0x0000003f,0x00000038,0x00000034,0x0000003e,0x00000039,0x000200f9,0x00000035, + 0x000200f8,0x00000035,0x000700f5,0x0000002f,0x00000040,0x00000032,0x00000012,0x0000003f, + 0x0000003a,0x000600a9,0x00000008,0x00000041,0x00000040,0x00000022,0x0000003d,0x00050080, + 0x00000008,0x00000042,0x0000002e,0x00000041,0x000200fe,0x00000042,0x00010038,0x00050036, + 0x00000008,0x00000015,0x00000000,0x00000013,0x00030037,0x0000000d,0x00000014,0x000200f8, + 0x00000016,0x0004003b,0x00000045,0x00000046,0x00000007,0x0004003b,0x0000000d,0x00000062, + 0x00000007,0x0004003b,0x0000000d,0x00000068,0x00000007,0x0004003b,0x0000000d,0x0000006e, + 0x00000007,0x0004003b,0x0000000d,0x00000075,0x00000007,0x0004003b,0x0000000d,0x0000007c, + 0x00000007,0x0004003b,0x0000000d,0x0000007f,0x00000007,0x0004003b,0x0000000d,0x00000088, + 0x00000007,0x0004003b,0x0000000d,0x0000008b,0x00000007,0x0004003b,0x0000000d,0x00000094, + 0x00000007,0x0004003b,0x0000000d,0x00000096,0x00000007,0x0004003b,0x0000000d,0x0000009b, + 0x00000007,0x0004003b,0x0000000d,0x0000009e,0x00000007,0x0004003b,0x0000000d,0x000000a0, + 0x00000007,0x0004003b,0x0000000d,0x000000a2,0x00000007,0x0004003b,0x0000000d,0x000000b6, + 0x00000007,0x0004003d,0x00000008,0x00000047,0x00000014,0x000500c7,0x00000008,0x00000049, + 0x00000047,0x00000048,0x000500aa,0x0000002f,0x0000004a,0x00000049,0x00000048,0x000300f7, + 0x0000004c,0x00000000,0x000400fa,0x0000004a,0x0000004b,0x0000004c,0x000200f8,0x0000004b, + 0x0004003d,0x00000008,0x0000004d,0x00000014,0x000500c7,0x00000008,0x0000004f,0x0000004d, + 0x0000004e,0x000500ab,0x0000002f,0x00000050,0x0000004f,0x0000003d,0x000200f9,0x0000004c, + 0x000200f8,0x0000004c,0x000700f5,0x0000002f,0x00000051,0x0000004a,0x00000016,0x00000050, + 0x0000004b,0x0003003e,0x00000046,0x00000051,0x0004003d,0x0000002f,0x00000052,0x00000046, + 0x000300f7,0x00000054,0x00000000,0x000400fa,0x00000052,0x00000053,0x00000054,0x000200f8, + 0x00000053,0x000200fe,0x0000003d,0x000200f8,0x00000054,0x0004003d,0x00000008,0x00000056, + 0x00000014,0x000500c7,0x00000008,0x00000058,0x00000056,0x00000057,0x000500aa,0x0000002f, + 0x00000059,0x00000058,0x0000003d,0x000300f7,0x0000005b,0x00000000,0x000400fa,0x00000059, + 0x0000005a,0x0000005b,0x000200f8,0x0000005a,0x0004003d,0x00000008,0x0000005c,0x00000014, + 0x000500c2,0x00000008,0x0000005e,0x0000005c,0x0000005d,0x000500c7,0x00000008,0x00000060, + 0x0000005e,0x0000005f,0x000200fe,0x00000060,0x000200f8,0x0000005b,0x0004003d,0x00000008, + 0x00000063,0x00000014,0x000500c7,0x00000008,0x00000065,0x00000063,0x00000064,0x000500ab, + 0x0000002f,0x00000066,0x00000065,0x0000003d,0x000600a9,0x00000008,0x00000067,0x00000066, + 0x0000005f,0x0000003d,0x0003003e,0x00000062,0x00000067,0x0004003d,0x00000008,0x00000069, + 0x00000014,0x000500c2,0x00000008,0x0000006b,0x00000069,0x0000006a,0x000500c7,0x00000008, + 0x0000006d,0x0000006b,0x0000006c,0x0003003e,0x00000068,0x0000006d,0x0004003d,0x00000008, + 0x0000006f,0x00000014,0x000500c7,0x00000008,0x00000070,0x0000006f,0x0000004e,0x0003003e, + 0x0000006e,0x00000070,0x0004003d,0x00000008,0x00000071,0x00000068,0x000500aa,0x0000002f, + 0x00000072,0x00000071,0x0000006c,0x000300f7,0x00000074,0x00000000,0x000400fa,0x00000072, + 0x00000073,0x00000077,0x000200f8,0x00000073,0x0003003e,0x00000075,0x00000076,0x000200f9, + 0x00000074,0x000200f8,0x00000077,0x0004003d,0x00000008,0x00000078,0x00000068,0x000500b2, + 0x0000002f,0x00000079,0x00000078,0x0000005d,0x000300f7,0x0000007b,0x00000000,0x000400fa, + 0x00000079,0x0000007a,0x0000009a,0x000200f8,0x0000007a,0x0004003d,0x00000008,0x0000007d, + 0x00000068,0x000500aa,0x0000002f,0x0000007e,0x0000007d,0x0000003d,0x000300f7,0x00000081, + 0x00000000,0x000400fa,0x0000007e,0x00000080,0x00000083,0x000200f8,0x00000080,0x0004003d, + 0x00000008,0x00000082,0x0000006e,0x0003003e,0x0000007f,0x00000082,0x000200f9,0x00000081, + 0x000200f8,0x00000083,0x0004003d,0x00000008,0x00000085,0x0000006e,0x00050080,0x00000008, + 0x00000086,0x00000084,0x00000085,0x0003003e,0x0000007f,0x00000086,0x000200f9,0x00000081, + 0x000200f8,0x00000081,0x0004003d,0x00000008,0x00000087,0x0000007f,0x0003003e,0x0000007c, + 0x00000087,0x0004003d,0x00000008,0x00000089,0x00000068,0x000500aa,0x0000002f,0x0000008a, + 0x00000089,0x0000003d,0x000300f7,0x0000008d,0x00000000,0x000400fa,0x0000008a,0x0000008c, + 0x0000008f,0x000200f8,0x0000008c,0x0003003e,0x0000008b,0x0000008e,0x000200f9,0x0000008d, + 0x000200f8,0x0000008f,0x0004003d,0x00000008,0x00000091,0x00000068,0x00050082,0x00000008, + 0x00000092,0x00000090,0x00000091,0x0003003e,0x0000008b,0x00000092,0x000200f9,0x0000008d, + 0x000200f8,0x0000008d,0x0004003d,0x00000008,0x00000093,0x0000008b,0x0003003e,0x00000088, + 0x00000093,0x0004003d,0x00000008,0x00000095,0x0000007c,0x0003003e,0x00000094,0x00000095, + 0x0004003d,0x00000008,0x00000097,0x00000088,0x0003003e,0x00000096,0x00000097,0x00060039, + 0x00000008,0x00000098,0x00000011,0x00000094,0x00000096,0x0007000c,0x00000008,0x00000099, + 0x00000001,0x00000026,0x00000098,0x0000005d,0x0003003e,0x00000075,0x00000099,0x000200f9, + 0x0000007b,0x000200f8,0x0000009a,0x0004003d,0x00000008,0x0000009c,0x00000068,0x00050082, + 0x00000008,0x0000009d,0x0000009c,0x0000005d,0x0003003e,0x0000009b,0x0000009d,0x0004003d, + 0x00000008,0x000000a1,0x0000006e,0x0003003e,0x000000a0,0x000000a1,0x0003003e,0x000000a2, + 0x0000009f,0x00060039,0x00000008,0x000000a3,0x00000011,0x000000a0,0x000000a2,0x0003003e, + 0x0000009e,0x000000a3,0x0004003d,0x00000008,0x000000a4,0x0000009e,0x000500aa,0x0000002f, + 0x000000a5,0x000000a4,0x0000005d,0x000300f7,0x000000a7,0x00000000,0x000400fa,0x000000a5, + 0x000000a6,0x000000a7,0x000200f8,0x000000a6,0x0003003e,0x0000009e,0x0000003d,0x0004003d, + 0x00000008,0x000000a8,0x0000009b,0x00050080,0x00000008,0x000000a9,0x000000a8,0x00000022, + 0x0003003e,0x0000009b,0x000000a9,0x000200f9,0x000000a7,0x000200f8,0x000000a7,0x0004003d, + 0x00000008,0x000000aa,0x0000009b,0x000500ac,0x0000002f,0x000000ab,0x000000aa,0x0000008e, + 0x000400a8,0x0000002f,0x000000ac,0x000000ab,0x000300f7,0x000000ae,0x00000000,0x000400fa, + 0x000000ac,0x000000ad,0x000000ae,0x000200f8,0x000000ad,0x0004003d,0x00000008,0x000000af, + 0x0000009b,0x000500aa,0x0000002f,0x000000b0,0x000000af,0x0000008e,0x0004003d,0x00000008, + 0x000000b1,0x0000009e,0x000500ac,0x0000002f,0x000000b3,0x000000b1,0x000000b2,0x000500a7, + 0x0000002f,0x000000b4,0x000000b0,0x000000b3,0x000200f9,0x000000ae,0x000200f8,0x000000ae, + 0x000700f5,0x0000002f,0x000000b5,0x000000ab,0x000000a7,0x000000b4,0x000000ad,0x000300f7, + 0x000000b8,0x00000000,0x000400fa,0x000000b5,0x000000b7,0x000000b9,0x000200f8,0x000000b7, + 0x0003003e,0x000000b6,0x00000076,0x000200f9,0x000000b8,0x000200f8,0x000000b9,0x0004003d, + 0x00000008,0x000000ba,0x0000009b,0x000500c4,0x00000008,0x000000bc,0x000000ba,0x000000bb, + 0x0004003d,0x00000008,0x000000bd,0x0000009e,0x000500c5,0x00000008,0x000000be,0x000000bc, + 0x000000bd,0x0003003e,0x000000b6,0x000000be,0x000200f9,0x000000b8,0x000200f8,0x000000b8, + 0x0004003d,0x00000008,0x000000bf,0x000000b6,0x0003003e,0x00000075,0x000000bf,0x000200f9, + 0x0000007b,0x000200f8,0x0000007b,0x000200f9,0x00000074,0x000200f8,0x00000074,0x0004003d, + 0x00000008,0x000000c0,0x00000062,0x0004003d,0x00000008,0x000000c1,0x00000075,0x000500c5, + 0x00000008,0x000000c2,0x000000c0,0x000000c1,0x000200fe,0x000000c2,0x00010038, +}; +inline constexpr uint32_t k_ops[] = { + 0x07230203,0x00010600,0x0008000b,0x00000325,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x00000027,0x00020011,0x00001074,0x00020011, + 0x00001151,0x0005000a,0x5f565053,0x5f545845,0x616f6c66,0x00003874,0x0006000b,0x00000001, + 0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,0x000e000f, + 0x00000005,0x00000004,0x6e69616d,0x00000000,0x000000ba,0x00000142,0x00000151,0x00000170, + 0x0000017f,0x0000019b,0x000001a0,0x00000266,0x00000273,0x00060010,0x00000004,0x00000011, + 0x00000100,0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc,0x00090004,0x455f4c47, + 0x635f5458,0x72746e6f,0x665f6c6f,0x5f776f6c,0x72747461,0x74756269,0x00007365,0x00060004, + 0x455f4c47,0x665f5458,0x74616f6c,0x6d34655f,0x00000033,0x00080004,0x455f4c47,0x735f5458, + 0x65646168,0x36315f72,0x5f746962,0x726f7473,0x00656761,0x00080004,0x455f4c47,0x735f5458, + 0x65646168,0x62385f72,0x735f7469,0x61726f74,0x00006567,0x000b0004,0x455f4c47,0x735f5458, + 0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570, + 0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f, + 0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65, + 0x74636572,0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000a, + 0x6e756f72,0x36314664,0x3b316628,0x00000000,0x00040005,0x00000009,0x756c6176,0x00000065, + 0x00070005,0x00000012,0x336d3465,0x61507748,0x76287269,0x32363166,0x0000003b,0x00040005, + 0x00000011,0x756c6176,0x00000065,0x00060005,0x00000018,0x336d3465,0x6f547748,0x28323346, + 0x003b3175,0x00040005,0x00000017,0x65646f63,0x00000000,0x00080005,0x00000021,0x53787561, + 0x656c6163,0x31752873,0x3b31753b,0x385b3166,0x00003b5d,0x00040005,0x0000001e,0x7366666f, + 0x00007465,0x00040005,0x0000001f,0x6e616863,0x006c656e,0x00030005,0x00000020,0x00000073, + 0x00070005,0x00000028,0x61706e75,0x28386b63,0x3b347576,0x385b3166,0x00003b5d,0x00040005, + 0x00000026,0x64726f77,0x00000073,0x00030005,0x00000027,0x00000076,0x00080005,0x0000002f, + 0x61706e75,0x34456b63,0x76283878,0x663b3275,0x5d385b31,0x0000003b,0x00040005,0x0000002d, + 0x65646f63,0x00000073,0x00030005,0x0000002e,0x00000076,0x00070005,0x00000033,0x6b636170, + 0x766c6148,0x28387365,0x385b3166,0x00003b5d,0x00030005,0x00000032,0x00000076,0x00060005, + 0x00000037,0x6e617571,0x657a6974,0x75762838,0x00003b34,0x00040005,0x00000036,0x766c6168, + 0x00007365,0x00040005,0x00000039,0x73746962,0x00000000,0x00040005,0x0000003c,0x6e676973, + 0x00000000,0x00050005,0x00000040,0x6e67616d,0x64757469,0x00000065,0x00040005,0x0000005a, + 0x6c616373,0x00006465,0x00030005,0x0000006b,0x0062736c,0x00040005,0x00000071,0x6e756f72, + 0x00646564,0x00040005,0x0000007f,0x61656c63,0x0000006e,0x00050005,0x0000008a,0x766e6f63, + 0x65747265,0x00000064,0x00040005,0x00000090,0x65646f63,0x00000073,0x00040005,0x000000a0, + 0x756c6176,0x00000065,0x00030005,0x000000ae,0x00000069,0x00030005,0x000000b8,0x00787541, + 0x00050006,0x000000b8,0x00000000,0x31787561,0x00000036,0x00030005,0x000000ba,0x00000000, + 0x00030005,0x000000cb,0x00000069,0x00030005,0x000000d6,0x00000070,0x00030005,0x000000ea, + 0x00000069,0x00040005,0x000000fd,0x61726170,0x0000006d,0x00030005,0x00000102,0x00000069, + 0x00030005,0x0000010a,0x00000077,0x00040005,0x00000122,0x61726170,0x0000006d,0x00040005, + 0x00000128,0x61726170,0x0000006d,0x00040005,0x00000131,0x61726170,0x0000006d,0x00040005, + 0x00000137,0x61726170,0x0000006d,0x00040005,0x0000013f,0x756f7267,0x00000070,0x00080005, + 0x00000142,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00040005, + 0x0000014f,0x68737550,0x00000000,0x00050006,0x0000014f,0x00000000,0x6e756f63,0x00000074, + 0x00060006,0x0000014f,0x00000001,0x6e616863,0x736c656e,0x00000000,0x00050006,0x0000014f, + 0x00000002,0x69576e69,0x00687464,0x00060006,0x0000014f,0x00000003,0x65486e69,0x74686769, + 0x00000000,0x00060006,0x0000014f,0x00000004,0x5774756f,0x68746469,0x00000000,0x00060006, + 0x0000014f,0x00000005,0x4874756f,0x68676965,0x00000074,0x00060006,0x0000014f,0x00000006, + 0x4f787561,0x65736666,0x00004174,0x00060006,0x0000014f,0x00000007,0x4f787561,0x65736666, + 0x00004274,0x00050006,0x0000014f,0x00000008,0x6c617564,0x00000000,0x00030005,0x00000151, + 0x00006370,0x00060005,0x00000159,0x756f7267,0x65507370,0x78695072,0x00006c65,0x00030005, + 0x0000015d,0x00000063,0x00040005,0x00000162,0x65786970,0x0000006c,0x00040005,0x00000166, + 0x45444f4d,0x00000000,0x00030005,0x0000016c,0x00000061,0x00040005,0x0000016e,0x32336e49, + 0x00000000,0x00050006,0x0000016e,0x00000000,0x32336e69,0x00003478,0x00030005,0x00000170, + 0x00000000,0x00030005,0x00000176,0x00000062,0x00040005,0x0000017d,0x3174754f,0x00000036, + 0x00050006,0x0000017d,0x00000000,0x3174756f,0x00387836,0x00030005,0x0000017f,0x00000000, + 0x00040005,0x00000199,0x3874754f,0x00000000,0x00050006,0x00000199,0x00000000,0x3874756f, + 0x00003878,0x00030005,0x0000019b,0x00000000,0x00040005,0x0000019e,0x36316e49,0x00000000, + 0x00050006,0x0000019e,0x00000000,0x36316e69,0x00003878,0x00030005,0x000001a0,0x00000000, + 0x00040005,0x000001a2,0x61726170,0x0000006d,0x00030005,0x000001ac,0x0000786f,0x00030005, + 0x000001b2,0x0000796f,0x00030005,0x000001b7,0x00007873,0x00030005,0x000001ba,0x00007973, + 0x00040005,0x000001bd,0x75736572,0x0000746c,0x00030005,0x000001d0,0x00303069,0x00030005, + 0x000001dd,0x00303169,0x00030005,0x000001eb,0x00313069,0x00030005,0x000001f9,0x00313169, + 0x00030005,0x00000208,0x00303077,0x00030005,0x0000020c,0x00303177,0x00030005,0x00000210, + 0x00313077,0x00030005,0x00000214,0x00313177,0x00030005,0x00000218,0x00000069,0x00030005, + 0x00000220,0x00706f74,0x00040005,0x0000022a,0x74746f62,0x00006d6f,0x00030005,0x00000234, + 0x006d7573,0x00040005,0x00000238,0x756c6176,0x00000065,0x00040005,0x00000243,0x61726170, + 0x0000006d,0x00030005,0x0000024b,0x0000786f,0x00030005,0x00000250,0x0000796f,0x00040005, + 0x00000255,0x72756f73,0x00006563,0x00030005,0x00000264,0x00386e49,0x00050006,0x00000264, + 0x00000000,0x78386e69,0x00000038,0x00030005,0x00000266,0x00000000,0x00030005,0x00000269, + 0x00007075,0x00040005,0x0000026a,0x61726170,0x0000006d,0x00040005,0x0000026d,0x61726170, + 0x0000006d,0x00040005,0x00000271,0x70696b53,0x00000038,0x00050006,0x00000271,0x00000000, + 0x70696b73,0x00387838,0x00030005,0x00000273,0x00000000,0x00040005,0x00000275,0x70616461, + 0x00726574,0x00040005,0x00000276,0x61726170,0x0000006d,0x00040005,0x00000279,0x61726170, + 0x0000006d,0x00040005,0x0000027d,0x6c616373,0x00004165,0x00040005,0x0000027e,0x61726170, + 0x0000006d,0x00040005,0x00000281,0x61726170,0x0000006d,0x00040005,0x00000283,0x61726170, + 0x0000006d,0x00040005,0x00000287,0x6c616373,0x00004265,0x00040005,0x00000288,0x61726170, + 0x0000006d,0x00040005,0x0000028b,0x61726170,0x0000006d,0x00040005,0x0000028d,0x61726170, + 0x0000006d,0x00030005,0x00000290,0x00000069,0x00050005,0x00000298,0x75706e69,0x6c615674, + 0x00006575,0x00040005,0x000002a0,0x61726170,0x0000006d,0x00040005,0x000002a2,0x756c6176, + 0x00000065,0x00030005,0x000002ac,0x00776172,0x00040005,0x000002ae,0x61726170,0x0000006d, + 0x00040005,0x000002b4,0x766c6168,0x00007365,0x00040005,0x000002b5,0x61726170,0x0000006d, + 0x00040005,0x000002bc,0x61726170,0x0000006d,0x00030005,0x000002c4,0x0000786f,0x00030005, + 0x000002c9,0x0000796f,0x00040005,0x000002ce,0x72756f73,0x00006563,0x00050005,0x000002de, + 0x6a6f7270,0x65746365,0x00000064,0x00040005,0x000002df,0x61726170,0x0000006d,0x00040005, + 0x000002e2,0x61726170,0x0000006d,0x00040005,0x000002e6,0x70696b73,0x00000000,0x00040005, + 0x000002e7,0x61726170,0x0000006d,0x00040005,0x000002ea,0x61726170,0x0000006d,0x00040005, + 0x000002ed,0x6c616373,0x00000065,0x00040005,0x000002ee,0x61726170,0x0000006d,0x00040005, + 0x000002f1,0x61726170,0x0000006d,0x00040005,0x000002f3,0x61726170,0x0000006d,0x00030005, + 0x000002f6,0x00000069,0x00030005,0x000002fe,0x006d7573,0x00040005,0x0000030a,0x756c6176, + 0x00000065,0x00040005,0x0000030c,0x61726170,0x0000006d,0x00040005,0x00000312,0x766c6168, + 0x00007365,0x00040005,0x00000313,0x61726170,0x0000006d,0x00040005,0x00000317,0x61726170, + 0x0000006d,0x00030047,0x0000008c,0x00001078,0x00040047,0x000000b7,0x00000006,0x00000002, + 0x00030047,0x000000b8,0x00000002,0x00040048,0x000000b8,0x00000000,0x00000018,0x00050048, + 0x000000b8,0x00000000,0x00000023,0x00000000,0x00030047,0x000000ba,0x00000018,0x00040047, + 0x000000ba,0x00000021,0x00000004,0x00040047,0x000000ba,0x00000022,0x00000000,0x00040047, + 0x00000142,0x0000000b,0x0000001c,0x00030047,0x0000014f,0x00000002,0x00050048,0x0000014f, + 0x00000000,0x00000023,0x00000000,0x00050048,0x0000014f,0x00000001,0x00000023,0x00000004, + 0x00050048,0x0000014f,0x00000002,0x00000023,0x00000008,0x00050048,0x0000014f,0x00000003, + 0x00000023,0x0000000c,0x00050048,0x0000014f,0x00000004,0x00000023,0x00000010,0x00050048, + 0x0000014f,0x00000005,0x00000023,0x00000014,0x00050048,0x0000014f,0x00000006,0x00000023, + 0x00000018,0x00050048,0x0000014f,0x00000007,0x00000023,0x0000001c,0x00050048,0x0000014f, + 0x00000008,0x00000023,0x00000020,0x00040047,0x00000166,0x00000001,0x00000000,0x00040047, + 0x0000016d,0x00000006,0x00000010,0x00030047,0x0000016e,0x00000002,0x00040048,0x0000016e, + 0x00000000,0x00000018,0x00050048,0x0000016e,0x00000000,0x00000023,0x00000000,0x00030047, + 0x00000170,0x00000018,0x00040047,0x00000170,0x00000021,0x00000000,0x00040047,0x00000170, + 0x00000022,0x00000000,0x00040047,0x0000017c,0x00000006,0x00000010,0x00030047,0x0000017d, + 0x00000002,0x00040048,0x0000017d,0x00000000,0x00000019,0x00050048,0x0000017d,0x00000000, + 0x00000023,0x00000000,0x00030047,0x0000017f,0x00000019,0x00040047,0x0000017f,0x00000021, + 0x00000006,0x00040047,0x0000017f,0x00000022,0x00000000,0x00040047,0x00000198,0x00000006, + 0x00000008,0x00030047,0x00000199,0x00000002,0x00040048,0x00000199,0x00000000,0x00000019, + 0x00050048,0x00000199,0x00000000,0x00000023,0x00000000,0x00030047,0x0000019b,0x00000019, + 0x00040047,0x0000019b,0x00000021,0x00000005,0x00040047,0x0000019b,0x00000022,0x00000000, + 0x00040047,0x0000019d,0x00000006,0x00000010,0x00030047,0x0000019e,0x00000002,0x00040048, + 0x0000019e,0x00000000,0x00000018,0x00050048,0x0000019e,0x00000000,0x00000023,0x00000000, + 0x00030047,0x000001a0,0x00000018,0x00040047,0x000001a0,0x00000021,0x00000001,0x00040047, + 0x000001a0,0x00000022,0x00000000,0x00030047,0x00000229,0x0000002a,0x00030047,0x00000233, + 0x0000002a,0x00030047,0x00000237,0x0000002a,0x00030047,0x0000023b,0x0000002a,0x00040047, + 0x00000263,0x00000006,0x00000008,0x00030047,0x00000264,0x00000002,0x00040048,0x00000264, + 0x00000000,0x00000018,0x00050048,0x00000264,0x00000000,0x00000023,0x00000000,0x00030047, + 0x00000266,0x00000018,0x00040047,0x00000266,0x00000021,0x00000002,0x00040047,0x00000266, + 0x00000022,0x00000000,0x00040047,0x00000270,0x00000006,0x00000008,0x00030047,0x00000271, + 0x00000002,0x00040048,0x00000271,0x00000000,0x00000018,0x00050048,0x00000271,0x00000000, + 0x00000023,0x00000000,0x00030047,0x00000273,0x00000018,0x00040047,0x00000273,0x00000021, + 0x00000003,0x00040047,0x00000273,0x00000022,0x00000000,0x00030047,0x0000029f,0x0000002a, + 0x00030047,0x000002aa,0x0000002a,0x00030047,0x000002ab,0x0000002a,0x00030047,0x00000308, + 0x0000002a,0x00030047,0x00000309,0x0000002a,0x00020013,0x00000002,0x00030021,0x00000003, + 0x00000002,0x00030016,0x00000006,0x00000020,0x00040020,0x00000007,0x00000007,0x00000006, + 0x00040021,0x00000008,0x00000006,0x00000007,0x00030016,0x0000000c,0x00000010,0x00040017, + 0x0000000d,0x0000000c,0x00000002,0x00040020,0x0000000e,0x00000007,0x0000000d,0x00040015, + 0x0000000f,0x00000010,0x00000000,0x00040021,0x00000010,0x0000000f,0x0000000e,0x00040015, + 0x00000014,0x00000020,0x00000000,0x00040020,0x00000015,0x00000007,0x00000014,0x00040021, + 0x00000016,0x00000006,0x00000015,0x0004002b,0x00000014,0x0000001a,0x00000008,0x0004001c, + 0x0000001b,0x00000006,0x0000001a,0x00040020,0x0000001c,0x00000007,0x0000001b,0x00060021, + 0x0000001d,0x00000002,0x00000015,0x00000015,0x0000001c,0x00040017,0x00000023,0x00000014, + 0x00000004,0x00040020,0x00000024,0x00000007,0x00000023,0x00050021,0x00000025,0x00000002, + 0x00000024,0x0000001c,0x00040017,0x0000002a,0x00000014,0x00000002,0x00040020,0x0000002b, + 0x00000007,0x0000002a,0x00050021,0x0000002c,0x00000002,0x0000002b,0x0000001c,0x00040021, + 0x00000031,0x00000023,0x0000001c,0x00040021,0x00000035,0x0000002a,0x00000024,0x0004002b, + 0x00000014,0x0000003e,0x80000000,0x0004002b,0x00000014,0x00000042,0x7fffffff,0x0004002b, + 0x00000014,0x00000045,0x7f800000,0x00020014,0x00000046,0x0004002b,0x00000014,0x0000004d, + 0x477ff000,0x0004002b,0x00000014,0x00000056,0x38800000,0x0004002b,0x00000006,0x0000005d, + 0x4b800000,0x0004002b,0x00000006,0x00000064,0x33800000,0x0004002b,0x00000014,0x0000006d, + 0x0000000d,0x0004002b,0x00000014,0x0000006f,0x00000001,0x0004002b,0x00000014,0x00000073, + 0x00000fff,0x0004002b,0x00000014,0x00000077,0xffffe000,0x0004002b,0x0000000c,0x00000081, + 0x00000000,0x0005002c,0x0000000d,0x00000082,0x00000081,0x00000081,0x00040017,0x00000084, + 0x00000046,0x00000002,0x00040016,0x00000087,0x00000008,0x00001076,0x00040017,0x00000088, + 0x00000087,0x00000002,0x00040020,0x00000089,0x00000007,0x00000088,0x00040015,0x0000008d, + 0x00000008,0x00000000,0x00040017,0x0000008e,0x0000008d,0x00000002,0x00040020,0x0000008f, + 0x00000007,0x0000008e,0x0004002b,0x00000014,0x00000093,0x00000000,0x00040020,0x00000094, + 0x00000007,0x0000008d,0x0004002b,0x00000014,0x000000a2,0x000000ff,0x0004002b,0x00000006, + 0x000000a9,0x00000000,0x0003001d,0x000000b7,0x0000000f,0x0003001e,0x000000b8,0x000000b7, + 0x00040020,0x000000b9,0x0000000c,0x000000b8,0x0004003b,0x000000b9,0x000000ba,0x0000000c, + 0x00040015,0x000000bb,0x00000020,0x00000001,0x0004002b,0x000000bb,0x000000bc,0x00000000, + 0x00040020,0x000000c2,0x0000000c,0x0000000f,0x0004002b,0x000000bb,0x000000c9,0x00000001, + 0x0004002b,0x00000014,0x000000d2,0x00000004,0x00040017,0x000000d4,0x00000006,0x00000002, + 0x00040020,0x000000d5,0x00000007,0x000000d4,0x0004002b,0x00000014,0x000000dc,0x00000002, + 0x0004002b,0x00000014,0x000000f8,0x00000003,0x0004002b,0x00000014,0x0000012b,0x00000010, + 0x00040017,0x00000140,0x00000014,0x00000003,0x00040020,0x00000141,0x00000001,0x00000140, + 0x0004003b,0x00000141,0x00000142,0x00000001,0x00040020,0x00000143,0x00000001,0x00000014, + 0x0004002b,0x00000014,0x00000148,0x0000ffff,0x0004002b,0x00000014,0x0000014a,0x00000100, + 0x000b001e,0x0000014f,0x00000014,0x00000014,0x00000014,0x00000014,0x00000014,0x00000014, + 0x00000014,0x00000014,0x00000014,0x00040020,0x00000150,0x00000009,0x0000014f,0x0004003b, + 0x00000150,0x00000151,0x00000009,0x00040020,0x00000152,0x00000009,0x00000014,0x00040032, + 0x00000014,0x00000166,0x00000000,0x00060034,0x00000046,0x00000167,0x000000aa,0x00000166, + 0x00000093,0x00040017,0x0000016a,0x00000006,0x00000004,0x00040020,0x0000016b,0x00000007, + 0x0000016a,0x0003001d,0x0000016d,0x0000016a,0x0003001e,0x0000016e,0x0000016d,0x00040020, + 0x0000016f,0x0000000c,0x0000016e,0x0004003b,0x0000016f,0x00000170,0x0000000c,0x00040020, + 0x00000173,0x0000000c,0x0000016a,0x0003001d,0x0000017c,0x00000023,0x0003001e,0x0000017d, + 0x0000017c,0x00040020,0x0000017e,0x0000000c,0x0000017d,0x0004003b,0x0000017e,0x0000017f, + 0x0000000c,0x00040020,0x00000192,0x0000000c,0x00000023,0x00060034,0x00000046,0x00000195, + 0x000000aa,0x00000166,0x0000006f,0x0003001d,0x00000198,0x0000002a,0x0003001e,0x00000199, + 0x00000198,0x00040020,0x0000019a,0x0000000c,0x00000199,0x0004003b,0x0000019a,0x0000019b, + 0x0000000c,0x0003001d,0x0000019d,0x00000023,0x0003001e,0x0000019e,0x0000019d,0x00040020, + 0x0000019f,0x0000000c,0x0000019e,0x0004003b,0x0000019f,0x000001a0,0x0000000c,0x00040020, + 0x000001a6,0x0000000c,0x0000002a,0x00060034,0x00000046,0x000001a9,0x000000aa,0x00000166, + 0x000000dc,0x0004002b,0x000000bb,0x000001ae,0x00000004,0x0007002c,0x00000023,0x000001be, + 0x00000093,0x00000093,0x00000093,0x00000093,0x0004002b,0x000000bb,0x000001c1,0x00000002, + 0x0004002b,0x000000bb,0x000001c9,0x00000003,0x0004002b,0x0000000c,0x0000023a,0x00003400, + 0x00060034,0x00000046,0x00000248,0x000000aa,0x00000166,0x000000f8,0x0003001d,0x00000263, + 0x0000002a,0x0003001e,0x00000264,0x00000263,0x00040020,0x00000265,0x0000000c,0x00000264, + 0x0004003b,0x00000265,0x00000266,0x0000000c,0x0003001d,0x00000270,0x0000002a,0x0003001e, + 0x00000271,0x00000270,0x00040020,0x00000272,0x0000000c,0x00000271,0x0004003b,0x00000272, + 0x00000273,0x0000000c,0x0004002b,0x000000bb,0x0000027c,0x00000006,0x0004002b,0x000000bb, + 0x00000286,0x00000007,0x00060034,0x00000046,0x000002c1,0x000000aa,0x00000166,0x000000d2, + 0x0004002b,0x000000bb,0x0000031b,0x00000008,0x0006002c,0x00000140,0x00000324,0x0000014a, + 0x0000006f,0x0000006f,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8, + 0x00000005,0x0004003b,0x00000015,0x0000013f,0x00000007,0x0004003b,0x00000015,0x00000159, + 0x00000007,0x0004003b,0x00000015,0x0000015d,0x00000007,0x0004003b,0x00000015,0x00000162, + 0x00000007,0x0004003b,0x0000016b,0x0000016c,0x00000007,0x0004003b,0x0000016b,0x00000176, + 0x00000007,0x0004003b,0x00000024,0x000001a2,0x00000007,0x0004003b,0x00000015,0x000001ac, + 0x00000007,0x0004003b,0x00000015,0x000001b2,0x00000007,0x0004003b,0x00000015,0x000001b7, + 0x00000007,0x0004003b,0x00000015,0x000001ba,0x00000007,0x0004003b,0x00000024,0x000001bd, + 0x00000007,0x0004003b,0x00000015,0x000001d0,0x00000007,0x0004003b,0x00000015,0x000001dd, + 0x00000007,0x0004003b,0x00000015,0x000001eb,0x00000007,0x0004003b,0x00000015,0x000001f9, + 0x00000007,0x0004003b,0x00000024,0x00000208,0x00000007,0x0004003b,0x00000024,0x0000020c, + 0x00000007,0x0004003b,0x00000024,0x00000210,0x00000007,0x0004003b,0x00000024,0x00000214, + 0x00000007,0x0004003b,0x00000015,0x00000218,0x00000007,0x0004003b,0x0000000e,0x00000220, + 0x00000007,0x0004003b,0x0000000e,0x0000022a,0x00000007,0x0004003b,0x0000000e,0x00000234, + 0x00000007,0x0004003b,0x0000000e,0x00000238,0x00000007,0x0004003b,0x00000024,0x00000243, + 0x00000007,0x0004003b,0x00000015,0x0000024b,0x00000007,0x0004003b,0x00000015,0x00000250, + 0x00000007,0x0004003b,0x00000015,0x00000255,0x00000007,0x0004003b,0x0000001c,0x00000269, + 0x00000007,0x0004003b,0x0000002b,0x0000026a,0x00000007,0x0004003b,0x0000001c,0x0000026d, + 0x00000007,0x0004003b,0x0000001c,0x00000275,0x00000007,0x0004003b,0x0000002b,0x00000276, + 0x00000007,0x0004003b,0x0000001c,0x00000279,0x00000007,0x0004003b,0x0000001c,0x0000027d, + 0x00000007,0x0004003b,0x00000015,0x0000027e,0x00000007,0x0004003b,0x00000015,0x00000281, + 0x00000007,0x0004003b,0x0000001c,0x00000283,0x00000007,0x0004003b,0x0000001c,0x00000287, + 0x00000007,0x0004003b,0x00000015,0x00000288,0x00000007,0x0004003b,0x00000015,0x0000028b, + 0x00000007,0x0004003b,0x0000001c,0x0000028d,0x00000007,0x0004003b,0x00000015,0x00000290, + 0x00000007,0x0004003b,0x00000007,0x00000298,0x00000007,0x0004003b,0x00000007,0x000002a0, + 0x00000007,0x0004003b,0x00000007,0x000002a2,0x00000007,0x0004003b,0x0000001c,0x000002ac, + 0x00000007,0x0004003b,0x00000007,0x000002ae,0x00000007,0x0004003b,0x00000024,0x000002b4, + 0x00000007,0x0004003b,0x0000001c,0x000002b5,0x00000007,0x0004003b,0x00000024,0x000002bc, + 0x00000007,0x0004003b,0x00000015,0x000002c4,0x00000007,0x0004003b,0x00000015,0x000002c9, + 0x00000007,0x0004003b,0x00000015,0x000002ce,0x00000007,0x0004003b,0x0000001c,0x000002de, + 0x00000007,0x0004003b,0x00000024,0x000002df,0x00000007,0x0004003b,0x0000001c,0x000002e2, + 0x00000007,0x0004003b,0x0000001c,0x000002e6,0x00000007,0x0004003b,0x0000002b,0x000002e7, + 0x00000007,0x0004003b,0x0000001c,0x000002ea,0x00000007,0x0004003b,0x0000001c,0x000002ed, + 0x00000007,0x0004003b,0x00000015,0x000002ee,0x00000007,0x0004003b,0x00000015,0x000002f1, + 0x00000007,0x0004003b,0x0000001c,0x000002f3,0x00000007,0x0004003b,0x00000015,0x000002f6, + 0x00000007,0x0004003b,0x00000007,0x000002fe,0x00000007,0x0004003b,0x0000001c,0x0000030a, + 0x00000007,0x0004003b,0x00000007,0x0000030c,0x00000007,0x0004003b,0x00000024,0x00000312, + 0x00000007,0x0004003b,0x0000001c,0x00000313,0x00000007,0x0004003b,0x00000024,0x00000317, + 0x00000007,0x00050041,0x00000143,0x00000144,0x00000142,0x00000093,0x0004003d,0x00000014, + 0x00000145,0x00000144,0x00050041,0x00000143,0x00000146,0x00000142,0x0000006f,0x0004003d, + 0x00000014,0x00000147,0x00000146,0x00050084,0x00000014,0x00000149,0x00000147,0x00000148, + 0x00050084,0x00000014,0x0000014b,0x00000149,0x0000014a,0x00050080,0x00000014,0x0000014c, + 0x00000145,0x0000014b,0x0003003e,0x0000013f,0x0000014c,0x0004003d,0x00000014,0x0000014d, + 0x0000013f,0x00050084,0x00000014,0x0000014e,0x0000014d,0x0000001a,0x00050041,0x00000152, + 0x00000153,0x00000151,0x000000bc,0x0004003d,0x00000014,0x00000154,0x00000153,0x000500ae, + 0x00000046,0x00000155,0x0000014e,0x00000154,0x000300f7,0x00000157,0x00000000,0x000400fa, + 0x00000155,0x00000156,0x00000157,0x000200f8,0x00000156,0x000100fd,0x000200f8,0x00000157, + 0x00050041,0x00000152,0x0000015a,0x00000151,0x000000c9,0x0004003d,0x00000014,0x0000015b, + 0x0000015a,0x00050086,0x00000014,0x0000015c,0x0000015b,0x0000001a,0x0003003e,0x00000159, + 0x0000015c,0x0004003d,0x00000014,0x0000015e,0x0000013f,0x0004003d,0x00000014,0x0000015f, + 0x00000159,0x00050089,0x00000014,0x00000160,0x0000015e,0x0000015f,0x00050084,0x00000014, + 0x00000161,0x00000160,0x0000001a,0x0003003e,0x0000015d,0x00000161,0x0004003d,0x00000014, + 0x00000163,0x0000013f,0x0004003d,0x00000014,0x00000164,0x00000159,0x00050086,0x00000014, + 0x00000165,0x00000163,0x00000164,0x0003003e,0x00000162,0x00000165,0x000300f7,0x00000169, + 0x00000000,0x000400fa,0x00000167,0x00000168,0x00000194,0x000200f8,0x00000168,0x0004003d, + 0x00000014,0x00000171,0x0000013f,0x00050084,0x00000014,0x00000172,0x00000171,0x000000dc, + 0x00060041,0x00000173,0x00000174,0x00000170,0x000000bc,0x00000172,0x0004003d,0x0000016a, + 0x00000175,0x00000174,0x0003003e,0x0000016c,0x00000175,0x0004003d,0x00000014,0x00000177, + 0x0000013f,0x00050084,0x00000014,0x00000178,0x00000177,0x000000dc,0x00050080,0x00000014, + 0x00000179,0x00000178,0x0000006f,0x00060041,0x00000173,0x0000017a,0x00000170,0x000000bc, + 0x00000179,0x0004003d,0x0000016a,0x0000017b,0x0000017a,0x0003003e,0x00000176,0x0000017b, + 0x0004003d,0x00000014,0x00000180,0x0000013f,0x0004003d,0x0000016a,0x00000181,0x0000016c, + 0x0007004f,0x000000d4,0x00000182,0x00000181,0x00000181,0x00000000,0x00000001,0x00040073, + 0x0000000d,0x00000183,0x00000182,0x0004007c,0x00000014,0x00000184,0x00000183,0x0004003d, + 0x0000016a,0x00000185,0x0000016c,0x0007004f,0x000000d4,0x00000186,0x00000185,0x00000185, + 0x00000002,0x00000003,0x00040073,0x0000000d,0x00000187,0x00000186,0x0004007c,0x00000014, + 0x00000188,0x00000187,0x0004003d,0x0000016a,0x00000189,0x00000176,0x0007004f,0x000000d4, + 0x0000018a,0x00000189,0x00000189,0x00000000,0x00000001,0x00040073,0x0000000d,0x0000018b, + 0x0000018a,0x0004007c,0x00000014,0x0000018c,0x0000018b,0x0004003d,0x0000016a,0x0000018d, + 0x00000176,0x0007004f,0x000000d4,0x0000018e,0x0000018d,0x0000018d,0x00000002,0x00000003, + 0x00040073,0x0000000d,0x0000018f,0x0000018e,0x0004007c,0x00000014,0x00000190,0x0000018f, + 0x00070050,0x00000023,0x00000191,0x00000184,0x00000188,0x0000018c,0x00000190,0x00060041, + 0x00000192,0x00000193,0x0000017f,0x000000bc,0x00000180,0x0003003e,0x00000193,0x00000191, + 0x000200f9,0x00000169,0x000200f8,0x00000194,0x000300f7,0x00000197,0x00000000,0x000400fa, + 0x00000195,0x00000196,0x000001a8,0x000200f8,0x00000196,0x0004003d,0x00000014,0x0000019c, + 0x0000013f,0x0004003d,0x00000014,0x000001a1,0x0000013f,0x00060041,0x00000192,0x000001a3, + 0x000001a0,0x000000bc,0x000001a1,0x0004003d,0x00000023,0x000001a4,0x000001a3,0x0003003e, + 0x000001a2,0x000001a4,0x00050039,0x0000002a,0x000001a5,0x00000037,0x000001a2,0x00060041, + 0x000001a6,0x000001a7,0x0000019b,0x000000bc,0x0000019c,0x0003003e,0x000001a7,0x000001a5, + 0x000200f9,0x00000197,0x000200f8,0x000001a8,0x000300f7,0x000001ab,0x00000000,0x000400fa, + 0x000001a9,0x000001aa,0x00000247,0x000200f8,0x000001aa,0x0004003d,0x00000014,0x000001ad, + 0x00000162,0x00050041,0x00000152,0x000001af,0x00000151,0x000001ae,0x0004003d,0x00000014, + 0x000001b0,0x000001af,0x00050089,0x00000014,0x000001b1,0x000001ad,0x000001b0,0x0003003e, + 0x000001ac,0x000001b1,0x0004003d,0x00000014,0x000001b3,0x00000162,0x00050041,0x00000152, + 0x000001b4,0x00000151,0x000001ae,0x0004003d,0x00000014,0x000001b5,0x000001b4,0x00050086, + 0x00000014,0x000001b6,0x000001b3,0x000001b5,0x0003003e,0x000001b2,0x000001b6,0x0004003d, + 0x00000014,0x000001b8,0x000001ac,0x00050084,0x00000014,0x000001b9,0x000001b8,0x000000dc, + 0x0003003e,0x000001b7,0x000001b9,0x0004003d,0x00000014,0x000001bb,0x000001b2,0x00050084, + 0x00000014,0x000001bc,0x000001bb,0x000000dc,0x0003003e,0x000001ba,0x000001bc,0x0003003e, + 0x000001bd,0x000001be,0x0004003d,0x00000014,0x000001bf,0x000001b7,0x00050080,0x00000014, + 0x000001c0,0x000001bf,0x0000006f,0x00050041,0x00000152,0x000001c2,0x00000151,0x000001c1, + 0x0004003d,0x00000014,0x000001c3,0x000001c2,0x000500b0,0x00000046,0x000001c4,0x000001c0, + 0x000001c3,0x000300f7,0x000001c6,0x00000000,0x000400fa,0x000001c4,0x000001c5,0x000001c6, + 0x000200f8,0x000001c5,0x0004003d,0x00000014,0x000001c7,0x000001ba,0x00050080,0x00000014, + 0x000001c8,0x000001c7,0x0000006f,0x00050041,0x00000152,0x000001ca,0x00000151,0x000001c9, + 0x0004003d,0x00000014,0x000001cb,0x000001ca,0x000500b0,0x00000046,0x000001cc,0x000001c8, + 0x000001cb,0x000200f9,0x000001c6,0x000200f8,0x000001c6,0x000700f5,0x00000046,0x000001cd, + 0x000001c4,0x000001aa,0x000001cc,0x000001c5,0x000300f7,0x000001cf,0x00000000,0x000400fa, + 0x000001cd,0x000001ce,0x000001cf,0x000200f8,0x000001ce,0x0004003d,0x00000014,0x000001d1, + 0x000001ba,0x00050041,0x00000152,0x000001d2,0x00000151,0x000001c1,0x0004003d,0x00000014, + 0x000001d3,0x000001d2,0x00050084,0x00000014,0x000001d4,0x000001d1,0x000001d3,0x0004003d, + 0x00000014,0x000001d5,0x000001b7,0x00050080,0x00000014,0x000001d6,0x000001d4,0x000001d5, + 0x00050041,0x00000152,0x000001d7,0x00000151,0x000000c9,0x0004003d,0x00000014,0x000001d8, + 0x000001d7,0x00050084,0x00000014,0x000001d9,0x000001d6,0x000001d8,0x0004003d,0x00000014, + 0x000001da,0x0000015d,0x00050080,0x00000014,0x000001db,0x000001d9,0x000001da,0x00050086, + 0x00000014,0x000001dc,0x000001db,0x0000001a,0x0003003e,0x000001d0,0x000001dc,0x0004003d, + 0x00000014,0x000001de,0x000001ba,0x00050041,0x00000152,0x000001df,0x00000151,0x000001c1, + 0x0004003d,0x00000014,0x000001e0,0x000001df,0x00050084,0x00000014,0x000001e1,0x000001de, + 0x000001e0,0x0004003d,0x00000014,0x000001e2,0x000001b7,0x00050080,0x00000014,0x000001e3, + 0x000001e1,0x000001e2,0x00050080,0x00000014,0x000001e4,0x000001e3,0x0000006f,0x00050041, + 0x00000152,0x000001e5,0x00000151,0x000000c9,0x0004003d,0x00000014,0x000001e6,0x000001e5, + 0x00050084,0x00000014,0x000001e7,0x000001e4,0x000001e6,0x0004003d,0x00000014,0x000001e8, + 0x0000015d,0x00050080,0x00000014,0x000001e9,0x000001e7,0x000001e8,0x00050086,0x00000014, + 0x000001ea,0x000001e9,0x0000001a,0x0003003e,0x000001dd,0x000001ea,0x0004003d,0x00000014, + 0x000001ec,0x000001ba,0x00050080,0x00000014,0x000001ed,0x000001ec,0x0000006f,0x00050041, + 0x00000152,0x000001ee,0x00000151,0x000001c1,0x0004003d,0x00000014,0x000001ef,0x000001ee, + 0x00050084,0x00000014,0x000001f0,0x000001ed,0x000001ef,0x0004003d,0x00000014,0x000001f1, + 0x000001b7,0x00050080,0x00000014,0x000001f2,0x000001f0,0x000001f1,0x00050041,0x00000152, + 0x000001f3,0x00000151,0x000000c9,0x0004003d,0x00000014,0x000001f4,0x000001f3,0x00050084, + 0x00000014,0x000001f5,0x000001f2,0x000001f4,0x0004003d,0x00000014,0x000001f6,0x0000015d, + 0x00050080,0x00000014,0x000001f7,0x000001f5,0x000001f6,0x00050086,0x00000014,0x000001f8, + 0x000001f7,0x0000001a,0x0003003e,0x000001eb,0x000001f8,0x0004003d,0x00000014,0x000001fa, + 0x000001ba,0x00050080,0x00000014,0x000001fb,0x000001fa,0x0000006f,0x00050041,0x00000152, + 0x000001fc,0x00000151,0x000001c1,0x0004003d,0x00000014,0x000001fd,0x000001fc,0x00050084, + 0x00000014,0x000001fe,0x000001fb,0x000001fd,0x0004003d,0x00000014,0x000001ff,0x000001b7, + 0x00050080,0x00000014,0x00000200,0x000001fe,0x000001ff,0x00050080,0x00000014,0x00000201, + 0x00000200,0x0000006f,0x00050041,0x00000152,0x00000202,0x00000151,0x000000c9,0x0004003d, + 0x00000014,0x00000203,0x00000202,0x00050084,0x00000014,0x00000204,0x00000201,0x00000203, + 0x0004003d,0x00000014,0x00000205,0x0000015d,0x00050080,0x00000014,0x00000206,0x00000204, + 0x00000205,0x00050086,0x00000014,0x00000207,0x00000206,0x0000001a,0x0003003e,0x000001f9, + 0x00000207,0x0004003d,0x00000014,0x00000209,0x000001d0,0x00060041,0x00000192,0x0000020a, + 0x000001a0,0x000000bc,0x00000209,0x0004003d,0x00000023,0x0000020b,0x0000020a,0x0003003e, + 0x00000208,0x0000020b,0x0004003d,0x00000014,0x0000020d,0x000001dd,0x00060041,0x00000192, + 0x0000020e,0x000001a0,0x000000bc,0x0000020d,0x0004003d,0x00000023,0x0000020f,0x0000020e, + 0x0003003e,0x0000020c,0x0000020f,0x0004003d,0x00000014,0x00000211,0x000001eb,0x00060041, + 0x00000192,0x00000212,0x000001a0,0x000000bc,0x00000211,0x0004003d,0x00000023,0x00000213, + 0x00000212,0x0003003e,0x00000210,0x00000213,0x0004003d,0x00000014,0x00000215,0x000001f9, + 0x00060041,0x00000192,0x00000216,0x000001a0,0x000000bc,0x00000215,0x0004003d,0x00000023, + 0x00000217,0x00000216,0x0003003e,0x00000214,0x00000217,0x0003003e,0x00000218,0x00000093, + 0x000200f9,0x00000219,0x000200f8,0x00000219,0x000400f6,0x0000021b,0x0000021c,0x00000001, + 0x000200f9,0x0000021d,0x000200f8,0x0000021d,0x0004003d,0x00000014,0x0000021e,0x00000218, + 0x000500b0,0x00000046,0x0000021f,0x0000021e,0x000000d2,0x000400fa,0x0000021f,0x0000021a, + 0x0000021b,0x000200f8,0x0000021a,0x0004003d,0x00000014,0x00000221,0x00000218,0x00050041, + 0x00000015,0x00000222,0x00000208,0x00000221,0x0004003d,0x00000014,0x00000223,0x00000222, + 0x0004007c,0x0000000d,0x00000224,0x00000223,0x0004003d,0x00000014,0x00000225,0x00000218, + 0x00050041,0x00000015,0x00000226,0x0000020c,0x00000225,0x0004003d,0x00000014,0x00000227, + 0x00000226,0x0004007c,0x0000000d,0x00000228,0x00000227,0x00050081,0x0000000d,0x00000229, + 0x00000224,0x00000228,0x0003003e,0x00000220,0x00000229,0x0004003d,0x00000014,0x0000022b, + 0x00000218,0x00050041,0x00000015,0x0000022c,0x00000210,0x0000022b,0x0004003d,0x00000014, + 0x0000022d,0x0000022c,0x0004007c,0x0000000d,0x0000022e,0x0000022d,0x0004003d,0x00000014, + 0x0000022f,0x00000218,0x00050041,0x00000015,0x00000230,0x00000214,0x0000022f,0x0004003d, + 0x00000014,0x00000231,0x00000230,0x0004007c,0x0000000d,0x00000232,0x00000231,0x00050081, + 0x0000000d,0x00000233,0x0000022e,0x00000232,0x0003003e,0x0000022a,0x00000233,0x0004003d, + 0x0000000d,0x00000235,0x00000220,0x0004003d,0x0000000d,0x00000236,0x0000022a,0x00050081, + 0x0000000d,0x00000237,0x00000235,0x00000236,0x0003003e,0x00000234,0x00000237,0x0004003d, + 0x0000000d,0x00000239,0x00000234,0x0005008e,0x0000000d,0x0000023b,0x00000239,0x0000023a, + 0x0003003e,0x00000238,0x0000023b,0x0004003d,0x00000014,0x0000023c,0x00000218,0x0004003d, + 0x0000000d,0x0000023d,0x00000238,0x0004007c,0x00000014,0x0000023e,0x0000023d,0x00050041, + 0x00000015,0x0000023f,0x000001bd,0x0000023c,0x0003003e,0x0000023f,0x0000023e,0x000200f9, + 0x0000021c,0x000200f8,0x0000021c,0x0004003d,0x00000014,0x00000240,0x00000218,0x00050080, + 0x00000014,0x00000241,0x00000240,0x000000c9,0x0003003e,0x00000218,0x00000241,0x000200f9, + 0x00000219,0x000200f8,0x0000021b,0x000200f9,0x000001cf,0x000200f8,0x000001cf,0x0004003d, + 0x00000014,0x00000242,0x0000013f,0x0004003d,0x00000023,0x00000244,0x000001bd,0x0003003e, + 0x00000243,0x00000244,0x00050039,0x0000002a,0x00000245,0x00000037,0x00000243,0x00060041, + 0x000001a6,0x00000246,0x0000019b,0x000000bc,0x00000242,0x0003003e,0x00000246,0x00000245, + 0x000200f9,0x000001ab,0x000200f8,0x00000247,0x000300f7,0x0000024a,0x00000000,0x000400fa, + 0x00000248,0x00000249,0x000002c0,0x000200f8,0x00000249,0x0004003d,0x00000014,0x0000024c, + 0x00000162,0x00050041,0x00000152,0x0000024d,0x00000151,0x000001ae,0x0004003d,0x00000014, + 0x0000024e,0x0000024d,0x00050089,0x00000014,0x0000024f,0x0000024c,0x0000024e,0x0003003e, + 0x0000024b,0x0000024f,0x0004003d,0x00000014,0x00000251,0x00000162,0x00050041,0x00000152, + 0x00000252,0x00000151,0x000001ae,0x0004003d,0x00000014,0x00000253,0x00000252,0x00050086, + 0x00000014,0x00000254,0x00000251,0x00000253,0x0003003e,0x00000250,0x00000254,0x0004003d, + 0x00000014,0x00000256,0x00000250,0x000500c2,0x00000014,0x00000257,0x00000256,0x0000006f, + 0x00050041,0x00000152,0x00000258,0x00000151,0x000001c1,0x0004003d,0x00000014,0x00000259, + 0x00000258,0x00050084,0x00000014,0x0000025a,0x00000257,0x00000259,0x0004003d,0x00000014, + 0x0000025b,0x0000024b,0x000500c2,0x00000014,0x0000025c,0x0000025b,0x0000006f,0x00050080, + 0x00000014,0x0000025d,0x0000025a,0x0000025c,0x00050041,0x00000152,0x0000025e,0x00000151, + 0x000000c9,0x0004003d,0x00000014,0x0000025f,0x0000025e,0x00050084,0x00000014,0x00000260, + 0x0000025d,0x0000025f,0x0004003d,0x00000014,0x00000261,0x0000015d,0x00050080,0x00000014, + 0x00000262,0x00000260,0x00000261,0x0003003e,0x00000255,0x00000262,0x0004003d,0x00000014, + 0x00000267,0x00000255,0x00050086,0x00000014,0x00000268,0x00000267,0x0000001a,0x00060041, + 0x000001a6,0x0000026b,0x00000266,0x000000bc,0x00000268,0x0004003d,0x0000002a,0x0000026c, + 0x0000026b,0x0003003e,0x0000026a,0x0000026c,0x00060039,0x00000002,0x0000026e,0x0000002f, + 0x0000026a,0x0000026d,0x0004003d,0x0000001b,0x0000026f,0x0000026d,0x0003003e,0x00000269, + 0x0000026f,0x0004003d,0x00000014,0x00000274,0x0000013f,0x00060041,0x000001a6,0x00000277, + 0x00000273,0x000000bc,0x00000274,0x0004003d,0x0000002a,0x00000278,0x00000277,0x0003003e, + 0x00000276,0x00000278,0x00060039,0x00000002,0x0000027a,0x0000002f,0x00000276,0x00000279, + 0x0004003d,0x0000001b,0x0000027b,0x00000279,0x0003003e,0x00000275,0x0000027b,0x00050041, + 0x00000152,0x0000027f,0x00000151,0x0000027c,0x0004003d,0x00000014,0x00000280,0x0000027f, + 0x0003003e,0x0000027e,0x00000280,0x0004003d,0x00000014,0x00000282,0x0000015d,0x0003003e, + 0x00000281,0x00000282,0x00070039,0x00000002,0x00000284,0x00000021,0x0000027e,0x00000281, + 0x00000283,0x0004003d,0x0000001b,0x00000285,0x00000283,0x0003003e,0x0000027d,0x00000285, + 0x00050041,0x00000152,0x00000289,0x00000151,0x00000286,0x0004003d,0x00000014,0x0000028a, + 0x00000289,0x0003003e,0x00000288,0x0000028a,0x0004003d,0x00000014,0x0000028c,0x0000015d, + 0x0003003e,0x0000028b,0x0000028c,0x00070039,0x00000002,0x0000028e,0x00000021,0x00000288, + 0x0000028b,0x0000028d,0x0004003d,0x0000001b,0x0000028f,0x0000028d,0x0003003e,0x00000287, + 0x0000028f,0x0003003e,0x00000290,0x00000093,0x000200f9,0x00000291,0x000200f8,0x00000291, + 0x000400f6,0x00000293,0x00000294,0x00000001,0x000200f9,0x00000295,0x000200f8,0x00000295, + 0x0004003d,0x00000014,0x00000296,0x00000290,0x000500b0,0x00000046,0x00000297,0x00000296, + 0x0000001a,0x000400fa,0x00000297,0x00000292,0x00000293,0x000200f8,0x00000292,0x0004003d, + 0x00000014,0x00000299,0x00000290,0x00050041,0x00000007,0x0000029a,0x00000269,0x00000299, + 0x0004003d,0x00000006,0x0000029b,0x0000029a,0x0004003d,0x00000014,0x0000029c,0x00000290, + 0x00050041,0x00000007,0x0000029d,0x0000027d,0x0000029c,0x0004003d,0x00000006,0x0000029e, + 0x0000029d,0x00050085,0x00000006,0x0000029f,0x0000029b,0x0000029e,0x0003003e,0x000002a0, + 0x0000029f,0x00050039,0x00000006,0x000002a1,0x0000000a,0x000002a0,0x0003003e,0x00000298, + 0x000002a1,0x0004003d,0x00000006,0x000002a3,0x00000298,0x0004003d,0x00000014,0x000002a4, + 0x00000290,0x00050041,0x00000007,0x000002a5,0x00000275,0x000002a4,0x0004003d,0x00000006, + 0x000002a6,0x000002a5,0x0004003d,0x00000014,0x000002a7,0x00000290,0x00050041,0x00000007, + 0x000002a8,0x00000287,0x000002a7,0x0004003d,0x00000006,0x000002a9,0x000002a8,0x00050085, + 0x00000006,0x000002aa,0x000002a6,0x000002a9,0x00050081,0x00000006,0x000002ab,0x000002a3, + 0x000002aa,0x0003003e,0x000002a2,0x000002ab,0x0004003d,0x00000014,0x000002ad,0x00000290, + 0x0004003d,0x00000006,0x000002af,0x000002a2,0x0003003e,0x000002ae,0x000002af,0x00050039, + 0x00000006,0x000002b0,0x0000000a,0x000002ae,0x00050041,0x00000007,0x000002b1,0x000002ac, + 0x000002ad,0x0003003e,0x000002b1,0x000002b0,0x000200f9,0x00000294,0x000200f8,0x00000294, + 0x0004003d,0x00000014,0x000002b2,0x00000290,0x00050080,0x00000014,0x000002b3,0x000002b2, + 0x000000c9,0x0003003e,0x00000290,0x000002b3,0x000200f9,0x00000291,0x000200f8,0x00000293, + 0x0004003d,0x0000001b,0x000002b6,0x000002ac,0x0003003e,0x000002b5,0x000002b6,0x00050039, + 0x00000023,0x000002b7,0x00000033,0x000002b5,0x0003003e,0x000002b4,0x000002b7,0x0004003d, + 0x00000014,0x000002b8,0x0000013f,0x0004003d,0x00000023,0x000002b9,0x000002b4,0x00060041, + 0x00000192,0x000002ba,0x0000017f,0x000000bc,0x000002b8,0x0003003e,0x000002ba,0x000002b9, + 0x0004003d,0x00000014,0x000002bb,0x0000013f,0x0004003d,0x00000023,0x000002bd,0x000002b4, + 0x0003003e,0x000002bc,0x000002bd,0x00050039,0x0000002a,0x000002be,0x00000037,0x000002bc, + 0x00060041,0x000001a6,0x000002bf,0x0000019b,0x000000bc,0x000002bb,0x0003003e,0x000002bf, + 0x000002be,0x000200f9,0x0000024a,0x000200f8,0x000002c0,0x000300f7,0x000002c3,0x00000000, + 0x000400fa,0x000002c1,0x000002c2,0x000002c3,0x000200f8,0x000002c2,0x0004003d,0x00000014, + 0x000002c5,0x00000162,0x00050041,0x00000152,0x000002c6,0x00000151,0x000001ae,0x0004003d, + 0x00000014,0x000002c7,0x000002c6,0x00050089,0x00000014,0x000002c8,0x000002c5,0x000002c7, + 0x0003003e,0x000002c4,0x000002c8,0x0004003d,0x00000014,0x000002ca,0x00000162,0x00050041, + 0x00000152,0x000002cb,0x00000151,0x000001ae,0x0004003d,0x00000014,0x000002cc,0x000002cb, + 0x00050086,0x00000014,0x000002cd,0x000002ca,0x000002cc,0x0003003e,0x000002c9,0x000002cd, + 0x0004003d,0x00000014,0x000002cf,0x000002c9,0x000500c2,0x00000014,0x000002d0,0x000002cf, + 0x0000006f,0x00050041,0x00000152,0x000002d1,0x00000151,0x000001c1,0x0004003d,0x00000014, + 0x000002d2,0x000002d1,0x00050084,0x00000014,0x000002d3,0x000002d0,0x000002d2,0x0004003d, + 0x00000014,0x000002d4,0x000002c4,0x000500c2,0x00000014,0x000002d5,0x000002d4,0x0000006f, + 0x00050080,0x00000014,0x000002d6,0x000002d3,0x000002d5,0x00050041,0x00000152,0x000002d7, + 0x00000151,0x000000c9,0x0004003d,0x00000014,0x000002d8,0x000002d7,0x00050084,0x00000014, + 0x000002d9,0x000002d6,0x000002d8,0x0004003d,0x00000014,0x000002da,0x0000015d,0x00050080, + 0x00000014,0x000002db,0x000002d9,0x000002da,0x0003003e,0x000002ce,0x000002db,0x0004003d, + 0x00000014,0x000002dc,0x000002ce,0x00050086,0x00000014,0x000002dd,0x000002dc,0x0000001a, + 0x00060041,0x00000192,0x000002e0,0x000001a0,0x000000bc,0x000002dd,0x0004003d,0x00000023, + 0x000002e1,0x000002e0,0x0003003e,0x000002df,0x000002e1,0x00060039,0x00000002,0x000002e3, + 0x00000028,0x000002df,0x000002e2,0x0004003d,0x0000001b,0x000002e4,0x000002e2,0x0003003e, + 0x000002de,0x000002e4,0x0004003d,0x00000014,0x000002e5,0x0000013f,0x00060041,0x000001a6, + 0x000002e8,0x00000273,0x000000bc,0x000002e5,0x0004003d,0x0000002a,0x000002e9,0x000002e8, + 0x0003003e,0x000002e7,0x000002e9,0x00060039,0x00000002,0x000002eb,0x0000002f,0x000002e7, + 0x000002ea,0x0004003d,0x0000001b,0x000002ec,0x000002ea,0x0003003e,0x000002e6,0x000002ec, + 0x00050041,0x00000152,0x000002ef,0x00000151,0x0000027c,0x0004003d,0x00000014,0x000002f0, + 0x000002ef,0x0003003e,0x000002ee,0x000002f0,0x0004003d,0x00000014,0x000002f2,0x0000015d, + 0x0003003e,0x000002f1,0x000002f2,0x00070039,0x00000002,0x000002f4,0x00000021,0x000002ee, + 0x000002f1,0x000002f3,0x0004003d,0x0000001b,0x000002f5,0x000002f3,0x0003003e,0x000002ed, + 0x000002f5,0x0003003e,0x000002f6,0x00000093,0x000200f9,0x000002f7,0x000200f8,0x000002f7, + 0x000400f6,0x000002f9,0x000002fa,0x00000001,0x000200f9,0x000002fb,0x000200f8,0x000002fb, + 0x0004003d,0x00000014,0x000002fc,0x000002f6,0x000500b0,0x00000046,0x000002fd,0x000002fc, + 0x0000001a,0x000400fa,0x000002fd,0x000002f8,0x000002f9,0x000200f8,0x000002f8,0x0004003d, + 0x00000014,0x000002ff,0x000002f6,0x00050041,0x00000007,0x00000300,0x000002de,0x000002ff, + 0x0004003d,0x00000006,0x00000301,0x00000300,0x0004003d,0x00000014,0x00000302,0x000002f6, + 0x00050041,0x00000007,0x00000303,0x000002e6,0x00000302,0x0004003d,0x00000006,0x00000304, + 0x00000303,0x0004003d,0x00000014,0x00000305,0x000002f6,0x00050041,0x00000007,0x00000306, + 0x000002ed,0x00000305,0x0004003d,0x00000006,0x00000307,0x00000306,0x00050085,0x00000006, + 0x00000308,0x00000304,0x00000307,0x00050081,0x00000006,0x00000309,0x00000301,0x00000308, + 0x0003003e,0x000002fe,0x00000309,0x0004003d,0x00000014,0x0000030b,0x000002f6,0x0004003d, + 0x00000006,0x0000030d,0x000002fe,0x0003003e,0x0000030c,0x0000030d,0x00050039,0x00000006, + 0x0000030e,0x0000000a,0x0000030c,0x00050041,0x00000007,0x0000030f,0x0000030a,0x0000030b, + 0x0003003e,0x0000030f,0x0000030e,0x000200f9,0x000002fa,0x000200f8,0x000002fa,0x0004003d, + 0x00000014,0x00000310,0x000002f6,0x00050080,0x00000014,0x00000311,0x00000310,0x000000c9, + 0x0003003e,0x000002f6,0x00000311,0x000200f9,0x000002f7,0x000200f8,0x000002f9,0x0004003d, + 0x0000001b,0x00000314,0x0000030a,0x0003003e,0x00000313,0x00000314,0x00050039,0x00000023, + 0x00000315,0x00000033,0x00000313,0x0003003e,0x00000312,0x00000315,0x0004003d,0x00000014, + 0x00000316,0x0000013f,0x0004003d,0x00000023,0x00000318,0x00000312,0x0003003e,0x00000317, + 0x00000318,0x00050039,0x0000002a,0x00000319,0x00000037,0x00000317,0x00060041,0x000001a6, + 0x0000031a,0x0000019b,0x000000bc,0x00000316,0x0003003e,0x0000031a,0x00000319,0x00050041, + 0x00000152,0x0000031c,0x00000151,0x0000031b,0x0004003d,0x00000014,0x0000031d,0x0000031c, + 0x000500ab,0x00000046,0x0000031e,0x0000031d,0x00000093,0x000300f7,0x00000320,0x00000000, + 0x000400fa,0x0000031e,0x0000031f,0x00000320,0x000200f8,0x0000031f,0x0004003d,0x00000014, + 0x00000321,0x0000013f,0x0004003d,0x00000023,0x00000322,0x00000312,0x00060041,0x00000192, + 0x00000323,0x0000017f,0x000000bc,0x00000321,0x0003003e,0x00000323,0x00000322,0x000200f9, + 0x00000320,0x000200f8,0x00000320,0x000200f9,0x000002c3,0x000200f8,0x000002c3,0x000200f9, + 0x0000024a,0x000200f8,0x0000024a,0x000200f9,0x000001ab,0x000200f8,0x000001ab,0x000200f9, + 0x00000197,0x000200f8,0x00000197,0x000200f9,0x00000169,0x000200f8,0x00000169,0x000100fd, + 0x00010038,0x00050036,0x00000006,0x0000000a,0x00000000,0x00000008,0x00030037,0x00000007, + 0x00000009,0x000200f8,0x0000000b,0x0004003b,0x00000015,0x00000039,0x00000007,0x0004003b, + 0x00000015,0x0000003c,0x00000007,0x0004003b,0x00000015,0x00000040,0x00000007,0x0004003b, + 0x00000007,0x0000005a,0x00000007,0x0004003b,0x00000015,0x0000006b,0x00000007,0x0004003b, + 0x00000015,0x00000071,0x00000007,0x0004003d,0x00000006,0x0000003a,0x00000009,0x0004007c, + 0x00000014,0x0000003b,0x0000003a,0x0003003e,0x00000039,0x0000003b,0x0004003d,0x00000014, + 0x0000003d,0x00000039,0x000500c7,0x00000014,0x0000003f,0x0000003d,0x0000003e,0x0003003e, + 0x0000003c,0x0000003f,0x0004003d,0x00000014,0x00000041,0x00000039,0x000500c7,0x00000014, + 0x00000043,0x00000041,0x00000042,0x0003003e,0x00000040,0x00000043,0x0004003d,0x00000014, + 0x00000044,0x00000040,0x000500ae,0x00000046,0x00000047,0x00000044,0x00000045,0x000300f7, + 0x00000049,0x00000000,0x000400fa,0x00000047,0x00000048,0x00000049,0x000200f8,0x00000048, + 0x0004003d,0x00000006,0x0000004a,0x00000009,0x000200fe,0x0000004a,0x000200f8,0x00000049, + 0x0004003d,0x00000014,0x0000004c,0x00000040,0x000500ae,0x00000046,0x0000004e,0x0000004c, + 0x0000004d,0x000300f7,0x00000050,0x00000000,0x000400fa,0x0000004e,0x0000004f,0x00000050, + 0x000200f8,0x0000004f,0x0004003d,0x00000014,0x00000051,0x0000003c,0x000500c5,0x00000014, + 0x00000052,0x00000051,0x00000045,0x0004007c,0x00000006,0x00000053,0x00000052,0x000200fe, + 0x00000053,0x000200f8,0x00000050,0x0004003d,0x00000014,0x00000055,0x00000040,0x000500b0, + 0x00000046,0x00000057,0x00000055,0x00000056,0x000300f7,0x00000059,0x00000000,0x000400fa, + 0x00000057,0x00000058,0x00000059,0x000200f8,0x00000058,0x0004003d,0x00000014,0x0000005b, + 0x00000040,0x0004007c,0x00000006,0x0000005c,0x0000005b,0x00050085,0x00000006,0x0000005e, + 0x0000005c,0x0000005d,0x0006000c,0x00000006,0x0000005f,0x00000001,0x00000002,0x0000005e, + 0x0003003e,0x0000005a,0x0000005f,0x0004003d,0x00000014,0x00000060,0x0000003c,0x0004007c, + 0x00000006,0x00000061,0x00000060,0x0004003d,0x00000014,0x00000062,0x0000003c,0x0004003d, + 0x00000006,0x00000063,0x0000005a,0x00050085,0x00000006,0x00000065,0x00000063,0x00000064, + 0x0004007c,0x00000014,0x00000066,0x00000065,0x000500c5,0x00000014,0x00000067,0x00000062, + 0x00000066,0x0004007c,0x00000006,0x00000068,0x00000067,0x00050081,0x00000006,0x00000069, + 0x00000061,0x00000068,0x000200fe,0x00000069,0x000200f8,0x00000059,0x0004003d,0x00000014, + 0x0000006c,0x00000040,0x000500c2,0x00000014,0x0000006e,0x0000006c,0x0000006d,0x000500c7, + 0x00000014,0x00000070,0x0000006e,0x0000006f,0x0003003e,0x0000006b,0x00000070,0x0004003d, + 0x00000014,0x00000072,0x00000040,0x00050080,0x00000014,0x00000074,0x00000072,0x00000073, + 0x0004003d,0x00000014,0x00000075,0x0000006b,0x00050080,0x00000014,0x00000076,0x00000074, + 0x00000075,0x000500c7,0x00000014,0x00000078,0x00000076,0x00000077,0x0003003e,0x00000071, + 0x00000078,0x0004003d,0x00000014,0x00000079,0x0000003c,0x0004003d,0x00000014,0x0000007a, + 0x00000071,0x000500c5,0x00000014,0x0000007b,0x00000079,0x0000007a,0x0004007c,0x00000006, + 0x0000007c,0x0000007b,0x000200fe,0x0000007c,0x00010038,0x00050036,0x0000000f,0x00000012, + 0x00000000,0x00000010,0x00030037,0x0000000e,0x00000011,0x000200f8,0x00000013,0x0004003b, + 0x0000000e,0x0000007f,0x00000007,0x0004003b,0x00000089,0x0000008a,0x00000007,0x0004003b, + 0x0000008f,0x00000090,0x00000007,0x0004003d,0x0000000d,0x00000080,0x00000011,0x0004003d, + 0x0000000d,0x00000083,0x00000011,0x0004009c,0x00000084,0x00000085,0x00000083,0x000600a9, + 0x0000000d,0x00000086,0x00000085,0x00000082,0x00000080,0x0003003e,0x0000007f,0x00000086, + 0x0004003d,0x0000000d,0x0000008b,0x0000007f,0x00040073,0x00000088,0x0000008c,0x0000008b, + 0x0003003e,0x0000008a,0x0000008c,0x0004003d,0x00000088,0x00000091,0x0000008a,0x0004007c, + 0x0000008e,0x00000092,0x00000091,0x0003003e,0x00000090,0x00000092,0x00050041,0x00000094, + 0x00000095,0x00000090,0x00000093,0x0004003d,0x0000008d,0x00000096,0x00000095,0x00040071, + 0x00000014,0x00000097,0x00000096,0x00050041,0x00000094,0x00000098,0x00000090,0x0000006f, + 0x0004003d,0x0000008d,0x00000099,0x00000098,0x00040071,0x00000014,0x0000009a,0x00000099, + 0x000500c4,0x00000014,0x0000009b,0x0000009a,0x0000001a,0x000500c5,0x00000014,0x0000009c, + 0x00000097,0x0000009b,0x00040071,0x0000000f,0x0000009d,0x0000009c,0x000200fe,0x0000009d, + 0x00010038,0x00050036,0x00000006,0x00000018,0x00000000,0x00000016,0x00030037,0x00000015, + 0x00000017,0x000200f8,0x00000019,0x0004003b,0x00000007,0x000000a0,0x00000007,0x0004003d, + 0x00000014,0x000000a1,0x00000017,0x000500c7,0x00000014,0x000000a3,0x000000a1,0x000000a2, + 0x00040071,0x0000008d,0x000000a4,0x000000a3,0x0004007c,0x00000087,0x000000a5,0x000000a4, + 0x00040073,0x00000006,0x000000a6,0x000000a5,0x0003003e,0x000000a0,0x000000a6,0x0004003d, + 0x00000006,0x000000a7,0x000000a0,0x0004009c,0x00000046,0x000000a8,0x000000a7,0x0004003d, + 0x00000006,0x000000aa,0x000000a0,0x000600a9,0x00000006,0x000000ab,0x000000a8,0x000000a9, + 0x000000aa,0x000200fe,0x000000ab,0x00010038,0x00050036,0x00000002,0x00000021,0x00000000, + 0x0000001d,0x00030037,0x00000015,0x0000001e,0x00030037,0x00000015,0x0000001f,0x00030037, + 0x0000001c,0x00000020,0x000200f8,0x00000022,0x0004003b,0x00000015,0x000000ae,0x00000007, + 0x0003003e,0x000000ae,0x00000093,0x000200f9,0x000000af,0x000200f8,0x000000af,0x000400f6, + 0x000000b1,0x000000b2,0x00000001,0x000200f9,0x000000b3,0x000200f8,0x000000b3,0x0004003d, + 0x00000014,0x000000b4,0x000000ae,0x000500b0,0x00000046,0x000000b5,0x000000b4,0x0000001a, + 0x000400fa,0x000000b5,0x000000b0,0x000000b1,0x000200f8,0x000000b0,0x0004003d,0x00000014, + 0x000000b6,0x000000ae,0x0004003d,0x00000014,0x000000bd,0x0000001e,0x0004003d,0x00000014, + 0x000000be,0x0000001f,0x00050080,0x00000014,0x000000bf,0x000000bd,0x000000be,0x0004003d, + 0x00000014,0x000000c0,0x000000ae,0x00050080,0x00000014,0x000000c1,0x000000bf,0x000000c0, + 0x00060041,0x000000c2,0x000000c3,0x000000ba,0x000000bc,0x000000c1,0x0004003d,0x0000000f, + 0x000000c4,0x000000c3,0x0004007c,0x0000000c,0x000000c5,0x000000c4,0x00040073,0x00000006, + 0x000000c6,0x000000c5,0x00050041,0x00000007,0x000000c7,0x00000020,0x000000b6,0x0003003e, + 0x000000c7,0x000000c6,0x000200f9,0x000000b2,0x000200f8,0x000000b2,0x0004003d,0x00000014, + 0x000000c8,0x000000ae,0x00050080,0x00000014,0x000000ca,0x000000c8,0x000000c9,0x0003003e, + 0x000000ae,0x000000ca,0x000200f9,0x000000af,0x000200f8,0x000000b1,0x000100fd,0x00010038, + 0x00050036,0x00000002,0x00000028,0x00000000,0x00000025,0x00030037,0x00000024,0x00000026, + 0x00030037,0x0000001c,0x00000027,0x000200f8,0x00000029,0x0004003b,0x00000015,0x000000cb, + 0x00000007,0x0004003b,0x000000d5,0x000000d6,0x00000007,0x0003003e,0x000000cb,0x00000093, + 0x000200f9,0x000000cc,0x000200f8,0x000000cc,0x000400f6,0x000000ce,0x000000cf,0x00000001, + 0x000200f9,0x000000d0,0x000200f8,0x000000d0,0x0004003d,0x00000014,0x000000d1,0x000000cb, + 0x000500b0,0x00000046,0x000000d3,0x000000d1,0x000000d2,0x000400fa,0x000000d3,0x000000cd, + 0x000000ce,0x000200f8,0x000000cd,0x0004003d,0x00000014,0x000000d7,0x000000cb,0x00050041, + 0x00000015,0x000000d8,0x00000026,0x000000d7,0x0004003d,0x00000014,0x000000d9,0x000000d8, + 0x0004007c,0x0000000d,0x000000da,0x000000d9,0x00040073,0x000000d4,0x000000db,0x000000da, + 0x0003003e,0x000000d6,0x000000db,0x0004003d,0x00000014,0x000000dd,0x000000cb,0x00050084, + 0x00000014,0x000000de,0x000000dc,0x000000dd,0x00050041,0x00000007,0x000000df,0x000000d6, + 0x00000093,0x0004003d,0x00000006,0x000000e0,0x000000df,0x00050041,0x00000007,0x000000e1, + 0x00000027,0x000000de,0x0003003e,0x000000e1,0x000000e0,0x0004003d,0x00000014,0x000000e2, + 0x000000cb,0x00050084,0x00000014,0x000000e3,0x000000dc,0x000000e2,0x00050080,0x00000014, + 0x000000e4,0x000000e3,0x0000006f,0x00050041,0x00000007,0x000000e5,0x000000d6,0x0000006f, + 0x0004003d,0x00000006,0x000000e6,0x000000e5,0x00050041,0x00000007,0x000000e7,0x00000027, + 0x000000e4,0x0003003e,0x000000e7,0x000000e6,0x000200f9,0x000000cf,0x000200f8,0x000000cf, + 0x0004003d,0x00000014,0x000000e8,0x000000cb,0x00050080,0x00000014,0x000000e9,0x000000e8, + 0x000000c9,0x0003003e,0x000000cb,0x000000e9,0x000200f9,0x000000cc,0x000200f8,0x000000ce, + 0x000100fd,0x00010038,0x00050036,0x00000002,0x0000002f,0x00000000,0x0000002c,0x00030037, + 0x0000002b,0x0000002d,0x00030037,0x0000001c,0x0000002e,0x000200f8,0x00000030,0x0004003b, + 0x00000015,0x000000ea,0x00000007,0x0004003b,0x00000015,0x000000fd,0x00000007,0x0003003e, + 0x000000ea,0x00000093,0x000200f9,0x000000eb,0x000200f8,0x000000eb,0x000400f6,0x000000ed, + 0x000000ee,0x00000001,0x000200f9,0x000000ef,0x000200f8,0x000000ef,0x0004003d,0x00000014, + 0x000000f0,0x000000ea,0x000500b0,0x00000046,0x000000f1,0x000000f0,0x0000001a,0x000400fa, + 0x000000f1,0x000000ec,0x000000ed,0x000200f8,0x000000ec,0x0004003d,0x00000014,0x000000f2, + 0x000000ea,0x0004003d,0x00000014,0x000000f3,0x000000ea,0x000500c2,0x00000014,0x000000f4, + 0x000000f3,0x000000dc,0x00050041,0x00000015,0x000000f5,0x0000002d,0x000000f4,0x0004003d, + 0x00000014,0x000000f6,0x000000f5,0x0004003d,0x00000014,0x000000f7,0x000000ea,0x000500c7, + 0x00000014,0x000000f9,0x000000f7,0x000000f8,0x00050084,0x00000014,0x000000fa,0x000000f9, + 0x0000001a,0x000500c2,0x00000014,0x000000fb,0x000000f6,0x000000fa,0x000500c7,0x00000014, + 0x000000fc,0x000000fb,0x000000a2,0x0003003e,0x000000fd,0x000000fc,0x00050039,0x00000006, + 0x000000fe,0x00000018,0x000000fd,0x00050041,0x00000007,0x000000ff,0x0000002e,0x000000f2, + 0x0003003e,0x000000ff,0x000000fe,0x000200f9,0x000000ee,0x000200f8,0x000000ee,0x0004003d, + 0x00000014,0x00000100,0x000000ea,0x00050080,0x00000014,0x00000101,0x00000100,0x000000c9, + 0x0003003e,0x000000ea,0x00000101,0x000200f9,0x000000eb,0x000200f8,0x000000ed,0x000100fd, + 0x00010038,0x00050036,0x00000023,0x00000033,0x00000000,0x00000031,0x00030037,0x0000001c, + 0x00000032,0x000200f8,0x00000034,0x0004003b,0x00000015,0x00000102,0x00000007,0x0004003b, + 0x00000024,0x0000010a,0x00000007,0x0003003e,0x00000102,0x00000093,0x000200f9,0x00000103, + 0x000200f8,0x00000103,0x000400f6,0x00000105,0x00000106,0x00000001,0x000200f9,0x00000107, + 0x000200f8,0x00000107,0x0004003d,0x00000014,0x00000108,0x00000102,0x000500b0,0x00000046, + 0x00000109,0x00000108,0x000000d2,0x000400fa,0x00000109,0x00000104,0x00000105,0x000200f8, + 0x00000104,0x0004003d,0x00000014,0x0000010b,0x00000102,0x0004003d,0x00000014,0x0000010c, + 0x00000102,0x00050084,0x00000014,0x0000010d,0x000000dc,0x0000010c,0x00050041,0x00000007, + 0x0000010e,0x00000032,0x0000010d,0x0004003d,0x00000006,0x0000010f,0x0000010e,0x00040073, + 0x0000000c,0x00000110,0x0000010f,0x0004003d,0x00000014,0x00000111,0x00000102,0x00050084, + 0x00000014,0x00000112,0x000000dc,0x00000111,0x00050080,0x00000014,0x00000113,0x00000112, + 0x0000006f,0x00050041,0x00000007,0x00000114,0x00000032,0x00000113,0x0004003d,0x00000006, + 0x00000115,0x00000114,0x00040073,0x0000000c,0x00000116,0x00000115,0x00050050,0x0000000d, + 0x00000117,0x00000110,0x00000116,0x0004007c,0x00000014,0x00000118,0x00000117,0x00050041, + 0x00000015,0x00000119,0x0000010a,0x0000010b,0x0003003e,0x00000119,0x00000118,0x000200f9, + 0x00000106,0x000200f8,0x00000106,0x0004003d,0x00000014,0x0000011a,0x00000102,0x00050080, + 0x00000014,0x0000011b,0x0000011a,0x000000c9,0x0003003e,0x00000102,0x0000011b,0x000200f9, + 0x00000103,0x000200f8,0x00000105,0x0004003d,0x00000023,0x0000011c,0x0000010a,0x000200fe, + 0x0000011c,0x00010038,0x00050036,0x0000002a,0x00000037,0x00000000,0x00000035,0x00030037, + 0x00000024,0x00000036,0x000200f8,0x00000038,0x0004003b,0x0000000e,0x00000122,0x00000007, + 0x0004003b,0x0000000e,0x00000128,0x00000007,0x0004003b,0x0000000e,0x00000131,0x00000007, + 0x0004003b,0x0000000e,0x00000137,0x00000007,0x00050041,0x00000015,0x0000011f,0x00000036, + 0x00000093,0x0004003d,0x00000014,0x00000120,0x0000011f,0x0004007c,0x0000000d,0x00000121, + 0x00000120,0x0003003e,0x00000122,0x00000121,0x00050039,0x0000000f,0x00000123,0x00000012, + 0x00000122,0x00040071,0x00000014,0x00000124,0x00000123,0x00050041,0x00000015,0x00000125, + 0x00000036,0x0000006f,0x0004003d,0x00000014,0x00000126,0x00000125,0x0004007c,0x0000000d, + 0x00000127,0x00000126,0x0003003e,0x00000128,0x00000127,0x00050039,0x0000000f,0x00000129, + 0x00000012,0x00000128,0x00040071,0x00000014,0x0000012a,0x00000129,0x000500c4,0x00000014, + 0x0000012c,0x0000012a,0x0000012b,0x000500c5,0x00000014,0x0000012d,0x00000124,0x0000012c, + 0x00050041,0x00000015,0x0000012e,0x00000036,0x000000dc,0x0004003d,0x00000014,0x0000012f, + 0x0000012e,0x0004007c,0x0000000d,0x00000130,0x0000012f,0x0003003e,0x00000131,0x00000130, + 0x00050039,0x0000000f,0x00000132,0x00000012,0x00000131,0x00040071,0x00000014,0x00000133, + 0x00000132,0x00050041,0x00000015,0x00000134,0x00000036,0x000000f8,0x0004003d,0x00000014, + 0x00000135,0x00000134,0x0004007c,0x0000000d,0x00000136,0x00000135,0x0003003e,0x00000137, + 0x00000136,0x00050039,0x0000000f,0x00000138,0x00000012,0x00000137,0x00040071,0x00000014, + 0x00000139,0x00000138,0x000500c4,0x00000014,0x0000013a,0x00000139,0x0000012b,0x000500c5, + 0x00000014,0x0000013b,0x00000133,0x0000013a,0x00050050,0x0000002a,0x0000013c,0x0000012d, + 0x0000013b,0x000200fe,0x0000013c,0x00010038, +}; +inline constexpr uint32_t k_window_normalize[] = { + 0x07230203,0x00010600,0x0008000b,0x0000020e,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x00001151,0x00020011,0x00001160,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x000a000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000119,0x00000127,0x00000156, + 0x000001bd,0x000001e3,0x00060010,0x00000004,0x00000011,0x00000100,0x00000001,0x00000001, + 0x00030003,0x00000002,0x000001cc,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x36315f72, + 0x5f746962,0x726f7473,0x00656761,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x62385f72, + 0x735f7469,0x61726f74,0x00006567,0x000b0004,0x455f4c47,0x735f5458,0x65646168,0x78655f72, + 0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004,0x475f4c47, + 0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576, + 0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669, + 0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000b,0x42363166,0x28737469, + 0x31363166,0x0000003b,0x00040005,0x0000000a,0x756c6176,0x00000065,0x00060005,0x00000011, + 0x66696873,0x656e5274,0x3b317528,0x003b3175,0x00040005,0x0000000f,0x756c6176,0x00000065, + 0x00040005,0x00000010,0x66696873,0x00000074,0x00080005,0x00000015,0x336d3465,0x65646f43, + 0x6d6f7246,0x42363146,0x28737469,0x003b3175,0x00050005,0x00000014,0x666c6168,0x73746942, + 0x00000000,0x00070005,0x0000001c,0x65657274,0x316d7553,0x31662836,0x315b3136,0x003b5d36, + 0x00030005,0x0000001b,0x00000072,0x00050005,0x00000024,0x746f7571,0x746e6569,0x00000000, + 0x00060005,0x00000028,0x616d6572,0x65646e69,0x73614d72,0x0000006b,0x00050005,0x0000002d, + 0x616d6572,0x65646e69,0x00000072,0x00040005,0x00000031,0x666c6168,0x00796177,0x00040005, + 0x0000004d,0x614e7369,0x0000006e,0x00050005,0x00000069,0x6167656e,0x65766974,0x00000000, + 0x00050005,0x0000006f,0x6f707865,0x746e656e,0x00000000,0x00050005,0x00000075,0x746e616d, + 0x61737369,0x00000000,0x00040005,0x0000007c,0x65646f63,0x00000000,0x00050005,0x00000083, + 0x6e676973,0x63696669,0x00646e61,0x00040005,0x0000008f,0x66696873,0x00000074,0x00040005, + 0x0000009a,0x61726170,0x0000006d,0x00040005,0x0000009c,0x61726170,0x0000006d,0x00050005, + 0x000000a1,0x78453465,0x656e6f70,0x0000746e,0x00050005,0x000000a4,0x614d3465,0x7369746e, + 0x00006173,0x00040005,0x000000a6,0x61726170,0x0000006d,0x00040005,0x000000a8,0x61726170, + 0x0000006d,0x00030005,0x000000cb,0x00000063,0x00030005,0x000000d5,0x00003873,0x00030005, + 0x000000e4,0x00000063,0x00030005,0x000000ef,0x00003473,0x00030005,0x000000ff,0x00003273, + 0x00030005,0x00000116,0x00006469,0x00080005,0x00000119,0x475f6c67,0x61626f6c,0x766e496c, + 0x7461636f,0x496e6f69,0x00000044,0x00040005,0x00000125,0x68737550,0x00000000,0x00050006, + 0x00000125,0x00000000,0x656b6f74,0x0000736e,0x00050006,0x00000125,0x00000001,0x64616568, + 0x00000073,0x00060006,0x00000125,0x00000002,0x6e616863,0x736c656e,0x00000000,0x00070006, + 0x00000125,0x00000003,0x6c616373,0x726f5765,0x66664f64,0x00746573,0x00030005,0x00000127, + 0x00006370,0x00040005,0x00000132,0x656b6f74,0x0000006e,0x00040005,0x00000137,0x64616568, + 0x00000000,0x00040005,0x0000013c,0x65736162,0x00000000,0x00030005,0x00000146,0x00000063, + 0x00030005,0x00000151,0x00000071,0x00030005,0x00000154,0x00766b51,0x00040006,0x00000154, + 0x00000000,0x00766b71,0x00030005,0x00000156,0x00000000,0x00030005,0x0000015e,0x0000006b, + 0x00030005,0x00000169,0x00000063,0x00050005,0x00000171,0x68676968,0x61757153,0x00006572, + 0x00030005,0x0000017b,0x00000072,0x00040005,0x00000188,0x6d755371,0x00000000,0x00040005, + 0x00000189,0x61726170,0x0000006d,0x00030005,0x0000018c,0x00000063,0x00050005,0x00000194, + 0x68676968,0x61757153,0x00006572,0x00040005,0x000001aa,0x6d75536b,0x00000000,0x00040005, + 0x000001ab,0x61726170,0x0000006d,0x00040005,0x000001ae,0x726f4e71,0x0000006d,0x00040005, + 0x000001b4,0x726f4e6b,0x0000006d,0x00040005,0x000001b9,0x6c616373,0x00000065,0x00030005, + 0x000001bb,0x00787541,0x00050006,0x000001bb,0x00000000,0x33787561,0x00000032,0x00030005, + 0x000001bd,0x00000000,0x00030005,0x000001c7,0x00000063,0x00030005,0x000001cf,0x0000716e, + 0x00030005,0x000001d5,0x0073716e,0x00030005,0x000001d9,0x00006b6e,0x00050005,0x000001e1, + 0x6d726f4e,0x7a696c61,0x00006465,0x00060006,0x000001e1,0x00000000,0x6d726f6e,0x7a696c61, + 0x00006465,0x00030005,0x000001e3,0x00000000,0x00040005,0x000001e7,0x61726170,0x0000006d, + 0x00040005,0x000001ea,0x61726170,0x0000006d,0x00040005,0x000001f3,0x61726170,0x0000006d, + 0x00040005,0x000001f6,0x61726170,0x0000006d,0x00040005,0x00000203,0x61726170,0x0000006d, + 0x00040005,0x00000207,0x61726170,0x0000006d,0x00030047,0x000000de,0x0000002a,0x00030047, + 0x000000f8,0x0000002a,0x00030047,0x00000106,0x0000002a,0x00030047,0x0000010d,0x0000002a, + 0x00040047,0x00000119,0x0000000b,0x0000001c,0x00030047,0x00000125,0x00000002,0x00050048, + 0x00000125,0x00000000,0x00000023,0x00000000,0x00050048,0x00000125,0x00000001,0x00000023, + 0x00000004,0x00050048,0x00000125,0x00000002,0x00000023,0x00000008,0x00050048,0x00000125, + 0x00000003,0x00000023,0x0000000c,0x00040047,0x00000153,0x00000006,0x00000002,0x00030047, + 0x00000154,0x00000002,0x00040048,0x00000154,0x00000000,0x00000018,0x00050048,0x00000154, + 0x00000000,0x00000023,0x00000000,0x00030047,0x00000156,0x00000018,0x00040047,0x00000156, + 0x00000021,0x00000001,0x00040047,0x00000156,0x00000022,0x00000000,0x00030047,0x0000017a, + 0x0000002a,0x00030047,0x0000019d,0x0000002a,0x00040047,0x000001ba,0x00000006,0x00000004, + 0x00030047,0x000001bb,0x00000002,0x00040048,0x000001bb,0x00000000,0x00000018,0x00050048, + 0x000001bb,0x00000000,0x00000023,0x00000000,0x00030047,0x000001bd,0x00000018,0x00040047, + 0x000001bd,0x00000021,0x00000004,0x00040047,0x000001bd,0x00000022,0x00000000,0x00030047, + 0x000001d4,0x0000002a,0x00030047,0x000001d8,0x0000002a,0x00030047,0x000001de,0x0000002a, + 0x00040047,0x000001e0,0x00000006,0x00000001,0x00030047,0x000001e1,0x00000002,0x00040048, + 0x000001e1,0x00000000,0x00000019,0x00050048,0x000001e1,0x00000000,0x00000023,0x00000000, + 0x00030047,0x000001e3,0x00000019,0x00040047,0x000001e3,0x00000021,0x00000005,0x00040047, + 0x000001e3,0x00000022,0x00000000,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002, + 0x00030016,0x00000006,0x00000010,0x00040020,0x00000007,0x00000007,0x00000006,0x00040015, + 0x00000008,0x00000020,0x00000000,0x00040021,0x00000009,0x00000008,0x00000007,0x00040020, + 0x0000000d,0x00000007,0x00000008,0x00050021,0x0000000e,0x00000008,0x0000000d,0x0000000d, + 0x00040021,0x00000013,0x00000008,0x0000000d,0x0004002b,0x00000008,0x00000017,0x00000010, + 0x0004001c,0x00000018,0x00000006,0x00000017,0x00040020,0x00000019,0x00000007,0x00000018, + 0x00040021,0x0000001a,0x00000006,0x00000019,0x00040015,0x0000001f,0x00000010,0x00000000, + 0x0004002b,0x00000008,0x00000029,0x00000001,0x00020014,0x00000036,0x0004002b,0x00000008, + 0x00000044,0x00000000,0x00040020,0x0000004c,0x00000007,0x00000036,0x0004002b,0x00000008, + 0x0000004f,0x00007c00,0x0004002b,0x00000008,0x00000055,0x000003ff,0x0004002b,0x00000008, + 0x0000005e,0x00007fff,0x0004002b,0x00000008,0x00000064,0x00000008,0x0004002b,0x00000008, + 0x00000066,0x00000080,0x0004002b,0x00000008,0x0000006b,0x00008000,0x0004002b,0x00000008, + 0x00000071,0x0000000a,0x0004002b,0x00000008,0x00000073,0x0000001f,0x0004002b,0x00000008, + 0x0000007d,0x0000007e,0x0004002b,0x00000008,0x0000008b,0x00000400,0x0004002b,0x00000008, + 0x00000095,0x0000000f,0x0004002b,0x00000008,0x000000a5,0x00000007,0x0004002b,0x00000008, + 0x000000b8,0x00000006,0x0004002b,0x00000008,0x000000c1,0x00000003,0x0004001c,0x000000d3, + 0x00000006,0x00000064,0x00040020,0x000000d4,0x00000007,0x000000d3,0x00040015,0x000000e1, + 0x00000020,0x00000001,0x0004002b,0x000000e1,0x000000e2,0x00000001,0x0004002b,0x00000008, + 0x000000eb,0x00000004,0x0004001c,0x000000ed,0x00000006,0x000000eb,0x00040020,0x000000ee, + 0x00000007,0x000000ed,0x0004002b,0x00000008,0x000000fc,0x00000002,0x0004001c,0x000000fd, + 0x00000006,0x000000fc,0x00040020,0x000000fe,0x00000007,0x000000fd,0x0004002b,0x000000e1, + 0x00000100,0x00000000,0x0004002b,0x000000e1,0x00000103,0x00000002,0x0004002b,0x000000e1, + 0x0000010a,0x00000003,0x00040017,0x00000117,0x00000008,0x00000003,0x00040020,0x00000118, + 0x00000001,0x00000117,0x0004003b,0x00000118,0x00000119,0x00000001,0x00040020,0x0000011a, + 0x00000001,0x00000008,0x0004002b,0x00000008,0x0000011f,0x0000ffff,0x0004002b,0x00000008, + 0x00000121,0x00000100,0x0006001e,0x00000125,0x00000008,0x00000008,0x00000008,0x00000008, + 0x00040020,0x00000126,0x00000009,0x00000125,0x0004003b,0x00000126,0x00000127,0x00000009, + 0x00040020,0x00000128,0x00000009,0x00000008,0x0004002b,0x00000008,0x00000143,0x00000060, + 0x0004002b,0x00000008,0x0000014d,0x00000020,0x0004001c,0x0000014f,0x00000006,0x0000014d, + 0x00040020,0x00000150,0x00000007,0x0000014f,0x0003001d,0x00000153,0x00000006,0x0003001e, + 0x00000154,0x00000153,0x00040020,0x00000155,0x0000000c,0x00000154,0x0004003b,0x00000155, + 0x00000156,0x0000000c,0x00040020,0x0000015a,0x0000000c,0x00000006,0x00030016,0x000001b0, + 0x00000020,0x0003001d,0x000001ba,0x00000008,0x0003001e,0x000001bb,0x000001ba,0x00040020, + 0x000001bc,0x0000000c,0x000001bb,0x0004003b,0x000001bc,0x000001bd,0x0000000c,0x00040020, + 0x000001c2,0x0000000c,0x00000008,0x00040015,0x000001df,0x00000008,0x00000000,0x0003001d, + 0x000001e0,0x000001df,0x0003001e,0x000001e1,0x000001e0,0x00040020,0x000001e2,0x0000000c, + 0x000001e1,0x0004003b,0x000001e2,0x000001e3,0x0000000c,0x00040020,0x000001ed,0x0000000c, + 0x000001df,0x0004002b,0x00000008,0x000001fb,0x00000040,0x0006002c,0x00000117,0x0000020d, + 0x00000121,0x00000029,0x00000029,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003, + 0x000200f8,0x00000005,0x0004003b,0x0000000d,0x00000116,0x00000007,0x0004003b,0x0000000d, + 0x00000132,0x00000007,0x0004003b,0x0000000d,0x00000137,0x00000007,0x0004003b,0x0000000d, + 0x0000013c,0x00000007,0x0004003b,0x0000000d,0x00000146,0x00000007,0x0004003b,0x00000150, + 0x00000151,0x00000007,0x0004003b,0x00000150,0x0000015e,0x00000007,0x0004003b,0x0000000d, + 0x00000169,0x00000007,0x0004003b,0x00000007,0x00000171,0x00000007,0x0004003b,0x00000019, + 0x0000017b,0x00000007,0x0004003b,0x00000007,0x00000188,0x00000007,0x0004003b,0x00000019, + 0x00000189,0x00000007,0x0004003b,0x0000000d,0x0000018c,0x00000007,0x0004003b,0x00000007, + 0x00000194,0x00000007,0x0004003b,0x00000007,0x000001aa,0x00000007,0x0004003b,0x00000019, + 0x000001ab,0x00000007,0x0004003b,0x00000007,0x000001ae,0x00000007,0x0004003b,0x00000007, + 0x000001b4,0x00000007,0x0004003b,0x00000007,0x000001b9,0x00000007,0x0004003b,0x0000000d, + 0x000001c7,0x00000007,0x0004003b,0x00000007,0x000001cf,0x00000007,0x0004003b,0x00000007, + 0x000001d5,0x00000007,0x0004003b,0x00000007,0x000001d9,0x00000007,0x0004003b,0x00000007, + 0x000001e7,0x00000007,0x0004003b,0x0000000d,0x000001ea,0x00000007,0x0004003b,0x00000007, + 0x000001f3,0x00000007,0x0004003b,0x0000000d,0x000001f6,0x00000007,0x0004003b,0x00000007, + 0x00000203,0x00000007,0x0004003b,0x0000000d,0x00000207,0x00000007,0x00050041,0x0000011a, + 0x0000011b,0x00000119,0x00000044,0x0004003d,0x00000008,0x0000011c,0x0000011b,0x00050041, + 0x0000011a,0x0000011d,0x00000119,0x00000029,0x0004003d,0x00000008,0x0000011e,0x0000011d, + 0x00050084,0x00000008,0x00000120,0x0000011e,0x0000011f,0x00050084,0x00000008,0x00000122, + 0x00000120,0x00000121,0x00050080,0x00000008,0x00000123,0x0000011c,0x00000122,0x0003003e, + 0x00000116,0x00000123,0x0004003d,0x00000008,0x00000124,0x00000116,0x00050041,0x00000128, + 0x00000129,0x00000127,0x00000100,0x0004003d,0x00000008,0x0000012a,0x00000129,0x00050041, + 0x00000128,0x0000012b,0x00000127,0x000000e2,0x0004003d,0x00000008,0x0000012c,0x0000012b, + 0x00050084,0x00000008,0x0000012d,0x0000012a,0x0000012c,0x000500ae,0x00000036,0x0000012e, + 0x00000124,0x0000012d,0x000300f7,0x00000130,0x00000000,0x000400fa,0x0000012e,0x0000012f, + 0x00000130,0x000200f8,0x0000012f,0x000100fd,0x000200f8,0x00000130,0x0004003d,0x00000008, + 0x00000133,0x00000116,0x00050041,0x00000128,0x00000134,0x00000127,0x000000e2,0x0004003d, + 0x00000008,0x00000135,0x00000134,0x00050086,0x00000008,0x00000136,0x00000133,0x00000135, + 0x0003003e,0x00000132,0x00000136,0x0004003d,0x00000008,0x00000138,0x00000116,0x00050041, + 0x00000128,0x00000139,0x00000127,0x000000e2,0x0004003d,0x00000008,0x0000013a,0x00000139, + 0x00050089,0x00000008,0x0000013b,0x00000138,0x0000013a,0x0003003e,0x00000137,0x0000013b, + 0x0004003d,0x00000008,0x0000013d,0x00000132,0x00050041,0x00000128,0x0000013e,0x00000127, + 0x00000103,0x0004003d,0x00000008,0x0000013f,0x0000013e,0x00050084,0x00000008,0x00000140, + 0x0000013d,0x0000013f,0x00050084,0x00000008,0x00000141,0x00000140,0x000000c1,0x0004003d, + 0x00000008,0x00000142,0x00000137,0x00050084,0x00000008,0x00000144,0x00000142,0x00000143, + 0x00050080,0x00000008,0x00000145,0x00000141,0x00000144,0x0003003e,0x0000013c,0x00000145, + 0x0003003e,0x00000146,0x00000044,0x000200f9,0x00000147,0x000200f8,0x00000147,0x000400f6, + 0x00000149,0x0000014a,0x00000000,0x000200f9,0x0000014b,0x000200f8,0x0000014b,0x0004003d, + 0x00000008,0x0000014c,0x00000146,0x000500b0,0x00000036,0x0000014e,0x0000014c,0x0000014d, + 0x000400fa,0x0000014e,0x00000148,0x00000149,0x000200f8,0x00000148,0x0004003d,0x00000008, + 0x00000152,0x00000146,0x0004003d,0x00000008,0x00000157,0x0000013c,0x0004003d,0x00000008, + 0x00000158,0x00000146,0x00050080,0x00000008,0x00000159,0x00000157,0x00000158,0x00060041, + 0x0000015a,0x0000015b,0x00000156,0x00000100,0x00000159,0x0004003d,0x00000006,0x0000015c, + 0x0000015b,0x00050041,0x00000007,0x0000015d,0x00000151,0x00000152,0x0003003e,0x0000015d, + 0x0000015c,0x0004003d,0x00000008,0x0000015f,0x00000146,0x0004003d,0x00000008,0x00000160, + 0x0000013c,0x00050080,0x00000008,0x00000161,0x00000160,0x0000014d,0x0004003d,0x00000008, + 0x00000162,0x00000146,0x00050080,0x00000008,0x00000163,0x00000161,0x00000162,0x00060041, + 0x0000015a,0x00000164,0x00000156,0x00000100,0x00000163,0x0004003d,0x00000006,0x00000165, + 0x00000164,0x00050041,0x00000007,0x00000166,0x0000015e,0x0000015f,0x0003003e,0x00000166, + 0x00000165,0x000200f9,0x0000014a,0x000200f8,0x0000014a,0x0004003d,0x00000008,0x00000167, + 0x00000146,0x00050080,0x00000008,0x00000168,0x00000167,0x000000e2,0x0003003e,0x00000146, + 0x00000168,0x000200f9,0x00000147,0x000200f8,0x00000149,0x0003003e,0x00000169,0x00000044, + 0x000200f9,0x0000016a,0x000200f8,0x0000016a,0x000400f6,0x0000016c,0x0000016d,0x00000000, + 0x000200f9,0x0000016e,0x000200f8,0x0000016e,0x0004003d,0x00000008,0x0000016f,0x00000169, + 0x000500b0,0x00000036,0x00000170,0x0000016f,0x00000017,0x000400fa,0x00000170,0x0000016b, + 0x0000016c,0x000200f8,0x0000016b,0x0004003d,0x00000008,0x00000172,0x00000169,0x00050080, + 0x00000008,0x00000173,0x00000172,0x00000017,0x00050041,0x00000007,0x00000174,0x00000151, + 0x00000173,0x0004003d,0x00000006,0x00000175,0x00000174,0x0004003d,0x00000008,0x00000176, + 0x00000169,0x00050080,0x00000008,0x00000177,0x00000176,0x00000017,0x00050041,0x00000007, + 0x00000178,0x00000151,0x00000177,0x0004003d,0x00000006,0x00000179,0x00000178,0x00050085, + 0x00000006,0x0000017a,0x00000175,0x00000179,0x0003003e,0x00000171,0x0000017a,0x0004003d, + 0x00000008,0x0000017c,0x00000169,0x0004003d,0x00000008,0x0000017d,0x00000169,0x00050041, + 0x00000007,0x0000017e,0x00000151,0x0000017d,0x0004003d,0x00000006,0x0000017f,0x0000017e, + 0x0004003d,0x00000008,0x00000180,0x00000169,0x00050041,0x00000007,0x00000181,0x00000151, + 0x00000180,0x0004003d,0x00000006,0x00000182,0x00000181,0x0004003d,0x00000006,0x00000183, + 0x00000171,0x0008000c,0x00000006,0x00000184,0x00000001,0x00000032,0x0000017f,0x00000182, + 0x00000183,0x00050041,0x00000007,0x00000185,0x0000017b,0x0000017c,0x0003003e,0x00000185, + 0x00000184,0x000200f9,0x0000016d,0x000200f8,0x0000016d,0x0004003d,0x00000008,0x00000186, + 0x00000169,0x00050080,0x00000008,0x00000187,0x00000186,0x000000e2,0x0003003e,0x00000169, + 0x00000187,0x000200f9,0x0000016a,0x000200f8,0x0000016c,0x0004003d,0x00000018,0x0000018a, + 0x0000017b,0x0003003e,0x00000189,0x0000018a,0x00050039,0x00000006,0x0000018b,0x0000001c, + 0x00000189,0x0003003e,0x00000188,0x0000018b,0x0003003e,0x0000018c,0x00000044,0x000200f9, + 0x0000018d,0x000200f8,0x0000018d,0x000400f6,0x0000018f,0x00000190,0x00000000,0x000200f9, + 0x00000191,0x000200f8,0x00000191,0x0004003d,0x00000008,0x00000192,0x0000018c,0x000500b0, + 0x00000036,0x00000193,0x00000192,0x00000017,0x000400fa,0x00000193,0x0000018e,0x0000018f, + 0x000200f8,0x0000018e,0x0004003d,0x00000008,0x00000195,0x0000018c,0x00050080,0x00000008, + 0x00000196,0x00000195,0x00000017,0x00050041,0x00000007,0x00000197,0x0000015e,0x00000196, + 0x0004003d,0x00000006,0x00000198,0x00000197,0x0004003d,0x00000008,0x00000199,0x0000018c, + 0x00050080,0x00000008,0x0000019a,0x00000199,0x00000017,0x00050041,0x00000007,0x0000019b, + 0x0000015e,0x0000019a,0x0004003d,0x00000006,0x0000019c,0x0000019b,0x00050085,0x00000006, + 0x0000019d,0x00000198,0x0000019c,0x0003003e,0x00000194,0x0000019d,0x0004003d,0x00000008, + 0x0000019e,0x0000018c,0x0004003d,0x00000008,0x0000019f,0x0000018c,0x00050041,0x00000007, + 0x000001a0,0x0000015e,0x0000019f,0x0004003d,0x00000006,0x000001a1,0x000001a0,0x0004003d, + 0x00000008,0x000001a2,0x0000018c,0x00050041,0x00000007,0x000001a3,0x0000015e,0x000001a2, + 0x0004003d,0x00000006,0x000001a4,0x000001a3,0x0004003d,0x00000006,0x000001a5,0x00000194, + 0x0008000c,0x00000006,0x000001a6,0x00000001,0x00000032,0x000001a1,0x000001a4,0x000001a5, + 0x00050041,0x00000007,0x000001a7,0x0000017b,0x0000019e,0x0003003e,0x000001a7,0x000001a6, + 0x000200f9,0x00000190,0x000200f8,0x00000190,0x0004003d,0x00000008,0x000001a8,0x0000018c, + 0x00050080,0x00000008,0x000001a9,0x000001a8,0x000000e2,0x0003003e,0x0000018c,0x000001a9, + 0x000200f9,0x0000018d,0x000200f8,0x0000018f,0x0004003d,0x00000018,0x000001ac,0x0000017b, + 0x0003003e,0x000001ab,0x000001ac,0x00050039,0x00000006,0x000001ad,0x0000001c,0x000001ab, + 0x0003003e,0x000001aa,0x000001ad,0x0004003d,0x00000006,0x000001af,0x00000188,0x00040073, + 0x000001b0,0x000001b1,0x000001af,0x0006000c,0x000001b0,0x000001b2,0x00000001,0x00000020, + 0x000001b1,0x00040073,0x00000006,0x000001b3,0x000001b2,0x0003003e,0x000001ae,0x000001b3, + 0x0004003d,0x00000006,0x000001b5,0x000001aa,0x00040073,0x000001b0,0x000001b6,0x000001b5, + 0x0006000c,0x000001b0,0x000001b7,0x00000001,0x00000020,0x000001b6,0x00040073,0x00000006, + 0x000001b8,0x000001b7,0x0003003e,0x000001b4,0x000001b8,0x00050041,0x00000128,0x000001be, + 0x00000127,0x0000010a,0x0004003d,0x00000008,0x000001bf,0x000001be,0x0004003d,0x00000008, + 0x000001c0,0x00000137,0x00050080,0x00000008,0x000001c1,0x000001bf,0x000001c0,0x00060041, + 0x000001c2,0x000001c3,0x000001bd,0x00000100,0x000001c1,0x0004003d,0x00000008,0x000001c4, + 0x000001c3,0x0004007c,0x000001b0,0x000001c5,0x000001c4,0x00040073,0x00000006,0x000001c6, + 0x000001c5,0x0003003e,0x000001b9,0x000001c6,0x0003003e,0x000001c7,0x00000044,0x000200f9, + 0x000001c8,0x000200f8,0x000001c8,0x000400f6,0x000001ca,0x000001cb,0x00000000,0x000200f9, + 0x000001cc,0x000200f8,0x000001cc,0x0004003d,0x00000008,0x000001cd,0x000001c7,0x000500b0, + 0x00000036,0x000001ce,0x000001cd,0x0000014d,0x000400fa,0x000001ce,0x000001c9,0x000001ca, + 0x000200f8,0x000001c9,0x0004003d,0x00000008,0x000001d0,0x000001c7,0x00050041,0x00000007, + 0x000001d1,0x00000151,0x000001d0,0x0004003d,0x00000006,0x000001d2,0x000001d1,0x0004003d, + 0x00000006,0x000001d3,0x000001ae,0x00050085,0x00000006,0x000001d4,0x000001d2,0x000001d3, + 0x0003003e,0x000001cf,0x000001d4,0x0004003d,0x00000006,0x000001d6,0x000001cf,0x0004003d, + 0x00000006,0x000001d7,0x000001b9,0x00050085,0x00000006,0x000001d8,0x000001d6,0x000001d7, + 0x0003003e,0x000001d5,0x000001d8,0x0004003d,0x00000008,0x000001da,0x000001c7,0x00050041, + 0x00000007,0x000001db,0x0000015e,0x000001da,0x0004003d,0x00000006,0x000001dc,0x000001db, + 0x0004003d,0x00000006,0x000001dd,0x000001b4,0x00050085,0x00000006,0x000001de,0x000001dc, + 0x000001dd,0x0003003e,0x000001d9,0x000001de,0x0004003d,0x00000008,0x000001e4,0x0000013c, + 0x0004003d,0x00000008,0x000001e5,0x000001c7,0x00050080,0x00000008,0x000001e6,0x000001e4, + 0x000001e5,0x0004003d,0x00000006,0x000001e8,0x000001d5,0x0003003e,0x000001e7,0x000001e8, + 0x00050039,0x00000008,0x000001e9,0x0000000b,0x000001e7,0x0003003e,0x000001ea,0x000001e9, + 0x00050039,0x00000008,0x000001eb,0x00000015,0x000001ea,0x00040071,0x000001df,0x000001ec, + 0x000001eb,0x00060041,0x000001ed,0x000001ee,0x000001e3,0x00000100,0x000001e6,0x0003003e, + 0x000001ee,0x000001ec,0x0004003d,0x00000008,0x000001ef,0x0000013c,0x00050080,0x00000008, + 0x000001f0,0x000001ef,0x0000014d,0x0004003d,0x00000008,0x000001f1,0x000001c7,0x00050080, + 0x00000008,0x000001f2,0x000001f0,0x000001f1,0x0004003d,0x00000006,0x000001f4,0x000001d9, + 0x0003003e,0x000001f3,0x000001f4,0x00050039,0x00000008,0x000001f5,0x0000000b,0x000001f3, + 0x0003003e,0x000001f6,0x000001f5,0x00050039,0x00000008,0x000001f7,0x00000015,0x000001f6, + 0x00040071,0x000001df,0x000001f8,0x000001f7,0x00060041,0x000001ed,0x000001f9,0x000001e3, + 0x00000100,0x000001f2,0x0003003e,0x000001f9,0x000001f8,0x0004003d,0x00000008,0x000001fa, + 0x0000013c,0x00050080,0x00000008,0x000001fc,0x000001fa,0x000001fb,0x0004003d,0x00000008, + 0x000001fd,0x000001c7,0x00050080,0x00000008,0x000001fe,0x000001fc,0x000001fd,0x0004003d, + 0x00000008,0x000001ff,0x0000013c,0x00050080,0x00000008,0x00000200,0x000001ff,0x000001fb, + 0x0004003d,0x00000008,0x00000201,0x000001c7,0x00050080,0x00000008,0x00000202,0x00000200, + 0x00000201,0x00060041,0x0000015a,0x00000204,0x00000156,0x00000100,0x00000202,0x0004003d, + 0x00000006,0x00000205,0x00000204,0x0003003e,0x00000203,0x00000205,0x00050039,0x00000008, + 0x00000206,0x0000000b,0x00000203,0x0003003e,0x00000207,0x00000206,0x00050039,0x00000008, + 0x00000208,0x00000015,0x00000207,0x00040071,0x000001df,0x00000209,0x00000208,0x00060041, + 0x000001ed,0x0000020a,0x000001e3,0x00000100,0x000001fe,0x0003003e,0x0000020a,0x00000209, + 0x000200f9,0x000001cb,0x000200f8,0x000001cb,0x0004003d,0x00000008,0x0000020b,0x000001c7, + 0x00050080,0x00000008,0x0000020c,0x0000020b,0x000000e2,0x0003003e,0x000001c7,0x0000020c, + 0x000200f9,0x000001c8,0x000200f8,0x000001ca,0x000100fd,0x00010038,0x00050036,0x00000008, + 0x0000000b,0x00000000,0x00000009,0x00030037,0x00000007,0x0000000a,0x000200f8,0x0000000c, + 0x0004003d,0x00000006,0x0000001e,0x0000000a,0x0004007c,0x0000001f,0x00000020,0x0000001e, + 0x00040071,0x00000008,0x00000021,0x00000020,0x000200fe,0x00000021,0x00010038,0x00050036, + 0x00000008,0x00000011,0x00000000,0x0000000e,0x00030037,0x0000000d,0x0000000f,0x00030037, + 0x0000000d,0x00000010,0x000200f8,0x00000012,0x0004003b,0x0000000d,0x00000024,0x00000007, + 0x0004003b,0x0000000d,0x00000028,0x00000007,0x0004003b,0x0000000d,0x0000002d,0x00000007, + 0x0004003b,0x0000000d,0x00000031,0x00000007,0x0004003d,0x00000008,0x00000025,0x0000000f, + 0x0004003d,0x00000008,0x00000026,0x00000010,0x000500c2,0x00000008,0x00000027,0x00000025, + 0x00000026,0x0003003e,0x00000024,0x00000027,0x0004003d,0x00000008,0x0000002a,0x00000010, + 0x000500c4,0x00000008,0x0000002b,0x00000029,0x0000002a,0x00050082,0x00000008,0x0000002c, + 0x0000002b,0x00000029,0x0003003e,0x00000028,0x0000002c,0x0004003d,0x00000008,0x0000002e, + 0x0000000f,0x0004003d,0x00000008,0x0000002f,0x00000028,0x000500c7,0x00000008,0x00000030, + 0x0000002e,0x0000002f,0x0003003e,0x0000002d,0x00000030,0x0004003d,0x00000008,0x00000032, + 0x00000010,0x00050082,0x00000008,0x00000033,0x00000032,0x00000029,0x000500c4,0x00000008, + 0x00000034,0x00000029,0x00000033,0x0003003e,0x00000031,0x00000034,0x0004003d,0x00000008, + 0x00000035,0x00000024,0x0004003d,0x00000008,0x00000037,0x0000002d,0x0004003d,0x00000008, + 0x00000038,0x00000031,0x000500ac,0x00000036,0x00000039,0x00000037,0x00000038,0x000400a8, + 0x00000036,0x0000003a,0x00000039,0x000300f7,0x0000003c,0x00000000,0x000400fa,0x0000003a, + 0x0000003b,0x0000003c,0x000200f8,0x0000003b,0x0004003d,0x00000008,0x0000003d,0x0000002d, + 0x0004003d,0x00000008,0x0000003e,0x00000031,0x000500aa,0x00000036,0x0000003f,0x0000003d, + 0x0000003e,0x000300f7,0x00000041,0x00000000,0x000400fa,0x0000003f,0x00000040,0x00000041, + 0x000200f8,0x00000040,0x0004003d,0x00000008,0x00000042,0x00000024,0x000500c7,0x00000008, + 0x00000043,0x00000042,0x00000029,0x000500ab,0x00000036,0x00000045,0x00000043,0x00000044, + 0x000200f9,0x00000041,0x000200f8,0x00000041,0x000700f5,0x00000036,0x00000046,0x0000003f, + 0x0000003b,0x00000045,0x00000040,0x000200f9,0x0000003c,0x000200f8,0x0000003c,0x000700f5, + 0x00000036,0x00000047,0x00000039,0x00000012,0x00000046,0x00000041,0x000600a9,0x00000008, + 0x00000048,0x00000047,0x00000029,0x00000044,0x00050080,0x00000008,0x00000049,0x00000035, + 0x00000048,0x000200fe,0x00000049,0x00010038,0x00050036,0x00000008,0x00000015,0x00000000, + 0x00000013,0x00030037,0x0000000d,0x00000014,0x000200f8,0x00000016,0x0004003b,0x0000004c, + 0x0000004d,0x00000007,0x0004003b,0x0000000d,0x00000069,0x00000007,0x0004003b,0x0000000d, + 0x0000006f,0x00000007,0x0004003b,0x0000000d,0x00000075,0x00000007,0x0004003b,0x0000000d, + 0x0000007c,0x00000007,0x0004003b,0x0000000d,0x00000083,0x00000007,0x0004003b,0x0000000d, + 0x00000086,0x00000007,0x0004003b,0x0000000d,0x0000008f,0x00000007,0x0004003b,0x0000000d, + 0x00000092,0x00000007,0x0004003b,0x0000000d,0x0000009a,0x00000007,0x0004003b,0x0000000d, + 0x0000009c,0x00000007,0x0004003b,0x0000000d,0x000000a1,0x00000007,0x0004003b,0x0000000d, + 0x000000a4,0x00000007,0x0004003b,0x0000000d,0x000000a6,0x00000007,0x0004003b,0x0000000d, + 0x000000a8,0x00000007,0x0004003b,0x0000000d,0x000000bc,0x00000007,0x0004003d,0x00000008, + 0x0000004e,0x00000014,0x000500c7,0x00000008,0x00000050,0x0000004e,0x0000004f,0x000500aa, + 0x00000036,0x00000051,0x00000050,0x0000004f,0x000300f7,0x00000053,0x00000000,0x000400fa, + 0x00000051,0x00000052,0x00000053,0x000200f8,0x00000052,0x0004003d,0x00000008,0x00000054, + 0x00000014,0x000500c7,0x00000008,0x00000056,0x00000054,0x00000055,0x000500ab,0x00000036, + 0x00000057,0x00000056,0x00000044,0x000200f9,0x00000053,0x000200f8,0x00000053,0x000700f5, + 0x00000036,0x00000058,0x00000051,0x00000016,0x00000057,0x00000052,0x0003003e,0x0000004d, + 0x00000058,0x0004003d,0x00000036,0x00000059,0x0000004d,0x000300f7,0x0000005b,0x00000000, + 0x000400fa,0x00000059,0x0000005a,0x0000005b,0x000200f8,0x0000005a,0x000200fe,0x00000044, + 0x000200f8,0x0000005b,0x0004003d,0x00000008,0x0000005d,0x00000014,0x000500c7,0x00000008, + 0x0000005f,0x0000005d,0x0000005e,0x000500aa,0x00000036,0x00000060,0x0000005f,0x00000044, + 0x000300f7,0x00000062,0x00000000,0x000400fa,0x00000060,0x00000061,0x00000062,0x000200f8, + 0x00000061,0x0004003d,0x00000008,0x00000063,0x00000014,0x000500c2,0x00000008,0x00000065, + 0x00000063,0x00000064,0x000500c7,0x00000008,0x00000067,0x00000065,0x00000066,0x000200fe, + 0x00000067,0x000200f8,0x00000062,0x0004003d,0x00000008,0x0000006a,0x00000014,0x000500c7, + 0x00000008,0x0000006c,0x0000006a,0x0000006b,0x000500ab,0x00000036,0x0000006d,0x0000006c, + 0x00000044,0x000600a9,0x00000008,0x0000006e,0x0000006d,0x00000066,0x00000044,0x0003003e, + 0x00000069,0x0000006e,0x0004003d,0x00000008,0x00000070,0x00000014,0x000500c2,0x00000008, + 0x00000072,0x00000070,0x00000071,0x000500c7,0x00000008,0x00000074,0x00000072,0x00000073, + 0x0003003e,0x0000006f,0x00000074,0x0004003d,0x00000008,0x00000076,0x00000014,0x000500c7, + 0x00000008,0x00000077,0x00000076,0x00000055,0x0003003e,0x00000075,0x00000077,0x0004003d, + 0x00000008,0x00000078,0x0000006f,0x000500aa,0x00000036,0x00000079,0x00000078,0x00000073, + 0x000300f7,0x0000007b,0x00000000,0x000400fa,0x00000079,0x0000007a,0x0000007e,0x000200f8, + 0x0000007a,0x0003003e,0x0000007c,0x0000007d,0x000200f9,0x0000007b,0x000200f8,0x0000007e, + 0x0004003d,0x00000008,0x0000007f,0x0000006f,0x000500b2,0x00000036,0x00000080,0x0000007f, + 0x00000064,0x000300f7,0x00000082,0x00000000,0x000400fa,0x00000080,0x00000081,0x000000a0, + 0x000200f8,0x00000081,0x0004003d,0x00000008,0x00000084,0x0000006f,0x000500aa,0x00000036, + 0x00000085,0x00000084,0x00000044,0x000300f7,0x00000088,0x00000000,0x000400fa,0x00000085, + 0x00000087,0x0000008a,0x000200f8,0x00000087,0x0004003d,0x00000008,0x00000089,0x00000075, + 0x0003003e,0x00000086,0x00000089,0x000200f9,0x00000088,0x000200f8,0x0000008a,0x0004003d, + 0x00000008,0x0000008c,0x00000075,0x00050080,0x00000008,0x0000008d,0x0000008b,0x0000008c, + 0x0003003e,0x00000086,0x0000008d,0x000200f9,0x00000088,0x000200f8,0x00000088,0x0004003d, + 0x00000008,0x0000008e,0x00000086,0x0003003e,0x00000083,0x0000008e,0x0004003d,0x00000008, + 0x00000090,0x0000006f,0x000500aa,0x00000036,0x00000091,0x00000090,0x00000044,0x000300f7, + 0x00000094,0x00000000,0x000400fa,0x00000091,0x00000093,0x00000096,0x000200f8,0x00000093, + 0x0003003e,0x00000092,0x00000095,0x000200f9,0x00000094,0x000200f8,0x00000096,0x0004003d, + 0x00000008,0x00000097,0x0000006f,0x00050082,0x00000008,0x00000098,0x00000017,0x00000097, + 0x0003003e,0x00000092,0x00000098,0x000200f9,0x00000094,0x000200f8,0x00000094,0x0004003d, + 0x00000008,0x00000099,0x00000092,0x0003003e,0x0000008f,0x00000099,0x0004003d,0x00000008, + 0x0000009b,0x00000083,0x0003003e,0x0000009a,0x0000009b,0x0004003d,0x00000008,0x0000009d, + 0x0000008f,0x0003003e,0x0000009c,0x0000009d,0x00060039,0x00000008,0x0000009e,0x00000011, + 0x0000009a,0x0000009c,0x0007000c,0x00000008,0x0000009f,0x00000001,0x00000026,0x0000009e, + 0x00000064,0x0003003e,0x0000007c,0x0000009f,0x000200f9,0x00000082,0x000200f8,0x000000a0, + 0x0004003d,0x00000008,0x000000a2,0x0000006f,0x00050082,0x00000008,0x000000a3,0x000000a2, + 0x00000064,0x0003003e,0x000000a1,0x000000a3,0x0004003d,0x00000008,0x000000a7,0x00000075, + 0x0003003e,0x000000a6,0x000000a7,0x0003003e,0x000000a8,0x000000a5,0x00060039,0x00000008, + 0x000000a9,0x00000011,0x000000a6,0x000000a8,0x0003003e,0x000000a4,0x000000a9,0x0004003d, + 0x00000008,0x000000aa,0x000000a4,0x000500aa,0x00000036,0x000000ab,0x000000aa,0x00000064, + 0x000300f7,0x000000ad,0x00000000,0x000400fa,0x000000ab,0x000000ac,0x000000ad,0x000200f8, + 0x000000ac,0x0003003e,0x000000a4,0x00000044,0x0004003d,0x00000008,0x000000ae,0x000000a1, + 0x00050080,0x00000008,0x000000af,0x000000ae,0x00000029,0x0003003e,0x000000a1,0x000000af, + 0x000200f9,0x000000ad,0x000200f8,0x000000ad,0x0004003d,0x00000008,0x000000b0,0x000000a1, + 0x000500ac,0x00000036,0x000000b1,0x000000b0,0x00000095,0x000400a8,0x00000036,0x000000b2, + 0x000000b1,0x000300f7,0x000000b4,0x00000000,0x000400fa,0x000000b2,0x000000b3,0x000000b4, + 0x000200f8,0x000000b3,0x0004003d,0x00000008,0x000000b5,0x000000a1,0x000500aa,0x00000036, + 0x000000b6,0x000000b5,0x00000095,0x0004003d,0x00000008,0x000000b7,0x000000a4,0x000500ac, + 0x00000036,0x000000b9,0x000000b7,0x000000b8,0x000500a7,0x00000036,0x000000ba,0x000000b6, + 0x000000b9,0x000200f9,0x000000b4,0x000200f8,0x000000b4,0x000700f5,0x00000036,0x000000bb, + 0x000000b1,0x000000ad,0x000000ba,0x000000b3,0x000300f7,0x000000be,0x00000000,0x000400fa, + 0x000000bb,0x000000bd,0x000000bf,0x000200f8,0x000000bd,0x0003003e,0x000000bc,0x0000007d, + 0x000200f9,0x000000be,0x000200f8,0x000000bf,0x0004003d,0x00000008,0x000000c0,0x000000a1, + 0x000500c4,0x00000008,0x000000c2,0x000000c0,0x000000c1,0x0004003d,0x00000008,0x000000c3, + 0x000000a4,0x000500c5,0x00000008,0x000000c4,0x000000c2,0x000000c3,0x0003003e,0x000000bc, + 0x000000c4,0x000200f9,0x000000be,0x000200f8,0x000000be,0x0004003d,0x00000008,0x000000c5, + 0x000000bc,0x0003003e,0x0000007c,0x000000c5,0x000200f9,0x00000082,0x000200f8,0x00000082, + 0x000200f9,0x0000007b,0x000200f8,0x0000007b,0x0004003d,0x00000008,0x000000c6,0x00000069, + 0x0004003d,0x00000008,0x000000c7,0x0000007c,0x000500c5,0x00000008,0x000000c8,0x000000c6, + 0x000000c7,0x000200fe,0x000000c8,0x00010038,0x00050036,0x00000006,0x0000001c,0x00000000, + 0x0000001a,0x00030037,0x00000019,0x0000001b,0x000200f8,0x0000001d,0x0004003b,0x0000000d, + 0x000000cb,0x00000007,0x0004003b,0x000000d4,0x000000d5,0x00000007,0x0004003b,0x0000000d, + 0x000000e4,0x00000007,0x0004003b,0x000000ee,0x000000ef,0x00000007,0x0004003b,0x000000fe, + 0x000000ff,0x00000007,0x0003003e,0x000000cb,0x00000044,0x000200f9,0x000000cc,0x000200f8, + 0x000000cc,0x000400f6,0x000000ce,0x000000cf,0x00000000,0x000200f9,0x000000d0,0x000200f8, + 0x000000d0,0x0004003d,0x00000008,0x000000d1,0x000000cb,0x000500b0,0x00000036,0x000000d2, + 0x000000d1,0x00000064,0x000400fa,0x000000d2,0x000000cd,0x000000ce,0x000200f8,0x000000cd, + 0x0004003d,0x00000008,0x000000d6,0x000000cb,0x0004003d,0x00000008,0x000000d7,0x000000cb, + 0x00050041,0x00000007,0x000000d8,0x0000001b,0x000000d7,0x0004003d,0x00000006,0x000000d9, + 0x000000d8,0x0004003d,0x00000008,0x000000da,0x000000cb,0x00050080,0x00000008,0x000000db, + 0x000000da,0x00000064,0x00050041,0x00000007,0x000000dc,0x0000001b,0x000000db,0x0004003d, + 0x00000006,0x000000dd,0x000000dc,0x00050081,0x00000006,0x000000de,0x000000d9,0x000000dd, + 0x00050041,0x00000007,0x000000df,0x000000d5,0x000000d6,0x0003003e,0x000000df,0x000000de, + 0x000200f9,0x000000cf,0x000200f8,0x000000cf,0x0004003d,0x00000008,0x000000e0,0x000000cb, + 0x00050080,0x00000008,0x000000e3,0x000000e0,0x000000e2,0x0003003e,0x000000cb,0x000000e3, + 0x000200f9,0x000000cc,0x000200f8,0x000000ce,0x0003003e,0x000000e4,0x00000044,0x000200f9, + 0x000000e5,0x000200f8,0x000000e5,0x000400f6,0x000000e7,0x000000e8,0x00000000,0x000200f9, + 0x000000e9,0x000200f8,0x000000e9,0x0004003d,0x00000008,0x000000ea,0x000000e4,0x000500b0, + 0x00000036,0x000000ec,0x000000ea,0x000000eb,0x000400fa,0x000000ec,0x000000e6,0x000000e7, + 0x000200f8,0x000000e6,0x0004003d,0x00000008,0x000000f0,0x000000e4,0x0004003d,0x00000008, + 0x000000f1,0x000000e4,0x00050041,0x00000007,0x000000f2,0x000000d5,0x000000f1,0x0004003d, + 0x00000006,0x000000f3,0x000000f2,0x0004003d,0x00000008,0x000000f4,0x000000e4,0x00050080, + 0x00000008,0x000000f5,0x000000f4,0x000000eb,0x00050041,0x00000007,0x000000f6,0x000000d5, + 0x000000f5,0x0004003d,0x00000006,0x000000f7,0x000000f6,0x00050081,0x00000006,0x000000f8, + 0x000000f3,0x000000f7,0x00050041,0x00000007,0x000000f9,0x000000ef,0x000000f0,0x0003003e, + 0x000000f9,0x000000f8,0x000200f9,0x000000e8,0x000200f8,0x000000e8,0x0004003d,0x00000008, + 0x000000fa,0x000000e4,0x00050080,0x00000008,0x000000fb,0x000000fa,0x000000e2,0x0003003e, + 0x000000e4,0x000000fb,0x000200f9,0x000000e5,0x000200f8,0x000000e7,0x00050041,0x00000007, + 0x00000101,0x000000ef,0x00000100,0x0004003d,0x00000006,0x00000102,0x00000101,0x00050041, + 0x00000007,0x00000104,0x000000ef,0x00000103,0x0004003d,0x00000006,0x00000105,0x00000104, + 0x00050081,0x00000006,0x00000106,0x00000102,0x00000105,0x00050041,0x00000007,0x00000107, + 0x000000ff,0x00000100,0x0003003e,0x00000107,0x00000106,0x00050041,0x00000007,0x00000108, + 0x000000ef,0x000000e2,0x0004003d,0x00000006,0x00000109,0x00000108,0x00050041,0x00000007, + 0x0000010b,0x000000ef,0x0000010a,0x0004003d,0x00000006,0x0000010c,0x0000010b,0x00050081, + 0x00000006,0x0000010d,0x00000109,0x0000010c,0x00050041,0x00000007,0x0000010e,0x000000ff, + 0x000000e2,0x0003003e,0x0000010e,0x0000010d,0x00050041,0x00000007,0x0000010f,0x000000ff, + 0x00000100,0x0004003d,0x00000006,0x00000110,0x0000010f,0x00050041,0x00000007,0x00000111, + 0x000000ff,0x000000e2,0x0004003d,0x00000006,0x00000112,0x00000111,0x00050081,0x00000006, + 0x00000113,0x00000110,0x00000112,0x000200fe,0x00000113,0x00010038, +}; +inline constexpr uint32_t k_window_attend[] = { + 0x07230203,0x00010600,0x0008000b,0x000003e4,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x00000027,0x00020011,0x0000003d,0x00020011, + 0x00001074,0x00020011,0x00001075,0x00020011,0x00001151,0x00020011,0x00001160,0x00020011, + 0x000014e1,0x00020011,0x00001786,0x0005000a,0x5f565053,0x5f545845,0x616f6c66,0x00003874, + 0x0008000a,0x5f565053,0x5f52484b,0x706f6f63,0x74617265,0x5f657669,0x7274616d,0x00007869, + 0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000, + 0x00000003,0x0013000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000122,0x000001b5, + 0x000001ba,0x000001bd,0x000001ca,0x00000233,0x00000247,0x0000028e,0x00000292,0x000002a1, + 0x000002a6,0x00000332,0x0000037d,0x000003d6,0x00060010,0x00000004,0x00000011,0x00000080, + 0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc,0x00060004,0x455f4c47,0x665f5458, + 0x74616f6c,0x6d34655f,0x00000033,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x36315f72, + 0x5f746962,0x726f7473,0x00656761,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x62385f72, + 0x735f7469,0x61726f74,0x00006567,0x000b0004,0x455f4c47,0x735f5458,0x65646168,0x78655f72, + 0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004,0x475f4c47, + 0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576, + 0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669, + 0x00080004,0x4b5f4c47,0x635f5248,0x65706f6f,0x69746172,0x6d5f6576,0x69727461,0x00000078, + 0x00090004,0x4b5f4c47,0x6d5f5248,0x726f6d65,0x63735f79,0x5f65706f,0x616d6573,0x6369746e, + 0x00000073,0x00090004,0x4b5f4c47,0x735f5248,0x65646168,0x75735f72,0x6f726762,0x625f7075, + 0x63697361,0x00000000,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000b, + 0x42363166,0x28737469,0x31363166,0x0000003b,0x00040005,0x0000000a,0x756c6176,0x00000065, + 0x00060005,0x00000010,0x46363166,0x426d6f72,0x28737469,0x003b3175,0x00040005,0x0000000f, + 0x73746962,0x00000000,0x00060005,0x00000015,0x66696873,0x656e5274,0x3b317528,0x003b3175, + 0x00040005,0x00000013,0x756c6176,0x00000065,0x00040005,0x00000014,0x66696873,0x00000074, + 0x00080005,0x00000019,0x336d3465,0x65646f43,0x6d6f7246,0x42363146,0x28737469,0x003b3175, + 0x00050005,0x00000018,0x666c6168,0x73746942,0x00000000,0x00080005,0x0000001c,0x65766e69, + 0x54657372,0x64656c69,0x656b6f54,0x3175286e,0x0000003b,0x00040005,0x0000001b,0x656b6f74, + 0x0000006e,0x00060005,0x00000020,0x57707865,0x68676965,0x31662874,0x003b3136,0x00040005, + 0x0000001f,0x726f6373,0x00000065,0x00080005,0x00000026,0x74666f73,0x5078616d,0x28726961, + 0x753b3175,0x31753b31,0x0000003b,0x00030005,0x00000023,0x00776f72,0x00040005,0x00000024, + 0x72696170,0x00000000,0x00040005,0x00000025,0x69726170,0x00007974,0x00060005,0x00000029, + 0x74666f73,0x5378616d,0x75286d75,0x00003b31,0x00030005,0x00000028,0x00776f72,0x00050005, + 0x00000038,0x746f7571,0x746e6569,0x00000000,0x00060005,0x0000003c,0x616d6572,0x65646e69, + 0x73614d72,0x0000006b,0x00050005,0x00000041,0x616d6572,0x65646e69,0x00000072,0x00040005, + 0x00000045,0x666c6168,0x00796177,0x00040005,0x00000061,0x614e7369,0x0000006e,0x00050005, + 0x0000007d,0x6167656e,0x65766974,0x00000000,0x00050005,0x00000083,0x6f707865,0x746e656e, + 0x00000000,0x00050005,0x00000089,0x746e616d,0x61737369,0x00000000,0x00040005,0x00000090, + 0x65646f63,0x00000000,0x00050005,0x00000097,0x6e676973,0x63696669,0x00646e61,0x00040005, + 0x000000a3,0x66696873,0x00000074,0x00040005,0x000000af,0x61726170,0x0000006d,0x00040005, + 0x000000b1,0x61726170,0x0000006d,0x00050005,0x000000b6,0x78453465,0x656e6f70,0x0000746e, + 0x00050005,0x000000b9,0x614d3465,0x7369746e,0x00006173,0x00040005,0x000000bb,0x61726170, + 0x0000006d,0x00040005,0x000000bd,0x61726170,0x0000006d,0x00040005,0x000000e0,0x656c6974, + 0x00000000,0x00040005,0x000000e4,0x68746977,0x00006e69,0x00030005,0x000000e7,0x00000078, + 0x00030005,0x000000ee,0x00000079,0x00050005,0x000000fe,0x69666661,0x3233656e,0x00000000, + 0x00040005,0x00000104,0x69666661,0x0000656e,0x00040005,0x0000010a,0x73746962,0x00000000, + 0x00040005,0x0000010b,0x61726170,0x0000006d,0x00060005,0x0000010e,0x6f707865,0x746e656e, + 0x426c6169,0x00737469,0x00040005,0x00000114,0x61726170,0x0000006d,0x00030005,0x00000119, + 0x0079656b,0x00050005,0x0000011e,0x636f6c62,0x3130736b,0x00000000,0x00040005,0x00000122, + 0x726f6373,0x00007365,0x00050005,0x00000133,0x636f6c62,0x3332736b,0x00000000,0x00050005, + 0x00000144,0x636f6c62,0x3534736b,0x00000000,0x00050005,0x00000156,0x636f6c62,0x3736736b, + 0x00000000,0x00030005,0x00000168,0x00000061,0x00030005,0x0000016c,0x00000062,0x00030005, + 0x00000175,0x00003065,0x00040005,0x00000176,0x61726170,0x0000006d,0x00040005,0x00000178, + 0x61726170,0x0000006d,0x00040005,0x00000179,0x61726170,0x0000006d,0x00040005,0x0000017b, + 0x61726170,0x0000006d,0x00040005,0x0000017d,0x61726170,0x0000006d,0x00040005,0x0000017e, + 0x61726170,0x0000006d,0x00030005,0x00000181,0x00003165,0x00040005,0x00000183,0x61726170, + 0x0000006d,0x00040005,0x00000185,0x61726170,0x0000006d,0x00040005,0x00000186,0x61726170, + 0x0000006d,0x00040005,0x00000189,0x6e657665,0x00000000,0x00040005,0x0000018b,0x61726170, + 0x0000006d,0x00040005,0x0000018d,0x61726170,0x0000006d,0x00040005,0x0000018e,0x61726170, + 0x0000006d,0x00030005,0x00000191,0x0000306f,0x00040005,0x00000192,0x61726170,0x0000006d, + 0x00040005,0x00000194,0x61726170,0x0000006d,0x00040005,0x00000195,0x61726170,0x0000006d, + 0x00040005,0x00000197,0x61726170,0x0000006d,0x00040005,0x00000199,0x61726170,0x0000006d, + 0x00040005,0x0000019a,0x61726170,0x0000006d,0x00030005,0x0000019d,0x0000316f,0x00040005, + 0x0000019f,0x61726170,0x0000006d,0x00040005,0x000001a1,0x61726170,0x0000006d,0x00040005, + 0x000001a2,0x61726170,0x0000006d,0x00030005,0x000001a5,0x0064646f,0x00040005,0x000001a7, + 0x61726170,0x0000006d,0x00040005,0x000001a9,0x61726170,0x0000006d,0x00040005,0x000001aa, + 0x61726170,0x0000006d,0x00040005,0x000001b2,0x65726874,0x00006461,0x00080005,0x000001b5, + 0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163,0x44496e6f,0x00000000,0x00050005,0x000001b9, + 0x67627573,0x70756f72,0x00000000,0x00060005,0x000001ba,0x535f6c67,0x72676275,0x4970756f, + 0x00000044,0x00040005,0x000001bc,0x64616568,0x00000000,0x00060005,0x000001bd,0x575f6c67, + 0x476b726f,0x70756f72,0x00004449,0x00040005,0x000001c0,0x646e6977,0x0000776f,0x00040005, + 0x000001c8,0x68737550,0x00000000,0x00050006,0x000001c8,0x00000000,0x74646977,0x00000068, + 0x00050006,0x000001c8,0x00000001,0x67696568,0x00007468,0x00060006,0x000001c8,0x00000002, + 0x6e616863,0x736c656e,0x00000000,0x00050006,0x000001c8,0x00000003,0x64616568,0x00000073, + 0x00050006,0x000001c8,0x00000004,0x66696873,0x00005874,0x00050006,0x000001c8,0x00000005, + 0x66696873,0x00005974,0x00060006,0x000001c8,0x00000006,0x646e6977,0x5873776f,0x00000000, + 0x00060006,0x000001c8,0x00000007,0x646e6977,0x6f43776f,0x00746e75,0x00030005,0x000001ca, + 0x00006370,0x00040005,0x000001d5,0x646e6977,0x0058776f,0x00040005,0x000001e2,0x646e6977, + 0x0059776f,0x00040005,0x000001ee,0x69727473,0x00336564,0x00050005,0x000001f3,0x64616568, + 0x65736142,0x00000000,0x00030005,0x000001f7,0x00000069,0x00040005,0x00000201,0x656b6f74, + 0x0000006e,0x00050005,0x00000204,0x706d6f63,0x6e656e6f,0x00000074,0x00030005,0x00000207, + 0x00007871,0x00030005,0x0000020d,0x00007971,0x00030005,0x00000215,0x00000071,0x00050005, + 0x00000231,0x6d726f4e,0x7a696c61,0x00006465,0x00040006,0x00000231,0x00000000,0x00766b71, + 0x00030005,0x00000233,0x00000000,0x00030005,0x00000247,0x00007371,0x00050005,0x0000024c, + 0x4c79656b,0x6c61636f,0x00000000,0x00040005,0x0000024d,0x61726170,0x0000006d,0x00030005, + 0x00000250,0x0000786b,0x00030005,0x00000256,0x0000796b,0x00030005,0x0000025c,0x0000006b, + 0x00030005,0x0000025d,0x00000076,0x00040005,0x00000275,0x4279656b,0x00657361,0x00030005, + 0x0000028e,0x0000736b,0x00030005,0x00000292,0x00007376,0x00030005,0x00000298,0x00000069, + 0x00040005,0x000002a1,0x6f697270,0x00007372,0x00040005,0x000002a4,0x6f697250,0x00000072, + 0x00050006,0x000002a4,0x00000000,0x6f697270,0x00000072,0x00030005,0x000002a6,0x00000000, + 0x00040005,0x000002b2,0x656c6974,0x00000000,0x00040005,0x000002bb,0x6c695471,0x00000065, + 0x00040005,0x000002be,0x6c69546b,0x00000065,0x00030005,0x000002c4,0x0000616d,0x00030005, + 0x000002cf,0x0000626d,0x00030005,0x000002da,0x0000636d,0x00030005,0x000002fd,0x00000069, + 0x00040005,0x00000308,0x61726170,0x0000006d,0x00030005,0x00000313,0x00776f72,0x00040005, + 0x00000315,0x61746f74,0x0000006c,0x00040005,0x00000316,0x61726170,0x0000006d,0x00050005, + 0x00000319,0x69636572,0x636f7270,0x00006c61,0x00030005,0x0000031f,0x0079656b,0x00050005, + 0x00000327,0x6d726f6e,0x7a696c61,0x00006465,0x00040005,0x00000332,0x67696577,0x00737468, + 0x00040005,0x00000337,0x61726170,0x0000006d,0x00040005,0x0000033a,0x61726170,0x0000006d, + 0x00040005,0x00000340,0x656c6974,0x00000000,0x00040005,0x00000349,0x6c695471,0x00000065, + 0x00040005,0x0000034c,0x6c695463,0x00000065,0x00030005,0x0000034f,0x0000636d,0x00030005, + 0x00000352,0x0000626b,0x00030005,0x0000035a,0x0000616d,0x00030005,0x00000367,0x0000626d, + 0x00040005,0x0000037d,0x7074756f,0x00737475,0x00030005,0x0000038d,0x00000069,0x00040005, + 0x00000396,0x656b6f74,0x0000006e,0x00050005,0x00000399,0x706d6f63,0x6e656e6f,0x00000074, + 0x00030005,0x0000039c,0x00007871,0x00030005,0x000003a2,0x00007971,0x00040005,0x000003c2, + 0x65646e69,0x00000078,0x00050005,0x000003d4,0x65747441,0x6465646e,0x00000000,0x00060006, + 0x000003d4,0x00000000,0x65747461,0x6465646e,0x00000000,0x00030005,0x000003d6,0x00000000, + 0x00040005,0x000003d9,0x61726170,0x0000006d,0x00040005,0x000003dd,0x61726170,0x0000006d, + 0x00030047,0x00000132,0x0000002a,0x00030047,0x00000143,0x0000002a,0x00030047,0x00000155, + 0x0000002a,0x00030047,0x00000167,0x0000002a,0x00030047,0x0000016b,0x0000002a,0x00030047, + 0x0000016f,0x0000002a,0x00030047,0x00000180,0x0000002a,0x00030047,0x00000188,0x0000002a, + 0x00030047,0x00000190,0x0000002a,0x00030047,0x0000019c,0x0000002a,0x00030047,0x000001a4, + 0x0000002a,0x00030047,0x000001ac,0x0000002a,0x00040047,0x000001b5,0x0000000b,0x0000001b, + 0x00040047,0x000001ba,0x0000000b,0x00000028,0x00040047,0x000001bd,0x0000000b,0x0000001a, + 0x00030047,0x000001c8,0x00000002,0x00050048,0x000001c8,0x00000000,0x00000023,0x00000000, + 0x00050048,0x000001c8,0x00000001,0x00000023,0x00000004,0x00050048,0x000001c8,0x00000002, + 0x00000023,0x00000008,0x00050048,0x000001c8,0x00000003,0x00000023,0x0000000c,0x00050048, + 0x000001c8,0x00000004,0x00000023,0x00000010,0x00050048,0x000001c8,0x00000005,0x00000023, + 0x00000014,0x00050048,0x000001c8,0x00000006,0x00000023,0x00000018,0x00050048,0x000001c8, + 0x00000007,0x00000023,0x0000001c,0x00040047,0x00000230,0x00000006,0x00000001,0x00030047, + 0x00000231,0x00000002,0x00040048,0x00000231,0x00000000,0x00000018,0x00050048,0x00000231, + 0x00000000,0x00000023,0x00000000,0x00030047,0x00000233,0x00000018,0x00040047,0x00000233, + 0x00000021,0x00000000,0x00040047,0x00000233,0x00000022,0x00000000,0x00040047,0x000002a3, + 0x00000006,0x00000002,0x00030047,0x000002a4,0x00000002,0x00040048,0x000002a4,0x00000000, + 0x00000018,0x00050048,0x000002a4,0x00000000,0x00000023,0x00000000,0x00030047,0x000002a6, + 0x00000018,0x00040047,0x000002a6,0x00000021,0x00000001,0x00040047,0x000002a6,0x00000022, + 0x00000000,0x00030047,0x0000031d,0x0000002a,0x00030047,0x0000032f,0x0000002a,0x00040047, + 0x000003d3,0x00000006,0x00000001,0x00030047,0x000003d4,0x00000002,0x00040048,0x000003d4, + 0x00000000,0x00000019,0x00050048,0x000003d4,0x00000000,0x00000023,0x00000000,0x00030047, + 0x000003d6,0x00000019,0x00040047,0x000003d6,0x00000021,0x00000005,0x00040047,0x000003d6, + 0x00000022,0x00000000,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016, + 0x00000006,0x00000010,0x00040020,0x00000007,0x00000007,0x00000006,0x00040015,0x00000008, + 0x00000020,0x00000000,0x00040021,0x00000009,0x00000008,0x00000007,0x00040020,0x0000000d, + 0x00000007,0x00000008,0x00040021,0x0000000e,0x00000006,0x0000000d,0x00050021,0x00000012, + 0x00000008,0x0000000d,0x0000000d,0x00040021,0x00000017,0x00000008,0x0000000d,0x00040021, + 0x0000001e,0x00000006,0x00000007,0x00060021,0x00000022,0x00000006,0x0000000d,0x0000000d, + 0x0000000d,0x00040015,0x0000002c,0x00000010,0x00000000,0x0004002b,0x00000008,0x00000032, + 0x0000ffff,0x0004002b,0x00000008,0x0000003d,0x00000001,0x00020014,0x0000004a,0x0004002b, + 0x00000008,0x00000058,0x00000000,0x00040020,0x00000060,0x00000007,0x0000004a,0x0004002b, + 0x00000008,0x00000063,0x00007c00,0x0004002b,0x00000008,0x00000069,0x000003ff,0x0004002b, + 0x00000008,0x00000072,0x00007fff,0x0004002b,0x00000008,0x00000078,0x00000008,0x0004002b, + 0x00000008,0x0000007a,0x00000080,0x0004002b,0x00000008,0x0000007f,0x00008000,0x0004002b, + 0x00000008,0x00000085,0x0000000a,0x0004002b,0x00000008,0x00000087,0x0000001f,0x0004002b, + 0x00000008,0x00000091,0x0000007e,0x0004002b,0x00000008,0x0000009f,0x00000400,0x0004002b, + 0x00000008,0x000000a9,0x0000000f,0x0004002b,0x00000008,0x000000ab,0x00000010,0x0004002b, + 0x00000008,0x000000ba,0x00000007,0x0004002b,0x00000008,0x000000cd,0x00000006,0x0004002b, + 0x00000008,0x000000d6,0x00000003,0x0004002b,0x00000008,0x000000e2,0x00000004,0x0004002b, + 0x00000008,0x000000f3,0x00000002,0x00030016,0x000000fc,0x00000020,0x00040020,0x000000fd, + 0x00000007,0x000000fc,0x0004002b,0x000000fc,0x00000101,0x3d380000,0x0004002b,0x000000fc, + 0x00000102,0x3fa68000,0x0004002b,0x00000006,0x00000107,0x00003c20,0x0004002b,0x00000006, + 0x00000108,0x00003e47,0x0004002b,0x00000008,0x00000110,0x00000005,0x0004002b,0x00000008, + 0x0000011f,0x00001000,0x0004001c,0x00000120,0x00000006,0x0000011f,0x00040020,0x00000121, + 0x00000004,0x00000120,0x0004003b,0x00000121,0x00000122,0x00000004,0x0004002b,0x00000008, + 0x00000124,0x00000040,0x00040020,0x00000128,0x00000004,0x00000006,0x0004002b,0x00000008, + 0x0000013f,0x00000018,0x0004002b,0x00000008,0x00000149,0x00000020,0x0004002b,0x00000008, + 0x00000151,0x00000028,0x0004002b,0x00000008,0x0000015b,0x00000030,0x0004002b,0x00000008, + 0x00000163,0x00000038,0x00040017,0x000001b3,0x00000008,0x00000003,0x00040020,0x000001b4, + 0x00000001,0x000001b3,0x0004003b,0x000001b4,0x000001b5,0x00000001,0x00040020,0x000001b6, + 0x00000001,0x00000008,0x0004003b,0x000001b6,0x000001ba,0x00000001,0x0004003b,0x000001b4, + 0x000001bd,0x00000001,0x000a001e,0x000001c8,0x00000008,0x00000008,0x00000008,0x00000008, + 0x00000008,0x00000008,0x00000008,0x00000008,0x00040020,0x000001c9,0x00000009,0x000001c8, + 0x0004003b,0x000001c9,0x000001ca,0x00000009,0x00040015,0x000001cb,0x00000020,0x00000001, + 0x0004002b,0x000001cb,0x000001cc,0x00000007,0x00040020,0x000001cd,0x00000009,0x00000008, + 0x00040020,0x000001d4,0x00000007,0x000001cb,0x0004002b,0x000001cb,0x000001d7,0x00000006, + 0x0004002b,0x000001cb,0x000001dd,0x00000004,0x0004002b,0x000001cb,0x000001e9,0x00000005, + 0x0004002b,0x000001cb,0x000001ef,0x00000002,0x0004002b,0x00000008,0x000001f5,0x00000060, + 0x0004002b,0x00000008,0x000001ff,0x00000800,0x00040015,0x00000213,0x00000008,0x00000000, + 0x00040020,0x00000214,0x00000007,0x00000213,0x0004002b,0x00000213,0x00000216,0x00000000, + 0x0004002b,0x000001cb,0x00000218,0x00000000,0x0004002b,0x000001cb,0x00000228,0x00000001, + 0x0003001d,0x00000230,0x00000213,0x0003001e,0x00000231,0x00000230,0x00040020,0x00000232, + 0x0000000c,0x00000231,0x0004003b,0x00000232,0x00000233,0x0000000c,0x00040020,0x00000242, + 0x0000000c,0x00000213,0x0004001c,0x00000245,0x00000213,0x000001ff,0x00040020,0x00000246, + 0x00000004,0x00000245,0x0004003b,0x00000246,0x00000247,0x00000004,0x00040020,0x0000024a, + 0x00000004,0x00000213,0x0004003b,0x00000246,0x0000028e,0x00000004,0x0004003b,0x00000246, + 0x00000292,0x00000004,0x0004003b,0x00000121,0x000002a1,0x00000004,0x0003001d,0x000002a3, + 0x00000006,0x0003001e,0x000002a4,0x000002a3,0x00040020,0x000002a5,0x0000000c,0x000002a4, + 0x0004003b,0x000002a5,0x000002a6,0x0000000c,0x00040020,0x000002ab,0x0000000c,0x00000006, + 0x0004002b,0x00000008,0x000002b1,0x00000108,0x00040016,0x000002c1,0x00000008,0x00001076, + 0x00071168,0x000002c2,0x000002c1,0x000000d6,0x000000ab,0x00000149,0x00000058,0x00040020, + 0x000002c3,0x00000007,0x000002c2,0x00071168,0x000002cd,0x000002c1,0x000000d6,0x00000149, + 0x000000ab,0x0000003d,0x00040020,0x000002ce,0x00000007,0x000002cd,0x00071168,0x000002d8, + 0x00000006,0x000000d6,0x000000ab,0x000000ab,0x000000f3,0x00040020,0x000002d9,0x00000007, + 0x000002d8,0x0004002b,0x000000fc,0x0000031a,0x3f800000,0x0004001c,0x00000330,0x00000213, + 0x0000011f,0x00040020,0x00000331,0x00000004,0x00000330,0x0004003b,0x00000331,0x00000332, + 0x00000004,0x0004002b,0x00000006,0x00000350,0x00000000,0x0004002c,0x000002d8,0x00000351, + 0x00000350,0x0004001c,0x0000037b,0x00000006,0x000001ff,0x00040020,0x0000037c,0x00000004, + 0x0000037b,0x0004003b,0x0000037c,0x0000037d,0x00000004,0x0003001d,0x000003d3,0x00000213, + 0x0003001e,0x000003d4,0x000003d3,0x00040020,0x000003d5,0x0000000c,0x000003d4,0x0004003b, + 0x000003d5,0x000003d6,0x0000000c,0x0006002c,0x000001b3,0x000003e3,0x0000007a,0x0000003d, + 0x0000003d,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005, + 0x0004003b,0x0000000d,0x000001b2,0x00000007,0x0004003b,0x0000000d,0x000001b9,0x00000007, + 0x0004003b,0x0000000d,0x000001bc,0x00000007,0x0004003b,0x0000000d,0x000001c0,0x00000007, + 0x0004003b,0x000001d4,0x000001d5,0x00000007,0x0004003b,0x000001d4,0x000001e2,0x00000007, + 0x0004003b,0x0000000d,0x000001ee,0x00000007,0x0004003b,0x0000000d,0x000001f3,0x00000007, + 0x0004003b,0x0000000d,0x000001f7,0x00000007,0x0004003b,0x0000000d,0x00000201,0x00000007, + 0x0004003b,0x0000000d,0x00000204,0x00000007,0x0004003b,0x000001d4,0x00000207,0x00000007, + 0x0004003b,0x000001d4,0x0000020d,0x00000007,0x0004003b,0x00000214,0x00000215,0x00000007, + 0x0004003b,0x0000000d,0x0000024c,0x00000007,0x0004003b,0x0000000d,0x0000024d,0x00000007, + 0x0004003b,0x000001d4,0x00000250,0x00000007,0x0004003b,0x000001d4,0x00000256,0x00000007, + 0x0004003b,0x00000214,0x0000025c,0x00000007,0x0004003b,0x00000214,0x0000025d,0x00000007, + 0x0004003b,0x0000000d,0x00000275,0x00000007,0x0004003b,0x0000000d,0x00000298,0x00000007, + 0x0004003b,0x0000000d,0x000002b2,0x00000007,0x0004003b,0x0000000d,0x000002bb,0x00000007, + 0x0004003b,0x0000000d,0x000002be,0x00000007,0x0004003b,0x000002c3,0x000002c4,0x00000007, + 0x0004003b,0x000002ce,0x000002cf,0x00000007,0x0004003b,0x000002d9,0x000002da,0x00000007, + 0x0004003b,0x0000000d,0x000002fd,0x00000007,0x0004003b,0x00000007,0x00000308,0x00000007, + 0x0004003b,0x0000000d,0x00000313,0x00000007,0x0004003b,0x00000007,0x00000315,0x00000007, + 0x0004003b,0x0000000d,0x00000316,0x00000007,0x0004003b,0x00000007,0x00000319,0x00000007, + 0x0004003b,0x0000000d,0x0000031f,0x00000007,0x0004003b,0x00000007,0x00000327,0x00000007, + 0x0004003b,0x00000007,0x00000337,0x00000007,0x0004003b,0x0000000d,0x0000033a,0x00000007, + 0x0004003b,0x0000000d,0x00000340,0x00000007,0x0004003b,0x0000000d,0x00000349,0x00000007, + 0x0004003b,0x0000000d,0x0000034c,0x00000007,0x0004003b,0x000002d9,0x0000034f,0x00000007, + 0x0004003b,0x0000000d,0x00000352,0x00000007,0x0004003b,0x000002c3,0x0000035a,0x00000007, + 0x0004003b,0x000002ce,0x00000367,0x00000007,0x0004003b,0x0000000d,0x0000038d,0x00000007, + 0x0004003b,0x0000000d,0x00000396,0x00000007,0x0004003b,0x0000000d,0x00000399,0x00000007, + 0x0004003b,0x000001d4,0x0000039c,0x00000007,0x0004003b,0x000001d4,0x000003a2,0x00000007, + 0x0004003b,0x0000000d,0x000003c2,0x00000007,0x0004003b,0x00000007,0x000003d9,0x00000007, + 0x0004003b,0x0000000d,0x000003dd,0x00000007,0x00050041,0x000001b6,0x000001b7,0x000001b5, + 0x00000058,0x0004003d,0x00000008,0x000001b8,0x000001b7,0x0003003e,0x000001b2,0x000001b8, + 0x0004003d,0x00000008,0x000001bb,0x000001ba,0x0003003e,0x000001b9,0x000001bb,0x00050041, + 0x000001b6,0x000001be,0x000001bd,0x00000058,0x0004003d,0x00000008,0x000001bf,0x000001be, + 0x0003003e,0x000001bc,0x000001bf,0x00050041,0x000001b6,0x000001c1,0x000001bd,0x0000003d, + 0x0004003d,0x00000008,0x000001c2,0x000001c1,0x00050041,0x000001b6,0x000001c3,0x000001bd, + 0x000000f3,0x0004003d,0x00000008,0x000001c4,0x000001c3,0x00050084,0x00000008,0x000001c5, + 0x000001c4,0x00000032,0x00050080,0x00000008,0x000001c6,0x000001c2,0x000001c5,0x0003003e, + 0x000001c0,0x000001c6,0x0004003d,0x00000008,0x000001c7,0x000001c0,0x00050041,0x000001cd, + 0x000001ce,0x000001ca,0x000001cc,0x0004003d,0x00000008,0x000001cf,0x000001ce,0x000500ae, + 0x0000004a,0x000001d0,0x000001c7,0x000001cf,0x000300f7,0x000001d2,0x00000000,0x000400fa, + 0x000001d0,0x000001d1,0x000001d2,0x000200f8,0x000001d1,0x000100fd,0x000200f8,0x000001d2, + 0x0004003d,0x00000008,0x000001d6,0x000001c0,0x00050041,0x000001cd,0x000001d8,0x000001ca, + 0x000001d7,0x0004003d,0x00000008,0x000001d9,0x000001d8,0x00050089,0x00000008,0x000001da, + 0x000001d6,0x000001d9,0x00050084,0x00000008,0x000001db,0x000001da,0x00000078,0x0004007c, + 0x000001cb,0x000001dc,0x000001db,0x00050041,0x000001cd,0x000001de,0x000001ca,0x000001dd, + 0x0004003d,0x00000008,0x000001df,0x000001de,0x0004007c,0x000001cb,0x000001e0,0x000001df, + 0x00050082,0x000001cb,0x000001e1,0x000001dc,0x000001e0,0x0003003e,0x000001d5,0x000001e1, + 0x0004003d,0x00000008,0x000001e3,0x000001c0,0x00050041,0x000001cd,0x000001e4,0x000001ca, + 0x000001d7,0x0004003d,0x00000008,0x000001e5,0x000001e4,0x00050086,0x00000008,0x000001e6, + 0x000001e3,0x000001e5,0x00050084,0x00000008,0x000001e7,0x000001e6,0x00000078,0x0004007c, + 0x000001cb,0x000001e8,0x000001e7,0x00050041,0x000001cd,0x000001ea,0x000001ca,0x000001e9, + 0x0004003d,0x00000008,0x000001eb,0x000001ea,0x0004007c,0x000001cb,0x000001ec,0x000001eb, + 0x00050082,0x000001cb,0x000001ed,0x000001e8,0x000001ec,0x0003003e,0x000001e2,0x000001ed, + 0x00050041,0x000001cd,0x000001f0,0x000001ca,0x000001ef,0x0004003d,0x00000008,0x000001f1, + 0x000001f0,0x00050084,0x00000008,0x000001f2,0x000001f1,0x000000d6,0x0003003e,0x000001ee, + 0x000001f2,0x0004003d,0x00000008,0x000001f4,0x000001bc,0x00050084,0x00000008,0x000001f6, + 0x000001f4,0x000001f5,0x0003003e,0x000001f3,0x000001f6,0x0004003d,0x00000008,0x000001f8, + 0x000001b2,0x0003003e,0x000001f7,0x000001f8,0x000200f9,0x000001f9,0x000200f8,0x000001f9, + 0x000400f6,0x000001fb,0x000001fc,0x00000000,0x000200f9,0x000001fd,0x000200f8,0x000001fd, + 0x0004003d,0x00000008,0x000001fe,0x000001f7,0x000500b0,0x0000004a,0x00000200,0x000001fe, + 0x000001ff,0x000400fa,0x00000200,0x000001fa,0x000001fb,0x000200f8,0x000001fa,0x0004003d, + 0x00000008,0x00000202,0x000001f7,0x000500c2,0x00000008,0x00000203,0x00000202,0x00000110, + 0x0003003e,0x00000201,0x00000203,0x0004003d,0x00000008,0x00000205,0x000001f7,0x000500c7, + 0x00000008,0x00000206,0x00000205,0x00000087,0x0003003e,0x00000204,0x00000206,0x0004003d, + 0x000001cb,0x00000208,0x000001d5,0x0004003d,0x00000008,0x00000209,0x00000201,0x000500c7, + 0x00000008,0x0000020a,0x00000209,0x000000ba,0x0004007c,0x000001cb,0x0000020b,0x0000020a, + 0x00050080,0x000001cb,0x0000020c,0x00000208,0x0000020b,0x0003003e,0x00000207,0x0000020c, + 0x0004003d,0x000001cb,0x0000020e,0x000001e2,0x0004003d,0x00000008,0x0000020f,0x00000201, + 0x000500c2,0x00000008,0x00000210,0x0000020f,0x000000d6,0x0004007c,0x000001cb,0x00000211, + 0x00000210,0x00050080,0x000001cb,0x00000212,0x0000020e,0x00000211,0x0003003e,0x0000020d, + 0x00000212,0x0003003e,0x00000215,0x00000216,0x0004003d,0x000001cb,0x00000217,0x00000207, + 0x000500af,0x0000004a,0x00000219,0x00000217,0x00000218,0x0004003d,0x000001cb,0x0000021a, + 0x0000020d,0x000500af,0x0000004a,0x0000021b,0x0000021a,0x00000218,0x000500a7,0x0000004a, + 0x0000021c,0x00000219,0x0000021b,0x000300f7,0x0000021e,0x00000000,0x000400fa,0x0000021c, + 0x0000021d,0x0000021e,0x000200f8,0x0000021d,0x0004003d,0x000001cb,0x0000021f,0x00000207, + 0x00050041,0x000001cd,0x00000220,0x000001ca,0x00000218,0x0004003d,0x00000008,0x00000221, + 0x00000220,0x0004007c,0x000001cb,0x00000222,0x00000221,0x000500b1,0x0000004a,0x00000223, + 0x0000021f,0x00000222,0x000200f9,0x0000021e,0x000200f8,0x0000021e,0x000700f5,0x0000004a, + 0x00000224,0x0000021c,0x000001fa,0x00000223,0x0000021d,0x000300f7,0x00000226,0x00000000, + 0x000400fa,0x00000224,0x00000225,0x00000226,0x000200f8,0x00000225,0x0004003d,0x000001cb, + 0x00000227,0x0000020d,0x00050041,0x000001cd,0x00000229,0x000001ca,0x00000228,0x0004003d, + 0x00000008,0x0000022a,0x00000229,0x0004007c,0x000001cb,0x0000022b,0x0000022a,0x000500b1, + 0x0000004a,0x0000022c,0x00000227,0x0000022b,0x000200f9,0x00000226,0x000200f8,0x00000226, + 0x000700f5,0x0000004a,0x0000022d,0x00000224,0x0000021e,0x0000022c,0x00000225,0x000300f7, + 0x0000022f,0x00000000,0x000400fa,0x0000022d,0x0000022e,0x0000022f,0x000200f8,0x0000022e, + 0x0004003d,0x000001cb,0x00000234,0x0000020d,0x0004007c,0x00000008,0x00000235,0x00000234, + 0x00050041,0x000001cd,0x00000236,0x000001ca,0x00000218,0x0004003d,0x00000008,0x00000237, + 0x00000236,0x00050084,0x00000008,0x00000238,0x00000235,0x00000237,0x0004003d,0x000001cb, + 0x00000239,0x00000207,0x0004007c,0x00000008,0x0000023a,0x00000239,0x00050080,0x00000008, + 0x0000023b,0x00000238,0x0000023a,0x0004003d,0x00000008,0x0000023c,0x000001ee,0x00050084, + 0x00000008,0x0000023d,0x0000023b,0x0000023c,0x0004003d,0x00000008,0x0000023e,0x000001f3, + 0x00050080,0x00000008,0x0000023f,0x0000023d,0x0000023e,0x0004003d,0x00000008,0x00000240, + 0x00000204,0x00050080,0x00000008,0x00000241,0x0000023f,0x00000240,0x00060041,0x00000242, + 0x00000243,0x00000233,0x00000218,0x00000241,0x0004003d,0x00000213,0x00000244,0x00000243, + 0x0003003e,0x00000215,0x00000244,0x000200f9,0x0000022f,0x000200f8,0x0000022f,0x0004003d, + 0x00000008,0x00000248,0x000001f7,0x0004003d,0x00000213,0x00000249,0x00000215,0x00050041, + 0x0000024a,0x0000024b,0x00000247,0x00000248,0x0005003e,0x0000024b,0x00000249,0x00000028, + 0x000000f3,0x0004003d,0x00000008,0x0000024e,0x00000201,0x0003003e,0x0000024d,0x0000024e, + 0x00050039,0x00000008,0x0000024f,0x0000001c,0x0000024d,0x0003003e,0x0000024c,0x0000024f, + 0x0004003d,0x000001cb,0x00000251,0x000001d5,0x0004003d,0x00000008,0x00000252,0x0000024c, + 0x000500c7,0x00000008,0x00000253,0x00000252,0x000000ba,0x0004007c,0x000001cb,0x00000254, + 0x00000253,0x00050080,0x000001cb,0x00000255,0x00000251,0x00000254,0x0003003e,0x00000250, + 0x00000255,0x0004003d,0x000001cb,0x00000257,0x000001e2,0x0004003d,0x00000008,0x00000258, + 0x0000024c,0x000500c2,0x00000008,0x00000259,0x00000258,0x000000d6,0x0004007c,0x000001cb, + 0x0000025a,0x00000259,0x00050080,0x000001cb,0x0000025b,0x00000257,0x0000025a,0x0003003e, + 0x00000256,0x0000025b,0x0003003e,0x0000025c,0x00000216,0x0003003e,0x0000025d,0x00000216, + 0x0004003d,0x000001cb,0x0000025e,0x00000250,0x000500af,0x0000004a,0x0000025f,0x0000025e, + 0x00000218,0x0004003d,0x000001cb,0x00000260,0x00000256,0x000500af,0x0000004a,0x00000261, + 0x00000260,0x00000218,0x000500a7,0x0000004a,0x00000262,0x0000025f,0x00000261,0x000300f7, + 0x00000264,0x00000000,0x000400fa,0x00000262,0x00000263,0x00000264,0x000200f8,0x00000263, + 0x0004003d,0x000001cb,0x00000265,0x00000250,0x00050041,0x000001cd,0x00000266,0x000001ca, + 0x00000218,0x0004003d,0x00000008,0x00000267,0x00000266,0x0004007c,0x000001cb,0x00000268, + 0x00000267,0x000500b1,0x0000004a,0x00000269,0x00000265,0x00000268,0x000200f9,0x00000264, + 0x000200f8,0x00000264,0x000700f5,0x0000004a,0x0000026a,0x00000262,0x0000022f,0x00000269, + 0x00000263,0x000300f7,0x0000026c,0x00000000,0x000400fa,0x0000026a,0x0000026b,0x0000026c, + 0x000200f8,0x0000026b,0x0004003d,0x000001cb,0x0000026d,0x00000256,0x00050041,0x000001cd, + 0x0000026e,0x000001ca,0x00000228,0x0004003d,0x00000008,0x0000026f,0x0000026e,0x0004007c, + 0x000001cb,0x00000270,0x0000026f,0x000500b1,0x0000004a,0x00000271,0x0000026d,0x00000270, + 0x000200f9,0x0000026c,0x000200f8,0x0000026c,0x000700f5,0x0000004a,0x00000272,0x0000026a, + 0x00000264,0x00000271,0x0000026b,0x000300f7,0x00000274,0x00000000,0x000400fa,0x00000272, + 0x00000273,0x00000274,0x000200f8,0x00000273,0x0004003d,0x000001cb,0x00000276,0x00000256, + 0x0004007c,0x00000008,0x00000277,0x00000276,0x00050041,0x000001cd,0x00000278,0x000001ca, + 0x00000218,0x0004003d,0x00000008,0x00000279,0x00000278,0x00050084,0x00000008,0x0000027a, + 0x00000277,0x00000279,0x0004003d,0x000001cb,0x0000027b,0x00000250,0x0004007c,0x00000008, + 0x0000027c,0x0000027b,0x00050080,0x00000008,0x0000027d,0x0000027a,0x0000027c,0x0004003d, + 0x00000008,0x0000027e,0x000001ee,0x00050084,0x00000008,0x0000027f,0x0000027d,0x0000027e, + 0x0004003d,0x00000008,0x00000280,0x000001f3,0x00050080,0x00000008,0x00000281,0x0000027f, + 0x00000280,0x0003003e,0x00000275,0x00000281,0x0004003d,0x00000008,0x00000282,0x00000275, + 0x00050080,0x00000008,0x00000283,0x00000282,0x00000149,0x0004003d,0x00000008,0x00000284, + 0x00000204,0x00050080,0x00000008,0x00000285,0x00000283,0x00000284,0x00060041,0x00000242, + 0x00000286,0x00000233,0x00000218,0x00000285,0x0004003d,0x00000213,0x00000287,0x00000286, + 0x0003003e,0x0000025c,0x00000287,0x0004003d,0x00000008,0x00000288,0x00000275,0x00050080, + 0x00000008,0x00000289,0x00000288,0x00000124,0x0004003d,0x00000008,0x0000028a,0x00000204, + 0x00050080,0x00000008,0x0000028b,0x00000289,0x0000028a,0x00060041,0x00000242,0x0000028c, + 0x00000233,0x00000218,0x0000028b,0x0004003d,0x00000213,0x0000028d,0x0000028c,0x0003003e, + 0x0000025d,0x0000028d,0x000200f9,0x00000274,0x000200f8,0x00000274,0x0004003d,0x00000008, + 0x0000028f,0x000001f7,0x0004003d,0x00000213,0x00000290,0x0000025c,0x00050041,0x0000024a, + 0x00000291,0x0000028e,0x0000028f,0x0005003e,0x00000291,0x00000290,0x00000028,0x000000f3, + 0x0004003d,0x00000008,0x00000293,0x000001f7,0x0004003d,0x00000213,0x00000294,0x0000025d, + 0x00050041,0x0000024a,0x00000295,0x00000292,0x00000293,0x0005003e,0x00000295,0x00000294, + 0x00000028,0x000000f3,0x000200f9,0x000001fc,0x000200f8,0x000001fc,0x0004003d,0x00000008, + 0x00000296,0x000001f7,0x00050080,0x00000008,0x00000297,0x00000296,0x0000007a,0x0003003e, + 0x000001f7,0x00000297,0x000200f9,0x000001f9,0x000200f8,0x000001fb,0x0004003d,0x00000008, + 0x00000299,0x000001b2,0x0003003e,0x00000298,0x00000299,0x000200f9,0x0000029a,0x000200f8, + 0x0000029a,0x000400f6,0x0000029c,0x0000029d,0x00000000,0x000200f9,0x0000029e,0x000200f8, + 0x0000029e,0x0004003d,0x00000008,0x0000029f,0x00000298,0x000500b0,0x0000004a,0x000002a0, + 0x0000029f,0x0000011f,0x000400fa,0x000002a0,0x0000029b,0x0000029c,0x000200f8,0x0000029b, + 0x0004003d,0x00000008,0x000002a2,0x00000298,0x0004003d,0x00000008,0x000002a7,0x000001bc, + 0x00050084,0x00000008,0x000002a8,0x000002a7,0x0000011f,0x0004003d,0x00000008,0x000002a9, + 0x00000298,0x00050080,0x00000008,0x000002aa,0x000002a8,0x000002a9,0x00060041,0x000002ab, + 0x000002ac,0x000002a6,0x00000218,0x000002aa,0x0004003d,0x00000006,0x000002ad,0x000002ac, + 0x00050041,0x00000128,0x000002ae,0x000002a1,0x000002a2,0x0005003e,0x000002ae,0x000002ad, + 0x00000028,0x000000f3,0x000200f9,0x0000029d,0x000200f8,0x0000029d,0x0004003d,0x00000008, + 0x000002af,0x00000298,0x00050080,0x00000008,0x000002b0,0x000002af,0x0000007a,0x0003003e, + 0x00000298,0x000002b0,0x000200f9,0x0000029a,0x000200f8,0x0000029c,0x000400e0,0x000000f3, + 0x000000f3,0x000002b1,0x0004003d,0x00000008,0x000002b3,0x000001b9,0x0003003e,0x000002b2, + 0x000002b3,0x000200f9,0x000002b4,0x000200f8,0x000002b4,0x000400f6,0x000002b6,0x000002b7, + 0x00000000,0x000200f9,0x000002b8,0x000200f8,0x000002b8,0x0004003d,0x00000008,0x000002b9, + 0x000002b2,0x000500b0,0x0000004a,0x000002ba,0x000002b9,0x000000ab,0x000400fa,0x000002ba, + 0x000002b5,0x000002b6,0x000200f8,0x000002b5,0x0004003d,0x00000008,0x000002bc,0x000002b2, + 0x000500c2,0x00000008,0x000002bd,0x000002bc,0x000000f3,0x0003003e,0x000002bb,0x000002bd, + 0x0004003d,0x00000008,0x000002bf,0x000002b2,0x000500c7,0x00000008,0x000002c0,0x000002bf, + 0x000000d6,0x0003003e,0x000002be,0x000002c0,0x0004003d,0x00000008,0x000002c5,0x000002bb, + 0x00050084,0x00000008,0x000002c6,0x000002c5,0x000000ab,0x00050084,0x00000008,0x000002c7, + 0x000002c6,0x00000149,0x00050041,0x0000024a,0x000002c8,0x00000247,0x000002c7,0x0004003d, + 0x00000008,0x000002c9,0x000002bb,0x00050084,0x00000008,0x000002ca,0x000002c9,0x000000ab, + 0x00050084,0x00000008,0x000002cb,0x000002ca,0x00000149,0x00081169,0x000002c2,0x000002cc, + 0x000002c8,0x00000218,0x00000149,0x00000030,0x000000f3,0x0003003e,0x000002c4,0x000002cc, + 0x0004003d,0x00000008,0x000002d0,0x000002be,0x00050084,0x00000008,0x000002d1,0x000002d0, + 0x000000ab,0x00050084,0x00000008,0x000002d2,0x000002d1,0x00000149,0x00050041,0x0000024a, + 0x000002d3,0x0000028e,0x000002d2,0x0004003d,0x00000008,0x000002d4,0x000002be,0x00050084, + 0x00000008,0x000002d5,0x000002d4,0x000000ab,0x00050084,0x00000008,0x000002d6,0x000002d5, + 0x00000149,0x00081169,0x000002cd,0x000002d7,0x000002d3,0x00000228,0x00000149,0x00000030, + 0x000000f3,0x0003003e,0x000002cf,0x000002d7,0x0004003d,0x00000008,0x000002db,0x000002bb, + 0x00050084,0x00000008,0x000002dc,0x000002db,0x000000ab,0x00050084,0x00000008,0x000002dd, + 0x000002dc,0x00000124,0x0004003d,0x00000008,0x000002de,0x000002be,0x00050084,0x00000008, + 0x000002df,0x000002de,0x000000ab,0x00050080,0x00000008,0x000002e0,0x000002dd,0x000002df, + 0x00050041,0x00000128,0x000002e1,0x000002a1,0x000002e0,0x0004003d,0x00000008,0x000002e2, + 0x000002bb,0x00050084,0x00000008,0x000002e3,0x000002e2,0x000000ab,0x00050084,0x00000008, + 0x000002e4,0x000002e3,0x00000124,0x0004003d,0x00000008,0x000002e5,0x000002be,0x00050084, + 0x00000008,0x000002e6,0x000002e5,0x000000ab,0x00050080,0x00000008,0x000002e7,0x000002e4, + 0x000002e6,0x00081169,0x000002d8,0x000002e8,0x000002e1,0x00000218,0x00000124,0x00000030, + 0x000000f3,0x0003003e,0x000002da,0x000002e8,0x0004003d,0x000002c2,0x000002e9,0x000002c4, + 0x0004003d,0x000002cd,0x000002ea,0x000002cf,0x0004003d,0x000002d8,0x000002eb,0x000002da, + 0x0006116b,0x000002d8,0x000002ec,0x000002e9,0x000002ea,0x000002eb,0x0003003e,0x000002da, + 0x000002ec,0x0004003d,0x000002d8,0x000002ed,0x000002da,0x0004003d,0x00000008,0x000002ee, + 0x000002bb,0x00050084,0x00000008,0x000002ef,0x000002ee,0x000000ab,0x00050084,0x00000008, + 0x000002f0,0x000002ef,0x00000124,0x0004003d,0x00000008,0x000002f1,0x000002be,0x00050084, + 0x00000008,0x000002f2,0x000002f1,0x000000ab,0x00050080,0x00000008,0x000002f3,0x000002f0, + 0x000002f2,0x00050041,0x00000128,0x000002f4,0x00000122,0x000002f3,0x0004003d,0x00000008, + 0x000002f5,0x000002bb,0x00050084,0x00000008,0x000002f6,0x000002f5,0x000000ab,0x00050084, + 0x00000008,0x000002f7,0x000002f6,0x00000124,0x0004003d,0x00000008,0x000002f8,0x000002be, + 0x00050084,0x00000008,0x000002f9,0x000002f8,0x000000ab,0x00050080,0x00000008,0x000002fa, + 0x000002f7,0x000002f9,0x0007116a,0x000002f4,0x000002ed,0x00000218,0x00000124,0x00000028, + 0x000000f3,0x000200f9,0x000002b7,0x000200f8,0x000002b7,0x0004003d,0x00000008,0x000002fb, + 0x000002b2,0x00050080,0x00000008,0x000002fc,0x000002fb,0x000000e2,0x0003003e,0x000002b2, + 0x000002fc,0x000200f9,0x000002b4,0x000200f8,0x000002b6,0x000400e0,0x000000f3,0x000000f3, + 0x000002b1,0x0004003d,0x00000008,0x000002fe,0x000001b2,0x0003003e,0x000002fd,0x000002fe, + 0x000200f9,0x000002ff,0x000200f8,0x000002ff,0x000400f6,0x00000301,0x00000302,0x00000000, + 0x000200f9,0x00000303,0x000200f8,0x00000303,0x0004003d,0x00000008,0x00000304,0x000002fd, + 0x000500b0,0x0000004a,0x00000305,0x00000304,0x0000011f,0x000400fa,0x00000305,0x00000300, + 0x00000301,0x000200f8,0x00000300,0x0004003d,0x00000008,0x00000306,0x000002fd,0x0004003d, + 0x00000008,0x00000307,0x000002fd,0x00050041,0x00000128,0x00000309,0x00000122,0x00000307, + 0x0006003d,0x00000006,0x0000030a,0x00000309,0x00000030,0x000000f3,0x0003003e,0x00000308, + 0x0000030a,0x00050039,0x00000006,0x0000030b,0x00000020,0x00000308,0x00050041,0x00000128, + 0x0000030c,0x00000122,0x00000306,0x0005003e,0x0000030c,0x0000030b,0x00000028,0x000000f3, + 0x000200f9,0x00000302,0x000200f8,0x00000302,0x0004003d,0x00000008,0x0000030d,0x000002fd, + 0x00050080,0x00000008,0x0000030e,0x0000030d,0x0000007a,0x0003003e,0x000002fd,0x0000030e, + 0x000200f9,0x000002ff,0x000200f8,0x00000301,0x000400e0,0x000000f3,0x000000f3,0x000002b1, + 0x0004003d,0x00000008,0x0000030f,0x000001b2,0x000500b0,0x0000004a,0x00000310,0x0000030f, + 0x00000124,0x000300f7,0x00000312,0x00000000,0x000400fa,0x00000310,0x00000311,0x00000312, + 0x000200f8,0x00000311,0x0004003d,0x00000008,0x00000314,0x000001b2,0x0003003e,0x00000313, + 0x00000314,0x0004003d,0x00000008,0x00000317,0x00000313,0x0003003e,0x00000316,0x00000317, + 0x00050039,0x00000006,0x00000318,0x00000029,0x00000316,0x0003003e,0x00000315,0x00000318, + 0x0004003d,0x00000006,0x0000031b,0x00000315,0x00040073,0x000000fc,0x0000031c,0x0000031b, + 0x00050088,0x000000fc,0x0000031d,0x0000031a,0x0000031c,0x00040073,0x00000006,0x0000031e, + 0x0000031d,0x0003003e,0x00000319,0x0000031e,0x0003003e,0x0000031f,0x00000058,0x000200f9, + 0x00000320,0x000200f8,0x00000320,0x000400f6,0x00000322,0x00000323,0x00000000,0x000200f9, + 0x00000324,0x000200f8,0x00000324,0x0004003d,0x00000008,0x00000325,0x0000031f,0x000500b0, + 0x0000004a,0x00000326,0x00000325,0x00000124,0x000400fa,0x00000326,0x00000321,0x00000322, + 0x000200f8,0x00000321,0x0004003d,0x00000008,0x00000328,0x00000313,0x00050084,0x00000008, + 0x00000329,0x00000328,0x00000124,0x0004003d,0x00000008,0x0000032a,0x0000031f,0x00050080, + 0x00000008,0x0000032b,0x00000329,0x0000032a,0x00050041,0x00000128,0x0000032c,0x00000122, + 0x0000032b,0x0006003d,0x00000006,0x0000032d,0x0000032c,0x00000030,0x000000f3,0x0004003d, + 0x00000006,0x0000032e,0x00000319,0x00050085,0x00000006,0x0000032f,0x0000032d,0x0000032e, + 0x0003003e,0x00000327,0x0000032f,0x0004003d,0x00000008,0x00000333,0x00000313,0x00050084, + 0x00000008,0x00000334,0x00000333,0x00000124,0x0004003d,0x00000008,0x00000335,0x0000031f, + 0x00050080,0x00000008,0x00000336,0x00000334,0x00000335,0x0004003d,0x00000006,0x00000338, + 0x00000327,0x0003003e,0x00000337,0x00000338,0x00050039,0x00000008,0x00000339,0x0000000b, + 0x00000337,0x0003003e,0x0000033a,0x00000339,0x00050039,0x00000008,0x0000033b,0x00000019, + 0x0000033a,0x00040071,0x00000213,0x0000033c,0x0000033b,0x00050041,0x0000024a,0x0000033d, + 0x00000332,0x00000336,0x0005003e,0x0000033d,0x0000033c,0x00000028,0x000000f3,0x000200f9, + 0x00000323,0x000200f8,0x00000323,0x0004003d,0x00000008,0x0000033e,0x0000031f,0x00050080, + 0x00000008,0x0000033f,0x0000033e,0x00000228,0x0003003e,0x0000031f,0x0000033f,0x000200f9, + 0x00000320,0x000200f8,0x00000322,0x000200f9,0x00000312,0x000200f8,0x00000312,0x000400e0, + 0x000000f3,0x000000f3,0x000002b1,0x0004003d,0x00000008,0x00000341,0x000001b9,0x0003003e, + 0x00000340,0x00000341,0x000200f9,0x00000342,0x000200f8,0x00000342,0x000400f6,0x00000344, + 0x00000345,0x00000000,0x000200f9,0x00000346,0x000200f8,0x00000346,0x0004003d,0x00000008, + 0x00000347,0x00000340,0x000500b0,0x0000004a,0x00000348,0x00000347,0x00000078,0x000400fa, + 0x00000348,0x00000343,0x00000344,0x000200f8,0x00000343,0x0004003d,0x00000008,0x0000034a, + 0x00000340,0x000500c2,0x00000008,0x0000034b,0x0000034a,0x0000003d,0x0003003e,0x00000349, + 0x0000034b,0x0004003d,0x00000008,0x0000034d,0x00000340,0x000500c7,0x00000008,0x0000034e, + 0x0000034d,0x0000003d,0x0003003e,0x0000034c,0x0000034e,0x0003003e,0x0000034f,0x00000351, + 0x0003003e,0x00000352,0x00000058,0x000200f9,0x00000353,0x000200f8,0x00000353,0x000400f6, + 0x00000355,0x00000356,0x00000000,0x000200f9,0x00000357,0x000200f8,0x00000357,0x0004003d, + 0x00000008,0x00000358,0x00000352,0x000500b0,0x0000004a,0x00000359,0x00000358,0x00000124, + 0x000400fa,0x00000359,0x00000354,0x00000355,0x000200f8,0x00000354,0x0004003d,0x00000008, + 0x0000035b,0x00000349,0x00050084,0x00000008,0x0000035c,0x0000035b,0x000000ab,0x00050084, + 0x00000008,0x0000035d,0x0000035c,0x00000124,0x0004003d,0x00000008,0x0000035e,0x00000352, + 0x00050080,0x00000008,0x0000035f,0x0000035d,0x0000035e,0x00050041,0x0000024a,0x00000360, + 0x00000332,0x0000035f,0x0004003d,0x00000008,0x00000361,0x00000349,0x00050084,0x00000008, + 0x00000362,0x00000361,0x000000ab,0x00050084,0x00000008,0x00000363,0x00000362,0x00000124, + 0x0004003d,0x00000008,0x00000364,0x00000352,0x00050080,0x00000008,0x00000365,0x00000363, + 0x00000364,0x00081169,0x000002c2,0x00000366,0x00000360,0x00000218,0x00000124,0x00000030, + 0x000000f3,0x0003003e,0x0000035a,0x00000366,0x0004003d,0x00000008,0x00000368,0x00000352, + 0x00050084,0x00000008,0x00000369,0x00000368,0x00000149,0x0004003d,0x00000008,0x0000036a, + 0x0000034c,0x00050084,0x00000008,0x0000036b,0x0000036a,0x000000ab,0x00050080,0x00000008, + 0x0000036c,0x00000369,0x0000036b,0x00050041,0x0000024a,0x0000036d,0x00000292,0x0000036c, + 0x0004003d,0x00000008,0x0000036e,0x00000352,0x00050084,0x00000008,0x0000036f,0x0000036e, + 0x00000149,0x0004003d,0x00000008,0x00000370,0x0000034c,0x00050084,0x00000008,0x00000371, + 0x00000370,0x000000ab,0x00050080,0x00000008,0x00000372,0x0000036f,0x00000371,0x00081169, + 0x000002cd,0x00000373,0x0000036d,0x00000218,0x00000149,0x00000030,0x000000f3,0x0003003e, + 0x00000367,0x00000373,0x0004003d,0x000002c2,0x00000374,0x0000035a,0x0004003d,0x000002cd, + 0x00000375,0x00000367,0x0004003d,0x000002d8,0x00000376,0x0000034f,0x0006116b,0x000002d8, + 0x00000377,0x00000374,0x00000375,0x00000376,0x0003003e,0x0000034f,0x00000377,0x000200f9, + 0x00000356,0x000200f8,0x00000356,0x0004003d,0x00000008,0x00000378,0x00000352,0x00050080, + 0x00000008,0x00000379,0x00000378,0x00000149,0x0003003e,0x00000352,0x00000379,0x000200f9, + 0x00000353,0x000200f8,0x00000355,0x0004003d,0x000002d8,0x0000037a,0x0000034f,0x0004003d, + 0x00000008,0x0000037e,0x00000349,0x00050084,0x00000008,0x0000037f,0x0000037e,0x000000ab, + 0x00050084,0x00000008,0x00000380,0x0000037f,0x00000149,0x0004003d,0x00000008,0x00000381, + 0x0000034c,0x00050084,0x00000008,0x00000382,0x00000381,0x000000ab,0x00050080,0x00000008, + 0x00000383,0x00000380,0x00000382,0x00050041,0x00000128,0x00000384,0x0000037d,0x00000383, + 0x0004003d,0x00000008,0x00000385,0x00000349,0x00050084,0x00000008,0x00000386,0x00000385, + 0x000000ab,0x00050084,0x00000008,0x00000387,0x00000386,0x00000149,0x0004003d,0x00000008, + 0x00000388,0x0000034c,0x00050084,0x00000008,0x00000389,0x00000388,0x000000ab,0x00050080, + 0x00000008,0x0000038a,0x00000387,0x00000389,0x0007116a,0x00000384,0x0000037a,0x00000218, + 0x00000149,0x00000028,0x000000f3,0x000200f9,0x00000345,0x000200f8,0x00000345,0x0004003d, + 0x00000008,0x0000038b,0x00000340,0x00050080,0x00000008,0x0000038c,0x0000038b,0x000000e2, + 0x0003003e,0x00000340,0x0000038c,0x000200f9,0x00000342,0x000200f8,0x00000344,0x000400e0, + 0x000000f3,0x000000f3,0x000002b1,0x0004003d,0x00000008,0x0000038e,0x000001b2,0x0003003e, + 0x0000038d,0x0000038e,0x000200f9,0x0000038f,0x000200f8,0x0000038f,0x000400f6,0x00000391, + 0x00000392,0x00000000,0x000200f9,0x00000393,0x000200f8,0x00000393,0x0004003d,0x00000008, + 0x00000394,0x0000038d,0x000500b0,0x0000004a,0x00000395,0x00000394,0x000001ff,0x000400fa, + 0x00000395,0x00000390,0x00000391,0x000200f8,0x00000390,0x0004003d,0x00000008,0x00000397, + 0x0000038d,0x000500c2,0x00000008,0x00000398,0x00000397,0x00000110,0x0003003e,0x00000396, + 0x00000398,0x0004003d,0x00000008,0x0000039a,0x0000038d,0x000500c7,0x00000008,0x0000039b, + 0x0000039a,0x00000087,0x0003003e,0x00000399,0x0000039b,0x0004003d,0x000001cb,0x0000039d, + 0x000001d5,0x0004003d,0x00000008,0x0000039e,0x00000396,0x000500c7,0x00000008,0x0000039f, + 0x0000039e,0x000000ba,0x0004007c,0x000001cb,0x000003a0,0x0000039f,0x00050080,0x000001cb, + 0x000003a1,0x0000039d,0x000003a0,0x0003003e,0x0000039c,0x000003a1,0x0004003d,0x000001cb, + 0x000003a3,0x000001e2,0x0004003d,0x00000008,0x000003a4,0x00000396,0x000500c2,0x00000008, + 0x000003a5,0x000003a4,0x000000d6,0x0004007c,0x000001cb,0x000003a6,0x000003a5,0x00050080, + 0x000001cb,0x000003a7,0x000003a3,0x000003a6,0x0003003e,0x000003a2,0x000003a7,0x0004003d, + 0x000001cb,0x000003a8,0x0000039c,0x000500b1,0x0000004a,0x000003a9,0x000003a8,0x00000218, + 0x0004003d,0x000001cb,0x000003aa,0x000003a2,0x000500b1,0x0000004a,0x000003ab,0x000003aa, + 0x00000218,0x000500a6,0x0000004a,0x000003ac,0x000003a9,0x000003ab,0x000400a8,0x0000004a, + 0x000003ad,0x000003ac,0x000300f7,0x000003af,0x00000000,0x000400fa,0x000003ad,0x000003ae, + 0x000003af,0x000200f8,0x000003ae,0x0004003d,0x000001cb,0x000003b0,0x0000039c,0x00050041, + 0x000001cd,0x000003b1,0x000001ca,0x00000218,0x0004003d,0x00000008,0x000003b2,0x000003b1, + 0x0004007c,0x000001cb,0x000003b3,0x000003b2,0x000500af,0x0000004a,0x000003b4,0x000003b0, + 0x000003b3,0x000200f9,0x000003af,0x000200f8,0x000003af,0x000700f5,0x0000004a,0x000003b5, + 0x000003ac,0x00000390,0x000003b4,0x000003ae,0x000400a8,0x0000004a,0x000003b6,0x000003b5, + 0x000300f7,0x000003b8,0x00000000,0x000400fa,0x000003b6,0x000003b7,0x000003b8,0x000200f8, + 0x000003b7,0x0004003d,0x000001cb,0x000003b9,0x000003a2,0x00050041,0x000001cd,0x000003ba, + 0x000001ca,0x00000228,0x0004003d,0x00000008,0x000003bb,0x000003ba,0x0004007c,0x000001cb, + 0x000003bc,0x000003bb,0x000500af,0x0000004a,0x000003bd,0x000003b9,0x000003bc,0x000200f9, + 0x000003b8,0x000200f8,0x000003b8,0x000700f5,0x0000004a,0x000003be,0x000003b5,0x000003af, + 0x000003bd,0x000003b7,0x000300f7,0x000003c0,0x00000000,0x000400fa,0x000003be,0x000003bf, + 0x000003c0,0x000200f8,0x000003bf,0x000200f9,0x00000392,0x000200f8,0x000003c0,0x0004003d, + 0x000001cb,0x000003c3,0x000003a2,0x0004007c,0x00000008,0x000003c4,0x000003c3,0x00050041, + 0x000001cd,0x000003c5,0x000001ca,0x00000218,0x0004003d,0x00000008,0x000003c6,0x000003c5, + 0x00050084,0x00000008,0x000003c7,0x000003c4,0x000003c6,0x0004003d,0x000001cb,0x000003c8, + 0x0000039c,0x0004007c,0x00000008,0x000003c9,0x000003c8,0x00050080,0x00000008,0x000003ca, + 0x000003c7,0x000003c9,0x00050041,0x000001cd,0x000003cb,0x000001ca,0x000001ef,0x0004003d, + 0x00000008,0x000003cc,0x000003cb,0x00050084,0x00000008,0x000003cd,0x000003ca,0x000003cc, + 0x0004003d,0x00000008,0x000003ce,0x000001bc,0x00050084,0x00000008,0x000003cf,0x000003ce, + 0x00000149,0x00050080,0x00000008,0x000003d0,0x000003cd,0x000003cf,0x0004003d,0x00000008, + 0x000003d1,0x00000399,0x00050080,0x00000008,0x000003d2,0x000003d0,0x000003d1,0x0003003e, + 0x000003c2,0x000003d2,0x0004003d,0x00000008,0x000003d7,0x000003c2,0x0004003d,0x00000008, + 0x000003d8,0x0000038d,0x00050041,0x00000128,0x000003da,0x0000037d,0x000003d8,0x0006003d, + 0x00000006,0x000003db,0x000003da,0x00000030,0x000000f3,0x0003003e,0x000003d9,0x000003db, + 0x00050039,0x00000008,0x000003dc,0x0000000b,0x000003d9,0x0003003e,0x000003dd,0x000003dc, + 0x00050039,0x00000008,0x000003de,0x00000019,0x000003dd,0x00040071,0x00000213,0x000003df, + 0x000003de,0x00060041,0x00000242,0x000003e0,0x000003d6,0x00000218,0x000003d7,0x0003003e, + 0x000003e0,0x000003df,0x000200f9,0x00000392,0x000200f8,0x00000392,0x0004003d,0x00000008, + 0x000003e1,0x0000038d,0x00050080,0x00000008,0x000003e2,0x000003e1,0x0000007a,0x0003003e, + 0x0000038d,0x000003e2,0x000200f9,0x0000038f,0x000200f8,0x00000391,0x000100fd,0x00010038, + 0x00050036,0x00000008,0x0000000b,0x00000000,0x00000009,0x00030037,0x00000007,0x0000000a, + 0x000200f8,0x0000000c,0x0004003d,0x00000006,0x0000002b,0x0000000a,0x0004007c,0x0000002c, + 0x0000002d,0x0000002b,0x00040071,0x00000008,0x0000002e,0x0000002d,0x000200fe,0x0000002e, + 0x00010038,0x00050036,0x00000006,0x00000010,0x00000000,0x0000000e,0x00030037,0x0000000d, + 0x0000000f,0x000200f8,0x00000011,0x0004003d,0x00000008,0x00000031,0x0000000f,0x000500c7, + 0x00000008,0x00000033,0x00000031,0x00000032,0x00040071,0x0000002c,0x00000034,0x00000033, + 0x0004007c,0x00000006,0x00000035,0x00000034,0x000200fe,0x00000035,0x00010038,0x00050036, + 0x00000008,0x00000015,0x00000000,0x00000012,0x00030037,0x0000000d,0x00000013,0x00030037, + 0x0000000d,0x00000014,0x000200f8,0x00000016,0x0004003b,0x0000000d,0x00000038,0x00000007, + 0x0004003b,0x0000000d,0x0000003c,0x00000007,0x0004003b,0x0000000d,0x00000041,0x00000007, + 0x0004003b,0x0000000d,0x00000045,0x00000007,0x0004003d,0x00000008,0x00000039,0x00000013, + 0x0004003d,0x00000008,0x0000003a,0x00000014,0x000500c2,0x00000008,0x0000003b,0x00000039, + 0x0000003a,0x0003003e,0x00000038,0x0000003b,0x0004003d,0x00000008,0x0000003e,0x00000014, + 0x000500c4,0x00000008,0x0000003f,0x0000003d,0x0000003e,0x00050082,0x00000008,0x00000040, + 0x0000003f,0x0000003d,0x0003003e,0x0000003c,0x00000040,0x0004003d,0x00000008,0x00000042, + 0x00000013,0x0004003d,0x00000008,0x00000043,0x0000003c,0x000500c7,0x00000008,0x00000044, + 0x00000042,0x00000043,0x0003003e,0x00000041,0x00000044,0x0004003d,0x00000008,0x00000046, + 0x00000014,0x00050082,0x00000008,0x00000047,0x00000046,0x0000003d,0x000500c4,0x00000008, + 0x00000048,0x0000003d,0x00000047,0x0003003e,0x00000045,0x00000048,0x0004003d,0x00000008, + 0x00000049,0x00000038,0x0004003d,0x00000008,0x0000004b,0x00000041,0x0004003d,0x00000008, + 0x0000004c,0x00000045,0x000500ac,0x0000004a,0x0000004d,0x0000004b,0x0000004c,0x000400a8, + 0x0000004a,0x0000004e,0x0000004d,0x000300f7,0x00000050,0x00000000,0x000400fa,0x0000004e, + 0x0000004f,0x00000050,0x000200f8,0x0000004f,0x0004003d,0x00000008,0x00000051,0x00000041, + 0x0004003d,0x00000008,0x00000052,0x00000045,0x000500aa,0x0000004a,0x00000053,0x00000051, + 0x00000052,0x000300f7,0x00000055,0x00000000,0x000400fa,0x00000053,0x00000054,0x00000055, + 0x000200f8,0x00000054,0x0004003d,0x00000008,0x00000056,0x00000038,0x000500c7,0x00000008, + 0x00000057,0x00000056,0x0000003d,0x000500ab,0x0000004a,0x00000059,0x00000057,0x00000058, + 0x000200f9,0x00000055,0x000200f8,0x00000055,0x000700f5,0x0000004a,0x0000005a,0x00000053, + 0x0000004f,0x00000059,0x00000054,0x000200f9,0x00000050,0x000200f8,0x00000050,0x000700f5, + 0x0000004a,0x0000005b,0x0000004d,0x00000016,0x0000005a,0x00000055,0x000600a9,0x00000008, + 0x0000005c,0x0000005b,0x0000003d,0x00000058,0x00050080,0x00000008,0x0000005d,0x00000049, + 0x0000005c,0x000200fe,0x0000005d,0x00010038,0x00050036,0x00000008,0x00000019,0x00000000, + 0x00000017,0x00030037,0x0000000d,0x00000018,0x000200f8,0x0000001a,0x0004003b,0x00000060, + 0x00000061,0x00000007,0x0004003b,0x0000000d,0x0000007d,0x00000007,0x0004003b,0x0000000d, + 0x00000083,0x00000007,0x0004003b,0x0000000d,0x00000089,0x00000007,0x0004003b,0x0000000d, + 0x00000090,0x00000007,0x0004003b,0x0000000d,0x00000097,0x00000007,0x0004003b,0x0000000d, + 0x0000009a,0x00000007,0x0004003b,0x0000000d,0x000000a3,0x00000007,0x0004003b,0x0000000d, + 0x000000a6,0x00000007,0x0004003b,0x0000000d,0x000000af,0x00000007,0x0004003b,0x0000000d, + 0x000000b1,0x00000007,0x0004003b,0x0000000d,0x000000b6,0x00000007,0x0004003b,0x0000000d, + 0x000000b9,0x00000007,0x0004003b,0x0000000d,0x000000bb,0x00000007,0x0004003b,0x0000000d, + 0x000000bd,0x00000007,0x0004003b,0x0000000d,0x000000d1,0x00000007,0x0004003d,0x00000008, + 0x00000062,0x00000018,0x000500c7,0x00000008,0x00000064,0x00000062,0x00000063,0x000500aa, + 0x0000004a,0x00000065,0x00000064,0x00000063,0x000300f7,0x00000067,0x00000000,0x000400fa, + 0x00000065,0x00000066,0x00000067,0x000200f8,0x00000066,0x0004003d,0x00000008,0x00000068, + 0x00000018,0x000500c7,0x00000008,0x0000006a,0x00000068,0x00000069,0x000500ab,0x0000004a, + 0x0000006b,0x0000006a,0x00000058,0x000200f9,0x00000067,0x000200f8,0x00000067,0x000700f5, + 0x0000004a,0x0000006c,0x00000065,0x0000001a,0x0000006b,0x00000066,0x0003003e,0x00000061, + 0x0000006c,0x0004003d,0x0000004a,0x0000006d,0x00000061,0x000300f7,0x0000006f,0x00000000, + 0x000400fa,0x0000006d,0x0000006e,0x0000006f,0x000200f8,0x0000006e,0x000200fe,0x00000058, + 0x000200f8,0x0000006f,0x0004003d,0x00000008,0x00000071,0x00000018,0x000500c7,0x00000008, + 0x00000073,0x00000071,0x00000072,0x000500aa,0x0000004a,0x00000074,0x00000073,0x00000058, + 0x000300f7,0x00000076,0x00000000,0x000400fa,0x00000074,0x00000075,0x00000076,0x000200f8, + 0x00000075,0x0004003d,0x00000008,0x00000077,0x00000018,0x000500c2,0x00000008,0x00000079, + 0x00000077,0x00000078,0x000500c7,0x00000008,0x0000007b,0x00000079,0x0000007a,0x000200fe, + 0x0000007b,0x000200f8,0x00000076,0x0004003d,0x00000008,0x0000007e,0x00000018,0x000500c7, + 0x00000008,0x00000080,0x0000007e,0x0000007f,0x000500ab,0x0000004a,0x00000081,0x00000080, + 0x00000058,0x000600a9,0x00000008,0x00000082,0x00000081,0x0000007a,0x00000058,0x0003003e, + 0x0000007d,0x00000082,0x0004003d,0x00000008,0x00000084,0x00000018,0x000500c2,0x00000008, + 0x00000086,0x00000084,0x00000085,0x000500c7,0x00000008,0x00000088,0x00000086,0x00000087, + 0x0003003e,0x00000083,0x00000088,0x0004003d,0x00000008,0x0000008a,0x00000018,0x000500c7, + 0x00000008,0x0000008b,0x0000008a,0x00000069,0x0003003e,0x00000089,0x0000008b,0x0004003d, + 0x00000008,0x0000008c,0x00000083,0x000500aa,0x0000004a,0x0000008d,0x0000008c,0x00000087, + 0x000300f7,0x0000008f,0x00000000,0x000400fa,0x0000008d,0x0000008e,0x00000092,0x000200f8, + 0x0000008e,0x0003003e,0x00000090,0x00000091,0x000200f9,0x0000008f,0x000200f8,0x00000092, + 0x0004003d,0x00000008,0x00000093,0x00000083,0x000500b2,0x0000004a,0x00000094,0x00000093, + 0x00000078,0x000300f7,0x00000096,0x00000000,0x000400fa,0x00000094,0x00000095,0x000000b5, + 0x000200f8,0x00000095,0x0004003d,0x00000008,0x00000098,0x00000083,0x000500aa,0x0000004a, + 0x00000099,0x00000098,0x00000058,0x000300f7,0x0000009c,0x00000000,0x000400fa,0x00000099, + 0x0000009b,0x0000009e,0x000200f8,0x0000009b,0x0004003d,0x00000008,0x0000009d,0x00000089, + 0x0003003e,0x0000009a,0x0000009d,0x000200f9,0x0000009c,0x000200f8,0x0000009e,0x0004003d, + 0x00000008,0x000000a0,0x00000089,0x00050080,0x00000008,0x000000a1,0x0000009f,0x000000a0, + 0x0003003e,0x0000009a,0x000000a1,0x000200f9,0x0000009c,0x000200f8,0x0000009c,0x0004003d, + 0x00000008,0x000000a2,0x0000009a,0x0003003e,0x00000097,0x000000a2,0x0004003d,0x00000008, + 0x000000a4,0x00000083,0x000500aa,0x0000004a,0x000000a5,0x000000a4,0x00000058,0x000300f7, + 0x000000a8,0x00000000,0x000400fa,0x000000a5,0x000000a7,0x000000aa,0x000200f8,0x000000a7, + 0x0003003e,0x000000a6,0x000000a9,0x000200f9,0x000000a8,0x000200f8,0x000000aa,0x0004003d, + 0x00000008,0x000000ac,0x00000083,0x00050082,0x00000008,0x000000ad,0x000000ab,0x000000ac, + 0x0003003e,0x000000a6,0x000000ad,0x000200f9,0x000000a8,0x000200f8,0x000000a8,0x0004003d, + 0x00000008,0x000000ae,0x000000a6,0x0003003e,0x000000a3,0x000000ae,0x0004003d,0x00000008, + 0x000000b0,0x00000097,0x0003003e,0x000000af,0x000000b0,0x0004003d,0x00000008,0x000000b2, + 0x000000a3,0x0003003e,0x000000b1,0x000000b2,0x00060039,0x00000008,0x000000b3,0x00000015, + 0x000000af,0x000000b1,0x0007000c,0x00000008,0x000000b4,0x00000001,0x00000026,0x000000b3, + 0x00000078,0x0003003e,0x00000090,0x000000b4,0x000200f9,0x00000096,0x000200f8,0x000000b5, + 0x0004003d,0x00000008,0x000000b7,0x00000083,0x00050082,0x00000008,0x000000b8,0x000000b7, + 0x00000078,0x0003003e,0x000000b6,0x000000b8,0x0004003d,0x00000008,0x000000bc,0x00000089, + 0x0003003e,0x000000bb,0x000000bc,0x0003003e,0x000000bd,0x000000ba,0x00060039,0x00000008, + 0x000000be,0x00000015,0x000000bb,0x000000bd,0x0003003e,0x000000b9,0x000000be,0x0004003d, + 0x00000008,0x000000bf,0x000000b9,0x000500aa,0x0000004a,0x000000c0,0x000000bf,0x00000078, + 0x000300f7,0x000000c2,0x00000000,0x000400fa,0x000000c0,0x000000c1,0x000000c2,0x000200f8, + 0x000000c1,0x0003003e,0x000000b9,0x00000058,0x0004003d,0x00000008,0x000000c3,0x000000b6, + 0x00050080,0x00000008,0x000000c4,0x000000c3,0x0000003d,0x0003003e,0x000000b6,0x000000c4, + 0x000200f9,0x000000c2,0x000200f8,0x000000c2,0x0004003d,0x00000008,0x000000c5,0x000000b6, + 0x000500ac,0x0000004a,0x000000c6,0x000000c5,0x000000a9,0x000400a8,0x0000004a,0x000000c7, + 0x000000c6,0x000300f7,0x000000c9,0x00000000,0x000400fa,0x000000c7,0x000000c8,0x000000c9, + 0x000200f8,0x000000c8,0x0004003d,0x00000008,0x000000ca,0x000000b6,0x000500aa,0x0000004a, + 0x000000cb,0x000000ca,0x000000a9,0x0004003d,0x00000008,0x000000cc,0x000000b9,0x000500ac, + 0x0000004a,0x000000ce,0x000000cc,0x000000cd,0x000500a7,0x0000004a,0x000000cf,0x000000cb, + 0x000000ce,0x000200f9,0x000000c9,0x000200f8,0x000000c9,0x000700f5,0x0000004a,0x000000d0, + 0x000000c6,0x000000c2,0x000000cf,0x000000c8,0x000300f7,0x000000d3,0x00000000,0x000400fa, + 0x000000d0,0x000000d2,0x000000d4,0x000200f8,0x000000d2,0x0003003e,0x000000d1,0x00000091, + 0x000200f9,0x000000d3,0x000200f8,0x000000d4,0x0004003d,0x00000008,0x000000d5,0x000000b6, + 0x000500c4,0x00000008,0x000000d7,0x000000d5,0x000000d6,0x0004003d,0x00000008,0x000000d8, + 0x000000b9,0x000500c5,0x00000008,0x000000d9,0x000000d7,0x000000d8,0x0003003e,0x000000d1, + 0x000000d9,0x000200f9,0x000000d3,0x000200f8,0x000000d3,0x0004003d,0x00000008,0x000000da, + 0x000000d1,0x0003003e,0x00000090,0x000000da,0x000200f9,0x00000096,0x000200f8,0x00000096, + 0x000200f9,0x0000008f,0x000200f8,0x0000008f,0x0004003d,0x00000008,0x000000db,0x0000007d, + 0x0004003d,0x00000008,0x000000dc,0x00000090,0x000500c5,0x00000008,0x000000dd,0x000000db, + 0x000000dc,0x000200fe,0x000000dd,0x00010038,0x00050036,0x00000008,0x0000001c,0x00000000, + 0x00000017,0x00030037,0x0000000d,0x0000001b,0x000200f8,0x0000001d,0x0004003b,0x0000000d, + 0x000000e0,0x00000007,0x0004003b,0x0000000d,0x000000e4,0x00000007,0x0004003b,0x0000000d, + 0x000000e7,0x00000007,0x0004003b,0x0000000d,0x000000ee,0x00000007,0x0004003d,0x00000008, + 0x000000e1,0x0000001b,0x000500c2,0x00000008,0x000000e3,0x000000e1,0x000000e2,0x0003003e, + 0x000000e0,0x000000e3,0x0004003d,0x00000008,0x000000e5,0x0000001b,0x000500c7,0x00000008, + 0x000000e6,0x000000e5,0x000000a9,0x0003003e,0x000000e4,0x000000e6,0x0004003d,0x00000008, + 0x000000e8,0x000000e0,0x000500c7,0x00000008,0x000000e9,0x000000e8,0x0000003d,0x00050084, + 0x00000008,0x000000ea,0x000000e9,0x000000e2,0x0004003d,0x00000008,0x000000eb,0x000000e4, + 0x000500c7,0x00000008,0x000000ec,0x000000eb,0x000000d6,0x00050080,0x00000008,0x000000ed, + 0x000000ea,0x000000ec,0x0003003e,0x000000e7,0x000000ed,0x0004003d,0x00000008,0x000000ef, + 0x000000e0,0x000500c2,0x00000008,0x000000f0,0x000000ef,0x0000003d,0x00050084,0x00000008, + 0x000000f1,0x000000f0,0x000000e2,0x0004003d,0x00000008,0x000000f2,0x000000e4,0x000500c2, + 0x00000008,0x000000f4,0x000000f2,0x000000f3,0x00050080,0x00000008,0x000000f5,0x000000f1, + 0x000000f4,0x0003003e,0x000000ee,0x000000f5,0x0004003d,0x00000008,0x000000f6,0x000000ee, + 0x00050084,0x00000008,0x000000f7,0x000000f6,0x00000078,0x0004003d,0x00000008,0x000000f8, + 0x000000e7,0x00050080,0x00000008,0x000000f9,0x000000f7,0x000000f8,0x000200fe,0x000000f9, + 0x00010038,0x00050036,0x00000006,0x00000020,0x00000000,0x0000001e,0x00030037,0x00000007, + 0x0000001f,0x000200f8,0x00000021,0x0004003b,0x000000fd,0x000000fe,0x00000007,0x0004003b, + 0x00000007,0x00000104,0x00000007,0x0004003b,0x0000000d,0x0000010a,0x00000007,0x0004003b, + 0x00000007,0x0000010b,0x00000007,0x0004003b,0x0000000d,0x0000010e,0x00000007,0x0004003b, + 0x0000000d,0x00000114,0x00000007,0x0004003d,0x00000006,0x000000ff,0x0000001f,0x00040073, + 0x000000fc,0x00000100,0x000000ff,0x0008000c,0x000000fc,0x00000103,0x00000001,0x00000032, + 0x00000100,0x00000101,0x00000102,0x0003003e,0x000000fe,0x00000103,0x0004003d,0x000000fc, + 0x00000105,0x000000fe,0x00040073,0x00000006,0x00000106,0x00000105,0x0008000c,0x00000006, + 0x00000109,0x00000001,0x0000002b,0x00000106,0x00000107,0x00000108,0x0003003e,0x00000104, + 0x00000109,0x0004003d,0x00000006,0x0000010c,0x00000104,0x0003003e,0x0000010b,0x0000010c, + 0x00050039,0x00000008,0x0000010d,0x0000000b,0x0000010b,0x0003003e,0x0000010a,0x0000010d, + 0x0004003d,0x00000008,0x0000010f,0x0000010a,0x000500c4,0x00000008,0x00000111,0x0000010f, + 0x00000110,0x00050080,0x00000008,0x00000112,0x00000111,0x0000007f,0x000500c7,0x00000008, + 0x00000113,0x00000112,0x00000032,0x0003003e,0x0000010e,0x00000113,0x0004003d,0x00000008, + 0x00000115,0x0000010e,0x0003003e,0x00000114,0x00000115,0x00050039,0x00000006,0x00000116, + 0x00000010,0x00000114,0x000200fe,0x00000116,0x00010038,0x00050036,0x00000006,0x00000026, + 0x00000000,0x00000022,0x00030037,0x0000000d,0x00000023,0x00030037,0x0000000d,0x00000024, + 0x00030037,0x0000000d,0x00000025,0x000200f8,0x00000027,0x0004003b,0x0000000d,0x00000119, + 0x00000007,0x0004003b,0x00000007,0x0000011e,0x00000007,0x0004003b,0x00000007,0x00000133, + 0x00000007,0x0004003b,0x00000007,0x00000144,0x00000007,0x0004003b,0x00000007,0x00000156, + 0x00000007,0x0004003b,0x00000007,0x00000168,0x00000007,0x0004003b,0x00000007,0x0000016c, + 0x00000007,0x0004003d,0x00000008,0x0000011a,0x00000024,0x00050084,0x00000008,0x0000011b, + 0x0000011a,0x000000f3,0x0004003d,0x00000008,0x0000011c,0x00000025,0x00050080,0x00000008, + 0x0000011d,0x0000011b,0x0000011c,0x0003003e,0x00000119,0x0000011d,0x0004003d,0x00000008, + 0x00000123,0x00000023,0x00050084,0x00000008,0x00000125,0x00000123,0x00000124,0x0004003d, + 0x00000008,0x00000126,0x00000119,0x00050080,0x00000008,0x00000127,0x00000125,0x00000126, + 0x00050041,0x00000128,0x00000129,0x00000122,0x00000127,0x0006003d,0x00000006,0x0000012a, + 0x00000129,0x00000030,0x000000f3,0x0004003d,0x00000008,0x0000012b,0x00000023,0x00050084, + 0x00000008,0x0000012c,0x0000012b,0x00000124,0x0004003d,0x00000008,0x0000012d,0x00000119, + 0x00050080,0x00000008,0x0000012e,0x0000012c,0x0000012d,0x00050080,0x00000008,0x0000012f, + 0x0000012e,0x00000078,0x00050041,0x00000128,0x00000130,0x00000122,0x0000012f,0x0006003d, + 0x00000006,0x00000131,0x00000130,0x00000030,0x000000f3,0x00050081,0x00000006,0x00000132, + 0x0000012a,0x00000131,0x0003003e,0x0000011e,0x00000132,0x0004003d,0x00000008,0x00000134, + 0x00000023,0x00050084,0x00000008,0x00000135,0x00000134,0x00000124,0x0004003d,0x00000008, + 0x00000136,0x00000119,0x00050080,0x00000008,0x00000137,0x00000135,0x00000136,0x00050080, + 0x00000008,0x00000138,0x00000137,0x000000ab,0x00050041,0x00000128,0x00000139,0x00000122, + 0x00000138,0x0006003d,0x00000006,0x0000013a,0x00000139,0x00000030,0x000000f3,0x0004003d, + 0x00000008,0x0000013b,0x00000023,0x00050084,0x00000008,0x0000013c,0x0000013b,0x00000124, + 0x0004003d,0x00000008,0x0000013d,0x00000119,0x00050080,0x00000008,0x0000013e,0x0000013c, + 0x0000013d,0x00050080,0x00000008,0x00000140,0x0000013e,0x0000013f,0x00050041,0x00000128, + 0x00000141,0x00000122,0x00000140,0x0006003d,0x00000006,0x00000142,0x00000141,0x00000030, + 0x000000f3,0x00050081,0x00000006,0x00000143,0x0000013a,0x00000142,0x0003003e,0x00000133, + 0x00000143,0x0004003d,0x00000008,0x00000145,0x00000023,0x00050084,0x00000008,0x00000146, + 0x00000145,0x00000124,0x0004003d,0x00000008,0x00000147,0x00000119,0x00050080,0x00000008, + 0x00000148,0x00000146,0x00000147,0x00050080,0x00000008,0x0000014a,0x00000148,0x00000149, + 0x00050041,0x00000128,0x0000014b,0x00000122,0x0000014a,0x0006003d,0x00000006,0x0000014c, + 0x0000014b,0x00000030,0x000000f3,0x0004003d,0x00000008,0x0000014d,0x00000023,0x00050084, + 0x00000008,0x0000014e,0x0000014d,0x00000124,0x0004003d,0x00000008,0x0000014f,0x00000119, + 0x00050080,0x00000008,0x00000150,0x0000014e,0x0000014f,0x00050080,0x00000008,0x00000152, + 0x00000150,0x00000151,0x00050041,0x00000128,0x00000153,0x00000122,0x00000152,0x0006003d, + 0x00000006,0x00000154,0x00000153,0x00000030,0x000000f3,0x00050081,0x00000006,0x00000155, + 0x0000014c,0x00000154,0x0003003e,0x00000144,0x00000155,0x0004003d,0x00000008,0x00000157, + 0x00000023,0x00050084,0x00000008,0x00000158,0x00000157,0x00000124,0x0004003d,0x00000008, + 0x00000159,0x00000119,0x00050080,0x00000008,0x0000015a,0x00000158,0x00000159,0x00050080, + 0x00000008,0x0000015c,0x0000015a,0x0000015b,0x00050041,0x00000128,0x0000015d,0x00000122, + 0x0000015c,0x0006003d,0x00000006,0x0000015e,0x0000015d,0x00000030,0x000000f3,0x0004003d, + 0x00000008,0x0000015f,0x00000023,0x00050084,0x00000008,0x00000160,0x0000015f,0x00000124, + 0x0004003d,0x00000008,0x00000161,0x00000119,0x00050080,0x00000008,0x00000162,0x00000160, + 0x00000161,0x00050080,0x00000008,0x00000164,0x00000162,0x00000163,0x00050041,0x00000128, + 0x00000165,0x00000122,0x00000164,0x0006003d,0x00000006,0x00000166,0x00000165,0x00000030, + 0x000000f3,0x00050081,0x00000006,0x00000167,0x0000015e,0x00000166,0x0003003e,0x00000156, + 0x00000167,0x0004003d,0x00000006,0x00000169,0x0000011e,0x0004003d,0x00000006,0x0000016a, + 0x00000133,0x00050081,0x00000006,0x0000016b,0x00000169,0x0000016a,0x0003003e,0x00000168, + 0x0000016b,0x0004003d,0x00000006,0x0000016d,0x00000168,0x0004003d,0x00000006,0x0000016e, + 0x00000144,0x00050081,0x00000006,0x0000016f,0x0000016d,0x0000016e,0x0003003e,0x0000016c, + 0x0000016f,0x0004003d,0x00000006,0x00000170,0x0000016c,0x0004003d,0x00000006,0x00000171, + 0x00000156,0x00050081,0x00000006,0x00000172,0x00000170,0x00000171,0x000200fe,0x00000172, + 0x00010038,0x00050036,0x00000006,0x00000029,0x00000000,0x0000000e,0x00030037,0x0000000d, + 0x00000028,0x000200f8,0x0000002a,0x0004003b,0x00000007,0x00000175,0x00000007,0x0004003b, + 0x0000000d,0x00000176,0x00000007,0x0004003b,0x0000000d,0x00000178,0x00000007,0x0004003b, + 0x0000000d,0x00000179,0x00000007,0x0004003b,0x0000000d,0x0000017b,0x00000007,0x0004003b, + 0x0000000d,0x0000017d,0x00000007,0x0004003b,0x0000000d,0x0000017e,0x00000007,0x0004003b, + 0x00000007,0x00000181,0x00000007,0x0004003b,0x0000000d,0x00000183,0x00000007,0x0004003b, + 0x0000000d,0x00000185,0x00000007,0x0004003b,0x0000000d,0x00000186,0x00000007,0x0004003b, + 0x00000007,0x00000189,0x00000007,0x0004003b,0x0000000d,0x0000018b,0x00000007,0x0004003b, + 0x0000000d,0x0000018d,0x00000007,0x0004003b,0x0000000d,0x0000018e,0x00000007,0x0004003b, + 0x00000007,0x00000191,0x00000007,0x0004003b,0x0000000d,0x00000192,0x00000007,0x0004003b, + 0x0000000d,0x00000194,0x00000007,0x0004003b,0x0000000d,0x00000195,0x00000007,0x0004003b, + 0x0000000d,0x00000197,0x00000007,0x0004003b,0x0000000d,0x00000199,0x00000007,0x0004003b, + 0x0000000d,0x0000019a,0x00000007,0x0004003b,0x00000007,0x0000019d,0x00000007,0x0004003b, + 0x0000000d,0x0000019f,0x00000007,0x0004003b,0x0000000d,0x000001a1,0x00000007,0x0004003b, + 0x0000000d,0x000001a2,0x00000007,0x0004003b,0x00000007,0x000001a5,0x00000007,0x0004003b, + 0x0000000d,0x000001a7,0x00000007,0x0004003b,0x0000000d,0x000001a9,0x00000007,0x0004003b, + 0x0000000d,0x000001aa,0x00000007,0x0004003d,0x00000008,0x00000177,0x00000028,0x0003003e, + 0x00000176,0x00000177,0x0003003e,0x00000178,0x00000058,0x0003003e,0x00000179,0x00000058, + 0x00070039,0x00000006,0x0000017a,0x00000026,0x00000176,0x00000178,0x00000179,0x0004003d, + 0x00000008,0x0000017c,0x00000028,0x0003003e,0x0000017b,0x0000017c,0x0003003e,0x0000017d, + 0x0000003d,0x0003003e,0x0000017e,0x00000058,0x00070039,0x00000006,0x0000017f,0x00000026, + 0x0000017b,0x0000017d,0x0000017e,0x00050081,0x00000006,0x00000180,0x0000017a,0x0000017f, + 0x0003003e,0x00000175,0x00000180,0x0004003d,0x00000006,0x00000182,0x00000175,0x0004003d, + 0x00000008,0x00000184,0x00000028,0x0003003e,0x00000183,0x00000184,0x0003003e,0x00000185, + 0x000000f3,0x0003003e,0x00000186,0x00000058,0x00070039,0x00000006,0x00000187,0x00000026, + 0x00000183,0x00000185,0x00000186,0x00050081,0x00000006,0x00000188,0x00000182,0x00000187, + 0x0003003e,0x00000181,0x00000188,0x0004003d,0x00000006,0x0000018a,0x00000181,0x0004003d, + 0x00000008,0x0000018c,0x00000028,0x0003003e,0x0000018b,0x0000018c,0x0003003e,0x0000018d, + 0x000000d6,0x0003003e,0x0000018e,0x00000058,0x00070039,0x00000006,0x0000018f,0x00000026, + 0x0000018b,0x0000018d,0x0000018e,0x00050081,0x00000006,0x00000190,0x0000018a,0x0000018f, + 0x0003003e,0x00000189,0x00000190,0x0004003d,0x00000008,0x00000193,0x00000028,0x0003003e, + 0x00000192,0x00000193,0x0003003e,0x00000194,0x00000058,0x0003003e,0x00000195,0x0000003d, + 0x00070039,0x00000006,0x00000196,0x00000026,0x00000192,0x00000194,0x00000195,0x0004003d, + 0x00000008,0x00000198,0x00000028,0x0003003e,0x00000197,0x00000198,0x0003003e,0x00000199, + 0x0000003d,0x0003003e,0x0000019a,0x0000003d,0x00070039,0x00000006,0x0000019b,0x00000026, + 0x00000197,0x00000199,0x0000019a,0x00050081,0x00000006,0x0000019c,0x00000196,0x0000019b, + 0x0003003e,0x00000191,0x0000019c,0x0004003d,0x00000006,0x0000019e,0x00000191,0x0004003d, + 0x00000008,0x000001a0,0x00000028,0x0003003e,0x0000019f,0x000001a0,0x0003003e,0x000001a1, + 0x000000f3,0x0003003e,0x000001a2,0x0000003d,0x00070039,0x00000006,0x000001a3,0x00000026, + 0x0000019f,0x000001a1,0x000001a2,0x00050081,0x00000006,0x000001a4,0x0000019e,0x000001a3, + 0x0003003e,0x0000019d,0x000001a4,0x0004003d,0x00000006,0x000001a6,0x0000019d,0x0004003d, + 0x00000008,0x000001a8,0x00000028,0x0003003e,0x000001a7,0x000001a8,0x0003003e,0x000001a9, + 0x000000d6,0x0003003e,0x000001aa,0x0000003d,0x00070039,0x00000006,0x000001ab,0x00000026, + 0x000001a7,0x000001a9,0x000001aa,0x00050081,0x00000006,0x000001ac,0x000001a6,0x000001ab, + 0x0003003e,0x000001a5,0x000001ac,0x0004003d,0x00000006,0x000001ad,0x00000189,0x0004003d, + 0x00000006,0x000001ae,0x000001a5,0x00050081,0x00000006,0x000001af,0x000001ad,0x000001ae, + 0x000200fe,0x000001af,0x00010038, +}; +inline constexpr uint32_t k_global_normalize[] = { + 0x07230203,0x00010600,0x0008000b,0x00000223,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x00001151,0x00020011,0x00001160,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x000a000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000119,0x00000127,0x00000156, + 0x000001cc,0x000001f8,0x00060010,0x00000004,0x00000011,0x00000100,0x00000001,0x00000001, + 0x00030003,0x00000002,0x000001cc,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x36315f72, + 0x5f746962,0x726f7473,0x00656761,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x62385f72, + 0x735f7469,0x61726f74,0x00006567,0x000b0004,0x455f4c47,0x735f5458,0x65646168,0x78655f72, + 0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004,0x475f4c47, + 0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576, + 0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669, + 0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000b,0x42363166,0x28737469, + 0x31363166,0x0000003b,0x00040005,0x0000000a,0x756c6176,0x00000065,0x00060005,0x00000011, + 0x66696873,0x656e5274,0x3b317528,0x003b3175,0x00040005,0x0000000f,0x756c6176,0x00000065, + 0x00040005,0x00000010,0x66696873,0x00000074,0x00080005,0x00000015,0x336d3465,0x65646f43, + 0x6d6f7246,0x42363146,0x28737469,0x003b3175,0x00050005,0x00000014,0x666c6168,0x73746942, + 0x00000000,0x00070005,0x0000001c,0x65657274,0x316d7553,0x31662836,0x315b3136,0x003b5d36, + 0x00030005,0x0000001b,0x00000072,0x00050005,0x00000024,0x746f7571,0x746e6569,0x00000000, + 0x00060005,0x00000028,0x616d6572,0x65646e69,0x73614d72,0x0000006b,0x00050005,0x0000002d, + 0x616d6572,0x65646e69,0x00000072,0x00040005,0x00000031,0x666c6168,0x00796177,0x00040005, + 0x0000004d,0x614e7369,0x0000006e,0x00050005,0x00000069,0x6167656e,0x65766974,0x00000000, + 0x00050005,0x0000006f,0x6f707865,0x746e656e,0x00000000,0x00050005,0x00000075,0x746e616d, + 0x61737369,0x00000000,0x00040005,0x0000007c,0x65646f63,0x00000000,0x00050005,0x00000083, + 0x6e676973,0x63696669,0x00646e61,0x00040005,0x0000008f,0x66696873,0x00000074,0x00040005, + 0x0000009a,0x61726170,0x0000006d,0x00040005,0x0000009c,0x61726170,0x0000006d,0x00050005, + 0x000000a1,0x78453465,0x656e6f70,0x0000746e,0x00050005,0x000000a4,0x614d3465,0x7369746e, + 0x00006173,0x00040005,0x000000a6,0x61726170,0x0000006d,0x00040005,0x000000a8,0x61726170, + 0x0000006d,0x00030005,0x000000cb,0x00000063,0x00030005,0x000000d5,0x00003873,0x00030005, + 0x000000e4,0x00000063,0x00030005,0x000000ef,0x00003473,0x00030005,0x000000ff,0x00003273, + 0x00030005,0x00000116,0x00006469,0x00080005,0x00000119,0x475f6c67,0x61626f6c,0x766e496c, + 0x7461636f,0x496e6f69,0x00000044,0x00040005,0x00000125,0x68737550,0x00000000,0x00050006, + 0x00000125,0x00000000,0x656b6f74,0x0000736e,0x00050006,0x00000125,0x00000001,0x64616568, + 0x00000073,0x00060006,0x00000125,0x00000002,0x6e616863,0x736c656e,0x00000000,0x00070006, + 0x00000125,0x00000003,0x6c616373,0x726f5765,0x66664f64,0x00746573,0x00030005,0x00000127, + 0x00006370,0x00040005,0x00000132,0x656b6f74,0x0000006e,0x00040005,0x00000137,0x64616568, + 0x00000000,0x00040005,0x0000013c,0x65736162,0x00000000,0x00030005,0x00000146,0x00000063, + 0x00030005,0x00000151,0x00000071,0x00030005,0x00000154,0x00766b51,0x00040006,0x00000154, + 0x00000000,0x00766b71,0x00030005,0x00000156,0x00000000,0x00030005,0x0000015e,0x0000006b, + 0x00030005,0x00000169,0x00000063,0x00050005,0x00000171,0x68676968,0x61757153,0x00006572, + 0x00030005,0x0000017d,0x006d7573,0x00030005,0x0000018a,0x00000072,0x00040005,0x00000191, + 0x6d755371,0x00000000,0x00040005,0x00000192,0x61726170,0x0000006d,0x00030005,0x00000195, + 0x00000063,0x00050005,0x0000019d,0x68676968,0x61757153,0x00006572,0x00030005,0x000001a7, + 0x006d7573,0x00040005,0x000001ba,0x6d75536b,0x00000000,0x00040005,0x000001bb,0x61726170, + 0x0000006d,0x00040005,0x000001be,0x726f4e71,0x0000006d,0x00040005,0x000001c3,0x726f4e6b, + 0x0000006d,0x00060005,0x000001c8,0x7261656c,0x5364656e,0x656c6163,0x00000000,0x00030005, + 0x000001ca,0x00787541,0x00050006,0x000001ca,0x00000000,0x33787561,0x00000032,0x00030005, + 0x000001cc,0x00000000,0x00050005,0x000001d6,0x64616568,0x6c616353,0x00000065,0x00030005, + 0x000001d8,0x00000063,0x00030005,0x000001e0,0x0030716e,0x00030005,0x000001e6,0x0031716e, + 0x00030005,0x000001ea,0x0032716e,0x00030005,0x000001ee,0x00006b6e,0x00050005,0x000001f6, + 0x6d726f4e,0x7a696c61,0x00006465,0x00060006,0x000001f6,0x00000000,0x6d726f6e,0x7a696c61, + 0x00006465,0x00030005,0x000001f8,0x00000000,0x00040005,0x000001fc,0x61726170,0x0000006d, + 0x00040005,0x000001ff,0x61726170,0x0000006d,0x00040005,0x00000208,0x61726170,0x0000006d, + 0x00040005,0x0000020b,0x61726170,0x0000006d,0x00040005,0x00000218,0x61726170,0x0000006d, + 0x00040005,0x0000021c,0x61726170,0x0000006d,0x00030047,0x000000de,0x0000002a,0x00030047, + 0x000000f8,0x0000002a,0x00030047,0x00000106,0x0000002a,0x00030047,0x0000010d,0x0000002a, + 0x00040047,0x00000119,0x0000000b,0x0000001c,0x00030047,0x00000125,0x00000002,0x00050048, + 0x00000125,0x00000000,0x00000023,0x00000000,0x00050048,0x00000125,0x00000001,0x00000023, + 0x00000004,0x00050048,0x00000125,0x00000002,0x00000023,0x00000008,0x00050048,0x00000125, + 0x00000003,0x00000023,0x0000000c,0x00040047,0x00000153,0x00000006,0x00000002,0x00030047, + 0x00000154,0x00000002,0x00040048,0x00000154,0x00000000,0x00000018,0x00050048,0x00000154, + 0x00000000,0x00000023,0x00000000,0x00030047,0x00000156,0x00000018,0x00040047,0x00000156, + 0x00000021,0x00000001,0x00040047,0x00000156,0x00000022,0x00000000,0x00030047,0x0000017a, + 0x0000002a,0x00030047,0x00000186,0x0000002a,0x00030047,0x00000189,0x0000002a,0x00030047, + 0x000001a6,0x0000002a,0x00030047,0x000001b0,0x0000002a,0x00030047,0x000001b3,0x0000002a, + 0x00040047,0x000001c9,0x00000006,0x00000004,0x00030047,0x000001ca,0x00000002,0x00040048, + 0x000001ca,0x00000000,0x00000018,0x00050048,0x000001ca,0x00000000,0x00000023,0x00000000, + 0x00030047,0x000001cc,0x00000018,0x00040047,0x000001cc,0x00000021,0x00000004,0x00040047, + 0x000001cc,0x00000022,0x00000000,0x00030047,0x000001e5,0x0000002a,0x00030047,0x000001e9, + 0x0000002a,0x00030047,0x000001ed,0x0000002a,0x00030047,0x000001f3,0x0000002a,0x00040047, + 0x000001f5,0x00000006,0x00000001,0x00030047,0x000001f6,0x00000002,0x00040048,0x000001f6, + 0x00000000,0x00000019,0x00050048,0x000001f6,0x00000000,0x00000023,0x00000000,0x00030047, + 0x000001f8,0x00000019,0x00040047,0x000001f8,0x00000021,0x00000005,0x00040047,0x000001f8, + 0x00000022,0x00000000,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016, + 0x00000006,0x00000010,0x00040020,0x00000007,0x00000007,0x00000006,0x00040015,0x00000008, + 0x00000020,0x00000000,0x00040021,0x00000009,0x00000008,0x00000007,0x00040020,0x0000000d, + 0x00000007,0x00000008,0x00050021,0x0000000e,0x00000008,0x0000000d,0x0000000d,0x00040021, + 0x00000013,0x00000008,0x0000000d,0x0004002b,0x00000008,0x00000017,0x00000010,0x0004001c, + 0x00000018,0x00000006,0x00000017,0x00040020,0x00000019,0x00000007,0x00000018,0x00040021, + 0x0000001a,0x00000006,0x00000019,0x00040015,0x0000001f,0x00000010,0x00000000,0x0004002b, + 0x00000008,0x00000029,0x00000001,0x00020014,0x00000036,0x0004002b,0x00000008,0x00000044, + 0x00000000,0x00040020,0x0000004c,0x00000007,0x00000036,0x0004002b,0x00000008,0x0000004f, + 0x00007c00,0x0004002b,0x00000008,0x00000055,0x000003ff,0x0004002b,0x00000008,0x0000005e, + 0x00007fff,0x0004002b,0x00000008,0x00000064,0x00000008,0x0004002b,0x00000008,0x00000066, + 0x00000080,0x0004002b,0x00000008,0x0000006b,0x00008000,0x0004002b,0x00000008,0x00000071, + 0x0000000a,0x0004002b,0x00000008,0x00000073,0x0000001f,0x0004002b,0x00000008,0x0000007d, + 0x0000007e,0x0004002b,0x00000008,0x0000008b,0x00000400,0x0004002b,0x00000008,0x00000095, + 0x0000000f,0x0004002b,0x00000008,0x000000a5,0x00000007,0x0004002b,0x00000008,0x000000b8, + 0x00000006,0x0004002b,0x00000008,0x000000c1,0x00000003,0x0004001c,0x000000d3,0x00000006, + 0x00000064,0x00040020,0x000000d4,0x00000007,0x000000d3,0x00040015,0x000000e1,0x00000020, + 0x00000001,0x0004002b,0x000000e1,0x000000e2,0x00000001,0x0004002b,0x00000008,0x000000eb, + 0x00000004,0x0004001c,0x000000ed,0x00000006,0x000000eb,0x00040020,0x000000ee,0x00000007, + 0x000000ed,0x0004002b,0x00000008,0x000000fc,0x00000002,0x0004001c,0x000000fd,0x00000006, + 0x000000fc,0x00040020,0x000000fe,0x00000007,0x000000fd,0x0004002b,0x000000e1,0x00000100, + 0x00000000,0x0004002b,0x000000e1,0x00000103,0x00000002,0x0004002b,0x000000e1,0x0000010a, + 0x00000003,0x00040017,0x00000117,0x00000008,0x00000003,0x00040020,0x00000118,0x00000001, + 0x00000117,0x0004003b,0x00000118,0x00000119,0x00000001,0x00040020,0x0000011a,0x00000001, + 0x00000008,0x0004002b,0x00000008,0x0000011f,0x0000ffff,0x0004002b,0x00000008,0x00000121, + 0x00000100,0x0006001e,0x00000125,0x00000008,0x00000008,0x00000008,0x00000008,0x00040020, + 0x00000126,0x00000009,0x00000125,0x0004003b,0x00000126,0x00000127,0x00000009,0x00040020, + 0x00000128,0x00000009,0x00000008,0x0004002b,0x00000008,0x00000143,0x00000060,0x0004002b, + 0x00000008,0x0000014d,0x00000020,0x0004001c,0x0000014f,0x00000006,0x0000014d,0x00040020, + 0x00000150,0x00000007,0x0000014f,0x0003001d,0x00000153,0x00000006,0x0003001e,0x00000154, + 0x00000153,0x00040020,0x00000155,0x0000000c,0x00000154,0x0004003b,0x00000155,0x00000156, + 0x0000000c,0x00040020,0x0000015a,0x0000000c,0x00000006,0x00030016,0x0000017b,0x00000020, + 0x00040020,0x0000017c,0x00000007,0x0000017b,0x0003001d,0x000001c9,0x00000008,0x0003001e, + 0x000001ca,0x000001c9,0x00040020,0x000001cb,0x0000000c,0x000001ca,0x0004003b,0x000001cb, + 0x000001cc,0x0000000c,0x00040020,0x000001d1,0x0000000c,0x00000008,0x0004002b,0x00000006, + 0x000001d7,0x000045a8,0x00040015,0x000001f4,0x00000008,0x00000000,0x0003001d,0x000001f5, + 0x000001f4,0x0003001e,0x000001f6,0x000001f5,0x00040020,0x000001f7,0x0000000c,0x000001f6, + 0x0004003b,0x000001f7,0x000001f8,0x0000000c,0x00040020,0x00000202,0x0000000c,0x000001f4, + 0x0004002b,0x00000008,0x00000210,0x00000040,0x0006002c,0x00000117,0x00000222,0x00000121, + 0x00000029,0x00000029,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8, + 0x00000005,0x0004003b,0x0000000d,0x00000116,0x00000007,0x0004003b,0x0000000d,0x00000132, + 0x00000007,0x0004003b,0x0000000d,0x00000137,0x00000007,0x0004003b,0x0000000d,0x0000013c, + 0x00000007,0x0004003b,0x0000000d,0x00000146,0x00000007,0x0004003b,0x00000150,0x00000151, + 0x00000007,0x0004003b,0x00000150,0x0000015e,0x00000007,0x0004003b,0x0000000d,0x00000169, + 0x00000007,0x0004003b,0x00000007,0x00000171,0x00000007,0x0004003b,0x0000017c,0x0000017d, + 0x00000007,0x0004003b,0x00000019,0x0000018a,0x00000007,0x0004003b,0x00000007,0x00000191, + 0x00000007,0x0004003b,0x00000019,0x00000192,0x00000007,0x0004003b,0x0000000d,0x00000195, + 0x00000007,0x0004003b,0x00000007,0x0000019d,0x00000007,0x0004003b,0x0000017c,0x000001a7, + 0x00000007,0x0004003b,0x00000007,0x000001ba,0x00000007,0x0004003b,0x00000019,0x000001bb, + 0x00000007,0x0004003b,0x00000007,0x000001be,0x00000007,0x0004003b,0x00000007,0x000001c3, + 0x00000007,0x0004003b,0x00000007,0x000001c8,0x00000007,0x0004003b,0x00000007,0x000001d6, + 0x00000007,0x0004003b,0x0000000d,0x000001d8,0x00000007,0x0004003b,0x00000007,0x000001e0, + 0x00000007,0x0004003b,0x00000007,0x000001e6,0x00000007,0x0004003b,0x00000007,0x000001ea, + 0x00000007,0x0004003b,0x00000007,0x000001ee,0x00000007,0x0004003b,0x00000007,0x000001fc, + 0x00000007,0x0004003b,0x0000000d,0x000001ff,0x00000007,0x0004003b,0x00000007,0x00000208, + 0x00000007,0x0004003b,0x0000000d,0x0000020b,0x00000007,0x0004003b,0x00000007,0x00000218, + 0x00000007,0x0004003b,0x0000000d,0x0000021c,0x00000007,0x00050041,0x0000011a,0x0000011b, + 0x00000119,0x00000044,0x0004003d,0x00000008,0x0000011c,0x0000011b,0x00050041,0x0000011a, + 0x0000011d,0x00000119,0x00000029,0x0004003d,0x00000008,0x0000011e,0x0000011d,0x00050084, + 0x00000008,0x00000120,0x0000011e,0x0000011f,0x00050084,0x00000008,0x00000122,0x00000120, + 0x00000121,0x00050080,0x00000008,0x00000123,0x0000011c,0x00000122,0x0003003e,0x00000116, + 0x00000123,0x0004003d,0x00000008,0x00000124,0x00000116,0x00050041,0x00000128,0x00000129, + 0x00000127,0x00000100,0x0004003d,0x00000008,0x0000012a,0x00000129,0x00050041,0x00000128, + 0x0000012b,0x00000127,0x000000e2,0x0004003d,0x00000008,0x0000012c,0x0000012b,0x00050084, + 0x00000008,0x0000012d,0x0000012a,0x0000012c,0x000500ae,0x00000036,0x0000012e,0x00000124, + 0x0000012d,0x000300f7,0x00000130,0x00000000,0x000400fa,0x0000012e,0x0000012f,0x00000130, + 0x000200f8,0x0000012f,0x000100fd,0x000200f8,0x00000130,0x0004003d,0x00000008,0x00000133, + 0x00000116,0x00050041,0x00000128,0x00000134,0x00000127,0x000000e2,0x0004003d,0x00000008, + 0x00000135,0x00000134,0x00050086,0x00000008,0x00000136,0x00000133,0x00000135,0x0003003e, + 0x00000132,0x00000136,0x0004003d,0x00000008,0x00000138,0x00000116,0x00050041,0x00000128, + 0x00000139,0x00000127,0x000000e2,0x0004003d,0x00000008,0x0000013a,0x00000139,0x00050089, + 0x00000008,0x0000013b,0x00000138,0x0000013a,0x0003003e,0x00000137,0x0000013b,0x0004003d, + 0x00000008,0x0000013d,0x00000132,0x00050041,0x00000128,0x0000013e,0x00000127,0x00000103, + 0x0004003d,0x00000008,0x0000013f,0x0000013e,0x00050084,0x00000008,0x00000140,0x0000013d, + 0x0000013f,0x00050084,0x00000008,0x00000141,0x00000140,0x000000c1,0x0004003d,0x00000008, + 0x00000142,0x00000137,0x00050084,0x00000008,0x00000144,0x00000142,0x00000143,0x00050080, + 0x00000008,0x00000145,0x00000141,0x00000144,0x0003003e,0x0000013c,0x00000145,0x0003003e, + 0x00000146,0x00000044,0x000200f9,0x00000147,0x000200f8,0x00000147,0x000400f6,0x00000149, + 0x0000014a,0x00000000,0x000200f9,0x0000014b,0x000200f8,0x0000014b,0x0004003d,0x00000008, + 0x0000014c,0x00000146,0x000500b0,0x00000036,0x0000014e,0x0000014c,0x0000014d,0x000400fa, + 0x0000014e,0x00000148,0x00000149,0x000200f8,0x00000148,0x0004003d,0x00000008,0x00000152, + 0x00000146,0x0004003d,0x00000008,0x00000157,0x0000013c,0x0004003d,0x00000008,0x00000158, + 0x00000146,0x00050080,0x00000008,0x00000159,0x00000157,0x00000158,0x00060041,0x0000015a, + 0x0000015b,0x00000156,0x00000100,0x00000159,0x0004003d,0x00000006,0x0000015c,0x0000015b, + 0x00050041,0x00000007,0x0000015d,0x00000151,0x00000152,0x0003003e,0x0000015d,0x0000015c, + 0x0004003d,0x00000008,0x0000015f,0x00000146,0x0004003d,0x00000008,0x00000160,0x0000013c, + 0x00050080,0x00000008,0x00000161,0x00000160,0x0000014d,0x0004003d,0x00000008,0x00000162, + 0x00000146,0x00050080,0x00000008,0x00000163,0x00000161,0x00000162,0x00060041,0x0000015a, + 0x00000164,0x00000156,0x00000100,0x00000163,0x0004003d,0x00000006,0x00000165,0x00000164, + 0x00050041,0x00000007,0x00000166,0x0000015e,0x0000015f,0x0003003e,0x00000166,0x00000165, + 0x000200f9,0x0000014a,0x000200f8,0x0000014a,0x0004003d,0x00000008,0x00000167,0x00000146, + 0x00050080,0x00000008,0x00000168,0x00000167,0x000000e2,0x0003003e,0x00000146,0x00000168, + 0x000200f9,0x00000147,0x000200f8,0x00000149,0x0003003e,0x00000169,0x00000044,0x000200f9, + 0x0000016a,0x000200f8,0x0000016a,0x000400f6,0x0000016c,0x0000016d,0x00000000,0x000200f9, + 0x0000016e,0x000200f8,0x0000016e,0x0004003d,0x00000008,0x0000016f,0x00000169,0x000500b0, + 0x00000036,0x00000170,0x0000016f,0x00000017,0x000400fa,0x00000170,0x0000016b,0x0000016c, + 0x000200f8,0x0000016b,0x0004003d,0x00000008,0x00000172,0x00000169,0x00050080,0x00000008, + 0x00000173,0x00000172,0x00000017,0x00050041,0x00000007,0x00000174,0x00000151,0x00000173, + 0x0004003d,0x00000006,0x00000175,0x00000174,0x0004003d,0x00000008,0x00000176,0x00000169, + 0x00050080,0x00000008,0x00000177,0x00000176,0x00000017,0x00050041,0x00000007,0x00000178, + 0x00000151,0x00000177,0x0004003d,0x00000006,0x00000179,0x00000178,0x00050085,0x00000006, + 0x0000017a,0x00000175,0x00000179,0x0003003e,0x00000171,0x0000017a,0x0004003d,0x00000008, + 0x0000017e,0x00000169,0x00050041,0x00000007,0x0000017f,0x00000151,0x0000017e,0x0004003d, + 0x00000006,0x00000180,0x0000017f,0x00040073,0x0000017b,0x00000181,0x00000180,0x0004003d, + 0x00000008,0x00000182,0x00000169,0x00050041,0x00000007,0x00000183,0x00000151,0x00000182, + 0x0004003d,0x00000006,0x00000184,0x00000183,0x00040073,0x0000017b,0x00000185,0x00000184, + 0x00050085,0x0000017b,0x00000186,0x00000181,0x00000185,0x0004003d,0x00000006,0x00000187, + 0x00000171,0x00040073,0x0000017b,0x00000188,0x00000187,0x00050081,0x0000017b,0x00000189, + 0x00000186,0x00000188,0x0003003e,0x0000017d,0x00000189,0x0004003d,0x00000008,0x0000018b, + 0x00000169,0x0004003d,0x0000017b,0x0000018c,0x0000017d,0x00040073,0x00000006,0x0000018d, + 0x0000018c,0x00050041,0x00000007,0x0000018e,0x0000018a,0x0000018b,0x0003003e,0x0000018e, + 0x0000018d,0x000200f9,0x0000016d,0x000200f8,0x0000016d,0x0004003d,0x00000008,0x0000018f, + 0x00000169,0x00050080,0x00000008,0x00000190,0x0000018f,0x000000e2,0x0003003e,0x00000169, + 0x00000190,0x000200f9,0x0000016a,0x000200f8,0x0000016c,0x0004003d,0x00000018,0x00000193, + 0x0000018a,0x0003003e,0x00000192,0x00000193,0x00050039,0x00000006,0x00000194,0x0000001c, + 0x00000192,0x0003003e,0x00000191,0x00000194,0x0003003e,0x00000195,0x00000044,0x000200f9, + 0x00000196,0x000200f8,0x00000196,0x000400f6,0x00000198,0x00000199,0x00000000,0x000200f9, + 0x0000019a,0x000200f8,0x0000019a,0x0004003d,0x00000008,0x0000019b,0x00000195,0x000500b0, + 0x00000036,0x0000019c,0x0000019b,0x00000017,0x000400fa,0x0000019c,0x00000197,0x00000198, + 0x000200f8,0x00000197,0x0004003d,0x00000008,0x0000019e,0x00000195,0x00050080,0x00000008, + 0x0000019f,0x0000019e,0x00000017,0x00050041,0x00000007,0x000001a0,0x0000015e,0x0000019f, + 0x0004003d,0x00000006,0x000001a1,0x000001a0,0x0004003d,0x00000008,0x000001a2,0x00000195, + 0x00050080,0x00000008,0x000001a3,0x000001a2,0x00000017,0x00050041,0x00000007,0x000001a4, + 0x0000015e,0x000001a3,0x0004003d,0x00000006,0x000001a5,0x000001a4,0x00050085,0x00000006, + 0x000001a6,0x000001a1,0x000001a5,0x0003003e,0x0000019d,0x000001a6,0x0004003d,0x00000008, + 0x000001a8,0x00000195,0x00050041,0x00000007,0x000001a9,0x0000015e,0x000001a8,0x0004003d, + 0x00000006,0x000001aa,0x000001a9,0x00040073,0x0000017b,0x000001ab,0x000001aa,0x0004003d, + 0x00000008,0x000001ac,0x00000195,0x00050041,0x00000007,0x000001ad,0x0000015e,0x000001ac, + 0x0004003d,0x00000006,0x000001ae,0x000001ad,0x00040073,0x0000017b,0x000001af,0x000001ae, + 0x00050085,0x0000017b,0x000001b0,0x000001ab,0x000001af,0x0004003d,0x00000006,0x000001b1, + 0x0000019d,0x00040073,0x0000017b,0x000001b2,0x000001b1,0x00050081,0x0000017b,0x000001b3, + 0x000001b0,0x000001b2,0x0003003e,0x000001a7,0x000001b3,0x0004003d,0x00000008,0x000001b4, + 0x00000195,0x0004003d,0x0000017b,0x000001b5,0x000001a7,0x00040073,0x00000006,0x000001b6, + 0x000001b5,0x00050041,0x00000007,0x000001b7,0x0000018a,0x000001b4,0x0003003e,0x000001b7, + 0x000001b6,0x000200f9,0x00000199,0x000200f8,0x00000199,0x0004003d,0x00000008,0x000001b8, + 0x00000195,0x00050080,0x00000008,0x000001b9,0x000001b8,0x000000e2,0x0003003e,0x00000195, + 0x000001b9,0x000200f9,0x00000196,0x000200f8,0x00000198,0x0004003d,0x00000018,0x000001bc, + 0x0000018a,0x0003003e,0x000001bb,0x000001bc,0x00050039,0x00000006,0x000001bd,0x0000001c, + 0x000001bb,0x0003003e,0x000001ba,0x000001bd,0x0004003d,0x00000006,0x000001bf,0x00000191, + 0x00040073,0x0000017b,0x000001c0,0x000001bf,0x0006000c,0x0000017b,0x000001c1,0x00000001, + 0x00000020,0x000001c0,0x00040073,0x00000006,0x000001c2,0x000001c1,0x0003003e,0x000001be, + 0x000001c2,0x0004003d,0x00000006,0x000001c4,0x000001ba,0x00040073,0x0000017b,0x000001c5, + 0x000001c4,0x0006000c,0x0000017b,0x000001c6,0x00000001,0x00000020,0x000001c5,0x00040073, + 0x00000006,0x000001c7,0x000001c6,0x0003003e,0x000001c3,0x000001c7,0x00050041,0x00000128, + 0x000001cd,0x00000127,0x0000010a,0x0004003d,0x00000008,0x000001ce,0x000001cd,0x0004003d, + 0x00000008,0x000001cf,0x00000137,0x00050080,0x00000008,0x000001d0,0x000001ce,0x000001cf, + 0x00060041,0x000001d1,0x000001d2,0x000001cc,0x00000100,0x000001d0,0x0004003d,0x00000008, + 0x000001d3,0x000001d2,0x0004007c,0x0000017b,0x000001d4,0x000001d3,0x00040073,0x00000006, + 0x000001d5,0x000001d4,0x0003003e,0x000001c8,0x000001d5,0x0003003e,0x000001d6,0x000001d7, + 0x0003003e,0x000001d8,0x00000044,0x000200f9,0x000001d9,0x000200f8,0x000001d9,0x000400f6, + 0x000001db,0x000001dc,0x00000000,0x000200f9,0x000001dd,0x000200f8,0x000001dd,0x0004003d, + 0x00000008,0x000001de,0x000001d8,0x000500b0,0x00000036,0x000001df,0x000001de,0x0000014d, + 0x000400fa,0x000001df,0x000001da,0x000001db,0x000200f8,0x000001da,0x0004003d,0x00000008, + 0x000001e1,0x000001d8,0x00050041,0x00000007,0x000001e2,0x00000151,0x000001e1,0x0004003d, + 0x00000006,0x000001e3,0x000001e2,0x0004003d,0x00000006,0x000001e4,0x000001be,0x00050085, + 0x00000006,0x000001e5,0x000001e3,0x000001e4,0x0003003e,0x000001e0,0x000001e5,0x0004003d, + 0x00000006,0x000001e7,0x000001e0,0x0004003d,0x00000006,0x000001e8,0x000001d6,0x00050085, + 0x00000006,0x000001e9,0x000001e7,0x000001e8,0x0003003e,0x000001e6,0x000001e9,0x0004003d, + 0x00000006,0x000001eb,0x000001e6,0x0004003d,0x00000006,0x000001ec,0x000001c8,0x00050085, + 0x00000006,0x000001ed,0x000001eb,0x000001ec,0x0003003e,0x000001ea,0x000001ed,0x0004003d, + 0x00000008,0x000001ef,0x000001d8,0x00050041,0x00000007,0x000001f0,0x0000015e,0x000001ef, + 0x0004003d,0x00000006,0x000001f1,0x000001f0,0x0004003d,0x00000006,0x000001f2,0x000001c3, + 0x00050085,0x00000006,0x000001f3,0x000001f1,0x000001f2,0x0003003e,0x000001ee,0x000001f3, + 0x0004003d,0x00000008,0x000001f9,0x0000013c,0x0004003d,0x00000008,0x000001fa,0x000001d8, + 0x00050080,0x00000008,0x000001fb,0x000001f9,0x000001fa,0x0004003d,0x00000006,0x000001fd, + 0x000001ea,0x0003003e,0x000001fc,0x000001fd,0x00050039,0x00000008,0x000001fe,0x0000000b, + 0x000001fc,0x0003003e,0x000001ff,0x000001fe,0x00050039,0x00000008,0x00000200,0x00000015, + 0x000001ff,0x00040071,0x000001f4,0x00000201,0x00000200,0x00060041,0x00000202,0x00000203, + 0x000001f8,0x00000100,0x000001fb,0x0003003e,0x00000203,0x00000201,0x0004003d,0x00000008, + 0x00000204,0x0000013c,0x00050080,0x00000008,0x00000205,0x00000204,0x0000014d,0x0004003d, + 0x00000008,0x00000206,0x000001d8,0x00050080,0x00000008,0x00000207,0x00000205,0x00000206, + 0x0004003d,0x00000006,0x00000209,0x000001ee,0x0003003e,0x00000208,0x00000209,0x00050039, + 0x00000008,0x0000020a,0x0000000b,0x00000208,0x0003003e,0x0000020b,0x0000020a,0x00050039, + 0x00000008,0x0000020c,0x00000015,0x0000020b,0x00040071,0x000001f4,0x0000020d,0x0000020c, + 0x00060041,0x00000202,0x0000020e,0x000001f8,0x00000100,0x00000207,0x0003003e,0x0000020e, + 0x0000020d,0x0004003d,0x00000008,0x0000020f,0x0000013c,0x00050080,0x00000008,0x00000211, + 0x0000020f,0x00000210,0x0004003d,0x00000008,0x00000212,0x000001d8,0x00050080,0x00000008, + 0x00000213,0x00000211,0x00000212,0x0004003d,0x00000008,0x00000214,0x0000013c,0x00050080, + 0x00000008,0x00000215,0x00000214,0x00000210,0x0004003d,0x00000008,0x00000216,0x000001d8, + 0x00050080,0x00000008,0x00000217,0x00000215,0x00000216,0x00060041,0x0000015a,0x00000219, + 0x00000156,0x00000100,0x00000217,0x0004003d,0x00000006,0x0000021a,0x00000219,0x0003003e, + 0x00000218,0x0000021a,0x00050039,0x00000008,0x0000021b,0x0000000b,0x00000218,0x0003003e, + 0x0000021c,0x0000021b,0x00050039,0x00000008,0x0000021d,0x00000015,0x0000021c,0x00040071, + 0x000001f4,0x0000021e,0x0000021d,0x00060041,0x00000202,0x0000021f,0x000001f8,0x00000100, + 0x00000213,0x0003003e,0x0000021f,0x0000021e,0x000200f9,0x000001dc,0x000200f8,0x000001dc, + 0x0004003d,0x00000008,0x00000220,0x000001d8,0x00050080,0x00000008,0x00000221,0x00000220, + 0x000000e2,0x0003003e,0x000001d8,0x00000221,0x000200f9,0x000001d9,0x000200f8,0x000001db, + 0x000100fd,0x00010038,0x00050036,0x00000008,0x0000000b,0x00000000,0x00000009,0x00030037, + 0x00000007,0x0000000a,0x000200f8,0x0000000c,0x0004003d,0x00000006,0x0000001e,0x0000000a, + 0x0004007c,0x0000001f,0x00000020,0x0000001e,0x00040071,0x00000008,0x00000021,0x00000020, + 0x000200fe,0x00000021,0x00010038,0x00050036,0x00000008,0x00000011,0x00000000,0x0000000e, + 0x00030037,0x0000000d,0x0000000f,0x00030037,0x0000000d,0x00000010,0x000200f8,0x00000012, + 0x0004003b,0x0000000d,0x00000024,0x00000007,0x0004003b,0x0000000d,0x00000028,0x00000007, + 0x0004003b,0x0000000d,0x0000002d,0x00000007,0x0004003b,0x0000000d,0x00000031,0x00000007, + 0x0004003d,0x00000008,0x00000025,0x0000000f,0x0004003d,0x00000008,0x00000026,0x00000010, + 0x000500c2,0x00000008,0x00000027,0x00000025,0x00000026,0x0003003e,0x00000024,0x00000027, + 0x0004003d,0x00000008,0x0000002a,0x00000010,0x000500c4,0x00000008,0x0000002b,0x00000029, + 0x0000002a,0x00050082,0x00000008,0x0000002c,0x0000002b,0x00000029,0x0003003e,0x00000028, + 0x0000002c,0x0004003d,0x00000008,0x0000002e,0x0000000f,0x0004003d,0x00000008,0x0000002f, + 0x00000028,0x000500c7,0x00000008,0x00000030,0x0000002e,0x0000002f,0x0003003e,0x0000002d, + 0x00000030,0x0004003d,0x00000008,0x00000032,0x00000010,0x00050082,0x00000008,0x00000033, + 0x00000032,0x00000029,0x000500c4,0x00000008,0x00000034,0x00000029,0x00000033,0x0003003e, + 0x00000031,0x00000034,0x0004003d,0x00000008,0x00000035,0x00000024,0x0004003d,0x00000008, + 0x00000037,0x0000002d,0x0004003d,0x00000008,0x00000038,0x00000031,0x000500ac,0x00000036, + 0x00000039,0x00000037,0x00000038,0x000400a8,0x00000036,0x0000003a,0x00000039,0x000300f7, + 0x0000003c,0x00000000,0x000400fa,0x0000003a,0x0000003b,0x0000003c,0x000200f8,0x0000003b, + 0x0004003d,0x00000008,0x0000003d,0x0000002d,0x0004003d,0x00000008,0x0000003e,0x00000031, + 0x000500aa,0x00000036,0x0000003f,0x0000003d,0x0000003e,0x000300f7,0x00000041,0x00000000, + 0x000400fa,0x0000003f,0x00000040,0x00000041,0x000200f8,0x00000040,0x0004003d,0x00000008, + 0x00000042,0x00000024,0x000500c7,0x00000008,0x00000043,0x00000042,0x00000029,0x000500ab, + 0x00000036,0x00000045,0x00000043,0x00000044,0x000200f9,0x00000041,0x000200f8,0x00000041, + 0x000700f5,0x00000036,0x00000046,0x0000003f,0x0000003b,0x00000045,0x00000040,0x000200f9, + 0x0000003c,0x000200f8,0x0000003c,0x000700f5,0x00000036,0x00000047,0x00000039,0x00000012, + 0x00000046,0x00000041,0x000600a9,0x00000008,0x00000048,0x00000047,0x00000029,0x00000044, + 0x00050080,0x00000008,0x00000049,0x00000035,0x00000048,0x000200fe,0x00000049,0x00010038, + 0x00050036,0x00000008,0x00000015,0x00000000,0x00000013,0x00030037,0x0000000d,0x00000014, + 0x000200f8,0x00000016,0x0004003b,0x0000004c,0x0000004d,0x00000007,0x0004003b,0x0000000d, + 0x00000069,0x00000007,0x0004003b,0x0000000d,0x0000006f,0x00000007,0x0004003b,0x0000000d, + 0x00000075,0x00000007,0x0004003b,0x0000000d,0x0000007c,0x00000007,0x0004003b,0x0000000d, + 0x00000083,0x00000007,0x0004003b,0x0000000d,0x00000086,0x00000007,0x0004003b,0x0000000d, + 0x0000008f,0x00000007,0x0004003b,0x0000000d,0x00000092,0x00000007,0x0004003b,0x0000000d, + 0x0000009a,0x00000007,0x0004003b,0x0000000d,0x0000009c,0x00000007,0x0004003b,0x0000000d, + 0x000000a1,0x00000007,0x0004003b,0x0000000d,0x000000a4,0x00000007,0x0004003b,0x0000000d, + 0x000000a6,0x00000007,0x0004003b,0x0000000d,0x000000a8,0x00000007,0x0004003b,0x0000000d, + 0x000000bc,0x00000007,0x0004003d,0x00000008,0x0000004e,0x00000014,0x000500c7,0x00000008, + 0x00000050,0x0000004e,0x0000004f,0x000500aa,0x00000036,0x00000051,0x00000050,0x0000004f, + 0x000300f7,0x00000053,0x00000000,0x000400fa,0x00000051,0x00000052,0x00000053,0x000200f8, + 0x00000052,0x0004003d,0x00000008,0x00000054,0x00000014,0x000500c7,0x00000008,0x00000056, + 0x00000054,0x00000055,0x000500ab,0x00000036,0x00000057,0x00000056,0x00000044,0x000200f9, + 0x00000053,0x000200f8,0x00000053,0x000700f5,0x00000036,0x00000058,0x00000051,0x00000016, + 0x00000057,0x00000052,0x0003003e,0x0000004d,0x00000058,0x0004003d,0x00000036,0x00000059, + 0x0000004d,0x000300f7,0x0000005b,0x00000000,0x000400fa,0x00000059,0x0000005a,0x0000005b, + 0x000200f8,0x0000005a,0x000200fe,0x00000044,0x000200f8,0x0000005b,0x0004003d,0x00000008, + 0x0000005d,0x00000014,0x000500c7,0x00000008,0x0000005f,0x0000005d,0x0000005e,0x000500aa, + 0x00000036,0x00000060,0x0000005f,0x00000044,0x000300f7,0x00000062,0x00000000,0x000400fa, + 0x00000060,0x00000061,0x00000062,0x000200f8,0x00000061,0x0004003d,0x00000008,0x00000063, + 0x00000014,0x000500c2,0x00000008,0x00000065,0x00000063,0x00000064,0x000500c7,0x00000008, + 0x00000067,0x00000065,0x00000066,0x000200fe,0x00000067,0x000200f8,0x00000062,0x0004003d, + 0x00000008,0x0000006a,0x00000014,0x000500c7,0x00000008,0x0000006c,0x0000006a,0x0000006b, + 0x000500ab,0x00000036,0x0000006d,0x0000006c,0x00000044,0x000600a9,0x00000008,0x0000006e, + 0x0000006d,0x00000066,0x00000044,0x0003003e,0x00000069,0x0000006e,0x0004003d,0x00000008, + 0x00000070,0x00000014,0x000500c2,0x00000008,0x00000072,0x00000070,0x00000071,0x000500c7, + 0x00000008,0x00000074,0x00000072,0x00000073,0x0003003e,0x0000006f,0x00000074,0x0004003d, + 0x00000008,0x00000076,0x00000014,0x000500c7,0x00000008,0x00000077,0x00000076,0x00000055, + 0x0003003e,0x00000075,0x00000077,0x0004003d,0x00000008,0x00000078,0x0000006f,0x000500aa, + 0x00000036,0x00000079,0x00000078,0x00000073,0x000300f7,0x0000007b,0x00000000,0x000400fa, + 0x00000079,0x0000007a,0x0000007e,0x000200f8,0x0000007a,0x0003003e,0x0000007c,0x0000007d, + 0x000200f9,0x0000007b,0x000200f8,0x0000007e,0x0004003d,0x00000008,0x0000007f,0x0000006f, + 0x000500b2,0x00000036,0x00000080,0x0000007f,0x00000064,0x000300f7,0x00000082,0x00000000, + 0x000400fa,0x00000080,0x00000081,0x000000a0,0x000200f8,0x00000081,0x0004003d,0x00000008, + 0x00000084,0x0000006f,0x000500aa,0x00000036,0x00000085,0x00000084,0x00000044,0x000300f7, + 0x00000088,0x00000000,0x000400fa,0x00000085,0x00000087,0x0000008a,0x000200f8,0x00000087, + 0x0004003d,0x00000008,0x00000089,0x00000075,0x0003003e,0x00000086,0x00000089,0x000200f9, + 0x00000088,0x000200f8,0x0000008a,0x0004003d,0x00000008,0x0000008c,0x00000075,0x00050080, + 0x00000008,0x0000008d,0x0000008b,0x0000008c,0x0003003e,0x00000086,0x0000008d,0x000200f9, + 0x00000088,0x000200f8,0x00000088,0x0004003d,0x00000008,0x0000008e,0x00000086,0x0003003e, + 0x00000083,0x0000008e,0x0004003d,0x00000008,0x00000090,0x0000006f,0x000500aa,0x00000036, + 0x00000091,0x00000090,0x00000044,0x000300f7,0x00000094,0x00000000,0x000400fa,0x00000091, + 0x00000093,0x00000096,0x000200f8,0x00000093,0x0003003e,0x00000092,0x00000095,0x000200f9, + 0x00000094,0x000200f8,0x00000096,0x0004003d,0x00000008,0x00000097,0x0000006f,0x00050082, + 0x00000008,0x00000098,0x00000017,0x00000097,0x0003003e,0x00000092,0x00000098,0x000200f9, + 0x00000094,0x000200f8,0x00000094,0x0004003d,0x00000008,0x00000099,0x00000092,0x0003003e, + 0x0000008f,0x00000099,0x0004003d,0x00000008,0x0000009b,0x00000083,0x0003003e,0x0000009a, + 0x0000009b,0x0004003d,0x00000008,0x0000009d,0x0000008f,0x0003003e,0x0000009c,0x0000009d, + 0x00060039,0x00000008,0x0000009e,0x00000011,0x0000009a,0x0000009c,0x0007000c,0x00000008, + 0x0000009f,0x00000001,0x00000026,0x0000009e,0x00000064,0x0003003e,0x0000007c,0x0000009f, + 0x000200f9,0x00000082,0x000200f8,0x000000a0,0x0004003d,0x00000008,0x000000a2,0x0000006f, + 0x00050082,0x00000008,0x000000a3,0x000000a2,0x00000064,0x0003003e,0x000000a1,0x000000a3, + 0x0004003d,0x00000008,0x000000a7,0x00000075,0x0003003e,0x000000a6,0x000000a7,0x0003003e, + 0x000000a8,0x000000a5,0x00060039,0x00000008,0x000000a9,0x00000011,0x000000a6,0x000000a8, + 0x0003003e,0x000000a4,0x000000a9,0x0004003d,0x00000008,0x000000aa,0x000000a4,0x000500aa, + 0x00000036,0x000000ab,0x000000aa,0x00000064,0x000300f7,0x000000ad,0x00000000,0x000400fa, + 0x000000ab,0x000000ac,0x000000ad,0x000200f8,0x000000ac,0x0003003e,0x000000a4,0x00000044, + 0x0004003d,0x00000008,0x000000ae,0x000000a1,0x00050080,0x00000008,0x000000af,0x000000ae, + 0x00000029,0x0003003e,0x000000a1,0x000000af,0x000200f9,0x000000ad,0x000200f8,0x000000ad, + 0x0004003d,0x00000008,0x000000b0,0x000000a1,0x000500ac,0x00000036,0x000000b1,0x000000b0, + 0x00000095,0x000400a8,0x00000036,0x000000b2,0x000000b1,0x000300f7,0x000000b4,0x00000000, + 0x000400fa,0x000000b2,0x000000b3,0x000000b4,0x000200f8,0x000000b3,0x0004003d,0x00000008, + 0x000000b5,0x000000a1,0x000500aa,0x00000036,0x000000b6,0x000000b5,0x00000095,0x0004003d, + 0x00000008,0x000000b7,0x000000a4,0x000500ac,0x00000036,0x000000b9,0x000000b7,0x000000b8, + 0x000500a7,0x00000036,0x000000ba,0x000000b6,0x000000b9,0x000200f9,0x000000b4,0x000200f8, + 0x000000b4,0x000700f5,0x00000036,0x000000bb,0x000000b1,0x000000ad,0x000000ba,0x000000b3, + 0x000300f7,0x000000be,0x00000000,0x000400fa,0x000000bb,0x000000bd,0x000000bf,0x000200f8, + 0x000000bd,0x0003003e,0x000000bc,0x0000007d,0x000200f9,0x000000be,0x000200f8,0x000000bf, + 0x0004003d,0x00000008,0x000000c0,0x000000a1,0x000500c4,0x00000008,0x000000c2,0x000000c0, + 0x000000c1,0x0004003d,0x00000008,0x000000c3,0x000000a4,0x000500c5,0x00000008,0x000000c4, + 0x000000c2,0x000000c3,0x0003003e,0x000000bc,0x000000c4,0x000200f9,0x000000be,0x000200f8, + 0x000000be,0x0004003d,0x00000008,0x000000c5,0x000000bc,0x0003003e,0x0000007c,0x000000c5, + 0x000200f9,0x00000082,0x000200f8,0x00000082,0x000200f9,0x0000007b,0x000200f8,0x0000007b, + 0x0004003d,0x00000008,0x000000c6,0x00000069,0x0004003d,0x00000008,0x000000c7,0x0000007c, + 0x000500c5,0x00000008,0x000000c8,0x000000c6,0x000000c7,0x000200fe,0x000000c8,0x00010038, + 0x00050036,0x00000006,0x0000001c,0x00000000,0x0000001a,0x00030037,0x00000019,0x0000001b, + 0x000200f8,0x0000001d,0x0004003b,0x0000000d,0x000000cb,0x00000007,0x0004003b,0x000000d4, + 0x000000d5,0x00000007,0x0004003b,0x0000000d,0x000000e4,0x00000007,0x0004003b,0x000000ee, + 0x000000ef,0x00000007,0x0004003b,0x000000fe,0x000000ff,0x00000007,0x0003003e,0x000000cb, + 0x00000044,0x000200f9,0x000000cc,0x000200f8,0x000000cc,0x000400f6,0x000000ce,0x000000cf, + 0x00000000,0x000200f9,0x000000d0,0x000200f8,0x000000d0,0x0004003d,0x00000008,0x000000d1, + 0x000000cb,0x000500b0,0x00000036,0x000000d2,0x000000d1,0x00000064,0x000400fa,0x000000d2, + 0x000000cd,0x000000ce,0x000200f8,0x000000cd,0x0004003d,0x00000008,0x000000d6,0x000000cb, + 0x0004003d,0x00000008,0x000000d7,0x000000cb,0x00050041,0x00000007,0x000000d8,0x0000001b, + 0x000000d7,0x0004003d,0x00000006,0x000000d9,0x000000d8,0x0004003d,0x00000008,0x000000da, + 0x000000cb,0x00050080,0x00000008,0x000000db,0x000000da,0x00000064,0x00050041,0x00000007, + 0x000000dc,0x0000001b,0x000000db,0x0004003d,0x00000006,0x000000dd,0x000000dc,0x00050081, + 0x00000006,0x000000de,0x000000d9,0x000000dd,0x00050041,0x00000007,0x000000df,0x000000d5, + 0x000000d6,0x0003003e,0x000000df,0x000000de,0x000200f9,0x000000cf,0x000200f8,0x000000cf, + 0x0004003d,0x00000008,0x000000e0,0x000000cb,0x00050080,0x00000008,0x000000e3,0x000000e0, + 0x000000e2,0x0003003e,0x000000cb,0x000000e3,0x000200f9,0x000000cc,0x000200f8,0x000000ce, + 0x0003003e,0x000000e4,0x00000044,0x000200f9,0x000000e5,0x000200f8,0x000000e5,0x000400f6, + 0x000000e7,0x000000e8,0x00000000,0x000200f9,0x000000e9,0x000200f8,0x000000e9,0x0004003d, + 0x00000008,0x000000ea,0x000000e4,0x000500b0,0x00000036,0x000000ec,0x000000ea,0x000000eb, + 0x000400fa,0x000000ec,0x000000e6,0x000000e7,0x000200f8,0x000000e6,0x0004003d,0x00000008, + 0x000000f0,0x000000e4,0x0004003d,0x00000008,0x000000f1,0x000000e4,0x00050041,0x00000007, + 0x000000f2,0x000000d5,0x000000f1,0x0004003d,0x00000006,0x000000f3,0x000000f2,0x0004003d, + 0x00000008,0x000000f4,0x000000e4,0x00050080,0x00000008,0x000000f5,0x000000f4,0x000000eb, + 0x00050041,0x00000007,0x000000f6,0x000000d5,0x000000f5,0x0004003d,0x00000006,0x000000f7, + 0x000000f6,0x00050081,0x00000006,0x000000f8,0x000000f3,0x000000f7,0x00050041,0x00000007, + 0x000000f9,0x000000ef,0x000000f0,0x0003003e,0x000000f9,0x000000f8,0x000200f9,0x000000e8, + 0x000200f8,0x000000e8,0x0004003d,0x00000008,0x000000fa,0x000000e4,0x00050080,0x00000008, + 0x000000fb,0x000000fa,0x000000e2,0x0003003e,0x000000e4,0x000000fb,0x000200f9,0x000000e5, + 0x000200f8,0x000000e7,0x00050041,0x00000007,0x00000101,0x000000ef,0x00000100,0x0004003d, + 0x00000006,0x00000102,0x00000101,0x00050041,0x00000007,0x00000104,0x000000ef,0x00000103, + 0x0004003d,0x00000006,0x00000105,0x00000104,0x00050081,0x00000006,0x00000106,0x00000102, + 0x00000105,0x00050041,0x00000007,0x00000107,0x000000ff,0x00000100,0x0003003e,0x00000107, + 0x00000106,0x00050041,0x00000007,0x00000108,0x000000ef,0x000000e2,0x0004003d,0x00000006, + 0x00000109,0x00000108,0x00050041,0x00000007,0x0000010b,0x000000ef,0x0000010a,0x0004003d, + 0x00000006,0x0000010c,0x0000010b,0x00050081,0x00000006,0x0000010d,0x00000109,0x0000010c, + 0x00050041,0x00000007,0x0000010e,0x000000ff,0x000000e2,0x0003003e,0x0000010e,0x0000010d, + 0x00050041,0x00000007,0x0000010f,0x000000ff,0x00000100,0x0004003d,0x00000006,0x00000110, + 0x0000010f,0x00050041,0x00000007,0x00000111,0x000000ff,0x000000e2,0x0004003d,0x00000006, + 0x00000112,0x00000111,0x00050081,0x00000006,0x00000113,0x00000110,0x00000112,0x000200fe, + 0x00000113,0x00010038, +}; +inline constexpr uint32_t k_global_attend[] = { + 0x07230203,0x00010600,0x0008000b,0x00000323,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x00000027,0x00020011,0x0000003d,0x00020011, + 0x00001074,0x00020011,0x00001075,0x00020011,0x00001160,0x00020011,0x000014e1,0x00020011, + 0x00001786,0x0005000a,0x5f565053,0x5f545845,0x616f6c66,0x00003874,0x0008000a,0x5f565053, + 0x5f52484b,0x706f6f63,0x74617265,0x5f657669,0x7274616d,0x00007869,0x0006000b,0x00000001, + 0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000003,0x000e000f, + 0x00000005,0x00000004,0x6e69616d,0x00000000,0x0000015f,0x000001e8,0x000001ed,0x000001f6, + 0x00000210,0x00000286,0x0000029b,0x000002de,0x00000311,0x00060010,0x00000004,0x00000011, + 0x00000020,0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc,0x00060004,0x455f4c47, + 0x665f5458,0x74616f6c,0x6d34655f,0x00000033,0x00080004,0x455f4c47,0x735f5458,0x65646168, + 0x36315f72,0x5f746962,0x726f7473,0x00656761,0x00080004,0x455f4c47,0x735f5458,0x65646168, + 0x62385f72,0x735f7469,0x61726f74,0x00006567,0x000b0004,0x455f4c47,0x735f5458,0x65646168, + 0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004, + 0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365, + 0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572, + 0x00657669,0x00080004,0x4b5f4c47,0x635f5248,0x65706f6f,0x69746172,0x6d5f6576,0x69727461, + 0x00000078,0x00090004,0x4b5f4c47,0x6d5f5248,0x726f6d65,0x63735f79,0x5f65706f,0x616d6573, + 0x6369746e,0x00000073,0x00090004,0x4b5f4c47,0x735f5248,0x65646168,0x75735f72,0x6f726762, + 0x625f7075,0x63697361,0x00000000,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005, + 0x0000000a,0x6e756f72,0x36314664,0x3b316628,0x00000000,0x00040005,0x00000009,0x756c6176, + 0x00000065,0x00060005,0x00000011,0x42363166,0x28737469,0x31363166,0x0000003b,0x00040005, + 0x00000010,0x756c6176,0x00000065,0x00060005,0x00000016,0x46363166,0x426d6f72,0x28737469, + 0x003b3175,0x00040005,0x00000015,0x73746962,0x00000000,0x00060005,0x0000001b,0x66696873, + 0x656e5274,0x3b317528,0x003b3175,0x00040005,0x00000019,0x756c6176,0x00000065,0x00040005, + 0x0000001a,0x66696873,0x00000074,0x00080005,0x0000001f,0x336d3465,0x65646f43,0x6d6f7246, + 0x42363146,0x28737469,0x003b3175,0x00050005,0x0000001e,0x666c6168,0x73746942,0x00000000, + 0x00070005,0x00000023,0x336d3465,0x65646f43,0x6d6f7246,0x28323346,0x003b3166,0x00040005, + 0x00000022,0x756c6176,0x00000065,0x00070005,0x00000027,0x45746976,0x65577078,0x74686769, + 0x36316628,0x00003b31,0x00040005,0x00000026,0x726f6373,0x00000065,0x00090005,0x0000002e, + 0x74666f73,0x5078616d,0x28726961,0x753b3175,0x31753b31,0x3b31753b,0x00000000,0x00030005, + 0x0000002a,0x00776f72,0x00040005,0x0000002b,0x65736162,0x00000000,0x00040005,0x0000002c, + 0x72696170,0x00000000,0x00040005,0x0000002d,0x69726170,0x00007974,0x00070005,0x00000033, + 0x74666f73,0x3678616d,0x31752834,0x3b31753b,0x00000000,0x00030005,0x00000031,0x00776f72, + 0x00040005,0x00000032,0x65736162,0x00000000,0x00040005,0x00000035,0x73746962,0x00000000, + 0x00040005,0x00000038,0x6e676973,0x00000000,0x00050005,0x0000003c,0x6e67616d,0x64757469, + 0x00000065,0x00040005,0x00000056,0x6c616373,0x00006465,0x00030005,0x00000067,0x0062736c, + 0x00040005,0x0000006d,0x6e756f72,0x00646564,0x00050005,0x00000088,0x746f7571,0x746e6569, + 0x00000000,0x00060005,0x0000008c,0x616d6572,0x65646e69,0x73614d72,0x0000006b,0x00050005, + 0x00000090,0x616d6572,0x65646e69,0x00000072,0x00040005,0x00000094,0x666c6168,0x00796177, + 0x00040005,0x000000af,0x614e7369,0x0000006e,0x00050005,0x000000cb,0x6167656e,0x65766974, + 0x00000000,0x00050005,0x000000d1,0x6f707865,0x746e656e,0x00000000,0x00050005,0x000000d7, + 0x746e616d,0x61737369,0x00000000,0x00040005,0x000000de,0x65646f63,0x00000000,0x00050005, + 0x000000e5,0x6e676973,0x63696669,0x00646e61,0x00040005,0x000000f1,0x66696873,0x00000074, + 0x00040005,0x000000fd,0x61726170,0x0000006d,0x00040005,0x000000ff,0x61726170,0x0000006d, + 0x00050005,0x00000104,0x78453465,0x656e6f70,0x0000746e,0x00050005,0x00000107,0x614d3465, + 0x7369746e,0x00006173,0x00040005,0x00000109,0x61726170,0x0000006d,0x00040005,0x0000010b, + 0x61726170,0x0000006d,0x00040005,0x00000130,0x61726170,0x0000006d,0x00040005,0x00000132, + 0x61726170,0x0000006d,0x00040005,0x00000136,0x69666661,0x0000656e,0x00040005,0x0000013f, + 0x73746962,0x00000000,0x00040005,0x00000140,0x61726170,0x0000006d,0x00060005,0x00000143, + 0x6f707865,0x746e656e,0x426c6169,0x00737469,0x00040005,0x0000014a,0x61726170,0x0000006d, + 0x00030005,0x0000014f,0x0079656b,0x00060005,0x00000151,0x44444150,0x545f4445,0x4e454b4f, + 0x00000053,0x00030005,0x0000015b,0x00000061,0x00040005,0x0000015f,0x726f6373,0x00007365, + 0x00030005,0x00000169,0x00000062,0x00030005,0x00000174,0x00000063,0x00030005,0x00000180, + 0x00000064,0x00030005,0x0000018c,0x00006261,0x00030005,0x00000190,0x00636261,0x00030005, + 0x00000199,0x00003065,0x00040005,0x0000019a,0x61726170,0x0000006d,0x00040005,0x0000019c, + 0x61726170,0x0000006d,0x00040005,0x0000019e,0x61726170,0x0000006d,0x00040005,0x0000019f, + 0x61726170,0x0000006d,0x00040005,0x000001a1,0x61726170,0x0000006d,0x00040005,0x000001a3, + 0x61726170,0x0000006d,0x00040005,0x000001a5,0x61726170,0x0000006d,0x00040005,0x000001a6, + 0x61726170,0x0000006d,0x00030005,0x000001a9,0x00003165,0x00040005,0x000001ab,0x61726170, + 0x0000006d,0x00040005,0x000001ad,0x61726170,0x0000006d,0x00040005,0x000001af,0x61726170, + 0x0000006d,0x00040005,0x000001b0,0x61726170,0x0000006d,0x00040005,0x000001b3,0x6e657665, + 0x00000000,0x00040005,0x000001b5,0x61726170,0x0000006d,0x00040005,0x000001b7,0x61726170, + 0x0000006d,0x00040005,0x000001b9,0x61726170,0x0000006d,0x00040005,0x000001ba,0x61726170, + 0x0000006d,0x00030005,0x000001bd,0x0000306f,0x00040005,0x000001be,0x61726170,0x0000006d, + 0x00040005,0x000001c0,0x61726170,0x0000006d,0x00040005,0x000001c2,0x61726170,0x0000006d, + 0x00040005,0x000001c3,0x61726170,0x0000006d,0x00040005,0x000001c5,0x61726170,0x0000006d, + 0x00040005,0x000001c7,0x61726170,0x0000006d,0x00040005,0x000001c9,0x61726170,0x0000006d, + 0x00040005,0x000001ca,0x61726170,0x0000006d,0x00030005,0x000001cd,0x0000316f,0x00040005, + 0x000001cf,0x61726170,0x0000006d,0x00040005,0x000001d1,0x61726170,0x0000006d,0x00040005, + 0x000001d3,0x61726170,0x0000006d,0x00040005,0x000001d4,0x61726170,0x0000006d,0x00030005, + 0x000001d7,0x0064646f,0x00040005,0x000001d9,0x61726170,0x0000006d,0x00040005,0x000001db, + 0x61726170,0x0000006d,0x00040005,0x000001dd,0x61726170,0x0000006d,0x00040005,0x000001de, + 0x61726170,0x0000006d,0x00040005,0x000001e6,0x656e616c,0x00000000,0x00080005,0x000001e8, + 0x535f6c67,0x72676275,0x4970756f,0x636f766e,0x6f697461,0x0044496e,0x00040005,0x000001ea, + 0x64616568,0x00000000,0x00060005,0x000001ed,0x575f6c67,0x476b726f,0x70756f72,0x00004449, + 0x00040005,0x000001f0,0x6c695471,0x00000065,0x00040005,0x000001f3,0x69727473,0x00336564, + 0x00040005,0x000001f4,0x68737550,0x00000000,0x00050006,0x000001f4,0x00000000,0x656b6f74, + 0x0000736e,0x00050006,0x000001f4,0x00000001,0x64616568,0x00000073,0x00060006,0x000001f4, + 0x00000002,0x6e616863,0x736c656e,0x00000000,0x00030005,0x000001f6,0x00006370,0x00050005, + 0x000001fd,0x64616568,0x65736142,0x00000000,0x00040005,0x00000201,0x73614271,0x00000065, + 0x00030005,0x0000020b,0x0000716d,0x00050005,0x0000020e,0x6d726f4e,0x7a696c61,0x00006465, + 0x00040006,0x0000020e,0x00000000,0x00766b71,0x00030005,0x00000210,0x00000000,0x00040005, + 0x00000217,0x6c69546b,0x00000065,0x00030005,0x00000222,0x00006b6d,0x00030005,0x00000237, + 0x0000636d,0x00030005,0x00000247,0x00000069,0x00040005,0x00000253,0x61726170,0x0000006d, + 0x00040005,0x0000025e,0x61746f74,0x0000006c,0x00040005,0x0000025f,0x65736162,0x00000000, + 0x00040005,0x00000268,0x61726170,0x0000006d,0x00040005,0x0000026a,0x61726170,0x0000006d, + 0x00040005,0x00000271,0x64646170,0x00676e69,0x00050005,0x00000279,0x72726f63,0x69746365, + 0x00006e6f,0x00040005,0x0000027a,0x61726170,0x0000006d,0x00050005,0x00000286,0x69636572, + 0x636f7270,0x00736c61,0x00030005,0x0000028e,0x00000069,0x00040005,0x0000029b,0x67696577, + 0x00737468,0x00040005,0x0000029e,0x61726170,0x0000006d,0x00040005,0x000002a2,0x61726170, + 0x0000006d,0x00040005,0x000002a9,0x6c695463,0x00000065,0x00030005,0x000002b1,0x0000636d, + 0x00030005,0x000002b2,0x0000626b,0x00030005,0x000002ba,0x0000706d,0x00030005,0x000002be, + 0x0000766d,0x00040005,0x000002de,0x7074756f,0x00737475,0x00030005,0x000002e6,0x00000069, + 0x00030005,0x000002ef,0x00776f72,0x00050005,0x000002f3,0x706d6f63,0x6e656e6f,0x00000074, + 0x00040005,0x000002f6,0x656b6f74,0x0000006e,0x00040005,0x00000302,0x756c6176,0x00000065, + 0x00040005,0x0000030c,0x61726170,0x0000006d,0x00050005,0x0000030f,0x65747441,0x6465646e, + 0x00000000,0x00060006,0x0000030f,0x00000000,0x65747461,0x6465646e,0x00000000,0x00030005, + 0x00000311,0x00000000,0x00040005,0x0000031b,0x61726170,0x0000006d,0x00040047,0x00000151, + 0x00000001,0x00000000,0x00030047,0x00000168,0x0000002a,0x00030047,0x00000173,0x0000002a, + 0x00030047,0x0000017f,0x0000002a,0x00030047,0x0000018b,0x0000002a,0x00030047,0x0000018f, + 0x0000002a,0x00030047,0x00000193,0x0000002a,0x00030047,0x000001a8,0x0000002a,0x00030047, + 0x000001b2,0x0000002a,0x00030047,0x000001bc,0x0000002a,0x00030047,0x000001cc,0x0000002a, + 0x00030047,0x000001d6,0x0000002a,0x00030047,0x000001e0,0x0000002a,0x00030047,0x000001e8, + 0x00000000,0x00040047,0x000001e8,0x0000000b,0x00000029,0x00030047,0x000001e9,0x00000000, + 0x00040047,0x000001ed,0x0000000b,0x0000001a,0x00030047,0x000001f4,0x00000002,0x00050048, + 0x000001f4,0x00000000,0x00000023,0x00000000,0x00050048,0x000001f4,0x00000001,0x00000023, + 0x00000004,0x00050048,0x000001f4,0x00000002,0x00000023,0x00000008,0x00040047,0x0000020d, + 0x00000006,0x00000001,0x00030047,0x0000020e,0x00000002,0x00040048,0x0000020e,0x00000000, + 0x00000018,0x00050048,0x0000020e,0x00000000,0x00000023,0x00000000,0x00030047,0x00000210, + 0x00000018,0x00040047,0x00000210,0x00000021,0x00000000,0x00040047,0x00000210,0x00000022, + 0x00000000,0x00030047,0x0000026d,0x0000002a,0x00030047,0x00000270,0x0000002a,0x00030047, + 0x00000274,0x0000002a,0x00030047,0x0000027f,0x0000002a,0x00030047,0x00000283,0x0000002a, + 0x00030047,0x0000028b,0x0000002a,0x00030047,0x0000030b,0x0000002a,0x00040047,0x0000030e, + 0x00000006,0x00000001,0x00030047,0x0000030f,0x00000002,0x00040048,0x0000030f,0x00000000, + 0x00000019,0x00050048,0x0000030f,0x00000000,0x00000023,0x00000000,0x00030047,0x00000311, + 0x00000019,0x00040047,0x00000311,0x00000021,0x00000005,0x00040047,0x00000311,0x00000022, + 0x00000000,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006, + 0x00000020,0x00040020,0x00000007,0x00000007,0x00000006,0x00040021,0x00000008,0x00000006, + 0x00000007,0x00030016,0x0000000c,0x00000010,0x00040020,0x0000000d,0x00000007,0x0000000c, + 0x00040015,0x0000000e,0x00000020,0x00000000,0x00040021,0x0000000f,0x0000000e,0x0000000d, + 0x00040020,0x00000013,0x00000007,0x0000000e,0x00040021,0x00000014,0x0000000c,0x00000013, + 0x00050021,0x00000018,0x0000000e,0x00000013,0x00000013,0x00040021,0x0000001d,0x0000000e, + 0x00000013,0x00040021,0x00000021,0x0000000e,0x00000007,0x00040021,0x00000025,0x0000000c, + 0x0000000d,0x00070021,0x00000029,0x0000000c,0x00000013,0x00000013,0x00000013,0x00000013, + 0x00050021,0x00000030,0x0000000c,0x00000013,0x00000013,0x0004002b,0x0000000e,0x0000003a, + 0x80000000,0x0004002b,0x0000000e,0x0000003e,0x7fffffff,0x0004002b,0x0000000e,0x00000041, + 0x7f800000,0x00020014,0x00000042,0x0004002b,0x0000000e,0x00000049,0x477ff000,0x0004002b, + 0x0000000e,0x00000052,0x38800000,0x0004002b,0x00000006,0x00000059,0x4b800000,0x0004002b, + 0x00000006,0x00000060,0x33800000,0x0004002b,0x0000000e,0x00000069,0x0000000d,0x0004002b, + 0x0000000e,0x0000006b,0x00000001,0x0004002b,0x0000000e,0x0000006f,0x00000fff,0x0004002b, + 0x0000000e,0x00000073,0xffffe000,0x00040015,0x0000007c,0x00000010,0x00000000,0x0004002b, + 0x0000000e,0x00000082,0x0000ffff,0x0004002b,0x0000000e,0x000000a6,0x00000000,0x00040020, + 0x000000ae,0x00000007,0x00000042,0x0004002b,0x0000000e,0x000000b1,0x00007c00,0x0004002b, + 0x0000000e,0x000000b7,0x000003ff,0x0004002b,0x0000000e,0x000000c0,0x00007fff,0x0004002b, + 0x0000000e,0x000000c6,0x00000008,0x0004002b,0x0000000e,0x000000c8,0x00000080,0x0004002b, + 0x0000000e,0x000000cd,0x00008000,0x0004002b,0x0000000e,0x000000d3,0x0000000a,0x0004002b, + 0x0000000e,0x000000d5,0x0000001f,0x0004002b,0x0000000e,0x000000df,0x0000007e,0x0004002b, + 0x0000000e,0x000000ed,0x00000400,0x0004002b,0x0000000e,0x000000f7,0x0000000f,0x0004002b, + 0x0000000e,0x000000f9,0x00000010,0x0004002b,0x0000000e,0x00000108,0x00000007,0x0004002b, + 0x0000000e,0x0000011b,0x00000006,0x0004002b,0x0000000e,0x00000124,0x00000003,0x0004002b, + 0x0000000c,0x00000138,0x00002dbb,0x0004002b,0x0000000c,0x00000139,0x00003ed6,0x0004002b, + 0x0000000c,0x0000013c,0x00003dc2,0x0004002b,0x0000000c,0x0000013d,0x00003fe9,0x0004002b, + 0x0000000e,0x00000145,0x00000004,0x0004002b,0x0000000e,0x00000147,0x00004000,0x00040032, + 0x0000000e,0x00000151,0x000000c0,0x0004002b,0x0000000e,0x00000156,0x00000002,0x00060034, + 0x0000000e,0x0000015c,0x00000084,0x000000f9,0x00000151,0x0004001c,0x0000015d,0x0000000c, + 0x0000015c,0x00040020,0x0000015e,0x00000004,0x0000015d,0x0004003b,0x0000015e,0x0000015f, + 0x00000004,0x00040020,0x00000161,0x00000004,0x0000000c,0x0004002b,0x0000000e,0x0000016f, + 0x00000018,0x0004002b,0x0000000e,0x00000176,0x00000020,0x0004002b,0x0000000e,0x0000017b, + 0x00000028,0x0004002b,0x0000000e,0x00000182,0x00000030,0x0004002b,0x0000000e,0x00000187, + 0x00000038,0x00040020,0x000001e7,0x00000001,0x0000000e,0x0004003b,0x000001e7,0x000001e8, + 0x00000001,0x00040017,0x000001eb,0x0000000e,0x00000003,0x00040020,0x000001ec,0x00000001, + 0x000001eb,0x0004003b,0x000001ec,0x000001ed,0x00000001,0x0005001e,0x000001f4,0x0000000e, + 0x0000000e,0x0000000e,0x00040020,0x000001f5,0x00000009,0x000001f4,0x0004003b,0x000001f5, + 0x000001f6,0x00000009,0x00040015,0x000001f7,0x00000020,0x00000001,0x0004002b,0x000001f7, + 0x000001f8,0x00000002,0x00040020,0x000001f9,0x00000009,0x0000000e,0x0004002b,0x0000000e, + 0x000001ff,0x00000060,0x00040016,0x00000208,0x00000008,0x00001076,0x00071168,0x00000209, + 0x00000208,0x00000124,0x000000f9,0x00000176,0x000000a6,0x00040020,0x0000020a,0x00000007, + 0x00000209,0x00040015,0x0000020c,0x00000008,0x00000000,0x0003001d,0x0000020d,0x0000020c, + 0x0003001e,0x0000020e,0x0000020d,0x00040020,0x0000020f,0x0000000c,0x0000020e,0x0004003b, + 0x0000020f,0x00000210,0x0000000c,0x0004002b,0x000001f7,0x00000211,0x00000000,0x00040020, + 0x00000213,0x0000000c,0x0000020c,0x00060034,0x0000000e,0x0000021e,0x00000086,0x00000151, + 0x000000f9,0x00071168,0x00000220,0x00000208,0x00000124,0x00000176,0x000000f9,0x0000006b, + 0x00040020,0x00000221,0x00000007,0x00000220,0x0004002b,0x000001f7,0x00000233,0x00000001, + 0x00071168,0x00000235,0x0000000c,0x00000124,0x000000f9,0x000000f9,0x00000156,0x00040020, + 0x00000236,0x00000007,0x00000235,0x0004002b,0x0000000c,0x00000238,0x00000000,0x0004002c, + 0x00000235,0x00000239,0x00000238,0x0004002b,0x0000000e,0x00000246,0x00000108,0x00060034, + 0x0000000e,0x0000024f,0x00000084,0x000000f9,0x00000151,0x0004002b,0x0000000e,0x0000026e, + 0x00000040,0x0004001c,0x00000284,0x0000000c,0x000000f9,0x00040020,0x00000285,0x00000004, + 0x00000284,0x0004003b,0x00000285,0x00000286,0x00000004,0x0004002b,0x00000006,0x00000288, + 0x3f800000,0x00060034,0x0000000e,0x00000296,0x00000084,0x000000f9,0x00000151,0x00060034, + 0x0000000e,0x00000298,0x00000084,0x000000f9,0x00000151,0x0004001c,0x00000299,0x0000020c, + 0x00000298,0x00040020,0x0000029a,0x00000004,0x00000299,0x0004003b,0x0000029a,0x0000029b, + 0x00000004,0x00040020,0x000002a5,0x00000004,0x0000020c,0x0004002b,0x0000000e,0x000002db, + 0x00000200,0x0004001c,0x000002dc,0x0000000c,0x000002db,0x00040020,0x000002dd,0x00000004, + 0x000002dc,0x0004003b,0x000002dd,0x000002de,0x00000004,0x0004002b,0x0000000e,0x000002f1, + 0x00000005,0x0003001d,0x0000030e,0x0000020c,0x0003001e,0x0000030f,0x0000030e,0x00040020, + 0x00000310,0x0000000c,0x0000030f,0x0004003b,0x00000310,0x00000311,0x0000000c,0x0006002c, + 0x000001eb,0x00000322,0x00000176,0x0000006b,0x0000006b,0x00050036,0x00000002,0x00000004, + 0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000013,0x000001e6,0x00000007, + 0x0004003b,0x00000013,0x000001ea,0x00000007,0x0004003b,0x00000013,0x000001f0,0x00000007, + 0x0004003b,0x00000013,0x000001f3,0x00000007,0x0004003b,0x00000013,0x000001fd,0x00000007, + 0x0004003b,0x00000013,0x00000201,0x00000007,0x0004003b,0x0000020a,0x0000020b,0x00000007, + 0x0004003b,0x00000013,0x00000217,0x00000007,0x0004003b,0x00000221,0x00000222,0x00000007, + 0x0004003b,0x00000236,0x00000237,0x00000007,0x0004003b,0x00000013,0x00000247,0x00000007, + 0x0004003b,0x0000000d,0x00000253,0x00000007,0x0004003b,0x0000000d,0x0000025e,0x00000007, + 0x0004003b,0x00000013,0x0000025f,0x00000007,0x0004003b,0x00000013,0x00000268,0x00000007, + 0x0004003b,0x00000013,0x0000026a,0x00000007,0x0004003b,0x00000013,0x00000271,0x00000007, + 0x0004003b,0x0000000d,0x00000279,0x00000007,0x0004003b,0x0000000d,0x0000027a,0x00000007, + 0x0004003b,0x00000013,0x0000028e,0x00000007,0x0004003b,0x0000000d,0x0000029e,0x00000007, + 0x0004003b,0x00000013,0x000002a2,0x00000007,0x0004003b,0x00000013,0x000002a9,0x00000007, + 0x0004003b,0x00000236,0x000002b1,0x00000007,0x0004003b,0x00000013,0x000002b2,0x00000007, + 0x0004003b,0x0000020a,0x000002ba,0x00000007,0x0004003b,0x00000221,0x000002be,0x00000007, + 0x0004003b,0x00000013,0x000002e6,0x00000007,0x0004003b,0x00000013,0x000002ef,0x00000007, + 0x0004003b,0x00000013,0x000002f3,0x00000007,0x0004003b,0x00000013,0x000002f6,0x00000007, + 0x0004003b,0x00000007,0x00000302,0x00000007,0x0004003b,0x00000007,0x0000030c,0x00000007, + 0x0004003b,0x00000007,0x0000031b,0x00000007,0x0004003d,0x0000000e,0x000001e9,0x000001e8, + 0x0003003e,0x000001e6,0x000001e9,0x00050041,0x000001e7,0x000001ee,0x000001ed,0x000000a6, + 0x0004003d,0x0000000e,0x000001ef,0x000001ee,0x0003003e,0x000001ea,0x000001ef,0x00050041, + 0x000001e7,0x000001f1,0x000001ed,0x0000006b,0x0004003d,0x0000000e,0x000001f2,0x000001f1, + 0x0003003e,0x000001f0,0x000001f2,0x00050041,0x000001f9,0x000001fa,0x000001f6,0x000001f8, + 0x0004003d,0x0000000e,0x000001fb,0x000001fa,0x00050084,0x0000000e,0x000001fc,0x000001fb, + 0x00000124,0x0003003e,0x000001f3,0x000001fc,0x0004003d,0x0000000e,0x000001fe,0x000001ea, + 0x00050084,0x0000000e,0x00000200,0x000001fe,0x000001ff,0x0003003e,0x000001fd,0x00000200, + 0x0004003d,0x0000000e,0x00000202,0x000001f0,0x00050084,0x0000000e,0x00000203,0x00000202, + 0x000000f9,0x0004003d,0x0000000e,0x00000204,0x000001f3,0x00050084,0x0000000e,0x00000205, + 0x00000203,0x00000204,0x0004003d,0x0000000e,0x00000206,0x000001fd,0x00050080,0x0000000e, + 0x00000207,0x00000205,0x00000206,0x0003003e,0x00000201,0x00000207,0x0004003d,0x0000000e, + 0x00000212,0x00000201,0x00060041,0x00000213,0x00000214,0x00000210,0x00000211,0x00000212, + 0x0004003d,0x0000000e,0x00000215,0x000001f3,0x00071169,0x00000209,0x00000216,0x00000214, + 0x00000211,0x00000215,0x00000000,0x0003003e,0x0000020b,0x00000216,0x0003003e,0x00000217, + 0x000000a6,0x000200f9,0x00000218,0x000200f8,0x00000218,0x000400f6,0x0000021a,0x0000021b, + 0x00000000,0x000200f9,0x0000021c,0x000200f8,0x0000021c,0x0004003d,0x0000000e,0x0000021d, + 0x00000217,0x000500b0,0x00000042,0x0000021f,0x0000021d,0x0000021e,0x000400fa,0x0000021f, + 0x00000219,0x0000021a,0x000200f8,0x00000219,0x0004003d,0x0000000e,0x00000223,0x00000217, + 0x00050084,0x0000000e,0x00000224,0x00000223,0x000000f9,0x0004003d,0x0000000e,0x00000225, + 0x000001f3,0x00050084,0x0000000e,0x00000226,0x00000224,0x00000225,0x0004003d,0x0000000e, + 0x00000227,0x000001fd,0x00050080,0x0000000e,0x00000228,0x00000226,0x00000227,0x00050080, + 0x0000000e,0x00000229,0x00000228,0x00000176,0x00060041,0x00000213,0x0000022a,0x00000210, + 0x00000211,0x00000229,0x0004003d,0x0000000e,0x0000022b,0x00000217,0x00050084,0x0000000e, + 0x0000022c,0x0000022b,0x000000f9,0x0004003d,0x0000000e,0x0000022d,0x000001f3,0x00050084, + 0x0000000e,0x0000022e,0x0000022c,0x0000022d,0x0004003d,0x0000000e,0x0000022f,0x000001fd, + 0x00050080,0x0000000e,0x00000230,0x0000022e,0x0000022f,0x00050080,0x0000000e,0x00000231, + 0x00000230,0x00000176,0x0004003d,0x0000000e,0x00000232,0x000001f3,0x00071169,0x00000220, + 0x00000234,0x0000022a,0x00000233,0x00000232,0x00000000,0x0003003e,0x00000222,0x00000234, + 0x0003003e,0x00000237,0x00000239,0x0004003d,0x00000209,0x0000023a,0x0000020b,0x0004003d, + 0x00000220,0x0000023b,0x00000222,0x0004003d,0x00000235,0x0000023c,0x00000237,0x0006116b, + 0x00000235,0x0000023d,0x0000023a,0x0000023b,0x0000023c,0x0003003e,0x00000237,0x0000023d, + 0x0004003d,0x00000235,0x0000023e,0x00000237,0x0004003d,0x0000000e,0x0000023f,0x00000217, + 0x00050084,0x0000000e,0x00000240,0x0000023f,0x000000f9,0x00050041,0x00000161,0x00000241, + 0x0000015f,0x00000240,0x0004003d,0x0000000e,0x00000242,0x00000217,0x00050084,0x0000000e, + 0x00000243,0x00000242,0x000000f9,0x0007116a,0x00000241,0x0000023e,0x00000211,0x00000151, + 0x00000028,0x00000156,0x000200f9,0x0000021b,0x000200f8,0x0000021b,0x0004003d,0x0000000e, + 0x00000244,0x00000217,0x00050080,0x0000000e,0x00000245,0x00000244,0x00000233,0x0003003e, + 0x00000217,0x00000245,0x000200f9,0x00000218,0x000200f8,0x0000021a,0x000400e0,0x00000156, + 0x00000156,0x00000246,0x0004003d,0x0000000e,0x00000248,0x000001e6,0x0003003e,0x00000247, + 0x00000248,0x000200f9,0x00000249,0x000200f8,0x00000249,0x000400f6,0x0000024b,0x0000024c, + 0x00000000,0x000200f9,0x0000024d,0x000200f8,0x0000024d,0x0004003d,0x0000000e,0x0000024e, + 0x00000247,0x000500b0,0x00000042,0x00000250,0x0000024e,0x0000024f,0x000400fa,0x00000250, + 0x0000024a,0x0000024b,0x000200f8,0x0000024a,0x0004003d,0x0000000e,0x00000251,0x00000247, + 0x0004003d,0x0000000e,0x00000252,0x00000247,0x00050041,0x00000161,0x00000254,0x0000015f, + 0x00000252,0x0006003d,0x0000000c,0x00000255,0x00000254,0x00000030,0x00000156,0x0003003e, + 0x00000253,0x00000255,0x00050039,0x0000000c,0x00000256,0x00000027,0x00000253,0x00050041, + 0x00000161,0x00000257,0x0000015f,0x00000251,0x0005003e,0x00000257,0x00000256,0x00000028, + 0x00000156,0x000200f9,0x0000024c,0x000200f8,0x0000024c,0x0004003d,0x0000000e,0x00000258, + 0x00000247,0x00050080,0x0000000e,0x00000259,0x00000258,0x00000176,0x0003003e,0x00000247, + 0x00000259,0x000200f9,0x00000249,0x000200f8,0x0000024b,0x000400e0,0x00000156,0x00000156, + 0x00000246,0x0004003d,0x0000000e,0x0000025a,0x000001e6,0x000500b0,0x00000042,0x0000025b, + 0x0000025a,0x000000f9,0x000300f7,0x0000025d,0x00000000,0x000400fa,0x0000025b,0x0000025c, + 0x0000025d,0x000200f8,0x0000025c,0x0003003e,0x0000025e,0x00000238,0x0003003e,0x0000025f, + 0x000000a6,0x000200f9,0x00000260,0x000200f8,0x00000260,0x000400f6,0x00000262,0x00000263, + 0x00000000,0x000200f9,0x00000264,0x000200f8,0x00000264,0x0004003d,0x0000000e,0x00000265, + 0x0000025f,0x000500b0,0x00000042,0x00000266,0x00000265,0x00000151,0x000400fa,0x00000266, + 0x00000261,0x00000262,0x000200f8,0x00000261,0x0004003d,0x0000000c,0x00000267,0x0000025e, + 0x0004003d,0x0000000e,0x00000269,0x000001e6,0x0003003e,0x00000268,0x00000269,0x0004003d, + 0x0000000e,0x0000026b,0x0000025f,0x0003003e,0x0000026a,0x0000026b,0x00060039,0x0000000c, + 0x0000026c,0x00000033,0x00000268,0x0000026a,0x00050081,0x0000000c,0x0000026d,0x00000267, + 0x0000026c,0x0003003e,0x0000025e,0x0000026d,0x000200f9,0x00000263,0x000200f8,0x00000263, + 0x0004003d,0x0000000e,0x0000026f,0x0000025f,0x00050080,0x0000000e,0x00000270,0x0000026f, + 0x0000026e,0x0003003e,0x0000025f,0x00000270,0x000200f9,0x00000260,0x000200f8,0x00000262, + 0x00050041,0x000001f9,0x00000272,0x000001f6,0x00000211,0x0004003d,0x0000000e,0x00000273, + 0x00000272,0x00050082,0x0000000e,0x00000274,0x00000151,0x00000273,0x0003003e,0x00000271, + 0x00000274,0x0004003d,0x0000000e,0x00000275,0x00000271,0x000500ac,0x00000042,0x00000276, + 0x00000275,0x000000a6,0x000300f7,0x00000278,0x00000000,0x000400fa,0x00000276,0x00000277, + 0x00000278,0x000200f8,0x00000277,0x0003003e,0x0000027a,0x00000238,0x00050039,0x0000000c, + 0x0000027b,0x00000027,0x0000027a,0x00040073,0x00000006,0x0000027c,0x0000027b,0x0004003d, + 0x0000000e,0x0000027d,0x00000271,0x00040070,0x00000006,0x0000027e,0x0000027d,0x00050085, + 0x00000006,0x0000027f,0x0000027c,0x0000027e,0x00040073,0x0000000c,0x00000280,0x0000027f, + 0x0003003e,0x00000279,0x00000280,0x0004003d,0x0000000c,0x00000281,0x0000025e,0x0004003d, + 0x0000000c,0x00000282,0x00000279,0x00050083,0x0000000c,0x00000283,0x00000281,0x00000282, + 0x0003003e,0x0000025e,0x00000283,0x000200f9,0x00000278,0x000200f8,0x00000278,0x0004003d, + 0x0000000e,0x00000287,0x000001e6,0x0004003d,0x0000000c,0x00000289,0x0000025e,0x00040073, + 0x00000006,0x0000028a,0x00000289,0x00050088,0x00000006,0x0000028b,0x00000288,0x0000028a, + 0x00040073,0x0000000c,0x0000028c,0x0000028b,0x00050041,0x00000161,0x0000028d,0x00000286, + 0x00000287,0x0005003e,0x0000028d,0x0000028c,0x00000028,0x00000156,0x000200f9,0x0000025d, + 0x000200f8,0x0000025d,0x0004003d,0x0000000e,0x0000028f,0x000001e6,0x0003003e,0x0000028e, + 0x0000028f,0x000200f9,0x00000290,0x000200f8,0x00000290,0x000400f6,0x00000292,0x00000293, + 0x00000000,0x000200f9,0x00000294,0x000200f8,0x00000294,0x0004003d,0x0000000e,0x00000295, + 0x0000028e,0x000500b0,0x00000042,0x00000297,0x00000295,0x00000296,0x000400fa,0x00000297, + 0x00000291,0x00000292,0x000200f8,0x00000291,0x0004003d,0x0000000e,0x0000029c,0x0000028e, + 0x0004003d,0x0000000e,0x0000029d,0x0000028e,0x00050041,0x00000161,0x0000029f,0x0000015f, + 0x0000029d,0x0006003d,0x0000000c,0x000002a0,0x0000029f,0x00000030,0x00000156,0x0003003e, + 0x0000029e,0x000002a0,0x00050039,0x0000000e,0x000002a1,0x00000011,0x0000029e,0x0003003e, + 0x000002a2,0x000002a1,0x00050039,0x0000000e,0x000002a3,0x0000001f,0x000002a2,0x00040071, + 0x0000020c,0x000002a4,0x000002a3,0x00050041,0x000002a5,0x000002a6,0x0000029b,0x0000029c, + 0x0005003e,0x000002a6,0x000002a4,0x00000028,0x00000156,0x000200f9,0x00000293,0x000200f8, + 0x00000293,0x0004003d,0x0000000e,0x000002a7,0x0000028e,0x00050080,0x0000000e,0x000002a8, + 0x000002a7,0x00000176,0x0003003e,0x0000028e,0x000002a8,0x000200f9,0x00000290,0x000200f8, + 0x00000292,0x000400e0,0x00000156,0x00000156,0x00000246,0x0003003e,0x000002a9,0x000000a6, + 0x000200f9,0x000002aa,0x000200f8,0x000002aa,0x000400f6,0x000002ac,0x000002ad,0x00000000, + 0x000200f9,0x000002ae,0x000200f8,0x000002ae,0x0004003d,0x0000000e,0x000002af,0x000002a9, + 0x000500b0,0x00000042,0x000002b0,0x000002af,0x00000156,0x000400fa,0x000002b0,0x000002ab, + 0x000002ac,0x000200f8,0x000002ab,0x0003003e,0x000002b1,0x00000239,0x0003003e,0x000002b2, + 0x000000a6,0x000200f9,0x000002b3,0x000200f8,0x000002b3,0x000400f6,0x000002b5,0x000002b6, + 0x00000000,0x000200f9,0x000002b7,0x000200f8,0x000002b7,0x0004003d,0x0000000e,0x000002b8, + 0x000002b2,0x000500b0,0x00000042,0x000002b9,0x000002b8,0x00000151,0x000400fa,0x000002b9, + 0x000002b4,0x000002b5,0x000200f8,0x000002b4,0x0004003d,0x0000000e,0x000002bb,0x000002b2, + 0x00050041,0x000002a5,0x000002bc,0x0000029b,0x000002bb,0x00081169,0x00000209,0x000002bd, + 0x000002bc,0x00000211,0x00000151,0x00000030,0x00000156,0x0003003e,0x000002ba,0x000002bd, + 0x0004003d,0x0000000e,0x000002bf,0x000002b2,0x0004003d,0x0000000e,0x000002c0,0x000001f3, + 0x00050084,0x0000000e,0x000002c1,0x000002bf,0x000002c0,0x0004003d,0x0000000e,0x000002c2, + 0x000001fd,0x00050080,0x0000000e,0x000002c3,0x000002c1,0x000002c2,0x00050080,0x0000000e, + 0x000002c4,0x000002c3,0x0000026e,0x0004003d,0x0000000e,0x000002c5,0x000002a9,0x00050084, + 0x0000000e,0x000002c6,0x000002c5,0x000000f9,0x00050080,0x0000000e,0x000002c7,0x000002c4, + 0x000002c6,0x00060041,0x00000213,0x000002c8,0x00000210,0x00000211,0x000002c7,0x0004003d, + 0x0000000e,0x000002c9,0x000002b2,0x0004003d,0x0000000e,0x000002ca,0x000001f3,0x00050084, + 0x0000000e,0x000002cb,0x000002c9,0x000002ca,0x0004003d,0x0000000e,0x000002cc,0x000001fd, + 0x00050080,0x0000000e,0x000002cd,0x000002cb,0x000002cc,0x00050080,0x0000000e,0x000002ce, + 0x000002cd,0x0000026e,0x0004003d,0x0000000e,0x000002cf,0x000002a9,0x00050084,0x0000000e, + 0x000002d0,0x000002cf,0x000000f9,0x00050080,0x0000000e,0x000002d1,0x000002ce,0x000002d0, + 0x0004003d,0x0000000e,0x000002d2,0x000001f3,0x00071169,0x00000220,0x000002d3,0x000002c8, + 0x00000211,0x000002d2,0x00000000,0x0003003e,0x000002be,0x000002d3,0x0004003d,0x00000209, + 0x000002d4,0x000002ba,0x0004003d,0x00000220,0x000002d5,0x000002be,0x0004003d,0x00000235, + 0x000002d6,0x000002b1,0x0006116b,0x00000235,0x000002d7,0x000002d4,0x000002d5,0x000002d6, + 0x0003003e,0x000002b1,0x000002d7,0x000200f9,0x000002b6,0x000200f8,0x000002b6,0x0004003d, + 0x0000000e,0x000002d8,0x000002b2,0x00050080,0x0000000e,0x000002d9,0x000002d8,0x00000176, + 0x0003003e,0x000002b2,0x000002d9,0x000200f9,0x000002b3,0x000200f8,0x000002b5,0x0004003d, + 0x00000235,0x000002da,0x000002b1,0x0004003d,0x0000000e,0x000002df,0x000002a9,0x00050084, + 0x0000000e,0x000002e0,0x000002df,0x000000f9,0x00050041,0x00000161,0x000002e1,0x000002de, + 0x000002e0,0x0004003d,0x0000000e,0x000002e2,0x000002a9,0x00050084,0x0000000e,0x000002e3, + 0x000002e2,0x000000f9,0x0007116a,0x000002e1,0x000002da,0x00000211,0x00000176,0x00000028, + 0x00000156,0x000200f9,0x000002ad,0x000200f8,0x000002ad,0x0004003d,0x0000000e,0x000002e4, + 0x000002a9,0x00050080,0x0000000e,0x000002e5,0x000002e4,0x00000233,0x0003003e,0x000002a9, + 0x000002e5,0x000200f9,0x000002aa,0x000200f8,0x000002ac,0x000400e0,0x00000156,0x00000156, + 0x00000246,0x0004003d,0x0000000e,0x000002e7,0x000001e6,0x0003003e,0x000002e6,0x000002e7, + 0x000200f9,0x000002e8,0x000200f8,0x000002e8,0x000400f6,0x000002ea,0x000002eb,0x00000000, + 0x000200f9,0x000002ec,0x000200f8,0x000002ec,0x0004003d,0x0000000e,0x000002ed,0x000002e6, + 0x000500b0,0x00000042,0x000002ee,0x000002ed,0x000002db,0x000400fa,0x000002ee,0x000002e9, + 0x000002ea,0x000200f8,0x000002e9,0x0004003d,0x0000000e,0x000002f0,0x000002e6,0x000500c2, + 0x0000000e,0x000002f2,0x000002f0,0x000002f1,0x0003003e,0x000002ef,0x000002f2,0x0004003d, + 0x0000000e,0x000002f4,0x000002e6,0x000500c7,0x0000000e,0x000002f5,0x000002f4,0x000000d5, + 0x0003003e,0x000002f3,0x000002f5,0x0004003d,0x0000000e,0x000002f7,0x000001f0,0x00050084, + 0x0000000e,0x000002f8,0x000002f7,0x000000f9,0x0004003d,0x0000000e,0x000002f9,0x000002ef, + 0x00050080,0x0000000e,0x000002fa,0x000002f8,0x000002f9,0x0003003e,0x000002f6,0x000002fa, + 0x0004003d,0x0000000e,0x000002fb,0x000002f6,0x00050041,0x000001f9,0x000002fc,0x000001f6, + 0x00000211,0x0004003d,0x0000000e,0x000002fd,0x000002fc,0x000500ae,0x00000042,0x000002fe, + 0x000002fb,0x000002fd,0x000300f7,0x00000300,0x00000000,0x000400fa,0x000002fe,0x000002ff, + 0x00000300,0x000200f8,0x000002ff,0x000200f9,0x000002eb,0x000200f8,0x00000300,0x0004003d, + 0x0000000e,0x00000303,0x000002e6,0x00050041,0x00000161,0x00000304,0x000002de,0x00000303, + 0x0006003d,0x0000000c,0x00000305,0x00000304,0x00000030,0x00000156,0x00040073,0x00000006, + 0x00000306,0x00000305,0x0004003d,0x0000000e,0x00000307,0x000002ef,0x00050041,0x00000161, + 0x00000308,0x00000286,0x00000307,0x0006003d,0x0000000c,0x00000309,0x00000308,0x00000030, + 0x00000156,0x00040073,0x00000006,0x0000030a,0x00000309,0x00050085,0x00000006,0x0000030b, + 0x00000306,0x0000030a,0x0003003e,0x0000030c,0x0000030b,0x00050039,0x00000006,0x0000030d, + 0x0000000a,0x0000030c,0x0003003e,0x00000302,0x0000030d,0x0004003d,0x0000000e,0x00000312, + 0x000002f6,0x00050041,0x000001f9,0x00000313,0x000001f6,0x000001f8,0x0004003d,0x0000000e, + 0x00000314,0x00000313,0x00050084,0x0000000e,0x00000315,0x00000312,0x00000314,0x0004003d, + 0x0000000e,0x00000316,0x000001ea,0x00050084,0x0000000e,0x00000317,0x00000316,0x00000176, + 0x00050080,0x0000000e,0x00000318,0x00000315,0x00000317,0x0004003d,0x0000000e,0x00000319, + 0x000002f3,0x00050080,0x0000000e,0x0000031a,0x00000318,0x00000319,0x0004003d,0x00000006, + 0x0000031c,0x00000302,0x0003003e,0x0000031b,0x0000031c,0x00050039,0x0000000e,0x0000031d, + 0x00000023,0x0000031b,0x00040071,0x0000020c,0x0000031e,0x0000031d,0x00060041,0x00000213, + 0x0000031f,0x00000311,0x00000211,0x0000031a,0x0003003e,0x0000031f,0x0000031e,0x000200f9, + 0x000002eb,0x000200f8,0x000002eb,0x0004003d,0x0000000e,0x00000320,0x000002e6,0x00050080, + 0x0000000e,0x00000321,0x00000320,0x00000176,0x0003003e,0x000002e6,0x00000321,0x000200f9, + 0x000002e8,0x000200f8,0x000002ea,0x000100fd,0x00010038,0x00050036,0x00000006,0x0000000a, + 0x00000000,0x00000008,0x00030037,0x00000007,0x00000009,0x000200f8,0x0000000b,0x0004003b, + 0x00000013,0x00000035,0x00000007,0x0004003b,0x00000013,0x00000038,0x00000007,0x0004003b, + 0x00000013,0x0000003c,0x00000007,0x0004003b,0x00000007,0x00000056,0x00000007,0x0004003b, + 0x00000013,0x00000067,0x00000007,0x0004003b,0x00000013,0x0000006d,0x00000007,0x0004003d, + 0x00000006,0x00000036,0x00000009,0x0004007c,0x0000000e,0x00000037,0x00000036,0x0003003e, + 0x00000035,0x00000037,0x0004003d,0x0000000e,0x00000039,0x00000035,0x000500c7,0x0000000e, + 0x0000003b,0x00000039,0x0000003a,0x0003003e,0x00000038,0x0000003b,0x0004003d,0x0000000e, + 0x0000003d,0x00000035,0x000500c7,0x0000000e,0x0000003f,0x0000003d,0x0000003e,0x0003003e, + 0x0000003c,0x0000003f,0x0004003d,0x0000000e,0x00000040,0x0000003c,0x000500ae,0x00000042, + 0x00000043,0x00000040,0x00000041,0x000300f7,0x00000045,0x00000000,0x000400fa,0x00000043, + 0x00000044,0x00000045,0x000200f8,0x00000044,0x0004003d,0x00000006,0x00000046,0x00000009, + 0x000200fe,0x00000046,0x000200f8,0x00000045,0x0004003d,0x0000000e,0x00000048,0x0000003c, + 0x000500ae,0x00000042,0x0000004a,0x00000048,0x00000049,0x000300f7,0x0000004c,0x00000000, + 0x000400fa,0x0000004a,0x0000004b,0x0000004c,0x000200f8,0x0000004b,0x0004003d,0x0000000e, + 0x0000004d,0x00000038,0x000500c5,0x0000000e,0x0000004e,0x0000004d,0x00000041,0x0004007c, + 0x00000006,0x0000004f,0x0000004e,0x000200fe,0x0000004f,0x000200f8,0x0000004c,0x0004003d, + 0x0000000e,0x00000051,0x0000003c,0x000500b0,0x00000042,0x00000053,0x00000051,0x00000052, + 0x000300f7,0x00000055,0x00000000,0x000400fa,0x00000053,0x00000054,0x00000055,0x000200f8, + 0x00000054,0x0004003d,0x0000000e,0x00000057,0x0000003c,0x0004007c,0x00000006,0x00000058, + 0x00000057,0x00050085,0x00000006,0x0000005a,0x00000058,0x00000059,0x0006000c,0x00000006, + 0x0000005b,0x00000001,0x00000002,0x0000005a,0x0003003e,0x00000056,0x0000005b,0x0004003d, + 0x0000000e,0x0000005c,0x00000038,0x0004007c,0x00000006,0x0000005d,0x0000005c,0x0004003d, + 0x0000000e,0x0000005e,0x00000038,0x0004003d,0x00000006,0x0000005f,0x00000056,0x00050085, + 0x00000006,0x00000061,0x0000005f,0x00000060,0x0004007c,0x0000000e,0x00000062,0x00000061, + 0x000500c5,0x0000000e,0x00000063,0x0000005e,0x00000062,0x0004007c,0x00000006,0x00000064, + 0x00000063,0x00050081,0x00000006,0x00000065,0x0000005d,0x00000064,0x000200fe,0x00000065, + 0x000200f8,0x00000055,0x0004003d,0x0000000e,0x00000068,0x0000003c,0x000500c2,0x0000000e, + 0x0000006a,0x00000068,0x00000069,0x000500c7,0x0000000e,0x0000006c,0x0000006a,0x0000006b, + 0x0003003e,0x00000067,0x0000006c,0x0004003d,0x0000000e,0x0000006e,0x0000003c,0x00050080, + 0x0000000e,0x00000070,0x0000006e,0x0000006f,0x0004003d,0x0000000e,0x00000071,0x00000067, + 0x00050080,0x0000000e,0x00000072,0x00000070,0x00000071,0x000500c7,0x0000000e,0x00000074, + 0x00000072,0x00000073,0x0003003e,0x0000006d,0x00000074,0x0004003d,0x0000000e,0x00000075, + 0x00000038,0x0004003d,0x0000000e,0x00000076,0x0000006d,0x000500c5,0x0000000e,0x00000077, + 0x00000075,0x00000076,0x0004007c,0x00000006,0x00000078,0x00000077,0x000200fe,0x00000078, + 0x00010038,0x00050036,0x0000000e,0x00000011,0x00000000,0x0000000f,0x00030037,0x0000000d, + 0x00000010,0x000200f8,0x00000012,0x0004003d,0x0000000c,0x0000007b,0x00000010,0x0004007c, + 0x0000007c,0x0000007d,0x0000007b,0x00040071,0x0000000e,0x0000007e,0x0000007d,0x000200fe, + 0x0000007e,0x00010038,0x00050036,0x0000000c,0x00000016,0x00000000,0x00000014,0x00030037, + 0x00000013,0x00000015,0x000200f8,0x00000017,0x0004003d,0x0000000e,0x00000081,0x00000015, + 0x000500c7,0x0000000e,0x00000083,0x00000081,0x00000082,0x00040071,0x0000007c,0x00000084, + 0x00000083,0x0004007c,0x0000000c,0x00000085,0x00000084,0x000200fe,0x00000085,0x00010038, + 0x00050036,0x0000000e,0x0000001b,0x00000000,0x00000018,0x00030037,0x00000013,0x00000019, + 0x00030037,0x00000013,0x0000001a,0x000200f8,0x0000001c,0x0004003b,0x00000013,0x00000088, + 0x00000007,0x0004003b,0x00000013,0x0000008c,0x00000007,0x0004003b,0x00000013,0x00000090, + 0x00000007,0x0004003b,0x00000013,0x00000094,0x00000007,0x0004003d,0x0000000e,0x00000089, + 0x00000019,0x0004003d,0x0000000e,0x0000008a,0x0000001a,0x000500c2,0x0000000e,0x0000008b, + 0x00000089,0x0000008a,0x0003003e,0x00000088,0x0000008b,0x0004003d,0x0000000e,0x0000008d, + 0x0000001a,0x000500c4,0x0000000e,0x0000008e,0x0000006b,0x0000008d,0x00050082,0x0000000e, + 0x0000008f,0x0000008e,0x0000006b,0x0003003e,0x0000008c,0x0000008f,0x0004003d,0x0000000e, + 0x00000091,0x00000019,0x0004003d,0x0000000e,0x00000092,0x0000008c,0x000500c7,0x0000000e, + 0x00000093,0x00000091,0x00000092,0x0003003e,0x00000090,0x00000093,0x0004003d,0x0000000e, + 0x00000095,0x0000001a,0x00050082,0x0000000e,0x00000096,0x00000095,0x0000006b,0x000500c4, + 0x0000000e,0x00000097,0x0000006b,0x00000096,0x0003003e,0x00000094,0x00000097,0x0004003d, + 0x0000000e,0x00000098,0x00000088,0x0004003d,0x0000000e,0x00000099,0x00000090,0x0004003d, + 0x0000000e,0x0000009a,0x00000094,0x000500ac,0x00000042,0x0000009b,0x00000099,0x0000009a, + 0x000400a8,0x00000042,0x0000009c,0x0000009b,0x000300f7,0x0000009e,0x00000000,0x000400fa, + 0x0000009c,0x0000009d,0x0000009e,0x000200f8,0x0000009d,0x0004003d,0x0000000e,0x0000009f, + 0x00000090,0x0004003d,0x0000000e,0x000000a0,0x00000094,0x000500aa,0x00000042,0x000000a1, + 0x0000009f,0x000000a0,0x000300f7,0x000000a3,0x00000000,0x000400fa,0x000000a1,0x000000a2, + 0x000000a3,0x000200f8,0x000000a2,0x0004003d,0x0000000e,0x000000a4,0x00000088,0x000500c7, + 0x0000000e,0x000000a5,0x000000a4,0x0000006b,0x000500ab,0x00000042,0x000000a7,0x000000a5, + 0x000000a6,0x000200f9,0x000000a3,0x000200f8,0x000000a3,0x000700f5,0x00000042,0x000000a8, + 0x000000a1,0x0000009d,0x000000a7,0x000000a2,0x000200f9,0x0000009e,0x000200f8,0x0000009e, + 0x000700f5,0x00000042,0x000000a9,0x0000009b,0x0000001c,0x000000a8,0x000000a3,0x000600a9, + 0x0000000e,0x000000aa,0x000000a9,0x0000006b,0x000000a6,0x00050080,0x0000000e,0x000000ab, + 0x00000098,0x000000aa,0x000200fe,0x000000ab,0x00010038,0x00050036,0x0000000e,0x0000001f, + 0x00000000,0x0000001d,0x00030037,0x00000013,0x0000001e,0x000200f8,0x00000020,0x0004003b, + 0x000000ae,0x000000af,0x00000007,0x0004003b,0x00000013,0x000000cb,0x00000007,0x0004003b, + 0x00000013,0x000000d1,0x00000007,0x0004003b,0x00000013,0x000000d7,0x00000007,0x0004003b, + 0x00000013,0x000000de,0x00000007,0x0004003b,0x00000013,0x000000e5,0x00000007,0x0004003b, + 0x00000013,0x000000e8,0x00000007,0x0004003b,0x00000013,0x000000f1,0x00000007,0x0004003b, + 0x00000013,0x000000f4,0x00000007,0x0004003b,0x00000013,0x000000fd,0x00000007,0x0004003b, + 0x00000013,0x000000ff,0x00000007,0x0004003b,0x00000013,0x00000104,0x00000007,0x0004003b, + 0x00000013,0x00000107,0x00000007,0x0004003b,0x00000013,0x00000109,0x00000007,0x0004003b, + 0x00000013,0x0000010b,0x00000007,0x0004003b,0x00000013,0x0000011f,0x00000007,0x0004003d, + 0x0000000e,0x000000b0,0x0000001e,0x000500c7,0x0000000e,0x000000b2,0x000000b0,0x000000b1, + 0x000500aa,0x00000042,0x000000b3,0x000000b2,0x000000b1,0x000300f7,0x000000b5,0x00000000, + 0x000400fa,0x000000b3,0x000000b4,0x000000b5,0x000200f8,0x000000b4,0x0004003d,0x0000000e, + 0x000000b6,0x0000001e,0x000500c7,0x0000000e,0x000000b8,0x000000b6,0x000000b7,0x000500ab, + 0x00000042,0x000000b9,0x000000b8,0x000000a6,0x000200f9,0x000000b5,0x000200f8,0x000000b5, + 0x000700f5,0x00000042,0x000000ba,0x000000b3,0x00000020,0x000000b9,0x000000b4,0x0003003e, + 0x000000af,0x000000ba,0x0004003d,0x00000042,0x000000bb,0x000000af,0x000300f7,0x000000bd, + 0x00000000,0x000400fa,0x000000bb,0x000000bc,0x000000bd,0x000200f8,0x000000bc,0x000200fe, + 0x000000a6,0x000200f8,0x000000bd,0x0004003d,0x0000000e,0x000000bf,0x0000001e,0x000500c7, + 0x0000000e,0x000000c1,0x000000bf,0x000000c0,0x000500aa,0x00000042,0x000000c2,0x000000c1, + 0x000000a6,0x000300f7,0x000000c4,0x00000000,0x000400fa,0x000000c2,0x000000c3,0x000000c4, + 0x000200f8,0x000000c3,0x0004003d,0x0000000e,0x000000c5,0x0000001e,0x000500c2,0x0000000e, + 0x000000c7,0x000000c5,0x000000c6,0x000500c7,0x0000000e,0x000000c9,0x000000c7,0x000000c8, + 0x000200fe,0x000000c9,0x000200f8,0x000000c4,0x0004003d,0x0000000e,0x000000cc,0x0000001e, + 0x000500c7,0x0000000e,0x000000ce,0x000000cc,0x000000cd,0x000500ab,0x00000042,0x000000cf, + 0x000000ce,0x000000a6,0x000600a9,0x0000000e,0x000000d0,0x000000cf,0x000000c8,0x000000a6, + 0x0003003e,0x000000cb,0x000000d0,0x0004003d,0x0000000e,0x000000d2,0x0000001e,0x000500c2, + 0x0000000e,0x000000d4,0x000000d2,0x000000d3,0x000500c7,0x0000000e,0x000000d6,0x000000d4, + 0x000000d5,0x0003003e,0x000000d1,0x000000d6,0x0004003d,0x0000000e,0x000000d8,0x0000001e, + 0x000500c7,0x0000000e,0x000000d9,0x000000d8,0x000000b7,0x0003003e,0x000000d7,0x000000d9, + 0x0004003d,0x0000000e,0x000000da,0x000000d1,0x000500aa,0x00000042,0x000000db,0x000000da, + 0x000000d5,0x000300f7,0x000000dd,0x00000000,0x000400fa,0x000000db,0x000000dc,0x000000e0, + 0x000200f8,0x000000dc,0x0003003e,0x000000de,0x000000df,0x000200f9,0x000000dd,0x000200f8, + 0x000000e0,0x0004003d,0x0000000e,0x000000e1,0x000000d1,0x000500b2,0x00000042,0x000000e2, + 0x000000e1,0x000000c6,0x000300f7,0x000000e4,0x00000000,0x000400fa,0x000000e2,0x000000e3, + 0x00000103,0x000200f8,0x000000e3,0x0004003d,0x0000000e,0x000000e6,0x000000d1,0x000500aa, + 0x00000042,0x000000e7,0x000000e6,0x000000a6,0x000300f7,0x000000ea,0x00000000,0x000400fa, + 0x000000e7,0x000000e9,0x000000ec,0x000200f8,0x000000e9,0x0004003d,0x0000000e,0x000000eb, + 0x000000d7,0x0003003e,0x000000e8,0x000000eb,0x000200f9,0x000000ea,0x000200f8,0x000000ec, + 0x0004003d,0x0000000e,0x000000ee,0x000000d7,0x00050080,0x0000000e,0x000000ef,0x000000ed, + 0x000000ee,0x0003003e,0x000000e8,0x000000ef,0x000200f9,0x000000ea,0x000200f8,0x000000ea, + 0x0004003d,0x0000000e,0x000000f0,0x000000e8,0x0003003e,0x000000e5,0x000000f0,0x0004003d, + 0x0000000e,0x000000f2,0x000000d1,0x000500aa,0x00000042,0x000000f3,0x000000f2,0x000000a6, + 0x000300f7,0x000000f6,0x00000000,0x000400fa,0x000000f3,0x000000f5,0x000000f8,0x000200f8, + 0x000000f5,0x0003003e,0x000000f4,0x000000f7,0x000200f9,0x000000f6,0x000200f8,0x000000f8, + 0x0004003d,0x0000000e,0x000000fa,0x000000d1,0x00050082,0x0000000e,0x000000fb,0x000000f9, + 0x000000fa,0x0003003e,0x000000f4,0x000000fb,0x000200f9,0x000000f6,0x000200f8,0x000000f6, + 0x0004003d,0x0000000e,0x000000fc,0x000000f4,0x0003003e,0x000000f1,0x000000fc,0x0004003d, + 0x0000000e,0x000000fe,0x000000e5,0x0003003e,0x000000fd,0x000000fe,0x0004003d,0x0000000e, + 0x00000100,0x000000f1,0x0003003e,0x000000ff,0x00000100,0x00060039,0x0000000e,0x00000101, + 0x0000001b,0x000000fd,0x000000ff,0x0007000c,0x0000000e,0x00000102,0x00000001,0x00000026, + 0x00000101,0x000000c6,0x0003003e,0x000000de,0x00000102,0x000200f9,0x000000e4,0x000200f8, + 0x00000103,0x0004003d,0x0000000e,0x00000105,0x000000d1,0x00050082,0x0000000e,0x00000106, + 0x00000105,0x000000c6,0x0003003e,0x00000104,0x00000106,0x0004003d,0x0000000e,0x0000010a, + 0x000000d7,0x0003003e,0x00000109,0x0000010a,0x0003003e,0x0000010b,0x00000108,0x00060039, + 0x0000000e,0x0000010c,0x0000001b,0x00000109,0x0000010b,0x0003003e,0x00000107,0x0000010c, + 0x0004003d,0x0000000e,0x0000010d,0x00000107,0x000500aa,0x00000042,0x0000010e,0x0000010d, + 0x000000c6,0x000300f7,0x00000110,0x00000000,0x000400fa,0x0000010e,0x0000010f,0x00000110, + 0x000200f8,0x0000010f,0x0003003e,0x00000107,0x000000a6,0x0004003d,0x0000000e,0x00000111, + 0x00000104,0x00050080,0x0000000e,0x00000112,0x00000111,0x0000006b,0x0003003e,0x00000104, + 0x00000112,0x000200f9,0x00000110,0x000200f8,0x00000110,0x0004003d,0x0000000e,0x00000113, + 0x00000104,0x000500ac,0x00000042,0x00000114,0x00000113,0x000000f7,0x000400a8,0x00000042, + 0x00000115,0x00000114,0x000300f7,0x00000117,0x00000000,0x000400fa,0x00000115,0x00000116, + 0x00000117,0x000200f8,0x00000116,0x0004003d,0x0000000e,0x00000118,0x00000104,0x000500aa, + 0x00000042,0x00000119,0x00000118,0x000000f7,0x0004003d,0x0000000e,0x0000011a,0x00000107, + 0x000500ac,0x00000042,0x0000011c,0x0000011a,0x0000011b,0x000500a7,0x00000042,0x0000011d, + 0x00000119,0x0000011c,0x000200f9,0x00000117,0x000200f8,0x00000117,0x000700f5,0x00000042, + 0x0000011e,0x00000114,0x00000110,0x0000011d,0x00000116,0x000300f7,0x00000121,0x00000000, + 0x000400fa,0x0000011e,0x00000120,0x00000122,0x000200f8,0x00000120,0x0003003e,0x0000011f, + 0x000000df,0x000200f9,0x00000121,0x000200f8,0x00000122,0x0004003d,0x0000000e,0x00000123, + 0x00000104,0x000500c4,0x0000000e,0x00000125,0x00000123,0x00000124,0x0004003d,0x0000000e, + 0x00000126,0x00000107,0x000500c5,0x0000000e,0x00000127,0x00000125,0x00000126,0x0003003e, + 0x0000011f,0x00000127,0x000200f9,0x00000121,0x000200f8,0x00000121,0x0004003d,0x0000000e, + 0x00000128,0x0000011f,0x0003003e,0x000000de,0x00000128,0x000200f9,0x000000e4,0x000200f8, + 0x000000e4,0x000200f9,0x000000dd,0x000200f8,0x000000dd,0x0004003d,0x0000000e,0x00000129, + 0x000000cb,0x0004003d,0x0000000e,0x0000012a,0x000000de,0x000500c5,0x0000000e,0x0000012b, + 0x00000129,0x0000012a,0x000200fe,0x0000012b,0x00010038,0x00050036,0x0000000e,0x00000023, + 0x00000000,0x00000021,0x00030037,0x00000007,0x00000022,0x000200f8,0x00000024,0x0004003b, + 0x0000000d,0x00000130,0x00000007,0x0004003b,0x00000013,0x00000132,0x00000007,0x0004003d, + 0x00000006,0x0000012e,0x00000022,0x00040073,0x0000000c,0x0000012f,0x0000012e,0x0003003e, + 0x00000130,0x0000012f,0x00050039,0x0000000e,0x00000131,0x00000011,0x00000130,0x0003003e, + 0x00000132,0x00000131,0x00050039,0x0000000e,0x00000133,0x0000001f,0x00000132,0x000200fe, + 0x00000133,0x00010038,0x00050036,0x0000000c,0x00000027,0x00000000,0x00000025,0x00030037, + 0x0000000d,0x00000026,0x000200f8,0x00000028,0x0004003b,0x0000000d,0x00000136,0x00000007, + 0x0004003b,0x00000013,0x0000013f,0x00000007,0x0004003b,0x0000000d,0x00000140,0x00000007, + 0x0004003b,0x00000013,0x00000143,0x00000007,0x0004003b,0x00000013,0x0000014a,0x00000007, + 0x0004003d,0x0000000c,0x00000137,0x00000026,0x0008000c,0x0000000c,0x0000013a,0x00000001, + 0x00000032,0x00000137,0x00000138,0x00000139,0x0003003e,0x00000136,0x0000013a,0x0004003d, + 0x0000000c,0x0000013b,0x00000136,0x0008000c,0x0000000c,0x0000013e,0x00000001,0x0000002b, + 0x0000013b,0x0000013c,0x0000013d,0x0003003e,0x00000136,0x0000013e,0x0004003d,0x0000000c, + 0x00000141,0x00000136,0x0003003e,0x00000140,0x00000141,0x00050039,0x0000000e,0x00000142, + 0x00000011,0x00000140,0x0003003e,0x0000013f,0x00000142,0x0004003d,0x0000000e,0x00000144, + 0x0000013f,0x000500c4,0x0000000e,0x00000146,0x00000144,0x00000145,0x00050080,0x0000000e, + 0x00000148,0x00000146,0x00000147,0x000500c7,0x0000000e,0x00000149,0x00000148,0x00000082, + 0x0003003e,0x00000143,0x00000149,0x0004003d,0x0000000e,0x0000014b,0x00000143,0x0003003e, + 0x0000014a,0x0000014b,0x00050039,0x0000000c,0x0000014c,0x00000016,0x0000014a,0x000200fe, + 0x0000014c,0x00010038,0x00050036,0x0000000c,0x0000002e,0x00000000,0x00000029,0x00030037, + 0x00000013,0x0000002a,0x00030037,0x00000013,0x0000002b,0x00030037,0x00000013,0x0000002c, + 0x00030037,0x00000013,0x0000002d,0x000200f8,0x0000002f,0x0004003b,0x00000013,0x0000014f, + 0x00000007,0x0004003b,0x0000000d,0x0000015b,0x00000007,0x0004003b,0x0000000d,0x00000169, + 0x00000007,0x0004003b,0x0000000d,0x00000174,0x00000007,0x0004003b,0x0000000d,0x00000180, + 0x00000007,0x0004003b,0x0000000d,0x0000018c,0x00000007,0x0004003b,0x0000000d,0x00000190, + 0x00000007,0x0004003d,0x0000000e,0x00000150,0x0000002a,0x00050084,0x0000000e,0x00000152, + 0x00000150,0x00000151,0x0004003d,0x0000000e,0x00000153,0x0000002b,0x00050080,0x0000000e, + 0x00000154,0x00000152,0x00000153,0x0004003d,0x0000000e,0x00000155,0x0000002c,0x00050084, + 0x0000000e,0x00000157,0x00000155,0x00000156,0x00050080,0x0000000e,0x00000158,0x00000154, + 0x00000157,0x0004003d,0x0000000e,0x00000159,0x0000002d,0x00050080,0x0000000e,0x0000015a, + 0x00000158,0x00000159,0x0003003e,0x0000014f,0x0000015a,0x0004003d,0x0000000e,0x00000160, + 0x0000014f,0x00050041,0x00000161,0x00000162,0x0000015f,0x00000160,0x0006003d,0x0000000c, + 0x00000163,0x00000162,0x00000030,0x00000156,0x0004003d,0x0000000e,0x00000164,0x0000014f, + 0x00050080,0x0000000e,0x00000165,0x00000164,0x000000c6,0x00050041,0x00000161,0x00000166, + 0x0000015f,0x00000165,0x0006003d,0x0000000c,0x00000167,0x00000166,0x00000030,0x00000156, + 0x00050081,0x0000000c,0x00000168,0x00000163,0x00000167,0x0003003e,0x0000015b,0x00000168, + 0x0004003d,0x0000000e,0x0000016a,0x0000014f,0x00050080,0x0000000e,0x0000016b,0x0000016a, + 0x000000f9,0x00050041,0x00000161,0x0000016c,0x0000015f,0x0000016b,0x0006003d,0x0000000c, + 0x0000016d,0x0000016c,0x00000030,0x00000156,0x0004003d,0x0000000e,0x0000016e,0x0000014f, + 0x00050080,0x0000000e,0x00000170,0x0000016e,0x0000016f,0x00050041,0x00000161,0x00000171, + 0x0000015f,0x00000170,0x0006003d,0x0000000c,0x00000172,0x00000171,0x00000030,0x00000156, + 0x00050081,0x0000000c,0x00000173,0x0000016d,0x00000172,0x0003003e,0x00000169,0x00000173, + 0x0004003d,0x0000000e,0x00000175,0x0000014f,0x00050080,0x0000000e,0x00000177,0x00000175, + 0x00000176,0x00050041,0x00000161,0x00000178,0x0000015f,0x00000177,0x0006003d,0x0000000c, + 0x00000179,0x00000178,0x00000030,0x00000156,0x0004003d,0x0000000e,0x0000017a,0x0000014f, + 0x00050080,0x0000000e,0x0000017c,0x0000017a,0x0000017b,0x00050041,0x00000161,0x0000017d, + 0x0000015f,0x0000017c,0x0006003d,0x0000000c,0x0000017e,0x0000017d,0x00000030,0x00000156, + 0x00050081,0x0000000c,0x0000017f,0x00000179,0x0000017e,0x0003003e,0x00000174,0x0000017f, + 0x0004003d,0x0000000e,0x00000181,0x0000014f,0x00050080,0x0000000e,0x00000183,0x00000181, + 0x00000182,0x00050041,0x00000161,0x00000184,0x0000015f,0x00000183,0x0006003d,0x0000000c, + 0x00000185,0x00000184,0x00000030,0x00000156,0x0004003d,0x0000000e,0x00000186,0x0000014f, + 0x00050080,0x0000000e,0x00000188,0x00000186,0x00000187,0x00050041,0x00000161,0x00000189, + 0x0000015f,0x00000188,0x0006003d,0x0000000c,0x0000018a,0x00000189,0x00000030,0x00000156, + 0x00050081,0x0000000c,0x0000018b,0x00000185,0x0000018a,0x0003003e,0x00000180,0x0000018b, + 0x0004003d,0x0000000c,0x0000018d,0x0000015b,0x0004003d,0x0000000c,0x0000018e,0x00000169, + 0x00050081,0x0000000c,0x0000018f,0x0000018d,0x0000018e,0x0003003e,0x0000018c,0x0000018f, + 0x0004003d,0x0000000c,0x00000191,0x0000018c,0x0004003d,0x0000000c,0x00000192,0x00000174, + 0x00050081,0x0000000c,0x00000193,0x00000191,0x00000192,0x0003003e,0x00000190,0x00000193, + 0x0004003d,0x0000000c,0x00000194,0x00000190,0x0004003d,0x0000000c,0x00000195,0x00000180, + 0x00050081,0x0000000c,0x00000196,0x00000194,0x00000195,0x000200fe,0x00000196,0x00010038, + 0x00050036,0x0000000c,0x00000033,0x00000000,0x00000030,0x00030037,0x00000013,0x00000031, + 0x00030037,0x00000013,0x00000032,0x000200f8,0x00000034,0x0004003b,0x0000000d,0x00000199, + 0x00000007,0x0004003b,0x00000013,0x0000019a,0x00000007,0x0004003b,0x00000013,0x0000019c, + 0x00000007,0x0004003b,0x00000013,0x0000019e,0x00000007,0x0004003b,0x00000013,0x0000019f, + 0x00000007,0x0004003b,0x00000013,0x000001a1,0x00000007,0x0004003b,0x00000013,0x000001a3, + 0x00000007,0x0004003b,0x00000013,0x000001a5,0x00000007,0x0004003b,0x00000013,0x000001a6, + 0x00000007,0x0004003b,0x0000000d,0x000001a9,0x00000007,0x0004003b,0x00000013,0x000001ab, + 0x00000007,0x0004003b,0x00000013,0x000001ad,0x00000007,0x0004003b,0x00000013,0x000001af, + 0x00000007,0x0004003b,0x00000013,0x000001b0,0x00000007,0x0004003b,0x0000000d,0x000001b3, + 0x00000007,0x0004003b,0x00000013,0x000001b5,0x00000007,0x0004003b,0x00000013,0x000001b7, + 0x00000007,0x0004003b,0x00000013,0x000001b9,0x00000007,0x0004003b,0x00000013,0x000001ba, + 0x00000007,0x0004003b,0x0000000d,0x000001bd,0x00000007,0x0004003b,0x00000013,0x000001be, + 0x00000007,0x0004003b,0x00000013,0x000001c0,0x00000007,0x0004003b,0x00000013,0x000001c2, + 0x00000007,0x0004003b,0x00000013,0x000001c3,0x00000007,0x0004003b,0x00000013,0x000001c5, + 0x00000007,0x0004003b,0x00000013,0x000001c7,0x00000007,0x0004003b,0x00000013,0x000001c9, + 0x00000007,0x0004003b,0x00000013,0x000001ca,0x00000007,0x0004003b,0x0000000d,0x000001cd, + 0x00000007,0x0004003b,0x00000013,0x000001cf,0x00000007,0x0004003b,0x00000013,0x000001d1, + 0x00000007,0x0004003b,0x00000013,0x000001d3,0x00000007,0x0004003b,0x00000013,0x000001d4, + 0x00000007,0x0004003b,0x0000000d,0x000001d7,0x00000007,0x0004003b,0x00000013,0x000001d9, + 0x00000007,0x0004003b,0x00000013,0x000001db,0x00000007,0x0004003b,0x00000013,0x000001dd, + 0x00000007,0x0004003b,0x00000013,0x000001de,0x00000007,0x0004003d,0x0000000e,0x0000019b, + 0x00000031,0x0003003e,0x0000019a,0x0000019b,0x0004003d,0x0000000e,0x0000019d,0x00000032, + 0x0003003e,0x0000019c,0x0000019d,0x0003003e,0x0000019e,0x000000a6,0x0003003e,0x0000019f, + 0x000000a6,0x00080039,0x0000000c,0x000001a0,0x0000002e,0x0000019a,0x0000019c,0x0000019e, + 0x0000019f,0x0004003d,0x0000000e,0x000001a2,0x00000031,0x0003003e,0x000001a1,0x000001a2, + 0x0004003d,0x0000000e,0x000001a4,0x00000032,0x0003003e,0x000001a3,0x000001a4,0x0003003e, + 0x000001a5,0x0000006b,0x0003003e,0x000001a6,0x000000a6,0x00080039,0x0000000c,0x000001a7, + 0x0000002e,0x000001a1,0x000001a3,0x000001a5,0x000001a6,0x00050081,0x0000000c,0x000001a8, + 0x000001a0,0x000001a7,0x0003003e,0x00000199,0x000001a8,0x0004003d,0x0000000c,0x000001aa, + 0x00000199,0x0004003d,0x0000000e,0x000001ac,0x00000031,0x0003003e,0x000001ab,0x000001ac, + 0x0004003d,0x0000000e,0x000001ae,0x00000032,0x0003003e,0x000001ad,0x000001ae,0x0003003e, + 0x000001af,0x00000156,0x0003003e,0x000001b0,0x000000a6,0x00080039,0x0000000c,0x000001b1, + 0x0000002e,0x000001ab,0x000001ad,0x000001af,0x000001b0,0x00050081,0x0000000c,0x000001b2, + 0x000001aa,0x000001b1,0x0003003e,0x000001a9,0x000001b2,0x0004003d,0x0000000c,0x000001b4, + 0x000001a9,0x0004003d,0x0000000e,0x000001b6,0x00000031,0x0003003e,0x000001b5,0x000001b6, + 0x0004003d,0x0000000e,0x000001b8,0x00000032,0x0003003e,0x000001b7,0x000001b8,0x0003003e, + 0x000001b9,0x00000124,0x0003003e,0x000001ba,0x000000a6,0x00080039,0x0000000c,0x000001bb, + 0x0000002e,0x000001b5,0x000001b7,0x000001b9,0x000001ba,0x00050081,0x0000000c,0x000001bc, + 0x000001b4,0x000001bb,0x0003003e,0x000001b3,0x000001bc,0x0004003d,0x0000000e,0x000001bf, + 0x00000031,0x0003003e,0x000001be,0x000001bf,0x0004003d,0x0000000e,0x000001c1,0x00000032, + 0x0003003e,0x000001c0,0x000001c1,0x0003003e,0x000001c2,0x000000a6,0x0003003e,0x000001c3, + 0x0000006b,0x00080039,0x0000000c,0x000001c4,0x0000002e,0x000001be,0x000001c0,0x000001c2, + 0x000001c3,0x0004003d,0x0000000e,0x000001c6,0x00000031,0x0003003e,0x000001c5,0x000001c6, + 0x0004003d,0x0000000e,0x000001c8,0x00000032,0x0003003e,0x000001c7,0x000001c8,0x0003003e, + 0x000001c9,0x0000006b,0x0003003e,0x000001ca,0x0000006b,0x00080039,0x0000000c,0x000001cb, + 0x0000002e,0x000001c5,0x000001c7,0x000001c9,0x000001ca,0x00050081,0x0000000c,0x000001cc, + 0x000001c4,0x000001cb,0x0003003e,0x000001bd,0x000001cc,0x0004003d,0x0000000c,0x000001ce, + 0x000001bd,0x0004003d,0x0000000e,0x000001d0,0x00000031,0x0003003e,0x000001cf,0x000001d0, + 0x0004003d,0x0000000e,0x000001d2,0x00000032,0x0003003e,0x000001d1,0x000001d2,0x0003003e, + 0x000001d3,0x00000156,0x0003003e,0x000001d4,0x0000006b,0x00080039,0x0000000c,0x000001d5, + 0x0000002e,0x000001cf,0x000001d1,0x000001d3,0x000001d4,0x00050081,0x0000000c,0x000001d6, + 0x000001ce,0x000001d5,0x0003003e,0x000001cd,0x000001d6,0x0004003d,0x0000000c,0x000001d8, + 0x000001cd,0x0004003d,0x0000000e,0x000001da,0x00000031,0x0003003e,0x000001d9,0x000001da, + 0x0004003d,0x0000000e,0x000001dc,0x00000032,0x0003003e,0x000001db,0x000001dc,0x0003003e, + 0x000001dd,0x00000124,0x0003003e,0x000001de,0x0000006b,0x00080039,0x0000000c,0x000001df, + 0x0000002e,0x000001d9,0x000001db,0x000001dd,0x000001de,0x00050081,0x0000000c,0x000001e0, + 0x000001d8,0x000001df,0x0003003e,0x000001d7,0x000001e0,0x0004003d,0x0000000c,0x000001e1, + 0x000001b3,0x0004003d,0x0000000c,0x000001e2,0x000001d7,0x00050081,0x0000000c,0x000001e3, + 0x000001e1,0x000001e2,0x000200fe,0x000001e3,0x00010038, +}; +inline constexpr uint32_t k_preprocess[] = { + 0x07230203,0x00010600,0x0008000b,0x00000221,0x00000000,0x00020011,0x00000001,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x0009000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x000000ec,0x000000f4,0x00000151, + 0x00000199,0x00060010,0x00000004,0x00000011,0x00000008,0x00000008,0x00000001,0x00030003, + 0x00000002,0x000001cc,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x36315f72,0x5f746962, + 0x726f7473,0x00656761,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x62385f72,0x735f7469, + 0x61726f74,0x00006567,0x000b0004,0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70, + 0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f, + 0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004, + 0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669,0x00040005, + 0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000a,0x6e756f72,0x36314664,0x3b316628, + 0x00000000,0x00040005,0x00000009,0x756c6176,0x00000065,0x00060005,0x00000010,0x68736168, + 0x66696e55,0x286d726f,0x003b3175,0x00040005,0x0000000f,0x756c6176,0x00000065,0x00070005, + 0x00000017,0x73756167,0x6e616973,0x31752833,0x3b31753b,0x003b3175,0x00030005,0x00000014, + 0x00000078,0x00030005,0x00000015,0x00000079,0x00040005,0x00000016,0x64656573,0x00000000, + 0x00040005,0x00000019,0x73746962,0x00000000,0x00040005,0x0000001c,0x6e676973,0x00000000, + 0x00050005,0x00000020,0x6e67616d,0x64757469,0x00000065,0x00040005,0x0000003a,0x6c616373, + 0x00006465,0x00030005,0x0000004b,0x0062736c,0x00040005,0x00000051,0x6e756f72,0x00646564, + 0x00040005,0x0000005f,0x6578696d,0x00000064,0x00040005,0x0000006d,0x65746e69,0x00726567, + 0x00040005,0x0000007d,0x65736162,0x00000000,0x00030005,0x00000099,0x00003075,0x00040005, + 0x0000009f,0x61726170,0x0000006d,0x00030005,0x000000a1,0x00003175,0x00040005,0x000000a7, + 0x61726170,0x0000006d,0x00030005,0x000000a9,0x00003275,0x00040005,0x000000af,0x61726170, + 0x0000006d,0x00030005,0x000000b1,0x00003375,0x00040005,0x000000b7,0x61726170,0x0000006d, + 0x00040005,0x000000b9,0x69646172,0x00307375,0x00040005,0x000000c2,0x69646172,0x00317375, + 0x00040005,0x000000c9,0x6c676e61,0x00003065,0x00040005,0x000000ce,0x6c676e61,0x00003165, + 0x00040005,0x000000d6,0x61726170,0x0000006d,0x00040005,0x000000dc,0x61726170,0x0000006d, + 0x00040005,0x000000e2,0x61726170,0x0000006d,0x00030005,0x000000e9,0x00006469,0x00080005, + 0x000000ec,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00040005, + 0x000000f2,0x68737550,0x00000000,0x00060006,0x000000f2,0x00000000,0x6c6c7566,0x74646957, + 0x00000068,0x00060006,0x000000f2,0x00000001,0x6c6c7566,0x67696548,0x00007468,0x00060006, + 0x000000f2,0x00000002,0x696c6176,0x64695764,0x00006874,0x00060006,0x000000f2,0x00000003, + 0x696c6176,0x69654864,0x00746867,0x00060006,0x000000f2,0x00000004,0x72756f73,0x69576563, + 0x00687464,0x00070006,0x000000f2,0x00000005,0x72756f73,0x65486563,0x74686769,0x00000000, + 0x00050006,0x000000f2,0x00000006,0x64656573,0x00000000,0x00060006,0x000000f2,0x00000007, + 0x6f747561,0x6b73614d,0x00000000,0x00060006,0x000000f2,0x00000008,0x61636f6c,0x6e6f546c, + 0x00000065,0x00070006,0x000000f2,0x00000009,0x61636f6c,0x7274536c,0x75746375,0x00006572, + 0x00070006,0x000000f2,0x0000000a,0x6e696b73,0x75727453,0x72757463,0x00000065,0x00050006, + 0x000000f2,0x0000000b,0x6c797473,0x00000065,0x00030005,0x000000f4,0x00006370,0x00040005, + 0x00000108,0x72756f73,0x00586563,0x00040005,0x0000011e,0x72756f73,0x00596563,0x00040005, + 0x00000133,0x67616d69,0x00005865,0x00040005,0x0000013f,0x67616d69,0x00005965,0x00040005, + 0x0000014d,0x61626772,0x00000000,0x00040005,0x0000014f,0x72756f53,0x00006563,0x00050006, + 0x0000014f,0x00000000,0x786f7270,0x00000079,0x00030005,0x00000151,0x00000000,0x00030005, + 0x0000015b,0x00000072,0x00040005,0x0000015c,0x61726170,0x0000006d,0x00040005,0x00000162, + 0x61726170,0x0000006d,0x00040005,0x00000166,0x61726170,0x0000006d,0x00030005,0x00000168, + 0x00000067,0x00040005,0x00000169,0x61726170,0x0000006d,0x00040005,0x0000016e,0x61726170, + 0x0000006d,0x00040005,0x00000171,0x61726170,0x0000006d,0x00030005,0x00000173,0x00000062, + 0x00040005,0x00000174,0x61726170,0x0000006d,0x00040005,0x00000179,0x61726170,0x0000006d, + 0x00040005,0x0000017c,0x61726170,0x0000006d,0x00040005,0x0000017f,0x73696f6e,0x00000065, + 0x00040005,0x00000181,0x61726170,0x0000006d,0x00040005,0x00000184,0x61726170,0x0000006d, + 0x00040005,0x00000187,0x61726170,0x0000006d,0x00040005,0x0000018b,0x65736162,0x00000000, + 0x00050005,0x00000197,0x74616546,0x73657275,0x00000000,0x00060006,0x00000197,0x00000000, + 0x74616566,0x73657275,0x00000000,0x00030005,0x00000199,0x00000000,0x00040005,0x000001d9, + 0x61726170,0x0000006d,0x00040005,0x000001ed,0x61726170,0x0000006d,0x00040005,0x00000208, + 0x61726170,0x0000006d,0x00040005,0x00000218,0x61726170,0x0000006d,0x00040047,0x000000ec, + 0x0000000b,0x0000001c,0x00030047,0x000000f2,0x00000002,0x00050048,0x000000f2,0x00000000, + 0x00000023,0x00000000,0x00050048,0x000000f2,0x00000001,0x00000023,0x00000004,0x00050048, + 0x000000f2,0x00000002,0x00000023,0x00000008,0x00050048,0x000000f2,0x00000003,0x00000023, + 0x0000000c,0x00050048,0x000000f2,0x00000004,0x00000023,0x00000010,0x00050048,0x000000f2, + 0x00000005,0x00000023,0x00000014,0x00050048,0x000000f2,0x00000006,0x00000023,0x00000018, + 0x00050048,0x000000f2,0x00000007,0x00000023,0x0000001c,0x00050048,0x000000f2,0x00000008, + 0x00000023,0x00000020,0x00050048,0x000000f2,0x00000009,0x00000023,0x00000024,0x00050048, + 0x000000f2,0x0000000a,0x00000023,0x00000028,0x00050048,0x000000f2,0x0000000b,0x00000023, + 0x0000002c,0x00040047,0x0000014e,0x00000006,0x00000010,0x00030047,0x0000014f,0x00000002, + 0x00040048,0x0000014f,0x00000000,0x00000018,0x00050048,0x0000014f,0x00000000,0x00000023, + 0x00000000,0x00030047,0x00000151,0x00000018,0x00040047,0x00000151,0x00000021,0x00000000, + 0x00040047,0x00000151,0x00000022,0x00000000,0x00040047,0x00000196,0x00000006,0x00000004, + 0x00030047,0x00000197,0x00000002,0x00040048,0x00000197,0x00000000,0x00000019,0x00050048, + 0x00000197,0x00000000,0x00000023,0x00000000,0x00030047,0x00000199,0x00000019,0x00040047, + 0x00000199,0x00000021,0x00000007,0x00040047,0x00000199,0x00000022,0x00000000,0x00020013, + 0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040020, + 0x00000007,0x00000007,0x00000006,0x00040021,0x00000008,0x00000006,0x00000007,0x00040015, + 0x0000000c,0x00000020,0x00000000,0x00040020,0x0000000d,0x00000007,0x0000000c,0x00040021, + 0x0000000e,0x00000006,0x0000000d,0x00040017,0x00000012,0x00000006,0x00000003,0x00060021, + 0x00000013,0x00000012,0x0000000d,0x0000000d,0x0000000d,0x0004002b,0x0000000c,0x0000001e, + 0x80000000,0x0004002b,0x0000000c,0x00000022,0x7fffffff,0x0004002b,0x0000000c,0x00000025, + 0x7f800000,0x00020014,0x00000026,0x0004002b,0x0000000c,0x0000002d,0x477ff000,0x0004002b, + 0x0000000c,0x00000036,0x38800000,0x0004002b,0x00000006,0x0000003d,0x4b800000,0x0004002b, + 0x00000006,0x00000044,0x33800000,0x0004002b,0x0000000c,0x0000004d,0x0000000d,0x0004002b, + 0x0000000c,0x0000004f,0x00000001,0x0004002b,0x0000000c,0x00000053,0x00000fff,0x0004002b, + 0x0000000c,0x00000057,0xffffe000,0x0004002b,0x0000000c,0x00000063,0x0000001c,0x0004002b, + 0x0000000c,0x00000065,0x00000004,0x0004002b,0x0000000c,0x0000006a,0x108ef2d9,0x0004002b, + 0x0000000c,0x0000006f,0x0000001e,0x0004002b,0x0000000c,0x00000072,0x00000008,0x0004002b, + 0x0000000c,0x00000078,0x33800000,0x0004002b,0x0000000c,0x0000007f,0x8da6b343,0x0004002b, + 0x0000000c,0x00000082,0x9e3779b9,0x0004002b,0x0000000c,0x00000086,0xd8163841,0x0004002b, + 0x0000000c,0x00000089,0x243f6a88,0x0004002b,0x0000000c,0x00000095,0x00000016,0x0004002b, + 0x0000000c,0x0000009b,0x2c9277b5,0x0004002b,0x0000000c,0x0000009d,0xac564b05,0x0004002b, + 0x0000000c,0x000000a3,0xfa6dc5f9,0x0004002b,0x0000000c,0x000000a5,0x4712a88e,0x0004002b, + 0x0000000c,0x000000ab,0xcaa5b80d,0x0004002b,0x0000000c,0x000000ad,0x21dd796b,0x0004002b, + 0x0000000c,0x000000b3,0x83232c31,0x0004002b,0x0000000c,0x000000b5,0x3463e0ac,0x0004002b, + 0x0000000c,0x000000bc,0x3f317218,0x0004002b,0x00000006,0x000000bf,0xc0000000,0x0004002b, + 0x0000000c,0x000000cb,0x40c90fdb,0x00040017,0x000000e7,0x0000000c,0x00000002,0x00040020, + 0x000000e8,0x00000007,0x000000e7,0x00040017,0x000000ea,0x0000000c,0x00000003,0x00040020, + 0x000000eb,0x00000001,0x000000ea,0x0004003b,0x000000eb,0x000000ec,0x00000001,0x0004002b, + 0x0000000c,0x000000ef,0x00000000,0x000e001e,0x000000f2,0x0000000c,0x0000000c,0x0000000c, + 0x0000000c,0x0000000c,0x0000000c,0x0000000c,0x00000006,0x00000006,0x00000006,0x00000006, + 0x00000006,0x00040020,0x000000f3,0x00000009,0x000000f2,0x0004003b,0x000000f3,0x000000f4, + 0x00000009,0x00040015,0x000000f5,0x00000020,0x00000001,0x0004002b,0x000000f5,0x000000f6, + 0x00000000,0x00040020,0x000000f7,0x00000009,0x0000000c,0x0004002b,0x000000f5,0x00000100, + 0x00000001,0x0004002b,0x000000f5,0x0000010b,0x00000002,0x0004002b,0x0000000c,0x00000115, + 0x00000002,0x0004002b,0x000000f5,0x00000121,0x00000003,0x0004002b,0x000000f5,0x00000137, + 0x00000004,0x0004002b,0x000000f5,0x00000143,0x00000005,0x00040017,0x0000014b,0x00000006, + 0x00000004,0x00040020,0x0000014c,0x00000007,0x0000014b,0x0003001d,0x0000014e,0x0000014b, + 0x0003001e,0x0000014f,0x0000014e,0x00040020,0x00000150,0x0000000c,0x0000014f,0x0004003b, + 0x00000150,0x00000151,0x0000000c,0x00040020,0x00000158,0x0000000c,0x0000014b,0x0004002b, + 0x00000006,0x00000160,0x3f000000,0x0004002b,0x00000006,0x00000164,0x3e000000,0x00040020, + 0x0000017e,0x00000007,0x00000012,0x0004002b,0x000000f5,0x00000180,0x00000006,0x0004002b, + 0x0000000c,0x00000194,0x00000010,0x0003001d,0x00000196,0x00000006,0x0003001e,0x00000197, + 0x00000196,0x00040020,0x00000198,0x0000000c,0x00000197,0x0004003b,0x00000198,0x00000199, + 0x0000000c,0x00040020,0x0000019e,0x0000000c,0x00000006,0x0004002b,0x0000000c,0x000001ab, + 0x00000003,0x0004002b,0x00000006,0x000001ad,0x3f800000,0x0004002b,0x0000000c,0x000001b4, + 0x00000005,0x0004002b,0x0000000c,0x000001b9,0x00000006,0x0004002b,0x0000000c,0x000001be, + 0x00000007,0x0004002b,0x0000000c,0x000001c7,0x00000009,0x0004002b,0x0000000c,0x000001cc, + 0x0000000a,0x0004002b,0x000000f5,0x000001ce,0x0000000b,0x00040020,0x000001cf,0x00000009, + 0x00000006,0x0004002b,0x00000006,0x000001d2,0x43000000,0x0004002b,0x0000000c,0x000001d6, + 0x0000000b,0x0004002b,0x000000f5,0x000001d8,0x00000008,0x0004002b,0x0000000c,0x000001df, + 0x0000000c,0x0004002b,0x000000f5,0x000001e1,0x00000007,0x0004002b,0x00000006,0x000001e4, + 0x00000000,0x0004002b,0x000000f5,0x000001ea,0x00000009,0x0004002b,0x000000f5,0x000001f9, + 0x0000000a,0x0004002b,0x00000006,0x00000207,0xbf800000,0x0004002b,0x0000000c,0x0000020d, + 0x0000000e,0x0004002b,0x0000000c,0x0000021d,0x0000000f,0x0006002c,0x000000ea,0x00000220, + 0x00000072,0x00000072,0x0000004f,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003, + 0x000200f8,0x00000005,0x0004003b,0x000000e8,0x000000e9,0x00000007,0x0004003b,0x0000000d, + 0x00000108,0x00000007,0x0004003b,0x0000000d,0x0000010f,0x00000007,0x0004003b,0x0000000d, + 0x0000011e,0x00000007,0x0004003b,0x0000000d,0x00000125,0x00000007,0x0004003b,0x0000000d, + 0x00000133,0x00000007,0x0004003b,0x0000000d,0x0000013f,0x00000007,0x0004003b,0x0000014c, + 0x0000014d,0x00000007,0x0004003b,0x00000007,0x0000015b,0x00000007,0x0004003b,0x00000007, + 0x0000015c,0x00000007,0x0004003b,0x00000007,0x00000162,0x00000007,0x0004003b,0x00000007, + 0x00000166,0x00000007,0x0004003b,0x00000007,0x00000168,0x00000007,0x0004003b,0x00000007, + 0x00000169,0x00000007,0x0004003b,0x00000007,0x0000016e,0x00000007,0x0004003b,0x00000007, + 0x00000171,0x00000007,0x0004003b,0x00000007,0x00000173,0x00000007,0x0004003b,0x00000007, + 0x00000174,0x00000007,0x0004003b,0x00000007,0x00000179,0x00000007,0x0004003b,0x00000007, + 0x0000017c,0x00000007,0x0004003b,0x0000017e,0x0000017f,0x00000007,0x0004003b,0x0000000d, + 0x00000181,0x00000007,0x0004003b,0x0000000d,0x00000184,0x00000007,0x0004003b,0x0000000d, + 0x00000187,0x00000007,0x0004003b,0x0000000d,0x0000018b,0x00000007,0x0004003b,0x00000007, + 0x000001d9,0x00000007,0x0004003b,0x00000007,0x000001e6,0x00000007,0x0004003b,0x00000007, + 0x000001ed,0x00000007,0x0004003b,0x00000007,0x000001f6,0x00000007,0x0004003b,0x00000007, + 0x000001fd,0x00000007,0x0004003b,0x00000007,0x00000208,0x00000007,0x0004003b,0x00000007, + 0x00000212,0x00000007,0x0004003b,0x00000007,0x00000218,0x00000007,0x0004003d,0x000000ea, + 0x000000ed,0x000000ec,0x0007004f,0x000000e7,0x000000ee,0x000000ed,0x000000ed,0x00000000, + 0x00000001,0x0003003e,0x000000e9,0x000000ee,0x00050041,0x0000000d,0x000000f0,0x000000e9, + 0x000000ef,0x0004003d,0x0000000c,0x000000f1,0x000000f0,0x00050041,0x000000f7,0x000000f8, + 0x000000f4,0x000000f6,0x0004003d,0x0000000c,0x000000f9,0x000000f8,0x000500ae,0x00000026, + 0x000000fa,0x000000f1,0x000000f9,0x000400a8,0x00000026,0x000000fb,0x000000fa,0x000300f7, + 0x000000fd,0x00000000,0x000400fa,0x000000fb,0x000000fc,0x000000fd,0x000200f8,0x000000fc, + 0x00050041,0x0000000d,0x000000fe,0x000000e9,0x0000004f,0x0004003d,0x0000000c,0x000000ff, + 0x000000fe,0x00050041,0x000000f7,0x00000101,0x000000f4,0x00000100,0x0004003d,0x0000000c, + 0x00000102,0x00000101,0x000500ae,0x00000026,0x00000103,0x000000ff,0x00000102,0x000200f9, + 0x000000fd,0x000200f8,0x000000fd,0x000700f5,0x00000026,0x00000104,0x000000fa,0x00000005, + 0x00000103,0x000000fc,0x000300f7,0x00000106,0x00000000,0x000400fa,0x00000104,0x00000105, + 0x00000106,0x000200f8,0x00000105,0x000100fd,0x000200f8,0x00000106,0x00050041,0x0000000d, + 0x00000109,0x000000e9,0x000000ef,0x0004003d,0x0000000c,0x0000010a,0x00000109,0x00050041, + 0x000000f7,0x0000010c,0x000000f4,0x0000010b,0x0004003d,0x0000000c,0x0000010d,0x0000010c, + 0x000500b0,0x00000026,0x0000010e,0x0000010a,0x0000010d,0x000300f7,0x00000111,0x00000000, + 0x000400fa,0x0000010e,0x00000110,0x00000114,0x000200f8,0x00000110,0x00050041,0x0000000d, + 0x00000112,0x000000e9,0x000000ef,0x0004003d,0x0000000c,0x00000113,0x00000112,0x0003003e, + 0x0000010f,0x00000113,0x000200f9,0x00000111,0x000200f8,0x00000114,0x00050041,0x000000f7, + 0x00000116,0x000000f4,0x0000010b,0x0004003d,0x0000000c,0x00000117,0x00000116,0x00050084, + 0x0000000c,0x00000118,0x00000115,0x00000117,0x00050041,0x0000000d,0x00000119,0x000000e9, + 0x000000ef,0x0004003d,0x0000000c,0x0000011a,0x00000119,0x00050082,0x0000000c,0x0000011b, + 0x00000118,0x0000011a,0x00050082,0x0000000c,0x0000011c,0x0000011b,0x00000115,0x0003003e, + 0x0000010f,0x0000011c,0x000200f9,0x00000111,0x000200f8,0x00000111,0x0004003d,0x0000000c, + 0x0000011d,0x0000010f,0x0003003e,0x00000108,0x0000011d,0x00050041,0x0000000d,0x0000011f, + 0x000000e9,0x0000004f,0x0004003d,0x0000000c,0x00000120,0x0000011f,0x00050041,0x000000f7, + 0x00000122,0x000000f4,0x00000121,0x0004003d,0x0000000c,0x00000123,0x00000122,0x000500b0, + 0x00000026,0x00000124,0x00000120,0x00000123,0x000300f7,0x00000127,0x00000000,0x000400fa, + 0x00000124,0x00000126,0x0000012a,0x000200f8,0x00000126,0x00050041,0x0000000d,0x00000128, + 0x000000e9,0x0000004f,0x0004003d,0x0000000c,0x00000129,0x00000128,0x0003003e,0x00000125, + 0x00000129,0x000200f9,0x00000127,0x000200f8,0x0000012a,0x00050041,0x000000f7,0x0000012b, + 0x000000f4,0x00000121,0x0004003d,0x0000000c,0x0000012c,0x0000012b,0x00050084,0x0000000c, + 0x0000012d,0x00000115,0x0000012c,0x00050041,0x0000000d,0x0000012e,0x000000e9,0x0000004f, + 0x0004003d,0x0000000c,0x0000012f,0x0000012e,0x00050082,0x0000000c,0x00000130,0x0000012d, + 0x0000012f,0x00050082,0x0000000c,0x00000131,0x00000130,0x00000115,0x0003003e,0x00000125, + 0x00000131,0x000200f9,0x00000127,0x000200f8,0x00000127,0x0004003d,0x0000000c,0x00000132, + 0x00000125,0x0003003e,0x0000011e,0x00000132,0x0004003d,0x0000000c,0x00000134,0x00000108, + 0x00050084,0x0000000c,0x00000135,0x00000115,0x00000134,0x00050080,0x0000000c,0x00000136, + 0x00000135,0x0000004f,0x00050041,0x000000f7,0x00000138,0x000000f4,0x00000137,0x0004003d, + 0x0000000c,0x00000139,0x00000138,0x00050084,0x0000000c,0x0000013a,0x00000136,0x00000139, + 0x00050041,0x000000f7,0x0000013b,0x000000f4,0x0000010b,0x0004003d,0x0000000c,0x0000013c, + 0x0000013b,0x00050084,0x0000000c,0x0000013d,0x00000115,0x0000013c,0x00050086,0x0000000c, + 0x0000013e,0x0000013a,0x0000013d,0x0003003e,0x00000133,0x0000013e,0x0004003d,0x0000000c, + 0x00000140,0x0000011e,0x00050084,0x0000000c,0x00000141,0x00000115,0x00000140,0x00050080, + 0x0000000c,0x00000142,0x00000141,0x0000004f,0x00050041,0x000000f7,0x00000144,0x000000f4, + 0x00000143,0x0004003d,0x0000000c,0x00000145,0x00000144,0x00050084,0x0000000c,0x00000146, + 0x00000142,0x00000145,0x00050041,0x000000f7,0x00000147,0x000000f4,0x00000121,0x0004003d, + 0x0000000c,0x00000148,0x00000147,0x00050084,0x0000000c,0x00000149,0x00000115,0x00000148, + 0x00050086,0x0000000c,0x0000014a,0x00000146,0x00000149,0x0003003e,0x0000013f,0x0000014a, + 0x0004003d,0x0000000c,0x00000152,0x0000013f,0x00050041,0x000000f7,0x00000153,0x000000f4, + 0x00000137,0x0004003d,0x0000000c,0x00000154,0x00000153,0x00050084,0x0000000c,0x00000155, + 0x00000152,0x00000154,0x0004003d,0x0000000c,0x00000156,0x00000133,0x00050080,0x0000000c, + 0x00000157,0x00000155,0x00000156,0x00060041,0x00000158,0x00000159,0x00000151,0x000000f6, + 0x00000157,0x0004003d,0x0000014b,0x0000015a,0x00000159,0x0003003e,0x0000014d,0x0000015a, + 0x00050041,0x00000007,0x0000015d,0x0000014d,0x000000ef,0x0004003d,0x00000006,0x0000015e, + 0x0000015d,0x0003003e,0x0000015c,0x0000015e,0x00050039,0x00000006,0x0000015f,0x0000000a, + 0x0000015c,0x00050083,0x00000006,0x00000161,0x0000015f,0x00000160,0x0003003e,0x00000162, + 0x00000161,0x00050039,0x00000006,0x00000163,0x0000000a,0x00000162,0x00050085,0x00000006, + 0x00000165,0x00000163,0x00000164,0x0003003e,0x00000166,0x00000165,0x00050039,0x00000006, + 0x00000167,0x0000000a,0x00000166,0x0003003e,0x0000015b,0x00000167,0x00050041,0x00000007, + 0x0000016a,0x0000014d,0x0000004f,0x0004003d,0x00000006,0x0000016b,0x0000016a,0x0003003e, + 0x00000169,0x0000016b,0x00050039,0x00000006,0x0000016c,0x0000000a,0x00000169,0x00050083, + 0x00000006,0x0000016d,0x0000016c,0x00000160,0x0003003e,0x0000016e,0x0000016d,0x00050039, + 0x00000006,0x0000016f,0x0000000a,0x0000016e,0x00050085,0x00000006,0x00000170,0x0000016f, + 0x00000164,0x0003003e,0x00000171,0x00000170,0x00050039,0x00000006,0x00000172,0x0000000a, + 0x00000171,0x0003003e,0x00000168,0x00000172,0x00050041,0x00000007,0x00000175,0x0000014d, + 0x00000115,0x0004003d,0x00000006,0x00000176,0x00000175,0x0003003e,0x00000174,0x00000176, + 0x00050039,0x00000006,0x00000177,0x0000000a,0x00000174,0x00050083,0x00000006,0x00000178, + 0x00000177,0x00000160,0x0003003e,0x00000179,0x00000178,0x00050039,0x00000006,0x0000017a, + 0x0000000a,0x00000179,0x00050085,0x00000006,0x0000017b,0x0000017a,0x00000164,0x0003003e, + 0x0000017c,0x0000017b,0x00050039,0x00000006,0x0000017d,0x0000000a,0x0000017c,0x0003003e, + 0x00000173,0x0000017d,0x00050041,0x0000000d,0x00000182,0x000000e9,0x000000ef,0x0004003d, + 0x0000000c,0x00000183,0x00000182,0x0003003e,0x00000181,0x00000183,0x00050041,0x0000000d, + 0x00000185,0x000000e9,0x0000004f,0x0004003d,0x0000000c,0x00000186,0x00000185,0x0003003e, + 0x00000184,0x00000186,0x00050041,0x000000f7,0x00000188,0x000000f4,0x00000180,0x0004003d, + 0x0000000c,0x00000189,0x00000188,0x0003003e,0x00000187,0x00000189,0x00070039,0x00000012, + 0x0000018a,0x00000017,0x00000181,0x00000184,0x00000187,0x0003003e,0x0000017f,0x0000018a, + 0x00050041,0x0000000d,0x0000018c,0x000000e9,0x0000004f,0x0004003d,0x0000000c,0x0000018d, + 0x0000018c,0x00050041,0x000000f7,0x0000018e,0x000000f4,0x000000f6,0x0004003d,0x0000000c, + 0x0000018f,0x0000018e,0x00050084,0x0000000c,0x00000190,0x0000018d,0x0000018f,0x00050041, + 0x0000000d,0x00000191,0x000000e9,0x000000ef,0x0004003d,0x0000000c,0x00000192,0x00000191, + 0x00050080,0x0000000c,0x00000193,0x00000190,0x00000192,0x00050084,0x0000000c,0x00000195, + 0x00000193,0x00000194,0x0003003e,0x0000018b,0x00000195,0x0004003d,0x0000000c,0x0000019a, + 0x0000018b,0x00050080,0x0000000c,0x0000019b,0x0000019a,0x000000ef,0x00050041,0x00000007, + 0x0000019c,0x0000017f,0x000000ef,0x0004003d,0x00000006,0x0000019d,0x0000019c,0x00060041, + 0x0000019e,0x0000019f,0x00000199,0x000000f6,0x0000019b,0x0003003e,0x0000019f,0x0000019d, + 0x0004003d,0x0000000c,0x000001a0,0x0000018b,0x00050080,0x0000000c,0x000001a1,0x000001a0, + 0x0000004f,0x00050041,0x00000007,0x000001a2,0x0000017f,0x0000004f,0x0004003d,0x00000006, + 0x000001a3,0x000001a2,0x00060041,0x0000019e,0x000001a4,0x00000199,0x000000f6,0x000001a1, + 0x0003003e,0x000001a4,0x000001a3,0x0004003d,0x0000000c,0x000001a5,0x0000018b,0x00050080, + 0x0000000c,0x000001a6,0x000001a5,0x00000115,0x00050041,0x00000007,0x000001a7,0x0000017f, + 0x00000115,0x0004003d,0x00000006,0x000001a8,0x000001a7,0x00060041,0x0000019e,0x000001a9, + 0x00000199,0x000000f6,0x000001a6,0x0003003e,0x000001a9,0x000001a8,0x0004003d,0x0000000c, + 0x000001aa,0x0000018b,0x00050080,0x0000000c,0x000001ac,0x000001aa,0x000001ab,0x00060041, + 0x0000019e,0x000001ae,0x00000199,0x000000f6,0x000001ac,0x0003003e,0x000001ae,0x000001ad, + 0x0004003d,0x0000000c,0x000001af,0x0000018b,0x00050080,0x0000000c,0x000001b0,0x000001af, + 0x00000065,0x0004003d,0x00000006,0x000001b1,0x0000015b,0x00060041,0x0000019e,0x000001b2, + 0x00000199,0x000000f6,0x000001b0,0x0003003e,0x000001b2,0x000001b1,0x0004003d,0x0000000c, + 0x000001b3,0x0000018b,0x00050080,0x0000000c,0x000001b5,0x000001b3,0x000001b4,0x0004003d, + 0x00000006,0x000001b6,0x00000168,0x00060041,0x0000019e,0x000001b7,0x00000199,0x000000f6, + 0x000001b5,0x0003003e,0x000001b7,0x000001b6,0x0004003d,0x0000000c,0x000001b8,0x0000018b, + 0x00050080,0x0000000c,0x000001ba,0x000001b8,0x000001b9,0x0004003d,0x00000006,0x000001bb, + 0x00000173,0x00060041,0x0000019e,0x000001bc,0x00000199,0x000000f6,0x000001ba,0x0003003e, + 0x000001bc,0x000001bb,0x0004003d,0x0000000c,0x000001bd,0x0000018b,0x00050080,0x0000000c, + 0x000001bf,0x000001bd,0x000001be,0x0004003d,0x00000006,0x000001c0,0x0000015b,0x00060041, + 0x0000019e,0x000001c1,0x00000199,0x000000f6,0x000001bf,0x0003003e,0x000001c1,0x000001c0, + 0x0004003d,0x0000000c,0x000001c2,0x0000018b,0x00050080,0x0000000c,0x000001c3,0x000001c2, + 0x00000072,0x0004003d,0x00000006,0x000001c4,0x00000168,0x00060041,0x0000019e,0x000001c5, + 0x00000199,0x000000f6,0x000001c3,0x0003003e,0x000001c5,0x000001c4,0x0004003d,0x0000000c, + 0x000001c6,0x0000018b,0x00050080,0x0000000c,0x000001c8,0x000001c6,0x000001c7,0x0004003d, + 0x00000006,0x000001c9,0x00000173,0x00060041,0x0000019e,0x000001ca,0x00000199,0x000000f6, + 0x000001c8,0x0003003e,0x000001ca,0x000001c9,0x0004003d,0x0000000c,0x000001cb,0x0000018b, + 0x00050080,0x0000000c,0x000001cd,0x000001cb,0x000001cc,0x00050041,0x000001cf,0x000001d0, + 0x000000f4,0x000001ce,0x0004003d,0x00000006,0x000001d1,0x000001d0,0x00050088,0x00000006, + 0x000001d3,0x000001d1,0x000001d2,0x00060041,0x0000019e,0x000001d4,0x00000199,0x000000f6, + 0x000001cd,0x0003003e,0x000001d4,0x000001d3,0x0004003d,0x0000000c,0x000001d5,0x0000018b, + 0x00050080,0x0000000c,0x000001d7,0x000001d5,0x000001d6,0x00050041,0x000001cf,0x000001da, + 0x000000f4,0x000001d8,0x0004003d,0x00000006,0x000001db,0x000001da,0x0003003e,0x000001d9, + 0x000001db,0x00050039,0x00000006,0x000001dc,0x0000000a,0x000001d9,0x00060041,0x0000019e, + 0x000001dd,0x00000199,0x000000f6,0x000001d7,0x0003003e,0x000001dd,0x000001dc,0x0004003d, + 0x0000000c,0x000001de,0x0000018b,0x00050080,0x0000000c,0x000001e0,0x000001de,0x000001df, + 0x00050041,0x000001cf,0x000001e2,0x000000f4,0x000001e1,0x0004003d,0x00000006,0x000001e3, + 0x000001e2,0x000500ba,0x00000026,0x000001e5,0x000001e3,0x000001e4,0x000300f7,0x000001e8, + 0x00000000,0x000400fa,0x000001e5,0x000001e7,0x000001e9,0x000200f8,0x000001e7,0x0003003e, + 0x000001e6,0x000001ad,0x000200f9,0x000001e8,0x000200f8,0x000001e9,0x00050041,0x000001cf, + 0x000001eb,0x000000f4,0x000001ea,0x0004003d,0x00000006,0x000001ec,0x000001eb,0x0003003e, + 0x000001e6,0x000001ec,0x000200f9,0x000001e8,0x000200f8,0x000001e8,0x0004003d,0x00000006, + 0x000001ee,0x000001e6,0x0003003e,0x000001ed,0x000001ee,0x00050039,0x00000006,0x000001ef, + 0x0000000a,0x000001ed,0x00060041,0x0000019e,0x000001f0,0x00000199,0x000000f6,0x000001e0, + 0x0003003e,0x000001f0,0x000001ef,0x0004003d,0x0000000c,0x000001f1,0x0000018b,0x00050080, + 0x0000000c,0x000001f2,0x000001f1,0x0000004d,0x00050041,0x000001cf,0x000001f3,0x000000f4, + 0x000001e1,0x0004003d,0x00000006,0x000001f4,0x000001f3,0x000500ba,0x00000026,0x000001f5, + 0x000001f4,0x000001e4,0x000300f7,0x000001f8,0x00000000,0x000400fa,0x000001f5,0x000001f7, + 0x00000206,0x000200f8,0x000001f7,0x00050041,0x000001cf,0x000001fa,0x000000f4,0x000001f9, + 0x0004003d,0x00000006,0x000001fb,0x000001fa,0x000500b8,0x00000026,0x000001fc,0x000001fb, + 0x000001e4,0x000300f7,0x000001ff,0x00000000,0x000400fa,0x000001fc,0x000001fe,0x00000202, + 0x000200f8,0x000001fe,0x00050041,0x000001cf,0x00000200,0x000000f4,0x000001ea,0x0004003d, + 0x00000006,0x00000201,0x00000200,0x0003003e,0x000001fd,0x00000201,0x000200f9,0x000001ff, + 0x000200f8,0x00000202,0x00050041,0x000001cf,0x00000203,0x000000f4,0x000001f9,0x0004003d, + 0x00000006,0x00000204,0x00000203,0x0003003e,0x000001fd,0x00000204,0x000200f9,0x000001ff, + 0x000200f8,0x000001ff,0x0004003d,0x00000006,0x00000205,0x000001fd,0x0003003e,0x000001f6, + 0x00000205,0x000200f9,0x000001f8,0x000200f8,0x00000206,0x0003003e,0x000001f6,0x00000207, + 0x000200f9,0x000001f8,0x000200f8,0x000001f8,0x0004003d,0x00000006,0x00000209,0x000001f6, + 0x0003003e,0x00000208,0x00000209,0x00050039,0x00000006,0x0000020a,0x0000000a,0x00000208, + 0x00060041,0x0000019e,0x0000020b,0x00000199,0x000000f6,0x000001f2,0x0003003e,0x0000020b, + 0x0000020a,0x0004003d,0x0000000c,0x0000020c,0x0000018b,0x00050080,0x0000000c,0x0000020e, + 0x0000020c,0x0000020d,0x00050041,0x000001cf,0x0000020f,0x000000f4,0x000001e1,0x0004003d, + 0x00000006,0x00000210,0x0000020f,0x000500ba,0x00000026,0x00000211,0x00000210,0x000001e4, + 0x000300f7,0x00000214,0x00000000,0x000400fa,0x00000211,0x00000213,0x00000217,0x000200f8, + 0x00000213,0x00050041,0x000001cf,0x00000215,0x000000f4,0x000001ea,0x0004003d,0x00000006, + 0x00000216,0x00000215,0x0003003e,0x00000212,0x00000216,0x000200f9,0x00000214,0x000200f8, + 0x00000217,0x0003003e,0x00000212,0x00000207,0x000200f9,0x00000214,0x000200f8,0x00000214, + 0x0004003d,0x00000006,0x00000219,0x00000212,0x0003003e,0x00000218,0x00000219,0x00050039, + 0x00000006,0x0000021a,0x0000000a,0x00000218,0x00060041,0x0000019e,0x0000021b,0x00000199, + 0x000000f6,0x0000020e,0x0003003e,0x0000021b,0x0000021a,0x0004003d,0x0000000c,0x0000021c, + 0x0000018b,0x00050080,0x0000000c,0x0000021e,0x0000021c,0x0000021d,0x00060041,0x0000019e, + 0x0000021f,0x00000199,0x000000f6,0x0000021e,0x0003003e,0x0000021f,0x000001e4,0x000100fd, + 0x00010038,0x00050036,0x00000006,0x0000000a,0x00000000,0x00000008,0x00030037,0x00000007, + 0x00000009,0x000200f8,0x0000000b,0x0004003b,0x0000000d,0x00000019,0x00000007,0x0004003b, + 0x0000000d,0x0000001c,0x00000007,0x0004003b,0x0000000d,0x00000020,0x00000007,0x0004003b, + 0x00000007,0x0000003a,0x00000007,0x0004003b,0x0000000d,0x0000004b,0x00000007,0x0004003b, + 0x0000000d,0x00000051,0x00000007,0x0004003d,0x00000006,0x0000001a,0x00000009,0x0004007c, + 0x0000000c,0x0000001b,0x0000001a,0x0003003e,0x00000019,0x0000001b,0x0004003d,0x0000000c, + 0x0000001d,0x00000019,0x000500c7,0x0000000c,0x0000001f,0x0000001d,0x0000001e,0x0003003e, + 0x0000001c,0x0000001f,0x0004003d,0x0000000c,0x00000021,0x00000019,0x000500c7,0x0000000c, + 0x00000023,0x00000021,0x00000022,0x0003003e,0x00000020,0x00000023,0x0004003d,0x0000000c, + 0x00000024,0x00000020,0x000500ae,0x00000026,0x00000027,0x00000024,0x00000025,0x000300f7, + 0x00000029,0x00000000,0x000400fa,0x00000027,0x00000028,0x00000029,0x000200f8,0x00000028, + 0x0004003d,0x00000006,0x0000002a,0x00000009,0x000200fe,0x0000002a,0x000200f8,0x00000029, + 0x0004003d,0x0000000c,0x0000002c,0x00000020,0x000500ae,0x00000026,0x0000002e,0x0000002c, + 0x0000002d,0x000300f7,0x00000030,0x00000000,0x000400fa,0x0000002e,0x0000002f,0x00000030, + 0x000200f8,0x0000002f,0x0004003d,0x0000000c,0x00000031,0x0000001c,0x000500c5,0x0000000c, + 0x00000032,0x00000031,0x00000025,0x0004007c,0x00000006,0x00000033,0x00000032,0x000200fe, + 0x00000033,0x000200f8,0x00000030,0x0004003d,0x0000000c,0x00000035,0x00000020,0x000500b0, + 0x00000026,0x00000037,0x00000035,0x00000036,0x000300f7,0x00000039,0x00000000,0x000400fa, + 0x00000037,0x00000038,0x00000039,0x000200f8,0x00000038,0x0004003d,0x0000000c,0x0000003b, + 0x00000020,0x0004007c,0x00000006,0x0000003c,0x0000003b,0x00050085,0x00000006,0x0000003e, + 0x0000003c,0x0000003d,0x0006000c,0x00000006,0x0000003f,0x00000001,0x00000002,0x0000003e, + 0x0003003e,0x0000003a,0x0000003f,0x0004003d,0x0000000c,0x00000040,0x0000001c,0x0004007c, + 0x00000006,0x00000041,0x00000040,0x0004003d,0x0000000c,0x00000042,0x0000001c,0x0004003d, + 0x00000006,0x00000043,0x0000003a,0x00050085,0x00000006,0x00000045,0x00000043,0x00000044, + 0x0004007c,0x0000000c,0x00000046,0x00000045,0x000500c5,0x0000000c,0x00000047,0x00000042, + 0x00000046,0x0004007c,0x00000006,0x00000048,0x00000047,0x00050081,0x00000006,0x00000049, + 0x00000041,0x00000048,0x000200fe,0x00000049,0x000200f8,0x00000039,0x0004003d,0x0000000c, + 0x0000004c,0x00000020,0x000500c2,0x0000000c,0x0000004e,0x0000004c,0x0000004d,0x000500c7, + 0x0000000c,0x00000050,0x0000004e,0x0000004f,0x0003003e,0x0000004b,0x00000050,0x0004003d, + 0x0000000c,0x00000052,0x00000020,0x00050080,0x0000000c,0x00000054,0x00000052,0x00000053, + 0x0004003d,0x0000000c,0x00000055,0x0000004b,0x00050080,0x0000000c,0x00000056,0x00000054, + 0x00000055,0x000500c7,0x0000000c,0x00000058,0x00000056,0x00000057,0x0003003e,0x00000051, + 0x00000058,0x0004003d,0x0000000c,0x00000059,0x0000001c,0x0004003d,0x0000000c,0x0000005a, + 0x00000051,0x000500c5,0x0000000c,0x0000005b,0x00000059,0x0000005a,0x0004007c,0x00000006, + 0x0000005c,0x0000005b,0x000200fe,0x0000005c,0x00010038,0x00050036,0x00000006,0x00000010, + 0x00000000,0x0000000e,0x00030037,0x0000000d,0x0000000f,0x000200f8,0x00000011,0x0004003b, + 0x0000000d,0x0000005f,0x00000007,0x0004003b,0x0000000d,0x0000006d,0x00000007,0x0004003d, + 0x0000000c,0x00000060,0x0000000f,0x0003003e,0x0000005f,0x00000060,0x0004003d,0x0000000c, + 0x00000061,0x0000005f,0x0004003d,0x0000000c,0x00000062,0x0000005f,0x000500c2,0x0000000c, + 0x00000064,0x00000062,0x00000063,0x00050080,0x0000000c,0x00000066,0x00000064,0x00000065, + 0x000500c2,0x0000000c,0x00000067,0x00000061,0x00000066,0x0004003d,0x0000000c,0x00000068, + 0x0000005f,0x000500c6,0x0000000c,0x00000069,0x00000067,0x00000068,0x0003003e,0x0000005f, + 0x00000069,0x0004003d,0x0000000c,0x0000006b,0x0000005f,0x00050084,0x0000000c,0x0000006c, + 0x0000006b,0x0000006a,0x0003003e,0x0000005f,0x0000006c,0x0004003d,0x0000000c,0x0000006e, + 0x0000005f,0x000500c2,0x0000000c,0x00000070,0x0000006e,0x0000006f,0x0004003d,0x0000000c, + 0x00000071,0x0000005f,0x000500c2,0x0000000c,0x00000073,0x00000071,0x00000072,0x000500c6, + 0x0000000c,0x00000074,0x00000070,0x00000073,0x00050080,0x0000000c,0x00000075,0x00000074, + 0x0000004f,0x0003003e,0x0000006d,0x00000075,0x0004003d,0x0000000c,0x00000076,0x0000006d, + 0x00040070,0x00000006,0x00000077,0x00000076,0x0004007c,0x00000006,0x00000079,0x00000078, + 0x00050085,0x00000006,0x0000007a,0x00000077,0x00000079,0x000200fe,0x0000007a,0x00010038, + 0x00050036,0x00000012,0x00000017,0x00000000,0x00000013,0x00030037,0x0000000d,0x00000014, + 0x00030037,0x0000000d,0x00000015,0x00030037,0x0000000d,0x00000016,0x000200f8,0x00000018, + 0x0004003b,0x0000000d,0x0000007d,0x00000007,0x0004003b,0x00000007,0x00000099,0x00000007, + 0x0004003b,0x0000000d,0x0000009f,0x00000007,0x0004003b,0x00000007,0x000000a1,0x00000007, + 0x0004003b,0x0000000d,0x000000a7,0x00000007,0x0004003b,0x00000007,0x000000a9,0x00000007, + 0x0004003b,0x0000000d,0x000000af,0x00000007,0x0004003b,0x00000007,0x000000b1,0x00000007, + 0x0004003b,0x0000000d,0x000000b7,0x00000007,0x0004003b,0x00000007,0x000000b9,0x00000007, + 0x0004003b,0x00000007,0x000000c2,0x00000007,0x0004003b,0x00000007,0x000000c9,0x00000007, + 0x0004003b,0x00000007,0x000000ce,0x00000007,0x0004003b,0x00000007,0x000000d6,0x00000007, + 0x0004003b,0x00000007,0x000000dc,0x00000007,0x0004003b,0x00000007,0x000000e2,0x00000007, + 0x0004003d,0x0000000c,0x0000007e,0x00000014,0x00050084,0x0000000c,0x00000080,0x0000007e, + 0x0000007f,0x0004003d,0x0000000c,0x00000081,0x00000016,0x00050084,0x0000000c,0x00000083, + 0x00000081,0x00000082,0x000500c6,0x0000000c,0x00000084,0x00000080,0x00000083,0x0004003d, + 0x0000000c,0x00000085,0x00000015,0x00050084,0x0000000c,0x00000087,0x00000085,0x00000086, + 0x000500c6,0x0000000c,0x00000088,0x00000084,0x00000087,0x000500c6,0x0000000c,0x0000008a, + 0x00000088,0x00000089,0x0003003e,0x0000007d,0x0000008a,0x0004003d,0x0000000c,0x0000008b, + 0x0000007d,0x0004003d,0x0000000c,0x0000008c,0x0000007d,0x000500c2,0x0000000c,0x0000008d, + 0x0000008c,0x00000063,0x00050080,0x0000000c,0x0000008e,0x0000008d,0x00000065,0x000500c2, + 0x0000000c,0x0000008f,0x0000008b,0x0000008e,0x0004003d,0x0000000c,0x00000090,0x0000007d, + 0x000500c6,0x0000000c,0x00000091,0x0000008f,0x00000090,0x0003003e,0x0000007d,0x00000091, + 0x0004003d,0x0000000c,0x00000092,0x0000007d,0x00050084,0x0000000c,0x00000093,0x00000092, + 0x0000006a,0x0003003e,0x0000007d,0x00000093,0x0004003d,0x0000000c,0x00000094,0x0000007d, + 0x000500c2,0x0000000c,0x00000096,0x00000094,0x00000095,0x0004003d,0x0000000c,0x00000097, + 0x0000007d,0x000500c6,0x0000000c,0x00000098,0x00000096,0x00000097,0x0003003e,0x0000007d, + 0x00000098,0x0004003d,0x0000000c,0x0000009a,0x0000007d,0x00050084,0x0000000c,0x0000009c, + 0x0000009a,0x0000009b,0x00050080,0x0000000c,0x0000009e,0x0000009c,0x0000009d,0x0003003e, + 0x0000009f,0x0000009e,0x00050039,0x00000006,0x000000a0,0x00000010,0x0000009f,0x0003003e, + 0x00000099,0x000000a0,0x0004003d,0x0000000c,0x000000a2,0x0000007d,0x00050084,0x0000000c, + 0x000000a4,0x000000a2,0x000000a3,0x00050080,0x0000000c,0x000000a6,0x000000a4,0x000000a5, + 0x0003003e,0x000000a7,0x000000a6,0x00050039,0x00000006,0x000000a8,0x00000010,0x000000a7, + 0x0003003e,0x000000a1,0x000000a8,0x0004003d,0x0000000c,0x000000aa,0x0000007d,0x00050084, + 0x0000000c,0x000000ac,0x000000aa,0x000000ab,0x00050080,0x0000000c,0x000000ae,0x000000ac, + 0x000000ad,0x0003003e,0x000000af,0x000000ae,0x00050039,0x00000006,0x000000b0,0x00000010, + 0x000000af,0x0003003e,0x000000a9,0x000000b0,0x0004003d,0x0000000c,0x000000b2,0x0000007d, + 0x00050084,0x0000000c,0x000000b4,0x000000b2,0x000000b3,0x00050080,0x0000000c,0x000000b6, + 0x000000b4,0x000000b5,0x0003003e,0x000000b7,0x000000b6,0x00050039,0x00000006,0x000000b8, + 0x00000010,0x000000b7,0x0003003e,0x000000b1,0x000000b8,0x0004003d,0x00000006,0x000000ba, + 0x00000099,0x0006000c,0x00000006,0x000000bb,0x00000001,0x0000001e,0x000000ba,0x0004007c, + 0x00000006,0x000000bd,0x000000bc,0x00050085,0x00000006,0x000000be,0x000000bb,0x000000bd, + 0x00050085,0x00000006,0x000000c0,0x000000be,0x000000bf,0x0006000c,0x00000006,0x000000c1, + 0x00000001,0x0000001f,0x000000c0,0x0003003e,0x000000b9,0x000000c1,0x0004003d,0x00000006, + 0x000000c3,0x000000a9,0x0006000c,0x00000006,0x000000c4,0x00000001,0x0000001e,0x000000c3, + 0x0004007c,0x00000006,0x000000c5,0x000000bc,0x00050085,0x00000006,0x000000c6,0x000000c4, + 0x000000c5,0x00050085,0x00000006,0x000000c7,0x000000c6,0x000000bf,0x0006000c,0x00000006, + 0x000000c8,0x00000001,0x0000001f,0x000000c7,0x0003003e,0x000000c2,0x000000c8,0x0004003d, + 0x00000006,0x000000ca,0x000000a1,0x0004007c,0x00000006,0x000000cc,0x000000cb,0x00050085, + 0x00000006,0x000000cd,0x000000ca,0x000000cc,0x0003003e,0x000000c9,0x000000cd,0x0004003d, + 0x00000006,0x000000cf,0x000000b1,0x0004007c,0x00000006,0x000000d0,0x000000cb,0x00050085, + 0x00000006,0x000000d1,0x000000cf,0x000000d0,0x0003003e,0x000000ce,0x000000d1,0x0004003d, + 0x00000006,0x000000d2,0x000000b9,0x0004003d,0x00000006,0x000000d3,0x000000c9,0x0006000c, + 0x00000006,0x000000d4,0x00000001,0x0000000e,0x000000d3,0x00050085,0x00000006,0x000000d5, + 0x000000d2,0x000000d4,0x0003003e,0x000000d6,0x000000d5,0x00050039,0x00000006,0x000000d7, + 0x0000000a,0x000000d6,0x0004003d,0x00000006,0x000000d8,0x000000b9,0x0004003d,0x00000006, + 0x000000d9,0x000000c9,0x0006000c,0x00000006,0x000000da,0x00000001,0x0000000d,0x000000d9, + 0x00050085,0x00000006,0x000000db,0x000000d8,0x000000da,0x0003003e,0x000000dc,0x000000db, + 0x00050039,0x00000006,0x000000dd,0x0000000a,0x000000dc,0x0004003d,0x00000006,0x000000de, + 0x000000c2,0x0004003d,0x00000006,0x000000df,0x000000ce,0x0006000c,0x00000006,0x000000e0, + 0x00000001,0x0000000e,0x000000df,0x00050085,0x00000006,0x000000e1,0x000000de,0x000000e0, + 0x0003003e,0x000000e2,0x000000e1,0x00050039,0x00000006,0x000000e3,0x0000000a,0x000000e2, + 0x00060050,0x00000012,0x000000e4,0x000000d7,0x000000dd,0x000000e3,0x000200fe,0x000000e4, + 0x00010038, +}; +inline constexpr uint32_t k_fused_block32[] = { + 0x07230203,0x00010600,0x0008000b,0x00000bcc,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x00000027,0x00020011,0x0000003d,0x00020011, + 0x00000041,0x00020011,0x00001074,0x00020011,0x00001075,0x00020011,0x00001151,0x00020011, + 0x000014e1,0x00020011,0x00001537,0x00020011,0x00001538,0x00020011,0x0000153f,0x00020011, + 0x00001786,0x0005000a,0x5f565053,0x5f545845,0x616f6c66,0x00003874,0x0008000a,0x5f565053, + 0x5f52484b,0x706f6f63,0x74617265,0x5f657669,0x7274616d,0x00007869,0x0008000a,0x5f565053, + 0x635f564e,0x65706f6f,0x69746172,0x6d5f6576,0x69727461,0x00003278,0x0008000a,0x5f565053, + 0x745f564e,0x6f736e65,0x64615f72,0x73657264,0x676e6973,0x00000000,0x0006000b,0x00000001, + 0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000003,0x001f000f, + 0x00000005,0x00000004,0x6e69616d,0x00000000,0x000001ec,0x00000223,0x00000292,0x000002b3, + 0x000002ba,0x000002c5,0x000002dd,0x000002eb,0x00000303,0x00000310,0x0000031c,0x00000331, + 0x0000033d,0x00000358,0x0000035d,0x00000387,0x00000419,0x00000473,0x0000048e,0x00000498, + 0x000004d9,0x00000543,0x00000978,0x00000a4d,0x00000aef,0x00000baa,0x00060010,0x00000004, + 0x00000011,0x00000100,0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc,0x00090004, + 0x455f4c47,0x635f5458,0x72746e6f,0x665f6c6f,0x5f776f6c,0x72747461,0x74756269,0x00007365, + 0x00060004,0x455f4c47,0x665f5458,0x74616f6c,0x6d34655f,0x00000033,0x00080004,0x455f4c47, + 0x735f5458,0x65646168,0x36315f72,0x5f746962,0x726f7473,0x00656761,0x00080004,0x455f4c47, + 0x735f5458,0x65646168,0x62385f72,0x735f7469,0x61726f74,0x00006567,0x000b0004,0x455f4c47, + 0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63, + 0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c, + 0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63, + 0x69645f65,0x74636572,0x00657669,0x00080004,0x4b5f4c47,0x635f5248,0x65706f6f,0x69746172, + 0x6d5f6576,0x69727461,0x00000078,0x00090004,0x4b5f4c47,0x6d5f5248,0x726f6d65,0x63735f79, + 0x5f65706f,0x616d6573,0x6369746e,0x00000073,0x00090004,0x4b5f4c47,0x735f5248,0x65646168, + 0x75735f72,0x6f726762,0x625f7075,0x63697361,0x00000000,0x00090004,0x4b5f4c47,0x735f5248, + 0x65646168,0x75735f72,0x6f726762,0x735f7075,0x66667568,0x0000656c,0x00080004,0x4e5f4c47, + 0x6f635f56,0x7265706f,0x76697461,0x616d5f65,0x78697274,0x00000032,0x00040005,0x00000004, + 0x6e69616d,0x00000000,0x00070005,0x0000000c,0x336d3465,0x61507748,0x76287269,0x32363166, + 0x0000003b,0x00040005,0x0000000b,0x756c6176,0x00000065,0x00060005,0x00000010,0x756c6973, + 0x72696150,0x31667628,0x003b3236,0x00040005,0x0000000f,0x756c6176,0x00000065,0x00070005, + 0x00000013,0x336d3465,0x72696150,0x74736146,0x31667628,0x003b3236,0x00040005,0x00000012, + 0x756c6176,0x00000065,0x00060005,0x00000019,0x656c6974,0x6b6f5464,0x75286e65,0x00003b31, + 0x00040005,0x00000018,0x656b6f74,0x0000006e,0x00070005,0x0000001c,0x57707865,0x68676965, + 0x69615074,0x31752872,0x0000003b,0x00050005,0x0000001b,0x726f6373,0x74694265,0x00000073, + 0x000a0005,0x00000026,0x756c6973,0x72696150,0x28323373,0x31363166,0x3c3e333c,0x3c3e3631, + 0x3c3e3233,0x003b3e32,0x00030005,0x00000025,0x0000006d,0x000c0005,0x0000002d,0x6c616373, + 0x69615065,0x66287372,0x3c313631,0x313c3e33,0x333c3e36,0x323c3e32,0x66763b3e,0x5b323631, + 0x003b5d34,0x00030005,0x0000002b,0x0000006d,0x00030005,0x0000002c,0x00787561,0x00080005, + 0x00000033,0x546e616e,0x72655a6f,0x3175286f,0x3b31753b,0x31363166,0x0000003b,0x00030005, + 0x00000030,0x00776f72,0x00030005,0x00000031,0x006c6f63,0x00040005,0x00000032,0x756c6176, + 0x00000065,0x000e0005,0x0000003a,0x6d726f6e,0x7a696c61,0x506e4965,0x6563616c,0x36316628, + 0x3e333c31,0x3e36313c,0x3e32333c,0x3b3e323c,0x31363166,0x3b31623b,0x00000000,0x00030005, + 0x00000037,0x0000006d,0x00040005,0x00000038,0x6c616373,0x00000065,0x00050005,0x00000039, + 0x6c707061,0x61635379,0x0000656c,0x00100005,0x00000046,0x6c627570,0x52687369,0x2873776f, + 0x31363166,0x3c3e333c,0x3c3e3631,0x3c3e3233,0x753b3e32,0x31753b31,0x3b31753b,0x693b3175, + 0x31693b31,0x3b31623b,0x00000000,0x00030005,0x0000003e,0x0000006d,0x00050005,0x0000003f, + 0x746f6c73,0x65736142,0x00000000,0x00040005,0x00000040,0x42776f72,0x00657361,0x00030005, + 0x00000041,0x00000074,0x00030005,0x00000042,0x00000067,0x00040005,0x00000043,0x646e6977, + 0x0058776f,0x00040005,0x00000044,0x646e6977,0x0059776f,0x00050005,0x00000045,0x746f6c73, + 0x69746341,0x00006576,0x00110005,0x00000050,0x6c627570,0x54687369,0x736e6172,0x65736f70, + 0x31662864,0x333c3136,0x36313c3e,0x32333c3e,0x3e323c3e,0x3b31753b,0x753b3175,0x31753b31, + 0x3b31693b,0x623b3169,0x00003b31,0x00030005,0x00000048,0x0000006d,0x00040005,0x00000049, + 0x65736162,0x00000000,0x00040005,0x0000004a,0x42776f72,0x00657361,0x00030005,0x0000004b, + 0x00000074,0x00030005,0x0000004c,0x00000067,0x00040005,0x0000004d,0x646e6977,0x0058776f, + 0x00040005,0x0000004e,0x646e6977,0x0059776f,0x00050005,0x0000004f,0x746f6c73,0x69746341, + 0x00006576,0x00040005,0x00000052,0x61656c63,0x0000006e,0x00050005,0x0000005d,0x766e6f63, + 0x65747265,0x00000064,0x00040005,0x00000063,0x65646f63,0x00000073,0x00040005,0x00000075, + 0x6e756f62,0x00646564,0x00040005,0x0000007c,0x656e6e69,0x00000072,0x00050005,0x00000084, + 0x796c6f70,0x696d6f6e,0x00006c61,0x00040005,0x0000008a,0x75736572,0x0000746c,0x00050005, + 0x00000091,0x766e6f63,0x65747265,0x00000064,0x00040005,0x00000094,0x65646f63,0x00000073, + 0x00030005,0x000000a2,0x00000078,0x00030005,0x000000a6,0x00000079,0x00050005,0x000000bc, + 0x69666661,0x3233656e,0x00000000,0x00040005,0x000000c5,0x69666661,0x0000656e,0x00030005, + 0x000000d7,0x00000069,0x00030005,0x000000df,0x00000076,0x00040005,0x000000eb,0x61726170, + 0x0000006d,0x00030005,0x000000fb,0x00000068,0x00030005,0x00000103,0x0000006a,0x00030005, + 0x0000010b,0x00000076,0x00050005,0x0000011e,0x65646e69,0x6c626178,0x00000065,0x00030005, + 0x0000013b,0x00000068,0x00030005,0x00000143,0x00000062,0x00030005,0x00000146,0x00003070, + 0x00030005,0x00000150,0x00003170,0x00030005,0x0000015a,0x00003270,0x00030005,0x00000164, + 0x00003370,0x00030005,0x0000016f,0x00307368,0x00030005,0x00000173,0x00003072,0x00030005, + 0x00000178,0x00317368,0x00030005,0x0000017c,0x00003172,0x00030005,0x00000181,0x00003873, + 0x00030005,0x00000185,0x006f3873,0x00030005,0x0000018a,0x00003473,0x00030005,0x0000018e, + 0x006f3473,0x00030005,0x00000193,0x00003273,0x00030005,0x00000197,0x00003173,0x00040005, + 0x0000019d,0x6d726f6e,0x00000000,0x00030005,0x000001a2,0x00000069,0x00030005,0x000001aa, + 0x0000006e,0x00040005,0x000001b2,0x756c6176,0x00000065,0x00030005,0x000001b6,0x0000736e, + 0x00030005,0x000001c6,0x00000068,0x00040005,0x000001ce,0x656b6f74,0x0000006e,0x00030005, + 0x000001d4,0x00000078,0x00030005,0x000001d9,0x00000079,0x00040005,0x000001df,0x696c6176, + 0x00000064,0x00040005,0x000001ea,0x68737550,0x00000000,0x00050006,0x000001ea,0x00000000, + 0x74646977,0x00000068,0x00050006,0x000001ea,0x00000001,0x67696568,0x00007468,0x00050006, + 0x000001ea,0x00000002,0x66696873,0x00005874,0x00050006,0x000001ea,0x00000003,0x66696873, + 0x00005974,0x00060006,0x000001ea,0x00000004,0x646e6977,0x5873776f,0x00000000,0x00060006, + 0x000001ea,0x00000005,0x646e6977,0x6f43776f,0x00746e75,0x00060006,0x000001ea,0x00000006, + 0x756f7267,0x756f4370,0x0000746e,0x00080006,0x000001ea,0x00000007,0x46787561,0x61486e66, + 0x664f666c,0x74657366,0x00000000,0x00080006,0x000001ea,0x00000008,0x41787561,0x486e7474, + 0x4f666c61,0x65736666,0x00000074,0x00070006,0x000001ea,0x00000009,0x6c616373,0x726f5765, + 0x66664f64,0x00746573,0x00080006,0x000001ea,0x0000000a,0x49787561,0x7475706e,0x6c616353, + 0x6c614865,0x00000066,0x00080006,0x000001ea,0x0000000b,0x41787561,0x74706164,0x63537265, + 0x48656c61,0x00666c61,0x00060006,0x000001ea,0x0000000c,0x57776f6c,0x68746469,0x00000000, + 0x00030005,0x000001ec,0x00006370,0x00030005,0x000001fb,0x00776f72,0x00040005,0x000001fc, + 0x61726170,0x0000006d,0x00030005,0x00000202,0x0000006a,0x00040005,0x0000020b,0x65646f63, + 0x00000073,0x00050005,0x00000211,0x65646e69,0x6c626178,0x00000065,0x00050005,0x0000021a, + 0x65646e69,0x6c626178,0x00000065,0x00040005,0x0000021e,0x61726170,0x0000006d,0x00040005, + 0x00000223,0x3631766b,0x00000000,0x00030005,0x00000233,0x00000068,0x00040005,0x0000023b, + 0x656b6f74,0x0000006e,0x00030005,0x00000240,0x00000078,0x00030005,0x00000245,0x00000079, + 0x00040005,0x0000024a,0x696c6176,0x00000064,0x00040005,0x00000261,0x756c6f63,0x00006e6d, + 0x00040005,0x00000262,0x61726170,0x0000006d,0x00030005,0x00000266,0x0000006a,0x00030005, + 0x0000026e,0x00000076,0x00050005,0x00000274,0x65646e69,0x6c626178,0x00000065,0x00050005, + 0x0000027d,0x65646e69,0x6c626178,0x00000065,0x00040005,0x00000281,0x65646f63,0x00000073, + 0x00040005,0x0000028a,0x61726170,0x0000006d,0x00030005,0x00000292,0x00387476,0x00040005, + 0x000002b1,0x746f6c73,0x00000000,0x00060005,0x000002b3,0x535f6c67,0x72676275,0x4970756f, + 0x00000044,0x00030005,0x000002b6,0x00000071,0x00040005,0x000002b9,0x656e616c,0x00000000, + 0x00080005,0x000002ba,0x535f6c67,0x72676275,0x4970756f,0x636f766e,0x6f697461,0x0044496e, + 0x00030005,0x000002bc,0x00000067,0x00030005,0x000002bf,0x00000074,0x00030005,0x000002c2, + 0x00000069,0x00080005,0x000002c5,0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163,0x44496e6f, + 0x00000000,0x00030005,0x000002d0,0x00747364,0x00040005,0x000002d9,0x64726f77,0x00000000, + 0x00030005,0x000002db,0x00003157,0x00040006,0x000002db,0x00000000,0x00763177,0x00030005, + 0x000002dd,0x00000000,0x00030005,0x000002e9,0x00003257,0x00040006,0x000002e9,0x00000000, + 0x00763277,0x00030005,0x000002eb,0x00000000,0x00040005,0x00000301,0x766b7157,0x00000000, + 0x00050006,0x00000301,0x00000000,0x766b7177,0x00000076,0x00030005,0x00000303,0x00000000, + 0x00040005,0x0000030e,0x6f727057,0x0000006a,0x00050006,0x0000030e,0x00000000,0x6f727077, + 0x0000766a,0x00030005,0x00000310,0x00000000,0x00030005,0x0000031c,0x00737477,0x00030005, + 0x00000323,0x00000069,0x00040005,0x00000331,0x6f697270,0x00005372,0x00040005,0x0000033b, + 0x6f697250,0x00000072,0x00050006,0x0000033b,0x00000000,0x6f697270,0x00000072,0x00030005, + 0x0000033d,0x00000000,0x00040005,0x00000346,0x47414c46,0x00000053,0x00030005,0x0000034c, + 0x00000069,0x00040005,0x00000358,0x36316677,0x00000073,0x00050005,0x0000035b,0x67696557, + 0x46737468,0x00003631,0x00050006,0x0000035b,0x00000000,0x36316677,0x00000000,0x00030005, + 0x0000035d,0x00000000,0x00030005,0x00000365,0x00524353,0x00030005,0x00000368,0x0000504b, + 0x00030005,0x0000036d,0x00005456,0x00040005,0x00000371,0x42776f72,0x00657361,0x00030005, + 0x00000374,0x0000006a,0x00040005,0x0000037c,0x756c6f63,0x00006e6d,0x00040005,0x00000382, + 0x46787561,0x00006e66,0x00030005,0x00000385,0x00787541,0x00050006,0x00000385,0x00000000, + 0x31787561,0x00000036,0x00030005,0x00000387,0x00000000,0x00040005,0x0000039b,0x41787561, + 0x006e7474,0x00050005,0x000003b1,0x6c616373,0x74694265,0x00000073,0x00040005,0x000003c2, + 0x6c616373,0x00000065,0x00040005,0x000003c6,0x6f52646c,0x00000077,0x00040005,0x000003c9, + 0x6f57646c,0x00006472,0x00030005,0x000003d1,0x00000069,0x00030005,0x000003d9,0x00000063, + 0x00040005,0x000003e1,0x6e656c62,0x00004164,0x00040005,0x000003f6,0x6e656c62,0x00004264, + 0x00030005,0x00000414,0x00007778,0x00030005,0x00000416,0x00306b73,0x00030005,0x00000417, + 0x00316b73,0x00040005,0x00000418,0x646e6977,0x0030776f,0x00060005,0x00000419,0x575f6c67, + 0x476b726f,0x70756f72,0x00004449,0x00040005,0x00000426,0x656b6f74,0x0000006e,0x00030005, + 0x0000042a,0x00003078,0x00030005,0x0000043b,0x00003079,0x00040005,0x00000462,0x65786970, + 0x0000006c,0x00050005,0x00000471,0x74616546,0x73657275,0x00000000,0x00050006,0x00000471, + 0x00000000,0x74616566,0x00000034,0x00030005,0x00000473,0x00000000,0x00040005,0x0000048c, + 0x74617453,0x00000065,0x00050006,0x0000048c,0x00000000,0x74617473,0x00003465,0x00030005, + 0x0000048e,0x00000000,0x00040005,0x00000496,0x52776f4c,0x00007365,0x00050006,0x00000496, + 0x00000000,0x72776f6c,0x00347365,0x00030005,0x00000498,0x00000000,0x00030005,0x000004b5, + 0x00776f6c,0x00040005,0x000004d7,0x70696b53,0x00000000,0x00050006,0x000004d7,0x00000000, + 0x70696b73,0x00000034,0x00030005,0x000004d9,0x00000000,0x00040005,0x000004e9,0x72696170, + 0x00000000,0x00040005,0x000004f6,0x646e6977,0x0000776f,0x00050005,0x000004fb,0x746f6c73, + 0x69746341,0x00006576,0x00060005,0x00000500,0x6d616c63,0x57646570,0x6f646e69,0x00000077, + 0x00040005,0x00000504,0x646e6977,0x0058776f,0x00040005,0x0000050f,0x646e6977,0x0059776f, + 0x00040005,0x0000051c,0x67616d69,0x00000065,0x00040005,0x00000529,0x656c6974,0x00000000, + 0x00030005,0x00000538,0x00000077,0x00050005,0x00000543,0x61726373,0x33686374,0x00000032, + 0x00030005,0x00000568,0x00006166,0x00030005,0x0000056e,0x00006266,0x00040005,0x00000571, + 0x70616461,0x00646574,0x00040005,0x00000577,0x696e4963,0x00000074,0x00060005,0x00000579, + 0x70616461,0x43646574,0x6e61656c,0x00000000,0x00030005,0x0000057e,0x00000078,0x00030005, + 0x00000586,0x00000069,0x00040005,0x0000058e,0x61506461,0x00007269,0x00030005,0x00000599, + 0x00004173,0x00030005,0x0000059e,0x00006461,0x00050005,0x000005b0,0x6a6f7270,0x65746365, + 0x00000064,0x00040005,0x000005c0,0x756c6176,0x00000065,0x00050005,0x000005c5,0x57776172, + 0x7364726f,0x00000000,0x00040005,0x000005cb,0x61507075,0x00007269,0x00030005,0x000005d5, + 0x00004273,0x00030005,0x000005da,0x00007075,0x00050005,0x000005e8,0x75706e69,0x6c615674, + 0x00006575,0x00040005,0x000005ec,0x756c6176,0x00000065,0x00030005,0x000005f7,0x00000077, + 0x00030005,0x00000600,0x00000069,0x00030005,0x00000614,0x00000077,0x00030005,0x0000061c, + 0x00000069,0x00040005,0x0000062c,0x61726170,0x0000006d,0x00040005,0x00000635,0x61726170, + 0x0000006d,0x00030005,0x00000641,0x00000077,0x00030005,0x0000065f,0x00006f6c,0x00030005, + 0x00000661,0x00006968,0x00030005,0x00000667,0x00000069,0x00040005,0x0000066f,0x65646f63, + 0x00000073,0x00040005,0x00000679,0x766c6168,0x00007365,0x00030005,0x0000069b,0x00000077, + 0x00040005,0x000006cf,0x61726170,0x0000006d,0x00040005,0x000006d3,0x646e6977,0x004e776f, + 0x00040005,0x000006e1,0x656b6f74,0x0000006e,0x00030005,0x000006e5,0x00004e78,0x00030005, + 0x000006f4,0x00004e79,0x00040005,0x0000071a,0x65786970,0x0000006c,0x00030005,0x0000075d, + 0x00776f6c,0x00040005,0x0000078d,0x416e6666,0x00006363,0x00030005,0x0000078f,0x00007171, + 0x00030005,0x00000799,0x00003177,0x00040005,0x000007a4,0x64646968,0x00006e65,0x00040005, + 0x000007a9,0x61726170,0x0000006d,0x00050005,0x000007ad,0x64646968,0x34456e65,0x00000000, + 0x00030005,0x000007b0,0x00003277,0x00050005,0x000007bf,0x436e6666,0x6e61656c,0x00000000, + 0x00040005,0x000007c2,0x516e6666,0x00000000,0x00030005,0x000007c5,0x00007177,0x00030005, + 0x000007c8,0x00006b77,0x00030005,0x000007cc,0x00007677,0x00030005,0x000007d0,0x00006171, + 0x00030005,0x000007d1,0x0000616b,0x00030005,0x000007d2,0x00006176,0x00040005,0x000007e1, + 0x61726170,0x0000006d,0x00040005,0x000007e7,0x61726170,0x0000006d,0x00030005,0x000007eb, + 0x0000716d,0x00030005,0x00000802,0x0000706b,0x00030005,0x00000808,0x00000073,0x00040005, + 0x00000813,0x63634177,0x00000000,0x00030005,0x00000815,0x00000068,0x00030005,0x0000081d, + 0x0000006d,0x00030005,0x00000825,0x00000065,0x00040005,0x00000838,0x61726170,0x0000006d, + 0x00030005,0x0000083d,0x0000006a,0x00040005,0x00000845,0x6d757362,0x00000000,0x00030005, + 0x00000852,0x00007062,0x00030005,0x00000858,0x00313074,0x00040005,0x0000085e,0x32313074, + 0x00000000,0x00030005,0x00000863,0x00007074,0x00040005,0x00000868,0x69427074,0x00007374, + 0x00040005,0x0000086b,0x64617571,0x00000000,0x00030005,0x0000086f,0x00003074,0x00030005, + 0x00000874,0x00003174,0x00030005,0x0000087a,0x00003274,0x00030005,0x00000880,0x00003374, + 0x00030005,0x00000886,0x00313065,0x00040005,0x0000088c,0x32313065,0x00000000,0x00040005, + 0x00000891,0x6e657665,0x00000000,0x00030005,0x00000896,0x0031306f,0x00040005,0x0000089c, + 0x3231306f,0x00000000,0x00030005,0x000008a1,0x0064646f,0x00040005,0x000008a6,0x61746f74, + 0x0000006c,0x00050005,0x000008aa,0x69636572,0x636f7270,0x00006c61,0x00030005,0x000008b0, + 0x0000006d,0x00030005,0x000008b8,0x00000077,0x00030005,0x000008d6,0x00000070,0x00030005, + 0x000008db,0x00007076,0x00030005,0x000008df,0x0000006f,0x00040005,0x000008e4,0x656c436f, + 0x00006e61,0x00050005,0x000008e7,0x65747461,0x6465646e,0x00000000,0x00040005,0x000008ea, + 0x6a6f7270,0x00000043,0x00040005,0x000008ed,0x61726170,0x0000006d,0x00040005,0x000008f1, + 0x6f727077,0x0000006a,0x00040005,0x000008f4,0x75736572,0x0000746c,0x00050005,0x000008f9, + 0x656c6974,0x65736142,0x00000000,0x00030005,0x000008ff,0x00000068,0x00030005,0x00000907, + 0x0000006a,0x00030005,0x00000931,0x00000069,0x00030005,0x00000939,0x00000077,0x00030005, + 0x0000093e,0x00000072,0x00030005,0x00000941,0x00007763,0x00030005,0x00000944,0x006b6f74, + 0x00030005,0x00000948,0x00000078,0x00030005,0x0000094e,0x00000079,0x00040005,0x00000954, + 0x65736162,0x00000000,0x00040005,0x00000976,0x4674754f,0x00003631,0x00050006,0x00000976, + 0x00000000,0x3174756f,0x00387836,0x00030005,0x00000978,0x00000000,0x00030005,0x0000099b, + 0x00000068,0x00030005,0x000009a3,0x0000006a,0x00030005,0x000009cd,0x00000069,0x00040005, + 0x000009d0,0x72696170,0x00000030,0x00030005,0x000009d4,0x00007873,0x00030005,0x000009da, + 0x00007973,0x00040005,0x000009e0,0x65646f63,0x00000073,0x00030005,0x000009e1,0x00000070, + 0x00040005,0x000009e9,0x64726f77,0x00000000,0x00030005,0x000009ed,0x00706f74,0x00040005, + 0x00000a04,0x74746f62,0x00006d6f,0x00030005,0x00000a1c,0x006d7573,0x00040005,0x00000a20, + 0x756c6176,0x00000065,0x00040005,0x00000a24,0x61726170,0x0000006d,0x00050005,0x00000a4b, + 0x5074754f,0x656c6f6f,0x00000064,0x00060006,0x00000a4b,0x00000000,0x6c6f6f70,0x32336465, + 0x00000000,0x00030005,0x00000a4d,0x00000000,0x00030005,0x00000a63,0x00000068,0x00030005, + 0x00000a6b,0x0000006a,0x00030005,0x00000a95,0x00003068,0x00030005,0x00000a99,0x00003168, + 0x00030005,0x00000aa2,0x00306268,0x00030005,0x00000aa5,0x00316268,0x00040005,0x00000aaa, + 0x64616568,0x00000000,0x00030005,0x00000ab8,0x00000068,0x00030005,0x00000ac0,0x006b6f74, + 0x00030005,0x00000ac7,0x00000078,0x00030005,0x00000acd,0x00000079,0x00040005,0x00000aed, + 0x4874754f,0x00646165,0x00050006,0x00000aed,0x00000000,0x64616568,0x00000032,0x00030005, + 0x00000aef,0x00000000,0x00030005,0x00000b0f,0x0000006a,0x00030005,0x00000b17,0x00003076, + 0x00030005,0x00000b22,0x00003176,0x00030005,0x00000b2f,0x00003063,0x00040005,0x00000b34, + 0x61726170,0x0000006d,0x00030005,0x00000b37,0x00003163,0x00040005,0x00000b3c,0x61726170, + 0x0000006d,0x00030005,0x00000b3f,0x0064646f,0x00040005,0x00000b43,0x76636572,0x00000000, + 0x00040005,0x00000b49,0x64726f77,0x00000000,0x00030005,0x00000b58,0x00776f72,0x00030005, + 0x00000b70,0x00000072,0x00030005,0x00000b73,0x00007763,0x00030005,0x00000b76,0x006b6f74, + 0x00030005,0x00000b7a,0x00000078,0x00030005,0x00000b80,0x00000079,0x00040005,0x00000b86, + 0x65736162,0x00000000,0x00040005,0x00000ba8,0x4574754f,0x00000034,0x00050006,0x00000ba8, + 0x00000000,0x3874756f,0x00363178,0x00030005,0x00000baa,0x00000000,0x00030047,0x0000005f, + 0x00001078,0x00030047,0x0000008d,0x0000002a,0x00030047,0x00000093,0x00001078,0x00030047, + 0x00000121,0x0000002a,0x00030047,0x00000172,0x0000002a,0x00030047,0x0000017b,0x0000002a, + 0x00030047,0x00000184,0x0000002a,0x00030047,0x0000018d,0x0000002a,0x00030047,0x00000196, + 0x0000002a,0x00030047,0x0000019c,0x0000002a,0x00030047,0x000001b1,0x0000002a,0x00030047, + 0x000001b8,0x0000002a,0x00030047,0x000001ea,0x00000002,0x00050048,0x000001ea,0x00000000, + 0x00000023,0x00000000,0x00050048,0x000001ea,0x00000001,0x00000023,0x00000004,0x00050048, + 0x000001ea,0x00000002,0x00000023,0x00000008,0x00050048,0x000001ea,0x00000003,0x00000023, + 0x0000000c,0x00050048,0x000001ea,0x00000004,0x00000023,0x00000010,0x00050048,0x000001ea, + 0x00000005,0x00000023,0x00000014,0x00050048,0x000001ea,0x00000006,0x00000023,0x00000018, + 0x00050048,0x000001ea,0x00000007,0x00000023,0x0000001c,0x00050048,0x000001ea,0x00000008, + 0x00000023,0x00000020,0x00050048,0x000001ea,0x00000009,0x00000023,0x00000024,0x00050048, + 0x000001ea,0x0000000a,0x00000023,0x00000028,0x00050048,0x000001ea,0x0000000b,0x00000023, + 0x0000002c,0x00050048,0x000001ea,0x0000000c,0x00000023,0x00000030,0x00040047,0x000002b3, + 0x0000000b,0x00000028,0x00030047,0x000002ba,0x00000000,0x00040047,0x000002ba,0x0000000b, + 0x00000029,0x00030047,0x000002bb,0x00000000,0x00040047,0x000002c5,0x0000000b,0x0000001b, + 0x00040047,0x000002da,0x00000006,0x00000010,0x00030047,0x000002db,0x00000002,0x00040048, + 0x000002db,0x00000000,0x00000018,0x00050048,0x000002db,0x00000000,0x00000023,0x00000000, + 0x00030047,0x000002dd,0x00000018,0x00040047,0x000002dd,0x00000021,0x00000002,0x00040047, + 0x000002dd,0x00000022,0x00000000,0x00040047,0x000002e8,0x00000006,0x00000010,0x00030047, + 0x000002e9,0x00000002,0x00040048,0x000002e9,0x00000000,0x00000018,0x00050048,0x000002e9, + 0x00000000,0x00000023,0x00000000,0x00030047,0x000002eb,0x00000018,0x00040047,0x000002eb, + 0x00000021,0x00000003,0x00040047,0x000002eb,0x00000022,0x00000000,0x00040047,0x00000300, + 0x00000006,0x00000010,0x00030047,0x00000301,0x00000002,0x00040048,0x00000301,0x00000000, + 0x00000018,0x00050048,0x00000301,0x00000000,0x00000023,0x00000000,0x00030047,0x00000303, + 0x00000018,0x00040047,0x00000303,0x00000021,0x00000004,0x00040047,0x00000303,0x00000022, + 0x00000000,0x00040047,0x0000030d,0x00000006,0x00000010,0x00030047,0x0000030e,0x00000002, + 0x00040048,0x0000030e,0x00000000,0x00000018,0x00050048,0x0000030e,0x00000000,0x00000023, + 0x00000000,0x00030047,0x00000310,0x00000018,0x00040047,0x00000310,0x00000021,0x00000005, + 0x00040047,0x00000310,0x00000022,0x00000000,0x00040047,0x0000033a,0x00000006,0x00000002, + 0x00030047,0x0000033b,0x00000002,0x00040048,0x0000033b,0x00000000,0x00000018,0x00050048, + 0x0000033b,0x00000000,0x00000023,0x00000000,0x00030047,0x0000033d,0x00000018,0x00040047, + 0x0000033d,0x00000021,0x00000007,0x00040047,0x0000033d,0x00000022,0x00000000,0x00040047, + 0x00000346,0x00000001,0x00000000,0x00040047,0x0000035a,0x00000006,0x00000002,0x00030047, + 0x0000035b,0x00000002,0x00040048,0x0000035b,0x00000000,0x00000018,0x00050048,0x0000035b, + 0x00000000,0x00000023,0x00000000,0x00030047,0x0000035d,0x00000018,0x00040047,0x0000035d, + 0x00000021,0x0000000b,0x00040047,0x0000035d,0x00000022,0x00000000,0x00040047,0x00000384, + 0x00000006,0x00000002,0x00030047,0x00000385,0x00000002,0x00040048,0x00000385,0x00000000, + 0x00000018,0x00050048,0x00000385,0x00000000,0x00000023,0x00000000,0x00030047,0x00000387, + 0x00000018,0x00040047,0x00000387,0x00000021,0x00000006,0x00040047,0x00000387,0x00000022, + 0x00000000,0x00040047,0x00000419,0x0000000b,0x0000001a,0x00040047,0x00000470,0x00000006, + 0x00000010,0x00030047,0x00000471,0x00000002,0x00040048,0x00000471,0x00000000,0x00000018, + 0x00050048,0x00000471,0x00000000,0x00000023,0x00000000,0x00030047,0x00000473,0x00000018, + 0x00040047,0x00000473,0x00000021,0x00000000,0x00040047,0x00000473,0x00000022,0x00000000, + 0x00040047,0x0000048b,0x00000006,0x00000010,0x00030047,0x0000048c,0x00000002,0x00040048, + 0x0000048c,0x00000000,0x00000018,0x00050048,0x0000048c,0x00000000,0x00000023,0x00000000, + 0x00030047,0x0000048e,0x00000018,0x00040047,0x0000048e,0x00000021,0x00000000,0x00040047, + 0x0000048e,0x00000022,0x00000000,0x00040047,0x00000495,0x00000006,0x00000010,0x00030047, + 0x00000496,0x00000002,0x00040048,0x00000496,0x00000000,0x00000018,0x00050048,0x00000496, + 0x00000000,0x00000023,0x00000000,0x00030047,0x00000498,0x00000018,0x00040047,0x00000498, + 0x00000021,0x00000001,0x00040047,0x00000498,0x00000022,0x00000000,0x00040047,0x000004d6, + 0x00000006,0x00000010,0x00030047,0x000004d7,0x00000002,0x00040048,0x000004d7,0x00000000, + 0x00000018,0x00050048,0x000004d7,0x00000000,0x00000023,0x00000000,0x00030047,0x000004d9, + 0x00000018,0x00040047,0x000004d9,0x00000021,0x00000001,0x00040047,0x000004d9,0x00000022, + 0x00000000,0x00030047,0x00000595,0x0000002a,0x00030047,0x000005d2,0x0000002a,0x00030047, + 0x000005eb,0x0000002a,0x00030047,0x000005f6,0x0000002a,0x00030047,0x00000676,0x0000002a, + 0x00030047,0x00000687,0x0000002a,0x00030047,0x00000851,0x0000002a,0x00030047,0x0000085d, + 0x0000002a,0x00030047,0x00000862,0x0000002a,0x00030047,0x00000867,0x0000002a,0x00030047, + 0x00000877,0x0000002a,0x00030047,0x0000087d,0x0000002a,0x00030047,0x00000883,0x0000002a, + 0x00030047,0x0000088b,0x0000002a,0x00030047,0x00000890,0x0000002a,0x00030047,0x00000895, + 0x0000002a,0x00030047,0x0000089b,0x0000002a,0x00030047,0x000008a0,0x0000002a,0x00030047, + 0x000008a5,0x0000002a,0x00030047,0x000008a9,0x0000002a,0x00030047,0x000008ae,0x0000002a, + 0x00030047,0x000008be,0x0000002a,0x00040047,0x00000975,0x00000006,0x00000010,0x00030047, + 0x00000976,0x00000002,0x00040048,0x00000976,0x00000000,0x00000019,0x00050048,0x00000976, + 0x00000000,0x00000023,0x00000000,0x00030047,0x00000978,0x00000019,0x00040047,0x00000978, + 0x00000021,0x00000009,0x00040047,0x00000978,0x00000022,0x00000000,0x00030047,0x00000a03, + 0x0000002a,0x00030047,0x00000a1b,0x0000002a,0x00030047,0x00000a1f,0x0000002a,0x00030047, + 0x00000a23,0x0000002a,0x00040047,0x00000a4a,0x00000006,0x00000004,0x00030047,0x00000a4b, + 0x00000002,0x00040048,0x00000a4b,0x00000000,0x00000019,0x00050048,0x00000a4b,0x00000000, + 0x00000023,0x00000000,0x00030047,0x00000a4d,0x00000019,0x00040047,0x00000a4d,0x00000021, + 0x00000009,0x00040047,0x00000a4d,0x00000022,0x00000000,0x00040047,0x00000aec,0x00000006, + 0x00000008,0x00030047,0x00000aed,0x00000002,0x00040048,0x00000aed,0x00000000,0x00000019, + 0x00050048,0x00000aed,0x00000000,0x00000023,0x00000000,0x00030047,0x00000aef,0x00000019, + 0x00040047,0x00000aef,0x00000021,0x00000009,0x00040047,0x00000aef,0x00000022,0x00000000, + 0x00040047,0x00000ba7,0x00000006,0x00000010,0x00030047,0x00000ba8,0x00000002,0x00040048, + 0x00000ba8,0x00000000,0x00000019,0x00050048,0x00000ba8,0x00000000,0x00000023,0x00000000, + 0x00030047,0x00000baa,0x00000019,0x00040047,0x00000baa,0x00000021,0x00000008,0x00040047, + 0x00000baa,0x00000022,0x00000000,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002, + 0x00030016,0x00000006,0x00000010,0x00040017,0x00000007,0x00000006,0x00000002,0x00040020, + 0x00000008,0x00000007,0x00000007,0x00040015,0x00000009,0x00000010,0x00000000,0x00040021, + 0x0000000a,0x00000009,0x00000008,0x00040021,0x0000000e,0x00000007,0x00000008,0x00040015, + 0x00000015,0x00000020,0x00000000,0x00040020,0x00000016,0x00000007,0x00000015,0x00040021, + 0x00000017,0x00000015,0x00000016,0x0004002b,0x00000015,0x0000001e,0x00000003,0x0004002b, + 0x00000015,0x0000001f,0x00000010,0x0004002b,0x00000015,0x00000020,0x00000020,0x0004002b, + 0x00000015,0x00000021,0x00000002,0x00071168,0x00000022,0x00000006,0x0000001e,0x0000001f, + 0x00000020,0x00000021,0x00040020,0x00000023,0x00000007,0x00000022,0x00040021,0x00000024, + 0x00000002,0x00000023,0x0004002b,0x00000015,0x00000028,0x00000004,0x0004001c,0x00000029, + 0x00000007,0x00000028,0x00050021,0x0000002a,0x00000002,0x00000023,0x00000029,0x00060021, + 0x0000002f,0x00000006,0x00000015,0x00000015,0x00000006,0x00020014,0x00000035,0x00060021, + 0x00000036,0x00000002,0x00000023,0x00000006,0x00000035,0x00040015,0x0000003c,0x00000020, + 0x00000001,0x000b0021,0x0000003d,0x00000002,0x00000022,0x00000015,0x00000015,0x00000015, + 0x00000015,0x0000003c,0x0000003c,0x00000035,0x0004002b,0x00000006,0x00000054,0x00000000, + 0x0005002c,0x00000007,0x00000055,0x00000054,0x00000054,0x00040017,0x00000057,0x00000035, + 0x00000002,0x00040016,0x0000005a,0x00000008,0x00001076,0x00040017,0x0000005b,0x0000005a, + 0x00000002,0x00040020,0x0000005c,0x00000007,0x0000005b,0x00040015,0x00000060,0x00000008, + 0x00000000,0x00040017,0x00000061,0x00000060,0x00000002,0x00040020,0x00000062,0x00000007, + 0x00000061,0x0004002b,0x00000015,0x00000066,0x00000000,0x00040020,0x00000067,0x00000007, + 0x00000060,0x0004002b,0x00000015,0x0000006b,0x00000001,0x0004002b,0x00000015,0x0000006f, + 0x00000008,0x0004002b,0x00000006,0x00000077,0x0000c400,0x0005002c,0x00000007,0x00000078, + 0x00000077,0x00000077,0x0004002b,0x00000006,0x00000079,0x00004400,0x0005002c,0x00000007, + 0x0000007a,0x00000079,0x00000079,0x0004002b,0x00000006,0x0000007d,0x0000ab28,0x0005002c, + 0x00000007,0x0000007e,0x0000007d,0x0000007d,0x0004002b,0x00000006,0x00000081,0x00003728, + 0x0005002c,0x00000007,0x00000082,0x00000081,0x00000081,0x0004002b,0x00000006,0x00000087, + 0x00003b28,0x0005002c,0x00000007,0x00000088,0x00000087,0x00000087,0x0004002b,0x00000015, + 0x000000a4,0x00000007,0x00030016,0x000000b9,0x00000020,0x00040017,0x000000ba,0x000000b9, + 0x00000002,0x00040020,0x000000bb,0x00000007,0x000000ba,0x0004002b,0x000000b9,0x000000c0, + 0x3d380000,0x0005002c,0x000000ba,0x000000c1,0x000000c0,0x000000c0,0x0004002b,0x000000b9, + 0x000000c2,0x3fa68000,0x0005002c,0x000000ba,0x000000c3,0x000000c2,0x000000c2,0x0004002b, + 0x00000006,0x000000c8,0x00003c20,0x0005002c,0x00000007,0x000000c9,0x000000c8,0x000000c8, + 0x0004002b,0x00000006,0x000000ca,0x00003e47,0x0005002c,0x00000007,0x000000cb,0x000000ca, + 0x000000ca,0x0004002b,0x00000015,0x000000cf,0x00000005,0x0004002b,0x00000015,0x000000d1, + 0xffe0ffe0,0x0004002b,0x00000015,0x000000d3,0x80008000,0x00040020,0x000000e2,0x00000007, + 0x00000006,0x0004002b,0x0000003c,0x000000f9,0x00000001,0x00040020,0x0000011d,0x00000007, + 0x00000029,0x0004002b,0x00000015,0x00000166,0x00000006,0x00040020,0x000001d3,0x00000007, + 0x0000003c,0x00040020,0x000001de,0x00000007,0x00000035,0x0004002b,0x0000003c,0x000001e1, + 0x00000000,0x000f001e,0x000001ea,0x00000015,0x00000015,0x00000015,0x00000015,0x00000015, + 0x00000015,0x00000015,0x00000015,0x00000015,0x00000015,0x00000015,0x00000015,0x00000015, + 0x00040020,0x000001eb,0x00000009,0x000001ea,0x0004003b,0x000001eb,0x000001ec,0x00000009, + 0x00040020,0x000001ed,0x00000009,0x00000015,0x0004002b,0x00000015,0x000001ff,0x00000018, + 0x00040020,0x0000020a,0x00000007,0x00000009,0x0004002b,0x00000015,0x00000220,0x00000c00, + 0x0004001c,0x00000221,0x00000009,0x00000220,0x00040020,0x00000222,0x00000004,0x00000221, + 0x0004003b,0x00000222,0x00000223,0x00000004,0x0004002b,0x00000009,0x0000022b,0x00000000, + 0x00040020,0x0000022d,0x00000004,0x00000009,0x0004002b,0x00000015,0x0000028f,0x00001400, + 0x0004001c,0x00000290,0x00000060,0x0000028f,0x00040020,0x00000291,0x00000004,0x00000290, + 0x0004003b,0x00000291,0x00000292,0x00000004,0x0004002b,0x00000015,0x00000298,0x00000050, + 0x0004002b,0x00000015,0x0000029c,0x000000ff,0x00040020,0x0000029f,0x00000004,0x00000060, + 0x00040020,0x000002b2,0x00000001,0x00000015,0x0004003b,0x000002b2,0x000002b3,0x00000001, + 0x0004003b,0x000002b2,0x000002ba,0x00000001,0x00040017,0x000002c3,0x00000015,0x00000003, + 0x00040020,0x000002c4,0x00000001,0x000002c3,0x0004003b,0x000002c4,0x000002c5,0x00000001, + 0x0004002b,0x00000015,0x000002ce,0x00000300,0x0004002b,0x00000015,0x000002d3,0x00000100, + 0x00040017,0x000002d7,0x00000015,0x00000004,0x00040020,0x000002d8,0x00000007,0x000002d7, + 0x0003001d,0x000002da,0x000002d7,0x0003001e,0x000002db,0x000002da,0x00040020,0x000002dc, + 0x0000000c,0x000002db,0x0004003b,0x000002dc,0x000002dd,0x0000000c,0x00040020,0x000002df, + 0x0000000c,0x000002d7,0x0004002b,0x00000015,0x000002e4,0x00000200,0x0003001d,0x000002e8, + 0x000002d7,0x0003001e,0x000002e9,0x000002e8,0x00040020,0x000002ea,0x0000000c,0x000002e9, + 0x0004003b,0x000002ea,0x000002eb,0x0000000c,0x0004002b,0x00000015,0x000002f3,0x00000009, + 0x0004002b,0x00000015,0x000002fc,0x000002c0,0x0003001d,0x00000300,0x000002d7,0x0003001e, + 0x00000301,0x00000300,0x00040020,0x00000302,0x0000000c,0x00000301,0x0004003b,0x00000302, + 0x00000303,0x0000000c,0x0004002b,0x00000015,0x00000308,0x00000220,0x0003001d,0x0000030d, + 0x000002d7,0x0003001e,0x0000030e,0x0000030d,0x00040020,0x0000030f,0x0000000c,0x0000030e, + 0x0004003b,0x0000030f,0x00000310,0x0000000c,0x0004002b,0x00000015,0x00000315,0x000002e0, + 0x0004002b,0x00000015,0x00000319,0x00000320,0x0004001c,0x0000031a,0x000002d7,0x00000319, + 0x00040020,0x0000031b,0x00000004,0x0000031a,0x0004003b,0x0000031b,0x0000031c,0x00000004, + 0x00040020,0x0000031f,0x00000004,0x000002d7,0x0004002b,0x00000015,0x0000032c,0x00001000, + 0x0004002b,0x00000015,0x0000032e,0x00001200,0x0004001c,0x0000032f,0x00000006,0x0000032e, + 0x00040020,0x00000330,0x00000004,0x0000032f,0x0004003b,0x00000330,0x00000331,0x00000004, + 0x0004002b,0x00000015,0x00000334,0x00000048,0x0004002b,0x00000015,0x00000337,0x0000003f, + 0x0003001d,0x0000033a,0x00000006,0x0003001e,0x0000033b,0x0000033a,0x00040020,0x0000033c, + 0x0000000c,0x0000033b,0x0004003b,0x0000033c,0x0000033d,0x0000000c,0x00040020,0x0000033f, + 0x0000000c,0x00000006,0x00040020,0x00000342,0x00000004,0x00000006,0x00040032,0x00000015, + 0x00000346,0x00000000,0x0004002b,0x00000015,0x00000347,0x00000028,0x00060034,0x00000015, + 0x00000348,0x000000c7,0x00000346,0x00000347,0x00060034,0x00000035,0x00000349,0x000000ab, + 0x00000348,0x00000066,0x0004001c,0x00000356,0x00000006,0x000002e4,0x00040020,0x00000357, + 0x00000004,0x00000356,0x0004003b,0x00000357,0x00000358,0x00000004,0x0003001d,0x0000035a, + 0x00000006,0x0003001e,0x0000035b,0x0000035a,0x00040020,0x0000035c,0x0000000c,0x0000035b, + 0x0004003b,0x0000035c,0x0000035d,0x0000000c,0x0004002b,0x00000015,0x00000364,0x00000108, + 0x0004002b,0x00000015,0x0000036a,0x00000040,0x0003001d,0x00000384,0x00000009,0x0003001e, + 0x00000385,0x00000384,0x00040020,0x00000386,0x0000000c,0x00000385,0x0004003b,0x00000386, + 0x00000387,0x0000000c,0x0004002b,0x0000003c,0x00000388,0x00000007,0x00040020,0x0000038d, + 0x0000000c,0x00000009,0x0004002b,0x0000003c,0x0000039d,0x00000008,0x0004002b,0x0000003c, + 0x000003b2,0x00000009,0x0004002b,0x00000015,0x000003cc,0x00000090,0x00060034,0x00000015, + 0x000003cd,0x000000c7,0x00000346,0x000003cc,0x00060034,0x00000035,0x000003ce,0x000000ab, + 0x000003cd,0x00000066,0x0004001c,0x000003df,0x00000015,0x0000006f,0x00040020,0x000003e0, + 0x00000007,0x000003df,0x0004002b,0x0000003c,0x000003e3,0x0000000a,0x00060034,0x00000015, + 0x000003f8,0x000000c7,0x00000346,0x0000001f,0x00060034,0x00000035,0x000003f9,0x000000ab, + 0x000003f8,0x00000066,0x0004002b,0x0000003c,0x000003fd,0x0000000b,0x0007002c,0x000002d7, + 0x00000415,0x00000066,0x00000066,0x00000066,0x00000066,0x0004003b,0x000002c4,0x00000419, + 0x00000001,0x0004002b,0x0000003c,0x00000420,0x00000005,0x0004002b,0x0000003c,0x0000042c, + 0x00000004,0x0004002b,0x0000003c,0x00000432,0x00000002,0x0004002b,0x0000003c,0x00000442, + 0x00000003,0x00060034,0x00000015,0x0000046b,0x000000c7,0x00000346,0x0000006f,0x00060034, + 0x00000035,0x0000046c,0x000000ab,0x0000046b,0x00000066,0x00040017,0x0000046f,0x000000b9, + 0x00000004,0x0003001d,0x00000470,0x0000046f,0x0003001e,0x00000471,0x00000470,0x00040020, + 0x00000472,0x0000000c,0x00000471,0x0004003b,0x00000472,0x00000473,0x0000000c,0x00040020, + 0x00000479,0x0000000c,0x0000046f,0x00060034,0x00000015,0x00000487,0x000000c7,0x00000346, + 0x0000001f,0x00060034,0x00000035,0x00000488,0x000000ab,0x00000487,0x00000066,0x0003001d, + 0x0000048b,0x000002d7,0x0003001e,0x0000048c,0x0000048b,0x00040020,0x0000048d,0x0000000c, + 0x0000048c,0x0004003b,0x0000048d,0x0000048e,0x0000000c,0x0003001d,0x00000495,0x000002d7, + 0x0003001e,0x00000496,0x00000495,0x00040020,0x00000497,0x0000000c,0x00000496,0x0004003b, + 0x00000497,0x00000498,0x0000000c,0x0004002b,0x0000003c,0x0000049c,0x0000000c,0x0004002b, + 0x00000015,0x000004aa,0x00000080,0x00060034,0x00000015,0x000004ab,0x000000c7,0x00000346, + 0x000004aa,0x00060034,0x00000035,0x000004ac,0x000000ab,0x000004ab,0x00000066,0x00060034, + 0x00000015,0x000004d2,0x000000c7,0x00000346,0x0000006b,0x00060034,0x00000035,0x000004d3, + 0x000000ab,0x000004d2,0x00000066,0x0003001d,0x000004d6,0x000002d7,0x0003001e,0x000004d7, + 0x000004d6,0x00040020,0x000004d8,0x0000000c,0x000004d7,0x0004003b,0x000004d8,0x000004d9, + 0x0000000c,0x000414fa,0x0000051a,0x0000001e,0x0000006b,0x00040020,0x0000051b,0x00000007, + 0x0000051a,0x00060034,0x00000015,0x00000534,0x000000c7,0x00000346,0x0000006f,0x00060034, + 0x00000035,0x00000535,0x000000ab,0x00000534,0x00000066,0x0004002b,0x00000015,0x00000540, + 0x00000800,0x0004001c,0x00000541,0x00000015,0x00000540,0x00040020,0x00000542,0x00000004, + 0x00000541,0x0004003b,0x00000542,0x00000543,0x00000004,0x00040017,0x00000545,0x00000015, + 0x00000002,0x00040020,0x0000054b,0x00000004,0x00000015,0x0004002b,0x00000015,0x00000565, + 0x00000d48,0x00071168,0x00000566,0x00000006,0x0000001e,0x0000001f,0x0000001f,0x00000066, + 0x00040020,0x00000567,0x00000007,0x00000566,0x00071168,0x0000056c,0x00000006,0x0000001e, + 0x0000001f,0x00000020,0x0000006b,0x00040020,0x0000056d,0x00000007,0x0000056c,0x0004002c, + 0x00000022,0x00000572,0x00000054,0x00071168,0x0000057c,0x0000005a,0x0000001e,0x0000001f, + 0x00000020,0x00000066,0x00040020,0x0000057d,0x00000007,0x0000057c,0x00060034,0x00000015, + 0x00000582,0x000000c7,0x00000346,0x000003cc,0x00060034,0x00000035,0x00000583,0x000000ab, + 0x00000582,0x00000066,0x0004002b,0x00000015,0x00000597,0x0000ffff,0x00060034,0x00000015, + 0x000005ac,0x000000c7,0x00000346,0x000004aa,0x00060034,0x00000035,0x000005ad,0x000000ab, + 0x000005ac,0x00000066,0x00060034,0x00000015,0x00000663,0x000000c7,0x00000346,0x0000006b, + 0x00060034,0x00000035,0x00000664,0x000000aa,0x00000663,0x00000066,0x0004002b,0x0000003c, + 0x00000695,0x00000006,0x00060034,0x00000015,0x00000723,0x000000c7,0x00000346,0x0000006f, + 0x00060034,0x00000035,0x00000724,0x000000ab,0x00000723,0x00000066,0x00060034,0x00000015, + 0x00000739,0x000000c7,0x00000346,0x0000001f,0x00060034,0x00000035,0x0000073a,0x000000ab, + 0x00000739,0x00000066,0x00060034,0x00000015,0x00000753,0x000000c7,0x00000346,0x000004aa, + 0x00060034,0x00000035,0x00000754,0x000000ab,0x00000753,0x00000066,0x00060034,0x00000015, + 0x0000077a,0x000000c7,0x00000346,0x0000006b,0x00060034,0x00000035,0x0000077b,0x000000ab, + 0x0000077a,0x00000066,0x00071168,0x00000797,0x0000005a,0x0000001e,0x00000020,0x00000020, + 0x0000006b,0x00040020,0x00000798,0x00000007,0x00000797,0x0004002b,0x00000015,0x000007c9, + 0x00000260,0x0004002b,0x00000015,0x000007cd,0x000002a0,0x00030029,0x00000035,0x000007e0, + 0x0003002a,0x00000035,0x000007e6,0x00071168,0x00000800,0x0000005a,0x0000001e,0x00000020, + 0x0000036a,0x0000006b,0x00040020,0x00000801,0x00000007,0x00000800,0x00071168,0x00000806, + 0x00000006,0x0000001e,0x0000001f,0x0000036a,0x00000021,0x00040020,0x00000807,0x00000007, + 0x00000806,0x0004002c,0x00000806,0x00000814,0x00000054,0x0004002b,0x00000015,0x0000086d, + 0xfffffffc,0x0004002b,0x000000b9,0x000008ab,0x3f800000,0x00071168,0x000008d4,0x0000005a, + 0x0000001e,0x0000001f,0x0000036a,0x00000066,0x00040020,0x000008d5,0x00000007,0x000008d4, + 0x00071168,0x000008d9,0x0000005a,0x0000001e,0x0000036a,0x00000020,0x0000006b,0x00040020, + 0x000008da,0x00000007,0x000008d9,0x00060034,0x00000015,0x000008fb,0x000000c7,0x00000346, + 0x00000028,0x00060034,0x00000035,0x000008fc,0x000000ab,0x000008fb,0x00000066,0x0003001d, + 0x00000975,0x000002d7,0x0003001e,0x00000976,0x00000975,0x00040020,0x00000977,0x0000000c, + 0x00000976,0x0004003b,0x00000977,0x00000978,0x0000000c,0x00060034,0x00000015,0x00000997, + 0x000000c7,0x00000346,0x0000036a,0x00060034,0x00000035,0x00000998,0x000000ab,0x00000997, + 0x00000066,0x0004002b,0x00000006,0x00000a22,0x00003400,0x0003001d,0x00000a4a,0x00000015, + 0x0003001e,0x00000a4b,0x00000a4a,0x00040020,0x00000a4c,0x0000000c,0x00000a4b,0x0004003b, + 0x00000a4c,0x00000a4d,0x0000000c,0x00040020,0x00000a5d,0x0000000c,0x00000015,0x00060034, + 0x00000015,0x00000a5f,0x000000c7,0x00000346,0x00000020,0x00060034,0x00000035,0x00000a60, + 0x000000ab,0x00000a5f,0x00000066,0x00071168,0x00000aa0,0x00000006,0x0000001e,0x0000001f, + 0x0000001f,0x0000006b,0x00040020,0x00000aa1,0x00000007,0x00000aa0,0x00071168,0x00000aa8, + 0x00000006,0x0000001e,0x0000001f,0x0000001f,0x00000021,0x00040020,0x00000aa9,0x00000007, + 0x00000aa8,0x0004002c,0x00000aa8,0x00000aab,0x00000054,0x0003001d,0x00000aec,0x000000ba, + 0x0003001e,0x00000aed,0x00000aec,0x00040020,0x00000aee,0x0000000c,0x00000aed,0x0004003b, + 0x00000aee,0x00000aef,0x0000000c,0x00040020,0x00000b07,0x0000000c,0x000000ba,0x00060034, + 0x00000015,0x00000b0b,0x000000c7,0x00000346,0x00000021,0x00060034,0x00000035,0x00000b0c, + 0x000000ab,0x00000b0b,0x00000066,0x0003001d,0x00000ba7,0x000002d7,0x0003001e,0x00000ba8, + 0x00000ba7,0x00040020,0x00000ba9,0x0000000c,0x00000ba8,0x0004003b,0x00000ba9,0x00000baa, + 0x0000000c,0x0006002c,0x000002c3,0x00000bcb,0x000002d3,0x0000006b,0x0000006b,0x00050036, + 0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000016, + 0x000002b1,0x00000007,0x0004003b,0x00000016,0x000002b6,0x00000007,0x0004003b,0x00000016, + 0x000002b9,0x00000007,0x0004003b,0x00000016,0x000002bc,0x00000007,0x0004003b,0x00000016, + 0x000002bf,0x00000007,0x0004003b,0x00000016,0x000002c2,0x00000007,0x0004003b,0x00000016, + 0x000002d0,0x00000007,0x0004003b,0x000002d8,0x000002d9,0x00000007,0x0004003b,0x00000016, + 0x00000323,0x00000007,0x0004003b,0x00000016,0x0000034c,0x00000007,0x0004003b,0x00000016, + 0x00000365,0x00000007,0x0004003b,0x00000016,0x00000368,0x00000007,0x0004003b,0x00000016, + 0x0000036d,0x00000007,0x0004003b,0x00000016,0x00000371,0x00000007,0x0004003b,0x00000016, + 0x00000374,0x00000007,0x0004003b,0x00000016,0x0000037c,0x00000007,0x0004003b,0x0000011d, + 0x00000382,0x00000007,0x0004003b,0x0000011d,0x0000039b,0x00000007,0x0004003b,0x00000016, + 0x000003b1,0x00000007,0x0004003b,0x000000e2,0x000003c2,0x00000007,0x0004003b,0x00000016, + 0x000003c6,0x00000007,0x0004003b,0x00000016,0x000003c9,0x00000007,0x0004003b,0x00000016, + 0x000003d1,0x00000007,0x0004003b,0x00000016,0x000003d9,0x00000007,0x0004003b,0x000003e0, + 0x000003e1,0x00000007,0x0004003b,0x000003e0,0x000003f6,0x00000007,0x0004003b,0x00000016, + 0x000003fa,0x00000007,0x0004003b,0x000002d8,0x00000414,0x00000007,0x0004003b,0x000002d8, + 0x00000416,0x00000007,0x0004003b,0x000002d8,0x00000417,0x00000007,0x0004003b,0x00000016, + 0x00000418,0x00000007,0x0004003b,0x00000016,0x00000426,0x00000007,0x0004003b,0x000001d3, + 0x0000042a,0x00000007,0x0004003b,0x000001d3,0x0000043b,0x00000007,0x0004003b,0x00000016, + 0x00000462,0x00000007,0x0004003b,0x00000016,0x000004b5,0x00000007,0x0004003b,0x00000016, + 0x000004e9,0x00000007,0x0004003b,0x00000016,0x000004f6,0x00000007,0x0004003b,0x000001de, + 0x000004fb,0x00000007,0x0004003b,0x00000016,0x00000500,0x00000007,0x0004003b,0x000001d3, + 0x00000504,0x00000007,0x0004003b,0x000001d3,0x0000050f,0x00000007,0x0004003b,0x0000051b, + 0x0000051c,0x00000007,0x0004003b,0x0000051b,0x00000529,0x00000007,0x0004003b,0x00000016, + 0x00000538,0x00000007,0x0004003b,0x00000567,0x00000568,0x00000007,0x0004003b,0x0000056d, + 0x0000056e,0x00000007,0x0004003b,0x00000023,0x00000571,0x00000007,0x0004003b,0x00000023, + 0x00000577,0x00000007,0x0004003b,0x00000023,0x00000579,0x00000007,0x0004003b,0x0000057d, + 0x0000057e,0x00000007,0x0004003b,0x00000016,0x00000586,0x00000007,0x0004003b,0x00000016, + 0x0000058e,0x00000007,0x0004003b,0x00000008,0x00000599,0x00000007,0x0004003b,0x00000008, + 0x0000059e,0x00000007,0x0004003b,0x00000008,0x000005b0,0x00000007,0x0004003b,0x00000016, + 0x000005b3,0x00000007,0x0004003b,0x00000008,0x000005c0,0x00000007,0x0004003b,0x000003e0, + 0x000005c5,0x00000007,0x0004003b,0x00000016,0x000005cb,0x00000007,0x0004003b,0x00000008, + 0x000005d5,0x00000007,0x0004003b,0x00000008,0x000005da,0x00000007,0x0004003b,0x00000008, + 0x000005e8,0x00000007,0x0004003b,0x00000008,0x000005ec,0x00000007,0x0004003b,0x00000016, + 0x000005f7,0x00000007,0x0004003b,0x00000016,0x00000600,0x00000007,0x0004003b,0x00000016, + 0x00000614,0x00000007,0x0004003b,0x00000016,0x0000061c,0x00000007,0x0004003b,0x00000008, + 0x0000062c,0x00000007,0x0004003b,0x00000008,0x00000635,0x00000007,0x0004003b,0x00000016, + 0x00000641,0x00000007,0x0004003b,0x000002d8,0x0000065f,0x00000007,0x0004003b,0x000002d8, + 0x00000661,0x00000007,0x0004003b,0x00000016,0x00000667,0x00000007,0x0004003b,0x00000016, + 0x0000066f,0x00000007,0x0004003b,0x000003e0,0x00000679,0x00000007,0x0004003b,0x00000016, + 0x0000069b,0x00000007,0x0004003b,0x00000023,0x000006cf,0x00000007,0x0004003b,0x00000016, + 0x000006d3,0x00000007,0x0004003b,0x00000016,0x000006e1,0x00000007,0x0004003b,0x000001d3, + 0x000006e5,0x00000007,0x0004003b,0x000001d3,0x000006f4,0x00000007,0x0004003b,0x00000016, + 0x0000071a,0x00000007,0x0004003b,0x00000016,0x0000075d,0x00000007,0x0004003b,0x00000023, + 0x0000078d,0x00000007,0x0004003b,0x00000016,0x0000078f,0x00000007,0x0004003b,0x00000798, + 0x00000799,0x00000007,0x0004003b,0x00000023,0x000007a4,0x00000007,0x0004003b,0x00000023, + 0x000007a9,0x00000007,0x0004003b,0x0000057d,0x000007ad,0x00000007,0x0004003b,0x00000798, + 0x000007b0,0x00000007,0x0004003b,0x00000023,0x000007bf,0x00000007,0x0004003b,0x0000057d, + 0x000007c2,0x00000007,0x0004003b,0x00000798,0x000007c5,0x00000007,0x0004003b,0x00000798, + 0x000007c8,0x00000007,0x0004003b,0x00000798,0x000007cc,0x00000007,0x0004003b,0x00000023, + 0x000007d0,0x00000007,0x0004003b,0x00000023,0x000007d1,0x00000007,0x0004003b,0x00000023, + 0x000007d2,0x00000007,0x0004003b,0x00000023,0x000007e1,0x00000007,0x0004003b,0x00000023, + 0x000007e7,0x00000007,0x0004003b,0x0000057d,0x000007eb,0x00000007,0x0004003b,0x00000801, + 0x00000802,0x00000007,0x0004003b,0x00000807,0x00000808,0x00000007,0x0004003b,0x00000807, + 0x00000813,0x00000007,0x0004003b,0x00000016,0x00000815,0x00000007,0x0004003b,0x00000016, + 0x0000081d,0x00000007,0x0004003b,0x000003e0,0x00000825,0x00000007,0x0004003b,0x00000016, + 0x00000838,0x00000007,0x0004003b,0x00000016,0x0000083d,0x00000007,0x0004003b,0x00000008, + 0x00000845,0x00000007,0x0004003b,0x0000011d,0x00000852,0x00000007,0x0004003b,0x00000008, + 0x00000858,0x00000007,0x0004003b,0x00000008,0x0000085e,0x00000007,0x0004003b,0x00000008, + 0x00000863,0x00000007,0x0004003b,0x00000016,0x00000868,0x00000007,0x0004003b,0x00000016, + 0x0000086b,0x00000007,0x0004003b,0x00000008,0x0000086f,0x00000007,0x0004003b,0x00000008, + 0x00000874,0x00000007,0x0004003b,0x00000008,0x0000087a,0x00000007,0x0004003b,0x00000008, + 0x00000880,0x00000007,0x0004003b,0x000000e2,0x00000886,0x00000007,0x0004003b,0x000000e2, + 0x0000088c,0x00000007,0x0004003b,0x000000e2,0x00000891,0x00000007,0x0004003b,0x000000e2, + 0x00000896,0x00000007,0x0004003b,0x000000e2,0x0000089c,0x00000007,0x0004003b,0x000000e2, + 0x000008a1,0x00000007,0x0004003b,0x000000e2,0x000008a6,0x00000007,0x0004003b,0x000000e2, + 0x000008aa,0x00000007,0x0004003b,0x00000016,0x000008b0,0x00000007,0x0004003b,0x00000008, + 0x000008b8,0x00000007,0x0004003b,0x000008d5,0x000008d6,0x00000007,0x0004003b,0x000008da, + 0x000008db,0x00000007,0x0004003b,0x00000023,0x000008df,0x00000007,0x0004003b,0x00000023, + 0x000008e4,0x00000007,0x0004003b,0x0000057d,0x000008e7,0x00000007,0x0004003b,0x00000023, + 0x000008ea,0x00000007,0x0004003b,0x00000023,0x000008ed,0x00000007,0x0004003b,0x00000798, + 0x000008f1,0x00000007,0x0004003b,0x00000023,0x000008f4,0x00000007,0x0004003b,0x00000016, + 0x000008f9,0x00000007,0x0004003b,0x00000016,0x000008ff,0x00000007,0x0004003b,0x00000016, + 0x00000907,0x00000007,0x0004003b,0x00000016,0x00000931,0x00000007,0x0004003b,0x00000016, + 0x00000939,0x00000007,0x0004003b,0x00000016,0x0000093e,0x00000007,0x0004003b,0x00000016, + 0x00000941,0x00000007,0x0004003b,0x00000016,0x00000944,0x00000007,0x0004003b,0x000001d3, + 0x00000948,0x00000007,0x0004003b,0x000001d3,0x0000094e,0x00000007,0x0004003b,0x00000016, + 0x00000954,0x00000007,0x0004003b,0x00000016,0x0000099b,0x00000007,0x0004003b,0x00000016, + 0x000009a3,0x00000007,0x0004003b,0x00000016,0x000009cd,0x00000007,0x0004003b,0x00000016, + 0x000009d0,0x00000007,0x0004003b,0x000001d3,0x000009d4,0x00000007,0x0004003b,0x000001d3, + 0x000009da,0x00000007,0x0004003b,0x00000016,0x000009e0,0x00000007,0x0004003b,0x00000016, + 0x000009e1,0x00000007,0x0004003b,0x00000016,0x000009e9,0x00000007,0x0004003b,0x00000008, + 0x000009ed,0x00000007,0x0004003b,0x00000008,0x00000a04,0x00000007,0x0004003b,0x00000008, + 0x00000a1c,0x00000007,0x0004003b,0x00000008,0x00000a20,0x00000007,0x0004003b,0x00000008, + 0x00000a24,0x00000007,0x0004003b,0x00000016,0x00000a63,0x00000007,0x0004003b,0x00000016, + 0x00000a6b,0x00000007,0x0004003b,0x00000567,0x00000a95,0x00000007,0x0004003b,0x00000567, + 0x00000a99,0x00000007,0x0004003b,0x00000aa1,0x00000aa2,0x00000007,0x0004003b,0x00000aa1, + 0x00000aa5,0x00000007,0x0004003b,0x00000aa9,0x00000aaa,0x00000007,0x0004003b,0x00000016, + 0x00000ab8,0x00000007,0x0004003b,0x00000016,0x00000ac0,0x00000007,0x0004003b,0x000001d3, + 0x00000ac7,0x00000007,0x0004003b,0x000001d3,0x00000acd,0x00000007,0x0004003b,0x00000016, + 0x00000b0f,0x00000007,0x0004003b,0x00000008,0x00000b17,0x00000007,0x0004003b,0x00000008, + 0x00000b22,0x00000007,0x0004003b,0x00000016,0x00000b2f,0x00000007,0x0004003b,0x00000008, + 0x00000b34,0x00000007,0x0004003b,0x00000016,0x00000b37,0x00000007,0x0004003b,0x00000008, + 0x00000b3c,0x00000007,0x0004003b,0x000001de,0x00000b3f,0x00000007,0x0004003b,0x00000016, + 0x00000b43,0x00000007,0x0004003b,0x00000016,0x00000b49,0x00000007,0x0004003b,0x00000016, + 0x00000b4b,0x00000007,0x0004003b,0x00000016,0x00000b58,0x00000007,0x0004003b,0x00000016, + 0x00000b5a,0x00000007,0x0004003b,0x00000016,0x00000b70,0x00000007,0x0004003b,0x00000016, + 0x00000b73,0x00000007,0x0004003b,0x00000016,0x00000b76,0x00000007,0x0004003b,0x000001d3, + 0x00000b7a,0x00000007,0x0004003b,0x000001d3,0x00000b80,0x00000007,0x0004003b,0x00000016, + 0x00000b86,0x00000007,0x0004003d,0x00000015,0x000002b4,0x000002b3,0x000500c2,0x00000015, + 0x000002b5,0x000002b4,0x00000021,0x0003003e,0x000002b1,0x000002b5,0x0004003d,0x00000015, + 0x000002b7,0x000002b3,0x000500c7,0x00000015,0x000002b8,0x000002b7,0x0000001e,0x0003003e, + 0x000002b6,0x000002b8,0x0004003d,0x00000015,0x000002bb,0x000002ba,0x0003003e,0x000002b9, + 0x000002bb,0x0004003d,0x00000015,0x000002bd,0x000002b9,0x000500c2,0x00000015,0x000002be, + 0x000002bd,0x00000021,0x0003003e,0x000002bc,0x000002be,0x0004003d,0x00000015,0x000002c0, + 0x000002b9,0x000500c7,0x00000015,0x000002c1,0x000002c0,0x0000001e,0x0003003e,0x000002bf, + 0x000002c1,0x00050041,0x000002b2,0x000002c6,0x000002c5,0x00000066,0x0004003d,0x00000015, + 0x000002c7,0x000002c6,0x0003003e,0x000002c2,0x000002c7,0x000200f9,0x000002c8,0x000200f8, + 0x000002c8,0x000400f6,0x000002ca,0x000002cb,0x00000000,0x000200f9,0x000002cc,0x000200f8, + 0x000002cc,0x0004003d,0x00000015,0x000002cd,0x000002c2,0x000500b0,0x00000035,0x000002cf, + 0x000002cd,0x000002ce,0x000400fa,0x000002cf,0x000002c9,0x000002ca,0x000200f8,0x000002c9, + 0x0004003d,0x00000015,0x000002d1,0x000002c2,0x0003003e,0x000002d0,0x000002d1,0x0004003d, + 0x00000015,0x000002d2,0x000002c2,0x000500b0,0x00000035,0x000002d4,0x000002d2,0x000002d3, + 0x000300f7,0x000002d6,0x00000000,0x000400fa,0x000002d4,0x000002d5,0x000002e2,0x000200f8, + 0x000002d5,0x0004003d,0x00000015,0x000002de,0x000002c2,0x00060041,0x000002df,0x000002e0, + 0x000002dd,0x000001e1,0x000002de,0x0004003d,0x000002d7,0x000002e1,0x000002e0,0x0003003e, + 0x000002d9,0x000002e1,0x000200f9,0x000002d6,0x000200f8,0x000002e2,0x0004003d,0x00000015, + 0x000002e3,0x000002c2,0x000500b0,0x00000035,0x000002e5,0x000002e3,0x000002e4,0x000300f7, + 0x000002e7,0x00000000,0x000400fa,0x000002e5,0x000002e6,0x000002fa,0x000200f8,0x000002e6, + 0x0004003d,0x00000015,0x000002ec,0x000002c2,0x00050082,0x00000015,0x000002ed,0x000002ec, + 0x000002d3,0x00060041,0x000002df,0x000002ee,0x000002eb,0x000001e1,0x000002ed,0x0004003d, + 0x000002d7,0x000002ef,0x000002ee,0x0003003e,0x000002d9,0x000002ef,0x0004003d,0x00000015, + 0x000002f0,0x000002c2,0x00050082,0x00000015,0x000002f1,0x000002f0,0x000002d3,0x000500c2, + 0x00000015,0x000002f2,0x000002f1,0x0000001e,0x00050084,0x00000015,0x000002f4,0x000002f2, + 0x000002f3,0x00050080,0x00000015,0x000002f5,0x000002d3,0x000002f4,0x0004003d,0x00000015, + 0x000002f6,0x000002c2,0x00050082,0x00000015,0x000002f7,0x000002f6,0x000002d3,0x000500c7, + 0x00000015,0x000002f8,0x000002f7,0x000000a4,0x00050080,0x00000015,0x000002f9,0x000002f5, + 0x000002f8,0x0003003e,0x000002d0,0x000002f9,0x000200f9,0x000002e7,0x000200f8,0x000002fa, + 0x0004003d,0x00000015,0x000002fb,0x000002c2,0x000500b0,0x00000035,0x000002fd,0x000002fb, + 0x000002fc,0x000300f7,0x000002ff,0x00000000,0x000400fa,0x000002fd,0x000002fe,0x0000030c, + 0x000200f8,0x000002fe,0x0004003d,0x00000015,0x00000304,0x000002c2,0x00050082,0x00000015, + 0x00000305,0x00000304,0x000002e4,0x00060041,0x000002df,0x00000306,0x00000303,0x000001e1, + 0x00000305,0x0004003d,0x000002d7,0x00000307,0x00000306,0x0003003e,0x000002d9,0x00000307, + 0x0004003d,0x00000015,0x00000309,0x000002c2,0x00050082,0x00000015,0x0000030a,0x00000309, + 0x000002e4,0x00050080,0x00000015,0x0000030b,0x00000308,0x0000030a,0x0003003e,0x000002d0, + 0x0000030b,0x000200f9,0x000002ff,0x000200f8,0x0000030c,0x0004003d,0x00000015,0x00000311, + 0x000002c2,0x00050082,0x00000015,0x00000312,0x00000311,0x000002fc,0x00060041,0x000002df, + 0x00000313,0x00000310,0x000001e1,0x00000312,0x0004003d,0x000002d7,0x00000314,0x00000313, + 0x0003003e,0x000002d9,0x00000314,0x0004003d,0x00000015,0x00000316,0x000002c2,0x00050082, + 0x00000015,0x00000317,0x00000316,0x000002fc,0x00050080,0x00000015,0x00000318,0x00000315, + 0x00000317,0x0003003e,0x000002d0,0x00000318,0x000200f9,0x000002ff,0x000200f8,0x000002ff, + 0x000200f9,0x000002e7,0x000200f8,0x000002e7,0x000200f9,0x000002d6,0x000200f8,0x000002d6, + 0x0004003d,0x00000015,0x0000031d,0x000002d0,0x0004003d,0x000002d7,0x0000031e,0x000002d9, + 0x00050041,0x0000031f,0x00000320,0x0000031c,0x0000031d,0x0005003e,0x00000320,0x0000031e, + 0x00000028,0x00000021,0x000200f9,0x000002cb,0x000200f8,0x000002cb,0x0004003d,0x00000015, + 0x00000321,0x000002c2,0x00050080,0x00000015,0x00000322,0x00000321,0x000002d3,0x0003003e, + 0x000002c2,0x00000322,0x000200f9,0x000002c8,0x000200f8,0x000002ca,0x00050041,0x000002b2, + 0x00000324,0x000002c5,0x00000066,0x0004003d,0x00000015,0x00000325,0x00000324,0x0003003e, + 0x00000323,0x00000325,0x000200f9,0x00000326,0x000200f8,0x00000326,0x000400f6,0x00000328, + 0x00000329,0x00000000,0x000200f9,0x0000032a,0x000200f8,0x0000032a,0x0004003d,0x00000015, + 0x0000032b,0x00000323,0x000500b0,0x00000035,0x0000032d,0x0000032b,0x0000032c,0x000400fa, + 0x0000032d,0x00000327,0x00000328,0x000200f8,0x00000327,0x0004003d,0x00000015,0x00000332, + 0x00000323,0x000500c2,0x00000015,0x00000333,0x00000332,0x00000166,0x00050084,0x00000015, + 0x00000335,0x00000333,0x00000334,0x0004003d,0x00000015,0x00000336,0x00000323,0x000500c7, + 0x00000015,0x00000338,0x00000336,0x00000337,0x00050080,0x00000015,0x00000339,0x00000335, + 0x00000338,0x0004003d,0x00000015,0x0000033e,0x00000323,0x00060041,0x0000033f,0x00000340, + 0x0000033d,0x000001e1,0x0000033e,0x0004003d,0x00000006,0x00000341,0x00000340,0x00050041, + 0x00000342,0x00000343,0x00000331,0x00000339,0x0005003e,0x00000343,0x00000341,0x00000028, + 0x00000021,0x000200f9,0x00000329,0x000200f8,0x00000329,0x0004003d,0x00000015,0x00000344, + 0x00000323,0x00050080,0x00000015,0x00000345,0x00000344,0x000002d3,0x0003003e,0x00000323, + 0x00000345,0x000200f9,0x00000326,0x000200f8,0x00000328,0x000300f7,0x0000034b,0x00000000, + 0x000400fa,0x00000349,0x0000034a,0x0000034b,0x000200f8,0x0000034a,0x00050041,0x000002b2, + 0x0000034d,0x000002c5,0x00000066,0x0004003d,0x00000015,0x0000034e,0x0000034d,0x0003003e, + 0x0000034c,0x0000034e,0x000200f9,0x0000034f,0x000200f8,0x0000034f,0x000400f6,0x00000351, + 0x00000352,0x00000000,0x000200f9,0x00000353,0x000200f8,0x00000353,0x0004003d,0x00000015, + 0x00000354,0x0000034c,0x000500b0,0x00000035,0x00000355,0x00000354,0x000002e4,0x000400fa, + 0x00000355,0x00000350,0x00000351,0x000200f8,0x00000350,0x0004003d,0x00000015,0x00000359, + 0x0000034c,0x0004003d,0x00000015,0x0000035e,0x0000034c,0x00060041,0x0000033f,0x0000035f, + 0x0000035d,0x000001e1,0x0000035e,0x0004003d,0x00000006,0x00000360,0x0000035f,0x00050041, + 0x00000342,0x00000361,0x00000358,0x00000359,0x0005003e,0x00000361,0x00000360,0x00000028, + 0x00000021,0x000200f9,0x00000352,0x000200f8,0x00000352,0x0004003d,0x00000015,0x00000362, + 0x0000034c,0x00050080,0x00000015,0x00000363,0x00000362,0x000002d3,0x0003003e,0x0000034c, + 0x00000363,0x000200f9,0x0000034f,0x000200f8,0x00000351,0x000200f9,0x0000034b,0x000200f8, + 0x0000034b,0x000400e0,0x00000021,0x00000021,0x00000364,0x0004003d,0x00000015,0x00000366, + 0x000002b3,0x00050084,0x00000015,0x00000367,0x00000366,0x000002d3,0x0003003e,0x00000365, + 0x00000367,0x0004003d,0x00000015,0x00000369,0x000002b1,0x00050084,0x00000015,0x0000036b, + 0x00000369,0x0000036a,0x00050084,0x00000015,0x0000036c,0x0000036b,0x000001ff,0x0003003e, + 0x00000368,0x0000036c,0x0004003d,0x00000015,0x0000036e,0x000002b1,0x00050084,0x00000015, + 0x0000036f,0x0000036e,0x00000020,0x00050084,0x00000015,0x00000370,0x0000036f,0x00000298, + 0x0003003e,0x0000036d,0x00000370,0x0004003d,0x00000015,0x00000372,0x000002b6,0x00050084, + 0x00000015,0x00000373,0x00000372,0x0000001f,0x0003003e,0x00000371,0x00000373,0x0003003e, + 0x00000374,0x00000066,0x000200f9,0x00000375,0x000200f8,0x00000375,0x000400f6,0x00000377, + 0x00000378,0x00000001,0x000200f9,0x00000379,0x000200f8,0x00000379,0x0004003d,0x00000015, + 0x0000037a,0x00000374,0x000500b0,0x00000035,0x0000037b,0x0000037a,0x00000028,0x000400fa, + 0x0000037b,0x00000376,0x00000377,0x000200f8,0x00000376,0x0004003d,0x00000015,0x0000037d, + 0x00000374,0x00050084,0x00000015,0x0000037e,0x0000006f,0x0000037d,0x0004003d,0x00000015, + 0x0000037f,0x000002bf,0x00050084,0x00000015,0x00000380,0x00000021,0x0000037f,0x00050080, + 0x00000015,0x00000381,0x0000037e,0x00000380,0x0003003e,0x0000037c,0x00000381,0x0004003d, + 0x00000015,0x00000383,0x00000374,0x00050041,0x000001ed,0x00000389,0x000001ec,0x00000388, + 0x0004003d,0x00000015,0x0000038a,0x00000389,0x0004003d,0x00000015,0x0000038b,0x0000037c, + 0x00050080,0x00000015,0x0000038c,0x0000038a,0x0000038b,0x00060041,0x0000038d,0x0000038e, + 0x00000387,0x000001e1,0x0000038c,0x0004003d,0x00000009,0x0000038f,0x0000038e,0x0004007c, + 0x00000006,0x00000390,0x0000038f,0x00050041,0x000001ed,0x00000391,0x000001ec,0x00000388, + 0x0004003d,0x00000015,0x00000392,0x00000391,0x0004003d,0x00000015,0x00000393,0x0000037c, + 0x00050080,0x00000015,0x00000394,0x00000392,0x00000393,0x00050080,0x00000015,0x00000395, + 0x00000394,0x0000006b,0x00060041,0x0000038d,0x00000396,0x00000387,0x000001e1,0x00000395, + 0x0004003d,0x00000009,0x00000397,0x00000396,0x0004007c,0x00000006,0x00000398,0x00000397, + 0x00050050,0x00000007,0x00000399,0x00000390,0x00000398,0x00050041,0x00000008,0x0000039a, + 0x00000382,0x00000383,0x0003003e,0x0000039a,0x00000399,0x0004003d,0x00000015,0x0000039c, + 0x00000374,0x00050041,0x000001ed,0x0000039e,0x000001ec,0x0000039d,0x0004003d,0x00000015, + 0x0000039f,0x0000039e,0x0004003d,0x00000015,0x000003a0,0x0000037c,0x00050080,0x00000015, + 0x000003a1,0x0000039f,0x000003a0,0x00060041,0x0000038d,0x000003a2,0x00000387,0x000001e1, + 0x000003a1,0x0004003d,0x00000009,0x000003a3,0x000003a2,0x0004007c,0x00000006,0x000003a4, + 0x000003a3,0x00050041,0x000001ed,0x000003a5,0x000001ec,0x0000039d,0x0004003d,0x00000015, + 0x000003a6,0x000003a5,0x0004003d,0x00000015,0x000003a7,0x0000037c,0x00050080,0x00000015, + 0x000003a8,0x000003a6,0x000003a7,0x00050080,0x00000015,0x000003a9,0x000003a8,0x0000006b, + 0x00060041,0x0000038d,0x000003aa,0x00000387,0x000001e1,0x000003a9,0x0004003d,0x00000009, + 0x000003ab,0x000003aa,0x0004007c,0x00000006,0x000003ac,0x000003ab,0x00050050,0x00000007, + 0x000003ad,0x000003a4,0x000003ac,0x00050041,0x00000008,0x000003ae,0x0000039b,0x0000039c, + 0x0003003e,0x000003ae,0x000003ad,0x000200f9,0x00000378,0x000200f8,0x00000378,0x0004003d, + 0x00000015,0x000003af,0x00000374,0x00050080,0x00000015,0x000003b0,0x000003af,0x000000f9, + 0x0003003e,0x00000374,0x000003b0,0x000200f9,0x00000375,0x000200f8,0x00000377,0x00050041, + 0x000001ed,0x000003b3,0x000001ec,0x000003b2,0x0004003d,0x00000015,0x000003b4,0x000003b3, + 0x00050084,0x00000015,0x000003b5,0x000003b4,0x00000021,0x00060041,0x0000038d,0x000003b6, + 0x00000387,0x000001e1,0x000003b5,0x0004003d,0x00000009,0x000003b7,0x000003b6,0x00040071, + 0x00000015,0x000003b8,0x000003b7,0x00050041,0x000001ed,0x000003b9,0x000001ec,0x000003b2, + 0x0004003d,0x00000015,0x000003ba,0x000003b9,0x00050084,0x00000015,0x000003bb,0x000003ba, + 0x00000021,0x00050080,0x00000015,0x000003bc,0x000003bb,0x0000006b,0x00060041,0x0000038d, + 0x000003bd,0x00000387,0x000001e1,0x000003bc,0x0004003d,0x00000009,0x000003be,0x000003bd, + 0x00040071,0x00000015,0x000003bf,0x000003be,0x000500c4,0x00000015,0x000003c0,0x000003bf, + 0x0000001f,0x000500c5,0x00000015,0x000003c1,0x000003b8,0x000003c0,0x0003003e,0x000003b1, + 0x000003c1,0x0004003d,0x00000015,0x000003c3,0x000003b1,0x0004007c,0x000000b9,0x000003c4, + 0x000003c3,0x00040073,0x00000006,0x000003c5,0x000003c4,0x0003003e,0x000003c2,0x000003c5, + 0x0004003d,0x00000015,0x000003c7,0x000002b9,0x000500c2,0x00000015,0x000003c8,0x000003c7, + 0x0000006b,0x0003003e,0x000003c6,0x000003c8,0x0004003d,0x00000015,0x000003ca,0x000002b9, + 0x000500c7,0x00000015,0x000003cb,0x000003ca,0x0000006b,0x0003003e,0x000003c9,0x000003cb, + 0x000300f7,0x000003d0,0x00000000,0x000400fa,0x000003ce,0x000003cf,0x000003d0,0x000200f8, + 0x000003cf,0x0003003e,0x000003d1,0x00000066,0x000200f9,0x000003d2,0x000200f8,0x000003d2, + 0x000400f6,0x000003d4,0x000003d5,0x00000001,0x000200f9,0x000003d6,0x000200f8,0x000003d6, + 0x0004003d,0x00000015,0x000003d7,0x000003d1,0x000500b0,0x00000035,0x000003d8,0x000003d7, + 0x0000006f,0x000400fa,0x000003d8,0x000003d3,0x000003d4,0x000200f8,0x000003d3,0x0004003d, + 0x00000015,0x000003da,0x000003c9,0x00050084,0x00000015,0x000003db,0x0000001f,0x000003da, + 0x0004003d,0x00000015,0x000003dc,0x000003d1,0x00050084,0x00000015,0x000003dd,0x00000021, + 0x000003dc,0x00050080,0x00000015,0x000003de,0x000003db,0x000003dd,0x0003003e,0x000003d9, + 0x000003de,0x0004003d,0x00000015,0x000003e2,0x000003d1,0x00050041,0x000001ed,0x000003e4, + 0x000001ec,0x000003e3,0x0004003d,0x00000015,0x000003e5,0x000003e4,0x0004003d,0x00000015, + 0x000003e6,0x000003d9,0x00050080,0x00000015,0x000003e7,0x000003e5,0x000003e6,0x00060041, + 0x0000038d,0x000003e8,0x00000387,0x000001e1,0x000003e7,0x0004003d,0x00000009,0x000003e9, + 0x000003e8,0x00040071,0x00000015,0x000003ea,0x000003e9,0x00050041,0x000001ed,0x000003eb, + 0x000001ec,0x000003e3,0x0004003d,0x00000015,0x000003ec,0x000003eb,0x0004003d,0x00000015, + 0x000003ed,0x000003d9,0x00050080,0x00000015,0x000003ee,0x000003ec,0x000003ed,0x00050080, + 0x00000015,0x000003ef,0x000003ee,0x0000006b,0x00060041,0x0000038d,0x000003f0,0x00000387, + 0x000001e1,0x000003ef,0x0004003d,0x00000009,0x000003f1,0x000003f0,0x00040071,0x00000015, + 0x000003f2,0x000003f1,0x000500c4,0x00000015,0x000003f3,0x000003f2,0x0000001f,0x000500c5, + 0x00000015,0x000003f4,0x000003ea,0x000003f3,0x00050041,0x00000016,0x000003f5,0x000003e1, + 0x000003e2,0x0003003e,0x000003f5,0x000003f4,0x0004003d,0x00000015,0x000003f7,0x000003d1, + 0x000300f7,0x000003fc,0x00000000,0x000400fa,0x000003f9,0x000003fb,0x0000040f,0x000200f8, + 0x000003fb,0x00050041,0x000001ed,0x000003fe,0x000001ec,0x000003fd,0x0004003d,0x00000015, + 0x000003ff,0x000003fe,0x0004003d,0x00000015,0x00000400,0x000003d9,0x00050080,0x00000015, + 0x00000401,0x000003ff,0x00000400,0x00060041,0x0000038d,0x00000402,0x00000387,0x000001e1, + 0x00000401,0x0004003d,0x00000009,0x00000403,0x00000402,0x00040071,0x00000015,0x00000404, + 0x00000403,0x00050041,0x000001ed,0x00000405,0x000001ec,0x000003fd,0x0004003d,0x00000015, + 0x00000406,0x00000405,0x0004003d,0x00000015,0x00000407,0x000003d9,0x00050080,0x00000015, + 0x00000408,0x00000406,0x00000407,0x00050080,0x00000015,0x00000409,0x00000408,0x0000006b, + 0x00060041,0x0000038d,0x0000040a,0x00000387,0x000001e1,0x00000409,0x0004003d,0x00000009, + 0x0000040b,0x0000040a,0x00040071,0x00000015,0x0000040c,0x0000040b,0x000500c4,0x00000015, + 0x0000040d,0x0000040c,0x0000001f,0x000500c5,0x00000015,0x0000040e,0x00000404,0x0000040d, + 0x0003003e,0x000003fa,0x0000040e,0x000200f9,0x000003fc,0x000200f8,0x0000040f,0x0003003e, + 0x000003fa,0x00000066,0x000200f9,0x000003fc,0x000200f8,0x000003fc,0x0004003d,0x00000015, + 0x00000410,0x000003fa,0x00050041,0x00000016,0x00000411,0x000003f6,0x000003f7,0x0003003e, + 0x00000411,0x00000410,0x000200f9,0x000003d5,0x000200f8,0x000003d5,0x0004003d,0x00000015, + 0x00000412,0x000003d1,0x00050080,0x00000015,0x00000413,0x00000412,0x000000f9,0x0003003e, + 0x000003d1,0x00000413,0x000200f9,0x000003d2,0x000200f8,0x000003d4,0x000200f9,0x000003d0, + 0x000200f8,0x000003d0,0x0003003e,0x00000414,0x00000415,0x0003003e,0x00000416,0x00000415, + 0x0003003e,0x00000417,0x00000415,0x00050041,0x000002b2,0x0000041a,0x00000419,0x00000066, + 0x0004003d,0x00000015,0x0000041b,0x0000041a,0x00050084,0x00000015,0x0000041c,0x0000041b, + 0x00000021,0x0004003d,0x00000015,0x0000041d,0x000002b1,0x00050080,0x00000015,0x0000041e, + 0x0000041c,0x0000041d,0x0003003e,0x00000418,0x0000041e,0x0004003d,0x00000015,0x0000041f, + 0x00000418,0x00050041,0x000001ed,0x00000421,0x000001ec,0x00000420,0x0004003d,0x00000015, + 0x00000422,0x00000421,0x000500b0,0x00000035,0x00000423,0x0000041f,0x00000422,0x000300f7, + 0x00000425,0x00000000,0x000400fa,0x00000423,0x00000424,0x00000425,0x000200f8,0x00000424, + 0x0004003d,0x00000015,0x00000427,0x00000371,0x0004003d,0x00000015,0x00000428,0x000003c6, + 0x00050080,0x00000015,0x00000429,0x00000427,0x00000428,0x0003003e,0x00000426,0x00000429, + 0x0004003d,0x00000015,0x0000042b,0x00000418,0x00050041,0x000001ed,0x0000042d,0x000001ec, + 0x0000042c,0x0004003d,0x00000015,0x0000042e,0x0000042d,0x00050089,0x00000015,0x0000042f, + 0x0000042b,0x0000042e,0x00050084,0x00000015,0x00000430,0x0000042f,0x0000006f,0x0004007c, + 0x0000003c,0x00000431,0x00000430,0x00050041,0x000001ed,0x00000433,0x000001ec,0x00000432, + 0x0004003d,0x00000015,0x00000434,0x00000433,0x0004007c,0x0000003c,0x00000435,0x00000434, + 0x00050082,0x0000003c,0x00000436,0x00000431,0x00000435,0x0004003d,0x00000015,0x00000437, + 0x00000426,0x000500c7,0x00000015,0x00000438,0x00000437,0x000000a4,0x0004007c,0x0000003c, + 0x00000439,0x00000438,0x00050080,0x0000003c,0x0000043a,0x00000436,0x00000439,0x0003003e, + 0x0000042a,0x0000043a,0x0004003d,0x00000015,0x0000043c,0x00000418,0x00050041,0x000001ed, + 0x0000043d,0x000001ec,0x0000042c,0x0004003d,0x00000015,0x0000043e,0x0000043d,0x00050086, + 0x00000015,0x0000043f,0x0000043c,0x0000043e,0x00050084,0x00000015,0x00000440,0x0000043f, + 0x0000006f,0x0004007c,0x0000003c,0x00000441,0x00000440,0x00050041,0x000001ed,0x00000443, + 0x000001ec,0x00000442,0x0004003d,0x00000015,0x00000444,0x00000443,0x0004007c,0x0000003c, + 0x00000445,0x00000444,0x00050082,0x0000003c,0x00000446,0x00000441,0x00000445,0x0004003d, + 0x00000015,0x00000447,0x00000426,0x000500c2,0x00000015,0x00000448,0x00000447,0x0000001e, + 0x0004007c,0x0000003c,0x00000449,0x00000448,0x00050080,0x0000003c,0x0000044a,0x00000446, + 0x00000449,0x0003003e,0x0000043b,0x0000044a,0x0004003d,0x0000003c,0x0000044b,0x0000042a, + 0x000500af,0x00000035,0x0000044c,0x0000044b,0x000001e1,0x0004003d,0x0000003c,0x0000044d, + 0x0000043b,0x000500af,0x00000035,0x0000044e,0x0000044d,0x000001e1,0x000500a7,0x00000035, + 0x0000044f,0x0000044c,0x0000044e,0x000300f7,0x00000451,0x00000000,0x000400fa,0x0000044f, + 0x00000450,0x00000451,0x000200f8,0x00000450,0x0004003d,0x0000003c,0x00000452,0x0000042a, + 0x00050041,0x000001ed,0x00000453,0x000001ec,0x000001e1,0x0004003d,0x00000015,0x00000454, + 0x00000453,0x0004007c,0x0000003c,0x00000455,0x00000454,0x000500b1,0x00000035,0x00000456, + 0x00000452,0x00000455,0x000200f9,0x00000451,0x000200f8,0x00000451,0x000700f5,0x00000035, + 0x00000457,0x0000044f,0x00000424,0x00000456,0x00000450,0x000300f7,0x00000459,0x00000000, + 0x000400fa,0x00000457,0x00000458,0x00000459,0x000200f8,0x00000458,0x0004003d,0x0000003c, + 0x0000045a,0x0000043b,0x00050041,0x000001ed,0x0000045b,0x000001ec,0x000000f9,0x0004003d, + 0x00000015,0x0000045c,0x0000045b,0x0004007c,0x0000003c,0x0000045d,0x0000045c,0x000500b1, + 0x00000035,0x0000045e,0x0000045a,0x0000045d,0x000200f9,0x00000459,0x000200f8,0x00000459, + 0x000700f5,0x00000035,0x0000045f,0x00000457,0x00000451,0x0000045e,0x00000458,0x000300f7, + 0x00000461,0x00000000,0x000400fa,0x0000045f,0x00000460,0x00000461,0x000200f8,0x00000460, + 0x0004003d,0x0000003c,0x00000463,0x0000043b,0x0004007c,0x00000015,0x00000464,0x00000463, + 0x00050041,0x000001ed,0x00000465,0x000001ec,0x000001e1,0x0004003d,0x00000015,0x00000466, + 0x00000465,0x00050084,0x00000015,0x00000467,0x00000464,0x00000466,0x0004003d,0x0000003c, + 0x00000468,0x0000042a,0x0004007c,0x00000015,0x00000469,0x00000468,0x00050080,0x00000015, + 0x0000046a,0x00000467,0x00000469,0x0003003e,0x00000462,0x0000046a,0x000300f7,0x0000046e, + 0x00000000,0x000400fa,0x0000046c,0x0000046d,0x00000486,0x000200f8,0x0000046d,0x0004003d, + 0x00000015,0x00000474,0x00000462,0x00050084,0x00000015,0x00000475,0x00000474,0x00000028, + 0x0004003d,0x00000015,0x00000476,0x000003c9,0x00050084,0x00000015,0x00000477,0x00000476, + 0x00000021,0x00050080,0x00000015,0x00000478,0x00000475,0x00000477,0x00060041,0x00000479, + 0x0000047a,0x00000473,0x000001e1,0x00000478,0x0004003d,0x0000046f,0x0000047b,0x0000047a, + 0x0004007c,0x000002d7,0x0000047c,0x0000047b,0x0003003e,0x00000414,0x0000047c,0x0004003d, + 0x00000015,0x0000047d,0x00000462,0x00050084,0x00000015,0x0000047e,0x0000047d,0x00000028, + 0x0004003d,0x00000015,0x0000047f,0x000003c9,0x00050084,0x00000015,0x00000480,0x0000047f, + 0x00000021,0x00050080,0x00000015,0x00000481,0x0000047e,0x00000480,0x00050080,0x00000015, + 0x00000482,0x00000481,0x0000006b,0x00060041,0x00000479,0x00000483,0x00000473,0x000001e1, + 0x00000482,0x0004003d,0x0000046f,0x00000484,0x00000483,0x0004007c,0x000002d7,0x00000485, + 0x00000484,0x0003003e,0x00000416,0x00000485,0x000200f9,0x0000046e,0x000200f8,0x00000486, + 0x000300f7,0x0000048a,0x00000000,0x000400fa,0x00000488,0x00000489,0x000004a9,0x000200f8, + 0x00000489,0x0004003d,0x00000015,0x0000048f,0x00000462,0x00050084,0x00000015,0x00000490, + 0x0000048f,0x00000021,0x0004003d,0x00000015,0x00000491,0x000003c9,0x00050080,0x00000015, + 0x00000492,0x00000490,0x00000491,0x00060041,0x000002df,0x00000493,0x0000048e,0x000001e1, + 0x00000492,0x0004003d,0x000002d7,0x00000494,0x00000493,0x0003003e,0x00000414,0x00000494, + 0x0004003d,0x0000003c,0x00000499,0x0000043b,0x0004007c,0x00000015,0x0000049a,0x00000499, + 0x000500c2,0x00000015,0x0000049b,0x0000049a,0x0000006b,0x00050041,0x000001ed,0x0000049d, + 0x000001ec,0x0000049c,0x0004003d,0x00000015,0x0000049e,0x0000049d,0x00050084,0x00000015, + 0x0000049f,0x0000049b,0x0000049e,0x0004003d,0x0000003c,0x000004a0,0x0000042a,0x0004007c, + 0x00000015,0x000004a1,0x000004a0,0x000500c2,0x00000015,0x000004a2,0x000004a1,0x0000006b, + 0x00050080,0x00000015,0x000004a3,0x0000049f,0x000004a2,0x00050084,0x00000015,0x000004a4, + 0x000004a3,0x00000021,0x0004003d,0x00000015,0x000004a5,0x000003c9,0x00050080,0x00000015, + 0x000004a6,0x000004a4,0x000004a5,0x00060041,0x000002df,0x000004a7,0x00000498,0x000001e1, + 0x000004a6,0x0004003d,0x000002d7,0x000004a8,0x000004a7,0x0003003e,0x00000416,0x000004a8, + 0x000200f9,0x0000048a,0x000200f8,0x000004a9,0x000300f7,0x000004ae,0x00000000,0x000400fa, + 0x000004ac,0x000004ad,0x000004cb,0x000200f8,0x000004ad,0x0004003d,0x00000015,0x000004af, + 0x00000462,0x00050084,0x00000015,0x000004b0,0x000004af,0x00000021,0x0004003d,0x00000015, + 0x000004b1,0x000003c9,0x00050080,0x00000015,0x000004b2,0x000004b0,0x000004b1,0x00060041, + 0x000002df,0x000004b3,0x0000048e,0x000001e1,0x000004b2,0x0004003d,0x000002d7,0x000004b4, + 0x000004b3,0x0003003e,0x00000414,0x000004b4,0x0004003d,0x0000003c,0x000004b6,0x0000043b, + 0x0004007c,0x00000015,0x000004b7,0x000004b6,0x000500c2,0x00000015,0x000004b8,0x000004b7, + 0x0000006b,0x00050041,0x000001ed,0x000004b9,0x000001ec,0x0000049c,0x0004003d,0x00000015, + 0x000004ba,0x000004b9,0x00050084,0x00000015,0x000004bb,0x000004b8,0x000004ba,0x0004003d, + 0x0000003c,0x000004bc,0x0000042a,0x0004007c,0x00000015,0x000004bd,0x000004bc,0x000500c2, + 0x00000015,0x000004be,0x000004bd,0x0000006b,0x00050080,0x00000015,0x000004bf,0x000004bb, + 0x000004be,0x00050084,0x00000015,0x000004c0,0x000004bf,0x00000028,0x0004003d,0x00000015, + 0x000004c1,0x000003c9,0x00050084,0x00000015,0x000004c2,0x000004c1,0x00000021,0x00050080, + 0x00000015,0x000004c3,0x000004c0,0x000004c2,0x0003003e,0x000004b5,0x000004c3,0x0004003d, + 0x00000015,0x000004c4,0x000004b5,0x00060041,0x000002df,0x000004c5,0x00000498,0x000001e1, + 0x000004c4,0x0004003d,0x000002d7,0x000004c6,0x000004c5,0x0003003e,0x00000416,0x000004c6, + 0x0004003d,0x00000015,0x000004c7,0x000004b5,0x00050080,0x00000015,0x000004c8,0x000004c7, + 0x0000006b,0x00060041,0x000002df,0x000004c9,0x00000498,0x000001e1,0x000004c8,0x0004003d, + 0x000002d7,0x000004ca,0x000004c9,0x0003003e,0x00000417,0x000004ca,0x000200f9,0x000004ae, + 0x000200f8,0x000004cb,0x0004003d,0x00000015,0x000004cc,0x00000462,0x00050084,0x00000015, + 0x000004cd,0x000004cc,0x00000021,0x0004003d,0x00000015,0x000004ce,0x000003c9,0x00050080, + 0x00000015,0x000004cf,0x000004cd,0x000004ce,0x00060041,0x000002df,0x000004d0,0x0000048e, + 0x000001e1,0x000004cf,0x0004003d,0x000002d7,0x000004d1,0x000004d0,0x0003003e,0x00000414, + 0x000004d1,0x000300f7,0x000004d5,0x00000000,0x000400fa,0x000004d3,0x000004d4,0x000004d5, + 0x000200f8,0x000004d4,0x0004003d,0x00000015,0x000004da,0x00000462,0x00050084,0x00000015, + 0x000004db,0x000004da,0x00000028,0x0004003d,0x00000015,0x000004dc,0x000003c9,0x00050084, + 0x00000015,0x000004dd,0x000004dc,0x00000021,0x00050080,0x00000015,0x000004de,0x000004db, + 0x000004dd,0x00060041,0x000002df,0x000004df,0x000004d9,0x000001e1,0x000004de,0x0004003d, + 0x000002d7,0x000004e0,0x000004df,0x0003003e,0x00000416,0x000004e0,0x0004003d,0x00000015, + 0x000004e1,0x00000462,0x00050084,0x00000015,0x000004e2,0x000004e1,0x00000028,0x0004003d, + 0x00000015,0x000004e3,0x000003c9,0x00050084,0x00000015,0x000004e4,0x000004e3,0x00000021, + 0x00050080,0x00000015,0x000004e5,0x000004e2,0x000004e4,0x00050080,0x00000015,0x000004e6, + 0x000004e5,0x0000006b,0x00060041,0x000002df,0x000004e7,0x000004d9,0x000001e1,0x000004e6, + 0x0004003d,0x000002d7,0x000004e8,0x000004e7,0x0003003e,0x00000417,0x000004e8,0x000200f9, + 0x000004d5,0x000200f8,0x000004d5,0x000200f9,0x000004ae,0x000200f8,0x000004ae,0x000200f9, + 0x0000048a,0x000200f8,0x0000048a,0x000200f9,0x0000046e,0x000200f8,0x0000046e,0x000200f9, + 0x00000461,0x000200f8,0x00000461,0x000200f9,0x00000425,0x000200f8,0x00000425,0x00050041, + 0x000002b2,0x000004ea,0x00000419,0x00000066,0x0004003d,0x00000015,0x000004eb,0x000004ea, + 0x0003003e,0x000004e9,0x000004eb,0x000200f9,0x000004ec,0x000200f8,0x000004ec,0x000400f6, + 0x000004ee,0x000004ef,0x00000000,0x000200f9,0x000004f0,0x000200f8,0x000004f0,0x0004003d, + 0x00000015,0x000004f1,0x000004e9,0x00050084,0x00000015,0x000004f2,0x000004f1,0x00000021, + 0x00050041,0x000001ed,0x000004f3,0x000001ec,0x00000420,0x0004003d,0x00000015,0x000004f4, + 0x000004f3,0x000500b0,0x00000035,0x000004f5,0x000004f2,0x000004f4,0x000400fa,0x000004f5, + 0x000004ed,0x000004ee,0x000200f8,0x000004ed,0x0004003d,0x00000015,0x000004f7,0x000004e9, + 0x00050084,0x00000015,0x000004f8,0x000004f7,0x00000021,0x0004003d,0x00000015,0x000004f9, + 0x000002b1,0x00050080,0x00000015,0x000004fa,0x000004f8,0x000004f9,0x0003003e,0x000004f6, + 0x000004fa,0x0004003d,0x00000015,0x000004fc,0x000004f6,0x00050041,0x000001ed,0x000004fd, + 0x000001ec,0x00000420,0x0004003d,0x00000015,0x000004fe,0x000004fd,0x000500b0,0x00000035, + 0x000004ff,0x000004fc,0x000004fe,0x0003003e,0x000004fb,0x000004ff,0x0004003d,0x00000035, + 0x00000501,0x000004fb,0x0004003d,0x00000015,0x00000502,0x000004f6,0x000600a9,0x00000015, + 0x00000503,0x00000501,0x00000502,0x00000066,0x0003003e,0x00000500,0x00000503,0x0004003d, + 0x00000015,0x00000505,0x00000500,0x00050041,0x000001ed,0x00000506,0x000001ec,0x0000042c, + 0x0004003d,0x00000015,0x00000507,0x00000506,0x00050089,0x00000015,0x00000508,0x00000505, + 0x00000507,0x00050084,0x00000015,0x00000509,0x00000508,0x0000006f,0x0004007c,0x0000003c, + 0x0000050a,0x00000509,0x00050041,0x000001ed,0x0000050b,0x000001ec,0x00000432,0x0004003d, + 0x00000015,0x0000050c,0x0000050b,0x0004007c,0x0000003c,0x0000050d,0x0000050c,0x00050082, + 0x0000003c,0x0000050e,0x0000050a,0x0000050d,0x0003003e,0x00000504,0x0000050e,0x0004003d, + 0x00000015,0x00000510,0x00000500,0x00050041,0x000001ed,0x00000511,0x000001ec,0x0000042c, + 0x0004003d,0x00000015,0x00000512,0x00000511,0x00050086,0x00000015,0x00000513,0x00000510, + 0x00000512,0x00050084,0x00000015,0x00000514,0x00000513,0x0000006f,0x0004007c,0x0000003c, + 0x00000515,0x00000514,0x00050041,0x000001ed,0x00000516,0x000001ec,0x00000442,0x0004003d, + 0x00000015,0x00000517,0x00000516,0x0004007c,0x0000003c,0x00000518,0x00000517,0x00050082, + 0x0000003c,0x00000519,0x00000515,0x00000518,0x0003003e,0x0000050f,0x00000519,0x000314fc, + 0x0000051a,0x0000051d,0x0003003e,0x0000051c,0x0000051d,0x0004003d,0x0000051a,0x0000051e, + 0x0000051c,0x00050041,0x000001ed,0x0000051f,0x000001ec,0x000000f9,0x0004003d,0x00000015, + 0x00000520,0x0000051f,0x00050041,0x000001ed,0x00000521,0x000001ec,0x000001e1,0x0004003d, + 0x00000015,0x00000522,0x00000521,0x000714fd,0x0000051a,0x00000523,0x0000051e,0x00000520, + 0x00000522,0x00000020,0x0003003e,0x0000051c,0x00000523,0x0004003d,0x0000051a,0x00000524, + 0x0000051c,0x00050041,0x000001ed,0x00000525,0x000001ec,0x000001e1,0x0004003d,0x00000015, + 0x00000526,0x00000525,0x00050084,0x00000015,0x00000527,0x00000526,0x00000020,0x000714fe, + 0x0000051a,0x00000528,0x00000524,0x00000527,0x00000020,0x0000006b,0x0003003e,0x0000051c, + 0x00000528,0x0004003d,0x0000051a,0x0000052a,0x0000051c,0x0004003d,0x0000003c,0x0000052b, + 0x0000050f,0x0004003d,0x00000015,0x0000052c,0x000002b6,0x00050084,0x00000015,0x0000052d, + 0x0000052c,0x00000021,0x0004007c,0x0000003c,0x0000052e,0x0000052d,0x00050080,0x0000003c, + 0x0000052f,0x0000052b,0x0000052e,0x0004007c,0x00000015,0x00000530,0x0000052f,0x0004003d, + 0x0000003c,0x00000531,0x00000504,0x0004007c,0x00000015,0x00000532,0x00000531,0x000a14ff, + 0x0000051a,0x00000533,0x0000052a,0x00000530,0x00000021,0x00000532,0x0000006f,0x00000066, + 0x00000020,0x0003003e,0x00000529,0x00000533,0x000300f7,0x00000537,0x00000000,0x000400fa, + 0x00000535,0x00000536,0x00000581,0x000200f8,0x00000536,0x0004003d,0x00000015,0x00000539, + 0x00000365,0x0004003d,0x00000015,0x0000053a,0x000003c6,0x00050084,0x00000015,0x0000053b, + 0x0000053a,0x00000021,0x0004003d,0x00000015,0x0000053c,0x000003c9,0x00050080,0x00000015, + 0x0000053d,0x0000053b,0x0000053c,0x00050084,0x00000015,0x0000053e,0x0000053d,0x00000028, + 0x00050080,0x00000015,0x0000053f,0x00000539,0x0000053e,0x0003003e,0x00000538,0x0000053f, + 0x0004003d,0x00000015,0x00000544,0x00000538,0x0004003d,0x000002d7,0x00000546,0x00000414, + 0x0007004f,0x00000545,0x00000547,0x00000546,0x00000546,0x00000000,0x00000001,0x0004007c, + 0x000000ba,0x00000548,0x00000547,0x00040073,0x00000007,0x00000549,0x00000548,0x0004007c, + 0x00000015,0x0000054a,0x00000549,0x00050041,0x0000054b,0x0000054c,0x00000543,0x00000544, + 0x0005003e,0x0000054c,0x0000054a,0x00000028,0x00000021,0x0004003d,0x00000015,0x0000054d, + 0x00000538,0x00050080,0x00000015,0x0000054e,0x0000054d,0x0000006b,0x0004003d,0x000002d7, + 0x0000054f,0x00000414,0x0007004f,0x00000545,0x00000550,0x0000054f,0x0000054f,0x00000002, + 0x00000003,0x0004007c,0x000000ba,0x00000551,0x00000550,0x00040073,0x00000007,0x00000552, + 0x00000551,0x0004007c,0x00000015,0x00000553,0x00000552,0x00050041,0x0000054b,0x00000554, + 0x00000543,0x0000054e,0x0005003e,0x00000554,0x00000553,0x00000028,0x00000021,0x0004003d, + 0x00000015,0x00000555,0x00000538,0x00050080,0x00000015,0x00000556,0x00000555,0x00000021, + 0x0004003d,0x000002d7,0x00000557,0x00000416,0x0007004f,0x00000545,0x00000558,0x00000557, + 0x00000557,0x00000000,0x00000001,0x0004007c,0x000000ba,0x00000559,0x00000558,0x00040073, + 0x00000007,0x0000055a,0x00000559,0x0004007c,0x00000015,0x0000055b,0x0000055a,0x00050041, + 0x0000054b,0x0000055c,0x00000543,0x00000556,0x0005003e,0x0000055c,0x0000055b,0x00000028, + 0x00000021,0x0004003d,0x00000015,0x0000055d,0x00000538,0x00050080,0x00000015,0x0000055e, + 0x0000055d,0x0000001e,0x0004003d,0x000002d7,0x0000055f,0x00000416,0x0007004f,0x00000545, + 0x00000560,0x0000055f,0x0000055f,0x00000002,0x00000003,0x0004007c,0x000000ba,0x00000561, + 0x00000560,0x00040073,0x00000007,0x00000562,0x00000561,0x0004007c,0x00000015,0x00000563, + 0x00000562,0x00050041,0x0000054b,0x00000564,0x00000543,0x0000055e,0x0005003e,0x00000564, + 0x00000563,0x00000028,0x00000021,0x000400e0,0x0000001e,0x0000001e,0x00000565,0x0004003d, + 0x00000015,0x00000569,0x00000365,0x00050041,0x0000054b,0x0000056a,0x00000543,0x00000569, + 0x00081169,0x00000566,0x0000056b,0x0000056a,0x000001e1,0x0000006f,0x00000030,0x00000021, + 0x0003003e,0x00000568,0x0000056b,0x000400e0,0x0000001e,0x0000001e,0x00000565,0x00050041, + 0x00000342,0x0000056f,0x00000358,0x00000066,0x00081169,0x0000056c,0x00000570,0x0000056f, + 0x000001e1,0x00000020,0x00000030,0x00000021,0x0003003e,0x0000056e,0x00000570,0x0003003e, + 0x00000571,0x00000572,0x0004003d,0x00000566,0x00000573,0x00000568,0x0004003d,0x0000056c, + 0x00000574,0x0000056e,0x0004003d,0x00000022,0x00000575,0x00000571,0x0006116b,0x00000022, + 0x00000576,0x00000573,0x00000574,0x00000575,0x0003003e,0x00000571,0x00000576,0x0004003d, + 0x00000022,0x00000578,0x00000571,0x0003003e,0x00000577,0x00000578,0x0004003d,0x00000022, + 0x0000057a,0x00000571,0x000514f9,0x00000022,0x0000057b,0x0000057a,0x00000033,0x0003003e, + 0x00000579,0x0000057b,0x0004003d,0x00000022,0x0000057f,0x00000579,0x00040073,0x0000057c, + 0x00000580,0x0000057f,0x0003003e,0x0000057e,0x00000580,0x000200f9,0x00000537,0x000200f8, + 0x00000581,0x000300f7,0x00000585,0x00000000,0x000400fa,0x00000583,0x00000584,0x00000640, + 0x000200f8,0x00000584,0x0003003e,0x00000586,0x00000066,0x000200f9,0x00000587,0x000200f8, + 0x00000587,0x000400f6,0x00000589,0x0000058a,0x00000001,0x000200f9,0x0000058b,0x000200f8, + 0x0000058b,0x0004003d,0x00000015,0x0000058c,0x00000586,0x000500b0,0x00000035,0x0000058d, + 0x0000058c,0x0000006f,0x000400fa,0x0000058d,0x00000588,0x00000589,0x000200f8,0x00000588, + 0x0004003d,0x00000015,0x0000058f,0x00000586,0x000500c2,0x00000015,0x00000590,0x0000058f, + 0x0000006b,0x00050041,0x00000016,0x00000591,0x00000414,0x00000590,0x0004003d,0x00000015, + 0x00000592,0x00000591,0x0004003d,0x00000015,0x00000593,0x00000586,0x000500c7,0x00000015, + 0x00000594,0x00000593,0x0000006b,0x00050084,0x00000015,0x00000595,0x00000594,0x0000001f, + 0x000500c2,0x00000015,0x00000596,0x00000592,0x00000595,0x000500c7,0x00000015,0x00000598, + 0x00000596,0x00000597,0x0003003e,0x0000058e,0x00000598,0x0004003d,0x00000015,0x0000059a, + 0x00000586,0x00050041,0x00000016,0x0000059b,0x000003e1,0x0000059a,0x0004003d,0x00000015, + 0x0000059c,0x0000059b,0x0004007c,0x00000007,0x0000059d,0x0000059c,0x0003003e,0x00000599, + 0x0000059d,0x0004003d,0x00000015,0x0000059f,0x0000058e,0x000500c7,0x00000015,0x000005a0, + 0x0000059f,0x0000029c,0x00040071,0x00000060,0x000005a1,0x000005a0,0x0004003d,0x00000015, + 0x000005a2,0x0000058e,0x000500c2,0x00000015,0x000005a3,0x000005a2,0x0000006f,0x00040071, + 0x00000060,0x000005a4,0x000005a3,0x00050050,0x00000061,0x000005a5,0x000005a1,0x000005a4, + 0x0004007c,0x0000005b,0x000005a6,0x000005a5,0x00040073,0x00000007,0x000005a7,0x000005a6, + 0x0003003e,0x0000059e,0x000005a7,0x0004003d,0x00000007,0x000005a8,0x0000059e,0x0004003d, + 0x00000007,0x000005a9,0x0000059e,0x0004009c,0x00000057,0x000005aa,0x000005a9,0x000600a9, + 0x00000007,0x000005ab,0x000005aa,0x00000055,0x000005a8,0x0003003e,0x0000059e,0x000005ab, + 0x000300f7,0x000005af,0x00000000,0x000400fa,0x000005ad,0x000005ae,0x000005ca,0x000200f8, + 0x000005ae,0x0004003d,0x00000015,0x000005b1,0x00000586,0x000500b0,0x00000035,0x000005b2, + 0x000005b1,0x00000028,0x000300f7,0x000005b5,0x00000000,0x000400fa,0x000005b2,0x000005b4, + 0x000005b9,0x000200f8,0x000005b4,0x0004003d,0x00000015,0x000005b6,0x00000586,0x00050041, + 0x00000016,0x000005b7,0x00000416,0x000005b6,0x0004003d,0x00000015,0x000005b8,0x000005b7, + 0x0003003e,0x000005b3,0x000005b8,0x000200f9,0x000005b5,0x000200f8,0x000005b9,0x0004003d, + 0x00000015,0x000005ba,0x00000586,0x00050082,0x00000015,0x000005bb,0x000005ba,0x00000028, + 0x00050041,0x00000016,0x000005bc,0x00000417,0x000005bb,0x0004003d,0x00000015,0x000005bd, + 0x000005bc,0x0003003e,0x000005b3,0x000005bd,0x000200f9,0x000005b5,0x000200f8,0x000005b5, + 0x0004003d,0x00000015,0x000005be,0x000005b3,0x0004007c,0x00000007,0x000005bf,0x000005be, + 0x0003003e,0x000005b0,0x000005bf,0x0004003d,0x00000007,0x000005c1,0x0000059e,0x0004003d, + 0x00000007,0x000005c2,0x00000599,0x0004003d,0x00000007,0x000005c3,0x000005b0,0x0008000c, + 0x00000007,0x000005c4,0x00000001,0x00000032,0x000005c1,0x000005c2,0x000005c3,0x0003003e, + 0x000005c0,0x000005c4,0x0004003d,0x00000015,0x000005c6,0x00000586,0x0004003d,0x00000007, + 0x000005c7,0x000005c0,0x0004007c,0x00000015,0x000005c8,0x000005c7,0x00050041,0x00000016, + 0x000005c9,0x000005c5,0x000005c6,0x0003003e,0x000005c9,0x000005c8,0x000200f9,0x000005af, + 0x000200f8,0x000005ca,0x0004003d,0x00000015,0x000005cc,0x00000586,0x000500c2,0x00000015, + 0x000005cd,0x000005cc,0x0000006b,0x00050041,0x00000016,0x000005ce,0x00000416,0x000005cd, + 0x0004003d,0x00000015,0x000005cf,0x000005ce,0x0004003d,0x00000015,0x000005d0,0x00000586, + 0x000500c7,0x00000015,0x000005d1,0x000005d0,0x0000006b,0x00050084,0x00000015,0x000005d2, + 0x000005d1,0x0000001f,0x000500c2,0x00000015,0x000005d3,0x000005cf,0x000005d2,0x000500c7, + 0x00000015,0x000005d4,0x000005d3,0x00000597,0x0003003e,0x000005cb,0x000005d4,0x0004003d, + 0x00000015,0x000005d6,0x00000586,0x00050041,0x00000016,0x000005d7,0x000003f6,0x000005d6, + 0x0004003d,0x00000015,0x000005d8,0x000005d7,0x0004007c,0x00000007,0x000005d9,0x000005d8, + 0x0003003e,0x000005d5,0x000005d9,0x0004003d,0x00000015,0x000005db,0x000005cb,0x000500c7, + 0x00000015,0x000005dc,0x000005db,0x0000029c,0x00040071,0x00000060,0x000005dd,0x000005dc, + 0x0004003d,0x00000015,0x000005de,0x000005cb,0x000500c2,0x00000015,0x000005df,0x000005de, + 0x0000006f,0x00040071,0x00000060,0x000005e0,0x000005df,0x00050050,0x00000061,0x000005e1, + 0x000005dd,0x000005e0,0x0004007c,0x0000005b,0x000005e2,0x000005e1,0x00040073,0x00000007, + 0x000005e3,0x000005e2,0x0003003e,0x000005da,0x000005e3,0x0004003d,0x00000007,0x000005e4, + 0x000005da,0x0004003d,0x00000007,0x000005e5,0x000005da,0x0004009c,0x00000057,0x000005e6, + 0x000005e5,0x000600a9,0x00000007,0x000005e7,0x000005e6,0x00000055,0x000005e4,0x0003003e, + 0x000005da,0x000005e7,0x0004003d,0x00000007,0x000005e9,0x000005da,0x0004003d,0x00000007, + 0x000005ea,0x00000599,0x00050085,0x00000007,0x000005eb,0x000005e9,0x000005ea,0x0003003e, + 0x000005e8,0x000005eb,0x0004003d,0x00000007,0x000005ed,0x0000059e,0x0004003d,0x00000007, + 0x000005ee,0x000005d5,0x0004003d,0x00000007,0x000005ef,0x000005e8,0x0008000c,0x00000007, + 0x000005f0,0x00000001,0x00000032,0x000005ed,0x000005ee,0x000005ef,0x0003003e,0x000005ec, + 0x000005f0,0x0004003d,0x00000015,0x000005f1,0x00000586,0x0004003d,0x00000007,0x000005f2, + 0x000005ec,0x0004007c,0x00000015,0x000005f3,0x000005f2,0x00050041,0x00000016,0x000005f4, + 0x000005c5,0x000005f1,0x0003003e,0x000005f4,0x000005f3,0x000200f9,0x000005af,0x000200f8, + 0x000005af,0x000200f9,0x0000058a,0x000200f8,0x0000058a,0x0004003d,0x00000015,0x000005f5, + 0x00000586,0x00050080,0x00000015,0x000005f6,0x000005f5,0x000000f9,0x0003003e,0x00000586, + 0x000005f6,0x000200f9,0x00000587,0x000200f8,0x00000589,0x0004003d,0x00000015,0x000005f8, + 0x00000365,0x0004003d,0x00000015,0x000005f9,0x000003c6,0x00050084,0x00000015,0x000005fa, + 0x000005f9,0x00000028,0x0004003d,0x00000015,0x000005fb,0x000003c9,0x00050084,0x00000015, + 0x000005fc,0x000005fb,0x00000021,0x00050080,0x00000015,0x000005fd,0x000005fa,0x000005fc, + 0x00050084,0x00000015,0x000005fe,0x000005fd,0x00000028,0x00050080,0x00000015,0x000005ff, + 0x000005f8,0x000005fe,0x0003003e,0x000005f7,0x000005ff,0x0003003e,0x00000600,0x00000066, + 0x000200f9,0x00000601,0x000200f8,0x00000601,0x000400f6,0x00000603,0x00000604,0x00000001, + 0x000200f9,0x00000605,0x000200f8,0x00000605,0x0004003d,0x00000015,0x00000606,0x00000600, + 0x000500b0,0x00000035,0x00000607,0x00000606,0x0000006f,0x000400fa,0x00000607,0x00000602, + 0x00000603,0x000200f8,0x00000602,0x0004003d,0x00000015,0x00000608,0x000005f7,0x0004003d, + 0x00000015,0x00000609,0x00000600,0x00050080,0x00000015,0x0000060a,0x00000608,0x00000609, + 0x0004003d,0x00000015,0x0000060b,0x00000600,0x00050041,0x00000016,0x0000060c,0x000005c5, + 0x0000060b,0x0004003d,0x00000015,0x0000060d,0x0000060c,0x00050041,0x0000054b,0x0000060e, + 0x00000543,0x0000060a,0x0005003e,0x0000060e,0x0000060d,0x00000028,0x00000021,0x000200f9, + 0x00000604,0x000200f8,0x00000604,0x0004003d,0x00000015,0x0000060f,0x00000600,0x00050080, + 0x00000015,0x00000610,0x0000060f,0x000000f9,0x0003003e,0x00000600,0x00000610,0x000200f9, + 0x00000601,0x000200f8,0x00000603,0x000400e0,0x0000001e,0x0000001e,0x00000565,0x0004003d, + 0x00000015,0x00000611,0x00000365,0x00050041,0x0000054b,0x00000612,0x00000543,0x00000611, + 0x00081169,0x00000022,0x00000613,0x00000612,0x000001e1,0x0000001f,0x00000030,0x00000021, + 0x0003003e,0x00000577,0x00000613,0x000400e0,0x0000001e,0x0000001e,0x00000565,0x0004003d, + 0x00000015,0x00000615,0x00000365,0x0004003d,0x00000015,0x00000616,0x000003c6,0x00050084, + 0x00000015,0x00000617,0x00000616,0x00000021,0x0004003d,0x00000015,0x00000618,0x000003c9, + 0x00050080,0x00000015,0x00000619,0x00000617,0x00000618,0x00050084,0x00000015,0x0000061a, + 0x00000619,0x00000028,0x00050080,0x00000015,0x0000061b,0x00000615,0x0000061a,0x0003003e, + 0x00000614,0x0000061b,0x0003003e,0x0000061c,0x00000066,0x000200f9,0x0000061d,0x000200f8, + 0x0000061d,0x000400f6,0x0000061f,0x00000620,0x00000001,0x000200f9,0x00000621,0x000200f8, + 0x00000621,0x0004003d,0x00000015,0x00000622,0x0000061c,0x000500b0,0x00000035,0x00000623, + 0x00000622,0x00000028,0x000400fa,0x00000623,0x0000061e,0x0000061f,0x000200f8,0x0000061e, + 0x0004003d,0x00000015,0x00000624,0x00000614,0x0004003d,0x00000015,0x00000625,0x0000061c, + 0x00050080,0x00000015,0x00000626,0x00000624,0x00000625,0x0004003d,0x00000015,0x00000627, + 0x0000061c,0x00050084,0x00000015,0x00000628,0x00000021,0x00000627,0x00050041,0x00000016, + 0x00000629,0x000005c5,0x00000628,0x0004003d,0x00000015,0x0000062a,0x00000629,0x0004007c, + 0x00000007,0x0000062b,0x0000062a,0x0003003e,0x0000062c,0x0000062b,0x00050039,0x00000009, + 0x0000062d,0x0000000c,0x0000062c,0x00040071,0x00000015,0x0000062e,0x0000062d,0x0004003d, + 0x00000015,0x0000062f,0x0000061c,0x00050084,0x00000015,0x00000630,0x00000021,0x0000062f, + 0x00050080,0x00000015,0x00000631,0x00000630,0x0000006b,0x00050041,0x00000016,0x00000632, + 0x000005c5,0x00000631,0x0004003d,0x00000015,0x00000633,0x00000632,0x0004007c,0x00000007, + 0x00000634,0x00000633,0x0003003e,0x00000635,0x00000634,0x00050039,0x00000009,0x00000636, + 0x0000000c,0x00000635,0x00040071,0x00000015,0x00000637,0x00000636,0x000500c4,0x00000015, + 0x00000638,0x00000637,0x0000001f,0x000500c5,0x00000015,0x00000639,0x0000062e,0x00000638, + 0x00050041,0x0000054b,0x0000063a,0x00000543,0x00000626,0x0005003e,0x0000063a,0x00000639, + 0x00000028,0x00000021,0x000200f9,0x00000620,0x000200f8,0x00000620,0x0004003d,0x00000015, + 0x0000063b,0x0000061c,0x00050080,0x00000015,0x0000063c,0x0000063b,0x000000f9,0x0003003e, + 0x0000061c,0x0000063c,0x000200f9,0x0000061d,0x000200f8,0x0000061f,0x000400e0,0x0000001e, + 0x0000001e,0x00000565,0x0004003d,0x00000015,0x0000063d,0x00000365,0x00050041,0x0000054b, + 0x0000063e,0x00000543,0x0000063d,0x00081169,0x0000057c,0x0000063f,0x0000063e,0x000001e1, + 0x0000006f,0x00000030,0x00000021,0x0003003e,0x0000057e,0x0000063f,0x000400e0,0x0000001e, + 0x0000001e,0x00000565,0x000200f9,0x00000585,0x000200f8,0x00000640,0x0004003d,0x00000015, + 0x00000642,0x00000365,0x0004003d,0x00000015,0x00000643,0x000003c6,0x00050084,0x00000015, + 0x00000644,0x00000643,0x00000021,0x0004003d,0x00000015,0x00000645,0x000003c9,0x00050080, + 0x00000015,0x00000646,0x00000644,0x00000645,0x00050084,0x00000015,0x00000647,0x00000646, + 0x00000028,0x00050080,0x00000015,0x00000648,0x00000642,0x00000647,0x0003003e,0x00000641, + 0x00000648,0x0004003d,0x00000015,0x00000649,0x00000641,0x00050041,0x00000016,0x0000064a, + 0x00000414,0x00000066,0x0004003d,0x00000015,0x0000064b,0x0000064a,0x00050041,0x0000054b, + 0x0000064c,0x00000543,0x00000649,0x0005003e,0x0000064c,0x0000064b,0x00000028,0x00000021, + 0x0004003d,0x00000015,0x0000064d,0x00000641,0x00050080,0x00000015,0x0000064e,0x0000064d, + 0x0000006b,0x00050041,0x00000016,0x0000064f,0x00000414,0x0000006b,0x0004003d,0x00000015, + 0x00000650,0x0000064f,0x00050041,0x0000054b,0x00000651,0x00000543,0x0000064e,0x0005003e, + 0x00000651,0x00000650,0x00000028,0x00000021,0x0004003d,0x00000015,0x00000652,0x00000641, + 0x00050080,0x00000015,0x00000653,0x00000652,0x00000021,0x00050041,0x00000016,0x00000654, + 0x00000414,0x00000021,0x0004003d,0x00000015,0x00000655,0x00000654,0x00050041,0x0000054b, + 0x00000656,0x00000543,0x00000653,0x0005003e,0x00000656,0x00000655,0x00000028,0x00000021, + 0x0004003d,0x00000015,0x00000657,0x00000641,0x00050080,0x00000015,0x00000658,0x00000657, + 0x0000001e,0x00050041,0x00000016,0x00000659,0x00000414,0x0000001e,0x0004003d,0x00000015, + 0x0000065a,0x00000659,0x00050041,0x0000054b,0x0000065b,0x00000543,0x00000658,0x0005003e, + 0x0000065b,0x0000065a,0x00000028,0x00000021,0x000400e0,0x0000001e,0x0000001e,0x00000565, + 0x0004003d,0x00000015,0x0000065c,0x00000365,0x00050041,0x0000054b,0x0000065d,0x00000543, + 0x0000065c,0x00081169,0x0000057c,0x0000065e,0x0000065d,0x000001e1,0x0000006f,0x00000030, + 0x00000021,0x0003003e,0x0000057e,0x0000065e,0x000400e0,0x0000001e,0x0000001e,0x00000565, + 0x0004003d,0x000002d7,0x00000660,0x00000416,0x0003003e,0x0000065f,0x00000660,0x0004003d, + 0x000002d7,0x00000662,0x00000417,0x0003003e,0x00000661,0x00000662,0x000300f7,0x00000666, + 0x00000000,0x000400fa,0x00000664,0x00000665,0x00000666,0x000200f8,0x00000665,0x0003003e, + 0x00000667,0x00000066,0x000200f9,0x00000668,0x000200f8,0x00000668,0x000400f6,0x0000066a, + 0x0000066b,0x00000001,0x000200f9,0x0000066c,0x000200f8,0x0000066c,0x0004003d,0x00000015, + 0x0000066d,0x00000667,0x000500b0,0x00000035,0x0000066e,0x0000066d,0x0000006f,0x000400fa, + 0x0000066e,0x00000669,0x0000066a,0x000200f8,0x00000669,0x0004003d,0x00000015,0x00000670, + 0x00000667,0x000500c2,0x00000015,0x00000671,0x00000670,0x0000006b,0x00050041,0x00000016, + 0x00000672,0x00000414,0x00000671,0x0004003d,0x00000015,0x00000673,0x00000672,0x0004003d, + 0x00000015,0x00000674,0x00000667,0x000500c7,0x00000015,0x00000675,0x00000674,0x0000006b, + 0x00050084,0x00000015,0x00000676,0x00000675,0x0000001f,0x000500c2,0x00000015,0x00000677, + 0x00000673,0x00000676,0x000500c7,0x00000015,0x00000678,0x00000677,0x00000597,0x0003003e, + 0x0000066f,0x00000678,0x0004003d,0x00000015,0x0000067a,0x00000667,0x0004003d,0x00000015, + 0x0000067b,0x0000066f,0x000500c7,0x00000015,0x0000067c,0x0000067b,0x0000029c,0x00040071, + 0x00000060,0x0000067d,0x0000067c,0x0004003d,0x00000015,0x0000067e,0x0000066f,0x000500c2, + 0x00000015,0x0000067f,0x0000067e,0x0000006f,0x00040071,0x00000060,0x00000680,0x0000067f, + 0x00050050,0x00000061,0x00000681,0x0000067d,0x00000680,0x0004007c,0x0000005b,0x00000682, + 0x00000681,0x00040073,0x00000007,0x00000683,0x00000682,0x0004007c,0x00000015,0x00000684, + 0x00000683,0x00050041,0x00000016,0x00000685,0x00000679,0x0000067a,0x0003003e,0x00000685, + 0x00000684,0x000200f9,0x0000066b,0x000200f8,0x0000066b,0x0004003d,0x00000015,0x00000686, + 0x00000667,0x00050080,0x00000015,0x00000687,0x00000686,0x000000f9,0x0003003e,0x00000667, + 0x00000687,0x000200f9,0x00000668,0x000200f8,0x0000066a,0x00050041,0x00000016,0x00000688, + 0x00000679,0x000001e1,0x0004003d,0x00000015,0x00000689,0x00000688,0x00050041,0x00000016, + 0x0000068a,0x00000679,0x000000f9,0x0004003d,0x00000015,0x0000068b,0x0000068a,0x00050041, + 0x00000016,0x0000068c,0x00000679,0x00000432,0x0004003d,0x00000015,0x0000068d,0x0000068c, + 0x00050041,0x00000016,0x0000068e,0x00000679,0x00000442,0x0004003d,0x00000015,0x0000068f, + 0x0000068e,0x00070050,0x000002d7,0x00000690,0x00000689,0x0000068b,0x0000068d,0x0000068f, + 0x0003003e,0x0000065f,0x00000690,0x00050041,0x00000016,0x00000691,0x00000679,0x0000042c, + 0x0004003d,0x00000015,0x00000692,0x00000691,0x00050041,0x00000016,0x00000693,0x00000679, + 0x00000420,0x0004003d,0x00000015,0x00000694,0x00000693,0x00050041,0x00000016,0x00000696, + 0x00000679,0x00000695,0x0004003d,0x00000015,0x00000697,0x00000696,0x00050041,0x00000016, + 0x00000698,0x00000679,0x00000388,0x0004003d,0x00000015,0x00000699,0x00000698,0x00070050, + 0x000002d7,0x0000069a,0x00000692,0x00000694,0x00000697,0x00000699,0x0003003e,0x00000661, + 0x0000069a,0x000200f9,0x00000666,0x000200f8,0x00000666,0x0004003d,0x00000015,0x0000069c, + 0x00000365,0x0004003d,0x00000015,0x0000069d,0x000003c6,0x00050084,0x00000015,0x0000069e, + 0x0000069d,0x00000028,0x0004003d,0x00000015,0x0000069f,0x000003c9,0x00050084,0x00000015, + 0x000006a0,0x0000069f,0x00000021,0x00050080,0x00000015,0x000006a1,0x0000069e,0x000006a0, + 0x00050084,0x00000015,0x000006a2,0x000006a1,0x00000028,0x00050080,0x00000015,0x000006a3, + 0x0000069c,0x000006a2,0x0003003e,0x0000069b,0x000006a3,0x0004003d,0x00000015,0x000006a4, + 0x0000069b,0x00050041,0x00000016,0x000006a5,0x0000065f,0x00000066,0x0004003d,0x00000015, + 0x000006a6,0x000006a5,0x00050041,0x0000054b,0x000006a7,0x00000543,0x000006a4,0x0005003e, + 0x000006a7,0x000006a6,0x00000028,0x00000021,0x0004003d,0x00000015,0x000006a8,0x0000069b, + 0x00050080,0x00000015,0x000006a9,0x000006a8,0x0000006b,0x00050041,0x00000016,0x000006aa, + 0x0000065f,0x0000006b,0x0004003d,0x00000015,0x000006ab,0x000006aa,0x00050041,0x0000054b, + 0x000006ac,0x00000543,0x000006a9,0x0005003e,0x000006ac,0x000006ab,0x00000028,0x00000021, + 0x0004003d,0x00000015,0x000006ad,0x0000069b,0x00050080,0x00000015,0x000006ae,0x000006ad, + 0x00000021,0x00050041,0x00000016,0x000006af,0x0000065f,0x00000021,0x0004003d,0x00000015, + 0x000006b0,0x000006af,0x00050041,0x0000054b,0x000006b1,0x00000543,0x000006ae,0x0005003e, + 0x000006b1,0x000006b0,0x00000028,0x00000021,0x0004003d,0x00000015,0x000006b2,0x0000069b, + 0x00050080,0x00000015,0x000006b3,0x000006b2,0x0000001e,0x00050041,0x00000016,0x000006b4, + 0x0000065f,0x0000001e,0x0004003d,0x00000015,0x000006b5,0x000006b4,0x00050041,0x0000054b, + 0x000006b6,0x00000543,0x000006b3,0x0005003e,0x000006b6,0x000006b5,0x00000028,0x00000021, + 0x0004003d,0x00000015,0x000006b7,0x0000069b,0x00050080,0x00000015,0x000006b8,0x000006b7, + 0x00000028,0x00050041,0x00000016,0x000006b9,0x00000661,0x00000066,0x0004003d,0x00000015, + 0x000006ba,0x000006b9,0x00050041,0x0000054b,0x000006bb,0x00000543,0x000006b8,0x0005003e, + 0x000006bb,0x000006ba,0x00000028,0x00000021,0x0004003d,0x00000015,0x000006bc,0x0000069b, + 0x00050080,0x00000015,0x000006bd,0x000006bc,0x000000cf,0x00050041,0x00000016,0x000006be, + 0x00000661,0x0000006b,0x0004003d,0x00000015,0x000006bf,0x000006be,0x00050041,0x0000054b, + 0x000006c0,0x00000543,0x000006bd,0x0005003e,0x000006c0,0x000006bf,0x00000028,0x00000021, + 0x0004003d,0x00000015,0x000006c1,0x0000069b,0x00050080,0x00000015,0x000006c2,0x000006c1, + 0x00000166,0x00050041,0x00000016,0x000006c3,0x00000661,0x00000021,0x0004003d,0x00000015, + 0x000006c4,0x000006c3,0x00050041,0x0000054b,0x000006c5,0x00000543,0x000006c2,0x0005003e, + 0x000006c5,0x000006c4,0x00000028,0x00000021,0x0004003d,0x00000015,0x000006c6,0x0000069b, + 0x00050080,0x00000015,0x000006c7,0x000006c6,0x000000a4,0x00050041,0x00000016,0x000006c8, + 0x00000661,0x0000001e,0x0004003d,0x00000015,0x000006c9,0x000006c8,0x00050041,0x0000054b, + 0x000006ca,0x00000543,0x000006c7,0x0005003e,0x000006ca,0x000006c9,0x00000028,0x00000021, + 0x000400e0,0x0000001e,0x0000001e,0x00000565,0x0004003d,0x00000015,0x000006cb,0x00000365, + 0x00050041,0x0000054b,0x000006cc,0x00000543,0x000006cb,0x00081169,0x00000022,0x000006cd, + 0x000006cc,0x000001e1,0x0000001f,0x00000030,0x00000021,0x0003003e,0x00000577,0x000006cd, + 0x000400e0,0x0000001e,0x0000001e,0x00000565,0x000200f9,0x00000585,0x000200f8,0x00000585, + 0x000200f9,0x00000537,0x000200f8,0x00000537,0x0004003d,0x00000029,0x000006ce,0x00000382, + 0x0004003d,0x00000022,0x000006d0,0x00000577,0x0003003e,0x000006cf,0x000006d0,0x00060039, + 0x00000002,0x000006d1,0x0000002d,0x000006cf,0x000006ce,0x0004003d,0x00000022,0x000006d2, + 0x000006cf,0x0003003e,0x00000577,0x000006d2,0x0004003d,0x00000015,0x000006d4,0x000004e9, + 0x00050041,0x000001ed,0x000006d5,0x000001ec,0x00000695,0x0004003d,0x00000015,0x000006d6, + 0x000006d5,0x00050080,0x00000015,0x000006d7,0x000006d4,0x000006d6,0x00050084,0x00000015, + 0x000006d8,0x000006d7,0x00000021,0x0004003d,0x00000015,0x000006d9,0x000002b1,0x00050080, + 0x00000015,0x000006da,0x000006d8,0x000006d9,0x0003003e,0x000006d3,0x000006da,0x0003003e, + 0x00000414,0x00000415,0x0003003e,0x00000416,0x00000415,0x0003003e,0x00000417,0x00000415, + 0x0004003d,0x00000015,0x000006db,0x000006d3,0x00050041,0x000001ed,0x000006dc,0x000001ec, + 0x00000420,0x0004003d,0x00000015,0x000006dd,0x000006dc,0x000500b0,0x00000035,0x000006de, + 0x000006db,0x000006dd,0x000300f7,0x000006e0,0x00000000,0x000400fa,0x000006de,0x000006df, + 0x000006e0,0x000200f8,0x000006df,0x0004003d,0x00000015,0x000006e2,0x00000371,0x0004003d, + 0x00000015,0x000006e3,0x000003c6,0x00050080,0x00000015,0x000006e4,0x000006e2,0x000006e3, + 0x0003003e,0x000006e1,0x000006e4,0x0004003d,0x00000015,0x000006e6,0x000006d3,0x00050041, + 0x000001ed,0x000006e7,0x000001ec,0x0000042c,0x0004003d,0x00000015,0x000006e8,0x000006e7, + 0x00050089,0x00000015,0x000006e9,0x000006e6,0x000006e8,0x00050084,0x00000015,0x000006ea, + 0x000006e9,0x0000006f,0x0004007c,0x0000003c,0x000006eb,0x000006ea,0x00050041,0x000001ed, + 0x000006ec,0x000001ec,0x00000432,0x0004003d,0x00000015,0x000006ed,0x000006ec,0x0004007c, + 0x0000003c,0x000006ee,0x000006ed,0x00050082,0x0000003c,0x000006ef,0x000006eb,0x000006ee, + 0x0004003d,0x00000015,0x000006f0,0x000006e1,0x000500c7,0x00000015,0x000006f1,0x000006f0, + 0x000000a4,0x0004007c,0x0000003c,0x000006f2,0x000006f1,0x00050080,0x0000003c,0x000006f3, + 0x000006ef,0x000006f2,0x0003003e,0x000006e5,0x000006f3,0x0004003d,0x00000015,0x000006f5, + 0x000006d3,0x00050041,0x000001ed,0x000006f6,0x000001ec,0x0000042c,0x0004003d,0x00000015, + 0x000006f7,0x000006f6,0x00050086,0x00000015,0x000006f8,0x000006f5,0x000006f7,0x00050084, + 0x00000015,0x000006f9,0x000006f8,0x0000006f,0x0004007c,0x0000003c,0x000006fa,0x000006f9, + 0x00050041,0x000001ed,0x000006fb,0x000001ec,0x00000442,0x0004003d,0x00000015,0x000006fc, + 0x000006fb,0x0004007c,0x0000003c,0x000006fd,0x000006fc,0x00050082,0x0000003c,0x000006fe, + 0x000006fa,0x000006fd,0x0004003d,0x00000015,0x000006ff,0x000006e1,0x000500c2,0x00000015, + 0x00000700,0x000006ff,0x0000001e,0x0004007c,0x0000003c,0x00000701,0x00000700,0x00050080, + 0x0000003c,0x00000702,0x000006fe,0x00000701,0x0003003e,0x000006f4,0x00000702,0x0004003d, + 0x0000003c,0x00000703,0x000006e5,0x000500af,0x00000035,0x00000704,0x00000703,0x000001e1, + 0x0004003d,0x0000003c,0x00000705,0x000006f4,0x000500af,0x00000035,0x00000706,0x00000705, + 0x000001e1,0x000500a7,0x00000035,0x00000707,0x00000704,0x00000706,0x000300f7,0x00000709, + 0x00000000,0x000400fa,0x00000707,0x00000708,0x00000709,0x000200f8,0x00000708,0x0004003d, + 0x0000003c,0x0000070a,0x000006e5,0x00050041,0x000001ed,0x0000070b,0x000001ec,0x000001e1, + 0x0004003d,0x00000015,0x0000070c,0x0000070b,0x0004007c,0x0000003c,0x0000070d,0x0000070c, + 0x000500b1,0x00000035,0x0000070e,0x0000070a,0x0000070d,0x000200f9,0x00000709,0x000200f8, + 0x00000709,0x000700f5,0x00000035,0x0000070f,0x00000707,0x000006df,0x0000070e,0x00000708, + 0x000300f7,0x00000711,0x00000000,0x000400fa,0x0000070f,0x00000710,0x00000711,0x000200f8, + 0x00000710,0x0004003d,0x0000003c,0x00000712,0x000006f4,0x00050041,0x000001ed,0x00000713, + 0x000001ec,0x000000f9,0x0004003d,0x00000015,0x00000714,0x00000713,0x0004007c,0x0000003c, + 0x00000715,0x00000714,0x000500b1,0x00000035,0x00000716,0x00000712,0x00000715,0x000200f9, + 0x00000711,0x000200f8,0x00000711,0x000700f5,0x00000035,0x00000717,0x0000070f,0x00000709, + 0x00000716,0x00000710,0x000300f7,0x00000719,0x00000000,0x000400fa,0x00000717,0x00000718, + 0x00000719,0x000200f8,0x00000718,0x0004003d,0x0000003c,0x0000071b,0x000006f4,0x0004007c, + 0x00000015,0x0000071c,0x0000071b,0x00050041,0x000001ed,0x0000071d,0x000001ec,0x000001e1, + 0x0004003d,0x00000015,0x0000071e,0x0000071d,0x00050084,0x00000015,0x0000071f,0x0000071c, + 0x0000071e,0x0004003d,0x0000003c,0x00000720,0x000006e5,0x0004007c,0x00000015,0x00000721, + 0x00000720,0x00050080,0x00000015,0x00000722,0x0000071f,0x00000721,0x0003003e,0x0000071a, + 0x00000722,0x000300f7,0x00000726,0x00000000,0x000400fa,0x00000724,0x00000725,0x00000738, + 0x000200f8,0x00000725,0x0004003d,0x00000015,0x00000727,0x0000071a,0x00050084,0x00000015, + 0x00000728,0x00000727,0x00000028,0x0004003d,0x00000015,0x00000729,0x000003c9,0x00050084, + 0x00000015,0x0000072a,0x00000729,0x00000021,0x00050080,0x00000015,0x0000072b,0x00000728, + 0x0000072a,0x00060041,0x00000479,0x0000072c,0x00000473,0x000001e1,0x0000072b,0x0004003d, + 0x0000046f,0x0000072d,0x0000072c,0x0004007c,0x000002d7,0x0000072e,0x0000072d,0x0003003e, + 0x00000414,0x0000072e,0x0004003d,0x00000015,0x0000072f,0x0000071a,0x00050084,0x00000015, + 0x00000730,0x0000072f,0x00000028,0x0004003d,0x00000015,0x00000731,0x000003c9,0x00050084, + 0x00000015,0x00000732,0x00000731,0x00000021,0x00050080,0x00000015,0x00000733,0x00000730, + 0x00000732,0x00050080,0x00000015,0x00000734,0x00000733,0x0000006b,0x00060041,0x00000479, + 0x00000735,0x00000473,0x000001e1,0x00000734,0x0004003d,0x0000046f,0x00000736,0x00000735, + 0x0004007c,0x000002d7,0x00000737,0x00000736,0x0003003e,0x00000416,0x00000737,0x000200f9, + 0x00000726,0x000200f8,0x00000738,0x000300f7,0x0000073c,0x00000000,0x000400fa,0x0000073a, + 0x0000073b,0x00000752,0x000200f8,0x0000073b,0x0004003d,0x00000015,0x0000073d,0x0000071a, + 0x00050084,0x00000015,0x0000073e,0x0000073d,0x00000021,0x0004003d,0x00000015,0x0000073f, + 0x000003c9,0x00050080,0x00000015,0x00000740,0x0000073e,0x0000073f,0x00060041,0x000002df, + 0x00000741,0x0000048e,0x000001e1,0x00000740,0x0004003d,0x000002d7,0x00000742,0x00000741, + 0x0003003e,0x00000414,0x00000742,0x0004003d,0x0000003c,0x00000743,0x000006f4,0x0004007c, + 0x00000015,0x00000744,0x00000743,0x000500c2,0x00000015,0x00000745,0x00000744,0x0000006b, + 0x00050041,0x000001ed,0x00000746,0x000001ec,0x0000049c,0x0004003d,0x00000015,0x00000747, + 0x00000746,0x00050084,0x00000015,0x00000748,0x00000745,0x00000747,0x0004003d,0x0000003c, + 0x00000749,0x000006e5,0x0004007c,0x00000015,0x0000074a,0x00000749,0x000500c2,0x00000015, + 0x0000074b,0x0000074a,0x0000006b,0x00050080,0x00000015,0x0000074c,0x00000748,0x0000074b, + 0x00050084,0x00000015,0x0000074d,0x0000074c,0x00000021,0x0004003d,0x00000015,0x0000074e, + 0x000003c9,0x00050080,0x00000015,0x0000074f,0x0000074d,0x0000074e,0x00060041,0x000002df, + 0x00000750,0x00000498,0x000001e1,0x0000074f,0x0004003d,0x000002d7,0x00000751,0x00000750, + 0x0003003e,0x00000416,0x00000751,0x000200f9,0x0000073c,0x000200f8,0x00000752,0x000300f7, + 0x00000756,0x00000000,0x000400fa,0x00000754,0x00000755,0x00000773,0x000200f8,0x00000755, + 0x0004003d,0x00000015,0x00000757,0x0000071a,0x00050084,0x00000015,0x00000758,0x00000757, + 0x00000021,0x0004003d,0x00000015,0x00000759,0x000003c9,0x00050080,0x00000015,0x0000075a, + 0x00000758,0x00000759,0x00060041,0x000002df,0x0000075b,0x0000048e,0x000001e1,0x0000075a, + 0x0004003d,0x000002d7,0x0000075c,0x0000075b,0x0003003e,0x00000414,0x0000075c,0x0004003d, + 0x0000003c,0x0000075e,0x000006f4,0x0004007c,0x00000015,0x0000075f,0x0000075e,0x000500c2, + 0x00000015,0x00000760,0x0000075f,0x0000006b,0x00050041,0x000001ed,0x00000761,0x000001ec, + 0x0000049c,0x0004003d,0x00000015,0x00000762,0x00000761,0x00050084,0x00000015,0x00000763, + 0x00000760,0x00000762,0x0004003d,0x0000003c,0x00000764,0x000006e5,0x0004007c,0x00000015, + 0x00000765,0x00000764,0x000500c2,0x00000015,0x00000766,0x00000765,0x0000006b,0x00050080, + 0x00000015,0x00000767,0x00000763,0x00000766,0x00050084,0x00000015,0x00000768,0x00000767, + 0x00000028,0x0004003d,0x00000015,0x00000769,0x000003c9,0x00050084,0x00000015,0x0000076a, + 0x00000769,0x00000021,0x00050080,0x00000015,0x0000076b,0x00000768,0x0000076a,0x0003003e, + 0x0000075d,0x0000076b,0x0004003d,0x00000015,0x0000076c,0x0000075d,0x00060041,0x000002df, + 0x0000076d,0x00000498,0x000001e1,0x0000076c,0x0004003d,0x000002d7,0x0000076e,0x0000076d, + 0x0003003e,0x00000416,0x0000076e,0x0004003d,0x00000015,0x0000076f,0x0000075d,0x00050080, + 0x00000015,0x00000770,0x0000076f,0x0000006b,0x00060041,0x000002df,0x00000771,0x00000498, + 0x000001e1,0x00000770,0x0004003d,0x000002d7,0x00000772,0x00000771,0x0003003e,0x00000417, + 0x00000772,0x000200f9,0x00000756,0x000200f8,0x00000773,0x0004003d,0x00000015,0x00000774, + 0x0000071a,0x00050084,0x00000015,0x00000775,0x00000774,0x00000021,0x0004003d,0x00000015, + 0x00000776,0x000003c9,0x00050080,0x00000015,0x00000777,0x00000775,0x00000776,0x00060041, + 0x000002df,0x00000778,0x0000048e,0x000001e1,0x00000777,0x0004003d,0x000002d7,0x00000779, + 0x00000778,0x0003003e,0x00000414,0x00000779,0x000300f7,0x0000077d,0x00000000,0x000400fa, + 0x0000077b,0x0000077c,0x0000077d,0x000200f8,0x0000077c,0x0004003d,0x00000015,0x0000077e, + 0x0000071a,0x00050084,0x00000015,0x0000077f,0x0000077e,0x00000028,0x0004003d,0x00000015, + 0x00000780,0x000003c9,0x00050084,0x00000015,0x00000781,0x00000780,0x00000021,0x00050080, + 0x00000015,0x00000782,0x0000077f,0x00000781,0x00060041,0x000002df,0x00000783,0x000004d9, + 0x000001e1,0x00000782,0x0004003d,0x000002d7,0x00000784,0x00000783,0x0003003e,0x00000416, + 0x00000784,0x0004003d,0x00000015,0x00000785,0x0000071a,0x00050084,0x00000015,0x00000786, + 0x00000785,0x00000028,0x0004003d,0x00000015,0x00000787,0x000003c9,0x00050084,0x00000015, + 0x00000788,0x00000787,0x00000021,0x00050080,0x00000015,0x00000789,0x00000786,0x00000788, + 0x00050080,0x00000015,0x0000078a,0x00000789,0x0000006b,0x00060041,0x000002df,0x0000078b, + 0x000004d9,0x000001e1,0x0000078a,0x0004003d,0x000002d7,0x0000078c,0x0000078b,0x0003003e, + 0x00000417,0x0000078c,0x000200f9,0x0000077d,0x000200f8,0x0000077d,0x000200f9,0x00000756, + 0x000200f8,0x00000756,0x000200f9,0x0000073c,0x000200f8,0x0000073c,0x000200f9,0x00000726, + 0x000200f8,0x00000726,0x000200f9,0x00000719,0x000200f8,0x00000719,0x000200f9,0x000006e0, + 0x000200f8,0x000006e0,0x0004003d,0x00000022,0x0000078e,0x00000577,0x0003003e,0x0000078d, + 0x0000078e,0x0003003e,0x0000078f,0x00000066,0x000200f9,0x00000790,0x000200f8,0x00000790, + 0x000400f6,0x00000792,0x00000793,0x00000001,0x000200f9,0x00000794,0x000200f8,0x00000794, + 0x0004003d,0x00000015,0x00000795,0x0000078f,0x000500b0,0x00000035,0x00000796,0x00000795, + 0x00000028,0x000400fa,0x00000796,0x00000791,0x00000792,0x000200f8,0x00000791,0x0004003d, + 0x00000015,0x0000079a,0x0000078f,0x00050084,0x00000015,0x0000079b,0x0000079a,0x00000020, + 0x00050084,0x00000015,0x0000079c,0x0000079b,0x00000021,0x00050080,0x00000015,0x0000079d, + 0x00000066,0x0000079c,0x00050041,0x0000031f,0x0000079e,0x0000031c,0x0000079d,0x0004003d, + 0x00000015,0x0000079f,0x0000078f,0x00050084,0x00000015,0x000007a0,0x0000079f,0x00000020, + 0x00050084,0x00000015,0x000007a1,0x000007a0,0x00000021,0x00050080,0x00000015,0x000007a2, + 0x00000066,0x000007a1,0x00081169,0x00000797,0x000007a3,0x0000079e,0x000000f9,0x00000021, + 0x00000030,0x00000021,0x0003003e,0x00000799,0x000007a3,0x0003003e,0x000007a4,0x00000572, + 0x0004003d,0x0000057c,0x000007a5,0x0000057e,0x0004003d,0x00000797,0x000007a6,0x00000799, + 0x0004003d,0x00000022,0x000007a7,0x000007a4,0x0006116b,0x00000022,0x000007a8,0x000007a5, + 0x000007a6,0x000007a7,0x0003003e,0x000007a4,0x000007a8,0x0004003d,0x00000022,0x000007aa, + 0x000007a4,0x0003003e,0x000007a9,0x000007aa,0x00050039,0x00000002,0x000007ab,0x00000026, + 0x000007a9,0x0004003d,0x00000022,0x000007ac,0x000007a9,0x0003003e,0x000007a4,0x000007ac, + 0x0004003d,0x00000022,0x000007ae,0x000007a4,0x00040073,0x0000057c,0x000007af,0x000007ae, + 0x0003003e,0x000007ad,0x000007af,0x0004003d,0x00000015,0x000007b1,0x0000078f,0x00050084, + 0x00000015,0x000007b2,0x000007b1,0x00000021,0x00050080,0x00000015,0x000007b3,0x000002d3, + 0x000007b2,0x00050041,0x0000031f,0x000007b4,0x0000031c,0x000007b3,0x0004003d,0x00000015, + 0x000007b5,0x0000078f,0x00050084,0x00000015,0x000007b6,0x000007b5,0x00000021,0x00050080, + 0x00000015,0x000007b7,0x000002d3,0x000007b6,0x00081169,0x00000797,0x000007b8,0x000007b4, + 0x000000f9,0x000002f3,0x00000030,0x00000021,0x0003003e,0x000007b0,0x000007b8,0x0004003d, + 0x0000057c,0x000007b9,0x000007ad,0x0004003d,0x00000797,0x000007ba,0x000007b0,0x0004003d, + 0x00000022,0x000007bb,0x0000078d,0x0006116b,0x00000022,0x000007bc,0x000007b9,0x000007ba, + 0x000007bb,0x0003003e,0x0000078d,0x000007bc,0x000200f9,0x00000793,0x000200f8,0x00000793, + 0x0004003d,0x00000015,0x000007bd,0x0000078f,0x00050080,0x00000015,0x000007be,0x000007bd, + 0x000000f9,0x0003003e,0x0000078f,0x000007be,0x000200f9,0x00000790,0x000200f8,0x00000792, + 0x0004003d,0x00000022,0x000007c0,0x0000078d,0x000514f9,0x00000022,0x000007c1,0x000007c0, + 0x00000033,0x0003003e,0x000007bf,0x000007c1,0x0004003d,0x00000022,0x000007c3,0x000007bf, + 0x00040073,0x0000057c,0x000007c4,0x000007c3,0x0003003e,0x000007c2,0x000007c4,0x00050041, + 0x0000031f,0x000007c6,0x0000031c,0x00000308,0x00081169,0x00000797,0x000007c7,0x000007c6, + 0x000000f9,0x00000021,0x00000030,0x00000021,0x0003003e,0x000007c5,0x000007c7,0x00050041, + 0x0000031f,0x000007ca,0x0000031c,0x000007c9,0x00081169,0x00000797,0x000007cb,0x000007ca, + 0x000000f9,0x00000021,0x00000030,0x00000021,0x0003003e,0x000007c8,0x000007cb,0x00050041, + 0x0000031f,0x000007ce,0x0000031c,0x000007cd,0x00081169,0x00000797,0x000007cf,0x000007ce, + 0x000000f9,0x00000021,0x00000030,0x00000021,0x0003003e,0x000007cc,0x000007cf,0x0003003e, + 0x000007d0,0x00000572,0x0003003e,0x000007d1,0x00000572,0x0003003e,0x000007d2,0x00000572, + 0x0004003d,0x0000057c,0x000007d3,0x000007c2,0x0004003d,0x00000797,0x000007d4,0x000007c5, + 0x0004003d,0x00000022,0x000007d5,0x000007d0,0x0006116b,0x00000022,0x000007d6,0x000007d3, + 0x000007d4,0x000007d5,0x0003003e,0x000007d0,0x000007d6,0x0004003d,0x0000057c,0x000007d7, + 0x000007c2,0x0004003d,0x00000797,0x000007d8,0x000007c8,0x0004003d,0x00000022,0x000007d9, + 0x000007d1,0x0006116b,0x00000022,0x000007da,0x000007d7,0x000007d8,0x000007d9,0x0003003e, + 0x000007d1,0x000007da,0x0004003d,0x0000057c,0x000007db,0x000007c2,0x0004003d,0x00000797, + 0x000007dc,0x000007cc,0x0004003d,0x00000022,0x000007dd,0x000007d2,0x0006116b,0x00000022, + 0x000007de,0x000007db,0x000007dc,0x000007dd,0x0003003e,0x000007d2,0x000007de,0x0004003d, + 0x00000006,0x000007df,0x000003c2,0x0004003d,0x00000022,0x000007e2,0x000007d0,0x0003003e, + 0x000007e1,0x000007e2,0x00070039,0x00000002,0x000007e3,0x0000003a,0x000007e1,0x000007df, + 0x000007e0,0x0004003d,0x00000022,0x000007e4,0x000007e1,0x0003003e,0x000007d0,0x000007e4, + 0x0004003d,0x00000006,0x000007e5,0x000003c2,0x0004003d,0x00000022,0x000007e8,0x000007d1, + 0x0003003e,0x000007e7,0x000007e8,0x00070039,0x00000002,0x000007e9,0x0000003a,0x000007e7, + 0x000007e5,0x000007e6,0x0004003d,0x00000022,0x000007ea,0x000007e7,0x0003003e,0x000007d1, + 0x000007ea,0x0004003d,0x00000022,0x000007ec,0x000007d0,0x00040073,0x0000057c,0x000007ed, + 0x000007ec,0x0003003e,0x000007eb,0x000007ed,0x0004003d,0x00000022,0x000007ee,0x000007d1, + 0x0004003d,0x00000015,0x000007ef,0x00000368,0x0004003d,0x00000015,0x000007f0,0x00000371, + 0x0004003d,0x00000015,0x000007f1,0x000002bf,0x0004003d,0x00000015,0x000007f2,0x000002bc, + 0x0004003d,0x0000003c,0x000007f3,0x00000504,0x0004003d,0x0000003c,0x000007f4,0x0000050f, + 0x0004003d,0x00000035,0x000007f5,0x000004fb,0x000c0039,0x00000002,0x000007f6,0x00000046, + 0x000007ee,0x000007ef,0x000007f0,0x000007f1,0x000007f2,0x000007f3,0x000007f4,0x000007f5, + 0x0004003d,0x00000022,0x000007f7,0x000007d2,0x0004003d,0x00000015,0x000007f8,0x0000036d, + 0x0004003d,0x00000015,0x000007f9,0x00000371,0x0004003d,0x00000015,0x000007fa,0x000002bf, + 0x0004003d,0x00000015,0x000007fb,0x000002bc,0x0004003d,0x0000003c,0x000007fc,0x00000504, + 0x0004003d,0x0000003c,0x000007fd,0x0000050f,0x0004003d,0x00000035,0x000007fe,0x000004fb, + 0x000c0039,0x00000002,0x000007ff,0x00000050,0x000007f7,0x000007f8,0x000007f9,0x000007fa, + 0x000007fb,0x000007fc,0x000007fd,0x000007fe,0x000400e0,0x00000021,0x00000021,0x00000364, + 0x0004003d,0x00000015,0x00000803,0x00000368,0x00050041,0x0000022d,0x00000804,0x00000223, + 0x00000803,0x00081169,0x00000800,0x00000805,0x00000804,0x000000f9,0x000001ff,0x00000030, + 0x00000021,0x0003003e,0x00000802,0x00000805,0x0004003d,0x00000015,0x00000809,0x00000371, + 0x00050084,0x00000015,0x0000080a,0x00000809,0x00000334,0x00050041,0x00000342,0x0000080b, + 0x00000331,0x0000080a,0x0004003d,0x00000015,0x0000080c,0x00000371,0x00050084,0x00000015, + 0x0000080d,0x0000080c,0x00000334,0x00081169,0x00000806,0x0000080e,0x0000080b,0x000001e1, + 0x00000334,0x00000030,0x00000021,0x0003003e,0x00000808,0x0000080e,0x0004003d,0x0000057c, + 0x0000080f,0x000007eb,0x0004003d,0x00000800,0x00000810,0x00000802,0x0004003d,0x00000806, + 0x00000811,0x00000808,0x0006116b,0x00000806,0x00000812,0x0000080f,0x00000810,0x00000811, + 0x0003003e,0x00000808,0x00000812,0x0003003e,0x00000813,0x00000814,0x0003003e,0x00000815, + 0x00000066,0x000200f9,0x00000816,0x000200f8,0x00000816,0x000400f6,0x00000818,0x00000819, + 0x00000001,0x000200f9,0x0000081a,0x000200f8,0x0000081a,0x0004003d,0x00000015,0x0000081b, + 0x00000815,0x000500b0,0x00000035,0x0000081c,0x0000081b,0x00000021,0x000400fa,0x0000081c, + 0x00000817,0x00000818,0x000200f8,0x00000817,0x0003003e,0x0000081d,0x00000066,0x000200f9, + 0x0000081e,0x000200f8,0x0000081e,0x000400f6,0x00000820,0x00000821,0x00000001,0x000200f9, + 0x00000822,0x000200f8,0x00000822,0x0004003d,0x00000015,0x00000823,0x0000081d,0x000500b0, + 0x00000035,0x00000824,0x00000823,0x0000006f,0x000400fa,0x00000824,0x0000081f,0x00000820, + 0x000200f8,0x0000081f,0x0004003d,0x00000015,0x00000826,0x0000081d,0x0004003d,0x00000015, + 0x00000827,0x00000815,0x00050084,0x00000015,0x00000828,0x0000001f,0x00000827,0x0004003d, + 0x00000015,0x00000829,0x0000081d,0x00050084,0x00000015,0x0000082a,0x00000021,0x00000829, + 0x00050080,0x00000015,0x0000082b,0x00000828,0x0000082a,0x00050041,0x000000e2,0x0000082c, + 0x00000808,0x0000082b,0x0004003d,0x00000006,0x0000082d,0x0000082c,0x0004003d,0x00000015, + 0x0000082e,0x00000815,0x00050084,0x00000015,0x0000082f,0x0000001f,0x0000082e,0x0004003d, + 0x00000015,0x00000830,0x0000081d,0x00050084,0x00000015,0x00000831,0x00000021,0x00000830, + 0x00050080,0x00000015,0x00000832,0x0000082f,0x00000831,0x00050080,0x00000015,0x00000833, + 0x00000832,0x0000006b,0x00050041,0x000000e2,0x00000834,0x00000808,0x00000833,0x0004003d, + 0x00000006,0x00000835,0x00000834,0x00050050,0x00000007,0x00000836,0x0000082d,0x00000835, + 0x0004007c,0x00000015,0x00000837,0x00000836,0x0003003e,0x00000838,0x00000837,0x00050039, + 0x00000015,0x00000839,0x0000001c,0x00000838,0x00050041,0x00000016,0x0000083a,0x00000825, + 0x00000826,0x0003003e,0x0000083a,0x00000839,0x000200f9,0x00000821,0x000200f8,0x00000821, + 0x0004003d,0x00000015,0x0000083b,0x0000081d,0x00050080,0x00000015,0x0000083c,0x0000083b, + 0x000000f9,0x0003003e,0x0000081d,0x0000083c,0x000200f9,0x0000081e,0x000200f8,0x00000820, + 0x0003003e,0x0000083d,0x00000066,0x000200f9,0x0000083e,0x000200f8,0x0000083e,0x000400f6, + 0x00000840,0x00000841,0x00000001,0x000200f9,0x00000842,0x000200f8,0x00000842,0x0004003d, + 0x00000015,0x00000843,0x0000083d,0x000500b0,0x00000035,0x00000844,0x00000843,0x00000028, + 0x000400fa,0x00000844,0x0000083f,0x00000840,0x000200f8,0x0000083f,0x0004003d,0x00000015, + 0x00000846,0x0000083d,0x00050084,0x00000015,0x00000847,0x00000021,0x00000846,0x00050041, + 0x00000016,0x00000848,0x00000825,0x00000847,0x0004003d,0x00000015,0x00000849,0x00000848, + 0x0004007c,0x00000007,0x0000084a,0x00000849,0x0004003d,0x00000015,0x0000084b,0x0000083d, + 0x00050084,0x00000015,0x0000084c,0x00000021,0x0000084b,0x00050080,0x00000015,0x0000084d, + 0x0000084c,0x0000006b,0x00050041,0x00000016,0x0000084e,0x00000825,0x0000084d,0x0004003d, + 0x00000015,0x0000084f,0x0000084e,0x0004007c,0x00000007,0x00000850,0x0000084f,0x00050081, + 0x00000007,0x00000851,0x0000084a,0x00000850,0x0003003e,0x00000845,0x00000851,0x0004003d, + 0x00000015,0x00000853,0x0000083d,0x0004003d,0x00000007,0x00000854,0x00000845,0x00050041, + 0x00000008,0x00000855,0x00000852,0x00000853,0x0003003e,0x00000855,0x00000854,0x000200f9, + 0x00000841,0x000200f8,0x00000841,0x0004003d,0x00000015,0x00000856,0x0000083d,0x00050080, + 0x00000015,0x00000857,0x00000856,0x000000f9,0x0003003e,0x0000083d,0x00000857,0x000200f9, + 0x0000083e,0x000200f8,0x00000840,0x00050041,0x00000008,0x00000859,0x00000852,0x000001e1, + 0x0004003d,0x00000007,0x0000085a,0x00000859,0x00050041,0x00000008,0x0000085b,0x00000852, + 0x000000f9,0x0004003d,0x00000007,0x0000085c,0x0000085b,0x00050081,0x00000007,0x0000085d, + 0x0000085a,0x0000085c,0x0003003e,0x00000858,0x0000085d,0x0004003d,0x00000007,0x0000085f, + 0x00000858,0x00050041,0x00000008,0x00000860,0x00000852,0x00000432,0x0004003d,0x00000007, + 0x00000861,0x00000860,0x00050081,0x00000007,0x00000862,0x0000085f,0x00000861,0x0003003e, + 0x0000085e,0x00000862,0x0004003d,0x00000007,0x00000864,0x0000085e,0x00050041,0x00000008, + 0x00000865,0x00000852,0x00000442,0x0004003d,0x00000007,0x00000866,0x00000865,0x00050081, + 0x00000007,0x00000867,0x00000864,0x00000866,0x0003003e,0x00000863,0x00000867,0x0004003d, + 0x00000007,0x00000869,0x00000863,0x0004007c,0x00000015,0x0000086a,0x00000869,0x0003003e, + 0x00000868,0x0000086a,0x0004003d,0x00000015,0x0000086c,0x000002b9,0x000500c7,0x00000015, + 0x0000086e,0x0000086c,0x0000086d,0x0003003e,0x0000086b,0x0000086e,0x0004003d,0x00000015, + 0x00000870,0x00000868,0x0004003d,0x00000015,0x00000871,0x0000086b,0x00060159,0x00000015, + 0x00000872,0x0000001e,0x00000870,0x00000871,0x0004007c,0x00000007,0x00000873,0x00000872, + 0x0003003e,0x0000086f,0x00000873,0x0004003d,0x00000015,0x00000875,0x00000868,0x0004003d, + 0x00000015,0x00000876,0x0000086b,0x00050080,0x00000015,0x00000877,0x00000876,0x0000006b, + 0x00060159,0x00000015,0x00000878,0x0000001e,0x00000875,0x00000877,0x0004007c,0x00000007, + 0x00000879,0x00000878,0x0003003e,0x00000874,0x00000879,0x0004003d,0x00000015,0x0000087b, + 0x00000868,0x0004003d,0x00000015,0x0000087c,0x0000086b,0x00050080,0x00000015,0x0000087d, + 0x0000087c,0x00000021,0x00060159,0x00000015,0x0000087e,0x0000001e,0x0000087b,0x0000087d, + 0x0004007c,0x00000007,0x0000087f,0x0000087e,0x0003003e,0x0000087a,0x0000087f,0x0004003d, + 0x00000015,0x00000881,0x00000868,0x0004003d,0x00000015,0x00000882,0x0000086b,0x00050080, + 0x00000015,0x00000883,0x00000882,0x0000001e,0x00060159,0x00000015,0x00000884,0x0000001e, + 0x00000881,0x00000883,0x0004007c,0x00000007,0x00000885,0x00000884,0x0003003e,0x00000880, + 0x00000885,0x00050041,0x000000e2,0x00000887,0x0000086f,0x00000066,0x0004003d,0x00000006, + 0x00000888,0x00000887,0x00050041,0x000000e2,0x00000889,0x00000874,0x00000066,0x0004003d, + 0x00000006,0x0000088a,0x00000889,0x00050081,0x00000006,0x0000088b,0x00000888,0x0000088a, + 0x0003003e,0x00000886,0x0000088b,0x0004003d,0x00000006,0x0000088d,0x00000886,0x00050041, + 0x000000e2,0x0000088e,0x0000087a,0x00000066,0x0004003d,0x00000006,0x0000088f,0x0000088e, + 0x00050081,0x00000006,0x00000890,0x0000088d,0x0000088f,0x0003003e,0x0000088c,0x00000890, + 0x0004003d,0x00000006,0x00000892,0x0000088c,0x00050041,0x000000e2,0x00000893,0x00000880, + 0x00000066,0x0004003d,0x00000006,0x00000894,0x00000893,0x00050081,0x00000006,0x00000895, + 0x00000892,0x00000894,0x0003003e,0x00000891,0x00000895,0x00050041,0x000000e2,0x00000897, + 0x0000086f,0x0000006b,0x0004003d,0x00000006,0x00000898,0x00000897,0x00050041,0x000000e2, + 0x00000899,0x00000874,0x0000006b,0x0004003d,0x00000006,0x0000089a,0x00000899,0x00050081, + 0x00000006,0x0000089b,0x00000898,0x0000089a,0x0003003e,0x00000896,0x0000089b,0x0004003d, + 0x00000006,0x0000089d,0x00000896,0x00050041,0x000000e2,0x0000089e,0x0000087a,0x0000006b, + 0x0004003d,0x00000006,0x0000089f,0x0000089e,0x00050081,0x00000006,0x000008a0,0x0000089d, + 0x0000089f,0x0003003e,0x0000089c,0x000008a0,0x0004003d,0x00000006,0x000008a2,0x0000089c, + 0x00050041,0x000000e2,0x000008a3,0x00000880,0x0000006b,0x0004003d,0x00000006,0x000008a4, + 0x000008a3,0x00050081,0x00000006,0x000008a5,0x000008a2,0x000008a4,0x0003003e,0x000008a1, + 0x000008a5,0x0004003d,0x00000006,0x000008a7,0x00000891,0x0004003d,0x00000006,0x000008a8, + 0x000008a1,0x00050081,0x00000006,0x000008a9,0x000008a7,0x000008a8,0x0003003e,0x000008a6, + 0x000008a9,0x0004003d,0x00000006,0x000008ac,0x000008a6,0x00040073,0x000000b9,0x000008ad, + 0x000008ac,0x00050088,0x000000b9,0x000008ae,0x000008ab,0x000008ad,0x00040073,0x00000006, + 0x000008af,0x000008ae,0x0003003e,0x000008aa,0x000008af,0x0003003e,0x000008b0,0x00000066, + 0x000200f9,0x000008b1,0x000200f8,0x000008b1,0x000400f6,0x000008b3,0x000008b4,0x00000001, + 0x000200f9,0x000008b5,0x000200f8,0x000008b5,0x0004003d,0x00000015,0x000008b6,0x000008b0, + 0x000500b0,0x00000035,0x000008b7,0x000008b6,0x0000006f,0x000400fa,0x000008b7,0x000008b2, + 0x000008b3,0x000200f8,0x000008b2,0x0004003d,0x00000015,0x000008b9,0x000008b0,0x00050041, + 0x00000016,0x000008ba,0x00000825,0x000008b9,0x0004003d,0x00000015,0x000008bb,0x000008ba, + 0x0004007c,0x00000007,0x000008bc,0x000008bb,0x0004003d,0x00000006,0x000008bd,0x000008aa, + 0x0005008e,0x00000007,0x000008be,0x000008bc,0x000008bd,0x0003003e,0x000008b8,0x000008be, + 0x0004003d,0x00000015,0x000008bf,0x00000815,0x00050084,0x00000015,0x000008c0,0x0000001f, + 0x000008bf,0x0004003d,0x00000015,0x000008c1,0x000008b0,0x00050084,0x00000015,0x000008c2, + 0x00000021,0x000008c1,0x00050080,0x00000015,0x000008c3,0x000008c0,0x000008c2,0x00050041, + 0x000000e2,0x000008c4,0x000008b8,0x00000066,0x0004003d,0x00000006,0x000008c5,0x000008c4, + 0x00050041,0x000000e2,0x000008c6,0x00000813,0x000008c3,0x0003003e,0x000008c6,0x000008c5, + 0x0004003d,0x00000015,0x000008c7,0x00000815,0x00050084,0x00000015,0x000008c8,0x0000001f, + 0x000008c7,0x0004003d,0x00000015,0x000008c9,0x000008b0,0x00050084,0x00000015,0x000008ca, + 0x00000021,0x000008c9,0x00050080,0x00000015,0x000008cb,0x000008c8,0x000008ca,0x00050080, + 0x00000015,0x000008cc,0x000008cb,0x0000006b,0x00050041,0x000000e2,0x000008cd,0x000008b8, + 0x0000006b,0x0004003d,0x00000006,0x000008ce,0x000008cd,0x00050041,0x000000e2,0x000008cf, + 0x00000813,0x000008cc,0x0003003e,0x000008cf,0x000008ce,0x000200f9,0x000008b4,0x000200f8, + 0x000008b4,0x0004003d,0x00000015,0x000008d0,0x000008b0,0x00050080,0x00000015,0x000008d1, + 0x000008d0,0x000000f9,0x0003003e,0x000008b0,0x000008d1,0x000200f9,0x000008b1,0x000200f8, + 0x000008b3,0x000200f9,0x00000819,0x000200f8,0x00000819,0x0004003d,0x00000015,0x000008d2, + 0x00000815,0x00050080,0x00000015,0x000008d3,0x000008d2,0x000000f9,0x0003003e,0x00000815, + 0x000008d3,0x000200f9,0x00000816,0x000200f8,0x00000818,0x0004003d,0x00000806,0x000008d7, + 0x00000813,0x00040073,0x000008d4,0x000008d8,0x000008d7,0x0003003e,0x000008d6,0x000008d8, + 0x0004003d,0x00000015,0x000008dc,0x0000036d,0x00050041,0x0000029f,0x000008dd,0x00000292, + 0x000008dc,0x00081169,0x000008d9,0x000008de,0x000008dd,0x000000f9,0x00000298,0x00000030, + 0x00000021,0x0003003e,0x000008db,0x000008de,0x0003003e,0x000008df,0x00000572,0x0004003d, + 0x000008d4,0x000008e0,0x000008d6,0x0004003d,0x000008d9,0x000008e1,0x000008db,0x0004003d, + 0x00000022,0x000008e2,0x000008df,0x0006116b,0x00000022,0x000008e3,0x000008e0,0x000008e1, + 0x000008e2,0x0003003e,0x000008df,0x000008e3,0x0004003d,0x00000022,0x000008e5,0x000008df, + 0x000514f9,0x00000022,0x000008e6,0x000008e5,0x00000033,0x0003003e,0x000008e4,0x000008e6, + 0x0004003d,0x00000022,0x000008e8,0x000008e4,0x00040073,0x0000057c,0x000008e9,0x000008e8, + 0x0003003e,0x000008e7,0x000008e9,0x0004003d,0x00000022,0x000008eb,0x0000078d,0x0003003e, + 0x000008ea,0x000008eb,0x0004003d,0x00000029,0x000008ec,0x0000039b,0x0004003d,0x00000022, + 0x000008ee,0x000008ea,0x0003003e,0x000008ed,0x000008ee,0x00060039,0x00000002,0x000008ef, + 0x0000002d,0x000008ed,0x000008ec,0x0004003d,0x00000022,0x000008f0,0x000008ed,0x0003003e, + 0x000008ea,0x000008f0,0x00050041,0x0000031f,0x000008f2,0x0000031c,0x00000315,0x00081169, + 0x00000797,0x000008f3,0x000008f2,0x000000f9,0x00000021,0x00000030,0x00000021,0x0003003e, + 0x000008f1,0x000008f3,0x0004003d,0x0000057c,0x000008f5,0x000008e7,0x0004003d,0x00000797, + 0x000008f6,0x000008f1,0x0004003d,0x00000022,0x000008f7,0x000008ea,0x0006116b,0x00000022, + 0x000008f8,0x000008f5,0x000008f6,0x000008f7,0x0003003e,0x000008f4,0x000008f8,0x0004003d, + 0x00000015,0x000008fa,0x00000365,0x0003003e,0x000008f9,0x000008fa,0x000300f7,0x000008fe, + 0x00000000,0x000400fa,0x000008fc,0x000008fd,0x000008fe,0x000200f8,0x000008fd,0x0003003e, + 0x000008ff,0x00000066,0x000200f9,0x00000900,0x000200f8,0x00000900,0x000400f6,0x00000902, + 0x00000903,0x00000001,0x000200f9,0x00000904,0x000200f8,0x00000904,0x0004003d,0x00000015, + 0x00000905,0x000008ff,0x000500b0,0x00000035,0x00000906,0x00000905,0x00000021,0x000400fa, + 0x00000906,0x00000901,0x00000902,0x000200f8,0x00000901,0x0003003e,0x00000907,0x00000066, + 0x000200f9,0x00000908,0x000200f8,0x00000908,0x000400f6,0x0000090a,0x0000090b,0x00000001, + 0x000200f9,0x0000090c,0x000200f8,0x0000090c,0x0004003d,0x00000015,0x0000090d,0x00000907, + 0x000500b0,0x00000035,0x0000090e,0x0000090d,0x00000028,0x000400fa,0x0000090e,0x00000909, + 0x0000090a,0x000200f8,0x00000909,0x0004003d,0x00000015,0x0000090f,0x000008f9,0x0004003d, + 0x00000015,0x00000910,0x000002bc,0x0004003d,0x00000015,0x00000911,0x000008ff,0x00050084, + 0x00000015,0x00000912,0x0000006f,0x00000911,0x00050080,0x00000015,0x00000913,0x00000910, + 0x00000912,0x00050084,0x00000015,0x00000914,0x00000913,0x0000001f,0x00050080,0x00000015, + 0x00000915,0x0000090f,0x00000914,0x0004003d,0x00000015,0x00000916,0x00000907,0x00050084, + 0x00000015,0x00000917,0x00000028,0x00000916,0x00050080,0x00000015,0x00000918,0x00000915, + 0x00000917,0x0004003d,0x00000015,0x00000919,0x000002bf,0x00050080,0x00000015,0x0000091a, + 0x00000918,0x00000919,0x0004003d,0x00000015,0x0000091b,0x000008ff,0x00050084,0x00000015, + 0x0000091c,0x0000006f,0x0000091b,0x0004003d,0x00000015,0x0000091d,0x00000907,0x00050084, + 0x00000015,0x0000091e,0x00000021,0x0000091d,0x00050080,0x00000015,0x0000091f,0x0000091c, + 0x0000091e,0x00050041,0x000000e2,0x00000920,0x000008f4,0x0000091f,0x0004003d,0x00000006, + 0x00000921,0x00000920,0x0004003d,0x00000015,0x00000922,0x000008ff,0x00050084,0x00000015, + 0x00000923,0x0000006f,0x00000922,0x0004003d,0x00000015,0x00000924,0x00000907,0x00050084, + 0x00000015,0x00000925,0x00000021,0x00000924,0x00050080,0x00000015,0x00000926,0x00000923, + 0x00000925,0x00050080,0x00000015,0x00000927,0x00000926,0x0000006b,0x00050041,0x000000e2, + 0x00000928,0x000008f4,0x00000927,0x0004003d,0x00000006,0x00000929,0x00000928,0x00050050, + 0x00000007,0x0000092a,0x00000921,0x00000929,0x0004007c,0x00000015,0x0000092b,0x0000092a, + 0x00050041,0x0000054b,0x0000092c,0x00000543,0x0000091a,0x0005003e,0x0000092c,0x0000092b, + 0x00000028,0x00000021,0x000200f9,0x0000090b,0x000200f8,0x0000090b,0x0004003d,0x00000015, + 0x0000092d,0x00000907,0x00050080,0x00000015,0x0000092e,0x0000092d,0x000000f9,0x0003003e, + 0x00000907,0x0000092e,0x000200f9,0x00000908,0x000200f8,0x0000090a,0x000200f9,0x00000903, + 0x000200f8,0x00000903,0x0004003d,0x00000015,0x0000092f,0x000008ff,0x00050080,0x00000015, + 0x00000930,0x0000092f,0x000000f9,0x0003003e,0x000008ff,0x00000930,0x000200f9,0x00000900, + 0x000200f8,0x00000902,0x000400e0,0x0000001e,0x0000001e,0x00000565,0x0003003e,0x00000931, + 0x00000066,0x000200f9,0x00000932,0x000200f8,0x00000932,0x000400f6,0x00000934,0x00000935, + 0x00000001,0x000200f9,0x00000936,0x000200f8,0x00000936,0x0004003d,0x00000015,0x00000937, + 0x00000931,0x000500b0,0x00000035,0x00000938,0x00000937,0x00000021,0x000400fa,0x00000938, + 0x00000933,0x00000934,0x000200f8,0x00000933,0x0004003d,0x00000015,0x0000093a,0x000002b9, + 0x0004003d,0x00000015,0x0000093b,0x00000931,0x00050084,0x00000015,0x0000093c,0x00000020, + 0x0000093b,0x00050080,0x00000015,0x0000093d,0x0000093a,0x0000093c,0x0003003e,0x00000939, + 0x0000093d,0x0004003d,0x00000015,0x0000093f,0x00000939,0x000500c2,0x00000015,0x00000940, + 0x0000093f,0x00000021,0x0003003e,0x0000093e,0x00000940,0x0004003d,0x00000015,0x00000942, + 0x00000939,0x000500c7,0x00000015,0x00000943,0x00000942,0x0000001e,0x0003003e,0x00000941, + 0x00000943,0x0004003d,0x00000015,0x00000945,0x00000371,0x0004003d,0x00000015,0x00000946, + 0x0000093e,0x00050080,0x00000015,0x00000947,0x00000945,0x00000946,0x0003003e,0x00000944, + 0x00000947,0x0004003d,0x0000003c,0x00000949,0x00000504,0x0004003d,0x00000015,0x0000094a, + 0x00000944,0x000500c7,0x00000015,0x0000094b,0x0000094a,0x000000a4,0x0004007c,0x0000003c, + 0x0000094c,0x0000094b,0x00050080,0x0000003c,0x0000094d,0x00000949,0x0000094c,0x0003003e, + 0x00000948,0x0000094d,0x0004003d,0x0000003c,0x0000094f,0x0000050f,0x0004003d,0x00000015, + 0x00000950,0x00000944,0x000500c2,0x00000015,0x00000951,0x00000950,0x0000001e,0x0004007c, + 0x0000003c,0x00000952,0x00000951,0x00050080,0x0000003c,0x00000953,0x0000094f,0x00000952, + 0x0003003e,0x0000094e,0x00000953,0x0004003d,0x00000015,0x00000955,0x000008f9,0x0004003d, + 0x00000015,0x00000956,0x0000093e,0x00050084,0x00000015,0x00000957,0x00000956,0x0000001f, + 0x00050080,0x00000015,0x00000958,0x00000955,0x00000957,0x0004003d,0x00000015,0x00000959, + 0x00000941,0x00050084,0x00000015,0x0000095a,0x00000959,0x00000028,0x00050080,0x00000015, + 0x0000095b,0x00000958,0x0000095a,0x0003003e,0x00000954,0x0000095b,0x0004003d,0x00000035, + 0x0000095c,0x000004fb,0x0004003d,0x0000003c,0x0000095d,0x00000948,0x000500af,0x00000035, + 0x0000095e,0x0000095d,0x000001e1,0x000500a7,0x00000035,0x0000095f,0x0000095c,0x0000095e, + 0x0004003d,0x0000003c,0x00000960,0x0000094e,0x000500af,0x00000035,0x00000961,0x00000960, + 0x000001e1,0x000500a7,0x00000035,0x00000962,0x0000095f,0x00000961,0x000300f7,0x00000964, + 0x00000000,0x000400fa,0x00000962,0x00000963,0x00000964,0x000200f8,0x00000963,0x0004003d, + 0x0000003c,0x00000965,0x00000948,0x00050041,0x000001ed,0x00000966,0x000001ec,0x000001e1, + 0x0004003d,0x00000015,0x00000967,0x00000966,0x0004007c,0x0000003c,0x00000968,0x00000967, + 0x000500b1,0x00000035,0x00000969,0x00000965,0x00000968,0x000200f9,0x00000964,0x000200f8, + 0x00000964,0x000700f5,0x00000035,0x0000096a,0x00000962,0x00000933,0x00000969,0x00000963, + 0x000300f7,0x0000096c,0x00000000,0x000400fa,0x0000096a,0x0000096b,0x0000096c,0x000200f8, + 0x0000096b,0x0004003d,0x0000003c,0x0000096d,0x0000094e,0x00050041,0x000001ed,0x0000096e, + 0x000001ec,0x000000f9,0x0004003d,0x00000015,0x0000096f,0x0000096e,0x0004007c,0x0000003c, + 0x00000970,0x0000096f,0x000500b1,0x00000035,0x00000971,0x0000096d,0x00000970,0x000200f9, + 0x0000096c,0x000200f8,0x0000096c,0x000700f5,0x00000035,0x00000972,0x0000096a,0x00000964, + 0x00000971,0x0000096b,0x000300f7,0x00000974,0x00000000,0x000400fa,0x00000972,0x00000973, + 0x00000974,0x000200f8,0x00000973,0x0004003d,0x0000003c,0x00000979,0x0000094e,0x0004007c, + 0x00000015,0x0000097a,0x00000979,0x00050041,0x000001ed,0x0000097b,0x000001ec,0x000001e1, + 0x0004003d,0x00000015,0x0000097c,0x0000097b,0x00050084,0x00000015,0x0000097d,0x0000097a, + 0x0000097c,0x0004003d,0x0000003c,0x0000097e,0x00000948,0x0004007c,0x00000015,0x0000097f, + 0x0000097e,0x00050080,0x00000015,0x00000980,0x0000097d,0x0000097f,0x00050084,0x00000015, + 0x00000981,0x00000980,0x00000028,0x0004003d,0x00000015,0x00000982,0x00000941,0x00050080, + 0x00000015,0x00000983,0x00000981,0x00000982,0x0004003d,0x00000015,0x00000984,0x00000954, + 0x00050041,0x0000054b,0x00000985,0x00000543,0x00000984,0x0006003d,0x00000015,0x00000986, + 0x00000985,0x00000030,0x00000021,0x0004003d,0x00000015,0x00000987,0x00000954,0x00050080, + 0x00000015,0x00000988,0x00000987,0x0000006b,0x00050041,0x0000054b,0x00000989,0x00000543, + 0x00000988,0x0006003d,0x00000015,0x0000098a,0x00000989,0x00000030,0x00000021,0x0004003d, + 0x00000015,0x0000098b,0x00000954,0x00050080,0x00000015,0x0000098c,0x0000098b,0x00000021, + 0x00050041,0x0000054b,0x0000098d,0x00000543,0x0000098c,0x0006003d,0x00000015,0x0000098e, + 0x0000098d,0x00000030,0x00000021,0x0004003d,0x00000015,0x0000098f,0x00000954,0x00050080, + 0x00000015,0x00000990,0x0000098f,0x0000001e,0x00050041,0x0000054b,0x00000991,0x00000543, + 0x00000990,0x0006003d,0x00000015,0x00000992,0x00000991,0x00000030,0x00000021,0x00070050, + 0x000002d7,0x00000993,0x00000986,0x0000098a,0x0000098e,0x00000992,0x00060041,0x000002df, + 0x00000994,0x00000978,0x000001e1,0x00000983,0x0003003e,0x00000994,0x00000993,0x000200f9, + 0x00000974,0x000200f8,0x00000974,0x000200f9,0x00000935,0x000200f8,0x00000935,0x0004003d, + 0x00000015,0x00000995,0x00000931,0x00050080,0x00000015,0x00000996,0x00000995,0x000000f9, + 0x0003003e,0x00000931,0x00000996,0x000200f9,0x00000932,0x000200f8,0x00000934,0x000400e0, + 0x0000001e,0x0000001e,0x00000565,0x000200f9,0x000008fe,0x000200f8,0x000008fe,0x000300f7, + 0x0000099a,0x00000000,0x000400fa,0x00000998,0x00000999,0x0000099a,0x000200f8,0x00000999, + 0x0003003e,0x0000099b,0x00000066,0x000200f9,0x0000099c,0x000200f8,0x0000099c,0x000400f6, + 0x0000099e,0x0000099f,0x00000001,0x000200f9,0x000009a0,0x000200f8,0x000009a0,0x0004003d, + 0x00000015,0x000009a1,0x0000099b,0x000500b0,0x00000035,0x000009a2,0x000009a1,0x00000021, + 0x000400fa,0x000009a2,0x0000099d,0x0000099e,0x000200f8,0x0000099d,0x0003003e,0x000009a3, + 0x00000066,0x000200f9,0x000009a4,0x000200f8,0x000009a4,0x000400f6,0x000009a6,0x000009a7, + 0x00000001,0x000200f9,0x000009a8,0x000200f8,0x000009a8,0x0004003d,0x00000015,0x000009a9, + 0x000009a3,0x000500b0,0x00000035,0x000009aa,0x000009a9,0x00000028,0x000400fa,0x000009aa, + 0x000009a5,0x000009a6,0x000200f8,0x000009a5,0x0004003d,0x00000015,0x000009ab,0x000008f9, + 0x0004003d,0x00000015,0x000009ac,0x000002bc,0x0004003d,0x00000015,0x000009ad,0x0000099b, + 0x00050084,0x00000015,0x000009ae,0x0000006f,0x000009ad,0x00050080,0x00000015,0x000009af, + 0x000009ac,0x000009ae,0x00050084,0x00000015,0x000009b0,0x000009af,0x0000001f,0x00050080, + 0x00000015,0x000009b1,0x000009ab,0x000009b0,0x0004003d,0x00000015,0x000009b2,0x000009a3, + 0x00050084,0x00000015,0x000009b3,0x00000028,0x000009b2,0x00050080,0x00000015,0x000009b4, + 0x000009b1,0x000009b3,0x0004003d,0x00000015,0x000009b5,0x000002bf,0x00050080,0x00000015, + 0x000009b6,0x000009b4,0x000009b5,0x0004003d,0x00000015,0x000009b7,0x0000099b,0x00050084, + 0x00000015,0x000009b8,0x0000006f,0x000009b7,0x0004003d,0x00000015,0x000009b9,0x000009a3, + 0x00050084,0x00000015,0x000009ba,0x00000021,0x000009b9,0x00050080,0x00000015,0x000009bb, + 0x000009b8,0x000009ba,0x00050041,0x000000e2,0x000009bc,0x000008f4,0x000009bb,0x0004003d, + 0x00000006,0x000009bd,0x000009bc,0x0004003d,0x00000015,0x000009be,0x0000099b,0x00050084, + 0x00000015,0x000009bf,0x0000006f,0x000009be,0x0004003d,0x00000015,0x000009c0,0x000009a3, + 0x00050084,0x00000015,0x000009c1,0x00000021,0x000009c0,0x00050080,0x00000015,0x000009c2, + 0x000009bf,0x000009c1,0x00050080,0x00000015,0x000009c3,0x000009c2,0x0000006b,0x00050041, + 0x000000e2,0x000009c4,0x000008f4,0x000009c3,0x0004003d,0x00000006,0x000009c5,0x000009c4, + 0x00050050,0x00000007,0x000009c6,0x000009bd,0x000009c5,0x0004007c,0x00000015,0x000009c7, + 0x000009c6,0x00050041,0x0000054b,0x000009c8,0x00000543,0x000009b6,0x0005003e,0x000009c8, + 0x000009c7,0x00000028,0x00000021,0x000200f9,0x000009a7,0x000200f8,0x000009a7,0x0004003d, + 0x00000015,0x000009c9,0x000009a3,0x00050080,0x00000015,0x000009ca,0x000009c9,0x000000f9, + 0x0003003e,0x000009a3,0x000009ca,0x000200f9,0x000009a4,0x000200f8,0x000009a6,0x000200f9, + 0x0000099f,0x000200f8,0x0000099f,0x0004003d,0x00000015,0x000009cb,0x0000099b,0x00050080, + 0x00000015,0x000009cc,0x000009cb,0x000000f9,0x0003003e,0x0000099b,0x000009cc,0x000200f9, + 0x0000099c,0x000200f8,0x0000099e,0x000400e0,0x0000001e,0x0000001e,0x00000565,0x0004003d, + 0x00000015,0x000009ce,0x000002b9,0x000500c2,0x00000015,0x000009cf,0x000009ce,0x0000001e, + 0x0003003e,0x000009cd,0x000009cf,0x0004003d,0x00000015,0x000009d1,0x000002b9,0x000500c7, + 0x00000015,0x000009d2,0x000009d1,0x000000a4,0x00050084,0x00000015,0x000009d3,0x000009d2, + 0x00000021,0x0003003e,0x000009d0,0x000009d3,0x0004003d,0x0000003c,0x000009d5,0x00000504, + 0x0004003d,0x00000015,0x000009d6,0x000009cd,0x00050084,0x00000015,0x000009d7,0x00000021, + 0x000009d6,0x0004007c,0x0000003c,0x000009d8,0x000009d7,0x00050080,0x0000003c,0x000009d9, + 0x000009d5,0x000009d8,0x0003003e,0x000009d4,0x000009d9,0x0004003d,0x0000003c,0x000009db, + 0x0000050f,0x0004003d,0x00000015,0x000009dc,0x000002b6,0x00050084,0x00000015,0x000009dd, + 0x000009dc,0x00000021,0x0004007c,0x0000003c,0x000009de,0x000009dd,0x00050080,0x0000003c, + 0x000009df,0x000009db,0x000009de,0x0003003e,0x000009da,0x000009df,0x0003003e,0x000009e0, + 0x00000066,0x0003003e,0x000009e1,0x00000066,0x000200f9,0x000009e2,0x000200f8,0x000009e2, + 0x000400f6,0x000009e4,0x000009e5,0x00000001,0x000200f9,0x000009e6,0x000200f8,0x000009e6, + 0x0004003d,0x00000015,0x000009e7,0x000009e1,0x000500b0,0x00000035,0x000009e8,0x000009e7, + 0x00000021,0x000400fa,0x000009e8,0x000009e3,0x000009e4,0x000200f8,0x000009e3,0x0004003d, + 0x00000015,0x000009ea,0x000009d0,0x0004003d,0x00000015,0x000009eb,0x000009e1,0x00050080, + 0x00000015,0x000009ec,0x000009ea,0x000009eb,0x0003003e,0x000009e9,0x000009ec,0x0004003d, + 0x00000015,0x000009ee,0x000008f9,0x0004003d,0x00000015,0x000009ef,0x000009cd,0x00050084, + 0x00000015,0x000009f0,0x00000021,0x000009ef,0x00050084,0x00000015,0x000009f1,0x000009f0, + 0x0000001f,0x00050080,0x00000015,0x000009f2,0x000009ee,0x000009f1,0x0004003d,0x00000015, + 0x000009f3,0x000009e9,0x00050080,0x00000015,0x000009f4,0x000009f2,0x000009f3,0x00050041, + 0x0000054b,0x000009f5,0x00000543,0x000009f4,0x0006003d,0x00000015,0x000009f6,0x000009f5, + 0x00000030,0x00000021,0x0004007c,0x00000007,0x000009f7,0x000009f6,0x0004003d,0x00000015, + 0x000009f8,0x000008f9,0x0004003d,0x00000015,0x000009f9,0x000009cd,0x00050084,0x00000015, + 0x000009fa,0x00000021,0x000009f9,0x00050080,0x00000015,0x000009fb,0x000009fa,0x0000006b, + 0x00050084,0x00000015,0x000009fc,0x000009fb,0x0000001f,0x00050080,0x00000015,0x000009fd, + 0x000009f8,0x000009fc,0x0004003d,0x00000015,0x000009fe,0x000009e9,0x00050080,0x00000015, + 0x000009ff,0x000009fd,0x000009fe,0x00050041,0x0000054b,0x00000a00,0x00000543,0x000009ff, + 0x0006003d,0x00000015,0x00000a01,0x00000a00,0x00000030,0x00000021,0x0004007c,0x00000007, + 0x00000a02,0x00000a01,0x00050081,0x00000007,0x00000a03,0x000009f7,0x00000a02,0x0003003e, + 0x000009ed,0x00000a03,0x0004003d,0x00000015,0x00000a05,0x000008f9,0x0004003d,0x00000015, + 0x00000a06,0x000009cd,0x00050084,0x00000015,0x00000a07,0x00000021,0x00000a06,0x00050080, + 0x00000015,0x00000a08,0x0000006f,0x00000a07,0x00050084,0x00000015,0x00000a09,0x00000a08, + 0x0000001f,0x00050080,0x00000015,0x00000a0a,0x00000a05,0x00000a09,0x0004003d,0x00000015, + 0x00000a0b,0x000009e9,0x00050080,0x00000015,0x00000a0c,0x00000a0a,0x00000a0b,0x00050041, + 0x0000054b,0x00000a0d,0x00000543,0x00000a0c,0x0006003d,0x00000015,0x00000a0e,0x00000a0d, + 0x00000030,0x00000021,0x0004007c,0x00000007,0x00000a0f,0x00000a0e,0x0004003d,0x00000015, + 0x00000a10,0x000008f9,0x0004003d,0x00000015,0x00000a11,0x000009cd,0x00050084,0x00000015, + 0x00000a12,0x00000021,0x00000a11,0x00050080,0x00000015,0x00000a13,0x000002f3,0x00000a12, + 0x00050084,0x00000015,0x00000a14,0x00000a13,0x0000001f,0x00050080,0x00000015,0x00000a15, + 0x00000a10,0x00000a14,0x0004003d,0x00000015,0x00000a16,0x000009e9,0x00050080,0x00000015, + 0x00000a17,0x00000a15,0x00000a16,0x00050041,0x0000054b,0x00000a18,0x00000543,0x00000a17, + 0x0006003d,0x00000015,0x00000a19,0x00000a18,0x00000030,0x00000021,0x0004007c,0x00000007, + 0x00000a1a,0x00000a19,0x00050081,0x00000007,0x00000a1b,0x00000a0f,0x00000a1a,0x0003003e, + 0x00000a04,0x00000a1b,0x0004003d,0x00000007,0x00000a1d,0x000009ed,0x0004003d,0x00000007, + 0x00000a1e,0x00000a04,0x00050081,0x00000007,0x00000a1f,0x00000a1d,0x00000a1e,0x0003003e, + 0x00000a1c,0x00000a1f,0x0004003d,0x00000007,0x00000a21,0x00000a1c,0x0005008e,0x00000007, + 0x00000a23,0x00000a21,0x00000a22,0x0003003e,0x00000a20,0x00000a23,0x0004003d,0x00000007, + 0x00000a25,0x00000a20,0x0003003e,0x00000a24,0x00000a25,0x00050039,0x00000009,0x00000a26, + 0x0000000c,0x00000a24,0x00040071,0x00000015,0x00000a27,0x00000a26,0x0004003d,0x00000015, + 0x00000a28,0x000009e1,0x00050084,0x00000015,0x00000a29,0x0000001f,0x00000a28,0x000500c4, + 0x00000015,0x00000a2a,0x00000a27,0x00000a29,0x0004003d,0x00000015,0x00000a2b,0x000009e0, + 0x000500c5,0x00000015,0x00000a2c,0x00000a2b,0x00000a2a,0x0003003e,0x000009e0,0x00000a2c, + 0x000200f9,0x000009e5,0x000200f8,0x000009e5,0x0004003d,0x00000015,0x00000a2d,0x000009e1, + 0x00050080,0x00000015,0x00000a2e,0x00000a2d,0x000000f9,0x0003003e,0x000009e1,0x00000a2e, + 0x000200f9,0x000009e2,0x000200f8,0x000009e4,0x0004003d,0x00000035,0x00000a2f,0x000004fb, + 0x0004003d,0x0000003c,0x00000a30,0x000009d4,0x000500af,0x00000035,0x00000a31,0x00000a30, + 0x000001e1,0x000500a7,0x00000035,0x00000a32,0x00000a2f,0x00000a31,0x0004003d,0x0000003c, + 0x00000a33,0x000009da,0x000500af,0x00000035,0x00000a34,0x00000a33,0x000001e1,0x000500a7, + 0x00000035,0x00000a35,0x00000a32,0x00000a34,0x000300f7,0x00000a37,0x00000000,0x000400fa, + 0x00000a35,0x00000a36,0x00000a37,0x000200f8,0x00000a36,0x0004003d,0x0000003c,0x00000a38, + 0x000009d4,0x00050080,0x0000003c,0x00000a39,0x00000a38,0x000000f9,0x00050041,0x000001ed, + 0x00000a3a,0x000001ec,0x000001e1,0x0004003d,0x00000015,0x00000a3b,0x00000a3a,0x0004007c, + 0x0000003c,0x00000a3c,0x00000a3b,0x000500b1,0x00000035,0x00000a3d,0x00000a39,0x00000a3c, + 0x000200f9,0x00000a37,0x000200f8,0x00000a37,0x000700f5,0x00000035,0x00000a3e,0x00000a35, + 0x000009e4,0x00000a3d,0x00000a36,0x000300f7,0x00000a40,0x00000000,0x000400fa,0x00000a3e, + 0x00000a3f,0x00000a40,0x000200f8,0x00000a3f,0x0004003d,0x0000003c,0x00000a41,0x000009da, + 0x00050080,0x0000003c,0x00000a42,0x00000a41,0x000000f9,0x00050041,0x000001ed,0x00000a43, + 0x000001ec,0x000000f9,0x0004003d,0x00000015,0x00000a44,0x00000a43,0x0004007c,0x0000003c, + 0x00000a45,0x00000a44,0x000500b1,0x00000035,0x00000a46,0x00000a42,0x00000a45,0x000200f9, + 0x00000a40,0x000200f8,0x00000a40,0x000700f5,0x00000035,0x00000a47,0x00000a3e,0x00000a37, + 0x00000a46,0x00000a3f,0x000300f7,0x00000a49,0x00000000,0x000400fa,0x00000a47,0x00000a48, + 0x00000a49,0x000200f8,0x00000a48,0x0004003d,0x0000003c,0x00000a4e,0x000009da,0x0004007c, + 0x00000015,0x00000a4f,0x00000a4e,0x000500c2,0x00000015,0x00000a50,0x00000a4f,0x0000006b, + 0x00050041,0x000001ed,0x00000a51,0x000001ec,0x0000049c,0x0004003d,0x00000015,0x00000a52, + 0x00000a51,0x00050084,0x00000015,0x00000a53,0x00000a50,0x00000a52,0x0004003d,0x0000003c, + 0x00000a54,0x000009d4,0x0004007c,0x00000015,0x00000a55,0x00000a54,0x000500c2,0x00000015, + 0x00000a56,0x00000a55,0x0000006b,0x00050080,0x00000015,0x00000a57,0x00000a53,0x00000a56, + 0x00050084,0x00000015,0x00000a58,0x00000a57,0x0000006f,0x0004003d,0x00000015,0x00000a59, + 0x000002b9,0x000500c7,0x00000015,0x00000a5a,0x00000a59,0x000000a4,0x00050080,0x00000015, + 0x00000a5b,0x00000a58,0x00000a5a,0x0004003d,0x00000015,0x00000a5c,0x000009e0,0x00060041, + 0x00000a5d,0x00000a5e,0x00000a4d,0x000001e1,0x00000a5b,0x0003003e,0x00000a5e,0x00000a5c, + 0x000200f9,0x00000a49,0x000200f8,0x00000a49,0x000400e0,0x0000001e,0x0000001e,0x00000565, + 0x000200f9,0x0000099a,0x000200f8,0x0000099a,0x000300f7,0x00000a62,0x00000000,0x000400fa, + 0x00000a60,0x00000a61,0x00000a62,0x000200f8,0x00000a61,0x0003003e,0x00000a63,0x00000066, + 0x000200f9,0x00000a64,0x000200f8,0x00000a64,0x000400f6,0x00000a66,0x00000a67,0x00000001, + 0x000200f9,0x00000a68,0x000200f8,0x00000a68,0x0004003d,0x00000015,0x00000a69,0x00000a63, + 0x000500b0,0x00000035,0x00000a6a,0x00000a69,0x00000021,0x000400fa,0x00000a6a,0x00000a65, + 0x00000a66,0x000200f8,0x00000a65,0x0003003e,0x00000a6b,0x00000066,0x000200f9,0x00000a6c, + 0x000200f8,0x00000a6c,0x000400f6,0x00000a6e,0x00000a6f,0x00000001,0x000200f9,0x00000a70, + 0x000200f8,0x00000a70,0x0004003d,0x00000015,0x00000a71,0x00000a6b,0x000500b0,0x00000035, + 0x00000a72,0x00000a71,0x00000028,0x000400fa,0x00000a72,0x00000a6d,0x00000a6e,0x000200f8, + 0x00000a6d,0x0004003d,0x00000015,0x00000a73,0x000008f9,0x0004003d,0x00000015,0x00000a74, + 0x000002bc,0x0004003d,0x00000015,0x00000a75,0x00000a63,0x00050084,0x00000015,0x00000a76, + 0x0000006f,0x00000a75,0x00050080,0x00000015,0x00000a77,0x00000a74,0x00000a76,0x00050084, + 0x00000015,0x00000a78,0x00000a77,0x0000001f,0x00050080,0x00000015,0x00000a79,0x00000a73, + 0x00000a78,0x0004003d,0x00000015,0x00000a7a,0x00000a6b,0x00050084,0x00000015,0x00000a7b, + 0x00000028,0x00000a7a,0x00050080,0x00000015,0x00000a7c,0x00000a79,0x00000a7b,0x0004003d, + 0x00000015,0x00000a7d,0x000002bf,0x00050080,0x00000015,0x00000a7e,0x00000a7c,0x00000a7d, + 0x0004003d,0x00000015,0x00000a7f,0x00000a63,0x00050084,0x00000015,0x00000a80,0x0000006f, + 0x00000a7f,0x0004003d,0x00000015,0x00000a81,0x00000a6b,0x00050084,0x00000015,0x00000a82, + 0x00000021,0x00000a81,0x00050080,0x00000015,0x00000a83,0x00000a80,0x00000a82,0x00050041, + 0x000000e2,0x00000a84,0x000008f4,0x00000a83,0x0004003d,0x00000006,0x00000a85,0x00000a84, + 0x0004003d,0x00000015,0x00000a86,0x00000a63,0x00050084,0x00000015,0x00000a87,0x0000006f, + 0x00000a86,0x0004003d,0x00000015,0x00000a88,0x00000a6b,0x00050084,0x00000015,0x00000a89, + 0x00000021,0x00000a88,0x00050080,0x00000015,0x00000a8a,0x00000a87,0x00000a89,0x00050080, + 0x00000015,0x00000a8b,0x00000a8a,0x0000006b,0x00050041,0x000000e2,0x00000a8c,0x000008f4, + 0x00000a8b,0x0004003d,0x00000006,0x00000a8d,0x00000a8c,0x00050050,0x00000007,0x00000a8e, + 0x00000a85,0x00000a8d,0x0004007c,0x00000015,0x00000a8f,0x00000a8e,0x00050041,0x0000054b, + 0x00000a90,0x00000543,0x00000a7e,0x0005003e,0x00000a90,0x00000a8f,0x00000028,0x00000021, + 0x000200f9,0x00000a6f,0x000200f8,0x00000a6f,0x0004003d,0x00000015,0x00000a91,0x00000a6b, + 0x00050080,0x00000015,0x00000a92,0x00000a91,0x000000f9,0x0003003e,0x00000a6b,0x00000a92, + 0x000200f9,0x00000a6c,0x000200f8,0x00000a6e,0x000200f9,0x00000a67,0x000200f8,0x00000a67, + 0x0004003d,0x00000015,0x00000a93,0x00000a63,0x00050080,0x00000015,0x00000a94,0x00000a93, + 0x000000f9,0x0003003e,0x00000a63,0x00000a94,0x000200f9,0x00000a64,0x000200f8,0x00000a66, + 0x000400e0,0x0000001e,0x0000001e,0x00000565,0x0004003d,0x00000015,0x00000a96,0x000008f9, + 0x00050041,0x0000054b,0x00000a97,0x00000543,0x00000a96,0x00081169,0x00000566,0x00000a98, + 0x00000a97,0x000001e1,0x0000001f,0x00000030,0x00000021,0x0003003e,0x00000a95,0x00000a98, + 0x0004003d,0x00000015,0x00000a9a,0x000008f9,0x00050080,0x00000015,0x00000a9b,0x00000a9a, + 0x0000006f,0x00050041,0x0000054b,0x00000a9c,0x00000543,0x00000a9b,0x0004003d,0x00000015, + 0x00000a9d,0x000008f9,0x00050080,0x00000015,0x00000a9e,0x00000a9d,0x0000006f,0x00081169, + 0x00000566,0x00000a9f,0x00000a9c,0x000001e1,0x0000001f,0x00000030,0x00000021,0x0003003e, + 0x00000a99,0x00000a9f,0x000400e0,0x0000001e,0x0000001e,0x00000565,0x00050041,0x00000342, + 0x00000aa3,0x00000358,0x00000066,0x00081169,0x00000aa0,0x00000aa4,0x00000aa3,0x000001e1, + 0x0000001f,0x00000030,0x00000021,0x0003003e,0x00000aa2,0x00000aa4,0x00050041,0x00000342, + 0x00000aa6,0x00000358,0x000002d3,0x00081169,0x00000aa0,0x00000aa7,0x00000aa6,0x000001e1, + 0x0000001f,0x00000030,0x00000021,0x0003003e,0x00000aa5,0x00000aa7,0x0003003e,0x00000aaa, + 0x00000aab,0x0004003d,0x00000566,0x00000aac,0x00000a95,0x0004003d,0x00000aa0,0x00000aad, + 0x00000aa2,0x0004003d,0x00000aa8,0x00000aae,0x00000aaa,0x0006116b,0x00000aa8,0x00000aaf, + 0x00000aac,0x00000aad,0x00000aae,0x0003003e,0x00000aaa,0x00000aaf,0x0004003d,0x00000566, + 0x00000ab0,0x00000a99,0x0004003d,0x00000aa0,0x00000ab1,0x00000aa5,0x0004003d,0x00000aa8, + 0x00000ab2,0x00000aaa,0x0006116b,0x00000aa8,0x00000ab3,0x00000ab0,0x00000ab1,0x00000ab2, + 0x0003003e,0x00000aaa,0x00000ab3,0x0004003d,0x00000015,0x00000ab4,0x000002bf,0x000500b0, + 0x00000035,0x00000ab5,0x00000ab4,0x00000021,0x000300f7,0x00000ab7,0x00000000,0x000400fa, + 0x00000ab5,0x00000ab6,0x00000ab7,0x000200f8,0x00000ab6,0x0003003e,0x00000ab8,0x00000066, + 0x000200f9,0x00000ab9,0x000200f8,0x00000ab9,0x000400f6,0x00000abb,0x00000abc,0x00000001, + 0x000200f9,0x00000abd,0x000200f8,0x00000abd,0x0004003d,0x00000015,0x00000abe,0x00000ab8, + 0x000500b0,0x00000035,0x00000abf,0x00000abe,0x00000021,0x000400fa,0x00000abf,0x00000aba, + 0x00000abb,0x000200f8,0x00000aba,0x0004003d,0x00000015,0x00000ac1,0x00000371,0x0004003d, + 0x00000015,0x00000ac2,0x000002bc,0x00050080,0x00000015,0x00000ac3,0x00000ac1,0x00000ac2, + 0x0004003d,0x00000015,0x00000ac4,0x00000ab8,0x00050084,0x00000015,0x00000ac5,0x0000006f, + 0x00000ac4,0x00050080,0x00000015,0x00000ac6,0x00000ac3,0x00000ac5,0x0003003e,0x00000ac0, + 0x00000ac6,0x0004003d,0x0000003c,0x00000ac8,0x00000504,0x0004003d,0x00000015,0x00000ac9, + 0x00000ac0,0x000500c7,0x00000015,0x00000aca,0x00000ac9,0x000000a4,0x0004007c,0x0000003c, + 0x00000acb,0x00000aca,0x00050080,0x0000003c,0x00000acc,0x00000ac8,0x00000acb,0x0003003e, + 0x00000ac7,0x00000acc,0x0004003d,0x0000003c,0x00000ace,0x0000050f,0x0004003d,0x00000015, + 0x00000acf,0x00000ac0,0x000500c2,0x00000015,0x00000ad0,0x00000acf,0x0000001e,0x0004007c, + 0x0000003c,0x00000ad1,0x00000ad0,0x00050080,0x0000003c,0x00000ad2,0x00000ace,0x00000ad1, + 0x0003003e,0x00000acd,0x00000ad2,0x0004003d,0x00000035,0x00000ad3,0x000004fb,0x0004003d, + 0x0000003c,0x00000ad4,0x00000ac7,0x000500af,0x00000035,0x00000ad5,0x00000ad4,0x000001e1, + 0x000500a7,0x00000035,0x00000ad6,0x00000ad3,0x00000ad5,0x0004003d,0x0000003c,0x00000ad7, + 0x00000acd,0x000500af,0x00000035,0x00000ad8,0x00000ad7,0x000001e1,0x000500a7,0x00000035, + 0x00000ad9,0x00000ad6,0x00000ad8,0x000300f7,0x00000adb,0x00000000,0x000400fa,0x00000ad9, + 0x00000ada,0x00000adb,0x000200f8,0x00000ada,0x0004003d,0x0000003c,0x00000adc,0x00000ac7, + 0x00050041,0x000001ed,0x00000add,0x000001ec,0x000001e1,0x0004003d,0x00000015,0x00000ade, + 0x00000add,0x0004007c,0x0000003c,0x00000adf,0x00000ade,0x000500b1,0x00000035,0x00000ae0, + 0x00000adc,0x00000adf,0x000200f9,0x00000adb,0x000200f8,0x00000adb,0x000700f5,0x00000035, + 0x00000ae1,0x00000ad9,0x00000aba,0x00000ae0,0x00000ada,0x000300f7,0x00000ae3,0x00000000, + 0x000400fa,0x00000ae1,0x00000ae2,0x00000ae3,0x000200f8,0x00000ae2,0x0004003d,0x0000003c, + 0x00000ae4,0x00000acd,0x00050041,0x000001ed,0x00000ae5,0x000001ec,0x000000f9,0x0004003d, + 0x00000015,0x00000ae6,0x00000ae5,0x0004007c,0x0000003c,0x00000ae7,0x00000ae6,0x000500b1, + 0x00000035,0x00000ae8,0x00000ae4,0x00000ae7,0x000200f9,0x00000ae3,0x000200f8,0x00000ae3, + 0x000700f5,0x00000035,0x00000ae9,0x00000ae1,0x00000adb,0x00000ae8,0x00000ae2,0x000300f7, + 0x00000aeb,0x00000000,0x000400fa,0x00000ae9,0x00000aea,0x00000aeb,0x000200f8,0x00000aea, + 0x0004003d,0x0000003c,0x00000af0,0x00000acd,0x0004007c,0x00000015,0x00000af1,0x00000af0, + 0x00050041,0x000001ed,0x00000af2,0x000001ec,0x000001e1,0x0004003d,0x00000015,0x00000af3, + 0x00000af2,0x00050084,0x00000015,0x00000af4,0x00000af1,0x00000af3,0x0004003d,0x0000003c, + 0x00000af5,0x00000ac7,0x0004007c,0x00000015,0x00000af6,0x00000af5,0x00050080,0x00000015, + 0x00000af7,0x00000af4,0x00000af6,0x00050084,0x00000015,0x00000af8,0x00000af7,0x00000021, + 0x0004003d,0x00000015,0x00000af9,0x000002bf,0x00050080,0x00000015,0x00000afa,0x00000af8, + 0x00000af9,0x0004003d,0x00000015,0x00000afb,0x00000ab8,0x00050084,0x00000015,0x00000afc, + 0x00000028,0x00000afb,0x00050041,0x000000e2,0x00000afd,0x00000aaa,0x00000afc,0x0004003d, + 0x00000006,0x00000afe,0x00000afd,0x00040073,0x000000b9,0x00000aff,0x00000afe,0x0004003d, + 0x00000015,0x00000b00,0x00000ab8,0x00050084,0x00000015,0x00000b01,0x00000028,0x00000b00, + 0x00050080,0x00000015,0x00000b02,0x00000b01,0x0000006b,0x00050041,0x000000e2,0x00000b03, + 0x00000aaa,0x00000b02,0x0004003d,0x00000006,0x00000b04,0x00000b03,0x00040073,0x000000b9, + 0x00000b05,0x00000b04,0x00050050,0x000000ba,0x00000b06,0x00000aff,0x00000b05,0x00060041, + 0x00000b07,0x00000b08,0x00000aef,0x000001e1,0x00000afa,0x0003003e,0x00000b08,0x00000b06, + 0x000200f9,0x00000aeb,0x000200f8,0x00000aeb,0x000200f9,0x00000abc,0x000200f8,0x00000abc, + 0x0004003d,0x00000015,0x00000b09,0x00000ab8,0x00050080,0x00000015,0x00000b0a,0x00000b09, + 0x000000f9,0x0003003e,0x00000ab8,0x00000b0a,0x000200f9,0x00000ab9,0x000200f8,0x00000abb, + 0x000200f9,0x00000ab7,0x000200f8,0x00000ab7,0x000400e0,0x0000001e,0x0000001e,0x00000565, + 0x000200f9,0x00000a62,0x000200f8,0x00000a62,0x000300f7,0x00000b0e,0x00000000,0x000400fa, + 0x00000b0c,0x00000b0d,0x00000b0e,0x000200f8,0x00000b0d,0x0003003e,0x00000b0f,0x00000066, + 0x000200f9,0x00000b10,0x000200f8,0x00000b10,0x000400f6,0x00000b12,0x00000b13,0x00000001, + 0x000200f9,0x00000b14,0x000200f8,0x00000b14,0x0004003d,0x00000015,0x00000b15,0x00000b0f, + 0x000500b0,0x00000035,0x00000b16,0x00000b15,0x00000028,0x000400fa,0x00000b16,0x00000b11, + 0x00000b12,0x000200f8,0x00000b11,0x0004003d,0x00000015,0x00000b18,0x00000b0f,0x00050084, + 0x00000015,0x00000b19,0x00000021,0x00000b18,0x00050041,0x000000e2,0x00000b1a,0x000008f4, + 0x00000b19,0x0004003d,0x00000006,0x00000b1b,0x00000b1a,0x0004003d,0x00000015,0x00000b1c, + 0x00000b0f,0x00050084,0x00000015,0x00000b1d,0x00000021,0x00000b1c,0x00050080,0x00000015, + 0x00000b1e,0x00000b1d,0x0000006b,0x00050041,0x000000e2,0x00000b1f,0x000008f4,0x00000b1e, + 0x0004003d,0x00000006,0x00000b20,0x00000b1f,0x00050050,0x00000007,0x00000b21,0x00000b1b, + 0x00000b20,0x0003003e,0x00000b17,0x00000b21,0x0004003d,0x00000015,0x00000b23,0x00000b0f, + 0x00050084,0x00000015,0x00000b24,0x00000021,0x00000b23,0x00050080,0x00000015,0x00000b25, + 0x0000006f,0x00000b24,0x00050041,0x000000e2,0x00000b26,0x000008f4,0x00000b25,0x0004003d, + 0x00000006,0x00000b27,0x00000b26,0x0004003d,0x00000015,0x00000b28,0x00000b0f,0x00050084, + 0x00000015,0x00000b29,0x00000021,0x00000b28,0x00050080,0x00000015,0x00000b2a,0x0000006f, + 0x00000b29,0x00050080,0x00000015,0x00000b2b,0x00000b2a,0x0000006b,0x00050041,0x000000e2, + 0x00000b2c,0x000008f4,0x00000b2b,0x0004003d,0x00000006,0x00000b2d,0x00000b2c,0x00050050, + 0x00000007,0x00000b2e,0x00000b27,0x00000b2d,0x0003003e,0x00000b22,0x00000b2e,0x0004003d, + 0x00000007,0x00000b30,0x00000b17,0x0004003d,0x00000007,0x00000b31,0x00000b17,0x0004009c, + 0x00000057,0x00000b32,0x00000b31,0x000600a9,0x00000007,0x00000b33,0x00000b32,0x00000055, + 0x00000b30,0x0003003e,0x00000b34,0x00000b33,0x00050039,0x00000009,0x00000b35,0x00000013, + 0x00000b34,0x00040071,0x00000015,0x00000b36,0x00000b35,0x0003003e,0x00000b2f,0x00000b36, + 0x0004003d,0x00000007,0x00000b38,0x00000b22,0x0004003d,0x00000007,0x00000b39,0x00000b22, + 0x0004009c,0x00000057,0x00000b3a,0x00000b39,0x000600a9,0x00000007,0x00000b3b,0x00000b3a, + 0x00000055,0x00000b38,0x0003003e,0x00000b3c,0x00000b3b,0x00050039,0x00000009,0x00000b3d, + 0x00000013,0x00000b3c,0x00040071,0x00000015,0x00000b3e,0x00000b3d,0x0003003e,0x00000b37, + 0x00000b3e,0x0004003d,0x00000015,0x00000b40,0x000002bf,0x000500c7,0x00000015,0x00000b41, + 0x00000b40,0x0000006b,0x000500ab,0x00000035,0x00000b42,0x00000b41,0x00000066,0x0003003e, + 0x00000b3f,0x00000b42,0x0004003d,0x00000035,0x00000b44,0x00000b3f,0x0004003d,0x00000015, + 0x00000b45,0x00000b2f,0x0004003d,0x00000015,0x00000b46,0x00000b37,0x000600a9,0x00000015, + 0x00000b47,0x00000b44,0x00000b45,0x00000b46,0x0006015a,0x00000015,0x00000b48,0x0000001e, + 0x00000b47,0x0000006b,0x0003003e,0x00000b43,0x00000b48,0x0004003d,0x00000035,0x00000b4a, + 0x00000b3f,0x000300f7,0x00000b4d,0x00000000,0x000400fa,0x00000b4a,0x00000b4c,0x00000b52, + 0x000200f8,0x00000b4c,0x0004003d,0x00000015,0x00000b4e,0x00000b43,0x0004003d,0x00000015, + 0x00000b4f,0x00000b37,0x000500c4,0x00000015,0x00000b50,0x00000b4f,0x0000001f,0x000500c5, + 0x00000015,0x00000b51,0x00000b4e,0x00000b50,0x0003003e,0x00000b4b,0x00000b51,0x000200f9, + 0x00000b4d,0x000200f8,0x00000b52,0x0004003d,0x00000015,0x00000b53,0x00000b2f,0x0004003d, + 0x00000015,0x00000b54,0x00000b43,0x000500c4,0x00000015,0x00000b55,0x00000b54,0x0000001f, + 0x000500c5,0x00000015,0x00000b56,0x00000b53,0x00000b55,0x0003003e,0x00000b4b,0x00000b56, + 0x000200f9,0x00000b4d,0x000200f8,0x00000b4d,0x0004003d,0x00000015,0x00000b57,0x00000b4b, + 0x0003003e,0x00000b49,0x00000b57,0x0004003d,0x00000035,0x00000b59,0x00000b3f,0x000300f7, + 0x00000b5c,0x00000000,0x000400fa,0x00000b59,0x00000b5b,0x00000b5f,0x000200f8,0x00000b5b, + 0x0004003d,0x00000015,0x00000b5d,0x000002bc,0x00050080,0x00000015,0x00000b5e,0x00000b5d, + 0x0000006f,0x0003003e,0x00000b5a,0x00000b5e,0x000200f9,0x00000b5c,0x000200f8,0x00000b5f, + 0x0004003d,0x00000015,0x00000b60,0x000002bc,0x0003003e,0x00000b5a,0x00000b60,0x000200f9, + 0x00000b5c,0x000200f8,0x00000b5c,0x0004003d,0x00000015,0x00000b61,0x00000b5a,0x0003003e, + 0x00000b58,0x00000b61,0x0004003d,0x00000015,0x00000b62,0x000008f9,0x0004003d,0x00000015, + 0x00000b63,0x00000b58,0x00050084,0x00000015,0x00000b64,0x00000b63,0x0000006f,0x00050080, + 0x00000015,0x00000b65,0x00000b62,0x00000b64,0x0004003d,0x00000015,0x00000b66,0x00000b0f, + 0x00050084,0x00000015,0x00000b67,0x00000021,0x00000b66,0x00050080,0x00000015,0x00000b68, + 0x00000b65,0x00000b67,0x0004003d,0x00000015,0x00000b69,0x000002bf,0x000500c2,0x00000015, + 0x00000b6a,0x00000b69,0x0000006b,0x00050080,0x00000015,0x00000b6b,0x00000b68,0x00000b6a, + 0x0004003d,0x00000015,0x00000b6c,0x00000b49,0x00050041,0x0000054b,0x00000b6d,0x00000543, + 0x00000b6b,0x0005003e,0x00000b6d,0x00000b6c,0x00000028,0x00000021,0x000200f9,0x00000b13, + 0x000200f8,0x00000b13,0x0004003d,0x00000015,0x00000b6e,0x00000b0f,0x00050080,0x00000015, + 0x00000b6f,0x00000b6e,0x000000f9,0x0003003e,0x00000b0f,0x00000b6f,0x000200f9,0x00000b10, + 0x000200f8,0x00000b12,0x000400e0,0x0000001e,0x0000001e,0x00000565,0x0004003d,0x00000015, + 0x00000b71,0x000002b9,0x000500c2,0x00000015,0x00000b72,0x00000b71,0x0000006b,0x0003003e, + 0x00000b70,0x00000b72,0x0004003d,0x00000015,0x00000b74,0x000002b9,0x000500c7,0x00000015, + 0x00000b75,0x00000b74,0x0000006b,0x0003003e,0x00000b73,0x00000b75,0x0004003d,0x00000015, + 0x00000b77,0x00000371,0x0004003d,0x00000015,0x00000b78,0x00000b70,0x00050080,0x00000015, + 0x00000b79,0x00000b77,0x00000b78,0x0003003e,0x00000b76,0x00000b79,0x0004003d,0x0000003c, + 0x00000b7b,0x00000504,0x0004003d,0x00000015,0x00000b7c,0x00000b76,0x000500c7,0x00000015, + 0x00000b7d,0x00000b7c,0x000000a4,0x0004007c,0x0000003c,0x00000b7e,0x00000b7d,0x00050080, + 0x0000003c,0x00000b7f,0x00000b7b,0x00000b7e,0x0003003e,0x00000b7a,0x00000b7f,0x0004003d, + 0x0000003c,0x00000b81,0x0000050f,0x0004003d,0x00000015,0x00000b82,0x00000b76,0x000500c2, + 0x00000015,0x00000b83,0x00000b82,0x0000001e,0x0004007c,0x0000003c,0x00000b84,0x00000b83, + 0x00050080,0x0000003c,0x00000b85,0x00000b81,0x00000b84,0x0003003e,0x00000b80,0x00000b85, + 0x0004003d,0x00000015,0x00000b87,0x000008f9,0x0004003d,0x00000015,0x00000b88,0x00000b70, + 0x00050084,0x00000015,0x00000b89,0x00000b88,0x0000006f,0x00050080,0x00000015,0x00000b8a, + 0x00000b87,0x00000b89,0x0004003d,0x00000015,0x00000b8b,0x00000b73,0x00050084,0x00000015, + 0x00000b8c,0x00000b8b,0x00000028,0x00050080,0x00000015,0x00000b8d,0x00000b8a,0x00000b8c, + 0x0003003e,0x00000b86,0x00000b8d,0x0004003d,0x00000035,0x00000b8e,0x000004fb,0x0004003d, + 0x0000003c,0x00000b8f,0x00000b7a,0x000500af,0x00000035,0x00000b90,0x00000b8f,0x000001e1, + 0x000500a7,0x00000035,0x00000b91,0x00000b8e,0x00000b90,0x0004003d,0x0000003c,0x00000b92, + 0x00000b80,0x000500af,0x00000035,0x00000b93,0x00000b92,0x000001e1,0x000500a7,0x00000035, + 0x00000b94,0x00000b91,0x00000b93,0x000300f7,0x00000b96,0x00000000,0x000400fa,0x00000b94, + 0x00000b95,0x00000b96,0x000200f8,0x00000b95,0x0004003d,0x0000003c,0x00000b97,0x00000b7a, + 0x00050041,0x000001ed,0x00000b98,0x000001ec,0x000001e1,0x0004003d,0x00000015,0x00000b99, + 0x00000b98,0x0004007c,0x0000003c,0x00000b9a,0x00000b99,0x000500b1,0x00000035,0x00000b9b, + 0x00000b97,0x00000b9a,0x000200f9,0x00000b96,0x000200f8,0x00000b96,0x000700f5,0x00000035, + 0x00000b9c,0x00000b94,0x00000b12,0x00000b9b,0x00000b95,0x000300f7,0x00000b9e,0x00000000, + 0x000400fa,0x00000b9c,0x00000b9d,0x00000b9e,0x000200f8,0x00000b9d,0x0004003d,0x0000003c, + 0x00000b9f,0x00000b80,0x00050041,0x000001ed,0x00000ba0,0x000001ec,0x000000f9,0x0004003d, + 0x00000015,0x00000ba1,0x00000ba0,0x0004007c,0x0000003c,0x00000ba2,0x00000ba1,0x000500b1, + 0x00000035,0x00000ba3,0x00000b9f,0x00000ba2,0x000200f9,0x00000b9e,0x000200f8,0x00000b9e, + 0x000700f5,0x00000035,0x00000ba4,0x00000b9c,0x00000b96,0x00000ba3,0x00000b9d,0x000300f7, + 0x00000ba6,0x00000000,0x000400fa,0x00000ba4,0x00000ba5,0x00000ba6,0x000200f8,0x00000ba5, + 0x0004003d,0x0000003c,0x00000bab,0x00000b80,0x0004007c,0x00000015,0x00000bac,0x00000bab, + 0x00050041,0x000001ed,0x00000bad,0x000001ec,0x000001e1,0x0004003d,0x00000015,0x00000bae, + 0x00000bad,0x00050084,0x00000015,0x00000baf,0x00000bac,0x00000bae,0x0004003d,0x0000003c, + 0x00000bb0,0x00000b7a,0x0004007c,0x00000015,0x00000bb1,0x00000bb0,0x00050080,0x00000015, + 0x00000bb2,0x00000baf,0x00000bb1,0x00050084,0x00000015,0x00000bb3,0x00000bb2,0x00000021, + 0x0004003d,0x00000015,0x00000bb4,0x00000b73,0x00050080,0x00000015,0x00000bb5,0x00000bb3, + 0x00000bb4,0x0004003d,0x00000015,0x00000bb6,0x00000b86,0x00050041,0x0000054b,0x00000bb7, + 0x00000543,0x00000bb6,0x0006003d,0x00000015,0x00000bb8,0x00000bb7,0x00000030,0x00000021, + 0x0004003d,0x00000015,0x00000bb9,0x00000b86,0x00050080,0x00000015,0x00000bba,0x00000bb9, + 0x0000006b,0x00050041,0x0000054b,0x00000bbb,0x00000543,0x00000bba,0x0006003d,0x00000015, + 0x00000bbc,0x00000bbb,0x00000030,0x00000021,0x0004003d,0x00000015,0x00000bbd,0x00000b86, + 0x00050080,0x00000015,0x00000bbe,0x00000bbd,0x00000021,0x00050041,0x0000054b,0x00000bbf, + 0x00000543,0x00000bbe,0x0006003d,0x00000015,0x00000bc0,0x00000bbf,0x00000030,0x00000021, + 0x0004003d,0x00000015,0x00000bc1,0x00000b86,0x00050080,0x00000015,0x00000bc2,0x00000bc1, + 0x0000001e,0x00050041,0x0000054b,0x00000bc3,0x00000543,0x00000bc2,0x0006003d,0x00000015, + 0x00000bc4,0x00000bc3,0x00000030,0x00000021,0x00070050,0x000002d7,0x00000bc5,0x00000bb8, + 0x00000bbc,0x00000bc0,0x00000bc4,0x00060041,0x000002df,0x00000bc6,0x00000baa,0x000001e1, + 0x00000bb5,0x0003003e,0x00000bc6,0x00000bc5,0x000200f9,0x00000ba6,0x000200f8,0x00000ba6, + 0x000200f9,0x00000b0e,0x000200f8,0x00000b0e,0x000400e0,0x00000021,0x00000021,0x00000364, + 0x000200f9,0x000004ef,0x000200f8,0x000004ef,0x00050041,0x000001ed,0x00000bc7,0x000001ec, + 0x00000695,0x0004003d,0x00000015,0x00000bc8,0x00000bc7,0x0004003d,0x00000015,0x00000bc9, + 0x000004e9,0x00050080,0x00000015,0x00000bca,0x00000bc9,0x00000bc8,0x0003003e,0x000004e9, + 0x00000bca,0x000200f9,0x000004ec,0x000200f8,0x000004ee,0x000100fd,0x00010038,0x00050036, + 0x00000009,0x0000000c,0x00000000,0x0000000a,0x00030037,0x00000008,0x0000000b,0x000200f8, + 0x0000000d,0x0004003b,0x00000008,0x00000052,0x00000007,0x0004003b,0x0000005c,0x0000005d, + 0x00000007,0x0004003b,0x00000062,0x00000063,0x00000007,0x0004003d,0x00000007,0x00000053, + 0x0000000b,0x0004003d,0x00000007,0x00000056,0x0000000b,0x0004009c,0x00000057,0x00000058, + 0x00000056,0x000600a9,0x00000007,0x00000059,0x00000058,0x00000055,0x00000053,0x0003003e, + 0x00000052,0x00000059,0x0004003d,0x00000007,0x0000005e,0x00000052,0x00040073,0x0000005b, + 0x0000005f,0x0000005e,0x0003003e,0x0000005d,0x0000005f,0x0004003d,0x0000005b,0x00000064, + 0x0000005d,0x0004007c,0x00000061,0x00000065,0x00000064,0x0003003e,0x00000063,0x00000065, + 0x00050041,0x00000067,0x00000068,0x00000063,0x00000066,0x0004003d,0x00000060,0x00000069, + 0x00000068,0x00040071,0x00000015,0x0000006a,0x00000069,0x00050041,0x00000067,0x0000006c, + 0x00000063,0x0000006b,0x0004003d,0x00000060,0x0000006d,0x0000006c,0x00040071,0x00000015, + 0x0000006e,0x0000006d,0x000500c4,0x00000015,0x00000070,0x0000006e,0x0000006f,0x000500c5, + 0x00000015,0x00000071,0x0000006a,0x00000070,0x00040071,0x00000009,0x00000072,0x00000071, + 0x000200fe,0x00000072,0x00010038,0x00050036,0x00000007,0x00000010,0x00000000,0x0000000e, + 0x00030037,0x00000008,0x0000000f,0x000200f8,0x00000011,0x0004003b,0x00000008,0x00000075, + 0x00000007,0x0004003b,0x00000008,0x0000007c,0x00000007,0x0004003b,0x00000008,0x00000084, + 0x00000007,0x0004003b,0x00000008,0x0000008a,0x00000007,0x0004003d,0x00000007,0x00000076, + 0x0000000f,0x0008000c,0x00000007,0x0000007b,0x00000001,0x0000002b,0x00000076,0x00000078, + 0x0000007a,0x0003003e,0x00000075,0x0000007b,0x0004003d,0x00000007,0x0000007f,0x00000075, + 0x0006000c,0x00000007,0x00000080,0x00000001,0x00000004,0x0000007f,0x0008000c,0x00000007, + 0x00000083,0x00000001,0x00000032,0x0000007e,0x00000080,0x00000082,0x0003003e,0x0000007c, + 0x00000083,0x0004003d,0x00000007,0x00000085,0x00000075,0x0004003d,0x00000007,0x00000086, + 0x0000007c,0x0008000c,0x00000007,0x00000089,0x00000001,0x00000032,0x00000085,0x00000086, + 0x00000088,0x0003003e,0x00000084,0x00000089,0x0004003d,0x00000007,0x0000008b,0x0000000f, + 0x0004003d,0x00000007,0x0000008c,0x00000084,0x00050085,0x00000007,0x0000008d,0x0000008b, + 0x0000008c,0x0003003e,0x0000008a,0x0000008d,0x0004003d,0x00000007,0x0000008e,0x0000008a, + 0x000200fe,0x0000008e,0x00010038,0x00050036,0x00000009,0x00000013,0x00000000,0x0000000a, + 0x00030037,0x00000008,0x00000012,0x000200f8,0x00000014,0x0004003b,0x0000005c,0x00000091, + 0x00000007,0x0004003b,0x00000062,0x00000094,0x00000007,0x0004003d,0x00000007,0x00000092, + 0x00000012,0x00040073,0x0000005b,0x00000093,0x00000092,0x0003003e,0x00000091,0x00000093, + 0x0004003d,0x0000005b,0x00000095,0x00000091,0x0004007c,0x00000061,0x00000096,0x00000095, + 0x0003003e,0x00000094,0x00000096,0x00050041,0x00000067,0x00000097,0x00000094,0x00000066, + 0x0004003d,0x00000060,0x00000098,0x00000097,0x00040071,0x00000015,0x00000099,0x00000098, + 0x00050041,0x00000067,0x0000009a,0x00000094,0x0000006b,0x0004003d,0x00000060,0x0000009b, + 0x0000009a,0x00040071,0x00000015,0x0000009c,0x0000009b,0x000500c4,0x00000015,0x0000009d, + 0x0000009c,0x0000006f,0x000500c5,0x00000015,0x0000009e,0x00000099,0x0000009d,0x00040071, + 0x00000009,0x0000009f,0x0000009e,0x000200fe,0x0000009f,0x00010038,0x00050036,0x00000015, + 0x00000019,0x00000000,0x00000017,0x00030037,0x00000016,0x00000018,0x000200f8,0x0000001a, + 0x0004003b,0x00000016,0x000000a2,0x00000007,0x0004003b,0x00000016,0x000000a6,0x00000007, + 0x0004003d,0x00000015,0x000000a3,0x00000018,0x000500c7,0x00000015,0x000000a5,0x000000a3, + 0x000000a4,0x0003003e,0x000000a2,0x000000a5,0x0004003d,0x00000015,0x000000a7,0x00000018, + 0x000500c2,0x00000015,0x000000a8,0x000000a7,0x0000001e,0x0003003e,0x000000a6,0x000000a8, + 0x0004003d,0x00000015,0x000000a9,0x000000a6,0x000500c2,0x00000015,0x000000aa,0x000000a9, + 0x00000021,0x00050084,0x00000015,0x000000ab,0x000000aa,0x00000020,0x0004003d,0x00000015, + 0x000000ac,0x000000a2,0x000500c2,0x00000015,0x000000ad,0x000000ac,0x00000021,0x00050084, + 0x00000015,0x000000ae,0x000000ad,0x0000001f,0x00050080,0x00000015,0x000000af,0x000000ab, + 0x000000ae,0x0004003d,0x00000015,0x000000b0,0x000000a6,0x000500c7,0x00000015,0x000000b1, + 0x000000b0,0x0000001e,0x00050084,0x00000015,0x000000b2,0x000000b1,0x00000028,0x00050080, + 0x00000015,0x000000b3,0x000000af,0x000000b2,0x0004003d,0x00000015,0x000000b4,0x000000a2, + 0x000500c7,0x00000015,0x000000b5,0x000000b4,0x0000001e,0x00050080,0x00000015,0x000000b6, + 0x000000b3,0x000000b5,0x000200fe,0x000000b6,0x00010038,0x00050036,0x00000015,0x0000001c, + 0x00000000,0x00000017,0x00030037,0x00000016,0x0000001b,0x000200f8,0x0000001d,0x0004003b, + 0x000000bb,0x000000bc,0x00000007,0x0004003b,0x00000008,0x000000c5,0x00000007,0x0004003d, + 0x00000015,0x000000bd,0x0000001b,0x0004007c,0x00000007,0x000000be,0x000000bd,0x00040073, + 0x000000ba,0x000000bf,0x000000be,0x0008000c,0x000000ba,0x000000c4,0x00000001,0x00000032, + 0x000000bf,0x000000c1,0x000000c3,0x0003003e,0x000000bc,0x000000c4,0x0004003d,0x000000ba, + 0x000000c6,0x000000bc,0x00040073,0x00000007,0x000000c7,0x000000c6,0x0008000c,0x00000007, + 0x000000cc,0x00000001,0x0000002b,0x000000c7,0x000000c9,0x000000cb,0x0003003e,0x000000c5, + 0x000000cc,0x0004003d,0x00000007,0x000000cd,0x000000c5,0x0004007c,0x00000015,0x000000ce, + 0x000000cd,0x000500c4,0x00000015,0x000000d0,0x000000ce,0x000000cf,0x000500c7,0x00000015, + 0x000000d2,0x000000d0,0x000000d1,0x000500c6,0x00000015,0x000000d4,0x000000d2,0x000000d3, + 0x000200fe,0x000000d4,0x00010038,0x00050036,0x00000002,0x00000026,0x00000000,0x00000024, + 0x00030037,0x00000023,0x00000025,0x000200f8,0x00000027,0x0004003b,0x00000016,0x000000d7, + 0x00000007,0x0004003b,0x00000008,0x000000df,0x00000007,0x0004003b,0x00000008,0x000000eb, + 0x00000007,0x0003003e,0x000000d7,0x00000066,0x000200f9,0x000000d8,0x000200f8,0x000000d8, + 0x000400f6,0x000000da,0x000000db,0x00000001,0x000200f9,0x000000dc,0x000200f8,0x000000dc, + 0x0004003d,0x00000015,0x000000dd,0x000000d7,0x000500b0,0x00000035,0x000000de,0x000000dd, + 0x0000006f,0x000400fa,0x000000de,0x000000d9,0x000000da,0x000200f8,0x000000d9,0x0004003d, + 0x00000015,0x000000e0,0x000000d7,0x00050084,0x00000015,0x000000e1,0x00000021,0x000000e0, + 0x00050041,0x000000e2,0x000000e3,0x00000025,0x000000e1,0x0004003d,0x00000006,0x000000e4, + 0x000000e3,0x0004003d,0x00000015,0x000000e5,0x000000d7,0x00050084,0x00000015,0x000000e6, + 0x00000021,0x000000e5,0x00050080,0x00000015,0x000000e7,0x000000e6,0x0000006b,0x00050041, + 0x000000e2,0x000000e8,0x00000025,0x000000e7,0x0004003d,0x00000006,0x000000e9,0x000000e8, + 0x00050050,0x00000007,0x000000ea,0x000000e4,0x000000e9,0x0003003e,0x000000eb,0x000000ea, + 0x00050039,0x00000007,0x000000ec,0x00000010,0x000000eb,0x0003003e,0x000000df,0x000000ec, + 0x0004003d,0x00000015,0x000000ed,0x000000d7,0x00050084,0x00000015,0x000000ee,0x00000021, + 0x000000ed,0x00050041,0x000000e2,0x000000ef,0x000000df,0x00000066,0x0004003d,0x00000006, + 0x000000f0,0x000000ef,0x00050041,0x000000e2,0x000000f1,0x00000025,0x000000ee,0x0003003e, + 0x000000f1,0x000000f0,0x0004003d,0x00000015,0x000000f2,0x000000d7,0x00050084,0x00000015, + 0x000000f3,0x00000021,0x000000f2,0x00050080,0x00000015,0x000000f4,0x000000f3,0x0000006b, + 0x00050041,0x000000e2,0x000000f5,0x000000df,0x0000006b,0x0004003d,0x00000006,0x000000f6, + 0x000000f5,0x00050041,0x000000e2,0x000000f7,0x00000025,0x000000f4,0x0003003e,0x000000f7, + 0x000000f6,0x000200f9,0x000000db,0x000200f8,0x000000db,0x0004003d,0x00000015,0x000000f8, + 0x000000d7,0x00050080,0x00000015,0x000000fa,0x000000f8,0x000000f9,0x0003003e,0x000000d7, + 0x000000fa,0x000200f9,0x000000d8,0x000200f8,0x000000da,0x000100fd,0x00010038,0x00050036, + 0x00000002,0x0000002d,0x00000000,0x0000002a,0x00030037,0x00000023,0x0000002b,0x00030037, + 0x00000029,0x0000002c,0x000200f8,0x0000002e,0x0004003b,0x00000016,0x000000fb,0x00000007, + 0x0004003b,0x00000016,0x00000103,0x00000007,0x0004003b,0x00000008,0x0000010b,0x00000007, + 0x0004003b,0x0000011d,0x0000011e,0x00000007,0x0003003e,0x000000fb,0x00000066,0x000200f9, + 0x000000fc,0x000200f8,0x000000fc,0x000400f6,0x000000fe,0x000000ff,0x00000001,0x000200f9, + 0x00000100,0x000200f8,0x00000100,0x0004003d,0x00000015,0x00000101,0x000000fb,0x000500b0, + 0x00000035,0x00000102,0x00000101,0x00000021,0x000400fa,0x00000102,0x000000fd,0x000000fe, + 0x000200f8,0x000000fd,0x0003003e,0x00000103,0x00000066,0x000200f9,0x00000104,0x000200f8, + 0x00000104,0x000400f6,0x00000106,0x00000107,0x00000001,0x000200f9,0x00000108,0x000200f8, + 0x00000108,0x0004003d,0x00000015,0x00000109,0x00000103,0x000500b0,0x00000035,0x0000010a, + 0x00000109,0x00000028,0x000400fa,0x0000010a,0x00000105,0x00000106,0x000200f8,0x00000105, + 0x0004003d,0x00000015,0x0000010c,0x000000fb,0x00050084,0x00000015,0x0000010d,0x0000006f, + 0x0000010c,0x0004003d,0x00000015,0x0000010e,0x00000103,0x00050084,0x00000015,0x0000010f, + 0x00000021,0x0000010e,0x00050080,0x00000015,0x00000110,0x0000010d,0x0000010f,0x00050041, + 0x000000e2,0x00000111,0x0000002b,0x00000110,0x0004003d,0x00000006,0x00000112,0x00000111, + 0x0004003d,0x00000015,0x00000113,0x000000fb,0x00050084,0x00000015,0x00000114,0x0000006f, + 0x00000113,0x0004003d,0x00000015,0x00000115,0x00000103,0x00050084,0x00000015,0x00000116, + 0x00000021,0x00000115,0x00050080,0x00000015,0x00000117,0x00000114,0x00000116,0x00050080, + 0x00000015,0x00000118,0x00000117,0x0000006b,0x00050041,0x000000e2,0x00000119,0x0000002b, + 0x00000118,0x0004003d,0x00000006,0x0000011a,0x00000119,0x00050050,0x00000007,0x0000011b, + 0x00000112,0x0000011a,0x0004003d,0x00000015,0x0000011c,0x00000103,0x0003003e,0x0000011e, + 0x0000002c,0x00050041,0x00000008,0x0000011f,0x0000011e,0x0000011c,0x0004003d,0x00000007, + 0x00000120,0x0000011f,0x00050085,0x00000007,0x00000121,0x0000011b,0x00000120,0x0003003e, + 0x0000010b,0x00000121,0x0004003d,0x00000015,0x00000122,0x000000fb,0x00050084,0x00000015, + 0x00000123,0x0000006f,0x00000122,0x0004003d,0x00000015,0x00000124,0x00000103,0x00050084, + 0x00000015,0x00000125,0x00000021,0x00000124,0x00050080,0x00000015,0x00000126,0x00000123, + 0x00000125,0x00050041,0x000000e2,0x00000127,0x0000010b,0x00000066,0x0004003d,0x00000006, + 0x00000128,0x00000127,0x00050041,0x000000e2,0x00000129,0x0000002b,0x00000126,0x0003003e, + 0x00000129,0x00000128,0x0004003d,0x00000015,0x0000012a,0x000000fb,0x00050084,0x00000015, + 0x0000012b,0x0000006f,0x0000012a,0x0004003d,0x00000015,0x0000012c,0x00000103,0x00050084, + 0x00000015,0x0000012d,0x00000021,0x0000012c,0x00050080,0x00000015,0x0000012e,0x0000012b, + 0x0000012d,0x00050080,0x00000015,0x0000012f,0x0000012e,0x0000006b,0x00050041,0x000000e2, + 0x00000130,0x0000010b,0x0000006b,0x0004003d,0x00000006,0x00000131,0x00000130,0x00050041, + 0x000000e2,0x00000132,0x0000002b,0x0000012f,0x0003003e,0x00000132,0x00000131,0x000200f9, + 0x00000107,0x000200f8,0x00000107,0x0004003d,0x00000015,0x00000133,0x00000103,0x00050080, + 0x00000015,0x00000134,0x00000133,0x000000f9,0x0003003e,0x00000103,0x00000134,0x000200f9, + 0x00000104,0x000200f8,0x00000106,0x000200f9,0x000000ff,0x000200f8,0x000000ff,0x0004003d, + 0x00000015,0x00000135,0x000000fb,0x00050080,0x00000015,0x00000136,0x00000135,0x000000f9, + 0x0003003e,0x000000fb,0x00000136,0x000200f9,0x000000fc,0x000200f8,0x000000fe,0x000100fd, + 0x00010038,0x00050036,0x00000006,0x00000033,0x00000000,0x0000002f,0x00030037,0x00000015, + 0x00000030,0x00030037,0x00000015,0x00000031,0x00030037,0x00000006,0x00000032,0x000200f8, + 0x00000034,0x0004009c,0x00000035,0x00000137,0x00000032,0x000600a9,0x00000006,0x00000138, + 0x00000137,0x00000054,0x00000032,0x000200fe,0x00000138,0x00010038,0x00050036,0x00000002, + 0x0000003a,0x00000000,0x00000036,0x00030037,0x00000023,0x00000037,0x00030037,0x00000006, + 0x00000038,0x00030037,0x00000035,0x00000039,0x000200f8,0x0000003b,0x0004003b,0x00000016, + 0x0000013b,0x00000007,0x0004003b,0x00000016,0x00000143,0x00000007,0x0004003b,0x00000008, + 0x00000146,0x00000007,0x0004003b,0x00000008,0x00000150,0x00000007,0x0004003b,0x00000008, + 0x0000015a,0x00000007,0x0004003b,0x00000008,0x00000164,0x00000007,0x0004003b,0x00000008, + 0x0000016f,0x00000007,0x0004003b,0x00000008,0x00000173,0x00000007,0x0004003b,0x00000008, + 0x00000178,0x00000007,0x0004003b,0x00000008,0x0000017c,0x00000007,0x0004003b,0x00000008, + 0x00000181,0x00000007,0x0004003b,0x00000008,0x00000185,0x00000007,0x0004003b,0x00000008, + 0x0000018a,0x00000007,0x0004003b,0x00000008,0x0000018e,0x00000007,0x0004003b,0x00000008, + 0x00000193,0x00000007,0x0004003b,0x000000e2,0x00000197,0x00000007,0x0004003b,0x000000e2, + 0x0000019d,0x00000007,0x0004003b,0x00000016,0x000001a2,0x00000007,0x0004003b,0x000000e2, + 0x000001aa,0x00000007,0x0004003b,0x000000e2,0x000001b2,0x00000007,0x0004003b,0x000000e2, + 0x000001b6,0x00000007,0x0003003e,0x0000013b,0x00000066,0x000200f9,0x0000013c,0x000200f8, + 0x0000013c,0x000400f6,0x0000013e,0x0000013f,0x00000001,0x000200f9,0x00000140,0x000200f8, + 0x00000140,0x0004003d,0x00000015,0x00000141,0x0000013b,0x000500b0,0x00000035,0x00000142, + 0x00000141,0x00000021,0x000400fa,0x00000142,0x0000013d,0x0000013e,0x000200f8,0x0000013d, + 0x0004003d,0x00000015,0x00000144,0x0000013b,0x00050084,0x00000015,0x00000145,0x0000006f, + 0x00000144,0x0003003e,0x00000143,0x00000145,0x0004003d,0x00000015,0x00000147,0x00000143, + 0x00050080,0x00000015,0x00000148,0x00000147,0x00000066,0x00050041,0x000000e2,0x00000149, + 0x00000037,0x00000148,0x0004003d,0x00000006,0x0000014a,0x00000149,0x0004003d,0x00000015, + 0x0000014b,0x00000143,0x00050080,0x00000015,0x0000014c,0x0000014b,0x0000006b,0x00050041, + 0x000000e2,0x0000014d,0x00000037,0x0000014c,0x0004003d,0x00000006,0x0000014e,0x0000014d, + 0x00050050,0x00000007,0x0000014f,0x0000014a,0x0000014e,0x0003003e,0x00000146,0x0000014f, + 0x0004003d,0x00000015,0x00000151,0x00000143,0x00050080,0x00000015,0x00000152,0x00000151, + 0x00000021,0x00050041,0x000000e2,0x00000153,0x00000037,0x00000152,0x0004003d,0x00000006, + 0x00000154,0x00000153,0x0004003d,0x00000015,0x00000155,0x00000143,0x00050080,0x00000015, + 0x00000156,0x00000155,0x0000001e,0x00050041,0x000000e2,0x00000157,0x00000037,0x00000156, + 0x0004003d,0x00000006,0x00000158,0x00000157,0x00050050,0x00000007,0x00000159,0x00000154, + 0x00000158,0x0003003e,0x00000150,0x00000159,0x0004003d,0x00000015,0x0000015b,0x00000143, + 0x00050080,0x00000015,0x0000015c,0x0000015b,0x00000028,0x00050041,0x000000e2,0x0000015d, + 0x00000037,0x0000015c,0x0004003d,0x00000006,0x0000015e,0x0000015d,0x0004003d,0x00000015, + 0x0000015f,0x00000143,0x00050080,0x00000015,0x00000160,0x0000015f,0x000000cf,0x00050041, + 0x000000e2,0x00000161,0x00000037,0x00000160,0x0004003d,0x00000006,0x00000162,0x00000161, + 0x00050050,0x00000007,0x00000163,0x0000015e,0x00000162,0x0003003e,0x0000015a,0x00000163, + 0x0004003d,0x00000015,0x00000165,0x00000143,0x00050080,0x00000015,0x00000167,0x00000165, + 0x00000166,0x00050041,0x000000e2,0x00000168,0x00000037,0x00000167,0x0004003d,0x00000006, + 0x00000169,0x00000168,0x0004003d,0x00000015,0x0000016a,0x00000143,0x00050080,0x00000015, + 0x0000016b,0x0000016a,0x000000a4,0x00050041,0x000000e2,0x0000016c,0x00000037,0x0000016b, + 0x0004003d,0x00000006,0x0000016d,0x0000016c,0x00050050,0x00000007,0x0000016e,0x00000169, + 0x0000016d,0x0003003e,0x00000164,0x0000016e,0x0004003d,0x00000007,0x00000170,0x0000015a, + 0x0004003d,0x00000007,0x00000171,0x0000015a,0x00050085,0x00000007,0x00000172,0x00000170, + 0x00000171,0x0003003e,0x0000016f,0x00000172,0x0004003d,0x00000007,0x00000174,0x00000146, + 0x0004003d,0x00000007,0x00000175,0x00000146,0x0004003d,0x00000007,0x00000176,0x0000016f, + 0x0008000c,0x00000007,0x00000177,0x00000001,0x00000032,0x00000174,0x00000175,0x00000176, + 0x0003003e,0x00000173,0x00000177,0x0004003d,0x00000007,0x00000179,0x00000164,0x0004003d, + 0x00000007,0x0000017a,0x00000164,0x00050085,0x00000007,0x0000017b,0x00000179,0x0000017a, + 0x0003003e,0x00000178,0x0000017b,0x0004003d,0x00000007,0x0000017d,0x00000150,0x0004003d, + 0x00000007,0x0000017e,0x00000150,0x0004003d,0x00000007,0x0000017f,0x00000178,0x0008000c, + 0x00000007,0x00000180,0x00000001,0x00000032,0x0000017d,0x0000017e,0x0000017f,0x0003003e, + 0x0000017c,0x00000180,0x0004003d,0x00000007,0x00000182,0x00000173,0x0004003d,0x00000007, + 0x00000183,0x0000017c,0x00050081,0x00000007,0x00000184,0x00000182,0x00000183,0x0003003e, + 0x00000181,0x00000184,0x0004003d,0x00000007,0x00000186,0x00000181,0x0004007c,0x00000015, + 0x00000187,0x00000186,0x0006015a,0x00000015,0x00000188,0x0000001e,0x00000187,0x00000021, + 0x0004007c,0x00000007,0x00000189,0x00000188,0x0003003e,0x00000185,0x00000189,0x0004003d, + 0x00000007,0x0000018b,0x00000181,0x0004003d,0x00000007,0x0000018c,0x00000185,0x00050081, + 0x00000007,0x0000018d,0x0000018b,0x0000018c,0x0003003e,0x0000018a,0x0000018d,0x0004003d, + 0x00000007,0x0000018f,0x0000018a,0x0004007c,0x00000015,0x00000190,0x0000018f,0x0006015a, + 0x00000015,0x00000191,0x0000001e,0x00000190,0x0000006b,0x0004007c,0x00000007,0x00000192, + 0x00000191,0x0003003e,0x0000018e,0x00000192,0x0004003d,0x00000007,0x00000194,0x0000018a, + 0x0004003d,0x00000007,0x00000195,0x0000018e,0x00050081,0x00000007,0x00000196,0x00000194, + 0x00000195,0x0003003e,0x00000193,0x00000196,0x00050041,0x000000e2,0x00000198,0x00000193, + 0x00000066,0x0004003d,0x00000006,0x00000199,0x00000198,0x00050041,0x000000e2,0x0000019a, + 0x00000193,0x0000006b,0x0004003d,0x00000006,0x0000019b,0x0000019a,0x00050081,0x00000006, + 0x0000019c,0x00000199,0x0000019b,0x0003003e,0x00000197,0x0000019c,0x0004003d,0x00000006, + 0x0000019e,0x00000197,0x00040073,0x000000b9,0x0000019f,0x0000019e,0x0006000c,0x000000b9, + 0x000001a0,0x00000001,0x00000020,0x0000019f,0x00040073,0x00000006,0x000001a1,0x000001a0, + 0x0003003e,0x0000019d,0x000001a1,0x0003003e,0x000001a2,0x00000066,0x000200f9,0x000001a3, + 0x000200f8,0x000001a3,0x000400f6,0x000001a5,0x000001a6,0x00000001,0x000200f9,0x000001a7, + 0x000200f8,0x000001a7,0x0004003d,0x00000015,0x000001a8,0x000001a2,0x000500b0,0x00000035, + 0x000001a9,0x000001a8,0x0000006f,0x000400fa,0x000001a9,0x000001a4,0x000001a5,0x000200f8, + 0x000001a4,0x0004003d,0x00000015,0x000001ab,0x00000143,0x0004003d,0x00000015,0x000001ac, + 0x000001a2,0x00050080,0x00000015,0x000001ad,0x000001ab,0x000001ac,0x00050041,0x000000e2, + 0x000001ae,0x00000037,0x000001ad,0x0004003d,0x00000006,0x000001af,0x000001ae,0x0004003d, + 0x00000006,0x000001b0,0x0000019d,0x00050085,0x00000006,0x000001b1,0x000001af,0x000001b0, + 0x0003003e,0x000001aa,0x000001b1,0x0004003d,0x00000006,0x000001b3,0x000001aa,0x0003003e, + 0x000001b2,0x000001b3,0x000300f7,0x000001b5,0x00000000,0x000400fa,0x00000039,0x000001b4, + 0x000001b5,0x000200f8,0x000001b4,0x0004003d,0x00000006,0x000001b7,0x000001aa,0x00050085, + 0x00000006,0x000001b8,0x000001b7,0x00000038,0x0003003e,0x000001b6,0x000001b8,0x0004003d, + 0x00000006,0x000001b9,0x000001b6,0x0003003e,0x000001b2,0x000001b9,0x000200f9,0x000001b5, + 0x000200f8,0x000001b5,0x0004003d,0x00000015,0x000001ba,0x00000143,0x0004003d,0x00000015, + 0x000001bb,0x000001a2,0x00050080,0x00000015,0x000001bc,0x000001ba,0x000001bb,0x0004003d, + 0x00000006,0x000001bd,0x000001b2,0x0004009c,0x00000035,0x000001be,0x000001bd,0x0004003d, + 0x00000006,0x000001bf,0x000001b2,0x000600a9,0x00000006,0x000001c0,0x000001be,0x00000054, + 0x000001bf,0x00050041,0x000000e2,0x000001c1,0x00000037,0x000001bc,0x0003003e,0x000001c1, + 0x000001c0,0x000200f9,0x000001a6,0x000200f8,0x000001a6,0x0004003d,0x00000015,0x000001c2, + 0x000001a2,0x00050080,0x00000015,0x000001c3,0x000001c2,0x000000f9,0x0003003e,0x000001a2, + 0x000001c3,0x000200f9,0x000001a3,0x000200f8,0x000001a5,0x000200f9,0x0000013f,0x000200f8, + 0x0000013f,0x0004003d,0x00000015,0x000001c4,0x0000013b,0x00050080,0x00000015,0x000001c5, + 0x000001c4,0x000000f9,0x0003003e,0x0000013b,0x000001c5,0x000200f9,0x0000013c,0x000200f8, + 0x0000013e,0x000100fd,0x00010038,0x00050036,0x00000002,0x00000046,0x00000000,0x0000003d, + 0x00030037,0x00000022,0x0000003e,0x00030037,0x00000015,0x0000003f,0x00030037,0x00000015, + 0x00000040,0x00030037,0x00000015,0x00000041,0x00030037,0x00000015,0x00000042,0x00030037, + 0x0000003c,0x00000043,0x00030037,0x0000003c,0x00000044,0x00030037,0x00000035,0x00000045, + 0x000200f8,0x00000047,0x0004003b,0x00000016,0x000001c6,0x00000007,0x0004003b,0x00000016, + 0x000001ce,0x00000007,0x0004003b,0x000001d3,0x000001d4,0x00000007,0x0004003b,0x000001d3, + 0x000001d9,0x00000007,0x0004003b,0x000001de,0x000001df,0x00000007,0x0004003b,0x00000016, + 0x000001fb,0x00000007,0x0004003b,0x00000016,0x000001fc,0x00000007,0x0004003b,0x00000016, + 0x00000202,0x00000007,0x0004003b,0x0000020a,0x0000020b,0x00000007,0x0004003b,0x00000023, + 0x00000211,0x00000007,0x0004003b,0x00000023,0x0000021a,0x00000007,0x0004003b,0x00000008, + 0x0000021e,0x00000007,0x0003003e,0x000001c6,0x00000066,0x000200f9,0x000001c7,0x000200f8, + 0x000001c7,0x000400f6,0x000001c9,0x000001ca,0x00000001,0x000200f9,0x000001cb,0x000200f8, + 0x000001cb,0x0004003d,0x00000015,0x000001cc,0x000001c6,0x000500b0,0x00000035,0x000001cd, + 0x000001cc,0x00000021,0x000400fa,0x000001cd,0x000001c8,0x000001c9,0x000200f8,0x000001c8, + 0x00050080,0x00000015,0x000001cf,0x00000040,0x00000042,0x0004003d,0x00000015,0x000001d0, + 0x000001c6,0x00050084,0x00000015,0x000001d1,0x0000006f,0x000001d0,0x00050080,0x00000015, + 0x000001d2,0x000001cf,0x000001d1,0x0003003e,0x000001ce,0x000001d2,0x0004003d,0x00000015, + 0x000001d5,0x000001ce,0x000500c7,0x00000015,0x000001d6,0x000001d5,0x000000a4,0x0004007c, + 0x0000003c,0x000001d7,0x000001d6,0x00050080,0x0000003c,0x000001d8,0x00000043,0x000001d7, + 0x0003003e,0x000001d4,0x000001d8,0x0004003d,0x00000015,0x000001da,0x000001ce,0x000500c2, + 0x00000015,0x000001db,0x000001da,0x0000001e,0x0004007c,0x0000003c,0x000001dc,0x000001db, + 0x00050080,0x0000003c,0x000001dd,0x00000044,0x000001dc,0x0003003e,0x000001d9,0x000001dd, + 0x0004003d,0x0000003c,0x000001e0,0x000001d4,0x000500af,0x00000035,0x000001e2,0x000001e0, + 0x000001e1,0x000500a7,0x00000035,0x000001e3,0x00000045,0x000001e2,0x0004003d,0x0000003c, + 0x000001e4,0x000001d9,0x000500af,0x00000035,0x000001e5,0x000001e4,0x000001e1,0x000500a7, + 0x00000035,0x000001e6,0x000001e3,0x000001e5,0x000300f7,0x000001e8,0x00000000,0x000400fa, + 0x000001e6,0x000001e7,0x000001e8,0x000200f8,0x000001e7,0x0004003d,0x0000003c,0x000001e9, + 0x000001d4,0x00050041,0x000001ed,0x000001ee,0x000001ec,0x000001e1,0x0004003d,0x00000015, + 0x000001ef,0x000001ee,0x0004007c,0x0000003c,0x000001f0,0x000001ef,0x000500b1,0x00000035, + 0x000001f1,0x000001e9,0x000001f0,0x000200f9,0x000001e8,0x000200f8,0x000001e8,0x000700f5, + 0x00000035,0x000001f2,0x000001e6,0x000001c8,0x000001f1,0x000001e7,0x000300f7,0x000001f4, + 0x00000000,0x000400fa,0x000001f2,0x000001f3,0x000001f4,0x000200f8,0x000001f3,0x0004003d, + 0x0000003c,0x000001f5,0x000001d9,0x00050041,0x000001ed,0x000001f6,0x000001ec,0x000000f9, + 0x0004003d,0x00000015,0x000001f7,0x000001f6,0x0004007c,0x0000003c,0x000001f8,0x000001f7, + 0x000500b1,0x00000035,0x000001f9,0x000001f5,0x000001f8,0x000200f9,0x000001f4,0x000200f8, + 0x000001f4,0x000700f5,0x00000035,0x000001fa,0x000001f2,0x000001e8,0x000001f9,0x000001f3, + 0x0003003e,0x000001df,0x000001fa,0x0004003d,0x00000015,0x000001fd,0x000001ce,0x0003003e, + 0x000001fc,0x000001fd,0x00050039,0x00000015,0x000001fe,0x00000019,0x000001fc,0x00050084, + 0x00000015,0x00000200,0x000001fe,0x000001ff,0x00050080,0x00000015,0x00000201,0x0000003f, + 0x00000200,0x0003003e,0x000001fb,0x00000201,0x0003003e,0x00000202,0x00000066,0x000200f9, + 0x00000203,0x000200f8,0x00000203,0x000400f6,0x00000205,0x00000206,0x00000001,0x000200f9, + 0x00000207,0x000200f8,0x00000207,0x0004003d,0x00000015,0x00000208,0x00000202,0x000500b0, + 0x00000035,0x00000209,0x00000208,0x00000028,0x000400fa,0x00000209,0x00000204,0x00000205, + 0x000200f8,0x00000204,0x0004003d,0x00000015,0x0000020c,0x000001c6,0x00050084,0x00000015, + 0x0000020d,0x0000006f,0x0000020c,0x0004003d,0x00000015,0x0000020e,0x00000202,0x00050084, + 0x00000015,0x0000020f,0x00000021,0x0000020e,0x00050080,0x00000015,0x00000210,0x0000020d, + 0x0000020f,0x0003003e,0x00000211,0x0000003e,0x00050041,0x000000e2,0x00000212,0x00000211, + 0x00000210,0x0004003d,0x00000006,0x00000213,0x00000212,0x0004003d,0x00000015,0x00000214, + 0x000001c6,0x00050084,0x00000015,0x00000215,0x0000006f,0x00000214,0x0004003d,0x00000015, + 0x00000216,0x00000202,0x00050084,0x00000015,0x00000217,0x00000021,0x00000216,0x00050080, + 0x00000015,0x00000218,0x00000215,0x00000217,0x00050080,0x00000015,0x00000219,0x00000218, + 0x0000006b,0x0003003e,0x0000021a,0x0000003e,0x00050041,0x000000e2,0x0000021b,0x0000021a, + 0x00000219,0x0004003d,0x00000006,0x0000021c,0x0000021b,0x00050050,0x00000007,0x0000021d, + 0x00000213,0x0000021c,0x0003003e,0x0000021e,0x0000021d,0x00050039,0x00000009,0x0000021f, + 0x00000013,0x0000021e,0x0003003e,0x0000020b,0x0000021f,0x0004003d,0x00000015,0x00000224, + 0x000001fb,0x0004003d,0x00000015,0x00000225,0x00000202,0x00050084,0x00000015,0x00000226, + 0x00000028,0x00000225,0x00050080,0x00000015,0x00000227,0x00000224,0x00000226,0x00050080, + 0x00000015,0x00000228,0x00000227,0x00000041,0x0004003d,0x00000035,0x00000229,0x000001df, + 0x0004003d,0x00000009,0x0000022a,0x0000020b,0x000600a9,0x00000009,0x0000022c,0x00000229, + 0x0000022a,0x0000022b,0x00050041,0x0000022d,0x0000022e,0x00000223,0x00000228,0x0005003e, + 0x0000022e,0x0000022c,0x00000028,0x00000021,0x000200f9,0x00000206,0x000200f8,0x00000206, + 0x0004003d,0x00000015,0x0000022f,0x00000202,0x00050080,0x00000015,0x00000230,0x0000022f, + 0x000000f9,0x0003003e,0x00000202,0x00000230,0x000200f9,0x00000203,0x000200f8,0x00000205, + 0x000200f9,0x000001ca,0x000200f8,0x000001ca,0x0004003d,0x00000015,0x00000231,0x000001c6, + 0x00050080,0x00000015,0x00000232,0x00000231,0x000000f9,0x0003003e,0x000001c6,0x00000232, + 0x000200f9,0x000001c7,0x000200f8,0x000001c9,0x000100fd,0x00010038,0x00050036,0x00000002, + 0x00000050,0x00000000,0x0000003d,0x00030037,0x00000022,0x00000048,0x00030037,0x00000015, + 0x00000049,0x00030037,0x00000015,0x0000004a,0x00030037,0x00000015,0x0000004b,0x00030037, + 0x00000015,0x0000004c,0x00030037,0x0000003c,0x0000004d,0x00030037,0x0000003c,0x0000004e, + 0x00030037,0x00000035,0x0000004f,0x000200f8,0x00000051,0x0004003b,0x00000016,0x00000233, + 0x00000007,0x0004003b,0x00000016,0x0000023b,0x00000007,0x0004003b,0x000001d3,0x00000240, + 0x00000007,0x0004003b,0x000001d3,0x00000245,0x00000007,0x0004003b,0x000001de,0x0000024a, + 0x00000007,0x0004003b,0x00000016,0x00000261,0x00000007,0x0004003b,0x00000016,0x00000262, + 0x00000007,0x0004003b,0x00000016,0x00000266,0x00000007,0x0004003b,0x00000008,0x0000026e, + 0x00000007,0x0004003b,0x00000023,0x00000274,0x00000007,0x0004003b,0x00000023,0x0000027d, + 0x00000007,0x0004003b,0x00000016,0x00000281,0x00000007,0x0004003b,0x00000016,0x00000283, + 0x00000007,0x0004003b,0x00000008,0x0000028a,0x00000007,0x0003003e,0x00000233,0x00000066, + 0x000200f9,0x00000234,0x000200f8,0x00000234,0x000400f6,0x00000236,0x00000237,0x00000001, + 0x000200f9,0x00000238,0x000200f8,0x00000238,0x0004003d,0x00000015,0x00000239,0x00000233, + 0x000500b0,0x00000035,0x0000023a,0x00000239,0x00000021,0x000400fa,0x0000023a,0x00000235, + 0x00000236,0x000200f8,0x00000235,0x00050080,0x00000015,0x0000023c,0x0000004a,0x0000004c, + 0x0004003d,0x00000015,0x0000023d,0x00000233,0x00050084,0x00000015,0x0000023e,0x0000006f, + 0x0000023d,0x00050080,0x00000015,0x0000023f,0x0000023c,0x0000023e,0x0003003e,0x0000023b, + 0x0000023f,0x0004003d,0x00000015,0x00000241,0x0000023b,0x000500c7,0x00000015,0x00000242, + 0x00000241,0x000000a4,0x0004007c,0x0000003c,0x00000243,0x00000242,0x00050080,0x0000003c, + 0x00000244,0x0000004d,0x00000243,0x0003003e,0x00000240,0x00000244,0x0004003d,0x00000015, + 0x00000246,0x0000023b,0x000500c2,0x00000015,0x00000247,0x00000246,0x0000001e,0x0004007c, + 0x0000003c,0x00000248,0x00000247,0x00050080,0x0000003c,0x00000249,0x0000004e,0x00000248, + 0x0003003e,0x00000245,0x00000249,0x0004003d,0x0000003c,0x0000024b,0x00000240,0x000500af, + 0x00000035,0x0000024c,0x0000024b,0x000001e1,0x000500a7,0x00000035,0x0000024d,0x0000004f, + 0x0000024c,0x0004003d,0x0000003c,0x0000024e,0x00000245,0x000500af,0x00000035,0x0000024f, + 0x0000024e,0x000001e1,0x000500a7,0x00000035,0x00000250,0x0000024d,0x0000024f,0x000300f7, + 0x00000252,0x00000000,0x000400fa,0x00000250,0x00000251,0x00000252,0x000200f8,0x00000251, + 0x0004003d,0x0000003c,0x00000253,0x00000240,0x00050041,0x000001ed,0x00000254,0x000001ec, + 0x000001e1,0x0004003d,0x00000015,0x00000255,0x00000254,0x0004007c,0x0000003c,0x00000256, + 0x00000255,0x000500b1,0x00000035,0x00000257,0x00000253,0x00000256,0x000200f9,0x00000252, + 0x000200f8,0x00000252,0x000700f5,0x00000035,0x00000258,0x00000250,0x00000235,0x00000257, + 0x00000251,0x000300f7,0x0000025a,0x00000000,0x000400fa,0x00000258,0x00000259,0x0000025a, + 0x000200f8,0x00000259,0x0004003d,0x0000003c,0x0000025b,0x00000245,0x00050041,0x000001ed, + 0x0000025c,0x000001ec,0x000000f9,0x0004003d,0x00000015,0x0000025d,0x0000025c,0x0004007c, + 0x0000003c,0x0000025e,0x0000025d,0x000500b1,0x00000035,0x0000025f,0x0000025b,0x0000025e, + 0x000200f9,0x0000025a,0x000200f8,0x0000025a,0x000700f5,0x00000035,0x00000260,0x00000258, + 0x00000252,0x0000025f,0x00000259,0x0003003e,0x0000024a,0x00000260,0x0004003d,0x00000015, + 0x00000263,0x0000023b,0x0003003e,0x00000262,0x00000263,0x00050039,0x00000015,0x00000264, + 0x00000019,0x00000262,0x00050080,0x00000015,0x00000265,0x00000049,0x00000264,0x0003003e, + 0x00000261,0x00000265,0x0003003e,0x00000266,0x00000066,0x000200f9,0x00000267,0x000200f8, + 0x00000267,0x000400f6,0x00000269,0x0000026a,0x00000001,0x000200f9,0x0000026b,0x000200f8, + 0x0000026b,0x0004003d,0x00000015,0x0000026c,0x00000266,0x000500b0,0x00000035,0x0000026d, + 0x0000026c,0x00000028,0x000400fa,0x0000026d,0x00000268,0x00000269,0x000200f8,0x00000268, + 0x0004003d,0x00000015,0x0000026f,0x00000233,0x00050084,0x00000015,0x00000270,0x0000006f, + 0x0000026f,0x0004003d,0x00000015,0x00000271,0x00000266,0x00050084,0x00000015,0x00000272, + 0x00000021,0x00000271,0x00050080,0x00000015,0x00000273,0x00000270,0x00000272,0x0003003e, + 0x00000274,0x00000048,0x00050041,0x000000e2,0x00000275,0x00000274,0x00000273,0x0004003d, + 0x00000006,0x00000276,0x00000275,0x0004003d,0x00000015,0x00000277,0x00000233,0x00050084, + 0x00000015,0x00000278,0x0000006f,0x00000277,0x0004003d,0x00000015,0x00000279,0x00000266, + 0x00050084,0x00000015,0x0000027a,0x00000021,0x00000279,0x00050080,0x00000015,0x0000027b, + 0x00000278,0x0000027a,0x00050080,0x00000015,0x0000027c,0x0000027b,0x0000006b,0x0003003e, + 0x0000027d,0x00000048,0x00050041,0x000000e2,0x0000027e,0x0000027d,0x0000027c,0x0004003d, + 0x00000006,0x0000027f,0x0000027e,0x00050050,0x00000007,0x00000280,0x00000276,0x0000027f, + 0x0003003e,0x0000026e,0x00000280,0x0004003d,0x00000035,0x00000282,0x0000024a,0x000300f7, + 0x00000285,0x00000000,0x000400fa,0x00000282,0x00000284,0x0000028d,0x000200f8,0x00000284, + 0x0004003d,0x00000007,0x00000286,0x0000026e,0x0004003d,0x00000007,0x00000287,0x0000026e, + 0x0004009c,0x00000057,0x00000288,0x00000287,0x000600a9,0x00000007,0x00000289,0x00000288, + 0x00000055,0x00000286,0x0003003e,0x0000028a,0x00000289,0x00050039,0x00000009,0x0000028b, + 0x00000013,0x0000028a,0x00040071,0x00000015,0x0000028c,0x0000028b,0x0003003e,0x00000283, + 0x0000028c,0x000200f9,0x00000285,0x000200f8,0x0000028d,0x0003003e,0x00000283,0x00000066, + 0x000200f9,0x00000285,0x000200f8,0x00000285,0x0004003d,0x00000015,0x0000028e,0x00000283, + 0x0003003e,0x00000281,0x0000028e,0x0004003d,0x00000015,0x00000293,0x00000261,0x0004003d, + 0x00000015,0x00000294,0x00000266,0x00050084,0x00000015,0x00000295,0x0000006f,0x00000294, + 0x00050084,0x00000015,0x00000296,0x00000021,0x0000004b,0x00050080,0x00000015,0x00000297, + 0x00000295,0x00000296,0x00050084,0x00000015,0x00000299,0x00000297,0x00000298,0x00050080, + 0x00000015,0x0000029a,0x00000293,0x00000299,0x0004003d,0x00000015,0x0000029b,0x00000281, + 0x000500c7,0x00000015,0x0000029d,0x0000029b,0x0000029c,0x00040071,0x00000060,0x0000029e, + 0x0000029d,0x00050041,0x0000029f,0x000002a0,0x00000292,0x0000029a,0x0005003e,0x000002a0, + 0x0000029e,0x00000028,0x00000021,0x0004003d,0x00000015,0x000002a1,0x00000261,0x0004003d, + 0x00000015,0x000002a2,0x00000266,0x00050084,0x00000015,0x000002a3,0x0000006f,0x000002a2, + 0x00050084,0x00000015,0x000002a4,0x00000021,0x0000004b,0x00050080,0x00000015,0x000002a5, + 0x000002a3,0x000002a4,0x00050080,0x00000015,0x000002a6,0x000002a5,0x0000006b,0x00050084, + 0x00000015,0x000002a7,0x000002a6,0x00000298,0x00050080,0x00000015,0x000002a8,0x000002a1, + 0x000002a7,0x0004003d,0x00000015,0x000002a9,0x00000281,0x000500c2,0x00000015,0x000002aa, + 0x000002a9,0x0000006f,0x00040071,0x00000060,0x000002ab,0x000002aa,0x00050041,0x0000029f, + 0x000002ac,0x00000292,0x000002a8,0x0005003e,0x000002ac,0x000002ab,0x00000028,0x00000021, + 0x000200f9,0x0000026a,0x000200f8,0x0000026a,0x0004003d,0x00000015,0x000002ad,0x00000266, + 0x00050080,0x00000015,0x000002ae,0x000002ad,0x000000f9,0x0003003e,0x00000266,0x000002ae, + 0x000200f9,0x00000267,0x000200f8,0x00000269,0x000200f9,0x00000237,0x000200f8,0x00000237, + 0x0004003d,0x00000015,0x000002af,0x00000233,0x00050080,0x00000015,0x000002b0,0x000002af, + 0x000000f9,0x0003003e,0x00000233,0x000002b0,0x000200f9,0x00000234,0x000200f8,0x00000236, + 0x000100fd,0x00010038, +}; +inline constexpr uint32_t k_qkv_attention[] = { + 0x07230203,0x00010600,0x0008000b,0x0000054c,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x00000027,0x00020011,0x0000003d,0x00020011, + 0x00000041,0x00020011,0x00001074,0x00020011,0x00001075,0x00020011,0x00001151,0x00020011, + 0x000014e1,0x00020011,0x00001537,0x00020011,0x0000153f,0x00020011,0x00001786,0x0005000a, + 0x5f565053,0x5f545845,0x616f6c66,0x00003874,0x0008000a,0x5f565053,0x5f52484b,0x706f6f63, + 0x74617265,0x5f657669,0x7274616d,0x00007869,0x0008000a,0x5f565053,0x635f564e,0x65706f6f, + 0x69746172,0x6d5f6576,0x69727461,0x00003278,0x0008000a,0x5f565053,0x745f564e,0x6f736e65, + 0x64615f72,0x73657264,0x676e6973,0x00000000,0x0006000b,0x00000001,0x4c534c47,0x6474732e, + 0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000003,0x0012000f,0x00000005,0x00000004, + 0x6e69616d,0x00000000,0x0000014e,0x00000184,0x00000197,0x0000019c,0x0000019f,0x000001a8, + 0x000001f5,0x00000208,0x000002c9,0x000002e5,0x00000309,0x000004df,0x00000528,0x00060010, + 0x00000004,0x00000011,0x00000080,0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc, + 0x00090004,0x455f4c47,0x635f5458,0x72746e6f,0x665f6c6f,0x5f776f6c,0x72747461,0x74756269, + 0x00007365,0x00060004,0x455f4c47,0x665f5458,0x74616f6c,0x6d34655f,0x00000033,0x00080004, + 0x455f4c47,0x735f5458,0x65646168,0x36315f72,0x5f746962,0x726f7473,0x00656761,0x00080004, + 0x455f4c47,0x735f5458,0x65646168,0x62385f72,0x735f7469,0x61726f74,0x00006567,0x000b0004, + 0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d, + 0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79, + 0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45, + 0x64756c63,0x69645f65,0x74636572,0x00657669,0x00080004,0x4b5f4c47,0x635f5248,0x65706f6f, + 0x69746172,0x6d5f6576,0x69727461,0x00000078,0x00090004,0x4b5f4c47,0x6d5f5248,0x726f6d65, + 0x63735f79,0x5f65706f,0x616d6573,0x6369746e,0x00000073,0x00090004,0x4b5f4c47,0x735f5248, + 0x65646168,0x75735f72,0x6f726762,0x625f7075,0x63697361,0x00000000,0x00090004,0x4b5f4c47, + 0x735f5248,0x65646168,0x75735f72,0x6f726762,0x735f7075,0x66667568,0x0000656c,0x00080004, + 0x4e5f4c47,0x6f635f56,0x7265706f,0x76697461,0x616d5f65,0x78697274,0x00000032,0x00040005, + 0x00000004,0x6e69616d,0x00000000,0x00070005,0x0000000c,0x336d3465,0x61507748,0x76287269, + 0x32363166,0x0000003b,0x00040005,0x0000000b,0x756c6176,0x00000065,0x00070005,0x0000000f, + 0x336d3465,0x72696150,0x74736146,0x31667628,0x003b3236,0x00040005,0x0000000e,0x756c6176, + 0x00000065,0x00060005,0x00000015,0x656c6974,0x6b6f5464,0x75286e65,0x00003b31,0x00040005, + 0x00000014,0x656b6f74,0x0000006e,0x00070005,0x00000018,0x57707865,0x68676965,0x69615074, + 0x31752872,0x0000003b,0x00050005,0x00000017,0x726f6373,0x74694265,0x00000073,0x000e0005, + 0x00000025,0x6d726f6e,0x7a696c61,0x506e4965,0x6563616c,0x36316628,0x3e333c31,0x3e36313c, + 0x3e32333c,0x3b3e323c,0x31363166,0x3b31623b,0x00000000,0x00030005,0x00000022,0x0000006d, + 0x00040005,0x00000023,0x6c616373,0x00000065,0x00050005,0x00000024,0x6c707061,0x61635379, + 0x0000656c,0x000f0005,0x00000030,0x6c627570,0x52687369,0x2873776f,0x31363166,0x3c3e333c, + 0x3c3e3631,0x3c3e3233,0x753b3e32,0x31753b31,0x3b31753b,0x693b3175,0x31693b31,0x0000003b, + 0x00030005,0x00000029,0x0000006d,0x00050005,0x0000002a,0x746f6c73,0x65736142,0x00000000, + 0x00040005,0x0000002b,0x42776f72,0x00657361,0x00030005,0x0000002c,0x00000074,0x00030005, + 0x0000002d,0x00000067,0x00040005,0x0000002e,0x646e6977,0x0058776f,0x00040005,0x0000002f, + 0x646e6977,0x0059776f,0x00040005,0x00000032,0x61656c63,0x0000006e,0x00050005,0x0000003d, + 0x766e6f63,0x65747265,0x00000064,0x00040005,0x00000043,0x65646f63,0x00000073,0x00050005, + 0x00000055,0x766e6f63,0x65747265,0x00000064,0x00040005,0x00000058,0x65646f63,0x00000073, + 0x00030005,0x00000066,0x00000078,0x00030005,0x0000006a,0x00000079,0x00050005,0x00000081, + 0x69666661,0x3233656e,0x00000000,0x00040005,0x0000008a,0x69666661,0x0000656e,0x00030005, + 0x0000009c,0x00000068,0x00030005,0x000000a4,0x00000062,0x00030005,0x000000a7,0x00003070, + 0x00030005,0x000000b2,0x00003170,0x00030005,0x000000bc,0x00003270,0x00030005,0x000000c6, + 0x00003370,0x00030005,0x000000d1,0x00307368,0x00030005,0x000000d5,0x00003072,0x00030005, + 0x000000da,0x00317368,0x00030005,0x000000de,0x00003172,0x00030005,0x000000e3,0x00003873, + 0x00030005,0x000000e7,0x006f3873,0x00030005,0x000000ec,0x00003473,0x00030005,0x000000f0, + 0x006f3473,0x00030005,0x000000f5,0x00003273,0x00030005,0x000000f9,0x00003173,0x00040005, + 0x000000ff,0x6d726f6e,0x00000000,0x00030005,0x00000104,0x00000069,0x00030005,0x0000010c, + 0x0000006e,0x00040005,0x00000114,0x756c6176,0x00000065,0x00030005,0x00000118,0x0000736e, + 0x00030005,0x00000129,0x00000068,0x00040005,0x00000131,0x656b6f74,0x0000006e,0x00030005, + 0x00000137,0x00000078,0x00030005,0x0000013c,0x00000079,0x00040005,0x00000142,0x696c6176, + 0x00000064,0x00040005,0x0000014c,0x68737550,0x00000000,0x00050006,0x0000014c,0x00000000, + 0x74646977,0x00000068,0x00050006,0x0000014c,0x00000001,0x67696568,0x00007468,0x00060006, + 0x0000014c,0x00000002,0x6e616863,0x736c656e,0x00000000,0x00050006,0x0000014c,0x00000003, + 0x64616568,0x00000073,0x00050006,0x0000014c,0x00000004,0x66696873,0x00005874,0x00050006, + 0x0000014c,0x00000005,0x66696873,0x00005974,0x00060006,0x0000014c,0x00000006,0x646e6977, + 0x5873776f,0x00000000,0x00060006,0x0000014c,0x00000007,0x646e6977,0x6f43776f,0x00746e75, + 0x00070006,0x0000014c,0x00000008,0x6c616373,0x726f5765,0x66664f64,0x00746573,0x00050006, + 0x0000014c,0x00000009,0x74616d4e,0x00786972,0x00030005,0x0000014e,0x00006370,0x00030005, + 0x0000015d,0x00776f72,0x00040005,0x0000015e,0x61726170,0x0000006d,0x00030005,0x00000163, + 0x0000006a,0x00040005,0x0000016c,0x65646f63,0x00000073,0x00050005,0x00000172,0x65646e69, + 0x6c626178,0x00000065,0x00050005,0x0000017b,0x65646e69,0x6c626178,0x00000065,0x00040005, + 0x0000017f,0x61726170,0x0000006d,0x00040005,0x00000184,0x3631766b,0x00000000,0x00040005, + 0x00000194,0x65726874,0x00006461,0x00080005,0x00000197,0x4c5f6c67,0x6c61636f,0x6f766e49, + 0x69746163,0x44496e6f,0x00000000,0x00030005,0x0000019b,0x00000071,0x00060005,0x0000019c, + 0x535f6c67,0x72676275,0x4970756f,0x00000044,0x00040005,0x0000019e,0x656e616c,0x00000000, + 0x00080005,0x0000019f,0x535f6c67,0x72676275,0x4970756f,0x636f766e,0x6f697461,0x0044496e, + 0x00030005,0x000001a1,0x00000067,0x00030005,0x000001a4,0x00000074,0x00040005,0x000001a7, + 0x64616568,0x00000000,0x00060005,0x000001a8,0x575f6c67,0x476b726f,0x70756f72,0x00004449, + 0x00040005,0x000001ab,0x646e6977,0x0000776f,0x00040005,0x000001bb,0x646e6977,0x0058776f, + 0x00040005,0x000001c8,0x646e6977,0x0059776f,0x00040005,0x000001d4,0x42776f72,0x00657361, + 0x00040005,0x000001d9,0x67616d69,0x00000065,0x00030005,0x000001f1,0x00000073,0x00040005, + 0x000001f3,0x6f697250,0x00000072,0x00050006,0x000001f3,0x00000000,0x6f697270,0x00000072, + 0x00030005,0x000001f5,0x00000000,0x00040005,0x00000204,0x6c616373,0x00000065,0x00030005, + 0x00000206,0x00787541,0x00050006,0x00000206,0x00000000,0x33787561,0x00000032,0x00030005, + 0x00000208,0x00000000,0x00030005,0x00000213,0x00006171,0x00030005,0x00000215,0x0000616b, + 0x00030005,0x00000216,0x00006176,0x00050005,0x00000217,0x6c6f4362,0x426e6d75,0x00657361, + 0x00030005,0x0000021b,0x00000069,0x00030005,0x00000223,0x00786469,0x00040005,0x00000229, + 0x656b6f74,0x0000006e,0x00030005,0x0000022e,0x00000077,0x00030005,0x00000231,0x00004178, + 0x00030005,0x00000237,0x00004179,0x00040005,0x0000023f,0x6c615661,0x00006469,0x00040005, + 0x0000025d,0x63725361,0x00000000,0x00030005,0x0000026d,0x0000004b,0x00050005,0x0000026e, + 0x57776f72,0x7364726f,0x00000000,0x00040005,0x00000275,0x74734461,0x00000000,0x00030005, + 0x0000027e,0x00000069,0x00030005,0x00000286,0x00786469,0x00030005,0x0000028d,0x0000006e, + 0x00030005,0x00000290,0x00000077,0x00040005,0x00000295,0x63725362,0x00000000,0x00040005, + 0x000002a7,0x74734462,0x00000000,0x00030005,0x000002b2,0x00000069,0x00030005,0x000002bd, + 0x00006172,0x00040005,0x000002c7,0x75706e49,0x00000074,0x00040006,0x000002c7,0x00000000, + 0x00346e69,0x00030005,0x000002c9,0x00000000,0x00030005,0x000002d6,0x00000069,0x00030005, + 0x000002e0,0x00006272,0x00040005,0x000002e3,0x67696557,0x00737468,0x00040006,0x000002e3, + 0x00000000,0x00003477,0x00030005,0x000002e5,0x00000000,0x00030005,0x000002ee,0x00000063, + 0x00040005,0x000002f5,0x6e756863,0x0000736b,0x00030005,0x000002f7,0x00000069,0x00040005, + 0x00000309,0x67617473,0x00000065,0x00030005,0x00000314,0x00000069,0x00030005,0x00000332, + 0x00000069,0x00030005,0x0000034f,0x00000069,0x00030005,0x0000036b,0x00000061,0x00030005, + 0x00000374,0x00007177,0x00030005,0x00000377,0x00006b77,0x00030005,0x0000037b,0x00007677, + 0x00040005,0x0000038f,0x61726170,0x0000006d,0x00040005,0x00000395,0x61726170,0x0000006d, + 0x00030005,0x0000039b,0x0000716d,0x00030005,0x000003af,0x0000706b,0x00040005,0x000003b6, + 0x63634177,0x00000000,0x00030005,0x000003b8,0x00000068,0x00030005,0x000003c0,0x0000006d, + 0x00030005,0x000003ca,0x00000065,0x00040005,0x000003dd,0x61726170,0x0000006d,0x00030005, + 0x000003e2,0x0000006a,0x00040005,0x000003ea,0x6d757362,0x00000000,0x00030005,0x000003f9, + 0x00007062,0x00030005,0x000003ff,0x00313074,0x00040005,0x00000405,0x32313074,0x00000000, + 0x00030005,0x0000040a,0x00007074,0x00040005,0x0000040f,0x69427074,0x00007374,0x00040005, + 0x00000412,0x64617571,0x00000000,0x00030005,0x00000416,0x00003074,0x00030005,0x0000041b, + 0x00003174,0x00030005,0x00000421,0x00003274,0x00030005,0x00000427,0x00003374,0x00030005, + 0x0000042d,0x00313065,0x00040005,0x00000433,0x32313065,0x00000000,0x00040005,0x00000438, + 0x6e657665,0x00000000,0x00030005,0x0000043d,0x0031306f,0x00040005,0x00000443,0x3231306f, + 0x00000000,0x00030005,0x00000448,0x0064646f,0x00040005,0x0000044d,0x61746f74,0x0000006c, + 0x00050005,0x00000451,0x69636572,0x636f7270,0x00006c61,0x00030005,0x00000457,0x0000006d, + 0x00030005,0x0000045f,0x00000077,0x00030005,0x0000047b,0x00000070,0x00030005,0x0000047e, + 0x00007076,0x00030005,0x00000481,0x0000006f,0x00050005,0x00000486,0x656c6974,0x65736142, + 0x00000000,0x00030005,0x00000489,0x0000006a,0x00030005,0x00000491,0x00003076,0x00030005, + 0x0000049c,0x00003176,0x00030005,0x000004a9,0x00003063,0x00040005,0x000004ae,0x61726170, + 0x0000006d,0x00030005,0x000004b1,0x00003163,0x00040005,0x000004b6,0x61726170,0x0000006d, + 0x00030005,0x000004b9,0x0064646f,0x00040005,0x000004bd,0x76636572,0x00000000,0x00040005, + 0x000004c3,0x64726f77,0x00000000,0x00030005,0x000004d2,0x00776f72,0x00040005,0x000004df, + 0x656c6974,0x00003233,0x00030005,0x000004f0,0x00000072,0x00040005,0x000004f3,0x74726170, + 0x00000000,0x00030005,0x000004f6,0x006b6f74,0x00030005,0x000004fa,0x00000078,0x00030005, + 0x00000500,0x00000079,0x00040005,0x00000506,0x65736162,0x00000000,0x00050005,0x00000526, + 0x65747441,0x6465646e,0x00000000,0x00060006,0x00000526,0x00000000,0x65747461,0x6465646e, + 0x00003631,0x00030005,0x00000528,0x00000000,0x00030047,0x0000003f,0x00001078,0x00030047, + 0x00000057,0x00001078,0x00030047,0x000000d4,0x0000002a,0x00030047,0x000000dd,0x0000002a, + 0x00030047,0x000000e6,0x0000002a,0x00030047,0x000000ef,0x0000002a,0x00030047,0x000000f8, + 0x0000002a,0x00030047,0x000000fe,0x0000002a,0x00030047,0x00000113,0x0000002a,0x00030047, + 0x0000011a,0x0000002a,0x00030047,0x0000014c,0x00000002,0x00050048,0x0000014c,0x00000000, + 0x00000023,0x00000000,0x00050048,0x0000014c,0x00000001,0x00000023,0x00000004,0x00050048, + 0x0000014c,0x00000002,0x00000023,0x00000008,0x00050048,0x0000014c,0x00000003,0x00000023, + 0x0000000c,0x00050048,0x0000014c,0x00000004,0x00000023,0x00000010,0x00050048,0x0000014c, + 0x00000005,0x00000023,0x00000014,0x00050048,0x0000014c,0x00000006,0x00000023,0x00000018, + 0x00050048,0x0000014c,0x00000007,0x00000023,0x0000001c,0x00050048,0x0000014c,0x00000008, + 0x00000023,0x00000020,0x00050048,0x0000014c,0x00000009,0x00000023,0x00000024,0x00040047, + 0x00000197,0x0000000b,0x0000001b,0x00040047,0x0000019c,0x0000000b,0x00000028,0x00030047, + 0x0000019f,0x00000000,0x00040047,0x0000019f,0x0000000b,0x00000029,0x00030047,0x000001a0, + 0x00000000,0x00040047,0x000001a8,0x0000000b,0x0000001a,0x00040047,0x000001f2,0x00000006, + 0x00000002,0x00030047,0x000001f3,0x00000002,0x00040048,0x000001f3,0x00000000,0x00000018, + 0x00050048,0x000001f3,0x00000000,0x00000023,0x00000000,0x00030047,0x000001f5,0x00000018, + 0x00040047,0x000001f5,0x00000021,0x00000002,0x00040047,0x000001f5,0x00000022,0x00000000, + 0x00040047,0x00000205,0x00000006,0x00000004,0x00030047,0x00000206,0x00000002,0x00040048, + 0x00000206,0x00000000,0x00000018,0x00050048,0x00000206,0x00000000,0x00000023,0x00000000, + 0x00030047,0x00000208,0x00000018,0x00040047,0x00000208,0x00000021,0x00000004,0x00040047, + 0x00000208,0x00000022,0x00000000,0x00040047,0x0000026d,0x00000001,0x00000000,0x00040047, + 0x000002c6,0x00000006,0x00000010,0x00030047,0x000002c7,0x00000002,0x00040048,0x000002c7, + 0x00000000,0x00000018,0x00050048,0x000002c7,0x00000000,0x00000023,0x00000000,0x00030047, + 0x000002c9,0x00000018,0x00040047,0x000002c9,0x00000021,0x00000000,0x00040047,0x000002c9, + 0x00000022,0x00000000,0x00040047,0x000002e2,0x00000006,0x00000010,0x00030047,0x000002e3, + 0x00000002,0x00040048,0x000002e3,0x00000000,0x00000018,0x00050048,0x000002e3,0x00000000, + 0x00000023,0x00000000,0x00030047,0x000002e5,0x00000018,0x00040047,0x000002e5,0x00000021, + 0x00000001,0x00040047,0x000002e5,0x00000022,0x00000000,0x00030047,0x000003f6,0x0000002a, + 0x00030047,0x00000404,0x0000002a,0x00030047,0x00000409,0x0000002a,0x00030047,0x0000040e, + 0x0000002a,0x00030047,0x0000041e,0x0000002a,0x00030047,0x00000424,0x0000002a,0x00030047, + 0x0000042a,0x0000002a,0x00030047,0x00000432,0x0000002a,0x00030047,0x00000437,0x0000002a, + 0x00030047,0x0000043c,0x0000002a,0x00030047,0x00000442,0x0000002a,0x00030047,0x00000447, + 0x0000002a,0x00030047,0x0000044c,0x0000002a,0x00030047,0x00000450,0x0000002a,0x00030047, + 0x00000455,0x0000002a,0x00030047,0x00000465,0x0000002a,0x00040047,0x00000525,0x00000006, + 0x00000010,0x00030047,0x00000526,0x00000002,0x00040048,0x00000526,0x00000000,0x00000019, + 0x00050048,0x00000526,0x00000000,0x00000023,0x00000000,0x00030047,0x00000528,0x00000019, + 0x00040047,0x00000528,0x00000021,0x00000005,0x00040047,0x00000528,0x00000022,0x00000000, + 0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000010, + 0x00040017,0x00000007,0x00000006,0x00000002,0x00040020,0x00000008,0x00000007,0x00000007, + 0x00040015,0x00000009,0x00000010,0x00000000,0x00040021,0x0000000a,0x00000009,0x00000008, + 0x00040015,0x00000011,0x00000020,0x00000000,0x00040020,0x00000012,0x00000007,0x00000011, + 0x00040021,0x00000013,0x00000011,0x00000012,0x0004002b,0x00000011,0x0000001a,0x00000003, + 0x0004002b,0x00000011,0x0000001b,0x00000010,0x0004002b,0x00000011,0x0000001c,0x00000020, + 0x0004002b,0x00000011,0x0000001d,0x00000002,0x00071168,0x0000001e,0x00000006,0x0000001a, + 0x0000001b,0x0000001c,0x0000001d,0x00040020,0x0000001f,0x00000007,0x0000001e,0x00020014, + 0x00000020,0x00060021,0x00000021,0x00000002,0x0000001f,0x00000006,0x00000020,0x00040015, + 0x00000027,0x00000020,0x00000001,0x000a0021,0x00000028,0x00000002,0x0000001e,0x00000011, + 0x00000011,0x00000011,0x00000011,0x00000027,0x00000027,0x0004002b,0x00000006,0x00000034, + 0x00000000,0x0005002c,0x00000007,0x00000035,0x00000034,0x00000034,0x00040017,0x00000037, + 0x00000020,0x00000002,0x00040016,0x0000003a,0x00000008,0x00001076,0x00040017,0x0000003b, + 0x0000003a,0x00000002,0x00040020,0x0000003c,0x00000007,0x0000003b,0x00040015,0x00000040, + 0x00000008,0x00000000,0x00040017,0x00000041,0x00000040,0x00000002,0x00040020,0x00000042, + 0x00000007,0x00000041,0x0004002b,0x00000011,0x00000046,0x00000000,0x00040020,0x00000047, + 0x00000007,0x00000040,0x0004002b,0x00000011,0x0000004b,0x00000001,0x0004002b,0x00000011, + 0x0000004f,0x00000008,0x0004002b,0x00000011,0x00000068,0x00000007,0x0004002b,0x00000011, + 0x00000076,0x00000004,0x00030016,0x0000007e,0x00000020,0x00040017,0x0000007f,0x0000007e, + 0x00000002,0x00040020,0x00000080,0x00000007,0x0000007f,0x0004002b,0x0000007e,0x00000085, + 0x3d380000,0x0005002c,0x0000007f,0x00000086,0x00000085,0x00000085,0x0004002b,0x0000007e, + 0x00000087,0x3fa68000,0x0005002c,0x0000007f,0x00000088,0x00000087,0x00000087,0x0004002b, + 0x00000006,0x0000008d,0x00003c20,0x0005002c,0x00000007,0x0000008e,0x0000008d,0x0000008d, + 0x0004002b,0x00000006,0x0000008f,0x00003e47,0x0005002c,0x00000007,0x00000090,0x0000008f, + 0x0000008f,0x0004002b,0x00000011,0x00000094,0x00000005,0x0004002b,0x00000011,0x00000096, + 0xffe0ffe0,0x0004002b,0x00000011,0x00000098,0x80008000,0x00040020,0x000000aa,0x00000007, + 0x00000006,0x0004002b,0x00000011,0x000000c8,0x00000006,0x0004002b,0x00000027,0x00000125, + 0x00000001,0x00040020,0x00000136,0x00000007,0x00000027,0x00040020,0x00000141,0x00000007, + 0x00000020,0x0004002b,0x00000027,0x00000144,0x00000000,0x000c001e,0x0000014c,0x00000011, + 0x00000011,0x00000011,0x00000011,0x00000011,0x00000011,0x00000011,0x00000011,0x00000011, + 0x00000011,0x00040020,0x0000014d,0x00000009,0x0000014c,0x0004003b,0x0000014d,0x0000014e, + 0x00000009,0x00040020,0x0000014f,0x00000009,0x00000011,0x00040020,0x0000016b,0x00000007, + 0x00000009,0x0004002b,0x00000011,0x00000181,0x00000800,0x0004001c,0x00000182,0x00000009, + 0x00000181,0x00040020,0x00000183,0x00000004,0x00000182,0x0004003b,0x00000183,0x00000184, + 0x00000004,0x0004002b,0x00000009,0x0000018c,0x00000000,0x00040020,0x0000018e,0x00000004, + 0x00000009,0x00040017,0x00000195,0x00000011,0x00000003,0x00040020,0x00000196,0x00000001, + 0x00000195,0x0004003b,0x00000196,0x00000197,0x00000001,0x00040020,0x00000198,0x00000001, + 0x00000011,0x0004003b,0x00000198,0x0000019c,0x00000001,0x0004003b,0x00000198,0x0000019f, + 0x00000001,0x0004003b,0x00000196,0x000001a8,0x00000001,0x0004002b,0x00000011,0x000001b0, + 0x0000ffff,0x0004002b,0x00000027,0x000001b4,0x00000007,0x0004002b,0x00000027,0x000001bd, + 0x00000006,0x0004002b,0x00000027,0x000001c3,0x00000004,0x0004002b,0x00000027,0x000001cf, + 0x00000005,0x000414fa,0x000001d7,0x0000001a,0x0000004b,0x00040020,0x000001d8,0x00000007, + 0x000001d7,0x0004002b,0x00000027,0x000001da,0x00000003,0x0004002b,0x00000027,0x000001e1, + 0x00000002,0x0004002b,0x00000011,0x000001ee,0x00000040,0x00071168,0x000001ef,0x00000006, + 0x0000001a,0x0000001b,0x000001ee,0x0000001d,0x00040020,0x000001f0,0x00000007,0x000001ef, + 0x0003001d,0x000001f2,0x00000006,0x0003001e,0x000001f3,0x000001f2,0x00040020,0x000001f4, + 0x0000000c,0x000001f3,0x0004003b,0x000001f4,0x000001f5,0x0000000c,0x0004002b,0x00000011, + 0x000001f7,0x00001000,0x00040020,0x000001fc,0x0000000c,0x00000006,0x0003001d,0x00000205, + 0x00000011,0x0003001e,0x00000206,0x00000205,0x00040020,0x00000207,0x0000000c,0x00000206, + 0x0004003b,0x00000207,0x00000208,0x0000000c,0x0004002b,0x00000027,0x00000209,0x00000008, + 0x00040020,0x0000020e,0x0000000c,0x00000011,0x0004002c,0x0000001e,0x00000214,0x00000034, + 0x0004002b,0x00000011,0x00000219,0x00000060,0x0004002b,0x00000011,0x00000225,0x00000080, + 0x0004002b,0x00000011,0x0000022c,0x0000003f,0x0004001c,0x0000023d,0x00000020,0x0000001d, + 0x00040020,0x0000023e,0x00000007,0x0000023d,0x0004002b,0x00000011,0x00000242,0x00000100, + 0x0004001c,0x0000025b,0x00000011,0x0000001d,0x00040020,0x0000025c,0x00000007,0x0000025b, + 0x00040032,0x00000011,0x0000026d,0x00000040,0x00060034,0x00000011,0x0000026e,0x00000086, + 0x0000026d,0x0000001b,0x0004002b,0x00000011,0x0000028b,0x0000017f,0x0004001c,0x00000293, + 0x00000011,0x0000001a,0x00040020,0x00000294,0x00000007,0x00000293,0x0004002b,0x00000027, + 0x00000299,0x00000009,0x0004002b,0x00000011,0x000002a9,0x00000140,0x00040017,0x000002ba, + 0x00000011,0x00000004,0x0004001c,0x000002bb,0x000002ba,0x0000001d,0x00040020,0x000002bc, + 0x00000007,0x000002bb,0x00040020,0x000002c2,0x00000007,0x000002ba,0x0003001d,0x000002c6, + 0x000002ba,0x0003001e,0x000002c7,0x000002c6,0x00040020,0x000002c8,0x0000000c,0x000002c7, + 0x0004003b,0x000002c8,0x000002c9,0x0000000c,0x00040020,0x000002cd,0x0000000c,0x000002ba, + 0x0007002c,0x000002ba,0x000002d1,0x00000046,0x00000046,0x00000046,0x00000046,0x0004001c, + 0x000002de,0x000002ba,0x0000001a,0x00040020,0x000002df,0x00000007,0x000002de,0x0003001d, + 0x000002e2,0x000002ba,0x0003001e,0x000002e3,0x000002e2,0x00040020,0x000002e4,0x0000000c, + 0x000002e3,0x0004003b,0x000002e4,0x000002e5,0x0000000c,0x00060034,0x00000011,0x000002f5, + 0x00000086,0x0000026d,0x000001ee,0x0004002b,0x00000011,0x00000306,0x00000320,0x0004001c, + 0x00000307,0x000002ba,0x00000306,0x00040020,0x00000308,0x00000004,0x00000307,0x0004003b, + 0x00000308,0x00000309,0x00000004,0x00040020,0x00000310,0x00000004,0x000002ba,0x0004002b, + 0x00000011,0x00000320,0x00000180,0x0004002b,0x00000011,0x00000368,0x00000108,0x00071168, + 0x00000369,0x0000003a,0x0000001a,0x0000001b,0x000001ee,0x00000046,0x00040020,0x0000036a, + 0x00000007,0x00000369,0x00071168,0x00000372,0x0000003a,0x0000001a,0x000001ee,0x0000001c, + 0x0000004b,0x00040020,0x00000373,0x00000007,0x00000372,0x0004002b,0x00000011,0x00000378, + 0x000001e0,0x0004002b,0x00000011,0x0000037c,0x00000280,0x00030029,0x00000020,0x0000038e, + 0x0003002a,0x00000020,0x00000394,0x00071168,0x00000399,0x0000003a,0x0000001a,0x0000001b, + 0x0000001c,0x00000046,0x00040020,0x0000039a,0x00000007,0x00000399,0x0004002b,0x00000011, + 0x000003a6,0x00000400,0x00071168,0x000003ad,0x0000003a,0x0000001a,0x0000001c,0x000001ee, + 0x0000004b,0x00040020,0x000003ae,0x00000007,0x000003ad,0x0004002c,0x000001ef,0x000003b7, + 0x00000034,0x0004001c,0x000003c8,0x00000011,0x0000004f,0x00040020,0x000003c9,0x00000007, + 0x000003c8,0x0004001c,0x000003f7,0x00000007,0x00000076,0x00040020,0x000003f8,0x00000007, + 0x000003f7,0x0004002b,0x00000011,0x00000414,0xfffffffc,0x0004002b,0x0000007e,0x00000452, + 0x3f800000,0x0004002b,0x00000011,0x000004dc,0x00000200,0x0004001c,0x000004dd,0x00000011, + 0x000004dc,0x00040020,0x000004de,0x00000004,0x000004dd,0x0004003b,0x000004de,0x000004df, + 0x00000004,0x00040020,0x000004eb,0x00000004,0x00000011,0x0004002b,0x00000011,0x000004ef, + 0x00000d48,0x0003001d,0x00000525,0x000002ba,0x0003001e,0x00000526,0x00000525,0x00040020, + 0x00000527,0x0000000c,0x00000526,0x0004003b,0x00000527,0x00000528,0x0000000c,0x0006002c, + 0x00000195,0x0000054b,0x00000225,0x0000004b,0x0000004b,0x00050036,0x00000002,0x00000004, + 0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000012,0x00000194,0x00000007, + 0x0004003b,0x00000012,0x0000019b,0x00000007,0x0004003b,0x00000012,0x0000019e,0x00000007, + 0x0004003b,0x00000012,0x000001a1,0x00000007,0x0004003b,0x00000012,0x000001a4,0x00000007, + 0x0004003b,0x00000012,0x000001a7,0x00000007,0x0004003b,0x00000012,0x000001ab,0x00000007, + 0x0004003b,0x00000136,0x000001bb,0x00000007,0x0004003b,0x00000136,0x000001c8,0x00000007, + 0x0004003b,0x00000012,0x000001d4,0x00000007,0x0004003b,0x000001d8,0x000001d9,0x00000007, + 0x0004003b,0x000001f0,0x000001f1,0x00000007,0x0004003b,0x000000aa,0x00000204,0x00000007, + 0x0004003b,0x0000001f,0x00000213,0x00000007,0x0004003b,0x0000001f,0x00000215,0x00000007, + 0x0004003b,0x0000001f,0x00000216,0x00000007,0x0004003b,0x00000012,0x00000217,0x00000007, + 0x0004003b,0x00000012,0x0000021b,0x00000007,0x0004003b,0x00000012,0x00000223,0x00000007, + 0x0004003b,0x00000012,0x00000229,0x00000007,0x0004003b,0x00000012,0x0000022e,0x00000007, + 0x0004003b,0x00000136,0x00000231,0x00000007,0x0004003b,0x00000136,0x00000237,0x00000007, + 0x0004003b,0x0000023e,0x0000023f,0x00000007,0x0004003b,0x0000025c,0x0000025d,0x00000007, + 0x0004003b,0x00000012,0x00000262,0x00000007,0x0004003b,0x0000025c,0x00000275,0x00000007, + 0x0004003b,0x00000012,0x0000027e,0x00000007,0x0004003b,0x00000012,0x00000286,0x00000007, + 0x0004003b,0x00000012,0x0000028d,0x00000007,0x0004003b,0x00000012,0x00000290,0x00000007, + 0x0004003b,0x00000294,0x00000295,0x00000007,0x0004003b,0x00000294,0x000002a7,0x00000007, + 0x0004003b,0x00000012,0x000002b2,0x00000007,0x0004003b,0x000002bc,0x000002bd,0x00000007, + 0x0004003b,0x000002c2,0x000002c3,0x00000007,0x0004003b,0x00000012,0x000002d6,0x00000007, + 0x0004003b,0x000002df,0x000002e0,0x00000007,0x0004003b,0x00000012,0x000002ee,0x00000007, + 0x0004003b,0x00000012,0x000002f7,0x00000007,0x0004003b,0x00000012,0x00000314,0x00000007, + 0x0004003b,0x00000012,0x00000332,0x00000007,0x0004003b,0x000002c2,0x0000033e,0x00000007, + 0x0004003b,0x00000012,0x0000034f,0x00000007,0x0004003b,0x0000036a,0x0000036b,0x00000007, + 0x0004003b,0x00000373,0x00000374,0x00000007,0x0004003b,0x00000373,0x00000377,0x00000007, + 0x0004003b,0x00000373,0x0000037b,0x00000007,0x0004003b,0x0000001f,0x0000038f,0x00000007, + 0x0004003b,0x0000001f,0x00000395,0x00000007,0x0004003b,0x0000039a,0x0000039b,0x00000007, + 0x0004003b,0x000003ae,0x000003af,0x00000007,0x0004003b,0x000001f0,0x000003b6,0x00000007, + 0x0004003b,0x00000012,0x000003b8,0x00000007,0x0004003b,0x00000012,0x000003c0,0x00000007, + 0x0004003b,0x000003c9,0x000003ca,0x00000007,0x0004003b,0x00000012,0x000003dd,0x00000007, + 0x0004003b,0x00000012,0x000003e2,0x00000007,0x0004003b,0x00000008,0x000003ea,0x00000007, + 0x0004003b,0x000003f8,0x000003f9,0x00000007,0x0004003b,0x00000008,0x000003ff,0x00000007, + 0x0004003b,0x00000008,0x00000405,0x00000007,0x0004003b,0x00000008,0x0000040a,0x00000007, + 0x0004003b,0x00000012,0x0000040f,0x00000007,0x0004003b,0x00000012,0x00000412,0x00000007, + 0x0004003b,0x00000008,0x00000416,0x00000007,0x0004003b,0x00000008,0x0000041b,0x00000007, + 0x0004003b,0x00000008,0x00000421,0x00000007,0x0004003b,0x00000008,0x00000427,0x00000007, + 0x0004003b,0x000000aa,0x0000042d,0x00000007,0x0004003b,0x000000aa,0x00000433,0x00000007, + 0x0004003b,0x000000aa,0x00000438,0x00000007,0x0004003b,0x000000aa,0x0000043d,0x00000007, + 0x0004003b,0x000000aa,0x00000443,0x00000007,0x0004003b,0x000000aa,0x00000448,0x00000007, + 0x0004003b,0x000000aa,0x0000044d,0x00000007,0x0004003b,0x000000aa,0x00000451,0x00000007, + 0x0004003b,0x00000012,0x00000457,0x00000007,0x0004003b,0x00000008,0x0000045f,0x00000007, + 0x0004003b,0x0000036a,0x0000047b,0x00000007,0x0004003b,0x00000373,0x0000047e,0x00000007, + 0x0004003b,0x0000001f,0x00000481,0x00000007,0x0004003b,0x00000012,0x00000486,0x00000007, + 0x0004003b,0x00000012,0x00000489,0x00000007,0x0004003b,0x00000008,0x00000491,0x00000007, + 0x0004003b,0x00000008,0x0000049c,0x00000007,0x0004003b,0x00000012,0x000004a9,0x00000007, + 0x0004003b,0x00000008,0x000004ae,0x00000007,0x0004003b,0x00000012,0x000004b1,0x00000007, + 0x0004003b,0x00000008,0x000004b6,0x00000007,0x0004003b,0x00000141,0x000004b9,0x00000007, + 0x0004003b,0x00000012,0x000004bd,0x00000007,0x0004003b,0x00000012,0x000004c3,0x00000007, + 0x0004003b,0x00000012,0x000004c5,0x00000007,0x0004003b,0x00000012,0x000004d2,0x00000007, + 0x0004003b,0x00000012,0x000004d4,0x00000007,0x0004003b,0x00000012,0x000004f0,0x00000007, + 0x0004003b,0x00000012,0x000004f3,0x00000007,0x0004003b,0x00000012,0x000004f6,0x00000007, + 0x0004003b,0x00000136,0x000004fa,0x00000007,0x0004003b,0x00000136,0x00000500,0x00000007, + 0x0004003b,0x00000012,0x00000506,0x00000007,0x00050041,0x00000198,0x00000199,0x00000197, + 0x00000046,0x0004003d,0x00000011,0x0000019a,0x00000199,0x0003003e,0x00000194,0x0000019a, + 0x0004003d,0x00000011,0x0000019d,0x0000019c,0x0003003e,0x0000019b,0x0000019d,0x0004003d, + 0x00000011,0x000001a0,0x0000019f,0x0003003e,0x0000019e,0x000001a0,0x0004003d,0x00000011, + 0x000001a2,0x0000019e,0x000500c2,0x00000011,0x000001a3,0x000001a2,0x0000001d,0x0003003e, + 0x000001a1,0x000001a3,0x0004003d,0x00000011,0x000001a5,0x0000019e,0x000500c7,0x00000011, + 0x000001a6,0x000001a5,0x0000001a,0x0003003e,0x000001a4,0x000001a6,0x00050041,0x00000198, + 0x000001a9,0x000001a8,0x00000046,0x0004003d,0x00000011,0x000001aa,0x000001a9,0x0003003e, + 0x000001a7,0x000001aa,0x00050041,0x00000198,0x000001ac,0x000001a8,0x0000004b,0x0004003d, + 0x00000011,0x000001ad,0x000001ac,0x00050041,0x00000198,0x000001ae,0x000001a8,0x0000001d, + 0x0004003d,0x00000011,0x000001af,0x000001ae,0x00050084,0x00000011,0x000001b1,0x000001af, + 0x000001b0,0x00050080,0x00000011,0x000001b2,0x000001ad,0x000001b1,0x0003003e,0x000001ab, + 0x000001b2,0x0004003d,0x00000011,0x000001b3,0x000001ab,0x00050041,0x0000014f,0x000001b5, + 0x0000014e,0x000001b4,0x0004003d,0x00000011,0x000001b6,0x000001b5,0x000500ae,0x00000020, + 0x000001b7,0x000001b3,0x000001b6,0x000300f7,0x000001b9,0x00000000,0x000400fa,0x000001b7, + 0x000001b8,0x000001b9,0x000200f8,0x000001b8,0x000100fd,0x000200f8,0x000001b9,0x0004003d, + 0x00000011,0x000001bc,0x000001ab,0x00050041,0x0000014f,0x000001be,0x0000014e,0x000001bd, + 0x0004003d,0x00000011,0x000001bf,0x000001be,0x00050089,0x00000011,0x000001c0,0x000001bc, + 0x000001bf,0x00050084,0x00000011,0x000001c1,0x000001c0,0x0000004f,0x0004007c,0x00000027, + 0x000001c2,0x000001c1,0x00050041,0x0000014f,0x000001c4,0x0000014e,0x000001c3,0x0004003d, + 0x00000011,0x000001c5,0x000001c4,0x0004007c,0x00000027,0x000001c6,0x000001c5,0x00050082, + 0x00000027,0x000001c7,0x000001c2,0x000001c6,0x0003003e,0x000001bb,0x000001c7,0x0004003d, + 0x00000011,0x000001c9,0x000001ab,0x00050041,0x0000014f,0x000001ca,0x0000014e,0x000001bd, + 0x0004003d,0x00000011,0x000001cb,0x000001ca,0x00050086,0x00000011,0x000001cc,0x000001c9, + 0x000001cb,0x00050084,0x00000011,0x000001cd,0x000001cc,0x0000004f,0x0004007c,0x00000027, + 0x000001ce,0x000001cd,0x00050041,0x0000014f,0x000001d0,0x0000014e,0x000001cf,0x0004003d, + 0x00000011,0x000001d1,0x000001d0,0x0004007c,0x00000027,0x000001d2,0x000001d1,0x00050082, + 0x00000027,0x000001d3,0x000001ce,0x000001d2,0x0003003e,0x000001c8,0x000001d3,0x0004003d, + 0x00000011,0x000001d5,0x0000019b,0x00050084,0x00000011,0x000001d6,0x000001d5,0x0000001b, + 0x0003003e,0x000001d4,0x000001d6,0x000314fc,0x000001d7,0x000001db,0x0003003e,0x000001d9, + 0x000001db,0x0004003d,0x000001d7,0x000001dc,0x000001d9,0x00050041,0x0000014f,0x000001dd, + 0x0000014e,0x00000125,0x0004003d,0x00000011,0x000001de,0x000001dd,0x00050041,0x0000014f, + 0x000001df,0x0000014e,0x00000144,0x0004003d,0x00000011,0x000001e0,0x000001df,0x00050041, + 0x0000014f,0x000001e2,0x0000014e,0x000001e1,0x0004003d,0x00000011,0x000001e3,0x000001e2, + 0x000714fd,0x000001d7,0x000001e4,0x000001dc,0x000001de,0x000001e0,0x000001e3,0x0003003e, + 0x000001d9,0x000001e4,0x0004003d,0x000001d7,0x000001e5,0x000001d9,0x00050041,0x0000014f, + 0x000001e6,0x0000014e,0x00000144,0x0004003d,0x00000011,0x000001e7,0x000001e6,0x00050041, + 0x0000014f,0x000001e8,0x0000014e,0x000001e1,0x0004003d,0x00000011,0x000001e9,0x000001e8, + 0x00050084,0x00000011,0x000001ea,0x000001e7,0x000001e9,0x00050041,0x0000014f,0x000001eb, + 0x0000014e,0x000001e1,0x0004003d,0x00000011,0x000001ec,0x000001eb,0x000714fe,0x000001d7, + 0x000001ed,0x000001e5,0x000001ea,0x000001ec,0x0000004b,0x0003003e,0x000001d9,0x000001ed, + 0x0004003d,0x00000011,0x000001f6,0x000001a7,0x00050084,0x00000011,0x000001f8,0x000001f6, + 0x000001f7,0x0004003d,0x00000011,0x000001f9,0x000001d4,0x00050084,0x00000011,0x000001fa, + 0x000001f9,0x000001ee,0x00050080,0x00000011,0x000001fb,0x000001f8,0x000001fa,0x00060041, + 0x000001fc,0x000001fd,0x000001f5,0x00000144,0x000001fb,0x0004003d,0x00000011,0x000001fe, + 0x000001a7,0x00050084,0x00000011,0x000001ff,0x000001fe,0x000001f7,0x0004003d,0x00000011, + 0x00000200,0x000001d4,0x00050084,0x00000011,0x00000201,0x00000200,0x000001ee,0x00050080, + 0x00000011,0x00000202,0x000001ff,0x00000201,0x00071169,0x000001ef,0x00000203,0x000001fd, + 0x00000144,0x000001ee,0x00000000,0x0003003e,0x000001f1,0x00000203,0x00050041,0x0000014f, + 0x0000020a,0x0000014e,0x00000209,0x0004003d,0x00000011,0x0000020b,0x0000020a,0x0004003d, + 0x00000011,0x0000020c,0x000001a7,0x00050080,0x00000011,0x0000020d,0x0000020b,0x0000020c, + 0x00060041,0x0000020e,0x0000020f,0x00000208,0x00000144,0x0000020d,0x0004003d,0x00000011, + 0x00000210,0x0000020f,0x0004007c,0x0000007e,0x00000211,0x00000210,0x00040073,0x00000006, + 0x00000212,0x00000211,0x0003003e,0x00000204,0x00000212,0x0003003e,0x00000213,0x00000214, + 0x0003003e,0x00000215,0x00000214,0x0003003e,0x00000216,0x00000214,0x0004003d,0x00000011, + 0x00000218,0x000001a7,0x00050084,0x00000011,0x0000021a,0x00000218,0x00000219,0x0003003e, + 0x00000217,0x0000021a,0x0003003e,0x0000021b,0x00000046,0x000200f9,0x0000021c,0x000200f8, + 0x0000021c,0x000400f6,0x0000021e,0x0000021f,0x00000001,0x000200f9,0x00000220,0x000200f8, + 0x00000220,0x0004003d,0x00000011,0x00000221,0x0000021b,0x000500b0,0x00000020,0x00000222, + 0x00000221,0x0000001d,0x000400fa,0x00000222,0x0000021d,0x0000021e,0x000200f8,0x0000021d, + 0x0004003d,0x00000011,0x00000224,0x00000194,0x0004003d,0x00000011,0x00000226,0x0000021b, + 0x00050084,0x00000011,0x00000227,0x00000225,0x00000226,0x00050080,0x00000011,0x00000228, + 0x00000224,0x00000227,0x0003003e,0x00000223,0x00000228,0x0004003d,0x00000011,0x0000022a, + 0x00000223,0x000500c2,0x00000011,0x0000022b,0x0000022a,0x0000001d,0x000500c7,0x00000011, + 0x0000022d,0x0000022b,0x0000022c,0x0003003e,0x00000229,0x0000022d,0x0004003d,0x00000011, + 0x0000022f,0x00000223,0x000500c7,0x00000011,0x00000230,0x0000022f,0x0000001a,0x0003003e, + 0x0000022e,0x00000230,0x0004003d,0x00000027,0x00000232,0x000001bb,0x0004003d,0x00000011, + 0x00000233,0x00000229,0x000500c7,0x00000011,0x00000234,0x00000233,0x00000068,0x0004007c, + 0x00000027,0x00000235,0x00000234,0x00050080,0x00000027,0x00000236,0x00000232,0x00000235, + 0x0003003e,0x00000231,0x00000236,0x0004003d,0x00000027,0x00000238,0x000001c8,0x0004003d, + 0x00000011,0x00000239,0x00000229,0x000500c2,0x00000011,0x0000023a,0x00000239,0x0000001a, + 0x0004007c,0x00000027,0x0000023b,0x0000023a,0x00050080,0x00000027,0x0000023c,0x00000238, + 0x0000023b,0x0003003e,0x00000237,0x0000023c,0x0004003d,0x00000011,0x00000240,0x0000021b, + 0x0004003d,0x00000011,0x00000241,0x00000223,0x000500b0,0x00000020,0x00000243,0x00000241, + 0x00000242,0x0004003d,0x00000027,0x00000244,0x00000231,0x000500af,0x00000020,0x00000245, + 0x00000244,0x00000144,0x000500a7,0x00000020,0x00000246,0x00000243,0x00000245,0x0004003d, + 0x00000027,0x00000247,0x00000237,0x000500af,0x00000020,0x00000248,0x00000247,0x00000144, + 0x000500a7,0x00000020,0x00000249,0x00000246,0x00000248,0x000300f7,0x0000024b,0x00000000, + 0x000400fa,0x00000249,0x0000024a,0x0000024b,0x000200f8,0x0000024a,0x0004003d,0x00000027, + 0x0000024c,0x00000231,0x00050041,0x0000014f,0x0000024d,0x0000014e,0x00000144,0x0004003d, + 0x00000011,0x0000024e,0x0000024d,0x0004007c,0x00000027,0x0000024f,0x0000024e,0x000500b1, + 0x00000020,0x00000250,0x0000024c,0x0000024f,0x000200f9,0x0000024b,0x000200f8,0x0000024b, + 0x000700f5,0x00000020,0x00000251,0x00000249,0x0000021d,0x00000250,0x0000024a,0x000300f7, + 0x00000253,0x00000000,0x000400fa,0x00000251,0x00000252,0x00000253,0x000200f8,0x00000252, + 0x0004003d,0x00000027,0x00000254,0x00000237,0x00050041,0x0000014f,0x00000255,0x0000014e, + 0x00000125,0x0004003d,0x00000011,0x00000256,0x00000255,0x0004007c,0x00000027,0x00000257, + 0x00000256,0x000500b1,0x00000020,0x00000258,0x00000254,0x00000257,0x000200f9,0x00000253, + 0x000200f8,0x00000253,0x000700f5,0x00000020,0x00000259,0x00000251,0x0000024b,0x00000258, + 0x00000252,0x00050041,0x00000141,0x0000025a,0x0000023f,0x00000240,0x0003003e,0x0000025a, + 0x00000259,0x0004003d,0x00000011,0x0000025e,0x0000021b,0x0004003d,0x00000011,0x0000025f, + 0x0000021b,0x00050041,0x00000141,0x00000260,0x0000023f,0x0000025f,0x0004003d,0x00000020, + 0x00000261,0x00000260,0x000300f7,0x00000264,0x00000000,0x000400fa,0x00000261,0x00000263, + 0x00000272,0x000200f8,0x00000263,0x0004003d,0x00000027,0x00000265,0x00000237,0x0004007c, + 0x00000011,0x00000266,0x00000265,0x00050041,0x0000014f,0x00000267,0x0000014e,0x00000144, + 0x0004003d,0x00000011,0x00000268,0x00000267,0x00050084,0x00000011,0x00000269,0x00000266, + 0x00000268,0x0004003d,0x00000027,0x0000026a,0x00000231,0x0004007c,0x00000011,0x0000026b, + 0x0000026a,0x00050080,0x00000011,0x0000026c,0x00000269,0x0000026b,0x00050084,0x00000011, + 0x0000026f,0x0000026c,0x0000026e,0x0004003d,0x00000011,0x00000270,0x0000022e,0x00050080, + 0x00000011,0x00000271,0x0000026f,0x00000270,0x0003003e,0x00000262,0x00000271,0x000200f9, + 0x00000264,0x000200f8,0x00000272,0x0003003e,0x00000262,0x00000046,0x000200f9,0x00000264, + 0x000200f8,0x00000264,0x0004003d,0x00000011,0x00000273,0x00000262,0x00050041,0x00000012, + 0x00000274,0x0000025d,0x0000025e,0x0003003e,0x00000274,0x00000273,0x0004003d,0x00000011, + 0x00000276,0x0000021b,0x0004003d,0x00000011,0x00000277,0x00000229,0x00050084,0x00000011, + 0x00000278,0x00000277,0x00000094,0x0004003d,0x00000011,0x00000279,0x0000022e,0x00050080, + 0x00000011,0x0000027a,0x00000278,0x00000279,0x00050041,0x00000012,0x0000027b,0x00000275, + 0x00000276,0x0003003e,0x0000027b,0x0000027a,0x000200f9,0x0000021f,0x000200f8,0x0000021f, + 0x0004003d,0x00000011,0x0000027c,0x0000021b,0x00050080,0x00000011,0x0000027d,0x0000027c, + 0x00000125,0x0003003e,0x0000021b,0x0000027d,0x000200f9,0x0000021c,0x000200f8,0x0000021e, + 0x0003003e,0x0000027e,0x00000046,0x000200f9,0x0000027f,0x000200f8,0x0000027f,0x000400f6, + 0x00000281,0x00000282,0x00000001,0x000200f9,0x00000283,0x000200f8,0x00000283,0x0004003d, + 0x00000011,0x00000284,0x0000027e,0x000500b0,0x00000020,0x00000285,0x00000284,0x0000001a, + 0x000400fa,0x00000285,0x00000280,0x00000281,0x000200f8,0x00000280,0x0004003d,0x00000011, + 0x00000287,0x00000194,0x0004003d,0x00000011,0x00000288,0x0000027e,0x00050084,0x00000011, + 0x00000289,0x00000225,0x00000288,0x00050080,0x00000011,0x0000028a,0x00000287,0x00000289, + 0x0007000c,0x00000011,0x0000028c,0x00000001,0x00000026,0x0000028a,0x0000028b,0x0003003e, + 0x00000286,0x0000028c,0x0004003d,0x00000011,0x0000028e,0x00000286,0x000500c2,0x00000011, + 0x0000028f,0x0000028e,0x0000001d,0x0003003e,0x0000028d,0x0000028f,0x0004003d,0x00000011, + 0x00000291,0x00000286,0x000500c7,0x00000011,0x00000292,0x00000291,0x0000001a,0x0003003e, + 0x00000290,0x00000292,0x0004003d,0x00000011,0x00000296,0x0000027e,0x0004003d,0x00000011, + 0x00000297,0x00000290,0x000500c2,0x00000011,0x00000298,0x00000297,0x0000004b,0x00050041, + 0x0000014f,0x0000029a,0x0000014e,0x00000299,0x0004003d,0x00000011,0x0000029b,0x0000029a, + 0x00050084,0x00000011,0x0000029c,0x00000298,0x0000029b,0x00050084,0x00000011,0x0000029d, + 0x0000029c,0x0000001d,0x0004003d,0x00000011,0x0000029e,0x00000217,0x0004003d,0x00000011, + 0x0000029f,0x0000028d,0x00050080,0x00000011,0x000002a0,0x0000029e,0x0000029f,0x00050084, + 0x00000011,0x000002a1,0x000002a0,0x0000001d,0x00050080,0x00000011,0x000002a2,0x0000029d, + 0x000002a1,0x0004003d,0x00000011,0x000002a3,0x00000290,0x000500c7,0x00000011,0x000002a4, + 0x000002a3,0x0000004b,0x00050080,0x00000011,0x000002a5,0x000002a2,0x000002a4,0x00050041, + 0x00000012,0x000002a6,0x00000295,0x00000296,0x0003003e,0x000002a6,0x000002a5,0x0004003d, + 0x00000011,0x000002a8,0x0000027e,0x0004003d,0x00000011,0x000002aa,0x0000028d,0x00050084, + 0x00000011,0x000002ab,0x000002aa,0x00000094,0x00050080,0x00000011,0x000002ac,0x000002a9, + 0x000002ab,0x0004003d,0x00000011,0x000002ad,0x00000290,0x00050080,0x00000011,0x000002ae, + 0x000002ac,0x000002ad,0x00050041,0x00000012,0x000002af,0x000002a7,0x000002a8,0x0003003e, + 0x000002af,0x000002ae,0x000200f9,0x00000282,0x000200f8,0x00000282,0x0004003d,0x00000011, + 0x000002b0,0x0000027e,0x00050080,0x00000011,0x000002b1,0x000002b0,0x00000125,0x0003003e, + 0x0000027e,0x000002b1,0x000200f9,0x0000027f,0x000200f8,0x00000281,0x0003003e,0x000002b2, + 0x00000046,0x000200f9,0x000002b3,0x000200f8,0x000002b3,0x000400f6,0x000002b5,0x000002b6, + 0x00000001,0x000200f9,0x000002b7,0x000200f8,0x000002b7,0x0004003d,0x00000011,0x000002b8, + 0x000002b2,0x000500b0,0x00000020,0x000002b9,0x000002b8,0x0000001d,0x000400fa,0x000002b9, + 0x000002b4,0x000002b5,0x000200f8,0x000002b4,0x0004003d,0x00000011,0x000002be,0x000002b2, + 0x0004003d,0x00000011,0x000002bf,0x000002b2,0x00050041,0x00000141,0x000002c0,0x0000023f, + 0x000002bf,0x0004003d,0x00000020,0x000002c1,0x000002c0,0x000300f7,0x000002c5,0x00000000, + 0x000400fa,0x000002c1,0x000002c4,0x000002d0,0x000200f8,0x000002c4,0x0004003d,0x00000011, + 0x000002ca,0x000002b2,0x00050041,0x00000012,0x000002cb,0x0000025d,0x000002ca,0x0004003d, + 0x00000011,0x000002cc,0x000002cb,0x00060041,0x000002cd,0x000002ce,0x000002c9,0x00000144, + 0x000002cc,0x0004003d,0x000002ba,0x000002cf,0x000002ce,0x0003003e,0x000002c3,0x000002cf, + 0x000200f9,0x000002c5,0x000200f8,0x000002d0,0x0003003e,0x000002c3,0x000002d1,0x000200f9, + 0x000002c5,0x000200f8,0x000002c5,0x0004003d,0x000002ba,0x000002d2,0x000002c3,0x00050041, + 0x000002c2,0x000002d3,0x000002bd,0x000002be,0x0003003e,0x000002d3,0x000002d2,0x000200f9, + 0x000002b6,0x000200f8,0x000002b6,0x0004003d,0x00000011,0x000002d4,0x000002b2,0x00050080, + 0x00000011,0x000002d5,0x000002d4,0x00000125,0x0003003e,0x000002b2,0x000002d5,0x000200f9, + 0x000002b3,0x000200f8,0x000002b5,0x0003003e,0x000002d6,0x00000046,0x000200f9,0x000002d7, + 0x000200f8,0x000002d7,0x000400f6,0x000002d9,0x000002da,0x00000001,0x000200f9,0x000002db, + 0x000200f8,0x000002db,0x0004003d,0x00000011,0x000002dc,0x000002d6,0x000500b0,0x00000020, + 0x000002dd,0x000002dc,0x0000001a,0x000400fa,0x000002dd,0x000002d8,0x000002d9,0x000200f8, + 0x000002d8,0x0004003d,0x00000011,0x000002e1,0x000002d6,0x0004003d,0x00000011,0x000002e6, + 0x000002d6,0x00050041,0x00000012,0x000002e7,0x00000295,0x000002e6,0x0004003d,0x00000011, + 0x000002e8,0x000002e7,0x00060041,0x000002cd,0x000002e9,0x000002e5,0x00000144,0x000002e8, + 0x0004003d,0x000002ba,0x000002ea,0x000002e9,0x00050041,0x000002c2,0x000002eb,0x000002e0, + 0x000002e1,0x0003003e,0x000002eb,0x000002ea,0x000200f9,0x000002da,0x000200f8,0x000002da, + 0x0004003d,0x00000011,0x000002ec,0x000002d6,0x00050080,0x00000011,0x000002ed,0x000002ec, + 0x00000125,0x0003003e,0x000002d6,0x000002ed,0x000200f9,0x000002d7,0x000200f8,0x000002d9, + 0x0003003e,0x000002ee,0x00000046,0x000200f9,0x000002ef,0x000200f8,0x000002ef,0x000400f6, + 0x000002f1,0x000002f2,0x00000000,0x000200f9,0x000002f3,0x000200f8,0x000002f3,0x0004003d, + 0x00000011,0x000002f4,0x000002ee,0x000500b0,0x00000020,0x000002f6,0x000002f4,0x000002f5, + 0x000400fa,0x000002f6,0x000002f0,0x000002f1,0x000200f8,0x000002f0,0x0003003e,0x000002f7, + 0x00000046,0x000200f9,0x000002f8,0x000200f8,0x000002f8,0x000400f6,0x000002fa,0x000002fb, + 0x00000001,0x000200f9,0x000002fc,0x000200f8,0x000002fc,0x0004003d,0x00000011,0x000002fd, + 0x000002f7,0x000500b0,0x00000020,0x000002fe,0x000002fd,0x0000001d,0x000400fa,0x000002fe, + 0x000002f9,0x000002fa,0x000200f8,0x000002f9,0x0004003d,0x00000011,0x000002ff,0x00000194, + 0x0004003d,0x00000011,0x00000300,0x000002f7,0x00050084,0x00000011,0x00000301,0x00000225, + 0x00000300,0x00050080,0x00000011,0x00000302,0x000002ff,0x00000301,0x000500b0,0x00000020, + 0x00000303,0x00000302,0x00000242,0x000300f7,0x00000305,0x00000000,0x000400fa,0x00000303, + 0x00000304,0x00000305,0x000200f8,0x00000304,0x0004003d,0x00000011,0x0000030a,0x000002f7, + 0x00050041,0x00000012,0x0000030b,0x00000275,0x0000030a,0x0004003d,0x00000011,0x0000030c, + 0x0000030b,0x0004003d,0x00000011,0x0000030d,0x000002f7,0x00050041,0x000002c2,0x0000030e, + 0x000002bd,0x0000030d,0x0004003d,0x000002ba,0x0000030f,0x0000030e,0x00050041,0x00000310, + 0x00000311,0x00000309,0x0000030c,0x0005003e,0x00000311,0x0000030f,0x00000028,0x0000001d, + 0x000200f9,0x00000305,0x000200f8,0x00000305,0x000200f9,0x000002fb,0x000200f8,0x000002fb, + 0x0004003d,0x00000011,0x00000312,0x000002f7,0x00050080,0x00000011,0x00000313,0x00000312, + 0x00000125,0x0003003e,0x000002f7,0x00000313,0x000200f9,0x000002f8,0x000200f8,0x000002fa, + 0x0003003e,0x00000314,0x00000046,0x000200f9,0x00000315,0x000200f8,0x00000315,0x000400f6, + 0x00000317,0x00000318,0x00000001,0x000200f9,0x00000319,0x000200f8,0x00000319,0x0004003d, + 0x00000011,0x0000031a,0x00000314,0x000500b0,0x00000020,0x0000031b,0x0000031a,0x0000001a, + 0x000400fa,0x0000031b,0x00000316,0x00000317,0x000200f8,0x00000316,0x0004003d,0x00000011, + 0x0000031c,0x00000194,0x0004003d,0x00000011,0x0000031d,0x00000314,0x00050084,0x00000011, + 0x0000031e,0x00000225,0x0000031d,0x00050080,0x00000011,0x0000031f,0x0000031c,0x0000031e, + 0x000500b0,0x00000020,0x00000321,0x0000031f,0x00000320,0x000300f7,0x00000323,0x00000000, + 0x000400fa,0x00000321,0x00000322,0x00000323,0x000200f8,0x00000322,0x0004003d,0x00000011, + 0x00000324,0x00000314,0x00050041,0x00000012,0x00000325,0x000002a7,0x00000324,0x0004003d, + 0x00000011,0x00000326,0x00000325,0x0004003d,0x00000011,0x00000327,0x00000314,0x00050041, + 0x000002c2,0x00000328,0x000002e0,0x00000327,0x0004003d,0x000002ba,0x00000329,0x00000328, + 0x00050041,0x00000310,0x0000032a,0x00000309,0x00000326,0x0005003e,0x0000032a,0x00000329, + 0x00000028,0x0000001d,0x000200f9,0x00000323,0x000200f8,0x00000323,0x000200f9,0x00000318, + 0x000200f8,0x00000318,0x0004003d,0x00000011,0x0000032b,0x00000314,0x00050080,0x00000011, + 0x0000032c,0x0000032b,0x00000125,0x0003003e,0x00000314,0x0000032c,0x000200f9,0x00000315, + 0x000200f8,0x00000317,0x0004003d,0x00000011,0x0000032d,0x000002ee,0x00050080,0x00000011, + 0x0000032e,0x0000032d,0x0000004b,0x000500b0,0x00000020,0x0000032f,0x0000032e,0x000002f5, + 0x000300f7,0x00000331,0x00000000,0x000400fa,0x0000032f,0x00000330,0x00000331,0x000200f8, + 0x00000330,0x0003003e,0x00000332,0x00000046,0x000200f9,0x00000333,0x000200f8,0x00000333, + 0x000400f6,0x00000335,0x00000336,0x00000001,0x000200f9,0x00000337,0x000200f8,0x00000337, + 0x0004003d,0x00000011,0x00000338,0x00000332,0x000500b0,0x00000020,0x00000339,0x00000338, + 0x0000001d,0x000400fa,0x00000339,0x00000334,0x00000335,0x000200f8,0x00000334,0x0004003d, + 0x00000011,0x0000033a,0x00000332,0x0004003d,0x00000011,0x0000033b,0x00000332,0x00050041, + 0x00000141,0x0000033c,0x0000023f,0x0000033b,0x0004003d,0x00000020,0x0000033d,0x0000033c, + 0x000300f7,0x00000340,0x00000000,0x000400fa,0x0000033d,0x0000033f,0x0000034a,0x000200f8, + 0x0000033f,0x0004003d,0x00000011,0x00000341,0x00000332,0x00050041,0x00000012,0x00000342, + 0x0000025d,0x00000341,0x0004003d,0x00000011,0x00000343,0x00000342,0x0004003d,0x00000011, + 0x00000344,0x000002ee,0x00050080,0x00000011,0x00000345,0x00000344,0x0000004b,0x00050084, + 0x00000011,0x00000346,0x00000345,0x00000076,0x00050080,0x00000011,0x00000347,0x00000343, + 0x00000346,0x00060041,0x000002cd,0x00000348,0x000002c9,0x00000144,0x00000347,0x0004003d, + 0x000002ba,0x00000349,0x00000348,0x0003003e,0x0000033e,0x00000349,0x000200f9,0x00000340, + 0x000200f8,0x0000034a,0x0003003e,0x0000033e,0x000002d1,0x000200f9,0x00000340,0x000200f8, + 0x00000340,0x0004003d,0x000002ba,0x0000034b,0x0000033e,0x00050041,0x000002c2,0x0000034c, + 0x000002bd,0x0000033a,0x0003003e,0x0000034c,0x0000034b,0x000200f9,0x00000336,0x000200f8, + 0x00000336,0x0004003d,0x00000011,0x0000034d,0x00000332,0x00050080,0x00000011,0x0000034e, + 0x0000034d,0x00000125,0x0003003e,0x00000332,0x0000034e,0x000200f9,0x00000333,0x000200f8, + 0x00000335,0x0003003e,0x0000034f,0x00000046,0x000200f9,0x00000350,0x000200f8,0x00000350, + 0x000400f6,0x00000352,0x00000353,0x00000001,0x000200f9,0x00000354,0x000200f8,0x00000354, + 0x0004003d,0x00000011,0x00000355,0x0000034f,0x000500b0,0x00000020,0x00000356,0x00000355, + 0x0000001a,0x000400fa,0x00000356,0x00000351,0x00000352,0x000200f8,0x00000351,0x0004003d, + 0x00000011,0x00000357,0x0000034f,0x0004003d,0x00000011,0x00000358,0x0000034f,0x00050041, + 0x00000012,0x00000359,0x00000295,0x00000358,0x0004003d,0x00000011,0x0000035a,0x00000359, + 0x0004003d,0x00000011,0x0000035b,0x000002ee,0x00050080,0x00000011,0x0000035c,0x0000035b, + 0x0000004b,0x00050084,0x00000011,0x0000035d,0x0000035c,0x0000001d,0x00050041,0x0000014f, + 0x0000035e,0x0000014e,0x00000299,0x0004003d,0x00000011,0x0000035f,0x0000035e,0x00050084, + 0x00000011,0x00000360,0x0000035d,0x0000035f,0x00050084,0x00000011,0x00000361,0x00000360, + 0x0000001d,0x00050080,0x00000011,0x00000362,0x0000035a,0x00000361,0x00060041,0x000002cd, + 0x00000363,0x000002e5,0x00000144,0x00000362,0x0004003d,0x000002ba,0x00000364,0x00000363, + 0x00050041,0x000002c2,0x00000365,0x000002e0,0x00000357,0x0003003e,0x00000365,0x00000364, + 0x000200f9,0x00000353,0x000200f8,0x00000353,0x0004003d,0x00000011,0x00000366,0x0000034f, + 0x00050080,0x00000011,0x00000367,0x00000366,0x00000125,0x0003003e,0x0000034f,0x00000367, + 0x000200f9,0x00000350,0x000200f8,0x00000352,0x000200f9,0x00000331,0x000200f8,0x00000331, + 0x000400e0,0x0000001d,0x0000001d,0x00000368,0x0004003d,0x00000011,0x0000036c,0x000001d4, + 0x00050084,0x00000011,0x0000036d,0x0000036c,0x00000094,0x00050041,0x00000310,0x0000036e, + 0x00000309,0x0000036d,0x0004003d,0x00000011,0x0000036f,0x000001d4,0x00050084,0x00000011, + 0x00000370,0x0000036f,0x00000094,0x00081169,0x00000369,0x00000371,0x0000036e,0x00000144, + 0x00000094,0x00000030,0x0000001d,0x0003003e,0x0000036b,0x00000371,0x00050041,0x00000310, + 0x00000375,0x00000309,0x000002a9,0x00081169,0x00000372,0x00000376,0x00000375,0x00000125, + 0x00000094,0x00000030,0x0000001d,0x0003003e,0x00000374,0x00000376,0x00050041,0x00000310, + 0x00000379,0x00000309,0x00000378,0x00081169,0x00000372,0x0000037a,0x00000379,0x00000125, + 0x00000094,0x00000030,0x0000001d,0x0003003e,0x00000377,0x0000037a,0x00050041,0x00000310, + 0x0000037d,0x00000309,0x0000037c,0x00081169,0x00000372,0x0000037e,0x0000037d,0x00000125, + 0x00000094,0x00000030,0x0000001d,0x0003003e,0x0000037b,0x0000037e,0x0004003d,0x00000369, + 0x0000037f,0x0000036b,0x0004003d,0x00000372,0x00000380,0x00000374,0x0004003d,0x0000001e, + 0x00000381,0x00000213,0x0006116b,0x0000001e,0x00000382,0x0000037f,0x00000380,0x00000381, + 0x0003003e,0x00000213,0x00000382,0x0004003d,0x00000369,0x00000383,0x0000036b,0x0004003d, + 0x00000372,0x00000384,0x00000377,0x0004003d,0x0000001e,0x00000385,0x00000215,0x0006116b, + 0x0000001e,0x00000386,0x00000383,0x00000384,0x00000385,0x0003003e,0x00000215,0x00000386, + 0x0004003d,0x00000369,0x00000387,0x0000036b,0x0004003d,0x00000372,0x00000388,0x0000037b, + 0x0004003d,0x0000001e,0x00000389,0x00000216,0x0006116b,0x0000001e,0x0000038a,0x00000387, + 0x00000388,0x00000389,0x0003003e,0x00000216,0x0000038a,0x000400e0,0x0000001d,0x0000001d, + 0x00000368,0x000200f9,0x000002f2,0x000200f8,0x000002f2,0x0004003d,0x00000011,0x0000038b, + 0x000002ee,0x00050080,0x00000011,0x0000038c,0x0000038b,0x00000125,0x0003003e,0x000002ee, + 0x0000038c,0x000200f9,0x000002ef,0x000200f8,0x000002f1,0x0004003d,0x00000006,0x0000038d, + 0x00000204,0x0004003d,0x0000001e,0x00000390,0x00000213,0x0003003e,0x0000038f,0x00000390, + 0x00070039,0x00000002,0x00000391,0x00000025,0x0000038f,0x0000038d,0x0000038e,0x0004003d, + 0x0000001e,0x00000392,0x0000038f,0x0003003e,0x00000213,0x00000392,0x0004003d,0x00000006, + 0x00000393,0x00000204,0x0004003d,0x0000001e,0x00000396,0x00000215,0x0003003e,0x00000395, + 0x00000396,0x00070039,0x00000002,0x00000397,0x00000025,0x00000395,0x00000393,0x00000394, + 0x0004003d,0x0000001e,0x00000398,0x00000395,0x0003003e,0x00000215,0x00000398,0x0004003d, + 0x0000001e,0x0000039c,0x00000213,0x00040073,0x00000399,0x0000039d,0x0000039c,0x0003003e, + 0x0000039b,0x0000039d,0x0004003d,0x0000001e,0x0000039e,0x00000215,0x0004003d,0x00000011, + 0x0000039f,0x000001d4,0x0004003d,0x00000011,0x000003a0,0x000001a4,0x0004003d,0x00000011, + 0x000003a1,0x000001a1,0x0004003d,0x00000027,0x000003a2,0x000001bb,0x0004003d,0x00000027, + 0x000003a3,0x000001c8,0x000b0039,0x00000002,0x000003a4,0x00000030,0x0000039e,0x00000046, + 0x0000039f,0x000003a0,0x000003a1,0x000003a2,0x000003a3,0x0004003d,0x0000001e,0x000003a5, + 0x00000216,0x0004003d,0x00000011,0x000003a7,0x000001d4,0x0004003d,0x00000011,0x000003a8, + 0x000001a4,0x0004003d,0x00000011,0x000003a9,0x000001a1,0x0004003d,0x00000027,0x000003aa, + 0x000001bb,0x0004003d,0x00000027,0x000003ab,0x000001c8,0x000b0039,0x00000002,0x000003ac, + 0x00000030,0x000003a5,0x000003a6,0x000003a7,0x000003a8,0x000003a9,0x000003aa,0x000003ab, + 0x000400e0,0x0000001d,0x0000001d,0x00000368,0x00050041,0x0000018e,0x000003b0,0x00000184, + 0x00000046,0x00081169,0x000003ad,0x000003b1,0x000003b0,0x00000125,0x0000001b,0x00000030, + 0x0000001d,0x0003003e,0x000003af,0x000003b1,0x0004003d,0x00000399,0x000003b2,0x0000039b, + 0x0004003d,0x000003ad,0x000003b3,0x000003af,0x0004003d,0x000001ef,0x000003b4,0x000001f1, + 0x0006116b,0x000001ef,0x000003b5,0x000003b2,0x000003b3,0x000003b4,0x0003003e,0x000001f1, + 0x000003b5,0x0003003e,0x000003b6,0x000003b7,0x0003003e,0x000003b8,0x00000046,0x000200f9, + 0x000003b9,0x000200f8,0x000003b9,0x000400f6,0x000003bb,0x000003bc,0x00000001,0x000200f9, + 0x000003bd,0x000200f8,0x000003bd,0x0004003d,0x00000011,0x000003be,0x000003b8,0x000500b0, + 0x00000020,0x000003bf,0x000003be,0x0000001d,0x000400fa,0x000003bf,0x000003ba,0x000003bb, + 0x000200f8,0x000003ba,0x0003003e,0x000003c0,0x00000046,0x000200f9,0x000003c1,0x000200f8, + 0x000003c1,0x000400f6,0x000003c3,0x000003c4,0x00000001,0x000200f9,0x000003c5,0x000200f8, + 0x000003c5,0x0004003d,0x00000011,0x000003c6,0x000003c0,0x000500b0,0x00000020,0x000003c7, + 0x000003c6,0x0000004f,0x000400fa,0x000003c7,0x000003c2,0x000003c3,0x000200f8,0x000003c2, + 0x0004003d,0x00000011,0x000003cb,0x000003c0,0x0004003d,0x00000011,0x000003cc,0x000003b8, + 0x00050084,0x00000011,0x000003cd,0x0000001b,0x000003cc,0x0004003d,0x00000011,0x000003ce, + 0x000003c0,0x00050084,0x00000011,0x000003cf,0x0000001d,0x000003ce,0x00050080,0x00000011, + 0x000003d0,0x000003cd,0x000003cf,0x00050041,0x000000aa,0x000003d1,0x000001f1,0x000003d0, + 0x0004003d,0x00000006,0x000003d2,0x000003d1,0x0004003d,0x00000011,0x000003d3,0x000003b8, + 0x00050084,0x00000011,0x000003d4,0x0000001b,0x000003d3,0x0004003d,0x00000011,0x000003d5, + 0x000003c0,0x00050084,0x00000011,0x000003d6,0x0000001d,0x000003d5,0x00050080,0x00000011, + 0x000003d7,0x000003d4,0x000003d6,0x00050080,0x00000011,0x000003d8,0x000003d7,0x0000004b, + 0x00050041,0x000000aa,0x000003d9,0x000001f1,0x000003d8,0x0004003d,0x00000006,0x000003da, + 0x000003d9,0x00050050,0x00000007,0x000003db,0x000003d2,0x000003da,0x0004007c,0x00000011, + 0x000003dc,0x000003db,0x0003003e,0x000003dd,0x000003dc,0x00050039,0x00000011,0x000003de, + 0x00000018,0x000003dd,0x00050041,0x00000012,0x000003df,0x000003ca,0x000003cb,0x0003003e, + 0x000003df,0x000003de,0x000200f9,0x000003c4,0x000200f8,0x000003c4,0x0004003d,0x00000011, + 0x000003e0,0x000003c0,0x00050080,0x00000011,0x000003e1,0x000003e0,0x00000125,0x0003003e, + 0x000003c0,0x000003e1,0x000200f9,0x000003c1,0x000200f8,0x000003c3,0x0003003e,0x000003e2, + 0x00000046,0x000200f9,0x000003e3,0x000200f8,0x000003e3,0x000400f6,0x000003e5,0x000003e6, + 0x00000001,0x000200f9,0x000003e7,0x000200f8,0x000003e7,0x0004003d,0x00000011,0x000003e8, + 0x000003e2,0x000500b0,0x00000020,0x000003e9,0x000003e8,0x00000076,0x000400fa,0x000003e9, + 0x000003e4,0x000003e5,0x000200f8,0x000003e4,0x0004003d,0x00000011,0x000003eb,0x000003e2, + 0x00050084,0x00000011,0x000003ec,0x0000001d,0x000003eb,0x00050041,0x00000012,0x000003ed, + 0x000003ca,0x000003ec,0x0004003d,0x00000011,0x000003ee,0x000003ed,0x0004007c,0x00000007, + 0x000003ef,0x000003ee,0x0004003d,0x00000011,0x000003f0,0x000003e2,0x00050084,0x00000011, + 0x000003f1,0x0000001d,0x000003f0,0x00050080,0x00000011,0x000003f2,0x000003f1,0x0000004b, + 0x00050041,0x00000012,0x000003f3,0x000003ca,0x000003f2,0x0004003d,0x00000011,0x000003f4, + 0x000003f3,0x0004007c,0x00000007,0x000003f5,0x000003f4,0x00050081,0x00000007,0x000003f6, + 0x000003ef,0x000003f5,0x0003003e,0x000003ea,0x000003f6,0x0004003d,0x00000011,0x000003fa, + 0x000003e2,0x0004003d,0x00000007,0x000003fb,0x000003ea,0x00050041,0x00000008,0x000003fc, + 0x000003f9,0x000003fa,0x0003003e,0x000003fc,0x000003fb,0x000200f9,0x000003e6,0x000200f8, + 0x000003e6,0x0004003d,0x00000011,0x000003fd,0x000003e2,0x00050080,0x00000011,0x000003fe, + 0x000003fd,0x00000125,0x0003003e,0x000003e2,0x000003fe,0x000200f9,0x000003e3,0x000200f8, + 0x000003e5,0x00050041,0x00000008,0x00000400,0x000003f9,0x00000144,0x0004003d,0x00000007, + 0x00000401,0x00000400,0x00050041,0x00000008,0x00000402,0x000003f9,0x00000125,0x0004003d, + 0x00000007,0x00000403,0x00000402,0x00050081,0x00000007,0x00000404,0x00000401,0x00000403, + 0x0003003e,0x000003ff,0x00000404,0x0004003d,0x00000007,0x00000406,0x000003ff,0x00050041, + 0x00000008,0x00000407,0x000003f9,0x000001e1,0x0004003d,0x00000007,0x00000408,0x00000407, + 0x00050081,0x00000007,0x00000409,0x00000406,0x00000408,0x0003003e,0x00000405,0x00000409, + 0x0004003d,0x00000007,0x0000040b,0x00000405,0x00050041,0x00000008,0x0000040c,0x000003f9, + 0x000001da,0x0004003d,0x00000007,0x0000040d,0x0000040c,0x00050081,0x00000007,0x0000040e, + 0x0000040b,0x0000040d,0x0003003e,0x0000040a,0x0000040e,0x0004003d,0x00000007,0x00000410, + 0x0000040a,0x0004007c,0x00000011,0x00000411,0x00000410,0x0003003e,0x0000040f,0x00000411, + 0x0004003d,0x00000011,0x00000413,0x0000019e,0x000500c7,0x00000011,0x00000415,0x00000413, + 0x00000414,0x0003003e,0x00000412,0x00000415,0x0004003d,0x00000011,0x00000417,0x0000040f, + 0x0004003d,0x00000011,0x00000418,0x00000412,0x00060159,0x00000011,0x00000419,0x0000001a, + 0x00000417,0x00000418,0x0004007c,0x00000007,0x0000041a,0x00000419,0x0003003e,0x00000416, + 0x0000041a,0x0004003d,0x00000011,0x0000041c,0x0000040f,0x0004003d,0x00000011,0x0000041d, + 0x00000412,0x00050080,0x00000011,0x0000041e,0x0000041d,0x0000004b,0x00060159,0x00000011, + 0x0000041f,0x0000001a,0x0000041c,0x0000041e,0x0004007c,0x00000007,0x00000420,0x0000041f, + 0x0003003e,0x0000041b,0x00000420,0x0004003d,0x00000011,0x00000422,0x0000040f,0x0004003d, + 0x00000011,0x00000423,0x00000412,0x00050080,0x00000011,0x00000424,0x00000423,0x0000001d, + 0x00060159,0x00000011,0x00000425,0x0000001a,0x00000422,0x00000424,0x0004007c,0x00000007, + 0x00000426,0x00000425,0x0003003e,0x00000421,0x00000426,0x0004003d,0x00000011,0x00000428, + 0x0000040f,0x0004003d,0x00000011,0x00000429,0x00000412,0x00050080,0x00000011,0x0000042a, + 0x00000429,0x0000001a,0x00060159,0x00000011,0x0000042b,0x0000001a,0x00000428,0x0000042a, + 0x0004007c,0x00000007,0x0000042c,0x0000042b,0x0003003e,0x00000427,0x0000042c,0x00050041, + 0x000000aa,0x0000042e,0x00000416,0x00000046,0x0004003d,0x00000006,0x0000042f,0x0000042e, + 0x00050041,0x000000aa,0x00000430,0x0000041b,0x00000046,0x0004003d,0x00000006,0x00000431, + 0x00000430,0x00050081,0x00000006,0x00000432,0x0000042f,0x00000431,0x0003003e,0x0000042d, + 0x00000432,0x0004003d,0x00000006,0x00000434,0x0000042d,0x00050041,0x000000aa,0x00000435, + 0x00000421,0x00000046,0x0004003d,0x00000006,0x00000436,0x00000435,0x00050081,0x00000006, + 0x00000437,0x00000434,0x00000436,0x0003003e,0x00000433,0x00000437,0x0004003d,0x00000006, + 0x00000439,0x00000433,0x00050041,0x000000aa,0x0000043a,0x00000427,0x00000046,0x0004003d, + 0x00000006,0x0000043b,0x0000043a,0x00050081,0x00000006,0x0000043c,0x00000439,0x0000043b, + 0x0003003e,0x00000438,0x0000043c,0x00050041,0x000000aa,0x0000043e,0x00000416,0x0000004b, + 0x0004003d,0x00000006,0x0000043f,0x0000043e,0x00050041,0x000000aa,0x00000440,0x0000041b, + 0x0000004b,0x0004003d,0x00000006,0x00000441,0x00000440,0x00050081,0x00000006,0x00000442, + 0x0000043f,0x00000441,0x0003003e,0x0000043d,0x00000442,0x0004003d,0x00000006,0x00000444, + 0x0000043d,0x00050041,0x000000aa,0x00000445,0x00000421,0x0000004b,0x0004003d,0x00000006, + 0x00000446,0x00000445,0x00050081,0x00000006,0x00000447,0x00000444,0x00000446,0x0003003e, + 0x00000443,0x00000447,0x0004003d,0x00000006,0x00000449,0x00000443,0x00050041,0x000000aa, + 0x0000044a,0x00000427,0x0000004b,0x0004003d,0x00000006,0x0000044b,0x0000044a,0x00050081, + 0x00000006,0x0000044c,0x00000449,0x0000044b,0x0003003e,0x00000448,0x0000044c,0x0004003d, + 0x00000006,0x0000044e,0x00000438,0x0004003d,0x00000006,0x0000044f,0x00000448,0x00050081, + 0x00000006,0x00000450,0x0000044e,0x0000044f,0x0003003e,0x0000044d,0x00000450,0x0004003d, + 0x00000006,0x00000453,0x0000044d,0x00040073,0x0000007e,0x00000454,0x00000453,0x00050088, + 0x0000007e,0x00000455,0x00000452,0x00000454,0x00040073,0x00000006,0x00000456,0x00000455, + 0x0003003e,0x00000451,0x00000456,0x0003003e,0x00000457,0x00000046,0x000200f9,0x00000458, + 0x000200f8,0x00000458,0x000400f6,0x0000045a,0x0000045b,0x00000001,0x000200f9,0x0000045c, + 0x000200f8,0x0000045c,0x0004003d,0x00000011,0x0000045d,0x00000457,0x000500b0,0x00000020, + 0x0000045e,0x0000045d,0x0000004f,0x000400fa,0x0000045e,0x00000459,0x0000045a,0x000200f8, + 0x00000459,0x0004003d,0x00000011,0x00000460,0x00000457,0x00050041,0x00000012,0x00000461, + 0x000003ca,0x00000460,0x0004003d,0x00000011,0x00000462,0x00000461,0x0004007c,0x00000007, + 0x00000463,0x00000462,0x0004003d,0x00000006,0x00000464,0x00000451,0x0005008e,0x00000007, + 0x00000465,0x00000463,0x00000464,0x0003003e,0x0000045f,0x00000465,0x0004003d,0x00000011, + 0x00000466,0x000003b8,0x00050084,0x00000011,0x00000467,0x0000001b,0x00000466,0x0004003d, + 0x00000011,0x00000468,0x00000457,0x00050084,0x00000011,0x00000469,0x0000001d,0x00000468, + 0x00050080,0x00000011,0x0000046a,0x00000467,0x00000469,0x00050041,0x000000aa,0x0000046b, + 0x0000045f,0x00000046,0x0004003d,0x00000006,0x0000046c,0x0000046b,0x00050041,0x000000aa, + 0x0000046d,0x000003b6,0x0000046a,0x0003003e,0x0000046d,0x0000046c,0x0004003d,0x00000011, + 0x0000046e,0x000003b8,0x00050084,0x00000011,0x0000046f,0x0000001b,0x0000046e,0x0004003d, + 0x00000011,0x00000470,0x00000457,0x00050084,0x00000011,0x00000471,0x0000001d,0x00000470, + 0x00050080,0x00000011,0x00000472,0x0000046f,0x00000471,0x00050080,0x00000011,0x00000473, + 0x00000472,0x0000004b,0x00050041,0x000000aa,0x00000474,0x0000045f,0x0000004b,0x0004003d, + 0x00000006,0x00000475,0x00000474,0x00050041,0x000000aa,0x00000476,0x000003b6,0x00000473, + 0x0003003e,0x00000476,0x00000475,0x000200f9,0x0000045b,0x000200f8,0x0000045b,0x0004003d, + 0x00000011,0x00000477,0x00000457,0x00050080,0x00000011,0x00000478,0x00000477,0x00000125, + 0x0003003e,0x00000457,0x00000478,0x000200f9,0x00000458,0x000200f8,0x0000045a,0x000200f9, + 0x000003bc,0x000200f8,0x000003bc,0x0004003d,0x00000011,0x00000479,0x000003b8,0x00050080, + 0x00000011,0x0000047a,0x00000479,0x00000125,0x0003003e,0x000003b8,0x0000047a,0x000200f9, + 0x000003b9,0x000200f8,0x000003bb,0x0004003d,0x000001ef,0x0000047c,0x000003b6,0x00040073, + 0x00000369,0x0000047d,0x0000047c,0x0003003e,0x0000047b,0x0000047d,0x00050041,0x0000018e, + 0x0000047f,0x00000184,0x000003a6,0x00081169,0x00000372,0x00000480,0x0000047f,0x00000144, + 0x0000001b,0x00000030,0x0000001d,0x0003003e,0x0000047e,0x00000480,0x0003003e,0x00000481, + 0x00000214,0x0004003d,0x00000369,0x00000482,0x0000047b,0x0004003d,0x00000372,0x00000483, + 0x0000047e,0x0004003d,0x0000001e,0x00000484,0x00000481,0x0006116b,0x0000001e,0x00000485, + 0x00000482,0x00000483,0x00000484,0x0003003e,0x00000481,0x00000485,0x0004003d,0x00000011, + 0x00000487,0x0000019b,0x00050084,0x00000011,0x00000488,0x00000487,0x00000225,0x0003003e, + 0x00000486,0x00000488,0x0003003e,0x00000489,0x00000046,0x000200f9,0x0000048a,0x000200f8, + 0x0000048a,0x000400f6,0x0000048c,0x0000048d,0x00000001,0x000200f9,0x0000048e,0x000200f8, + 0x0000048e,0x0004003d,0x00000011,0x0000048f,0x00000489,0x000500b0,0x00000020,0x00000490, + 0x0000048f,0x00000076,0x000400fa,0x00000490,0x0000048b,0x0000048c,0x000200f8,0x0000048b, + 0x0004003d,0x00000011,0x00000492,0x00000489,0x00050084,0x00000011,0x00000493,0x0000001d, + 0x00000492,0x00050041,0x000000aa,0x00000494,0x00000481,0x00000493,0x0004003d,0x00000006, + 0x00000495,0x00000494,0x0004003d,0x00000011,0x00000496,0x00000489,0x00050084,0x00000011, + 0x00000497,0x0000001d,0x00000496,0x00050080,0x00000011,0x00000498,0x00000497,0x0000004b, + 0x00050041,0x000000aa,0x00000499,0x00000481,0x00000498,0x0004003d,0x00000006,0x0000049a, + 0x00000499,0x00050050,0x00000007,0x0000049b,0x00000495,0x0000049a,0x0003003e,0x00000491, + 0x0000049b,0x0004003d,0x00000011,0x0000049d,0x00000489,0x00050084,0x00000011,0x0000049e, + 0x0000001d,0x0000049d,0x00050080,0x00000011,0x0000049f,0x0000004f,0x0000049e,0x00050041, + 0x000000aa,0x000004a0,0x00000481,0x0000049f,0x0004003d,0x00000006,0x000004a1,0x000004a0, + 0x0004003d,0x00000011,0x000004a2,0x00000489,0x00050084,0x00000011,0x000004a3,0x0000001d, + 0x000004a2,0x00050080,0x00000011,0x000004a4,0x0000004f,0x000004a3,0x00050080,0x00000011, + 0x000004a5,0x000004a4,0x0000004b,0x00050041,0x000000aa,0x000004a6,0x00000481,0x000004a5, + 0x0004003d,0x00000006,0x000004a7,0x000004a6,0x00050050,0x00000007,0x000004a8,0x000004a1, + 0x000004a7,0x0003003e,0x0000049c,0x000004a8,0x0004003d,0x00000007,0x000004aa,0x00000491, + 0x0004003d,0x00000007,0x000004ab,0x00000491,0x0004009c,0x00000037,0x000004ac,0x000004ab, + 0x000600a9,0x00000007,0x000004ad,0x000004ac,0x00000035,0x000004aa,0x0003003e,0x000004ae, + 0x000004ad,0x00050039,0x00000009,0x000004af,0x0000000f,0x000004ae,0x00040071,0x00000011, + 0x000004b0,0x000004af,0x0003003e,0x000004a9,0x000004b0,0x0004003d,0x00000007,0x000004b2, + 0x0000049c,0x0004003d,0x00000007,0x000004b3,0x0000049c,0x0004009c,0x00000037,0x000004b4, + 0x000004b3,0x000600a9,0x00000007,0x000004b5,0x000004b4,0x00000035,0x000004b2,0x0003003e, + 0x000004b6,0x000004b5,0x00050039,0x00000009,0x000004b7,0x0000000f,0x000004b6,0x00040071, + 0x00000011,0x000004b8,0x000004b7,0x0003003e,0x000004b1,0x000004b8,0x0004003d,0x00000011, + 0x000004ba,0x000001a4,0x000500c7,0x00000011,0x000004bb,0x000004ba,0x0000004b,0x000500ab, + 0x00000020,0x000004bc,0x000004bb,0x00000046,0x0003003e,0x000004b9,0x000004bc,0x0004003d, + 0x00000020,0x000004be,0x000004b9,0x0004003d,0x00000011,0x000004bf,0x000004a9,0x0004003d, + 0x00000011,0x000004c0,0x000004b1,0x000600a9,0x00000011,0x000004c1,0x000004be,0x000004bf, + 0x000004c0,0x0006015a,0x00000011,0x000004c2,0x0000001a,0x000004c1,0x0000004b,0x0003003e, + 0x000004bd,0x000004c2,0x0004003d,0x00000020,0x000004c4,0x000004b9,0x000300f7,0x000004c7, + 0x00000000,0x000400fa,0x000004c4,0x000004c6,0x000004cc,0x000200f8,0x000004c6,0x0004003d, + 0x00000011,0x000004c8,0x000004bd,0x0004003d,0x00000011,0x000004c9,0x000004b1,0x000500c4, + 0x00000011,0x000004ca,0x000004c9,0x0000001b,0x000500c5,0x00000011,0x000004cb,0x000004c8, + 0x000004ca,0x0003003e,0x000004c5,0x000004cb,0x000200f9,0x000004c7,0x000200f8,0x000004cc, + 0x0004003d,0x00000011,0x000004cd,0x000004a9,0x0004003d,0x00000011,0x000004ce,0x000004bd, + 0x000500c4,0x00000011,0x000004cf,0x000004ce,0x0000001b,0x000500c5,0x00000011,0x000004d0, + 0x000004cd,0x000004cf,0x0003003e,0x000004c5,0x000004d0,0x000200f9,0x000004c7,0x000200f8, + 0x000004c7,0x0004003d,0x00000011,0x000004d1,0x000004c5,0x0003003e,0x000004c3,0x000004d1, + 0x0004003d,0x00000020,0x000004d3,0x000004b9,0x000300f7,0x000004d6,0x00000000,0x000400fa, + 0x000004d3,0x000004d5,0x000004d9,0x000200f8,0x000004d5,0x0004003d,0x00000011,0x000004d7, + 0x000001a1,0x00050080,0x00000011,0x000004d8,0x000004d7,0x0000004f,0x0003003e,0x000004d4, + 0x000004d8,0x000200f9,0x000004d6,0x000200f8,0x000004d9,0x0004003d,0x00000011,0x000004da, + 0x000001a1,0x0003003e,0x000004d4,0x000004da,0x000200f9,0x000004d6,0x000200f8,0x000004d6, + 0x0004003d,0x00000011,0x000004db,0x000004d4,0x0003003e,0x000004d2,0x000004db,0x0004003d, + 0x00000011,0x000004e0,0x00000486,0x0004003d,0x00000011,0x000004e1,0x000004d2,0x00050084, + 0x00000011,0x000004e2,0x000004e1,0x0000004f,0x00050080,0x00000011,0x000004e3,0x000004e0, + 0x000004e2,0x0004003d,0x00000011,0x000004e4,0x00000489,0x00050084,0x00000011,0x000004e5, + 0x0000001d,0x000004e4,0x00050080,0x00000011,0x000004e6,0x000004e3,0x000004e5,0x0004003d, + 0x00000011,0x000004e7,0x000001a4,0x000500c2,0x00000011,0x000004e8,0x000004e7,0x0000004b, + 0x00050080,0x00000011,0x000004e9,0x000004e6,0x000004e8,0x0004003d,0x00000011,0x000004ea, + 0x000004c3,0x00050041,0x000004eb,0x000004ec,0x000004df,0x000004e9,0x0005003e,0x000004ec, + 0x000004ea,0x00000028,0x0000001d,0x000200f9,0x0000048d,0x000200f8,0x0000048d,0x0004003d, + 0x00000011,0x000004ed,0x00000489,0x00050080,0x00000011,0x000004ee,0x000004ed,0x00000125, + 0x0003003e,0x00000489,0x000004ee,0x000200f9,0x0000048a,0x000200f8,0x0000048c,0x000400e0, + 0x0000001a,0x0000001a,0x000004ef,0x0004003d,0x00000011,0x000004f1,0x0000019e,0x000500c2, + 0x00000011,0x000004f2,0x000004f1,0x0000004b,0x0003003e,0x000004f0,0x000004f2,0x0004003d, + 0x00000011,0x000004f4,0x0000019e,0x000500c7,0x00000011,0x000004f5,0x000004f4,0x0000004b, + 0x0003003e,0x000004f3,0x000004f5,0x0004003d,0x00000011,0x000004f7,0x000001d4,0x0004003d, + 0x00000011,0x000004f8,0x000004f0,0x00050080,0x00000011,0x000004f9,0x000004f7,0x000004f8, + 0x0003003e,0x000004f6,0x000004f9,0x0004003d,0x00000027,0x000004fb,0x000001bb,0x0004003d, + 0x00000011,0x000004fc,0x000004f6,0x000500c7,0x00000011,0x000004fd,0x000004fc,0x00000068, + 0x0004007c,0x00000027,0x000004fe,0x000004fd,0x00050080,0x00000027,0x000004ff,0x000004fb, + 0x000004fe,0x0003003e,0x000004fa,0x000004ff,0x0004003d,0x00000027,0x00000501,0x000001c8, + 0x0004003d,0x00000011,0x00000502,0x000004f6,0x000500c2,0x00000011,0x00000503,0x00000502, + 0x0000001a,0x0004007c,0x00000027,0x00000504,0x00000503,0x00050080,0x00000027,0x00000505, + 0x00000501,0x00000504,0x0003003e,0x00000500,0x00000505,0x0004003d,0x00000011,0x00000507, + 0x00000486,0x0004003d,0x00000011,0x00000508,0x000004f0,0x00050084,0x00000011,0x00000509, + 0x00000508,0x0000004f,0x00050080,0x00000011,0x0000050a,0x00000507,0x00000509,0x0004003d, + 0x00000011,0x0000050b,0x000004f3,0x00050084,0x00000011,0x0000050c,0x0000050b,0x00000076, + 0x00050080,0x00000011,0x0000050d,0x0000050a,0x0000050c,0x0003003e,0x00000506,0x0000050d, + 0x0004003d,0x00000027,0x0000050e,0x000004fa,0x000500af,0x00000020,0x0000050f,0x0000050e, + 0x00000144,0x0004003d,0x00000027,0x00000510,0x00000500,0x000500af,0x00000020,0x00000511, + 0x00000510,0x00000144,0x000500a7,0x00000020,0x00000512,0x0000050f,0x00000511,0x000300f7, + 0x00000514,0x00000000,0x000400fa,0x00000512,0x00000513,0x00000514,0x000200f8,0x00000513, + 0x0004003d,0x00000027,0x00000515,0x000004fa,0x00050041,0x0000014f,0x00000516,0x0000014e, + 0x00000144,0x0004003d,0x00000011,0x00000517,0x00000516,0x0004007c,0x00000027,0x00000518, + 0x00000517,0x000500b1,0x00000020,0x00000519,0x00000515,0x00000518,0x000200f9,0x00000514, + 0x000200f8,0x00000514,0x000700f5,0x00000020,0x0000051a,0x00000512,0x0000048c,0x00000519, + 0x00000513,0x000300f7,0x0000051c,0x00000000,0x000400fa,0x0000051a,0x0000051b,0x0000051c, + 0x000200f8,0x0000051b,0x0004003d,0x00000027,0x0000051d,0x00000500,0x00050041,0x0000014f, + 0x0000051e,0x0000014e,0x00000125,0x0004003d,0x00000011,0x0000051f,0x0000051e,0x0004007c, + 0x00000027,0x00000520,0x0000051f,0x000500b1,0x00000020,0x00000521,0x0000051d,0x00000520, + 0x000200f9,0x0000051c,0x000200f8,0x0000051c,0x000700f5,0x00000020,0x00000522,0x0000051a, + 0x00000514,0x00000521,0x0000051b,0x000300f7,0x00000524,0x00000000,0x000400fa,0x00000522, + 0x00000523,0x00000524,0x000200f8,0x00000523,0x0004003d,0x00000027,0x00000529,0x00000500, + 0x0004007c,0x00000011,0x0000052a,0x00000529,0x00050041,0x0000014f,0x0000052b,0x0000014e, + 0x00000144,0x0004003d,0x00000011,0x0000052c,0x0000052b,0x00050084,0x00000011,0x0000052d, + 0x0000052a,0x0000052c,0x0004003d,0x00000027,0x0000052e,0x000004fa,0x0004007c,0x00000011, + 0x0000052f,0x0000052e,0x00050080,0x00000011,0x00000530,0x0000052d,0x0000052f,0x00050041, + 0x0000014f,0x00000531,0x0000014e,0x000001e1,0x0004003d,0x00000011,0x00000532,0x00000531, + 0x00050086,0x00000011,0x00000533,0x00000532,0x0000001b,0x00050084,0x00000011,0x00000534, + 0x00000530,0x00000533,0x0004003d,0x00000011,0x00000535,0x000001a7,0x00050084,0x00000011, + 0x00000536,0x00000535,0x0000001d,0x00050080,0x00000011,0x00000537,0x00000534,0x00000536, + 0x0004003d,0x00000011,0x00000538,0x000004f3,0x00050080,0x00000011,0x00000539,0x00000537, + 0x00000538,0x0004003d,0x00000011,0x0000053a,0x00000506,0x00050041,0x000004eb,0x0000053b, + 0x000004df,0x0000053a,0x0006003d,0x00000011,0x0000053c,0x0000053b,0x00000030,0x0000001d, + 0x0004003d,0x00000011,0x0000053d,0x00000506,0x00050080,0x00000011,0x0000053e,0x0000053d, + 0x0000004b,0x00050041,0x000004eb,0x0000053f,0x000004df,0x0000053e,0x0006003d,0x00000011, + 0x00000540,0x0000053f,0x00000030,0x0000001d,0x0004003d,0x00000011,0x00000541,0x00000506, + 0x00050080,0x00000011,0x00000542,0x00000541,0x0000001d,0x00050041,0x000004eb,0x00000543, + 0x000004df,0x00000542,0x0006003d,0x00000011,0x00000544,0x00000543,0x00000030,0x0000001d, + 0x0004003d,0x00000011,0x00000545,0x00000506,0x00050080,0x00000011,0x00000546,0x00000545, + 0x0000001a,0x00050041,0x000004eb,0x00000547,0x000004df,0x00000546,0x0006003d,0x00000011, + 0x00000548,0x00000547,0x00000030,0x0000001d,0x00070050,0x000002ba,0x00000549,0x0000053c, + 0x00000540,0x00000544,0x00000548,0x00060041,0x000002cd,0x0000054a,0x00000528,0x00000144, + 0x00000539,0x0003003e,0x0000054a,0x00000549,0x000200f9,0x00000524,0x000200f8,0x00000524, + 0x000100fd,0x00010038,0x00050036,0x00000009,0x0000000c,0x00000000,0x0000000a,0x00030037, + 0x00000008,0x0000000b,0x000200f8,0x0000000d,0x0004003b,0x00000008,0x00000032,0x00000007, + 0x0004003b,0x0000003c,0x0000003d,0x00000007,0x0004003b,0x00000042,0x00000043,0x00000007, + 0x0004003d,0x00000007,0x00000033,0x0000000b,0x0004003d,0x00000007,0x00000036,0x0000000b, + 0x0004009c,0x00000037,0x00000038,0x00000036,0x000600a9,0x00000007,0x00000039,0x00000038, + 0x00000035,0x00000033,0x0003003e,0x00000032,0x00000039,0x0004003d,0x00000007,0x0000003e, + 0x00000032,0x00040073,0x0000003b,0x0000003f,0x0000003e,0x0003003e,0x0000003d,0x0000003f, + 0x0004003d,0x0000003b,0x00000044,0x0000003d,0x0004007c,0x00000041,0x00000045,0x00000044, + 0x0003003e,0x00000043,0x00000045,0x00050041,0x00000047,0x00000048,0x00000043,0x00000046, + 0x0004003d,0x00000040,0x00000049,0x00000048,0x00040071,0x00000011,0x0000004a,0x00000049, + 0x00050041,0x00000047,0x0000004c,0x00000043,0x0000004b,0x0004003d,0x00000040,0x0000004d, + 0x0000004c,0x00040071,0x00000011,0x0000004e,0x0000004d,0x000500c4,0x00000011,0x00000050, + 0x0000004e,0x0000004f,0x000500c5,0x00000011,0x00000051,0x0000004a,0x00000050,0x00040071, + 0x00000009,0x00000052,0x00000051,0x000200fe,0x00000052,0x00010038,0x00050036,0x00000009, + 0x0000000f,0x00000000,0x0000000a,0x00030037,0x00000008,0x0000000e,0x000200f8,0x00000010, + 0x0004003b,0x0000003c,0x00000055,0x00000007,0x0004003b,0x00000042,0x00000058,0x00000007, + 0x0004003d,0x00000007,0x00000056,0x0000000e,0x00040073,0x0000003b,0x00000057,0x00000056, + 0x0003003e,0x00000055,0x00000057,0x0004003d,0x0000003b,0x00000059,0x00000055,0x0004007c, + 0x00000041,0x0000005a,0x00000059,0x0003003e,0x00000058,0x0000005a,0x00050041,0x00000047, + 0x0000005b,0x00000058,0x00000046,0x0004003d,0x00000040,0x0000005c,0x0000005b,0x00040071, + 0x00000011,0x0000005d,0x0000005c,0x00050041,0x00000047,0x0000005e,0x00000058,0x0000004b, + 0x0004003d,0x00000040,0x0000005f,0x0000005e,0x00040071,0x00000011,0x00000060,0x0000005f, + 0x000500c4,0x00000011,0x00000061,0x00000060,0x0000004f,0x000500c5,0x00000011,0x00000062, + 0x0000005d,0x00000061,0x00040071,0x00000009,0x00000063,0x00000062,0x000200fe,0x00000063, + 0x00010038,0x00050036,0x00000011,0x00000015,0x00000000,0x00000013,0x00030037,0x00000012, + 0x00000014,0x000200f8,0x00000016,0x0004003b,0x00000012,0x00000066,0x00000007,0x0004003b, + 0x00000012,0x0000006a,0x00000007,0x0004003d,0x00000011,0x00000067,0x00000014,0x000500c7, + 0x00000011,0x00000069,0x00000067,0x00000068,0x0003003e,0x00000066,0x00000069,0x0004003d, + 0x00000011,0x0000006b,0x00000014,0x000500c2,0x00000011,0x0000006c,0x0000006b,0x0000001a, + 0x0003003e,0x0000006a,0x0000006c,0x0004003d,0x00000011,0x0000006d,0x0000006a,0x000500c2, + 0x00000011,0x0000006e,0x0000006d,0x0000001d,0x00050084,0x00000011,0x0000006f,0x0000006e, + 0x0000001c,0x0004003d,0x00000011,0x00000070,0x00000066,0x000500c2,0x00000011,0x00000071, + 0x00000070,0x0000001d,0x00050084,0x00000011,0x00000072,0x00000071,0x0000001b,0x00050080, + 0x00000011,0x00000073,0x0000006f,0x00000072,0x0004003d,0x00000011,0x00000074,0x0000006a, + 0x000500c7,0x00000011,0x00000075,0x00000074,0x0000001a,0x00050084,0x00000011,0x00000077, + 0x00000075,0x00000076,0x00050080,0x00000011,0x00000078,0x00000073,0x00000077,0x0004003d, + 0x00000011,0x00000079,0x00000066,0x000500c7,0x00000011,0x0000007a,0x00000079,0x0000001a, + 0x00050080,0x00000011,0x0000007b,0x00000078,0x0000007a,0x000200fe,0x0000007b,0x00010038, + 0x00050036,0x00000011,0x00000018,0x00000000,0x00000013,0x00030037,0x00000012,0x00000017, + 0x000200f8,0x00000019,0x0004003b,0x00000080,0x00000081,0x00000007,0x0004003b,0x00000008, + 0x0000008a,0x00000007,0x0004003d,0x00000011,0x00000082,0x00000017,0x0004007c,0x00000007, + 0x00000083,0x00000082,0x00040073,0x0000007f,0x00000084,0x00000083,0x0008000c,0x0000007f, + 0x00000089,0x00000001,0x00000032,0x00000084,0x00000086,0x00000088,0x0003003e,0x00000081, + 0x00000089,0x0004003d,0x0000007f,0x0000008b,0x00000081,0x00040073,0x00000007,0x0000008c, + 0x0000008b,0x0008000c,0x00000007,0x00000091,0x00000001,0x0000002b,0x0000008c,0x0000008e, + 0x00000090,0x0003003e,0x0000008a,0x00000091,0x0004003d,0x00000007,0x00000092,0x0000008a, + 0x0004007c,0x00000011,0x00000093,0x00000092,0x000500c4,0x00000011,0x00000095,0x00000093, + 0x00000094,0x000500c7,0x00000011,0x00000097,0x00000095,0x00000096,0x000500c6,0x00000011, + 0x00000099,0x00000097,0x00000098,0x000200fe,0x00000099,0x00010038,0x00050036,0x00000002, + 0x00000025,0x00000000,0x00000021,0x00030037,0x0000001f,0x00000022,0x00030037,0x00000006, + 0x00000023,0x00030037,0x00000020,0x00000024,0x000200f8,0x00000026,0x0004003b,0x00000012, + 0x0000009c,0x00000007,0x0004003b,0x00000012,0x000000a4,0x00000007,0x0004003b,0x00000008, + 0x000000a7,0x00000007,0x0004003b,0x00000008,0x000000b2,0x00000007,0x0004003b,0x00000008, + 0x000000bc,0x00000007,0x0004003b,0x00000008,0x000000c6,0x00000007,0x0004003b,0x00000008, + 0x000000d1,0x00000007,0x0004003b,0x00000008,0x000000d5,0x00000007,0x0004003b,0x00000008, + 0x000000da,0x00000007,0x0004003b,0x00000008,0x000000de,0x00000007,0x0004003b,0x00000008, + 0x000000e3,0x00000007,0x0004003b,0x00000008,0x000000e7,0x00000007,0x0004003b,0x00000008, + 0x000000ec,0x00000007,0x0004003b,0x00000008,0x000000f0,0x00000007,0x0004003b,0x00000008, + 0x000000f5,0x00000007,0x0004003b,0x000000aa,0x000000f9,0x00000007,0x0004003b,0x000000aa, + 0x000000ff,0x00000007,0x0004003b,0x00000012,0x00000104,0x00000007,0x0004003b,0x000000aa, + 0x0000010c,0x00000007,0x0004003b,0x000000aa,0x00000114,0x00000007,0x0004003b,0x000000aa, + 0x00000118,0x00000007,0x0003003e,0x0000009c,0x00000046,0x000200f9,0x0000009d,0x000200f8, + 0x0000009d,0x000400f6,0x0000009f,0x000000a0,0x00000001,0x000200f9,0x000000a1,0x000200f8, + 0x000000a1,0x0004003d,0x00000011,0x000000a2,0x0000009c,0x000500b0,0x00000020,0x000000a3, + 0x000000a2,0x0000001d,0x000400fa,0x000000a3,0x0000009e,0x0000009f,0x000200f8,0x0000009e, + 0x0004003d,0x00000011,0x000000a5,0x0000009c,0x00050084,0x00000011,0x000000a6,0x0000004f, + 0x000000a5,0x0003003e,0x000000a4,0x000000a6,0x0004003d,0x00000011,0x000000a8,0x000000a4, + 0x00050080,0x00000011,0x000000a9,0x000000a8,0x00000046,0x00050041,0x000000aa,0x000000ab, + 0x00000022,0x000000a9,0x0004003d,0x00000006,0x000000ac,0x000000ab,0x0004003d,0x00000011, + 0x000000ad,0x000000a4,0x00050080,0x00000011,0x000000ae,0x000000ad,0x0000004b,0x00050041, + 0x000000aa,0x000000af,0x00000022,0x000000ae,0x0004003d,0x00000006,0x000000b0,0x000000af, + 0x00050050,0x00000007,0x000000b1,0x000000ac,0x000000b0,0x0003003e,0x000000a7,0x000000b1, + 0x0004003d,0x00000011,0x000000b3,0x000000a4,0x00050080,0x00000011,0x000000b4,0x000000b3, + 0x0000001d,0x00050041,0x000000aa,0x000000b5,0x00000022,0x000000b4,0x0004003d,0x00000006, + 0x000000b6,0x000000b5,0x0004003d,0x00000011,0x000000b7,0x000000a4,0x00050080,0x00000011, + 0x000000b8,0x000000b7,0x0000001a,0x00050041,0x000000aa,0x000000b9,0x00000022,0x000000b8, + 0x0004003d,0x00000006,0x000000ba,0x000000b9,0x00050050,0x00000007,0x000000bb,0x000000b6, + 0x000000ba,0x0003003e,0x000000b2,0x000000bb,0x0004003d,0x00000011,0x000000bd,0x000000a4, + 0x00050080,0x00000011,0x000000be,0x000000bd,0x00000076,0x00050041,0x000000aa,0x000000bf, + 0x00000022,0x000000be,0x0004003d,0x00000006,0x000000c0,0x000000bf,0x0004003d,0x00000011, + 0x000000c1,0x000000a4,0x00050080,0x00000011,0x000000c2,0x000000c1,0x00000094,0x00050041, + 0x000000aa,0x000000c3,0x00000022,0x000000c2,0x0004003d,0x00000006,0x000000c4,0x000000c3, + 0x00050050,0x00000007,0x000000c5,0x000000c0,0x000000c4,0x0003003e,0x000000bc,0x000000c5, + 0x0004003d,0x00000011,0x000000c7,0x000000a4,0x00050080,0x00000011,0x000000c9,0x000000c7, + 0x000000c8,0x00050041,0x000000aa,0x000000ca,0x00000022,0x000000c9,0x0004003d,0x00000006, + 0x000000cb,0x000000ca,0x0004003d,0x00000011,0x000000cc,0x000000a4,0x00050080,0x00000011, + 0x000000cd,0x000000cc,0x00000068,0x00050041,0x000000aa,0x000000ce,0x00000022,0x000000cd, + 0x0004003d,0x00000006,0x000000cf,0x000000ce,0x00050050,0x00000007,0x000000d0,0x000000cb, + 0x000000cf,0x0003003e,0x000000c6,0x000000d0,0x0004003d,0x00000007,0x000000d2,0x000000bc, + 0x0004003d,0x00000007,0x000000d3,0x000000bc,0x00050085,0x00000007,0x000000d4,0x000000d2, + 0x000000d3,0x0003003e,0x000000d1,0x000000d4,0x0004003d,0x00000007,0x000000d6,0x000000a7, + 0x0004003d,0x00000007,0x000000d7,0x000000a7,0x0004003d,0x00000007,0x000000d8,0x000000d1, + 0x0008000c,0x00000007,0x000000d9,0x00000001,0x00000032,0x000000d6,0x000000d7,0x000000d8, + 0x0003003e,0x000000d5,0x000000d9,0x0004003d,0x00000007,0x000000db,0x000000c6,0x0004003d, + 0x00000007,0x000000dc,0x000000c6,0x00050085,0x00000007,0x000000dd,0x000000db,0x000000dc, + 0x0003003e,0x000000da,0x000000dd,0x0004003d,0x00000007,0x000000df,0x000000b2,0x0004003d, + 0x00000007,0x000000e0,0x000000b2,0x0004003d,0x00000007,0x000000e1,0x000000da,0x0008000c, + 0x00000007,0x000000e2,0x00000001,0x00000032,0x000000df,0x000000e0,0x000000e1,0x0003003e, + 0x000000de,0x000000e2,0x0004003d,0x00000007,0x000000e4,0x000000d5,0x0004003d,0x00000007, + 0x000000e5,0x000000de,0x00050081,0x00000007,0x000000e6,0x000000e4,0x000000e5,0x0003003e, + 0x000000e3,0x000000e6,0x0004003d,0x00000007,0x000000e8,0x000000e3,0x0004007c,0x00000011, + 0x000000e9,0x000000e8,0x0006015a,0x00000011,0x000000ea,0x0000001a,0x000000e9,0x0000001d, + 0x0004007c,0x00000007,0x000000eb,0x000000ea,0x0003003e,0x000000e7,0x000000eb,0x0004003d, + 0x00000007,0x000000ed,0x000000e3,0x0004003d,0x00000007,0x000000ee,0x000000e7,0x00050081, + 0x00000007,0x000000ef,0x000000ed,0x000000ee,0x0003003e,0x000000ec,0x000000ef,0x0004003d, + 0x00000007,0x000000f1,0x000000ec,0x0004007c,0x00000011,0x000000f2,0x000000f1,0x0006015a, + 0x00000011,0x000000f3,0x0000001a,0x000000f2,0x0000004b,0x0004007c,0x00000007,0x000000f4, + 0x000000f3,0x0003003e,0x000000f0,0x000000f4,0x0004003d,0x00000007,0x000000f6,0x000000ec, + 0x0004003d,0x00000007,0x000000f7,0x000000f0,0x00050081,0x00000007,0x000000f8,0x000000f6, + 0x000000f7,0x0003003e,0x000000f5,0x000000f8,0x00050041,0x000000aa,0x000000fa,0x000000f5, + 0x00000046,0x0004003d,0x00000006,0x000000fb,0x000000fa,0x00050041,0x000000aa,0x000000fc, + 0x000000f5,0x0000004b,0x0004003d,0x00000006,0x000000fd,0x000000fc,0x00050081,0x00000006, + 0x000000fe,0x000000fb,0x000000fd,0x0003003e,0x000000f9,0x000000fe,0x0004003d,0x00000006, + 0x00000100,0x000000f9,0x00040073,0x0000007e,0x00000101,0x00000100,0x0006000c,0x0000007e, + 0x00000102,0x00000001,0x00000020,0x00000101,0x00040073,0x00000006,0x00000103,0x00000102, + 0x0003003e,0x000000ff,0x00000103,0x0003003e,0x00000104,0x00000046,0x000200f9,0x00000105, + 0x000200f8,0x00000105,0x000400f6,0x00000107,0x00000108,0x00000001,0x000200f9,0x00000109, + 0x000200f8,0x00000109,0x0004003d,0x00000011,0x0000010a,0x00000104,0x000500b0,0x00000020, + 0x0000010b,0x0000010a,0x0000004f,0x000400fa,0x0000010b,0x00000106,0x00000107,0x000200f8, + 0x00000106,0x0004003d,0x00000011,0x0000010d,0x000000a4,0x0004003d,0x00000011,0x0000010e, + 0x00000104,0x00050080,0x00000011,0x0000010f,0x0000010d,0x0000010e,0x00050041,0x000000aa, + 0x00000110,0x00000022,0x0000010f,0x0004003d,0x00000006,0x00000111,0x00000110,0x0004003d, + 0x00000006,0x00000112,0x000000ff,0x00050085,0x00000006,0x00000113,0x00000111,0x00000112, + 0x0003003e,0x0000010c,0x00000113,0x0004003d,0x00000006,0x00000115,0x0000010c,0x0003003e, + 0x00000114,0x00000115,0x000300f7,0x00000117,0x00000000,0x000400fa,0x00000024,0x00000116, + 0x00000117,0x000200f8,0x00000116,0x0004003d,0x00000006,0x00000119,0x0000010c,0x00050085, + 0x00000006,0x0000011a,0x00000119,0x00000023,0x0003003e,0x00000118,0x0000011a,0x0004003d, + 0x00000006,0x0000011b,0x00000118,0x0003003e,0x00000114,0x0000011b,0x000200f9,0x00000117, + 0x000200f8,0x00000117,0x0004003d,0x00000011,0x0000011c,0x000000a4,0x0004003d,0x00000011, + 0x0000011d,0x00000104,0x00050080,0x00000011,0x0000011e,0x0000011c,0x0000011d,0x0004003d, + 0x00000006,0x0000011f,0x00000114,0x0004009c,0x00000020,0x00000120,0x0000011f,0x0004003d, + 0x00000006,0x00000121,0x00000114,0x000600a9,0x00000006,0x00000122,0x00000120,0x00000034, + 0x00000121,0x00050041,0x000000aa,0x00000123,0x00000022,0x0000011e,0x0003003e,0x00000123, + 0x00000122,0x000200f9,0x00000108,0x000200f8,0x00000108,0x0004003d,0x00000011,0x00000124, + 0x00000104,0x00050080,0x00000011,0x00000126,0x00000124,0x00000125,0x0003003e,0x00000104, + 0x00000126,0x000200f9,0x00000105,0x000200f8,0x00000107,0x000200f9,0x000000a0,0x000200f8, + 0x000000a0,0x0004003d,0x00000011,0x00000127,0x0000009c,0x00050080,0x00000011,0x00000128, + 0x00000127,0x00000125,0x0003003e,0x0000009c,0x00000128,0x000200f9,0x0000009d,0x000200f8, + 0x0000009f,0x000100fd,0x00010038,0x00050036,0x00000002,0x00000030,0x00000000,0x00000028, + 0x00030037,0x0000001e,0x00000029,0x00030037,0x00000011,0x0000002a,0x00030037,0x00000011, + 0x0000002b,0x00030037,0x00000011,0x0000002c,0x00030037,0x00000011,0x0000002d,0x00030037, + 0x00000027,0x0000002e,0x00030037,0x00000027,0x0000002f,0x000200f8,0x00000031,0x0004003b, + 0x00000012,0x00000129,0x00000007,0x0004003b,0x00000012,0x00000131,0x00000007,0x0004003b, + 0x00000136,0x00000137,0x00000007,0x0004003b,0x00000136,0x0000013c,0x00000007,0x0004003b, + 0x00000141,0x00000142,0x00000007,0x0004003b,0x00000012,0x0000015d,0x00000007,0x0004003b, + 0x00000012,0x0000015e,0x00000007,0x0004003b,0x00000012,0x00000163,0x00000007,0x0004003b, + 0x0000016b,0x0000016c,0x00000007,0x0004003b,0x0000001f,0x00000172,0x00000007,0x0004003b, + 0x0000001f,0x0000017b,0x00000007,0x0004003b,0x00000008,0x0000017f,0x00000007,0x0003003e, + 0x00000129,0x00000046,0x000200f9,0x0000012a,0x000200f8,0x0000012a,0x000400f6,0x0000012c, + 0x0000012d,0x00000001,0x000200f9,0x0000012e,0x000200f8,0x0000012e,0x0004003d,0x00000011, + 0x0000012f,0x00000129,0x000500b0,0x00000020,0x00000130,0x0000012f,0x0000001d,0x000400fa, + 0x00000130,0x0000012b,0x0000012c,0x000200f8,0x0000012b,0x00050080,0x00000011,0x00000132, + 0x0000002b,0x0000002d,0x0004003d,0x00000011,0x00000133,0x00000129,0x00050084,0x00000011, + 0x00000134,0x0000004f,0x00000133,0x00050080,0x00000011,0x00000135,0x00000132,0x00000134, + 0x0003003e,0x00000131,0x00000135,0x0004003d,0x00000011,0x00000138,0x00000131,0x000500c7, + 0x00000011,0x00000139,0x00000138,0x00000068,0x0004007c,0x00000027,0x0000013a,0x00000139, + 0x00050080,0x00000027,0x0000013b,0x0000002e,0x0000013a,0x0003003e,0x00000137,0x0000013b, + 0x0004003d,0x00000011,0x0000013d,0x00000131,0x000500c2,0x00000011,0x0000013e,0x0000013d, + 0x0000001a,0x0004007c,0x00000027,0x0000013f,0x0000013e,0x00050080,0x00000027,0x00000140, + 0x0000002f,0x0000013f,0x0003003e,0x0000013c,0x00000140,0x0004003d,0x00000027,0x00000143, + 0x00000137,0x000500af,0x00000020,0x00000145,0x00000143,0x00000144,0x0004003d,0x00000027, + 0x00000146,0x0000013c,0x000500af,0x00000020,0x00000147,0x00000146,0x00000144,0x000500a7, + 0x00000020,0x00000148,0x00000145,0x00000147,0x000300f7,0x0000014a,0x00000000,0x000400fa, + 0x00000148,0x00000149,0x0000014a,0x000200f8,0x00000149,0x0004003d,0x00000027,0x0000014b, + 0x00000137,0x00050041,0x0000014f,0x00000150,0x0000014e,0x00000144,0x0004003d,0x00000011, + 0x00000151,0x00000150,0x0004007c,0x00000027,0x00000152,0x00000151,0x000500b1,0x00000020, + 0x00000153,0x0000014b,0x00000152,0x000200f9,0x0000014a,0x000200f8,0x0000014a,0x000700f5, + 0x00000020,0x00000154,0x00000148,0x0000012b,0x00000153,0x00000149,0x000300f7,0x00000156, + 0x00000000,0x000400fa,0x00000154,0x00000155,0x00000156,0x000200f8,0x00000155,0x0004003d, + 0x00000027,0x00000157,0x0000013c,0x00050041,0x0000014f,0x00000158,0x0000014e,0x00000125, + 0x0004003d,0x00000011,0x00000159,0x00000158,0x0004007c,0x00000027,0x0000015a,0x00000159, + 0x000500b1,0x00000020,0x0000015b,0x00000157,0x0000015a,0x000200f9,0x00000156,0x000200f8, + 0x00000156,0x000700f5,0x00000020,0x0000015c,0x00000154,0x0000014a,0x0000015b,0x00000155, + 0x0003003e,0x00000142,0x0000015c,0x0004003d,0x00000011,0x0000015f,0x00000131,0x0003003e, + 0x0000015e,0x0000015f,0x00050039,0x00000011,0x00000160,0x00000015,0x0000015e,0x00050084, + 0x00000011,0x00000161,0x00000160,0x0000001b,0x00050080,0x00000011,0x00000162,0x0000002a, + 0x00000161,0x0003003e,0x0000015d,0x00000162,0x0003003e,0x00000163,0x00000046,0x000200f9, + 0x00000164,0x000200f8,0x00000164,0x000400f6,0x00000166,0x00000167,0x00000001,0x000200f9, + 0x00000168,0x000200f8,0x00000168,0x0004003d,0x00000011,0x00000169,0x00000163,0x000500b0, + 0x00000020,0x0000016a,0x00000169,0x00000076,0x000400fa,0x0000016a,0x00000165,0x00000166, + 0x000200f8,0x00000165,0x0004003d,0x00000011,0x0000016d,0x00000129,0x00050084,0x00000011, + 0x0000016e,0x0000004f,0x0000016d,0x0004003d,0x00000011,0x0000016f,0x00000163,0x00050084, + 0x00000011,0x00000170,0x0000001d,0x0000016f,0x00050080,0x00000011,0x00000171,0x0000016e, + 0x00000170,0x0003003e,0x00000172,0x00000029,0x00050041,0x000000aa,0x00000173,0x00000172, + 0x00000171,0x0004003d,0x00000006,0x00000174,0x00000173,0x0004003d,0x00000011,0x00000175, + 0x00000129,0x00050084,0x00000011,0x00000176,0x0000004f,0x00000175,0x0004003d,0x00000011, + 0x00000177,0x00000163,0x00050084,0x00000011,0x00000178,0x0000001d,0x00000177,0x00050080, + 0x00000011,0x00000179,0x00000176,0x00000178,0x00050080,0x00000011,0x0000017a,0x00000179, + 0x0000004b,0x0003003e,0x0000017b,0x00000029,0x00050041,0x000000aa,0x0000017c,0x0000017b, + 0x0000017a,0x0004003d,0x00000006,0x0000017d,0x0000017c,0x00050050,0x00000007,0x0000017e, + 0x00000174,0x0000017d,0x0003003e,0x0000017f,0x0000017e,0x00050039,0x00000009,0x00000180, + 0x0000000c,0x0000017f,0x0003003e,0x0000016c,0x00000180,0x0004003d,0x00000011,0x00000185, + 0x0000015d,0x0004003d,0x00000011,0x00000186,0x00000163,0x00050084,0x00000011,0x00000187, + 0x00000076,0x00000186,0x00050080,0x00000011,0x00000188,0x00000185,0x00000187,0x00050080, + 0x00000011,0x00000189,0x00000188,0x0000002c,0x0004003d,0x00000020,0x0000018a,0x00000142, + 0x0004003d,0x00000009,0x0000018b,0x0000016c,0x000600a9,0x00000009,0x0000018d,0x0000018a, + 0x0000018b,0x0000018c,0x00050041,0x0000018e,0x0000018f,0x00000184,0x00000189,0x0005003e, + 0x0000018f,0x0000018d,0x00000028,0x0000001d,0x000200f9,0x00000167,0x000200f8,0x00000167, + 0x0004003d,0x00000011,0x00000190,0x00000163,0x00050080,0x00000011,0x00000191,0x00000190, + 0x00000125,0x0003003e,0x00000163,0x00000191,0x000200f9,0x00000164,0x000200f8,0x00000166, + 0x000200f9,0x0000012d,0x000200f8,0x0000012d,0x0004003d,0x00000011,0x00000192,0x00000129, + 0x00050080,0x00000011,0x00000193,0x00000192,0x00000125,0x0003003e,0x00000129,0x00000193, + 0x000200f9,0x0000012a,0x000200f8,0x0000012c,0x000100fd,0x00010038, +}; +inline constexpr uint32_t k_gemm_mlp[] = { + 0x07230203,0x00010600,0x0008000b,0x000002ca,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x00000027,0x00020011,0x0000003d,0x00020011, + 0x00000041,0x00020011,0x00001074,0x00020011,0x00001075,0x00020011,0x000014e1,0x00020011, + 0x00001537,0x00020011,0x00001538,0x00020011,0x00001786,0x0005000a,0x5f565053,0x5f545845, + 0x616f6c66,0x00003874,0x0008000a,0x5f565053,0x5f52484b,0x706f6f63,0x74617265,0x5f657669, + 0x7274616d,0x00007869,0x0008000a,0x5f565053,0x635f564e,0x65706f6f,0x69746172,0x6d5f6576, + 0x69727461,0x00003278,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000, + 0x0003000e,0x00000000,0x00000003,0x0010000f,0x00000005,0x00000004,0x6e69616d,0x00000000, + 0x00000054,0x00000059,0x0000005c,0x00000076,0x000000e7,0x000000f6,0x00000120,0x0000015f, + 0x00000207,0x00000270,0x000002a3,0x00060010,0x00000004,0x00000011,0x00000080,0x00000001, + 0x00000001,0x00030003,0x00000002,0x000001cc,0x00090004,0x455f4c47,0x635f5458,0x72746e6f, + 0x665f6c6f,0x5f776f6c,0x72747461,0x74756269,0x00007365,0x00060004,0x455f4c47,0x665f5458, + 0x74616f6c,0x6d34655f,0x00000033,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x36315f72, + 0x5f746962,0x726f7473,0x00656761,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x62385f72, + 0x735f7469,0x61726f74,0x00006567,0x000b0004,0x455f4c47,0x735f5458,0x65646168,0x78655f72, + 0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004,0x475f4c47, + 0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576, + 0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669, + 0x00080004,0x4b5f4c47,0x635f5248,0x65706f6f,0x69746172,0x6d5f6576,0x69727461,0x00000078, + 0x00090004,0x4b5f4c47,0x6d5f5248,0x726f6d65,0x63735f79,0x5f65706f,0x616d6573,0x6369746e, + 0x00000073,0x00090004,0x4b5f4c47,0x735f5248,0x65646168,0x75735f72,0x6f726762,0x625f7075, + 0x63697361,0x00000000,0x00090004,0x4b5f4c47,0x735f5248,0x65646168,0x75735f72,0x6f726762, + 0x735f7075,0x66667568,0x0000656c,0x00080004,0x4e5f4c47,0x6f635f56,0x7265706f,0x76697461, + 0x616d5f65,0x78697274,0x00000032,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005, + 0x0000000a,0x756c6973,0x666c6148,0x36316628,0x00003b31,0x00040005,0x00000009,0x756c6176, + 0x00000065,0x00070005,0x00000011,0x336d3465,0x72696150,0x74736146,0x31667628,0x003b3236, + 0x00040005,0x00000010,0x756c6176,0x00000065,0x00080005,0x00000018,0x756c6973,0x6d656c45, + 0x28746e65,0x753b3175,0x31663b31,0x003b3136,0x00030005,0x00000015,0x00776f72,0x00030005, + 0x00000016,0x006c6f63,0x00040005,0x00000017,0x756c6176,0x00000065,0x00040005,0x0000001a, + 0x6e756f62,0x00646564,0x00040005,0x0000001f,0x656e6e69,0x00000072,0x00050005,0x00000025, + 0x796c6f70,0x696d6f6e,0x00006c61,0x00040005,0x0000002a,0x75736572,0x0000746c,0x00050005, + 0x00000034,0x766e6f63,0x65747265,0x00000064,0x00040005,0x0000003a,0x65646f63,0x00000073, + 0x00040005,0x0000004c,0x61726170,0x0000006d,0x00040005,0x00000051,0x65726874,0x00006461, + 0x00080005,0x00000054,0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163,0x44496e6f,0x00000000, + 0x00050005,0x00000058,0x67627573,0x70756f72,0x00000000,0x00060005,0x00000059,0x535f6c67, + 0x72676275,0x4970756f,0x00000044,0x00040005,0x0000005b,0x63746162,0x00000068,0x00060005, + 0x0000005c,0x575f6c67,0x476b726f,0x70756f72,0x00004449,0x00050005,0x0000005f,0x636f6c62, + 0x776f526b,0x00000000,0x00040005,0x0000006a,0x42776f72,0x00657361,0x00050005,0x00000072, + 0x73776f72,0x696c6156,0x00000064,0x00040005,0x00000074,0x68737550,0x00000000,0x00050006, + 0x00000074,0x00000000,0x73776f72,0x00000000,0x00060006,0x00000074,0x00000001,0x75706e69, + 0x72745374,0x00656469,0x00070006,0x00000074,0x00000002,0x75706e69,0x6c6f4374,0x426e6d75, + 0x00657361,0x00070006,0x00000074,0x00000003,0x7074756f,0x74537475,0x65646972,0x00000000, + 0x00080006,0x00000074,0x00000004,0x7074756f,0x6f437475,0x6e6d756c,0x7366664f,0x00007465, + 0x00050006,0x00000074,0x00000005,0x63746162,0x00736568,0x00030005,0x00000076,0x00006370, + 0x00040005,0x0000007d,0x776f5261,0x00000000,0x00040005,0x00000080,0x6c614861,0x00000066, + 0x00050005,0x00000083,0x6c6f4361,0x426e6d75,0x00657361,0x00040005,0x00000087,0x47414c46, + 0x00000053,0x00030005,0x0000008f,0x0000004b,0x00040005,0x00000093,0x646e4961,0x00007865, + 0x00040005,0x000000a4,0x61423177,0x00686374,0x00040005,0x000000a7,0x6574536b,0x00007370, + 0x00040005,0x000000a9,0x44444948,0x00004e45,0x00040005,0x000000ac,0x61423277,0x00686374, + 0x00040005,0x000000ae,0x54554f4e,0x00000000,0x00040005,0x000000b5,0x32636361,0x00000000, + 0x00040005,0x000000b8,0x6e756863,0x0000006b,0x00040005,0x000000c4,0x64646968,0x00006e65, + 0x00050005,0x000000c6,0x6e756863,0x726f576b,0x00000064,0x00030005,0x000000ca,0x00000064, + 0x00040005,0x000000d1,0x54504544,0x00000048,0x00040005,0x000000d7,0x656c6974,0x00000000, + 0x00030005,0x000000e2,0x00006172,0x00040005,0x000000e5,0x75706e49,0x00004174,0x00040006, + 0x000000e5,0x00000000,0x00003461,0x00030005,0x000000e7,0x00000000,0x00030005,0x000000f1, + 0x00306272,0x00050005,0x000000f4,0x67696557,0x4f737468,0x0000656e,0x00040006,0x000000f4, + 0x00000000,0x00763177,0x00030005,0x000000f6,0x00000000,0x00030005,0x000000fd,0x00316272, + 0x00030005,0x00000108,0x00000069,0x00030005,0x00000112,0x00786469,0x00030005,0x0000011b, + 0x00327772,0x00050005,0x0000011e,0x67696557,0x54737468,0x00006f77,0x00040006,0x0000011e, + 0x00000000,0x00763277,0x00030005,0x00000120,0x00000000,0x00040005,0x00000133,0x65736162, + 0x00000000,0x00030005,0x0000013b,0x00000064,0x00030005,0x00000143,0x00000073,0x00030005, + 0x0000014b,0x00667562,0x00040005,0x0000015f,0x67617473,0x00000065,0x00040005,0x0000018c, + 0x656c6974,0x00000000,0x00030005,0x000001b2,0x0000616d,0x00030005,0x000001c1,0x0000626d, + 0x00050005,0x000001d4,0x64646968,0x34456e65,0x00000000,0x00030005,0x000001d7,0x00000069, + 0x00030005,0x000001e1,0x00786469,0x00030005,0x000001f8,0x00003277,0x00040005,0x00000206, + 0x656e616c,0x00000000,0x00080005,0x00000207,0x535f6c67,0x72676275,0x4970756f,0x636f766e, + 0x6f697461,0x0044496e,0x00030005,0x00000209,0x00000067,0x00030005,0x0000020c,0x00000074, + 0x00050005,0x0000020f,0x656c6974,0x65736142,0x00000000,0x00050005,0x00000213,0x57776f72, + 0x7364726f,0x00000000,0x00030005,0x00000215,0x0000006a,0x00030005,0x0000021e,0x00003076, + 0x00030005,0x00000229,0x00003176,0x00030005,0x00000238,0x00003063,0x00040005,0x0000023f, + 0x61726170,0x0000006d,0x00030005,0x00000242,0x00003163,0x00040005,0x00000247,0x61726170, + 0x0000006d,0x00030005,0x0000024a,0x0064646f,0x00040005,0x0000024e,0x76636572,0x00000000, + 0x00040005,0x00000254,0x64726f77,0x00000000,0x00030005,0x00000263,0x00776f72,0x00040005, + 0x00000270,0x67617473,0x00323365,0x00030005,0x00000282,0x00000069,0x00030005,0x0000028b, + 0x00000077,0x00030005,0x00000290,0x00000072,0x00030005,0x00000294,0x00007763,0x00040005, + 0x00000298,0x65736162,0x00000000,0x00050005,0x000002a1,0x7074754f,0x34457475,0x00000000, + 0x00050006,0x000002a1,0x00000000,0x3874756f,0x00363178,0x00030005,0x000002a3,0x00000000, + 0x00030047,0x0000002d,0x0000002a,0x00030047,0x00000036,0x00001078,0x00040047,0x00000054, + 0x0000000b,0x0000001b,0x00040047,0x00000059,0x0000000b,0x00000028,0x00040047,0x0000005c, + 0x0000000b,0x0000001a,0x00030047,0x00000074,0x00000002,0x00050048,0x00000074,0x00000000, + 0x00000023,0x00000000,0x00050048,0x00000074,0x00000001,0x00000023,0x00000004,0x00050048, + 0x00000074,0x00000002,0x00000023,0x00000008,0x00050048,0x00000074,0x00000003,0x00000023, + 0x0000000c,0x00050048,0x00000074,0x00000004,0x00000023,0x00000010,0x00050048,0x00000074, + 0x00000005,0x00000023,0x00000014,0x00040047,0x00000087,0x00000001,0x00000003,0x00040047, + 0x0000008f,0x00000001,0x00000000,0x00040047,0x000000a9,0x00000001,0x00000001,0x00040047, + 0x000000ae,0x00000001,0x00000002,0x00040047,0x000000d1,0x00000001,0x00000005,0x00040047, + 0x000000e4,0x00000006,0x00000010,0x00030047,0x000000e5,0x00000002,0x00040048,0x000000e5, + 0x00000000,0x00000018,0x00050048,0x000000e5,0x00000000,0x00000023,0x00000000,0x00030047, + 0x000000e7,0x00000018,0x00040047,0x000000e7,0x00000021,0x00000000,0x00040047,0x000000e7, + 0x00000022,0x00000000,0x00040047,0x000000f3,0x00000006,0x00000010,0x00030047,0x000000f4, + 0x00000002,0x00040048,0x000000f4,0x00000000,0x00000018,0x00050048,0x000000f4,0x00000000, + 0x00000023,0x00000000,0x00030047,0x000000f6,0x00000018,0x00040047,0x000000f6,0x00000021, + 0x00000001,0x00040047,0x000000f6,0x00000022,0x00000000,0x00040047,0x0000011d,0x00000006, + 0x00000010,0x00030047,0x0000011e,0x00000002,0x00040048,0x0000011e,0x00000000,0x00000018, + 0x00050048,0x0000011e,0x00000000,0x00000023,0x00000000,0x00030047,0x00000120,0x00000018, + 0x00040047,0x00000120,0x00000021,0x00000002,0x00040047,0x00000120,0x00000022,0x00000000, + 0x00030047,0x00000207,0x00000000,0x00040047,0x00000207,0x0000000b,0x00000029,0x00030047, + 0x00000208,0x00000000,0x00040047,0x000002a0,0x00000006,0x00000010,0x00030047,0x000002a1, + 0x00000002,0x00040048,0x000002a1,0x00000000,0x00000019,0x00050048,0x000002a1,0x00000000, + 0x00000023,0x00000000,0x00030047,0x000002a3,0x00000019,0x00040047,0x000002a3,0x00000021, + 0x00000005,0x00040047,0x000002a3,0x00000022,0x00000000,0x00020013,0x00000002,0x00030021, + 0x00000003,0x00000002,0x00030016,0x00000006,0x00000010,0x00040020,0x00000007,0x00000007, + 0x00000006,0x00040021,0x00000008,0x00000006,0x00000007,0x00040017,0x0000000c,0x00000006, + 0x00000002,0x00040020,0x0000000d,0x00000007,0x0000000c,0x00040015,0x0000000e,0x00000010, + 0x00000000,0x00040021,0x0000000f,0x0000000e,0x0000000d,0x00040015,0x00000013,0x00000020, + 0x00000000,0x00060021,0x00000014,0x00000006,0x00000013,0x00000013,0x00000006,0x0004002b, + 0x00000006,0x0000001c,0x0000c400,0x0004002b,0x00000006,0x0000001d,0x00004400,0x0004002b, + 0x00000006,0x00000020,0x0000ab28,0x0004002b,0x00000006,0x00000023,0x00003728,0x0004002b, + 0x00000006,0x00000028,0x00003b28,0x00040016,0x00000031,0x00000008,0x00001076,0x00040017, + 0x00000032,0x00000031,0x00000002,0x00040020,0x00000033,0x00000007,0x00000032,0x00040015, + 0x00000037,0x00000008,0x00000000,0x00040017,0x00000038,0x00000037,0x00000002,0x00040020, + 0x00000039,0x00000007,0x00000038,0x0004002b,0x00000013,0x0000003d,0x00000000,0x00040020, + 0x0000003e,0x00000007,0x00000037,0x0004002b,0x00000013,0x00000042,0x00000001,0x0004002b, + 0x00000013,0x00000046,0x00000008,0x00040020,0x00000050,0x00000007,0x00000013,0x00040017, + 0x00000052,0x00000013,0x00000003,0x00040020,0x00000053,0x00000001,0x00000052,0x0004003b, + 0x00000053,0x00000054,0x00000001,0x00040020,0x00000055,0x00000001,0x00000013,0x0004003b, + 0x00000055,0x00000059,0x00000001,0x0004003b,0x00000053,0x0000005c,0x00000001,0x0004002b, + 0x00000013,0x00000062,0x00000002,0x0004002b,0x00000013,0x00000065,0x0000ffff,0x0004002b, + 0x00000013,0x00000068,0x00000040,0x0004002b,0x00000013,0x0000006d,0x00000010,0x00020014, + 0x00000070,0x00040020,0x00000071,0x00000007,0x00000070,0x0008001e,0x00000074,0x00000013, + 0x00000013,0x00000013,0x00000013,0x00000013,0x00000013,0x00040020,0x00000075,0x00000009, + 0x00000074,0x0004003b,0x00000075,0x00000076,0x00000009,0x00040015,0x00000077,0x00000020, + 0x00000001,0x0004002b,0x00000077,0x00000078,0x00000000,0x00040020,0x00000079,0x00000009, + 0x00000013,0x0004002b,0x00000077,0x00000084,0x00000002,0x00040032,0x00000013,0x00000087, + 0x00000000,0x00060034,0x00000013,0x00000088,0x000000c7,0x00000087,0x00000042,0x00060034, + 0x00000070,0x00000089,0x000000ab,0x00000088,0x0000003d,0x00040032,0x00000013,0x0000008f, + 0x00000040,0x0004002b,0x00000077,0x0000009b,0x00000001,0x0004002b,0x00000013,0x000000a6, + 0x00000020,0x00060034,0x00000013,0x000000a7,0x00000086,0x0000008f,0x000000a6,0x00040032, + 0x00000013,0x000000a9,0x00000080,0x00040032,0x00000013,0x000000ae,0x00000020,0x0004002b, + 0x00000013,0x000000b2,0x00000003,0x00071168,0x000000b3,0x00000006,0x000000b2,0x0000006d, + 0x000000ae,0x00000062,0x00040020,0x000000b4,0x00000007,0x000000b3,0x0004002b,0x00000006, + 0x000000b6,0x00000000,0x0004002c,0x000000b3,0x000000b7,0x000000b6,0x0004002b,0x00000013, + 0x000000bf,0x00000080,0x00060034,0x00000013,0x000000c0,0x00000086,0x000000a9,0x000000bf, + 0x00071168,0x000000c2,0x00000006,0x000000b2,0x0000006d,0x000000bf,0x00000062,0x00040020, + 0x000000c3,0x00000007,0x000000c2,0x0004002c,0x000000c2,0x000000c5,0x000000b6,0x00040032, + 0x00000013,0x000000d1,0x00000002,0x00040017,0x000000df,0x00000013,0x00000004,0x0004001c, + 0x000000e0,0x000000df,0x000000d1,0x00040020,0x000000e1,0x00000007,0x000000e0,0x0003001d, + 0x000000e4,0x000000df,0x0003001e,0x000000e5,0x000000e4,0x00040020,0x000000e6,0x0000000c, + 0x000000e5,0x0004003b,0x000000e6,0x000000e7,0x0000000c,0x00040020,0x000000ec,0x0000000c, + 0x000000df,0x00040020,0x000000ef,0x00000007,0x000000df,0x0003001d,0x000000f3,0x000000df, + 0x0003001e,0x000000f4,0x000000f3,0x00040020,0x000000f5,0x0000000c,0x000000f4,0x0004003b, + 0x000000f5,0x000000f6,0x0000000c,0x00060034,0x00000013,0x0000010f,0x00000084,0x000000ae, + 0x00000046,0x00060034,0x00000013,0x00000110,0x00000086,0x0000010f,0x000000bf,0x00060034, + 0x00000013,0x00000117,0x00000084,0x000000ae,0x00000046,0x00060034,0x00000013,0x00000118, + 0x00000086,0x00000117,0x000000bf,0x0004001c,0x00000119,0x000000df,0x00000118,0x00040020, + 0x0000011a,0x00000007,0x00000119,0x0003001d,0x0000011d,0x000000df,0x0003001e,0x0000011e, + 0x0000011d,0x00040020,0x0000011f,0x0000000c,0x0000011e,0x0004003b,0x0000011f,0x00000120, + 0x0000000c,0x0004002b,0x00000013,0x0000012b,0x00000007,0x0003002a,0x00000070,0x0000014c, + 0x0004002b,0x00000013,0x00000153,0x00000240,0x0004002b,0x00000013,0x0000015b,0x00000108, + 0x0004002b,0x00000013,0x0000015c,0x00000480,0x0004001c,0x0000015d,0x000000df,0x0000015c, + 0x00040020,0x0000015e,0x00000004,0x0000015d,0x0004003b,0x0000015e,0x0000015f,0x00000004, + 0x00040020,0x00000169,0x00000004,0x000000df,0x0004002b,0x00000013,0x0000016c,0x000000c0, + 0x00071168,0x000001b0,0x00000031,0x000000b2,0x0000006d,0x000000a6,0x0000003d,0x00040020, + 0x000001b1,0x00000007,0x000001b0,0x00071168,0x000001bf,0x00000031,0x000000b2,0x000000a6, + 0x000000bf,0x00000042,0x00040020,0x000001c0,0x00000007,0x000001bf,0x00071168,0x000001d2, + 0x00000031,0x000000b2,0x0000006d,0x000000bf,0x0000003d,0x00040020,0x000001d3,0x00000007, + 0x000001d2,0x00060034,0x00000013,0x000001de,0x00000084,0x000000ae,0x00000046,0x00060034, + 0x00000013,0x000001df,0x00000086,0x000001de,0x000000bf,0x0004002b,0x00000013,0x000001e8, + 0x00000009,0x00071168,0x000001f6,0x00000031,0x000000b2,0x000000bf,0x000000ae,0x00000042, + 0x00040020,0x000001f7,0x00000007,0x000001f6,0x0004003b,0x00000055,0x00000207,0x00000001, + 0x0004002b,0x00000013,0x00000212,0x00000004,0x00060034,0x00000013,0x00000213,0x00000086, + 0x000000ae,0x00000212,0x00060034,0x00000013,0x0000021c,0x00000086,0x000000ae,0x00000046, + 0x00060034,0x00000013,0x0000022a,0x00000086,0x000000ae,0x00000212,0x00060034,0x00000013, + 0x00000230,0x00000086,0x000000ae,0x00000212,0x0005002c,0x0000000c,0x0000023a,0x000000b6, + 0x000000b6,0x00040017,0x0000023c,0x00000070,0x00000002,0x0004002b,0x00000013,0x0000026d, + 0x00000400,0x0004001c,0x0000026e,0x00000013,0x0000026d,0x00040020,0x0000026f,0x00000004, + 0x0000026e,0x0004003b,0x0000026f,0x00000270,0x00000004,0x00060034,0x00000013,0x00000273, + 0x00000086,0x000000ae,0x00000212,0x00040020,0x0000027d,0x00000004,0x00000013,0x0004002b, + 0x00000013,0x00000281,0x00000d48,0x00060034,0x00000013,0x00000289,0x00000086,0x000000ae, + 0x000000a6,0x00060034,0x00000013,0x00000292,0x00000086,0x000000ae,0x0000006d,0x00060034, + 0x00000013,0x00000296,0x00000086,0x000000ae,0x0000006d,0x0003001d,0x000002a0,0x000000df, + 0x0003001e,0x000002a1,0x000002a0,0x00040020,0x000002a2,0x0000000c,0x000002a1,0x0004003b, + 0x000002a2,0x000002a3,0x0000000c,0x0004002b,0x00000077,0x000002a7,0x00000003,0x0004002b, + 0x00000077,0x000002ab,0x00000004,0x0006002c,0x00000052,0x000002c8,0x000000bf,0x00000042, + 0x00000042,0x0004002b,0x00000013,0x000002c9,0x00000180,0x00050036,0x00000002,0x00000004, + 0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000050,0x00000051,0x00000007, + 0x0004003b,0x00000050,0x00000058,0x00000007,0x0004003b,0x00000050,0x0000005b,0x00000007, + 0x0004003b,0x00000050,0x0000005f,0x00000007,0x0004003b,0x00000050,0x0000006a,0x00000007, + 0x0004003b,0x00000071,0x00000072,0x00000007,0x0004003b,0x00000050,0x0000007d,0x00000007, + 0x0004003b,0x00000050,0x00000080,0x00000007,0x0004003b,0x00000050,0x00000083,0x00000007, + 0x0004003b,0x00000050,0x0000008a,0x00000007,0x0004003b,0x00000050,0x00000093,0x00000007, + 0x0004003b,0x00000050,0x000000a4,0x00000007,0x0004003b,0x00000050,0x000000ac,0x00000007, + 0x0004003b,0x000000b4,0x000000b5,0x00000007,0x0004003b,0x00000050,0x000000b8,0x00000007, + 0x0004003b,0x000000c3,0x000000c4,0x00000007,0x0004003b,0x00000050,0x000000c6,0x00000007, + 0x0004003b,0x00000050,0x000000ca,0x00000007,0x0004003b,0x00000050,0x000000d7,0x00000007, + 0x0004003b,0x000000e1,0x000000e2,0x00000007,0x0004003b,0x000000e1,0x000000f1,0x00000007, + 0x0004003b,0x000000e1,0x000000fd,0x00000007,0x0004003b,0x00000050,0x00000108,0x00000007, + 0x0004003b,0x00000050,0x00000112,0x00000007,0x0004003b,0x0000011a,0x0000011b,0x00000007, + 0x0004003b,0x00000050,0x00000133,0x00000007,0x0004003b,0x00000050,0x0000013b,0x00000007, + 0x0004003b,0x00000050,0x00000143,0x00000007,0x0004003b,0x00000050,0x0000014b,0x00000007, + 0x0004003b,0x00000050,0x0000014d,0x00000007,0x0004003b,0x00000050,0x0000018c,0x00000007, + 0x0004003b,0x000001b1,0x000001b2,0x00000007,0x0004003b,0x000001c0,0x000001c1,0x00000007, + 0x0004003b,0x000001d3,0x000001d4,0x00000007,0x0004003b,0x00000050,0x000001d7,0x00000007, + 0x0004003b,0x00000050,0x000001e1,0x00000007,0x0004003b,0x000001f7,0x000001f8,0x00000007, + 0x0004003b,0x00000050,0x00000206,0x00000007,0x0004003b,0x00000050,0x00000209,0x00000007, + 0x0004003b,0x00000050,0x0000020c,0x00000007,0x0004003b,0x00000050,0x0000020f,0x00000007, + 0x0004003b,0x00000050,0x00000215,0x00000007,0x0004003b,0x0000000d,0x0000021e,0x00000007, + 0x0004003b,0x0000000d,0x00000229,0x00000007,0x0004003b,0x00000050,0x00000238,0x00000007, + 0x0004003b,0x0000000d,0x0000023f,0x00000007,0x0004003b,0x00000050,0x00000242,0x00000007, + 0x0004003b,0x0000000d,0x00000247,0x00000007,0x0004003b,0x00000071,0x0000024a,0x00000007, + 0x0004003b,0x00000050,0x0000024e,0x00000007,0x0004003b,0x00000050,0x00000254,0x00000007, + 0x0004003b,0x00000050,0x00000256,0x00000007,0x0004003b,0x00000050,0x00000263,0x00000007, + 0x0004003b,0x00000050,0x00000265,0x00000007,0x0004003b,0x00000050,0x00000282,0x00000007, + 0x0004003b,0x00000050,0x0000028b,0x00000007,0x0004003b,0x00000050,0x00000290,0x00000007, + 0x0004003b,0x00000050,0x00000294,0x00000007,0x0004003b,0x00000050,0x00000298,0x00000007, + 0x00050041,0x00000055,0x00000056,0x00000054,0x0000003d,0x0004003d,0x00000013,0x00000057, + 0x00000056,0x0003003e,0x00000051,0x00000057,0x0004003d,0x00000013,0x0000005a,0x00000059, + 0x0003003e,0x00000058,0x0000005a,0x00050041,0x00000055,0x0000005d,0x0000005c,0x0000003d, + 0x0004003d,0x00000013,0x0000005e,0x0000005d,0x0003003e,0x0000005b,0x0000005e,0x00050041, + 0x00000055,0x00000060,0x0000005c,0x00000042,0x0004003d,0x00000013,0x00000061,0x00000060, + 0x00050041,0x00000055,0x00000063,0x0000005c,0x00000062,0x0004003d,0x00000013,0x00000064, + 0x00000063,0x00050084,0x00000013,0x00000066,0x00000064,0x00000065,0x00050080,0x00000013, + 0x00000067,0x00000061,0x00000066,0x00050084,0x00000013,0x00000069,0x00000067,0x00000068, + 0x0003003e,0x0000005f,0x00000069,0x0004003d,0x00000013,0x0000006b,0x0000005f,0x0004003d, + 0x00000013,0x0000006c,0x00000058,0x00050084,0x00000013,0x0000006e,0x0000006c,0x0000006d, + 0x00050080,0x00000013,0x0000006f,0x0000006b,0x0000006e,0x0003003e,0x0000006a,0x0000006f, + 0x0004003d,0x00000013,0x00000073,0x0000006a,0x00050041,0x00000079,0x0000007a,0x00000076, + 0x00000078,0x0004003d,0x00000013,0x0000007b,0x0000007a,0x000500b0,0x00000070,0x0000007c, + 0x00000073,0x0000007b,0x0003003e,0x00000072,0x0000007c,0x0004003d,0x00000013,0x0000007e, + 0x00000051,0x000500c2,0x00000013,0x0000007f,0x0000007e,0x00000042,0x0003003e,0x0000007d, + 0x0000007f,0x0004003d,0x00000013,0x00000081,0x00000051,0x000500c7,0x00000013,0x00000082, + 0x00000081,0x00000042,0x0003003e,0x00000080,0x00000082,0x00050041,0x00000079,0x00000085, + 0x00000076,0x00000084,0x0004003d,0x00000013,0x00000086,0x00000085,0x000300f7,0x0000008c, + 0x00000000,0x000400fa,0x00000089,0x0000008b,0x0000008d,0x000200f8,0x0000008b,0x0003003e, + 0x0000008a,0x0000003d,0x000200f9,0x0000008c,0x000200f8,0x0000008d,0x0004003d,0x00000013, + 0x0000008e,0x0000005b,0x00050084,0x00000013,0x00000090,0x0000008e,0x0000008f,0x0003003e, + 0x0000008a,0x00000090,0x000200f9,0x0000008c,0x000200f8,0x0000008c,0x0004003d,0x00000013, + 0x00000091,0x0000008a,0x00050080,0x00000013,0x00000092,0x00000086,0x00000091,0x0003003e, + 0x00000083,0x00000092,0x0004003d,0x00000013,0x00000094,0x0000005f,0x0004003d,0x00000013, + 0x00000095,0x0000007d,0x00050080,0x00000013,0x00000096,0x00000094,0x00000095,0x00050041, + 0x00000079,0x00000097,0x00000076,0x00000078,0x0004003d,0x00000013,0x00000098,0x00000097, + 0x00050082,0x00000013,0x00000099,0x00000098,0x00000042,0x0007000c,0x00000013,0x0000009a, + 0x00000001,0x00000026,0x00000096,0x00000099,0x00050041,0x00000079,0x0000009c,0x00000076, + 0x0000009b,0x0004003d,0x00000013,0x0000009d,0x0000009c,0x00050084,0x00000013,0x0000009e, + 0x0000009a,0x0000009d,0x0004003d,0x00000013,0x0000009f,0x00000083,0x00050080,0x00000013, + 0x000000a0,0x0000009e,0x0000009f,0x00050086,0x00000013,0x000000a1,0x000000a0,0x0000006d, + 0x0004003d,0x00000013,0x000000a2,0x00000080,0x00050080,0x00000013,0x000000a3,0x000000a1, + 0x000000a2,0x0003003e,0x00000093,0x000000a3,0x0004003d,0x00000013,0x000000a5,0x0000005b, + 0x00050084,0x00000013,0x000000a8,0x000000a5,0x000000a7,0x00050084,0x00000013,0x000000aa, + 0x000000a8,0x000000a9,0x00050084,0x00000013,0x000000ab,0x000000aa,0x00000062,0x0003003e, + 0x000000a4,0x000000ab,0x0004003d,0x00000013,0x000000ad,0x0000005b,0x00050084,0x00000013, + 0x000000af,0x000000ad,0x000000ae,0x00050084,0x00000013,0x000000b0,0x000000af,0x000000a9, + 0x00050086,0x00000013,0x000000b1,0x000000b0,0x0000006d,0x0003003e,0x000000ac,0x000000b1, + 0x0003003e,0x000000b5,0x000000b7,0x0003003e,0x000000b8,0x0000003d,0x000200f9,0x000000b9, + 0x000200f8,0x000000b9,0x000400f6,0x000000bb,0x000000bc,0x00000000,0x000200f9,0x000000bd, + 0x000200f8,0x000000bd,0x0004003d,0x00000013,0x000000be,0x000000b8,0x000500b0,0x00000070, + 0x000000c1,0x000000be,0x000000c0,0x000400fa,0x000000c1,0x000000ba,0x000000bb,0x000200f8, + 0x000000ba,0x0003003e,0x000000c4,0x000000c5,0x0004003d,0x00000013,0x000000c7,0x000000b8, + 0x00050084,0x00000013,0x000000c8,0x000000c7,0x000000bf,0x00050084,0x00000013,0x000000c9, + 0x000000c8,0x00000062,0x0003003e,0x000000c6,0x000000c9,0x0003003e,0x000000ca,0x0000003d, + 0x000200f9,0x000000cb,0x000200f8,0x000000cb,0x000400f6,0x000000cd,0x000000ce,0x00000001, + 0x000200f9,0x000000cf,0x000200f8,0x000000cf,0x0004003d,0x00000013,0x000000d0,0x000000ca, + 0x000500b0,0x00000070,0x000000d2,0x000000d0,0x000000d1,0x000400fa,0x000000d2,0x000000cc, + 0x000000cd,0x000200f8,0x000000cc,0x0004003d,0x00000013,0x000000d3,0x000000ca,0x000500b0, + 0x00000070,0x000000d4,0x000000d3,0x000000a7,0x000300f7,0x000000d6,0x00000000,0x000400fa, + 0x000000d4,0x000000d5,0x000000d6,0x000200f8,0x000000d5,0x0004003d,0x00000013,0x000000d8, + 0x000000a4,0x0004003d,0x00000013,0x000000d9,0x000000ca,0x00050084,0x00000013,0x000000da, + 0x000000d9,0x000000a9,0x00050084,0x00000013,0x000000db,0x000000da,0x00000062,0x00050080, + 0x00000013,0x000000dc,0x000000d8,0x000000db,0x0004003d,0x00000013,0x000000dd,0x000000c6, + 0x00050080,0x00000013,0x000000de,0x000000dc,0x000000dd,0x0003003e,0x000000d7,0x000000de, + 0x0004003d,0x00000013,0x000000e3,0x000000ca,0x0004003d,0x00000013,0x000000e8,0x00000093, + 0x0004003d,0x00000013,0x000000e9,0x000000ca,0x00050084,0x00000013,0x000000ea,0x000000e9, + 0x00000062,0x00050080,0x00000013,0x000000eb,0x000000e8,0x000000ea,0x00060041,0x000000ec, + 0x000000ed,0x000000e7,0x00000078,0x000000eb,0x0004003d,0x000000df,0x000000ee,0x000000ed, + 0x00050041,0x000000ef,0x000000f0,0x000000e2,0x000000e3,0x0003003e,0x000000f0,0x000000ee, + 0x0004003d,0x00000013,0x000000f2,0x000000ca,0x0004003d,0x00000013,0x000000f7,0x000000d7, + 0x0004003d,0x00000013,0x000000f8,0x00000051,0x00050080,0x00000013,0x000000f9,0x000000f7, + 0x000000f8,0x00060041,0x000000ec,0x000000fa,0x000000f6,0x00000078,0x000000f9,0x0004003d, + 0x000000df,0x000000fb,0x000000fa,0x00050041,0x000000ef,0x000000fc,0x000000f1,0x000000f2, + 0x0003003e,0x000000fc,0x000000fb,0x0004003d,0x00000013,0x000000fe,0x000000ca,0x0004003d, + 0x00000013,0x000000ff,0x000000d7,0x00050080,0x00000013,0x00000100,0x000000ff,0x000000bf, + 0x0004003d,0x00000013,0x00000101,0x00000051,0x00050080,0x00000013,0x00000102,0x00000100, + 0x00000101,0x00060041,0x000000ec,0x00000103,0x000000f6,0x00000078,0x00000102,0x0004003d, + 0x000000df,0x00000104,0x00000103,0x00050041,0x000000ef,0x00000105,0x000000fd,0x000000fe, + 0x0003003e,0x00000105,0x00000104,0x000200f9,0x000000d6,0x000200f8,0x000000d6,0x000200f9, + 0x000000ce,0x000200f8,0x000000ce,0x0004003d,0x00000013,0x00000106,0x000000ca,0x00050080, + 0x00000013,0x00000107,0x00000106,0x0000009b,0x0003003e,0x000000ca,0x00000107,0x000200f9, + 0x000000cb,0x000200f8,0x000000cd,0x0003003e,0x00000108,0x0000003d,0x000200f9,0x00000109, + 0x000200f8,0x00000109,0x000400f6,0x0000010b,0x0000010c,0x00000001,0x000200f9,0x0000010d, + 0x000200f8,0x0000010d,0x0004003d,0x00000013,0x0000010e,0x00000108,0x000500b0,0x00000070, + 0x00000111,0x0000010e,0x00000110,0x000400fa,0x00000111,0x0000010a,0x0000010b,0x000200f8, + 0x0000010a,0x0004003d,0x00000013,0x00000113,0x00000051,0x0004003d,0x00000013,0x00000114, + 0x00000108,0x00050084,0x00000013,0x00000115,0x000000bf,0x00000114,0x00050080,0x00000013, + 0x00000116,0x00000113,0x00000115,0x0003003e,0x00000112,0x00000116,0x0004003d,0x00000013, + 0x0000011c,0x00000108,0x0004003d,0x00000013,0x00000121,0x000000ac,0x0004003d,0x00000013, + 0x00000122,0x00000112,0x000500c2,0x00000013,0x00000123,0x00000122,0x000000b2,0x00050084, + 0x00000013,0x00000124,0x00000123,0x000000a9,0x0004003d,0x00000013,0x00000125,0x000000b8, + 0x00050084,0x00000013,0x00000126,0x00000125,0x000000bf,0x00050080,0x00000013,0x00000127, + 0x00000124,0x00000126,0x00050086,0x00000013,0x00000128,0x00000127,0x0000006d,0x00050080, + 0x00000013,0x00000129,0x00000121,0x00000128,0x0004003d,0x00000013,0x0000012a,0x00000112, + 0x000500c7,0x00000013,0x0000012c,0x0000012a,0x0000012b,0x00050080,0x00000013,0x0000012d, + 0x00000129,0x0000012c,0x00060041,0x000000ec,0x0000012e,0x00000120,0x00000078,0x0000012d, + 0x0004003d,0x000000df,0x0000012f,0x0000012e,0x00050041,0x000000ef,0x00000130,0x0000011b, + 0x0000011c,0x0003003e,0x00000130,0x0000012f,0x000200f9,0x0000010c,0x000200f8,0x0000010c, + 0x0004003d,0x00000013,0x00000131,0x00000108,0x00050080,0x00000013,0x00000132,0x00000131, + 0x0000009b,0x0003003e,0x00000108,0x00000132,0x000200f9,0x00000109,0x000200f8,0x0000010b, + 0x0003003e,0x00000133,0x0000003d,0x000200f9,0x00000134,0x000200f8,0x00000134,0x000400f6, + 0x00000136,0x00000137,0x00000000,0x000200f9,0x00000138,0x000200f8,0x00000138,0x0004003d, + 0x00000013,0x00000139,0x00000133,0x000500b0,0x00000070,0x0000013a,0x00000139,0x000000a7, + 0x000400fa,0x0000013a,0x00000135,0x00000136,0x000200f8,0x00000135,0x0003003e,0x0000013b, + 0x0000003d,0x000200f9,0x0000013c,0x000200f8,0x0000013c,0x000400f6,0x0000013e,0x0000013f, + 0x00000001,0x000200f9,0x00000140,0x000200f8,0x00000140,0x0004003d,0x00000013,0x00000141, + 0x0000013b,0x000500b0,0x00000070,0x00000142,0x00000141,0x000000d1,0x000400fa,0x00000142, + 0x0000013d,0x0000013e,0x000200f8,0x0000013d,0x0004003d,0x00000013,0x00000144,0x00000133, + 0x0004003d,0x00000013,0x00000145,0x0000013b,0x00050080,0x00000013,0x00000146,0x00000144, + 0x00000145,0x0003003e,0x00000143,0x00000146,0x0004003d,0x00000013,0x00000147,0x00000143, + 0x000500b0,0x00000070,0x00000148,0x00000147,0x000000a7,0x000300f7,0x0000014a,0x00000000, + 0x000400fa,0x00000148,0x00000149,0x0000014a,0x000200f8,0x00000149,0x000300f7,0x0000014f, + 0x00000000,0x000400fa,0x0000014c,0x0000014e,0x00000150,0x000200f8,0x0000014e,0x0003003e, + 0x0000014d,0x0000003d,0x000200f9,0x0000014f,0x000200f8,0x00000150,0x0004003d,0x00000013, + 0x00000151,0x00000143,0x000500c7,0x00000013,0x00000152,0x00000151,0x00000042,0x00050084, + 0x00000013,0x00000154,0x00000152,0x00000153,0x0003003e,0x0000014d,0x00000154,0x000200f9, + 0x0000014f,0x000200f8,0x0000014f,0x0004003d,0x00000013,0x00000155,0x0000014d,0x0003003e, + 0x0000014b,0x00000155,0x0004003d,0x00000013,0x00000156,0x00000143,0x000500ab,0x00000070, + 0x00000157,0x00000156,0x0000003d,0x000500a7,0x00000070,0x00000158,0x0000014c,0x00000157, + 0x000300f7,0x0000015a,0x00000000,0x000400fa,0x00000158,0x00000159,0x0000015a,0x000200f8, + 0x00000159,0x000400e0,0x00000062,0x00000062,0x0000015b,0x000200f9,0x0000015a,0x000200f8, + 0x0000015a,0x0004003d,0x00000013,0x00000160,0x0000014b,0x0004003d,0x00000013,0x00000161, + 0x0000007d,0x00050084,0x00000013,0x00000162,0x00000161,0x000000b2,0x00050080,0x00000013, + 0x00000163,0x00000160,0x00000162,0x0004003d,0x00000013,0x00000164,0x00000080,0x00050080, + 0x00000013,0x00000165,0x00000163,0x00000164,0x0004003d,0x00000013,0x00000166,0x0000013b, + 0x00050041,0x000000ef,0x00000167,0x000000e2,0x00000166,0x0004003d,0x000000df,0x00000168, + 0x00000167,0x00050041,0x00000169,0x0000016a,0x0000015f,0x00000165,0x0005003e,0x0000016a, + 0x00000168,0x00000028,0x00000062,0x0004003d,0x00000013,0x0000016b,0x0000014b,0x00050080, + 0x00000013,0x0000016d,0x0000016b,0x0000016c,0x0004003d,0x00000013,0x0000016e,0x00000051, + 0x000500c2,0x00000013,0x0000016f,0x0000016e,0x00000042,0x00050084,0x00000013,0x00000170, + 0x0000016f,0x000000b2,0x00050080,0x00000013,0x00000171,0x0000016d,0x00000170,0x0004003d, + 0x00000013,0x00000172,0x00000051,0x000500c7,0x00000013,0x00000173,0x00000172,0x00000042, + 0x00050080,0x00000013,0x00000174,0x00000171,0x00000173,0x0004003d,0x00000013,0x00000175, + 0x0000013b,0x00050041,0x000000ef,0x00000176,0x000000f1,0x00000175,0x0004003d,0x000000df, + 0x00000177,0x00000176,0x00050041,0x00000169,0x00000178,0x0000015f,0x00000174,0x0005003e, + 0x00000178,0x00000177,0x00000028,0x00000062,0x0004003d,0x00000013,0x00000179,0x0000014b, + 0x00050080,0x00000013,0x0000017a,0x00000179,0x0000016c,0x0004003d,0x00000013,0x0000017b, + 0x00000051,0x000500c2,0x00000013,0x0000017c,0x0000017b,0x00000042,0x00050080,0x00000013, + 0x0000017d,0x00000068,0x0000017c,0x00050084,0x00000013,0x0000017e,0x0000017d,0x000000b2, + 0x00050080,0x00000013,0x0000017f,0x0000017a,0x0000017e,0x0004003d,0x00000013,0x00000180, + 0x00000051,0x000500c7,0x00000013,0x00000181,0x00000180,0x00000042,0x00050080,0x00000013, + 0x00000182,0x0000017f,0x00000181,0x0004003d,0x00000013,0x00000183,0x0000013b,0x00050041, + 0x000000ef,0x00000184,0x000000fd,0x00000183,0x0004003d,0x000000df,0x00000185,0x00000184, + 0x00050041,0x00000169,0x00000186,0x0000015f,0x00000182,0x0005003e,0x00000186,0x00000185, + 0x00000028,0x00000062,0x0004003d,0x00000013,0x00000187,0x00000143,0x00050080,0x00000013, + 0x00000188,0x00000187,0x000000d1,0x000500b0,0x00000070,0x00000189,0x00000188,0x000000a7, + 0x000300f7,0x0000018b,0x00000000,0x000400fa,0x00000189,0x0000018a,0x0000018b,0x000200f8, + 0x0000018a,0x0004003d,0x00000013,0x0000018d,0x000000a4,0x0004003d,0x00000013,0x0000018e, + 0x00000143,0x00050080,0x00000013,0x0000018f,0x0000018e,0x000000d1,0x00050084,0x00000013, + 0x00000190,0x0000018f,0x000000a9,0x00050084,0x00000013,0x00000191,0x00000190,0x00000062, + 0x00050080,0x00000013,0x00000192,0x0000018d,0x00000191,0x0004003d,0x00000013,0x00000193, + 0x000000c6,0x00050080,0x00000013,0x00000194,0x00000192,0x00000193,0x0003003e,0x0000018c, + 0x00000194,0x0004003d,0x00000013,0x00000195,0x0000013b,0x0004003d,0x00000013,0x00000196, + 0x00000093,0x0004003d,0x00000013,0x00000197,0x00000143,0x00050080,0x00000013,0x00000198, + 0x00000197,0x000000d1,0x00050084,0x00000013,0x00000199,0x00000198,0x00000062,0x00050080, + 0x00000013,0x0000019a,0x00000196,0x00000199,0x00060041,0x000000ec,0x0000019b,0x000000e7, + 0x00000078,0x0000019a,0x0004003d,0x000000df,0x0000019c,0x0000019b,0x00050041,0x000000ef, + 0x0000019d,0x000000e2,0x00000195,0x0003003e,0x0000019d,0x0000019c,0x0004003d,0x00000013, + 0x0000019e,0x0000013b,0x0004003d,0x00000013,0x0000019f,0x0000018c,0x0004003d,0x00000013, + 0x000001a0,0x00000051,0x00050080,0x00000013,0x000001a1,0x0000019f,0x000001a0,0x00060041, + 0x000000ec,0x000001a2,0x000000f6,0x00000078,0x000001a1,0x0004003d,0x000000df,0x000001a3, + 0x000001a2,0x00050041,0x000000ef,0x000001a4,0x000000f1,0x0000019e,0x0003003e,0x000001a4, + 0x000001a3,0x0004003d,0x00000013,0x000001a5,0x0000013b,0x0004003d,0x00000013,0x000001a6, + 0x0000018c,0x00050080,0x00000013,0x000001a7,0x000001a6,0x000000bf,0x0004003d,0x00000013, + 0x000001a8,0x00000051,0x00050080,0x00000013,0x000001a9,0x000001a7,0x000001a8,0x00060041, + 0x000000ec,0x000001aa,0x000000f6,0x00000078,0x000001a9,0x0004003d,0x000000df,0x000001ab, + 0x000001aa,0x00050041,0x000000ef,0x000001ac,0x000000fd,0x000001a5,0x0003003e,0x000001ac, + 0x000001ab,0x000200f9,0x0000018b,0x000200f8,0x0000018b,0x000400e0,0x00000062,0x00000062, + 0x0000015b,0x0004003d,0x00000070,0x000001ad,0x00000072,0x000300f7,0x000001af,0x00000000, + 0x000400fa,0x000001ad,0x000001ae,0x000001af,0x000200f8,0x000001ae,0x0004003d,0x00000013, + 0x000001b3,0x0000014b,0x0004003d,0x00000013,0x000001b4,0x00000058,0x00050084,0x00000013, + 0x000001b5,0x000001b4,0x0000006d,0x00050084,0x00000013,0x000001b6,0x000001b5,0x000000b2, + 0x00050080,0x00000013,0x000001b7,0x000001b3,0x000001b6,0x00050041,0x00000169,0x000001b8, + 0x0000015f,0x000001b7,0x0004003d,0x00000013,0x000001b9,0x0000014b,0x0004003d,0x00000013, + 0x000001ba,0x00000058,0x00050084,0x00000013,0x000001bb,0x000001ba,0x0000006d,0x00050084, + 0x00000013,0x000001bc,0x000001bb,0x000000b2,0x00050080,0x00000013,0x000001bd,0x000001b9, + 0x000001bc,0x00081169,0x000001b0,0x000001be,0x000001b8,0x00000078,0x000000b2,0x00000030, + 0x00000062,0x0003003e,0x000001b2,0x000001be,0x0004003d,0x00000013,0x000001c2,0x0000014b, + 0x00050080,0x00000013,0x000001c3,0x000001c2,0x0000016c,0x00050041,0x00000169,0x000001c4, + 0x0000015f,0x000001c3,0x0004003d,0x00000013,0x000001c5,0x0000014b,0x00050080,0x00000013, + 0x000001c6,0x000001c5,0x0000016c,0x00081169,0x000001bf,0x000001c7,0x000001c4,0x0000009b, + 0x000000b2,0x00000030,0x00000062,0x0003003e,0x000001c1,0x000001c7,0x0004003d,0x000001b0, + 0x000001c8,0x000001b2,0x0004003d,0x000001bf,0x000001c9,0x000001c1,0x0004003d,0x000000c2, + 0x000001ca,0x000000c4,0x0006116b,0x000000c2,0x000001cb,0x000001c8,0x000001c9,0x000001ca, + 0x0003003e,0x000000c4,0x000001cb,0x000200f9,0x000001af,0x000200f8,0x000001af,0x000200f9, + 0x0000014a,0x000200f8,0x0000014a,0x000200f9,0x0000013f,0x000200f8,0x0000013f,0x0004003d, + 0x00000013,0x000001cc,0x0000013b,0x00050080,0x00000013,0x000001cd,0x000001cc,0x0000009b, + 0x0003003e,0x0000013b,0x000001cd,0x000200f9,0x0000013c,0x000200f8,0x0000013e,0x000200f9, + 0x00000137,0x000200f8,0x00000137,0x0004003d,0x00000013,0x000001ce,0x00000133,0x00050080, + 0x00000013,0x000001cf,0x000001ce,0x000000d1,0x0003003e,0x00000133,0x000001cf,0x000200f9, + 0x00000134,0x000200f8,0x00000136,0x000400e0,0x00000062,0x00000062,0x0000015b,0x0004003d, + 0x000000c2,0x000001d0,0x000000c4,0x000514f9,0x000000c2,0x000001d1,0x000001d0,0x00000018, + 0x0003003e,0x000000c4,0x000001d1,0x0004003d,0x000000c2,0x000001d5,0x000000c4,0x00040073, + 0x000001d2,0x000001d6,0x000001d5,0x0003003e,0x000001d4,0x000001d6,0x0003003e,0x000001d7, + 0x0000003d,0x000200f9,0x000001d8,0x000200f8,0x000001d8,0x000400f6,0x000001da,0x000001db, + 0x00000001,0x000200f9,0x000001dc,0x000200f8,0x000001dc,0x0004003d,0x00000013,0x000001dd, + 0x000001d7,0x000500b0,0x00000070,0x000001e0,0x000001dd,0x000001df,0x000400fa,0x000001e0, + 0x000001d9,0x000001da,0x000200f8,0x000001d9,0x0004003d,0x00000013,0x000001e2,0x00000051, + 0x0004003d,0x00000013,0x000001e3,0x000001d7,0x00050084,0x00000013,0x000001e4,0x000000bf, + 0x000001e3,0x00050080,0x00000013,0x000001e5,0x000001e2,0x000001e4,0x0003003e,0x000001e1, + 0x000001e5,0x0004003d,0x00000013,0x000001e6,0x000001e1,0x000500c2,0x00000013,0x000001e7, + 0x000001e6,0x000000b2,0x00050084,0x00000013,0x000001e9,0x000001e7,0x000001e8,0x0004003d, + 0x00000013,0x000001ea,0x000001e1,0x000500c7,0x00000013,0x000001eb,0x000001ea,0x0000012b, + 0x00050080,0x00000013,0x000001ec,0x000001e9,0x000001eb,0x0004003d,0x00000013,0x000001ed, + 0x000001d7,0x00050041,0x000000ef,0x000001ee,0x0000011b,0x000001ed,0x0004003d,0x000000df, + 0x000001ef,0x000001ee,0x00050041,0x00000169,0x000001f0,0x0000015f,0x000001ec,0x0005003e, + 0x000001f0,0x000001ef,0x00000028,0x00000062,0x000200f9,0x000001db,0x000200f8,0x000001db, + 0x0004003d,0x00000013,0x000001f1,0x000001d7,0x00050080,0x00000013,0x000001f2,0x000001f1, + 0x0000009b,0x0003003e,0x000001d7,0x000001f2,0x000200f9,0x000001d8,0x000200f8,0x000001da, + 0x000400e0,0x00000062,0x00000062,0x0000015b,0x0004003d,0x00000070,0x000001f3,0x00000072, + 0x000300f7,0x000001f5,0x00000000,0x000400fa,0x000001f3,0x000001f4,0x000001f5,0x000200f8, + 0x000001f4,0x00050041,0x00000169,0x000001f9,0x0000015f,0x0000003d,0x00081169,0x000001f6, + 0x000001fa,0x000001f9,0x0000009b,0x000001e8,0x00000030,0x00000062,0x0003003e,0x000001f8, + 0x000001fa,0x0004003d,0x000001d2,0x000001fb,0x000001d4,0x0004003d,0x000001f6,0x000001fc, + 0x000001f8,0x0004003d,0x000000b3,0x000001fd,0x000000b5,0x0006116b,0x000000b3,0x000001fe, + 0x000001fb,0x000001fc,0x000001fd,0x0003003e,0x000000b5,0x000001fe,0x000200f9,0x000001f5, + 0x000200f8,0x000001f5,0x000400e0,0x00000062,0x00000062,0x0000015b,0x000200f9,0x000000bc, + 0x000200f8,0x000000bc,0x0004003d,0x00000013,0x000001ff,0x000000b8,0x00050080,0x00000013, + 0x00000200,0x000001ff,0x0000009b,0x0003003e,0x000000b8,0x00000200,0x000200f9,0x000000b9, + 0x000200f8,0x000000bb,0x0004003d,0x00000070,0x00000201,0x00000072,0x000400a8,0x00000070, + 0x00000202,0x00000201,0x000300f7,0x00000204,0x00000000,0x000400fa,0x00000202,0x00000203, + 0x00000204,0x000200f8,0x00000203,0x000100fd,0x000200f8,0x00000204,0x0004003d,0x00000013, + 0x00000208,0x00000207,0x0003003e,0x00000206,0x00000208,0x0004003d,0x00000013,0x0000020a, + 0x00000206,0x000500c2,0x00000013,0x0000020b,0x0000020a,0x00000062,0x0003003e,0x00000209, + 0x0000020b,0x0004003d,0x00000013,0x0000020d,0x00000206,0x000500c7,0x00000013,0x0000020e, + 0x0000020d,0x000000b2,0x0003003e,0x0000020c,0x0000020e,0x0004003d,0x00000013,0x00000210, + 0x00000058,0x00050084,0x00000013,0x00000211,0x00000210,0x0000006d,0x00050084,0x00000013, + 0x00000214,0x00000211,0x00000213,0x0003003e,0x0000020f,0x00000214,0x0003003e,0x00000215, + 0x0000003d,0x000200f9,0x00000216,0x000200f8,0x00000216,0x000400f6,0x00000218,0x00000219, + 0x00000001,0x000200f9,0x0000021a,0x000200f8,0x0000021a,0x0004003d,0x00000013,0x0000021b, + 0x00000215,0x000500b0,0x00000070,0x0000021d,0x0000021b,0x0000021c,0x000400fa,0x0000021d, + 0x00000217,0x00000218,0x000200f8,0x00000217,0x0004003d,0x00000013,0x0000021f,0x00000215, + 0x00050084,0x00000013,0x00000220,0x00000062,0x0000021f,0x00050041,0x00000007,0x00000221, + 0x000000b5,0x00000220,0x0004003d,0x00000006,0x00000222,0x00000221,0x0004003d,0x00000013, + 0x00000223,0x00000215,0x00050084,0x00000013,0x00000224,0x00000062,0x00000223,0x00050080, + 0x00000013,0x00000225,0x00000224,0x00000042,0x00050041,0x00000007,0x00000226,0x000000b5, + 0x00000225,0x0004003d,0x00000006,0x00000227,0x00000226,0x00050050,0x0000000c,0x00000228, + 0x00000222,0x00000227,0x0003003e,0x0000021e,0x00000228,0x0004003d,0x00000013,0x0000022b, + 0x00000215,0x00050084,0x00000013,0x0000022c,0x00000062,0x0000022b,0x00050080,0x00000013, + 0x0000022d,0x0000022a,0x0000022c,0x00050041,0x00000007,0x0000022e,0x000000b5,0x0000022d, + 0x0004003d,0x00000006,0x0000022f,0x0000022e,0x0004003d,0x00000013,0x00000231,0x00000215, + 0x00050084,0x00000013,0x00000232,0x00000062,0x00000231,0x00050080,0x00000013,0x00000233, + 0x00000230,0x00000232,0x00050080,0x00000013,0x00000234,0x00000233,0x00000042,0x00050041, + 0x00000007,0x00000235,0x000000b5,0x00000234,0x0004003d,0x00000006,0x00000236,0x00000235, + 0x00050050,0x0000000c,0x00000237,0x0000022f,0x00000236,0x0003003e,0x00000229,0x00000237, + 0x0004003d,0x0000000c,0x00000239,0x0000021e,0x0004003d,0x0000000c,0x0000023b,0x0000021e, + 0x0004009c,0x0000023c,0x0000023d,0x0000023b,0x000600a9,0x0000000c,0x0000023e,0x0000023d, + 0x0000023a,0x00000239,0x0003003e,0x0000023f,0x0000023e,0x00050039,0x0000000e,0x00000240, + 0x00000011,0x0000023f,0x00040071,0x00000013,0x00000241,0x00000240,0x0003003e,0x00000238, + 0x00000241,0x0004003d,0x0000000c,0x00000243,0x00000229,0x0004003d,0x0000000c,0x00000244, + 0x00000229,0x0004009c,0x0000023c,0x00000245,0x00000244,0x000600a9,0x0000000c,0x00000246, + 0x00000245,0x0000023a,0x00000243,0x0003003e,0x00000247,0x00000246,0x00050039,0x0000000e, + 0x00000248,0x00000011,0x00000247,0x00040071,0x00000013,0x00000249,0x00000248,0x0003003e, + 0x00000242,0x00000249,0x0004003d,0x00000013,0x0000024b,0x0000020c,0x000500c7,0x00000013, + 0x0000024c,0x0000024b,0x00000042,0x000500ab,0x00000070,0x0000024d,0x0000024c,0x0000003d, + 0x0003003e,0x0000024a,0x0000024d,0x0004003d,0x00000070,0x0000024f,0x0000024a,0x0004003d, + 0x00000013,0x00000250,0x00000238,0x0004003d,0x00000013,0x00000251,0x00000242,0x000600a9, + 0x00000013,0x00000252,0x0000024f,0x00000250,0x00000251,0x0006015a,0x00000013,0x00000253, + 0x000000b2,0x00000252,0x00000042,0x0003003e,0x0000024e,0x00000253,0x0004003d,0x00000070, + 0x00000255,0x0000024a,0x000300f7,0x00000258,0x00000000,0x000400fa,0x00000255,0x00000257, + 0x0000025d,0x000200f8,0x00000257,0x0004003d,0x00000013,0x00000259,0x0000024e,0x0004003d, + 0x00000013,0x0000025a,0x00000242,0x000500c4,0x00000013,0x0000025b,0x0000025a,0x0000006d, + 0x000500c5,0x00000013,0x0000025c,0x00000259,0x0000025b,0x0003003e,0x00000256,0x0000025c, + 0x000200f9,0x00000258,0x000200f8,0x0000025d,0x0004003d,0x00000013,0x0000025e,0x00000238, + 0x0004003d,0x00000013,0x0000025f,0x0000024e,0x000500c4,0x00000013,0x00000260,0x0000025f, + 0x0000006d,0x000500c5,0x00000013,0x00000261,0x0000025e,0x00000260,0x0003003e,0x00000256, + 0x00000261,0x000200f9,0x00000258,0x000200f8,0x00000258,0x0004003d,0x00000013,0x00000262, + 0x00000256,0x0003003e,0x00000254,0x00000262,0x0004003d,0x00000070,0x00000264,0x0000024a, + 0x000300f7,0x00000267,0x00000000,0x000400fa,0x00000264,0x00000266,0x0000026a,0x000200f8, + 0x00000266,0x0004003d,0x00000013,0x00000268,0x00000209,0x00050080,0x00000013,0x00000269, + 0x00000268,0x00000046,0x0003003e,0x00000265,0x00000269,0x000200f9,0x00000267,0x000200f8, + 0x0000026a,0x0004003d,0x00000013,0x0000026b,0x00000209,0x0003003e,0x00000265,0x0000026b, + 0x000200f9,0x00000267,0x000200f8,0x00000267,0x0004003d,0x00000013,0x0000026c,0x00000265, + 0x0003003e,0x00000263,0x0000026c,0x0004003d,0x00000013,0x00000271,0x0000020f,0x0004003d, + 0x00000013,0x00000272,0x00000263,0x00050084,0x00000013,0x00000274,0x00000272,0x00000273, + 0x00050080,0x00000013,0x00000275,0x00000271,0x00000274,0x0004003d,0x00000013,0x00000276, + 0x00000215,0x00050084,0x00000013,0x00000277,0x00000062,0x00000276,0x00050080,0x00000013, + 0x00000278,0x00000275,0x00000277,0x0004003d,0x00000013,0x00000279,0x0000020c,0x000500c2, + 0x00000013,0x0000027a,0x00000279,0x00000042,0x00050080,0x00000013,0x0000027b,0x00000278, + 0x0000027a,0x0004003d,0x00000013,0x0000027c,0x00000254,0x00050041,0x0000027d,0x0000027e, + 0x00000270,0x0000027b,0x0005003e,0x0000027e,0x0000027c,0x00000028,0x00000062,0x000200f9, + 0x00000219,0x000200f8,0x00000219,0x0004003d,0x00000013,0x0000027f,0x00000215,0x00050080, + 0x00000013,0x00000280,0x0000027f,0x0000009b,0x0003003e,0x00000215,0x00000280,0x000200f9, + 0x00000216,0x000200f8,0x00000218,0x000400e0,0x000000b2,0x000000b2,0x00000281,0x0003003e, + 0x00000282,0x0000003d,0x000200f9,0x00000283,0x000200f8,0x00000283,0x000400f6,0x00000285, + 0x00000286,0x00000001,0x000200f9,0x00000287,0x000200f8,0x00000287,0x0004003d,0x00000013, + 0x00000288,0x00000282,0x000500b0,0x00000070,0x0000028a,0x00000288,0x00000289,0x000400fa, + 0x0000028a,0x00000284,0x00000285,0x000200f8,0x00000284,0x0004003d,0x00000013,0x0000028c, + 0x00000206,0x0004003d,0x00000013,0x0000028d,0x00000282,0x00050084,0x00000013,0x0000028e, + 0x000000a6,0x0000028d,0x00050080,0x00000013,0x0000028f,0x0000028c,0x0000028e,0x0003003e, + 0x0000028b,0x0000028f,0x0004003d,0x00000013,0x00000291,0x0000028b,0x00050086,0x00000013, + 0x00000293,0x00000291,0x00000292,0x0003003e,0x00000290,0x00000293,0x0004003d,0x00000013, + 0x00000295,0x0000028b,0x00050089,0x00000013,0x00000297,0x00000295,0x00000296,0x0003003e, + 0x00000294,0x00000297,0x0004003d,0x00000013,0x00000299,0x0000020f,0x0004003d,0x00000013, + 0x0000029a,0x00000290,0x00050084,0x00000013,0x0000029b,0x0000029a,0x00000213,0x00050080, + 0x00000013,0x0000029c,0x00000299,0x0000029b,0x0004003d,0x00000013,0x0000029d,0x00000294, + 0x00050084,0x00000013,0x0000029e,0x0000029d,0x00000212,0x00050080,0x00000013,0x0000029f, + 0x0000029c,0x0000029e,0x0003003e,0x00000298,0x0000029f,0x0004003d,0x00000013,0x000002a4, + 0x0000006a,0x0004003d,0x00000013,0x000002a5,0x00000290,0x00050080,0x00000013,0x000002a6, + 0x000002a4,0x000002a5,0x00050041,0x00000079,0x000002a8,0x00000076,0x000002a7,0x0004003d, + 0x00000013,0x000002a9,0x000002a8,0x00050084,0x00000013,0x000002aa,0x000002a6,0x000002a9, + 0x00050041,0x00000079,0x000002ac,0x00000076,0x000002ab,0x0004003d,0x00000013,0x000002ad, + 0x000002ac,0x00050080,0x00000013,0x000002ae,0x000002aa,0x000002ad,0x0004003d,0x00000013, + 0x000002af,0x0000005b,0x00050084,0x00000013,0x000002b0,0x000002af,0x000000ae,0x00050080, + 0x00000013,0x000002b1,0x000002ae,0x000002b0,0x00050086,0x00000013,0x000002b2,0x000002b1, + 0x0000006d,0x0004003d,0x00000013,0x000002b3,0x00000294,0x00050080,0x00000013,0x000002b4, + 0x000002b2,0x000002b3,0x0004003d,0x00000013,0x000002b5,0x00000298,0x00050041,0x0000027d, + 0x000002b6,0x00000270,0x000002b5,0x0006003d,0x00000013,0x000002b7,0x000002b6,0x00000030, + 0x00000062,0x0004003d,0x00000013,0x000002b8,0x00000298,0x00050080,0x00000013,0x000002b9, + 0x000002b8,0x00000042,0x00050041,0x0000027d,0x000002ba,0x00000270,0x000002b9,0x0006003d, + 0x00000013,0x000002bb,0x000002ba,0x00000030,0x00000062,0x0004003d,0x00000013,0x000002bc, + 0x00000298,0x00050080,0x00000013,0x000002bd,0x000002bc,0x00000062,0x00050041,0x0000027d, + 0x000002be,0x00000270,0x000002bd,0x0006003d,0x00000013,0x000002bf,0x000002be,0x00000030, + 0x00000062,0x0004003d,0x00000013,0x000002c0,0x00000298,0x00050080,0x00000013,0x000002c1, + 0x000002c0,0x000000b2,0x00050041,0x0000027d,0x000002c2,0x00000270,0x000002c1,0x0006003d, + 0x00000013,0x000002c3,0x000002c2,0x00000030,0x00000062,0x00070050,0x000000df,0x000002c4, + 0x000002b7,0x000002bb,0x000002bf,0x000002c3,0x00060041,0x000000ec,0x000002c5,0x000002a3, + 0x00000078,0x000002b4,0x0003003e,0x000002c5,0x000002c4,0x000200f9,0x00000286,0x000200f8, + 0x00000286,0x0004003d,0x00000013,0x000002c6,0x00000282,0x00050080,0x00000013,0x000002c7, + 0x000002c6,0x0000009b,0x0003003e,0x00000282,0x000002c7,0x000200f9,0x00000283,0x000200f8, + 0x00000285,0x000100fd,0x00010038,0x00050036,0x00000006,0x0000000a,0x00000000,0x00000008, + 0x00030037,0x00000007,0x00000009,0x000200f8,0x0000000b,0x0004003b,0x00000007,0x0000001a, + 0x00000007,0x0004003b,0x00000007,0x0000001f,0x00000007,0x0004003b,0x00000007,0x00000025, + 0x00000007,0x0004003b,0x00000007,0x0000002a,0x00000007,0x0004003d,0x00000006,0x0000001b, + 0x00000009,0x0008000c,0x00000006,0x0000001e,0x00000001,0x0000002b,0x0000001b,0x0000001c, + 0x0000001d,0x0003003e,0x0000001a,0x0000001e,0x0004003d,0x00000006,0x00000021,0x0000001a, + 0x0006000c,0x00000006,0x00000022,0x00000001,0x00000004,0x00000021,0x0008000c,0x00000006, + 0x00000024,0x00000001,0x00000032,0x00000020,0x00000022,0x00000023,0x0003003e,0x0000001f, + 0x00000024,0x0004003d,0x00000006,0x00000026,0x0000001a,0x0004003d,0x00000006,0x00000027, + 0x0000001f,0x0008000c,0x00000006,0x00000029,0x00000001,0x00000032,0x00000026,0x00000027, + 0x00000028,0x0003003e,0x00000025,0x00000029,0x0004003d,0x00000006,0x0000002b,0x00000009, + 0x0004003d,0x00000006,0x0000002c,0x00000025,0x00050085,0x00000006,0x0000002d,0x0000002b, + 0x0000002c,0x0003003e,0x0000002a,0x0000002d,0x0004003d,0x00000006,0x0000002e,0x0000002a, + 0x000200fe,0x0000002e,0x00010038,0x00050036,0x0000000e,0x00000011,0x00000000,0x0000000f, + 0x00030037,0x0000000d,0x00000010,0x000200f8,0x00000012,0x0004003b,0x00000033,0x00000034, + 0x00000007,0x0004003b,0x00000039,0x0000003a,0x00000007,0x0004003d,0x0000000c,0x00000035, + 0x00000010,0x00040073,0x00000032,0x00000036,0x00000035,0x0003003e,0x00000034,0x00000036, + 0x0004003d,0x00000032,0x0000003b,0x00000034,0x0004007c,0x00000038,0x0000003c,0x0000003b, + 0x0003003e,0x0000003a,0x0000003c,0x00050041,0x0000003e,0x0000003f,0x0000003a,0x0000003d, + 0x0004003d,0x00000037,0x00000040,0x0000003f,0x00040071,0x00000013,0x00000041,0x00000040, + 0x00050041,0x0000003e,0x00000043,0x0000003a,0x00000042,0x0004003d,0x00000037,0x00000044, + 0x00000043,0x00040071,0x00000013,0x00000045,0x00000044,0x000500c4,0x00000013,0x00000047, + 0x00000045,0x00000046,0x000500c5,0x00000013,0x00000048,0x00000041,0x00000047,0x00040071, + 0x0000000e,0x00000049,0x00000048,0x000200fe,0x00000049,0x00010038,0x00050036,0x00000006, + 0x00000018,0x00000000,0x00000014,0x00030037,0x00000013,0x00000015,0x00030037,0x00000013, + 0x00000016,0x00030037,0x00000006,0x00000017,0x000200f8,0x00000019,0x0004003b,0x00000007, + 0x0000004c,0x00000007,0x0003003e,0x0000004c,0x00000017,0x00050039,0x00000006,0x0000004d, + 0x0000000a,0x0000004c,0x000200fe,0x0000004d,0x00010038, +}; +inline constexpr uint32_t k_global_attention[] = { + 0x07230203,0x00010600,0x0008000b,0x0000066a,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x00000027,0x00020011,0x0000003d,0x00020011, + 0x00000041,0x00020011,0x00001074,0x00020011,0x00001075,0x00020011,0x00001151,0x00020011, + 0x000014e1,0x00020011,0x00001786,0x0005000a,0x5f565053,0x5f545845,0x616f6c66,0x00003874, + 0x0008000a,0x5f565053,0x5f52484b,0x706f6f63,0x74617265,0x5f657669,0x7274616d,0x00007869, + 0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000, + 0x00000003,0x0011000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000201,0x00000206, + 0x00000209,0x0000020c,0x0000021c,0x00000229,0x00000261,0x00000283,0x000002c8,0x0000031f, + 0x00000653,0x00000668,0x00060010,0x00000004,0x00000011,0x00000080,0x00000001,0x00000001, + 0x00030003,0x00000002,0x000001cc,0x00090004,0x455f4c47,0x635f5458,0x72746e6f,0x665f6c6f, + 0x5f776f6c,0x72747461,0x74756269,0x00007365,0x00060004,0x455f4c47,0x665f5458,0x74616f6c, + 0x6d34655f,0x00000033,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x36315f72,0x5f746962, + 0x726f7473,0x00656761,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x62385f72,0x735f7469, + 0x61726f74,0x00006567,0x000b0004,0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70, + 0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f, + 0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004, + 0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669,0x00080004, + 0x4b5f4c47,0x635f5248,0x65706f6f,0x69746172,0x6d5f6576,0x69727461,0x00000078,0x00090004, + 0x4b5f4c47,0x6d5f5248,0x726f6d65,0x63735f79,0x5f65706f,0x616d6573,0x6369746e,0x00000073, + 0x00090004,0x4b5f4c47,0x735f5248,0x65646168,0x75735f72,0x6f726762,0x625f7075,0x63697361, + 0x00000000,0x00090004,0x4b5f4c47,0x735f5248,0x65646168,0x75735f72,0x6f726762,0x735f7075, + 0x66667568,0x0000656c,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000a, + 0x6e756f72,0x36314664,0x3b316628,0x00000000,0x00040005,0x00000009,0x756c6176,0x00000065, + 0x00070005,0x00000012,0x336d3465,0x61507748,0x76287269,0x32363166,0x0000003b,0x00040005, + 0x00000011,0x756c6176,0x00000065,0x00060005,0x00000014,0x67627573,0x70756f72,0x636e7953, + 0x00000028,0x00070005,0x0000001a,0x34783465,0x31667628,0x763b3236,0x32363166,0x0000003b, + 0x00030005,0x00000018,0x00000061,0x00030005,0x00000019,0x00000062,0x00060005,0x00000020, + 0x34783465,0x73746942,0x3b317528,0x003b3175,0x00030005,0x0000001e,0x00000061,0x00030005, + 0x0000001f,0x00000062,0x00070005,0x00000027,0x6e617571,0x657a6974,0x76283631,0x763b3475, + 0x003b3475,0x00030005,0x00000025,0x00003077,0x00030005,0x00000026,0x00003177,0x00080005, + 0x0000002b,0x57707865,0x68676965,0x69615074,0x74695672,0x3b317528,0x00000000,0x00050005, + 0x0000002a,0x726f6373,0x74694265,0x00000073,0x000a0005,0x00000032,0x65766e69,0x4e657372, + 0x566d726f,0x76287469,0x763b3475,0x763b3475,0x763b3475,0x003b3475,0x00030005,0x0000002e, + 0x00003077,0x00030005,0x0000002f,0x00003177,0x00030005,0x00000030,0x00003277,0x00030005, + 0x00000031,0x00003377,0x00100005,0x00000041,0x6c616373,0x61755165,0x7a69746e,0x74695665, + 0x34757628,0x3475763b,0x3475763b,0x3475763b,0x3631663b,0x31623b31,0x3631663b,0x75763b31, + 0x75763b34,0x00003b34,0x00030005,0x00000038,0x00003077,0x00030005,0x00000039,0x00003177, + 0x00030005,0x0000003a,0x00003277,0x00030005,0x0000003b,0x00003377,0x00040005,0x0000003c, + 0x6d726f6e,0x00000000,0x00040005,0x0000003d,0x75517369,0x00797265,0x00040005,0x0000003e, + 0x7261656c,0x0064656e,0x00030005,0x0000003f,0x00003065,0x00030005,0x00000040,0x00003165, + 0x00040005,0x00000043,0x73746962,0x00000000,0x00040005,0x00000046,0x6e676973,0x00000000, + 0x00050005,0x0000004a,0x6e67616d,0x64757469,0x00000065,0x00040005,0x00000063,0x6c616373, + 0x00006465,0x00030005,0x00000074,0x0062736c,0x00040005,0x0000007a,0x6e756f72,0x00646564, + 0x00040005,0x00000088,0x61656c63,0x0000006e,0x00050005,0x00000093,0x766e6f63,0x65747265, + 0x00000064,0x00040005,0x00000099,0x65646f63,0x00000073,0x00040005,0x000000ad,0x61726170, + 0x0000006d,0x00040005,0x000000b1,0x61726170,0x0000006d,0x00040005,0x000000be,0x61726170, + 0x0000006d,0x00040005,0x000000bf,0x61726170,0x0000006d,0x00040005,0x000000c3,0x61726170, + 0x0000006d,0x00040005,0x000000c6,0x61726170,0x0000006d,0x00040005,0x000000ca,0x61726170, + 0x0000006d,0x00040005,0x000000ce,0x61726170,0x0000006d,0x00040005,0x000000d2,0x61726170, + 0x0000006d,0x00040005,0x000000d5,0x61726170,0x0000006d,0x00040005,0x000000d9,0x61726170, + 0x0000006d,0x00040005,0x000000dc,0x61726170,0x0000006d,0x00040005,0x000000e3,0x69666661, + 0x0000656e,0x00040005,0x000000f1,0x73746962,0x00000000,0x00030005,0x000000f4,0x00006f6c, + 0x00030005,0x000000fd,0x00006968,0x00030005,0x00000109,0x00000069,0x00030005,0x00000113, + 0x00000070,0x00030005,0x00000134,0x0000006d,0x00050005,0x0000013c,0x68676968,0x61757153, + 0x00006572,0x00040005,0x00000148,0x61757173,0x00006572,0x00060005,0x00000152,0x61757173, + 0x6f526572,0x65646e75,0x00000064,0x00030005,0x00000157,0x006d7573,0x00030005,0x0000015e, + 0x00000072,0x00030005,0x00000165,0x0000006d,0x00030005,0x0000016d,0x00000073,0x00030005, + 0x00000178,0x00003873,0x00030005,0x0000017e,0x00613473,0x00030005,0x00000186,0x00623473, + 0x00030005,0x0000018d,0x00003273,0x00030005,0x00000191,0x00003173,0x00040005,0x0000019f, + 0x64726f77,0x00000073,0x00030005,0x000001a5,0x00000069,0x00030005,0x000001ad,0x00000061, + 0x00030005,0x000001b6,0x00000062,0x00030005,0x000001c0,0x0000616e,0x00030005,0x000001c4, + 0x0000626e,0x00030005,0x000001cb,0x00006168,0x00030005,0x000001cf,0x00006268,0x00030005, + 0x000001d2,0x0000616c,0x00030005,0x000001d6,0x0000626c,0x00040005,0x000001de,0x65646f63, + 0x00000073,0x00040005,0x000001e0,0x61726170,0x0000006d,0x00040005,0x000001e2,0x61726170, + 0x0000006d,0x00040005,0x000001fe,0x65726874,0x00006461,0x00080005,0x00000201,0x4c5f6c67, + 0x6c61636f,0x6f766e49,0x69746163,0x44496e6f,0x00000000,0x00030005,0x00000205,0x00000071, + 0x00060005,0x00000206,0x535f6c67,0x72676275,0x4970756f,0x00000044,0x00040005,0x00000208, + 0x656e616c,0x00000000,0x00080005,0x00000209,0x535f6c67,0x72676275,0x4970756f,0x636f766e, + 0x6f697461,0x0044496e,0x00040005,0x0000020b,0x64616568,0x00000000,0x00060005,0x0000020c, + 0x575f6c67,0x476b726f,0x70756f72,0x00004449,0x00050005,0x0000020f,0x72657571,0x6f6c4279, + 0x00006b63,0x00040005,0x00000212,0x65736162,0x00000000,0x00040005,0x00000216,0x42776f72, + 0x00657361,0x00060005,0x00000219,0x69727473,0x57336564,0x7364726f,0x00000000,0x00040005, + 0x0000021a,0x68737550,0x00000000,0x00050006,0x0000021a,0x00000000,0x656b6f74,0x0000736e, + 0x00050006,0x0000021a,0x00000001,0x64616568,0x00000073,0x00060006,0x0000021a,0x00000002, + 0x6e616863,0x736c656e,0x00000000,0x00070006,0x0000021a,0x00000003,0x6c616373,0x726f5765, + 0x66664f64,0x00746573,0x00030005,0x0000021c,0x00006370,0x00050005,0x00000222,0x64616568, + 0x64726f57,0x00000000,0x00040005,0x00000225,0x7261656c,0x0064656e,0x00030005,0x00000227, + 0x00787541,0x00050006,0x00000227,0x00000000,0x33787561,0x00000032,0x00030005,0x00000229, + 0x00000000,0x00060005,0x00000233,0x69727473,0x34456564,0x64726f57,0x00000073,0x00050005, + 0x00000238,0x64616568,0x6f573445,0x00006472,0x00050005,0x0000023c,0x72657571,0x6b6f5479, + 0x00006e65,0x00040005,0x0000024a,0x696c6176,0x00000064,0x00060005,0x0000024f,0x4e455250, + 0x414d524f,0x455a494c,0x00000044,0x00030005,0x00000253,0x00637273,0x00030005,0x00000259, + 0x00003065,0x00060005,0x0000025f,0x6d726f4e,0x7a696c61,0x6b516465,0x00000076,0x00050006, + 0x0000025f,0x00000000,0x6d726f6e,0x00000034,0x00030005,0x00000261,0x00000000,0x00030005, + 0x00000269,0x00003165,0x00030005,0x00000275,0x00637273,0x00030005,0x0000027b,0x00003071, + 0x00030005,0x00000281,0x00766b51,0x00050006,0x00000281,0x00000000,0x34766b71,0x00000000, + 0x00030005,0x00000283,0x00000000,0x00030005,0x00000289,0x00003171,0x00030005,0x00000294, + 0x00003271,0x00030005,0x0000029f,0x00003371,0x00040005,0x000002aa,0x61726170,0x0000006d, + 0x00040005,0x000002ac,0x61726170,0x0000006d,0x00040005,0x000002ae,0x61726170,0x0000006d, + 0x00040005,0x000002b0,0x61726170,0x0000006d,0x00040005,0x000002b4,0x61726170,0x0000006d, + 0x00040005,0x000002b6,0x61726170,0x0000006d,0x00040005,0x000002b8,0x61726170,0x0000006d, + 0x00040005,0x000002ba,0x61726170,0x0000006d,0x00040005,0x000002bc,0x61726170,0x0000006d, + 0x00040005,0x000002bd,0x61726170,0x0000006d,0x00040005,0x000002be,0x61726170,0x0000006d, + 0x00040005,0x000002c0,0x61726170,0x0000006d,0x00040005,0x000002c1,0x61726170,0x0000006d, + 0x00040005,0x000002c8,0x76697270,0x00000034,0x00030005,0x000002dd,0x0000726c,0x00030005, + 0x000002e0,0x00006868,0x00040005,0x000002e3,0x73614273,0x00000065,0x00030005,0x000002ea, + 0x00006f6d,0x00040005,0x000002ef,0x61746f74,0x0000006c,0x00040005,0x000002f0,0x6e756863, + 0x0000006b,0x00060005,0x000002f7,0x44444150,0x545f4445,0x4e454b4f,0x00000053,0x00050005, + 0x000002f9,0x6e756863,0x6f6c426b,0x00736b63,0x00060005,0x000002fa,0x4e554843,0x4f545f4b, + 0x534e454b,0x00000000,0x00060005,0x000002fb,0x4e554843,0x4c425f4b,0x534b434f,0x00000000, + 0x00040005,0x00000300,0x61636f6c,0x0000006c,0x00040005,0x00000309,0x656b6f74,0x0000006e, + 0x00040005,0x0000030d,0x696c6176,0x00000064,0x00030005,0x00000315,0x00637273,0x00030005, + 0x0000031f,0x0034766b,0x00030005,0x0000033d,0x00005056,0x00030005,0x0000035d,0x00637273, + 0x00030005,0x00000363,0x0000306b,0x00030005,0x0000036e,0x0000316b,0x00030005,0x00000379, + 0x0000326b,0x00030005,0x00000384,0x0000336b,0x00030005,0x00000390,0x00003076,0x00030005, + 0x0000039b,0x00003176,0x00030005,0x000003a7,0x00003276,0x00030005,0x000003b3,0x00003376, + 0x00040005,0x000003bf,0x61726170,0x0000006d,0x00040005,0x000003c1,0x61726170,0x0000006d, + 0x00040005,0x000003c3,0x61726170,0x0000006d,0x00040005,0x000003c5,0x61726170,0x0000006d, + 0x00030005,0x000003c9,0x00003065,0x00030005,0x000003ca,0x00003165,0x00040005,0x000003cb, + 0x61726170,0x0000006d,0x00040005,0x000003cd,0x61726170,0x0000006d,0x00040005,0x000003cf, + 0x61726170,0x0000006d,0x00040005,0x000003d1,0x61726170,0x0000006d,0x00040005,0x000003d3, + 0x61726170,0x0000006d,0x00040005,0x000003d4,0x61726170,0x0000006d,0x00040005,0x000003d5, + 0x61726170,0x0000006d,0x00040005,0x000003d7,0x61726170,0x0000006d,0x00040005,0x000003d8, + 0x61726170,0x0000006d,0x00040005,0x000003f2,0x61726170,0x0000006d,0x00040005,0x000003f4, + 0x61726170,0x0000006d,0x00040005,0x00000402,0x61726170,0x0000006d,0x00040005,0x00000404, + 0x61726170,0x0000006d,0x00030005,0x00000413,0x0000716d,0x00040005,0x00000417,0x636f6c62, + 0x0000006b,0x00040005,0x00000420,0x6c69546b,0x00000065,0x00030005,0x0000042a,0x0000626d, + 0x00030005,0x0000043b,0x0000636d,0x00030005,0x0000044d,0x00637273,0x00030005,0x00000455, + 0x00003073,0x00030005,0x00000459,0x00003173,0x00030005,0x0000045e,0x00003273,0x00030005, + 0x00000463,0x00003373,0x00030005,0x00000468,0x00000069,0x00030005,0x00000472,0x00000065, + 0x00040005,0x00000475,0x61726170,0x0000006d,0x00040005,0x0000047d,0x61726170,0x0000006d, + 0x00040005,0x00000485,0x61726170,0x0000006d,0x00040005,0x0000048d,0x61726170,0x0000006d, + 0x00030005,0x00000494,0x00006c6a,0x00030005,0x0000049c,0x0000006d,0x00030005,0x000004a4, + 0x00000062,0x00040005,0x000004b5,0x6e774f62,0x00000000,0x00030005,0x000004c1,0x00000069, + 0x00040005,0x000004c9,0x68744f62,0x00007265,0x00030005,0x000004d2,0x0000006d,0x00030005, + 0x000004da,0x00003062,0x00030005,0x000004e9,0x00003162,0x00030005,0x000004fa,0x00003262, + 0x00030005,0x00000509,0x00003362,0x00030005,0x0000051a,0x00313074,0x00040005,0x0000051e, + 0x32313074,0x00000000,0x00030005,0x00000522,0x00006d74,0x00030005,0x00000526,0x00000074, + 0x00030005,0x0000052c,0x00313065,0x00040005,0x00000532,0x32313065,0x00000000,0x00040005, + 0x00000537,0x6e657665,0x00000000,0x00030005,0x0000053c,0x0031306f,0x00040005,0x00000542, + 0x3231306f,0x00000000,0x00030005,0x00000547,0x0064646f,0x00050005,0x0000054c,0x636f6c62, + 0x6d75536b,0x00000000,0x00040005,0x00000550,0x7478656e,0x00000000,0x00030005,0x00000555, + 0x00000069,0x00040005,0x0000055d,0x65646f63,0x00000073,0x00040005,0x00000564,0x61726170, + 0x0000006d,0x00040005,0x00000567,0x61726170,0x0000006d,0x00040005,0x00000593,0x6c695463, + 0x00000065,0x00030005,0x0000059b,0x0000626b,0x00030005,0x000005a3,0x0000706d,0x00030005, + 0x000005ae,0x0000766d,0x00040005,0x000005d2,0x64646170,0x00676e69,0x00040005,0x000005da, + 0x5a707865,0x006f7265,0x00040005,0x000005db,0x61726170,0x0000006d,0x00050005,0x000005df, + 0x72726f63,0x69746365,0x00006e6f,0x00050005,0x000005e6,0x72726f63,0x65746365,0x00000064, + 0x00050005,0x000005eb,0x69636572,0x636f7270,0x00006c61,0x00040005,0x000005f0,0x61726170, + 0x0000006d,0x00040005,0x000005f2,0x6c695463,0x00000065,0x00050005,0x0000060b,0x5474756f, + 0x6e656b6f,0x00000000,0x00030005,0x00000618,0x00637273,0x00030005,0x00000621,0x00003077, + 0x00030005,0x00000625,0x00003177,0x00030005,0x0000062a,0x00000069,0x00030005,0x00000632, + 0x00003070,0x00030005,0x0000063a,0x00003170,0x00030005,0x00000642,0x00003072,0x00030005, + 0x00000648,0x00003172,0x00050005,0x00000651,0x65747441,0x6465646e,0x00000000,0x00060006, + 0x00000651,0x00000000,0x65747461,0x6465646e,0x00003631,0x00030005,0x00000653,0x00000000, + 0x00040005,0x0000065e,0x61726170,0x0000006d,0x00040005,0x00000660,0x61726170,0x0000006d, + 0x00040005,0x00000666,0x6f697250,0x00000072,0x00050006,0x00000666,0x00000000,0x6f697270, + 0x00000072,0x00030005,0x00000668,0x00000000,0x00040005,0x00000669,0x434f4c42,0x0000534b, + 0x00030047,0x00000095,0x00001078,0x00030047,0x00000145,0x0000002a,0x00030047,0x00000151, + 0x0000002a,0x00030047,0x0000015b,0x0000002a,0x00030047,0x00000175,0x0000002a,0x00030047, + 0x00000185,0x0000002a,0x00030047,0x0000018c,0x0000002a,0x00030047,0x00000190,0x0000002a, + 0x00030047,0x00000196,0x0000002a,0x00030047,0x000001c3,0x0000002a,0x00030047,0x000001c7, + 0x0000002a,0x00030047,0x000001ce,0x0000002a,0x00030047,0x000001d1,0x0000002a,0x00030047, + 0x000001d5,0x0000002a,0x00030047,0x000001d9,0x0000002a,0x00040047,0x00000201,0x0000000b, + 0x0000001b,0x00040047,0x00000206,0x0000000b,0x00000028,0x00030047,0x00000209,0x00000000, + 0x00040047,0x00000209,0x0000000b,0x00000029,0x00030047,0x0000020a,0x00000000,0x00040047, + 0x0000020c,0x0000000b,0x0000001a,0x00030047,0x00000218,0x0000002a,0x00030047,0x0000021a, + 0x00000002,0x00050048,0x0000021a,0x00000000,0x00000023,0x00000000,0x00050048,0x0000021a, + 0x00000001,0x00000023,0x00000004,0x00050048,0x0000021a,0x00000002,0x00000023,0x00000008, + 0x00050048,0x0000021a,0x00000003,0x00000023,0x0000000c,0x00040047,0x00000226,0x00000006, + 0x00000004,0x00030047,0x00000227,0x00000002,0x00040048,0x00000227,0x00000000,0x00000018, + 0x00050048,0x00000227,0x00000000,0x00000023,0x00000000,0x00030047,0x00000229,0x00000018, + 0x00040047,0x00000229,0x00000021,0x00000004,0x00040047,0x00000229,0x00000022,0x00000000, + 0x00030047,0x0000023f,0x0000002a,0x00030047,0x00000241,0x0000002a,0x00030047,0x00000245, + 0x0000002a,0x00040047,0x0000024f,0x00000001,0x00000002,0x00040047,0x0000025e,0x00000006, + 0x00000010,0x00030047,0x0000025f,0x00000002,0x00040048,0x0000025f,0x00000000,0x00000018, + 0x00050048,0x0000025f,0x00000000,0x00000023,0x00000000,0x00030047,0x00000261,0x00000018, + 0x00040047,0x00000261,0x00000021,0x00000000,0x00040047,0x00000261,0x00000022,0x00000000, + 0x00040047,0x00000280,0x00000006,0x00000010,0x00030047,0x00000281,0x00000002,0x00040048, + 0x00000281,0x00000000,0x00000018,0x00050048,0x00000281,0x00000000,0x00000023,0x00000000, + 0x00030047,0x00000283,0x00000018,0x00040047,0x00000283,0x00000021,0x00000000,0x00040047, + 0x00000283,0x00000022,0x00000000,0x00040047,0x000002f7,0x00000001,0x00000000,0x00040047, + 0x000002fa,0x00000001,0x00000001,0x00030047,0x000004b4,0x0000002a,0x00030047,0x0000051d, + 0x0000002a,0x00030047,0x00000521,0x0000002a,0x00030047,0x00000525,0x0000002a,0x00030047, + 0x00000531,0x0000002a,0x00030047,0x00000536,0x0000002a,0x00030047,0x0000053b,0x0000002a, + 0x00030047,0x00000541,0x0000002a,0x00030047,0x00000546,0x0000002a,0x00030047,0x0000054b, + 0x0000002a,0x00030047,0x0000054f,0x0000002a,0x00030047,0x00000553,0x0000002a,0x00030047, + 0x000005d5,0x0000002a,0x00030047,0x000005e4,0x0000002a,0x00030047,0x000005e9,0x0000002a, + 0x00030047,0x000005ef,0x0000002a,0x00030047,0x00000639,0x0000002a,0x00030047,0x00000641, + 0x0000002a,0x00040047,0x00000650,0x00000006,0x00000010,0x00030047,0x00000651,0x00000002, + 0x00040048,0x00000651,0x00000000,0x00000019,0x00050048,0x00000651,0x00000000,0x00000023, + 0x00000000,0x00030047,0x00000653,0x00000019,0x00040047,0x00000653,0x00000021,0x00000005, + 0x00040047,0x00000653,0x00000022,0x00000000,0x00040047,0x00000665,0x00000006,0x00000002, + 0x00030047,0x00000666,0x00000002,0x00040048,0x00000666,0x00000000,0x00000018,0x00050048, + 0x00000666,0x00000000,0x00000023,0x00000000,0x00030047,0x00000668,0x00000018,0x00040047, + 0x00000668,0x00000021,0x00000007,0x00040047,0x00000668,0x00000022,0x00000000,0x00020013, + 0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040020, + 0x00000007,0x00000007,0x00000006,0x00040021,0x00000008,0x00000006,0x00000007,0x00030016, + 0x0000000c,0x00000010,0x00040017,0x0000000d,0x0000000c,0x00000002,0x00040020,0x0000000e, + 0x00000007,0x0000000d,0x00040015,0x0000000f,0x00000010,0x00000000,0x00040021,0x00000010, + 0x0000000f,0x0000000e,0x00040015,0x00000016,0x00000020,0x00000000,0x00050021,0x00000017, + 0x00000016,0x0000000e,0x0000000e,0x00040020,0x0000001c,0x00000007,0x00000016,0x00050021, + 0x0000001d,0x00000016,0x0000001c,0x0000001c,0x00040017,0x00000022,0x00000016,0x00000004, + 0x00040020,0x00000023,0x00000007,0x00000022,0x00050021,0x00000024,0x00000022,0x00000023, + 0x00000023,0x00040021,0x00000029,0x00000016,0x0000001c,0x00070021,0x0000002d,0x0000000c, + 0x00000023,0x00000023,0x00000023,0x00000023,0x00040020,0x00000034,0x00000007,0x0000000c, + 0x00020014,0x00000035,0x00040020,0x00000036,0x00000007,0x00000035,0x000c0021,0x00000037, + 0x00000002,0x00000023,0x00000023,0x00000023,0x00000023,0x00000034,0x00000036,0x00000034, + 0x00000023,0x00000023,0x0004002b,0x00000016,0x00000048,0x80000000,0x0004002b,0x00000016, + 0x0000004c,0x7fffffff,0x0004002b,0x00000016,0x0000004f,0x7f800000,0x0004002b,0x00000016, + 0x00000056,0x477ff000,0x0004002b,0x00000016,0x0000005f,0x38800000,0x0004002b,0x00000006, + 0x00000066,0x4b800000,0x0004002b,0x00000006,0x0000006d,0x33800000,0x0004002b,0x00000016, + 0x00000076,0x0000000d,0x0004002b,0x00000016,0x00000078,0x00000001,0x0004002b,0x00000016, + 0x0000007c,0x00000fff,0x0004002b,0x00000016,0x00000080,0xffffe000,0x0004002b,0x0000000c, + 0x0000008a,0x00000000,0x0005002c,0x0000000d,0x0000008b,0x0000008a,0x0000008a,0x00040017, + 0x0000008d,0x00000035,0x00000002,0x00040016,0x00000090,0x00000008,0x00001076,0x00040017, + 0x00000091,0x00000090,0x00000002,0x00040020,0x00000092,0x00000007,0x00000091,0x00040015, + 0x00000096,0x00000008,0x00000000,0x00040017,0x00000097,0x00000096,0x00000002,0x00040020, + 0x00000098,0x00000007,0x00000097,0x0004002b,0x00000016,0x0000009c,0x00000000,0x00040020, + 0x0000009d,0x00000007,0x00000096,0x0004002b,0x00000016,0x000000a4,0x00000008,0x0004002b, + 0x00000016,0x000000aa,0x00000003,0x0004002b,0x00000016,0x000000ab,0x00000108,0x0004002b, + 0x00000016,0x000000ac,0x00000d48,0x0004002b,0x00000016,0x000000b5,0x00000010,0x0004002b, + 0x00000016,0x000000cb,0x00000002,0x0004002b,0x0000000c,0x000000e6,0x00002dbb,0x0005002c, + 0x0000000d,0x000000e7,0x000000e6,0x000000e6,0x0004002b,0x0000000c,0x000000e8,0x00003ed6, + 0x0005002c,0x0000000d,0x000000e9,0x000000e8,0x000000e8,0x0004002b,0x0000000c,0x000000ec, + 0x00003dc2,0x0005002c,0x0000000d,0x000000ed,0x000000ec,0x000000ec,0x0004002b,0x0000000c, + 0x000000ee,0x00003fe9,0x0005002c,0x0000000d,0x000000ef,0x000000ee,0x000000ee,0x0004002b, + 0x00000016,0x000000f6,0x0000ffff,0x0004002b,0x00000016,0x000000f8,0x00000004,0x0004002b, + 0x00000016,0x000000fa,0x00004000,0x0004001c,0x00000111,0x0000000d,0x000000b5,0x00040020, + 0x00000112,0x00000007,0x00000111,0x0004002b,0x00000016,0x00000128,0x0000000c,0x00040015, + 0x00000131,0x00000020,0x00000001,0x0004002b,0x00000131,0x00000132,0x00000001,0x00040017, + 0x00000146,0x00000006,0x00000002,0x00040020,0x00000147,0x00000007,0x00000146,0x00040017, + 0x00000154,0x00000016,0x00000002,0x0004001c,0x0000015c,0x0000000d,0x000000a4,0x00040020, + 0x0000015d,0x00000007,0x0000015c,0x0004001c,0x00000176,0x0000000d,0x000000f8,0x00040020, + 0x00000177,0x00000007,0x00000176,0x0004002b,0x00000131,0x0000017f,0x00000000,0x0004002b, + 0x00000131,0x00000182,0x00000002,0x0004002b,0x00000131,0x00000189,0x00000003,0x0004001c, + 0x0000019d,0x00000022,0x000000f8,0x00040020,0x0000019e,0x00000007,0x0000019d,0x0004002b, + 0x0000000c,0x000001cd,0x000045a8,0x0004001c,0x000001dc,0x00000016,0x000000a4,0x00040020, + 0x000001dd,0x00000007,0x000001dc,0x0004002b,0x00000131,0x000001f1,0x00000004,0x0004002b, + 0x00000131,0x000001f4,0x00000005,0x0004002b,0x00000131,0x000001f7,0x00000006,0x0004002b, + 0x00000131,0x000001fa,0x00000007,0x00040017,0x000001ff,0x00000016,0x00000003,0x00040020, + 0x00000200,0x00000001,0x000001ff,0x0004003b,0x00000200,0x00000201,0x00000001,0x00040020, + 0x00000202,0x00000001,0x00000016,0x0004003b,0x00000202,0x00000206,0x00000001,0x0004003b, + 0x00000202,0x00000209,0x00000001,0x0004003b,0x00000200,0x0000020c,0x00000001,0x0004002b, + 0x00000016,0x00000214,0x000000b0,0x0006001e,0x0000021a,0x00000016,0x00000016,0x00000016, + 0x00000016,0x00040020,0x0000021b,0x00000009,0x0000021a,0x0004003b,0x0000021b,0x0000021c, + 0x00000009,0x00040020,0x0000021d,0x00000009,0x00000016,0x0003001d,0x00000226,0x00000016, + 0x0003001e,0x00000227,0x00000226,0x00040020,0x00000228,0x0000000c,0x00000227,0x0004003b, + 0x00000228,0x00000229,0x0000000c,0x00040020,0x0000022e,0x0000000c,0x00000016,0x0004002b, + 0x00000016,0x0000023a,0x00000006,0x0004002b,0x00000016,0x0000023e,0x00000040,0x0004002b, + 0x00000016,0x00000243,0x0000000f,0x00040032,0x00000016,0x0000024f,0x00000000,0x00060034, + 0x00000035,0x00000250,0x000000ab,0x0000024f,0x0000009c,0x0003001d,0x0000025e,0x00000022, + 0x0003001e,0x0000025f,0x0000025e,0x00040020,0x00000260,0x0000000c,0x0000025f,0x0004003b, + 0x00000260,0x00000261,0x0000000c,0x00040020,0x00000263,0x0000000c,0x00000022,0x0007002c, + 0x00000022,0x00000267,0x0000009c,0x0000009c,0x0000009c,0x0000009c,0x0003001d,0x00000280, + 0x00000022,0x0003001e,0x00000281,0x00000280,0x00040020,0x00000282,0x0000000c,0x00000281, + 0x0004003b,0x00000282,0x00000283,0x0000000c,0x00030029,0x00000035,0x000002b3,0x0004002b, + 0x00000016,0x000002c5,0x000002c0,0x0004001c,0x000002c6,0x00000022,0x000002c5,0x00040020, + 0x000002c7,0x00000004,0x000002c6,0x0004003b,0x000002c7,0x000002c8,0x00000004,0x00040020, + 0x000002d1,0x00000004,0x00000022,0x0004002b,0x00000016,0x000002e5,0x00000020,0x00071168, + 0x000002e7,0x0000000c,0x000000aa,0x000000b5,0x000000b5,0x000000cb,0x0004001c,0x000002e8, + 0x000002e7,0x000000cb,0x00040020,0x000002e9,0x00000007,0x000002e8,0x0004002c,0x000002e7, + 0x000002eb,0x0000008a,0x00040020,0x000002ec,0x00000007,0x000002e7,0x00040032,0x00000016, + 0x000002f7,0x000000c0,0x00040032,0x00000016,0x000002fa,0x000000c0,0x00060034,0x00000016, + 0x000002fb,0x00000086,0x000002fa,0x0000023e,0x00060034,0x00000035,0x00000312,0x000000ab, + 0x0000024f,0x0000009c,0x00060034,0x00000016,0x0000031b,0x00000084,0x000000cb,0x000002fa, + 0x00060034,0x00000016,0x0000031c,0x00000084,0x0000031b,0x000000cb,0x0004001c,0x0000031d, + 0x00000022,0x0000031c,0x00040020,0x0000031e,0x00000004,0x0000031d,0x0004003b,0x0000031e, + 0x0000031f,0x00000004,0x00060034,0x00000016,0x0000033d,0x00000084,0x000002fa,0x000000cb, + 0x0004002b,0x00000016,0x00000355,0x00000005,0x0004002b,0x00000016,0x0000038a,0x00000007, + 0x0004002b,0x00000016,0x000003a1,0x00000009,0x0004002b,0x00000016,0x000003ad,0x0000000a, + 0x0004002b,0x00000016,0x000003b9,0x0000000b,0x0003002a,0x00000035,0x000003c8,0x0004002b, + 0x00000016,0x0000040a,0x00000080,0x00071168,0x00000411,0x00000090,0x000000aa,0x000000b5, + 0x000002e5,0x0000009c,0x00040020,0x00000412,0x00000007,0x00000411,0x00071168,0x00000428, + 0x00000090,0x000000aa,0x000002e5,0x000000b5,0x00000078,0x00040020,0x00000429,0x00000007, + 0x00000428,0x0004001c,0x00000470,0x00000016,0x000000b5,0x00040020,0x00000471,0x00000007, + 0x00000470,0x0004002b,0x00000006,0x000005ec,0x3f800000,0x0003001d,0x00000650,0x00000022, + 0x0003001e,0x00000651,0x00000650,0x00040020,0x00000652,0x0000000c,0x00000651,0x0004003b, + 0x00000652,0x00000653,0x0000000c,0x0006002c,0x000001ff,0x00000664,0x0000040a,0x00000078, + 0x00000078,0x0003001d,0x00000665,0x0000000c,0x0003001e,0x00000666,0x00000665,0x00040020, + 0x00000667,0x0000000c,0x00000666,0x0004003b,0x00000667,0x00000668,0x0000000c,0x00060034, + 0x00000016,0x00000669,0x00000086,0x000002f7,0x0000023e,0x00050036,0x00000002,0x00000004, + 0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x0000001c,0x000001fe,0x00000007, + 0x0004003b,0x0000001c,0x00000205,0x00000007,0x0004003b,0x0000001c,0x00000208,0x00000007, + 0x0004003b,0x0000001c,0x0000020b,0x00000007,0x0004003b,0x0000001c,0x0000020f,0x00000007, + 0x0004003b,0x0000001c,0x00000212,0x00000007,0x0004003b,0x0000001c,0x00000216,0x00000007, + 0x0004003b,0x0000001c,0x00000219,0x00000007,0x0004003b,0x0000001c,0x00000222,0x00000007, + 0x0004003b,0x00000034,0x00000225,0x00000007,0x0004003b,0x0000001c,0x00000233,0x00000007, + 0x0004003b,0x0000001c,0x00000238,0x00000007,0x0004003b,0x0000001c,0x0000023c,0x00000007, + 0x0004003b,0x00000036,0x0000024a,0x00000007,0x0004003b,0x0000001c,0x00000253,0x00000007, + 0x0004003b,0x00000023,0x00000259,0x00000007,0x0004003b,0x00000023,0x0000025b,0x00000007, + 0x0004003b,0x00000023,0x00000269,0x00000007,0x0004003b,0x00000023,0x0000026b,0x00000007, + 0x0004003b,0x0000001c,0x00000275,0x00000007,0x0004003b,0x00000023,0x0000027b,0x00000007, + 0x0004003b,0x00000023,0x0000027d,0x00000007,0x0004003b,0x00000023,0x00000289,0x00000007, + 0x0004003b,0x00000023,0x0000028b,0x00000007,0x0004003b,0x00000023,0x00000294,0x00000007, + 0x0004003b,0x00000023,0x00000296,0x00000007,0x0004003b,0x00000023,0x0000029f,0x00000007, + 0x0004003b,0x00000023,0x000002a1,0x00000007,0x0004003b,0x00000023,0x000002aa,0x00000007, + 0x0004003b,0x00000023,0x000002ac,0x00000007,0x0004003b,0x00000023,0x000002ae,0x00000007, + 0x0004003b,0x00000023,0x000002b0,0x00000007,0x0004003b,0x00000023,0x000002b4,0x00000007, + 0x0004003b,0x00000023,0x000002b6,0x00000007,0x0004003b,0x00000023,0x000002b8,0x00000007, + 0x0004003b,0x00000023,0x000002ba,0x00000007,0x0004003b,0x00000034,0x000002bc,0x00000007, + 0x0004003b,0x00000036,0x000002bd,0x00000007,0x0004003b,0x00000034,0x000002be,0x00000007, + 0x0004003b,0x00000023,0x000002c0,0x00000007,0x0004003b,0x00000023,0x000002c1,0x00000007, + 0x0004003b,0x0000001c,0x000002dd,0x00000007,0x0004003b,0x0000001c,0x000002e0,0x00000007, + 0x0004003b,0x0000001c,0x000002e3,0x00000007,0x0004003b,0x000002e9,0x000002ea,0x00000007, + 0x0004003b,0x00000034,0x000002ef,0x00000007,0x0004003b,0x0000001c,0x000002f0,0x00000007, + 0x0004003b,0x0000001c,0x000002f9,0x00000007,0x0004003b,0x0000001c,0x00000300,0x00000007, + 0x0004003b,0x0000001c,0x00000309,0x00000007,0x0004003b,0x00000036,0x0000030d,0x00000007, + 0x0004003b,0x0000001c,0x00000315,0x00000007,0x0004003b,0x00000023,0x00000324,0x00000007, + 0x0004003b,0x00000023,0x00000333,0x00000007,0x0004003b,0x00000023,0x00000342,0x00000007, + 0x0004003b,0x00000023,0x00000351,0x00000007,0x0004003b,0x0000001c,0x0000035d,0x00000007, + 0x0004003b,0x00000023,0x00000363,0x00000007,0x0004003b,0x00000023,0x00000365,0x00000007, + 0x0004003b,0x00000023,0x0000036e,0x00000007,0x0004003b,0x00000023,0x00000370,0x00000007, + 0x0004003b,0x00000023,0x00000379,0x00000007,0x0004003b,0x00000023,0x0000037b,0x00000007, + 0x0004003b,0x00000023,0x00000384,0x00000007,0x0004003b,0x00000023,0x00000386,0x00000007, + 0x0004003b,0x00000023,0x00000390,0x00000007,0x0004003b,0x00000023,0x00000392,0x00000007, + 0x0004003b,0x00000023,0x0000039b,0x00000007,0x0004003b,0x00000023,0x0000039d,0x00000007, + 0x0004003b,0x00000023,0x000003a7,0x00000007,0x0004003b,0x00000023,0x000003a9,0x00000007, + 0x0004003b,0x00000023,0x000003b3,0x00000007,0x0004003b,0x00000023,0x000003b5,0x00000007, + 0x0004003b,0x00000023,0x000003bf,0x00000007,0x0004003b,0x00000023,0x000003c1,0x00000007, + 0x0004003b,0x00000023,0x000003c3,0x00000007,0x0004003b,0x00000023,0x000003c5,0x00000007, + 0x0004003b,0x00000023,0x000003c9,0x00000007,0x0004003b,0x00000023,0x000003ca,0x00000007, + 0x0004003b,0x00000023,0x000003cb,0x00000007,0x0004003b,0x00000023,0x000003cd,0x00000007, + 0x0004003b,0x00000023,0x000003cf,0x00000007,0x0004003b,0x00000023,0x000003d1,0x00000007, + 0x0004003b,0x00000034,0x000003d3,0x00000007,0x0004003b,0x00000036,0x000003d4,0x00000007, + 0x0004003b,0x00000034,0x000003d5,0x00000007,0x0004003b,0x00000023,0x000003d7,0x00000007, + 0x0004003b,0x00000023,0x000003d8,0x00000007,0x0004003b,0x00000023,0x000003ef,0x00000007, + 0x0004003b,0x00000023,0x000003f2,0x00000007,0x0004003b,0x00000023,0x000003f4,0x00000007, + 0x0004003b,0x00000023,0x000003ff,0x00000007,0x0004003b,0x00000023,0x00000402,0x00000007, + 0x0004003b,0x00000023,0x00000404,0x00000007,0x0004003b,0x00000412,0x00000413,0x00000007, + 0x0004003b,0x0000001c,0x00000417,0x00000007,0x0004003b,0x0000001c,0x00000420,0x00000007, + 0x0004003b,0x00000429,0x0000042a,0x00000007,0x0004003b,0x000002ec,0x0000043b,0x00000007, + 0x0004003b,0x0000001c,0x0000044d,0x00000007,0x0004003b,0x00000023,0x00000455,0x00000007, + 0x0004003b,0x00000023,0x00000459,0x00000007,0x0004003b,0x00000023,0x0000045e,0x00000007, + 0x0004003b,0x00000023,0x00000463,0x00000007,0x0004003b,0x0000001c,0x00000468,0x00000007, + 0x0004003b,0x00000471,0x00000472,0x00000007,0x0004003b,0x0000001c,0x00000475,0x00000007, + 0x0004003b,0x0000001c,0x0000047d,0x00000007,0x0004003b,0x0000001c,0x00000485,0x00000007, + 0x0004003b,0x0000001c,0x0000048d,0x00000007,0x0004003b,0x0000001c,0x00000494,0x00000007, + 0x0004003b,0x0000001c,0x0000049c,0x00000007,0x0004003b,0x0000000e,0x000004a4,0x00000007, + 0x0004003b,0x000001dd,0x000004b5,0x00000007,0x0004003b,0x0000001c,0x000004c1,0x00000007, + 0x0004003b,0x000001dd,0x000004c9,0x00000007,0x0004003b,0x0000001c,0x000004d2,0x00000007, + 0x0004003b,0x0000000e,0x000004da,0x00000007,0x0004003b,0x0000001c,0x000004dd,0x00000007, + 0x0004003b,0x0000000e,0x000004e9,0x00000007,0x0004003b,0x0000001c,0x000004ec,0x00000007, + 0x0004003b,0x0000000e,0x000004fa,0x00000007,0x0004003b,0x0000001c,0x000004fd,0x00000007, + 0x0004003b,0x0000000e,0x00000509,0x00000007,0x0004003b,0x0000001c,0x0000050c,0x00000007, + 0x0004003b,0x0000000e,0x0000051a,0x00000007,0x0004003b,0x0000000e,0x0000051e,0x00000007, + 0x0004003b,0x0000000e,0x00000522,0x00000007,0x0004003b,0x00000177,0x00000526,0x00000007, + 0x0004003b,0x00000034,0x0000052c,0x00000007,0x0004003b,0x00000034,0x00000532,0x00000007, + 0x0004003b,0x00000034,0x00000537,0x00000007,0x0004003b,0x00000034,0x0000053c,0x00000007, + 0x0004003b,0x00000034,0x00000542,0x00000007,0x0004003b,0x00000034,0x00000547,0x00000007, + 0x0004003b,0x00000034,0x0000054c,0x00000007,0x0004003b,0x00000034,0x00000550,0x00000007, + 0x0004003b,0x0000001c,0x00000555,0x00000007,0x0004003b,0x000001dd,0x0000055d,0x00000007, + 0x0004003b,0x0000001c,0x00000564,0x00000007,0x0004003b,0x0000001c,0x00000567,0x00000007, + 0x0004003b,0x0000001c,0x00000593,0x00000007,0x0004003b,0x0000001c,0x0000059b,0x00000007, + 0x0004003b,0x00000412,0x000005a3,0x00000007,0x0004003b,0x00000429,0x000005ae,0x00000007, + 0x0004003b,0x0000001c,0x000005d2,0x00000007,0x0004003b,0x00000034,0x000005da,0x00000007, + 0x0004003b,0x0000001c,0x000005db,0x00000007,0x0004003b,0x00000034,0x000005df,0x00000007, + 0x0004003b,0x00000034,0x000005e6,0x00000007,0x0004003b,0x00000007,0x000005eb,0x00000007, + 0x0004003b,0x00000007,0x000005f0,0x00000007,0x0004003b,0x0000001c,0x000005f2,0x00000007, + 0x0004003b,0x0000001c,0x0000060b,0x00000007,0x0004003b,0x0000001c,0x00000618,0x00000007, + 0x0004003b,0x00000023,0x00000621,0x00000007,0x0004003b,0x00000023,0x00000625,0x00000007, + 0x0004003b,0x0000001c,0x0000062a,0x00000007,0x0004003b,0x00000147,0x00000632,0x00000007, + 0x0004003b,0x00000147,0x0000063a,0x00000007,0x0004003b,0x00000023,0x00000642,0x00000007, + 0x0004003b,0x00000023,0x00000648,0x00000007,0x0004003b,0x00000023,0x0000065e,0x00000007, + 0x0004003b,0x00000023,0x00000660,0x00000007,0x00050041,0x00000202,0x00000203,0x00000201, + 0x0000009c,0x0004003d,0x00000016,0x00000204,0x00000203,0x0003003e,0x000001fe,0x00000204, + 0x0004003d,0x00000016,0x00000207,0x00000206,0x0003003e,0x00000205,0x00000207,0x0004003d, + 0x00000016,0x0000020a,0x00000209,0x0003003e,0x00000208,0x0000020a,0x00050041,0x00000202, + 0x0000020d,0x0000020c,0x0000009c,0x0004003d,0x00000016,0x0000020e,0x0000020d,0x0003003e, + 0x0000020b,0x0000020e,0x00050041,0x00000202,0x00000210,0x0000020c,0x00000078,0x0004003d, + 0x00000016,0x00000211,0x00000210,0x0003003e,0x0000020f,0x00000211,0x0004003d,0x00000016, + 0x00000213,0x00000205,0x00050084,0x00000016,0x00000215,0x00000213,0x00000214,0x0003003e, + 0x00000212,0x00000215,0x0004003d,0x00000016,0x00000217,0x00000205,0x00050084,0x00000016, + 0x00000218,0x00000217,0x000000b5,0x0003003e,0x00000216,0x00000218,0x00050041,0x0000021d, + 0x0000021e,0x0000021c,0x00000182,0x0004003d,0x00000016,0x0000021f,0x0000021e,0x00050084, + 0x00000016,0x00000220,0x0000021f,0x000000aa,0x00050086,0x00000016,0x00000221,0x00000220, + 0x000000a4,0x0003003e,0x00000219,0x00000221,0x0004003d,0x00000016,0x00000223,0x0000020b, + 0x00050084,0x00000016,0x00000224,0x00000223,0x00000128,0x0003003e,0x00000222,0x00000224, + 0x00050041,0x0000021d,0x0000022a,0x0000021c,0x00000189,0x0004003d,0x00000016,0x0000022b, + 0x0000022a,0x0004003d,0x00000016,0x0000022c,0x0000020b,0x00050080,0x00000016,0x0000022d, + 0x0000022b,0x0000022c,0x00060041,0x0000022e,0x0000022f,0x00000229,0x0000017f,0x0000022d, + 0x0004003d,0x00000016,0x00000230,0x0000022f,0x0004007c,0x00000006,0x00000231,0x00000230, + 0x00040073,0x0000000c,0x00000232,0x00000231,0x0003003e,0x00000225,0x00000232,0x00050041, + 0x0000021d,0x00000234,0x0000021c,0x00000182,0x0004003d,0x00000016,0x00000235,0x00000234, + 0x00050084,0x00000016,0x00000236,0x00000235,0x000000aa,0x00050086,0x00000016,0x00000237, + 0x00000236,0x000000b5,0x0003003e,0x00000233,0x00000237,0x0004003d,0x00000016,0x00000239, + 0x0000020b,0x00050084,0x00000016,0x0000023b,0x00000239,0x0000023a,0x0003003e,0x00000238, + 0x0000023b,0x0004003d,0x00000016,0x0000023d,0x0000020f,0x00050084,0x00000016,0x0000023f, + 0x0000023d,0x0000023e,0x0004003d,0x00000016,0x00000240,0x00000216,0x00050080,0x00000016, + 0x00000241,0x0000023f,0x00000240,0x0004003d,0x00000016,0x00000242,0x00000208,0x000500c7, + 0x00000016,0x00000244,0x00000242,0x00000243,0x00050080,0x00000016,0x00000245,0x00000241, + 0x00000244,0x0003003e,0x0000023c,0x00000245,0x0004003d,0x00000016,0x00000246,0x00000208, + 0x000500b0,0x00000035,0x00000247,0x00000246,0x000000b5,0x000300f7,0x00000249,0x00000000, + 0x000400fa,0x00000247,0x00000248,0x00000249,0x000200f8,0x00000248,0x0004003d,0x00000016, + 0x0000024b,0x0000023c,0x00050041,0x0000021d,0x0000024c,0x0000021c,0x0000017f,0x0004003d, + 0x00000016,0x0000024d,0x0000024c,0x000500b0,0x00000035,0x0000024e,0x0000024b,0x0000024d, + 0x0003003e,0x0000024a,0x0000024e,0x000300f7,0x00000252,0x00000000,0x000400fa,0x00000250, + 0x00000251,0x00000274,0x000200f8,0x00000251,0x0004003d,0x00000016,0x00000254,0x0000023c, + 0x0004003d,0x00000016,0x00000255,0x00000233,0x00050084,0x00000016,0x00000256,0x00000254, + 0x00000255,0x0004003d,0x00000016,0x00000257,0x00000238,0x00050080,0x00000016,0x00000258, + 0x00000256,0x00000257,0x0003003e,0x00000253,0x00000258,0x0004003d,0x00000035,0x0000025a, + 0x0000024a,0x000300f7,0x0000025d,0x00000000,0x000400fa,0x0000025a,0x0000025c,0x00000266, + 0x000200f8,0x0000025c,0x0004003d,0x00000016,0x00000262,0x00000253,0x00060041,0x00000263, + 0x00000264,0x00000261,0x0000017f,0x00000262,0x0004003d,0x00000022,0x00000265,0x00000264, + 0x0003003e,0x0000025b,0x00000265,0x000200f9,0x0000025d,0x000200f8,0x00000266,0x0003003e, + 0x0000025b,0x00000267,0x000200f9,0x0000025d,0x000200f8,0x0000025d,0x0004003d,0x00000022, + 0x00000268,0x0000025b,0x0003003e,0x00000259,0x00000268,0x0004003d,0x00000035,0x0000026a, + 0x0000024a,0x000300f7,0x0000026d,0x00000000,0x000400fa,0x0000026a,0x0000026c,0x00000272, + 0x000200f8,0x0000026c,0x0004003d,0x00000016,0x0000026e,0x00000253,0x00050080,0x00000016, + 0x0000026f,0x0000026e,0x00000078,0x00060041,0x00000263,0x00000270,0x00000261,0x0000017f, + 0x0000026f,0x0004003d,0x00000022,0x00000271,0x00000270,0x0003003e,0x0000026b,0x00000271, + 0x000200f9,0x0000026d,0x000200f8,0x00000272,0x0003003e,0x0000026b,0x00000267,0x000200f9, + 0x0000026d,0x000200f8,0x0000026d,0x0004003d,0x00000022,0x00000273,0x0000026b,0x0003003e, + 0x00000269,0x00000273,0x000200f9,0x00000252,0x000200f8,0x00000274,0x0004003d,0x00000016, + 0x00000276,0x0000023c,0x0004003d,0x00000016,0x00000277,0x00000219,0x00050084,0x00000016, + 0x00000278,0x00000276,0x00000277,0x0004003d,0x00000016,0x00000279,0x00000222,0x00050080, + 0x00000016,0x0000027a,0x00000278,0x00000279,0x0003003e,0x00000275,0x0000027a,0x0004003d, + 0x00000035,0x0000027c,0x0000024a,0x000300f7,0x0000027f,0x00000000,0x000400fa,0x0000027c, + 0x0000027e,0x00000287,0x000200f8,0x0000027e,0x0004003d,0x00000016,0x00000284,0x00000275, + 0x00060041,0x00000263,0x00000285,0x00000283,0x0000017f,0x00000284,0x0004003d,0x00000022, + 0x00000286,0x00000285,0x0003003e,0x0000027d,0x00000286,0x000200f9,0x0000027f,0x000200f8, + 0x00000287,0x0003003e,0x0000027d,0x00000267,0x000200f9,0x0000027f,0x000200f8,0x0000027f, + 0x0004003d,0x00000022,0x00000288,0x0000027d,0x0003003e,0x0000027b,0x00000288,0x0004003d, + 0x00000035,0x0000028a,0x0000024a,0x000300f7,0x0000028d,0x00000000,0x000400fa,0x0000028a, + 0x0000028c,0x00000292,0x000200f8,0x0000028c,0x0004003d,0x00000016,0x0000028e,0x00000275, + 0x00050080,0x00000016,0x0000028f,0x0000028e,0x00000078,0x00060041,0x00000263,0x00000290, + 0x00000283,0x0000017f,0x0000028f,0x0004003d,0x00000022,0x00000291,0x00000290,0x0003003e, + 0x0000028b,0x00000291,0x000200f9,0x0000028d,0x000200f8,0x00000292,0x0003003e,0x0000028b, + 0x00000267,0x000200f9,0x0000028d,0x000200f8,0x0000028d,0x0004003d,0x00000022,0x00000293, + 0x0000028b,0x0003003e,0x00000289,0x00000293,0x0004003d,0x00000035,0x00000295,0x0000024a, + 0x000300f7,0x00000298,0x00000000,0x000400fa,0x00000295,0x00000297,0x0000029d,0x000200f8, + 0x00000297,0x0004003d,0x00000016,0x00000299,0x00000275,0x00050080,0x00000016,0x0000029a, + 0x00000299,0x000000cb,0x00060041,0x00000263,0x0000029b,0x00000283,0x0000017f,0x0000029a, + 0x0004003d,0x00000022,0x0000029c,0x0000029b,0x0003003e,0x00000296,0x0000029c,0x000200f9, + 0x00000298,0x000200f8,0x0000029d,0x0003003e,0x00000296,0x00000267,0x000200f9,0x00000298, + 0x000200f8,0x00000298,0x0004003d,0x00000022,0x0000029e,0x00000296,0x0003003e,0x00000294, + 0x0000029e,0x0004003d,0x00000035,0x000002a0,0x0000024a,0x000300f7,0x000002a3,0x00000000, + 0x000400fa,0x000002a0,0x000002a2,0x000002a8,0x000200f8,0x000002a2,0x0004003d,0x00000016, + 0x000002a4,0x00000275,0x00050080,0x00000016,0x000002a5,0x000002a4,0x000000aa,0x00060041, + 0x00000263,0x000002a6,0x00000283,0x0000017f,0x000002a5,0x0004003d,0x00000022,0x000002a7, + 0x000002a6,0x0003003e,0x000002a1,0x000002a7,0x000200f9,0x000002a3,0x000200f8,0x000002a8, + 0x0003003e,0x000002a1,0x00000267,0x000200f9,0x000002a3,0x000200f8,0x000002a3,0x0004003d, + 0x00000022,0x000002a9,0x000002a1,0x0003003e,0x0000029f,0x000002a9,0x0004003d,0x00000022, + 0x000002ab,0x0000027b,0x0003003e,0x000002aa,0x000002ab,0x0004003d,0x00000022,0x000002ad, + 0x00000289,0x0003003e,0x000002ac,0x000002ad,0x0004003d,0x00000022,0x000002af,0x00000294, + 0x0003003e,0x000002ae,0x000002af,0x0004003d,0x00000022,0x000002b1,0x0000029f,0x0003003e, + 0x000002b0,0x000002b1,0x00080039,0x0000000c,0x000002b2,0x00000032,0x000002aa,0x000002ac, + 0x000002ae,0x000002b0,0x0004003d,0x00000022,0x000002b5,0x0000027b,0x0003003e,0x000002b4, + 0x000002b5,0x0004003d,0x00000022,0x000002b7,0x00000289,0x0003003e,0x000002b6,0x000002b7, + 0x0004003d,0x00000022,0x000002b9,0x00000294,0x0003003e,0x000002b8,0x000002b9,0x0004003d, + 0x00000022,0x000002bb,0x0000029f,0x0003003e,0x000002ba,0x000002bb,0x0003003e,0x000002bc, + 0x000002b2,0x0003003e,0x000002bd,0x000002b3,0x0004003d,0x0000000c,0x000002bf,0x00000225, + 0x0003003e,0x000002be,0x000002bf,0x000d0039,0x00000002,0x000002c2,0x00000041,0x000002b4, + 0x000002b6,0x000002b8,0x000002ba,0x000002bc,0x000002bd,0x000002be,0x000002c0,0x000002c1, + 0x0004003d,0x00000022,0x000002c3,0x000002c0,0x0003003e,0x00000259,0x000002c3,0x0004003d, + 0x00000022,0x000002c4,0x000002c1,0x0003003e,0x00000269,0x000002c4,0x000200f9,0x00000252, + 0x000200f8,0x00000252,0x0004003d,0x00000016,0x000002c9,0x00000212,0x0004003d,0x00000016, + 0x000002ca,0x00000208,0x000500c7,0x00000016,0x000002cb,0x000002ca,0x00000243,0x00050084, + 0x00000016,0x000002cc,0x000002cb,0x000000cb,0x00050080,0x00000016,0x000002cd,0x000002c9, + 0x000002cc,0x0004003d,0x00000035,0x000002ce,0x0000024a,0x0004003d,0x00000022,0x000002cf, + 0x00000259,0x000600a9,0x00000022,0x000002d0,0x000002ce,0x000002cf,0x00000267,0x00050041, + 0x000002d1,0x000002d2,0x000002c8,0x000002cd,0x0005003e,0x000002d2,0x000002d0,0x00000028, + 0x000000cb,0x0004003d,0x00000016,0x000002d3,0x00000212,0x0004003d,0x00000016,0x000002d4, + 0x00000208,0x000500c7,0x00000016,0x000002d5,0x000002d4,0x00000243,0x00050084,0x00000016, + 0x000002d6,0x000002d5,0x000000cb,0x00050080,0x00000016,0x000002d7,0x000002d3,0x000002d6, + 0x00050080,0x00000016,0x000002d8,0x000002d7,0x00000078,0x0004003d,0x00000035,0x000002d9, + 0x0000024a,0x0004003d,0x00000022,0x000002da,0x00000269,0x000600a9,0x00000022,0x000002db, + 0x000002d9,0x000002da,0x00000267,0x00050041,0x000002d1,0x000002dc,0x000002c8,0x000002d8, + 0x0005003e,0x000002dc,0x000002db,0x00000028,0x000000cb,0x000200f9,0x00000249,0x000200f8, + 0x00000249,0x0004003d,0x00000016,0x000002de,0x00000208,0x000500c2,0x00000016,0x000002df, + 0x000002de,0x00000078,0x0003003e,0x000002dd,0x000002df,0x0004003d,0x00000016,0x000002e1, + 0x00000208,0x000500c7,0x00000016,0x000002e2,0x000002e1,0x00000078,0x0003003e,0x000002e0, + 0x000002e2,0x0004003d,0x00000016,0x000002e4,0x00000212,0x00050080,0x00000016,0x000002e6, + 0x000002e4,0x000002e5,0x0003003e,0x000002e3,0x000002e6,0x00050041,0x000002ec,0x000002ed, + 0x000002ea,0x0000017f,0x0003003e,0x000002ed,0x000002eb,0x00050041,0x000002ec,0x000002ee, + 0x000002ea,0x00000132,0x0003003e,0x000002ee,0x000002eb,0x0003003e,0x000002ef,0x0000008a, + 0x0003003e,0x000002f0,0x0000009c,0x000200f9,0x000002f1,0x000200f8,0x000002f1,0x000400f6, + 0x000002f3,0x000002f4,0x00000000,0x000200f9,0x000002f5,0x000200f8,0x000002f5,0x0004003d, + 0x00000016,0x000002f6,0x000002f0,0x000500b0,0x00000035,0x000002f8,0x000002f6,0x000002f7, + 0x000400fa,0x000002f8,0x000002f2,0x000002f3,0x000200f8,0x000002f2,0x0004003d,0x00000016, + 0x000002fc,0x000002f0,0x00050082,0x00000016,0x000002fd,0x000002f7,0x000002fc,0x00050086, + 0x00000016,0x000002fe,0x000002fd,0x0000023e,0x0007000c,0x00000016,0x000002ff,0x00000001, + 0x00000026,0x000002fb,0x000002fe,0x0003003e,0x000002f9,0x000002ff,0x000400e0,0x000000cb, + 0x000000cb,0x000000ab,0x0004003d,0x00000016,0x00000301,0x000001fe,0x0003003e,0x00000300, + 0x00000301,0x000200f9,0x00000302,0x000200f8,0x00000302,0x000400f6,0x00000304,0x00000305, + 0x00000000,0x000200f9,0x00000306,0x000200f8,0x00000306,0x0004003d,0x00000016,0x00000307, + 0x00000300,0x000500b0,0x00000035,0x00000308,0x00000307,0x000002fa,0x000400fa,0x00000308, + 0x00000303,0x00000304,0x000200f8,0x00000303,0x0004003d,0x00000016,0x0000030a,0x000002f0, + 0x0004003d,0x00000016,0x0000030b,0x00000300,0x00050080,0x00000016,0x0000030c,0x0000030a, + 0x0000030b,0x0003003e,0x00000309,0x0000030c,0x0004003d,0x00000016,0x0000030e,0x00000309, + 0x00050041,0x0000021d,0x0000030f,0x0000021c,0x0000017f,0x0004003d,0x00000016,0x00000310, + 0x0000030f,0x000500b0,0x00000035,0x00000311,0x0000030e,0x00000310,0x0003003e,0x0000030d, + 0x00000311,0x000300f7,0x00000314,0x00000000,0x000400fa,0x00000312,0x00000313,0x0000035c, + 0x000200f8,0x00000313,0x0004003d,0x00000016,0x00000316,0x00000309,0x0004003d,0x00000016, + 0x00000317,0x00000233,0x00050084,0x00000016,0x00000318,0x00000316,0x00000317,0x0004003d, + 0x00000016,0x00000319,0x00000238,0x00050080,0x00000016,0x0000031a,0x00000318,0x00000319, + 0x0003003e,0x00000315,0x0000031a,0x0004003d,0x00000016,0x00000320,0x00000300,0x00050084, + 0x00000016,0x00000321,0x00000320,0x000000cb,0x00050080,0x00000016,0x00000322,0x0000009c, + 0x00000321,0x0004003d,0x00000035,0x00000323,0x0000030d,0x000300f7,0x00000326,0x00000000, + 0x000400fa,0x00000323,0x00000325,0x0000032b,0x000200f8,0x00000325,0x0004003d,0x00000016, + 0x00000327,0x00000315,0x00050080,0x00000016,0x00000328,0x00000327,0x000000cb,0x00060041, + 0x00000263,0x00000329,0x00000261,0x0000017f,0x00000328,0x0004003d,0x00000022,0x0000032a, + 0x00000329,0x0003003e,0x00000324,0x0000032a,0x000200f9,0x00000326,0x000200f8,0x0000032b, + 0x0003003e,0x00000324,0x00000267,0x000200f9,0x00000326,0x000200f8,0x00000326,0x0004003d, + 0x00000022,0x0000032c,0x00000324,0x00050041,0x000002d1,0x0000032d,0x0000031f,0x00000322, + 0x0005003e,0x0000032d,0x0000032c,0x00000028,0x000000cb,0x0004003d,0x00000016,0x0000032e, + 0x00000300,0x00050084,0x00000016,0x0000032f,0x0000032e,0x000000cb,0x00050080,0x00000016, + 0x00000330,0x0000009c,0x0000032f,0x00050080,0x00000016,0x00000331,0x00000330,0x00000078, + 0x0004003d,0x00000035,0x00000332,0x0000030d,0x000300f7,0x00000335,0x00000000,0x000400fa, + 0x00000332,0x00000334,0x0000033a,0x000200f8,0x00000334,0x0004003d,0x00000016,0x00000336, + 0x00000315,0x00050080,0x00000016,0x00000337,0x00000336,0x000000aa,0x00060041,0x00000263, + 0x00000338,0x00000261,0x0000017f,0x00000337,0x0004003d,0x00000022,0x00000339,0x00000338, + 0x0003003e,0x00000333,0x00000339,0x000200f9,0x00000335,0x000200f8,0x0000033a,0x0003003e, + 0x00000333,0x00000267,0x000200f9,0x00000335,0x000200f8,0x00000335,0x0004003d,0x00000022, + 0x0000033b,0x00000333,0x00050041,0x000002d1,0x0000033c,0x0000031f,0x00000331,0x0005003e, + 0x0000033c,0x0000033b,0x00000028,0x000000cb,0x0004003d,0x00000016,0x0000033e,0x00000300, + 0x00050084,0x00000016,0x0000033f,0x0000033e,0x000000cb,0x00050080,0x00000016,0x00000340, + 0x0000033d,0x0000033f,0x0004003d,0x00000035,0x00000341,0x0000030d,0x000300f7,0x00000344, + 0x00000000,0x000400fa,0x00000341,0x00000343,0x00000349,0x000200f8,0x00000343,0x0004003d, + 0x00000016,0x00000345,0x00000315,0x00050080,0x00000016,0x00000346,0x00000345,0x000000f8, + 0x00060041,0x00000263,0x00000347,0x00000261,0x0000017f,0x00000346,0x0004003d,0x00000022, + 0x00000348,0x00000347,0x0003003e,0x00000342,0x00000348,0x000200f9,0x00000344,0x000200f8, + 0x00000349,0x0003003e,0x00000342,0x00000267,0x000200f9,0x00000344,0x000200f8,0x00000344, + 0x0004003d,0x00000022,0x0000034a,0x00000342,0x00050041,0x000002d1,0x0000034b,0x0000031f, + 0x00000340,0x0005003e,0x0000034b,0x0000034a,0x00000028,0x000000cb,0x0004003d,0x00000016, + 0x0000034c,0x00000300,0x00050084,0x00000016,0x0000034d,0x0000034c,0x000000cb,0x00050080, + 0x00000016,0x0000034e,0x0000033d,0x0000034d,0x00050080,0x00000016,0x0000034f,0x0000034e, + 0x00000078,0x0004003d,0x00000035,0x00000350,0x0000030d,0x000300f7,0x00000353,0x00000000, + 0x000400fa,0x00000350,0x00000352,0x00000359,0x000200f8,0x00000352,0x0004003d,0x00000016, + 0x00000354,0x00000315,0x00050080,0x00000016,0x00000356,0x00000354,0x00000355,0x00060041, + 0x00000263,0x00000357,0x00000261,0x0000017f,0x00000356,0x0004003d,0x00000022,0x00000358, + 0x00000357,0x0003003e,0x00000351,0x00000358,0x000200f9,0x00000353,0x000200f8,0x00000359, + 0x0003003e,0x00000351,0x00000267,0x000200f9,0x00000353,0x000200f8,0x00000353,0x0004003d, + 0x00000022,0x0000035a,0x00000351,0x00050041,0x000002d1,0x0000035b,0x0000031f,0x0000034f, + 0x0005003e,0x0000035b,0x0000035a,0x00000028,0x000000cb,0x000200f9,0x00000314,0x000200f8, + 0x0000035c,0x0004003d,0x00000016,0x0000035e,0x00000309,0x0004003d,0x00000016,0x0000035f, + 0x00000219,0x00050084,0x00000016,0x00000360,0x0000035e,0x0000035f,0x0004003d,0x00000016, + 0x00000361,0x00000222,0x00050080,0x00000016,0x00000362,0x00000360,0x00000361,0x0003003e, + 0x0000035d,0x00000362,0x0004003d,0x00000035,0x00000364,0x0000030d,0x000300f7,0x00000367, + 0x00000000,0x000400fa,0x00000364,0x00000366,0x0000036c,0x000200f8,0x00000366,0x0004003d, + 0x00000016,0x00000368,0x0000035d,0x00050080,0x00000016,0x00000369,0x00000368,0x000000f8, + 0x00060041,0x00000263,0x0000036a,0x00000283,0x0000017f,0x00000369,0x0004003d,0x00000022, + 0x0000036b,0x0000036a,0x0003003e,0x00000365,0x0000036b,0x000200f9,0x00000367,0x000200f8, + 0x0000036c,0x0003003e,0x00000365,0x00000267,0x000200f9,0x00000367,0x000200f8,0x00000367, + 0x0004003d,0x00000022,0x0000036d,0x00000365,0x0003003e,0x00000363,0x0000036d,0x0004003d, + 0x00000035,0x0000036f,0x0000030d,0x000300f7,0x00000372,0x00000000,0x000400fa,0x0000036f, + 0x00000371,0x00000377,0x000200f8,0x00000371,0x0004003d,0x00000016,0x00000373,0x0000035d, + 0x00050080,0x00000016,0x00000374,0x00000373,0x00000355,0x00060041,0x00000263,0x00000375, + 0x00000283,0x0000017f,0x00000374,0x0004003d,0x00000022,0x00000376,0x00000375,0x0003003e, + 0x00000370,0x00000376,0x000200f9,0x00000372,0x000200f8,0x00000377,0x0003003e,0x00000370, + 0x00000267,0x000200f9,0x00000372,0x000200f8,0x00000372,0x0004003d,0x00000022,0x00000378, + 0x00000370,0x0003003e,0x0000036e,0x00000378,0x0004003d,0x00000035,0x0000037a,0x0000030d, + 0x000300f7,0x0000037d,0x00000000,0x000400fa,0x0000037a,0x0000037c,0x00000382,0x000200f8, + 0x0000037c,0x0004003d,0x00000016,0x0000037e,0x0000035d,0x00050080,0x00000016,0x0000037f, + 0x0000037e,0x0000023a,0x00060041,0x00000263,0x00000380,0x00000283,0x0000017f,0x0000037f, + 0x0004003d,0x00000022,0x00000381,0x00000380,0x0003003e,0x0000037b,0x00000381,0x000200f9, + 0x0000037d,0x000200f8,0x00000382,0x0003003e,0x0000037b,0x00000267,0x000200f9,0x0000037d, + 0x000200f8,0x0000037d,0x0004003d,0x00000022,0x00000383,0x0000037b,0x0003003e,0x00000379, + 0x00000383,0x0004003d,0x00000035,0x00000385,0x0000030d,0x000300f7,0x00000388,0x00000000, + 0x000400fa,0x00000385,0x00000387,0x0000038e,0x000200f8,0x00000387,0x0004003d,0x00000016, + 0x00000389,0x0000035d,0x00050080,0x00000016,0x0000038b,0x00000389,0x0000038a,0x00060041, + 0x00000263,0x0000038c,0x00000283,0x0000017f,0x0000038b,0x0004003d,0x00000022,0x0000038d, + 0x0000038c,0x0003003e,0x00000386,0x0000038d,0x000200f9,0x00000388,0x000200f8,0x0000038e, + 0x0003003e,0x00000386,0x00000267,0x000200f9,0x00000388,0x000200f8,0x00000388,0x0004003d, + 0x00000022,0x0000038f,0x00000386,0x0003003e,0x00000384,0x0000038f,0x0004003d,0x00000035, + 0x00000391,0x0000030d,0x000300f7,0x00000394,0x00000000,0x000400fa,0x00000391,0x00000393, + 0x00000399,0x000200f8,0x00000393,0x0004003d,0x00000016,0x00000395,0x0000035d,0x00050080, + 0x00000016,0x00000396,0x00000395,0x000000a4,0x00060041,0x00000263,0x00000397,0x00000283, + 0x0000017f,0x00000396,0x0004003d,0x00000022,0x00000398,0x00000397,0x0003003e,0x00000392, + 0x00000398,0x000200f9,0x00000394,0x000200f8,0x00000399,0x0003003e,0x00000392,0x00000267, + 0x000200f9,0x00000394,0x000200f8,0x00000394,0x0004003d,0x00000022,0x0000039a,0x00000392, + 0x0003003e,0x00000390,0x0000039a,0x0004003d,0x00000035,0x0000039c,0x0000030d,0x000300f7, + 0x0000039f,0x00000000,0x000400fa,0x0000039c,0x0000039e,0x000003a5,0x000200f8,0x0000039e, + 0x0004003d,0x00000016,0x000003a0,0x0000035d,0x00050080,0x00000016,0x000003a2,0x000003a0, + 0x000003a1,0x00060041,0x00000263,0x000003a3,0x00000283,0x0000017f,0x000003a2,0x0004003d, + 0x00000022,0x000003a4,0x000003a3,0x0003003e,0x0000039d,0x000003a4,0x000200f9,0x0000039f, + 0x000200f8,0x000003a5,0x0003003e,0x0000039d,0x00000267,0x000200f9,0x0000039f,0x000200f8, + 0x0000039f,0x0004003d,0x00000022,0x000003a6,0x0000039d,0x0003003e,0x0000039b,0x000003a6, + 0x0004003d,0x00000035,0x000003a8,0x0000030d,0x000300f7,0x000003ab,0x00000000,0x000400fa, + 0x000003a8,0x000003aa,0x000003b1,0x000200f8,0x000003aa,0x0004003d,0x00000016,0x000003ac, + 0x0000035d,0x00050080,0x00000016,0x000003ae,0x000003ac,0x000003ad,0x00060041,0x00000263, + 0x000003af,0x00000283,0x0000017f,0x000003ae,0x0004003d,0x00000022,0x000003b0,0x000003af, + 0x0003003e,0x000003a9,0x000003b0,0x000200f9,0x000003ab,0x000200f8,0x000003b1,0x0003003e, + 0x000003a9,0x00000267,0x000200f9,0x000003ab,0x000200f8,0x000003ab,0x0004003d,0x00000022, + 0x000003b2,0x000003a9,0x0003003e,0x000003a7,0x000003b2,0x0004003d,0x00000035,0x000003b4, + 0x0000030d,0x000300f7,0x000003b7,0x00000000,0x000400fa,0x000003b4,0x000003b6,0x000003bd, + 0x000200f8,0x000003b6,0x0004003d,0x00000016,0x000003b8,0x0000035d,0x00050080,0x00000016, + 0x000003ba,0x000003b8,0x000003b9,0x00060041,0x00000263,0x000003bb,0x00000283,0x0000017f, + 0x000003ba,0x0004003d,0x00000022,0x000003bc,0x000003bb,0x0003003e,0x000003b5,0x000003bc, + 0x000200f9,0x000003b7,0x000200f8,0x000003bd,0x0003003e,0x000003b5,0x00000267,0x000200f9, + 0x000003b7,0x000200f8,0x000003b7,0x0004003d,0x00000022,0x000003be,0x000003b5,0x0003003e, + 0x000003b3,0x000003be,0x0004003d,0x00000022,0x000003c0,0x00000363,0x0003003e,0x000003bf, + 0x000003c0,0x0004003d,0x00000022,0x000003c2,0x0000036e,0x0003003e,0x000003c1,0x000003c2, + 0x0004003d,0x00000022,0x000003c4,0x00000379,0x0003003e,0x000003c3,0x000003c4,0x0004003d, + 0x00000022,0x000003c6,0x00000384,0x0003003e,0x000003c5,0x000003c6,0x00080039,0x0000000c, + 0x000003c7,0x00000032,0x000003bf,0x000003c1,0x000003c3,0x000003c5,0x0004003d,0x00000022, + 0x000003cc,0x00000363,0x0003003e,0x000003cb,0x000003cc,0x0004003d,0x00000022,0x000003ce, + 0x0000036e,0x0003003e,0x000003cd,0x000003ce,0x0004003d,0x00000022,0x000003d0,0x00000379, + 0x0003003e,0x000003cf,0x000003d0,0x0004003d,0x00000022,0x000003d2,0x00000384,0x0003003e, + 0x000003d1,0x000003d2,0x0003003e,0x000003d3,0x000003c7,0x0003003e,0x000003d4,0x000003c8, + 0x0004003d,0x0000000c,0x000003d6,0x00000225,0x0003003e,0x000003d5,0x000003d6,0x000d0039, + 0x00000002,0x000003d9,0x00000041,0x000003cb,0x000003cd,0x000003cf,0x000003d1,0x000003d3, + 0x000003d4,0x000003d5,0x000003d7,0x000003d8,0x0004003d,0x00000022,0x000003da,0x000003d7, + 0x0003003e,0x000003c9,0x000003da,0x0004003d,0x00000022,0x000003db,0x000003d8,0x0003003e, + 0x000003ca,0x000003db,0x0004003d,0x00000016,0x000003dc,0x00000300,0x00050084,0x00000016, + 0x000003dd,0x000003dc,0x000000cb,0x00050080,0x00000016,0x000003de,0x0000009c,0x000003dd, + 0x0004003d,0x00000035,0x000003df,0x0000030d,0x0004003d,0x00000022,0x000003e0,0x000003c9, + 0x000600a9,0x00000022,0x000003e1,0x000003df,0x000003e0,0x00000267,0x00050041,0x000002d1, + 0x000003e2,0x0000031f,0x000003de,0x0005003e,0x000003e2,0x000003e1,0x00000028,0x000000cb, + 0x0004003d,0x00000016,0x000003e3,0x00000300,0x00050084,0x00000016,0x000003e4,0x000003e3, + 0x000000cb,0x00050080,0x00000016,0x000003e5,0x0000009c,0x000003e4,0x00050080,0x00000016, + 0x000003e6,0x000003e5,0x00000078,0x0004003d,0x00000035,0x000003e7,0x0000030d,0x0004003d, + 0x00000022,0x000003e8,0x000003ca,0x000600a9,0x00000022,0x000003e9,0x000003e7,0x000003e8, + 0x00000267,0x00050041,0x000002d1,0x000003ea,0x0000031f,0x000003e6,0x0005003e,0x000003ea, + 0x000003e9,0x00000028,0x000000cb,0x0004003d,0x00000016,0x000003eb,0x00000300,0x00050084, + 0x00000016,0x000003ec,0x000003eb,0x000000cb,0x00050080,0x00000016,0x000003ed,0x0000033d, + 0x000003ec,0x0004003d,0x00000035,0x000003ee,0x0000030d,0x000300f7,0x000003f1,0x00000000, + 0x000400fa,0x000003ee,0x000003f0,0x000003f7,0x000200f8,0x000003f0,0x0004003d,0x00000022, + 0x000003f3,0x00000390,0x0003003e,0x000003f2,0x000003f3,0x0004003d,0x00000022,0x000003f5, + 0x0000039b,0x0003003e,0x000003f4,0x000003f5,0x00060039,0x00000022,0x000003f6,0x00000027, + 0x000003f2,0x000003f4,0x0003003e,0x000003ef,0x000003f6,0x000200f9,0x000003f1,0x000200f8, + 0x000003f7,0x0003003e,0x000003ef,0x00000267,0x000200f9,0x000003f1,0x000200f8,0x000003f1, + 0x0004003d,0x00000022,0x000003f8,0x000003ef,0x00050041,0x000002d1,0x000003f9,0x0000031f, + 0x000003ed,0x0005003e,0x000003f9,0x000003f8,0x00000028,0x000000cb,0x0004003d,0x00000016, + 0x000003fa,0x00000300,0x00050084,0x00000016,0x000003fb,0x000003fa,0x000000cb,0x00050080, + 0x00000016,0x000003fc,0x0000033d,0x000003fb,0x00050080,0x00000016,0x000003fd,0x000003fc, + 0x00000078,0x0004003d,0x00000035,0x000003fe,0x0000030d,0x000300f7,0x00000401,0x00000000, + 0x000400fa,0x000003fe,0x00000400,0x00000407,0x000200f8,0x00000400,0x0004003d,0x00000022, + 0x00000403,0x000003a7,0x0003003e,0x00000402,0x00000403,0x0004003d,0x00000022,0x00000405, + 0x000003b3,0x0003003e,0x00000404,0x00000405,0x00060039,0x00000022,0x00000406,0x00000027, + 0x00000402,0x00000404,0x0003003e,0x000003ff,0x00000406,0x000200f9,0x00000401,0x000200f8, + 0x00000407,0x0003003e,0x000003ff,0x00000267,0x000200f9,0x00000401,0x000200f8,0x00000401, + 0x0004003d,0x00000022,0x00000408,0x000003ff,0x00050041,0x000002d1,0x00000409,0x0000031f, + 0x000003fd,0x0005003e,0x00000409,0x00000408,0x00000028,0x000000cb,0x000200f9,0x00000314, + 0x000200f8,0x00000314,0x000200f9,0x00000305,0x000200f8,0x00000305,0x0004003d,0x00000016, + 0x0000040b,0x00000300,0x00050080,0x00000016,0x0000040c,0x0000040b,0x0000040a,0x0003003e, + 0x00000300,0x0000040c,0x000200f9,0x00000302,0x000200f8,0x00000304,0x000400e0,0x000000cb, + 0x000000cb,0x000000ab,0x0004003d,0x00000016,0x0000040d,0x000002f0,0x000500aa,0x00000035, + 0x0000040e,0x0000040d,0x0000009c,0x000300f7,0x00000410,0x00000000,0x000400fa,0x0000040e, + 0x0000040f,0x00000410,0x000200f8,0x0000040f,0x0004003d,0x00000016,0x00000414,0x00000212, + 0x00050041,0x000002d1,0x00000415,0x000002c8,0x00000414,0x00081169,0x00000411,0x00000416, + 0x00000415,0x0000017f,0x000000cb,0x00000030,0x000000cb,0x0003003e,0x00000413,0x00000416, + 0x000200f9,0x00000410,0x000200f8,0x00000410,0x0003003e,0x00000417,0x0000009c,0x000200f9, + 0x00000418,0x000200f8,0x00000418,0x000400f6,0x0000041a,0x0000041b,0x00000000,0x000200f9, + 0x0000041c,0x000200f8,0x0000041c,0x0004003d,0x00000016,0x0000041d,0x00000417,0x0004003d, + 0x00000016,0x0000041e,0x000002f9,0x000500b0,0x00000035,0x0000041f,0x0000041d,0x0000041e, + 0x000400fa,0x0000041f,0x00000419,0x0000041a,0x000200f8,0x00000419,0x0003003e,0x00000420, + 0x0000009c,0x000200f9,0x00000421,0x000200f8,0x00000421,0x000400f6,0x00000423,0x00000424, + 0x00000001,0x000200f9,0x00000425,0x000200f8,0x00000425,0x0004003d,0x00000016,0x00000426, + 0x00000420,0x000500b0,0x00000035,0x00000427,0x00000426,0x000000f8,0x000400fa,0x00000427, + 0x00000422,0x00000423,0x000200f8,0x00000422,0x0004003d,0x00000016,0x0000042b,0x00000417, + 0x00050084,0x00000016,0x0000042c,0x0000042b,0x0000023e,0x0004003d,0x00000016,0x0000042d, + 0x00000420,0x00050084,0x00000016,0x0000042e,0x0000042d,0x000000b5,0x00050080,0x00000016, + 0x0000042f,0x0000042c,0x0000042e,0x00050084,0x00000016,0x00000430,0x0000042f,0x000000cb, + 0x00050080,0x00000016,0x00000431,0x0000009c,0x00000430,0x00050041,0x000002d1,0x00000432, + 0x0000031f,0x00000431,0x0004003d,0x00000016,0x00000433,0x00000417,0x00050084,0x00000016, + 0x00000434,0x00000433,0x0000023e,0x0004003d,0x00000016,0x00000435,0x00000420,0x00050084, + 0x00000016,0x00000436,0x00000435,0x000000b5,0x00050080,0x00000016,0x00000437,0x00000434, + 0x00000436,0x00050084,0x00000016,0x00000438,0x00000437,0x000000cb,0x00050080,0x00000016, + 0x00000439,0x0000009c,0x00000438,0x00081169,0x00000428,0x0000043a,0x00000432,0x00000132, + 0x000000cb,0x00000030,0x000000cb,0x0003003e,0x0000042a,0x0000043a,0x0003003e,0x0000043b, + 0x000002eb,0x0004003d,0x00000411,0x0000043c,0x00000413,0x0004003d,0x00000428,0x0000043d, + 0x0000042a,0x0004003d,0x000002e7,0x0000043e,0x0000043b,0x0006116b,0x000002e7,0x0000043f, + 0x0000043c,0x0000043d,0x0000043e,0x0003003e,0x0000043b,0x0000043f,0x0004003d,0x000002e7, + 0x00000440,0x0000043b,0x0004003d,0x00000016,0x00000441,0x000002e3,0x0004003d,0x00000016, + 0x00000442,0x00000420,0x00050084,0x00000016,0x00000443,0x00000442,0x000000cb,0x00050080, + 0x00000016,0x00000444,0x00000441,0x00000443,0x00050041,0x000002d1,0x00000445,0x000002c8, + 0x00000444,0x0004003d,0x00000016,0x00000446,0x000002e3,0x0004003d,0x00000016,0x00000447, + 0x00000420,0x00050084,0x00000016,0x00000448,0x00000447,0x000000cb,0x00050080,0x00000016, + 0x00000449,0x00000446,0x00000448,0x0007116a,0x00000445,0x00000440,0x0000017f,0x000003a1, + 0x00000028,0x000000cb,0x000200f9,0x00000424,0x000200f8,0x00000424,0x0004003d,0x00000016, + 0x0000044a,0x00000420,0x00050080,0x00000016,0x0000044b,0x0000044a,0x00000132,0x0003003e, + 0x00000420,0x0000044b,0x000200f9,0x00000421,0x000200f8,0x00000423,0x00040039,0x00000002, + 0x0000044c,0x00000014,0x0004003d,0x00000016,0x0000044e,0x000002e3,0x0004003d,0x00000016, + 0x0000044f,0x000002dd,0x00050084,0x00000016,0x00000450,0x0000044f,0x000003a1,0x00050080, + 0x00000016,0x00000451,0x0000044e,0x00000450,0x0004003d,0x00000016,0x00000452,0x000002e0, + 0x00050084,0x00000016,0x00000453,0x00000452,0x000000f8,0x00050080,0x00000016,0x00000454, + 0x00000451,0x00000453,0x0003003e,0x0000044d,0x00000454,0x0004003d,0x00000016,0x00000456, + 0x0000044d,0x00050041,0x000002d1,0x00000457,0x000002c8,0x00000456,0x0006003d,0x00000022, + 0x00000458,0x00000457,0x00000030,0x000000cb,0x0003003e,0x00000455,0x00000458,0x0004003d, + 0x00000016,0x0000045a,0x0000044d,0x00050080,0x00000016,0x0000045b,0x0000045a,0x00000078, + 0x00050041,0x000002d1,0x0000045c,0x000002c8,0x0000045b,0x0006003d,0x00000022,0x0000045d, + 0x0000045c,0x00000030,0x000000cb,0x0003003e,0x00000459,0x0000045d,0x0004003d,0x00000016, + 0x0000045f,0x0000044d,0x00050080,0x00000016,0x00000460,0x0000045f,0x000000cb,0x00050041, + 0x000002d1,0x00000461,0x000002c8,0x00000460,0x0006003d,0x00000022,0x00000462,0x00000461, + 0x00000030,0x000000cb,0x0003003e,0x0000045e,0x00000462,0x0004003d,0x00000016,0x00000464, + 0x0000044d,0x00050080,0x00000016,0x00000465,0x00000464,0x000000aa,0x00050041,0x000002d1, + 0x00000466,0x000002c8,0x00000465,0x0006003d,0x00000022,0x00000467,0x00000466,0x00000030, + 0x000000cb,0x0003003e,0x00000463,0x00000467,0x0003003e,0x00000468,0x0000009c,0x000200f9, + 0x00000469,0x000200f8,0x00000469,0x000400f6,0x0000046b,0x0000046c,0x00000001,0x000200f9, + 0x0000046d,0x000200f8,0x0000046d,0x0004003d,0x00000016,0x0000046e,0x00000468,0x000500b0, + 0x00000035,0x0000046f,0x0000046e,0x000000f8,0x000400fa,0x0000046f,0x0000046a,0x0000046b, + 0x000200f8,0x0000046a,0x0004003d,0x00000016,0x00000473,0x00000468,0x0004003d,0x00000016, + 0x00000474,0x00000468,0x00050041,0x0000001c,0x00000476,0x00000455,0x00000474,0x0004003d, + 0x00000016,0x00000477,0x00000476,0x0003003e,0x00000475,0x00000477,0x00050039,0x00000016, + 0x00000478,0x0000002b,0x00000475,0x00050041,0x0000001c,0x00000479,0x00000472,0x00000473, + 0x0003003e,0x00000479,0x00000478,0x0004003d,0x00000016,0x0000047a,0x00000468,0x00050080, + 0x00000016,0x0000047b,0x000000f8,0x0000047a,0x0004003d,0x00000016,0x0000047c,0x00000468, + 0x00050041,0x0000001c,0x0000047e,0x00000459,0x0000047c,0x0004003d,0x00000016,0x0000047f, + 0x0000047e,0x0003003e,0x0000047d,0x0000047f,0x00050039,0x00000016,0x00000480,0x0000002b, + 0x0000047d,0x00050041,0x0000001c,0x00000481,0x00000472,0x0000047b,0x0003003e,0x00000481, + 0x00000480,0x0004003d,0x00000016,0x00000482,0x00000468,0x00050080,0x00000016,0x00000483, + 0x000000a4,0x00000482,0x0004003d,0x00000016,0x00000484,0x00000468,0x00050041,0x0000001c, + 0x00000486,0x0000045e,0x00000484,0x0004003d,0x00000016,0x00000487,0x00000486,0x0003003e, + 0x00000485,0x00000487,0x00050039,0x00000016,0x00000488,0x0000002b,0x00000485,0x00050041, + 0x0000001c,0x00000489,0x00000472,0x00000483,0x0003003e,0x00000489,0x00000488,0x0004003d, + 0x00000016,0x0000048a,0x00000468,0x00050080,0x00000016,0x0000048b,0x00000128,0x0000048a, + 0x0004003d,0x00000016,0x0000048c,0x00000468,0x00050041,0x0000001c,0x0000048e,0x00000463, + 0x0000048c,0x0004003d,0x00000016,0x0000048f,0x0000048e,0x0003003e,0x0000048d,0x0000048f, + 0x00050039,0x00000016,0x00000490,0x0000002b,0x0000048d,0x00050041,0x0000001c,0x00000491, + 0x00000472,0x0000048b,0x0003003e,0x00000491,0x00000490,0x000200f9,0x0000046c,0x000200f8, + 0x0000046c,0x0004003d,0x00000016,0x00000492,0x00000468,0x00050080,0x00000016,0x00000493, + 0x00000492,0x00000132,0x0003003e,0x00000468,0x00000493,0x000200f9,0x00000469,0x000200f8, + 0x0000046b,0x0003003e,0x00000494,0x0000009c,0x000200f9,0x00000495,0x000200f8,0x00000495, + 0x000400f6,0x00000497,0x00000498,0x00000001,0x000200f9,0x00000499,0x000200f8,0x00000499, + 0x0004003d,0x00000016,0x0000049a,0x00000494,0x000500b0,0x00000035,0x0000049b,0x0000049a, + 0x000000cb,0x000400fa,0x0000049b,0x00000496,0x00000497,0x000200f8,0x00000496,0x0003003e, + 0x0000049c,0x0000009c,0x000200f9,0x0000049d,0x000200f8,0x0000049d,0x000400f6,0x0000049f, + 0x000004a0,0x00000001,0x000200f9,0x000004a1,0x000200f8,0x000004a1,0x0004003d,0x00000016, + 0x000004a2,0x0000049c,0x000500b0,0x00000035,0x000004a3,0x000004a2,0x000000f8,0x000400fa, + 0x000004a3,0x0000049e,0x0000049f,0x000200f8,0x0000049e,0x0004003d,0x00000016,0x000004a5, + 0x00000494,0x00050084,0x00000016,0x000004a6,0x000000a4,0x000004a5,0x0004003d,0x00000016, + 0x000004a7,0x0000049c,0x00050080,0x00000016,0x000004a8,0x000004a6,0x000004a7,0x00050041, + 0x0000001c,0x000004a9,0x00000472,0x000004a8,0x0004003d,0x00000016,0x000004aa,0x000004a9, + 0x0004007c,0x0000000d,0x000004ab,0x000004aa,0x0004003d,0x00000016,0x000004ac,0x00000494, + 0x00050084,0x00000016,0x000004ad,0x000000a4,0x000004ac,0x00050080,0x00000016,0x000004ae, + 0x000004ad,0x000000f8,0x0004003d,0x00000016,0x000004af,0x0000049c,0x00050080,0x00000016, + 0x000004b0,0x000004ae,0x000004af,0x00050041,0x0000001c,0x000004b1,0x00000472,0x000004b0, + 0x0004003d,0x00000016,0x000004b2,0x000004b1,0x0004007c,0x0000000d,0x000004b3,0x000004b2, + 0x00050081,0x0000000d,0x000004b4,0x000004ab,0x000004b3,0x0003003e,0x000004a4,0x000004b4, + 0x0004003d,0x00000016,0x000004b6,0x00000494,0x00050084,0x00000016,0x000004b7,0x000004b6, + 0x000000f8,0x0004003d,0x00000016,0x000004b8,0x0000049c,0x00050080,0x00000016,0x000004b9, + 0x000004b7,0x000004b8,0x0004003d,0x0000000d,0x000004ba,0x000004a4,0x0004007c,0x00000016, + 0x000004bb,0x000004ba,0x00050041,0x0000001c,0x000004bc,0x000004b5,0x000004b9,0x0003003e, + 0x000004bc,0x000004bb,0x000200f9,0x000004a0,0x000200f8,0x000004a0,0x0004003d,0x00000016, + 0x000004bd,0x0000049c,0x00050080,0x00000016,0x000004be,0x000004bd,0x00000132,0x0003003e, + 0x0000049c,0x000004be,0x000200f9,0x0000049d,0x000200f8,0x0000049f,0x000200f9,0x00000498, + 0x000200f8,0x00000498,0x0004003d,0x00000016,0x000004bf,0x00000494,0x00050080,0x00000016, + 0x000004c0,0x000004bf,0x00000132,0x0003003e,0x00000494,0x000004c0,0x000200f9,0x00000495, + 0x000200f8,0x00000497,0x0003003e,0x000004c1,0x0000009c,0x000200f9,0x000004c2,0x000200f8, + 0x000004c2,0x000400f6,0x000004c4,0x000004c5,0x00000001,0x000200f9,0x000004c6,0x000200f8, + 0x000004c6,0x0004003d,0x00000016,0x000004c7,0x000004c1,0x000500b0,0x00000035,0x000004c8, + 0x000004c7,0x000000a4,0x000400fa,0x000004c8,0x000004c3,0x000004c4,0x000200f8,0x000004c3, + 0x0004003d,0x00000016,0x000004ca,0x000004c1,0x0004003d,0x00000016,0x000004cb,0x000004c1, + 0x00050041,0x0000001c,0x000004cc,0x000004b5,0x000004cb,0x0004003d,0x00000016,0x000004cd, + 0x000004cc,0x0006015a,0x00000016,0x000004ce,0x000000aa,0x000004cd,0x00000078,0x00050041, + 0x0000001c,0x000004cf,0x000004c9,0x000004ca,0x0003003e,0x000004cf,0x000004ce,0x000200f9, + 0x000004c5,0x000200f8,0x000004c5,0x0004003d,0x00000016,0x000004d0,0x000004c1,0x00050080, + 0x00000016,0x000004d1,0x000004d0,0x00000132,0x0003003e,0x000004c1,0x000004d1,0x000200f9, + 0x000004c2,0x000200f8,0x000004c4,0x0003003e,0x000004d2,0x0000009c,0x000200f9,0x000004d3, + 0x000200f8,0x000004d3,0x000400f6,0x000004d5,0x000004d6,0x00000001,0x000200f9,0x000004d7, + 0x000200f8,0x000004d7,0x0004003d,0x00000016,0x000004d8,0x000004d2,0x000500b0,0x00000035, + 0x000004d9,0x000004d8,0x000000f8,0x000400fa,0x000004d9,0x000004d4,0x000004d5,0x000200f8, + 0x000004d4,0x0004003d,0x00000016,0x000004db,0x000002e0,0x000500aa,0x00000035,0x000004dc, + 0x000004db,0x0000009c,0x000300f7,0x000004df,0x00000000,0x000400fa,0x000004dc,0x000004de, + 0x000004e3,0x000200f8,0x000004de,0x0004003d,0x00000016,0x000004e0,0x000004d2,0x00050041, + 0x0000001c,0x000004e1,0x000004b5,0x000004e0,0x0004003d,0x00000016,0x000004e2,0x000004e1, + 0x0003003e,0x000004dd,0x000004e2,0x000200f9,0x000004df,0x000200f8,0x000004e3,0x0004003d, + 0x00000016,0x000004e4,0x000004d2,0x00050041,0x0000001c,0x000004e5,0x000004c9,0x000004e4, + 0x0004003d,0x00000016,0x000004e6,0x000004e5,0x0003003e,0x000004dd,0x000004e6,0x000200f9, + 0x000004df,0x000200f8,0x000004df,0x0004003d,0x00000016,0x000004e7,0x000004dd,0x0004007c, + 0x0000000d,0x000004e8,0x000004e7,0x0003003e,0x000004da,0x000004e8,0x0004003d,0x00000016, + 0x000004ea,0x000002e0,0x000500aa,0x00000035,0x000004eb,0x000004ea,0x0000009c,0x000300f7, + 0x000004ee,0x00000000,0x000400fa,0x000004eb,0x000004ed,0x000004f3,0x000200f8,0x000004ed, + 0x0004003d,0x00000016,0x000004ef,0x000004d2,0x00050080,0x00000016,0x000004f0,0x000000f8, + 0x000004ef,0x00050041,0x0000001c,0x000004f1,0x000004b5,0x000004f0,0x0004003d,0x00000016, + 0x000004f2,0x000004f1,0x0003003e,0x000004ec,0x000004f2,0x000200f9,0x000004ee,0x000200f8, + 0x000004f3,0x0004003d,0x00000016,0x000004f4,0x000004d2,0x00050080,0x00000016,0x000004f5, + 0x000000f8,0x000004f4,0x00050041,0x0000001c,0x000004f6,0x000004c9,0x000004f5,0x0004003d, + 0x00000016,0x000004f7,0x000004f6,0x0003003e,0x000004ec,0x000004f7,0x000200f9,0x000004ee, + 0x000200f8,0x000004ee,0x0004003d,0x00000016,0x000004f8,0x000004ec,0x0004007c,0x0000000d, + 0x000004f9,0x000004f8,0x0003003e,0x000004e9,0x000004f9,0x0004003d,0x00000016,0x000004fb, + 0x000002e0,0x000500aa,0x00000035,0x000004fc,0x000004fb,0x0000009c,0x000300f7,0x000004ff, + 0x00000000,0x000400fa,0x000004fc,0x000004fe,0x00000503,0x000200f8,0x000004fe,0x0004003d, + 0x00000016,0x00000500,0x000004d2,0x00050041,0x0000001c,0x00000501,0x000004c9,0x00000500, + 0x0004003d,0x00000016,0x00000502,0x00000501,0x0003003e,0x000004fd,0x00000502,0x000200f9, + 0x000004ff,0x000200f8,0x00000503,0x0004003d,0x00000016,0x00000504,0x000004d2,0x00050041, + 0x0000001c,0x00000505,0x000004b5,0x00000504,0x0004003d,0x00000016,0x00000506,0x00000505, + 0x0003003e,0x000004fd,0x00000506,0x000200f9,0x000004ff,0x000200f8,0x000004ff,0x0004003d, + 0x00000016,0x00000507,0x000004fd,0x0004007c,0x0000000d,0x00000508,0x00000507,0x0003003e, + 0x000004fa,0x00000508,0x0004003d,0x00000016,0x0000050a,0x000002e0,0x000500aa,0x00000035, + 0x0000050b,0x0000050a,0x0000009c,0x000300f7,0x0000050e,0x00000000,0x000400fa,0x0000050b, + 0x0000050d,0x00000513,0x000200f8,0x0000050d,0x0004003d,0x00000016,0x0000050f,0x000004d2, + 0x00050080,0x00000016,0x00000510,0x000000f8,0x0000050f,0x00050041,0x0000001c,0x00000511, + 0x000004c9,0x00000510,0x0004003d,0x00000016,0x00000512,0x00000511,0x0003003e,0x0000050c, + 0x00000512,0x000200f9,0x0000050e,0x000200f8,0x00000513,0x0004003d,0x00000016,0x00000514, + 0x000004d2,0x00050080,0x00000016,0x00000515,0x000000f8,0x00000514,0x00050041,0x0000001c, + 0x00000516,0x000004b5,0x00000515,0x0004003d,0x00000016,0x00000517,0x00000516,0x0003003e, + 0x0000050c,0x00000517,0x000200f9,0x0000050e,0x000200f8,0x0000050e,0x0004003d,0x00000016, + 0x00000518,0x0000050c,0x0004007c,0x0000000d,0x00000519,0x00000518,0x0003003e,0x00000509, + 0x00000519,0x0004003d,0x0000000d,0x0000051b,0x000004da,0x0004003d,0x0000000d,0x0000051c, + 0x000004e9,0x00050081,0x0000000d,0x0000051d,0x0000051b,0x0000051c,0x0003003e,0x0000051a, + 0x0000051d,0x0004003d,0x0000000d,0x0000051f,0x0000051a,0x0004003d,0x0000000d,0x00000520, + 0x000004fa,0x00050081,0x0000000d,0x00000521,0x0000051f,0x00000520,0x0003003e,0x0000051e, + 0x00000521,0x0004003d,0x0000000d,0x00000523,0x0000051e,0x0004003d,0x0000000d,0x00000524, + 0x00000509,0x00050081,0x0000000d,0x00000525,0x00000523,0x00000524,0x0003003e,0x00000522, + 0x00000525,0x0004003d,0x00000016,0x00000527,0x000004d2,0x0004003d,0x0000000d,0x00000528, + 0x00000522,0x00050041,0x0000000e,0x00000529,0x00000526,0x00000527,0x0003003e,0x00000529, + 0x00000528,0x000200f9,0x000004d6,0x000200f8,0x000004d6,0x0004003d,0x00000016,0x0000052a, + 0x000004d2,0x00050080,0x00000016,0x0000052b,0x0000052a,0x00000132,0x0003003e,0x000004d2, + 0x0000052b,0x000200f9,0x000004d3,0x000200f8,0x000004d5,0x00060041,0x00000034,0x0000052d, + 0x00000526,0x0000017f,0x0000009c,0x0004003d,0x0000000c,0x0000052e,0x0000052d,0x00060041, + 0x00000034,0x0000052f,0x00000526,0x00000132,0x0000009c,0x0004003d,0x0000000c,0x00000530, + 0x0000052f,0x00050081,0x0000000c,0x00000531,0x0000052e,0x00000530,0x0003003e,0x0000052c, + 0x00000531,0x0004003d,0x0000000c,0x00000533,0x0000052c,0x00060041,0x00000034,0x00000534, + 0x00000526,0x00000182,0x0000009c,0x0004003d,0x0000000c,0x00000535,0x00000534,0x00050081, + 0x0000000c,0x00000536,0x00000533,0x00000535,0x0003003e,0x00000532,0x00000536,0x0004003d, + 0x0000000c,0x00000538,0x00000532,0x00060041,0x00000034,0x00000539,0x00000526,0x00000189, + 0x0000009c,0x0004003d,0x0000000c,0x0000053a,0x00000539,0x00050081,0x0000000c,0x0000053b, + 0x00000538,0x0000053a,0x0003003e,0x00000537,0x0000053b,0x00060041,0x00000034,0x0000053d, + 0x00000526,0x0000017f,0x00000078,0x0004003d,0x0000000c,0x0000053e,0x0000053d,0x00060041, + 0x00000034,0x0000053f,0x00000526,0x00000132,0x00000078,0x0004003d,0x0000000c,0x00000540, + 0x0000053f,0x00050081,0x0000000c,0x00000541,0x0000053e,0x00000540,0x0003003e,0x0000053c, + 0x00000541,0x0004003d,0x0000000c,0x00000543,0x0000053c,0x00060041,0x00000034,0x00000544, + 0x00000526,0x00000182,0x00000078,0x0004003d,0x0000000c,0x00000545,0x00000544,0x00050081, + 0x0000000c,0x00000546,0x00000543,0x00000545,0x0003003e,0x00000542,0x00000546,0x0004003d, + 0x0000000c,0x00000548,0x00000542,0x00060041,0x00000034,0x00000549,0x00000526,0x00000189, + 0x00000078,0x0004003d,0x0000000c,0x0000054a,0x00000549,0x00050081,0x0000000c,0x0000054b, + 0x00000548,0x0000054a,0x0003003e,0x00000547,0x0000054b,0x0004003d,0x0000000c,0x0000054d, + 0x00000537,0x0004003d,0x0000000c,0x0000054e,0x00000547,0x00050081,0x0000000c,0x0000054f, + 0x0000054d,0x0000054e,0x0003003e,0x0000054c,0x0000054f,0x0004003d,0x0000000c,0x00000551, + 0x000002ef,0x0004003d,0x0000000c,0x00000552,0x0000054c,0x00050081,0x0000000c,0x00000553, + 0x00000551,0x00000552,0x0003003e,0x00000550,0x00000553,0x0004003d,0x0000000c,0x00000554, + 0x00000550,0x0003003e,0x000002ef,0x00000554,0x0003003e,0x00000555,0x0000009c,0x000200f9, + 0x00000556,0x000200f8,0x00000556,0x000400f6,0x00000558,0x00000559,0x00000001,0x000200f9, + 0x0000055a,0x000200f8,0x0000055a,0x0004003d,0x00000016,0x0000055b,0x00000555,0x000500b0, + 0x00000035,0x0000055c,0x0000055b,0x000000a4,0x000400fa,0x0000055c,0x00000557,0x00000558, + 0x000200f8,0x00000557,0x0004003d,0x00000016,0x0000055e,0x00000555,0x0004003d,0x00000016, + 0x0000055f,0x00000555,0x00050084,0x00000016,0x00000560,0x000000cb,0x0000055f,0x0004003d, + 0x00000016,0x00000561,0x00000555,0x00050084,0x00000016,0x00000562,0x000000cb,0x00000561, + 0x00050080,0x00000016,0x00000563,0x00000562,0x00000078,0x00050041,0x0000001c,0x00000565, + 0x00000472,0x00000560,0x0004003d,0x00000016,0x00000566,0x00000565,0x0003003e,0x00000564, + 0x00000566,0x00050041,0x0000001c,0x00000568,0x00000472,0x00000563,0x0004003d,0x00000016, + 0x00000569,0x00000568,0x0003003e,0x00000567,0x00000569,0x00060039,0x00000016,0x0000056a, + 0x00000020,0x00000564,0x00000567,0x00050041,0x0000001c,0x0000056b,0x0000055d,0x0000055e, + 0x0003003e,0x0000056b,0x0000056a,0x000200f9,0x00000559,0x000200f8,0x00000559,0x0004003d, + 0x00000016,0x0000056c,0x00000555,0x00050080,0x00000016,0x0000056d,0x0000056c,0x00000132, + 0x0003003e,0x00000555,0x0000056d,0x000200f9,0x00000556,0x000200f8,0x00000558,0x00040039, + 0x00000002,0x0000056e,0x00000014,0x0004003d,0x00000016,0x0000056f,0x000002e3,0x0004003d, + 0x00000016,0x00000570,0x000002dd,0x00050084,0x00000016,0x00000571,0x00000570,0x000003a1, + 0x00050080,0x00000016,0x00000572,0x0000056f,0x00000571,0x0004003d,0x00000016,0x00000573, + 0x000002e0,0x00050084,0x00000016,0x00000574,0x00000573,0x000000cb,0x00050080,0x00000016, + 0x00000575,0x00000572,0x00000574,0x00050041,0x0000001c,0x00000576,0x0000055d,0x0000017f, + 0x0004003d,0x00000016,0x00000577,0x00000576,0x00050041,0x0000001c,0x00000578,0x0000055d, + 0x00000132,0x0004003d,0x00000016,0x00000579,0x00000578,0x00050041,0x0000001c,0x0000057a, + 0x0000055d,0x00000182,0x0004003d,0x00000016,0x0000057b,0x0000057a,0x00050041,0x0000001c, + 0x0000057c,0x0000055d,0x00000189,0x0004003d,0x00000016,0x0000057d,0x0000057c,0x00070050, + 0x00000022,0x0000057e,0x00000577,0x00000579,0x0000057b,0x0000057d,0x00050041,0x000002d1, + 0x0000057f,0x000002c8,0x00000575,0x0005003e,0x0000057f,0x0000057e,0x00000028,0x000000cb, + 0x0004003d,0x00000016,0x00000580,0x000002e3,0x0004003d,0x00000016,0x00000581,0x000002dd, + 0x00050084,0x00000016,0x00000582,0x00000581,0x000003a1,0x00050080,0x00000016,0x00000583, + 0x00000580,0x00000582,0x0004003d,0x00000016,0x00000584,0x000002e0,0x00050084,0x00000016, + 0x00000585,0x00000584,0x000000cb,0x00050080,0x00000016,0x00000586,0x00000583,0x00000585, + 0x00050080,0x00000016,0x00000587,0x00000586,0x00000078,0x00050041,0x0000001c,0x00000588, + 0x0000055d,0x000001f1,0x0004003d,0x00000016,0x00000589,0x00000588,0x00050041,0x0000001c, + 0x0000058a,0x0000055d,0x000001f4,0x0004003d,0x00000016,0x0000058b,0x0000058a,0x00050041, + 0x0000001c,0x0000058c,0x0000055d,0x000001f7,0x0004003d,0x00000016,0x0000058d,0x0000058c, + 0x00050041,0x0000001c,0x0000058e,0x0000055d,0x000001fa,0x0004003d,0x00000016,0x0000058f, + 0x0000058e,0x00070050,0x00000022,0x00000590,0x00000589,0x0000058b,0x0000058d,0x0000058f, + 0x00050041,0x000002d1,0x00000591,0x000002c8,0x00000587,0x0005003e,0x00000591,0x00000590, + 0x00000028,0x000000cb,0x00040039,0x00000002,0x00000592,0x00000014,0x0003003e,0x00000593, + 0x0000009c,0x000200f9,0x00000594,0x000200f8,0x00000594,0x000400f6,0x00000596,0x00000597, + 0x00000001,0x000200f9,0x00000598,0x000200f8,0x00000598,0x0004003d,0x00000016,0x00000599, + 0x00000593,0x000500b0,0x00000035,0x0000059a,0x00000599,0x000000cb,0x000400fa,0x0000059a, + 0x00000595,0x00000596,0x000200f8,0x00000595,0x0003003e,0x0000059b,0x0000009c,0x000200f9, + 0x0000059c,0x000200f8,0x0000059c,0x000400f6,0x0000059e,0x0000059f,0x00000001,0x000200f9, + 0x000005a0,0x000200f8,0x000005a0,0x0004003d,0x00000016,0x000005a1,0x0000059b,0x000500b0, + 0x00000035,0x000005a2,0x000005a1,0x0000023e,0x000400fa,0x000005a2,0x0000059d,0x0000059e, + 0x000200f8,0x0000059d,0x0004003d,0x00000016,0x000005a4,0x000002e3,0x0004003d,0x00000016, + 0x000005a5,0x0000059b,0x000500c2,0x00000016,0x000005a6,0x000005a5,0x000000f8,0x00050080, + 0x00000016,0x000005a7,0x000005a4,0x000005a6,0x00050041,0x000002d1,0x000005a8,0x000002c8, + 0x000005a7,0x0004003d,0x00000016,0x000005a9,0x000002e3,0x0004003d,0x00000016,0x000005aa, + 0x0000059b,0x000500c2,0x00000016,0x000005ab,0x000005aa,0x000000f8,0x00050080,0x00000016, + 0x000005ac,0x000005a9,0x000005ab,0x00081169,0x00000411,0x000005ad,0x000005a8,0x0000017f, + 0x000003a1,0x00000030,0x000000cb,0x0003003e,0x000005a3,0x000005ad,0x0004003d,0x00000016, + 0x000005af,0x00000417,0x00050084,0x00000016,0x000005b0,0x000005af,0x0000023e,0x0004003d, + 0x00000016,0x000005b1,0x0000059b,0x00050080,0x00000016,0x000005b2,0x000005b0,0x000005b1, + 0x00050084,0x00000016,0x000005b3,0x000005b2,0x000000cb,0x00050080,0x00000016,0x000005b4, + 0x0000033d,0x000005b3,0x0004003d,0x00000016,0x000005b5,0x00000593,0x00050080,0x00000016, + 0x000005b6,0x000005b4,0x000005b5,0x00050041,0x000002d1,0x000005b7,0x0000031f,0x000005b6, + 0x0004003d,0x00000016,0x000005b8,0x00000417,0x00050084,0x00000016,0x000005b9,0x000005b8, + 0x0000023e,0x0004003d,0x00000016,0x000005ba,0x0000059b,0x00050080,0x00000016,0x000005bb, + 0x000005b9,0x000005ba,0x00050084,0x00000016,0x000005bc,0x000005bb,0x000000cb,0x00050080, + 0x00000016,0x000005bd,0x0000033d,0x000005bc,0x0004003d,0x00000016,0x000005be,0x00000593, + 0x00050080,0x00000016,0x000005bf,0x000005bd,0x000005be,0x00081169,0x00000428,0x000005c0, + 0x000005b7,0x0000017f,0x000000cb,0x00000030,0x000000cb,0x0003003e,0x000005ae,0x000005c0, + 0x0004003d,0x00000016,0x000005c1,0x00000593,0x0004003d,0x00000411,0x000005c2,0x000005a3, + 0x0004003d,0x00000428,0x000005c3,0x000005ae,0x0004003d,0x00000016,0x000005c4,0x00000593, + 0x00050041,0x000002ec,0x000005c5,0x000002ea,0x000005c4,0x0004003d,0x000002e7,0x000005c6, + 0x000005c5,0x0006116b,0x000002e7,0x000005c7,0x000005c2,0x000005c3,0x000005c6,0x00050041, + 0x000002ec,0x000005c8,0x000002ea,0x000005c1,0x0003003e,0x000005c8,0x000005c7,0x000200f9, + 0x0000059f,0x000200f8,0x0000059f,0x0004003d,0x00000016,0x000005c9,0x0000059b,0x00050080, + 0x00000016,0x000005ca,0x000005c9,0x000002e5,0x0003003e,0x0000059b,0x000005ca,0x000200f9, + 0x0000059c,0x000200f8,0x0000059e,0x000200f9,0x00000597,0x000200f8,0x00000597,0x0004003d, + 0x00000016,0x000005cb,0x00000593,0x00050080,0x00000016,0x000005cc,0x000005cb,0x00000132, + 0x0003003e,0x00000593,0x000005cc,0x000200f9,0x00000594,0x000200f8,0x00000596,0x00040039, + 0x00000002,0x000005cd,0x00000014,0x000200f9,0x0000041b,0x000200f8,0x0000041b,0x0004003d, + 0x00000016,0x000005ce,0x00000417,0x00050080,0x00000016,0x000005cf,0x000005ce,0x00000132, + 0x0003003e,0x00000417,0x000005cf,0x000200f9,0x00000418,0x000200f8,0x0000041a,0x000200f9, + 0x000002f4,0x000200f8,0x000002f4,0x0004003d,0x00000016,0x000005d0,0x000002f0,0x00050080, + 0x00000016,0x000005d1,0x000005d0,0x000002fa,0x0003003e,0x000002f0,0x000005d1,0x000200f9, + 0x000002f1,0x000200f8,0x000002f3,0x00050041,0x0000021d,0x000005d3,0x0000021c,0x0000017f, + 0x0004003d,0x00000016,0x000005d4,0x000005d3,0x00050082,0x00000016,0x000005d5,0x000002f7, + 0x000005d4,0x0003003e,0x000005d2,0x000005d5,0x0004003d,0x00000016,0x000005d6,0x000005d2, + 0x000500ac,0x00000035,0x000005d7,0x000005d6,0x0000009c,0x000300f7,0x000005d9,0x00000000, + 0x000400fa,0x000005d7,0x000005d8,0x000005d9,0x000200f8,0x000005d8,0x0003003e,0x000005db, + 0x0000009c,0x00050039,0x00000016,0x000005dc,0x0000002b,0x000005db,0x0004007c,0x0000000d, + 0x000005dd,0x000005dc,0x00050051,0x0000000c,0x000005de,0x000005dd,0x00000000,0x0003003e, + 0x000005da,0x000005de,0x0004003d,0x0000000c,0x000005e0,0x000005da,0x00040073,0x00000006, + 0x000005e1,0x000005e0,0x0004003d,0x00000016,0x000005e2,0x000005d2,0x00040070,0x00000006, + 0x000005e3,0x000005e2,0x00050085,0x00000006,0x000005e4,0x000005e1,0x000005e3,0x00040073, + 0x0000000c,0x000005e5,0x000005e4,0x0003003e,0x000005df,0x000005e5,0x0004003d,0x0000000c, + 0x000005e7,0x000002ef,0x0004003d,0x0000000c,0x000005e8,0x000005df,0x00050083,0x0000000c, + 0x000005e9,0x000005e7,0x000005e8,0x0003003e,0x000005e6,0x000005e9,0x0004003d,0x0000000c, + 0x000005ea,0x000005e6,0x0003003e,0x000002ef,0x000005ea,0x000200f9,0x000005d9,0x000200f8, + 0x000005d9,0x0004003d,0x0000000c,0x000005ed,0x000002ef,0x00040073,0x00000006,0x000005ee, + 0x000005ed,0x00050088,0x00000006,0x000005ef,0x000005ec,0x000005ee,0x0003003e,0x000005f0, + 0x000005ef,0x00050039,0x00000006,0x000005f1,0x0000000a,0x000005f0,0x0003003e,0x000005eb, + 0x000005f1,0x0003003e,0x000005f2,0x0000009c,0x000200f9,0x000005f3,0x000200f8,0x000005f3, + 0x000400f6,0x000005f5,0x000005f6,0x00000001,0x000200f9,0x000005f7,0x000200f8,0x000005f7, + 0x0004003d,0x00000016,0x000005f8,0x000005f2,0x000500b0,0x00000035,0x000005f9,0x000005f8, + 0x000000cb,0x000400fa,0x000005f9,0x000005f4,0x000005f5,0x000200f8,0x000005f4,0x0004003d, + 0x00000016,0x000005fa,0x000005f2,0x00050041,0x000002ec,0x000005fb,0x000002ea,0x000005fa, + 0x0004003d,0x000002e7,0x000005fc,0x000005fb,0x0004003d,0x00000016,0x000005fd,0x000002e3, + 0x00050080,0x00000016,0x000005fe,0x000005fd,0x000000f8,0x0004003d,0x00000016,0x000005ff, + 0x000005f2,0x00050084,0x00000016,0x00000600,0x000005ff,0x000000cb,0x00050080,0x00000016, + 0x00000601,0x000005fe,0x00000600,0x00050041,0x000002d1,0x00000602,0x000002c8,0x00000601, + 0x0004003d,0x00000016,0x00000603,0x000002e3,0x00050080,0x00000016,0x00000604,0x00000603, + 0x000000f8,0x0004003d,0x00000016,0x00000605,0x000005f2,0x00050084,0x00000016,0x00000606, + 0x00000605,0x000000cb,0x00050080,0x00000016,0x00000607,0x00000604,0x00000606,0x0007116a, + 0x00000602,0x000005fc,0x0000017f,0x000003a1,0x00000028,0x000000cb,0x000200f9,0x000005f6, + 0x000200f8,0x000005f6,0x0004003d,0x00000016,0x00000608,0x000005f2,0x00050080,0x00000016, + 0x00000609,0x00000608,0x00000132,0x0003003e,0x000005f2,0x00000609,0x000200f9,0x000005f3, + 0x000200f8,0x000005f5,0x00040039,0x00000002,0x0000060a,0x00000014,0x0004003d,0x00000016, + 0x0000060c,0x0000020f,0x00050084,0x00000016,0x0000060d,0x0000060c,0x0000023e,0x0004003d, + 0x00000016,0x0000060e,0x00000216,0x00050080,0x00000016,0x0000060f,0x0000060d,0x0000060e, + 0x0004003d,0x00000016,0x00000610,0x000002dd,0x00050080,0x00000016,0x00000611,0x0000060f, + 0x00000610,0x0003003e,0x0000060b,0x00000611,0x0004003d,0x00000016,0x00000612,0x0000060b, + 0x00050041,0x0000021d,0x00000613,0x0000021c,0x0000017f,0x0004003d,0x00000016,0x00000614, + 0x00000613,0x000500b0,0x00000035,0x00000615,0x00000612,0x00000614,0x000300f7,0x00000617, + 0x00000000,0x000400fa,0x00000615,0x00000616,0x00000617,0x000200f8,0x00000616,0x0004003d, + 0x00000016,0x00000619,0x000002e3,0x0004003d,0x00000016,0x0000061a,0x000002dd,0x00050084, + 0x00000016,0x0000061b,0x0000061a,0x000003a1,0x00050080,0x00000016,0x0000061c,0x00000619, + 0x0000061b,0x00050080,0x00000016,0x0000061d,0x0000061c,0x000000f8,0x0004003d,0x00000016, + 0x0000061e,0x000002e0,0x00050084,0x00000016,0x0000061f,0x0000061e,0x000000cb,0x00050080, + 0x00000016,0x00000620,0x0000061d,0x0000061f,0x0003003e,0x00000618,0x00000620,0x0004003d, + 0x00000016,0x00000622,0x00000618,0x00050041,0x000002d1,0x00000623,0x000002c8,0x00000622, + 0x0006003d,0x00000022,0x00000624,0x00000623,0x00000030,0x000000cb,0x0003003e,0x00000621, + 0x00000624,0x0004003d,0x00000016,0x00000626,0x00000618,0x00050080,0x00000016,0x00000627, + 0x00000626,0x00000078,0x00050041,0x000002d1,0x00000628,0x000002c8,0x00000627,0x0006003d, + 0x00000022,0x00000629,0x00000628,0x00000030,0x000000cb,0x0003003e,0x00000625,0x00000629, + 0x0003003e,0x0000062a,0x0000009c,0x000200f9,0x0000062b,0x000200f8,0x0000062b,0x000400f6, + 0x0000062d,0x0000062e,0x00000001,0x000200f9,0x0000062f,0x000200f8,0x0000062f,0x0004003d, + 0x00000016,0x00000630,0x0000062a,0x000500b0,0x00000035,0x00000631,0x00000630,0x000000f8, + 0x000400fa,0x00000631,0x0000062c,0x0000062d,0x000200f8,0x0000062c,0x0004003d,0x00000016, + 0x00000633,0x0000062a,0x00050041,0x0000001c,0x00000634,0x00000621,0x00000633,0x0004003d, + 0x00000016,0x00000635,0x00000634,0x0004007c,0x0000000d,0x00000636,0x00000635,0x00040073, + 0x00000146,0x00000637,0x00000636,0x0004003d,0x00000006,0x00000638,0x000005eb,0x0005008e, + 0x00000146,0x00000639,0x00000637,0x00000638,0x0003003e,0x00000632,0x00000639,0x0004003d, + 0x00000016,0x0000063b,0x0000062a,0x00050041,0x0000001c,0x0000063c,0x00000625,0x0000063b, + 0x0004003d,0x00000016,0x0000063d,0x0000063c,0x0004007c,0x0000000d,0x0000063e,0x0000063d, + 0x00040073,0x00000146,0x0000063f,0x0000063e,0x0004003d,0x00000006,0x00000640,0x000005eb, + 0x0005008e,0x00000146,0x00000641,0x0000063f,0x00000640,0x0003003e,0x0000063a,0x00000641, + 0x0004003d,0x00000016,0x00000643,0x0000062a,0x0004003d,0x00000146,0x00000644,0x00000632, + 0x00040073,0x0000000d,0x00000645,0x00000644,0x0004007c,0x00000016,0x00000646,0x00000645, + 0x00050041,0x0000001c,0x00000647,0x00000642,0x00000643,0x0003003e,0x00000647,0x00000646, + 0x0004003d,0x00000016,0x00000649,0x0000062a,0x0004003d,0x00000146,0x0000064a,0x0000063a, + 0x00040073,0x0000000d,0x0000064b,0x0000064a,0x0004007c,0x00000016,0x0000064c,0x0000064b, + 0x00050041,0x0000001c,0x0000064d,0x00000648,0x00000649,0x0003003e,0x0000064d,0x0000064c, + 0x000200f9,0x0000062e,0x000200f8,0x0000062e,0x0004003d,0x00000016,0x0000064e,0x0000062a, + 0x00050080,0x00000016,0x0000064f,0x0000064e,0x00000132,0x0003003e,0x0000062a,0x0000064f, + 0x000200f9,0x0000062b,0x000200f8,0x0000062d,0x0004003d,0x00000016,0x00000654,0x0000060b, + 0x00050041,0x0000021d,0x00000655,0x0000021c,0x00000182,0x0004003d,0x00000016,0x00000656, + 0x00000655,0x00050084,0x00000016,0x00000657,0x00000654,0x00000656,0x0004003d,0x00000016, + 0x00000658,0x0000020b,0x00050084,0x00000016,0x00000659,0x00000658,0x000002e5,0x00050080, + 0x00000016,0x0000065a,0x00000657,0x00000659,0x00050086,0x00000016,0x0000065b,0x0000065a, + 0x000000b5,0x0004003d,0x00000016,0x0000065c,0x000002e0,0x00050080,0x00000016,0x0000065d, + 0x0000065b,0x0000065c,0x0004003d,0x00000022,0x0000065f,0x00000642,0x0003003e,0x0000065e, + 0x0000065f,0x0004003d,0x00000022,0x00000661,0x00000648,0x0003003e,0x00000660,0x00000661, + 0x00060039,0x00000022,0x00000662,0x00000027,0x0000065e,0x00000660,0x00060041,0x00000263, + 0x00000663,0x00000653,0x0000017f,0x0000065d,0x0003003e,0x00000663,0x00000662,0x000200f9, + 0x00000617,0x000200f8,0x00000617,0x000100fd,0x00010038,0x00050036,0x00000006,0x0000000a, + 0x00000000,0x00000008,0x00030037,0x00000007,0x00000009,0x000200f8,0x0000000b,0x0004003b, + 0x0000001c,0x00000043,0x00000007,0x0004003b,0x0000001c,0x00000046,0x00000007,0x0004003b, + 0x0000001c,0x0000004a,0x00000007,0x0004003b,0x00000007,0x00000063,0x00000007,0x0004003b, + 0x0000001c,0x00000074,0x00000007,0x0004003b,0x0000001c,0x0000007a,0x00000007,0x0004003d, + 0x00000006,0x00000044,0x00000009,0x0004007c,0x00000016,0x00000045,0x00000044,0x0003003e, + 0x00000043,0x00000045,0x0004003d,0x00000016,0x00000047,0x00000043,0x000500c7,0x00000016, + 0x00000049,0x00000047,0x00000048,0x0003003e,0x00000046,0x00000049,0x0004003d,0x00000016, + 0x0000004b,0x00000043,0x000500c7,0x00000016,0x0000004d,0x0000004b,0x0000004c,0x0003003e, + 0x0000004a,0x0000004d,0x0004003d,0x00000016,0x0000004e,0x0000004a,0x000500ae,0x00000035, + 0x00000050,0x0000004e,0x0000004f,0x000300f7,0x00000052,0x00000000,0x000400fa,0x00000050, + 0x00000051,0x00000052,0x000200f8,0x00000051,0x0004003d,0x00000006,0x00000053,0x00000009, + 0x000200fe,0x00000053,0x000200f8,0x00000052,0x0004003d,0x00000016,0x00000055,0x0000004a, + 0x000500ae,0x00000035,0x00000057,0x00000055,0x00000056,0x000300f7,0x00000059,0x00000000, + 0x000400fa,0x00000057,0x00000058,0x00000059,0x000200f8,0x00000058,0x0004003d,0x00000016, + 0x0000005a,0x00000046,0x000500c5,0x00000016,0x0000005b,0x0000005a,0x0000004f,0x0004007c, + 0x00000006,0x0000005c,0x0000005b,0x000200fe,0x0000005c,0x000200f8,0x00000059,0x0004003d, + 0x00000016,0x0000005e,0x0000004a,0x000500b0,0x00000035,0x00000060,0x0000005e,0x0000005f, + 0x000300f7,0x00000062,0x00000000,0x000400fa,0x00000060,0x00000061,0x00000062,0x000200f8, + 0x00000061,0x0004003d,0x00000016,0x00000064,0x0000004a,0x0004007c,0x00000006,0x00000065, + 0x00000064,0x00050085,0x00000006,0x00000067,0x00000065,0x00000066,0x0006000c,0x00000006, + 0x00000068,0x00000001,0x00000002,0x00000067,0x0003003e,0x00000063,0x00000068,0x0004003d, + 0x00000016,0x00000069,0x00000046,0x0004007c,0x00000006,0x0000006a,0x00000069,0x0004003d, + 0x00000016,0x0000006b,0x00000046,0x0004003d,0x00000006,0x0000006c,0x00000063,0x00050085, + 0x00000006,0x0000006e,0x0000006c,0x0000006d,0x0004007c,0x00000016,0x0000006f,0x0000006e, + 0x000500c5,0x00000016,0x00000070,0x0000006b,0x0000006f,0x0004007c,0x00000006,0x00000071, + 0x00000070,0x00050081,0x00000006,0x00000072,0x0000006a,0x00000071,0x000200fe,0x00000072, + 0x000200f8,0x00000062,0x0004003d,0x00000016,0x00000075,0x0000004a,0x000500c2,0x00000016, + 0x00000077,0x00000075,0x00000076,0x000500c7,0x00000016,0x00000079,0x00000077,0x00000078, + 0x0003003e,0x00000074,0x00000079,0x0004003d,0x00000016,0x0000007b,0x0000004a,0x00050080, + 0x00000016,0x0000007d,0x0000007b,0x0000007c,0x0004003d,0x00000016,0x0000007e,0x00000074, + 0x00050080,0x00000016,0x0000007f,0x0000007d,0x0000007e,0x000500c7,0x00000016,0x00000081, + 0x0000007f,0x00000080,0x0003003e,0x0000007a,0x00000081,0x0004003d,0x00000016,0x00000082, + 0x00000046,0x0004003d,0x00000016,0x00000083,0x0000007a,0x000500c5,0x00000016,0x00000084, + 0x00000082,0x00000083,0x0004007c,0x00000006,0x00000085,0x00000084,0x000200fe,0x00000085, + 0x00010038,0x00050036,0x0000000f,0x00000012,0x00000000,0x00000010,0x00030037,0x0000000e, + 0x00000011,0x000200f8,0x00000013,0x0004003b,0x0000000e,0x00000088,0x00000007,0x0004003b, + 0x00000092,0x00000093,0x00000007,0x0004003b,0x00000098,0x00000099,0x00000007,0x0004003d, + 0x0000000d,0x00000089,0x00000011,0x0004003d,0x0000000d,0x0000008c,0x00000011,0x0004009c, + 0x0000008d,0x0000008e,0x0000008c,0x000600a9,0x0000000d,0x0000008f,0x0000008e,0x0000008b, + 0x00000089,0x0003003e,0x00000088,0x0000008f,0x0004003d,0x0000000d,0x00000094,0x00000088, + 0x00040073,0x00000091,0x00000095,0x00000094,0x0003003e,0x00000093,0x00000095,0x0004003d, + 0x00000091,0x0000009a,0x00000093,0x0004007c,0x00000097,0x0000009b,0x0000009a,0x0003003e, + 0x00000099,0x0000009b,0x00050041,0x0000009d,0x0000009e,0x00000099,0x0000009c,0x0004003d, + 0x00000096,0x0000009f,0x0000009e,0x00040071,0x00000016,0x000000a0,0x0000009f,0x00050041, + 0x0000009d,0x000000a1,0x00000099,0x00000078,0x0004003d,0x00000096,0x000000a2,0x000000a1, + 0x00040071,0x00000016,0x000000a3,0x000000a2,0x000500c4,0x00000016,0x000000a5,0x000000a3, + 0x000000a4,0x000500c5,0x00000016,0x000000a6,0x000000a0,0x000000a5,0x00040071,0x0000000f, + 0x000000a7,0x000000a6,0x000200fe,0x000000a7,0x00010038,0x00050036,0x00000002,0x00000014, + 0x00000000,0x00000003,0x000200f8,0x00000015,0x000300e1,0x000000aa,0x000000ab,0x000400e0, + 0x000000aa,0x000000aa,0x000000ac,0x000100fd,0x00010038,0x00050036,0x00000016,0x0000001a, + 0x00000000,0x00000017,0x00030037,0x0000000e,0x00000018,0x00030037,0x0000000e,0x00000019, + 0x000200f8,0x0000001b,0x0004003b,0x0000000e,0x000000ad,0x00000007,0x0004003b,0x0000000e, + 0x000000b1,0x00000007,0x0004003d,0x0000000d,0x000000ae,0x00000018,0x0003003e,0x000000ad, + 0x000000ae,0x00050039,0x0000000f,0x000000af,0x00000012,0x000000ad,0x00040071,0x00000016, + 0x000000b0,0x000000af,0x0004003d,0x0000000d,0x000000b2,0x00000019,0x0003003e,0x000000b1, + 0x000000b2,0x00050039,0x0000000f,0x000000b3,0x00000012,0x000000b1,0x00040071,0x00000016, + 0x000000b4,0x000000b3,0x000500c4,0x00000016,0x000000b6,0x000000b4,0x000000b5,0x000500c5, + 0x00000016,0x000000b7,0x000000b0,0x000000b6,0x000200fe,0x000000b7,0x00010038,0x00050036, + 0x00000016,0x00000020,0x00000000,0x0000001d,0x00030037,0x0000001c,0x0000001e,0x00030037, + 0x0000001c,0x0000001f,0x000200f8,0x00000021,0x0004003b,0x0000000e,0x000000be,0x00000007, + 0x0004003b,0x0000000e,0x000000bf,0x00000007,0x0004003d,0x00000016,0x000000ba,0x0000001e, + 0x0004007c,0x0000000d,0x000000bb,0x000000ba,0x0004003d,0x00000016,0x000000bc,0x0000001f, + 0x0004007c,0x0000000d,0x000000bd,0x000000bc,0x0003003e,0x000000be,0x000000bb,0x0003003e, + 0x000000bf,0x000000bd,0x00060039,0x00000016,0x000000c0,0x0000001a,0x000000be,0x000000bf, + 0x000200fe,0x000000c0,0x00010038,0x00050036,0x00000022,0x00000027,0x00000000,0x00000024, + 0x00030037,0x00000023,0x00000025,0x00030037,0x00000023,0x00000026,0x000200f8,0x00000028, + 0x0004003b,0x0000001c,0x000000c3,0x00000007,0x0004003b,0x0000001c,0x000000c6,0x00000007, + 0x0004003b,0x0000001c,0x000000ca,0x00000007,0x0004003b,0x0000001c,0x000000ce,0x00000007, + 0x0004003b,0x0000001c,0x000000d2,0x00000007,0x0004003b,0x0000001c,0x000000d5,0x00000007, + 0x0004003b,0x0000001c,0x000000d9,0x00000007,0x0004003b,0x0000001c,0x000000dc,0x00000007, + 0x00050041,0x0000001c,0x000000c4,0x00000025,0x0000009c,0x0004003d,0x00000016,0x000000c5, + 0x000000c4,0x0003003e,0x000000c3,0x000000c5,0x00050041,0x0000001c,0x000000c7,0x00000025, + 0x00000078,0x0004003d,0x00000016,0x000000c8,0x000000c7,0x0003003e,0x000000c6,0x000000c8, + 0x00060039,0x00000016,0x000000c9,0x00000020,0x000000c3,0x000000c6,0x00050041,0x0000001c, + 0x000000cc,0x00000025,0x000000cb,0x0004003d,0x00000016,0x000000cd,0x000000cc,0x0003003e, + 0x000000ca,0x000000cd,0x00050041,0x0000001c,0x000000cf,0x00000025,0x000000aa,0x0004003d, + 0x00000016,0x000000d0,0x000000cf,0x0003003e,0x000000ce,0x000000d0,0x00060039,0x00000016, + 0x000000d1,0x00000020,0x000000ca,0x000000ce,0x00050041,0x0000001c,0x000000d3,0x00000026, + 0x0000009c,0x0004003d,0x00000016,0x000000d4,0x000000d3,0x0003003e,0x000000d2,0x000000d4, + 0x00050041,0x0000001c,0x000000d6,0x00000026,0x00000078,0x0004003d,0x00000016,0x000000d7, + 0x000000d6,0x0003003e,0x000000d5,0x000000d7,0x00060039,0x00000016,0x000000d8,0x00000020, + 0x000000d2,0x000000d5,0x00050041,0x0000001c,0x000000da,0x00000026,0x000000cb,0x0004003d, + 0x00000016,0x000000db,0x000000da,0x0003003e,0x000000d9,0x000000db,0x00050041,0x0000001c, + 0x000000dd,0x00000026,0x000000aa,0x0004003d,0x00000016,0x000000de,0x000000dd,0x0003003e, + 0x000000dc,0x000000de,0x00060039,0x00000016,0x000000df,0x00000020,0x000000d9,0x000000dc, + 0x00070050,0x00000022,0x000000e0,0x000000c9,0x000000d1,0x000000d8,0x000000df,0x000200fe, + 0x000000e0,0x00010038,0x00050036,0x00000016,0x0000002b,0x00000000,0x00000029,0x00030037, + 0x0000001c,0x0000002a,0x000200f8,0x0000002c,0x0004003b,0x0000000e,0x000000e3,0x00000007, + 0x0004003b,0x0000001c,0x000000f1,0x00000007,0x0004003b,0x0000001c,0x000000f4,0x00000007, + 0x0004003b,0x0000001c,0x000000fd,0x00000007,0x0004003d,0x00000016,0x000000e4,0x0000002a, + 0x0004007c,0x0000000d,0x000000e5,0x000000e4,0x0008000c,0x0000000d,0x000000ea,0x00000001, + 0x00000032,0x000000e5,0x000000e7,0x000000e9,0x0003003e,0x000000e3,0x000000ea,0x0004003d, + 0x0000000d,0x000000eb,0x000000e3,0x0008000c,0x0000000d,0x000000f0,0x00000001,0x0000002b, + 0x000000eb,0x000000ed,0x000000ef,0x0003003e,0x000000e3,0x000000f0,0x0004003d,0x0000000d, + 0x000000f2,0x000000e3,0x0004007c,0x00000016,0x000000f3,0x000000f2,0x0003003e,0x000000f1, + 0x000000f3,0x0004003d,0x00000016,0x000000f5,0x000000f1,0x000500c7,0x00000016,0x000000f7, + 0x000000f5,0x000000f6,0x000500c4,0x00000016,0x000000f9,0x000000f7,0x000000f8,0x00050080, + 0x00000016,0x000000fb,0x000000f9,0x000000fa,0x000500c7,0x00000016,0x000000fc,0x000000fb, + 0x000000f6,0x0003003e,0x000000f4,0x000000fc,0x0004003d,0x00000016,0x000000fe,0x000000f1, + 0x000500c2,0x00000016,0x000000ff,0x000000fe,0x000000b5,0x000500c4,0x00000016,0x00000100, + 0x000000ff,0x000000f8,0x00050080,0x00000016,0x00000101,0x00000100,0x000000fa,0x000500c7, + 0x00000016,0x00000102,0x00000101,0x000000f6,0x0003003e,0x000000fd,0x00000102,0x0004003d, + 0x00000016,0x00000103,0x000000f4,0x0004003d,0x00000016,0x00000104,0x000000fd,0x000500c4, + 0x00000016,0x00000105,0x00000104,0x000000b5,0x000500c5,0x00000016,0x00000106,0x00000103, + 0x00000105,0x000200fe,0x00000106,0x00010038,0x00050036,0x0000000c,0x00000032,0x00000000, + 0x0000002d,0x00030037,0x00000023,0x0000002e,0x00030037,0x00000023,0x0000002f,0x00030037, + 0x00000023,0x00000030,0x00030037,0x00000023,0x00000031,0x000200f8,0x00000033,0x0004003b, + 0x0000001c,0x00000109,0x00000007,0x0004003b,0x00000112,0x00000113,0x00000007,0x0004003b, + 0x0000001c,0x00000134,0x00000007,0x0004003b,0x0000000e,0x0000013c,0x00000007,0x0004003b, + 0x00000147,0x00000148,0x00000007,0x0004003b,0x00000147,0x00000152,0x00000007,0x0004003b, + 0x00000147,0x00000157,0x00000007,0x0004003b,0x0000015d,0x0000015e,0x00000007,0x0004003b, + 0x0000001c,0x00000165,0x00000007,0x0004003b,0x0000000e,0x0000016d,0x00000007,0x0004003b, + 0x00000177,0x00000178,0x00000007,0x0004003b,0x0000000e,0x0000017e,0x00000007,0x0004003b, + 0x0000000e,0x00000186,0x00000007,0x0004003b,0x0000000e,0x0000018d,0x00000007,0x0004003b, + 0x00000034,0x00000191,0x00000007,0x0003003e,0x00000109,0x0000009c,0x000200f9,0x0000010a, + 0x000200f8,0x0000010a,0x000400f6,0x0000010c,0x0000010d,0x00000001,0x000200f9,0x0000010e, + 0x000200f8,0x0000010e,0x0004003d,0x00000016,0x0000010f,0x00000109,0x000500b0,0x00000035, + 0x00000110,0x0000010f,0x000000f8,0x000400fa,0x00000110,0x0000010b,0x0000010c,0x000200f8, + 0x0000010b,0x0004003d,0x00000016,0x00000114,0x00000109,0x0004003d,0x00000016,0x00000115, + 0x00000109,0x00050041,0x0000001c,0x00000116,0x0000002e,0x00000115,0x0004003d,0x00000016, + 0x00000117,0x00000116,0x0004007c,0x0000000d,0x00000118,0x00000117,0x00050041,0x0000000e, + 0x00000119,0x00000113,0x00000114,0x0003003e,0x00000119,0x00000118,0x0004003d,0x00000016, + 0x0000011a,0x00000109,0x00050080,0x00000016,0x0000011b,0x000000f8,0x0000011a,0x0004003d, + 0x00000016,0x0000011c,0x00000109,0x00050041,0x0000001c,0x0000011d,0x0000002f,0x0000011c, + 0x0004003d,0x00000016,0x0000011e,0x0000011d,0x0004007c,0x0000000d,0x0000011f,0x0000011e, + 0x00050041,0x0000000e,0x00000120,0x00000113,0x0000011b,0x0003003e,0x00000120,0x0000011f, + 0x0004003d,0x00000016,0x00000121,0x00000109,0x00050080,0x00000016,0x00000122,0x000000a4, + 0x00000121,0x0004003d,0x00000016,0x00000123,0x00000109,0x00050041,0x0000001c,0x00000124, + 0x00000030,0x00000123,0x0004003d,0x00000016,0x00000125,0x00000124,0x0004007c,0x0000000d, + 0x00000126,0x00000125,0x00050041,0x0000000e,0x00000127,0x00000113,0x00000122,0x0003003e, + 0x00000127,0x00000126,0x0004003d,0x00000016,0x00000129,0x00000109,0x00050080,0x00000016, + 0x0000012a,0x00000128,0x00000129,0x0004003d,0x00000016,0x0000012b,0x00000109,0x00050041, + 0x0000001c,0x0000012c,0x00000031,0x0000012b,0x0004003d,0x00000016,0x0000012d,0x0000012c, + 0x0004007c,0x0000000d,0x0000012e,0x0000012d,0x00050041,0x0000000e,0x0000012f,0x00000113, + 0x0000012a,0x0003003e,0x0000012f,0x0000012e,0x000200f9,0x0000010d,0x000200f8,0x0000010d, + 0x0004003d,0x00000016,0x00000130,0x00000109,0x00050080,0x00000016,0x00000133,0x00000130, + 0x00000132,0x0003003e,0x00000109,0x00000133,0x000200f9,0x0000010a,0x000200f8,0x0000010c, + 0x0003003e,0x00000134,0x0000009c,0x000200f9,0x00000135,0x000200f8,0x00000135,0x000400f6, + 0x00000137,0x00000138,0x00000001,0x000200f9,0x00000139,0x000200f8,0x00000139,0x0004003d, + 0x00000016,0x0000013a,0x00000134,0x000500b0,0x00000035,0x0000013b,0x0000013a,0x000000a4, + 0x000400fa,0x0000013b,0x00000136,0x00000137,0x000200f8,0x00000136,0x0004003d,0x00000016, + 0x0000013d,0x00000134,0x00050080,0x00000016,0x0000013e,0x0000013d,0x000000a4,0x00050041, + 0x0000000e,0x0000013f,0x00000113,0x0000013e,0x0004003d,0x0000000d,0x00000140,0x0000013f, + 0x0004003d,0x00000016,0x00000141,0x00000134,0x00050080,0x00000016,0x00000142,0x00000141, + 0x000000a4,0x00050041,0x0000000e,0x00000143,0x00000113,0x00000142,0x0004003d,0x0000000d, + 0x00000144,0x00000143,0x00050085,0x0000000d,0x00000145,0x00000140,0x00000144,0x0003003e, + 0x0000013c,0x00000145,0x0004003d,0x00000016,0x00000149,0x00000134,0x00050041,0x0000000e, + 0x0000014a,0x00000113,0x00000149,0x0004003d,0x0000000d,0x0000014b,0x0000014a,0x00040073, + 0x00000146,0x0000014c,0x0000014b,0x0004003d,0x00000016,0x0000014d,0x00000134,0x00050041, + 0x0000000e,0x0000014e,0x00000113,0x0000014d,0x0004003d,0x0000000d,0x0000014f,0x0000014e, + 0x00040073,0x00000146,0x00000150,0x0000014f,0x00050085,0x00000146,0x00000151,0x0000014c, + 0x00000150,0x0003003e,0x00000148,0x00000151,0x0004003d,0x00000146,0x00000153,0x00000148, + 0x0004007c,0x00000154,0x00000155,0x00000153,0x0004007c,0x00000146,0x00000156,0x00000155, + 0x0003003e,0x00000152,0x00000156,0x0004003d,0x00000146,0x00000158,0x00000152,0x0004003d, + 0x0000000d,0x00000159,0x0000013c,0x00040073,0x00000146,0x0000015a,0x00000159,0x00050081, + 0x00000146,0x0000015b,0x00000158,0x0000015a,0x0003003e,0x00000157,0x0000015b,0x0004003d, + 0x00000016,0x0000015f,0x00000134,0x0004003d,0x00000146,0x00000160,0x00000157,0x00040073, + 0x0000000d,0x00000161,0x00000160,0x00050041,0x0000000e,0x00000162,0x0000015e,0x0000015f, + 0x0003003e,0x00000162,0x00000161,0x000200f9,0x00000138,0x000200f8,0x00000138,0x0004003d, + 0x00000016,0x00000163,0x00000134,0x00050080,0x00000016,0x00000164,0x00000163,0x00000132, + 0x0003003e,0x00000134,0x00000164,0x000200f9,0x00000135,0x000200f8,0x00000137,0x0003003e, + 0x00000165,0x0000009c,0x000200f9,0x00000166,0x000200f8,0x00000166,0x000400f6,0x00000168, + 0x00000169,0x00000001,0x000200f9,0x0000016a,0x000200f8,0x0000016a,0x0004003d,0x00000016, + 0x0000016b,0x00000165,0x000500b0,0x00000035,0x0000016c,0x0000016b,0x000000f8,0x000400fa, + 0x0000016c,0x00000167,0x00000168,0x000200f8,0x00000167,0x0004003d,0x00000016,0x0000016e, + 0x00000165,0x00050041,0x0000000e,0x0000016f,0x0000015e,0x0000016e,0x0004003d,0x0000000d, + 0x00000170,0x0000016f,0x0004003d,0x00000016,0x00000171,0x00000165,0x00050080,0x00000016, + 0x00000172,0x00000171,0x000000f8,0x00050041,0x0000000e,0x00000173,0x0000015e,0x00000172, + 0x0004003d,0x0000000d,0x00000174,0x00000173,0x00050081,0x0000000d,0x00000175,0x00000170, + 0x00000174,0x0003003e,0x0000016d,0x00000175,0x0004003d,0x00000016,0x00000179,0x00000165, + 0x0004003d,0x0000000d,0x0000017a,0x0000016d,0x00050041,0x0000000e,0x0000017b,0x00000178, + 0x00000179,0x0003003e,0x0000017b,0x0000017a,0x000200f9,0x00000169,0x000200f8,0x00000169, + 0x0004003d,0x00000016,0x0000017c,0x00000165,0x00050080,0x00000016,0x0000017d,0x0000017c, + 0x00000132,0x0003003e,0x00000165,0x0000017d,0x000200f9,0x00000166,0x000200f8,0x00000168, + 0x00050041,0x0000000e,0x00000180,0x00000178,0x0000017f,0x0004003d,0x0000000d,0x00000181, + 0x00000180,0x00050041,0x0000000e,0x00000183,0x00000178,0x00000182,0x0004003d,0x0000000d, + 0x00000184,0x00000183,0x00050081,0x0000000d,0x00000185,0x00000181,0x00000184,0x0003003e, + 0x0000017e,0x00000185,0x00050041,0x0000000e,0x00000187,0x00000178,0x00000132,0x0004003d, + 0x0000000d,0x00000188,0x00000187,0x00050041,0x0000000e,0x0000018a,0x00000178,0x00000189, + 0x0004003d,0x0000000d,0x0000018b,0x0000018a,0x00050081,0x0000000d,0x0000018c,0x00000188, + 0x0000018b,0x0003003e,0x00000186,0x0000018c,0x0004003d,0x0000000d,0x0000018e,0x0000017e, + 0x0004003d,0x0000000d,0x0000018f,0x00000186,0x00050081,0x0000000d,0x00000190,0x0000018e, + 0x0000018f,0x0003003e,0x0000018d,0x00000190,0x00050041,0x00000034,0x00000192,0x0000018d, + 0x0000009c,0x0004003d,0x0000000c,0x00000193,0x00000192,0x00050041,0x00000034,0x00000194, + 0x0000018d,0x00000078,0x0004003d,0x0000000c,0x00000195,0x00000194,0x00050081,0x0000000c, + 0x00000196,0x00000193,0x00000195,0x0003003e,0x00000191,0x00000196,0x0004003d,0x0000000c, + 0x00000197,0x00000191,0x00040073,0x00000006,0x00000198,0x00000197,0x0006000c,0x00000006, + 0x00000199,0x00000001,0x00000020,0x00000198,0x00040073,0x0000000c,0x0000019a,0x00000199, + 0x000200fe,0x0000019a,0x00010038,0x00050036,0x00000002,0x00000041,0x00000000,0x00000037, + 0x00030037,0x00000023,0x00000038,0x00030037,0x00000023,0x00000039,0x00030037,0x00000023, + 0x0000003a,0x00030037,0x00000023,0x0000003b,0x00030037,0x00000034,0x0000003c,0x00030037, + 0x00000036,0x0000003d,0x00030037,0x00000034,0x0000003e,0x00030037,0x00000023,0x0000003f, + 0x00030037,0x00000023,0x00000040,0x000200f8,0x00000042,0x0004003b,0x0000019e,0x0000019f, + 0x00000007,0x0004003b,0x0000001c,0x000001a5,0x00000007,0x0004003b,0x0000000e,0x000001ad, + 0x00000007,0x0004003b,0x0000000e,0x000001b6,0x00000007,0x0004003b,0x0000000e,0x000001c0, + 0x00000007,0x0004003b,0x0000000e,0x000001c4,0x00000007,0x0004003b,0x0000000e,0x000001cb, + 0x00000007,0x0004003b,0x0000000e,0x000001cf,0x00000007,0x0004003b,0x0000000e,0x000001d2, + 0x00000007,0x0004003b,0x0000000e,0x000001d6,0x00000007,0x0004003b,0x000001dd,0x000001de, + 0x00000007,0x0004003b,0x0000000e,0x000001e0,0x00000007,0x0004003b,0x0000000e,0x000001e2, + 0x00000007,0x0004003d,0x00000022,0x000001a0,0x00000038,0x0004003d,0x00000022,0x000001a1, + 0x00000039,0x0004003d,0x00000022,0x000001a2,0x0000003a,0x0004003d,0x00000022,0x000001a3, + 0x0000003b,0x00070050,0x0000019d,0x000001a4,0x000001a0,0x000001a1,0x000001a2,0x000001a3, + 0x0003003e,0x0000019f,0x000001a4,0x0003003e,0x000001a5,0x0000009c,0x000200f9,0x000001a6, + 0x000200f8,0x000001a6,0x000400f6,0x000001a8,0x000001a9,0x00000001,0x000200f9,0x000001aa, + 0x000200f8,0x000001aa,0x0004003d,0x00000016,0x000001ab,0x000001a5,0x000500b0,0x00000035, + 0x000001ac,0x000001ab,0x000000a4,0x000400fa,0x000001ac,0x000001a7,0x000001a8,0x000200f8, + 0x000001a7,0x0004003d,0x00000016,0x000001ae,0x000001a5,0x000500c2,0x00000016,0x000001af, + 0x000001ae,0x00000078,0x0004003d,0x00000016,0x000001b0,0x000001a5,0x000500c7,0x00000016, + 0x000001b1,0x000001b0,0x00000078,0x00050084,0x00000016,0x000001b2,0x000001b1,0x000000cb, + 0x00060041,0x0000001c,0x000001b3,0x0000019f,0x000001af,0x000001b2,0x0004003d,0x00000016, + 0x000001b4,0x000001b3,0x0004007c,0x0000000d,0x000001b5,0x000001b4,0x0003003e,0x000001ad, + 0x000001b5,0x0004003d,0x00000016,0x000001b7,0x000001a5,0x000500c2,0x00000016,0x000001b8, + 0x000001b7,0x00000078,0x0004003d,0x00000016,0x000001b9,0x000001a5,0x000500c7,0x00000016, + 0x000001ba,0x000001b9,0x00000078,0x00050084,0x00000016,0x000001bb,0x000001ba,0x000000cb, + 0x00050080,0x00000016,0x000001bc,0x000001bb,0x00000078,0x00060041,0x0000001c,0x000001bd, + 0x0000019f,0x000001b8,0x000001bc,0x0004003d,0x00000016,0x000001be,0x000001bd,0x0004007c, + 0x0000000d,0x000001bf,0x000001be,0x0003003e,0x000001b6,0x000001bf,0x0004003d,0x0000000d, + 0x000001c1,0x000001ad,0x0004003d,0x0000000c,0x000001c2,0x0000003c,0x0005008e,0x0000000d, + 0x000001c3,0x000001c1,0x000001c2,0x0003003e,0x000001c0,0x000001c3,0x0004003d,0x0000000d, + 0x000001c5,0x000001b6,0x0004003d,0x0000000c,0x000001c6,0x0000003c,0x0005008e,0x0000000d, + 0x000001c7,0x000001c5,0x000001c6,0x0003003e,0x000001c4,0x000001c7,0x0004003d,0x00000035, + 0x000001c8,0x0000003d,0x000300f7,0x000001ca,0x00000000,0x000400fa,0x000001c8,0x000001c9, + 0x000001ca,0x000200f8,0x000001c9,0x0004003d,0x0000000d,0x000001cc,0x000001c0,0x0005008e, + 0x0000000d,0x000001ce,0x000001cc,0x000001cd,0x0003003e,0x000001cb,0x000001ce,0x0004003d, + 0x0000000d,0x000001d0,0x000001c4,0x0005008e,0x0000000d,0x000001d1,0x000001d0,0x000001cd, + 0x0003003e,0x000001cf,0x000001d1,0x0004003d,0x0000000d,0x000001d3,0x000001cb,0x0004003d, + 0x0000000c,0x000001d4,0x0000003e,0x0005008e,0x0000000d,0x000001d5,0x000001d3,0x000001d4, + 0x0003003e,0x000001d2,0x000001d5,0x0004003d,0x0000000d,0x000001d7,0x000001cf,0x0004003d, + 0x0000000c,0x000001d8,0x0000003e,0x0005008e,0x0000000d,0x000001d9,0x000001d7,0x000001d8, + 0x0003003e,0x000001d6,0x000001d9,0x0004003d,0x0000000d,0x000001da,0x000001d2,0x0003003e, + 0x000001c0,0x000001da,0x0004003d,0x0000000d,0x000001db,0x000001d6,0x0003003e,0x000001c4, + 0x000001db,0x000200f9,0x000001ca,0x000200f8,0x000001ca,0x0004003d,0x00000016,0x000001df, + 0x000001a5,0x0004003d,0x0000000d,0x000001e1,0x000001c0,0x0003003e,0x000001e0,0x000001e1, + 0x0004003d,0x0000000d,0x000001e3,0x000001c4,0x0003003e,0x000001e2,0x000001e3,0x00060039, + 0x00000016,0x000001e4,0x0000001a,0x000001e0,0x000001e2,0x00050041,0x0000001c,0x000001e5, + 0x000001de,0x000001df,0x0003003e,0x000001e5,0x000001e4,0x000200f9,0x000001a9,0x000200f8, + 0x000001a9,0x0004003d,0x00000016,0x000001e6,0x000001a5,0x00050080,0x00000016,0x000001e7, + 0x000001e6,0x00000132,0x0003003e,0x000001a5,0x000001e7,0x000200f9,0x000001a6,0x000200f8, + 0x000001a8,0x00050041,0x0000001c,0x000001e8,0x000001de,0x0000017f,0x0004003d,0x00000016, + 0x000001e9,0x000001e8,0x00050041,0x0000001c,0x000001ea,0x000001de,0x00000132,0x0004003d, + 0x00000016,0x000001eb,0x000001ea,0x00050041,0x0000001c,0x000001ec,0x000001de,0x00000182, + 0x0004003d,0x00000016,0x000001ed,0x000001ec,0x00050041,0x0000001c,0x000001ee,0x000001de, + 0x00000189,0x0004003d,0x00000016,0x000001ef,0x000001ee,0x00070050,0x00000022,0x000001f0, + 0x000001e9,0x000001eb,0x000001ed,0x000001ef,0x0003003e,0x0000003f,0x000001f0,0x00050041, + 0x0000001c,0x000001f2,0x000001de,0x000001f1,0x0004003d,0x00000016,0x000001f3,0x000001f2, + 0x00050041,0x0000001c,0x000001f5,0x000001de,0x000001f4,0x0004003d,0x00000016,0x000001f6, + 0x000001f5,0x00050041,0x0000001c,0x000001f8,0x000001de,0x000001f7,0x0004003d,0x00000016, + 0x000001f9,0x000001f8,0x00050041,0x0000001c,0x000001fb,0x000001de,0x000001fa,0x0004003d, + 0x00000016,0x000001fc,0x000001fb,0x00070050,0x00000022,0x000001fd,0x000001f3,0x000001f6, + 0x000001f9,0x000001fc,0x0003003e,0x00000040,0x000001fd,0x000100fd,0x00010038, +}; +inline constexpr uint32_t k_gemm_reduce[] = { + 0x07230203,0x00010600,0x0008000b,0x00000126,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x00000027,0x00020011,0x00001074,0x0005000a, + 0x5f565053,0x5f545845,0x616f6c66,0x00003874,0x0006000b,0x00000001,0x4c534c47,0x6474732e, + 0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,0x000a000f,0x00000005,0x00000004, + 0x6e69616d,0x00000000,0x00000057,0x00000065,0x00000083,0x00000112,0x0000011f,0x00060010, + 0x00000004,0x00000011,0x00000100,0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc, + 0x00090004,0x455f4c47,0x635f5458,0x72746e6f,0x665f6c6f,0x5f776f6c,0x72747461,0x74756269, + 0x00007365,0x00060004,0x455f4c47,0x665f5458,0x74616f6c,0x6d34655f,0x00000033,0x00080004, + 0x455f4c47,0x735f5458,0x65646168,0x36315f72,0x5f746962,0x726f7473,0x00656761,0x00080004, + 0x455f4c47,0x735f5458,0x65646168,0x62385f72,0x735f7469,0x61726f74,0x00006567,0x000b0004, + 0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d, + 0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79, + 0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45, + 0x64756c63,0x69645f65,0x74636572,0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000, + 0x00070005,0x0000000c,0x336d3465,0x61507748,0x76287269,0x32363166,0x0000003b,0x00040005, + 0x0000000b,0x756c6176,0x00000065,0x00060005,0x00000010,0x756c6973,0x72696150,0x31667628, + 0x003b3236,0x00040005,0x0000000f,0x756c6176,0x00000065,0x00040005,0x00000012,0x61656c63, + 0x0000006e,0x00050005,0x0000001e,0x766e6f63,0x65747265,0x00000064,0x00040005,0x00000024, + 0x65646f63,0x00000073,0x00040005,0x00000037,0x6e756f62,0x00646564,0x00040005,0x0000003e, + 0x656e6e69,0x00000072,0x00050005,0x00000046,0x796c6f70,0x696d6f6e,0x00006c61,0x00040005, + 0x0000004c,0x75736572,0x0000746c,0x00040005,0x00000054,0x756f7267,0x00000070,0x00080005, + 0x00000057,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00060005, + 0x00000062,0x756f7267,0x65507370,0x776f5272,0x00000000,0x00040005,0x00000063,0x68737550, + 0x00000000,0x00050006,0x00000063,0x00000000,0x73776f72,0x00000000,0x00040006,0x00000063, + 0x00000001,0x0000004e,0x00060006,0x00000063,0x00000002,0x696c7073,0x72745374,0x00656469, + 0x00070006,0x00000063,0x00000003,0x7074756f,0x74537475,0x65646972,0x00000000,0x00080006, + 0x00000063,0x00000004,0x7074756f,0x6f437475,0x6e6d756c,0x7366664f,0x00007465,0x00030005, + 0x00000065,0x00006370,0x00030005,0x0000006c,0x00776f72,0x00040005,0x00000070,0x756c6f63, + 0x00006e6d,0x00040005,0x0000007f,0x61746f74,0x0000006c,0x00050005,0x00000081,0x74726150, + 0x736c6169,0x00000000,0x00060006,0x00000081,0x00000000,0x74726170,0x316c6169,0x00387836, + 0x00030005,0x00000083,0x00000000,0x00030005,0x0000008f,0x00000073,0x00040005,0x00000096, + 0x494c5053,0x00004b54,0x00040005,0x00000098,0x74726170,0x00000000,0x00030005,0x000000a8, + 0x00000069,0x00030005,0x000000b1,0x006d7573,0x00040005,0x000000c3,0x47414c46,0x00000053, + 0x00030005,0x000000c8,0x00000069,0x00040005,0x000000d5,0x61726170,0x0000006d,0x00040005, + 0x000000db,0x65646e69,0x00000078,0x00040005,0x000000ee,0x65646f63,0x00000073,0x00040005, + 0x000000f2,0x61726170,0x0000006d,0x00040005,0x000000f8,0x61726170,0x0000006d,0x00040005, + 0x00000103,0x61726170,0x0000006d,0x00040005,0x00000109,0x61726170,0x0000006d,0x00050005, + 0x00000110,0x7074754f,0x34457475,0x00000000,0x00050006,0x00000110,0x00000000,0x3874756f, + 0x00003878,0x00030005,0x00000112,0x00000000,0x00050005,0x0000011d,0x7074754f,0x61487475, + 0x0000666c,0x00050006,0x0000011d,0x00000000,0x3174756f,0x00387836,0x00030005,0x0000011f, + 0x00000000,0x00030047,0x00000020,0x00001078,0x00030047,0x0000004f,0x0000002a,0x00040047, + 0x00000057,0x0000000b,0x0000001c,0x00030047,0x00000063,0x00000002,0x00050048,0x00000063, + 0x00000000,0x00000023,0x00000000,0x00050048,0x00000063,0x00000001,0x00000023,0x00000004, + 0x00050048,0x00000063,0x00000002,0x00000023,0x00000008,0x00050048,0x00000063,0x00000003, + 0x00000023,0x0000000c,0x00050048,0x00000063,0x00000004,0x00000023,0x00000010,0x00040047, + 0x00000080,0x00000006,0x00000010,0x00030047,0x00000081,0x00000002,0x00040048,0x00000081, + 0x00000000,0x00000018,0x00050048,0x00000081,0x00000000,0x00000023,0x00000000,0x00030047, + 0x00000083,0x00000018,0x00040047,0x00000083,0x00000021,0x00000000,0x00040047,0x00000083, + 0x00000022,0x00000000,0x00040047,0x00000096,0x00000001,0x00000000,0x00030047,0x000000ba, + 0x0000002a,0x00040047,0x000000c3,0x00000001,0x00000001,0x00040047,0x0000010f,0x00000006, + 0x00000008,0x00030047,0x00000110,0x00000002,0x00040048,0x00000110,0x00000000,0x00000019, + 0x00050048,0x00000110,0x00000000,0x00000023,0x00000000,0x00030047,0x00000112,0x00000019, + 0x00040047,0x00000112,0x00000021,0x00000005,0x00040047,0x00000112,0x00000022,0x00000000, + 0x00040047,0x0000011c,0x00000006,0x00000010,0x00030047,0x0000011d,0x00000002,0x00040048, + 0x0000011d,0x00000000,0x00000019,0x00050048,0x0000011d,0x00000000,0x00000023,0x00000000, + 0x00030047,0x0000011f,0x00000019,0x00040047,0x0000011f,0x00000021,0x00000002,0x00040047, + 0x0000011f,0x00000022,0x00000000,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002, + 0x00030016,0x00000006,0x00000010,0x00040017,0x00000007,0x00000006,0x00000002,0x00040020, + 0x00000008,0x00000007,0x00000007,0x00040015,0x00000009,0x00000010,0x00000000,0x00040021, + 0x0000000a,0x00000009,0x00000008,0x00040021,0x0000000e,0x00000007,0x00000008,0x0004002b, + 0x00000006,0x00000014,0x00000000,0x0005002c,0x00000007,0x00000015,0x00000014,0x00000014, + 0x00020014,0x00000017,0x00040017,0x00000018,0x00000017,0x00000002,0x00040016,0x0000001b, + 0x00000008,0x00001076,0x00040017,0x0000001c,0x0000001b,0x00000002,0x00040020,0x0000001d, + 0x00000007,0x0000001c,0x00040015,0x00000021,0x00000008,0x00000000,0x00040017,0x00000022, + 0x00000021,0x00000002,0x00040020,0x00000023,0x00000007,0x00000022,0x00040015,0x00000027, + 0x00000020,0x00000000,0x0004002b,0x00000027,0x00000028,0x00000000,0x00040020,0x00000029, + 0x00000007,0x00000021,0x0004002b,0x00000027,0x0000002d,0x00000001,0x0004002b,0x00000027, + 0x00000031,0x00000008,0x0004002b,0x00000006,0x00000039,0x0000c400,0x0005002c,0x00000007, + 0x0000003a,0x00000039,0x00000039,0x0004002b,0x00000006,0x0000003b,0x00004400,0x0005002c, + 0x00000007,0x0000003c,0x0000003b,0x0000003b,0x0004002b,0x00000006,0x0000003f,0x0000ab28, + 0x0005002c,0x00000007,0x00000040,0x0000003f,0x0000003f,0x0004002b,0x00000006,0x00000043, + 0x00003728,0x0005002c,0x00000007,0x00000044,0x00000043,0x00000043,0x0004002b,0x00000006, + 0x00000049,0x00003b28,0x0005002c,0x00000007,0x0000004a,0x00000049,0x00000049,0x00040020, + 0x00000053,0x00000007,0x00000027,0x00040017,0x00000055,0x00000027,0x00000003,0x00040020, + 0x00000056,0x00000001,0x00000055,0x0004003b,0x00000056,0x00000057,0x00000001,0x00040020, + 0x00000058,0x00000001,0x00000027,0x0004002b,0x00000027,0x0000005d,0x0000ffff,0x0004002b, + 0x00000027,0x0000005f,0x00000100,0x0007001e,0x00000063,0x00000027,0x00000027,0x00000027, + 0x00000027,0x00000027,0x00040020,0x00000064,0x00000009,0x00000063,0x0004003b,0x00000064, + 0x00000065,0x00000009,0x00040015,0x00000066,0x00000020,0x00000001,0x0004002b,0x00000066, + 0x00000067,0x00000001,0x00040020,0x00000068,0x00000009,0x00000027,0x0004002b,0x00000066, + 0x00000076,0x00000000,0x00040017,0x0000007d,0x00000027,0x00000004,0x00040020,0x0000007e, + 0x00000007,0x0000007d,0x0003001d,0x00000080,0x0000007d,0x0003001e,0x00000081,0x00000080, + 0x00040020,0x00000082,0x0000000c,0x00000081,0x0004003b,0x00000082,0x00000083,0x0000000c, + 0x0004002b,0x00000027,0x0000008a,0x00000003,0x00040020,0x0000008c,0x0000000c,0x0000007d, + 0x00040032,0x00000027,0x00000096,0x00000002,0x0004002b,0x00000066,0x0000009a,0x00000002, + 0x0004002b,0x00000027,0x000000af,0x00000004,0x00040032,0x00000027,0x000000c3,0x00000000, + 0x00060034,0x00000027,0x000000c4,0x000000c7,0x000000c3,0x00000031,0x00060034,0x00000017, + 0x000000c5,0x000000ab,0x000000c4,0x00000028,0x0004002b,0x00000066,0x000000dd,0x00000003, + 0x0004002b,0x00000066,0x000000e1,0x00000004,0x0004002b,0x00000027,0x000000e7,0x00000030, + 0x00060034,0x00000027,0x000000e8,0x000000c7,0x000000c3,0x000000e7,0x00060034,0x00000017, + 0x000000e9,0x000000ab,0x000000e8,0x00000028,0x00040017,0x000000ec,0x00000027,0x00000002, + 0x00040020,0x000000ed,0x00000007,0x000000ec,0x0004002b,0x00000027,0x000000fb,0x00000010, + 0x0004002b,0x00000027,0x000000ff,0x00000002,0x0003001d,0x0000010f,0x000000ec,0x0003001e, + 0x00000110,0x0000010f,0x00040020,0x00000111,0x0000000c,0x00000110,0x0004003b,0x00000111, + 0x00000112,0x0000000c,0x00040020,0x00000116,0x0000000c,0x000000ec,0x00060034,0x00000027, + 0x00000118,0x000000c7,0x000000c3,0x000000fb,0x00060034,0x00000017,0x00000119,0x000000aa, + 0x00000118,0x00000028,0x0003001d,0x0000011c,0x0000007d,0x0003001e,0x0000011d,0x0000011c, + 0x00040020,0x0000011e,0x0000000c,0x0000011d,0x0004003b,0x0000011e,0x0000011f,0x0000000c, + 0x0006002c,0x00000055,0x00000124,0x0000005f,0x0000002d,0x0000002d,0x0004002b,0x00000027, + 0x00000125,0x00000020,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8, + 0x00000005,0x0004003b,0x00000053,0x00000054,0x00000007,0x0004003b,0x00000053,0x00000062, + 0x00000007,0x0004003b,0x00000053,0x0000006c,0x00000007,0x0004003b,0x00000053,0x00000070, + 0x00000007,0x0004003b,0x0000007e,0x0000007f,0x00000007,0x0004003b,0x00000053,0x0000008f, + 0x00000007,0x0004003b,0x0000007e,0x00000098,0x00000007,0x0004003b,0x00000053,0x000000a8, + 0x00000007,0x0004003b,0x00000008,0x000000b1,0x00000007,0x0004003b,0x00000053,0x000000c8, + 0x00000007,0x0004003b,0x00000008,0x000000d5,0x00000007,0x0004003b,0x00000053,0x000000db, + 0x00000007,0x0004003b,0x000000ed,0x000000ee,0x00000007,0x0004003b,0x00000008,0x000000f2, + 0x00000007,0x0004003b,0x00000008,0x000000f8,0x00000007,0x0004003b,0x00000008,0x00000103, + 0x00000007,0x0004003b,0x00000008,0x00000109,0x00000007,0x00050041,0x00000058,0x00000059, + 0x00000057,0x00000028,0x0004003d,0x00000027,0x0000005a,0x00000059,0x00050041,0x00000058, + 0x0000005b,0x00000057,0x0000002d,0x0004003d,0x00000027,0x0000005c,0x0000005b,0x00050084, + 0x00000027,0x0000005e,0x0000005c,0x0000005d,0x00050084,0x00000027,0x00000060,0x0000005e, + 0x0000005f,0x00050080,0x00000027,0x00000061,0x0000005a,0x00000060,0x0003003e,0x00000054, + 0x00000061,0x00050041,0x00000068,0x00000069,0x00000065,0x00000067,0x0004003d,0x00000027, + 0x0000006a,0x00000069,0x00050086,0x00000027,0x0000006b,0x0000006a,0x00000031,0x0003003e, + 0x00000062,0x0000006b,0x0004003d,0x00000027,0x0000006d,0x00000054,0x0004003d,0x00000027, + 0x0000006e,0x00000062,0x00050086,0x00000027,0x0000006f,0x0000006d,0x0000006e,0x0003003e, + 0x0000006c,0x0000006f,0x0004003d,0x00000027,0x00000071,0x00000054,0x0004003d,0x00000027, + 0x00000072,0x00000062,0x00050089,0x00000027,0x00000073,0x00000071,0x00000072,0x00050084, + 0x00000027,0x00000074,0x00000073,0x00000031,0x0003003e,0x00000070,0x00000074,0x0004003d, + 0x00000027,0x00000075,0x0000006c,0x00050041,0x00000068,0x00000077,0x00000065,0x00000076, + 0x0004003d,0x00000027,0x00000078,0x00000077,0x000500ae,0x00000017,0x00000079,0x00000075, + 0x00000078,0x000300f7,0x0000007b,0x00000000,0x000400fa,0x00000079,0x0000007a,0x0000007b, + 0x000200f8,0x0000007a,0x000100fd,0x000200f8,0x0000007b,0x0004003d,0x00000027,0x00000084, + 0x0000006c,0x00050041,0x00000068,0x00000085,0x00000065,0x00000067,0x0004003d,0x00000027, + 0x00000086,0x00000085,0x00050084,0x00000027,0x00000087,0x00000084,0x00000086,0x0004003d, + 0x00000027,0x00000088,0x00000070,0x00050080,0x00000027,0x00000089,0x00000087,0x00000088, + 0x000500c2,0x00000027,0x0000008b,0x00000089,0x0000008a,0x00060041,0x0000008c,0x0000008d, + 0x00000083,0x00000076,0x0000008b,0x0004003d,0x0000007d,0x0000008e,0x0000008d,0x0003003e, + 0x0000007f,0x0000008e,0x0003003e,0x0000008f,0x0000002d,0x000200f9,0x00000090,0x000200f8, + 0x00000090,0x000400f6,0x00000092,0x00000093,0x00000001,0x000200f9,0x00000094,0x000200f8, + 0x00000094,0x0004003d,0x00000027,0x00000095,0x0000008f,0x000500b0,0x00000017,0x00000097, + 0x00000095,0x00000096,0x000400fa,0x00000097,0x00000091,0x00000092,0x000200f8,0x00000091, + 0x0004003d,0x00000027,0x00000099,0x0000008f,0x00050041,0x00000068,0x0000009b,0x00000065, + 0x0000009a,0x0004003d,0x00000027,0x0000009c,0x0000009b,0x00050084,0x00000027,0x0000009d, + 0x00000099,0x0000009c,0x0004003d,0x00000027,0x0000009e,0x0000006c,0x00050041,0x00000068, + 0x0000009f,0x00000065,0x00000067,0x0004003d,0x00000027,0x000000a0,0x0000009f,0x00050084, + 0x00000027,0x000000a1,0x0000009e,0x000000a0,0x00050080,0x00000027,0x000000a2,0x0000009d, + 0x000000a1,0x0004003d,0x00000027,0x000000a3,0x00000070,0x00050080,0x00000027,0x000000a4, + 0x000000a2,0x000000a3,0x000500c2,0x00000027,0x000000a5,0x000000a4,0x0000008a,0x00060041, + 0x0000008c,0x000000a6,0x00000083,0x00000076,0x000000a5,0x0004003d,0x0000007d,0x000000a7, + 0x000000a6,0x0003003e,0x00000098,0x000000a7,0x0003003e,0x000000a8,0x00000028,0x000200f9, + 0x000000a9,0x000200f8,0x000000a9,0x000400f6,0x000000ab,0x000000ac,0x00000001,0x000200f9, + 0x000000ad,0x000200f8,0x000000ad,0x0004003d,0x00000027,0x000000ae,0x000000a8,0x000500b0, + 0x00000017,0x000000b0,0x000000ae,0x000000af,0x000400fa,0x000000b0,0x000000aa,0x000000ab, + 0x000200f8,0x000000aa,0x0004003d,0x00000027,0x000000b2,0x000000a8,0x00050041,0x00000053, + 0x000000b3,0x0000007f,0x000000b2,0x0004003d,0x00000027,0x000000b4,0x000000b3,0x0004007c, + 0x00000007,0x000000b5,0x000000b4,0x0004003d,0x00000027,0x000000b6,0x000000a8,0x00050041, + 0x00000053,0x000000b7,0x00000098,0x000000b6,0x0004003d,0x00000027,0x000000b8,0x000000b7, + 0x0004007c,0x00000007,0x000000b9,0x000000b8,0x00050081,0x00000007,0x000000ba,0x000000b5, + 0x000000b9,0x0003003e,0x000000b1,0x000000ba,0x0004003d,0x00000027,0x000000bb,0x000000a8, + 0x0004003d,0x00000007,0x000000bc,0x000000b1,0x0004007c,0x00000027,0x000000bd,0x000000bc, + 0x00050041,0x00000053,0x000000be,0x0000007f,0x000000bb,0x0003003e,0x000000be,0x000000bd, + 0x000200f9,0x000000ac,0x000200f8,0x000000ac,0x0004003d,0x00000027,0x000000bf,0x000000a8, + 0x00050080,0x00000027,0x000000c0,0x000000bf,0x00000067,0x0003003e,0x000000a8,0x000000c0, + 0x000200f9,0x000000a9,0x000200f8,0x000000ab,0x000200f9,0x00000093,0x000200f8,0x00000093, + 0x0004003d,0x00000027,0x000000c1,0x0000008f,0x00050080,0x00000027,0x000000c2,0x000000c1, + 0x00000067,0x0003003e,0x0000008f,0x000000c2,0x000200f9,0x00000090,0x000200f8,0x00000092, + 0x000300f7,0x000000c7,0x00000000,0x000400fa,0x000000c5,0x000000c6,0x000000c7,0x000200f8, + 0x000000c6,0x0003003e,0x000000c8,0x00000028,0x000200f9,0x000000c9,0x000200f8,0x000000c9, + 0x000400f6,0x000000cb,0x000000cc,0x00000001,0x000200f9,0x000000cd,0x000200f8,0x000000cd, + 0x0004003d,0x00000027,0x000000ce,0x000000c8,0x000500b0,0x00000017,0x000000cf,0x000000ce, + 0x000000af,0x000400fa,0x000000cf,0x000000ca,0x000000cb,0x000200f8,0x000000ca,0x0004003d, + 0x00000027,0x000000d0,0x000000c8,0x0004003d,0x00000027,0x000000d1,0x000000c8,0x00050041, + 0x00000053,0x000000d2,0x0000007f,0x000000d1,0x0004003d,0x00000027,0x000000d3,0x000000d2, + 0x0004007c,0x00000007,0x000000d4,0x000000d3,0x0003003e,0x000000d5,0x000000d4,0x00050039, + 0x00000007,0x000000d6,0x00000010,0x000000d5,0x0004007c,0x00000027,0x000000d7,0x000000d6, + 0x00050041,0x00000053,0x000000d8,0x0000007f,0x000000d0,0x0003003e,0x000000d8,0x000000d7, + 0x000200f9,0x000000cc,0x000200f8,0x000000cc,0x0004003d,0x00000027,0x000000d9,0x000000c8, + 0x00050080,0x00000027,0x000000da,0x000000d9,0x00000067,0x0003003e,0x000000c8,0x000000da, + 0x000200f9,0x000000c9,0x000200f8,0x000000cb,0x000200f9,0x000000c7,0x000200f8,0x000000c7, + 0x0004003d,0x00000027,0x000000dc,0x0000006c,0x00050041,0x00000068,0x000000de,0x00000065, + 0x000000dd,0x0004003d,0x00000027,0x000000df,0x000000de,0x00050084,0x00000027,0x000000e0, + 0x000000dc,0x000000df,0x00050041,0x00000068,0x000000e2,0x00000065,0x000000e1,0x0004003d, + 0x00000027,0x000000e3,0x000000e2,0x00050080,0x00000027,0x000000e4,0x000000e0,0x000000e3, + 0x0004003d,0x00000027,0x000000e5,0x00000070,0x00050080,0x00000027,0x000000e6,0x000000e4, + 0x000000e5,0x0003003e,0x000000db,0x000000e6,0x000300f7,0x000000eb,0x00000000,0x000400fa, + 0x000000e9,0x000000ea,0x000000eb,0x000200f8,0x000000ea,0x00050041,0x00000053,0x000000ef, + 0x0000007f,0x00000028,0x0004003d,0x00000027,0x000000f0,0x000000ef,0x0004007c,0x00000007, + 0x000000f1,0x000000f0,0x0003003e,0x000000f2,0x000000f1,0x00050039,0x00000009,0x000000f3, + 0x0000000c,0x000000f2,0x00040071,0x00000027,0x000000f4,0x000000f3,0x00050041,0x00000053, + 0x000000f5,0x0000007f,0x0000002d,0x0004003d,0x00000027,0x000000f6,0x000000f5,0x0004007c, + 0x00000007,0x000000f7,0x000000f6,0x0003003e,0x000000f8,0x000000f7,0x00050039,0x00000009, + 0x000000f9,0x0000000c,0x000000f8,0x00040071,0x00000027,0x000000fa,0x000000f9,0x000500c4, + 0x00000027,0x000000fc,0x000000fa,0x000000fb,0x000500c5,0x00000027,0x000000fd,0x000000f4, + 0x000000fc,0x00050041,0x00000053,0x000000fe,0x000000ee,0x00000028,0x0003003e,0x000000fe, + 0x000000fd,0x00050041,0x00000053,0x00000100,0x0000007f,0x000000ff,0x0004003d,0x00000027, + 0x00000101,0x00000100,0x0004007c,0x00000007,0x00000102,0x00000101,0x0003003e,0x00000103, + 0x00000102,0x00050039,0x00000009,0x00000104,0x0000000c,0x00000103,0x00040071,0x00000027, + 0x00000105,0x00000104,0x00050041,0x00000053,0x00000106,0x0000007f,0x0000008a,0x0004003d, + 0x00000027,0x00000107,0x00000106,0x0004007c,0x00000007,0x00000108,0x00000107,0x0003003e, + 0x00000109,0x00000108,0x00050039,0x00000009,0x0000010a,0x0000000c,0x00000109,0x00040071, + 0x00000027,0x0000010b,0x0000010a,0x000500c4,0x00000027,0x0000010c,0x0000010b,0x000000fb, + 0x000500c5,0x00000027,0x0000010d,0x00000105,0x0000010c,0x00050041,0x00000053,0x0000010e, + 0x000000ee,0x0000002d,0x0003003e,0x0000010e,0x0000010d,0x0004003d,0x00000027,0x00000113, + 0x000000db,0x000500c2,0x00000027,0x00000114,0x00000113,0x0000008a,0x0004003d,0x000000ec, + 0x00000115,0x000000ee,0x00060041,0x00000116,0x00000117,0x00000112,0x00000076,0x00000114, + 0x0003003e,0x00000117,0x00000115,0x000200f9,0x000000eb,0x000200f8,0x000000eb,0x000300f7, + 0x0000011b,0x00000000,0x000400fa,0x00000119,0x0000011a,0x0000011b,0x000200f8,0x0000011a, + 0x0004003d,0x00000027,0x00000120,0x000000db,0x000500c2,0x00000027,0x00000121,0x00000120, + 0x0000008a,0x0004003d,0x0000007d,0x00000122,0x0000007f,0x00060041,0x0000008c,0x00000123, + 0x0000011f,0x00000076,0x00000121,0x0003003e,0x00000123,0x00000122,0x000200f9,0x0000011b, + 0x000200f8,0x0000011b,0x000100fd,0x00010038,0x00050036,0x00000009,0x0000000c,0x00000000, + 0x0000000a,0x00030037,0x00000008,0x0000000b,0x000200f8,0x0000000d,0x0004003b,0x00000008, + 0x00000012,0x00000007,0x0004003b,0x0000001d,0x0000001e,0x00000007,0x0004003b,0x00000023, + 0x00000024,0x00000007,0x0004003d,0x00000007,0x00000013,0x0000000b,0x0004003d,0x00000007, + 0x00000016,0x0000000b,0x0004009c,0x00000018,0x00000019,0x00000016,0x000600a9,0x00000007, + 0x0000001a,0x00000019,0x00000015,0x00000013,0x0003003e,0x00000012,0x0000001a,0x0004003d, + 0x00000007,0x0000001f,0x00000012,0x00040073,0x0000001c,0x00000020,0x0000001f,0x0003003e, + 0x0000001e,0x00000020,0x0004003d,0x0000001c,0x00000025,0x0000001e,0x0004007c,0x00000022, + 0x00000026,0x00000025,0x0003003e,0x00000024,0x00000026,0x00050041,0x00000029,0x0000002a, + 0x00000024,0x00000028,0x0004003d,0x00000021,0x0000002b,0x0000002a,0x00040071,0x00000027, + 0x0000002c,0x0000002b,0x00050041,0x00000029,0x0000002e,0x00000024,0x0000002d,0x0004003d, + 0x00000021,0x0000002f,0x0000002e,0x00040071,0x00000027,0x00000030,0x0000002f,0x000500c4, + 0x00000027,0x00000032,0x00000030,0x00000031,0x000500c5,0x00000027,0x00000033,0x0000002c, + 0x00000032,0x00040071,0x00000009,0x00000034,0x00000033,0x000200fe,0x00000034,0x00010038, + 0x00050036,0x00000007,0x00000010,0x00000000,0x0000000e,0x00030037,0x00000008,0x0000000f, + 0x000200f8,0x00000011,0x0004003b,0x00000008,0x00000037,0x00000007,0x0004003b,0x00000008, + 0x0000003e,0x00000007,0x0004003b,0x00000008,0x00000046,0x00000007,0x0004003b,0x00000008, + 0x0000004c,0x00000007,0x0004003d,0x00000007,0x00000038,0x0000000f,0x0008000c,0x00000007, + 0x0000003d,0x00000001,0x0000002b,0x00000038,0x0000003a,0x0000003c,0x0003003e,0x00000037, + 0x0000003d,0x0004003d,0x00000007,0x00000041,0x00000037,0x0006000c,0x00000007,0x00000042, + 0x00000001,0x00000004,0x00000041,0x0008000c,0x00000007,0x00000045,0x00000001,0x00000032, + 0x00000040,0x00000042,0x00000044,0x0003003e,0x0000003e,0x00000045,0x0004003d,0x00000007, + 0x00000047,0x00000037,0x0004003d,0x00000007,0x00000048,0x0000003e,0x0008000c,0x00000007, + 0x0000004b,0x00000001,0x00000032,0x00000047,0x00000048,0x0000004a,0x0003003e,0x00000046, + 0x0000004b,0x0004003d,0x00000007,0x0000004d,0x0000000f,0x0004003d,0x00000007,0x0000004e, + 0x00000046,0x00050085,0x00000007,0x0000004f,0x0000004d,0x0000004e,0x0003003e,0x0000004c, + 0x0000004f,0x0004003d,0x00000007,0x00000050,0x0000004c,0x000200fe,0x00000050,0x00010038, +}; +struct Module { const char* name; const uint32_t* words; unsigned count; }; +inline constexpr Module kModules[] = { + {"gemm_fp8", k_gemm_fp8, (unsigned)(sizeof k_gemm_fp8 / sizeof k_gemm_fp8[0])}, + {"gemm_f16", k_gemm_f16, (unsigned)(sizeof k_gemm_f16 / sizeof k_gemm_f16[0])}, + {"ops", k_ops, (unsigned)(sizeof k_ops / sizeof k_ops[0])}, + {"window_normalize", k_window_normalize, (unsigned)(sizeof k_window_normalize / sizeof k_window_normalize[0])}, + {"window_attend", k_window_attend, (unsigned)(sizeof k_window_attend / sizeof k_window_attend[0])}, + {"global_normalize", k_global_normalize, (unsigned)(sizeof k_global_normalize / sizeof k_global_normalize[0])}, + {"global_attend", k_global_attend, (unsigned)(sizeof k_global_attend / sizeof k_global_attend[0])}, + {"preprocess", k_preprocess, (unsigned)(sizeof k_preprocess / sizeof k_preprocess[0])}, + {"fused_block32", k_fused_block32, (unsigned)(sizeof k_fused_block32 / sizeof k_fused_block32[0])}, + {"qkv_attention", k_qkv_attention, (unsigned)(sizeof k_qkv_attention / sizeof k_qkv_attention[0])}, + {"gemm_mlp", k_gemm_mlp, (unsigned)(sizeof k_gemm_mlp / sizeof k_gemm_mlp[0])}, + {"global_attention", k_global_attention, (unsigned)(sizeof k_global_attention / sizeof k_global_attention[0])}, + {"gemm_reduce", k_gemm_reduce, (unsigned)(sizeof k_gemm_reduce / sizeof k_gemm_reduce[0])}, +}; +} // namespace mkwvk::opennr_spv diff --git a/gpu/vk/shaders/opennr_post.comp b/gpu/vk/shaders/opennr_post.comp new file mode 100644 index 000000000..17a07c7a2 --- /dev/null +++ b/gpu/vk/shaders/opennr_post.comp @@ -0,0 +1,93 @@ +#version 460 +// (hookshot) The open neural rendering backend's output: the network's head on the frame (gpu/vk/vk_opennr.cpp). +// +// The head is an RGB residual on the frame's code values and one temporal blend logit (OpenDLSS-NR docs/network.md): +// neural = clamp(proxy + rgb / 4, 0, 1) spelled as upstream's composite spells it +// weight = clamp(sigmoid(logit) * blend_scale, 0, 1) blend_scale: the model's own, a learned cap +// neural = lerp(neural, reprojected history, weight) only where there is a history +// history = truncate_to_half(neural) the next frame's input reads it +// then the style operator (Natural, Cinematic) and the intensity blend back toward the frame, as upstream's demo +// does after the blend. Its tone upgrade and display transform are left out: they put an LDR result back onto an +// HDR scene, and the frame here is LDR to begin with. +#extension GL_GOOGLE_include_directive : require +#include "opennr_common.glsl" + +layout(local_size_x = 8, local_size_y = 8) in; + +// ---- the styles: upstream's nrStyle, the HSL operator its demo applies for Natural (1) and Cinematic (2) +vec3 nrHsl(vec3 rgb) { + float high = max(max(rgb.r, rgb.g), rgb.b); + float low = min(min(rgb.r, rgb.g), rgb.b); + float sum = high + low; + float light = sum * 0.5; + float hue = 0.0, saturation = 0.0; + if (high > low) { + float delta = high - low; + saturation = light > 0.5 ? delta / ((2.0 - high) - low) : delta / sum; + if (high == rgb.r) hue = fma(rgb.g - rgb.b, 1.0 / delta, rgb.g < rgb.b ? 6.0 : 0.0) / 6.0; + else if (high == rgb.g) hue = fma(rgb.b - rgb.r, 1.0 / delta, 2.0) / 6.0; + else hue = fma(rgb.r - rgb.g, 1.0 / delta, 4.0) / 6.0; + } + return vec3(hue, saturation, light); +} + +float nrHue(float p, float q, float hue) { + float h = hue; + if (h < 0.0) h += 1.0; + if (h > 1.0) h -= 1.0; + if (h < uintBitsToFloat(0x3e2aaaabu)) return fma(h, (q - p) * 6.0, p); + if (h < 0.5) return q; + if (h < uintBitsToFloat(0x3f2aaaabu)) return fma((uintBitsToFloat(0x3f2aaaabu) - h) * (q - p), 6.0, p); + return p; +} + +vec3 nrRgb(vec3 hsl) { + if (hsl.y <= 0.0) return vec3(hsl.z); + float q = hsl.z < 0.5 ? hsl.z * (hsl.y + 1.0) : fma(-hsl.z, hsl.y, hsl.z + hsl.y); + float p = (hsl.z + hsl.z) - q; + return vec3(nrHue(p, q, hsl.x + uintBitsToFloat(0x3eaaaaabu)), nrHue(p, q, hsl.x), + nrHue(p, q, hsl.x - uintBitsToFloat(0x3eaaaaabu))); +} + +vec3 nrStyle(vec3 neural, float style, float tone) { + float styleTone = clamp(tone, 0.0, 1.0); + float exposure = style == 1.0 ? -0.1 * styleTone : 0.0; + float contrast = style == 1.0 ? -0.25 * styleTone : 0.0; + float saturation = style == 1.0 ? -0.1 * styleTone : -0.15 * styleTone; + vec3 color; + for (int c = 0; c < 3; c++) { + float value = clamp(neural[c], 0.0, 1.0); + float exposed = clamp(value * exp2(exposure), 0.0, 1.0); + float square = exposed * exposed; + float curveDelta = fma(square, 3.0 - (exposed + exposed), -exposed); + float curved = clamp(fma(contrast, curveDelta, exposed), 0.0, 1.0); + float firstGamma = exp2(log2(curved)); + color[c] = exp2(log2(max(0.0, firstGamma))); + } + vec3 hsl = nrHsl(color); + vec3 adjusted = nrRgb(vec3(hsl.x, clamp(hsl.y * (saturation + 1.0), 0.0, 1.0), hsl.z)); + vec3 again = nrHsl(adjusted); + return clamp(nrRgb(vec3(again.x, clamp(exp2(log2(again.y)), 0.0, 1.0), again.z)), vec3(0.0), vec3(1.0)); +} + +void main() { + uvec2 id = gl_GlobalInvocationID.xy; + if (id.x >= pc.valid_width || id.y >= pc.valid_height) return; + vec3 proxy = imageLoad(in_color, ivec2(id)).rgb; + uint feature = (id.y * pc.full_width + id.x) * 4u; + vec3 h = vec3(head[feature], head[feature + 1u], head[feature + 2u]); + vec3 neural = clamp(fma(h, vec3(0.03125), fma(proxy, vec3(0.125), vec3(-0.0625))) * 8.0 + 0.5, vec3(0.0), vec3(1.0)); + if (has_history(vec2(id))) { + float scale = clamp(pc.blend_scale, 0.0, 1.0); + float weight = clamp((1.0 / (1.0 + exp2(head[feature + 3u] * uintBitsToFloat(0xbfb8aa3bu)))) * scale, 0.0, 1.0); + neural = fma(vec3(weight), history_sample(vec2(id)) - neural, neural); + } + vec3 history = vec3(truncateHalf(neural.r), truncateHalf(neural.g), truncateHalf(neural.b)); + imageStore(history_next, ivec2(id), vec4(history, 1.0)); + vec3 styled = pc.style != 0.0 ? nrStyle(history, pc.style, pc.local_tone) : history; + vec3 published = history; + if (pc.style != 0.0 || pc.intensity != 1.0) + for (int c = 0; c < 3; c++) + published[c] = truncateHalf(clamp(fma(pc.intensity, styled[c] - proxy[c], proxy[c]), 0.0, 1.0)); + imageStore(out_color, ivec2(id), vec4(published, 1.0)); +} diff --git a/gpu/vk/shaders/opennr_post_comp_spv.h b/gpu/vk/shaders/opennr_post_comp_spv.h new file mode 100644 index 000000000..cee623e41 --- /dev/null +++ b/gpu/vk/shaders/opennr_post_comp_spv.h @@ -0,0 +1,761 @@ + // 1116.2.0 + #pragma once +const uint32_t OPENNR_POST_COMP_SPV[] = { + 0x07230203,0x00010600,0x0008000b,0x0000040f,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000032,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e, + 0x00000000,0x00000001,0x000e000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x0000008f, + 0x000000a1,0x0000015a,0x00000339,0x00000350,0x00000365,0x000003b8,0x00000400,0x0000040c, + 0x00060010,0x00000004,0x00000011,0x00000008,0x00000008,0x00000001,0x00030003,0x00000002, + 0x000001cc,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c, + 0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63, + 0x69645f65,0x74636572,0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00070005, + 0x0000000a,0x6e757274,0x65746163,0x666c6148,0x3b316628,0x00000000,0x00040005,0x00000009, + 0x756c6176,0x00000065,0x00060005,0x00000010,0x74736968,0x5f79726f,0x76287675,0x003b3266, + 0x00040005,0x0000000f,0x65786970,0x0000006c,0x00070005,0x00000015,0x5f736168,0x74736968, + 0x2879726f,0x3b326676,0x00000000,0x00040005,0x00000014,0x65786970,0x0000006c,0x00070005, + 0x0000001a,0x74736968,0x5f79726f,0x706d6173,0x7628656c,0x003b3266,0x00040005,0x00000019, + 0x65786970,0x0000006c,0x00050005,0x0000001f,0x7348726e,0x6676286c,0x00003b33,0x00030005, + 0x0000001e,0x00626772,0x00060005,0x00000025,0x7548726e,0x31662865,0x3b31663b,0x003b3166, + 0x00030005,0x00000022,0x00000070,0x00030005,0x00000023,0x00000071,0x00030005,0x00000024, + 0x00657568,0x00050005,0x00000028,0x6752726e,0x66762862,0x00003b33,0x00030005,0x00000027, + 0x006c7368,0x00070005,0x0000002e,0x7453726e,0x28656c79,0x3b336676,0x663b3166,0x00003b31, + 0x00040005,0x0000002b,0x7275656e,0x00006c61,0x00040005,0x0000002c,0x6c797473,0x00000065, + 0x00040005,0x0000002d,0x656e6f74,0x00000000,0x00040005,0x00000032,0x73746962,0x00000000, + 0x00040005,0x00000035,0x6e676973,0x00746942,0x00050005,0x0000003b,0x6f707865,0x746e656e, + 0x00000000,0x00050005,0x00000041,0x746e616d,0x61737369,0x00000000,0x00050005,0x00000049, + 0x666c6168,0x73746942,0x00000000,0x00060005,0x00000055,0x666c6168,0x6f707845,0x746e656e, + 0x00000000,0x00030005,0x00000088,0x00007675,0x00040005,0x0000008d,0x68737550,0x00000000, + 0x00060006,0x0000008d,0x00000000,0x6c6c7566,0x6469775f,0x00006874,0x00060006,0x0000008d, + 0x00000001,0x6c6c7566,0x6965685f,0x00746867,0x00060006,0x0000008d,0x00000002,0x696c6176, + 0x69775f64,0x00687464,0x00070006,0x0000008d,0x00000003,0x696c6176,0x65685f64,0x74686769, + 0x00000000,0x00050006,0x0000008d,0x00000004,0x64656573,0x00000000,0x00070006,0x0000008d, + 0x00000005,0x74736968,0x5f79726f,0x696c6176,0x00000064,0x00070006,0x0000008d,0x00000006, + 0x69746f6d,0x765f6e6f,0x64696c61,0x00000000,0x00060006,0x0000008d,0x00000007,0x6f747561, + 0x73616d5f,0x0000006b,0x00050006,0x0000008d,0x00000008,0x6c797473,0x00000065,0x00060006, + 0x0000008d,0x00000009,0x61636f6c,0x6f745f6c,0x0000656e,0x00070006,0x0000008d,0x0000000a, + 0x61636f6c,0x74735f6c,0x74637572,0x00657275,0x00050006,0x0000008d,0x0000000b,0x6e696b73, + 0x00000000,0x00060006,0x0000008d,0x0000000c,0x69746f6d,0x735f6e6f,0x00657a69,0x00060006, + 0x0000008d,0x0000000d,0x6e656c62,0x63735f64,0x00656c61,0x00060006,0x0000008d,0x0000000e, + 0x65746e69,0x7469736e,0x00000079,0x00030005,0x0000008f,0x00006370,0x00040005,0x0000009d, + 0x657a6973,0x00000000,0x00040005,0x000000a1,0x69746f6d,0x00006e6f,0x00030005,0x000000a5, + 0x00007461,0x00030005,0x000000cf,0x00007675,0x00040005,0x000000d0,0x61726170,0x0000006d, + 0x00040005,0x000000e3,0x696c6176,0x00000064,0x00030005,0x000000eb,0x00007675,0x00040005, + 0x000000f2,0x61726170,0x0000006d,0x00050005,0x000000fc,0x69736f70,0x6e6f6974,0x00000000, + 0x00040005,0x00000100,0x65736162,0x00000000,0x00030005,0x00000107,0x00000066,0x00040005, + 0x0000010c,0x61757173,0x00006572,0x00040005,0x00000110,0x65627563,0x00000000,0x00030005, + 0x00000114,0x00003077,0x00030005,0x0000011c,0x00003177,0x00030005,0x00000126,0x00003377, + 0x00030005,0x0000012b,0x00003277,0x00040005,0x00000133,0x6464696d,0x0000656c,0x00030005, + 0x00000137,0x00776f6c,0x00040005,0x00000142,0x746e6563,0x00007265,0x00040005,0x0000014e, + 0x68676968,0x00000000,0x00040005,0x00000159,0x7466656c,0x00000000,0x00060005,0x0000015a, + 0x74736968,0x5f79726f,0x76657270,0x00000000,0x00030005,0x00000164,0x00706f74,0x00030005, + 0x0000016d,0x0064696d,0x00040005,0x00000172,0x74746f62,0x00006d6f,0x00040005,0x0000017b, + 0x68676972,0x00000074,0x00030005,0x00000184,0x00000061,0x00030005,0x0000018a,0x00000062, + 0x00030005,0x00000190,0x00000063,0x00030005,0x00000196,0x00000064,0x00030005,0x0000019c, + 0x00000065,0x00040005,0x000001a2,0x756c6176,0x00000065,0x00040005,0x000001c7,0x68676968, + 0x00000000,0x00030005,0x000001d1,0x00776f6c,0x00030005,0x000001da,0x006d7573,0x00040005, + 0x000001de,0x6867696c,0x00000074,0x00030005,0x000001e1,0x00657568,0x00050005,0x000001e2, + 0x75746173,0x69746172,0x00006e6f,0x00040005,0x000001e8,0x746c6564,0x00000061,0x00030005, + 0x00000233,0x00000068,0x00030005,0x00000271,0x00000071,0x00030005,0x0000028b,0x00000070, + 0x00040005,0x00000298,0x61726170,0x0000006d,0x00040005,0x0000029a,0x61726170,0x0000006d, + 0x00040005,0x0000029c,0x61726170,0x0000006d,0x00040005,0x0000029e,0x61726170,0x0000006d, + 0x00040005,0x000002a0,0x61726170,0x0000006d,0x00040005,0x000002a2,0x61726170,0x0000006d, + 0x00040005,0x000002aa,0x61726170,0x0000006d,0x00040005,0x000002ac,0x61726170,0x0000006d, + 0x00040005,0x000002ae,0x61726170,0x0000006d,0x00050005,0x000002b3,0x6c797473,0x6e6f5465, + 0x00000065,0x00050005,0x000002b6,0x6f707865,0x65727573,0x00000000,0x00050005,0x000002c1, + 0x746e6f63,0x74736172,0x00000000,0x00050005,0x000002cc,0x75746173,0x69746172,0x00006e6f, + 0x00030005,0x000002d9,0x00000063,0x00040005,0x000002e1,0x756c6176,0x00000065,0x00040005, + 0x000002e6,0x6f707865,0x00646573,0x00040005,0x000002ec,0x61757173,0x00006572,0x00050005, + 0x000002f0,0x76727563,0x6c654465,0x00006174,0x00040005,0x000002fa,0x76727563,0x00006465, + 0x00050005,0x00000300,0x73726966,0x6d614774,0x0000616d,0x00040005,0x00000304,0x6f6c6f63, + 0x00000072,0x00030005,0x0000030d,0x006c7368,0x00040005,0x0000030e,0x61726170,0x0000006d, + 0x00050005,0x00000311,0x756a6461,0x64657473,0x00000000,0x00040005,0x0000031d,0x61726170, + 0x0000006d,0x00040005,0x0000031f,0x69616761,0x0000006e,0x00040005,0x00000320,0x61726170, + 0x0000006d,0x00040005,0x0000032d,0x61726170,0x0000006d,0x00030005,0x00000336,0x00006469, + 0x00080005,0x00000339,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044, + 0x00040005,0x0000034d,0x786f7270,0x00000079,0x00050005,0x00000350,0x635f6e69,0x726f6c6f, + 0x00000000,0x00040005,0x00000356,0x74616566,0x00657275,0x00030005,0x00000361,0x00000068, + 0x00040005,0x00000363,0x64616548,0x00000000,0x00050006,0x00000363,0x00000000,0x64616568, + 0x00000000,0x00030005,0x00000365,0x00000000,0x00040005,0x00000373,0x7275656e,0x00006c61, + 0x00040005,0x00000385,0x61726170,0x0000006d,0x00040005,0x00000389,0x6c616373,0x00000065, + 0x00040005,0x0000038f,0x67696577,0x00007468,0x00040005,0x000003a2,0x61726170,0x0000006d, + 0x00040005,0x000003a8,0x74736968,0x0079726f,0x00040005,0x000003a9,0x61726170,0x0000006d, + 0x00040005,0x000003ad,0x61726170,0x0000006d,0x00040005,0x000003b1,0x61726170,0x0000006d, + 0x00060005,0x000003b8,0x74736968,0x5f79726f,0x7478656e,0x00000000,0x00040005,0x000003c1, + 0x6c797473,0x00006465,0x00040005,0x000003ca,0x61726170,0x0000006d,0x00040005,0x000003cc, + 0x61726170,0x0000006d,0x00040005,0x000003cf,0x61726170,0x0000006d,0x00050005,0x000003d6, + 0x6c627570,0x65687369,0x00000064,0x00030005,0x000003e4,0x00000063,0x00040005,0x000003fb, + 0x61726170,0x0000006d,0x00050005,0x00000400,0x5f74756f,0x6f6c6f63,0x00000072,0x00050005, + 0x0000040a,0x74616546,0x73657275,0x00000000,0x00060006,0x0000040a,0x00000000,0x74616566, + 0x73657275,0x00000000,0x00030005,0x0000040c,0x00000000,0x00030047,0x0000008d,0x00000002, + 0x00050048,0x0000008d,0x00000000,0x00000023,0x00000000,0x00050048,0x0000008d,0x00000001, + 0x00000023,0x00000004,0x00050048,0x0000008d,0x00000002,0x00000023,0x00000008,0x00050048, + 0x0000008d,0x00000003,0x00000023,0x0000000c,0x00050048,0x0000008d,0x00000004,0x00000023, + 0x00000010,0x00050048,0x0000008d,0x00000005,0x00000023,0x00000014,0x00050048,0x0000008d, + 0x00000006,0x00000023,0x00000018,0x00050048,0x0000008d,0x00000007,0x00000023,0x0000001c, + 0x00050048,0x0000008d,0x00000008,0x00000023,0x00000020,0x00050048,0x0000008d,0x00000009, + 0x00000023,0x00000024,0x00050048,0x0000008d,0x0000000a,0x00000023,0x00000028,0x00050048, + 0x0000008d,0x0000000b,0x00000023,0x0000002c,0x00050048,0x0000008d,0x0000000c,0x00000023, + 0x00000030,0x00050048,0x0000008d,0x0000000d,0x00000023,0x00000038,0x00050048,0x0000008d, + 0x0000000e,0x00000023,0x0000003c,0x00040047,0x000000a1,0x00000021,0x00000002,0x00040047, + 0x000000a1,0x00000022,0x00000000,0x00040047,0x0000015a,0x00000021,0x00000001,0x00040047, + 0x0000015a,0x00000022,0x00000000,0x00040047,0x00000339,0x0000000b,0x0000001c,0x00030047, + 0x00000350,0x00000018,0x00040047,0x00000350,0x00000021,0x00000000,0x00040047,0x00000350, + 0x00000022,0x00000000,0x00040047,0x00000362,0x00000006,0x00000004,0x00030047,0x00000363, + 0x00000002,0x00040048,0x00000363,0x00000000,0x00000018,0x00050048,0x00000363,0x00000000, + 0x00000023,0x00000000,0x00030047,0x00000365,0x00000018,0x00040047,0x00000365,0x00000021, + 0x00000004,0x00040047,0x00000365,0x00000022,0x00000000,0x00030047,0x000003b8,0x00000019, + 0x00040047,0x000003b8,0x00000021,0x00000006,0x00040047,0x000003b8,0x00000022,0x00000000, + 0x00030047,0x00000400,0x00000019,0x00040047,0x00000400,0x00000021,0x00000005,0x00040047, + 0x00000400,0x00000022,0x00000000,0x00040047,0x00000409,0x00000006,0x00000010,0x00030047, + 0x0000040a,0x00000002,0x00050048,0x0000040a,0x00000000,0x00000023,0x00000000,0x00040047, + 0x0000040c,0x00000021,0x00000003,0x00040047,0x0000040c,0x00000022,0x00000000,0x00020013, + 0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040020, + 0x00000007,0x00000007,0x00000006,0x00040021,0x00000008,0x00000006,0x00000007,0x00040017, + 0x0000000c,0x00000006,0x00000002,0x00040020,0x0000000d,0x00000007,0x0000000c,0x00040021, + 0x0000000e,0x0000000c,0x0000000d,0x00020014,0x00000012,0x00040021,0x00000013,0x00000012, + 0x0000000d,0x00040017,0x00000017,0x00000006,0x00000003,0x00040021,0x00000018,0x00000017, + 0x0000000d,0x00040020,0x0000001c,0x00000007,0x00000017,0x00040021,0x0000001d,0x00000017, + 0x0000001c,0x00060021,0x00000021,0x00000006,0x00000007,0x00000007,0x00000007,0x00060021, + 0x0000002a,0x00000017,0x0000001c,0x00000007,0x00000007,0x00040015,0x00000030,0x00000020, + 0x00000000,0x00040020,0x00000031,0x00000007,0x00000030,0x0004002b,0x00000030,0x00000037, + 0x00000010,0x0004002b,0x00000030,0x00000039,0x00008000,0x0004002b,0x00000030,0x0000003d, + 0x00000017,0x0004002b,0x00000030,0x0000003f,0x000000ff,0x0004002b,0x00000030,0x00000043, + 0x007fffff,0x0004002b,0x00000030,0x0000004c,0x00000000,0x0004002b,0x00000030,0x0000004e, + 0x00007e00,0x0004002b,0x00000030,0x0000004f,0x00007c00,0x00040015,0x00000053,0x00000020, + 0x00000001,0x00040020,0x00000054,0x00000007,0x00000053,0x0004002b,0x00000053,0x00000058, + 0x00000070,0x0004002b,0x00000053,0x0000005b,0x0000001f,0x0004002b,0x00000053,0x00000063, + 0x00000000,0x0004002b,0x00000053,0x00000068,0xfffffff6,0x0004002b,0x00000030,0x00000070, + 0x00800000,0x0004002b,0x00000053,0x00000072,0x0000000e,0x0004002b,0x00000030,0x0000007c, + 0x0000000a,0x0004002b,0x00000030,0x00000080,0x0000000d,0x0004002b,0x00000006,0x0000008a, + 0x3f000000,0x0011001e,0x0000008d,0x00000030,0x00000030,0x00000030,0x00000030,0x00000030, + 0x00000030,0x00000030,0x00000030,0x00000006,0x00000006,0x00000006,0x00000006,0x0000000c, + 0x00000006,0x00000006,0x00040020,0x0000008e,0x00000009,0x0000008d,0x0004003b,0x0000008e, + 0x0000008f,0x00000009,0x0004002b,0x00000053,0x00000090,0x00000002,0x00040020,0x00000091, + 0x00000009,0x00000030,0x0004002b,0x00000053,0x00000095,0x00000003,0x00040017,0x0000009b, + 0x00000053,0x00000002,0x00040020,0x0000009c,0x00000007,0x0000009b,0x00090019,0x0000009e, + 0x00000006,0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x0003001b, + 0x0000009f,0x0000009e,0x00040020,0x000000a0,0x00000000,0x0000009f,0x0004003b,0x000000a0, + 0x000000a1,0x00000000,0x0004002b,0x00000053,0x000000ac,0x00000001,0x00040017,0x000000b4, + 0x00000006,0x00000004,0x0004002b,0x00000053,0x000000b7,0x0000000c,0x00040020,0x000000b8, + 0x00000009,0x0000000c,0x0004002b,0x00000053,0x000000bf,0x00000005,0x0003002a,0x00000012, + 0x000000c5,0x0004002b,0x00000053,0x000000c7,0x00000006,0x00030029,0x00000012,0x000000cd, + 0x0004002b,0x00000006,0x000000d4,0x00000000,0x0005002c,0x0000000c,0x000000d5,0x000000d4, + 0x000000d4,0x00040017,0x000000d6,0x00000012,0x00000002,0x0004002b,0x00000006,0x000000dc, + 0x3f800000,0x0005002c,0x0000000c,0x000000dd,0x000000dc,0x000000dc,0x0004002b,0x00000006, + 0x00000118,0xbf000000,0x0005002c,0x0000000c,0x00000119,0x00000118,0x00000118,0x0004002b, + 0x00000006,0x0000011e,0x3fc00000,0x0004002b,0x00000006,0x00000121,0x40200000,0x0005002c, + 0x0000000c,0x0000013b,0x0000008a,0x0000008a,0x0004002b,0x00000006,0x00000150,0x40000000, + 0x0004003b,0x000000a0,0x0000015a,0x00000000,0x0004002b,0x00000030,0x0000015e,0x00000001, + 0x0004002b,0x00000030,0x000001cd,0x00000002,0x0004002b,0x00000006,0x0000020e,0x40c00000, + 0x0004002b,0x00000006,0x0000022a,0x40800000,0x0004002b,0x00000030,0x00000242,0x3e2aaaab, + 0x0004002b,0x00000030,0x00000256,0x3f2aaaab,0x0004002b,0x00000030,0x00000295,0x3eaaaaab, + 0x0004002b,0x00000006,0x000002bc,0xbdcccccd,0x0004002b,0x00000006,0x000002c7,0xbe800000, + 0x0004002b,0x00000006,0x000002d5,0xbe19999a,0x0004002b,0x00000006,0x000002f2,0x40400000, + 0x0006002c,0x00000017,0x0000032f,0x000000d4,0x000000d4,0x000000d4,0x0006002c,0x00000017, + 0x00000330,0x000000dc,0x000000dc,0x000000dc,0x00040017,0x00000334,0x00000030,0x00000002, + 0x00040020,0x00000335,0x00000007,0x00000334,0x00040017,0x00000337,0x00000030,0x00000003, + 0x00040020,0x00000338,0x00000001,0x00000337,0x0004003b,0x00000338,0x00000339,0x00000001, + 0x00090019,0x0000034e,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000,0x00000002, + 0x00000004,0x00040020,0x0000034f,0x00000000,0x0000034e,0x0004003b,0x0000034f,0x00000350, + 0x00000000,0x0004002b,0x00000030,0x0000035f,0x00000004,0x0003001d,0x00000362,0x00000006, + 0x0003001e,0x00000363,0x00000362,0x00040020,0x00000364,0x0000000c,0x00000363,0x0004003b, + 0x00000364,0x00000365,0x0000000c,0x00040020,0x00000367,0x0000000c,0x00000006,0x0004002b, + 0x00000006,0x00000375,0x3d000000,0x0006002c,0x00000017,0x00000376,0x00000375,0x00000375, + 0x00000375,0x0004002b,0x00000006,0x00000378,0x3e000000,0x0006002c,0x00000017,0x00000379, + 0x00000378,0x00000378,0x00000378,0x0004002b,0x00000006,0x0000037a,0xbd800000,0x0006002c, + 0x00000017,0x0000037b,0x0000037a,0x0000037a,0x0000037a,0x0004002b,0x00000006,0x0000037e, + 0x41000000,0x0004002b,0x00000053,0x0000038a,0x0000000d,0x00040020,0x0000038b,0x00000009, + 0x00000006,0x0004002b,0x00000030,0x00000391,0x00000003,0x0004002b,0x00000030,0x00000395, + 0xbfb8aa3b,0x00090019,0x000003b6,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000, + 0x00000002,0x00000002,0x00040020,0x000003b7,0x00000000,0x000003b6,0x0004003b,0x000003b7, + 0x000003b8,0x00000000,0x0004002b,0x00000053,0x000003c2,0x00000008,0x0004002b,0x00000053, + 0x000003c9,0x00000009,0x0004003b,0x0000034f,0x00000400,0x00000000,0x0003001d,0x00000409, + 0x000000b4,0x0003001e,0x0000040a,0x00000409,0x00040020,0x0000040b,0x0000000c,0x0000040a, + 0x0004003b,0x0000040b,0x0000040c,0x0000000c,0x0004002b,0x00000030,0x0000040d,0x00000008, + 0x0006002c,0x00000337,0x0000040e,0x0000040d,0x0000040d,0x0000015e,0x00050036,0x00000002, + 0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000335,0x00000336, + 0x00000007,0x0004003b,0x0000001c,0x0000034d,0x00000007,0x0004003b,0x00000031,0x00000356, + 0x00000007,0x0004003b,0x0000001c,0x00000361,0x00000007,0x0004003b,0x0000001c,0x00000373, + 0x00000007,0x0004003b,0x0000000d,0x00000385,0x00000007,0x0004003b,0x00000007,0x00000389, + 0x00000007,0x0004003b,0x00000007,0x0000038f,0x00000007,0x0004003b,0x0000000d,0x000003a2, + 0x00000007,0x0004003b,0x0000001c,0x000003a8,0x00000007,0x0004003b,0x00000007,0x000003a9, + 0x00000007,0x0004003b,0x00000007,0x000003ad,0x00000007,0x0004003b,0x00000007,0x000003b1, + 0x00000007,0x0004003b,0x0000001c,0x000003c1,0x00000007,0x0004003b,0x0000001c,0x000003c6, + 0x00000007,0x0004003b,0x0000001c,0x000003ca,0x00000007,0x0004003b,0x00000007,0x000003cc, + 0x00000007,0x0004003b,0x00000007,0x000003cf,0x00000007,0x0004003b,0x0000001c,0x000003d6, + 0x00000007,0x0004003b,0x00000054,0x000003e4,0x00000007,0x0004003b,0x00000007,0x000003fb, + 0x00000007,0x0004003d,0x00000337,0x0000033a,0x00000339,0x0007004f,0x00000334,0x0000033b, + 0x0000033a,0x0000033a,0x00000000,0x00000001,0x0003003e,0x00000336,0x0000033b,0x00050041, + 0x00000031,0x0000033c,0x00000336,0x0000004c,0x0004003d,0x00000030,0x0000033d,0x0000033c, + 0x00050041,0x00000091,0x0000033e,0x0000008f,0x00000090,0x0004003d,0x00000030,0x0000033f, + 0x0000033e,0x000500ae,0x00000012,0x00000340,0x0000033d,0x0000033f,0x000400a8,0x00000012, + 0x00000341,0x00000340,0x000300f7,0x00000343,0x00000000,0x000400fa,0x00000341,0x00000342, + 0x00000343,0x000200f8,0x00000342,0x00050041,0x00000031,0x00000344,0x00000336,0x0000015e, + 0x0004003d,0x00000030,0x00000345,0x00000344,0x00050041,0x00000091,0x00000346,0x0000008f, + 0x00000095,0x0004003d,0x00000030,0x00000347,0x00000346,0x000500ae,0x00000012,0x00000348, + 0x00000345,0x00000347,0x000200f9,0x00000343,0x000200f8,0x00000343,0x000700f5,0x00000012, + 0x00000349,0x00000340,0x00000005,0x00000348,0x00000342,0x000300f7,0x0000034b,0x00000000, + 0x000400fa,0x00000349,0x0000034a,0x0000034b,0x000200f8,0x0000034a,0x000100fd,0x000200f8, + 0x0000034b,0x0004003d,0x0000034e,0x00000351,0x00000350,0x0004003d,0x00000334,0x00000352, + 0x00000336,0x0004007c,0x0000009b,0x00000353,0x00000352,0x00050062,0x000000b4,0x00000354, + 0x00000351,0x00000353,0x0008004f,0x00000017,0x00000355,0x00000354,0x00000354,0x00000000, + 0x00000001,0x00000002,0x0003003e,0x0000034d,0x00000355,0x00050041,0x00000031,0x00000357, + 0x00000336,0x0000015e,0x0004003d,0x00000030,0x00000358,0x00000357,0x00050041,0x00000091, + 0x00000359,0x0000008f,0x00000063,0x0004003d,0x00000030,0x0000035a,0x00000359,0x00050084, + 0x00000030,0x0000035b,0x00000358,0x0000035a,0x00050041,0x00000031,0x0000035c,0x00000336, + 0x0000004c,0x0004003d,0x00000030,0x0000035d,0x0000035c,0x00050080,0x00000030,0x0000035e, + 0x0000035b,0x0000035d,0x00050084,0x00000030,0x00000360,0x0000035e,0x0000035f,0x0003003e, + 0x00000356,0x00000360,0x0004003d,0x00000030,0x00000366,0x00000356,0x00060041,0x00000367, + 0x00000368,0x00000365,0x00000063,0x00000366,0x0004003d,0x00000006,0x00000369,0x00000368, + 0x0004003d,0x00000030,0x0000036a,0x00000356,0x00050080,0x00000030,0x0000036b,0x0000036a, + 0x0000015e,0x00060041,0x00000367,0x0000036c,0x00000365,0x00000063,0x0000036b,0x0004003d, + 0x00000006,0x0000036d,0x0000036c,0x0004003d,0x00000030,0x0000036e,0x00000356,0x00050080, + 0x00000030,0x0000036f,0x0000036e,0x000001cd,0x00060041,0x00000367,0x00000370,0x00000365, + 0x00000063,0x0000036f,0x0004003d,0x00000006,0x00000371,0x00000370,0x00060050,0x00000017, + 0x00000372,0x00000369,0x0000036d,0x00000371,0x0003003e,0x00000361,0x00000372,0x0004003d, + 0x00000017,0x00000374,0x00000361,0x0004003d,0x00000017,0x00000377,0x0000034d,0x0008000c, + 0x00000017,0x0000037c,0x00000001,0x00000032,0x00000377,0x00000379,0x0000037b,0x0008000c, + 0x00000017,0x0000037d,0x00000001,0x00000032,0x00000374,0x00000376,0x0000037c,0x0005008e, + 0x00000017,0x0000037f,0x0000037d,0x0000037e,0x00060050,0x00000017,0x00000380,0x0000008a, + 0x0000008a,0x0000008a,0x00050081,0x00000017,0x00000381,0x0000037f,0x00000380,0x0008000c, + 0x00000017,0x00000382,0x00000001,0x0000002b,0x00000381,0x0000032f,0x00000330,0x0003003e, + 0x00000373,0x00000382,0x0004003d,0x00000334,0x00000383,0x00000336,0x00040070,0x0000000c, + 0x00000384,0x00000383,0x0003003e,0x00000385,0x00000384,0x00050039,0x00000012,0x00000386, + 0x00000015,0x00000385,0x000300f7,0x00000388,0x00000000,0x000400fa,0x00000386,0x00000387, + 0x00000388,0x000200f8,0x00000387,0x00050041,0x0000038b,0x0000038c,0x0000008f,0x0000038a, + 0x0004003d,0x00000006,0x0000038d,0x0000038c,0x0008000c,0x00000006,0x0000038e,0x00000001, + 0x0000002b,0x0000038d,0x000000d4,0x000000dc,0x0003003e,0x00000389,0x0000038e,0x0004003d, + 0x00000030,0x00000390,0x00000356,0x00050080,0x00000030,0x00000392,0x00000390,0x00000391, + 0x00060041,0x00000367,0x00000393,0x00000365,0x00000063,0x00000392,0x0004003d,0x00000006, + 0x00000394,0x00000393,0x0004007c,0x00000006,0x00000396,0x00000395,0x00050085,0x00000006, + 0x00000397,0x00000394,0x00000396,0x0006000c,0x00000006,0x00000398,0x00000001,0x0000001d, + 0x00000397,0x00050081,0x00000006,0x00000399,0x000000dc,0x00000398,0x00050088,0x00000006, + 0x0000039a,0x000000dc,0x00000399,0x0004003d,0x00000006,0x0000039b,0x00000389,0x00050085, + 0x00000006,0x0000039c,0x0000039a,0x0000039b,0x0008000c,0x00000006,0x0000039d,0x00000001, + 0x0000002b,0x0000039c,0x000000d4,0x000000dc,0x0003003e,0x0000038f,0x0000039d,0x0004003d, + 0x00000006,0x0000039e,0x0000038f,0x00060050,0x00000017,0x0000039f,0x0000039e,0x0000039e, + 0x0000039e,0x0004003d,0x00000334,0x000003a0,0x00000336,0x00040070,0x0000000c,0x000003a1, + 0x000003a0,0x0003003e,0x000003a2,0x000003a1,0x00050039,0x00000017,0x000003a3,0x0000001a, + 0x000003a2,0x0004003d,0x00000017,0x000003a4,0x00000373,0x00050083,0x00000017,0x000003a5, + 0x000003a3,0x000003a4,0x0004003d,0x00000017,0x000003a6,0x00000373,0x0008000c,0x00000017, + 0x000003a7,0x00000001,0x00000032,0x0000039f,0x000003a5,0x000003a6,0x0003003e,0x00000373, + 0x000003a7,0x000200f9,0x00000388,0x000200f8,0x00000388,0x00050041,0x00000007,0x000003aa, + 0x00000373,0x0000004c,0x0004003d,0x00000006,0x000003ab,0x000003aa,0x0003003e,0x000003a9, + 0x000003ab,0x00050039,0x00000006,0x000003ac,0x0000000a,0x000003a9,0x00050041,0x00000007, + 0x000003ae,0x00000373,0x0000015e,0x0004003d,0x00000006,0x000003af,0x000003ae,0x0003003e, + 0x000003ad,0x000003af,0x00050039,0x00000006,0x000003b0,0x0000000a,0x000003ad,0x00050041, + 0x00000007,0x000003b2,0x00000373,0x000001cd,0x0004003d,0x00000006,0x000003b3,0x000003b2, + 0x0003003e,0x000003b1,0x000003b3,0x00050039,0x00000006,0x000003b4,0x0000000a,0x000003b1, + 0x00060050,0x00000017,0x000003b5,0x000003ac,0x000003b0,0x000003b4,0x0003003e,0x000003a8, + 0x000003b5,0x0004003d,0x000003b6,0x000003b9,0x000003b8,0x0004003d,0x00000334,0x000003ba, + 0x00000336,0x0004007c,0x0000009b,0x000003bb,0x000003ba,0x0004003d,0x00000017,0x000003bc, + 0x000003a8,0x00050051,0x00000006,0x000003bd,0x000003bc,0x00000000,0x00050051,0x00000006, + 0x000003be,0x000003bc,0x00000001,0x00050051,0x00000006,0x000003bf,0x000003bc,0x00000002, + 0x00070050,0x000000b4,0x000003c0,0x000003bd,0x000003be,0x000003bf,0x000000dc,0x00040063, + 0x000003b9,0x000003bb,0x000003c0,0x00050041,0x0000038b,0x000003c3,0x0000008f,0x000003c2, + 0x0004003d,0x00000006,0x000003c4,0x000003c3,0x000500b7,0x00000012,0x000003c5,0x000003c4, + 0x000000d4,0x000300f7,0x000003c8,0x00000000,0x000400fa,0x000003c5,0x000003c7,0x000003d3, + 0x000200f8,0x000003c7,0x0004003d,0x00000017,0x000003cb,0x000003a8,0x0003003e,0x000003ca, + 0x000003cb,0x00050041,0x0000038b,0x000003cd,0x0000008f,0x000003c2,0x0004003d,0x00000006, + 0x000003ce,0x000003cd,0x0003003e,0x000003cc,0x000003ce,0x00050041,0x0000038b,0x000003d0, + 0x0000008f,0x000003c9,0x0004003d,0x00000006,0x000003d1,0x000003d0,0x0003003e,0x000003cf, + 0x000003d1,0x00070039,0x00000017,0x000003d2,0x0000002e,0x000003ca,0x000003cc,0x000003cf, + 0x0003003e,0x000003c6,0x000003d2,0x000200f9,0x000003c8,0x000200f8,0x000003d3,0x0004003d, + 0x00000017,0x000003d4,0x000003a8,0x0003003e,0x000003c6,0x000003d4,0x000200f9,0x000003c8, + 0x000200f8,0x000003c8,0x0004003d,0x00000017,0x000003d5,0x000003c6,0x0003003e,0x000003c1, + 0x000003d5,0x0004003d,0x00000017,0x000003d7,0x000003a8,0x0003003e,0x000003d6,0x000003d7, + 0x00050041,0x0000038b,0x000003d8,0x0000008f,0x000003c2,0x0004003d,0x00000006,0x000003d9, + 0x000003d8,0x000500b7,0x00000012,0x000003da,0x000003d9,0x000000d4,0x000400a8,0x00000012, + 0x000003db,0x000003da,0x000300f7,0x000003dd,0x00000000,0x000400fa,0x000003db,0x000003dc, + 0x000003dd,0x000200f8,0x000003dc,0x00050041,0x0000038b,0x000003de,0x0000008f,0x00000072, + 0x0004003d,0x00000006,0x000003df,0x000003de,0x000500b7,0x00000012,0x000003e0,0x000003df, + 0x000000dc,0x000200f9,0x000003dd,0x000200f8,0x000003dd,0x000700f5,0x00000012,0x000003e1, + 0x000003da,0x000003c8,0x000003e0,0x000003dc,0x000300f7,0x000003e3,0x00000000,0x000400fa, + 0x000003e1,0x000003e2,0x000003e3,0x000200f8,0x000003e2,0x0003003e,0x000003e4,0x00000063, + 0x000200f9,0x000003e5,0x000200f8,0x000003e5,0x000400f6,0x000003e7,0x000003e8,0x00000000, + 0x000200f9,0x000003e9,0x000200f8,0x000003e9,0x0004003d,0x00000053,0x000003ea,0x000003e4, + 0x000500b1,0x00000012,0x000003eb,0x000003ea,0x00000095,0x000400fa,0x000003eb,0x000003e6, + 0x000003e7,0x000200f8,0x000003e6,0x0004003d,0x00000053,0x000003ec,0x000003e4,0x00050041, + 0x0000038b,0x000003ed,0x0000008f,0x00000072,0x0004003d,0x00000006,0x000003ee,0x000003ed, + 0x0004003d,0x00000053,0x000003ef,0x000003e4,0x00050041,0x00000007,0x000003f0,0x000003c1, + 0x000003ef,0x0004003d,0x00000006,0x000003f1,0x000003f0,0x0004003d,0x00000053,0x000003f2, + 0x000003e4,0x00050041,0x00000007,0x000003f3,0x0000034d,0x000003f2,0x0004003d,0x00000006, + 0x000003f4,0x000003f3,0x00050083,0x00000006,0x000003f5,0x000003f1,0x000003f4,0x0004003d, + 0x00000053,0x000003f6,0x000003e4,0x00050041,0x00000007,0x000003f7,0x0000034d,0x000003f6, + 0x0004003d,0x00000006,0x000003f8,0x000003f7,0x0008000c,0x00000006,0x000003f9,0x00000001, + 0x00000032,0x000003ee,0x000003f5,0x000003f8,0x0008000c,0x00000006,0x000003fa,0x00000001, + 0x0000002b,0x000003f9,0x000000d4,0x000000dc,0x0003003e,0x000003fb,0x000003fa,0x00050039, + 0x00000006,0x000003fc,0x0000000a,0x000003fb,0x00050041,0x00000007,0x000003fd,0x000003d6, + 0x000003ec,0x0003003e,0x000003fd,0x000003fc,0x000200f9,0x000003e8,0x000200f8,0x000003e8, + 0x0004003d,0x00000053,0x000003fe,0x000003e4,0x00050080,0x00000053,0x000003ff,0x000003fe, + 0x000000ac,0x0003003e,0x000003e4,0x000003ff,0x000200f9,0x000003e5,0x000200f8,0x000003e7, + 0x000200f9,0x000003e3,0x000200f8,0x000003e3,0x0004003d,0x0000034e,0x00000401,0x00000400, + 0x0004003d,0x00000334,0x00000402,0x00000336,0x0004007c,0x0000009b,0x00000403,0x00000402, + 0x0004003d,0x00000017,0x00000404,0x000003d6,0x00050051,0x00000006,0x00000405,0x00000404, + 0x00000000,0x00050051,0x00000006,0x00000406,0x00000404,0x00000001,0x00050051,0x00000006, + 0x00000407,0x00000404,0x00000002,0x00070050,0x000000b4,0x00000408,0x00000405,0x00000406, + 0x00000407,0x000000dc,0x00040063,0x00000401,0x00000403,0x00000408,0x000100fd,0x00010038, + 0x00050036,0x00000006,0x0000000a,0x00000000,0x00000008,0x00030037,0x00000007,0x00000009, + 0x000200f8,0x0000000b,0x0004003b,0x00000031,0x00000032,0x00000007,0x0004003b,0x00000031, + 0x00000035,0x00000007,0x0004003b,0x00000031,0x0000003b,0x00000007,0x0004003b,0x00000031, + 0x00000041,0x00000007,0x0004003b,0x00000031,0x00000049,0x00000007,0x0004003b,0x00000054, + 0x00000055,0x00000007,0x0004003d,0x00000006,0x00000033,0x00000009,0x0004007c,0x00000030, + 0x00000034,0x00000033,0x0003003e,0x00000032,0x00000034,0x0004003d,0x00000030,0x00000036, + 0x00000032,0x000500c2,0x00000030,0x00000038,0x00000036,0x00000037,0x000500c7,0x00000030, + 0x0000003a,0x00000038,0x00000039,0x0003003e,0x00000035,0x0000003a,0x0004003d,0x00000030, + 0x0000003c,0x00000032,0x000500c2,0x00000030,0x0000003e,0x0000003c,0x0000003d,0x000500c7, + 0x00000030,0x00000040,0x0000003e,0x0000003f,0x0003003e,0x0000003b,0x00000040,0x0004003d, + 0x00000030,0x00000042,0x00000032,0x000500c7,0x00000030,0x00000044,0x00000042,0x00000043, + 0x0003003e,0x00000041,0x00000044,0x0004003d,0x00000030,0x00000045,0x0000003b,0x000500aa, + 0x00000012,0x00000046,0x00000045,0x0000003f,0x000300f7,0x00000048,0x00000000,0x000400fa, + 0x00000046,0x00000047,0x00000052,0x000200f8,0x00000047,0x0004003d,0x00000030,0x0000004a, + 0x00000035,0x0004003d,0x00000030,0x0000004b,0x00000041,0x000500ab,0x00000012,0x0000004d, + 0x0000004b,0x0000004c,0x000600a9,0x00000030,0x00000050,0x0000004d,0x0000004e,0x0000004f, + 0x000500c5,0x00000030,0x00000051,0x0000004a,0x00000050,0x0003003e,0x00000049,0x00000051, + 0x000200f9,0x00000048,0x000200f8,0x00000052,0x0004003d,0x00000030,0x00000056,0x0000003b, + 0x0004007c,0x00000053,0x00000057,0x00000056,0x00050082,0x00000053,0x00000059,0x00000057, + 0x00000058,0x0003003e,0x00000055,0x00000059,0x0004003d,0x00000053,0x0000005a,0x00000055, + 0x000500af,0x00000012,0x0000005c,0x0000005a,0x0000005b,0x000300f7,0x0000005e,0x00000000, + 0x000400fa,0x0000005c,0x0000005d,0x00000061,0x000200f8,0x0000005d,0x0004003d,0x00000030, + 0x0000005f,0x00000035,0x000500c5,0x00000030,0x00000060,0x0000005f,0x0000004f,0x0003003e, + 0x00000049,0x00000060,0x000200f9,0x0000005e,0x000200f8,0x00000061,0x0004003d,0x00000053, + 0x00000062,0x00000055,0x000500b3,0x00000012,0x00000064,0x00000062,0x00000063,0x000300f7, + 0x00000066,0x00000000,0x000400fa,0x00000064,0x00000065,0x00000078,0x000200f8,0x00000065, + 0x0004003d,0x00000053,0x00000067,0x00000055,0x000500b1,0x00000012,0x00000069,0x00000067, + 0x00000068,0x000300f7,0x0000006b,0x00000000,0x000400fa,0x00000069,0x0000006a,0x0000006d, + 0x000200f8,0x0000006a,0x0004003d,0x00000030,0x0000006c,0x00000035,0x0003003e,0x00000049, + 0x0000006c,0x000200f9,0x0000006b,0x000200f8,0x0000006d,0x0004003d,0x00000030,0x0000006e, + 0x00000035,0x0004003d,0x00000030,0x0000006f,0x00000041,0x000500c5,0x00000030,0x00000071, + 0x0000006f,0x00000070,0x0004003d,0x00000053,0x00000073,0x00000055,0x00050082,0x00000053, + 0x00000074,0x00000072,0x00000073,0x0004007c,0x00000030,0x00000075,0x00000074,0x000500c2, + 0x00000030,0x00000076,0x00000071,0x00000075,0x000500c5,0x00000030,0x00000077,0x0000006e, + 0x00000076,0x0003003e,0x00000049,0x00000077,0x000200f9,0x0000006b,0x000200f8,0x0000006b, + 0x000200f9,0x00000066,0x000200f8,0x00000078,0x0004003d,0x00000030,0x00000079,0x00000035, + 0x0004003d,0x00000053,0x0000007a,0x00000055,0x0004007c,0x00000030,0x0000007b,0x0000007a, + 0x000500c4,0x00000030,0x0000007d,0x0000007b,0x0000007c,0x000500c5,0x00000030,0x0000007e, + 0x00000079,0x0000007d,0x0004003d,0x00000030,0x0000007f,0x00000041,0x000500c2,0x00000030, + 0x00000081,0x0000007f,0x00000080,0x000500c5,0x00000030,0x00000082,0x0000007e,0x00000081, + 0x0003003e,0x00000049,0x00000082,0x000200f9,0x00000066,0x000200f8,0x00000066,0x000200f9, + 0x0000005e,0x000200f8,0x0000005e,0x000200f9,0x00000048,0x000200f8,0x00000048,0x0004003d, + 0x00000030,0x00000083,0x00000049,0x0006000c,0x0000000c,0x00000084,0x00000001,0x0000003e, + 0x00000083,0x00050051,0x00000006,0x00000085,0x00000084,0x00000000,0x000200fe,0x00000085, + 0x00010038,0x00050036,0x0000000c,0x00000010,0x00000000,0x0000000e,0x00030037,0x0000000d, + 0x0000000f,0x000200f8,0x00000011,0x0004003b,0x0000000d,0x00000088,0x00000007,0x0004003b, + 0x0000009c,0x0000009d,0x00000007,0x0004003b,0x0000009c,0x000000a5,0x00000007,0x0004003d, + 0x0000000c,0x00000089,0x0000000f,0x00050050,0x0000000c,0x0000008b,0x0000008a,0x0000008a, + 0x00050081,0x0000000c,0x0000008c,0x00000089,0x0000008b,0x00050041,0x00000091,0x00000092, + 0x0000008f,0x00000090,0x0004003d,0x00000030,0x00000093,0x00000092,0x00040070,0x00000006, + 0x00000094,0x00000093,0x00050041,0x00000091,0x00000096,0x0000008f,0x00000095,0x0004003d, + 0x00000030,0x00000097,0x00000096,0x00040070,0x00000006,0x00000098,0x00000097,0x00050050, + 0x0000000c,0x00000099,0x00000094,0x00000098,0x00050088,0x0000000c,0x0000009a,0x0000008c, + 0x00000099,0x0003003e,0x00000088,0x0000009a,0x0004003d,0x0000009f,0x000000a2,0x000000a1, + 0x00040064,0x0000009e,0x000000a3,0x000000a2,0x00050067,0x0000009b,0x000000a4,0x000000a3, + 0x00000063,0x0003003e,0x0000009d,0x000000a4,0x0004003d,0x0000000c,0x000000a6,0x00000088, + 0x0004003d,0x0000009b,0x000000a7,0x0000009d,0x0004006f,0x0000000c,0x000000a8,0x000000a7, + 0x00050085,0x0000000c,0x000000a9,0x000000a6,0x000000a8,0x0004006e,0x0000009b,0x000000aa, + 0x000000a9,0x0004003d,0x0000009b,0x000000ab,0x0000009d,0x00050050,0x0000009b,0x000000ad, + 0x000000ac,0x000000ac,0x00050082,0x0000009b,0x000000ae,0x000000ab,0x000000ad,0x0007000c, + 0x0000009b,0x000000af,0x00000001,0x00000027,0x000000aa,0x000000ae,0x0003003e,0x000000a5, + 0x000000af,0x0004003d,0x0000000c,0x000000b0,0x00000088,0x0004003d,0x0000009f,0x000000b1, + 0x000000a1,0x0004003d,0x0000009b,0x000000b2,0x000000a5,0x00040064,0x0000009e,0x000000b3, + 0x000000b1,0x0007005f,0x000000b4,0x000000b5,0x000000b3,0x000000b2,0x00000002,0x00000063, + 0x0007004f,0x0000000c,0x000000b6,0x000000b5,0x000000b5,0x00000000,0x00000001,0x00050041, + 0x000000b8,0x000000b9,0x0000008f,0x000000b7,0x0004003d,0x0000000c,0x000000ba,0x000000b9, + 0x00050088,0x0000000c,0x000000bb,0x000000b6,0x000000ba,0x00050081,0x0000000c,0x000000bc, + 0x000000b0,0x000000bb,0x000200fe,0x000000bc,0x00010038,0x00050036,0x00000012,0x00000015, + 0x00000000,0x00000013,0x00030037,0x0000000d,0x00000014,0x000200f8,0x00000016,0x0004003b, + 0x0000000d,0x000000cf,0x00000007,0x0004003b,0x0000000d,0x000000d0,0x00000007,0x00050041, + 0x00000091,0x000000c0,0x0000008f,0x000000bf,0x0004003d,0x00000030,0x000000c1,0x000000c0, + 0x000500aa,0x00000012,0x000000c2,0x000000c1,0x0000004c,0x000300f7,0x000000c4,0x00000000, + 0x000400fa,0x000000c2,0x000000c3,0x000000c4,0x000200f8,0x000000c3,0x000200fe,0x000000c5, + 0x000200f8,0x000000c4,0x00050041,0x00000091,0x000000c8,0x0000008f,0x000000c7,0x0004003d, + 0x00000030,0x000000c9,0x000000c8,0x000500aa,0x00000012,0x000000ca,0x000000c9,0x0000004c, + 0x000300f7,0x000000cc,0x00000000,0x000400fa,0x000000ca,0x000000cb,0x000000cc,0x000200f8, + 0x000000cb,0x000200fe,0x000000cd,0x000200f8,0x000000cc,0x0004003d,0x0000000c,0x000000d1, + 0x00000014,0x0003003e,0x000000d0,0x000000d1,0x00050039,0x0000000c,0x000000d2,0x00000010, + 0x000000d0,0x0003003e,0x000000cf,0x000000d2,0x0004003d,0x0000000c,0x000000d3,0x000000cf, + 0x000500be,0x000000d6,0x000000d7,0x000000d3,0x000000d5,0x0004009b,0x00000012,0x000000d8, + 0x000000d7,0x000300f7,0x000000da,0x00000000,0x000400fa,0x000000d8,0x000000d9,0x000000da, + 0x000200f8,0x000000d9,0x0004003d,0x0000000c,0x000000db,0x000000cf,0x000500bc,0x000000d6, + 0x000000de,0x000000db,0x000000dd,0x0004009b,0x00000012,0x000000df,0x000000de,0x000200f9, + 0x000000da,0x000200f8,0x000000da,0x000700f5,0x00000012,0x000000e0,0x000000d8,0x000000cc, + 0x000000df,0x000000d9,0x000200fe,0x000000e0,0x00010038,0x00050036,0x00000017,0x0000001a, + 0x00000000,0x00000018,0x00030037,0x0000000d,0x00000019,0x000200f8,0x0000001b,0x0004003b, + 0x0000000d,0x000000e3,0x00000007,0x0004003b,0x0000000d,0x000000eb,0x00000007,0x0004003b, + 0x0000000d,0x000000ef,0x00000007,0x0004003b,0x0000000d,0x000000f2,0x00000007,0x0004003b, + 0x0000000d,0x000000fc,0x00000007,0x0004003b,0x0000000d,0x00000100,0x00000007,0x0004003b, + 0x0000000d,0x00000107,0x00000007,0x0004003b,0x0000000d,0x0000010c,0x00000007,0x0004003b, + 0x0000000d,0x00000110,0x00000007,0x0004003b,0x0000000d,0x00000114,0x00000007,0x0004003b, + 0x0000000d,0x0000011c,0x00000007,0x0004003b,0x0000000d,0x00000126,0x00000007,0x0004003b, + 0x0000000d,0x0000012b,0x00000007,0x0004003b,0x0000000d,0x00000133,0x00000007,0x0004003b, + 0x0000000d,0x00000137,0x00000007,0x0004003b,0x0000000d,0x00000142,0x00000007,0x0004003b, + 0x0000000d,0x0000014e,0x00000007,0x0004003b,0x0000001c,0x00000159,0x00000007,0x0004003b, + 0x0000001c,0x00000164,0x00000007,0x0004003b,0x0000001c,0x0000016d,0x00000007,0x0004003b, + 0x0000001c,0x00000172,0x00000007,0x0004003b,0x0000001c,0x0000017b,0x00000007,0x0004003b, + 0x00000007,0x00000184,0x00000007,0x0004003b,0x00000007,0x0000018a,0x00000007,0x0004003b, + 0x00000007,0x00000190,0x00000007,0x0004003b,0x00000007,0x00000196,0x00000007,0x0004003b, + 0x00000007,0x0000019c,0x00000007,0x0004003b,0x0000001c,0x000001a2,0x00000007,0x00050041, + 0x00000091,0x000000e4,0x0000008f,0x00000090,0x0004003d,0x00000030,0x000000e5,0x000000e4, + 0x00040070,0x00000006,0x000000e6,0x000000e5,0x00050041,0x00000091,0x000000e7,0x0000008f, + 0x00000095,0x0004003d,0x00000030,0x000000e8,0x000000e7,0x00040070,0x00000006,0x000000e9, + 0x000000e8,0x00050050,0x0000000c,0x000000ea,0x000000e6,0x000000e9,0x0003003e,0x000000e3, + 0x000000ea,0x00050041,0x00000091,0x000000ec,0x0000008f,0x000000c7,0x0004003d,0x00000030, + 0x000000ed,0x000000ec,0x000500ab,0x00000012,0x000000ee,0x000000ed,0x0000004c,0x000300f7, + 0x000000f1,0x00000000,0x000400fa,0x000000ee,0x000000f0,0x000000f5,0x000200f8,0x000000f0, + 0x0004003d,0x0000000c,0x000000f3,0x00000019,0x0003003e,0x000000f2,0x000000f3,0x00050039, + 0x0000000c,0x000000f4,0x00000010,0x000000f2,0x0003003e,0x000000ef,0x000000f4,0x000200f9, + 0x000000f1,0x000200f8,0x000000f5,0x0004003d,0x0000000c,0x000000f6,0x00000019,0x00050050, + 0x0000000c,0x000000f7,0x0000008a,0x0000008a,0x00050081,0x0000000c,0x000000f8,0x000000f6, + 0x000000f7,0x0004003d,0x0000000c,0x000000f9,0x000000e3,0x00050088,0x0000000c,0x000000fa, + 0x000000f8,0x000000f9,0x0003003e,0x000000ef,0x000000fa,0x000200f9,0x000000f1,0x000200f8, + 0x000000f1,0x0004003d,0x0000000c,0x000000fb,0x000000ef,0x0003003e,0x000000eb,0x000000fb, + 0x0004003d,0x0000000c,0x000000fd,0x000000eb,0x0004003d,0x0000000c,0x000000fe,0x000000e3, + 0x00050085,0x0000000c,0x000000ff,0x000000fd,0x000000fe,0x0003003e,0x000000fc,0x000000ff, + 0x0004003d,0x0000000c,0x00000101,0x000000fc,0x00050050,0x0000000c,0x00000102,0x0000008a, + 0x0000008a,0x00050083,0x0000000c,0x00000103,0x00000101,0x00000102,0x0006000c,0x0000000c, + 0x00000104,0x00000001,0x00000008,0x00000103,0x00050050,0x0000000c,0x00000105,0x0000008a, + 0x0000008a,0x00050081,0x0000000c,0x00000106,0x00000104,0x00000105,0x0003003e,0x00000100, + 0x00000106,0x0004003d,0x0000000c,0x00000108,0x000000fc,0x0004003d,0x0000000c,0x00000109, + 0x00000100,0x00050083,0x0000000c,0x0000010a,0x00000108,0x00000109,0x0008000c,0x0000000c, + 0x0000010b,0x00000001,0x0000002b,0x0000010a,0x000000d5,0x000000dd,0x0003003e,0x00000107, + 0x0000010b,0x0004003d,0x0000000c,0x0000010d,0x00000107,0x0004003d,0x0000000c,0x0000010e, + 0x00000107,0x00050085,0x0000000c,0x0000010f,0x0000010d,0x0000010e,0x0003003e,0x0000010c, + 0x0000010f,0x0004003d,0x0000000c,0x00000111,0x00000107,0x0004003d,0x0000000c,0x00000112, + 0x0000010c,0x00050085,0x0000000c,0x00000113,0x00000111,0x00000112,0x0003003e,0x00000110, + 0x00000113,0x0004003d,0x0000000c,0x00000115,0x00000107,0x0004003d,0x0000000c,0x00000116, + 0x00000110,0x00050081,0x0000000c,0x00000117,0x00000115,0x00000116,0x0004003d,0x0000000c, + 0x0000011a,0x0000010c,0x0008000c,0x0000000c,0x0000011b,0x00000001,0x00000032,0x00000117, + 0x00000119,0x0000011a,0x0003003e,0x00000114,0x0000011b,0x0004003d,0x0000000c,0x0000011d, + 0x00000110,0x0005008e,0x0000000c,0x0000011f,0x0000011d,0x0000011e,0x0004003d,0x0000000c, + 0x00000120,0x0000010c,0x0005008e,0x0000000c,0x00000122,0x00000120,0x00000121,0x00050083, + 0x0000000c,0x00000123,0x0000011f,0x00000122,0x00050050,0x0000000c,0x00000124,0x000000dc, + 0x000000dc,0x00050081,0x0000000c,0x00000125,0x00000123,0x00000124,0x0003003e,0x0000011c, + 0x00000125,0x0004003d,0x0000000c,0x00000127,0x00000110,0x0004003d,0x0000000c,0x00000128, + 0x0000010c,0x00050083,0x0000000c,0x00000129,0x00000127,0x00000128,0x0005008e,0x0000000c, + 0x0000012a,0x00000129,0x0000008a,0x0003003e,0x00000126,0x0000012a,0x0004003d,0x0000000c, + 0x0000012c,0x00000114,0x00050050,0x0000000c,0x0000012d,0x000000dc,0x000000dc,0x00050083, + 0x0000000c,0x0000012e,0x0000012d,0x0000012c,0x0004003d,0x0000000c,0x0000012f,0x0000011c, + 0x00050083,0x0000000c,0x00000130,0x0000012e,0x0000012f,0x0004003d,0x0000000c,0x00000131, + 0x00000126,0x00050083,0x0000000c,0x00000132,0x00000130,0x00000131,0x0003003e,0x0000012b, + 0x00000132,0x0004003d,0x0000000c,0x00000134,0x0000011c,0x0004003d,0x0000000c,0x00000135, + 0x0000012b,0x00050081,0x0000000c,0x00000136,0x00000134,0x00000135,0x0003003e,0x00000133, + 0x00000136,0x0004003d,0x0000000c,0x00000138,0x00000100,0x00050050,0x0000000c,0x00000139, + 0x000000dc,0x000000dc,0x00050083,0x0000000c,0x0000013a,0x00000138,0x00000139,0x0004003d, + 0x0000000c,0x0000013c,0x000000e3,0x00050050,0x0000000c,0x0000013d,0x0000008a,0x0000008a, + 0x00050083,0x0000000c,0x0000013e,0x0000013c,0x0000013d,0x0008000c,0x0000000c,0x0000013f, + 0x00000001,0x0000002b,0x0000013a,0x0000013b,0x0000013e,0x0004003d,0x0000000c,0x00000140, + 0x000000e3,0x00050088,0x0000000c,0x00000141,0x0000013f,0x00000140,0x0003003e,0x00000137, + 0x00000141,0x0004003d,0x0000000c,0x00000143,0x00000100,0x0004003d,0x0000000c,0x00000144, + 0x0000012b,0x0004003d,0x0000000c,0x00000145,0x00000133,0x00050088,0x0000000c,0x00000146, + 0x00000144,0x00000145,0x00050081,0x0000000c,0x00000147,0x00000143,0x00000146,0x0004003d, + 0x0000000c,0x00000148,0x000000e3,0x00050050,0x0000000c,0x00000149,0x0000008a,0x0000008a, + 0x00050083,0x0000000c,0x0000014a,0x00000148,0x00000149,0x0008000c,0x0000000c,0x0000014b, + 0x00000001,0x0000002b,0x00000147,0x0000013b,0x0000014a,0x0004003d,0x0000000c,0x0000014c, + 0x000000e3,0x00050088,0x0000000c,0x0000014d,0x0000014b,0x0000014c,0x0003003e,0x00000142, + 0x0000014d,0x0004003d,0x0000000c,0x0000014f,0x00000100,0x00050050,0x0000000c,0x00000151, + 0x00000150,0x00000150,0x00050081,0x0000000c,0x00000152,0x0000014f,0x00000151,0x0004003d, + 0x0000000c,0x00000153,0x000000e3,0x00050050,0x0000000c,0x00000154,0x0000008a,0x0000008a, + 0x00050083,0x0000000c,0x00000155,0x00000153,0x00000154,0x0008000c,0x0000000c,0x00000156, + 0x00000001,0x0000002b,0x00000152,0x0000013b,0x00000155,0x0004003d,0x0000000c,0x00000157, + 0x000000e3,0x00050088,0x0000000c,0x00000158,0x00000156,0x00000157,0x0003003e,0x0000014e, + 0x00000158,0x0004003d,0x0000009f,0x0000015b,0x0000015a,0x00050041,0x00000007,0x0000015c, + 0x00000137,0x0000004c,0x0004003d,0x00000006,0x0000015d,0x0000015c,0x00050041,0x00000007, + 0x0000015f,0x00000142,0x0000015e,0x0004003d,0x00000006,0x00000160,0x0000015f,0x00050050, + 0x0000000c,0x00000161,0x0000015d,0x00000160,0x00070058,0x000000b4,0x00000162,0x0000015b, + 0x00000161,0x00000002,0x000000d4,0x0008004f,0x00000017,0x00000163,0x00000162,0x00000162, + 0x00000000,0x00000001,0x00000002,0x0003003e,0x00000159,0x00000163,0x0004003d,0x0000009f, + 0x00000165,0x0000015a,0x00050041,0x00000007,0x00000166,0x00000142,0x0000004c,0x0004003d, + 0x00000006,0x00000167,0x00000166,0x00050041,0x00000007,0x00000168,0x00000137,0x0000015e, + 0x0004003d,0x00000006,0x00000169,0x00000168,0x00050050,0x0000000c,0x0000016a,0x00000167, + 0x00000169,0x00070058,0x000000b4,0x0000016b,0x00000165,0x0000016a,0x00000002,0x000000d4, + 0x0008004f,0x00000017,0x0000016c,0x0000016b,0x0000016b,0x00000000,0x00000001,0x00000002, + 0x0003003e,0x00000164,0x0000016c,0x0004003d,0x0000009f,0x0000016e,0x0000015a,0x0004003d, + 0x0000000c,0x0000016f,0x00000142,0x00070058,0x000000b4,0x00000170,0x0000016e,0x0000016f, + 0x00000002,0x000000d4,0x0008004f,0x00000017,0x00000171,0x00000170,0x00000170,0x00000000, + 0x00000001,0x00000002,0x0003003e,0x0000016d,0x00000171,0x0004003d,0x0000009f,0x00000173, + 0x0000015a,0x00050041,0x00000007,0x00000174,0x00000142,0x0000004c,0x0004003d,0x00000006, + 0x00000175,0x00000174,0x00050041,0x00000007,0x00000176,0x0000014e,0x0000015e,0x0004003d, + 0x00000006,0x00000177,0x00000176,0x00050050,0x0000000c,0x00000178,0x00000175,0x00000177, + 0x00070058,0x000000b4,0x00000179,0x00000173,0x00000178,0x00000002,0x000000d4,0x0008004f, + 0x00000017,0x0000017a,0x00000179,0x00000179,0x00000000,0x00000001,0x00000002,0x0003003e, + 0x00000172,0x0000017a,0x0004003d,0x0000009f,0x0000017c,0x0000015a,0x00050041,0x00000007, + 0x0000017d,0x0000014e,0x0000004c,0x0004003d,0x00000006,0x0000017e,0x0000017d,0x00050041, + 0x00000007,0x0000017f,0x00000142,0x0000015e,0x0004003d,0x00000006,0x00000180,0x0000017f, + 0x00050050,0x0000000c,0x00000181,0x0000017e,0x00000180,0x00070058,0x000000b4,0x00000182, + 0x0000017c,0x00000181,0x00000002,0x000000d4,0x0008004f,0x00000017,0x00000183,0x00000182, + 0x00000182,0x00000000,0x00000001,0x00000002,0x0003003e,0x0000017b,0x00000183,0x00050041, + 0x00000007,0x00000185,0x00000114,0x0000004c,0x0004003d,0x00000006,0x00000186,0x00000185, + 0x00050041,0x00000007,0x00000187,0x00000133,0x0000015e,0x0004003d,0x00000006,0x00000188, + 0x00000187,0x00050085,0x00000006,0x00000189,0x00000186,0x00000188,0x0003003e,0x00000184, + 0x00000189,0x00050041,0x00000007,0x0000018b,0x00000114,0x0000015e,0x0004003d,0x00000006, + 0x0000018c,0x0000018b,0x00050041,0x00000007,0x0000018d,0x00000133,0x0000004c,0x0004003d, + 0x00000006,0x0000018e,0x0000018d,0x00050085,0x00000006,0x0000018f,0x0000018c,0x0000018e, + 0x0003003e,0x0000018a,0x0000018f,0x00050041,0x00000007,0x00000191,0x00000133,0x0000004c, + 0x0004003d,0x00000006,0x00000192,0x00000191,0x00050041,0x00000007,0x00000193,0x00000133, + 0x0000015e,0x0004003d,0x00000006,0x00000194,0x00000193,0x00050085,0x00000006,0x00000195, + 0x00000192,0x00000194,0x0003003e,0x00000190,0x00000195,0x00050041,0x00000007,0x00000197, + 0x00000126,0x0000015e,0x0004003d,0x00000006,0x00000198,0x00000197,0x00050041,0x00000007, + 0x00000199,0x00000133,0x0000004c,0x0004003d,0x00000006,0x0000019a,0x00000199,0x00050085, + 0x00000006,0x0000019b,0x00000198,0x0000019a,0x0003003e,0x00000196,0x0000019b,0x00050041, + 0x00000007,0x0000019d,0x00000126,0x0000004c,0x0004003d,0x00000006,0x0000019e,0x0000019d, + 0x00050041,0x00000007,0x0000019f,0x00000133,0x0000015e,0x0004003d,0x00000006,0x000001a0, + 0x0000019f,0x00050085,0x00000006,0x000001a1,0x0000019e,0x000001a0,0x0003003e,0x0000019c, + 0x000001a1,0x0004003d,0x00000017,0x000001a3,0x00000159,0x0004003d,0x00000006,0x000001a4, + 0x00000184,0x00060050,0x00000017,0x000001a5,0x000001a4,0x000001a4,0x000001a4,0x0004003d, + 0x00000017,0x000001a6,0x00000164,0x0004003d,0x00000006,0x000001a7,0x0000018a,0x0005008e, + 0x00000017,0x000001a8,0x000001a6,0x000001a7,0x0008000c,0x00000017,0x000001a9,0x00000001, + 0x00000032,0x000001a3,0x000001a5,0x000001a8,0x0003003e,0x000001a2,0x000001a9,0x0004003d, + 0x00000017,0x000001aa,0x0000016d,0x0004003d,0x00000006,0x000001ab,0x00000190,0x00060050, + 0x00000017,0x000001ac,0x000001ab,0x000001ab,0x000001ab,0x0004003d,0x00000017,0x000001ad, + 0x000001a2,0x0008000c,0x00000017,0x000001ae,0x00000001,0x00000032,0x000001aa,0x000001ac, + 0x000001ad,0x0003003e,0x000001a2,0x000001ae,0x0004003d,0x00000017,0x000001af,0x00000172, + 0x0004003d,0x00000006,0x000001b0,0x00000196,0x00060050,0x00000017,0x000001b1,0x000001b0, + 0x000001b0,0x000001b0,0x0004003d,0x00000017,0x000001b2,0x000001a2,0x0008000c,0x00000017, + 0x000001b3,0x00000001,0x00000032,0x000001af,0x000001b1,0x000001b2,0x0003003e,0x000001a2, + 0x000001b3,0x0004003d,0x00000017,0x000001b4,0x0000017b,0x0004003d,0x00000006,0x000001b5, + 0x0000019c,0x00060050,0x00000017,0x000001b6,0x000001b5,0x000001b5,0x000001b5,0x0004003d, + 0x00000017,0x000001b7,0x000001a2,0x0008000c,0x00000017,0x000001b8,0x00000001,0x00000032, + 0x000001b4,0x000001b6,0x000001b7,0x0003003e,0x000001a2,0x000001b8,0x0004003d,0x00000017, + 0x000001b9,0x000001a2,0x0004003d,0x00000006,0x000001ba,0x0000019c,0x0004003d,0x00000006, + 0x000001bb,0x00000196,0x0004003d,0x00000006,0x000001bc,0x00000190,0x0004003d,0x00000006, + 0x000001bd,0x00000184,0x0004003d,0x00000006,0x000001be,0x0000018a,0x00050081,0x00000006, + 0x000001bf,0x000001bd,0x000001be,0x00050081,0x00000006,0x000001c0,0x000001bc,0x000001bf, + 0x00050081,0x00000006,0x000001c1,0x000001bb,0x000001c0,0x00050081,0x00000006,0x000001c2, + 0x000001ba,0x000001c1,0x00050088,0x00000006,0x000001c3,0x000000dc,0x000001c2,0x0005008e, + 0x00000017,0x000001c4,0x000001b9,0x000001c3,0x000200fe,0x000001c4,0x00010038,0x00050036, + 0x00000017,0x0000001f,0x00000000,0x0000001d,0x00030037,0x0000001c,0x0000001e,0x000200f8, + 0x00000020,0x0004003b,0x00000007,0x000001c7,0x00000007,0x0004003b,0x00000007,0x000001d1, + 0x00000007,0x0004003b,0x00000007,0x000001da,0x00000007,0x0004003b,0x00000007,0x000001de, + 0x00000007,0x0004003b,0x00000007,0x000001e1,0x00000007,0x0004003b,0x00000007,0x000001e2, + 0x00000007,0x0004003b,0x00000007,0x000001e8,0x00000007,0x0004003b,0x00000007,0x000001ee, + 0x00000007,0x00050041,0x00000007,0x000001c8,0x0000001e,0x0000004c,0x0004003d,0x00000006, + 0x000001c9,0x000001c8,0x00050041,0x00000007,0x000001ca,0x0000001e,0x0000015e,0x0004003d, + 0x00000006,0x000001cb,0x000001ca,0x0007000c,0x00000006,0x000001cc,0x00000001,0x00000028, + 0x000001c9,0x000001cb,0x00050041,0x00000007,0x000001ce,0x0000001e,0x000001cd,0x0004003d, + 0x00000006,0x000001cf,0x000001ce,0x0007000c,0x00000006,0x000001d0,0x00000001,0x00000028, + 0x000001cc,0x000001cf,0x0003003e,0x000001c7,0x000001d0,0x00050041,0x00000007,0x000001d2, + 0x0000001e,0x0000004c,0x0004003d,0x00000006,0x000001d3,0x000001d2,0x00050041,0x00000007, + 0x000001d4,0x0000001e,0x0000015e,0x0004003d,0x00000006,0x000001d5,0x000001d4,0x0007000c, + 0x00000006,0x000001d6,0x00000001,0x00000025,0x000001d3,0x000001d5,0x00050041,0x00000007, + 0x000001d7,0x0000001e,0x000001cd,0x0004003d,0x00000006,0x000001d8,0x000001d7,0x0007000c, + 0x00000006,0x000001d9,0x00000001,0x00000025,0x000001d6,0x000001d8,0x0003003e,0x000001d1, + 0x000001d9,0x0004003d,0x00000006,0x000001db,0x000001c7,0x0004003d,0x00000006,0x000001dc, + 0x000001d1,0x00050081,0x00000006,0x000001dd,0x000001db,0x000001dc,0x0003003e,0x000001da, + 0x000001dd,0x0004003d,0x00000006,0x000001df,0x000001da,0x00050085,0x00000006,0x000001e0, + 0x000001df,0x0000008a,0x0003003e,0x000001de,0x000001e0,0x0003003e,0x000001e1,0x000000d4, + 0x0003003e,0x000001e2,0x000000d4,0x0004003d,0x00000006,0x000001e3,0x000001c7,0x0004003d, + 0x00000006,0x000001e4,0x000001d1,0x000500ba,0x00000012,0x000001e5,0x000001e3,0x000001e4, + 0x000300f7,0x000001e7,0x00000000,0x000400fa,0x000001e5,0x000001e6,0x000001e7,0x000200f8, + 0x000001e6,0x0004003d,0x00000006,0x000001e9,0x000001c7,0x0004003d,0x00000006,0x000001ea, + 0x000001d1,0x00050083,0x00000006,0x000001eb,0x000001e9,0x000001ea,0x0003003e,0x000001e8, + 0x000001eb,0x0004003d,0x00000006,0x000001ec,0x000001de,0x000500ba,0x00000012,0x000001ed, + 0x000001ec,0x0000008a,0x000300f7,0x000001f0,0x00000000,0x000400fa,0x000001ed,0x000001ef, + 0x000001f7,0x000200f8,0x000001ef,0x0004003d,0x00000006,0x000001f1,0x000001e8,0x0004003d, + 0x00000006,0x000001f2,0x000001c7,0x00050083,0x00000006,0x000001f3,0x00000150,0x000001f2, + 0x0004003d,0x00000006,0x000001f4,0x000001d1,0x00050083,0x00000006,0x000001f5,0x000001f3, + 0x000001f4,0x00050088,0x00000006,0x000001f6,0x000001f1,0x000001f5,0x0003003e,0x000001ee, + 0x000001f6,0x000200f9,0x000001f0,0x000200f8,0x000001f7,0x0004003d,0x00000006,0x000001f8, + 0x000001e8,0x0004003d,0x00000006,0x000001f9,0x000001da,0x00050088,0x00000006,0x000001fa, + 0x000001f8,0x000001f9,0x0003003e,0x000001ee,0x000001fa,0x000200f9,0x000001f0,0x000200f8, + 0x000001f0,0x0004003d,0x00000006,0x000001fb,0x000001ee,0x0003003e,0x000001e2,0x000001fb, + 0x0004003d,0x00000006,0x000001fc,0x000001c7,0x00050041,0x00000007,0x000001fd,0x0000001e, + 0x0000004c,0x0004003d,0x00000006,0x000001fe,0x000001fd,0x000500b4,0x00000012,0x000001ff, + 0x000001fc,0x000001fe,0x000300f7,0x00000201,0x00000000,0x000400fa,0x000001ff,0x00000200, + 0x00000212,0x000200f8,0x00000200,0x00050041,0x00000007,0x00000202,0x0000001e,0x0000015e, + 0x0004003d,0x00000006,0x00000203,0x00000202,0x00050041,0x00000007,0x00000204,0x0000001e, + 0x000001cd,0x0004003d,0x00000006,0x00000205,0x00000204,0x00050083,0x00000006,0x00000206, + 0x00000203,0x00000205,0x0004003d,0x00000006,0x00000207,0x000001e8,0x00050088,0x00000006, + 0x00000208,0x000000dc,0x00000207,0x00050041,0x00000007,0x00000209,0x0000001e,0x0000015e, + 0x0004003d,0x00000006,0x0000020a,0x00000209,0x00050041,0x00000007,0x0000020b,0x0000001e, + 0x000001cd,0x0004003d,0x00000006,0x0000020c,0x0000020b,0x000500b8,0x00000012,0x0000020d, + 0x0000020a,0x0000020c,0x000600a9,0x00000006,0x0000020f,0x0000020d,0x0000020e,0x000000d4, + 0x0008000c,0x00000006,0x00000210,0x00000001,0x00000032,0x00000206,0x00000208,0x0000020f, + 0x00050088,0x00000006,0x00000211,0x00000210,0x0000020e,0x0003003e,0x000001e1,0x00000211, + 0x000200f9,0x00000201,0x000200f8,0x00000212,0x0004003d,0x00000006,0x00000213,0x000001c7, + 0x00050041,0x00000007,0x00000214,0x0000001e,0x0000015e,0x0004003d,0x00000006,0x00000215, + 0x00000214,0x000500b4,0x00000012,0x00000216,0x00000213,0x00000215,0x000300f7,0x00000218, + 0x00000000,0x000400fa,0x00000216,0x00000217,0x00000222,0x000200f8,0x00000217,0x00050041, + 0x00000007,0x00000219,0x0000001e,0x000001cd,0x0004003d,0x00000006,0x0000021a,0x00000219, + 0x00050041,0x00000007,0x0000021b,0x0000001e,0x0000004c,0x0004003d,0x00000006,0x0000021c, + 0x0000021b,0x00050083,0x00000006,0x0000021d,0x0000021a,0x0000021c,0x0004003d,0x00000006, + 0x0000021e,0x000001e8,0x00050088,0x00000006,0x0000021f,0x000000dc,0x0000021e,0x0008000c, + 0x00000006,0x00000220,0x00000001,0x00000032,0x0000021d,0x0000021f,0x00000150,0x00050088, + 0x00000006,0x00000221,0x00000220,0x0000020e,0x0003003e,0x000001e1,0x00000221,0x000200f9, + 0x00000218,0x000200f8,0x00000222,0x00050041,0x00000007,0x00000223,0x0000001e,0x0000004c, + 0x0004003d,0x00000006,0x00000224,0x00000223,0x00050041,0x00000007,0x00000225,0x0000001e, + 0x0000015e,0x0004003d,0x00000006,0x00000226,0x00000225,0x00050083,0x00000006,0x00000227, + 0x00000224,0x00000226,0x0004003d,0x00000006,0x00000228,0x000001e8,0x00050088,0x00000006, + 0x00000229,0x000000dc,0x00000228,0x0008000c,0x00000006,0x0000022b,0x00000001,0x00000032, + 0x00000227,0x00000229,0x0000022a,0x00050088,0x00000006,0x0000022c,0x0000022b,0x0000020e, + 0x0003003e,0x000001e1,0x0000022c,0x000200f9,0x00000218,0x000200f8,0x00000218,0x000200f9, + 0x00000201,0x000200f8,0x00000201,0x000200f9,0x000001e7,0x000200f8,0x000001e7,0x0004003d, + 0x00000006,0x0000022d,0x000001e1,0x0004003d,0x00000006,0x0000022e,0x000001e2,0x0004003d, + 0x00000006,0x0000022f,0x000001de,0x00060050,0x00000017,0x00000230,0x0000022d,0x0000022e, + 0x0000022f,0x000200fe,0x00000230,0x00010038,0x00050036,0x00000006,0x00000025,0x00000000, + 0x00000021,0x00030037,0x00000007,0x00000022,0x00030037,0x00000007,0x00000023,0x00030037, + 0x00000007,0x00000024,0x000200f8,0x00000026,0x0004003b,0x00000007,0x00000233,0x00000007, + 0x0004003d,0x00000006,0x00000234,0x00000024,0x0003003e,0x00000233,0x00000234,0x0004003d, + 0x00000006,0x00000235,0x00000233,0x000500b8,0x00000012,0x00000236,0x00000235,0x000000d4, + 0x000300f7,0x00000238,0x00000000,0x000400fa,0x00000236,0x00000237,0x00000238,0x000200f8, + 0x00000237,0x0004003d,0x00000006,0x00000239,0x00000233,0x00050081,0x00000006,0x0000023a, + 0x00000239,0x000000dc,0x0003003e,0x00000233,0x0000023a,0x000200f9,0x00000238,0x000200f8, + 0x00000238,0x0004003d,0x00000006,0x0000023b,0x00000233,0x000500ba,0x00000012,0x0000023c, + 0x0000023b,0x000000dc,0x000300f7,0x0000023e,0x00000000,0x000400fa,0x0000023c,0x0000023d, + 0x0000023e,0x000200f8,0x0000023d,0x0004003d,0x00000006,0x0000023f,0x00000233,0x00050083, + 0x00000006,0x00000240,0x0000023f,0x000000dc,0x0003003e,0x00000233,0x00000240,0x000200f9, + 0x0000023e,0x000200f8,0x0000023e,0x0004003d,0x00000006,0x00000241,0x00000233,0x0004007c, + 0x00000006,0x00000243,0x00000242,0x000500b8,0x00000012,0x00000244,0x00000241,0x00000243, + 0x000300f7,0x00000246,0x00000000,0x000400fa,0x00000244,0x00000245,0x00000246,0x000200f8, + 0x00000245,0x0004003d,0x00000006,0x00000247,0x00000233,0x0004003d,0x00000006,0x00000248, + 0x00000023,0x0004003d,0x00000006,0x00000249,0x00000022,0x00050083,0x00000006,0x0000024a, + 0x00000248,0x00000249,0x00050085,0x00000006,0x0000024b,0x0000024a,0x0000020e,0x0004003d, + 0x00000006,0x0000024c,0x00000022,0x0008000c,0x00000006,0x0000024d,0x00000001,0x00000032, + 0x00000247,0x0000024b,0x0000024c,0x000200fe,0x0000024d,0x000200f8,0x00000246,0x0004003d, + 0x00000006,0x0000024f,0x00000233,0x000500b8,0x00000012,0x00000250,0x0000024f,0x0000008a, + 0x000300f7,0x00000252,0x00000000,0x000400fa,0x00000250,0x00000251,0x00000252,0x000200f8, + 0x00000251,0x0004003d,0x00000006,0x00000253,0x00000023,0x000200fe,0x00000253,0x000200f8, + 0x00000252,0x0004003d,0x00000006,0x00000255,0x00000233,0x0004007c,0x00000006,0x00000257, + 0x00000256,0x000500b8,0x00000012,0x00000258,0x00000255,0x00000257,0x000300f7,0x0000025a, + 0x00000000,0x000400fa,0x00000258,0x00000259,0x0000025a,0x000200f8,0x00000259,0x0004007c, + 0x00000006,0x0000025b,0x00000256,0x0004003d,0x00000006,0x0000025c,0x00000233,0x00050083, + 0x00000006,0x0000025d,0x0000025b,0x0000025c,0x0004003d,0x00000006,0x0000025e,0x00000023, + 0x0004003d,0x00000006,0x0000025f,0x00000022,0x00050083,0x00000006,0x00000260,0x0000025e, + 0x0000025f,0x00050085,0x00000006,0x00000261,0x0000025d,0x00000260,0x0004003d,0x00000006, + 0x00000262,0x00000022,0x0008000c,0x00000006,0x00000263,0x00000001,0x00000032,0x00000261, + 0x0000020e,0x00000262,0x000200fe,0x00000263,0x000200f8,0x0000025a,0x0004003d,0x00000006, + 0x00000265,0x00000022,0x000200fe,0x00000265,0x00010038,0x00050036,0x00000017,0x00000028, + 0x00000000,0x0000001d,0x00030037,0x0000001c,0x00000027,0x000200f8,0x00000029,0x0004003b, + 0x00000007,0x00000271,0x00000007,0x0004003b,0x00000007,0x00000275,0x00000007,0x0004003b, + 0x00000007,0x0000028b,0x00000007,0x0004003b,0x00000007,0x00000298,0x00000007,0x0004003b, + 0x00000007,0x0000029a,0x00000007,0x0004003b,0x00000007,0x0000029c,0x00000007,0x0004003b, + 0x00000007,0x0000029e,0x00000007,0x0004003b,0x00000007,0x000002a0,0x00000007,0x0004003b, + 0x00000007,0x000002a2,0x00000007,0x0004003b,0x00000007,0x000002aa,0x00000007,0x0004003b, + 0x00000007,0x000002ac,0x00000007,0x0004003b,0x00000007,0x000002ae,0x00000007,0x00050041, + 0x00000007,0x00000268,0x00000027,0x0000015e,0x0004003d,0x00000006,0x00000269,0x00000268, + 0x000500bc,0x00000012,0x0000026a,0x00000269,0x000000d4,0x000300f7,0x0000026c,0x00000000, + 0x000400fa,0x0000026a,0x0000026b,0x0000026c,0x000200f8,0x0000026b,0x00050041,0x00000007, + 0x0000026d,0x00000027,0x000001cd,0x0004003d,0x00000006,0x0000026e,0x0000026d,0x00060050, + 0x00000017,0x0000026f,0x0000026e,0x0000026e,0x0000026e,0x000200fe,0x0000026f,0x000200f8, + 0x0000026c,0x00050041,0x00000007,0x00000272,0x00000027,0x000001cd,0x0004003d,0x00000006, + 0x00000273,0x00000272,0x000500b8,0x00000012,0x00000274,0x00000273,0x0000008a,0x000300f7, + 0x00000277,0x00000000,0x000400fa,0x00000274,0x00000276,0x0000027e,0x000200f8,0x00000276, + 0x00050041,0x00000007,0x00000278,0x00000027,0x000001cd,0x0004003d,0x00000006,0x00000279, + 0x00000278,0x00050041,0x00000007,0x0000027a,0x00000027,0x0000015e,0x0004003d,0x00000006, + 0x0000027b,0x0000027a,0x00050081,0x00000006,0x0000027c,0x0000027b,0x000000dc,0x00050085, + 0x00000006,0x0000027d,0x00000279,0x0000027c,0x0003003e,0x00000275,0x0000027d,0x000200f9, + 0x00000277,0x000200f8,0x0000027e,0x00050041,0x00000007,0x0000027f,0x00000027,0x000001cd, + 0x0004003d,0x00000006,0x00000280,0x0000027f,0x0004007f,0x00000006,0x00000281,0x00000280, + 0x00050041,0x00000007,0x00000282,0x00000027,0x0000015e,0x0004003d,0x00000006,0x00000283, + 0x00000282,0x00050041,0x00000007,0x00000284,0x00000027,0x000001cd,0x0004003d,0x00000006, + 0x00000285,0x00000284,0x00050041,0x00000007,0x00000286,0x00000027,0x0000015e,0x0004003d, + 0x00000006,0x00000287,0x00000286,0x00050081,0x00000006,0x00000288,0x00000285,0x00000287, + 0x0008000c,0x00000006,0x00000289,0x00000001,0x00000032,0x00000281,0x00000283,0x00000288, + 0x0003003e,0x00000275,0x00000289,0x000200f9,0x00000277,0x000200f8,0x00000277,0x0004003d, + 0x00000006,0x0000028a,0x00000275,0x0003003e,0x00000271,0x0000028a,0x00050041,0x00000007, + 0x0000028c,0x00000027,0x000001cd,0x0004003d,0x00000006,0x0000028d,0x0000028c,0x00050041, + 0x00000007,0x0000028e,0x00000027,0x000001cd,0x0004003d,0x00000006,0x0000028f,0x0000028e, + 0x00050081,0x00000006,0x00000290,0x0000028d,0x0000028f,0x0004003d,0x00000006,0x00000291, + 0x00000271,0x00050083,0x00000006,0x00000292,0x00000290,0x00000291,0x0003003e,0x0000028b, + 0x00000292,0x00050041,0x00000007,0x00000293,0x00000027,0x0000004c,0x0004003d,0x00000006, + 0x00000294,0x00000293,0x0004007c,0x00000006,0x00000296,0x00000295,0x00050081,0x00000006, + 0x00000297,0x00000294,0x00000296,0x0004003d,0x00000006,0x00000299,0x0000028b,0x0003003e, + 0x00000298,0x00000299,0x0004003d,0x00000006,0x0000029b,0x00000271,0x0003003e,0x0000029a, + 0x0000029b,0x0003003e,0x0000029c,0x00000297,0x00070039,0x00000006,0x0000029d,0x00000025, + 0x00000298,0x0000029a,0x0000029c,0x0004003d,0x00000006,0x0000029f,0x0000028b,0x0003003e, + 0x0000029e,0x0000029f,0x0004003d,0x00000006,0x000002a1,0x00000271,0x0003003e,0x000002a0, + 0x000002a1,0x00050041,0x00000007,0x000002a3,0x00000027,0x0000004c,0x0004003d,0x00000006, + 0x000002a4,0x000002a3,0x0003003e,0x000002a2,0x000002a4,0x00070039,0x00000006,0x000002a5, + 0x00000025,0x0000029e,0x000002a0,0x000002a2,0x00050041,0x00000007,0x000002a6,0x00000027, + 0x0000004c,0x0004003d,0x00000006,0x000002a7,0x000002a6,0x0004007c,0x00000006,0x000002a8, + 0x00000295,0x00050083,0x00000006,0x000002a9,0x000002a7,0x000002a8,0x0004003d,0x00000006, + 0x000002ab,0x0000028b,0x0003003e,0x000002aa,0x000002ab,0x0004003d,0x00000006,0x000002ad, + 0x00000271,0x0003003e,0x000002ac,0x000002ad,0x0003003e,0x000002ae,0x000002a9,0x00070039, + 0x00000006,0x000002af,0x00000025,0x000002aa,0x000002ac,0x000002ae,0x00060050,0x00000017, + 0x000002b0,0x0000029d,0x000002a5,0x000002af,0x000200fe,0x000002b0,0x00010038,0x00050036, + 0x00000017,0x0000002e,0x00000000,0x0000002a,0x00030037,0x0000001c,0x0000002b,0x00030037, + 0x00000007,0x0000002c,0x00030037,0x00000007,0x0000002d,0x000200f8,0x0000002f,0x0004003b, + 0x00000007,0x000002b3,0x00000007,0x0004003b,0x00000007,0x000002b6,0x00000007,0x0004003b, + 0x00000007,0x000002b9,0x00000007,0x0004003b,0x00000007,0x000002c1,0x00000007,0x0004003b, + 0x00000007,0x000002c4,0x00000007,0x0004003b,0x00000007,0x000002cc,0x00000007,0x0004003b, + 0x00000007,0x000002cf,0x00000007,0x0004003b,0x00000054,0x000002d9,0x00000007,0x0004003b, + 0x00000007,0x000002e1,0x00000007,0x0004003b,0x00000007,0x000002e6,0x00000007,0x0004003b, + 0x00000007,0x000002ec,0x00000007,0x0004003b,0x00000007,0x000002f0,0x00000007,0x0004003b, + 0x00000007,0x000002fa,0x00000007,0x0004003b,0x00000007,0x00000300,0x00000007,0x0004003b, + 0x0000001c,0x00000304,0x00000007,0x0004003b,0x0000001c,0x0000030d,0x00000007,0x0004003b, + 0x0000001c,0x0000030e,0x00000007,0x0004003b,0x0000001c,0x00000311,0x00000007,0x0004003b, + 0x0000001c,0x0000031d,0x00000007,0x0004003b,0x0000001c,0x0000031f,0x00000007,0x0004003b, + 0x0000001c,0x00000320,0x00000007,0x0004003b,0x0000001c,0x0000032d,0x00000007,0x0004003d, + 0x00000006,0x000002b4,0x0000002d,0x0008000c,0x00000006,0x000002b5,0x00000001,0x0000002b, + 0x000002b4,0x000000d4,0x000000dc,0x0003003e,0x000002b3,0x000002b5,0x0004003d,0x00000006, + 0x000002b7,0x0000002c,0x000500b4,0x00000012,0x000002b8,0x000002b7,0x000000dc,0x000300f7, + 0x000002bb,0x00000000,0x000400fa,0x000002b8,0x000002ba,0x000002bf,0x000200f8,0x000002ba, + 0x0004003d,0x00000006,0x000002bd,0x000002b3,0x00050085,0x00000006,0x000002be,0x000002bc, + 0x000002bd,0x0003003e,0x000002b9,0x000002be,0x000200f9,0x000002bb,0x000200f8,0x000002bf, + 0x0003003e,0x000002b9,0x000000d4,0x000200f9,0x000002bb,0x000200f8,0x000002bb,0x0004003d, + 0x00000006,0x000002c0,0x000002b9,0x0003003e,0x000002b6,0x000002c0,0x0004003d,0x00000006, + 0x000002c2,0x0000002c,0x000500b4,0x00000012,0x000002c3,0x000002c2,0x000000dc,0x000300f7, + 0x000002c6,0x00000000,0x000400fa,0x000002c3,0x000002c5,0x000002ca,0x000200f8,0x000002c5, + 0x0004003d,0x00000006,0x000002c8,0x000002b3,0x00050085,0x00000006,0x000002c9,0x000002c7, + 0x000002c8,0x0003003e,0x000002c4,0x000002c9,0x000200f9,0x000002c6,0x000200f8,0x000002ca, + 0x0003003e,0x000002c4,0x000000d4,0x000200f9,0x000002c6,0x000200f8,0x000002c6,0x0004003d, + 0x00000006,0x000002cb,0x000002c4,0x0003003e,0x000002c1,0x000002cb,0x0004003d,0x00000006, + 0x000002cd,0x0000002c,0x000500b4,0x00000012,0x000002ce,0x000002cd,0x000000dc,0x000300f7, + 0x000002d1,0x00000000,0x000400fa,0x000002ce,0x000002d0,0x000002d4,0x000200f8,0x000002d0, + 0x0004003d,0x00000006,0x000002d2,0x000002b3,0x00050085,0x00000006,0x000002d3,0x000002bc, + 0x000002d2,0x0003003e,0x000002cf,0x000002d3,0x000200f9,0x000002d1,0x000200f8,0x000002d4, + 0x0004003d,0x00000006,0x000002d6,0x000002b3,0x00050085,0x00000006,0x000002d7,0x000002d5, + 0x000002d6,0x0003003e,0x000002cf,0x000002d7,0x000200f9,0x000002d1,0x000200f8,0x000002d1, + 0x0004003d,0x00000006,0x000002d8,0x000002cf,0x0003003e,0x000002cc,0x000002d8,0x0003003e, + 0x000002d9,0x00000063,0x000200f9,0x000002da,0x000200f8,0x000002da,0x000400f6,0x000002dc, + 0x000002dd,0x00000000,0x000200f9,0x000002de,0x000200f8,0x000002de,0x0004003d,0x00000053, + 0x000002df,0x000002d9,0x000500b1,0x00000012,0x000002e0,0x000002df,0x00000095,0x000400fa, + 0x000002e0,0x000002db,0x000002dc,0x000200f8,0x000002db,0x0004003d,0x00000053,0x000002e2, + 0x000002d9,0x00050041,0x00000007,0x000002e3,0x0000002b,0x000002e2,0x0004003d,0x00000006, + 0x000002e4,0x000002e3,0x0008000c,0x00000006,0x000002e5,0x00000001,0x0000002b,0x000002e4, + 0x000000d4,0x000000dc,0x0003003e,0x000002e1,0x000002e5,0x0004003d,0x00000006,0x000002e7, + 0x000002e1,0x0004003d,0x00000006,0x000002e8,0x000002b6,0x0006000c,0x00000006,0x000002e9, + 0x00000001,0x0000001d,0x000002e8,0x00050085,0x00000006,0x000002ea,0x000002e7,0x000002e9, + 0x0008000c,0x00000006,0x000002eb,0x00000001,0x0000002b,0x000002ea,0x000000d4,0x000000dc, + 0x0003003e,0x000002e6,0x000002eb,0x0004003d,0x00000006,0x000002ed,0x000002e6,0x0004003d, + 0x00000006,0x000002ee,0x000002e6,0x00050085,0x00000006,0x000002ef,0x000002ed,0x000002ee, + 0x0003003e,0x000002ec,0x000002ef,0x0004003d,0x00000006,0x000002f1,0x000002ec,0x0004003d, + 0x00000006,0x000002f3,0x000002e6,0x0004003d,0x00000006,0x000002f4,0x000002e6,0x00050081, + 0x00000006,0x000002f5,0x000002f3,0x000002f4,0x00050083,0x00000006,0x000002f6,0x000002f2, + 0x000002f5,0x0004003d,0x00000006,0x000002f7,0x000002e6,0x0004007f,0x00000006,0x000002f8, + 0x000002f7,0x0008000c,0x00000006,0x000002f9,0x00000001,0x00000032,0x000002f1,0x000002f6, + 0x000002f8,0x0003003e,0x000002f0,0x000002f9,0x0004003d,0x00000006,0x000002fb,0x000002c1, + 0x0004003d,0x00000006,0x000002fc,0x000002f0,0x0004003d,0x00000006,0x000002fd,0x000002e6, + 0x0008000c,0x00000006,0x000002fe,0x00000001,0x00000032,0x000002fb,0x000002fc,0x000002fd, + 0x0008000c,0x00000006,0x000002ff,0x00000001,0x0000002b,0x000002fe,0x000000d4,0x000000dc, + 0x0003003e,0x000002fa,0x000002ff,0x0004003d,0x00000006,0x00000301,0x000002fa,0x0006000c, + 0x00000006,0x00000302,0x00000001,0x0000001e,0x00000301,0x0006000c,0x00000006,0x00000303, + 0x00000001,0x0000001d,0x00000302,0x0003003e,0x00000300,0x00000303,0x0004003d,0x00000053, + 0x00000305,0x000002d9,0x0004003d,0x00000006,0x00000306,0x00000300,0x0007000c,0x00000006, + 0x00000307,0x00000001,0x00000028,0x000000d4,0x00000306,0x0006000c,0x00000006,0x00000308, + 0x00000001,0x0000001e,0x00000307,0x0006000c,0x00000006,0x00000309,0x00000001,0x0000001d, + 0x00000308,0x00050041,0x00000007,0x0000030a,0x00000304,0x00000305,0x0003003e,0x0000030a, + 0x00000309,0x000200f9,0x000002dd,0x000200f8,0x000002dd,0x0004003d,0x00000053,0x0000030b, + 0x000002d9,0x00050080,0x00000053,0x0000030c,0x0000030b,0x000000ac,0x0003003e,0x000002d9, + 0x0000030c,0x000200f9,0x000002da,0x000200f8,0x000002dc,0x0004003d,0x00000017,0x0000030f, + 0x00000304,0x0003003e,0x0000030e,0x0000030f,0x00050039,0x00000017,0x00000310,0x0000001f, + 0x0000030e,0x0003003e,0x0000030d,0x00000310,0x00050041,0x00000007,0x00000312,0x0000030d, + 0x0000004c,0x0004003d,0x00000006,0x00000313,0x00000312,0x00050041,0x00000007,0x00000314, + 0x0000030d,0x0000015e,0x0004003d,0x00000006,0x00000315,0x00000314,0x0004003d,0x00000006, + 0x00000316,0x000002cc,0x00050081,0x00000006,0x00000317,0x00000316,0x000000dc,0x00050085, + 0x00000006,0x00000318,0x00000315,0x00000317,0x0008000c,0x00000006,0x00000319,0x00000001, + 0x0000002b,0x00000318,0x000000d4,0x000000dc,0x00050041,0x00000007,0x0000031a,0x0000030d, + 0x000001cd,0x0004003d,0x00000006,0x0000031b,0x0000031a,0x00060050,0x00000017,0x0000031c, + 0x00000313,0x00000319,0x0000031b,0x0003003e,0x0000031d,0x0000031c,0x00050039,0x00000017, + 0x0000031e,0x00000028,0x0000031d,0x0003003e,0x00000311,0x0000031e,0x0004003d,0x00000017, + 0x00000321,0x00000311,0x0003003e,0x00000320,0x00000321,0x00050039,0x00000017,0x00000322, + 0x0000001f,0x00000320,0x0003003e,0x0000031f,0x00000322,0x00050041,0x00000007,0x00000323, + 0x0000031f,0x0000004c,0x0004003d,0x00000006,0x00000324,0x00000323,0x00050041,0x00000007, + 0x00000325,0x0000031f,0x0000015e,0x0004003d,0x00000006,0x00000326,0x00000325,0x0006000c, + 0x00000006,0x00000327,0x00000001,0x0000001e,0x00000326,0x0006000c,0x00000006,0x00000328, + 0x00000001,0x0000001d,0x00000327,0x0008000c,0x00000006,0x00000329,0x00000001,0x0000002b, + 0x00000328,0x000000d4,0x000000dc,0x00050041,0x00000007,0x0000032a,0x0000031f,0x000001cd, + 0x0004003d,0x00000006,0x0000032b,0x0000032a,0x00060050,0x00000017,0x0000032c,0x00000324, + 0x00000329,0x0000032b,0x0003003e,0x0000032d,0x0000032c,0x00050039,0x00000017,0x0000032e, + 0x00000028,0x0000032d,0x0008000c,0x00000017,0x00000331,0x00000001,0x0000002b,0x0000032e, + 0x0000032f,0x00000330,0x000200fe,0x00000331,0x00010038 +}; diff --git a/gpu/vk/shaders/opennr_pre.comp b/gpu/vk/shaders/opennr_pre.comp new file mode 100644 index 000000000..43bf5718d --- /dev/null +++ b/gpu/vk/shaders/opennr_pre.comp @@ -0,0 +1,60 @@ +#version 460 +// (hookshot) The open neural rendering backend's input: the network's sixteen f32 lanes per padded pixel, from the +// window's frame (gpu/vk/vk_opennr.cpp). OpenDLSS-NR's docs/network.md is the table: +// 0-2 Gaussian noise from a hash of the PADDED coordinate and the seed, 3 constant 1, 4-6 the frame centred, +// 7-9 the reprojected previous output centred (a copy of 4-6 without one), 10 style / 128, 11 local tone, +// 12-14 the structure / skin / auto-mask triple, 15 zero. +// Outside the frame's rectangle the sampling coordinate is mirrored (2 * valid - x - 2) while the noise keeps the +// padded coordinate, so the padding is a reflected copy of the frame with its own noise. +// +// The frame is already a display image (the game tone-maps it), so it is its own proxy: its code values are the +// lanes, with no paper white and no shoulder, which upstream's demo needs only because its scene is HDR. +#extension GL_GOOGLE_include_directive : require +#include "opennr_common.glsl" + +layout(local_size_x = 8, local_size_y = 8) in; + +float hashUniform(uint value) { + uint mixed = value; + mixed = (mixed >> ((mixed >> 28u) + 4u)) ^ mixed; + mixed *= 0x108ef2d9u; + uint integer = ((mixed >> 30u) ^ (mixed >> 8u)) + 1u; + return float(integer) * uintBitsToFloat(0x33800000u); +} + +vec3 gaussian3(uint x, uint y, uint seed) { + uint base = (x * 0x8da6b343u) ^ (y * 0xd8163841u) ^ (seed * 0x9e3779b9u) ^ 0x243f6a88u; + base = (base >> ((base >> 28u) + 4u)) ^ base; + base *= 0x108ef2d9u; + base = (base >> 22u) ^ base; + float u0 = hashUniform(base * 0x2c9277b5u + 0xac564b05u); + float u1 = hashUniform(base * 0xfa6dc5f9u + 0x4712a88eu); + float u2 = hashUniform(base * 0xcaa5b80du + 0x21dd796bu); + float u3 = hashUniform(base * 0x83232c31u + 0x3463e0acu); + float radius0 = sqrt(log2(u0) * uintBitsToFloat(0x3f317218u) * -2.0); + float radius1 = sqrt(log2(u2) * uintBitsToFloat(0x3f317218u) * -2.0); + float tau = uintBitsToFloat(0x40c90fdbu); + return vec3(roundF16(radius0 * cos(u1 * tau)), roundF16(radius0 * sin(u1 * tau)), roundF16(radius1 * cos(u3 * tau))); +} + +void main() { + uvec2 id = gl_GlobalInvocationID.xy; + if (id.x >= pc.full_width || id.y >= pc.full_height) return; + int rx = id.x < pc.valid_width ? int(id.x) : 2 * int(pc.valid_width) - int(id.x) - 2; + int ry = id.y < pc.valid_height ? int(id.y) : 2 * int(pc.valid_height) - int(id.y) - 2; + ivec2 at = clamp(ivec2(rx, ry), ivec2(0), ivec2(pc.valid_width, pc.valid_height) - 1); + vec3 current = centred(imageLoad(in_color, at).rgb); + vec3 noise = gaussian3(id.x, id.y, pc.seed); + // lanes 7-9: without a history (a reset, single-frame mode, a pixel whose previous position was off screen) the + // current frame stands in, as on a first frame + vec3 previous = current; + if (has_history(vec2(at))) previous = centred(history_sample(vec2(at))); + uint base = (id.y * pc.full_width + id.x) * 4u; + features[base + 0u] = vec4(noise, 1.0); + features[base + 1u] = vec4(current, previous.r); + features[base + 2u] = vec4(previous.g, previous.b, pc.style / 128.0, roundF16(pc.local_tone)); + bool masked = pc.auto_mask != 0u; + features[base + 3u] = vec4(roundF16(masked ? 1.0 : pc.local_structure), + roundF16(masked ? (pc.skin < 0.0 ? pc.local_structure : pc.skin) : -1.0), + roundF16(masked ? pc.local_structure : -1.0), 0.0); +} diff --git a/gpu/vk/shaders/opennr_pre_comp_spv.h b/gpu/vk/shaders/opennr_pre_comp_spv.h new file mode 100644 index 000000000..56957d133 --- /dev/null +++ b/gpu/vk/shaders/opennr_pre_comp_spv.h @@ -0,0 +1,620 @@ + // 1116.2.0 + #pragma once +const uint32_t OPENNR_PRE_COMP_SPV[] = { + 0x07230203,0x00010600,0x0008000b,0x0000034c,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000032,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e, + 0x00000000,0x00000001,0x000e000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x0000009d, + 0x000000b0,0x0000016a,0x00000263,0x000002b8,0x000002e6,0x00000346,0x00000347,0x0000034a, + 0x00060010,0x00000004,0x00000011,0x00000008,0x00000008,0x00000001,0x00030003,0x00000002, + 0x000001cc,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c, + 0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63, + 0x69645f65,0x74636572,0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005, + 0x0000000a,0x6e756f72,0x36314664,0x3b316628,0x00000000,0x00040005,0x00000009,0x756c6176, + 0x00000065,0x00060005,0x00000010,0x746e6563,0x28646572,0x3b336676,0x00000000,0x00040005, + 0x0000000f,0x65646f63,0x00000000,0x00060005,0x00000016,0x74736968,0x5f79726f,0x76287675, + 0x003b3266,0x00040005,0x00000015,0x65786970,0x0000006c,0x00070005,0x0000001b,0x5f736168, + 0x74736968,0x2879726f,0x3b326676,0x00000000,0x00040005,0x0000001a,0x65786970,0x0000006c, + 0x00070005,0x0000001f,0x74736968,0x5f79726f,0x706d6173,0x7628656c,0x003b3266,0x00040005, + 0x0000001e,0x65786970,0x0000006c,0x00060005,0x00000025,0x68736168,0x66696e55,0x286d726f, + 0x003b3175,0x00040005,0x00000024,0x756c6176,0x00000065,0x00070005,0x0000002b,0x73756167, + 0x6e616973,0x31752833,0x3b31753b,0x003b3175,0x00030005,0x00000028,0x00000078,0x00030005, + 0x00000029,0x00000079,0x00040005,0x0000002a,0x64656573,0x00000000,0x00040005,0x0000002d, + 0x73746962,0x00000000,0x00040005,0x00000030,0x6e676973,0x00000000,0x00050005,0x00000034, + 0x6e67616d,0x64757469,0x00000065,0x00040005,0x0000004d,0x6c616373,0x00006465,0x00030005, + 0x0000005e,0x0062736c,0x00040005,0x00000064,0x6e756f72,0x00646564,0x00040005,0x00000072, + 0x61726170,0x0000006d,0x00040005,0x00000079,0x61726170,0x0000006d,0x00040005,0x0000007d, + 0x61726170,0x0000006d,0x00040005,0x0000007f,0x61726170,0x0000006d,0x00040005,0x00000084, + 0x61726170,0x0000006d,0x00040005,0x00000087,0x61726170,0x0000006d,0x00040005,0x00000089, + 0x61726170,0x0000006d,0x00040005,0x0000008f,0x61726170,0x0000006d,0x00040005,0x00000092, + 0x61726170,0x0000006d,0x00030005,0x00000097,0x00007675,0x00040005,0x0000009b,0x68737550, + 0x00000000,0x00060006,0x0000009b,0x00000000,0x6c6c7566,0x6469775f,0x00006874,0x00060006, + 0x0000009b,0x00000001,0x6c6c7566,0x6965685f,0x00746867,0x00060006,0x0000009b,0x00000002, + 0x696c6176,0x69775f64,0x00687464,0x00070006,0x0000009b,0x00000003,0x696c6176,0x65685f64, + 0x74686769,0x00000000,0x00050006,0x0000009b,0x00000004,0x64656573,0x00000000,0x00070006, + 0x0000009b,0x00000005,0x74736968,0x5f79726f,0x696c6176,0x00000064,0x00070006,0x0000009b, + 0x00000006,0x69746f6d,0x765f6e6f,0x64696c61,0x00000000,0x00060006,0x0000009b,0x00000007, + 0x6f747561,0x73616d5f,0x0000006b,0x00050006,0x0000009b,0x00000008,0x6c797473,0x00000065, + 0x00060006,0x0000009b,0x00000009,0x61636f6c,0x6f745f6c,0x0000656e,0x00070006,0x0000009b, + 0x0000000a,0x61636f6c,0x74735f6c,0x74637572,0x00657275,0x00050006,0x0000009b,0x0000000b, + 0x6e696b73,0x00000000,0x00060006,0x0000009b,0x0000000c,0x69746f6d,0x735f6e6f,0x00657a69, + 0x00060006,0x0000009b,0x0000000d,0x6e656c62,0x63735f64,0x00656c61,0x00060006,0x0000009b, + 0x0000000e,0x65746e69,0x7469736e,0x00000079,0x00030005,0x0000009d,0x00006370,0x00040005, + 0x000000ac,0x657a6973,0x00000000,0x00040005,0x000000b0,0x69746f6d,0x00006e6f,0x00030005, + 0x000000b5,0x00007461,0x00030005,0x000000df,0x00007675,0x00040005,0x000000e0,0x61726170, + 0x0000006d,0x00040005,0x000000f3,0x696c6176,0x00000064,0x00030005,0x000000fb,0x00007675, + 0x00040005,0x00000102,0x61726170,0x0000006d,0x00050005,0x0000010c,0x69736f70,0x6e6f6974, + 0x00000000,0x00040005,0x00000110,0x65736162,0x00000000,0x00030005,0x00000117,0x00000066, + 0x00040005,0x0000011c,0x61757173,0x00006572,0x00040005,0x00000120,0x65627563,0x00000000, + 0x00030005,0x00000124,0x00003077,0x00030005,0x0000012c,0x00003177,0x00030005,0x00000136, + 0x00003377,0x00030005,0x0000013b,0x00003277,0x00040005,0x00000143,0x6464696d,0x0000656c, + 0x00030005,0x00000147,0x00776f6c,0x00040005,0x00000152,0x746e6563,0x00007265,0x00040005, + 0x0000015e,0x68676968,0x00000000,0x00040005,0x00000169,0x7466656c,0x00000000,0x00060005, + 0x0000016a,0x74736968,0x5f79726f,0x76657270,0x00000000,0x00030005,0x00000173,0x00706f74, + 0x00030005,0x0000017c,0x0064696d,0x00040005,0x00000181,0x74746f62,0x00006d6f,0x00040005, + 0x0000018a,0x68676972,0x00000074,0x00030005,0x00000193,0x00000061,0x00030005,0x00000199, + 0x00000062,0x00030005,0x0000019f,0x00000063,0x00030005,0x000001a5,0x00000064,0x00030005, + 0x000001ab,0x00000065,0x00040005,0x000001b1,0x756c6176,0x00000065,0x00040005,0x000001d6, + 0x6578696d,0x00000064,0x00040005,0x000001e4,0x65746e69,0x00726567,0x00040005,0x000001f4, + 0x65736162,0x00000000,0x00030005,0x00000210,0x00003075,0x00040005,0x00000216,0x61726170, + 0x0000006d,0x00030005,0x00000218,0x00003175,0x00040005,0x0000021e,0x61726170,0x0000006d, + 0x00030005,0x00000220,0x00003275,0x00040005,0x00000226,0x61726170,0x0000006d,0x00030005, + 0x00000228,0x00003375,0x00040005,0x0000022e,0x61726170,0x0000006d,0x00040005,0x00000230, + 0x69646172,0x00307375,0x00040005,0x00000239,0x69646172,0x00317375,0x00030005,0x00000240, + 0x00756174,0x00040005,0x00000249,0x61726170,0x0000006d,0x00040005,0x00000251,0x61726170, + 0x0000006d,0x00040005,0x00000259,0x61726170,0x0000006d,0x00030005,0x00000260,0x00006469, + 0x00080005,0x00000263,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044, + 0x00030005,0x00000278,0x00007872,0x00030005,0x0000028f,0x00007972,0x00030005,0x000002a6, + 0x00007461,0x00040005,0x000002b5,0x72727563,0x00746e65,0x00050005,0x000002b8,0x635f6e69, + 0x726f6c6f,0x00000000,0x00040005,0x000002bc,0x61726170,0x0000006d,0x00040005,0x000002bf, + 0x73696f6e,0x00000065,0x00040005,0x000002c1,0x61726170,0x0000006d,0x00040005,0x000002c4, + 0x61726170,0x0000006d,0x00040005,0x000002c7,0x61726170,0x0000006d,0x00050005,0x000002cb, + 0x76657270,0x73756f69,0x00000000,0x00040005,0x000002cf,0x61726170,0x0000006d,0x00040005, + 0x000002d5,0x61726170,0x0000006d,0x00040005,0x000002d7,0x61726170,0x0000006d,0x00040005, + 0x000002d9,0x65736162,0x00000000,0x00050005,0x000002e4,0x74616546,0x73657275,0x00000000, + 0x00060006,0x000002e4,0x00000000,0x74616566,0x73657275,0x00000000,0x00030005,0x000002e6, + 0x00000000,0x00040005,0x00000307,0x61726170,0x0000006d,0x00040005,0x0000030e,0x6b73616d, + 0x00006465,0x00040005,0x0000031e,0x61726170,0x0000006d,0x00040005,0x00000334,0x61726170, + 0x0000006d,0x00040005,0x0000033e,0x61726170,0x0000006d,0x00040005,0x00000344,0x64616548, + 0x00000000,0x00050006,0x00000344,0x00000000,0x64616568,0x00000000,0x00030005,0x00000346, + 0x00000000,0x00050005,0x00000347,0x5f74756f,0x6f6c6f63,0x00000072,0x00060005,0x0000034a, + 0x74736968,0x5f79726f,0x7478656e,0x00000000,0x00030047,0x0000009b,0x00000002,0x00050048, + 0x0000009b,0x00000000,0x00000023,0x00000000,0x00050048,0x0000009b,0x00000001,0x00000023, + 0x00000004,0x00050048,0x0000009b,0x00000002,0x00000023,0x00000008,0x00050048,0x0000009b, + 0x00000003,0x00000023,0x0000000c,0x00050048,0x0000009b,0x00000004,0x00000023,0x00000010, + 0x00050048,0x0000009b,0x00000005,0x00000023,0x00000014,0x00050048,0x0000009b,0x00000006, + 0x00000023,0x00000018,0x00050048,0x0000009b,0x00000007,0x00000023,0x0000001c,0x00050048, + 0x0000009b,0x00000008,0x00000023,0x00000020,0x00050048,0x0000009b,0x00000009,0x00000023, + 0x00000024,0x00050048,0x0000009b,0x0000000a,0x00000023,0x00000028,0x00050048,0x0000009b, + 0x0000000b,0x00000023,0x0000002c,0x00050048,0x0000009b,0x0000000c,0x00000023,0x00000030, + 0x00050048,0x0000009b,0x0000000d,0x00000023,0x00000038,0x00050048,0x0000009b,0x0000000e, + 0x00000023,0x0000003c,0x00040047,0x000000b0,0x00000021,0x00000002,0x00040047,0x000000b0, + 0x00000022,0x00000000,0x00040047,0x0000016a,0x00000021,0x00000001,0x00040047,0x0000016a, + 0x00000022,0x00000000,0x00040047,0x00000263,0x0000000b,0x0000001c,0x00030047,0x000002b8, + 0x00000018,0x00040047,0x000002b8,0x00000021,0x00000000,0x00040047,0x000002b8,0x00000022, + 0x00000000,0x00040047,0x000002e3,0x00000006,0x00000010,0x00030047,0x000002e4,0x00000002, + 0x00050048,0x000002e4,0x00000000,0x00000023,0x00000000,0x00040047,0x000002e6,0x00000021, + 0x00000003,0x00040047,0x000002e6,0x00000022,0x00000000,0x00040047,0x00000343,0x00000006, + 0x00000004,0x00030047,0x00000344,0x00000002,0x00040048,0x00000344,0x00000000,0x00000018, + 0x00050048,0x00000344,0x00000000,0x00000023,0x00000000,0x00030047,0x00000346,0x00000018, + 0x00040047,0x00000346,0x00000021,0x00000004,0x00040047,0x00000346,0x00000022,0x00000000, + 0x00030047,0x00000347,0x00000019,0x00040047,0x00000347,0x00000021,0x00000005,0x00040047, + 0x00000347,0x00000022,0x00000000,0x00030047,0x0000034a,0x00000019,0x00040047,0x0000034a, + 0x00000021,0x00000006,0x00040047,0x0000034a,0x00000022,0x00000000,0x00020013,0x00000002, + 0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040020,0x00000007, + 0x00000007,0x00000006,0x00040021,0x00000008,0x00000006,0x00000007,0x00040017,0x0000000c, + 0x00000006,0x00000003,0x00040020,0x0000000d,0x00000007,0x0000000c,0x00040021,0x0000000e, + 0x0000000c,0x0000000d,0x00040017,0x00000012,0x00000006,0x00000002,0x00040020,0x00000013, + 0x00000007,0x00000012,0x00040021,0x00000014,0x00000012,0x00000013,0x00020014,0x00000018, + 0x00040021,0x00000019,0x00000018,0x00000013,0x00040021,0x0000001d,0x0000000c,0x00000013, + 0x00040015,0x00000021,0x00000020,0x00000000,0x00040020,0x00000022,0x00000007,0x00000021, + 0x00040021,0x00000023,0x00000006,0x00000022,0x00060021,0x00000027,0x0000000c,0x00000022, + 0x00000022,0x00000022,0x0004002b,0x00000021,0x00000032,0x80000000,0x0004002b,0x00000021, + 0x00000036,0x7fffffff,0x0004002b,0x00000021,0x00000039,0x7f800000,0x0004002b,0x00000021, + 0x00000040,0x477ff000,0x0004002b,0x00000021,0x00000049,0x38800000,0x0004002b,0x00000006, + 0x00000050,0x4b800000,0x0004002b,0x00000006,0x00000057,0x33800000,0x0004002b,0x00000021, + 0x00000060,0x0000000d,0x0004002b,0x00000021,0x00000062,0x00000001,0x0004002b,0x00000021, + 0x00000066,0x00000fff,0x0004002b,0x00000021,0x0000006a,0xffffe000,0x0004002b,0x00000021, + 0x00000073,0x00000000,0x0004002b,0x00000006,0x00000077,0x3f000000,0x0004002b,0x00000006, + 0x0000007b,0x3e000000,0x0004002b,0x00000021,0x0000008a,0x00000002,0x0011001e,0x0000009b, + 0x00000021,0x00000021,0x00000021,0x00000021,0x00000021,0x00000021,0x00000021,0x00000021, + 0x00000006,0x00000006,0x00000006,0x00000006,0x00000012,0x00000006,0x00000006,0x00040020, + 0x0000009c,0x00000009,0x0000009b,0x0004003b,0x0000009c,0x0000009d,0x00000009,0x00040015, + 0x0000009e,0x00000020,0x00000001,0x0004002b,0x0000009e,0x0000009f,0x00000002,0x00040020, + 0x000000a0,0x00000009,0x00000021,0x0004002b,0x0000009e,0x000000a4,0x00000003,0x00040017, + 0x000000aa,0x0000009e,0x00000002,0x00040020,0x000000ab,0x00000007,0x000000aa,0x00090019, + 0x000000ad,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000, + 0x0003001b,0x000000ae,0x000000ad,0x00040020,0x000000af,0x00000000,0x000000ae,0x0004003b, + 0x000000af,0x000000b0,0x00000000,0x0004002b,0x0000009e,0x000000b2,0x00000000,0x0004002b, + 0x0000009e,0x000000bc,0x00000001,0x00040017,0x000000c4,0x00000006,0x00000004,0x0004002b, + 0x0000009e,0x000000c7,0x0000000c,0x00040020,0x000000c8,0x00000009,0x00000012,0x0004002b, + 0x0000009e,0x000000cf,0x00000005,0x0003002a,0x00000018,0x000000d5,0x0004002b,0x0000009e, + 0x000000d7,0x00000006,0x00030029,0x00000018,0x000000dd,0x0004002b,0x00000006,0x000000e4, + 0x00000000,0x0005002c,0x00000012,0x000000e5,0x000000e4,0x000000e4,0x00040017,0x000000e6, + 0x00000018,0x00000002,0x0004002b,0x00000006,0x000000ec,0x3f800000,0x0005002c,0x00000012, + 0x000000ed,0x000000ec,0x000000ec,0x0004002b,0x00000006,0x00000128,0xbf000000,0x0005002c, + 0x00000012,0x00000129,0x00000128,0x00000128,0x0004002b,0x00000006,0x0000012e,0x3fc00000, + 0x0004002b,0x00000006,0x00000131,0x40200000,0x0005002c,0x00000012,0x0000014b,0x00000077, + 0x00000077,0x0004002b,0x00000006,0x00000160,0x40000000,0x0004003b,0x000000af,0x0000016a, + 0x00000000,0x0004002b,0x00000021,0x000001da,0x0000001c,0x0004002b,0x00000021,0x000001dc, + 0x00000004,0x0004002b,0x00000021,0x000001e1,0x108ef2d9,0x0004002b,0x00000021,0x000001e6, + 0x0000001e,0x0004002b,0x00000021,0x000001e9,0x00000008,0x0004002b,0x00000021,0x000001ef, + 0x33800000,0x0004002b,0x00000021,0x000001f6,0x8da6b343,0x0004002b,0x00000021,0x000001f9, + 0xd8163841,0x0004002b,0x00000021,0x000001fd,0x9e3779b9,0x0004002b,0x00000021,0x00000200, + 0x243f6a88,0x0004002b,0x00000021,0x0000020c,0x00000016,0x0004002b,0x00000021,0x00000212, + 0x2c9277b5,0x0004002b,0x00000021,0x00000214,0xac564b05,0x0004002b,0x00000021,0x0000021a, + 0xfa6dc5f9,0x0004002b,0x00000021,0x0000021c,0x4712a88e,0x0004002b,0x00000021,0x00000222, + 0xcaa5b80d,0x0004002b,0x00000021,0x00000224,0x21dd796b,0x0004002b,0x00000021,0x0000022a, + 0x83232c31,0x0004002b,0x00000021,0x0000022c,0x3463e0ac,0x0004002b,0x00000021,0x00000233, + 0x3f317218,0x0004002b,0x00000006,0x00000236,0xc0000000,0x0004002b,0x00000021,0x00000241, + 0x40c90fdb,0x00040017,0x0000025e,0x00000021,0x00000002,0x00040020,0x0000025f,0x00000007, + 0x0000025e,0x00040017,0x00000261,0x00000021,0x00000003,0x00040020,0x00000262,0x00000001, + 0x00000261,0x0004003b,0x00000262,0x00000263,0x00000001,0x00040020,0x00000277,0x00000007, + 0x0000009e,0x0005002c,0x000000aa,0x000002aa,0x000000b2,0x000000b2,0x00090019,0x000002b6, + 0x00000006,0x00000001,0x00000000,0x00000000,0x00000000,0x00000002,0x00000004,0x00040020, + 0x000002b7,0x00000000,0x000002b6,0x0004003b,0x000002b7,0x000002b8,0x00000000,0x0004002b, + 0x0000009e,0x000002c0,0x00000004,0x0003001d,0x000002e3,0x000000c4,0x0003001e,0x000002e4, + 0x000002e3,0x00040020,0x000002e5,0x0000000c,0x000002e4,0x0004003b,0x000002e5,0x000002e6, + 0x0000000c,0x00040020,0x000002ee,0x0000000c,0x000000c4,0x0004002b,0x0000009e,0x00000300, + 0x00000008,0x00040020,0x00000301,0x00000009,0x00000006,0x0004002b,0x00000006,0x00000304, + 0x43000000,0x0004002b,0x0000009e,0x00000306,0x00000009,0x00040020,0x0000030d,0x00000007, + 0x00000018,0x0004002b,0x0000009e,0x0000030f,0x00000007,0x0004002b,0x00000021,0x00000314, + 0x00000003,0x0004002b,0x0000009e,0x0000031b,0x0000000a,0x0004002b,0x0000009e,0x00000325, + 0x0000000b,0x0004002b,0x00000006,0x00000333,0xbf800000,0x0003001d,0x00000343,0x00000006, + 0x0003001e,0x00000344,0x00000343,0x00040020,0x00000345,0x0000000c,0x00000344,0x0004003b, + 0x00000345,0x00000346,0x0000000c,0x0004003b,0x000002b7,0x00000347,0x00000000,0x00090019, + 0x00000348,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000,0x00000002,0x00000002, + 0x00040020,0x00000349,0x00000000,0x00000348,0x0004003b,0x00000349,0x0000034a,0x00000000, + 0x0006002c,0x00000261,0x0000034b,0x000001e9,0x000001e9,0x00000062,0x00050036,0x00000002, + 0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x0000025f,0x00000260, + 0x00000007,0x0004003b,0x00000277,0x00000278,0x00000007,0x0004003b,0x00000277,0x0000027e, + 0x00000007,0x0004003b,0x00000277,0x0000028f,0x00000007,0x0004003b,0x00000277,0x00000295, + 0x00000007,0x0004003b,0x000000ab,0x000002a6,0x00000007,0x0004003b,0x0000000d,0x000002b5, + 0x00000007,0x0004003b,0x0000000d,0x000002bc,0x00000007,0x0004003b,0x0000000d,0x000002bf, + 0x00000007,0x0004003b,0x00000022,0x000002c1,0x00000007,0x0004003b,0x00000022,0x000002c4, + 0x00000007,0x0004003b,0x00000022,0x000002c7,0x00000007,0x0004003b,0x0000000d,0x000002cb, + 0x00000007,0x0004003b,0x00000013,0x000002cf,0x00000007,0x0004003b,0x00000013,0x000002d5, + 0x00000007,0x0004003b,0x0000000d,0x000002d7,0x00000007,0x0004003b,0x00000022,0x000002d9, + 0x00000007,0x0004003b,0x00000007,0x00000307,0x00000007,0x0004003b,0x0000030d,0x0000030e, + 0x00000007,0x0004003b,0x00000007,0x00000317,0x00000007,0x0004003b,0x00000007,0x0000031e, + 0x00000007,0x0004003b,0x00000007,0x00000322,0x00000007,0x0004003b,0x00000007,0x00000329, + 0x00000007,0x0004003b,0x00000007,0x00000334,0x00000007,0x0004003b,0x00000007,0x00000338, + 0x00000007,0x0004003b,0x00000007,0x0000033e,0x00000007,0x0004003d,0x00000261,0x00000264, + 0x00000263,0x0007004f,0x0000025e,0x00000265,0x00000264,0x00000264,0x00000000,0x00000001, + 0x0003003e,0x00000260,0x00000265,0x00050041,0x00000022,0x00000266,0x00000260,0x00000073, + 0x0004003d,0x00000021,0x00000267,0x00000266,0x00050041,0x000000a0,0x00000268,0x0000009d, + 0x000000b2,0x0004003d,0x00000021,0x00000269,0x00000268,0x000500ae,0x00000018,0x0000026a, + 0x00000267,0x00000269,0x000400a8,0x00000018,0x0000026b,0x0000026a,0x000300f7,0x0000026d, + 0x00000000,0x000400fa,0x0000026b,0x0000026c,0x0000026d,0x000200f8,0x0000026c,0x00050041, + 0x00000022,0x0000026e,0x00000260,0x00000062,0x0004003d,0x00000021,0x0000026f,0x0000026e, + 0x00050041,0x000000a0,0x00000270,0x0000009d,0x000000bc,0x0004003d,0x00000021,0x00000271, + 0x00000270,0x000500ae,0x00000018,0x00000272,0x0000026f,0x00000271,0x000200f9,0x0000026d, + 0x000200f8,0x0000026d,0x000700f5,0x00000018,0x00000273,0x0000026a,0x00000005,0x00000272, + 0x0000026c,0x000300f7,0x00000275,0x00000000,0x000400fa,0x00000273,0x00000274,0x00000275, + 0x000200f8,0x00000274,0x000100fd,0x000200f8,0x00000275,0x00050041,0x00000022,0x00000279, + 0x00000260,0x00000073,0x0004003d,0x00000021,0x0000027a,0x00000279,0x00050041,0x000000a0, + 0x0000027b,0x0000009d,0x0000009f,0x0004003d,0x00000021,0x0000027c,0x0000027b,0x000500b0, + 0x00000018,0x0000027d,0x0000027a,0x0000027c,0x000300f7,0x00000280,0x00000000,0x000400fa, + 0x0000027d,0x0000027f,0x00000284,0x000200f8,0x0000027f,0x00050041,0x00000022,0x00000281, + 0x00000260,0x00000073,0x0004003d,0x00000021,0x00000282,0x00000281,0x0004007c,0x0000009e, + 0x00000283,0x00000282,0x0003003e,0x0000027e,0x00000283,0x000200f9,0x00000280,0x000200f8, + 0x00000284,0x00050041,0x000000a0,0x00000285,0x0000009d,0x0000009f,0x0004003d,0x00000021, + 0x00000286,0x00000285,0x0004007c,0x0000009e,0x00000287,0x00000286,0x00050084,0x0000009e, + 0x00000288,0x0000009f,0x00000287,0x00050041,0x00000022,0x00000289,0x00000260,0x00000073, + 0x0004003d,0x00000021,0x0000028a,0x00000289,0x0004007c,0x0000009e,0x0000028b,0x0000028a, + 0x00050082,0x0000009e,0x0000028c,0x00000288,0x0000028b,0x00050082,0x0000009e,0x0000028d, + 0x0000028c,0x0000009f,0x0003003e,0x0000027e,0x0000028d,0x000200f9,0x00000280,0x000200f8, + 0x00000280,0x0004003d,0x0000009e,0x0000028e,0x0000027e,0x0003003e,0x00000278,0x0000028e, + 0x00050041,0x00000022,0x00000290,0x00000260,0x00000062,0x0004003d,0x00000021,0x00000291, + 0x00000290,0x00050041,0x000000a0,0x00000292,0x0000009d,0x000000a4,0x0004003d,0x00000021, + 0x00000293,0x00000292,0x000500b0,0x00000018,0x00000294,0x00000291,0x00000293,0x000300f7, + 0x00000297,0x00000000,0x000400fa,0x00000294,0x00000296,0x0000029b,0x000200f8,0x00000296, + 0x00050041,0x00000022,0x00000298,0x00000260,0x00000062,0x0004003d,0x00000021,0x00000299, + 0x00000298,0x0004007c,0x0000009e,0x0000029a,0x00000299,0x0003003e,0x00000295,0x0000029a, + 0x000200f9,0x00000297,0x000200f8,0x0000029b,0x00050041,0x000000a0,0x0000029c,0x0000009d, + 0x000000a4,0x0004003d,0x00000021,0x0000029d,0x0000029c,0x0004007c,0x0000009e,0x0000029e, + 0x0000029d,0x00050084,0x0000009e,0x0000029f,0x0000009f,0x0000029e,0x00050041,0x00000022, + 0x000002a0,0x00000260,0x00000062,0x0004003d,0x00000021,0x000002a1,0x000002a0,0x0004007c, + 0x0000009e,0x000002a2,0x000002a1,0x00050082,0x0000009e,0x000002a3,0x0000029f,0x000002a2, + 0x00050082,0x0000009e,0x000002a4,0x000002a3,0x0000009f,0x0003003e,0x00000295,0x000002a4, + 0x000200f9,0x00000297,0x000200f8,0x00000297,0x0004003d,0x0000009e,0x000002a5,0x00000295, + 0x0003003e,0x0000028f,0x000002a5,0x0004003d,0x0000009e,0x000002a7,0x00000278,0x0004003d, + 0x0000009e,0x000002a8,0x0000028f,0x00050050,0x000000aa,0x000002a9,0x000002a7,0x000002a8, + 0x00050041,0x000000a0,0x000002ab,0x0000009d,0x0000009f,0x0004003d,0x00000021,0x000002ac, + 0x000002ab,0x0004007c,0x0000009e,0x000002ad,0x000002ac,0x00050041,0x000000a0,0x000002ae, + 0x0000009d,0x000000a4,0x0004003d,0x00000021,0x000002af,0x000002ae,0x0004007c,0x0000009e, + 0x000002b0,0x000002af,0x00050050,0x000000aa,0x000002b1,0x000002ad,0x000002b0,0x00050050, + 0x000000aa,0x000002b2,0x000000bc,0x000000bc,0x00050082,0x000000aa,0x000002b3,0x000002b1, + 0x000002b2,0x0008000c,0x000000aa,0x000002b4,0x00000001,0x0000002d,0x000002a9,0x000002aa, + 0x000002b3,0x0003003e,0x000002a6,0x000002b4,0x0004003d,0x000002b6,0x000002b9,0x000002b8, + 0x0004003d,0x000000aa,0x000002ba,0x000002a6,0x00050062,0x000000c4,0x000002bb,0x000002b9, + 0x000002ba,0x0008004f,0x0000000c,0x000002bd,0x000002bb,0x000002bb,0x00000000,0x00000001, + 0x00000002,0x0003003e,0x000002bc,0x000002bd,0x00050039,0x0000000c,0x000002be,0x00000010, + 0x000002bc,0x0003003e,0x000002b5,0x000002be,0x00050041,0x00000022,0x000002c2,0x00000260, + 0x00000073,0x0004003d,0x00000021,0x000002c3,0x000002c2,0x0003003e,0x000002c1,0x000002c3, + 0x00050041,0x00000022,0x000002c5,0x00000260,0x00000062,0x0004003d,0x00000021,0x000002c6, + 0x000002c5,0x0003003e,0x000002c4,0x000002c6,0x00050041,0x000000a0,0x000002c8,0x0000009d, + 0x000002c0,0x0004003d,0x00000021,0x000002c9,0x000002c8,0x0003003e,0x000002c7,0x000002c9, + 0x00070039,0x0000000c,0x000002ca,0x0000002b,0x000002c1,0x000002c4,0x000002c7,0x0003003e, + 0x000002bf,0x000002ca,0x0004003d,0x0000000c,0x000002cc,0x000002b5,0x0003003e,0x000002cb, + 0x000002cc,0x0004003d,0x000000aa,0x000002cd,0x000002a6,0x0004006f,0x00000012,0x000002ce, + 0x000002cd,0x0003003e,0x000002cf,0x000002ce,0x00050039,0x00000018,0x000002d0,0x0000001b, + 0x000002cf,0x000300f7,0x000002d2,0x00000000,0x000400fa,0x000002d0,0x000002d1,0x000002d2, + 0x000200f8,0x000002d1,0x0004003d,0x000000aa,0x000002d3,0x000002a6,0x0004006f,0x00000012, + 0x000002d4,0x000002d3,0x0003003e,0x000002d5,0x000002d4,0x00050039,0x0000000c,0x000002d6, + 0x0000001f,0x000002d5,0x0003003e,0x000002d7,0x000002d6,0x00050039,0x0000000c,0x000002d8, + 0x00000010,0x000002d7,0x0003003e,0x000002cb,0x000002d8,0x000200f9,0x000002d2,0x000200f8, + 0x000002d2,0x00050041,0x00000022,0x000002da,0x00000260,0x00000062,0x0004003d,0x00000021, + 0x000002db,0x000002da,0x00050041,0x000000a0,0x000002dc,0x0000009d,0x000000b2,0x0004003d, + 0x00000021,0x000002dd,0x000002dc,0x00050084,0x00000021,0x000002de,0x000002db,0x000002dd, + 0x00050041,0x00000022,0x000002df,0x00000260,0x00000073,0x0004003d,0x00000021,0x000002e0, + 0x000002df,0x00050080,0x00000021,0x000002e1,0x000002de,0x000002e0,0x00050084,0x00000021, + 0x000002e2,0x000002e1,0x000001dc,0x0003003e,0x000002d9,0x000002e2,0x0004003d,0x00000021, + 0x000002e7,0x000002d9,0x00050080,0x00000021,0x000002e8,0x000002e7,0x00000073,0x0004003d, + 0x0000000c,0x000002e9,0x000002bf,0x00050051,0x00000006,0x000002ea,0x000002e9,0x00000000, + 0x00050051,0x00000006,0x000002eb,0x000002e9,0x00000001,0x00050051,0x00000006,0x000002ec, + 0x000002e9,0x00000002,0x00070050,0x000000c4,0x000002ed,0x000002ea,0x000002eb,0x000002ec, + 0x000000ec,0x00060041,0x000002ee,0x000002ef,0x000002e6,0x000000b2,0x000002e8,0x0003003e, + 0x000002ef,0x000002ed,0x0004003d,0x00000021,0x000002f0,0x000002d9,0x00050080,0x00000021, + 0x000002f1,0x000002f0,0x00000062,0x0004003d,0x0000000c,0x000002f2,0x000002b5,0x00050041, + 0x00000007,0x000002f3,0x000002cb,0x00000073,0x0004003d,0x00000006,0x000002f4,0x000002f3, + 0x00050051,0x00000006,0x000002f5,0x000002f2,0x00000000,0x00050051,0x00000006,0x000002f6, + 0x000002f2,0x00000001,0x00050051,0x00000006,0x000002f7,0x000002f2,0x00000002,0x00070050, + 0x000000c4,0x000002f8,0x000002f5,0x000002f6,0x000002f7,0x000002f4,0x00060041,0x000002ee, + 0x000002f9,0x000002e6,0x000000b2,0x000002f1,0x0003003e,0x000002f9,0x000002f8,0x0004003d, + 0x00000021,0x000002fa,0x000002d9,0x00050080,0x00000021,0x000002fb,0x000002fa,0x0000008a, + 0x00050041,0x00000007,0x000002fc,0x000002cb,0x00000062,0x0004003d,0x00000006,0x000002fd, + 0x000002fc,0x00050041,0x00000007,0x000002fe,0x000002cb,0x0000008a,0x0004003d,0x00000006, + 0x000002ff,0x000002fe,0x00050041,0x00000301,0x00000302,0x0000009d,0x00000300,0x0004003d, + 0x00000006,0x00000303,0x00000302,0x00050088,0x00000006,0x00000305,0x00000303,0x00000304, + 0x00050041,0x00000301,0x00000308,0x0000009d,0x00000306,0x0004003d,0x00000006,0x00000309, + 0x00000308,0x0003003e,0x00000307,0x00000309,0x00050039,0x00000006,0x0000030a,0x0000000a, + 0x00000307,0x00070050,0x000000c4,0x0000030b,0x000002fd,0x000002ff,0x00000305,0x0000030a, + 0x00060041,0x000002ee,0x0000030c,0x000002e6,0x000000b2,0x000002fb,0x0003003e,0x0000030c, + 0x0000030b,0x00050041,0x000000a0,0x00000310,0x0000009d,0x0000030f,0x0004003d,0x00000021, + 0x00000311,0x00000310,0x000500ab,0x00000018,0x00000312,0x00000311,0x00000073,0x0003003e, + 0x0000030e,0x00000312,0x0004003d,0x00000021,0x00000313,0x000002d9,0x00050080,0x00000021, + 0x00000315,0x00000313,0x00000314,0x0004003d,0x00000018,0x00000316,0x0000030e,0x000300f7, + 0x00000319,0x00000000,0x000400fa,0x00000316,0x00000318,0x0000031a,0x000200f8,0x00000318, + 0x0003003e,0x00000317,0x000000ec,0x000200f9,0x00000319,0x000200f8,0x0000031a,0x00050041, + 0x00000301,0x0000031c,0x0000009d,0x0000031b,0x0004003d,0x00000006,0x0000031d,0x0000031c, + 0x0003003e,0x00000317,0x0000031d,0x000200f9,0x00000319,0x000200f8,0x00000319,0x0004003d, + 0x00000006,0x0000031f,0x00000317,0x0003003e,0x0000031e,0x0000031f,0x00050039,0x00000006, + 0x00000320,0x0000000a,0x0000031e,0x0004003d,0x00000018,0x00000321,0x0000030e,0x000300f7, + 0x00000324,0x00000000,0x000400fa,0x00000321,0x00000323,0x00000332,0x000200f8,0x00000323, + 0x00050041,0x00000301,0x00000326,0x0000009d,0x00000325,0x0004003d,0x00000006,0x00000327, + 0x00000326,0x000500b8,0x00000018,0x00000328,0x00000327,0x000000e4,0x000300f7,0x0000032b, + 0x00000000,0x000400fa,0x00000328,0x0000032a,0x0000032e,0x000200f8,0x0000032a,0x00050041, + 0x00000301,0x0000032c,0x0000009d,0x0000031b,0x0004003d,0x00000006,0x0000032d,0x0000032c, + 0x0003003e,0x00000329,0x0000032d,0x000200f9,0x0000032b,0x000200f8,0x0000032e,0x00050041, + 0x00000301,0x0000032f,0x0000009d,0x00000325,0x0004003d,0x00000006,0x00000330,0x0000032f, + 0x0003003e,0x00000329,0x00000330,0x000200f9,0x0000032b,0x000200f8,0x0000032b,0x0004003d, + 0x00000006,0x00000331,0x00000329,0x0003003e,0x00000322,0x00000331,0x000200f9,0x00000324, + 0x000200f8,0x00000332,0x0003003e,0x00000322,0x00000333,0x000200f9,0x00000324,0x000200f8, + 0x00000324,0x0004003d,0x00000006,0x00000335,0x00000322,0x0003003e,0x00000334,0x00000335, + 0x00050039,0x00000006,0x00000336,0x0000000a,0x00000334,0x0004003d,0x00000018,0x00000337, + 0x0000030e,0x000300f7,0x0000033a,0x00000000,0x000400fa,0x00000337,0x00000339,0x0000033d, + 0x000200f8,0x00000339,0x00050041,0x00000301,0x0000033b,0x0000009d,0x0000031b,0x0004003d, + 0x00000006,0x0000033c,0x0000033b,0x0003003e,0x00000338,0x0000033c,0x000200f9,0x0000033a, + 0x000200f8,0x0000033d,0x0003003e,0x00000338,0x00000333,0x000200f9,0x0000033a,0x000200f8, + 0x0000033a,0x0004003d,0x00000006,0x0000033f,0x00000338,0x0003003e,0x0000033e,0x0000033f, + 0x00050039,0x00000006,0x00000340,0x0000000a,0x0000033e,0x00070050,0x000000c4,0x00000341, + 0x00000320,0x00000336,0x00000340,0x000000e4,0x00060041,0x000002ee,0x00000342,0x000002e6, + 0x000000b2,0x00000315,0x0003003e,0x00000342,0x00000341,0x000100fd,0x00010038,0x00050036, + 0x00000006,0x0000000a,0x00000000,0x00000008,0x00030037,0x00000007,0x00000009,0x000200f8, + 0x0000000b,0x0004003b,0x00000022,0x0000002d,0x00000007,0x0004003b,0x00000022,0x00000030, + 0x00000007,0x0004003b,0x00000022,0x00000034,0x00000007,0x0004003b,0x00000007,0x0000004d, + 0x00000007,0x0004003b,0x00000022,0x0000005e,0x00000007,0x0004003b,0x00000022,0x00000064, + 0x00000007,0x0004003d,0x00000006,0x0000002e,0x00000009,0x0004007c,0x00000021,0x0000002f, + 0x0000002e,0x0003003e,0x0000002d,0x0000002f,0x0004003d,0x00000021,0x00000031,0x0000002d, + 0x000500c7,0x00000021,0x00000033,0x00000031,0x00000032,0x0003003e,0x00000030,0x00000033, + 0x0004003d,0x00000021,0x00000035,0x0000002d,0x000500c7,0x00000021,0x00000037,0x00000035, + 0x00000036,0x0003003e,0x00000034,0x00000037,0x0004003d,0x00000021,0x00000038,0x00000034, + 0x000500ae,0x00000018,0x0000003a,0x00000038,0x00000039,0x000300f7,0x0000003c,0x00000000, + 0x000400fa,0x0000003a,0x0000003b,0x0000003c,0x000200f8,0x0000003b,0x0004003d,0x00000006, + 0x0000003d,0x00000009,0x000200fe,0x0000003d,0x000200f8,0x0000003c,0x0004003d,0x00000021, + 0x0000003f,0x00000034,0x000500ae,0x00000018,0x00000041,0x0000003f,0x00000040,0x000300f7, + 0x00000043,0x00000000,0x000400fa,0x00000041,0x00000042,0x00000043,0x000200f8,0x00000042, + 0x0004003d,0x00000021,0x00000044,0x00000030,0x000500c5,0x00000021,0x00000045,0x00000044, + 0x00000039,0x0004007c,0x00000006,0x00000046,0x00000045,0x000200fe,0x00000046,0x000200f8, + 0x00000043,0x0004003d,0x00000021,0x00000048,0x00000034,0x000500b0,0x00000018,0x0000004a, + 0x00000048,0x00000049,0x000300f7,0x0000004c,0x00000000,0x000400fa,0x0000004a,0x0000004b, + 0x0000004c,0x000200f8,0x0000004b,0x0004003d,0x00000021,0x0000004e,0x00000034,0x0004007c, + 0x00000006,0x0000004f,0x0000004e,0x00050085,0x00000006,0x00000051,0x0000004f,0x00000050, + 0x0006000c,0x00000006,0x00000052,0x00000001,0x00000002,0x00000051,0x0003003e,0x0000004d, + 0x00000052,0x0004003d,0x00000021,0x00000053,0x00000030,0x0004007c,0x00000006,0x00000054, + 0x00000053,0x0004003d,0x00000021,0x00000055,0x00000030,0x0004003d,0x00000006,0x00000056, + 0x0000004d,0x00050085,0x00000006,0x00000058,0x00000056,0x00000057,0x0004007c,0x00000021, + 0x00000059,0x00000058,0x000500c5,0x00000021,0x0000005a,0x00000055,0x00000059,0x0004007c, + 0x00000006,0x0000005b,0x0000005a,0x00050081,0x00000006,0x0000005c,0x00000054,0x0000005b, + 0x000200fe,0x0000005c,0x000200f8,0x0000004c,0x0004003d,0x00000021,0x0000005f,0x00000034, + 0x000500c2,0x00000021,0x00000061,0x0000005f,0x00000060,0x000500c7,0x00000021,0x00000063, + 0x00000061,0x00000062,0x0003003e,0x0000005e,0x00000063,0x0004003d,0x00000021,0x00000065, + 0x00000034,0x00050080,0x00000021,0x00000067,0x00000065,0x00000066,0x0004003d,0x00000021, + 0x00000068,0x0000005e,0x00050080,0x00000021,0x00000069,0x00000067,0x00000068,0x000500c7, + 0x00000021,0x0000006b,0x00000069,0x0000006a,0x0003003e,0x00000064,0x0000006b,0x0004003d, + 0x00000021,0x0000006c,0x00000030,0x0004003d,0x00000021,0x0000006d,0x00000064,0x000500c5, + 0x00000021,0x0000006e,0x0000006c,0x0000006d,0x0004007c,0x00000006,0x0000006f,0x0000006e, + 0x000200fe,0x0000006f,0x00010038,0x00050036,0x0000000c,0x00000010,0x00000000,0x0000000e, + 0x00030037,0x0000000d,0x0000000f,0x000200f8,0x00000011,0x0004003b,0x00000007,0x00000072, + 0x00000007,0x0004003b,0x00000007,0x00000079,0x00000007,0x0004003b,0x00000007,0x0000007d, + 0x00000007,0x0004003b,0x00000007,0x0000007f,0x00000007,0x0004003b,0x00000007,0x00000084, + 0x00000007,0x0004003b,0x00000007,0x00000087,0x00000007,0x0004003b,0x00000007,0x00000089, + 0x00000007,0x0004003b,0x00000007,0x0000008f,0x00000007,0x0004003b,0x00000007,0x00000092, + 0x00000007,0x00050041,0x00000007,0x00000074,0x0000000f,0x00000073,0x0004003d,0x00000006, + 0x00000075,0x00000074,0x0003003e,0x00000072,0x00000075,0x00050039,0x00000006,0x00000076, + 0x0000000a,0x00000072,0x00050083,0x00000006,0x00000078,0x00000076,0x00000077,0x0003003e, + 0x00000079,0x00000078,0x00050039,0x00000006,0x0000007a,0x0000000a,0x00000079,0x00050085, + 0x00000006,0x0000007c,0x0000007a,0x0000007b,0x0003003e,0x0000007d,0x0000007c,0x00050039, + 0x00000006,0x0000007e,0x0000000a,0x0000007d,0x00050041,0x00000007,0x00000080,0x0000000f, + 0x00000062,0x0004003d,0x00000006,0x00000081,0x00000080,0x0003003e,0x0000007f,0x00000081, + 0x00050039,0x00000006,0x00000082,0x0000000a,0x0000007f,0x00050083,0x00000006,0x00000083, + 0x00000082,0x00000077,0x0003003e,0x00000084,0x00000083,0x00050039,0x00000006,0x00000085, + 0x0000000a,0x00000084,0x00050085,0x00000006,0x00000086,0x00000085,0x0000007b,0x0003003e, + 0x00000087,0x00000086,0x00050039,0x00000006,0x00000088,0x0000000a,0x00000087,0x00050041, + 0x00000007,0x0000008b,0x0000000f,0x0000008a,0x0004003d,0x00000006,0x0000008c,0x0000008b, + 0x0003003e,0x00000089,0x0000008c,0x00050039,0x00000006,0x0000008d,0x0000000a,0x00000089, + 0x00050083,0x00000006,0x0000008e,0x0000008d,0x00000077,0x0003003e,0x0000008f,0x0000008e, + 0x00050039,0x00000006,0x00000090,0x0000000a,0x0000008f,0x00050085,0x00000006,0x00000091, + 0x00000090,0x0000007b,0x0003003e,0x00000092,0x00000091,0x00050039,0x00000006,0x00000093, + 0x0000000a,0x00000092,0x00060050,0x0000000c,0x00000094,0x0000007e,0x00000088,0x00000093, + 0x000200fe,0x00000094,0x00010038,0x00050036,0x00000012,0x00000016,0x00000000,0x00000014, + 0x00030037,0x00000013,0x00000015,0x000200f8,0x00000017,0x0004003b,0x00000013,0x00000097, + 0x00000007,0x0004003b,0x000000ab,0x000000ac,0x00000007,0x0004003b,0x000000ab,0x000000b5, + 0x00000007,0x0004003d,0x00000012,0x00000098,0x00000015,0x00050050,0x00000012,0x00000099, + 0x00000077,0x00000077,0x00050081,0x00000012,0x0000009a,0x00000098,0x00000099,0x00050041, + 0x000000a0,0x000000a1,0x0000009d,0x0000009f,0x0004003d,0x00000021,0x000000a2,0x000000a1, + 0x00040070,0x00000006,0x000000a3,0x000000a2,0x00050041,0x000000a0,0x000000a5,0x0000009d, + 0x000000a4,0x0004003d,0x00000021,0x000000a6,0x000000a5,0x00040070,0x00000006,0x000000a7, + 0x000000a6,0x00050050,0x00000012,0x000000a8,0x000000a3,0x000000a7,0x00050088,0x00000012, + 0x000000a9,0x0000009a,0x000000a8,0x0003003e,0x00000097,0x000000a9,0x0004003d,0x000000ae, + 0x000000b1,0x000000b0,0x00040064,0x000000ad,0x000000b3,0x000000b1,0x00050067,0x000000aa, + 0x000000b4,0x000000b3,0x000000b2,0x0003003e,0x000000ac,0x000000b4,0x0004003d,0x00000012, + 0x000000b6,0x00000097,0x0004003d,0x000000aa,0x000000b7,0x000000ac,0x0004006f,0x00000012, + 0x000000b8,0x000000b7,0x00050085,0x00000012,0x000000b9,0x000000b6,0x000000b8,0x0004006e, + 0x000000aa,0x000000ba,0x000000b9,0x0004003d,0x000000aa,0x000000bb,0x000000ac,0x00050050, + 0x000000aa,0x000000bd,0x000000bc,0x000000bc,0x00050082,0x000000aa,0x000000be,0x000000bb, + 0x000000bd,0x0007000c,0x000000aa,0x000000bf,0x00000001,0x00000027,0x000000ba,0x000000be, + 0x0003003e,0x000000b5,0x000000bf,0x0004003d,0x00000012,0x000000c0,0x00000097,0x0004003d, + 0x000000ae,0x000000c1,0x000000b0,0x0004003d,0x000000aa,0x000000c2,0x000000b5,0x00040064, + 0x000000ad,0x000000c3,0x000000c1,0x0007005f,0x000000c4,0x000000c5,0x000000c3,0x000000c2, + 0x00000002,0x000000b2,0x0007004f,0x00000012,0x000000c6,0x000000c5,0x000000c5,0x00000000, + 0x00000001,0x00050041,0x000000c8,0x000000c9,0x0000009d,0x000000c7,0x0004003d,0x00000012, + 0x000000ca,0x000000c9,0x00050088,0x00000012,0x000000cb,0x000000c6,0x000000ca,0x00050081, + 0x00000012,0x000000cc,0x000000c0,0x000000cb,0x000200fe,0x000000cc,0x00010038,0x00050036, + 0x00000018,0x0000001b,0x00000000,0x00000019,0x00030037,0x00000013,0x0000001a,0x000200f8, + 0x0000001c,0x0004003b,0x00000013,0x000000df,0x00000007,0x0004003b,0x00000013,0x000000e0, + 0x00000007,0x00050041,0x000000a0,0x000000d0,0x0000009d,0x000000cf,0x0004003d,0x00000021, + 0x000000d1,0x000000d0,0x000500aa,0x00000018,0x000000d2,0x000000d1,0x00000073,0x000300f7, + 0x000000d4,0x00000000,0x000400fa,0x000000d2,0x000000d3,0x000000d4,0x000200f8,0x000000d3, + 0x000200fe,0x000000d5,0x000200f8,0x000000d4,0x00050041,0x000000a0,0x000000d8,0x0000009d, + 0x000000d7,0x0004003d,0x00000021,0x000000d9,0x000000d8,0x000500aa,0x00000018,0x000000da, + 0x000000d9,0x00000073,0x000300f7,0x000000dc,0x00000000,0x000400fa,0x000000da,0x000000db, + 0x000000dc,0x000200f8,0x000000db,0x000200fe,0x000000dd,0x000200f8,0x000000dc,0x0004003d, + 0x00000012,0x000000e1,0x0000001a,0x0003003e,0x000000e0,0x000000e1,0x00050039,0x00000012, + 0x000000e2,0x00000016,0x000000e0,0x0003003e,0x000000df,0x000000e2,0x0004003d,0x00000012, + 0x000000e3,0x000000df,0x000500be,0x000000e6,0x000000e7,0x000000e3,0x000000e5,0x0004009b, + 0x00000018,0x000000e8,0x000000e7,0x000300f7,0x000000ea,0x00000000,0x000400fa,0x000000e8, + 0x000000e9,0x000000ea,0x000200f8,0x000000e9,0x0004003d,0x00000012,0x000000eb,0x000000df, + 0x000500bc,0x000000e6,0x000000ee,0x000000eb,0x000000ed,0x0004009b,0x00000018,0x000000ef, + 0x000000ee,0x000200f9,0x000000ea,0x000200f8,0x000000ea,0x000700f5,0x00000018,0x000000f0, + 0x000000e8,0x000000dc,0x000000ef,0x000000e9,0x000200fe,0x000000f0,0x00010038,0x00050036, + 0x0000000c,0x0000001f,0x00000000,0x0000001d,0x00030037,0x00000013,0x0000001e,0x000200f8, + 0x00000020,0x0004003b,0x00000013,0x000000f3,0x00000007,0x0004003b,0x00000013,0x000000fb, + 0x00000007,0x0004003b,0x00000013,0x000000ff,0x00000007,0x0004003b,0x00000013,0x00000102, + 0x00000007,0x0004003b,0x00000013,0x0000010c,0x00000007,0x0004003b,0x00000013,0x00000110, + 0x00000007,0x0004003b,0x00000013,0x00000117,0x00000007,0x0004003b,0x00000013,0x0000011c, + 0x00000007,0x0004003b,0x00000013,0x00000120,0x00000007,0x0004003b,0x00000013,0x00000124, + 0x00000007,0x0004003b,0x00000013,0x0000012c,0x00000007,0x0004003b,0x00000013,0x00000136, + 0x00000007,0x0004003b,0x00000013,0x0000013b,0x00000007,0x0004003b,0x00000013,0x00000143, + 0x00000007,0x0004003b,0x00000013,0x00000147,0x00000007,0x0004003b,0x00000013,0x00000152, + 0x00000007,0x0004003b,0x00000013,0x0000015e,0x00000007,0x0004003b,0x0000000d,0x00000169, + 0x00000007,0x0004003b,0x0000000d,0x00000173,0x00000007,0x0004003b,0x0000000d,0x0000017c, + 0x00000007,0x0004003b,0x0000000d,0x00000181,0x00000007,0x0004003b,0x0000000d,0x0000018a, + 0x00000007,0x0004003b,0x00000007,0x00000193,0x00000007,0x0004003b,0x00000007,0x00000199, + 0x00000007,0x0004003b,0x00000007,0x0000019f,0x00000007,0x0004003b,0x00000007,0x000001a5, + 0x00000007,0x0004003b,0x00000007,0x000001ab,0x00000007,0x0004003b,0x0000000d,0x000001b1, + 0x00000007,0x00050041,0x000000a0,0x000000f4,0x0000009d,0x0000009f,0x0004003d,0x00000021, + 0x000000f5,0x000000f4,0x00040070,0x00000006,0x000000f6,0x000000f5,0x00050041,0x000000a0, + 0x000000f7,0x0000009d,0x000000a4,0x0004003d,0x00000021,0x000000f8,0x000000f7,0x00040070, + 0x00000006,0x000000f9,0x000000f8,0x00050050,0x00000012,0x000000fa,0x000000f6,0x000000f9, + 0x0003003e,0x000000f3,0x000000fa,0x00050041,0x000000a0,0x000000fc,0x0000009d,0x000000d7, + 0x0004003d,0x00000021,0x000000fd,0x000000fc,0x000500ab,0x00000018,0x000000fe,0x000000fd, + 0x00000073,0x000300f7,0x00000101,0x00000000,0x000400fa,0x000000fe,0x00000100,0x00000105, + 0x000200f8,0x00000100,0x0004003d,0x00000012,0x00000103,0x0000001e,0x0003003e,0x00000102, + 0x00000103,0x00050039,0x00000012,0x00000104,0x00000016,0x00000102,0x0003003e,0x000000ff, + 0x00000104,0x000200f9,0x00000101,0x000200f8,0x00000105,0x0004003d,0x00000012,0x00000106, + 0x0000001e,0x00050050,0x00000012,0x00000107,0x00000077,0x00000077,0x00050081,0x00000012, + 0x00000108,0x00000106,0x00000107,0x0004003d,0x00000012,0x00000109,0x000000f3,0x00050088, + 0x00000012,0x0000010a,0x00000108,0x00000109,0x0003003e,0x000000ff,0x0000010a,0x000200f9, + 0x00000101,0x000200f8,0x00000101,0x0004003d,0x00000012,0x0000010b,0x000000ff,0x0003003e, + 0x000000fb,0x0000010b,0x0004003d,0x00000012,0x0000010d,0x000000fb,0x0004003d,0x00000012, + 0x0000010e,0x000000f3,0x00050085,0x00000012,0x0000010f,0x0000010d,0x0000010e,0x0003003e, + 0x0000010c,0x0000010f,0x0004003d,0x00000012,0x00000111,0x0000010c,0x00050050,0x00000012, + 0x00000112,0x00000077,0x00000077,0x00050083,0x00000012,0x00000113,0x00000111,0x00000112, + 0x0006000c,0x00000012,0x00000114,0x00000001,0x00000008,0x00000113,0x00050050,0x00000012, + 0x00000115,0x00000077,0x00000077,0x00050081,0x00000012,0x00000116,0x00000114,0x00000115, + 0x0003003e,0x00000110,0x00000116,0x0004003d,0x00000012,0x00000118,0x0000010c,0x0004003d, + 0x00000012,0x00000119,0x00000110,0x00050083,0x00000012,0x0000011a,0x00000118,0x00000119, + 0x0008000c,0x00000012,0x0000011b,0x00000001,0x0000002b,0x0000011a,0x000000e5,0x000000ed, + 0x0003003e,0x00000117,0x0000011b,0x0004003d,0x00000012,0x0000011d,0x00000117,0x0004003d, + 0x00000012,0x0000011e,0x00000117,0x00050085,0x00000012,0x0000011f,0x0000011d,0x0000011e, + 0x0003003e,0x0000011c,0x0000011f,0x0004003d,0x00000012,0x00000121,0x00000117,0x0004003d, + 0x00000012,0x00000122,0x0000011c,0x00050085,0x00000012,0x00000123,0x00000121,0x00000122, + 0x0003003e,0x00000120,0x00000123,0x0004003d,0x00000012,0x00000125,0x00000117,0x0004003d, + 0x00000012,0x00000126,0x00000120,0x00050081,0x00000012,0x00000127,0x00000125,0x00000126, + 0x0004003d,0x00000012,0x0000012a,0x0000011c,0x0008000c,0x00000012,0x0000012b,0x00000001, + 0x00000032,0x00000127,0x00000129,0x0000012a,0x0003003e,0x00000124,0x0000012b,0x0004003d, + 0x00000012,0x0000012d,0x00000120,0x0005008e,0x00000012,0x0000012f,0x0000012d,0x0000012e, + 0x0004003d,0x00000012,0x00000130,0x0000011c,0x0005008e,0x00000012,0x00000132,0x00000130, + 0x00000131,0x00050083,0x00000012,0x00000133,0x0000012f,0x00000132,0x00050050,0x00000012, + 0x00000134,0x000000ec,0x000000ec,0x00050081,0x00000012,0x00000135,0x00000133,0x00000134, + 0x0003003e,0x0000012c,0x00000135,0x0004003d,0x00000012,0x00000137,0x00000120,0x0004003d, + 0x00000012,0x00000138,0x0000011c,0x00050083,0x00000012,0x00000139,0x00000137,0x00000138, + 0x0005008e,0x00000012,0x0000013a,0x00000139,0x00000077,0x0003003e,0x00000136,0x0000013a, + 0x0004003d,0x00000012,0x0000013c,0x00000124,0x00050050,0x00000012,0x0000013d,0x000000ec, + 0x000000ec,0x00050083,0x00000012,0x0000013e,0x0000013d,0x0000013c,0x0004003d,0x00000012, + 0x0000013f,0x0000012c,0x00050083,0x00000012,0x00000140,0x0000013e,0x0000013f,0x0004003d, + 0x00000012,0x00000141,0x00000136,0x00050083,0x00000012,0x00000142,0x00000140,0x00000141, + 0x0003003e,0x0000013b,0x00000142,0x0004003d,0x00000012,0x00000144,0x0000012c,0x0004003d, + 0x00000012,0x00000145,0x0000013b,0x00050081,0x00000012,0x00000146,0x00000144,0x00000145, + 0x0003003e,0x00000143,0x00000146,0x0004003d,0x00000012,0x00000148,0x00000110,0x00050050, + 0x00000012,0x00000149,0x000000ec,0x000000ec,0x00050083,0x00000012,0x0000014a,0x00000148, + 0x00000149,0x0004003d,0x00000012,0x0000014c,0x000000f3,0x00050050,0x00000012,0x0000014d, + 0x00000077,0x00000077,0x00050083,0x00000012,0x0000014e,0x0000014c,0x0000014d,0x0008000c, + 0x00000012,0x0000014f,0x00000001,0x0000002b,0x0000014a,0x0000014b,0x0000014e,0x0004003d, + 0x00000012,0x00000150,0x000000f3,0x00050088,0x00000012,0x00000151,0x0000014f,0x00000150, + 0x0003003e,0x00000147,0x00000151,0x0004003d,0x00000012,0x00000153,0x00000110,0x0004003d, + 0x00000012,0x00000154,0x0000013b,0x0004003d,0x00000012,0x00000155,0x00000143,0x00050088, + 0x00000012,0x00000156,0x00000154,0x00000155,0x00050081,0x00000012,0x00000157,0x00000153, + 0x00000156,0x0004003d,0x00000012,0x00000158,0x000000f3,0x00050050,0x00000012,0x00000159, + 0x00000077,0x00000077,0x00050083,0x00000012,0x0000015a,0x00000158,0x00000159,0x0008000c, + 0x00000012,0x0000015b,0x00000001,0x0000002b,0x00000157,0x0000014b,0x0000015a,0x0004003d, + 0x00000012,0x0000015c,0x000000f3,0x00050088,0x00000012,0x0000015d,0x0000015b,0x0000015c, + 0x0003003e,0x00000152,0x0000015d,0x0004003d,0x00000012,0x0000015f,0x00000110,0x00050050, + 0x00000012,0x00000161,0x00000160,0x00000160,0x00050081,0x00000012,0x00000162,0x0000015f, + 0x00000161,0x0004003d,0x00000012,0x00000163,0x000000f3,0x00050050,0x00000012,0x00000164, + 0x00000077,0x00000077,0x00050083,0x00000012,0x00000165,0x00000163,0x00000164,0x0008000c, + 0x00000012,0x00000166,0x00000001,0x0000002b,0x00000162,0x0000014b,0x00000165,0x0004003d, + 0x00000012,0x00000167,0x000000f3,0x00050088,0x00000012,0x00000168,0x00000166,0x00000167, + 0x0003003e,0x0000015e,0x00000168,0x0004003d,0x000000ae,0x0000016b,0x0000016a,0x00050041, + 0x00000007,0x0000016c,0x00000147,0x00000073,0x0004003d,0x00000006,0x0000016d,0x0000016c, + 0x00050041,0x00000007,0x0000016e,0x00000152,0x00000062,0x0004003d,0x00000006,0x0000016f, + 0x0000016e,0x00050050,0x00000012,0x00000170,0x0000016d,0x0000016f,0x00070058,0x000000c4, + 0x00000171,0x0000016b,0x00000170,0x00000002,0x000000e4,0x0008004f,0x0000000c,0x00000172, + 0x00000171,0x00000171,0x00000000,0x00000001,0x00000002,0x0003003e,0x00000169,0x00000172, + 0x0004003d,0x000000ae,0x00000174,0x0000016a,0x00050041,0x00000007,0x00000175,0x00000152, + 0x00000073,0x0004003d,0x00000006,0x00000176,0x00000175,0x00050041,0x00000007,0x00000177, + 0x00000147,0x00000062,0x0004003d,0x00000006,0x00000178,0x00000177,0x00050050,0x00000012, + 0x00000179,0x00000176,0x00000178,0x00070058,0x000000c4,0x0000017a,0x00000174,0x00000179, + 0x00000002,0x000000e4,0x0008004f,0x0000000c,0x0000017b,0x0000017a,0x0000017a,0x00000000, + 0x00000001,0x00000002,0x0003003e,0x00000173,0x0000017b,0x0004003d,0x000000ae,0x0000017d, + 0x0000016a,0x0004003d,0x00000012,0x0000017e,0x00000152,0x00070058,0x000000c4,0x0000017f, + 0x0000017d,0x0000017e,0x00000002,0x000000e4,0x0008004f,0x0000000c,0x00000180,0x0000017f, + 0x0000017f,0x00000000,0x00000001,0x00000002,0x0003003e,0x0000017c,0x00000180,0x0004003d, + 0x000000ae,0x00000182,0x0000016a,0x00050041,0x00000007,0x00000183,0x00000152,0x00000073, + 0x0004003d,0x00000006,0x00000184,0x00000183,0x00050041,0x00000007,0x00000185,0x0000015e, + 0x00000062,0x0004003d,0x00000006,0x00000186,0x00000185,0x00050050,0x00000012,0x00000187, + 0x00000184,0x00000186,0x00070058,0x000000c4,0x00000188,0x00000182,0x00000187,0x00000002, + 0x000000e4,0x0008004f,0x0000000c,0x00000189,0x00000188,0x00000188,0x00000000,0x00000001, + 0x00000002,0x0003003e,0x00000181,0x00000189,0x0004003d,0x000000ae,0x0000018b,0x0000016a, + 0x00050041,0x00000007,0x0000018c,0x0000015e,0x00000073,0x0004003d,0x00000006,0x0000018d, + 0x0000018c,0x00050041,0x00000007,0x0000018e,0x00000152,0x00000062,0x0004003d,0x00000006, + 0x0000018f,0x0000018e,0x00050050,0x00000012,0x00000190,0x0000018d,0x0000018f,0x00070058, + 0x000000c4,0x00000191,0x0000018b,0x00000190,0x00000002,0x000000e4,0x0008004f,0x0000000c, + 0x00000192,0x00000191,0x00000191,0x00000000,0x00000001,0x00000002,0x0003003e,0x0000018a, + 0x00000192,0x00050041,0x00000007,0x00000194,0x00000124,0x00000073,0x0004003d,0x00000006, + 0x00000195,0x00000194,0x00050041,0x00000007,0x00000196,0x00000143,0x00000062,0x0004003d, + 0x00000006,0x00000197,0x00000196,0x00050085,0x00000006,0x00000198,0x00000195,0x00000197, + 0x0003003e,0x00000193,0x00000198,0x00050041,0x00000007,0x0000019a,0x00000124,0x00000062, + 0x0004003d,0x00000006,0x0000019b,0x0000019a,0x00050041,0x00000007,0x0000019c,0x00000143, + 0x00000073,0x0004003d,0x00000006,0x0000019d,0x0000019c,0x00050085,0x00000006,0x0000019e, + 0x0000019b,0x0000019d,0x0003003e,0x00000199,0x0000019e,0x00050041,0x00000007,0x000001a0, + 0x00000143,0x00000073,0x0004003d,0x00000006,0x000001a1,0x000001a0,0x00050041,0x00000007, + 0x000001a2,0x00000143,0x00000062,0x0004003d,0x00000006,0x000001a3,0x000001a2,0x00050085, + 0x00000006,0x000001a4,0x000001a1,0x000001a3,0x0003003e,0x0000019f,0x000001a4,0x00050041, + 0x00000007,0x000001a6,0x00000136,0x00000062,0x0004003d,0x00000006,0x000001a7,0x000001a6, + 0x00050041,0x00000007,0x000001a8,0x00000143,0x00000073,0x0004003d,0x00000006,0x000001a9, + 0x000001a8,0x00050085,0x00000006,0x000001aa,0x000001a7,0x000001a9,0x0003003e,0x000001a5, + 0x000001aa,0x00050041,0x00000007,0x000001ac,0x00000136,0x00000073,0x0004003d,0x00000006, + 0x000001ad,0x000001ac,0x00050041,0x00000007,0x000001ae,0x00000143,0x00000062,0x0004003d, + 0x00000006,0x000001af,0x000001ae,0x00050085,0x00000006,0x000001b0,0x000001ad,0x000001af, + 0x0003003e,0x000001ab,0x000001b0,0x0004003d,0x0000000c,0x000001b2,0x00000169,0x0004003d, + 0x00000006,0x000001b3,0x00000193,0x00060050,0x0000000c,0x000001b4,0x000001b3,0x000001b3, + 0x000001b3,0x0004003d,0x0000000c,0x000001b5,0x00000173,0x0004003d,0x00000006,0x000001b6, + 0x00000199,0x0005008e,0x0000000c,0x000001b7,0x000001b5,0x000001b6,0x0008000c,0x0000000c, + 0x000001b8,0x00000001,0x00000032,0x000001b2,0x000001b4,0x000001b7,0x0003003e,0x000001b1, + 0x000001b8,0x0004003d,0x0000000c,0x000001b9,0x0000017c,0x0004003d,0x00000006,0x000001ba, + 0x0000019f,0x00060050,0x0000000c,0x000001bb,0x000001ba,0x000001ba,0x000001ba,0x0004003d, + 0x0000000c,0x000001bc,0x000001b1,0x0008000c,0x0000000c,0x000001bd,0x00000001,0x00000032, + 0x000001b9,0x000001bb,0x000001bc,0x0003003e,0x000001b1,0x000001bd,0x0004003d,0x0000000c, + 0x000001be,0x00000181,0x0004003d,0x00000006,0x000001bf,0x000001a5,0x00060050,0x0000000c, + 0x000001c0,0x000001bf,0x000001bf,0x000001bf,0x0004003d,0x0000000c,0x000001c1,0x000001b1, + 0x0008000c,0x0000000c,0x000001c2,0x00000001,0x00000032,0x000001be,0x000001c0,0x000001c1, + 0x0003003e,0x000001b1,0x000001c2,0x0004003d,0x0000000c,0x000001c3,0x0000018a,0x0004003d, + 0x00000006,0x000001c4,0x000001ab,0x00060050,0x0000000c,0x000001c5,0x000001c4,0x000001c4, + 0x000001c4,0x0004003d,0x0000000c,0x000001c6,0x000001b1,0x0008000c,0x0000000c,0x000001c7, + 0x00000001,0x00000032,0x000001c3,0x000001c5,0x000001c6,0x0003003e,0x000001b1,0x000001c7, + 0x0004003d,0x0000000c,0x000001c8,0x000001b1,0x0004003d,0x00000006,0x000001c9,0x000001ab, + 0x0004003d,0x00000006,0x000001ca,0x000001a5,0x0004003d,0x00000006,0x000001cb,0x0000019f, + 0x0004003d,0x00000006,0x000001cc,0x00000193,0x0004003d,0x00000006,0x000001cd,0x00000199, + 0x00050081,0x00000006,0x000001ce,0x000001cc,0x000001cd,0x00050081,0x00000006,0x000001cf, + 0x000001cb,0x000001ce,0x00050081,0x00000006,0x000001d0,0x000001ca,0x000001cf,0x00050081, + 0x00000006,0x000001d1,0x000001c9,0x000001d0,0x00050088,0x00000006,0x000001d2,0x000000ec, + 0x000001d1,0x0005008e,0x0000000c,0x000001d3,0x000001c8,0x000001d2,0x000200fe,0x000001d3, + 0x00010038,0x00050036,0x00000006,0x00000025,0x00000000,0x00000023,0x00030037,0x00000022, + 0x00000024,0x000200f8,0x00000026,0x0004003b,0x00000022,0x000001d6,0x00000007,0x0004003b, + 0x00000022,0x000001e4,0x00000007,0x0004003d,0x00000021,0x000001d7,0x00000024,0x0003003e, + 0x000001d6,0x000001d7,0x0004003d,0x00000021,0x000001d8,0x000001d6,0x0004003d,0x00000021, + 0x000001d9,0x000001d6,0x000500c2,0x00000021,0x000001db,0x000001d9,0x000001da,0x00050080, + 0x00000021,0x000001dd,0x000001db,0x000001dc,0x000500c2,0x00000021,0x000001de,0x000001d8, + 0x000001dd,0x0004003d,0x00000021,0x000001df,0x000001d6,0x000500c6,0x00000021,0x000001e0, + 0x000001de,0x000001df,0x0003003e,0x000001d6,0x000001e0,0x0004003d,0x00000021,0x000001e2, + 0x000001d6,0x00050084,0x00000021,0x000001e3,0x000001e2,0x000001e1,0x0003003e,0x000001d6, + 0x000001e3,0x0004003d,0x00000021,0x000001e5,0x000001d6,0x000500c2,0x00000021,0x000001e7, + 0x000001e5,0x000001e6,0x0004003d,0x00000021,0x000001e8,0x000001d6,0x000500c2,0x00000021, + 0x000001ea,0x000001e8,0x000001e9,0x000500c6,0x00000021,0x000001eb,0x000001e7,0x000001ea, + 0x00050080,0x00000021,0x000001ec,0x000001eb,0x00000062,0x0003003e,0x000001e4,0x000001ec, + 0x0004003d,0x00000021,0x000001ed,0x000001e4,0x00040070,0x00000006,0x000001ee,0x000001ed, + 0x0004007c,0x00000006,0x000001f0,0x000001ef,0x00050085,0x00000006,0x000001f1,0x000001ee, + 0x000001f0,0x000200fe,0x000001f1,0x00010038,0x00050036,0x0000000c,0x0000002b,0x00000000, + 0x00000027,0x00030037,0x00000022,0x00000028,0x00030037,0x00000022,0x00000029,0x00030037, + 0x00000022,0x0000002a,0x000200f8,0x0000002c,0x0004003b,0x00000022,0x000001f4,0x00000007, + 0x0004003b,0x00000007,0x00000210,0x00000007,0x0004003b,0x00000022,0x00000216,0x00000007, + 0x0004003b,0x00000007,0x00000218,0x00000007,0x0004003b,0x00000022,0x0000021e,0x00000007, + 0x0004003b,0x00000007,0x00000220,0x00000007,0x0004003b,0x00000022,0x00000226,0x00000007, + 0x0004003b,0x00000007,0x00000228,0x00000007,0x0004003b,0x00000022,0x0000022e,0x00000007, + 0x0004003b,0x00000007,0x00000230,0x00000007,0x0004003b,0x00000007,0x00000239,0x00000007, + 0x0004003b,0x00000007,0x00000240,0x00000007,0x0004003b,0x00000007,0x00000249,0x00000007, + 0x0004003b,0x00000007,0x00000251,0x00000007,0x0004003b,0x00000007,0x00000259,0x00000007, + 0x0004003d,0x00000021,0x000001f5,0x00000028,0x00050084,0x00000021,0x000001f7,0x000001f5, + 0x000001f6,0x0004003d,0x00000021,0x000001f8,0x00000029,0x00050084,0x00000021,0x000001fa, + 0x000001f8,0x000001f9,0x000500c6,0x00000021,0x000001fb,0x000001f7,0x000001fa,0x0004003d, + 0x00000021,0x000001fc,0x0000002a,0x00050084,0x00000021,0x000001fe,0x000001fc,0x000001fd, + 0x000500c6,0x00000021,0x000001ff,0x000001fb,0x000001fe,0x000500c6,0x00000021,0x00000201, + 0x000001ff,0x00000200,0x0003003e,0x000001f4,0x00000201,0x0004003d,0x00000021,0x00000202, + 0x000001f4,0x0004003d,0x00000021,0x00000203,0x000001f4,0x000500c2,0x00000021,0x00000204, + 0x00000203,0x000001da,0x00050080,0x00000021,0x00000205,0x00000204,0x000001dc,0x000500c2, + 0x00000021,0x00000206,0x00000202,0x00000205,0x0004003d,0x00000021,0x00000207,0x000001f4, + 0x000500c6,0x00000021,0x00000208,0x00000206,0x00000207,0x0003003e,0x000001f4,0x00000208, + 0x0004003d,0x00000021,0x00000209,0x000001f4,0x00050084,0x00000021,0x0000020a,0x00000209, + 0x000001e1,0x0003003e,0x000001f4,0x0000020a,0x0004003d,0x00000021,0x0000020b,0x000001f4, + 0x000500c2,0x00000021,0x0000020d,0x0000020b,0x0000020c,0x0004003d,0x00000021,0x0000020e, + 0x000001f4,0x000500c6,0x00000021,0x0000020f,0x0000020d,0x0000020e,0x0003003e,0x000001f4, + 0x0000020f,0x0004003d,0x00000021,0x00000211,0x000001f4,0x00050084,0x00000021,0x00000213, + 0x00000211,0x00000212,0x00050080,0x00000021,0x00000215,0x00000213,0x00000214,0x0003003e, + 0x00000216,0x00000215,0x00050039,0x00000006,0x00000217,0x00000025,0x00000216,0x0003003e, + 0x00000210,0x00000217,0x0004003d,0x00000021,0x00000219,0x000001f4,0x00050084,0x00000021, + 0x0000021b,0x00000219,0x0000021a,0x00050080,0x00000021,0x0000021d,0x0000021b,0x0000021c, + 0x0003003e,0x0000021e,0x0000021d,0x00050039,0x00000006,0x0000021f,0x00000025,0x0000021e, + 0x0003003e,0x00000218,0x0000021f,0x0004003d,0x00000021,0x00000221,0x000001f4,0x00050084, + 0x00000021,0x00000223,0x00000221,0x00000222,0x00050080,0x00000021,0x00000225,0x00000223, + 0x00000224,0x0003003e,0x00000226,0x00000225,0x00050039,0x00000006,0x00000227,0x00000025, + 0x00000226,0x0003003e,0x00000220,0x00000227,0x0004003d,0x00000021,0x00000229,0x000001f4, + 0x00050084,0x00000021,0x0000022b,0x00000229,0x0000022a,0x00050080,0x00000021,0x0000022d, + 0x0000022b,0x0000022c,0x0003003e,0x0000022e,0x0000022d,0x00050039,0x00000006,0x0000022f, + 0x00000025,0x0000022e,0x0003003e,0x00000228,0x0000022f,0x0004003d,0x00000006,0x00000231, + 0x00000210,0x0006000c,0x00000006,0x00000232,0x00000001,0x0000001e,0x00000231,0x0004007c, + 0x00000006,0x00000234,0x00000233,0x00050085,0x00000006,0x00000235,0x00000232,0x00000234, + 0x00050085,0x00000006,0x00000237,0x00000235,0x00000236,0x0006000c,0x00000006,0x00000238, + 0x00000001,0x0000001f,0x00000237,0x0003003e,0x00000230,0x00000238,0x0004003d,0x00000006, + 0x0000023a,0x00000220,0x0006000c,0x00000006,0x0000023b,0x00000001,0x0000001e,0x0000023a, + 0x0004007c,0x00000006,0x0000023c,0x00000233,0x00050085,0x00000006,0x0000023d,0x0000023b, + 0x0000023c,0x00050085,0x00000006,0x0000023e,0x0000023d,0x00000236,0x0006000c,0x00000006, + 0x0000023f,0x00000001,0x0000001f,0x0000023e,0x0003003e,0x00000239,0x0000023f,0x0004007c, + 0x00000006,0x00000242,0x00000241,0x0003003e,0x00000240,0x00000242,0x0004003d,0x00000006, + 0x00000243,0x00000230,0x0004003d,0x00000006,0x00000244,0x00000218,0x0004003d,0x00000006, + 0x00000245,0x00000240,0x00050085,0x00000006,0x00000246,0x00000244,0x00000245,0x0006000c, + 0x00000006,0x00000247,0x00000001,0x0000000e,0x00000246,0x00050085,0x00000006,0x00000248, + 0x00000243,0x00000247,0x0003003e,0x00000249,0x00000248,0x00050039,0x00000006,0x0000024a, + 0x0000000a,0x00000249,0x0004003d,0x00000006,0x0000024b,0x00000230,0x0004003d,0x00000006, + 0x0000024c,0x00000218,0x0004003d,0x00000006,0x0000024d,0x00000240,0x00050085,0x00000006, + 0x0000024e,0x0000024c,0x0000024d,0x0006000c,0x00000006,0x0000024f,0x00000001,0x0000000d, + 0x0000024e,0x00050085,0x00000006,0x00000250,0x0000024b,0x0000024f,0x0003003e,0x00000251, + 0x00000250,0x00050039,0x00000006,0x00000252,0x0000000a,0x00000251,0x0004003d,0x00000006, + 0x00000253,0x00000239,0x0004003d,0x00000006,0x00000254,0x00000228,0x0004003d,0x00000006, + 0x00000255,0x00000240,0x00050085,0x00000006,0x00000256,0x00000254,0x00000255,0x0006000c, + 0x00000006,0x00000257,0x00000001,0x0000000e,0x00000256,0x00050085,0x00000006,0x00000258, + 0x00000253,0x00000257,0x0003003e,0x00000259,0x00000258,0x00050039,0x00000006,0x0000025a, + 0x0000000a,0x00000259,0x00060050,0x0000000c,0x0000025b,0x0000024a,0x00000252,0x0000025a, + 0x000200fe,0x0000025b,0x00010038 +}; diff --git a/scripts/opennr_kernels.py b/scripts/opennr_kernels.py new file mode 100644 index 000000000..af836095e --- /dev/null +++ b/scripts/opennr_kernels.py @@ -0,0 +1,281 @@ +"""The open neural rendering backend's kernels: OpenDLSS-NR's SPIR-V and PTX, and the frame's own two passes. + +Three kinds of file, made three ways, for reasons that are not the same: + +* OpenDLSS-NR's thirteen GLSL kernels (third_party/opendlss-nr/shaders) are compiled with the flags of upstream's + scripts/build_shaders.ps1 and checked in as one header, gpu/vk/shaders/opennr_kernels_spv.h -- like every other + shader in gpu/vk/shaders, so a clone builds without glslang; +* the renderer's own preprocess and composite passes (gpu/vk/shaders/opennr_pre.comp, opennr_post.comp) the same + way, one glslang header each, the way the rest of gpu/vk/shaders is made; +* the PTX kernels are generated at build time by nx2/build.py from upstream's Python generators + (third_party/opendlss-nr/scripts/ptx), with exactly the calls build_shaders.ps1 makes. They are text, the + generators need only Python, which every build has, and checking in 5.5 MB of generated text would only be a + second copy of the generators to keep in step. + + python -I -B scripts/opennr_kernels.py # write the SPIR-V headers + python -I -B scripts/opennr_kernels.py --check # compare instead of writing (tests/test_opennr_kernels.py) + python -I -B scripts/opennr_kernels.py --materialize DIR + # DIR/shaders/*.spv from the CHECKED-IN header and DIR/ptx/*.ptx freshly generated: the kernel folder + # OpenDLSS-NR's host code reads, for the correctness harness (scripts/opennr_harness.py). The SPIR-V comes + # from the header on purpose: the harness proves what ships, not a fresh compile of it. + python -I -B scripts/opennr_kernels.py --prepare DIR + # upstream's host sources copied to DIR with SOURCE_PATCHES applied (what nx2/build.py and the harness compile) +""" +import argparse +import os +import re +import shutil +import subprocess +import sys +import tempfile +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +UPSTREAM = ROOT / "third_party" / "opendlss-nr" +SHADERS = UPSTREAM / "shaders" +GENERATORS = UPSTREAM / "scripts" / "ptx" +OUT = ROOT / "gpu" / "vk" / "shaders" +KERNEL_HEADER = OUT / "opennr_kernels_spv.h" +# (the renderer's own passes around the network: name -> the glslang variable name of its header) +FRAME_SHADERS = {"opennr_pre": "OPENNR_PRE_COMP_SPV", "opennr_post": "OPENNR_POST_COMP_SPV"} + +# The thirteen modules nr::Kernels loads (third_party/opendlss-nr/src/kernels.cpp, its constructor), in its order. +KERNELS = ["gemm_fp8", "gemm_f16", "ops", "window_normalize", "window_attend", "global_normalize", "global_attend", + "preprocess", "fused_block32", "qkv_attention", "gemm_mlp", "global_attention", "gemm_reduce"] +# upstream's build_shaders.ps1: `glslang -V --target-env vulkan1.3 -I` +KERNEL_FLAGS = ["-V", "--target-env", "vulkan1.3"] + + +# Upstream's host code is built with MSVC only. What clang (and GCC) refuse in it, as exact replacements applied to a +# copy in the build's own folder (prepare_sources): third_party/ stays byte for byte upstream's, and each change +# here says why. A replacement that no longer matches exactly once fails the build instead of being skipped. +SOURCE_PATCHES = [ + ("kernels.h", " struct Chain {\n", " struct Chain {\n Chain() {} // (hookshot portability, scripts/opennr_kernels.py)\n", + "Chain's default member initializers are used by a default argument (`const Chain& chain = Chain()`) inside " + "the enclosing class Kernels, before Kernels is complete. MSVC accepts it; clang and GCC refuse it ('default " + "member initializer needed within definition of enclosing class', CWG 1397). A user-provided constructor is " + "the smallest change that compiles everywhere; nothing aggregate-initializes a Chain."), +] +# The vendored host files the renderer compiles (not upstream's dlss5vk tool, main.cpp and verify.cpp, which only +# the harness links) +RENDERER_SOURCES = ["kernels.cpp", "nr_graph.cpp", "nr_model.cpp", "reference.cpp", "vk_context.cpp"] + + +def prepare_sources(out_dir): + """Copy third_party/opendlss-nr/src to out_dir with SOURCE_PATCHES applied; returns out_dir. Unchanged files are + not rewritten, so an object built from them is kept.""" + src, out_dir = UPSTREAM / "src", Path(out_dir) + out_dir.mkdir(parents=True, exist_ok=True) + texts = {p.name: p.read_text(encoding="utf-8") for p in sorted(src.iterdir()) if p.is_file()} + for name, old, new, why in SOURCE_PATCHES: + if texts.get(name, "").count(old) != 1: + raise RuntimeError("opennr portability patch for %s no longer matches upstream exactly once (%s)" % (name, why)) + texts[name] = texts[name].replace(old, new) + for name, text in texts.items(): + target = out_dir / name + if not target.is_file() or target.read_text(encoding="utf-8") != text: + target.write_text(text, encoding="utf-8") + return out_dir + + +def ptx_jobs(): + """(generator, arguments, output file) for every PTX variant upstream's build_shaders.ps1 generates, in its order. + + A variant the graph asks for and this list lacks is a hard error at record time for some kernel families and a + fall-back to another route for others (upstream's docs/execution.md), so this list is the upstream one verbatim.""" + jobs = [] + for k in (64, 128, 256): + jobs.append(("mlp_e4m3.py", [str(k)], "mlp_e4m3_K%d.ptx" % k, ["3", "1", "1"])) + for c in (64, 128, 256, 512): + jobs.append(("qkv_e4m3.py", [str(c)], "qkv_e4m3_K%d.ptx" % c, ["80"])) + for k in (32, 64, 128, 256, 512, 1024): # residual-seeded E4 (5), residual dual (13), plain E4 (4), f16 (8), SiLU (6) + for f in (5, 13, 4, 8, 6): + jobs.append(("gemm2_e4m3.py", [str(k), str(f)], "gemm2_e4m3_K%d_f%d.ptx" % (k, f), [])) + for c, r, extra in ((64, 4, 0), (128, 4, 0), (256, 3, 80), (256, 4, 64)): + jobs.append(("ffn_e4m3.py", [str(c), str(r)], "ffn_e4m3_C%d_R%d.ptx" % (c, r), [str(extra)])) + jobs.append(("ffn_e4m3.py", [str(c), str(r)], "ffn_e4m3_C%d_R%d_proj.ptx" % (c, r), [str(extra), "1"])) + for k, f, p, s in ((4096, 1, 32, 4), (1024, 0, 16, 2), (1024, 1, 8, 4), (1024, 0, 8, 4)): + jobs.append(("gemmt_e4m3.py", [str(k), str(f), str(p), str(s)], "gemmt_e4m3_K%d_f%d_p%d_s%d.ptx" % (k, f, p, s), [])) + for s, f in ((4, 4), (2, 8), (4, 8)): + jobs.append(("reduce_e4m3.py", [str(s), str(f)], "reduce_e4m3_s%d_f%d.ptx" % (s, f), [])) + for k, f, s in ((1024, 6, 1), (4096, 5, 4), (1024, 8, 2), (1024, 5, 4)): + jobs.append(("gemmv_e4m3.py", [str(k), str(f), str(s)], "gemmv_e4m3_K%d_f%d_s%d.ptx" % (k, f, s), [])) + jobs.append(("gemmv_e4m3.py", [str(k), str(f), str(s)], "gemmv_e4m3_K%d_f%d_s%d_m96.ptx" % (k, f, s), + ["4", "6", "0", "0", "0", "96"])) + for padded in (64, 128, 192, 256): + jobs.append(("global_attention_e4m3.py", [str(padded)], "global_attention_e4m3_p%d.ptx" % padded, [])) + jobs.append(("global_attention_stream_e4m3.py", ["normalize"], "global_normalize_e4m3.ptx", [])) + jobs.append(("global_attention_stream_e4m3.py", ["attention"], "global_attention_stream_e4m3.ptx", ["4"])) + for k, f in ((512, 4), (512, 5), (512, 13), (256, 5), (4096, 5), (1024, 8), (1024, 5)): + jobs.append(("gemmv_e4m3.py", [str(k), str(f), "1"], "gemmv_e4m3_K%d_f%d_s1_m96.ptx" % (k, f), + ["4", "6", "0", "0", "0", "96"])) + for f in (2, 66, 74, 130, 48): + jobs.append(("block32_e4m3.py", [str(f)], "block32_e4m3_f%d.ptx" % f, [])) + return jobs + + +def generate_ptx(out_dir, python=None): + """Run every generator into out_dir. Upstream's generators import their siblings (ptxgen, swin), so each runs as a + script from its own folder: not with -I, which would leave that folder off sys.path. They write nothing else.""" + out_dir = Path(out_dir) + out_dir.mkdir(parents=True, exist_ok=True) + python = python or sys.executable + env = dict(os.environ, PYTHONDONTWRITEBYTECODE="1") + names = [] + for script, head, name, tail in ptx_jobs(): + target = out_dir / name + r = subprocess.run([python, "-B", str(GENERATORS / script), *head, str(target), *tail], cwd=str(GENERATORS), + env=env, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + if r.returncode or not target.is_file(): + raise RuntimeError("PTX generator %s %s failed:\n%s" % (script, " ".join(head + tail), + r.stdout.decode("utf-8", "replace")[-2000:])) + names.append(name) + return names + + +def write_ptx_header(ptx_dir, header): + """The generated PTX as one C++ header the renderer embeds (gpu/vk/vk_opennr.cpp writes it back out as files for + OpenDLSS-NR's host code, which reads its kernels from a folder). Raw string literals: PTX has no ')opennr"'.""" + ptx_dir, header = Path(ptx_dir), Path(header) + names = sorted(p.name for p in ptx_dir.glob("*.ptx")) + lines = ["// Generated by nx2/build.py (scripts/opennr_kernels.py write_ptx_header) from", + "// third_party/opendlss-nr/scripts/ptx: do not edit.", "#pragma once", "", + "namespace mkwvk::opennr_ptx {", "struct File { const char* name; const char* text; };", + "inline const File kFiles[] = {"] + for n in names: + text = (ptx_dir / n).read_text(encoding="utf-8") + if ')opennr"' in text: + raise RuntimeError(n + " holds the raw string delimiter") + lines.append(' {"%s", R"opennr(%s)opennr"},' % (n, text)) + lines += ["};", "inline constexpr unsigned kCount = %d;" % len(names), "} // namespace mkwvk::opennr_ptx", ""] + text = "\n".join(lines) + if not header.is_file() or header.read_text(encoding="utf-8") != text: # (unchanged: the object is kept) + header.parent.mkdir(parents=True, exist_ok=True) + header.write_text(text, encoding="utf-8") + return len(names) + + +def compile_kernel(glslang, name, spv): + subprocess.run([glslang, *KERNEL_FLAGS, "-I" + str(SHADERS), str(SHADERS / (name + ".comp")), "-o", str(spv)], + check=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + + +def words_of(spv): + data = Path(spv).read_bytes() + if len(data) % 4 or data[:4] != bytes((0x03, 0x02, 0x23, 0x07)): + raise RuntimeError("%s is not SPIR-V" % spv) + return [int.from_bytes(data[i:i + 4], "little") for i in range(0, len(data), 4)] + + +def kernel_header(modules): + out = ["// Generated by scripts/opennr_kernels.py from third_party/opendlss-nr/shaders: do not edit.", + "// glslang %s -I, as upstream's scripts/build_shaders.ps1. The SPIR-V words of each module;" % + " ".join(KERNEL_FLAGS), "// gpu/vk/vk_opennr.cpp writes them out as the .spv files nr::Kernels loads.", + "#pragma once", "", "#include ", "", "namespace mkwvk::opennr_spv {"] + for name, words in modules: + out.append("inline constexpr uint32_t k_%s[] = {" % name) + for i in range(0, len(words), 8): + out.append(" " + ",".join("0x%08x" % w for w in words[i:i + 8]) + ",") + out.append("};") + out += ["struct Module { const char* name; const uint32_t* words; unsigned count; };", + "inline constexpr Module kModules[] = {"] + out += [' {"%s", k_%s, (unsigned)(sizeof k_%s / sizeof k_%s[0])},' % (n, n, n, n) for n, _ in modules] + out += ["};", "} // namespace mkwvk::opennr_spv", ""] + return "\n".join(out) + + +def header_words(text): + """name -> SPIR-V words of the checked-in kernel header (the parse --materialize and --check share)""" + modules = {} + for m in re.finditer(r"inline constexpr uint32_t k_(\w+)\[\] = \{(.*?)\};", text, re.S): + modules[m.group(1)] = [int(w, 16) for w in re.findall(r"0x([0-9a-f]{8})", m.group(2))] + return modules + + +def strip_generator(text): + """A glslang header without glslang's own version comment (`// 1116.2.0`), as scripts/fsr3_shaders.py does: a + runner with another glslang release would otherwise report a version bump as a source mismatch.""" + return [line for line in text.splitlines() + if not line.strip().startswith("// ") or not line.strip()[3:].replace(".", "").isdigit()] + + +def main(): + p = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + p.add_argument("--glslang", default=None, help="glslangValidator; found on PATH by default") + p.add_argument("--spirv-val", default=None, help="spirv-val, to validate each module") + p.add_argument("--check", action="store_true", help="compare with the checked-in headers") + p.add_argument("--materialize", metavar="DIR", help="write DIR/shaders/*.spv (from the header) and DIR/ptx/*.ptx") + p.add_argument("--prepare", metavar="DIR", help="copy upstream's host sources to DIR with the portability patches") + a = p.parse_args() + + if a.prepare: + print("prepared %s" % prepare_sources(a.prepare)) + return 0 + if a.materialize: + modules = header_words(KERNEL_HEADER.read_text(encoding="utf-8")) + if sorted(modules) != sorted(KERNELS): + print("opennr_kernels_spv.h holds %s, not the thirteen kernels" % sorted(modules), file=sys.stderr) + return 1 + shaders = Path(a.materialize) / "shaders" + shaders.mkdir(parents=True, exist_ok=True) + for name, words in modules.items(): + (shaders / (name + ".spv")).write_bytes(b"".join(w.to_bytes(4, "little") for w in words)) + n = len(generate_ptx(Path(a.materialize) / "ptx")) + print("materialized %d SPIR-V modules and %d PTX kernels in %s" % (len(modules), n, a.materialize)) + return 0 + + glslang = a.glslang or shutil.which("glslangValidator") or shutil.which("glslang") + if not glslang: + print("glslangValidator not found; pass --glslang", file=sys.stderr) + return 2 + bad = [] + with tempfile.TemporaryDirectory(prefix="opennr-kernels-") as tmp: + modules = [] + for name in KERNELS: + spv = Path(tmp) / (name + ".spv") + compile_kernel(glslang, name, spv) + if a.spirv_val: + subprocess.run([a.spirv_val, "--target-env", "vulkan1.3", str(spv)], check=True) + modules.append((name, words_of(spv))) + made = kernel_header(modules) + if a.check: + have = header_words(KERNEL_HEADER.read_text(encoding="utf-8")) if KERNEL_HEADER.is_file() else {} + for name, words in modules: + if have.get(name) != words: + bad.append(name) + print("%s: the checked-in SPIR-V differs from a compile of its source (%s words checked in, %d made)" + % (name, len(have[name]) if name in have else "no", len(words)), file=sys.stderr) + if sorted(have) != sorted(KERNELS): + bad.append("(the module list)") + else: + KERNEL_HEADER.write_text(made, encoding="utf-8") + print("wrote %s (%d modules, %d bytes)" % (KERNEL_HEADER.relative_to(ROOT), len(modules), len(made))) + for name, variable in FRAME_SHADERS.items(): + header = OUT / (name + "_comp_spv.h") + out = Path(tmp) / header.name + src = OUT / (name + ".comp") + subprocess.run([glslang, "-V", "--quiet", "-S", "comp", "--target-env", "vulkan1.3", "--variable-name", + variable, "-o", str(out), str(src)], check=True) + if a.spirv_val: + spv = Path(tmp) / (name + ".spv") + subprocess.run([glslang, "-V", "--quiet", "-S", "comp", "--target-env", "vulkan1.3", "-o", str(spv), + str(src)], check=True) + subprocess.run([a.spirv_val, "--target-env", "vulkan1.3", str(spv)], check=True) + if a.check: + have = header.read_text(encoding="utf-8") if header.is_file() else "" + if strip_generator(have) != strip_generator(out.read_text(encoding="utf-8")): + bad.append(name) + print("%s: missing or differs from a compile of %s" % (header.name, src.name), file=sys.stderr) + else: + shutil.copyfile(out, header) + print("wrote %s" % header.relative_to(ROOT)) + if bad: + print("%d header(s) do not match their source: %s" % (len(bad), ", ".join(bad)), file=sys.stderr) + return 1 + print("opennr kernels: %d kernels and %d frame passes %s" % (len(KERNELS), len(FRAME_SHADERS), + "match" if a.check else "written")) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tests/test_opennr_kernels.py b/tests/test_opennr_kernels.py new file mode 100644 index 000000000..595040d02 --- /dev/null +++ b/tests/test_opennr_kernels.py @@ -0,0 +1,68 @@ +"""Open neural rendering's kernels: the checked-in SPIR-V still matches its sources, upstream's sources still take the +portability patches the renderer is built with, and the PTX generators still produce every variant. + +The SPIR-V headers (gpu/vk/shaders/opennr_kernels_spv.h, opennr_pre/post_comp_spv.h) are compiled from +third_party/opendlss-nr/shaders and gpu/vk/shaders by scripts/opennr_kernels.py; --check recompiles and compares. +The PTX is generated by nx2/build.py at every build, so a generator that broke would break the build -- this finds it +first, with the generator's own error. + + python -I -B tests/test_opennr_kernels.py --glslang glslangValidator --spirv-val spirv-val +""" +import argparse +import subprocess +import sys +import tempfile +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(ROOT / "scripts")) +import opennr_kernels # noqa: E402 + + +def fail(text): + print("FAIL: " + text) + sys.exit(1) + + +def main(): + p = argparse.ArgumentParser() + p.add_argument("--glslang", required=True) + p.add_argument("--spirv-val", required=True) + a = p.parse_args() + + r = subprocess.run([sys.executable, "-I", "-B", str(ROOT / "scripts" / "opennr_kernels.py"), "--check", + "--glslang", a.glslang, "--spirv-val", a.spirv_val], + stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + out = r.stdout.decode("utf-8", "replace") + print(out.strip()) + if r.returncode or "13 kernels and 2 frame passes match" not in out: + fail("the checked-in SPIR-V headers do not match their sources (python -I -B scripts/opennr_kernels.py)") + + with tempfile.TemporaryDirectory(prefix="opennr-kernels-test-") as tmp: + # every portability patch applies exactly once (prepare_sources raises otherwise), and changes only what it says + src = opennr_kernels.prepare_sources(Path(tmp) / "src") + upstream = opennr_kernels.UPSTREAM / "src" + changed = sorted(f.name for f in src.iterdir() if f.read_bytes() != (upstream / f.name).read_bytes()) + if changed != sorted({name for name, _, _, _ in opennr_kernels.SOURCE_PATCHES}): + fail("the prepared copy differs from upstream in %s, the patches name %s" % + (changed, sorted({n for n, _, _, _ in opennr_kernels.SOURCE_PATCHES}))) + for name in opennr_kernels.RENDERER_SOURCES: + if not (src / name).is_file(): + fail("the renderer compiles %s, which upstream no longer has" % name) + # the PTX: one file per variant upstream's build generates, each a PTX module + names = opennr_kernels.generate_ptx(Path(tmp) / "ptx") + if len(names) != len(opennr_kernels.ptx_jobs()) or len(names) < 70: + fail("%d PTX files for %d variants" % (len(names), len(opennr_kernels.ptx_jobs()))) + for n in names: + head = (Path(tmp) / "ptx" / n).read_text(encoding="utf-8")[:200] + if ".version" not in head or ".target" not in head: + fail("%s is not a PTX module" % n) + count = opennr_kernels.write_ptx_header(Path(tmp) / "ptx", Path(tmp) / "opennr_ptx.h") + if count != len(names): + fail("the embedded header holds %d of %d PTX files" % (count, len(names))) + print("opennr kernels: SPIR-V checked, %d portability patch(es) apply, %d PTX variants generated" % + (len(opennr_kernels.SOURCE_PATCHES), len(names))) + + +if __name__ == "__main__": + main() From d4959941381242272ab0f65ecd02cea8671cdbc8 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 17:14:23 -0600 Subject: [PATCH 101/119] fix(release): the fork's releases follow upstream's v2.0.x line Upstream releases every change as a v2.0.x patch (v2.0.11 now); the fork's semantic-release had climbed to v2.9.0, so the two lines read as if the fork were seven minor versions ahead. The fork's v2.1.0 to v2.9.0 tags and releases are removed, upstream's v2.0.5 to v2.0.11 tags are in the fork, and the commit analyzer now makes feat, fix and perf commits a patch release (a breaking change is still a major one). The next release is v2.0.12. Co-Authored-By: Claude Opus 5.5 --- .releaserc.json | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/.releaserc.json b/.releaserc.json index 180d0216d..48a930478 100644 --- a/.releaserc.json +++ b/.releaserc.json @@ -11,7 +11,25 @@ [ "@semantic-release/commit-analyzer", { - "preset": "conventionalcommits" + "preset": "conventionalcommits", + "releaseRules": [ + { + "breaking": true, + "release": "major" + }, + { + "type": "feat", + "release": "patch" + }, + { + "type": "fix", + "release": "patch" + }, + { + "type": "perf", + "release": "patch" + } + ] } ], [ From 4e6625d531ae21c20f3dd49e98db4d5d5f502d8e Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 9 Nov 2026 23:14:48 +0000 Subject: [PATCH 102/119] chore(release): 2.0.12 [skip ci] [skip release] ## [2.0.12](https://github.com/notquiteog/Hookshot/compare/v2.0.11...v2.0.12) (2026-11-09) ### Features * a timed span per FSR pass, so the cost has a number per pass ([1d7f262](https://github.com/notquiteog/Hookshot/commit/1d7f262574bfe18de93289b34b13ae6011eec0d8)) * add a Quit option to the gameplay menu ([0b02149](https://github.com/notquiteog/Hookshot/commit/0b021491d7ff20607e62a4558b31bf8d8894aacf)) * **audio:** Audio output in the Insert menu: Auto, Stereo or 5.1 ([4856258](https://github.com/notquiteog/Hookshot/commit/48562589704fbf0681496f87c37a55e1f514cc23)), closes [#1182](https://github.com/notquiteog/Hookshot/issues/1182) * census the render target sets, to settle whether a G-buffer exists ([8f2fda3](https://github.com/notquiteog/Hookshot/commit/8f2fda3934792091692a97744af9596c35e57845)) * compile AMD's FSR 3.1 upscaler passes from the FidelityFX SDK ([37afa2e](https://github.com/notquiteog/Hookshot/commit/37afa2e5f80db67a5fb690bcb2289b161e7df922)), closes [#577](https://github.com/notquiteog/Hookshot/issues/577) * compose the scene's view projection, and transpose it for the shader ([df82d90](https://github.com/notquiteog/Hookshot/commit/df82d909aeb0a8b6593f23ae5c847db8c98a99e3)) * count FSR evaluations, because nine passes a call is cheap or ruinous ([85a3ea2](https://github.com/notquiteog/Hookshot/commit/85a3ea21e7dc8f92bb06891b5b35f6d37a075ed2)) * create FSR 3.1's pipelines and internal images ([6b51433](https://github.com/notquiteog/Hookshot/commit/6b51433e8a5ad39920e5e6b6f2652f13d412b00c)) * derive camera motion from the scene's depth, and keep that depth ([29c7cbe](https://github.com/notquiteog/Hookshot/commit/29c7cbe508bc8a7ede6f488f1de315357bfa1f10)) * DLSS at the seam, and a stage switch for the FSR cost ([6aa9f48](https://github.com/notquiteog/Hookshot/commit/6aa9f48f438768ca553915b1a847a39a8a6ba1d4)) * DLSS Super Resolution through NGX, behind a build-time SDK gate ([aff6abb](https://github.com/notquiteog/Hookshot/commit/aff6abbae6a8a8e59776ee83ea2cf9f07161d49d)) * frame generation asks for its own extensions and the whole input set ([ad291d1](https://github.com/notquiteog/Hookshot/commit/ad291d1ee822e176bf228ee3c7d605d98023802f)) * FSR 3 frame interpolation, and a jitter for the upscalers to undo ([384c41b](https://github.com/notquiteog/Hookshot/commit/384c41b473cef2b7008e336f6887d9a321b9d556)) * give FSR the assembled depth and camera motion ([481b957](https://github.com/notquiteog/Hookshot/commit/481b957d7de8e2de2c55945549b834b202233b94)) * HOS_DISPLAY_VRR, which is what actually holds the frame rate at 60 ([c65c68e](https://github.com/notquiteog/Hookshot/commit/c65c68e22597a93a88b632f71c7ac3a53824dae7)) * HOS_FPS_FORCE, because raising the limiter alone does not hold ([2008ac7](https://github.com/notquiteog/Hookshot/commit/2008ac73d6d6f04c1495c2dffd5cd00809c31be7)) * HOS_VSYNC_HZ, the hardcoded 60 that actually paces the game ([5eb9f8b](https://github.com/notquiteog/Hookshot/commit/5eb9f8bc57964f51cbb7285dc44162618ad488d7)) * link NGX properly, frame generation at the seam, AMD's interpolation sources ([43e3360](https://github.com/notquiteog/Hookshot/commit/43e3360aa268fb99ff392d3bbc18c7232265a950)) * Monitor's shape for screens narrower than 16:9 (4:3, 16:10, 5:4) ([b44c9cd](https://github.com/notquiteog/Hookshot/commit/b44c9cd44d1856c693ad76ae8a228d90075b3a80)) * name each network binding's role in the upscaler input contract ([d9566a1](https://github.com/notquiteog/Hookshot/commit/d9566a137825a3733ce0104227142f6472a20eac)) * publish Ocarina's camera, and make a backend reachable without the stand-in ([8bd7c8d](https://github.com/notquiteog/Hookshot/commit/8bd7c8d7924addcd82ab188f9cad7fddd554750c)) * record FSR 3.1's nine dispatches ([8769c80](https://github.com/notquiteog/Hookshot/commit/8769c80ebfd9a3d808389336947ad0324af75313)) * route the game's upscale dispatch through one backend seam ([1a036c8](https://github.com/notquiteog/Hookshot/commit/1a036c843597588eae1f5ba43e9938ea4800c591)) * RX_VK_VP_HUNT, to find the view projection from a value only it holds ([3c02213](https://github.com/notquiteog/Hookshot/commit/3c02213e0ab32736628e00f36fee7eb4cae2851d)) * the hunt found the projection, so widen it to find the view ([2946a32](https://github.com/notquiteog/Hookshot/commit/2946a3228227208d3db67e0a48cc9af84df56d41)) * the parallel lock says which site took it, and the answer is two sites ([b8543c9](https://github.com/notquiteog/Hookshot/commit/b8543c9429ea8afd7451756990497a6bb3b253c7)) * the two backends have rows in the Insert menu ([cf8b3b1](https://github.com/notquiteog/Hookshot/commit/cf8b3b1ac112bdca2e1e144b80a308e22dce0ec5)) * the two lock sites say why they had to take it ([614f552](https://github.com/notquiteog/Hookshot/commit/614f552c3408b7bb6fdc68f18d5649a85a8f4c56)) * the upscaler and frame generation follow the menu while you play ([61d7d4a](https://github.com/notquiteog/Hookshot/commit/61d7d4aa3e334eb6d4e5214e83921a55c0f148d1)) * the upscalers and frame generation are the native settings, not new rows ([a0ce7de](https://github.com/notquiteog/Hookshot/commit/a0ce7de16826b5cba5192e18be5088a3cc2fa1d9)) * the vsync event follows the display, and 0 turns it off ([a67e471](https://github.com/notquiteog/Hookshot/commit/a67e471a2002e8ee6faf62fe2e93adcce5b8ee98)) * **vk:** AMD FSR 4 upscaling and frame generation through AMD's runtime ([65003cc](https://github.com/notquiteog/Hookshot/commit/65003cc7dcdb4055df7c27c3b23cc02beafb2d02)) * **vk:** choose the frame generation method in the Insert menu ([c4f7d84](https://github.com/notquiteog/Hookshot/commit/c4f7d84a3e509a517b1a4e8dd1ea348bfa69ac75)) * **vk:** DLSS 5 neural rendering through NGX directly, beside Streamline ([7784399](https://github.com/notquiteog/Hookshot/commit/778439998fe20a33606079c20adc6a4d7703b928)) * **vk:** DLSS 5 neural rendering, with the model's own settings in the menu ([2851bc6](https://github.com/notquiteog/Hookshot/commit/2851bc6b07b46212f8290e690772d03d1b5fbfd9)) * **vk:** frame generation Auto: a frame for each of the display's refreshes ([a5a7440](https://github.com/notquiteog/Hookshot/commit/a5a744072f385845fb39e19359a6b9741d040cd6)) * **vk:** say why DLSS 5 neural rendering is refused, and the RTX 20-40 route ([60f1d2e](https://github.com/notquiteog/Hookshot/commit/60f1d2ed955eada364be971ffd8ee7890c60f8fd)) * **vk:** time a capture's GPU wait for its late pages apart in the log ([e3b622f](https://github.com/notquiteog/Hookshot/commit/e3b622ff40dff04bf22d9a250d4488926c68b409)) ### Bug Fixes * a fork releases its own work, not upstream's ([47dd097](https://github.com/notquiteog/Hookshot/commit/47dd0978b926c5e0d9fbf4a7bd160a43289cf094)) * a Windows build could ask for DLSS and then fail to link ([d72441a](https://github.com/notquiteog/Hookshot/commit/d72441ab9097d41a44035988c19486d32192f080)) * **audio:** 5.1 surround when the default output has it ([#1124](https://github.com/notquiteog/Hookshot/issues/1124)) ([b0abeca](https://github.com/notquiteog/Hookshot/commit/b0abeca7393ebc37503915b0f42d6c500fd75715)) * **audio:** a finished wave buffer reaches the game at the renderer update, not mid-pass ([28e4a11](https://github.com/notquiteog/Hookshot/commit/28e4a117ed07d269154e85bf36d1f673194b8c60)) * **build:** a Windows build linked the ARM64 NGX library, not the x64 one ([70b7d25](https://github.com/notquiteog/Hookshot/commit/70b7d255b465095f131c808cd27600a82a4e5156)) * **builder:** copies from a read-only install stay writable ([70ffa5e](https://github.com/notquiteog/Hookshot/commit/70ffa5e70e53364736f9796e5163bc7c387a644d)) * **builder:** stop when generated source cleanup fails ([d254e6f](https://github.com/notquiteog/Hookshot/commit/d254e6fbe1e93933cc8fe8878c95ead5d8385b4c)) * **builder:** the window icon is copied writable too ([4b2d871](https://github.com/notquiteog/Hookshot/commit/4b2d87160363d06de4921cbb2d802ead4335a6c7)) * **build:** NGX asks for Microsoft's C++ runtime, which llvm-mingw has not ([114e917](https://github.com/notquiteog/Hookshot/commit/114e917949aa6461a843f2530b3aadb54a3de547)) * **build:** the feature announcement swallowed the whole Vulkan build ([1004f37](https://github.com/notquiteog/Hookshot/commit/1004f37bd79489a3842f311248bbb9ba4c1f891f)) * **build:** the twelve MSVC runtime symbols NGX asks of an llvm-mingw link ([d00159a](https://github.com/notquiteog/Hookshot/commit/d00159a3fb4dea2f462b4d2ada93660201d9e48f)) * clear the SPD counter between the pyramid passes (did not fix the cost) ([66e8c3a](https://github.com/notquiteog/Hookshot/commit/66e8c3a6fd90d3a41abf7a69eaac6f3468e5c06f)) * contain pipeline cache save allocation failures ([4518a20](https://github.com/notquiteog/Hookshot/commit/4518a20aabf455f437c3a08c60a1e82e0e075939)), closes [#1022](https://github.com/notquiteog/Hookshot/issues/1022) * HOS_FPS_FORCE must not touch the nominal rate: it is slow motion on screen ([8681f2e](https://github.com/notquiteog/Hookshot/commit/8681f2e9482ca4d8364919a1c3fdac0935361ea0)) * **lift:** clear an earlier lift's hot pieces before the patches; count every made and raw output-size place ([816a472](https://github.com/notquiteog/Hookshot/commit/816a4728ca4f330183af6fefebefcf67a7c4625e)), closes [#912](https://github.com/notquiteog/Hookshot/issues/912) * **lift:** edit_c in chunks.py, so its tests import without the lift's tools ([1c5258f](https://github.com/notquiteog/Hookshot/commit/1c5258f5d82c07edb673c6f47d041e958d68bb1c)) * **lift:** group page marks after the patches; a missing output-size edit stops the lift ([3fa6300](https://github.com/notquiteog/Hookshot/commit/3fa63001afe0e4fafac6a1efc5980f2a35b4f32f)) * **linux:** the AppImage's parts list names the repository it is built in ([2228816](https://github.com/notquiteog/Hookshot/commit/2228816a2196e146d414e5a6787d3706c8477411)) * narrow screens: window at the picture's shape, save picture's middle band, comments ([3060261](https://github.com/notquiteog/Hookshot/commit/3060261a00c7679feaf67a4718a8afc25defba1c)), closes [#1183](https://github.com/notquiteog/Hookshot/issues/1183) * preserve NUP member names during implicit reads ([1fdfeff](https://github.com/notquiteog/Hookshot/commit/1fdfeff694aa61fdfabb9fc32e0d2e9efdb9cb02)) * publish the camera from the inlined projection copies too ([c630d59](https://github.com/notquiteog/Hookshot/commit/c630d5923ba8d1746ccfcda2583a95365c4b4aa4)) * read the upscaler contract in descriptor order, not from draw_sampled ([492bcd0](https://github.com/notquiteog/Hookshot/commit/492bcd02361733fc3e0b8ce16ee16b69ed28e251)) * **release:** the fork's releases follow upstream's v2.0.x line ([d495994](https://github.com/notquiteog/Hookshot/commit/d4959941381242272ab0f65ecd02cea8671cdbc8)) * **release:** the setup, the Builder and the game update from the repository they were built in ([6fd4364](https://github.com/notquiteog/Hookshot/commit/6fd4364778177e6696d5c6b7380d6d9034b5a36f)) * **release:** the Windows release installs the renderer CI built, with DLSS, NR and FSR 4 ([0fa18bd](https://github.com/notquiteog/Hookshot/commit/0fa18bd32126177b58a9e8f8a44158869cb90f36)) * scan for the view projection once a target set, not once a draw ([12d4d83](https://github.com/notquiteog/Hookshot/commit/12d4d83191446484f10bf621dd7849dcec3142e1)) * snapshot the projection's fields, and name what caps the frame rate ([3790556](https://github.com/notquiteog/Hookshot/commit/37905564f534f3201d555e460145efd5c33d0528)) * the conventionalcommits preset has to match the changelog writer ([ca6595f](https://github.com/notquiteog/Hookshot/commit/ca6595fa42b879361ed0e260784077a231ab8f4c)) * the DLSS contract test links again ([86b6988](https://github.com/notquiteog/Hookshot/commit/86b6988c3bc2039e77ac588ce35d1ca6e792f2b5)) * the game's network takes one texture, so it is not a temporal upscaler ([853cfe3](https://github.com/notquiteog/Hookshot/commit/853cfe379c5bbc215538c57ca7a01a9f96dc4af5)) * the history reset the document specifies, which nothing implemented ([9858599](https://github.com/notquiteog/Hookshot/commit/9858599e9643b0507d88cf340aee24acc1d7847b)) * the host camera symbols must be weak, or the renderer does not load at all ([70ecdf4](https://github.com/notquiteog/Hookshot/commit/70ecdf42b2194ca23710f17cb403f7f9a4ac9d94)) * the release's commit-analyzer preset is a package, and it was not declared ([3ff9fbd](https://github.com/notquiteog/Hookshot/commit/3ff9fbdaebf2773cb03e9a85002b44b1675b1fde)) * the renderer would not load, and the build now says so ([c871a3c](https://github.com/notquiteog/Hookshot/commit/c871a3cc6cd5a76d9198872c8b41e1a004f19d4e)) * the shader check compared glslang's version, and ran where glslang is not ([f48483c](https://github.com/notquiteog/Hookshot/commit/f48483ce0f4d60aec9153c6024d2e1a5a5f29e0d)) * the view projection scan ran per draw, which stuttered hard ([2d9b4e8](https://github.com/notquiteog/Hookshot/commit/2d9b4e8d62923f352896b4c7869bb8eeda609a0a)) * **vk:** a draw that waits for its pipeline runs the build at once if it is still queued ([aafbaf5](https://github.com/notquiteog/Hookshot/commit/aafbaf5d2826c69ac21c7ac3046ec94a3b7aac3c)) * **vk:** DLSS frame generation sets NGX's parameters through its C functions ([2c19b63](https://github.com/notquiteog/Hookshot/commit/2c19b633adc5ae7f7406233013fa3c6a44ff417d)) * **vk:** frame generation Auto: the snap distance is not named near (windows.h defines it empty) ([d156a6d](https://github.com/notquiteog/Hookshot/commit/d156a6d820eb46ebff3b0ba11f9f2e12798c6e76)) * **vk:** keep the last sRGB UNORM surface format, so drivers that list only sRGB keep theirs ([3408437](https://github.com/notquiteog/Hookshot/commit/340843706abdb7fbb1ba3a6fe3c61e1ff845381c)) * **vk:** Linux/Wayland: take an sRGB surface format for the swapchain ([7416487](https://github.com/notquiteog/Hookshot/commit/7416487e3b1ed7af5c65f8326ae3f66c8e1971ef)) * **vk:** no mirror is made inside a parallel replay's segment (an earlier segment read it unfilled) ([8f0ed68](https://github.com/notquiteog/Hookshot/commit/8f0ed6818d5ccaa768d9d0a09551b7894e2d78af)) * **vk:** tag the uplift colour pair as whole resources, as the shipping integration does ([dd3e61e](https://github.com/notquiteog/Hookshot/commit/dd3e61e7da65aa5dafb9271176ee4d2f3b4a38c7)) * **vulkan:** bind only bytes accessed by buffer-image copies ([b0a9034](https://github.com/notquiteog/Hookshot/commit/b0a9034f0d5c89c7e9ff4cf1e08991d05dedd00b)) * **vulkan:** clean up failed mesh argument initialization ([b2f5692](https://github.com/notquiteog/Hookshot/commit/b2f5692111479af71dc0ac5d73660be775c22737)) * **vulkan:** preserve guest mip levels in partial clears ([d7a1207](https://github.com/notquiteog/Hookshot/commit/d7a1207b94f3d02415f8a8969618d12d3f76a3da)) * **vulkan:** release modules from rejected cache records ([2838e89](https://github.com/notquiteog/Hookshot/commit/2838e89c15964afa1f9396d0c23417b36b93bae5)) * **widescreen:** the save picture shows the middle 16:9 on ultrawide ([#952](https://github.com/notquiteog/Hookshot/issues/952)) ([e2e155e](https://github.com/notquiteog/Hookshot/commit/e2e155ee75cec98f808931b7dd9a851ad0ba7830)) ### Performance Improvements * **fpx:** keep the hardware result for FMUL/FMLA S when the flags are already set ([6de3bf1](https://github.com/notquiteog/Hookshot/commit/6de3bf1c614e2ae9ee2187b78a732280c53966a8)) * **lift:** one page mark per straight-line group of stores through a base register ([825861b](https://github.com/notquiteog/Hookshot/commit/825861b7f2c92425c33ee74b7ba2a846e9f9e389)) * **lift:** the interrupt poll before each backward goto, calling a64_poll_cur() with no argument, so a loop's guest registers stay in host registers ([0d6ed03](https://github.com/notquiteog/Hookshot/commit/0d6ed03f81df1651cc37f254ebedd588b2c3f06a)) * stream sampled profiles instead of loading every line ([8cf6d1e](https://github.com/notquiteog/Hookshot/commit/8cf6d1e60602505145a87eac9c14c3d5742d0937)) --- changelog.txt | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/changelog.txt b/changelog.txt index 6d96a47c1..686ea0c55 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,100 @@ --------------------------------------------------------------------------------------------------- +Version: 2.0.12 +Date: 09. 11. 2026 + Features: + - Vk: Choose the frame generation method in the Insert menu. + - Vk: DLSS 5 neural rendering through NGX directly, beside Streamline. + - Vk: Say why DLSS 5 neural rendering is refused, and the RTX 20-40 route. + - Vk: AMD FSR 4 upscaling and frame generation through AMD's runtime. + - Monitor's shape for screens narrower than 16:9 (4:3, 16:10, 5:4). + - Audio: Audio output in the Insert menu: Auto, Stereo or 5.1. + - Add a Quit option to the gameplay menu. + - Vk: Time a capture's GPU wait for its late pages apart in the log. + - Vk: DLSS 5 neural rendering, with the model's own settings in the menu. + - The upscaler and frame generation follow the menu while you play. + - The two lock sites say why they had to take it. + - The parallel lock says which site took it, and the answer is two sites. + - The upscalers and frame generation are the native settings, not new rows. + - Vk: Frame generation Auto: a frame for each of the display's refreshes. + - FSR 3 frame interpolation, and a jitter for the upscalers to undo. + - The two backends have rows in the Insert menu. + - Frame generation asks for its own extensions and the whole input set. + - Link NGX properly, frame generation at the seam, AMD's interpolation sources. + - DLSS at the seam, and a stage switch for the FSR cost. + - A timed span per FSR pass, so the cost has a number per pass. + - Count FSR evaluations, because nine passes a call is cheap or ruinous. + - Compose the scene's view projection, and transpose it for the shader. + - The hunt found the projection, so widen it to find the view. + - DLSS Super Resolution through NGX, behind a build-time SDK gate. + - RX_VK_VP_HUNT, to find the view projection from a value only it holds. + - The vsync event follows the display, and 0 turns it off. + - HOS_VSYNC_HZ, the hardcoded 60 that actually paces the game. + - HOS_DISPLAY_VRR, which is what actually holds the frame rate at 60. + - HOS_FPS_FORCE, because raising the limiter alone does not hold. + - Give FSR the assembled depth and camera motion. + - Derive camera motion from the scene's depth, and keep that depth. + - Publish Ocarina's camera, and make a backend reachable without the stand-in. + - Record FSR 3.1's nine dispatches. + - Create FSR 3.1's pipelines and internal images. + - Census the render target sets, to settle whether a G-buffer exists. + - Compile AMD's FSR 3.1 upscaler passes from the FidelityFX SDK. + - Route the game's upscale dispatch through one backend seam. + - Name each network binding's role in the upscaler input contract. + Bugfixes: + - Release: The fork's releases follow upstream's v2.0.x line. + - Release: The setup, the Builder and the game update from the repository they were built in. + - Vk: DLSS frame generation sets NGX's parameters through its C functions. + - Vk: Frame generation Auto: the snap distance is not named near (windows.h defines it empty). + - Linux: The AppImage's parts list names the repository it is built in. + - Release: The Windows release installs the renderer CI built, with DLSS, NR and FSR 4. + - Lift: Edit_c in chunks.py, so its tests import without the lift's tools. + - Narrow screens: window at the picture's shape, save picture's middle band, comments. + - Vulkan: Bind only bytes accessed by buffer-image copies. + - Lift: Clear an earlier lift's hot pieces before the patches; count every made and raw output-size place. + - Lift: Group page marks after the patches; a missing output-size edit stops the lift. + - Build: The twelve MSVC runtime symbols NGX asks of an llvm-mingw link. + - Build: The feature announcement swallowed the whole Vulkan build. + - Vk: Tag the uplift colour pair as whole resources, as the shipping integration does. + - Build: NGX asks for Microsoft's C++ runtime, which llvm-mingw has not. + - Builder: Stop when generated source cleanup fails. + - Build: A Windows build linked the ARM64 NGX library, not the x64 one. + - A Windows build could ask for DLSS and then fail to link. + - Audio: A finished wave buffer reaches the game at the renderer update, not mid-pass. + - Audio: 5.1 surround when the default output has it (#1124). + - Widescreen: The save picture shows the middle 16:9 on ultrawide (#952). + - Preserve NUP member names during implicit reads. + - Vk: No mirror is made inside a parallel replay's segment (an earlier segment read it unfilled). + - Vk: A draw that waits for its pipeline runs the build at once if it is still queued. + - Vulkan: Clean up failed mesh argument initialization. + - Builder: The window icon is copied writable too. + - Vk: Keep the last sRGB UNORM surface format, so drivers that list only sRGB keep theirs. + - Vk: Linux/Wayland: take an sRGB surface format for the swapchain. + - Vulkan: Release modules from rejected cache records. + - Vulkan: Preserve guest mip levels in partial clears. + - Builder: Copies from a read-only install stay writable. + - Contain pipeline cache save allocation failures. + - The history reset the document specifies, which nothing implemented. + - The conventionalcommits preset has to match the changelog writer. + - The release's commit-analyzer preset is a package, and it was not declared. + - A fork releases its own work, not upstream's. + - The shader check compared glslang's version, and ran where glslang is not. + - The DLSS contract test links again. + - The renderer would not load, and the build now says so. + - Scan for the view projection once a target set, not once a draw. + - Clear the SPD counter between the pyramid passes (did not fix the cost). + - The view projection scan ran per draw, which stuttered hard. + - HOS_FPS_FORCE must not touch the nominal rate: it is slow motion on screen. + - The host camera symbols must be weak, or the renderer does not load at all. + - Snapshot the projection's fields, and name what caps the frame rate. + - Publish the camera from the inlined projection copies too. + - The game's network takes one texture, so it is not a temporal upscaler. + - Read the upscaler contract in descriptor order, not from draw_sampled. + Optimizations: + - Stream sampled profiles instead of loading every line. + - Lift: One page mark per straight-line group of stores through a base register. + - Fpx: Keep the hardware result for FMUL/FMLA S when the flags are already set. + - Lift: The interrupt poll before each backward goto, calling a64_poll_cur() with no argument, so a loop's guest registers stay in host registers. +--------------------------------------------------------------------------------------------------- Version: 2.9.0 Date: 09. 11. 2026 Features: From 4c1e3d1eb5dc45846d9b3eceb7cd7c1418d6d611 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 17:26:22 -0600 Subject: [PATCH 103/119] test(vk): a correctness harness for OpenDLSS-NR on this GPU, on synthetic data There are no real weights to test with, so scripts/opennr_harness.py builds upstream's own dlss5vk tool from the vendored sources with the renderer's compiler, shim and portability patch, gives it the kernels the renderer ships, a synthetic model directory in exactly upstream's manifest layout (153 records, 11 stage files, SHA-256s, scaled so the activations stay alive through all 71 blocks, which it checks) and a synthetic frame, and lets upstream's own checkers give the verdicts: - the GLSL reference route (unfused, every PTX family off, the PTX folder empty) is the reference for all 75 boundaries and the head; - upstream's parity runs every other route against it; - upstream's verify runs block 0 against the CPU reference, built in two models of the tensor cores: upstream's (Ada: FP8 k32 as two groups of 16, F13; FP16 k16 as two of 8, F24) and one group per MMA step (FP8 32 products, FP16 16), which is what this Blackwell card matches exactly while it differs from the Ada model by an ulp in a quarter to a half of every tensor-core kernel's values. tests/test_opennr_harness.py is its quick form (384x256, ~20 s); it says SKIP without the GPU, Vulkan, a compiler or the headers. Co-Authored-By: Claude Opus 5.5 --- scripts/opennr_harness.py | 653 +++++++++++++++++++++++++++++++++++ tests/run_all.py | 5 + tests/test_opennr_harness.py | 36 ++ 3 files changed, 694 insertions(+) create mode 100644 scripts/opennr_harness.py create mode 100644 tests/test_opennr_harness.py diff --git a/scripts/opennr_harness.py b/scripts/opennr_harness.py new file mode 100644 index 000000000..8e8e765e6 --- /dev/null +++ b/scripts/opennr_harness.py @@ -0,0 +1,653 @@ +"""The open neural rendering backend's correctness harness: OpenDLSS-NR on this GPU, on synthetic data. + +There are no real weights on any machine this is run on, and Hookshot provides no way to get them (the player +supplies a model directory; docs/neural-rendering.md). So this proves the integration the only way it can be +proved without them: it builds OpenDLSS-NR's own `dlss5vk` tool from the vendored sources with Hookshot's compiler +(the same portability patches and Vulkan shim the renderer builds with), gives it the kernels the renderer ships +(the checked-in SPIR-V and the generated PTX), a synthetic model directory in exactly the layout upstream's +docs/weights.md describes, and a synthetic frame, and then lets upstream's own checkers give the verdicts: + +1. the GLSL reference route (DLSS5VK_UNFUSED=1, "exact and complete on its own", with every PTX family switched off + too, since UNFUSED alone still runs the ViT's PTX GEMMs) is run once and its 75 block boundaries and its head are + kept as references -- a fixture of the kind upstream's `parity` reads; +2. `dlss5vk verify` runs block 0 kernel by kernel against the CPU reference (src/reference.cpp) on the GPU's own + inputs: the pre adapter, FFN, QKV, window normalize, window attention and projection. Upstream's CPU reference + covers block 0 only (its docs/numerics.md: the expert FFN, the 512 split block and the ViT have none); +3. `dlss5vk parity` runs every route against those references -- the GLSL reference route again (repeatability), + upstream's DLSS5VK_UNFUSED=1 alone, the default fast route (PTX through VK_NV_cuda_kernel_launch, counter chaining), the fast route with barriers + (DLSS5VK_CHAIN=0) and the fused GLSL route (every DLSS5VK_PTX_* off) -- each on all 75 boundaries and the head, + with upstream's verdicts: bit-exact, equal only up to the sign of zero (a failure), or a mismatch. + +The synthetic weights are drawn so the activations stay alive through all 71 blocks (scaled to each matrix's fan-in, +with sane skip scales and attention temperatures): equality of all-zero or all-saturated tensors would prove +nothing, so the harness also measures the boundary references and fails a fixture whose tensors are degenerate. +This is also what a later AMD port is checked against: the references come from the GLSL route, which is the +specification. + + python -I -B scripts/opennr_harness.py run [--size 384x256] [--thorough] [--cxx clang++] [--headers DIR] + python -I -B scripts/opennr_harness.py model DIR [--seed N] # only the synthetic model directory + +Exit 0 when every check passes, 1 on a failure, and 0 with a line starting "SKIP:" when this PC cannot run it (no +compiler, no Vulkan headers, no Vulkan, or a GPU without the extensions the network needs). +""" +import argparse +import concurrent.futures +import hashlib +import json +import math +import os +import re +import shutil +import statistics +import struct +import subprocess +import sys +import tempfile +import time +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(ROOT / "scripts")) +import opennr_kernels # noqa: E402 (the kernel lists and the portability patches the renderer's build uses too) + +SHIM = ROOT / "gpu" / "vk" / "opennr" +BLOCKS = 71 +SKIP_TEXT = ("no device with VK_KHR_cooperative_matrix", "vulkan-1.dll unavailable", "no Vulkan physical devices", + "vkCreateDevice(physical_, &deviceInfo, nullptr, &device_) failed") + + +# ---- the synthetic model directory ---------------------------------------------------------------------------- +# Upstream's layouts (src/nr_graph.cpp fusedLayout, preFusedLayout, upsampleFusedLayout, postFusedLayout; its +# docs/weights.md), as regions of one tensor record: (offset, bytes, kind, parameter). Kinds: "w" an E4M3 matrix with +# that fan-in, "s" f16 skip / merge scales, "p" the f16 attention priors, "t" f32 attention temperatures, "a" an f16 +# matrix (the input adapter and the head), "z" zero padding. + +def align(v, a): + return (v + a - 1) // a * a + + +def fused_regions(c, transition=0): + heads, out = c // 32, [] + if c >= 64: + e = c // 32 + out += [(0, e * c * 128, "w", c), (e * c * 128, e * 128 * 32, "w", 128), (e * c * 128 + e * 128 * 32, c * c, "w", c)] + at = e * c * 128 + e * 128 * 32 + c * c + else: + out += [(0, c * 128, "w", c), (c * 128, 128 * c, "w", 128)] + at = c * 128 + 128 * c + out += [(at, 16, "z", 0), (at + 16, 2 * c, "s", c)] + at += 16 + 2 * c + out += [(at, 16, "z", 0)] + at += 16 + return out + attention_regions(at, c, heads, transition) + + +def attention_regions(at, c, heads, transition, tail=16): + out = [(at, 3 * c * c, "w", c), (at + 3 * c * c, heads * 8192, "p", heads)] + at += 3 * c * c + heads * 8192 + out += [(at, align(4 * heads, 16), "t", heads)] + at += align(4 * heads, 16) + out += [(at, c * c, "w", c), (at + c * c, 2 * c, "s", c)] + at += c * c + 2 * c + out += [(at, transition, "w", c)] if transition else [(at, tail, "z", 0)] if tail else [] + return out + + +def upsample_regions(c): + heads, e = c // 32, c // 32 + if c >= 64: + out = [(0, e * c * 128, "w", c), (e * c * 128, e * 128 * 32, "w", 128), (e * c * 128 + e * 128 * 32, c * c, "w", c)] + at = e * c * 128 + e * 128 * 32 + c * c + else: + out = [(0, c * 128, "w", c), (c * 128, 128 * c, "w", 128)] + at = c * 128 + 128 * c + pad = 16 if c == 32 else 0 + out += [(at, 2 * c * c, "w", 2 * c)] + at += 2 * c * c + if pad: + out += [(at, pad, "z", 0)] + at += pad + out += [(at, 2 * c, "s", c)] + at += 2 * c + if pad: + out += [(at, pad, "z", 0)] + at += pad + out += [(at, 2 * c, "s", c)] + at += 2 * c + return out + attention_regions(at, c, heads, 0) + + +def pre_regions(): # block 0: preFusedLayout, + 16 bytes + return [(0, 4096, "w", 32), (4096, 4096, "w", 128), (8192, 16, "z", 0), (8208, 1024, "a", 16), (9232, 64, "s", 32), + (9296, 16, "z", 0)] + attention_regions(9312, 32, 1, 0) + + +def post_regions(): # block 70: postFusedLayout, exactly its end + return [(0, 4096, "w", 32), (4096, 4096, "w", 128), (8192, 16, "z", 0), (8208, 64, "s", 32), (8272, 64, "s", 32), + (8336, 64, "s", 32)] + attention_regions(8400, 32, 1, 0, tail=0) + [(20768, 16, "z", 0), (20784, 1024, "a", 32)] + + +def split_regions(): # a 512 block: four records + return {0: [(0, 512 * 512, "w", 512), (262144, 8 * 64 * 256, "w", 64), (393216, 8 * 256 * 64, "w", 256)], + 1: [(0, 512 * 512, "w", 512), (262144, 1024, "s", 512)], + 2: [(0, 512 * 1536, "w", 512), (786432, 16 * 8192, "p", 16), (917504, 64, "t", 16)], + 3: [(0, 512 * 512, "w", 512), (262144, 1024, "s", 512)]} + + +def vit_regions(): + return {0: [(0, 1024 * 4096, "w", 1024)], + 1: [(0, 4096 * 1024, "w", 4096), (4194304, 2048, "s", 1024)], + 2: [(0, 128, "t", 32), (128, 1024 * 3072, "w", 1024)], + 3: [(0, 2, "s", 1)], # (upstream's graph never reads these two bytes) + 4: [(0, 1024 * 1024, "w", 1024), (1048576, 2048, "s", 1024)]} + + +def model_records(): + """(block, layer, parameter, regions) for every tensor record: 153, as upstream's docs/weights.md counts them""" + rec = [] + stage_of = {} + channels = {**{b: 32 for b in range(0, 5)}, **{b: 64 for b in range(5, 9)}, **{b: 128 for b in range(9, 15)}, + **{b: 256 for b in range(15, 23)}, **{b: 256 for b in range(48, 56)}, **{b: 128 for b in range(56, 62)}, + **{b: 64 for b in range(62, 66)}, **{b: 32 for b in range(66, 70)}} + for b in range(BLOCKS): + if b == 0: + rec.append((b, 0, "layer", pre_regions())) + elif b == 70: + rec.append((b, 0, "layer", post_regions())) + rec.append((b, 0, "blend_scale", [(0, 2, "b", 0)])) + elif 23 <= b <= 30 or 40 <= b <= 47: + for layer, regions in split_regions().items(): + rec.append((b, layer, "layer", regions)) + if b == 30: + rec.append((b, 4, "layer", [(0, 512 * 1024, "w", 512)])) + elif 31 <= b <= 38: + for layer, regions in vit_regions().items(): + rec.append((b, layer, "layer", regions)) + elif b == 39: + rec.append((b, 0, "layer", [(0, 1024 * 512, "w", 1024), (524288, 1024, "s", 512)])) + elif b in (48, 56, 62, 66): + rec.append((b, 0, "layer", upsample_regions(channels[b]))) + else: + c = channels[b] + rec.append((b, 0, "layer", fused_regions(c, transition=c * 2 * c if b in (4, 8, 14, 22) else 0))) + return rec + + +E4M3 = sorted({(((-1) ** s) * ((m / 8) * 2.0 ** -6 if e == 0 else (1 + m / 8) * 2.0 ** (e - 7)), (s << 7) | (e << 3) | m) + for s in (0, 1) for e in range(16) for m in range(8) if not (e == 15 and m == 7)}) + + +def e4m3_code(value): + best = min(E4M3, key=lambda vc: (abs(vc[0] - value), vc[1])) + return best[1] + + +def gaussian_table(sigma): + """256 E4M3 codes at the quantiles of N(0, sigma): mapping a uniform byte through it gives that distribution""" + nd = statistics.NormalDist(0.0, sigma) + return bytes(e4m3_code(nd.inv_cdf((b + 0.5) / 256.0)) for b in range(256)) + + +def f16(value): + return struct.pack(" 32 input adapter (fan-in 16) or the 32 -> 4 head (fan-in 32) + scale = 1.0 / math.sqrt(param) + return b"".join(f16(((r[2 * i] - 127.5) / 127.5) * scale) for i in range(length // 2)) + if kind == "b": # the temporal blend's learned cap + return f16(0.7397) + raise ValueError(kind) + + +def write_model(directory, seed=1): + """A model directory in upstream's layout (src/nr_model.cpp: manifest.json, stage files under model/), filled + with deterministic synthetic values. Returns the manifest.""" + directory = Path(directory) + (directory / "model").mkdir(parents=True, exist_ok=True) + records = model_records() + tables, stages, tensors = {}, [], [] + # eleven stage files, as the shipped model has: the records split in eleven runs of consecutive blocks + per = math.ceil(len(records) / 11) + for s in range(11): + chunk = records[s * per:(s + 1) * per] + if not chunk: + continue + sid, blob = "stage%02d" % s, bytearray() + for block, layer, parameter, regions in chunk: + name = "block%d.layer%d.%s" % (block, layer, parameter) + length = max(o + n for o, n, _, _ in regions) + data = bytearray(length) + for i, (o, n, kind, param) in enumerate(regions): + data[o:o + n] = region_bytes(seed, "%s/%d" % (name, i), n, kind, param, tables, + GAIN_DECODER if block >= 39 else GAIN) + tensors.append({"name": name, "block": block, "layer": layer, "parameter": parameter, "stage": sid, + "stageOffset": len(blob), "byteLength": length}) + blob += data + blob += bytes(align(len(blob), 16) - len(blob)) + (directory / "model" / (sid + ".bin")).write_bytes(blob) + stages.append({"id": sid, "file": sid + ".bin", "packedByteLength": len(blob), + "sha256": hashlib.sha256(blob).hexdigest().upper()}) # (upstream's sha256Hex is upper case) + manifest = {"synthetic": "scripts/opennr_harness.py, seed %d: not a trained model" % seed, + "totals": {"blockCount": BLOCKS, "tensorCount": len(tensors)}, "stages": stages, "tensors": tensors} + (directory / "manifest.json").write_text(json.dumps(manifest, indent=1), encoding="utf-8") + return manifest + + +# ---- the tool, the kernels and the fixture --------------------------------------------------------------------- + +# The CPU reference's model of the tensor cores. Upstream's src/reference.cpp is Ada's (its docs/numerics.md): an FP8 +# m16n8k32 step is two fixed-point groups of 16 products with 13 fractional bits, an FP16 m16n8k16 step two groups of +# 8 with 24, each group rounded to half before the next. Measured here on an RTX 5060 Ti (Blackwell, driver +# 615.71.09) that is NOT what the hardware does: every tensor-core kernel of block 0 differed from it by an ulp in a +# quarter to a half of its values, while the four GPU routes agreed with each other bit for bit. It matched exactly +# with each step as ONE group -- 32 FP8 products with at least 19 fractional bits, 16 FP16 products with at least +# 25 (fewer bits did not match; more could not be told apart on this data). So the harness builds the reference both +# ways, with the group width and fraction as the only change, and says which one the GPU equals. +MMA_MODELS = [ + ("Ada's arithmetic (upstream's reference as it is)", []), + ("one fused group per MMA step (FP8 32 products F24, FP16 16 products F25)", + ["-DOPENNR_FP8_GROUP=32", "-DOPENNR_FP8_F=24", "-DOPENNR_F16_GROUP=16", "-DOPENNR_F16_F=25"]), +] +# (the harness-only change to a copy of reference.cpp: the group width and the fraction bits as macros, whose +# defaults are upstream's numbers, so the first model above compiles to upstream's reference exactly) +REFERENCE_PATCHES = [ + ('#include "numeric.h"\n', + '#include "numeric.h"\n\n#ifndef OPENNR_FP8_GROUP\n#define OPENNR_FP8_GROUP 16\n#endif\n#ifndef OPENNR_FP8_F\n' + '#define OPENNR_FP8_F 13\n#endif\n#ifndef OPENNR_F16_GROUP\n#define OPENNR_F16_GROUP 8\n#endif\n#ifndef OPENNR_F16_F\n' + '#define OPENNR_F16_F 24\n#endif\n'), + ("exponent - maximumExponent + 13)) * 0.0001220703125", "exponent - maximumExponent + OPENNR_FP8_F)) * std::ldexp(1.0, -OPENNR_FP8_F)"), + ("ea + eb - maximumExponent + 13)) * 0.0001220703125", "ea + eb - maximumExponent + OPENNR_FP8_F)) * std::ldexp(1.0, -OPENNR_FP8_F)"), + ("exponent - maximumExponent + 24));", "exponent - maximumExponent + OPENNR_F16_F));"), + ("ea + eb - maximumExponent + 24));", "ea + eb - maximumExponent + OPENNR_F16_F));"), + ("return fixedToF16(fixedSum, maximumExponent - 24);", "return fixedToF16(fixedSum, maximumExponent - OPENNR_F16_F);"), + (" sums = adaFp8Fdpa16(a, b, 16, sums);\n sums = adaFp8Fdpa16(a + 16, b + 16, 16, sums);", + " for (int g = 0; g < 32; g += OPENNR_FP8_GROUP) sums = adaFp8Fdpa16(a + g, b + g, OPENNR_FP8_GROUP, sums);"), + (" float score = adaFp8Fdpa16(q, keys[keyLocal], 16, prior);\n" + " score = adaFp8Fdpa16(q + 16, keys[keyLocal] + 16, 16, score);", + " float score = prior;\n" + " for (int g = 0; g < 32; g += OPENNR_FP8_GROUP) score = adaFp8Fdpa16(q + g, keys[keyLocal] + g, OPENNR_FP8_GROUP, score);"), + (" for (uint32_t group = 0; group < 4; ++group) {\n float w[16], v[16];\n" + " for (uint32_t i = 0; i < 16; ++i) {\n uint32_t keyLocal = inverseTiledToken(group * 16 + i);", + " for (uint32_t group = 0; group < 64 / OPENNR_FP8_GROUP; ++group) {\n float w[32], v[32];\n" + " for (uint32_t i = 0; i < OPENNR_FP8_GROUP; ++i) {\n" + " uint32_t keyLocal = inverseTiledToken(group * OPENNR_FP8_GROUP + i);"), + (" value = adaFp8Fdpa16(w, v, 16, value);", " value = adaFp8Fdpa16(w, v, OPENNR_FP8_GROUP, value);"), + (" float a[8], b[8];\n for (uint32_t base = 0; base < K; base += 8) {\n for (uint32_t i = 0; i < 8; ++i) {", + " float a[16], b[16];\n for (uint32_t base = 0; base < K; base += OPENNR_F16_GROUP) {\n" + " for (uint32_t i = 0; i < OPENNR_F16_GROUP; ++i) {"), + (" value = adaF16Fdpa8(a, b, 8, value);", " value = adaF16Fdpa8(a, b, OPENNR_F16_GROUP, value);"), +] + + +def build_tool(work, cxx, headers): + """upstream's dlss5vk, once per MMA model: [(model label, executable)]""" + src = opennr_kernels.prepare_sources(work / "src") + text = (src / "reference.cpp").read_text(encoding="utf-8") + for old, new in REFERENCE_PATCHES: + if text.count(old) != 1: + raise RuntimeError("the harness's reference patch no longer matches upstream's reference.cpp: " + old[:60]) + text = text.replace(old, new) + (work / "reference_models.cpp").write_text(text, encoding="utf-8") + obj = work / "obj" + obj.mkdir(exist_ok=True) + flags = ["-std=c++20", "-O2", "-DVK_NO_PROTOTYPES", "-DVK_ENABLE_BETA_EXTENSIONS", "-I" + str(SHIM), "-I" + headers, + "-I" + str(src)] + common = [f for f in sorted(src.glob("*.cpp")) if f.name != "reference.cpp"] + [SHIM / "volk_shim.cpp"] + jobs = [(f, obj / (f.stem + ".o"), []) for f in common] + jobs += [(work / "reference_models.cpp", obj / ("reference_%d.o" % i), d) for i, (_, d) in enumerate(MMA_MODELS)] + + def one(job): + f, o, defines = job + r = subprocess.run([cxx, *flags, *defines, "-c", str(f), "-o", str(o)], stdout=subprocess.PIPE, + stderr=subprocess.STDOUT) + return f.name, r.returncode, r.stdout.decode("utf-8", "replace") + with concurrent.futures.ThreadPoolExecutor(os.cpu_count() or 4) as ex: + for name, code, out in ex.map(one, jobs): + if code: + raise RuntimeError("compiling %s failed:\n%s" % (name, out[-3000:])) + tools = [] + for i, (label, _) in enumerate(MMA_MODELS): + exe = work / ("dlss5vk" if i == 0 else "dlss5vk-model%d" % i) + r = subprocess.run([cxx, *[str(o) for _, o, d in jobs[:len(common)]], str(obj / ("reference_%d.o" % i)), "-o", + str(exe)] + (["-ldl"] if os.name != "nt" else []), + stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + if r.returncode: + raise RuntimeError("linking dlss5vk failed:\n" + r.stdout.decode("utf-8", "replace")[-3000:]) + tools.append((label, exe)) + return tools + + +def geometry(w, h): + """upstream's Geometry::fromValid (src/nr_graph.cpp)""" + def reductions(v): + r, s = 0, v + for level in range(6): + half = align((s + 1) // 2, 4) + r += half < s + r += level == 0 and half % 8 != 0 + s = half + return 1 << r + aw, ah = reductions(w), reductions(h) + fw, fh = max(320, align(w, aw)), max(320, align(h, ah)) + if fw % (4 * aw) == 0 and fh % (4 * ah) == 0: + fw += aw + levels, x, y = [], fw, fh + for _ in range(6): + x, y = align((x + 1) // 2, 4), align((y + 1) // 2, 4) + levels.append((x, y)) + return (fw, fh), levels + + +def boundaries(w, h): + """name -> (width, height, channels) of the 75 boundaries upstream's parity compares (Graph::referenceBoundaryNames)""" + (fw, fh), lv = geometry(w, h) + def level_of(block): + if block == 0: return (fw, fh), 32 + for first, last, level, c in ((1, 4, 0, 32), (5, 8, 1, 64), (9, 14, 2, 128), (15, 22, 3, 256), (23, 30, 4, 512), + (31, 38, 5, 1024), (39, 47, 4, 512), (48, 55, 3, 256), (56, 61, 2, 128), + (62, 65, 1, 64), (66, 69, 0, 32)): + if first <= block <= last: + return lv[level], c + raise ValueError(block) + out = {} + for block in range(70): + (bw, bh), c = level_of(block) + out["block-%d" % block] = (bw, bh, c) + nxt = {0: (0, 32), 4: (1, 64), 8: (2, 128), 14: (3, 256), 22: (4, 512)}.get(block) + if nxt: + out["transition-%d-%d" % (block, block + 1)] = (*lv[nxt[0]], nxt[1]) + return out + + +def synthetic_frame(w, h): + """An RGBA f32 frame of code values with gradients, edges and fine texture, deterministic""" + rows = [] + r = stream(7, "frame", w * h) + for y in range(h): + for x in range(w): + u, v = x / max(1, w - 1), y / max(1, h - 1) + checker = 0.25 if ((x // 24) + (y // 24)) % 2 else 0.0 + ring = 0.5 + 0.5 * math.sin(math.hypot(x - w * 0.6, y - h * 0.4) * 0.15) + grain = (r[y * w + x] - 127.5) / 2550.0 + rows.append(struct.pack("<4f", min(1.0, max(0.0, 0.15 + 0.6 * u + checker + grain)), + min(1.0, max(0.0, 0.2 + 0.5 * ring + grain)), + min(1.0, max(0.0, 0.85 - 0.6 * v + grain)), 1.0)) + return b"".join(rows) + + +def write_fixture(d, w, h, refs=None, head=None, conditioning=None): + """A proxy fixture for upstream's parity. Without refs: zero placeholders of the right sizes (the bootstrap run, + whose dumps become the references).""" + d.mkdir(parents=True, exist_ok=True) + (fw, fh), _ = geometry(w, h) + if not (d / "proxy.f32").is_file(): + (d / "proxy.f32").write_bytes(synthetic_frame(w, h)) + blocks, transitions = [], [] + for name, (bw, bh, c) in boundaries(w, h).items(): + f = name + ".u8" + src = (refs / f) if refs else None + (d / f).write_bytes(src.read_bytes() if src else bytes(bw * bh * c)) + entry = {"width": bw, "height": bh, "channels": c, "file": f} + if name.startswith("block-"): + blocks.append({"block": int(name[6:]), **entry}) + else: + transitions.append({"id": name[len("transition-"):], **entry}) + (d / "head.f32").write_bytes(head.read_bytes() if head else bytes(fw * fh * 16)) + cond = conditioning or {"localTone": 1.0, "localStructure": 1.0, "skinStructure": 1.0, "style": 0} + manifest = {"sourceDimensions": [w, h], "fullDimensions": [fw, fh], + "proxy": {"width": w, "height": h, "file": "proxy.f32"}, "conditioning": cond, "seed": 1234, + "autoMask": True, "checks": ["boundaries", "head"], "blocks": blocks, "transitions": transitions, + "referenceHead": {"file": "head.f32"}} + (d / "manifest.json").write_text(json.dumps(manifest, indent=1), encoding="utf-8") + + +def features_fixture(d, w, h, features, block0): + """The fixture `verify` reads: the recorded features and the block-0 reference""" + d.mkdir(parents=True, exist_ok=True) + (fw, fh), _ = geometry(w, h) + shutil.copyfile(features, d / "features.f32") + shutil.copyfile(block0, d / "block-0.u8") + manifest = {"sourceDimensions": [w, h], "fullDimensions": [fw, fh], "inputFeatures": {"file": "features.f32"}, + "checks": ["boundaries"], "blocks": [{"block": 0, "width": fw, "height": fh, "channels": 32, + "file": "block-0.u8"}]} + (d / "manifest.json").write_text(json.dumps(manifest, indent=1), encoding="utf-8") + + +def degenerate(refs, w, h): + """Boundaries whose codes are mostly zero or saturated: equality there would prove little""" + bad = [] + for name in boundaries(w, h): + data = (refs / (name + ".u8")).read_bytes() + zero = data.count(0) + data.count(0x80) + sat = data.count(0x7e) + data.count(0xfe) + distinct = len(set(data)) + # (a few percent saturated is what a deep stack of random layers does at the larger fields; a tensor that + # is a fifth saturated, half zero or on under 48 codes would make equality cheap) + if zero > 0.5 * len(data) or sat > 0.2 * len(data) or distinct < 48: + bad.append("%s (%.0f%% zero, %.1f%% saturated, %d distinct codes)" % + (name, 100.0 * zero / len(data), 100.0 * sat / len(data), distinct)) + return bad + + +# No PTX at all: every switch upstream has for a PTX family (DLSS5VK_UNFUSED=1 alone still runs the PTX GEMMs of the +# ViT), and the PTX folder pointed at an empty one -- upstream's code fails loudly on a PTX file it cannot read, so a +# route that finishes with it is proved to have launched none. +NO_PTX = {**{k: "0" for k in ("DLSS5VK_PTX_GEMM", "DLSS5VK_PTX_GEMMT", "DLSS5VK_PTX_GEMMV", "DLSS5VK_PTX_BLOCK32", + "DLSS5VK_PTX_FFN", "DLSS5VK_PTX_QKV", "DLSS5VK_PTX_ATTN")}, "DLSS5VK_NO_PTX_MLP": "1"} +REFERENCE_ROUTE = {**NO_PTX, "DLSS5VK_UNFUSED": "1"} +ROUTES = [ + ("GLSL reference route (unfused, no PTX)", REFERENCE_ROUTE), + ("upstream's DLSS5VK_UNFUSED=1 alone", {"DLSS5VK_UNFUSED": "1"}), + ("default route (PTX + counter chaining)", {}), + ("PTX route with barriers (DLSS5VK_CHAIN=0)", {"DLSS5VK_CHAIN": "0"}), + ("fused GLSL route (no PTX)", NO_PTX), +] + + +def tool(exe, kernels, args, env_extra, log): + env = {k: v for k, v in os.environ.items() if not k.startswith("DLSS5VK_")} + env.update(env_extra) + if env_extra.get("DLSS5VK_NO_PTX_MLP"): + empty = kernels / "no-ptx" + empty.mkdir(exist_ok=True) + env["DLSS5VK_PTX_DIR"] = str(empty) + t = time.time() + r = subprocess.run([str(exe), *args, "--shaders", str(kernels / "shaders")], env=env, stdout=subprocess.PIPE, + stderr=subprocess.STDOUT) + out = r.stdout.decode("utf-8", "replace") + log.write_text(out, encoding="utf-8") + return r.returncode, out, time.time() - t + + +def skip_reason(out): + for text in SKIP_TEXT: + if text in out: + return out.strip().splitlines()[-1] + return None + + +def run(a): + cxx = a.cxx or shutil.which("clang++") or shutil.which("g++") + headers = a.headers or os.environ.get("HOOKSHOT_VULKAN_HEADERS") + if not headers: + cpm = Path(os.environ.get("RX_CPM") or ROOT / "build-linux" / "deps" / "cpm") / "vulkanheaders" + if cpm.is_dir() and any(cpm.iterdir()): + headers = str(sorted(cpm.iterdir())[-1] / "include") + if not cxx: + print("SKIP: no C++ compiler (--cxx)") + return 0 + if not headers or not (Path(headers) / "vulkan" / "vulkan_beta.h").is_file(): + print("SKIP: no Vulkan headers with vulkan_beta.h (--headers)") + return 0 + if os.name == "nt": + print("SKIP: the harness is run on Linux (it builds upstream's tool with the system's C++ library)") + return 0 + sizes = [tuple(int(v) for v in s.split("x")) for s in (a.size or (["384x256"] + (["1280x720", "2048x1152"] + if a.thorough else [])))] + work = Path(a.work) if a.work else Path(tempfile.mkdtemp(prefix="opennr-harness-")) + work.mkdir(parents=True, exist_ok=True) + try: + t0 = time.time() + tools = build_tool(work, cxx, headers) + exe = tools[0][1] + print("built upstream's dlss5vk with %s, its CPU reference in %d MMA models (%.0f s)" % + (os.path.basename(cxx), len(tools), time.time() - t0), flush=True) + kernels = work / "kernels" + subprocess.run([sys.executable, "-I", "-B", str(ROOT / "scripts" / "opennr_kernels.py"), "--materialize", + str(kernels)], check=True, stdout=subprocess.DEVNULL) + t0 = time.time() + model = work / "model" + manifest = write_model(model, a.seed) + size = sum(s["packedByteLength"] for s in manifest["stages"]) + print("synthetic model: %d tensor records in %d stage files, %.1f MiB (%.0f s)" % + (len(manifest["tensors"]), len(manifest["stages"]), size / 2 ** 20, time.time() - t0), flush=True) + failures = 0 + for w, h in sizes: + failures += run_size(tools, kernels, model, work / ("%dx%d" % (w, h)), w, h, a) + print("\nOPENNR HARNESS: %s" % ("PASS" if not failures else "FAIL (%d)" % failures)) + return 1 if failures else 0 + except SkipRun as e: + print("SKIP: %s" % e) + return 0 + finally: + if not a.keep and not a.work: + shutil.rmtree(work, ignore_errors=True) + + +class SkipRun(Exception): + pass + + +def run_size(tools, kernels, model, d, w, h, a): + exe = tools[0][1] + (fw, fh), _ = geometry(w, h) + print("\n== %dx%d (field %dx%d)" % (w, h, fw, fh), flush=True) + d.mkdir(parents=True, exist_ok=True) + boot, dump, fixture = d / "bootstrap", d / "reference", d / "fixture" + dump.mkdir(exist_ok=True) + write_fixture(boot, w, h) + # 1. the GLSL reference route's own output, the references (its parity against zero placeholders fails by design) + code, out, secs = tool(exe, kernels, ["parity", "--model", str(model), "--fixture", str(boot), "--dump", str(dump), + "--repeat", "2"], REFERENCE_ROUTE, d / "reference.log") + why = skip_reason(out) + if why: + raise SkipRun("this GPU or driver cannot run the network: " + why) + missing = [n for n in boundaries(w, h) if not (dump / (n + ".u8")).is_file()] + if missing or not (dump / "head.f32").is_file() or "model loaded" not in out: + print(out[-3000:]) + print("FAIL: the reference run produced no references (%d missing)" % len(missing)) + return 1 + stats = re.search(r"head: .*", out) + print("reference (GLSL route, %.1f s): %d boundaries and the head recorded; %s" % + (secs, len(boundaries(w, h)), stats.group(0) if stats else "")) + bad = degenerate(dump, w, h) + if bad: + print("FAIL: the synthetic network is degenerate, equality would prove little:\n " + "\n ".join(bad[:10])) + return 1 + head = (dump / "head.f32").read_bytes() + values = struct.unpack("<%df" % (len(head) // 4), head) + finite = [v for v in values if math.isfinite(v)] + if len(finite) != len(values) or len(set(values)) < 1000: + print("FAIL: the reference head is degenerate (%d non-finite, %d distinct)" % (len(values) - len(finite), + len(set(values)))) + return 1 + write_fixture(fixture, w, h, refs=dump, head=dump / "head.f32") + failures = 0 + # 2. block 0, kernel by kernel, against the CPU reference + features_fixture(d / "verify", w, h, dump / "features.f32", dump / "block-0.u8") + rows = min(fw * fh, 1 << 18) if a.thorough else 4096 # (the CPU reference is single-threaded: ~40 s a 120k rows) + matched = [] + for i, (label, variant) in enumerate(tools): + code, out, secs = tool(variant, kernels, ["verify", "--model", str(model), "--fixture", str(d / "verify"), + "--rows", str(rows)], {}, d / ("verify-%d.log" % i)) + checks = re.findall(r"^ (.+?)\s{2,}(equal \(\d+ values\)|MISMATCH.*)$", out, re.M) + equal = (not code and len(checks) >= 10 and not any(v.startswith("MISMATCH") for _, v in checks) and + "every kernel of block 0 equals" in out) + print("CPU reference with %s, block 0 on %d of %d rows (%.1f s): %s" % + (label, min(rows, fw * fh), fw * fh, secs, "EQUAL on every kernel" if equal else "differs")) + for name, verdict in checks: + print(" %-26s %s" % (name, verdict[:110])) + if equal: + matched.append(label) + elif not checks: + print(out[-2000:]) + if not matched: + print("FAIL: block 0 equals the CPU reference under no MMA model") + failures += 1 + # 3. every route against the references + for label, env in ROUTES: + code, out, secs = tool(exe, kernels, ["parity", "--model", str(model), "--fixture", str(fixture), + "--repeat", "3"], env, d / ("parity-%d.log" % ROUTES.index((label, env)))) + exact = len(re.findall(r"^\S+\s+\d+x\d+x\d+ bit-exact", out, re.M)) + head_line = re.search(r"head vs reference: (.*)", out) + verdict = re.search(r"VERDICT: (.*)", out) + gpu = re.search(r"production schedule \(([^)]*)\): (\d+) dispatches, GPU ([\d.]+) ms", out) + print("%-46s %s; boundaries bit-exact %d/%d; head %s%s" % + (label, verdict.group(1) if verdict else "NO VERDICT", exact, len(boundaries(w, h)), + head_line.group(1) if head_line else "?", + "; %s, %s dispatches, %s ms GPU (min of 3)" % gpu.groups() if gpu else "")) + if code or not verdict or not verdict.group(1).startswith("PASS") or exact != len(boundaries(w, h)): + print("\n".join(l for l in out.splitlines() if "MISMATCH" in l or "DIFFERENT" in l or "NOT" in l)[:3000]) + failures += 1 + return failures + + +def main(): + p = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + sub = p.add_subparsers(dest="command", required=True) + r = sub.add_parser("run") + r.add_argument("--cxx") + r.add_argument("--headers", help="Vulkan headers' include folder (with vulkan/vulkan_beta.h)") + r.add_argument("--size", action="append", help="WxH; repeatable (default 384x256)") + r.add_argument("--thorough", action="store_true", help="also 1280x720 and 2048x1152, and the CPU reference on up to 262144 rows") + r.add_argument("--seed", type=int, default=1) + r.add_argument("--work", help="keep everything in this folder") + r.add_argument("--keep", action="store_true", help="do not delete the temporary folder") + m = sub.add_parser("model") + m.add_argument("directory") + m.add_argument("--seed", type=int, default=1) + a = p.parse_args() + if a.command == "model": + manifest = write_model(a.directory, a.seed) + print("wrote a synthetic model to %s: %d tensors, %d stages, %.1f MiB" % + (a.directory, len(manifest["tensors"]), len(manifest["stages"]), + sum(s["packedByteLength"] for s in manifest["stages"]) / 2 ** 20)) + return 0 + return run(a) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tests/run_all.py b/tests/run_all.py index 570c0726c..a4f31d68f 100644 --- a/tests/run_all.py +++ b/tests/run_all.py @@ -82,6 +82,8 @@ "nx2/test_coop_spirv.py": ["--headers", "{spirv_headers}", "--spirv-val", "{spirv_val}"], "nx2/test_spirv_struct_identity.py": ["--headers", "{spirv_headers}", "--spirv-val", "{spirv_val}"], "tests/test_astc_bc_policy.py": ["--cxx", "g++"], + "tests/test_opennr_kernels.py": ["--glslang", "{glslang}", "--spirv-val", "{spirv_val}"], + "tests/test_opennr_harness.py": ["--cxx", "{cxx}", "--headers", "{vulkan_headers}"], } # Python packages some tests import (CI installs them; the runner itself needs none) @@ -114,6 +116,9 @@ # every platform, so compiling them twice would only mean a second glslang version to keep in step # with the first -- and a version skew between the two is exactly what broke this check once.) SKIP["tests/test_fsr3_shaders.py"] = ({"windows"}, "needs glslang: checked on Linux") +SKIP["tests/test_opennr_kernels.py"] = ({"windows"}, "needs glslang: checked on Linux") +# (it builds upstream's tool with the system's C++ library and runs it on the GPU, which says SKIP without one) +SKIP["tests/test_opennr_harness.py"] = ({"windows"}, "builds and runs OpenDLSS-NR's tool: checked on Linux") def which(*names): diff --git a/tests/test_opennr_harness.py b/tests/test_opennr_harness.py new file mode 100644 index 000000000..c94bb679e --- /dev/null +++ b/tests/test_opennr_harness.py @@ -0,0 +1,36 @@ +"""Open neural rendering's correctness harness, the quick form: OpenDLSS-NR on this GPU on a synthetic model and frame, +every route against the GLSL reference route bit for bit and block 0 against the CPU reference +(scripts/opennr_harness.py says how, and why synthetic: there are no real weights to test with, anywhere). + +Without a GPU that has the network's extensions (VK_KHR_cooperative_matrix, VK_NV_cooperative_matrix2, +VK_EXT_shader_float8), without Vulkan, or without a compiler or the Vulkan headers, it says SKIP and passes: CI has no +such GPU. On a PC that has one it takes about twenty seconds. + + python -I -B tests/test_opennr_harness.py --cxx clang++ --headers +""" +import argparse +import subprocess +import sys +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] + + +def main(): + p = argparse.ArgumentParser() + p.add_argument("--cxx", required=True) + p.add_argument("--headers", required=True) + a = p.parse_args() + r = subprocess.run([sys.executable, "-I", "-B", str(ROOT / "scripts" / "opennr_harness.py"), "run", "--cxx", a.cxx, + "--headers", a.headers], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + out = r.stdout.decode("utf-8", "replace") + print(out.rstrip()) + skipped = any(line.startswith("SKIP:") for line in out.splitlines()) + if r.returncode or not (skipped or "OPENNR HARNESS: PASS" in out): + print("FAIL: the open neural rendering harness did not pass") + return 1 + return 0 + + +if __name__ == "__main__": + sys.exit(main()) From 1da7efff3b0485bc5a10e3d209558d05f569f622 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 17:26:34 -0600 Subject: [PATCH 104/119] feat(vk): open neural rendering, the DLSS 5 NR network run by OpenDLSS-NR A third backend behind the Neural tab: the vendored OpenDLSS-NR network on the renderer's own device, with no NVIDIA runtime, so it runs natively on Linux. Selected with RX_VK_NR_BACKEND=open for now; the one MERGE line in vk_opennr.cpp is where it becomes the Backend row's fourth value. - The weights are the player's: a model directory (RX_VK_OPENNR_MODEL, else nr-model in the game folder) checked as upstream's loader checks it (stage lengths and SHA-256, tensors in range, 71 blocks) on a thread of its own. Without one the log and the row's hint say so and frames go out untouched. Nothing here extracts or fetches model data. - Same place and contract as the Streamline backend: dlssnr::apply hands it the finished frame in both of its builds; the headless present path calls it too, so a headless run exercises it. - The frame: a copy of the window's image, opennr_pre.comp (the 16 input lanes), the network pre-recorded once per size in a secondary command buffer, opennr_post.comp (residual, temporal blend with the model's blend_scale, history, style, intensity). GENERAL layouts, whole-pipeline barriers around the network, nothing per frame. - Temporal, with the scene's camera-only motion; RX_VK_OPENNR_TEMPORAL=0 is single-frame. Fast route (PTX) when VK_NV_cuda_kernel_launch is there, the GLSL kernels alone otherwise; a timed-out chained wait falls back to barriers, as upstream's demo does. - vk_main.cpp asks for coopmat2, float8, CUDA launch and SM builtins only when the backend is selected, and logs what is missing. - nx2/build.py compiles upstream's host sources from a patched copy in gen and embeds the generated PTX. Co-Authored-By: Claude Opus 5.5 --- gpu/vk/opennr/opennr_net.cpp | 259 ++++++++++++ gpu/vk/opennr/opennr_net.h | 82 ++++ gpu/vk/vk_dlssnr.cpp | 8 +- gpu/vk/vk_main.cpp | 4 + gpu/vk/vk_menu.cpp | 6 +- gpu/vk/vk_opennr.cpp | 700 +++++++++++++++++++++++++++++++ gpu/vk/vk_opennr.h | 54 +++ gpu/vk/vk_replay.cpp | 4 + nx2/build.py | 36 +- tests/test_opennr_backend.py | 100 +++++ tests/test_shader_stamp_cache.py | 4 +- 11 files changed, 1252 insertions(+), 5 deletions(-) create mode 100644 gpu/vk/opennr/opennr_net.cpp create mode 100644 gpu/vk/opennr/opennr_net.h create mode 100644 gpu/vk/vk_opennr.cpp create mode 100644 gpu/vk/vk_opennr.h create mode 100644 tests/test_opennr_backend.py diff --git a/gpu/vk/opennr/opennr_net.cpp b/gpu/vk/opennr/opennr_net.cpp new file mode 100644 index 000000000..76856c391 --- /dev/null +++ b/gpu/vk/opennr/opennr_net.cpp @@ -0,0 +1,259 @@ +// (hookshot) See opennr_net.h. Upstream's classes, used as upstream's own demo uses them (demo/nr_pass.cpp in +// https://github.com/maanHimself/OpenDLSS-NR): one vk::Context adopting the renderer's device, the model, the kernels, +// and one graph per frame size recorded once into a secondary command buffer. +#include "volk.h" // (first: upstream's headers include it, and it has to be the shim) + +#include "opennr_net.h" + +#include +#include +#include +#include +#include +#include + +#include "json.h" +#include "kernels.h" +#include "nr_graph.h" +#include "nr_model.h" +#include "numeric.h" +#include "reference.h" +#include "sha256.h" +#include "vk_context.h" + +namespace mkwvk::opennr_net { +namespace { + +bool read_file(const std::string& path, std::vector& out) { + std::ifstream f(path, std::ios::binary | std::ios::ate); + if (!f) return false; + const std::streamsize n = f.tellg(); + f.seekg(0); + out.resize((size_t)n); + return (bool)f.read(reinterpret_cast(out.data()), n); +} + +void set_env(const char* name, const char* value) { +#ifdef _WIN32 + _putenv_s(name, value); +#else + setenv(name, value, 1); +#endif +} + +} // namespace + +ModelCheck check_model(const std::string& dir) { + ModelCheck c; + try { + std::vector text; + if (!read_file(dir + "/manifest.json", text)) { + c.why = "no manifest.json in " + dir; + return c; + } + const json::Value m = json::parse(std::string(text.begin(), text.end())); + if (!m.has("totals") || !m["totals"].has("blockCount")) { + c.why = "manifest.json has no totals.blockCount"; + return c; + } + // (nr::Graph's own refusal, made before anything is loaded: this graph is the 71-block network of 310.8.0) + const int64_t blocks = m["totals"]["blockCount"].integer(); + if (blocks != nr::Graph::kBlockCount) { + c.why = "the model has " + std::to_string(blocks) + " blocks; this network is the " + + std::to_string(nr::Graph::kBlockCount) + "-block one (DLSS-NR 310.8.0)"; + return c; + } + // (nr::Model's: each stage file under model/, of the packed length, with the SHA-256 the manifest gives. + // upstream compares its upper-case hex exactly; a lower-case manifest is the same digest and is taken) + std::vector> stages; + for (const json::Value& s : m["stages"].array) { + std::vector bytes; + const std::string path = dir + "/model/" + s["file"].str(); + if (!read_file(path, bytes)) { + c.why = "cannot read the stage file " + path; + return c; + } + if (bytes.size() != (size_t)s["packedByteLength"].integer()) { + c.why = "stage " + s["id"].str() + " is " + std::to_string(bytes.size()) + " bytes, the manifest says " + + std::to_string(s["packedByteLength"].integer()); + return c; + } + std::string want = s["sha256"].str(); + for (char& ch : want) ch = (char)toupper((unsigned char)ch); + if (sha256Hex(bytes.data(), bytes.size()) != want) { + c.why = "stage " + s["id"].str() + " does not have the SHA-256 the manifest gives (a corrupt or " + "mismatched model directory)"; + return c; + } + stages.emplace_back(s["id"].str(), bytes.size()); + c.bytes += bytes.size(); + } + for (const json::Value& t : m["tensors"].array) { + const std::pair* stage = nullptr; + for (const auto& s : stages) + if (s.first == t["stage"].str()) stage = &s; + if (!stage) { + c.why = "tensor " + t["name"].str() + " is in a stage the manifest does not list"; + return c; + } + if ((uint64_t)t["stageOffset"].integer() + (uint64_t)t["byteLength"].integer() > stage->second) { + c.why = "tensor " + t["name"].str() + " runs past the end of its stage"; + return c; + } + c.tensors++; + } + c.stages = (uint32_t)stages.size(); + if (!c.stages || !c.tensors) { + c.why = "the manifest lists no stages or no tensors"; + return c; + } + c.ok = true; + } catch (const std::exception& e) { + c.why = std::string("manifest.json: ") + e.what(); + } + return c; +} + +class Network { +public: + Route route = Route::Fast; + std::unique_ptr context; + std::unique_ptr model; + std::unique_ptr kernels; + std::unique_ptr graph; + nr::Activation* features = nullptr; + VkCommandPool pool = VK_NULL_HANDLE; + VkCommandBuffer secondary = VK_NULL_HANDLE; + uint32_t pool_slot = 0; + float blend = 1.0f; +}; + +void fall_back_to_barriers(Network* n) { + nr::Kernels::setChainEnabled(false); + if (n && n->kernels) n->kernels->resetChainTimeouts(); +} + +const char* route_name(Route route) { + return route == Route::Fast ? "PTX kernels through VK_NV_cuda_kernel_launch, counter chaining" + : route == Route::Glsl ? "the fused GLSL kernels, no PTX" + : "the GLSL reference kernels, unfused"; +} + +Network* create(const Device& d, const std::string& model_dir, const std::string& kernel_dir, Route route, + std::string* error) { + // Upstream's route switches are environment variables its kernels read once, at first use, so they are set + // before any of it runs. The GLSL routes also point the PTX folder at an empty one: a PTX kernel reached anyway + // would then fail to load, loudly, instead of calling a CUDA launch this device may not have. + if (route != Route::Fast) { + for (const char* name : {"DLSS5VK_PTX_GEMM", "DLSS5VK_PTX_GEMMT", "DLSS5VK_PTX_GEMMV", "DLSS5VK_PTX_BLOCK32", + "DLSS5VK_PTX_FFN", "DLSS5VK_PTX_QKV", "DLSS5VK_PTX_ATTN"}) + set_env(name, "0"); + set_env("DLSS5VK_NO_PTX_MLP", "1"); + set_env("DLSS5VK_PTX_DIR", (kernel_dir + "/no-ptx").c_str()); + nr::Kernels::setChainEnabled(false); + } + auto n = std::make_unique(); + n->route = route; + try { + ovk::volkUseInstanceProcAddr(d.get_instance_proc_addr); + n->context = std::make_unique(d.instance, d.physical, d.device, d.queue_family, d.queue_index); + n->model = std::make_unique(*n->context, model_dir, false); // (hashed by check_model already) + n->kernels = std::make_unique(*n->context, kernel_dir + "/shaders"); + n->kernels->setSiluTable(ref::siluTable()); + try { + const nr::Tensor& b = n->model->tensor(70, 0, "blend_scale"); + if (b.byteLength >= 2) n->blend = num::f16ToF32((uint16_t)(b.bytes[0] | (b.bytes[1] << 8))); + } catch (const std::exception&) { + n->blend = 1.0f; // (upstream's demo: a model without it blends uncapped) + } + VkCommandPoolCreateInfo pi{VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO}; + pi.queueFamilyIndex = d.queue_family; + VK_CHECK(vkCreateCommandPool(d.device, &pi, nullptr, &n->pool)); + VkCommandBufferAllocateInfo ai{VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO}; + ai.commandPool = n->pool; + ai.level = VK_COMMAND_BUFFER_LEVEL_SECONDARY; + ai.commandBufferCount = 1; + VK_CHECK(vkAllocateCommandBuffers(d.device, &ai, &n->secondary)); + } catch (const std::exception& e) { + if (error) *error = e.what(); + destroy(n.release()); + return nullptr; + } + return n.release(); +} + +bool build(Network* n, uint32_t width, uint32_t height, Built* out, std::string* error) { + try { + n->graph.reset(); + n->features = nullptr; + const nr::Geometry g = nr::Geometry::fromValid(width, height); + nr::Graph::Options options; + options.fusedBlocks = n->route != Route::Reference; + n->graph = std::make_unique(*n->context, *n->model, *n->kernels, g, options); + n->features = n->graph->allocate("input features", g.fullWidth * g.fullHeight, 16, nr::Format::F32); + // A warm-up record and run (upstream's demo does the same): the first record allocates every activation, + // builds every weight layout, compiles every pipeline and JITs every PTX module, so the first real frame does + // none of it. Its descriptor sets go in one of the context's two pools; the frames' recording in the other. + n->context->fillZero(n->features->buffer); + n->context->resetDescriptorPool(n->pool_slot); + VkCommandBuffer warm = n->context->beginCommands(); + n->graph->record(warm, *n->features); + n->context->endAndSubmit(warm, true); + if (n->kernels->chainTimeouts().waits) throw std::runtime_error("a chained wait timed out in the warm-up frame"); + n->pool_slot ^= 1; + n->context->resetDescriptorPool(n->pool_slot); + VK_CHECK(vkResetCommandPool(n->context->device(), n->pool, 0)); + VkCommandBufferInheritanceInfo inherit{VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO}; + VkCommandBufferBeginInfo bi{VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO}; + bi.flags = VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT; // (up to three frames in flight execute it) + bi.pInheritanceInfo = &inherit; + VK_CHECK(vkBeginCommandBuffer(n->secondary, &bi)); + n->graph->record(n->secondary, *n->features); + VK_CHECK(vkEndCommandBuffer(n->secondary)); + out->full_width = g.fullWidth, out->full_height = g.fullHeight; + out->features = n->features->buffer.buffer; + out->features_bytes = n->features->validBytes(); + out->head = n->graph->head().buffer.buffer; + out->head_bytes = n->graph->head().validBytes(); + out->dispatches = n->kernels->dispatchCount(); + out->chained = n->graph->chained(); + } catch (const std::exception& e) { + if (error) *error = e.what(); + n->graph.reset(); + n->features = nullptr; + return false; + } + return true; +} + +void record(Network* n, VkCommandBuffer primary) { + if (n && n->graph) vkCmdExecuteCommands(primary, 1, &n->secondary); +} + +float blend_scale(const Network* n) { + return n ? n->blend : 1.0f; +} + +bool chain_timed_out(Network* n) { + if (!n || !n->kernels) return false; + try { + return n->kernels->chainTimeouts().waits != 0; + } catch (const std::exception&) { + return false; + } +} + +void destroy(Network* n) { + if (!n) return; + try { + n->graph.reset(); + if (n->pool && n->context) vkDestroyCommandPool(n->context->device(), n->pool, nullptr); + n->kernels.reset(); + n->model.reset(); + n->context.reset(); + } catch (const std::exception&) { + } + delete n; +} + +} // namespace mkwvk::opennr_net diff --git a/gpu/vk/opennr/opennr_net.h b/gpu/vk/opennr/opennr_net.h new file mode 100644 index 000000000..dd6ed37f1 --- /dev/null +++ b/gpu/vk/opennr/opennr_net.h @@ -0,0 +1,82 @@ +// (hookshot) The open neural rendering backend's network layer: OpenDLSS-NR's host code +// (third_party/opendlss-nr/src) behind a small interface, so the renderer's side (gpu/vk/vk_opennr.cpp) never +// includes it. The two cannot meet in one translation unit: upstream's code calls Vulkan through the volk shim +// (gpu/vk/opennr/volk.h), the renderer through vkx (vk_loader.h), and both spell the functions the same. +// +// This is also the seam an AMD port replaces: everything here is upstream's kernels on upstream's buffers, and the +// renderer's side only hands it a device and reads two buffers back (docs/neural-rendering.md, "An AMD route"). +// +// Nothing here throws: upstream's code reports with exceptions, which are caught at this boundary and come back as +// text. Nothing here reads or writes the frame; the renderer's two passes do (gpu/vk/shaders/opennr_*.comp). +#pragma once + +#include +#include + +#include + +namespace mkwvk::opennr_net { + +/// A model directory checked the way upstream's nr::Model and nr::Graph check it, before any GPU work: the manifest +/// parses; every stage file is under model/, has the packed length the manifest says and the SHA-256 it says; every +/// tensor lies inside a stage that exists; and the network is the 71-block one of 310.8.0. CPU only, and seconds on +/// a real model (the hashing), so the renderer runs it off the display thread. +struct ModelCheck { + bool ok = false; + std::string why; ///< what is wrong, for the log and the menu, when not ok + uint64_t bytes = 0; ///< the stage files' size + uint32_t stages = 0, tensors = 0; +}; +[[nodiscard]] ModelCheck check_model(const std::string& directory); + +struct Device { + VkInstance instance = VK_NULL_HANDLE; + VkPhysicalDevice physical = VK_NULL_HANDLE; + VkDevice device = VK_NULL_HANDLE; + uint32_t queue_family = 0, queue_index = 0; + PFN_vkGetInstanceProcAddr get_instance_proc_addr = nullptr; +}; + +/// Which kernels run (upstream's routes; every one gives the same bytes on a given GPU, which the harness checks) +enum class Route { + Fast, ///< upstream's default: PTX through VK_NV_cuda_kernel_launch, counter chaining + Glsl, ///< the fused GLSL kernels only (every DLSS5VK_PTX_* off): no CUDA launch needed + Reference, ///< the least fused GLSL route (DLSS5VK_UNFUSED=1): every intermediate materialized, up to 2560x1440 +}; + +/// What a build for one size gives the renderer: the f32 [full rows][16] input it writes and the f32 [full rows][4] +/// head it reads, on the padded field (upstream's Geometry) +struct Built { + uint32_t full_width = 0, full_height = 0; + VkBuffer features = VK_NULL_HANDLE, head = VK_NULL_HANDLE; + VkDeviceSize features_bytes = 0, head_bytes = 0; + uint32_t dispatches = 0; + bool chained = false; +}; + +class Network; + +/// Loads the model (already checked: its hashes are not computed again) and the kernels from `kernel_dir` +/// (shaders/*.spv and ptx/*.ptx). Submits uploads on the device's queue and waits for them: the caller holds whatever +/// lock that queue takes. Null and `error` on failure. +[[nodiscard]] Network* create(const Device& device, const std::string& model_dir, const std::string& kernel_dir, + Route route, std::string* error); +/// The graph for a frame of w x h, recorded once into a secondary command buffer that record() then executes every +/// frame (nothing is allocated per frame). The previous size's graph is released: the device must be idle. The first +/// build compiles every pipeline and JITs every PTX module, which is most of a second. +[[nodiscard]] bool build(Network* network, uint32_t width, uint32_t height, Built* out, std::string* error); +/// The network, into the frame's command buffer: its features buffer must be written and made visible to compute +/// before this; its head is written when this is done (the caller's barrier makes it visible). +void record(Network* network, VkCommandBuffer primary); +/// block70.layer0.blend_scale, the model's learned cap on the temporal blend (1 when the model has none) +[[nodiscard]] float blend_scale(const Network* network); +/// A counter-chained wait gave up in a finished frame (upstream's watchdog: that frame's bytes are wrong). The +/// caller then calls fall_back_to_barriers and builds again, as upstream's demo does (NrPass::fallBackToBarriers). +[[nodiscard]] bool chain_timed_out(Network* network); +/// No counter chaining from now on: a barrier after every launch. Takes effect at the next build. +void fall_back_to_barriers(Network* network); +[[nodiscard]] const char* route_name(Route route); +/// Releases everything. The device must be idle and every queue's lock held (upstream's context waits for the device). +void destroy(Network* network); + +} // namespace mkwvk::opennr_net diff --git a/gpu/vk/vk_dlssnr.cpp b/gpu/vk/vk_dlssnr.cpp index 37255bbf1..fb5e0a589 100644 --- a/gpu/vk/vk_dlssnr.cpp +++ b/gpu/vk/vk_dlssnr.cpp @@ -5,6 +5,7 @@ #include "vk_dlssnr.h" #include "vk_menu.h" +#include "vk_opennr.h" // (hookshot: the open backend, which every build has) #include "vk_streamline.h" #if defined(RX_VK_STREAMLINE) && defined(_WIN32) @@ -257,6 +258,8 @@ bool asked() { VkImage apply(VkCommandBuffer cmd, VkImage src, uint32_t sw, uint32_t sh, VkImageView* out_view) { + // (hookshot) The open backend, when it is the one selected (gpu/vk/vk_opennr.h): same contract, same place. + if (opennr::selected()) return opennr::apply(cmd, src, sw, sh, out_view); State& s = state(); if (!src || !sw || !sh) return VK_NULL_HANDLE; if (s.failed.load(std::memory_order_relaxed) || !capable() || !asked()) return VK_NULL_HANDLE; @@ -425,7 +428,10 @@ namespace mkwvk::dlssnr { bool built_with_sdk() { return false; } bool capable() { return false; } bool asked() { return false; } -VkImage apply(VkCommandBuffer, VkImage, uint32_t, uint32_t, VkImageView*) { return VK_NULL_HANDLE; } +// (hookshot) The open backend runs in every build, Linux's too (gpu/vk/vk_opennr.h) +VkImage apply(VkCommandBuffer cmd, VkImage src, uint32_t sw, uint32_t sh, VkImageView* out_view) { + return opennr::selected() ? opennr::apply(cmd, src, sw, sh, out_view) : VK_NULL_HANDLE; +} void shutdown() {} } // namespace mkwvk::dlssnr diff --git a/gpu/vk/vk_main.cpp b/gpu/vk/vk_main.cpp index 81c87cb10..447f8f332 100644 --- a/gpu/vk/vk_main.cpp +++ b/gpu/vk/vk_main.cpp @@ -24,6 +24,7 @@ #include "gpu_choice.h" #include "vk_menu.h" #include "vk_streamline.h" +#include "vk_opennr.h" // (hookshot: open neural rendering's extensions, only when it is the selected backend) #include "vk_dlss.h" #include "vk_reflex.h" #include "vk_progress.h" @@ -273,6 +274,7 @@ bool create_device() { optional(VK_AMD_BUFFER_MARKER_EXTENSION_NAME, dev.buffer_marker); optional(VK_EXT_DEVICE_FAULT_EXTENSION_NAME, dev.device_fault); optional(VK_KHR_COOPERATIVE_MATRIX_EXTENSION_NAME, dev.coop_matrix); + opennr::device_extensions(want, exts); // (hookshot: open neural rendering's, vk_opennr.cpp; nothing unless selected) dlss_device_extensions(want, exts); // (hookshot: NVIDIA DLSS's, vk_dlss.cpp) reflex_device_extensions(want, exts); // (hookshot: NVIDIA Reflex's, vk_reflex.cpp) @@ -406,6 +408,7 @@ bool create_device() { VkPhysicalDeviceCooperativeMatrixFeaturesKHR coop{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR}; if (dev.coop_matrix) *tail = &coop, tail = &coop.pNext; reflex_device_features(tail); // (present ids, when NVIDIA Reflex's extensions are there) + opennr::device_features(tail); // (hookshot: the network's matrix, float8 and CUDA launch features, when selected) vkGetPhysicalDeviceFeatures2(dev.physical, &f); dev.view_2d_of_3d = dev.view_2d_of_3d && v2d3d.sampler2DViewOf3D; coop.cooperativeMatrixRobustBufferAccess = VK_FALSE; @@ -513,6 +516,7 @@ bool create_device() { streamline::attach_device(dev.instance, dev.physical, dev.device, dev.queue_family, sl_queues); if (dev.buffer_marker) buffer_markers_init(); coopmat_init(); + opennr::device_created(); // (hookshot: whether open neural rendering can run here, said in the log) reflex_device_created(); if (dev.push_descriptor) { VkPhysicalDevicePushDescriptorPropertiesKHR pp{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR}; diff --git a/gpu/vk/vk_menu.cpp b/gpu/vk/vk_menu.cpp index 28c9bcfa6..879e502fb 100644 --- a/gpu/vk/vk_menu.cpp +++ b/gpu/vk/vk_menu.cpp @@ -32,6 +32,7 @@ #include "vk_dlssnr.h" // (whether this build can offer DLSS 5 neural rendering at all) #include "vk_streamline.h" // (nr_why: why neural rendering is not available here) +#include "vk_opennr.h" // (hookshot: the open backend: the row is offered with it, and its why) #include "vk_fsr3.h" // (the Upscaler row: whether FSR 3.1 runs on this device) #include "vk_ffx.h" // (and FSR 4, AMD's runtime) #include "vk_work.h" // (after the others: counts the commands that do GPU work, for full_barrier) @@ -243,7 +244,7 @@ const char* hn_nr(int v, int variant) { static const char* const longest = "Not available: NVIDIA's model is RTX 50 only. RTX 20-40: a patched nvngx_dlssnr.dll (readme)."; if (variant < 0) { - const char* w = streamline::nr_why(); + const char* w = opennr::selected() ? opennr::why() : streamline::nr_why(); // (the selected backend's why) return *w ? w : t[std::clamp(v, 0, 1)]; } return variant == 0 ? t[std::clamp(v, 0, 1)] : variant == 1 ? longest : nullptr; @@ -1698,7 +1699,8 @@ void menu_init() { // do anything in a build with no Streamline headers, or on Linux, where Streamline has no // plugins to load. The switch is left in place and says why, because a missing tab is a bug // report and a tab that explains itself is not. - if (!dlssnr::built_with_sdk()) + // (the open backend, gpu/vk/vk_opennr.h, runs in every build, so it keeps the row) + if (!dlssnr::built_with_sdk() && !opennr::selected()) for (Row& r : rows) if (r.value == &opts.nr) { r.hi = 0; diff --git a/gpu/vk/vk_opennr.cpp b/gpu/vk/vk_opennr.cpp new file mode 100644 index 000000000..fc1dd76f7 --- /dev/null +++ b/gpu/vk/vk_opennr.cpp @@ -0,0 +1,700 @@ +// (hookshot) Open neural rendering; see gpu/vk/vk_opennr.h for what it is and what the player supplies. +// +// The frame, in the frame's own command buffer (docs/neural-rendering.md has the why of each step): +// the window's frame -> our RGBA8 copy (a blit: whatever the frame's format, the copy is code values) +// -> opennr_pre.comp: the network's sixteen input lanes on the padded field +// -> the network (gpu/vk/opennr: OpenDLSS-NR, pre-recorded once per size into a secondary command buffer) +// -> opennr_post.comp: the head on the frame, the temporal blend, the next history, style and intensity +// -> our RGBA8 output, which present_image shows instead of the frame. +// Images stay in VK_IMAGE_LAYOUT_GENERAL; the network is foreign work and is fenced with whole-pipeline barriers on +// both sides; nothing is allocated per frame. Loading the model takes seconds, so its check (the SHA-256 of 141 MiB) +// runs on a thread of its own and the frames go out untouched until it is done. +#define VK_ENABLE_BETA_EXTENSIONS // (VK_NV_cuda_kernel_launch's feature struct is in vulkan_beta.h) + +#include "vk_opennr.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "opennr/opennr_net.h" +#include "opennr_ptx.h" // (nx2/build.py generates it from third_party/opendlss-nr/scripts/ptx) +#include "shaders/opennr_kernels_spv.h" +#include "shaders/opennr_post_comp_spv.h" +#include "shaders/opennr_pre_comp_spv.h" +#include "vk_camera_motion.h" +#include "vk_draw.h" +#include "vk_menu.h" +#include "vk_paths.h" + +namespace mkwvk::opennr { +namespace { + +constexpr VkImageSubresourceRange kOneLevel{VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}; +constexpr uint32_t kTimingRing = 4; + +struct Image { + VkImage image{}; + VkImageView view{}; + VmaAllocation memory{}; +}; + +/// opennr_common.glsl's push constants +struct Push { + uint32_t full_width, full_height, valid_width, valid_height; + uint32_t seed, history_valid, motion_valid, auto_mask; + float style, local_tone, local_structure, skin; + float motion_size[2]; + float blend_scale, intensity; +}; +static_assert(sizeof(Push) == 64, "opennr_common.glsl's push block"); + +enum Phase : int { kIdle, kChecking, kChecked, kReady, kNoModel, kFailed }; + +struct State { + // the device (vk_main.cpp create_device) + bool want_coop2{}, want_fp8{}, want_cuda{}, want_sm{}; + VkPhysicalDeviceCooperativeMatrix2FeaturesNV coop2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_FEATURES_NV}; + VkPhysicalDeviceShaderFloat8FeaturesEXT fp8{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT8_FEATURES_EXT}; + VkPhysicalDeviceCudaKernelLaunchFeaturesNV cuda{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_FEATURES_NV}; + VkPhysicalDeviceShaderSMBuiltinsFeaturesNV sm{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV}; + bool device_ok{}; + opennr_net::Route route = opennr_net::Route::Fast; + // the model + std::atomic phase{kIdle}; + std::atomic check_done{}; + std::thread checker; + opennr_net::ModelCheck check; + std::string model_dir; + bool last_asked{}; + opennr_net::Network* net{}; + opennr_net::Built built{}; + uint32_t width{}, height{}; + // the frame's own resources + Image in{}, out{}, history[2]{}, no_motion{}; + bool fresh{}; // (just made: their first transition and clear go in this frame's command buffer) + VkSampler linear{}, nearest{}; + VkDescriptorSetLayout set_layout{}; + VkPipelineLayout layout{}; + VkPipeline pre{}, post{}; + VkDescriptorPool pool{}; + VkDescriptorSet sets[2]{}; + VkImageView bound_motion{}; + uint32_t parity{}; + bool history_valid{}; + uint64_t frame{}; + float last_view_projection[16]{}; + bool have_view_projection{}; + // the GPU time of the whole pass, read back kTimingRing frames later (never waited for) + VkQueryPool queries{}; + uint64_t timed{}; + double ms_sum{}, ms_min{1e30}; + uint32_t ms_count{}; + char why[320]{}; +}; + +State& state() { + static State s; + return s; +} + +bool has(const std::vector& all, const char* name) { + for (const VkExtensionProperties& e : all) + if (!strcmp(e.extensionName, name)) return true; + return false; +} + +void set_why(State& s, const char* text) { + snprintf(s.why, sizeof s.why, "%s", text); +} + +std::string game_folder() { + char exe[MAX_PATH]; + const DWORD n = game_module_path(exe, MAX_PATH); + std::string path(exe, n); + const size_t slash = path.find_last_of("\\/"); + return slash == std::string::npos ? std::string(".") : path.substr(0, slash); +} + +/// The model directory: RX_VK_OPENNR_MODEL, else nr-model in the game folder +std::string model_directory() { + if (const char* e = getenv("RX_VK_OPENNR_MODEL"); e && *e) return e; + return game_folder() + "/nr-model"; +} + +/// OpenDLSS-NR's host code reads its kernels from a folder (shaders/*.spv, ptx/*.ptx). The renderer carries them +/// (the SPIR-V checked in, the PTX generated at build time) and writes them out once, to a folder named by their +/// hash, so a stale folder from another build is never read. +std::string materialize_kernels(std::string* error) { + uint64_t h = 1469598103934665603ull; + auto mix = [&](const void* data, size_t n) { + const auto* p = static_cast(data); + for (size_t i = 0; i < n; i++) h = (h ^ p[i]) * 1099511628211ull; + }; + for (const auto& m : opennr_spv::kModules) mix(m.words, m.count * 4u), mix(m.name, strlen(m.name)); + for (const auto& f : opennr_ptx::kFiles) mix(f.text, strlen(f.text)), mix(f.name, strlen(f.name)); + char tag[24]; + snprintf(tag, sizeof tag, "%016llx", (unsigned long long)h); + const std::filesystem::path dir = std::filesystem::path(game_folder()) / "hookshot_opennr_kernels" / tag; + std::error_code ec; + if (std::filesystem::exists(dir / "complete", ec)) return dir.string(); + std::filesystem::create_directories(dir / "shaders", ec); + std::filesystem::create_directories(dir / "ptx", ec); + std::filesystem::create_directories(dir / "no-ptx", ec); // (the GLSL routes' empty PTX folder, opennr_net.cpp) + auto write = [&](const std::filesystem::path& p, const void* data, size_t n) { + FILE* f = fopen(p.string().c_str(), "wb"); // (narrow paths are UTF-8: nx2/win_manifest.py) + const bool ok = f && fwrite(data, 1, n, f) == n; + if (f) fclose(f); + if (!ok && error) *error = "cannot write " + p.string(); + return ok; + }; + for (const auto& m : opennr_spv::kModules) + if (!write(dir / "shaders" / (std::string(m.name) + ".spv"), m.words, m.count * 4u)) return {}; + for (const auto& f : opennr_ptx::kFiles) + if (!write(dir / "ptx" / f.name, f.text, strlen(f.text))) return {}; + if (!write(dir / "complete", "", 0)) return {}; + return dir.string(); +} + +void drop(Image& t) { + if (t.view) vkDestroyImageView(dev.device, t.view, nullptr); + if (t.image) destroy_image(t.image, t.memory); + t = Image{}; +} + +bool make(Image& t, VkFormat format, uint32_t w, uint32_t h, VkImageUsageFlags usage) { + drop(t); + VkImageCreateInfo ci{VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO}; + ci.imageType = VK_IMAGE_TYPE_2D; + ci.format = format; + ci.extent = {w, h, 1}; + ci.mipLevels = ci.arrayLayers = 1; + ci.samples = VK_SAMPLE_COUNT_1_BIT; + ci.tiling = VK_IMAGE_TILING_OPTIMAL; + ci.usage = usage; + if (!create_image(ci, t.image, t.memory, false)) return false; + VkImageViewCreateInfo vi{VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO}; + vi.image = t.image; + vi.viewType = VK_IMAGE_VIEW_TYPE_2D; + vi.format = format; + vi.subresourceRange = kOneLevel; + if (vkCreateImageView(dev.device, &vi, nullptr, &t.view) != VK_SUCCESS) { + drop(t); + return false; + } + return true; +} + +VkPipeline pipeline(const uint32_t* words, size_t bytes, VkPipelineLayout layout) { + VkShaderModuleCreateInfo mi{VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO}; + mi.codeSize = bytes; + mi.pCode = words; + VkShaderModule module{}; + if (vkCreateShaderModule(dev.device, &mi, nullptr, &module) != VK_SUCCESS) return VK_NULL_HANDLE; + VkComputePipelineCreateInfo ci{VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO}; + ci.stage = {VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO}; + ci.stage.stage = VK_SHADER_STAGE_COMPUTE_BIT; + ci.stage.module = module; + ci.stage.pName = "main"; + ci.layout = layout; + VkPipeline p{}; + if (vkCreateComputePipelines(dev.device, VK_NULL_HANDLE, 1, &ci, nullptr, &p) != VK_SUCCESS) p = VK_NULL_HANDLE; + vkDestroyShaderModule(dev.device, module, nullptr); + return p; +} + +/// The two passes' layout, pipelines, samplers and descriptor sets: once, whatever the size +bool make_passes(State& s) { + if (s.pre) return true; + const VkDescriptorSetLayoutBinding b[7] = { + {0, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1, VK_SHADER_STAGE_COMPUTE_BIT, nullptr}, + {1, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_COMPUTE_BIT, nullptr}, + {2, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_COMPUTE_BIT, nullptr}, + {3, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1, VK_SHADER_STAGE_COMPUTE_BIT, nullptr}, + {4, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1, VK_SHADER_STAGE_COMPUTE_BIT, nullptr}, + {5, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1, VK_SHADER_STAGE_COMPUTE_BIT, nullptr}, + {6, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1, VK_SHADER_STAGE_COMPUTE_BIT, nullptr}}; + VkDescriptorSetLayoutCreateInfo li{VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO}; + li.bindingCount = 7; + li.pBindings = b; + if (vkCreateDescriptorSetLayout(dev.device, &li, nullptr, &s.set_layout) != VK_SUCCESS) return false; + const VkPushConstantRange range{VK_SHADER_STAGE_COMPUTE_BIT, 0, sizeof(Push)}; + VkPipelineLayoutCreateInfo pi{VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO}; + pi.setLayoutCount = 1; + pi.pSetLayouts = &s.set_layout; + pi.pushConstantRangeCount = 1; + pi.pPushConstantRanges = ⦥ + if (vkCreatePipelineLayout(dev.device, &pi, nullptr, &s.layout) != VK_SUCCESS) return false; + s.pre = pipeline(OPENNR_PRE_COMP_SPV, sizeof OPENNR_PRE_COMP_SPV, s.layout); + s.post = pipeline(OPENNR_POST_COMP_SPV, sizeof OPENNR_POST_COMP_SPV, s.layout); + VkSamplerCreateInfo si{VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO}; + si.magFilter = si.minFilter = VK_FILTER_LINEAR; + si.mipmapMode = VK_SAMPLER_MIPMAP_MODE_NEAREST; + si.addressModeU = si.addressModeV = si.addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; + si.maxLod = 0.0f; + if (vkCreateSampler(dev.device, &si, nullptr, &s.linear) != VK_SUCCESS) return false; + si.magFilter = si.minFilter = VK_FILTER_NEAREST; + if (vkCreateSampler(dev.device, &si, nullptr, &s.nearest) != VK_SUCCESS) return false; + const VkDescriptorPoolSize sizes[3] = {{VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 6}, + {VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 4}, + {VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 4}}; + VkDescriptorPoolCreateInfo dpi{VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO}; + dpi.maxSets = 2; + dpi.poolSizeCount = 3; + dpi.pPoolSizes = sizes; + if (vkCreateDescriptorPool(dev.device, &dpi, nullptr, &s.pool) != VK_SUCCESS) return false; + const VkDescriptorSetLayout layouts[2] = {s.set_layout, s.set_layout}; + VkDescriptorSetAllocateInfo ai{VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO}; + ai.descriptorPool = s.pool; + ai.descriptorSetCount = 2; + ai.pSetLayouts = layouts; + if (vkAllocateDescriptorSets(dev.device, &ai, s.sets) != VK_SUCCESS) return false; + VkQueryPoolCreateInfo qi{VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO}; + qi.queryType = VK_QUERY_TYPE_TIMESTAMP; + qi.queryCount = 2 * kTimingRing; + if (vkCreateQueryPool(dev.device, &qi, nullptr, &s.queries) != VK_SUCCESS) s.queries = VK_NULL_HANDLE; + return s.pre && s.post; +} + +/// The descriptor sets, for parity p: the history read is history[p], the history written history[1 - p]. Only with +/// none of them in flight (a new size, or the motion target changing, both behind a device wait). +void write_sets(State& s, VkImageView motion) { + for (uint32_t p = 0; p < 2; p++) { + const VkDescriptorImageInfo in{VK_NULL_HANDLE, s.in.view, VK_IMAGE_LAYOUT_GENERAL}; + const VkDescriptorImageInfo prev{s.linear, s.history[p].view, VK_IMAGE_LAYOUT_GENERAL}; + const VkDescriptorImageInfo mot{s.nearest, motion ? motion : s.no_motion.view, VK_IMAGE_LAYOUT_GENERAL}; + const VkDescriptorBufferInfo features{s.built.features, 0, s.built.features_bytes}; + const VkDescriptorBufferInfo head{s.built.head, 0, s.built.head_bytes}; + const VkDescriptorImageInfo out{VK_NULL_HANDLE, s.out.view, VK_IMAGE_LAYOUT_GENERAL}; + const VkDescriptorImageInfo next{VK_NULL_HANDLE, s.history[1 - p].view, VK_IMAGE_LAYOUT_GENERAL}; + VkWriteDescriptorSet w[7]{}; + const VkDescriptorType types[7] = {VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, + VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, + VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, + VK_DESCRIPTOR_TYPE_STORAGE_IMAGE}; + const VkDescriptorImageInfo* images[7] = {&in, &prev, &mot, nullptr, nullptr, &out, &next}; + const VkDescriptorBufferInfo* buffers[7] = {nullptr, nullptr, nullptr, &features, &head, nullptr, nullptr}; + for (uint32_t i = 0; i < 7; i++) { + w[i].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; + w[i].dstSet = s.sets[p]; + w[i].dstBinding = i; + w[i].descriptorCount = 1; + w[i].descriptorType = types[i]; + w[i].pImageInfo = images[i]; + w[i].pBufferInfo = buffers[i]; + } + vkUpdateDescriptorSets(dev.device, 7, w, 0, nullptr); + } + s.bound_motion = motion; +} + +bool make_images(State& s, uint32_t w, uint32_t h) { + const VkImageUsageFlags color = VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | + VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_SAMPLED_BIT; + const VkImageUsageFlags history = VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_SAMPLED_BIT | + VK_IMAGE_USAGE_TRANSFER_DST_BIT; + const bool ok = make(s.in, VK_FORMAT_R8G8B8A8_UNORM, w, h, color) && + make(s.out, VK_FORMAT_R8G8B8A8_UNORM, w, h, color) && + make(s.history[0], VK_FORMAT_R16G16B16A16_SFLOAT, w, h, history) && + make(s.history[1], VK_FORMAT_R16G16B16A16_SFLOAT, w, h, history) && + (s.no_motion.image || make(s.no_motion, VK_FORMAT_R16G16_SFLOAT, 1, 1, + VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT)); + s.fresh = true; + return ok; +} + +void barrier(VkCommandBuffer cmd, VkPipelineStageFlags2 src_stage, VkAccessFlags2 src_access, + VkPipelineStageFlags2 dst_stage, VkAccessFlags2 dst_access) { + VkMemoryBarrier2 mb{VK_STRUCTURE_TYPE_MEMORY_BARRIER_2}; + mb.srcStageMask = src_stage, mb.srcAccessMask = src_access; + mb.dstStageMask = dst_stage, mb.dstAccessMask = dst_access; + VkDependencyInfo di{VK_STRUCTURE_TYPE_DEPENDENCY_INFO}; + di.memoryBarrierCount = 1, di.pMemoryBarriers = &mb; + vkCmdPipelineBarrier2(cmd, &di); +} + +void to_general(VkCommandBuffer cmd, VkImage image) { + VkImageMemoryBarrier2 b{VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2}; + b.srcStageMask = VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT; + b.dstStageMask = VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT; + b.dstAccessMask = VK_ACCESS_2_TRANSFER_WRITE_BIT | VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_SHADER_WRITE_BIT; + b.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; + b.newLayout = VK_IMAGE_LAYOUT_GENERAL; + b.srcQueueFamilyIndex = b.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + b.image = image; + b.subresourceRange = kOneLevel; + VkDependencyInfo di{VK_STRUCTURE_TYPE_DEPENDENCY_INFO}; + di.imageMemoryBarrierCount = 1, di.pImageMemoryBarriers = &b; + vkCmdPipelineBarrier2(cmd, &di); +} + +/// The model checked (on its thread) -> the network loaded and built for w x h, on the display thread with the +/// queue's lock held (upstream's uploads submit and wait on it). False: s.why says why, and it stays off. +bool load(State& s, uint32_t w, uint32_t h) { + const auto t0 = std::chrono::steady_clock::now(); + std::string error; + const std::string kernels = materialize_kernels(&error); + if (kernels.empty()) { + logf("vk: open NR: the kernels could not be written out (%s)", error.c_str()); + set_why(s, "Not available: its kernels could not be written to the game folder (the log has more)."); + return false; + } + opennr_net::Device d; + d.instance = dev.instance, d.physical = dev.physical, d.device = dev.device; + d.queue_family = dev.queue_family, d.queue_index = 0; + d.get_instance_proc_addr = vkx::instance_proc_addr(); + { + std::lock_guard qk(dev.present_mu); + queue_flush_locked(); + s.net = opennr_net::create(d, s.model_dir, kernels, s.route, &error); + if (s.net && !opennr_net::build(s.net, w, h, &s.built, &error)) { + device_wait_idle_locked(); + std::lock_guard pq(dev.present_queue_mu); // (upstream's context waits for the device as it goes) + opennr_net::destroy(s.net); + s.net = nullptr; + } + } + if (!s.net) { + logf("vk: open NR: the network did not start: %s", error.c_str()); + set_why(s, "Not available: the network did not start on this GPU (the log says why)."); + return false; + } + if (!make_passes(s) || !make_images(s, w, h)) { + logf("vk: open NR: the frame's passes or images were not made"); + set_why(s, "Not available: the frame's passes could not be made (the log has more)."); + return false; + } + write_sets(s, VK_NULL_HANDLE); + s.width = w, s.height = h, s.history_valid = false; + logf("vk: open NR: running on %ux%u frames (field %ux%u), %s: %u dispatches, %s; loaded in %.1f s", w, h, + s.built.full_width, s.built.full_height, opennr_net::route_name(s.route), s.built.dispatches, + s.built.chained ? "counter-chained" : "barriers between launches", + std::chrono::duration(std::chrono::steady_clock::now() - t0).count()); + return true; +} + +/// A new frame size: the graph and the images again, with the device idle (frames in flight use the old ones) +bool resize(State& s, uint32_t w, uint32_t h) { + std::string error; + bool ok; + { + std::lock_guard qk(dev.present_mu); + device_wait_idle_locked(); + ok = opennr_net::build(s.net, w, h, &s.built, &error); + } + if (!ok) { + logf("vk: open NR: no network for %ux%u frames: %s", w, h, error.c_str()); + set_why(s, "Not available at this window size (the log says why)."); + return false; + } + if (!make_images(s, w, h)) return false; + write_sets(s, VK_NULL_HANDLE); + s.width = w, s.height = h, s.history_valid = false; + logf("vk: open NR: now %ux%u frames (field %ux%u)", w, h, s.built.full_width, s.built.full_height); + return true; +} + +void read_timing(State& s, VkCommandBuffer cmd, uint32_t slot) { + if (!s.queries) return; + if (s.timed >= kTimingRing) { // (this slot's last stamps, kTimingRing frames old: read only if they are there) + uint64_t t[2]{}; + if (vkGetQueryPoolResults(dev.device, s.queries, slot * 2, 2, sizeof t, t, 8, VK_QUERY_RESULT_64_BIT) == + VK_SUCCESS && t[1] > t[0]) { + const double ms = (double)(t[1] - t[0]) * dev.props.limits.timestampPeriod * 1e-6; + s.ms_sum += ms, s.ms_min = std::min(s.ms_min, ms), s.ms_count++; + } + if (s.ms_count >= 300) { + logf("vk: open NR: %.2f ms of GPU time a frame on average, %.2f at the least, over %u frames at %ux%u", + s.ms_sum / s.ms_count, s.ms_min, s.ms_count, s.width, s.height); + s.ms_sum = 0, s.ms_min = 1e30, s.ms_count = 0; + } + } + vkCmdResetQueryPool(cmd, s.queries, slot * 2, 2); +} + +} // namespace + +bool selected() { + // MERGE: with the Neural tab's Backend row (opts.nr_backend) this becomes `opts.nr_backend == 3` -- the row's + // fourth value, Open (OpenDLSS-NR) -- with RX_VK_NR_BACKEND=open kept over it, as the env vars are over every row. + static const bool open = [] { + const char* e = getenv("RX_VK_NR_BACKEND"); + return e && !strcmp(e, "open"); + }(); + return open; +} + +void device_extensions(std::vector& want, const std::vector& have) { + if (!selected()) return; + State& s = state(); + auto add = [&](const char* name, bool& flag, const char* why) { + flag = has(have, name); + if (!flag) { + logf("vk: open NR: this GPU has no %s (%s)", name, why); + return; + } + for (const char* w : want) + if (!strcmp(w, name)) return; + want.push_back(name); + logf("vk: open NR wants %s: enabled", name); + }; + add(VK_NV_COOPERATIVE_MATRIX_2_EXTENSION_NAME, s.want_coop2, "the GLSL kernels' workgroup-scope matrices"); + add(VK_EXT_SHADER_FLOAT8_EXTENSION_NAME, s.want_fp8, "the network's E4M3 arithmetic"); + add(VK_NV_CUDA_KERNEL_LAUNCH_EXTENSION_NAME, s.want_cuda, "the PTX kernels: without it the GLSL kernels run"); + add(VK_NV_SHADER_SM_BUILTINS_EXTENSION_NAME, s.want_sm, "the SM count the persistent kernels size by"); +} + +void device_features(void**& tail) { + if (!selected()) return; + State& s = state(); + if (s.want_coop2) *tail = &s.coop2, tail = &s.coop2.pNext; + if (s.want_fp8) *tail = &s.fp8, tail = &s.fp8.pNext; + if (s.want_cuda) *tail = &s.cuda, tail = &s.cuda.pNext; + if (s.want_sm) *tail = &s.sm, tail = &s.sm.pNext; +} + +void device_created() { + if (!selected()) return; + State& s = state(); + // What upstream's vk::DeviceRequirements turns on, against what this device was made with. The renderer turns + // on every core feature its GPU has (vk_main.cpp), so the core ones are the GPU's; the Vulkan 1.1 ones are asked + // again because the renderer does not keep them. + VkPhysicalDeviceVulkan11Features f11{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES}; + VkPhysicalDeviceFeatures2 f2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2}; + f2.pNext = &f11; + vkGetPhysicalDeviceFeatures2(dev.physical, &f2); + std::string missing; + auto need = [&](bool have, const char* name) { + if (!have) missing += missing.empty() ? name : std::string(", ") + name; + }; + need(dev.coop_matrix, "VK_KHR_cooperative_matrix"); + need(s.want_coop2 && s.coop2.cooperativeMatrixWorkgroupScope && s.coop2.cooperativeMatrixFlexibleDimensions && + s.coop2.cooperativeMatrixReductions && s.coop2.cooperativeMatrixConversions && + s.coop2.cooperativeMatrixPerElementOperations && s.coop2.cooperativeMatrixTensorAddressing && + s.coop2.cooperativeMatrixBlockLoads, + "VK_NV_cooperative_matrix2 with all its features"); + need(s.want_fp8 && s.fp8.shaderFloat8 && s.fp8.shaderFloat8CooperativeMatrix, "VK_EXT_shader_float8"); + need(f11.storageBuffer16BitAccess && f11.uniformAndStorageBuffer16BitAccess, "16-bit storage"); + need(dev.vk12.storageBuffer8BitAccess && dev.vk12.uniformAndStorageBuffer8BitAccess && dev.vk12.shaderInt8, + "8-bit storage"); + need(dev.vk12.shaderFloat16, "shaderFloat16"); + need(dev.vk12.vulkanMemoryModel && dev.vk12.vulkanMemoryModelDeviceScope, "the Vulkan memory model"); + need(dev.vk12.bufferDeviceAddress, "buffer device addresses"); + need(dev.vk13.subgroupSizeControl && dev.vk13.computeFullSubgroups, "subgroup size control"); + need(dev.vk13.maintenance4, "maintenance4"); + need(dev.features.shaderInt16 && dev.features.shaderInt64, "16- and 64-bit integers"); + s.device_ok = missing.empty(); + const bool cuda = s.want_cuda && s.cuda.cudaKernelLaunchFeatures; + s.route = cuda ? opennr_net::Route::Fast : opennr_net::Route::Glsl; + if (const char* r = getenv("RX_VK_OPENNR_ROUTE")) { + if (!strcmp(r, "glsl")) s.route = opennr_net::Route::Glsl; + else if (!strcmp(r, "reference")) s.route = opennr_net::Route::Reference; + else if (!strcmp(r, "fast") && !cuda) logf("vk: open NR: RX_VK_OPENNR_ROUTE=fast needs VK_NV_cuda_kernel_launch"); + } + if (!s.device_ok) { + logf("vk: open NR is not available on this GPU: it lacks %s", missing.c_str()); + set_why(s, "Not available on this GPU: it lacks what the network needs (the log names it)."); + return; + } + logf("vk: open NR: this GPU can run the network (%s)%s", opennr_net::route_name(s.route), + dev.features.robustBufferAccess ? "; robust buffer access is on, which upstream measured at ~15%" : ""); +} + +bool asked() { + // Live, every frame, like the Streamline backend's: the row the player just changed reaches the next frame. + if (const char* e = getenv("RX_VK_DLSS_NR")) return atoi(e) != 0; + return nr_settings().on; +} + +const char* why() { + return state().why; +} + +VkImage apply(VkCommandBuffer cmd, VkImage src, uint32_t sw, uint32_t sh, VkImageView* out_view) { + State& s = state(); + if (!src || !sw || !sh || !s.device_ok) return VK_NULL_HANDLE; + const bool on = asked(); + const bool turned_on = on && !s.last_asked; + s.last_asked = on; + if (!on) return VK_NULL_HANDLE; + int phase = s.phase.load(); + // (a model put in place after "no model" is seen the next time the row is turned on) + if (phase == kNoModel && turned_on) s.phase = phase = kIdle; + if (phase == kIdle) { + s.model_dir = model_directory(); + logf("vk: open NR: checking the model directory %s", s.model_dir.c_str()); + set_why(s, "Checking the model directory..."); + s.check_done = false; + s.phase = kChecking; + if (s.checker.joinable()) s.checker.join(); + s.checker = std::thread([&s] { + s.check = opennr_net::check_model(s.model_dir); + s.check_done = true; + }); + return VK_NULL_HANDLE; + } + if (phase == kChecking) { + if (!s.check_done) return VK_NULL_HANDLE; + s.checker.join(); + if (!s.check.ok) { + logf("vk: open NR: no usable model: %s. Hookshot does not include the network's weights and has no way to " + "get them: the model directory is the player's to supply (RX_VK_OPENNR_MODEL, or nr-model in the game " + "folder; docs/neural-rendering.md)", s.check.why.c_str()); + // (the hint is one line, as long as the row's longest: the path and the reason are in the log) + set_why(s, s.check.why.rfind("no manifest.json", 0) == 0 + ? "No model: Hookshot has none and cannot get one. Supply yours in nr-model (readme)." + : "The model directory was refused: the log says why."); + s.phase = kNoModel; + return VK_NULL_HANDLE; + } + logf("vk: open NR: model directory checked: %u stage files (%.1f MiB, SHA-256 as the manifest says), %u " + "tensors, the 71-block network", s.check.stages, (double)s.check.bytes / 1048576.0, s.check.tensors); + s.phase = kChecked; + phase = kChecked; + } + if (phase == kChecked) { + if (!load(s, sw, sh)) { + s.phase = kFailed; + return VK_NULL_HANDLE; + } + set_why(s, ""); + s.phase = phase = kReady; + } + if (phase != kReady) return VK_NULL_HANDLE; + if (opennr_net::chain_timed_out(s.net)) { + // (upstream's watchdog let a chained wait go: that frame was wrong, and chaining is not trusted again. The + // same graph with a barrier after every launch, as upstream's demo falls back) + logf("vk: open NR: a chained wait timed out; the network now runs with barriers between launches"); + opennr_net::fall_back_to_barriers(s.net); + s.width = s.height = 0; // (the size check below builds it again) + } + if ((sw != s.width || sh != s.height) && !resize(s, sw, sh)) { + s.phase = kFailed; + return VK_NULL_HANDLE; + } + + // ---- the motion, for the temporal path: the scene's camera-only motion (vk_camera_motion.h), when there is a + // scene. A camera that did not move gets no pass at all (zero motion: the history at the same pixel), because the + // motion module answers a repeated matrix with the target it last wrote, which here would be a moving frame's. + static const bool temporal = !getenv("RX_VK_OPENNR_TEMPORAL") || atoi(getenv("RX_VK_OPENNR_TEMPORAL")) != 0; + VkImageView motion = VK_NULL_HANDLE; + float motion_size[2] = {1.0f, 1.0f}; + if (temporal) { + SceneFrameInputs scene; + if (scene_frame_inputs(&scene) && scene.have_view_projection && scene.depth_view) { + const bool moved = !s.have_view_projection || + memcmp(s.last_view_projection, scene.view_projection, sizeof s.last_view_projection) != 0; + memcpy(s.last_view_projection, scene.view_projection, sizeof s.last_view_projection); + s.have_view_projection = true; + if (moved) { + camera_motion::Matrix vp{}; + memcpy(vp.m, scene.view_projection, sizeof vp.m); + motion = camera_motion::record(cmd, scene.depth_view, scene.depth_format, scene.render_width, + scene.render_height, vp); + motion_size[0] = (float)scene.render_width, motion_size[1] = (float)scene.render_height; + } + } + if (motion && motion != s.bound_motion) { // (the motion target is new: its size changed. Rare) + std::lock_guard qk(dev.present_mu); + device_wait_idle_locked(); + write_sets(s, motion); + } + } + + const uint32_t slot = (uint32_t)(s.frame % kTimingRing); + read_timing(s, cmd, slot); + if (s.queries) vkCmdWriteTimestamp2(cmd, VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT, s.queries, slot * 2); + if (s.fresh) { + for (VkImage i : {s.in.image, s.out.image, s.history[0].image, s.history[1].image, s.no_motion.image}) + to_general(cmd, i); + const VkClearColorValue zero{}; + vkCmdClearColorImage(cmd, s.no_motion.image, VK_IMAGE_LAYOUT_GENERAL, &zero, 1, &kOneLevel); + barrier(cmd, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, VK_ACCESS_2_TRANSFER_WRITE_BIT, + VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, VK_ACCESS_2_SHADER_READ_BIT); + s.fresh = false; + } + + // the frame into our copy: whatever the window's format, the copy holds its code values (the game's is only read) + barrier(cmd, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, VK_ACCESS_2_MEMORY_WRITE_BIT, VK_PIPELINE_STAGE_2_TRANSFER_BIT, + VK_ACCESS_2_TRANSFER_READ_BIT | VK_ACCESS_2_TRANSFER_WRITE_BIT); + VkImageBlit blit{}; + blit.srcSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}; + blit.dstSubresource = blit.srcSubresource; + blit.srcOffsets[1] = {(int32_t)sw, (int32_t)sh, 1}; + blit.dstOffsets[1] = blit.srcOffsets[1]; + vkCmdBlitImage(cmd, src, VK_IMAGE_LAYOUT_GENERAL, s.in.image, VK_IMAGE_LAYOUT_GENERAL, 1, &blit, VK_FILTER_NEAREST); + barrier(cmd, VK_PIPELINE_STAGE_2_TRANSFER_BIT | VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, + VK_ACCESS_2_TRANSFER_WRITE_BIT | VK_ACCESS_2_SHADER_WRITE_BIT, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, + VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_SHADER_WRITE_BIT); + + const NrSettings want = nr_settings(); + Push push{}; + push.full_width = s.built.full_width, push.full_height = s.built.full_height; + push.valid_width = sw, push.valid_height = sh; + // (single-frame: one seed, so a still frame stays still; temporal: a new one each frame, as upstream's demo, the + // history holding the result together) + push.seed = temporal ? (uint32_t)s.frame : 1234u; + push.history_valid = temporal && s.history_valid ? 1u : 0u; + push.motion_valid = motion ? 1u : 0u; + push.auto_mask = want.auto_mask ? 1u : 0u; + push.style = (float)want.style; + push.local_tone = want.local_tone, push.local_structure = want.local_structure, push.skin = want.skin; + push.motion_size[0] = motion_size[0], push.motion_size[1] = motion_size[1]; + push.blend_scale = opennr_net::blend_scale(s.net); + push.intensity = want.intensity; + + vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, s.pre); + vkCmdBindDescriptorSets(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, s.layout, 0, 1, &s.sets[s.parity], 0, nullptr); + vkCmdPushConstants(cmd, s.layout, VK_SHADER_STAGE_COMPUTE_BIT, 0, sizeof push, &push); + vkCmdDispatch(cmd, (s.built.full_width + 7) / 8, (s.built.full_height + 7) / 8, 1); + // (the network is foreign work -- dispatches and CUDA launches -- so whole-pipeline barriers on both sides) + barrier(cmd, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_WRITE_BIT, + VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, VK_ACCESS_2_MEMORY_READ_BIT | VK_ACCESS_2_MEMORY_WRITE_BIT); + opennr_net::record(s.net, cmd); + barrier(cmd, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, VK_ACCESS_2_MEMORY_WRITE_BIT, + VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_SHADER_WRITE_BIT); + // (vkCmdExecuteCommands leaves the primary's bound state undefined: everything again) + vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, s.post); + vkCmdBindDescriptorSets(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, s.layout, 0, 1, &s.sets[s.parity], 0, nullptr); + vkCmdPushConstants(cmd, s.layout, VK_SHADER_STAGE_COMPUTE_BIT, 0, sizeof push, &push); + vkCmdDispatch(cmd, (sw + 7) / 8, (sh + 7) / 8, 1); + barrier(cmd, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_WRITE_BIT, + VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, VK_ACCESS_2_TRANSFER_READ_BIT | VK_ACCESS_2_SHADER_READ_BIT); + if (s.queries) vkCmdWriteTimestamp2(cmd, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, s.queries, slot * 2 + 1); + s.timed++; + s.frame++; + s.parity ^= 1u; + s.history_valid = true; + if (out_view) *out_view = s.out.view; + return s.out.image; +} + +void shutdown() { + State& s = state(); + if (s.checker.joinable()) s.checker.join(); + if (!s.net && !s.pre) return; + std::lock_guard qk(dev.present_mu); + device_wait_idle_locked(); + std::lock_guard pq(dev.present_queue_mu); + opennr_net::destroy(s.net); + s.net = nullptr; + for (Image* i : {&s.in, &s.out, &s.history[0], &s.history[1], &s.no_motion}) drop(*i); + if (s.queries) vkDestroyQueryPool(dev.device, s.queries, nullptr); + if (s.pool) vkDestroyDescriptorPool(dev.device, s.pool, nullptr); + if (s.pre) vkDestroyPipeline(dev.device, s.pre, nullptr); + if (s.post) vkDestroyPipeline(dev.device, s.post, nullptr); + if (s.layout) vkDestroyPipelineLayout(dev.device, s.layout, nullptr); + if (s.set_layout) vkDestroyDescriptorSetLayout(dev.device, s.set_layout, nullptr); + if (s.linear) vkDestroySampler(dev.device, s.linear, nullptr); + if (s.nearest) vkDestroySampler(dev.device, s.nearest, nullptr); + s.queries = VK_NULL_HANDLE, s.pool = VK_NULL_HANDLE, s.pre = s.post = VK_NULL_HANDLE; + s.layout = VK_NULL_HANDLE, s.set_layout = VK_NULL_HANDLE, s.linear = s.nearest = VK_NULL_HANDLE; + s.width = s.height = 0; + s.phase = kIdle; +} + +} // namespace mkwvk::opennr diff --git a/gpu/vk/vk_opennr.h b/gpu/vk/vk_opennr.h new file mode 100644 index 000000000..0d411ffb3 --- /dev/null +++ b/gpu/vk/vk_opennr.h @@ -0,0 +1,54 @@ +// (hookshot) Open neural rendering: the DLSS 5 neural rendering network run by OpenDLSS-NR, without NVIDIA's runtime. +// +// The third backend behind the Neural tab, beside Streamline (gpu/vk/vk_dlssnr.cpp) and NGX direct. Streamline runs +// NVIDIA's own model through NVIDIA's own DLLs and is Windows-only; this runs a bit-exact Vulkan reimplementation of +// the same network (https://github.com/maanHimself/OpenDLSS-NR, MIT, vendored in third_party/opendlss-nr) on the +// renderer's own device, so it runs natively on Linux too. Today it needs an NVIDIA card with the extensions below; +// the kernel layer is kept apart (gpu/vk/opennr/) for the AMD route docs/neural-rendering.md describes. +// +// THE WEIGHTS ARE THE PLAYER'S. The network reads a model directory -- manifest.json and its stage files, upstream's +// docs/weights.md -- that nothing public produces, and Hookshot provides no way to get one: nothing here extracts, +// converts or downloads model data. RX_VK_OPENNR_MODEL= names it, else `nr-model` in the game folder. Without +// one the log and the menu say so and every frame goes to the window as it always did. +// +// Same place and contract as the Streamline backend: present_image (vk_replay.cpp) calls dlssnr::apply on the +// finished frame at display size, before the menu is drawn, and dlssnr::apply hands the frame here when this backend +// is the selected one. Everything is recorded into that frame's command buffer; nothing is allocated per frame. +#pragma once + +#include +#include + +#include "vk_internal.h" + +namespace mkwvk::opennr { + +/// Whether this backend is the one selected: RX_VK_NR_BACKEND=open for now. (MERGE: when the Neural tab's Backend +/// row -- opts.nr_backend, saved as nr_backend: Auto / Streamline / NGX direct -- lands, this is its fourth value, +/// "Open (OpenDLSS-NR)": the one line in vk_opennr.cpp marked MERGE.) +[[nodiscard]] bool selected(); + +/// Device creation (vk_main.cpp create_device), only when selected(): the extensions the network needs, where the +/// GPU has them... +void device_extensions(std::vector& want, const std::vector& have); +/// ... their feature structs, chained before vkGetPhysicalDeviceFeatures2 so the query fills them and the device is +/// made with what the GPU supports (the renderer's own convention for its features) ... +void device_features(void**& tail); +/// ... and, once the device exists, whether the network can run on it: what is missing is named in the log. +void device_created(); + +/// Whether the player has neural rendering on right now (the Neural rendering row, or RX_VK_DLSS_NR), read live. +[[nodiscard]] bool asked(); + +/// Why it is not running, for the Neural rendering row's hint; empty when it runs or was not asked for. +[[nodiscard]] const char* why(); + +/// The same contract as dlssnr::apply: `src` (GENERAL, sw x sh) is only read; the result is this backend's own +/// image, GENERAL, the same size, with its view in `out_view`; VK_NULL_HANDLE when the network did not run, and the +/// caller then presents `src` exactly as it would have. +[[nodiscard]] VkImage apply(VkCommandBuffer cmd, VkImage src, uint32_t sw, uint32_t sh, VkImageView* out_view); + +/// Releases everything. Before the device goes. +void shutdown(); + +} // namespace mkwvk::opennr diff --git a/gpu/vk/vk_replay.cpp b/gpu/vk/vk_replay.cpp index ccd1ec190..a7e3c1df7 100644 --- a/gpu/vk/vk_replay.cpp +++ b/gpu/vk/vk_replay.cpp @@ -2662,6 +2662,10 @@ void do_present(const nvn_tex* t, const int crop[4]) { dump_present(presents); if (src && (dev.offscreen || shots) && offscreen_init()) { if (dev.offscreen) { + // (hookshot) Neural rendering here too, as present_image does it: with no window (HOS_HEADLESS) present_image + // is never reached, and a headless run is how a backend is driven into a scene and measured + VkImageView nr_view = VK_NULL_HANDLE; + if (const VkImage nr = dlssnr::apply(r.cmd, src, sw, sh, &nr_view)) src = nr; image_barrier(r.cmd, off_image, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); blit_crop(r.cmd, src, sw, sh, crop, off_image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, dev.swap_extent.width, dev.swap_extent.height); diff --git a/nx2/build.py b/nx2/build.py index 7e18fe4e1..91e8168ec 100644 --- a/nx2/build.py +++ b/nx2/build.py @@ -261,6 +261,35 @@ def vk_sources(): return sorted(out) +def opennr_jobs(cxx, vk, gen_dir, obj_dir, vflags, vdeps): + """(hookshot) Open neural rendering (gpu/vk/vk_opennr.h): OpenDLSS-NR's host sources and the adapter around them, + as deliberate jobs rather than through vk_sources(). Upstream's files are compiled from a copy in gen_dir with the + portability patches of scripts/opennr_kernels.py (third_party stays upstream's, byte for byte); its PTX kernels are + generated there from its Python generators and embedded as gen_dir/opennr_ptx.h. Returns the jobs, the bytes + vk_opennr.cpp depends on (the PTX header) and the PTX kernel count; ([], b"", 0) without the vendored folder.""" + root = os.path.join(kit.HERE, "..") + adapter = os.path.join(vk, "opennr") + if not os.path.isdir(os.path.join(root, "third_party", "opendlss-nr", "src")) or not os.path.isdir(adapter): + return [], b"", 0 + import importlib.util + spec = importlib.util.spec_from_file_location("opennr_kernels", os.path.join(root, "scripts", "opennr_kernels.py")) + kernels = importlib.util.module_from_spec(spec) + spec.loader.exec_module(kernels) + src = str(kernels.prepare_sources(os.path.join(gen_dir, "opendlss-nr", "src"))) + ptx = os.path.join(gen_dir, "opennr-ptx") + kernels.generate_ptx(ptx) + header = os.path.join(gen_dir, "opennr_ptx.h") + count = kernels.write_ptx_header(ptx, header) + # (upstream's is the shim in gpu/vk/opennr, so it goes first; VK_NV_cuda_kernel_launch is a beta extension) + flags = vflags + ["-DVK_ENABLE_BETA_EXTENSIONS", "-I" + adapter, "-I" + src] + deps = vdeps + tree_headers(src) + jobs = [(cxx, os.path.join(src, f), os.path.join(obj_dir, "vk_opennr_upstream_" + f[:-4] + ".o"), flags, deps) + for f in kernels.RENDERER_SOURCES] + jobs += [(cxx, os.path.join(adapter, f), os.path.join(obj_dir, "vk_opennr_" + f[:-4] + ".o"), flags, deps) + for f in sorted(os.listdir(adapter)) if f.endswith(".cpp")] + return jobs, open(header, "rb").read(), count + + def cpm_dirs(): """CPM packages: RX_CPM, packaged tools/cpm, then legacy project caches. The packages provide Vulkan and SPIR-V headers, VMA and FFmpeg.""" @@ -866,6 +895,9 @@ def main(): os.path.join(GPU, "compat")) vdeps = tree_headers(vk, os.path.join(GPU, "render"), os.path.join(GPU, "compat"), os.path.join(GPU, "third_party", "suyu", "video_core", "textures")) + opennr, opennr_ptx, opennr_count = opennr_jobs(cxx, vk, gen_dir, obj_dir, vflags, vdeps) + print("vk: open neural rendering (OpenDLSS-NR): %s" % (("compiled in, %d PTX kernels" % opennr_count) if opennr + else "left out (no third_party/opendlss-nr)")) for src in vk_sources(): name = os.path.relpath(src, vk).replace(os.sep, "_")[:-4] lib = os.path.relpath(src, vk).split(os.sep)[0] in ("eden", "sirit") @@ -873,7 +905,9 @@ def main(): vflags + ([shader_stamp] if os.path.basename(src) == "vk_shader.cpp" else []) + ([stamp_def] if os.path.basename(src) == "vk_menu.cpp" else []) + (ngx_flags if os.path.basename(src) in ngx_files else []), - vk_lib_deps if lib else vdeps + (logo_text if os.path.basename(src) == "vk_menu.cpp" else b""))) + vk_lib_deps if lib else vdeps + (logo_text if os.path.basename(src) == "vk_menu.cpp" else b"") + + (opennr_ptx if os.path.basename(src) == "vk_opennr.cpp" else b""))) + vk_jobs += opennr if NGX_SDK and not LINUX and toolchain.mingw(): # (llvm-mingw: NVIDIA's static library was built with Microsoft's compiler for its static runtime (/MT). What it asks # of that runtime: the C parts as for the static FFmpeg (host/mingw_msvc_shims.c), the C++ ones in vk_ngx_msvc_rt.cpp) diff --git a/tests/test_opennr_backend.py b/tests/test_opennr_backend.py new file mode 100644 index 000000000..47c56ac9c --- /dev/null +++ b/tests/test_opennr_backend.py @@ -0,0 +1,100 @@ +"""Open neural rendering's wiring, in the source: what no frame-level check can see. + +* the open backend reads the Neural tab live: its asked() and apply() go through nr_settings() every call and hold + no static copy of it (the upscaling rows once shipped dead that way; tests/test_nr_settings_live.py is the same + check for the Streamline backend); +* dlssnr::apply hands the frame to it when it is selected, in BOTH of its builds -- the Streamline one and the stubs + every other build (Linux's) compiles. A dispatch in only one would leave the backend unreachable on the other + platform and nothing would say so; +* create_device asks it for its extensions before vkCreateDevice and chains its features before the features query, + and it is told when the device exists; +* there is exactly one MERGE marker, where the Backend row's fourth value goes. + + python -I -B tests/test_opennr_backend.py +""" +import re +import sys +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +VK = ROOT / "gpu" / "vk" + + +def fail(text): + print("FAIL: " + text) + sys.exit(1) + + +def blocks(text, head): + """Every function body starting at a line that starts with `head`, by brace matching: [(start, body)]""" + out = [] + for m in re.finditer(r"^" + re.escape(head), text, re.M): + open_at = text.index("{", m.start()) + depth, i = 0, open_at + while True: + depth += {"{": 1, "}": -1}.get(text[i], 0) + if depth == 0: + break + i += 1 + out.append((m.start(), text[open_at:i + 1])) + return out + + +def main(): + opennr = (VK / "vk_opennr.cpp").read_text(encoding="utf-8") + asked = blocks(opennr, "bool asked()") + apply = blocks(opennr, "VkImage apply(VkCommandBuffer cmd") + if len(asked) != 1 or len(apply) != 1: + fail("vk_opennr.cpp: expected one asked() and one apply(), found %d and %d" % (len(asked), len(apply))) + if "nr_settings()" not in asked[0][1] or re.search(r"\bstatic\b", asked[0][1]): + fail("opennr::asked() must read nr_settings() every call, with no static") + if "nr_settings()" not in apply[0][1]: + fail("opennr::apply() does not read nr_settings(): the Neural tab's rows would never reach the network") + if re.search(r"static[^;]*NrSettings", apply[0][1]): + fail("opennr::apply() caches the settings in a static") + + dlssnr = (VK / "vk_dlssnr.cpp").read_text(encoding="utf-8") + applies = blocks(dlssnr, "VkImage apply(VkCommandBuffer cmd") + if len(applies) != 2: + fail("vk_dlssnr.cpp: expected the Streamline apply() and the stub apply(), found %d" % len(applies)) + for start, body in applies: + if "opennr::selected()" not in body or "opennr::apply(cmd, src, sw, sh, out_view)" not in body: + fail("vk_dlssnr.cpp line %d: this apply() does not hand the frame to the open backend" % + (dlssnr.count("\n", 0, start) + 1)) + # (the Streamline one must dispatch before it does anything of its own) + first = applies[0][1] + if first.index("opennr::selected()") > first.index("State& s = state();"): + fail("the Streamline apply() reaches its own state before the open backend's dispatch") + + main_cpp = (VK / "vk_main.cpp").read_text(encoding="utf-8") + create = blocks(main_cpp, "bool create_device()") + if len(create) != 1: + fail("vk_main.cpp: create_device() not found") + body = create[0][1] + at = {name: body.find(name) for name in ("opennr::device_extensions(want, exts)", "opennr::device_features(tail)", + "opennr::device_created()", "vkGetPhysicalDeviceFeatures2(dev.physical, &f)", + "vkCreateDevice(dev.physical", "optional(VK_KHR_COOPERATIVE_MATRIX")} + missing = [n for n, i in at.items() if i < 0] + if missing: + fail("create_device() lacks %s" % missing) + if not (at["optional(VK_KHR_COOPERATIVE_MATRIX"] < at["opennr::device_extensions(want, exts)"] < + at["vkCreateDevice(dev.physical"]): + fail("opennr::device_extensions must come after the cooperative-matrix extension and before vkCreateDevice") + if not at["opennr::device_features(tail)"] < at["vkGetPhysicalDeviceFeatures2(dev.physical, &f)"]: + fail("opennr::device_features must chain its structs before the features query fills them") + if not at["vkCreateDevice(dev.physical"] < at["opennr::device_created()"]: + fail("opennr::device_created must come after the device is made") + + marks = opennr.count("MERGE:") + if marks != 1: + fail("vk_opennr.cpp has %d MERGE markers; the Backend row's fourth value has one place" % marks) + selected = blocks(opennr, "bool selected()") + if len(selected) != 1 or "MERGE:" not in selected[0][1] or "RX_VK_NR_BACKEND" not in selected[0][1]: + fail("the MERGE marker belongs in opennr::selected(), beside RX_VK_NR_BACKEND") + print("open neural rendering: settings read live, dispatched from both dlssnr::apply builds, device hooks in " + "order, one MERGE marker") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tests/test_shader_stamp_cache.py b/tests/test_shader_stamp_cache.py index b6e22fa31..f1ce63457 100644 --- a/tests/test_shader_stamp_cache.py +++ b/tests/test_shader_stamp_cache.py @@ -23,7 +23,9 @@ def production_code(path): tree = ast.parse(path.read_text(encoding="utf-8"), filename=str(path)) # (hookshot) streamline_sdk_path decides a compile flag, so the object key depends on it: it belongs # here -- it gates -DRX_VK_STREAMLINE and an include path. - names = {"tree_headers", "vk_sources", "flag_text", "object_key", "streamline_sdk_path"} + # (opennr_jobs: open neural rendering's sources, which the branch adds; without third_party/opendlss-nr, as in + # this fixture's tree, it adds none) + names = {"tree_headers", "vk_sources", "flag_text", "object_key", "streamline_sdk_path", "opennr_jobs"} functions = [n for n in tree.body if isinstance(n, ast.FunctionDef) and n.name in names] assert {n.name for n in functions} == names main = next(n for n in tree.body if isinstance(n, ast.FunctionDef) and n.name == "main") From 2a3c6d965b619b4c41cd44eaf6c0e13e6031fe2e Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 17:37:46 -0600 Subject: [PATCH 105/119] docs(vk): the open neural rendering backend, what was measured and what was not What OpenDLSS-NR is and its licence; that the model directory is the player's to supply and Hookshot provides no way to get one (the AMD paragraph no longer suggests one); how the frame is built around the network; temporal with camera-only motion, and its limits; which Neural tab rows have a counterpart in the network and which have none; what the harness measured on this Blackwell card (routes bit-exact with each other, the CPU reference matching only with one-group MMA steps, the route divergence at large synthetic activations, not root-caused) and what was not (image quality, real-frame timing); and what an AMD route needs. Co-Authored-By: Claude Opus 5.5 --- docs/neural-rendering.md | 146 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 143 insertions(+), 3 deletions(-) diff --git a/docs/neural-rendering.md b/docs/neural-rendering.md index c0961876e..617272c0d 100644 --- a/docs/neural-rendering.md +++ b/docs/neural-rendering.md @@ -130,6 +130,147 @@ Not measured here: the patched DLLs through *Streamline* on *Vulkan*. Every repo say `AdapterUnsupported` with a signed-off DLL and the override on, and the answer is an NGX-direct path for feature 18 beside the DLSS-G one (`gpu/vk/vk_ngx.h`) -- which would also bring NR to Linux. +## The open backend (OpenDLSS-NR) + +A third way to run the same network, beside Streamline and NGX direct: **[OpenDLSS-NR](https://github.com/maanHimself/OpenDLSS-NR)** +(MIT, Copyright 2026 maan), a Vulkan reimplementation of the DLSS-NR 310.8.0 network that its author proves bit-exact +against NVIDIA's at all 75 block boundaries. It is vendored unmodified in `third_party/opendlss-nr` (its +`PROVENANCE.md` says what and from which commit) and runs on the renderer's own device: no NVIDIA runtime, no DLL, no +Streamline, and so **natively on Linux**. `gpu/vk/vk_opennr.cpp` is the backend; `gpu/vk/opennr/` is the layer around +upstream's code (its Vulkan shim, the network behind a small interface); `scripts/opennr_kernels.py` makes its kernels. + +Selected with `RX_VK_NR_BACKEND=open` for now, and switched on like the others by the Neural rendering row or +`RX_VK_DLSS_NR=1`. When the Backend row lands it becomes that row's fourth value (the one `MERGE:` line in +`vk_opennr.cpp`). Other switches: `RX_VK_OPENNR_MODEL=`, `RX_VK_OPENNR_ROUTE=fast|glsl|reference`, +`RX_VK_OPENNR_TEMPORAL=0`, and upstream's own `DLSS5VK_*` switches, which its kernels read as they always do. + +### What the player must supply, and what Hookshot does not do + +**The weights.** The network reads a model directory -- `manifest.json` and its eleven stage files under `model/`, in +the layout of upstream's `docs/weights.md` -- and nothing public produces one. **Hookshot includes no weights and +provides no way to get them**: nothing here extracts, converts or downloads model data, and nothing reads any NVIDIA +binary. The player puts their own directory in `nr-model` beside the game, or names it with `RX_VK_OPENNR_MODEL`. It is +checked the way upstream's loader checks it -- every stage file's length and SHA-256 against the manifest, every +tensor inside its stage, the 71-block network and no other -- on a thread of its own, since hashing 141 MiB takes +a while; until it is done, and without one, frames go to the window untouched. Without a model the log says +`open NR: no usable model: ...` with the path it looked in, and the row's hint says the player has to supply one. +Whatever licence covers the data a player uses is theirs to respect; upstream says the same. + +**The GPU**, today: an NVIDIA card whose driver has `VK_KHR_cooperative_matrix`, `VK_NV_cooperative_matrix2` (all +seven of its features) and `VK_EXT_shader_float8`. With `VK_NV_cuda_kernel_launch` as well the fast route runs +(upstream's PTX kernels, counter-chained); without it the GLSL kernels run alone, which give the same bytes. The +extensions are asked for only when this backend is selected (`vk_main.cpp`, three hooks), and what is missing is named +in the log. + +### The frame + +Same place and contract as the Streamline backend: over the finished frame at display size, before the menu, into the +frame's own command buffer (`present_image`, through `dlssnr::apply`; and, with no window, in the headless present +path, so a headless run exercises it). The window's frame is blitted into an RGBA8 copy, and two passes of ours +surround the network (`gpu/vk/shaders/opennr_pre.comp`, `opennr_post.comp`, following upstream's `docs/frame.md`): + +- **in**: the sixteen lanes -- Gaussian noise hashed from the padded pixel, the frame centred + (`f16((f16(c) - 0.5) * 0.125)`), the previous output reprojected (or the frame again without a history), the five + conditioning scalars. The frame is already a display image, so it is its own proxy: no paper white, no shoulder. + Outside the frame the field is a mirrored copy, as upstream pads it; +- **the network**: recorded once per frame size into a secondary command buffer and executed every frame. Nothing is + allocated per frame; a new size rebuilds the graph with the device idle; +- **out**: `clamp(proxy + rgb / 4)`, the temporal blend by the head's own logit times the model's + `blend_scale`, the next history truncated to half, then the style operator and the intensity blend. + +**Temporal or single-frame: temporal**, with the scene's camera-only motion (`vk_camera_motion.h`) where there is a +scene; `RX_VK_OPENNR_TEMPORAL=0` is single-frame (lanes 7-9 a copy of the frame, a fixed noise seed, no blend). The +motion is the 3D scene's at its render size, so the HUD gets the scene's motion under it -- wrong for the HUD, and left +to the network's per-pixel blend logit to reject, which is what upstream's demo leaves disocclusion to as well. A camera +that did not move gets zero motion rather than a motion pass, because `camera_motion::record` answers a repeated matrix +with the target it last wrote (a moving frame's). Made frames of frame generation go through it like any other. How +well any of this looks is unmeasured (below). + +**The Neural tab's rows**, against what the network actually takes: + +| row | what it becomes here | +| --- | --- | +| Neural rendering | on / off, live | +| Style | lane 10 (`style / 128`) **and** upstream's post-blend style operator (Natural, Cinematic), as its demo does | +| Local tone | lane 11, and the style operator's strength | +| Local structure | lane 12 (or lanes 12-14 with Auto mask) | +| Skin structure | lane 13, with Auto mask only (as in NVIDIA's runtime: without it the lane is -1) | +| Auto mask | which form the structure / skin / mask triple of lanes 12-14 takes | +| Intensity | the blend back toward the frame after the network; not a network input | +| Global tone | **no counterpart**: the network has five conditioning scalars and this is not one (Streamline 2.14 ignores it too) | +| Preset | **no counterpart**: there is one network, the model directory's; NVIDIA's presets pick among networks | +| Model (Performance ... DLAA) | **no counterpart**: the network has no quality modes and always runs at the frame's size | + +### What was measured, and what was not + +There are no real weights on any machine this was built on, so **image quality and real-frame timing are not +measured**. What was measured is that the integration computes exactly what OpenDLSS-NR computes, with +`scripts/opennr_harness.py` (and `tests/test_opennr_harness.py`, its quick form; it says SKIP without the GPU). It +builds upstream's own `dlss5vk` tool from the vendored sources with Hookshot's clang, the same shim and portability +patch, and the kernels the renderer ships, then runs it on a **synthetic model directory** (deterministic E4M3 +values in exactly the manifest layout, scaled so the activations stay alive through all 71 blocks, which the harness +checks) and a synthetic frame. Measured on an RTX 5060 Ti (Blackwell), driver 615.71.09, Linux: + +- **Every route bit-exact with every other**, by upstream's own `parity` checker, on all 75 block boundaries and the + head, at 384x256, 1280x720 and 2048x1152 (the last the game's default output size): the GLSL reference route + (unfused, with every PTX family off and the PTX folder empty, so it provably launched none) as the references; + upstream's `DLSS5VK_UNFUSED=1` alone; the default fast route (PTX + counter chaining); the PTX route with barriers; + the fused GLSL route. Each also repeatable over three submissions, and the barrier and chained schedules identical. +- **Except when the activations get large.** With the synthetic decoder's weights 6-12% stronger (the harness's + `OPENNR_SYNTH_GAIN_DECODER` at 0.85 or 0.9 instead of 0.8, decoder activations at an rms of 60-190 rather than + under 10) the fused routes stopped agreeing with the unfused reference at 1280x720 and 2048x1152 -- from block 58 + for the fused GLSL kernels alone at 0.85, from blocks 40-45 for every fused route at 0.9 -- while they still agreed + with each other at 384x256. Not root-caused. An f16 overflow inside a fused kernel, handled differently from the + unfused kernels' publications, fits (the fused GLSL head carried NaNs at 0.9), but that is a guess. Whether real + weights ever drive the network there is unknown; it is the first thing to look at if a real model's routes disagree. +- **Block 0 against upstream's CPU reference (`src/reference.cpp`) does NOT match as shipped**: every tensor-core + kernel differs by an ulp in a quarter to a half of its values (the window normalize, which uses no tensor cores, + matches). Upstream's reference models Ada's tensor cores -- an FP8 m16n8k32 step as two fixed-point groups of 16 + products with 13 fractional bits, an FP16 m16n8k16 step as two groups of 8 with 24. **This Blackwell card does each + step as one group**: with the reference changed to one group of 32 FP8 products and one of 16 FP16 products (the + harness builds both; the group width and the fraction bits are the only change), every kernel of block 0 matches + exactly -- all 122,880 rows at 384x256 and 262,144 rows at 1280x720. The FP16 group needed at least 25 fractional + bits; the FP8 group 19 passed 20,000 rows and failed 3 values in 8.4 million at 720p, 20 and 24 passed, so the + harness uses 24. More bits could not be told apart on this data. Upstream's CPU reference covers block 0 only; at + 2048x1152 the CPU check was not run here (upstream's `verify` ran out of VRAM beside another game on the GPU). +- What that means: on Blackwell, OpenDLSS-NR is not bit-exact with upstream's captures, which were made on Ada; the + same `mma.sync` instruction rounds differently on the two. Whether it is bit-exact with NVIDIA's own runtime on + Blackwell (whose kernels run that instruction too) cannot be checked without captures from it. +- **In the game** (headless, the synthetic model, 2560x1440 frames, field 2560x1472): after the model check (a couple + of seconds, off the display thread) it loads in about a second, then runs end to end -- 4,000-5,400 presents a run into + gameplay, no device loss, no chained-wait timeout. The log's GPU time for the whole pass (copy, input, network, + output) was 24-43 ms a frame on average and 20-35 ms at the least per 300 frames, over two runs; those stamps bracket the pass in a + command buffer that overlaps the game's own work, and another game was running on the same GPU at the time, so + they are an upper bound, not a cost. The harness measured the network alone at 2.5-5.6 ms at 384x256, 6-13 ms at + 1280x720 and 23-31 ms at 2048x1152 (minimum of three, across runs) (fast route; also with that other game running). Upstream measured 12.6 ms at + 2560x1440 on an RTX 4070 SUPER. With the synthetic weights the picture is saturated noise, as it should be; with + Intensity at 0 the same pipeline gives back the game's frame unchanged, which checks the copy and the passes. +- Not measured: image quality, the temporal path's behaviour on real content, real-weight timing, Windows, and + robust buffer access's cost (the renderer turns it on by default, device-wide; upstream measured ~15% for it). + +VRAM: the model's raw tensors and their re-laid-out matrices, the activations of the field, and a 256 MiB host-visible +staging buffer that upstream's context keeps. + +### An AMD route + +The kernel layer is separate (`gpu/vk/opennr/opennr_net.h` is the seam: a device in, a features buffer and a head +buffer out), so an AMD port replaces what is behind it and keeps the frame passes, the model check and the menu +wiring. What it needs: + +- **`VK_KHR_cooperative_matrix` instead of `VK_NV_cooperative_matrix2`**: upstream's GLSL GEMMs use coopmat2's + workgroup scope, flexible dimensions, reductions and tensor addressing; they have to be rewritten for subgroup-scope + KHR matrices of the sizes the driver lists. **No PTX** and no `VK_NV_cuda_kernel_launch`: the GLSL route is the + whole of it, so counter chaining (PTX-only, and relying on NVIDIA's launch order) goes too. +- **FP8 on RDNA 4** (`VK_EXT_shader_float8` with E4M3 cooperative matrices), and **an FP16 path on RDNA 3**, which has + no FP8: E4M3 weights and activations widened to half, with the E4M3 publications kept as explicit roundings so the + network's arithmetic is the same. +- **Subgroup size 32**: upstream's fragment layouts assume it and AMD defaults to 64 (the renderer already pins 32 + where it can, `vk_main.cpp`). +- **Its own numerics model**: as Blackwell already differs from Ada, AMD's matrix units will round their own way. + The harness's references come from the GLSL reference route and its CPU check takes an MMA model, so the port is + checked the same way -- against the GLSL route on NVIDIA for the boundaries, and against a CPU model of its own + arithmetic for block 0 -- and will at best be close to NVIDIA's bytes, not equal to them. + ## On AMD What exists for neural rendering on an AMD card, as of November 2026, and what of it can be used here: @@ -140,9 +281,8 @@ What exists for neural rendering on an AMD card, as of November 2026, and what o - **[OpenDLSS-NR](https://github.com/maanHimself/OpenDLSS-NR)** (MIT) is a Vulkan reimplementation of the 310.8.0 network, bit-exact block by block. Its kernels need `VK_NV_cooperative_matrix2` and `VK_NV_cuda_kernel_launch` (the fast path is PTX), so it is NVIDIA-only as it stands, and it reads the weights from a model directory that "nothing in - this repository produces". An AMD port means rewriting its GEMMs for `VK_KHR_cooperative_matrix` with - `VK_EXT_shader_float8` (RDNA 4) or an FP16 fallback (RDNA 3), and a way for the player to get the weights out of their - own `nvngx_dlssnr.dll`. That is a project of its own, and it is the most promising one. + this repository produces". It is now Hookshot's third backend (below, "The open backend"); what an AMD port of it + needs is in that section. The model directory stays the player's to supply on AMD as on NVIDIA. - **AMD's own machine-learning upscaler is now here**: FSR 4, on the Upscaler row (`docs/upscaling.md`). ## What is still unproven From f7d1f6a667e613ac3a17741484329bbdeffbb61f Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 17:44:03 -0600 Subject: [PATCH 106/119] docs(readme): the Neural tab's Open backend, and the model folder it needs Co-Authored-By: Claude Opus 5.5 --- readme.md | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/readme.md b/readme.md index b615627be..4d4621873 100644 --- a/readme.md +++ b/readme.md @@ -238,11 +238,22 @@ and Frame generation are set to. Eleven rows: the switch, Backend, Model, Style, Local tone, Local structure, Global tone, Skin structure and Auto mask. All of them take effect on the next frame. -**Two ways to the same model** (the **Backend** row, saved as `nr_backend`; `RX_VK_DLSS_NR_BACKEND=auto|streamline|ngx` -over it for one run): **Streamline**, NVIDIA's plugin and the files in the table below; or **NGX direct**, which asks -NVIDIA's NGX for the feature itself, through the same NGX session DLSS uses, and needs only `nvngx_dlssnr.dll`. **Auto** -takes Streamline where it is attached and accepts the GPU, and NGX direct otherwise. The other rows apply to whichever -runs. +**Three ways to the same network** (the **Backend** row, saved as `nr_backend`; +`RX_VK_DLSS_NR_BACKEND=auto|streamline|ngx|open` over it for one run): **Streamline**, NVIDIA's plugin and the files in the +table below; **NGX direct**, which asks NVIDIA's NGX for the feature itself, through the same NGX session DLSS uses, and +needs only `nvngx_dlssnr.dll`; or **Open (OpenDLSS-NR)**, below, which runs the network on Vulkan without NVIDIA's runtime. +**Auto** takes Streamline where it is attached and accepts the GPU, then NGX direct where it can run, then Open where a model +folder is in place. The other rows apply to whichever runs. + +**Open (OpenDLSS-NR)** is [OpenDLSS-NR](https://github.com/maanHimself/OpenDLSS-NR) (MIT), a Vulkan implementation of the +DLSS 5 NR network, built into the renderer on Windows and Linux alike: on Linux it is the way to the feature today. It +needs an NVIDIA RTX 40 or 50 card for now (`VK_NV_cooperative_matrix2` and `VK_EXT_shader_float8`; the log names anything +missing), and **a model folder you supply**: the network's weights, in OpenDLSS-NR's layout (`manifest.json` and its stage +files), in a folder called `nr-model` in the game folder (or wherever `RX_VK_OPENNR_MODEL` points). **Hookshot includes no +weights and no way to get them**; without a folder the Neural tab says so. Put the folder in place before starting the +game: the GPU is set up for the network at the start. Its log lines start `vk: open NR`; +[docs/neural-rendering.md](docs/neural-rendering.md) says what was measured (the kernels, against the network's own CPU +reference, on synthetic weights) and what was not (image quality with real weights). **NGX direct** looks for `nvngx_dlssnr.dll` where NGX looks for DLSS's own runtime: the folder `RX_VK_DLSS_DIR` names, then the **`ngx` folder in the game folder**, then `%LOCALAPPDATA%\Hookshot\ngx`, then the game folder itself. On Linux NGX From 65f8a3bd384227c8a7ae9821265b76068111329a Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 9 Nov 2026 23:44:24 +0000 Subject: [PATCH 107/119] chore(release): 2.0.13 [skip ci] [skip release] ## [2.0.13](https://github.com/notquiteog/Hookshot/compare/v2.0.12...v2.0.13) (2026-11-09) ### Features * **vk:** open neural rendering, the DLSS 5 NR network run by OpenDLSS-NR ([1da7eff](https://github.com/notquiteog/Hookshot/commit/1da7efff3b0485bc5a10e3d209558d05f569f622)) --- changelog.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/changelog.txt b/changelog.txt index 686ea0c55..ca836b5fe 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,9 @@ --------------------------------------------------------------------------------------------------- +Version: 2.0.13 +Date: 09. 11. 2026 + Features: + - Vk: Open neural rendering, the DLSS 5 NR network run by OpenDLSS-NR. +--------------------------------------------------------------------------------------------------- Version: 2.0.12 Date: 09. 11. 2026 Features: From 1b807453017d8d8c06f44ec8deecb62f6ce828f3 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 18:27:40 -0600 Subject: [PATCH 108/119] feat(vk): the open backend's khr kernels, OpenDLSS-NR on VK_KHR_cooperative_matrix alone A kernel route for GPUs without VK_NV_cooperative_matrix2 (AMD RDNA 3 and 4, llvmpipe): the four matrix kernels of upstream's unfused graph (gemm_fp8, gemm_f16, window_attend, global_attend) rewritten at subgroup scope for the MMA shapes a driver lists, with upstream's host contract unchanged, so its nr::Kernels drives them as they are. - Five variants (gpu/vk/opennr/opennr_khr.h, scripts/opennr_kernels.py KHR_VARIANTS): E4M3 16x16x32 into f16 (NVIDIA's own MMA), E4M3 into f32 at k16 (RDNA 4) or k32, and E4M3 widened to f16 into f32 at 16x16x16 (RDNA 3) or 8x8x8 at 8 lanes (llvmpipe). Every k32 step rounds to half where the network does; f32 accumulators are rounded on the bits (roundF16) after each step. - No element position inside a matrix is assumed: operands are staged with plain indexing, results go back through shared memory before any per-element work. - The f16 GEMMs of the f32 variants are integer arithmetic, the one-group model measured on Blackwell: f16 products summed in f32 double-rounded 274 of 3.9M adapter outputs. - Upstream's ops, gemm_reduce and normalize kernels are compiled from build-time copies with the hardware E4M3 conversions in integers and the half fma, rsqrt and reciprocal exact (khr_numerics.glsl); checked over every positive half that these equal what upstream's reference computes. - Checked in as gpu/vk/shaders/opennr_khr_spv.h; --check and spirv-val cover it, and the test compares the two variant tables and that no khr module names an NV extension. third_party stays byte-identical. - vk_context.cpp gets a SOURCE_PATCH: HOOKSHOT_OPENNR_SUBGROUP_SIZE replaces upstream's fixed requiredSubgroupSize 32 for the khr route only (llvmpipe has 8 lanes only). Co-Authored-By: Claude Opus 5.5 --- gpu/vk/opennr/khr/gemm_f16.comp | 159 + gpu/vk/opennr/khr/gemm_fp8.comp | 187 + gpu/vk/opennr/khr/global_attend.comp | 166 + gpu/vk/opennr/khr/khr_e4m3.glsl | 22 + gpu/vk/opennr/khr/khr_mma.glsl | 166 + gpu/vk/opennr/khr/khr_numerics.glsl | 86 + gpu/vk/opennr/khr/unused.comp | 8 + gpu/vk/opennr/khr/window_attend.comp | 166 + gpu/vk/opennr/opennr_khr.h | 104 + gpu/vk/shaders/opennr_khr_spv.h | 18966 +++++++++++++++++++++++++ scripts/opennr_kernels.py | 188 +- tests/test_opennr_kernels.py | 37 +- 12 files changed, 20250 insertions(+), 5 deletions(-) create mode 100644 gpu/vk/opennr/khr/gemm_f16.comp create mode 100644 gpu/vk/opennr/khr/gemm_fp8.comp create mode 100644 gpu/vk/opennr/khr/global_attend.comp create mode 100644 gpu/vk/opennr/khr/khr_e4m3.glsl create mode 100644 gpu/vk/opennr/khr/khr_mma.glsl create mode 100644 gpu/vk/opennr/khr/khr_numerics.glsl create mode 100644 gpu/vk/opennr/khr/unused.comp create mode 100644 gpu/vk/opennr/khr/window_attend.comp create mode 100644 gpu/vk/opennr/opennr_khr.h create mode 100644 gpu/vk/shaders/opennr_khr_spv.h diff --git a/gpu/vk/opennr/khr/gemm_f16.comp b/gpu/vk/opennr/khr/gemm_f16.comp new file mode 100644 index 000000000..8ef288600 --- /dev/null +++ b/gpu/vk/opennr/khr/gemm_f16.comp @@ -0,0 +1,159 @@ +#version 460 +// (hookshot) The khr route's f16 GEMM: upstream's gemm_f16.comp for the khr route (khr_mma.glsl). The network's two f16 +// boundaries, the 16 -> 32 input adapter and the 32 -> 4 head: f16 A and B, an f16 accumulator from zero rounded after +// every k16 step. Same host contract as upstream's (push constants, bindings, specialization constants, one workgroup +// of 128 invocations per 64 rows). +// +// Two ways to a step, by variant: +// * f16 accumulators (KHR_ACC32 0, NVIDIA's shapes): one f16 16x16x16 MMA per step, as upstream's kernel -- the same +// bytes. The tiles go through shared memory as halves before they are published element by element. +// * otherwise no matrices at all: the step in integer arithmetic, exactly the one-group model the harness measured on +// Blackwell (16 products and the incoming half as one fixed-point sum with 25 fraction bits below the largest +// exponent, truncated, then rounded to half: upstream's ref::adaF16Fdpa8 with one group). An f32 accumulator cannot +// do this step faithfully: f16 products have 22 significant bits, so a sum of 16 of them is rounded to f32 before it +// is rounded to half, and on an RTX 5060 Ti that double rounding left 274 of 3.9 million adapter outputs an ulp off +// (FP8 products have 8 bits and their k32 sums stayed exact in f32: no FP8 kernel differed). These two GEMMs are +// 0.9% of the network's arithmetic (upstream's docs/execution.md), so being exact here costs little, on any GPU. +#extension GL_EXT_shader_explicit_arithmetic_types : require +#extension GL_EXT_shader_16bit_storage : require +#extension GL_EXT_shader_8bit_storage : require +#extension GL_EXT_control_flow_attributes : require +#extension GL_GOOGLE_include_directive : require +#include "common.glsl" +#include "khr_mma.glsl" + +layout(local_size_x = 128) in; + +layout(constant_id = 0) const uint K = 16; +layout(constant_id = 1) const uint TILE_N = 32; // padded N (multiple of 16) +layout(constant_id = 2) const uint FLAGS = 0; + +const uint F_QUANTIZE = 16u; // main output E4M3 bytes (binding 5) +const uint F_DUAL = 32u; // f16 to binding 2 and E4M3 to binding 5 +const uint F_OUT_F32 = 256u; // f32 output to binding 7 + +layout(push_constant) uniform Push { + uint rows; + uint N; // valid output columns + uint inputStride; // A row stride (elements) + uint outputStride; // output row stride (elements) +} pc; + +layout(std430, binding = 0) readonly buffer InputA { float16_t a[]; }; // f16 [rows, padded to 64][inputStride] +layout(std430, binding = 1) readonly buffer InputB { float16_t b[]; }; // f16 [K][TILE_N] +layout(std430, binding = 2) writeonly buffer OutputHalf { float16_t out16[]; }; +layout(std430, binding = 5) writeonly buffer OutputE4 { uint8_t out8[]; }; +layout(std430, binding = 7) writeonly buffer OutputFloat { float out32[]; }; + +const uint ROWS = 64u; + +void publish(uint row, uint column, float16_t value) { + const uint index = row * pc.outputStride + column; + if ((FLAGS & F_OUT_F32) != 0u) out32[index] = float(value); + else if ((FLAGS & F_QUANTIZE) != 0u) out8[index] = uint8_t(e4m3CodeFromF16Bits(f16Bits(value))); + else out16[index] = value; + if ((FLAGS & F_DUAL) != 0u) out8[index] = uint8_t(e4m3CodeFromF16Bits(f16Bits(value))); +} + +#if KHR_ACC32 +// ---- one k16 step in integers: upstream's src/reference.cpp adaF16Fdpa8 and fixedToF16, line for line, with one group +// of 16 products and F16_F fraction bits (the harness's "one fused group" model, which this GPU's tensor cores equal) +const int F16_F = 25; + +int f16Exponent(float value) { return max(int((floatBitsToUint(abs(value)) >> 23u) & 0xffu) - 127, -14); } + +uint roundShiftRightEven(uint value, uint shift) { + if (shift == 0u) return value; + if (shift > 31u) return 0u; + uint truncated = value >> shift; + uint remainder = value & ((1u << shift) - 1u); + uint halfway = 1u << (shift - 1u); + return truncated + ((remainder > halfway || (remainder == halfway && (truncated & 1u) != 0u)) ? 1u : 0u); +} + +// exact signed fixed-point sum -> IEEE half (the 32-bit magnitude as the reference has it: F16_F keeps it in range) +float fixedToF16(int64_t fixedSum, int binaryExponent) { + if (fixedSum == 0l) return 0.0; + bool negative = fixedSum < 0l; + uint magnitude = uint(negative ? -fixedSum : fixedSum); + int msb = findMSB(magnitude); + int valueExponent = msb + binaryExponent; + uint halfBits = negative ? 0x8000u : 0u; + if (valueExponent >= -14) { + uint significand = msb > 10 ? roundShiftRightEven(magnitude, uint(msb - 10)) : magnitude << uint(10 - msb); + if (significand >= 2048u) { significand = 1024u; valueExponent += 1; } + if (valueExponent >= 16) halfBits |= 0x7c00u; + else halfBits |= (uint(valueExponent + 15) << 10u) | (significand - 1024u); + } else { + int subnormalScale = binaryExponent + 24; + uint mantissa = subnormalScale >= 0 ? magnitude << uint(subnormalScale) + : roundShiftRightEven(magnitude, uint(-subnormalScale)); + halfBits |= min(mantissa, 1024u); + } + return float(f16FromBits(halfBits)); +} + +// accumulator (a half) + the 16 products a[i] b[i] (halves), one fixed-point group, rounded to half +float f16Step(float accumulator, float a[16], float b[16]) { + int maximumExponent = -21; + if (accumulator != 0.0) maximumExponent = f16Exponent(accumulator); + for (uint i = 0u; i < 16u; ++i) + if (a[i] != 0.0 && b[i] != 0.0) maximumExponent = max(maximumExponent, f16Exponent(a[i]) + f16Exponent(b[i])); + int64_t fixedSum = 0l; + if (accumulator != 0.0) { + int exponent = f16Exponent(accumulator); + precise float scaled = ldexp(ldexp(accumulator, -exponent), exponent - maximumExponent + F16_F); + fixedSum += int64_t(trunc(scaled)); + } + for (uint i = 0u; i < 16u; ++i) { + if (a[i] != 0.0 && b[i] != 0.0) { + int ea = f16Exponent(a[i]), eb = f16Exponent(b[i]); + precise float product = ldexp(a[i], -ea) * ldexp(b[i], -eb); // (22 bits: exact) + fixedSum += int64_t(trunc(ldexp(product, ea + eb - maximumExponent + F16_F))); + } + } + return fixedToF16(fixedSum, maximumExponent - F16_F); +} + +void main() { + const uint rowBase = (gl_WorkGroupID.y + gl_WorkGroupID.z * 65535u) * ROWS; + for (uint i = gl_LocalInvocationID.x; i < ROWS * TILE_N; i += 128u) { + const uint row = rowBase + i / TILE_N, column = i % TILE_N; + if (row >= pc.rows || column >= pc.N) continue; + float accumulator = 0.0; + for (uint kb = 0u; kb < K; kb += 16u) { + float x[16], w[16]; + for (uint j = 0u; j < 16u; ++j) { + x[j] = float(a[row * pc.inputStride + kb + j]); + w[j] = float(b[(kb + j) * TILE_N + column]); + } + accumulator = f16Step(accumulator, x, w); + } + publish(row, column, float16_t(accumulator)); // (a half already: exact) + } +} +#else +const uint TILE_COLUMNS = TILE_N / KHR_N; +shared float16_t tileC[ROWS * TILE_N]; + +void main() { + const uint thread = gl_LocalInvocationID.x; + const uint rowBase = (gl_WorkGroupID.y + gl_WorkGroupID.z * 65535u) * ROWS; + // (A rows past the end are the activation's zeroed padding rows, which its allocation always has: kernels.h) + for (uint t = gl_SubgroupID; t < (ROWS / KHR_M) * TILE_COLUMNS; t += gl_NumSubgroups) { + const uint tr = (t / TILE_COLUMNS) * KHR_M, tc = (t % TILE_COLUMNS) * KHR_N; + MAT_C c = MAT_C(0.0); + for (uint kb = 0u; kb < K; kb += 16u) { + HMMA_K16(c, a, (rowBase + tr) * pc.inputStride + kb, pc.inputStride, KHR_HK, b, kb * TILE_N + tc, TILE_N, + KHR_HK * TILE_N, ROW_MAJOR) + } + STORE_C(c, tileC, tr * TILE_N + tc, TILE_N) + } + barrier(); + for (uint i = thread; i < ROWS * TILE_N; i += 128u) { + const uint row = rowBase + i / TILE_N, column = i % TILE_N; + if (row >= pc.rows || column >= pc.N) continue; + publish(row, column, tileC[i]); + } +} +#endif diff --git a/gpu/vk/opennr/khr/gemm_fp8.comp b/gpu/vk/opennr/khr/gemm_fp8.comp new file mode 100644 index 000000000..a0fcdb9e9 --- /dev/null +++ b/gpu/vk/opennr/khr/gemm_fp8.comp @@ -0,0 +1,187 @@ +#version 460 +// (hookshot) The khr route's FP8 GEMM: upstream's gemm_fp8.comp (third_party/opendlss-nr/shaders) on +// VK_KHR_cooperative_matrix alone, for any GPU that lists the shapes of a khr variant (khr_mma.glsl). +// +// The same kernel to the host as upstream's: its push constants, bindings, specialization constants and dispatch grid, +// so upstream's nr::Kernels::gemmFp8 drives it unchanged. The same arithmetic: D = A (E4M3, rows x K) * B (E4M3, K x N) +// as a chain of k32 steps in K order, each rounded to half; the residual (optionally E4, optionally scaled, the scale +// product rounded once) seeds the accumulator of the first step; partitions accumulate from zero and their sums are +// added in half, in partition order; the epilogue is SiLU (upstream's f32 spelling, mpCubicSilu, equal to its half +// spelling for all 65536 inputs), then the E4M3 publication (RNE, saturating, NaN -> +0, the sign of zero kept). +// +// What differs is only how a workgroup gets there: each k32 step stages A [BM][32] and B [BN][32] in shared memory with +// plain loads (widened to f16 when the variant has no E4M3 matrices), then each subgroup multiplies its own tiles; the +// residual and the result go through shared memory as halves, element by element, so no element's position inside a +// cooperative matrix is ever assumed. DEPTH, PADV4 and KSTEP (upstream's prefetch, padding and staging width) are +// accepted and change nothing here: they never change the arithmetic in upstream's kernel either. +#extension GL_EXT_shader_explicit_arithmetic_types : require +#extension GL_EXT_shader_16bit_storage : require +#extension GL_EXT_shader_8bit_storage : require +#extension GL_EXT_control_flow_attributes : require +#extension GL_GOOGLE_include_directive : require +#include "common.glsl" +#include "khr_e4m3.glsl" +#include "khr_mma.glsl" + +layout(constant_id = 0) const uint K = 32; +layout(constant_id = 1) const uint TILES = 4; // 16-column tiles per workgroup row block; BN = 16 * TILES +layout(constant_id = 2) const uint FLAGS = 0; +layout(constant_id = 3) const uint PARTITION = 0; +layout(constant_id = 4) const uint DEPTH = 4; // (upstream's prefetch depth: not used) +layout(constant_id = 5) const uint PADV4 = 1; // (upstream's shared padding: not used) +layout(constant_id = 7) const uint SUBGROUPS = 4; // BM = 16 * SUBGROUPS rows; 32 * SUBGROUPS invocations +layout(local_size_x_id = 8) in; // = 32 * SUBGROUPS +layout(constant_id = 9) const uint SPLITK = 1; // K partitions computed by separate workgroups (partials to binding 2) +layout(constant_id = 10) const uint KSTEP = 32; // (upstream's staging width: not used, steps are always k32) + +const uint F_RESIDUAL = 1u; +const uint F_SCALE_RESIDUAL = 2u; +const uint F_SILU = 8u; +const uint F_QUANTIZE = 16u; +const uint F_DUAL = 32u; +const uint F_RESIDUAL_E4 = 64u; +const uint F_BROADCAST_INPUT = 128u; + +layout(push_constant) uniform Push { + uint rows; + uint N; + uint Nmatrix; + uint weightColumnOffset; + uint inputStride; + uint inputColumnBase; + uint outputStride; + uint outputColumnOffset; + uint auxHalfOffset; // per-column f16 scale vector, in half units within binding 4 + uint batches; + uint columnGroups; + uint splitStride; // SPLITK > 1: f16 elements per partition slice of the partial buffer +} pc; + +layout(std430, binding = 0) readonly buffer InputA { uvec4 a4[]; }; // E4M3 [rows][inputStride] +layout(std430, binding = 1) readonly buffer InputB { uvec4 b4[]; }; // E4M3 [batch][K/32][Nmatrix][32] +layout(std430, binding = 2) writeonly buffer OutputHalf { float16_t out16[]; }; +layout(std430, binding = 3) readonly buffer ResidualHalf { float16_t residual16[]; }; +layout(std430, binding = 4) readonly buffer Aux { float16_t aux16[]; }; +layout(std430, binding = 5) writeonly buffer OutputE4 { uint8_t out8[]; }; +layout(std430, binding = 6) readonly buffer ResidualE4 { uint8_t residual8[]; }; + +const uint THREADS = 32u * SUBGROUPS; +const uint BM = 16u * SUBGROUPS; +const uint BN = 16u * TILES; +const uint ROWW = OP_WORDS + 1u; // uvec4 words per staged 32-element row, one of padding +const uint STEPW = KHR_K * OP_WORDS / 32u; // uvec4 words per KHR_K elements of K +// Which tiles a subgroup owns: subgroups split the block's MxN tiles row tile by row tile; with fewer rows than +// subgroups (llvmpipe: 8 lanes, 8x8 tiles) two or more subgroups share a row tile and split its columns. +const uint SUBGROUP_COUNT = THREADS / KHR_SG; +const uint ROW_TILES = BM / KHR_M; +const uint SUBGROUPS_PER_ROW = SUBGROUP_COUNT / ROW_TILES; +const uint COLUMN_TILES = BN / KHR_N; +const uint TILES_PER_SUBGROUP = COLUMN_TILES / SUBGROUPS_PER_ROW; + +shared uvec4 stageA[BM * ROWW]; +shared uvec4 stageB[BN * ROWW]; +shared float16_t block16[BM * BN]; // the residual in, the result out: f16 [BM][BN] + +void main() { + const uint thread = gl_LocalInvocationID.x; + const uint subgroup = gl_SubgroupID; + const uint split = gl_WorkGroupID.x % SPLITK; + const uint columnLinear = gl_WorkGroupID.x / SPLITK; + const uint batch = columnLinear / pc.columnGroups; + const uint columnGroup = columnLinear % pc.columnGroups; + const uint blockRow = (gl_WorkGroupID.y + gl_WorkGroupID.z * 65535u) * BM; + const uint colBase = columnGroup * BN; + const uint outColumn = pc.outputColumnOffset + batch * pc.N; + const uint tileRow = (subgroup / SUBGROUPS_PER_ROW) * KHR_M; // within the block + const uint tileColumn0 = (subgroup % SUBGROUPS_PER_ROW) * TILES_PER_SUBGROUP; // first column tile + const bool rowsValid = blockRow + tileRow < pc.rows; // (a tile wholly past the end: no MMAs, nothing stored) + + // ---- the prologue: the residual seeds the first step's accumulator (split 0 only), round_f16(residual * scale) + const bool seedResidual = (FLAGS & F_RESIDUAL) != 0u && split == 0u; + if (seedResidual) { + for (uint i = thread; i < BM * BN; i += THREADS) { + const uint row = blockRow + i / BN, column = colBase + i % BN; + float value = 0.0; + if (row < pc.rows) { + const uint index = row * pc.outputStride + outColumn + column; + value = (FLAGS & F_RESIDUAL_E4) != 0u ? e4m3HwToF32(uint(residual8[index])) : float(residual16[index]); + if ((FLAGS & F_SCALE_RESIDUAL) != 0u) value = roundF16(value * float(aux16[pc.auxHalfOffset + column])); + } + block16[i] = float16_t(value); // (a half already: exact) + } + barrier(); + } + MAT_C acc[TILES_PER_SUBGROUP]; + MAT_C total[TILES_PER_SUBGROUP]; + [[unroll]] for (uint t = 0u; t < TILES_PER_SUBGROUP; ++t) { + if (seedResidual) { + LOAD_C(acc[t], block16, tileRow * BN + (tileColumn0 + t) * KHR_N, BN) + } else { + acc[t] = MAT_C(0.0); + } + total[t] = MAT_C(0.0); + } + + // ---- the k32 steps of this workgroup's partition + const uint aColumnBase = pc.inputColumnBase + (((FLAGS & F_BROADCAST_INPUT) != 0u) ? 0u : batch * K); + const uint steps = K / 32u / SPLITK; + const uint kBegin = split * steps; + for (uint s = 0u; s < steps; ++s) { + const uint step = kBegin + s; + barrier(); // (the previous step's operands are read) + for (uint i = thread; i < BM * 2u; i += THREADS) { // A: BM rows of 32 codes, two uvec4 each + const uint r = i >> 1u, w = i & 1u; + const uint row = min(blockRow + r, pc.rows - 1u); + const uvec4 codes = a4[(row * pc.inputStride + aColumnBase + step * 32u) / 16u + w]; + STAGE16(stageA, r * ROWW + w * (OP_WORDS / 2u), codes) + } + for (uint i = thread; i < BN * 2u; i += THREADS) { // B: the k32 tile of BN columns, contiguous (tile-major) + const uint n = i >> 1u, w = i & 1u; + const uvec4 codes = b4[((batch * (K / 32u) + step) * pc.Nmatrix + pc.weightColumnOffset + colBase + n) * 2u + w]; + STAGE16(stageB, n * ROWW + w * (OP_WORDS / 2u), codes) + } + barrier(); + if (rowsValid) { + [[unroll]] for (uint t = 0u; t < TILES_PER_SUBGROUP; ++t) { + MMA_K32(acc[t], stageA, tileRow * ROWW, ROWW, STEPW, stageB, (tileColumn0 + t) * KHR_N * ROWW, ROWW, STEPW, + COL_MAJOR) + } + const uint kb = step * 32u; + if (PARTITION != 0u && (((kb + 32u) % PARTITION) == 0u || kb + 32u >= K)) { + [[unroll]] for (uint t = 0u; t < TILES_PER_SUBGROUP; ++t) { + if (kb < PARTITION) { + total[t] = acc[t]; + } else { + ADD_C(total[t], acc[t]) + } + acc[t] = MAT_C(0.0); + } + } + } + } + if (PARTITION != 0u) { + [[unroll]] for (uint t = 0u; t < TILES_PER_SUBGROUP; ++t) acc[t] = total[t]; + } + + // ---- the epilogue: the tiles as halves in shared memory, then published element by element + barrier(); // (every subgroup has read the prologue's block16) + if (rowsValid) { + [[unroll]] for (uint t = 0u; t < TILES_PER_SUBGROUP; ++t) { + STORE_C(acc[t], block16, tileRow * BN + (tileColumn0 + t) * KHR_N, BN) + } + } + barrier(); + for (uint i = thread; i < BM * BN; i += THREADS) { + const uint row = blockRow + i / BN, column = colBase + i % BN; + if (row >= pc.rows) continue; + float16_t value = block16[i]; + if (SPLITK > 1u) { // the partition's raw f16 partial sums, [split][batch][rows][N]; gemm_reduce publishes them + out16[split * pc.splitStride + row * pc.N + batch * pc.N * pc.rows + column] = value; + continue; + } + if ((FLAGS & F_SILU) != 0u) value = float16_t(mpCubicSilu(float(value))); + const uint index = row * pc.outputStride + outColumn + column; + if ((FLAGS & (F_QUANTIZE | F_DUAL)) != 0u) out8[index] = uint8_t(e4m3CodeFromF16Bits(f16Bits(value))); + if ((FLAGS & F_QUANTIZE) == 0u) out16[index] = value; + } +} diff --git a/gpu/vk/opennr/khr/global_attend.comp b/gpu/vk/opennr/khr/global_attend.comp new file mode 100644 index 000000000..175fe5674 --- /dev/null +++ b/gpu/vk/opennr/khr/global_attend.comp @@ -0,0 +1,166 @@ +#version 460 +// (hookshot) The khr route's global ViT cosine attention: upstream's global_attend.comp on VK_KHR_cooperative_matrix +// alone (khr_mma.glsl). One workgroup of 32 invocations per (head, 16-query tile), as upstream's (one subgroup there; +// four on llvmpipe's 8 lanes). Keys over the 64-padded token count in natural order; the padding keys' exp(0) is +// subtracted from the denominator once; the E4M3 weights are unnormalized and the reciprocal multiplies the value +// accumulator afterwards (upstream's docs/network.md, the ViT's four differences). +// +// The keys and values are read 64 at a time. With E4M3 matrices they are loaded straight from the buffer, as upstream +// does; widened to f16 they are staged in shared memory first. The value accumulator lives in shared memory between +// the chunks as halves: an accumulator is a half after every k32 step anyway, so this changes nothing. +#extension GL_EXT_shader_explicit_arithmetic_types : require +#extension GL_EXT_shader_16bit_storage : require +#extension GL_EXT_shader_8bit_storage : require +#extension GL_EXT_control_flow_attributes : require +#extension GL_GOOGLE_include_directive : require +#include "common.glsl" +#include "khr_mma.glsl" +#include "khr_numerics.glsl" + +layout(local_size_x = 32) in; + +layout(constant_id = 0) const uint PADDED_TOKENS = 192; + +layout(push_constant) uniform Push { + uint tokens; + uint heads; + uint channels; +} pc; + +layout(std430, binding = 0) readonly buffer Normalized { uint8_t qkv[]; }; // E4M3 [paddedTokens][channels*3] +layout(std430, binding = 5) writeonly buffer Attended { uint8_t attended[]; }; // E4M3 [tokens][channels] + +shared float16_t scores[16u * PADDED_TOKENS]; +#if KHR_E4 +shared uint8_t weights[16u * PADDED_TOKENS]; +#define WEIGHTS weights +#else +#define WEIGHTS scores // (the weights as halves, in place of the scores they are made from) +shared OPT qs[16u * 32u]; // [query][component] +shared OPT chunk[64u * 32u]; // 64 keys' K (then V): [key][component] +#endif +shared float16_t outputs[16u * 32u]; +shared float16_t reciprocals[16]; + +float16_t vitExpWeight(float16_t score) { + // Global-ViT approximation constants (f32 literals converted to half by PTX); the half fma rounded once on any GPU + float16_t affine = fmaHalf(score, float16_t(0.08953946828842163), float16_t(1.7093614339828491)); + affine = clamp(affine, float16_t(1.439453125), float16_t(1.9775390625)); + uint bits = f16Bits(affine); + uint exponentialBits = ((bits << 4u) + 0x4000u) & 0xffffu; + return f16FromBits(exponentialBits); +} + +float16_t softmaxPair(uint row, uint base, uint pair, uint parity) { + uint key = row * PADDED_TOKENS + base + pair * 2u + parity; + precise float16_t a = scores[key] + scores[key + 8u]; + precise float16_t b = scores[key + 16u] + scores[key + 24u]; + precise float16_t c = scores[key + 32u] + scores[key + 40u]; + precise float16_t d = scores[key + 48u] + scores[key + 56u]; + precise float16_t ab = a + b; + precise float16_t abc = ab + c; + return abc + d; +} + +float16_t softmax64(uint row, uint base) { + precise float16_t e0 = softmaxPair(row, base, 0u, 0u) + softmaxPair(row, base, 1u, 0u); + precise float16_t e1 = e0 + softmaxPair(row, base, 2u, 0u); + precise float16_t even = e1 + softmaxPair(row, base, 3u, 0u); + precise float16_t o0 = softmaxPair(row, base, 0u, 1u) + softmaxPair(row, base, 1u, 1u); + precise float16_t o1 = o0 + softmaxPair(row, base, 2u, 1u); + precise float16_t odd = o1 + softmaxPair(row, base, 3u, 1u); + return even + odd; +} + +void main() { + const uint lane = gl_LocalInvocationID.x; + const uint head = gl_WorkGroupID.x; + const uint qTile = gl_WorkGroupID.y; + const uint stride3 = pc.channels * 3u; + const uint headBase = head * 96u; + const uint qBase = qTile * 16u * stride3 + headBase; + + // ---- S = Q K^T over the keys, 64 at a time, from zero +#if !KHR_E4 + for (uint i = lane; i < 16u * 32u; i += 32u) qs[i] = opFromCode(uint(qkv[qBase + (i >> 5u) * stride3 + (i & 31u)])); +#endif + for (uint key0 = 0u; key0 < PADDED_TOKENS; key0 += 64u) { +#if !KHR_E4 + barrier(); + for (uint i = lane; i < 64u * 32u; i += 32u) + chunk[i] = opFromCode(uint(qkv[(key0 + (i >> 5u)) * stride3 + headBase + 32u + (i & 31u)])); + barrier(); +#endif + for (uint t = gl_SubgroupID; t < (16u / KHR_M) * (64u / KHR_N); t += gl_NumSubgroups) { + const uint q0 = (t / (64u / KHR_N)) * KHR_M, k0 = (t % (64u / KHR_N)) * KHR_N; + MAT_C c = MAT_C(0.0); +#if KHR_E4 + MMA_K32(c, qkv, qBase + q0 * stride3, stride3, KHR_K, qkv, (key0 + k0) * stride3 + headBase + 32u, stride3, + KHR_K, COL_MAJOR) +#else + MMA_K32(c, qs, q0 * 32u, 32u, KHR_K, chunk, k0 * 32u, 32u, KHR_K, COL_MAJOR) +#endif + STORE_C(c, scores, q0 * PADDED_TOKENS + key0 + k0, PADDED_TOKENS) + } + } + barrier(); + for (uint i = lane; i < 16u * PADDED_TOKENS; i += 32u) scores[i] = vitExpWeight(scores[i]); + barrier(); + + if (lane < 16u) { + precise float16_t total = float16_t(0.0); + for (uint base = 0u; base < PADDED_TOKENS; base += 64u) total = total + softmax64(lane, base); + uint padding = PADDED_TOKENS - pc.tokens; + if (padding > 0u) { + precise float16_t correction = float16_t(roundF16(float(vitExpWeight(float16_t(0.0))) * float(padding))); + total = total - correction; + } + reciprocals[lane] = reciprocalHalf(total); // (khr_numerics.glsl: RN16 of the exact 1 / total) + } +#if !KHR_E4 + barrier(); // (the weights replace the scores the totals were read from) +#endif + for (uint i = lane; i < 16u * PADDED_TOKENS; i += 32u) { + uint code = e4m3CodeFromF16Bits(f16Bits(scores[i])); +#if KHR_E4 + weights[i] = uint8_t(code); +#else + scores[i] = opFromCode(code); +#endif + } + for (uint i = lane; i < 16u * 32u; i += 32u) outputs[i] = float16_t(0.0); + barrier(); + + // ---- O = P V, k32 step by k32 step in key order; the accumulator a half between steps (in `outputs`) + for (uint key0 = 0u; key0 < PADDED_TOKENS; key0 += 64u) { +#if !KHR_E4 + for (uint i = lane; i < 64u * 32u; i += 32u) + chunk[i] = opFromCode(uint(qkv[(key0 + (i >> 5u)) * stride3 + headBase + 64u + (i & 31u)])); + barrier(); +#endif + for (uint t = gl_SubgroupID; t < (16u / KHR_M) * (32u / KHR_N); t += gl_NumSubgroups) { + const uint q0 = (t / (32u / KHR_N)) * KHR_M, c0 = (t % (32u / KHR_N)) * KHR_N; + MAT_C c; + LOAD_C(c, outputs, q0 * 32u + c0, 32u) + [[unroll]] for (uint kb = 0u; kb < 64u; kb += 32u) { +#if KHR_E4 + MMA_K32(c, WEIGHTS, q0 * PADDED_TOKENS + key0 + kb, PADDED_TOKENS, KHR_K, qkv, + (key0 + kb) * stride3 + headBase + 64u + c0, stride3, KHR_K * stride3, ROW_MAJOR) +#else + MMA_K32(c, WEIGHTS, q0 * PADDED_TOKENS + key0 + kb, PADDED_TOKENS, KHR_K, chunk, kb * 32u + c0, 32u, + KHR_K * 32u, ROW_MAJOR) +#endif + } + STORE_C(c, outputs, q0 * 32u + c0, 32u) + } + barrier(); + } + + for (uint i = lane; i < 16u * 32u; i += 32u) { + uint row = i >> 5u, component = i & 31u; + uint token = qTile * 16u + row; + if (token >= pc.tokens) continue; + precise float value = roundF16(float(outputs[i]) * float(reciprocals[row])); + attended[token * pc.channels + head * 32u + component] = uint8_t(e4m3CodeFromF16Bits(f16Bits(float16_t(value)))); + } +} diff --git a/gpu/vk/opennr/khr/khr_e4m3.glsl b/gpu/vk/opennr/khr/khr_e4m3.glsl new file mode 100644 index 000000000..283a73186 --- /dev/null +++ b/gpu/vk/opennr/khr/khr_e4m3.glsl @@ -0,0 +1,22 @@ +// (hookshot) Upstream's hardware E4M3 conversions (common.glsl under DLSS_E4M3_HW, which needs VK_EXT_shader_float8), +// spelled in integer arithmetic, for the khr route: the same names and the same results, on any GPU. +// +// Upstream states the equality itself (common.glsl): cvt.rn.satfinite.e4m3 "is equal to e4m3CodeFromF16Bits for every +// non-NaN half", and its e4m3Hw guards NaN to +0 before converting, which e4m3CodeFromF16Bits does too. The decode reads +// NaN codes as 0, as e4m3HwToF32 does. So these are upstream's own functions, not an approximation of them. +// +// scripts/opennr_kernels.py compiles upstream's ops.comp and gemm_reduce.comp with this file in place of their +// `#define DLSS_E4M3_HW` (a build-time copy; third_party stays upstream's), and the khr kernels include it. +#ifndef KHR_E4M3_GLSL +#define KHR_E4M3_GLSL + +uint8_t e4m3Hw(float16_t value) { return uint8_t(e4m3CodeFromF16Bits(f16Bits(value))); } + +uint16_t e4m3HwPair(f16vec2 value) { + return uint16_t(e4m3CodeFromF16Bits(f16Bits(value.x)) | (e4m3CodeFromF16Bits(f16Bits(value.y)) << 8u)); +} + +// (both NaN codes to +0, as the hardware decode's isnan guard gives; e4m3ToF32 alone would make 0xff a -0) +float e4m3HwToF32(uint code) { return (code & 0x7fu) == 0x7fu ? 0.0 : e4m3ToF32(code & 0xffu); } + +#endif diff --git a/gpu/vk/opennr/khr/khr_mma.glsl b/gpu/vk/opennr/khr/khr_mma.glsl new file mode 100644 index 000000000..95c067b32 --- /dev/null +++ b/gpu/vk/opennr/khr/khr_mma.glsl @@ -0,0 +1,166 @@ +// (hookshot) OpenDLSS-NR's matrix arithmetic on VK_KHR_cooperative_matrix alone, at subgroup scope: the khr route's +// kernels (gpu/vk/opennr/khr/*.comp) are written against this file and nothing vendor-specific. +// +// The network's contract (upstream's docs/numerics.md) is a chain of k32 steps: each step adds 32 E4M3 x E4M3 products +// to an f16 accumulator and rounds the result to half; the f16 GEMMs (the input adapter, the head) do the same with +// k16 steps of f16 products. Where an accumulator is published between steps is part of the result, so a variant may +// change how a step is computed but never where it rounds. +// +// A variant is a set of defines (scripts/opennr_kernels.py KHR_VARIANTS, gpu/vk/opennr/opennr_khr.h kVariants): +// KHR_E4 1: the operands are E4M3 cooperative matrices (VK_EXT_shader_float8); 0: E4M3 widened to f16 when it is +// staged (exact: every E4M3 value is a half, and every product of two of them is exact in f32) +// KHR_M/N/K the MMA shape the driver lists for those operands; KHR_HK the K of the f16 GEMMs' MMA (16, or K below 16) +// KHR_ACC32 0: f16 accumulators, one MMA per step (only with KHR_E4 and K 32: NVIDIA's own mma.sync, so the route +// computes the bytes of upstream's GLSL route); 1: f32 accumulators seeded with the f16 one, the step's +// MMAs into them, then an explicit round to half on the bits (roundF16) -- one rounding per step, as the +// network has it, on any hardware that has f32 accumulation (AMD RDNA 3/4 WMMA, llvmpipe) +// KHR_SG the subgroup size the kernels are made for and the pipelines are created with (32, or 8 on llvmpipe) +// The products are exact either way; what an ACC32 variant cannot promise is the hardware's own order of adding them +// inside an MMA, which an f16 accumulator would hide only on the GPU the network was made on. So an ACC32 variant is +// close to the reference, not equal to it: docs/neural-rendering.md says by how much, measured. +// +// Element layout: nothing here, or in the kernels, assumes where an element of a cooperative matrix lives. Every +// operand is staged in shared memory with plain indexing and loaded from there (or loaded straight from a buffer); +// every accumulator goes back to shared memory before any per-element work that depends on its position; the only +// per-element operation on a matrix itself is the rounding, which does not depend on the position (acc[i] = f(acc[i])). +#ifndef KHR_MMA_GLSL +#define KHR_MMA_GLSL + +#extension GL_KHR_memory_scope_semantics : require +#extension GL_KHR_cooperative_matrix : require +#extension GL_KHR_shader_subgroup_basic : require +#if KHR_E4 +#extension GL_EXT_float_e4m3 : require +#endif + +#if !defined(KHR_E4) || !defined(KHR_M) || !defined(KHR_N) || !defined(KHR_K) || !defined(KHR_HK) || \ + !defined(KHR_ACC32) || !defined(KHR_SG) +#error "a khr variant needs KHR_E4, KHR_M, KHR_N, KHR_K, KHR_HK, KHR_ACC32 and KHR_SG (scripts/opennr_kernels.py)" +#endif +#if !KHR_ACC32 && (!KHR_E4 || KHR_K != 32 || KHR_HK != 16) +#error "f16 accumulators round once per MMA: only an E4M3 16x16x32 (and f16 16x16x16) MMA rounds where the network does" +#endif +#if (32 % KHR_K) != 0 || (16 % KHR_HK) != 0 || (16 % KHR_M) != 0 || (16 % KHR_N) != 0 +#error "the MMA shape must divide the network's 16x16 tiles and its k32 / k16 steps" +#endif + +#if KHR_E4 +#define OPT uint8_t // an operand element as staged in shared memory +#define OPCT floate4m3_t // the operand matrices' component type +#define OP_WORDS 2u // uvec4 words per 32-element operand row +OPT opFromCode(uint code) { return uint8_t(code); } +#else +#define OPT float16_t +#define OPCT float16_t +#define OP_WORDS 4u +// The E4M3 code widened to half. Exact (every E4M3 value is a half), so the conversion's rounding mode cannot matter; +// NaN codes read as 0, as upstream's reference decodes them (no weight is one, and no activation is ever published as +// one: docs/numerics.md). +OPT opFromCode(uint code) { return float16_t(e4m3ToF32(code)); } +#endif + +#if KHR_ACC32 +#define ACCT float +#else +#define ACCT float16_t +#endif + +#define MAT_A coopmat +#define MAT_B coopmat +#define MAT_C coopmat +#define MAT_C16 coopmat +#define HMAT_A coopmat +#define HMAT_B coopmat + +#define ROW_MAJOR gl_CooperativeMatrixLayoutRowMajor +#define COL_MAJOR gl_CooperativeMatrixLayoutColumnMajor + +// The end of a step: the accumulator published as half. f16 accumulators already are; f32 ones hold the step's sum +// and are rounded here, RNE on the bit pattern (common.glsl roundF16), so no conversion's rounding mode is involved. +#if KHR_ACC32 +#define ROUND_C(c) \ + { \ + for (int r_ = 0; r_ < c.length(); ++r_) c[r_] = roundF16(c[r_]); \ + } +#else +#define ROUND_C(c) +#endif + +// c from / to f16 elements (shared or buffer memory). An f32 accumulator only ever holds values that are halves when +// it is loaded or stored, so both conversions are exact. +#if KHR_ACC32 +#define LOAD_C(c, array, offset, stride) \ + { \ + MAT_C16 h_; \ + coopMatLoad(h_, array, offset, stride, ROW_MAJOR); \ + c = MAT_C(h_); \ + } +#define STORE_C(c, array, offset, stride) \ + { \ + MAT_C16 h_ = MAT_C16(c); \ + coopMatStore(h_, array, offset, stride, ROW_MAJOR); \ + } +#else +#define LOAD_C(c, array, offset, stride) coopMatLoad(c, array, offset, stride, ROW_MAJOR); +#define STORE_C(c, array, offset, stride) coopMatStore(c, array, offset, stride, ROW_MAJOR); +#endif + +// c += the 32 products of one k32 step, then the step's rounding. A is row-major at aOff (stride aS), B at bOff (stride +// bS, layout bL); aInc and bInc advance them by KHR_K elements of K, in the arrays' own units. +#define MMA_K32(c, A, aOff, aS, aInc, B, bOff, bS, bInc, bL) \ + { \ + [[unroll]] for (uint s_ = 0u; s_ < 32u / KHR_K; ++s_) { \ + MAT_A a_; \ + coopMatLoad(a_, A, (aOff) + s_ * (aInc), aS, ROW_MAJOR); \ + MAT_B b_; \ + coopMatLoad(b_, B, (bOff) + s_ * (bInc), bS, bL); \ + c = coopMatMulAdd(a_, b_, c); \ + } \ + ROUND_C(c) \ + } + +// The same for one k16 step of the f16 GEMMs (f16 operands). +#define HMMA_K16(c, A, aOff, aS, aInc, B, bOff, bS, bInc, bL) \ + { \ + [[unroll]] for (uint s_ = 0u; s_ < 16u / KHR_HK; ++s_) { \ + HMAT_A a_; \ + coopMatLoad(a_, A, (aOff) + s_ * (aInc), aS, ROW_MAJOR); \ + HMAT_B b_; \ + coopMatLoad(b_, B, (bOff) + s_ * (bInc), bS, bL); \ + c = coopMatMulAdd(a_, b_, c); \ + } \ + ROUND_C(c) \ + } + +// x + y of two accumulators holding halves, published as half (the split-K partition sums of docs/numerics.md) +#if KHR_ACC32 +#define ADD_C(x, y) \ + { \ + x = x + y; \ + ROUND_C(x) \ + } +#else +#define ADD_C(x, y) x = x + y; +#endif + +// Sixteen E4M3 codes (a uvec4) as staged operands in a uvec4 array: as they are, or widened to sixteen halves (two +// words). `at` is the uvec4 index of the first word. +#if KHR_E4 +#define STAGE16(array, at, codes) array[at] = codes; +#else +uint halfPairOfCodes(uint codes, uint shift) { + return packFloat2x16(f16vec2(float16_t(e4m3ToF32((codes >> shift) & 0xffu)), + float16_t(e4m3ToF32((codes >> (shift + 8u)) & 0xffu)))); +} +uvec4 halvesOfCodes(uvec2 codes) { + return uvec4(halfPairOfCodes(codes.x, 0u), halfPairOfCodes(codes.x, 16u), halfPairOfCodes(codes.y, 0u), + halfPairOfCodes(codes.y, 16u)); +} +#define STAGE16(array, at, codes) \ + { \ + array[at] = halvesOfCodes((codes).xy); \ + array[(at) + 1u] = halvesOfCodes((codes).zw); \ + } +#endif + +#endif diff --git a/gpu/vk/opennr/khr/khr_numerics.glsl b/gpu/vk/opennr/khr/khr_numerics.glsl new file mode 100644 index 000000000..5b001f98c --- /dev/null +++ b/gpu/vk/opennr/khr/khr_numerics.glsl @@ -0,0 +1,86 @@ +// (hookshot) The three places the network's arithmetic leans on what a GPU's ALU happens to do, made exact for the khr +// route, so it gives the same halves on any conforming Vulkan driver. +// +// * The half fma (the window attention's square sums, the ViT's exponential). A GPU with f16 FMA hardware rounds +// once; one that promotes to f32 rounds twice, and f32 has too few bits for that to be harmless when the addend is +// far from the product (llvmpipe did this: 166 of 393,216 window-normalize outputs a code off, an RTX 5060 Ti none). +// * The cosine norm's inverse square root and the softmax's reciprocal. Upstream spells them inversesqrt and 1.0 / x +// in GLSL, rsqrt.approx / rcp.rn in its PTX, and both are rounded to half. Vulkan allows them 2 and 2.5 ulp of f32, +// and 1 / sqrt(x) of a half comes within 2^-21.4 of a half's rounding midpoint, so a looser driver may round the +// other way. Here they are the correctly rounded halves of the exact values -- which, checked for every positive +// half (the totals and square sums are halves), are what upstream's reference computes too: RN16(RN32(1 / RN32( +// sqrt(x)))) and RN16(RN32(1 / x)) never differ from RN16 of the exact 1 / sqrt(x) and 1 / x. +// All of it in f32 arithmetic whose every product is exact, so not even an fma is assumed to be fused. +#ifndef KHR_NUMERICS_GLSL +#define KHR_NUMERICS_GLSL + +// The midpoint between a positive finite half and its upper / lower neighbour, as an f32 (12 bits: exact). Above the +// largest half the midpoint is 65520, where RNE goes to infinity. +float halfMidpointAbove(float16_t h) { + uint bits = f16Bits(h); + return bits >= 0x7bffu ? 65520.0 : 0.5 * (float(h) + float(f16FromBits(bits + 1u))); +} +float halfMidpointBelow(float16_t h) { return 0.5 * (float(h) + float(f16FromBits(f16Bits(h) - 1u))); } +float16_t halfAbove(float16_t h) { return f16FromBits(f16Bits(h) + 1u); } +float16_t halfBelow(float16_t h) { return f16FromBits(f16Bits(h) - 1u); } + +// RN16(1 / x) of a positive finite half. y = 1 / x lies above a midpoint m exactly when m x < 1, and m x (12 by 11 +// bits) is exact in f32. A midpoint never equals y (that would need m and x both powers of two). +float16_t reciprocalHalf(float16_t x) { + const float xf = float(x); + if (!(xf > 0.0) || isinf(xf)) return float16_t(1.0 / xf); + float16_t h = float16_t(roundF16(1.0 / xf)); + if (isinf(h) || h == float16_t(0.0)) return h; + for (int i = 0; i < 2; ++i) { // (the quotient is within an ulp of f32: one step is plenty) + precise float up = halfMidpointAbove(h) * xf; + if (up < 1.0) h = halfAbove(h); + precise float down = halfMidpointBelow(h) * xf; + if (h > float16_t(0.0) && down > 1.0) h = halfBelow(h); + } + return h; +} + +// Whether m m x < 1, exactly, for an m of at most 12 significant bits and a half x: m m is exact (24 bits); split into +// halves of 12 bits, each times x is exact (23 bits); x hi - 1 is exact where it matters (x hi near 1: Sterbenz) and +// the sum's sign is right whatever its rounding. +bool squareTimesBelowOne(float m, float x) { + precise float m2 = m * m; + const float hi = uintBitsToFloat(floatBitsToUint(m2) & 0xfffff000u); + precise float lo = m2 - hi; + precise float d = x * hi - 1.0; + precise float s = d + x * lo; + return s < 0.0; +} + +// RN16(1 / sqrt(x)) of a positive finite half: y lies above a midpoint m exactly when m^2 x < 1 +float16_t inverseSqrtHalf(float16_t x) { + const float xf = float(x); + if (!(xf > 0.0) || isinf(xf)) return float16_t(inversesqrt(xf)); + float16_t h = float16_t(roundF16(inversesqrt(xf))); + for (int i = 0; i < 2; ++i) { + if (squareTimesBelowOne(halfMidpointAbove(h), xf)) h = halfAbove(h); + if (!squareTimesBelowOne(halfMidpointBelow(h), xf)) h = halfBelow(h); + } + return h; +} + +// RN16(a b + c) of three halves, rounded once. a b is exact in f32 (22 bits); t = a b + c is rounded to f32 and e is +// its exact error (Knuth's two-sum). Rounding t to half is then right unless t sits exactly on a half's midpoint with +// e != 0 -- t is an f32, a midpoint is one, and |e| is under half an f32 ulp of t, so nowhere else can e move t across +// one -- and there the exact value is on e's side of it. +float16_t fmaHalf(float16_t a, float16_t b, float16_t c) { + precise float p = float(a) * float(b); + precise float t = p + float(c); + precise float bv = t - p; + precise float av = t - bv; + precise float e = (p - av) + (float(c) - bv); + if (e != 0.0 && !isinf(t)) { + const int exponent = max(int((floatBitsToUint(abs(t)) >> 23u) & 0xffu) - 127, -14); + const float ulp = uintBitsToFloat(uint(exponent - 10 + 127) << 23u); // (the half grid at t; 2^-24 below the + const float steps = t * uintBitsToFloat(uint(127 - exponent + 10) << 23u); // normal halves; powers of two: exact) + if (steps - floor(steps) == 0.5) return float16_t(roundF16((e > 0.0 ? ceil(steps) : floor(steps)) * ulp)); + } + return float16_t(roundF16(t)); +} + +#endif diff --git a/gpu/vk/opennr/khr/unused.comp b/gpu/vk/opennr/khr/unused.comp new file mode 100644 index 000000000..e61661b5d --- /dev/null +++ b/gpu/vk/opennr/khr/unused.comp @@ -0,0 +1,8 @@ +#version 460 +// (hookshot) The khr route runs upstream's unfused graph (nr::Graph::Options::fusedBlocks off, gpu/vk/opennr/opennr_net.cpp), +// which never dispatches the four fused kernels (fused_block32, qkv_attention, gemm_mlp, global_attention). nr::Kernels +// still loads a module of every name, so each of them is this: a valid module that needs nothing the route does not +// already need (upstream's own use VK_NV_cooperative_matrix2). Were one ever dispatched anyway, it would write nothing, +// and the harness's comparison against the reference route would fail at that block (scripts/opennr_harness.py). +layout(local_size_x = 32) in; +void main() {} diff --git a/gpu/vk/opennr/khr/window_attend.comp b/gpu/vk/opennr/khr/window_attend.comp new file mode 100644 index 000000000..a6ea29bec --- /dev/null +++ b/gpu/vk/opennr/khr/window_attend.comp @@ -0,0 +1,166 @@ +#version 460 +// (hookshot) The khr route's 8x8 window cosine attention: upstream's window_attend.comp on VK_KHR_cooperative_matrix +// alone (khr_mma.glsl). One workgroup of 128 invocations per (window, head), as upstream's; the same steps in the same +// order, with the keys in physical (tiled) order: +// S = Q K^T + prior one k32 step per tile, the learned prior tile as the incoming f16 accumulator +// w = expWeight(S) the network's exponential (a bit trick on the half) +// p = E4M3(w * f16(1/sum)) upstream's softmax reduction order, element by element in shared memory +// O = p V two k32 steps over the 64 keys from a zero accumulator, published as E4M3 +// The tiles are spread over however many subgroups the workgroup has (four of 32 lanes; sixteen on llvmpipe's 8). +#extension GL_EXT_shader_explicit_arithmetic_types : require +#extension GL_EXT_shader_16bit_storage : require +#extension GL_EXT_shader_8bit_storage : require +#extension GL_EXT_control_flow_attributes : require +#extension GL_GOOGLE_include_directive : require +#include "common.glsl" +#include "khr_mma.glsl" +#include "khr_numerics.glsl" + +layout(local_size_x = 128) in; + +layout(push_constant) uniform Push { + uint width; + uint height; + uint channels; // heads * 32 + uint heads; + uint shiftX; // window origin offset (0 or 4) + uint shiftY; + uint windowsX; // ceil((width + shiftX) / 8) + uint windowCount; +} pc; + +layout(std430, binding = 0) readonly buffer Normalized { uint8_t qkv[]; }; // E4M3 [tokens][channels*3] +layout(std430, binding = 1) readonly buffer Prior { float16_t prior[]; }; // [heads][64 query][64 physical key] +layout(std430, binding = 5) writeonly buffer Attended { uint8_t attended[]; }; // E4M3 [tokens][channels] + +shared OPT qs[64 * 32]; // [query][component] +shared OPT ks[64 * 32]; // [physical key][component] +shared OPT vs[64 * 32]; // [physical key][component] +shared float16_t scores[64 * 64]; // [query][physical key] +#if KHR_E4 +shared uint8_t weights[64 * 64]; // E4M3 [query][physical key] +#define WEIGHTS weights +#else +#define WEIGHTS scores // (the weights as halves, in place of the scores they are made from) +#endif +shared float16_t outputs[64 * 32]; + +uint inverseTiledToken(uint token) { + uint tile = token >> 4u, within = token & 15u; + uint x = (tile & 1u) * 4u + (within & 3u); + uint y = (tile >> 1u) * 4u + (within >> 2u); + return y * 8u + x; +} + +// upstream's exponential: f32 affine, rounded to half (on the bits here), half clamp, exponent-field remap +float16_t expWeight(float16_t score) { + precise float affine32 = fma(float(score), 0.044921875, 1.30078125); + float16_t affine = clamp(float16_t(roundF16(affine32)), float16_t(1.03125), float16_t(1.5693359375)); + uint bits = f16Bits(affine); + uint exponentialBits = ((bits << 5u) + 0x8000u) & 0xffffu; + return f16FromBits(exponentialBits); +} + +// upstream's softmax reduction (keys in physical order): eight 8-key fragments per column pair, then the four column +// pairs, then the even / odd halves; every add a half add +float16_t softmaxPair(uint row, uint pair, uint parity) { + uint key = pair * 2u + parity; + precise float16_t blocks01 = scores[row * 64u + key] + scores[row * 64u + key + 8u]; + precise float16_t blocks23 = scores[row * 64u + key + 16u] + scores[row * 64u + key + 24u]; + precise float16_t blocks45 = scores[row * 64u + key + 32u] + scores[row * 64u + key + 40u]; + precise float16_t blocks67 = scores[row * 64u + key + 48u] + scores[row * 64u + key + 56u]; + precise float16_t a = blocks01 + blocks23; + precise float16_t b = a + blocks45; + return b + blocks67; +} + +float16_t softmaxSum(uint row) { + precise float16_t e0 = softmaxPair(row, 0u, 0u) + softmaxPair(row, 1u, 0u); + precise float16_t e1 = e0 + softmaxPair(row, 2u, 0u); + precise float16_t even = e1 + softmaxPair(row, 3u, 0u); + precise float16_t o0 = softmaxPair(row, 0u, 1u) + softmaxPair(row, 1u, 1u); + precise float16_t o1 = o0 + softmaxPair(row, 2u, 1u); + precise float16_t odd = o1 + softmaxPair(row, 3u, 1u); + return even + odd; +} + +void main() { + const uint thread = gl_LocalInvocationID.x; + const uint head = gl_WorkGroupID.x; + const uint window = gl_WorkGroupID.y + gl_WorkGroupID.z * 65535u; + if (window >= pc.windowCount) return; + const int windowX = int((window % pc.windowsX) * 8u) - int(pc.shiftX); + const int windowY = int((window / pc.windowsX) * 8u) - int(pc.shiftY); + const uint stride3 = pc.channels * 3u; + const uint headBase = head * 96u; + + // Q (query order), K/V (physical key order). Tokens outside the field are zero vectors: a zero key and value, whose + // score (prior + 0) still enters the softmax (upstream's docs/network.md). + for (uint i = thread; i < 64u * 32u; i += 128u) { + uint token = i >> 5u, component = i & 31u; + int qx = windowX + int(token & 7u), qy = windowY + int(token >> 3u); + uint q = 0u; + if (qx >= 0 && qy >= 0 && qx < int(pc.width) && qy < int(pc.height)) + q = uint(qkv[(uint(qy) * pc.width + uint(qx)) * stride3 + headBase + component]); + qs[i] = opFromCode(q); + uint keyLocal = inverseTiledToken(token); + int kx = windowX + int(keyLocal & 7u), ky = windowY + int(keyLocal >> 3u); + uint k = 0u, v = 0u; + if (kx >= 0 && ky >= 0 && kx < int(pc.width) && ky < int(pc.height)) { + uint keyBase = (uint(ky) * pc.width + uint(kx)) * stride3 + headBase; + k = uint(qkv[keyBase + 32u + component]); + v = uint(qkv[keyBase + 64u + component]); + } + ks[i] = opFromCode(k); + vs[i] = opFromCode(v); + } + barrier(); + + // S = Q K^T with the learned prior as the incoming accumulator (read straight from its buffer) + const uint priorBase = head * 4096u; + for (uint t = gl_SubgroupID; t < (64u / KHR_M) * (64u / KHR_N); t += gl_NumSubgroups) { + const uint q0 = (t / (64u / KHR_N)) * KHR_M, k0 = (t % (64u / KHR_N)) * KHR_N; + MAT_C c; + LOAD_C(c, prior, priorBase + q0 * 64u + k0, 64u) + MMA_K32(c, qs, q0 * 32u, 32u, KHR_K, ks, k0 * 32u, 32u, KHR_K, COL_MAJOR) + STORE_C(c, scores, q0 * 64u + k0, 64u) + } + barrier(); + + for (uint i = thread; i < 64u * 64u; i += 128u) scores[i] = expWeight(scores[i]); + barrier(); + if (thread < 64u) { + const uint row = thread; + float16_t total = softmaxSum(row); + float16_t reciprocal = reciprocalHalf(total); // (khr_numerics.glsl: RN16 of the exact 1 / total) + for (uint key = 0u; key < 64u; ++key) { // (this row only, and its total is taken: the in-place form is safe) + precise float16_t normalized = scores[row * 64u + key] * reciprocal; + uint code = e4m3CodeFromF16Bits(f16Bits(normalized)); +#if KHR_E4 + weights[row * 64u + key] = uint8_t(code); +#else + scores[row * 64u + key] = opFromCode(code); +#endif + } + } + barrier(); + + // O = P V over the 64 physical keys: two k32 steps from zero + for (uint t = gl_SubgroupID; t < (64u / KHR_M) * (32u / KHR_N); t += gl_NumSubgroups) { + const uint q0 = (t / (32u / KHR_N)) * KHR_M, c0 = (t % (32u / KHR_N)) * KHR_N; + MAT_C c = MAT_C(0.0); + [[unroll]] for (uint kb = 0u; kb < 64u; kb += 32u) { + MMA_K32(c, WEIGHTS, q0 * 64u + kb, 64u, KHR_K, vs, kb * 32u + c0, 32u, KHR_K * 32u, ROW_MAJOR) + } + STORE_C(c, outputs, q0 * 32u + c0, 32u) + } + barrier(); + + for (uint i = thread; i < 64u * 32u; i += 128u) { + uint token = i >> 5u, component = i & 31u; + int qx = windowX + int(token & 7u), qy = windowY + int(token >> 3u); + if (qx < 0 || qy < 0 || qx >= int(pc.width) || qy >= int(pc.height)) continue; + uint index = (uint(qy) * pc.width + uint(qx)) * pc.channels + head * 32u + component; + attended[index] = uint8_t(e4m3CodeFromF16Bits(f16Bits(outputs[i]))); + } +} diff --git a/gpu/vk/opennr/opennr_khr.h b/gpu/vk/opennr/opennr_khr.h new file mode 100644 index 000000000..4ef10a7cd --- /dev/null +++ b/gpu/vk/opennr/opennr_khr.h @@ -0,0 +1,104 @@ +// (hookshot) The open backend's khr route: which of its kernel variants a GPU can run, from what its driver lists. +// +// The khr route is OpenDLSS-NR's network on VK_KHR_cooperative_matrix alone (gpu/vk/opennr/khr: no +// VK_NV_cooperative_matrix2, no PTX, no CUDA launch), for AMD's GPUs and anything else with KHR cooperative matrices. +// Its kernels come in variants, one per set of MMA shapes a driver may list (khr/khr_mma.glsl says what each define +// means); scripts/opennr_kernels.py KHR_VARIANTS is this same table and compiles each into its own kernel folder +// (shaders-khr-), and tests/test_opennr_kernels.py checks the two tables agree. +// +// Header-only and free of Vulkan calls: the renderer (gpu/vk/vk_opennr.cpp) and the harness's probe +// (scripts/opennr_harness.py) both feed it what vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR returned. +#pragma once + +#include +#include +#include +#include + +#include + +namespace mkwvk::opennr_khr { + +struct Variant { + const char* name; + bool e4; ///< E4M3 cooperative matrices (VK_EXT_shader_float8's shaderFloat8CooperativeMatrix) + uint32_t m, n, k; ///< the FP8 GEMMs' MMA shape (f16 operands when !e4) + uint32_t hk; ///< the f16 GEMMs' MMA K (m x n x hk, f16 operands; with f16 accumulators only) + bool acc32; ///< f32 accumulators rounded to half after every step; else f16 accumulators + uint32_t subgroup; ///< the subgroup size its pipelines are made with (requiredSubgroupSize) + const char* what; +}; + +/// In the order a GPU is offered them: the most faithful to the network's arithmetic first +inline constexpr Variant kVariants[] = { + {"e4m3-k32-f16", true, 16, 16, 32, 16, false, 32, "NVIDIA's own MMA: the bytes of upstream's GLSL route"}, + {"e4m3-k16-f32", true, 16, 16, 16, 16, true, 32, "E4M3 into f32 (AMD RDNA 4)"}, + {"e4m3-k32-f32", true, 16, 16, 32, 16, true, 32, "E4M3 into f32"}, + {"f16-k16-f32", false, 16, 16, 16, 16, true, 32, "E4M3 widened to f16, into f32 (AMD RDNA 3)"}, + {"f16-k8-f32", false, 8, 8, 8, 8, true, 8, "E4M3 widened to f16, 8x8x8 into f32 at 8 lanes (llvmpipe)"}, +}; + +/// One row of vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR +struct Shape { + uint32_t m, n, k; + VkComponentTypeKHR a, b, c, result; + VkScopeKHR scope; +}; + +/// What decides it, besides the shapes +struct Device { + std::vector shapes; + bool float8_matrices = false; ///< VK_EXT_shader_float8 with shaderFloat8CooperativeMatrix, enabled + uint32_t min_subgroup = 0, max_subgroup = 0; + bool subgroup_control_compute = false; ///< subgroupSizeControl + computeFullSubgroups, compute in requiredSubgroupSizeStages +}; + +inline bool lists(const Device& d, uint32_t m, uint32_t n, uint32_t k, VkComponentTypeKHR ab, VkComponentTypeKHR cr) { + for (const Shape& s : d.shapes) + if (s.m == m && s.n == n && s.k == k && s.a == ab && s.b == ab && s.c == cr && s.result == cr && + s.scope == VK_SCOPE_SUBGROUP_KHR) + return true; + return false; +} + +/// Why this device cannot run variant v; empty when it can +inline std::string refusal(const Device& d, const Variant& v) { + const VkComponentTypeKHR acc = v.acc32 ? VK_COMPONENT_TYPE_FLOAT32_KHR : VK_COMPONENT_TYPE_FLOAT16_KHR; + const char* acc_name = v.acc32 ? "f32" : "f16"; + auto shape = [](uint32_t m, uint32_t n, uint32_t k, const char* ab, const char* cr) { + return std::to_string(m) + "x" + std::to_string(n) + "x" + std::to_string(k) + " " + ab + " into " + cr; + }; + if (v.e4 && !d.float8_matrices) return "no E4M3 cooperative matrices (VK_EXT_shader_float8)"; + if (v.e4 && !lists(d, v.m, v.n, v.k, VK_COMPONENT_TYPE_FLOAT8_E4M3_EXT, acc)) + return "the driver lists no subgroup " + shape(v.m, v.n, v.k, "E4M3", acc_name); + if (!v.e4 && !lists(d, v.m, v.n, v.k, VK_COMPONENT_TYPE_FLOAT16_KHR, acc)) + return "the driver lists no subgroup " + shape(v.m, v.n, v.k, "f16", acc_name); + // (the f16 GEMMs use matrices only with f16 accumulators: otherwise they are integer arithmetic, khr/gemm_f16.comp) + if (!v.acc32 && !lists(d, v.m, v.n, v.hk, VK_COMPONENT_TYPE_FLOAT16_KHR, acc)) + return "the driver lists no subgroup " + shape(v.m, v.n, v.hk, "f16", acc_name); + if (!d.subgroup_control_compute || d.min_subgroup > v.subgroup || d.max_subgroup < v.subgroup) + return "its compute pipelines cannot be made with " + std::to_string(v.subgroup) + "-lane subgroups"; + return {}; +} + +inline const Variant* find(const char* name) { + for (const Variant& v : kVariants) + if (name && !strcmp(v.name, name)) return &v; + return nullptr; +} + +/// The first variant the device can run (or `forced`, when it can run that one); null and `why` (one reason per +/// variant) when none +inline const Variant* choose(const Device& d, const char* forced, std::string* why) { + std::string reasons; + for (const Variant& v : kVariants) { + if (forced && *forced && strcmp(forced, v.name)) continue; + const std::string no = refusal(d, v); + if (no.empty()) return &v; + reasons += (reasons.empty() ? "" : "; ") + std::string(v.name) + ": " + no; + } + if (why) *why = forced && *forced && !find(forced) ? std::string("no khr variant is named ") + forced : reasons; + return nullptr; +} + +} // namespace mkwvk::opennr_khr diff --git a/gpu/vk/shaders/opennr_khr_spv.h b/gpu/vk/shaders/opennr_khr_spv.h new file mode 100644 index 000000000..32aed8d68 --- /dev/null +++ b/gpu/vk/shaders/opennr_khr_spv.h @@ -0,0 +1,18966 @@ +// Generated by scripts/opennr_kernels.py from gpu/vk/opennr/khr and third_party/opendlss-nr/shaders: do not edit. +// The khr route's SPIR-V (glslang -V --target-env vulkan1.3): 'variant/name' for its own matrix kernels, 'common/name' for +// the rest. gpu/vk/vk_opennr.cpp writes them out as the shaders-khr- folders. +#pragma once + +#include + +namespace mkwvk::opennr_khr_spv { +inline constexpr uint32_t k_e4m3_k32_f16__gemm_fp8[] = { + 0x07230203,0x00010600,0x0008000b,0x0000041d,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x0000003d,0x00020011,0x00001074,0x00020011, + 0x00001075,0x00020011,0x00001151,0x00020011,0x00001160,0x00020011,0x000014e1,0x00020011, + 0x00001786,0x0005000a,0x5f565053,0x5f545845,0x616f6c66,0x00003874,0x0008000a,0x5f565053, + 0x5f52484b,0x706f6f63,0x74617265,0x5f657669,0x7274616d,0x00007869,0x0006000b,0x00000001, + 0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000003,0x0013000f, + 0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000184,0x00000189,0x0000018c,0x00000199, + 0x00000210,0x0000021c,0x0000022b,0x0000023a,0x000002ad,0x000002c1,0x000002e0,0x000002fa, + 0x000003d4,0x00000406,0x0006014b,0x00000004,0x00000026,0x00000007,0x00000008,0x00000008, + 0x00030003,0x00000002,0x000001cc,0x00090004,0x455f4c47,0x635f5458,0x72746e6f,0x665f6c6f, + 0x5f776f6c,0x72747461,0x74756269,0x00007365,0x00060004,0x455f4c47,0x665f5458,0x74616f6c, + 0x6d34655f,0x00000033,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x36315f72,0x5f746962, + 0x726f7473,0x00656761,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x62385f72,0x735f7469, + 0x61726f74,0x00006567,0x000b0004,0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70, + 0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f, + 0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004, + 0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669,0x00080004, + 0x4b5f4c47,0x635f5248,0x65706f6f,0x69746172,0x6d5f6576,0x69727461,0x00000078,0x00090004, + 0x4b5f4c47,0x6d5f5248,0x726f6d65,0x63735f79,0x5f65706f,0x616d6573,0x6369746e,0x00000073, + 0x00090004,0x4b5f4c47,0x735f5248,0x65646168,0x75735f72,0x6f726762,0x625f7075,0x63697361, + 0x00000000,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000d,0x6e756f72, + 0x36314664,0x3b316628,0x00000000,0x00040005,0x0000000c,0x756c6176,0x00000065,0x00060005, + 0x00000013,0x42363166,0x28737469,0x31363166,0x0000003b,0x00040005,0x00000012,0x756c6176, + 0x00000065,0x00060005,0x00000019,0x66696873,0x656e5274,0x3b317528,0x003b3175,0x00040005, + 0x00000017,0x756c6176,0x00000065,0x00040005,0x00000018,0x66696873,0x00000074,0x00080005, + 0x0000001d,0x336d3465,0x65646f43,0x6d6f7246,0x42363146,0x28737469,0x003b3175,0x00050005, + 0x0000001c,0x666c6168,0x73746942,0x00000000,0x00060005,0x00000021,0x336d3465,0x33466f54, + 0x31752832,0x0000003b,0x00040005,0x00000020,0x73746962,0x00000000,0x00060005,0x00000024, + 0x7543706d,0x53636962,0x28756c69,0x003b3166,0x00040005,0x00000023,0x756c6176,0x00000065, + 0x00060005,0x00000027,0x336d3465,0x6f547748,0x28323346,0x003b3175,0x00040005,0x00000026, + 0x65646f63,0x00000000,0x00040005,0x00000029,0x73746962,0x00000000,0x00040005,0x0000002c, + 0x6e676973,0x00000000,0x00050005,0x00000030,0x6e67616d,0x64757469,0x00000065,0x00040005, + 0x0000004a,0x6c616373,0x00006465,0x00030005,0x0000005b,0x0062736c,0x00040005,0x00000060, + 0x6e756f72,0x00646564,0x00050005,0x00000074,0x746f7571,0x746e6569,0x00000000,0x00060005, + 0x00000078,0x616d6572,0x65646e69,0x73614d72,0x0000006b,0x00050005,0x0000007c,0x616d6572, + 0x65646e69,0x00000072,0x00040005,0x00000080,0x666c6168,0x00796177,0x00040005,0x0000009b, + 0x614e7369,0x0000006e,0x00050005,0x000000b7,0x6167656e,0x65766974,0x00000000,0x00050005, + 0x000000bd,0x6f707865,0x746e656e,0x00000000,0x00050005,0x000000c3,0x746e616d,0x61737369, + 0x00000000,0x00040005,0x000000ca,0x65646f63,0x00000000,0x00050005,0x000000d1,0x6e676973, + 0x63696669,0x00646e61,0x00040005,0x000000dd,0x66696873,0x00000074,0x00040005,0x000000e9, + 0x61726170,0x0000006d,0x00040005,0x000000eb,0x61726170,0x0000006d,0x00050005,0x000000f0, + 0x78453465,0x656e6f70,0x0000746e,0x00050005,0x000000f3,0x614d3465,0x7369746e,0x00006173, + 0x00040005,0x000000f5,0x61726170,0x0000006d,0x00040005,0x000000f7,0x61726170,0x0000006d, + 0x00050005,0x0000011a,0x6167656e,0x65766974,0x00000000,0x00050005,0x0000011e,0x6f707865, + 0x746e656e,0x00000000,0x00050005,0x00000122,0x746e616d,0x61737369,0x00000000,0x00040005, + 0x00000129,0x756c6176,0x00000065,0x00040005,0x00000150,0x6e756f62,0x00646564,0x00040005, + 0x00000155,0x61726170,0x0000006d,0x00050005,0x00000157,0x6f736261,0x6574756c,0x00000000, + 0x00040005,0x0000015a,0x61726170,0x0000006d,0x00040005,0x0000015c,0x656e6e69,0x00000072, + 0x00040005,0x00000161,0x61726170,0x0000006d,0x00050005,0x00000163,0x796c6f70,0x696d6f6e, + 0x00006c61,0x00040005,0x00000168,0x61726170,0x0000006d,0x00040005,0x0000016d,0x61726170, + 0x0000006d,0x00040005,0x0000017c,0x61726170,0x0000006d,0x00040005,0x00000181,0x65726874, + 0x00006461,0x00080005,0x00000184,0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163,0x44496e6f, + 0x00000000,0x00050005,0x00000188,0x67627573,0x70756f72,0x00000000,0x00060005,0x00000189, + 0x535f6c67,0x72676275,0x4970756f,0x00000044,0x00040005,0x0000018b,0x696c7073,0x00000074, + 0x00060005,0x0000018c,0x575f6c67,0x476b726f,0x70756f72,0x00004449,0x00040005,0x0000018f, + 0x494c5053,0x00004b54,0x00060005,0x00000191,0x756c6f63,0x694c6e6d,0x7261656e,0x00000000, + 0x00040005,0x00000195,0x63746162,0x00000068,0x00040005,0x00000197,0x68737550,0x00000000, + 0x00050006,0x00000197,0x00000000,0x73776f72,0x00000000,0x00040006,0x00000197,0x00000001, + 0x0000004e,0x00050006,0x00000197,0x00000002,0x74616d4e,0x00786972,0x00080006,0x00000197, + 0x00000003,0x67696577,0x6f437468,0x6e6d756c,0x7366664f,0x00007465,0x00060006,0x00000197, + 0x00000004,0x75706e69,0x72745374,0x00656469,0x00070006,0x00000197,0x00000005,0x75706e69, + 0x6c6f4374,0x426e6d75,0x00657361,0x00070006,0x00000197,0x00000006,0x7074756f,0x74537475, + 0x65646972,0x00000000,0x00080006,0x00000197,0x00000007,0x7074756f,0x6f437475,0x6e6d756c, + 0x7366664f,0x00007465,0x00070006,0x00000197,0x00000008,0x48787561,0x4f666c61,0x65736666, + 0x00000074,0x00050006,0x00000197,0x00000009,0x63746162,0x00736568,0x00070006,0x00000197, + 0x0000000a,0x756c6f63,0x72476e6d,0x7370756f,0x00000000,0x00060006,0x00000197,0x0000000b, + 0x696c7073,0x72745374,0x00656469,0x00030005,0x00000199,0x00006370,0x00050005,0x000001a0, + 0x756c6f63,0x72476e6d,0x0070756f,0x00050005,0x000001a5,0x636f6c62,0x776f526b,0x00000000, + 0x00050005,0x000001ae,0x47425553,0x50554f52,0x00000053,0x00030005,0x000001af,0x00004d42, + 0x00040005,0x000001b1,0x426c6f63,0x00657361,0x00040005,0x000001b3,0x454c4954,0x00000053, + 0x00030005,0x000001b4,0x00004e42,0x00050005,0x000001b6,0x4374756f,0x6d756c6f,0x0000006e, + 0x00040005,0x000001c0,0x656c6974,0x00776f52,0x00040005,0x000001c3,0x45524854,0x00534441, + 0x00060005,0x000001c4,0x47425553,0x50554f52,0x554f435f,0x0000544e,0x00050005,0x000001c5, + 0x5f574f52,0x454c4954,0x00000053,0x00070005,0x000001c6,0x47425553,0x50554f52,0x45505f53, + 0x4f525f52,0x00000057,0x00050005,0x000001c9,0x656c6974,0x756c6f43,0x00306e6d,0x00060005, + 0x000001cc,0x554c4f43,0x545f4e4d,0x53454c49,0x00000000,0x00070005,0x000001cd,0x454c4954, + 0x45505f53,0x55535f52,0x4f524742,0x00005055,0x00050005,0x000001cf,0x73776f72,0x696c6156, + 0x00000064,0x00060005,0x000001d7,0x64656573,0x69736552,0x6c617564,0x00000000,0x00040005, + 0x000001d8,0x47414c46,0x00000053,0x00030005,0x000001e1,0x00000069,0x00030005,0x000001eb, + 0x00776f72,0x00040005,0x000001f0,0x756c6f63,0x00006e6d,0x00040005,0x000001f5,0x756c6176, + 0x00000065,0x00040005,0x000001fc,0x65646e69,0x00000078,0x00050005,0x0000020e,0x69736552, + 0x6c617564,0x00003445,0x00060006,0x0000020e,0x00000000,0x69736572,0x6c617564,0x00000038, + 0x00030005,0x00000210,0x00000000,0x00040005,0x00000216,0x61726170,0x0000006d,0x00060005, + 0x0000021a,0x69736552,0x6c617564,0x666c6148,0x00000000,0x00060006,0x0000021a,0x00000000, + 0x69736572,0x6c617564,0x00003631,0x00030005,0x0000021c,0x00000000,0x00030005,0x00000229, + 0x00787541,0x00050006,0x00000229,0x00000000,0x31787561,0x00000036,0x00030005,0x0000022b, + 0x00000000,0x00040005,0x00000235,0x61726170,0x0000006d,0x00040005,0x0000023a,0x636f6c62, + 0x0036316b,0x00030005,0x00000243,0x00000074,0x00030005,0x00000251,0x00636361,0x00040005, + 0x0000026a,0x61746f74,0x0000006c,0x00050005,0x0000026f,0x6c6f4361,0x426e6d75,0x00657361, + 0x00030005,0x0000027a,0x0000004b,0x00040005,0x0000027e,0x6765426b,0x00006e69,0x00040005, + 0x00000281,0x70657473,0x00000073,0x00030005,0x00000283,0x00000073,0x00040005,0x0000028b, + 0x70657473,0x00000000,0x00030005,0x0000028f,0x00000069,0x00030005,0x00000299,0x00000072, + 0x00030005,0x0000029c,0x00000077,0x00030005,0x0000029f,0x00776f72,0x00040005,0x000002a9, + 0x65646f63,0x00000073,0x00040005,0x000002ab,0x75706e49,0x00004174,0x00040006,0x000002ab, + 0x00000000,0x00003461,0x00030005,0x000002ad,0x00000000,0x00040005,0x000002c1,0x67617473, + 0x00004165,0x00030005,0x000002cc,0x00000069,0x00030005,0x000002d6,0x0000006e,0x00030005, + 0x000002d9,0x00000077,0x00040005,0x000002dc,0x65646f63,0x00000073,0x00040005,0x000002de, + 0x75706e49,0x00004274,0x00040006,0x000002de,0x00000000,0x00003462,0x00030005,0x000002e0, + 0x00000000,0x00040005,0x000002fa,0x67617473,0x00004265,0x00030005,0x00000307,0x00000074, + 0x00030005,0x0000030f,0x00005f73,0x00030005,0x0000031a,0x00005f61,0x00030005,0x00000329, + 0x00005f62,0x00030005,0x00000348,0x0000626b,0x00050005,0x0000034b,0x54524150,0x4f495449, + 0x0000004e,0x00030005,0x0000035d,0x00000074,0x00030005,0x00000381,0x00000074,0x00030005, + 0x00000393,0x00000074,0x00030005,0x000003af,0x00000069,0x00030005,0x000003b9,0x00776f72, + 0x00040005,0x000003be,0x756c6f63,0x00006e6d,0x00040005,0x000003ca,0x756c6176,0x00000065, + 0x00050005,0x000003d2,0x7074754f,0x61487475,0x0000666c,0x00050006,0x000003d2,0x00000000, + 0x3174756f,0x00000036,0x00030005,0x000003d4,0x00000000,0x00040005,0x000003f2,0x61726170, + 0x0000006d,0x00040005,0x000003f5,0x65646e69,0x00000078,0x00050005,0x00000404,0x7074754f, + 0x34457475,0x00000000,0x00050006,0x00000404,0x00000000,0x3874756f,0x00000000,0x00030005, + 0x00000406,0x00000000,0x00040005,0x00000408,0x61726170,0x0000006d,0x00040005,0x0000040b, + 0x61726170,0x0000006d,0x00040005,0x00000418,0x54504544,0x00000048,0x00040005,0x00000419, + 0x56444150,0x00000034,0x00040005,0x0000041c,0x4554534b,0x00000050,0x00040047,0x00000007, + 0x00000001,0x00000008,0x00040047,0x00000184,0x0000000b,0x0000001b,0x00040047,0x00000189, + 0x0000000b,0x00000028,0x00040047,0x0000018c,0x0000000b,0x0000001a,0x00040047,0x0000018f, + 0x00000001,0x00000009,0x00030047,0x00000197,0x00000002,0x00050048,0x00000197,0x00000000, + 0x00000023,0x00000000,0x00050048,0x00000197,0x00000001,0x00000023,0x00000004,0x00050048, + 0x00000197,0x00000002,0x00000023,0x00000008,0x00050048,0x00000197,0x00000003,0x00000023, + 0x0000000c,0x00050048,0x00000197,0x00000004,0x00000023,0x00000010,0x00050048,0x00000197, + 0x00000005,0x00000023,0x00000014,0x00050048,0x00000197,0x00000006,0x00000023,0x00000018, + 0x00050048,0x00000197,0x00000007,0x00000023,0x0000001c,0x00050048,0x00000197,0x00000008, + 0x00000023,0x00000020,0x00050048,0x00000197,0x00000009,0x00000023,0x00000024,0x00050048, + 0x00000197,0x0000000a,0x00000023,0x00000028,0x00050048,0x00000197,0x0000000b,0x00000023, + 0x0000002c,0x00040047,0x000001ae,0x00000001,0x00000007,0x00040047,0x000001b3,0x00000001, + 0x00000001,0x00040047,0x000001d8,0x00000001,0x00000002,0x00040047,0x0000020d,0x00000006, + 0x00000001,0x00030047,0x0000020e,0x00000002,0x00040048,0x0000020e,0x00000000,0x00000018, + 0x00050048,0x0000020e,0x00000000,0x00000023,0x00000000,0x00030047,0x00000210,0x00000018, + 0x00040047,0x00000210,0x00000021,0x00000006,0x00040047,0x00000210,0x00000022,0x00000000, + 0x00040047,0x00000219,0x00000006,0x00000002,0x00030047,0x0000021a,0x00000002,0x00040048, + 0x0000021a,0x00000000,0x00000018,0x00050048,0x0000021a,0x00000000,0x00000023,0x00000000, + 0x00030047,0x0000021c,0x00000018,0x00040047,0x0000021c,0x00000021,0x00000003,0x00040047, + 0x0000021c,0x00000022,0x00000000,0x00040047,0x00000228,0x00000006,0x00000002,0x00030047, + 0x00000229,0x00000002,0x00040048,0x00000229,0x00000000,0x00000018,0x00050048,0x00000229, + 0x00000000,0x00000023,0x00000000,0x00030047,0x0000022b,0x00000018,0x00040047,0x0000022b, + 0x00000021,0x00000004,0x00040047,0x0000022b,0x00000022,0x00000000,0x00040047,0x0000027a, + 0x00000001,0x00000000,0x00040047,0x000002aa,0x00000006,0x00000010,0x00030047,0x000002ab, + 0x00000002,0x00040048,0x000002ab,0x00000000,0x00000018,0x00050048,0x000002ab,0x00000000, + 0x00000023,0x00000000,0x00030047,0x000002ad,0x00000018,0x00040047,0x000002ad,0x00000021, + 0x00000000,0x00040047,0x000002ad,0x00000022,0x00000000,0x00040047,0x000002dd,0x00000006, + 0x00000010,0x00030047,0x000002de,0x00000002,0x00040048,0x000002de,0x00000000,0x00000018, + 0x00050048,0x000002de,0x00000000,0x00000023,0x00000000,0x00030047,0x000002e0,0x00000018, + 0x00040047,0x000002e0,0x00000021,0x00000001,0x00040047,0x000002e0,0x00000022,0x00000000, + 0x00040047,0x0000034b,0x00000001,0x00000003,0x00040047,0x000003d1,0x00000006,0x00000002, + 0x00030047,0x000003d2,0x00000002,0x00040048,0x000003d2,0x00000000,0x00000019,0x00050048, + 0x000003d2,0x00000000,0x00000023,0x00000000,0x00030047,0x000003d4,0x00000019,0x00040047, + 0x000003d4,0x00000021,0x00000002,0x00040047,0x000003d4,0x00000022,0x00000000,0x00040047, + 0x00000403,0x00000006,0x00000001,0x00030047,0x00000404,0x00000002,0x00040048,0x00000404, + 0x00000000,0x00000019,0x00050048,0x00000404,0x00000000,0x00000023,0x00000000,0x00030047, + 0x00000406,0x00000019,0x00040047,0x00000406,0x00000021,0x00000005,0x00040047,0x00000406, + 0x00000022,0x00000000,0x00040047,0x00000418,0x00000001,0x00000004,0x00040047,0x00000419, + 0x00000001,0x00000005,0x00040047,0x0000041a,0x00000001,0x00000008,0x00040047,0x0000041c, + 0x00000001,0x0000000a,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015, + 0x00000006,0x00000020,0x00000000,0x00040032,0x00000006,0x00000007,0x00000001,0x0004002b, + 0x00000006,0x00000008,0x00000001,0x00030016,0x00000009,0x00000020,0x00040020,0x0000000a, + 0x00000007,0x00000009,0x00040021,0x0000000b,0x00000009,0x0000000a,0x00030016,0x0000000f, + 0x00000010,0x00040020,0x00000010,0x00000007,0x0000000f,0x00040021,0x00000011,0x00000006, + 0x00000010,0x00040020,0x00000015,0x00000007,0x00000006,0x00050021,0x00000016,0x00000006, + 0x00000015,0x00000015,0x00040021,0x0000001b,0x00000006,0x00000015,0x00040021,0x0000001f, + 0x00000009,0x00000015,0x0004002b,0x00000006,0x0000002e,0x80000000,0x0004002b,0x00000006, + 0x00000032,0x7fffffff,0x0004002b,0x00000006,0x00000035,0x7f800000,0x00020014,0x00000036, + 0x0004002b,0x00000006,0x0000003d,0x477ff000,0x0004002b,0x00000006,0x00000046,0x38800000, + 0x0004002b,0x00000009,0x0000004d,0x4b800000,0x0004002b,0x00000009,0x00000054,0x33800000, + 0x0004002b,0x00000006,0x0000005d,0x0000000d,0x0004002b,0x00000006,0x00000062,0x00000fff, + 0x0004002b,0x00000006,0x00000066,0xffffe000,0x00040015,0x0000006f,0x00000010,0x00000000, + 0x0004002b,0x00000006,0x00000092,0x00000000,0x00040020,0x0000009a,0x00000007,0x00000036, + 0x0004002b,0x00000006,0x0000009d,0x00007c00,0x0004002b,0x00000006,0x000000a3,0x000003ff, + 0x0004002b,0x00000006,0x000000ac,0x00007fff,0x0004002b,0x00000006,0x000000b2,0x00000008, + 0x0004002b,0x00000006,0x000000b4,0x00000080,0x0004002b,0x00000006,0x000000b9,0x00008000, + 0x0004002b,0x00000006,0x000000bf,0x0000000a,0x0004002b,0x00000006,0x000000c1,0x0000001f, + 0x0004002b,0x00000006,0x000000cb,0x0000007e,0x0004002b,0x00000006,0x000000d9,0x00000400, + 0x0004002b,0x00000006,0x000000e3,0x0000000f,0x0004002b,0x00000006,0x000000e5,0x00000010, + 0x0004002b,0x00000006,0x000000f4,0x00000007,0x0004002b,0x00000006,0x00000107,0x00000006, + 0x0004002b,0x00000006,0x00000110,0x00000003,0x0004002b,0x00000009,0x0000012c,0x3b000000, + 0x0004002b,0x00000009,0x00000136,0x00000000,0x0004002b,0x00000009,0x00000138,0x3f800000, + 0x0004002b,0x00000009,0x0000013b,0x3e000000,0x0004002b,0x00000006,0x0000013f,0x00000078, + 0x0004002b,0x00000006,0x00000141,0x00000017,0x0004002b,0x00000009,0x00000152,0xc0800000, + 0x0004002b,0x00000009,0x00000153,0x40800000,0x0004002b,0x00000009,0x0000015d,0xbd650000, + 0x0004002b,0x00000009,0x0000015f,0x3ee50000,0x0004002b,0x00000009,0x00000166,0x3f650000, + 0x0004002b,0x00000006,0x00000172,0x0000007f,0x0004002b,0x00000006,0x0000017a,0x000000ff, + 0x00040017,0x00000182,0x00000006,0x00000003,0x00040020,0x00000183,0x00000001,0x00000182, + 0x0004003b,0x00000183,0x00000184,0x00000001,0x00040020,0x00000185,0x00000001,0x00000006, + 0x0004003b,0x00000185,0x00000189,0x00000001,0x0004003b,0x00000183,0x0000018c,0x00000001, + 0x00040032,0x00000006,0x0000018f,0x00000001,0x000e001e,0x00000197,0x00000006,0x00000006, + 0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006, + 0x00000006,0x00000006,0x00040020,0x00000198,0x00000009,0x00000197,0x0004003b,0x00000198, + 0x00000199,0x00000009,0x00040015,0x0000019a,0x00000020,0x00000001,0x0004002b,0x0000019a, + 0x0000019b,0x0000000a,0x00040020,0x0000019c,0x00000009,0x00000006,0x0004002b,0x00000006, + 0x000001a8,0x00000002,0x0004002b,0x00000006,0x000001ab,0x0000ffff,0x00040032,0x00000006, + 0x000001ae,0x00000004,0x00060034,0x00000006,0x000001af,0x00000084,0x000000e5,0x000001ae, + 0x00040032,0x00000006,0x000001b3,0x00000004,0x00060034,0x00000006,0x000001b4,0x00000084, + 0x000000e5,0x000001b3,0x0004002b,0x0000019a,0x000001b7,0x00000007,0x0004002b,0x0000019a, + 0x000001bb,0x00000001,0x0004002b,0x00000006,0x000001c2,0x00000020,0x00060034,0x00000006, + 0x000001c3,0x00000084,0x000001c2,0x000001ae,0x00060034,0x00000006,0x000001c4,0x00000086, + 0x000001c3,0x000001c2,0x00060034,0x00000006,0x000001c5,0x00000086,0x000001af,0x000000e5, + 0x00060034,0x00000006,0x000001c6,0x00000086,0x000001c4,0x000001c5,0x00060034,0x00000006, + 0x000001cc,0x00000086,0x000001b4,0x000000e5,0x00060034,0x00000006,0x000001cd,0x00000086, + 0x000001cc,0x000001c6,0x0004002b,0x0000019a,0x000001d3,0x00000000,0x00040032,0x00000006, + 0x000001d8,0x00000000,0x00060034,0x00000006,0x000001d9,0x000000c7,0x000001d8,0x00000008, + 0x00060034,0x00000036,0x000001da,0x000000ab,0x000001d9,0x00000092,0x00060034,0x00000006, + 0x000001e9,0x00000084,0x000001af,0x000001b4,0x0004002b,0x0000019a,0x000001fe,0x00000006, + 0x0004002b,0x00000006,0x00000206,0x00000040,0x00060034,0x00000006,0x00000207,0x000000c7, + 0x000001d8,0x00000206,0x00060034,0x00000036,0x00000208,0x000000ab,0x00000207,0x00000092, + 0x00040015,0x0000020c,0x00000008,0x00000000,0x0003001d,0x0000020d,0x0000020c,0x0003001e, + 0x0000020e,0x0000020d,0x00040020,0x0000020f,0x0000000c,0x0000020e,0x0004003b,0x0000020f, + 0x00000210,0x0000000c,0x00040020,0x00000212,0x0000000c,0x0000020c,0x0003001d,0x00000219, + 0x0000000f,0x0003001e,0x0000021a,0x00000219,0x00040020,0x0000021b,0x0000000c,0x0000021a, + 0x0004003b,0x0000021b,0x0000021c,0x0000000c,0x00040020,0x0000021e,0x0000000c,0x0000000f, + 0x00060034,0x00000006,0x00000223,0x000000c7,0x000001d8,0x000001a8,0x00060034,0x00000036, + 0x00000224,0x000000ab,0x00000223,0x00000092,0x0003001d,0x00000228,0x0000000f,0x0003001e, + 0x00000229,0x00000228,0x00040020,0x0000022a,0x0000000c,0x00000229,0x0004003b,0x0000022a, + 0x0000022b,0x0000000c,0x0004002b,0x0000019a,0x0000022c,0x00000008,0x00060034,0x00000006, + 0x00000237,0x00000084,0x000001af,0x000001b4,0x0004001c,0x00000238,0x0000000f,0x00000237, + 0x00040020,0x00000239,0x00000004,0x00000238,0x0004003b,0x00000239,0x0000023a,0x00000004, + 0x00040020,0x0000023e,0x00000004,0x0000000f,0x0004002b,0x00000006,0x00000242,0x00000108, + 0x00071168,0x0000024e,0x0000000f,0x00000110,0x000000e5,0x000000e5,0x000001a8,0x0004001c, + 0x0000024f,0x0000024e,0x000001cd,0x00040020,0x00000250,0x00000007,0x0000024f,0x00040020, + 0x00000253,0x00000007,0x0000024e,0x0004002b,0x0000000f,0x00000267,0x00000000,0x0004002c, + 0x0000024e,0x00000268,0x00000267,0x0004002b,0x0000019a,0x00000270,0x00000005,0x00060034, + 0x00000006,0x00000273,0x000000c7,0x000001d8,0x000000b4,0x00060034,0x00000036,0x00000274, + 0x000000ab,0x00000273,0x00000092,0x00040032,0x00000006,0x0000027a,0x00000020,0x00060034, + 0x00000006,0x00000280,0x00000086,0x0000027a,0x000001c2,0x00060034,0x00000006,0x00000281, + 0x00000086,0x00000280,0x0000018f,0x00060034,0x00000006,0x00000297,0x00000084,0x000001af, + 0x000001a8,0x00040017,0x000002a7,0x00000006,0x00000004,0x00040020,0x000002a8,0x00000007, + 0x000002a7,0x0003001d,0x000002aa,0x000002a7,0x0003001e,0x000002ab,0x000002aa,0x00040020, + 0x000002ac,0x0000000c,0x000002ab,0x0004003b,0x000002ac,0x000002ad,0x0000000c,0x0004002b, + 0x0000019a,0x000002af,0x00000004,0x00040020,0x000002bb,0x0000000c,0x000002a7,0x00060034, + 0x00000006,0x000002be,0x00000084,0x000001af,0x00000110,0x0004001c,0x000002bf,0x000002a7, + 0x000002be,0x00040020,0x000002c0,0x00000004,0x000002bf,0x0004003b,0x000002c0,0x000002c1, + 0x00000004,0x00040020,0x000002c8,0x00000004,0x000002a7,0x00060034,0x00000006,0x000002d4, + 0x00000084,0x000001b4,0x000001a8,0x0003001d,0x000002dd,0x000002a7,0x0003001e,0x000002de, + 0x000002dd,0x00040020,0x000002df,0x0000000c,0x000002de,0x0004003b,0x000002df,0x000002e0, + 0x0000000c,0x00060034,0x00000006,0x000002e2,0x00000086,0x0000027a,0x000001c2,0x0004002b, + 0x0000019a,0x000002e6,0x00000002,0x0004002b,0x0000019a,0x000002ea,0x00000003,0x00060034, + 0x00000006,0x000002f7,0x00000084,0x000001b4,0x00000110,0x0004001c,0x000002f8,0x000002a7, + 0x000002f7,0x00040020,0x000002f9,0x00000004,0x000002f8,0x0004003b,0x000002f9,0x000002fa, + 0x00000004,0x00040016,0x00000317,0x00000008,0x00001076,0x00071168,0x00000318,0x00000317, + 0x00000110,0x000000e5,0x000001c2,0x00000092,0x00040020,0x00000319,0x00000007,0x00000318, + 0x00071168,0x00000327,0x00000317,0x00000110,0x000001c2,0x000000e5,0x00000008,0x00040020, + 0x00000328,0x00000007,0x00000327,0x00040032,0x00000006,0x0000034b,0x00000000,0x00060034, + 0x00000036,0x0000034c,0x000000ab,0x0000034b,0x00000092,0x00060034,0x00000036,0x0000037e, + 0x000000ab,0x0000034b,0x00000092,0x00060034,0x00000006,0x000003b7,0x00000084,0x000001af, + 0x000001b4,0x00060034,0x00000036,0x000003ce,0x000000ac,0x0000018f,0x00000008,0x0003001d, + 0x000003d1,0x0000000f,0x0003001e,0x000003d2,0x000003d1,0x00040020,0x000003d3,0x0000000c, + 0x000003d2,0x0004003b,0x000003d3,0x000003d4,0x0000000c,0x0004002b,0x0000019a,0x000003d6, + 0x0000000b,0x00060034,0x00000006,0x000003ec,0x000000c7,0x000001d8,0x000000b2,0x00060034, + 0x00000036,0x000003ed,0x000000ab,0x000003ec,0x00000092,0x0004002b,0x00000006,0x000003fe, + 0x00000030,0x00060034,0x00000006,0x000003ff,0x000000c7,0x000001d8,0x000003fe,0x00060034, + 0x00000036,0x00000400,0x000000ab,0x000003ff,0x00000092,0x0003001d,0x00000403,0x0000020c, + 0x0003001e,0x00000404,0x00000403,0x00040020,0x00000405,0x0000000c,0x00000404,0x0004003b, + 0x00000405,0x00000406,0x0000000c,0x00060034,0x00000006,0x0000040f,0x000000c7,0x000001d8, + 0x000000e5,0x00060034,0x00000036,0x00000410,0x000000aa,0x0000040f,0x00000092,0x00040032, + 0x00000006,0x00000418,0x00000004,0x00040032,0x00000006,0x00000419,0x00000001,0x00040032, + 0x00000006,0x0000041a,0x00000001,0x00060033,0x00000182,0x0000041b,0x0000041a,0x00000008, + 0x00000008,0x00040032,0x00000006,0x0000041c,0x00000020,0x00050036,0x00000002,0x00000004, + 0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000015,0x00000181,0x00000007, + 0x0004003b,0x00000015,0x00000188,0x00000007,0x0004003b,0x00000015,0x0000018b,0x00000007, + 0x0004003b,0x00000015,0x00000191,0x00000007,0x0004003b,0x00000015,0x00000195,0x00000007, + 0x0004003b,0x00000015,0x000001a0,0x00000007,0x0004003b,0x00000015,0x000001a5,0x00000007, + 0x0004003b,0x00000015,0x000001b1,0x00000007,0x0004003b,0x00000015,0x000001b6,0x00000007, + 0x0004003b,0x00000015,0x000001c0,0x00000007,0x0004003b,0x00000015,0x000001c9,0x00000007, + 0x0004003b,0x0000009a,0x000001cf,0x00000007,0x0004003b,0x0000009a,0x000001d7,0x00000007, + 0x0004003b,0x00000015,0x000001e1,0x00000007,0x0004003b,0x00000015,0x000001eb,0x00000007, + 0x0004003b,0x00000015,0x000001f0,0x00000007,0x0004003b,0x0000000a,0x000001f5,0x00000007, + 0x0004003b,0x00000015,0x000001fc,0x00000007,0x0004003b,0x0000000a,0x00000209,0x00000007, + 0x0004003b,0x00000015,0x00000216,0x00000007,0x0004003b,0x0000000a,0x00000235,0x00000007, + 0x0004003b,0x00000015,0x00000243,0x00000007,0x0004003b,0x00000250,0x00000251,0x00000007, + 0x0004003b,0x00000250,0x0000026a,0x00000007,0x0004003b,0x00000015,0x0000026f,0x00000007, + 0x0004003b,0x00000015,0x00000275,0x00000007,0x0004003b,0x00000015,0x0000027e,0x00000007, + 0x0004003b,0x00000015,0x00000283,0x00000007,0x0004003b,0x00000015,0x0000028b,0x00000007, + 0x0004003b,0x00000015,0x0000028f,0x00000007,0x0004003b,0x00000015,0x00000299,0x00000007, + 0x0004003b,0x00000015,0x0000029c,0x00000007,0x0004003b,0x00000015,0x0000029f,0x00000007, + 0x0004003b,0x000002a8,0x000002a9,0x00000007,0x0004003b,0x00000015,0x000002cc,0x00000007, + 0x0004003b,0x00000015,0x000002d6,0x00000007,0x0004003b,0x00000015,0x000002d9,0x00000007, + 0x0004003b,0x000002a8,0x000002dc,0x00000007,0x0004003b,0x00000015,0x00000307,0x00000007, + 0x0004003b,0x00000015,0x0000030f,0x00000007,0x0004003b,0x00000319,0x0000031a,0x00000007, + 0x0004003b,0x00000328,0x00000329,0x00000007,0x0004003b,0x00000015,0x00000348,0x00000007, + 0x0004003b,0x00000015,0x0000035d,0x00000007,0x0004003b,0x00000015,0x00000381,0x00000007, + 0x0004003b,0x00000015,0x00000393,0x00000007,0x0004003b,0x00000015,0x000003af,0x00000007, + 0x0004003b,0x00000015,0x000003b9,0x00000007,0x0004003b,0x00000015,0x000003be,0x00000007, + 0x0004003b,0x00000010,0x000003ca,0x00000007,0x0004003b,0x0000000a,0x000003f2,0x00000007, + 0x0004003b,0x00000015,0x000003f5,0x00000007,0x0004003b,0x00000010,0x00000408,0x00000007, + 0x0004003b,0x00000015,0x0000040b,0x00000007,0x00050041,0x00000185,0x00000186,0x00000184, + 0x00000092,0x0004003d,0x00000006,0x00000187,0x00000186,0x0003003e,0x00000181,0x00000187, + 0x0004003d,0x00000006,0x0000018a,0x00000189,0x0003003e,0x00000188,0x0000018a,0x00050041, + 0x00000185,0x0000018d,0x0000018c,0x00000092,0x0004003d,0x00000006,0x0000018e,0x0000018d, + 0x00050089,0x00000006,0x00000190,0x0000018e,0x0000018f,0x0003003e,0x0000018b,0x00000190, + 0x00050041,0x00000185,0x00000192,0x0000018c,0x00000092,0x0004003d,0x00000006,0x00000193, + 0x00000192,0x00050086,0x00000006,0x00000194,0x00000193,0x0000018f,0x0003003e,0x00000191, + 0x00000194,0x0004003d,0x00000006,0x00000196,0x00000191,0x00050041,0x0000019c,0x0000019d, + 0x00000199,0x0000019b,0x0004003d,0x00000006,0x0000019e,0x0000019d,0x00050086,0x00000006, + 0x0000019f,0x00000196,0x0000019e,0x0003003e,0x00000195,0x0000019f,0x0004003d,0x00000006, + 0x000001a1,0x00000191,0x00050041,0x0000019c,0x000001a2,0x00000199,0x0000019b,0x0004003d, + 0x00000006,0x000001a3,0x000001a2,0x00050089,0x00000006,0x000001a4,0x000001a1,0x000001a3, + 0x0003003e,0x000001a0,0x000001a4,0x00050041,0x00000185,0x000001a6,0x0000018c,0x00000008, + 0x0004003d,0x00000006,0x000001a7,0x000001a6,0x00050041,0x00000185,0x000001a9,0x0000018c, + 0x000001a8,0x0004003d,0x00000006,0x000001aa,0x000001a9,0x00050084,0x00000006,0x000001ac, + 0x000001aa,0x000001ab,0x00050080,0x00000006,0x000001ad,0x000001a7,0x000001ac,0x00050084, + 0x00000006,0x000001b0,0x000001ad,0x000001af,0x0003003e,0x000001a5,0x000001b0,0x0004003d, + 0x00000006,0x000001b2,0x000001a0,0x00050084,0x00000006,0x000001b5,0x000001b2,0x000001b4, + 0x0003003e,0x000001b1,0x000001b5,0x00050041,0x0000019c,0x000001b8,0x00000199,0x000001b7, + 0x0004003d,0x00000006,0x000001b9,0x000001b8,0x0004003d,0x00000006,0x000001ba,0x00000195, + 0x00050041,0x0000019c,0x000001bc,0x00000199,0x000001bb,0x0004003d,0x00000006,0x000001bd, + 0x000001bc,0x00050084,0x00000006,0x000001be,0x000001ba,0x000001bd,0x00050080,0x00000006, + 0x000001bf,0x000001b9,0x000001be,0x0003003e,0x000001b6,0x000001bf,0x0004003d,0x00000006, + 0x000001c1,0x00000188,0x00050086,0x00000006,0x000001c7,0x000001c1,0x000001c6,0x00050084, + 0x00000006,0x000001c8,0x000001c7,0x000000e5,0x0003003e,0x000001c0,0x000001c8,0x0004003d, + 0x00000006,0x000001ca,0x00000188,0x00050089,0x00000006,0x000001cb,0x000001ca,0x000001c6, + 0x00050084,0x00000006,0x000001ce,0x000001cb,0x000001cd,0x0003003e,0x000001c9,0x000001ce, + 0x0004003d,0x00000006,0x000001d0,0x000001a5,0x0004003d,0x00000006,0x000001d1,0x000001c0, + 0x00050080,0x00000006,0x000001d2,0x000001d0,0x000001d1,0x00050041,0x0000019c,0x000001d4, + 0x00000199,0x000001d3,0x0004003d,0x00000006,0x000001d5,0x000001d4,0x000500b0,0x00000036, + 0x000001d6,0x000001d2,0x000001d5,0x0003003e,0x000001cf,0x000001d6,0x0004003d,0x00000006, + 0x000001db,0x0000018b,0x000500aa,0x00000036,0x000001dc,0x000001db,0x00000092,0x000500a7, + 0x00000036,0x000001dd,0x000001da,0x000001dc,0x0003003e,0x000001d7,0x000001dd,0x0004003d, + 0x00000036,0x000001de,0x000001d7,0x000300f7,0x000001e0,0x00000000,0x000400fa,0x000001de, + 0x000001df,0x000001e0,0x000200f8,0x000001df,0x0004003d,0x00000006,0x000001e2,0x00000181, + 0x0003003e,0x000001e1,0x000001e2,0x000200f9,0x000001e3,0x000200f8,0x000001e3,0x000400f6, + 0x000001e5,0x000001e6,0x00000000,0x000200f9,0x000001e7,0x000200f8,0x000001e7,0x0004003d, + 0x00000006,0x000001e8,0x000001e1,0x000500b0,0x00000036,0x000001ea,0x000001e8,0x000001e9, + 0x000400fa,0x000001ea,0x000001e4,0x000001e5,0x000200f8,0x000001e4,0x0004003d,0x00000006, + 0x000001ec,0x000001a5,0x0004003d,0x00000006,0x000001ed,0x000001e1,0x00050086,0x00000006, + 0x000001ee,0x000001ed,0x000001b4,0x00050080,0x00000006,0x000001ef,0x000001ec,0x000001ee, + 0x0003003e,0x000001eb,0x000001ef,0x0004003d,0x00000006,0x000001f1,0x000001b1,0x0004003d, + 0x00000006,0x000001f2,0x000001e1,0x00050089,0x00000006,0x000001f3,0x000001f2,0x000001b4, + 0x00050080,0x00000006,0x000001f4,0x000001f1,0x000001f3,0x0003003e,0x000001f0,0x000001f4, + 0x0003003e,0x000001f5,0x00000136,0x0004003d,0x00000006,0x000001f6,0x000001eb,0x00050041, + 0x0000019c,0x000001f7,0x00000199,0x000001d3,0x0004003d,0x00000006,0x000001f8,0x000001f7, + 0x000500b0,0x00000036,0x000001f9,0x000001f6,0x000001f8,0x000300f7,0x000001fb,0x00000000, + 0x000400fa,0x000001f9,0x000001fa,0x000001fb,0x000200f8,0x000001fa,0x0004003d,0x00000006, + 0x000001fd,0x000001eb,0x00050041,0x0000019c,0x000001ff,0x00000199,0x000001fe,0x0004003d, + 0x00000006,0x00000200,0x000001ff,0x00050084,0x00000006,0x00000201,0x000001fd,0x00000200, + 0x0004003d,0x00000006,0x00000202,0x000001b6,0x00050080,0x00000006,0x00000203,0x00000201, + 0x00000202,0x0004003d,0x00000006,0x00000204,0x000001f0,0x00050080,0x00000006,0x00000205, + 0x00000203,0x00000204,0x0003003e,0x000001fc,0x00000205,0x000300f7,0x0000020b,0x00000000, + 0x000400fa,0x00000208,0x0000020a,0x00000218,0x000200f8,0x0000020a,0x0004003d,0x00000006, + 0x00000211,0x000001fc,0x00060041,0x00000212,0x00000213,0x00000210,0x000001d3,0x00000211, + 0x0004003d,0x0000020c,0x00000214,0x00000213,0x00040071,0x00000006,0x00000215,0x00000214, + 0x0003003e,0x00000216,0x00000215,0x00050039,0x00000009,0x00000217,0x00000027,0x00000216, + 0x0003003e,0x00000209,0x00000217,0x000200f9,0x0000020b,0x000200f8,0x00000218,0x0004003d, + 0x00000006,0x0000021d,0x000001fc,0x00060041,0x0000021e,0x0000021f,0x0000021c,0x000001d3, + 0x0000021d,0x0004003d,0x0000000f,0x00000220,0x0000021f,0x00040073,0x00000009,0x00000221, + 0x00000220,0x0003003e,0x00000209,0x00000221,0x000200f9,0x0000020b,0x000200f8,0x0000020b, + 0x0004003d,0x00000009,0x00000222,0x00000209,0x0003003e,0x000001f5,0x00000222,0x000300f7, + 0x00000226,0x00000000,0x000400fa,0x00000224,0x00000225,0x00000226,0x000200f8,0x00000225, + 0x0004003d,0x00000009,0x00000227,0x000001f5,0x00050041,0x0000019c,0x0000022d,0x00000199, + 0x0000022c,0x0004003d,0x00000006,0x0000022e,0x0000022d,0x0004003d,0x00000006,0x0000022f, + 0x000001f0,0x00050080,0x00000006,0x00000230,0x0000022e,0x0000022f,0x00060041,0x0000021e, + 0x00000231,0x0000022b,0x000001d3,0x00000230,0x0004003d,0x0000000f,0x00000232,0x00000231, + 0x00040073,0x00000009,0x00000233,0x00000232,0x00050085,0x00000009,0x00000234,0x00000227, + 0x00000233,0x0003003e,0x00000235,0x00000234,0x00050039,0x00000009,0x00000236,0x0000000d, + 0x00000235,0x0003003e,0x000001f5,0x00000236,0x000200f9,0x00000226,0x000200f8,0x00000226, + 0x000200f9,0x000001fb,0x000200f8,0x000001fb,0x0004003d,0x00000006,0x0000023b,0x000001e1, + 0x0004003d,0x00000009,0x0000023c,0x000001f5,0x00040073,0x0000000f,0x0000023d,0x0000023c, + 0x00050041,0x0000023e,0x0000023f,0x0000023a,0x0000023b,0x0005003e,0x0000023f,0x0000023d, + 0x00000028,0x000001a8,0x000200f9,0x000001e6,0x000200f8,0x000001e6,0x0004003d,0x00000006, + 0x00000240,0x000001e1,0x00050080,0x00000006,0x00000241,0x00000240,0x000001c3,0x0003003e, + 0x000001e1,0x00000241,0x000200f9,0x000001e3,0x000200f8,0x000001e5,0x000400e0,0x000001a8, + 0x000001a8,0x00000242,0x000200f9,0x000001e0,0x000200f8,0x000001e0,0x0003003e,0x00000243, + 0x00000092,0x000200f9,0x00000244,0x000200f8,0x00000244,0x000400f6,0x00000246,0x00000247, + 0x00000001,0x000200f9,0x00000248,0x000200f8,0x00000248,0x0004003d,0x00000006,0x00000249, + 0x00000243,0x000500b0,0x00000036,0x0000024a,0x00000249,0x000001cd,0x000400fa,0x0000024a, + 0x00000245,0x00000246,0x000200f8,0x00000245,0x0004003d,0x00000036,0x0000024b,0x000001d7, + 0x000300f7,0x0000024d,0x00000000,0x000400fa,0x0000024b,0x0000024c,0x00000265,0x000200f8, + 0x0000024c,0x0004003d,0x00000006,0x00000252,0x00000243,0x00050041,0x00000253,0x00000254, + 0x00000251,0x00000252,0x0004003d,0x00000006,0x00000255,0x000001c0,0x00050084,0x00000006, + 0x00000256,0x00000255,0x000001b4,0x0004003d,0x00000006,0x00000257,0x000001c9,0x0004003d, + 0x00000006,0x00000258,0x00000243,0x00050080,0x00000006,0x00000259,0x00000257,0x00000258, + 0x00050084,0x00000006,0x0000025a,0x00000259,0x000000e5,0x00050080,0x00000006,0x0000025b, + 0x00000256,0x0000025a,0x00050041,0x0000023e,0x0000025c,0x0000023a,0x0000025b,0x0004003d, + 0x00000006,0x0000025d,0x000001c0,0x00050084,0x00000006,0x0000025e,0x0000025d,0x000001b4, + 0x0004003d,0x00000006,0x0000025f,0x000001c9,0x0004003d,0x00000006,0x00000260,0x00000243, + 0x00050080,0x00000006,0x00000261,0x0000025f,0x00000260,0x00050084,0x00000006,0x00000262, + 0x00000261,0x000000e5,0x00050080,0x00000006,0x00000263,0x0000025e,0x00000262,0x00081169, + 0x0000024e,0x00000264,0x0000025c,0x000001d3,0x000001b4,0x00000030,0x000001a8,0x0003003e, + 0x00000254,0x00000264,0x000200f9,0x0000024d,0x000200f8,0x00000265,0x0004003d,0x00000006, + 0x00000266,0x00000243,0x00050041,0x00000253,0x00000269,0x00000251,0x00000266,0x0003003e, + 0x00000269,0x00000268,0x000200f9,0x0000024d,0x000200f8,0x0000024d,0x0004003d,0x00000006, + 0x0000026b,0x00000243,0x00050041,0x00000253,0x0000026c,0x0000026a,0x0000026b,0x0003003e, + 0x0000026c,0x00000268,0x000200f9,0x00000247,0x000200f8,0x00000247,0x0004003d,0x00000006, + 0x0000026d,0x00000243,0x00050080,0x00000006,0x0000026e,0x0000026d,0x000001bb,0x0003003e, + 0x00000243,0x0000026e,0x000200f9,0x00000244,0x000200f8,0x00000246,0x00050041,0x0000019c, + 0x00000271,0x00000199,0x00000270,0x0004003d,0x00000006,0x00000272,0x00000271,0x000300f7, + 0x00000277,0x00000000,0x000400fa,0x00000274,0x00000276,0x00000278,0x000200f8,0x00000276, + 0x0003003e,0x00000275,0x00000092,0x000200f9,0x00000277,0x000200f8,0x00000278,0x0004003d, + 0x00000006,0x00000279,0x00000195,0x00050084,0x00000006,0x0000027b,0x00000279,0x0000027a, + 0x0003003e,0x00000275,0x0000027b,0x000200f9,0x00000277,0x000200f8,0x00000277,0x0004003d, + 0x00000006,0x0000027c,0x00000275,0x00050080,0x00000006,0x0000027d,0x00000272,0x0000027c, + 0x0003003e,0x0000026f,0x0000027d,0x0004003d,0x00000006,0x0000027f,0x0000018b,0x00050084, + 0x00000006,0x00000282,0x0000027f,0x00000281,0x0003003e,0x0000027e,0x00000282,0x0003003e, + 0x00000283,0x00000092,0x000200f9,0x00000284,0x000200f8,0x00000284,0x000400f6,0x00000286, + 0x00000287,0x00000000,0x000200f9,0x00000288,0x000200f8,0x00000288,0x0004003d,0x00000006, + 0x00000289,0x00000283,0x000500b0,0x00000036,0x0000028a,0x00000289,0x00000281,0x000400fa, + 0x0000028a,0x00000285,0x00000286,0x000200f8,0x00000285,0x0004003d,0x00000006,0x0000028c, + 0x0000027e,0x0004003d,0x00000006,0x0000028d,0x00000283,0x00050080,0x00000006,0x0000028e, + 0x0000028c,0x0000028d,0x0003003e,0x0000028b,0x0000028e,0x000400e0,0x000001a8,0x000001a8, + 0x00000242,0x0004003d,0x00000006,0x00000290,0x00000181,0x0003003e,0x0000028f,0x00000290, + 0x000200f9,0x00000291,0x000200f8,0x00000291,0x000400f6,0x00000293,0x00000294,0x00000000, + 0x000200f9,0x00000295,0x000200f8,0x00000295,0x0004003d,0x00000006,0x00000296,0x0000028f, + 0x000500b0,0x00000036,0x00000298,0x00000296,0x00000297,0x000400fa,0x00000298,0x00000292, + 0x00000293,0x000200f8,0x00000292,0x0004003d,0x00000006,0x0000029a,0x0000028f,0x000500c2, + 0x00000006,0x0000029b,0x0000029a,0x00000008,0x0003003e,0x00000299,0x0000029b,0x0004003d, + 0x00000006,0x0000029d,0x0000028f,0x000500c7,0x00000006,0x0000029e,0x0000029d,0x00000008, + 0x0003003e,0x0000029c,0x0000029e,0x0004003d,0x00000006,0x000002a0,0x000001a5,0x0004003d, + 0x00000006,0x000002a1,0x00000299,0x00050080,0x00000006,0x000002a2,0x000002a0,0x000002a1, + 0x00050041,0x0000019c,0x000002a3,0x00000199,0x000001d3,0x0004003d,0x00000006,0x000002a4, + 0x000002a3,0x00050082,0x00000006,0x000002a5,0x000002a4,0x00000008,0x0007000c,0x00000006, + 0x000002a6,0x00000001,0x00000026,0x000002a2,0x000002a5,0x0003003e,0x0000029f,0x000002a6, + 0x0004003d,0x00000006,0x000002ae,0x0000029f,0x00050041,0x0000019c,0x000002b0,0x00000199, + 0x000002af,0x0004003d,0x00000006,0x000002b1,0x000002b0,0x00050084,0x00000006,0x000002b2, + 0x000002ae,0x000002b1,0x0004003d,0x00000006,0x000002b3,0x0000026f,0x00050080,0x00000006, + 0x000002b4,0x000002b2,0x000002b3,0x0004003d,0x00000006,0x000002b5,0x0000028b,0x00050084, + 0x00000006,0x000002b6,0x000002b5,0x000001c2,0x00050080,0x00000006,0x000002b7,0x000002b4, + 0x000002b6,0x00050086,0x00000006,0x000002b8,0x000002b7,0x000000e5,0x0004003d,0x00000006, + 0x000002b9,0x0000029c,0x00050080,0x00000006,0x000002ba,0x000002b8,0x000002b9,0x00060041, + 0x000002bb,0x000002bc,0x000002ad,0x000001d3,0x000002ba,0x0004003d,0x000002a7,0x000002bd, + 0x000002bc,0x0003003e,0x000002a9,0x000002bd,0x0004003d,0x00000006,0x000002c2,0x00000299, + 0x00050084,0x00000006,0x000002c3,0x000002c2,0x00000110,0x0004003d,0x00000006,0x000002c4, + 0x0000029c,0x00050084,0x00000006,0x000002c5,0x000002c4,0x00000008,0x00050080,0x00000006, + 0x000002c6,0x000002c3,0x000002c5,0x0004003d,0x000002a7,0x000002c7,0x000002a9,0x00050041, + 0x000002c8,0x000002c9,0x000002c1,0x000002c6,0x0005003e,0x000002c9,0x000002c7,0x00000028, + 0x000001a8,0x000200f9,0x00000294,0x000200f8,0x00000294,0x0004003d,0x00000006,0x000002ca, + 0x0000028f,0x00050080,0x00000006,0x000002cb,0x000002ca,0x000001c3,0x0003003e,0x0000028f, + 0x000002cb,0x000200f9,0x00000291,0x000200f8,0x00000293,0x0004003d,0x00000006,0x000002cd, + 0x00000181,0x0003003e,0x000002cc,0x000002cd,0x000200f9,0x000002ce,0x000200f8,0x000002ce, + 0x000400f6,0x000002d0,0x000002d1,0x00000000,0x000200f9,0x000002d2,0x000200f8,0x000002d2, + 0x0004003d,0x00000006,0x000002d3,0x000002cc,0x000500b0,0x00000036,0x000002d5,0x000002d3, + 0x000002d4,0x000400fa,0x000002d5,0x000002cf,0x000002d0,0x000200f8,0x000002cf,0x0004003d, + 0x00000006,0x000002d7,0x000002cc,0x000500c2,0x00000006,0x000002d8,0x000002d7,0x00000008, + 0x0003003e,0x000002d6,0x000002d8,0x0004003d,0x00000006,0x000002da,0x000002cc,0x000500c7, + 0x00000006,0x000002db,0x000002da,0x00000008,0x0003003e,0x000002d9,0x000002db,0x0004003d, + 0x00000006,0x000002e1,0x00000195,0x00050084,0x00000006,0x000002e3,0x000002e1,0x000002e2, + 0x0004003d,0x00000006,0x000002e4,0x0000028b,0x00050080,0x00000006,0x000002e5,0x000002e3, + 0x000002e4,0x00050041,0x0000019c,0x000002e7,0x00000199,0x000002e6,0x0004003d,0x00000006, + 0x000002e8,0x000002e7,0x00050084,0x00000006,0x000002e9,0x000002e5,0x000002e8,0x00050041, + 0x0000019c,0x000002eb,0x00000199,0x000002ea,0x0004003d,0x00000006,0x000002ec,0x000002eb, + 0x00050080,0x00000006,0x000002ed,0x000002e9,0x000002ec,0x0004003d,0x00000006,0x000002ee, + 0x000001b1,0x00050080,0x00000006,0x000002ef,0x000002ed,0x000002ee,0x0004003d,0x00000006, + 0x000002f0,0x000002d6,0x00050080,0x00000006,0x000002f1,0x000002ef,0x000002f0,0x00050084, + 0x00000006,0x000002f2,0x000002f1,0x000001a8,0x0004003d,0x00000006,0x000002f3,0x000002d9, + 0x00050080,0x00000006,0x000002f4,0x000002f2,0x000002f3,0x00060041,0x000002bb,0x000002f5, + 0x000002e0,0x000001d3,0x000002f4,0x0004003d,0x000002a7,0x000002f6,0x000002f5,0x0003003e, + 0x000002dc,0x000002f6,0x0004003d,0x00000006,0x000002fb,0x000002d6,0x00050084,0x00000006, + 0x000002fc,0x000002fb,0x00000110,0x0004003d,0x00000006,0x000002fd,0x000002d9,0x00050084, + 0x00000006,0x000002fe,0x000002fd,0x00000008,0x00050080,0x00000006,0x000002ff,0x000002fc, + 0x000002fe,0x0004003d,0x000002a7,0x00000300,0x000002dc,0x00050041,0x000002c8,0x00000301, + 0x000002fa,0x000002ff,0x0005003e,0x00000301,0x00000300,0x00000028,0x000001a8,0x000200f9, + 0x000002d1,0x000200f8,0x000002d1,0x0004003d,0x00000006,0x00000302,0x000002cc,0x00050080, + 0x00000006,0x00000303,0x00000302,0x000001c3,0x0003003e,0x000002cc,0x00000303,0x000200f9, + 0x000002ce,0x000200f8,0x000002d0,0x000400e0,0x000001a8,0x000001a8,0x00000242,0x0004003d, + 0x00000036,0x00000304,0x000001cf,0x000300f7,0x00000306,0x00000000,0x000400fa,0x00000304, + 0x00000305,0x00000306,0x000200f8,0x00000305,0x0003003e,0x00000307,0x00000092,0x000200f9, + 0x00000308,0x000200f8,0x00000308,0x000400f6,0x0000030a,0x0000030b,0x00000001,0x000200f9, + 0x0000030c,0x000200f8,0x0000030c,0x0004003d,0x00000006,0x0000030d,0x00000307,0x000500b0, + 0x00000036,0x0000030e,0x0000030d,0x000001cd,0x000400fa,0x0000030e,0x00000309,0x0000030a, + 0x000200f8,0x00000309,0x0003003e,0x0000030f,0x00000092,0x000200f9,0x00000310,0x000200f8, + 0x00000310,0x000400f6,0x00000312,0x00000313,0x00000001,0x000200f9,0x00000314,0x000200f8, + 0x00000314,0x0004003d,0x00000006,0x00000315,0x0000030f,0x000500b0,0x00000036,0x00000316, + 0x00000315,0x00000008,0x000400fa,0x00000316,0x00000311,0x00000312,0x000200f8,0x00000311, + 0x0004003d,0x00000006,0x0000031b,0x000001c0,0x00050084,0x00000006,0x0000031c,0x0000031b, + 0x00000110,0x0004003d,0x00000006,0x0000031d,0x0000030f,0x00050084,0x00000006,0x0000031e, + 0x0000031d,0x000001a8,0x00050080,0x00000006,0x0000031f,0x0000031c,0x0000031e,0x00050041, + 0x000002c8,0x00000320,0x000002c1,0x0000031f,0x0004003d,0x00000006,0x00000321,0x000001c0, + 0x00050084,0x00000006,0x00000322,0x00000321,0x00000110,0x0004003d,0x00000006,0x00000323, + 0x0000030f,0x00050084,0x00000006,0x00000324,0x00000323,0x000001a8,0x00050080,0x00000006, + 0x00000325,0x00000322,0x00000324,0x00081169,0x00000318,0x00000326,0x00000320,0x000001d3, + 0x00000110,0x00000030,0x000001a8,0x0003003e,0x0000031a,0x00000326,0x0004003d,0x00000006, + 0x0000032a,0x000001c9,0x0004003d,0x00000006,0x0000032b,0x00000307,0x00050080,0x00000006, + 0x0000032c,0x0000032a,0x0000032b,0x00050084,0x00000006,0x0000032d,0x0000032c,0x000000e5, + 0x00050084,0x00000006,0x0000032e,0x0000032d,0x00000110,0x0004003d,0x00000006,0x0000032f, + 0x0000030f,0x00050084,0x00000006,0x00000330,0x0000032f,0x000001a8,0x00050080,0x00000006, + 0x00000331,0x0000032e,0x00000330,0x00050041,0x000002c8,0x00000332,0x000002fa,0x00000331, + 0x0004003d,0x00000006,0x00000333,0x000001c9,0x0004003d,0x00000006,0x00000334,0x00000307, + 0x00050080,0x00000006,0x00000335,0x00000333,0x00000334,0x00050084,0x00000006,0x00000336, + 0x00000335,0x000000e5,0x00050084,0x00000006,0x00000337,0x00000336,0x00000110,0x0004003d, + 0x00000006,0x00000338,0x0000030f,0x00050084,0x00000006,0x00000339,0x00000338,0x000001a8, + 0x00050080,0x00000006,0x0000033a,0x00000337,0x00000339,0x00081169,0x00000327,0x0000033b, + 0x00000332,0x000001bb,0x00000110,0x00000030,0x000001a8,0x0003003e,0x00000329,0x0000033b, + 0x0004003d,0x00000006,0x0000033c,0x00000307,0x0004003d,0x00000318,0x0000033d,0x0000031a, + 0x0004003d,0x00000327,0x0000033e,0x00000329,0x0004003d,0x00000006,0x0000033f,0x00000307, + 0x00050041,0x00000253,0x00000340,0x00000251,0x0000033f,0x0004003d,0x0000024e,0x00000341, + 0x00000340,0x0006116b,0x0000024e,0x00000342,0x0000033d,0x0000033e,0x00000341,0x00050041, + 0x00000253,0x00000343,0x00000251,0x0000033c,0x0003003e,0x00000343,0x00000342,0x000200f9, + 0x00000313,0x000200f8,0x00000313,0x0004003d,0x00000006,0x00000344,0x0000030f,0x00050080, + 0x00000006,0x00000345,0x00000344,0x000001bb,0x0003003e,0x0000030f,0x00000345,0x000200f9, + 0x00000310,0x000200f8,0x00000312,0x000200f9,0x0000030b,0x000200f8,0x0000030b,0x0004003d, + 0x00000006,0x00000346,0x00000307,0x00050080,0x00000006,0x00000347,0x00000346,0x000001bb, + 0x0003003e,0x00000307,0x00000347,0x000200f9,0x00000308,0x000200f8,0x0000030a,0x0004003d, + 0x00000006,0x00000349,0x0000028b,0x00050084,0x00000006,0x0000034a,0x00000349,0x000001c2, + 0x0003003e,0x00000348,0x0000034a,0x000300f7,0x0000034e,0x00000000,0x000400fa,0x0000034c, + 0x0000034d,0x0000034e,0x000200f8,0x0000034d,0x0004003d,0x00000006,0x0000034f,0x00000348, + 0x00050080,0x00000006,0x00000350,0x0000034f,0x000001c2,0x00050089,0x00000006,0x00000351, + 0x00000350,0x0000034b,0x000500aa,0x00000036,0x00000352,0x00000351,0x00000092,0x000400a8, + 0x00000036,0x00000353,0x00000352,0x000300f7,0x00000355,0x00000000,0x000400fa,0x00000353, + 0x00000354,0x00000355,0x000200f8,0x00000354,0x0004003d,0x00000006,0x00000356,0x00000348, + 0x00050080,0x00000006,0x00000357,0x00000356,0x000001c2,0x000500ae,0x00000036,0x00000358, + 0x00000357,0x0000027a,0x000200f9,0x00000355,0x000200f8,0x00000355,0x000700f5,0x00000036, + 0x00000359,0x00000352,0x0000034d,0x00000358,0x00000354,0x000200f9,0x0000034e,0x000200f8, + 0x0000034e,0x000700f5,0x00000036,0x0000035a,0x0000034c,0x0000030a,0x00000359,0x00000355, + 0x000300f7,0x0000035c,0x00000000,0x000400fa,0x0000035a,0x0000035b,0x0000035c,0x000200f8, + 0x0000035b,0x0003003e,0x0000035d,0x00000092,0x000200f9,0x0000035e,0x000200f8,0x0000035e, + 0x000400f6,0x00000360,0x00000361,0x00000001,0x000200f9,0x00000362,0x000200f8,0x00000362, + 0x0004003d,0x00000006,0x00000363,0x0000035d,0x000500b0,0x00000036,0x00000364,0x00000363, + 0x000001cd,0x000400fa,0x00000364,0x0000035f,0x00000360,0x000200f8,0x0000035f,0x0004003d, + 0x00000006,0x00000365,0x00000348,0x000500b0,0x00000036,0x00000366,0x00000365,0x0000034b, + 0x000300f7,0x00000368,0x00000000,0x000400fa,0x00000366,0x00000367,0x0000036e,0x000200f8, + 0x00000367,0x0004003d,0x00000006,0x00000369,0x0000035d,0x0004003d,0x00000006,0x0000036a, + 0x0000035d,0x00050041,0x00000253,0x0000036b,0x00000251,0x0000036a,0x0004003d,0x0000024e, + 0x0000036c,0x0000036b,0x00050041,0x00000253,0x0000036d,0x0000026a,0x00000369,0x0003003e, + 0x0000036d,0x0000036c,0x000200f9,0x00000368,0x000200f8,0x0000036e,0x0004003d,0x00000006, + 0x0000036f,0x0000035d,0x0004003d,0x00000006,0x00000370,0x0000035d,0x00050041,0x00000253, + 0x00000371,0x0000026a,0x00000370,0x0004003d,0x0000024e,0x00000372,0x00000371,0x0004003d, + 0x00000006,0x00000373,0x0000035d,0x00050041,0x00000253,0x00000374,0x00000251,0x00000373, + 0x0004003d,0x0000024e,0x00000375,0x00000374,0x00050081,0x0000024e,0x00000376,0x00000372, + 0x00000375,0x00050041,0x00000253,0x00000377,0x0000026a,0x0000036f,0x0003003e,0x00000377, + 0x00000376,0x000200f9,0x00000368,0x000200f8,0x00000368,0x0004003d,0x00000006,0x00000378, + 0x0000035d,0x00050041,0x00000253,0x00000379,0x00000251,0x00000378,0x0003003e,0x00000379, + 0x00000268,0x000200f9,0x00000361,0x000200f8,0x00000361,0x0004003d,0x00000006,0x0000037a, + 0x0000035d,0x00050080,0x00000006,0x0000037b,0x0000037a,0x000001bb,0x0003003e,0x0000035d, + 0x0000037b,0x000200f9,0x0000035e,0x000200f8,0x00000360,0x000200f9,0x0000035c,0x000200f8, + 0x0000035c,0x000200f9,0x00000306,0x000200f8,0x00000306,0x000200f9,0x00000287,0x000200f8, + 0x00000287,0x0004003d,0x00000006,0x0000037c,0x00000283,0x00050080,0x00000006,0x0000037d, + 0x0000037c,0x000001bb,0x0003003e,0x00000283,0x0000037d,0x000200f9,0x00000284,0x000200f8, + 0x00000286,0x000300f7,0x00000380,0x00000000,0x000400fa,0x0000037e,0x0000037f,0x00000380, + 0x000200f8,0x0000037f,0x0003003e,0x00000381,0x00000092,0x000200f9,0x00000382,0x000200f8, + 0x00000382,0x000400f6,0x00000384,0x00000385,0x00000001,0x000200f9,0x00000386,0x000200f8, + 0x00000386,0x0004003d,0x00000006,0x00000387,0x00000381,0x000500b0,0x00000036,0x00000388, + 0x00000387,0x000001cd,0x000400fa,0x00000388,0x00000383,0x00000384,0x000200f8,0x00000383, + 0x0004003d,0x00000006,0x00000389,0x00000381,0x0004003d,0x00000006,0x0000038a,0x00000381, + 0x00050041,0x00000253,0x0000038b,0x0000026a,0x0000038a,0x0004003d,0x0000024e,0x0000038c, + 0x0000038b,0x00050041,0x00000253,0x0000038d,0x00000251,0x00000389,0x0003003e,0x0000038d, + 0x0000038c,0x000200f9,0x00000385,0x000200f8,0x00000385,0x0004003d,0x00000006,0x0000038e, + 0x00000381,0x00050080,0x00000006,0x0000038f,0x0000038e,0x000001bb,0x0003003e,0x00000381, + 0x0000038f,0x000200f9,0x00000382,0x000200f8,0x00000384,0x000200f9,0x00000380,0x000200f8, + 0x00000380,0x000400e0,0x000001a8,0x000001a8,0x00000242,0x0004003d,0x00000036,0x00000390, + 0x000001cf,0x000300f7,0x00000392,0x00000000,0x000400fa,0x00000390,0x00000391,0x00000392, + 0x000200f8,0x00000391,0x0003003e,0x00000393,0x00000092,0x000200f9,0x00000394,0x000200f8, + 0x00000394,0x000400f6,0x00000396,0x00000397,0x00000001,0x000200f9,0x00000398,0x000200f8, + 0x00000398,0x0004003d,0x00000006,0x00000399,0x00000393,0x000500b0,0x00000036,0x0000039a, + 0x00000399,0x000001cd,0x000400fa,0x0000039a,0x00000395,0x00000396,0x000200f8,0x00000395, + 0x0004003d,0x00000006,0x0000039b,0x00000393,0x00050041,0x00000253,0x0000039c,0x00000251, + 0x0000039b,0x0004003d,0x0000024e,0x0000039d,0x0000039c,0x0004003d,0x00000006,0x0000039e, + 0x000001c0,0x00050084,0x00000006,0x0000039f,0x0000039e,0x000001b4,0x0004003d,0x00000006, + 0x000003a0,0x000001c9,0x0004003d,0x00000006,0x000003a1,0x00000393,0x00050080,0x00000006, + 0x000003a2,0x000003a0,0x000003a1,0x00050084,0x00000006,0x000003a3,0x000003a2,0x000000e5, + 0x00050080,0x00000006,0x000003a4,0x0000039f,0x000003a3,0x00050041,0x0000023e,0x000003a5, + 0x0000023a,0x000003a4,0x0004003d,0x00000006,0x000003a6,0x000001c0,0x00050084,0x00000006, + 0x000003a7,0x000003a6,0x000001b4,0x0004003d,0x00000006,0x000003a8,0x000001c9,0x0004003d, + 0x00000006,0x000003a9,0x00000393,0x00050080,0x00000006,0x000003aa,0x000003a8,0x000003a9, + 0x00050084,0x00000006,0x000003ab,0x000003aa,0x000000e5,0x00050080,0x00000006,0x000003ac, + 0x000003a7,0x000003ab,0x0007116a,0x000003a5,0x0000039d,0x000001d3,0x000001b4,0x00000028, + 0x000001a8,0x000200f9,0x00000397,0x000200f8,0x00000397,0x0004003d,0x00000006,0x000003ad, + 0x00000393,0x00050080,0x00000006,0x000003ae,0x000003ad,0x000001bb,0x0003003e,0x00000393, + 0x000003ae,0x000200f9,0x00000394,0x000200f8,0x00000396,0x000200f9,0x00000392,0x000200f8, + 0x00000392,0x000400e0,0x000001a8,0x000001a8,0x00000242,0x0004003d,0x00000006,0x000003b0, + 0x00000181,0x0003003e,0x000003af,0x000003b0,0x000200f9,0x000003b1,0x000200f8,0x000003b1, + 0x000400f6,0x000003b3,0x000003b4,0x00000000,0x000200f9,0x000003b5,0x000200f8,0x000003b5, + 0x0004003d,0x00000006,0x000003b6,0x000003af,0x000500b0,0x00000036,0x000003b8,0x000003b6, + 0x000003b7,0x000400fa,0x000003b8,0x000003b2,0x000003b3,0x000200f8,0x000003b2,0x0004003d, + 0x00000006,0x000003ba,0x000001a5,0x0004003d,0x00000006,0x000003bb,0x000003af,0x00050086, + 0x00000006,0x000003bc,0x000003bb,0x000001b4,0x00050080,0x00000006,0x000003bd,0x000003ba, + 0x000003bc,0x0003003e,0x000003b9,0x000003bd,0x0004003d,0x00000006,0x000003bf,0x000001b1, + 0x0004003d,0x00000006,0x000003c0,0x000003af,0x00050089,0x00000006,0x000003c1,0x000003c0, + 0x000001b4,0x00050080,0x00000006,0x000003c2,0x000003bf,0x000003c1,0x0003003e,0x000003be, + 0x000003c2,0x0004003d,0x00000006,0x000003c3,0x000003b9,0x00050041,0x0000019c,0x000003c4, + 0x00000199,0x000001d3,0x0004003d,0x00000006,0x000003c5,0x000003c4,0x000500ae,0x00000036, + 0x000003c6,0x000003c3,0x000003c5,0x000300f7,0x000003c8,0x00000000,0x000400fa,0x000003c6, + 0x000003c7,0x000003c8,0x000200f8,0x000003c7,0x000200f9,0x000003b4,0x000200f8,0x000003c8, + 0x0004003d,0x00000006,0x000003cb,0x000003af,0x00050041,0x0000023e,0x000003cc,0x0000023a, + 0x000003cb,0x0006003d,0x0000000f,0x000003cd,0x000003cc,0x00000030,0x000001a8,0x0003003e, + 0x000003ca,0x000003cd,0x000300f7,0x000003d0,0x00000000,0x000400fa,0x000003ce,0x000003cf, + 0x000003d0,0x000200f8,0x000003cf,0x0004003d,0x00000006,0x000003d5,0x0000018b,0x00050041, + 0x0000019c,0x000003d7,0x00000199,0x000003d6,0x0004003d,0x00000006,0x000003d8,0x000003d7, + 0x00050084,0x00000006,0x000003d9,0x000003d5,0x000003d8,0x0004003d,0x00000006,0x000003da, + 0x000003b9,0x00050041,0x0000019c,0x000003db,0x00000199,0x000001bb,0x0004003d,0x00000006, + 0x000003dc,0x000003db,0x00050084,0x00000006,0x000003dd,0x000003da,0x000003dc,0x00050080, + 0x00000006,0x000003de,0x000003d9,0x000003dd,0x0004003d,0x00000006,0x000003df,0x00000195, + 0x00050041,0x0000019c,0x000003e0,0x00000199,0x000001bb,0x0004003d,0x00000006,0x000003e1, + 0x000003e0,0x00050084,0x00000006,0x000003e2,0x000003df,0x000003e1,0x00050041,0x0000019c, + 0x000003e3,0x00000199,0x000001d3,0x0004003d,0x00000006,0x000003e4,0x000003e3,0x00050084, + 0x00000006,0x000003e5,0x000003e2,0x000003e4,0x00050080,0x00000006,0x000003e6,0x000003de, + 0x000003e5,0x0004003d,0x00000006,0x000003e7,0x000003be,0x00050080,0x00000006,0x000003e8, + 0x000003e6,0x000003e7,0x0004003d,0x0000000f,0x000003e9,0x000003ca,0x00060041,0x0000021e, + 0x000003ea,0x000003d4,0x000001d3,0x000003e8,0x0003003e,0x000003ea,0x000003e9,0x000200f9, + 0x000003b4,0x000200f8,0x000003d0,0x000300f7,0x000003ef,0x00000000,0x000400fa,0x000003ed, + 0x000003ee,0x000003ef,0x000200f8,0x000003ee,0x0004003d,0x0000000f,0x000003f0,0x000003ca, + 0x00040073,0x00000009,0x000003f1,0x000003f0,0x0003003e,0x000003f2,0x000003f1,0x00050039, + 0x00000009,0x000003f3,0x00000024,0x000003f2,0x00040073,0x0000000f,0x000003f4,0x000003f3, + 0x0003003e,0x000003ca,0x000003f4,0x000200f9,0x000003ef,0x000200f8,0x000003ef,0x0004003d, + 0x00000006,0x000003f6,0x000003b9,0x00050041,0x0000019c,0x000003f7,0x00000199,0x000001fe, + 0x0004003d,0x00000006,0x000003f8,0x000003f7,0x00050084,0x00000006,0x000003f9,0x000003f6, + 0x000003f8,0x0004003d,0x00000006,0x000003fa,0x000001b6,0x00050080,0x00000006,0x000003fb, + 0x000003f9,0x000003fa,0x0004003d,0x00000006,0x000003fc,0x000003be,0x00050080,0x00000006, + 0x000003fd,0x000003fb,0x000003fc,0x0003003e,0x000003f5,0x000003fd,0x000300f7,0x00000402, + 0x00000000,0x000400fa,0x00000400,0x00000401,0x00000402,0x000200f8,0x00000401,0x0004003d, + 0x00000006,0x00000407,0x000003f5,0x0004003d,0x0000000f,0x00000409,0x000003ca,0x0003003e, + 0x00000408,0x00000409,0x00050039,0x00000006,0x0000040a,0x00000013,0x00000408,0x0003003e, + 0x0000040b,0x0000040a,0x00050039,0x00000006,0x0000040c,0x0000001d,0x0000040b,0x00040071, + 0x0000020c,0x0000040d,0x0000040c,0x00060041,0x00000212,0x0000040e,0x00000406,0x000001d3, + 0x00000407,0x0003003e,0x0000040e,0x0000040d,0x000200f9,0x00000402,0x000200f8,0x00000402, + 0x000300f7,0x00000412,0x00000000,0x000400fa,0x00000410,0x00000411,0x00000412,0x000200f8, + 0x00000411,0x0004003d,0x00000006,0x00000413,0x000003f5,0x0004003d,0x0000000f,0x00000414, + 0x000003ca,0x00060041,0x0000021e,0x00000415,0x000003d4,0x000001d3,0x00000413,0x0003003e, + 0x00000415,0x00000414,0x000200f9,0x00000412,0x000200f8,0x00000412,0x000200f9,0x000003b4, + 0x000200f8,0x000003b4,0x0004003d,0x00000006,0x00000416,0x000003af,0x00050080,0x00000006, + 0x00000417,0x00000416,0x000001c3,0x0003003e,0x000003af,0x00000417,0x000200f9,0x000003b1, + 0x000200f8,0x000003b3,0x000100fd,0x00010038,0x00050036,0x00000009,0x0000000d,0x00000000, + 0x0000000b,0x00030037,0x0000000a,0x0000000c,0x000200f8,0x0000000e,0x0004003b,0x00000015, + 0x00000029,0x00000007,0x0004003b,0x00000015,0x0000002c,0x00000007,0x0004003b,0x00000015, + 0x00000030,0x00000007,0x0004003b,0x0000000a,0x0000004a,0x00000007,0x0004003b,0x00000015, + 0x0000005b,0x00000007,0x0004003b,0x00000015,0x00000060,0x00000007,0x0004003d,0x00000009, + 0x0000002a,0x0000000c,0x0004007c,0x00000006,0x0000002b,0x0000002a,0x0003003e,0x00000029, + 0x0000002b,0x0004003d,0x00000006,0x0000002d,0x00000029,0x000500c7,0x00000006,0x0000002f, + 0x0000002d,0x0000002e,0x0003003e,0x0000002c,0x0000002f,0x0004003d,0x00000006,0x00000031, + 0x00000029,0x000500c7,0x00000006,0x00000033,0x00000031,0x00000032,0x0003003e,0x00000030, + 0x00000033,0x0004003d,0x00000006,0x00000034,0x00000030,0x000500ae,0x00000036,0x00000037, + 0x00000034,0x00000035,0x000300f7,0x00000039,0x00000000,0x000400fa,0x00000037,0x00000038, + 0x00000039,0x000200f8,0x00000038,0x0004003d,0x00000009,0x0000003a,0x0000000c,0x000200fe, + 0x0000003a,0x000200f8,0x00000039,0x0004003d,0x00000006,0x0000003c,0x00000030,0x000500ae, + 0x00000036,0x0000003e,0x0000003c,0x0000003d,0x000300f7,0x00000040,0x00000000,0x000400fa, + 0x0000003e,0x0000003f,0x00000040,0x000200f8,0x0000003f,0x0004003d,0x00000006,0x00000041, + 0x0000002c,0x000500c5,0x00000006,0x00000042,0x00000041,0x00000035,0x0004007c,0x00000009, + 0x00000043,0x00000042,0x000200fe,0x00000043,0x000200f8,0x00000040,0x0004003d,0x00000006, + 0x00000045,0x00000030,0x000500b0,0x00000036,0x00000047,0x00000045,0x00000046,0x000300f7, + 0x00000049,0x00000000,0x000400fa,0x00000047,0x00000048,0x00000049,0x000200f8,0x00000048, + 0x0004003d,0x00000006,0x0000004b,0x00000030,0x0004007c,0x00000009,0x0000004c,0x0000004b, + 0x00050085,0x00000009,0x0000004e,0x0000004c,0x0000004d,0x0006000c,0x00000009,0x0000004f, + 0x00000001,0x00000002,0x0000004e,0x0003003e,0x0000004a,0x0000004f,0x0004003d,0x00000006, + 0x00000050,0x0000002c,0x0004007c,0x00000009,0x00000051,0x00000050,0x0004003d,0x00000006, + 0x00000052,0x0000002c,0x0004003d,0x00000009,0x00000053,0x0000004a,0x00050085,0x00000009, + 0x00000055,0x00000053,0x00000054,0x0004007c,0x00000006,0x00000056,0x00000055,0x000500c5, + 0x00000006,0x00000057,0x00000052,0x00000056,0x0004007c,0x00000009,0x00000058,0x00000057, + 0x00050081,0x00000009,0x00000059,0x00000051,0x00000058,0x000200fe,0x00000059,0x000200f8, + 0x00000049,0x0004003d,0x00000006,0x0000005c,0x00000030,0x000500c2,0x00000006,0x0000005e, + 0x0000005c,0x0000005d,0x000500c7,0x00000006,0x0000005f,0x0000005e,0x00000008,0x0003003e, + 0x0000005b,0x0000005f,0x0004003d,0x00000006,0x00000061,0x00000030,0x00050080,0x00000006, + 0x00000063,0x00000061,0x00000062,0x0004003d,0x00000006,0x00000064,0x0000005b,0x00050080, + 0x00000006,0x00000065,0x00000063,0x00000064,0x000500c7,0x00000006,0x00000067,0x00000065, + 0x00000066,0x0003003e,0x00000060,0x00000067,0x0004003d,0x00000006,0x00000068,0x0000002c, + 0x0004003d,0x00000006,0x00000069,0x00000060,0x000500c5,0x00000006,0x0000006a,0x00000068, + 0x00000069,0x0004007c,0x00000009,0x0000006b,0x0000006a,0x000200fe,0x0000006b,0x00010038, + 0x00050036,0x00000006,0x00000013,0x00000000,0x00000011,0x00030037,0x00000010,0x00000012, + 0x000200f8,0x00000014,0x0004003d,0x0000000f,0x0000006e,0x00000012,0x0004007c,0x0000006f, + 0x00000070,0x0000006e,0x00040071,0x00000006,0x00000071,0x00000070,0x000200fe,0x00000071, + 0x00010038,0x00050036,0x00000006,0x00000019,0x00000000,0x00000016,0x00030037,0x00000015, + 0x00000017,0x00030037,0x00000015,0x00000018,0x000200f8,0x0000001a,0x0004003b,0x00000015, + 0x00000074,0x00000007,0x0004003b,0x00000015,0x00000078,0x00000007,0x0004003b,0x00000015, + 0x0000007c,0x00000007,0x0004003b,0x00000015,0x00000080,0x00000007,0x0004003d,0x00000006, + 0x00000075,0x00000017,0x0004003d,0x00000006,0x00000076,0x00000018,0x000500c2,0x00000006, + 0x00000077,0x00000075,0x00000076,0x0003003e,0x00000074,0x00000077,0x0004003d,0x00000006, + 0x00000079,0x00000018,0x000500c4,0x00000006,0x0000007a,0x00000008,0x00000079,0x00050082, + 0x00000006,0x0000007b,0x0000007a,0x00000008,0x0003003e,0x00000078,0x0000007b,0x0004003d, + 0x00000006,0x0000007d,0x00000017,0x0004003d,0x00000006,0x0000007e,0x00000078,0x000500c7, + 0x00000006,0x0000007f,0x0000007d,0x0000007e,0x0003003e,0x0000007c,0x0000007f,0x0004003d, + 0x00000006,0x00000081,0x00000018,0x00050082,0x00000006,0x00000082,0x00000081,0x00000008, + 0x000500c4,0x00000006,0x00000083,0x00000008,0x00000082,0x0003003e,0x00000080,0x00000083, + 0x0004003d,0x00000006,0x00000084,0x00000074,0x0004003d,0x00000006,0x00000085,0x0000007c, + 0x0004003d,0x00000006,0x00000086,0x00000080,0x000500ac,0x00000036,0x00000087,0x00000085, + 0x00000086,0x000400a8,0x00000036,0x00000088,0x00000087,0x000300f7,0x0000008a,0x00000000, + 0x000400fa,0x00000088,0x00000089,0x0000008a,0x000200f8,0x00000089,0x0004003d,0x00000006, + 0x0000008b,0x0000007c,0x0004003d,0x00000006,0x0000008c,0x00000080,0x000500aa,0x00000036, + 0x0000008d,0x0000008b,0x0000008c,0x000300f7,0x0000008f,0x00000000,0x000400fa,0x0000008d, + 0x0000008e,0x0000008f,0x000200f8,0x0000008e,0x0004003d,0x00000006,0x00000090,0x00000074, + 0x000500c7,0x00000006,0x00000091,0x00000090,0x00000008,0x000500ab,0x00000036,0x00000093, + 0x00000091,0x00000092,0x000200f9,0x0000008f,0x000200f8,0x0000008f,0x000700f5,0x00000036, + 0x00000094,0x0000008d,0x00000089,0x00000093,0x0000008e,0x000200f9,0x0000008a,0x000200f8, + 0x0000008a,0x000700f5,0x00000036,0x00000095,0x00000087,0x0000001a,0x00000094,0x0000008f, + 0x000600a9,0x00000006,0x00000096,0x00000095,0x00000008,0x00000092,0x00050080,0x00000006, + 0x00000097,0x00000084,0x00000096,0x000200fe,0x00000097,0x00010038,0x00050036,0x00000006, + 0x0000001d,0x00000000,0x0000001b,0x00030037,0x00000015,0x0000001c,0x000200f8,0x0000001e, + 0x0004003b,0x0000009a,0x0000009b,0x00000007,0x0004003b,0x00000015,0x000000b7,0x00000007, + 0x0004003b,0x00000015,0x000000bd,0x00000007,0x0004003b,0x00000015,0x000000c3,0x00000007, + 0x0004003b,0x00000015,0x000000ca,0x00000007,0x0004003b,0x00000015,0x000000d1,0x00000007, + 0x0004003b,0x00000015,0x000000d4,0x00000007,0x0004003b,0x00000015,0x000000dd,0x00000007, + 0x0004003b,0x00000015,0x000000e0,0x00000007,0x0004003b,0x00000015,0x000000e9,0x00000007, + 0x0004003b,0x00000015,0x000000eb,0x00000007,0x0004003b,0x00000015,0x000000f0,0x00000007, + 0x0004003b,0x00000015,0x000000f3,0x00000007,0x0004003b,0x00000015,0x000000f5,0x00000007, + 0x0004003b,0x00000015,0x000000f7,0x00000007,0x0004003b,0x00000015,0x0000010b,0x00000007, + 0x0004003d,0x00000006,0x0000009c,0x0000001c,0x000500c7,0x00000006,0x0000009e,0x0000009c, + 0x0000009d,0x000500aa,0x00000036,0x0000009f,0x0000009e,0x0000009d,0x000300f7,0x000000a1, + 0x00000000,0x000400fa,0x0000009f,0x000000a0,0x000000a1,0x000200f8,0x000000a0,0x0004003d, + 0x00000006,0x000000a2,0x0000001c,0x000500c7,0x00000006,0x000000a4,0x000000a2,0x000000a3, + 0x000500ab,0x00000036,0x000000a5,0x000000a4,0x00000092,0x000200f9,0x000000a1,0x000200f8, + 0x000000a1,0x000700f5,0x00000036,0x000000a6,0x0000009f,0x0000001e,0x000000a5,0x000000a0, + 0x0003003e,0x0000009b,0x000000a6,0x0004003d,0x00000036,0x000000a7,0x0000009b,0x000300f7, + 0x000000a9,0x00000000,0x000400fa,0x000000a7,0x000000a8,0x000000a9,0x000200f8,0x000000a8, + 0x000200fe,0x00000092,0x000200f8,0x000000a9,0x0004003d,0x00000006,0x000000ab,0x0000001c, + 0x000500c7,0x00000006,0x000000ad,0x000000ab,0x000000ac,0x000500aa,0x00000036,0x000000ae, + 0x000000ad,0x00000092,0x000300f7,0x000000b0,0x00000000,0x000400fa,0x000000ae,0x000000af, + 0x000000b0,0x000200f8,0x000000af,0x0004003d,0x00000006,0x000000b1,0x0000001c,0x000500c2, + 0x00000006,0x000000b3,0x000000b1,0x000000b2,0x000500c7,0x00000006,0x000000b5,0x000000b3, + 0x000000b4,0x000200fe,0x000000b5,0x000200f8,0x000000b0,0x0004003d,0x00000006,0x000000b8, + 0x0000001c,0x000500c7,0x00000006,0x000000ba,0x000000b8,0x000000b9,0x000500ab,0x00000036, + 0x000000bb,0x000000ba,0x00000092,0x000600a9,0x00000006,0x000000bc,0x000000bb,0x000000b4, + 0x00000092,0x0003003e,0x000000b7,0x000000bc,0x0004003d,0x00000006,0x000000be,0x0000001c, + 0x000500c2,0x00000006,0x000000c0,0x000000be,0x000000bf,0x000500c7,0x00000006,0x000000c2, + 0x000000c0,0x000000c1,0x0003003e,0x000000bd,0x000000c2,0x0004003d,0x00000006,0x000000c4, + 0x0000001c,0x000500c7,0x00000006,0x000000c5,0x000000c4,0x000000a3,0x0003003e,0x000000c3, + 0x000000c5,0x0004003d,0x00000006,0x000000c6,0x000000bd,0x000500aa,0x00000036,0x000000c7, + 0x000000c6,0x000000c1,0x000300f7,0x000000c9,0x00000000,0x000400fa,0x000000c7,0x000000c8, + 0x000000cc,0x000200f8,0x000000c8,0x0003003e,0x000000ca,0x000000cb,0x000200f9,0x000000c9, + 0x000200f8,0x000000cc,0x0004003d,0x00000006,0x000000cd,0x000000bd,0x000500b2,0x00000036, + 0x000000ce,0x000000cd,0x000000b2,0x000300f7,0x000000d0,0x00000000,0x000400fa,0x000000ce, + 0x000000cf,0x000000ef,0x000200f8,0x000000cf,0x0004003d,0x00000006,0x000000d2,0x000000bd, + 0x000500aa,0x00000036,0x000000d3,0x000000d2,0x00000092,0x000300f7,0x000000d6,0x00000000, + 0x000400fa,0x000000d3,0x000000d5,0x000000d8,0x000200f8,0x000000d5,0x0004003d,0x00000006, + 0x000000d7,0x000000c3,0x0003003e,0x000000d4,0x000000d7,0x000200f9,0x000000d6,0x000200f8, + 0x000000d8,0x0004003d,0x00000006,0x000000da,0x000000c3,0x00050080,0x00000006,0x000000db, + 0x000000d9,0x000000da,0x0003003e,0x000000d4,0x000000db,0x000200f9,0x000000d6,0x000200f8, + 0x000000d6,0x0004003d,0x00000006,0x000000dc,0x000000d4,0x0003003e,0x000000d1,0x000000dc, + 0x0004003d,0x00000006,0x000000de,0x000000bd,0x000500aa,0x00000036,0x000000df,0x000000de, + 0x00000092,0x000300f7,0x000000e2,0x00000000,0x000400fa,0x000000df,0x000000e1,0x000000e4, + 0x000200f8,0x000000e1,0x0003003e,0x000000e0,0x000000e3,0x000200f9,0x000000e2,0x000200f8, + 0x000000e4,0x0004003d,0x00000006,0x000000e6,0x000000bd,0x00050082,0x00000006,0x000000e7, + 0x000000e5,0x000000e6,0x0003003e,0x000000e0,0x000000e7,0x000200f9,0x000000e2,0x000200f8, + 0x000000e2,0x0004003d,0x00000006,0x000000e8,0x000000e0,0x0003003e,0x000000dd,0x000000e8, + 0x0004003d,0x00000006,0x000000ea,0x000000d1,0x0003003e,0x000000e9,0x000000ea,0x0004003d, + 0x00000006,0x000000ec,0x000000dd,0x0003003e,0x000000eb,0x000000ec,0x00060039,0x00000006, + 0x000000ed,0x00000019,0x000000e9,0x000000eb,0x0007000c,0x00000006,0x000000ee,0x00000001, + 0x00000026,0x000000ed,0x000000b2,0x0003003e,0x000000ca,0x000000ee,0x000200f9,0x000000d0, + 0x000200f8,0x000000ef,0x0004003d,0x00000006,0x000000f1,0x000000bd,0x00050082,0x00000006, + 0x000000f2,0x000000f1,0x000000b2,0x0003003e,0x000000f0,0x000000f2,0x0004003d,0x00000006, + 0x000000f6,0x000000c3,0x0003003e,0x000000f5,0x000000f6,0x0003003e,0x000000f7,0x000000f4, + 0x00060039,0x00000006,0x000000f8,0x00000019,0x000000f5,0x000000f7,0x0003003e,0x000000f3, + 0x000000f8,0x0004003d,0x00000006,0x000000f9,0x000000f3,0x000500aa,0x00000036,0x000000fa, + 0x000000f9,0x000000b2,0x000300f7,0x000000fc,0x00000000,0x000400fa,0x000000fa,0x000000fb, + 0x000000fc,0x000200f8,0x000000fb,0x0003003e,0x000000f3,0x00000092,0x0004003d,0x00000006, + 0x000000fd,0x000000f0,0x00050080,0x00000006,0x000000fe,0x000000fd,0x00000008,0x0003003e, + 0x000000f0,0x000000fe,0x000200f9,0x000000fc,0x000200f8,0x000000fc,0x0004003d,0x00000006, + 0x000000ff,0x000000f0,0x000500ac,0x00000036,0x00000100,0x000000ff,0x000000e3,0x000400a8, + 0x00000036,0x00000101,0x00000100,0x000300f7,0x00000103,0x00000000,0x000400fa,0x00000101, + 0x00000102,0x00000103,0x000200f8,0x00000102,0x0004003d,0x00000006,0x00000104,0x000000f0, + 0x000500aa,0x00000036,0x00000105,0x00000104,0x000000e3,0x0004003d,0x00000006,0x00000106, + 0x000000f3,0x000500ac,0x00000036,0x00000108,0x00000106,0x00000107,0x000500a7,0x00000036, + 0x00000109,0x00000105,0x00000108,0x000200f9,0x00000103,0x000200f8,0x00000103,0x000700f5, + 0x00000036,0x0000010a,0x00000100,0x000000fc,0x00000109,0x00000102,0x000300f7,0x0000010d, + 0x00000000,0x000400fa,0x0000010a,0x0000010c,0x0000010e,0x000200f8,0x0000010c,0x0003003e, + 0x0000010b,0x000000cb,0x000200f9,0x0000010d,0x000200f8,0x0000010e,0x0004003d,0x00000006, + 0x0000010f,0x000000f0,0x000500c4,0x00000006,0x00000111,0x0000010f,0x00000110,0x0004003d, + 0x00000006,0x00000112,0x000000f3,0x000500c5,0x00000006,0x00000113,0x00000111,0x00000112, + 0x0003003e,0x0000010b,0x00000113,0x000200f9,0x0000010d,0x000200f8,0x0000010d,0x0004003d, + 0x00000006,0x00000114,0x0000010b,0x0003003e,0x000000ca,0x00000114,0x000200f9,0x000000d0, + 0x000200f8,0x000000d0,0x000200f9,0x000000c9,0x000200f8,0x000000c9,0x0004003d,0x00000006, + 0x00000115,0x000000b7,0x0004003d,0x00000006,0x00000116,0x000000ca,0x000500c5,0x00000006, + 0x00000117,0x00000115,0x00000116,0x000200fe,0x00000117,0x00010038,0x00050036,0x00000009, + 0x00000021,0x00000000,0x0000001f,0x00030037,0x00000015,0x00000020,0x000200f8,0x00000022, + 0x0004003b,0x0000009a,0x0000011a,0x00000007,0x0004003b,0x00000015,0x0000011e,0x00000007, + 0x0004003b,0x00000015,0x00000122,0x00000007,0x0004003b,0x0000000a,0x00000129,0x00000007, + 0x0004003b,0x0000000a,0x00000146,0x00000007,0x0004003d,0x00000006,0x0000011b,0x00000020, + 0x000500c7,0x00000006,0x0000011c,0x0000011b,0x000000b4,0x000500ab,0x00000036,0x0000011d, + 0x0000011c,0x00000092,0x0003003e,0x0000011a,0x0000011d,0x0004003d,0x00000006,0x0000011f, + 0x00000020,0x000500c2,0x00000006,0x00000120,0x0000011f,0x00000110,0x000500c7,0x00000006, + 0x00000121,0x00000120,0x000000e3,0x0003003e,0x0000011e,0x00000121,0x0004003d,0x00000006, + 0x00000123,0x00000020,0x000500c7,0x00000006,0x00000124,0x00000123,0x000000f4,0x0003003e, + 0x00000122,0x00000124,0x0004003d,0x00000006,0x00000125,0x0000011e,0x000500aa,0x00000036, + 0x00000126,0x00000125,0x00000092,0x000300f7,0x00000128,0x00000000,0x000400fa,0x00000126, + 0x00000127,0x0000012e,0x000200f8,0x00000127,0x0004003d,0x00000006,0x0000012a,0x00000122, + 0x00040070,0x00000009,0x0000012b,0x0000012a,0x00050085,0x00000009,0x0000012d,0x0000012b, + 0x0000012c,0x0003003e,0x00000129,0x0000012d,0x000200f9,0x00000128,0x000200f8,0x0000012e, + 0x0004003d,0x00000006,0x0000012f,0x0000011e,0x000500aa,0x00000036,0x00000130,0x0000012f, + 0x000000e3,0x0004003d,0x00000006,0x00000131,0x00000122,0x000500aa,0x00000036,0x00000132, + 0x00000131,0x000000f4,0x000500a7,0x00000036,0x00000133,0x00000130,0x00000132,0x000300f7, + 0x00000135,0x00000000,0x000400fa,0x00000133,0x00000134,0x00000137,0x000200f8,0x00000134, + 0x0003003e,0x00000129,0x00000136,0x000200f9,0x00000135,0x000200f8,0x00000137,0x0004003d, + 0x00000006,0x00000139,0x00000122,0x00040070,0x00000009,0x0000013a,0x00000139,0x00050085, + 0x00000009,0x0000013c,0x0000013a,0x0000013b,0x00050081,0x00000009,0x0000013d,0x00000138, + 0x0000013c,0x0004003d,0x00000006,0x0000013e,0x0000011e,0x00050080,0x00000006,0x00000140, + 0x0000013e,0x0000013f,0x000500c4,0x00000006,0x00000142,0x00000140,0x00000141,0x0004007c, + 0x00000009,0x00000143,0x00000142,0x00050085,0x00000009,0x00000144,0x0000013d,0x00000143, + 0x0003003e,0x00000129,0x00000144,0x000200f9,0x00000135,0x000200f8,0x00000135,0x000200f9, + 0x00000128,0x000200f8,0x00000128,0x0004003d,0x00000036,0x00000145,0x0000011a,0x000300f7, + 0x00000148,0x00000000,0x000400fa,0x00000145,0x00000147,0x0000014b,0x000200f8,0x00000147, + 0x0004003d,0x00000009,0x00000149,0x00000129,0x0004007f,0x00000009,0x0000014a,0x00000149, + 0x0003003e,0x00000146,0x0000014a,0x000200f9,0x00000148,0x000200f8,0x0000014b,0x0004003d, + 0x00000009,0x0000014c,0x00000129,0x0003003e,0x00000146,0x0000014c,0x000200f9,0x00000148, + 0x000200f8,0x00000148,0x0004003d,0x00000009,0x0000014d,0x00000146,0x000200fe,0x0000014d, + 0x00010038,0x00050036,0x00000009,0x00000024,0x00000000,0x0000000b,0x00030037,0x0000000a, + 0x00000023,0x000200f8,0x00000025,0x0004003b,0x0000000a,0x00000150,0x00000007,0x0004003b, + 0x0000000a,0x00000155,0x00000007,0x0004003b,0x0000000a,0x00000157,0x00000007,0x0004003b, + 0x0000000a,0x0000015a,0x00000007,0x0004003b,0x0000000a,0x0000015c,0x00000007,0x0004003b, + 0x0000000a,0x00000161,0x00000007,0x0004003b,0x0000000a,0x00000163,0x00000007,0x0004003b, + 0x0000000a,0x00000168,0x00000007,0x0004003b,0x0000000a,0x0000016d,0x00000007,0x0004003d, + 0x00000009,0x00000151,0x00000023,0x0008000c,0x00000009,0x00000154,0x00000001,0x0000002b, + 0x00000151,0x00000152,0x00000153,0x0003003e,0x00000155,0x00000154,0x00050039,0x00000009, + 0x00000156,0x0000000d,0x00000155,0x0003003e,0x00000150,0x00000156,0x0004003d,0x00000009, + 0x00000158,0x00000150,0x0006000c,0x00000009,0x00000159,0x00000001,0x00000004,0x00000158, + 0x0003003e,0x0000015a,0x00000159,0x00050039,0x00000009,0x0000015b,0x0000000d,0x0000015a, + 0x0003003e,0x00000157,0x0000015b,0x0004003d,0x00000009,0x0000015e,0x00000157,0x0008000c, + 0x00000009,0x00000160,0x00000001,0x00000032,0x0000015d,0x0000015e,0x0000015f,0x0003003e, + 0x00000161,0x00000160,0x00050039,0x00000009,0x00000162,0x0000000d,0x00000161,0x0003003e, + 0x0000015c,0x00000162,0x0004003d,0x00000009,0x00000164,0x00000150,0x0004003d,0x00000009, + 0x00000165,0x0000015c,0x0008000c,0x00000009,0x00000167,0x00000001,0x00000032,0x00000164, + 0x00000165,0x00000166,0x0003003e,0x00000168,0x00000167,0x00050039,0x00000009,0x00000169, + 0x0000000d,0x00000168,0x0003003e,0x00000163,0x00000169,0x0004003d,0x00000009,0x0000016a, + 0x00000023,0x0004003d,0x00000009,0x0000016b,0x00000163,0x00050085,0x00000009,0x0000016c, + 0x0000016a,0x0000016b,0x0003003e,0x0000016d,0x0000016c,0x00050039,0x00000009,0x0000016e, + 0x0000000d,0x0000016d,0x000200fe,0x0000016e,0x00010038,0x00050036,0x00000009,0x00000027, + 0x00000000,0x0000001f,0x00030037,0x00000015,0x00000026,0x000200f8,0x00000028,0x0004003b, + 0x0000000a,0x00000175,0x00000007,0x0004003b,0x00000015,0x0000017c,0x00000007,0x0004003d, + 0x00000006,0x00000171,0x00000026,0x000500c7,0x00000006,0x00000173,0x00000171,0x00000172, + 0x000500aa,0x00000036,0x00000174,0x00000173,0x00000172,0x000300f7,0x00000177,0x00000000, + 0x000400fa,0x00000174,0x00000176,0x00000178,0x000200f8,0x00000176,0x0003003e,0x00000175, + 0x00000136,0x000200f9,0x00000177,0x000200f8,0x00000178,0x0004003d,0x00000006,0x00000179, + 0x00000026,0x000500c7,0x00000006,0x0000017b,0x00000179,0x0000017a,0x0003003e,0x0000017c, + 0x0000017b,0x00050039,0x00000009,0x0000017d,0x00000021,0x0000017c,0x0003003e,0x00000175, + 0x0000017d,0x000200f9,0x00000177,0x000200f8,0x00000177,0x0004003d,0x00000009,0x0000017e, + 0x00000175,0x000200fe,0x0000017e,0x00010038, +}; +inline constexpr uint32_t k_e4m3_k32_f16__gemm_f16[] = { + 0x07230203,0x00010600,0x0008000b,0x000001d6,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x0000003d,0x00020011,0x00001151,0x00020011, + 0x00001160,0x00020011,0x000014e1,0x00020011,0x00001786,0x0008000a,0x5f565053,0x5f52484b, + 0x706f6f63,0x74617265,0x5f657669,0x7274616d,0x00007869,0x0006000b,0x00000001,0x4c534c47, + 0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000003,0x0010000f,0x00000005, + 0x00000004,0x6e69616d,0x00000000,0x000000cf,0x000000e2,0x000000f2,0x00000100,0x00000115, + 0x0000011a,0x00000126,0x00000157,0x00000179,0x00000199,0x000001a4,0x00060010,0x00000004, + 0x00000011,0x00000080,0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc,0x00090004, + 0x455f4c47,0x635f5458,0x72746e6f,0x665f6c6f,0x5f776f6c,0x72747461,0x74756269,0x00007365, + 0x00060004,0x455f4c47,0x665f5458,0x74616f6c,0x6d34655f,0x00000033,0x00080004,0x455f4c47, + 0x735f5458,0x65646168,0x36315f72,0x5f746962,0x726f7473,0x00656761,0x00080004,0x455f4c47, + 0x735f5458,0x65646168,0x62385f72,0x735f7469,0x61726f74,0x00006567,0x000b0004,0x455f4c47, + 0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63, + 0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c, + 0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63, + 0x69645f65,0x74636572,0x00657669,0x00080004,0x4b5f4c47,0x635f5248,0x65706f6f,0x69746172, + 0x6d5f6576,0x69727461,0x00000078,0x00090004,0x4b5f4c47,0x6d5f5248,0x726f6d65,0x63735f79, + 0x5f65706f,0x616d6573,0x6369746e,0x00000073,0x00090004,0x4b5f4c47,0x735f5248,0x65646168, + 0x75735f72,0x6f726762,0x625f7075,0x63697361,0x00000000,0x00040005,0x00000004,0x6e69616d, + 0x00000000,0x00060005,0x0000000b,0x42363166,0x28737469,0x31363166,0x0000003b,0x00040005, + 0x0000000a,0x756c6176,0x00000065,0x00060005,0x00000011,0x66696873,0x656e5274,0x3b317528, + 0x003b3175,0x00040005,0x0000000f,0x756c6176,0x00000065,0x00040005,0x00000010,0x66696873, + 0x00000074,0x00080005,0x00000015,0x336d3465,0x65646f43,0x6d6f7246,0x42363146,0x28737469, + 0x003b3175,0x00050005,0x00000014,0x666c6168,0x73746942,0x00000000,0x00070005,0x0000001b, + 0x6c627570,0x28687369,0x753b3175,0x31663b31,0x003b3136,0x00030005,0x00000018,0x00776f72, + 0x00040005,0x00000019,0x756c6f63,0x00006e6d,0x00040005,0x0000001a,0x756c6176,0x00000065, + 0x00050005,0x00000023,0x746f7571,0x746e6569,0x00000000,0x00060005,0x00000027,0x616d6572, + 0x65646e69,0x73614d72,0x0000006b,0x00050005,0x0000002c,0x616d6572,0x65646e69,0x00000072, + 0x00040005,0x00000030,0x666c6168,0x00796177,0x00040005,0x0000004c,0x614e7369,0x0000006e, + 0x00050005,0x00000068,0x6167656e,0x65766974,0x00000000,0x00050005,0x0000006e,0x6f707865, + 0x746e656e,0x00000000,0x00050005,0x00000074,0x746e616d,0x61737369,0x00000000,0x00040005, + 0x0000007b,0x65646f63,0x00000000,0x00050005,0x00000082,0x6e676973,0x63696669,0x00646e61, + 0x00040005,0x0000008e,0x66696873,0x00000074,0x00040005,0x0000009a,0x61726170,0x0000006d, + 0x00040005,0x0000009c,0x61726170,0x0000006d,0x00050005,0x000000a1,0x78453465,0x656e6f70, + 0x0000746e,0x00050005,0x000000a4,0x614d3465,0x7369746e,0x00006173,0x00040005,0x000000a6, + 0x61726170,0x0000006d,0x00040005,0x000000a8,0x61726170,0x0000006d,0x00040005,0x000000cb, + 0x65646e69,0x00000078,0x00040005,0x000000cd,0x68737550,0x00000000,0x00050006,0x000000cd, + 0x00000000,0x73776f72,0x00000000,0x00040006,0x000000cd,0x00000001,0x0000004e,0x00060006, + 0x000000cd,0x00000002,0x75706e69,0x72745374,0x00656469,0x00070006,0x000000cd,0x00000003, + 0x7074756f,0x74537475,0x65646972,0x00000000,0x00030005,0x000000cf,0x00006370,0x00040005, + 0x000000d8,0x47414c46,0x00000053,0x00050005,0x000000e0,0x7074754f,0x6c467475,0x0074616f, + 0x00050006,0x000000e0,0x00000000,0x3374756f,0x00000032,0x00030005,0x000000e2,0x00000000, + 0x00050005,0x000000f0,0x7074754f,0x34457475,0x00000000,0x00050006,0x000000f0,0x00000000, + 0x3874756f,0x00000000,0x00030005,0x000000f2,0x00000000,0x00040005,0x000000f4,0x61726170, + 0x0000006d,0x00040005,0x000000f7,0x61726170,0x0000006d,0x00050005,0x000000fe,0x7074754f, + 0x61487475,0x0000666c,0x00050006,0x000000fe,0x00000000,0x3174756f,0x00000036,0x00030005, + 0x00000100,0x00000000,0x00040005,0x0000010b,0x61726170,0x0000006d,0x00040005,0x0000010e, + 0x61726170,0x0000006d,0x00040005,0x00000112,0x65726874,0x00006461,0x00080005,0x00000115, + 0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163,0x44496e6f,0x00000000,0x00040005,0x00000119, + 0x42776f72,0x00657361,0x00060005,0x0000011a,0x575f6c67,0x476b726f,0x70756f72,0x00004449, + 0x00030005,0x00000125,0x00000074,0x00060005,0x00000126,0x535f6c67,0x72676275,0x4970756f, + 0x00000044,0x00040005,0x0000012f,0x454c4954,0x00004e5f,0x00060005,0x00000130,0x454c4954, + 0x4c4f435f,0x534e4d55,0x00000000,0x00030005,0x00000133,0x00007274,0x00030005,0x00000137, + 0x00006374,0x00030005,0x0000013d,0x00000063,0x00030005,0x00000140,0x0000626b,0x00030005, + 0x00000147,0x0000004b,0x00030005,0x00000149,0x00005f73,0x00030005,0x00000153,0x00005f61, + 0x00040005,0x00000155,0x75706e49,0x00004174,0x00040006,0x00000155,0x00000000,0x00000061, + 0x00030005,0x00000157,0x00000000,0x00030005,0x00000175,0x00005f62,0x00040005,0x00000177, + 0x75706e49,0x00004274,0x00040006,0x00000177,0x00000000,0x00000062,0x00030005,0x00000179, + 0x00000000,0x00040005,0x00000199,0x656c6974,0x00000043,0x00060005,0x000001a4,0x4e5f6c67, + 0x75536d75,0x6f726762,0x00737075,0x00030005,0x000001a9,0x00000069,0x00030005,0x000001b3, + 0x00776f72,0x00040005,0x000001b8,0x756c6f63,0x00006e6d,0x00040005,0x000001cb,0x61726170, + 0x0000006d,0x00040005,0x000001cd,0x61726170,0x0000006d,0x00040005,0x000001cf,0x61726170, + 0x0000006d,0x00030047,0x000000cd,0x00000002,0x00050048,0x000000cd,0x00000000,0x00000023, + 0x00000000,0x00050048,0x000000cd,0x00000001,0x00000023,0x00000004,0x00050048,0x000000cd, + 0x00000002,0x00000023,0x00000008,0x00050048,0x000000cd,0x00000003,0x00000023,0x0000000c, + 0x00040047,0x000000d8,0x00000001,0x00000002,0x00040047,0x000000df,0x00000006,0x00000004, + 0x00030047,0x000000e0,0x00000002,0x00040048,0x000000e0,0x00000000,0x00000019,0x00050048, + 0x000000e0,0x00000000,0x00000023,0x00000000,0x00030047,0x000000e2,0x00000019,0x00040047, + 0x000000e2,0x00000021,0x00000007,0x00040047,0x000000e2,0x00000022,0x00000000,0x00040047, + 0x000000ef,0x00000006,0x00000001,0x00030047,0x000000f0,0x00000002,0x00040048,0x000000f0, + 0x00000000,0x00000019,0x00050048,0x000000f0,0x00000000,0x00000023,0x00000000,0x00030047, + 0x000000f2,0x00000019,0x00040047,0x000000f2,0x00000021,0x00000005,0x00040047,0x000000f2, + 0x00000022,0x00000000,0x00040047,0x000000fd,0x00000006,0x00000002,0x00030047,0x000000fe, + 0x00000002,0x00040048,0x000000fe,0x00000000,0x00000019,0x00050048,0x000000fe,0x00000000, + 0x00000023,0x00000000,0x00030047,0x00000100,0x00000019,0x00040047,0x00000100,0x00000021, + 0x00000002,0x00040047,0x00000100,0x00000022,0x00000000,0x00040047,0x00000115,0x0000000b, + 0x0000001b,0x00040047,0x0000011a,0x0000000b,0x0000001a,0x00040047,0x00000126,0x0000000b, + 0x00000028,0x00040047,0x0000012f,0x00000001,0x00000001,0x00040047,0x00000147,0x00000001, + 0x00000000,0x00040047,0x00000154,0x00000006,0x00000002,0x00030047,0x00000155,0x00000002, + 0x00040048,0x00000155,0x00000000,0x00000018,0x00050048,0x00000155,0x00000000,0x00000023, + 0x00000000,0x00030047,0x00000157,0x00000018,0x00040047,0x00000157,0x00000021,0x00000000, + 0x00040047,0x00000157,0x00000022,0x00000000,0x00040047,0x00000176,0x00000006,0x00000002, + 0x00030047,0x00000177,0x00000002,0x00040048,0x00000177,0x00000000,0x00000018,0x00050048, + 0x00000177,0x00000000,0x00000023,0x00000000,0x00030047,0x00000179,0x00000018,0x00040047, + 0x00000179,0x00000021,0x00000001,0x00040047,0x00000179,0x00000022,0x00000000,0x00040047, + 0x000001a4,0x0000000b,0x00000026,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002, + 0x00030016,0x00000006,0x00000010,0x00040020,0x00000007,0x00000007,0x00000006,0x00040015, + 0x00000008,0x00000020,0x00000000,0x00040021,0x00000009,0x00000008,0x00000007,0x00040020, + 0x0000000d,0x00000007,0x00000008,0x00050021,0x0000000e,0x00000008,0x0000000d,0x0000000d, + 0x00040021,0x00000013,0x00000008,0x0000000d,0x00060021,0x00000017,0x00000002,0x0000000d, + 0x0000000d,0x00000007,0x00040015,0x0000001e,0x00000010,0x00000000,0x0004002b,0x00000008, + 0x00000028,0x00000001,0x00020014,0x00000035,0x0004002b,0x00000008,0x00000043,0x00000000, + 0x00040020,0x0000004b,0x00000007,0x00000035,0x0004002b,0x00000008,0x0000004e,0x00007c00, + 0x0004002b,0x00000008,0x00000054,0x000003ff,0x0004002b,0x00000008,0x0000005d,0x00007fff, + 0x0004002b,0x00000008,0x00000063,0x00000008,0x0004002b,0x00000008,0x00000065,0x00000080, + 0x0004002b,0x00000008,0x0000006a,0x00008000,0x0004002b,0x00000008,0x00000070,0x0000000a, + 0x0004002b,0x00000008,0x00000072,0x0000001f,0x0004002b,0x00000008,0x0000007c,0x0000007e, + 0x0004002b,0x00000008,0x0000008a,0x00000400,0x0004002b,0x00000008,0x00000094,0x0000000f, + 0x0004002b,0x00000008,0x00000096,0x00000010,0x0004002b,0x00000008,0x000000a5,0x00000007, + 0x0004002b,0x00000008,0x000000b8,0x00000006,0x0004002b,0x00000008,0x000000c1,0x00000003, + 0x0006001e,0x000000cd,0x00000008,0x00000008,0x00000008,0x00000008,0x00040020,0x000000ce, + 0x00000009,0x000000cd,0x0004003b,0x000000ce,0x000000cf,0x00000009,0x00040015,0x000000d0, + 0x00000020,0x00000001,0x0004002b,0x000000d0,0x000000d1,0x00000003,0x00040020,0x000000d2, + 0x00000009,0x00000008,0x00040032,0x00000008,0x000000d8,0x00000000,0x0004002b,0x00000008, + 0x000000d9,0x00000100,0x00060034,0x00000008,0x000000da,0x000000c7,0x000000d8,0x000000d9, + 0x00060034,0x00000035,0x000000db,0x000000ab,0x000000da,0x00000043,0x00030016,0x000000de, + 0x00000020,0x0003001d,0x000000df,0x000000de,0x0003001e,0x000000e0,0x000000df,0x00040020, + 0x000000e1,0x0000000c,0x000000e0,0x0004003b,0x000000e1,0x000000e2,0x0000000c,0x0004002b, + 0x000000d0,0x000000e3,0x00000000,0x00040020,0x000000e7,0x0000000c,0x000000de,0x00060034, + 0x00000008,0x000000ea,0x000000c7,0x000000d8,0x00000096,0x00060034,0x00000035,0x000000eb, + 0x000000ab,0x000000ea,0x00000043,0x00040015,0x000000ee,0x00000008,0x00000000,0x0003001d, + 0x000000ef,0x000000ee,0x0003001e,0x000000f0,0x000000ef,0x00040020,0x000000f1,0x0000000c, + 0x000000f0,0x0004003b,0x000000f1,0x000000f2,0x0000000c,0x00040020,0x000000fa,0x0000000c, + 0x000000ee,0x0003001d,0x000000fd,0x00000006,0x0003001e,0x000000fe,0x000000fd,0x00040020, + 0x000000ff,0x0000000c,0x000000fe,0x0004003b,0x000000ff,0x00000100,0x0000000c,0x00040020, + 0x00000103,0x0000000c,0x00000006,0x0004002b,0x00000008,0x00000105,0x00000020,0x00060034, + 0x00000008,0x00000106,0x000000c7,0x000000d8,0x00000105,0x00060034,0x00000035,0x00000107, + 0x000000ab,0x00000106,0x00000043,0x00040017,0x00000113,0x00000008,0x00000003,0x00040020, + 0x00000114,0x00000001,0x00000113,0x0004003b,0x00000114,0x00000115,0x00000001,0x00040020, + 0x00000116,0x00000001,0x00000008,0x0004003b,0x00000114,0x0000011a,0x00000001,0x0004002b, + 0x00000008,0x0000011d,0x00000002,0x0004002b,0x00000008,0x00000120,0x0000ffff,0x0004002b, + 0x00000008,0x00000123,0x00000040,0x0004003b,0x00000116,0x00000126,0x00000001,0x0004002b, + 0x00000008,0x0000012e,0x00000004,0x00040032,0x00000008,0x0000012f,0x00000020,0x00060034, + 0x00000008,0x00000130,0x00000086,0x0000012f,0x00000096,0x00060034,0x00000008,0x00000131, + 0x00000084,0x0000012e,0x00000130,0x00071168,0x0000013b,0x00000006,0x000000c1,0x00000096, + 0x00000096,0x0000011d,0x00040020,0x0000013c,0x00000007,0x0000013b,0x0004002b,0x00000006, + 0x0000013e,0x00000000,0x0004002c,0x0000013b,0x0000013f,0x0000013e,0x00040032,0x00000008, + 0x00000147,0x00000010,0x00071168,0x00000151,0x00000006,0x000000c1,0x00000096,0x00000096, + 0x00000043,0x00040020,0x00000152,0x00000007,0x00000151,0x0003001d,0x00000154,0x00000006, + 0x0003001e,0x00000155,0x00000154,0x00040020,0x00000156,0x0000000c,0x00000155,0x0004003b, + 0x00000156,0x00000157,0x0000000c,0x0004002b,0x000000d0,0x0000015b,0x00000002,0x00071168, + 0x00000173,0x00000006,0x000000c1,0x00000096,0x00000096,0x00000028,0x00040020,0x00000174, + 0x00000007,0x00000173,0x0003001d,0x00000176,0x00000006,0x0003001e,0x00000177,0x00000176, + 0x00040020,0x00000178,0x0000000c,0x00000177,0x0004003b,0x00000178,0x00000179,0x0000000c, + 0x00060034,0x00000008,0x0000017f,0x00000084,0x00000096,0x0000012f,0x00060034,0x00000008, + 0x00000188,0x00000084,0x00000096,0x0000012f,0x0004002b,0x000000d0,0x00000191,0x00000001, + 0x00060034,0x00000008,0x00000196,0x00000084,0x00000123,0x0000012f,0x0004001c,0x00000197, + 0x00000006,0x00000196,0x00040020,0x00000198,0x00000004,0x00000197,0x0004003b,0x00000198, + 0x00000199,0x00000004,0x00040020,0x0000019e,0x00000004,0x00000006,0x0004003b,0x00000116, + 0x000001a4,0x00000001,0x0004002b,0x00000008,0x000001a8,0x00000108,0x00060034,0x00000008, + 0x000001b1,0x00000084,0x00000123,0x0000012f,0x0006002c,0x00000113,0x000001d5,0x00000065, + 0x00000028,0x00000028,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8, + 0x00000005,0x0004003b,0x0000000d,0x00000112,0x00000007,0x0004003b,0x0000000d,0x00000119, + 0x00000007,0x0004003b,0x0000000d,0x00000125,0x00000007,0x0004003b,0x0000000d,0x00000133, + 0x00000007,0x0004003b,0x0000000d,0x00000137,0x00000007,0x0004003b,0x0000013c,0x0000013d, + 0x00000007,0x0004003b,0x0000000d,0x00000140,0x00000007,0x0004003b,0x0000000d,0x00000149, + 0x00000007,0x0004003b,0x00000152,0x00000153,0x00000007,0x0004003b,0x00000174,0x00000175, + 0x00000007,0x0004003b,0x0000000d,0x000001a9,0x00000007,0x0004003b,0x0000000d,0x000001b3, + 0x00000007,0x0004003b,0x0000000d,0x000001b8,0x00000007,0x0004003b,0x0000000d,0x000001cb, + 0x00000007,0x0004003b,0x0000000d,0x000001cd,0x00000007,0x0004003b,0x00000007,0x000001cf, + 0x00000007,0x00050041,0x00000116,0x00000117,0x00000115,0x00000043,0x0004003d,0x00000008, + 0x00000118,0x00000117,0x0003003e,0x00000112,0x00000118,0x00050041,0x00000116,0x0000011b, + 0x0000011a,0x00000028,0x0004003d,0x00000008,0x0000011c,0x0000011b,0x00050041,0x00000116, + 0x0000011e,0x0000011a,0x0000011d,0x0004003d,0x00000008,0x0000011f,0x0000011e,0x00050084, + 0x00000008,0x00000121,0x0000011f,0x00000120,0x00050080,0x00000008,0x00000122,0x0000011c, + 0x00000121,0x00050084,0x00000008,0x00000124,0x00000122,0x00000123,0x0003003e,0x00000119, + 0x00000124,0x0004003d,0x00000008,0x00000127,0x00000126,0x0003003e,0x00000125,0x00000127, + 0x000200f9,0x00000128,0x000200f8,0x00000128,0x000400f6,0x0000012a,0x0000012b,0x00000000, + 0x000200f9,0x0000012c,0x000200f8,0x0000012c,0x0004003d,0x00000008,0x0000012d,0x00000125, + 0x000500b0,0x00000035,0x00000132,0x0000012d,0x00000131,0x000400fa,0x00000132,0x00000129, + 0x0000012a,0x000200f8,0x00000129,0x0004003d,0x00000008,0x00000134,0x00000125,0x00050086, + 0x00000008,0x00000135,0x00000134,0x00000130,0x00050084,0x00000008,0x00000136,0x00000135, + 0x00000096,0x0003003e,0x00000133,0x00000136,0x0004003d,0x00000008,0x00000138,0x00000125, + 0x00050089,0x00000008,0x00000139,0x00000138,0x00000130,0x00050084,0x00000008,0x0000013a, + 0x00000139,0x00000096,0x0003003e,0x00000137,0x0000013a,0x0003003e,0x0000013d,0x0000013f, + 0x0003003e,0x00000140,0x00000043,0x000200f9,0x00000141,0x000200f8,0x00000141,0x000400f6, + 0x00000143,0x00000144,0x00000000,0x000200f9,0x00000145,0x000200f8,0x00000145,0x0004003d, + 0x00000008,0x00000146,0x00000140,0x000500b0,0x00000035,0x00000148,0x00000146,0x00000147, + 0x000400fa,0x00000148,0x00000142,0x00000143,0x000200f8,0x00000142,0x0003003e,0x00000149, + 0x00000043,0x000200f9,0x0000014a,0x000200f8,0x0000014a,0x000400f6,0x0000014c,0x0000014d, + 0x00000001,0x000200f9,0x0000014e,0x000200f8,0x0000014e,0x0004003d,0x00000008,0x0000014f, + 0x00000149,0x000500b0,0x00000035,0x00000150,0x0000014f,0x00000028,0x000400fa,0x00000150, + 0x0000014b,0x0000014c,0x000200f8,0x0000014b,0x0004003d,0x00000008,0x00000158,0x00000119, + 0x0004003d,0x00000008,0x00000159,0x00000133,0x00050080,0x00000008,0x0000015a,0x00000158, + 0x00000159,0x00050041,0x000000d2,0x0000015c,0x000000cf,0x0000015b,0x0004003d,0x00000008, + 0x0000015d,0x0000015c,0x00050084,0x00000008,0x0000015e,0x0000015a,0x0000015d,0x0004003d, + 0x00000008,0x0000015f,0x00000140,0x00050080,0x00000008,0x00000160,0x0000015e,0x0000015f, + 0x0004003d,0x00000008,0x00000161,0x00000149,0x00050084,0x00000008,0x00000162,0x00000161, + 0x00000096,0x00050080,0x00000008,0x00000163,0x00000160,0x00000162,0x00060041,0x00000103, + 0x00000164,0x00000157,0x000000e3,0x00000163,0x0004003d,0x00000008,0x00000165,0x00000119, + 0x0004003d,0x00000008,0x00000166,0x00000133,0x00050080,0x00000008,0x00000167,0x00000165, + 0x00000166,0x00050041,0x000000d2,0x00000168,0x000000cf,0x0000015b,0x0004003d,0x00000008, + 0x00000169,0x00000168,0x00050084,0x00000008,0x0000016a,0x00000167,0x00000169,0x0004003d, + 0x00000008,0x0000016b,0x00000140,0x00050080,0x00000008,0x0000016c,0x0000016a,0x0000016b, + 0x0004003d,0x00000008,0x0000016d,0x00000149,0x00050084,0x00000008,0x0000016e,0x0000016d, + 0x00000096,0x00050080,0x00000008,0x0000016f,0x0000016c,0x0000016e,0x00050041,0x000000d2, + 0x00000170,0x000000cf,0x0000015b,0x0004003d,0x00000008,0x00000171,0x00000170,0x00071169, + 0x00000151,0x00000172,0x00000164,0x000000e3,0x00000171,0x00000000,0x0003003e,0x00000153, + 0x00000172,0x0004003d,0x00000008,0x0000017a,0x00000140,0x00050084,0x00000008,0x0000017b, + 0x0000017a,0x0000012f,0x0004003d,0x00000008,0x0000017c,0x00000137,0x00050080,0x00000008, + 0x0000017d,0x0000017b,0x0000017c,0x0004003d,0x00000008,0x0000017e,0x00000149,0x00050084, + 0x00000008,0x00000180,0x0000017e,0x0000017f,0x00050080,0x00000008,0x00000181,0x0000017d, + 0x00000180,0x00060041,0x00000103,0x00000182,0x00000179,0x000000e3,0x00000181,0x0004003d, + 0x00000008,0x00000183,0x00000140,0x00050084,0x00000008,0x00000184,0x00000183,0x0000012f, + 0x0004003d,0x00000008,0x00000185,0x00000137,0x00050080,0x00000008,0x00000186,0x00000184, + 0x00000185,0x0004003d,0x00000008,0x00000187,0x00000149,0x00050084,0x00000008,0x00000189, + 0x00000187,0x00000188,0x00050080,0x00000008,0x0000018a,0x00000186,0x00000189,0x00071169, + 0x00000173,0x0000018b,0x00000182,0x000000e3,0x0000012f,0x00000000,0x0003003e,0x00000175, + 0x0000018b,0x0004003d,0x00000151,0x0000018c,0x00000153,0x0004003d,0x00000173,0x0000018d, + 0x00000175,0x0004003d,0x0000013b,0x0000018e,0x0000013d,0x0006116b,0x0000013b,0x0000018f, + 0x0000018c,0x0000018d,0x0000018e,0x0003003e,0x0000013d,0x0000018f,0x000200f9,0x0000014d, + 0x000200f8,0x0000014d,0x0004003d,0x00000008,0x00000190,0x00000149,0x00050080,0x00000008, + 0x00000192,0x00000190,0x00000191,0x0003003e,0x00000149,0x00000192,0x000200f9,0x0000014a, + 0x000200f8,0x0000014c,0x000200f9,0x00000144,0x000200f8,0x00000144,0x0004003d,0x00000008, + 0x00000193,0x00000140,0x00050080,0x00000008,0x00000194,0x00000193,0x00000096,0x0003003e, + 0x00000140,0x00000194,0x000200f9,0x00000141,0x000200f8,0x00000143,0x0004003d,0x0000013b, + 0x00000195,0x0000013d,0x0004003d,0x00000008,0x0000019a,0x00000133,0x00050084,0x00000008, + 0x0000019b,0x0000019a,0x0000012f,0x0004003d,0x00000008,0x0000019c,0x00000137,0x00050080, + 0x00000008,0x0000019d,0x0000019b,0x0000019c,0x00050041,0x0000019e,0x0000019f,0x00000199, + 0x0000019d,0x0004003d,0x00000008,0x000001a0,0x00000133,0x00050084,0x00000008,0x000001a1, + 0x000001a0,0x0000012f,0x0004003d,0x00000008,0x000001a2,0x00000137,0x00050080,0x00000008, + 0x000001a3,0x000001a1,0x000001a2,0x0007116a,0x0000019f,0x00000195,0x000000e3,0x0000012f, + 0x00000028,0x0000011d,0x000200f9,0x0000012b,0x000200f8,0x0000012b,0x0004003d,0x00000008, + 0x000001a5,0x000001a4,0x0004003d,0x00000008,0x000001a6,0x00000125,0x00050080,0x00000008, + 0x000001a7,0x000001a6,0x000001a5,0x0003003e,0x00000125,0x000001a7,0x000200f9,0x00000128, + 0x000200f8,0x0000012a,0x000400e0,0x0000011d,0x0000011d,0x000001a8,0x0004003d,0x00000008, + 0x000001aa,0x00000112,0x0003003e,0x000001a9,0x000001aa,0x000200f9,0x000001ab,0x000200f8, + 0x000001ab,0x000400f6,0x000001ad,0x000001ae,0x00000000,0x000200f9,0x000001af,0x000200f8, + 0x000001af,0x0004003d,0x00000008,0x000001b0,0x000001a9,0x000500b0,0x00000035,0x000001b2, + 0x000001b0,0x000001b1,0x000400fa,0x000001b2,0x000001ac,0x000001ad,0x000200f8,0x000001ac, + 0x0004003d,0x00000008,0x000001b4,0x00000119,0x0004003d,0x00000008,0x000001b5,0x000001a9, + 0x00050086,0x00000008,0x000001b6,0x000001b5,0x0000012f,0x00050080,0x00000008,0x000001b7, + 0x000001b4,0x000001b6,0x0003003e,0x000001b3,0x000001b7,0x0004003d,0x00000008,0x000001b9, + 0x000001a9,0x00050089,0x00000008,0x000001ba,0x000001b9,0x0000012f,0x0003003e,0x000001b8, + 0x000001ba,0x0004003d,0x00000008,0x000001bb,0x000001b3,0x00050041,0x000000d2,0x000001bc, + 0x000000cf,0x000000e3,0x0004003d,0x00000008,0x000001bd,0x000001bc,0x000500ae,0x00000035, + 0x000001be,0x000001bb,0x000001bd,0x000400a8,0x00000035,0x000001bf,0x000001be,0x000300f7, + 0x000001c1,0x00000000,0x000400fa,0x000001bf,0x000001c0,0x000001c1,0x000200f8,0x000001c0, + 0x0004003d,0x00000008,0x000001c2,0x000001b8,0x00050041,0x000000d2,0x000001c3,0x000000cf, + 0x00000191,0x0004003d,0x00000008,0x000001c4,0x000001c3,0x000500ae,0x00000035,0x000001c5, + 0x000001c2,0x000001c4,0x000200f9,0x000001c1,0x000200f8,0x000001c1,0x000700f5,0x00000035, + 0x000001c6,0x000001be,0x000001ac,0x000001c5,0x000001c0,0x000300f7,0x000001c8,0x00000000, + 0x000400fa,0x000001c6,0x000001c7,0x000001c8,0x000200f8,0x000001c7,0x000200f9,0x000001ae, + 0x000200f8,0x000001c8,0x0004003d,0x00000008,0x000001ca,0x000001a9,0x0004003d,0x00000008, + 0x000001cc,0x000001b3,0x0003003e,0x000001cb,0x000001cc,0x0004003d,0x00000008,0x000001ce, + 0x000001b8,0x0003003e,0x000001cd,0x000001ce,0x00050041,0x0000019e,0x000001d0,0x00000199, + 0x000001ca,0x0006003d,0x00000006,0x000001d1,0x000001d0,0x00000030,0x0000011d,0x0003003e, + 0x000001cf,0x000001d1,0x00070039,0x00000002,0x000001d2,0x0000001b,0x000001cb,0x000001cd, + 0x000001cf,0x000200f9,0x000001ae,0x000200f8,0x000001ae,0x0004003d,0x00000008,0x000001d3, + 0x000001a9,0x00050080,0x00000008,0x000001d4,0x000001d3,0x00000065,0x0003003e,0x000001a9, + 0x000001d4,0x000200f9,0x000001ab,0x000200f8,0x000001ad,0x000100fd,0x00010038,0x00050036, + 0x00000008,0x0000000b,0x00000000,0x00000009,0x00030037,0x00000007,0x0000000a,0x000200f8, + 0x0000000c,0x0004003d,0x00000006,0x0000001d,0x0000000a,0x0004007c,0x0000001e,0x0000001f, + 0x0000001d,0x00040071,0x00000008,0x00000020,0x0000001f,0x000200fe,0x00000020,0x00010038, + 0x00050036,0x00000008,0x00000011,0x00000000,0x0000000e,0x00030037,0x0000000d,0x0000000f, + 0x00030037,0x0000000d,0x00000010,0x000200f8,0x00000012,0x0004003b,0x0000000d,0x00000023, + 0x00000007,0x0004003b,0x0000000d,0x00000027,0x00000007,0x0004003b,0x0000000d,0x0000002c, + 0x00000007,0x0004003b,0x0000000d,0x00000030,0x00000007,0x0004003d,0x00000008,0x00000024, + 0x0000000f,0x0004003d,0x00000008,0x00000025,0x00000010,0x000500c2,0x00000008,0x00000026, + 0x00000024,0x00000025,0x0003003e,0x00000023,0x00000026,0x0004003d,0x00000008,0x00000029, + 0x00000010,0x000500c4,0x00000008,0x0000002a,0x00000028,0x00000029,0x00050082,0x00000008, + 0x0000002b,0x0000002a,0x00000028,0x0003003e,0x00000027,0x0000002b,0x0004003d,0x00000008, + 0x0000002d,0x0000000f,0x0004003d,0x00000008,0x0000002e,0x00000027,0x000500c7,0x00000008, + 0x0000002f,0x0000002d,0x0000002e,0x0003003e,0x0000002c,0x0000002f,0x0004003d,0x00000008, + 0x00000031,0x00000010,0x00050082,0x00000008,0x00000032,0x00000031,0x00000028,0x000500c4, + 0x00000008,0x00000033,0x00000028,0x00000032,0x0003003e,0x00000030,0x00000033,0x0004003d, + 0x00000008,0x00000034,0x00000023,0x0004003d,0x00000008,0x00000036,0x0000002c,0x0004003d, + 0x00000008,0x00000037,0x00000030,0x000500ac,0x00000035,0x00000038,0x00000036,0x00000037, + 0x000400a8,0x00000035,0x00000039,0x00000038,0x000300f7,0x0000003b,0x00000000,0x000400fa, + 0x00000039,0x0000003a,0x0000003b,0x000200f8,0x0000003a,0x0004003d,0x00000008,0x0000003c, + 0x0000002c,0x0004003d,0x00000008,0x0000003d,0x00000030,0x000500aa,0x00000035,0x0000003e, + 0x0000003c,0x0000003d,0x000300f7,0x00000040,0x00000000,0x000400fa,0x0000003e,0x0000003f, + 0x00000040,0x000200f8,0x0000003f,0x0004003d,0x00000008,0x00000041,0x00000023,0x000500c7, + 0x00000008,0x00000042,0x00000041,0x00000028,0x000500ab,0x00000035,0x00000044,0x00000042, + 0x00000043,0x000200f9,0x00000040,0x000200f8,0x00000040,0x000700f5,0x00000035,0x00000045, + 0x0000003e,0x0000003a,0x00000044,0x0000003f,0x000200f9,0x0000003b,0x000200f8,0x0000003b, + 0x000700f5,0x00000035,0x00000046,0x00000038,0x00000012,0x00000045,0x00000040,0x000600a9, + 0x00000008,0x00000047,0x00000046,0x00000028,0x00000043,0x00050080,0x00000008,0x00000048, + 0x00000034,0x00000047,0x000200fe,0x00000048,0x00010038,0x00050036,0x00000008,0x00000015, + 0x00000000,0x00000013,0x00030037,0x0000000d,0x00000014,0x000200f8,0x00000016,0x0004003b, + 0x0000004b,0x0000004c,0x00000007,0x0004003b,0x0000000d,0x00000068,0x00000007,0x0004003b, + 0x0000000d,0x0000006e,0x00000007,0x0004003b,0x0000000d,0x00000074,0x00000007,0x0004003b, + 0x0000000d,0x0000007b,0x00000007,0x0004003b,0x0000000d,0x00000082,0x00000007,0x0004003b, + 0x0000000d,0x00000085,0x00000007,0x0004003b,0x0000000d,0x0000008e,0x00000007,0x0004003b, + 0x0000000d,0x00000091,0x00000007,0x0004003b,0x0000000d,0x0000009a,0x00000007,0x0004003b, + 0x0000000d,0x0000009c,0x00000007,0x0004003b,0x0000000d,0x000000a1,0x00000007,0x0004003b, + 0x0000000d,0x000000a4,0x00000007,0x0004003b,0x0000000d,0x000000a6,0x00000007,0x0004003b, + 0x0000000d,0x000000a8,0x00000007,0x0004003b,0x0000000d,0x000000bc,0x00000007,0x0004003d, + 0x00000008,0x0000004d,0x00000014,0x000500c7,0x00000008,0x0000004f,0x0000004d,0x0000004e, + 0x000500aa,0x00000035,0x00000050,0x0000004f,0x0000004e,0x000300f7,0x00000052,0x00000000, + 0x000400fa,0x00000050,0x00000051,0x00000052,0x000200f8,0x00000051,0x0004003d,0x00000008, + 0x00000053,0x00000014,0x000500c7,0x00000008,0x00000055,0x00000053,0x00000054,0x000500ab, + 0x00000035,0x00000056,0x00000055,0x00000043,0x000200f9,0x00000052,0x000200f8,0x00000052, + 0x000700f5,0x00000035,0x00000057,0x00000050,0x00000016,0x00000056,0x00000051,0x0003003e, + 0x0000004c,0x00000057,0x0004003d,0x00000035,0x00000058,0x0000004c,0x000300f7,0x0000005a, + 0x00000000,0x000400fa,0x00000058,0x00000059,0x0000005a,0x000200f8,0x00000059,0x000200fe, + 0x00000043,0x000200f8,0x0000005a,0x0004003d,0x00000008,0x0000005c,0x00000014,0x000500c7, + 0x00000008,0x0000005e,0x0000005c,0x0000005d,0x000500aa,0x00000035,0x0000005f,0x0000005e, + 0x00000043,0x000300f7,0x00000061,0x00000000,0x000400fa,0x0000005f,0x00000060,0x00000061, + 0x000200f8,0x00000060,0x0004003d,0x00000008,0x00000062,0x00000014,0x000500c2,0x00000008, + 0x00000064,0x00000062,0x00000063,0x000500c7,0x00000008,0x00000066,0x00000064,0x00000065, + 0x000200fe,0x00000066,0x000200f8,0x00000061,0x0004003d,0x00000008,0x00000069,0x00000014, + 0x000500c7,0x00000008,0x0000006b,0x00000069,0x0000006a,0x000500ab,0x00000035,0x0000006c, + 0x0000006b,0x00000043,0x000600a9,0x00000008,0x0000006d,0x0000006c,0x00000065,0x00000043, + 0x0003003e,0x00000068,0x0000006d,0x0004003d,0x00000008,0x0000006f,0x00000014,0x000500c2, + 0x00000008,0x00000071,0x0000006f,0x00000070,0x000500c7,0x00000008,0x00000073,0x00000071, + 0x00000072,0x0003003e,0x0000006e,0x00000073,0x0004003d,0x00000008,0x00000075,0x00000014, + 0x000500c7,0x00000008,0x00000076,0x00000075,0x00000054,0x0003003e,0x00000074,0x00000076, + 0x0004003d,0x00000008,0x00000077,0x0000006e,0x000500aa,0x00000035,0x00000078,0x00000077, + 0x00000072,0x000300f7,0x0000007a,0x00000000,0x000400fa,0x00000078,0x00000079,0x0000007d, + 0x000200f8,0x00000079,0x0003003e,0x0000007b,0x0000007c,0x000200f9,0x0000007a,0x000200f8, + 0x0000007d,0x0004003d,0x00000008,0x0000007e,0x0000006e,0x000500b2,0x00000035,0x0000007f, + 0x0000007e,0x00000063,0x000300f7,0x00000081,0x00000000,0x000400fa,0x0000007f,0x00000080, + 0x000000a0,0x000200f8,0x00000080,0x0004003d,0x00000008,0x00000083,0x0000006e,0x000500aa, + 0x00000035,0x00000084,0x00000083,0x00000043,0x000300f7,0x00000087,0x00000000,0x000400fa, + 0x00000084,0x00000086,0x00000089,0x000200f8,0x00000086,0x0004003d,0x00000008,0x00000088, + 0x00000074,0x0003003e,0x00000085,0x00000088,0x000200f9,0x00000087,0x000200f8,0x00000089, + 0x0004003d,0x00000008,0x0000008b,0x00000074,0x00050080,0x00000008,0x0000008c,0x0000008a, + 0x0000008b,0x0003003e,0x00000085,0x0000008c,0x000200f9,0x00000087,0x000200f8,0x00000087, + 0x0004003d,0x00000008,0x0000008d,0x00000085,0x0003003e,0x00000082,0x0000008d,0x0004003d, + 0x00000008,0x0000008f,0x0000006e,0x000500aa,0x00000035,0x00000090,0x0000008f,0x00000043, + 0x000300f7,0x00000093,0x00000000,0x000400fa,0x00000090,0x00000092,0x00000095,0x000200f8, + 0x00000092,0x0003003e,0x00000091,0x00000094,0x000200f9,0x00000093,0x000200f8,0x00000095, + 0x0004003d,0x00000008,0x00000097,0x0000006e,0x00050082,0x00000008,0x00000098,0x00000096, + 0x00000097,0x0003003e,0x00000091,0x00000098,0x000200f9,0x00000093,0x000200f8,0x00000093, + 0x0004003d,0x00000008,0x00000099,0x00000091,0x0003003e,0x0000008e,0x00000099,0x0004003d, + 0x00000008,0x0000009b,0x00000082,0x0003003e,0x0000009a,0x0000009b,0x0004003d,0x00000008, + 0x0000009d,0x0000008e,0x0003003e,0x0000009c,0x0000009d,0x00060039,0x00000008,0x0000009e, + 0x00000011,0x0000009a,0x0000009c,0x0007000c,0x00000008,0x0000009f,0x00000001,0x00000026, + 0x0000009e,0x00000063,0x0003003e,0x0000007b,0x0000009f,0x000200f9,0x00000081,0x000200f8, + 0x000000a0,0x0004003d,0x00000008,0x000000a2,0x0000006e,0x00050082,0x00000008,0x000000a3, + 0x000000a2,0x00000063,0x0003003e,0x000000a1,0x000000a3,0x0004003d,0x00000008,0x000000a7, + 0x00000074,0x0003003e,0x000000a6,0x000000a7,0x0003003e,0x000000a8,0x000000a5,0x00060039, + 0x00000008,0x000000a9,0x00000011,0x000000a6,0x000000a8,0x0003003e,0x000000a4,0x000000a9, + 0x0004003d,0x00000008,0x000000aa,0x000000a4,0x000500aa,0x00000035,0x000000ab,0x000000aa, + 0x00000063,0x000300f7,0x000000ad,0x00000000,0x000400fa,0x000000ab,0x000000ac,0x000000ad, + 0x000200f8,0x000000ac,0x0003003e,0x000000a4,0x00000043,0x0004003d,0x00000008,0x000000ae, + 0x000000a1,0x00050080,0x00000008,0x000000af,0x000000ae,0x00000028,0x0003003e,0x000000a1, + 0x000000af,0x000200f9,0x000000ad,0x000200f8,0x000000ad,0x0004003d,0x00000008,0x000000b0, + 0x000000a1,0x000500ac,0x00000035,0x000000b1,0x000000b0,0x00000094,0x000400a8,0x00000035, + 0x000000b2,0x000000b1,0x000300f7,0x000000b4,0x00000000,0x000400fa,0x000000b2,0x000000b3, + 0x000000b4,0x000200f8,0x000000b3,0x0004003d,0x00000008,0x000000b5,0x000000a1,0x000500aa, + 0x00000035,0x000000b6,0x000000b5,0x00000094,0x0004003d,0x00000008,0x000000b7,0x000000a4, + 0x000500ac,0x00000035,0x000000b9,0x000000b7,0x000000b8,0x000500a7,0x00000035,0x000000ba, + 0x000000b6,0x000000b9,0x000200f9,0x000000b4,0x000200f8,0x000000b4,0x000700f5,0x00000035, + 0x000000bb,0x000000b1,0x000000ad,0x000000ba,0x000000b3,0x000300f7,0x000000be,0x00000000, + 0x000400fa,0x000000bb,0x000000bd,0x000000bf,0x000200f8,0x000000bd,0x0003003e,0x000000bc, + 0x0000007c,0x000200f9,0x000000be,0x000200f8,0x000000bf,0x0004003d,0x00000008,0x000000c0, + 0x000000a1,0x000500c4,0x00000008,0x000000c2,0x000000c0,0x000000c1,0x0004003d,0x00000008, + 0x000000c3,0x000000a4,0x000500c5,0x00000008,0x000000c4,0x000000c2,0x000000c3,0x0003003e, + 0x000000bc,0x000000c4,0x000200f9,0x000000be,0x000200f8,0x000000be,0x0004003d,0x00000008, + 0x000000c5,0x000000bc,0x0003003e,0x0000007b,0x000000c5,0x000200f9,0x00000081,0x000200f8, + 0x00000081,0x000200f9,0x0000007a,0x000200f8,0x0000007a,0x0004003d,0x00000008,0x000000c6, + 0x00000068,0x0004003d,0x00000008,0x000000c7,0x0000007b,0x000500c5,0x00000008,0x000000c8, + 0x000000c6,0x000000c7,0x000200fe,0x000000c8,0x00010038,0x00050036,0x00000002,0x0000001b, + 0x00000000,0x00000017,0x00030037,0x0000000d,0x00000018,0x00030037,0x0000000d,0x00000019, + 0x00030037,0x00000007,0x0000001a,0x000200f8,0x0000001c,0x0004003b,0x0000000d,0x000000cb, + 0x00000007,0x0004003b,0x00000007,0x000000f4,0x00000007,0x0004003b,0x0000000d,0x000000f7, + 0x00000007,0x0004003b,0x00000007,0x0000010b,0x00000007,0x0004003b,0x0000000d,0x0000010e, + 0x00000007,0x0004003d,0x00000008,0x000000cc,0x00000018,0x00050041,0x000000d2,0x000000d3, + 0x000000cf,0x000000d1,0x0004003d,0x00000008,0x000000d4,0x000000d3,0x00050084,0x00000008, + 0x000000d5,0x000000cc,0x000000d4,0x0004003d,0x00000008,0x000000d6,0x00000019,0x00050080, + 0x00000008,0x000000d7,0x000000d5,0x000000d6,0x0003003e,0x000000cb,0x000000d7,0x000300f7, + 0x000000dd,0x00000000,0x000400fa,0x000000db,0x000000dc,0x000000e9,0x000200f8,0x000000dc, + 0x0004003d,0x00000008,0x000000e4,0x000000cb,0x0004003d,0x00000006,0x000000e5,0x0000001a, + 0x00040073,0x000000de,0x000000e6,0x000000e5,0x00060041,0x000000e7,0x000000e8,0x000000e2, + 0x000000e3,0x000000e4,0x0003003e,0x000000e8,0x000000e6,0x000200f9,0x000000dd,0x000200f8, + 0x000000e9,0x000300f7,0x000000ed,0x00000000,0x000400fa,0x000000eb,0x000000ec,0x000000fc, + 0x000200f8,0x000000ec,0x0004003d,0x00000008,0x000000f3,0x000000cb,0x0004003d,0x00000006, + 0x000000f5,0x0000001a,0x0003003e,0x000000f4,0x000000f5,0x00050039,0x00000008,0x000000f6, + 0x0000000b,0x000000f4,0x0003003e,0x000000f7,0x000000f6,0x00050039,0x00000008,0x000000f8, + 0x00000015,0x000000f7,0x00040071,0x000000ee,0x000000f9,0x000000f8,0x00060041,0x000000fa, + 0x000000fb,0x000000f2,0x000000e3,0x000000f3,0x0003003e,0x000000fb,0x000000f9,0x000200f9, + 0x000000ed,0x000200f8,0x000000fc,0x0004003d,0x00000008,0x00000101,0x000000cb,0x0004003d, + 0x00000006,0x00000102,0x0000001a,0x00060041,0x00000103,0x00000104,0x00000100,0x000000e3, + 0x00000101,0x0003003e,0x00000104,0x00000102,0x000200f9,0x000000ed,0x000200f8,0x000000ed, + 0x000200f9,0x000000dd,0x000200f8,0x000000dd,0x000300f7,0x00000109,0x00000000,0x000400fa, + 0x00000107,0x00000108,0x00000109,0x000200f8,0x00000108,0x0004003d,0x00000008,0x0000010a, + 0x000000cb,0x0004003d,0x00000006,0x0000010c,0x0000001a,0x0003003e,0x0000010b,0x0000010c, + 0x00050039,0x00000008,0x0000010d,0x0000000b,0x0000010b,0x0003003e,0x0000010e,0x0000010d, + 0x00050039,0x00000008,0x0000010f,0x00000015,0x0000010e,0x00040071,0x000000ee,0x00000110, + 0x0000010f,0x00060041,0x000000fa,0x00000111,0x000000f2,0x000000e3,0x0000010a,0x0003003e, + 0x00000111,0x00000110,0x000200f9,0x00000109,0x000200f8,0x00000109,0x000100fd,0x00010038, +}; +inline constexpr uint32_t k_e4m3_k32_f16__window_attend[] = { + 0x07230203,0x00010600,0x0008000b,0x000004e0,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x00000027,0x00020011,0x0000003d,0x00020011, + 0x00001074,0x00020011,0x00001075,0x00020011,0x00001151,0x00020011,0x00001160,0x00020011, + 0x000014e1,0x00020011,0x00001786,0x0005000a,0x5f565053,0x5f545845,0x616f6c66,0x00003874, + 0x0008000a,0x5f565053,0x5f52484b,0x706f6f63,0x74617265,0x5f657669,0x7274616d,0x00007869, + 0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000, + 0x00000003,0x0013000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x0000020e,0x000002a1, + 0x000002a6,0x000002b3,0x00000314,0x00000329,0x00000374,0x0000037a,0x00000387,0x0000039e, + 0x000003e5,0x00000422,0x0000047c,0x000004d2,0x00060010,0x00000004,0x00000011,0x00000080, + 0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc,0x00090004,0x455f4c47,0x635f5458, + 0x72746e6f,0x665f6c6f,0x5f776f6c,0x72747461,0x74756269,0x00007365,0x00060004,0x455f4c47, + 0x665f5458,0x74616f6c,0x6d34655f,0x00000033,0x00080004,0x455f4c47,0x735f5458,0x65646168, + 0x36315f72,0x5f746962,0x726f7473,0x00656761,0x00080004,0x455f4c47,0x735f5458,0x65646168, + 0x62385f72,0x735f7469,0x61726f74,0x00006567,0x000b0004,0x455f4c47,0x735f5458,0x65646168, + 0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004, + 0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365, + 0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572, + 0x00657669,0x00080004,0x4b5f4c47,0x635f5248,0x65706f6f,0x69746172,0x6d5f6576,0x69727461, + 0x00000078,0x00090004,0x4b5f4c47,0x6d5f5248,0x726f6d65,0x63735f79,0x5f65706f,0x616d6573, + 0x6369746e,0x00000073,0x00090004,0x4b5f4c47,0x735f5248,0x65646168,0x75735f72,0x6f726762, + 0x625f7075,0x63697361,0x00000000,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005, + 0x0000000a,0x6e756f72,0x36314664,0x3b316628,0x00000000,0x00040005,0x00000009,0x756c6176, + 0x00000065,0x00060005,0x00000011,0x42363166,0x28737469,0x31363166,0x0000003b,0x00040005, + 0x00000010,0x756c6176,0x00000065,0x00060005,0x00000016,0x46363166,0x426d6f72,0x28737469, + 0x003b3175,0x00040005,0x00000015,0x73746962,0x00000000,0x00060005,0x0000001b,0x66696873, + 0x656e5274,0x3b317528,0x003b3175,0x00040005,0x00000019,0x756c6176,0x00000065,0x00040005, + 0x0000001a,0x66696873,0x00000074,0x00080005,0x0000001f,0x336d3465,0x65646f43,0x6d6f7246, + 0x42363146,0x28737469,0x003b3175,0x00050005,0x0000001e,0x666c6168,0x73746942,0x00000000, + 0x00060005,0x00000024,0x7246706f,0x6f436d6f,0x75286564,0x00003b31,0x00040005,0x00000023, + 0x65646f63,0x00000000,0x00080005,0x00000028,0x666c6168,0x7064694d,0x746e696f,0x766f6241, + 0x31662865,0x003b3136,0x00030005,0x00000027,0x00000068,0x00080005,0x0000002b,0x666c6168, + 0x7064694d,0x746e696f,0x6f6c6542,0x31662877,0x003b3136,0x00030005,0x0000002a,0x00000068, + 0x00060005,0x0000002f,0x666c6168,0x766f6241,0x31662865,0x003b3136,0x00030005,0x0000002e, + 0x00000068,0x00060005,0x00000032,0x666c6168,0x6f6c6542,0x31662877,0x003b3136,0x00030005, + 0x00000031,0x00000068,0x00080005,0x00000035,0x69636572,0x636f7270,0x61486c61,0x6628666c, + 0x3b313631,0x00000000,0x00030005,0x00000034,0x00000078,0x00080005,0x00000038,0x65766e69, + 0x54657372,0x64656c69,0x656b6f54,0x3175286e,0x0000003b,0x00040005,0x00000037,0x656b6f74, + 0x0000006e,0x00060005,0x0000003b,0x57707865,0x68676965,0x31662874,0x003b3136,0x00040005, + 0x0000003a,0x726f6373,0x00000065,0x00080005,0x00000041,0x74666f73,0x5078616d,0x28726961, + 0x753b3175,0x31753b31,0x0000003b,0x00030005,0x0000003e,0x00776f72,0x00040005,0x0000003f, + 0x72696170,0x00000000,0x00040005,0x00000040,0x69726170,0x00007974,0x00060005,0x00000044, + 0x74666f73,0x5378616d,0x75286d75,0x00003b31,0x00030005,0x00000043,0x00776f72,0x00040005, + 0x00000046,0x73746962,0x00000000,0x00040005,0x00000049,0x6e676973,0x00000000,0x00050005, + 0x0000004d,0x6e67616d,0x64757469,0x00000065,0x00040005,0x00000067,0x6c616373,0x00006465, + 0x00030005,0x00000078,0x0062736c,0x00040005,0x0000007e,0x6e756f72,0x00646564,0x00050005, + 0x00000099,0x746f7571,0x746e6569,0x00000000,0x00060005,0x0000009d,0x616d6572,0x65646e69, + 0x73614d72,0x0000006b,0x00050005,0x000000a1,0x616d6572,0x65646e69,0x00000072,0x00040005, + 0x000000a5,0x666c6168,0x00796177,0x00040005,0x000000c0,0x614e7369,0x0000006e,0x00050005, + 0x000000dc,0x6167656e,0x65766974,0x00000000,0x00050005,0x000000e2,0x6f707865,0x746e656e, + 0x00000000,0x00050005,0x000000e8,0x746e616d,0x61737369,0x00000000,0x00040005,0x000000ef, + 0x65646f63,0x00000000,0x00050005,0x000000f6,0x6e676973,0x63696669,0x00646e61,0x00040005, + 0x00000102,0x66696873,0x00000074,0x00040005,0x0000010e,0x61726170,0x0000006d,0x00040005, + 0x00000110,0x61726170,0x0000006d,0x00050005,0x00000115,0x78453465,0x656e6f70,0x0000746e, + 0x00050005,0x00000118,0x614d3465,0x7369746e,0x00006173,0x00040005,0x0000011a,0x61726170, + 0x0000006d,0x00040005,0x0000011c,0x61726170,0x0000006d,0x00040005,0x00000143,0x73746962, + 0x00000000,0x00040005,0x00000144,0x61726170,0x0000006d,0x00040005,0x00000154,0x61726170, + 0x0000006d,0x00040005,0x0000015e,0x61726170,0x0000006d,0x00040005,0x00000162,0x61726170, + 0x0000006d,0x00040005,0x00000169,0x61726170,0x0000006d,0x00040005,0x0000016d,0x61726170, + 0x0000006d,0x00040005,0x00000171,0x61726170,0x0000006d,0x00040005,0x00000175,0x61726170, + 0x0000006d,0x00030005,0x00000179,0x00006678,0x00030005,0x0000018d,0x00000068,0x00040005, + 0x00000190,0x61726170,0x0000006d,0x00030005,0x0000019f,0x00000069,0x00030005,0x000001a9, + 0x00007075,0x00040005,0x000001aa,0x61726170,0x0000006d,0x00040005,0x000001b3,0x61726170, + 0x0000006d,0x00040005,0x000001b6,0x6e776f64,0x00000000,0x00040005,0x000001b7,0x61726170, + 0x0000006d,0x00040005,0x000001c3,0x61726170,0x0000006d,0x00040005,0x000001cc,0x656c6974, + 0x00000000,0x00040005,0x000001d0,0x68746977,0x00006e69,0x00030005,0x000001d3,0x00000078, + 0x00030005,0x000001da,0x00000079,0x00050005,0x000001e8,0x69666661,0x3233656e,0x00000000, + 0x00040005,0x000001ee,0x69666661,0x0000656e,0x00040005,0x000001ef,0x61726170,0x0000006d, + 0x00040005,0x000001f6,0x73746962,0x00000000,0x00040005,0x000001f7,0x61726170,0x0000006d, + 0x00060005,0x000001fa,0x6f707865,0x746e656e,0x426c6169,0x00737469,0x00040005,0x00000200, + 0x61726170,0x0000006d,0x00030005,0x00000205,0x0079656b,0x00050005,0x0000020a,0x636f6c62, + 0x3130736b,0x00000000,0x00040005,0x0000020e,0x726f6373,0x00007365,0x00050005,0x0000021f, + 0x636f6c62,0x3332736b,0x00000000,0x00050005,0x00000230,0x636f6c62,0x3534736b,0x00000000, + 0x00050005,0x00000242,0x636f6c62,0x3736736b,0x00000000,0x00030005,0x00000254,0x00000061, + 0x00030005,0x00000258,0x00000062,0x00030005,0x00000261,0x00003065,0x00040005,0x00000262, + 0x61726170,0x0000006d,0x00040005,0x00000264,0x61726170,0x0000006d,0x00040005,0x00000265, + 0x61726170,0x0000006d,0x00040005,0x00000267,0x61726170,0x0000006d,0x00040005,0x00000269, + 0x61726170,0x0000006d,0x00040005,0x0000026a,0x61726170,0x0000006d,0x00030005,0x0000026d, + 0x00003165,0x00040005,0x0000026f,0x61726170,0x0000006d,0x00040005,0x00000271,0x61726170, + 0x0000006d,0x00040005,0x00000272,0x61726170,0x0000006d,0x00040005,0x00000275,0x6e657665, + 0x00000000,0x00040005,0x00000277,0x61726170,0x0000006d,0x00040005,0x00000279,0x61726170, + 0x0000006d,0x00040005,0x0000027a,0x61726170,0x0000006d,0x00030005,0x0000027d,0x0000306f, + 0x00040005,0x0000027e,0x61726170,0x0000006d,0x00040005,0x00000280,0x61726170,0x0000006d, + 0x00040005,0x00000281,0x61726170,0x0000006d,0x00040005,0x00000283,0x61726170,0x0000006d, + 0x00040005,0x00000285,0x61726170,0x0000006d,0x00040005,0x00000286,0x61726170,0x0000006d, + 0x00030005,0x00000289,0x0000316f,0x00040005,0x0000028b,0x61726170,0x0000006d,0x00040005, + 0x0000028d,0x61726170,0x0000006d,0x00040005,0x0000028e,0x61726170,0x0000006d,0x00030005, + 0x00000291,0x0064646f,0x00040005,0x00000293,0x61726170,0x0000006d,0x00040005,0x00000295, + 0x61726170,0x0000006d,0x00040005,0x00000296,0x61726170,0x0000006d,0x00040005,0x0000029e, + 0x65726874,0x00006461,0x00080005,0x000002a1,0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163, + 0x44496e6f,0x00000000,0x00040005,0x000002a5,0x64616568,0x00000000,0x00060005,0x000002a6, + 0x575f6c67,0x476b726f,0x70756f72,0x00004449,0x00040005,0x000002a9,0x646e6977,0x0000776f, + 0x00040005,0x000002b1,0x68737550,0x00000000,0x00050006,0x000002b1,0x00000000,0x74646977, + 0x00000068,0x00050006,0x000002b1,0x00000001,0x67696568,0x00007468,0x00060006,0x000002b1, + 0x00000002,0x6e616863,0x736c656e,0x00000000,0x00050006,0x000002b1,0x00000003,0x64616568, + 0x00000073,0x00050006,0x000002b1,0x00000004,0x66696873,0x00005874,0x00050006,0x000002b1, + 0x00000005,0x66696873,0x00005974,0x00060006,0x000002b1,0x00000006,0x646e6977,0x5873776f, + 0x00000000,0x00060006,0x000002b1,0x00000007,0x646e6977,0x6f43776f,0x00746e75,0x00030005, + 0x000002b3,0x00006370,0x00040005,0x000002bc,0x646e6977,0x0058776f,0x00040005,0x000002c9, + 0x646e6977,0x0059776f,0x00040005,0x000002d5,0x69727473,0x00336564,0x00050005,0x000002d9, + 0x64616568,0x65736142,0x00000000,0x00030005,0x000002dd,0x00000069,0x00040005,0x000002e7, + 0x656b6f74,0x0000006e,0x00050005,0x000002ea,0x706d6f63,0x6e656e6f,0x00000074,0x00030005, + 0x000002ed,0x00007871,0x00030005,0x000002f3,0x00007971,0x00030005,0x000002f9,0x00000071, + 0x00050005,0x00000312,0x6d726f4e,0x7a696c61,0x00006465,0x00040006,0x00000312,0x00000000, + 0x00766b71,0x00030005,0x00000314,0x00000000,0x00030005,0x00000329,0x00007371,0x00040005, + 0x0000032b,0x61726170,0x0000006d,0x00050005,0x00000330,0x4c79656b,0x6c61636f,0x00000000, + 0x00040005,0x00000331,0x61726170,0x0000006d,0x00030005,0x00000334,0x0000786b,0x00030005, + 0x0000033a,0x0000796b,0x00030005,0x00000340,0x0000006b,0x00030005,0x00000341,0x00000076, + 0x00040005,0x00000359,0x4279656b,0x00657361,0x00030005,0x00000374,0x0000736b,0x00040005, + 0x00000376,0x61726170,0x0000006d,0x00030005,0x0000037a,0x00007376,0x00040005,0x0000037c, + 0x61726170,0x0000006d,0x00050005,0x00000383,0x6f697270,0x73614272,0x00000065,0x00030005, + 0x00000386,0x00000074,0x00060005,0x00000387,0x535f6c67,0x72676275,0x4970756f,0x00000044, + 0x00030005,0x00000390,0x00003071,0x00030005,0x00000394,0x0000306b,0x00030005,0x0000039a, + 0x00000063,0x00040005,0x0000039c,0x6f697250,0x00000072,0x00050006,0x0000039c,0x00000000, + 0x6f697270,0x00000072,0x00030005,0x0000039e,0x00000000,0x00030005,0x000003ae,0x00005f73, + 0x00030005,0x000003b9,0x00005f61,0x00030005,0x000003c8,0x00005f62,0x00060005,0x000003e5, + 0x4e5f6c67,0x75536d75,0x6f726762,0x00737075,0x00030005,0x000003e9,0x00000069,0x00040005, + 0x000003f4,0x61726170,0x0000006d,0x00030005,0x000003ff,0x00776f72,0x00040005,0x00000401, + 0x61746f74,0x0000006c,0x00040005,0x00000402,0x61726170,0x0000006d,0x00050005,0x00000405, + 0x69636572,0x636f7270,0x00006c61,0x00040005,0x00000406,0x61726170,0x0000006d,0x00030005, + 0x00000409,0x0079656b,0x00050005,0x00000411,0x6d726f6e,0x7a696c61,0x00006465,0x00040005, + 0x0000041a,0x65646f63,0x00000000,0x00040005,0x0000041b,0x61726170,0x0000006d,0x00040005, + 0x0000041e,0x61726170,0x0000006d,0x00040005,0x00000422,0x67696577,0x00737468,0x00030005, + 0x0000042c,0x00000074,0x00030005,0x00000435,0x00003071,0x00030005,0x00000439,0x00003063, + 0x00030005,0x0000043d,0x00000063,0x00030005,0x0000043f,0x0000626b,0x00030005,0x00000447, + 0x00005f73,0x00030005,0x0000044f,0x00005f61,0x00030005,0x00000460,0x00005f62,0x00040005, + 0x0000047c,0x7074756f,0x00737475,0x00030005,0x00000489,0x00000069,0x00040005,0x00000492, + 0x656b6f74,0x0000006e,0x00050005,0x00000495,0x706d6f63,0x6e656e6f,0x00000074,0x00030005, + 0x00000498,0x00007871,0x00030005,0x0000049e,0x00007971,0x00040005,0x000004be,0x65646e69, + 0x00000078,0x00050005,0x000004d0,0x65747441,0x6465646e,0x00000000,0x00060006,0x000004d0, + 0x00000000,0x65747461,0x6465646e,0x00000000,0x00030005,0x000004d2,0x00000000,0x00040005, + 0x000004d5,0x61726170,0x0000006d,0x00040005,0x000004d9,0x61726170,0x0000006d,0x00030047, + 0x0000018f,0x0000002a,0x00030047,0x000001ae,0x0000002a,0x00030047,0x000001bb,0x0000002a, + 0x00030047,0x0000021e,0x0000002a,0x00030047,0x0000022f,0x0000002a,0x00030047,0x00000241, + 0x0000002a,0x00030047,0x00000253,0x0000002a,0x00030047,0x00000257,0x0000002a,0x00030047, + 0x0000025b,0x0000002a,0x00030047,0x0000026c,0x0000002a,0x00030047,0x00000274,0x0000002a, + 0x00030047,0x0000027c,0x0000002a,0x00030047,0x00000288,0x0000002a,0x00030047,0x00000290, + 0x0000002a,0x00030047,0x00000298,0x0000002a,0x00040047,0x000002a1,0x0000000b,0x0000001b, + 0x00040047,0x000002a6,0x0000000b,0x0000001a,0x00030047,0x000002b1,0x00000002,0x00050048, + 0x000002b1,0x00000000,0x00000023,0x00000000,0x00050048,0x000002b1,0x00000001,0x00000023, + 0x00000004,0x00050048,0x000002b1,0x00000002,0x00000023,0x00000008,0x00050048,0x000002b1, + 0x00000003,0x00000023,0x0000000c,0x00050048,0x000002b1,0x00000004,0x00000023,0x00000010, + 0x00050048,0x000002b1,0x00000005,0x00000023,0x00000014,0x00050048,0x000002b1,0x00000006, + 0x00000023,0x00000018,0x00050048,0x000002b1,0x00000007,0x00000023,0x0000001c,0x00040047, + 0x00000311,0x00000006,0x00000001,0x00030047,0x00000312,0x00000002,0x00040048,0x00000312, + 0x00000000,0x00000018,0x00050048,0x00000312,0x00000000,0x00000023,0x00000000,0x00030047, + 0x00000314,0x00000018,0x00040047,0x00000314,0x00000021,0x00000000,0x00040047,0x00000314, + 0x00000022,0x00000000,0x00040047,0x00000387,0x0000000b,0x00000028,0x00040047,0x0000039b, + 0x00000006,0x00000002,0x00030047,0x0000039c,0x00000002,0x00040048,0x0000039c,0x00000000, + 0x00000018,0x00050048,0x0000039c,0x00000000,0x00000023,0x00000000,0x00030047,0x0000039e, + 0x00000018,0x00040047,0x0000039e,0x00000021,0x00000001,0x00040047,0x0000039e,0x00000022, + 0x00000000,0x00040047,0x000003e5,0x0000000b,0x00000026,0x00030047,0x00000419,0x0000002a, + 0x00040047,0x000004cf,0x00000006,0x00000001,0x00030047,0x000004d0,0x00000002,0x00040048, + 0x000004d0,0x00000000,0x00000019,0x00050048,0x000004d0,0x00000000,0x00000023,0x00000000, + 0x00030047,0x000004d2,0x00000019,0x00040047,0x000004d2,0x00000021,0x00000005,0x00040047, + 0x000004d2,0x00000022,0x00000000,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002, + 0x00030016,0x00000006,0x00000020,0x00040020,0x00000007,0x00000007,0x00000006,0x00040021, + 0x00000008,0x00000006,0x00000007,0x00030016,0x0000000c,0x00000010,0x00040020,0x0000000d, + 0x00000007,0x0000000c,0x00040015,0x0000000e,0x00000020,0x00000000,0x00040021,0x0000000f, + 0x0000000e,0x0000000d,0x00040020,0x00000013,0x00000007,0x0000000e,0x00040021,0x00000014, + 0x0000000c,0x00000013,0x00050021,0x00000018,0x0000000e,0x00000013,0x00000013,0x00040021, + 0x0000001d,0x0000000e,0x00000013,0x00040015,0x00000021,0x00000008,0x00000000,0x00040021, + 0x00000022,0x00000021,0x00000013,0x00040021,0x00000026,0x00000006,0x0000000d,0x00040021, + 0x0000002d,0x0000000c,0x0000000d,0x00060021,0x0000003d,0x0000000c,0x00000013,0x00000013, + 0x00000013,0x0004002b,0x0000000e,0x0000004b,0x80000000,0x0004002b,0x0000000e,0x0000004f, + 0x7fffffff,0x0004002b,0x0000000e,0x00000052,0x7f800000,0x00020014,0x00000053,0x0004002b, + 0x0000000e,0x0000005a,0x477ff000,0x0004002b,0x0000000e,0x00000063,0x38800000,0x0004002b, + 0x00000006,0x0000006a,0x4b800000,0x0004002b,0x00000006,0x00000071,0x33800000,0x0004002b, + 0x0000000e,0x0000007a,0x0000000d,0x0004002b,0x0000000e,0x0000007c,0x00000001,0x0004002b, + 0x0000000e,0x00000080,0x00000fff,0x0004002b,0x0000000e,0x00000084,0xffffe000,0x00040015, + 0x0000008d,0x00000010,0x00000000,0x0004002b,0x0000000e,0x00000093,0x0000ffff,0x0004002b, + 0x0000000e,0x000000b7,0x00000000,0x00040020,0x000000bf,0x00000007,0x00000053,0x0004002b, + 0x0000000e,0x000000c2,0x00007c00,0x0004002b,0x0000000e,0x000000c8,0x000003ff,0x0004002b, + 0x0000000e,0x000000d1,0x00007fff,0x0004002b,0x0000000e,0x000000d7,0x00000008,0x0004002b, + 0x0000000e,0x000000d9,0x00000080,0x0004002b,0x0000000e,0x000000de,0x00008000,0x0004002b, + 0x0000000e,0x000000e4,0x0000000a,0x0004002b,0x0000000e,0x000000e6,0x0000001f,0x0004002b, + 0x0000000e,0x000000f0,0x0000007e,0x0004002b,0x0000000e,0x000000fe,0x00000400,0x0004002b, + 0x0000000e,0x00000108,0x0000000f,0x0004002b,0x0000000e,0x0000010a,0x00000010,0x0004002b, + 0x0000000e,0x00000119,0x00000007,0x0004002b,0x0000000e,0x0000012c,0x00000006,0x0004002b, + 0x0000000e,0x00000135,0x00000003,0x0004002b,0x0000000e,0x00000148,0x00007bff,0x0004002b, + 0x00000006,0x0000014d,0x477ff000,0x0004002b,0x00000006,0x0000014f,0x3f000000,0x0004002b, + 0x00000006,0x0000017d,0x00000000,0x0004002b,0x00000006,0x00000188,0x3f800000,0x0004002b, + 0x0000000c,0x00000196,0x00000000,0x00040015,0x0000019d,0x00000020,0x00000001,0x00040020, + 0x0000019e,0x00000007,0x0000019d,0x0004002b,0x0000019d,0x000001a0,0x00000000,0x0004002b, + 0x0000019d,0x000001a7,0x00000002,0x0004002b,0x0000019d,0x000001c7,0x00000001,0x0004002b, + 0x0000000e,0x000001ce,0x00000004,0x0004002b,0x0000000e,0x000001df,0x00000002,0x0004002b, + 0x00000006,0x000001eb,0x3d380000,0x0004002b,0x00000006,0x000001ec,0x3fa68000,0x0004002b, + 0x0000000c,0x000001f3,0x00003c20,0x0004002b,0x0000000c,0x000001f4,0x00003e47,0x0004002b, + 0x0000000e,0x000001fc,0x00000005,0x0004002b,0x0000000e,0x0000020b,0x00001000,0x0004001c, + 0x0000020c,0x0000000c,0x0000020b,0x00040020,0x0000020d,0x00000004,0x0000020c,0x0004003b, + 0x0000020d,0x0000020e,0x00000004,0x0004002b,0x0000000e,0x00000210,0x00000040,0x00040020, + 0x00000214,0x00000004,0x0000000c,0x0004002b,0x0000000e,0x0000022b,0x00000018,0x0004002b, + 0x0000000e,0x00000235,0x00000020,0x0004002b,0x0000000e,0x0000023d,0x00000028,0x0004002b, + 0x0000000e,0x00000247,0x00000030,0x0004002b,0x0000000e,0x0000024f,0x00000038,0x00040017, + 0x0000029f,0x0000000e,0x00000003,0x00040020,0x000002a0,0x00000001,0x0000029f,0x0004003b, + 0x000002a0,0x000002a1,0x00000001,0x00040020,0x000002a2,0x00000001,0x0000000e,0x0004003b, + 0x000002a0,0x000002a6,0x00000001,0x000a001e,0x000002b1,0x0000000e,0x0000000e,0x0000000e, + 0x0000000e,0x0000000e,0x0000000e,0x0000000e,0x0000000e,0x00040020,0x000002b2,0x00000009, + 0x000002b1,0x0004003b,0x000002b2,0x000002b3,0x00000009,0x0004002b,0x0000019d,0x000002b4, + 0x00000007,0x00040020,0x000002b5,0x00000009,0x0000000e,0x0004002b,0x0000019d,0x000002be, + 0x00000006,0x0004002b,0x0000019d,0x000002c4,0x00000004,0x0004002b,0x0000019d,0x000002d0, + 0x00000005,0x0004002b,0x0000000e,0x000002db,0x00000060,0x0004002b,0x0000000e,0x000002e5, + 0x00000800,0x0003001d,0x00000311,0x00000021,0x0003001e,0x00000312,0x00000311,0x00040020, + 0x00000313,0x0000000c,0x00000312,0x0004003b,0x00000313,0x00000314,0x0000000c,0x00040020, + 0x00000323,0x0000000c,0x00000021,0x0004001c,0x00000327,0x00000021,0x000002e5,0x00040020, + 0x00000328,0x00000004,0x00000327,0x0004003b,0x00000328,0x00000329,0x00000004,0x00040020, + 0x0000032e,0x00000004,0x00000021,0x0004003b,0x00000328,0x00000374,0x00000004,0x0004003b, + 0x00000328,0x0000037a,0x00000004,0x0004002b,0x0000000e,0x00000382,0x00000108,0x0004003b, + 0x000002a2,0x00000387,0x00000001,0x00071168,0x00000398,0x0000000c,0x00000135,0x0000010a, + 0x0000010a,0x000001df,0x00040020,0x00000399,0x00000007,0x00000398,0x0003001d,0x0000039b, + 0x0000000c,0x0003001e,0x0000039c,0x0000039b,0x00040020,0x0000039d,0x0000000c,0x0000039c, + 0x0004003b,0x0000039d,0x0000039e,0x0000000c,0x00040020,0x000003a5,0x0000000c,0x0000000c, + 0x00040016,0x000003b6,0x00000008,0x00001076,0x00071168,0x000003b7,0x000003b6,0x00000135, + 0x0000010a,0x00000235,0x000000b7,0x00040020,0x000003b8,0x00000007,0x000003b7,0x00071168, + 0x000003c6,0x000003b6,0x00000135,0x00000235,0x0000010a,0x0000007c,0x00040020,0x000003c7, + 0x00000007,0x000003c6,0x0004003b,0x000002a2,0x000003e5,0x00000001,0x0004001c,0x00000420, + 0x00000021,0x0000020b,0x00040020,0x00000421,0x00000004,0x00000420,0x0004003b,0x00000421, + 0x00000422,0x00000004,0x0004002c,0x00000398,0x0000043e,0x00000196,0x0004001c,0x0000047a, + 0x0000000c,0x000002e5,0x00040020,0x0000047b,0x00000004,0x0000047a,0x0004003b,0x0000047b, + 0x0000047c,0x00000004,0x0003001d,0x000004cf,0x00000021,0x0003001e,0x000004d0,0x000004cf, + 0x00040020,0x000004d1,0x0000000c,0x000004d0,0x0004003b,0x000004d1,0x000004d2,0x0000000c, + 0x0006002c,0x0000029f,0x000004df,0x000000d9,0x0000007c,0x0000007c,0x00050036,0x00000002, + 0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000013,0x0000029e, + 0x00000007,0x0004003b,0x00000013,0x000002a5,0x00000007,0x0004003b,0x00000013,0x000002a9, + 0x00000007,0x0004003b,0x0000019e,0x000002bc,0x00000007,0x0004003b,0x0000019e,0x000002c9, + 0x00000007,0x0004003b,0x00000013,0x000002d5,0x00000007,0x0004003b,0x00000013,0x000002d9, + 0x00000007,0x0004003b,0x00000013,0x000002dd,0x00000007,0x0004003b,0x00000013,0x000002e7, + 0x00000007,0x0004003b,0x00000013,0x000002ea,0x00000007,0x0004003b,0x0000019e,0x000002ed, + 0x00000007,0x0004003b,0x0000019e,0x000002f3,0x00000007,0x0004003b,0x00000013,0x000002f9, + 0x00000007,0x0004003b,0x00000013,0x0000032b,0x00000007,0x0004003b,0x00000013,0x00000330, + 0x00000007,0x0004003b,0x00000013,0x00000331,0x00000007,0x0004003b,0x0000019e,0x00000334, + 0x00000007,0x0004003b,0x0000019e,0x0000033a,0x00000007,0x0004003b,0x00000013,0x00000340, + 0x00000007,0x0004003b,0x00000013,0x00000341,0x00000007,0x0004003b,0x00000013,0x00000359, + 0x00000007,0x0004003b,0x00000013,0x00000376,0x00000007,0x0004003b,0x00000013,0x0000037c, + 0x00000007,0x0004003b,0x00000013,0x00000383,0x00000007,0x0004003b,0x00000013,0x00000386, + 0x00000007,0x0004003b,0x00000013,0x00000390,0x00000007,0x0004003b,0x00000013,0x00000394, + 0x00000007,0x0004003b,0x00000399,0x0000039a,0x00000007,0x0004003b,0x00000013,0x000003ae, + 0x00000007,0x0004003b,0x000003b8,0x000003b9,0x00000007,0x0004003b,0x000003c7,0x000003c8, + 0x00000007,0x0004003b,0x00000013,0x000003e9,0x00000007,0x0004003b,0x0000000d,0x000003f4, + 0x00000007,0x0004003b,0x00000013,0x000003ff,0x00000007,0x0004003b,0x0000000d,0x00000401, + 0x00000007,0x0004003b,0x00000013,0x00000402,0x00000007,0x0004003b,0x0000000d,0x00000405, + 0x00000007,0x0004003b,0x0000000d,0x00000406,0x00000007,0x0004003b,0x00000013,0x00000409, + 0x00000007,0x0004003b,0x0000000d,0x00000411,0x00000007,0x0004003b,0x00000013,0x0000041a, + 0x00000007,0x0004003b,0x0000000d,0x0000041b,0x00000007,0x0004003b,0x00000013,0x0000041e, + 0x00000007,0x0004003b,0x00000013,0x0000042c,0x00000007,0x0004003b,0x00000013,0x00000435, + 0x00000007,0x0004003b,0x00000013,0x00000439,0x00000007,0x0004003b,0x00000399,0x0000043d, + 0x00000007,0x0004003b,0x00000013,0x0000043f,0x00000007,0x0004003b,0x00000013,0x00000447, + 0x00000007,0x0004003b,0x000003b8,0x0000044f,0x00000007,0x0004003b,0x000003c7,0x00000460, + 0x00000007,0x0004003b,0x00000013,0x00000489,0x00000007,0x0004003b,0x00000013,0x00000492, + 0x00000007,0x0004003b,0x00000013,0x00000495,0x00000007,0x0004003b,0x0000019e,0x00000498, + 0x00000007,0x0004003b,0x0000019e,0x0000049e,0x00000007,0x0004003b,0x00000013,0x000004be, + 0x00000007,0x0004003b,0x0000000d,0x000004d5,0x00000007,0x0004003b,0x00000013,0x000004d9, + 0x00000007,0x00050041,0x000002a2,0x000002a3,0x000002a1,0x000000b7,0x0004003d,0x0000000e, + 0x000002a4,0x000002a3,0x0003003e,0x0000029e,0x000002a4,0x00050041,0x000002a2,0x000002a7, + 0x000002a6,0x000000b7,0x0004003d,0x0000000e,0x000002a8,0x000002a7,0x0003003e,0x000002a5, + 0x000002a8,0x00050041,0x000002a2,0x000002aa,0x000002a6,0x0000007c,0x0004003d,0x0000000e, + 0x000002ab,0x000002aa,0x00050041,0x000002a2,0x000002ac,0x000002a6,0x000001df,0x0004003d, + 0x0000000e,0x000002ad,0x000002ac,0x00050084,0x0000000e,0x000002ae,0x000002ad,0x00000093, + 0x00050080,0x0000000e,0x000002af,0x000002ab,0x000002ae,0x0003003e,0x000002a9,0x000002af, + 0x0004003d,0x0000000e,0x000002b0,0x000002a9,0x00050041,0x000002b5,0x000002b6,0x000002b3, + 0x000002b4,0x0004003d,0x0000000e,0x000002b7,0x000002b6,0x000500ae,0x00000053,0x000002b8, + 0x000002b0,0x000002b7,0x000300f7,0x000002ba,0x00000000,0x000400fa,0x000002b8,0x000002b9, + 0x000002ba,0x000200f8,0x000002b9,0x000100fd,0x000200f8,0x000002ba,0x0004003d,0x0000000e, + 0x000002bd,0x000002a9,0x00050041,0x000002b5,0x000002bf,0x000002b3,0x000002be,0x0004003d, + 0x0000000e,0x000002c0,0x000002bf,0x00050089,0x0000000e,0x000002c1,0x000002bd,0x000002c0, + 0x00050084,0x0000000e,0x000002c2,0x000002c1,0x000000d7,0x0004007c,0x0000019d,0x000002c3, + 0x000002c2,0x00050041,0x000002b5,0x000002c5,0x000002b3,0x000002c4,0x0004003d,0x0000000e, + 0x000002c6,0x000002c5,0x0004007c,0x0000019d,0x000002c7,0x000002c6,0x00050082,0x0000019d, + 0x000002c8,0x000002c3,0x000002c7,0x0003003e,0x000002bc,0x000002c8,0x0004003d,0x0000000e, + 0x000002ca,0x000002a9,0x00050041,0x000002b5,0x000002cb,0x000002b3,0x000002be,0x0004003d, + 0x0000000e,0x000002cc,0x000002cb,0x00050086,0x0000000e,0x000002cd,0x000002ca,0x000002cc, + 0x00050084,0x0000000e,0x000002ce,0x000002cd,0x000000d7,0x0004007c,0x0000019d,0x000002cf, + 0x000002ce,0x00050041,0x000002b5,0x000002d1,0x000002b3,0x000002d0,0x0004003d,0x0000000e, + 0x000002d2,0x000002d1,0x0004007c,0x0000019d,0x000002d3,0x000002d2,0x00050082,0x0000019d, + 0x000002d4,0x000002cf,0x000002d3,0x0003003e,0x000002c9,0x000002d4,0x00050041,0x000002b5, + 0x000002d6,0x000002b3,0x000001a7,0x0004003d,0x0000000e,0x000002d7,0x000002d6,0x00050084, + 0x0000000e,0x000002d8,0x000002d7,0x00000135,0x0003003e,0x000002d5,0x000002d8,0x0004003d, + 0x0000000e,0x000002da,0x000002a5,0x00050084,0x0000000e,0x000002dc,0x000002da,0x000002db, + 0x0003003e,0x000002d9,0x000002dc,0x0004003d,0x0000000e,0x000002de,0x0000029e,0x0003003e, + 0x000002dd,0x000002de,0x000200f9,0x000002df,0x000200f8,0x000002df,0x000400f6,0x000002e1, + 0x000002e2,0x00000000,0x000200f9,0x000002e3,0x000200f8,0x000002e3,0x0004003d,0x0000000e, + 0x000002e4,0x000002dd,0x000500b0,0x00000053,0x000002e6,0x000002e4,0x000002e5,0x000400fa, + 0x000002e6,0x000002e0,0x000002e1,0x000200f8,0x000002e0,0x0004003d,0x0000000e,0x000002e8, + 0x000002dd,0x000500c2,0x0000000e,0x000002e9,0x000002e8,0x000001fc,0x0003003e,0x000002e7, + 0x000002e9,0x0004003d,0x0000000e,0x000002eb,0x000002dd,0x000500c7,0x0000000e,0x000002ec, + 0x000002eb,0x000000e6,0x0003003e,0x000002ea,0x000002ec,0x0004003d,0x0000019d,0x000002ee, + 0x000002bc,0x0004003d,0x0000000e,0x000002ef,0x000002e7,0x000500c7,0x0000000e,0x000002f0, + 0x000002ef,0x00000119,0x0004007c,0x0000019d,0x000002f1,0x000002f0,0x00050080,0x0000019d, + 0x000002f2,0x000002ee,0x000002f1,0x0003003e,0x000002ed,0x000002f2,0x0004003d,0x0000019d, + 0x000002f4,0x000002c9,0x0004003d,0x0000000e,0x000002f5,0x000002e7,0x000500c2,0x0000000e, + 0x000002f6,0x000002f5,0x00000135,0x0004007c,0x0000019d,0x000002f7,0x000002f6,0x00050080, + 0x0000019d,0x000002f8,0x000002f4,0x000002f7,0x0003003e,0x000002f3,0x000002f8,0x0003003e, + 0x000002f9,0x000000b7,0x0004003d,0x0000019d,0x000002fa,0x000002ed,0x000500af,0x00000053, + 0x000002fb,0x000002fa,0x000001a0,0x0004003d,0x0000019d,0x000002fc,0x000002f3,0x000500af, + 0x00000053,0x000002fd,0x000002fc,0x000001a0,0x000500a7,0x00000053,0x000002fe,0x000002fb, + 0x000002fd,0x000300f7,0x00000300,0x00000000,0x000400fa,0x000002fe,0x000002ff,0x00000300, + 0x000200f8,0x000002ff,0x0004003d,0x0000019d,0x00000301,0x000002ed,0x00050041,0x000002b5, + 0x00000302,0x000002b3,0x000001a0,0x0004003d,0x0000000e,0x00000303,0x00000302,0x0004007c, + 0x0000019d,0x00000304,0x00000303,0x000500b1,0x00000053,0x00000305,0x00000301,0x00000304, + 0x000200f9,0x00000300,0x000200f8,0x00000300,0x000700f5,0x00000053,0x00000306,0x000002fe, + 0x000002e0,0x00000305,0x000002ff,0x000300f7,0x00000308,0x00000000,0x000400fa,0x00000306, + 0x00000307,0x00000308,0x000200f8,0x00000307,0x0004003d,0x0000019d,0x00000309,0x000002f3, + 0x00050041,0x000002b5,0x0000030a,0x000002b3,0x000001c7,0x0004003d,0x0000000e,0x0000030b, + 0x0000030a,0x0004007c,0x0000019d,0x0000030c,0x0000030b,0x000500b1,0x00000053,0x0000030d, + 0x00000309,0x0000030c,0x000200f9,0x00000308,0x000200f8,0x00000308,0x000700f5,0x00000053, + 0x0000030e,0x00000306,0x00000300,0x0000030d,0x00000307,0x000300f7,0x00000310,0x00000000, + 0x000400fa,0x0000030e,0x0000030f,0x00000310,0x000200f8,0x0000030f,0x0004003d,0x0000019d, + 0x00000315,0x000002f3,0x0004007c,0x0000000e,0x00000316,0x00000315,0x00050041,0x000002b5, + 0x00000317,0x000002b3,0x000001a0,0x0004003d,0x0000000e,0x00000318,0x00000317,0x00050084, + 0x0000000e,0x00000319,0x00000316,0x00000318,0x0004003d,0x0000019d,0x0000031a,0x000002ed, + 0x0004007c,0x0000000e,0x0000031b,0x0000031a,0x00050080,0x0000000e,0x0000031c,0x00000319, + 0x0000031b,0x0004003d,0x0000000e,0x0000031d,0x000002d5,0x00050084,0x0000000e,0x0000031e, + 0x0000031c,0x0000031d,0x0004003d,0x0000000e,0x0000031f,0x000002d9,0x00050080,0x0000000e, + 0x00000320,0x0000031e,0x0000031f,0x0004003d,0x0000000e,0x00000321,0x000002ea,0x00050080, + 0x0000000e,0x00000322,0x00000320,0x00000321,0x00060041,0x00000323,0x00000324,0x00000314, + 0x000001a0,0x00000322,0x0004003d,0x00000021,0x00000325,0x00000324,0x00040071,0x0000000e, + 0x00000326,0x00000325,0x0003003e,0x000002f9,0x00000326,0x000200f9,0x00000310,0x000200f8, + 0x00000310,0x0004003d,0x0000000e,0x0000032a,0x000002dd,0x0004003d,0x0000000e,0x0000032c, + 0x000002f9,0x0003003e,0x0000032b,0x0000032c,0x00050039,0x00000021,0x0000032d,0x00000024, + 0x0000032b,0x00050041,0x0000032e,0x0000032f,0x00000329,0x0000032a,0x0005003e,0x0000032f, + 0x0000032d,0x00000028,0x000001df,0x0004003d,0x0000000e,0x00000332,0x000002e7,0x0003003e, + 0x00000331,0x00000332,0x00050039,0x0000000e,0x00000333,0x00000038,0x00000331,0x0003003e, + 0x00000330,0x00000333,0x0004003d,0x0000019d,0x00000335,0x000002bc,0x0004003d,0x0000000e, + 0x00000336,0x00000330,0x000500c7,0x0000000e,0x00000337,0x00000336,0x00000119,0x0004007c, + 0x0000019d,0x00000338,0x00000337,0x00050080,0x0000019d,0x00000339,0x00000335,0x00000338, + 0x0003003e,0x00000334,0x00000339,0x0004003d,0x0000019d,0x0000033b,0x000002c9,0x0004003d, + 0x0000000e,0x0000033c,0x00000330,0x000500c2,0x0000000e,0x0000033d,0x0000033c,0x00000135, + 0x0004007c,0x0000019d,0x0000033e,0x0000033d,0x00050080,0x0000019d,0x0000033f,0x0000033b, + 0x0000033e,0x0003003e,0x0000033a,0x0000033f,0x0003003e,0x00000340,0x000000b7,0x0003003e, + 0x00000341,0x000000b7,0x0004003d,0x0000019d,0x00000342,0x00000334,0x000500af,0x00000053, + 0x00000343,0x00000342,0x000001a0,0x0004003d,0x0000019d,0x00000344,0x0000033a,0x000500af, + 0x00000053,0x00000345,0x00000344,0x000001a0,0x000500a7,0x00000053,0x00000346,0x00000343, + 0x00000345,0x000300f7,0x00000348,0x00000000,0x000400fa,0x00000346,0x00000347,0x00000348, + 0x000200f8,0x00000347,0x0004003d,0x0000019d,0x00000349,0x00000334,0x00050041,0x000002b5, + 0x0000034a,0x000002b3,0x000001a0,0x0004003d,0x0000000e,0x0000034b,0x0000034a,0x0004007c, + 0x0000019d,0x0000034c,0x0000034b,0x000500b1,0x00000053,0x0000034d,0x00000349,0x0000034c, + 0x000200f9,0x00000348,0x000200f8,0x00000348,0x000700f5,0x00000053,0x0000034e,0x00000346, + 0x00000310,0x0000034d,0x00000347,0x000300f7,0x00000350,0x00000000,0x000400fa,0x0000034e, + 0x0000034f,0x00000350,0x000200f8,0x0000034f,0x0004003d,0x0000019d,0x00000351,0x0000033a, + 0x00050041,0x000002b5,0x00000352,0x000002b3,0x000001c7,0x0004003d,0x0000000e,0x00000353, + 0x00000352,0x0004007c,0x0000019d,0x00000354,0x00000353,0x000500b1,0x00000053,0x00000355, + 0x00000351,0x00000354,0x000200f9,0x00000350,0x000200f8,0x00000350,0x000700f5,0x00000053, + 0x00000356,0x0000034e,0x00000348,0x00000355,0x0000034f,0x000300f7,0x00000358,0x00000000, + 0x000400fa,0x00000356,0x00000357,0x00000358,0x000200f8,0x00000357,0x0004003d,0x0000019d, + 0x0000035a,0x0000033a,0x0004007c,0x0000000e,0x0000035b,0x0000035a,0x00050041,0x000002b5, + 0x0000035c,0x000002b3,0x000001a0,0x0004003d,0x0000000e,0x0000035d,0x0000035c,0x00050084, + 0x0000000e,0x0000035e,0x0000035b,0x0000035d,0x0004003d,0x0000019d,0x0000035f,0x00000334, + 0x0004007c,0x0000000e,0x00000360,0x0000035f,0x00050080,0x0000000e,0x00000361,0x0000035e, + 0x00000360,0x0004003d,0x0000000e,0x00000362,0x000002d5,0x00050084,0x0000000e,0x00000363, + 0x00000361,0x00000362,0x0004003d,0x0000000e,0x00000364,0x000002d9,0x00050080,0x0000000e, + 0x00000365,0x00000363,0x00000364,0x0003003e,0x00000359,0x00000365,0x0004003d,0x0000000e, + 0x00000366,0x00000359,0x00050080,0x0000000e,0x00000367,0x00000366,0x00000235,0x0004003d, + 0x0000000e,0x00000368,0x000002ea,0x00050080,0x0000000e,0x00000369,0x00000367,0x00000368, + 0x00060041,0x00000323,0x0000036a,0x00000314,0x000001a0,0x00000369,0x0004003d,0x00000021, + 0x0000036b,0x0000036a,0x00040071,0x0000000e,0x0000036c,0x0000036b,0x0003003e,0x00000340, + 0x0000036c,0x0004003d,0x0000000e,0x0000036d,0x00000359,0x00050080,0x0000000e,0x0000036e, + 0x0000036d,0x00000210,0x0004003d,0x0000000e,0x0000036f,0x000002ea,0x00050080,0x0000000e, + 0x00000370,0x0000036e,0x0000036f,0x00060041,0x00000323,0x00000371,0x00000314,0x000001a0, + 0x00000370,0x0004003d,0x00000021,0x00000372,0x00000371,0x00040071,0x0000000e,0x00000373, + 0x00000372,0x0003003e,0x00000341,0x00000373,0x000200f9,0x00000358,0x000200f8,0x00000358, + 0x0004003d,0x0000000e,0x00000375,0x000002dd,0x0004003d,0x0000000e,0x00000377,0x00000340, + 0x0003003e,0x00000376,0x00000377,0x00050039,0x00000021,0x00000378,0x00000024,0x00000376, + 0x00050041,0x0000032e,0x00000379,0x00000374,0x00000375,0x0005003e,0x00000379,0x00000378, + 0x00000028,0x000001df,0x0004003d,0x0000000e,0x0000037b,0x000002dd,0x0004003d,0x0000000e, + 0x0000037d,0x00000341,0x0003003e,0x0000037c,0x0000037d,0x00050039,0x00000021,0x0000037e, + 0x00000024,0x0000037c,0x00050041,0x0000032e,0x0000037f,0x0000037a,0x0000037b,0x0005003e, + 0x0000037f,0x0000037e,0x00000028,0x000001df,0x000200f9,0x000002e2,0x000200f8,0x000002e2, + 0x0004003d,0x0000000e,0x00000380,0x000002dd,0x00050080,0x0000000e,0x00000381,0x00000380, + 0x000000d9,0x0003003e,0x000002dd,0x00000381,0x000200f9,0x000002df,0x000200f8,0x000002e1, + 0x000400e0,0x000001df,0x000001df,0x00000382,0x0004003d,0x0000000e,0x00000384,0x000002a5, + 0x00050084,0x0000000e,0x00000385,0x00000384,0x0000020b,0x0003003e,0x00000383,0x00000385, + 0x0004003d,0x0000000e,0x00000388,0x00000387,0x0003003e,0x00000386,0x00000388,0x000200f9, + 0x00000389,0x000200f8,0x00000389,0x000400f6,0x0000038b,0x0000038c,0x00000000,0x000200f9, + 0x0000038d,0x000200f8,0x0000038d,0x0004003d,0x0000000e,0x0000038e,0x00000386,0x000500b0, + 0x00000053,0x0000038f,0x0000038e,0x0000010a,0x000400fa,0x0000038f,0x0000038a,0x0000038b, + 0x000200f8,0x0000038a,0x0004003d,0x0000000e,0x00000391,0x00000386,0x00050086,0x0000000e, + 0x00000392,0x00000391,0x000001ce,0x00050084,0x0000000e,0x00000393,0x00000392,0x0000010a, + 0x0003003e,0x00000390,0x00000393,0x0004003d,0x0000000e,0x00000395,0x00000386,0x00050089, + 0x0000000e,0x00000396,0x00000395,0x000001ce,0x00050084,0x0000000e,0x00000397,0x00000396, + 0x0000010a,0x0003003e,0x00000394,0x00000397,0x0004003d,0x0000000e,0x0000039f,0x00000383, + 0x0004003d,0x0000000e,0x000003a0,0x00000390,0x00050084,0x0000000e,0x000003a1,0x000003a0, + 0x00000210,0x00050080,0x0000000e,0x000003a2,0x0000039f,0x000003a1,0x0004003d,0x0000000e, + 0x000003a3,0x00000394,0x00050080,0x0000000e,0x000003a4,0x000003a2,0x000003a3,0x00060041, + 0x000003a5,0x000003a6,0x0000039e,0x000001a0,0x000003a4,0x0004003d,0x0000000e,0x000003a7, + 0x00000383,0x0004003d,0x0000000e,0x000003a8,0x00000390,0x00050084,0x0000000e,0x000003a9, + 0x000003a8,0x00000210,0x00050080,0x0000000e,0x000003aa,0x000003a7,0x000003a9,0x0004003d, + 0x0000000e,0x000003ab,0x00000394,0x00050080,0x0000000e,0x000003ac,0x000003aa,0x000003ab, + 0x00071169,0x00000398,0x000003ad,0x000003a6,0x000001a0,0x00000210,0x00000000,0x0003003e, + 0x0000039a,0x000003ad,0x0003003e,0x000003ae,0x000000b7,0x000200f9,0x000003af,0x000200f8, + 0x000003af,0x000400f6,0x000003b1,0x000003b2,0x00000001,0x000200f9,0x000003b3,0x000200f8, + 0x000003b3,0x0004003d,0x0000000e,0x000003b4,0x000003ae,0x000500b0,0x00000053,0x000003b5, + 0x000003b4,0x0000007c,0x000400fa,0x000003b5,0x000003b0,0x000003b1,0x000200f8,0x000003b0, + 0x0004003d,0x0000000e,0x000003ba,0x00000390,0x00050084,0x0000000e,0x000003bb,0x000003ba, + 0x00000235,0x0004003d,0x0000000e,0x000003bc,0x000003ae,0x00050084,0x0000000e,0x000003bd, + 0x000003bc,0x00000235,0x00050080,0x0000000e,0x000003be,0x000003bb,0x000003bd,0x00050041, + 0x0000032e,0x000003bf,0x00000329,0x000003be,0x0004003d,0x0000000e,0x000003c0,0x00000390, + 0x00050084,0x0000000e,0x000003c1,0x000003c0,0x00000235,0x0004003d,0x0000000e,0x000003c2, + 0x000003ae,0x00050084,0x0000000e,0x000003c3,0x000003c2,0x00000235,0x00050080,0x0000000e, + 0x000003c4,0x000003c1,0x000003c3,0x00081169,0x000003b7,0x000003c5,0x000003bf,0x000001a0, + 0x00000235,0x00000030,0x000001df,0x0003003e,0x000003b9,0x000003c5,0x0004003d,0x0000000e, + 0x000003c9,0x00000394,0x00050084,0x0000000e,0x000003ca,0x000003c9,0x00000235,0x0004003d, + 0x0000000e,0x000003cb,0x000003ae,0x00050084,0x0000000e,0x000003cc,0x000003cb,0x00000235, + 0x00050080,0x0000000e,0x000003cd,0x000003ca,0x000003cc,0x00050041,0x0000032e,0x000003ce, + 0x00000374,0x000003cd,0x0004003d,0x0000000e,0x000003cf,0x00000394,0x00050084,0x0000000e, + 0x000003d0,0x000003cf,0x00000235,0x0004003d,0x0000000e,0x000003d1,0x000003ae,0x00050084, + 0x0000000e,0x000003d2,0x000003d1,0x00000235,0x00050080,0x0000000e,0x000003d3,0x000003d0, + 0x000003d2,0x00081169,0x000003c6,0x000003d4,0x000003ce,0x000001c7,0x00000235,0x00000030, + 0x000001df,0x0003003e,0x000003c8,0x000003d4,0x0004003d,0x000003b7,0x000003d5,0x000003b9, + 0x0004003d,0x000003c6,0x000003d6,0x000003c8,0x0004003d,0x00000398,0x000003d7,0x0000039a, + 0x0006116b,0x00000398,0x000003d8,0x000003d5,0x000003d6,0x000003d7,0x0003003e,0x0000039a, + 0x000003d8,0x000200f9,0x000003b2,0x000200f8,0x000003b2,0x0004003d,0x0000000e,0x000003d9, + 0x000003ae,0x00050080,0x0000000e,0x000003da,0x000003d9,0x000001c7,0x0003003e,0x000003ae, + 0x000003da,0x000200f9,0x000003af,0x000200f8,0x000003b1,0x0004003d,0x00000398,0x000003db, + 0x0000039a,0x0004003d,0x0000000e,0x000003dc,0x00000390,0x00050084,0x0000000e,0x000003dd, + 0x000003dc,0x00000210,0x0004003d,0x0000000e,0x000003de,0x00000394,0x00050080,0x0000000e, + 0x000003df,0x000003dd,0x000003de,0x00050041,0x00000214,0x000003e0,0x0000020e,0x000003df, + 0x0004003d,0x0000000e,0x000003e1,0x00000390,0x00050084,0x0000000e,0x000003e2,0x000003e1, + 0x00000210,0x0004003d,0x0000000e,0x000003e3,0x00000394,0x00050080,0x0000000e,0x000003e4, + 0x000003e2,0x000003e3,0x0007116a,0x000003e0,0x000003db,0x000001a0,0x00000210,0x00000028, + 0x000001df,0x000200f9,0x0000038c,0x000200f8,0x0000038c,0x0004003d,0x0000000e,0x000003e6, + 0x000003e5,0x0004003d,0x0000000e,0x000003e7,0x00000386,0x00050080,0x0000000e,0x000003e8, + 0x000003e7,0x000003e6,0x0003003e,0x00000386,0x000003e8,0x000200f9,0x00000389,0x000200f8, + 0x0000038b,0x000400e0,0x000001df,0x000001df,0x00000382,0x0004003d,0x0000000e,0x000003ea, + 0x0000029e,0x0003003e,0x000003e9,0x000003ea,0x000200f9,0x000003eb,0x000200f8,0x000003eb, + 0x000400f6,0x000003ed,0x000003ee,0x00000000,0x000200f9,0x000003ef,0x000200f8,0x000003ef, + 0x0004003d,0x0000000e,0x000003f0,0x000003e9,0x000500b0,0x00000053,0x000003f1,0x000003f0, + 0x0000020b,0x000400fa,0x000003f1,0x000003ec,0x000003ed,0x000200f8,0x000003ec,0x0004003d, + 0x0000000e,0x000003f2,0x000003e9,0x0004003d,0x0000000e,0x000003f3,0x000003e9,0x00050041, + 0x00000214,0x000003f5,0x0000020e,0x000003f3,0x0006003d,0x0000000c,0x000003f6,0x000003f5, + 0x00000030,0x000001df,0x0003003e,0x000003f4,0x000003f6,0x00050039,0x0000000c,0x000003f7, + 0x0000003b,0x000003f4,0x00050041,0x00000214,0x000003f8,0x0000020e,0x000003f2,0x0005003e, + 0x000003f8,0x000003f7,0x00000028,0x000001df,0x000200f9,0x000003ee,0x000200f8,0x000003ee, + 0x0004003d,0x0000000e,0x000003f9,0x000003e9,0x00050080,0x0000000e,0x000003fa,0x000003f9, + 0x000000d9,0x0003003e,0x000003e9,0x000003fa,0x000200f9,0x000003eb,0x000200f8,0x000003ed, + 0x000400e0,0x000001df,0x000001df,0x00000382,0x0004003d,0x0000000e,0x000003fb,0x0000029e, + 0x000500b0,0x00000053,0x000003fc,0x000003fb,0x00000210,0x000300f7,0x000003fe,0x00000000, + 0x000400fa,0x000003fc,0x000003fd,0x000003fe,0x000200f8,0x000003fd,0x0004003d,0x0000000e, + 0x00000400,0x0000029e,0x0003003e,0x000003ff,0x00000400,0x0004003d,0x0000000e,0x00000403, + 0x000003ff,0x0003003e,0x00000402,0x00000403,0x00050039,0x0000000c,0x00000404,0x00000044, + 0x00000402,0x0003003e,0x00000401,0x00000404,0x0004003d,0x0000000c,0x00000407,0x00000401, + 0x0003003e,0x00000406,0x00000407,0x00050039,0x0000000c,0x00000408,0x00000035,0x00000406, + 0x0003003e,0x00000405,0x00000408,0x0003003e,0x00000409,0x000000b7,0x000200f9,0x0000040a, + 0x000200f8,0x0000040a,0x000400f6,0x0000040c,0x0000040d,0x00000000,0x000200f9,0x0000040e, + 0x000200f8,0x0000040e,0x0004003d,0x0000000e,0x0000040f,0x00000409,0x000500b0,0x00000053, + 0x00000410,0x0000040f,0x00000210,0x000400fa,0x00000410,0x0000040b,0x0000040c,0x000200f8, + 0x0000040b,0x0004003d,0x0000000e,0x00000412,0x000003ff,0x00050084,0x0000000e,0x00000413, + 0x00000412,0x00000210,0x0004003d,0x0000000e,0x00000414,0x00000409,0x00050080,0x0000000e, + 0x00000415,0x00000413,0x00000414,0x00050041,0x00000214,0x00000416,0x0000020e,0x00000415, + 0x0006003d,0x0000000c,0x00000417,0x00000416,0x00000030,0x000001df,0x0004003d,0x0000000c, + 0x00000418,0x00000405,0x00050085,0x0000000c,0x00000419,0x00000417,0x00000418,0x0003003e, + 0x00000411,0x00000419,0x0004003d,0x0000000c,0x0000041c,0x00000411,0x0003003e,0x0000041b, + 0x0000041c,0x00050039,0x0000000e,0x0000041d,0x00000011,0x0000041b,0x0003003e,0x0000041e, + 0x0000041d,0x00050039,0x0000000e,0x0000041f,0x0000001f,0x0000041e,0x0003003e,0x0000041a, + 0x0000041f,0x0004003d,0x0000000e,0x00000423,0x000003ff,0x00050084,0x0000000e,0x00000424, + 0x00000423,0x00000210,0x0004003d,0x0000000e,0x00000425,0x00000409,0x00050080,0x0000000e, + 0x00000426,0x00000424,0x00000425,0x0004003d,0x0000000e,0x00000427,0x0000041a,0x00040071, + 0x00000021,0x00000428,0x00000427,0x00050041,0x0000032e,0x00000429,0x00000422,0x00000426, + 0x0005003e,0x00000429,0x00000428,0x00000028,0x000001df,0x000200f9,0x0000040d,0x000200f8, + 0x0000040d,0x0004003d,0x0000000e,0x0000042a,0x00000409,0x00050080,0x0000000e,0x0000042b, + 0x0000042a,0x000001c7,0x0003003e,0x00000409,0x0000042b,0x000200f9,0x0000040a,0x000200f8, + 0x0000040c,0x000200f9,0x000003fe,0x000200f8,0x000003fe,0x000400e0,0x000001df,0x000001df, + 0x00000382,0x0004003d,0x0000000e,0x0000042d,0x00000387,0x0003003e,0x0000042c,0x0000042d, + 0x000200f9,0x0000042e,0x000200f8,0x0000042e,0x000400f6,0x00000430,0x00000431,0x00000000, + 0x000200f9,0x00000432,0x000200f8,0x00000432,0x0004003d,0x0000000e,0x00000433,0x0000042c, + 0x000500b0,0x00000053,0x00000434,0x00000433,0x000000d7,0x000400fa,0x00000434,0x0000042f, + 0x00000430,0x000200f8,0x0000042f,0x0004003d,0x0000000e,0x00000436,0x0000042c,0x00050086, + 0x0000000e,0x00000437,0x00000436,0x000001df,0x00050084,0x0000000e,0x00000438,0x00000437, + 0x0000010a,0x0003003e,0x00000435,0x00000438,0x0004003d,0x0000000e,0x0000043a,0x0000042c, + 0x00050089,0x0000000e,0x0000043b,0x0000043a,0x000001df,0x00050084,0x0000000e,0x0000043c, + 0x0000043b,0x0000010a,0x0003003e,0x00000439,0x0000043c,0x0003003e,0x0000043d,0x0000043e, + 0x0003003e,0x0000043f,0x000000b7,0x000200f9,0x00000440,0x000200f8,0x00000440,0x000400f6, + 0x00000442,0x00000443,0x00000001,0x000200f9,0x00000444,0x000200f8,0x00000444,0x0004003d, + 0x0000000e,0x00000445,0x0000043f,0x000500b0,0x00000053,0x00000446,0x00000445,0x00000210, + 0x000400fa,0x00000446,0x00000441,0x00000442,0x000200f8,0x00000441,0x0003003e,0x00000447, + 0x000000b7,0x000200f9,0x00000448,0x000200f8,0x00000448,0x000400f6,0x0000044a,0x0000044b, + 0x00000001,0x000200f9,0x0000044c,0x000200f8,0x0000044c,0x0004003d,0x0000000e,0x0000044d, + 0x00000447,0x000500b0,0x00000053,0x0000044e,0x0000044d,0x0000007c,0x000400fa,0x0000044e, + 0x00000449,0x0000044a,0x000200f8,0x00000449,0x0004003d,0x0000000e,0x00000450,0x00000435, + 0x00050084,0x0000000e,0x00000451,0x00000450,0x00000210,0x0004003d,0x0000000e,0x00000452, + 0x0000043f,0x00050080,0x0000000e,0x00000453,0x00000451,0x00000452,0x0004003d,0x0000000e, + 0x00000454,0x00000447,0x00050084,0x0000000e,0x00000455,0x00000454,0x00000235,0x00050080, + 0x0000000e,0x00000456,0x00000453,0x00000455,0x00050041,0x0000032e,0x00000457,0x00000422, + 0x00000456,0x0004003d,0x0000000e,0x00000458,0x00000435,0x00050084,0x0000000e,0x00000459, + 0x00000458,0x00000210,0x0004003d,0x0000000e,0x0000045a,0x0000043f,0x00050080,0x0000000e, + 0x0000045b,0x00000459,0x0000045a,0x0004003d,0x0000000e,0x0000045c,0x00000447,0x00050084, + 0x0000000e,0x0000045d,0x0000045c,0x00000235,0x00050080,0x0000000e,0x0000045e,0x0000045b, + 0x0000045d,0x00081169,0x000003b7,0x0000045f,0x00000457,0x000001a0,0x00000210,0x00000030, + 0x000001df,0x0003003e,0x0000044f,0x0000045f,0x0004003d,0x0000000e,0x00000461,0x0000043f, + 0x00050084,0x0000000e,0x00000462,0x00000461,0x00000235,0x0004003d,0x0000000e,0x00000463, + 0x00000439,0x00050080,0x0000000e,0x00000464,0x00000462,0x00000463,0x0004003d,0x0000000e, + 0x00000465,0x00000447,0x00050084,0x0000000e,0x00000466,0x00000465,0x000000fe,0x00050080, + 0x0000000e,0x00000467,0x00000464,0x00000466,0x00050041,0x0000032e,0x00000468,0x0000037a, + 0x00000467,0x0004003d,0x0000000e,0x00000469,0x0000043f,0x00050084,0x0000000e,0x0000046a, + 0x00000469,0x00000235,0x0004003d,0x0000000e,0x0000046b,0x00000439,0x00050080,0x0000000e, + 0x0000046c,0x0000046a,0x0000046b,0x0004003d,0x0000000e,0x0000046d,0x00000447,0x00050084, + 0x0000000e,0x0000046e,0x0000046d,0x000000fe,0x00050080,0x0000000e,0x0000046f,0x0000046c, + 0x0000046e,0x00081169,0x000003c6,0x00000470,0x00000468,0x000001a0,0x00000235,0x00000030, + 0x000001df,0x0003003e,0x00000460,0x00000470,0x0004003d,0x000003b7,0x00000471,0x0000044f, + 0x0004003d,0x000003c6,0x00000472,0x00000460,0x0004003d,0x00000398,0x00000473,0x0000043d, + 0x0006116b,0x00000398,0x00000474,0x00000471,0x00000472,0x00000473,0x0003003e,0x0000043d, + 0x00000474,0x000200f9,0x0000044b,0x000200f8,0x0000044b,0x0004003d,0x0000000e,0x00000475, + 0x00000447,0x00050080,0x0000000e,0x00000476,0x00000475,0x000001c7,0x0003003e,0x00000447, + 0x00000476,0x000200f9,0x00000448,0x000200f8,0x0000044a,0x000200f9,0x00000443,0x000200f8, + 0x00000443,0x0004003d,0x0000000e,0x00000477,0x0000043f,0x00050080,0x0000000e,0x00000478, + 0x00000477,0x00000235,0x0003003e,0x0000043f,0x00000478,0x000200f9,0x00000440,0x000200f8, + 0x00000442,0x0004003d,0x00000398,0x00000479,0x0000043d,0x0004003d,0x0000000e,0x0000047d, + 0x00000435,0x00050084,0x0000000e,0x0000047e,0x0000047d,0x00000235,0x0004003d,0x0000000e, + 0x0000047f,0x00000439,0x00050080,0x0000000e,0x00000480,0x0000047e,0x0000047f,0x00050041, + 0x00000214,0x00000481,0x0000047c,0x00000480,0x0004003d,0x0000000e,0x00000482,0x00000435, + 0x00050084,0x0000000e,0x00000483,0x00000482,0x00000235,0x0004003d,0x0000000e,0x00000484, + 0x00000439,0x00050080,0x0000000e,0x00000485,0x00000483,0x00000484,0x0007116a,0x00000481, + 0x00000479,0x000001a0,0x00000235,0x00000028,0x000001df,0x000200f9,0x00000431,0x000200f8, + 0x00000431,0x0004003d,0x0000000e,0x00000486,0x000003e5,0x0004003d,0x0000000e,0x00000487, + 0x0000042c,0x00050080,0x0000000e,0x00000488,0x00000487,0x00000486,0x0003003e,0x0000042c, + 0x00000488,0x000200f9,0x0000042e,0x000200f8,0x00000430,0x000400e0,0x000001df,0x000001df, + 0x00000382,0x0004003d,0x0000000e,0x0000048a,0x0000029e,0x0003003e,0x00000489,0x0000048a, + 0x000200f9,0x0000048b,0x000200f8,0x0000048b,0x000400f6,0x0000048d,0x0000048e,0x00000000, + 0x000200f9,0x0000048f,0x000200f8,0x0000048f,0x0004003d,0x0000000e,0x00000490,0x00000489, + 0x000500b0,0x00000053,0x00000491,0x00000490,0x000002e5,0x000400fa,0x00000491,0x0000048c, + 0x0000048d,0x000200f8,0x0000048c,0x0004003d,0x0000000e,0x00000493,0x00000489,0x000500c2, + 0x0000000e,0x00000494,0x00000493,0x000001fc,0x0003003e,0x00000492,0x00000494,0x0004003d, + 0x0000000e,0x00000496,0x00000489,0x000500c7,0x0000000e,0x00000497,0x00000496,0x000000e6, + 0x0003003e,0x00000495,0x00000497,0x0004003d,0x0000019d,0x00000499,0x000002bc,0x0004003d, + 0x0000000e,0x0000049a,0x00000492,0x000500c7,0x0000000e,0x0000049b,0x0000049a,0x00000119, + 0x0004007c,0x0000019d,0x0000049c,0x0000049b,0x00050080,0x0000019d,0x0000049d,0x00000499, + 0x0000049c,0x0003003e,0x00000498,0x0000049d,0x0004003d,0x0000019d,0x0000049f,0x000002c9, + 0x0004003d,0x0000000e,0x000004a0,0x00000492,0x000500c2,0x0000000e,0x000004a1,0x000004a0, + 0x00000135,0x0004007c,0x0000019d,0x000004a2,0x000004a1,0x00050080,0x0000019d,0x000004a3, + 0x0000049f,0x000004a2,0x0003003e,0x0000049e,0x000004a3,0x0004003d,0x0000019d,0x000004a4, + 0x00000498,0x000500b1,0x00000053,0x000004a5,0x000004a4,0x000001a0,0x0004003d,0x0000019d, + 0x000004a6,0x0000049e,0x000500b1,0x00000053,0x000004a7,0x000004a6,0x000001a0,0x000500a6, + 0x00000053,0x000004a8,0x000004a5,0x000004a7,0x000400a8,0x00000053,0x000004a9,0x000004a8, + 0x000300f7,0x000004ab,0x00000000,0x000400fa,0x000004a9,0x000004aa,0x000004ab,0x000200f8, + 0x000004aa,0x0004003d,0x0000019d,0x000004ac,0x00000498,0x00050041,0x000002b5,0x000004ad, + 0x000002b3,0x000001a0,0x0004003d,0x0000000e,0x000004ae,0x000004ad,0x0004007c,0x0000019d, + 0x000004af,0x000004ae,0x000500af,0x00000053,0x000004b0,0x000004ac,0x000004af,0x000200f9, + 0x000004ab,0x000200f8,0x000004ab,0x000700f5,0x00000053,0x000004b1,0x000004a8,0x0000048c, + 0x000004b0,0x000004aa,0x000400a8,0x00000053,0x000004b2,0x000004b1,0x000300f7,0x000004b4, + 0x00000000,0x000400fa,0x000004b2,0x000004b3,0x000004b4,0x000200f8,0x000004b3,0x0004003d, + 0x0000019d,0x000004b5,0x0000049e,0x00050041,0x000002b5,0x000004b6,0x000002b3,0x000001c7, + 0x0004003d,0x0000000e,0x000004b7,0x000004b6,0x0004007c,0x0000019d,0x000004b8,0x000004b7, + 0x000500af,0x00000053,0x000004b9,0x000004b5,0x000004b8,0x000200f9,0x000004b4,0x000200f8, + 0x000004b4,0x000700f5,0x00000053,0x000004ba,0x000004b1,0x000004ab,0x000004b9,0x000004b3, + 0x000300f7,0x000004bc,0x00000000,0x000400fa,0x000004ba,0x000004bb,0x000004bc,0x000200f8, + 0x000004bb,0x000200f9,0x0000048e,0x000200f8,0x000004bc,0x0004003d,0x0000019d,0x000004bf, + 0x0000049e,0x0004007c,0x0000000e,0x000004c0,0x000004bf,0x00050041,0x000002b5,0x000004c1, + 0x000002b3,0x000001a0,0x0004003d,0x0000000e,0x000004c2,0x000004c1,0x00050084,0x0000000e, + 0x000004c3,0x000004c0,0x000004c2,0x0004003d,0x0000019d,0x000004c4,0x00000498,0x0004007c, + 0x0000000e,0x000004c5,0x000004c4,0x00050080,0x0000000e,0x000004c6,0x000004c3,0x000004c5, + 0x00050041,0x000002b5,0x000004c7,0x000002b3,0x000001a7,0x0004003d,0x0000000e,0x000004c8, + 0x000004c7,0x00050084,0x0000000e,0x000004c9,0x000004c6,0x000004c8,0x0004003d,0x0000000e, + 0x000004ca,0x000002a5,0x00050084,0x0000000e,0x000004cb,0x000004ca,0x00000235,0x00050080, + 0x0000000e,0x000004cc,0x000004c9,0x000004cb,0x0004003d,0x0000000e,0x000004cd,0x00000495, + 0x00050080,0x0000000e,0x000004ce,0x000004cc,0x000004cd,0x0003003e,0x000004be,0x000004ce, + 0x0004003d,0x0000000e,0x000004d3,0x000004be,0x0004003d,0x0000000e,0x000004d4,0x00000489, + 0x00050041,0x00000214,0x000004d6,0x0000047c,0x000004d4,0x0006003d,0x0000000c,0x000004d7, + 0x000004d6,0x00000030,0x000001df,0x0003003e,0x000004d5,0x000004d7,0x00050039,0x0000000e, + 0x000004d8,0x00000011,0x000004d5,0x0003003e,0x000004d9,0x000004d8,0x00050039,0x0000000e, + 0x000004da,0x0000001f,0x000004d9,0x00040071,0x00000021,0x000004db,0x000004da,0x00060041, + 0x00000323,0x000004dc,0x000004d2,0x000001a0,0x000004d3,0x0003003e,0x000004dc,0x000004db, + 0x000200f9,0x0000048e,0x000200f8,0x0000048e,0x0004003d,0x0000000e,0x000004dd,0x00000489, + 0x00050080,0x0000000e,0x000004de,0x000004dd,0x000000d9,0x0003003e,0x00000489,0x000004de, + 0x000200f9,0x0000048b,0x000200f8,0x0000048d,0x000100fd,0x00010038,0x00050036,0x00000006, + 0x0000000a,0x00000000,0x00000008,0x00030037,0x00000007,0x00000009,0x000200f8,0x0000000b, + 0x0004003b,0x00000013,0x00000046,0x00000007,0x0004003b,0x00000013,0x00000049,0x00000007, + 0x0004003b,0x00000013,0x0000004d,0x00000007,0x0004003b,0x00000007,0x00000067,0x00000007, + 0x0004003b,0x00000013,0x00000078,0x00000007,0x0004003b,0x00000013,0x0000007e,0x00000007, + 0x0004003d,0x00000006,0x00000047,0x00000009,0x0004007c,0x0000000e,0x00000048,0x00000047, + 0x0003003e,0x00000046,0x00000048,0x0004003d,0x0000000e,0x0000004a,0x00000046,0x000500c7, + 0x0000000e,0x0000004c,0x0000004a,0x0000004b,0x0003003e,0x00000049,0x0000004c,0x0004003d, + 0x0000000e,0x0000004e,0x00000046,0x000500c7,0x0000000e,0x00000050,0x0000004e,0x0000004f, + 0x0003003e,0x0000004d,0x00000050,0x0004003d,0x0000000e,0x00000051,0x0000004d,0x000500ae, + 0x00000053,0x00000054,0x00000051,0x00000052,0x000300f7,0x00000056,0x00000000,0x000400fa, + 0x00000054,0x00000055,0x00000056,0x000200f8,0x00000055,0x0004003d,0x00000006,0x00000057, + 0x00000009,0x000200fe,0x00000057,0x000200f8,0x00000056,0x0004003d,0x0000000e,0x00000059, + 0x0000004d,0x000500ae,0x00000053,0x0000005b,0x00000059,0x0000005a,0x000300f7,0x0000005d, + 0x00000000,0x000400fa,0x0000005b,0x0000005c,0x0000005d,0x000200f8,0x0000005c,0x0004003d, + 0x0000000e,0x0000005e,0x00000049,0x000500c5,0x0000000e,0x0000005f,0x0000005e,0x00000052, + 0x0004007c,0x00000006,0x00000060,0x0000005f,0x000200fe,0x00000060,0x000200f8,0x0000005d, + 0x0004003d,0x0000000e,0x00000062,0x0000004d,0x000500b0,0x00000053,0x00000064,0x00000062, + 0x00000063,0x000300f7,0x00000066,0x00000000,0x000400fa,0x00000064,0x00000065,0x00000066, + 0x000200f8,0x00000065,0x0004003d,0x0000000e,0x00000068,0x0000004d,0x0004007c,0x00000006, + 0x00000069,0x00000068,0x00050085,0x00000006,0x0000006b,0x00000069,0x0000006a,0x0006000c, + 0x00000006,0x0000006c,0x00000001,0x00000002,0x0000006b,0x0003003e,0x00000067,0x0000006c, + 0x0004003d,0x0000000e,0x0000006d,0x00000049,0x0004007c,0x00000006,0x0000006e,0x0000006d, + 0x0004003d,0x0000000e,0x0000006f,0x00000049,0x0004003d,0x00000006,0x00000070,0x00000067, + 0x00050085,0x00000006,0x00000072,0x00000070,0x00000071,0x0004007c,0x0000000e,0x00000073, + 0x00000072,0x000500c5,0x0000000e,0x00000074,0x0000006f,0x00000073,0x0004007c,0x00000006, + 0x00000075,0x00000074,0x00050081,0x00000006,0x00000076,0x0000006e,0x00000075,0x000200fe, + 0x00000076,0x000200f8,0x00000066,0x0004003d,0x0000000e,0x00000079,0x0000004d,0x000500c2, + 0x0000000e,0x0000007b,0x00000079,0x0000007a,0x000500c7,0x0000000e,0x0000007d,0x0000007b, + 0x0000007c,0x0003003e,0x00000078,0x0000007d,0x0004003d,0x0000000e,0x0000007f,0x0000004d, + 0x00050080,0x0000000e,0x00000081,0x0000007f,0x00000080,0x0004003d,0x0000000e,0x00000082, + 0x00000078,0x00050080,0x0000000e,0x00000083,0x00000081,0x00000082,0x000500c7,0x0000000e, + 0x00000085,0x00000083,0x00000084,0x0003003e,0x0000007e,0x00000085,0x0004003d,0x0000000e, + 0x00000086,0x00000049,0x0004003d,0x0000000e,0x00000087,0x0000007e,0x000500c5,0x0000000e, + 0x00000088,0x00000086,0x00000087,0x0004007c,0x00000006,0x00000089,0x00000088,0x000200fe, + 0x00000089,0x00010038,0x00050036,0x0000000e,0x00000011,0x00000000,0x0000000f,0x00030037, + 0x0000000d,0x00000010,0x000200f8,0x00000012,0x0004003d,0x0000000c,0x0000008c,0x00000010, + 0x0004007c,0x0000008d,0x0000008e,0x0000008c,0x00040071,0x0000000e,0x0000008f,0x0000008e, + 0x000200fe,0x0000008f,0x00010038,0x00050036,0x0000000c,0x00000016,0x00000000,0x00000014, + 0x00030037,0x00000013,0x00000015,0x000200f8,0x00000017,0x0004003d,0x0000000e,0x00000092, + 0x00000015,0x000500c7,0x0000000e,0x00000094,0x00000092,0x00000093,0x00040071,0x0000008d, + 0x00000095,0x00000094,0x0004007c,0x0000000c,0x00000096,0x00000095,0x000200fe,0x00000096, + 0x00010038,0x00050036,0x0000000e,0x0000001b,0x00000000,0x00000018,0x00030037,0x00000013, + 0x00000019,0x00030037,0x00000013,0x0000001a,0x000200f8,0x0000001c,0x0004003b,0x00000013, + 0x00000099,0x00000007,0x0004003b,0x00000013,0x0000009d,0x00000007,0x0004003b,0x00000013, + 0x000000a1,0x00000007,0x0004003b,0x00000013,0x000000a5,0x00000007,0x0004003d,0x0000000e, + 0x0000009a,0x00000019,0x0004003d,0x0000000e,0x0000009b,0x0000001a,0x000500c2,0x0000000e, + 0x0000009c,0x0000009a,0x0000009b,0x0003003e,0x00000099,0x0000009c,0x0004003d,0x0000000e, + 0x0000009e,0x0000001a,0x000500c4,0x0000000e,0x0000009f,0x0000007c,0x0000009e,0x00050082, + 0x0000000e,0x000000a0,0x0000009f,0x0000007c,0x0003003e,0x0000009d,0x000000a0,0x0004003d, + 0x0000000e,0x000000a2,0x00000019,0x0004003d,0x0000000e,0x000000a3,0x0000009d,0x000500c7, + 0x0000000e,0x000000a4,0x000000a2,0x000000a3,0x0003003e,0x000000a1,0x000000a4,0x0004003d, + 0x0000000e,0x000000a6,0x0000001a,0x00050082,0x0000000e,0x000000a7,0x000000a6,0x0000007c, + 0x000500c4,0x0000000e,0x000000a8,0x0000007c,0x000000a7,0x0003003e,0x000000a5,0x000000a8, + 0x0004003d,0x0000000e,0x000000a9,0x00000099,0x0004003d,0x0000000e,0x000000aa,0x000000a1, + 0x0004003d,0x0000000e,0x000000ab,0x000000a5,0x000500ac,0x00000053,0x000000ac,0x000000aa, + 0x000000ab,0x000400a8,0x00000053,0x000000ad,0x000000ac,0x000300f7,0x000000af,0x00000000, + 0x000400fa,0x000000ad,0x000000ae,0x000000af,0x000200f8,0x000000ae,0x0004003d,0x0000000e, + 0x000000b0,0x000000a1,0x0004003d,0x0000000e,0x000000b1,0x000000a5,0x000500aa,0x00000053, + 0x000000b2,0x000000b0,0x000000b1,0x000300f7,0x000000b4,0x00000000,0x000400fa,0x000000b2, + 0x000000b3,0x000000b4,0x000200f8,0x000000b3,0x0004003d,0x0000000e,0x000000b5,0x00000099, + 0x000500c7,0x0000000e,0x000000b6,0x000000b5,0x0000007c,0x000500ab,0x00000053,0x000000b8, + 0x000000b6,0x000000b7,0x000200f9,0x000000b4,0x000200f8,0x000000b4,0x000700f5,0x00000053, + 0x000000b9,0x000000b2,0x000000ae,0x000000b8,0x000000b3,0x000200f9,0x000000af,0x000200f8, + 0x000000af,0x000700f5,0x00000053,0x000000ba,0x000000ac,0x0000001c,0x000000b9,0x000000b4, + 0x000600a9,0x0000000e,0x000000bb,0x000000ba,0x0000007c,0x000000b7,0x00050080,0x0000000e, + 0x000000bc,0x000000a9,0x000000bb,0x000200fe,0x000000bc,0x00010038,0x00050036,0x0000000e, + 0x0000001f,0x00000000,0x0000001d,0x00030037,0x00000013,0x0000001e,0x000200f8,0x00000020, + 0x0004003b,0x000000bf,0x000000c0,0x00000007,0x0004003b,0x00000013,0x000000dc,0x00000007, + 0x0004003b,0x00000013,0x000000e2,0x00000007,0x0004003b,0x00000013,0x000000e8,0x00000007, + 0x0004003b,0x00000013,0x000000ef,0x00000007,0x0004003b,0x00000013,0x000000f6,0x00000007, + 0x0004003b,0x00000013,0x000000f9,0x00000007,0x0004003b,0x00000013,0x00000102,0x00000007, + 0x0004003b,0x00000013,0x00000105,0x00000007,0x0004003b,0x00000013,0x0000010e,0x00000007, + 0x0004003b,0x00000013,0x00000110,0x00000007,0x0004003b,0x00000013,0x00000115,0x00000007, + 0x0004003b,0x00000013,0x00000118,0x00000007,0x0004003b,0x00000013,0x0000011a,0x00000007, + 0x0004003b,0x00000013,0x0000011c,0x00000007,0x0004003b,0x00000013,0x00000130,0x00000007, + 0x0004003d,0x0000000e,0x000000c1,0x0000001e,0x000500c7,0x0000000e,0x000000c3,0x000000c1, + 0x000000c2,0x000500aa,0x00000053,0x000000c4,0x000000c3,0x000000c2,0x000300f7,0x000000c6, + 0x00000000,0x000400fa,0x000000c4,0x000000c5,0x000000c6,0x000200f8,0x000000c5,0x0004003d, + 0x0000000e,0x000000c7,0x0000001e,0x000500c7,0x0000000e,0x000000c9,0x000000c7,0x000000c8, + 0x000500ab,0x00000053,0x000000ca,0x000000c9,0x000000b7,0x000200f9,0x000000c6,0x000200f8, + 0x000000c6,0x000700f5,0x00000053,0x000000cb,0x000000c4,0x00000020,0x000000ca,0x000000c5, + 0x0003003e,0x000000c0,0x000000cb,0x0004003d,0x00000053,0x000000cc,0x000000c0,0x000300f7, + 0x000000ce,0x00000000,0x000400fa,0x000000cc,0x000000cd,0x000000ce,0x000200f8,0x000000cd, + 0x000200fe,0x000000b7,0x000200f8,0x000000ce,0x0004003d,0x0000000e,0x000000d0,0x0000001e, + 0x000500c7,0x0000000e,0x000000d2,0x000000d0,0x000000d1,0x000500aa,0x00000053,0x000000d3, + 0x000000d2,0x000000b7,0x000300f7,0x000000d5,0x00000000,0x000400fa,0x000000d3,0x000000d4, + 0x000000d5,0x000200f8,0x000000d4,0x0004003d,0x0000000e,0x000000d6,0x0000001e,0x000500c2, + 0x0000000e,0x000000d8,0x000000d6,0x000000d7,0x000500c7,0x0000000e,0x000000da,0x000000d8, + 0x000000d9,0x000200fe,0x000000da,0x000200f8,0x000000d5,0x0004003d,0x0000000e,0x000000dd, + 0x0000001e,0x000500c7,0x0000000e,0x000000df,0x000000dd,0x000000de,0x000500ab,0x00000053, + 0x000000e0,0x000000df,0x000000b7,0x000600a9,0x0000000e,0x000000e1,0x000000e0,0x000000d9, + 0x000000b7,0x0003003e,0x000000dc,0x000000e1,0x0004003d,0x0000000e,0x000000e3,0x0000001e, + 0x000500c2,0x0000000e,0x000000e5,0x000000e3,0x000000e4,0x000500c7,0x0000000e,0x000000e7, + 0x000000e5,0x000000e6,0x0003003e,0x000000e2,0x000000e7,0x0004003d,0x0000000e,0x000000e9, + 0x0000001e,0x000500c7,0x0000000e,0x000000ea,0x000000e9,0x000000c8,0x0003003e,0x000000e8, + 0x000000ea,0x0004003d,0x0000000e,0x000000eb,0x000000e2,0x000500aa,0x00000053,0x000000ec, + 0x000000eb,0x000000e6,0x000300f7,0x000000ee,0x00000000,0x000400fa,0x000000ec,0x000000ed, + 0x000000f1,0x000200f8,0x000000ed,0x0003003e,0x000000ef,0x000000f0,0x000200f9,0x000000ee, + 0x000200f8,0x000000f1,0x0004003d,0x0000000e,0x000000f2,0x000000e2,0x000500b2,0x00000053, + 0x000000f3,0x000000f2,0x000000d7,0x000300f7,0x000000f5,0x00000000,0x000400fa,0x000000f3, + 0x000000f4,0x00000114,0x000200f8,0x000000f4,0x0004003d,0x0000000e,0x000000f7,0x000000e2, + 0x000500aa,0x00000053,0x000000f8,0x000000f7,0x000000b7,0x000300f7,0x000000fb,0x00000000, + 0x000400fa,0x000000f8,0x000000fa,0x000000fd,0x000200f8,0x000000fa,0x0004003d,0x0000000e, + 0x000000fc,0x000000e8,0x0003003e,0x000000f9,0x000000fc,0x000200f9,0x000000fb,0x000200f8, + 0x000000fd,0x0004003d,0x0000000e,0x000000ff,0x000000e8,0x00050080,0x0000000e,0x00000100, + 0x000000fe,0x000000ff,0x0003003e,0x000000f9,0x00000100,0x000200f9,0x000000fb,0x000200f8, + 0x000000fb,0x0004003d,0x0000000e,0x00000101,0x000000f9,0x0003003e,0x000000f6,0x00000101, + 0x0004003d,0x0000000e,0x00000103,0x000000e2,0x000500aa,0x00000053,0x00000104,0x00000103, + 0x000000b7,0x000300f7,0x00000107,0x00000000,0x000400fa,0x00000104,0x00000106,0x00000109, + 0x000200f8,0x00000106,0x0003003e,0x00000105,0x00000108,0x000200f9,0x00000107,0x000200f8, + 0x00000109,0x0004003d,0x0000000e,0x0000010b,0x000000e2,0x00050082,0x0000000e,0x0000010c, + 0x0000010a,0x0000010b,0x0003003e,0x00000105,0x0000010c,0x000200f9,0x00000107,0x000200f8, + 0x00000107,0x0004003d,0x0000000e,0x0000010d,0x00000105,0x0003003e,0x00000102,0x0000010d, + 0x0004003d,0x0000000e,0x0000010f,0x000000f6,0x0003003e,0x0000010e,0x0000010f,0x0004003d, + 0x0000000e,0x00000111,0x00000102,0x0003003e,0x00000110,0x00000111,0x00060039,0x0000000e, + 0x00000112,0x0000001b,0x0000010e,0x00000110,0x0007000c,0x0000000e,0x00000113,0x00000001, + 0x00000026,0x00000112,0x000000d7,0x0003003e,0x000000ef,0x00000113,0x000200f9,0x000000f5, + 0x000200f8,0x00000114,0x0004003d,0x0000000e,0x00000116,0x000000e2,0x00050082,0x0000000e, + 0x00000117,0x00000116,0x000000d7,0x0003003e,0x00000115,0x00000117,0x0004003d,0x0000000e, + 0x0000011b,0x000000e8,0x0003003e,0x0000011a,0x0000011b,0x0003003e,0x0000011c,0x00000119, + 0x00060039,0x0000000e,0x0000011d,0x0000001b,0x0000011a,0x0000011c,0x0003003e,0x00000118, + 0x0000011d,0x0004003d,0x0000000e,0x0000011e,0x00000118,0x000500aa,0x00000053,0x0000011f, + 0x0000011e,0x000000d7,0x000300f7,0x00000121,0x00000000,0x000400fa,0x0000011f,0x00000120, + 0x00000121,0x000200f8,0x00000120,0x0003003e,0x00000118,0x000000b7,0x0004003d,0x0000000e, + 0x00000122,0x00000115,0x00050080,0x0000000e,0x00000123,0x00000122,0x0000007c,0x0003003e, + 0x00000115,0x00000123,0x000200f9,0x00000121,0x000200f8,0x00000121,0x0004003d,0x0000000e, + 0x00000124,0x00000115,0x000500ac,0x00000053,0x00000125,0x00000124,0x00000108,0x000400a8, + 0x00000053,0x00000126,0x00000125,0x000300f7,0x00000128,0x00000000,0x000400fa,0x00000126, + 0x00000127,0x00000128,0x000200f8,0x00000127,0x0004003d,0x0000000e,0x00000129,0x00000115, + 0x000500aa,0x00000053,0x0000012a,0x00000129,0x00000108,0x0004003d,0x0000000e,0x0000012b, + 0x00000118,0x000500ac,0x00000053,0x0000012d,0x0000012b,0x0000012c,0x000500a7,0x00000053, + 0x0000012e,0x0000012a,0x0000012d,0x000200f9,0x00000128,0x000200f8,0x00000128,0x000700f5, + 0x00000053,0x0000012f,0x00000125,0x00000121,0x0000012e,0x00000127,0x000300f7,0x00000132, + 0x00000000,0x000400fa,0x0000012f,0x00000131,0x00000133,0x000200f8,0x00000131,0x0003003e, + 0x00000130,0x000000f0,0x000200f9,0x00000132,0x000200f8,0x00000133,0x0004003d,0x0000000e, + 0x00000134,0x00000115,0x000500c4,0x0000000e,0x00000136,0x00000134,0x00000135,0x0004003d, + 0x0000000e,0x00000137,0x00000118,0x000500c5,0x0000000e,0x00000138,0x00000136,0x00000137, + 0x0003003e,0x00000130,0x00000138,0x000200f9,0x00000132,0x000200f8,0x00000132,0x0004003d, + 0x0000000e,0x00000139,0x00000130,0x0003003e,0x000000ef,0x00000139,0x000200f9,0x000000f5, + 0x000200f8,0x000000f5,0x000200f9,0x000000ee,0x000200f8,0x000000ee,0x0004003d,0x0000000e, + 0x0000013a,0x000000dc,0x0004003d,0x0000000e,0x0000013b,0x000000ef,0x000500c5,0x0000000e, + 0x0000013c,0x0000013a,0x0000013b,0x000200fe,0x0000013c,0x00010038,0x00050036,0x00000021, + 0x00000024,0x00000000,0x00000022,0x00030037,0x00000013,0x00000023,0x000200f8,0x00000025, + 0x0004003d,0x0000000e,0x0000013f,0x00000023,0x00040071,0x00000021,0x00000140,0x0000013f, + 0x000200fe,0x00000140,0x00010038,0x00050036,0x00000006,0x00000028,0x00000000,0x00000026, + 0x00030037,0x0000000d,0x00000027,0x000200f8,0x00000029,0x0004003b,0x00000013,0x00000143, + 0x00000007,0x0004003b,0x0000000d,0x00000144,0x00000007,0x0004003b,0x00000007,0x0000014a, + 0x00000007,0x0004003b,0x00000013,0x00000154,0x00000007,0x0004003d,0x0000000c,0x00000145, + 0x00000027,0x0003003e,0x00000144,0x00000145,0x00050039,0x0000000e,0x00000146,0x00000011, + 0x00000144,0x0003003e,0x00000143,0x00000146,0x0004003d,0x0000000e,0x00000147,0x00000143, + 0x000500ae,0x00000053,0x00000149,0x00000147,0x00000148,0x000300f7,0x0000014c,0x00000000, + 0x000400fa,0x00000149,0x0000014b,0x0000014e,0x000200f8,0x0000014b,0x0003003e,0x0000014a, + 0x0000014d,0x000200f9,0x0000014c,0x000200f8,0x0000014e,0x0004003d,0x0000000c,0x00000150, + 0x00000027,0x00040073,0x00000006,0x00000151,0x00000150,0x0004003d,0x0000000e,0x00000152, + 0x00000143,0x00050080,0x0000000e,0x00000153,0x00000152,0x0000007c,0x0003003e,0x00000154, + 0x00000153,0x00050039,0x0000000c,0x00000155,0x00000016,0x00000154,0x00040073,0x00000006, + 0x00000156,0x00000155,0x00050081,0x00000006,0x00000157,0x00000151,0x00000156,0x00050085, + 0x00000006,0x00000158,0x0000014f,0x00000157,0x0003003e,0x0000014a,0x00000158,0x000200f9, + 0x0000014c,0x000200f8,0x0000014c,0x0004003d,0x00000006,0x00000159,0x0000014a,0x000200fe, + 0x00000159,0x00010038,0x00050036,0x00000006,0x0000002b,0x00000000,0x00000026,0x00030037, + 0x0000000d,0x0000002a,0x000200f8,0x0000002c,0x0004003b,0x0000000d,0x0000015e,0x00000007, + 0x0004003b,0x00000013,0x00000162,0x00000007,0x0004003d,0x0000000c,0x0000015c,0x0000002a, + 0x00040073,0x00000006,0x0000015d,0x0000015c,0x0004003d,0x0000000c,0x0000015f,0x0000002a, + 0x0003003e,0x0000015e,0x0000015f,0x00050039,0x0000000e,0x00000160,0x00000011,0x0000015e, + 0x00050082,0x0000000e,0x00000161,0x00000160,0x0000007c,0x0003003e,0x00000162,0x00000161, + 0x00050039,0x0000000c,0x00000163,0x00000016,0x00000162,0x00040073,0x00000006,0x00000164, + 0x00000163,0x00050081,0x00000006,0x00000165,0x0000015d,0x00000164,0x00050085,0x00000006, + 0x00000166,0x0000014f,0x00000165,0x000200fe,0x00000166,0x00010038,0x00050036,0x0000000c, + 0x0000002f,0x00000000,0x0000002d,0x00030037,0x0000000d,0x0000002e,0x000200f8,0x00000030, + 0x0004003b,0x0000000d,0x00000169,0x00000007,0x0004003b,0x00000013,0x0000016d,0x00000007, + 0x0004003d,0x0000000c,0x0000016a,0x0000002e,0x0003003e,0x00000169,0x0000016a,0x00050039, + 0x0000000e,0x0000016b,0x00000011,0x00000169,0x00050080,0x0000000e,0x0000016c,0x0000016b, + 0x0000007c,0x0003003e,0x0000016d,0x0000016c,0x00050039,0x0000000c,0x0000016e,0x00000016, + 0x0000016d,0x000200fe,0x0000016e,0x00010038,0x00050036,0x0000000c,0x00000032,0x00000000, + 0x0000002d,0x00030037,0x0000000d,0x00000031,0x000200f8,0x00000033,0x0004003b,0x0000000d, + 0x00000171,0x00000007,0x0004003b,0x00000013,0x00000175,0x00000007,0x0004003d,0x0000000c, + 0x00000172,0x00000031,0x0003003e,0x00000171,0x00000172,0x00050039,0x0000000e,0x00000173, + 0x00000011,0x00000171,0x00050082,0x0000000e,0x00000174,0x00000173,0x0000007c,0x0003003e, + 0x00000175,0x00000174,0x00050039,0x0000000c,0x00000176,0x00000016,0x00000175,0x000200fe, + 0x00000176,0x00010038,0x00050036,0x0000000c,0x00000035,0x00000000,0x0000002d,0x00030037, + 0x0000000d,0x00000034,0x000200f8,0x00000036,0x0004003b,0x00000007,0x00000179,0x00000007, + 0x0004003b,0x0000000d,0x0000018d,0x00000007,0x0004003b,0x00000007,0x00000190,0x00000007, + 0x0004003b,0x0000019e,0x0000019f,0x00000007,0x0004003b,0x00000007,0x000001a9,0x00000007, + 0x0004003b,0x0000000d,0x000001aa,0x00000007,0x0004003b,0x0000000d,0x000001b3,0x00000007, + 0x0004003b,0x00000007,0x000001b6,0x00000007,0x0004003b,0x0000000d,0x000001b7,0x00000007, + 0x0004003b,0x0000000d,0x000001c3,0x00000007,0x0004003d,0x0000000c,0x0000017a,0x00000034, + 0x00040073,0x00000006,0x0000017b,0x0000017a,0x0003003e,0x00000179,0x0000017b,0x0004003d, + 0x00000006,0x0000017c,0x00000179,0x000500ba,0x00000053,0x0000017e,0x0000017c,0x0000017d, + 0x000400a8,0x00000053,0x0000017f,0x0000017e,0x000400a8,0x00000053,0x00000180,0x0000017f, + 0x000300f7,0x00000182,0x00000000,0x000400fa,0x00000180,0x00000181,0x00000182,0x000200f8, + 0x00000181,0x0004003d,0x00000006,0x00000183,0x00000179,0x0004009d,0x00000053,0x00000184, + 0x00000183,0x000200f9,0x00000182,0x000200f8,0x00000182,0x000700f5,0x00000053,0x00000185, + 0x0000017f,0x00000036,0x00000184,0x00000181,0x000300f7,0x00000187,0x00000000,0x000400fa, + 0x00000185,0x00000186,0x00000187,0x000200f8,0x00000186,0x0004003d,0x00000006,0x00000189, + 0x00000179,0x00050088,0x00000006,0x0000018a,0x00000188,0x00000189,0x00040073,0x0000000c, + 0x0000018b,0x0000018a,0x000200fe,0x0000018b,0x000200f8,0x00000187,0x0004003d,0x00000006, + 0x0000018e,0x00000179,0x00050088,0x00000006,0x0000018f,0x00000188,0x0000018e,0x0003003e, + 0x00000190,0x0000018f,0x00050039,0x00000006,0x00000191,0x0000000a,0x00000190,0x00040073, + 0x0000000c,0x00000192,0x00000191,0x0003003e,0x0000018d,0x00000192,0x0004003d,0x0000000c, + 0x00000193,0x0000018d,0x0004009d,0x00000053,0x00000194,0x00000193,0x0004003d,0x0000000c, + 0x00000195,0x0000018d,0x000500b4,0x00000053,0x00000197,0x00000195,0x00000196,0x000500a6, + 0x00000053,0x00000198,0x00000194,0x00000197,0x000300f7,0x0000019a,0x00000000,0x000400fa, + 0x00000198,0x00000199,0x0000019a,0x000200f8,0x00000199,0x0004003d,0x0000000c,0x0000019b, + 0x0000018d,0x000200fe,0x0000019b,0x000200f8,0x0000019a,0x0003003e,0x0000019f,0x000001a0, + 0x000200f9,0x000001a1,0x000200f8,0x000001a1,0x000400f6,0x000001a3,0x000001a4,0x00000000, + 0x000200f9,0x000001a5,0x000200f8,0x000001a5,0x0004003d,0x0000019d,0x000001a6,0x0000019f, + 0x000500b1,0x00000053,0x000001a8,0x000001a6,0x000001a7,0x000400fa,0x000001a8,0x000001a2, + 0x000001a3,0x000200f8,0x000001a2,0x0004003d,0x0000000c,0x000001ab,0x0000018d,0x0003003e, + 0x000001aa,0x000001ab,0x00050039,0x00000006,0x000001ac,0x00000028,0x000001aa,0x0004003d, + 0x00000006,0x000001ad,0x00000179,0x00050085,0x00000006,0x000001ae,0x000001ac,0x000001ad, + 0x0003003e,0x000001a9,0x000001ae,0x0004003d,0x00000006,0x000001af,0x000001a9,0x000500b8, + 0x00000053,0x000001b0,0x000001af,0x00000188,0x000300f7,0x000001b2,0x00000000,0x000400fa, + 0x000001b0,0x000001b1,0x000001b2,0x000200f8,0x000001b1,0x0004003d,0x0000000c,0x000001b4, + 0x0000018d,0x0003003e,0x000001b3,0x000001b4,0x00050039,0x0000000c,0x000001b5,0x0000002f, + 0x000001b3,0x0003003e,0x0000018d,0x000001b5,0x000200f9,0x000001b2,0x000200f8,0x000001b2, + 0x0004003d,0x0000000c,0x000001b8,0x0000018d,0x0003003e,0x000001b7,0x000001b8,0x00050039, + 0x00000006,0x000001b9,0x0000002b,0x000001b7,0x0004003d,0x00000006,0x000001ba,0x00000179, + 0x00050085,0x00000006,0x000001bb,0x000001b9,0x000001ba,0x0003003e,0x000001b6,0x000001bb, + 0x0004003d,0x0000000c,0x000001bc,0x0000018d,0x000500ba,0x00000053,0x000001bd,0x000001bc, + 0x00000196,0x0004003d,0x00000006,0x000001be,0x000001b6,0x000500ba,0x00000053,0x000001bf, + 0x000001be,0x00000188,0x000500a7,0x00000053,0x000001c0,0x000001bd,0x000001bf,0x000300f7, + 0x000001c2,0x00000000,0x000400fa,0x000001c0,0x000001c1,0x000001c2,0x000200f8,0x000001c1, + 0x0004003d,0x0000000c,0x000001c4,0x0000018d,0x0003003e,0x000001c3,0x000001c4,0x00050039, + 0x0000000c,0x000001c5,0x00000032,0x000001c3,0x0003003e,0x0000018d,0x000001c5,0x000200f9, + 0x000001c2,0x000200f8,0x000001c2,0x000200f9,0x000001a4,0x000200f8,0x000001a4,0x0004003d, + 0x0000019d,0x000001c6,0x0000019f,0x00050080,0x0000019d,0x000001c8,0x000001c6,0x000001c7, + 0x0003003e,0x0000019f,0x000001c8,0x000200f9,0x000001a1,0x000200f8,0x000001a3,0x0004003d, + 0x0000000c,0x000001c9,0x0000018d,0x000200fe,0x000001c9,0x00010038,0x00050036,0x0000000e, + 0x00000038,0x00000000,0x0000001d,0x00030037,0x00000013,0x00000037,0x000200f8,0x00000039, + 0x0004003b,0x00000013,0x000001cc,0x00000007,0x0004003b,0x00000013,0x000001d0,0x00000007, + 0x0004003b,0x00000013,0x000001d3,0x00000007,0x0004003b,0x00000013,0x000001da,0x00000007, + 0x0004003d,0x0000000e,0x000001cd,0x00000037,0x000500c2,0x0000000e,0x000001cf,0x000001cd, + 0x000001ce,0x0003003e,0x000001cc,0x000001cf,0x0004003d,0x0000000e,0x000001d1,0x00000037, + 0x000500c7,0x0000000e,0x000001d2,0x000001d1,0x00000108,0x0003003e,0x000001d0,0x000001d2, + 0x0004003d,0x0000000e,0x000001d4,0x000001cc,0x000500c7,0x0000000e,0x000001d5,0x000001d4, + 0x0000007c,0x00050084,0x0000000e,0x000001d6,0x000001d5,0x000001ce,0x0004003d,0x0000000e, + 0x000001d7,0x000001d0,0x000500c7,0x0000000e,0x000001d8,0x000001d7,0x00000135,0x00050080, + 0x0000000e,0x000001d9,0x000001d6,0x000001d8,0x0003003e,0x000001d3,0x000001d9,0x0004003d, + 0x0000000e,0x000001db,0x000001cc,0x000500c2,0x0000000e,0x000001dc,0x000001db,0x0000007c, + 0x00050084,0x0000000e,0x000001dd,0x000001dc,0x000001ce,0x0004003d,0x0000000e,0x000001de, + 0x000001d0,0x000500c2,0x0000000e,0x000001e0,0x000001de,0x000001df,0x00050080,0x0000000e, + 0x000001e1,0x000001dd,0x000001e0,0x0003003e,0x000001da,0x000001e1,0x0004003d,0x0000000e, + 0x000001e2,0x000001da,0x00050084,0x0000000e,0x000001e3,0x000001e2,0x000000d7,0x0004003d, + 0x0000000e,0x000001e4,0x000001d3,0x00050080,0x0000000e,0x000001e5,0x000001e3,0x000001e4, + 0x000200fe,0x000001e5,0x00010038,0x00050036,0x0000000c,0x0000003b,0x00000000,0x0000002d, + 0x00030037,0x0000000d,0x0000003a,0x000200f8,0x0000003c,0x0004003b,0x00000007,0x000001e8, + 0x00000007,0x0004003b,0x0000000d,0x000001ee,0x00000007,0x0004003b,0x00000007,0x000001ef, + 0x00000007,0x0004003b,0x00000013,0x000001f6,0x00000007,0x0004003b,0x0000000d,0x000001f7, + 0x00000007,0x0004003b,0x00000013,0x000001fa,0x00000007,0x0004003b,0x00000013,0x00000200, + 0x00000007,0x0004003d,0x0000000c,0x000001e9,0x0000003a,0x00040073,0x00000006,0x000001ea, + 0x000001e9,0x0008000c,0x00000006,0x000001ed,0x00000001,0x00000032,0x000001ea,0x000001eb, + 0x000001ec,0x0003003e,0x000001e8,0x000001ed,0x0004003d,0x00000006,0x000001f0,0x000001e8, + 0x0003003e,0x000001ef,0x000001f0,0x00050039,0x00000006,0x000001f1,0x0000000a,0x000001ef, + 0x00040073,0x0000000c,0x000001f2,0x000001f1,0x0008000c,0x0000000c,0x000001f5,0x00000001, + 0x0000002b,0x000001f2,0x000001f3,0x000001f4,0x0003003e,0x000001ee,0x000001f5,0x0004003d, + 0x0000000c,0x000001f8,0x000001ee,0x0003003e,0x000001f7,0x000001f8,0x00050039,0x0000000e, + 0x000001f9,0x00000011,0x000001f7,0x0003003e,0x000001f6,0x000001f9,0x0004003d,0x0000000e, + 0x000001fb,0x000001f6,0x000500c4,0x0000000e,0x000001fd,0x000001fb,0x000001fc,0x00050080, + 0x0000000e,0x000001fe,0x000001fd,0x000000de,0x000500c7,0x0000000e,0x000001ff,0x000001fe, + 0x00000093,0x0003003e,0x000001fa,0x000001ff,0x0004003d,0x0000000e,0x00000201,0x000001fa, + 0x0003003e,0x00000200,0x00000201,0x00050039,0x0000000c,0x00000202,0x00000016,0x00000200, + 0x000200fe,0x00000202,0x00010038,0x00050036,0x0000000c,0x00000041,0x00000000,0x0000003d, + 0x00030037,0x00000013,0x0000003e,0x00030037,0x00000013,0x0000003f,0x00030037,0x00000013, + 0x00000040,0x000200f8,0x00000042,0x0004003b,0x00000013,0x00000205,0x00000007,0x0004003b, + 0x0000000d,0x0000020a,0x00000007,0x0004003b,0x0000000d,0x0000021f,0x00000007,0x0004003b, + 0x0000000d,0x00000230,0x00000007,0x0004003b,0x0000000d,0x00000242,0x00000007,0x0004003b, + 0x0000000d,0x00000254,0x00000007,0x0004003b,0x0000000d,0x00000258,0x00000007,0x0004003d, + 0x0000000e,0x00000206,0x0000003f,0x00050084,0x0000000e,0x00000207,0x00000206,0x000001df, + 0x0004003d,0x0000000e,0x00000208,0x00000040,0x00050080,0x0000000e,0x00000209,0x00000207, + 0x00000208,0x0003003e,0x00000205,0x00000209,0x0004003d,0x0000000e,0x0000020f,0x0000003e, + 0x00050084,0x0000000e,0x00000211,0x0000020f,0x00000210,0x0004003d,0x0000000e,0x00000212, + 0x00000205,0x00050080,0x0000000e,0x00000213,0x00000211,0x00000212,0x00050041,0x00000214, + 0x00000215,0x0000020e,0x00000213,0x0006003d,0x0000000c,0x00000216,0x00000215,0x00000030, + 0x000001df,0x0004003d,0x0000000e,0x00000217,0x0000003e,0x00050084,0x0000000e,0x00000218, + 0x00000217,0x00000210,0x0004003d,0x0000000e,0x00000219,0x00000205,0x00050080,0x0000000e, + 0x0000021a,0x00000218,0x00000219,0x00050080,0x0000000e,0x0000021b,0x0000021a,0x000000d7, + 0x00050041,0x00000214,0x0000021c,0x0000020e,0x0000021b,0x0006003d,0x0000000c,0x0000021d, + 0x0000021c,0x00000030,0x000001df,0x00050081,0x0000000c,0x0000021e,0x00000216,0x0000021d, + 0x0003003e,0x0000020a,0x0000021e,0x0004003d,0x0000000e,0x00000220,0x0000003e,0x00050084, + 0x0000000e,0x00000221,0x00000220,0x00000210,0x0004003d,0x0000000e,0x00000222,0x00000205, + 0x00050080,0x0000000e,0x00000223,0x00000221,0x00000222,0x00050080,0x0000000e,0x00000224, + 0x00000223,0x0000010a,0x00050041,0x00000214,0x00000225,0x0000020e,0x00000224,0x0006003d, + 0x0000000c,0x00000226,0x00000225,0x00000030,0x000001df,0x0004003d,0x0000000e,0x00000227, + 0x0000003e,0x00050084,0x0000000e,0x00000228,0x00000227,0x00000210,0x0004003d,0x0000000e, + 0x00000229,0x00000205,0x00050080,0x0000000e,0x0000022a,0x00000228,0x00000229,0x00050080, + 0x0000000e,0x0000022c,0x0000022a,0x0000022b,0x00050041,0x00000214,0x0000022d,0x0000020e, + 0x0000022c,0x0006003d,0x0000000c,0x0000022e,0x0000022d,0x00000030,0x000001df,0x00050081, + 0x0000000c,0x0000022f,0x00000226,0x0000022e,0x0003003e,0x0000021f,0x0000022f,0x0004003d, + 0x0000000e,0x00000231,0x0000003e,0x00050084,0x0000000e,0x00000232,0x00000231,0x00000210, + 0x0004003d,0x0000000e,0x00000233,0x00000205,0x00050080,0x0000000e,0x00000234,0x00000232, + 0x00000233,0x00050080,0x0000000e,0x00000236,0x00000234,0x00000235,0x00050041,0x00000214, + 0x00000237,0x0000020e,0x00000236,0x0006003d,0x0000000c,0x00000238,0x00000237,0x00000030, + 0x000001df,0x0004003d,0x0000000e,0x00000239,0x0000003e,0x00050084,0x0000000e,0x0000023a, + 0x00000239,0x00000210,0x0004003d,0x0000000e,0x0000023b,0x00000205,0x00050080,0x0000000e, + 0x0000023c,0x0000023a,0x0000023b,0x00050080,0x0000000e,0x0000023e,0x0000023c,0x0000023d, + 0x00050041,0x00000214,0x0000023f,0x0000020e,0x0000023e,0x0006003d,0x0000000c,0x00000240, + 0x0000023f,0x00000030,0x000001df,0x00050081,0x0000000c,0x00000241,0x00000238,0x00000240, + 0x0003003e,0x00000230,0x00000241,0x0004003d,0x0000000e,0x00000243,0x0000003e,0x00050084, + 0x0000000e,0x00000244,0x00000243,0x00000210,0x0004003d,0x0000000e,0x00000245,0x00000205, + 0x00050080,0x0000000e,0x00000246,0x00000244,0x00000245,0x00050080,0x0000000e,0x00000248, + 0x00000246,0x00000247,0x00050041,0x00000214,0x00000249,0x0000020e,0x00000248,0x0006003d, + 0x0000000c,0x0000024a,0x00000249,0x00000030,0x000001df,0x0004003d,0x0000000e,0x0000024b, + 0x0000003e,0x00050084,0x0000000e,0x0000024c,0x0000024b,0x00000210,0x0004003d,0x0000000e, + 0x0000024d,0x00000205,0x00050080,0x0000000e,0x0000024e,0x0000024c,0x0000024d,0x00050080, + 0x0000000e,0x00000250,0x0000024e,0x0000024f,0x00050041,0x00000214,0x00000251,0x0000020e, + 0x00000250,0x0006003d,0x0000000c,0x00000252,0x00000251,0x00000030,0x000001df,0x00050081, + 0x0000000c,0x00000253,0x0000024a,0x00000252,0x0003003e,0x00000242,0x00000253,0x0004003d, + 0x0000000c,0x00000255,0x0000020a,0x0004003d,0x0000000c,0x00000256,0x0000021f,0x00050081, + 0x0000000c,0x00000257,0x00000255,0x00000256,0x0003003e,0x00000254,0x00000257,0x0004003d, + 0x0000000c,0x00000259,0x00000254,0x0004003d,0x0000000c,0x0000025a,0x00000230,0x00050081, + 0x0000000c,0x0000025b,0x00000259,0x0000025a,0x0003003e,0x00000258,0x0000025b,0x0004003d, + 0x0000000c,0x0000025c,0x00000258,0x0004003d,0x0000000c,0x0000025d,0x00000242,0x00050081, + 0x0000000c,0x0000025e,0x0000025c,0x0000025d,0x000200fe,0x0000025e,0x00010038,0x00050036, + 0x0000000c,0x00000044,0x00000000,0x00000014,0x00030037,0x00000013,0x00000043,0x000200f8, + 0x00000045,0x0004003b,0x0000000d,0x00000261,0x00000007,0x0004003b,0x00000013,0x00000262, + 0x00000007,0x0004003b,0x00000013,0x00000264,0x00000007,0x0004003b,0x00000013,0x00000265, + 0x00000007,0x0004003b,0x00000013,0x00000267,0x00000007,0x0004003b,0x00000013,0x00000269, + 0x00000007,0x0004003b,0x00000013,0x0000026a,0x00000007,0x0004003b,0x0000000d,0x0000026d, + 0x00000007,0x0004003b,0x00000013,0x0000026f,0x00000007,0x0004003b,0x00000013,0x00000271, + 0x00000007,0x0004003b,0x00000013,0x00000272,0x00000007,0x0004003b,0x0000000d,0x00000275, + 0x00000007,0x0004003b,0x00000013,0x00000277,0x00000007,0x0004003b,0x00000013,0x00000279, + 0x00000007,0x0004003b,0x00000013,0x0000027a,0x00000007,0x0004003b,0x0000000d,0x0000027d, + 0x00000007,0x0004003b,0x00000013,0x0000027e,0x00000007,0x0004003b,0x00000013,0x00000280, + 0x00000007,0x0004003b,0x00000013,0x00000281,0x00000007,0x0004003b,0x00000013,0x00000283, + 0x00000007,0x0004003b,0x00000013,0x00000285,0x00000007,0x0004003b,0x00000013,0x00000286, + 0x00000007,0x0004003b,0x0000000d,0x00000289,0x00000007,0x0004003b,0x00000013,0x0000028b, + 0x00000007,0x0004003b,0x00000013,0x0000028d,0x00000007,0x0004003b,0x00000013,0x0000028e, + 0x00000007,0x0004003b,0x0000000d,0x00000291,0x00000007,0x0004003b,0x00000013,0x00000293, + 0x00000007,0x0004003b,0x00000013,0x00000295,0x00000007,0x0004003b,0x00000013,0x00000296, + 0x00000007,0x0004003d,0x0000000e,0x00000263,0x00000043,0x0003003e,0x00000262,0x00000263, + 0x0003003e,0x00000264,0x000000b7,0x0003003e,0x00000265,0x000000b7,0x00070039,0x0000000c, + 0x00000266,0x00000041,0x00000262,0x00000264,0x00000265,0x0004003d,0x0000000e,0x00000268, + 0x00000043,0x0003003e,0x00000267,0x00000268,0x0003003e,0x00000269,0x0000007c,0x0003003e, + 0x0000026a,0x000000b7,0x00070039,0x0000000c,0x0000026b,0x00000041,0x00000267,0x00000269, + 0x0000026a,0x00050081,0x0000000c,0x0000026c,0x00000266,0x0000026b,0x0003003e,0x00000261, + 0x0000026c,0x0004003d,0x0000000c,0x0000026e,0x00000261,0x0004003d,0x0000000e,0x00000270, + 0x00000043,0x0003003e,0x0000026f,0x00000270,0x0003003e,0x00000271,0x000001df,0x0003003e, + 0x00000272,0x000000b7,0x00070039,0x0000000c,0x00000273,0x00000041,0x0000026f,0x00000271, + 0x00000272,0x00050081,0x0000000c,0x00000274,0x0000026e,0x00000273,0x0003003e,0x0000026d, + 0x00000274,0x0004003d,0x0000000c,0x00000276,0x0000026d,0x0004003d,0x0000000e,0x00000278, + 0x00000043,0x0003003e,0x00000277,0x00000278,0x0003003e,0x00000279,0x00000135,0x0003003e, + 0x0000027a,0x000000b7,0x00070039,0x0000000c,0x0000027b,0x00000041,0x00000277,0x00000279, + 0x0000027a,0x00050081,0x0000000c,0x0000027c,0x00000276,0x0000027b,0x0003003e,0x00000275, + 0x0000027c,0x0004003d,0x0000000e,0x0000027f,0x00000043,0x0003003e,0x0000027e,0x0000027f, + 0x0003003e,0x00000280,0x000000b7,0x0003003e,0x00000281,0x0000007c,0x00070039,0x0000000c, + 0x00000282,0x00000041,0x0000027e,0x00000280,0x00000281,0x0004003d,0x0000000e,0x00000284, + 0x00000043,0x0003003e,0x00000283,0x00000284,0x0003003e,0x00000285,0x0000007c,0x0003003e, + 0x00000286,0x0000007c,0x00070039,0x0000000c,0x00000287,0x00000041,0x00000283,0x00000285, + 0x00000286,0x00050081,0x0000000c,0x00000288,0x00000282,0x00000287,0x0003003e,0x0000027d, + 0x00000288,0x0004003d,0x0000000c,0x0000028a,0x0000027d,0x0004003d,0x0000000e,0x0000028c, + 0x00000043,0x0003003e,0x0000028b,0x0000028c,0x0003003e,0x0000028d,0x000001df,0x0003003e, + 0x0000028e,0x0000007c,0x00070039,0x0000000c,0x0000028f,0x00000041,0x0000028b,0x0000028d, + 0x0000028e,0x00050081,0x0000000c,0x00000290,0x0000028a,0x0000028f,0x0003003e,0x00000289, + 0x00000290,0x0004003d,0x0000000c,0x00000292,0x00000289,0x0004003d,0x0000000e,0x00000294, + 0x00000043,0x0003003e,0x00000293,0x00000294,0x0003003e,0x00000295,0x00000135,0x0003003e, + 0x00000296,0x0000007c,0x00070039,0x0000000c,0x00000297,0x00000041,0x00000293,0x00000295, + 0x00000296,0x00050081,0x0000000c,0x00000298,0x00000292,0x00000297,0x0003003e,0x00000291, + 0x00000298,0x0004003d,0x0000000c,0x00000299,0x00000275,0x0004003d,0x0000000c,0x0000029a, + 0x00000291,0x00050081,0x0000000c,0x0000029b,0x00000299,0x0000029a,0x000200fe,0x0000029b, + 0x00010038, +}; +inline constexpr uint32_t k_e4m3_k32_f16__global_attend[] = { + 0x07230203,0x00010600,0x0008000b,0x000004b0,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x00000027,0x00020011,0x0000003d,0x00020011, + 0x00001074,0x00020011,0x00001075,0x00020011,0x00001160,0x00020011,0x000014e1,0x00020011, + 0x00001786,0x0005000a,0x5f565053,0x5f545845,0x616f6c66,0x00003874,0x0008000a,0x5f565053, + 0x5f52484b,0x706f6f63,0x74617265,0x5f657669,0x7274616d,0x00007869,0x0006000b,0x00000001, + 0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000003,0x0010000f, + 0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000257,0x000002e1,0x000002e6,0x000002ef, + 0x00000308,0x0000032d,0x00000372,0x000003ba,0x000003d5,0x000003e9,0x0000049b,0x00060010, + 0x00000004,0x00000011,0x00000020,0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc, + 0x00090004,0x455f4c47,0x635f5458,0x72746e6f,0x665f6c6f,0x5f776f6c,0x72747461,0x74756269, + 0x00007365,0x00060004,0x455f4c47,0x665f5458,0x74616f6c,0x6d34655f,0x00000033,0x00080004, + 0x455f4c47,0x735f5458,0x65646168,0x36315f72,0x5f746962,0x726f7473,0x00656761,0x00080004, + 0x455f4c47,0x735f5458,0x65646168,0x62385f72,0x735f7469,0x61726f74,0x00006567,0x000b0004, + 0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d, + 0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79, + 0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45, + 0x64756c63,0x69645f65,0x74636572,0x00657669,0x00080004,0x4b5f4c47,0x635f5248,0x65706f6f, + 0x69746172,0x6d5f6576,0x69727461,0x00000078,0x00090004,0x4b5f4c47,0x6d5f5248,0x726f6d65, + 0x63735f79,0x5f65706f,0x616d6573,0x6369746e,0x00000073,0x00090004,0x4b5f4c47,0x735f5248, + 0x65646168,0x75735f72,0x6f726762,0x625f7075,0x63697361,0x00000000,0x00040005,0x00000004, + 0x6e69616d,0x00000000,0x00060005,0x0000000a,0x6e756f72,0x36314664,0x3b316628,0x00000000, + 0x00040005,0x00000009,0x756c6176,0x00000065,0x00060005,0x00000011,0x42363166,0x28737469, + 0x31363166,0x0000003b,0x00040005,0x00000010,0x756c6176,0x00000065,0x00060005,0x00000016, + 0x46363166,0x426d6f72,0x28737469,0x003b3175,0x00040005,0x00000015,0x73746962,0x00000000, + 0x00060005,0x0000001b,0x66696873,0x656e5274,0x3b317528,0x003b3175,0x00040005,0x00000019, + 0x756c6176,0x00000065,0x00040005,0x0000001a,0x66696873,0x00000074,0x00080005,0x0000001f, + 0x336d3465,0x65646f43,0x6d6f7246,0x42363146,0x28737469,0x003b3175,0x00050005,0x0000001e, + 0x666c6168,0x73746942,0x00000000,0x00080005,0x00000023,0x666c6168,0x7064694d,0x746e696f, + 0x766f6241,0x31662865,0x003b3136,0x00030005,0x00000022,0x00000068,0x00080005,0x00000026, + 0x666c6168,0x7064694d,0x746e696f,0x6f6c6542,0x31662877,0x003b3136,0x00030005,0x00000025, + 0x00000068,0x00060005,0x0000002a,0x666c6168,0x766f6241,0x31662865,0x003b3136,0x00030005, + 0x00000029,0x00000068,0x00060005,0x0000002d,0x666c6168,0x6f6c6542,0x31662877,0x003b3136, + 0x00030005,0x0000002c,0x00000068,0x00080005,0x00000030,0x69636572,0x636f7270,0x61486c61, + 0x6628666c,0x3b313631,0x00000000,0x00030005,0x0000002f,0x00000078,0x00080005,0x00000036, + 0x48616d66,0x28666c61,0x31363166,0x3631663b,0x31663b31,0x003b3136,0x00030005,0x00000033, + 0x00000061,0x00030005,0x00000034,0x00000062,0x00030005,0x00000035,0x00000063,0x00070005, + 0x00000039,0x45746976,0x65577078,0x74686769,0x36316628,0x00003b31,0x00040005,0x00000038, + 0x726f6373,0x00000065,0x00090005,0x00000040,0x74666f73,0x5078616d,0x28726961,0x753b3175, + 0x31753b31,0x3b31753b,0x00000000,0x00030005,0x0000003c,0x00776f72,0x00040005,0x0000003d, + 0x65736162,0x00000000,0x00040005,0x0000003e,0x72696170,0x00000000,0x00040005,0x0000003f, + 0x69726170,0x00007974,0x00070005,0x00000045,0x74666f73,0x3678616d,0x31752834,0x3b31753b, + 0x00000000,0x00030005,0x00000043,0x00776f72,0x00040005,0x00000044,0x65736162,0x00000000, + 0x00040005,0x00000047,0x73746962,0x00000000,0x00040005,0x0000004a,0x6e676973,0x00000000, + 0x00050005,0x0000004e,0x6e67616d,0x64757469,0x00000065,0x00040005,0x00000068,0x6c616373, + 0x00006465,0x00030005,0x00000079,0x0062736c,0x00040005,0x0000007f,0x6e756f72,0x00646564, + 0x00050005,0x0000009a,0x746f7571,0x746e6569,0x00000000,0x00060005,0x0000009e,0x616d6572, + 0x65646e69,0x73614d72,0x0000006b,0x00050005,0x000000a2,0x616d6572,0x65646e69,0x00000072, + 0x00040005,0x000000a6,0x666c6168,0x00796177,0x00040005,0x000000c1,0x614e7369,0x0000006e, + 0x00050005,0x000000dd,0x6167656e,0x65766974,0x00000000,0x00050005,0x000000e3,0x6f707865, + 0x746e656e,0x00000000,0x00050005,0x000000e9,0x746e616d,0x61737369,0x00000000,0x00040005, + 0x000000f0,0x65646f63,0x00000000,0x00050005,0x000000f7,0x6e676973,0x63696669,0x00646e61, + 0x00040005,0x00000103,0x66696873,0x00000074,0x00040005,0x0000010f,0x61726170,0x0000006d, + 0x00040005,0x00000111,0x61726170,0x0000006d,0x00050005,0x00000116,0x78453465,0x656e6f70, + 0x0000746e,0x00050005,0x00000119,0x614d3465,0x7369746e,0x00006173,0x00040005,0x0000011b, + 0x61726170,0x0000006d,0x00040005,0x0000011d,0x61726170,0x0000006d,0x00040005,0x00000140, + 0x73746962,0x00000000,0x00040005,0x00000141,0x61726170,0x0000006d,0x00040005,0x00000151, + 0x61726170,0x0000006d,0x00040005,0x0000015b,0x61726170,0x0000006d,0x00040005,0x0000015f, + 0x61726170,0x0000006d,0x00040005,0x00000166,0x61726170,0x0000006d,0x00040005,0x0000016a, + 0x61726170,0x0000006d,0x00040005,0x0000016e,0x61726170,0x0000006d,0x00040005,0x00000172, + 0x61726170,0x0000006d,0x00030005,0x00000176,0x00006678,0x00030005,0x0000018a,0x00000068, + 0x00040005,0x0000018d,0x61726170,0x0000006d,0x00030005,0x0000019c,0x00000069,0x00030005, + 0x000001a6,0x00007075,0x00040005,0x000001a7,0x61726170,0x0000006d,0x00040005,0x000001b0, + 0x61726170,0x0000006d,0x00040005,0x000001b3,0x6e776f64,0x00000000,0x00040005,0x000001b4, + 0x61726170,0x0000006d,0x00040005,0x000001c0,0x61726170,0x0000006d,0x00030005,0x000001c9, + 0x00000070,0x00030005,0x000001cf,0x00000074,0x00030005,0x000001d4,0x00007662,0x00030005, + 0x000001d8,0x00007661,0x00030005,0x000001dc,0x00000065,0x00050005,0x000001ef,0x6f707865, + 0x746e656e,0x00000000,0x00030005,0x000001fc,0x00706c75,0x00040005,0x00000204,0x70657473, + 0x00000073,0x00040005,0x00000221,0x61726170,0x0000006d,0x00040005,0x00000225,0x61726170, + 0x0000006d,0x00040005,0x0000022b,0x69666661,0x0000656e,0x00040005,0x0000022e,0x61726170, + 0x0000006d,0x00040005,0x00000230,0x61726170,0x0000006d,0x00040005,0x00000231,0x61726170, + 0x0000006d,0x00040005,0x00000237,0x73746962,0x00000000,0x00040005,0x00000238,0x61726170, + 0x0000006d,0x00060005,0x0000023b,0x6f707865,0x746e656e,0x426c6169,0x00737469,0x00040005, + 0x00000242,0x61726170,0x0000006d,0x00030005,0x00000247,0x0079656b,0x00060005,0x00000249, + 0x44444150,0x545f4445,0x4e454b4f,0x00000053,0x00030005,0x00000253,0x00000061,0x00040005, + 0x00000257,0x726f6373,0x00007365,0x00030005,0x00000261,0x00000062,0x00030005,0x0000026c, + 0x00000063,0x00030005,0x00000278,0x00000064,0x00030005,0x00000284,0x00006261,0x00030005, + 0x00000288,0x00636261,0x00030005,0x00000291,0x00003065,0x00040005,0x00000292,0x61726170, + 0x0000006d,0x00040005,0x00000294,0x61726170,0x0000006d,0x00040005,0x00000296,0x61726170, + 0x0000006d,0x00040005,0x00000297,0x61726170,0x0000006d,0x00040005,0x00000299,0x61726170, + 0x0000006d,0x00040005,0x0000029b,0x61726170,0x0000006d,0x00040005,0x0000029d,0x61726170, + 0x0000006d,0x00040005,0x0000029e,0x61726170,0x0000006d,0x00030005,0x000002a1,0x00003165, + 0x00040005,0x000002a3,0x61726170,0x0000006d,0x00040005,0x000002a5,0x61726170,0x0000006d, + 0x00040005,0x000002a7,0x61726170,0x0000006d,0x00040005,0x000002a8,0x61726170,0x0000006d, + 0x00040005,0x000002ab,0x6e657665,0x00000000,0x00040005,0x000002ad,0x61726170,0x0000006d, + 0x00040005,0x000002af,0x61726170,0x0000006d,0x00040005,0x000002b1,0x61726170,0x0000006d, + 0x00040005,0x000002b2,0x61726170,0x0000006d,0x00030005,0x000002b5,0x0000306f,0x00040005, + 0x000002b6,0x61726170,0x0000006d,0x00040005,0x000002b8,0x61726170,0x0000006d,0x00040005, + 0x000002ba,0x61726170,0x0000006d,0x00040005,0x000002bb,0x61726170,0x0000006d,0x00040005, + 0x000002bd,0x61726170,0x0000006d,0x00040005,0x000002bf,0x61726170,0x0000006d,0x00040005, + 0x000002c1,0x61726170,0x0000006d,0x00040005,0x000002c2,0x61726170,0x0000006d,0x00030005, + 0x000002c5,0x0000316f,0x00040005,0x000002c7,0x61726170,0x0000006d,0x00040005,0x000002c9, + 0x61726170,0x0000006d,0x00040005,0x000002cb,0x61726170,0x0000006d,0x00040005,0x000002cc, + 0x61726170,0x0000006d,0x00030005,0x000002cf,0x0064646f,0x00040005,0x000002d1,0x61726170, + 0x0000006d,0x00040005,0x000002d3,0x61726170,0x0000006d,0x00040005,0x000002d5,0x61726170, + 0x0000006d,0x00040005,0x000002d6,0x61726170,0x0000006d,0x00040005,0x000002de,0x656e616c, + 0x00000000,0x00080005,0x000002e1,0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163,0x44496e6f, + 0x00000000,0x00040005,0x000002e5,0x64616568,0x00000000,0x00060005,0x000002e6,0x575f6c67, + 0x476b726f,0x70756f72,0x00004449,0x00040005,0x000002e9,0x6c695471,0x00000065,0x00040005, + 0x000002ec,0x69727473,0x00336564,0x00040005,0x000002ed,0x68737550,0x00000000,0x00050006, + 0x000002ed,0x00000000,0x656b6f74,0x0000736e,0x00050006,0x000002ed,0x00000001,0x64616568, + 0x00000073,0x00060006,0x000002ed,0x00000002,0x6e616863,0x736c656e,0x00000000,0x00030005, + 0x000002ef,0x00006370,0x00050005,0x000002f4,0x64616568,0x65736142,0x00000000,0x00040005, + 0x000002f8,0x73614271,0x00000065,0x00040005,0x000002ff,0x3079656b,0x00000000,0x00030005, + 0x00000307,0x00000074,0x00060005,0x00000308,0x535f6c67,0x72676275,0x4970756f,0x00000044, + 0x00030005,0x00000311,0x00003071,0x00030005,0x00000315,0x0000306b,0x00030005,0x0000031b, + 0x00000063,0x00030005,0x0000031d,0x00005f73,0x00030005,0x00000328,0x00005f61,0x00050005, + 0x0000032b,0x6d726f4e,0x7a696c61,0x00006465,0x00040006,0x0000032b,0x00000000,0x00766b71, + 0x00030005,0x0000032d,0x00000000,0x00030005,0x00000344,0x00005f62,0x00060005,0x00000372, + 0x4e5f6c67,0x75536d75,0x6f726762,0x00737075,0x00030005,0x0000037a,0x00000069,0x00040005, + 0x00000386,0x61726170,0x0000006d,0x00040005,0x00000391,0x61746f74,0x0000006c,0x00040005, + 0x00000392,0x65736162,0x00000000,0x00040005,0x0000039b,0x61726170,0x0000006d,0x00040005, + 0x0000039d,0x61726170,0x0000006d,0x00040005,0x000003a3,0x64646170,0x00676e69,0x00050005, + 0x000003ab,0x72726f63,0x69746365,0x00006e6f,0x00040005,0x000003ac,0x61726170,0x0000006d, + 0x00040005,0x000003b2,0x61726170,0x0000006d,0x00050005,0x000003ba,0x69636572,0x636f7270, + 0x00736c61,0x00040005,0x000003bc,0x61726170,0x0000006d,0x00030005,0x000003c0,0x00000069, + 0x00040005,0x000003ca,0x65646f63,0x00000000,0x00040005,0x000003cc,0x61726170,0x0000006d, + 0x00040005,0x000003d0,0x61726170,0x0000006d,0x00040005,0x000003d5,0x67696577,0x00737468, + 0x00030005,0x000003dd,0x00000069,0x00040005,0x000003e9,0x7074756f,0x00737475,0x00040005, + 0x000003ee,0x3079656b,0x00000000,0x00030005,0x000003f6,0x00000074,0x00030005,0x000003ff, + 0x00003071,0x00030005,0x00000403,0x00003063,0x00030005,0x00000407,0x00000063,0x00030005, + 0x00000412,0x0000626b,0x00030005,0x0000041a,0x00005f73,0x00030005,0x00000422,0x00005f61, + 0x00030005,0x00000437,0x00005f62,0x00030005,0x00000470,0x00000069,0x00030005,0x00000479, + 0x00776f72,0x00050005,0x0000047d,0x706d6f63,0x6e656e6f,0x00000074,0x00040005,0x00000480, + 0x656b6f74,0x0000006e,0x00040005,0x0000048c,0x756c6176,0x00000065,0x00040005,0x00000496, + 0x61726170,0x0000006d,0x00050005,0x00000499,0x65747441,0x6465646e,0x00000000,0x00060006, + 0x00000499,0x00000000,0x65747461,0x6465646e,0x00000000,0x00030005,0x0000049b,0x00000000, + 0x00040005,0x000004a7,0x61726170,0x0000006d,0x00040005,0x000004a9,0x61726170,0x0000006d, + 0x00030047,0x0000018c,0x0000002a,0x00030047,0x000001ab,0x0000002a,0x00030047,0x000001b8, + 0x0000002a,0x00030047,0x000001ce,0x0000002a,0x00030047,0x000001d3,0x0000002a,0x00030047, + 0x000001d7,0x0000002a,0x00030047,0x000001db,0x0000002a,0x00030047,0x000001df,0x0000002a, + 0x00030047,0x000001e3,0x0000002a,0x00030047,0x000001e4,0x0000002a,0x00040047,0x00000249, + 0x00000001,0x00000000,0x00030047,0x00000260,0x0000002a,0x00030047,0x0000026b,0x0000002a, + 0x00030047,0x00000277,0x0000002a,0x00030047,0x00000283,0x0000002a,0x00030047,0x00000287, + 0x0000002a,0x00030047,0x0000028b,0x0000002a,0x00030047,0x000002a0,0x0000002a,0x00030047, + 0x000002aa,0x0000002a,0x00030047,0x000002b4,0x0000002a,0x00030047,0x000002c4,0x0000002a, + 0x00030047,0x000002ce,0x0000002a,0x00030047,0x000002d8,0x0000002a,0x00040047,0x000002e1, + 0x0000000b,0x0000001b,0x00040047,0x000002e6,0x0000000b,0x0000001a,0x00030047,0x000002ed, + 0x00000002,0x00050048,0x000002ed,0x00000000,0x00000023,0x00000000,0x00050048,0x000002ed, + 0x00000001,0x00000023,0x00000004,0x00050048,0x000002ed,0x00000002,0x00000023,0x00000008, + 0x00040047,0x00000308,0x0000000b,0x00000028,0x00040047,0x0000032a,0x00000006,0x00000001, + 0x00030047,0x0000032b,0x00000002,0x00040048,0x0000032b,0x00000000,0x00000018,0x00050048, + 0x0000032b,0x00000000,0x00000023,0x00000000,0x00030047,0x0000032d,0x00000018,0x00040047, + 0x0000032d,0x00000021,0x00000000,0x00040047,0x0000032d,0x00000022,0x00000000,0x00040047, + 0x00000372,0x0000000b,0x00000026,0x00030047,0x000003a0,0x0000002a,0x00030047,0x000003a2, + 0x0000002a,0x00030047,0x000003a6,0x0000002a,0x00030047,0x000003b1,0x0000002a,0x00030047, + 0x000003b7,0x0000002a,0x00030047,0x00000495,0x0000002a,0x00040047,0x00000498,0x00000006, + 0x00000001,0x00030047,0x00000499,0x00000002,0x00040048,0x00000499,0x00000000,0x00000019, + 0x00050048,0x00000499,0x00000000,0x00000023,0x00000000,0x00030047,0x0000049b,0x00000019, + 0x00040047,0x0000049b,0x00000021,0x00000005,0x00040047,0x0000049b,0x00000022,0x00000000, + 0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020, + 0x00040020,0x00000007,0x00000007,0x00000006,0x00040021,0x00000008,0x00000006,0x00000007, + 0x00030016,0x0000000c,0x00000010,0x00040020,0x0000000d,0x00000007,0x0000000c,0x00040015, + 0x0000000e,0x00000020,0x00000000,0x00040021,0x0000000f,0x0000000e,0x0000000d,0x00040020, + 0x00000013,0x00000007,0x0000000e,0x00040021,0x00000014,0x0000000c,0x00000013,0x00050021, + 0x00000018,0x0000000e,0x00000013,0x00000013,0x00040021,0x0000001d,0x0000000e,0x00000013, + 0x00040021,0x00000021,0x00000006,0x0000000d,0x00040021,0x00000028,0x0000000c,0x0000000d, + 0x00060021,0x00000032,0x0000000c,0x0000000d,0x0000000d,0x0000000d,0x00070021,0x0000003b, + 0x0000000c,0x00000013,0x00000013,0x00000013,0x00000013,0x00050021,0x00000042,0x0000000c, + 0x00000013,0x00000013,0x0004002b,0x0000000e,0x0000004c,0x80000000,0x0004002b,0x0000000e, + 0x00000050,0x7fffffff,0x0004002b,0x0000000e,0x00000053,0x7f800000,0x00020014,0x00000054, + 0x0004002b,0x0000000e,0x0000005b,0x477ff000,0x0004002b,0x0000000e,0x00000064,0x38800000, + 0x0004002b,0x00000006,0x0000006b,0x4b800000,0x0004002b,0x00000006,0x00000072,0x33800000, + 0x0004002b,0x0000000e,0x0000007b,0x0000000d,0x0004002b,0x0000000e,0x0000007d,0x00000001, + 0x0004002b,0x0000000e,0x00000081,0x00000fff,0x0004002b,0x0000000e,0x00000085,0xffffe000, + 0x00040015,0x0000008e,0x00000010,0x00000000,0x0004002b,0x0000000e,0x00000094,0x0000ffff, + 0x0004002b,0x0000000e,0x000000b8,0x00000000,0x00040020,0x000000c0,0x00000007,0x00000054, + 0x0004002b,0x0000000e,0x000000c3,0x00007c00,0x0004002b,0x0000000e,0x000000c9,0x000003ff, + 0x0004002b,0x0000000e,0x000000d2,0x00007fff,0x0004002b,0x0000000e,0x000000d8,0x00000008, + 0x0004002b,0x0000000e,0x000000da,0x00000080,0x0004002b,0x0000000e,0x000000df,0x00008000, + 0x0004002b,0x0000000e,0x000000e5,0x0000000a,0x0004002b,0x0000000e,0x000000e7,0x0000001f, + 0x0004002b,0x0000000e,0x000000f1,0x0000007e,0x0004002b,0x0000000e,0x000000ff,0x00000400, + 0x0004002b,0x0000000e,0x00000109,0x0000000f,0x0004002b,0x0000000e,0x0000010b,0x00000010, + 0x0004002b,0x0000000e,0x0000011a,0x00000007,0x0004002b,0x0000000e,0x0000012d,0x00000006, + 0x0004002b,0x0000000e,0x00000136,0x00000003,0x0004002b,0x0000000e,0x00000145,0x00007bff, + 0x0004002b,0x00000006,0x0000014a,0x477ff000,0x0004002b,0x00000006,0x0000014c,0x3f000000, + 0x0004002b,0x00000006,0x0000017a,0x00000000,0x0004002b,0x00000006,0x00000185,0x3f800000, + 0x0004002b,0x0000000c,0x00000193,0x00000000,0x00040015,0x0000019a,0x00000020,0x00000001, + 0x00040020,0x0000019b,0x00000007,0x0000019a,0x0004002b,0x0000019a,0x0000019d,0x00000000, + 0x0004002b,0x0000019a,0x000001a4,0x00000002,0x0004002b,0x0000019a,0x000001c4,0x00000001, + 0x0004002b,0x0000000e,0x000001f3,0x00000017,0x0004002b,0x0000000e,0x000001f5,0x000000ff, + 0x0004002b,0x0000019a,0x000001f8,0x0000007f,0x0004002b,0x0000019a,0x000001fa,0xfffffff2, + 0x0004002b,0x0000019a,0x000001fe,0x0000000a,0x0004002b,0x0000000c,0x0000022c,0x00002dbb, + 0x0004002b,0x0000000c,0x0000022d,0x00003ed6,0x0004002b,0x0000000c,0x00000234,0x00003dc2, + 0x0004002b,0x0000000c,0x00000235,0x00003fe9,0x0004002b,0x0000000e,0x0000023d,0x00000004, + 0x0004002b,0x0000000e,0x0000023f,0x00004000,0x00040032,0x0000000e,0x00000249,0x000000c0, + 0x0004002b,0x0000000e,0x0000024e,0x00000002,0x00060034,0x0000000e,0x00000254,0x00000084, + 0x0000010b,0x00000249,0x0004001c,0x00000255,0x0000000c,0x00000254,0x00040020,0x00000256, + 0x00000004,0x00000255,0x0004003b,0x00000256,0x00000257,0x00000004,0x00040020,0x00000259, + 0x00000004,0x0000000c,0x0004002b,0x0000000e,0x00000267,0x00000018,0x0004002b,0x0000000e, + 0x0000026e,0x00000020,0x0004002b,0x0000000e,0x00000273,0x00000028,0x0004002b,0x0000000e, + 0x0000027a,0x00000030,0x0004002b,0x0000000e,0x0000027f,0x00000038,0x00040017,0x000002df, + 0x0000000e,0x00000003,0x00040020,0x000002e0,0x00000001,0x000002df,0x0004003b,0x000002e0, + 0x000002e1,0x00000001,0x00040020,0x000002e2,0x00000001,0x0000000e,0x0004003b,0x000002e0, + 0x000002e6,0x00000001,0x0005001e,0x000002ed,0x0000000e,0x0000000e,0x0000000e,0x00040020, + 0x000002ee,0x00000009,0x000002ed,0x0004003b,0x000002ee,0x000002ef,0x00000009,0x00040020, + 0x000002f0,0x00000009,0x0000000e,0x0004002b,0x0000000e,0x000002f6,0x00000060,0x0004003b, + 0x000002e2,0x00000308,0x00000001,0x00071168,0x00000319,0x0000000c,0x00000136,0x0000010b, + 0x0000010b,0x0000024e,0x00040020,0x0000031a,0x00000007,0x00000319,0x0004002c,0x00000319, + 0x0000031c,0x00000193,0x00040016,0x00000325,0x00000008,0x00001076,0x00071168,0x00000326, + 0x00000325,0x00000136,0x0000010b,0x0000026e,0x000000b8,0x00040020,0x00000327,0x00000007, + 0x00000326,0x00040015,0x00000329,0x00000008,0x00000000,0x0003001d,0x0000032a,0x00000329, + 0x0003001e,0x0000032b,0x0000032a,0x00040020,0x0000032c,0x0000000c,0x0000032b,0x0004003b, + 0x0000032c,0x0000032d,0x0000000c,0x00040020,0x00000336,0x0000000c,0x00000329,0x00071168, + 0x00000342,0x00000325,0x00000136,0x0000026e,0x0000010b,0x0000007d,0x00040020,0x00000343, + 0x00000007,0x00000342,0x0004003b,0x000002e2,0x00000372,0x00000001,0x0004002b,0x0000000e, + 0x00000376,0x00000040,0x0004002b,0x0000000e,0x00000379,0x00000108,0x00060034,0x0000000e, + 0x00000382,0x00000084,0x0000010b,0x00000249,0x0004001c,0x000003b8,0x0000000c,0x0000010b, + 0x00040020,0x000003b9,0x00000004,0x000003b8,0x0004003b,0x000003b9,0x000003ba,0x00000004, + 0x00060034,0x0000000e,0x000003c8,0x00000084,0x0000010b,0x00000249,0x00060034,0x0000000e, + 0x000003d2,0x00000084,0x0000010b,0x00000249,0x0004001c,0x000003d3,0x00000329,0x000003d2, + 0x00040020,0x000003d4,0x00000004,0x000003d3,0x0004003b,0x000003d4,0x000003d5,0x00000004, + 0x00040020,0x000003d9,0x00000004,0x00000329,0x0004002b,0x0000000e,0x000003e5,0x00000200, + 0x0004001c,0x000003e7,0x0000000c,0x000003e5,0x00040020,0x000003e8,0x00000004,0x000003e7, + 0x0004003b,0x000003e8,0x000003e9,0x00000004,0x0004002b,0x0000000e,0x0000047b,0x00000005, + 0x0003001d,0x00000498,0x00000329,0x0003001e,0x00000499,0x00000498,0x00040020,0x0000049a, + 0x0000000c,0x00000499,0x0004003b,0x0000049a,0x0000049b,0x0000000c,0x0006002c,0x000002df, + 0x000004af,0x0000026e,0x0000007d,0x0000007d,0x00050036,0x00000002,0x00000004,0x00000000, + 0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000013,0x000002de,0x00000007,0x0004003b, + 0x00000013,0x000002e5,0x00000007,0x0004003b,0x00000013,0x000002e9,0x00000007,0x0004003b, + 0x00000013,0x000002ec,0x00000007,0x0004003b,0x00000013,0x000002f4,0x00000007,0x0004003b, + 0x00000013,0x000002f8,0x00000007,0x0004003b,0x00000013,0x000002ff,0x00000007,0x0004003b, + 0x00000013,0x00000307,0x00000007,0x0004003b,0x00000013,0x00000311,0x00000007,0x0004003b, + 0x00000013,0x00000315,0x00000007,0x0004003b,0x0000031a,0x0000031b,0x00000007,0x0004003b, + 0x00000013,0x0000031d,0x00000007,0x0004003b,0x00000327,0x00000328,0x00000007,0x0004003b, + 0x00000343,0x00000344,0x00000007,0x0004003b,0x00000013,0x0000037a,0x00000007,0x0004003b, + 0x0000000d,0x00000386,0x00000007,0x0004003b,0x0000000d,0x00000391,0x00000007,0x0004003b, + 0x00000013,0x00000392,0x00000007,0x0004003b,0x00000013,0x0000039b,0x00000007,0x0004003b, + 0x00000013,0x0000039d,0x00000007,0x0004003b,0x00000013,0x000003a3,0x00000007,0x0004003b, + 0x0000000d,0x000003ab,0x00000007,0x0004003b,0x0000000d,0x000003ac,0x00000007,0x0004003b, + 0x00000007,0x000003b2,0x00000007,0x0004003b,0x0000000d,0x000003bc,0x00000007,0x0004003b, + 0x00000013,0x000003c0,0x00000007,0x0004003b,0x00000013,0x000003ca,0x00000007,0x0004003b, + 0x0000000d,0x000003cc,0x00000007,0x0004003b,0x00000013,0x000003d0,0x00000007,0x0004003b, + 0x00000013,0x000003dd,0x00000007,0x0004003b,0x00000013,0x000003ee,0x00000007,0x0004003b, + 0x00000013,0x000003f6,0x00000007,0x0004003b,0x00000013,0x000003ff,0x00000007,0x0004003b, + 0x00000013,0x00000403,0x00000007,0x0004003b,0x0000031a,0x00000407,0x00000007,0x0004003b, + 0x00000013,0x00000412,0x00000007,0x0004003b,0x00000013,0x0000041a,0x00000007,0x0004003b, + 0x00000327,0x00000422,0x00000007,0x0004003b,0x00000343,0x00000437,0x00000007,0x0004003b, + 0x00000013,0x00000470,0x00000007,0x0004003b,0x00000013,0x00000479,0x00000007,0x0004003b, + 0x00000013,0x0000047d,0x00000007,0x0004003b,0x00000013,0x00000480,0x00000007,0x0004003b, + 0x00000007,0x0000048c,0x00000007,0x0004003b,0x00000007,0x00000496,0x00000007,0x0004003b, + 0x0000000d,0x000004a7,0x00000007,0x0004003b,0x00000013,0x000004a9,0x00000007,0x00050041, + 0x000002e2,0x000002e3,0x000002e1,0x000000b8,0x0004003d,0x0000000e,0x000002e4,0x000002e3, + 0x0003003e,0x000002de,0x000002e4,0x00050041,0x000002e2,0x000002e7,0x000002e6,0x000000b8, + 0x0004003d,0x0000000e,0x000002e8,0x000002e7,0x0003003e,0x000002e5,0x000002e8,0x00050041, + 0x000002e2,0x000002ea,0x000002e6,0x0000007d,0x0004003d,0x0000000e,0x000002eb,0x000002ea, + 0x0003003e,0x000002e9,0x000002eb,0x00050041,0x000002f0,0x000002f1,0x000002ef,0x000001a4, + 0x0004003d,0x0000000e,0x000002f2,0x000002f1,0x00050084,0x0000000e,0x000002f3,0x000002f2, + 0x00000136,0x0003003e,0x000002ec,0x000002f3,0x0004003d,0x0000000e,0x000002f5,0x000002e5, + 0x00050084,0x0000000e,0x000002f7,0x000002f5,0x000002f6,0x0003003e,0x000002f4,0x000002f7, + 0x0004003d,0x0000000e,0x000002f9,0x000002e9,0x00050084,0x0000000e,0x000002fa,0x000002f9, + 0x0000010b,0x0004003d,0x0000000e,0x000002fb,0x000002ec,0x00050084,0x0000000e,0x000002fc, + 0x000002fa,0x000002fb,0x0004003d,0x0000000e,0x000002fd,0x000002f4,0x00050080,0x0000000e, + 0x000002fe,0x000002fc,0x000002fd,0x0003003e,0x000002f8,0x000002fe,0x0003003e,0x000002ff, + 0x000000b8,0x000200f9,0x00000300,0x000200f8,0x00000300,0x000400f6,0x00000302,0x00000303, + 0x00000000,0x000200f9,0x00000304,0x000200f8,0x00000304,0x0004003d,0x0000000e,0x00000305, + 0x000002ff,0x000500b0,0x00000054,0x00000306,0x00000305,0x00000249,0x000400fa,0x00000306, + 0x00000301,0x00000302,0x000200f8,0x00000301,0x0004003d,0x0000000e,0x00000309,0x00000308, + 0x0003003e,0x00000307,0x00000309,0x000200f9,0x0000030a,0x000200f8,0x0000030a,0x000400f6, + 0x0000030c,0x0000030d,0x00000000,0x000200f9,0x0000030e,0x000200f8,0x0000030e,0x0004003d, + 0x0000000e,0x0000030f,0x00000307,0x000500b0,0x00000054,0x00000310,0x0000030f,0x0000023d, + 0x000400fa,0x00000310,0x0000030b,0x0000030c,0x000200f8,0x0000030b,0x0004003d,0x0000000e, + 0x00000312,0x00000307,0x00050086,0x0000000e,0x00000313,0x00000312,0x0000023d,0x00050084, + 0x0000000e,0x00000314,0x00000313,0x0000010b,0x0003003e,0x00000311,0x00000314,0x0004003d, + 0x0000000e,0x00000316,0x00000307,0x00050089,0x0000000e,0x00000317,0x00000316,0x0000023d, + 0x00050084,0x0000000e,0x00000318,0x00000317,0x0000010b,0x0003003e,0x00000315,0x00000318, + 0x0003003e,0x0000031b,0x0000031c,0x0003003e,0x0000031d,0x000000b8,0x000200f9,0x0000031e, + 0x000200f8,0x0000031e,0x000400f6,0x00000320,0x00000321,0x00000001,0x000200f9,0x00000322, + 0x000200f8,0x00000322,0x0004003d,0x0000000e,0x00000323,0x0000031d,0x000500b0,0x00000054, + 0x00000324,0x00000323,0x0000007d,0x000400fa,0x00000324,0x0000031f,0x00000320,0x000200f8, + 0x0000031f,0x0004003d,0x0000000e,0x0000032e,0x000002f8,0x0004003d,0x0000000e,0x0000032f, + 0x00000311,0x0004003d,0x0000000e,0x00000330,0x000002ec,0x00050084,0x0000000e,0x00000331, + 0x0000032f,0x00000330,0x00050080,0x0000000e,0x00000332,0x0000032e,0x00000331,0x0004003d, + 0x0000000e,0x00000333,0x0000031d,0x00050084,0x0000000e,0x00000334,0x00000333,0x0000026e, + 0x00050080,0x0000000e,0x00000335,0x00000332,0x00000334,0x00060041,0x00000336,0x00000337, + 0x0000032d,0x0000019d,0x00000335,0x0004003d,0x0000000e,0x00000338,0x000002f8,0x0004003d, + 0x0000000e,0x00000339,0x00000311,0x0004003d,0x0000000e,0x0000033a,0x000002ec,0x00050084, + 0x0000000e,0x0000033b,0x00000339,0x0000033a,0x00050080,0x0000000e,0x0000033c,0x00000338, + 0x0000033b,0x0004003d,0x0000000e,0x0000033d,0x0000031d,0x00050084,0x0000000e,0x0000033e, + 0x0000033d,0x0000026e,0x00050080,0x0000000e,0x0000033f,0x0000033c,0x0000033e,0x0004003d, + 0x0000000e,0x00000340,0x000002ec,0x00071169,0x00000326,0x00000341,0x00000337,0x0000019d, + 0x00000340,0x00000000,0x0003003e,0x00000328,0x00000341,0x0004003d,0x0000000e,0x00000345, + 0x000002ff,0x0004003d,0x0000000e,0x00000346,0x00000315,0x00050080,0x0000000e,0x00000347, + 0x00000345,0x00000346,0x0004003d,0x0000000e,0x00000348,0x000002ec,0x00050084,0x0000000e, + 0x00000349,0x00000347,0x00000348,0x0004003d,0x0000000e,0x0000034a,0x000002f4,0x00050080, + 0x0000000e,0x0000034b,0x00000349,0x0000034a,0x00050080,0x0000000e,0x0000034c,0x0000034b, + 0x0000026e,0x0004003d,0x0000000e,0x0000034d,0x0000031d,0x00050084,0x0000000e,0x0000034e, + 0x0000034d,0x0000026e,0x00050080,0x0000000e,0x0000034f,0x0000034c,0x0000034e,0x00060041, + 0x00000336,0x00000350,0x0000032d,0x0000019d,0x0000034f,0x0004003d,0x0000000e,0x00000351, + 0x000002ff,0x0004003d,0x0000000e,0x00000352,0x00000315,0x00050080,0x0000000e,0x00000353, + 0x00000351,0x00000352,0x0004003d,0x0000000e,0x00000354,0x000002ec,0x00050084,0x0000000e, + 0x00000355,0x00000353,0x00000354,0x0004003d,0x0000000e,0x00000356,0x000002f4,0x00050080, + 0x0000000e,0x00000357,0x00000355,0x00000356,0x00050080,0x0000000e,0x00000358,0x00000357, + 0x0000026e,0x0004003d,0x0000000e,0x00000359,0x0000031d,0x00050084,0x0000000e,0x0000035a, + 0x00000359,0x0000026e,0x00050080,0x0000000e,0x0000035b,0x00000358,0x0000035a,0x0004003d, + 0x0000000e,0x0000035c,0x000002ec,0x00071169,0x00000342,0x0000035d,0x00000350,0x000001c4, + 0x0000035c,0x00000000,0x0003003e,0x00000344,0x0000035d,0x0004003d,0x00000326,0x0000035e, + 0x00000328,0x0004003d,0x00000342,0x0000035f,0x00000344,0x0004003d,0x00000319,0x00000360, + 0x0000031b,0x0006116b,0x00000319,0x00000361,0x0000035e,0x0000035f,0x00000360,0x0003003e, + 0x0000031b,0x00000361,0x000200f9,0x00000321,0x000200f8,0x00000321,0x0004003d,0x0000000e, + 0x00000362,0x0000031d,0x00050080,0x0000000e,0x00000363,0x00000362,0x000001c4,0x0003003e, + 0x0000031d,0x00000363,0x000200f9,0x0000031e,0x000200f8,0x00000320,0x0004003d,0x00000319, + 0x00000364,0x0000031b,0x0004003d,0x0000000e,0x00000365,0x00000311,0x00050084,0x0000000e, + 0x00000366,0x00000365,0x00000249,0x0004003d,0x0000000e,0x00000367,0x000002ff,0x00050080, + 0x0000000e,0x00000368,0x00000366,0x00000367,0x0004003d,0x0000000e,0x00000369,0x00000315, + 0x00050080,0x0000000e,0x0000036a,0x00000368,0x00000369,0x00050041,0x00000259,0x0000036b, + 0x00000257,0x0000036a,0x0004003d,0x0000000e,0x0000036c,0x00000311,0x00050084,0x0000000e, + 0x0000036d,0x0000036c,0x00000249,0x0004003d,0x0000000e,0x0000036e,0x000002ff,0x00050080, + 0x0000000e,0x0000036f,0x0000036d,0x0000036e,0x0004003d,0x0000000e,0x00000370,0x00000315, + 0x00050080,0x0000000e,0x00000371,0x0000036f,0x00000370,0x0007116a,0x0000036b,0x00000364, + 0x0000019d,0x00000249,0x00000028,0x0000024e,0x000200f9,0x0000030d,0x000200f8,0x0000030d, + 0x0004003d,0x0000000e,0x00000373,0x00000372,0x0004003d,0x0000000e,0x00000374,0x00000307, + 0x00050080,0x0000000e,0x00000375,0x00000374,0x00000373,0x0003003e,0x00000307,0x00000375, + 0x000200f9,0x0000030a,0x000200f8,0x0000030c,0x000200f9,0x00000303,0x000200f8,0x00000303, + 0x0004003d,0x0000000e,0x00000377,0x000002ff,0x00050080,0x0000000e,0x00000378,0x00000377, + 0x00000376,0x0003003e,0x000002ff,0x00000378,0x000200f9,0x00000300,0x000200f8,0x00000302, + 0x000400e0,0x0000024e,0x0000024e,0x00000379,0x0004003d,0x0000000e,0x0000037b,0x000002de, + 0x0003003e,0x0000037a,0x0000037b,0x000200f9,0x0000037c,0x000200f8,0x0000037c,0x000400f6, + 0x0000037e,0x0000037f,0x00000000,0x000200f9,0x00000380,0x000200f8,0x00000380,0x0004003d, + 0x0000000e,0x00000381,0x0000037a,0x000500b0,0x00000054,0x00000383,0x00000381,0x00000382, + 0x000400fa,0x00000383,0x0000037d,0x0000037e,0x000200f8,0x0000037d,0x0004003d,0x0000000e, + 0x00000384,0x0000037a,0x0004003d,0x0000000e,0x00000385,0x0000037a,0x00050041,0x00000259, + 0x00000387,0x00000257,0x00000385,0x0006003d,0x0000000c,0x00000388,0x00000387,0x00000030, + 0x0000024e,0x0003003e,0x00000386,0x00000388,0x00050039,0x0000000c,0x00000389,0x00000039, + 0x00000386,0x00050041,0x00000259,0x0000038a,0x00000257,0x00000384,0x0005003e,0x0000038a, + 0x00000389,0x00000028,0x0000024e,0x000200f9,0x0000037f,0x000200f8,0x0000037f,0x0004003d, + 0x0000000e,0x0000038b,0x0000037a,0x00050080,0x0000000e,0x0000038c,0x0000038b,0x0000026e, + 0x0003003e,0x0000037a,0x0000038c,0x000200f9,0x0000037c,0x000200f8,0x0000037e,0x000400e0, + 0x0000024e,0x0000024e,0x00000379,0x0004003d,0x0000000e,0x0000038d,0x000002de,0x000500b0, + 0x00000054,0x0000038e,0x0000038d,0x0000010b,0x000300f7,0x00000390,0x00000000,0x000400fa, + 0x0000038e,0x0000038f,0x00000390,0x000200f8,0x0000038f,0x0003003e,0x00000391,0x00000193, + 0x0003003e,0x00000392,0x000000b8,0x000200f9,0x00000393,0x000200f8,0x00000393,0x000400f6, + 0x00000395,0x00000396,0x00000000,0x000200f9,0x00000397,0x000200f8,0x00000397,0x0004003d, + 0x0000000e,0x00000398,0x00000392,0x000500b0,0x00000054,0x00000399,0x00000398,0x00000249, + 0x000400fa,0x00000399,0x00000394,0x00000395,0x000200f8,0x00000394,0x0004003d,0x0000000c, + 0x0000039a,0x00000391,0x0004003d,0x0000000e,0x0000039c,0x000002de,0x0003003e,0x0000039b, + 0x0000039c,0x0004003d,0x0000000e,0x0000039e,0x00000392,0x0003003e,0x0000039d,0x0000039e, + 0x00060039,0x0000000c,0x0000039f,0x00000045,0x0000039b,0x0000039d,0x00050081,0x0000000c, + 0x000003a0,0x0000039a,0x0000039f,0x0003003e,0x00000391,0x000003a0,0x000200f9,0x00000396, + 0x000200f8,0x00000396,0x0004003d,0x0000000e,0x000003a1,0x00000392,0x00050080,0x0000000e, + 0x000003a2,0x000003a1,0x00000376,0x0003003e,0x00000392,0x000003a2,0x000200f9,0x00000393, + 0x000200f8,0x00000395,0x00050041,0x000002f0,0x000003a4,0x000002ef,0x0000019d,0x0004003d, + 0x0000000e,0x000003a5,0x000003a4,0x00050082,0x0000000e,0x000003a6,0x00000249,0x000003a5, + 0x0003003e,0x000003a3,0x000003a6,0x0004003d,0x0000000e,0x000003a7,0x000003a3,0x000500ac, + 0x00000054,0x000003a8,0x000003a7,0x000000b8,0x000300f7,0x000003aa,0x00000000,0x000400fa, + 0x000003a8,0x000003a9,0x000003aa,0x000200f8,0x000003a9,0x0003003e,0x000003ac,0x00000193, + 0x00050039,0x0000000c,0x000003ad,0x00000039,0x000003ac,0x00040073,0x00000006,0x000003ae, + 0x000003ad,0x0004003d,0x0000000e,0x000003af,0x000003a3,0x00040070,0x00000006,0x000003b0, + 0x000003af,0x00050085,0x00000006,0x000003b1,0x000003ae,0x000003b0,0x0003003e,0x000003b2, + 0x000003b1,0x00050039,0x00000006,0x000003b3,0x0000000a,0x000003b2,0x00040073,0x0000000c, + 0x000003b4,0x000003b3,0x0003003e,0x000003ab,0x000003b4,0x0004003d,0x0000000c,0x000003b5, + 0x00000391,0x0004003d,0x0000000c,0x000003b6,0x000003ab,0x00050083,0x0000000c,0x000003b7, + 0x000003b5,0x000003b6,0x0003003e,0x00000391,0x000003b7,0x000200f9,0x000003aa,0x000200f8, + 0x000003aa,0x0004003d,0x0000000e,0x000003bb,0x000002de,0x0004003d,0x0000000c,0x000003bd, + 0x00000391,0x0003003e,0x000003bc,0x000003bd,0x00050039,0x0000000c,0x000003be,0x00000030, + 0x000003bc,0x00050041,0x00000259,0x000003bf,0x000003ba,0x000003bb,0x0005003e,0x000003bf, + 0x000003be,0x00000028,0x0000024e,0x000200f9,0x00000390,0x000200f8,0x00000390,0x0004003d, + 0x0000000e,0x000003c1,0x000002de,0x0003003e,0x000003c0,0x000003c1,0x000200f9,0x000003c2, + 0x000200f8,0x000003c2,0x000400f6,0x000003c4,0x000003c5,0x00000000,0x000200f9,0x000003c6, + 0x000200f8,0x000003c6,0x0004003d,0x0000000e,0x000003c7,0x000003c0,0x000500b0,0x00000054, + 0x000003c9,0x000003c7,0x000003c8,0x000400fa,0x000003c9,0x000003c3,0x000003c4,0x000200f8, + 0x000003c3,0x0004003d,0x0000000e,0x000003cb,0x000003c0,0x00050041,0x00000259,0x000003cd, + 0x00000257,0x000003cb,0x0006003d,0x0000000c,0x000003ce,0x000003cd,0x00000030,0x0000024e, + 0x0003003e,0x000003cc,0x000003ce,0x00050039,0x0000000e,0x000003cf,0x00000011,0x000003cc, + 0x0003003e,0x000003d0,0x000003cf,0x00050039,0x0000000e,0x000003d1,0x0000001f,0x000003d0, + 0x0003003e,0x000003ca,0x000003d1,0x0004003d,0x0000000e,0x000003d6,0x000003c0,0x0004003d, + 0x0000000e,0x000003d7,0x000003ca,0x00040071,0x00000329,0x000003d8,0x000003d7,0x00050041, + 0x000003d9,0x000003da,0x000003d5,0x000003d6,0x0005003e,0x000003da,0x000003d8,0x00000028, + 0x0000024e,0x000200f9,0x000003c5,0x000200f8,0x000003c5,0x0004003d,0x0000000e,0x000003db, + 0x000003c0,0x00050080,0x0000000e,0x000003dc,0x000003db,0x0000026e,0x0003003e,0x000003c0, + 0x000003dc,0x000200f9,0x000003c2,0x000200f8,0x000003c4,0x0004003d,0x0000000e,0x000003de, + 0x000002de,0x0003003e,0x000003dd,0x000003de,0x000200f9,0x000003df,0x000200f8,0x000003df, + 0x000400f6,0x000003e1,0x000003e2,0x00000000,0x000200f9,0x000003e3,0x000200f8,0x000003e3, + 0x0004003d,0x0000000e,0x000003e4,0x000003dd,0x000500b0,0x00000054,0x000003e6,0x000003e4, + 0x000003e5,0x000400fa,0x000003e6,0x000003e0,0x000003e1,0x000200f8,0x000003e0,0x0004003d, + 0x0000000e,0x000003ea,0x000003dd,0x00050041,0x00000259,0x000003eb,0x000003e9,0x000003ea, + 0x0005003e,0x000003eb,0x00000193,0x00000028,0x0000024e,0x000200f9,0x000003e2,0x000200f8, + 0x000003e2,0x0004003d,0x0000000e,0x000003ec,0x000003dd,0x00050080,0x0000000e,0x000003ed, + 0x000003ec,0x0000026e,0x0003003e,0x000003dd,0x000003ed,0x000200f9,0x000003df,0x000200f8, + 0x000003e1,0x000400e0,0x0000024e,0x0000024e,0x00000379,0x0003003e,0x000003ee,0x000000b8, + 0x000200f9,0x000003ef,0x000200f8,0x000003ef,0x000400f6,0x000003f1,0x000003f2,0x00000000, + 0x000200f9,0x000003f3,0x000200f8,0x000003f3,0x0004003d,0x0000000e,0x000003f4,0x000003ee, + 0x000500b0,0x00000054,0x000003f5,0x000003f4,0x00000249,0x000400fa,0x000003f5,0x000003f0, + 0x000003f1,0x000200f8,0x000003f0,0x0004003d,0x0000000e,0x000003f7,0x00000308,0x0003003e, + 0x000003f6,0x000003f7,0x000200f9,0x000003f8,0x000200f8,0x000003f8,0x000400f6,0x000003fa, + 0x000003fb,0x00000000,0x000200f9,0x000003fc,0x000200f8,0x000003fc,0x0004003d,0x0000000e, + 0x000003fd,0x000003f6,0x000500b0,0x00000054,0x000003fe,0x000003fd,0x0000024e,0x000400fa, + 0x000003fe,0x000003f9,0x000003fa,0x000200f8,0x000003f9,0x0004003d,0x0000000e,0x00000400, + 0x000003f6,0x00050086,0x0000000e,0x00000401,0x00000400,0x0000024e,0x00050084,0x0000000e, + 0x00000402,0x00000401,0x0000010b,0x0003003e,0x000003ff,0x00000402,0x0004003d,0x0000000e, + 0x00000404,0x000003f6,0x00050089,0x0000000e,0x00000405,0x00000404,0x0000024e,0x00050084, + 0x0000000e,0x00000406,0x00000405,0x0000010b,0x0003003e,0x00000403,0x00000406,0x0004003d, + 0x0000000e,0x00000408,0x000003ff,0x00050084,0x0000000e,0x00000409,0x00000408,0x0000026e, + 0x0004003d,0x0000000e,0x0000040a,0x00000403,0x00050080,0x0000000e,0x0000040b,0x00000409, + 0x0000040a,0x00050041,0x00000259,0x0000040c,0x000003e9,0x0000040b,0x0004003d,0x0000000e, + 0x0000040d,0x000003ff,0x00050084,0x0000000e,0x0000040e,0x0000040d,0x0000026e,0x0004003d, + 0x0000000e,0x0000040f,0x00000403,0x00050080,0x0000000e,0x00000410,0x0000040e,0x0000040f, + 0x00081169,0x00000319,0x00000411,0x0000040c,0x0000019d,0x0000026e,0x00000030,0x0000024e, + 0x0003003e,0x00000407,0x00000411,0x0003003e,0x00000412,0x000000b8,0x000200f9,0x00000413, + 0x000200f8,0x00000413,0x000400f6,0x00000415,0x00000416,0x00000001,0x000200f9,0x00000417, + 0x000200f8,0x00000417,0x0004003d,0x0000000e,0x00000418,0x00000412,0x000500b0,0x00000054, + 0x00000419,0x00000418,0x00000376,0x000400fa,0x00000419,0x00000414,0x00000415,0x000200f8, + 0x00000414,0x0003003e,0x0000041a,0x000000b8,0x000200f9,0x0000041b,0x000200f8,0x0000041b, + 0x000400f6,0x0000041d,0x0000041e,0x00000001,0x000200f9,0x0000041f,0x000200f8,0x0000041f, + 0x0004003d,0x0000000e,0x00000420,0x0000041a,0x000500b0,0x00000054,0x00000421,0x00000420, + 0x0000007d,0x000400fa,0x00000421,0x0000041c,0x0000041d,0x000200f8,0x0000041c,0x0004003d, + 0x0000000e,0x00000423,0x000003ff,0x00050084,0x0000000e,0x00000424,0x00000423,0x00000249, + 0x0004003d,0x0000000e,0x00000425,0x000003ee,0x00050080,0x0000000e,0x00000426,0x00000424, + 0x00000425,0x0004003d,0x0000000e,0x00000427,0x00000412,0x00050080,0x0000000e,0x00000428, + 0x00000426,0x00000427,0x0004003d,0x0000000e,0x00000429,0x0000041a,0x00050084,0x0000000e, + 0x0000042a,0x00000429,0x0000026e,0x00050080,0x0000000e,0x0000042b,0x00000428,0x0000042a, + 0x00050041,0x000003d9,0x0000042c,0x000003d5,0x0000042b,0x0004003d,0x0000000e,0x0000042d, + 0x000003ff,0x00050084,0x0000000e,0x0000042e,0x0000042d,0x00000249,0x0004003d,0x0000000e, + 0x0000042f,0x000003ee,0x00050080,0x0000000e,0x00000430,0x0000042e,0x0000042f,0x0004003d, + 0x0000000e,0x00000431,0x00000412,0x00050080,0x0000000e,0x00000432,0x00000430,0x00000431, + 0x0004003d,0x0000000e,0x00000433,0x0000041a,0x00050084,0x0000000e,0x00000434,0x00000433, + 0x0000026e,0x00050080,0x0000000e,0x00000435,0x00000432,0x00000434,0x00081169,0x00000326, + 0x00000436,0x0000042c,0x0000019d,0x00000249,0x00000030,0x0000024e,0x0003003e,0x00000422, + 0x00000436,0x0004003d,0x0000000e,0x00000438,0x000003ee,0x0004003d,0x0000000e,0x00000439, + 0x00000412,0x00050080,0x0000000e,0x0000043a,0x00000438,0x00000439,0x0004003d,0x0000000e, + 0x0000043b,0x000002ec,0x00050084,0x0000000e,0x0000043c,0x0000043a,0x0000043b,0x0004003d, + 0x0000000e,0x0000043d,0x000002f4,0x00050080,0x0000000e,0x0000043e,0x0000043c,0x0000043d, + 0x00050080,0x0000000e,0x0000043f,0x0000043e,0x00000376,0x0004003d,0x0000000e,0x00000440, + 0x00000403,0x00050080,0x0000000e,0x00000441,0x0000043f,0x00000440,0x0004003d,0x0000000e, + 0x00000442,0x0000041a,0x0004003d,0x0000000e,0x00000443,0x000002ec,0x00050084,0x0000000e, + 0x00000444,0x0000026e,0x00000443,0x00050084,0x0000000e,0x00000445,0x00000442,0x00000444, + 0x00050080,0x0000000e,0x00000446,0x00000441,0x00000445,0x00060041,0x00000336,0x00000447, + 0x0000032d,0x0000019d,0x00000446,0x0004003d,0x0000000e,0x00000448,0x000003ee,0x0004003d, + 0x0000000e,0x00000449,0x00000412,0x00050080,0x0000000e,0x0000044a,0x00000448,0x00000449, + 0x0004003d,0x0000000e,0x0000044b,0x000002ec,0x00050084,0x0000000e,0x0000044c,0x0000044a, + 0x0000044b,0x0004003d,0x0000000e,0x0000044d,0x000002f4,0x00050080,0x0000000e,0x0000044e, + 0x0000044c,0x0000044d,0x00050080,0x0000000e,0x0000044f,0x0000044e,0x00000376,0x0004003d, + 0x0000000e,0x00000450,0x00000403,0x00050080,0x0000000e,0x00000451,0x0000044f,0x00000450, + 0x0004003d,0x0000000e,0x00000452,0x0000041a,0x0004003d,0x0000000e,0x00000453,0x000002ec, + 0x00050084,0x0000000e,0x00000454,0x0000026e,0x00000453,0x00050084,0x0000000e,0x00000455, + 0x00000452,0x00000454,0x00050080,0x0000000e,0x00000456,0x00000451,0x00000455,0x0004003d, + 0x0000000e,0x00000457,0x000002ec,0x00071169,0x00000342,0x00000458,0x00000447,0x0000019d, + 0x00000457,0x00000000,0x0003003e,0x00000437,0x00000458,0x0004003d,0x00000326,0x00000459, + 0x00000422,0x0004003d,0x00000342,0x0000045a,0x00000437,0x0004003d,0x00000319,0x0000045b, + 0x00000407,0x0006116b,0x00000319,0x0000045c,0x00000459,0x0000045a,0x0000045b,0x0003003e, + 0x00000407,0x0000045c,0x000200f9,0x0000041e,0x000200f8,0x0000041e,0x0004003d,0x0000000e, + 0x0000045d,0x0000041a,0x00050080,0x0000000e,0x0000045e,0x0000045d,0x000001c4,0x0003003e, + 0x0000041a,0x0000045e,0x000200f9,0x0000041b,0x000200f8,0x0000041d,0x000200f9,0x00000416, + 0x000200f8,0x00000416,0x0004003d,0x0000000e,0x0000045f,0x00000412,0x00050080,0x0000000e, + 0x00000460,0x0000045f,0x0000026e,0x0003003e,0x00000412,0x00000460,0x000200f9,0x00000413, + 0x000200f8,0x00000415,0x0004003d,0x00000319,0x00000461,0x00000407,0x0004003d,0x0000000e, + 0x00000462,0x000003ff,0x00050084,0x0000000e,0x00000463,0x00000462,0x0000026e,0x0004003d, + 0x0000000e,0x00000464,0x00000403,0x00050080,0x0000000e,0x00000465,0x00000463,0x00000464, + 0x00050041,0x00000259,0x00000466,0x000003e9,0x00000465,0x0004003d,0x0000000e,0x00000467, + 0x000003ff,0x00050084,0x0000000e,0x00000468,0x00000467,0x0000026e,0x0004003d,0x0000000e, + 0x00000469,0x00000403,0x00050080,0x0000000e,0x0000046a,0x00000468,0x00000469,0x0007116a, + 0x00000466,0x00000461,0x0000019d,0x0000026e,0x00000028,0x0000024e,0x000200f9,0x000003fb, + 0x000200f8,0x000003fb,0x0004003d,0x0000000e,0x0000046b,0x00000372,0x0004003d,0x0000000e, + 0x0000046c,0x000003f6,0x00050080,0x0000000e,0x0000046d,0x0000046c,0x0000046b,0x0003003e, + 0x000003f6,0x0000046d,0x000200f9,0x000003f8,0x000200f8,0x000003fa,0x000400e0,0x0000024e, + 0x0000024e,0x00000379,0x000200f9,0x000003f2,0x000200f8,0x000003f2,0x0004003d,0x0000000e, + 0x0000046e,0x000003ee,0x00050080,0x0000000e,0x0000046f,0x0000046e,0x00000376,0x0003003e, + 0x000003ee,0x0000046f,0x000200f9,0x000003ef,0x000200f8,0x000003f1,0x0004003d,0x0000000e, + 0x00000471,0x000002de,0x0003003e,0x00000470,0x00000471,0x000200f9,0x00000472,0x000200f8, + 0x00000472,0x000400f6,0x00000474,0x00000475,0x00000000,0x000200f9,0x00000476,0x000200f8, + 0x00000476,0x0004003d,0x0000000e,0x00000477,0x00000470,0x000500b0,0x00000054,0x00000478, + 0x00000477,0x000003e5,0x000400fa,0x00000478,0x00000473,0x00000474,0x000200f8,0x00000473, + 0x0004003d,0x0000000e,0x0000047a,0x00000470,0x000500c2,0x0000000e,0x0000047c,0x0000047a, + 0x0000047b,0x0003003e,0x00000479,0x0000047c,0x0004003d,0x0000000e,0x0000047e,0x00000470, + 0x000500c7,0x0000000e,0x0000047f,0x0000047e,0x000000e7,0x0003003e,0x0000047d,0x0000047f, + 0x0004003d,0x0000000e,0x00000481,0x000002e9,0x00050084,0x0000000e,0x00000482,0x00000481, + 0x0000010b,0x0004003d,0x0000000e,0x00000483,0x00000479,0x00050080,0x0000000e,0x00000484, + 0x00000482,0x00000483,0x0003003e,0x00000480,0x00000484,0x0004003d,0x0000000e,0x00000485, + 0x00000480,0x00050041,0x000002f0,0x00000486,0x000002ef,0x0000019d,0x0004003d,0x0000000e, + 0x00000487,0x00000486,0x000500ae,0x00000054,0x00000488,0x00000485,0x00000487,0x000300f7, + 0x0000048a,0x00000000,0x000400fa,0x00000488,0x00000489,0x0000048a,0x000200f8,0x00000489, + 0x000200f9,0x00000475,0x000200f8,0x0000048a,0x0004003d,0x0000000e,0x0000048d,0x00000470, + 0x00050041,0x00000259,0x0000048e,0x000003e9,0x0000048d,0x0006003d,0x0000000c,0x0000048f, + 0x0000048e,0x00000030,0x0000024e,0x00040073,0x00000006,0x00000490,0x0000048f,0x0004003d, + 0x0000000e,0x00000491,0x00000479,0x00050041,0x00000259,0x00000492,0x000003ba,0x00000491, + 0x0006003d,0x0000000c,0x00000493,0x00000492,0x00000030,0x0000024e,0x00040073,0x00000006, + 0x00000494,0x00000493,0x00050085,0x00000006,0x00000495,0x00000490,0x00000494,0x0003003e, + 0x00000496,0x00000495,0x00050039,0x00000006,0x00000497,0x0000000a,0x00000496,0x0003003e, + 0x0000048c,0x00000497,0x0004003d,0x0000000e,0x0000049c,0x00000480,0x00050041,0x000002f0, + 0x0000049d,0x000002ef,0x000001a4,0x0004003d,0x0000000e,0x0000049e,0x0000049d,0x00050084, + 0x0000000e,0x0000049f,0x0000049c,0x0000049e,0x0004003d,0x0000000e,0x000004a0,0x000002e5, + 0x00050084,0x0000000e,0x000004a1,0x000004a0,0x0000026e,0x00050080,0x0000000e,0x000004a2, + 0x0000049f,0x000004a1,0x0004003d,0x0000000e,0x000004a3,0x0000047d,0x00050080,0x0000000e, + 0x000004a4,0x000004a2,0x000004a3,0x0004003d,0x00000006,0x000004a5,0x0000048c,0x00040073, + 0x0000000c,0x000004a6,0x000004a5,0x0003003e,0x000004a7,0x000004a6,0x00050039,0x0000000e, + 0x000004a8,0x00000011,0x000004a7,0x0003003e,0x000004a9,0x000004a8,0x00050039,0x0000000e, + 0x000004aa,0x0000001f,0x000004a9,0x00040071,0x00000329,0x000004ab,0x000004aa,0x00060041, + 0x00000336,0x000004ac,0x0000049b,0x0000019d,0x000004a4,0x0003003e,0x000004ac,0x000004ab, + 0x000200f9,0x00000475,0x000200f8,0x00000475,0x0004003d,0x0000000e,0x000004ad,0x00000470, + 0x00050080,0x0000000e,0x000004ae,0x000004ad,0x0000026e,0x0003003e,0x00000470,0x000004ae, + 0x000200f9,0x00000472,0x000200f8,0x00000474,0x000100fd,0x00010038,0x00050036,0x00000006, + 0x0000000a,0x00000000,0x00000008,0x00030037,0x00000007,0x00000009,0x000200f8,0x0000000b, + 0x0004003b,0x00000013,0x00000047,0x00000007,0x0004003b,0x00000013,0x0000004a,0x00000007, + 0x0004003b,0x00000013,0x0000004e,0x00000007,0x0004003b,0x00000007,0x00000068,0x00000007, + 0x0004003b,0x00000013,0x00000079,0x00000007,0x0004003b,0x00000013,0x0000007f,0x00000007, + 0x0004003d,0x00000006,0x00000048,0x00000009,0x0004007c,0x0000000e,0x00000049,0x00000048, + 0x0003003e,0x00000047,0x00000049,0x0004003d,0x0000000e,0x0000004b,0x00000047,0x000500c7, + 0x0000000e,0x0000004d,0x0000004b,0x0000004c,0x0003003e,0x0000004a,0x0000004d,0x0004003d, + 0x0000000e,0x0000004f,0x00000047,0x000500c7,0x0000000e,0x00000051,0x0000004f,0x00000050, + 0x0003003e,0x0000004e,0x00000051,0x0004003d,0x0000000e,0x00000052,0x0000004e,0x000500ae, + 0x00000054,0x00000055,0x00000052,0x00000053,0x000300f7,0x00000057,0x00000000,0x000400fa, + 0x00000055,0x00000056,0x00000057,0x000200f8,0x00000056,0x0004003d,0x00000006,0x00000058, + 0x00000009,0x000200fe,0x00000058,0x000200f8,0x00000057,0x0004003d,0x0000000e,0x0000005a, + 0x0000004e,0x000500ae,0x00000054,0x0000005c,0x0000005a,0x0000005b,0x000300f7,0x0000005e, + 0x00000000,0x000400fa,0x0000005c,0x0000005d,0x0000005e,0x000200f8,0x0000005d,0x0004003d, + 0x0000000e,0x0000005f,0x0000004a,0x000500c5,0x0000000e,0x00000060,0x0000005f,0x00000053, + 0x0004007c,0x00000006,0x00000061,0x00000060,0x000200fe,0x00000061,0x000200f8,0x0000005e, + 0x0004003d,0x0000000e,0x00000063,0x0000004e,0x000500b0,0x00000054,0x00000065,0x00000063, + 0x00000064,0x000300f7,0x00000067,0x00000000,0x000400fa,0x00000065,0x00000066,0x00000067, + 0x000200f8,0x00000066,0x0004003d,0x0000000e,0x00000069,0x0000004e,0x0004007c,0x00000006, + 0x0000006a,0x00000069,0x00050085,0x00000006,0x0000006c,0x0000006a,0x0000006b,0x0006000c, + 0x00000006,0x0000006d,0x00000001,0x00000002,0x0000006c,0x0003003e,0x00000068,0x0000006d, + 0x0004003d,0x0000000e,0x0000006e,0x0000004a,0x0004007c,0x00000006,0x0000006f,0x0000006e, + 0x0004003d,0x0000000e,0x00000070,0x0000004a,0x0004003d,0x00000006,0x00000071,0x00000068, + 0x00050085,0x00000006,0x00000073,0x00000071,0x00000072,0x0004007c,0x0000000e,0x00000074, + 0x00000073,0x000500c5,0x0000000e,0x00000075,0x00000070,0x00000074,0x0004007c,0x00000006, + 0x00000076,0x00000075,0x00050081,0x00000006,0x00000077,0x0000006f,0x00000076,0x000200fe, + 0x00000077,0x000200f8,0x00000067,0x0004003d,0x0000000e,0x0000007a,0x0000004e,0x000500c2, + 0x0000000e,0x0000007c,0x0000007a,0x0000007b,0x000500c7,0x0000000e,0x0000007e,0x0000007c, + 0x0000007d,0x0003003e,0x00000079,0x0000007e,0x0004003d,0x0000000e,0x00000080,0x0000004e, + 0x00050080,0x0000000e,0x00000082,0x00000080,0x00000081,0x0004003d,0x0000000e,0x00000083, + 0x00000079,0x00050080,0x0000000e,0x00000084,0x00000082,0x00000083,0x000500c7,0x0000000e, + 0x00000086,0x00000084,0x00000085,0x0003003e,0x0000007f,0x00000086,0x0004003d,0x0000000e, + 0x00000087,0x0000004a,0x0004003d,0x0000000e,0x00000088,0x0000007f,0x000500c5,0x0000000e, + 0x00000089,0x00000087,0x00000088,0x0004007c,0x00000006,0x0000008a,0x00000089,0x000200fe, + 0x0000008a,0x00010038,0x00050036,0x0000000e,0x00000011,0x00000000,0x0000000f,0x00030037, + 0x0000000d,0x00000010,0x000200f8,0x00000012,0x0004003d,0x0000000c,0x0000008d,0x00000010, + 0x0004007c,0x0000008e,0x0000008f,0x0000008d,0x00040071,0x0000000e,0x00000090,0x0000008f, + 0x000200fe,0x00000090,0x00010038,0x00050036,0x0000000c,0x00000016,0x00000000,0x00000014, + 0x00030037,0x00000013,0x00000015,0x000200f8,0x00000017,0x0004003d,0x0000000e,0x00000093, + 0x00000015,0x000500c7,0x0000000e,0x00000095,0x00000093,0x00000094,0x00040071,0x0000008e, + 0x00000096,0x00000095,0x0004007c,0x0000000c,0x00000097,0x00000096,0x000200fe,0x00000097, + 0x00010038,0x00050036,0x0000000e,0x0000001b,0x00000000,0x00000018,0x00030037,0x00000013, + 0x00000019,0x00030037,0x00000013,0x0000001a,0x000200f8,0x0000001c,0x0004003b,0x00000013, + 0x0000009a,0x00000007,0x0004003b,0x00000013,0x0000009e,0x00000007,0x0004003b,0x00000013, + 0x000000a2,0x00000007,0x0004003b,0x00000013,0x000000a6,0x00000007,0x0004003d,0x0000000e, + 0x0000009b,0x00000019,0x0004003d,0x0000000e,0x0000009c,0x0000001a,0x000500c2,0x0000000e, + 0x0000009d,0x0000009b,0x0000009c,0x0003003e,0x0000009a,0x0000009d,0x0004003d,0x0000000e, + 0x0000009f,0x0000001a,0x000500c4,0x0000000e,0x000000a0,0x0000007d,0x0000009f,0x00050082, + 0x0000000e,0x000000a1,0x000000a0,0x0000007d,0x0003003e,0x0000009e,0x000000a1,0x0004003d, + 0x0000000e,0x000000a3,0x00000019,0x0004003d,0x0000000e,0x000000a4,0x0000009e,0x000500c7, + 0x0000000e,0x000000a5,0x000000a3,0x000000a4,0x0003003e,0x000000a2,0x000000a5,0x0004003d, + 0x0000000e,0x000000a7,0x0000001a,0x00050082,0x0000000e,0x000000a8,0x000000a7,0x0000007d, + 0x000500c4,0x0000000e,0x000000a9,0x0000007d,0x000000a8,0x0003003e,0x000000a6,0x000000a9, + 0x0004003d,0x0000000e,0x000000aa,0x0000009a,0x0004003d,0x0000000e,0x000000ab,0x000000a2, + 0x0004003d,0x0000000e,0x000000ac,0x000000a6,0x000500ac,0x00000054,0x000000ad,0x000000ab, + 0x000000ac,0x000400a8,0x00000054,0x000000ae,0x000000ad,0x000300f7,0x000000b0,0x00000000, + 0x000400fa,0x000000ae,0x000000af,0x000000b0,0x000200f8,0x000000af,0x0004003d,0x0000000e, + 0x000000b1,0x000000a2,0x0004003d,0x0000000e,0x000000b2,0x000000a6,0x000500aa,0x00000054, + 0x000000b3,0x000000b1,0x000000b2,0x000300f7,0x000000b5,0x00000000,0x000400fa,0x000000b3, + 0x000000b4,0x000000b5,0x000200f8,0x000000b4,0x0004003d,0x0000000e,0x000000b6,0x0000009a, + 0x000500c7,0x0000000e,0x000000b7,0x000000b6,0x0000007d,0x000500ab,0x00000054,0x000000b9, + 0x000000b7,0x000000b8,0x000200f9,0x000000b5,0x000200f8,0x000000b5,0x000700f5,0x00000054, + 0x000000ba,0x000000b3,0x000000af,0x000000b9,0x000000b4,0x000200f9,0x000000b0,0x000200f8, + 0x000000b0,0x000700f5,0x00000054,0x000000bb,0x000000ad,0x0000001c,0x000000ba,0x000000b5, + 0x000600a9,0x0000000e,0x000000bc,0x000000bb,0x0000007d,0x000000b8,0x00050080,0x0000000e, + 0x000000bd,0x000000aa,0x000000bc,0x000200fe,0x000000bd,0x00010038,0x00050036,0x0000000e, + 0x0000001f,0x00000000,0x0000001d,0x00030037,0x00000013,0x0000001e,0x000200f8,0x00000020, + 0x0004003b,0x000000c0,0x000000c1,0x00000007,0x0004003b,0x00000013,0x000000dd,0x00000007, + 0x0004003b,0x00000013,0x000000e3,0x00000007,0x0004003b,0x00000013,0x000000e9,0x00000007, + 0x0004003b,0x00000013,0x000000f0,0x00000007,0x0004003b,0x00000013,0x000000f7,0x00000007, + 0x0004003b,0x00000013,0x000000fa,0x00000007,0x0004003b,0x00000013,0x00000103,0x00000007, + 0x0004003b,0x00000013,0x00000106,0x00000007,0x0004003b,0x00000013,0x0000010f,0x00000007, + 0x0004003b,0x00000013,0x00000111,0x00000007,0x0004003b,0x00000013,0x00000116,0x00000007, + 0x0004003b,0x00000013,0x00000119,0x00000007,0x0004003b,0x00000013,0x0000011b,0x00000007, + 0x0004003b,0x00000013,0x0000011d,0x00000007,0x0004003b,0x00000013,0x00000131,0x00000007, + 0x0004003d,0x0000000e,0x000000c2,0x0000001e,0x000500c7,0x0000000e,0x000000c4,0x000000c2, + 0x000000c3,0x000500aa,0x00000054,0x000000c5,0x000000c4,0x000000c3,0x000300f7,0x000000c7, + 0x00000000,0x000400fa,0x000000c5,0x000000c6,0x000000c7,0x000200f8,0x000000c6,0x0004003d, + 0x0000000e,0x000000c8,0x0000001e,0x000500c7,0x0000000e,0x000000ca,0x000000c8,0x000000c9, + 0x000500ab,0x00000054,0x000000cb,0x000000ca,0x000000b8,0x000200f9,0x000000c7,0x000200f8, + 0x000000c7,0x000700f5,0x00000054,0x000000cc,0x000000c5,0x00000020,0x000000cb,0x000000c6, + 0x0003003e,0x000000c1,0x000000cc,0x0004003d,0x00000054,0x000000cd,0x000000c1,0x000300f7, + 0x000000cf,0x00000000,0x000400fa,0x000000cd,0x000000ce,0x000000cf,0x000200f8,0x000000ce, + 0x000200fe,0x000000b8,0x000200f8,0x000000cf,0x0004003d,0x0000000e,0x000000d1,0x0000001e, + 0x000500c7,0x0000000e,0x000000d3,0x000000d1,0x000000d2,0x000500aa,0x00000054,0x000000d4, + 0x000000d3,0x000000b8,0x000300f7,0x000000d6,0x00000000,0x000400fa,0x000000d4,0x000000d5, + 0x000000d6,0x000200f8,0x000000d5,0x0004003d,0x0000000e,0x000000d7,0x0000001e,0x000500c2, + 0x0000000e,0x000000d9,0x000000d7,0x000000d8,0x000500c7,0x0000000e,0x000000db,0x000000d9, + 0x000000da,0x000200fe,0x000000db,0x000200f8,0x000000d6,0x0004003d,0x0000000e,0x000000de, + 0x0000001e,0x000500c7,0x0000000e,0x000000e0,0x000000de,0x000000df,0x000500ab,0x00000054, + 0x000000e1,0x000000e0,0x000000b8,0x000600a9,0x0000000e,0x000000e2,0x000000e1,0x000000da, + 0x000000b8,0x0003003e,0x000000dd,0x000000e2,0x0004003d,0x0000000e,0x000000e4,0x0000001e, + 0x000500c2,0x0000000e,0x000000e6,0x000000e4,0x000000e5,0x000500c7,0x0000000e,0x000000e8, + 0x000000e6,0x000000e7,0x0003003e,0x000000e3,0x000000e8,0x0004003d,0x0000000e,0x000000ea, + 0x0000001e,0x000500c7,0x0000000e,0x000000eb,0x000000ea,0x000000c9,0x0003003e,0x000000e9, + 0x000000eb,0x0004003d,0x0000000e,0x000000ec,0x000000e3,0x000500aa,0x00000054,0x000000ed, + 0x000000ec,0x000000e7,0x000300f7,0x000000ef,0x00000000,0x000400fa,0x000000ed,0x000000ee, + 0x000000f2,0x000200f8,0x000000ee,0x0003003e,0x000000f0,0x000000f1,0x000200f9,0x000000ef, + 0x000200f8,0x000000f2,0x0004003d,0x0000000e,0x000000f3,0x000000e3,0x000500b2,0x00000054, + 0x000000f4,0x000000f3,0x000000d8,0x000300f7,0x000000f6,0x00000000,0x000400fa,0x000000f4, + 0x000000f5,0x00000115,0x000200f8,0x000000f5,0x0004003d,0x0000000e,0x000000f8,0x000000e3, + 0x000500aa,0x00000054,0x000000f9,0x000000f8,0x000000b8,0x000300f7,0x000000fc,0x00000000, + 0x000400fa,0x000000f9,0x000000fb,0x000000fe,0x000200f8,0x000000fb,0x0004003d,0x0000000e, + 0x000000fd,0x000000e9,0x0003003e,0x000000fa,0x000000fd,0x000200f9,0x000000fc,0x000200f8, + 0x000000fe,0x0004003d,0x0000000e,0x00000100,0x000000e9,0x00050080,0x0000000e,0x00000101, + 0x000000ff,0x00000100,0x0003003e,0x000000fa,0x00000101,0x000200f9,0x000000fc,0x000200f8, + 0x000000fc,0x0004003d,0x0000000e,0x00000102,0x000000fa,0x0003003e,0x000000f7,0x00000102, + 0x0004003d,0x0000000e,0x00000104,0x000000e3,0x000500aa,0x00000054,0x00000105,0x00000104, + 0x000000b8,0x000300f7,0x00000108,0x00000000,0x000400fa,0x00000105,0x00000107,0x0000010a, + 0x000200f8,0x00000107,0x0003003e,0x00000106,0x00000109,0x000200f9,0x00000108,0x000200f8, + 0x0000010a,0x0004003d,0x0000000e,0x0000010c,0x000000e3,0x00050082,0x0000000e,0x0000010d, + 0x0000010b,0x0000010c,0x0003003e,0x00000106,0x0000010d,0x000200f9,0x00000108,0x000200f8, + 0x00000108,0x0004003d,0x0000000e,0x0000010e,0x00000106,0x0003003e,0x00000103,0x0000010e, + 0x0004003d,0x0000000e,0x00000110,0x000000f7,0x0003003e,0x0000010f,0x00000110,0x0004003d, + 0x0000000e,0x00000112,0x00000103,0x0003003e,0x00000111,0x00000112,0x00060039,0x0000000e, + 0x00000113,0x0000001b,0x0000010f,0x00000111,0x0007000c,0x0000000e,0x00000114,0x00000001, + 0x00000026,0x00000113,0x000000d8,0x0003003e,0x000000f0,0x00000114,0x000200f9,0x000000f6, + 0x000200f8,0x00000115,0x0004003d,0x0000000e,0x00000117,0x000000e3,0x00050082,0x0000000e, + 0x00000118,0x00000117,0x000000d8,0x0003003e,0x00000116,0x00000118,0x0004003d,0x0000000e, + 0x0000011c,0x000000e9,0x0003003e,0x0000011b,0x0000011c,0x0003003e,0x0000011d,0x0000011a, + 0x00060039,0x0000000e,0x0000011e,0x0000001b,0x0000011b,0x0000011d,0x0003003e,0x00000119, + 0x0000011e,0x0004003d,0x0000000e,0x0000011f,0x00000119,0x000500aa,0x00000054,0x00000120, + 0x0000011f,0x000000d8,0x000300f7,0x00000122,0x00000000,0x000400fa,0x00000120,0x00000121, + 0x00000122,0x000200f8,0x00000121,0x0003003e,0x00000119,0x000000b8,0x0004003d,0x0000000e, + 0x00000123,0x00000116,0x00050080,0x0000000e,0x00000124,0x00000123,0x0000007d,0x0003003e, + 0x00000116,0x00000124,0x000200f9,0x00000122,0x000200f8,0x00000122,0x0004003d,0x0000000e, + 0x00000125,0x00000116,0x000500ac,0x00000054,0x00000126,0x00000125,0x00000109,0x000400a8, + 0x00000054,0x00000127,0x00000126,0x000300f7,0x00000129,0x00000000,0x000400fa,0x00000127, + 0x00000128,0x00000129,0x000200f8,0x00000128,0x0004003d,0x0000000e,0x0000012a,0x00000116, + 0x000500aa,0x00000054,0x0000012b,0x0000012a,0x00000109,0x0004003d,0x0000000e,0x0000012c, + 0x00000119,0x000500ac,0x00000054,0x0000012e,0x0000012c,0x0000012d,0x000500a7,0x00000054, + 0x0000012f,0x0000012b,0x0000012e,0x000200f9,0x00000129,0x000200f8,0x00000129,0x000700f5, + 0x00000054,0x00000130,0x00000126,0x00000122,0x0000012f,0x00000128,0x000300f7,0x00000133, + 0x00000000,0x000400fa,0x00000130,0x00000132,0x00000134,0x000200f8,0x00000132,0x0003003e, + 0x00000131,0x000000f1,0x000200f9,0x00000133,0x000200f8,0x00000134,0x0004003d,0x0000000e, + 0x00000135,0x00000116,0x000500c4,0x0000000e,0x00000137,0x00000135,0x00000136,0x0004003d, + 0x0000000e,0x00000138,0x00000119,0x000500c5,0x0000000e,0x00000139,0x00000137,0x00000138, + 0x0003003e,0x00000131,0x00000139,0x000200f9,0x00000133,0x000200f8,0x00000133,0x0004003d, + 0x0000000e,0x0000013a,0x00000131,0x0003003e,0x000000f0,0x0000013a,0x000200f9,0x000000f6, + 0x000200f8,0x000000f6,0x000200f9,0x000000ef,0x000200f8,0x000000ef,0x0004003d,0x0000000e, + 0x0000013b,0x000000dd,0x0004003d,0x0000000e,0x0000013c,0x000000f0,0x000500c5,0x0000000e, + 0x0000013d,0x0000013b,0x0000013c,0x000200fe,0x0000013d,0x00010038,0x00050036,0x00000006, + 0x00000023,0x00000000,0x00000021,0x00030037,0x0000000d,0x00000022,0x000200f8,0x00000024, + 0x0004003b,0x00000013,0x00000140,0x00000007,0x0004003b,0x0000000d,0x00000141,0x00000007, + 0x0004003b,0x00000007,0x00000147,0x00000007,0x0004003b,0x00000013,0x00000151,0x00000007, + 0x0004003d,0x0000000c,0x00000142,0x00000022,0x0003003e,0x00000141,0x00000142,0x00050039, + 0x0000000e,0x00000143,0x00000011,0x00000141,0x0003003e,0x00000140,0x00000143,0x0004003d, + 0x0000000e,0x00000144,0x00000140,0x000500ae,0x00000054,0x00000146,0x00000144,0x00000145, + 0x000300f7,0x00000149,0x00000000,0x000400fa,0x00000146,0x00000148,0x0000014b,0x000200f8, + 0x00000148,0x0003003e,0x00000147,0x0000014a,0x000200f9,0x00000149,0x000200f8,0x0000014b, + 0x0004003d,0x0000000c,0x0000014d,0x00000022,0x00040073,0x00000006,0x0000014e,0x0000014d, + 0x0004003d,0x0000000e,0x0000014f,0x00000140,0x00050080,0x0000000e,0x00000150,0x0000014f, + 0x0000007d,0x0003003e,0x00000151,0x00000150,0x00050039,0x0000000c,0x00000152,0x00000016, + 0x00000151,0x00040073,0x00000006,0x00000153,0x00000152,0x00050081,0x00000006,0x00000154, + 0x0000014e,0x00000153,0x00050085,0x00000006,0x00000155,0x0000014c,0x00000154,0x0003003e, + 0x00000147,0x00000155,0x000200f9,0x00000149,0x000200f8,0x00000149,0x0004003d,0x00000006, + 0x00000156,0x00000147,0x000200fe,0x00000156,0x00010038,0x00050036,0x00000006,0x00000026, + 0x00000000,0x00000021,0x00030037,0x0000000d,0x00000025,0x000200f8,0x00000027,0x0004003b, + 0x0000000d,0x0000015b,0x00000007,0x0004003b,0x00000013,0x0000015f,0x00000007,0x0004003d, + 0x0000000c,0x00000159,0x00000025,0x00040073,0x00000006,0x0000015a,0x00000159,0x0004003d, + 0x0000000c,0x0000015c,0x00000025,0x0003003e,0x0000015b,0x0000015c,0x00050039,0x0000000e, + 0x0000015d,0x00000011,0x0000015b,0x00050082,0x0000000e,0x0000015e,0x0000015d,0x0000007d, + 0x0003003e,0x0000015f,0x0000015e,0x00050039,0x0000000c,0x00000160,0x00000016,0x0000015f, + 0x00040073,0x00000006,0x00000161,0x00000160,0x00050081,0x00000006,0x00000162,0x0000015a, + 0x00000161,0x00050085,0x00000006,0x00000163,0x0000014c,0x00000162,0x000200fe,0x00000163, + 0x00010038,0x00050036,0x0000000c,0x0000002a,0x00000000,0x00000028,0x00030037,0x0000000d, + 0x00000029,0x000200f8,0x0000002b,0x0004003b,0x0000000d,0x00000166,0x00000007,0x0004003b, + 0x00000013,0x0000016a,0x00000007,0x0004003d,0x0000000c,0x00000167,0x00000029,0x0003003e, + 0x00000166,0x00000167,0x00050039,0x0000000e,0x00000168,0x00000011,0x00000166,0x00050080, + 0x0000000e,0x00000169,0x00000168,0x0000007d,0x0003003e,0x0000016a,0x00000169,0x00050039, + 0x0000000c,0x0000016b,0x00000016,0x0000016a,0x000200fe,0x0000016b,0x00010038,0x00050036, + 0x0000000c,0x0000002d,0x00000000,0x00000028,0x00030037,0x0000000d,0x0000002c,0x000200f8, + 0x0000002e,0x0004003b,0x0000000d,0x0000016e,0x00000007,0x0004003b,0x00000013,0x00000172, + 0x00000007,0x0004003d,0x0000000c,0x0000016f,0x0000002c,0x0003003e,0x0000016e,0x0000016f, + 0x00050039,0x0000000e,0x00000170,0x00000011,0x0000016e,0x00050082,0x0000000e,0x00000171, + 0x00000170,0x0000007d,0x0003003e,0x00000172,0x00000171,0x00050039,0x0000000c,0x00000173, + 0x00000016,0x00000172,0x000200fe,0x00000173,0x00010038,0x00050036,0x0000000c,0x00000030, + 0x00000000,0x00000028,0x00030037,0x0000000d,0x0000002f,0x000200f8,0x00000031,0x0004003b, + 0x00000007,0x00000176,0x00000007,0x0004003b,0x0000000d,0x0000018a,0x00000007,0x0004003b, + 0x00000007,0x0000018d,0x00000007,0x0004003b,0x0000019b,0x0000019c,0x00000007,0x0004003b, + 0x00000007,0x000001a6,0x00000007,0x0004003b,0x0000000d,0x000001a7,0x00000007,0x0004003b, + 0x0000000d,0x000001b0,0x00000007,0x0004003b,0x00000007,0x000001b3,0x00000007,0x0004003b, + 0x0000000d,0x000001b4,0x00000007,0x0004003b,0x0000000d,0x000001c0,0x00000007,0x0004003d, + 0x0000000c,0x00000177,0x0000002f,0x00040073,0x00000006,0x00000178,0x00000177,0x0003003e, + 0x00000176,0x00000178,0x0004003d,0x00000006,0x00000179,0x00000176,0x000500ba,0x00000054, + 0x0000017b,0x00000179,0x0000017a,0x000400a8,0x00000054,0x0000017c,0x0000017b,0x000400a8, + 0x00000054,0x0000017d,0x0000017c,0x000300f7,0x0000017f,0x00000000,0x000400fa,0x0000017d, + 0x0000017e,0x0000017f,0x000200f8,0x0000017e,0x0004003d,0x00000006,0x00000180,0x00000176, + 0x0004009d,0x00000054,0x00000181,0x00000180,0x000200f9,0x0000017f,0x000200f8,0x0000017f, + 0x000700f5,0x00000054,0x00000182,0x0000017c,0x00000031,0x00000181,0x0000017e,0x000300f7, + 0x00000184,0x00000000,0x000400fa,0x00000182,0x00000183,0x00000184,0x000200f8,0x00000183, + 0x0004003d,0x00000006,0x00000186,0x00000176,0x00050088,0x00000006,0x00000187,0x00000185, + 0x00000186,0x00040073,0x0000000c,0x00000188,0x00000187,0x000200fe,0x00000188,0x000200f8, + 0x00000184,0x0004003d,0x00000006,0x0000018b,0x00000176,0x00050088,0x00000006,0x0000018c, + 0x00000185,0x0000018b,0x0003003e,0x0000018d,0x0000018c,0x00050039,0x00000006,0x0000018e, + 0x0000000a,0x0000018d,0x00040073,0x0000000c,0x0000018f,0x0000018e,0x0003003e,0x0000018a, + 0x0000018f,0x0004003d,0x0000000c,0x00000190,0x0000018a,0x0004009d,0x00000054,0x00000191, + 0x00000190,0x0004003d,0x0000000c,0x00000192,0x0000018a,0x000500b4,0x00000054,0x00000194, + 0x00000192,0x00000193,0x000500a6,0x00000054,0x00000195,0x00000191,0x00000194,0x000300f7, + 0x00000197,0x00000000,0x000400fa,0x00000195,0x00000196,0x00000197,0x000200f8,0x00000196, + 0x0004003d,0x0000000c,0x00000198,0x0000018a,0x000200fe,0x00000198,0x000200f8,0x00000197, + 0x0003003e,0x0000019c,0x0000019d,0x000200f9,0x0000019e,0x000200f8,0x0000019e,0x000400f6, + 0x000001a0,0x000001a1,0x00000000,0x000200f9,0x000001a2,0x000200f8,0x000001a2,0x0004003d, + 0x0000019a,0x000001a3,0x0000019c,0x000500b1,0x00000054,0x000001a5,0x000001a3,0x000001a4, + 0x000400fa,0x000001a5,0x0000019f,0x000001a0,0x000200f8,0x0000019f,0x0004003d,0x0000000c, + 0x000001a8,0x0000018a,0x0003003e,0x000001a7,0x000001a8,0x00050039,0x00000006,0x000001a9, + 0x00000023,0x000001a7,0x0004003d,0x00000006,0x000001aa,0x00000176,0x00050085,0x00000006, + 0x000001ab,0x000001a9,0x000001aa,0x0003003e,0x000001a6,0x000001ab,0x0004003d,0x00000006, + 0x000001ac,0x000001a6,0x000500b8,0x00000054,0x000001ad,0x000001ac,0x00000185,0x000300f7, + 0x000001af,0x00000000,0x000400fa,0x000001ad,0x000001ae,0x000001af,0x000200f8,0x000001ae, + 0x0004003d,0x0000000c,0x000001b1,0x0000018a,0x0003003e,0x000001b0,0x000001b1,0x00050039, + 0x0000000c,0x000001b2,0x0000002a,0x000001b0,0x0003003e,0x0000018a,0x000001b2,0x000200f9, + 0x000001af,0x000200f8,0x000001af,0x0004003d,0x0000000c,0x000001b5,0x0000018a,0x0003003e, + 0x000001b4,0x000001b5,0x00050039,0x00000006,0x000001b6,0x00000026,0x000001b4,0x0004003d, + 0x00000006,0x000001b7,0x00000176,0x00050085,0x00000006,0x000001b8,0x000001b6,0x000001b7, + 0x0003003e,0x000001b3,0x000001b8,0x0004003d,0x0000000c,0x000001b9,0x0000018a,0x000500ba, + 0x00000054,0x000001ba,0x000001b9,0x00000193,0x0004003d,0x00000006,0x000001bb,0x000001b3, + 0x000500ba,0x00000054,0x000001bc,0x000001bb,0x00000185,0x000500a7,0x00000054,0x000001bd, + 0x000001ba,0x000001bc,0x000300f7,0x000001bf,0x00000000,0x000400fa,0x000001bd,0x000001be, + 0x000001bf,0x000200f8,0x000001be,0x0004003d,0x0000000c,0x000001c1,0x0000018a,0x0003003e, + 0x000001c0,0x000001c1,0x00050039,0x0000000c,0x000001c2,0x0000002d,0x000001c0,0x0003003e, + 0x0000018a,0x000001c2,0x000200f9,0x000001bf,0x000200f8,0x000001bf,0x000200f9,0x000001a1, + 0x000200f8,0x000001a1,0x0004003d,0x0000019a,0x000001c3,0x0000019c,0x00050080,0x0000019a, + 0x000001c5,0x000001c3,0x000001c4,0x0003003e,0x0000019c,0x000001c5,0x000200f9,0x0000019e, + 0x000200f8,0x000001a0,0x0004003d,0x0000000c,0x000001c6,0x0000018a,0x000200fe,0x000001c6, + 0x00010038,0x00050036,0x0000000c,0x00000036,0x00000000,0x00000032,0x00030037,0x0000000d, + 0x00000033,0x00030037,0x0000000d,0x00000034,0x00030037,0x0000000d,0x00000035,0x000200f8, + 0x00000037,0x0004003b,0x00000007,0x000001c9,0x00000007,0x0004003b,0x00000007,0x000001cf, + 0x00000007,0x0004003b,0x00000007,0x000001d4,0x00000007,0x0004003b,0x00000007,0x000001d8, + 0x00000007,0x0004003b,0x00000007,0x000001dc,0x00000007,0x0004003b,0x0000019b,0x000001ef, + 0x00000007,0x0004003b,0x00000007,0x000001fc,0x00000007,0x0004003b,0x00000007,0x00000204, + 0x00000007,0x0004003b,0x00000007,0x00000216,0x00000007,0x0004003b,0x00000007,0x00000221, + 0x00000007,0x0004003b,0x00000007,0x00000225,0x00000007,0x0004003d,0x0000000c,0x000001ca, + 0x00000033,0x00040073,0x00000006,0x000001cb,0x000001ca,0x0004003d,0x0000000c,0x000001cc, + 0x00000034,0x00040073,0x00000006,0x000001cd,0x000001cc,0x00050085,0x00000006,0x000001ce, + 0x000001cb,0x000001cd,0x0003003e,0x000001c9,0x000001ce,0x0004003d,0x00000006,0x000001d0, + 0x000001c9,0x0004003d,0x0000000c,0x000001d1,0x00000035,0x00040073,0x00000006,0x000001d2, + 0x000001d1,0x00050081,0x00000006,0x000001d3,0x000001d0,0x000001d2,0x0003003e,0x000001cf, + 0x000001d3,0x0004003d,0x00000006,0x000001d5,0x000001cf,0x0004003d,0x00000006,0x000001d6, + 0x000001c9,0x00050083,0x00000006,0x000001d7,0x000001d5,0x000001d6,0x0003003e,0x000001d4, + 0x000001d7,0x0004003d,0x00000006,0x000001d9,0x000001cf,0x0004003d,0x00000006,0x000001da, + 0x000001d4,0x00050083,0x00000006,0x000001db,0x000001d9,0x000001da,0x0003003e,0x000001d8, + 0x000001db,0x0004003d,0x00000006,0x000001dd,0x000001c9,0x0004003d,0x00000006,0x000001de, + 0x000001d8,0x00050083,0x00000006,0x000001df,0x000001dd,0x000001de,0x0004003d,0x0000000c, + 0x000001e0,0x00000035,0x00040073,0x00000006,0x000001e1,0x000001e0,0x0004003d,0x00000006, + 0x000001e2,0x000001d4,0x00050083,0x00000006,0x000001e3,0x000001e1,0x000001e2,0x00050081, + 0x00000006,0x000001e4,0x000001df,0x000001e3,0x0003003e,0x000001dc,0x000001e4,0x0004003d, + 0x00000006,0x000001e5,0x000001dc,0x000500b7,0x00000054,0x000001e6,0x000001e5,0x0000017a, + 0x000300f7,0x000001e8,0x00000000,0x000400fa,0x000001e6,0x000001e7,0x000001e8,0x000200f8, + 0x000001e7,0x0004003d,0x00000006,0x000001e9,0x000001cf,0x0004009d,0x00000054,0x000001ea, + 0x000001e9,0x000400a8,0x00000054,0x000001eb,0x000001ea,0x000200f9,0x000001e8,0x000200f8, + 0x000001e8,0x000700f5,0x00000054,0x000001ec,0x000001e6,0x00000037,0x000001eb,0x000001e7, + 0x000300f7,0x000001ee,0x00000000,0x000400fa,0x000001ec,0x000001ed,0x000001ee,0x000200f8, + 0x000001ed,0x0004003d,0x00000006,0x000001f0,0x000001cf,0x0006000c,0x00000006,0x000001f1, + 0x00000001,0x00000004,0x000001f0,0x0004007c,0x0000000e,0x000001f2,0x000001f1,0x000500c2, + 0x0000000e,0x000001f4,0x000001f2,0x000001f3,0x000500c7,0x0000000e,0x000001f6,0x000001f4, + 0x000001f5,0x0004007c,0x0000019a,0x000001f7,0x000001f6,0x00050082,0x0000019a,0x000001f9, + 0x000001f7,0x000001f8,0x0007000c,0x0000019a,0x000001fb,0x00000001,0x0000002a,0x000001f9, + 0x000001fa,0x0003003e,0x000001ef,0x000001fb,0x0004003d,0x0000019a,0x000001fd,0x000001ef, + 0x00050082,0x0000019a,0x000001ff,0x000001fd,0x000001fe,0x00050080,0x0000019a,0x00000200, + 0x000001ff,0x000001f8,0x0004007c,0x0000000e,0x00000201,0x00000200,0x000500c4,0x0000000e, + 0x00000202,0x00000201,0x000001f3,0x0004007c,0x00000006,0x00000203,0x00000202,0x0003003e, + 0x000001fc,0x00000203,0x0004003d,0x00000006,0x00000205,0x000001cf,0x0004003d,0x0000019a, + 0x00000206,0x000001ef,0x00050082,0x0000019a,0x00000207,0x000001f8,0x00000206,0x00050080, + 0x0000019a,0x00000208,0x00000207,0x000001fe,0x0004007c,0x0000000e,0x00000209,0x00000208, + 0x000500c4,0x0000000e,0x0000020a,0x00000209,0x000001f3,0x0004007c,0x00000006,0x0000020b, + 0x0000020a,0x00050085,0x00000006,0x0000020c,0x00000205,0x0000020b,0x0003003e,0x00000204, + 0x0000020c,0x0004003d,0x00000006,0x0000020d,0x00000204,0x0004003d,0x00000006,0x0000020e, + 0x00000204,0x0006000c,0x00000006,0x0000020f,0x00000001,0x00000008,0x0000020e,0x00050083, + 0x00000006,0x00000210,0x0000020d,0x0000020f,0x000500b4,0x00000054,0x00000211,0x00000210, + 0x0000014c,0x000300f7,0x00000213,0x00000000,0x000400fa,0x00000211,0x00000212,0x00000213, + 0x000200f8,0x00000212,0x0004003d,0x00000006,0x00000214,0x000001dc,0x000500ba,0x00000054, + 0x00000215,0x00000214,0x0000017a,0x000300f7,0x00000218,0x00000000,0x000400fa,0x00000215, + 0x00000217,0x0000021b,0x000200f8,0x00000217,0x0004003d,0x00000006,0x00000219,0x00000204, + 0x0006000c,0x00000006,0x0000021a,0x00000001,0x00000009,0x00000219,0x0003003e,0x00000216, + 0x0000021a,0x000200f9,0x00000218,0x000200f8,0x0000021b,0x0004003d,0x00000006,0x0000021c, + 0x00000204,0x0006000c,0x00000006,0x0000021d,0x00000001,0x00000008,0x0000021c,0x0003003e, + 0x00000216,0x0000021d,0x000200f9,0x00000218,0x000200f8,0x00000218,0x0004003d,0x00000006, + 0x0000021e,0x00000216,0x0004003d,0x00000006,0x0000021f,0x000001fc,0x00050085,0x00000006, + 0x00000220,0x0000021e,0x0000021f,0x0003003e,0x00000221,0x00000220,0x00050039,0x00000006, + 0x00000222,0x0000000a,0x00000221,0x00040073,0x0000000c,0x00000223,0x00000222,0x000200fe, + 0x00000223,0x000200f8,0x00000213,0x000200f9,0x000001ee,0x000200f8,0x000001ee,0x0004003d, + 0x00000006,0x00000226,0x000001cf,0x0003003e,0x00000225,0x00000226,0x00050039,0x00000006, + 0x00000227,0x0000000a,0x00000225,0x00040073,0x0000000c,0x00000228,0x00000227,0x000200fe, + 0x00000228,0x00010038,0x00050036,0x0000000c,0x00000039,0x00000000,0x00000028,0x00030037, + 0x0000000d,0x00000038,0x000200f8,0x0000003a,0x0004003b,0x0000000d,0x0000022b,0x00000007, + 0x0004003b,0x0000000d,0x0000022e,0x00000007,0x0004003b,0x0000000d,0x00000230,0x00000007, + 0x0004003b,0x0000000d,0x00000231,0x00000007,0x0004003b,0x00000013,0x00000237,0x00000007, + 0x0004003b,0x0000000d,0x00000238,0x00000007,0x0004003b,0x00000013,0x0000023b,0x00000007, + 0x0004003b,0x00000013,0x00000242,0x00000007,0x0004003d,0x0000000c,0x0000022f,0x00000038, + 0x0003003e,0x0000022e,0x0000022f,0x0003003e,0x00000230,0x0000022c,0x0003003e,0x00000231, + 0x0000022d,0x00070039,0x0000000c,0x00000232,0x00000036,0x0000022e,0x00000230,0x00000231, + 0x0003003e,0x0000022b,0x00000232,0x0004003d,0x0000000c,0x00000233,0x0000022b,0x0008000c, + 0x0000000c,0x00000236,0x00000001,0x0000002b,0x00000233,0x00000234,0x00000235,0x0003003e, + 0x0000022b,0x00000236,0x0004003d,0x0000000c,0x00000239,0x0000022b,0x0003003e,0x00000238, + 0x00000239,0x00050039,0x0000000e,0x0000023a,0x00000011,0x00000238,0x0003003e,0x00000237, + 0x0000023a,0x0004003d,0x0000000e,0x0000023c,0x00000237,0x000500c4,0x0000000e,0x0000023e, + 0x0000023c,0x0000023d,0x00050080,0x0000000e,0x00000240,0x0000023e,0x0000023f,0x000500c7, + 0x0000000e,0x00000241,0x00000240,0x00000094,0x0003003e,0x0000023b,0x00000241,0x0004003d, + 0x0000000e,0x00000243,0x0000023b,0x0003003e,0x00000242,0x00000243,0x00050039,0x0000000c, + 0x00000244,0x00000016,0x00000242,0x000200fe,0x00000244,0x00010038,0x00050036,0x0000000c, + 0x00000040,0x00000000,0x0000003b,0x00030037,0x00000013,0x0000003c,0x00030037,0x00000013, + 0x0000003d,0x00030037,0x00000013,0x0000003e,0x00030037,0x00000013,0x0000003f,0x000200f8, + 0x00000041,0x0004003b,0x00000013,0x00000247,0x00000007,0x0004003b,0x0000000d,0x00000253, + 0x00000007,0x0004003b,0x0000000d,0x00000261,0x00000007,0x0004003b,0x0000000d,0x0000026c, + 0x00000007,0x0004003b,0x0000000d,0x00000278,0x00000007,0x0004003b,0x0000000d,0x00000284, + 0x00000007,0x0004003b,0x0000000d,0x00000288,0x00000007,0x0004003d,0x0000000e,0x00000248, + 0x0000003c,0x00050084,0x0000000e,0x0000024a,0x00000248,0x00000249,0x0004003d,0x0000000e, + 0x0000024b,0x0000003d,0x00050080,0x0000000e,0x0000024c,0x0000024a,0x0000024b,0x0004003d, + 0x0000000e,0x0000024d,0x0000003e,0x00050084,0x0000000e,0x0000024f,0x0000024d,0x0000024e, + 0x00050080,0x0000000e,0x00000250,0x0000024c,0x0000024f,0x0004003d,0x0000000e,0x00000251, + 0x0000003f,0x00050080,0x0000000e,0x00000252,0x00000250,0x00000251,0x0003003e,0x00000247, + 0x00000252,0x0004003d,0x0000000e,0x00000258,0x00000247,0x00050041,0x00000259,0x0000025a, + 0x00000257,0x00000258,0x0006003d,0x0000000c,0x0000025b,0x0000025a,0x00000030,0x0000024e, + 0x0004003d,0x0000000e,0x0000025c,0x00000247,0x00050080,0x0000000e,0x0000025d,0x0000025c, + 0x000000d8,0x00050041,0x00000259,0x0000025e,0x00000257,0x0000025d,0x0006003d,0x0000000c, + 0x0000025f,0x0000025e,0x00000030,0x0000024e,0x00050081,0x0000000c,0x00000260,0x0000025b, + 0x0000025f,0x0003003e,0x00000253,0x00000260,0x0004003d,0x0000000e,0x00000262,0x00000247, + 0x00050080,0x0000000e,0x00000263,0x00000262,0x0000010b,0x00050041,0x00000259,0x00000264, + 0x00000257,0x00000263,0x0006003d,0x0000000c,0x00000265,0x00000264,0x00000030,0x0000024e, + 0x0004003d,0x0000000e,0x00000266,0x00000247,0x00050080,0x0000000e,0x00000268,0x00000266, + 0x00000267,0x00050041,0x00000259,0x00000269,0x00000257,0x00000268,0x0006003d,0x0000000c, + 0x0000026a,0x00000269,0x00000030,0x0000024e,0x00050081,0x0000000c,0x0000026b,0x00000265, + 0x0000026a,0x0003003e,0x00000261,0x0000026b,0x0004003d,0x0000000e,0x0000026d,0x00000247, + 0x00050080,0x0000000e,0x0000026f,0x0000026d,0x0000026e,0x00050041,0x00000259,0x00000270, + 0x00000257,0x0000026f,0x0006003d,0x0000000c,0x00000271,0x00000270,0x00000030,0x0000024e, + 0x0004003d,0x0000000e,0x00000272,0x00000247,0x00050080,0x0000000e,0x00000274,0x00000272, + 0x00000273,0x00050041,0x00000259,0x00000275,0x00000257,0x00000274,0x0006003d,0x0000000c, + 0x00000276,0x00000275,0x00000030,0x0000024e,0x00050081,0x0000000c,0x00000277,0x00000271, + 0x00000276,0x0003003e,0x0000026c,0x00000277,0x0004003d,0x0000000e,0x00000279,0x00000247, + 0x00050080,0x0000000e,0x0000027b,0x00000279,0x0000027a,0x00050041,0x00000259,0x0000027c, + 0x00000257,0x0000027b,0x0006003d,0x0000000c,0x0000027d,0x0000027c,0x00000030,0x0000024e, + 0x0004003d,0x0000000e,0x0000027e,0x00000247,0x00050080,0x0000000e,0x00000280,0x0000027e, + 0x0000027f,0x00050041,0x00000259,0x00000281,0x00000257,0x00000280,0x0006003d,0x0000000c, + 0x00000282,0x00000281,0x00000030,0x0000024e,0x00050081,0x0000000c,0x00000283,0x0000027d, + 0x00000282,0x0003003e,0x00000278,0x00000283,0x0004003d,0x0000000c,0x00000285,0x00000253, + 0x0004003d,0x0000000c,0x00000286,0x00000261,0x00050081,0x0000000c,0x00000287,0x00000285, + 0x00000286,0x0003003e,0x00000284,0x00000287,0x0004003d,0x0000000c,0x00000289,0x00000284, + 0x0004003d,0x0000000c,0x0000028a,0x0000026c,0x00050081,0x0000000c,0x0000028b,0x00000289, + 0x0000028a,0x0003003e,0x00000288,0x0000028b,0x0004003d,0x0000000c,0x0000028c,0x00000288, + 0x0004003d,0x0000000c,0x0000028d,0x00000278,0x00050081,0x0000000c,0x0000028e,0x0000028c, + 0x0000028d,0x000200fe,0x0000028e,0x00010038,0x00050036,0x0000000c,0x00000045,0x00000000, + 0x00000042,0x00030037,0x00000013,0x00000043,0x00030037,0x00000013,0x00000044,0x000200f8, + 0x00000046,0x0004003b,0x0000000d,0x00000291,0x00000007,0x0004003b,0x00000013,0x00000292, + 0x00000007,0x0004003b,0x00000013,0x00000294,0x00000007,0x0004003b,0x00000013,0x00000296, + 0x00000007,0x0004003b,0x00000013,0x00000297,0x00000007,0x0004003b,0x00000013,0x00000299, + 0x00000007,0x0004003b,0x00000013,0x0000029b,0x00000007,0x0004003b,0x00000013,0x0000029d, + 0x00000007,0x0004003b,0x00000013,0x0000029e,0x00000007,0x0004003b,0x0000000d,0x000002a1, + 0x00000007,0x0004003b,0x00000013,0x000002a3,0x00000007,0x0004003b,0x00000013,0x000002a5, + 0x00000007,0x0004003b,0x00000013,0x000002a7,0x00000007,0x0004003b,0x00000013,0x000002a8, + 0x00000007,0x0004003b,0x0000000d,0x000002ab,0x00000007,0x0004003b,0x00000013,0x000002ad, + 0x00000007,0x0004003b,0x00000013,0x000002af,0x00000007,0x0004003b,0x00000013,0x000002b1, + 0x00000007,0x0004003b,0x00000013,0x000002b2,0x00000007,0x0004003b,0x0000000d,0x000002b5, + 0x00000007,0x0004003b,0x00000013,0x000002b6,0x00000007,0x0004003b,0x00000013,0x000002b8, + 0x00000007,0x0004003b,0x00000013,0x000002ba,0x00000007,0x0004003b,0x00000013,0x000002bb, + 0x00000007,0x0004003b,0x00000013,0x000002bd,0x00000007,0x0004003b,0x00000013,0x000002bf, + 0x00000007,0x0004003b,0x00000013,0x000002c1,0x00000007,0x0004003b,0x00000013,0x000002c2, + 0x00000007,0x0004003b,0x0000000d,0x000002c5,0x00000007,0x0004003b,0x00000013,0x000002c7, + 0x00000007,0x0004003b,0x00000013,0x000002c9,0x00000007,0x0004003b,0x00000013,0x000002cb, + 0x00000007,0x0004003b,0x00000013,0x000002cc,0x00000007,0x0004003b,0x0000000d,0x000002cf, + 0x00000007,0x0004003b,0x00000013,0x000002d1,0x00000007,0x0004003b,0x00000013,0x000002d3, + 0x00000007,0x0004003b,0x00000013,0x000002d5,0x00000007,0x0004003b,0x00000013,0x000002d6, + 0x00000007,0x0004003d,0x0000000e,0x00000293,0x00000043,0x0003003e,0x00000292,0x00000293, + 0x0004003d,0x0000000e,0x00000295,0x00000044,0x0003003e,0x00000294,0x00000295,0x0003003e, + 0x00000296,0x000000b8,0x0003003e,0x00000297,0x000000b8,0x00080039,0x0000000c,0x00000298, + 0x00000040,0x00000292,0x00000294,0x00000296,0x00000297,0x0004003d,0x0000000e,0x0000029a, + 0x00000043,0x0003003e,0x00000299,0x0000029a,0x0004003d,0x0000000e,0x0000029c,0x00000044, + 0x0003003e,0x0000029b,0x0000029c,0x0003003e,0x0000029d,0x0000007d,0x0003003e,0x0000029e, + 0x000000b8,0x00080039,0x0000000c,0x0000029f,0x00000040,0x00000299,0x0000029b,0x0000029d, + 0x0000029e,0x00050081,0x0000000c,0x000002a0,0x00000298,0x0000029f,0x0003003e,0x00000291, + 0x000002a0,0x0004003d,0x0000000c,0x000002a2,0x00000291,0x0004003d,0x0000000e,0x000002a4, + 0x00000043,0x0003003e,0x000002a3,0x000002a4,0x0004003d,0x0000000e,0x000002a6,0x00000044, + 0x0003003e,0x000002a5,0x000002a6,0x0003003e,0x000002a7,0x0000024e,0x0003003e,0x000002a8, + 0x000000b8,0x00080039,0x0000000c,0x000002a9,0x00000040,0x000002a3,0x000002a5,0x000002a7, + 0x000002a8,0x00050081,0x0000000c,0x000002aa,0x000002a2,0x000002a9,0x0003003e,0x000002a1, + 0x000002aa,0x0004003d,0x0000000c,0x000002ac,0x000002a1,0x0004003d,0x0000000e,0x000002ae, + 0x00000043,0x0003003e,0x000002ad,0x000002ae,0x0004003d,0x0000000e,0x000002b0,0x00000044, + 0x0003003e,0x000002af,0x000002b0,0x0003003e,0x000002b1,0x00000136,0x0003003e,0x000002b2, + 0x000000b8,0x00080039,0x0000000c,0x000002b3,0x00000040,0x000002ad,0x000002af,0x000002b1, + 0x000002b2,0x00050081,0x0000000c,0x000002b4,0x000002ac,0x000002b3,0x0003003e,0x000002ab, + 0x000002b4,0x0004003d,0x0000000e,0x000002b7,0x00000043,0x0003003e,0x000002b6,0x000002b7, + 0x0004003d,0x0000000e,0x000002b9,0x00000044,0x0003003e,0x000002b8,0x000002b9,0x0003003e, + 0x000002ba,0x000000b8,0x0003003e,0x000002bb,0x0000007d,0x00080039,0x0000000c,0x000002bc, + 0x00000040,0x000002b6,0x000002b8,0x000002ba,0x000002bb,0x0004003d,0x0000000e,0x000002be, + 0x00000043,0x0003003e,0x000002bd,0x000002be,0x0004003d,0x0000000e,0x000002c0,0x00000044, + 0x0003003e,0x000002bf,0x000002c0,0x0003003e,0x000002c1,0x0000007d,0x0003003e,0x000002c2, + 0x0000007d,0x00080039,0x0000000c,0x000002c3,0x00000040,0x000002bd,0x000002bf,0x000002c1, + 0x000002c2,0x00050081,0x0000000c,0x000002c4,0x000002bc,0x000002c3,0x0003003e,0x000002b5, + 0x000002c4,0x0004003d,0x0000000c,0x000002c6,0x000002b5,0x0004003d,0x0000000e,0x000002c8, + 0x00000043,0x0003003e,0x000002c7,0x000002c8,0x0004003d,0x0000000e,0x000002ca,0x00000044, + 0x0003003e,0x000002c9,0x000002ca,0x0003003e,0x000002cb,0x0000024e,0x0003003e,0x000002cc, + 0x0000007d,0x00080039,0x0000000c,0x000002cd,0x00000040,0x000002c7,0x000002c9,0x000002cb, + 0x000002cc,0x00050081,0x0000000c,0x000002ce,0x000002c6,0x000002cd,0x0003003e,0x000002c5, + 0x000002ce,0x0004003d,0x0000000c,0x000002d0,0x000002c5,0x0004003d,0x0000000e,0x000002d2, + 0x00000043,0x0003003e,0x000002d1,0x000002d2,0x0004003d,0x0000000e,0x000002d4,0x00000044, + 0x0003003e,0x000002d3,0x000002d4,0x0003003e,0x000002d5,0x00000136,0x0003003e,0x000002d6, + 0x0000007d,0x00080039,0x0000000c,0x000002d7,0x00000040,0x000002d1,0x000002d3,0x000002d5, + 0x000002d6,0x00050081,0x0000000c,0x000002d8,0x000002d0,0x000002d7,0x0003003e,0x000002cf, + 0x000002d8,0x0004003d,0x0000000c,0x000002d9,0x000002ab,0x0004003d,0x0000000c,0x000002da, + 0x000002cf,0x00050081,0x0000000c,0x000002db,0x000002d9,0x000002da,0x000200fe,0x000002db, + 0x00010038, +}; +inline constexpr uint32_t k_e4m3_k16_f32__gemm_fp8[] = { + 0x07230203,0x00010600,0x0008000b,0x0000044f,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x0000003d,0x00020011,0x00001074,0x00020011, + 0x00001075,0x00020011,0x00001151,0x00020011,0x00001160,0x00020011,0x000014e1,0x00020011, + 0x00001786,0x0005000a,0x5f565053,0x5f545845,0x616f6c66,0x00003874,0x0008000a,0x5f565053, + 0x5f52484b,0x706f6f63,0x74617265,0x5f657669,0x7274616d,0x00007869,0x0006000b,0x00000001, + 0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000003,0x0013000f, + 0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000184,0x00000189,0x0000018c,0x00000199, + 0x00000210,0x0000021c,0x0000022b,0x0000023a,0x000002b1,0x000002c5,0x000002e4,0x000002fe, + 0x00000406,0x00000438,0x0006014b,0x00000004,0x00000026,0x00000007,0x00000008,0x00000008, + 0x00030003,0x00000002,0x000001cc,0x00090004,0x455f4c47,0x635f5458,0x72746e6f,0x665f6c6f, + 0x5f776f6c,0x72747461,0x74756269,0x00007365,0x00060004,0x455f4c47,0x665f5458,0x74616f6c, + 0x6d34655f,0x00000033,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x36315f72,0x5f746962, + 0x726f7473,0x00656761,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x62385f72,0x735f7469, + 0x61726f74,0x00006567,0x000b0004,0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70, + 0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f, + 0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004, + 0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669,0x00080004, + 0x4b5f4c47,0x635f5248,0x65706f6f,0x69746172,0x6d5f6576,0x69727461,0x00000078,0x00090004, + 0x4b5f4c47,0x6d5f5248,0x726f6d65,0x63735f79,0x5f65706f,0x616d6573,0x6369746e,0x00000073, + 0x00090004,0x4b5f4c47,0x735f5248,0x65646168,0x75735f72,0x6f726762,0x625f7075,0x63697361, + 0x00000000,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000d,0x6e756f72, + 0x36314664,0x3b316628,0x00000000,0x00040005,0x0000000c,0x756c6176,0x00000065,0x00060005, + 0x00000013,0x42363166,0x28737469,0x31363166,0x0000003b,0x00040005,0x00000012,0x756c6176, + 0x00000065,0x00060005,0x00000019,0x66696873,0x656e5274,0x3b317528,0x003b3175,0x00040005, + 0x00000017,0x756c6176,0x00000065,0x00040005,0x00000018,0x66696873,0x00000074,0x00080005, + 0x0000001d,0x336d3465,0x65646f43,0x6d6f7246,0x42363146,0x28737469,0x003b3175,0x00050005, + 0x0000001c,0x666c6168,0x73746942,0x00000000,0x00060005,0x00000021,0x336d3465,0x33466f54, + 0x31752832,0x0000003b,0x00040005,0x00000020,0x73746962,0x00000000,0x00060005,0x00000024, + 0x7543706d,0x53636962,0x28756c69,0x003b3166,0x00040005,0x00000023,0x756c6176,0x00000065, + 0x00060005,0x00000027,0x336d3465,0x6f547748,0x28323346,0x003b3175,0x00040005,0x00000026, + 0x65646f63,0x00000000,0x00040005,0x00000029,0x73746962,0x00000000,0x00040005,0x0000002c, + 0x6e676973,0x00000000,0x00050005,0x00000030,0x6e67616d,0x64757469,0x00000065,0x00040005, + 0x0000004a,0x6c616373,0x00006465,0x00030005,0x0000005b,0x0062736c,0x00040005,0x00000060, + 0x6e756f72,0x00646564,0x00050005,0x00000074,0x746f7571,0x746e6569,0x00000000,0x00060005, + 0x00000078,0x616d6572,0x65646e69,0x73614d72,0x0000006b,0x00050005,0x0000007c,0x616d6572, + 0x65646e69,0x00000072,0x00040005,0x00000080,0x666c6168,0x00796177,0x00040005,0x0000009b, + 0x614e7369,0x0000006e,0x00050005,0x000000b7,0x6167656e,0x65766974,0x00000000,0x00050005, + 0x000000bd,0x6f707865,0x746e656e,0x00000000,0x00050005,0x000000c3,0x746e616d,0x61737369, + 0x00000000,0x00040005,0x000000ca,0x65646f63,0x00000000,0x00050005,0x000000d1,0x6e676973, + 0x63696669,0x00646e61,0x00040005,0x000000dd,0x66696873,0x00000074,0x00040005,0x000000e9, + 0x61726170,0x0000006d,0x00040005,0x000000eb,0x61726170,0x0000006d,0x00050005,0x000000f0, + 0x78453465,0x656e6f70,0x0000746e,0x00050005,0x000000f3,0x614d3465,0x7369746e,0x00006173, + 0x00040005,0x000000f5,0x61726170,0x0000006d,0x00040005,0x000000f7,0x61726170,0x0000006d, + 0x00050005,0x0000011a,0x6167656e,0x65766974,0x00000000,0x00050005,0x0000011e,0x6f707865, + 0x746e656e,0x00000000,0x00050005,0x00000122,0x746e616d,0x61737369,0x00000000,0x00040005, + 0x00000129,0x756c6176,0x00000065,0x00040005,0x00000150,0x6e756f62,0x00646564,0x00040005, + 0x00000155,0x61726170,0x0000006d,0x00050005,0x00000157,0x6f736261,0x6574756c,0x00000000, + 0x00040005,0x0000015a,0x61726170,0x0000006d,0x00040005,0x0000015c,0x656e6e69,0x00000072, + 0x00040005,0x00000161,0x61726170,0x0000006d,0x00050005,0x00000163,0x796c6f70,0x696d6f6e, + 0x00006c61,0x00040005,0x00000168,0x61726170,0x0000006d,0x00040005,0x0000016d,0x61726170, + 0x0000006d,0x00040005,0x0000017c,0x61726170,0x0000006d,0x00040005,0x00000181,0x65726874, + 0x00006461,0x00080005,0x00000184,0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163,0x44496e6f, + 0x00000000,0x00050005,0x00000188,0x67627573,0x70756f72,0x00000000,0x00060005,0x00000189, + 0x535f6c67,0x72676275,0x4970756f,0x00000044,0x00040005,0x0000018b,0x696c7073,0x00000074, + 0x00060005,0x0000018c,0x575f6c67,0x476b726f,0x70756f72,0x00004449,0x00040005,0x0000018f, + 0x494c5053,0x00004b54,0x00060005,0x00000191,0x756c6f63,0x694c6e6d,0x7261656e,0x00000000, + 0x00040005,0x00000195,0x63746162,0x00000068,0x00040005,0x00000197,0x68737550,0x00000000, + 0x00050006,0x00000197,0x00000000,0x73776f72,0x00000000,0x00040006,0x00000197,0x00000001, + 0x0000004e,0x00050006,0x00000197,0x00000002,0x74616d4e,0x00786972,0x00080006,0x00000197, + 0x00000003,0x67696577,0x6f437468,0x6e6d756c,0x7366664f,0x00007465,0x00060006,0x00000197, + 0x00000004,0x75706e69,0x72745374,0x00656469,0x00070006,0x00000197,0x00000005,0x75706e69, + 0x6c6f4374,0x426e6d75,0x00657361,0x00070006,0x00000197,0x00000006,0x7074756f,0x74537475, + 0x65646972,0x00000000,0x00080006,0x00000197,0x00000007,0x7074756f,0x6f437475,0x6e6d756c, + 0x7366664f,0x00007465,0x00070006,0x00000197,0x00000008,0x48787561,0x4f666c61,0x65736666, + 0x00000074,0x00050006,0x00000197,0x00000009,0x63746162,0x00736568,0x00070006,0x00000197, + 0x0000000a,0x756c6f63,0x72476e6d,0x7370756f,0x00000000,0x00060006,0x00000197,0x0000000b, + 0x696c7073,0x72745374,0x00656469,0x00030005,0x00000199,0x00006370,0x00050005,0x000001a0, + 0x756c6f63,0x72476e6d,0x0070756f,0x00050005,0x000001a5,0x636f6c62,0x776f526b,0x00000000, + 0x00050005,0x000001ae,0x47425553,0x50554f52,0x00000053,0x00030005,0x000001af,0x00004d42, + 0x00040005,0x000001b1,0x426c6f63,0x00657361,0x00040005,0x000001b3,0x454c4954,0x00000053, + 0x00030005,0x000001b4,0x00004e42,0x00050005,0x000001b6,0x4374756f,0x6d756c6f,0x0000006e, + 0x00040005,0x000001c0,0x656c6974,0x00776f52,0x00040005,0x000001c3,0x45524854,0x00534441, + 0x00060005,0x000001c4,0x47425553,0x50554f52,0x554f435f,0x0000544e,0x00050005,0x000001c5, + 0x5f574f52,0x454c4954,0x00000053,0x00070005,0x000001c6,0x47425553,0x50554f52,0x45505f53, + 0x4f525f52,0x00000057,0x00050005,0x000001c9,0x656c6974,0x756c6f43,0x00306e6d,0x00060005, + 0x000001cc,0x554c4f43,0x545f4e4d,0x53454c49,0x00000000,0x00070005,0x000001cd,0x454c4954, + 0x45505f53,0x55535f52,0x4f524742,0x00005055,0x00050005,0x000001cf,0x73776f72,0x696c6156, + 0x00000064,0x00060005,0x000001d7,0x64656573,0x69736552,0x6c617564,0x00000000,0x00040005, + 0x000001d8,0x47414c46,0x00000053,0x00030005,0x000001e1,0x00000069,0x00030005,0x000001eb, + 0x00776f72,0x00040005,0x000001f0,0x756c6f63,0x00006e6d,0x00040005,0x000001f5,0x756c6176, + 0x00000065,0x00040005,0x000001fc,0x65646e69,0x00000078,0x00050005,0x0000020e,0x69736552, + 0x6c617564,0x00003445,0x00060006,0x0000020e,0x00000000,0x69736572,0x6c617564,0x00000038, + 0x00030005,0x00000210,0x00000000,0x00040005,0x00000216,0x61726170,0x0000006d,0x00060005, + 0x0000021a,0x69736552,0x6c617564,0x666c6148,0x00000000,0x00060006,0x0000021a,0x00000000, + 0x69736572,0x6c617564,0x00003631,0x00030005,0x0000021c,0x00000000,0x00030005,0x00000229, + 0x00787541,0x00050006,0x00000229,0x00000000,0x31787561,0x00000036,0x00030005,0x0000022b, + 0x00000000,0x00040005,0x00000235,0x61726170,0x0000006d,0x00040005,0x0000023a,0x636f6c62, + 0x0036316b,0x00030005,0x00000243,0x00000074,0x00030005,0x00000250,0x00005f68,0x00030005, + 0x00000264,0x00636361,0x00040005,0x0000026e,0x61746f74,0x0000006c,0x00050005,0x00000273, + 0x6c6f4361,0x426e6d75,0x00657361,0x00030005,0x0000027e,0x0000004b,0x00040005,0x00000282, + 0x6765426b,0x00006e69,0x00040005,0x00000285,0x70657473,0x00000073,0x00030005,0x00000287, + 0x00000073,0x00040005,0x0000028f,0x70657473,0x00000000,0x00030005,0x00000293,0x00000069, + 0x00030005,0x0000029d,0x00000072,0x00030005,0x000002a0,0x00000077,0x00030005,0x000002a3, + 0x00776f72,0x00040005,0x000002ad,0x65646f63,0x00000073,0x00040005,0x000002af,0x75706e49, + 0x00004174,0x00040006,0x000002af,0x00000000,0x00003461,0x00030005,0x000002b1,0x00000000, + 0x00040005,0x000002c5,0x67617473,0x00004165,0x00030005,0x000002d0,0x00000069,0x00030005, + 0x000002da,0x0000006e,0x00030005,0x000002dd,0x00000077,0x00040005,0x000002e0,0x65646f63, + 0x00000073,0x00040005,0x000002e2,0x75706e49,0x00004274,0x00040006,0x000002e2,0x00000000, + 0x00003462,0x00030005,0x000002e4,0x00000000,0x00040005,0x000002fe,0x67617473,0x00004265, + 0x00030005,0x0000030b,0x00000074,0x00030005,0x00000313,0x00005f73,0x00030005,0x0000031e, + 0x00005f61,0x00030005,0x0000032d,0x00005f62,0x00030005,0x0000034b,0x00005f72,0x00040005, + 0x00000359,0x61726170,0x0000006d,0x00030005,0x00000362,0x0000626b,0x00050005,0x00000365, + 0x54524150,0x4f495449,0x0000004e,0x00030005,0x00000377,0x00000074,0x00030005,0x00000392, + 0x00005f72,0x00040005,0x000003a0,0x61726170,0x0000006d,0x00030005,0x000003b0,0x00000074, + 0x00030005,0x000003c2,0x00000074,0x00030005,0x000003ca,0x00005f68,0x00030005,0x000003e1, + 0x00000069,0x00030005,0x000003eb,0x00776f72,0x00040005,0x000003f0,0x756c6f63,0x00006e6d, + 0x00040005,0x000003fc,0x756c6176,0x00000065,0x00050005,0x00000404,0x7074754f,0x61487475, + 0x0000666c,0x00050006,0x00000404,0x00000000,0x3174756f,0x00000036,0x00030005,0x00000406, + 0x00000000,0x00040005,0x00000424,0x61726170,0x0000006d,0x00040005,0x00000427,0x65646e69, + 0x00000078,0x00050005,0x00000436,0x7074754f,0x34457475,0x00000000,0x00050006,0x00000436, + 0x00000000,0x3874756f,0x00000000,0x00030005,0x00000438,0x00000000,0x00040005,0x0000043a, + 0x61726170,0x0000006d,0x00040005,0x0000043d,0x61726170,0x0000006d,0x00040005,0x0000044a, + 0x54504544,0x00000048,0x00040005,0x0000044b,0x56444150,0x00000034,0x00040005,0x0000044e, + 0x4554534b,0x00000050,0x00040047,0x00000007,0x00000001,0x00000008,0x00040047,0x00000184, + 0x0000000b,0x0000001b,0x00040047,0x00000189,0x0000000b,0x00000028,0x00040047,0x0000018c, + 0x0000000b,0x0000001a,0x00040047,0x0000018f,0x00000001,0x00000009,0x00030047,0x00000197, + 0x00000002,0x00050048,0x00000197,0x00000000,0x00000023,0x00000000,0x00050048,0x00000197, + 0x00000001,0x00000023,0x00000004,0x00050048,0x00000197,0x00000002,0x00000023,0x00000008, + 0x00050048,0x00000197,0x00000003,0x00000023,0x0000000c,0x00050048,0x00000197,0x00000004, + 0x00000023,0x00000010,0x00050048,0x00000197,0x00000005,0x00000023,0x00000014,0x00050048, + 0x00000197,0x00000006,0x00000023,0x00000018,0x00050048,0x00000197,0x00000007,0x00000023, + 0x0000001c,0x00050048,0x00000197,0x00000008,0x00000023,0x00000020,0x00050048,0x00000197, + 0x00000009,0x00000023,0x00000024,0x00050048,0x00000197,0x0000000a,0x00000023,0x00000028, + 0x00050048,0x00000197,0x0000000b,0x00000023,0x0000002c,0x00040047,0x000001ae,0x00000001, + 0x00000007,0x00040047,0x000001b3,0x00000001,0x00000001,0x00040047,0x000001d8,0x00000001, + 0x00000002,0x00040047,0x0000020d,0x00000006,0x00000001,0x00030047,0x0000020e,0x00000002, + 0x00040048,0x0000020e,0x00000000,0x00000018,0x00050048,0x0000020e,0x00000000,0x00000023, + 0x00000000,0x00030047,0x00000210,0x00000018,0x00040047,0x00000210,0x00000021,0x00000006, + 0x00040047,0x00000210,0x00000022,0x00000000,0x00040047,0x00000219,0x00000006,0x00000002, + 0x00030047,0x0000021a,0x00000002,0x00040048,0x0000021a,0x00000000,0x00000018,0x00050048, + 0x0000021a,0x00000000,0x00000023,0x00000000,0x00030047,0x0000021c,0x00000018,0x00040047, + 0x0000021c,0x00000021,0x00000003,0x00040047,0x0000021c,0x00000022,0x00000000,0x00040047, + 0x00000228,0x00000006,0x00000002,0x00030047,0x00000229,0x00000002,0x00040048,0x00000229, + 0x00000000,0x00000018,0x00050048,0x00000229,0x00000000,0x00000023,0x00000000,0x00030047, + 0x0000022b,0x00000018,0x00040047,0x0000022b,0x00000021,0x00000004,0x00040047,0x0000022b, + 0x00000022,0x00000000,0x00040047,0x0000027e,0x00000001,0x00000000,0x00040047,0x000002ae, + 0x00000006,0x00000010,0x00030047,0x000002af,0x00000002,0x00040048,0x000002af,0x00000000, + 0x00000018,0x00050048,0x000002af,0x00000000,0x00000023,0x00000000,0x00030047,0x000002b1, + 0x00000018,0x00040047,0x000002b1,0x00000021,0x00000000,0x00040047,0x000002b1,0x00000022, + 0x00000000,0x00040047,0x000002e1,0x00000006,0x00000010,0x00030047,0x000002e2,0x00000002, + 0x00040048,0x000002e2,0x00000000,0x00000018,0x00050048,0x000002e2,0x00000000,0x00000023, + 0x00000000,0x00030047,0x000002e4,0x00000018,0x00040047,0x000002e4,0x00000021,0x00000001, + 0x00040047,0x000002e4,0x00000022,0x00000000,0x00040047,0x00000365,0x00000001,0x00000003, + 0x00040047,0x00000403,0x00000006,0x00000002,0x00030047,0x00000404,0x00000002,0x00040048, + 0x00000404,0x00000000,0x00000019,0x00050048,0x00000404,0x00000000,0x00000023,0x00000000, + 0x00030047,0x00000406,0x00000019,0x00040047,0x00000406,0x00000021,0x00000002,0x00040047, + 0x00000406,0x00000022,0x00000000,0x00040047,0x00000435,0x00000006,0x00000001,0x00030047, + 0x00000436,0x00000002,0x00040048,0x00000436,0x00000000,0x00000019,0x00050048,0x00000436, + 0x00000000,0x00000023,0x00000000,0x00030047,0x00000438,0x00000019,0x00040047,0x00000438, + 0x00000021,0x00000005,0x00040047,0x00000438,0x00000022,0x00000000,0x00040047,0x0000044a, + 0x00000001,0x00000004,0x00040047,0x0000044b,0x00000001,0x00000005,0x00040047,0x0000044c, + 0x00000001,0x00000008,0x00040047,0x0000044e,0x00000001,0x0000000a,0x00020013,0x00000002, + 0x00030021,0x00000003,0x00000002,0x00040015,0x00000006,0x00000020,0x00000000,0x00040032, + 0x00000006,0x00000007,0x00000001,0x0004002b,0x00000006,0x00000008,0x00000001,0x00030016, + 0x00000009,0x00000020,0x00040020,0x0000000a,0x00000007,0x00000009,0x00040021,0x0000000b, + 0x00000009,0x0000000a,0x00030016,0x0000000f,0x00000010,0x00040020,0x00000010,0x00000007, + 0x0000000f,0x00040021,0x00000011,0x00000006,0x00000010,0x00040020,0x00000015,0x00000007, + 0x00000006,0x00050021,0x00000016,0x00000006,0x00000015,0x00000015,0x00040021,0x0000001b, + 0x00000006,0x00000015,0x00040021,0x0000001f,0x00000009,0x00000015,0x0004002b,0x00000006, + 0x0000002e,0x80000000,0x0004002b,0x00000006,0x00000032,0x7fffffff,0x0004002b,0x00000006, + 0x00000035,0x7f800000,0x00020014,0x00000036,0x0004002b,0x00000006,0x0000003d,0x477ff000, + 0x0004002b,0x00000006,0x00000046,0x38800000,0x0004002b,0x00000009,0x0000004d,0x4b800000, + 0x0004002b,0x00000009,0x00000054,0x33800000,0x0004002b,0x00000006,0x0000005d,0x0000000d, + 0x0004002b,0x00000006,0x00000062,0x00000fff,0x0004002b,0x00000006,0x00000066,0xffffe000, + 0x00040015,0x0000006f,0x00000010,0x00000000,0x0004002b,0x00000006,0x00000092,0x00000000, + 0x00040020,0x0000009a,0x00000007,0x00000036,0x0004002b,0x00000006,0x0000009d,0x00007c00, + 0x0004002b,0x00000006,0x000000a3,0x000003ff,0x0004002b,0x00000006,0x000000ac,0x00007fff, + 0x0004002b,0x00000006,0x000000b2,0x00000008,0x0004002b,0x00000006,0x000000b4,0x00000080, + 0x0004002b,0x00000006,0x000000b9,0x00008000,0x0004002b,0x00000006,0x000000bf,0x0000000a, + 0x0004002b,0x00000006,0x000000c1,0x0000001f,0x0004002b,0x00000006,0x000000cb,0x0000007e, + 0x0004002b,0x00000006,0x000000d9,0x00000400,0x0004002b,0x00000006,0x000000e3,0x0000000f, + 0x0004002b,0x00000006,0x000000e5,0x00000010,0x0004002b,0x00000006,0x000000f4,0x00000007, + 0x0004002b,0x00000006,0x00000107,0x00000006,0x0004002b,0x00000006,0x00000110,0x00000003, + 0x0004002b,0x00000009,0x0000012c,0x3b000000,0x0004002b,0x00000009,0x00000136,0x00000000, + 0x0004002b,0x00000009,0x00000138,0x3f800000,0x0004002b,0x00000009,0x0000013b,0x3e000000, + 0x0004002b,0x00000006,0x0000013f,0x00000078,0x0004002b,0x00000006,0x00000141,0x00000017, + 0x0004002b,0x00000009,0x00000152,0xc0800000,0x0004002b,0x00000009,0x00000153,0x40800000, + 0x0004002b,0x00000009,0x0000015d,0xbd650000,0x0004002b,0x00000009,0x0000015f,0x3ee50000, + 0x0004002b,0x00000009,0x00000166,0x3f650000,0x0004002b,0x00000006,0x00000172,0x0000007f, + 0x0004002b,0x00000006,0x0000017a,0x000000ff,0x00040017,0x00000182,0x00000006,0x00000003, + 0x00040020,0x00000183,0x00000001,0x00000182,0x0004003b,0x00000183,0x00000184,0x00000001, + 0x00040020,0x00000185,0x00000001,0x00000006,0x0004003b,0x00000185,0x00000189,0x00000001, + 0x0004003b,0x00000183,0x0000018c,0x00000001,0x00040032,0x00000006,0x0000018f,0x00000001, + 0x000e001e,0x00000197,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006, + 0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00040020,0x00000198, + 0x00000009,0x00000197,0x0004003b,0x00000198,0x00000199,0x00000009,0x00040015,0x0000019a, + 0x00000020,0x00000001,0x0004002b,0x0000019a,0x0000019b,0x0000000a,0x00040020,0x0000019c, + 0x00000009,0x00000006,0x0004002b,0x00000006,0x000001a8,0x00000002,0x0004002b,0x00000006, + 0x000001ab,0x0000ffff,0x00040032,0x00000006,0x000001ae,0x00000004,0x00060034,0x00000006, + 0x000001af,0x00000084,0x000000e5,0x000001ae,0x00040032,0x00000006,0x000001b3,0x00000004, + 0x00060034,0x00000006,0x000001b4,0x00000084,0x000000e5,0x000001b3,0x0004002b,0x0000019a, + 0x000001b7,0x00000007,0x0004002b,0x0000019a,0x000001bb,0x00000001,0x0004002b,0x00000006, + 0x000001c2,0x00000020,0x00060034,0x00000006,0x000001c3,0x00000084,0x000001c2,0x000001ae, + 0x00060034,0x00000006,0x000001c4,0x00000086,0x000001c3,0x000001c2,0x00060034,0x00000006, + 0x000001c5,0x00000086,0x000001af,0x000000e5,0x00060034,0x00000006,0x000001c6,0x00000086, + 0x000001c4,0x000001c5,0x00060034,0x00000006,0x000001cc,0x00000086,0x000001b4,0x000000e5, + 0x00060034,0x00000006,0x000001cd,0x00000086,0x000001cc,0x000001c6,0x0004002b,0x0000019a, + 0x000001d3,0x00000000,0x00040032,0x00000006,0x000001d8,0x00000000,0x00060034,0x00000006, + 0x000001d9,0x000000c7,0x000001d8,0x00000008,0x00060034,0x00000036,0x000001da,0x000000ab, + 0x000001d9,0x00000092,0x00060034,0x00000006,0x000001e9,0x00000084,0x000001af,0x000001b4, + 0x0004002b,0x0000019a,0x000001fe,0x00000006,0x0004002b,0x00000006,0x00000206,0x00000040, + 0x00060034,0x00000006,0x00000207,0x000000c7,0x000001d8,0x00000206,0x00060034,0x00000036, + 0x00000208,0x000000ab,0x00000207,0x00000092,0x00040015,0x0000020c,0x00000008,0x00000000, + 0x0003001d,0x0000020d,0x0000020c,0x0003001e,0x0000020e,0x0000020d,0x00040020,0x0000020f, + 0x0000000c,0x0000020e,0x0004003b,0x0000020f,0x00000210,0x0000000c,0x00040020,0x00000212, + 0x0000000c,0x0000020c,0x0003001d,0x00000219,0x0000000f,0x0003001e,0x0000021a,0x00000219, + 0x00040020,0x0000021b,0x0000000c,0x0000021a,0x0004003b,0x0000021b,0x0000021c,0x0000000c, + 0x00040020,0x0000021e,0x0000000c,0x0000000f,0x00060034,0x00000006,0x00000223,0x000000c7, + 0x000001d8,0x000001a8,0x00060034,0x00000036,0x00000224,0x000000ab,0x00000223,0x00000092, + 0x0003001d,0x00000228,0x0000000f,0x0003001e,0x00000229,0x00000228,0x00040020,0x0000022a, + 0x0000000c,0x00000229,0x0004003b,0x0000022a,0x0000022b,0x0000000c,0x0004002b,0x0000019a, + 0x0000022c,0x00000008,0x00060034,0x00000006,0x00000237,0x00000084,0x000001af,0x000001b4, + 0x0004001c,0x00000238,0x0000000f,0x00000237,0x00040020,0x00000239,0x00000004,0x00000238, + 0x0004003b,0x00000239,0x0000023a,0x00000004,0x00040020,0x0000023e,0x00000004,0x0000000f, + 0x0004002b,0x00000006,0x00000242,0x00000108,0x00071168,0x0000024e,0x0000000f,0x00000110, + 0x000000e5,0x000000e5,0x000001a8,0x00040020,0x0000024f,0x00000007,0x0000024e,0x00071168, + 0x00000261,0x00000009,0x00000110,0x000000e5,0x000000e5,0x000001a8,0x0004001c,0x00000262, + 0x00000261,0x000001cd,0x00040020,0x00000263,0x00000007,0x00000262,0x00040020,0x00000268, + 0x00000007,0x00000261,0x0004002c,0x00000261,0x0000026c,0x00000136,0x0004002b,0x0000019a, + 0x00000274,0x00000005,0x00060034,0x00000006,0x00000277,0x000000c7,0x000001d8,0x000000b4, + 0x00060034,0x00000036,0x00000278,0x000000ab,0x00000277,0x00000092,0x00040032,0x00000006, + 0x0000027e,0x00000020,0x00060034,0x00000006,0x00000284,0x00000086,0x0000027e,0x000001c2, + 0x00060034,0x00000006,0x00000285,0x00000086,0x00000284,0x0000018f,0x00060034,0x00000006, + 0x0000029b,0x00000084,0x000001af,0x000001a8,0x00040017,0x000002ab,0x00000006,0x00000004, + 0x00040020,0x000002ac,0x00000007,0x000002ab,0x0003001d,0x000002ae,0x000002ab,0x0003001e, + 0x000002af,0x000002ae,0x00040020,0x000002b0,0x0000000c,0x000002af,0x0004003b,0x000002b0, + 0x000002b1,0x0000000c,0x0004002b,0x0000019a,0x000002b3,0x00000004,0x00040020,0x000002bf, + 0x0000000c,0x000002ab,0x00060034,0x00000006,0x000002c2,0x00000084,0x000001af,0x00000110, + 0x0004001c,0x000002c3,0x000002ab,0x000002c2,0x00040020,0x000002c4,0x00000004,0x000002c3, + 0x0004003b,0x000002c4,0x000002c5,0x00000004,0x00040020,0x000002cc,0x00000004,0x000002ab, + 0x00060034,0x00000006,0x000002d8,0x00000084,0x000001b4,0x000001a8,0x0003001d,0x000002e1, + 0x000002ab,0x0003001e,0x000002e2,0x000002e1,0x00040020,0x000002e3,0x0000000c,0x000002e2, + 0x0004003b,0x000002e3,0x000002e4,0x0000000c,0x00060034,0x00000006,0x000002e6,0x00000086, + 0x0000027e,0x000001c2,0x0004002b,0x0000019a,0x000002ea,0x00000002,0x0004002b,0x0000019a, + 0x000002ee,0x00000003,0x00060034,0x00000006,0x000002fb,0x00000084,0x000001b4,0x00000110, + 0x0004001c,0x000002fc,0x000002ab,0x000002fb,0x00040020,0x000002fd,0x00000004,0x000002fc, + 0x0004003b,0x000002fd,0x000002fe,0x00000004,0x00040016,0x0000031b,0x00000008,0x00001076, + 0x00071168,0x0000031c,0x0000031b,0x00000110,0x000000e5,0x000000e5,0x00000092,0x00040020, + 0x0000031d,0x00000007,0x0000031c,0x00071168,0x0000032b,0x0000031b,0x00000110,0x000000e5, + 0x000000e5,0x00000008,0x00040020,0x0000032c,0x00000007,0x0000032b,0x00040020,0x0000034a, + 0x00000007,0x0000019a,0x00040032,0x00000006,0x00000365,0x00000000,0x00060034,0x00000036, + 0x00000366,0x000000ab,0x00000365,0x00000092,0x00060034,0x00000036,0x000003ad,0x000000ab, + 0x00000365,0x00000092,0x00060034,0x00000006,0x000003e9,0x00000084,0x000001af,0x000001b4, + 0x00060034,0x00000036,0x00000400,0x000000ac,0x0000018f,0x00000008,0x0003001d,0x00000403, + 0x0000000f,0x0003001e,0x00000404,0x00000403,0x00040020,0x00000405,0x0000000c,0x00000404, + 0x0004003b,0x00000405,0x00000406,0x0000000c,0x0004002b,0x0000019a,0x00000408,0x0000000b, + 0x00060034,0x00000006,0x0000041e,0x000000c7,0x000001d8,0x000000b2,0x00060034,0x00000036, + 0x0000041f,0x000000ab,0x0000041e,0x00000092,0x0004002b,0x00000006,0x00000430,0x00000030, + 0x00060034,0x00000006,0x00000431,0x000000c7,0x000001d8,0x00000430,0x00060034,0x00000036, + 0x00000432,0x000000ab,0x00000431,0x00000092,0x0003001d,0x00000435,0x0000020c,0x0003001e, + 0x00000436,0x00000435,0x00040020,0x00000437,0x0000000c,0x00000436,0x0004003b,0x00000437, + 0x00000438,0x0000000c,0x00060034,0x00000006,0x00000441,0x000000c7,0x000001d8,0x000000e5, + 0x00060034,0x00000036,0x00000442,0x000000aa,0x00000441,0x00000092,0x00040032,0x00000006, + 0x0000044a,0x00000004,0x00040032,0x00000006,0x0000044b,0x00000001,0x00040032,0x00000006, + 0x0000044c,0x00000001,0x00060033,0x00000182,0x0000044d,0x0000044c,0x00000008,0x00000008, + 0x00040032,0x00000006,0x0000044e,0x00000020,0x00050036,0x00000002,0x00000004,0x00000000, + 0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000015,0x00000181,0x00000007,0x0004003b, + 0x00000015,0x00000188,0x00000007,0x0004003b,0x00000015,0x0000018b,0x00000007,0x0004003b, + 0x00000015,0x00000191,0x00000007,0x0004003b,0x00000015,0x00000195,0x00000007,0x0004003b, + 0x00000015,0x000001a0,0x00000007,0x0004003b,0x00000015,0x000001a5,0x00000007,0x0004003b, + 0x00000015,0x000001b1,0x00000007,0x0004003b,0x00000015,0x000001b6,0x00000007,0x0004003b, + 0x00000015,0x000001c0,0x00000007,0x0004003b,0x00000015,0x000001c9,0x00000007,0x0004003b, + 0x0000009a,0x000001cf,0x00000007,0x0004003b,0x0000009a,0x000001d7,0x00000007,0x0004003b, + 0x00000015,0x000001e1,0x00000007,0x0004003b,0x00000015,0x000001eb,0x00000007,0x0004003b, + 0x00000015,0x000001f0,0x00000007,0x0004003b,0x0000000a,0x000001f5,0x00000007,0x0004003b, + 0x00000015,0x000001fc,0x00000007,0x0004003b,0x0000000a,0x00000209,0x00000007,0x0004003b, + 0x00000015,0x00000216,0x00000007,0x0004003b,0x0000000a,0x00000235,0x00000007,0x0004003b, + 0x00000015,0x00000243,0x00000007,0x0004003b,0x0000024f,0x00000250,0x00000007,0x0004003b, + 0x00000263,0x00000264,0x00000007,0x0004003b,0x00000263,0x0000026e,0x00000007,0x0004003b, + 0x00000015,0x00000273,0x00000007,0x0004003b,0x00000015,0x00000279,0x00000007,0x0004003b, + 0x00000015,0x00000282,0x00000007,0x0004003b,0x00000015,0x00000287,0x00000007,0x0004003b, + 0x00000015,0x0000028f,0x00000007,0x0004003b,0x00000015,0x00000293,0x00000007,0x0004003b, + 0x00000015,0x0000029d,0x00000007,0x0004003b,0x00000015,0x000002a0,0x00000007,0x0004003b, + 0x00000015,0x000002a3,0x00000007,0x0004003b,0x000002ac,0x000002ad,0x00000007,0x0004003b, + 0x00000015,0x000002d0,0x00000007,0x0004003b,0x00000015,0x000002da,0x00000007,0x0004003b, + 0x00000015,0x000002dd,0x00000007,0x0004003b,0x000002ac,0x000002e0,0x00000007,0x0004003b, + 0x00000015,0x0000030b,0x00000007,0x0004003b,0x00000015,0x00000313,0x00000007,0x0004003b, + 0x0000031d,0x0000031e,0x00000007,0x0004003b,0x0000032c,0x0000032d,0x00000007,0x0004003b, + 0x0000034a,0x0000034b,0x00000007,0x0004003b,0x0000000a,0x00000359,0x00000007,0x0004003b, + 0x00000015,0x00000362,0x00000007,0x0004003b,0x00000015,0x00000377,0x00000007,0x0004003b, + 0x0000034a,0x00000392,0x00000007,0x0004003b,0x0000000a,0x000003a0,0x00000007,0x0004003b, + 0x00000015,0x000003b0,0x00000007,0x0004003b,0x00000015,0x000003c2,0x00000007,0x0004003b, + 0x0000024f,0x000003ca,0x00000007,0x0004003b,0x00000015,0x000003e1,0x00000007,0x0004003b, + 0x00000015,0x000003eb,0x00000007,0x0004003b,0x00000015,0x000003f0,0x00000007,0x0004003b, + 0x00000010,0x000003fc,0x00000007,0x0004003b,0x0000000a,0x00000424,0x00000007,0x0004003b, + 0x00000015,0x00000427,0x00000007,0x0004003b,0x00000010,0x0000043a,0x00000007,0x0004003b, + 0x00000015,0x0000043d,0x00000007,0x00050041,0x00000185,0x00000186,0x00000184,0x00000092, + 0x0004003d,0x00000006,0x00000187,0x00000186,0x0003003e,0x00000181,0x00000187,0x0004003d, + 0x00000006,0x0000018a,0x00000189,0x0003003e,0x00000188,0x0000018a,0x00050041,0x00000185, + 0x0000018d,0x0000018c,0x00000092,0x0004003d,0x00000006,0x0000018e,0x0000018d,0x00050089, + 0x00000006,0x00000190,0x0000018e,0x0000018f,0x0003003e,0x0000018b,0x00000190,0x00050041, + 0x00000185,0x00000192,0x0000018c,0x00000092,0x0004003d,0x00000006,0x00000193,0x00000192, + 0x00050086,0x00000006,0x00000194,0x00000193,0x0000018f,0x0003003e,0x00000191,0x00000194, + 0x0004003d,0x00000006,0x00000196,0x00000191,0x00050041,0x0000019c,0x0000019d,0x00000199, + 0x0000019b,0x0004003d,0x00000006,0x0000019e,0x0000019d,0x00050086,0x00000006,0x0000019f, + 0x00000196,0x0000019e,0x0003003e,0x00000195,0x0000019f,0x0004003d,0x00000006,0x000001a1, + 0x00000191,0x00050041,0x0000019c,0x000001a2,0x00000199,0x0000019b,0x0004003d,0x00000006, + 0x000001a3,0x000001a2,0x00050089,0x00000006,0x000001a4,0x000001a1,0x000001a3,0x0003003e, + 0x000001a0,0x000001a4,0x00050041,0x00000185,0x000001a6,0x0000018c,0x00000008,0x0004003d, + 0x00000006,0x000001a7,0x000001a6,0x00050041,0x00000185,0x000001a9,0x0000018c,0x000001a8, + 0x0004003d,0x00000006,0x000001aa,0x000001a9,0x00050084,0x00000006,0x000001ac,0x000001aa, + 0x000001ab,0x00050080,0x00000006,0x000001ad,0x000001a7,0x000001ac,0x00050084,0x00000006, + 0x000001b0,0x000001ad,0x000001af,0x0003003e,0x000001a5,0x000001b0,0x0004003d,0x00000006, + 0x000001b2,0x000001a0,0x00050084,0x00000006,0x000001b5,0x000001b2,0x000001b4,0x0003003e, + 0x000001b1,0x000001b5,0x00050041,0x0000019c,0x000001b8,0x00000199,0x000001b7,0x0004003d, + 0x00000006,0x000001b9,0x000001b8,0x0004003d,0x00000006,0x000001ba,0x00000195,0x00050041, + 0x0000019c,0x000001bc,0x00000199,0x000001bb,0x0004003d,0x00000006,0x000001bd,0x000001bc, + 0x00050084,0x00000006,0x000001be,0x000001ba,0x000001bd,0x00050080,0x00000006,0x000001bf, + 0x000001b9,0x000001be,0x0003003e,0x000001b6,0x000001bf,0x0004003d,0x00000006,0x000001c1, + 0x00000188,0x00050086,0x00000006,0x000001c7,0x000001c1,0x000001c6,0x00050084,0x00000006, + 0x000001c8,0x000001c7,0x000000e5,0x0003003e,0x000001c0,0x000001c8,0x0004003d,0x00000006, + 0x000001ca,0x00000188,0x00050089,0x00000006,0x000001cb,0x000001ca,0x000001c6,0x00050084, + 0x00000006,0x000001ce,0x000001cb,0x000001cd,0x0003003e,0x000001c9,0x000001ce,0x0004003d, + 0x00000006,0x000001d0,0x000001a5,0x0004003d,0x00000006,0x000001d1,0x000001c0,0x00050080, + 0x00000006,0x000001d2,0x000001d0,0x000001d1,0x00050041,0x0000019c,0x000001d4,0x00000199, + 0x000001d3,0x0004003d,0x00000006,0x000001d5,0x000001d4,0x000500b0,0x00000036,0x000001d6, + 0x000001d2,0x000001d5,0x0003003e,0x000001cf,0x000001d6,0x0004003d,0x00000006,0x000001db, + 0x0000018b,0x000500aa,0x00000036,0x000001dc,0x000001db,0x00000092,0x000500a7,0x00000036, + 0x000001dd,0x000001da,0x000001dc,0x0003003e,0x000001d7,0x000001dd,0x0004003d,0x00000036, + 0x000001de,0x000001d7,0x000300f7,0x000001e0,0x00000000,0x000400fa,0x000001de,0x000001df, + 0x000001e0,0x000200f8,0x000001df,0x0004003d,0x00000006,0x000001e2,0x00000181,0x0003003e, + 0x000001e1,0x000001e2,0x000200f9,0x000001e3,0x000200f8,0x000001e3,0x000400f6,0x000001e5, + 0x000001e6,0x00000000,0x000200f9,0x000001e7,0x000200f8,0x000001e7,0x0004003d,0x00000006, + 0x000001e8,0x000001e1,0x000500b0,0x00000036,0x000001ea,0x000001e8,0x000001e9,0x000400fa, + 0x000001ea,0x000001e4,0x000001e5,0x000200f8,0x000001e4,0x0004003d,0x00000006,0x000001ec, + 0x000001a5,0x0004003d,0x00000006,0x000001ed,0x000001e1,0x00050086,0x00000006,0x000001ee, + 0x000001ed,0x000001b4,0x00050080,0x00000006,0x000001ef,0x000001ec,0x000001ee,0x0003003e, + 0x000001eb,0x000001ef,0x0004003d,0x00000006,0x000001f1,0x000001b1,0x0004003d,0x00000006, + 0x000001f2,0x000001e1,0x00050089,0x00000006,0x000001f3,0x000001f2,0x000001b4,0x00050080, + 0x00000006,0x000001f4,0x000001f1,0x000001f3,0x0003003e,0x000001f0,0x000001f4,0x0003003e, + 0x000001f5,0x00000136,0x0004003d,0x00000006,0x000001f6,0x000001eb,0x00050041,0x0000019c, + 0x000001f7,0x00000199,0x000001d3,0x0004003d,0x00000006,0x000001f8,0x000001f7,0x000500b0, + 0x00000036,0x000001f9,0x000001f6,0x000001f8,0x000300f7,0x000001fb,0x00000000,0x000400fa, + 0x000001f9,0x000001fa,0x000001fb,0x000200f8,0x000001fa,0x0004003d,0x00000006,0x000001fd, + 0x000001eb,0x00050041,0x0000019c,0x000001ff,0x00000199,0x000001fe,0x0004003d,0x00000006, + 0x00000200,0x000001ff,0x00050084,0x00000006,0x00000201,0x000001fd,0x00000200,0x0004003d, + 0x00000006,0x00000202,0x000001b6,0x00050080,0x00000006,0x00000203,0x00000201,0x00000202, + 0x0004003d,0x00000006,0x00000204,0x000001f0,0x00050080,0x00000006,0x00000205,0x00000203, + 0x00000204,0x0003003e,0x000001fc,0x00000205,0x000300f7,0x0000020b,0x00000000,0x000400fa, + 0x00000208,0x0000020a,0x00000218,0x000200f8,0x0000020a,0x0004003d,0x00000006,0x00000211, + 0x000001fc,0x00060041,0x00000212,0x00000213,0x00000210,0x000001d3,0x00000211,0x0004003d, + 0x0000020c,0x00000214,0x00000213,0x00040071,0x00000006,0x00000215,0x00000214,0x0003003e, + 0x00000216,0x00000215,0x00050039,0x00000009,0x00000217,0x00000027,0x00000216,0x0003003e, + 0x00000209,0x00000217,0x000200f9,0x0000020b,0x000200f8,0x00000218,0x0004003d,0x00000006, + 0x0000021d,0x000001fc,0x00060041,0x0000021e,0x0000021f,0x0000021c,0x000001d3,0x0000021d, + 0x0004003d,0x0000000f,0x00000220,0x0000021f,0x00040073,0x00000009,0x00000221,0x00000220, + 0x0003003e,0x00000209,0x00000221,0x000200f9,0x0000020b,0x000200f8,0x0000020b,0x0004003d, + 0x00000009,0x00000222,0x00000209,0x0003003e,0x000001f5,0x00000222,0x000300f7,0x00000226, + 0x00000000,0x000400fa,0x00000224,0x00000225,0x00000226,0x000200f8,0x00000225,0x0004003d, + 0x00000009,0x00000227,0x000001f5,0x00050041,0x0000019c,0x0000022d,0x00000199,0x0000022c, + 0x0004003d,0x00000006,0x0000022e,0x0000022d,0x0004003d,0x00000006,0x0000022f,0x000001f0, + 0x00050080,0x00000006,0x00000230,0x0000022e,0x0000022f,0x00060041,0x0000021e,0x00000231, + 0x0000022b,0x000001d3,0x00000230,0x0004003d,0x0000000f,0x00000232,0x00000231,0x00040073, + 0x00000009,0x00000233,0x00000232,0x00050085,0x00000009,0x00000234,0x00000227,0x00000233, + 0x0003003e,0x00000235,0x00000234,0x00050039,0x00000009,0x00000236,0x0000000d,0x00000235, + 0x0003003e,0x000001f5,0x00000236,0x000200f9,0x00000226,0x000200f8,0x00000226,0x000200f9, + 0x000001fb,0x000200f8,0x000001fb,0x0004003d,0x00000006,0x0000023b,0x000001e1,0x0004003d, + 0x00000009,0x0000023c,0x000001f5,0x00040073,0x0000000f,0x0000023d,0x0000023c,0x00050041, + 0x0000023e,0x0000023f,0x0000023a,0x0000023b,0x0005003e,0x0000023f,0x0000023d,0x00000028, + 0x000001a8,0x000200f9,0x000001e6,0x000200f8,0x000001e6,0x0004003d,0x00000006,0x00000240, + 0x000001e1,0x00050080,0x00000006,0x00000241,0x00000240,0x000001c3,0x0003003e,0x000001e1, + 0x00000241,0x000200f9,0x000001e3,0x000200f8,0x000001e5,0x000400e0,0x000001a8,0x000001a8, + 0x00000242,0x000200f9,0x000001e0,0x000200f8,0x000001e0,0x0003003e,0x00000243,0x00000092, + 0x000200f9,0x00000244,0x000200f8,0x00000244,0x000400f6,0x00000246,0x00000247,0x00000001, + 0x000200f9,0x00000248,0x000200f8,0x00000248,0x0004003d,0x00000006,0x00000249,0x00000243, + 0x000500b0,0x00000036,0x0000024a,0x00000249,0x000001cd,0x000400fa,0x0000024a,0x00000245, + 0x00000246,0x000200f8,0x00000245,0x0004003d,0x00000036,0x0000024b,0x000001d7,0x000300f7, + 0x0000024d,0x00000000,0x000400fa,0x0000024b,0x0000024c,0x0000026a,0x000200f8,0x0000024c, + 0x0004003d,0x00000006,0x00000251,0x000001c0,0x00050084,0x00000006,0x00000252,0x00000251, + 0x000001b4,0x0004003d,0x00000006,0x00000253,0x000001c9,0x0004003d,0x00000006,0x00000254, + 0x00000243,0x00050080,0x00000006,0x00000255,0x00000253,0x00000254,0x00050084,0x00000006, + 0x00000256,0x00000255,0x000000e5,0x00050080,0x00000006,0x00000257,0x00000252,0x00000256, + 0x00050041,0x0000023e,0x00000258,0x0000023a,0x00000257,0x0004003d,0x00000006,0x00000259, + 0x000001c0,0x00050084,0x00000006,0x0000025a,0x00000259,0x000001b4,0x0004003d,0x00000006, + 0x0000025b,0x000001c9,0x0004003d,0x00000006,0x0000025c,0x00000243,0x00050080,0x00000006, + 0x0000025d,0x0000025b,0x0000025c,0x00050084,0x00000006,0x0000025e,0x0000025d,0x000000e5, + 0x00050080,0x00000006,0x0000025f,0x0000025a,0x0000025e,0x00081169,0x0000024e,0x00000260, + 0x00000258,0x000001d3,0x000001b4,0x00000030,0x000001a8,0x0003003e,0x00000250,0x00000260, + 0x0004003d,0x00000006,0x00000265,0x00000243,0x0004003d,0x0000024e,0x00000266,0x00000250, + 0x00040073,0x00000261,0x00000267,0x00000266,0x00050041,0x00000268,0x00000269,0x00000264, + 0x00000265,0x0003003e,0x00000269,0x00000267,0x000200f9,0x0000024d,0x000200f8,0x0000026a, + 0x0004003d,0x00000006,0x0000026b,0x00000243,0x00050041,0x00000268,0x0000026d,0x00000264, + 0x0000026b,0x0003003e,0x0000026d,0x0000026c,0x000200f9,0x0000024d,0x000200f8,0x0000024d, + 0x0004003d,0x00000006,0x0000026f,0x00000243,0x00050041,0x00000268,0x00000270,0x0000026e, + 0x0000026f,0x0003003e,0x00000270,0x0000026c,0x000200f9,0x00000247,0x000200f8,0x00000247, + 0x0004003d,0x00000006,0x00000271,0x00000243,0x00050080,0x00000006,0x00000272,0x00000271, + 0x000001bb,0x0003003e,0x00000243,0x00000272,0x000200f9,0x00000244,0x000200f8,0x00000246, + 0x00050041,0x0000019c,0x00000275,0x00000199,0x00000274,0x0004003d,0x00000006,0x00000276, + 0x00000275,0x000300f7,0x0000027b,0x00000000,0x000400fa,0x00000278,0x0000027a,0x0000027c, + 0x000200f8,0x0000027a,0x0003003e,0x00000279,0x00000092,0x000200f9,0x0000027b,0x000200f8, + 0x0000027c,0x0004003d,0x00000006,0x0000027d,0x00000195,0x00050084,0x00000006,0x0000027f, + 0x0000027d,0x0000027e,0x0003003e,0x00000279,0x0000027f,0x000200f9,0x0000027b,0x000200f8, + 0x0000027b,0x0004003d,0x00000006,0x00000280,0x00000279,0x00050080,0x00000006,0x00000281, + 0x00000276,0x00000280,0x0003003e,0x00000273,0x00000281,0x0004003d,0x00000006,0x00000283, + 0x0000018b,0x00050084,0x00000006,0x00000286,0x00000283,0x00000285,0x0003003e,0x00000282, + 0x00000286,0x0003003e,0x00000287,0x00000092,0x000200f9,0x00000288,0x000200f8,0x00000288, + 0x000400f6,0x0000028a,0x0000028b,0x00000000,0x000200f9,0x0000028c,0x000200f8,0x0000028c, + 0x0004003d,0x00000006,0x0000028d,0x00000287,0x000500b0,0x00000036,0x0000028e,0x0000028d, + 0x00000285,0x000400fa,0x0000028e,0x00000289,0x0000028a,0x000200f8,0x00000289,0x0004003d, + 0x00000006,0x00000290,0x00000282,0x0004003d,0x00000006,0x00000291,0x00000287,0x00050080, + 0x00000006,0x00000292,0x00000290,0x00000291,0x0003003e,0x0000028f,0x00000292,0x000400e0, + 0x000001a8,0x000001a8,0x00000242,0x0004003d,0x00000006,0x00000294,0x00000181,0x0003003e, + 0x00000293,0x00000294,0x000200f9,0x00000295,0x000200f8,0x00000295,0x000400f6,0x00000297, + 0x00000298,0x00000000,0x000200f9,0x00000299,0x000200f8,0x00000299,0x0004003d,0x00000006, + 0x0000029a,0x00000293,0x000500b0,0x00000036,0x0000029c,0x0000029a,0x0000029b,0x000400fa, + 0x0000029c,0x00000296,0x00000297,0x000200f8,0x00000296,0x0004003d,0x00000006,0x0000029e, + 0x00000293,0x000500c2,0x00000006,0x0000029f,0x0000029e,0x00000008,0x0003003e,0x0000029d, + 0x0000029f,0x0004003d,0x00000006,0x000002a1,0x00000293,0x000500c7,0x00000006,0x000002a2, + 0x000002a1,0x00000008,0x0003003e,0x000002a0,0x000002a2,0x0004003d,0x00000006,0x000002a4, + 0x000001a5,0x0004003d,0x00000006,0x000002a5,0x0000029d,0x00050080,0x00000006,0x000002a6, + 0x000002a4,0x000002a5,0x00050041,0x0000019c,0x000002a7,0x00000199,0x000001d3,0x0004003d, + 0x00000006,0x000002a8,0x000002a7,0x00050082,0x00000006,0x000002a9,0x000002a8,0x00000008, + 0x0007000c,0x00000006,0x000002aa,0x00000001,0x00000026,0x000002a6,0x000002a9,0x0003003e, + 0x000002a3,0x000002aa,0x0004003d,0x00000006,0x000002b2,0x000002a3,0x00050041,0x0000019c, + 0x000002b4,0x00000199,0x000002b3,0x0004003d,0x00000006,0x000002b5,0x000002b4,0x00050084, + 0x00000006,0x000002b6,0x000002b2,0x000002b5,0x0004003d,0x00000006,0x000002b7,0x00000273, + 0x00050080,0x00000006,0x000002b8,0x000002b6,0x000002b7,0x0004003d,0x00000006,0x000002b9, + 0x0000028f,0x00050084,0x00000006,0x000002ba,0x000002b9,0x000001c2,0x00050080,0x00000006, + 0x000002bb,0x000002b8,0x000002ba,0x00050086,0x00000006,0x000002bc,0x000002bb,0x000000e5, + 0x0004003d,0x00000006,0x000002bd,0x000002a0,0x00050080,0x00000006,0x000002be,0x000002bc, + 0x000002bd,0x00060041,0x000002bf,0x000002c0,0x000002b1,0x000001d3,0x000002be,0x0004003d, + 0x000002ab,0x000002c1,0x000002c0,0x0003003e,0x000002ad,0x000002c1,0x0004003d,0x00000006, + 0x000002c6,0x0000029d,0x00050084,0x00000006,0x000002c7,0x000002c6,0x00000110,0x0004003d, + 0x00000006,0x000002c8,0x000002a0,0x00050084,0x00000006,0x000002c9,0x000002c8,0x00000008, + 0x00050080,0x00000006,0x000002ca,0x000002c7,0x000002c9,0x0004003d,0x000002ab,0x000002cb, + 0x000002ad,0x00050041,0x000002cc,0x000002cd,0x000002c5,0x000002ca,0x0005003e,0x000002cd, + 0x000002cb,0x00000028,0x000001a8,0x000200f9,0x00000298,0x000200f8,0x00000298,0x0004003d, + 0x00000006,0x000002ce,0x00000293,0x00050080,0x00000006,0x000002cf,0x000002ce,0x000001c3, + 0x0003003e,0x00000293,0x000002cf,0x000200f9,0x00000295,0x000200f8,0x00000297,0x0004003d, + 0x00000006,0x000002d1,0x00000181,0x0003003e,0x000002d0,0x000002d1,0x000200f9,0x000002d2, + 0x000200f8,0x000002d2,0x000400f6,0x000002d4,0x000002d5,0x00000000,0x000200f9,0x000002d6, + 0x000200f8,0x000002d6,0x0004003d,0x00000006,0x000002d7,0x000002d0,0x000500b0,0x00000036, + 0x000002d9,0x000002d7,0x000002d8,0x000400fa,0x000002d9,0x000002d3,0x000002d4,0x000200f8, + 0x000002d3,0x0004003d,0x00000006,0x000002db,0x000002d0,0x000500c2,0x00000006,0x000002dc, + 0x000002db,0x00000008,0x0003003e,0x000002da,0x000002dc,0x0004003d,0x00000006,0x000002de, + 0x000002d0,0x000500c7,0x00000006,0x000002df,0x000002de,0x00000008,0x0003003e,0x000002dd, + 0x000002df,0x0004003d,0x00000006,0x000002e5,0x00000195,0x00050084,0x00000006,0x000002e7, + 0x000002e5,0x000002e6,0x0004003d,0x00000006,0x000002e8,0x0000028f,0x00050080,0x00000006, + 0x000002e9,0x000002e7,0x000002e8,0x00050041,0x0000019c,0x000002eb,0x00000199,0x000002ea, + 0x0004003d,0x00000006,0x000002ec,0x000002eb,0x00050084,0x00000006,0x000002ed,0x000002e9, + 0x000002ec,0x00050041,0x0000019c,0x000002ef,0x00000199,0x000002ee,0x0004003d,0x00000006, + 0x000002f0,0x000002ef,0x00050080,0x00000006,0x000002f1,0x000002ed,0x000002f0,0x0004003d, + 0x00000006,0x000002f2,0x000001b1,0x00050080,0x00000006,0x000002f3,0x000002f1,0x000002f2, + 0x0004003d,0x00000006,0x000002f4,0x000002da,0x00050080,0x00000006,0x000002f5,0x000002f3, + 0x000002f4,0x00050084,0x00000006,0x000002f6,0x000002f5,0x000001a8,0x0004003d,0x00000006, + 0x000002f7,0x000002dd,0x00050080,0x00000006,0x000002f8,0x000002f6,0x000002f7,0x00060041, + 0x000002bf,0x000002f9,0x000002e4,0x000001d3,0x000002f8,0x0004003d,0x000002ab,0x000002fa, + 0x000002f9,0x0003003e,0x000002e0,0x000002fa,0x0004003d,0x00000006,0x000002ff,0x000002da, + 0x00050084,0x00000006,0x00000300,0x000002ff,0x00000110,0x0004003d,0x00000006,0x00000301, + 0x000002dd,0x00050084,0x00000006,0x00000302,0x00000301,0x00000008,0x00050080,0x00000006, + 0x00000303,0x00000300,0x00000302,0x0004003d,0x000002ab,0x00000304,0x000002e0,0x00050041, + 0x000002cc,0x00000305,0x000002fe,0x00000303,0x0005003e,0x00000305,0x00000304,0x00000028, + 0x000001a8,0x000200f9,0x000002d5,0x000200f8,0x000002d5,0x0004003d,0x00000006,0x00000306, + 0x000002d0,0x00050080,0x00000006,0x00000307,0x00000306,0x000001c3,0x0003003e,0x000002d0, + 0x00000307,0x000200f9,0x000002d2,0x000200f8,0x000002d4,0x000400e0,0x000001a8,0x000001a8, + 0x00000242,0x0004003d,0x00000036,0x00000308,0x000001cf,0x000300f7,0x0000030a,0x00000000, + 0x000400fa,0x00000308,0x00000309,0x0000030a,0x000200f8,0x00000309,0x0003003e,0x0000030b, + 0x00000092,0x000200f9,0x0000030c,0x000200f8,0x0000030c,0x000400f6,0x0000030e,0x0000030f, + 0x00000001,0x000200f9,0x00000310,0x000200f8,0x00000310,0x0004003d,0x00000006,0x00000311, + 0x0000030b,0x000500b0,0x00000036,0x00000312,0x00000311,0x000001cd,0x000400fa,0x00000312, + 0x0000030d,0x0000030e,0x000200f8,0x0000030d,0x0003003e,0x00000313,0x00000092,0x000200f9, + 0x00000314,0x000200f8,0x00000314,0x000400f6,0x00000316,0x00000317,0x00000001,0x000200f9, + 0x00000318,0x000200f8,0x00000318,0x0004003d,0x00000006,0x00000319,0x00000313,0x000500b0, + 0x00000036,0x0000031a,0x00000319,0x000001a8,0x000400fa,0x0000031a,0x00000315,0x00000316, + 0x000200f8,0x00000315,0x0004003d,0x00000006,0x0000031f,0x000001c0,0x00050084,0x00000006, + 0x00000320,0x0000031f,0x00000110,0x0004003d,0x00000006,0x00000321,0x00000313,0x00050084, + 0x00000006,0x00000322,0x00000321,0x00000008,0x00050080,0x00000006,0x00000323,0x00000320, + 0x00000322,0x00050041,0x000002cc,0x00000324,0x000002c5,0x00000323,0x0004003d,0x00000006, + 0x00000325,0x000001c0,0x00050084,0x00000006,0x00000326,0x00000325,0x00000110,0x0004003d, + 0x00000006,0x00000327,0x00000313,0x00050084,0x00000006,0x00000328,0x00000327,0x00000008, + 0x00050080,0x00000006,0x00000329,0x00000326,0x00000328,0x00081169,0x0000031c,0x0000032a, + 0x00000324,0x000001d3,0x00000110,0x00000030,0x000001a8,0x0003003e,0x0000031e,0x0000032a, + 0x0004003d,0x00000006,0x0000032e,0x000001c9,0x0004003d,0x00000006,0x0000032f,0x0000030b, + 0x00050080,0x00000006,0x00000330,0x0000032e,0x0000032f,0x00050084,0x00000006,0x00000331, + 0x00000330,0x000000e5,0x00050084,0x00000006,0x00000332,0x00000331,0x00000110,0x0004003d, + 0x00000006,0x00000333,0x00000313,0x00050084,0x00000006,0x00000334,0x00000333,0x00000008, + 0x00050080,0x00000006,0x00000335,0x00000332,0x00000334,0x00050041,0x000002cc,0x00000336, + 0x000002fe,0x00000335,0x0004003d,0x00000006,0x00000337,0x000001c9,0x0004003d,0x00000006, + 0x00000338,0x0000030b,0x00050080,0x00000006,0x00000339,0x00000337,0x00000338,0x00050084, + 0x00000006,0x0000033a,0x00000339,0x000000e5,0x00050084,0x00000006,0x0000033b,0x0000033a, + 0x00000110,0x0004003d,0x00000006,0x0000033c,0x00000313,0x00050084,0x00000006,0x0000033d, + 0x0000033c,0x00000008,0x00050080,0x00000006,0x0000033e,0x0000033b,0x0000033d,0x00081169, + 0x0000032b,0x0000033f,0x00000336,0x000001bb,0x00000110,0x00000030,0x000001a8,0x0003003e, + 0x0000032d,0x0000033f,0x0004003d,0x00000006,0x00000340,0x0000030b,0x0004003d,0x0000031c, + 0x00000341,0x0000031e,0x0004003d,0x0000032b,0x00000342,0x0000032d,0x0004003d,0x00000006, + 0x00000343,0x0000030b,0x00050041,0x00000268,0x00000344,0x00000264,0x00000343,0x0004003d, + 0x00000261,0x00000345,0x00000344,0x0006116b,0x00000261,0x00000346,0x00000341,0x00000342, + 0x00000345,0x00050041,0x00000268,0x00000347,0x00000264,0x00000340,0x0003003e,0x00000347, + 0x00000346,0x000200f9,0x00000317,0x000200f8,0x00000317,0x0004003d,0x00000006,0x00000348, + 0x00000313,0x00050080,0x00000006,0x00000349,0x00000348,0x000001bb,0x0003003e,0x00000313, + 0x00000349,0x000200f9,0x00000314,0x000200f8,0x00000316,0x0003003e,0x0000034b,0x000001d3, + 0x000200f9,0x0000034c,0x000200f8,0x0000034c,0x000400f6,0x0000034e,0x0000034f,0x00000000, + 0x000200f9,0x00000350,0x000200f8,0x00000350,0x0004003d,0x0000019a,0x00000351,0x0000034b, + 0x0004116c,0x00000006,0x00000352,0x00000261,0x0004007c,0x0000019a,0x00000353,0x00000352, + 0x000500b1,0x00000036,0x00000354,0x00000351,0x00000353,0x000400fa,0x00000354,0x0000034d, + 0x0000034e,0x000200f8,0x0000034d,0x0004003d,0x00000006,0x00000355,0x0000030b,0x0004003d, + 0x0000019a,0x00000356,0x0000034b,0x0004003d,0x00000006,0x00000357,0x0000030b,0x0004003d, + 0x0000019a,0x00000358,0x0000034b,0x00060041,0x0000000a,0x0000035a,0x00000264,0x00000357, + 0x00000358,0x0004003d,0x00000009,0x0000035b,0x0000035a,0x0003003e,0x00000359,0x0000035b, + 0x00050039,0x00000009,0x0000035c,0x0000000d,0x00000359,0x00060041,0x0000000a,0x0000035d, + 0x00000264,0x00000355,0x00000356,0x0003003e,0x0000035d,0x0000035c,0x000200f9,0x0000034f, + 0x000200f8,0x0000034f,0x0004003d,0x0000019a,0x0000035e,0x0000034b,0x00050080,0x0000019a, + 0x0000035f,0x0000035e,0x000001bb,0x0003003e,0x0000034b,0x0000035f,0x000200f9,0x0000034c, + 0x000200f8,0x0000034e,0x000200f9,0x0000030f,0x000200f8,0x0000030f,0x0004003d,0x00000006, + 0x00000360,0x0000030b,0x00050080,0x00000006,0x00000361,0x00000360,0x000001bb,0x0003003e, + 0x0000030b,0x00000361,0x000200f9,0x0000030c,0x000200f8,0x0000030e,0x0004003d,0x00000006, + 0x00000363,0x0000028f,0x00050084,0x00000006,0x00000364,0x00000363,0x000001c2,0x0003003e, + 0x00000362,0x00000364,0x000300f7,0x00000368,0x00000000,0x000400fa,0x00000366,0x00000367, + 0x00000368,0x000200f8,0x00000367,0x0004003d,0x00000006,0x00000369,0x00000362,0x00050080, + 0x00000006,0x0000036a,0x00000369,0x000001c2,0x00050089,0x00000006,0x0000036b,0x0000036a, + 0x00000365,0x000500aa,0x00000036,0x0000036c,0x0000036b,0x00000092,0x000400a8,0x00000036, + 0x0000036d,0x0000036c,0x000300f7,0x0000036f,0x00000000,0x000400fa,0x0000036d,0x0000036e, + 0x0000036f,0x000200f8,0x0000036e,0x0004003d,0x00000006,0x00000370,0x00000362,0x00050080, + 0x00000006,0x00000371,0x00000370,0x000001c2,0x000500ae,0x00000036,0x00000372,0x00000371, + 0x0000027e,0x000200f9,0x0000036f,0x000200f8,0x0000036f,0x000700f5,0x00000036,0x00000373, + 0x0000036c,0x00000367,0x00000372,0x0000036e,0x000200f9,0x00000368,0x000200f8,0x00000368, + 0x000700f5,0x00000036,0x00000374,0x00000366,0x0000030e,0x00000373,0x0000036f,0x000300f7, + 0x00000376,0x00000000,0x000400fa,0x00000374,0x00000375,0x00000376,0x000200f8,0x00000375, + 0x0003003e,0x00000377,0x00000092,0x000200f9,0x00000378,0x000200f8,0x00000378,0x000400f6, + 0x0000037a,0x0000037b,0x00000001,0x000200f9,0x0000037c,0x000200f8,0x0000037c,0x0004003d, + 0x00000006,0x0000037d,0x00000377,0x000500b0,0x00000036,0x0000037e,0x0000037d,0x000001cd, + 0x000400fa,0x0000037e,0x00000379,0x0000037a,0x000200f8,0x00000379,0x0004003d,0x00000006, + 0x0000037f,0x00000362,0x000500b0,0x00000036,0x00000380,0x0000037f,0x00000365,0x000300f7, + 0x00000382,0x00000000,0x000400fa,0x00000380,0x00000381,0x00000388,0x000200f8,0x00000381, + 0x0004003d,0x00000006,0x00000383,0x00000377,0x0004003d,0x00000006,0x00000384,0x00000377, + 0x00050041,0x00000268,0x00000385,0x00000264,0x00000384,0x0004003d,0x00000261,0x00000386, + 0x00000385,0x00050041,0x00000268,0x00000387,0x0000026e,0x00000383,0x0003003e,0x00000387, + 0x00000386,0x000200f9,0x00000382,0x000200f8,0x00000388,0x0004003d,0x00000006,0x00000389, + 0x00000377,0x0004003d,0x00000006,0x0000038a,0x00000377,0x00050041,0x00000268,0x0000038b, + 0x0000026e,0x0000038a,0x0004003d,0x00000261,0x0000038c,0x0000038b,0x0004003d,0x00000006, + 0x0000038d,0x00000377,0x00050041,0x00000268,0x0000038e,0x00000264,0x0000038d,0x0004003d, + 0x00000261,0x0000038f,0x0000038e,0x00050081,0x00000261,0x00000390,0x0000038c,0x0000038f, + 0x00050041,0x00000268,0x00000391,0x0000026e,0x00000389,0x0003003e,0x00000391,0x00000390, + 0x0003003e,0x00000392,0x000001d3,0x000200f9,0x00000393,0x000200f8,0x00000393,0x000400f6, + 0x00000395,0x00000396,0x00000000,0x000200f9,0x00000397,0x000200f8,0x00000397,0x0004003d, + 0x0000019a,0x00000398,0x00000392,0x0004116c,0x00000006,0x00000399,0x00000261,0x0004007c, + 0x0000019a,0x0000039a,0x00000399,0x000500b1,0x00000036,0x0000039b,0x00000398,0x0000039a, + 0x000400fa,0x0000039b,0x00000394,0x00000395,0x000200f8,0x00000394,0x0004003d,0x00000006, + 0x0000039c,0x00000377,0x0004003d,0x0000019a,0x0000039d,0x00000392,0x0004003d,0x00000006, + 0x0000039e,0x00000377,0x0004003d,0x0000019a,0x0000039f,0x00000392,0x00060041,0x0000000a, + 0x000003a1,0x0000026e,0x0000039e,0x0000039f,0x0004003d,0x00000009,0x000003a2,0x000003a1, + 0x0003003e,0x000003a0,0x000003a2,0x00050039,0x00000009,0x000003a3,0x0000000d,0x000003a0, + 0x00060041,0x0000000a,0x000003a4,0x0000026e,0x0000039c,0x0000039d,0x0003003e,0x000003a4, + 0x000003a3,0x000200f9,0x00000396,0x000200f8,0x00000396,0x0004003d,0x0000019a,0x000003a5, + 0x00000392,0x00050080,0x0000019a,0x000003a6,0x000003a5,0x000001bb,0x0003003e,0x00000392, + 0x000003a6,0x000200f9,0x00000393,0x000200f8,0x00000395,0x000200f9,0x00000382,0x000200f8, + 0x00000382,0x0004003d,0x00000006,0x000003a7,0x00000377,0x00050041,0x00000268,0x000003a8, + 0x00000264,0x000003a7,0x0003003e,0x000003a8,0x0000026c,0x000200f9,0x0000037b,0x000200f8, + 0x0000037b,0x0004003d,0x00000006,0x000003a9,0x00000377,0x00050080,0x00000006,0x000003aa, + 0x000003a9,0x000001bb,0x0003003e,0x00000377,0x000003aa,0x000200f9,0x00000378,0x000200f8, + 0x0000037a,0x000200f9,0x00000376,0x000200f8,0x00000376,0x000200f9,0x0000030a,0x000200f8, + 0x0000030a,0x000200f9,0x0000028b,0x000200f8,0x0000028b,0x0004003d,0x00000006,0x000003ab, + 0x00000287,0x00050080,0x00000006,0x000003ac,0x000003ab,0x000001bb,0x0003003e,0x00000287, + 0x000003ac,0x000200f9,0x00000288,0x000200f8,0x0000028a,0x000300f7,0x000003af,0x00000000, + 0x000400fa,0x000003ad,0x000003ae,0x000003af,0x000200f8,0x000003ae,0x0003003e,0x000003b0, + 0x00000092,0x000200f9,0x000003b1,0x000200f8,0x000003b1,0x000400f6,0x000003b3,0x000003b4, + 0x00000001,0x000200f9,0x000003b5,0x000200f8,0x000003b5,0x0004003d,0x00000006,0x000003b6, + 0x000003b0,0x000500b0,0x00000036,0x000003b7,0x000003b6,0x000001cd,0x000400fa,0x000003b7, + 0x000003b2,0x000003b3,0x000200f8,0x000003b2,0x0004003d,0x00000006,0x000003b8,0x000003b0, + 0x0004003d,0x00000006,0x000003b9,0x000003b0,0x00050041,0x00000268,0x000003ba,0x0000026e, + 0x000003b9,0x0004003d,0x00000261,0x000003bb,0x000003ba,0x00050041,0x00000268,0x000003bc, + 0x00000264,0x000003b8,0x0003003e,0x000003bc,0x000003bb,0x000200f9,0x000003b4,0x000200f8, + 0x000003b4,0x0004003d,0x00000006,0x000003bd,0x000003b0,0x00050080,0x00000006,0x000003be, + 0x000003bd,0x000001bb,0x0003003e,0x000003b0,0x000003be,0x000200f9,0x000003b1,0x000200f8, + 0x000003b3,0x000200f9,0x000003af,0x000200f8,0x000003af,0x000400e0,0x000001a8,0x000001a8, + 0x00000242,0x0004003d,0x00000036,0x000003bf,0x000001cf,0x000300f7,0x000003c1,0x00000000, + 0x000400fa,0x000003bf,0x000003c0,0x000003c1,0x000200f8,0x000003c0,0x0003003e,0x000003c2, + 0x00000092,0x000200f9,0x000003c3,0x000200f8,0x000003c3,0x000400f6,0x000003c5,0x000003c6, + 0x00000001,0x000200f9,0x000003c7,0x000200f8,0x000003c7,0x0004003d,0x00000006,0x000003c8, + 0x000003c2,0x000500b0,0x00000036,0x000003c9,0x000003c8,0x000001cd,0x000400fa,0x000003c9, + 0x000003c4,0x000003c5,0x000200f8,0x000003c4,0x0004003d,0x00000006,0x000003cb,0x000003c2, + 0x00050041,0x00000268,0x000003cc,0x00000264,0x000003cb,0x0004003d,0x00000261,0x000003cd, + 0x000003cc,0x00040073,0x0000024e,0x000003ce,0x000003cd,0x0003003e,0x000003ca,0x000003ce, + 0x0004003d,0x0000024e,0x000003cf,0x000003ca,0x0004003d,0x00000006,0x000003d0,0x000001c0, + 0x00050084,0x00000006,0x000003d1,0x000003d0,0x000001b4,0x0004003d,0x00000006,0x000003d2, + 0x000001c9,0x0004003d,0x00000006,0x000003d3,0x000003c2,0x00050080,0x00000006,0x000003d4, + 0x000003d2,0x000003d3,0x00050084,0x00000006,0x000003d5,0x000003d4,0x000000e5,0x00050080, + 0x00000006,0x000003d6,0x000003d1,0x000003d5,0x00050041,0x0000023e,0x000003d7,0x0000023a, + 0x000003d6,0x0004003d,0x00000006,0x000003d8,0x000001c0,0x00050084,0x00000006,0x000003d9, + 0x000003d8,0x000001b4,0x0004003d,0x00000006,0x000003da,0x000001c9,0x0004003d,0x00000006, + 0x000003db,0x000003c2,0x00050080,0x00000006,0x000003dc,0x000003da,0x000003db,0x00050084, + 0x00000006,0x000003dd,0x000003dc,0x000000e5,0x00050080,0x00000006,0x000003de,0x000003d9, + 0x000003dd,0x0007116a,0x000003d7,0x000003cf,0x000001d3,0x000001b4,0x00000028,0x000001a8, + 0x000200f9,0x000003c6,0x000200f8,0x000003c6,0x0004003d,0x00000006,0x000003df,0x000003c2, + 0x00050080,0x00000006,0x000003e0,0x000003df,0x000001bb,0x0003003e,0x000003c2,0x000003e0, + 0x000200f9,0x000003c3,0x000200f8,0x000003c5,0x000200f9,0x000003c1,0x000200f8,0x000003c1, + 0x000400e0,0x000001a8,0x000001a8,0x00000242,0x0004003d,0x00000006,0x000003e2,0x00000181, + 0x0003003e,0x000003e1,0x000003e2,0x000200f9,0x000003e3,0x000200f8,0x000003e3,0x000400f6, + 0x000003e5,0x000003e6,0x00000000,0x000200f9,0x000003e7,0x000200f8,0x000003e7,0x0004003d, + 0x00000006,0x000003e8,0x000003e1,0x000500b0,0x00000036,0x000003ea,0x000003e8,0x000003e9, + 0x000400fa,0x000003ea,0x000003e4,0x000003e5,0x000200f8,0x000003e4,0x0004003d,0x00000006, + 0x000003ec,0x000001a5,0x0004003d,0x00000006,0x000003ed,0x000003e1,0x00050086,0x00000006, + 0x000003ee,0x000003ed,0x000001b4,0x00050080,0x00000006,0x000003ef,0x000003ec,0x000003ee, + 0x0003003e,0x000003eb,0x000003ef,0x0004003d,0x00000006,0x000003f1,0x000001b1,0x0004003d, + 0x00000006,0x000003f2,0x000003e1,0x00050089,0x00000006,0x000003f3,0x000003f2,0x000001b4, + 0x00050080,0x00000006,0x000003f4,0x000003f1,0x000003f3,0x0003003e,0x000003f0,0x000003f4, + 0x0004003d,0x00000006,0x000003f5,0x000003eb,0x00050041,0x0000019c,0x000003f6,0x00000199, + 0x000001d3,0x0004003d,0x00000006,0x000003f7,0x000003f6,0x000500ae,0x00000036,0x000003f8, + 0x000003f5,0x000003f7,0x000300f7,0x000003fa,0x00000000,0x000400fa,0x000003f8,0x000003f9, + 0x000003fa,0x000200f8,0x000003f9,0x000200f9,0x000003e6,0x000200f8,0x000003fa,0x0004003d, + 0x00000006,0x000003fd,0x000003e1,0x00050041,0x0000023e,0x000003fe,0x0000023a,0x000003fd, + 0x0006003d,0x0000000f,0x000003ff,0x000003fe,0x00000030,0x000001a8,0x0003003e,0x000003fc, + 0x000003ff,0x000300f7,0x00000402,0x00000000,0x000400fa,0x00000400,0x00000401,0x00000402, + 0x000200f8,0x00000401,0x0004003d,0x00000006,0x00000407,0x0000018b,0x00050041,0x0000019c, + 0x00000409,0x00000199,0x00000408,0x0004003d,0x00000006,0x0000040a,0x00000409,0x00050084, + 0x00000006,0x0000040b,0x00000407,0x0000040a,0x0004003d,0x00000006,0x0000040c,0x000003eb, + 0x00050041,0x0000019c,0x0000040d,0x00000199,0x000001bb,0x0004003d,0x00000006,0x0000040e, + 0x0000040d,0x00050084,0x00000006,0x0000040f,0x0000040c,0x0000040e,0x00050080,0x00000006, + 0x00000410,0x0000040b,0x0000040f,0x0004003d,0x00000006,0x00000411,0x00000195,0x00050041, + 0x0000019c,0x00000412,0x00000199,0x000001bb,0x0004003d,0x00000006,0x00000413,0x00000412, + 0x00050084,0x00000006,0x00000414,0x00000411,0x00000413,0x00050041,0x0000019c,0x00000415, + 0x00000199,0x000001d3,0x0004003d,0x00000006,0x00000416,0x00000415,0x00050084,0x00000006, + 0x00000417,0x00000414,0x00000416,0x00050080,0x00000006,0x00000418,0x00000410,0x00000417, + 0x0004003d,0x00000006,0x00000419,0x000003f0,0x00050080,0x00000006,0x0000041a,0x00000418, + 0x00000419,0x0004003d,0x0000000f,0x0000041b,0x000003fc,0x00060041,0x0000021e,0x0000041c, + 0x00000406,0x000001d3,0x0000041a,0x0003003e,0x0000041c,0x0000041b,0x000200f9,0x000003e6, + 0x000200f8,0x00000402,0x000300f7,0x00000421,0x00000000,0x000400fa,0x0000041f,0x00000420, + 0x00000421,0x000200f8,0x00000420,0x0004003d,0x0000000f,0x00000422,0x000003fc,0x00040073, + 0x00000009,0x00000423,0x00000422,0x0003003e,0x00000424,0x00000423,0x00050039,0x00000009, + 0x00000425,0x00000024,0x00000424,0x00040073,0x0000000f,0x00000426,0x00000425,0x0003003e, + 0x000003fc,0x00000426,0x000200f9,0x00000421,0x000200f8,0x00000421,0x0004003d,0x00000006, + 0x00000428,0x000003eb,0x00050041,0x0000019c,0x00000429,0x00000199,0x000001fe,0x0004003d, + 0x00000006,0x0000042a,0x00000429,0x00050084,0x00000006,0x0000042b,0x00000428,0x0000042a, + 0x0004003d,0x00000006,0x0000042c,0x000001b6,0x00050080,0x00000006,0x0000042d,0x0000042b, + 0x0000042c,0x0004003d,0x00000006,0x0000042e,0x000003f0,0x00050080,0x00000006,0x0000042f, + 0x0000042d,0x0000042e,0x0003003e,0x00000427,0x0000042f,0x000300f7,0x00000434,0x00000000, + 0x000400fa,0x00000432,0x00000433,0x00000434,0x000200f8,0x00000433,0x0004003d,0x00000006, + 0x00000439,0x00000427,0x0004003d,0x0000000f,0x0000043b,0x000003fc,0x0003003e,0x0000043a, + 0x0000043b,0x00050039,0x00000006,0x0000043c,0x00000013,0x0000043a,0x0003003e,0x0000043d, + 0x0000043c,0x00050039,0x00000006,0x0000043e,0x0000001d,0x0000043d,0x00040071,0x0000020c, + 0x0000043f,0x0000043e,0x00060041,0x00000212,0x00000440,0x00000438,0x000001d3,0x00000439, + 0x0003003e,0x00000440,0x0000043f,0x000200f9,0x00000434,0x000200f8,0x00000434,0x000300f7, + 0x00000444,0x00000000,0x000400fa,0x00000442,0x00000443,0x00000444,0x000200f8,0x00000443, + 0x0004003d,0x00000006,0x00000445,0x00000427,0x0004003d,0x0000000f,0x00000446,0x000003fc, + 0x00060041,0x0000021e,0x00000447,0x00000406,0x000001d3,0x00000445,0x0003003e,0x00000447, + 0x00000446,0x000200f9,0x00000444,0x000200f8,0x00000444,0x000200f9,0x000003e6,0x000200f8, + 0x000003e6,0x0004003d,0x00000006,0x00000448,0x000003e1,0x00050080,0x00000006,0x00000449, + 0x00000448,0x000001c3,0x0003003e,0x000003e1,0x00000449,0x000200f9,0x000003e3,0x000200f8, + 0x000003e5,0x000100fd,0x00010038,0x00050036,0x00000009,0x0000000d,0x00000000,0x0000000b, + 0x00030037,0x0000000a,0x0000000c,0x000200f8,0x0000000e,0x0004003b,0x00000015,0x00000029, + 0x00000007,0x0004003b,0x00000015,0x0000002c,0x00000007,0x0004003b,0x00000015,0x00000030, + 0x00000007,0x0004003b,0x0000000a,0x0000004a,0x00000007,0x0004003b,0x00000015,0x0000005b, + 0x00000007,0x0004003b,0x00000015,0x00000060,0x00000007,0x0004003d,0x00000009,0x0000002a, + 0x0000000c,0x0004007c,0x00000006,0x0000002b,0x0000002a,0x0003003e,0x00000029,0x0000002b, + 0x0004003d,0x00000006,0x0000002d,0x00000029,0x000500c7,0x00000006,0x0000002f,0x0000002d, + 0x0000002e,0x0003003e,0x0000002c,0x0000002f,0x0004003d,0x00000006,0x00000031,0x00000029, + 0x000500c7,0x00000006,0x00000033,0x00000031,0x00000032,0x0003003e,0x00000030,0x00000033, + 0x0004003d,0x00000006,0x00000034,0x00000030,0x000500ae,0x00000036,0x00000037,0x00000034, + 0x00000035,0x000300f7,0x00000039,0x00000000,0x000400fa,0x00000037,0x00000038,0x00000039, + 0x000200f8,0x00000038,0x0004003d,0x00000009,0x0000003a,0x0000000c,0x000200fe,0x0000003a, + 0x000200f8,0x00000039,0x0004003d,0x00000006,0x0000003c,0x00000030,0x000500ae,0x00000036, + 0x0000003e,0x0000003c,0x0000003d,0x000300f7,0x00000040,0x00000000,0x000400fa,0x0000003e, + 0x0000003f,0x00000040,0x000200f8,0x0000003f,0x0004003d,0x00000006,0x00000041,0x0000002c, + 0x000500c5,0x00000006,0x00000042,0x00000041,0x00000035,0x0004007c,0x00000009,0x00000043, + 0x00000042,0x000200fe,0x00000043,0x000200f8,0x00000040,0x0004003d,0x00000006,0x00000045, + 0x00000030,0x000500b0,0x00000036,0x00000047,0x00000045,0x00000046,0x000300f7,0x00000049, + 0x00000000,0x000400fa,0x00000047,0x00000048,0x00000049,0x000200f8,0x00000048,0x0004003d, + 0x00000006,0x0000004b,0x00000030,0x0004007c,0x00000009,0x0000004c,0x0000004b,0x00050085, + 0x00000009,0x0000004e,0x0000004c,0x0000004d,0x0006000c,0x00000009,0x0000004f,0x00000001, + 0x00000002,0x0000004e,0x0003003e,0x0000004a,0x0000004f,0x0004003d,0x00000006,0x00000050, + 0x0000002c,0x0004007c,0x00000009,0x00000051,0x00000050,0x0004003d,0x00000006,0x00000052, + 0x0000002c,0x0004003d,0x00000009,0x00000053,0x0000004a,0x00050085,0x00000009,0x00000055, + 0x00000053,0x00000054,0x0004007c,0x00000006,0x00000056,0x00000055,0x000500c5,0x00000006, + 0x00000057,0x00000052,0x00000056,0x0004007c,0x00000009,0x00000058,0x00000057,0x00050081, + 0x00000009,0x00000059,0x00000051,0x00000058,0x000200fe,0x00000059,0x000200f8,0x00000049, + 0x0004003d,0x00000006,0x0000005c,0x00000030,0x000500c2,0x00000006,0x0000005e,0x0000005c, + 0x0000005d,0x000500c7,0x00000006,0x0000005f,0x0000005e,0x00000008,0x0003003e,0x0000005b, + 0x0000005f,0x0004003d,0x00000006,0x00000061,0x00000030,0x00050080,0x00000006,0x00000063, + 0x00000061,0x00000062,0x0004003d,0x00000006,0x00000064,0x0000005b,0x00050080,0x00000006, + 0x00000065,0x00000063,0x00000064,0x000500c7,0x00000006,0x00000067,0x00000065,0x00000066, + 0x0003003e,0x00000060,0x00000067,0x0004003d,0x00000006,0x00000068,0x0000002c,0x0004003d, + 0x00000006,0x00000069,0x00000060,0x000500c5,0x00000006,0x0000006a,0x00000068,0x00000069, + 0x0004007c,0x00000009,0x0000006b,0x0000006a,0x000200fe,0x0000006b,0x00010038,0x00050036, + 0x00000006,0x00000013,0x00000000,0x00000011,0x00030037,0x00000010,0x00000012,0x000200f8, + 0x00000014,0x0004003d,0x0000000f,0x0000006e,0x00000012,0x0004007c,0x0000006f,0x00000070, + 0x0000006e,0x00040071,0x00000006,0x00000071,0x00000070,0x000200fe,0x00000071,0x00010038, + 0x00050036,0x00000006,0x00000019,0x00000000,0x00000016,0x00030037,0x00000015,0x00000017, + 0x00030037,0x00000015,0x00000018,0x000200f8,0x0000001a,0x0004003b,0x00000015,0x00000074, + 0x00000007,0x0004003b,0x00000015,0x00000078,0x00000007,0x0004003b,0x00000015,0x0000007c, + 0x00000007,0x0004003b,0x00000015,0x00000080,0x00000007,0x0004003d,0x00000006,0x00000075, + 0x00000017,0x0004003d,0x00000006,0x00000076,0x00000018,0x000500c2,0x00000006,0x00000077, + 0x00000075,0x00000076,0x0003003e,0x00000074,0x00000077,0x0004003d,0x00000006,0x00000079, + 0x00000018,0x000500c4,0x00000006,0x0000007a,0x00000008,0x00000079,0x00050082,0x00000006, + 0x0000007b,0x0000007a,0x00000008,0x0003003e,0x00000078,0x0000007b,0x0004003d,0x00000006, + 0x0000007d,0x00000017,0x0004003d,0x00000006,0x0000007e,0x00000078,0x000500c7,0x00000006, + 0x0000007f,0x0000007d,0x0000007e,0x0003003e,0x0000007c,0x0000007f,0x0004003d,0x00000006, + 0x00000081,0x00000018,0x00050082,0x00000006,0x00000082,0x00000081,0x00000008,0x000500c4, + 0x00000006,0x00000083,0x00000008,0x00000082,0x0003003e,0x00000080,0x00000083,0x0004003d, + 0x00000006,0x00000084,0x00000074,0x0004003d,0x00000006,0x00000085,0x0000007c,0x0004003d, + 0x00000006,0x00000086,0x00000080,0x000500ac,0x00000036,0x00000087,0x00000085,0x00000086, + 0x000400a8,0x00000036,0x00000088,0x00000087,0x000300f7,0x0000008a,0x00000000,0x000400fa, + 0x00000088,0x00000089,0x0000008a,0x000200f8,0x00000089,0x0004003d,0x00000006,0x0000008b, + 0x0000007c,0x0004003d,0x00000006,0x0000008c,0x00000080,0x000500aa,0x00000036,0x0000008d, + 0x0000008b,0x0000008c,0x000300f7,0x0000008f,0x00000000,0x000400fa,0x0000008d,0x0000008e, + 0x0000008f,0x000200f8,0x0000008e,0x0004003d,0x00000006,0x00000090,0x00000074,0x000500c7, + 0x00000006,0x00000091,0x00000090,0x00000008,0x000500ab,0x00000036,0x00000093,0x00000091, + 0x00000092,0x000200f9,0x0000008f,0x000200f8,0x0000008f,0x000700f5,0x00000036,0x00000094, + 0x0000008d,0x00000089,0x00000093,0x0000008e,0x000200f9,0x0000008a,0x000200f8,0x0000008a, + 0x000700f5,0x00000036,0x00000095,0x00000087,0x0000001a,0x00000094,0x0000008f,0x000600a9, + 0x00000006,0x00000096,0x00000095,0x00000008,0x00000092,0x00050080,0x00000006,0x00000097, + 0x00000084,0x00000096,0x000200fe,0x00000097,0x00010038,0x00050036,0x00000006,0x0000001d, + 0x00000000,0x0000001b,0x00030037,0x00000015,0x0000001c,0x000200f8,0x0000001e,0x0004003b, + 0x0000009a,0x0000009b,0x00000007,0x0004003b,0x00000015,0x000000b7,0x00000007,0x0004003b, + 0x00000015,0x000000bd,0x00000007,0x0004003b,0x00000015,0x000000c3,0x00000007,0x0004003b, + 0x00000015,0x000000ca,0x00000007,0x0004003b,0x00000015,0x000000d1,0x00000007,0x0004003b, + 0x00000015,0x000000d4,0x00000007,0x0004003b,0x00000015,0x000000dd,0x00000007,0x0004003b, + 0x00000015,0x000000e0,0x00000007,0x0004003b,0x00000015,0x000000e9,0x00000007,0x0004003b, + 0x00000015,0x000000eb,0x00000007,0x0004003b,0x00000015,0x000000f0,0x00000007,0x0004003b, + 0x00000015,0x000000f3,0x00000007,0x0004003b,0x00000015,0x000000f5,0x00000007,0x0004003b, + 0x00000015,0x000000f7,0x00000007,0x0004003b,0x00000015,0x0000010b,0x00000007,0x0004003d, + 0x00000006,0x0000009c,0x0000001c,0x000500c7,0x00000006,0x0000009e,0x0000009c,0x0000009d, + 0x000500aa,0x00000036,0x0000009f,0x0000009e,0x0000009d,0x000300f7,0x000000a1,0x00000000, + 0x000400fa,0x0000009f,0x000000a0,0x000000a1,0x000200f8,0x000000a0,0x0004003d,0x00000006, + 0x000000a2,0x0000001c,0x000500c7,0x00000006,0x000000a4,0x000000a2,0x000000a3,0x000500ab, + 0x00000036,0x000000a5,0x000000a4,0x00000092,0x000200f9,0x000000a1,0x000200f8,0x000000a1, + 0x000700f5,0x00000036,0x000000a6,0x0000009f,0x0000001e,0x000000a5,0x000000a0,0x0003003e, + 0x0000009b,0x000000a6,0x0004003d,0x00000036,0x000000a7,0x0000009b,0x000300f7,0x000000a9, + 0x00000000,0x000400fa,0x000000a7,0x000000a8,0x000000a9,0x000200f8,0x000000a8,0x000200fe, + 0x00000092,0x000200f8,0x000000a9,0x0004003d,0x00000006,0x000000ab,0x0000001c,0x000500c7, + 0x00000006,0x000000ad,0x000000ab,0x000000ac,0x000500aa,0x00000036,0x000000ae,0x000000ad, + 0x00000092,0x000300f7,0x000000b0,0x00000000,0x000400fa,0x000000ae,0x000000af,0x000000b0, + 0x000200f8,0x000000af,0x0004003d,0x00000006,0x000000b1,0x0000001c,0x000500c2,0x00000006, + 0x000000b3,0x000000b1,0x000000b2,0x000500c7,0x00000006,0x000000b5,0x000000b3,0x000000b4, + 0x000200fe,0x000000b5,0x000200f8,0x000000b0,0x0004003d,0x00000006,0x000000b8,0x0000001c, + 0x000500c7,0x00000006,0x000000ba,0x000000b8,0x000000b9,0x000500ab,0x00000036,0x000000bb, + 0x000000ba,0x00000092,0x000600a9,0x00000006,0x000000bc,0x000000bb,0x000000b4,0x00000092, + 0x0003003e,0x000000b7,0x000000bc,0x0004003d,0x00000006,0x000000be,0x0000001c,0x000500c2, + 0x00000006,0x000000c0,0x000000be,0x000000bf,0x000500c7,0x00000006,0x000000c2,0x000000c0, + 0x000000c1,0x0003003e,0x000000bd,0x000000c2,0x0004003d,0x00000006,0x000000c4,0x0000001c, + 0x000500c7,0x00000006,0x000000c5,0x000000c4,0x000000a3,0x0003003e,0x000000c3,0x000000c5, + 0x0004003d,0x00000006,0x000000c6,0x000000bd,0x000500aa,0x00000036,0x000000c7,0x000000c6, + 0x000000c1,0x000300f7,0x000000c9,0x00000000,0x000400fa,0x000000c7,0x000000c8,0x000000cc, + 0x000200f8,0x000000c8,0x0003003e,0x000000ca,0x000000cb,0x000200f9,0x000000c9,0x000200f8, + 0x000000cc,0x0004003d,0x00000006,0x000000cd,0x000000bd,0x000500b2,0x00000036,0x000000ce, + 0x000000cd,0x000000b2,0x000300f7,0x000000d0,0x00000000,0x000400fa,0x000000ce,0x000000cf, + 0x000000ef,0x000200f8,0x000000cf,0x0004003d,0x00000006,0x000000d2,0x000000bd,0x000500aa, + 0x00000036,0x000000d3,0x000000d2,0x00000092,0x000300f7,0x000000d6,0x00000000,0x000400fa, + 0x000000d3,0x000000d5,0x000000d8,0x000200f8,0x000000d5,0x0004003d,0x00000006,0x000000d7, + 0x000000c3,0x0003003e,0x000000d4,0x000000d7,0x000200f9,0x000000d6,0x000200f8,0x000000d8, + 0x0004003d,0x00000006,0x000000da,0x000000c3,0x00050080,0x00000006,0x000000db,0x000000d9, + 0x000000da,0x0003003e,0x000000d4,0x000000db,0x000200f9,0x000000d6,0x000200f8,0x000000d6, + 0x0004003d,0x00000006,0x000000dc,0x000000d4,0x0003003e,0x000000d1,0x000000dc,0x0004003d, + 0x00000006,0x000000de,0x000000bd,0x000500aa,0x00000036,0x000000df,0x000000de,0x00000092, + 0x000300f7,0x000000e2,0x00000000,0x000400fa,0x000000df,0x000000e1,0x000000e4,0x000200f8, + 0x000000e1,0x0003003e,0x000000e0,0x000000e3,0x000200f9,0x000000e2,0x000200f8,0x000000e4, + 0x0004003d,0x00000006,0x000000e6,0x000000bd,0x00050082,0x00000006,0x000000e7,0x000000e5, + 0x000000e6,0x0003003e,0x000000e0,0x000000e7,0x000200f9,0x000000e2,0x000200f8,0x000000e2, + 0x0004003d,0x00000006,0x000000e8,0x000000e0,0x0003003e,0x000000dd,0x000000e8,0x0004003d, + 0x00000006,0x000000ea,0x000000d1,0x0003003e,0x000000e9,0x000000ea,0x0004003d,0x00000006, + 0x000000ec,0x000000dd,0x0003003e,0x000000eb,0x000000ec,0x00060039,0x00000006,0x000000ed, + 0x00000019,0x000000e9,0x000000eb,0x0007000c,0x00000006,0x000000ee,0x00000001,0x00000026, + 0x000000ed,0x000000b2,0x0003003e,0x000000ca,0x000000ee,0x000200f9,0x000000d0,0x000200f8, + 0x000000ef,0x0004003d,0x00000006,0x000000f1,0x000000bd,0x00050082,0x00000006,0x000000f2, + 0x000000f1,0x000000b2,0x0003003e,0x000000f0,0x000000f2,0x0004003d,0x00000006,0x000000f6, + 0x000000c3,0x0003003e,0x000000f5,0x000000f6,0x0003003e,0x000000f7,0x000000f4,0x00060039, + 0x00000006,0x000000f8,0x00000019,0x000000f5,0x000000f7,0x0003003e,0x000000f3,0x000000f8, + 0x0004003d,0x00000006,0x000000f9,0x000000f3,0x000500aa,0x00000036,0x000000fa,0x000000f9, + 0x000000b2,0x000300f7,0x000000fc,0x00000000,0x000400fa,0x000000fa,0x000000fb,0x000000fc, + 0x000200f8,0x000000fb,0x0003003e,0x000000f3,0x00000092,0x0004003d,0x00000006,0x000000fd, + 0x000000f0,0x00050080,0x00000006,0x000000fe,0x000000fd,0x00000008,0x0003003e,0x000000f0, + 0x000000fe,0x000200f9,0x000000fc,0x000200f8,0x000000fc,0x0004003d,0x00000006,0x000000ff, + 0x000000f0,0x000500ac,0x00000036,0x00000100,0x000000ff,0x000000e3,0x000400a8,0x00000036, + 0x00000101,0x00000100,0x000300f7,0x00000103,0x00000000,0x000400fa,0x00000101,0x00000102, + 0x00000103,0x000200f8,0x00000102,0x0004003d,0x00000006,0x00000104,0x000000f0,0x000500aa, + 0x00000036,0x00000105,0x00000104,0x000000e3,0x0004003d,0x00000006,0x00000106,0x000000f3, + 0x000500ac,0x00000036,0x00000108,0x00000106,0x00000107,0x000500a7,0x00000036,0x00000109, + 0x00000105,0x00000108,0x000200f9,0x00000103,0x000200f8,0x00000103,0x000700f5,0x00000036, + 0x0000010a,0x00000100,0x000000fc,0x00000109,0x00000102,0x000300f7,0x0000010d,0x00000000, + 0x000400fa,0x0000010a,0x0000010c,0x0000010e,0x000200f8,0x0000010c,0x0003003e,0x0000010b, + 0x000000cb,0x000200f9,0x0000010d,0x000200f8,0x0000010e,0x0004003d,0x00000006,0x0000010f, + 0x000000f0,0x000500c4,0x00000006,0x00000111,0x0000010f,0x00000110,0x0004003d,0x00000006, + 0x00000112,0x000000f3,0x000500c5,0x00000006,0x00000113,0x00000111,0x00000112,0x0003003e, + 0x0000010b,0x00000113,0x000200f9,0x0000010d,0x000200f8,0x0000010d,0x0004003d,0x00000006, + 0x00000114,0x0000010b,0x0003003e,0x000000ca,0x00000114,0x000200f9,0x000000d0,0x000200f8, + 0x000000d0,0x000200f9,0x000000c9,0x000200f8,0x000000c9,0x0004003d,0x00000006,0x00000115, + 0x000000b7,0x0004003d,0x00000006,0x00000116,0x000000ca,0x000500c5,0x00000006,0x00000117, + 0x00000115,0x00000116,0x000200fe,0x00000117,0x00010038,0x00050036,0x00000009,0x00000021, + 0x00000000,0x0000001f,0x00030037,0x00000015,0x00000020,0x000200f8,0x00000022,0x0004003b, + 0x0000009a,0x0000011a,0x00000007,0x0004003b,0x00000015,0x0000011e,0x00000007,0x0004003b, + 0x00000015,0x00000122,0x00000007,0x0004003b,0x0000000a,0x00000129,0x00000007,0x0004003b, + 0x0000000a,0x00000146,0x00000007,0x0004003d,0x00000006,0x0000011b,0x00000020,0x000500c7, + 0x00000006,0x0000011c,0x0000011b,0x000000b4,0x000500ab,0x00000036,0x0000011d,0x0000011c, + 0x00000092,0x0003003e,0x0000011a,0x0000011d,0x0004003d,0x00000006,0x0000011f,0x00000020, + 0x000500c2,0x00000006,0x00000120,0x0000011f,0x00000110,0x000500c7,0x00000006,0x00000121, + 0x00000120,0x000000e3,0x0003003e,0x0000011e,0x00000121,0x0004003d,0x00000006,0x00000123, + 0x00000020,0x000500c7,0x00000006,0x00000124,0x00000123,0x000000f4,0x0003003e,0x00000122, + 0x00000124,0x0004003d,0x00000006,0x00000125,0x0000011e,0x000500aa,0x00000036,0x00000126, + 0x00000125,0x00000092,0x000300f7,0x00000128,0x00000000,0x000400fa,0x00000126,0x00000127, + 0x0000012e,0x000200f8,0x00000127,0x0004003d,0x00000006,0x0000012a,0x00000122,0x00040070, + 0x00000009,0x0000012b,0x0000012a,0x00050085,0x00000009,0x0000012d,0x0000012b,0x0000012c, + 0x0003003e,0x00000129,0x0000012d,0x000200f9,0x00000128,0x000200f8,0x0000012e,0x0004003d, + 0x00000006,0x0000012f,0x0000011e,0x000500aa,0x00000036,0x00000130,0x0000012f,0x000000e3, + 0x0004003d,0x00000006,0x00000131,0x00000122,0x000500aa,0x00000036,0x00000132,0x00000131, + 0x000000f4,0x000500a7,0x00000036,0x00000133,0x00000130,0x00000132,0x000300f7,0x00000135, + 0x00000000,0x000400fa,0x00000133,0x00000134,0x00000137,0x000200f8,0x00000134,0x0003003e, + 0x00000129,0x00000136,0x000200f9,0x00000135,0x000200f8,0x00000137,0x0004003d,0x00000006, + 0x00000139,0x00000122,0x00040070,0x00000009,0x0000013a,0x00000139,0x00050085,0x00000009, + 0x0000013c,0x0000013a,0x0000013b,0x00050081,0x00000009,0x0000013d,0x00000138,0x0000013c, + 0x0004003d,0x00000006,0x0000013e,0x0000011e,0x00050080,0x00000006,0x00000140,0x0000013e, + 0x0000013f,0x000500c4,0x00000006,0x00000142,0x00000140,0x00000141,0x0004007c,0x00000009, + 0x00000143,0x00000142,0x00050085,0x00000009,0x00000144,0x0000013d,0x00000143,0x0003003e, + 0x00000129,0x00000144,0x000200f9,0x00000135,0x000200f8,0x00000135,0x000200f9,0x00000128, + 0x000200f8,0x00000128,0x0004003d,0x00000036,0x00000145,0x0000011a,0x000300f7,0x00000148, + 0x00000000,0x000400fa,0x00000145,0x00000147,0x0000014b,0x000200f8,0x00000147,0x0004003d, + 0x00000009,0x00000149,0x00000129,0x0004007f,0x00000009,0x0000014a,0x00000149,0x0003003e, + 0x00000146,0x0000014a,0x000200f9,0x00000148,0x000200f8,0x0000014b,0x0004003d,0x00000009, + 0x0000014c,0x00000129,0x0003003e,0x00000146,0x0000014c,0x000200f9,0x00000148,0x000200f8, + 0x00000148,0x0004003d,0x00000009,0x0000014d,0x00000146,0x000200fe,0x0000014d,0x00010038, + 0x00050036,0x00000009,0x00000024,0x00000000,0x0000000b,0x00030037,0x0000000a,0x00000023, + 0x000200f8,0x00000025,0x0004003b,0x0000000a,0x00000150,0x00000007,0x0004003b,0x0000000a, + 0x00000155,0x00000007,0x0004003b,0x0000000a,0x00000157,0x00000007,0x0004003b,0x0000000a, + 0x0000015a,0x00000007,0x0004003b,0x0000000a,0x0000015c,0x00000007,0x0004003b,0x0000000a, + 0x00000161,0x00000007,0x0004003b,0x0000000a,0x00000163,0x00000007,0x0004003b,0x0000000a, + 0x00000168,0x00000007,0x0004003b,0x0000000a,0x0000016d,0x00000007,0x0004003d,0x00000009, + 0x00000151,0x00000023,0x0008000c,0x00000009,0x00000154,0x00000001,0x0000002b,0x00000151, + 0x00000152,0x00000153,0x0003003e,0x00000155,0x00000154,0x00050039,0x00000009,0x00000156, + 0x0000000d,0x00000155,0x0003003e,0x00000150,0x00000156,0x0004003d,0x00000009,0x00000158, + 0x00000150,0x0006000c,0x00000009,0x00000159,0x00000001,0x00000004,0x00000158,0x0003003e, + 0x0000015a,0x00000159,0x00050039,0x00000009,0x0000015b,0x0000000d,0x0000015a,0x0003003e, + 0x00000157,0x0000015b,0x0004003d,0x00000009,0x0000015e,0x00000157,0x0008000c,0x00000009, + 0x00000160,0x00000001,0x00000032,0x0000015d,0x0000015e,0x0000015f,0x0003003e,0x00000161, + 0x00000160,0x00050039,0x00000009,0x00000162,0x0000000d,0x00000161,0x0003003e,0x0000015c, + 0x00000162,0x0004003d,0x00000009,0x00000164,0x00000150,0x0004003d,0x00000009,0x00000165, + 0x0000015c,0x0008000c,0x00000009,0x00000167,0x00000001,0x00000032,0x00000164,0x00000165, + 0x00000166,0x0003003e,0x00000168,0x00000167,0x00050039,0x00000009,0x00000169,0x0000000d, + 0x00000168,0x0003003e,0x00000163,0x00000169,0x0004003d,0x00000009,0x0000016a,0x00000023, + 0x0004003d,0x00000009,0x0000016b,0x00000163,0x00050085,0x00000009,0x0000016c,0x0000016a, + 0x0000016b,0x0003003e,0x0000016d,0x0000016c,0x00050039,0x00000009,0x0000016e,0x0000000d, + 0x0000016d,0x000200fe,0x0000016e,0x00010038,0x00050036,0x00000009,0x00000027,0x00000000, + 0x0000001f,0x00030037,0x00000015,0x00000026,0x000200f8,0x00000028,0x0004003b,0x0000000a, + 0x00000175,0x00000007,0x0004003b,0x00000015,0x0000017c,0x00000007,0x0004003d,0x00000006, + 0x00000171,0x00000026,0x000500c7,0x00000006,0x00000173,0x00000171,0x00000172,0x000500aa, + 0x00000036,0x00000174,0x00000173,0x00000172,0x000300f7,0x00000177,0x00000000,0x000400fa, + 0x00000174,0x00000176,0x00000178,0x000200f8,0x00000176,0x0003003e,0x00000175,0x00000136, + 0x000200f9,0x00000177,0x000200f8,0x00000178,0x0004003d,0x00000006,0x00000179,0x00000026, + 0x000500c7,0x00000006,0x0000017b,0x00000179,0x0000017a,0x0003003e,0x0000017c,0x0000017b, + 0x00050039,0x00000009,0x0000017d,0x00000021,0x0000017c,0x0003003e,0x00000175,0x0000017d, + 0x000200f9,0x00000177,0x000200f8,0x00000177,0x0004003d,0x00000009,0x0000017e,0x00000175, + 0x000200fe,0x0000017e,0x00010038, +}; +inline constexpr uint32_t k_e4m3_k16_f32__gemm_f16[] = { + 0x07230203,0x00010600,0x0008000b,0x000002ef,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x0000000b,0x00020011,0x00000016,0x00020011,0x00001151,0x00020011, + 0x00001160,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e, + 0x00000000,0x00000001,0x000d000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x000000f5, + 0x00000106,0x00000116,0x00000124,0x00000275,0x00000281,0x000002bb,0x000002ce,0x00060010, + 0x00000004,0x00000011,0x00000080,0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc, + 0x00090004,0x455f4c47,0x635f5458,0x72746e6f,0x665f6c6f,0x5f776f6c,0x72747461,0x74756269, + 0x00007365,0x00060004,0x455f4c47,0x665f5458,0x74616f6c,0x6d34655f,0x00000033,0x00080004, + 0x455f4c47,0x735f5458,0x65646168,0x36315f72,0x5f746962,0x726f7473,0x00656761,0x00080004, + 0x455f4c47,0x735f5458,0x65646168,0x62385f72,0x735f7469,0x61726f74,0x00006567,0x000b0004, + 0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d, + 0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79, + 0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45, + 0x64756c63,0x69645f65,0x74636572,0x00657669,0x00080004,0x4b5f4c47,0x635f5248,0x65706f6f, + 0x69746172,0x6d5f6576,0x69727461,0x00000078,0x00090004,0x4b5f4c47,0x6d5f5248,0x726f6d65, + 0x63735f79,0x5f65706f,0x616d6573,0x6369746e,0x00000073,0x00090004,0x4b5f4c47,0x735f5248, + 0x65646168,0x75735f72,0x6f726762,0x625f7075,0x63697361,0x00000000,0x00040005,0x00000004, + 0x6e69616d,0x00000000,0x00060005,0x0000000b,0x42363166,0x28737469,0x31363166,0x0000003b, + 0x00040005,0x0000000a,0x756c6176,0x00000065,0x00060005,0x00000010,0x46363166,0x426d6f72, + 0x28737469,0x003b3175,0x00040005,0x0000000f,0x73746962,0x00000000,0x00060005,0x00000015, + 0x66696873,0x656e5274,0x3b317528,0x003b3175,0x00040005,0x00000013,0x756c6176,0x00000065, + 0x00040005,0x00000014,0x66696873,0x00000074,0x00080005,0x00000019,0x336d3465,0x65646f43, + 0x6d6f7246,0x42363146,0x28737469,0x003b3175,0x00050005,0x00000018,0x666c6168,0x73746942, + 0x00000000,0x00070005,0x0000001f,0x6c627570,0x28687369,0x753b3175,0x31663b31,0x003b3136, + 0x00030005,0x0000001c,0x00776f72,0x00040005,0x0000001d,0x756c6f63,0x00006e6d,0x00040005, + 0x0000001e,0x756c6176,0x00000065,0x00060005,0x00000026,0x45363166,0x6e6f7078,0x28746e65, + 0x003b3166,0x00040005,0x00000025,0x756c6176,0x00000065,0x00090005,0x0000002a,0x6e756f72, + 0x69685364,0x69527466,0x45746867,0x286e6576,0x753b3175,0x00003b31,0x00040005,0x00000028, + 0x756c6176,0x00000065,0x00040005,0x00000029,0x66696873,0x00000074,0x00070005,0x00000032, + 0x65786966,0x466f5464,0x69283631,0x3b313436,0x003b3169,0x00050005,0x00000030,0x65786966, + 0x6d755364,0x00000000,0x00060005,0x00000031,0x616e6962,0x78457972,0x656e6f70,0x0000746e, + 0x00090005,0x0000003b,0x53363166,0x28706574,0x663b3166,0x36315b31,0x31663b5d,0x5d36315b, + 0x0000003b,0x00050005,0x00000038,0x75636361,0x616c756d,0x00726f74,0x00030005,0x00000039, + 0x00000061,0x00030005,0x0000003a,0x00000062,0x00050005,0x0000004a,0x746f7571,0x746e6569, + 0x00000000,0x00060005,0x0000004e,0x616d6572,0x65646e69,0x73614d72,0x0000006b,0x00050005, + 0x00000053,0x616d6572,0x65646e69,0x00000072,0x00040005,0x00000057,0x666c6168,0x00796177, + 0x00040005,0x00000073,0x614e7369,0x0000006e,0x00050005,0x0000008f,0x6167656e,0x65766974, + 0x00000000,0x00050005,0x00000095,0x6f707865,0x746e656e,0x00000000,0x00050005,0x0000009b, + 0x746e616d,0x61737369,0x00000000,0x00040005,0x000000a2,0x65646f63,0x00000000,0x00050005, + 0x000000a9,0x6e676973,0x63696669,0x00646e61,0x00040005,0x000000b5,0x66696873,0x00000074, + 0x00040005,0x000000c0,0x61726170,0x0000006d,0x00040005,0x000000c2,0x61726170,0x0000006d, + 0x00050005,0x000000c7,0x78453465,0x656e6f70,0x0000746e,0x00050005,0x000000ca,0x614d3465, + 0x7369746e,0x00006173,0x00040005,0x000000cc,0x61726170,0x0000006d,0x00040005,0x000000ce, + 0x61726170,0x0000006d,0x00040005,0x000000f1,0x65646e69,0x00000078,0x00040005,0x000000f3, + 0x68737550,0x00000000,0x00050006,0x000000f3,0x00000000,0x73776f72,0x00000000,0x00040006, + 0x000000f3,0x00000001,0x0000004e,0x00060006,0x000000f3,0x00000002,0x75706e69,0x72745374, + 0x00656469,0x00070006,0x000000f3,0x00000003,0x7074756f,0x74537475,0x65646972,0x00000000, + 0x00030005,0x000000f5,0x00006370,0x00040005,0x000000fd,0x47414c46,0x00000053,0x00050005, + 0x00000104,0x7074754f,0x6c467475,0x0074616f,0x00050006,0x00000104,0x00000000,0x3374756f, + 0x00000032,0x00030005,0x00000106,0x00000000,0x00050005,0x00000114,0x7074754f,0x34457475, + 0x00000000,0x00050006,0x00000114,0x00000000,0x3874756f,0x00000000,0x00030005,0x00000116, + 0x00000000,0x00040005,0x00000118,0x61726170,0x0000006d,0x00040005,0x0000011b,0x61726170, + 0x0000006d,0x00050005,0x00000122,0x7074754f,0x61487475,0x0000666c,0x00050006,0x00000122, + 0x00000000,0x3174756f,0x00000036,0x00030005,0x00000124,0x00000000,0x00040005,0x0000012f, + 0x61726170,0x0000006d,0x00040005,0x00000132,0x61726170,0x0000006d,0x00050005,0x0000014f, + 0x6e757274,0x65746163,0x00000064,0x00050005,0x00000153,0x616d6572,0x65646e69,0x00000072, + 0x00040005,0x00000159,0x666c6168,0x00796177,0x00050005,0x00000179,0x6167656e,0x65766974, + 0x00000000,0x00050005,0x0000017c,0x6e67616d,0x64757469,0x00000065,0x00030005,0x00000188, + 0x0062736d,0x00060005,0x0000018b,0x756c6176,0x70784565,0x6e656e6f,0x00000074,0x00050005, + 0x0000018f,0x666c6168,0x73746942,0x00000000,0x00050005,0x00000196,0x6e676973,0x63696669, + 0x00646e61,0x00040005,0x000001a0,0x61726170,0x0000006d,0x00040005,0x000001a2,0x61726170, + 0x0000006d,0x00060005,0x000001c6,0x6e627573,0x616d726f,0x6163536c,0x0000656c,0x00050005, + 0x000001ca,0x746e616d,0x61737369,0x00000000,0x00040005,0x000001d8,0x61726170,0x0000006d, + 0x00040005,0x000001da,0x61726170,0x0000006d,0x00040005,0x000001e1,0x61726170,0x0000006d, + 0x00060005,0x000001e7,0x6978616d,0x456d756d,0x6e6f7078,0x00746e65,0x00040005,0x000001ed, + 0x61726170,0x0000006d,0x00030005,0x000001f0,0x00000069,0x00040005,0x00000207,0x61726170, + 0x0000006d,0x00040005,0x0000020c,0x61726170,0x0000006d,0x00050005,0x00000214,0x65786966, + 0x6d755364,0x00000000,0x00050005,0x00000219,0x6f707865,0x746e656e,0x00000000,0x00040005, + 0x0000021a,0x61726170,0x0000006d,0x00040005,0x0000021d,0x6c616373,0x00006465,0x00030005, + 0x0000022d,0x00000069,0x00030005,0x00000242,0x00006165,0x00040005,0x00000244,0x61726170, + 0x0000006d,0x00030005,0x00000248,0x00006265,0x00040005,0x0000024a,0x61726170,0x0000006d, + 0x00040005,0x0000024e,0x646f7270,0x00746375,0x00040005,0x0000026c,0x61726170,0x0000006d, + 0x00040005,0x0000026e,0x61726170,0x0000006d,0x00040005,0x00000272,0x42776f72,0x00657361, + 0x00060005,0x00000275,0x575f6c67,0x476b726f,0x70756f72,0x00004449,0x00030005,0x00000280, + 0x00000069,0x00080005,0x00000281,0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163,0x44496e6f, + 0x00000000,0x00040005,0x0000028a,0x454c4954,0x00004e5f,0x00030005,0x0000028d,0x00776f72, + 0x00040005,0x00000292,0x756c6f63,0x00006e6d,0x00050005,0x000002a4,0x75636361,0x616c756d, + 0x00726f74,0x00030005,0x000002a5,0x0000626b,0x00030005,0x000002ac,0x0000004b,0x00030005, + 0x000002ae,0x0000006a,0x00030005,0x000002b6,0x00000078,0x00040005,0x000002b9,0x75706e49, + 0x00004174,0x00040006,0x000002b9,0x00000000,0x00000061,0x00030005,0x000002bb,0x00000000, + 0x00030005,0x000002c9,0x00000077,0x00040005,0x000002cc,0x75706e49,0x00004274,0x00040006, + 0x000002cc,0x00000000,0x00000062,0x00030005,0x000002ce,0x00000000,0x00040005,0x000002db, + 0x61726170,0x0000006d,0x00040005,0x000002dd,0x61726170,0x0000006d,0x00040005,0x000002df, + 0x61726170,0x0000006d,0x00040005,0x000002e6,0x61726170,0x0000006d,0x00040005,0x000002e8, + 0x61726170,0x0000006d,0x00040005,0x000002ea,0x61726170,0x0000006d,0x00030047,0x000000f3, + 0x00000002,0x00050048,0x000000f3,0x00000000,0x00000023,0x00000000,0x00050048,0x000000f3, + 0x00000001,0x00000023,0x00000004,0x00050048,0x000000f3,0x00000002,0x00000023,0x00000008, + 0x00050048,0x000000f3,0x00000003,0x00000023,0x0000000c,0x00040047,0x000000fd,0x00000001, + 0x00000002,0x00040047,0x00000103,0x00000006,0x00000004,0x00030047,0x00000104,0x00000002, + 0x00040048,0x00000104,0x00000000,0x00000019,0x00050048,0x00000104,0x00000000,0x00000023, + 0x00000000,0x00030047,0x00000106,0x00000019,0x00040047,0x00000106,0x00000021,0x00000007, + 0x00040047,0x00000106,0x00000022,0x00000000,0x00040047,0x00000113,0x00000006,0x00000001, + 0x00030047,0x00000114,0x00000002,0x00040048,0x00000114,0x00000000,0x00000019,0x00050048, + 0x00000114,0x00000000,0x00000023,0x00000000,0x00030047,0x00000116,0x00000019,0x00040047, + 0x00000116,0x00000021,0x00000005,0x00040047,0x00000116,0x00000022,0x00000000,0x00040047, + 0x00000121,0x00000006,0x00000002,0x00030047,0x00000122,0x00000002,0x00040048,0x00000122, + 0x00000000,0x00000019,0x00050048,0x00000122,0x00000000,0x00000023,0x00000000,0x00030047, + 0x00000124,0x00000019,0x00040047,0x00000124,0x00000021,0x00000002,0x00040047,0x00000124, + 0x00000022,0x00000000,0x00030047,0x00000220,0x0000002a,0x00030047,0x00000253,0x0000002a, + 0x00030047,0x00000259,0x0000002a,0x00030047,0x0000025b,0x0000002a,0x00040047,0x00000275, + 0x0000000b,0x0000001a,0x00040047,0x00000281,0x0000000b,0x0000001b,0x00040047,0x0000028a, + 0x00000001,0x00000001,0x00040047,0x000002ac,0x00000001,0x00000000,0x00040047,0x000002b8, + 0x00000006,0x00000002,0x00030047,0x000002b9,0x00000002,0x00040048,0x000002b9,0x00000000, + 0x00000018,0x00050048,0x000002b9,0x00000000,0x00000023,0x00000000,0x00030047,0x000002bb, + 0x00000018,0x00040047,0x000002bb,0x00000021,0x00000000,0x00040047,0x000002bb,0x00000022, + 0x00000000,0x00040047,0x000002cb,0x00000006,0x00000002,0x00030047,0x000002cc,0x00000002, + 0x00040048,0x000002cc,0x00000000,0x00000018,0x00050048,0x000002cc,0x00000000,0x00000023, + 0x00000000,0x00030047,0x000002ce,0x00000018,0x00040047,0x000002ce,0x00000021,0x00000001, + 0x00040047,0x000002ce,0x00000022,0x00000000,0x00020013,0x00000002,0x00030021,0x00000003, + 0x00000002,0x00030016,0x00000006,0x00000010,0x00040020,0x00000007,0x00000007,0x00000006, + 0x00040015,0x00000008,0x00000020,0x00000000,0x00040021,0x00000009,0x00000008,0x00000007, + 0x00040020,0x0000000d,0x00000007,0x00000008,0x00040021,0x0000000e,0x00000006,0x0000000d, + 0x00050021,0x00000012,0x00000008,0x0000000d,0x0000000d,0x00040021,0x00000017,0x00000008, + 0x0000000d,0x00060021,0x0000001b,0x00000002,0x0000000d,0x0000000d,0x00000007,0x00030016, + 0x00000021,0x00000020,0x00040020,0x00000022,0x00000007,0x00000021,0x00040015,0x00000023, + 0x00000020,0x00000001,0x00040021,0x00000024,0x00000023,0x00000022,0x00040015,0x0000002c, + 0x00000040,0x00000001,0x00040020,0x0000002d,0x00000007,0x0000002c,0x00040020,0x0000002e, + 0x00000007,0x00000023,0x00050021,0x0000002f,0x00000021,0x0000002d,0x0000002e,0x0004002b, + 0x00000008,0x00000034,0x00000010,0x0004001c,0x00000035,0x00000021,0x00000034,0x00040020, + 0x00000036,0x00000007,0x00000035,0x00060021,0x00000037,0x00000021,0x00000022,0x00000036, + 0x00000036,0x00040015,0x0000003e,0x00000010,0x00000000,0x0004002b,0x00000008,0x00000044, + 0x0000ffff,0x0004002b,0x00000008,0x0000004f,0x00000001,0x00020014,0x0000005c,0x0004002b, + 0x00000008,0x0000006a,0x00000000,0x00040020,0x00000072,0x00000007,0x0000005c,0x0004002b, + 0x00000008,0x00000075,0x00007c00,0x0004002b,0x00000008,0x0000007b,0x000003ff,0x0004002b, + 0x00000008,0x00000084,0x00007fff,0x0004002b,0x00000008,0x0000008a,0x00000008,0x0004002b, + 0x00000008,0x0000008c,0x00000080,0x0004002b,0x00000008,0x00000091,0x00008000,0x0004002b, + 0x00000008,0x00000097,0x0000000a,0x0004002b,0x00000008,0x00000099,0x0000001f,0x0004002b, + 0x00000008,0x000000a3,0x0000007e,0x0004002b,0x00000008,0x000000b1,0x00000400,0x0004002b, + 0x00000008,0x000000bb,0x0000000f,0x0004002b,0x00000008,0x000000cb,0x00000007,0x0004002b, + 0x00000008,0x000000de,0x00000006,0x0004002b,0x00000008,0x000000e7,0x00000003,0x0006001e, + 0x000000f3,0x00000008,0x00000008,0x00000008,0x00000008,0x00040020,0x000000f4,0x00000009, + 0x000000f3,0x0004003b,0x000000f4,0x000000f5,0x00000009,0x0004002b,0x00000023,0x000000f6, + 0x00000003,0x00040020,0x000000f7,0x00000009,0x00000008,0x00040032,0x00000008,0x000000fd, + 0x00000000,0x0004002b,0x00000008,0x000000fe,0x00000100,0x00060034,0x00000008,0x000000ff, + 0x000000c7,0x000000fd,0x000000fe,0x00060034,0x0000005c,0x00000100,0x000000ab,0x000000ff, + 0x0000006a,0x0003001d,0x00000103,0x00000021,0x0003001e,0x00000104,0x00000103,0x00040020, + 0x00000105,0x0000000c,0x00000104,0x0004003b,0x00000105,0x00000106,0x0000000c,0x0004002b, + 0x00000023,0x00000107,0x00000000,0x00040020,0x0000010b,0x0000000c,0x00000021,0x00060034, + 0x00000008,0x0000010e,0x000000c7,0x000000fd,0x00000034,0x00060034,0x0000005c,0x0000010f, + 0x000000ab,0x0000010e,0x0000006a,0x00040015,0x00000112,0x00000008,0x00000000,0x0003001d, + 0x00000113,0x00000112,0x0003001e,0x00000114,0x00000113,0x00040020,0x00000115,0x0000000c, + 0x00000114,0x0004003b,0x00000115,0x00000116,0x0000000c,0x00040020,0x0000011e,0x0000000c, + 0x00000112,0x0003001d,0x00000121,0x00000006,0x0003001e,0x00000122,0x00000121,0x00040020, + 0x00000123,0x0000000c,0x00000122,0x0004003b,0x00000123,0x00000124,0x0000000c,0x00040020, + 0x00000127,0x0000000c,0x00000006,0x0004002b,0x00000008,0x00000129,0x00000020,0x00060034, + 0x00000008,0x0000012a,0x000000c7,0x000000fd,0x00000129,0x00060034,0x0000005c,0x0000012b, + 0x000000ab,0x0000012a,0x0000006a,0x0004002b,0x00000008,0x00000139,0x00000017,0x0004002b, + 0x00000008,0x0000013b,0x000000ff,0x0004002b,0x00000023,0x0000013e,0x0000007f,0x0004002b, + 0x00000023,0x00000140,0xfffffff2,0x0005002b,0x0000002c,0x00000173,0x00000000,0x00000000, + 0x0004002b,0x00000021,0x00000177,0x00000000,0x0004002b,0x00000023,0x00000198,0x0000000a, + 0x0004002b,0x00000008,0x000001ac,0x00000800,0x0004002b,0x00000023,0x000001b0,0x00000001, + 0x0004002b,0x00000023,0x000001b4,0x00000010,0x0004002b,0x00000023,0x000001bc,0x0000000f, + 0x0004002b,0x00000023,0x000001c8,0x00000018,0x0004002b,0x00000023,0x000001e8,0xffffffeb, + 0x0004002b,0x00000023,0x00000225,0x00000019,0x00040017,0x00000273,0x00000008,0x00000003, + 0x00040020,0x00000274,0x00000001,0x00000273,0x0004003b,0x00000274,0x00000275,0x00000001, + 0x00040020,0x00000276,0x00000001,0x00000008,0x0004002b,0x00000008,0x00000279,0x00000002, + 0x0004002b,0x00000008,0x0000027e,0x00000040,0x0004003b,0x00000274,0x00000281,0x00000001, + 0x00040032,0x00000008,0x0000028a,0x00000020,0x00060034,0x00000008,0x0000028b,0x00000084, + 0x0000027e,0x0000028a,0x00040032,0x00000008,0x000002ac,0x00000010,0x0003001d,0x000002b8, + 0x00000006,0x0003001e,0x000002b9,0x000002b8,0x00040020,0x000002ba,0x0000000c,0x000002b9, + 0x0004003b,0x000002ba,0x000002bb,0x0000000c,0x0004002b,0x00000023,0x000002bd,0x00000002, + 0x0003001d,0x000002cb,0x00000006,0x0003001e,0x000002cc,0x000002cb,0x00040020,0x000002cd, + 0x0000000c,0x000002cc,0x0004003b,0x000002cd,0x000002ce,0x0000000c,0x0006002c,0x00000273, + 0x000002ee,0x0000008c,0x0000004f,0x0000004f,0x00050036,0x00000002,0x00000004,0x00000000, + 0x00000003,0x000200f8,0x00000005,0x0004003b,0x0000000d,0x00000272,0x00000007,0x0004003b, + 0x0000000d,0x00000280,0x00000007,0x0004003b,0x0000000d,0x0000028d,0x00000007,0x0004003b, + 0x0000000d,0x00000292,0x00000007,0x0004003b,0x00000022,0x000002a4,0x00000007,0x0004003b, + 0x0000000d,0x000002a5,0x00000007,0x0004003b,0x0000000d,0x000002ae,0x00000007,0x0004003b, + 0x00000036,0x000002b6,0x00000007,0x0004003b,0x00000036,0x000002c9,0x00000007,0x0004003b, + 0x00000022,0x000002db,0x00000007,0x0004003b,0x00000036,0x000002dd,0x00000007,0x0004003b, + 0x00000036,0x000002df,0x00000007,0x0004003b,0x0000000d,0x000002e6,0x00000007,0x0004003b, + 0x0000000d,0x000002e8,0x00000007,0x0004003b,0x00000007,0x000002ea,0x00000007,0x00050041, + 0x00000276,0x00000277,0x00000275,0x0000004f,0x0004003d,0x00000008,0x00000278,0x00000277, + 0x00050041,0x00000276,0x0000027a,0x00000275,0x00000279,0x0004003d,0x00000008,0x0000027b, + 0x0000027a,0x00050084,0x00000008,0x0000027c,0x0000027b,0x00000044,0x00050080,0x00000008, + 0x0000027d,0x00000278,0x0000027c,0x00050084,0x00000008,0x0000027f,0x0000027d,0x0000027e, + 0x0003003e,0x00000272,0x0000027f,0x00050041,0x00000276,0x00000282,0x00000281,0x0000006a, + 0x0004003d,0x00000008,0x00000283,0x00000282,0x0003003e,0x00000280,0x00000283,0x000200f9, + 0x00000284,0x000200f8,0x00000284,0x000400f6,0x00000286,0x00000287,0x00000000,0x000200f9, + 0x00000288,0x000200f8,0x00000288,0x0004003d,0x00000008,0x00000289,0x00000280,0x000500b0, + 0x0000005c,0x0000028c,0x00000289,0x0000028b,0x000400fa,0x0000028c,0x00000285,0x00000286, + 0x000200f8,0x00000285,0x0004003d,0x00000008,0x0000028e,0x00000272,0x0004003d,0x00000008, + 0x0000028f,0x00000280,0x00050086,0x00000008,0x00000290,0x0000028f,0x0000028a,0x00050080, + 0x00000008,0x00000291,0x0000028e,0x00000290,0x0003003e,0x0000028d,0x00000291,0x0004003d, + 0x00000008,0x00000293,0x00000280,0x00050089,0x00000008,0x00000294,0x00000293,0x0000028a, + 0x0003003e,0x00000292,0x00000294,0x0004003d,0x00000008,0x00000295,0x0000028d,0x00050041, + 0x000000f7,0x00000296,0x000000f5,0x00000107,0x0004003d,0x00000008,0x00000297,0x00000296, + 0x000500ae,0x0000005c,0x00000298,0x00000295,0x00000297,0x000400a8,0x0000005c,0x00000299, + 0x00000298,0x000300f7,0x0000029b,0x00000000,0x000400fa,0x00000299,0x0000029a,0x0000029b, + 0x000200f8,0x0000029a,0x0004003d,0x00000008,0x0000029c,0x00000292,0x00050041,0x000000f7, + 0x0000029d,0x000000f5,0x000001b0,0x0004003d,0x00000008,0x0000029e,0x0000029d,0x000500ae, + 0x0000005c,0x0000029f,0x0000029c,0x0000029e,0x000200f9,0x0000029b,0x000200f8,0x0000029b, + 0x000700f5,0x0000005c,0x000002a0,0x00000298,0x00000285,0x0000029f,0x0000029a,0x000300f7, + 0x000002a2,0x00000000,0x000400fa,0x000002a0,0x000002a1,0x000002a2,0x000200f8,0x000002a1, + 0x000200f9,0x00000287,0x000200f8,0x000002a2,0x0003003e,0x000002a4,0x00000177,0x0003003e, + 0x000002a5,0x0000006a,0x000200f9,0x000002a6,0x000200f8,0x000002a6,0x000400f6,0x000002a8, + 0x000002a9,0x00000000,0x000200f9,0x000002aa,0x000200f8,0x000002aa,0x0004003d,0x00000008, + 0x000002ab,0x000002a5,0x000500b0,0x0000005c,0x000002ad,0x000002ab,0x000002ac,0x000400fa, + 0x000002ad,0x000002a7,0x000002a8,0x000200f8,0x000002a7,0x0003003e,0x000002ae,0x0000006a, + 0x000200f9,0x000002af,0x000200f8,0x000002af,0x000400f6,0x000002b1,0x000002b2,0x00000000, + 0x000200f9,0x000002b3,0x000200f8,0x000002b3,0x0004003d,0x00000008,0x000002b4,0x000002ae, + 0x000500b0,0x0000005c,0x000002b5,0x000002b4,0x00000034,0x000400fa,0x000002b5,0x000002b0, + 0x000002b1,0x000200f8,0x000002b0,0x0004003d,0x00000008,0x000002b7,0x000002ae,0x0004003d, + 0x00000008,0x000002bc,0x0000028d,0x00050041,0x000000f7,0x000002be,0x000000f5,0x000002bd, + 0x0004003d,0x00000008,0x000002bf,0x000002be,0x00050084,0x00000008,0x000002c0,0x000002bc, + 0x000002bf,0x0004003d,0x00000008,0x000002c1,0x000002a5,0x00050080,0x00000008,0x000002c2, + 0x000002c0,0x000002c1,0x0004003d,0x00000008,0x000002c3,0x000002ae,0x00050080,0x00000008, + 0x000002c4,0x000002c2,0x000002c3,0x00060041,0x00000127,0x000002c5,0x000002bb,0x00000107, + 0x000002c4,0x0004003d,0x00000006,0x000002c6,0x000002c5,0x00040073,0x00000021,0x000002c7, + 0x000002c6,0x00050041,0x00000022,0x000002c8,0x000002b6,0x000002b7,0x0003003e,0x000002c8, + 0x000002c7,0x0004003d,0x00000008,0x000002ca,0x000002ae,0x0004003d,0x00000008,0x000002cf, + 0x000002a5,0x0004003d,0x00000008,0x000002d0,0x000002ae,0x00050080,0x00000008,0x000002d1, + 0x000002cf,0x000002d0,0x00050084,0x00000008,0x000002d2,0x000002d1,0x0000028a,0x0004003d, + 0x00000008,0x000002d3,0x00000292,0x00050080,0x00000008,0x000002d4,0x000002d2,0x000002d3, + 0x00060041,0x00000127,0x000002d5,0x000002ce,0x00000107,0x000002d4,0x0004003d,0x00000006, + 0x000002d6,0x000002d5,0x00040073,0x00000021,0x000002d7,0x000002d6,0x00050041,0x00000022, + 0x000002d8,0x000002c9,0x000002ca,0x0003003e,0x000002d8,0x000002d7,0x000200f9,0x000002b2, + 0x000200f8,0x000002b2,0x0004003d,0x00000008,0x000002d9,0x000002ae,0x00050080,0x00000008, + 0x000002da,0x000002d9,0x000001b0,0x0003003e,0x000002ae,0x000002da,0x000200f9,0x000002af, + 0x000200f8,0x000002b1,0x0004003d,0x00000021,0x000002dc,0x000002a4,0x0003003e,0x000002db, + 0x000002dc,0x0004003d,0x00000035,0x000002de,0x000002b6,0x0003003e,0x000002dd,0x000002de, + 0x0004003d,0x00000035,0x000002e0,0x000002c9,0x0003003e,0x000002df,0x000002e0,0x00070039, + 0x00000021,0x000002e1,0x0000003b,0x000002db,0x000002dd,0x000002df,0x0003003e,0x000002a4, + 0x000002e1,0x000200f9,0x000002a9,0x000200f8,0x000002a9,0x0004003d,0x00000008,0x000002e2, + 0x000002a5,0x00050080,0x00000008,0x000002e3,0x000002e2,0x00000034,0x0003003e,0x000002a5, + 0x000002e3,0x000200f9,0x000002a6,0x000200f8,0x000002a8,0x0004003d,0x00000021,0x000002e4, + 0x000002a4,0x00040073,0x00000006,0x000002e5,0x000002e4,0x0004003d,0x00000008,0x000002e7, + 0x0000028d,0x0003003e,0x000002e6,0x000002e7,0x0004003d,0x00000008,0x000002e9,0x00000292, + 0x0003003e,0x000002e8,0x000002e9,0x0003003e,0x000002ea,0x000002e5,0x00070039,0x00000002, + 0x000002eb,0x0000001f,0x000002e6,0x000002e8,0x000002ea,0x000200f9,0x00000287,0x000200f8, + 0x00000287,0x0004003d,0x00000008,0x000002ec,0x00000280,0x00050080,0x00000008,0x000002ed, + 0x000002ec,0x0000008c,0x0003003e,0x00000280,0x000002ed,0x000200f9,0x00000284,0x000200f8, + 0x00000286,0x000100fd,0x00010038,0x00050036,0x00000008,0x0000000b,0x00000000,0x00000009, + 0x00030037,0x00000007,0x0000000a,0x000200f8,0x0000000c,0x0004003d,0x00000006,0x0000003d, + 0x0000000a,0x0004007c,0x0000003e,0x0000003f,0x0000003d,0x00040071,0x00000008,0x00000040, + 0x0000003f,0x000200fe,0x00000040,0x00010038,0x00050036,0x00000006,0x00000010,0x00000000, + 0x0000000e,0x00030037,0x0000000d,0x0000000f,0x000200f8,0x00000011,0x0004003d,0x00000008, + 0x00000043,0x0000000f,0x000500c7,0x00000008,0x00000045,0x00000043,0x00000044,0x00040071, + 0x0000003e,0x00000046,0x00000045,0x0004007c,0x00000006,0x00000047,0x00000046,0x000200fe, + 0x00000047,0x00010038,0x00050036,0x00000008,0x00000015,0x00000000,0x00000012,0x00030037, + 0x0000000d,0x00000013,0x00030037,0x0000000d,0x00000014,0x000200f8,0x00000016,0x0004003b, + 0x0000000d,0x0000004a,0x00000007,0x0004003b,0x0000000d,0x0000004e,0x00000007,0x0004003b, + 0x0000000d,0x00000053,0x00000007,0x0004003b,0x0000000d,0x00000057,0x00000007,0x0004003d, + 0x00000008,0x0000004b,0x00000013,0x0004003d,0x00000008,0x0000004c,0x00000014,0x000500c2, + 0x00000008,0x0000004d,0x0000004b,0x0000004c,0x0003003e,0x0000004a,0x0000004d,0x0004003d, + 0x00000008,0x00000050,0x00000014,0x000500c4,0x00000008,0x00000051,0x0000004f,0x00000050, + 0x00050082,0x00000008,0x00000052,0x00000051,0x0000004f,0x0003003e,0x0000004e,0x00000052, + 0x0004003d,0x00000008,0x00000054,0x00000013,0x0004003d,0x00000008,0x00000055,0x0000004e, + 0x000500c7,0x00000008,0x00000056,0x00000054,0x00000055,0x0003003e,0x00000053,0x00000056, + 0x0004003d,0x00000008,0x00000058,0x00000014,0x00050082,0x00000008,0x00000059,0x00000058, + 0x0000004f,0x000500c4,0x00000008,0x0000005a,0x0000004f,0x00000059,0x0003003e,0x00000057, + 0x0000005a,0x0004003d,0x00000008,0x0000005b,0x0000004a,0x0004003d,0x00000008,0x0000005d, + 0x00000053,0x0004003d,0x00000008,0x0000005e,0x00000057,0x000500ac,0x0000005c,0x0000005f, + 0x0000005d,0x0000005e,0x000400a8,0x0000005c,0x00000060,0x0000005f,0x000300f7,0x00000062, + 0x00000000,0x000400fa,0x00000060,0x00000061,0x00000062,0x000200f8,0x00000061,0x0004003d, + 0x00000008,0x00000063,0x00000053,0x0004003d,0x00000008,0x00000064,0x00000057,0x000500aa, + 0x0000005c,0x00000065,0x00000063,0x00000064,0x000300f7,0x00000067,0x00000000,0x000400fa, + 0x00000065,0x00000066,0x00000067,0x000200f8,0x00000066,0x0004003d,0x00000008,0x00000068, + 0x0000004a,0x000500c7,0x00000008,0x00000069,0x00000068,0x0000004f,0x000500ab,0x0000005c, + 0x0000006b,0x00000069,0x0000006a,0x000200f9,0x00000067,0x000200f8,0x00000067,0x000700f5, + 0x0000005c,0x0000006c,0x00000065,0x00000061,0x0000006b,0x00000066,0x000200f9,0x00000062, + 0x000200f8,0x00000062,0x000700f5,0x0000005c,0x0000006d,0x0000005f,0x00000016,0x0000006c, + 0x00000067,0x000600a9,0x00000008,0x0000006e,0x0000006d,0x0000004f,0x0000006a,0x00050080, + 0x00000008,0x0000006f,0x0000005b,0x0000006e,0x000200fe,0x0000006f,0x00010038,0x00050036, + 0x00000008,0x00000019,0x00000000,0x00000017,0x00030037,0x0000000d,0x00000018,0x000200f8, + 0x0000001a,0x0004003b,0x00000072,0x00000073,0x00000007,0x0004003b,0x0000000d,0x0000008f, + 0x00000007,0x0004003b,0x0000000d,0x00000095,0x00000007,0x0004003b,0x0000000d,0x0000009b, + 0x00000007,0x0004003b,0x0000000d,0x000000a2,0x00000007,0x0004003b,0x0000000d,0x000000a9, + 0x00000007,0x0004003b,0x0000000d,0x000000ac,0x00000007,0x0004003b,0x0000000d,0x000000b5, + 0x00000007,0x0004003b,0x0000000d,0x000000b8,0x00000007,0x0004003b,0x0000000d,0x000000c0, + 0x00000007,0x0004003b,0x0000000d,0x000000c2,0x00000007,0x0004003b,0x0000000d,0x000000c7, + 0x00000007,0x0004003b,0x0000000d,0x000000ca,0x00000007,0x0004003b,0x0000000d,0x000000cc, + 0x00000007,0x0004003b,0x0000000d,0x000000ce,0x00000007,0x0004003b,0x0000000d,0x000000e2, + 0x00000007,0x0004003d,0x00000008,0x00000074,0x00000018,0x000500c7,0x00000008,0x00000076, + 0x00000074,0x00000075,0x000500aa,0x0000005c,0x00000077,0x00000076,0x00000075,0x000300f7, + 0x00000079,0x00000000,0x000400fa,0x00000077,0x00000078,0x00000079,0x000200f8,0x00000078, + 0x0004003d,0x00000008,0x0000007a,0x00000018,0x000500c7,0x00000008,0x0000007c,0x0000007a, + 0x0000007b,0x000500ab,0x0000005c,0x0000007d,0x0000007c,0x0000006a,0x000200f9,0x00000079, + 0x000200f8,0x00000079,0x000700f5,0x0000005c,0x0000007e,0x00000077,0x0000001a,0x0000007d, + 0x00000078,0x0003003e,0x00000073,0x0000007e,0x0004003d,0x0000005c,0x0000007f,0x00000073, + 0x000300f7,0x00000081,0x00000000,0x000400fa,0x0000007f,0x00000080,0x00000081,0x000200f8, + 0x00000080,0x000200fe,0x0000006a,0x000200f8,0x00000081,0x0004003d,0x00000008,0x00000083, + 0x00000018,0x000500c7,0x00000008,0x00000085,0x00000083,0x00000084,0x000500aa,0x0000005c, + 0x00000086,0x00000085,0x0000006a,0x000300f7,0x00000088,0x00000000,0x000400fa,0x00000086, + 0x00000087,0x00000088,0x000200f8,0x00000087,0x0004003d,0x00000008,0x00000089,0x00000018, + 0x000500c2,0x00000008,0x0000008b,0x00000089,0x0000008a,0x000500c7,0x00000008,0x0000008d, + 0x0000008b,0x0000008c,0x000200fe,0x0000008d,0x000200f8,0x00000088,0x0004003d,0x00000008, + 0x00000090,0x00000018,0x000500c7,0x00000008,0x00000092,0x00000090,0x00000091,0x000500ab, + 0x0000005c,0x00000093,0x00000092,0x0000006a,0x000600a9,0x00000008,0x00000094,0x00000093, + 0x0000008c,0x0000006a,0x0003003e,0x0000008f,0x00000094,0x0004003d,0x00000008,0x00000096, + 0x00000018,0x000500c2,0x00000008,0x00000098,0x00000096,0x00000097,0x000500c7,0x00000008, + 0x0000009a,0x00000098,0x00000099,0x0003003e,0x00000095,0x0000009a,0x0004003d,0x00000008, + 0x0000009c,0x00000018,0x000500c7,0x00000008,0x0000009d,0x0000009c,0x0000007b,0x0003003e, + 0x0000009b,0x0000009d,0x0004003d,0x00000008,0x0000009e,0x00000095,0x000500aa,0x0000005c, + 0x0000009f,0x0000009e,0x00000099,0x000300f7,0x000000a1,0x00000000,0x000400fa,0x0000009f, + 0x000000a0,0x000000a4,0x000200f8,0x000000a0,0x0003003e,0x000000a2,0x000000a3,0x000200f9, + 0x000000a1,0x000200f8,0x000000a4,0x0004003d,0x00000008,0x000000a5,0x00000095,0x000500b2, + 0x0000005c,0x000000a6,0x000000a5,0x0000008a,0x000300f7,0x000000a8,0x00000000,0x000400fa, + 0x000000a6,0x000000a7,0x000000c6,0x000200f8,0x000000a7,0x0004003d,0x00000008,0x000000aa, + 0x00000095,0x000500aa,0x0000005c,0x000000ab,0x000000aa,0x0000006a,0x000300f7,0x000000ae, + 0x00000000,0x000400fa,0x000000ab,0x000000ad,0x000000b0,0x000200f8,0x000000ad,0x0004003d, + 0x00000008,0x000000af,0x0000009b,0x0003003e,0x000000ac,0x000000af,0x000200f9,0x000000ae, + 0x000200f8,0x000000b0,0x0004003d,0x00000008,0x000000b2,0x0000009b,0x00050080,0x00000008, + 0x000000b3,0x000000b1,0x000000b2,0x0003003e,0x000000ac,0x000000b3,0x000200f9,0x000000ae, + 0x000200f8,0x000000ae,0x0004003d,0x00000008,0x000000b4,0x000000ac,0x0003003e,0x000000a9, + 0x000000b4,0x0004003d,0x00000008,0x000000b6,0x00000095,0x000500aa,0x0000005c,0x000000b7, + 0x000000b6,0x0000006a,0x000300f7,0x000000ba,0x00000000,0x000400fa,0x000000b7,0x000000b9, + 0x000000bc,0x000200f8,0x000000b9,0x0003003e,0x000000b8,0x000000bb,0x000200f9,0x000000ba, + 0x000200f8,0x000000bc,0x0004003d,0x00000008,0x000000bd,0x00000095,0x00050082,0x00000008, + 0x000000be,0x00000034,0x000000bd,0x0003003e,0x000000b8,0x000000be,0x000200f9,0x000000ba, + 0x000200f8,0x000000ba,0x0004003d,0x00000008,0x000000bf,0x000000b8,0x0003003e,0x000000b5, + 0x000000bf,0x0004003d,0x00000008,0x000000c1,0x000000a9,0x0003003e,0x000000c0,0x000000c1, + 0x0004003d,0x00000008,0x000000c3,0x000000b5,0x0003003e,0x000000c2,0x000000c3,0x00060039, + 0x00000008,0x000000c4,0x00000015,0x000000c0,0x000000c2,0x0007000c,0x00000008,0x000000c5, + 0x00000001,0x00000026,0x000000c4,0x0000008a,0x0003003e,0x000000a2,0x000000c5,0x000200f9, + 0x000000a8,0x000200f8,0x000000c6,0x0004003d,0x00000008,0x000000c8,0x00000095,0x00050082, + 0x00000008,0x000000c9,0x000000c8,0x0000008a,0x0003003e,0x000000c7,0x000000c9,0x0004003d, + 0x00000008,0x000000cd,0x0000009b,0x0003003e,0x000000cc,0x000000cd,0x0003003e,0x000000ce, + 0x000000cb,0x00060039,0x00000008,0x000000cf,0x00000015,0x000000cc,0x000000ce,0x0003003e, + 0x000000ca,0x000000cf,0x0004003d,0x00000008,0x000000d0,0x000000ca,0x000500aa,0x0000005c, + 0x000000d1,0x000000d0,0x0000008a,0x000300f7,0x000000d3,0x00000000,0x000400fa,0x000000d1, + 0x000000d2,0x000000d3,0x000200f8,0x000000d2,0x0003003e,0x000000ca,0x0000006a,0x0004003d, + 0x00000008,0x000000d4,0x000000c7,0x00050080,0x00000008,0x000000d5,0x000000d4,0x0000004f, + 0x0003003e,0x000000c7,0x000000d5,0x000200f9,0x000000d3,0x000200f8,0x000000d3,0x0004003d, + 0x00000008,0x000000d6,0x000000c7,0x000500ac,0x0000005c,0x000000d7,0x000000d6,0x000000bb, + 0x000400a8,0x0000005c,0x000000d8,0x000000d7,0x000300f7,0x000000da,0x00000000,0x000400fa, + 0x000000d8,0x000000d9,0x000000da,0x000200f8,0x000000d9,0x0004003d,0x00000008,0x000000db, + 0x000000c7,0x000500aa,0x0000005c,0x000000dc,0x000000db,0x000000bb,0x0004003d,0x00000008, + 0x000000dd,0x000000ca,0x000500ac,0x0000005c,0x000000df,0x000000dd,0x000000de,0x000500a7, + 0x0000005c,0x000000e0,0x000000dc,0x000000df,0x000200f9,0x000000da,0x000200f8,0x000000da, + 0x000700f5,0x0000005c,0x000000e1,0x000000d7,0x000000d3,0x000000e0,0x000000d9,0x000300f7, + 0x000000e4,0x00000000,0x000400fa,0x000000e1,0x000000e3,0x000000e5,0x000200f8,0x000000e3, + 0x0003003e,0x000000e2,0x000000a3,0x000200f9,0x000000e4,0x000200f8,0x000000e5,0x0004003d, + 0x00000008,0x000000e6,0x000000c7,0x000500c4,0x00000008,0x000000e8,0x000000e6,0x000000e7, + 0x0004003d,0x00000008,0x000000e9,0x000000ca,0x000500c5,0x00000008,0x000000ea,0x000000e8, + 0x000000e9,0x0003003e,0x000000e2,0x000000ea,0x000200f9,0x000000e4,0x000200f8,0x000000e4, + 0x0004003d,0x00000008,0x000000eb,0x000000e2,0x0003003e,0x000000a2,0x000000eb,0x000200f9, + 0x000000a8,0x000200f8,0x000000a8,0x000200f9,0x000000a1,0x000200f8,0x000000a1,0x0004003d, + 0x00000008,0x000000ec,0x0000008f,0x0004003d,0x00000008,0x000000ed,0x000000a2,0x000500c5, + 0x00000008,0x000000ee,0x000000ec,0x000000ed,0x000200fe,0x000000ee,0x00010038,0x00050036, + 0x00000002,0x0000001f,0x00000000,0x0000001b,0x00030037,0x0000000d,0x0000001c,0x00030037, + 0x0000000d,0x0000001d,0x00030037,0x00000007,0x0000001e,0x000200f8,0x00000020,0x0004003b, + 0x0000000d,0x000000f1,0x00000007,0x0004003b,0x00000007,0x00000118,0x00000007,0x0004003b, + 0x0000000d,0x0000011b,0x00000007,0x0004003b,0x00000007,0x0000012f,0x00000007,0x0004003b, + 0x0000000d,0x00000132,0x00000007,0x0004003d,0x00000008,0x000000f2,0x0000001c,0x00050041, + 0x000000f7,0x000000f8,0x000000f5,0x000000f6,0x0004003d,0x00000008,0x000000f9,0x000000f8, + 0x00050084,0x00000008,0x000000fa,0x000000f2,0x000000f9,0x0004003d,0x00000008,0x000000fb, + 0x0000001d,0x00050080,0x00000008,0x000000fc,0x000000fa,0x000000fb,0x0003003e,0x000000f1, + 0x000000fc,0x000300f7,0x00000102,0x00000000,0x000400fa,0x00000100,0x00000101,0x0000010d, + 0x000200f8,0x00000101,0x0004003d,0x00000008,0x00000108,0x000000f1,0x0004003d,0x00000006, + 0x00000109,0x0000001e,0x00040073,0x00000021,0x0000010a,0x00000109,0x00060041,0x0000010b, + 0x0000010c,0x00000106,0x00000107,0x00000108,0x0003003e,0x0000010c,0x0000010a,0x000200f9, + 0x00000102,0x000200f8,0x0000010d,0x000300f7,0x00000111,0x00000000,0x000400fa,0x0000010f, + 0x00000110,0x00000120,0x000200f8,0x00000110,0x0004003d,0x00000008,0x00000117,0x000000f1, + 0x0004003d,0x00000006,0x00000119,0x0000001e,0x0003003e,0x00000118,0x00000119,0x00050039, + 0x00000008,0x0000011a,0x0000000b,0x00000118,0x0003003e,0x0000011b,0x0000011a,0x00050039, + 0x00000008,0x0000011c,0x00000019,0x0000011b,0x00040071,0x00000112,0x0000011d,0x0000011c, + 0x00060041,0x0000011e,0x0000011f,0x00000116,0x00000107,0x00000117,0x0003003e,0x0000011f, + 0x0000011d,0x000200f9,0x00000111,0x000200f8,0x00000120,0x0004003d,0x00000008,0x00000125, + 0x000000f1,0x0004003d,0x00000006,0x00000126,0x0000001e,0x00060041,0x00000127,0x00000128, + 0x00000124,0x00000107,0x00000125,0x0003003e,0x00000128,0x00000126,0x000200f9,0x00000111, + 0x000200f8,0x00000111,0x000200f9,0x00000102,0x000200f8,0x00000102,0x000300f7,0x0000012d, + 0x00000000,0x000400fa,0x0000012b,0x0000012c,0x0000012d,0x000200f8,0x0000012c,0x0004003d, + 0x00000008,0x0000012e,0x000000f1,0x0004003d,0x00000006,0x00000130,0x0000001e,0x0003003e, + 0x0000012f,0x00000130,0x00050039,0x00000008,0x00000131,0x0000000b,0x0000012f,0x0003003e, + 0x00000132,0x00000131,0x00050039,0x00000008,0x00000133,0x00000019,0x00000132,0x00040071, + 0x00000112,0x00000134,0x00000133,0x00060041,0x0000011e,0x00000135,0x00000116,0x00000107, + 0x0000012e,0x0003003e,0x00000135,0x00000134,0x000200f9,0x0000012d,0x000200f8,0x0000012d, + 0x000100fd,0x00010038,0x00050036,0x00000023,0x00000026,0x00000000,0x00000024,0x00030037, + 0x00000022,0x00000025,0x000200f8,0x00000027,0x0004003d,0x00000021,0x00000136,0x00000025, + 0x0006000c,0x00000021,0x00000137,0x00000001,0x00000004,0x00000136,0x0004007c,0x00000008, + 0x00000138,0x00000137,0x000500c2,0x00000008,0x0000013a,0x00000138,0x00000139,0x000500c7, + 0x00000008,0x0000013c,0x0000013a,0x0000013b,0x0004007c,0x00000023,0x0000013d,0x0000013c, + 0x00050082,0x00000023,0x0000013f,0x0000013d,0x0000013e,0x0007000c,0x00000023,0x00000141, + 0x00000001,0x0000002a,0x0000013f,0x00000140,0x000200fe,0x00000141,0x00010038,0x00050036, + 0x00000008,0x0000002a,0x00000000,0x00000012,0x00030037,0x0000000d,0x00000028,0x00030037, + 0x0000000d,0x00000029,0x000200f8,0x0000002b,0x0004003b,0x0000000d,0x0000014f,0x00000007, + 0x0004003b,0x0000000d,0x00000153,0x00000007,0x0004003b,0x0000000d,0x00000159,0x00000007, + 0x0004003d,0x00000008,0x00000144,0x00000029,0x000500aa,0x0000005c,0x00000145,0x00000144, + 0x0000006a,0x000300f7,0x00000147,0x00000000,0x000400fa,0x00000145,0x00000146,0x00000147, + 0x000200f8,0x00000146,0x0004003d,0x00000008,0x00000148,0x00000028,0x000200fe,0x00000148, + 0x000200f8,0x00000147,0x0004003d,0x00000008,0x0000014a,0x00000029,0x000500ac,0x0000005c, + 0x0000014b,0x0000014a,0x00000099,0x000300f7,0x0000014d,0x00000000,0x000400fa,0x0000014b, + 0x0000014c,0x0000014d,0x000200f8,0x0000014c,0x000200fe,0x0000006a,0x000200f8,0x0000014d, + 0x0004003d,0x00000008,0x00000150,0x00000028,0x0004003d,0x00000008,0x00000151,0x00000029, + 0x000500c2,0x00000008,0x00000152,0x00000150,0x00000151,0x0003003e,0x0000014f,0x00000152, + 0x0004003d,0x00000008,0x00000154,0x00000028,0x0004003d,0x00000008,0x00000155,0x00000029, + 0x000500c4,0x00000008,0x00000156,0x0000004f,0x00000155,0x00050082,0x00000008,0x00000157, + 0x00000156,0x0000004f,0x000500c7,0x00000008,0x00000158,0x00000154,0x00000157,0x0003003e, + 0x00000153,0x00000158,0x0004003d,0x00000008,0x0000015a,0x00000029,0x00050082,0x00000008, + 0x0000015b,0x0000015a,0x0000004f,0x000500c4,0x00000008,0x0000015c,0x0000004f,0x0000015b, + 0x0003003e,0x00000159,0x0000015c,0x0004003d,0x00000008,0x0000015d,0x0000014f,0x0004003d, + 0x00000008,0x0000015e,0x00000153,0x0004003d,0x00000008,0x0000015f,0x00000159,0x000500ac, + 0x0000005c,0x00000160,0x0000015e,0x0000015f,0x000400a8,0x0000005c,0x00000161,0x00000160, + 0x000300f7,0x00000163,0x00000000,0x000400fa,0x00000161,0x00000162,0x00000163,0x000200f8, + 0x00000162,0x0004003d,0x00000008,0x00000164,0x00000153,0x0004003d,0x00000008,0x00000165, + 0x00000159,0x000500aa,0x0000005c,0x00000166,0x00000164,0x00000165,0x000300f7,0x00000168, + 0x00000000,0x000400fa,0x00000166,0x00000167,0x00000168,0x000200f8,0x00000167,0x0004003d, + 0x00000008,0x00000169,0x0000014f,0x000500c7,0x00000008,0x0000016a,0x00000169,0x0000004f, + 0x000500ab,0x0000005c,0x0000016b,0x0000016a,0x0000006a,0x000200f9,0x00000168,0x000200f8, + 0x00000168,0x000700f5,0x0000005c,0x0000016c,0x00000166,0x00000162,0x0000016b,0x00000167, + 0x000200f9,0x00000163,0x000200f8,0x00000163,0x000700f5,0x0000005c,0x0000016d,0x00000160, + 0x0000014d,0x0000016c,0x00000168,0x000600a9,0x00000008,0x0000016e,0x0000016d,0x0000004f, + 0x0000006a,0x00050080,0x00000008,0x0000016f,0x0000015d,0x0000016e,0x000200fe,0x0000016f, + 0x00010038,0x00050036,0x00000021,0x00000032,0x00000000,0x0000002f,0x00030037,0x0000002d, + 0x00000030,0x00030037,0x0000002e,0x00000031,0x000200f8,0x00000033,0x0004003b,0x00000072, + 0x00000179,0x00000007,0x0004003b,0x0000000d,0x0000017c,0x00000007,0x0004003b,0x0000002d, + 0x0000017e,0x00000007,0x0004003b,0x0000002e,0x00000188,0x00000007,0x0004003b,0x0000002e, + 0x0000018b,0x00000007,0x0004003b,0x0000000d,0x0000018f,0x00000007,0x0004003b,0x0000000d, + 0x00000196,0x00000007,0x0004003b,0x0000000d,0x0000019a,0x00000007,0x0004003b,0x0000000d, + 0x000001a0,0x00000007,0x0004003b,0x0000000d,0x000001a2,0x00000007,0x0004003b,0x0000002e, + 0x000001c6,0x00000007,0x0004003b,0x0000000d,0x000001ca,0x00000007,0x0004003b,0x0000000d, + 0x000001cd,0x00000007,0x0004003b,0x0000000d,0x000001d8,0x00000007,0x0004003b,0x0000000d, + 0x000001da,0x00000007,0x0004003b,0x0000000d,0x000001e1,0x00000007,0x0004003d,0x0000002c, + 0x00000172,0x00000030,0x000500aa,0x0000005c,0x00000174,0x00000172,0x00000173,0x000300f7, + 0x00000176,0x00000000,0x000400fa,0x00000174,0x00000175,0x00000176,0x000200f8,0x00000175, + 0x000200fe,0x00000177,0x000200f8,0x00000176,0x0004003d,0x0000002c,0x0000017a,0x00000030, + 0x000500b1,0x0000005c,0x0000017b,0x0000017a,0x00000173,0x0003003e,0x00000179,0x0000017b, + 0x0004003d,0x0000005c,0x0000017d,0x00000179,0x000300f7,0x00000180,0x00000000,0x000400fa, + 0x0000017d,0x0000017f,0x00000183,0x000200f8,0x0000017f,0x0004003d,0x0000002c,0x00000181, + 0x00000030,0x0004007e,0x0000002c,0x00000182,0x00000181,0x0003003e,0x0000017e,0x00000182, + 0x000200f9,0x00000180,0x000200f8,0x00000183,0x0004003d,0x0000002c,0x00000184,0x00000030, + 0x0003003e,0x0000017e,0x00000184,0x000200f9,0x00000180,0x000200f8,0x00000180,0x0004003d, + 0x0000002c,0x00000185,0x0000017e,0x00040072,0x00000023,0x00000186,0x00000185,0x0004007c, + 0x00000008,0x00000187,0x00000186,0x0003003e,0x0000017c,0x00000187,0x0004003d,0x00000008, + 0x00000189,0x0000017c,0x0006000c,0x00000023,0x0000018a,0x00000001,0x0000004b,0x00000189, + 0x0003003e,0x00000188,0x0000018a,0x0004003d,0x00000023,0x0000018c,0x00000188,0x0004003d, + 0x00000023,0x0000018d,0x00000031,0x00050080,0x00000023,0x0000018e,0x0000018c,0x0000018d, + 0x0003003e,0x0000018b,0x0000018e,0x0004003d,0x0000005c,0x00000190,0x00000179,0x000600a9, + 0x00000008,0x00000191,0x00000190,0x00000091,0x0000006a,0x0003003e,0x0000018f,0x00000191, + 0x0004003d,0x00000023,0x00000192,0x0000018b,0x000500af,0x0000005c,0x00000193,0x00000192, + 0x00000140,0x000300f7,0x00000195,0x00000000,0x000400fa,0x00000193,0x00000194,0x000001c5, + 0x000200f8,0x00000194,0x0004003d,0x00000023,0x00000197,0x00000188,0x000500ad,0x0000005c, + 0x00000199,0x00000197,0x00000198,0x000300f7,0x0000019c,0x00000000,0x000400fa,0x00000199, + 0x0000019b,0x000001a4,0x000200f8,0x0000019b,0x0004003d,0x00000023,0x0000019d,0x00000188, + 0x00050082,0x00000023,0x0000019e,0x0000019d,0x00000198,0x0004007c,0x00000008,0x0000019f, + 0x0000019e,0x0004003d,0x00000008,0x000001a1,0x0000017c,0x0003003e,0x000001a0,0x000001a1, + 0x0003003e,0x000001a2,0x0000019f,0x00060039,0x00000008,0x000001a3,0x0000002a,0x000001a0, + 0x000001a2,0x0003003e,0x0000019a,0x000001a3,0x000200f9,0x0000019c,0x000200f8,0x000001a4, + 0x0004003d,0x00000008,0x000001a5,0x0000017c,0x0004003d,0x00000023,0x000001a6,0x00000188, + 0x00050082,0x00000023,0x000001a7,0x00000198,0x000001a6,0x0004007c,0x00000008,0x000001a8, + 0x000001a7,0x000500c4,0x00000008,0x000001a9,0x000001a5,0x000001a8,0x0003003e,0x0000019a, + 0x000001a9,0x000200f9,0x0000019c,0x000200f8,0x0000019c,0x0004003d,0x00000008,0x000001aa, + 0x0000019a,0x0003003e,0x00000196,0x000001aa,0x0004003d,0x00000008,0x000001ab,0x00000196, + 0x000500ae,0x0000005c,0x000001ad,0x000001ab,0x000001ac,0x000300f7,0x000001af,0x00000000, + 0x000400fa,0x000001ad,0x000001ae,0x000001af,0x000200f8,0x000001ae,0x0003003e,0x00000196, + 0x000000b1,0x0004003d,0x00000023,0x000001b1,0x0000018b,0x00050080,0x00000023,0x000001b2, + 0x000001b1,0x000001b0,0x0003003e,0x0000018b,0x000001b2,0x000200f9,0x000001af,0x000200f8, + 0x000001af,0x0004003d,0x00000023,0x000001b3,0x0000018b,0x000500af,0x0000005c,0x000001b5, + 0x000001b3,0x000001b4,0x000300f7,0x000001b7,0x00000000,0x000400fa,0x000001b5,0x000001b6, + 0x000001ba,0x000200f8,0x000001b6,0x0004003d,0x00000008,0x000001b8,0x0000018f,0x000500c5, + 0x00000008,0x000001b9,0x000001b8,0x00000075,0x0003003e,0x0000018f,0x000001b9,0x000200f9, + 0x000001b7,0x000200f8,0x000001ba,0x0004003d,0x00000023,0x000001bb,0x0000018b,0x00050080, + 0x00000023,0x000001bd,0x000001bb,0x000001bc,0x0004007c,0x00000008,0x000001be,0x000001bd, + 0x000500c4,0x00000008,0x000001bf,0x000001be,0x00000097,0x0004003d,0x00000008,0x000001c0, + 0x00000196,0x00050082,0x00000008,0x000001c1,0x000001c0,0x000000b1,0x000500c5,0x00000008, + 0x000001c2,0x000001bf,0x000001c1,0x0004003d,0x00000008,0x000001c3,0x0000018f,0x000500c5, + 0x00000008,0x000001c4,0x000001c3,0x000001c2,0x0003003e,0x0000018f,0x000001c4,0x000200f9, + 0x000001b7,0x000200f8,0x000001b7,0x000200f9,0x00000195,0x000200f8,0x000001c5,0x0004003d, + 0x00000023,0x000001c7,0x00000031,0x00050080,0x00000023,0x000001c9,0x000001c7,0x000001c8, + 0x0003003e,0x000001c6,0x000001c9,0x0004003d,0x00000023,0x000001cb,0x000001c6,0x000500af, + 0x0000005c,0x000001cc,0x000001cb,0x00000107,0x000300f7,0x000001cf,0x00000000,0x000400fa, + 0x000001cc,0x000001ce,0x000001d4,0x000200f8,0x000001ce,0x0004003d,0x00000008,0x000001d0, + 0x0000017c,0x0004003d,0x00000023,0x000001d1,0x000001c6,0x0004007c,0x00000008,0x000001d2, + 0x000001d1,0x000500c4,0x00000008,0x000001d3,0x000001d0,0x000001d2,0x0003003e,0x000001cd, + 0x000001d3,0x000200f9,0x000001cf,0x000200f8,0x000001d4,0x0004003d,0x00000023,0x000001d5, + 0x000001c6,0x0004007e,0x00000023,0x000001d6,0x000001d5,0x0004007c,0x00000008,0x000001d7, + 0x000001d6,0x0004003d,0x00000008,0x000001d9,0x0000017c,0x0003003e,0x000001d8,0x000001d9, + 0x0003003e,0x000001da,0x000001d7,0x00060039,0x00000008,0x000001db,0x0000002a,0x000001d8, + 0x000001da,0x0003003e,0x000001cd,0x000001db,0x000200f9,0x000001cf,0x000200f8,0x000001cf, + 0x0004003d,0x00000008,0x000001dc,0x000001cd,0x0003003e,0x000001ca,0x000001dc,0x0004003d, + 0x00000008,0x000001dd,0x000001ca,0x0007000c,0x00000008,0x000001de,0x00000001,0x00000026, + 0x000001dd,0x000000b1,0x0004003d,0x00000008,0x000001df,0x0000018f,0x000500c5,0x00000008, + 0x000001e0,0x000001df,0x000001de,0x0003003e,0x0000018f,0x000001e0,0x000200f9,0x00000195, + 0x000200f8,0x00000195,0x0004003d,0x00000008,0x000001e2,0x0000018f,0x0003003e,0x000001e1, + 0x000001e2,0x00050039,0x00000006,0x000001e3,0x00000010,0x000001e1,0x00040073,0x00000021, + 0x000001e4,0x000001e3,0x000200fe,0x000001e4,0x00010038,0x00050036,0x00000021,0x0000003b, + 0x00000000,0x00000037,0x00030037,0x00000022,0x00000038,0x00030037,0x00000036,0x00000039, + 0x00030037,0x00000036,0x0000003a,0x000200f8,0x0000003c,0x0004003b,0x0000002e,0x000001e7, + 0x00000007,0x0004003b,0x00000022,0x000001ed,0x00000007,0x0004003b,0x0000000d,0x000001f0, + 0x00000007,0x0004003b,0x00000022,0x00000207,0x00000007,0x0004003b,0x00000022,0x0000020c, + 0x00000007,0x0004003b,0x0000002d,0x00000214,0x00000007,0x0004003b,0x0000002e,0x00000219, + 0x00000007,0x0004003b,0x00000022,0x0000021a,0x00000007,0x0004003b,0x00000022,0x0000021d, + 0x00000007,0x0004003b,0x0000000d,0x0000022d,0x00000007,0x0004003b,0x0000002e,0x00000242, + 0x00000007,0x0004003b,0x00000022,0x00000244,0x00000007,0x0004003b,0x0000002e,0x00000248, + 0x00000007,0x0004003b,0x00000022,0x0000024a,0x00000007,0x0004003b,0x00000022,0x0000024e, + 0x00000007,0x0004003b,0x0000002d,0x0000026c,0x00000007,0x0004003b,0x0000002e,0x0000026e, + 0x00000007,0x0003003e,0x000001e7,0x000001e8,0x0004003d,0x00000021,0x000001e9,0x00000038, + 0x000500b7,0x0000005c,0x000001ea,0x000001e9,0x00000177,0x000300f7,0x000001ec,0x00000000, + 0x000400fa,0x000001ea,0x000001eb,0x000001ec,0x000200f8,0x000001eb,0x0004003d,0x00000021, + 0x000001ee,0x00000038,0x0003003e,0x000001ed,0x000001ee,0x00050039,0x00000023,0x000001ef, + 0x00000026,0x000001ed,0x0003003e,0x000001e7,0x000001ef,0x000200f9,0x000001ec,0x000200f8, + 0x000001ec,0x0003003e,0x000001f0,0x0000006a,0x000200f9,0x000001f1,0x000200f8,0x000001f1, + 0x000400f6,0x000001f3,0x000001f4,0x00000000,0x000200f9,0x000001f5,0x000200f8,0x000001f5, + 0x0004003d,0x00000008,0x000001f6,0x000001f0,0x000500b0,0x0000005c,0x000001f7,0x000001f6, + 0x00000034,0x000400fa,0x000001f7,0x000001f2,0x000001f3,0x000200f8,0x000001f2,0x0004003d, + 0x00000008,0x000001f8,0x000001f0,0x00050041,0x00000022,0x000001f9,0x00000039,0x000001f8, + 0x0004003d,0x00000021,0x000001fa,0x000001f9,0x000500b7,0x0000005c,0x000001fb,0x000001fa, + 0x00000177,0x000300f7,0x000001fd,0x00000000,0x000400fa,0x000001fb,0x000001fc,0x000001fd, + 0x000200f8,0x000001fc,0x0004003d,0x00000008,0x000001fe,0x000001f0,0x00050041,0x00000022, + 0x000001ff,0x0000003a,0x000001fe,0x0004003d,0x00000021,0x00000200,0x000001ff,0x000500b7, + 0x0000005c,0x00000201,0x00000200,0x00000177,0x000200f9,0x000001fd,0x000200f8,0x000001fd, + 0x000700f5,0x0000005c,0x00000202,0x000001fb,0x000001f2,0x00000201,0x000001fc,0x000300f7, + 0x00000204,0x00000000,0x000400fa,0x00000202,0x00000203,0x00000204,0x000200f8,0x00000203, + 0x0004003d,0x00000023,0x00000205,0x000001e7,0x0004003d,0x00000008,0x00000206,0x000001f0, + 0x00050041,0x00000022,0x00000208,0x00000039,0x00000206,0x0004003d,0x00000021,0x00000209, + 0x00000208,0x0003003e,0x00000207,0x00000209,0x00050039,0x00000023,0x0000020a,0x00000026, + 0x00000207,0x0004003d,0x00000008,0x0000020b,0x000001f0,0x00050041,0x00000022,0x0000020d, + 0x0000003a,0x0000020b,0x0004003d,0x00000021,0x0000020e,0x0000020d,0x0003003e,0x0000020c, + 0x0000020e,0x00050039,0x00000023,0x0000020f,0x00000026,0x0000020c,0x00050080,0x00000023, + 0x00000210,0x0000020a,0x0000020f,0x0007000c,0x00000023,0x00000211,0x00000001,0x0000002a, + 0x00000205,0x00000210,0x0003003e,0x000001e7,0x00000211,0x000200f9,0x00000204,0x000200f8, + 0x00000204,0x000200f9,0x000001f4,0x000200f8,0x000001f4,0x0004003d,0x00000008,0x00000212, + 0x000001f0,0x00050080,0x00000008,0x00000213,0x00000212,0x000001b0,0x0003003e,0x000001f0, + 0x00000213,0x000200f9,0x000001f1,0x000200f8,0x000001f3,0x0003003e,0x00000214,0x00000173, + 0x0004003d,0x00000021,0x00000215,0x00000038,0x000500b7,0x0000005c,0x00000216,0x00000215, + 0x00000177,0x000300f7,0x00000218,0x00000000,0x000400fa,0x00000216,0x00000217,0x00000218, + 0x000200f8,0x00000217,0x0004003d,0x00000021,0x0000021b,0x00000038,0x0003003e,0x0000021a, + 0x0000021b,0x00050039,0x00000023,0x0000021c,0x00000026,0x0000021a,0x0003003e,0x00000219, + 0x0000021c,0x0004003d,0x00000021,0x0000021e,0x00000038,0x0004003d,0x00000023,0x0000021f, + 0x00000219,0x0004007e,0x00000023,0x00000220,0x0000021f,0x0007000c,0x00000021,0x00000221, + 0x00000001,0x00000035,0x0000021e,0x00000220,0x0004003d,0x00000023,0x00000222,0x00000219, + 0x0004003d,0x00000023,0x00000223,0x000001e7,0x00050082,0x00000023,0x00000224,0x00000222, + 0x00000223,0x00050080,0x00000023,0x00000226,0x00000224,0x00000225,0x0007000c,0x00000021, + 0x00000227,0x00000001,0x00000035,0x00000221,0x00000226,0x0003003e,0x0000021d,0x00000227, + 0x0004003d,0x00000021,0x00000228,0x0000021d,0x0006000c,0x00000021,0x00000229,0x00000001, + 0x00000003,0x00000228,0x0004006e,0x0000002c,0x0000022a,0x00000229,0x0004003d,0x0000002c, + 0x0000022b,0x00000214,0x00050080,0x0000002c,0x0000022c,0x0000022b,0x0000022a,0x0003003e, + 0x00000214,0x0000022c,0x000200f9,0x00000218,0x000200f8,0x00000218,0x0003003e,0x0000022d, + 0x0000006a,0x000200f9,0x0000022e,0x000200f8,0x0000022e,0x000400f6,0x00000230,0x00000231, + 0x00000000,0x000200f9,0x00000232,0x000200f8,0x00000232,0x0004003d,0x00000008,0x00000233, + 0x0000022d,0x000500b0,0x0000005c,0x00000234,0x00000233,0x00000034,0x000400fa,0x00000234, + 0x0000022f,0x00000230,0x000200f8,0x0000022f,0x0004003d,0x00000008,0x00000235,0x0000022d, + 0x00050041,0x00000022,0x00000236,0x00000039,0x00000235,0x0004003d,0x00000021,0x00000237, + 0x00000236,0x000500b7,0x0000005c,0x00000238,0x00000237,0x00000177,0x000300f7,0x0000023a, + 0x00000000,0x000400fa,0x00000238,0x00000239,0x0000023a,0x000200f8,0x00000239,0x0004003d, + 0x00000008,0x0000023b,0x0000022d,0x00050041,0x00000022,0x0000023c,0x0000003a,0x0000023b, + 0x0004003d,0x00000021,0x0000023d,0x0000023c,0x000500b7,0x0000005c,0x0000023e,0x0000023d, + 0x00000177,0x000200f9,0x0000023a,0x000200f8,0x0000023a,0x000700f5,0x0000005c,0x0000023f, + 0x00000238,0x0000022f,0x0000023e,0x00000239,0x000300f7,0x00000241,0x00000000,0x000400fa, + 0x0000023f,0x00000240,0x00000241,0x000200f8,0x00000240,0x0004003d,0x00000008,0x00000243, + 0x0000022d,0x00050041,0x00000022,0x00000245,0x00000039,0x00000243,0x0004003d,0x00000021, + 0x00000246,0x00000245,0x0003003e,0x00000244,0x00000246,0x00050039,0x00000023,0x00000247, + 0x00000026,0x00000244,0x0003003e,0x00000242,0x00000247,0x0004003d,0x00000008,0x00000249, + 0x0000022d,0x00050041,0x00000022,0x0000024b,0x0000003a,0x00000249,0x0004003d,0x00000021, + 0x0000024c,0x0000024b,0x0003003e,0x0000024a,0x0000024c,0x00050039,0x00000023,0x0000024d, + 0x00000026,0x0000024a,0x0003003e,0x00000248,0x0000024d,0x0004003d,0x00000008,0x0000024f, + 0x0000022d,0x00050041,0x00000022,0x00000250,0x00000039,0x0000024f,0x0004003d,0x00000021, + 0x00000251,0x00000250,0x0004003d,0x00000023,0x00000252,0x00000242,0x0004007e,0x00000023, + 0x00000253,0x00000252,0x0007000c,0x00000021,0x00000254,0x00000001,0x00000035,0x00000251, + 0x00000253,0x0004003d,0x00000008,0x00000255,0x0000022d,0x00050041,0x00000022,0x00000256, + 0x0000003a,0x00000255,0x0004003d,0x00000021,0x00000257,0x00000256,0x0004003d,0x00000023, + 0x00000258,0x00000248,0x0004007e,0x00000023,0x00000259,0x00000258,0x0007000c,0x00000021, + 0x0000025a,0x00000001,0x00000035,0x00000257,0x00000259,0x00050085,0x00000021,0x0000025b, + 0x00000254,0x0000025a,0x0003003e,0x0000024e,0x0000025b,0x0004003d,0x00000021,0x0000025c, + 0x0000024e,0x0004003d,0x00000023,0x0000025d,0x00000242,0x0004003d,0x00000023,0x0000025e, + 0x00000248,0x00050080,0x00000023,0x0000025f,0x0000025d,0x0000025e,0x0004003d,0x00000023, + 0x00000260,0x000001e7,0x00050082,0x00000023,0x00000261,0x0000025f,0x00000260,0x00050080, + 0x00000023,0x00000262,0x00000261,0x00000225,0x0007000c,0x00000021,0x00000263,0x00000001, + 0x00000035,0x0000025c,0x00000262,0x0006000c,0x00000021,0x00000264,0x00000001,0x00000003, + 0x00000263,0x0004006e,0x0000002c,0x00000265,0x00000264,0x0004003d,0x0000002c,0x00000266, + 0x00000214,0x00050080,0x0000002c,0x00000267,0x00000266,0x00000265,0x0003003e,0x00000214, + 0x00000267,0x000200f9,0x00000241,0x000200f8,0x00000241,0x000200f9,0x00000231,0x000200f8, + 0x00000231,0x0004003d,0x00000008,0x00000268,0x0000022d,0x00050080,0x00000008,0x00000269, + 0x00000268,0x000001b0,0x0003003e,0x0000022d,0x00000269,0x000200f9,0x0000022e,0x000200f8, + 0x00000230,0x0004003d,0x00000023,0x0000026a,0x000001e7,0x00050082,0x00000023,0x0000026b, + 0x0000026a,0x00000225,0x0004003d,0x0000002c,0x0000026d,0x00000214,0x0003003e,0x0000026c, + 0x0000026d,0x0003003e,0x0000026e,0x0000026b,0x00060039,0x00000021,0x0000026f,0x00000032, + 0x0000026c,0x0000026e,0x000200fe,0x0000026f,0x00010038, +}; +inline constexpr uint32_t k_e4m3_k16_f32__window_attend[] = { + 0x07230203,0x00010600,0x0008000b,0x00000512,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x00000027,0x00020011,0x0000003d,0x00020011, + 0x00001074,0x00020011,0x00001075,0x00020011,0x00001151,0x00020011,0x00001160,0x00020011, + 0x000014e1,0x00020011,0x00001786,0x0005000a,0x5f565053,0x5f545845,0x616f6c66,0x00003874, + 0x0008000a,0x5f565053,0x5f52484b,0x706f6f63,0x74617265,0x5f657669,0x7274616d,0x00007869, + 0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000, + 0x00000003,0x0013000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x0000020e,0x000002a1, + 0x000002a6,0x000002b3,0x00000314,0x00000329,0x00000374,0x0000037a,0x00000387,0x0000039e, + 0x00000400,0x0000043d,0x000004ae,0x00000504,0x00060010,0x00000004,0x00000011,0x00000080, + 0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc,0x00090004,0x455f4c47,0x635f5458, + 0x72746e6f,0x665f6c6f,0x5f776f6c,0x72747461,0x74756269,0x00007365,0x00060004,0x455f4c47, + 0x665f5458,0x74616f6c,0x6d34655f,0x00000033,0x00080004,0x455f4c47,0x735f5458,0x65646168, + 0x36315f72,0x5f746962,0x726f7473,0x00656761,0x00080004,0x455f4c47,0x735f5458,0x65646168, + 0x62385f72,0x735f7469,0x61726f74,0x00006567,0x000b0004,0x455f4c47,0x735f5458,0x65646168, + 0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004, + 0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365, + 0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572, + 0x00657669,0x00080004,0x4b5f4c47,0x635f5248,0x65706f6f,0x69746172,0x6d5f6576,0x69727461, + 0x00000078,0x00090004,0x4b5f4c47,0x6d5f5248,0x726f6d65,0x63735f79,0x5f65706f,0x616d6573, + 0x6369746e,0x00000073,0x00090004,0x4b5f4c47,0x735f5248,0x65646168,0x75735f72,0x6f726762, + 0x625f7075,0x63697361,0x00000000,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005, + 0x0000000a,0x6e756f72,0x36314664,0x3b316628,0x00000000,0x00040005,0x00000009,0x756c6176, + 0x00000065,0x00060005,0x00000011,0x42363166,0x28737469,0x31363166,0x0000003b,0x00040005, + 0x00000010,0x756c6176,0x00000065,0x00060005,0x00000016,0x46363166,0x426d6f72,0x28737469, + 0x003b3175,0x00040005,0x00000015,0x73746962,0x00000000,0x00060005,0x0000001b,0x66696873, + 0x656e5274,0x3b317528,0x003b3175,0x00040005,0x00000019,0x756c6176,0x00000065,0x00040005, + 0x0000001a,0x66696873,0x00000074,0x00080005,0x0000001f,0x336d3465,0x65646f43,0x6d6f7246, + 0x42363146,0x28737469,0x003b3175,0x00050005,0x0000001e,0x666c6168,0x73746942,0x00000000, + 0x00060005,0x00000024,0x7246706f,0x6f436d6f,0x75286564,0x00003b31,0x00040005,0x00000023, + 0x65646f63,0x00000000,0x00080005,0x00000028,0x666c6168,0x7064694d,0x746e696f,0x766f6241, + 0x31662865,0x003b3136,0x00030005,0x00000027,0x00000068,0x00080005,0x0000002b,0x666c6168, + 0x7064694d,0x746e696f,0x6f6c6542,0x31662877,0x003b3136,0x00030005,0x0000002a,0x00000068, + 0x00060005,0x0000002f,0x666c6168,0x766f6241,0x31662865,0x003b3136,0x00030005,0x0000002e, + 0x00000068,0x00060005,0x00000032,0x666c6168,0x6f6c6542,0x31662877,0x003b3136,0x00030005, + 0x00000031,0x00000068,0x00080005,0x00000035,0x69636572,0x636f7270,0x61486c61,0x6628666c, + 0x3b313631,0x00000000,0x00030005,0x00000034,0x00000078,0x00080005,0x00000038,0x65766e69, + 0x54657372,0x64656c69,0x656b6f54,0x3175286e,0x0000003b,0x00040005,0x00000037,0x656b6f74, + 0x0000006e,0x00060005,0x0000003b,0x57707865,0x68676965,0x31662874,0x003b3136,0x00040005, + 0x0000003a,0x726f6373,0x00000065,0x00080005,0x00000041,0x74666f73,0x5078616d,0x28726961, + 0x753b3175,0x31753b31,0x0000003b,0x00030005,0x0000003e,0x00776f72,0x00040005,0x0000003f, + 0x72696170,0x00000000,0x00040005,0x00000040,0x69726170,0x00007974,0x00060005,0x00000044, + 0x74666f73,0x5378616d,0x75286d75,0x00003b31,0x00030005,0x00000043,0x00776f72,0x00040005, + 0x00000046,0x73746962,0x00000000,0x00040005,0x00000049,0x6e676973,0x00000000,0x00050005, + 0x0000004d,0x6e67616d,0x64757469,0x00000065,0x00040005,0x00000067,0x6c616373,0x00006465, + 0x00030005,0x00000078,0x0062736c,0x00040005,0x0000007e,0x6e756f72,0x00646564,0x00050005, + 0x00000099,0x746f7571,0x746e6569,0x00000000,0x00060005,0x0000009d,0x616d6572,0x65646e69, + 0x73614d72,0x0000006b,0x00050005,0x000000a1,0x616d6572,0x65646e69,0x00000072,0x00040005, + 0x000000a5,0x666c6168,0x00796177,0x00040005,0x000000c0,0x614e7369,0x0000006e,0x00050005, + 0x000000dc,0x6167656e,0x65766974,0x00000000,0x00050005,0x000000e2,0x6f707865,0x746e656e, + 0x00000000,0x00050005,0x000000e8,0x746e616d,0x61737369,0x00000000,0x00040005,0x000000ef, + 0x65646f63,0x00000000,0x00050005,0x000000f6,0x6e676973,0x63696669,0x00646e61,0x00040005, + 0x00000102,0x66696873,0x00000074,0x00040005,0x0000010e,0x61726170,0x0000006d,0x00040005, + 0x00000110,0x61726170,0x0000006d,0x00050005,0x00000115,0x78453465,0x656e6f70,0x0000746e, + 0x00050005,0x00000118,0x614d3465,0x7369746e,0x00006173,0x00040005,0x0000011a,0x61726170, + 0x0000006d,0x00040005,0x0000011c,0x61726170,0x0000006d,0x00040005,0x00000143,0x73746962, + 0x00000000,0x00040005,0x00000144,0x61726170,0x0000006d,0x00040005,0x00000154,0x61726170, + 0x0000006d,0x00040005,0x0000015e,0x61726170,0x0000006d,0x00040005,0x00000162,0x61726170, + 0x0000006d,0x00040005,0x00000169,0x61726170,0x0000006d,0x00040005,0x0000016d,0x61726170, + 0x0000006d,0x00040005,0x00000171,0x61726170,0x0000006d,0x00040005,0x00000175,0x61726170, + 0x0000006d,0x00030005,0x00000179,0x00006678,0x00030005,0x0000018d,0x00000068,0x00040005, + 0x00000190,0x61726170,0x0000006d,0x00030005,0x0000019f,0x00000069,0x00030005,0x000001a9, + 0x00007075,0x00040005,0x000001aa,0x61726170,0x0000006d,0x00040005,0x000001b3,0x61726170, + 0x0000006d,0x00040005,0x000001b6,0x6e776f64,0x00000000,0x00040005,0x000001b7,0x61726170, + 0x0000006d,0x00040005,0x000001c3,0x61726170,0x0000006d,0x00040005,0x000001cc,0x656c6974, + 0x00000000,0x00040005,0x000001d0,0x68746977,0x00006e69,0x00030005,0x000001d3,0x00000078, + 0x00030005,0x000001da,0x00000079,0x00050005,0x000001e8,0x69666661,0x3233656e,0x00000000, + 0x00040005,0x000001ee,0x69666661,0x0000656e,0x00040005,0x000001ef,0x61726170,0x0000006d, + 0x00040005,0x000001f6,0x73746962,0x00000000,0x00040005,0x000001f7,0x61726170,0x0000006d, + 0x00060005,0x000001fa,0x6f707865,0x746e656e,0x426c6169,0x00737469,0x00040005,0x00000200, + 0x61726170,0x0000006d,0x00030005,0x00000205,0x0079656b,0x00050005,0x0000020a,0x636f6c62, + 0x3130736b,0x00000000,0x00040005,0x0000020e,0x726f6373,0x00007365,0x00050005,0x0000021f, + 0x636f6c62,0x3332736b,0x00000000,0x00050005,0x00000230,0x636f6c62,0x3534736b,0x00000000, + 0x00050005,0x00000242,0x636f6c62,0x3736736b,0x00000000,0x00030005,0x00000254,0x00000061, + 0x00030005,0x00000258,0x00000062,0x00030005,0x00000261,0x00003065,0x00040005,0x00000262, + 0x61726170,0x0000006d,0x00040005,0x00000264,0x61726170,0x0000006d,0x00040005,0x00000265, + 0x61726170,0x0000006d,0x00040005,0x00000267,0x61726170,0x0000006d,0x00040005,0x00000269, + 0x61726170,0x0000006d,0x00040005,0x0000026a,0x61726170,0x0000006d,0x00030005,0x0000026d, + 0x00003165,0x00040005,0x0000026f,0x61726170,0x0000006d,0x00040005,0x00000271,0x61726170, + 0x0000006d,0x00040005,0x00000272,0x61726170,0x0000006d,0x00040005,0x00000275,0x6e657665, + 0x00000000,0x00040005,0x00000277,0x61726170,0x0000006d,0x00040005,0x00000279,0x61726170, + 0x0000006d,0x00040005,0x0000027a,0x61726170,0x0000006d,0x00030005,0x0000027d,0x0000306f, + 0x00040005,0x0000027e,0x61726170,0x0000006d,0x00040005,0x00000280,0x61726170,0x0000006d, + 0x00040005,0x00000281,0x61726170,0x0000006d,0x00040005,0x00000283,0x61726170,0x0000006d, + 0x00040005,0x00000285,0x61726170,0x0000006d,0x00040005,0x00000286,0x61726170,0x0000006d, + 0x00030005,0x00000289,0x0000316f,0x00040005,0x0000028b,0x61726170,0x0000006d,0x00040005, + 0x0000028d,0x61726170,0x0000006d,0x00040005,0x0000028e,0x61726170,0x0000006d,0x00030005, + 0x00000291,0x0064646f,0x00040005,0x00000293,0x61726170,0x0000006d,0x00040005,0x00000295, + 0x61726170,0x0000006d,0x00040005,0x00000296,0x61726170,0x0000006d,0x00040005,0x0000029e, + 0x65726874,0x00006461,0x00080005,0x000002a1,0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163, + 0x44496e6f,0x00000000,0x00040005,0x000002a5,0x64616568,0x00000000,0x00060005,0x000002a6, + 0x575f6c67,0x476b726f,0x70756f72,0x00004449,0x00040005,0x000002a9,0x646e6977,0x0000776f, + 0x00040005,0x000002b1,0x68737550,0x00000000,0x00050006,0x000002b1,0x00000000,0x74646977, + 0x00000068,0x00050006,0x000002b1,0x00000001,0x67696568,0x00007468,0x00060006,0x000002b1, + 0x00000002,0x6e616863,0x736c656e,0x00000000,0x00050006,0x000002b1,0x00000003,0x64616568, + 0x00000073,0x00050006,0x000002b1,0x00000004,0x66696873,0x00005874,0x00050006,0x000002b1, + 0x00000005,0x66696873,0x00005974,0x00060006,0x000002b1,0x00000006,0x646e6977,0x5873776f, + 0x00000000,0x00060006,0x000002b1,0x00000007,0x646e6977,0x6f43776f,0x00746e75,0x00030005, + 0x000002b3,0x00006370,0x00040005,0x000002bc,0x646e6977,0x0058776f,0x00040005,0x000002c9, + 0x646e6977,0x0059776f,0x00040005,0x000002d5,0x69727473,0x00336564,0x00050005,0x000002d9, + 0x64616568,0x65736142,0x00000000,0x00030005,0x000002dd,0x00000069,0x00040005,0x000002e7, + 0x656b6f74,0x0000006e,0x00050005,0x000002ea,0x706d6f63,0x6e656e6f,0x00000074,0x00030005, + 0x000002ed,0x00007871,0x00030005,0x000002f3,0x00007971,0x00030005,0x000002f9,0x00000071, + 0x00050005,0x00000312,0x6d726f4e,0x7a696c61,0x00006465,0x00040006,0x00000312,0x00000000, + 0x00766b71,0x00030005,0x00000314,0x00000000,0x00030005,0x00000329,0x00007371,0x00040005, + 0x0000032b,0x61726170,0x0000006d,0x00050005,0x00000330,0x4c79656b,0x6c61636f,0x00000000, + 0x00040005,0x00000331,0x61726170,0x0000006d,0x00030005,0x00000334,0x0000786b,0x00030005, + 0x0000033a,0x0000796b,0x00030005,0x00000340,0x0000006b,0x00030005,0x00000341,0x00000076, + 0x00040005,0x00000359,0x4279656b,0x00657361,0x00030005,0x00000374,0x0000736b,0x00040005, + 0x00000376,0x61726170,0x0000006d,0x00030005,0x0000037a,0x00007376,0x00040005,0x0000037c, + 0x61726170,0x0000006d,0x00050005,0x00000383,0x6f697270,0x73614272,0x00000065,0x00030005, + 0x00000386,0x00000074,0x00060005,0x00000387,0x535f6c67,0x72676275,0x4970756f,0x00000044, + 0x00030005,0x00000390,0x00003071,0x00030005,0x00000394,0x0000306b,0x00030005,0x0000039a, + 0x00005f68,0x00040005,0x0000039c,0x6f697250,0x00000072,0x00050006,0x0000039c,0x00000000, + 0x6f697270,0x00000072,0x00030005,0x0000039e,0x00000000,0x00030005,0x000003b0,0x00000063, + 0x00030005,0x000003b3,0x00005f73,0x00030005,0x000003be,0x00005f61,0x00030005,0x000003cd, + 0x00005f62,0x00030005,0x000003e0,0x00005f72,0x00040005,0x000003ec,0x61726170,0x0000006d, + 0x00030005,0x000003f3,0x00005f68,0x00060005,0x00000400,0x4e5f6c67,0x75536d75,0x6f726762, + 0x00737075,0x00030005,0x00000404,0x00000069,0x00040005,0x0000040f,0x61726170,0x0000006d, + 0x00030005,0x0000041a,0x00776f72,0x00040005,0x0000041c,0x61746f74,0x0000006c,0x00040005, + 0x0000041d,0x61726170,0x0000006d,0x00050005,0x00000420,0x69636572,0x636f7270,0x00006c61, + 0x00040005,0x00000421,0x61726170,0x0000006d,0x00030005,0x00000424,0x0079656b,0x00050005, + 0x0000042c,0x6d726f6e,0x7a696c61,0x00006465,0x00040005,0x00000435,0x65646f63,0x00000000, + 0x00040005,0x00000436,0x61726170,0x0000006d,0x00040005,0x00000439,0x61726170,0x0000006d, + 0x00040005,0x0000043d,0x67696577,0x00737468,0x00030005,0x00000447,0x00000074,0x00030005, + 0x00000450,0x00003071,0x00030005,0x00000454,0x00003063,0x00030005,0x00000458,0x00000063, + 0x00030005,0x0000045a,0x0000626b,0x00030005,0x00000462,0x00005f73,0x00030005,0x0000046a, + 0x00005f61,0x00030005,0x0000047b,0x00005f62,0x00030005,0x00000493,0x00005f72,0x00040005, + 0x0000049f,0x61726170,0x0000006d,0x00030005,0x000004a8,0x00005f68,0x00040005,0x000004ae, + 0x7074756f,0x00737475,0x00030005,0x000004bb,0x00000069,0x00040005,0x000004c4,0x656b6f74, + 0x0000006e,0x00050005,0x000004c7,0x706d6f63,0x6e656e6f,0x00000074,0x00030005,0x000004ca, + 0x00007871,0x00030005,0x000004d0,0x00007971,0x00040005,0x000004f0,0x65646e69,0x00000078, + 0x00050005,0x00000502,0x65747441,0x6465646e,0x00000000,0x00060006,0x00000502,0x00000000, + 0x65747461,0x6465646e,0x00000000,0x00030005,0x00000504,0x00000000,0x00040005,0x00000507, + 0x61726170,0x0000006d,0x00040005,0x0000050b,0x61726170,0x0000006d,0x00030047,0x0000018f, + 0x0000002a,0x00030047,0x000001ae,0x0000002a,0x00030047,0x000001bb,0x0000002a,0x00030047, + 0x0000021e,0x0000002a,0x00030047,0x0000022f,0x0000002a,0x00030047,0x00000241,0x0000002a, + 0x00030047,0x00000253,0x0000002a,0x00030047,0x00000257,0x0000002a,0x00030047,0x0000025b, + 0x0000002a,0x00030047,0x0000026c,0x0000002a,0x00030047,0x00000274,0x0000002a,0x00030047, + 0x0000027c,0x0000002a,0x00030047,0x00000288,0x0000002a,0x00030047,0x00000290,0x0000002a, + 0x00030047,0x00000298,0x0000002a,0x00040047,0x000002a1,0x0000000b,0x0000001b,0x00040047, + 0x000002a6,0x0000000b,0x0000001a,0x00030047,0x000002b1,0x00000002,0x00050048,0x000002b1, + 0x00000000,0x00000023,0x00000000,0x00050048,0x000002b1,0x00000001,0x00000023,0x00000004, + 0x00050048,0x000002b1,0x00000002,0x00000023,0x00000008,0x00050048,0x000002b1,0x00000003, + 0x00000023,0x0000000c,0x00050048,0x000002b1,0x00000004,0x00000023,0x00000010,0x00050048, + 0x000002b1,0x00000005,0x00000023,0x00000014,0x00050048,0x000002b1,0x00000006,0x00000023, + 0x00000018,0x00050048,0x000002b1,0x00000007,0x00000023,0x0000001c,0x00040047,0x00000311, + 0x00000006,0x00000001,0x00030047,0x00000312,0x00000002,0x00040048,0x00000312,0x00000000, + 0x00000018,0x00050048,0x00000312,0x00000000,0x00000023,0x00000000,0x00030047,0x00000314, + 0x00000018,0x00040047,0x00000314,0x00000021,0x00000000,0x00040047,0x00000314,0x00000022, + 0x00000000,0x00040047,0x00000387,0x0000000b,0x00000028,0x00040047,0x0000039b,0x00000006, + 0x00000002,0x00030047,0x0000039c,0x00000002,0x00040048,0x0000039c,0x00000000,0x00000018, + 0x00050048,0x0000039c,0x00000000,0x00000023,0x00000000,0x00030047,0x0000039e,0x00000018, + 0x00040047,0x0000039e,0x00000021,0x00000001,0x00040047,0x0000039e,0x00000022,0x00000000, + 0x00040047,0x00000400,0x0000000b,0x00000026,0x00030047,0x00000434,0x0000002a,0x00040047, + 0x00000501,0x00000006,0x00000001,0x00030047,0x00000502,0x00000002,0x00040048,0x00000502, + 0x00000000,0x00000019,0x00050048,0x00000502,0x00000000,0x00000023,0x00000000,0x00030047, + 0x00000504,0x00000019,0x00040047,0x00000504,0x00000021,0x00000005,0x00040047,0x00000504, + 0x00000022,0x00000000,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016, + 0x00000006,0x00000020,0x00040020,0x00000007,0x00000007,0x00000006,0x00040021,0x00000008, + 0x00000006,0x00000007,0x00030016,0x0000000c,0x00000010,0x00040020,0x0000000d,0x00000007, + 0x0000000c,0x00040015,0x0000000e,0x00000020,0x00000000,0x00040021,0x0000000f,0x0000000e, + 0x0000000d,0x00040020,0x00000013,0x00000007,0x0000000e,0x00040021,0x00000014,0x0000000c, + 0x00000013,0x00050021,0x00000018,0x0000000e,0x00000013,0x00000013,0x00040021,0x0000001d, + 0x0000000e,0x00000013,0x00040015,0x00000021,0x00000008,0x00000000,0x00040021,0x00000022, + 0x00000021,0x00000013,0x00040021,0x00000026,0x00000006,0x0000000d,0x00040021,0x0000002d, + 0x0000000c,0x0000000d,0x00060021,0x0000003d,0x0000000c,0x00000013,0x00000013,0x00000013, + 0x0004002b,0x0000000e,0x0000004b,0x80000000,0x0004002b,0x0000000e,0x0000004f,0x7fffffff, + 0x0004002b,0x0000000e,0x00000052,0x7f800000,0x00020014,0x00000053,0x0004002b,0x0000000e, + 0x0000005a,0x477ff000,0x0004002b,0x0000000e,0x00000063,0x38800000,0x0004002b,0x00000006, + 0x0000006a,0x4b800000,0x0004002b,0x00000006,0x00000071,0x33800000,0x0004002b,0x0000000e, + 0x0000007a,0x0000000d,0x0004002b,0x0000000e,0x0000007c,0x00000001,0x0004002b,0x0000000e, + 0x00000080,0x00000fff,0x0004002b,0x0000000e,0x00000084,0xffffe000,0x00040015,0x0000008d, + 0x00000010,0x00000000,0x0004002b,0x0000000e,0x00000093,0x0000ffff,0x0004002b,0x0000000e, + 0x000000b7,0x00000000,0x00040020,0x000000bf,0x00000007,0x00000053,0x0004002b,0x0000000e, + 0x000000c2,0x00007c00,0x0004002b,0x0000000e,0x000000c8,0x000003ff,0x0004002b,0x0000000e, + 0x000000d1,0x00007fff,0x0004002b,0x0000000e,0x000000d7,0x00000008,0x0004002b,0x0000000e, + 0x000000d9,0x00000080,0x0004002b,0x0000000e,0x000000de,0x00008000,0x0004002b,0x0000000e, + 0x000000e4,0x0000000a,0x0004002b,0x0000000e,0x000000e6,0x0000001f,0x0004002b,0x0000000e, + 0x000000f0,0x0000007e,0x0004002b,0x0000000e,0x000000fe,0x00000400,0x0004002b,0x0000000e, + 0x00000108,0x0000000f,0x0004002b,0x0000000e,0x0000010a,0x00000010,0x0004002b,0x0000000e, + 0x00000119,0x00000007,0x0004002b,0x0000000e,0x0000012c,0x00000006,0x0004002b,0x0000000e, + 0x00000135,0x00000003,0x0004002b,0x0000000e,0x00000148,0x00007bff,0x0004002b,0x00000006, + 0x0000014d,0x477ff000,0x0004002b,0x00000006,0x0000014f,0x3f000000,0x0004002b,0x00000006, + 0x0000017d,0x00000000,0x0004002b,0x00000006,0x00000188,0x3f800000,0x0004002b,0x0000000c, + 0x00000196,0x00000000,0x00040015,0x0000019d,0x00000020,0x00000001,0x00040020,0x0000019e, + 0x00000007,0x0000019d,0x0004002b,0x0000019d,0x000001a0,0x00000000,0x0004002b,0x0000019d, + 0x000001a7,0x00000002,0x0004002b,0x0000019d,0x000001c7,0x00000001,0x0004002b,0x0000000e, + 0x000001ce,0x00000004,0x0004002b,0x0000000e,0x000001df,0x00000002,0x0004002b,0x00000006, + 0x000001eb,0x3d380000,0x0004002b,0x00000006,0x000001ec,0x3fa68000,0x0004002b,0x0000000c, + 0x000001f3,0x00003c20,0x0004002b,0x0000000c,0x000001f4,0x00003e47,0x0004002b,0x0000000e, + 0x000001fc,0x00000005,0x0004002b,0x0000000e,0x0000020b,0x00001000,0x0004001c,0x0000020c, + 0x0000000c,0x0000020b,0x00040020,0x0000020d,0x00000004,0x0000020c,0x0004003b,0x0000020d, + 0x0000020e,0x00000004,0x0004002b,0x0000000e,0x00000210,0x00000040,0x00040020,0x00000214, + 0x00000004,0x0000000c,0x0004002b,0x0000000e,0x0000022b,0x00000018,0x0004002b,0x0000000e, + 0x00000235,0x00000020,0x0004002b,0x0000000e,0x0000023d,0x00000028,0x0004002b,0x0000000e, + 0x00000247,0x00000030,0x0004002b,0x0000000e,0x0000024f,0x00000038,0x00040017,0x0000029f, + 0x0000000e,0x00000003,0x00040020,0x000002a0,0x00000001,0x0000029f,0x0004003b,0x000002a0, + 0x000002a1,0x00000001,0x00040020,0x000002a2,0x00000001,0x0000000e,0x0004003b,0x000002a0, + 0x000002a6,0x00000001,0x000a001e,0x000002b1,0x0000000e,0x0000000e,0x0000000e,0x0000000e, + 0x0000000e,0x0000000e,0x0000000e,0x0000000e,0x00040020,0x000002b2,0x00000009,0x000002b1, + 0x0004003b,0x000002b2,0x000002b3,0x00000009,0x0004002b,0x0000019d,0x000002b4,0x00000007, + 0x00040020,0x000002b5,0x00000009,0x0000000e,0x0004002b,0x0000019d,0x000002be,0x00000006, + 0x0004002b,0x0000019d,0x000002c4,0x00000004,0x0004002b,0x0000019d,0x000002d0,0x00000005, + 0x0004002b,0x0000000e,0x000002db,0x00000060,0x0004002b,0x0000000e,0x000002e5,0x00000800, + 0x0003001d,0x00000311,0x00000021,0x0003001e,0x00000312,0x00000311,0x00040020,0x00000313, + 0x0000000c,0x00000312,0x0004003b,0x00000313,0x00000314,0x0000000c,0x00040020,0x00000323, + 0x0000000c,0x00000021,0x0004001c,0x00000327,0x00000021,0x000002e5,0x00040020,0x00000328, + 0x00000004,0x00000327,0x0004003b,0x00000328,0x00000329,0x00000004,0x00040020,0x0000032e, + 0x00000004,0x00000021,0x0004003b,0x00000328,0x00000374,0x00000004,0x0004003b,0x00000328, + 0x0000037a,0x00000004,0x0004002b,0x0000000e,0x00000382,0x00000108,0x0004003b,0x000002a2, + 0x00000387,0x00000001,0x00071168,0x00000398,0x0000000c,0x00000135,0x0000010a,0x0000010a, + 0x000001df,0x00040020,0x00000399,0x00000007,0x00000398,0x0003001d,0x0000039b,0x0000000c, + 0x0003001e,0x0000039c,0x0000039b,0x00040020,0x0000039d,0x0000000c,0x0000039c,0x0004003b, + 0x0000039d,0x0000039e,0x0000000c,0x00040020,0x000003a5,0x0000000c,0x0000000c,0x00071168, + 0x000003ae,0x00000006,0x00000135,0x0000010a,0x0000010a,0x000001df,0x00040020,0x000003af, + 0x00000007,0x000003ae,0x00040016,0x000003bb,0x00000008,0x00001076,0x00071168,0x000003bc, + 0x000003bb,0x00000135,0x0000010a,0x0000010a,0x000000b7,0x00040020,0x000003bd,0x00000007, + 0x000003bc,0x00071168,0x000003cb,0x000003bb,0x00000135,0x0000010a,0x0000010a,0x0000007c, + 0x00040020,0x000003cc,0x00000007,0x000003cb,0x0004003b,0x000002a2,0x00000400,0x00000001, + 0x0004001c,0x0000043b,0x00000021,0x0000020b,0x00040020,0x0000043c,0x00000004,0x0000043b, + 0x0004003b,0x0000043c,0x0000043d,0x00000004,0x0004002c,0x000003ae,0x00000459,0x0000017d, + 0x0004002b,0x0000000e,0x00000481,0x00000200,0x0004001c,0x000004ac,0x0000000c,0x000002e5, + 0x00040020,0x000004ad,0x00000004,0x000004ac,0x0004003b,0x000004ad,0x000004ae,0x00000004, + 0x0003001d,0x00000501,0x00000021,0x0003001e,0x00000502,0x00000501,0x00040020,0x00000503, + 0x0000000c,0x00000502,0x0004003b,0x00000503,0x00000504,0x0000000c,0x0006002c,0x0000029f, + 0x00000511,0x000000d9,0x0000007c,0x0000007c,0x00050036,0x00000002,0x00000004,0x00000000, + 0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000013,0x0000029e,0x00000007,0x0004003b, + 0x00000013,0x000002a5,0x00000007,0x0004003b,0x00000013,0x000002a9,0x00000007,0x0004003b, + 0x0000019e,0x000002bc,0x00000007,0x0004003b,0x0000019e,0x000002c9,0x00000007,0x0004003b, + 0x00000013,0x000002d5,0x00000007,0x0004003b,0x00000013,0x000002d9,0x00000007,0x0004003b, + 0x00000013,0x000002dd,0x00000007,0x0004003b,0x00000013,0x000002e7,0x00000007,0x0004003b, + 0x00000013,0x000002ea,0x00000007,0x0004003b,0x0000019e,0x000002ed,0x00000007,0x0004003b, + 0x0000019e,0x000002f3,0x00000007,0x0004003b,0x00000013,0x000002f9,0x00000007,0x0004003b, + 0x00000013,0x0000032b,0x00000007,0x0004003b,0x00000013,0x00000330,0x00000007,0x0004003b, + 0x00000013,0x00000331,0x00000007,0x0004003b,0x0000019e,0x00000334,0x00000007,0x0004003b, + 0x0000019e,0x0000033a,0x00000007,0x0004003b,0x00000013,0x00000340,0x00000007,0x0004003b, + 0x00000013,0x00000341,0x00000007,0x0004003b,0x00000013,0x00000359,0x00000007,0x0004003b, + 0x00000013,0x00000376,0x00000007,0x0004003b,0x00000013,0x0000037c,0x00000007,0x0004003b, + 0x00000013,0x00000383,0x00000007,0x0004003b,0x00000013,0x00000386,0x00000007,0x0004003b, + 0x00000013,0x00000390,0x00000007,0x0004003b,0x00000013,0x00000394,0x00000007,0x0004003b, + 0x00000399,0x0000039a,0x00000007,0x0004003b,0x000003af,0x000003b0,0x00000007,0x0004003b, + 0x00000013,0x000003b3,0x00000007,0x0004003b,0x000003bd,0x000003be,0x00000007,0x0004003b, + 0x000003cc,0x000003cd,0x00000007,0x0004003b,0x0000019e,0x000003e0,0x00000007,0x0004003b, + 0x00000007,0x000003ec,0x00000007,0x0004003b,0x00000399,0x000003f3,0x00000007,0x0004003b, + 0x00000013,0x00000404,0x00000007,0x0004003b,0x0000000d,0x0000040f,0x00000007,0x0004003b, + 0x00000013,0x0000041a,0x00000007,0x0004003b,0x0000000d,0x0000041c,0x00000007,0x0004003b, + 0x00000013,0x0000041d,0x00000007,0x0004003b,0x0000000d,0x00000420,0x00000007,0x0004003b, + 0x0000000d,0x00000421,0x00000007,0x0004003b,0x00000013,0x00000424,0x00000007,0x0004003b, + 0x0000000d,0x0000042c,0x00000007,0x0004003b,0x00000013,0x00000435,0x00000007,0x0004003b, + 0x0000000d,0x00000436,0x00000007,0x0004003b,0x00000013,0x00000439,0x00000007,0x0004003b, + 0x00000013,0x00000447,0x00000007,0x0004003b,0x00000013,0x00000450,0x00000007,0x0004003b, + 0x00000013,0x00000454,0x00000007,0x0004003b,0x000003af,0x00000458,0x00000007,0x0004003b, + 0x00000013,0x0000045a,0x00000007,0x0004003b,0x00000013,0x00000462,0x00000007,0x0004003b, + 0x000003bd,0x0000046a,0x00000007,0x0004003b,0x000003cc,0x0000047b,0x00000007,0x0004003b, + 0x0000019e,0x00000493,0x00000007,0x0004003b,0x00000007,0x0000049f,0x00000007,0x0004003b, + 0x00000399,0x000004a8,0x00000007,0x0004003b,0x00000013,0x000004bb,0x00000007,0x0004003b, + 0x00000013,0x000004c4,0x00000007,0x0004003b,0x00000013,0x000004c7,0x00000007,0x0004003b, + 0x0000019e,0x000004ca,0x00000007,0x0004003b,0x0000019e,0x000004d0,0x00000007,0x0004003b, + 0x00000013,0x000004f0,0x00000007,0x0004003b,0x0000000d,0x00000507,0x00000007,0x0004003b, + 0x00000013,0x0000050b,0x00000007,0x00050041,0x000002a2,0x000002a3,0x000002a1,0x000000b7, + 0x0004003d,0x0000000e,0x000002a4,0x000002a3,0x0003003e,0x0000029e,0x000002a4,0x00050041, + 0x000002a2,0x000002a7,0x000002a6,0x000000b7,0x0004003d,0x0000000e,0x000002a8,0x000002a7, + 0x0003003e,0x000002a5,0x000002a8,0x00050041,0x000002a2,0x000002aa,0x000002a6,0x0000007c, + 0x0004003d,0x0000000e,0x000002ab,0x000002aa,0x00050041,0x000002a2,0x000002ac,0x000002a6, + 0x000001df,0x0004003d,0x0000000e,0x000002ad,0x000002ac,0x00050084,0x0000000e,0x000002ae, + 0x000002ad,0x00000093,0x00050080,0x0000000e,0x000002af,0x000002ab,0x000002ae,0x0003003e, + 0x000002a9,0x000002af,0x0004003d,0x0000000e,0x000002b0,0x000002a9,0x00050041,0x000002b5, + 0x000002b6,0x000002b3,0x000002b4,0x0004003d,0x0000000e,0x000002b7,0x000002b6,0x000500ae, + 0x00000053,0x000002b8,0x000002b0,0x000002b7,0x000300f7,0x000002ba,0x00000000,0x000400fa, + 0x000002b8,0x000002b9,0x000002ba,0x000200f8,0x000002b9,0x000100fd,0x000200f8,0x000002ba, + 0x0004003d,0x0000000e,0x000002bd,0x000002a9,0x00050041,0x000002b5,0x000002bf,0x000002b3, + 0x000002be,0x0004003d,0x0000000e,0x000002c0,0x000002bf,0x00050089,0x0000000e,0x000002c1, + 0x000002bd,0x000002c0,0x00050084,0x0000000e,0x000002c2,0x000002c1,0x000000d7,0x0004007c, + 0x0000019d,0x000002c3,0x000002c2,0x00050041,0x000002b5,0x000002c5,0x000002b3,0x000002c4, + 0x0004003d,0x0000000e,0x000002c6,0x000002c5,0x0004007c,0x0000019d,0x000002c7,0x000002c6, + 0x00050082,0x0000019d,0x000002c8,0x000002c3,0x000002c7,0x0003003e,0x000002bc,0x000002c8, + 0x0004003d,0x0000000e,0x000002ca,0x000002a9,0x00050041,0x000002b5,0x000002cb,0x000002b3, + 0x000002be,0x0004003d,0x0000000e,0x000002cc,0x000002cb,0x00050086,0x0000000e,0x000002cd, + 0x000002ca,0x000002cc,0x00050084,0x0000000e,0x000002ce,0x000002cd,0x000000d7,0x0004007c, + 0x0000019d,0x000002cf,0x000002ce,0x00050041,0x000002b5,0x000002d1,0x000002b3,0x000002d0, + 0x0004003d,0x0000000e,0x000002d2,0x000002d1,0x0004007c,0x0000019d,0x000002d3,0x000002d2, + 0x00050082,0x0000019d,0x000002d4,0x000002cf,0x000002d3,0x0003003e,0x000002c9,0x000002d4, + 0x00050041,0x000002b5,0x000002d6,0x000002b3,0x000001a7,0x0004003d,0x0000000e,0x000002d7, + 0x000002d6,0x00050084,0x0000000e,0x000002d8,0x000002d7,0x00000135,0x0003003e,0x000002d5, + 0x000002d8,0x0004003d,0x0000000e,0x000002da,0x000002a5,0x00050084,0x0000000e,0x000002dc, + 0x000002da,0x000002db,0x0003003e,0x000002d9,0x000002dc,0x0004003d,0x0000000e,0x000002de, + 0x0000029e,0x0003003e,0x000002dd,0x000002de,0x000200f9,0x000002df,0x000200f8,0x000002df, + 0x000400f6,0x000002e1,0x000002e2,0x00000000,0x000200f9,0x000002e3,0x000200f8,0x000002e3, + 0x0004003d,0x0000000e,0x000002e4,0x000002dd,0x000500b0,0x00000053,0x000002e6,0x000002e4, + 0x000002e5,0x000400fa,0x000002e6,0x000002e0,0x000002e1,0x000200f8,0x000002e0,0x0004003d, + 0x0000000e,0x000002e8,0x000002dd,0x000500c2,0x0000000e,0x000002e9,0x000002e8,0x000001fc, + 0x0003003e,0x000002e7,0x000002e9,0x0004003d,0x0000000e,0x000002eb,0x000002dd,0x000500c7, + 0x0000000e,0x000002ec,0x000002eb,0x000000e6,0x0003003e,0x000002ea,0x000002ec,0x0004003d, + 0x0000019d,0x000002ee,0x000002bc,0x0004003d,0x0000000e,0x000002ef,0x000002e7,0x000500c7, + 0x0000000e,0x000002f0,0x000002ef,0x00000119,0x0004007c,0x0000019d,0x000002f1,0x000002f0, + 0x00050080,0x0000019d,0x000002f2,0x000002ee,0x000002f1,0x0003003e,0x000002ed,0x000002f2, + 0x0004003d,0x0000019d,0x000002f4,0x000002c9,0x0004003d,0x0000000e,0x000002f5,0x000002e7, + 0x000500c2,0x0000000e,0x000002f6,0x000002f5,0x00000135,0x0004007c,0x0000019d,0x000002f7, + 0x000002f6,0x00050080,0x0000019d,0x000002f8,0x000002f4,0x000002f7,0x0003003e,0x000002f3, + 0x000002f8,0x0003003e,0x000002f9,0x000000b7,0x0004003d,0x0000019d,0x000002fa,0x000002ed, + 0x000500af,0x00000053,0x000002fb,0x000002fa,0x000001a0,0x0004003d,0x0000019d,0x000002fc, + 0x000002f3,0x000500af,0x00000053,0x000002fd,0x000002fc,0x000001a0,0x000500a7,0x00000053, + 0x000002fe,0x000002fb,0x000002fd,0x000300f7,0x00000300,0x00000000,0x000400fa,0x000002fe, + 0x000002ff,0x00000300,0x000200f8,0x000002ff,0x0004003d,0x0000019d,0x00000301,0x000002ed, + 0x00050041,0x000002b5,0x00000302,0x000002b3,0x000001a0,0x0004003d,0x0000000e,0x00000303, + 0x00000302,0x0004007c,0x0000019d,0x00000304,0x00000303,0x000500b1,0x00000053,0x00000305, + 0x00000301,0x00000304,0x000200f9,0x00000300,0x000200f8,0x00000300,0x000700f5,0x00000053, + 0x00000306,0x000002fe,0x000002e0,0x00000305,0x000002ff,0x000300f7,0x00000308,0x00000000, + 0x000400fa,0x00000306,0x00000307,0x00000308,0x000200f8,0x00000307,0x0004003d,0x0000019d, + 0x00000309,0x000002f3,0x00050041,0x000002b5,0x0000030a,0x000002b3,0x000001c7,0x0004003d, + 0x0000000e,0x0000030b,0x0000030a,0x0004007c,0x0000019d,0x0000030c,0x0000030b,0x000500b1, + 0x00000053,0x0000030d,0x00000309,0x0000030c,0x000200f9,0x00000308,0x000200f8,0x00000308, + 0x000700f5,0x00000053,0x0000030e,0x00000306,0x00000300,0x0000030d,0x00000307,0x000300f7, + 0x00000310,0x00000000,0x000400fa,0x0000030e,0x0000030f,0x00000310,0x000200f8,0x0000030f, + 0x0004003d,0x0000019d,0x00000315,0x000002f3,0x0004007c,0x0000000e,0x00000316,0x00000315, + 0x00050041,0x000002b5,0x00000317,0x000002b3,0x000001a0,0x0004003d,0x0000000e,0x00000318, + 0x00000317,0x00050084,0x0000000e,0x00000319,0x00000316,0x00000318,0x0004003d,0x0000019d, + 0x0000031a,0x000002ed,0x0004007c,0x0000000e,0x0000031b,0x0000031a,0x00050080,0x0000000e, + 0x0000031c,0x00000319,0x0000031b,0x0004003d,0x0000000e,0x0000031d,0x000002d5,0x00050084, + 0x0000000e,0x0000031e,0x0000031c,0x0000031d,0x0004003d,0x0000000e,0x0000031f,0x000002d9, + 0x00050080,0x0000000e,0x00000320,0x0000031e,0x0000031f,0x0004003d,0x0000000e,0x00000321, + 0x000002ea,0x00050080,0x0000000e,0x00000322,0x00000320,0x00000321,0x00060041,0x00000323, + 0x00000324,0x00000314,0x000001a0,0x00000322,0x0004003d,0x00000021,0x00000325,0x00000324, + 0x00040071,0x0000000e,0x00000326,0x00000325,0x0003003e,0x000002f9,0x00000326,0x000200f9, + 0x00000310,0x000200f8,0x00000310,0x0004003d,0x0000000e,0x0000032a,0x000002dd,0x0004003d, + 0x0000000e,0x0000032c,0x000002f9,0x0003003e,0x0000032b,0x0000032c,0x00050039,0x00000021, + 0x0000032d,0x00000024,0x0000032b,0x00050041,0x0000032e,0x0000032f,0x00000329,0x0000032a, + 0x0005003e,0x0000032f,0x0000032d,0x00000028,0x000001df,0x0004003d,0x0000000e,0x00000332, + 0x000002e7,0x0003003e,0x00000331,0x00000332,0x00050039,0x0000000e,0x00000333,0x00000038, + 0x00000331,0x0003003e,0x00000330,0x00000333,0x0004003d,0x0000019d,0x00000335,0x000002bc, + 0x0004003d,0x0000000e,0x00000336,0x00000330,0x000500c7,0x0000000e,0x00000337,0x00000336, + 0x00000119,0x0004007c,0x0000019d,0x00000338,0x00000337,0x00050080,0x0000019d,0x00000339, + 0x00000335,0x00000338,0x0003003e,0x00000334,0x00000339,0x0004003d,0x0000019d,0x0000033b, + 0x000002c9,0x0004003d,0x0000000e,0x0000033c,0x00000330,0x000500c2,0x0000000e,0x0000033d, + 0x0000033c,0x00000135,0x0004007c,0x0000019d,0x0000033e,0x0000033d,0x00050080,0x0000019d, + 0x0000033f,0x0000033b,0x0000033e,0x0003003e,0x0000033a,0x0000033f,0x0003003e,0x00000340, + 0x000000b7,0x0003003e,0x00000341,0x000000b7,0x0004003d,0x0000019d,0x00000342,0x00000334, + 0x000500af,0x00000053,0x00000343,0x00000342,0x000001a0,0x0004003d,0x0000019d,0x00000344, + 0x0000033a,0x000500af,0x00000053,0x00000345,0x00000344,0x000001a0,0x000500a7,0x00000053, + 0x00000346,0x00000343,0x00000345,0x000300f7,0x00000348,0x00000000,0x000400fa,0x00000346, + 0x00000347,0x00000348,0x000200f8,0x00000347,0x0004003d,0x0000019d,0x00000349,0x00000334, + 0x00050041,0x000002b5,0x0000034a,0x000002b3,0x000001a0,0x0004003d,0x0000000e,0x0000034b, + 0x0000034a,0x0004007c,0x0000019d,0x0000034c,0x0000034b,0x000500b1,0x00000053,0x0000034d, + 0x00000349,0x0000034c,0x000200f9,0x00000348,0x000200f8,0x00000348,0x000700f5,0x00000053, + 0x0000034e,0x00000346,0x00000310,0x0000034d,0x00000347,0x000300f7,0x00000350,0x00000000, + 0x000400fa,0x0000034e,0x0000034f,0x00000350,0x000200f8,0x0000034f,0x0004003d,0x0000019d, + 0x00000351,0x0000033a,0x00050041,0x000002b5,0x00000352,0x000002b3,0x000001c7,0x0004003d, + 0x0000000e,0x00000353,0x00000352,0x0004007c,0x0000019d,0x00000354,0x00000353,0x000500b1, + 0x00000053,0x00000355,0x00000351,0x00000354,0x000200f9,0x00000350,0x000200f8,0x00000350, + 0x000700f5,0x00000053,0x00000356,0x0000034e,0x00000348,0x00000355,0x0000034f,0x000300f7, + 0x00000358,0x00000000,0x000400fa,0x00000356,0x00000357,0x00000358,0x000200f8,0x00000357, + 0x0004003d,0x0000019d,0x0000035a,0x0000033a,0x0004007c,0x0000000e,0x0000035b,0x0000035a, + 0x00050041,0x000002b5,0x0000035c,0x000002b3,0x000001a0,0x0004003d,0x0000000e,0x0000035d, + 0x0000035c,0x00050084,0x0000000e,0x0000035e,0x0000035b,0x0000035d,0x0004003d,0x0000019d, + 0x0000035f,0x00000334,0x0004007c,0x0000000e,0x00000360,0x0000035f,0x00050080,0x0000000e, + 0x00000361,0x0000035e,0x00000360,0x0004003d,0x0000000e,0x00000362,0x000002d5,0x00050084, + 0x0000000e,0x00000363,0x00000361,0x00000362,0x0004003d,0x0000000e,0x00000364,0x000002d9, + 0x00050080,0x0000000e,0x00000365,0x00000363,0x00000364,0x0003003e,0x00000359,0x00000365, + 0x0004003d,0x0000000e,0x00000366,0x00000359,0x00050080,0x0000000e,0x00000367,0x00000366, + 0x00000235,0x0004003d,0x0000000e,0x00000368,0x000002ea,0x00050080,0x0000000e,0x00000369, + 0x00000367,0x00000368,0x00060041,0x00000323,0x0000036a,0x00000314,0x000001a0,0x00000369, + 0x0004003d,0x00000021,0x0000036b,0x0000036a,0x00040071,0x0000000e,0x0000036c,0x0000036b, + 0x0003003e,0x00000340,0x0000036c,0x0004003d,0x0000000e,0x0000036d,0x00000359,0x00050080, + 0x0000000e,0x0000036e,0x0000036d,0x00000210,0x0004003d,0x0000000e,0x0000036f,0x000002ea, + 0x00050080,0x0000000e,0x00000370,0x0000036e,0x0000036f,0x00060041,0x00000323,0x00000371, + 0x00000314,0x000001a0,0x00000370,0x0004003d,0x00000021,0x00000372,0x00000371,0x00040071, + 0x0000000e,0x00000373,0x00000372,0x0003003e,0x00000341,0x00000373,0x000200f9,0x00000358, + 0x000200f8,0x00000358,0x0004003d,0x0000000e,0x00000375,0x000002dd,0x0004003d,0x0000000e, + 0x00000377,0x00000340,0x0003003e,0x00000376,0x00000377,0x00050039,0x00000021,0x00000378, + 0x00000024,0x00000376,0x00050041,0x0000032e,0x00000379,0x00000374,0x00000375,0x0005003e, + 0x00000379,0x00000378,0x00000028,0x000001df,0x0004003d,0x0000000e,0x0000037b,0x000002dd, + 0x0004003d,0x0000000e,0x0000037d,0x00000341,0x0003003e,0x0000037c,0x0000037d,0x00050039, + 0x00000021,0x0000037e,0x00000024,0x0000037c,0x00050041,0x0000032e,0x0000037f,0x0000037a, + 0x0000037b,0x0005003e,0x0000037f,0x0000037e,0x00000028,0x000001df,0x000200f9,0x000002e2, + 0x000200f8,0x000002e2,0x0004003d,0x0000000e,0x00000380,0x000002dd,0x00050080,0x0000000e, + 0x00000381,0x00000380,0x000000d9,0x0003003e,0x000002dd,0x00000381,0x000200f9,0x000002df, + 0x000200f8,0x000002e1,0x000400e0,0x000001df,0x000001df,0x00000382,0x0004003d,0x0000000e, + 0x00000384,0x000002a5,0x00050084,0x0000000e,0x00000385,0x00000384,0x0000020b,0x0003003e, + 0x00000383,0x00000385,0x0004003d,0x0000000e,0x00000388,0x00000387,0x0003003e,0x00000386, + 0x00000388,0x000200f9,0x00000389,0x000200f8,0x00000389,0x000400f6,0x0000038b,0x0000038c, + 0x00000000,0x000200f9,0x0000038d,0x000200f8,0x0000038d,0x0004003d,0x0000000e,0x0000038e, + 0x00000386,0x000500b0,0x00000053,0x0000038f,0x0000038e,0x0000010a,0x000400fa,0x0000038f, + 0x0000038a,0x0000038b,0x000200f8,0x0000038a,0x0004003d,0x0000000e,0x00000391,0x00000386, + 0x00050086,0x0000000e,0x00000392,0x00000391,0x000001ce,0x00050084,0x0000000e,0x00000393, + 0x00000392,0x0000010a,0x0003003e,0x00000390,0x00000393,0x0004003d,0x0000000e,0x00000395, + 0x00000386,0x00050089,0x0000000e,0x00000396,0x00000395,0x000001ce,0x00050084,0x0000000e, + 0x00000397,0x00000396,0x0000010a,0x0003003e,0x00000394,0x00000397,0x0004003d,0x0000000e, + 0x0000039f,0x00000383,0x0004003d,0x0000000e,0x000003a0,0x00000390,0x00050084,0x0000000e, + 0x000003a1,0x000003a0,0x00000210,0x00050080,0x0000000e,0x000003a2,0x0000039f,0x000003a1, + 0x0004003d,0x0000000e,0x000003a3,0x00000394,0x00050080,0x0000000e,0x000003a4,0x000003a2, + 0x000003a3,0x00060041,0x000003a5,0x000003a6,0x0000039e,0x000001a0,0x000003a4,0x0004003d, + 0x0000000e,0x000003a7,0x00000383,0x0004003d,0x0000000e,0x000003a8,0x00000390,0x00050084, + 0x0000000e,0x000003a9,0x000003a8,0x00000210,0x00050080,0x0000000e,0x000003aa,0x000003a7, + 0x000003a9,0x0004003d,0x0000000e,0x000003ab,0x00000394,0x00050080,0x0000000e,0x000003ac, + 0x000003aa,0x000003ab,0x00071169,0x00000398,0x000003ad,0x000003a6,0x000001a0,0x00000210, + 0x00000000,0x0003003e,0x0000039a,0x000003ad,0x0004003d,0x00000398,0x000003b1,0x0000039a, + 0x00040073,0x000003ae,0x000003b2,0x000003b1,0x0003003e,0x000003b0,0x000003b2,0x0003003e, + 0x000003b3,0x000000b7,0x000200f9,0x000003b4,0x000200f8,0x000003b4,0x000400f6,0x000003b6, + 0x000003b7,0x00000001,0x000200f9,0x000003b8,0x000200f8,0x000003b8,0x0004003d,0x0000000e, + 0x000003b9,0x000003b3,0x000500b0,0x00000053,0x000003ba,0x000003b9,0x000001df,0x000400fa, + 0x000003ba,0x000003b5,0x000003b6,0x000200f8,0x000003b5,0x0004003d,0x0000000e,0x000003bf, + 0x00000390,0x00050084,0x0000000e,0x000003c0,0x000003bf,0x00000235,0x0004003d,0x0000000e, + 0x000003c1,0x000003b3,0x00050084,0x0000000e,0x000003c2,0x000003c1,0x0000010a,0x00050080, + 0x0000000e,0x000003c3,0x000003c0,0x000003c2,0x00050041,0x0000032e,0x000003c4,0x00000329, + 0x000003c3,0x0004003d,0x0000000e,0x000003c5,0x00000390,0x00050084,0x0000000e,0x000003c6, + 0x000003c5,0x00000235,0x0004003d,0x0000000e,0x000003c7,0x000003b3,0x00050084,0x0000000e, + 0x000003c8,0x000003c7,0x0000010a,0x00050080,0x0000000e,0x000003c9,0x000003c6,0x000003c8, + 0x00081169,0x000003bc,0x000003ca,0x000003c4,0x000001a0,0x00000235,0x00000030,0x000001df, + 0x0003003e,0x000003be,0x000003ca,0x0004003d,0x0000000e,0x000003ce,0x00000394,0x00050084, + 0x0000000e,0x000003cf,0x000003ce,0x00000235,0x0004003d,0x0000000e,0x000003d0,0x000003b3, + 0x00050084,0x0000000e,0x000003d1,0x000003d0,0x0000010a,0x00050080,0x0000000e,0x000003d2, + 0x000003cf,0x000003d1,0x00050041,0x0000032e,0x000003d3,0x00000374,0x000003d2,0x0004003d, + 0x0000000e,0x000003d4,0x00000394,0x00050084,0x0000000e,0x000003d5,0x000003d4,0x00000235, + 0x0004003d,0x0000000e,0x000003d6,0x000003b3,0x00050084,0x0000000e,0x000003d7,0x000003d6, + 0x0000010a,0x00050080,0x0000000e,0x000003d8,0x000003d5,0x000003d7,0x00081169,0x000003cb, + 0x000003d9,0x000003d3,0x000001c7,0x00000235,0x00000030,0x000001df,0x0003003e,0x000003cd, + 0x000003d9,0x0004003d,0x000003bc,0x000003da,0x000003be,0x0004003d,0x000003cb,0x000003db, + 0x000003cd,0x0004003d,0x000003ae,0x000003dc,0x000003b0,0x0006116b,0x000003ae,0x000003dd, + 0x000003da,0x000003db,0x000003dc,0x0003003e,0x000003b0,0x000003dd,0x000200f9,0x000003b7, + 0x000200f8,0x000003b7,0x0004003d,0x0000000e,0x000003de,0x000003b3,0x00050080,0x0000000e, + 0x000003df,0x000003de,0x000001c7,0x0003003e,0x000003b3,0x000003df,0x000200f9,0x000003b4, + 0x000200f8,0x000003b6,0x0003003e,0x000003e0,0x000001a0,0x000200f9,0x000003e1,0x000200f8, + 0x000003e1,0x000400f6,0x000003e3,0x000003e4,0x00000000,0x000200f9,0x000003e5,0x000200f8, + 0x000003e5,0x0004003d,0x0000019d,0x000003e6,0x000003e0,0x0004116c,0x0000000e,0x000003e7, + 0x000003ae,0x0004007c,0x0000019d,0x000003e8,0x000003e7,0x000500b1,0x00000053,0x000003e9, + 0x000003e6,0x000003e8,0x000400fa,0x000003e9,0x000003e2,0x000003e3,0x000200f8,0x000003e2, + 0x0004003d,0x0000019d,0x000003ea,0x000003e0,0x0004003d,0x0000019d,0x000003eb,0x000003e0, + 0x00050041,0x00000007,0x000003ed,0x000003b0,0x000003eb,0x0004003d,0x00000006,0x000003ee, + 0x000003ed,0x0003003e,0x000003ec,0x000003ee,0x00050039,0x00000006,0x000003ef,0x0000000a, + 0x000003ec,0x00050041,0x00000007,0x000003f0,0x000003b0,0x000003ea,0x0003003e,0x000003f0, + 0x000003ef,0x000200f9,0x000003e4,0x000200f8,0x000003e4,0x0004003d,0x0000019d,0x000003f1, + 0x000003e0,0x00050080,0x0000019d,0x000003f2,0x000003f1,0x000001c7,0x0003003e,0x000003e0, + 0x000003f2,0x000200f9,0x000003e1,0x000200f8,0x000003e3,0x0004003d,0x000003ae,0x000003f4, + 0x000003b0,0x00040073,0x00000398,0x000003f5,0x000003f4,0x0003003e,0x000003f3,0x000003f5, + 0x0004003d,0x00000398,0x000003f6,0x000003f3,0x0004003d,0x0000000e,0x000003f7,0x00000390, + 0x00050084,0x0000000e,0x000003f8,0x000003f7,0x00000210,0x0004003d,0x0000000e,0x000003f9, + 0x00000394,0x00050080,0x0000000e,0x000003fa,0x000003f8,0x000003f9,0x00050041,0x00000214, + 0x000003fb,0x0000020e,0x000003fa,0x0004003d,0x0000000e,0x000003fc,0x00000390,0x00050084, + 0x0000000e,0x000003fd,0x000003fc,0x00000210,0x0004003d,0x0000000e,0x000003fe,0x00000394, + 0x00050080,0x0000000e,0x000003ff,0x000003fd,0x000003fe,0x0007116a,0x000003fb,0x000003f6, + 0x000001a0,0x00000210,0x00000028,0x000001df,0x000200f9,0x0000038c,0x000200f8,0x0000038c, + 0x0004003d,0x0000000e,0x00000401,0x00000400,0x0004003d,0x0000000e,0x00000402,0x00000386, + 0x00050080,0x0000000e,0x00000403,0x00000402,0x00000401,0x0003003e,0x00000386,0x00000403, + 0x000200f9,0x00000389,0x000200f8,0x0000038b,0x000400e0,0x000001df,0x000001df,0x00000382, + 0x0004003d,0x0000000e,0x00000405,0x0000029e,0x0003003e,0x00000404,0x00000405,0x000200f9, + 0x00000406,0x000200f8,0x00000406,0x000400f6,0x00000408,0x00000409,0x00000000,0x000200f9, + 0x0000040a,0x000200f8,0x0000040a,0x0004003d,0x0000000e,0x0000040b,0x00000404,0x000500b0, + 0x00000053,0x0000040c,0x0000040b,0x0000020b,0x000400fa,0x0000040c,0x00000407,0x00000408, + 0x000200f8,0x00000407,0x0004003d,0x0000000e,0x0000040d,0x00000404,0x0004003d,0x0000000e, + 0x0000040e,0x00000404,0x00050041,0x00000214,0x00000410,0x0000020e,0x0000040e,0x0006003d, + 0x0000000c,0x00000411,0x00000410,0x00000030,0x000001df,0x0003003e,0x0000040f,0x00000411, + 0x00050039,0x0000000c,0x00000412,0x0000003b,0x0000040f,0x00050041,0x00000214,0x00000413, + 0x0000020e,0x0000040d,0x0005003e,0x00000413,0x00000412,0x00000028,0x000001df,0x000200f9, + 0x00000409,0x000200f8,0x00000409,0x0004003d,0x0000000e,0x00000414,0x00000404,0x00050080, + 0x0000000e,0x00000415,0x00000414,0x000000d9,0x0003003e,0x00000404,0x00000415,0x000200f9, + 0x00000406,0x000200f8,0x00000408,0x000400e0,0x000001df,0x000001df,0x00000382,0x0004003d, + 0x0000000e,0x00000416,0x0000029e,0x000500b0,0x00000053,0x00000417,0x00000416,0x00000210, + 0x000300f7,0x00000419,0x00000000,0x000400fa,0x00000417,0x00000418,0x00000419,0x000200f8, + 0x00000418,0x0004003d,0x0000000e,0x0000041b,0x0000029e,0x0003003e,0x0000041a,0x0000041b, + 0x0004003d,0x0000000e,0x0000041e,0x0000041a,0x0003003e,0x0000041d,0x0000041e,0x00050039, + 0x0000000c,0x0000041f,0x00000044,0x0000041d,0x0003003e,0x0000041c,0x0000041f,0x0004003d, + 0x0000000c,0x00000422,0x0000041c,0x0003003e,0x00000421,0x00000422,0x00050039,0x0000000c, + 0x00000423,0x00000035,0x00000421,0x0003003e,0x00000420,0x00000423,0x0003003e,0x00000424, + 0x000000b7,0x000200f9,0x00000425,0x000200f8,0x00000425,0x000400f6,0x00000427,0x00000428, + 0x00000000,0x000200f9,0x00000429,0x000200f8,0x00000429,0x0004003d,0x0000000e,0x0000042a, + 0x00000424,0x000500b0,0x00000053,0x0000042b,0x0000042a,0x00000210,0x000400fa,0x0000042b, + 0x00000426,0x00000427,0x000200f8,0x00000426,0x0004003d,0x0000000e,0x0000042d,0x0000041a, + 0x00050084,0x0000000e,0x0000042e,0x0000042d,0x00000210,0x0004003d,0x0000000e,0x0000042f, + 0x00000424,0x00050080,0x0000000e,0x00000430,0x0000042e,0x0000042f,0x00050041,0x00000214, + 0x00000431,0x0000020e,0x00000430,0x0006003d,0x0000000c,0x00000432,0x00000431,0x00000030, + 0x000001df,0x0004003d,0x0000000c,0x00000433,0x00000420,0x00050085,0x0000000c,0x00000434, + 0x00000432,0x00000433,0x0003003e,0x0000042c,0x00000434,0x0004003d,0x0000000c,0x00000437, + 0x0000042c,0x0003003e,0x00000436,0x00000437,0x00050039,0x0000000e,0x00000438,0x00000011, + 0x00000436,0x0003003e,0x00000439,0x00000438,0x00050039,0x0000000e,0x0000043a,0x0000001f, + 0x00000439,0x0003003e,0x00000435,0x0000043a,0x0004003d,0x0000000e,0x0000043e,0x0000041a, + 0x00050084,0x0000000e,0x0000043f,0x0000043e,0x00000210,0x0004003d,0x0000000e,0x00000440, + 0x00000424,0x00050080,0x0000000e,0x00000441,0x0000043f,0x00000440,0x0004003d,0x0000000e, + 0x00000442,0x00000435,0x00040071,0x00000021,0x00000443,0x00000442,0x00050041,0x0000032e, + 0x00000444,0x0000043d,0x00000441,0x0005003e,0x00000444,0x00000443,0x00000028,0x000001df, + 0x000200f9,0x00000428,0x000200f8,0x00000428,0x0004003d,0x0000000e,0x00000445,0x00000424, + 0x00050080,0x0000000e,0x00000446,0x00000445,0x000001c7,0x0003003e,0x00000424,0x00000446, + 0x000200f9,0x00000425,0x000200f8,0x00000427,0x000200f9,0x00000419,0x000200f8,0x00000419, + 0x000400e0,0x000001df,0x000001df,0x00000382,0x0004003d,0x0000000e,0x00000448,0x00000387, + 0x0003003e,0x00000447,0x00000448,0x000200f9,0x00000449,0x000200f8,0x00000449,0x000400f6, + 0x0000044b,0x0000044c,0x00000000,0x000200f9,0x0000044d,0x000200f8,0x0000044d,0x0004003d, + 0x0000000e,0x0000044e,0x00000447,0x000500b0,0x00000053,0x0000044f,0x0000044e,0x000000d7, + 0x000400fa,0x0000044f,0x0000044a,0x0000044b,0x000200f8,0x0000044a,0x0004003d,0x0000000e, + 0x00000451,0x00000447,0x00050086,0x0000000e,0x00000452,0x00000451,0x000001df,0x00050084, + 0x0000000e,0x00000453,0x00000452,0x0000010a,0x0003003e,0x00000450,0x00000453,0x0004003d, + 0x0000000e,0x00000455,0x00000447,0x00050089,0x0000000e,0x00000456,0x00000455,0x000001df, + 0x00050084,0x0000000e,0x00000457,0x00000456,0x0000010a,0x0003003e,0x00000454,0x00000457, + 0x0003003e,0x00000458,0x00000459,0x0003003e,0x0000045a,0x000000b7,0x000200f9,0x0000045b, + 0x000200f8,0x0000045b,0x000400f6,0x0000045d,0x0000045e,0x00000001,0x000200f9,0x0000045f, + 0x000200f8,0x0000045f,0x0004003d,0x0000000e,0x00000460,0x0000045a,0x000500b0,0x00000053, + 0x00000461,0x00000460,0x00000210,0x000400fa,0x00000461,0x0000045c,0x0000045d,0x000200f8, + 0x0000045c,0x0003003e,0x00000462,0x000000b7,0x000200f9,0x00000463,0x000200f8,0x00000463, + 0x000400f6,0x00000465,0x00000466,0x00000001,0x000200f9,0x00000467,0x000200f8,0x00000467, + 0x0004003d,0x0000000e,0x00000468,0x00000462,0x000500b0,0x00000053,0x00000469,0x00000468, + 0x000001df,0x000400fa,0x00000469,0x00000464,0x00000465,0x000200f8,0x00000464,0x0004003d, + 0x0000000e,0x0000046b,0x00000450,0x00050084,0x0000000e,0x0000046c,0x0000046b,0x00000210, + 0x0004003d,0x0000000e,0x0000046d,0x0000045a,0x00050080,0x0000000e,0x0000046e,0x0000046c, + 0x0000046d,0x0004003d,0x0000000e,0x0000046f,0x00000462,0x00050084,0x0000000e,0x00000470, + 0x0000046f,0x0000010a,0x00050080,0x0000000e,0x00000471,0x0000046e,0x00000470,0x00050041, + 0x0000032e,0x00000472,0x0000043d,0x00000471,0x0004003d,0x0000000e,0x00000473,0x00000450, + 0x00050084,0x0000000e,0x00000474,0x00000473,0x00000210,0x0004003d,0x0000000e,0x00000475, + 0x0000045a,0x00050080,0x0000000e,0x00000476,0x00000474,0x00000475,0x0004003d,0x0000000e, + 0x00000477,0x00000462,0x00050084,0x0000000e,0x00000478,0x00000477,0x0000010a,0x00050080, + 0x0000000e,0x00000479,0x00000476,0x00000478,0x00081169,0x000003bc,0x0000047a,0x00000472, + 0x000001a0,0x00000210,0x00000030,0x000001df,0x0003003e,0x0000046a,0x0000047a,0x0004003d, + 0x0000000e,0x0000047c,0x0000045a,0x00050084,0x0000000e,0x0000047d,0x0000047c,0x00000235, + 0x0004003d,0x0000000e,0x0000047e,0x00000454,0x00050080,0x0000000e,0x0000047f,0x0000047d, + 0x0000047e,0x0004003d,0x0000000e,0x00000480,0x00000462,0x00050084,0x0000000e,0x00000482, + 0x00000480,0x00000481,0x00050080,0x0000000e,0x00000483,0x0000047f,0x00000482,0x00050041, + 0x0000032e,0x00000484,0x0000037a,0x00000483,0x0004003d,0x0000000e,0x00000485,0x0000045a, + 0x00050084,0x0000000e,0x00000486,0x00000485,0x00000235,0x0004003d,0x0000000e,0x00000487, + 0x00000454,0x00050080,0x0000000e,0x00000488,0x00000486,0x00000487,0x0004003d,0x0000000e, + 0x00000489,0x00000462,0x00050084,0x0000000e,0x0000048a,0x00000489,0x00000481,0x00050080, + 0x0000000e,0x0000048b,0x00000488,0x0000048a,0x00081169,0x000003cb,0x0000048c,0x00000484, + 0x000001a0,0x00000235,0x00000030,0x000001df,0x0003003e,0x0000047b,0x0000048c,0x0004003d, + 0x000003bc,0x0000048d,0x0000046a,0x0004003d,0x000003cb,0x0000048e,0x0000047b,0x0004003d, + 0x000003ae,0x0000048f,0x00000458,0x0006116b,0x000003ae,0x00000490,0x0000048d,0x0000048e, + 0x0000048f,0x0003003e,0x00000458,0x00000490,0x000200f9,0x00000466,0x000200f8,0x00000466, + 0x0004003d,0x0000000e,0x00000491,0x00000462,0x00050080,0x0000000e,0x00000492,0x00000491, + 0x000001c7,0x0003003e,0x00000462,0x00000492,0x000200f9,0x00000463,0x000200f8,0x00000465, + 0x0003003e,0x00000493,0x000001a0,0x000200f9,0x00000494,0x000200f8,0x00000494,0x000400f6, + 0x00000496,0x00000497,0x00000000,0x000200f9,0x00000498,0x000200f8,0x00000498,0x0004003d, + 0x0000019d,0x00000499,0x00000493,0x0004116c,0x0000000e,0x0000049a,0x000003ae,0x0004007c, + 0x0000019d,0x0000049b,0x0000049a,0x000500b1,0x00000053,0x0000049c,0x00000499,0x0000049b, + 0x000400fa,0x0000049c,0x00000495,0x00000496,0x000200f8,0x00000495,0x0004003d,0x0000019d, + 0x0000049d,0x00000493,0x0004003d,0x0000019d,0x0000049e,0x00000493,0x00050041,0x00000007, + 0x000004a0,0x00000458,0x0000049e,0x0004003d,0x00000006,0x000004a1,0x000004a0,0x0003003e, + 0x0000049f,0x000004a1,0x00050039,0x00000006,0x000004a2,0x0000000a,0x0000049f,0x00050041, + 0x00000007,0x000004a3,0x00000458,0x0000049d,0x0003003e,0x000004a3,0x000004a2,0x000200f9, + 0x00000497,0x000200f8,0x00000497,0x0004003d,0x0000019d,0x000004a4,0x00000493,0x00050080, + 0x0000019d,0x000004a5,0x000004a4,0x000001c7,0x0003003e,0x00000493,0x000004a5,0x000200f9, + 0x00000494,0x000200f8,0x00000496,0x000200f9,0x0000045e,0x000200f8,0x0000045e,0x0004003d, + 0x0000000e,0x000004a6,0x0000045a,0x00050080,0x0000000e,0x000004a7,0x000004a6,0x00000235, + 0x0003003e,0x0000045a,0x000004a7,0x000200f9,0x0000045b,0x000200f8,0x0000045d,0x0004003d, + 0x000003ae,0x000004a9,0x00000458,0x00040073,0x00000398,0x000004aa,0x000004a9,0x0003003e, + 0x000004a8,0x000004aa,0x0004003d,0x00000398,0x000004ab,0x000004a8,0x0004003d,0x0000000e, + 0x000004af,0x00000450,0x00050084,0x0000000e,0x000004b0,0x000004af,0x00000235,0x0004003d, + 0x0000000e,0x000004b1,0x00000454,0x00050080,0x0000000e,0x000004b2,0x000004b0,0x000004b1, + 0x00050041,0x00000214,0x000004b3,0x000004ae,0x000004b2,0x0004003d,0x0000000e,0x000004b4, + 0x00000450,0x00050084,0x0000000e,0x000004b5,0x000004b4,0x00000235,0x0004003d,0x0000000e, + 0x000004b6,0x00000454,0x00050080,0x0000000e,0x000004b7,0x000004b5,0x000004b6,0x0007116a, + 0x000004b3,0x000004ab,0x000001a0,0x00000235,0x00000028,0x000001df,0x000200f9,0x0000044c, + 0x000200f8,0x0000044c,0x0004003d,0x0000000e,0x000004b8,0x00000400,0x0004003d,0x0000000e, + 0x000004b9,0x00000447,0x00050080,0x0000000e,0x000004ba,0x000004b9,0x000004b8,0x0003003e, + 0x00000447,0x000004ba,0x000200f9,0x00000449,0x000200f8,0x0000044b,0x000400e0,0x000001df, + 0x000001df,0x00000382,0x0004003d,0x0000000e,0x000004bc,0x0000029e,0x0003003e,0x000004bb, + 0x000004bc,0x000200f9,0x000004bd,0x000200f8,0x000004bd,0x000400f6,0x000004bf,0x000004c0, + 0x00000000,0x000200f9,0x000004c1,0x000200f8,0x000004c1,0x0004003d,0x0000000e,0x000004c2, + 0x000004bb,0x000500b0,0x00000053,0x000004c3,0x000004c2,0x000002e5,0x000400fa,0x000004c3, + 0x000004be,0x000004bf,0x000200f8,0x000004be,0x0004003d,0x0000000e,0x000004c5,0x000004bb, + 0x000500c2,0x0000000e,0x000004c6,0x000004c5,0x000001fc,0x0003003e,0x000004c4,0x000004c6, + 0x0004003d,0x0000000e,0x000004c8,0x000004bb,0x000500c7,0x0000000e,0x000004c9,0x000004c8, + 0x000000e6,0x0003003e,0x000004c7,0x000004c9,0x0004003d,0x0000019d,0x000004cb,0x000002bc, + 0x0004003d,0x0000000e,0x000004cc,0x000004c4,0x000500c7,0x0000000e,0x000004cd,0x000004cc, + 0x00000119,0x0004007c,0x0000019d,0x000004ce,0x000004cd,0x00050080,0x0000019d,0x000004cf, + 0x000004cb,0x000004ce,0x0003003e,0x000004ca,0x000004cf,0x0004003d,0x0000019d,0x000004d1, + 0x000002c9,0x0004003d,0x0000000e,0x000004d2,0x000004c4,0x000500c2,0x0000000e,0x000004d3, + 0x000004d2,0x00000135,0x0004007c,0x0000019d,0x000004d4,0x000004d3,0x00050080,0x0000019d, + 0x000004d5,0x000004d1,0x000004d4,0x0003003e,0x000004d0,0x000004d5,0x0004003d,0x0000019d, + 0x000004d6,0x000004ca,0x000500b1,0x00000053,0x000004d7,0x000004d6,0x000001a0,0x0004003d, + 0x0000019d,0x000004d8,0x000004d0,0x000500b1,0x00000053,0x000004d9,0x000004d8,0x000001a0, + 0x000500a6,0x00000053,0x000004da,0x000004d7,0x000004d9,0x000400a8,0x00000053,0x000004db, + 0x000004da,0x000300f7,0x000004dd,0x00000000,0x000400fa,0x000004db,0x000004dc,0x000004dd, + 0x000200f8,0x000004dc,0x0004003d,0x0000019d,0x000004de,0x000004ca,0x00050041,0x000002b5, + 0x000004df,0x000002b3,0x000001a0,0x0004003d,0x0000000e,0x000004e0,0x000004df,0x0004007c, + 0x0000019d,0x000004e1,0x000004e0,0x000500af,0x00000053,0x000004e2,0x000004de,0x000004e1, + 0x000200f9,0x000004dd,0x000200f8,0x000004dd,0x000700f5,0x00000053,0x000004e3,0x000004da, + 0x000004be,0x000004e2,0x000004dc,0x000400a8,0x00000053,0x000004e4,0x000004e3,0x000300f7, + 0x000004e6,0x00000000,0x000400fa,0x000004e4,0x000004e5,0x000004e6,0x000200f8,0x000004e5, + 0x0004003d,0x0000019d,0x000004e7,0x000004d0,0x00050041,0x000002b5,0x000004e8,0x000002b3, + 0x000001c7,0x0004003d,0x0000000e,0x000004e9,0x000004e8,0x0004007c,0x0000019d,0x000004ea, + 0x000004e9,0x000500af,0x00000053,0x000004eb,0x000004e7,0x000004ea,0x000200f9,0x000004e6, + 0x000200f8,0x000004e6,0x000700f5,0x00000053,0x000004ec,0x000004e3,0x000004dd,0x000004eb, + 0x000004e5,0x000300f7,0x000004ee,0x00000000,0x000400fa,0x000004ec,0x000004ed,0x000004ee, + 0x000200f8,0x000004ed,0x000200f9,0x000004c0,0x000200f8,0x000004ee,0x0004003d,0x0000019d, + 0x000004f1,0x000004d0,0x0004007c,0x0000000e,0x000004f2,0x000004f1,0x00050041,0x000002b5, + 0x000004f3,0x000002b3,0x000001a0,0x0004003d,0x0000000e,0x000004f4,0x000004f3,0x00050084, + 0x0000000e,0x000004f5,0x000004f2,0x000004f4,0x0004003d,0x0000019d,0x000004f6,0x000004ca, + 0x0004007c,0x0000000e,0x000004f7,0x000004f6,0x00050080,0x0000000e,0x000004f8,0x000004f5, + 0x000004f7,0x00050041,0x000002b5,0x000004f9,0x000002b3,0x000001a7,0x0004003d,0x0000000e, + 0x000004fa,0x000004f9,0x00050084,0x0000000e,0x000004fb,0x000004f8,0x000004fa,0x0004003d, + 0x0000000e,0x000004fc,0x000002a5,0x00050084,0x0000000e,0x000004fd,0x000004fc,0x00000235, + 0x00050080,0x0000000e,0x000004fe,0x000004fb,0x000004fd,0x0004003d,0x0000000e,0x000004ff, + 0x000004c7,0x00050080,0x0000000e,0x00000500,0x000004fe,0x000004ff,0x0003003e,0x000004f0, + 0x00000500,0x0004003d,0x0000000e,0x00000505,0x000004f0,0x0004003d,0x0000000e,0x00000506, + 0x000004bb,0x00050041,0x00000214,0x00000508,0x000004ae,0x00000506,0x0006003d,0x0000000c, + 0x00000509,0x00000508,0x00000030,0x000001df,0x0003003e,0x00000507,0x00000509,0x00050039, + 0x0000000e,0x0000050a,0x00000011,0x00000507,0x0003003e,0x0000050b,0x0000050a,0x00050039, + 0x0000000e,0x0000050c,0x0000001f,0x0000050b,0x00040071,0x00000021,0x0000050d,0x0000050c, + 0x00060041,0x00000323,0x0000050e,0x00000504,0x000001a0,0x00000505,0x0003003e,0x0000050e, + 0x0000050d,0x000200f9,0x000004c0,0x000200f8,0x000004c0,0x0004003d,0x0000000e,0x0000050f, + 0x000004bb,0x00050080,0x0000000e,0x00000510,0x0000050f,0x000000d9,0x0003003e,0x000004bb, + 0x00000510,0x000200f9,0x000004bd,0x000200f8,0x000004bf,0x000100fd,0x00010038,0x00050036, + 0x00000006,0x0000000a,0x00000000,0x00000008,0x00030037,0x00000007,0x00000009,0x000200f8, + 0x0000000b,0x0004003b,0x00000013,0x00000046,0x00000007,0x0004003b,0x00000013,0x00000049, + 0x00000007,0x0004003b,0x00000013,0x0000004d,0x00000007,0x0004003b,0x00000007,0x00000067, + 0x00000007,0x0004003b,0x00000013,0x00000078,0x00000007,0x0004003b,0x00000013,0x0000007e, + 0x00000007,0x0004003d,0x00000006,0x00000047,0x00000009,0x0004007c,0x0000000e,0x00000048, + 0x00000047,0x0003003e,0x00000046,0x00000048,0x0004003d,0x0000000e,0x0000004a,0x00000046, + 0x000500c7,0x0000000e,0x0000004c,0x0000004a,0x0000004b,0x0003003e,0x00000049,0x0000004c, + 0x0004003d,0x0000000e,0x0000004e,0x00000046,0x000500c7,0x0000000e,0x00000050,0x0000004e, + 0x0000004f,0x0003003e,0x0000004d,0x00000050,0x0004003d,0x0000000e,0x00000051,0x0000004d, + 0x000500ae,0x00000053,0x00000054,0x00000051,0x00000052,0x000300f7,0x00000056,0x00000000, + 0x000400fa,0x00000054,0x00000055,0x00000056,0x000200f8,0x00000055,0x0004003d,0x00000006, + 0x00000057,0x00000009,0x000200fe,0x00000057,0x000200f8,0x00000056,0x0004003d,0x0000000e, + 0x00000059,0x0000004d,0x000500ae,0x00000053,0x0000005b,0x00000059,0x0000005a,0x000300f7, + 0x0000005d,0x00000000,0x000400fa,0x0000005b,0x0000005c,0x0000005d,0x000200f8,0x0000005c, + 0x0004003d,0x0000000e,0x0000005e,0x00000049,0x000500c5,0x0000000e,0x0000005f,0x0000005e, + 0x00000052,0x0004007c,0x00000006,0x00000060,0x0000005f,0x000200fe,0x00000060,0x000200f8, + 0x0000005d,0x0004003d,0x0000000e,0x00000062,0x0000004d,0x000500b0,0x00000053,0x00000064, + 0x00000062,0x00000063,0x000300f7,0x00000066,0x00000000,0x000400fa,0x00000064,0x00000065, + 0x00000066,0x000200f8,0x00000065,0x0004003d,0x0000000e,0x00000068,0x0000004d,0x0004007c, + 0x00000006,0x00000069,0x00000068,0x00050085,0x00000006,0x0000006b,0x00000069,0x0000006a, + 0x0006000c,0x00000006,0x0000006c,0x00000001,0x00000002,0x0000006b,0x0003003e,0x00000067, + 0x0000006c,0x0004003d,0x0000000e,0x0000006d,0x00000049,0x0004007c,0x00000006,0x0000006e, + 0x0000006d,0x0004003d,0x0000000e,0x0000006f,0x00000049,0x0004003d,0x00000006,0x00000070, + 0x00000067,0x00050085,0x00000006,0x00000072,0x00000070,0x00000071,0x0004007c,0x0000000e, + 0x00000073,0x00000072,0x000500c5,0x0000000e,0x00000074,0x0000006f,0x00000073,0x0004007c, + 0x00000006,0x00000075,0x00000074,0x00050081,0x00000006,0x00000076,0x0000006e,0x00000075, + 0x000200fe,0x00000076,0x000200f8,0x00000066,0x0004003d,0x0000000e,0x00000079,0x0000004d, + 0x000500c2,0x0000000e,0x0000007b,0x00000079,0x0000007a,0x000500c7,0x0000000e,0x0000007d, + 0x0000007b,0x0000007c,0x0003003e,0x00000078,0x0000007d,0x0004003d,0x0000000e,0x0000007f, + 0x0000004d,0x00050080,0x0000000e,0x00000081,0x0000007f,0x00000080,0x0004003d,0x0000000e, + 0x00000082,0x00000078,0x00050080,0x0000000e,0x00000083,0x00000081,0x00000082,0x000500c7, + 0x0000000e,0x00000085,0x00000083,0x00000084,0x0003003e,0x0000007e,0x00000085,0x0004003d, + 0x0000000e,0x00000086,0x00000049,0x0004003d,0x0000000e,0x00000087,0x0000007e,0x000500c5, + 0x0000000e,0x00000088,0x00000086,0x00000087,0x0004007c,0x00000006,0x00000089,0x00000088, + 0x000200fe,0x00000089,0x00010038,0x00050036,0x0000000e,0x00000011,0x00000000,0x0000000f, + 0x00030037,0x0000000d,0x00000010,0x000200f8,0x00000012,0x0004003d,0x0000000c,0x0000008c, + 0x00000010,0x0004007c,0x0000008d,0x0000008e,0x0000008c,0x00040071,0x0000000e,0x0000008f, + 0x0000008e,0x000200fe,0x0000008f,0x00010038,0x00050036,0x0000000c,0x00000016,0x00000000, + 0x00000014,0x00030037,0x00000013,0x00000015,0x000200f8,0x00000017,0x0004003d,0x0000000e, + 0x00000092,0x00000015,0x000500c7,0x0000000e,0x00000094,0x00000092,0x00000093,0x00040071, + 0x0000008d,0x00000095,0x00000094,0x0004007c,0x0000000c,0x00000096,0x00000095,0x000200fe, + 0x00000096,0x00010038,0x00050036,0x0000000e,0x0000001b,0x00000000,0x00000018,0x00030037, + 0x00000013,0x00000019,0x00030037,0x00000013,0x0000001a,0x000200f8,0x0000001c,0x0004003b, + 0x00000013,0x00000099,0x00000007,0x0004003b,0x00000013,0x0000009d,0x00000007,0x0004003b, + 0x00000013,0x000000a1,0x00000007,0x0004003b,0x00000013,0x000000a5,0x00000007,0x0004003d, + 0x0000000e,0x0000009a,0x00000019,0x0004003d,0x0000000e,0x0000009b,0x0000001a,0x000500c2, + 0x0000000e,0x0000009c,0x0000009a,0x0000009b,0x0003003e,0x00000099,0x0000009c,0x0004003d, + 0x0000000e,0x0000009e,0x0000001a,0x000500c4,0x0000000e,0x0000009f,0x0000007c,0x0000009e, + 0x00050082,0x0000000e,0x000000a0,0x0000009f,0x0000007c,0x0003003e,0x0000009d,0x000000a0, + 0x0004003d,0x0000000e,0x000000a2,0x00000019,0x0004003d,0x0000000e,0x000000a3,0x0000009d, + 0x000500c7,0x0000000e,0x000000a4,0x000000a2,0x000000a3,0x0003003e,0x000000a1,0x000000a4, + 0x0004003d,0x0000000e,0x000000a6,0x0000001a,0x00050082,0x0000000e,0x000000a7,0x000000a6, + 0x0000007c,0x000500c4,0x0000000e,0x000000a8,0x0000007c,0x000000a7,0x0003003e,0x000000a5, + 0x000000a8,0x0004003d,0x0000000e,0x000000a9,0x00000099,0x0004003d,0x0000000e,0x000000aa, + 0x000000a1,0x0004003d,0x0000000e,0x000000ab,0x000000a5,0x000500ac,0x00000053,0x000000ac, + 0x000000aa,0x000000ab,0x000400a8,0x00000053,0x000000ad,0x000000ac,0x000300f7,0x000000af, + 0x00000000,0x000400fa,0x000000ad,0x000000ae,0x000000af,0x000200f8,0x000000ae,0x0004003d, + 0x0000000e,0x000000b0,0x000000a1,0x0004003d,0x0000000e,0x000000b1,0x000000a5,0x000500aa, + 0x00000053,0x000000b2,0x000000b0,0x000000b1,0x000300f7,0x000000b4,0x00000000,0x000400fa, + 0x000000b2,0x000000b3,0x000000b4,0x000200f8,0x000000b3,0x0004003d,0x0000000e,0x000000b5, + 0x00000099,0x000500c7,0x0000000e,0x000000b6,0x000000b5,0x0000007c,0x000500ab,0x00000053, + 0x000000b8,0x000000b6,0x000000b7,0x000200f9,0x000000b4,0x000200f8,0x000000b4,0x000700f5, + 0x00000053,0x000000b9,0x000000b2,0x000000ae,0x000000b8,0x000000b3,0x000200f9,0x000000af, + 0x000200f8,0x000000af,0x000700f5,0x00000053,0x000000ba,0x000000ac,0x0000001c,0x000000b9, + 0x000000b4,0x000600a9,0x0000000e,0x000000bb,0x000000ba,0x0000007c,0x000000b7,0x00050080, + 0x0000000e,0x000000bc,0x000000a9,0x000000bb,0x000200fe,0x000000bc,0x00010038,0x00050036, + 0x0000000e,0x0000001f,0x00000000,0x0000001d,0x00030037,0x00000013,0x0000001e,0x000200f8, + 0x00000020,0x0004003b,0x000000bf,0x000000c0,0x00000007,0x0004003b,0x00000013,0x000000dc, + 0x00000007,0x0004003b,0x00000013,0x000000e2,0x00000007,0x0004003b,0x00000013,0x000000e8, + 0x00000007,0x0004003b,0x00000013,0x000000ef,0x00000007,0x0004003b,0x00000013,0x000000f6, + 0x00000007,0x0004003b,0x00000013,0x000000f9,0x00000007,0x0004003b,0x00000013,0x00000102, + 0x00000007,0x0004003b,0x00000013,0x00000105,0x00000007,0x0004003b,0x00000013,0x0000010e, + 0x00000007,0x0004003b,0x00000013,0x00000110,0x00000007,0x0004003b,0x00000013,0x00000115, + 0x00000007,0x0004003b,0x00000013,0x00000118,0x00000007,0x0004003b,0x00000013,0x0000011a, + 0x00000007,0x0004003b,0x00000013,0x0000011c,0x00000007,0x0004003b,0x00000013,0x00000130, + 0x00000007,0x0004003d,0x0000000e,0x000000c1,0x0000001e,0x000500c7,0x0000000e,0x000000c3, + 0x000000c1,0x000000c2,0x000500aa,0x00000053,0x000000c4,0x000000c3,0x000000c2,0x000300f7, + 0x000000c6,0x00000000,0x000400fa,0x000000c4,0x000000c5,0x000000c6,0x000200f8,0x000000c5, + 0x0004003d,0x0000000e,0x000000c7,0x0000001e,0x000500c7,0x0000000e,0x000000c9,0x000000c7, + 0x000000c8,0x000500ab,0x00000053,0x000000ca,0x000000c9,0x000000b7,0x000200f9,0x000000c6, + 0x000200f8,0x000000c6,0x000700f5,0x00000053,0x000000cb,0x000000c4,0x00000020,0x000000ca, + 0x000000c5,0x0003003e,0x000000c0,0x000000cb,0x0004003d,0x00000053,0x000000cc,0x000000c0, + 0x000300f7,0x000000ce,0x00000000,0x000400fa,0x000000cc,0x000000cd,0x000000ce,0x000200f8, + 0x000000cd,0x000200fe,0x000000b7,0x000200f8,0x000000ce,0x0004003d,0x0000000e,0x000000d0, + 0x0000001e,0x000500c7,0x0000000e,0x000000d2,0x000000d0,0x000000d1,0x000500aa,0x00000053, + 0x000000d3,0x000000d2,0x000000b7,0x000300f7,0x000000d5,0x00000000,0x000400fa,0x000000d3, + 0x000000d4,0x000000d5,0x000200f8,0x000000d4,0x0004003d,0x0000000e,0x000000d6,0x0000001e, + 0x000500c2,0x0000000e,0x000000d8,0x000000d6,0x000000d7,0x000500c7,0x0000000e,0x000000da, + 0x000000d8,0x000000d9,0x000200fe,0x000000da,0x000200f8,0x000000d5,0x0004003d,0x0000000e, + 0x000000dd,0x0000001e,0x000500c7,0x0000000e,0x000000df,0x000000dd,0x000000de,0x000500ab, + 0x00000053,0x000000e0,0x000000df,0x000000b7,0x000600a9,0x0000000e,0x000000e1,0x000000e0, + 0x000000d9,0x000000b7,0x0003003e,0x000000dc,0x000000e1,0x0004003d,0x0000000e,0x000000e3, + 0x0000001e,0x000500c2,0x0000000e,0x000000e5,0x000000e3,0x000000e4,0x000500c7,0x0000000e, + 0x000000e7,0x000000e5,0x000000e6,0x0003003e,0x000000e2,0x000000e7,0x0004003d,0x0000000e, + 0x000000e9,0x0000001e,0x000500c7,0x0000000e,0x000000ea,0x000000e9,0x000000c8,0x0003003e, + 0x000000e8,0x000000ea,0x0004003d,0x0000000e,0x000000eb,0x000000e2,0x000500aa,0x00000053, + 0x000000ec,0x000000eb,0x000000e6,0x000300f7,0x000000ee,0x00000000,0x000400fa,0x000000ec, + 0x000000ed,0x000000f1,0x000200f8,0x000000ed,0x0003003e,0x000000ef,0x000000f0,0x000200f9, + 0x000000ee,0x000200f8,0x000000f1,0x0004003d,0x0000000e,0x000000f2,0x000000e2,0x000500b2, + 0x00000053,0x000000f3,0x000000f2,0x000000d7,0x000300f7,0x000000f5,0x00000000,0x000400fa, + 0x000000f3,0x000000f4,0x00000114,0x000200f8,0x000000f4,0x0004003d,0x0000000e,0x000000f7, + 0x000000e2,0x000500aa,0x00000053,0x000000f8,0x000000f7,0x000000b7,0x000300f7,0x000000fb, + 0x00000000,0x000400fa,0x000000f8,0x000000fa,0x000000fd,0x000200f8,0x000000fa,0x0004003d, + 0x0000000e,0x000000fc,0x000000e8,0x0003003e,0x000000f9,0x000000fc,0x000200f9,0x000000fb, + 0x000200f8,0x000000fd,0x0004003d,0x0000000e,0x000000ff,0x000000e8,0x00050080,0x0000000e, + 0x00000100,0x000000fe,0x000000ff,0x0003003e,0x000000f9,0x00000100,0x000200f9,0x000000fb, + 0x000200f8,0x000000fb,0x0004003d,0x0000000e,0x00000101,0x000000f9,0x0003003e,0x000000f6, + 0x00000101,0x0004003d,0x0000000e,0x00000103,0x000000e2,0x000500aa,0x00000053,0x00000104, + 0x00000103,0x000000b7,0x000300f7,0x00000107,0x00000000,0x000400fa,0x00000104,0x00000106, + 0x00000109,0x000200f8,0x00000106,0x0003003e,0x00000105,0x00000108,0x000200f9,0x00000107, + 0x000200f8,0x00000109,0x0004003d,0x0000000e,0x0000010b,0x000000e2,0x00050082,0x0000000e, + 0x0000010c,0x0000010a,0x0000010b,0x0003003e,0x00000105,0x0000010c,0x000200f9,0x00000107, + 0x000200f8,0x00000107,0x0004003d,0x0000000e,0x0000010d,0x00000105,0x0003003e,0x00000102, + 0x0000010d,0x0004003d,0x0000000e,0x0000010f,0x000000f6,0x0003003e,0x0000010e,0x0000010f, + 0x0004003d,0x0000000e,0x00000111,0x00000102,0x0003003e,0x00000110,0x00000111,0x00060039, + 0x0000000e,0x00000112,0x0000001b,0x0000010e,0x00000110,0x0007000c,0x0000000e,0x00000113, + 0x00000001,0x00000026,0x00000112,0x000000d7,0x0003003e,0x000000ef,0x00000113,0x000200f9, + 0x000000f5,0x000200f8,0x00000114,0x0004003d,0x0000000e,0x00000116,0x000000e2,0x00050082, + 0x0000000e,0x00000117,0x00000116,0x000000d7,0x0003003e,0x00000115,0x00000117,0x0004003d, + 0x0000000e,0x0000011b,0x000000e8,0x0003003e,0x0000011a,0x0000011b,0x0003003e,0x0000011c, + 0x00000119,0x00060039,0x0000000e,0x0000011d,0x0000001b,0x0000011a,0x0000011c,0x0003003e, + 0x00000118,0x0000011d,0x0004003d,0x0000000e,0x0000011e,0x00000118,0x000500aa,0x00000053, + 0x0000011f,0x0000011e,0x000000d7,0x000300f7,0x00000121,0x00000000,0x000400fa,0x0000011f, + 0x00000120,0x00000121,0x000200f8,0x00000120,0x0003003e,0x00000118,0x000000b7,0x0004003d, + 0x0000000e,0x00000122,0x00000115,0x00050080,0x0000000e,0x00000123,0x00000122,0x0000007c, + 0x0003003e,0x00000115,0x00000123,0x000200f9,0x00000121,0x000200f8,0x00000121,0x0004003d, + 0x0000000e,0x00000124,0x00000115,0x000500ac,0x00000053,0x00000125,0x00000124,0x00000108, + 0x000400a8,0x00000053,0x00000126,0x00000125,0x000300f7,0x00000128,0x00000000,0x000400fa, + 0x00000126,0x00000127,0x00000128,0x000200f8,0x00000127,0x0004003d,0x0000000e,0x00000129, + 0x00000115,0x000500aa,0x00000053,0x0000012a,0x00000129,0x00000108,0x0004003d,0x0000000e, + 0x0000012b,0x00000118,0x000500ac,0x00000053,0x0000012d,0x0000012b,0x0000012c,0x000500a7, + 0x00000053,0x0000012e,0x0000012a,0x0000012d,0x000200f9,0x00000128,0x000200f8,0x00000128, + 0x000700f5,0x00000053,0x0000012f,0x00000125,0x00000121,0x0000012e,0x00000127,0x000300f7, + 0x00000132,0x00000000,0x000400fa,0x0000012f,0x00000131,0x00000133,0x000200f8,0x00000131, + 0x0003003e,0x00000130,0x000000f0,0x000200f9,0x00000132,0x000200f8,0x00000133,0x0004003d, + 0x0000000e,0x00000134,0x00000115,0x000500c4,0x0000000e,0x00000136,0x00000134,0x00000135, + 0x0004003d,0x0000000e,0x00000137,0x00000118,0x000500c5,0x0000000e,0x00000138,0x00000136, + 0x00000137,0x0003003e,0x00000130,0x00000138,0x000200f9,0x00000132,0x000200f8,0x00000132, + 0x0004003d,0x0000000e,0x00000139,0x00000130,0x0003003e,0x000000ef,0x00000139,0x000200f9, + 0x000000f5,0x000200f8,0x000000f5,0x000200f9,0x000000ee,0x000200f8,0x000000ee,0x0004003d, + 0x0000000e,0x0000013a,0x000000dc,0x0004003d,0x0000000e,0x0000013b,0x000000ef,0x000500c5, + 0x0000000e,0x0000013c,0x0000013a,0x0000013b,0x000200fe,0x0000013c,0x00010038,0x00050036, + 0x00000021,0x00000024,0x00000000,0x00000022,0x00030037,0x00000013,0x00000023,0x000200f8, + 0x00000025,0x0004003d,0x0000000e,0x0000013f,0x00000023,0x00040071,0x00000021,0x00000140, + 0x0000013f,0x000200fe,0x00000140,0x00010038,0x00050036,0x00000006,0x00000028,0x00000000, + 0x00000026,0x00030037,0x0000000d,0x00000027,0x000200f8,0x00000029,0x0004003b,0x00000013, + 0x00000143,0x00000007,0x0004003b,0x0000000d,0x00000144,0x00000007,0x0004003b,0x00000007, + 0x0000014a,0x00000007,0x0004003b,0x00000013,0x00000154,0x00000007,0x0004003d,0x0000000c, + 0x00000145,0x00000027,0x0003003e,0x00000144,0x00000145,0x00050039,0x0000000e,0x00000146, + 0x00000011,0x00000144,0x0003003e,0x00000143,0x00000146,0x0004003d,0x0000000e,0x00000147, + 0x00000143,0x000500ae,0x00000053,0x00000149,0x00000147,0x00000148,0x000300f7,0x0000014c, + 0x00000000,0x000400fa,0x00000149,0x0000014b,0x0000014e,0x000200f8,0x0000014b,0x0003003e, + 0x0000014a,0x0000014d,0x000200f9,0x0000014c,0x000200f8,0x0000014e,0x0004003d,0x0000000c, + 0x00000150,0x00000027,0x00040073,0x00000006,0x00000151,0x00000150,0x0004003d,0x0000000e, + 0x00000152,0x00000143,0x00050080,0x0000000e,0x00000153,0x00000152,0x0000007c,0x0003003e, + 0x00000154,0x00000153,0x00050039,0x0000000c,0x00000155,0x00000016,0x00000154,0x00040073, + 0x00000006,0x00000156,0x00000155,0x00050081,0x00000006,0x00000157,0x00000151,0x00000156, + 0x00050085,0x00000006,0x00000158,0x0000014f,0x00000157,0x0003003e,0x0000014a,0x00000158, + 0x000200f9,0x0000014c,0x000200f8,0x0000014c,0x0004003d,0x00000006,0x00000159,0x0000014a, + 0x000200fe,0x00000159,0x00010038,0x00050036,0x00000006,0x0000002b,0x00000000,0x00000026, + 0x00030037,0x0000000d,0x0000002a,0x000200f8,0x0000002c,0x0004003b,0x0000000d,0x0000015e, + 0x00000007,0x0004003b,0x00000013,0x00000162,0x00000007,0x0004003d,0x0000000c,0x0000015c, + 0x0000002a,0x00040073,0x00000006,0x0000015d,0x0000015c,0x0004003d,0x0000000c,0x0000015f, + 0x0000002a,0x0003003e,0x0000015e,0x0000015f,0x00050039,0x0000000e,0x00000160,0x00000011, + 0x0000015e,0x00050082,0x0000000e,0x00000161,0x00000160,0x0000007c,0x0003003e,0x00000162, + 0x00000161,0x00050039,0x0000000c,0x00000163,0x00000016,0x00000162,0x00040073,0x00000006, + 0x00000164,0x00000163,0x00050081,0x00000006,0x00000165,0x0000015d,0x00000164,0x00050085, + 0x00000006,0x00000166,0x0000014f,0x00000165,0x000200fe,0x00000166,0x00010038,0x00050036, + 0x0000000c,0x0000002f,0x00000000,0x0000002d,0x00030037,0x0000000d,0x0000002e,0x000200f8, + 0x00000030,0x0004003b,0x0000000d,0x00000169,0x00000007,0x0004003b,0x00000013,0x0000016d, + 0x00000007,0x0004003d,0x0000000c,0x0000016a,0x0000002e,0x0003003e,0x00000169,0x0000016a, + 0x00050039,0x0000000e,0x0000016b,0x00000011,0x00000169,0x00050080,0x0000000e,0x0000016c, + 0x0000016b,0x0000007c,0x0003003e,0x0000016d,0x0000016c,0x00050039,0x0000000c,0x0000016e, + 0x00000016,0x0000016d,0x000200fe,0x0000016e,0x00010038,0x00050036,0x0000000c,0x00000032, + 0x00000000,0x0000002d,0x00030037,0x0000000d,0x00000031,0x000200f8,0x00000033,0x0004003b, + 0x0000000d,0x00000171,0x00000007,0x0004003b,0x00000013,0x00000175,0x00000007,0x0004003d, + 0x0000000c,0x00000172,0x00000031,0x0003003e,0x00000171,0x00000172,0x00050039,0x0000000e, + 0x00000173,0x00000011,0x00000171,0x00050082,0x0000000e,0x00000174,0x00000173,0x0000007c, + 0x0003003e,0x00000175,0x00000174,0x00050039,0x0000000c,0x00000176,0x00000016,0x00000175, + 0x000200fe,0x00000176,0x00010038,0x00050036,0x0000000c,0x00000035,0x00000000,0x0000002d, + 0x00030037,0x0000000d,0x00000034,0x000200f8,0x00000036,0x0004003b,0x00000007,0x00000179, + 0x00000007,0x0004003b,0x0000000d,0x0000018d,0x00000007,0x0004003b,0x00000007,0x00000190, + 0x00000007,0x0004003b,0x0000019e,0x0000019f,0x00000007,0x0004003b,0x00000007,0x000001a9, + 0x00000007,0x0004003b,0x0000000d,0x000001aa,0x00000007,0x0004003b,0x0000000d,0x000001b3, + 0x00000007,0x0004003b,0x00000007,0x000001b6,0x00000007,0x0004003b,0x0000000d,0x000001b7, + 0x00000007,0x0004003b,0x0000000d,0x000001c3,0x00000007,0x0004003d,0x0000000c,0x0000017a, + 0x00000034,0x00040073,0x00000006,0x0000017b,0x0000017a,0x0003003e,0x00000179,0x0000017b, + 0x0004003d,0x00000006,0x0000017c,0x00000179,0x000500ba,0x00000053,0x0000017e,0x0000017c, + 0x0000017d,0x000400a8,0x00000053,0x0000017f,0x0000017e,0x000400a8,0x00000053,0x00000180, + 0x0000017f,0x000300f7,0x00000182,0x00000000,0x000400fa,0x00000180,0x00000181,0x00000182, + 0x000200f8,0x00000181,0x0004003d,0x00000006,0x00000183,0x00000179,0x0004009d,0x00000053, + 0x00000184,0x00000183,0x000200f9,0x00000182,0x000200f8,0x00000182,0x000700f5,0x00000053, + 0x00000185,0x0000017f,0x00000036,0x00000184,0x00000181,0x000300f7,0x00000187,0x00000000, + 0x000400fa,0x00000185,0x00000186,0x00000187,0x000200f8,0x00000186,0x0004003d,0x00000006, + 0x00000189,0x00000179,0x00050088,0x00000006,0x0000018a,0x00000188,0x00000189,0x00040073, + 0x0000000c,0x0000018b,0x0000018a,0x000200fe,0x0000018b,0x000200f8,0x00000187,0x0004003d, + 0x00000006,0x0000018e,0x00000179,0x00050088,0x00000006,0x0000018f,0x00000188,0x0000018e, + 0x0003003e,0x00000190,0x0000018f,0x00050039,0x00000006,0x00000191,0x0000000a,0x00000190, + 0x00040073,0x0000000c,0x00000192,0x00000191,0x0003003e,0x0000018d,0x00000192,0x0004003d, + 0x0000000c,0x00000193,0x0000018d,0x0004009d,0x00000053,0x00000194,0x00000193,0x0004003d, + 0x0000000c,0x00000195,0x0000018d,0x000500b4,0x00000053,0x00000197,0x00000195,0x00000196, + 0x000500a6,0x00000053,0x00000198,0x00000194,0x00000197,0x000300f7,0x0000019a,0x00000000, + 0x000400fa,0x00000198,0x00000199,0x0000019a,0x000200f8,0x00000199,0x0004003d,0x0000000c, + 0x0000019b,0x0000018d,0x000200fe,0x0000019b,0x000200f8,0x0000019a,0x0003003e,0x0000019f, + 0x000001a0,0x000200f9,0x000001a1,0x000200f8,0x000001a1,0x000400f6,0x000001a3,0x000001a4, + 0x00000000,0x000200f9,0x000001a5,0x000200f8,0x000001a5,0x0004003d,0x0000019d,0x000001a6, + 0x0000019f,0x000500b1,0x00000053,0x000001a8,0x000001a6,0x000001a7,0x000400fa,0x000001a8, + 0x000001a2,0x000001a3,0x000200f8,0x000001a2,0x0004003d,0x0000000c,0x000001ab,0x0000018d, + 0x0003003e,0x000001aa,0x000001ab,0x00050039,0x00000006,0x000001ac,0x00000028,0x000001aa, + 0x0004003d,0x00000006,0x000001ad,0x00000179,0x00050085,0x00000006,0x000001ae,0x000001ac, + 0x000001ad,0x0003003e,0x000001a9,0x000001ae,0x0004003d,0x00000006,0x000001af,0x000001a9, + 0x000500b8,0x00000053,0x000001b0,0x000001af,0x00000188,0x000300f7,0x000001b2,0x00000000, + 0x000400fa,0x000001b0,0x000001b1,0x000001b2,0x000200f8,0x000001b1,0x0004003d,0x0000000c, + 0x000001b4,0x0000018d,0x0003003e,0x000001b3,0x000001b4,0x00050039,0x0000000c,0x000001b5, + 0x0000002f,0x000001b3,0x0003003e,0x0000018d,0x000001b5,0x000200f9,0x000001b2,0x000200f8, + 0x000001b2,0x0004003d,0x0000000c,0x000001b8,0x0000018d,0x0003003e,0x000001b7,0x000001b8, + 0x00050039,0x00000006,0x000001b9,0x0000002b,0x000001b7,0x0004003d,0x00000006,0x000001ba, + 0x00000179,0x00050085,0x00000006,0x000001bb,0x000001b9,0x000001ba,0x0003003e,0x000001b6, + 0x000001bb,0x0004003d,0x0000000c,0x000001bc,0x0000018d,0x000500ba,0x00000053,0x000001bd, + 0x000001bc,0x00000196,0x0004003d,0x00000006,0x000001be,0x000001b6,0x000500ba,0x00000053, + 0x000001bf,0x000001be,0x00000188,0x000500a7,0x00000053,0x000001c0,0x000001bd,0x000001bf, + 0x000300f7,0x000001c2,0x00000000,0x000400fa,0x000001c0,0x000001c1,0x000001c2,0x000200f8, + 0x000001c1,0x0004003d,0x0000000c,0x000001c4,0x0000018d,0x0003003e,0x000001c3,0x000001c4, + 0x00050039,0x0000000c,0x000001c5,0x00000032,0x000001c3,0x0003003e,0x0000018d,0x000001c5, + 0x000200f9,0x000001c2,0x000200f8,0x000001c2,0x000200f9,0x000001a4,0x000200f8,0x000001a4, + 0x0004003d,0x0000019d,0x000001c6,0x0000019f,0x00050080,0x0000019d,0x000001c8,0x000001c6, + 0x000001c7,0x0003003e,0x0000019f,0x000001c8,0x000200f9,0x000001a1,0x000200f8,0x000001a3, + 0x0004003d,0x0000000c,0x000001c9,0x0000018d,0x000200fe,0x000001c9,0x00010038,0x00050036, + 0x0000000e,0x00000038,0x00000000,0x0000001d,0x00030037,0x00000013,0x00000037,0x000200f8, + 0x00000039,0x0004003b,0x00000013,0x000001cc,0x00000007,0x0004003b,0x00000013,0x000001d0, + 0x00000007,0x0004003b,0x00000013,0x000001d3,0x00000007,0x0004003b,0x00000013,0x000001da, + 0x00000007,0x0004003d,0x0000000e,0x000001cd,0x00000037,0x000500c2,0x0000000e,0x000001cf, + 0x000001cd,0x000001ce,0x0003003e,0x000001cc,0x000001cf,0x0004003d,0x0000000e,0x000001d1, + 0x00000037,0x000500c7,0x0000000e,0x000001d2,0x000001d1,0x00000108,0x0003003e,0x000001d0, + 0x000001d2,0x0004003d,0x0000000e,0x000001d4,0x000001cc,0x000500c7,0x0000000e,0x000001d5, + 0x000001d4,0x0000007c,0x00050084,0x0000000e,0x000001d6,0x000001d5,0x000001ce,0x0004003d, + 0x0000000e,0x000001d7,0x000001d0,0x000500c7,0x0000000e,0x000001d8,0x000001d7,0x00000135, + 0x00050080,0x0000000e,0x000001d9,0x000001d6,0x000001d8,0x0003003e,0x000001d3,0x000001d9, + 0x0004003d,0x0000000e,0x000001db,0x000001cc,0x000500c2,0x0000000e,0x000001dc,0x000001db, + 0x0000007c,0x00050084,0x0000000e,0x000001dd,0x000001dc,0x000001ce,0x0004003d,0x0000000e, + 0x000001de,0x000001d0,0x000500c2,0x0000000e,0x000001e0,0x000001de,0x000001df,0x00050080, + 0x0000000e,0x000001e1,0x000001dd,0x000001e0,0x0003003e,0x000001da,0x000001e1,0x0004003d, + 0x0000000e,0x000001e2,0x000001da,0x00050084,0x0000000e,0x000001e3,0x000001e2,0x000000d7, + 0x0004003d,0x0000000e,0x000001e4,0x000001d3,0x00050080,0x0000000e,0x000001e5,0x000001e3, + 0x000001e4,0x000200fe,0x000001e5,0x00010038,0x00050036,0x0000000c,0x0000003b,0x00000000, + 0x0000002d,0x00030037,0x0000000d,0x0000003a,0x000200f8,0x0000003c,0x0004003b,0x00000007, + 0x000001e8,0x00000007,0x0004003b,0x0000000d,0x000001ee,0x00000007,0x0004003b,0x00000007, + 0x000001ef,0x00000007,0x0004003b,0x00000013,0x000001f6,0x00000007,0x0004003b,0x0000000d, + 0x000001f7,0x00000007,0x0004003b,0x00000013,0x000001fa,0x00000007,0x0004003b,0x00000013, + 0x00000200,0x00000007,0x0004003d,0x0000000c,0x000001e9,0x0000003a,0x00040073,0x00000006, + 0x000001ea,0x000001e9,0x0008000c,0x00000006,0x000001ed,0x00000001,0x00000032,0x000001ea, + 0x000001eb,0x000001ec,0x0003003e,0x000001e8,0x000001ed,0x0004003d,0x00000006,0x000001f0, + 0x000001e8,0x0003003e,0x000001ef,0x000001f0,0x00050039,0x00000006,0x000001f1,0x0000000a, + 0x000001ef,0x00040073,0x0000000c,0x000001f2,0x000001f1,0x0008000c,0x0000000c,0x000001f5, + 0x00000001,0x0000002b,0x000001f2,0x000001f3,0x000001f4,0x0003003e,0x000001ee,0x000001f5, + 0x0004003d,0x0000000c,0x000001f8,0x000001ee,0x0003003e,0x000001f7,0x000001f8,0x00050039, + 0x0000000e,0x000001f9,0x00000011,0x000001f7,0x0003003e,0x000001f6,0x000001f9,0x0004003d, + 0x0000000e,0x000001fb,0x000001f6,0x000500c4,0x0000000e,0x000001fd,0x000001fb,0x000001fc, + 0x00050080,0x0000000e,0x000001fe,0x000001fd,0x000000de,0x000500c7,0x0000000e,0x000001ff, + 0x000001fe,0x00000093,0x0003003e,0x000001fa,0x000001ff,0x0004003d,0x0000000e,0x00000201, + 0x000001fa,0x0003003e,0x00000200,0x00000201,0x00050039,0x0000000c,0x00000202,0x00000016, + 0x00000200,0x000200fe,0x00000202,0x00010038,0x00050036,0x0000000c,0x00000041,0x00000000, + 0x0000003d,0x00030037,0x00000013,0x0000003e,0x00030037,0x00000013,0x0000003f,0x00030037, + 0x00000013,0x00000040,0x000200f8,0x00000042,0x0004003b,0x00000013,0x00000205,0x00000007, + 0x0004003b,0x0000000d,0x0000020a,0x00000007,0x0004003b,0x0000000d,0x0000021f,0x00000007, + 0x0004003b,0x0000000d,0x00000230,0x00000007,0x0004003b,0x0000000d,0x00000242,0x00000007, + 0x0004003b,0x0000000d,0x00000254,0x00000007,0x0004003b,0x0000000d,0x00000258,0x00000007, + 0x0004003d,0x0000000e,0x00000206,0x0000003f,0x00050084,0x0000000e,0x00000207,0x00000206, + 0x000001df,0x0004003d,0x0000000e,0x00000208,0x00000040,0x00050080,0x0000000e,0x00000209, + 0x00000207,0x00000208,0x0003003e,0x00000205,0x00000209,0x0004003d,0x0000000e,0x0000020f, + 0x0000003e,0x00050084,0x0000000e,0x00000211,0x0000020f,0x00000210,0x0004003d,0x0000000e, + 0x00000212,0x00000205,0x00050080,0x0000000e,0x00000213,0x00000211,0x00000212,0x00050041, + 0x00000214,0x00000215,0x0000020e,0x00000213,0x0006003d,0x0000000c,0x00000216,0x00000215, + 0x00000030,0x000001df,0x0004003d,0x0000000e,0x00000217,0x0000003e,0x00050084,0x0000000e, + 0x00000218,0x00000217,0x00000210,0x0004003d,0x0000000e,0x00000219,0x00000205,0x00050080, + 0x0000000e,0x0000021a,0x00000218,0x00000219,0x00050080,0x0000000e,0x0000021b,0x0000021a, + 0x000000d7,0x00050041,0x00000214,0x0000021c,0x0000020e,0x0000021b,0x0006003d,0x0000000c, + 0x0000021d,0x0000021c,0x00000030,0x000001df,0x00050081,0x0000000c,0x0000021e,0x00000216, + 0x0000021d,0x0003003e,0x0000020a,0x0000021e,0x0004003d,0x0000000e,0x00000220,0x0000003e, + 0x00050084,0x0000000e,0x00000221,0x00000220,0x00000210,0x0004003d,0x0000000e,0x00000222, + 0x00000205,0x00050080,0x0000000e,0x00000223,0x00000221,0x00000222,0x00050080,0x0000000e, + 0x00000224,0x00000223,0x0000010a,0x00050041,0x00000214,0x00000225,0x0000020e,0x00000224, + 0x0006003d,0x0000000c,0x00000226,0x00000225,0x00000030,0x000001df,0x0004003d,0x0000000e, + 0x00000227,0x0000003e,0x00050084,0x0000000e,0x00000228,0x00000227,0x00000210,0x0004003d, + 0x0000000e,0x00000229,0x00000205,0x00050080,0x0000000e,0x0000022a,0x00000228,0x00000229, + 0x00050080,0x0000000e,0x0000022c,0x0000022a,0x0000022b,0x00050041,0x00000214,0x0000022d, + 0x0000020e,0x0000022c,0x0006003d,0x0000000c,0x0000022e,0x0000022d,0x00000030,0x000001df, + 0x00050081,0x0000000c,0x0000022f,0x00000226,0x0000022e,0x0003003e,0x0000021f,0x0000022f, + 0x0004003d,0x0000000e,0x00000231,0x0000003e,0x00050084,0x0000000e,0x00000232,0x00000231, + 0x00000210,0x0004003d,0x0000000e,0x00000233,0x00000205,0x00050080,0x0000000e,0x00000234, + 0x00000232,0x00000233,0x00050080,0x0000000e,0x00000236,0x00000234,0x00000235,0x00050041, + 0x00000214,0x00000237,0x0000020e,0x00000236,0x0006003d,0x0000000c,0x00000238,0x00000237, + 0x00000030,0x000001df,0x0004003d,0x0000000e,0x00000239,0x0000003e,0x00050084,0x0000000e, + 0x0000023a,0x00000239,0x00000210,0x0004003d,0x0000000e,0x0000023b,0x00000205,0x00050080, + 0x0000000e,0x0000023c,0x0000023a,0x0000023b,0x00050080,0x0000000e,0x0000023e,0x0000023c, + 0x0000023d,0x00050041,0x00000214,0x0000023f,0x0000020e,0x0000023e,0x0006003d,0x0000000c, + 0x00000240,0x0000023f,0x00000030,0x000001df,0x00050081,0x0000000c,0x00000241,0x00000238, + 0x00000240,0x0003003e,0x00000230,0x00000241,0x0004003d,0x0000000e,0x00000243,0x0000003e, + 0x00050084,0x0000000e,0x00000244,0x00000243,0x00000210,0x0004003d,0x0000000e,0x00000245, + 0x00000205,0x00050080,0x0000000e,0x00000246,0x00000244,0x00000245,0x00050080,0x0000000e, + 0x00000248,0x00000246,0x00000247,0x00050041,0x00000214,0x00000249,0x0000020e,0x00000248, + 0x0006003d,0x0000000c,0x0000024a,0x00000249,0x00000030,0x000001df,0x0004003d,0x0000000e, + 0x0000024b,0x0000003e,0x00050084,0x0000000e,0x0000024c,0x0000024b,0x00000210,0x0004003d, + 0x0000000e,0x0000024d,0x00000205,0x00050080,0x0000000e,0x0000024e,0x0000024c,0x0000024d, + 0x00050080,0x0000000e,0x00000250,0x0000024e,0x0000024f,0x00050041,0x00000214,0x00000251, + 0x0000020e,0x00000250,0x0006003d,0x0000000c,0x00000252,0x00000251,0x00000030,0x000001df, + 0x00050081,0x0000000c,0x00000253,0x0000024a,0x00000252,0x0003003e,0x00000242,0x00000253, + 0x0004003d,0x0000000c,0x00000255,0x0000020a,0x0004003d,0x0000000c,0x00000256,0x0000021f, + 0x00050081,0x0000000c,0x00000257,0x00000255,0x00000256,0x0003003e,0x00000254,0x00000257, + 0x0004003d,0x0000000c,0x00000259,0x00000254,0x0004003d,0x0000000c,0x0000025a,0x00000230, + 0x00050081,0x0000000c,0x0000025b,0x00000259,0x0000025a,0x0003003e,0x00000258,0x0000025b, + 0x0004003d,0x0000000c,0x0000025c,0x00000258,0x0004003d,0x0000000c,0x0000025d,0x00000242, + 0x00050081,0x0000000c,0x0000025e,0x0000025c,0x0000025d,0x000200fe,0x0000025e,0x00010038, + 0x00050036,0x0000000c,0x00000044,0x00000000,0x00000014,0x00030037,0x00000013,0x00000043, + 0x000200f8,0x00000045,0x0004003b,0x0000000d,0x00000261,0x00000007,0x0004003b,0x00000013, + 0x00000262,0x00000007,0x0004003b,0x00000013,0x00000264,0x00000007,0x0004003b,0x00000013, + 0x00000265,0x00000007,0x0004003b,0x00000013,0x00000267,0x00000007,0x0004003b,0x00000013, + 0x00000269,0x00000007,0x0004003b,0x00000013,0x0000026a,0x00000007,0x0004003b,0x0000000d, + 0x0000026d,0x00000007,0x0004003b,0x00000013,0x0000026f,0x00000007,0x0004003b,0x00000013, + 0x00000271,0x00000007,0x0004003b,0x00000013,0x00000272,0x00000007,0x0004003b,0x0000000d, + 0x00000275,0x00000007,0x0004003b,0x00000013,0x00000277,0x00000007,0x0004003b,0x00000013, + 0x00000279,0x00000007,0x0004003b,0x00000013,0x0000027a,0x00000007,0x0004003b,0x0000000d, + 0x0000027d,0x00000007,0x0004003b,0x00000013,0x0000027e,0x00000007,0x0004003b,0x00000013, + 0x00000280,0x00000007,0x0004003b,0x00000013,0x00000281,0x00000007,0x0004003b,0x00000013, + 0x00000283,0x00000007,0x0004003b,0x00000013,0x00000285,0x00000007,0x0004003b,0x00000013, + 0x00000286,0x00000007,0x0004003b,0x0000000d,0x00000289,0x00000007,0x0004003b,0x00000013, + 0x0000028b,0x00000007,0x0004003b,0x00000013,0x0000028d,0x00000007,0x0004003b,0x00000013, + 0x0000028e,0x00000007,0x0004003b,0x0000000d,0x00000291,0x00000007,0x0004003b,0x00000013, + 0x00000293,0x00000007,0x0004003b,0x00000013,0x00000295,0x00000007,0x0004003b,0x00000013, + 0x00000296,0x00000007,0x0004003d,0x0000000e,0x00000263,0x00000043,0x0003003e,0x00000262, + 0x00000263,0x0003003e,0x00000264,0x000000b7,0x0003003e,0x00000265,0x000000b7,0x00070039, + 0x0000000c,0x00000266,0x00000041,0x00000262,0x00000264,0x00000265,0x0004003d,0x0000000e, + 0x00000268,0x00000043,0x0003003e,0x00000267,0x00000268,0x0003003e,0x00000269,0x0000007c, + 0x0003003e,0x0000026a,0x000000b7,0x00070039,0x0000000c,0x0000026b,0x00000041,0x00000267, + 0x00000269,0x0000026a,0x00050081,0x0000000c,0x0000026c,0x00000266,0x0000026b,0x0003003e, + 0x00000261,0x0000026c,0x0004003d,0x0000000c,0x0000026e,0x00000261,0x0004003d,0x0000000e, + 0x00000270,0x00000043,0x0003003e,0x0000026f,0x00000270,0x0003003e,0x00000271,0x000001df, + 0x0003003e,0x00000272,0x000000b7,0x00070039,0x0000000c,0x00000273,0x00000041,0x0000026f, + 0x00000271,0x00000272,0x00050081,0x0000000c,0x00000274,0x0000026e,0x00000273,0x0003003e, + 0x0000026d,0x00000274,0x0004003d,0x0000000c,0x00000276,0x0000026d,0x0004003d,0x0000000e, + 0x00000278,0x00000043,0x0003003e,0x00000277,0x00000278,0x0003003e,0x00000279,0x00000135, + 0x0003003e,0x0000027a,0x000000b7,0x00070039,0x0000000c,0x0000027b,0x00000041,0x00000277, + 0x00000279,0x0000027a,0x00050081,0x0000000c,0x0000027c,0x00000276,0x0000027b,0x0003003e, + 0x00000275,0x0000027c,0x0004003d,0x0000000e,0x0000027f,0x00000043,0x0003003e,0x0000027e, + 0x0000027f,0x0003003e,0x00000280,0x000000b7,0x0003003e,0x00000281,0x0000007c,0x00070039, + 0x0000000c,0x00000282,0x00000041,0x0000027e,0x00000280,0x00000281,0x0004003d,0x0000000e, + 0x00000284,0x00000043,0x0003003e,0x00000283,0x00000284,0x0003003e,0x00000285,0x0000007c, + 0x0003003e,0x00000286,0x0000007c,0x00070039,0x0000000c,0x00000287,0x00000041,0x00000283, + 0x00000285,0x00000286,0x00050081,0x0000000c,0x00000288,0x00000282,0x00000287,0x0003003e, + 0x0000027d,0x00000288,0x0004003d,0x0000000c,0x0000028a,0x0000027d,0x0004003d,0x0000000e, + 0x0000028c,0x00000043,0x0003003e,0x0000028b,0x0000028c,0x0003003e,0x0000028d,0x000001df, + 0x0003003e,0x0000028e,0x0000007c,0x00070039,0x0000000c,0x0000028f,0x00000041,0x0000028b, + 0x0000028d,0x0000028e,0x00050081,0x0000000c,0x00000290,0x0000028a,0x0000028f,0x0003003e, + 0x00000289,0x00000290,0x0004003d,0x0000000c,0x00000292,0x00000289,0x0004003d,0x0000000e, + 0x00000294,0x00000043,0x0003003e,0x00000293,0x00000294,0x0003003e,0x00000295,0x00000135, + 0x0003003e,0x00000296,0x0000007c,0x00070039,0x0000000c,0x00000297,0x00000041,0x00000293, + 0x00000295,0x00000296,0x00050081,0x0000000c,0x00000298,0x00000292,0x00000297,0x0003003e, + 0x00000291,0x00000298,0x0004003d,0x0000000c,0x00000299,0x00000275,0x0004003d,0x0000000c, + 0x0000029a,0x00000291,0x00050081,0x0000000c,0x0000029b,0x00000299,0x0000029a,0x000200fe, + 0x0000029b,0x00010038, +}; +inline constexpr uint32_t k_e4m3_k16_f32__global_attend[] = { + 0x07230203,0x00010600,0x0008000b,0x000004e1,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x00000027,0x00020011,0x0000003d,0x00020011, + 0x00001074,0x00020011,0x00001075,0x00020011,0x00001160,0x00020011,0x000014e1,0x00020011, + 0x00001786,0x0005000a,0x5f565053,0x5f545845,0x616f6c66,0x00003874,0x0008000a,0x5f565053, + 0x5f52484b,0x706f6f63,0x74617265,0x5f657669,0x7274616d,0x00007869,0x0006000b,0x00000001, + 0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000003,0x0010000f, + 0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000257,0x000002e1,0x000002e6,0x000002ef, + 0x00000308,0x0000032d,0x0000038a,0x000003d2,0x000003ed,0x00000401,0x000004cc,0x00060010, + 0x00000004,0x00000011,0x00000020,0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc, + 0x00090004,0x455f4c47,0x635f5458,0x72746e6f,0x665f6c6f,0x5f776f6c,0x72747461,0x74756269, + 0x00007365,0x00060004,0x455f4c47,0x665f5458,0x74616f6c,0x6d34655f,0x00000033,0x00080004, + 0x455f4c47,0x735f5458,0x65646168,0x36315f72,0x5f746962,0x726f7473,0x00656761,0x00080004, + 0x455f4c47,0x735f5458,0x65646168,0x62385f72,0x735f7469,0x61726f74,0x00006567,0x000b0004, + 0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d, + 0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79, + 0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45, + 0x64756c63,0x69645f65,0x74636572,0x00657669,0x00080004,0x4b5f4c47,0x635f5248,0x65706f6f, + 0x69746172,0x6d5f6576,0x69727461,0x00000078,0x00090004,0x4b5f4c47,0x6d5f5248,0x726f6d65, + 0x63735f79,0x5f65706f,0x616d6573,0x6369746e,0x00000073,0x00090004,0x4b5f4c47,0x735f5248, + 0x65646168,0x75735f72,0x6f726762,0x625f7075,0x63697361,0x00000000,0x00040005,0x00000004, + 0x6e69616d,0x00000000,0x00060005,0x0000000a,0x6e756f72,0x36314664,0x3b316628,0x00000000, + 0x00040005,0x00000009,0x756c6176,0x00000065,0x00060005,0x00000011,0x42363166,0x28737469, + 0x31363166,0x0000003b,0x00040005,0x00000010,0x756c6176,0x00000065,0x00060005,0x00000016, + 0x46363166,0x426d6f72,0x28737469,0x003b3175,0x00040005,0x00000015,0x73746962,0x00000000, + 0x00060005,0x0000001b,0x66696873,0x656e5274,0x3b317528,0x003b3175,0x00040005,0x00000019, + 0x756c6176,0x00000065,0x00040005,0x0000001a,0x66696873,0x00000074,0x00080005,0x0000001f, + 0x336d3465,0x65646f43,0x6d6f7246,0x42363146,0x28737469,0x003b3175,0x00050005,0x0000001e, + 0x666c6168,0x73746942,0x00000000,0x00080005,0x00000023,0x666c6168,0x7064694d,0x746e696f, + 0x766f6241,0x31662865,0x003b3136,0x00030005,0x00000022,0x00000068,0x00080005,0x00000026, + 0x666c6168,0x7064694d,0x746e696f,0x6f6c6542,0x31662877,0x003b3136,0x00030005,0x00000025, + 0x00000068,0x00060005,0x0000002a,0x666c6168,0x766f6241,0x31662865,0x003b3136,0x00030005, + 0x00000029,0x00000068,0x00060005,0x0000002d,0x666c6168,0x6f6c6542,0x31662877,0x003b3136, + 0x00030005,0x0000002c,0x00000068,0x00080005,0x00000030,0x69636572,0x636f7270,0x61486c61, + 0x6628666c,0x3b313631,0x00000000,0x00030005,0x0000002f,0x00000078,0x00080005,0x00000036, + 0x48616d66,0x28666c61,0x31363166,0x3631663b,0x31663b31,0x003b3136,0x00030005,0x00000033, + 0x00000061,0x00030005,0x00000034,0x00000062,0x00030005,0x00000035,0x00000063,0x00070005, + 0x00000039,0x45746976,0x65577078,0x74686769,0x36316628,0x00003b31,0x00040005,0x00000038, + 0x726f6373,0x00000065,0x00090005,0x00000040,0x74666f73,0x5078616d,0x28726961,0x753b3175, + 0x31753b31,0x3b31753b,0x00000000,0x00030005,0x0000003c,0x00776f72,0x00040005,0x0000003d, + 0x65736162,0x00000000,0x00040005,0x0000003e,0x72696170,0x00000000,0x00040005,0x0000003f, + 0x69726170,0x00007974,0x00070005,0x00000045,0x74666f73,0x3678616d,0x31752834,0x3b31753b, + 0x00000000,0x00030005,0x00000043,0x00776f72,0x00040005,0x00000044,0x65736162,0x00000000, + 0x00040005,0x00000047,0x73746962,0x00000000,0x00040005,0x0000004a,0x6e676973,0x00000000, + 0x00050005,0x0000004e,0x6e67616d,0x64757469,0x00000065,0x00040005,0x00000068,0x6c616373, + 0x00006465,0x00030005,0x00000079,0x0062736c,0x00040005,0x0000007f,0x6e756f72,0x00646564, + 0x00050005,0x0000009a,0x746f7571,0x746e6569,0x00000000,0x00060005,0x0000009e,0x616d6572, + 0x65646e69,0x73614d72,0x0000006b,0x00050005,0x000000a2,0x616d6572,0x65646e69,0x00000072, + 0x00040005,0x000000a6,0x666c6168,0x00796177,0x00040005,0x000000c1,0x614e7369,0x0000006e, + 0x00050005,0x000000dd,0x6167656e,0x65766974,0x00000000,0x00050005,0x000000e3,0x6f707865, + 0x746e656e,0x00000000,0x00050005,0x000000e9,0x746e616d,0x61737369,0x00000000,0x00040005, + 0x000000f0,0x65646f63,0x00000000,0x00050005,0x000000f7,0x6e676973,0x63696669,0x00646e61, + 0x00040005,0x00000103,0x66696873,0x00000074,0x00040005,0x0000010f,0x61726170,0x0000006d, + 0x00040005,0x00000111,0x61726170,0x0000006d,0x00050005,0x00000116,0x78453465,0x656e6f70, + 0x0000746e,0x00050005,0x00000119,0x614d3465,0x7369746e,0x00006173,0x00040005,0x0000011b, + 0x61726170,0x0000006d,0x00040005,0x0000011d,0x61726170,0x0000006d,0x00040005,0x00000140, + 0x73746962,0x00000000,0x00040005,0x00000141,0x61726170,0x0000006d,0x00040005,0x00000151, + 0x61726170,0x0000006d,0x00040005,0x0000015b,0x61726170,0x0000006d,0x00040005,0x0000015f, + 0x61726170,0x0000006d,0x00040005,0x00000166,0x61726170,0x0000006d,0x00040005,0x0000016a, + 0x61726170,0x0000006d,0x00040005,0x0000016e,0x61726170,0x0000006d,0x00040005,0x00000172, + 0x61726170,0x0000006d,0x00030005,0x00000176,0x00006678,0x00030005,0x0000018a,0x00000068, + 0x00040005,0x0000018d,0x61726170,0x0000006d,0x00030005,0x0000019c,0x00000069,0x00030005, + 0x000001a6,0x00007075,0x00040005,0x000001a7,0x61726170,0x0000006d,0x00040005,0x000001b0, + 0x61726170,0x0000006d,0x00040005,0x000001b3,0x6e776f64,0x00000000,0x00040005,0x000001b4, + 0x61726170,0x0000006d,0x00040005,0x000001c0,0x61726170,0x0000006d,0x00030005,0x000001c9, + 0x00000070,0x00030005,0x000001cf,0x00000074,0x00030005,0x000001d4,0x00007662,0x00030005, + 0x000001d8,0x00007661,0x00030005,0x000001dc,0x00000065,0x00050005,0x000001ef,0x6f707865, + 0x746e656e,0x00000000,0x00030005,0x000001fc,0x00706c75,0x00040005,0x00000204,0x70657473, + 0x00000073,0x00040005,0x00000221,0x61726170,0x0000006d,0x00040005,0x00000225,0x61726170, + 0x0000006d,0x00040005,0x0000022b,0x69666661,0x0000656e,0x00040005,0x0000022e,0x61726170, + 0x0000006d,0x00040005,0x00000230,0x61726170,0x0000006d,0x00040005,0x00000231,0x61726170, + 0x0000006d,0x00040005,0x00000237,0x73746962,0x00000000,0x00040005,0x00000238,0x61726170, + 0x0000006d,0x00060005,0x0000023b,0x6f707865,0x746e656e,0x426c6169,0x00737469,0x00040005, + 0x00000242,0x61726170,0x0000006d,0x00030005,0x00000247,0x0079656b,0x00060005,0x00000249, + 0x44444150,0x545f4445,0x4e454b4f,0x00000053,0x00030005,0x00000253,0x00000061,0x00040005, + 0x00000257,0x726f6373,0x00007365,0x00030005,0x00000261,0x00000062,0x00030005,0x0000026c, + 0x00000063,0x00030005,0x00000278,0x00000064,0x00030005,0x00000284,0x00006261,0x00030005, + 0x00000288,0x00636261,0x00030005,0x00000291,0x00003065,0x00040005,0x00000292,0x61726170, + 0x0000006d,0x00040005,0x00000294,0x61726170,0x0000006d,0x00040005,0x00000296,0x61726170, + 0x0000006d,0x00040005,0x00000297,0x61726170,0x0000006d,0x00040005,0x00000299,0x61726170, + 0x0000006d,0x00040005,0x0000029b,0x61726170,0x0000006d,0x00040005,0x0000029d,0x61726170, + 0x0000006d,0x00040005,0x0000029e,0x61726170,0x0000006d,0x00030005,0x000002a1,0x00003165, + 0x00040005,0x000002a3,0x61726170,0x0000006d,0x00040005,0x000002a5,0x61726170,0x0000006d, + 0x00040005,0x000002a7,0x61726170,0x0000006d,0x00040005,0x000002a8,0x61726170,0x0000006d, + 0x00040005,0x000002ab,0x6e657665,0x00000000,0x00040005,0x000002ad,0x61726170,0x0000006d, + 0x00040005,0x000002af,0x61726170,0x0000006d,0x00040005,0x000002b1,0x61726170,0x0000006d, + 0x00040005,0x000002b2,0x61726170,0x0000006d,0x00030005,0x000002b5,0x0000306f,0x00040005, + 0x000002b6,0x61726170,0x0000006d,0x00040005,0x000002b8,0x61726170,0x0000006d,0x00040005, + 0x000002ba,0x61726170,0x0000006d,0x00040005,0x000002bb,0x61726170,0x0000006d,0x00040005, + 0x000002bd,0x61726170,0x0000006d,0x00040005,0x000002bf,0x61726170,0x0000006d,0x00040005, + 0x000002c1,0x61726170,0x0000006d,0x00040005,0x000002c2,0x61726170,0x0000006d,0x00030005, + 0x000002c5,0x0000316f,0x00040005,0x000002c7,0x61726170,0x0000006d,0x00040005,0x000002c9, + 0x61726170,0x0000006d,0x00040005,0x000002cb,0x61726170,0x0000006d,0x00040005,0x000002cc, + 0x61726170,0x0000006d,0x00030005,0x000002cf,0x0064646f,0x00040005,0x000002d1,0x61726170, + 0x0000006d,0x00040005,0x000002d3,0x61726170,0x0000006d,0x00040005,0x000002d5,0x61726170, + 0x0000006d,0x00040005,0x000002d6,0x61726170,0x0000006d,0x00040005,0x000002de,0x656e616c, + 0x00000000,0x00080005,0x000002e1,0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163,0x44496e6f, + 0x00000000,0x00040005,0x000002e5,0x64616568,0x00000000,0x00060005,0x000002e6,0x575f6c67, + 0x476b726f,0x70756f72,0x00004449,0x00040005,0x000002e9,0x6c695471,0x00000065,0x00040005, + 0x000002ec,0x69727473,0x00336564,0x00040005,0x000002ed,0x68737550,0x00000000,0x00050006, + 0x000002ed,0x00000000,0x656b6f74,0x0000736e,0x00050006,0x000002ed,0x00000001,0x64616568, + 0x00000073,0x00060006,0x000002ed,0x00000002,0x6e616863,0x736c656e,0x00000000,0x00030005, + 0x000002ef,0x00006370,0x00050005,0x000002f4,0x64616568,0x65736142,0x00000000,0x00040005, + 0x000002f8,0x73614271,0x00000065,0x00040005,0x000002ff,0x3079656b,0x00000000,0x00030005, + 0x00000307,0x00000074,0x00060005,0x00000308,0x535f6c67,0x72676275,0x4970756f,0x00000044, + 0x00030005,0x00000311,0x00003071,0x00030005,0x00000315,0x0000306b,0x00030005,0x0000031b, + 0x00000063,0x00030005,0x0000031d,0x00005f73,0x00030005,0x00000328,0x00005f61,0x00050005, + 0x0000032b,0x6d726f4e,0x7a696c61,0x00006465,0x00040006,0x0000032b,0x00000000,0x00766b71, + 0x00030005,0x0000032d,0x00000000,0x00030005,0x00000344,0x00005f62,0x00030005,0x00000364, + 0x00005f72,0x00040005,0x00000370,0x61726170,0x0000006d,0x00030005,0x00000379,0x00005f68, + 0x00060005,0x0000038a,0x4e5f6c67,0x75536d75,0x6f726762,0x00737075,0x00030005,0x00000392, + 0x00000069,0x00040005,0x0000039e,0x61726170,0x0000006d,0x00040005,0x000003a9,0x61746f74, + 0x0000006c,0x00040005,0x000003aa,0x65736162,0x00000000,0x00040005,0x000003b3,0x61726170, + 0x0000006d,0x00040005,0x000003b5,0x61726170,0x0000006d,0x00040005,0x000003bb,0x64646170, + 0x00676e69,0x00050005,0x000003c3,0x72726f63,0x69746365,0x00006e6f,0x00040005,0x000003c4, + 0x61726170,0x0000006d,0x00040005,0x000003ca,0x61726170,0x0000006d,0x00050005,0x000003d2, + 0x69636572,0x636f7270,0x00736c61,0x00040005,0x000003d4,0x61726170,0x0000006d,0x00030005, + 0x000003d8,0x00000069,0x00040005,0x000003e2,0x65646f63,0x00000000,0x00040005,0x000003e4, + 0x61726170,0x0000006d,0x00040005,0x000003e8,0x61726170,0x0000006d,0x00040005,0x000003ed, + 0x67696577,0x00737468,0x00030005,0x000003f5,0x00000069,0x00040005,0x00000401,0x7074756f, + 0x00737475,0x00040005,0x00000406,0x3079656b,0x00000000,0x00030005,0x0000040e,0x00000074, + 0x00030005,0x00000417,0x00003071,0x00030005,0x0000041b,0x00003063,0x00030005,0x0000041f, + 0x00005f68,0x00030005,0x0000042a,0x00000063,0x00030005,0x0000042d,0x0000626b,0x00030005, + 0x00000435,0x00005f73,0x00030005,0x0000043d,0x00005f61,0x00030005,0x00000452,0x00005f62, + 0x00030005,0x0000047a,0x00005f72,0x00040005,0x00000486,0x61726170,0x0000006d,0x00030005, + 0x0000048f,0x00005f68,0x00030005,0x000004a1,0x00000069,0x00030005,0x000004aa,0x00776f72, + 0x00050005,0x000004ae,0x706d6f63,0x6e656e6f,0x00000074,0x00040005,0x000004b1,0x656b6f74, + 0x0000006e,0x00040005,0x000004bd,0x756c6176,0x00000065,0x00040005,0x000004c7,0x61726170, + 0x0000006d,0x00050005,0x000004ca,0x65747441,0x6465646e,0x00000000,0x00060006,0x000004ca, + 0x00000000,0x65747461,0x6465646e,0x00000000,0x00030005,0x000004cc,0x00000000,0x00040005, + 0x000004d8,0x61726170,0x0000006d,0x00040005,0x000004da,0x61726170,0x0000006d,0x00030047, + 0x0000018c,0x0000002a,0x00030047,0x000001ab,0x0000002a,0x00030047,0x000001b8,0x0000002a, + 0x00030047,0x000001ce,0x0000002a,0x00030047,0x000001d3,0x0000002a,0x00030047,0x000001d7, + 0x0000002a,0x00030047,0x000001db,0x0000002a,0x00030047,0x000001df,0x0000002a,0x00030047, + 0x000001e3,0x0000002a,0x00030047,0x000001e4,0x0000002a,0x00040047,0x00000249,0x00000001, + 0x00000000,0x00030047,0x00000260,0x0000002a,0x00030047,0x0000026b,0x0000002a,0x00030047, + 0x00000277,0x0000002a,0x00030047,0x00000283,0x0000002a,0x00030047,0x00000287,0x0000002a, + 0x00030047,0x0000028b,0x0000002a,0x00030047,0x000002a0,0x0000002a,0x00030047,0x000002aa, + 0x0000002a,0x00030047,0x000002b4,0x0000002a,0x00030047,0x000002c4,0x0000002a,0x00030047, + 0x000002ce,0x0000002a,0x00030047,0x000002d8,0x0000002a,0x00040047,0x000002e1,0x0000000b, + 0x0000001b,0x00040047,0x000002e6,0x0000000b,0x0000001a,0x00030047,0x000002ed,0x00000002, + 0x00050048,0x000002ed,0x00000000,0x00000023,0x00000000,0x00050048,0x000002ed,0x00000001, + 0x00000023,0x00000004,0x00050048,0x000002ed,0x00000002,0x00000023,0x00000008,0x00040047, + 0x00000308,0x0000000b,0x00000028,0x00040047,0x0000032a,0x00000006,0x00000001,0x00030047, + 0x0000032b,0x00000002,0x00040048,0x0000032b,0x00000000,0x00000018,0x00050048,0x0000032b, + 0x00000000,0x00000023,0x00000000,0x00030047,0x0000032d,0x00000018,0x00040047,0x0000032d, + 0x00000021,0x00000000,0x00040047,0x0000032d,0x00000022,0x00000000,0x00040047,0x0000038a, + 0x0000000b,0x00000026,0x00030047,0x000003b8,0x0000002a,0x00030047,0x000003ba,0x0000002a, + 0x00030047,0x000003be,0x0000002a,0x00030047,0x000003c9,0x0000002a,0x00030047,0x000003cf, + 0x0000002a,0x00030047,0x000004c6,0x0000002a,0x00040047,0x000004c9,0x00000006,0x00000001, + 0x00030047,0x000004ca,0x00000002,0x00040048,0x000004ca,0x00000000,0x00000019,0x00050048, + 0x000004ca,0x00000000,0x00000023,0x00000000,0x00030047,0x000004cc,0x00000019,0x00040047, + 0x000004cc,0x00000021,0x00000005,0x00040047,0x000004cc,0x00000022,0x00000000,0x00020013, + 0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040020, + 0x00000007,0x00000007,0x00000006,0x00040021,0x00000008,0x00000006,0x00000007,0x00030016, + 0x0000000c,0x00000010,0x00040020,0x0000000d,0x00000007,0x0000000c,0x00040015,0x0000000e, + 0x00000020,0x00000000,0x00040021,0x0000000f,0x0000000e,0x0000000d,0x00040020,0x00000013, + 0x00000007,0x0000000e,0x00040021,0x00000014,0x0000000c,0x00000013,0x00050021,0x00000018, + 0x0000000e,0x00000013,0x00000013,0x00040021,0x0000001d,0x0000000e,0x00000013,0x00040021, + 0x00000021,0x00000006,0x0000000d,0x00040021,0x00000028,0x0000000c,0x0000000d,0x00060021, + 0x00000032,0x0000000c,0x0000000d,0x0000000d,0x0000000d,0x00070021,0x0000003b,0x0000000c, + 0x00000013,0x00000013,0x00000013,0x00000013,0x00050021,0x00000042,0x0000000c,0x00000013, + 0x00000013,0x0004002b,0x0000000e,0x0000004c,0x80000000,0x0004002b,0x0000000e,0x00000050, + 0x7fffffff,0x0004002b,0x0000000e,0x00000053,0x7f800000,0x00020014,0x00000054,0x0004002b, + 0x0000000e,0x0000005b,0x477ff000,0x0004002b,0x0000000e,0x00000064,0x38800000,0x0004002b, + 0x00000006,0x0000006b,0x4b800000,0x0004002b,0x00000006,0x00000072,0x33800000,0x0004002b, + 0x0000000e,0x0000007b,0x0000000d,0x0004002b,0x0000000e,0x0000007d,0x00000001,0x0004002b, + 0x0000000e,0x00000081,0x00000fff,0x0004002b,0x0000000e,0x00000085,0xffffe000,0x00040015, + 0x0000008e,0x00000010,0x00000000,0x0004002b,0x0000000e,0x00000094,0x0000ffff,0x0004002b, + 0x0000000e,0x000000b8,0x00000000,0x00040020,0x000000c0,0x00000007,0x00000054,0x0004002b, + 0x0000000e,0x000000c3,0x00007c00,0x0004002b,0x0000000e,0x000000c9,0x000003ff,0x0004002b, + 0x0000000e,0x000000d2,0x00007fff,0x0004002b,0x0000000e,0x000000d8,0x00000008,0x0004002b, + 0x0000000e,0x000000da,0x00000080,0x0004002b,0x0000000e,0x000000df,0x00008000,0x0004002b, + 0x0000000e,0x000000e5,0x0000000a,0x0004002b,0x0000000e,0x000000e7,0x0000001f,0x0004002b, + 0x0000000e,0x000000f1,0x0000007e,0x0004002b,0x0000000e,0x000000ff,0x00000400,0x0004002b, + 0x0000000e,0x00000109,0x0000000f,0x0004002b,0x0000000e,0x0000010b,0x00000010,0x0004002b, + 0x0000000e,0x0000011a,0x00000007,0x0004002b,0x0000000e,0x0000012d,0x00000006,0x0004002b, + 0x0000000e,0x00000136,0x00000003,0x0004002b,0x0000000e,0x00000145,0x00007bff,0x0004002b, + 0x00000006,0x0000014a,0x477ff000,0x0004002b,0x00000006,0x0000014c,0x3f000000,0x0004002b, + 0x00000006,0x0000017a,0x00000000,0x0004002b,0x00000006,0x00000185,0x3f800000,0x0004002b, + 0x0000000c,0x00000193,0x00000000,0x00040015,0x0000019a,0x00000020,0x00000001,0x00040020, + 0x0000019b,0x00000007,0x0000019a,0x0004002b,0x0000019a,0x0000019d,0x00000000,0x0004002b, + 0x0000019a,0x000001a4,0x00000002,0x0004002b,0x0000019a,0x000001c4,0x00000001,0x0004002b, + 0x0000000e,0x000001f3,0x00000017,0x0004002b,0x0000000e,0x000001f5,0x000000ff,0x0004002b, + 0x0000019a,0x000001f8,0x0000007f,0x0004002b,0x0000019a,0x000001fa,0xfffffff2,0x0004002b, + 0x0000019a,0x000001fe,0x0000000a,0x0004002b,0x0000000c,0x0000022c,0x00002dbb,0x0004002b, + 0x0000000c,0x0000022d,0x00003ed6,0x0004002b,0x0000000c,0x00000234,0x00003dc2,0x0004002b, + 0x0000000c,0x00000235,0x00003fe9,0x0004002b,0x0000000e,0x0000023d,0x00000004,0x0004002b, + 0x0000000e,0x0000023f,0x00004000,0x00040032,0x0000000e,0x00000249,0x000000c0,0x0004002b, + 0x0000000e,0x0000024e,0x00000002,0x00060034,0x0000000e,0x00000254,0x00000084,0x0000010b, + 0x00000249,0x0004001c,0x00000255,0x0000000c,0x00000254,0x00040020,0x00000256,0x00000004, + 0x00000255,0x0004003b,0x00000256,0x00000257,0x00000004,0x00040020,0x00000259,0x00000004, + 0x0000000c,0x0004002b,0x0000000e,0x00000267,0x00000018,0x0004002b,0x0000000e,0x0000026e, + 0x00000020,0x0004002b,0x0000000e,0x00000273,0x00000028,0x0004002b,0x0000000e,0x0000027a, + 0x00000030,0x0004002b,0x0000000e,0x0000027f,0x00000038,0x00040017,0x000002df,0x0000000e, + 0x00000003,0x00040020,0x000002e0,0x00000001,0x000002df,0x0004003b,0x000002e0,0x000002e1, + 0x00000001,0x00040020,0x000002e2,0x00000001,0x0000000e,0x0004003b,0x000002e0,0x000002e6, + 0x00000001,0x0005001e,0x000002ed,0x0000000e,0x0000000e,0x0000000e,0x00040020,0x000002ee, + 0x00000009,0x000002ed,0x0004003b,0x000002ee,0x000002ef,0x00000009,0x00040020,0x000002f0, + 0x00000009,0x0000000e,0x0004002b,0x0000000e,0x000002f6,0x00000060,0x0004003b,0x000002e2, + 0x00000308,0x00000001,0x00071168,0x00000319,0x00000006,0x00000136,0x0000010b,0x0000010b, + 0x0000024e,0x00040020,0x0000031a,0x00000007,0x00000319,0x0004002c,0x00000319,0x0000031c, + 0x0000017a,0x00040016,0x00000325,0x00000008,0x00001076,0x00071168,0x00000326,0x00000325, + 0x00000136,0x0000010b,0x0000010b,0x000000b8,0x00040020,0x00000327,0x00000007,0x00000326, + 0x00040015,0x00000329,0x00000008,0x00000000,0x0003001d,0x0000032a,0x00000329,0x0003001e, + 0x0000032b,0x0000032a,0x00040020,0x0000032c,0x0000000c,0x0000032b,0x0004003b,0x0000032c, + 0x0000032d,0x0000000c,0x00040020,0x00000336,0x0000000c,0x00000329,0x00071168,0x00000342, + 0x00000325,0x00000136,0x0000010b,0x0000010b,0x0000007d,0x00040020,0x00000343,0x00000007, + 0x00000342,0x00071168,0x00000377,0x0000000c,0x00000136,0x0000010b,0x0000010b,0x0000024e, + 0x00040020,0x00000378,0x00000007,0x00000377,0x0004003b,0x000002e2,0x0000038a,0x00000001, + 0x0004002b,0x0000000e,0x0000038e,0x00000040,0x0004002b,0x0000000e,0x00000391,0x00000108, + 0x00060034,0x0000000e,0x0000039a,0x00000084,0x0000010b,0x00000249,0x0004001c,0x000003d0, + 0x0000000c,0x0000010b,0x00040020,0x000003d1,0x00000004,0x000003d0,0x0004003b,0x000003d1, + 0x000003d2,0x00000004,0x00060034,0x0000000e,0x000003e0,0x00000084,0x0000010b,0x00000249, + 0x00060034,0x0000000e,0x000003ea,0x00000084,0x0000010b,0x00000249,0x0004001c,0x000003eb, + 0x00000329,0x000003ea,0x00040020,0x000003ec,0x00000004,0x000003eb,0x0004003b,0x000003ec, + 0x000003ed,0x00000004,0x00040020,0x000003f1,0x00000004,0x00000329,0x0004002b,0x0000000e, + 0x000003fd,0x00000200,0x0004001c,0x000003ff,0x0000000c,0x000003fd,0x00040020,0x00000400, + 0x00000004,0x000003ff,0x0004003b,0x00000400,0x00000401,0x00000004,0x0004002b,0x0000000e, + 0x000004ac,0x00000005,0x0003001d,0x000004c9,0x00000329,0x0003001e,0x000004ca,0x000004c9, + 0x00040020,0x000004cb,0x0000000c,0x000004ca,0x0004003b,0x000004cb,0x000004cc,0x0000000c, + 0x0006002c,0x000002df,0x000004e0,0x0000026e,0x0000007d,0x0000007d,0x00050036,0x00000002, + 0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000013,0x000002de, + 0x00000007,0x0004003b,0x00000013,0x000002e5,0x00000007,0x0004003b,0x00000013,0x000002e9, + 0x00000007,0x0004003b,0x00000013,0x000002ec,0x00000007,0x0004003b,0x00000013,0x000002f4, + 0x00000007,0x0004003b,0x00000013,0x000002f8,0x00000007,0x0004003b,0x00000013,0x000002ff, + 0x00000007,0x0004003b,0x00000013,0x00000307,0x00000007,0x0004003b,0x00000013,0x00000311, + 0x00000007,0x0004003b,0x00000013,0x00000315,0x00000007,0x0004003b,0x0000031a,0x0000031b, + 0x00000007,0x0004003b,0x00000013,0x0000031d,0x00000007,0x0004003b,0x00000327,0x00000328, + 0x00000007,0x0004003b,0x00000343,0x00000344,0x00000007,0x0004003b,0x0000019b,0x00000364, + 0x00000007,0x0004003b,0x00000007,0x00000370,0x00000007,0x0004003b,0x00000378,0x00000379, + 0x00000007,0x0004003b,0x00000013,0x00000392,0x00000007,0x0004003b,0x0000000d,0x0000039e, + 0x00000007,0x0004003b,0x0000000d,0x000003a9,0x00000007,0x0004003b,0x00000013,0x000003aa, + 0x00000007,0x0004003b,0x00000013,0x000003b3,0x00000007,0x0004003b,0x00000013,0x000003b5, + 0x00000007,0x0004003b,0x00000013,0x000003bb,0x00000007,0x0004003b,0x0000000d,0x000003c3, + 0x00000007,0x0004003b,0x0000000d,0x000003c4,0x00000007,0x0004003b,0x00000007,0x000003ca, + 0x00000007,0x0004003b,0x0000000d,0x000003d4,0x00000007,0x0004003b,0x00000013,0x000003d8, + 0x00000007,0x0004003b,0x00000013,0x000003e2,0x00000007,0x0004003b,0x0000000d,0x000003e4, + 0x00000007,0x0004003b,0x00000013,0x000003e8,0x00000007,0x0004003b,0x00000013,0x000003f5, + 0x00000007,0x0004003b,0x00000013,0x00000406,0x00000007,0x0004003b,0x00000013,0x0000040e, + 0x00000007,0x0004003b,0x00000013,0x00000417,0x00000007,0x0004003b,0x00000013,0x0000041b, + 0x00000007,0x0004003b,0x00000378,0x0000041f,0x00000007,0x0004003b,0x0000031a,0x0000042a, + 0x00000007,0x0004003b,0x00000013,0x0000042d,0x00000007,0x0004003b,0x00000013,0x00000435, + 0x00000007,0x0004003b,0x00000327,0x0000043d,0x00000007,0x0004003b,0x00000343,0x00000452, + 0x00000007,0x0004003b,0x0000019b,0x0000047a,0x00000007,0x0004003b,0x00000007,0x00000486, + 0x00000007,0x0004003b,0x00000378,0x0000048f,0x00000007,0x0004003b,0x00000013,0x000004a1, + 0x00000007,0x0004003b,0x00000013,0x000004aa,0x00000007,0x0004003b,0x00000013,0x000004ae, + 0x00000007,0x0004003b,0x00000013,0x000004b1,0x00000007,0x0004003b,0x00000007,0x000004bd, + 0x00000007,0x0004003b,0x00000007,0x000004c7,0x00000007,0x0004003b,0x0000000d,0x000004d8, + 0x00000007,0x0004003b,0x00000013,0x000004da,0x00000007,0x00050041,0x000002e2,0x000002e3, + 0x000002e1,0x000000b8,0x0004003d,0x0000000e,0x000002e4,0x000002e3,0x0003003e,0x000002de, + 0x000002e4,0x00050041,0x000002e2,0x000002e7,0x000002e6,0x000000b8,0x0004003d,0x0000000e, + 0x000002e8,0x000002e7,0x0003003e,0x000002e5,0x000002e8,0x00050041,0x000002e2,0x000002ea, + 0x000002e6,0x0000007d,0x0004003d,0x0000000e,0x000002eb,0x000002ea,0x0003003e,0x000002e9, + 0x000002eb,0x00050041,0x000002f0,0x000002f1,0x000002ef,0x000001a4,0x0004003d,0x0000000e, + 0x000002f2,0x000002f1,0x00050084,0x0000000e,0x000002f3,0x000002f2,0x00000136,0x0003003e, + 0x000002ec,0x000002f3,0x0004003d,0x0000000e,0x000002f5,0x000002e5,0x00050084,0x0000000e, + 0x000002f7,0x000002f5,0x000002f6,0x0003003e,0x000002f4,0x000002f7,0x0004003d,0x0000000e, + 0x000002f9,0x000002e9,0x00050084,0x0000000e,0x000002fa,0x000002f9,0x0000010b,0x0004003d, + 0x0000000e,0x000002fb,0x000002ec,0x00050084,0x0000000e,0x000002fc,0x000002fa,0x000002fb, + 0x0004003d,0x0000000e,0x000002fd,0x000002f4,0x00050080,0x0000000e,0x000002fe,0x000002fc, + 0x000002fd,0x0003003e,0x000002f8,0x000002fe,0x0003003e,0x000002ff,0x000000b8,0x000200f9, + 0x00000300,0x000200f8,0x00000300,0x000400f6,0x00000302,0x00000303,0x00000000,0x000200f9, + 0x00000304,0x000200f8,0x00000304,0x0004003d,0x0000000e,0x00000305,0x000002ff,0x000500b0, + 0x00000054,0x00000306,0x00000305,0x00000249,0x000400fa,0x00000306,0x00000301,0x00000302, + 0x000200f8,0x00000301,0x0004003d,0x0000000e,0x00000309,0x00000308,0x0003003e,0x00000307, + 0x00000309,0x000200f9,0x0000030a,0x000200f8,0x0000030a,0x000400f6,0x0000030c,0x0000030d, + 0x00000000,0x000200f9,0x0000030e,0x000200f8,0x0000030e,0x0004003d,0x0000000e,0x0000030f, + 0x00000307,0x000500b0,0x00000054,0x00000310,0x0000030f,0x0000023d,0x000400fa,0x00000310, + 0x0000030b,0x0000030c,0x000200f8,0x0000030b,0x0004003d,0x0000000e,0x00000312,0x00000307, + 0x00050086,0x0000000e,0x00000313,0x00000312,0x0000023d,0x00050084,0x0000000e,0x00000314, + 0x00000313,0x0000010b,0x0003003e,0x00000311,0x00000314,0x0004003d,0x0000000e,0x00000316, + 0x00000307,0x00050089,0x0000000e,0x00000317,0x00000316,0x0000023d,0x00050084,0x0000000e, + 0x00000318,0x00000317,0x0000010b,0x0003003e,0x00000315,0x00000318,0x0003003e,0x0000031b, + 0x0000031c,0x0003003e,0x0000031d,0x000000b8,0x000200f9,0x0000031e,0x000200f8,0x0000031e, + 0x000400f6,0x00000320,0x00000321,0x00000001,0x000200f9,0x00000322,0x000200f8,0x00000322, + 0x0004003d,0x0000000e,0x00000323,0x0000031d,0x000500b0,0x00000054,0x00000324,0x00000323, + 0x0000024e,0x000400fa,0x00000324,0x0000031f,0x00000320,0x000200f8,0x0000031f,0x0004003d, + 0x0000000e,0x0000032e,0x000002f8,0x0004003d,0x0000000e,0x0000032f,0x00000311,0x0004003d, + 0x0000000e,0x00000330,0x000002ec,0x00050084,0x0000000e,0x00000331,0x0000032f,0x00000330, + 0x00050080,0x0000000e,0x00000332,0x0000032e,0x00000331,0x0004003d,0x0000000e,0x00000333, + 0x0000031d,0x00050084,0x0000000e,0x00000334,0x00000333,0x0000010b,0x00050080,0x0000000e, + 0x00000335,0x00000332,0x00000334,0x00060041,0x00000336,0x00000337,0x0000032d,0x0000019d, + 0x00000335,0x0004003d,0x0000000e,0x00000338,0x000002f8,0x0004003d,0x0000000e,0x00000339, + 0x00000311,0x0004003d,0x0000000e,0x0000033a,0x000002ec,0x00050084,0x0000000e,0x0000033b, + 0x00000339,0x0000033a,0x00050080,0x0000000e,0x0000033c,0x00000338,0x0000033b,0x0004003d, + 0x0000000e,0x0000033d,0x0000031d,0x00050084,0x0000000e,0x0000033e,0x0000033d,0x0000010b, + 0x00050080,0x0000000e,0x0000033f,0x0000033c,0x0000033e,0x0004003d,0x0000000e,0x00000340, + 0x000002ec,0x00071169,0x00000326,0x00000341,0x00000337,0x0000019d,0x00000340,0x00000000, + 0x0003003e,0x00000328,0x00000341,0x0004003d,0x0000000e,0x00000345,0x000002ff,0x0004003d, + 0x0000000e,0x00000346,0x00000315,0x00050080,0x0000000e,0x00000347,0x00000345,0x00000346, + 0x0004003d,0x0000000e,0x00000348,0x000002ec,0x00050084,0x0000000e,0x00000349,0x00000347, + 0x00000348,0x0004003d,0x0000000e,0x0000034a,0x000002f4,0x00050080,0x0000000e,0x0000034b, + 0x00000349,0x0000034a,0x00050080,0x0000000e,0x0000034c,0x0000034b,0x0000026e,0x0004003d, + 0x0000000e,0x0000034d,0x0000031d,0x00050084,0x0000000e,0x0000034e,0x0000034d,0x0000010b, + 0x00050080,0x0000000e,0x0000034f,0x0000034c,0x0000034e,0x00060041,0x00000336,0x00000350, + 0x0000032d,0x0000019d,0x0000034f,0x0004003d,0x0000000e,0x00000351,0x000002ff,0x0004003d, + 0x0000000e,0x00000352,0x00000315,0x00050080,0x0000000e,0x00000353,0x00000351,0x00000352, + 0x0004003d,0x0000000e,0x00000354,0x000002ec,0x00050084,0x0000000e,0x00000355,0x00000353, + 0x00000354,0x0004003d,0x0000000e,0x00000356,0x000002f4,0x00050080,0x0000000e,0x00000357, + 0x00000355,0x00000356,0x00050080,0x0000000e,0x00000358,0x00000357,0x0000026e,0x0004003d, + 0x0000000e,0x00000359,0x0000031d,0x00050084,0x0000000e,0x0000035a,0x00000359,0x0000010b, + 0x00050080,0x0000000e,0x0000035b,0x00000358,0x0000035a,0x0004003d,0x0000000e,0x0000035c, + 0x000002ec,0x00071169,0x00000342,0x0000035d,0x00000350,0x000001c4,0x0000035c,0x00000000, + 0x0003003e,0x00000344,0x0000035d,0x0004003d,0x00000326,0x0000035e,0x00000328,0x0004003d, + 0x00000342,0x0000035f,0x00000344,0x0004003d,0x00000319,0x00000360,0x0000031b,0x0006116b, + 0x00000319,0x00000361,0x0000035e,0x0000035f,0x00000360,0x0003003e,0x0000031b,0x00000361, + 0x000200f9,0x00000321,0x000200f8,0x00000321,0x0004003d,0x0000000e,0x00000362,0x0000031d, + 0x00050080,0x0000000e,0x00000363,0x00000362,0x000001c4,0x0003003e,0x0000031d,0x00000363, + 0x000200f9,0x0000031e,0x000200f8,0x00000320,0x0003003e,0x00000364,0x0000019d,0x000200f9, + 0x00000365,0x000200f8,0x00000365,0x000400f6,0x00000367,0x00000368,0x00000000,0x000200f9, + 0x00000369,0x000200f8,0x00000369,0x0004003d,0x0000019a,0x0000036a,0x00000364,0x0004116c, + 0x0000000e,0x0000036b,0x00000319,0x0004007c,0x0000019a,0x0000036c,0x0000036b,0x000500b1, + 0x00000054,0x0000036d,0x0000036a,0x0000036c,0x000400fa,0x0000036d,0x00000366,0x00000367, + 0x000200f8,0x00000366,0x0004003d,0x0000019a,0x0000036e,0x00000364,0x0004003d,0x0000019a, + 0x0000036f,0x00000364,0x00050041,0x00000007,0x00000371,0x0000031b,0x0000036f,0x0004003d, + 0x00000006,0x00000372,0x00000371,0x0003003e,0x00000370,0x00000372,0x00050039,0x00000006, + 0x00000373,0x0000000a,0x00000370,0x00050041,0x00000007,0x00000374,0x0000031b,0x0000036e, + 0x0003003e,0x00000374,0x00000373,0x000200f9,0x00000368,0x000200f8,0x00000368,0x0004003d, + 0x0000019a,0x00000375,0x00000364,0x00050080,0x0000019a,0x00000376,0x00000375,0x000001c4, + 0x0003003e,0x00000364,0x00000376,0x000200f9,0x00000365,0x000200f8,0x00000367,0x0004003d, + 0x00000319,0x0000037a,0x0000031b,0x00040073,0x00000377,0x0000037b,0x0000037a,0x0003003e, + 0x00000379,0x0000037b,0x0004003d,0x00000377,0x0000037c,0x00000379,0x0004003d,0x0000000e, + 0x0000037d,0x00000311,0x00050084,0x0000000e,0x0000037e,0x0000037d,0x00000249,0x0004003d, + 0x0000000e,0x0000037f,0x000002ff,0x00050080,0x0000000e,0x00000380,0x0000037e,0x0000037f, + 0x0004003d,0x0000000e,0x00000381,0x00000315,0x00050080,0x0000000e,0x00000382,0x00000380, + 0x00000381,0x00050041,0x00000259,0x00000383,0x00000257,0x00000382,0x0004003d,0x0000000e, + 0x00000384,0x00000311,0x00050084,0x0000000e,0x00000385,0x00000384,0x00000249,0x0004003d, + 0x0000000e,0x00000386,0x000002ff,0x00050080,0x0000000e,0x00000387,0x00000385,0x00000386, + 0x0004003d,0x0000000e,0x00000388,0x00000315,0x00050080,0x0000000e,0x00000389,0x00000387, + 0x00000388,0x0007116a,0x00000383,0x0000037c,0x0000019d,0x00000249,0x00000028,0x0000024e, + 0x000200f9,0x0000030d,0x000200f8,0x0000030d,0x0004003d,0x0000000e,0x0000038b,0x0000038a, + 0x0004003d,0x0000000e,0x0000038c,0x00000307,0x00050080,0x0000000e,0x0000038d,0x0000038c, + 0x0000038b,0x0003003e,0x00000307,0x0000038d,0x000200f9,0x0000030a,0x000200f8,0x0000030c, + 0x000200f9,0x00000303,0x000200f8,0x00000303,0x0004003d,0x0000000e,0x0000038f,0x000002ff, + 0x00050080,0x0000000e,0x00000390,0x0000038f,0x0000038e,0x0003003e,0x000002ff,0x00000390, + 0x000200f9,0x00000300,0x000200f8,0x00000302,0x000400e0,0x0000024e,0x0000024e,0x00000391, + 0x0004003d,0x0000000e,0x00000393,0x000002de,0x0003003e,0x00000392,0x00000393,0x000200f9, + 0x00000394,0x000200f8,0x00000394,0x000400f6,0x00000396,0x00000397,0x00000000,0x000200f9, + 0x00000398,0x000200f8,0x00000398,0x0004003d,0x0000000e,0x00000399,0x00000392,0x000500b0, + 0x00000054,0x0000039b,0x00000399,0x0000039a,0x000400fa,0x0000039b,0x00000395,0x00000396, + 0x000200f8,0x00000395,0x0004003d,0x0000000e,0x0000039c,0x00000392,0x0004003d,0x0000000e, + 0x0000039d,0x00000392,0x00050041,0x00000259,0x0000039f,0x00000257,0x0000039d,0x0006003d, + 0x0000000c,0x000003a0,0x0000039f,0x00000030,0x0000024e,0x0003003e,0x0000039e,0x000003a0, + 0x00050039,0x0000000c,0x000003a1,0x00000039,0x0000039e,0x00050041,0x00000259,0x000003a2, + 0x00000257,0x0000039c,0x0005003e,0x000003a2,0x000003a1,0x00000028,0x0000024e,0x000200f9, + 0x00000397,0x000200f8,0x00000397,0x0004003d,0x0000000e,0x000003a3,0x00000392,0x00050080, + 0x0000000e,0x000003a4,0x000003a3,0x0000026e,0x0003003e,0x00000392,0x000003a4,0x000200f9, + 0x00000394,0x000200f8,0x00000396,0x000400e0,0x0000024e,0x0000024e,0x00000391,0x0004003d, + 0x0000000e,0x000003a5,0x000002de,0x000500b0,0x00000054,0x000003a6,0x000003a5,0x0000010b, + 0x000300f7,0x000003a8,0x00000000,0x000400fa,0x000003a6,0x000003a7,0x000003a8,0x000200f8, + 0x000003a7,0x0003003e,0x000003a9,0x00000193,0x0003003e,0x000003aa,0x000000b8,0x000200f9, + 0x000003ab,0x000200f8,0x000003ab,0x000400f6,0x000003ad,0x000003ae,0x00000000,0x000200f9, + 0x000003af,0x000200f8,0x000003af,0x0004003d,0x0000000e,0x000003b0,0x000003aa,0x000500b0, + 0x00000054,0x000003b1,0x000003b0,0x00000249,0x000400fa,0x000003b1,0x000003ac,0x000003ad, + 0x000200f8,0x000003ac,0x0004003d,0x0000000c,0x000003b2,0x000003a9,0x0004003d,0x0000000e, + 0x000003b4,0x000002de,0x0003003e,0x000003b3,0x000003b4,0x0004003d,0x0000000e,0x000003b6, + 0x000003aa,0x0003003e,0x000003b5,0x000003b6,0x00060039,0x0000000c,0x000003b7,0x00000045, + 0x000003b3,0x000003b5,0x00050081,0x0000000c,0x000003b8,0x000003b2,0x000003b7,0x0003003e, + 0x000003a9,0x000003b8,0x000200f9,0x000003ae,0x000200f8,0x000003ae,0x0004003d,0x0000000e, + 0x000003b9,0x000003aa,0x00050080,0x0000000e,0x000003ba,0x000003b9,0x0000038e,0x0003003e, + 0x000003aa,0x000003ba,0x000200f9,0x000003ab,0x000200f8,0x000003ad,0x00050041,0x000002f0, + 0x000003bc,0x000002ef,0x0000019d,0x0004003d,0x0000000e,0x000003bd,0x000003bc,0x00050082, + 0x0000000e,0x000003be,0x00000249,0x000003bd,0x0003003e,0x000003bb,0x000003be,0x0004003d, + 0x0000000e,0x000003bf,0x000003bb,0x000500ac,0x00000054,0x000003c0,0x000003bf,0x000000b8, + 0x000300f7,0x000003c2,0x00000000,0x000400fa,0x000003c0,0x000003c1,0x000003c2,0x000200f8, + 0x000003c1,0x0003003e,0x000003c4,0x00000193,0x00050039,0x0000000c,0x000003c5,0x00000039, + 0x000003c4,0x00040073,0x00000006,0x000003c6,0x000003c5,0x0004003d,0x0000000e,0x000003c7, + 0x000003bb,0x00040070,0x00000006,0x000003c8,0x000003c7,0x00050085,0x00000006,0x000003c9, + 0x000003c6,0x000003c8,0x0003003e,0x000003ca,0x000003c9,0x00050039,0x00000006,0x000003cb, + 0x0000000a,0x000003ca,0x00040073,0x0000000c,0x000003cc,0x000003cb,0x0003003e,0x000003c3, + 0x000003cc,0x0004003d,0x0000000c,0x000003cd,0x000003a9,0x0004003d,0x0000000c,0x000003ce, + 0x000003c3,0x00050083,0x0000000c,0x000003cf,0x000003cd,0x000003ce,0x0003003e,0x000003a9, + 0x000003cf,0x000200f9,0x000003c2,0x000200f8,0x000003c2,0x0004003d,0x0000000e,0x000003d3, + 0x000002de,0x0004003d,0x0000000c,0x000003d5,0x000003a9,0x0003003e,0x000003d4,0x000003d5, + 0x00050039,0x0000000c,0x000003d6,0x00000030,0x000003d4,0x00050041,0x00000259,0x000003d7, + 0x000003d2,0x000003d3,0x0005003e,0x000003d7,0x000003d6,0x00000028,0x0000024e,0x000200f9, + 0x000003a8,0x000200f8,0x000003a8,0x0004003d,0x0000000e,0x000003d9,0x000002de,0x0003003e, + 0x000003d8,0x000003d9,0x000200f9,0x000003da,0x000200f8,0x000003da,0x000400f6,0x000003dc, + 0x000003dd,0x00000000,0x000200f9,0x000003de,0x000200f8,0x000003de,0x0004003d,0x0000000e, + 0x000003df,0x000003d8,0x000500b0,0x00000054,0x000003e1,0x000003df,0x000003e0,0x000400fa, + 0x000003e1,0x000003db,0x000003dc,0x000200f8,0x000003db,0x0004003d,0x0000000e,0x000003e3, + 0x000003d8,0x00050041,0x00000259,0x000003e5,0x00000257,0x000003e3,0x0006003d,0x0000000c, + 0x000003e6,0x000003e5,0x00000030,0x0000024e,0x0003003e,0x000003e4,0x000003e6,0x00050039, + 0x0000000e,0x000003e7,0x00000011,0x000003e4,0x0003003e,0x000003e8,0x000003e7,0x00050039, + 0x0000000e,0x000003e9,0x0000001f,0x000003e8,0x0003003e,0x000003e2,0x000003e9,0x0004003d, + 0x0000000e,0x000003ee,0x000003d8,0x0004003d,0x0000000e,0x000003ef,0x000003e2,0x00040071, + 0x00000329,0x000003f0,0x000003ef,0x00050041,0x000003f1,0x000003f2,0x000003ed,0x000003ee, + 0x0005003e,0x000003f2,0x000003f0,0x00000028,0x0000024e,0x000200f9,0x000003dd,0x000200f8, + 0x000003dd,0x0004003d,0x0000000e,0x000003f3,0x000003d8,0x00050080,0x0000000e,0x000003f4, + 0x000003f3,0x0000026e,0x0003003e,0x000003d8,0x000003f4,0x000200f9,0x000003da,0x000200f8, + 0x000003dc,0x0004003d,0x0000000e,0x000003f6,0x000002de,0x0003003e,0x000003f5,0x000003f6, + 0x000200f9,0x000003f7,0x000200f8,0x000003f7,0x000400f6,0x000003f9,0x000003fa,0x00000000, + 0x000200f9,0x000003fb,0x000200f8,0x000003fb,0x0004003d,0x0000000e,0x000003fc,0x000003f5, + 0x000500b0,0x00000054,0x000003fe,0x000003fc,0x000003fd,0x000400fa,0x000003fe,0x000003f8, + 0x000003f9,0x000200f8,0x000003f8,0x0004003d,0x0000000e,0x00000402,0x000003f5,0x00050041, + 0x00000259,0x00000403,0x00000401,0x00000402,0x0005003e,0x00000403,0x00000193,0x00000028, + 0x0000024e,0x000200f9,0x000003fa,0x000200f8,0x000003fa,0x0004003d,0x0000000e,0x00000404, + 0x000003f5,0x00050080,0x0000000e,0x00000405,0x00000404,0x0000026e,0x0003003e,0x000003f5, + 0x00000405,0x000200f9,0x000003f7,0x000200f8,0x000003f9,0x000400e0,0x0000024e,0x0000024e, + 0x00000391,0x0003003e,0x00000406,0x000000b8,0x000200f9,0x00000407,0x000200f8,0x00000407, + 0x000400f6,0x00000409,0x0000040a,0x00000000,0x000200f9,0x0000040b,0x000200f8,0x0000040b, + 0x0004003d,0x0000000e,0x0000040c,0x00000406,0x000500b0,0x00000054,0x0000040d,0x0000040c, + 0x00000249,0x000400fa,0x0000040d,0x00000408,0x00000409,0x000200f8,0x00000408,0x0004003d, + 0x0000000e,0x0000040f,0x00000308,0x0003003e,0x0000040e,0x0000040f,0x000200f9,0x00000410, + 0x000200f8,0x00000410,0x000400f6,0x00000412,0x00000413,0x00000000,0x000200f9,0x00000414, + 0x000200f8,0x00000414,0x0004003d,0x0000000e,0x00000415,0x0000040e,0x000500b0,0x00000054, + 0x00000416,0x00000415,0x0000024e,0x000400fa,0x00000416,0x00000411,0x00000412,0x000200f8, + 0x00000411,0x0004003d,0x0000000e,0x00000418,0x0000040e,0x00050086,0x0000000e,0x00000419, + 0x00000418,0x0000024e,0x00050084,0x0000000e,0x0000041a,0x00000419,0x0000010b,0x0003003e, + 0x00000417,0x0000041a,0x0004003d,0x0000000e,0x0000041c,0x0000040e,0x00050089,0x0000000e, + 0x0000041d,0x0000041c,0x0000024e,0x00050084,0x0000000e,0x0000041e,0x0000041d,0x0000010b, + 0x0003003e,0x0000041b,0x0000041e,0x0004003d,0x0000000e,0x00000420,0x00000417,0x00050084, + 0x0000000e,0x00000421,0x00000420,0x0000026e,0x0004003d,0x0000000e,0x00000422,0x0000041b, + 0x00050080,0x0000000e,0x00000423,0x00000421,0x00000422,0x00050041,0x00000259,0x00000424, + 0x00000401,0x00000423,0x0004003d,0x0000000e,0x00000425,0x00000417,0x00050084,0x0000000e, + 0x00000426,0x00000425,0x0000026e,0x0004003d,0x0000000e,0x00000427,0x0000041b,0x00050080, + 0x0000000e,0x00000428,0x00000426,0x00000427,0x00081169,0x00000377,0x00000429,0x00000424, + 0x0000019d,0x0000026e,0x00000030,0x0000024e,0x0003003e,0x0000041f,0x00000429,0x0004003d, + 0x00000377,0x0000042b,0x0000041f,0x00040073,0x00000319,0x0000042c,0x0000042b,0x0003003e, + 0x0000042a,0x0000042c,0x0003003e,0x0000042d,0x000000b8,0x000200f9,0x0000042e,0x000200f8, + 0x0000042e,0x000400f6,0x00000430,0x00000431,0x00000001,0x000200f9,0x00000432,0x000200f8, + 0x00000432,0x0004003d,0x0000000e,0x00000433,0x0000042d,0x000500b0,0x00000054,0x00000434, + 0x00000433,0x0000038e,0x000400fa,0x00000434,0x0000042f,0x00000430,0x000200f8,0x0000042f, + 0x0003003e,0x00000435,0x000000b8,0x000200f9,0x00000436,0x000200f8,0x00000436,0x000400f6, + 0x00000438,0x00000439,0x00000001,0x000200f9,0x0000043a,0x000200f8,0x0000043a,0x0004003d, + 0x0000000e,0x0000043b,0x00000435,0x000500b0,0x00000054,0x0000043c,0x0000043b,0x0000024e, + 0x000400fa,0x0000043c,0x00000437,0x00000438,0x000200f8,0x00000437,0x0004003d,0x0000000e, + 0x0000043e,0x00000417,0x00050084,0x0000000e,0x0000043f,0x0000043e,0x00000249,0x0004003d, + 0x0000000e,0x00000440,0x00000406,0x00050080,0x0000000e,0x00000441,0x0000043f,0x00000440, + 0x0004003d,0x0000000e,0x00000442,0x0000042d,0x00050080,0x0000000e,0x00000443,0x00000441, + 0x00000442,0x0004003d,0x0000000e,0x00000444,0x00000435,0x00050084,0x0000000e,0x00000445, + 0x00000444,0x0000010b,0x00050080,0x0000000e,0x00000446,0x00000443,0x00000445,0x00050041, + 0x000003f1,0x00000447,0x000003ed,0x00000446,0x0004003d,0x0000000e,0x00000448,0x00000417, + 0x00050084,0x0000000e,0x00000449,0x00000448,0x00000249,0x0004003d,0x0000000e,0x0000044a, + 0x00000406,0x00050080,0x0000000e,0x0000044b,0x00000449,0x0000044a,0x0004003d,0x0000000e, + 0x0000044c,0x0000042d,0x00050080,0x0000000e,0x0000044d,0x0000044b,0x0000044c,0x0004003d, + 0x0000000e,0x0000044e,0x00000435,0x00050084,0x0000000e,0x0000044f,0x0000044e,0x0000010b, + 0x00050080,0x0000000e,0x00000450,0x0000044d,0x0000044f,0x00081169,0x00000326,0x00000451, + 0x00000447,0x0000019d,0x00000249,0x00000030,0x0000024e,0x0003003e,0x0000043d,0x00000451, + 0x0004003d,0x0000000e,0x00000453,0x00000406,0x0004003d,0x0000000e,0x00000454,0x0000042d, + 0x00050080,0x0000000e,0x00000455,0x00000453,0x00000454,0x0004003d,0x0000000e,0x00000456, + 0x000002ec,0x00050084,0x0000000e,0x00000457,0x00000455,0x00000456,0x0004003d,0x0000000e, + 0x00000458,0x000002f4,0x00050080,0x0000000e,0x00000459,0x00000457,0x00000458,0x00050080, + 0x0000000e,0x0000045a,0x00000459,0x0000038e,0x0004003d,0x0000000e,0x0000045b,0x0000041b, + 0x00050080,0x0000000e,0x0000045c,0x0000045a,0x0000045b,0x0004003d,0x0000000e,0x0000045d, + 0x00000435,0x0004003d,0x0000000e,0x0000045e,0x000002ec,0x00050084,0x0000000e,0x0000045f, + 0x0000010b,0x0000045e,0x00050084,0x0000000e,0x00000460,0x0000045d,0x0000045f,0x00050080, + 0x0000000e,0x00000461,0x0000045c,0x00000460,0x00060041,0x00000336,0x00000462,0x0000032d, + 0x0000019d,0x00000461,0x0004003d,0x0000000e,0x00000463,0x00000406,0x0004003d,0x0000000e, + 0x00000464,0x0000042d,0x00050080,0x0000000e,0x00000465,0x00000463,0x00000464,0x0004003d, + 0x0000000e,0x00000466,0x000002ec,0x00050084,0x0000000e,0x00000467,0x00000465,0x00000466, + 0x0004003d,0x0000000e,0x00000468,0x000002f4,0x00050080,0x0000000e,0x00000469,0x00000467, + 0x00000468,0x00050080,0x0000000e,0x0000046a,0x00000469,0x0000038e,0x0004003d,0x0000000e, + 0x0000046b,0x0000041b,0x00050080,0x0000000e,0x0000046c,0x0000046a,0x0000046b,0x0004003d, + 0x0000000e,0x0000046d,0x00000435,0x0004003d,0x0000000e,0x0000046e,0x000002ec,0x00050084, + 0x0000000e,0x0000046f,0x0000010b,0x0000046e,0x00050084,0x0000000e,0x00000470,0x0000046d, + 0x0000046f,0x00050080,0x0000000e,0x00000471,0x0000046c,0x00000470,0x0004003d,0x0000000e, + 0x00000472,0x000002ec,0x00071169,0x00000342,0x00000473,0x00000462,0x0000019d,0x00000472, + 0x00000000,0x0003003e,0x00000452,0x00000473,0x0004003d,0x00000326,0x00000474,0x0000043d, + 0x0004003d,0x00000342,0x00000475,0x00000452,0x0004003d,0x00000319,0x00000476,0x0000042a, + 0x0006116b,0x00000319,0x00000477,0x00000474,0x00000475,0x00000476,0x0003003e,0x0000042a, + 0x00000477,0x000200f9,0x00000439,0x000200f8,0x00000439,0x0004003d,0x0000000e,0x00000478, + 0x00000435,0x00050080,0x0000000e,0x00000479,0x00000478,0x000001c4,0x0003003e,0x00000435, + 0x00000479,0x000200f9,0x00000436,0x000200f8,0x00000438,0x0003003e,0x0000047a,0x0000019d, + 0x000200f9,0x0000047b,0x000200f8,0x0000047b,0x000400f6,0x0000047d,0x0000047e,0x00000000, + 0x000200f9,0x0000047f,0x000200f8,0x0000047f,0x0004003d,0x0000019a,0x00000480,0x0000047a, + 0x0004116c,0x0000000e,0x00000481,0x00000319,0x0004007c,0x0000019a,0x00000482,0x00000481, + 0x000500b1,0x00000054,0x00000483,0x00000480,0x00000482,0x000400fa,0x00000483,0x0000047c, + 0x0000047d,0x000200f8,0x0000047c,0x0004003d,0x0000019a,0x00000484,0x0000047a,0x0004003d, + 0x0000019a,0x00000485,0x0000047a,0x00050041,0x00000007,0x00000487,0x0000042a,0x00000485, + 0x0004003d,0x00000006,0x00000488,0x00000487,0x0003003e,0x00000486,0x00000488,0x00050039, + 0x00000006,0x00000489,0x0000000a,0x00000486,0x00050041,0x00000007,0x0000048a,0x0000042a, + 0x00000484,0x0003003e,0x0000048a,0x00000489,0x000200f9,0x0000047e,0x000200f8,0x0000047e, + 0x0004003d,0x0000019a,0x0000048b,0x0000047a,0x00050080,0x0000019a,0x0000048c,0x0000048b, + 0x000001c4,0x0003003e,0x0000047a,0x0000048c,0x000200f9,0x0000047b,0x000200f8,0x0000047d, + 0x000200f9,0x00000431,0x000200f8,0x00000431,0x0004003d,0x0000000e,0x0000048d,0x0000042d, + 0x00050080,0x0000000e,0x0000048e,0x0000048d,0x0000026e,0x0003003e,0x0000042d,0x0000048e, + 0x000200f9,0x0000042e,0x000200f8,0x00000430,0x0004003d,0x00000319,0x00000490,0x0000042a, + 0x00040073,0x00000377,0x00000491,0x00000490,0x0003003e,0x0000048f,0x00000491,0x0004003d, + 0x00000377,0x00000492,0x0000048f,0x0004003d,0x0000000e,0x00000493,0x00000417,0x00050084, + 0x0000000e,0x00000494,0x00000493,0x0000026e,0x0004003d,0x0000000e,0x00000495,0x0000041b, + 0x00050080,0x0000000e,0x00000496,0x00000494,0x00000495,0x00050041,0x00000259,0x00000497, + 0x00000401,0x00000496,0x0004003d,0x0000000e,0x00000498,0x00000417,0x00050084,0x0000000e, + 0x00000499,0x00000498,0x0000026e,0x0004003d,0x0000000e,0x0000049a,0x0000041b,0x00050080, + 0x0000000e,0x0000049b,0x00000499,0x0000049a,0x0007116a,0x00000497,0x00000492,0x0000019d, + 0x0000026e,0x00000028,0x0000024e,0x000200f9,0x00000413,0x000200f8,0x00000413,0x0004003d, + 0x0000000e,0x0000049c,0x0000038a,0x0004003d,0x0000000e,0x0000049d,0x0000040e,0x00050080, + 0x0000000e,0x0000049e,0x0000049d,0x0000049c,0x0003003e,0x0000040e,0x0000049e,0x000200f9, + 0x00000410,0x000200f8,0x00000412,0x000400e0,0x0000024e,0x0000024e,0x00000391,0x000200f9, + 0x0000040a,0x000200f8,0x0000040a,0x0004003d,0x0000000e,0x0000049f,0x00000406,0x00050080, + 0x0000000e,0x000004a0,0x0000049f,0x0000038e,0x0003003e,0x00000406,0x000004a0,0x000200f9, + 0x00000407,0x000200f8,0x00000409,0x0004003d,0x0000000e,0x000004a2,0x000002de,0x0003003e, + 0x000004a1,0x000004a2,0x000200f9,0x000004a3,0x000200f8,0x000004a3,0x000400f6,0x000004a5, + 0x000004a6,0x00000000,0x000200f9,0x000004a7,0x000200f8,0x000004a7,0x0004003d,0x0000000e, + 0x000004a8,0x000004a1,0x000500b0,0x00000054,0x000004a9,0x000004a8,0x000003fd,0x000400fa, + 0x000004a9,0x000004a4,0x000004a5,0x000200f8,0x000004a4,0x0004003d,0x0000000e,0x000004ab, + 0x000004a1,0x000500c2,0x0000000e,0x000004ad,0x000004ab,0x000004ac,0x0003003e,0x000004aa, + 0x000004ad,0x0004003d,0x0000000e,0x000004af,0x000004a1,0x000500c7,0x0000000e,0x000004b0, + 0x000004af,0x000000e7,0x0003003e,0x000004ae,0x000004b0,0x0004003d,0x0000000e,0x000004b2, + 0x000002e9,0x00050084,0x0000000e,0x000004b3,0x000004b2,0x0000010b,0x0004003d,0x0000000e, + 0x000004b4,0x000004aa,0x00050080,0x0000000e,0x000004b5,0x000004b3,0x000004b4,0x0003003e, + 0x000004b1,0x000004b5,0x0004003d,0x0000000e,0x000004b6,0x000004b1,0x00050041,0x000002f0, + 0x000004b7,0x000002ef,0x0000019d,0x0004003d,0x0000000e,0x000004b8,0x000004b7,0x000500ae, + 0x00000054,0x000004b9,0x000004b6,0x000004b8,0x000300f7,0x000004bb,0x00000000,0x000400fa, + 0x000004b9,0x000004ba,0x000004bb,0x000200f8,0x000004ba,0x000200f9,0x000004a6,0x000200f8, + 0x000004bb,0x0004003d,0x0000000e,0x000004be,0x000004a1,0x00050041,0x00000259,0x000004bf, + 0x00000401,0x000004be,0x0006003d,0x0000000c,0x000004c0,0x000004bf,0x00000030,0x0000024e, + 0x00040073,0x00000006,0x000004c1,0x000004c0,0x0004003d,0x0000000e,0x000004c2,0x000004aa, + 0x00050041,0x00000259,0x000004c3,0x000003d2,0x000004c2,0x0006003d,0x0000000c,0x000004c4, + 0x000004c3,0x00000030,0x0000024e,0x00040073,0x00000006,0x000004c5,0x000004c4,0x00050085, + 0x00000006,0x000004c6,0x000004c1,0x000004c5,0x0003003e,0x000004c7,0x000004c6,0x00050039, + 0x00000006,0x000004c8,0x0000000a,0x000004c7,0x0003003e,0x000004bd,0x000004c8,0x0004003d, + 0x0000000e,0x000004cd,0x000004b1,0x00050041,0x000002f0,0x000004ce,0x000002ef,0x000001a4, + 0x0004003d,0x0000000e,0x000004cf,0x000004ce,0x00050084,0x0000000e,0x000004d0,0x000004cd, + 0x000004cf,0x0004003d,0x0000000e,0x000004d1,0x000002e5,0x00050084,0x0000000e,0x000004d2, + 0x000004d1,0x0000026e,0x00050080,0x0000000e,0x000004d3,0x000004d0,0x000004d2,0x0004003d, + 0x0000000e,0x000004d4,0x000004ae,0x00050080,0x0000000e,0x000004d5,0x000004d3,0x000004d4, + 0x0004003d,0x00000006,0x000004d6,0x000004bd,0x00040073,0x0000000c,0x000004d7,0x000004d6, + 0x0003003e,0x000004d8,0x000004d7,0x00050039,0x0000000e,0x000004d9,0x00000011,0x000004d8, + 0x0003003e,0x000004da,0x000004d9,0x00050039,0x0000000e,0x000004db,0x0000001f,0x000004da, + 0x00040071,0x00000329,0x000004dc,0x000004db,0x00060041,0x00000336,0x000004dd,0x000004cc, + 0x0000019d,0x000004d5,0x0003003e,0x000004dd,0x000004dc,0x000200f9,0x000004a6,0x000200f8, + 0x000004a6,0x0004003d,0x0000000e,0x000004de,0x000004a1,0x00050080,0x0000000e,0x000004df, + 0x000004de,0x0000026e,0x0003003e,0x000004a1,0x000004df,0x000200f9,0x000004a3,0x000200f8, + 0x000004a5,0x000100fd,0x00010038,0x00050036,0x00000006,0x0000000a,0x00000000,0x00000008, + 0x00030037,0x00000007,0x00000009,0x000200f8,0x0000000b,0x0004003b,0x00000013,0x00000047, + 0x00000007,0x0004003b,0x00000013,0x0000004a,0x00000007,0x0004003b,0x00000013,0x0000004e, + 0x00000007,0x0004003b,0x00000007,0x00000068,0x00000007,0x0004003b,0x00000013,0x00000079, + 0x00000007,0x0004003b,0x00000013,0x0000007f,0x00000007,0x0004003d,0x00000006,0x00000048, + 0x00000009,0x0004007c,0x0000000e,0x00000049,0x00000048,0x0003003e,0x00000047,0x00000049, + 0x0004003d,0x0000000e,0x0000004b,0x00000047,0x000500c7,0x0000000e,0x0000004d,0x0000004b, + 0x0000004c,0x0003003e,0x0000004a,0x0000004d,0x0004003d,0x0000000e,0x0000004f,0x00000047, + 0x000500c7,0x0000000e,0x00000051,0x0000004f,0x00000050,0x0003003e,0x0000004e,0x00000051, + 0x0004003d,0x0000000e,0x00000052,0x0000004e,0x000500ae,0x00000054,0x00000055,0x00000052, + 0x00000053,0x000300f7,0x00000057,0x00000000,0x000400fa,0x00000055,0x00000056,0x00000057, + 0x000200f8,0x00000056,0x0004003d,0x00000006,0x00000058,0x00000009,0x000200fe,0x00000058, + 0x000200f8,0x00000057,0x0004003d,0x0000000e,0x0000005a,0x0000004e,0x000500ae,0x00000054, + 0x0000005c,0x0000005a,0x0000005b,0x000300f7,0x0000005e,0x00000000,0x000400fa,0x0000005c, + 0x0000005d,0x0000005e,0x000200f8,0x0000005d,0x0004003d,0x0000000e,0x0000005f,0x0000004a, + 0x000500c5,0x0000000e,0x00000060,0x0000005f,0x00000053,0x0004007c,0x00000006,0x00000061, + 0x00000060,0x000200fe,0x00000061,0x000200f8,0x0000005e,0x0004003d,0x0000000e,0x00000063, + 0x0000004e,0x000500b0,0x00000054,0x00000065,0x00000063,0x00000064,0x000300f7,0x00000067, + 0x00000000,0x000400fa,0x00000065,0x00000066,0x00000067,0x000200f8,0x00000066,0x0004003d, + 0x0000000e,0x00000069,0x0000004e,0x0004007c,0x00000006,0x0000006a,0x00000069,0x00050085, + 0x00000006,0x0000006c,0x0000006a,0x0000006b,0x0006000c,0x00000006,0x0000006d,0x00000001, + 0x00000002,0x0000006c,0x0003003e,0x00000068,0x0000006d,0x0004003d,0x0000000e,0x0000006e, + 0x0000004a,0x0004007c,0x00000006,0x0000006f,0x0000006e,0x0004003d,0x0000000e,0x00000070, + 0x0000004a,0x0004003d,0x00000006,0x00000071,0x00000068,0x00050085,0x00000006,0x00000073, + 0x00000071,0x00000072,0x0004007c,0x0000000e,0x00000074,0x00000073,0x000500c5,0x0000000e, + 0x00000075,0x00000070,0x00000074,0x0004007c,0x00000006,0x00000076,0x00000075,0x00050081, + 0x00000006,0x00000077,0x0000006f,0x00000076,0x000200fe,0x00000077,0x000200f8,0x00000067, + 0x0004003d,0x0000000e,0x0000007a,0x0000004e,0x000500c2,0x0000000e,0x0000007c,0x0000007a, + 0x0000007b,0x000500c7,0x0000000e,0x0000007e,0x0000007c,0x0000007d,0x0003003e,0x00000079, + 0x0000007e,0x0004003d,0x0000000e,0x00000080,0x0000004e,0x00050080,0x0000000e,0x00000082, + 0x00000080,0x00000081,0x0004003d,0x0000000e,0x00000083,0x00000079,0x00050080,0x0000000e, + 0x00000084,0x00000082,0x00000083,0x000500c7,0x0000000e,0x00000086,0x00000084,0x00000085, + 0x0003003e,0x0000007f,0x00000086,0x0004003d,0x0000000e,0x00000087,0x0000004a,0x0004003d, + 0x0000000e,0x00000088,0x0000007f,0x000500c5,0x0000000e,0x00000089,0x00000087,0x00000088, + 0x0004007c,0x00000006,0x0000008a,0x00000089,0x000200fe,0x0000008a,0x00010038,0x00050036, + 0x0000000e,0x00000011,0x00000000,0x0000000f,0x00030037,0x0000000d,0x00000010,0x000200f8, + 0x00000012,0x0004003d,0x0000000c,0x0000008d,0x00000010,0x0004007c,0x0000008e,0x0000008f, + 0x0000008d,0x00040071,0x0000000e,0x00000090,0x0000008f,0x000200fe,0x00000090,0x00010038, + 0x00050036,0x0000000c,0x00000016,0x00000000,0x00000014,0x00030037,0x00000013,0x00000015, + 0x000200f8,0x00000017,0x0004003d,0x0000000e,0x00000093,0x00000015,0x000500c7,0x0000000e, + 0x00000095,0x00000093,0x00000094,0x00040071,0x0000008e,0x00000096,0x00000095,0x0004007c, + 0x0000000c,0x00000097,0x00000096,0x000200fe,0x00000097,0x00010038,0x00050036,0x0000000e, + 0x0000001b,0x00000000,0x00000018,0x00030037,0x00000013,0x00000019,0x00030037,0x00000013, + 0x0000001a,0x000200f8,0x0000001c,0x0004003b,0x00000013,0x0000009a,0x00000007,0x0004003b, + 0x00000013,0x0000009e,0x00000007,0x0004003b,0x00000013,0x000000a2,0x00000007,0x0004003b, + 0x00000013,0x000000a6,0x00000007,0x0004003d,0x0000000e,0x0000009b,0x00000019,0x0004003d, + 0x0000000e,0x0000009c,0x0000001a,0x000500c2,0x0000000e,0x0000009d,0x0000009b,0x0000009c, + 0x0003003e,0x0000009a,0x0000009d,0x0004003d,0x0000000e,0x0000009f,0x0000001a,0x000500c4, + 0x0000000e,0x000000a0,0x0000007d,0x0000009f,0x00050082,0x0000000e,0x000000a1,0x000000a0, + 0x0000007d,0x0003003e,0x0000009e,0x000000a1,0x0004003d,0x0000000e,0x000000a3,0x00000019, + 0x0004003d,0x0000000e,0x000000a4,0x0000009e,0x000500c7,0x0000000e,0x000000a5,0x000000a3, + 0x000000a4,0x0003003e,0x000000a2,0x000000a5,0x0004003d,0x0000000e,0x000000a7,0x0000001a, + 0x00050082,0x0000000e,0x000000a8,0x000000a7,0x0000007d,0x000500c4,0x0000000e,0x000000a9, + 0x0000007d,0x000000a8,0x0003003e,0x000000a6,0x000000a9,0x0004003d,0x0000000e,0x000000aa, + 0x0000009a,0x0004003d,0x0000000e,0x000000ab,0x000000a2,0x0004003d,0x0000000e,0x000000ac, + 0x000000a6,0x000500ac,0x00000054,0x000000ad,0x000000ab,0x000000ac,0x000400a8,0x00000054, + 0x000000ae,0x000000ad,0x000300f7,0x000000b0,0x00000000,0x000400fa,0x000000ae,0x000000af, + 0x000000b0,0x000200f8,0x000000af,0x0004003d,0x0000000e,0x000000b1,0x000000a2,0x0004003d, + 0x0000000e,0x000000b2,0x000000a6,0x000500aa,0x00000054,0x000000b3,0x000000b1,0x000000b2, + 0x000300f7,0x000000b5,0x00000000,0x000400fa,0x000000b3,0x000000b4,0x000000b5,0x000200f8, + 0x000000b4,0x0004003d,0x0000000e,0x000000b6,0x0000009a,0x000500c7,0x0000000e,0x000000b7, + 0x000000b6,0x0000007d,0x000500ab,0x00000054,0x000000b9,0x000000b7,0x000000b8,0x000200f9, + 0x000000b5,0x000200f8,0x000000b5,0x000700f5,0x00000054,0x000000ba,0x000000b3,0x000000af, + 0x000000b9,0x000000b4,0x000200f9,0x000000b0,0x000200f8,0x000000b0,0x000700f5,0x00000054, + 0x000000bb,0x000000ad,0x0000001c,0x000000ba,0x000000b5,0x000600a9,0x0000000e,0x000000bc, + 0x000000bb,0x0000007d,0x000000b8,0x00050080,0x0000000e,0x000000bd,0x000000aa,0x000000bc, + 0x000200fe,0x000000bd,0x00010038,0x00050036,0x0000000e,0x0000001f,0x00000000,0x0000001d, + 0x00030037,0x00000013,0x0000001e,0x000200f8,0x00000020,0x0004003b,0x000000c0,0x000000c1, + 0x00000007,0x0004003b,0x00000013,0x000000dd,0x00000007,0x0004003b,0x00000013,0x000000e3, + 0x00000007,0x0004003b,0x00000013,0x000000e9,0x00000007,0x0004003b,0x00000013,0x000000f0, + 0x00000007,0x0004003b,0x00000013,0x000000f7,0x00000007,0x0004003b,0x00000013,0x000000fa, + 0x00000007,0x0004003b,0x00000013,0x00000103,0x00000007,0x0004003b,0x00000013,0x00000106, + 0x00000007,0x0004003b,0x00000013,0x0000010f,0x00000007,0x0004003b,0x00000013,0x00000111, + 0x00000007,0x0004003b,0x00000013,0x00000116,0x00000007,0x0004003b,0x00000013,0x00000119, + 0x00000007,0x0004003b,0x00000013,0x0000011b,0x00000007,0x0004003b,0x00000013,0x0000011d, + 0x00000007,0x0004003b,0x00000013,0x00000131,0x00000007,0x0004003d,0x0000000e,0x000000c2, + 0x0000001e,0x000500c7,0x0000000e,0x000000c4,0x000000c2,0x000000c3,0x000500aa,0x00000054, + 0x000000c5,0x000000c4,0x000000c3,0x000300f7,0x000000c7,0x00000000,0x000400fa,0x000000c5, + 0x000000c6,0x000000c7,0x000200f8,0x000000c6,0x0004003d,0x0000000e,0x000000c8,0x0000001e, + 0x000500c7,0x0000000e,0x000000ca,0x000000c8,0x000000c9,0x000500ab,0x00000054,0x000000cb, + 0x000000ca,0x000000b8,0x000200f9,0x000000c7,0x000200f8,0x000000c7,0x000700f5,0x00000054, + 0x000000cc,0x000000c5,0x00000020,0x000000cb,0x000000c6,0x0003003e,0x000000c1,0x000000cc, + 0x0004003d,0x00000054,0x000000cd,0x000000c1,0x000300f7,0x000000cf,0x00000000,0x000400fa, + 0x000000cd,0x000000ce,0x000000cf,0x000200f8,0x000000ce,0x000200fe,0x000000b8,0x000200f8, + 0x000000cf,0x0004003d,0x0000000e,0x000000d1,0x0000001e,0x000500c7,0x0000000e,0x000000d3, + 0x000000d1,0x000000d2,0x000500aa,0x00000054,0x000000d4,0x000000d3,0x000000b8,0x000300f7, + 0x000000d6,0x00000000,0x000400fa,0x000000d4,0x000000d5,0x000000d6,0x000200f8,0x000000d5, + 0x0004003d,0x0000000e,0x000000d7,0x0000001e,0x000500c2,0x0000000e,0x000000d9,0x000000d7, + 0x000000d8,0x000500c7,0x0000000e,0x000000db,0x000000d9,0x000000da,0x000200fe,0x000000db, + 0x000200f8,0x000000d6,0x0004003d,0x0000000e,0x000000de,0x0000001e,0x000500c7,0x0000000e, + 0x000000e0,0x000000de,0x000000df,0x000500ab,0x00000054,0x000000e1,0x000000e0,0x000000b8, + 0x000600a9,0x0000000e,0x000000e2,0x000000e1,0x000000da,0x000000b8,0x0003003e,0x000000dd, + 0x000000e2,0x0004003d,0x0000000e,0x000000e4,0x0000001e,0x000500c2,0x0000000e,0x000000e6, + 0x000000e4,0x000000e5,0x000500c7,0x0000000e,0x000000e8,0x000000e6,0x000000e7,0x0003003e, + 0x000000e3,0x000000e8,0x0004003d,0x0000000e,0x000000ea,0x0000001e,0x000500c7,0x0000000e, + 0x000000eb,0x000000ea,0x000000c9,0x0003003e,0x000000e9,0x000000eb,0x0004003d,0x0000000e, + 0x000000ec,0x000000e3,0x000500aa,0x00000054,0x000000ed,0x000000ec,0x000000e7,0x000300f7, + 0x000000ef,0x00000000,0x000400fa,0x000000ed,0x000000ee,0x000000f2,0x000200f8,0x000000ee, + 0x0003003e,0x000000f0,0x000000f1,0x000200f9,0x000000ef,0x000200f8,0x000000f2,0x0004003d, + 0x0000000e,0x000000f3,0x000000e3,0x000500b2,0x00000054,0x000000f4,0x000000f3,0x000000d8, + 0x000300f7,0x000000f6,0x00000000,0x000400fa,0x000000f4,0x000000f5,0x00000115,0x000200f8, + 0x000000f5,0x0004003d,0x0000000e,0x000000f8,0x000000e3,0x000500aa,0x00000054,0x000000f9, + 0x000000f8,0x000000b8,0x000300f7,0x000000fc,0x00000000,0x000400fa,0x000000f9,0x000000fb, + 0x000000fe,0x000200f8,0x000000fb,0x0004003d,0x0000000e,0x000000fd,0x000000e9,0x0003003e, + 0x000000fa,0x000000fd,0x000200f9,0x000000fc,0x000200f8,0x000000fe,0x0004003d,0x0000000e, + 0x00000100,0x000000e9,0x00050080,0x0000000e,0x00000101,0x000000ff,0x00000100,0x0003003e, + 0x000000fa,0x00000101,0x000200f9,0x000000fc,0x000200f8,0x000000fc,0x0004003d,0x0000000e, + 0x00000102,0x000000fa,0x0003003e,0x000000f7,0x00000102,0x0004003d,0x0000000e,0x00000104, + 0x000000e3,0x000500aa,0x00000054,0x00000105,0x00000104,0x000000b8,0x000300f7,0x00000108, + 0x00000000,0x000400fa,0x00000105,0x00000107,0x0000010a,0x000200f8,0x00000107,0x0003003e, + 0x00000106,0x00000109,0x000200f9,0x00000108,0x000200f8,0x0000010a,0x0004003d,0x0000000e, + 0x0000010c,0x000000e3,0x00050082,0x0000000e,0x0000010d,0x0000010b,0x0000010c,0x0003003e, + 0x00000106,0x0000010d,0x000200f9,0x00000108,0x000200f8,0x00000108,0x0004003d,0x0000000e, + 0x0000010e,0x00000106,0x0003003e,0x00000103,0x0000010e,0x0004003d,0x0000000e,0x00000110, + 0x000000f7,0x0003003e,0x0000010f,0x00000110,0x0004003d,0x0000000e,0x00000112,0x00000103, + 0x0003003e,0x00000111,0x00000112,0x00060039,0x0000000e,0x00000113,0x0000001b,0x0000010f, + 0x00000111,0x0007000c,0x0000000e,0x00000114,0x00000001,0x00000026,0x00000113,0x000000d8, + 0x0003003e,0x000000f0,0x00000114,0x000200f9,0x000000f6,0x000200f8,0x00000115,0x0004003d, + 0x0000000e,0x00000117,0x000000e3,0x00050082,0x0000000e,0x00000118,0x00000117,0x000000d8, + 0x0003003e,0x00000116,0x00000118,0x0004003d,0x0000000e,0x0000011c,0x000000e9,0x0003003e, + 0x0000011b,0x0000011c,0x0003003e,0x0000011d,0x0000011a,0x00060039,0x0000000e,0x0000011e, + 0x0000001b,0x0000011b,0x0000011d,0x0003003e,0x00000119,0x0000011e,0x0004003d,0x0000000e, + 0x0000011f,0x00000119,0x000500aa,0x00000054,0x00000120,0x0000011f,0x000000d8,0x000300f7, + 0x00000122,0x00000000,0x000400fa,0x00000120,0x00000121,0x00000122,0x000200f8,0x00000121, + 0x0003003e,0x00000119,0x000000b8,0x0004003d,0x0000000e,0x00000123,0x00000116,0x00050080, + 0x0000000e,0x00000124,0x00000123,0x0000007d,0x0003003e,0x00000116,0x00000124,0x000200f9, + 0x00000122,0x000200f8,0x00000122,0x0004003d,0x0000000e,0x00000125,0x00000116,0x000500ac, + 0x00000054,0x00000126,0x00000125,0x00000109,0x000400a8,0x00000054,0x00000127,0x00000126, + 0x000300f7,0x00000129,0x00000000,0x000400fa,0x00000127,0x00000128,0x00000129,0x000200f8, + 0x00000128,0x0004003d,0x0000000e,0x0000012a,0x00000116,0x000500aa,0x00000054,0x0000012b, + 0x0000012a,0x00000109,0x0004003d,0x0000000e,0x0000012c,0x00000119,0x000500ac,0x00000054, + 0x0000012e,0x0000012c,0x0000012d,0x000500a7,0x00000054,0x0000012f,0x0000012b,0x0000012e, + 0x000200f9,0x00000129,0x000200f8,0x00000129,0x000700f5,0x00000054,0x00000130,0x00000126, + 0x00000122,0x0000012f,0x00000128,0x000300f7,0x00000133,0x00000000,0x000400fa,0x00000130, + 0x00000132,0x00000134,0x000200f8,0x00000132,0x0003003e,0x00000131,0x000000f1,0x000200f9, + 0x00000133,0x000200f8,0x00000134,0x0004003d,0x0000000e,0x00000135,0x00000116,0x000500c4, + 0x0000000e,0x00000137,0x00000135,0x00000136,0x0004003d,0x0000000e,0x00000138,0x00000119, + 0x000500c5,0x0000000e,0x00000139,0x00000137,0x00000138,0x0003003e,0x00000131,0x00000139, + 0x000200f9,0x00000133,0x000200f8,0x00000133,0x0004003d,0x0000000e,0x0000013a,0x00000131, + 0x0003003e,0x000000f0,0x0000013a,0x000200f9,0x000000f6,0x000200f8,0x000000f6,0x000200f9, + 0x000000ef,0x000200f8,0x000000ef,0x0004003d,0x0000000e,0x0000013b,0x000000dd,0x0004003d, + 0x0000000e,0x0000013c,0x000000f0,0x000500c5,0x0000000e,0x0000013d,0x0000013b,0x0000013c, + 0x000200fe,0x0000013d,0x00010038,0x00050036,0x00000006,0x00000023,0x00000000,0x00000021, + 0x00030037,0x0000000d,0x00000022,0x000200f8,0x00000024,0x0004003b,0x00000013,0x00000140, + 0x00000007,0x0004003b,0x0000000d,0x00000141,0x00000007,0x0004003b,0x00000007,0x00000147, + 0x00000007,0x0004003b,0x00000013,0x00000151,0x00000007,0x0004003d,0x0000000c,0x00000142, + 0x00000022,0x0003003e,0x00000141,0x00000142,0x00050039,0x0000000e,0x00000143,0x00000011, + 0x00000141,0x0003003e,0x00000140,0x00000143,0x0004003d,0x0000000e,0x00000144,0x00000140, + 0x000500ae,0x00000054,0x00000146,0x00000144,0x00000145,0x000300f7,0x00000149,0x00000000, + 0x000400fa,0x00000146,0x00000148,0x0000014b,0x000200f8,0x00000148,0x0003003e,0x00000147, + 0x0000014a,0x000200f9,0x00000149,0x000200f8,0x0000014b,0x0004003d,0x0000000c,0x0000014d, + 0x00000022,0x00040073,0x00000006,0x0000014e,0x0000014d,0x0004003d,0x0000000e,0x0000014f, + 0x00000140,0x00050080,0x0000000e,0x00000150,0x0000014f,0x0000007d,0x0003003e,0x00000151, + 0x00000150,0x00050039,0x0000000c,0x00000152,0x00000016,0x00000151,0x00040073,0x00000006, + 0x00000153,0x00000152,0x00050081,0x00000006,0x00000154,0x0000014e,0x00000153,0x00050085, + 0x00000006,0x00000155,0x0000014c,0x00000154,0x0003003e,0x00000147,0x00000155,0x000200f9, + 0x00000149,0x000200f8,0x00000149,0x0004003d,0x00000006,0x00000156,0x00000147,0x000200fe, + 0x00000156,0x00010038,0x00050036,0x00000006,0x00000026,0x00000000,0x00000021,0x00030037, + 0x0000000d,0x00000025,0x000200f8,0x00000027,0x0004003b,0x0000000d,0x0000015b,0x00000007, + 0x0004003b,0x00000013,0x0000015f,0x00000007,0x0004003d,0x0000000c,0x00000159,0x00000025, + 0x00040073,0x00000006,0x0000015a,0x00000159,0x0004003d,0x0000000c,0x0000015c,0x00000025, + 0x0003003e,0x0000015b,0x0000015c,0x00050039,0x0000000e,0x0000015d,0x00000011,0x0000015b, + 0x00050082,0x0000000e,0x0000015e,0x0000015d,0x0000007d,0x0003003e,0x0000015f,0x0000015e, + 0x00050039,0x0000000c,0x00000160,0x00000016,0x0000015f,0x00040073,0x00000006,0x00000161, + 0x00000160,0x00050081,0x00000006,0x00000162,0x0000015a,0x00000161,0x00050085,0x00000006, + 0x00000163,0x0000014c,0x00000162,0x000200fe,0x00000163,0x00010038,0x00050036,0x0000000c, + 0x0000002a,0x00000000,0x00000028,0x00030037,0x0000000d,0x00000029,0x000200f8,0x0000002b, + 0x0004003b,0x0000000d,0x00000166,0x00000007,0x0004003b,0x00000013,0x0000016a,0x00000007, + 0x0004003d,0x0000000c,0x00000167,0x00000029,0x0003003e,0x00000166,0x00000167,0x00050039, + 0x0000000e,0x00000168,0x00000011,0x00000166,0x00050080,0x0000000e,0x00000169,0x00000168, + 0x0000007d,0x0003003e,0x0000016a,0x00000169,0x00050039,0x0000000c,0x0000016b,0x00000016, + 0x0000016a,0x000200fe,0x0000016b,0x00010038,0x00050036,0x0000000c,0x0000002d,0x00000000, + 0x00000028,0x00030037,0x0000000d,0x0000002c,0x000200f8,0x0000002e,0x0004003b,0x0000000d, + 0x0000016e,0x00000007,0x0004003b,0x00000013,0x00000172,0x00000007,0x0004003d,0x0000000c, + 0x0000016f,0x0000002c,0x0003003e,0x0000016e,0x0000016f,0x00050039,0x0000000e,0x00000170, + 0x00000011,0x0000016e,0x00050082,0x0000000e,0x00000171,0x00000170,0x0000007d,0x0003003e, + 0x00000172,0x00000171,0x00050039,0x0000000c,0x00000173,0x00000016,0x00000172,0x000200fe, + 0x00000173,0x00010038,0x00050036,0x0000000c,0x00000030,0x00000000,0x00000028,0x00030037, + 0x0000000d,0x0000002f,0x000200f8,0x00000031,0x0004003b,0x00000007,0x00000176,0x00000007, + 0x0004003b,0x0000000d,0x0000018a,0x00000007,0x0004003b,0x00000007,0x0000018d,0x00000007, + 0x0004003b,0x0000019b,0x0000019c,0x00000007,0x0004003b,0x00000007,0x000001a6,0x00000007, + 0x0004003b,0x0000000d,0x000001a7,0x00000007,0x0004003b,0x0000000d,0x000001b0,0x00000007, + 0x0004003b,0x00000007,0x000001b3,0x00000007,0x0004003b,0x0000000d,0x000001b4,0x00000007, + 0x0004003b,0x0000000d,0x000001c0,0x00000007,0x0004003d,0x0000000c,0x00000177,0x0000002f, + 0x00040073,0x00000006,0x00000178,0x00000177,0x0003003e,0x00000176,0x00000178,0x0004003d, + 0x00000006,0x00000179,0x00000176,0x000500ba,0x00000054,0x0000017b,0x00000179,0x0000017a, + 0x000400a8,0x00000054,0x0000017c,0x0000017b,0x000400a8,0x00000054,0x0000017d,0x0000017c, + 0x000300f7,0x0000017f,0x00000000,0x000400fa,0x0000017d,0x0000017e,0x0000017f,0x000200f8, + 0x0000017e,0x0004003d,0x00000006,0x00000180,0x00000176,0x0004009d,0x00000054,0x00000181, + 0x00000180,0x000200f9,0x0000017f,0x000200f8,0x0000017f,0x000700f5,0x00000054,0x00000182, + 0x0000017c,0x00000031,0x00000181,0x0000017e,0x000300f7,0x00000184,0x00000000,0x000400fa, + 0x00000182,0x00000183,0x00000184,0x000200f8,0x00000183,0x0004003d,0x00000006,0x00000186, + 0x00000176,0x00050088,0x00000006,0x00000187,0x00000185,0x00000186,0x00040073,0x0000000c, + 0x00000188,0x00000187,0x000200fe,0x00000188,0x000200f8,0x00000184,0x0004003d,0x00000006, + 0x0000018b,0x00000176,0x00050088,0x00000006,0x0000018c,0x00000185,0x0000018b,0x0003003e, + 0x0000018d,0x0000018c,0x00050039,0x00000006,0x0000018e,0x0000000a,0x0000018d,0x00040073, + 0x0000000c,0x0000018f,0x0000018e,0x0003003e,0x0000018a,0x0000018f,0x0004003d,0x0000000c, + 0x00000190,0x0000018a,0x0004009d,0x00000054,0x00000191,0x00000190,0x0004003d,0x0000000c, + 0x00000192,0x0000018a,0x000500b4,0x00000054,0x00000194,0x00000192,0x00000193,0x000500a6, + 0x00000054,0x00000195,0x00000191,0x00000194,0x000300f7,0x00000197,0x00000000,0x000400fa, + 0x00000195,0x00000196,0x00000197,0x000200f8,0x00000196,0x0004003d,0x0000000c,0x00000198, + 0x0000018a,0x000200fe,0x00000198,0x000200f8,0x00000197,0x0003003e,0x0000019c,0x0000019d, + 0x000200f9,0x0000019e,0x000200f8,0x0000019e,0x000400f6,0x000001a0,0x000001a1,0x00000000, + 0x000200f9,0x000001a2,0x000200f8,0x000001a2,0x0004003d,0x0000019a,0x000001a3,0x0000019c, + 0x000500b1,0x00000054,0x000001a5,0x000001a3,0x000001a4,0x000400fa,0x000001a5,0x0000019f, + 0x000001a0,0x000200f8,0x0000019f,0x0004003d,0x0000000c,0x000001a8,0x0000018a,0x0003003e, + 0x000001a7,0x000001a8,0x00050039,0x00000006,0x000001a9,0x00000023,0x000001a7,0x0004003d, + 0x00000006,0x000001aa,0x00000176,0x00050085,0x00000006,0x000001ab,0x000001a9,0x000001aa, + 0x0003003e,0x000001a6,0x000001ab,0x0004003d,0x00000006,0x000001ac,0x000001a6,0x000500b8, + 0x00000054,0x000001ad,0x000001ac,0x00000185,0x000300f7,0x000001af,0x00000000,0x000400fa, + 0x000001ad,0x000001ae,0x000001af,0x000200f8,0x000001ae,0x0004003d,0x0000000c,0x000001b1, + 0x0000018a,0x0003003e,0x000001b0,0x000001b1,0x00050039,0x0000000c,0x000001b2,0x0000002a, + 0x000001b0,0x0003003e,0x0000018a,0x000001b2,0x000200f9,0x000001af,0x000200f8,0x000001af, + 0x0004003d,0x0000000c,0x000001b5,0x0000018a,0x0003003e,0x000001b4,0x000001b5,0x00050039, + 0x00000006,0x000001b6,0x00000026,0x000001b4,0x0004003d,0x00000006,0x000001b7,0x00000176, + 0x00050085,0x00000006,0x000001b8,0x000001b6,0x000001b7,0x0003003e,0x000001b3,0x000001b8, + 0x0004003d,0x0000000c,0x000001b9,0x0000018a,0x000500ba,0x00000054,0x000001ba,0x000001b9, + 0x00000193,0x0004003d,0x00000006,0x000001bb,0x000001b3,0x000500ba,0x00000054,0x000001bc, + 0x000001bb,0x00000185,0x000500a7,0x00000054,0x000001bd,0x000001ba,0x000001bc,0x000300f7, + 0x000001bf,0x00000000,0x000400fa,0x000001bd,0x000001be,0x000001bf,0x000200f8,0x000001be, + 0x0004003d,0x0000000c,0x000001c1,0x0000018a,0x0003003e,0x000001c0,0x000001c1,0x00050039, + 0x0000000c,0x000001c2,0x0000002d,0x000001c0,0x0003003e,0x0000018a,0x000001c2,0x000200f9, + 0x000001bf,0x000200f8,0x000001bf,0x000200f9,0x000001a1,0x000200f8,0x000001a1,0x0004003d, + 0x0000019a,0x000001c3,0x0000019c,0x00050080,0x0000019a,0x000001c5,0x000001c3,0x000001c4, + 0x0003003e,0x0000019c,0x000001c5,0x000200f9,0x0000019e,0x000200f8,0x000001a0,0x0004003d, + 0x0000000c,0x000001c6,0x0000018a,0x000200fe,0x000001c6,0x00010038,0x00050036,0x0000000c, + 0x00000036,0x00000000,0x00000032,0x00030037,0x0000000d,0x00000033,0x00030037,0x0000000d, + 0x00000034,0x00030037,0x0000000d,0x00000035,0x000200f8,0x00000037,0x0004003b,0x00000007, + 0x000001c9,0x00000007,0x0004003b,0x00000007,0x000001cf,0x00000007,0x0004003b,0x00000007, + 0x000001d4,0x00000007,0x0004003b,0x00000007,0x000001d8,0x00000007,0x0004003b,0x00000007, + 0x000001dc,0x00000007,0x0004003b,0x0000019b,0x000001ef,0x00000007,0x0004003b,0x00000007, + 0x000001fc,0x00000007,0x0004003b,0x00000007,0x00000204,0x00000007,0x0004003b,0x00000007, + 0x00000216,0x00000007,0x0004003b,0x00000007,0x00000221,0x00000007,0x0004003b,0x00000007, + 0x00000225,0x00000007,0x0004003d,0x0000000c,0x000001ca,0x00000033,0x00040073,0x00000006, + 0x000001cb,0x000001ca,0x0004003d,0x0000000c,0x000001cc,0x00000034,0x00040073,0x00000006, + 0x000001cd,0x000001cc,0x00050085,0x00000006,0x000001ce,0x000001cb,0x000001cd,0x0003003e, + 0x000001c9,0x000001ce,0x0004003d,0x00000006,0x000001d0,0x000001c9,0x0004003d,0x0000000c, + 0x000001d1,0x00000035,0x00040073,0x00000006,0x000001d2,0x000001d1,0x00050081,0x00000006, + 0x000001d3,0x000001d0,0x000001d2,0x0003003e,0x000001cf,0x000001d3,0x0004003d,0x00000006, + 0x000001d5,0x000001cf,0x0004003d,0x00000006,0x000001d6,0x000001c9,0x00050083,0x00000006, + 0x000001d7,0x000001d5,0x000001d6,0x0003003e,0x000001d4,0x000001d7,0x0004003d,0x00000006, + 0x000001d9,0x000001cf,0x0004003d,0x00000006,0x000001da,0x000001d4,0x00050083,0x00000006, + 0x000001db,0x000001d9,0x000001da,0x0003003e,0x000001d8,0x000001db,0x0004003d,0x00000006, + 0x000001dd,0x000001c9,0x0004003d,0x00000006,0x000001de,0x000001d8,0x00050083,0x00000006, + 0x000001df,0x000001dd,0x000001de,0x0004003d,0x0000000c,0x000001e0,0x00000035,0x00040073, + 0x00000006,0x000001e1,0x000001e0,0x0004003d,0x00000006,0x000001e2,0x000001d4,0x00050083, + 0x00000006,0x000001e3,0x000001e1,0x000001e2,0x00050081,0x00000006,0x000001e4,0x000001df, + 0x000001e3,0x0003003e,0x000001dc,0x000001e4,0x0004003d,0x00000006,0x000001e5,0x000001dc, + 0x000500b7,0x00000054,0x000001e6,0x000001e5,0x0000017a,0x000300f7,0x000001e8,0x00000000, + 0x000400fa,0x000001e6,0x000001e7,0x000001e8,0x000200f8,0x000001e7,0x0004003d,0x00000006, + 0x000001e9,0x000001cf,0x0004009d,0x00000054,0x000001ea,0x000001e9,0x000400a8,0x00000054, + 0x000001eb,0x000001ea,0x000200f9,0x000001e8,0x000200f8,0x000001e8,0x000700f5,0x00000054, + 0x000001ec,0x000001e6,0x00000037,0x000001eb,0x000001e7,0x000300f7,0x000001ee,0x00000000, + 0x000400fa,0x000001ec,0x000001ed,0x000001ee,0x000200f8,0x000001ed,0x0004003d,0x00000006, + 0x000001f0,0x000001cf,0x0006000c,0x00000006,0x000001f1,0x00000001,0x00000004,0x000001f0, + 0x0004007c,0x0000000e,0x000001f2,0x000001f1,0x000500c2,0x0000000e,0x000001f4,0x000001f2, + 0x000001f3,0x000500c7,0x0000000e,0x000001f6,0x000001f4,0x000001f5,0x0004007c,0x0000019a, + 0x000001f7,0x000001f6,0x00050082,0x0000019a,0x000001f9,0x000001f7,0x000001f8,0x0007000c, + 0x0000019a,0x000001fb,0x00000001,0x0000002a,0x000001f9,0x000001fa,0x0003003e,0x000001ef, + 0x000001fb,0x0004003d,0x0000019a,0x000001fd,0x000001ef,0x00050082,0x0000019a,0x000001ff, + 0x000001fd,0x000001fe,0x00050080,0x0000019a,0x00000200,0x000001ff,0x000001f8,0x0004007c, + 0x0000000e,0x00000201,0x00000200,0x000500c4,0x0000000e,0x00000202,0x00000201,0x000001f3, + 0x0004007c,0x00000006,0x00000203,0x00000202,0x0003003e,0x000001fc,0x00000203,0x0004003d, + 0x00000006,0x00000205,0x000001cf,0x0004003d,0x0000019a,0x00000206,0x000001ef,0x00050082, + 0x0000019a,0x00000207,0x000001f8,0x00000206,0x00050080,0x0000019a,0x00000208,0x00000207, + 0x000001fe,0x0004007c,0x0000000e,0x00000209,0x00000208,0x000500c4,0x0000000e,0x0000020a, + 0x00000209,0x000001f3,0x0004007c,0x00000006,0x0000020b,0x0000020a,0x00050085,0x00000006, + 0x0000020c,0x00000205,0x0000020b,0x0003003e,0x00000204,0x0000020c,0x0004003d,0x00000006, + 0x0000020d,0x00000204,0x0004003d,0x00000006,0x0000020e,0x00000204,0x0006000c,0x00000006, + 0x0000020f,0x00000001,0x00000008,0x0000020e,0x00050083,0x00000006,0x00000210,0x0000020d, + 0x0000020f,0x000500b4,0x00000054,0x00000211,0x00000210,0x0000014c,0x000300f7,0x00000213, + 0x00000000,0x000400fa,0x00000211,0x00000212,0x00000213,0x000200f8,0x00000212,0x0004003d, + 0x00000006,0x00000214,0x000001dc,0x000500ba,0x00000054,0x00000215,0x00000214,0x0000017a, + 0x000300f7,0x00000218,0x00000000,0x000400fa,0x00000215,0x00000217,0x0000021b,0x000200f8, + 0x00000217,0x0004003d,0x00000006,0x00000219,0x00000204,0x0006000c,0x00000006,0x0000021a, + 0x00000001,0x00000009,0x00000219,0x0003003e,0x00000216,0x0000021a,0x000200f9,0x00000218, + 0x000200f8,0x0000021b,0x0004003d,0x00000006,0x0000021c,0x00000204,0x0006000c,0x00000006, + 0x0000021d,0x00000001,0x00000008,0x0000021c,0x0003003e,0x00000216,0x0000021d,0x000200f9, + 0x00000218,0x000200f8,0x00000218,0x0004003d,0x00000006,0x0000021e,0x00000216,0x0004003d, + 0x00000006,0x0000021f,0x000001fc,0x00050085,0x00000006,0x00000220,0x0000021e,0x0000021f, + 0x0003003e,0x00000221,0x00000220,0x00050039,0x00000006,0x00000222,0x0000000a,0x00000221, + 0x00040073,0x0000000c,0x00000223,0x00000222,0x000200fe,0x00000223,0x000200f8,0x00000213, + 0x000200f9,0x000001ee,0x000200f8,0x000001ee,0x0004003d,0x00000006,0x00000226,0x000001cf, + 0x0003003e,0x00000225,0x00000226,0x00050039,0x00000006,0x00000227,0x0000000a,0x00000225, + 0x00040073,0x0000000c,0x00000228,0x00000227,0x000200fe,0x00000228,0x00010038,0x00050036, + 0x0000000c,0x00000039,0x00000000,0x00000028,0x00030037,0x0000000d,0x00000038,0x000200f8, + 0x0000003a,0x0004003b,0x0000000d,0x0000022b,0x00000007,0x0004003b,0x0000000d,0x0000022e, + 0x00000007,0x0004003b,0x0000000d,0x00000230,0x00000007,0x0004003b,0x0000000d,0x00000231, + 0x00000007,0x0004003b,0x00000013,0x00000237,0x00000007,0x0004003b,0x0000000d,0x00000238, + 0x00000007,0x0004003b,0x00000013,0x0000023b,0x00000007,0x0004003b,0x00000013,0x00000242, + 0x00000007,0x0004003d,0x0000000c,0x0000022f,0x00000038,0x0003003e,0x0000022e,0x0000022f, + 0x0003003e,0x00000230,0x0000022c,0x0003003e,0x00000231,0x0000022d,0x00070039,0x0000000c, + 0x00000232,0x00000036,0x0000022e,0x00000230,0x00000231,0x0003003e,0x0000022b,0x00000232, + 0x0004003d,0x0000000c,0x00000233,0x0000022b,0x0008000c,0x0000000c,0x00000236,0x00000001, + 0x0000002b,0x00000233,0x00000234,0x00000235,0x0003003e,0x0000022b,0x00000236,0x0004003d, + 0x0000000c,0x00000239,0x0000022b,0x0003003e,0x00000238,0x00000239,0x00050039,0x0000000e, + 0x0000023a,0x00000011,0x00000238,0x0003003e,0x00000237,0x0000023a,0x0004003d,0x0000000e, + 0x0000023c,0x00000237,0x000500c4,0x0000000e,0x0000023e,0x0000023c,0x0000023d,0x00050080, + 0x0000000e,0x00000240,0x0000023e,0x0000023f,0x000500c7,0x0000000e,0x00000241,0x00000240, + 0x00000094,0x0003003e,0x0000023b,0x00000241,0x0004003d,0x0000000e,0x00000243,0x0000023b, + 0x0003003e,0x00000242,0x00000243,0x00050039,0x0000000c,0x00000244,0x00000016,0x00000242, + 0x000200fe,0x00000244,0x00010038,0x00050036,0x0000000c,0x00000040,0x00000000,0x0000003b, + 0x00030037,0x00000013,0x0000003c,0x00030037,0x00000013,0x0000003d,0x00030037,0x00000013, + 0x0000003e,0x00030037,0x00000013,0x0000003f,0x000200f8,0x00000041,0x0004003b,0x00000013, + 0x00000247,0x00000007,0x0004003b,0x0000000d,0x00000253,0x00000007,0x0004003b,0x0000000d, + 0x00000261,0x00000007,0x0004003b,0x0000000d,0x0000026c,0x00000007,0x0004003b,0x0000000d, + 0x00000278,0x00000007,0x0004003b,0x0000000d,0x00000284,0x00000007,0x0004003b,0x0000000d, + 0x00000288,0x00000007,0x0004003d,0x0000000e,0x00000248,0x0000003c,0x00050084,0x0000000e, + 0x0000024a,0x00000248,0x00000249,0x0004003d,0x0000000e,0x0000024b,0x0000003d,0x00050080, + 0x0000000e,0x0000024c,0x0000024a,0x0000024b,0x0004003d,0x0000000e,0x0000024d,0x0000003e, + 0x00050084,0x0000000e,0x0000024f,0x0000024d,0x0000024e,0x00050080,0x0000000e,0x00000250, + 0x0000024c,0x0000024f,0x0004003d,0x0000000e,0x00000251,0x0000003f,0x00050080,0x0000000e, + 0x00000252,0x00000250,0x00000251,0x0003003e,0x00000247,0x00000252,0x0004003d,0x0000000e, + 0x00000258,0x00000247,0x00050041,0x00000259,0x0000025a,0x00000257,0x00000258,0x0006003d, + 0x0000000c,0x0000025b,0x0000025a,0x00000030,0x0000024e,0x0004003d,0x0000000e,0x0000025c, + 0x00000247,0x00050080,0x0000000e,0x0000025d,0x0000025c,0x000000d8,0x00050041,0x00000259, + 0x0000025e,0x00000257,0x0000025d,0x0006003d,0x0000000c,0x0000025f,0x0000025e,0x00000030, + 0x0000024e,0x00050081,0x0000000c,0x00000260,0x0000025b,0x0000025f,0x0003003e,0x00000253, + 0x00000260,0x0004003d,0x0000000e,0x00000262,0x00000247,0x00050080,0x0000000e,0x00000263, + 0x00000262,0x0000010b,0x00050041,0x00000259,0x00000264,0x00000257,0x00000263,0x0006003d, + 0x0000000c,0x00000265,0x00000264,0x00000030,0x0000024e,0x0004003d,0x0000000e,0x00000266, + 0x00000247,0x00050080,0x0000000e,0x00000268,0x00000266,0x00000267,0x00050041,0x00000259, + 0x00000269,0x00000257,0x00000268,0x0006003d,0x0000000c,0x0000026a,0x00000269,0x00000030, + 0x0000024e,0x00050081,0x0000000c,0x0000026b,0x00000265,0x0000026a,0x0003003e,0x00000261, + 0x0000026b,0x0004003d,0x0000000e,0x0000026d,0x00000247,0x00050080,0x0000000e,0x0000026f, + 0x0000026d,0x0000026e,0x00050041,0x00000259,0x00000270,0x00000257,0x0000026f,0x0006003d, + 0x0000000c,0x00000271,0x00000270,0x00000030,0x0000024e,0x0004003d,0x0000000e,0x00000272, + 0x00000247,0x00050080,0x0000000e,0x00000274,0x00000272,0x00000273,0x00050041,0x00000259, + 0x00000275,0x00000257,0x00000274,0x0006003d,0x0000000c,0x00000276,0x00000275,0x00000030, + 0x0000024e,0x00050081,0x0000000c,0x00000277,0x00000271,0x00000276,0x0003003e,0x0000026c, + 0x00000277,0x0004003d,0x0000000e,0x00000279,0x00000247,0x00050080,0x0000000e,0x0000027b, + 0x00000279,0x0000027a,0x00050041,0x00000259,0x0000027c,0x00000257,0x0000027b,0x0006003d, + 0x0000000c,0x0000027d,0x0000027c,0x00000030,0x0000024e,0x0004003d,0x0000000e,0x0000027e, + 0x00000247,0x00050080,0x0000000e,0x00000280,0x0000027e,0x0000027f,0x00050041,0x00000259, + 0x00000281,0x00000257,0x00000280,0x0006003d,0x0000000c,0x00000282,0x00000281,0x00000030, + 0x0000024e,0x00050081,0x0000000c,0x00000283,0x0000027d,0x00000282,0x0003003e,0x00000278, + 0x00000283,0x0004003d,0x0000000c,0x00000285,0x00000253,0x0004003d,0x0000000c,0x00000286, + 0x00000261,0x00050081,0x0000000c,0x00000287,0x00000285,0x00000286,0x0003003e,0x00000284, + 0x00000287,0x0004003d,0x0000000c,0x00000289,0x00000284,0x0004003d,0x0000000c,0x0000028a, + 0x0000026c,0x00050081,0x0000000c,0x0000028b,0x00000289,0x0000028a,0x0003003e,0x00000288, + 0x0000028b,0x0004003d,0x0000000c,0x0000028c,0x00000288,0x0004003d,0x0000000c,0x0000028d, + 0x00000278,0x00050081,0x0000000c,0x0000028e,0x0000028c,0x0000028d,0x000200fe,0x0000028e, + 0x00010038,0x00050036,0x0000000c,0x00000045,0x00000000,0x00000042,0x00030037,0x00000013, + 0x00000043,0x00030037,0x00000013,0x00000044,0x000200f8,0x00000046,0x0004003b,0x0000000d, + 0x00000291,0x00000007,0x0004003b,0x00000013,0x00000292,0x00000007,0x0004003b,0x00000013, + 0x00000294,0x00000007,0x0004003b,0x00000013,0x00000296,0x00000007,0x0004003b,0x00000013, + 0x00000297,0x00000007,0x0004003b,0x00000013,0x00000299,0x00000007,0x0004003b,0x00000013, + 0x0000029b,0x00000007,0x0004003b,0x00000013,0x0000029d,0x00000007,0x0004003b,0x00000013, + 0x0000029e,0x00000007,0x0004003b,0x0000000d,0x000002a1,0x00000007,0x0004003b,0x00000013, + 0x000002a3,0x00000007,0x0004003b,0x00000013,0x000002a5,0x00000007,0x0004003b,0x00000013, + 0x000002a7,0x00000007,0x0004003b,0x00000013,0x000002a8,0x00000007,0x0004003b,0x0000000d, + 0x000002ab,0x00000007,0x0004003b,0x00000013,0x000002ad,0x00000007,0x0004003b,0x00000013, + 0x000002af,0x00000007,0x0004003b,0x00000013,0x000002b1,0x00000007,0x0004003b,0x00000013, + 0x000002b2,0x00000007,0x0004003b,0x0000000d,0x000002b5,0x00000007,0x0004003b,0x00000013, + 0x000002b6,0x00000007,0x0004003b,0x00000013,0x000002b8,0x00000007,0x0004003b,0x00000013, + 0x000002ba,0x00000007,0x0004003b,0x00000013,0x000002bb,0x00000007,0x0004003b,0x00000013, + 0x000002bd,0x00000007,0x0004003b,0x00000013,0x000002bf,0x00000007,0x0004003b,0x00000013, + 0x000002c1,0x00000007,0x0004003b,0x00000013,0x000002c2,0x00000007,0x0004003b,0x0000000d, + 0x000002c5,0x00000007,0x0004003b,0x00000013,0x000002c7,0x00000007,0x0004003b,0x00000013, + 0x000002c9,0x00000007,0x0004003b,0x00000013,0x000002cb,0x00000007,0x0004003b,0x00000013, + 0x000002cc,0x00000007,0x0004003b,0x0000000d,0x000002cf,0x00000007,0x0004003b,0x00000013, + 0x000002d1,0x00000007,0x0004003b,0x00000013,0x000002d3,0x00000007,0x0004003b,0x00000013, + 0x000002d5,0x00000007,0x0004003b,0x00000013,0x000002d6,0x00000007,0x0004003d,0x0000000e, + 0x00000293,0x00000043,0x0003003e,0x00000292,0x00000293,0x0004003d,0x0000000e,0x00000295, + 0x00000044,0x0003003e,0x00000294,0x00000295,0x0003003e,0x00000296,0x000000b8,0x0003003e, + 0x00000297,0x000000b8,0x00080039,0x0000000c,0x00000298,0x00000040,0x00000292,0x00000294, + 0x00000296,0x00000297,0x0004003d,0x0000000e,0x0000029a,0x00000043,0x0003003e,0x00000299, + 0x0000029a,0x0004003d,0x0000000e,0x0000029c,0x00000044,0x0003003e,0x0000029b,0x0000029c, + 0x0003003e,0x0000029d,0x0000007d,0x0003003e,0x0000029e,0x000000b8,0x00080039,0x0000000c, + 0x0000029f,0x00000040,0x00000299,0x0000029b,0x0000029d,0x0000029e,0x00050081,0x0000000c, + 0x000002a0,0x00000298,0x0000029f,0x0003003e,0x00000291,0x000002a0,0x0004003d,0x0000000c, + 0x000002a2,0x00000291,0x0004003d,0x0000000e,0x000002a4,0x00000043,0x0003003e,0x000002a3, + 0x000002a4,0x0004003d,0x0000000e,0x000002a6,0x00000044,0x0003003e,0x000002a5,0x000002a6, + 0x0003003e,0x000002a7,0x0000024e,0x0003003e,0x000002a8,0x000000b8,0x00080039,0x0000000c, + 0x000002a9,0x00000040,0x000002a3,0x000002a5,0x000002a7,0x000002a8,0x00050081,0x0000000c, + 0x000002aa,0x000002a2,0x000002a9,0x0003003e,0x000002a1,0x000002aa,0x0004003d,0x0000000c, + 0x000002ac,0x000002a1,0x0004003d,0x0000000e,0x000002ae,0x00000043,0x0003003e,0x000002ad, + 0x000002ae,0x0004003d,0x0000000e,0x000002b0,0x00000044,0x0003003e,0x000002af,0x000002b0, + 0x0003003e,0x000002b1,0x00000136,0x0003003e,0x000002b2,0x000000b8,0x00080039,0x0000000c, + 0x000002b3,0x00000040,0x000002ad,0x000002af,0x000002b1,0x000002b2,0x00050081,0x0000000c, + 0x000002b4,0x000002ac,0x000002b3,0x0003003e,0x000002ab,0x000002b4,0x0004003d,0x0000000e, + 0x000002b7,0x00000043,0x0003003e,0x000002b6,0x000002b7,0x0004003d,0x0000000e,0x000002b9, + 0x00000044,0x0003003e,0x000002b8,0x000002b9,0x0003003e,0x000002ba,0x000000b8,0x0003003e, + 0x000002bb,0x0000007d,0x00080039,0x0000000c,0x000002bc,0x00000040,0x000002b6,0x000002b8, + 0x000002ba,0x000002bb,0x0004003d,0x0000000e,0x000002be,0x00000043,0x0003003e,0x000002bd, + 0x000002be,0x0004003d,0x0000000e,0x000002c0,0x00000044,0x0003003e,0x000002bf,0x000002c0, + 0x0003003e,0x000002c1,0x0000007d,0x0003003e,0x000002c2,0x0000007d,0x00080039,0x0000000c, + 0x000002c3,0x00000040,0x000002bd,0x000002bf,0x000002c1,0x000002c2,0x00050081,0x0000000c, + 0x000002c4,0x000002bc,0x000002c3,0x0003003e,0x000002b5,0x000002c4,0x0004003d,0x0000000c, + 0x000002c6,0x000002b5,0x0004003d,0x0000000e,0x000002c8,0x00000043,0x0003003e,0x000002c7, + 0x000002c8,0x0004003d,0x0000000e,0x000002ca,0x00000044,0x0003003e,0x000002c9,0x000002ca, + 0x0003003e,0x000002cb,0x0000024e,0x0003003e,0x000002cc,0x0000007d,0x00080039,0x0000000c, + 0x000002cd,0x00000040,0x000002c7,0x000002c9,0x000002cb,0x000002cc,0x00050081,0x0000000c, + 0x000002ce,0x000002c6,0x000002cd,0x0003003e,0x000002c5,0x000002ce,0x0004003d,0x0000000c, + 0x000002d0,0x000002c5,0x0004003d,0x0000000e,0x000002d2,0x00000043,0x0003003e,0x000002d1, + 0x000002d2,0x0004003d,0x0000000e,0x000002d4,0x00000044,0x0003003e,0x000002d3,0x000002d4, + 0x0003003e,0x000002d5,0x00000136,0x0003003e,0x000002d6,0x0000007d,0x00080039,0x0000000c, + 0x000002d7,0x00000040,0x000002d1,0x000002d3,0x000002d5,0x000002d6,0x00050081,0x0000000c, + 0x000002d8,0x000002d0,0x000002d7,0x0003003e,0x000002cf,0x000002d8,0x0004003d,0x0000000c, + 0x000002d9,0x000002ab,0x0004003d,0x0000000c,0x000002da,0x000002cf,0x00050081,0x0000000c, + 0x000002db,0x000002d9,0x000002da,0x000200fe,0x000002db,0x00010038, +}; +inline constexpr uint32_t k_e4m3_k32_f32__gemm_fp8[] = { + 0x07230203,0x00010600,0x0008000b,0x0000044f,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x0000003d,0x00020011,0x00001074,0x00020011, + 0x00001075,0x00020011,0x00001151,0x00020011,0x00001160,0x00020011,0x000014e1,0x00020011, + 0x00001786,0x0005000a,0x5f565053,0x5f545845,0x616f6c66,0x00003874,0x0008000a,0x5f565053, + 0x5f52484b,0x706f6f63,0x74617265,0x5f657669,0x7274616d,0x00007869,0x0006000b,0x00000001, + 0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000003,0x0013000f, + 0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000184,0x00000189,0x0000018c,0x00000199, + 0x00000210,0x0000021c,0x0000022b,0x0000023a,0x000002b1,0x000002c5,0x000002e4,0x000002fe, + 0x00000406,0x00000438,0x0006014b,0x00000004,0x00000026,0x00000007,0x00000008,0x00000008, + 0x00030003,0x00000002,0x000001cc,0x00090004,0x455f4c47,0x635f5458,0x72746e6f,0x665f6c6f, + 0x5f776f6c,0x72747461,0x74756269,0x00007365,0x00060004,0x455f4c47,0x665f5458,0x74616f6c, + 0x6d34655f,0x00000033,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x36315f72,0x5f746962, + 0x726f7473,0x00656761,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x62385f72,0x735f7469, + 0x61726f74,0x00006567,0x000b0004,0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70, + 0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f, + 0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004, + 0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669,0x00080004, + 0x4b5f4c47,0x635f5248,0x65706f6f,0x69746172,0x6d5f6576,0x69727461,0x00000078,0x00090004, + 0x4b5f4c47,0x6d5f5248,0x726f6d65,0x63735f79,0x5f65706f,0x616d6573,0x6369746e,0x00000073, + 0x00090004,0x4b5f4c47,0x735f5248,0x65646168,0x75735f72,0x6f726762,0x625f7075,0x63697361, + 0x00000000,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000d,0x6e756f72, + 0x36314664,0x3b316628,0x00000000,0x00040005,0x0000000c,0x756c6176,0x00000065,0x00060005, + 0x00000013,0x42363166,0x28737469,0x31363166,0x0000003b,0x00040005,0x00000012,0x756c6176, + 0x00000065,0x00060005,0x00000019,0x66696873,0x656e5274,0x3b317528,0x003b3175,0x00040005, + 0x00000017,0x756c6176,0x00000065,0x00040005,0x00000018,0x66696873,0x00000074,0x00080005, + 0x0000001d,0x336d3465,0x65646f43,0x6d6f7246,0x42363146,0x28737469,0x003b3175,0x00050005, + 0x0000001c,0x666c6168,0x73746942,0x00000000,0x00060005,0x00000021,0x336d3465,0x33466f54, + 0x31752832,0x0000003b,0x00040005,0x00000020,0x73746962,0x00000000,0x00060005,0x00000024, + 0x7543706d,0x53636962,0x28756c69,0x003b3166,0x00040005,0x00000023,0x756c6176,0x00000065, + 0x00060005,0x00000027,0x336d3465,0x6f547748,0x28323346,0x003b3175,0x00040005,0x00000026, + 0x65646f63,0x00000000,0x00040005,0x00000029,0x73746962,0x00000000,0x00040005,0x0000002c, + 0x6e676973,0x00000000,0x00050005,0x00000030,0x6e67616d,0x64757469,0x00000065,0x00040005, + 0x0000004a,0x6c616373,0x00006465,0x00030005,0x0000005b,0x0062736c,0x00040005,0x00000060, + 0x6e756f72,0x00646564,0x00050005,0x00000074,0x746f7571,0x746e6569,0x00000000,0x00060005, + 0x00000078,0x616d6572,0x65646e69,0x73614d72,0x0000006b,0x00050005,0x0000007c,0x616d6572, + 0x65646e69,0x00000072,0x00040005,0x00000080,0x666c6168,0x00796177,0x00040005,0x0000009b, + 0x614e7369,0x0000006e,0x00050005,0x000000b7,0x6167656e,0x65766974,0x00000000,0x00050005, + 0x000000bd,0x6f707865,0x746e656e,0x00000000,0x00050005,0x000000c3,0x746e616d,0x61737369, + 0x00000000,0x00040005,0x000000ca,0x65646f63,0x00000000,0x00050005,0x000000d1,0x6e676973, + 0x63696669,0x00646e61,0x00040005,0x000000dd,0x66696873,0x00000074,0x00040005,0x000000e9, + 0x61726170,0x0000006d,0x00040005,0x000000eb,0x61726170,0x0000006d,0x00050005,0x000000f0, + 0x78453465,0x656e6f70,0x0000746e,0x00050005,0x000000f3,0x614d3465,0x7369746e,0x00006173, + 0x00040005,0x000000f5,0x61726170,0x0000006d,0x00040005,0x000000f7,0x61726170,0x0000006d, + 0x00050005,0x0000011a,0x6167656e,0x65766974,0x00000000,0x00050005,0x0000011e,0x6f707865, + 0x746e656e,0x00000000,0x00050005,0x00000122,0x746e616d,0x61737369,0x00000000,0x00040005, + 0x00000129,0x756c6176,0x00000065,0x00040005,0x00000150,0x6e756f62,0x00646564,0x00040005, + 0x00000155,0x61726170,0x0000006d,0x00050005,0x00000157,0x6f736261,0x6574756c,0x00000000, + 0x00040005,0x0000015a,0x61726170,0x0000006d,0x00040005,0x0000015c,0x656e6e69,0x00000072, + 0x00040005,0x00000161,0x61726170,0x0000006d,0x00050005,0x00000163,0x796c6f70,0x696d6f6e, + 0x00006c61,0x00040005,0x00000168,0x61726170,0x0000006d,0x00040005,0x0000016d,0x61726170, + 0x0000006d,0x00040005,0x0000017c,0x61726170,0x0000006d,0x00040005,0x00000181,0x65726874, + 0x00006461,0x00080005,0x00000184,0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163,0x44496e6f, + 0x00000000,0x00050005,0x00000188,0x67627573,0x70756f72,0x00000000,0x00060005,0x00000189, + 0x535f6c67,0x72676275,0x4970756f,0x00000044,0x00040005,0x0000018b,0x696c7073,0x00000074, + 0x00060005,0x0000018c,0x575f6c67,0x476b726f,0x70756f72,0x00004449,0x00040005,0x0000018f, + 0x494c5053,0x00004b54,0x00060005,0x00000191,0x756c6f63,0x694c6e6d,0x7261656e,0x00000000, + 0x00040005,0x00000195,0x63746162,0x00000068,0x00040005,0x00000197,0x68737550,0x00000000, + 0x00050006,0x00000197,0x00000000,0x73776f72,0x00000000,0x00040006,0x00000197,0x00000001, + 0x0000004e,0x00050006,0x00000197,0x00000002,0x74616d4e,0x00786972,0x00080006,0x00000197, + 0x00000003,0x67696577,0x6f437468,0x6e6d756c,0x7366664f,0x00007465,0x00060006,0x00000197, + 0x00000004,0x75706e69,0x72745374,0x00656469,0x00070006,0x00000197,0x00000005,0x75706e69, + 0x6c6f4374,0x426e6d75,0x00657361,0x00070006,0x00000197,0x00000006,0x7074756f,0x74537475, + 0x65646972,0x00000000,0x00080006,0x00000197,0x00000007,0x7074756f,0x6f437475,0x6e6d756c, + 0x7366664f,0x00007465,0x00070006,0x00000197,0x00000008,0x48787561,0x4f666c61,0x65736666, + 0x00000074,0x00050006,0x00000197,0x00000009,0x63746162,0x00736568,0x00070006,0x00000197, + 0x0000000a,0x756c6f63,0x72476e6d,0x7370756f,0x00000000,0x00060006,0x00000197,0x0000000b, + 0x696c7073,0x72745374,0x00656469,0x00030005,0x00000199,0x00006370,0x00050005,0x000001a0, + 0x756c6f63,0x72476e6d,0x0070756f,0x00050005,0x000001a5,0x636f6c62,0x776f526b,0x00000000, + 0x00050005,0x000001ae,0x47425553,0x50554f52,0x00000053,0x00030005,0x000001af,0x00004d42, + 0x00040005,0x000001b1,0x426c6f63,0x00657361,0x00040005,0x000001b3,0x454c4954,0x00000053, + 0x00030005,0x000001b4,0x00004e42,0x00050005,0x000001b6,0x4374756f,0x6d756c6f,0x0000006e, + 0x00040005,0x000001c0,0x656c6974,0x00776f52,0x00040005,0x000001c3,0x45524854,0x00534441, + 0x00060005,0x000001c4,0x47425553,0x50554f52,0x554f435f,0x0000544e,0x00050005,0x000001c5, + 0x5f574f52,0x454c4954,0x00000053,0x00070005,0x000001c6,0x47425553,0x50554f52,0x45505f53, + 0x4f525f52,0x00000057,0x00050005,0x000001c9,0x656c6974,0x756c6f43,0x00306e6d,0x00060005, + 0x000001cc,0x554c4f43,0x545f4e4d,0x53454c49,0x00000000,0x00070005,0x000001cd,0x454c4954, + 0x45505f53,0x55535f52,0x4f524742,0x00005055,0x00050005,0x000001cf,0x73776f72,0x696c6156, + 0x00000064,0x00060005,0x000001d7,0x64656573,0x69736552,0x6c617564,0x00000000,0x00040005, + 0x000001d8,0x47414c46,0x00000053,0x00030005,0x000001e1,0x00000069,0x00030005,0x000001eb, + 0x00776f72,0x00040005,0x000001f0,0x756c6f63,0x00006e6d,0x00040005,0x000001f5,0x756c6176, + 0x00000065,0x00040005,0x000001fc,0x65646e69,0x00000078,0x00050005,0x0000020e,0x69736552, + 0x6c617564,0x00003445,0x00060006,0x0000020e,0x00000000,0x69736572,0x6c617564,0x00000038, + 0x00030005,0x00000210,0x00000000,0x00040005,0x00000216,0x61726170,0x0000006d,0x00060005, + 0x0000021a,0x69736552,0x6c617564,0x666c6148,0x00000000,0x00060006,0x0000021a,0x00000000, + 0x69736572,0x6c617564,0x00003631,0x00030005,0x0000021c,0x00000000,0x00030005,0x00000229, + 0x00787541,0x00050006,0x00000229,0x00000000,0x31787561,0x00000036,0x00030005,0x0000022b, + 0x00000000,0x00040005,0x00000235,0x61726170,0x0000006d,0x00040005,0x0000023a,0x636f6c62, + 0x0036316b,0x00030005,0x00000243,0x00000074,0x00030005,0x00000250,0x00005f68,0x00030005, + 0x00000264,0x00636361,0x00040005,0x0000026e,0x61746f74,0x0000006c,0x00050005,0x00000273, + 0x6c6f4361,0x426e6d75,0x00657361,0x00030005,0x0000027e,0x0000004b,0x00040005,0x00000282, + 0x6765426b,0x00006e69,0x00040005,0x00000285,0x70657473,0x00000073,0x00030005,0x00000287, + 0x00000073,0x00040005,0x0000028f,0x70657473,0x00000000,0x00030005,0x00000293,0x00000069, + 0x00030005,0x0000029d,0x00000072,0x00030005,0x000002a0,0x00000077,0x00030005,0x000002a3, + 0x00776f72,0x00040005,0x000002ad,0x65646f63,0x00000073,0x00040005,0x000002af,0x75706e49, + 0x00004174,0x00040006,0x000002af,0x00000000,0x00003461,0x00030005,0x000002b1,0x00000000, + 0x00040005,0x000002c5,0x67617473,0x00004165,0x00030005,0x000002d0,0x00000069,0x00030005, + 0x000002da,0x0000006e,0x00030005,0x000002dd,0x00000077,0x00040005,0x000002e0,0x65646f63, + 0x00000073,0x00040005,0x000002e2,0x75706e49,0x00004274,0x00040006,0x000002e2,0x00000000, + 0x00003462,0x00030005,0x000002e4,0x00000000,0x00040005,0x000002fe,0x67617473,0x00004265, + 0x00030005,0x0000030b,0x00000074,0x00030005,0x00000313,0x00005f73,0x00030005,0x0000031e, + 0x00005f61,0x00030005,0x0000032d,0x00005f62,0x00030005,0x0000034b,0x00005f72,0x00040005, + 0x00000359,0x61726170,0x0000006d,0x00030005,0x00000362,0x0000626b,0x00050005,0x00000365, + 0x54524150,0x4f495449,0x0000004e,0x00030005,0x00000377,0x00000074,0x00030005,0x00000392, + 0x00005f72,0x00040005,0x000003a0,0x61726170,0x0000006d,0x00030005,0x000003b0,0x00000074, + 0x00030005,0x000003c2,0x00000074,0x00030005,0x000003ca,0x00005f68,0x00030005,0x000003e1, + 0x00000069,0x00030005,0x000003eb,0x00776f72,0x00040005,0x000003f0,0x756c6f63,0x00006e6d, + 0x00040005,0x000003fc,0x756c6176,0x00000065,0x00050005,0x00000404,0x7074754f,0x61487475, + 0x0000666c,0x00050006,0x00000404,0x00000000,0x3174756f,0x00000036,0x00030005,0x00000406, + 0x00000000,0x00040005,0x00000424,0x61726170,0x0000006d,0x00040005,0x00000427,0x65646e69, + 0x00000078,0x00050005,0x00000436,0x7074754f,0x34457475,0x00000000,0x00050006,0x00000436, + 0x00000000,0x3874756f,0x00000000,0x00030005,0x00000438,0x00000000,0x00040005,0x0000043a, + 0x61726170,0x0000006d,0x00040005,0x0000043d,0x61726170,0x0000006d,0x00040005,0x0000044a, + 0x54504544,0x00000048,0x00040005,0x0000044b,0x56444150,0x00000034,0x00040005,0x0000044e, + 0x4554534b,0x00000050,0x00040047,0x00000007,0x00000001,0x00000008,0x00040047,0x00000184, + 0x0000000b,0x0000001b,0x00040047,0x00000189,0x0000000b,0x00000028,0x00040047,0x0000018c, + 0x0000000b,0x0000001a,0x00040047,0x0000018f,0x00000001,0x00000009,0x00030047,0x00000197, + 0x00000002,0x00050048,0x00000197,0x00000000,0x00000023,0x00000000,0x00050048,0x00000197, + 0x00000001,0x00000023,0x00000004,0x00050048,0x00000197,0x00000002,0x00000023,0x00000008, + 0x00050048,0x00000197,0x00000003,0x00000023,0x0000000c,0x00050048,0x00000197,0x00000004, + 0x00000023,0x00000010,0x00050048,0x00000197,0x00000005,0x00000023,0x00000014,0x00050048, + 0x00000197,0x00000006,0x00000023,0x00000018,0x00050048,0x00000197,0x00000007,0x00000023, + 0x0000001c,0x00050048,0x00000197,0x00000008,0x00000023,0x00000020,0x00050048,0x00000197, + 0x00000009,0x00000023,0x00000024,0x00050048,0x00000197,0x0000000a,0x00000023,0x00000028, + 0x00050048,0x00000197,0x0000000b,0x00000023,0x0000002c,0x00040047,0x000001ae,0x00000001, + 0x00000007,0x00040047,0x000001b3,0x00000001,0x00000001,0x00040047,0x000001d8,0x00000001, + 0x00000002,0x00040047,0x0000020d,0x00000006,0x00000001,0x00030047,0x0000020e,0x00000002, + 0x00040048,0x0000020e,0x00000000,0x00000018,0x00050048,0x0000020e,0x00000000,0x00000023, + 0x00000000,0x00030047,0x00000210,0x00000018,0x00040047,0x00000210,0x00000021,0x00000006, + 0x00040047,0x00000210,0x00000022,0x00000000,0x00040047,0x00000219,0x00000006,0x00000002, + 0x00030047,0x0000021a,0x00000002,0x00040048,0x0000021a,0x00000000,0x00000018,0x00050048, + 0x0000021a,0x00000000,0x00000023,0x00000000,0x00030047,0x0000021c,0x00000018,0x00040047, + 0x0000021c,0x00000021,0x00000003,0x00040047,0x0000021c,0x00000022,0x00000000,0x00040047, + 0x00000228,0x00000006,0x00000002,0x00030047,0x00000229,0x00000002,0x00040048,0x00000229, + 0x00000000,0x00000018,0x00050048,0x00000229,0x00000000,0x00000023,0x00000000,0x00030047, + 0x0000022b,0x00000018,0x00040047,0x0000022b,0x00000021,0x00000004,0x00040047,0x0000022b, + 0x00000022,0x00000000,0x00040047,0x0000027e,0x00000001,0x00000000,0x00040047,0x000002ae, + 0x00000006,0x00000010,0x00030047,0x000002af,0x00000002,0x00040048,0x000002af,0x00000000, + 0x00000018,0x00050048,0x000002af,0x00000000,0x00000023,0x00000000,0x00030047,0x000002b1, + 0x00000018,0x00040047,0x000002b1,0x00000021,0x00000000,0x00040047,0x000002b1,0x00000022, + 0x00000000,0x00040047,0x000002e1,0x00000006,0x00000010,0x00030047,0x000002e2,0x00000002, + 0x00040048,0x000002e2,0x00000000,0x00000018,0x00050048,0x000002e2,0x00000000,0x00000023, + 0x00000000,0x00030047,0x000002e4,0x00000018,0x00040047,0x000002e4,0x00000021,0x00000001, + 0x00040047,0x000002e4,0x00000022,0x00000000,0x00040047,0x00000365,0x00000001,0x00000003, + 0x00040047,0x00000403,0x00000006,0x00000002,0x00030047,0x00000404,0x00000002,0x00040048, + 0x00000404,0x00000000,0x00000019,0x00050048,0x00000404,0x00000000,0x00000023,0x00000000, + 0x00030047,0x00000406,0x00000019,0x00040047,0x00000406,0x00000021,0x00000002,0x00040047, + 0x00000406,0x00000022,0x00000000,0x00040047,0x00000435,0x00000006,0x00000001,0x00030047, + 0x00000436,0x00000002,0x00040048,0x00000436,0x00000000,0x00000019,0x00050048,0x00000436, + 0x00000000,0x00000023,0x00000000,0x00030047,0x00000438,0x00000019,0x00040047,0x00000438, + 0x00000021,0x00000005,0x00040047,0x00000438,0x00000022,0x00000000,0x00040047,0x0000044a, + 0x00000001,0x00000004,0x00040047,0x0000044b,0x00000001,0x00000005,0x00040047,0x0000044c, + 0x00000001,0x00000008,0x00040047,0x0000044e,0x00000001,0x0000000a,0x00020013,0x00000002, + 0x00030021,0x00000003,0x00000002,0x00040015,0x00000006,0x00000020,0x00000000,0x00040032, + 0x00000006,0x00000007,0x00000001,0x0004002b,0x00000006,0x00000008,0x00000001,0x00030016, + 0x00000009,0x00000020,0x00040020,0x0000000a,0x00000007,0x00000009,0x00040021,0x0000000b, + 0x00000009,0x0000000a,0x00030016,0x0000000f,0x00000010,0x00040020,0x00000010,0x00000007, + 0x0000000f,0x00040021,0x00000011,0x00000006,0x00000010,0x00040020,0x00000015,0x00000007, + 0x00000006,0x00050021,0x00000016,0x00000006,0x00000015,0x00000015,0x00040021,0x0000001b, + 0x00000006,0x00000015,0x00040021,0x0000001f,0x00000009,0x00000015,0x0004002b,0x00000006, + 0x0000002e,0x80000000,0x0004002b,0x00000006,0x00000032,0x7fffffff,0x0004002b,0x00000006, + 0x00000035,0x7f800000,0x00020014,0x00000036,0x0004002b,0x00000006,0x0000003d,0x477ff000, + 0x0004002b,0x00000006,0x00000046,0x38800000,0x0004002b,0x00000009,0x0000004d,0x4b800000, + 0x0004002b,0x00000009,0x00000054,0x33800000,0x0004002b,0x00000006,0x0000005d,0x0000000d, + 0x0004002b,0x00000006,0x00000062,0x00000fff,0x0004002b,0x00000006,0x00000066,0xffffe000, + 0x00040015,0x0000006f,0x00000010,0x00000000,0x0004002b,0x00000006,0x00000092,0x00000000, + 0x00040020,0x0000009a,0x00000007,0x00000036,0x0004002b,0x00000006,0x0000009d,0x00007c00, + 0x0004002b,0x00000006,0x000000a3,0x000003ff,0x0004002b,0x00000006,0x000000ac,0x00007fff, + 0x0004002b,0x00000006,0x000000b2,0x00000008,0x0004002b,0x00000006,0x000000b4,0x00000080, + 0x0004002b,0x00000006,0x000000b9,0x00008000,0x0004002b,0x00000006,0x000000bf,0x0000000a, + 0x0004002b,0x00000006,0x000000c1,0x0000001f,0x0004002b,0x00000006,0x000000cb,0x0000007e, + 0x0004002b,0x00000006,0x000000d9,0x00000400,0x0004002b,0x00000006,0x000000e3,0x0000000f, + 0x0004002b,0x00000006,0x000000e5,0x00000010,0x0004002b,0x00000006,0x000000f4,0x00000007, + 0x0004002b,0x00000006,0x00000107,0x00000006,0x0004002b,0x00000006,0x00000110,0x00000003, + 0x0004002b,0x00000009,0x0000012c,0x3b000000,0x0004002b,0x00000009,0x00000136,0x00000000, + 0x0004002b,0x00000009,0x00000138,0x3f800000,0x0004002b,0x00000009,0x0000013b,0x3e000000, + 0x0004002b,0x00000006,0x0000013f,0x00000078,0x0004002b,0x00000006,0x00000141,0x00000017, + 0x0004002b,0x00000009,0x00000152,0xc0800000,0x0004002b,0x00000009,0x00000153,0x40800000, + 0x0004002b,0x00000009,0x0000015d,0xbd650000,0x0004002b,0x00000009,0x0000015f,0x3ee50000, + 0x0004002b,0x00000009,0x00000166,0x3f650000,0x0004002b,0x00000006,0x00000172,0x0000007f, + 0x0004002b,0x00000006,0x0000017a,0x000000ff,0x00040017,0x00000182,0x00000006,0x00000003, + 0x00040020,0x00000183,0x00000001,0x00000182,0x0004003b,0x00000183,0x00000184,0x00000001, + 0x00040020,0x00000185,0x00000001,0x00000006,0x0004003b,0x00000185,0x00000189,0x00000001, + 0x0004003b,0x00000183,0x0000018c,0x00000001,0x00040032,0x00000006,0x0000018f,0x00000001, + 0x000e001e,0x00000197,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006, + 0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00040020,0x00000198, + 0x00000009,0x00000197,0x0004003b,0x00000198,0x00000199,0x00000009,0x00040015,0x0000019a, + 0x00000020,0x00000001,0x0004002b,0x0000019a,0x0000019b,0x0000000a,0x00040020,0x0000019c, + 0x00000009,0x00000006,0x0004002b,0x00000006,0x000001a8,0x00000002,0x0004002b,0x00000006, + 0x000001ab,0x0000ffff,0x00040032,0x00000006,0x000001ae,0x00000004,0x00060034,0x00000006, + 0x000001af,0x00000084,0x000000e5,0x000001ae,0x00040032,0x00000006,0x000001b3,0x00000004, + 0x00060034,0x00000006,0x000001b4,0x00000084,0x000000e5,0x000001b3,0x0004002b,0x0000019a, + 0x000001b7,0x00000007,0x0004002b,0x0000019a,0x000001bb,0x00000001,0x0004002b,0x00000006, + 0x000001c2,0x00000020,0x00060034,0x00000006,0x000001c3,0x00000084,0x000001c2,0x000001ae, + 0x00060034,0x00000006,0x000001c4,0x00000086,0x000001c3,0x000001c2,0x00060034,0x00000006, + 0x000001c5,0x00000086,0x000001af,0x000000e5,0x00060034,0x00000006,0x000001c6,0x00000086, + 0x000001c4,0x000001c5,0x00060034,0x00000006,0x000001cc,0x00000086,0x000001b4,0x000000e5, + 0x00060034,0x00000006,0x000001cd,0x00000086,0x000001cc,0x000001c6,0x0004002b,0x0000019a, + 0x000001d3,0x00000000,0x00040032,0x00000006,0x000001d8,0x00000000,0x00060034,0x00000006, + 0x000001d9,0x000000c7,0x000001d8,0x00000008,0x00060034,0x00000036,0x000001da,0x000000ab, + 0x000001d9,0x00000092,0x00060034,0x00000006,0x000001e9,0x00000084,0x000001af,0x000001b4, + 0x0004002b,0x0000019a,0x000001fe,0x00000006,0x0004002b,0x00000006,0x00000206,0x00000040, + 0x00060034,0x00000006,0x00000207,0x000000c7,0x000001d8,0x00000206,0x00060034,0x00000036, + 0x00000208,0x000000ab,0x00000207,0x00000092,0x00040015,0x0000020c,0x00000008,0x00000000, + 0x0003001d,0x0000020d,0x0000020c,0x0003001e,0x0000020e,0x0000020d,0x00040020,0x0000020f, + 0x0000000c,0x0000020e,0x0004003b,0x0000020f,0x00000210,0x0000000c,0x00040020,0x00000212, + 0x0000000c,0x0000020c,0x0003001d,0x00000219,0x0000000f,0x0003001e,0x0000021a,0x00000219, + 0x00040020,0x0000021b,0x0000000c,0x0000021a,0x0004003b,0x0000021b,0x0000021c,0x0000000c, + 0x00040020,0x0000021e,0x0000000c,0x0000000f,0x00060034,0x00000006,0x00000223,0x000000c7, + 0x000001d8,0x000001a8,0x00060034,0x00000036,0x00000224,0x000000ab,0x00000223,0x00000092, + 0x0003001d,0x00000228,0x0000000f,0x0003001e,0x00000229,0x00000228,0x00040020,0x0000022a, + 0x0000000c,0x00000229,0x0004003b,0x0000022a,0x0000022b,0x0000000c,0x0004002b,0x0000019a, + 0x0000022c,0x00000008,0x00060034,0x00000006,0x00000237,0x00000084,0x000001af,0x000001b4, + 0x0004001c,0x00000238,0x0000000f,0x00000237,0x00040020,0x00000239,0x00000004,0x00000238, + 0x0004003b,0x00000239,0x0000023a,0x00000004,0x00040020,0x0000023e,0x00000004,0x0000000f, + 0x0004002b,0x00000006,0x00000242,0x00000108,0x00071168,0x0000024e,0x0000000f,0x00000110, + 0x000000e5,0x000000e5,0x000001a8,0x00040020,0x0000024f,0x00000007,0x0000024e,0x00071168, + 0x00000261,0x00000009,0x00000110,0x000000e5,0x000000e5,0x000001a8,0x0004001c,0x00000262, + 0x00000261,0x000001cd,0x00040020,0x00000263,0x00000007,0x00000262,0x00040020,0x00000268, + 0x00000007,0x00000261,0x0004002c,0x00000261,0x0000026c,0x00000136,0x0004002b,0x0000019a, + 0x00000274,0x00000005,0x00060034,0x00000006,0x00000277,0x000000c7,0x000001d8,0x000000b4, + 0x00060034,0x00000036,0x00000278,0x000000ab,0x00000277,0x00000092,0x00040032,0x00000006, + 0x0000027e,0x00000020,0x00060034,0x00000006,0x00000284,0x00000086,0x0000027e,0x000001c2, + 0x00060034,0x00000006,0x00000285,0x00000086,0x00000284,0x0000018f,0x00060034,0x00000006, + 0x0000029b,0x00000084,0x000001af,0x000001a8,0x00040017,0x000002ab,0x00000006,0x00000004, + 0x00040020,0x000002ac,0x00000007,0x000002ab,0x0003001d,0x000002ae,0x000002ab,0x0003001e, + 0x000002af,0x000002ae,0x00040020,0x000002b0,0x0000000c,0x000002af,0x0004003b,0x000002b0, + 0x000002b1,0x0000000c,0x0004002b,0x0000019a,0x000002b3,0x00000004,0x00040020,0x000002bf, + 0x0000000c,0x000002ab,0x00060034,0x00000006,0x000002c2,0x00000084,0x000001af,0x00000110, + 0x0004001c,0x000002c3,0x000002ab,0x000002c2,0x00040020,0x000002c4,0x00000004,0x000002c3, + 0x0004003b,0x000002c4,0x000002c5,0x00000004,0x00040020,0x000002cc,0x00000004,0x000002ab, + 0x00060034,0x00000006,0x000002d8,0x00000084,0x000001b4,0x000001a8,0x0003001d,0x000002e1, + 0x000002ab,0x0003001e,0x000002e2,0x000002e1,0x00040020,0x000002e3,0x0000000c,0x000002e2, + 0x0004003b,0x000002e3,0x000002e4,0x0000000c,0x00060034,0x00000006,0x000002e6,0x00000086, + 0x0000027e,0x000001c2,0x0004002b,0x0000019a,0x000002ea,0x00000002,0x0004002b,0x0000019a, + 0x000002ee,0x00000003,0x00060034,0x00000006,0x000002fb,0x00000084,0x000001b4,0x00000110, + 0x0004001c,0x000002fc,0x000002ab,0x000002fb,0x00040020,0x000002fd,0x00000004,0x000002fc, + 0x0004003b,0x000002fd,0x000002fe,0x00000004,0x00040016,0x0000031b,0x00000008,0x00001076, + 0x00071168,0x0000031c,0x0000031b,0x00000110,0x000000e5,0x000001c2,0x00000092,0x00040020, + 0x0000031d,0x00000007,0x0000031c,0x00071168,0x0000032b,0x0000031b,0x00000110,0x000001c2, + 0x000000e5,0x00000008,0x00040020,0x0000032c,0x00000007,0x0000032b,0x00040020,0x0000034a, + 0x00000007,0x0000019a,0x00040032,0x00000006,0x00000365,0x00000000,0x00060034,0x00000036, + 0x00000366,0x000000ab,0x00000365,0x00000092,0x00060034,0x00000036,0x000003ad,0x000000ab, + 0x00000365,0x00000092,0x00060034,0x00000006,0x000003e9,0x00000084,0x000001af,0x000001b4, + 0x00060034,0x00000036,0x00000400,0x000000ac,0x0000018f,0x00000008,0x0003001d,0x00000403, + 0x0000000f,0x0003001e,0x00000404,0x00000403,0x00040020,0x00000405,0x0000000c,0x00000404, + 0x0004003b,0x00000405,0x00000406,0x0000000c,0x0004002b,0x0000019a,0x00000408,0x0000000b, + 0x00060034,0x00000006,0x0000041e,0x000000c7,0x000001d8,0x000000b2,0x00060034,0x00000036, + 0x0000041f,0x000000ab,0x0000041e,0x00000092,0x0004002b,0x00000006,0x00000430,0x00000030, + 0x00060034,0x00000006,0x00000431,0x000000c7,0x000001d8,0x00000430,0x00060034,0x00000036, + 0x00000432,0x000000ab,0x00000431,0x00000092,0x0003001d,0x00000435,0x0000020c,0x0003001e, + 0x00000436,0x00000435,0x00040020,0x00000437,0x0000000c,0x00000436,0x0004003b,0x00000437, + 0x00000438,0x0000000c,0x00060034,0x00000006,0x00000441,0x000000c7,0x000001d8,0x000000e5, + 0x00060034,0x00000036,0x00000442,0x000000aa,0x00000441,0x00000092,0x00040032,0x00000006, + 0x0000044a,0x00000004,0x00040032,0x00000006,0x0000044b,0x00000001,0x00040032,0x00000006, + 0x0000044c,0x00000001,0x00060033,0x00000182,0x0000044d,0x0000044c,0x00000008,0x00000008, + 0x00040032,0x00000006,0x0000044e,0x00000020,0x00050036,0x00000002,0x00000004,0x00000000, + 0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000015,0x00000181,0x00000007,0x0004003b, + 0x00000015,0x00000188,0x00000007,0x0004003b,0x00000015,0x0000018b,0x00000007,0x0004003b, + 0x00000015,0x00000191,0x00000007,0x0004003b,0x00000015,0x00000195,0x00000007,0x0004003b, + 0x00000015,0x000001a0,0x00000007,0x0004003b,0x00000015,0x000001a5,0x00000007,0x0004003b, + 0x00000015,0x000001b1,0x00000007,0x0004003b,0x00000015,0x000001b6,0x00000007,0x0004003b, + 0x00000015,0x000001c0,0x00000007,0x0004003b,0x00000015,0x000001c9,0x00000007,0x0004003b, + 0x0000009a,0x000001cf,0x00000007,0x0004003b,0x0000009a,0x000001d7,0x00000007,0x0004003b, + 0x00000015,0x000001e1,0x00000007,0x0004003b,0x00000015,0x000001eb,0x00000007,0x0004003b, + 0x00000015,0x000001f0,0x00000007,0x0004003b,0x0000000a,0x000001f5,0x00000007,0x0004003b, + 0x00000015,0x000001fc,0x00000007,0x0004003b,0x0000000a,0x00000209,0x00000007,0x0004003b, + 0x00000015,0x00000216,0x00000007,0x0004003b,0x0000000a,0x00000235,0x00000007,0x0004003b, + 0x00000015,0x00000243,0x00000007,0x0004003b,0x0000024f,0x00000250,0x00000007,0x0004003b, + 0x00000263,0x00000264,0x00000007,0x0004003b,0x00000263,0x0000026e,0x00000007,0x0004003b, + 0x00000015,0x00000273,0x00000007,0x0004003b,0x00000015,0x00000279,0x00000007,0x0004003b, + 0x00000015,0x00000282,0x00000007,0x0004003b,0x00000015,0x00000287,0x00000007,0x0004003b, + 0x00000015,0x0000028f,0x00000007,0x0004003b,0x00000015,0x00000293,0x00000007,0x0004003b, + 0x00000015,0x0000029d,0x00000007,0x0004003b,0x00000015,0x000002a0,0x00000007,0x0004003b, + 0x00000015,0x000002a3,0x00000007,0x0004003b,0x000002ac,0x000002ad,0x00000007,0x0004003b, + 0x00000015,0x000002d0,0x00000007,0x0004003b,0x00000015,0x000002da,0x00000007,0x0004003b, + 0x00000015,0x000002dd,0x00000007,0x0004003b,0x000002ac,0x000002e0,0x00000007,0x0004003b, + 0x00000015,0x0000030b,0x00000007,0x0004003b,0x00000015,0x00000313,0x00000007,0x0004003b, + 0x0000031d,0x0000031e,0x00000007,0x0004003b,0x0000032c,0x0000032d,0x00000007,0x0004003b, + 0x0000034a,0x0000034b,0x00000007,0x0004003b,0x0000000a,0x00000359,0x00000007,0x0004003b, + 0x00000015,0x00000362,0x00000007,0x0004003b,0x00000015,0x00000377,0x00000007,0x0004003b, + 0x0000034a,0x00000392,0x00000007,0x0004003b,0x0000000a,0x000003a0,0x00000007,0x0004003b, + 0x00000015,0x000003b0,0x00000007,0x0004003b,0x00000015,0x000003c2,0x00000007,0x0004003b, + 0x0000024f,0x000003ca,0x00000007,0x0004003b,0x00000015,0x000003e1,0x00000007,0x0004003b, + 0x00000015,0x000003eb,0x00000007,0x0004003b,0x00000015,0x000003f0,0x00000007,0x0004003b, + 0x00000010,0x000003fc,0x00000007,0x0004003b,0x0000000a,0x00000424,0x00000007,0x0004003b, + 0x00000015,0x00000427,0x00000007,0x0004003b,0x00000010,0x0000043a,0x00000007,0x0004003b, + 0x00000015,0x0000043d,0x00000007,0x00050041,0x00000185,0x00000186,0x00000184,0x00000092, + 0x0004003d,0x00000006,0x00000187,0x00000186,0x0003003e,0x00000181,0x00000187,0x0004003d, + 0x00000006,0x0000018a,0x00000189,0x0003003e,0x00000188,0x0000018a,0x00050041,0x00000185, + 0x0000018d,0x0000018c,0x00000092,0x0004003d,0x00000006,0x0000018e,0x0000018d,0x00050089, + 0x00000006,0x00000190,0x0000018e,0x0000018f,0x0003003e,0x0000018b,0x00000190,0x00050041, + 0x00000185,0x00000192,0x0000018c,0x00000092,0x0004003d,0x00000006,0x00000193,0x00000192, + 0x00050086,0x00000006,0x00000194,0x00000193,0x0000018f,0x0003003e,0x00000191,0x00000194, + 0x0004003d,0x00000006,0x00000196,0x00000191,0x00050041,0x0000019c,0x0000019d,0x00000199, + 0x0000019b,0x0004003d,0x00000006,0x0000019e,0x0000019d,0x00050086,0x00000006,0x0000019f, + 0x00000196,0x0000019e,0x0003003e,0x00000195,0x0000019f,0x0004003d,0x00000006,0x000001a1, + 0x00000191,0x00050041,0x0000019c,0x000001a2,0x00000199,0x0000019b,0x0004003d,0x00000006, + 0x000001a3,0x000001a2,0x00050089,0x00000006,0x000001a4,0x000001a1,0x000001a3,0x0003003e, + 0x000001a0,0x000001a4,0x00050041,0x00000185,0x000001a6,0x0000018c,0x00000008,0x0004003d, + 0x00000006,0x000001a7,0x000001a6,0x00050041,0x00000185,0x000001a9,0x0000018c,0x000001a8, + 0x0004003d,0x00000006,0x000001aa,0x000001a9,0x00050084,0x00000006,0x000001ac,0x000001aa, + 0x000001ab,0x00050080,0x00000006,0x000001ad,0x000001a7,0x000001ac,0x00050084,0x00000006, + 0x000001b0,0x000001ad,0x000001af,0x0003003e,0x000001a5,0x000001b0,0x0004003d,0x00000006, + 0x000001b2,0x000001a0,0x00050084,0x00000006,0x000001b5,0x000001b2,0x000001b4,0x0003003e, + 0x000001b1,0x000001b5,0x00050041,0x0000019c,0x000001b8,0x00000199,0x000001b7,0x0004003d, + 0x00000006,0x000001b9,0x000001b8,0x0004003d,0x00000006,0x000001ba,0x00000195,0x00050041, + 0x0000019c,0x000001bc,0x00000199,0x000001bb,0x0004003d,0x00000006,0x000001bd,0x000001bc, + 0x00050084,0x00000006,0x000001be,0x000001ba,0x000001bd,0x00050080,0x00000006,0x000001bf, + 0x000001b9,0x000001be,0x0003003e,0x000001b6,0x000001bf,0x0004003d,0x00000006,0x000001c1, + 0x00000188,0x00050086,0x00000006,0x000001c7,0x000001c1,0x000001c6,0x00050084,0x00000006, + 0x000001c8,0x000001c7,0x000000e5,0x0003003e,0x000001c0,0x000001c8,0x0004003d,0x00000006, + 0x000001ca,0x00000188,0x00050089,0x00000006,0x000001cb,0x000001ca,0x000001c6,0x00050084, + 0x00000006,0x000001ce,0x000001cb,0x000001cd,0x0003003e,0x000001c9,0x000001ce,0x0004003d, + 0x00000006,0x000001d0,0x000001a5,0x0004003d,0x00000006,0x000001d1,0x000001c0,0x00050080, + 0x00000006,0x000001d2,0x000001d0,0x000001d1,0x00050041,0x0000019c,0x000001d4,0x00000199, + 0x000001d3,0x0004003d,0x00000006,0x000001d5,0x000001d4,0x000500b0,0x00000036,0x000001d6, + 0x000001d2,0x000001d5,0x0003003e,0x000001cf,0x000001d6,0x0004003d,0x00000006,0x000001db, + 0x0000018b,0x000500aa,0x00000036,0x000001dc,0x000001db,0x00000092,0x000500a7,0x00000036, + 0x000001dd,0x000001da,0x000001dc,0x0003003e,0x000001d7,0x000001dd,0x0004003d,0x00000036, + 0x000001de,0x000001d7,0x000300f7,0x000001e0,0x00000000,0x000400fa,0x000001de,0x000001df, + 0x000001e0,0x000200f8,0x000001df,0x0004003d,0x00000006,0x000001e2,0x00000181,0x0003003e, + 0x000001e1,0x000001e2,0x000200f9,0x000001e3,0x000200f8,0x000001e3,0x000400f6,0x000001e5, + 0x000001e6,0x00000000,0x000200f9,0x000001e7,0x000200f8,0x000001e7,0x0004003d,0x00000006, + 0x000001e8,0x000001e1,0x000500b0,0x00000036,0x000001ea,0x000001e8,0x000001e9,0x000400fa, + 0x000001ea,0x000001e4,0x000001e5,0x000200f8,0x000001e4,0x0004003d,0x00000006,0x000001ec, + 0x000001a5,0x0004003d,0x00000006,0x000001ed,0x000001e1,0x00050086,0x00000006,0x000001ee, + 0x000001ed,0x000001b4,0x00050080,0x00000006,0x000001ef,0x000001ec,0x000001ee,0x0003003e, + 0x000001eb,0x000001ef,0x0004003d,0x00000006,0x000001f1,0x000001b1,0x0004003d,0x00000006, + 0x000001f2,0x000001e1,0x00050089,0x00000006,0x000001f3,0x000001f2,0x000001b4,0x00050080, + 0x00000006,0x000001f4,0x000001f1,0x000001f3,0x0003003e,0x000001f0,0x000001f4,0x0003003e, + 0x000001f5,0x00000136,0x0004003d,0x00000006,0x000001f6,0x000001eb,0x00050041,0x0000019c, + 0x000001f7,0x00000199,0x000001d3,0x0004003d,0x00000006,0x000001f8,0x000001f7,0x000500b0, + 0x00000036,0x000001f9,0x000001f6,0x000001f8,0x000300f7,0x000001fb,0x00000000,0x000400fa, + 0x000001f9,0x000001fa,0x000001fb,0x000200f8,0x000001fa,0x0004003d,0x00000006,0x000001fd, + 0x000001eb,0x00050041,0x0000019c,0x000001ff,0x00000199,0x000001fe,0x0004003d,0x00000006, + 0x00000200,0x000001ff,0x00050084,0x00000006,0x00000201,0x000001fd,0x00000200,0x0004003d, + 0x00000006,0x00000202,0x000001b6,0x00050080,0x00000006,0x00000203,0x00000201,0x00000202, + 0x0004003d,0x00000006,0x00000204,0x000001f0,0x00050080,0x00000006,0x00000205,0x00000203, + 0x00000204,0x0003003e,0x000001fc,0x00000205,0x000300f7,0x0000020b,0x00000000,0x000400fa, + 0x00000208,0x0000020a,0x00000218,0x000200f8,0x0000020a,0x0004003d,0x00000006,0x00000211, + 0x000001fc,0x00060041,0x00000212,0x00000213,0x00000210,0x000001d3,0x00000211,0x0004003d, + 0x0000020c,0x00000214,0x00000213,0x00040071,0x00000006,0x00000215,0x00000214,0x0003003e, + 0x00000216,0x00000215,0x00050039,0x00000009,0x00000217,0x00000027,0x00000216,0x0003003e, + 0x00000209,0x00000217,0x000200f9,0x0000020b,0x000200f8,0x00000218,0x0004003d,0x00000006, + 0x0000021d,0x000001fc,0x00060041,0x0000021e,0x0000021f,0x0000021c,0x000001d3,0x0000021d, + 0x0004003d,0x0000000f,0x00000220,0x0000021f,0x00040073,0x00000009,0x00000221,0x00000220, + 0x0003003e,0x00000209,0x00000221,0x000200f9,0x0000020b,0x000200f8,0x0000020b,0x0004003d, + 0x00000009,0x00000222,0x00000209,0x0003003e,0x000001f5,0x00000222,0x000300f7,0x00000226, + 0x00000000,0x000400fa,0x00000224,0x00000225,0x00000226,0x000200f8,0x00000225,0x0004003d, + 0x00000009,0x00000227,0x000001f5,0x00050041,0x0000019c,0x0000022d,0x00000199,0x0000022c, + 0x0004003d,0x00000006,0x0000022e,0x0000022d,0x0004003d,0x00000006,0x0000022f,0x000001f0, + 0x00050080,0x00000006,0x00000230,0x0000022e,0x0000022f,0x00060041,0x0000021e,0x00000231, + 0x0000022b,0x000001d3,0x00000230,0x0004003d,0x0000000f,0x00000232,0x00000231,0x00040073, + 0x00000009,0x00000233,0x00000232,0x00050085,0x00000009,0x00000234,0x00000227,0x00000233, + 0x0003003e,0x00000235,0x00000234,0x00050039,0x00000009,0x00000236,0x0000000d,0x00000235, + 0x0003003e,0x000001f5,0x00000236,0x000200f9,0x00000226,0x000200f8,0x00000226,0x000200f9, + 0x000001fb,0x000200f8,0x000001fb,0x0004003d,0x00000006,0x0000023b,0x000001e1,0x0004003d, + 0x00000009,0x0000023c,0x000001f5,0x00040073,0x0000000f,0x0000023d,0x0000023c,0x00050041, + 0x0000023e,0x0000023f,0x0000023a,0x0000023b,0x0005003e,0x0000023f,0x0000023d,0x00000028, + 0x000001a8,0x000200f9,0x000001e6,0x000200f8,0x000001e6,0x0004003d,0x00000006,0x00000240, + 0x000001e1,0x00050080,0x00000006,0x00000241,0x00000240,0x000001c3,0x0003003e,0x000001e1, + 0x00000241,0x000200f9,0x000001e3,0x000200f8,0x000001e5,0x000400e0,0x000001a8,0x000001a8, + 0x00000242,0x000200f9,0x000001e0,0x000200f8,0x000001e0,0x0003003e,0x00000243,0x00000092, + 0x000200f9,0x00000244,0x000200f8,0x00000244,0x000400f6,0x00000246,0x00000247,0x00000001, + 0x000200f9,0x00000248,0x000200f8,0x00000248,0x0004003d,0x00000006,0x00000249,0x00000243, + 0x000500b0,0x00000036,0x0000024a,0x00000249,0x000001cd,0x000400fa,0x0000024a,0x00000245, + 0x00000246,0x000200f8,0x00000245,0x0004003d,0x00000036,0x0000024b,0x000001d7,0x000300f7, + 0x0000024d,0x00000000,0x000400fa,0x0000024b,0x0000024c,0x0000026a,0x000200f8,0x0000024c, + 0x0004003d,0x00000006,0x00000251,0x000001c0,0x00050084,0x00000006,0x00000252,0x00000251, + 0x000001b4,0x0004003d,0x00000006,0x00000253,0x000001c9,0x0004003d,0x00000006,0x00000254, + 0x00000243,0x00050080,0x00000006,0x00000255,0x00000253,0x00000254,0x00050084,0x00000006, + 0x00000256,0x00000255,0x000000e5,0x00050080,0x00000006,0x00000257,0x00000252,0x00000256, + 0x00050041,0x0000023e,0x00000258,0x0000023a,0x00000257,0x0004003d,0x00000006,0x00000259, + 0x000001c0,0x00050084,0x00000006,0x0000025a,0x00000259,0x000001b4,0x0004003d,0x00000006, + 0x0000025b,0x000001c9,0x0004003d,0x00000006,0x0000025c,0x00000243,0x00050080,0x00000006, + 0x0000025d,0x0000025b,0x0000025c,0x00050084,0x00000006,0x0000025e,0x0000025d,0x000000e5, + 0x00050080,0x00000006,0x0000025f,0x0000025a,0x0000025e,0x00081169,0x0000024e,0x00000260, + 0x00000258,0x000001d3,0x000001b4,0x00000030,0x000001a8,0x0003003e,0x00000250,0x00000260, + 0x0004003d,0x00000006,0x00000265,0x00000243,0x0004003d,0x0000024e,0x00000266,0x00000250, + 0x00040073,0x00000261,0x00000267,0x00000266,0x00050041,0x00000268,0x00000269,0x00000264, + 0x00000265,0x0003003e,0x00000269,0x00000267,0x000200f9,0x0000024d,0x000200f8,0x0000026a, + 0x0004003d,0x00000006,0x0000026b,0x00000243,0x00050041,0x00000268,0x0000026d,0x00000264, + 0x0000026b,0x0003003e,0x0000026d,0x0000026c,0x000200f9,0x0000024d,0x000200f8,0x0000024d, + 0x0004003d,0x00000006,0x0000026f,0x00000243,0x00050041,0x00000268,0x00000270,0x0000026e, + 0x0000026f,0x0003003e,0x00000270,0x0000026c,0x000200f9,0x00000247,0x000200f8,0x00000247, + 0x0004003d,0x00000006,0x00000271,0x00000243,0x00050080,0x00000006,0x00000272,0x00000271, + 0x000001bb,0x0003003e,0x00000243,0x00000272,0x000200f9,0x00000244,0x000200f8,0x00000246, + 0x00050041,0x0000019c,0x00000275,0x00000199,0x00000274,0x0004003d,0x00000006,0x00000276, + 0x00000275,0x000300f7,0x0000027b,0x00000000,0x000400fa,0x00000278,0x0000027a,0x0000027c, + 0x000200f8,0x0000027a,0x0003003e,0x00000279,0x00000092,0x000200f9,0x0000027b,0x000200f8, + 0x0000027c,0x0004003d,0x00000006,0x0000027d,0x00000195,0x00050084,0x00000006,0x0000027f, + 0x0000027d,0x0000027e,0x0003003e,0x00000279,0x0000027f,0x000200f9,0x0000027b,0x000200f8, + 0x0000027b,0x0004003d,0x00000006,0x00000280,0x00000279,0x00050080,0x00000006,0x00000281, + 0x00000276,0x00000280,0x0003003e,0x00000273,0x00000281,0x0004003d,0x00000006,0x00000283, + 0x0000018b,0x00050084,0x00000006,0x00000286,0x00000283,0x00000285,0x0003003e,0x00000282, + 0x00000286,0x0003003e,0x00000287,0x00000092,0x000200f9,0x00000288,0x000200f8,0x00000288, + 0x000400f6,0x0000028a,0x0000028b,0x00000000,0x000200f9,0x0000028c,0x000200f8,0x0000028c, + 0x0004003d,0x00000006,0x0000028d,0x00000287,0x000500b0,0x00000036,0x0000028e,0x0000028d, + 0x00000285,0x000400fa,0x0000028e,0x00000289,0x0000028a,0x000200f8,0x00000289,0x0004003d, + 0x00000006,0x00000290,0x00000282,0x0004003d,0x00000006,0x00000291,0x00000287,0x00050080, + 0x00000006,0x00000292,0x00000290,0x00000291,0x0003003e,0x0000028f,0x00000292,0x000400e0, + 0x000001a8,0x000001a8,0x00000242,0x0004003d,0x00000006,0x00000294,0x00000181,0x0003003e, + 0x00000293,0x00000294,0x000200f9,0x00000295,0x000200f8,0x00000295,0x000400f6,0x00000297, + 0x00000298,0x00000000,0x000200f9,0x00000299,0x000200f8,0x00000299,0x0004003d,0x00000006, + 0x0000029a,0x00000293,0x000500b0,0x00000036,0x0000029c,0x0000029a,0x0000029b,0x000400fa, + 0x0000029c,0x00000296,0x00000297,0x000200f8,0x00000296,0x0004003d,0x00000006,0x0000029e, + 0x00000293,0x000500c2,0x00000006,0x0000029f,0x0000029e,0x00000008,0x0003003e,0x0000029d, + 0x0000029f,0x0004003d,0x00000006,0x000002a1,0x00000293,0x000500c7,0x00000006,0x000002a2, + 0x000002a1,0x00000008,0x0003003e,0x000002a0,0x000002a2,0x0004003d,0x00000006,0x000002a4, + 0x000001a5,0x0004003d,0x00000006,0x000002a5,0x0000029d,0x00050080,0x00000006,0x000002a6, + 0x000002a4,0x000002a5,0x00050041,0x0000019c,0x000002a7,0x00000199,0x000001d3,0x0004003d, + 0x00000006,0x000002a8,0x000002a7,0x00050082,0x00000006,0x000002a9,0x000002a8,0x00000008, + 0x0007000c,0x00000006,0x000002aa,0x00000001,0x00000026,0x000002a6,0x000002a9,0x0003003e, + 0x000002a3,0x000002aa,0x0004003d,0x00000006,0x000002b2,0x000002a3,0x00050041,0x0000019c, + 0x000002b4,0x00000199,0x000002b3,0x0004003d,0x00000006,0x000002b5,0x000002b4,0x00050084, + 0x00000006,0x000002b6,0x000002b2,0x000002b5,0x0004003d,0x00000006,0x000002b7,0x00000273, + 0x00050080,0x00000006,0x000002b8,0x000002b6,0x000002b7,0x0004003d,0x00000006,0x000002b9, + 0x0000028f,0x00050084,0x00000006,0x000002ba,0x000002b9,0x000001c2,0x00050080,0x00000006, + 0x000002bb,0x000002b8,0x000002ba,0x00050086,0x00000006,0x000002bc,0x000002bb,0x000000e5, + 0x0004003d,0x00000006,0x000002bd,0x000002a0,0x00050080,0x00000006,0x000002be,0x000002bc, + 0x000002bd,0x00060041,0x000002bf,0x000002c0,0x000002b1,0x000001d3,0x000002be,0x0004003d, + 0x000002ab,0x000002c1,0x000002c0,0x0003003e,0x000002ad,0x000002c1,0x0004003d,0x00000006, + 0x000002c6,0x0000029d,0x00050084,0x00000006,0x000002c7,0x000002c6,0x00000110,0x0004003d, + 0x00000006,0x000002c8,0x000002a0,0x00050084,0x00000006,0x000002c9,0x000002c8,0x00000008, + 0x00050080,0x00000006,0x000002ca,0x000002c7,0x000002c9,0x0004003d,0x000002ab,0x000002cb, + 0x000002ad,0x00050041,0x000002cc,0x000002cd,0x000002c5,0x000002ca,0x0005003e,0x000002cd, + 0x000002cb,0x00000028,0x000001a8,0x000200f9,0x00000298,0x000200f8,0x00000298,0x0004003d, + 0x00000006,0x000002ce,0x00000293,0x00050080,0x00000006,0x000002cf,0x000002ce,0x000001c3, + 0x0003003e,0x00000293,0x000002cf,0x000200f9,0x00000295,0x000200f8,0x00000297,0x0004003d, + 0x00000006,0x000002d1,0x00000181,0x0003003e,0x000002d0,0x000002d1,0x000200f9,0x000002d2, + 0x000200f8,0x000002d2,0x000400f6,0x000002d4,0x000002d5,0x00000000,0x000200f9,0x000002d6, + 0x000200f8,0x000002d6,0x0004003d,0x00000006,0x000002d7,0x000002d0,0x000500b0,0x00000036, + 0x000002d9,0x000002d7,0x000002d8,0x000400fa,0x000002d9,0x000002d3,0x000002d4,0x000200f8, + 0x000002d3,0x0004003d,0x00000006,0x000002db,0x000002d0,0x000500c2,0x00000006,0x000002dc, + 0x000002db,0x00000008,0x0003003e,0x000002da,0x000002dc,0x0004003d,0x00000006,0x000002de, + 0x000002d0,0x000500c7,0x00000006,0x000002df,0x000002de,0x00000008,0x0003003e,0x000002dd, + 0x000002df,0x0004003d,0x00000006,0x000002e5,0x00000195,0x00050084,0x00000006,0x000002e7, + 0x000002e5,0x000002e6,0x0004003d,0x00000006,0x000002e8,0x0000028f,0x00050080,0x00000006, + 0x000002e9,0x000002e7,0x000002e8,0x00050041,0x0000019c,0x000002eb,0x00000199,0x000002ea, + 0x0004003d,0x00000006,0x000002ec,0x000002eb,0x00050084,0x00000006,0x000002ed,0x000002e9, + 0x000002ec,0x00050041,0x0000019c,0x000002ef,0x00000199,0x000002ee,0x0004003d,0x00000006, + 0x000002f0,0x000002ef,0x00050080,0x00000006,0x000002f1,0x000002ed,0x000002f0,0x0004003d, + 0x00000006,0x000002f2,0x000001b1,0x00050080,0x00000006,0x000002f3,0x000002f1,0x000002f2, + 0x0004003d,0x00000006,0x000002f4,0x000002da,0x00050080,0x00000006,0x000002f5,0x000002f3, + 0x000002f4,0x00050084,0x00000006,0x000002f6,0x000002f5,0x000001a8,0x0004003d,0x00000006, + 0x000002f7,0x000002dd,0x00050080,0x00000006,0x000002f8,0x000002f6,0x000002f7,0x00060041, + 0x000002bf,0x000002f9,0x000002e4,0x000001d3,0x000002f8,0x0004003d,0x000002ab,0x000002fa, + 0x000002f9,0x0003003e,0x000002e0,0x000002fa,0x0004003d,0x00000006,0x000002ff,0x000002da, + 0x00050084,0x00000006,0x00000300,0x000002ff,0x00000110,0x0004003d,0x00000006,0x00000301, + 0x000002dd,0x00050084,0x00000006,0x00000302,0x00000301,0x00000008,0x00050080,0x00000006, + 0x00000303,0x00000300,0x00000302,0x0004003d,0x000002ab,0x00000304,0x000002e0,0x00050041, + 0x000002cc,0x00000305,0x000002fe,0x00000303,0x0005003e,0x00000305,0x00000304,0x00000028, + 0x000001a8,0x000200f9,0x000002d5,0x000200f8,0x000002d5,0x0004003d,0x00000006,0x00000306, + 0x000002d0,0x00050080,0x00000006,0x00000307,0x00000306,0x000001c3,0x0003003e,0x000002d0, + 0x00000307,0x000200f9,0x000002d2,0x000200f8,0x000002d4,0x000400e0,0x000001a8,0x000001a8, + 0x00000242,0x0004003d,0x00000036,0x00000308,0x000001cf,0x000300f7,0x0000030a,0x00000000, + 0x000400fa,0x00000308,0x00000309,0x0000030a,0x000200f8,0x00000309,0x0003003e,0x0000030b, + 0x00000092,0x000200f9,0x0000030c,0x000200f8,0x0000030c,0x000400f6,0x0000030e,0x0000030f, + 0x00000001,0x000200f9,0x00000310,0x000200f8,0x00000310,0x0004003d,0x00000006,0x00000311, + 0x0000030b,0x000500b0,0x00000036,0x00000312,0x00000311,0x000001cd,0x000400fa,0x00000312, + 0x0000030d,0x0000030e,0x000200f8,0x0000030d,0x0003003e,0x00000313,0x00000092,0x000200f9, + 0x00000314,0x000200f8,0x00000314,0x000400f6,0x00000316,0x00000317,0x00000001,0x000200f9, + 0x00000318,0x000200f8,0x00000318,0x0004003d,0x00000006,0x00000319,0x00000313,0x000500b0, + 0x00000036,0x0000031a,0x00000319,0x00000008,0x000400fa,0x0000031a,0x00000315,0x00000316, + 0x000200f8,0x00000315,0x0004003d,0x00000006,0x0000031f,0x000001c0,0x00050084,0x00000006, + 0x00000320,0x0000031f,0x00000110,0x0004003d,0x00000006,0x00000321,0x00000313,0x00050084, + 0x00000006,0x00000322,0x00000321,0x000001a8,0x00050080,0x00000006,0x00000323,0x00000320, + 0x00000322,0x00050041,0x000002cc,0x00000324,0x000002c5,0x00000323,0x0004003d,0x00000006, + 0x00000325,0x000001c0,0x00050084,0x00000006,0x00000326,0x00000325,0x00000110,0x0004003d, + 0x00000006,0x00000327,0x00000313,0x00050084,0x00000006,0x00000328,0x00000327,0x000001a8, + 0x00050080,0x00000006,0x00000329,0x00000326,0x00000328,0x00081169,0x0000031c,0x0000032a, + 0x00000324,0x000001d3,0x00000110,0x00000030,0x000001a8,0x0003003e,0x0000031e,0x0000032a, + 0x0004003d,0x00000006,0x0000032e,0x000001c9,0x0004003d,0x00000006,0x0000032f,0x0000030b, + 0x00050080,0x00000006,0x00000330,0x0000032e,0x0000032f,0x00050084,0x00000006,0x00000331, + 0x00000330,0x000000e5,0x00050084,0x00000006,0x00000332,0x00000331,0x00000110,0x0004003d, + 0x00000006,0x00000333,0x00000313,0x00050084,0x00000006,0x00000334,0x00000333,0x000001a8, + 0x00050080,0x00000006,0x00000335,0x00000332,0x00000334,0x00050041,0x000002cc,0x00000336, + 0x000002fe,0x00000335,0x0004003d,0x00000006,0x00000337,0x000001c9,0x0004003d,0x00000006, + 0x00000338,0x0000030b,0x00050080,0x00000006,0x00000339,0x00000337,0x00000338,0x00050084, + 0x00000006,0x0000033a,0x00000339,0x000000e5,0x00050084,0x00000006,0x0000033b,0x0000033a, + 0x00000110,0x0004003d,0x00000006,0x0000033c,0x00000313,0x00050084,0x00000006,0x0000033d, + 0x0000033c,0x000001a8,0x00050080,0x00000006,0x0000033e,0x0000033b,0x0000033d,0x00081169, + 0x0000032b,0x0000033f,0x00000336,0x000001bb,0x00000110,0x00000030,0x000001a8,0x0003003e, + 0x0000032d,0x0000033f,0x0004003d,0x00000006,0x00000340,0x0000030b,0x0004003d,0x0000031c, + 0x00000341,0x0000031e,0x0004003d,0x0000032b,0x00000342,0x0000032d,0x0004003d,0x00000006, + 0x00000343,0x0000030b,0x00050041,0x00000268,0x00000344,0x00000264,0x00000343,0x0004003d, + 0x00000261,0x00000345,0x00000344,0x0006116b,0x00000261,0x00000346,0x00000341,0x00000342, + 0x00000345,0x00050041,0x00000268,0x00000347,0x00000264,0x00000340,0x0003003e,0x00000347, + 0x00000346,0x000200f9,0x00000317,0x000200f8,0x00000317,0x0004003d,0x00000006,0x00000348, + 0x00000313,0x00050080,0x00000006,0x00000349,0x00000348,0x000001bb,0x0003003e,0x00000313, + 0x00000349,0x000200f9,0x00000314,0x000200f8,0x00000316,0x0003003e,0x0000034b,0x000001d3, + 0x000200f9,0x0000034c,0x000200f8,0x0000034c,0x000400f6,0x0000034e,0x0000034f,0x00000000, + 0x000200f9,0x00000350,0x000200f8,0x00000350,0x0004003d,0x0000019a,0x00000351,0x0000034b, + 0x0004116c,0x00000006,0x00000352,0x00000261,0x0004007c,0x0000019a,0x00000353,0x00000352, + 0x000500b1,0x00000036,0x00000354,0x00000351,0x00000353,0x000400fa,0x00000354,0x0000034d, + 0x0000034e,0x000200f8,0x0000034d,0x0004003d,0x00000006,0x00000355,0x0000030b,0x0004003d, + 0x0000019a,0x00000356,0x0000034b,0x0004003d,0x00000006,0x00000357,0x0000030b,0x0004003d, + 0x0000019a,0x00000358,0x0000034b,0x00060041,0x0000000a,0x0000035a,0x00000264,0x00000357, + 0x00000358,0x0004003d,0x00000009,0x0000035b,0x0000035a,0x0003003e,0x00000359,0x0000035b, + 0x00050039,0x00000009,0x0000035c,0x0000000d,0x00000359,0x00060041,0x0000000a,0x0000035d, + 0x00000264,0x00000355,0x00000356,0x0003003e,0x0000035d,0x0000035c,0x000200f9,0x0000034f, + 0x000200f8,0x0000034f,0x0004003d,0x0000019a,0x0000035e,0x0000034b,0x00050080,0x0000019a, + 0x0000035f,0x0000035e,0x000001bb,0x0003003e,0x0000034b,0x0000035f,0x000200f9,0x0000034c, + 0x000200f8,0x0000034e,0x000200f9,0x0000030f,0x000200f8,0x0000030f,0x0004003d,0x00000006, + 0x00000360,0x0000030b,0x00050080,0x00000006,0x00000361,0x00000360,0x000001bb,0x0003003e, + 0x0000030b,0x00000361,0x000200f9,0x0000030c,0x000200f8,0x0000030e,0x0004003d,0x00000006, + 0x00000363,0x0000028f,0x00050084,0x00000006,0x00000364,0x00000363,0x000001c2,0x0003003e, + 0x00000362,0x00000364,0x000300f7,0x00000368,0x00000000,0x000400fa,0x00000366,0x00000367, + 0x00000368,0x000200f8,0x00000367,0x0004003d,0x00000006,0x00000369,0x00000362,0x00050080, + 0x00000006,0x0000036a,0x00000369,0x000001c2,0x00050089,0x00000006,0x0000036b,0x0000036a, + 0x00000365,0x000500aa,0x00000036,0x0000036c,0x0000036b,0x00000092,0x000400a8,0x00000036, + 0x0000036d,0x0000036c,0x000300f7,0x0000036f,0x00000000,0x000400fa,0x0000036d,0x0000036e, + 0x0000036f,0x000200f8,0x0000036e,0x0004003d,0x00000006,0x00000370,0x00000362,0x00050080, + 0x00000006,0x00000371,0x00000370,0x000001c2,0x000500ae,0x00000036,0x00000372,0x00000371, + 0x0000027e,0x000200f9,0x0000036f,0x000200f8,0x0000036f,0x000700f5,0x00000036,0x00000373, + 0x0000036c,0x00000367,0x00000372,0x0000036e,0x000200f9,0x00000368,0x000200f8,0x00000368, + 0x000700f5,0x00000036,0x00000374,0x00000366,0x0000030e,0x00000373,0x0000036f,0x000300f7, + 0x00000376,0x00000000,0x000400fa,0x00000374,0x00000375,0x00000376,0x000200f8,0x00000375, + 0x0003003e,0x00000377,0x00000092,0x000200f9,0x00000378,0x000200f8,0x00000378,0x000400f6, + 0x0000037a,0x0000037b,0x00000001,0x000200f9,0x0000037c,0x000200f8,0x0000037c,0x0004003d, + 0x00000006,0x0000037d,0x00000377,0x000500b0,0x00000036,0x0000037e,0x0000037d,0x000001cd, + 0x000400fa,0x0000037e,0x00000379,0x0000037a,0x000200f8,0x00000379,0x0004003d,0x00000006, + 0x0000037f,0x00000362,0x000500b0,0x00000036,0x00000380,0x0000037f,0x00000365,0x000300f7, + 0x00000382,0x00000000,0x000400fa,0x00000380,0x00000381,0x00000388,0x000200f8,0x00000381, + 0x0004003d,0x00000006,0x00000383,0x00000377,0x0004003d,0x00000006,0x00000384,0x00000377, + 0x00050041,0x00000268,0x00000385,0x00000264,0x00000384,0x0004003d,0x00000261,0x00000386, + 0x00000385,0x00050041,0x00000268,0x00000387,0x0000026e,0x00000383,0x0003003e,0x00000387, + 0x00000386,0x000200f9,0x00000382,0x000200f8,0x00000388,0x0004003d,0x00000006,0x00000389, + 0x00000377,0x0004003d,0x00000006,0x0000038a,0x00000377,0x00050041,0x00000268,0x0000038b, + 0x0000026e,0x0000038a,0x0004003d,0x00000261,0x0000038c,0x0000038b,0x0004003d,0x00000006, + 0x0000038d,0x00000377,0x00050041,0x00000268,0x0000038e,0x00000264,0x0000038d,0x0004003d, + 0x00000261,0x0000038f,0x0000038e,0x00050081,0x00000261,0x00000390,0x0000038c,0x0000038f, + 0x00050041,0x00000268,0x00000391,0x0000026e,0x00000389,0x0003003e,0x00000391,0x00000390, + 0x0003003e,0x00000392,0x000001d3,0x000200f9,0x00000393,0x000200f8,0x00000393,0x000400f6, + 0x00000395,0x00000396,0x00000000,0x000200f9,0x00000397,0x000200f8,0x00000397,0x0004003d, + 0x0000019a,0x00000398,0x00000392,0x0004116c,0x00000006,0x00000399,0x00000261,0x0004007c, + 0x0000019a,0x0000039a,0x00000399,0x000500b1,0x00000036,0x0000039b,0x00000398,0x0000039a, + 0x000400fa,0x0000039b,0x00000394,0x00000395,0x000200f8,0x00000394,0x0004003d,0x00000006, + 0x0000039c,0x00000377,0x0004003d,0x0000019a,0x0000039d,0x00000392,0x0004003d,0x00000006, + 0x0000039e,0x00000377,0x0004003d,0x0000019a,0x0000039f,0x00000392,0x00060041,0x0000000a, + 0x000003a1,0x0000026e,0x0000039e,0x0000039f,0x0004003d,0x00000009,0x000003a2,0x000003a1, + 0x0003003e,0x000003a0,0x000003a2,0x00050039,0x00000009,0x000003a3,0x0000000d,0x000003a0, + 0x00060041,0x0000000a,0x000003a4,0x0000026e,0x0000039c,0x0000039d,0x0003003e,0x000003a4, + 0x000003a3,0x000200f9,0x00000396,0x000200f8,0x00000396,0x0004003d,0x0000019a,0x000003a5, + 0x00000392,0x00050080,0x0000019a,0x000003a6,0x000003a5,0x000001bb,0x0003003e,0x00000392, + 0x000003a6,0x000200f9,0x00000393,0x000200f8,0x00000395,0x000200f9,0x00000382,0x000200f8, + 0x00000382,0x0004003d,0x00000006,0x000003a7,0x00000377,0x00050041,0x00000268,0x000003a8, + 0x00000264,0x000003a7,0x0003003e,0x000003a8,0x0000026c,0x000200f9,0x0000037b,0x000200f8, + 0x0000037b,0x0004003d,0x00000006,0x000003a9,0x00000377,0x00050080,0x00000006,0x000003aa, + 0x000003a9,0x000001bb,0x0003003e,0x00000377,0x000003aa,0x000200f9,0x00000378,0x000200f8, + 0x0000037a,0x000200f9,0x00000376,0x000200f8,0x00000376,0x000200f9,0x0000030a,0x000200f8, + 0x0000030a,0x000200f9,0x0000028b,0x000200f8,0x0000028b,0x0004003d,0x00000006,0x000003ab, + 0x00000287,0x00050080,0x00000006,0x000003ac,0x000003ab,0x000001bb,0x0003003e,0x00000287, + 0x000003ac,0x000200f9,0x00000288,0x000200f8,0x0000028a,0x000300f7,0x000003af,0x00000000, + 0x000400fa,0x000003ad,0x000003ae,0x000003af,0x000200f8,0x000003ae,0x0003003e,0x000003b0, + 0x00000092,0x000200f9,0x000003b1,0x000200f8,0x000003b1,0x000400f6,0x000003b3,0x000003b4, + 0x00000001,0x000200f9,0x000003b5,0x000200f8,0x000003b5,0x0004003d,0x00000006,0x000003b6, + 0x000003b0,0x000500b0,0x00000036,0x000003b7,0x000003b6,0x000001cd,0x000400fa,0x000003b7, + 0x000003b2,0x000003b3,0x000200f8,0x000003b2,0x0004003d,0x00000006,0x000003b8,0x000003b0, + 0x0004003d,0x00000006,0x000003b9,0x000003b0,0x00050041,0x00000268,0x000003ba,0x0000026e, + 0x000003b9,0x0004003d,0x00000261,0x000003bb,0x000003ba,0x00050041,0x00000268,0x000003bc, + 0x00000264,0x000003b8,0x0003003e,0x000003bc,0x000003bb,0x000200f9,0x000003b4,0x000200f8, + 0x000003b4,0x0004003d,0x00000006,0x000003bd,0x000003b0,0x00050080,0x00000006,0x000003be, + 0x000003bd,0x000001bb,0x0003003e,0x000003b0,0x000003be,0x000200f9,0x000003b1,0x000200f8, + 0x000003b3,0x000200f9,0x000003af,0x000200f8,0x000003af,0x000400e0,0x000001a8,0x000001a8, + 0x00000242,0x0004003d,0x00000036,0x000003bf,0x000001cf,0x000300f7,0x000003c1,0x00000000, + 0x000400fa,0x000003bf,0x000003c0,0x000003c1,0x000200f8,0x000003c0,0x0003003e,0x000003c2, + 0x00000092,0x000200f9,0x000003c3,0x000200f8,0x000003c3,0x000400f6,0x000003c5,0x000003c6, + 0x00000001,0x000200f9,0x000003c7,0x000200f8,0x000003c7,0x0004003d,0x00000006,0x000003c8, + 0x000003c2,0x000500b0,0x00000036,0x000003c9,0x000003c8,0x000001cd,0x000400fa,0x000003c9, + 0x000003c4,0x000003c5,0x000200f8,0x000003c4,0x0004003d,0x00000006,0x000003cb,0x000003c2, + 0x00050041,0x00000268,0x000003cc,0x00000264,0x000003cb,0x0004003d,0x00000261,0x000003cd, + 0x000003cc,0x00040073,0x0000024e,0x000003ce,0x000003cd,0x0003003e,0x000003ca,0x000003ce, + 0x0004003d,0x0000024e,0x000003cf,0x000003ca,0x0004003d,0x00000006,0x000003d0,0x000001c0, + 0x00050084,0x00000006,0x000003d1,0x000003d0,0x000001b4,0x0004003d,0x00000006,0x000003d2, + 0x000001c9,0x0004003d,0x00000006,0x000003d3,0x000003c2,0x00050080,0x00000006,0x000003d4, + 0x000003d2,0x000003d3,0x00050084,0x00000006,0x000003d5,0x000003d4,0x000000e5,0x00050080, + 0x00000006,0x000003d6,0x000003d1,0x000003d5,0x00050041,0x0000023e,0x000003d7,0x0000023a, + 0x000003d6,0x0004003d,0x00000006,0x000003d8,0x000001c0,0x00050084,0x00000006,0x000003d9, + 0x000003d8,0x000001b4,0x0004003d,0x00000006,0x000003da,0x000001c9,0x0004003d,0x00000006, + 0x000003db,0x000003c2,0x00050080,0x00000006,0x000003dc,0x000003da,0x000003db,0x00050084, + 0x00000006,0x000003dd,0x000003dc,0x000000e5,0x00050080,0x00000006,0x000003de,0x000003d9, + 0x000003dd,0x0007116a,0x000003d7,0x000003cf,0x000001d3,0x000001b4,0x00000028,0x000001a8, + 0x000200f9,0x000003c6,0x000200f8,0x000003c6,0x0004003d,0x00000006,0x000003df,0x000003c2, + 0x00050080,0x00000006,0x000003e0,0x000003df,0x000001bb,0x0003003e,0x000003c2,0x000003e0, + 0x000200f9,0x000003c3,0x000200f8,0x000003c5,0x000200f9,0x000003c1,0x000200f8,0x000003c1, + 0x000400e0,0x000001a8,0x000001a8,0x00000242,0x0004003d,0x00000006,0x000003e2,0x00000181, + 0x0003003e,0x000003e1,0x000003e2,0x000200f9,0x000003e3,0x000200f8,0x000003e3,0x000400f6, + 0x000003e5,0x000003e6,0x00000000,0x000200f9,0x000003e7,0x000200f8,0x000003e7,0x0004003d, + 0x00000006,0x000003e8,0x000003e1,0x000500b0,0x00000036,0x000003ea,0x000003e8,0x000003e9, + 0x000400fa,0x000003ea,0x000003e4,0x000003e5,0x000200f8,0x000003e4,0x0004003d,0x00000006, + 0x000003ec,0x000001a5,0x0004003d,0x00000006,0x000003ed,0x000003e1,0x00050086,0x00000006, + 0x000003ee,0x000003ed,0x000001b4,0x00050080,0x00000006,0x000003ef,0x000003ec,0x000003ee, + 0x0003003e,0x000003eb,0x000003ef,0x0004003d,0x00000006,0x000003f1,0x000001b1,0x0004003d, + 0x00000006,0x000003f2,0x000003e1,0x00050089,0x00000006,0x000003f3,0x000003f2,0x000001b4, + 0x00050080,0x00000006,0x000003f4,0x000003f1,0x000003f3,0x0003003e,0x000003f0,0x000003f4, + 0x0004003d,0x00000006,0x000003f5,0x000003eb,0x00050041,0x0000019c,0x000003f6,0x00000199, + 0x000001d3,0x0004003d,0x00000006,0x000003f7,0x000003f6,0x000500ae,0x00000036,0x000003f8, + 0x000003f5,0x000003f7,0x000300f7,0x000003fa,0x00000000,0x000400fa,0x000003f8,0x000003f9, + 0x000003fa,0x000200f8,0x000003f9,0x000200f9,0x000003e6,0x000200f8,0x000003fa,0x0004003d, + 0x00000006,0x000003fd,0x000003e1,0x00050041,0x0000023e,0x000003fe,0x0000023a,0x000003fd, + 0x0006003d,0x0000000f,0x000003ff,0x000003fe,0x00000030,0x000001a8,0x0003003e,0x000003fc, + 0x000003ff,0x000300f7,0x00000402,0x00000000,0x000400fa,0x00000400,0x00000401,0x00000402, + 0x000200f8,0x00000401,0x0004003d,0x00000006,0x00000407,0x0000018b,0x00050041,0x0000019c, + 0x00000409,0x00000199,0x00000408,0x0004003d,0x00000006,0x0000040a,0x00000409,0x00050084, + 0x00000006,0x0000040b,0x00000407,0x0000040a,0x0004003d,0x00000006,0x0000040c,0x000003eb, + 0x00050041,0x0000019c,0x0000040d,0x00000199,0x000001bb,0x0004003d,0x00000006,0x0000040e, + 0x0000040d,0x00050084,0x00000006,0x0000040f,0x0000040c,0x0000040e,0x00050080,0x00000006, + 0x00000410,0x0000040b,0x0000040f,0x0004003d,0x00000006,0x00000411,0x00000195,0x00050041, + 0x0000019c,0x00000412,0x00000199,0x000001bb,0x0004003d,0x00000006,0x00000413,0x00000412, + 0x00050084,0x00000006,0x00000414,0x00000411,0x00000413,0x00050041,0x0000019c,0x00000415, + 0x00000199,0x000001d3,0x0004003d,0x00000006,0x00000416,0x00000415,0x00050084,0x00000006, + 0x00000417,0x00000414,0x00000416,0x00050080,0x00000006,0x00000418,0x00000410,0x00000417, + 0x0004003d,0x00000006,0x00000419,0x000003f0,0x00050080,0x00000006,0x0000041a,0x00000418, + 0x00000419,0x0004003d,0x0000000f,0x0000041b,0x000003fc,0x00060041,0x0000021e,0x0000041c, + 0x00000406,0x000001d3,0x0000041a,0x0003003e,0x0000041c,0x0000041b,0x000200f9,0x000003e6, + 0x000200f8,0x00000402,0x000300f7,0x00000421,0x00000000,0x000400fa,0x0000041f,0x00000420, + 0x00000421,0x000200f8,0x00000420,0x0004003d,0x0000000f,0x00000422,0x000003fc,0x00040073, + 0x00000009,0x00000423,0x00000422,0x0003003e,0x00000424,0x00000423,0x00050039,0x00000009, + 0x00000425,0x00000024,0x00000424,0x00040073,0x0000000f,0x00000426,0x00000425,0x0003003e, + 0x000003fc,0x00000426,0x000200f9,0x00000421,0x000200f8,0x00000421,0x0004003d,0x00000006, + 0x00000428,0x000003eb,0x00050041,0x0000019c,0x00000429,0x00000199,0x000001fe,0x0004003d, + 0x00000006,0x0000042a,0x00000429,0x00050084,0x00000006,0x0000042b,0x00000428,0x0000042a, + 0x0004003d,0x00000006,0x0000042c,0x000001b6,0x00050080,0x00000006,0x0000042d,0x0000042b, + 0x0000042c,0x0004003d,0x00000006,0x0000042e,0x000003f0,0x00050080,0x00000006,0x0000042f, + 0x0000042d,0x0000042e,0x0003003e,0x00000427,0x0000042f,0x000300f7,0x00000434,0x00000000, + 0x000400fa,0x00000432,0x00000433,0x00000434,0x000200f8,0x00000433,0x0004003d,0x00000006, + 0x00000439,0x00000427,0x0004003d,0x0000000f,0x0000043b,0x000003fc,0x0003003e,0x0000043a, + 0x0000043b,0x00050039,0x00000006,0x0000043c,0x00000013,0x0000043a,0x0003003e,0x0000043d, + 0x0000043c,0x00050039,0x00000006,0x0000043e,0x0000001d,0x0000043d,0x00040071,0x0000020c, + 0x0000043f,0x0000043e,0x00060041,0x00000212,0x00000440,0x00000438,0x000001d3,0x00000439, + 0x0003003e,0x00000440,0x0000043f,0x000200f9,0x00000434,0x000200f8,0x00000434,0x000300f7, + 0x00000444,0x00000000,0x000400fa,0x00000442,0x00000443,0x00000444,0x000200f8,0x00000443, + 0x0004003d,0x00000006,0x00000445,0x00000427,0x0004003d,0x0000000f,0x00000446,0x000003fc, + 0x00060041,0x0000021e,0x00000447,0x00000406,0x000001d3,0x00000445,0x0003003e,0x00000447, + 0x00000446,0x000200f9,0x00000444,0x000200f8,0x00000444,0x000200f9,0x000003e6,0x000200f8, + 0x000003e6,0x0004003d,0x00000006,0x00000448,0x000003e1,0x00050080,0x00000006,0x00000449, + 0x00000448,0x000001c3,0x0003003e,0x000003e1,0x00000449,0x000200f9,0x000003e3,0x000200f8, + 0x000003e5,0x000100fd,0x00010038,0x00050036,0x00000009,0x0000000d,0x00000000,0x0000000b, + 0x00030037,0x0000000a,0x0000000c,0x000200f8,0x0000000e,0x0004003b,0x00000015,0x00000029, + 0x00000007,0x0004003b,0x00000015,0x0000002c,0x00000007,0x0004003b,0x00000015,0x00000030, + 0x00000007,0x0004003b,0x0000000a,0x0000004a,0x00000007,0x0004003b,0x00000015,0x0000005b, + 0x00000007,0x0004003b,0x00000015,0x00000060,0x00000007,0x0004003d,0x00000009,0x0000002a, + 0x0000000c,0x0004007c,0x00000006,0x0000002b,0x0000002a,0x0003003e,0x00000029,0x0000002b, + 0x0004003d,0x00000006,0x0000002d,0x00000029,0x000500c7,0x00000006,0x0000002f,0x0000002d, + 0x0000002e,0x0003003e,0x0000002c,0x0000002f,0x0004003d,0x00000006,0x00000031,0x00000029, + 0x000500c7,0x00000006,0x00000033,0x00000031,0x00000032,0x0003003e,0x00000030,0x00000033, + 0x0004003d,0x00000006,0x00000034,0x00000030,0x000500ae,0x00000036,0x00000037,0x00000034, + 0x00000035,0x000300f7,0x00000039,0x00000000,0x000400fa,0x00000037,0x00000038,0x00000039, + 0x000200f8,0x00000038,0x0004003d,0x00000009,0x0000003a,0x0000000c,0x000200fe,0x0000003a, + 0x000200f8,0x00000039,0x0004003d,0x00000006,0x0000003c,0x00000030,0x000500ae,0x00000036, + 0x0000003e,0x0000003c,0x0000003d,0x000300f7,0x00000040,0x00000000,0x000400fa,0x0000003e, + 0x0000003f,0x00000040,0x000200f8,0x0000003f,0x0004003d,0x00000006,0x00000041,0x0000002c, + 0x000500c5,0x00000006,0x00000042,0x00000041,0x00000035,0x0004007c,0x00000009,0x00000043, + 0x00000042,0x000200fe,0x00000043,0x000200f8,0x00000040,0x0004003d,0x00000006,0x00000045, + 0x00000030,0x000500b0,0x00000036,0x00000047,0x00000045,0x00000046,0x000300f7,0x00000049, + 0x00000000,0x000400fa,0x00000047,0x00000048,0x00000049,0x000200f8,0x00000048,0x0004003d, + 0x00000006,0x0000004b,0x00000030,0x0004007c,0x00000009,0x0000004c,0x0000004b,0x00050085, + 0x00000009,0x0000004e,0x0000004c,0x0000004d,0x0006000c,0x00000009,0x0000004f,0x00000001, + 0x00000002,0x0000004e,0x0003003e,0x0000004a,0x0000004f,0x0004003d,0x00000006,0x00000050, + 0x0000002c,0x0004007c,0x00000009,0x00000051,0x00000050,0x0004003d,0x00000006,0x00000052, + 0x0000002c,0x0004003d,0x00000009,0x00000053,0x0000004a,0x00050085,0x00000009,0x00000055, + 0x00000053,0x00000054,0x0004007c,0x00000006,0x00000056,0x00000055,0x000500c5,0x00000006, + 0x00000057,0x00000052,0x00000056,0x0004007c,0x00000009,0x00000058,0x00000057,0x00050081, + 0x00000009,0x00000059,0x00000051,0x00000058,0x000200fe,0x00000059,0x000200f8,0x00000049, + 0x0004003d,0x00000006,0x0000005c,0x00000030,0x000500c2,0x00000006,0x0000005e,0x0000005c, + 0x0000005d,0x000500c7,0x00000006,0x0000005f,0x0000005e,0x00000008,0x0003003e,0x0000005b, + 0x0000005f,0x0004003d,0x00000006,0x00000061,0x00000030,0x00050080,0x00000006,0x00000063, + 0x00000061,0x00000062,0x0004003d,0x00000006,0x00000064,0x0000005b,0x00050080,0x00000006, + 0x00000065,0x00000063,0x00000064,0x000500c7,0x00000006,0x00000067,0x00000065,0x00000066, + 0x0003003e,0x00000060,0x00000067,0x0004003d,0x00000006,0x00000068,0x0000002c,0x0004003d, + 0x00000006,0x00000069,0x00000060,0x000500c5,0x00000006,0x0000006a,0x00000068,0x00000069, + 0x0004007c,0x00000009,0x0000006b,0x0000006a,0x000200fe,0x0000006b,0x00010038,0x00050036, + 0x00000006,0x00000013,0x00000000,0x00000011,0x00030037,0x00000010,0x00000012,0x000200f8, + 0x00000014,0x0004003d,0x0000000f,0x0000006e,0x00000012,0x0004007c,0x0000006f,0x00000070, + 0x0000006e,0x00040071,0x00000006,0x00000071,0x00000070,0x000200fe,0x00000071,0x00010038, + 0x00050036,0x00000006,0x00000019,0x00000000,0x00000016,0x00030037,0x00000015,0x00000017, + 0x00030037,0x00000015,0x00000018,0x000200f8,0x0000001a,0x0004003b,0x00000015,0x00000074, + 0x00000007,0x0004003b,0x00000015,0x00000078,0x00000007,0x0004003b,0x00000015,0x0000007c, + 0x00000007,0x0004003b,0x00000015,0x00000080,0x00000007,0x0004003d,0x00000006,0x00000075, + 0x00000017,0x0004003d,0x00000006,0x00000076,0x00000018,0x000500c2,0x00000006,0x00000077, + 0x00000075,0x00000076,0x0003003e,0x00000074,0x00000077,0x0004003d,0x00000006,0x00000079, + 0x00000018,0x000500c4,0x00000006,0x0000007a,0x00000008,0x00000079,0x00050082,0x00000006, + 0x0000007b,0x0000007a,0x00000008,0x0003003e,0x00000078,0x0000007b,0x0004003d,0x00000006, + 0x0000007d,0x00000017,0x0004003d,0x00000006,0x0000007e,0x00000078,0x000500c7,0x00000006, + 0x0000007f,0x0000007d,0x0000007e,0x0003003e,0x0000007c,0x0000007f,0x0004003d,0x00000006, + 0x00000081,0x00000018,0x00050082,0x00000006,0x00000082,0x00000081,0x00000008,0x000500c4, + 0x00000006,0x00000083,0x00000008,0x00000082,0x0003003e,0x00000080,0x00000083,0x0004003d, + 0x00000006,0x00000084,0x00000074,0x0004003d,0x00000006,0x00000085,0x0000007c,0x0004003d, + 0x00000006,0x00000086,0x00000080,0x000500ac,0x00000036,0x00000087,0x00000085,0x00000086, + 0x000400a8,0x00000036,0x00000088,0x00000087,0x000300f7,0x0000008a,0x00000000,0x000400fa, + 0x00000088,0x00000089,0x0000008a,0x000200f8,0x00000089,0x0004003d,0x00000006,0x0000008b, + 0x0000007c,0x0004003d,0x00000006,0x0000008c,0x00000080,0x000500aa,0x00000036,0x0000008d, + 0x0000008b,0x0000008c,0x000300f7,0x0000008f,0x00000000,0x000400fa,0x0000008d,0x0000008e, + 0x0000008f,0x000200f8,0x0000008e,0x0004003d,0x00000006,0x00000090,0x00000074,0x000500c7, + 0x00000006,0x00000091,0x00000090,0x00000008,0x000500ab,0x00000036,0x00000093,0x00000091, + 0x00000092,0x000200f9,0x0000008f,0x000200f8,0x0000008f,0x000700f5,0x00000036,0x00000094, + 0x0000008d,0x00000089,0x00000093,0x0000008e,0x000200f9,0x0000008a,0x000200f8,0x0000008a, + 0x000700f5,0x00000036,0x00000095,0x00000087,0x0000001a,0x00000094,0x0000008f,0x000600a9, + 0x00000006,0x00000096,0x00000095,0x00000008,0x00000092,0x00050080,0x00000006,0x00000097, + 0x00000084,0x00000096,0x000200fe,0x00000097,0x00010038,0x00050036,0x00000006,0x0000001d, + 0x00000000,0x0000001b,0x00030037,0x00000015,0x0000001c,0x000200f8,0x0000001e,0x0004003b, + 0x0000009a,0x0000009b,0x00000007,0x0004003b,0x00000015,0x000000b7,0x00000007,0x0004003b, + 0x00000015,0x000000bd,0x00000007,0x0004003b,0x00000015,0x000000c3,0x00000007,0x0004003b, + 0x00000015,0x000000ca,0x00000007,0x0004003b,0x00000015,0x000000d1,0x00000007,0x0004003b, + 0x00000015,0x000000d4,0x00000007,0x0004003b,0x00000015,0x000000dd,0x00000007,0x0004003b, + 0x00000015,0x000000e0,0x00000007,0x0004003b,0x00000015,0x000000e9,0x00000007,0x0004003b, + 0x00000015,0x000000eb,0x00000007,0x0004003b,0x00000015,0x000000f0,0x00000007,0x0004003b, + 0x00000015,0x000000f3,0x00000007,0x0004003b,0x00000015,0x000000f5,0x00000007,0x0004003b, + 0x00000015,0x000000f7,0x00000007,0x0004003b,0x00000015,0x0000010b,0x00000007,0x0004003d, + 0x00000006,0x0000009c,0x0000001c,0x000500c7,0x00000006,0x0000009e,0x0000009c,0x0000009d, + 0x000500aa,0x00000036,0x0000009f,0x0000009e,0x0000009d,0x000300f7,0x000000a1,0x00000000, + 0x000400fa,0x0000009f,0x000000a0,0x000000a1,0x000200f8,0x000000a0,0x0004003d,0x00000006, + 0x000000a2,0x0000001c,0x000500c7,0x00000006,0x000000a4,0x000000a2,0x000000a3,0x000500ab, + 0x00000036,0x000000a5,0x000000a4,0x00000092,0x000200f9,0x000000a1,0x000200f8,0x000000a1, + 0x000700f5,0x00000036,0x000000a6,0x0000009f,0x0000001e,0x000000a5,0x000000a0,0x0003003e, + 0x0000009b,0x000000a6,0x0004003d,0x00000036,0x000000a7,0x0000009b,0x000300f7,0x000000a9, + 0x00000000,0x000400fa,0x000000a7,0x000000a8,0x000000a9,0x000200f8,0x000000a8,0x000200fe, + 0x00000092,0x000200f8,0x000000a9,0x0004003d,0x00000006,0x000000ab,0x0000001c,0x000500c7, + 0x00000006,0x000000ad,0x000000ab,0x000000ac,0x000500aa,0x00000036,0x000000ae,0x000000ad, + 0x00000092,0x000300f7,0x000000b0,0x00000000,0x000400fa,0x000000ae,0x000000af,0x000000b0, + 0x000200f8,0x000000af,0x0004003d,0x00000006,0x000000b1,0x0000001c,0x000500c2,0x00000006, + 0x000000b3,0x000000b1,0x000000b2,0x000500c7,0x00000006,0x000000b5,0x000000b3,0x000000b4, + 0x000200fe,0x000000b5,0x000200f8,0x000000b0,0x0004003d,0x00000006,0x000000b8,0x0000001c, + 0x000500c7,0x00000006,0x000000ba,0x000000b8,0x000000b9,0x000500ab,0x00000036,0x000000bb, + 0x000000ba,0x00000092,0x000600a9,0x00000006,0x000000bc,0x000000bb,0x000000b4,0x00000092, + 0x0003003e,0x000000b7,0x000000bc,0x0004003d,0x00000006,0x000000be,0x0000001c,0x000500c2, + 0x00000006,0x000000c0,0x000000be,0x000000bf,0x000500c7,0x00000006,0x000000c2,0x000000c0, + 0x000000c1,0x0003003e,0x000000bd,0x000000c2,0x0004003d,0x00000006,0x000000c4,0x0000001c, + 0x000500c7,0x00000006,0x000000c5,0x000000c4,0x000000a3,0x0003003e,0x000000c3,0x000000c5, + 0x0004003d,0x00000006,0x000000c6,0x000000bd,0x000500aa,0x00000036,0x000000c7,0x000000c6, + 0x000000c1,0x000300f7,0x000000c9,0x00000000,0x000400fa,0x000000c7,0x000000c8,0x000000cc, + 0x000200f8,0x000000c8,0x0003003e,0x000000ca,0x000000cb,0x000200f9,0x000000c9,0x000200f8, + 0x000000cc,0x0004003d,0x00000006,0x000000cd,0x000000bd,0x000500b2,0x00000036,0x000000ce, + 0x000000cd,0x000000b2,0x000300f7,0x000000d0,0x00000000,0x000400fa,0x000000ce,0x000000cf, + 0x000000ef,0x000200f8,0x000000cf,0x0004003d,0x00000006,0x000000d2,0x000000bd,0x000500aa, + 0x00000036,0x000000d3,0x000000d2,0x00000092,0x000300f7,0x000000d6,0x00000000,0x000400fa, + 0x000000d3,0x000000d5,0x000000d8,0x000200f8,0x000000d5,0x0004003d,0x00000006,0x000000d7, + 0x000000c3,0x0003003e,0x000000d4,0x000000d7,0x000200f9,0x000000d6,0x000200f8,0x000000d8, + 0x0004003d,0x00000006,0x000000da,0x000000c3,0x00050080,0x00000006,0x000000db,0x000000d9, + 0x000000da,0x0003003e,0x000000d4,0x000000db,0x000200f9,0x000000d6,0x000200f8,0x000000d6, + 0x0004003d,0x00000006,0x000000dc,0x000000d4,0x0003003e,0x000000d1,0x000000dc,0x0004003d, + 0x00000006,0x000000de,0x000000bd,0x000500aa,0x00000036,0x000000df,0x000000de,0x00000092, + 0x000300f7,0x000000e2,0x00000000,0x000400fa,0x000000df,0x000000e1,0x000000e4,0x000200f8, + 0x000000e1,0x0003003e,0x000000e0,0x000000e3,0x000200f9,0x000000e2,0x000200f8,0x000000e4, + 0x0004003d,0x00000006,0x000000e6,0x000000bd,0x00050082,0x00000006,0x000000e7,0x000000e5, + 0x000000e6,0x0003003e,0x000000e0,0x000000e7,0x000200f9,0x000000e2,0x000200f8,0x000000e2, + 0x0004003d,0x00000006,0x000000e8,0x000000e0,0x0003003e,0x000000dd,0x000000e8,0x0004003d, + 0x00000006,0x000000ea,0x000000d1,0x0003003e,0x000000e9,0x000000ea,0x0004003d,0x00000006, + 0x000000ec,0x000000dd,0x0003003e,0x000000eb,0x000000ec,0x00060039,0x00000006,0x000000ed, + 0x00000019,0x000000e9,0x000000eb,0x0007000c,0x00000006,0x000000ee,0x00000001,0x00000026, + 0x000000ed,0x000000b2,0x0003003e,0x000000ca,0x000000ee,0x000200f9,0x000000d0,0x000200f8, + 0x000000ef,0x0004003d,0x00000006,0x000000f1,0x000000bd,0x00050082,0x00000006,0x000000f2, + 0x000000f1,0x000000b2,0x0003003e,0x000000f0,0x000000f2,0x0004003d,0x00000006,0x000000f6, + 0x000000c3,0x0003003e,0x000000f5,0x000000f6,0x0003003e,0x000000f7,0x000000f4,0x00060039, + 0x00000006,0x000000f8,0x00000019,0x000000f5,0x000000f7,0x0003003e,0x000000f3,0x000000f8, + 0x0004003d,0x00000006,0x000000f9,0x000000f3,0x000500aa,0x00000036,0x000000fa,0x000000f9, + 0x000000b2,0x000300f7,0x000000fc,0x00000000,0x000400fa,0x000000fa,0x000000fb,0x000000fc, + 0x000200f8,0x000000fb,0x0003003e,0x000000f3,0x00000092,0x0004003d,0x00000006,0x000000fd, + 0x000000f0,0x00050080,0x00000006,0x000000fe,0x000000fd,0x00000008,0x0003003e,0x000000f0, + 0x000000fe,0x000200f9,0x000000fc,0x000200f8,0x000000fc,0x0004003d,0x00000006,0x000000ff, + 0x000000f0,0x000500ac,0x00000036,0x00000100,0x000000ff,0x000000e3,0x000400a8,0x00000036, + 0x00000101,0x00000100,0x000300f7,0x00000103,0x00000000,0x000400fa,0x00000101,0x00000102, + 0x00000103,0x000200f8,0x00000102,0x0004003d,0x00000006,0x00000104,0x000000f0,0x000500aa, + 0x00000036,0x00000105,0x00000104,0x000000e3,0x0004003d,0x00000006,0x00000106,0x000000f3, + 0x000500ac,0x00000036,0x00000108,0x00000106,0x00000107,0x000500a7,0x00000036,0x00000109, + 0x00000105,0x00000108,0x000200f9,0x00000103,0x000200f8,0x00000103,0x000700f5,0x00000036, + 0x0000010a,0x00000100,0x000000fc,0x00000109,0x00000102,0x000300f7,0x0000010d,0x00000000, + 0x000400fa,0x0000010a,0x0000010c,0x0000010e,0x000200f8,0x0000010c,0x0003003e,0x0000010b, + 0x000000cb,0x000200f9,0x0000010d,0x000200f8,0x0000010e,0x0004003d,0x00000006,0x0000010f, + 0x000000f0,0x000500c4,0x00000006,0x00000111,0x0000010f,0x00000110,0x0004003d,0x00000006, + 0x00000112,0x000000f3,0x000500c5,0x00000006,0x00000113,0x00000111,0x00000112,0x0003003e, + 0x0000010b,0x00000113,0x000200f9,0x0000010d,0x000200f8,0x0000010d,0x0004003d,0x00000006, + 0x00000114,0x0000010b,0x0003003e,0x000000ca,0x00000114,0x000200f9,0x000000d0,0x000200f8, + 0x000000d0,0x000200f9,0x000000c9,0x000200f8,0x000000c9,0x0004003d,0x00000006,0x00000115, + 0x000000b7,0x0004003d,0x00000006,0x00000116,0x000000ca,0x000500c5,0x00000006,0x00000117, + 0x00000115,0x00000116,0x000200fe,0x00000117,0x00010038,0x00050036,0x00000009,0x00000021, + 0x00000000,0x0000001f,0x00030037,0x00000015,0x00000020,0x000200f8,0x00000022,0x0004003b, + 0x0000009a,0x0000011a,0x00000007,0x0004003b,0x00000015,0x0000011e,0x00000007,0x0004003b, + 0x00000015,0x00000122,0x00000007,0x0004003b,0x0000000a,0x00000129,0x00000007,0x0004003b, + 0x0000000a,0x00000146,0x00000007,0x0004003d,0x00000006,0x0000011b,0x00000020,0x000500c7, + 0x00000006,0x0000011c,0x0000011b,0x000000b4,0x000500ab,0x00000036,0x0000011d,0x0000011c, + 0x00000092,0x0003003e,0x0000011a,0x0000011d,0x0004003d,0x00000006,0x0000011f,0x00000020, + 0x000500c2,0x00000006,0x00000120,0x0000011f,0x00000110,0x000500c7,0x00000006,0x00000121, + 0x00000120,0x000000e3,0x0003003e,0x0000011e,0x00000121,0x0004003d,0x00000006,0x00000123, + 0x00000020,0x000500c7,0x00000006,0x00000124,0x00000123,0x000000f4,0x0003003e,0x00000122, + 0x00000124,0x0004003d,0x00000006,0x00000125,0x0000011e,0x000500aa,0x00000036,0x00000126, + 0x00000125,0x00000092,0x000300f7,0x00000128,0x00000000,0x000400fa,0x00000126,0x00000127, + 0x0000012e,0x000200f8,0x00000127,0x0004003d,0x00000006,0x0000012a,0x00000122,0x00040070, + 0x00000009,0x0000012b,0x0000012a,0x00050085,0x00000009,0x0000012d,0x0000012b,0x0000012c, + 0x0003003e,0x00000129,0x0000012d,0x000200f9,0x00000128,0x000200f8,0x0000012e,0x0004003d, + 0x00000006,0x0000012f,0x0000011e,0x000500aa,0x00000036,0x00000130,0x0000012f,0x000000e3, + 0x0004003d,0x00000006,0x00000131,0x00000122,0x000500aa,0x00000036,0x00000132,0x00000131, + 0x000000f4,0x000500a7,0x00000036,0x00000133,0x00000130,0x00000132,0x000300f7,0x00000135, + 0x00000000,0x000400fa,0x00000133,0x00000134,0x00000137,0x000200f8,0x00000134,0x0003003e, + 0x00000129,0x00000136,0x000200f9,0x00000135,0x000200f8,0x00000137,0x0004003d,0x00000006, + 0x00000139,0x00000122,0x00040070,0x00000009,0x0000013a,0x00000139,0x00050085,0x00000009, + 0x0000013c,0x0000013a,0x0000013b,0x00050081,0x00000009,0x0000013d,0x00000138,0x0000013c, + 0x0004003d,0x00000006,0x0000013e,0x0000011e,0x00050080,0x00000006,0x00000140,0x0000013e, + 0x0000013f,0x000500c4,0x00000006,0x00000142,0x00000140,0x00000141,0x0004007c,0x00000009, + 0x00000143,0x00000142,0x00050085,0x00000009,0x00000144,0x0000013d,0x00000143,0x0003003e, + 0x00000129,0x00000144,0x000200f9,0x00000135,0x000200f8,0x00000135,0x000200f9,0x00000128, + 0x000200f8,0x00000128,0x0004003d,0x00000036,0x00000145,0x0000011a,0x000300f7,0x00000148, + 0x00000000,0x000400fa,0x00000145,0x00000147,0x0000014b,0x000200f8,0x00000147,0x0004003d, + 0x00000009,0x00000149,0x00000129,0x0004007f,0x00000009,0x0000014a,0x00000149,0x0003003e, + 0x00000146,0x0000014a,0x000200f9,0x00000148,0x000200f8,0x0000014b,0x0004003d,0x00000009, + 0x0000014c,0x00000129,0x0003003e,0x00000146,0x0000014c,0x000200f9,0x00000148,0x000200f8, + 0x00000148,0x0004003d,0x00000009,0x0000014d,0x00000146,0x000200fe,0x0000014d,0x00010038, + 0x00050036,0x00000009,0x00000024,0x00000000,0x0000000b,0x00030037,0x0000000a,0x00000023, + 0x000200f8,0x00000025,0x0004003b,0x0000000a,0x00000150,0x00000007,0x0004003b,0x0000000a, + 0x00000155,0x00000007,0x0004003b,0x0000000a,0x00000157,0x00000007,0x0004003b,0x0000000a, + 0x0000015a,0x00000007,0x0004003b,0x0000000a,0x0000015c,0x00000007,0x0004003b,0x0000000a, + 0x00000161,0x00000007,0x0004003b,0x0000000a,0x00000163,0x00000007,0x0004003b,0x0000000a, + 0x00000168,0x00000007,0x0004003b,0x0000000a,0x0000016d,0x00000007,0x0004003d,0x00000009, + 0x00000151,0x00000023,0x0008000c,0x00000009,0x00000154,0x00000001,0x0000002b,0x00000151, + 0x00000152,0x00000153,0x0003003e,0x00000155,0x00000154,0x00050039,0x00000009,0x00000156, + 0x0000000d,0x00000155,0x0003003e,0x00000150,0x00000156,0x0004003d,0x00000009,0x00000158, + 0x00000150,0x0006000c,0x00000009,0x00000159,0x00000001,0x00000004,0x00000158,0x0003003e, + 0x0000015a,0x00000159,0x00050039,0x00000009,0x0000015b,0x0000000d,0x0000015a,0x0003003e, + 0x00000157,0x0000015b,0x0004003d,0x00000009,0x0000015e,0x00000157,0x0008000c,0x00000009, + 0x00000160,0x00000001,0x00000032,0x0000015d,0x0000015e,0x0000015f,0x0003003e,0x00000161, + 0x00000160,0x00050039,0x00000009,0x00000162,0x0000000d,0x00000161,0x0003003e,0x0000015c, + 0x00000162,0x0004003d,0x00000009,0x00000164,0x00000150,0x0004003d,0x00000009,0x00000165, + 0x0000015c,0x0008000c,0x00000009,0x00000167,0x00000001,0x00000032,0x00000164,0x00000165, + 0x00000166,0x0003003e,0x00000168,0x00000167,0x00050039,0x00000009,0x00000169,0x0000000d, + 0x00000168,0x0003003e,0x00000163,0x00000169,0x0004003d,0x00000009,0x0000016a,0x00000023, + 0x0004003d,0x00000009,0x0000016b,0x00000163,0x00050085,0x00000009,0x0000016c,0x0000016a, + 0x0000016b,0x0003003e,0x0000016d,0x0000016c,0x00050039,0x00000009,0x0000016e,0x0000000d, + 0x0000016d,0x000200fe,0x0000016e,0x00010038,0x00050036,0x00000009,0x00000027,0x00000000, + 0x0000001f,0x00030037,0x00000015,0x00000026,0x000200f8,0x00000028,0x0004003b,0x0000000a, + 0x00000175,0x00000007,0x0004003b,0x00000015,0x0000017c,0x00000007,0x0004003d,0x00000006, + 0x00000171,0x00000026,0x000500c7,0x00000006,0x00000173,0x00000171,0x00000172,0x000500aa, + 0x00000036,0x00000174,0x00000173,0x00000172,0x000300f7,0x00000177,0x00000000,0x000400fa, + 0x00000174,0x00000176,0x00000178,0x000200f8,0x00000176,0x0003003e,0x00000175,0x00000136, + 0x000200f9,0x00000177,0x000200f8,0x00000178,0x0004003d,0x00000006,0x00000179,0x00000026, + 0x000500c7,0x00000006,0x0000017b,0x00000179,0x0000017a,0x0003003e,0x0000017c,0x0000017b, + 0x00050039,0x00000009,0x0000017d,0x00000021,0x0000017c,0x0003003e,0x00000175,0x0000017d, + 0x000200f9,0x00000177,0x000200f8,0x00000177,0x0004003d,0x00000009,0x0000017e,0x00000175, + 0x000200fe,0x0000017e,0x00010038, +}; +inline constexpr uint32_t k_e4m3_k32_f32__gemm_f16[] = { + 0x07230203,0x00010600,0x0008000b,0x000002ef,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x0000000b,0x00020011,0x00000016,0x00020011,0x00001151,0x00020011, + 0x00001160,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e, + 0x00000000,0x00000001,0x000d000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x000000f5, + 0x00000106,0x00000116,0x00000124,0x00000275,0x00000281,0x000002bb,0x000002ce,0x00060010, + 0x00000004,0x00000011,0x00000080,0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc, + 0x00090004,0x455f4c47,0x635f5458,0x72746e6f,0x665f6c6f,0x5f776f6c,0x72747461,0x74756269, + 0x00007365,0x00060004,0x455f4c47,0x665f5458,0x74616f6c,0x6d34655f,0x00000033,0x00080004, + 0x455f4c47,0x735f5458,0x65646168,0x36315f72,0x5f746962,0x726f7473,0x00656761,0x00080004, + 0x455f4c47,0x735f5458,0x65646168,0x62385f72,0x735f7469,0x61726f74,0x00006567,0x000b0004, + 0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d, + 0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79, + 0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45, + 0x64756c63,0x69645f65,0x74636572,0x00657669,0x00080004,0x4b5f4c47,0x635f5248,0x65706f6f, + 0x69746172,0x6d5f6576,0x69727461,0x00000078,0x00090004,0x4b5f4c47,0x6d5f5248,0x726f6d65, + 0x63735f79,0x5f65706f,0x616d6573,0x6369746e,0x00000073,0x00090004,0x4b5f4c47,0x735f5248, + 0x65646168,0x75735f72,0x6f726762,0x625f7075,0x63697361,0x00000000,0x00040005,0x00000004, + 0x6e69616d,0x00000000,0x00060005,0x0000000b,0x42363166,0x28737469,0x31363166,0x0000003b, + 0x00040005,0x0000000a,0x756c6176,0x00000065,0x00060005,0x00000010,0x46363166,0x426d6f72, + 0x28737469,0x003b3175,0x00040005,0x0000000f,0x73746962,0x00000000,0x00060005,0x00000015, + 0x66696873,0x656e5274,0x3b317528,0x003b3175,0x00040005,0x00000013,0x756c6176,0x00000065, + 0x00040005,0x00000014,0x66696873,0x00000074,0x00080005,0x00000019,0x336d3465,0x65646f43, + 0x6d6f7246,0x42363146,0x28737469,0x003b3175,0x00050005,0x00000018,0x666c6168,0x73746942, + 0x00000000,0x00070005,0x0000001f,0x6c627570,0x28687369,0x753b3175,0x31663b31,0x003b3136, + 0x00030005,0x0000001c,0x00776f72,0x00040005,0x0000001d,0x756c6f63,0x00006e6d,0x00040005, + 0x0000001e,0x756c6176,0x00000065,0x00060005,0x00000026,0x45363166,0x6e6f7078,0x28746e65, + 0x003b3166,0x00040005,0x00000025,0x756c6176,0x00000065,0x00090005,0x0000002a,0x6e756f72, + 0x69685364,0x69527466,0x45746867,0x286e6576,0x753b3175,0x00003b31,0x00040005,0x00000028, + 0x756c6176,0x00000065,0x00040005,0x00000029,0x66696873,0x00000074,0x00070005,0x00000032, + 0x65786966,0x466f5464,0x69283631,0x3b313436,0x003b3169,0x00050005,0x00000030,0x65786966, + 0x6d755364,0x00000000,0x00060005,0x00000031,0x616e6962,0x78457972,0x656e6f70,0x0000746e, + 0x00090005,0x0000003b,0x53363166,0x28706574,0x663b3166,0x36315b31,0x31663b5d,0x5d36315b, + 0x0000003b,0x00050005,0x00000038,0x75636361,0x616c756d,0x00726f74,0x00030005,0x00000039, + 0x00000061,0x00030005,0x0000003a,0x00000062,0x00050005,0x0000004a,0x746f7571,0x746e6569, + 0x00000000,0x00060005,0x0000004e,0x616d6572,0x65646e69,0x73614d72,0x0000006b,0x00050005, + 0x00000053,0x616d6572,0x65646e69,0x00000072,0x00040005,0x00000057,0x666c6168,0x00796177, + 0x00040005,0x00000073,0x614e7369,0x0000006e,0x00050005,0x0000008f,0x6167656e,0x65766974, + 0x00000000,0x00050005,0x00000095,0x6f707865,0x746e656e,0x00000000,0x00050005,0x0000009b, + 0x746e616d,0x61737369,0x00000000,0x00040005,0x000000a2,0x65646f63,0x00000000,0x00050005, + 0x000000a9,0x6e676973,0x63696669,0x00646e61,0x00040005,0x000000b5,0x66696873,0x00000074, + 0x00040005,0x000000c0,0x61726170,0x0000006d,0x00040005,0x000000c2,0x61726170,0x0000006d, + 0x00050005,0x000000c7,0x78453465,0x656e6f70,0x0000746e,0x00050005,0x000000ca,0x614d3465, + 0x7369746e,0x00006173,0x00040005,0x000000cc,0x61726170,0x0000006d,0x00040005,0x000000ce, + 0x61726170,0x0000006d,0x00040005,0x000000f1,0x65646e69,0x00000078,0x00040005,0x000000f3, + 0x68737550,0x00000000,0x00050006,0x000000f3,0x00000000,0x73776f72,0x00000000,0x00040006, + 0x000000f3,0x00000001,0x0000004e,0x00060006,0x000000f3,0x00000002,0x75706e69,0x72745374, + 0x00656469,0x00070006,0x000000f3,0x00000003,0x7074756f,0x74537475,0x65646972,0x00000000, + 0x00030005,0x000000f5,0x00006370,0x00040005,0x000000fd,0x47414c46,0x00000053,0x00050005, + 0x00000104,0x7074754f,0x6c467475,0x0074616f,0x00050006,0x00000104,0x00000000,0x3374756f, + 0x00000032,0x00030005,0x00000106,0x00000000,0x00050005,0x00000114,0x7074754f,0x34457475, + 0x00000000,0x00050006,0x00000114,0x00000000,0x3874756f,0x00000000,0x00030005,0x00000116, + 0x00000000,0x00040005,0x00000118,0x61726170,0x0000006d,0x00040005,0x0000011b,0x61726170, + 0x0000006d,0x00050005,0x00000122,0x7074754f,0x61487475,0x0000666c,0x00050006,0x00000122, + 0x00000000,0x3174756f,0x00000036,0x00030005,0x00000124,0x00000000,0x00040005,0x0000012f, + 0x61726170,0x0000006d,0x00040005,0x00000132,0x61726170,0x0000006d,0x00050005,0x0000014f, + 0x6e757274,0x65746163,0x00000064,0x00050005,0x00000153,0x616d6572,0x65646e69,0x00000072, + 0x00040005,0x00000159,0x666c6168,0x00796177,0x00050005,0x00000179,0x6167656e,0x65766974, + 0x00000000,0x00050005,0x0000017c,0x6e67616d,0x64757469,0x00000065,0x00030005,0x00000188, + 0x0062736d,0x00060005,0x0000018b,0x756c6176,0x70784565,0x6e656e6f,0x00000074,0x00050005, + 0x0000018f,0x666c6168,0x73746942,0x00000000,0x00050005,0x00000196,0x6e676973,0x63696669, + 0x00646e61,0x00040005,0x000001a0,0x61726170,0x0000006d,0x00040005,0x000001a2,0x61726170, + 0x0000006d,0x00060005,0x000001c6,0x6e627573,0x616d726f,0x6163536c,0x0000656c,0x00050005, + 0x000001ca,0x746e616d,0x61737369,0x00000000,0x00040005,0x000001d8,0x61726170,0x0000006d, + 0x00040005,0x000001da,0x61726170,0x0000006d,0x00040005,0x000001e1,0x61726170,0x0000006d, + 0x00060005,0x000001e7,0x6978616d,0x456d756d,0x6e6f7078,0x00746e65,0x00040005,0x000001ed, + 0x61726170,0x0000006d,0x00030005,0x000001f0,0x00000069,0x00040005,0x00000207,0x61726170, + 0x0000006d,0x00040005,0x0000020c,0x61726170,0x0000006d,0x00050005,0x00000214,0x65786966, + 0x6d755364,0x00000000,0x00050005,0x00000219,0x6f707865,0x746e656e,0x00000000,0x00040005, + 0x0000021a,0x61726170,0x0000006d,0x00040005,0x0000021d,0x6c616373,0x00006465,0x00030005, + 0x0000022d,0x00000069,0x00030005,0x00000242,0x00006165,0x00040005,0x00000244,0x61726170, + 0x0000006d,0x00030005,0x00000248,0x00006265,0x00040005,0x0000024a,0x61726170,0x0000006d, + 0x00040005,0x0000024e,0x646f7270,0x00746375,0x00040005,0x0000026c,0x61726170,0x0000006d, + 0x00040005,0x0000026e,0x61726170,0x0000006d,0x00040005,0x00000272,0x42776f72,0x00657361, + 0x00060005,0x00000275,0x575f6c67,0x476b726f,0x70756f72,0x00004449,0x00030005,0x00000280, + 0x00000069,0x00080005,0x00000281,0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163,0x44496e6f, + 0x00000000,0x00040005,0x0000028a,0x454c4954,0x00004e5f,0x00030005,0x0000028d,0x00776f72, + 0x00040005,0x00000292,0x756c6f63,0x00006e6d,0x00050005,0x000002a4,0x75636361,0x616c756d, + 0x00726f74,0x00030005,0x000002a5,0x0000626b,0x00030005,0x000002ac,0x0000004b,0x00030005, + 0x000002ae,0x0000006a,0x00030005,0x000002b6,0x00000078,0x00040005,0x000002b9,0x75706e49, + 0x00004174,0x00040006,0x000002b9,0x00000000,0x00000061,0x00030005,0x000002bb,0x00000000, + 0x00030005,0x000002c9,0x00000077,0x00040005,0x000002cc,0x75706e49,0x00004274,0x00040006, + 0x000002cc,0x00000000,0x00000062,0x00030005,0x000002ce,0x00000000,0x00040005,0x000002db, + 0x61726170,0x0000006d,0x00040005,0x000002dd,0x61726170,0x0000006d,0x00040005,0x000002df, + 0x61726170,0x0000006d,0x00040005,0x000002e6,0x61726170,0x0000006d,0x00040005,0x000002e8, + 0x61726170,0x0000006d,0x00040005,0x000002ea,0x61726170,0x0000006d,0x00030047,0x000000f3, + 0x00000002,0x00050048,0x000000f3,0x00000000,0x00000023,0x00000000,0x00050048,0x000000f3, + 0x00000001,0x00000023,0x00000004,0x00050048,0x000000f3,0x00000002,0x00000023,0x00000008, + 0x00050048,0x000000f3,0x00000003,0x00000023,0x0000000c,0x00040047,0x000000fd,0x00000001, + 0x00000002,0x00040047,0x00000103,0x00000006,0x00000004,0x00030047,0x00000104,0x00000002, + 0x00040048,0x00000104,0x00000000,0x00000019,0x00050048,0x00000104,0x00000000,0x00000023, + 0x00000000,0x00030047,0x00000106,0x00000019,0x00040047,0x00000106,0x00000021,0x00000007, + 0x00040047,0x00000106,0x00000022,0x00000000,0x00040047,0x00000113,0x00000006,0x00000001, + 0x00030047,0x00000114,0x00000002,0x00040048,0x00000114,0x00000000,0x00000019,0x00050048, + 0x00000114,0x00000000,0x00000023,0x00000000,0x00030047,0x00000116,0x00000019,0x00040047, + 0x00000116,0x00000021,0x00000005,0x00040047,0x00000116,0x00000022,0x00000000,0x00040047, + 0x00000121,0x00000006,0x00000002,0x00030047,0x00000122,0x00000002,0x00040048,0x00000122, + 0x00000000,0x00000019,0x00050048,0x00000122,0x00000000,0x00000023,0x00000000,0x00030047, + 0x00000124,0x00000019,0x00040047,0x00000124,0x00000021,0x00000002,0x00040047,0x00000124, + 0x00000022,0x00000000,0x00030047,0x00000220,0x0000002a,0x00030047,0x00000253,0x0000002a, + 0x00030047,0x00000259,0x0000002a,0x00030047,0x0000025b,0x0000002a,0x00040047,0x00000275, + 0x0000000b,0x0000001a,0x00040047,0x00000281,0x0000000b,0x0000001b,0x00040047,0x0000028a, + 0x00000001,0x00000001,0x00040047,0x000002ac,0x00000001,0x00000000,0x00040047,0x000002b8, + 0x00000006,0x00000002,0x00030047,0x000002b9,0x00000002,0x00040048,0x000002b9,0x00000000, + 0x00000018,0x00050048,0x000002b9,0x00000000,0x00000023,0x00000000,0x00030047,0x000002bb, + 0x00000018,0x00040047,0x000002bb,0x00000021,0x00000000,0x00040047,0x000002bb,0x00000022, + 0x00000000,0x00040047,0x000002cb,0x00000006,0x00000002,0x00030047,0x000002cc,0x00000002, + 0x00040048,0x000002cc,0x00000000,0x00000018,0x00050048,0x000002cc,0x00000000,0x00000023, + 0x00000000,0x00030047,0x000002ce,0x00000018,0x00040047,0x000002ce,0x00000021,0x00000001, + 0x00040047,0x000002ce,0x00000022,0x00000000,0x00020013,0x00000002,0x00030021,0x00000003, + 0x00000002,0x00030016,0x00000006,0x00000010,0x00040020,0x00000007,0x00000007,0x00000006, + 0x00040015,0x00000008,0x00000020,0x00000000,0x00040021,0x00000009,0x00000008,0x00000007, + 0x00040020,0x0000000d,0x00000007,0x00000008,0x00040021,0x0000000e,0x00000006,0x0000000d, + 0x00050021,0x00000012,0x00000008,0x0000000d,0x0000000d,0x00040021,0x00000017,0x00000008, + 0x0000000d,0x00060021,0x0000001b,0x00000002,0x0000000d,0x0000000d,0x00000007,0x00030016, + 0x00000021,0x00000020,0x00040020,0x00000022,0x00000007,0x00000021,0x00040015,0x00000023, + 0x00000020,0x00000001,0x00040021,0x00000024,0x00000023,0x00000022,0x00040015,0x0000002c, + 0x00000040,0x00000001,0x00040020,0x0000002d,0x00000007,0x0000002c,0x00040020,0x0000002e, + 0x00000007,0x00000023,0x00050021,0x0000002f,0x00000021,0x0000002d,0x0000002e,0x0004002b, + 0x00000008,0x00000034,0x00000010,0x0004001c,0x00000035,0x00000021,0x00000034,0x00040020, + 0x00000036,0x00000007,0x00000035,0x00060021,0x00000037,0x00000021,0x00000022,0x00000036, + 0x00000036,0x00040015,0x0000003e,0x00000010,0x00000000,0x0004002b,0x00000008,0x00000044, + 0x0000ffff,0x0004002b,0x00000008,0x0000004f,0x00000001,0x00020014,0x0000005c,0x0004002b, + 0x00000008,0x0000006a,0x00000000,0x00040020,0x00000072,0x00000007,0x0000005c,0x0004002b, + 0x00000008,0x00000075,0x00007c00,0x0004002b,0x00000008,0x0000007b,0x000003ff,0x0004002b, + 0x00000008,0x00000084,0x00007fff,0x0004002b,0x00000008,0x0000008a,0x00000008,0x0004002b, + 0x00000008,0x0000008c,0x00000080,0x0004002b,0x00000008,0x00000091,0x00008000,0x0004002b, + 0x00000008,0x00000097,0x0000000a,0x0004002b,0x00000008,0x00000099,0x0000001f,0x0004002b, + 0x00000008,0x000000a3,0x0000007e,0x0004002b,0x00000008,0x000000b1,0x00000400,0x0004002b, + 0x00000008,0x000000bb,0x0000000f,0x0004002b,0x00000008,0x000000cb,0x00000007,0x0004002b, + 0x00000008,0x000000de,0x00000006,0x0004002b,0x00000008,0x000000e7,0x00000003,0x0006001e, + 0x000000f3,0x00000008,0x00000008,0x00000008,0x00000008,0x00040020,0x000000f4,0x00000009, + 0x000000f3,0x0004003b,0x000000f4,0x000000f5,0x00000009,0x0004002b,0x00000023,0x000000f6, + 0x00000003,0x00040020,0x000000f7,0x00000009,0x00000008,0x00040032,0x00000008,0x000000fd, + 0x00000000,0x0004002b,0x00000008,0x000000fe,0x00000100,0x00060034,0x00000008,0x000000ff, + 0x000000c7,0x000000fd,0x000000fe,0x00060034,0x0000005c,0x00000100,0x000000ab,0x000000ff, + 0x0000006a,0x0003001d,0x00000103,0x00000021,0x0003001e,0x00000104,0x00000103,0x00040020, + 0x00000105,0x0000000c,0x00000104,0x0004003b,0x00000105,0x00000106,0x0000000c,0x0004002b, + 0x00000023,0x00000107,0x00000000,0x00040020,0x0000010b,0x0000000c,0x00000021,0x00060034, + 0x00000008,0x0000010e,0x000000c7,0x000000fd,0x00000034,0x00060034,0x0000005c,0x0000010f, + 0x000000ab,0x0000010e,0x0000006a,0x00040015,0x00000112,0x00000008,0x00000000,0x0003001d, + 0x00000113,0x00000112,0x0003001e,0x00000114,0x00000113,0x00040020,0x00000115,0x0000000c, + 0x00000114,0x0004003b,0x00000115,0x00000116,0x0000000c,0x00040020,0x0000011e,0x0000000c, + 0x00000112,0x0003001d,0x00000121,0x00000006,0x0003001e,0x00000122,0x00000121,0x00040020, + 0x00000123,0x0000000c,0x00000122,0x0004003b,0x00000123,0x00000124,0x0000000c,0x00040020, + 0x00000127,0x0000000c,0x00000006,0x0004002b,0x00000008,0x00000129,0x00000020,0x00060034, + 0x00000008,0x0000012a,0x000000c7,0x000000fd,0x00000129,0x00060034,0x0000005c,0x0000012b, + 0x000000ab,0x0000012a,0x0000006a,0x0004002b,0x00000008,0x00000139,0x00000017,0x0004002b, + 0x00000008,0x0000013b,0x000000ff,0x0004002b,0x00000023,0x0000013e,0x0000007f,0x0004002b, + 0x00000023,0x00000140,0xfffffff2,0x0005002b,0x0000002c,0x00000173,0x00000000,0x00000000, + 0x0004002b,0x00000021,0x00000177,0x00000000,0x0004002b,0x00000023,0x00000198,0x0000000a, + 0x0004002b,0x00000008,0x000001ac,0x00000800,0x0004002b,0x00000023,0x000001b0,0x00000001, + 0x0004002b,0x00000023,0x000001b4,0x00000010,0x0004002b,0x00000023,0x000001bc,0x0000000f, + 0x0004002b,0x00000023,0x000001c8,0x00000018,0x0004002b,0x00000023,0x000001e8,0xffffffeb, + 0x0004002b,0x00000023,0x00000225,0x00000019,0x00040017,0x00000273,0x00000008,0x00000003, + 0x00040020,0x00000274,0x00000001,0x00000273,0x0004003b,0x00000274,0x00000275,0x00000001, + 0x00040020,0x00000276,0x00000001,0x00000008,0x0004002b,0x00000008,0x00000279,0x00000002, + 0x0004002b,0x00000008,0x0000027e,0x00000040,0x0004003b,0x00000274,0x00000281,0x00000001, + 0x00040032,0x00000008,0x0000028a,0x00000020,0x00060034,0x00000008,0x0000028b,0x00000084, + 0x0000027e,0x0000028a,0x00040032,0x00000008,0x000002ac,0x00000010,0x0003001d,0x000002b8, + 0x00000006,0x0003001e,0x000002b9,0x000002b8,0x00040020,0x000002ba,0x0000000c,0x000002b9, + 0x0004003b,0x000002ba,0x000002bb,0x0000000c,0x0004002b,0x00000023,0x000002bd,0x00000002, + 0x0003001d,0x000002cb,0x00000006,0x0003001e,0x000002cc,0x000002cb,0x00040020,0x000002cd, + 0x0000000c,0x000002cc,0x0004003b,0x000002cd,0x000002ce,0x0000000c,0x0006002c,0x00000273, + 0x000002ee,0x0000008c,0x0000004f,0x0000004f,0x00050036,0x00000002,0x00000004,0x00000000, + 0x00000003,0x000200f8,0x00000005,0x0004003b,0x0000000d,0x00000272,0x00000007,0x0004003b, + 0x0000000d,0x00000280,0x00000007,0x0004003b,0x0000000d,0x0000028d,0x00000007,0x0004003b, + 0x0000000d,0x00000292,0x00000007,0x0004003b,0x00000022,0x000002a4,0x00000007,0x0004003b, + 0x0000000d,0x000002a5,0x00000007,0x0004003b,0x0000000d,0x000002ae,0x00000007,0x0004003b, + 0x00000036,0x000002b6,0x00000007,0x0004003b,0x00000036,0x000002c9,0x00000007,0x0004003b, + 0x00000022,0x000002db,0x00000007,0x0004003b,0x00000036,0x000002dd,0x00000007,0x0004003b, + 0x00000036,0x000002df,0x00000007,0x0004003b,0x0000000d,0x000002e6,0x00000007,0x0004003b, + 0x0000000d,0x000002e8,0x00000007,0x0004003b,0x00000007,0x000002ea,0x00000007,0x00050041, + 0x00000276,0x00000277,0x00000275,0x0000004f,0x0004003d,0x00000008,0x00000278,0x00000277, + 0x00050041,0x00000276,0x0000027a,0x00000275,0x00000279,0x0004003d,0x00000008,0x0000027b, + 0x0000027a,0x00050084,0x00000008,0x0000027c,0x0000027b,0x00000044,0x00050080,0x00000008, + 0x0000027d,0x00000278,0x0000027c,0x00050084,0x00000008,0x0000027f,0x0000027d,0x0000027e, + 0x0003003e,0x00000272,0x0000027f,0x00050041,0x00000276,0x00000282,0x00000281,0x0000006a, + 0x0004003d,0x00000008,0x00000283,0x00000282,0x0003003e,0x00000280,0x00000283,0x000200f9, + 0x00000284,0x000200f8,0x00000284,0x000400f6,0x00000286,0x00000287,0x00000000,0x000200f9, + 0x00000288,0x000200f8,0x00000288,0x0004003d,0x00000008,0x00000289,0x00000280,0x000500b0, + 0x0000005c,0x0000028c,0x00000289,0x0000028b,0x000400fa,0x0000028c,0x00000285,0x00000286, + 0x000200f8,0x00000285,0x0004003d,0x00000008,0x0000028e,0x00000272,0x0004003d,0x00000008, + 0x0000028f,0x00000280,0x00050086,0x00000008,0x00000290,0x0000028f,0x0000028a,0x00050080, + 0x00000008,0x00000291,0x0000028e,0x00000290,0x0003003e,0x0000028d,0x00000291,0x0004003d, + 0x00000008,0x00000293,0x00000280,0x00050089,0x00000008,0x00000294,0x00000293,0x0000028a, + 0x0003003e,0x00000292,0x00000294,0x0004003d,0x00000008,0x00000295,0x0000028d,0x00050041, + 0x000000f7,0x00000296,0x000000f5,0x00000107,0x0004003d,0x00000008,0x00000297,0x00000296, + 0x000500ae,0x0000005c,0x00000298,0x00000295,0x00000297,0x000400a8,0x0000005c,0x00000299, + 0x00000298,0x000300f7,0x0000029b,0x00000000,0x000400fa,0x00000299,0x0000029a,0x0000029b, + 0x000200f8,0x0000029a,0x0004003d,0x00000008,0x0000029c,0x00000292,0x00050041,0x000000f7, + 0x0000029d,0x000000f5,0x000001b0,0x0004003d,0x00000008,0x0000029e,0x0000029d,0x000500ae, + 0x0000005c,0x0000029f,0x0000029c,0x0000029e,0x000200f9,0x0000029b,0x000200f8,0x0000029b, + 0x000700f5,0x0000005c,0x000002a0,0x00000298,0x00000285,0x0000029f,0x0000029a,0x000300f7, + 0x000002a2,0x00000000,0x000400fa,0x000002a0,0x000002a1,0x000002a2,0x000200f8,0x000002a1, + 0x000200f9,0x00000287,0x000200f8,0x000002a2,0x0003003e,0x000002a4,0x00000177,0x0003003e, + 0x000002a5,0x0000006a,0x000200f9,0x000002a6,0x000200f8,0x000002a6,0x000400f6,0x000002a8, + 0x000002a9,0x00000000,0x000200f9,0x000002aa,0x000200f8,0x000002aa,0x0004003d,0x00000008, + 0x000002ab,0x000002a5,0x000500b0,0x0000005c,0x000002ad,0x000002ab,0x000002ac,0x000400fa, + 0x000002ad,0x000002a7,0x000002a8,0x000200f8,0x000002a7,0x0003003e,0x000002ae,0x0000006a, + 0x000200f9,0x000002af,0x000200f8,0x000002af,0x000400f6,0x000002b1,0x000002b2,0x00000000, + 0x000200f9,0x000002b3,0x000200f8,0x000002b3,0x0004003d,0x00000008,0x000002b4,0x000002ae, + 0x000500b0,0x0000005c,0x000002b5,0x000002b4,0x00000034,0x000400fa,0x000002b5,0x000002b0, + 0x000002b1,0x000200f8,0x000002b0,0x0004003d,0x00000008,0x000002b7,0x000002ae,0x0004003d, + 0x00000008,0x000002bc,0x0000028d,0x00050041,0x000000f7,0x000002be,0x000000f5,0x000002bd, + 0x0004003d,0x00000008,0x000002bf,0x000002be,0x00050084,0x00000008,0x000002c0,0x000002bc, + 0x000002bf,0x0004003d,0x00000008,0x000002c1,0x000002a5,0x00050080,0x00000008,0x000002c2, + 0x000002c0,0x000002c1,0x0004003d,0x00000008,0x000002c3,0x000002ae,0x00050080,0x00000008, + 0x000002c4,0x000002c2,0x000002c3,0x00060041,0x00000127,0x000002c5,0x000002bb,0x00000107, + 0x000002c4,0x0004003d,0x00000006,0x000002c6,0x000002c5,0x00040073,0x00000021,0x000002c7, + 0x000002c6,0x00050041,0x00000022,0x000002c8,0x000002b6,0x000002b7,0x0003003e,0x000002c8, + 0x000002c7,0x0004003d,0x00000008,0x000002ca,0x000002ae,0x0004003d,0x00000008,0x000002cf, + 0x000002a5,0x0004003d,0x00000008,0x000002d0,0x000002ae,0x00050080,0x00000008,0x000002d1, + 0x000002cf,0x000002d0,0x00050084,0x00000008,0x000002d2,0x000002d1,0x0000028a,0x0004003d, + 0x00000008,0x000002d3,0x00000292,0x00050080,0x00000008,0x000002d4,0x000002d2,0x000002d3, + 0x00060041,0x00000127,0x000002d5,0x000002ce,0x00000107,0x000002d4,0x0004003d,0x00000006, + 0x000002d6,0x000002d5,0x00040073,0x00000021,0x000002d7,0x000002d6,0x00050041,0x00000022, + 0x000002d8,0x000002c9,0x000002ca,0x0003003e,0x000002d8,0x000002d7,0x000200f9,0x000002b2, + 0x000200f8,0x000002b2,0x0004003d,0x00000008,0x000002d9,0x000002ae,0x00050080,0x00000008, + 0x000002da,0x000002d9,0x000001b0,0x0003003e,0x000002ae,0x000002da,0x000200f9,0x000002af, + 0x000200f8,0x000002b1,0x0004003d,0x00000021,0x000002dc,0x000002a4,0x0003003e,0x000002db, + 0x000002dc,0x0004003d,0x00000035,0x000002de,0x000002b6,0x0003003e,0x000002dd,0x000002de, + 0x0004003d,0x00000035,0x000002e0,0x000002c9,0x0003003e,0x000002df,0x000002e0,0x00070039, + 0x00000021,0x000002e1,0x0000003b,0x000002db,0x000002dd,0x000002df,0x0003003e,0x000002a4, + 0x000002e1,0x000200f9,0x000002a9,0x000200f8,0x000002a9,0x0004003d,0x00000008,0x000002e2, + 0x000002a5,0x00050080,0x00000008,0x000002e3,0x000002e2,0x00000034,0x0003003e,0x000002a5, + 0x000002e3,0x000200f9,0x000002a6,0x000200f8,0x000002a8,0x0004003d,0x00000021,0x000002e4, + 0x000002a4,0x00040073,0x00000006,0x000002e5,0x000002e4,0x0004003d,0x00000008,0x000002e7, + 0x0000028d,0x0003003e,0x000002e6,0x000002e7,0x0004003d,0x00000008,0x000002e9,0x00000292, + 0x0003003e,0x000002e8,0x000002e9,0x0003003e,0x000002ea,0x000002e5,0x00070039,0x00000002, + 0x000002eb,0x0000001f,0x000002e6,0x000002e8,0x000002ea,0x000200f9,0x00000287,0x000200f8, + 0x00000287,0x0004003d,0x00000008,0x000002ec,0x00000280,0x00050080,0x00000008,0x000002ed, + 0x000002ec,0x0000008c,0x0003003e,0x00000280,0x000002ed,0x000200f9,0x00000284,0x000200f8, + 0x00000286,0x000100fd,0x00010038,0x00050036,0x00000008,0x0000000b,0x00000000,0x00000009, + 0x00030037,0x00000007,0x0000000a,0x000200f8,0x0000000c,0x0004003d,0x00000006,0x0000003d, + 0x0000000a,0x0004007c,0x0000003e,0x0000003f,0x0000003d,0x00040071,0x00000008,0x00000040, + 0x0000003f,0x000200fe,0x00000040,0x00010038,0x00050036,0x00000006,0x00000010,0x00000000, + 0x0000000e,0x00030037,0x0000000d,0x0000000f,0x000200f8,0x00000011,0x0004003d,0x00000008, + 0x00000043,0x0000000f,0x000500c7,0x00000008,0x00000045,0x00000043,0x00000044,0x00040071, + 0x0000003e,0x00000046,0x00000045,0x0004007c,0x00000006,0x00000047,0x00000046,0x000200fe, + 0x00000047,0x00010038,0x00050036,0x00000008,0x00000015,0x00000000,0x00000012,0x00030037, + 0x0000000d,0x00000013,0x00030037,0x0000000d,0x00000014,0x000200f8,0x00000016,0x0004003b, + 0x0000000d,0x0000004a,0x00000007,0x0004003b,0x0000000d,0x0000004e,0x00000007,0x0004003b, + 0x0000000d,0x00000053,0x00000007,0x0004003b,0x0000000d,0x00000057,0x00000007,0x0004003d, + 0x00000008,0x0000004b,0x00000013,0x0004003d,0x00000008,0x0000004c,0x00000014,0x000500c2, + 0x00000008,0x0000004d,0x0000004b,0x0000004c,0x0003003e,0x0000004a,0x0000004d,0x0004003d, + 0x00000008,0x00000050,0x00000014,0x000500c4,0x00000008,0x00000051,0x0000004f,0x00000050, + 0x00050082,0x00000008,0x00000052,0x00000051,0x0000004f,0x0003003e,0x0000004e,0x00000052, + 0x0004003d,0x00000008,0x00000054,0x00000013,0x0004003d,0x00000008,0x00000055,0x0000004e, + 0x000500c7,0x00000008,0x00000056,0x00000054,0x00000055,0x0003003e,0x00000053,0x00000056, + 0x0004003d,0x00000008,0x00000058,0x00000014,0x00050082,0x00000008,0x00000059,0x00000058, + 0x0000004f,0x000500c4,0x00000008,0x0000005a,0x0000004f,0x00000059,0x0003003e,0x00000057, + 0x0000005a,0x0004003d,0x00000008,0x0000005b,0x0000004a,0x0004003d,0x00000008,0x0000005d, + 0x00000053,0x0004003d,0x00000008,0x0000005e,0x00000057,0x000500ac,0x0000005c,0x0000005f, + 0x0000005d,0x0000005e,0x000400a8,0x0000005c,0x00000060,0x0000005f,0x000300f7,0x00000062, + 0x00000000,0x000400fa,0x00000060,0x00000061,0x00000062,0x000200f8,0x00000061,0x0004003d, + 0x00000008,0x00000063,0x00000053,0x0004003d,0x00000008,0x00000064,0x00000057,0x000500aa, + 0x0000005c,0x00000065,0x00000063,0x00000064,0x000300f7,0x00000067,0x00000000,0x000400fa, + 0x00000065,0x00000066,0x00000067,0x000200f8,0x00000066,0x0004003d,0x00000008,0x00000068, + 0x0000004a,0x000500c7,0x00000008,0x00000069,0x00000068,0x0000004f,0x000500ab,0x0000005c, + 0x0000006b,0x00000069,0x0000006a,0x000200f9,0x00000067,0x000200f8,0x00000067,0x000700f5, + 0x0000005c,0x0000006c,0x00000065,0x00000061,0x0000006b,0x00000066,0x000200f9,0x00000062, + 0x000200f8,0x00000062,0x000700f5,0x0000005c,0x0000006d,0x0000005f,0x00000016,0x0000006c, + 0x00000067,0x000600a9,0x00000008,0x0000006e,0x0000006d,0x0000004f,0x0000006a,0x00050080, + 0x00000008,0x0000006f,0x0000005b,0x0000006e,0x000200fe,0x0000006f,0x00010038,0x00050036, + 0x00000008,0x00000019,0x00000000,0x00000017,0x00030037,0x0000000d,0x00000018,0x000200f8, + 0x0000001a,0x0004003b,0x00000072,0x00000073,0x00000007,0x0004003b,0x0000000d,0x0000008f, + 0x00000007,0x0004003b,0x0000000d,0x00000095,0x00000007,0x0004003b,0x0000000d,0x0000009b, + 0x00000007,0x0004003b,0x0000000d,0x000000a2,0x00000007,0x0004003b,0x0000000d,0x000000a9, + 0x00000007,0x0004003b,0x0000000d,0x000000ac,0x00000007,0x0004003b,0x0000000d,0x000000b5, + 0x00000007,0x0004003b,0x0000000d,0x000000b8,0x00000007,0x0004003b,0x0000000d,0x000000c0, + 0x00000007,0x0004003b,0x0000000d,0x000000c2,0x00000007,0x0004003b,0x0000000d,0x000000c7, + 0x00000007,0x0004003b,0x0000000d,0x000000ca,0x00000007,0x0004003b,0x0000000d,0x000000cc, + 0x00000007,0x0004003b,0x0000000d,0x000000ce,0x00000007,0x0004003b,0x0000000d,0x000000e2, + 0x00000007,0x0004003d,0x00000008,0x00000074,0x00000018,0x000500c7,0x00000008,0x00000076, + 0x00000074,0x00000075,0x000500aa,0x0000005c,0x00000077,0x00000076,0x00000075,0x000300f7, + 0x00000079,0x00000000,0x000400fa,0x00000077,0x00000078,0x00000079,0x000200f8,0x00000078, + 0x0004003d,0x00000008,0x0000007a,0x00000018,0x000500c7,0x00000008,0x0000007c,0x0000007a, + 0x0000007b,0x000500ab,0x0000005c,0x0000007d,0x0000007c,0x0000006a,0x000200f9,0x00000079, + 0x000200f8,0x00000079,0x000700f5,0x0000005c,0x0000007e,0x00000077,0x0000001a,0x0000007d, + 0x00000078,0x0003003e,0x00000073,0x0000007e,0x0004003d,0x0000005c,0x0000007f,0x00000073, + 0x000300f7,0x00000081,0x00000000,0x000400fa,0x0000007f,0x00000080,0x00000081,0x000200f8, + 0x00000080,0x000200fe,0x0000006a,0x000200f8,0x00000081,0x0004003d,0x00000008,0x00000083, + 0x00000018,0x000500c7,0x00000008,0x00000085,0x00000083,0x00000084,0x000500aa,0x0000005c, + 0x00000086,0x00000085,0x0000006a,0x000300f7,0x00000088,0x00000000,0x000400fa,0x00000086, + 0x00000087,0x00000088,0x000200f8,0x00000087,0x0004003d,0x00000008,0x00000089,0x00000018, + 0x000500c2,0x00000008,0x0000008b,0x00000089,0x0000008a,0x000500c7,0x00000008,0x0000008d, + 0x0000008b,0x0000008c,0x000200fe,0x0000008d,0x000200f8,0x00000088,0x0004003d,0x00000008, + 0x00000090,0x00000018,0x000500c7,0x00000008,0x00000092,0x00000090,0x00000091,0x000500ab, + 0x0000005c,0x00000093,0x00000092,0x0000006a,0x000600a9,0x00000008,0x00000094,0x00000093, + 0x0000008c,0x0000006a,0x0003003e,0x0000008f,0x00000094,0x0004003d,0x00000008,0x00000096, + 0x00000018,0x000500c2,0x00000008,0x00000098,0x00000096,0x00000097,0x000500c7,0x00000008, + 0x0000009a,0x00000098,0x00000099,0x0003003e,0x00000095,0x0000009a,0x0004003d,0x00000008, + 0x0000009c,0x00000018,0x000500c7,0x00000008,0x0000009d,0x0000009c,0x0000007b,0x0003003e, + 0x0000009b,0x0000009d,0x0004003d,0x00000008,0x0000009e,0x00000095,0x000500aa,0x0000005c, + 0x0000009f,0x0000009e,0x00000099,0x000300f7,0x000000a1,0x00000000,0x000400fa,0x0000009f, + 0x000000a0,0x000000a4,0x000200f8,0x000000a0,0x0003003e,0x000000a2,0x000000a3,0x000200f9, + 0x000000a1,0x000200f8,0x000000a4,0x0004003d,0x00000008,0x000000a5,0x00000095,0x000500b2, + 0x0000005c,0x000000a6,0x000000a5,0x0000008a,0x000300f7,0x000000a8,0x00000000,0x000400fa, + 0x000000a6,0x000000a7,0x000000c6,0x000200f8,0x000000a7,0x0004003d,0x00000008,0x000000aa, + 0x00000095,0x000500aa,0x0000005c,0x000000ab,0x000000aa,0x0000006a,0x000300f7,0x000000ae, + 0x00000000,0x000400fa,0x000000ab,0x000000ad,0x000000b0,0x000200f8,0x000000ad,0x0004003d, + 0x00000008,0x000000af,0x0000009b,0x0003003e,0x000000ac,0x000000af,0x000200f9,0x000000ae, + 0x000200f8,0x000000b0,0x0004003d,0x00000008,0x000000b2,0x0000009b,0x00050080,0x00000008, + 0x000000b3,0x000000b1,0x000000b2,0x0003003e,0x000000ac,0x000000b3,0x000200f9,0x000000ae, + 0x000200f8,0x000000ae,0x0004003d,0x00000008,0x000000b4,0x000000ac,0x0003003e,0x000000a9, + 0x000000b4,0x0004003d,0x00000008,0x000000b6,0x00000095,0x000500aa,0x0000005c,0x000000b7, + 0x000000b6,0x0000006a,0x000300f7,0x000000ba,0x00000000,0x000400fa,0x000000b7,0x000000b9, + 0x000000bc,0x000200f8,0x000000b9,0x0003003e,0x000000b8,0x000000bb,0x000200f9,0x000000ba, + 0x000200f8,0x000000bc,0x0004003d,0x00000008,0x000000bd,0x00000095,0x00050082,0x00000008, + 0x000000be,0x00000034,0x000000bd,0x0003003e,0x000000b8,0x000000be,0x000200f9,0x000000ba, + 0x000200f8,0x000000ba,0x0004003d,0x00000008,0x000000bf,0x000000b8,0x0003003e,0x000000b5, + 0x000000bf,0x0004003d,0x00000008,0x000000c1,0x000000a9,0x0003003e,0x000000c0,0x000000c1, + 0x0004003d,0x00000008,0x000000c3,0x000000b5,0x0003003e,0x000000c2,0x000000c3,0x00060039, + 0x00000008,0x000000c4,0x00000015,0x000000c0,0x000000c2,0x0007000c,0x00000008,0x000000c5, + 0x00000001,0x00000026,0x000000c4,0x0000008a,0x0003003e,0x000000a2,0x000000c5,0x000200f9, + 0x000000a8,0x000200f8,0x000000c6,0x0004003d,0x00000008,0x000000c8,0x00000095,0x00050082, + 0x00000008,0x000000c9,0x000000c8,0x0000008a,0x0003003e,0x000000c7,0x000000c9,0x0004003d, + 0x00000008,0x000000cd,0x0000009b,0x0003003e,0x000000cc,0x000000cd,0x0003003e,0x000000ce, + 0x000000cb,0x00060039,0x00000008,0x000000cf,0x00000015,0x000000cc,0x000000ce,0x0003003e, + 0x000000ca,0x000000cf,0x0004003d,0x00000008,0x000000d0,0x000000ca,0x000500aa,0x0000005c, + 0x000000d1,0x000000d0,0x0000008a,0x000300f7,0x000000d3,0x00000000,0x000400fa,0x000000d1, + 0x000000d2,0x000000d3,0x000200f8,0x000000d2,0x0003003e,0x000000ca,0x0000006a,0x0004003d, + 0x00000008,0x000000d4,0x000000c7,0x00050080,0x00000008,0x000000d5,0x000000d4,0x0000004f, + 0x0003003e,0x000000c7,0x000000d5,0x000200f9,0x000000d3,0x000200f8,0x000000d3,0x0004003d, + 0x00000008,0x000000d6,0x000000c7,0x000500ac,0x0000005c,0x000000d7,0x000000d6,0x000000bb, + 0x000400a8,0x0000005c,0x000000d8,0x000000d7,0x000300f7,0x000000da,0x00000000,0x000400fa, + 0x000000d8,0x000000d9,0x000000da,0x000200f8,0x000000d9,0x0004003d,0x00000008,0x000000db, + 0x000000c7,0x000500aa,0x0000005c,0x000000dc,0x000000db,0x000000bb,0x0004003d,0x00000008, + 0x000000dd,0x000000ca,0x000500ac,0x0000005c,0x000000df,0x000000dd,0x000000de,0x000500a7, + 0x0000005c,0x000000e0,0x000000dc,0x000000df,0x000200f9,0x000000da,0x000200f8,0x000000da, + 0x000700f5,0x0000005c,0x000000e1,0x000000d7,0x000000d3,0x000000e0,0x000000d9,0x000300f7, + 0x000000e4,0x00000000,0x000400fa,0x000000e1,0x000000e3,0x000000e5,0x000200f8,0x000000e3, + 0x0003003e,0x000000e2,0x000000a3,0x000200f9,0x000000e4,0x000200f8,0x000000e5,0x0004003d, + 0x00000008,0x000000e6,0x000000c7,0x000500c4,0x00000008,0x000000e8,0x000000e6,0x000000e7, + 0x0004003d,0x00000008,0x000000e9,0x000000ca,0x000500c5,0x00000008,0x000000ea,0x000000e8, + 0x000000e9,0x0003003e,0x000000e2,0x000000ea,0x000200f9,0x000000e4,0x000200f8,0x000000e4, + 0x0004003d,0x00000008,0x000000eb,0x000000e2,0x0003003e,0x000000a2,0x000000eb,0x000200f9, + 0x000000a8,0x000200f8,0x000000a8,0x000200f9,0x000000a1,0x000200f8,0x000000a1,0x0004003d, + 0x00000008,0x000000ec,0x0000008f,0x0004003d,0x00000008,0x000000ed,0x000000a2,0x000500c5, + 0x00000008,0x000000ee,0x000000ec,0x000000ed,0x000200fe,0x000000ee,0x00010038,0x00050036, + 0x00000002,0x0000001f,0x00000000,0x0000001b,0x00030037,0x0000000d,0x0000001c,0x00030037, + 0x0000000d,0x0000001d,0x00030037,0x00000007,0x0000001e,0x000200f8,0x00000020,0x0004003b, + 0x0000000d,0x000000f1,0x00000007,0x0004003b,0x00000007,0x00000118,0x00000007,0x0004003b, + 0x0000000d,0x0000011b,0x00000007,0x0004003b,0x00000007,0x0000012f,0x00000007,0x0004003b, + 0x0000000d,0x00000132,0x00000007,0x0004003d,0x00000008,0x000000f2,0x0000001c,0x00050041, + 0x000000f7,0x000000f8,0x000000f5,0x000000f6,0x0004003d,0x00000008,0x000000f9,0x000000f8, + 0x00050084,0x00000008,0x000000fa,0x000000f2,0x000000f9,0x0004003d,0x00000008,0x000000fb, + 0x0000001d,0x00050080,0x00000008,0x000000fc,0x000000fa,0x000000fb,0x0003003e,0x000000f1, + 0x000000fc,0x000300f7,0x00000102,0x00000000,0x000400fa,0x00000100,0x00000101,0x0000010d, + 0x000200f8,0x00000101,0x0004003d,0x00000008,0x00000108,0x000000f1,0x0004003d,0x00000006, + 0x00000109,0x0000001e,0x00040073,0x00000021,0x0000010a,0x00000109,0x00060041,0x0000010b, + 0x0000010c,0x00000106,0x00000107,0x00000108,0x0003003e,0x0000010c,0x0000010a,0x000200f9, + 0x00000102,0x000200f8,0x0000010d,0x000300f7,0x00000111,0x00000000,0x000400fa,0x0000010f, + 0x00000110,0x00000120,0x000200f8,0x00000110,0x0004003d,0x00000008,0x00000117,0x000000f1, + 0x0004003d,0x00000006,0x00000119,0x0000001e,0x0003003e,0x00000118,0x00000119,0x00050039, + 0x00000008,0x0000011a,0x0000000b,0x00000118,0x0003003e,0x0000011b,0x0000011a,0x00050039, + 0x00000008,0x0000011c,0x00000019,0x0000011b,0x00040071,0x00000112,0x0000011d,0x0000011c, + 0x00060041,0x0000011e,0x0000011f,0x00000116,0x00000107,0x00000117,0x0003003e,0x0000011f, + 0x0000011d,0x000200f9,0x00000111,0x000200f8,0x00000120,0x0004003d,0x00000008,0x00000125, + 0x000000f1,0x0004003d,0x00000006,0x00000126,0x0000001e,0x00060041,0x00000127,0x00000128, + 0x00000124,0x00000107,0x00000125,0x0003003e,0x00000128,0x00000126,0x000200f9,0x00000111, + 0x000200f8,0x00000111,0x000200f9,0x00000102,0x000200f8,0x00000102,0x000300f7,0x0000012d, + 0x00000000,0x000400fa,0x0000012b,0x0000012c,0x0000012d,0x000200f8,0x0000012c,0x0004003d, + 0x00000008,0x0000012e,0x000000f1,0x0004003d,0x00000006,0x00000130,0x0000001e,0x0003003e, + 0x0000012f,0x00000130,0x00050039,0x00000008,0x00000131,0x0000000b,0x0000012f,0x0003003e, + 0x00000132,0x00000131,0x00050039,0x00000008,0x00000133,0x00000019,0x00000132,0x00040071, + 0x00000112,0x00000134,0x00000133,0x00060041,0x0000011e,0x00000135,0x00000116,0x00000107, + 0x0000012e,0x0003003e,0x00000135,0x00000134,0x000200f9,0x0000012d,0x000200f8,0x0000012d, + 0x000100fd,0x00010038,0x00050036,0x00000023,0x00000026,0x00000000,0x00000024,0x00030037, + 0x00000022,0x00000025,0x000200f8,0x00000027,0x0004003d,0x00000021,0x00000136,0x00000025, + 0x0006000c,0x00000021,0x00000137,0x00000001,0x00000004,0x00000136,0x0004007c,0x00000008, + 0x00000138,0x00000137,0x000500c2,0x00000008,0x0000013a,0x00000138,0x00000139,0x000500c7, + 0x00000008,0x0000013c,0x0000013a,0x0000013b,0x0004007c,0x00000023,0x0000013d,0x0000013c, + 0x00050082,0x00000023,0x0000013f,0x0000013d,0x0000013e,0x0007000c,0x00000023,0x00000141, + 0x00000001,0x0000002a,0x0000013f,0x00000140,0x000200fe,0x00000141,0x00010038,0x00050036, + 0x00000008,0x0000002a,0x00000000,0x00000012,0x00030037,0x0000000d,0x00000028,0x00030037, + 0x0000000d,0x00000029,0x000200f8,0x0000002b,0x0004003b,0x0000000d,0x0000014f,0x00000007, + 0x0004003b,0x0000000d,0x00000153,0x00000007,0x0004003b,0x0000000d,0x00000159,0x00000007, + 0x0004003d,0x00000008,0x00000144,0x00000029,0x000500aa,0x0000005c,0x00000145,0x00000144, + 0x0000006a,0x000300f7,0x00000147,0x00000000,0x000400fa,0x00000145,0x00000146,0x00000147, + 0x000200f8,0x00000146,0x0004003d,0x00000008,0x00000148,0x00000028,0x000200fe,0x00000148, + 0x000200f8,0x00000147,0x0004003d,0x00000008,0x0000014a,0x00000029,0x000500ac,0x0000005c, + 0x0000014b,0x0000014a,0x00000099,0x000300f7,0x0000014d,0x00000000,0x000400fa,0x0000014b, + 0x0000014c,0x0000014d,0x000200f8,0x0000014c,0x000200fe,0x0000006a,0x000200f8,0x0000014d, + 0x0004003d,0x00000008,0x00000150,0x00000028,0x0004003d,0x00000008,0x00000151,0x00000029, + 0x000500c2,0x00000008,0x00000152,0x00000150,0x00000151,0x0003003e,0x0000014f,0x00000152, + 0x0004003d,0x00000008,0x00000154,0x00000028,0x0004003d,0x00000008,0x00000155,0x00000029, + 0x000500c4,0x00000008,0x00000156,0x0000004f,0x00000155,0x00050082,0x00000008,0x00000157, + 0x00000156,0x0000004f,0x000500c7,0x00000008,0x00000158,0x00000154,0x00000157,0x0003003e, + 0x00000153,0x00000158,0x0004003d,0x00000008,0x0000015a,0x00000029,0x00050082,0x00000008, + 0x0000015b,0x0000015a,0x0000004f,0x000500c4,0x00000008,0x0000015c,0x0000004f,0x0000015b, + 0x0003003e,0x00000159,0x0000015c,0x0004003d,0x00000008,0x0000015d,0x0000014f,0x0004003d, + 0x00000008,0x0000015e,0x00000153,0x0004003d,0x00000008,0x0000015f,0x00000159,0x000500ac, + 0x0000005c,0x00000160,0x0000015e,0x0000015f,0x000400a8,0x0000005c,0x00000161,0x00000160, + 0x000300f7,0x00000163,0x00000000,0x000400fa,0x00000161,0x00000162,0x00000163,0x000200f8, + 0x00000162,0x0004003d,0x00000008,0x00000164,0x00000153,0x0004003d,0x00000008,0x00000165, + 0x00000159,0x000500aa,0x0000005c,0x00000166,0x00000164,0x00000165,0x000300f7,0x00000168, + 0x00000000,0x000400fa,0x00000166,0x00000167,0x00000168,0x000200f8,0x00000167,0x0004003d, + 0x00000008,0x00000169,0x0000014f,0x000500c7,0x00000008,0x0000016a,0x00000169,0x0000004f, + 0x000500ab,0x0000005c,0x0000016b,0x0000016a,0x0000006a,0x000200f9,0x00000168,0x000200f8, + 0x00000168,0x000700f5,0x0000005c,0x0000016c,0x00000166,0x00000162,0x0000016b,0x00000167, + 0x000200f9,0x00000163,0x000200f8,0x00000163,0x000700f5,0x0000005c,0x0000016d,0x00000160, + 0x0000014d,0x0000016c,0x00000168,0x000600a9,0x00000008,0x0000016e,0x0000016d,0x0000004f, + 0x0000006a,0x00050080,0x00000008,0x0000016f,0x0000015d,0x0000016e,0x000200fe,0x0000016f, + 0x00010038,0x00050036,0x00000021,0x00000032,0x00000000,0x0000002f,0x00030037,0x0000002d, + 0x00000030,0x00030037,0x0000002e,0x00000031,0x000200f8,0x00000033,0x0004003b,0x00000072, + 0x00000179,0x00000007,0x0004003b,0x0000000d,0x0000017c,0x00000007,0x0004003b,0x0000002d, + 0x0000017e,0x00000007,0x0004003b,0x0000002e,0x00000188,0x00000007,0x0004003b,0x0000002e, + 0x0000018b,0x00000007,0x0004003b,0x0000000d,0x0000018f,0x00000007,0x0004003b,0x0000000d, + 0x00000196,0x00000007,0x0004003b,0x0000000d,0x0000019a,0x00000007,0x0004003b,0x0000000d, + 0x000001a0,0x00000007,0x0004003b,0x0000000d,0x000001a2,0x00000007,0x0004003b,0x0000002e, + 0x000001c6,0x00000007,0x0004003b,0x0000000d,0x000001ca,0x00000007,0x0004003b,0x0000000d, + 0x000001cd,0x00000007,0x0004003b,0x0000000d,0x000001d8,0x00000007,0x0004003b,0x0000000d, + 0x000001da,0x00000007,0x0004003b,0x0000000d,0x000001e1,0x00000007,0x0004003d,0x0000002c, + 0x00000172,0x00000030,0x000500aa,0x0000005c,0x00000174,0x00000172,0x00000173,0x000300f7, + 0x00000176,0x00000000,0x000400fa,0x00000174,0x00000175,0x00000176,0x000200f8,0x00000175, + 0x000200fe,0x00000177,0x000200f8,0x00000176,0x0004003d,0x0000002c,0x0000017a,0x00000030, + 0x000500b1,0x0000005c,0x0000017b,0x0000017a,0x00000173,0x0003003e,0x00000179,0x0000017b, + 0x0004003d,0x0000005c,0x0000017d,0x00000179,0x000300f7,0x00000180,0x00000000,0x000400fa, + 0x0000017d,0x0000017f,0x00000183,0x000200f8,0x0000017f,0x0004003d,0x0000002c,0x00000181, + 0x00000030,0x0004007e,0x0000002c,0x00000182,0x00000181,0x0003003e,0x0000017e,0x00000182, + 0x000200f9,0x00000180,0x000200f8,0x00000183,0x0004003d,0x0000002c,0x00000184,0x00000030, + 0x0003003e,0x0000017e,0x00000184,0x000200f9,0x00000180,0x000200f8,0x00000180,0x0004003d, + 0x0000002c,0x00000185,0x0000017e,0x00040072,0x00000023,0x00000186,0x00000185,0x0004007c, + 0x00000008,0x00000187,0x00000186,0x0003003e,0x0000017c,0x00000187,0x0004003d,0x00000008, + 0x00000189,0x0000017c,0x0006000c,0x00000023,0x0000018a,0x00000001,0x0000004b,0x00000189, + 0x0003003e,0x00000188,0x0000018a,0x0004003d,0x00000023,0x0000018c,0x00000188,0x0004003d, + 0x00000023,0x0000018d,0x00000031,0x00050080,0x00000023,0x0000018e,0x0000018c,0x0000018d, + 0x0003003e,0x0000018b,0x0000018e,0x0004003d,0x0000005c,0x00000190,0x00000179,0x000600a9, + 0x00000008,0x00000191,0x00000190,0x00000091,0x0000006a,0x0003003e,0x0000018f,0x00000191, + 0x0004003d,0x00000023,0x00000192,0x0000018b,0x000500af,0x0000005c,0x00000193,0x00000192, + 0x00000140,0x000300f7,0x00000195,0x00000000,0x000400fa,0x00000193,0x00000194,0x000001c5, + 0x000200f8,0x00000194,0x0004003d,0x00000023,0x00000197,0x00000188,0x000500ad,0x0000005c, + 0x00000199,0x00000197,0x00000198,0x000300f7,0x0000019c,0x00000000,0x000400fa,0x00000199, + 0x0000019b,0x000001a4,0x000200f8,0x0000019b,0x0004003d,0x00000023,0x0000019d,0x00000188, + 0x00050082,0x00000023,0x0000019e,0x0000019d,0x00000198,0x0004007c,0x00000008,0x0000019f, + 0x0000019e,0x0004003d,0x00000008,0x000001a1,0x0000017c,0x0003003e,0x000001a0,0x000001a1, + 0x0003003e,0x000001a2,0x0000019f,0x00060039,0x00000008,0x000001a3,0x0000002a,0x000001a0, + 0x000001a2,0x0003003e,0x0000019a,0x000001a3,0x000200f9,0x0000019c,0x000200f8,0x000001a4, + 0x0004003d,0x00000008,0x000001a5,0x0000017c,0x0004003d,0x00000023,0x000001a6,0x00000188, + 0x00050082,0x00000023,0x000001a7,0x00000198,0x000001a6,0x0004007c,0x00000008,0x000001a8, + 0x000001a7,0x000500c4,0x00000008,0x000001a9,0x000001a5,0x000001a8,0x0003003e,0x0000019a, + 0x000001a9,0x000200f9,0x0000019c,0x000200f8,0x0000019c,0x0004003d,0x00000008,0x000001aa, + 0x0000019a,0x0003003e,0x00000196,0x000001aa,0x0004003d,0x00000008,0x000001ab,0x00000196, + 0x000500ae,0x0000005c,0x000001ad,0x000001ab,0x000001ac,0x000300f7,0x000001af,0x00000000, + 0x000400fa,0x000001ad,0x000001ae,0x000001af,0x000200f8,0x000001ae,0x0003003e,0x00000196, + 0x000000b1,0x0004003d,0x00000023,0x000001b1,0x0000018b,0x00050080,0x00000023,0x000001b2, + 0x000001b1,0x000001b0,0x0003003e,0x0000018b,0x000001b2,0x000200f9,0x000001af,0x000200f8, + 0x000001af,0x0004003d,0x00000023,0x000001b3,0x0000018b,0x000500af,0x0000005c,0x000001b5, + 0x000001b3,0x000001b4,0x000300f7,0x000001b7,0x00000000,0x000400fa,0x000001b5,0x000001b6, + 0x000001ba,0x000200f8,0x000001b6,0x0004003d,0x00000008,0x000001b8,0x0000018f,0x000500c5, + 0x00000008,0x000001b9,0x000001b8,0x00000075,0x0003003e,0x0000018f,0x000001b9,0x000200f9, + 0x000001b7,0x000200f8,0x000001ba,0x0004003d,0x00000023,0x000001bb,0x0000018b,0x00050080, + 0x00000023,0x000001bd,0x000001bb,0x000001bc,0x0004007c,0x00000008,0x000001be,0x000001bd, + 0x000500c4,0x00000008,0x000001bf,0x000001be,0x00000097,0x0004003d,0x00000008,0x000001c0, + 0x00000196,0x00050082,0x00000008,0x000001c1,0x000001c0,0x000000b1,0x000500c5,0x00000008, + 0x000001c2,0x000001bf,0x000001c1,0x0004003d,0x00000008,0x000001c3,0x0000018f,0x000500c5, + 0x00000008,0x000001c4,0x000001c3,0x000001c2,0x0003003e,0x0000018f,0x000001c4,0x000200f9, + 0x000001b7,0x000200f8,0x000001b7,0x000200f9,0x00000195,0x000200f8,0x000001c5,0x0004003d, + 0x00000023,0x000001c7,0x00000031,0x00050080,0x00000023,0x000001c9,0x000001c7,0x000001c8, + 0x0003003e,0x000001c6,0x000001c9,0x0004003d,0x00000023,0x000001cb,0x000001c6,0x000500af, + 0x0000005c,0x000001cc,0x000001cb,0x00000107,0x000300f7,0x000001cf,0x00000000,0x000400fa, + 0x000001cc,0x000001ce,0x000001d4,0x000200f8,0x000001ce,0x0004003d,0x00000008,0x000001d0, + 0x0000017c,0x0004003d,0x00000023,0x000001d1,0x000001c6,0x0004007c,0x00000008,0x000001d2, + 0x000001d1,0x000500c4,0x00000008,0x000001d3,0x000001d0,0x000001d2,0x0003003e,0x000001cd, + 0x000001d3,0x000200f9,0x000001cf,0x000200f8,0x000001d4,0x0004003d,0x00000023,0x000001d5, + 0x000001c6,0x0004007e,0x00000023,0x000001d6,0x000001d5,0x0004007c,0x00000008,0x000001d7, + 0x000001d6,0x0004003d,0x00000008,0x000001d9,0x0000017c,0x0003003e,0x000001d8,0x000001d9, + 0x0003003e,0x000001da,0x000001d7,0x00060039,0x00000008,0x000001db,0x0000002a,0x000001d8, + 0x000001da,0x0003003e,0x000001cd,0x000001db,0x000200f9,0x000001cf,0x000200f8,0x000001cf, + 0x0004003d,0x00000008,0x000001dc,0x000001cd,0x0003003e,0x000001ca,0x000001dc,0x0004003d, + 0x00000008,0x000001dd,0x000001ca,0x0007000c,0x00000008,0x000001de,0x00000001,0x00000026, + 0x000001dd,0x000000b1,0x0004003d,0x00000008,0x000001df,0x0000018f,0x000500c5,0x00000008, + 0x000001e0,0x000001df,0x000001de,0x0003003e,0x0000018f,0x000001e0,0x000200f9,0x00000195, + 0x000200f8,0x00000195,0x0004003d,0x00000008,0x000001e2,0x0000018f,0x0003003e,0x000001e1, + 0x000001e2,0x00050039,0x00000006,0x000001e3,0x00000010,0x000001e1,0x00040073,0x00000021, + 0x000001e4,0x000001e3,0x000200fe,0x000001e4,0x00010038,0x00050036,0x00000021,0x0000003b, + 0x00000000,0x00000037,0x00030037,0x00000022,0x00000038,0x00030037,0x00000036,0x00000039, + 0x00030037,0x00000036,0x0000003a,0x000200f8,0x0000003c,0x0004003b,0x0000002e,0x000001e7, + 0x00000007,0x0004003b,0x00000022,0x000001ed,0x00000007,0x0004003b,0x0000000d,0x000001f0, + 0x00000007,0x0004003b,0x00000022,0x00000207,0x00000007,0x0004003b,0x00000022,0x0000020c, + 0x00000007,0x0004003b,0x0000002d,0x00000214,0x00000007,0x0004003b,0x0000002e,0x00000219, + 0x00000007,0x0004003b,0x00000022,0x0000021a,0x00000007,0x0004003b,0x00000022,0x0000021d, + 0x00000007,0x0004003b,0x0000000d,0x0000022d,0x00000007,0x0004003b,0x0000002e,0x00000242, + 0x00000007,0x0004003b,0x00000022,0x00000244,0x00000007,0x0004003b,0x0000002e,0x00000248, + 0x00000007,0x0004003b,0x00000022,0x0000024a,0x00000007,0x0004003b,0x00000022,0x0000024e, + 0x00000007,0x0004003b,0x0000002d,0x0000026c,0x00000007,0x0004003b,0x0000002e,0x0000026e, + 0x00000007,0x0003003e,0x000001e7,0x000001e8,0x0004003d,0x00000021,0x000001e9,0x00000038, + 0x000500b7,0x0000005c,0x000001ea,0x000001e9,0x00000177,0x000300f7,0x000001ec,0x00000000, + 0x000400fa,0x000001ea,0x000001eb,0x000001ec,0x000200f8,0x000001eb,0x0004003d,0x00000021, + 0x000001ee,0x00000038,0x0003003e,0x000001ed,0x000001ee,0x00050039,0x00000023,0x000001ef, + 0x00000026,0x000001ed,0x0003003e,0x000001e7,0x000001ef,0x000200f9,0x000001ec,0x000200f8, + 0x000001ec,0x0003003e,0x000001f0,0x0000006a,0x000200f9,0x000001f1,0x000200f8,0x000001f1, + 0x000400f6,0x000001f3,0x000001f4,0x00000000,0x000200f9,0x000001f5,0x000200f8,0x000001f5, + 0x0004003d,0x00000008,0x000001f6,0x000001f0,0x000500b0,0x0000005c,0x000001f7,0x000001f6, + 0x00000034,0x000400fa,0x000001f7,0x000001f2,0x000001f3,0x000200f8,0x000001f2,0x0004003d, + 0x00000008,0x000001f8,0x000001f0,0x00050041,0x00000022,0x000001f9,0x00000039,0x000001f8, + 0x0004003d,0x00000021,0x000001fa,0x000001f9,0x000500b7,0x0000005c,0x000001fb,0x000001fa, + 0x00000177,0x000300f7,0x000001fd,0x00000000,0x000400fa,0x000001fb,0x000001fc,0x000001fd, + 0x000200f8,0x000001fc,0x0004003d,0x00000008,0x000001fe,0x000001f0,0x00050041,0x00000022, + 0x000001ff,0x0000003a,0x000001fe,0x0004003d,0x00000021,0x00000200,0x000001ff,0x000500b7, + 0x0000005c,0x00000201,0x00000200,0x00000177,0x000200f9,0x000001fd,0x000200f8,0x000001fd, + 0x000700f5,0x0000005c,0x00000202,0x000001fb,0x000001f2,0x00000201,0x000001fc,0x000300f7, + 0x00000204,0x00000000,0x000400fa,0x00000202,0x00000203,0x00000204,0x000200f8,0x00000203, + 0x0004003d,0x00000023,0x00000205,0x000001e7,0x0004003d,0x00000008,0x00000206,0x000001f0, + 0x00050041,0x00000022,0x00000208,0x00000039,0x00000206,0x0004003d,0x00000021,0x00000209, + 0x00000208,0x0003003e,0x00000207,0x00000209,0x00050039,0x00000023,0x0000020a,0x00000026, + 0x00000207,0x0004003d,0x00000008,0x0000020b,0x000001f0,0x00050041,0x00000022,0x0000020d, + 0x0000003a,0x0000020b,0x0004003d,0x00000021,0x0000020e,0x0000020d,0x0003003e,0x0000020c, + 0x0000020e,0x00050039,0x00000023,0x0000020f,0x00000026,0x0000020c,0x00050080,0x00000023, + 0x00000210,0x0000020a,0x0000020f,0x0007000c,0x00000023,0x00000211,0x00000001,0x0000002a, + 0x00000205,0x00000210,0x0003003e,0x000001e7,0x00000211,0x000200f9,0x00000204,0x000200f8, + 0x00000204,0x000200f9,0x000001f4,0x000200f8,0x000001f4,0x0004003d,0x00000008,0x00000212, + 0x000001f0,0x00050080,0x00000008,0x00000213,0x00000212,0x000001b0,0x0003003e,0x000001f0, + 0x00000213,0x000200f9,0x000001f1,0x000200f8,0x000001f3,0x0003003e,0x00000214,0x00000173, + 0x0004003d,0x00000021,0x00000215,0x00000038,0x000500b7,0x0000005c,0x00000216,0x00000215, + 0x00000177,0x000300f7,0x00000218,0x00000000,0x000400fa,0x00000216,0x00000217,0x00000218, + 0x000200f8,0x00000217,0x0004003d,0x00000021,0x0000021b,0x00000038,0x0003003e,0x0000021a, + 0x0000021b,0x00050039,0x00000023,0x0000021c,0x00000026,0x0000021a,0x0003003e,0x00000219, + 0x0000021c,0x0004003d,0x00000021,0x0000021e,0x00000038,0x0004003d,0x00000023,0x0000021f, + 0x00000219,0x0004007e,0x00000023,0x00000220,0x0000021f,0x0007000c,0x00000021,0x00000221, + 0x00000001,0x00000035,0x0000021e,0x00000220,0x0004003d,0x00000023,0x00000222,0x00000219, + 0x0004003d,0x00000023,0x00000223,0x000001e7,0x00050082,0x00000023,0x00000224,0x00000222, + 0x00000223,0x00050080,0x00000023,0x00000226,0x00000224,0x00000225,0x0007000c,0x00000021, + 0x00000227,0x00000001,0x00000035,0x00000221,0x00000226,0x0003003e,0x0000021d,0x00000227, + 0x0004003d,0x00000021,0x00000228,0x0000021d,0x0006000c,0x00000021,0x00000229,0x00000001, + 0x00000003,0x00000228,0x0004006e,0x0000002c,0x0000022a,0x00000229,0x0004003d,0x0000002c, + 0x0000022b,0x00000214,0x00050080,0x0000002c,0x0000022c,0x0000022b,0x0000022a,0x0003003e, + 0x00000214,0x0000022c,0x000200f9,0x00000218,0x000200f8,0x00000218,0x0003003e,0x0000022d, + 0x0000006a,0x000200f9,0x0000022e,0x000200f8,0x0000022e,0x000400f6,0x00000230,0x00000231, + 0x00000000,0x000200f9,0x00000232,0x000200f8,0x00000232,0x0004003d,0x00000008,0x00000233, + 0x0000022d,0x000500b0,0x0000005c,0x00000234,0x00000233,0x00000034,0x000400fa,0x00000234, + 0x0000022f,0x00000230,0x000200f8,0x0000022f,0x0004003d,0x00000008,0x00000235,0x0000022d, + 0x00050041,0x00000022,0x00000236,0x00000039,0x00000235,0x0004003d,0x00000021,0x00000237, + 0x00000236,0x000500b7,0x0000005c,0x00000238,0x00000237,0x00000177,0x000300f7,0x0000023a, + 0x00000000,0x000400fa,0x00000238,0x00000239,0x0000023a,0x000200f8,0x00000239,0x0004003d, + 0x00000008,0x0000023b,0x0000022d,0x00050041,0x00000022,0x0000023c,0x0000003a,0x0000023b, + 0x0004003d,0x00000021,0x0000023d,0x0000023c,0x000500b7,0x0000005c,0x0000023e,0x0000023d, + 0x00000177,0x000200f9,0x0000023a,0x000200f8,0x0000023a,0x000700f5,0x0000005c,0x0000023f, + 0x00000238,0x0000022f,0x0000023e,0x00000239,0x000300f7,0x00000241,0x00000000,0x000400fa, + 0x0000023f,0x00000240,0x00000241,0x000200f8,0x00000240,0x0004003d,0x00000008,0x00000243, + 0x0000022d,0x00050041,0x00000022,0x00000245,0x00000039,0x00000243,0x0004003d,0x00000021, + 0x00000246,0x00000245,0x0003003e,0x00000244,0x00000246,0x00050039,0x00000023,0x00000247, + 0x00000026,0x00000244,0x0003003e,0x00000242,0x00000247,0x0004003d,0x00000008,0x00000249, + 0x0000022d,0x00050041,0x00000022,0x0000024b,0x0000003a,0x00000249,0x0004003d,0x00000021, + 0x0000024c,0x0000024b,0x0003003e,0x0000024a,0x0000024c,0x00050039,0x00000023,0x0000024d, + 0x00000026,0x0000024a,0x0003003e,0x00000248,0x0000024d,0x0004003d,0x00000008,0x0000024f, + 0x0000022d,0x00050041,0x00000022,0x00000250,0x00000039,0x0000024f,0x0004003d,0x00000021, + 0x00000251,0x00000250,0x0004003d,0x00000023,0x00000252,0x00000242,0x0004007e,0x00000023, + 0x00000253,0x00000252,0x0007000c,0x00000021,0x00000254,0x00000001,0x00000035,0x00000251, + 0x00000253,0x0004003d,0x00000008,0x00000255,0x0000022d,0x00050041,0x00000022,0x00000256, + 0x0000003a,0x00000255,0x0004003d,0x00000021,0x00000257,0x00000256,0x0004003d,0x00000023, + 0x00000258,0x00000248,0x0004007e,0x00000023,0x00000259,0x00000258,0x0007000c,0x00000021, + 0x0000025a,0x00000001,0x00000035,0x00000257,0x00000259,0x00050085,0x00000021,0x0000025b, + 0x00000254,0x0000025a,0x0003003e,0x0000024e,0x0000025b,0x0004003d,0x00000021,0x0000025c, + 0x0000024e,0x0004003d,0x00000023,0x0000025d,0x00000242,0x0004003d,0x00000023,0x0000025e, + 0x00000248,0x00050080,0x00000023,0x0000025f,0x0000025d,0x0000025e,0x0004003d,0x00000023, + 0x00000260,0x000001e7,0x00050082,0x00000023,0x00000261,0x0000025f,0x00000260,0x00050080, + 0x00000023,0x00000262,0x00000261,0x00000225,0x0007000c,0x00000021,0x00000263,0x00000001, + 0x00000035,0x0000025c,0x00000262,0x0006000c,0x00000021,0x00000264,0x00000001,0x00000003, + 0x00000263,0x0004006e,0x0000002c,0x00000265,0x00000264,0x0004003d,0x0000002c,0x00000266, + 0x00000214,0x00050080,0x0000002c,0x00000267,0x00000266,0x00000265,0x0003003e,0x00000214, + 0x00000267,0x000200f9,0x00000241,0x000200f8,0x00000241,0x000200f9,0x00000231,0x000200f8, + 0x00000231,0x0004003d,0x00000008,0x00000268,0x0000022d,0x00050080,0x00000008,0x00000269, + 0x00000268,0x000001b0,0x0003003e,0x0000022d,0x00000269,0x000200f9,0x0000022e,0x000200f8, + 0x00000230,0x0004003d,0x00000023,0x0000026a,0x000001e7,0x00050082,0x00000023,0x0000026b, + 0x0000026a,0x00000225,0x0004003d,0x0000002c,0x0000026d,0x00000214,0x0003003e,0x0000026c, + 0x0000026d,0x0003003e,0x0000026e,0x0000026b,0x00060039,0x00000021,0x0000026f,0x00000032, + 0x0000026c,0x0000026e,0x000200fe,0x0000026f,0x00010038, +}; +inline constexpr uint32_t k_e4m3_k32_f32__window_attend[] = { + 0x07230203,0x00010600,0x0008000b,0x00000511,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x00000027,0x00020011,0x0000003d,0x00020011, + 0x00001074,0x00020011,0x00001075,0x00020011,0x00001151,0x00020011,0x00001160,0x00020011, + 0x000014e1,0x00020011,0x00001786,0x0005000a,0x5f565053,0x5f545845,0x616f6c66,0x00003874, + 0x0008000a,0x5f565053,0x5f52484b,0x706f6f63,0x74617265,0x5f657669,0x7274616d,0x00007869, + 0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000, + 0x00000003,0x0013000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x0000020e,0x000002a1, + 0x000002a6,0x000002b3,0x00000314,0x00000329,0x00000374,0x0000037a,0x00000387,0x0000039e, + 0x00000400,0x0000043d,0x000004ad,0x00000503,0x00060010,0x00000004,0x00000011,0x00000080, + 0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc,0x00090004,0x455f4c47,0x635f5458, + 0x72746e6f,0x665f6c6f,0x5f776f6c,0x72747461,0x74756269,0x00007365,0x00060004,0x455f4c47, + 0x665f5458,0x74616f6c,0x6d34655f,0x00000033,0x00080004,0x455f4c47,0x735f5458,0x65646168, + 0x36315f72,0x5f746962,0x726f7473,0x00656761,0x00080004,0x455f4c47,0x735f5458,0x65646168, + 0x62385f72,0x735f7469,0x61726f74,0x00006567,0x000b0004,0x455f4c47,0x735f5458,0x65646168, + 0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004, + 0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365, + 0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572, + 0x00657669,0x00080004,0x4b5f4c47,0x635f5248,0x65706f6f,0x69746172,0x6d5f6576,0x69727461, + 0x00000078,0x00090004,0x4b5f4c47,0x6d5f5248,0x726f6d65,0x63735f79,0x5f65706f,0x616d6573, + 0x6369746e,0x00000073,0x00090004,0x4b5f4c47,0x735f5248,0x65646168,0x75735f72,0x6f726762, + 0x625f7075,0x63697361,0x00000000,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005, + 0x0000000a,0x6e756f72,0x36314664,0x3b316628,0x00000000,0x00040005,0x00000009,0x756c6176, + 0x00000065,0x00060005,0x00000011,0x42363166,0x28737469,0x31363166,0x0000003b,0x00040005, + 0x00000010,0x756c6176,0x00000065,0x00060005,0x00000016,0x46363166,0x426d6f72,0x28737469, + 0x003b3175,0x00040005,0x00000015,0x73746962,0x00000000,0x00060005,0x0000001b,0x66696873, + 0x656e5274,0x3b317528,0x003b3175,0x00040005,0x00000019,0x756c6176,0x00000065,0x00040005, + 0x0000001a,0x66696873,0x00000074,0x00080005,0x0000001f,0x336d3465,0x65646f43,0x6d6f7246, + 0x42363146,0x28737469,0x003b3175,0x00050005,0x0000001e,0x666c6168,0x73746942,0x00000000, + 0x00060005,0x00000024,0x7246706f,0x6f436d6f,0x75286564,0x00003b31,0x00040005,0x00000023, + 0x65646f63,0x00000000,0x00080005,0x00000028,0x666c6168,0x7064694d,0x746e696f,0x766f6241, + 0x31662865,0x003b3136,0x00030005,0x00000027,0x00000068,0x00080005,0x0000002b,0x666c6168, + 0x7064694d,0x746e696f,0x6f6c6542,0x31662877,0x003b3136,0x00030005,0x0000002a,0x00000068, + 0x00060005,0x0000002f,0x666c6168,0x766f6241,0x31662865,0x003b3136,0x00030005,0x0000002e, + 0x00000068,0x00060005,0x00000032,0x666c6168,0x6f6c6542,0x31662877,0x003b3136,0x00030005, + 0x00000031,0x00000068,0x00080005,0x00000035,0x69636572,0x636f7270,0x61486c61,0x6628666c, + 0x3b313631,0x00000000,0x00030005,0x00000034,0x00000078,0x00080005,0x00000038,0x65766e69, + 0x54657372,0x64656c69,0x656b6f54,0x3175286e,0x0000003b,0x00040005,0x00000037,0x656b6f74, + 0x0000006e,0x00060005,0x0000003b,0x57707865,0x68676965,0x31662874,0x003b3136,0x00040005, + 0x0000003a,0x726f6373,0x00000065,0x00080005,0x00000041,0x74666f73,0x5078616d,0x28726961, + 0x753b3175,0x31753b31,0x0000003b,0x00030005,0x0000003e,0x00776f72,0x00040005,0x0000003f, + 0x72696170,0x00000000,0x00040005,0x00000040,0x69726170,0x00007974,0x00060005,0x00000044, + 0x74666f73,0x5378616d,0x75286d75,0x00003b31,0x00030005,0x00000043,0x00776f72,0x00040005, + 0x00000046,0x73746962,0x00000000,0x00040005,0x00000049,0x6e676973,0x00000000,0x00050005, + 0x0000004d,0x6e67616d,0x64757469,0x00000065,0x00040005,0x00000067,0x6c616373,0x00006465, + 0x00030005,0x00000078,0x0062736c,0x00040005,0x0000007e,0x6e756f72,0x00646564,0x00050005, + 0x00000099,0x746f7571,0x746e6569,0x00000000,0x00060005,0x0000009d,0x616d6572,0x65646e69, + 0x73614d72,0x0000006b,0x00050005,0x000000a1,0x616d6572,0x65646e69,0x00000072,0x00040005, + 0x000000a5,0x666c6168,0x00796177,0x00040005,0x000000c0,0x614e7369,0x0000006e,0x00050005, + 0x000000dc,0x6167656e,0x65766974,0x00000000,0x00050005,0x000000e2,0x6f707865,0x746e656e, + 0x00000000,0x00050005,0x000000e8,0x746e616d,0x61737369,0x00000000,0x00040005,0x000000ef, + 0x65646f63,0x00000000,0x00050005,0x000000f6,0x6e676973,0x63696669,0x00646e61,0x00040005, + 0x00000102,0x66696873,0x00000074,0x00040005,0x0000010e,0x61726170,0x0000006d,0x00040005, + 0x00000110,0x61726170,0x0000006d,0x00050005,0x00000115,0x78453465,0x656e6f70,0x0000746e, + 0x00050005,0x00000118,0x614d3465,0x7369746e,0x00006173,0x00040005,0x0000011a,0x61726170, + 0x0000006d,0x00040005,0x0000011c,0x61726170,0x0000006d,0x00040005,0x00000143,0x73746962, + 0x00000000,0x00040005,0x00000144,0x61726170,0x0000006d,0x00040005,0x00000154,0x61726170, + 0x0000006d,0x00040005,0x0000015e,0x61726170,0x0000006d,0x00040005,0x00000162,0x61726170, + 0x0000006d,0x00040005,0x00000169,0x61726170,0x0000006d,0x00040005,0x0000016d,0x61726170, + 0x0000006d,0x00040005,0x00000171,0x61726170,0x0000006d,0x00040005,0x00000175,0x61726170, + 0x0000006d,0x00030005,0x00000179,0x00006678,0x00030005,0x0000018d,0x00000068,0x00040005, + 0x00000190,0x61726170,0x0000006d,0x00030005,0x0000019f,0x00000069,0x00030005,0x000001a9, + 0x00007075,0x00040005,0x000001aa,0x61726170,0x0000006d,0x00040005,0x000001b3,0x61726170, + 0x0000006d,0x00040005,0x000001b6,0x6e776f64,0x00000000,0x00040005,0x000001b7,0x61726170, + 0x0000006d,0x00040005,0x000001c3,0x61726170,0x0000006d,0x00040005,0x000001cc,0x656c6974, + 0x00000000,0x00040005,0x000001d0,0x68746977,0x00006e69,0x00030005,0x000001d3,0x00000078, + 0x00030005,0x000001da,0x00000079,0x00050005,0x000001e8,0x69666661,0x3233656e,0x00000000, + 0x00040005,0x000001ee,0x69666661,0x0000656e,0x00040005,0x000001ef,0x61726170,0x0000006d, + 0x00040005,0x000001f6,0x73746962,0x00000000,0x00040005,0x000001f7,0x61726170,0x0000006d, + 0x00060005,0x000001fa,0x6f707865,0x746e656e,0x426c6169,0x00737469,0x00040005,0x00000200, + 0x61726170,0x0000006d,0x00030005,0x00000205,0x0079656b,0x00050005,0x0000020a,0x636f6c62, + 0x3130736b,0x00000000,0x00040005,0x0000020e,0x726f6373,0x00007365,0x00050005,0x0000021f, + 0x636f6c62,0x3332736b,0x00000000,0x00050005,0x00000230,0x636f6c62,0x3534736b,0x00000000, + 0x00050005,0x00000242,0x636f6c62,0x3736736b,0x00000000,0x00030005,0x00000254,0x00000061, + 0x00030005,0x00000258,0x00000062,0x00030005,0x00000261,0x00003065,0x00040005,0x00000262, + 0x61726170,0x0000006d,0x00040005,0x00000264,0x61726170,0x0000006d,0x00040005,0x00000265, + 0x61726170,0x0000006d,0x00040005,0x00000267,0x61726170,0x0000006d,0x00040005,0x00000269, + 0x61726170,0x0000006d,0x00040005,0x0000026a,0x61726170,0x0000006d,0x00030005,0x0000026d, + 0x00003165,0x00040005,0x0000026f,0x61726170,0x0000006d,0x00040005,0x00000271,0x61726170, + 0x0000006d,0x00040005,0x00000272,0x61726170,0x0000006d,0x00040005,0x00000275,0x6e657665, + 0x00000000,0x00040005,0x00000277,0x61726170,0x0000006d,0x00040005,0x00000279,0x61726170, + 0x0000006d,0x00040005,0x0000027a,0x61726170,0x0000006d,0x00030005,0x0000027d,0x0000306f, + 0x00040005,0x0000027e,0x61726170,0x0000006d,0x00040005,0x00000280,0x61726170,0x0000006d, + 0x00040005,0x00000281,0x61726170,0x0000006d,0x00040005,0x00000283,0x61726170,0x0000006d, + 0x00040005,0x00000285,0x61726170,0x0000006d,0x00040005,0x00000286,0x61726170,0x0000006d, + 0x00030005,0x00000289,0x0000316f,0x00040005,0x0000028b,0x61726170,0x0000006d,0x00040005, + 0x0000028d,0x61726170,0x0000006d,0x00040005,0x0000028e,0x61726170,0x0000006d,0x00030005, + 0x00000291,0x0064646f,0x00040005,0x00000293,0x61726170,0x0000006d,0x00040005,0x00000295, + 0x61726170,0x0000006d,0x00040005,0x00000296,0x61726170,0x0000006d,0x00040005,0x0000029e, + 0x65726874,0x00006461,0x00080005,0x000002a1,0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163, + 0x44496e6f,0x00000000,0x00040005,0x000002a5,0x64616568,0x00000000,0x00060005,0x000002a6, + 0x575f6c67,0x476b726f,0x70756f72,0x00004449,0x00040005,0x000002a9,0x646e6977,0x0000776f, + 0x00040005,0x000002b1,0x68737550,0x00000000,0x00050006,0x000002b1,0x00000000,0x74646977, + 0x00000068,0x00050006,0x000002b1,0x00000001,0x67696568,0x00007468,0x00060006,0x000002b1, + 0x00000002,0x6e616863,0x736c656e,0x00000000,0x00050006,0x000002b1,0x00000003,0x64616568, + 0x00000073,0x00050006,0x000002b1,0x00000004,0x66696873,0x00005874,0x00050006,0x000002b1, + 0x00000005,0x66696873,0x00005974,0x00060006,0x000002b1,0x00000006,0x646e6977,0x5873776f, + 0x00000000,0x00060006,0x000002b1,0x00000007,0x646e6977,0x6f43776f,0x00746e75,0x00030005, + 0x000002b3,0x00006370,0x00040005,0x000002bc,0x646e6977,0x0058776f,0x00040005,0x000002c9, + 0x646e6977,0x0059776f,0x00040005,0x000002d5,0x69727473,0x00336564,0x00050005,0x000002d9, + 0x64616568,0x65736142,0x00000000,0x00030005,0x000002dd,0x00000069,0x00040005,0x000002e7, + 0x656b6f74,0x0000006e,0x00050005,0x000002ea,0x706d6f63,0x6e656e6f,0x00000074,0x00030005, + 0x000002ed,0x00007871,0x00030005,0x000002f3,0x00007971,0x00030005,0x000002f9,0x00000071, + 0x00050005,0x00000312,0x6d726f4e,0x7a696c61,0x00006465,0x00040006,0x00000312,0x00000000, + 0x00766b71,0x00030005,0x00000314,0x00000000,0x00030005,0x00000329,0x00007371,0x00040005, + 0x0000032b,0x61726170,0x0000006d,0x00050005,0x00000330,0x4c79656b,0x6c61636f,0x00000000, + 0x00040005,0x00000331,0x61726170,0x0000006d,0x00030005,0x00000334,0x0000786b,0x00030005, + 0x0000033a,0x0000796b,0x00030005,0x00000340,0x0000006b,0x00030005,0x00000341,0x00000076, + 0x00040005,0x00000359,0x4279656b,0x00657361,0x00030005,0x00000374,0x0000736b,0x00040005, + 0x00000376,0x61726170,0x0000006d,0x00030005,0x0000037a,0x00007376,0x00040005,0x0000037c, + 0x61726170,0x0000006d,0x00050005,0x00000383,0x6f697270,0x73614272,0x00000065,0x00030005, + 0x00000386,0x00000074,0x00060005,0x00000387,0x535f6c67,0x72676275,0x4970756f,0x00000044, + 0x00030005,0x00000390,0x00003071,0x00030005,0x00000394,0x0000306b,0x00030005,0x0000039a, + 0x00005f68,0x00040005,0x0000039c,0x6f697250,0x00000072,0x00050006,0x0000039c,0x00000000, + 0x6f697270,0x00000072,0x00030005,0x0000039e,0x00000000,0x00030005,0x000003b0,0x00000063, + 0x00030005,0x000003b3,0x00005f73,0x00030005,0x000003be,0x00005f61,0x00030005,0x000003cd, + 0x00005f62,0x00030005,0x000003e0,0x00005f72,0x00040005,0x000003ec,0x61726170,0x0000006d, + 0x00030005,0x000003f3,0x00005f68,0x00060005,0x00000400,0x4e5f6c67,0x75536d75,0x6f726762, + 0x00737075,0x00030005,0x00000404,0x00000069,0x00040005,0x0000040f,0x61726170,0x0000006d, + 0x00030005,0x0000041a,0x00776f72,0x00040005,0x0000041c,0x61746f74,0x0000006c,0x00040005, + 0x0000041d,0x61726170,0x0000006d,0x00050005,0x00000420,0x69636572,0x636f7270,0x00006c61, + 0x00040005,0x00000421,0x61726170,0x0000006d,0x00030005,0x00000424,0x0079656b,0x00050005, + 0x0000042c,0x6d726f6e,0x7a696c61,0x00006465,0x00040005,0x00000435,0x65646f63,0x00000000, + 0x00040005,0x00000436,0x61726170,0x0000006d,0x00040005,0x00000439,0x61726170,0x0000006d, + 0x00040005,0x0000043d,0x67696577,0x00737468,0x00030005,0x00000447,0x00000074,0x00030005, + 0x00000450,0x00003071,0x00030005,0x00000454,0x00003063,0x00030005,0x00000458,0x00000063, + 0x00030005,0x0000045a,0x0000626b,0x00030005,0x00000462,0x00005f73,0x00030005,0x0000046a, + 0x00005f61,0x00030005,0x0000047b,0x00005f62,0x00030005,0x00000492,0x00005f72,0x00040005, + 0x0000049e,0x61726170,0x0000006d,0x00030005,0x000004a7,0x00005f68,0x00040005,0x000004ad, + 0x7074756f,0x00737475,0x00030005,0x000004ba,0x00000069,0x00040005,0x000004c3,0x656b6f74, + 0x0000006e,0x00050005,0x000004c6,0x706d6f63,0x6e656e6f,0x00000074,0x00030005,0x000004c9, + 0x00007871,0x00030005,0x000004cf,0x00007971,0x00040005,0x000004ef,0x65646e69,0x00000078, + 0x00050005,0x00000501,0x65747441,0x6465646e,0x00000000,0x00060006,0x00000501,0x00000000, + 0x65747461,0x6465646e,0x00000000,0x00030005,0x00000503,0x00000000,0x00040005,0x00000506, + 0x61726170,0x0000006d,0x00040005,0x0000050a,0x61726170,0x0000006d,0x00030047,0x0000018f, + 0x0000002a,0x00030047,0x000001ae,0x0000002a,0x00030047,0x000001bb,0x0000002a,0x00030047, + 0x0000021e,0x0000002a,0x00030047,0x0000022f,0x0000002a,0x00030047,0x00000241,0x0000002a, + 0x00030047,0x00000253,0x0000002a,0x00030047,0x00000257,0x0000002a,0x00030047,0x0000025b, + 0x0000002a,0x00030047,0x0000026c,0x0000002a,0x00030047,0x00000274,0x0000002a,0x00030047, + 0x0000027c,0x0000002a,0x00030047,0x00000288,0x0000002a,0x00030047,0x00000290,0x0000002a, + 0x00030047,0x00000298,0x0000002a,0x00040047,0x000002a1,0x0000000b,0x0000001b,0x00040047, + 0x000002a6,0x0000000b,0x0000001a,0x00030047,0x000002b1,0x00000002,0x00050048,0x000002b1, + 0x00000000,0x00000023,0x00000000,0x00050048,0x000002b1,0x00000001,0x00000023,0x00000004, + 0x00050048,0x000002b1,0x00000002,0x00000023,0x00000008,0x00050048,0x000002b1,0x00000003, + 0x00000023,0x0000000c,0x00050048,0x000002b1,0x00000004,0x00000023,0x00000010,0x00050048, + 0x000002b1,0x00000005,0x00000023,0x00000014,0x00050048,0x000002b1,0x00000006,0x00000023, + 0x00000018,0x00050048,0x000002b1,0x00000007,0x00000023,0x0000001c,0x00040047,0x00000311, + 0x00000006,0x00000001,0x00030047,0x00000312,0x00000002,0x00040048,0x00000312,0x00000000, + 0x00000018,0x00050048,0x00000312,0x00000000,0x00000023,0x00000000,0x00030047,0x00000314, + 0x00000018,0x00040047,0x00000314,0x00000021,0x00000000,0x00040047,0x00000314,0x00000022, + 0x00000000,0x00040047,0x00000387,0x0000000b,0x00000028,0x00040047,0x0000039b,0x00000006, + 0x00000002,0x00030047,0x0000039c,0x00000002,0x00040048,0x0000039c,0x00000000,0x00000018, + 0x00050048,0x0000039c,0x00000000,0x00000023,0x00000000,0x00030047,0x0000039e,0x00000018, + 0x00040047,0x0000039e,0x00000021,0x00000001,0x00040047,0x0000039e,0x00000022,0x00000000, + 0x00040047,0x00000400,0x0000000b,0x00000026,0x00030047,0x00000434,0x0000002a,0x00040047, + 0x00000500,0x00000006,0x00000001,0x00030047,0x00000501,0x00000002,0x00040048,0x00000501, + 0x00000000,0x00000019,0x00050048,0x00000501,0x00000000,0x00000023,0x00000000,0x00030047, + 0x00000503,0x00000019,0x00040047,0x00000503,0x00000021,0x00000005,0x00040047,0x00000503, + 0x00000022,0x00000000,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016, + 0x00000006,0x00000020,0x00040020,0x00000007,0x00000007,0x00000006,0x00040021,0x00000008, + 0x00000006,0x00000007,0x00030016,0x0000000c,0x00000010,0x00040020,0x0000000d,0x00000007, + 0x0000000c,0x00040015,0x0000000e,0x00000020,0x00000000,0x00040021,0x0000000f,0x0000000e, + 0x0000000d,0x00040020,0x00000013,0x00000007,0x0000000e,0x00040021,0x00000014,0x0000000c, + 0x00000013,0x00050021,0x00000018,0x0000000e,0x00000013,0x00000013,0x00040021,0x0000001d, + 0x0000000e,0x00000013,0x00040015,0x00000021,0x00000008,0x00000000,0x00040021,0x00000022, + 0x00000021,0x00000013,0x00040021,0x00000026,0x00000006,0x0000000d,0x00040021,0x0000002d, + 0x0000000c,0x0000000d,0x00060021,0x0000003d,0x0000000c,0x00000013,0x00000013,0x00000013, + 0x0004002b,0x0000000e,0x0000004b,0x80000000,0x0004002b,0x0000000e,0x0000004f,0x7fffffff, + 0x0004002b,0x0000000e,0x00000052,0x7f800000,0x00020014,0x00000053,0x0004002b,0x0000000e, + 0x0000005a,0x477ff000,0x0004002b,0x0000000e,0x00000063,0x38800000,0x0004002b,0x00000006, + 0x0000006a,0x4b800000,0x0004002b,0x00000006,0x00000071,0x33800000,0x0004002b,0x0000000e, + 0x0000007a,0x0000000d,0x0004002b,0x0000000e,0x0000007c,0x00000001,0x0004002b,0x0000000e, + 0x00000080,0x00000fff,0x0004002b,0x0000000e,0x00000084,0xffffe000,0x00040015,0x0000008d, + 0x00000010,0x00000000,0x0004002b,0x0000000e,0x00000093,0x0000ffff,0x0004002b,0x0000000e, + 0x000000b7,0x00000000,0x00040020,0x000000bf,0x00000007,0x00000053,0x0004002b,0x0000000e, + 0x000000c2,0x00007c00,0x0004002b,0x0000000e,0x000000c8,0x000003ff,0x0004002b,0x0000000e, + 0x000000d1,0x00007fff,0x0004002b,0x0000000e,0x000000d7,0x00000008,0x0004002b,0x0000000e, + 0x000000d9,0x00000080,0x0004002b,0x0000000e,0x000000de,0x00008000,0x0004002b,0x0000000e, + 0x000000e4,0x0000000a,0x0004002b,0x0000000e,0x000000e6,0x0000001f,0x0004002b,0x0000000e, + 0x000000f0,0x0000007e,0x0004002b,0x0000000e,0x000000fe,0x00000400,0x0004002b,0x0000000e, + 0x00000108,0x0000000f,0x0004002b,0x0000000e,0x0000010a,0x00000010,0x0004002b,0x0000000e, + 0x00000119,0x00000007,0x0004002b,0x0000000e,0x0000012c,0x00000006,0x0004002b,0x0000000e, + 0x00000135,0x00000003,0x0004002b,0x0000000e,0x00000148,0x00007bff,0x0004002b,0x00000006, + 0x0000014d,0x477ff000,0x0004002b,0x00000006,0x0000014f,0x3f000000,0x0004002b,0x00000006, + 0x0000017d,0x00000000,0x0004002b,0x00000006,0x00000188,0x3f800000,0x0004002b,0x0000000c, + 0x00000196,0x00000000,0x00040015,0x0000019d,0x00000020,0x00000001,0x00040020,0x0000019e, + 0x00000007,0x0000019d,0x0004002b,0x0000019d,0x000001a0,0x00000000,0x0004002b,0x0000019d, + 0x000001a7,0x00000002,0x0004002b,0x0000019d,0x000001c7,0x00000001,0x0004002b,0x0000000e, + 0x000001ce,0x00000004,0x0004002b,0x0000000e,0x000001df,0x00000002,0x0004002b,0x00000006, + 0x000001eb,0x3d380000,0x0004002b,0x00000006,0x000001ec,0x3fa68000,0x0004002b,0x0000000c, + 0x000001f3,0x00003c20,0x0004002b,0x0000000c,0x000001f4,0x00003e47,0x0004002b,0x0000000e, + 0x000001fc,0x00000005,0x0004002b,0x0000000e,0x0000020b,0x00001000,0x0004001c,0x0000020c, + 0x0000000c,0x0000020b,0x00040020,0x0000020d,0x00000004,0x0000020c,0x0004003b,0x0000020d, + 0x0000020e,0x00000004,0x0004002b,0x0000000e,0x00000210,0x00000040,0x00040020,0x00000214, + 0x00000004,0x0000000c,0x0004002b,0x0000000e,0x0000022b,0x00000018,0x0004002b,0x0000000e, + 0x00000235,0x00000020,0x0004002b,0x0000000e,0x0000023d,0x00000028,0x0004002b,0x0000000e, + 0x00000247,0x00000030,0x0004002b,0x0000000e,0x0000024f,0x00000038,0x00040017,0x0000029f, + 0x0000000e,0x00000003,0x00040020,0x000002a0,0x00000001,0x0000029f,0x0004003b,0x000002a0, + 0x000002a1,0x00000001,0x00040020,0x000002a2,0x00000001,0x0000000e,0x0004003b,0x000002a0, + 0x000002a6,0x00000001,0x000a001e,0x000002b1,0x0000000e,0x0000000e,0x0000000e,0x0000000e, + 0x0000000e,0x0000000e,0x0000000e,0x0000000e,0x00040020,0x000002b2,0x00000009,0x000002b1, + 0x0004003b,0x000002b2,0x000002b3,0x00000009,0x0004002b,0x0000019d,0x000002b4,0x00000007, + 0x00040020,0x000002b5,0x00000009,0x0000000e,0x0004002b,0x0000019d,0x000002be,0x00000006, + 0x0004002b,0x0000019d,0x000002c4,0x00000004,0x0004002b,0x0000019d,0x000002d0,0x00000005, + 0x0004002b,0x0000000e,0x000002db,0x00000060,0x0004002b,0x0000000e,0x000002e5,0x00000800, + 0x0003001d,0x00000311,0x00000021,0x0003001e,0x00000312,0x00000311,0x00040020,0x00000313, + 0x0000000c,0x00000312,0x0004003b,0x00000313,0x00000314,0x0000000c,0x00040020,0x00000323, + 0x0000000c,0x00000021,0x0004001c,0x00000327,0x00000021,0x000002e5,0x00040020,0x00000328, + 0x00000004,0x00000327,0x0004003b,0x00000328,0x00000329,0x00000004,0x00040020,0x0000032e, + 0x00000004,0x00000021,0x0004003b,0x00000328,0x00000374,0x00000004,0x0004003b,0x00000328, + 0x0000037a,0x00000004,0x0004002b,0x0000000e,0x00000382,0x00000108,0x0004003b,0x000002a2, + 0x00000387,0x00000001,0x00071168,0x00000398,0x0000000c,0x00000135,0x0000010a,0x0000010a, + 0x000001df,0x00040020,0x00000399,0x00000007,0x00000398,0x0003001d,0x0000039b,0x0000000c, + 0x0003001e,0x0000039c,0x0000039b,0x00040020,0x0000039d,0x0000000c,0x0000039c,0x0004003b, + 0x0000039d,0x0000039e,0x0000000c,0x00040020,0x000003a5,0x0000000c,0x0000000c,0x00071168, + 0x000003ae,0x00000006,0x00000135,0x0000010a,0x0000010a,0x000001df,0x00040020,0x000003af, + 0x00000007,0x000003ae,0x00040016,0x000003bb,0x00000008,0x00001076,0x00071168,0x000003bc, + 0x000003bb,0x00000135,0x0000010a,0x00000235,0x000000b7,0x00040020,0x000003bd,0x00000007, + 0x000003bc,0x00071168,0x000003cb,0x000003bb,0x00000135,0x00000235,0x0000010a,0x0000007c, + 0x00040020,0x000003cc,0x00000007,0x000003cb,0x0004003b,0x000002a2,0x00000400,0x00000001, + 0x0004001c,0x0000043b,0x00000021,0x0000020b,0x00040020,0x0000043c,0x00000004,0x0000043b, + 0x0004003b,0x0000043c,0x0000043d,0x00000004,0x0004002c,0x000003ae,0x00000459,0x0000017d, + 0x0004001c,0x000004ab,0x0000000c,0x000002e5,0x00040020,0x000004ac,0x00000004,0x000004ab, + 0x0004003b,0x000004ac,0x000004ad,0x00000004,0x0003001d,0x00000500,0x00000021,0x0003001e, + 0x00000501,0x00000500,0x00040020,0x00000502,0x0000000c,0x00000501,0x0004003b,0x00000502, + 0x00000503,0x0000000c,0x0006002c,0x0000029f,0x00000510,0x000000d9,0x0000007c,0x0000007c, + 0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b, + 0x00000013,0x0000029e,0x00000007,0x0004003b,0x00000013,0x000002a5,0x00000007,0x0004003b, + 0x00000013,0x000002a9,0x00000007,0x0004003b,0x0000019e,0x000002bc,0x00000007,0x0004003b, + 0x0000019e,0x000002c9,0x00000007,0x0004003b,0x00000013,0x000002d5,0x00000007,0x0004003b, + 0x00000013,0x000002d9,0x00000007,0x0004003b,0x00000013,0x000002dd,0x00000007,0x0004003b, + 0x00000013,0x000002e7,0x00000007,0x0004003b,0x00000013,0x000002ea,0x00000007,0x0004003b, + 0x0000019e,0x000002ed,0x00000007,0x0004003b,0x0000019e,0x000002f3,0x00000007,0x0004003b, + 0x00000013,0x000002f9,0x00000007,0x0004003b,0x00000013,0x0000032b,0x00000007,0x0004003b, + 0x00000013,0x00000330,0x00000007,0x0004003b,0x00000013,0x00000331,0x00000007,0x0004003b, + 0x0000019e,0x00000334,0x00000007,0x0004003b,0x0000019e,0x0000033a,0x00000007,0x0004003b, + 0x00000013,0x00000340,0x00000007,0x0004003b,0x00000013,0x00000341,0x00000007,0x0004003b, + 0x00000013,0x00000359,0x00000007,0x0004003b,0x00000013,0x00000376,0x00000007,0x0004003b, + 0x00000013,0x0000037c,0x00000007,0x0004003b,0x00000013,0x00000383,0x00000007,0x0004003b, + 0x00000013,0x00000386,0x00000007,0x0004003b,0x00000013,0x00000390,0x00000007,0x0004003b, + 0x00000013,0x00000394,0x00000007,0x0004003b,0x00000399,0x0000039a,0x00000007,0x0004003b, + 0x000003af,0x000003b0,0x00000007,0x0004003b,0x00000013,0x000003b3,0x00000007,0x0004003b, + 0x000003bd,0x000003be,0x00000007,0x0004003b,0x000003cc,0x000003cd,0x00000007,0x0004003b, + 0x0000019e,0x000003e0,0x00000007,0x0004003b,0x00000007,0x000003ec,0x00000007,0x0004003b, + 0x00000399,0x000003f3,0x00000007,0x0004003b,0x00000013,0x00000404,0x00000007,0x0004003b, + 0x0000000d,0x0000040f,0x00000007,0x0004003b,0x00000013,0x0000041a,0x00000007,0x0004003b, + 0x0000000d,0x0000041c,0x00000007,0x0004003b,0x00000013,0x0000041d,0x00000007,0x0004003b, + 0x0000000d,0x00000420,0x00000007,0x0004003b,0x0000000d,0x00000421,0x00000007,0x0004003b, + 0x00000013,0x00000424,0x00000007,0x0004003b,0x0000000d,0x0000042c,0x00000007,0x0004003b, + 0x00000013,0x00000435,0x00000007,0x0004003b,0x0000000d,0x00000436,0x00000007,0x0004003b, + 0x00000013,0x00000439,0x00000007,0x0004003b,0x00000013,0x00000447,0x00000007,0x0004003b, + 0x00000013,0x00000450,0x00000007,0x0004003b,0x00000013,0x00000454,0x00000007,0x0004003b, + 0x000003af,0x00000458,0x00000007,0x0004003b,0x00000013,0x0000045a,0x00000007,0x0004003b, + 0x00000013,0x00000462,0x00000007,0x0004003b,0x000003bd,0x0000046a,0x00000007,0x0004003b, + 0x000003cc,0x0000047b,0x00000007,0x0004003b,0x0000019e,0x00000492,0x00000007,0x0004003b, + 0x00000007,0x0000049e,0x00000007,0x0004003b,0x00000399,0x000004a7,0x00000007,0x0004003b, + 0x00000013,0x000004ba,0x00000007,0x0004003b,0x00000013,0x000004c3,0x00000007,0x0004003b, + 0x00000013,0x000004c6,0x00000007,0x0004003b,0x0000019e,0x000004c9,0x00000007,0x0004003b, + 0x0000019e,0x000004cf,0x00000007,0x0004003b,0x00000013,0x000004ef,0x00000007,0x0004003b, + 0x0000000d,0x00000506,0x00000007,0x0004003b,0x00000013,0x0000050a,0x00000007,0x00050041, + 0x000002a2,0x000002a3,0x000002a1,0x000000b7,0x0004003d,0x0000000e,0x000002a4,0x000002a3, + 0x0003003e,0x0000029e,0x000002a4,0x00050041,0x000002a2,0x000002a7,0x000002a6,0x000000b7, + 0x0004003d,0x0000000e,0x000002a8,0x000002a7,0x0003003e,0x000002a5,0x000002a8,0x00050041, + 0x000002a2,0x000002aa,0x000002a6,0x0000007c,0x0004003d,0x0000000e,0x000002ab,0x000002aa, + 0x00050041,0x000002a2,0x000002ac,0x000002a6,0x000001df,0x0004003d,0x0000000e,0x000002ad, + 0x000002ac,0x00050084,0x0000000e,0x000002ae,0x000002ad,0x00000093,0x00050080,0x0000000e, + 0x000002af,0x000002ab,0x000002ae,0x0003003e,0x000002a9,0x000002af,0x0004003d,0x0000000e, + 0x000002b0,0x000002a9,0x00050041,0x000002b5,0x000002b6,0x000002b3,0x000002b4,0x0004003d, + 0x0000000e,0x000002b7,0x000002b6,0x000500ae,0x00000053,0x000002b8,0x000002b0,0x000002b7, + 0x000300f7,0x000002ba,0x00000000,0x000400fa,0x000002b8,0x000002b9,0x000002ba,0x000200f8, + 0x000002b9,0x000100fd,0x000200f8,0x000002ba,0x0004003d,0x0000000e,0x000002bd,0x000002a9, + 0x00050041,0x000002b5,0x000002bf,0x000002b3,0x000002be,0x0004003d,0x0000000e,0x000002c0, + 0x000002bf,0x00050089,0x0000000e,0x000002c1,0x000002bd,0x000002c0,0x00050084,0x0000000e, + 0x000002c2,0x000002c1,0x000000d7,0x0004007c,0x0000019d,0x000002c3,0x000002c2,0x00050041, + 0x000002b5,0x000002c5,0x000002b3,0x000002c4,0x0004003d,0x0000000e,0x000002c6,0x000002c5, + 0x0004007c,0x0000019d,0x000002c7,0x000002c6,0x00050082,0x0000019d,0x000002c8,0x000002c3, + 0x000002c7,0x0003003e,0x000002bc,0x000002c8,0x0004003d,0x0000000e,0x000002ca,0x000002a9, + 0x00050041,0x000002b5,0x000002cb,0x000002b3,0x000002be,0x0004003d,0x0000000e,0x000002cc, + 0x000002cb,0x00050086,0x0000000e,0x000002cd,0x000002ca,0x000002cc,0x00050084,0x0000000e, + 0x000002ce,0x000002cd,0x000000d7,0x0004007c,0x0000019d,0x000002cf,0x000002ce,0x00050041, + 0x000002b5,0x000002d1,0x000002b3,0x000002d0,0x0004003d,0x0000000e,0x000002d2,0x000002d1, + 0x0004007c,0x0000019d,0x000002d3,0x000002d2,0x00050082,0x0000019d,0x000002d4,0x000002cf, + 0x000002d3,0x0003003e,0x000002c9,0x000002d4,0x00050041,0x000002b5,0x000002d6,0x000002b3, + 0x000001a7,0x0004003d,0x0000000e,0x000002d7,0x000002d6,0x00050084,0x0000000e,0x000002d8, + 0x000002d7,0x00000135,0x0003003e,0x000002d5,0x000002d8,0x0004003d,0x0000000e,0x000002da, + 0x000002a5,0x00050084,0x0000000e,0x000002dc,0x000002da,0x000002db,0x0003003e,0x000002d9, + 0x000002dc,0x0004003d,0x0000000e,0x000002de,0x0000029e,0x0003003e,0x000002dd,0x000002de, + 0x000200f9,0x000002df,0x000200f8,0x000002df,0x000400f6,0x000002e1,0x000002e2,0x00000000, + 0x000200f9,0x000002e3,0x000200f8,0x000002e3,0x0004003d,0x0000000e,0x000002e4,0x000002dd, + 0x000500b0,0x00000053,0x000002e6,0x000002e4,0x000002e5,0x000400fa,0x000002e6,0x000002e0, + 0x000002e1,0x000200f8,0x000002e0,0x0004003d,0x0000000e,0x000002e8,0x000002dd,0x000500c2, + 0x0000000e,0x000002e9,0x000002e8,0x000001fc,0x0003003e,0x000002e7,0x000002e9,0x0004003d, + 0x0000000e,0x000002eb,0x000002dd,0x000500c7,0x0000000e,0x000002ec,0x000002eb,0x000000e6, + 0x0003003e,0x000002ea,0x000002ec,0x0004003d,0x0000019d,0x000002ee,0x000002bc,0x0004003d, + 0x0000000e,0x000002ef,0x000002e7,0x000500c7,0x0000000e,0x000002f0,0x000002ef,0x00000119, + 0x0004007c,0x0000019d,0x000002f1,0x000002f0,0x00050080,0x0000019d,0x000002f2,0x000002ee, + 0x000002f1,0x0003003e,0x000002ed,0x000002f2,0x0004003d,0x0000019d,0x000002f4,0x000002c9, + 0x0004003d,0x0000000e,0x000002f5,0x000002e7,0x000500c2,0x0000000e,0x000002f6,0x000002f5, + 0x00000135,0x0004007c,0x0000019d,0x000002f7,0x000002f6,0x00050080,0x0000019d,0x000002f8, + 0x000002f4,0x000002f7,0x0003003e,0x000002f3,0x000002f8,0x0003003e,0x000002f9,0x000000b7, + 0x0004003d,0x0000019d,0x000002fa,0x000002ed,0x000500af,0x00000053,0x000002fb,0x000002fa, + 0x000001a0,0x0004003d,0x0000019d,0x000002fc,0x000002f3,0x000500af,0x00000053,0x000002fd, + 0x000002fc,0x000001a0,0x000500a7,0x00000053,0x000002fe,0x000002fb,0x000002fd,0x000300f7, + 0x00000300,0x00000000,0x000400fa,0x000002fe,0x000002ff,0x00000300,0x000200f8,0x000002ff, + 0x0004003d,0x0000019d,0x00000301,0x000002ed,0x00050041,0x000002b5,0x00000302,0x000002b3, + 0x000001a0,0x0004003d,0x0000000e,0x00000303,0x00000302,0x0004007c,0x0000019d,0x00000304, + 0x00000303,0x000500b1,0x00000053,0x00000305,0x00000301,0x00000304,0x000200f9,0x00000300, + 0x000200f8,0x00000300,0x000700f5,0x00000053,0x00000306,0x000002fe,0x000002e0,0x00000305, + 0x000002ff,0x000300f7,0x00000308,0x00000000,0x000400fa,0x00000306,0x00000307,0x00000308, + 0x000200f8,0x00000307,0x0004003d,0x0000019d,0x00000309,0x000002f3,0x00050041,0x000002b5, + 0x0000030a,0x000002b3,0x000001c7,0x0004003d,0x0000000e,0x0000030b,0x0000030a,0x0004007c, + 0x0000019d,0x0000030c,0x0000030b,0x000500b1,0x00000053,0x0000030d,0x00000309,0x0000030c, + 0x000200f9,0x00000308,0x000200f8,0x00000308,0x000700f5,0x00000053,0x0000030e,0x00000306, + 0x00000300,0x0000030d,0x00000307,0x000300f7,0x00000310,0x00000000,0x000400fa,0x0000030e, + 0x0000030f,0x00000310,0x000200f8,0x0000030f,0x0004003d,0x0000019d,0x00000315,0x000002f3, + 0x0004007c,0x0000000e,0x00000316,0x00000315,0x00050041,0x000002b5,0x00000317,0x000002b3, + 0x000001a0,0x0004003d,0x0000000e,0x00000318,0x00000317,0x00050084,0x0000000e,0x00000319, + 0x00000316,0x00000318,0x0004003d,0x0000019d,0x0000031a,0x000002ed,0x0004007c,0x0000000e, + 0x0000031b,0x0000031a,0x00050080,0x0000000e,0x0000031c,0x00000319,0x0000031b,0x0004003d, + 0x0000000e,0x0000031d,0x000002d5,0x00050084,0x0000000e,0x0000031e,0x0000031c,0x0000031d, + 0x0004003d,0x0000000e,0x0000031f,0x000002d9,0x00050080,0x0000000e,0x00000320,0x0000031e, + 0x0000031f,0x0004003d,0x0000000e,0x00000321,0x000002ea,0x00050080,0x0000000e,0x00000322, + 0x00000320,0x00000321,0x00060041,0x00000323,0x00000324,0x00000314,0x000001a0,0x00000322, + 0x0004003d,0x00000021,0x00000325,0x00000324,0x00040071,0x0000000e,0x00000326,0x00000325, + 0x0003003e,0x000002f9,0x00000326,0x000200f9,0x00000310,0x000200f8,0x00000310,0x0004003d, + 0x0000000e,0x0000032a,0x000002dd,0x0004003d,0x0000000e,0x0000032c,0x000002f9,0x0003003e, + 0x0000032b,0x0000032c,0x00050039,0x00000021,0x0000032d,0x00000024,0x0000032b,0x00050041, + 0x0000032e,0x0000032f,0x00000329,0x0000032a,0x0005003e,0x0000032f,0x0000032d,0x00000028, + 0x000001df,0x0004003d,0x0000000e,0x00000332,0x000002e7,0x0003003e,0x00000331,0x00000332, + 0x00050039,0x0000000e,0x00000333,0x00000038,0x00000331,0x0003003e,0x00000330,0x00000333, + 0x0004003d,0x0000019d,0x00000335,0x000002bc,0x0004003d,0x0000000e,0x00000336,0x00000330, + 0x000500c7,0x0000000e,0x00000337,0x00000336,0x00000119,0x0004007c,0x0000019d,0x00000338, + 0x00000337,0x00050080,0x0000019d,0x00000339,0x00000335,0x00000338,0x0003003e,0x00000334, + 0x00000339,0x0004003d,0x0000019d,0x0000033b,0x000002c9,0x0004003d,0x0000000e,0x0000033c, + 0x00000330,0x000500c2,0x0000000e,0x0000033d,0x0000033c,0x00000135,0x0004007c,0x0000019d, + 0x0000033e,0x0000033d,0x00050080,0x0000019d,0x0000033f,0x0000033b,0x0000033e,0x0003003e, + 0x0000033a,0x0000033f,0x0003003e,0x00000340,0x000000b7,0x0003003e,0x00000341,0x000000b7, + 0x0004003d,0x0000019d,0x00000342,0x00000334,0x000500af,0x00000053,0x00000343,0x00000342, + 0x000001a0,0x0004003d,0x0000019d,0x00000344,0x0000033a,0x000500af,0x00000053,0x00000345, + 0x00000344,0x000001a0,0x000500a7,0x00000053,0x00000346,0x00000343,0x00000345,0x000300f7, + 0x00000348,0x00000000,0x000400fa,0x00000346,0x00000347,0x00000348,0x000200f8,0x00000347, + 0x0004003d,0x0000019d,0x00000349,0x00000334,0x00050041,0x000002b5,0x0000034a,0x000002b3, + 0x000001a0,0x0004003d,0x0000000e,0x0000034b,0x0000034a,0x0004007c,0x0000019d,0x0000034c, + 0x0000034b,0x000500b1,0x00000053,0x0000034d,0x00000349,0x0000034c,0x000200f9,0x00000348, + 0x000200f8,0x00000348,0x000700f5,0x00000053,0x0000034e,0x00000346,0x00000310,0x0000034d, + 0x00000347,0x000300f7,0x00000350,0x00000000,0x000400fa,0x0000034e,0x0000034f,0x00000350, + 0x000200f8,0x0000034f,0x0004003d,0x0000019d,0x00000351,0x0000033a,0x00050041,0x000002b5, + 0x00000352,0x000002b3,0x000001c7,0x0004003d,0x0000000e,0x00000353,0x00000352,0x0004007c, + 0x0000019d,0x00000354,0x00000353,0x000500b1,0x00000053,0x00000355,0x00000351,0x00000354, + 0x000200f9,0x00000350,0x000200f8,0x00000350,0x000700f5,0x00000053,0x00000356,0x0000034e, + 0x00000348,0x00000355,0x0000034f,0x000300f7,0x00000358,0x00000000,0x000400fa,0x00000356, + 0x00000357,0x00000358,0x000200f8,0x00000357,0x0004003d,0x0000019d,0x0000035a,0x0000033a, + 0x0004007c,0x0000000e,0x0000035b,0x0000035a,0x00050041,0x000002b5,0x0000035c,0x000002b3, + 0x000001a0,0x0004003d,0x0000000e,0x0000035d,0x0000035c,0x00050084,0x0000000e,0x0000035e, + 0x0000035b,0x0000035d,0x0004003d,0x0000019d,0x0000035f,0x00000334,0x0004007c,0x0000000e, + 0x00000360,0x0000035f,0x00050080,0x0000000e,0x00000361,0x0000035e,0x00000360,0x0004003d, + 0x0000000e,0x00000362,0x000002d5,0x00050084,0x0000000e,0x00000363,0x00000361,0x00000362, + 0x0004003d,0x0000000e,0x00000364,0x000002d9,0x00050080,0x0000000e,0x00000365,0x00000363, + 0x00000364,0x0003003e,0x00000359,0x00000365,0x0004003d,0x0000000e,0x00000366,0x00000359, + 0x00050080,0x0000000e,0x00000367,0x00000366,0x00000235,0x0004003d,0x0000000e,0x00000368, + 0x000002ea,0x00050080,0x0000000e,0x00000369,0x00000367,0x00000368,0x00060041,0x00000323, + 0x0000036a,0x00000314,0x000001a0,0x00000369,0x0004003d,0x00000021,0x0000036b,0x0000036a, + 0x00040071,0x0000000e,0x0000036c,0x0000036b,0x0003003e,0x00000340,0x0000036c,0x0004003d, + 0x0000000e,0x0000036d,0x00000359,0x00050080,0x0000000e,0x0000036e,0x0000036d,0x00000210, + 0x0004003d,0x0000000e,0x0000036f,0x000002ea,0x00050080,0x0000000e,0x00000370,0x0000036e, + 0x0000036f,0x00060041,0x00000323,0x00000371,0x00000314,0x000001a0,0x00000370,0x0004003d, + 0x00000021,0x00000372,0x00000371,0x00040071,0x0000000e,0x00000373,0x00000372,0x0003003e, + 0x00000341,0x00000373,0x000200f9,0x00000358,0x000200f8,0x00000358,0x0004003d,0x0000000e, + 0x00000375,0x000002dd,0x0004003d,0x0000000e,0x00000377,0x00000340,0x0003003e,0x00000376, + 0x00000377,0x00050039,0x00000021,0x00000378,0x00000024,0x00000376,0x00050041,0x0000032e, + 0x00000379,0x00000374,0x00000375,0x0005003e,0x00000379,0x00000378,0x00000028,0x000001df, + 0x0004003d,0x0000000e,0x0000037b,0x000002dd,0x0004003d,0x0000000e,0x0000037d,0x00000341, + 0x0003003e,0x0000037c,0x0000037d,0x00050039,0x00000021,0x0000037e,0x00000024,0x0000037c, + 0x00050041,0x0000032e,0x0000037f,0x0000037a,0x0000037b,0x0005003e,0x0000037f,0x0000037e, + 0x00000028,0x000001df,0x000200f9,0x000002e2,0x000200f8,0x000002e2,0x0004003d,0x0000000e, + 0x00000380,0x000002dd,0x00050080,0x0000000e,0x00000381,0x00000380,0x000000d9,0x0003003e, + 0x000002dd,0x00000381,0x000200f9,0x000002df,0x000200f8,0x000002e1,0x000400e0,0x000001df, + 0x000001df,0x00000382,0x0004003d,0x0000000e,0x00000384,0x000002a5,0x00050084,0x0000000e, + 0x00000385,0x00000384,0x0000020b,0x0003003e,0x00000383,0x00000385,0x0004003d,0x0000000e, + 0x00000388,0x00000387,0x0003003e,0x00000386,0x00000388,0x000200f9,0x00000389,0x000200f8, + 0x00000389,0x000400f6,0x0000038b,0x0000038c,0x00000000,0x000200f9,0x0000038d,0x000200f8, + 0x0000038d,0x0004003d,0x0000000e,0x0000038e,0x00000386,0x000500b0,0x00000053,0x0000038f, + 0x0000038e,0x0000010a,0x000400fa,0x0000038f,0x0000038a,0x0000038b,0x000200f8,0x0000038a, + 0x0004003d,0x0000000e,0x00000391,0x00000386,0x00050086,0x0000000e,0x00000392,0x00000391, + 0x000001ce,0x00050084,0x0000000e,0x00000393,0x00000392,0x0000010a,0x0003003e,0x00000390, + 0x00000393,0x0004003d,0x0000000e,0x00000395,0x00000386,0x00050089,0x0000000e,0x00000396, + 0x00000395,0x000001ce,0x00050084,0x0000000e,0x00000397,0x00000396,0x0000010a,0x0003003e, + 0x00000394,0x00000397,0x0004003d,0x0000000e,0x0000039f,0x00000383,0x0004003d,0x0000000e, + 0x000003a0,0x00000390,0x00050084,0x0000000e,0x000003a1,0x000003a0,0x00000210,0x00050080, + 0x0000000e,0x000003a2,0x0000039f,0x000003a1,0x0004003d,0x0000000e,0x000003a3,0x00000394, + 0x00050080,0x0000000e,0x000003a4,0x000003a2,0x000003a3,0x00060041,0x000003a5,0x000003a6, + 0x0000039e,0x000001a0,0x000003a4,0x0004003d,0x0000000e,0x000003a7,0x00000383,0x0004003d, + 0x0000000e,0x000003a8,0x00000390,0x00050084,0x0000000e,0x000003a9,0x000003a8,0x00000210, + 0x00050080,0x0000000e,0x000003aa,0x000003a7,0x000003a9,0x0004003d,0x0000000e,0x000003ab, + 0x00000394,0x00050080,0x0000000e,0x000003ac,0x000003aa,0x000003ab,0x00071169,0x00000398, + 0x000003ad,0x000003a6,0x000001a0,0x00000210,0x00000000,0x0003003e,0x0000039a,0x000003ad, + 0x0004003d,0x00000398,0x000003b1,0x0000039a,0x00040073,0x000003ae,0x000003b2,0x000003b1, + 0x0003003e,0x000003b0,0x000003b2,0x0003003e,0x000003b3,0x000000b7,0x000200f9,0x000003b4, + 0x000200f8,0x000003b4,0x000400f6,0x000003b6,0x000003b7,0x00000001,0x000200f9,0x000003b8, + 0x000200f8,0x000003b8,0x0004003d,0x0000000e,0x000003b9,0x000003b3,0x000500b0,0x00000053, + 0x000003ba,0x000003b9,0x0000007c,0x000400fa,0x000003ba,0x000003b5,0x000003b6,0x000200f8, + 0x000003b5,0x0004003d,0x0000000e,0x000003bf,0x00000390,0x00050084,0x0000000e,0x000003c0, + 0x000003bf,0x00000235,0x0004003d,0x0000000e,0x000003c1,0x000003b3,0x00050084,0x0000000e, + 0x000003c2,0x000003c1,0x00000235,0x00050080,0x0000000e,0x000003c3,0x000003c0,0x000003c2, + 0x00050041,0x0000032e,0x000003c4,0x00000329,0x000003c3,0x0004003d,0x0000000e,0x000003c5, + 0x00000390,0x00050084,0x0000000e,0x000003c6,0x000003c5,0x00000235,0x0004003d,0x0000000e, + 0x000003c7,0x000003b3,0x00050084,0x0000000e,0x000003c8,0x000003c7,0x00000235,0x00050080, + 0x0000000e,0x000003c9,0x000003c6,0x000003c8,0x00081169,0x000003bc,0x000003ca,0x000003c4, + 0x000001a0,0x00000235,0x00000030,0x000001df,0x0003003e,0x000003be,0x000003ca,0x0004003d, + 0x0000000e,0x000003ce,0x00000394,0x00050084,0x0000000e,0x000003cf,0x000003ce,0x00000235, + 0x0004003d,0x0000000e,0x000003d0,0x000003b3,0x00050084,0x0000000e,0x000003d1,0x000003d0, + 0x00000235,0x00050080,0x0000000e,0x000003d2,0x000003cf,0x000003d1,0x00050041,0x0000032e, + 0x000003d3,0x00000374,0x000003d2,0x0004003d,0x0000000e,0x000003d4,0x00000394,0x00050084, + 0x0000000e,0x000003d5,0x000003d4,0x00000235,0x0004003d,0x0000000e,0x000003d6,0x000003b3, + 0x00050084,0x0000000e,0x000003d7,0x000003d6,0x00000235,0x00050080,0x0000000e,0x000003d8, + 0x000003d5,0x000003d7,0x00081169,0x000003cb,0x000003d9,0x000003d3,0x000001c7,0x00000235, + 0x00000030,0x000001df,0x0003003e,0x000003cd,0x000003d9,0x0004003d,0x000003bc,0x000003da, + 0x000003be,0x0004003d,0x000003cb,0x000003db,0x000003cd,0x0004003d,0x000003ae,0x000003dc, + 0x000003b0,0x0006116b,0x000003ae,0x000003dd,0x000003da,0x000003db,0x000003dc,0x0003003e, + 0x000003b0,0x000003dd,0x000200f9,0x000003b7,0x000200f8,0x000003b7,0x0004003d,0x0000000e, + 0x000003de,0x000003b3,0x00050080,0x0000000e,0x000003df,0x000003de,0x000001c7,0x0003003e, + 0x000003b3,0x000003df,0x000200f9,0x000003b4,0x000200f8,0x000003b6,0x0003003e,0x000003e0, + 0x000001a0,0x000200f9,0x000003e1,0x000200f8,0x000003e1,0x000400f6,0x000003e3,0x000003e4, + 0x00000000,0x000200f9,0x000003e5,0x000200f8,0x000003e5,0x0004003d,0x0000019d,0x000003e6, + 0x000003e0,0x0004116c,0x0000000e,0x000003e7,0x000003ae,0x0004007c,0x0000019d,0x000003e8, + 0x000003e7,0x000500b1,0x00000053,0x000003e9,0x000003e6,0x000003e8,0x000400fa,0x000003e9, + 0x000003e2,0x000003e3,0x000200f8,0x000003e2,0x0004003d,0x0000019d,0x000003ea,0x000003e0, + 0x0004003d,0x0000019d,0x000003eb,0x000003e0,0x00050041,0x00000007,0x000003ed,0x000003b0, + 0x000003eb,0x0004003d,0x00000006,0x000003ee,0x000003ed,0x0003003e,0x000003ec,0x000003ee, + 0x00050039,0x00000006,0x000003ef,0x0000000a,0x000003ec,0x00050041,0x00000007,0x000003f0, + 0x000003b0,0x000003ea,0x0003003e,0x000003f0,0x000003ef,0x000200f9,0x000003e4,0x000200f8, + 0x000003e4,0x0004003d,0x0000019d,0x000003f1,0x000003e0,0x00050080,0x0000019d,0x000003f2, + 0x000003f1,0x000001c7,0x0003003e,0x000003e0,0x000003f2,0x000200f9,0x000003e1,0x000200f8, + 0x000003e3,0x0004003d,0x000003ae,0x000003f4,0x000003b0,0x00040073,0x00000398,0x000003f5, + 0x000003f4,0x0003003e,0x000003f3,0x000003f5,0x0004003d,0x00000398,0x000003f6,0x000003f3, + 0x0004003d,0x0000000e,0x000003f7,0x00000390,0x00050084,0x0000000e,0x000003f8,0x000003f7, + 0x00000210,0x0004003d,0x0000000e,0x000003f9,0x00000394,0x00050080,0x0000000e,0x000003fa, + 0x000003f8,0x000003f9,0x00050041,0x00000214,0x000003fb,0x0000020e,0x000003fa,0x0004003d, + 0x0000000e,0x000003fc,0x00000390,0x00050084,0x0000000e,0x000003fd,0x000003fc,0x00000210, + 0x0004003d,0x0000000e,0x000003fe,0x00000394,0x00050080,0x0000000e,0x000003ff,0x000003fd, + 0x000003fe,0x0007116a,0x000003fb,0x000003f6,0x000001a0,0x00000210,0x00000028,0x000001df, + 0x000200f9,0x0000038c,0x000200f8,0x0000038c,0x0004003d,0x0000000e,0x00000401,0x00000400, + 0x0004003d,0x0000000e,0x00000402,0x00000386,0x00050080,0x0000000e,0x00000403,0x00000402, + 0x00000401,0x0003003e,0x00000386,0x00000403,0x000200f9,0x00000389,0x000200f8,0x0000038b, + 0x000400e0,0x000001df,0x000001df,0x00000382,0x0004003d,0x0000000e,0x00000405,0x0000029e, + 0x0003003e,0x00000404,0x00000405,0x000200f9,0x00000406,0x000200f8,0x00000406,0x000400f6, + 0x00000408,0x00000409,0x00000000,0x000200f9,0x0000040a,0x000200f8,0x0000040a,0x0004003d, + 0x0000000e,0x0000040b,0x00000404,0x000500b0,0x00000053,0x0000040c,0x0000040b,0x0000020b, + 0x000400fa,0x0000040c,0x00000407,0x00000408,0x000200f8,0x00000407,0x0004003d,0x0000000e, + 0x0000040d,0x00000404,0x0004003d,0x0000000e,0x0000040e,0x00000404,0x00050041,0x00000214, + 0x00000410,0x0000020e,0x0000040e,0x0006003d,0x0000000c,0x00000411,0x00000410,0x00000030, + 0x000001df,0x0003003e,0x0000040f,0x00000411,0x00050039,0x0000000c,0x00000412,0x0000003b, + 0x0000040f,0x00050041,0x00000214,0x00000413,0x0000020e,0x0000040d,0x0005003e,0x00000413, + 0x00000412,0x00000028,0x000001df,0x000200f9,0x00000409,0x000200f8,0x00000409,0x0004003d, + 0x0000000e,0x00000414,0x00000404,0x00050080,0x0000000e,0x00000415,0x00000414,0x000000d9, + 0x0003003e,0x00000404,0x00000415,0x000200f9,0x00000406,0x000200f8,0x00000408,0x000400e0, + 0x000001df,0x000001df,0x00000382,0x0004003d,0x0000000e,0x00000416,0x0000029e,0x000500b0, + 0x00000053,0x00000417,0x00000416,0x00000210,0x000300f7,0x00000419,0x00000000,0x000400fa, + 0x00000417,0x00000418,0x00000419,0x000200f8,0x00000418,0x0004003d,0x0000000e,0x0000041b, + 0x0000029e,0x0003003e,0x0000041a,0x0000041b,0x0004003d,0x0000000e,0x0000041e,0x0000041a, + 0x0003003e,0x0000041d,0x0000041e,0x00050039,0x0000000c,0x0000041f,0x00000044,0x0000041d, + 0x0003003e,0x0000041c,0x0000041f,0x0004003d,0x0000000c,0x00000422,0x0000041c,0x0003003e, + 0x00000421,0x00000422,0x00050039,0x0000000c,0x00000423,0x00000035,0x00000421,0x0003003e, + 0x00000420,0x00000423,0x0003003e,0x00000424,0x000000b7,0x000200f9,0x00000425,0x000200f8, + 0x00000425,0x000400f6,0x00000427,0x00000428,0x00000000,0x000200f9,0x00000429,0x000200f8, + 0x00000429,0x0004003d,0x0000000e,0x0000042a,0x00000424,0x000500b0,0x00000053,0x0000042b, + 0x0000042a,0x00000210,0x000400fa,0x0000042b,0x00000426,0x00000427,0x000200f8,0x00000426, + 0x0004003d,0x0000000e,0x0000042d,0x0000041a,0x00050084,0x0000000e,0x0000042e,0x0000042d, + 0x00000210,0x0004003d,0x0000000e,0x0000042f,0x00000424,0x00050080,0x0000000e,0x00000430, + 0x0000042e,0x0000042f,0x00050041,0x00000214,0x00000431,0x0000020e,0x00000430,0x0006003d, + 0x0000000c,0x00000432,0x00000431,0x00000030,0x000001df,0x0004003d,0x0000000c,0x00000433, + 0x00000420,0x00050085,0x0000000c,0x00000434,0x00000432,0x00000433,0x0003003e,0x0000042c, + 0x00000434,0x0004003d,0x0000000c,0x00000437,0x0000042c,0x0003003e,0x00000436,0x00000437, + 0x00050039,0x0000000e,0x00000438,0x00000011,0x00000436,0x0003003e,0x00000439,0x00000438, + 0x00050039,0x0000000e,0x0000043a,0x0000001f,0x00000439,0x0003003e,0x00000435,0x0000043a, + 0x0004003d,0x0000000e,0x0000043e,0x0000041a,0x00050084,0x0000000e,0x0000043f,0x0000043e, + 0x00000210,0x0004003d,0x0000000e,0x00000440,0x00000424,0x00050080,0x0000000e,0x00000441, + 0x0000043f,0x00000440,0x0004003d,0x0000000e,0x00000442,0x00000435,0x00040071,0x00000021, + 0x00000443,0x00000442,0x00050041,0x0000032e,0x00000444,0x0000043d,0x00000441,0x0005003e, + 0x00000444,0x00000443,0x00000028,0x000001df,0x000200f9,0x00000428,0x000200f8,0x00000428, + 0x0004003d,0x0000000e,0x00000445,0x00000424,0x00050080,0x0000000e,0x00000446,0x00000445, + 0x000001c7,0x0003003e,0x00000424,0x00000446,0x000200f9,0x00000425,0x000200f8,0x00000427, + 0x000200f9,0x00000419,0x000200f8,0x00000419,0x000400e0,0x000001df,0x000001df,0x00000382, + 0x0004003d,0x0000000e,0x00000448,0x00000387,0x0003003e,0x00000447,0x00000448,0x000200f9, + 0x00000449,0x000200f8,0x00000449,0x000400f6,0x0000044b,0x0000044c,0x00000000,0x000200f9, + 0x0000044d,0x000200f8,0x0000044d,0x0004003d,0x0000000e,0x0000044e,0x00000447,0x000500b0, + 0x00000053,0x0000044f,0x0000044e,0x000000d7,0x000400fa,0x0000044f,0x0000044a,0x0000044b, + 0x000200f8,0x0000044a,0x0004003d,0x0000000e,0x00000451,0x00000447,0x00050086,0x0000000e, + 0x00000452,0x00000451,0x000001df,0x00050084,0x0000000e,0x00000453,0x00000452,0x0000010a, + 0x0003003e,0x00000450,0x00000453,0x0004003d,0x0000000e,0x00000455,0x00000447,0x00050089, + 0x0000000e,0x00000456,0x00000455,0x000001df,0x00050084,0x0000000e,0x00000457,0x00000456, + 0x0000010a,0x0003003e,0x00000454,0x00000457,0x0003003e,0x00000458,0x00000459,0x0003003e, + 0x0000045a,0x000000b7,0x000200f9,0x0000045b,0x000200f8,0x0000045b,0x000400f6,0x0000045d, + 0x0000045e,0x00000001,0x000200f9,0x0000045f,0x000200f8,0x0000045f,0x0004003d,0x0000000e, + 0x00000460,0x0000045a,0x000500b0,0x00000053,0x00000461,0x00000460,0x00000210,0x000400fa, + 0x00000461,0x0000045c,0x0000045d,0x000200f8,0x0000045c,0x0003003e,0x00000462,0x000000b7, + 0x000200f9,0x00000463,0x000200f8,0x00000463,0x000400f6,0x00000465,0x00000466,0x00000001, + 0x000200f9,0x00000467,0x000200f8,0x00000467,0x0004003d,0x0000000e,0x00000468,0x00000462, + 0x000500b0,0x00000053,0x00000469,0x00000468,0x0000007c,0x000400fa,0x00000469,0x00000464, + 0x00000465,0x000200f8,0x00000464,0x0004003d,0x0000000e,0x0000046b,0x00000450,0x00050084, + 0x0000000e,0x0000046c,0x0000046b,0x00000210,0x0004003d,0x0000000e,0x0000046d,0x0000045a, + 0x00050080,0x0000000e,0x0000046e,0x0000046c,0x0000046d,0x0004003d,0x0000000e,0x0000046f, + 0x00000462,0x00050084,0x0000000e,0x00000470,0x0000046f,0x00000235,0x00050080,0x0000000e, + 0x00000471,0x0000046e,0x00000470,0x00050041,0x0000032e,0x00000472,0x0000043d,0x00000471, + 0x0004003d,0x0000000e,0x00000473,0x00000450,0x00050084,0x0000000e,0x00000474,0x00000473, + 0x00000210,0x0004003d,0x0000000e,0x00000475,0x0000045a,0x00050080,0x0000000e,0x00000476, + 0x00000474,0x00000475,0x0004003d,0x0000000e,0x00000477,0x00000462,0x00050084,0x0000000e, + 0x00000478,0x00000477,0x00000235,0x00050080,0x0000000e,0x00000479,0x00000476,0x00000478, + 0x00081169,0x000003bc,0x0000047a,0x00000472,0x000001a0,0x00000210,0x00000030,0x000001df, + 0x0003003e,0x0000046a,0x0000047a,0x0004003d,0x0000000e,0x0000047c,0x0000045a,0x00050084, + 0x0000000e,0x0000047d,0x0000047c,0x00000235,0x0004003d,0x0000000e,0x0000047e,0x00000454, + 0x00050080,0x0000000e,0x0000047f,0x0000047d,0x0000047e,0x0004003d,0x0000000e,0x00000480, + 0x00000462,0x00050084,0x0000000e,0x00000481,0x00000480,0x000000fe,0x00050080,0x0000000e, + 0x00000482,0x0000047f,0x00000481,0x00050041,0x0000032e,0x00000483,0x0000037a,0x00000482, + 0x0004003d,0x0000000e,0x00000484,0x0000045a,0x00050084,0x0000000e,0x00000485,0x00000484, + 0x00000235,0x0004003d,0x0000000e,0x00000486,0x00000454,0x00050080,0x0000000e,0x00000487, + 0x00000485,0x00000486,0x0004003d,0x0000000e,0x00000488,0x00000462,0x00050084,0x0000000e, + 0x00000489,0x00000488,0x000000fe,0x00050080,0x0000000e,0x0000048a,0x00000487,0x00000489, + 0x00081169,0x000003cb,0x0000048b,0x00000483,0x000001a0,0x00000235,0x00000030,0x000001df, + 0x0003003e,0x0000047b,0x0000048b,0x0004003d,0x000003bc,0x0000048c,0x0000046a,0x0004003d, + 0x000003cb,0x0000048d,0x0000047b,0x0004003d,0x000003ae,0x0000048e,0x00000458,0x0006116b, + 0x000003ae,0x0000048f,0x0000048c,0x0000048d,0x0000048e,0x0003003e,0x00000458,0x0000048f, + 0x000200f9,0x00000466,0x000200f8,0x00000466,0x0004003d,0x0000000e,0x00000490,0x00000462, + 0x00050080,0x0000000e,0x00000491,0x00000490,0x000001c7,0x0003003e,0x00000462,0x00000491, + 0x000200f9,0x00000463,0x000200f8,0x00000465,0x0003003e,0x00000492,0x000001a0,0x000200f9, + 0x00000493,0x000200f8,0x00000493,0x000400f6,0x00000495,0x00000496,0x00000000,0x000200f9, + 0x00000497,0x000200f8,0x00000497,0x0004003d,0x0000019d,0x00000498,0x00000492,0x0004116c, + 0x0000000e,0x00000499,0x000003ae,0x0004007c,0x0000019d,0x0000049a,0x00000499,0x000500b1, + 0x00000053,0x0000049b,0x00000498,0x0000049a,0x000400fa,0x0000049b,0x00000494,0x00000495, + 0x000200f8,0x00000494,0x0004003d,0x0000019d,0x0000049c,0x00000492,0x0004003d,0x0000019d, + 0x0000049d,0x00000492,0x00050041,0x00000007,0x0000049f,0x00000458,0x0000049d,0x0004003d, + 0x00000006,0x000004a0,0x0000049f,0x0003003e,0x0000049e,0x000004a0,0x00050039,0x00000006, + 0x000004a1,0x0000000a,0x0000049e,0x00050041,0x00000007,0x000004a2,0x00000458,0x0000049c, + 0x0003003e,0x000004a2,0x000004a1,0x000200f9,0x00000496,0x000200f8,0x00000496,0x0004003d, + 0x0000019d,0x000004a3,0x00000492,0x00050080,0x0000019d,0x000004a4,0x000004a3,0x000001c7, + 0x0003003e,0x00000492,0x000004a4,0x000200f9,0x00000493,0x000200f8,0x00000495,0x000200f9, + 0x0000045e,0x000200f8,0x0000045e,0x0004003d,0x0000000e,0x000004a5,0x0000045a,0x00050080, + 0x0000000e,0x000004a6,0x000004a5,0x00000235,0x0003003e,0x0000045a,0x000004a6,0x000200f9, + 0x0000045b,0x000200f8,0x0000045d,0x0004003d,0x000003ae,0x000004a8,0x00000458,0x00040073, + 0x00000398,0x000004a9,0x000004a8,0x0003003e,0x000004a7,0x000004a9,0x0004003d,0x00000398, + 0x000004aa,0x000004a7,0x0004003d,0x0000000e,0x000004ae,0x00000450,0x00050084,0x0000000e, + 0x000004af,0x000004ae,0x00000235,0x0004003d,0x0000000e,0x000004b0,0x00000454,0x00050080, + 0x0000000e,0x000004b1,0x000004af,0x000004b0,0x00050041,0x00000214,0x000004b2,0x000004ad, + 0x000004b1,0x0004003d,0x0000000e,0x000004b3,0x00000450,0x00050084,0x0000000e,0x000004b4, + 0x000004b3,0x00000235,0x0004003d,0x0000000e,0x000004b5,0x00000454,0x00050080,0x0000000e, + 0x000004b6,0x000004b4,0x000004b5,0x0007116a,0x000004b2,0x000004aa,0x000001a0,0x00000235, + 0x00000028,0x000001df,0x000200f9,0x0000044c,0x000200f8,0x0000044c,0x0004003d,0x0000000e, + 0x000004b7,0x00000400,0x0004003d,0x0000000e,0x000004b8,0x00000447,0x00050080,0x0000000e, + 0x000004b9,0x000004b8,0x000004b7,0x0003003e,0x00000447,0x000004b9,0x000200f9,0x00000449, + 0x000200f8,0x0000044b,0x000400e0,0x000001df,0x000001df,0x00000382,0x0004003d,0x0000000e, + 0x000004bb,0x0000029e,0x0003003e,0x000004ba,0x000004bb,0x000200f9,0x000004bc,0x000200f8, + 0x000004bc,0x000400f6,0x000004be,0x000004bf,0x00000000,0x000200f9,0x000004c0,0x000200f8, + 0x000004c0,0x0004003d,0x0000000e,0x000004c1,0x000004ba,0x000500b0,0x00000053,0x000004c2, + 0x000004c1,0x000002e5,0x000400fa,0x000004c2,0x000004bd,0x000004be,0x000200f8,0x000004bd, + 0x0004003d,0x0000000e,0x000004c4,0x000004ba,0x000500c2,0x0000000e,0x000004c5,0x000004c4, + 0x000001fc,0x0003003e,0x000004c3,0x000004c5,0x0004003d,0x0000000e,0x000004c7,0x000004ba, + 0x000500c7,0x0000000e,0x000004c8,0x000004c7,0x000000e6,0x0003003e,0x000004c6,0x000004c8, + 0x0004003d,0x0000019d,0x000004ca,0x000002bc,0x0004003d,0x0000000e,0x000004cb,0x000004c3, + 0x000500c7,0x0000000e,0x000004cc,0x000004cb,0x00000119,0x0004007c,0x0000019d,0x000004cd, + 0x000004cc,0x00050080,0x0000019d,0x000004ce,0x000004ca,0x000004cd,0x0003003e,0x000004c9, + 0x000004ce,0x0004003d,0x0000019d,0x000004d0,0x000002c9,0x0004003d,0x0000000e,0x000004d1, + 0x000004c3,0x000500c2,0x0000000e,0x000004d2,0x000004d1,0x00000135,0x0004007c,0x0000019d, + 0x000004d3,0x000004d2,0x00050080,0x0000019d,0x000004d4,0x000004d0,0x000004d3,0x0003003e, + 0x000004cf,0x000004d4,0x0004003d,0x0000019d,0x000004d5,0x000004c9,0x000500b1,0x00000053, + 0x000004d6,0x000004d5,0x000001a0,0x0004003d,0x0000019d,0x000004d7,0x000004cf,0x000500b1, + 0x00000053,0x000004d8,0x000004d7,0x000001a0,0x000500a6,0x00000053,0x000004d9,0x000004d6, + 0x000004d8,0x000400a8,0x00000053,0x000004da,0x000004d9,0x000300f7,0x000004dc,0x00000000, + 0x000400fa,0x000004da,0x000004db,0x000004dc,0x000200f8,0x000004db,0x0004003d,0x0000019d, + 0x000004dd,0x000004c9,0x00050041,0x000002b5,0x000004de,0x000002b3,0x000001a0,0x0004003d, + 0x0000000e,0x000004df,0x000004de,0x0004007c,0x0000019d,0x000004e0,0x000004df,0x000500af, + 0x00000053,0x000004e1,0x000004dd,0x000004e0,0x000200f9,0x000004dc,0x000200f8,0x000004dc, + 0x000700f5,0x00000053,0x000004e2,0x000004d9,0x000004bd,0x000004e1,0x000004db,0x000400a8, + 0x00000053,0x000004e3,0x000004e2,0x000300f7,0x000004e5,0x00000000,0x000400fa,0x000004e3, + 0x000004e4,0x000004e5,0x000200f8,0x000004e4,0x0004003d,0x0000019d,0x000004e6,0x000004cf, + 0x00050041,0x000002b5,0x000004e7,0x000002b3,0x000001c7,0x0004003d,0x0000000e,0x000004e8, + 0x000004e7,0x0004007c,0x0000019d,0x000004e9,0x000004e8,0x000500af,0x00000053,0x000004ea, + 0x000004e6,0x000004e9,0x000200f9,0x000004e5,0x000200f8,0x000004e5,0x000700f5,0x00000053, + 0x000004eb,0x000004e2,0x000004dc,0x000004ea,0x000004e4,0x000300f7,0x000004ed,0x00000000, + 0x000400fa,0x000004eb,0x000004ec,0x000004ed,0x000200f8,0x000004ec,0x000200f9,0x000004bf, + 0x000200f8,0x000004ed,0x0004003d,0x0000019d,0x000004f0,0x000004cf,0x0004007c,0x0000000e, + 0x000004f1,0x000004f0,0x00050041,0x000002b5,0x000004f2,0x000002b3,0x000001a0,0x0004003d, + 0x0000000e,0x000004f3,0x000004f2,0x00050084,0x0000000e,0x000004f4,0x000004f1,0x000004f3, + 0x0004003d,0x0000019d,0x000004f5,0x000004c9,0x0004007c,0x0000000e,0x000004f6,0x000004f5, + 0x00050080,0x0000000e,0x000004f7,0x000004f4,0x000004f6,0x00050041,0x000002b5,0x000004f8, + 0x000002b3,0x000001a7,0x0004003d,0x0000000e,0x000004f9,0x000004f8,0x00050084,0x0000000e, + 0x000004fa,0x000004f7,0x000004f9,0x0004003d,0x0000000e,0x000004fb,0x000002a5,0x00050084, + 0x0000000e,0x000004fc,0x000004fb,0x00000235,0x00050080,0x0000000e,0x000004fd,0x000004fa, + 0x000004fc,0x0004003d,0x0000000e,0x000004fe,0x000004c6,0x00050080,0x0000000e,0x000004ff, + 0x000004fd,0x000004fe,0x0003003e,0x000004ef,0x000004ff,0x0004003d,0x0000000e,0x00000504, + 0x000004ef,0x0004003d,0x0000000e,0x00000505,0x000004ba,0x00050041,0x00000214,0x00000507, + 0x000004ad,0x00000505,0x0006003d,0x0000000c,0x00000508,0x00000507,0x00000030,0x000001df, + 0x0003003e,0x00000506,0x00000508,0x00050039,0x0000000e,0x00000509,0x00000011,0x00000506, + 0x0003003e,0x0000050a,0x00000509,0x00050039,0x0000000e,0x0000050b,0x0000001f,0x0000050a, + 0x00040071,0x00000021,0x0000050c,0x0000050b,0x00060041,0x00000323,0x0000050d,0x00000503, + 0x000001a0,0x00000504,0x0003003e,0x0000050d,0x0000050c,0x000200f9,0x000004bf,0x000200f8, + 0x000004bf,0x0004003d,0x0000000e,0x0000050e,0x000004ba,0x00050080,0x0000000e,0x0000050f, + 0x0000050e,0x000000d9,0x0003003e,0x000004ba,0x0000050f,0x000200f9,0x000004bc,0x000200f8, + 0x000004be,0x000100fd,0x00010038,0x00050036,0x00000006,0x0000000a,0x00000000,0x00000008, + 0x00030037,0x00000007,0x00000009,0x000200f8,0x0000000b,0x0004003b,0x00000013,0x00000046, + 0x00000007,0x0004003b,0x00000013,0x00000049,0x00000007,0x0004003b,0x00000013,0x0000004d, + 0x00000007,0x0004003b,0x00000007,0x00000067,0x00000007,0x0004003b,0x00000013,0x00000078, + 0x00000007,0x0004003b,0x00000013,0x0000007e,0x00000007,0x0004003d,0x00000006,0x00000047, + 0x00000009,0x0004007c,0x0000000e,0x00000048,0x00000047,0x0003003e,0x00000046,0x00000048, + 0x0004003d,0x0000000e,0x0000004a,0x00000046,0x000500c7,0x0000000e,0x0000004c,0x0000004a, + 0x0000004b,0x0003003e,0x00000049,0x0000004c,0x0004003d,0x0000000e,0x0000004e,0x00000046, + 0x000500c7,0x0000000e,0x00000050,0x0000004e,0x0000004f,0x0003003e,0x0000004d,0x00000050, + 0x0004003d,0x0000000e,0x00000051,0x0000004d,0x000500ae,0x00000053,0x00000054,0x00000051, + 0x00000052,0x000300f7,0x00000056,0x00000000,0x000400fa,0x00000054,0x00000055,0x00000056, + 0x000200f8,0x00000055,0x0004003d,0x00000006,0x00000057,0x00000009,0x000200fe,0x00000057, + 0x000200f8,0x00000056,0x0004003d,0x0000000e,0x00000059,0x0000004d,0x000500ae,0x00000053, + 0x0000005b,0x00000059,0x0000005a,0x000300f7,0x0000005d,0x00000000,0x000400fa,0x0000005b, + 0x0000005c,0x0000005d,0x000200f8,0x0000005c,0x0004003d,0x0000000e,0x0000005e,0x00000049, + 0x000500c5,0x0000000e,0x0000005f,0x0000005e,0x00000052,0x0004007c,0x00000006,0x00000060, + 0x0000005f,0x000200fe,0x00000060,0x000200f8,0x0000005d,0x0004003d,0x0000000e,0x00000062, + 0x0000004d,0x000500b0,0x00000053,0x00000064,0x00000062,0x00000063,0x000300f7,0x00000066, + 0x00000000,0x000400fa,0x00000064,0x00000065,0x00000066,0x000200f8,0x00000065,0x0004003d, + 0x0000000e,0x00000068,0x0000004d,0x0004007c,0x00000006,0x00000069,0x00000068,0x00050085, + 0x00000006,0x0000006b,0x00000069,0x0000006a,0x0006000c,0x00000006,0x0000006c,0x00000001, + 0x00000002,0x0000006b,0x0003003e,0x00000067,0x0000006c,0x0004003d,0x0000000e,0x0000006d, + 0x00000049,0x0004007c,0x00000006,0x0000006e,0x0000006d,0x0004003d,0x0000000e,0x0000006f, + 0x00000049,0x0004003d,0x00000006,0x00000070,0x00000067,0x00050085,0x00000006,0x00000072, + 0x00000070,0x00000071,0x0004007c,0x0000000e,0x00000073,0x00000072,0x000500c5,0x0000000e, + 0x00000074,0x0000006f,0x00000073,0x0004007c,0x00000006,0x00000075,0x00000074,0x00050081, + 0x00000006,0x00000076,0x0000006e,0x00000075,0x000200fe,0x00000076,0x000200f8,0x00000066, + 0x0004003d,0x0000000e,0x00000079,0x0000004d,0x000500c2,0x0000000e,0x0000007b,0x00000079, + 0x0000007a,0x000500c7,0x0000000e,0x0000007d,0x0000007b,0x0000007c,0x0003003e,0x00000078, + 0x0000007d,0x0004003d,0x0000000e,0x0000007f,0x0000004d,0x00050080,0x0000000e,0x00000081, + 0x0000007f,0x00000080,0x0004003d,0x0000000e,0x00000082,0x00000078,0x00050080,0x0000000e, + 0x00000083,0x00000081,0x00000082,0x000500c7,0x0000000e,0x00000085,0x00000083,0x00000084, + 0x0003003e,0x0000007e,0x00000085,0x0004003d,0x0000000e,0x00000086,0x00000049,0x0004003d, + 0x0000000e,0x00000087,0x0000007e,0x000500c5,0x0000000e,0x00000088,0x00000086,0x00000087, + 0x0004007c,0x00000006,0x00000089,0x00000088,0x000200fe,0x00000089,0x00010038,0x00050036, + 0x0000000e,0x00000011,0x00000000,0x0000000f,0x00030037,0x0000000d,0x00000010,0x000200f8, + 0x00000012,0x0004003d,0x0000000c,0x0000008c,0x00000010,0x0004007c,0x0000008d,0x0000008e, + 0x0000008c,0x00040071,0x0000000e,0x0000008f,0x0000008e,0x000200fe,0x0000008f,0x00010038, + 0x00050036,0x0000000c,0x00000016,0x00000000,0x00000014,0x00030037,0x00000013,0x00000015, + 0x000200f8,0x00000017,0x0004003d,0x0000000e,0x00000092,0x00000015,0x000500c7,0x0000000e, + 0x00000094,0x00000092,0x00000093,0x00040071,0x0000008d,0x00000095,0x00000094,0x0004007c, + 0x0000000c,0x00000096,0x00000095,0x000200fe,0x00000096,0x00010038,0x00050036,0x0000000e, + 0x0000001b,0x00000000,0x00000018,0x00030037,0x00000013,0x00000019,0x00030037,0x00000013, + 0x0000001a,0x000200f8,0x0000001c,0x0004003b,0x00000013,0x00000099,0x00000007,0x0004003b, + 0x00000013,0x0000009d,0x00000007,0x0004003b,0x00000013,0x000000a1,0x00000007,0x0004003b, + 0x00000013,0x000000a5,0x00000007,0x0004003d,0x0000000e,0x0000009a,0x00000019,0x0004003d, + 0x0000000e,0x0000009b,0x0000001a,0x000500c2,0x0000000e,0x0000009c,0x0000009a,0x0000009b, + 0x0003003e,0x00000099,0x0000009c,0x0004003d,0x0000000e,0x0000009e,0x0000001a,0x000500c4, + 0x0000000e,0x0000009f,0x0000007c,0x0000009e,0x00050082,0x0000000e,0x000000a0,0x0000009f, + 0x0000007c,0x0003003e,0x0000009d,0x000000a0,0x0004003d,0x0000000e,0x000000a2,0x00000019, + 0x0004003d,0x0000000e,0x000000a3,0x0000009d,0x000500c7,0x0000000e,0x000000a4,0x000000a2, + 0x000000a3,0x0003003e,0x000000a1,0x000000a4,0x0004003d,0x0000000e,0x000000a6,0x0000001a, + 0x00050082,0x0000000e,0x000000a7,0x000000a6,0x0000007c,0x000500c4,0x0000000e,0x000000a8, + 0x0000007c,0x000000a7,0x0003003e,0x000000a5,0x000000a8,0x0004003d,0x0000000e,0x000000a9, + 0x00000099,0x0004003d,0x0000000e,0x000000aa,0x000000a1,0x0004003d,0x0000000e,0x000000ab, + 0x000000a5,0x000500ac,0x00000053,0x000000ac,0x000000aa,0x000000ab,0x000400a8,0x00000053, + 0x000000ad,0x000000ac,0x000300f7,0x000000af,0x00000000,0x000400fa,0x000000ad,0x000000ae, + 0x000000af,0x000200f8,0x000000ae,0x0004003d,0x0000000e,0x000000b0,0x000000a1,0x0004003d, + 0x0000000e,0x000000b1,0x000000a5,0x000500aa,0x00000053,0x000000b2,0x000000b0,0x000000b1, + 0x000300f7,0x000000b4,0x00000000,0x000400fa,0x000000b2,0x000000b3,0x000000b4,0x000200f8, + 0x000000b3,0x0004003d,0x0000000e,0x000000b5,0x00000099,0x000500c7,0x0000000e,0x000000b6, + 0x000000b5,0x0000007c,0x000500ab,0x00000053,0x000000b8,0x000000b6,0x000000b7,0x000200f9, + 0x000000b4,0x000200f8,0x000000b4,0x000700f5,0x00000053,0x000000b9,0x000000b2,0x000000ae, + 0x000000b8,0x000000b3,0x000200f9,0x000000af,0x000200f8,0x000000af,0x000700f5,0x00000053, + 0x000000ba,0x000000ac,0x0000001c,0x000000b9,0x000000b4,0x000600a9,0x0000000e,0x000000bb, + 0x000000ba,0x0000007c,0x000000b7,0x00050080,0x0000000e,0x000000bc,0x000000a9,0x000000bb, + 0x000200fe,0x000000bc,0x00010038,0x00050036,0x0000000e,0x0000001f,0x00000000,0x0000001d, + 0x00030037,0x00000013,0x0000001e,0x000200f8,0x00000020,0x0004003b,0x000000bf,0x000000c0, + 0x00000007,0x0004003b,0x00000013,0x000000dc,0x00000007,0x0004003b,0x00000013,0x000000e2, + 0x00000007,0x0004003b,0x00000013,0x000000e8,0x00000007,0x0004003b,0x00000013,0x000000ef, + 0x00000007,0x0004003b,0x00000013,0x000000f6,0x00000007,0x0004003b,0x00000013,0x000000f9, + 0x00000007,0x0004003b,0x00000013,0x00000102,0x00000007,0x0004003b,0x00000013,0x00000105, + 0x00000007,0x0004003b,0x00000013,0x0000010e,0x00000007,0x0004003b,0x00000013,0x00000110, + 0x00000007,0x0004003b,0x00000013,0x00000115,0x00000007,0x0004003b,0x00000013,0x00000118, + 0x00000007,0x0004003b,0x00000013,0x0000011a,0x00000007,0x0004003b,0x00000013,0x0000011c, + 0x00000007,0x0004003b,0x00000013,0x00000130,0x00000007,0x0004003d,0x0000000e,0x000000c1, + 0x0000001e,0x000500c7,0x0000000e,0x000000c3,0x000000c1,0x000000c2,0x000500aa,0x00000053, + 0x000000c4,0x000000c3,0x000000c2,0x000300f7,0x000000c6,0x00000000,0x000400fa,0x000000c4, + 0x000000c5,0x000000c6,0x000200f8,0x000000c5,0x0004003d,0x0000000e,0x000000c7,0x0000001e, + 0x000500c7,0x0000000e,0x000000c9,0x000000c7,0x000000c8,0x000500ab,0x00000053,0x000000ca, + 0x000000c9,0x000000b7,0x000200f9,0x000000c6,0x000200f8,0x000000c6,0x000700f5,0x00000053, + 0x000000cb,0x000000c4,0x00000020,0x000000ca,0x000000c5,0x0003003e,0x000000c0,0x000000cb, + 0x0004003d,0x00000053,0x000000cc,0x000000c0,0x000300f7,0x000000ce,0x00000000,0x000400fa, + 0x000000cc,0x000000cd,0x000000ce,0x000200f8,0x000000cd,0x000200fe,0x000000b7,0x000200f8, + 0x000000ce,0x0004003d,0x0000000e,0x000000d0,0x0000001e,0x000500c7,0x0000000e,0x000000d2, + 0x000000d0,0x000000d1,0x000500aa,0x00000053,0x000000d3,0x000000d2,0x000000b7,0x000300f7, + 0x000000d5,0x00000000,0x000400fa,0x000000d3,0x000000d4,0x000000d5,0x000200f8,0x000000d4, + 0x0004003d,0x0000000e,0x000000d6,0x0000001e,0x000500c2,0x0000000e,0x000000d8,0x000000d6, + 0x000000d7,0x000500c7,0x0000000e,0x000000da,0x000000d8,0x000000d9,0x000200fe,0x000000da, + 0x000200f8,0x000000d5,0x0004003d,0x0000000e,0x000000dd,0x0000001e,0x000500c7,0x0000000e, + 0x000000df,0x000000dd,0x000000de,0x000500ab,0x00000053,0x000000e0,0x000000df,0x000000b7, + 0x000600a9,0x0000000e,0x000000e1,0x000000e0,0x000000d9,0x000000b7,0x0003003e,0x000000dc, + 0x000000e1,0x0004003d,0x0000000e,0x000000e3,0x0000001e,0x000500c2,0x0000000e,0x000000e5, + 0x000000e3,0x000000e4,0x000500c7,0x0000000e,0x000000e7,0x000000e5,0x000000e6,0x0003003e, + 0x000000e2,0x000000e7,0x0004003d,0x0000000e,0x000000e9,0x0000001e,0x000500c7,0x0000000e, + 0x000000ea,0x000000e9,0x000000c8,0x0003003e,0x000000e8,0x000000ea,0x0004003d,0x0000000e, + 0x000000eb,0x000000e2,0x000500aa,0x00000053,0x000000ec,0x000000eb,0x000000e6,0x000300f7, + 0x000000ee,0x00000000,0x000400fa,0x000000ec,0x000000ed,0x000000f1,0x000200f8,0x000000ed, + 0x0003003e,0x000000ef,0x000000f0,0x000200f9,0x000000ee,0x000200f8,0x000000f1,0x0004003d, + 0x0000000e,0x000000f2,0x000000e2,0x000500b2,0x00000053,0x000000f3,0x000000f2,0x000000d7, + 0x000300f7,0x000000f5,0x00000000,0x000400fa,0x000000f3,0x000000f4,0x00000114,0x000200f8, + 0x000000f4,0x0004003d,0x0000000e,0x000000f7,0x000000e2,0x000500aa,0x00000053,0x000000f8, + 0x000000f7,0x000000b7,0x000300f7,0x000000fb,0x00000000,0x000400fa,0x000000f8,0x000000fa, + 0x000000fd,0x000200f8,0x000000fa,0x0004003d,0x0000000e,0x000000fc,0x000000e8,0x0003003e, + 0x000000f9,0x000000fc,0x000200f9,0x000000fb,0x000200f8,0x000000fd,0x0004003d,0x0000000e, + 0x000000ff,0x000000e8,0x00050080,0x0000000e,0x00000100,0x000000fe,0x000000ff,0x0003003e, + 0x000000f9,0x00000100,0x000200f9,0x000000fb,0x000200f8,0x000000fb,0x0004003d,0x0000000e, + 0x00000101,0x000000f9,0x0003003e,0x000000f6,0x00000101,0x0004003d,0x0000000e,0x00000103, + 0x000000e2,0x000500aa,0x00000053,0x00000104,0x00000103,0x000000b7,0x000300f7,0x00000107, + 0x00000000,0x000400fa,0x00000104,0x00000106,0x00000109,0x000200f8,0x00000106,0x0003003e, + 0x00000105,0x00000108,0x000200f9,0x00000107,0x000200f8,0x00000109,0x0004003d,0x0000000e, + 0x0000010b,0x000000e2,0x00050082,0x0000000e,0x0000010c,0x0000010a,0x0000010b,0x0003003e, + 0x00000105,0x0000010c,0x000200f9,0x00000107,0x000200f8,0x00000107,0x0004003d,0x0000000e, + 0x0000010d,0x00000105,0x0003003e,0x00000102,0x0000010d,0x0004003d,0x0000000e,0x0000010f, + 0x000000f6,0x0003003e,0x0000010e,0x0000010f,0x0004003d,0x0000000e,0x00000111,0x00000102, + 0x0003003e,0x00000110,0x00000111,0x00060039,0x0000000e,0x00000112,0x0000001b,0x0000010e, + 0x00000110,0x0007000c,0x0000000e,0x00000113,0x00000001,0x00000026,0x00000112,0x000000d7, + 0x0003003e,0x000000ef,0x00000113,0x000200f9,0x000000f5,0x000200f8,0x00000114,0x0004003d, + 0x0000000e,0x00000116,0x000000e2,0x00050082,0x0000000e,0x00000117,0x00000116,0x000000d7, + 0x0003003e,0x00000115,0x00000117,0x0004003d,0x0000000e,0x0000011b,0x000000e8,0x0003003e, + 0x0000011a,0x0000011b,0x0003003e,0x0000011c,0x00000119,0x00060039,0x0000000e,0x0000011d, + 0x0000001b,0x0000011a,0x0000011c,0x0003003e,0x00000118,0x0000011d,0x0004003d,0x0000000e, + 0x0000011e,0x00000118,0x000500aa,0x00000053,0x0000011f,0x0000011e,0x000000d7,0x000300f7, + 0x00000121,0x00000000,0x000400fa,0x0000011f,0x00000120,0x00000121,0x000200f8,0x00000120, + 0x0003003e,0x00000118,0x000000b7,0x0004003d,0x0000000e,0x00000122,0x00000115,0x00050080, + 0x0000000e,0x00000123,0x00000122,0x0000007c,0x0003003e,0x00000115,0x00000123,0x000200f9, + 0x00000121,0x000200f8,0x00000121,0x0004003d,0x0000000e,0x00000124,0x00000115,0x000500ac, + 0x00000053,0x00000125,0x00000124,0x00000108,0x000400a8,0x00000053,0x00000126,0x00000125, + 0x000300f7,0x00000128,0x00000000,0x000400fa,0x00000126,0x00000127,0x00000128,0x000200f8, + 0x00000127,0x0004003d,0x0000000e,0x00000129,0x00000115,0x000500aa,0x00000053,0x0000012a, + 0x00000129,0x00000108,0x0004003d,0x0000000e,0x0000012b,0x00000118,0x000500ac,0x00000053, + 0x0000012d,0x0000012b,0x0000012c,0x000500a7,0x00000053,0x0000012e,0x0000012a,0x0000012d, + 0x000200f9,0x00000128,0x000200f8,0x00000128,0x000700f5,0x00000053,0x0000012f,0x00000125, + 0x00000121,0x0000012e,0x00000127,0x000300f7,0x00000132,0x00000000,0x000400fa,0x0000012f, + 0x00000131,0x00000133,0x000200f8,0x00000131,0x0003003e,0x00000130,0x000000f0,0x000200f9, + 0x00000132,0x000200f8,0x00000133,0x0004003d,0x0000000e,0x00000134,0x00000115,0x000500c4, + 0x0000000e,0x00000136,0x00000134,0x00000135,0x0004003d,0x0000000e,0x00000137,0x00000118, + 0x000500c5,0x0000000e,0x00000138,0x00000136,0x00000137,0x0003003e,0x00000130,0x00000138, + 0x000200f9,0x00000132,0x000200f8,0x00000132,0x0004003d,0x0000000e,0x00000139,0x00000130, + 0x0003003e,0x000000ef,0x00000139,0x000200f9,0x000000f5,0x000200f8,0x000000f5,0x000200f9, + 0x000000ee,0x000200f8,0x000000ee,0x0004003d,0x0000000e,0x0000013a,0x000000dc,0x0004003d, + 0x0000000e,0x0000013b,0x000000ef,0x000500c5,0x0000000e,0x0000013c,0x0000013a,0x0000013b, + 0x000200fe,0x0000013c,0x00010038,0x00050036,0x00000021,0x00000024,0x00000000,0x00000022, + 0x00030037,0x00000013,0x00000023,0x000200f8,0x00000025,0x0004003d,0x0000000e,0x0000013f, + 0x00000023,0x00040071,0x00000021,0x00000140,0x0000013f,0x000200fe,0x00000140,0x00010038, + 0x00050036,0x00000006,0x00000028,0x00000000,0x00000026,0x00030037,0x0000000d,0x00000027, + 0x000200f8,0x00000029,0x0004003b,0x00000013,0x00000143,0x00000007,0x0004003b,0x0000000d, + 0x00000144,0x00000007,0x0004003b,0x00000007,0x0000014a,0x00000007,0x0004003b,0x00000013, + 0x00000154,0x00000007,0x0004003d,0x0000000c,0x00000145,0x00000027,0x0003003e,0x00000144, + 0x00000145,0x00050039,0x0000000e,0x00000146,0x00000011,0x00000144,0x0003003e,0x00000143, + 0x00000146,0x0004003d,0x0000000e,0x00000147,0x00000143,0x000500ae,0x00000053,0x00000149, + 0x00000147,0x00000148,0x000300f7,0x0000014c,0x00000000,0x000400fa,0x00000149,0x0000014b, + 0x0000014e,0x000200f8,0x0000014b,0x0003003e,0x0000014a,0x0000014d,0x000200f9,0x0000014c, + 0x000200f8,0x0000014e,0x0004003d,0x0000000c,0x00000150,0x00000027,0x00040073,0x00000006, + 0x00000151,0x00000150,0x0004003d,0x0000000e,0x00000152,0x00000143,0x00050080,0x0000000e, + 0x00000153,0x00000152,0x0000007c,0x0003003e,0x00000154,0x00000153,0x00050039,0x0000000c, + 0x00000155,0x00000016,0x00000154,0x00040073,0x00000006,0x00000156,0x00000155,0x00050081, + 0x00000006,0x00000157,0x00000151,0x00000156,0x00050085,0x00000006,0x00000158,0x0000014f, + 0x00000157,0x0003003e,0x0000014a,0x00000158,0x000200f9,0x0000014c,0x000200f8,0x0000014c, + 0x0004003d,0x00000006,0x00000159,0x0000014a,0x000200fe,0x00000159,0x00010038,0x00050036, + 0x00000006,0x0000002b,0x00000000,0x00000026,0x00030037,0x0000000d,0x0000002a,0x000200f8, + 0x0000002c,0x0004003b,0x0000000d,0x0000015e,0x00000007,0x0004003b,0x00000013,0x00000162, + 0x00000007,0x0004003d,0x0000000c,0x0000015c,0x0000002a,0x00040073,0x00000006,0x0000015d, + 0x0000015c,0x0004003d,0x0000000c,0x0000015f,0x0000002a,0x0003003e,0x0000015e,0x0000015f, + 0x00050039,0x0000000e,0x00000160,0x00000011,0x0000015e,0x00050082,0x0000000e,0x00000161, + 0x00000160,0x0000007c,0x0003003e,0x00000162,0x00000161,0x00050039,0x0000000c,0x00000163, + 0x00000016,0x00000162,0x00040073,0x00000006,0x00000164,0x00000163,0x00050081,0x00000006, + 0x00000165,0x0000015d,0x00000164,0x00050085,0x00000006,0x00000166,0x0000014f,0x00000165, + 0x000200fe,0x00000166,0x00010038,0x00050036,0x0000000c,0x0000002f,0x00000000,0x0000002d, + 0x00030037,0x0000000d,0x0000002e,0x000200f8,0x00000030,0x0004003b,0x0000000d,0x00000169, + 0x00000007,0x0004003b,0x00000013,0x0000016d,0x00000007,0x0004003d,0x0000000c,0x0000016a, + 0x0000002e,0x0003003e,0x00000169,0x0000016a,0x00050039,0x0000000e,0x0000016b,0x00000011, + 0x00000169,0x00050080,0x0000000e,0x0000016c,0x0000016b,0x0000007c,0x0003003e,0x0000016d, + 0x0000016c,0x00050039,0x0000000c,0x0000016e,0x00000016,0x0000016d,0x000200fe,0x0000016e, + 0x00010038,0x00050036,0x0000000c,0x00000032,0x00000000,0x0000002d,0x00030037,0x0000000d, + 0x00000031,0x000200f8,0x00000033,0x0004003b,0x0000000d,0x00000171,0x00000007,0x0004003b, + 0x00000013,0x00000175,0x00000007,0x0004003d,0x0000000c,0x00000172,0x00000031,0x0003003e, + 0x00000171,0x00000172,0x00050039,0x0000000e,0x00000173,0x00000011,0x00000171,0x00050082, + 0x0000000e,0x00000174,0x00000173,0x0000007c,0x0003003e,0x00000175,0x00000174,0x00050039, + 0x0000000c,0x00000176,0x00000016,0x00000175,0x000200fe,0x00000176,0x00010038,0x00050036, + 0x0000000c,0x00000035,0x00000000,0x0000002d,0x00030037,0x0000000d,0x00000034,0x000200f8, + 0x00000036,0x0004003b,0x00000007,0x00000179,0x00000007,0x0004003b,0x0000000d,0x0000018d, + 0x00000007,0x0004003b,0x00000007,0x00000190,0x00000007,0x0004003b,0x0000019e,0x0000019f, + 0x00000007,0x0004003b,0x00000007,0x000001a9,0x00000007,0x0004003b,0x0000000d,0x000001aa, + 0x00000007,0x0004003b,0x0000000d,0x000001b3,0x00000007,0x0004003b,0x00000007,0x000001b6, + 0x00000007,0x0004003b,0x0000000d,0x000001b7,0x00000007,0x0004003b,0x0000000d,0x000001c3, + 0x00000007,0x0004003d,0x0000000c,0x0000017a,0x00000034,0x00040073,0x00000006,0x0000017b, + 0x0000017a,0x0003003e,0x00000179,0x0000017b,0x0004003d,0x00000006,0x0000017c,0x00000179, + 0x000500ba,0x00000053,0x0000017e,0x0000017c,0x0000017d,0x000400a8,0x00000053,0x0000017f, + 0x0000017e,0x000400a8,0x00000053,0x00000180,0x0000017f,0x000300f7,0x00000182,0x00000000, + 0x000400fa,0x00000180,0x00000181,0x00000182,0x000200f8,0x00000181,0x0004003d,0x00000006, + 0x00000183,0x00000179,0x0004009d,0x00000053,0x00000184,0x00000183,0x000200f9,0x00000182, + 0x000200f8,0x00000182,0x000700f5,0x00000053,0x00000185,0x0000017f,0x00000036,0x00000184, + 0x00000181,0x000300f7,0x00000187,0x00000000,0x000400fa,0x00000185,0x00000186,0x00000187, + 0x000200f8,0x00000186,0x0004003d,0x00000006,0x00000189,0x00000179,0x00050088,0x00000006, + 0x0000018a,0x00000188,0x00000189,0x00040073,0x0000000c,0x0000018b,0x0000018a,0x000200fe, + 0x0000018b,0x000200f8,0x00000187,0x0004003d,0x00000006,0x0000018e,0x00000179,0x00050088, + 0x00000006,0x0000018f,0x00000188,0x0000018e,0x0003003e,0x00000190,0x0000018f,0x00050039, + 0x00000006,0x00000191,0x0000000a,0x00000190,0x00040073,0x0000000c,0x00000192,0x00000191, + 0x0003003e,0x0000018d,0x00000192,0x0004003d,0x0000000c,0x00000193,0x0000018d,0x0004009d, + 0x00000053,0x00000194,0x00000193,0x0004003d,0x0000000c,0x00000195,0x0000018d,0x000500b4, + 0x00000053,0x00000197,0x00000195,0x00000196,0x000500a6,0x00000053,0x00000198,0x00000194, + 0x00000197,0x000300f7,0x0000019a,0x00000000,0x000400fa,0x00000198,0x00000199,0x0000019a, + 0x000200f8,0x00000199,0x0004003d,0x0000000c,0x0000019b,0x0000018d,0x000200fe,0x0000019b, + 0x000200f8,0x0000019a,0x0003003e,0x0000019f,0x000001a0,0x000200f9,0x000001a1,0x000200f8, + 0x000001a1,0x000400f6,0x000001a3,0x000001a4,0x00000000,0x000200f9,0x000001a5,0x000200f8, + 0x000001a5,0x0004003d,0x0000019d,0x000001a6,0x0000019f,0x000500b1,0x00000053,0x000001a8, + 0x000001a6,0x000001a7,0x000400fa,0x000001a8,0x000001a2,0x000001a3,0x000200f8,0x000001a2, + 0x0004003d,0x0000000c,0x000001ab,0x0000018d,0x0003003e,0x000001aa,0x000001ab,0x00050039, + 0x00000006,0x000001ac,0x00000028,0x000001aa,0x0004003d,0x00000006,0x000001ad,0x00000179, + 0x00050085,0x00000006,0x000001ae,0x000001ac,0x000001ad,0x0003003e,0x000001a9,0x000001ae, + 0x0004003d,0x00000006,0x000001af,0x000001a9,0x000500b8,0x00000053,0x000001b0,0x000001af, + 0x00000188,0x000300f7,0x000001b2,0x00000000,0x000400fa,0x000001b0,0x000001b1,0x000001b2, + 0x000200f8,0x000001b1,0x0004003d,0x0000000c,0x000001b4,0x0000018d,0x0003003e,0x000001b3, + 0x000001b4,0x00050039,0x0000000c,0x000001b5,0x0000002f,0x000001b3,0x0003003e,0x0000018d, + 0x000001b5,0x000200f9,0x000001b2,0x000200f8,0x000001b2,0x0004003d,0x0000000c,0x000001b8, + 0x0000018d,0x0003003e,0x000001b7,0x000001b8,0x00050039,0x00000006,0x000001b9,0x0000002b, + 0x000001b7,0x0004003d,0x00000006,0x000001ba,0x00000179,0x00050085,0x00000006,0x000001bb, + 0x000001b9,0x000001ba,0x0003003e,0x000001b6,0x000001bb,0x0004003d,0x0000000c,0x000001bc, + 0x0000018d,0x000500ba,0x00000053,0x000001bd,0x000001bc,0x00000196,0x0004003d,0x00000006, + 0x000001be,0x000001b6,0x000500ba,0x00000053,0x000001bf,0x000001be,0x00000188,0x000500a7, + 0x00000053,0x000001c0,0x000001bd,0x000001bf,0x000300f7,0x000001c2,0x00000000,0x000400fa, + 0x000001c0,0x000001c1,0x000001c2,0x000200f8,0x000001c1,0x0004003d,0x0000000c,0x000001c4, + 0x0000018d,0x0003003e,0x000001c3,0x000001c4,0x00050039,0x0000000c,0x000001c5,0x00000032, + 0x000001c3,0x0003003e,0x0000018d,0x000001c5,0x000200f9,0x000001c2,0x000200f8,0x000001c2, + 0x000200f9,0x000001a4,0x000200f8,0x000001a4,0x0004003d,0x0000019d,0x000001c6,0x0000019f, + 0x00050080,0x0000019d,0x000001c8,0x000001c6,0x000001c7,0x0003003e,0x0000019f,0x000001c8, + 0x000200f9,0x000001a1,0x000200f8,0x000001a3,0x0004003d,0x0000000c,0x000001c9,0x0000018d, + 0x000200fe,0x000001c9,0x00010038,0x00050036,0x0000000e,0x00000038,0x00000000,0x0000001d, + 0x00030037,0x00000013,0x00000037,0x000200f8,0x00000039,0x0004003b,0x00000013,0x000001cc, + 0x00000007,0x0004003b,0x00000013,0x000001d0,0x00000007,0x0004003b,0x00000013,0x000001d3, + 0x00000007,0x0004003b,0x00000013,0x000001da,0x00000007,0x0004003d,0x0000000e,0x000001cd, + 0x00000037,0x000500c2,0x0000000e,0x000001cf,0x000001cd,0x000001ce,0x0003003e,0x000001cc, + 0x000001cf,0x0004003d,0x0000000e,0x000001d1,0x00000037,0x000500c7,0x0000000e,0x000001d2, + 0x000001d1,0x00000108,0x0003003e,0x000001d0,0x000001d2,0x0004003d,0x0000000e,0x000001d4, + 0x000001cc,0x000500c7,0x0000000e,0x000001d5,0x000001d4,0x0000007c,0x00050084,0x0000000e, + 0x000001d6,0x000001d5,0x000001ce,0x0004003d,0x0000000e,0x000001d7,0x000001d0,0x000500c7, + 0x0000000e,0x000001d8,0x000001d7,0x00000135,0x00050080,0x0000000e,0x000001d9,0x000001d6, + 0x000001d8,0x0003003e,0x000001d3,0x000001d9,0x0004003d,0x0000000e,0x000001db,0x000001cc, + 0x000500c2,0x0000000e,0x000001dc,0x000001db,0x0000007c,0x00050084,0x0000000e,0x000001dd, + 0x000001dc,0x000001ce,0x0004003d,0x0000000e,0x000001de,0x000001d0,0x000500c2,0x0000000e, + 0x000001e0,0x000001de,0x000001df,0x00050080,0x0000000e,0x000001e1,0x000001dd,0x000001e0, + 0x0003003e,0x000001da,0x000001e1,0x0004003d,0x0000000e,0x000001e2,0x000001da,0x00050084, + 0x0000000e,0x000001e3,0x000001e2,0x000000d7,0x0004003d,0x0000000e,0x000001e4,0x000001d3, + 0x00050080,0x0000000e,0x000001e5,0x000001e3,0x000001e4,0x000200fe,0x000001e5,0x00010038, + 0x00050036,0x0000000c,0x0000003b,0x00000000,0x0000002d,0x00030037,0x0000000d,0x0000003a, + 0x000200f8,0x0000003c,0x0004003b,0x00000007,0x000001e8,0x00000007,0x0004003b,0x0000000d, + 0x000001ee,0x00000007,0x0004003b,0x00000007,0x000001ef,0x00000007,0x0004003b,0x00000013, + 0x000001f6,0x00000007,0x0004003b,0x0000000d,0x000001f7,0x00000007,0x0004003b,0x00000013, + 0x000001fa,0x00000007,0x0004003b,0x00000013,0x00000200,0x00000007,0x0004003d,0x0000000c, + 0x000001e9,0x0000003a,0x00040073,0x00000006,0x000001ea,0x000001e9,0x0008000c,0x00000006, + 0x000001ed,0x00000001,0x00000032,0x000001ea,0x000001eb,0x000001ec,0x0003003e,0x000001e8, + 0x000001ed,0x0004003d,0x00000006,0x000001f0,0x000001e8,0x0003003e,0x000001ef,0x000001f0, + 0x00050039,0x00000006,0x000001f1,0x0000000a,0x000001ef,0x00040073,0x0000000c,0x000001f2, + 0x000001f1,0x0008000c,0x0000000c,0x000001f5,0x00000001,0x0000002b,0x000001f2,0x000001f3, + 0x000001f4,0x0003003e,0x000001ee,0x000001f5,0x0004003d,0x0000000c,0x000001f8,0x000001ee, + 0x0003003e,0x000001f7,0x000001f8,0x00050039,0x0000000e,0x000001f9,0x00000011,0x000001f7, + 0x0003003e,0x000001f6,0x000001f9,0x0004003d,0x0000000e,0x000001fb,0x000001f6,0x000500c4, + 0x0000000e,0x000001fd,0x000001fb,0x000001fc,0x00050080,0x0000000e,0x000001fe,0x000001fd, + 0x000000de,0x000500c7,0x0000000e,0x000001ff,0x000001fe,0x00000093,0x0003003e,0x000001fa, + 0x000001ff,0x0004003d,0x0000000e,0x00000201,0x000001fa,0x0003003e,0x00000200,0x00000201, + 0x00050039,0x0000000c,0x00000202,0x00000016,0x00000200,0x000200fe,0x00000202,0x00010038, + 0x00050036,0x0000000c,0x00000041,0x00000000,0x0000003d,0x00030037,0x00000013,0x0000003e, + 0x00030037,0x00000013,0x0000003f,0x00030037,0x00000013,0x00000040,0x000200f8,0x00000042, + 0x0004003b,0x00000013,0x00000205,0x00000007,0x0004003b,0x0000000d,0x0000020a,0x00000007, + 0x0004003b,0x0000000d,0x0000021f,0x00000007,0x0004003b,0x0000000d,0x00000230,0x00000007, + 0x0004003b,0x0000000d,0x00000242,0x00000007,0x0004003b,0x0000000d,0x00000254,0x00000007, + 0x0004003b,0x0000000d,0x00000258,0x00000007,0x0004003d,0x0000000e,0x00000206,0x0000003f, + 0x00050084,0x0000000e,0x00000207,0x00000206,0x000001df,0x0004003d,0x0000000e,0x00000208, + 0x00000040,0x00050080,0x0000000e,0x00000209,0x00000207,0x00000208,0x0003003e,0x00000205, + 0x00000209,0x0004003d,0x0000000e,0x0000020f,0x0000003e,0x00050084,0x0000000e,0x00000211, + 0x0000020f,0x00000210,0x0004003d,0x0000000e,0x00000212,0x00000205,0x00050080,0x0000000e, + 0x00000213,0x00000211,0x00000212,0x00050041,0x00000214,0x00000215,0x0000020e,0x00000213, + 0x0006003d,0x0000000c,0x00000216,0x00000215,0x00000030,0x000001df,0x0004003d,0x0000000e, + 0x00000217,0x0000003e,0x00050084,0x0000000e,0x00000218,0x00000217,0x00000210,0x0004003d, + 0x0000000e,0x00000219,0x00000205,0x00050080,0x0000000e,0x0000021a,0x00000218,0x00000219, + 0x00050080,0x0000000e,0x0000021b,0x0000021a,0x000000d7,0x00050041,0x00000214,0x0000021c, + 0x0000020e,0x0000021b,0x0006003d,0x0000000c,0x0000021d,0x0000021c,0x00000030,0x000001df, + 0x00050081,0x0000000c,0x0000021e,0x00000216,0x0000021d,0x0003003e,0x0000020a,0x0000021e, + 0x0004003d,0x0000000e,0x00000220,0x0000003e,0x00050084,0x0000000e,0x00000221,0x00000220, + 0x00000210,0x0004003d,0x0000000e,0x00000222,0x00000205,0x00050080,0x0000000e,0x00000223, + 0x00000221,0x00000222,0x00050080,0x0000000e,0x00000224,0x00000223,0x0000010a,0x00050041, + 0x00000214,0x00000225,0x0000020e,0x00000224,0x0006003d,0x0000000c,0x00000226,0x00000225, + 0x00000030,0x000001df,0x0004003d,0x0000000e,0x00000227,0x0000003e,0x00050084,0x0000000e, + 0x00000228,0x00000227,0x00000210,0x0004003d,0x0000000e,0x00000229,0x00000205,0x00050080, + 0x0000000e,0x0000022a,0x00000228,0x00000229,0x00050080,0x0000000e,0x0000022c,0x0000022a, + 0x0000022b,0x00050041,0x00000214,0x0000022d,0x0000020e,0x0000022c,0x0006003d,0x0000000c, + 0x0000022e,0x0000022d,0x00000030,0x000001df,0x00050081,0x0000000c,0x0000022f,0x00000226, + 0x0000022e,0x0003003e,0x0000021f,0x0000022f,0x0004003d,0x0000000e,0x00000231,0x0000003e, + 0x00050084,0x0000000e,0x00000232,0x00000231,0x00000210,0x0004003d,0x0000000e,0x00000233, + 0x00000205,0x00050080,0x0000000e,0x00000234,0x00000232,0x00000233,0x00050080,0x0000000e, + 0x00000236,0x00000234,0x00000235,0x00050041,0x00000214,0x00000237,0x0000020e,0x00000236, + 0x0006003d,0x0000000c,0x00000238,0x00000237,0x00000030,0x000001df,0x0004003d,0x0000000e, + 0x00000239,0x0000003e,0x00050084,0x0000000e,0x0000023a,0x00000239,0x00000210,0x0004003d, + 0x0000000e,0x0000023b,0x00000205,0x00050080,0x0000000e,0x0000023c,0x0000023a,0x0000023b, + 0x00050080,0x0000000e,0x0000023e,0x0000023c,0x0000023d,0x00050041,0x00000214,0x0000023f, + 0x0000020e,0x0000023e,0x0006003d,0x0000000c,0x00000240,0x0000023f,0x00000030,0x000001df, + 0x00050081,0x0000000c,0x00000241,0x00000238,0x00000240,0x0003003e,0x00000230,0x00000241, + 0x0004003d,0x0000000e,0x00000243,0x0000003e,0x00050084,0x0000000e,0x00000244,0x00000243, + 0x00000210,0x0004003d,0x0000000e,0x00000245,0x00000205,0x00050080,0x0000000e,0x00000246, + 0x00000244,0x00000245,0x00050080,0x0000000e,0x00000248,0x00000246,0x00000247,0x00050041, + 0x00000214,0x00000249,0x0000020e,0x00000248,0x0006003d,0x0000000c,0x0000024a,0x00000249, + 0x00000030,0x000001df,0x0004003d,0x0000000e,0x0000024b,0x0000003e,0x00050084,0x0000000e, + 0x0000024c,0x0000024b,0x00000210,0x0004003d,0x0000000e,0x0000024d,0x00000205,0x00050080, + 0x0000000e,0x0000024e,0x0000024c,0x0000024d,0x00050080,0x0000000e,0x00000250,0x0000024e, + 0x0000024f,0x00050041,0x00000214,0x00000251,0x0000020e,0x00000250,0x0006003d,0x0000000c, + 0x00000252,0x00000251,0x00000030,0x000001df,0x00050081,0x0000000c,0x00000253,0x0000024a, + 0x00000252,0x0003003e,0x00000242,0x00000253,0x0004003d,0x0000000c,0x00000255,0x0000020a, + 0x0004003d,0x0000000c,0x00000256,0x0000021f,0x00050081,0x0000000c,0x00000257,0x00000255, + 0x00000256,0x0003003e,0x00000254,0x00000257,0x0004003d,0x0000000c,0x00000259,0x00000254, + 0x0004003d,0x0000000c,0x0000025a,0x00000230,0x00050081,0x0000000c,0x0000025b,0x00000259, + 0x0000025a,0x0003003e,0x00000258,0x0000025b,0x0004003d,0x0000000c,0x0000025c,0x00000258, + 0x0004003d,0x0000000c,0x0000025d,0x00000242,0x00050081,0x0000000c,0x0000025e,0x0000025c, + 0x0000025d,0x000200fe,0x0000025e,0x00010038,0x00050036,0x0000000c,0x00000044,0x00000000, + 0x00000014,0x00030037,0x00000013,0x00000043,0x000200f8,0x00000045,0x0004003b,0x0000000d, + 0x00000261,0x00000007,0x0004003b,0x00000013,0x00000262,0x00000007,0x0004003b,0x00000013, + 0x00000264,0x00000007,0x0004003b,0x00000013,0x00000265,0x00000007,0x0004003b,0x00000013, + 0x00000267,0x00000007,0x0004003b,0x00000013,0x00000269,0x00000007,0x0004003b,0x00000013, + 0x0000026a,0x00000007,0x0004003b,0x0000000d,0x0000026d,0x00000007,0x0004003b,0x00000013, + 0x0000026f,0x00000007,0x0004003b,0x00000013,0x00000271,0x00000007,0x0004003b,0x00000013, + 0x00000272,0x00000007,0x0004003b,0x0000000d,0x00000275,0x00000007,0x0004003b,0x00000013, + 0x00000277,0x00000007,0x0004003b,0x00000013,0x00000279,0x00000007,0x0004003b,0x00000013, + 0x0000027a,0x00000007,0x0004003b,0x0000000d,0x0000027d,0x00000007,0x0004003b,0x00000013, + 0x0000027e,0x00000007,0x0004003b,0x00000013,0x00000280,0x00000007,0x0004003b,0x00000013, + 0x00000281,0x00000007,0x0004003b,0x00000013,0x00000283,0x00000007,0x0004003b,0x00000013, + 0x00000285,0x00000007,0x0004003b,0x00000013,0x00000286,0x00000007,0x0004003b,0x0000000d, + 0x00000289,0x00000007,0x0004003b,0x00000013,0x0000028b,0x00000007,0x0004003b,0x00000013, + 0x0000028d,0x00000007,0x0004003b,0x00000013,0x0000028e,0x00000007,0x0004003b,0x0000000d, + 0x00000291,0x00000007,0x0004003b,0x00000013,0x00000293,0x00000007,0x0004003b,0x00000013, + 0x00000295,0x00000007,0x0004003b,0x00000013,0x00000296,0x00000007,0x0004003d,0x0000000e, + 0x00000263,0x00000043,0x0003003e,0x00000262,0x00000263,0x0003003e,0x00000264,0x000000b7, + 0x0003003e,0x00000265,0x000000b7,0x00070039,0x0000000c,0x00000266,0x00000041,0x00000262, + 0x00000264,0x00000265,0x0004003d,0x0000000e,0x00000268,0x00000043,0x0003003e,0x00000267, + 0x00000268,0x0003003e,0x00000269,0x0000007c,0x0003003e,0x0000026a,0x000000b7,0x00070039, + 0x0000000c,0x0000026b,0x00000041,0x00000267,0x00000269,0x0000026a,0x00050081,0x0000000c, + 0x0000026c,0x00000266,0x0000026b,0x0003003e,0x00000261,0x0000026c,0x0004003d,0x0000000c, + 0x0000026e,0x00000261,0x0004003d,0x0000000e,0x00000270,0x00000043,0x0003003e,0x0000026f, + 0x00000270,0x0003003e,0x00000271,0x000001df,0x0003003e,0x00000272,0x000000b7,0x00070039, + 0x0000000c,0x00000273,0x00000041,0x0000026f,0x00000271,0x00000272,0x00050081,0x0000000c, + 0x00000274,0x0000026e,0x00000273,0x0003003e,0x0000026d,0x00000274,0x0004003d,0x0000000c, + 0x00000276,0x0000026d,0x0004003d,0x0000000e,0x00000278,0x00000043,0x0003003e,0x00000277, + 0x00000278,0x0003003e,0x00000279,0x00000135,0x0003003e,0x0000027a,0x000000b7,0x00070039, + 0x0000000c,0x0000027b,0x00000041,0x00000277,0x00000279,0x0000027a,0x00050081,0x0000000c, + 0x0000027c,0x00000276,0x0000027b,0x0003003e,0x00000275,0x0000027c,0x0004003d,0x0000000e, + 0x0000027f,0x00000043,0x0003003e,0x0000027e,0x0000027f,0x0003003e,0x00000280,0x000000b7, + 0x0003003e,0x00000281,0x0000007c,0x00070039,0x0000000c,0x00000282,0x00000041,0x0000027e, + 0x00000280,0x00000281,0x0004003d,0x0000000e,0x00000284,0x00000043,0x0003003e,0x00000283, + 0x00000284,0x0003003e,0x00000285,0x0000007c,0x0003003e,0x00000286,0x0000007c,0x00070039, + 0x0000000c,0x00000287,0x00000041,0x00000283,0x00000285,0x00000286,0x00050081,0x0000000c, + 0x00000288,0x00000282,0x00000287,0x0003003e,0x0000027d,0x00000288,0x0004003d,0x0000000c, + 0x0000028a,0x0000027d,0x0004003d,0x0000000e,0x0000028c,0x00000043,0x0003003e,0x0000028b, + 0x0000028c,0x0003003e,0x0000028d,0x000001df,0x0003003e,0x0000028e,0x0000007c,0x00070039, + 0x0000000c,0x0000028f,0x00000041,0x0000028b,0x0000028d,0x0000028e,0x00050081,0x0000000c, + 0x00000290,0x0000028a,0x0000028f,0x0003003e,0x00000289,0x00000290,0x0004003d,0x0000000c, + 0x00000292,0x00000289,0x0004003d,0x0000000e,0x00000294,0x00000043,0x0003003e,0x00000293, + 0x00000294,0x0003003e,0x00000295,0x00000135,0x0003003e,0x00000296,0x0000007c,0x00070039, + 0x0000000c,0x00000297,0x00000041,0x00000293,0x00000295,0x00000296,0x00050081,0x0000000c, + 0x00000298,0x00000292,0x00000297,0x0003003e,0x00000291,0x00000298,0x0004003d,0x0000000c, + 0x00000299,0x00000275,0x0004003d,0x0000000c,0x0000029a,0x00000291,0x00050081,0x0000000c, + 0x0000029b,0x00000299,0x0000029a,0x000200fe,0x0000029b,0x00010038, +}; +inline constexpr uint32_t k_e4m3_k32_f32__global_attend[] = { + 0x07230203,0x00010600,0x0008000b,0x000004e1,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x00000027,0x00020011,0x0000003d,0x00020011, + 0x00001074,0x00020011,0x00001075,0x00020011,0x00001160,0x00020011,0x000014e1,0x00020011, + 0x00001786,0x0005000a,0x5f565053,0x5f545845,0x616f6c66,0x00003874,0x0008000a,0x5f565053, + 0x5f52484b,0x706f6f63,0x74617265,0x5f657669,0x7274616d,0x00007869,0x0006000b,0x00000001, + 0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000003,0x0010000f, + 0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000257,0x000002e1,0x000002e6,0x000002ef, + 0x00000308,0x0000032d,0x0000038a,0x000003d2,0x000003ed,0x00000401,0x000004cc,0x00060010, + 0x00000004,0x00000011,0x00000020,0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc, + 0x00090004,0x455f4c47,0x635f5458,0x72746e6f,0x665f6c6f,0x5f776f6c,0x72747461,0x74756269, + 0x00007365,0x00060004,0x455f4c47,0x665f5458,0x74616f6c,0x6d34655f,0x00000033,0x00080004, + 0x455f4c47,0x735f5458,0x65646168,0x36315f72,0x5f746962,0x726f7473,0x00656761,0x00080004, + 0x455f4c47,0x735f5458,0x65646168,0x62385f72,0x735f7469,0x61726f74,0x00006567,0x000b0004, + 0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d, + 0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79, + 0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45, + 0x64756c63,0x69645f65,0x74636572,0x00657669,0x00080004,0x4b5f4c47,0x635f5248,0x65706f6f, + 0x69746172,0x6d5f6576,0x69727461,0x00000078,0x00090004,0x4b5f4c47,0x6d5f5248,0x726f6d65, + 0x63735f79,0x5f65706f,0x616d6573,0x6369746e,0x00000073,0x00090004,0x4b5f4c47,0x735f5248, + 0x65646168,0x75735f72,0x6f726762,0x625f7075,0x63697361,0x00000000,0x00040005,0x00000004, + 0x6e69616d,0x00000000,0x00060005,0x0000000a,0x6e756f72,0x36314664,0x3b316628,0x00000000, + 0x00040005,0x00000009,0x756c6176,0x00000065,0x00060005,0x00000011,0x42363166,0x28737469, + 0x31363166,0x0000003b,0x00040005,0x00000010,0x756c6176,0x00000065,0x00060005,0x00000016, + 0x46363166,0x426d6f72,0x28737469,0x003b3175,0x00040005,0x00000015,0x73746962,0x00000000, + 0x00060005,0x0000001b,0x66696873,0x656e5274,0x3b317528,0x003b3175,0x00040005,0x00000019, + 0x756c6176,0x00000065,0x00040005,0x0000001a,0x66696873,0x00000074,0x00080005,0x0000001f, + 0x336d3465,0x65646f43,0x6d6f7246,0x42363146,0x28737469,0x003b3175,0x00050005,0x0000001e, + 0x666c6168,0x73746942,0x00000000,0x00080005,0x00000023,0x666c6168,0x7064694d,0x746e696f, + 0x766f6241,0x31662865,0x003b3136,0x00030005,0x00000022,0x00000068,0x00080005,0x00000026, + 0x666c6168,0x7064694d,0x746e696f,0x6f6c6542,0x31662877,0x003b3136,0x00030005,0x00000025, + 0x00000068,0x00060005,0x0000002a,0x666c6168,0x766f6241,0x31662865,0x003b3136,0x00030005, + 0x00000029,0x00000068,0x00060005,0x0000002d,0x666c6168,0x6f6c6542,0x31662877,0x003b3136, + 0x00030005,0x0000002c,0x00000068,0x00080005,0x00000030,0x69636572,0x636f7270,0x61486c61, + 0x6628666c,0x3b313631,0x00000000,0x00030005,0x0000002f,0x00000078,0x00080005,0x00000036, + 0x48616d66,0x28666c61,0x31363166,0x3631663b,0x31663b31,0x003b3136,0x00030005,0x00000033, + 0x00000061,0x00030005,0x00000034,0x00000062,0x00030005,0x00000035,0x00000063,0x00070005, + 0x00000039,0x45746976,0x65577078,0x74686769,0x36316628,0x00003b31,0x00040005,0x00000038, + 0x726f6373,0x00000065,0x00090005,0x00000040,0x74666f73,0x5078616d,0x28726961,0x753b3175, + 0x31753b31,0x3b31753b,0x00000000,0x00030005,0x0000003c,0x00776f72,0x00040005,0x0000003d, + 0x65736162,0x00000000,0x00040005,0x0000003e,0x72696170,0x00000000,0x00040005,0x0000003f, + 0x69726170,0x00007974,0x00070005,0x00000045,0x74666f73,0x3678616d,0x31752834,0x3b31753b, + 0x00000000,0x00030005,0x00000043,0x00776f72,0x00040005,0x00000044,0x65736162,0x00000000, + 0x00040005,0x00000047,0x73746962,0x00000000,0x00040005,0x0000004a,0x6e676973,0x00000000, + 0x00050005,0x0000004e,0x6e67616d,0x64757469,0x00000065,0x00040005,0x00000068,0x6c616373, + 0x00006465,0x00030005,0x00000079,0x0062736c,0x00040005,0x0000007f,0x6e756f72,0x00646564, + 0x00050005,0x0000009a,0x746f7571,0x746e6569,0x00000000,0x00060005,0x0000009e,0x616d6572, + 0x65646e69,0x73614d72,0x0000006b,0x00050005,0x000000a2,0x616d6572,0x65646e69,0x00000072, + 0x00040005,0x000000a6,0x666c6168,0x00796177,0x00040005,0x000000c1,0x614e7369,0x0000006e, + 0x00050005,0x000000dd,0x6167656e,0x65766974,0x00000000,0x00050005,0x000000e3,0x6f707865, + 0x746e656e,0x00000000,0x00050005,0x000000e9,0x746e616d,0x61737369,0x00000000,0x00040005, + 0x000000f0,0x65646f63,0x00000000,0x00050005,0x000000f7,0x6e676973,0x63696669,0x00646e61, + 0x00040005,0x00000103,0x66696873,0x00000074,0x00040005,0x0000010f,0x61726170,0x0000006d, + 0x00040005,0x00000111,0x61726170,0x0000006d,0x00050005,0x00000116,0x78453465,0x656e6f70, + 0x0000746e,0x00050005,0x00000119,0x614d3465,0x7369746e,0x00006173,0x00040005,0x0000011b, + 0x61726170,0x0000006d,0x00040005,0x0000011d,0x61726170,0x0000006d,0x00040005,0x00000140, + 0x73746962,0x00000000,0x00040005,0x00000141,0x61726170,0x0000006d,0x00040005,0x00000151, + 0x61726170,0x0000006d,0x00040005,0x0000015b,0x61726170,0x0000006d,0x00040005,0x0000015f, + 0x61726170,0x0000006d,0x00040005,0x00000166,0x61726170,0x0000006d,0x00040005,0x0000016a, + 0x61726170,0x0000006d,0x00040005,0x0000016e,0x61726170,0x0000006d,0x00040005,0x00000172, + 0x61726170,0x0000006d,0x00030005,0x00000176,0x00006678,0x00030005,0x0000018a,0x00000068, + 0x00040005,0x0000018d,0x61726170,0x0000006d,0x00030005,0x0000019c,0x00000069,0x00030005, + 0x000001a6,0x00007075,0x00040005,0x000001a7,0x61726170,0x0000006d,0x00040005,0x000001b0, + 0x61726170,0x0000006d,0x00040005,0x000001b3,0x6e776f64,0x00000000,0x00040005,0x000001b4, + 0x61726170,0x0000006d,0x00040005,0x000001c0,0x61726170,0x0000006d,0x00030005,0x000001c9, + 0x00000070,0x00030005,0x000001cf,0x00000074,0x00030005,0x000001d4,0x00007662,0x00030005, + 0x000001d8,0x00007661,0x00030005,0x000001dc,0x00000065,0x00050005,0x000001ef,0x6f707865, + 0x746e656e,0x00000000,0x00030005,0x000001fc,0x00706c75,0x00040005,0x00000204,0x70657473, + 0x00000073,0x00040005,0x00000221,0x61726170,0x0000006d,0x00040005,0x00000225,0x61726170, + 0x0000006d,0x00040005,0x0000022b,0x69666661,0x0000656e,0x00040005,0x0000022e,0x61726170, + 0x0000006d,0x00040005,0x00000230,0x61726170,0x0000006d,0x00040005,0x00000231,0x61726170, + 0x0000006d,0x00040005,0x00000237,0x73746962,0x00000000,0x00040005,0x00000238,0x61726170, + 0x0000006d,0x00060005,0x0000023b,0x6f707865,0x746e656e,0x426c6169,0x00737469,0x00040005, + 0x00000242,0x61726170,0x0000006d,0x00030005,0x00000247,0x0079656b,0x00060005,0x00000249, + 0x44444150,0x545f4445,0x4e454b4f,0x00000053,0x00030005,0x00000253,0x00000061,0x00040005, + 0x00000257,0x726f6373,0x00007365,0x00030005,0x00000261,0x00000062,0x00030005,0x0000026c, + 0x00000063,0x00030005,0x00000278,0x00000064,0x00030005,0x00000284,0x00006261,0x00030005, + 0x00000288,0x00636261,0x00030005,0x00000291,0x00003065,0x00040005,0x00000292,0x61726170, + 0x0000006d,0x00040005,0x00000294,0x61726170,0x0000006d,0x00040005,0x00000296,0x61726170, + 0x0000006d,0x00040005,0x00000297,0x61726170,0x0000006d,0x00040005,0x00000299,0x61726170, + 0x0000006d,0x00040005,0x0000029b,0x61726170,0x0000006d,0x00040005,0x0000029d,0x61726170, + 0x0000006d,0x00040005,0x0000029e,0x61726170,0x0000006d,0x00030005,0x000002a1,0x00003165, + 0x00040005,0x000002a3,0x61726170,0x0000006d,0x00040005,0x000002a5,0x61726170,0x0000006d, + 0x00040005,0x000002a7,0x61726170,0x0000006d,0x00040005,0x000002a8,0x61726170,0x0000006d, + 0x00040005,0x000002ab,0x6e657665,0x00000000,0x00040005,0x000002ad,0x61726170,0x0000006d, + 0x00040005,0x000002af,0x61726170,0x0000006d,0x00040005,0x000002b1,0x61726170,0x0000006d, + 0x00040005,0x000002b2,0x61726170,0x0000006d,0x00030005,0x000002b5,0x0000306f,0x00040005, + 0x000002b6,0x61726170,0x0000006d,0x00040005,0x000002b8,0x61726170,0x0000006d,0x00040005, + 0x000002ba,0x61726170,0x0000006d,0x00040005,0x000002bb,0x61726170,0x0000006d,0x00040005, + 0x000002bd,0x61726170,0x0000006d,0x00040005,0x000002bf,0x61726170,0x0000006d,0x00040005, + 0x000002c1,0x61726170,0x0000006d,0x00040005,0x000002c2,0x61726170,0x0000006d,0x00030005, + 0x000002c5,0x0000316f,0x00040005,0x000002c7,0x61726170,0x0000006d,0x00040005,0x000002c9, + 0x61726170,0x0000006d,0x00040005,0x000002cb,0x61726170,0x0000006d,0x00040005,0x000002cc, + 0x61726170,0x0000006d,0x00030005,0x000002cf,0x0064646f,0x00040005,0x000002d1,0x61726170, + 0x0000006d,0x00040005,0x000002d3,0x61726170,0x0000006d,0x00040005,0x000002d5,0x61726170, + 0x0000006d,0x00040005,0x000002d6,0x61726170,0x0000006d,0x00040005,0x000002de,0x656e616c, + 0x00000000,0x00080005,0x000002e1,0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163,0x44496e6f, + 0x00000000,0x00040005,0x000002e5,0x64616568,0x00000000,0x00060005,0x000002e6,0x575f6c67, + 0x476b726f,0x70756f72,0x00004449,0x00040005,0x000002e9,0x6c695471,0x00000065,0x00040005, + 0x000002ec,0x69727473,0x00336564,0x00040005,0x000002ed,0x68737550,0x00000000,0x00050006, + 0x000002ed,0x00000000,0x656b6f74,0x0000736e,0x00050006,0x000002ed,0x00000001,0x64616568, + 0x00000073,0x00060006,0x000002ed,0x00000002,0x6e616863,0x736c656e,0x00000000,0x00030005, + 0x000002ef,0x00006370,0x00050005,0x000002f4,0x64616568,0x65736142,0x00000000,0x00040005, + 0x000002f8,0x73614271,0x00000065,0x00040005,0x000002ff,0x3079656b,0x00000000,0x00030005, + 0x00000307,0x00000074,0x00060005,0x00000308,0x535f6c67,0x72676275,0x4970756f,0x00000044, + 0x00030005,0x00000311,0x00003071,0x00030005,0x00000315,0x0000306b,0x00030005,0x0000031b, + 0x00000063,0x00030005,0x0000031d,0x00005f73,0x00030005,0x00000328,0x00005f61,0x00050005, + 0x0000032b,0x6d726f4e,0x7a696c61,0x00006465,0x00040006,0x0000032b,0x00000000,0x00766b71, + 0x00030005,0x0000032d,0x00000000,0x00030005,0x00000344,0x00005f62,0x00030005,0x00000364, + 0x00005f72,0x00040005,0x00000370,0x61726170,0x0000006d,0x00030005,0x00000379,0x00005f68, + 0x00060005,0x0000038a,0x4e5f6c67,0x75536d75,0x6f726762,0x00737075,0x00030005,0x00000392, + 0x00000069,0x00040005,0x0000039e,0x61726170,0x0000006d,0x00040005,0x000003a9,0x61746f74, + 0x0000006c,0x00040005,0x000003aa,0x65736162,0x00000000,0x00040005,0x000003b3,0x61726170, + 0x0000006d,0x00040005,0x000003b5,0x61726170,0x0000006d,0x00040005,0x000003bb,0x64646170, + 0x00676e69,0x00050005,0x000003c3,0x72726f63,0x69746365,0x00006e6f,0x00040005,0x000003c4, + 0x61726170,0x0000006d,0x00040005,0x000003ca,0x61726170,0x0000006d,0x00050005,0x000003d2, + 0x69636572,0x636f7270,0x00736c61,0x00040005,0x000003d4,0x61726170,0x0000006d,0x00030005, + 0x000003d8,0x00000069,0x00040005,0x000003e2,0x65646f63,0x00000000,0x00040005,0x000003e4, + 0x61726170,0x0000006d,0x00040005,0x000003e8,0x61726170,0x0000006d,0x00040005,0x000003ed, + 0x67696577,0x00737468,0x00030005,0x000003f5,0x00000069,0x00040005,0x00000401,0x7074756f, + 0x00737475,0x00040005,0x00000406,0x3079656b,0x00000000,0x00030005,0x0000040e,0x00000074, + 0x00030005,0x00000417,0x00003071,0x00030005,0x0000041b,0x00003063,0x00030005,0x0000041f, + 0x00005f68,0x00030005,0x0000042a,0x00000063,0x00030005,0x0000042d,0x0000626b,0x00030005, + 0x00000435,0x00005f73,0x00030005,0x0000043d,0x00005f61,0x00030005,0x00000452,0x00005f62, + 0x00030005,0x0000047a,0x00005f72,0x00040005,0x00000486,0x61726170,0x0000006d,0x00030005, + 0x0000048f,0x00005f68,0x00030005,0x000004a1,0x00000069,0x00030005,0x000004aa,0x00776f72, + 0x00050005,0x000004ae,0x706d6f63,0x6e656e6f,0x00000074,0x00040005,0x000004b1,0x656b6f74, + 0x0000006e,0x00040005,0x000004bd,0x756c6176,0x00000065,0x00040005,0x000004c7,0x61726170, + 0x0000006d,0x00050005,0x000004ca,0x65747441,0x6465646e,0x00000000,0x00060006,0x000004ca, + 0x00000000,0x65747461,0x6465646e,0x00000000,0x00030005,0x000004cc,0x00000000,0x00040005, + 0x000004d8,0x61726170,0x0000006d,0x00040005,0x000004da,0x61726170,0x0000006d,0x00030047, + 0x0000018c,0x0000002a,0x00030047,0x000001ab,0x0000002a,0x00030047,0x000001b8,0x0000002a, + 0x00030047,0x000001ce,0x0000002a,0x00030047,0x000001d3,0x0000002a,0x00030047,0x000001d7, + 0x0000002a,0x00030047,0x000001db,0x0000002a,0x00030047,0x000001df,0x0000002a,0x00030047, + 0x000001e3,0x0000002a,0x00030047,0x000001e4,0x0000002a,0x00040047,0x00000249,0x00000001, + 0x00000000,0x00030047,0x00000260,0x0000002a,0x00030047,0x0000026b,0x0000002a,0x00030047, + 0x00000277,0x0000002a,0x00030047,0x00000283,0x0000002a,0x00030047,0x00000287,0x0000002a, + 0x00030047,0x0000028b,0x0000002a,0x00030047,0x000002a0,0x0000002a,0x00030047,0x000002aa, + 0x0000002a,0x00030047,0x000002b4,0x0000002a,0x00030047,0x000002c4,0x0000002a,0x00030047, + 0x000002ce,0x0000002a,0x00030047,0x000002d8,0x0000002a,0x00040047,0x000002e1,0x0000000b, + 0x0000001b,0x00040047,0x000002e6,0x0000000b,0x0000001a,0x00030047,0x000002ed,0x00000002, + 0x00050048,0x000002ed,0x00000000,0x00000023,0x00000000,0x00050048,0x000002ed,0x00000001, + 0x00000023,0x00000004,0x00050048,0x000002ed,0x00000002,0x00000023,0x00000008,0x00040047, + 0x00000308,0x0000000b,0x00000028,0x00040047,0x0000032a,0x00000006,0x00000001,0x00030047, + 0x0000032b,0x00000002,0x00040048,0x0000032b,0x00000000,0x00000018,0x00050048,0x0000032b, + 0x00000000,0x00000023,0x00000000,0x00030047,0x0000032d,0x00000018,0x00040047,0x0000032d, + 0x00000021,0x00000000,0x00040047,0x0000032d,0x00000022,0x00000000,0x00040047,0x0000038a, + 0x0000000b,0x00000026,0x00030047,0x000003b8,0x0000002a,0x00030047,0x000003ba,0x0000002a, + 0x00030047,0x000003be,0x0000002a,0x00030047,0x000003c9,0x0000002a,0x00030047,0x000003cf, + 0x0000002a,0x00030047,0x000004c6,0x0000002a,0x00040047,0x000004c9,0x00000006,0x00000001, + 0x00030047,0x000004ca,0x00000002,0x00040048,0x000004ca,0x00000000,0x00000019,0x00050048, + 0x000004ca,0x00000000,0x00000023,0x00000000,0x00030047,0x000004cc,0x00000019,0x00040047, + 0x000004cc,0x00000021,0x00000005,0x00040047,0x000004cc,0x00000022,0x00000000,0x00020013, + 0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040020, + 0x00000007,0x00000007,0x00000006,0x00040021,0x00000008,0x00000006,0x00000007,0x00030016, + 0x0000000c,0x00000010,0x00040020,0x0000000d,0x00000007,0x0000000c,0x00040015,0x0000000e, + 0x00000020,0x00000000,0x00040021,0x0000000f,0x0000000e,0x0000000d,0x00040020,0x00000013, + 0x00000007,0x0000000e,0x00040021,0x00000014,0x0000000c,0x00000013,0x00050021,0x00000018, + 0x0000000e,0x00000013,0x00000013,0x00040021,0x0000001d,0x0000000e,0x00000013,0x00040021, + 0x00000021,0x00000006,0x0000000d,0x00040021,0x00000028,0x0000000c,0x0000000d,0x00060021, + 0x00000032,0x0000000c,0x0000000d,0x0000000d,0x0000000d,0x00070021,0x0000003b,0x0000000c, + 0x00000013,0x00000013,0x00000013,0x00000013,0x00050021,0x00000042,0x0000000c,0x00000013, + 0x00000013,0x0004002b,0x0000000e,0x0000004c,0x80000000,0x0004002b,0x0000000e,0x00000050, + 0x7fffffff,0x0004002b,0x0000000e,0x00000053,0x7f800000,0x00020014,0x00000054,0x0004002b, + 0x0000000e,0x0000005b,0x477ff000,0x0004002b,0x0000000e,0x00000064,0x38800000,0x0004002b, + 0x00000006,0x0000006b,0x4b800000,0x0004002b,0x00000006,0x00000072,0x33800000,0x0004002b, + 0x0000000e,0x0000007b,0x0000000d,0x0004002b,0x0000000e,0x0000007d,0x00000001,0x0004002b, + 0x0000000e,0x00000081,0x00000fff,0x0004002b,0x0000000e,0x00000085,0xffffe000,0x00040015, + 0x0000008e,0x00000010,0x00000000,0x0004002b,0x0000000e,0x00000094,0x0000ffff,0x0004002b, + 0x0000000e,0x000000b8,0x00000000,0x00040020,0x000000c0,0x00000007,0x00000054,0x0004002b, + 0x0000000e,0x000000c3,0x00007c00,0x0004002b,0x0000000e,0x000000c9,0x000003ff,0x0004002b, + 0x0000000e,0x000000d2,0x00007fff,0x0004002b,0x0000000e,0x000000d8,0x00000008,0x0004002b, + 0x0000000e,0x000000da,0x00000080,0x0004002b,0x0000000e,0x000000df,0x00008000,0x0004002b, + 0x0000000e,0x000000e5,0x0000000a,0x0004002b,0x0000000e,0x000000e7,0x0000001f,0x0004002b, + 0x0000000e,0x000000f1,0x0000007e,0x0004002b,0x0000000e,0x000000ff,0x00000400,0x0004002b, + 0x0000000e,0x00000109,0x0000000f,0x0004002b,0x0000000e,0x0000010b,0x00000010,0x0004002b, + 0x0000000e,0x0000011a,0x00000007,0x0004002b,0x0000000e,0x0000012d,0x00000006,0x0004002b, + 0x0000000e,0x00000136,0x00000003,0x0004002b,0x0000000e,0x00000145,0x00007bff,0x0004002b, + 0x00000006,0x0000014a,0x477ff000,0x0004002b,0x00000006,0x0000014c,0x3f000000,0x0004002b, + 0x00000006,0x0000017a,0x00000000,0x0004002b,0x00000006,0x00000185,0x3f800000,0x0004002b, + 0x0000000c,0x00000193,0x00000000,0x00040015,0x0000019a,0x00000020,0x00000001,0x00040020, + 0x0000019b,0x00000007,0x0000019a,0x0004002b,0x0000019a,0x0000019d,0x00000000,0x0004002b, + 0x0000019a,0x000001a4,0x00000002,0x0004002b,0x0000019a,0x000001c4,0x00000001,0x0004002b, + 0x0000000e,0x000001f3,0x00000017,0x0004002b,0x0000000e,0x000001f5,0x000000ff,0x0004002b, + 0x0000019a,0x000001f8,0x0000007f,0x0004002b,0x0000019a,0x000001fa,0xfffffff2,0x0004002b, + 0x0000019a,0x000001fe,0x0000000a,0x0004002b,0x0000000c,0x0000022c,0x00002dbb,0x0004002b, + 0x0000000c,0x0000022d,0x00003ed6,0x0004002b,0x0000000c,0x00000234,0x00003dc2,0x0004002b, + 0x0000000c,0x00000235,0x00003fe9,0x0004002b,0x0000000e,0x0000023d,0x00000004,0x0004002b, + 0x0000000e,0x0000023f,0x00004000,0x00040032,0x0000000e,0x00000249,0x000000c0,0x0004002b, + 0x0000000e,0x0000024e,0x00000002,0x00060034,0x0000000e,0x00000254,0x00000084,0x0000010b, + 0x00000249,0x0004001c,0x00000255,0x0000000c,0x00000254,0x00040020,0x00000256,0x00000004, + 0x00000255,0x0004003b,0x00000256,0x00000257,0x00000004,0x00040020,0x00000259,0x00000004, + 0x0000000c,0x0004002b,0x0000000e,0x00000267,0x00000018,0x0004002b,0x0000000e,0x0000026e, + 0x00000020,0x0004002b,0x0000000e,0x00000273,0x00000028,0x0004002b,0x0000000e,0x0000027a, + 0x00000030,0x0004002b,0x0000000e,0x0000027f,0x00000038,0x00040017,0x000002df,0x0000000e, + 0x00000003,0x00040020,0x000002e0,0x00000001,0x000002df,0x0004003b,0x000002e0,0x000002e1, + 0x00000001,0x00040020,0x000002e2,0x00000001,0x0000000e,0x0004003b,0x000002e0,0x000002e6, + 0x00000001,0x0005001e,0x000002ed,0x0000000e,0x0000000e,0x0000000e,0x00040020,0x000002ee, + 0x00000009,0x000002ed,0x0004003b,0x000002ee,0x000002ef,0x00000009,0x00040020,0x000002f0, + 0x00000009,0x0000000e,0x0004002b,0x0000000e,0x000002f6,0x00000060,0x0004003b,0x000002e2, + 0x00000308,0x00000001,0x00071168,0x00000319,0x00000006,0x00000136,0x0000010b,0x0000010b, + 0x0000024e,0x00040020,0x0000031a,0x00000007,0x00000319,0x0004002c,0x00000319,0x0000031c, + 0x0000017a,0x00040016,0x00000325,0x00000008,0x00001076,0x00071168,0x00000326,0x00000325, + 0x00000136,0x0000010b,0x0000026e,0x000000b8,0x00040020,0x00000327,0x00000007,0x00000326, + 0x00040015,0x00000329,0x00000008,0x00000000,0x0003001d,0x0000032a,0x00000329,0x0003001e, + 0x0000032b,0x0000032a,0x00040020,0x0000032c,0x0000000c,0x0000032b,0x0004003b,0x0000032c, + 0x0000032d,0x0000000c,0x00040020,0x00000336,0x0000000c,0x00000329,0x00071168,0x00000342, + 0x00000325,0x00000136,0x0000026e,0x0000010b,0x0000007d,0x00040020,0x00000343,0x00000007, + 0x00000342,0x00071168,0x00000377,0x0000000c,0x00000136,0x0000010b,0x0000010b,0x0000024e, + 0x00040020,0x00000378,0x00000007,0x00000377,0x0004003b,0x000002e2,0x0000038a,0x00000001, + 0x0004002b,0x0000000e,0x0000038e,0x00000040,0x0004002b,0x0000000e,0x00000391,0x00000108, + 0x00060034,0x0000000e,0x0000039a,0x00000084,0x0000010b,0x00000249,0x0004001c,0x000003d0, + 0x0000000c,0x0000010b,0x00040020,0x000003d1,0x00000004,0x000003d0,0x0004003b,0x000003d1, + 0x000003d2,0x00000004,0x00060034,0x0000000e,0x000003e0,0x00000084,0x0000010b,0x00000249, + 0x00060034,0x0000000e,0x000003ea,0x00000084,0x0000010b,0x00000249,0x0004001c,0x000003eb, + 0x00000329,0x000003ea,0x00040020,0x000003ec,0x00000004,0x000003eb,0x0004003b,0x000003ec, + 0x000003ed,0x00000004,0x00040020,0x000003f1,0x00000004,0x00000329,0x0004002b,0x0000000e, + 0x000003fd,0x00000200,0x0004001c,0x000003ff,0x0000000c,0x000003fd,0x00040020,0x00000400, + 0x00000004,0x000003ff,0x0004003b,0x00000400,0x00000401,0x00000004,0x0004002b,0x0000000e, + 0x000004ac,0x00000005,0x0003001d,0x000004c9,0x00000329,0x0003001e,0x000004ca,0x000004c9, + 0x00040020,0x000004cb,0x0000000c,0x000004ca,0x0004003b,0x000004cb,0x000004cc,0x0000000c, + 0x0006002c,0x000002df,0x000004e0,0x0000026e,0x0000007d,0x0000007d,0x00050036,0x00000002, + 0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000013,0x000002de, + 0x00000007,0x0004003b,0x00000013,0x000002e5,0x00000007,0x0004003b,0x00000013,0x000002e9, + 0x00000007,0x0004003b,0x00000013,0x000002ec,0x00000007,0x0004003b,0x00000013,0x000002f4, + 0x00000007,0x0004003b,0x00000013,0x000002f8,0x00000007,0x0004003b,0x00000013,0x000002ff, + 0x00000007,0x0004003b,0x00000013,0x00000307,0x00000007,0x0004003b,0x00000013,0x00000311, + 0x00000007,0x0004003b,0x00000013,0x00000315,0x00000007,0x0004003b,0x0000031a,0x0000031b, + 0x00000007,0x0004003b,0x00000013,0x0000031d,0x00000007,0x0004003b,0x00000327,0x00000328, + 0x00000007,0x0004003b,0x00000343,0x00000344,0x00000007,0x0004003b,0x0000019b,0x00000364, + 0x00000007,0x0004003b,0x00000007,0x00000370,0x00000007,0x0004003b,0x00000378,0x00000379, + 0x00000007,0x0004003b,0x00000013,0x00000392,0x00000007,0x0004003b,0x0000000d,0x0000039e, + 0x00000007,0x0004003b,0x0000000d,0x000003a9,0x00000007,0x0004003b,0x00000013,0x000003aa, + 0x00000007,0x0004003b,0x00000013,0x000003b3,0x00000007,0x0004003b,0x00000013,0x000003b5, + 0x00000007,0x0004003b,0x00000013,0x000003bb,0x00000007,0x0004003b,0x0000000d,0x000003c3, + 0x00000007,0x0004003b,0x0000000d,0x000003c4,0x00000007,0x0004003b,0x00000007,0x000003ca, + 0x00000007,0x0004003b,0x0000000d,0x000003d4,0x00000007,0x0004003b,0x00000013,0x000003d8, + 0x00000007,0x0004003b,0x00000013,0x000003e2,0x00000007,0x0004003b,0x0000000d,0x000003e4, + 0x00000007,0x0004003b,0x00000013,0x000003e8,0x00000007,0x0004003b,0x00000013,0x000003f5, + 0x00000007,0x0004003b,0x00000013,0x00000406,0x00000007,0x0004003b,0x00000013,0x0000040e, + 0x00000007,0x0004003b,0x00000013,0x00000417,0x00000007,0x0004003b,0x00000013,0x0000041b, + 0x00000007,0x0004003b,0x00000378,0x0000041f,0x00000007,0x0004003b,0x0000031a,0x0000042a, + 0x00000007,0x0004003b,0x00000013,0x0000042d,0x00000007,0x0004003b,0x00000013,0x00000435, + 0x00000007,0x0004003b,0x00000327,0x0000043d,0x00000007,0x0004003b,0x00000343,0x00000452, + 0x00000007,0x0004003b,0x0000019b,0x0000047a,0x00000007,0x0004003b,0x00000007,0x00000486, + 0x00000007,0x0004003b,0x00000378,0x0000048f,0x00000007,0x0004003b,0x00000013,0x000004a1, + 0x00000007,0x0004003b,0x00000013,0x000004aa,0x00000007,0x0004003b,0x00000013,0x000004ae, + 0x00000007,0x0004003b,0x00000013,0x000004b1,0x00000007,0x0004003b,0x00000007,0x000004bd, + 0x00000007,0x0004003b,0x00000007,0x000004c7,0x00000007,0x0004003b,0x0000000d,0x000004d8, + 0x00000007,0x0004003b,0x00000013,0x000004da,0x00000007,0x00050041,0x000002e2,0x000002e3, + 0x000002e1,0x000000b8,0x0004003d,0x0000000e,0x000002e4,0x000002e3,0x0003003e,0x000002de, + 0x000002e4,0x00050041,0x000002e2,0x000002e7,0x000002e6,0x000000b8,0x0004003d,0x0000000e, + 0x000002e8,0x000002e7,0x0003003e,0x000002e5,0x000002e8,0x00050041,0x000002e2,0x000002ea, + 0x000002e6,0x0000007d,0x0004003d,0x0000000e,0x000002eb,0x000002ea,0x0003003e,0x000002e9, + 0x000002eb,0x00050041,0x000002f0,0x000002f1,0x000002ef,0x000001a4,0x0004003d,0x0000000e, + 0x000002f2,0x000002f1,0x00050084,0x0000000e,0x000002f3,0x000002f2,0x00000136,0x0003003e, + 0x000002ec,0x000002f3,0x0004003d,0x0000000e,0x000002f5,0x000002e5,0x00050084,0x0000000e, + 0x000002f7,0x000002f5,0x000002f6,0x0003003e,0x000002f4,0x000002f7,0x0004003d,0x0000000e, + 0x000002f9,0x000002e9,0x00050084,0x0000000e,0x000002fa,0x000002f9,0x0000010b,0x0004003d, + 0x0000000e,0x000002fb,0x000002ec,0x00050084,0x0000000e,0x000002fc,0x000002fa,0x000002fb, + 0x0004003d,0x0000000e,0x000002fd,0x000002f4,0x00050080,0x0000000e,0x000002fe,0x000002fc, + 0x000002fd,0x0003003e,0x000002f8,0x000002fe,0x0003003e,0x000002ff,0x000000b8,0x000200f9, + 0x00000300,0x000200f8,0x00000300,0x000400f6,0x00000302,0x00000303,0x00000000,0x000200f9, + 0x00000304,0x000200f8,0x00000304,0x0004003d,0x0000000e,0x00000305,0x000002ff,0x000500b0, + 0x00000054,0x00000306,0x00000305,0x00000249,0x000400fa,0x00000306,0x00000301,0x00000302, + 0x000200f8,0x00000301,0x0004003d,0x0000000e,0x00000309,0x00000308,0x0003003e,0x00000307, + 0x00000309,0x000200f9,0x0000030a,0x000200f8,0x0000030a,0x000400f6,0x0000030c,0x0000030d, + 0x00000000,0x000200f9,0x0000030e,0x000200f8,0x0000030e,0x0004003d,0x0000000e,0x0000030f, + 0x00000307,0x000500b0,0x00000054,0x00000310,0x0000030f,0x0000023d,0x000400fa,0x00000310, + 0x0000030b,0x0000030c,0x000200f8,0x0000030b,0x0004003d,0x0000000e,0x00000312,0x00000307, + 0x00050086,0x0000000e,0x00000313,0x00000312,0x0000023d,0x00050084,0x0000000e,0x00000314, + 0x00000313,0x0000010b,0x0003003e,0x00000311,0x00000314,0x0004003d,0x0000000e,0x00000316, + 0x00000307,0x00050089,0x0000000e,0x00000317,0x00000316,0x0000023d,0x00050084,0x0000000e, + 0x00000318,0x00000317,0x0000010b,0x0003003e,0x00000315,0x00000318,0x0003003e,0x0000031b, + 0x0000031c,0x0003003e,0x0000031d,0x000000b8,0x000200f9,0x0000031e,0x000200f8,0x0000031e, + 0x000400f6,0x00000320,0x00000321,0x00000001,0x000200f9,0x00000322,0x000200f8,0x00000322, + 0x0004003d,0x0000000e,0x00000323,0x0000031d,0x000500b0,0x00000054,0x00000324,0x00000323, + 0x0000007d,0x000400fa,0x00000324,0x0000031f,0x00000320,0x000200f8,0x0000031f,0x0004003d, + 0x0000000e,0x0000032e,0x000002f8,0x0004003d,0x0000000e,0x0000032f,0x00000311,0x0004003d, + 0x0000000e,0x00000330,0x000002ec,0x00050084,0x0000000e,0x00000331,0x0000032f,0x00000330, + 0x00050080,0x0000000e,0x00000332,0x0000032e,0x00000331,0x0004003d,0x0000000e,0x00000333, + 0x0000031d,0x00050084,0x0000000e,0x00000334,0x00000333,0x0000026e,0x00050080,0x0000000e, + 0x00000335,0x00000332,0x00000334,0x00060041,0x00000336,0x00000337,0x0000032d,0x0000019d, + 0x00000335,0x0004003d,0x0000000e,0x00000338,0x000002f8,0x0004003d,0x0000000e,0x00000339, + 0x00000311,0x0004003d,0x0000000e,0x0000033a,0x000002ec,0x00050084,0x0000000e,0x0000033b, + 0x00000339,0x0000033a,0x00050080,0x0000000e,0x0000033c,0x00000338,0x0000033b,0x0004003d, + 0x0000000e,0x0000033d,0x0000031d,0x00050084,0x0000000e,0x0000033e,0x0000033d,0x0000026e, + 0x00050080,0x0000000e,0x0000033f,0x0000033c,0x0000033e,0x0004003d,0x0000000e,0x00000340, + 0x000002ec,0x00071169,0x00000326,0x00000341,0x00000337,0x0000019d,0x00000340,0x00000000, + 0x0003003e,0x00000328,0x00000341,0x0004003d,0x0000000e,0x00000345,0x000002ff,0x0004003d, + 0x0000000e,0x00000346,0x00000315,0x00050080,0x0000000e,0x00000347,0x00000345,0x00000346, + 0x0004003d,0x0000000e,0x00000348,0x000002ec,0x00050084,0x0000000e,0x00000349,0x00000347, + 0x00000348,0x0004003d,0x0000000e,0x0000034a,0x000002f4,0x00050080,0x0000000e,0x0000034b, + 0x00000349,0x0000034a,0x00050080,0x0000000e,0x0000034c,0x0000034b,0x0000026e,0x0004003d, + 0x0000000e,0x0000034d,0x0000031d,0x00050084,0x0000000e,0x0000034e,0x0000034d,0x0000026e, + 0x00050080,0x0000000e,0x0000034f,0x0000034c,0x0000034e,0x00060041,0x00000336,0x00000350, + 0x0000032d,0x0000019d,0x0000034f,0x0004003d,0x0000000e,0x00000351,0x000002ff,0x0004003d, + 0x0000000e,0x00000352,0x00000315,0x00050080,0x0000000e,0x00000353,0x00000351,0x00000352, + 0x0004003d,0x0000000e,0x00000354,0x000002ec,0x00050084,0x0000000e,0x00000355,0x00000353, + 0x00000354,0x0004003d,0x0000000e,0x00000356,0x000002f4,0x00050080,0x0000000e,0x00000357, + 0x00000355,0x00000356,0x00050080,0x0000000e,0x00000358,0x00000357,0x0000026e,0x0004003d, + 0x0000000e,0x00000359,0x0000031d,0x00050084,0x0000000e,0x0000035a,0x00000359,0x0000026e, + 0x00050080,0x0000000e,0x0000035b,0x00000358,0x0000035a,0x0004003d,0x0000000e,0x0000035c, + 0x000002ec,0x00071169,0x00000342,0x0000035d,0x00000350,0x000001c4,0x0000035c,0x00000000, + 0x0003003e,0x00000344,0x0000035d,0x0004003d,0x00000326,0x0000035e,0x00000328,0x0004003d, + 0x00000342,0x0000035f,0x00000344,0x0004003d,0x00000319,0x00000360,0x0000031b,0x0006116b, + 0x00000319,0x00000361,0x0000035e,0x0000035f,0x00000360,0x0003003e,0x0000031b,0x00000361, + 0x000200f9,0x00000321,0x000200f8,0x00000321,0x0004003d,0x0000000e,0x00000362,0x0000031d, + 0x00050080,0x0000000e,0x00000363,0x00000362,0x000001c4,0x0003003e,0x0000031d,0x00000363, + 0x000200f9,0x0000031e,0x000200f8,0x00000320,0x0003003e,0x00000364,0x0000019d,0x000200f9, + 0x00000365,0x000200f8,0x00000365,0x000400f6,0x00000367,0x00000368,0x00000000,0x000200f9, + 0x00000369,0x000200f8,0x00000369,0x0004003d,0x0000019a,0x0000036a,0x00000364,0x0004116c, + 0x0000000e,0x0000036b,0x00000319,0x0004007c,0x0000019a,0x0000036c,0x0000036b,0x000500b1, + 0x00000054,0x0000036d,0x0000036a,0x0000036c,0x000400fa,0x0000036d,0x00000366,0x00000367, + 0x000200f8,0x00000366,0x0004003d,0x0000019a,0x0000036e,0x00000364,0x0004003d,0x0000019a, + 0x0000036f,0x00000364,0x00050041,0x00000007,0x00000371,0x0000031b,0x0000036f,0x0004003d, + 0x00000006,0x00000372,0x00000371,0x0003003e,0x00000370,0x00000372,0x00050039,0x00000006, + 0x00000373,0x0000000a,0x00000370,0x00050041,0x00000007,0x00000374,0x0000031b,0x0000036e, + 0x0003003e,0x00000374,0x00000373,0x000200f9,0x00000368,0x000200f8,0x00000368,0x0004003d, + 0x0000019a,0x00000375,0x00000364,0x00050080,0x0000019a,0x00000376,0x00000375,0x000001c4, + 0x0003003e,0x00000364,0x00000376,0x000200f9,0x00000365,0x000200f8,0x00000367,0x0004003d, + 0x00000319,0x0000037a,0x0000031b,0x00040073,0x00000377,0x0000037b,0x0000037a,0x0003003e, + 0x00000379,0x0000037b,0x0004003d,0x00000377,0x0000037c,0x00000379,0x0004003d,0x0000000e, + 0x0000037d,0x00000311,0x00050084,0x0000000e,0x0000037e,0x0000037d,0x00000249,0x0004003d, + 0x0000000e,0x0000037f,0x000002ff,0x00050080,0x0000000e,0x00000380,0x0000037e,0x0000037f, + 0x0004003d,0x0000000e,0x00000381,0x00000315,0x00050080,0x0000000e,0x00000382,0x00000380, + 0x00000381,0x00050041,0x00000259,0x00000383,0x00000257,0x00000382,0x0004003d,0x0000000e, + 0x00000384,0x00000311,0x00050084,0x0000000e,0x00000385,0x00000384,0x00000249,0x0004003d, + 0x0000000e,0x00000386,0x000002ff,0x00050080,0x0000000e,0x00000387,0x00000385,0x00000386, + 0x0004003d,0x0000000e,0x00000388,0x00000315,0x00050080,0x0000000e,0x00000389,0x00000387, + 0x00000388,0x0007116a,0x00000383,0x0000037c,0x0000019d,0x00000249,0x00000028,0x0000024e, + 0x000200f9,0x0000030d,0x000200f8,0x0000030d,0x0004003d,0x0000000e,0x0000038b,0x0000038a, + 0x0004003d,0x0000000e,0x0000038c,0x00000307,0x00050080,0x0000000e,0x0000038d,0x0000038c, + 0x0000038b,0x0003003e,0x00000307,0x0000038d,0x000200f9,0x0000030a,0x000200f8,0x0000030c, + 0x000200f9,0x00000303,0x000200f8,0x00000303,0x0004003d,0x0000000e,0x0000038f,0x000002ff, + 0x00050080,0x0000000e,0x00000390,0x0000038f,0x0000038e,0x0003003e,0x000002ff,0x00000390, + 0x000200f9,0x00000300,0x000200f8,0x00000302,0x000400e0,0x0000024e,0x0000024e,0x00000391, + 0x0004003d,0x0000000e,0x00000393,0x000002de,0x0003003e,0x00000392,0x00000393,0x000200f9, + 0x00000394,0x000200f8,0x00000394,0x000400f6,0x00000396,0x00000397,0x00000000,0x000200f9, + 0x00000398,0x000200f8,0x00000398,0x0004003d,0x0000000e,0x00000399,0x00000392,0x000500b0, + 0x00000054,0x0000039b,0x00000399,0x0000039a,0x000400fa,0x0000039b,0x00000395,0x00000396, + 0x000200f8,0x00000395,0x0004003d,0x0000000e,0x0000039c,0x00000392,0x0004003d,0x0000000e, + 0x0000039d,0x00000392,0x00050041,0x00000259,0x0000039f,0x00000257,0x0000039d,0x0006003d, + 0x0000000c,0x000003a0,0x0000039f,0x00000030,0x0000024e,0x0003003e,0x0000039e,0x000003a0, + 0x00050039,0x0000000c,0x000003a1,0x00000039,0x0000039e,0x00050041,0x00000259,0x000003a2, + 0x00000257,0x0000039c,0x0005003e,0x000003a2,0x000003a1,0x00000028,0x0000024e,0x000200f9, + 0x00000397,0x000200f8,0x00000397,0x0004003d,0x0000000e,0x000003a3,0x00000392,0x00050080, + 0x0000000e,0x000003a4,0x000003a3,0x0000026e,0x0003003e,0x00000392,0x000003a4,0x000200f9, + 0x00000394,0x000200f8,0x00000396,0x000400e0,0x0000024e,0x0000024e,0x00000391,0x0004003d, + 0x0000000e,0x000003a5,0x000002de,0x000500b0,0x00000054,0x000003a6,0x000003a5,0x0000010b, + 0x000300f7,0x000003a8,0x00000000,0x000400fa,0x000003a6,0x000003a7,0x000003a8,0x000200f8, + 0x000003a7,0x0003003e,0x000003a9,0x00000193,0x0003003e,0x000003aa,0x000000b8,0x000200f9, + 0x000003ab,0x000200f8,0x000003ab,0x000400f6,0x000003ad,0x000003ae,0x00000000,0x000200f9, + 0x000003af,0x000200f8,0x000003af,0x0004003d,0x0000000e,0x000003b0,0x000003aa,0x000500b0, + 0x00000054,0x000003b1,0x000003b0,0x00000249,0x000400fa,0x000003b1,0x000003ac,0x000003ad, + 0x000200f8,0x000003ac,0x0004003d,0x0000000c,0x000003b2,0x000003a9,0x0004003d,0x0000000e, + 0x000003b4,0x000002de,0x0003003e,0x000003b3,0x000003b4,0x0004003d,0x0000000e,0x000003b6, + 0x000003aa,0x0003003e,0x000003b5,0x000003b6,0x00060039,0x0000000c,0x000003b7,0x00000045, + 0x000003b3,0x000003b5,0x00050081,0x0000000c,0x000003b8,0x000003b2,0x000003b7,0x0003003e, + 0x000003a9,0x000003b8,0x000200f9,0x000003ae,0x000200f8,0x000003ae,0x0004003d,0x0000000e, + 0x000003b9,0x000003aa,0x00050080,0x0000000e,0x000003ba,0x000003b9,0x0000038e,0x0003003e, + 0x000003aa,0x000003ba,0x000200f9,0x000003ab,0x000200f8,0x000003ad,0x00050041,0x000002f0, + 0x000003bc,0x000002ef,0x0000019d,0x0004003d,0x0000000e,0x000003bd,0x000003bc,0x00050082, + 0x0000000e,0x000003be,0x00000249,0x000003bd,0x0003003e,0x000003bb,0x000003be,0x0004003d, + 0x0000000e,0x000003bf,0x000003bb,0x000500ac,0x00000054,0x000003c0,0x000003bf,0x000000b8, + 0x000300f7,0x000003c2,0x00000000,0x000400fa,0x000003c0,0x000003c1,0x000003c2,0x000200f8, + 0x000003c1,0x0003003e,0x000003c4,0x00000193,0x00050039,0x0000000c,0x000003c5,0x00000039, + 0x000003c4,0x00040073,0x00000006,0x000003c6,0x000003c5,0x0004003d,0x0000000e,0x000003c7, + 0x000003bb,0x00040070,0x00000006,0x000003c8,0x000003c7,0x00050085,0x00000006,0x000003c9, + 0x000003c6,0x000003c8,0x0003003e,0x000003ca,0x000003c9,0x00050039,0x00000006,0x000003cb, + 0x0000000a,0x000003ca,0x00040073,0x0000000c,0x000003cc,0x000003cb,0x0003003e,0x000003c3, + 0x000003cc,0x0004003d,0x0000000c,0x000003cd,0x000003a9,0x0004003d,0x0000000c,0x000003ce, + 0x000003c3,0x00050083,0x0000000c,0x000003cf,0x000003cd,0x000003ce,0x0003003e,0x000003a9, + 0x000003cf,0x000200f9,0x000003c2,0x000200f8,0x000003c2,0x0004003d,0x0000000e,0x000003d3, + 0x000002de,0x0004003d,0x0000000c,0x000003d5,0x000003a9,0x0003003e,0x000003d4,0x000003d5, + 0x00050039,0x0000000c,0x000003d6,0x00000030,0x000003d4,0x00050041,0x00000259,0x000003d7, + 0x000003d2,0x000003d3,0x0005003e,0x000003d7,0x000003d6,0x00000028,0x0000024e,0x000200f9, + 0x000003a8,0x000200f8,0x000003a8,0x0004003d,0x0000000e,0x000003d9,0x000002de,0x0003003e, + 0x000003d8,0x000003d9,0x000200f9,0x000003da,0x000200f8,0x000003da,0x000400f6,0x000003dc, + 0x000003dd,0x00000000,0x000200f9,0x000003de,0x000200f8,0x000003de,0x0004003d,0x0000000e, + 0x000003df,0x000003d8,0x000500b0,0x00000054,0x000003e1,0x000003df,0x000003e0,0x000400fa, + 0x000003e1,0x000003db,0x000003dc,0x000200f8,0x000003db,0x0004003d,0x0000000e,0x000003e3, + 0x000003d8,0x00050041,0x00000259,0x000003e5,0x00000257,0x000003e3,0x0006003d,0x0000000c, + 0x000003e6,0x000003e5,0x00000030,0x0000024e,0x0003003e,0x000003e4,0x000003e6,0x00050039, + 0x0000000e,0x000003e7,0x00000011,0x000003e4,0x0003003e,0x000003e8,0x000003e7,0x00050039, + 0x0000000e,0x000003e9,0x0000001f,0x000003e8,0x0003003e,0x000003e2,0x000003e9,0x0004003d, + 0x0000000e,0x000003ee,0x000003d8,0x0004003d,0x0000000e,0x000003ef,0x000003e2,0x00040071, + 0x00000329,0x000003f0,0x000003ef,0x00050041,0x000003f1,0x000003f2,0x000003ed,0x000003ee, + 0x0005003e,0x000003f2,0x000003f0,0x00000028,0x0000024e,0x000200f9,0x000003dd,0x000200f8, + 0x000003dd,0x0004003d,0x0000000e,0x000003f3,0x000003d8,0x00050080,0x0000000e,0x000003f4, + 0x000003f3,0x0000026e,0x0003003e,0x000003d8,0x000003f4,0x000200f9,0x000003da,0x000200f8, + 0x000003dc,0x0004003d,0x0000000e,0x000003f6,0x000002de,0x0003003e,0x000003f5,0x000003f6, + 0x000200f9,0x000003f7,0x000200f8,0x000003f7,0x000400f6,0x000003f9,0x000003fa,0x00000000, + 0x000200f9,0x000003fb,0x000200f8,0x000003fb,0x0004003d,0x0000000e,0x000003fc,0x000003f5, + 0x000500b0,0x00000054,0x000003fe,0x000003fc,0x000003fd,0x000400fa,0x000003fe,0x000003f8, + 0x000003f9,0x000200f8,0x000003f8,0x0004003d,0x0000000e,0x00000402,0x000003f5,0x00050041, + 0x00000259,0x00000403,0x00000401,0x00000402,0x0005003e,0x00000403,0x00000193,0x00000028, + 0x0000024e,0x000200f9,0x000003fa,0x000200f8,0x000003fa,0x0004003d,0x0000000e,0x00000404, + 0x000003f5,0x00050080,0x0000000e,0x00000405,0x00000404,0x0000026e,0x0003003e,0x000003f5, + 0x00000405,0x000200f9,0x000003f7,0x000200f8,0x000003f9,0x000400e0,0x0000024e,0x0000024e, + 0x00000391,0x0003003e,0x00000406,0x000000b8,0x000200f9,0x00000407,0x000200f8,0x00000407, + 0x000400f6,0x00000409,0x0000040a,0x00000000,0x000200f9,0x0000040b,0x000200f8,0x0000040b, + 0x0004003d,0x0000000e,0x0000040c,0x00000406,0x000500b0,0x00000054,0x0000040d,0x0000040c, + 0x00000249,0x000400fa,0x0000040d,0x00000408,0x00000409,0x000200f8,0x00000408,0x0004003d, + 0x0000000e,0x0000040f,0x00000308,0x0003003e,0x0000040e,0x0000040f,0x000200f9,0x00000410, + 0x000200f8,0x00000410,0x000400f6,0x00000412,0x00000413,0x00000000,0x000200f9,0x00000414, + 0x000200f8,0x00000414,0x0004003d,0x0000000e,0x00000415,0x0000040e,0x000500b0,0x00000054, + 0x00000416,0x00000415,0x0000024e,0x000400fa,0x00000416,0x00000411,0x00000412,0x000200f8, + 0x00000411,0x0004003d,0x0000000e,0x00000418,0x0000040e,0x00050086,0x0000000e,0x00000419, + 0x00000418,0x0000024e,0x00050084,0x0000000e,0x0000041a,0x00000419,0x0000010b,0x0003003e, + 0x00000417,0x0000041a,0x0004003d,0x0000000e,0x0000041c,0x0000040e,0x00050089,0x0000000e, + 0x0000041d,0x0000041c,0x0000024e,0x00050084,0x0000000e,0x0000041e,0x0000041d,0x0000010b, + 0x0003003e,0x0000041b,0x0000041e,0x0004003d,0x0000000e,0x00000420,0x00000417,0x00050084, + 0x0000000e,0x00000421,0x00000420,0x0000026e,0x0004003d,0x0000000e,0x00000422,0x0000041b, + 0x00050080,0x0000000e,0x00000423,0x00000421,0x00000422,0x00050041,0x00000259,0x00000424, + 0x00000401,0x00000423,0x0004003d,0x0000000e,0x00000425,0x00000417,0x00050084,0x0000000e, + 0x00000426,0x00000425,0x0000026e,0x0004003d,0x0000000e,0x00000427,0x0000041b,0x00050080, + 0x0000000e,0x00000428,0x00000426,0x00000427,0x00081169,0x00000377,0x00000429,0x00000424, + 0x0000019d,0x0000026e,0x00000030,0x0000024e,0x0003003e,0x0000041f,0x00000429,0x0004003d, + 0x00000377,0x0000042b,0x0000041f,0x00040073,0x00000319,0x0000042c,0x0000042b,0x0003003e, + 0x0000042a,0x0000042c,0x0003003e,0x0000042d,0x000000b8,0x000200f9,0x0000042e,0x000200f8, + 0x0000042e,0x000400f6,0x00000430,0x00000431,0x00000001,0x000200f9,0x00000432,0x000200f8, + 0x00000432,0x0004003d,0x0000000e,0x00000433,0x0000042d,0x000500b0,0x00000054,0x00000434, + 0x00000433,0x0000038e,0x000400fa,0x00000434,0x0000042f,0x00000430,0x000200f8,0x0000042f, + 0x0003003e,0x00000435,0x000000b8,0x000200f9,0x00000436,0x000200f8,0x00000436,0x000400f6, + 0x00000438,0x00000439,0x00000001,0x000200f9,0x0000043a,0x000200f8,0x0000043a,0x0004003d, + 0x0000000e,0x0000043b,0x00000435,0x000500b0,0x00000054,0x0000043c,0x0000043b,0x0000007d, + 0x000400fa,0x0000043c,0x00000437,0x00000438,0x000200f8,0x00000437,0x0004003d,0x0000000e, + 0x0000043e,0x00000417,0x00050084,0x0000000e,0x0000043f,0x0000043e,0x00000249,0x0004003d, + 0x0000000e,0x00000440,0x00000406,0x00050080,0x0000000e,0x00000441,0x0000043f,0x00000440, + 0x0004003d,0x0000000e,0x00000442,0x0000042d,0x00050080,0x0000000e,0x00000443,0x00000441, + 0x00000442,0x0004003d,0x0000000e,0x00000444,0x00000435,0x00050084,0x0000000e,0x00000445, + 0x00000444,0x0000026e,0x00050080,0x0000000e,0x00000446,0x00000443,0x00000445,0x00050041, + 0x000003f1,0x00000447,0x000003ed,0x00000446,0x0004003d,0x0000000e,0x00000448,0x00000417, + 0x00050084,0x0000000e,0x00000449,0x00000448,0x00000249,0x0004003d,0x0000000e,0x0000044a, + 0x00000406,0x00050080,0x0000000e,0x0000044b,0x00000449,0x0000044a,0x0004003d,0x0000000e, + 0x0000044c,0x0000042d,0x00050080,0x0000000e,0x0000044d,0x0000044b,0x0000044c,0x0004003d, + 0x0000000e,0x0000044e,0x00000435,0x00050084,0x0000000e,0x0000044f,0x0000044e,0x0000026e, + 0x00050080,0x0000000e,0x00000450,0x0000044d,0x0000044f,0x00081169,0x00000326,0x00000451, + 0x00000447,0x0000019d,0x00000249,0x00000030,0x0000024e,0x0003003e,0x0000043d,0x00000451, + 0x0004003d,0x0000000e,0x00000453,0x00000406,0x0004003d,0x0000000e,0x00000454,0x0000042d, + 0x00050080,0x0000000e,0x00000455,0x00000453,0x00000454,0x0004003d,0x0000000e,0x00000456, + 0x000002ec,0x00050084,0x0000000e,0x00000457,0x00000455,0x00000456,0x0004003d,0x0000000e, + 0x00000458,0x000002f4,0x00050080,0x0000000e,0x00000459,0x00000457,0x00000458,0x00050080, + 0x0000000e,0x0000045a,0x00000459,0x0000038e,0x0004003d,0x0000000e,0x0000045b,0x0000041b, + 0x00050080,0x0000000e,0x0000045c,0x0000045a,0x0000045b,0x0004003d,0x0000000e,0x0000045d, + 0x00000435,0x0004003d,0x0000000e,0x0000045e,0x000002ec,0x00050084,0x0000000e,0x0000045f, + 0x0000026e,0x0000045e,0x00050084,0x0000000e,0x00000460,0x0000045d,0x0000045f,0x00050080, + 0x0000000e,0x00000461,0x0000045c,0x00000460,0x00060041,0x00000336,0x00000462,0x0000032d, + 0x0000019d,0x00000461,0x0004003d,0x0000000e,0x00000463,0x00000406,0x0004003d,0x0000000e, + 0x00000464,0x0000042d,0x00050080,0x0000000e,0x00000465,0x00000463,0x00000464,0x0004003d, + 0x0000000e,0x00000466,0x000002ec,0x00050084,0x0000000e,0x00000467,0x00000465,0x00000466, + 0x0004003d,0x0000000e,0x00000468,0x000002f4,0x00050080,0x0000000e,0x00000469,0x00000467, + 0x00000468,0x00050080,0x0000000e,0x0000046a,0x00000469,0x0000038e,0x0004003d,0x0000000e, + 0x0000046b,0x0000041b,0x00050080,0x0000000e,0x0000046c,0x0000046a,0x0000046b,0x0004003d, + 0x0000000e,0x0000046d,0x00000435,0x0004003d,0x0000000e,0x0000046e,0x000002ec,0x00050084, + 0x0000000e,0x0000046f,0x0000026e,0x0000046e,0x00050084,0x0000000e,0x00000470,0x0000046d, + 0x0000046f,0x00050080,0x0000000e,0x00000471,0x0000046c,0x00000470,0x0004003d,0x0000000e, + 0x00000472,0x000002ec,0x00071169,0x00000342,0x00000473,0x00000462,0x0000019d,0x00000472, + 0x00000000,0x0003003e,0x00000452,0x00000473,0x0004003d,0x00000326,0x00000474,0x0000043d, + 0x0004003d,0x00000342,0x00000475,0x00000452,0x0004003d,0x00000319,0x00000476,0x0000042a, + 0x0006116b,0x00000319,0x00000477,0x00000474,0x00000475,0x00000476,0x0003003e,0x0000042a, + 0x00000477,0x000200f9,0x00000439,0x000200f8,0x00000439,0x0004003d,0x0000000e,0x00000478, + 0x00000435,0x00050080,0x0000000e,0x00000479,0x00000478,0x000001c4,0x0003003e,0x00000435, + 0x00000479,0x000200f9,0x00000436,0x000200f8,0x00000438,0x0003003e,0x0000047a,0x0000019d, + 0x000200f9,0x0000047b,0x000200f8,0x0000047b,0x000400f6,0x0000047d,0x0000047e,0x00000000, + 0x000200f9,0x0000047f,0x000200f8,0x0000047f,0x0004003d,0x0000019a,0x00000480,0x0000047a, + 0x0004116c,0x0000000e,0x00000481,0x00000319,0x0004007c,0x0000019a,0x00000482,0x00000481, + 0x000500b1,0x00000054,0x00000483,0x00000480,0x00000482,0x000400fa,0x00000483,0x0000047c, + 0x0000047d,0x000200f8,0x0000047c,0x0004003d,0x0000019a,0x00000484,0x0000047a,0x0004003d, + 0x0000019a,0x00000485,0x0000047a,0x00050041,0x00000007,0x00000487,0x0000042a,0x00000485, + 0x0004003d,0x00000006,0x00000488,0x00000487,0x0003003e,0x00000486,0x00000488,0x00050039, + 0x00000006,0x00000489,0x0000000a,0x00000486,0x00050041,0x00000007,0x0000048a,0x0000042a, + 0x00000484,0x0003003e,0x0000048a,0x00000489,0x000200f9,0x0000047e,0x000200f8,0x0000047e, + 0x0004003d,0x0000019a,0x0000048b,0x0000047a,0x00050080,0x0000019a,0x0000048c,0x0000048b, + 0x000001c4,0x0003003e,0x0000047a,0x0000048c,0x000200f9,0x0000047b,0x000200f8,0x0000047d, + 0x000200f9,0x00000431,0x000200f8,0x00000431,0x0004003d,0x0000000e,0x0000048d,0x0000042d, + 0x00050080,0x0000000e,0x0000048e,0x0000048d,0x0000026e,0x0003003e,0x0000042d,0x0000048e, + 0x000200f9,0x0000042e,0x000200f8,0x00000430,0x0004003d,0x00000319,0x00000490,0x0000042a, + 0x00040073,0x00000377,0x00000491,0x00000490,0x0003003e,0x0000048f,0x00000491,0x0004003d, + 0x00000377,0x00000492,0x0000048f,0x0004003d,0x0000000e,0x00000493,0x00000417,0x00050084, + 0x0000000e,0x00000494,0x00000493,0x0000026e,0x0004003d,0x0000000e,0x00000495,0x0000041b, + 0x00050080,0x0000000e,0x00000496,0x00000494,0x00000495,0x00050041,0x00000259,0x00000497, + 0x00000401,0x00000496,0x0004003d,0x0000000e,0x00000498,0x00000417,0x00050084,0x0000000e, + 0x00000499,0x00000498,0x0000026e,0x0004003d,0x0000000e,0x0000049a,0x0000041b,0x00050080, + 0x0000000e,0x0000049b,0x00000499,0x0000049a,0x0007116a,0x00000497,0x00000492,0x0000019d, + 0x0000026e,0x00000028,0x0000024e,0x000200f9,0x00000413,0x000200f8,0x00000413,0x0004003d, + 0x0000000e,0x0000049c,0x0000038a,0x0004003d,0x0000000e,0x0000049d,0x0000040e,0x00050080, + 0x0000000e,0x0000049e,0x0000049d,0x0000049c,0x0003003e,0x0000040e,0x0000049e,0x000200f9, + 0x00000410,0x000200f8,0x00000412,0x000400e0,0x0000024e,0x0000024e,0x00000391,0x000200f9, + 0x0000040a,0x000200f8,0x0000040a,0x0004003d,0x0000000e,0x0000049f,0x00000406,0x00050080, + 0x0000000e,0x000004a0,0x0000049f,0x0000038e,0x0003003e,0x00000406,0x000004a0,0x000200f9, + 0x00000407,0x000200f8,0x00000409,0x0004003d,0x0000000e,0x000004a2,0x000002de,0x0003003e, + 0x000004a1,0x000004a2,0x000200f9,0x000004a3,0x000200f8,0x000004a3,0x000400f6,0x000004a5, + 0x000004a6,0x00000000,0x000200f9,0x000004a7,0x000200f8,0x000004a7,0x0004003d,0x0000000e, + 0x000004a8,0x000004a1,0x000500b0,0x00000054,0x000004a9,0x000004a8,0x000003fd,0x000400fa, + 0x000004a9,0x000004a4,0x000004a5,0x000200f8,0x000004a4,0x0004003d,0x0000000e,0x000004ab, + 0x000004a1,0x000500c2,0x0000000e,0x000004ad,0x000004ab,0x000004ac,0x0003003e,0x000004aa, + 0x000004ad,0x0004003d,0x0000000e,0x000004af,0x000004a1,0x000500c7,0x0000000e,0x000004b0, + 0x000004af,0x000000e7,0x0003003e,0x000004ae,0x000004b0,0x0004003d,0x0000000e,0x000004b2, + 0x000002e9,0x00050084,0x0000000e,0x000004b3,0x000004b2,0x0000010b,0x0004003d,0x0000000e, + 0x000004b4,0x000004aa,0x00050080,0x0000000e,0x000004b5,0x000004b3,0x000004b4,0x0003003e, + 0x000004b1,0x000004b5,0x0004003d,0x0000000e,0x000004b6,0x000004b1,0x00050041,0x000002f0, + 0x000004b7,0x000002ef,0x0000019d,0x0004003d,0x0000000e,0x000004b8,0x000004b7,0x000500ae, + 0x00000054,0x000004b9,0x000004b6,0x000004b8,0x000300f7,0x000004bb,0x00000000,0x000400fa, + 0x000004b9,0x000004ba,0x000004bb,0x000200f8,0x000004ba,0x000200f9,0x000004a6,0x000200f8, + 0x000004bb,0x0004003d,0x0000000e,0x000004be,0x000004a1,0x00050041,0x00000259,0x000004bf, + 0x00000401,0x000004be,0x0006003d,0x0000000c,0x000004c0,0x000004bf,0x00000030,0x0000024e, + 0x00040073,0x00000006,0x000004c1,0x000004c0,0x0004003d,0x0000000e,0x000004c2,0x000004aa, + 0x00050041,0x00000259,0x000004c3,0x000003d2,0x000004c2,0x0006003d,0x0000000c,0x000004c4, + 0x000004c3,0x00000030,0x0000024e,0x00040073,0x00000006,0x000004c5,0x000004c4,0x00050085, + 0x00000006,0x000004c6,0x000004c1,0x000004c5,0x0003003e,0x000004c7,0x000004c6,0x00050039, + 0x00000006,0x000004c8,0x0000000a,0x000004c7,0x0003003e,0x000004bd,0x000004c8,0x0004003d, + 0x0000000e,0x000004cd,0x000004b1,0x00050041,0x000002f0,0x000004ce,0x000002ef,0x000001a4, + 0x0004003d,0x0000000e,0x000004cf,0x000004ce,0x00050084,0x0000000e,0x000004d0,0x000004cd, + 0x000004cf,0x0004003d,0x0000000e,0x000004d1,0x000002e5,0x00050084,0x0000000e,0x000004d2, + 0x000004d1,0x0000026e,0x00050080,0x0000000e,0x000004d3,0x000004d0,0x000004d2,0x0004003d, + 0x0000000e,0x000004d4,0x000004ae,0x00050080,0x0000000e,0x000004d5,0x000004d3,0x000004d4, + 0x0004003d,0x00000006,0x000004d6,0x000004bd,0x00040073,0x0000000c,0x000004d7,0x000004d6, + 0x0003003e,0x000004d8,0x000004d7,0x00050039,0x0000000e,0x000004d9,0x00000011,0x000004d8, + 0x0003003e,0x000004da,0x000004d9,0x00050039,0x0000000e,0x000004db,0x0000001f,0x000004da, + 0x00040071,0x00000329,0x000004dc,0x000004db,0x00060041,0x00000336,0x000004dd,0x000004cc, + 0x0000019d,0x000004d5,0x0003003e,0x000004dd,0x000004dc,0x000200f9,0x000004a6,0x000200f8, + 0x000004a6,0x0004003d,0x0000000e,0x000004de,0x000004a1,0x00050080,0x0000000e,0x000004df, + 0x000004de,0x0000026e,0x0003003e,0x000004a1,0x000004df,0x000200f9,0x000004a3,0x000200f8, + 0x000004a5,0x000100fd,0x00010038,0x00050036,0x00000006,0x0000000a,0x00000000,0x00000008, + 0x00030037,0x00000007,0x00000009,0x000200f8,0x0000000b,0x0004003b,0x00000013,0x00000047, + 0x00000007,0x0004003b,0x00000013,0x0000004a,0x00000007,0x0004003b,0x00000013,0x0000004e, + 0x00000007,0x0004003b,0x00000007,0x00000068,0x00000007,0x0004003b,0x00000013,0x00000079, + 0x00000007,0x0004003b,0x00000013,0x0000007f,0x00000007,0x0004003d,0x00000006,0x00000048, + 0x00000009,0x0004007c,0x0000000e,0x00000049,0x00000048,0x0003003e,0x00000047,0x00000049, + 0x0004003d,0x0000000e,0x0000004b,0x00000047,0x000500c7,0x0000000e,0x0000004d,0x0000004b, + 0x0000004c,0x0003003e,0x0000004a,0x0000004d,0x0004003d,0x0000000e,0x0000004f,0x00000047, + 0x000500c7,0x0000000e,0x00000051,0x0000004f,0x00000050,0x0003003e,0x0000004e,0x00000051, + 0x0004003d,0x0000000e,0x00000052,0x0000004e,0x000500ae,0x00000054,0x00000055,0x00000052, + 0x00000053,0x000300f7,0x00000057,0x00000000,0x000400fa,0x00000055,0x00000056,0x00000057, + 0x000200f8,0x00000056,0x0004003d,0x00000006,0x00000058,0x00000009,0x000200fe,0x00000058, + 0x000200f8,0x00000057,0x0004003d,0x0000000e,0x0000005a,0x0000004e,0x000500ae,0x00000054, + 0x0000005c,0x0000005a,0x0000005b,0x000300f7,0x0000005e,0x00000000,0x000400fa,0x0000005c, + 0x0000005d,0x0000005e,0x000200f8,0x0000005d,0x0004003d,0x0000000e,0x0000005f,0x0000004a, + 0x000500c5,0x0000000e,0x00000060,0x0000005f,0x00000053,0x0004007c,0x00000006,0x00000061, + 0x00000060,0x000200fe,0x00000061,0x000200f8,0x0000005e,0x0004003d,0x0000000e,0x00000063, + 0x0000004e,0x000500b0,0x00000054,0x00000065,0x00000063,0x00000064,0x000300f7,0x00000067, + 0x00000000,0x000400fa,0x00000065,0x00000066,0x00000067,0x000200f8,0x00000066,0x0004003d, + 0x0000000e,0x00000069,0x0000004e,0x0004007c,0x00000006,0x0000006a,0x00000069,0x00050085, + 0x00000006,0x0000006c,0x0000006a,0x0000006b,0x0006000c,0x00000006,0x0000006d,0x00000001, + 0x00000002,0x0000006c,0x0003003e,0x00000068,0x0000006d,0x0004003d,0x0000000e,0x0000006e, + 0x0000004a,0x0004007c,0x00000006,0x0000006f,0x0000006e,0x0004003d,0x0000000e,0x00000070, + 0x0000004a,0x0004003d,0x00000006,0x00000071,0x00000068,0x00050085,0x00000006,0x00000073, + 0x00000071,0x00000072,0x0004007c,0x0000000e,0x00000074,0x00000073,0x000500c5,0x0000000e, + 0x00000075,0x00000070,0x00000074,0x0004007c,0x00000006,0x00000076,0x00000075,0x00050081, + 0x00000006,0x00000077,0x0000006f,0x00000076,0x000200fe,0x00000077,0x000200f8,0x00000067, + 0x0004003d,0x0000000e,0x0000007a,0x0000004e,0x000500c2,0x0000000e,0x0000007c,0x0000007a, + 0x0000007b,0x000500c7,0x0000000e,0x0000007e,0x0000007c,0x0000007d,0x0003003e,0x00000079, + 0x0000007e,0x0004003d,0x0000000e,0x00000080,0x0000004e,0x00050080,0x0000000e,0x00000082, + 0x00000080,0x00000081,0x0004003d,0x0000000e,0x00000083,0x00000079,0x00050080,0x0000000e, + 0x00000084,0x00000082,0x00000083,0x000500c7,0x0000000e,0x00000086,0x00000084,0x00000085, + 0x0003003e,0x0000007f,0x00000086,0x0004003d,0x0000000e,0x00000087,0x0000004a,0x0004003d, + 0x0000000e,0x00000088,0x0000007f,0x000500c5,0x0000000e,0x00000089,0x00000087,0x00000088, + 0x0004007c,0x00000006,0x0000008a,0x00000089,0x000200fe,0x0000008a,0x00010038,0x00050036, + 0x0000000e,0x00000011,0x00000000,0x0000000f,0x00030037,0x0000000d,0x00000010,0x000200f8, + 0x00000012,0x0004003d,0x0000000c,0x0000008d,0x00000010,0x0004007c,0x0000008e,0x0000008f, + 0x0000008d,0x00040071,0x0000000e,0x00000090,0x0000008f,0x000200fe,0x00000090,0x00010038, + 0x00050036,0x0000000c,0x00000016,0x00000000,0x00000014,0x00030037,0x00000013,0x00000015, + 0x000200f8,0x00000017,0x0004003d,0x0000000e,0x00000093,0x00000015,0x000500c7,0x0000000e, + 0x00000095,0x00000093,0x00000094,0x00040071,0x0000008e,0x00000096,0x00000095,0x0004007c, + 0x0000000c,0x00000097,0x00000096,0x000200fe,0x00000097,0x00010038,0x00050036,0x0000000e, + 0x0000001b,0x00000000,0x00000018,0x00030037,0x00000013,0x00000019,0x00030037,0x00000013, + 0x0000001a,0x000200f8,0x0000001c,0x0004003b,0x00000013,0x0000009a,0x00000007,0x0004003b, + 0x00000013,0x0000009e,0x00000007,0x0004003b,0x00000013,0x000000a2,0x00000007,0x0004003b, + 0x00000013,0x000000a6,0x00000007,0x0004003d,0x0000000e,0x0000009b,0x00000019,0x0004003d, + 0x0000000e,0x0000009c,0x0000001a,0x000500c2,0x0000000e,0x0000009d,0x0000009b,0x0000009c, + 0x0003003e,0x0000009a,0x0000009d,0x0004003d,0x0000000e,0x0000009f,0x0000001a,0x000500c4, + 0x0000000e,0x000000a0,0x0000007d,0x0000009f,0x00050082,0x0000000e,0x000000a1,0x000000a0, + 0x0000007d,0x0003003e,0x0000009e,0x000000a1,0x0004003d,0x0000000e,0x000000a3,0x00000019, + 0x0004003d,0x0000000e,0x000000a4,0x0000009e,0x000500c7,0x0000000e,0x000000a5,0x000000a3, + 0x000000a4,0x0003003e,0x000000a2,0x000000a5,0x0004003d,0x0000000e,0x000000a7,0x0000001a, + 0x00050082,0x0000000e,0x000000a8,0x000000a7,0x0000007d,0x000500c4,0x0000000e,0x000000a9, + 0x0000007d,0x000000a8,0x0003003e,0x000000a6,0x000000a9,0x0004003d,0x0000000e,0x000000aa, + 0x0000009a,0x0004003d,0x0000000e,0x000000ab,0x000000a2,0x0004003d,0x0000000e,0x000000ac, + 0x000000a6,0x000500ac,0x00000054,0x000000ad,0x000000ab,0x000000ac,0x000400a8,0x00000054, + 0x000000ae,0x000000ad,0x000300f7,0x000000b0,0x00000000,0x000400fa,0x000000ae,0x000000af, + 0x000000b0,0x000200f8,0x000000af,0x0004003d,0x0000000e,0x000000b1,0x000000a2,0x0004003d, + 0x0000000e,0x000000b2,0x000000a6,0x000500aa,0x00000054,0x000000b3,0x000000b1,0x000000b2, + 0x000300f7,0x000000b5,0x00000000,0x000400fa,0x000000b3,0x000000b4,0x000000b5,0x000200f8, + 0x000000b4,0x0004003d,0x0000000e,0x000000b6,0x0000009a,0x000500c7,0x0000000e,0x000000b7, + 0x000000b6,0x0000007d,0x000500ab,0x00000054,0x000000b9,0x000000b7,0x000000b8,0x000200f9, + 0x000000b5,0x000200f8,0x000000b5,0x000700f5,0x00000054,0x000000ba,0x000000b3,0x000000af, + 0x000000b9,0x000000b4,0x000200f9,0x000000b0,0x000200f8,0x000000b0,0x000700f5,0x00000054, + 0x000000bb,0x000000ad,0x0000001c,0x000000ba,0x000000b5,0x000600a9,0x0000000e,0x000000bc, + 0x000000bb,0x0000007d,0x000000b8,0x00050080,0x0000000e,0x000000bd,0x000000aa,0x000000bc, + 0x000200fe,0x000000bd,0x00010038,0x00050036,0x0000000e,0x0000001f,0x00000000,0x0000001d, + 0x00030037,0x00000013,0x0000001e,0x000200f8,0x00000020,0x0004003b,0x000000c0,0x000000c1, + 0x00000007,0x0004003b,0x00000013,0x000000dd,0x00000007,0x0004003b,0x00000013,0x000000e3, + 0x00000007,0x0004003b,0x00000013,0x000000e9,0x00000007,0x0004003b,0x00000013,0x000000f0, + 0x00000007,0x0004003b,0x00000013,0x000000f7,0x00000007,0x0004003b,0x00000013,0x000000fa, + 0x00000007,0x0004003b,0x00000013,0x00000103,0x00000007,0x0004003b,0x00000013,0x00000106, + 0x00000007,0x0004003b,0x00000013,0x0000010f,0x00000007,0x0004003b,0x00000013,0x00000111, + 0x00000007,0x0004003b,0x00000013,0x00000116,0x00000007,0x0004003b,0x00000013,0x00000119, + 0x00000007,0x0004003b,0x00000013,0x0000011b,0x00000007,0x0004003b,0x00000013,0x0000011d, + 0x00000007,0x0004003b,0x00000013,0x00000131,0x00000007,0x0004003d,0x0000000e,0x000000c2, + 0x0000001e,0x000500c7,0x0000000e,0x000000c4,0x000000c2,0x000000c3,0x000500aa,0x00000054, + 0x000000c5,0x000000c4,0x000000c3,0x000300f7,0x000000c7,0x00000000,0x000400fa,0x000000c5, + 0x000000c6,0x000000c7,0x000200f8,0x000000c6,0x0004003d,0x0000000e,0x000000c8,0x0000001e, + 0x000500c7,0x0000000e,0x000000ca,0x000000c8,0x000000c9,0x000500ab,0x00000054,0x000000cb, + 0x000000ca,0x000000b8,0x000200f9,0x000000c7,0x000200f8,0x000000c7,0x000700f5,0x00000054, + 0x000000cc,0x000000c5,0x00000020,0x000000cb,0x000000c6,0x0003003e,0x000000c1,0x000000cc, + 0x0004003d,0x00000054,0x000000cd,0x000000c1,0x000300f7,0x000000cf,0x00000000,0x000400fa, + 0x000000cd,0x000000ce,0x000000cf,0x000200f8,0x000000ce,0x000200fe,0x000000b8,0x000200f8, + 0x000000cf,0x0004003d,0x0000000e,0x000000d1,0x0000001e,0x000500c7,0x0000000e,0x000000d3, + 0x000000d1,0x000000d2,0x000500aa,0x00000054,0x000000d4,0x000000d3,0x000000b8,0x000300f7, + 0x000000d6,0x00000000,0x000400fa,0x000000d4,0x000000d5,0x000000d6,0x000200f8,0x000000d5, + 0x0004003d,0x0000000e,0x000000d7,0x0000001e,0x000500c2,0x0000000e,0x000000d9,0x000000d7, + 0x000000d8,0x000500c7,0x0000000e,0x000000db,0x000000d9,0x000000da,0x000200fe,0x000000db, + 0x000200f8,0x000000d6,0x0004003d,0x0000000e,0x000000de,0x0000001e,0x000500c7,0x0000000e, + 0x000000e0,0x000000de,0x000000df,0x000500ab,0x00000054,0x000000e1,0x000000e0,0x000000b8, + 0x000600a9,0x0000000e,0x000000e2,0x000000e1,0x000000da,0x000000b8,0x0003003e,0x000000dd, + 0x000000e2,0x0004003d,0x0000000e,0x000000e4,0x0000001e,0x000500c2,0x0000000e,0x000000e6, + 0x000000e4,0x000000e5,0x000500c7,0x0000000e,0x000000e8,0x000000e6,0x000000e7,0x0003003e, + 0x000000e3,0x000000e8,0x0004003d,0x0000000e,0x000000ea,0x0000001e,0x000500c7,0x0000000e, + 0x000000eb,0x000000ea,0x000000c9,0x0003003e,0x000000e9,0x000000eb,0x0004003d,0x0000000e, + 0x000000ec,0x000000e3,0x000500aa,0x00000054,0x000000ed,0x000000ec,0x000000e7,0x000300f7, + 0x000000ef,0x00000000,0x000400fa,0x000000ed,0x000000ee,0x000000f2,0x000200f8,0x000000ee, + 0x0003003e,0x000000f0,0x000000f1,0x000200f9,0x000000ef,0x000200f8,0x000000f2,0x0004003d, + 0x0000000e,0x000000f3,0x000000e3,0x000500b2,0x00000054,0x000000f4,0x000000f3,0x000000d8, + 0x000300f7,0x000000f6,0x00000000,0x000400fa,0x000000f4,0x000000f5,0x00000115,0x000200f8, + 0x000000f5,0x0004003d,0x0000000e,0x000000f8,0x000000e3,0x000500aa,0x00000054,0x000000f9, + 0x000000f8,0x000000b8,0x000300f7,0x000000fc,0x00000000,0x000400fa,0x000000f9,0x000000fb, + 0x000000fe,0x000200f8,0x000000fb,0x0004003d,0x0000000e,0x000000fd,0x000000e9,0x0003003e, + 0x000000fa,0x000000fd,0x000200f9,0x000000fc,0x000200f8,0x000000fe,0x0004003d,0x0000000e, + 0x00000100,0x000000e9,0x00050080,0x0000000e,0x00000101,0x000000ff,0x00000100,0x0003003e, + 0x000000fa,0x00000101,0x000200f9,0x000000fc,0x000200f8,0x000000fc,0x0004003d,0x0000000e, + 0x00000102,0x000000fa,0x0003003e,0x000000f7,0x00000102,0x0004003d,0x0000000e,0x00000104, + 0x000000e3,0x000500aa,0x00000054,0x00000105,0x00000104,0x000000b8,0x000300f7,0x00000108, + 0x00000000,0x000400fa,0x00000105,0x00000107,0x0000010a,0x000200f8,0x00000107,0x0003003e, + 0x00000106,0x00000109,0x000200f9,0x00000108,0x000200f8,0x0000010a,0x0004003d,0x0000000e, + 0x0000010c,0x000000e3,0x00050082,0x0000000e,0x0000010d,0x0000010b,0x0000010c,0x0003003e, + 0x00000106,0x0000010d,0x000200f9,0x00000108,0x000200f8,0x00000108,0x0004003d,0x0000000e, + 0x0000010e,0x00000106,0x0003003e,0x00000103,0x0000010e,0x0004003d,0x0000000e,0x00000110, + 0x000000f7,0x0003003e,0x0000010f,0x00000110,0x0004003d,0x0000000e,0x00000112,0x00000103, + 0x0003003e,0x00000111,0x00000112,0x00060039,0x0000000e,0x00000113,0x0000001b,0x0000010f, + 0x00000111,0x0007000c,0x0000000e,0x00000114,0x00000001,0x00000026,0x00000113,0x000000d8, + 0x0003003e,0x000000f0,0x00000114,0x000200f9,0x000000f6,0x000200f8,0x00000115,0x0004003d, + 0x0000000e,0x00000117,0x000000e3,0x00050082,0x0000000e,0x00000118,0x00000117,0x000000d8, + 0x0003003e,0x00000116,0x00000118,0x0004003d,0x0000000e,0x0000011c,0x000000e9,0x0003003e, + 0x0000011b,0x0000011c,0x0003003e,0x0000011d,0x0000011a,0x00060039,0x0000000e,0x0000011e, + 0x0000001b,0x0000011b,0x0000011d,0x0003003e,0x00000119,0x0000011e,0x0004003d,0x0000000e, + 0x0000011f,0x00000119,0x000500aa,0x00000054,0x00000120,0x0000011f,0x000000d8,0x000300f7, + 0x00000122,0x00000000,0x000400fa,0x00000120,0x00000121,0x00000122,0x000200f8,0x00000121, + 0x0003003e,0x00000119,0x000000b8,0x0004003d,0x0000000e,0x00000123,0x00000116,0x00050080, + 0x0000000e,0x00000124,0x00000123,0x0000007d,0x0003003e,0x00000116,0x00000124,0x000200f9, + 0x00000122,0x000200f8,0x00000122,0x0004003d,0x0000000e,0x00000125,0x00000116,0x000500ac, + 0x00000054,0x00000126,0x00000125,0x00000109,0x000400a8,0x00000054,0x00000127,0x00000126, + 0x000300f7,0x00000129,0x00000000,0x000400fa,0x00000127,0x00000128,0x00000129,0x000200f8, + 0x00000128,0x0004003d,0x0000000e,0x0000012a,0x00000116,0x000500aa,0x00000054,0x0000012b, + 0x0000012a,0x00000109,0x0004003d,0x0000000e,0x0000012c,0x00000119,0x000500ac,0x00000054, + 0x0000012e,0x0000012c,0x0000012d,0x000500a7,0x00000054,0x0000012f,0x0000012b,0x0000012e, + 0x000200f9,0x00000129,0x000200f8,0x00000129,0x000700f5,0x00000054,0x00000130,0x00000126, + 0x00000122,0x0000012f,0x00000128,0x000300f7,0x00000133,0x00000000,0x000400fa,0x00000130, + 0x00000132,0x00000134,0x000200f8,0x00000132,0x0003003e,0x00000131,0x000000f1,0x000200f9, + 0x00000133,0x000200f8,0x00000134,0x0004003d,0x0000000e,0x00000135,0x00000116,0x000500c4, + 0x0000000e,0x00000137,0x00000135,0x00000136,0x0004003d,0x0000000e,0x00000138,0x00000119, + 0x000500c5,0x0000000e,0x00000139,0x00000137,0x00000138,0x0003003e,0x00000131,0x00000139, + 0x000200f9,0x00000133,0x000200f8,0x00000133,0x0004003d,0x0000000e,0x0000013a,0x00000131, + 0x0003003e,0x000000f0,0x0000013a,0x000200f9,0x000000f6,0x000200f8,0x000000f6,0x000200f9, + 0x000000ef,0x000200f8,0x000000ef,0x0004003d,0x0000000e,0x0000013b,0x000000dd,0x0004003d, + 0x0000000e,0x0000013c,0x000000f0,0x000500c5,0x0000000e,0x0000013d,0x0000013b,0x0000013c, + 0x000200fe,0x0000013d,0x00010038,0x00050036,0x00000006,0x00000023,0x00000000,0x00000021, + 0x00030037,0x0000000d,0x00000022,0x000200f8,0x00000024,0x0004003b,0x00000013,0x00000140, + 0x00000007,0x0004003b,0x0000000d,0x00000141,0x00000007,0x0004003b,0x00000007,0x00000147, + 0x00000007,0x0004003b,0x00000013,0x00000151,0x00000007,0x0004003d,0x0000000c,0x00000142, + 0x00000022,0x0003003e,0x00000141,0x00000142,0x00050039,0x0000000e,0x00000143,0x00000011, + 0x00000141,0x0003003e,0x00000140,0x00000143,0x0004003d,0x0000000e,0x00000144,0x00000140, + 0x000500ae,0x00000054,0x00000146,0x00000144,0x00000145,0x000300f7,0x00000149,0x00000000, + 0x000400fa,0x00000146,0x00000148,0x0000014b,0x000200f8,0x00000148,0x0003003e,0x00000147, + 0x0000014a,0x000200f9,0x00000149,0x000200f8,0x0000014b,0x0004003d,0x0000000c,0x0000014d, + 0x00000022,0x00040073,0x00000006,0x0000014e,0x0000014d,0x0004003d,0x0000000e,0x0000014f, + 0x00000140,0x00050080,0x0000000e,0x00000150,0x0000014f,0x0000007d,0x0003003e,0x00000151, + 0x00000150,0x00050039,0x0000000c,0x00000152,0x00000016,0x00000151,0x00040073,0x00000006, + 0x00000153,0x00000152,0x00050081,0x00000006,0x00000154,0x0000014e,0x00000153,0x00050085, + 0x00000006,0x00000155,0x0000014c,0x00000154,0x0003003e,0x00000147,0x00000155,0x000200f9, + 0x00000149,0x000200f8,0x00000149,0x0004003d,0x00000006,0x00000156,0x00000147,0x000200fe, + 0x00000156,0x00010038,0x00050036,0x00000006,0x00000026,0x00000000,0x00000021,0x00030037, + 0x0000000d,0x00000025,0x000200f8,0x00000027,0x0004003b,0x0000000d,0x0000015b,0x00000007, + 0x0004003b,0x00000013,0x0000015f,0x00000007,0x0004003d,0x0000000c,0x00000159,0x00000025, + 0x00040073,0x00000006,0x0000015a,0x00000159,0x0004003d,0x0000000c,0x0000015c,0x00000025, + 0x0003003e,0x0000015b,0x0000015c,0x00050039,0x0000000e,0x0000015d,0x00000011,0x0000015b, + 0x00050082,0x0000000e,0x0000015e,0x0000015d,0x0000007d,0x0003003e,0x0000015f,0x0000015e, + 0x00050039,0x0000000c,0x00000160,0x00000016,0x0000015f,0x00040073,0x00000006,0x00000161, + 0x00000160,0x00050081,0x00000006,0x00000162,0x0000015a,0x00000161,0x00050085,0x00000006, + 0x00000163,0x0000014c,0x00000162,0x000200fe,0x00000163,0x00010038,0x00050036,0x0000000c, + 0x0000002a,0x00000000,0x00000028,0x00030037,0x0000000d,0x00000029,0x000200f8,0x0000002b, + 0x0004003b,0x0000000d,0x00000166,0x00000007,0x0004003b,0x00000013,0x0000016a,0x00000007, + 0x0004003d,0x0000000c,0x00000167,0x00000029,0x0003003e,0x00000166,0x00000167,0x00050039, + 0x0000000e,0x00000168,0x00000011,0x00000166,0x00050080,0x0000000e,0x00000169,0x00000168, + 0x0000007d,0x0003003e,0x0000016a,0x00000169,0x00050039,0x0000000c,0x0000016b,0x00000016, + 0x0000016a,0x000200fe,0x0000016b,0x00010038,0x00050036,0x0000000c,0x0000002d,0x00000000, + 0x00000028,0x00030037,0x0000000d,0x0000002c,0x000200f8,0x0000002e,0x0004003b,0x0000000d, + 0x0000016e,0x00000007,0x0004003b,0x00000013,0x00000172,0x00000007,0x0004003d,0x0000000c, + 0x0000016f,0x0000002c,0x0003003e,0x0000016e,0x0000016f,0x00050039,0x0000000e,0x00000170, + 0x00000011,0x0000016e,0x00050082,0x0000000e,0x00000171,0x00000170,0x0000007d,0x0003003e, + 0x00000172,0x00000171,0x00050039,0x0000000c,0x00000173,0x00000016,0x00000172,0x000200fe, + 0x00000173,0x00010038,0x00050036,0x0000000c,0x00000030,0x00000000,0x00000028,0x00030037, + 0x0000000d,0x0000002f,0x000200f8,0x00000031,0x0004003b,0x00000007,0x00000176,0x00000007, + 0x0004003b,0x0000000d,0x0000018a,0x00000007,0x0004003b,0x00000007,0x0000018d,0x00000007, + 0x0004003b,0x0000019b,0x0000019c,0x00000007,0x0004003b,0x00000007,0x000001a6,0x00000007, + 0x0004003b,0x0000000d,0x000001a7,0x00000007,0x0004003b,0x0000000d,0x000001b0,0x00000007, + 0x0004003b,0x00000007,0x000001b3,0x00000007,0x0004003b,0x0000000d,0x000001b4,0x00000007, + 0x0004003b,0x0000000d,0x000001c0,0x00000007,0x0004003d,0x0000000c,0x00000177,0x0000002f, + 0x00040073,0x00000006,0x00000178,0x00000177,0x0003003e,0x00000176,0x00000178,0x0004003d, + 0x00000006,0x00000179,0x00000176,0x000500ba,0x00000054,0x0000017b,0x00000179,0x0000017a, + 0x000400a8,0x00000054,0x0000017c,0x0000017b,0x000400a8,0x00000054,0x0000017d,0x0000017c, + 0x000300f7,0x0000017f,0x00000000,0x000400fa,0x0000017d,0x0000017e,0x0000017f,0x000200f8, + 0x0000017e,0x0004003d,0x00000006,0x00000180,0x00000176,0x0004009d,0x00000054,0x00000181, + 0x00000180,0x000200f9,0x0000017f,0x000200f8,0x0000017f,0x000700f5,0x00000054,0x00000182, + 0x0000017c,0x00000031,0x00000181,0x0000017e,0x000300f7,0x00000184,0x00000000,0x000400fa, + 0x00000182,0x00000183,0x00000184,0x000200f8,0x00000183,0x0004003d,0x00000006,0x00000186, + 0x00000176,0x00050088,0x00000006,0x00000187,0x00000185,0x00000186,0x00040073,0x0000000c, + 0x00000188,0x00000187,0x000200fe,0x00000188,0x000200f8,0x00000184,0x0004003d,0x00000006, + 0x0000018b,0x00000176,0x00050088,0x00000006,0x0000018c,0x00000185,0x0000018b,0x0003003e, + 0x0000018d,0x0000018c,0x00050039,0x00000006,0x0000018e,0x0000000a,0x0000018d,0x00040073, + 0x0000000c,0x0000018f,0x0000018e,0x0003003e,0x0000018a,0x0000018f,0x0004003d,0x0000000c, + 0x00000190,0x0000018a,0x0004009d,0x00000054,0x00000191,0x00000190,0x0004003d,0x0000000c, + 0x00000192,0x0000018a,0x000500b4,0x00000054,0x00000194,0x00000192,0x00000193,0x000500a6, + 0x00000054,0x00000195,0x00000191,0x00000194,0x000300f7,0x00000197,0x00000000,0x000400fa, + 0x00000195,0x00000196,0x00000197,0x000200f8,0x00000196,0x0004003d,0x0000000c,0x00000198, + 0x0000018a,0x000200fe,0x00000198,0x000200f8,0x00000197,0x0003003e,0x0000019c,0x0000019d, + 0x000200f9,0x0000019e,0x000200f8,0x0000019e,0x000400f6,0x000001a0,0x000001a1,0x00000000, + 0x000200f9,0x000001a2,0x000200f8,0x000001a2,0x0004003d,0x0000019a,0x000001a3,0x0000019c, + 0x000500b1,0x00000054,0x000001a5,0x000001a3,0x000001a4,0x000400fa,0x000001a5,0x0000019f, + 0x000001a0,0x000200f8,0x0000019f,0x0004003d,0x0000000c,0x000001a8,0x0000018a,0x0003003e, + 0x000001a7,0x000001a8,0x00050039,0x00000006,0x000001a9,0x00000023,0x000001a7,0x0004003d, + 0x00000006,0x000001aa,0x00000176,0x00050085,0x00000006,0x000001ab,0x000001a9,0x000001aa, + 0x0003003e,0x000001a6,0x000001ab,0x0004003d,0x00000006,0x000001ac,0x000001a6,0x000500b8, + 0x00000054,0x000001ad,0x000001ac,0x00000185,0x000300f7,0x000001af,0x00000000,0x000400fa, + 0x000001ad,0x000001ae,0x000001af,0x000200f8,0x000001ae,0x0004003d,0x0000000c,0x000001b1, + 0x0000018a,0x0003003e,0x000001b0,0x000001b1,0x00050039,0x0000000c,0x000001b2,0x0000002a, + 0x000001b0,0x0003003e,0x0000018a,0x000001b2,0x000200f9,0x000001af,0x000200f8,0x000001af, + 0x0004003d,0x0000000c,0x000001b5,0x0000018a,0x0003003e,0x000001b4,0x000001b5,0x00050039, + 0x00000006,0x000001b6,0x00000026,0x000001b4,0x0004003d,0x00000006,0x000001b7,0x00000176, + 0x00050085,0x00000006,0x000001b8,0x000001b6,0x000001b7,0x0003003e,0x000001b3,0x000001b8, + 0x0004003d,0x0000000c,0x000001b9,0x0000018a,0x000500ba,0x00000054,0x000001ba,0x000001b9, + 0x00000193,0x0004003d,0x00000006,0x000001bb,0x000001b3,0x000500ba,0x00000054,0x000001bc, + 0x000001bb,0x00000185,0x000500a7,0x00000054,0x000001bd,0x000001ba,0x000001bc,0x000300f7, + 0x000001bf,0x00000000,0x000400fa,0x000001bd,0x000001be,0x000001bf,0x000200f8,0x000001be, + 0x0004003d,0x0000000c,0x000001c1,0x0000018a,0x0003003e,0x000001c0,0x000001c1,0x00050039, + 0x0000000c,0x000001c2,0x0000002d,0x000001c0,0x0003003e,0x0000018a,0x000001c2,0x000200f9, + 0x000001bf,0x000200f8,0x000001bf,0x000200f9,0x000001a1,0x000200f8,0x000001a1,0x0004003d, + 0x0000019a,0x000001c3,0x0000019c,0x00050080,0x0000019a,0x000001c5,0x000001c3,0x000001c4, + 0x0003003e,0x0000019c,0x000001c5,0x000200f9,0x0000019e,0x000200f8,0x000001a0,0x0004003d, + 0x0000000c,0x000001c6,0x0000018a,0x000200fe,0x000001c6,0x00010038,0x00050036,0x0000000c, + 0x00000036,0x00000000,0x00000032,0x00030037,0x0000000d,0x00000033,0x00030037,0x0000000d, + 0x00000034,0x00030037,0x0000000d,0x00000035,0x000200f8,0x00000037,0x0004003b,0x00000007, + 0x000001c9,0x00000007,0x0004003b,0x00000007,0x000001cf,0x00000007,0x0004003b,0x00000007, + 0x000001d4,0x00000007,0x0004003b,0x00000007,0x000001d8,0x00000007,0x0004003b,0x00000007, + 0x000001dc,0x00000007,0x0004003b,0x0000019b,0x000001ef,0x00000007,0x0004003b,0x00000007, + 0x000001fc,0x00000007,0x0004003b,0x00000007,0x00000204,0x00000007,0x0004003b,0x00000007, + 0x00000216,0x00000007,0x0004003b,0x00000007,0x00000221,0x00000007,0x0004003b,0x00000007, + 0x00000225,0x00000007,0x0004003d,0x0000000c,0x000001ca,0x00000033,0x00040073,0x00000006, + 0x000001cb,0x000001ca,0x0004003d,0x0000000c,0x000001cc,0x00000034,0x00040073,0x00000006, + 0x000001cd,0x000001cc,0x00050085,0x00000006,0x000001ce,0x000001cb,0x000001cd,0x0003003e, + 0x000001c9,0x000001ce,0x0004003d,0x00000006,0x000001d0,0x000001c9,0x0004003d,0x0000000c, + 0x000001d1,0x00000035,0x00040073,0x00000006,0x000001d2,0x000001d1,0x00050081,0x00000006, + 0x000001d3,0x000001d0,0x000001d2,0x0003003e,0x000001cf,0x000001d3,0x0004003d,0x00000006, + 0x000001d5,0x000001cf,0x0004003d,0x00000006,0x000001d6,0x000001c9,0x00050083,0x00000006, + 0x000001d7,0x000001d5,0x000001d6,0x0003003e,0x000001d4,0x000001d7,0x0004003d,0x00000006, + 0x000001d9,0x000001cf,0x0004003d,0x00000006,0x000001da,0x000001d4,0x00050083,0x00000006, + 0x000001db,0x000001d9,0x000001da,0x0003003e,0x000001d8,0x000001db,0x0004003d,0x00000006, + 0x000001dd,0x000001c9,0x0004003d,0x00000006,0x000001de,0x000001d8,0x00050083,0x00000006, + 0x000001df,0x000001dd,0x000001de,0x0004003d,0x0000000c,0x000001e0,0x00000035,0x00040073, + 0x00000006,0x000001e1,0x000001e0,0x0004003d,0x00000006,0x000001e2,0x000001d4,0x00050083, + 0x00000006,0x000001e3,0x000001e1,0x000001e2,0x00050081,0x00000006,0x000001e4,0x000001df, + 0x000001e3,0x0003003e,0x000001dc,0x000001e4,0x0004003d,0x00000006,0x000001e5,0x000001dc, + 0x000500b7,0x00000054,0x000001e6,0x000001e5,0x0000017a,0x000300f7,0x000001e8,0x00000000, + 0x000400fa,0x000001e6,0x000001e7,0x000001e8,0x000200f8,0x000001e7,0x0004003d,0x00000006, + 0x000001e9,0x000001cf,0x0004009d,0x00000054,0x000001ea,0x000001e9,0x000400a8,0x00000054, + 0x000001eb,0x000001ea,0x000200f9,0x000001e8,0x000200f8,0x000001e8,0x000700f5,0x00000054, + 0x000001ec,0x000001e6,0x00000037,0x000001eb,0x000001e7,0x000300f7,0x000001ee,0x00000000, + 0x000400fa,0x000001ec,0x000001ed,0x000001ee,0x000200f8,0x000001ed,0x0004003d,0x00000006, + 0x000001f0,0x000001cf,0x0006000c,0x00000006,0x000001f1,0x00000001,0x00000004,0x000001f0, + 0x0004007c,0x0000000e,0x000001f2,0x000001f1,0x000500c2,0x0000000e,0x000001f4,0x000001f2, + 0x000001f3,0x000500c7,0x0000000e,0x000001f6,0x000001f4,0x000001f5,0x0004007c,0x0000019a, + 0x000001f7,0x000001f6,0x00050082,0x0000019a,0x000001f9,0x000001f7,0x000001f8,0x0007000c, + 0x0000019a,0x000001fb,0x00000001,0x0000002a,0x000001f9,0x000001fa,0x0003003e,0x000001ef, + 0x000001fb,0x0004003d,0x0000019a,0x000001fd,0x000001ef,0x00050082,0x0000019a,0x000001ff, + 0x000001fd,0x000001fe,0x00050080,0x0000019a,0x00000200,0x000001ff,0x000001f8,0x0004007c, + 0x0000000e,0x00000201,0x00000200,0x000500c4,0x0000000e,0x00000202,0x00000201,0x000001f3, + 0x0004007c,0x00000006,0x00000203,0x00000202,0x0003003e,0x000001fc,0x00000203,0x0004003d, + 0x00000006,0x00000205,0x000001cf,0x0004003d,0x0000019a,0x00000206,0x000001ef,0x00050082, + 0x0000019a,0x00000207,0x000001f8,0x00000206,0x00050080,0x0000019a,0x00000208,0x00000207, + 0x000001fe,0x0004007c,0x0000000e,0x00000209,0x00000208,0x000500c4,0x0000000e,0x0000020a, + 0x00000209,0x000001f3,0x0004007c,0x00000006,0x0000020b,0x0000020a,0x00050085,0x00000006, + 0x0000020c,0x00000205,0x0000020b,0x0003003e,0x00000204,0x0000020c,0x0004003d,0x00000006, + 0x0000020d,0x00000204,0x0004003d,0x00000006,0x0000020e,0x00000204,0x0006000c,0x00000006, + 0x0000020f,0x00000001,0x00000008,0x0000020e,0x00050083,0x00000006,0x00000210,0x0000020d, + 0x0000020f,0x000500b4,0x00000054,0x00000211,0x00000210,0x0000014c,0x000300f7,0x00000213, + 0x00000000,0x000400fa,0x00000211,0x00000212,0x00000213,0x000200f8,0x00000212,0x0004003d, + 0x00000006,0x00000214,0x000001dc,0x000500ba,0x00000054,0x00000215,0x00000214,0x0000017a, + 0x000300f7,0x00000218,0x00000000,0x000400fa,0x00000215,0x00000217,0x0000021b,0x000200f8, + 0x00000217,0x0004003d,0x00000006,0x00000219,0x00000204,0x0006000c,0x00000006,0x0000021a, + 0x00000001,0x00000009,0x00000219,0x0003003e,0x00000216,0x0000021a,0x000200f9,0x00000218, + 0x000200f8,0x0000021b,0x0004003d,0x00000006,0x0000021c,0x00000204,0x0006000c,0x00000006, + 0x0000021d,0x00000001,0x00000008,0x0000021c,0x0003003e,0x00000216,0x0000021d,0x000200f9, + 0x00000218,0x000200f8,0x00000218,0x0004003d,0x00000006,0x0000021e,0x00000216,0x0004003d, + 0x00000006,0x0000021f,0x000001fc,0x00050085,0x00000006,0x00000220,0x0000021e,0x0000021f, + 0x0003003e,0x00000221,0x00000220,0x00050039,0x00000006,0x00000222,0x0000000a,0x00000221, + 0x00040073,0x0000000c,0x00000223,0x00000222,0x000200fe,0x00000223,0x000200f8,0x00000213, + 0x000200f9,0x000001ee,0x000200f8,0x000001ee,0x0004003d,0x00000006,0x00000226,0x000001cf, + 0x0003003e,0x00000225,0x00000226,0x00050039,0x00000006,0x00000227,0x0000000a,0x00000225, + 0x00040073,0x0000000c,0x00000228,0x00000227,0x000200fe,0x00000228,0x00010038,0x00050036, + 0x0000000c,0x00000039,0x00000000,0x00000028,0x00030037,0x0000000d,0x00000038,0x000200f8, + 0x0000003a,0x0004003b,0x0000000d,0x0000022b,0x00000007,0x0004003b,0x0000000d,0x0000022e, + 0x00000007,0x0004003b,0x0000000d,0x00000230,0x00000007,0x0004003b,0x0000000d,0x00000231, + 0x00000007,0x0004003b,0x00000013,0x00000237,0x00000007,0x0004003b,0x0000000d,0x00000238, + 0x00000007,0x0004003b,0x00000013,0x0000023b,0x00000007,0x0004003b,0x00000013,0x00000242, + 0x00000007,0x0004003d,0x0000000c,0x0000022f,0x00000038,0x0003003e,0x0000022e,0x0000022f, + 0x0003003e,0x00000230,0x0000022c,0x0003003e,0x00000231,0x0000022d,0x00070039,0x0000000c, + 0x00000232,0x00000036,0x0000022e,0x00000230,0x00000231,0x0003003e,0x0000022b,0x00000232, + 0x0004003d,0x0000000c,0x00000233,0x0000022b,0x0008000c,0x0000000c,0x00000236,0x00000001, + 0x0000002b,0x00000233,0x00000234,0x00000235,0x0003003e,0x0000022b,0x00000236,0x0004003d, + 0x0000000c,0x00000239,0x0000022b,0x0003003e,0x00000238,0x00000239,0x00050039,0x0000000e, + 0x0000023a,0x00000011,0x00000238,0x0003003e,0x00000237,0x0000023a,0x0004003d,0x0000000e, + 0x0000023c,0x00000237,0x000500c4,0x0000000e,0x0000023e,0x0000023c,0x0000023d,0x00050080, + 0x0000000e,0x00000240,0x0000023e,0x0000023f,0x000500c7,0x0000000e,0x00000241,0x00000240, + 0x00000094,0x0003003e,0x0000023b,0x00000241,0x0004003d,0x0000000e,0x00000243,0x0000023b, + 0x0003003e,0x00000242,0x00000243,0x00050039,0x0000000c,0x00000244,0x00000016,0x00000242, + 0x000200fe,0x00000244,0x00010038,0x00050036,0x0000000c,0x00000040,0x00000000,0x0000003b, + 0x00030037,0x00000013,0x0000003c,0x00030037,0x00000013,0x0000003d,0x00030037,0x00000013, + 0x0000003e,0x00030037,0x00000013,0x0000003f,0x000200f8,0x00000041,0x0004003b,0x00000013, + 0x00000247,0x00000007,0x0004003b,0x0000000d,0x00000253,0x00000007,0x0004003b,0x0000000d, + 0x00000261,0x00000007,0x0004003b,0x0000000d,0x0000026c,0x00000007,0x0004003b,0x0000000d, + 0x00000278,0x00000007,0x0004003b,0x0000000d,0x00000284,0x00000007,0x0004003b,0x0000000d, + 0x00000288,0x00000007,0x0004003d,0x0000000e,0x00000248,0x0000003c,0x00050084,0x0000000e, + 0x0000024a,0x00000248,0x00000249,0x0004003d,0x0000000e,0x0000024b,0x0000003d,0x00050080, + 0x0000000e,0x0000024c,0x0000024a,0x0000024b,0x0004003d,0x0000000e,0x0000024d,0x0000003e, + 0x00050084,0x0000000e,0x0000024f,0x0000024d,0x0000024e,0x00050080,0x0000000e,0x00000250, + 0x0000024c,0x0000024f,0x0004003d,0x0000000e,0x00000251,0x0000003f,0x00050080,0x0000000e, + 0x00000252,0x00000250,0x00000251,0x0003003e,0x00000247,0x00000252,0x0004003d,0x0000000e, + 0x00000258,0x00000247,0x00050041,0x00000259,0x0000025a,0x00000257,0x00000258,0x0006003d, + 0x0000000c,0x0000025b,0x0000025a,0x00000030,0x0000024e,0x0004003d,0x0000000e,0x0000025c, + 0x00000247,0x00050080,0x0000000e,0x0000025d,0x0000025c,0x000000d8,0x00050041,0x00000259, + 0x0000025e,0x00000257,0x0000025d,0x0006003d,0x0000000c,0x0000025f,0x0000025e,0x00000030, + 0x0000024e,0x00050081,0x0000000c,0x00000260,0x0000025b,0x0000025f,0x0003003e,0x00000253, + 0x00000260,0x0004003d,0x0000000e,0x00000262,0x00000247,0x00050080,0x0000000e,0x00000263, + 0x00000262,0x0000010b,0x00050041,0x00000259,0x00000264,0x00000257,0x00000263,0x0006003d, + 0x0000000c,0x00000265,0x00000264,0x00000030,0x0000024e,0x0004003d,0x0000000e,0x00000266, + 0x00000247,0x00050080,0x0000000e,0x00000268,0x00000266,0x00000267,0x00050041,0x00000259, + 0x00000269,0x00000257,0x00000268,0x0006003d,0x0000000c,0x0000026a,0x00000269,0x00000030, + 0x0000024e,0x00050081,0x0000000c,0x0000026b,0x00000265,0x0000026a,0x0003003e,0x00000261, + 0x0000026b,0x0004003d,0x0000000e,0x0000026d,0x00000247,0x00050080,0x0000000e,0x0000026f, + 0x0000026d,0x0000026e,0x00050041,0x00000259,0x00000270,0x00000257,0x0000026f,0x0006003d, + 0x0000000c,0x00000271,0x00000270,0x00000030,0x0000024e,0x0004003d,0x0000000e,0x00000272, + 0x00000247,0x00050080,0x0000000e,0x00000274,0x00000272,0x00000273,0x00050041,0x00000259, + 0x00000275,0x00000257,0x00000274,0x0006003d,0x0000000c,0x00000276,0x00000275,0x00000030, + 0x0000024e,0x00050081,0x0000000c,0x00000277,0x00000271,0x00000276,0x0003003e,0x0000026c, + 0x00000277,0x0004003d,0x0000000e,0x00000279,0x00000247,0x00050080,0x0000000e,0x0000027b, + 0x00000279,0x0000027a,0x00050041,0x00000259,0x0000027c,0x00000257,0x0000027b,0x0006003d, + 0x0000000c,0x0000027d,0x0000027c,0x00000030,0x0000024e,0x0004003d,0x0000000e,0x0000027e, + 0x00000247,0x00050080,0x0000000e,0x00000280,0x0000027e,0x0000027f,0x00050041,0x00000259, + 0x00000281,0x00000257,0x00000280,0x0006003d,0x0000000c,0x00000282,0x00000281,0x00000030, + 0x0000024e,0x00050081,0x0000000c,0x00000283,0x0000027d,0x00000282,0x0003003e,0x00000278, + 0x00000283,0x0004003d,0x0000000c,0x00000285,0x00000253,0x0004003d,0x0000000c,0x00000286, + 0x00000261,0x00050081,0x0000000c,0x00000287,0x00000285,0x00000286,0x0003003e,0x00000284, + 0x00000287,0x0004003d,0x0000000c,0x00000289,0x00000284,0x0004003d,0x0000000c,0x0000028a, + 0x0000026c,0x00050081,0x0000000c,0x0000028b,0x00000289,0x0000028a,0x0003003e,0x00000288, + 0x0000028b,0x0004003d,0x0000000c,0x0000028c,0x00000288,0x0004003d,0x0000000c,0x0000028d, + 0x00000278,0x00050081,0x0000000c,0x0000028e,0x0000028c,0x0000028d,0x000200fe,0x0000028e, + 0x00010038,0x00050036,0x0000000c,0x00000045,0x00000000,0x00000042,0x00030037,0x00000013, + 0x00000043,0x00030037,0x00000013,0x00000044,0x000200f8,0x00000046,0x0004003b,0x0000000d, + 0x00000291,0x00000007,0x0004003b,0x00000013,0x00000292,0x00000007,0x0004003b,0x00000013, + 0x00000294,0x00000007,0x0004003b,0x00000013,0x00000296,0x00000007,0x0004003b,0x00000013, + 0x00000297,0x00000007,0x0004003b,0x00000013,0x00000299,0x00000007,0x0004003b,0x00000013, + 0x0000029b,0x00000007,0x0004003b,0x00000013,0x0000029d,0x00000007,0x0004003b,0x00000013, + 0x0000029e,0x00000007,0x0004003b,0x0000000d,0x000002a1,0x00000007,0x0004003b,0x00000013, + 0x000002a3,0x00000007,0x0004003b,0x00000013,0x000002a5,0x00000007,0x0004003b,0x00000013, + 0x000002a7,0x00000007,0x0004003b,0x00000013,0x000002a8,0x00000007,0x0004003b,0x0000000d, + 0x000002ab,0x00000007,0x0004003b,0x00000013,0x000002ad,0x00000007,0x0004003b,0x00000013, + 0x000002af,0x00000007,0x0004003b,0x00000013,0x000002b1,0x00000007,0x0004003b,0x00000013, + 0x000002b2,0x00000007,0x0004003b,0x0000000d,0x000002b5,0x00000007,0x0004003b,0x00000013, + 0x000002b6,0x00000007,0x0004003b,0x00000013,0x000002b8,0x00000007,0x0004003b,0x00000013, + 0x000002ba,0x00000007,0x0004003b,0x00000013,0x000002bb,0x00000007,0x0004003b,0x00000013, + 0x000002bd,0x00000007,0x0004003b,0x00000013,0x000002bf,0x00000007,0x0004003b,0x00000013, + 0x000002c1,0x00000007,0x0004003b,0x00000013,0x000002c2,0x00000007,0x0004003b,0x0000000d, + 0x000002c5,0x00000007,0x0004003b,0x00000013,0x000002c7,0x00000007,0x0004003b,0x00000013, + 0x000002c9,0x00000007,0x0004003b,0x00000013,0x000002cb,0x00000007,0x0004003b,0x00000013, + 0x000002cc,0x00000007,0x0004003b,0x0000000d,0x000002cf,0x00000007,0x0004003b,0x00000013, + 0x000002d1,0x00000007,0x0004003b,0x00000013,0x000002d3,0x00000007,0x0004003b,0x00000013, + 0x000002d5,0x00000007,0x0004003b,0x00000013,0x000002d6,0x00000007,0x0004003d,0x0000000e, + 0x00000293,0x00000043,0x0003003e,0x00000292,0x00000293,0x0004003d,0x0000000e,0x00000295, + 0x00000044,0x0003003e,0x00000294,0x00000295,0x0003003e,0x00000296,0x000000b8,0x0003003e, + 0x00000297,0x000000b8,0x00080039,0x0000000c,0x00000298,0x00000040,0x00000292,0x00000294, + 0x00000296,0x00000297,0x0004003d,0x0000000e,0x0000029a,0x00000043,0x0003003e,0x00000299, + 0x0000029a,0x0004003d,0x0000000e,0x0000029c,0x00000044,0x0003003e,0x0000029b,0x0000029c, + 0x0003003e,0x0000029d,0x0000007d,0x0003003e,0x0000029e,0x000000b8,0x00080039,0x0000000c, + 0x0000029f,0x00000040,0x00000299,0x0000029b,0x0000029d,0x0000029e,0x00050081,0x0000000c, + 0x000002a0,0x00000298,0x0000029f,0x0003003e,0x00000291,0x000002a0,0x0004003d,0x0000000c, + 0x000002a2,0x00000291,0x0004003d,0x0000000e,0x000002a4,0x00000043,0x0003003e,0x000002a3, + 0x000002a4,0x0004003d,0x0000000e,0x000002a6,0x00000044,0x0003003e,0x000002a5,0x000002a6, + 0x0003003e,0x000002a7,0x0000024e,0x0003003e,0x000002a8,0x000000b8,0x00080039,0x0000000c, + 0x000002a9,0x00000040,0x000002a3,0x000002a5,0x000002a7,0x000002a8,0x00050081,0x0000000c, + 0x000002aa,0x000002a2,0x000002a9,0x0003003e,0x000002a1,0x000002aa,0x0004003d,0x0000000c, + 0x000002ac,0x000002a1,0x0004003d,0x0000000e,0x000002ae,0x00000043,0x0003003e,0x000002ad, + 0x000002ae,0x0004003d,0x0000000e,0x000002b0,0x00000044,0x0003003e,0x000002af,0x000002b0, + 0x0003003e,0x000002b1,0x00000136,0x0003003e,0x000002b2,0x000000b8,0x00080039,0x0000000c, + 0x000002b3,0x00000040,0x000002ad,0x000002af,0x000002b1,0x000002b2,0x00050081,0x0000000c, + 0x000002b4,0x000002ac,0x000002b3,0x0003003e,0x000002ab,0x000002b4,0x0004003d,0x0000000e, + 0x000002b7,0x00000043,0x0003003e,0x000002b6,0x000002b7,0x0004003d,0x0000000e,0x000002b9, + 0x00000044,0x0003003e,0x000002b8,0x000002b9,0x0003003e,0x000002ba,0x000000b8,0x0003003e, + 0x000002bb,0x0000007d,0x00080039,0x0000000c,0x000002bc,0x00000040,0x000002b6,0x000002b8, + 0x000002ba,0x000002bb,0x0004003d,0x0000000e,0x000002be,0x00000043,0x0003003e,0x000002bd, + 0x000002be,0x0004003d,0x0000000e,0x000002c0,0x00000044,0x0003003e,0x000002bf,0x000002c0, + 0x0003003e,0x000002c1,0x0000007d,0x0003003e,0x000002c2,0x0000007d,0x00080039,0x0000000c, + 0x000002c3,0x00000040,0x000002bd,0x000002bf,0x000002c1,0x000002c2,0x00050081,0x0000000c, + 0x000002c4,0x000002bc,0x000002c3,0x0003003e,0x000002b5,0x000002c4,0x0004003d,0x0000000c, + 0x000002c6,0x000002b5,0x0004003d,0x0000000e,0x000002c8,0x00000043,0x0003003e,0x000002c7, + 0x000002c8,0x0004003d,0x0000000e,0x000002ca,0x00000044,0x0003003e,0x000002c9,0x000002ca, + 0x0003003e,0x000002cb,0x0000024e,0x0003003e,0x000002cc,0x0000007d,0x00080039,0x0000000c, + 0x000002cd,0x00000040,0x000002c7,0x000002c9,0x000002cb,0x000002cc,0x00050081,0x0000000c, + 0x000002ce,0x000002c6,0x000002cd,0x0003003e,0x000002c5,0x000002ce,0x0004003d,0x0000000c, + 0x000002d0,0x000002c5,0x0004003d,0x0000000e,0x000002d2,0x00000043,0x0003003e,0x000002d1, + 0x000002d2,0x0004003d,0x0000000e,0x000002d4,0x00000044,0x0003003e,0x000002d3,0x000002d4, + 0x0003003e,0x000002d5,0x00000136,0x0003003e,0x000002d6,0x0000007d,0x00080039,0x0000000c, + 0x000002d7,0x00000040,0x000002d1,0x000002d3,0x000002d5,0x000002d6,0x00050081,0x0000000c, + 0x000002d8,0x000002d0,0x000002d7,0x0003003e,0x000002cf,0x000002d8,0x0004003d,0x0000000c, + 0x000002d9,0x000002ab,0x0004003d,0x0000000c,0x000002da,0x000002cf,0x00050081,0x0000000c, + 0x000002db,0x000002d9,0x000002da,0x000200fe,0x000002db,0x00010038, +}; +inline constexpr uint32_t k_f16_k16_f32__gemm_fp8[] = { + 0x07230203,0x00010600,0x0008000b,0x000004a0,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x0000003d,0x00020011,0x00001151,0x00020011, + 0x00001160,0x00020011,0x000014e1,0x00020011,0x00001786,0x0008000a,0x5f565053,0x5f52484b, + 0x706f6f63,0x74617265,0x5f657669,0x7274616d,0x00007869,0x0006000b,0x00000001,0x4c534c47, + 0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000003,0x0013000f,0x00000005, + 0x00000004,0x6e69616d,0x00000000,0x000001ba,0x000001bf,0x000001c2,0x000001cf,0x00000246, + 0x00000252,0x00000261,0x00000270,0x000002e6,0x000002fb,0x00000328,0x00000342,0x00000457, + 0x00000489,0x0006014b,0x00000004,0x00000026,0x00000007,0x00000008,0x00000008,0x00030003, + 0x00000002,0x000001cc,0x00090004,0x455f4c47,0x635f5458,0x72746e6f,0x665f6c6f,0x5f776f6c, + 0x72747461,0x74756269,0x00007365,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x36315f72, + 0x5f746962,0x726f7473,0x00656761,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x62385f72, + 0x735f7469,0x61726f74,0x00006567,0x000b0004,0x455f4c47,0x735f5458,0x65646168,0x78655f72, + 0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004,0x475f4c47, + 0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576, + 0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669, + 0x00080004,0x4b5f4c47,0x635f5248,0x65706f6f,0x69746172,0x6d5f6576,0x69727461,0x00000078, + 0x00090004,0x4b5f4c47,0x6d5f5248,0x726f6d65,0x63735f79,0x5f65706f,0x616d6573,0x6369746e, + 0x00000073,0x00090004,0x4b5f4c47,0x735f5248,0x65646168,0x75735f72,0x6f726762,0x625f7075, + 0x63697361,0x00000000,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000d, + 0x6e756f72,0x36314664,0x3b316628,0x00000000,0x00040005,0x0000000c,0x756c6176,0x00000065, + 0x00060005,0x00000013,0x42363166,0x28737469,0x31363166,0x0000003b,0x00040005,0x00000012, + 0x756c6176,0x00000065,0x00060005,0x00000019,0x66696873,0x656e5274,0x3b317528,0x003b3175, + 0x00040005,0x00000017,0x756c6176,0x00000065,0x00040005,0x00000018,0x66696873,0x00000074, + 0x00080005,0x0000001d,0x336d3465,0x65646f43,0x6d6f7246,0x42363146,0x28737469,0x003b3175, + 0x00050005,0x0000001c,0x666c6168,0x73746942,0x00000000,0x00060005,0x00000021,0x336d3465, + 0x33466f54,0x31752832,0x0000003b,0x00040005,0x00000020,0x73746962,0x00000000,0x00060005, + 0x00000024,0x7543706d,0x53636962,0x28756c69,0x003b3166,0x00040005,0x00000023,0x756c6176, + 0x00000065,0x00060005,0x00000027,0x336d3465,0x6f547748,0x28323346,0x003b3175,0x00040005, + 0x00000026,0x65646f63,0x00000000,0x00080005,0x0000002b,0x666c6168,0x72696150,0x6f43664f, + 0x28736564,0x753b3175,0x00003b31,0x00040005,0x00000029,0x65646f63,0x00000073,0x00040005, + 0x0000002a,0x66696873,0x00000074,0x00070005,0x00000032,0x766c6168,0x664f7365,0x65646f43, + 0x75762873,0x00003b32,0x00040005,0x00000031,0x65646f63,0x00000073,0x00040005,0x00000034, + 0x73746962,0x00000000,0x00040005,0x00000037,0x6e676973,0x00000000,0x00050005,0x0000003b, + 0x6e67616d,0x64757469,0x00000065,0x00040005,0x00000055,0x6c616373,0x00006465,0x00030005, + 0x00000066,0x0062736c,0x00040005,0x0000006b,0x6e756f72,0x00646564,0x00050005,0x0000007f, + 0x746f7571,0x746e6569,0x00000000,0x00060005,0x00000083,0x616d6572,0x65646e69,0x73614d72, + 0x0000006b,0x00050005,0x00000087,0x616d6572,0x65646e69,0x00000072,0x00040005,0x0000008b, + 0x666c6168,0x00796177,0x00040005,0x000000a6,0x614e7369,0x0000006e,0x00050005,0x000000c2, + 0x6167656e,0x65766974,0x00000000,0x00050005,0x000000c8,0x6f707865,0x746e656e,0x00000000, + 0x00050005,0x000000ce,0x746e616d,0x61737369,0x00000000,0x00040005,0x000000d5,0x65646f63, + 0x00000000,0x00050005,0x000000dc,0x6e676973,0x63696669,0x00646e61,0x00040005,0x000000e8, + 0x66696873,0x00000074,0x00040005,0x000000f4,0x61726170,0x0000006d,0x00040005,0x000000f6, + 0x61726170,0x0000006d,0x00050005,0x000000fb,0x78453465,0x656e6f70,0x0000746e,0x00050005, + 0x000000fe,0x614d3465,0x7369746e,0x00006173,0x00040005,0x00000100,0x61726170,0x0000006d, + 0x00040005,0x00000102,0x61726170,0x0000006d,0x00050005,0x00000125,0x6167656e,0x65766974, + 0x00000000,0x00050005,0x00000129,0x6f707865,0x746e656e,0x00000000,0x00050005,0x0000012d, + 0x746e616d,0x61737369,0x00000000,0x00040005,0x00000134,0x756c6176,0x00000065,0x00040005, + 0x0000015b,0x6e756f62,0x00646564,0x00040005,0x00000160,0x61726170,0x0000006d,0x00050005, + 0x00000162,0x6f736261,0x6574756c,0x00000000,0x00040005,0x00000165,0x61726170,0x0000006d, + 0x00040005,0x00000167,0x656e6e69,0x00000072,0x00040005,0x0000016c,0x61726170,0x0000006d, + 0x00050005,0x0000016e,0x796c6f70,0x696d6f6e,0x00006c61,0x00040005,0x00000173,0x61726170, + 0x0000006d,0x00040005,0x00000178,0x61726170,0x0000006d,0x00040005,0x00000187,0x61726170, + 0x0000006d,0x00040005,0x00000190,0x61726170,0x0000006d,0x00040005,0x00000198,0x61726170, + 0x0000006d,0x00040005,0x000001a0,0x61726170,0x0000006d,0x00040005,0x000001a3,0x61726170, + 0x0000006d,0x00040005,0x000001a5,0x61726170,0x0000006d,0x00040005,0x000001a8,0x61726170, + 0x0000006d,0x00040005,0x000001aa,0x61726170,0x0000006d,0x00040005,0x000001ad,0x61726170, + 0x0000006d,0x00040005,0x000001af,0x61726170,0x0000006d,0x00040005,0x000001b2,0x61726170, + 0x0000006d,0x00040005,0x000001b7,0x65726874,0x00006461,0x00080005,0x000001ba,0x4c5f6c67, + 0x6c61636f,0x6f766e49,0x69746163,0x44496e6f,0x00000000,0x00050005,0x000001be,0x67627573, + 0x70756f72,0x00000000,0x00060005,0x000001bf,0x535f6c67,0x72676275,0x4970756f,0x00000044, + 0x00040005,0x000001c1,0x696c7073,0x00000074,0x00060005,0x000001c2,0x575f6c67,0x476b726f, + 0x70756f72,0x00004449,0x00040005,0x000001c5,0x494c5053,0x00004b54,0x00060005,0x000001c7, + 0x756c6f63,0x694c6e6d,0x7261656e,0x00000000,0x00040005,0x000001cb,0x63746162,0x00000068, + 0x00040005,0x000001cd,0x68737550,0x00000000,0x00050006,0x000001cd,0x00000000,0x73776f72, + 0x00000000,0x00040006,0x000001cd,0x00000001,0x0000004e,0x00050006,0x000001cd,0x00000002, + 0x74616d4e,0x00786972,0x00080006,0x000001cd,0x00000003,0x67696577,0x6f437468,0x6e6d756c, + 0x7366664f,0x00007465,0x00060006,0x000001cd,0x00000004,0x75706e69,0x72745374,0x00656469, + 0x00070006,0x000001cd,0x00000005,0x75706e69,0x6c6f4374,0x426e6d75,0x00657361,0x00070006, + 0x000001cd,0x00000006,0x7074756f,0x74537475,0x65646972,0x00000000,0x00080006,0x000001cd, + 0x00000007,0x7074756f,0x6f437475,0x6e6d756c,0x7366664f,0x00007465,0x00070006,0x000001cd, + 0x00000008,0x48787561,0x4f666c61,0x65736666,0x00000074,0x00050006,0x000001cd,0x00000009, + 0x63746162,0x00736568,0x00070006,0x000001cd,0x0000000a,0x756c6f63,0x72476e6d,0x7370756f, + 0x00000000,0x00060006,0x000001cd,0x0000000b,0x696c7073,0x72745374,0x00656469,0x00030005, + 0x000001cf,0x00006370,0x00050005,0x000001d6,0x756c6f63,0x72476e6d,0x0070756f,0x00050005, + 0x000001db,0x636f6c62,0x776f526b,0x00000000,0x00050005,0x000001e4,0x47425553,0x50554f52, + 0x00000053,0x00030005,0x000001e5,0x00004d42,0x00040005,0x000001e7,0x426c6f63,0x00657361, + 0x00040005,0x000001e9,0x454c4954,0x00000053,0x00030005,0x000001ea,0x00004e42,0x00050005, + 0x000001ec,0x4374756f,0x6d756c6f,0x0000006e,0x00040005,0x000001f6,0x656c6974,0x00776f52, + 0x00040005,0x000001f9,0x45524854,0x00534441,0x00060005,0x000001fa,0x47425553,0x50554f52, + 0x554f435f,0x0000544e,0x00050005,0x000001fb,0x5f574f52,0x454c4954,0x00000053,0x00070005, + 0x000001fc,0x47425553,0x50554f52,0x45505f53,0x4f525f52,0x00000057,0x00050005,0x000001ff, + 0x656c6974,0x756c6f43,0x00306e6d,0x00060005,0x00000202,0x554c4f43,0x545f4e4d,0x53454c49, + 0x00000000,0x00070005,0x00000203,0x454c4954,0x45505f53,0x55535f52,0x4f524742,0x00005055, + 0x00050005,0x00000205,0x73776f72,0x696c6156,0x00000064,0x00060005,0x0000020d,0x64656573, + 0x69736552,0x6c617564,0x00000000,0x00040005,0x0000020e,0x47414c46,0x00000053,0x00030005, + 0x00000217,0x00000069,0x00030005,0x00000221,0x00776f72,0x00040005,0x00000226,0x756c6f63, + 0x00006e6d,0x00040005,0x0000022b,0x756c6176,0x00000065,0x00040005,0x00000232,0x65646e69, + 0x00000078,0x00050005,0x00000244,0x69736552,0x6c617564,0x00003445,0x00060006,0x00000244, + 0x00000000,0x69736572,0x6c617564,0x00000038,0x00030005,0x00000246,0x00000000,0x00040005, + 0x0000024c,0x61726170,0x0000006d,0x00060005,0x00000250,0x69736552,0x6c617564,0x666c6148, + 0x00000000,0x00060006,0x00000250,0x00000000,0x69736572,0x6c617564,0x00003631,0x00030005, + 0x00000252,0x00000000,0x00030005,0x0000025f,0x00787541,0x00050006,0x0000025f,0x00000000, + 0x31787561,0x00000036,0x00030005,0x00000261,0x00000000,0x00040005,0x0000026b,0x61726170, + 0x0000006d,0x00040005,0x00000270,0x636f6c62,0x0036316b,0x00030005,0x00000279,0x00000074, + 0x00030005,0x00000286,0x00005f68,0x00030005,0x0000029a,0x00636361,0x00040005,0x000002a4, + 0x61746f74,0x0000006c,0x00050005,0x000002a9,0x6c6f4361,0x426e6d75,0x00657361,0x00030005, + 0x000002b4,0x0000004b,0x00040005,0x000002b8,0x6765426b,0x00006e69,0x00040005,0x000002bb, + 0x70657473,0x00000073,0x00030005,0x000002bd,0x00000073,0x00040005,0x000002c5,0x70657473, + 0x00000000,0x00030005,0x000002c9,0x00000069,0x00030005,0x000002d3,0x00000072,0x00030005, + 0x000002d6,0x00000077,0x00030005,0x000002d9,0x00776f72,0x00040005,0x000002e2,0x65646f63, + 0x00000073,0x00040005,0x000002e4,0x75706e49,0x00004174,0x00040006,0x000002e4,0x00000000, + 0x00003461,0x00030005,0x000002e6,0x00000000,0x00040005,0x000002fb,0x67617473,0x00004165, + 0x00040005,0x00000301,0x61726170,0x0000006d,0x00040005,0x0000030d,0x61726170,0x0000006d, + 0x00030005,0x00000314,0x00000069,0x00030005,0x0000031e,0x0000006e,0x00030005,0x00000321, + 0x00000077,0x00040005,0x00000324,0x65646f63,0x00000073,0x00040005,0x00000326,0x75706e49, + 0x00004274,0x00040006,0x00000326,0x00000000,0x00003462,0x00030005,0x00000328,0x00000000, + 0x00040005,0x00000342,0x67617473,0x00004265,0x00040005,0x00000348,0x61726170,0x0000006d, + 0x00040005,0x00000353,0x61726170,0x0000006d,0x00030005,0x0000035d,0x00000074,0x00030005, + 0x00000365,0x00005f73,0x00030005,0x0000036f,0x00005f61,0x00030005,0x0000037e,0x00005f62, + 0x00030005,0x0000039c,0x00005f72,0x00040005,0x000003aa,0x61726170,0x0000006d,0x00030005, + 0x000003b3,0x0000626b,0x00050005,0x000003b6,0x54524150,0x4f495449,0x0000004e,0x00030005, + 0x000003c8,0x00000074,0x00030005,0x000003e3,0x00005f72,0x00040005,0x000003f1,0x61726170, + 0x0000006d,0x00030005,0x00000401,0x00000074,0x00030005,0x00000413,0x00000074,0x00030005, + 0x0000041b,0x00005f68,0x00030005,0x00000432,0x00000069,0x00030005,0x0000043c,0x00776f72, + 0x00040005,0x00000441,0x756c6f63,0x00006e6d,0x00040005,0x0000044d,0x756c6176,0x00000065, + 0x00050005,0x00000455,0x7074754f,0x61487475,0x0000666c,0x00050006,0x00000455,0x00000000, + 0x3174756f,0x00000036,0x00030005,0x00000457,0x00000000,0x00040005,0x00000475,0x61726170, + 0x0000006d,0x00040005,0x00000478,0x65646e69,0x00000078,0x00050005,0x00000487,0x7074754f, + 0x34457475,0x00000000,0x00050006,0x00000487,0x00000000,0x3874756f,0x00000000,0x00030005, + 0x00000489,0x00000000,0x00040005,0x0000048b,0x61726170,0x0000006d,0x00040005,0x0000048e, + 0x61726170,0x0000006d,0x00040005,0x0000049b,0x54504544,0x00000048,0x00040005,0x0000049c, + 0x56444150,0x00000034,0x00040005,0x0000049f,0x4554534b,0x00000050,0x00040047,0x00000007, + 0x00000001,0x00000008,0x00040047,0x000001ba,0x0000000b,0x0000001b,0x00040047,0x000001bf, + 0x0000000b,0x00000028,0x00040047,0x000001c2,0x0000000b,0x0000001a,0x00040047,0x000001c5, + 0x00000001,0x00000009,0x00030047,0x000001cd,0x00000002,0x00050048,0x000001cd,0x00000000, + 0x00000023,0x00000000,0x00050048,0x000001cd,0x00000001,0x00000023,0x00000004,0x00050048, + 0x000001cd,0x00000002,0x00000023,0x00000008,0x00050048,0x000001cd,0x00000003,0x00000023, + 0x0000000c,0x00050048,0x000001cd,0x00000004,0x00000023,0x00000010,0x00050048,0x000001cd, + 0x00000005,0x00000023,0x00000014,0x00050048,0x000001cd,0x00000006,0x00000023,0x00000018, + 0x00050048,0x000001cd,0x00000007,0x00000023,0x0000001c,0x00050048,0x000001cd,0x00000008, + 0x00000023,0x00000020,0x00050048,0x000001cd,0x00000009,0x00000023,0x00000024,0x00050048, + 0x000001cd,0x0000000a,0x00000023,0x00000028,0x00050048,0x000001cd,0x0000000b,0x00000023, + 0x0000002c,0x00040047,0x000001e4,0x00000001,0x00000007,0x00040047,0x000001e9,0x00000001, + 0x00000001,0x00040047,0x0000020e,0x00000001,0x00000002,0x00040047,0x00000243,0x00000006, + 0x00000001,0x00030047,0x00000244,0x00000002,0x00040048,0x00000244,0x00000000,0x00000018, + 0x00050048,0x00000244,0x00000000,0x00000023,0x00000000,0x00030047,0x00000246,0x00000018, + 0x00040047,0x00000246,0x00000021,0x00000006,0x00040047,0x00000246,0x00000022,0x00000000, + 0x00040047,0x0000024f,0x00000006,0x00000002,0x00030047,0x00000250,0x00000002,0x00040048, + 0x00000250,0x00000000,0x00000018,0x00050048,0x00000250,0x00000000,0x00000023,0x00000000, + 0x00030047,0x00000252,0x00000018,0x00040047,0x00000252,0x00000021,0x00000003,0x00040047, + 0x00000252,0x00000022,0x00000000,0x00040047,0x0000025e,0x00000006,0x00000002,0x00030047, + 0x0000025f,0x00000002,0x00040048,0x0000025f,0x00000000,0x00000018,0x00050048,0x0000025f, + 0x00000000,0x00000023,0x00000000,0x00030047,0x00000261,0x00000018,0x00040047,0x00000261, + 0x00000021,0x00000004,0x00040047,0x00000261,0x00000022,0x00000000,0x00040047,0x000002b4, + 0x00000001,0x00000000,0x00040047,0x000002e3,0x00000006,0x00000010,0x00030047,0x000002e4, + 0x00000002,0x00040048,0x000002e4,0x00000000,0x00000018,0x00050048,0x000002e4,0x00000000, + 0x00000023,0x00000000,0x00030047,0x000002e6,0x00000018,0x00040047,0x000002e6,0x00000021, + 0x00000000,0x00040047,0x000002e6,0x00000022,0x00000000,0x00040047,0x00000325,0x00000006, + 0x00000010,0x00030047,0x00000326,0x00000002,0x00040048,0x00000326,0x00000000,0x00000018, + 0x00050048,0x00000326,0x00000000,0x00000023,0x00000000,0x00030047,0x00000328,0x00000018, + 0x00040047,0x00000328,0x00000021,0x00000001,0x00040047,0x00000328,0x00000022,0x00000000, + 0x00040047,0x000003b6,0x00000001,0x00000003,0x00040047,0x00000454,0x00000006,0x00000002, + 0x00030047,0x00000455,0x00000002,0x00040048,0x00000455,0x00000000,0x00000019,0x00050048, + 0x00000455,0x00000000,0x00000023,0x00000000,0x00030047,0x00000457,0x00000019,0x00040047, + 0x00000457,0x00000021,0x00000002,0x00040047,0x00000457,0x00000022,0x00000000,0x00040047, + 0x00000486,0x00000006,0x00000001,0x00030047,0x00000487,0x00000002,0x00040048,0x00000487, + 0x00000000,0x00000019,0x00050048,0x00000487,0x00000000,0x00000023,0x00000000,0x00030047, + 0x00000489,0x00000019,0x00040047,0x00000489,0x00000021,0x00000005,0x00040047,0x00000489, + 0x00000022,0x00000000,0x00040047,0x0000049b,0x00000001,0x00000004,0x00040047,0x0000049c, + 0x00000001,0x00000005,0x00040047,0x0000049d,0x00000001,0x00000008,0x00040047,0x0000049f, + 0x00000001,0x0000000a,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015, + 0x00000006,0x00000020,0x00000000,0x00040032,0x00000006,0x00000007,0x00000001,0x0004002b, + 0x00000006,0x00000008,0x00000001,0x00030016,0x00000009,0x00000020,0x00040020,0x0000000a, + 0x00000007,0x00000009,0x00040021,0x0000000b,0x00000009,0x0000000a,0x00030016,0x0000000f, + 0x00000010,0x00040020,0x00000010,0x00000007,0x0000000f,0x00040021,0x00000011,0x00000006, + 0x00000010,0x00040020,0x00000015,0x00000007,0x00000006,0x00050021,0x00000016,0x00000006, + 0x00000015,0x00000015,0x00040021,0x0000001b,0x00000006,0x00000015,0x00040021,0x0000001f, + 0x00000009,0x00000015,0x00040017,0x0000002d,0x00000006,0x00000002,0x00040020,0x0000002e, + 0x00000007,0x0000002d,0x00040017,0x0000002f,0x00000006,0x00000004,0x00040021,0x00000030, + 0x0000002f,0x0000002e,0x0004002b,0x00000006,0x00000039,0x80000000,0x0004002b,0x00000006, + 0x0000003d,0x7fffffff,0x0004002b,0x00000006,0x00000040,0x7f800000,0x00020014,0x00000041, + 0x0004002b,0x00000006,0x00000048,0x477ff000,0x0004002b,0x00000006,0x00000051,0x38800000, + 0x0004002b,0x00000009,0x00000058,0x4b800000,0x0004002b,0x00000009,0x0000005f,0x33800000, + 0x0004002b,0x00000006,0x00000068,0x0000000d,0x0004002b,0x00000006,0x0000006d,0x00000fff, + 0x0004002b,0x00000006,0x00000071,0xffffe000,0x00040015,0x0000007a,0x00000010,0x00000000, + 0x0004002b,0x00000006,0x0000009d,0x00000000,0x00040020,0x000000a5,0x00000007,0x00000041, + 0x0004002b,0x00000006,0x000000a8,0x00007c00,0x0004002b,0x00000006,0x000000ae,0x000003ff, + 0x0004002b,0x00000006,0x000000b7,0x00007fff,0x0004002b,0x00000006,0x000000bd,0x00000008, + 0x0004002b,0x00000006,0x000000bf,0x00000080,0x0004002b,0x00000006,0x000000c4,0x00008000, + 0x0004002b,0x00000006,0x000000ca,0x0000000a,0x0004002b,0x00000006,0x000000cc,0x0000001f, + 0x0004002b,0x00000006,0x000000d6,0x0000007e,0x0004002b,0x00000006,0x000000e4,0x00000400, + 0x0004002b,0x00000006,0x000000ee,0x0000000f,0x0004002b,0x00000006,0x000000f0,0x00000010, + 0x0004002b,0x00000006,0x000000ff,0x00000007,0x0004002b,0x00000006,0x00000112,0x00000006, + 0x0004002b,0x00000006,0x0000011b,0x00000003,0x0004002b,0x00000009,0x00000137,0x3b000000, + 0x0004002b,0x00000009,0x00000141,0x00000000,0x0004002b,0x00000009,0x00000143,0x3f800000, + 0x0004002b,0x00000009,0x00000146,0x3e000000,0x0004002b,0x00000006,0x0000014a,0x00000078, + 0x0004002b,0x00000006,0x0000014c,0x00000017,0x0004002b,0x00000009,0x0000015d,0xc0800000, + 0x0004002b,0x00000009,0x0000015e,0x40800000,0x0004002b,0x00000009,0x00000168,0xbd650000, + 0x0004002b,0x00000009,0x0000016a,0x3ee50000,0x0004002b,0x00000009,0x00000171,0x3f650000, + 0x0004002b,0x00000006,0x0000017d,0x0000007f,0x0004002b,0x00000006,0x00000185,0x000000ff, + 0x00040017,0x0000019b,0x0000000f,0x00000002,0x00040017,0x000001b8,0x00000006,0x00000003, + 0x00040020,0x000001b9,0x00000001,0x000001b8,0x0004003b,0x000001b9,0x000001ba,0x00000001, + 0x00040020,0x000001bb,0x00000001,0x00000006,0x0004003b,0x000001bb,0x000001bf,0x00000001, + 0x0004003b,0x000001b9,0x000001c2,0x00000001,0x00040032,0x00000006,0x000001c5,0x00000001, + 0x000e001e,0x000001cd,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006, + 0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00040020,0x000001ce, + 0x00000009,0x000001cd,0x0004003b,0x000001ce,0x000001cf,0x00000009,0x00040015,0x000001d0, + 0x00000020,0x00000001,0x0004002b,0x000001d0,0x000001d1,0x0000000a,0x00040020,0x000001d2, + 0x00000009,0x00000006,0x0004002b,0x00000006,0x000001de,0x00000002,0x0004002b,0x00000006, + 0x000001e1,0x0000ffff,0x00040032,0x00000006,0x000001e4,0x00000004,0x00060034,0x00000006, + 0x000001e5,0x00000084,0x000000f0,0x000001e4,0x00040032,0x00000006,0x000001e9,0x00000004, + 0x00060034,0x00000006,0x000001ea,0x00000084,0x000000f0,0x000001e9,0x0004002b,0x000001d0, + 0x000001ed,0x00000007,0x0004002b,0x000001d0,0x000001f1,0x00000001,0x0004002b,0x00000006, + 0x000001f8,0x00000020,0x00060034,0x00000006,0x000001f9,0x00000084,0x000001f8,0x000001e4, + 0x00060034,0x00000006,0x000001fa,0x00000086,0x000001f9,0x000001f8,0x00060034,0x00000006, + 0x000001fb,0x00000086,0x000001e5,0x000000f0,0x00060034,0x00000006,0x000001fc,0x00000086, + 0x000001fa,0x000001fb,0x00060034,0x00000006,0x00000202,0x00000086,0x000001ea,0x000000f0, + 0x00060034,0x00000006,0x00000203,0x00000086,0x00000202,0x000001fc,0x0004002b,0x000001d0, + 0x00000209,0x00000000,0x00040032,0x00000006,0x0000020e,0x00000000,0x00060034,0x00000006, + 0x0000020f,0x000000c7,0x0000020e,0x00000008,0x00060034,0x00000041,0x00000210,0x000000ab, + 0x0000020f,0x0000009d,0x00060034,0x00000006,0x0000021f,0x00000084,0x000001e5,0x000001ea, + 0x0004002b,0x000001d0,0x00000234,0x00000006,0x0004002b,0x00000006,0x0000023c,0x00000040, + 0x00060034,0x00000006,0x0000023d,0x000000c7,0x0000020e,0x0000023c,0x00060034,0x00000041, + 0x0000023e,0x000000ab,0x0000023d,0x0000009d,0x00040015,0x00000242,0x00000008,0x00000000, + 0x0003001d,0x00000243,0x00000242,0x0003001e,0x00000244,0x00000243,0x00040020,0x00000245, + 0x0000000c,0x00000244,0x0004003b,0x00000245,0x00000246,0x0000000c,0x00040020,0x00000248, + 0x0000000c,0x00000242,0x0003001d,0x0000024f,0x0000000f,0x0003001e,0x00000250,0x0000024f, + 0x00040020,0x00000251,0x0000000c,0x00000250,0x0004003b,0x00000251,0x00000252,0x0000000c, + 0x00040020,0x00000254,0x0000000c,0x0000000f,0x00060034,0x00000006,0x00000259,0x000000c7, + 0x0000020e,0x000001de,0x00060034,0x00000041,0x0000025a,0x000000ab,0x00000259,0x0000009d, + 0x0003001d,0x0000025e,0x0000000f,0x0003001e,0x0000025f,0x0000025e,0x00040020,0x00000260, + 0x0000000c,0x0000025f,0x0004003b,0x00000260,0x00000261,0x0000000c,0x0004002b,0x000001d0, + 0x00000262,0x00000008,0x00060034,0x00000006,0x0000026d,0x00000084,0x000001e5,0x000001ea, + 0x0004001c,0x0000026e,0x0000000f,0x0000026d,0x00040020,0x0000026f,0x00000004,0x0000026e, + 0x0004003b,0x0000026f,0x00000270,0x00000004,0x00040020,0x00000274,0x00000004,0x0000000f, + 0x0004002b,0x00000006,0x00000278,0x00000108,0x00071168,0x00000284,0x0000000f,0x0000011b, + 0x000000f0,0x000000f0,0x000001de,0x00040020,0x00000285,0x00000007,0x00000284,0x00071168, + 0x00000297,0x00000009,0x0000011b,0x000000f0,0x000000f0,0x000001de,0x0004001c,0x00000298, + 0x00000297,0x00000203,0x00040020,0x00000299,0x00000007,0x00000298,0x00040020,0x0000029e, + 0x00000007,0x00000297,0x0004002c,0x00000297,0x000002a2,0x00000141,0x0004002b,0x000001d0, + 0x000002aa,0x00000005,0x00060034,0x00000006,0x000002ad,0x000000c7,0x0000020e,0x000000bf, + 0x00060034,0x00000041,0x000002ae,0x000000ab,0x000002ad,0x0000009d,0x00040032,0x00000006, + 0x000002b4,0x00000020,0x00060034,0x00000006,0x000002ba,0x00000086,0x000002b4,0x000001f8, + 0x00060034,0x00000006,0x000002bb,0x00000086,0x000002ba,0x000001c5,0x00060034,0x00000006, + 0x000002d1,0x00000084,0x000001e5,0x000001de,0x00040020,0x000002e1,0x00000007,0x0000002f, + 0x0003001d,0x000002e3,0x0000002f,0x0003001e,0x000002e4,0x000002e3,0x00040020,0x000002e5, + 0x0000000c,0x000002e4,0x0004003b,0x000002e5,0x000002e6,0x0000000c,0x0004002b,0x000001d0, + 0x000002e8,0x00000004,0x00040020,0x000002f4,0x0000000c,0x0000002f,0x0004002b,0x00000006, + 0x000002f7,0x00000005,0x00060034,0x00000006,0x000002f8,0x00000084,0x000001e5,0x000002f7, + 0x0004001c,0x000002f9,0x0000002f,0x000002f8,0x00040020,0x000002fa,0x00000004,0x000002f9, + 0x0004003b,0x000002fa,0x000002fb,0x00000004,0x00040020,0x00000305,0x00000004,0x0000002f, + 0x00060034,0x00000006,0x0000031c,0x00000084,0x000001ea,0x000001de,0x0003001d,0x00000325, + 0x0000002f,0x0003001e,0x00000326,0x00000325,0x00040020,0x00000327,0x0000000c,0x00000326, + 0x0004003b,0x00000327,0x00000328,0x0000000c,0x00060034,0x00000006,0x0000032a,0x00000086, + 0x000002b4,0x000001f8,0x0004002b,0x000001d0,0x0000032e,0x00000002,0x0004002b,0x000001d0, + 0x00000332,0x00000003,0x00060034,0x00000006,0x0000033f,0x00000084,0x000001ea,0x000002f7, + 0x0004001c,0x00000340,0x0000002f,0x0000033f,0x00040020,0x00000341,0x00000004,0x00000340, + 0x0004003b,0x00000341,0x00000342,0x00000004,0x00071168,0x0000036d,0x0000000f,0x0000011b, + 0x000000f0,0x000000f0,0x0000009d,0x00040020,0x0000036e,0x00000007,0x0000036d,0x00071168, + 0x0000037c,0x0000000f,0x0000011b,0x000000f0,0x000000f0,0x00000008,0x00040020,0x0000037d, + 0x00000007,0x0000037c,0x00040020,0x0000039b,0x00000007,0x000001d0,0x00040032,0x00000006, + 0x000003b6,0x00000000,0x00060034,0x00000041,0x000003b7,0x000000ab,0x000003b6,0x0000009d, + 0x00060034,0x00000041,0x000003fe,0x000000ab,0x000003b6,0x0000009d,0x00060034,0x00000006, + 0x0000043a,0x00000084,0x000001e5,0x000001ea,0x00060034,0x00000041,0x00000451,0x000000ac, + 0x000001c5,0x00000008,0x0003001d,0x00000454,0x0000000f,0x0003001e,0x00000455,0x00000454, + 0x00040020,0x00000456,0x0000000c,0x00000455,0x0004003b,0x00000456,0x00000457,0x0000000c, + 0x0004002b,0x000001d0,0x00000459,0x0000000b,0x00060034,0x00000006,0x0000046f,0x000000c7, + 0x0000020e,0x000000bd,0x00060034,0x00000041,0x00000470,0x000000ab,0x0000046f,0x0000009d, + 0x0004002b,0x00000006,0x00000481,0x00000030,0x00060034,0x00000006,0x00000482,0x000000c7, + 0x0000020e,0x00000481,0x00060034,0x00000041,0x00000483,0x000000ab,0x00000482,0x0000009d, + 0x0003001d,0x00000486,0x00000242,0x0003001e,0x00000487,0x00000486,0x00040020,0x00000488, + 0x0000000c,0x00000487,0x0004003b,0x00000488,0x00000489,0x0000000c,0x00060034,0x00000006, + 0x00000492,0x000000c7,0x0000020e,0x000000f0,0x00060034,0x00000041,0x00000493,0x000000aa, + 0x00000492,0x0000009d,0x00040032,0x00000006,0x0000049b,0x00000004,0x00040032,0x00000006, + 0x0000049c,0x00000001,0x00040032,0x00000006,0x0000049d,0x00000001,0x00060033,0x000001b8, + 0x0000049e,0x0000049d,0x00000008,0x00000008,0x00040032,0x00000006,0x0000049f,0x00000020, + 0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b, + 0x00000015,0x000001b7,0x00000007,0x0004003b,0x00000015,0x000001be,0x00000007,0x0004003b, + 0x00000015,0x000001c1,0x00000007,0x0004003b,0x00000015,0x000001c7,0x00000007,0x0004003b, + 0x00000015,0x000001cb,0x00000007,0x0004003b,0x00000015,0x000001d6,0x00000007,0x0004003b, + 0x00000015,0x000001db,0x00000007,0x0004003b,0x00000015,0x000001e7,0x00000007,0x0004003b, + 0x00000015,0x000001ec,0x00000007,0x0004003b,0x00000015,0x000001f6,0x00000007,0x0004003b, + 0x00000015,0x000001ff,0x00000007,0x0004003b,0x000000a5,0x00000205,0x00000007,0x0004003b, + 0x000000a5,0x0000020d,0x00000007,0x0004003b,0x00000015,0x00000217,0x00000007,0x0004003b, + 0x00000015,0x00000221,0x00000007,0x0004003b,0x00000015,0x00000226,0x00000007,0x0004003b, + 0x0000000a,0x0000022b,0x00000007,0x0004003b,0x00000015,0x00000232,0x00000007,0x0004003b, + 0x0000000a,0x0000023f,0x00000007,0x0004003b,0x00000015,0x0000024c,0x00000007,0x0004003b, + 0x0000000a,0x0000026b,0x00000007,0x0004003b,0x00000015,0x00000279,0x00000007,0x0004003b, + 0x00000285,0x00000286,0x00000007,0x0004003b,0x00000299,0x0000029a,0x00000007,0x0004003b, + 0x00000299,0x000002a4,0x00000007,0x0004003b,0x00000015,0x000002a9,0x00000007,0x0004003b, + 0x00000015,0x000002af,0x00000007,0x0004003b,0x00000015,0x000002b8,0x00000007,0x0004003b, + 0x00000015,0x000002bd,0x00000007,0x0004003b,0x00000015,0x000002c5,0x00000007,0x0004003b, + 0x00000015,0x000002c9,0x00000007,0x0004003b,0x00000015,0x000002d3,0x00000007,0x0004003b, + 0x00000015,0x000002d6,0x00000007,0x0004003b,0x00000015,0x000002d9,0x00000007,0x0004003b, + 0x000002e1,0x000002e2,0x00000007,0x0004003b,0x0000002e,0x00000301,0x00000007,0x0004003b, + 0x0000002e,0x0000030d,0x00000007,0x0004003b,0x00000015,0x00000314,0x00000007,0x0004003b, + 0x00000015,0x0000031e,0x00000007,0x0004003b,0x00000015,0x00000321,0x00000007,0x0004003b, + 0x000002e1,0x00000324,0x00000007,0x0004003b,0x0000002e,0x00000348,0x00000007,0x0004003b, + 0x0000002e,0x00000353,0x00000007,0x0004003b,0x00000015,0x0000035d,0x00000007,0x0004003b, + 0x00000015,0x00000365,0x00000007,0x0004003b,0x0000036e,0x0000036f,0x00000007,0x0004003b, + 0x0000037d,0x0000037e,0x00000007,0x0004003b,0x0000039b,0x0000039c,0x00000007,0x0004003b, + 0x0000000a,0x000003aa,0x00000007,0x0004003b,0x00000015,0x000003b3,0x00000007,0x0004003b, + 0x00000015,0x000003c8,0x00000007,0x0004003b,0x0000039b,0x000003e3,0x00000007,0x0004003b, + 0x0000000a,0x000003f1,0x00000007,0x0004003b,0x00000015,0x00000401,0x00000007,0x0004003b, + 0x00000015,0x00000413,0x00000007,0x0004003b,0x00000285,0x0000041b,0x00000007,0x0004003b, + 0x00000015,0x00000432,0x00000007,0x0004003b,0x00000015,0x0000043c,0x00000007,0x0004003b, + 0x00000015,0x00000441,0x00000007,0x0004003b,0x00000010,0x0000044d,0x00000007,0x0004003b, + 0x0000000a,0x00000475,0x00000007,0x0004003b,0x00000015,0x00000478,0x00000007,0x0004003b, + 0x00000010,0x0000048b,0x00000007,0x0004003b,0x00000015,0x0000048e,0x00000007,0x00050041, + 0x000001bb,0x000001bc,0x000001ba,0x0000009d,0x0004003d,0x00000006,0x000001bd,0x000001bc, + 0x0003003e,0x000001b7,0x000001bd,0x0004003d,0x00000006,0x000001c0,0x000001bf,0x0003003e, + 0x000001be,0x000001c0,0x00050041,0x000001bb,0x000001c3,0x000001c2,0x0000009d,0x0004003d, + 0x00000006,0x000001c4,0x000001c3,0x00050089,0x00000006,0x000001c6,0x000001c4,0x000001c5, + 0x0003003e,0x000001c1,0x000001c6,0x00050041,0x000001bb,0x000001c8,0x000001c2,0x0000009d, + 0x0004003d,0x00000006,0x000001c9,0x000001c8,0x00050086,0x00000006,0x000001ca,0x000001c9, + 0x000001c5,0x0003003e,0x000001c7,0x000001ca,0x0004003d,0x00000006,0x000001cc,0x000001c7, + 0x00050041,0x000001d2,0x000001d3,0x000001cf,0x000001d1,0x0004003d,0x00000006,0x000001d4, + 0x000001d3,0x00050086,0x00000006,0x000001d5,0x000001cc,0x000001d4,0x0003003e,0x000001cb, + 0x000001d5,0x0004003d,0x00000006,0x000001d7,0x000001c7,0x00050041,0x000001d2,0x000001d8, + 0x000001cf,0x000001d1,0x0004003d,0x00000006,0x000001d9,0x000001d8,0x00050089,0x00000006, + 0x000001da,0x000001d7,0x000001d9,0x0003003e,0x000001d6,0x000001da,0x00050041,0x000001bb, + 0x000001dc,0x000001c2,0x00000008,0x0004003d,0x00000006,0x000001dd,0x000001dc,0x00050041, + 0x000001bb,0x000001df,0x000001c2,0x000001de,0x0004003d,0x00000006,0x000001e0,0x000001df, + 0x00050084,0x00000006,0x000001e2,0x000001e0,0x000001e1,0x00050080,0x00000006,0x000001e3, + 0x000001dd,0x000001e2,0x00050084,0x00000006,0x000001e6,0x000001e3,0x000001e5,0x0003003e, + 0x000001db,0x000001e6,0x0004003d,0x00000006,0x000001e8,0x000001d6,0x00050084,0x00000006, + 0x000001eb,0x000001e8,0x000001ea,0x0003003e,0x000001e7,0x000001eb,0x00050041,0x000001d2, + 0x000001ee,0x000001cf,0x000001ed,0x0004003d,0x00000006,0x000001ef,0x000001ee,0x0004003d, + 0x00000006,0x000001f0,0x000001cb,0x00050041,0x000001d2,0x000001f2,0x000001cf,0x000001f1, + 0x0004003d,0x00000006,0x000001f3,0x000001f2,0x00050084,0x00000006,0x000001f4,0x000001f0, + 0x000001f3,0x00050080,0x00000006,0x000001f5,0x000001ef,0x000001f4,0x0003003e,0x000001ec, + 0x000001f5,0x0004003d,0x00000006,0x000001f7,0x000001be,0x00050086,0x00000006,0x000001fd, + 0x000001f7,0x000001fc,0x00050084,0x00000006,0x000001fe,0x000001fd,0x000000f0,0x0003003e, + 0x000001f6,0x000001fe,0x0004003d,0x00000006,0x00000200,0x000001be,0x00050089,0x00000006, + 0x00000201,0x00000200,0x000001fc,0x00050084,0x00000006,0x00000204,0x00000201,0x00000203, + 0x0003003e,0x000001ff,0x00000204,0x0004003d,0x00000006,0x00000206,0x000001db,0x0004003d, + 0x00000006,0x00000207,0x000001f6,0x00050080,0x00000006,0x00000208,0x00000206,0x00000207, + 0x00050041,0x000001d2,0x0000020a,0x000001cf,0x00000209,0x0004003d,0x00000006,0x0000020b, + 0x0000020a,0x000500b0,0x00000041,0x0000020c,0x00000208,0x0000020b,0x0003003e,0x00000205, + 0x0000020c,0x0004003d,0x00000006,0x00000211,0x000001c1,0x000500aa,0x00000041,0x00000212, + 0x00000211,0x0000009d,0x000500a7,0x00000041,0x00000213,0x00000210,0x00000212,0x0003003e, + 0x0000020d,0x00000213,0x0004003d,0x00000041,0x00000214,0x0000020d,0x000300f7,0x00000216, + 0x00000000,0x000400fa,0x00000214,0x00000215,0x00000216,0x000200f8,0x00000215,0x0004003d, + 0x00000006,0x00000218,0x000001b7,0x0003003e,0x00000217,0x00000218,0x000200f9,0x00000219, + 0x000200f8,0x00000219,0x000400f6,0x0000021b,0x0000021c,0x00000000,0x000200f9,0x0000021d, + 0x000200f8,0x0000021d,0x0004003d,0x00000006,0x0000021e,0x00000217,0x000500b0,0x00000041, + 0x00000220,0x0000021e,0x0000021f,0x000400fa,0x00000220,0x0000021a,0x0000021b,0x000200f8, + 0x0000021a,0x0004003d,0x00000006,0x00000222,0x000001db,0x0004003d,0x00000006,0x00000223, + 0x00000217,0x00050086,0x00000006,0x00000224,0x00000223,0x000001ea,0x00050080,0x00000006, + 0x00000225,0x00000222,0x00000224,0x0003003e,0x00000221,0x00000225,0x0004003d,0x00000006, + 0x00000227,0x000001e7,0x0004003d,0x00000006,0x00000228,0x00000217,0x00050089,0x00000006, + 0x00000229,0x00000228,0x000001ea,0x00050080,0x00000006,0x0000022a,0x00000227,0x00000229, + 0x0003003e,0x00000226,0x0000022a,0x0003003e,0x0000022b,0x00000141,0x0004003d,0x00000006, + 0x0000022c,0x00000221,0x00050041,0x000001d2,0x0000022d,0x000001cf,0x00000209,0x0004003d, + 0x00000006,0x0000022e,0x0000022d,0x000500b0,0x00000041,0x0000022f,0x0000022c,0x0000022e, + 0x000300f7,0x00000231,0x00000000,0x000400fa,0x0000022f,0x00000230,0x00000231,0x000200f8, + 0x00000230,0x0004003d,0x00000006,0x00000233,0x00000221,0x00050041,0x000001d2,0x00000235, + 0x000001cf,0x00000234,0x0004003d,0x00000006,0x00000236,0x00000235,0x00050084,0x00000006, + 0x00000237,0x00000233,0x00000236,0x0004003d,0x00000006,0x00000238,0x000001ec,0x00050080, + 0x00000006,0x00000239,0x00000237,0x00000238,0x0004003d,0x00000006,0x0000023a,0x00000226, + 0x00050080,0x00000006,0x0000023b,0x00000239,0x0000023a,0x0003003e,0x00000232,0x0000023b, + 0x000300f7,0x00000241,0x00000000,0x000400fa,0x0000023e,0x00000240,0x0000024e,0x000200f8, + 0x00000240,0x0004003d,0x00000006,0x00000247,0x00000232,0x00060041,0x00000248,0x00000249, + 0x00000246,0x00000209,0x00000247,0x0004003d,0x00000242,0x0000024a,0x00000249,0x00040071, + 0x00000006,0x0000024b,0x0000024a,0x0003003e,0x0000024c,0x0000024b,0x00050039,0x00000009, + 0x0000024d,0x00000027,0x0000024c,0x0003003e,0x0000023f,0x0000024d,0x000200f9,0x00000241, + 0x000200f8,0x0000024e,0x0004003d,0x00000006,0x00000253,0x00000232,0x00060041,0x00000254, + 0x00000255,0x00000252,0x00000209,0x00000253,0x0004003d,0x0000000f,0x00000256,0x00000255, + 0x00040073,0x00000009,0x00000257,0x00000256,0x0003003e,0x0000023f,0x00000257,0x000200f9, + 0x00000241,0x000200f8,0x00000241,0x0004003d,0x00000009,0x00000258,0x0000023f,0x0003003e, + 0x0000022b,0x00000258,0x000300f7,0x0000025c,0x00000000,0x000400fa,0x0000025a,0x0000025b, + 0x0000025c,0x000200f8,0x0000025b,0x0004003d,0x00000009,0x0000025d,0x0000022b,0x00050041, + 0x000001d2,0x00000263,0x000001cf,0x00000262,0x0004003d,0x00000006,0x00000264,0x00000263, + 0x0004003d,0x00000006,0x00000265,0x00000226,0x00050080,0x00000006,0x00000266,0x00000264, + 0x00000265,0x00060041,0x00000254,0x00000267,0x00000261,0x00000209,0x00000266,0x0004003d, + 0x0000000f,0x00000268,0x00000267,0x00040073,0x00000009,0x00000269,0x00000268,0x00050085, + 0x00000009,0x0000026a,0x0000025d,0x00000269,0x0003003e,0x0000026b,0x0000026a,0x00050039, + 0x00000009,0x0000026c,0x0000000d,0x0000026b,0x0003003e,0x0000022b,0x0000026c,0x000200f9, + 0x0000025c,0x000200f8,0x0000025c,0x000200f9,0x00000231,0x000200f8,0x00000231,0x0004003d, + 0x00000006,0x00000271,0x00000217,0x0004003d,0x00000009,0x00000272,0x0000022b,0x00040073, + 0x0000000f,0x00000273,0x00000272,0x00050041,0x00000274,0x00000275,0x00000270,0x00000271, + 0x0005003e,0x00000275,0x00000273,0x00000028,0x000001de,0x000200f9,0x0000021c,0x000200f8, + 0x0000021c,0x0004003d,0x00000006,0x00000276,0x00000217,0x00050080,0x00000006,0x00000277, + 0x00000276,0x000001f9,0x0003003e,0x00000217,0x00000277,0x000200f9,0x00000219,0x000200f8, + 0x0000021b,0x000400e0,0x000001de,0x000001de,0x00000278,0x000200f9,0x00000216,0x000200f8, + 0x00000216,0x0003003e,0x00000279,0x0000009d,0x000200f9,0x0000027a,0x000200f8,0x0000027a, + 0x000400f6,0x0000027c,0x0000027d,0x00000001,0x000200f9,0x0000027e,0x000200f8,0x0000027e, + 0x0004003d,0x00000006,0x0000027f,0x00000279,0x000500b0,0x00000041,0x00000280,0x0000027f, + 0x00000203,0x000400fa,0x00000280,0x0000027b,0x0000027c,0x000200f8,0x0000027b,0x0004003d, + 0x00000041,0x00000281,0x0000020d,0x000300f7,0x00000283,0x00000000,0x000400fa,0x00000281, + 0x00000282,0x000002a0,0x000200f8,0x00000282,0x0004003d,0x00000006,0x00000287,0x000001f6, + 0x00050084,0x00000006,0x00000288,0x00000287,0x000001ea,0x0004003d,0x00000006,0x00000289, + 0x000001ff,0x0004003d,0x00000006,0x0000028a,0x00000279,0x00050080,0x00000006,0x0000028b, + 0x00000289,0x0000028a,0x00050084,0x00000006,0x0000028c,0x0000028b,0x000000f0,0x00050080, + 0x00000006,0x0000028d,0x00000288,0x0000028c,0x00050041,0x00000274,0x0000028e,0x00000270, + 0x0000028d,0x0004003d,0x00000006,0x0000028f,0x000001f6,0x00050084,0x00000006,0x00000290, + 0x0000028f,0x000001ea,0x0004003d,0x00000006,0x00000291,0x000001ff,0x0004003d,0x00000006, + 0x00000292,0x00000279,0x00050080,0x00000006,0x00000293,0x00000291,0x00000292,0x00050084, + 0x00000006,0x00000294,0x00000293,0x000000f0,0x00050080,0x00000006,0x00000295,0x00000290, + 0x00000294,0x00081169,0x00000284,0x00000296,0x0000028e,0x00000209,0x000001ea,0x00000030, + 0x000001de,0x0003003e,0x00000286,0x00000296,0x0004003d,0x00000006,0x0000029b,0x00000279, + 0x0004003d,0x00000284,0x0000029c,0x00000286,0x00040073,0x00000297,0x0000029d,0x0000029c, + 0x00050041,0x0000029e,0x0000029f,0x0000029a,0x0000029b,0x0003003e,0x0000029f,0x0000029d, + 0x000200f9,0x00000283,0x000200f8,0x000002a0,0x0004003d,0x00000006,0x000002a1,0x00000279, + 0x00050041,0x0000029e,0x000002a3,0x0000029a,0x000002a1,0x0003003e,0x000002a3,0x000002a2, + 0x000200f9,0x00000283,0x000200f8,0x00000283,0x0004003d,0x00000006,0x000002a5,0x00000279, + 0x00050041,0x0000029e,0x000002a6,0x000002a4,0x000002a5,0x0003003e,0x000002a6,0x000002a2, + 0x000200f9,0x0000027d,0x000200f8,0x0000027d,0x0004003d,0x00000006,0x000002a7,0x00000279, + 0x00050080,0x00000006,0x000002a8,0x000002a7,0x000001f1,0x0003003e,0x00000279,0x000002a8, + 0x000200f9,0x0000027a,0x000200f8,0x0000027c,0x00050041,0x000001d2,0x000002ab,0x000001cf, + 0x000002aa,0x0004003d,0x00000006,0x000002ac,0x000002ab,0x000300f7,0x000002b1,0x00000000, + 0x000400fa,0x000002ae,0x000002b0,0x000002b2,0x000200f8,0x000002b0,0x0003003e,0x000002af, + 0x0000009d,0x000200f9,0x000002b1,0x000200f8,0x000002b2,0x0004003d,0x00000006,0x000002b3, + 0x000001cb,0x00050084,0x00000006,0x000002b5,0x000002b3,0x000002b4,0x0003003e,0x000002af, + 0x000002b5,0x000200f9,0x000002b1,0x000200f8,0x000002b1,0x0004003d,0x00000006,0x000002b6, + 0x000002af,0x00050080,0x00000006,0x000002b7,0x000002ac,0x000002b6,0x0003003e,0x000002a9, + 0x000002b7,0x0004003d,0x00000006,0x000002b9,0x000001c1,0x00050084,0x00000006,0x000002bc, + 0x000002b9,0x000002bb,0x0003003e,0x000002b8,0x000002bc,0x0003003e,0x000002bd,0x0000009d, + 0x000200f9,0x000002be,0x000200f8,0x000002be,0x000400f6,0x000002c0,0x000002c1,0x00000000, + 0x000200f9,0x000002c2,0x000200f8,0x000002c2,0x0004003d,0x00000006,0x000002c3,0x000002bd, + 0x000500b0,0x00000041,0x000002c4,0x000002c3,0x000002bb,0x000400fa,0x000002c4,0x000002bf, + 0x000002c0,0x000200f8,0x000002bf,0x0004003d,0x00000006,0x000002c6,0x000002b8,0x0004003d, + 0x00000006,0x000002c7,0x000002bd,0x00050080,0x00000006,0x000002c8,0x000002c6,0x000002c7, + 0x0003003e,0x000002c5,0x000002c8,0x000400e0,0x000001de,0x000001de,0x00000278,0x0004003d, + 0x00000006,0x000002ca,0x000001b7,0x0003003e,0x000002c9,0x000002ca,0x000200f9,0x000002cb, + 0x000200f8,0x000002cb,0x000400f6,0x000002cd,0x000002ce,0x00000000,0x000200f9,0x000002cf, + 0x000200f8,0x000002cf,0x0004003d,0x00000006,0x000002d0,0x000002c9,0x000500b0,0x00000041, + 0x000002d2,0x000002d0,0x000002d1,0x000400fa,0x000002d2,0x000002cc,0x000002cd,0x000200f8, + 0x000002cc,0x0004003d,0x00000006,0x000002d4,0x000002c9,0x000500c2,0x00000006,0x000002d5, + 0x000002d4,0x00000008,0x0003003e,0x000002d3,0x000002d5,0x0004003d,0x00000006,0x000002d7, + 0x000002c9,0x000500c7,0x00000006,0x000002d8,0x000002d7,0x00000008,0x0003003e,0x000002d6, + 0x000002d8,0x0004003d,0x00000006,0x000002da,0x000001db,0x0004003d,0x00000006,0x000002db, + 0x000002d3,0x00050080,0x00000006,0x000002dc,0x000002da,0x000002db,0x00050041,0x000001d2, + 0x000002dd,0x000001cf,0x00000209,0x0004003d,0x00000006,0x000002de,0x000002dd,0x00050082, + 0x00000006,0x000002df,0x000002de,0x00000008,0x0007000c,0x00000006,0x000002e0,0x00000001, + 0x00000026,0x000002dc,0x000002df,0x0003003e,0x000002d9,0x000002e0,0x0004003d,0x00000006, + 0x000002e7,0x000002d9,0x00050041,0x000001d2,0x000002e9,0x000001cf,0x000002e8,0x0004003d, + 0x00000006,0x000002ea,0x000002e9,0x00050084,0x00000006,0x000002eb,0x000002e7,0x000002ea, + 0x0004003d,0x00000006,0x000002ec,0x000002a9,0x00050080,0x00000006,0x000002ed,0x000002eb, + 0x000002ec,0x0004003d,0x00000006,0x000002ee,0x000002c5,0x00050084,0x00000006,0x000002ef, + 0x000002ee,0x000001f8,0x00050080,0x00000006,0x000002f0,0x000002ed,0x000002ef,0x00050086, + 0x00000006,0x000002f1,0x000002f0,0x000000f0,0x0004003d,0x00000006,0x000002f2,0x000002d6, + 0x00050080,0x00000006,0x000002f3,0x000002f1,0x000002f2,0x00060041,0x000002f4,0x000002f5, + 0x000002e6,0x00000209,0x000002f3,0x0004003d,0x0000002f,0x000002f6,0x000002f5,0x0003003e, + 0x000002e2,0x000002f6,0x0004003d,0x00000006,0x000002fc,0x000002d3,0x00050084,0x00000006, + 0x000002fd,0x000002fc,0x000002f7,0x0004003d,0x00000006,0x000002fe,0x000002d6,0x00050084, + 0x00000006,0x000002ff,0x000002fe,0x000001de,0x00050080,0x00000006,0x00000300,0x000002fd, + 0x000002ff,0x0004003d,0x0000002f,0x00000302,0x000002e2,0x0007004f,0x0000002d,0x00000303, + 0x00000302,0x00000302,0x00000000,0x00000001,0x0003003e,0x00000301,0x00000303,0x00050039, + 0x0000002f,0x00000304,0x00000032,0x00000301,0x00050041,0x00000305,0x00000306,0x000002fb, + 0x00000300,0x0005003e,0x00000306,0x00000304,0x00000028,0x000001de,0x0004003d,0x00000006, + 0x00000307,0x000002d3,0x00050084,0x00000006,0x00000308,0x00000307,0x000002f7,0x0004003d, + 0x00000006,0x00000309,0x000002d6,0x00050084,0x00000006,0x0000030a,0x00000309,0x000001de, + 0x00050080,0x00000006,0x0000030b,0x00000308,0x0000030a,0x00050080,0x00000006,0x0000030c, + 0x0000030b,0x00000008,0x0004003d,0x0000002f,0x0000030e,0x000002e2,0x0007004f,0x0000002d, + 0x0000030f,0x0000030e,0x0000030e,0x00000002,0x00000003,0x0003003e,0x0000030d,0x0000030f, + 0x00050039,0x0000002f,0x00000310,0x00000032,0x0000030d,0x00050041,0x00000305,0x00000311, + 0x000002fb,0x0000030c,0x0005003e,0x00000311,0x00000310,0x00000028,0x000001de,0x000200f9, + 0x000002ce,0x000200f8,0x000002ce,0x0004003d,0x00000006,0x00000312,0x000002c9,0x00050080, + 0x00000006,0x00000313,0x00000312,0x000001f9,0x0003003e,0x000002c9,0x00000313,0x000200f9, + 0x000002cb,0x000200f8,0x000002cd,0x0004003d,0x00000006,0x00000315,0x000001b7,0x0003003e, + 0x00000314,0x00000315,0x000200f9,0x00000316,0x000200f8,0x00000316,0x000400f6,0x00000318, + 0x00000319,0x00000000,0x000200f9,0x0000031a,0x000200f8,0x0000031a,0x0004003d,0x00000006, + 0x0000031b,0x00000314,0x000500b0,0x00000041,0x0000031d,0x0000031b,0x0000031c,0x000400fa, + 0x0000031d,0x00000317,0x00000318,0x000200f8,0x00000317,0x0004003d,0x00000006,0x0000031f, + 0x00000314,0x000500c2,0x00000006,0x00000320,0x0000031f,0x00000008,0x0003003e,0x0000031e, + 0x00000320,0x0004003d,0x00000006,0x00000322,0x00000314,0x000500c7,0x00000006,0x00000323, + 0x00000322,0x00000008,0x0003003e,0x00000321,0x00000323,0x0004003d,0x00000006,0x00000329, + 0x000001cb,0x00050084,0x00000006,0x0000032b,0x00000329,0x0000032a,0x0004003d,0x00000006, + 0x0000032c,0x000002c5,0x00050080,0x00000006,0x0000032d,0x0000032b,0x0000032c,0x00050041, + 0x000001d2,0x0000032f,0x000001cf,0x0000032e,0x0004003d,0x00000006,0x00000330,0x0000032f, + 0x00050084,0x00000006,0x00000331,0x0000032d,0x00000330,0x00050041,0x000001d2,0x00000333, + 0x000001cf,0x00000332,0x0004003d,0x00000006,0x00000334,0x00000333,0x00050080,0x00000006, + 0x00000335,0x00000331,0x00000334,0x0004003d,0x00000006,0x00000336,0x000001e7,0x00050080, + 0x00000006,0x00000337,0x00000335,0x00000336,0x0004003d,0x00000006,0x00000338,0x0000031e, + 0x00050080,0x00000006,0x00000339,0x00000337,0x00000338,0x00050084,0x00000006,0x0000033a, + 0x00000339,0x000001de,0x0004003d,0x00000006,0x0000033b,0x00000321,0x00050080,0x00000006, + 0x0000033c,0x0000033a,0x0000033b,0x00060041,0x000002f4,0x0000033d,0x00000328,0x00000209, + 0x0000033c,0x0004003d,0x0000002f,0x0000033e,0x0000033d,0x0003003e,0x00000324,0x0000033e, + 0x0004003d,0x00000006,0x00000343,0x0000031e,0x00050084,0x00000006,0x00000344,0x00000343, + 0x000002f7,0x0004003d,0x00000006,0x00000345,0x00000321,0x00050084,0x00000006,0x00000346, + 0x00000345,0x000001de,0x00050080,0x00000006,0x00000347,0x00000344,0x00000346,0x0004003d, + 0x0000002f,0x00000349,0x00000324,0x0007004f,0x0000002d,0x0000034a,0x00000349,0x00000349, + 0x00000000,0x00000001,0x0003003e,0x00000348,0x0000034a,0x00050039,0x0000002f,0x0000034b, + 0x00000032,0x00000348,0x00050041,0x00000305,0x0000034c,0x00000342,0x00000347,0x0005003e, + 0x0000034c,0x0000034b,0x00000028,0x000001de,0x0004003d,0x00000006,0x0000034d,0x0000031e, + 0x00050084,0x00000006,0x0000034e,0x0000034d,0x000002f7,0x0004003d,0x00000006,0x0000034f, + 0x00000321,0x00050084,0x00000006,0x00000350,0x0000034f,0x000001de,0x00050080,0x00000006, + 0x00000351,0x0000034e,0x00000350,0x00050080,0x00000006,0x00000352,0x00000351,0x00000008, + 0x0004003d,0x0000002f,0x00000354,0x00000324,0x0007004f,0x0000002d,0x00000355,0x00000354, + 0x00000354,0x00000002,0x00000003,0x0003003e,0x00000353,0x00000355,0x00050039,0x0000002f, + 0x00000356,0x00000032,0x00000353,0x00050041,0x00000305,0x00000357,0x00000342,0x00000352, + 0x0005003e,0x00000357,0x00000356,0x00000028,0x000001de,0x000200f9,0x00000319,0x000200f8, + 0x00000319,0x0004003d,0x00000006,0x00000358,0x00000314,0x00050080,0x00000006,0x00000359, + 0x00000358,0x000001f9,0x0003003e,0x00000314,0x00000359,0x000200f9,0x00000316,0x000200f8, + 0x00000318,0x000400e0,0x000001de,0x000001de,0x00000278,0x0004003d,0x00000041,0x0000035a, + 0x00000205,0x000300f7,0x0000035c,0x00000000,0x000400fa,0x0000035a,0x0000035b,0x0000035c, + 0x000200f8,0x0000035b,0x0003003e,0x0000035d,0x0000009d,0x000200f9,0x0000035e,0x000200f8, + 0x0000035e,0x000400f6,0x00000360,0x00000361,0x00000001,0x000200f9,0x00000362,0x000200f8, + 0x00000362,0x0004003d,0x00000006,0x00000363,0x0000035d,0x000500b0,0x00000041,0x00000364, + 0x00000363,0x00000203,0x000400fa,0x00000364,0x0000035f,0x00000360,0x000200f8,0x0000035f, + 0x0003003e,0x00000365,0x0000009d,0x000200f9,0x00000366,0x000200f8,0x00000366,0x000400f6, + 0x00000368,0x00000369,0x00000001,0x000200f9,0x0000036a,0x000200f8,0x0000036a,0x0004003d, + 0x00000006,0x0000036b,0x00000365,0x000500b0,0x00000041,0x0000036c,0x0000036b,0x000001de, + 0x000400fa,0x0000036c,0x00000367,0x00000368,0x000200f8,0x00000367,0x0004003d,0x00000006, + 0x00000370,0x000001f6,0x00050084,0x00000006,0x00000371,0x00000370,0x000002f7,0x0004003d, + 0x00000006,0x00000372,0x00000365,0x00050084,0x00000006,0x00000373,0x00000372,0x000001de, + 0x00050080,0x00000006,0x00000374,0x00000371,0x00000373,0x00050041,0x00000305,0x00000375, + 0x000002fb,0x00000374,0x0004003d,0x00000006,0x00000376,0x000001f6,0x00050084,0x00000006, + 0x00000377,0x00000376,0x000002f7,0x0004003d,0x00000006,0x00000378,0x00000365,0x00050084, + 0x00000006,0x00000379,0x00000378,0x000001de,0x00050080,0x00000006,0x0000037a,0x00000377, + 0x00000379,0x00081169,0x0000036d,0x0000037b,0x00000375,0x00000209,0x000002f7,0x00000030, + 0x000001de,0x0003003e,0x0000036f,0x0000037b,0x0004003d,0x00000006,0x0000037f,0x000001ff, + 0x0004003d,0x00000006,0x00000380,0x0000035d,0x00050080,0x00000006,0x00000381,0x0000037f, + 0x00000380,0x00050084,0x00000006,0x00000382,0x00000381,0x000000f0,0x00050084,0x00000006, + 0x00000383,0x00000382,0x000002f7,0x0004003d,0x00000006,0x00000384,0x00000365,0x00050084, + 0x00000006,0x00000385,0x00000384,0x000001de,0x00050080,0x00000006,0x00000386,0x00000383, + 0x00000385,0x00050041,0x00000305,0x00000387,0x00000342,0x00000386,0x0004003d,0x00000006, + 0x00000388,0x000001ff,0x0004003d,0x00000006,0x00000389,0x0000035d,0x00050080,0x00000006, + 0x0000038a,0x00000388,0x00000389,0x00050084,0x00000006,0x0000038b,0x0000038a,0x000000f0, + 0x00050084,0x00000006,0x0000038c,0x0000038b,0x000002f7,0x0004003d,0x00000006,0x0000038d, + 0x00000365,0x00050084,0x00000006,0x0000038e,0x0000038d,0x000001de,0x00050080,0x00000006, + 0x0000038f,0x0000038c,0x0000038e,0x00081169,0x0000037c,0x00000390,0x00000387,0x000001f1, + 0x000002f7,0x00000030,0x000001de,0x0003003e,0x0000037e,0x00000390,0x0004003d,0x00000006, + 0x00000391,0x0000035d,0x0004003d,0x0000036d,0x00000392,0x0000036f,0x0004003d,0x0000037c, + 0x00000393,0x0000037e,0x0004003d,0x00000006,0x00000394,0x0000035d,0x00050041,0x0000029e, + 0x00000395,0x0000029a,0x00000394,0x0004003d,0x00000297,0x00000396,0x00000395,0x0006116b, + 0x00000297,0x00000397,0x00000392,0x00000393,0x00000396,0x00050041,0x0000029e,0x00000398, + 0x0000029a,0x00000391,0x0003003e,0x00000398,0x00000397,0x000200f9,0x00000369,0x000200f8, + 0x00000369,0x0004003d,0x00000006,0x00000399,0x00000365,0x00050080,0x00000006,0x0000039a, + 0x00000399,0x000001f1,0x0003003e,0x00000365,0x0000039a,0x000200f9,0x00000366,0x000200f8, + 0x00000368,0x0003003e,0x0000039c,0x00000209,0x000200f9,0x0000039d,0x000200f8,0x0000039d, + 0x000400f6,0x0000039f,0x000003a0,0x00000000,0x000200f9,0x000003a1,0x000200f8,0x000003a1, + 0x0004003d,0x000001d0,0x000003a2,0x0000039c,0x0004116c,0x00000006,0x000003a3,0x00000297, + 0x0004007c,0x000001d0,0x000003a4,0x000003a3,0x000500b1,0x00000041,0x000003a5,0x000003a2, + 0x000003a4,0x000400fa,0x000003a5,0x0000039e,0x0000039f,0x000200f8,0x0000039e,0x0004003d, + 0x00000006,0x000003a6,0x0000035d,0x0004003d,0x000001d0,0x000003a7,0x0000039c,0x0004003d, + 0x00000006,0x000003a8,0x0000035d,0x0004003d,0x000001d0,0x000003a9,0x0000039c,0x00060041, + 0x0000000a,0x000003ab,0x0000029a,0x000003a8,0x000003a9,0x0004003d,0x00000009,0x000003ac, + 0x000003ab,0x0003003e,0x000003aa,0x000003ac,0x00050039,0x00000009,0x000003ad,0x0000000d, + 0x000003aa,0x00060041,0x0000000a,0x000003ae,0x0000029a,0x000003a6,0x000003a7,0x0003003e, + 0x000003ae,0x000003ad,0x000200f9,0x000003a0,0x000200f8,0x000003a0,0x0004003d,0x000001d0, + 0x000003af,0x0000039c,0x00050080,0x000001d0,0x000003b0,0x000003af,0x000001f1,0x0003003e, + 0x0000039c,0x000003b0,0x000200f9,0x0000039d,0x000200f8,0x0000039f,0x000200f9,0x00000361, + 0x000200f8,0x00000361,0x0004003d,0x00000006,0x000003b1,0x0000035d,0x00050080,0x00000006, + 0x000003b2,0x000003b1,0x000001f1,0x0003003e,0x0000035d,0x000003b2,0x000200f9,0x0000035e, + 0x000200f8,0x00000360,0x0004003d,0x00000006,0x000003b4,0x000002c5,0x00050084,0x00000006, + 0x000003b5,0x000003b4,0x000001f8,0x0003003e,0x000003b3,0x000003b5,0x000300f7,0x000003b9, + 0x00000000,0x000400fa,0x000003b7,0x000003b8,0x000003b9,0x000200f8,0x000003b8,0x0004003d, + 0x00000006,0x000003ba,0x000003b3,0x00050080,0x00000006,0x000003bb,0x000003ba,0x000001f8, + 0x00050089,0x00000006,0x000003bc,0x000003bb,0x000003b6,0x000500aa,0x00000041,0x000003bd, + 0x000003bc,0x0000009d,0x000400a8,0x00000041,0x000003be,0x000003bd,0x000300f7,0x000003c0, + 0x00000000,0x000400fa,0x000003be,0x000003bf,0x000003c0,0x000200f8,0x000003bf,0x0004003d, + 0x00000006,0x000003c1,0x000003b3,0x00050080,0x00000006,0x000003c2,0x000003c1,0x000001f8, + 0x000500ae,0x00000041,0x000003c3,0x000003c2,0x000002b4,0x000200f9,0x000003c0,0x000200f8, + 0x000003c0,0x000700f5,0x00000041,0x000003c4,0x000003bd,0x000003b8,0x000003c3,0x000003bf, + 0x000200f9,0x000003b9,0x000200f8,0x000003b9,0x000700f5,0x00000041,0x000003c5,0x000003b7, + 0x00000360,0x000003c4,0x000003c0,0x000300f7,0x000003c7,0x00000000,0x000400fa,0x000003c5, + 0x000003c6,0x000003c7,0x000200f8,0x000003c6,0x0003003e,0x000003c8,0x0000009d,0x000200f9, + 0x000003c9,0x000200f8,0x000003c9,0x000400f6,0x000003cb,0x000003cc,0x00000001,0x000200f9, + 0x000003cd,0x000200f8,0x000003cd,0x0004003d,0x00000006,0x000003ce,0x000003c8,0x000500b0, + 0x00000041,0x000003cf,0x000003ce,0x00000203,0x000400fa,0x000003cf,0x000003ca,0x000003cb, + 0x000200f8,0x000003ca,0x0004003d,0x00000006,0x000003d0,0x000003b3,0x000500b0,0x00000041, + 0x000003d1,0x000003d0,0x000003b6,0x000300f7,0x000003d3,0x00000000,0x000400fa,0x000003d1, + 0x000003d2,0x000003d9,0x000200f8,0x000003d2,0x0004003d,0x00000006,0x000003d4,0x000003c8, + 0x0004003d,0x00000006,0x000003d5,0x000003c8,0x00050041,0x0000029e,0x000003d6,0x0000029a, + 0x000003d5,0x0004003d,0x00000297,0x000003d7,0x000003d6,0x00050041,0x0000029e,0x000003d8, + 0x000002a4,0x000003d4,0x0003003e,0x000003d8,0x000003d7,0x000200f9,0x000003d3,0x000200f8, + 0x000003d9,0x0004003d,0x00000006,0x000003da,0x000003c8,0x0004003d,0x00000006,0x000003db, + 0x000003c8,0x00050041,0x0000029e,0x000003dc,0x000002a4,0x000003db,0x0004003d,0x00000297, + 0x000003dd,0x000003dc,0x0004003d,0x00000006,0x000003de,0x000003c8,0x00050041,0x0000029e, + 0x000003df,0x0000029a,0x000003de,0x0004003d,0x00000297,0x000003e0,0x000003df,0x00050081, + 0x00000297,0x000003e1,0x000003dd,0x000003e0,0x00050041,0x0000029e,0x000003e2,0x000002a4, + 0x000003da,0x0003003e,0x000003e2,0x000003e1,0x0003003e,0x000003e3,0x00000209,0x000200f9, + 0x000003e4,0x000200f8,0x000003e4,0x000400f6,0x000003e6,0x000003e7,0x00000000,0x000200f9, + 0x000003e8,0x000200f8,0x000003e8,0x0004003d,0x000001d0,0x000003e9,0x000003e3,0x0004116c, + 0x00000006,0x000003ea,0x00000297,0x0004007c,0x000001d0,0x000003eb,0x000003ea,0x000500b1, + 0x00000041,0x000003ec,0x000003e9,0x000003eb,0x000400fa,0x000003ec,0x000003e5,0x000003e6, + 0x000200f8,0x000003e5,0x0004003d,0x00000006,0x000003ed,0x000003c8,0x0004003d,0x000001d0, + 0x000003ee,0x000003e3,0x0004003d,0x00000006,0x000003ef,0x000003c8,0x0004003d,0x000001d0, + 0x000003f0,0x000003e3,0x00060041,0x0000000a,0x000003f2,0x000002a4,0x000003ef,0x000003f0, + 0x0004003d,0x00000009,0x000003f3,0x000003f2,0x0003003e,0x000003f1,0x000003f3,0x00050039, + 0x00000009,0x000003f4,0x0000000d,0x000003f1,0x00060041,0x0000000a,0x000003f5,0x000002a4, + 0x000003ed,0x000003ee,0x0003003e,0x000003f5,0x000003f4,0x000200f9,0x000003e7,0x000200f8, + 0x000003e7,0x0004003d,0x000001d0,0x000003f6,0x000003e3,0x00050080,0x000001d0,0x000003f7, + 0x000003f6,0x000001f1,0x0003003e,0x000003e3,0x000003f7,0x000200f9,0x000003e4,0x000200f8, + 0x000003e6,0x000200f9,0x000003d3,0x000200f8,0x000003d3,0x0004003d,0x00000006,0x000003f8, + 0x000003c8,0x00050041,0x0000029e,0x000003f9,0x0000029a,0x000003f8,0x0003003e,0x000003f9, + 0x000002a2,0x000200f9,0x000003cc,0x000200f8,0x000003cc,0x0004003d,0x00000006,0x000003fa, + 0x000003c8,0x00050080,0x00000006,0x000003fb,0x000003fa,0x000001f1,0x0003003e,0x000003c8, + 0x000003fb,0x000200f9,0x000003c9,0x000200f8,0x000003cb,0x000200f9,0x000003c7,0x000200f8, + 0x000003c7,0x000200f9,0x0000035c,0x000200f8,0x0000035c,0x000200f9,0x000002c1,0x000200f8, + 0x000002c1,0x0004003d,0x00000006,0x000003fc,0x000002bd,0x00050080,0x00000006,0x000003fd, + 0x000003fc,0x000001f1,0x0003003e,0x000002bd,0x000003fd,0x000200f9,0x000002be,0x000200f8, + 0x000002c0,0x000300f7,0x00000400,0x00000000,0x000400fa,0x000003fe,0x000003ff,0x00000400, + 0x000200f8,0x000003ff,0x0003003e,0x00000401,0x0000009d,0x000200f9,0x00000402,0x000200f8, + 0x00000402,0x000400f6,0x00000404,0x00000405,0x00000001,0x000200f9,0x00000406,0x000200f8, + 0x00000406,0x0004003d,0x00000006,0x00000407,0x00000401,0x000500b0,0x00000041,0x00000408, + 0x00000407,0x00000203,0x000400fa,0x00000408,0x00000403,0x00000404,0x000200f8,0x00000403, + 0x0004003d,0x00000006,0x00000409,0x00000401,0x0004003d,0x00000006,0x0000040a,0x00000401, + 0x00050041,0x0000029e,0x0000040b,0x000002a4,0x0000040a,0x0004003d,0x00000297,0x0000040c, + 0x0000040b,0x00050041,0x0000029e,0x0000040d,0x0000029a,0x00000409,0x0003003e,0x0000040d, + 0x0000040c,0x000200f9,0x00000405,0x000200f8,0x00000405,0x0004003d,0x00000006,0x0000040e, + 0x00000401,0x00050080,0x00000006,0x0000040f,0x0000040e,0x000001f1,0x0003003e,0x00000401, + 0x0000040f,0x000200f9,0x00000402,0x000200f8,0x00000404,0x000200f9,0x00000400,0x000200f8, + 0x00000400,0x000400e0,0x000001de,0x000001de,0x00000278,0x0004003d,0x00000041,0x00000410, + 0x00000205,0x000300f7,0x00000412,0x00000000,0x000400fa,0x00000410,0x00000411,0x00000412, + 0x000200f8,0x00000411,0x0003003e,0x00000413,0x0000009d,0x000200f9,0x00000414,0x000200f8, + 0x00000414,0x000400f6,0x00000416,0x00000417,0x00000001,0x000200f9,0x00000418,0x000200f8, + 0x00000418,0x0004003d,0x00000006,0x00000419,0x00000413,0x000500b0,0x00000041,0x0000041a, + 0x00000419,0x00000203,0x000400fa,0x0000041a,0x00000415,0x00000416,0x000200f8,0x00000415, + 0x0004003d,0x00000006,0x0000041c,0x00000413,0x00050041,0x0000029e,0x0000041d,0x0000029a, + 0x0000041c,0x0004003d,0x00000297,0x0000041e,0x0000041d,0x00040073,0x00000284,0x0000041f, + 0x0000041e,0x0003003e,0x0000041b,0x0000041f,0x0004003d,0x00000284,0x00000420,0x0000041b, + 0x0004003d,0x00000006,0x00000421,0x000001f6,0x00050084,0x00000006,0x00000422,0x00000421, + 0x000001ea,0x0004003d,0x00000006,0x00000423,0x000001ff,0x0004003d,0x00000006,0x00000424, + 0x00000413,0x00050080,0x00000006,0x00000425,0x00000423,0x00000424,0x00050084,0x00000006, + 0x00000426,0x00000425,0x000000f0,0x00050080,0x00000006,0x00000427,0x00000422,0x00000426, + 0x00050041,0x00000274,0x00000428,0x00000270,0x00000427,0x0004003d,0x00000006,0x00000429, + 0x000001f6,0x00050084,0x00000006,0x0000042a,0x00000429,0x000001ea,0x0004003d,0x00000006, + 0x0000042b,0x000001ff,0x0004003d,0x00000006,0x0000042c,0x00000413,0x00050080,0x00000006, + 0x0000042d,0x0000042b,0x0000042c,0x00050084,0x00000006,0x0000042e,0x0000042d,0x000000f0, + 0x00050080,0x00000006,0x0000042f,0x0000042a,0x0000042e,0x0007116a,0x00000428,0x00000420, + 0x00000209,0x000001ea,0x00000028,0x000001de,0x000200f9,0x00000417,0x000200f8,0x00000417, + 0x0004003d,0x00000006,0x00000430,0x00000413,0x00050080,0x00000006,0x00000431,0x00000430, + 0x000001f1,0x0003003e,0x00000413,0x00000431,0x000200f9,0x00000414,0x000200f8,0x00000416, + 0x000200f9,0x00000412,0x000200f8,0x00000412,0x000400e0,0x000001de,0x000001de,0x00000278, + 0x0004003d,0x00000006,0x00000433,0x000001b7,0x0003003e,0x00000432,0x00000433,0x000200f9, + 0x00000434,0x000200f8,0x00000434,0x000400f6,0x00000436,0x00000437,0x00000000,0x000200f9, + 0x00000438,0x000200f8,0x00000438,0x0004003d,0x00000006,0x00000439,0x00000432,0x000500b0, + 0x00000041,0x0000043b,0x00000439,0x0000043a,0x000400fa,0x0000043b,0x00000435,0x00000436, + 0x000200f8,0x00000435,0x0004003d,0x00000006,0x0000043d,0x000001db,0x0004003d,0x00000006, + 0x0000043e,0x00000432,0x00050086,0x00000006,0x0000043f,0x0000043e,0x000001ea,0x00050080, + 0x00000006,0x00000440,0x0000043d,0x0000043f,0x0003003e,0x0000043c,0x00000440,0x0004003d, + 0x00000006,0x00000442,0x000001e7,0x0004003d,0x00000006,0x00000443,0x00000432,0x00050089, + 0x00000006,0x00000444,0x00000443,0x000001ea,0x00050080,0x00000006,0x00000445,0x00000442, + 0x00000444,0x0003003e,0x00000441,0x00000445,0x0004003d,0x00000006,0x00000446,0x0000043c, + 0x00050041,0x000001d2,0x00000447,0x000001cf,0x00000209,0x0004003d,0x00000006,0x00000448, + 0x00000447,0x000500ae,0x00000041,0x00000449,0x00000446,0x00000448,0x000300f7,0x0000044b, + 0x00000000,0x000400fa,0x00000449,0x0000044a,0x0000044b,0x000200f8,0x0000044a,0x000200f9, + 0x00000437,0x000200f8,0x0000044b,0x0004003d,0x00000006,0x0000044e,0x00000432,0x00050041, + 0x00000274,0x0000044f,0x00000270,0x0000044e,0x0006003d,0x0000000f,0x00000450,0x0000044f, + 0x00000030,0x000001de,0x0003003e,0x0000044d,0x00000450,0x000300f7,0x00000453,0x00000000, + 0x000400fa,0x00000451,0x00000452,0x00000453,0x000200f8,0x00000452,0x0004003d,0x00000006, + 0x00000458,0x000001c1,0x00050041,0x000001d2,0x0000045a,0x000001cf,0x00000459,0x0004003d, + 0x00000006,0x0000045b,0x0000045a,0x00050084,0x00000006,0x0000045c,0x00000458,0x0000045b, + 0x0004003d,0x00000006,0x0000045d,0x0000043c,0x00050041,0x000001d2,0x0000045e,0x000001cf, + 0x000001f1,0x0004003d,0x00000006,0x0000045f,0x0000045e,0x00050084,0x00000006,0x00000460, + 0x0000045d,0x0000045f,0x00050080,0x00000006,0x00000461,0x0000045c,0x00000460,0x0004003d, + 0x00000006,0x00000462,0x000001cb,0x00050041,0x000001d2,0x00000463,0x000001cf,0x000001f1, + 0x0004003d,0x00000006,0x00000464,0x00000463,0x00050084,0x00000006,0x00000465,0x00000462, + 0x00000464,0x00050041,0x000001d2,0x00000466,0x000001cf,0x00000209,0x0004003d,0x00000006, + 0x00000467,0x00000466,0x00050084,0x00000006,0x00000468,0x00000465,0x00000467,0x00050080, + 0x00000006,0x00000469,0x00000461,0x00000468,0x0004003d,0x00000006,0x0000046a,0x00000441, + 0x00050080,0x00000006,0x0000046b,0x00000469,0x0000046a,0x0004003d,0x0000000f,0x0000046c, + 0x0000044d,0x00060041,0x00000254,0x0000046d,0x00000457,0x00000209,0x0000046b,0x0003003e, + 0x0000046d,0x0000046c,0x000200f9,0x00000437,0x000200f8,0x00000453,0x000300f7,0x00000472, + 0x00000000,0x000400fa,0x00000470,0x00000471,0x00000472,0x000200f8,0x00000471,0x0004003d, + 0x0000000f,0x00000473,0x0000044d,0x00040073,0x00000009,0x00000474,0x00000473,0x0003003e, + 0x00000475,0x00000474,0x00050039,0x00000009,0x00000476,0x00000024,0x00000475,0x00040073, + 0x0000000f,0x00000477,0x00000476,0x0003003e,0x0000044d,0x00000477,0x000200f9,0x00000472, + 0x000200f8,0x00000472,0x0004003d,0x00000006,0x00000479,0x0000043c,0x00050041,0x000001d2, + 0x0000047a,0x000001cf,0x00000234,0x0004003d,0x00000006,0x0000047b,0x0000047a,0x00050084, + 0x00000006,0x0000047c,0x00000479,0x0000047b,0x0004003d,0x00000006,0x0000047d,0x000001ec, + 0x00050080,0x00000006,0x0000047e,0x0000047c,0x0000047d,0x0004003d,0x00000006,0x0000047f, + 0x00000441,0x00050080,0x00000006,0x00000480,0x0000047e,0x0000047f,0x0003003e,0x00000478, + 0x00000480,0x000300f7,0x00000485,0x00000000,0x000400fa,0x00000483,0x00000484,0x00000485, + 0x000200f8,0x00000484,0x0004003d,0x00000006,0x0000048a,0x00000478,0x0004003d,0x0000000f, + 0x0000048c,0x0000044d,0x0003003e,0x0000048b,0x0000048c,0x00050039,0x00000006,0x0000048d, + 0x00000013,0x0000048b,0x0003003e,0x0000048e,0x0000048d,0x00050039,0x00000006,0x0000048f, + 0x0000001d,0x0000048e,0x00040071,0x00000242,0x00000490,0x0000048f,0x00060041,0x00000248, + 0x00000491,0x00000489,0x00000209,0x0000048a,0x0003003e,0x00000491,0x00000490,0x000200f9, + 0x00000485,0x000200f8,0x00000485,0x000300f7,0x00000495,0x00000000,0x000400fa,0x00000493, + 0x00000494,0x00000495,0x000200f8,0x00000494,0x0004003d,0x00000006,0x00000496,0x00000478, + 0x0004003d,0x0000000f,0x00000497,0x0000044d,0x00060041,0x00000254,0x00000498,0x00000457, + 0x00000209,0x00000496,0x0003003e,0x00000498,0x00000497,0x000200f9,0x00000495,0x000200f8, + 0x00000495,0x000200f9,0x00000437,0x000200f8,0x00000437,0x0004003d,0x00000006,0x00000499, + 0x00000432,0x00050080,0x00000006,0x0000049a,0x00000499,0x000001f9,0x0003003e,0x00000432, + 0x0000049a,0x000200f9,0x00000434,0x000200f8,0x00000436,0x000100fd,0x00010038,0x00050036, + 0x00000009,0x0000000d,0x00000000,0x0000000b,0x00030037,0x0000000a,0x0000000c,0x000200f8, + 0x0000000e,0x0004003b,0x00000015,0x00000034,0x00000007,0x0004003b,0x00000015,0x00000037, + 0x00000007,0x0004003b,0x00000015,0x0000003b,0x00000007,0x0004003b,0x0000000a,0x00000055, + 0x00000007,0x0004003b,0x00000015,0x00000066,0x00000007,0x0004003b,0x00000015,0x0000006b, + 0x00000007,0x0004003d,0x00000009,0x00000035,0x0000000c,0x0004007c,0x00000006,0x00000036, + 0x00000035,0x0003003e,0x00000034,0x00000036,0x0004003d,0x00000006,0x00000038,0x00000034, + 0x000500c7,0x00000006,0x0000003a,0x00000038,0x00000039,0x0003003e,0x00000037,0x0000003a, + 0x0004003d,0x00000006,0x0000003c,0x00000034,0x000500c7,0x00000006,0x0000003e,0x0000003c, + 0x0000003d,0x0003003e,0x0000003b,0x0000003e,0x0004003d,0x00000006,0x0000003f,0x0000003b, + 0x000500ae,0x00000041,0x00000042,0x0000003f,0x00000040,0x000300f7,0x00000044,0x00000000, + 0x000400fa,0x00000042,0x00000043,0x00000044,0x000200f8,0x00000043,0x0004003d,0x00000009, + 0x00000045,0x0000000c,0x000200fe,0x00000045,0x000200f8,0x00000044,0x0004003d,0x00000006, + 0x00000047,0x0000003b,0x000500ae,0x00000041,0x00000049,0x00000047,0x00000048,0x000300f7, + 0x0000004b,0x00000000,0x000400fa,0x00000049,0x0000004a,0x0000004b,0x000200f8,0x0000004a, + 0x0004003d,0x00000006,0x0000004c,0x00000037,0x000500c5,0x00000006,0x0000004d,0x0000004c, + 0x00000040,0x0004007c,0x00000009,0x0000004e,0x0000004d,0x000200fe,0x0000004e,0x000200f8, + 0x0000004b,0x0004003d,0x00000006,0x00000050,0x0000003b,0x000500b0,0x00000041,0x00000052, + 0x00000050,0x00000051,0x000300f7,0x00000054,0x00000000,0x000400fa,0x00000052,0x00000053, + 0x00000054,0x000200f8,0x00000053,0x0004003d,0x00000006,0x00000056,0x0000003b,0x0004007c, + 0x00000009,0x00000057,0x00000056,0x00050085,0x00000009,0x00000059,0x00000057,0x00000058, + 0x0006000c,0x00000009,0x0000005a,0x00000001,0x00000002,0x00000059,0x0003003e,0x00000055, + 0x0000005a,0x0004003d,0x00000006,0x0000005b,0x00000037,0x0004007c,0x00000009,0x0000005c, + 0x0000005b,0x0004003d,0x00000006,0x0000005d,0x00000037,0x0004003d,0x00000009,0x0000005e, + 0x00000055,0x00050085,0x00000009,0x00000060,0x0000005e,0x0000005f,0x0004007c,0x00000006, + 0x00000061,0x00000060,0x000500c5,0x00000006,0x00000062,0x0000005d,0x00000061,0x0004007c, + 0x00000009,0x00000063,0x00000062,0x00050081,0x00000009,0x00000064,0x0000005c,0x00000063, + 0x000200fe,0x00000064,0x000200f8,0x00000054,0x0004003d,0x00000006,0x00000067,0x0000003b, + 0x000500c2,0x00000006,0x00000069,0x00000067,0x00000068,0x000500c7,0x00000006,0x0000006a, + 0x00000069,0x00000008,0x0003003e,0x00000066,0x0000006a,0x0004003d,0x00000006,0x0000006c, + 0x0000003b,0x00050080,0x00000006,0x0000006e,0x0000006c,0x0000006d,0x0004003d,0x00000006, + 0x0000006f,0x00000066,0x00050080,0x00000006,0x00000070,0x0000006e,0x0000006f,0x000500c7, + 0x00000006,0x00000072,0x00000070,0x00000071,0x0003003e,0x0000006b,0x00000072,0x0004003d, + 0x00000006,0x00000073,0x00000037,0x0004003d,0x00000006,0x00000074,0x0000006b,0x000500c5, + 0x00000006,0x00000075,0x00000073,0x00000074,0x0004007c,0x00000009,0x00000076,0x00000075, + 0x000200fe,0x00000076,0x00010038,0x00050036,0x00000006,0x00000013,0x00000000,0x00000011, + 0x00030037,0x00000010,0x00000012,0x000200f8,0x00000014,0x0004003d,0x0000000f,0x00000079, + 0x00000012,0x0004007c,0x0000007a,0x0000007b,0x00000079,0x00040071,0x00000006,0x0000007c, + 0x0000007b,0x000200fe,0x0000007c,0x00010038,0x00050036,0x00000006,0x00000019,0x00000000, + 0x00000016,0x00030037,0x00000015,0x00000017,0x00030037,0x00000015,0x00000018,0x000200f8, + 0x0000001a,0x0004003b,0x00000015,0x0000007f,0x00000007,0x0004003b,0x00000015,0x00000083, + 0x00000007,0x0004003b,0x00000015,0x00000087,0x00000007,0x0004003b,0x00000015,0x0000008b, + 0x00000007,0x0004003d,0x00000006,0x00000080,0x00000017,0x0004003d,0x00000006,0x00000081, + 0x00000018,0x000500c2,0x00000006,0x00000082,0x00000080,0x00000081,0x0003003e,0x0000007f, + 0x00000082,0x0004003d,0x00000006,0x00000084,0x00000018,0x000500c4,0x00000006,0x00000085, + 0x00000008,0x00000084,0x00050082,0x00000006,0x00000086,0x00000085,0x00000008,0x0003003e, + 0x00000083,0x00000086,0x0004003d,0x00000006,0x00000088,0x00000017,0x0004003d,0x00000006, + 0x00000089,0x00000083,0x000500c7,0x00000006,0x0000008a,0x00000088,0x00000089,0x0003003e, + 0x00000087,0x0000008a,0x0004003d,0x00000006,0x0000008c,0x00000018,0x00050082,0x00000006, + 0x0000008d,0x0000008c,0x00000008,0x000500c4,0x00000006,0x0000008e,0x00000008,0x0000008d, + 0x0003003e,0x0000008b,0x0000008e,0x0004003d,0x00000006,0x0000008f,0x0000007f,0x0004003d, + 0x00000006,0x00000090,0x00000087,0x0004003d,0x00000006,0x00000091,0x0000008b,0x000500ac, + 0x00000041,0x00000092,0x00000090,0x00000091,0x000400a8,0x00000041,0x00000093,0x00000092, + 0x000300f7,0x00000095,0x00000000,0x000400fa,0x00000093,0x00000094,0x00000095,0x000200f8, + 0x00000094,0x0004003d,0x00000006,0x00000096,0x00000087,0x0004003d,0x00000006,0x00000097, + 0x0000008b,0x000500aa,0x00000041,0x00000098,0x00000096,0x00000097,0x000300f7,0x0000009a, + 0x00000000,0x000400fa,0x00000098,0x00000099,0x0000009a,0x000200f8,0x00000099,0x0004003d, + 0x00000006,0x0000009b,0x0000007f,0x000500c7,0x00000006,0x0000009c,0x0000009b,0x00000008, + 0x000500ab,0x00000041,0x0000009e,0x0000009c,0x0000009d,0x000200f9,0x0000009a,0x000200f8, + 0x0000009a,0x000700f5,0x00000041,0x0000009f,0x00000098,0x00000094,0x0000009e,0x00000099, + 0x000200f9,0x00000095,0x000200f8,0x00000095,0x000700f5,0x00000041,0x000000a0,0x00000092, + 0x0000001a,0x0000009f,0x0000009a,0x000600a9,0x00000006,0x000000a1,0x000000a0,0x00000008, + 0x0000009d,0x00050080,0x00000006,0x000000a2,0x0000008f,0x000000a1,0x000200fe,0x000000a2, + 0x00010038,0x00050036,0x00000006,0x0000001d,0x00000000,0x0000001b,0x00030037,0x00000015, + 0x0000001c,0x000200f8,0x0000001e,0x0004003b,0x000000a5,0x000000a6,0x00000007,0x0004003b, + 0x00000015,0x000000c2,0x00000007,0x0004003b,0x00000015,0x000000c8,0x00000007,0x0004003b, + 0x00000015,0x000000ce,0x00000007,0x0004003b,0x00000015,0x000000d5,0x00000007,0x0004003b, + 0x00000015,0x000000dc,0x00000007,0x0004003b,0x00000015,0x000000df,0x00000007,0x0004003b, + 0x00000015,0x000000e8,0x00000007,0x0004003b,0x00000015,0x000000eb,0x00000007,0x0004003b, + 0x00000015,0x000000f4,0x00000007,0x0004003b,0x00000015,0x000000f6,0x00000007,0x0004003b, + 0x00000015,0x000000fb,0x00000007,0x0004003b,0x00000015,0x000000fe,0x00000007,0x0004003b, + 0x00000015,0x00000100,0x00000007,0x0004003b,0x00000015,0x00000102,0x00000007,0x0004003b, + 0x00000015,0x00000116,0x00000007,0x0004003d,0x00000006,0x000000a7,0x0000001c,0x000500c7, + 0x00000006,0x000000a9,0x000000a7,0x000000a8,0x000500aa,0x00000041,0x000000aa,0x000000a9, + 0x000000a8,0x000300f7,0x000000ac,0x00000000,0x000400fa,0x000000aa,0x000000ab,0x000000ac, + 0x000200f8,0x000000ab,0x0004003d,0x00000006,0x000000ad,0x0000001c,0x000500c7,0x00000006, + 0x000000af,0x000000ad,0x000000ae,0x000500ab,0x00000041,0x000000b0,0x000000af,0x0000009d, + 0x000200f9,0x000000ac,0x000200f8,0x000000ac,0x000700f5,0x00000041,0x000000b1,0x000000aa, + 0x0000001e,0x000000b0,0x000000ab,0x0003003e,0x000000a6,0x000000b1,0x0004003d,0x00000041, + 0x000000b2,0x000000a6,0x000300f7,0x000000b4,0x00000000,0x000400fa,0x000000b2,0x000000b3, + 0x000000b4,0x000200f8,0x000000b3,0x000200fe,0x0000009d,0x000200f8,0x000000b4,0x0004003d, + 0x00000006,0x000000b6,0x0000001c,0x000500c7,0x00000006,0x000000b8,0x000000b6,0x000000b7, + 0x000500aa,0x00000041,0x000000b9,0x000000b8,0x0000009d,0x000300f7,0x000000bb,0x00000000, + 0x000400fa,0x000000b9,0x000000ba,0x000000bb,0x000200f8,0x000000ba,0x0004003d,0x00000006, + 0x000000bc,0x0000001c,0x000500c2,0x00000006,0x000000be,0x000000bc,0x000000bd,0x000500c7, + 0x00000006,0x000000c0,0x000000be,0x000000bf,0x000200fe,0x000000c0,0x000200f8,0x000000bb, + 0x0004003d,0x00000006,0x000000c3,0x0000001c,0x000500c7,0x00000006,0x000000c5,0x000000c3, + 0x000000c4,0x000500ab,0x00000041,0x000000c6,0x000000c5,0x0000009d,0x000600a9,0x00000006, + 0x000000c7,0x000000c6,0x000000bf,0x0000009d,0x0003003e,0x000000c2,0x000000c7,0x0004003d, + 0x00000006,0x000000c9,0x0000001c,0x000500c2,0x00000006,0x000000cb,0x000000c9,0x000000ca, + 0x000500c7,0x00000006,0x000000cd,0x000000cb,0x000000cc,0x0003003e,0x000000c8,0x000000cd, + 0x0004003d,0x00000006,0x000000cf,0x0000001c,0x000500c7,0x00000006,0x000000d0,0x000000cf, + 0x000000ae,0x0003003e,0x000000ce,0x000000d0,0x0004003d,0x00000006,0x000000d1,0x000000c8, + 0x000500aa,0x00000041,0x000000d2,0x000000d1,0x000000cc,0x000300f7,0x000000d4,0x00000000, + 0x000400fa,0x000000d2,0x000000d3,0x000000d7,0x000200f8,0x000000d3,0x0003003e,0x000000d5, + 0x000000d6,0x000200f9,0x000000d4,0x000200f8,0x000000d7,0x0004003d,0x00000006,0x000000d8, + 0x000000c8,0x000500b2,0x00000041,0x000000d9,0x000000d8,0x000000bd,0x000300f7,0x000000db, + 0x00000000,0x000400fa,0x000000d9,0x000000da,0x000000fa,0x000200f8,0x000000da,0x0004003d, + 0x00000006,0x000000dd,0x000000c8,0x000500aa,0x00000041,0x000000de,0x000000dd,0x0000009d, + 0x000300f7,0x000000e1,0x00000000,0x000400fa,0x000000de,0x000000e0,0x000000e3,0x000200f8, + 0x000000e0,0x0004003d,0x00000006,0x000000e2,0x000000ce,0x0003003e,0x000000df,0x000000e2, + 0x000200f9,0x000000e1,0x000200f8,0x000000e3,0x0004003d,0x00000006,0x000000e5,0x000000ce, + 0x00050080,0x00000006,0x000000e6,0x000000e4,0x000000e5,0x0003003e,0x000000df,0x000000e6, + 0x000200f9,0x000000e1,0x000200f8,0x000000e1,0x0004003d,0x00000006,0x000000e7,0x000000df, + 0x0003003e,0x000000dc,0x000000e7,0x0004003d,0x00000006,0x000000e9,0x000000c8,0x000500aa, + 0x00000041,0x000000ea,0x000000e9,0x0000009d,0x000300f7,0x000000ed,0x00000000,0x000400fa, + 0x000000ea,0x000000ec,0x000000ef,0x000200f8,0x000000ec,0x0003003e,0x000000eb,0x000000ee, + 0x000200f9,0x000000ed,0x000200f8,0x000000ef,0x0004003d,0x00000006,0x000000f1,0x000000c8, + 0x00050082,0x00000006,0x000000f2,0x000000f0,0x000000f1,0x0003003e,0x000000eb,0x000000f2, + 0x000200f9,0x000000ed,0x000200f8,0x000000ed,0x0004003d,0x00000006,0x000000f3,0x000000eb, + 0x0003003e,0x000000e8,0x000000f3,0x0004003d,0x00000006,0x000000f5,0x000000dc,0x0003003e, + 0x000000f4,0x000000f5,0x0004003d,0x00000006,0x000000f7,0x000000e8,0x0003003e,0x000000f6, + 0x000000f7,0x00060039,0x00000006,0x000000f8,0x00000019,0x000000f4,0x000000f6,0x0007000c, + 0x00000006,0x000000f9,0x00000001,0x00000026,0x000000f8,0x000000bd,0x0003003e,0x000000d5, + 0x000000f9,0x000200f9,0x000000db,0x000200f8,0x000000fa,0x0004003d,0x00000006,0x000000fc, + 0x000000c8,0x00050082,0x00000006,0x000000fd,0x000000fc,0x000000bd,0x0003003e,0x000000fb, + 0x000000fd,0x0004003d,0x00000006,0x00000101,0x000000ce,0x0003003e,0x00000100,0x00000101, + 0x0003003e,0x00000102,0x000000ff,0x00060039,0x00000006,0x00000103,0x00000019,0x00000100, + 0x00000102,0x0003003e,0x000000fe,0x00000103,0x0004003d,0x00000006,0x00000104,0x000000fe, + 0x000500aa,0x00000041,0x00000105,0x00000104,0x000000bd,0x000300f7,0x00000107,0x00000000, + 0x000400fa,0x00000105,0x00000106,0x00000107,0x000200f8,0x00000106,0x0003003e,0x000000fe, + 0x0000009d,0x0004003d,0x00000006,0x00000108,0x000000fb,0x00050080,0x00000006,0x00000109, + 0x00000108,0x00000008,0x0003003e,0x000000fb,0x00000109,0x000200f9,0x00000107,0x000200f8, + 0x00000107,0x0004003d,0x00000006,0x0000010a,0x000000fb,0x000500ac,0x00000041,0x0000010b, + 0x0000010a,0x000000ee,0x000400a8,0x00000041,0x0000010c,0x0000010b,0x000300f7,0x0000010e, + 0x00000000,0x000400fa,0x0000010c,0x0000010d,0x0000010e,0x000200f8,0x0000010d,0x0004003d, + 0x00000006,0x0000010f,0x000000fb,0x000500aa,0x00000041,0x00000110,0x0000010f,0x000000ee, + 0x0004003d,0x00000006,0x00000111,0x000000fe,0x000500ac,0x00000041,0x00000113,0x00000111, + 0x00000112,0x000500a7,0x00000041,0x00000114,0x00000110,0x00000113,0x000200f9,0x0000010e, + 0x000200f8,0x0000010e,0x000700f5,0x00000041,0x00000115,0x0000010b,0x00000107,0x00000114, + 0x0000010d,0x000300f7,0x00000118,0x00000000,0x000400fa,0x00000115,0x00000117,0x00000119, + 0x000200f8,0x00000117,0x0003003e,0x00000116,0x000000d6,0x000200f9,0x00000118,0x000200f8, + 0x00000119,0x0004003d,0x00000006,0x0000011a,0x000000fb,0x000500c4,0x00000006,0x0000011c, + 0x0000011a,0x0000011b,0x0004003d,0x00000006,0x0000011d,0x000000fe,0x000500c5,0x00000006, + 0x0000011e,0x0000011c,0x0000011d,0x0003003e,0x00000116,0x0000011e,0x000200f9,0x00000118, + 0x000200f8,0x00000118,0x0004003d,0x00000006,0x0000011f,0x00000116,0x0003003e,0x000000d5, + 0x0000011f,0x000200f9,0x000000db,0x000200f8,0x000000db,0x000200f9,0x000000d4,0x000200f8, + 0x000000d4,0x0004003d,0x00000006,0x00000120,0x000000c2,0x0004003d,0x00000006,0x00000121, + 0x000000d5,0x000500c5,0x00000006,0x00000122,0x00000120,0x00000121,0x000200fe,0x00000122, + 0x00010038,0x00050036,0x00000009,0x00000021,0x00000000,0x0000001f,0x00030037,0x00000015, + 0x00000020,0x000200f8,0x00000022,0x0004003b,0x000000a5,0x00000125,0x00000007,0x0004003b, + 0x00000015,0x00000129,0x00000007,0x0004003b,0x00000015,0x0000012d,0x00000007,0x0004003b, + 0x0000000a,0x00000134,0x00000007,0x0004003b,0x0000000a,0x00000151,0x00000007,0x0004003d, + 0x00000006,0x00000126,0x00000020,0x000500c7,0x00000006,0x00000127,0x00000126,0x000000bf, + 0x000500ab,0x00000041,0x00000128,0x00000127,0x0000009d,0x0003003e,0x00000125,0x00000128, + 0x0004003d,0x00000006,0x0000012a,0x00000020,0x000500c2,0x00000006,0x0000012b,0x0000012a, + 0x0000011b,0x000500c7,0x00000006,0x0000012c,0x0000012b,0x000000ee,0x0003003e,0x00000129, + 0x0000012c,0x0004003d,0x00000006,0x0000012e,0x00000020,0x000500c7,0x00000006,0x0000012f, + 0x0000012e,0x000000ff,0x0003003e,0x0000012d,0x0000012f,0x0004003d,0x00000006,0x00000130, + 0x00000129,0x000500aa,0x00000041,0x00000131,0x00000130,0x0000009d,0x000300f7,0x00000133, + 0x00000000,0x000400fa,0x00000131,0x00000132,0x00000139,0x000200f8,0x00000132,0x0004003d, + 0x00000006,0x00000135,0x0000012d,0x00040070,0x00000009,0x00000136,0x00000135,0x00050085, + 0x00000009,0x00000138,0x00000136,0x00000137,0x0003003e,0x00000134,0x00000138,0x000200f9, + 0x00000133,0x000200f8,0x00000139,0x0004003d,0x00000006,0x0000013a,0x00000129,0x000500aa, + 0x00000041,0x0000013b,0x0000013a,0x000000ee,0x0004003d,0x00000006,0x0000013c,0x0000012d, + 0x000500aa,0x00000041,0x0000013d,0x0000013c,0x000000ff,0x000500a7,0x00000041,0x0000013e, + 0x0000013b,0x0000013d,0x000300f7,0x00000140,0x00000000,0x000400fa,0x0000013e,0x0000013f, + 0x00000142,0x000200f8,0x0000013f,0x0003003e,0x00000134,0x00000141,0x000200f9,0x00000140, + 0x000200f8,0x00000142,0x0004003d,0x00000006,0x00000144,0x0000012d,0x00040070,0x00000009, + 0x00000145,0x00000144,0x00050085,0x00000009,0x00000147,0x00000145,0x00000146,0x00050081, + 0x00000009,0x00000148,0x00000143,0x00000147,0x0004003d,0x00000006,0x00000149,0x00000129, + 0x00050080,0x00000006,0x0000014b,0x00000149,0x0000014a,0x000500c4,0x00000006,0x0000014d, + 0x0000014b,0x0000014c,0x0004007c,0x00000009,0x0000014e,0x0000014d,0x00050085,0x00000009, + 0x0000014f,0x00000148,0x0000014e,0x0003003e,0x00000134,0x0000014f,0x000200f9,0x00000140, + 0x000200f8,0x00000140,0x000200f9,0x00000133,0x000200f8,0x00000133,0x0004003d,0x00000041, + 0x00000150,0x00000125,0x000300f7,0x00000153,0x00000000,0x000400fa,0x00000150,0x00000152, + 0x00000156,0x000200f8,0x00000152,0x0004003d,0x00000009,0x00000154,0x00000134,0x0004007f, + 0x00000009,0x00000155,0x00000154,0x0003003e,0x00000151,0x00000155,0x000200f9,0x00000153, + 0x000200f8,0x00000156,0x0004003d,0x00000009,0x00000157,0x00000134,0x0003003e,0x00000151, + 0x00000157,0x000200f9,0x00000153,0x000200f8,0x00000153,0x0004003d,0x00000009,0x00000158, + 0x00000151,0x000200fe,0x00000158,0x00010038,0x00050036,0x00000009,0x00000024,0x00000000, + 0x0000000b,0x00030037,0x0000000a,0x00000023,0x000200f8,0x00000025,0x0004003b,0x0000000a, + 0x0000015b,0x00000007,0x0004003b,0x0000000a,0x00000160,0x00000007,0x0004003b,0x0000000a, + 0x00000162,0x00000007,0x0004003b,0x0000000a,0x00000165,0x00000007,0x0004003b,0x0000000a, + 0x00000167,0x00000007,0x0004003b,0x0000000a,0x0000016c,0x00000007,0x0004003b,0x0000000a, + 0x0000016e,0x00000007,0x0004003b,0x0000000a,0x00000173,0x00000007,0x0004003b,0x0000000a, + 0x00000178,0x00000007,0x0004003d,0x00000009,0x0000015c,0x00000023,0x0008000c,0x00000009, + 0x0000015f,0x00000001,0x0000002b,0x0000015c,0x0000015d,0x0000015e,0x0003003e,0x00000160, + 0x0000015f,0x00050039,0x00000009,0x00000161,0x0000000d,0x00000160,0x0003003e,0x0000015b, + 0x00000161,0x0004003d,0x00000009,0x00000163,0x0000015b,0x0006000c,0x00000009,0x00000164, + 0x00000001,0x00000004,0x00000163,0x0003003e,0x00000165,0x00000164,0x00050039,0x00000009, + 0x00000166,0x0000000d,0x00000165,0x0003003e,0x00000162,0x00000166,0x0004003d,0x00000009, + 0x00000169,0x00000162,0x0008000c,0x00000009,0x0000016b,0x00000001,0x00000032,0x00000168, + 0x00000169,0x0000016a,0x0003003e,0x0000016c,0x0000016b,0x00050039,0x00000009,0x0000016d, + 0x0000000d,0x0000016c,0x0003003e,0x00000167,0x0000016d,0x0004003d,0x00000009,0x0000016f, + 0x0000015b,0x0004003d,0x00000009,0x00000170,0x00000167,0x0008000c,0x00000009,0x00000172, + 0x00000001,0x00000032,0x0000016f,0x00000170,0x00000171,0x0003003e,0x00000173,0x00000172, + 0x00050039,0x00000009,0x00000174,0x0000000d,0x00000173,0x0003003e,0x0000016e,0x00000174, + 0x0004003d,0x00000009,0x00000175,0x00000023,0x0004003d,0x00000009,0x00000176,0x0000016e, + 0x00050085,0x00000009,0x00000177,0x00000175,0x00000176,0x0003003e,0x00000178,0x00000177, + 0x00050039,0x00000009,0x00000179,0x0000000d,0x00000178,0x000200fe,0x00000179,0x00010038, + 0x00050036,0x00000009,0x00000027,0x00000000,0x0000001f,0x00030037,0x00000015,0x00000026, + 0x000200f8,0x00000028,0x0004003b,0x0000000a,0x00000180,0x00000007,0x0004003b,0x00000015, + 0x00000187,0x00000007,0x0004003d,0x00000006,0x0000017c,0x00000026,0x000500c7,0x00000006, + 0x0000017e,0x0000017c,0x0000017d,0x000500aa,0x00000041,0x0000017f,0x0000017e,0x0000017d, + 0x000300f7,0x00000182,0x00000000,0x000400fa,0x0000017f,0x00000181,0x00000183,0x000200f8, + 0x00000181,0x0003003e,0x00000180,0x00000141,0x000200f9,0x00000182,0x000200f8,0x00000183, + 0x0004003d,0x00000006,0x00000184,0x00000026,0x000500c7,0x00000006,0x00000186,0x00000184, + 0x00000185,0x0003003e,0x00000187,0x00000186,0x00050039,0x00000009,0x00000188,0x00000021, + 0x00000187,0x0003003e,0x00000180,0x00000188,0x000200f9,0x00000182,0x000200f8,0x00000182, + 0x0004003d,0x00000009,0x00000189,0x00000180,0x000200fe,0x00000189,0x00010038,0x00050036, + 0x00000006,0x0000002b,0x00000000,0x00000016,0x00030037,0x00000015,0x00000029,0x00030037, + 0x00000015,0x0000002a,0x000200f8,0x0000002c,0x0004003b,0x00000015,0x00000190,0x00000007, + 0x0004003b,0x00000015,0x00000198,0x00000007,0x0004003d,0x00000006,0x0000018c,0x00000029, + 0x0004003d,0x00000006,0x0000018d,0x0000002a,0x000500c2,0x00000006,0x0000018e,0x0000018c, + 0x0000018d,0x000500c7,0x00000006,0x0000018f,0x0000018e,0x00000185,0x0003003e,0x00000190, + 0x0000018f,0x00050039,0x00000009,0x00000191,0x00000021,0x00000190,0x00040073,0x0000000f, + 0x00000192,0x00000191,0x0004003d,0x00000006,0x00000193,0x00000029,0x0004003d,0x00000006, + 0x00000194,0x0000002a,0x00050080,0x00000006,0x00000195,0x00000194,0x000000bd,0x000500c2, + 0x00000006,0x00000196,0x00000193,0x00000195,0x000500c7,0x00000006,0x00000197,0x00000196, + 0x00000185,0x0003003e,0x00000198,0x00000197,0x00050039,0x00000009,0x00000199,0x00000021, + 0x00000198,0x00040073,0x0000000f,0x0000019a,0x00000199,0x00050050,0x0000019b,0x0000019c, + 0x00000192,0x0000019a,0x0004007c,0x00000006,0x0000019d,0x0000019c,0x000200fe,0x0000019d, + 0x00010038,0x00050036,0x0000002f,0x00000032,0x00000000,0x00000030,0x00030037,0x0000002e, + 0x00000031,0x000200f8,0x00000033,0x0004003b,0x00000015,0x000001a0,0x00000007,0x0004003b, + 0x00000015,0x000001a3,0x00000007,0x0004003b,0x00000015,0x000001a5,0x00000007,0x0004003b, + 0x00000015,0x000001a8,0x00000007,0x0004003b,0x00000015,0x000001aa,0x00000007,0x0004003b, + 0x00000015,0x000001ad,0x00000007,0x0004003b,0x00000015,0x000001af,0x00000007,0x0004003b, + 0x00000015,0x000001b2,0x00000007,0x00050041,0x00000015,0x000001a1,0x00000031,0x0000009d, + 0x0004003d,0x00000006,0x000001a2,0x000001a1,0x0003003e,0x000001a0,0x000001a2,0x0003003e, + 0x000001a3,0x0000009d,0x00060039,0x00000006,0x000001a4,0x0000002b,0x000001a0,0x000001a3, + 0x00050041,0x00000015,0x000001a6,0x00000031,0x0000009d,0x0004003d,0x00000006,0x000001a7, + 0x000001a6,0x0003003e,0x000001a5,0x000001a7,0x0003003e,0x000001a8,0x000000f0,0x00060039, + 0x00000006,0x000001a9,0x0000002b,0x000001a5,0x000001a8,0x00050041,0x00000015,0x000001ab, + 0x00000031,0x00000008,0x0004003d,0x00000006,0x000001ac,0x000001ab,0x0003003e,0x000001aa, + 0x000001ac,0x0003003e,0x000001ad,0x0000009d,0x00060039,0x00000006,0x000001ae,0x0000002b, + 0x000001aa,0x000001ad,0x00050041,0x00000015,0x000001b0,0x00000031,0x00000008,0x0004003d, + 0x00000006,0x000001b1,0x000001b0,0x0003003e,0x000001af,0x000001b1,0x0003003e,0x000001b2, + 0x000000f0,0x00060039,0x00000006,0x000001b3,0x0000002b,0x000001af,0x000001b2,0x00070050, + 0x0000002f,0x000001b4,0x000001a4,0x000001a9,0x000001ae,0x000001b3,0x000200fe,0x000001b4, + 0x00010038, +}; +inline constexpr uint32_t k_f16_k16_f32__gemm_f16[] = { + 0x07230203,0x00010600,0x0008000b,0x000002ef,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x0000000b,0x00020011,0x00000016,0x00020011,0x00001151,0x00020011, + 0x00001160,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e, + 0x00000000,0x00000001,0x000d000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x000000f5, + 0x00000106,0x00000116,0x00000124,0x00000275,0x00000281,0x000002bb,0x000002ce,0x00060010, + 0x00000004,0x00000011,0x00000080,0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc, + 0x00090004,0x455f4c47,0x635f5458,0x72746e6f,0x665f6c6f,0x5f776f6c,0x72747461,0x74756269, + 0x00007365,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x36315f72,0x5f746962,0x726f7473, + 0x00656761,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x62385f72,0x735f7469,0x61726f74, + 0x00006567,0x000b0004,0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469, + 0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45, + 0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47, + 0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669,0x00080004,0x4b5f4c47, + 0x635f5248,0x65706f6f,0x69746172,0x6d5f6576,0x69727461,0x00000078,0x00090004,0x4b5f4c47, + 0x6d5f5248,0x726f6d65,0x63735f79,0x5f65706f,0x616d6573,0x6369746e,0x00000073,0x00090004, + 0x4b5f4c47,0x735f5248,0x65646168,0x75735f72,0x6f726762,0x625f7075,0x63697361,0x00000000, + 0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000b,0x42363166,0x28737469, + 0x31363166,0x0000003b,0x00040005,0x0000000a,0x756c6176,0x00000065,0x00060005,0x00000010, + 0x46363166,0x426d6f72,0x28737469,0x003b3175,0x00040005,0x0000000f,0x73746962,0x00000000, + 0x00060005,0x00000015,0x66696873,0x656e5274,0x3b317528,0x003b3175,0x00040005,0x00000013, + 0x756c6176,0x00000065,0x00040005,0x00000014,0x66696873,0x00000074,0x00080005,0x00000019, + 0x336d3465,0x65646f43,0x6d6f7246,0x42363146,0x28737469,0x003b3175,0x00050005,0x00000018, + 0x666c6168,0x73746942,0x00000000,0x00070005,0x0000001f,0x6c627570,0x28687369,0x753b3175, + 0x31663b31,0x003b3136,0x00030005,0x0000001c,0x00776f72,0x00040005,0x0000001d,0x756c6f63, + 0x00006e6d,0x00040005,0x0000001e,0x756c6176,0x00000065,0x00060005,0x00000026,0x45363166, + 0x6e6f7078,0x28746e65,0x003b3166,0x00040005,0x00000025,0x756c6176,0x00000065,0x00090005, + 0x0000002a,0x6e756f72,0x69685364,0x69527466,0x45746867,0x286e6576,0x753b3175,0x00003b31, + 0x00040005,0x00000028,0x756c6176,0x00000065,0x00040005,0x00000029,0x66696873,0x00000074, + 0x00070005,0x00000032,0x65786966,0x466f5464,0x69283631,0x3b313436,0x003b3169,0x00050005, + 0x00000030,0x65786966,0x6d755364,0x00000000,0x00060005,0x00000031,0x616e6962,0x78457972, + 0x656e6f70,0x0000746e,0x00090005,0x0000003b,0x53363166,0x28706574,0x663b3166,0x36315b31, + 0x31663b5d,0x5d36315b,0x0000003b,0x00050005,0x00000038,0x75636361,0x616c756d,0x00726f74, + 0x00030005,0x00000039,0x00000061,0x00030005,0x0000003a,0x00000062,0x00050005,0x0000004a, + 0x746f7571,0x746e6569,0x00000000,0x00060005,0x0000004e,0x616d6572,0x65646e69,0x73614d72, + 0x0000006b,0x00050005,0x00000053,0x616d6572,0x65646e69,0x00000072,0x00040005,0x00000057, + 0x666c6168,0x00796177,0x00040005,0x00000073,0x614e7369,0x0000006e,0x00050005,0x0000008f, + 0x6167656e,0x65766974,0x00000000,0x00050005,0x00000095,0x6f707865,0x746e656e,0x00000000, + 0x00050005,0x0000009b,0x746e616d,0x61737369,0x00000000,0x00040005,0x000000a2,0x65646f63, + 0x00000000,0x00050005,0x000000a9,0x6e676973,0x63696669,0x00646e61,0x00040005,0x000000b5, + 0x66696873,0x00000074,0x00040005,0x000000c0,0x61726170,0x0000006d,0x00040005,0x000000c2, + 0x61726170,0x0000006d,0x00050005,0x000000c7,0x78453465,0x656e6f70,0x0000746e,0x00050005, + 0x000000ca,0x614d3465,0x7369746e,0x00006173,0x00040005,0x000000cc,0x61726170,0x0000006d, + 0x00040005,0x000000ce,0x61726170,0x0000006d,0x00040005,0x000000f1,0x65646e69,0x00000078, + 0x00040005,0x000000f3,0x68737550,0x00000000,0x00050006,0x000000f3,0x00000000,0x73776f72, + 0x00000000,0x00040006,0x000000f3,0x00000001,0x0000004e,0x00060006,0x000000f3,0x00000002, + 0x75706e69,0x72745374,0x00656469,0x00070006,0x000000f3,0x00000003,0x7074756f,0x74537475, + 0x65646972,0x00000000,0x00030005,0x000000f5,0x00006370,0x00040005,0x000000fd,0x47414c46, + 0x00000053,0x00050005,0x00000104,0x7074754f,0x6c467475,0x0074616f,0x00050006,0x00000104, + 0x00000000,0x3374756f,0x00000032,0x00030005,0x00000106,0x00000000,0x00050005,0x00000114, + 0x7074754f,0x34457475,0x00000000,0x00050006,0x00000114,0x00000000,0x3874756f,0x00000000, + 0x00030005,0x00000116,0x00000000,0x00040005,0x00000118,0x61726170,0x0000006d,0x00040005, + 0x0000011b,0x61726170,0x0000006d,0x00050005,0x00000122,0x7074754f,0x61487475,0x0000666c, + 0x00050006,0x00000122,0x00000000,0x3174756f,0x00000036,0x00030005,0x00000124,0x00000000, + 0x00040005,0x0000012f,0x61726170,0x0000006d,0x00040005,0x00000132,0x61726170,0x0000006d, + 0x00050005,0x0000014f,0x6e757274,0x65746163,0x00000064,0x00050005,0x00000153,0x616d6572, + 0x65646e69,0x00000072,0x00040005,0x00000159,0x666c6168,0x00796177,0x00050005,0x00000179, + 0x6167656e,0x65766974,0x00000000,0x00050005,0x0000017c,0x6e67616d,0x64757469,0x00000065, + 0x00030005,0x00000188,0x0062736d,0x00060005,0x0000018b,0x756c6176,0x70784565,0x6e656e6f, + 0x00000074,0x00050005,0x0000018f,0x666c6168,0x73746942,0x00000000,0x00050005,0x00000196, + 0x6e676973,0x63696669,0x00646e61,0x00040005,0x000001a0,0x61726170,0x0000006d,0x00040005, + 0x000001a2,0x61726170,0x0000006d,0x00060005,0x000001c6,0x6e627573,0x616d726f,0x6163536c, + 0x0000656c,0x00050005,0x000001ca,0x746e616d,0x61737369,0x00000000,0x00040005,0x000001d8, + 0x61726170,0x0000006d,0x00040005,0x000001da,0x61726170,0x0000006d,0x00040005,0x000001e1, + 0x61726170,0x0000006d,0x00060005,0x000001e7,0x6978616d,0x456d756d,0x6e6f7078,0x00746e65, + 0x00040005,0x000001ed,0x61726170,0x0000006d,0x00030005,0x000001f0,0x00000069,0x00040005, + 0x00000207,0x61726170,0x0000006d,0x00040005,0x0000020c,0x61726170,0x0000006d,0x00050005, + 0x00000214,0x65786966,0x6d755364,0x00000000,0x00050005,0x00000219,0x6f707865,0x746e656e, + 0x00000000,0x00040005,0x0000021a,0x61726170,0x0000006d,0x00040005,0x0000021d,0x6c616373, + 0x00006465,0x00030005,0x0000022d,0x00000069,0x00030005,0x00000242,0x00006165,0x00040005, + 0x00000244,0x61726170,0x0000006d,0x00030005,0x00000248,0x00006265,0x00040005,0x0000024a, + 0x61726170,0x0000006d,0x00040005,0x0000024e,0x646f7270,0x00746375,0x00040005,0x0000026c, + 0x61726170,0x0000006d,0x00040005,0x0000026e,0x61726170,0x0000006d,0x00040005,0x00000272, + 0x42776f72,0x00657361,0x00060005,0x00000275,0x575f6c67,0x476b726f,0x70756f72,0x00004449, + 0x00030005,0x00000280,0x00000069,0x00080005,0x00000281,0x4c5f6c67,0x6c61636f,0x6f766e49, + 0x69746163,0x44496e6f,0x00000000,0x00040005,0x0000028a,0x454c4954,0x00004e5f,0x00030005, + 0x0000028d,0x00776f72,0x00040005,0x00000292,0x756c6f63,0x00006e6d,0x00050005,0x000002a4, + 0x75636361,0x616c756d,0x00726f74,0x00030005,0x000002a5,0x0000626b,0x00030005,0x000002ac, + 0x0000004b,0x00030005,0x000002ae,0x0000006a,0x00030005,0x000002b6,0x00000078,0x00040005, + 0x000002b9,0x75706e49,0x00004174,0x00040006,0x000002b9,0x00000000,0x00000061,0x00030005, + 0x000002bb,0x00000000,0x00030005,0x000002c9,0x00000077,0x00040005,0x000002cc,0x75706e49, + 0x00004274,0x00040006,0x000002cc,0x00000000,0x00000062,0x00030005,0x000002ce,0x00000000, + 0x00040005,0x000002db,0x61726170,0x0000006d,0x00040005,0x000002dd,0x61726170,0x0000006d, + 0x00040005,0x000002df,0x61726170,0x0000006d,0x00040005,0x000002e6,0x61726170,0x0000006d, + 0x00040005,0x000002e8,0x61726170,0x0000006d,0x00040005,0x000002ea,0x61726170,0x0000006d, + 0x00030047,0x000000f3,0x00000002,0x00050048,0x000000f3,0x00000000,0x00000023,0x00000000, + 0x00050048,0x000000f3,0x00000001,0x00000023,0x00000004,0x00050048,0x000000f3,0x00000002, + 0x00000023,0x00000008,0x00050048,0x000000f3,0x00000003,0x00000023,0x0000000c,0x00040047, + 0x000000fd,0x00000001,0x00000002,0x00040047,0x00000103,0x00000006,0x00000004,0x00030047, + 0x00000104,0x00000002,0x00040048,0x00000104,0x00000000,0x00000019,0x00050048,0x00000104, + 0x00000000,0x00000023,0x00000000,0x00030047,0x00000106,0x00000019,0x00040047,0x00000106, + 0x00000021,0x00000007,0x00040047,0x00000106,0x00000022,0x00000000,0x00040047,0x00000113, + 0x00000006,0x00000001,0x00030047,0x00000114,0x00000002,0x00040048,0x00000114,0x00000000, + 0x00000019,0x00050048,0x00000114,0x00000000,0x00000023,0x00000000,0x00030047,0x00000116, + 0x00000019,0x00040047,0x00000116,0x00000021,0x00000005,0x00040047,0x00000116,0x00000022, + 0x00000000,0x00040047,0x00000121,0x00000006,0x00000002,0x00030047,0x00000122,0x00000002, + 0x00040048,0x00000122,0x00000000,0x00000019,0x00050048,0x00000122,0x00000000,0x00000023, + 0x00000000,0x00030047,0x00000124,0x00000019,0x00040047,0x00000124,0x00000021,0x00000002, + 0x00040047,0x00000124,0x00000022,0x00000000,0x00030047,0x00000220,0x0000002a,0x00030047, + 0x00000253,0x0000002a,0x00030047,0x00000259,0x0000002a,0x00030047,0x0000025b,0x0000002a, + 0x00040047,0x00000275,0x0000000b,0x0000001a,0x00040047,0x00000281,0x0000000b,0x0000001b, + 0x00040047,0x0000028a,0x00000001,0x00000001,0x00040047,0x000002ac,0x00000001,0x00000000, + 0x00040047,0x000002b8,0x00000006,0x00000002,0x00030047,0x000002b9,0x00000002,0x00040048, + 0x000002b9,0x00000000,0x00000018,0x00050048,0x000002b9,0x00000000,0x00000023,0x00000000, + 0x00030047,0x000002bb,0x00000018,0x00040047,0x000002bb,0x00000021,0x00000000,0x00040047, + 0x000002bb,0x00000022,0x00000000,0x00040047,0x000002cb,0x00000006,0x00000002,0x00030047, + 0x000002cc,0x00000002,0x00040048,0x000002cc,0x00000000,0x00000018,0x00050048,0x000002cc, + 0x00000000,0x00000023,0x00000000,0x00030047,0x000002ce,0x00000018,0x00040047,0x000002ce, + 0x00000021,0x00000001,0x00040047,0x000002ce,0x00000022,0x00000000,0x00020013,0x00000002, + 0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000010,0x00040020,0x00000007, + 0x00000007,0x00000006,0x00040015,0x00000008,0x00000020,0x00000000,0x00040021,0x00000009, + 0x00000008,0x00000007,0x00040020,0x0000000d,0x00000007,0x00000008,0x00040021,0x0000000e, + 0x00000006,0x0000000d,0x00050021,0x00000012,0x00000008,0x0000000d,0x0000000d,0x00040021, + 0x00000017,0x00000008,0x0000000d,0x00060021,0x0000001b,0x00000002,0x0000000d,0x0000000d, + 0x00000007,0x00030016,0x00000021,0x00000020,0x00040020,0x00000022,0x00000007,0x00000021, + 0x00040015,0x00000023,0x00000020,0x00000001,0x00040021,0x00000024,0x00000023,0x00000022, + 0x00040015,0x0000002c,0x00000040,0x00000001,0x00040020,0x0000002d,0x00000007,0x0000002c, + 0x00040020,0x0000002e,0x00000007,0x00000023,0x00050021,0x0000002f,0x00000021,0x0000002d, + 0x0000002e,0x0004002b,0x00000008,0x00000034,0x00000010,0x0004001c,0x00000035,0x00000021, + 0x00000034,0x00040020,0x00000036,0x00000007,0x00000035,0x00060021,0x00000037,0x00000021, + 0x00000022,0x00000036,0x00000036,0x00040015,0x0000003e,0x00000010,0x00000000,0x0004002b, + 0x00000008,0x00000044,0x0000ffff,0x0004002b,0x00000008,0x0000004f,0x00000001,0x00020014, + 0x0000005c,0x0004002b,0x00000008,0x0000006a,0x00000000,0x00040020,0x00000072,0x00000007, + 0x0000005c,0x0004002b,0x00000008,0x00000075,0x00007c00,0x0004002b,0x00000008,0x0000007b, + 0x000003ff,0x0004002b,0x00000008,0x00000084,0x00007fff,0x0004002b,0x00000008,0x0000008a, + 0x00000008,0x0004002b,0x00000008,0x0000008c,0x00000080,0x0004002b,0x00000008,0x00000091, + 0x00008000,0x0004002b,0x00000008,0x00000097,0x0000000a,0x0004002b,0x00000008,0x00000099, + 0x0000001f,0x0004002b,0x00000008,0x000000a3,0x0000007e,0x0004002b,0x00000008,0x000000b1, + 0x00000400,0x0004002b,0x00000008,0x000000bb,0x0000000f,0x0004002b,0x00000008,0x000000cb, + 0x00000007,0x0004002b,0x00000008,0x000000de,0x00000006,0x0004002b,0x00000008,0x000000e7, + 0x00000003,0x0006001e,0x000000f3,0x00000008,0x00000008,0x00000008,0x00000008,0x00040020, + 0x000000f4,0x00000009,0x000000f3,0x0004003b,0x000000f4,0x000000f5,0x00000009,0x0004002b, + 0x00000023,0x000000f6,0x00000003,0x00040020,0x000000f7,0x00000009,0x00000008,0x00040032, + 0x00000008,0x000000fd,0x00000000,0x0004002b,0x00000008,0x000000fe,0x00000100,0x00060034, + 0x00000008,0x000000ff,0x000000c7,0x000000fd,0x000000fe,0x00060034,0x0000005c,0x00000100, + 0x000000ab,0x000000ff,0x0000006a,0x0003001d,0x00000103,0x00000021,0x0003001e,0x00000104, + 0x00000103,0x00040020,0x00000105,0x0000000c,0x00000104,0x0004003b,0x00000105,0x00000106, + 0x0000000c,0x0004002b,0x00000023,0x00000107,0x00000000,0x00040020,0x0000010b,0x0000000c, + 0x00000021,0x00060034,0x00000008,0x0000010e,0x000000c7,0x000000fd,0x00000034,0x00060034, + 0x0000005c,0x0000010f,0x000000ab,0x0000010e,0x0000006a,0x00040015,0x00000112,0x00000008, + 0x00000000,0x0003001d,0x00000113,0x00000112,0x0003001e,0x00000114,0x00000113,0x00040020, + 0x00000115,0x0000000c,0x00000114,0x0004003b,0x00000115,0x00000116,0x0000000c,0x00040020, + 0x0000011e,0x0000000c,0x00000112,0x0003001d,0x00000121,0x00000006,0x0003001e,0x00000122, + 0x00000121,0x00040020,0x00000123,0x0000000c,0x00000122,0x0004003b,0x00000123,0x00000124, + 0x0000000c,0x00040020,0x00000127,0x0000000c,0x00000006,0x0004002b,0x00000008,0x00000129, + 0x00000020,0x00060034,0x00000008,0x0000012a,0x000000c7,0x000000fd,0x00000129,0x00060034, + 0x0000005c,0x0000012b,0x000000ab,0x0000012a,0x0000006a,0x0004002b,0x00000008,0x00000139, + 0x00000017,0x0004002b,0x00000008,0x0000013b,0x000000ff,0x0004002b,0x00000023,0x0000013e, + 0x0000007f,0x0004002b,0x00000023,0x00000140,0xfffffff2,0x0005002b,0x0000002c,0x00000173, + 0x00000000,0x00000000,0x0004002b,0x00000021,0x00000177,0x00000000,0x0004002b,0x00000023, + 0x00000198,0x0000000a,0x0004002b,0x00000008,0x000001ac,0x00000800,0x0004002b,0x00000023, + 0x000001b0,0x00000001,0x0004002b,0x00000023,0x000001b4,0x00000010,0x0004002b,0x00000023, + 0x000001bc,0x0000000f,0x0004002b,0x00000023,0x000001c8,0x00000018,0x0004002b,0x00000023, + 0x000001e8,0xffffffeb,0x0004002b,0x00000023,0x00000225,0x00000019,0x00040017,0x00000273, + 0x00000008,0x00000003,0x00040020,0x00000274,0x00000001,0x00000273,0x0004003b,0x00000274, + 0x00000275,0x00000001,0x00040020,0x00000276,0x00000001,0x00000008,0x0004002b,0x00000008, + 0x00000279,0x00000002,0x0004002b,0x00000008,0x0000027e,0x00000040,0x0004003b,0x00000274, + 0x00000281,0x00000001,0x00040032,0x00000008,0x0000028a,0x00000020,0x00060034,0x00000008, + 0x0000028b,0x00000084,0x0000027e,0x0000028a,0x00040032,0x00000008,0x000002ac,0x00000010, + 0x0003001d,0x000002b8,0x00000006,0x0003001e,0x000002b9,0x000002b8,0x00040020,0x000002ba, + 0x0000000c,0x000002b9,0x0004003b,0x000002ba,0x000002bb,0x0000000c,0x0004002b,0x00000023, + 0x000002bd,0x00000002,0x0003001d,0x000002cb,0x00000006,0x0003001e,0x000002cc,0x000002cb, + 0x00040020,0x000002cd,0x0000000c,0x000002cc,0x0004003b,0x000002cd,0x000002ce,0x0000000c, + 0x0006002c,0x00000273,0x000002ee,0x0000008c,0x0000004f,0x0000004f,0x00050036,0x00000002, + 0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x0000000d,0x00000272, + 0x00000007,0x0004003b,0x0000000d,0x00000280,0x00000007,0x0004003b,0x0000000d,0x0000028d, + 0x00000007,0x0004003b,0x0000000d,0x00000292,0x00000007,0x0004003b,0x00000022,0x000002a4, + 0x00000007,0x0004003b,0x0000000d,0x000002a5,0x00000007,0x0004003b,0x0000000d,0x000002ae, + 0x00000007,0x0004003b,0x00000036,0x000002b6,0x00000007,0x0004003b,0x00000036,0x000002c9, + 0x00000007,0x0004003b,0x00000022,0x000002db,0x00000007,0x0004003b,0x00000036,0x000002dd, + 0x00000007,0x0004003b,0x00000036,0x000002df,0x00000007,0x0004003b,0x0000000d,0x000002e6, + 0x00000007,0x0004003b,0x0000000d,0x000002e8,0x00000007,0x0004003b,0x00000007,0x000002ea, + 0x00000007,0x00050041,0x00000276,0x00000277,0x00000275,0x0000004f,0x0004003d,0x00000008, + 0x00000278,0x00000277,0x00050041,0x00000276,0x0000027a,0x00000275,0x00000279,0x0004003d, + 0x00000008,0x0000027b,0x0000027a,0x00050084,0x00000008,0x0000027c,0x0000027b,0x00000044, + 0x00050080,0x00000008,0x0000027d,0x00000278,0x0000027c,0x00050084,0x00000008,0x0000027f, + 0x0000027d,0x0000027e,0x0003003e,0x00000272,0x0000027f,0x00050041,0x00000276,0x00000282, + 0x00000281,0x0000006a,0x0004003d,0x00000008,0x00000283,0x00000282,0x0003003e,0x00000280, + 0x00000283,0x000200f9,0x00000284,0x000200f8,0x00000284,0x000400f6,0x00000286,0x00000287, + 0x00000000,0x000200f9,0x00000288,0x000200f8,0x00000288,0x0004003d,0x00000008,0x00000289, + 0x00000280,0x000500b0,0x0000005c,0x0000028c,0x00000289,0x0000028b,0x000400fa,0x0000028c, + 0x00000285,0x00000286,0x000200f8,0x00000285,0x0004003d,0x00000008,0x0000028e,0x00000272, + 0x0004003d,0x00000008,0x0000028f,0x00000280,0x00050086,0x00000008,0x00000290,0x0000028f, + 0x0000028a,0x00050080,0x00000008,0x00000291,0x0000028e,0x00000290,0x0003003e,0x0000028d, + 0x00000291,0x0004003d,0x00000008,0x00000293,0x00000280,0x00050089,0x00000008,0x00000294, + 0x00000293,0x0000028a,0x0003003e,0x00000292,0x00000294,0x0004003d,0x00000008,0x00000295, + 0x0000028d,0x00050041,0x000000f7,0x00000296,0x000000f5,0x00000107,0x0004003d,0x00000008, + 0x00000297,0x00000296,0x000500ae,0x0000005c,0x00000298,0x00000295,0x00000297,0x000400a8, + 0x0000005c,0x00000299,0x00000298,0x000300f7,0x0000029b,0x00000000,0x000400fa,0x00000299, + 0x0000029a,0x0000029b,0x000200f8,0x0000029a,0x0004003d,0x00000008,0x0000029c,0x00000292, + 0x00050041,0x000000f7,0x0000029d,0x000000f5,0x000001b0,0x0004003d,0x00000008,0x0000029e, + 0x0000029d,0x000500ae,0x0000005c,0x0000029f,0x0000029c,0x0000029e,0x000200f9,0x0000029b, + 0x000200f8,0x0000029b,0x000700f5,0x0000005c,0x000002a0,0x00000298,0x00000285,0x0000029f, + 0x0000029a,0x000300f7,0x000002a2,0x00000000,0x000400fa,0x000002a0,0x000002a1,0x000002a2, + 0x000200f8,0x000002a1,0x000200f9,0x00000287,0x000200f8,0x000002a2,0x0003003e,0x000002a4, + 0x00000177,0x0003003e,0x000002a5,0x0000006a,0x000200f9,0x000002a6,0x000200f8,0x000002a6, + 0x000400f6,0x000002a8,0x000002a9,0x00000000,0x000200f9,0x000002aa,0x000200f8,0x000002aa, + 0x0004003d,0x00000008,0x000002ab,0x000002a5,0x000500b0,0x0000005c,0x000002ad,0x000002ab, + 0x000002ac,0x000400fa,0x000002ad,0x000002a7,0x000002a8,0x000200f8,0x000002a7,0x0003003e, + 0x000002ae,0x0000006a,0x000200f9,0x000002af,0x000200f8,0x000002af,0x000400f6,0x000002b1, + 0x000002b2,0x00000000,0x000200f9,0x000002b3,0x000200f8,0x000002b3,0x0004003d,0x00000008, + 0x000002b4,0x000002ae,0x000500b0,0x0000005c,0x000002b5,0x000002b4,0x00000034,0x000400fa, + 0x000002b5,0x000002b0,0x000002b1,0x000200f8,0x000002b0,0x0004003d,0x00000008,0x000002b7, + 0x000002ae,0x0004003d,0x00000008,0x000002bc,0x0000028d,0x00050041,0x000000f7,0x000002be, + 0x000000f5,0x000002bd,0x0004003d,0x00000008,0x000002bf,0x000002be,0x00050084,0x00000008, + 0x000002c0,0x000002bc,0x000002bf,0x0004003d,0x00000008,0x000002c1,0x000002a5,0x00050080, + 0x00000008,0x000002c2,0x000002c0,0x000002c1,0x0004003d,0x00000008,0x000002c3,0x000002ae, + 0x00050080,0x00000008,0x000002c4,0x000002c2,0x000002c3,0x00060041,0x00000127,0x000002c5, + 0x000002bb,0x00000107,0x000002c4,0x0004003d,0x00000006,0x000002c6,0x000002c5,0x00040073, + 0x00000021,0x000002c7,0x000002c6,0x00050041,0x00000022,0x000002c8,0x000002b6,0x000002b7, + 0x0003003e,0x000002c8,0x000002c7,0x0004003d,0x00000008,0x000002ca,0x000002ae,0x0004003d, + 0x00000008,0x000002cf,0x000002a5,0x0004003d,0x00000008,0x000002d0,0x000002ae,0x00050080, + 0x00000008,0x000002d1,0x000002cf,0x000002d0,0x00050084,0x00000008,0x000002d2,0x000002d1, + 0x0000028a,0x0004003d,0x00000008,0x000002d3,0x00000292,0x00050080,0x00000008,0x000002d4, + 0x000002d2,0x000002d3,0x00060041,0x00000127,0x000002d5,0x000002ce,0x00000107,0x000002d4, + 0x0004003d,0x00000006,0x000002d6,0x000002d5,0x00040073,0x00000021,0x000002d7,0x000002d6, + 0x00050041,0x00000022,0x000002d8,0x000002c9,0x000002ca,0x0003003e,0x000002d8,0x000002d7, + 0x000200f9,0x000002b2,0x000200f8,0x000002b2,0x0004003d,0x00000008,0x000002d9,0x000002ae, + 0x00050080,0x00000008,0x000002da,0x000002d9,0x000001b0,0x0003003e,0x000002ae,0x000002da, + 0x000200f9,0x000002af,0x000200f8,0x000002b1,0x0004003d,0x00000021,0x000002dc,0x000002a4, + 0x0003003e,0x000002db,0x000002dc,0x0004003d,0x00000035,0x000002de,0x000002b6,0x0003003e, + 0x000002dd,0x000002de,0x0004003d,0x00000035,0x000002e0,0x000002c9,0x0003003e,0x000002df, + 0x000002e0,0x00070039,0x00000021,0x000002e1,0x0000003b,0x000002db,0x000002dd,0x000002df, + 0x0003003e,0x000002a4,0x000002e1,0x000200f9,0x000002a9,0x000200f8,0x000002a9,0x0004003d, + 0x00000008,0x000002e2,0x000002a5,0x00050080,0x00000008,0x000002e3,0x000002e2,0x00000034, + 0x0003003e,0x000002a5,0x000002e3,0x000200f9,0x000002a6,0x000200f8,0x000002a8,0x0004003d, + 0x00000021,0x000002e4,0x000002a4,0x00040073,0x00000006,0x000002e5,0x000002e4,0x0004003d, + 0x00000008,0x000002e7,0x0000028d,0x0003003e,0x000002e6,0x000002e7,0x0004003d,0x00000008, + 0x000002e9,0x00000292,0x0003003e,0x000002e8,0x000002e9,0x0003003e,0x000002ea,0x000002e5, + 0x00070039,0x00000002,0x000002eb,0x0000001f,0x000002e6,0x000002e8,0x000002ea,0x000200f9, + 0x00000287,0x000200f8,0x00000287,0x0004003d,0x00000008,0x000002ec,0x00000280,0x00050080, + 0x00000008,0x000002ed,0x000002ec,0x0000008c,0x0003003e,0x00000280,0x000002ed,0x000200f9, + 0x00000284,0x000200f8,0x00000286,0x000100fd,0x00010038,0x00050036,0x00000008,0x0000000b, + 0x00000000,0x00000009,0x00030037,0x00000007,0x0000000a,0x000200f8,0x0000000c,0x0004003d, + 0x00000006,0x0000003d,0x0000000a,0x0004007c,0x0000003e,0x0000003f,0x0000003d,0x00040071, + 0x00000008,0x00000040,0x0000003f,0x000200fe,0x00000040,0x00010038,0x00050036,0x00000006, + 0x00000010,0x00000000,0x0000000e,0x00030037,0x0000000d,0x0000000f,0x000200f8,0x00000011, + 0x0004003d,0x00000008,0x00000043,0x0000000f,0x000500c7,0x00000008,0x00000045,0x00000043, + 0x00000044,0x00040071,0x0000003e,0x00000046,0x00000045,0x0004007c,0x00000006,0x00000047, + 0x00000046,0x000200fe,0x00000047,0x00010038,0x00050036,0x00000008,0x00000015,0x00000000, + 0x00000012,0x00030037,0x0000000d,0x00000013,0x00030037,0x0000000d,0x00000014,0x000200f8, + 0x00000016,0x0004003b,0x0000000d,0x0000004a,0x00000007,0x0004003b,0x0000000d,0x0000004e, + 0x00000007,0x0004003b,0x0000000d,0x00000053,0x00000007,0x0004003b,0x0000000d,0x00000057, + 0x00000007,0x0004003d,0x00000008,0x0000004b,0x00000013,0x0004003d,0x00000008,0x0000004c, + 0x00000014,0x000500c2,0x00000008,0x0000004d,0x0000004b,0x0000004c,0x0003003e,0x0000004a, + 0x0000004d,0x0004003d,0x00000008,0x00000050,0x00000014,0x000500c4,0x00000008,0x00000051, + 0x0000004f,0x00000050,0x00050082,0x00000008,0x00000052,0x00000051,0x0000004f,0x0003003e, + 0x0000004e,0x00000052,0x0004003d,0x00000008,0x00000054,0x00000013,0x0004003d,0x00000008, + 0x00000055,0x0000004e,0x000500c7,0x00000008,0x00000056,0x00000054,0x00000055,0x0003003e, + 0x00000053,0x00000056,0x0004003d,0x00000008,0x00000058,0x00000014,0x00050082,0x00000008, + 0x00000059,0x00000058,0x0000004f,0x000500c4,0x00000008,0x0000005a,0x0000004f,0x00000059, + 0x0003003e,0x00000057,0x0000005a,0x0004003d,0x00000008,0x0000005b,0x0000004a,0x0004003d, + 0x00000008,0x0000005d,0x00000053,0x0004003d,0x00000008,0x0000005e,0x00000057,0x000500ac, + 0x0000005c,0x0000005f,0x0000005d,0x0000005e,0x000400a8,0x0000005c,0x00000060,0x0000005f, + 0x000300f7,0x00000062,0x00000000,0x000400fa,0x00000060,0x00000061,0x00000062,0x000200f8, + 0x00000061,0x0004003d,0x00000008,0x00000063,0x00000053,0x0004003d,0x00000008,0x00000064, + 0x00000057,0x000500aa,0x0000005c,0x00000065,0x00000063,0x00000064,0x000300f7,0x00000067, + 0x00000000,0x000400fa,0x00000065,0x00000066,0x00000067,0x000200f8,0x00000066,0x0004003d, + 0x00000008,0x00000068,0x0000004a,0x000500c7,0x00000008,0x00000069,0x00000068,0x0000004f, + 0x000500ab,0x0000005c,0x0000006b,0x00000069,0x0000006a,0x000200f9,0x00000067,0x000200f8, + 0x00000067,0x000700f5,0x0000005c,0x0000006c,0x00000065,0x00000061,0x0000006b,0x00000066, + 0x000200f9,0x00000062,0x000200f8,0x00000062,0x000700f5,0x0000005c,0x0000006d,0x0000005f, + 0x00000016,0x0000006c,0x00000067,0x000600a9,0x00000008,0x0000006e,0x0000006d,0x0000004f, + 0x0000006a,0x00050080,0x00000008,0x0000006f,0x0000005b,0x0000006e,0x000200fe,0x0000006f, + 0x00010038,0x00050036,0x00000008,0x00000019,0x00000000,0x00000017,0x00030037,0x0000000d, + 0x00000018,0x000200f8,0x0000001a,0x0004003b,0x00000072,0x00000073,0x00000007,0x0004003b, + 0x0000000d,0x0000008f,0x00000007,0x0004003b,0x0000000d,0x00000095,0x00000007,0x0004003b, + 0x0000000d,0x0000009b,0x00000007,0x0004003b,0x0000000d,0x000000a2,0x00000007,0x0004003b, + 0x0000000d,0x000000a9,0x00000007,0x0004003b,0x0000000d,0x000000ac,0x00000007,0x0004003b, + 0x0000000d,0x000000b5,0x00000007,0x0004003b,0x0000000d,0x000000b8,0x00000007,0x0004003b, + 0x0000000d,0x000000c0,0x00000007,0x0004003b,0x0000000d,0x000000c2,0x00000007,0x0004003b, + 0x0000000d,0x000000c7,0x00000007,0x0004003b,0x0000000d,0x000000ca,0x00000007,0x0004003b, + 0x0000000d,0x000000cc,0x00000007,0x0004003b,0x0000000d,0x000000ce,0x00000007,0x0004003b, + 0x0000000d,0x000000e2,0x00000007,0x0004003d,0x00000008,0x00000074,0x00000018,0x000500c7, + 0x00000008,0x00000076,0x00000074,0x00000075,0x000500aa,0x0000005c,0x00000077,0x00000076, + 0x00000075,0x000300f7,0x00000079,0x00000000,0x000400fa,0x00000077,0x00000078,0x00000079, + 0x000200f8,0x00000078,0x0004003d,0x00000008,0x0000007a,0x00000018,0x000500c7,0x00000008, + 0x0000007c,0x0000007a,0x0000007b,0x000500ab,0x0000005c,0x0000007d,0x0000007c,0x0000006a, + 0x000200f9,0x00000079,0x000200f8,0x00000079,0x000700f5,0x0000005c,0x0000007e,0x00000077, + 0x0000001a,0x0000007d,0x00000078,0x0003003e,0x00000073,0x0000007e,0x0004003d,0x0000005c, + 0x0000007f,0x00000073,0x000300f7,0x00000081,0x00000000,0x000400fa,0x0000007f,0x00000080, + 0x00000081,0x000200f8,0x00000080,0x000200fe,0x0000006a,0x000200f8,0x00000081,0x0004003d, + 0x00000008,0x00000083,0x00000018,0x000500c7,0x00000008,0x00000085,0x00000083,0x00000084, + 0x000500aa,0x0000005c,0x00000086,0x00000085,0x0000006a,0x000300f7,0x00000088,0x00000000, + 0x000400fa,0x00000086,0x00000087,0x00000088,0x000200f8,0x00000087,0x0004003d,0x00000008, + 0x00000089,0x00000018,0x000500c2,0x00000008,0x0000008b,0x00000089,0x0000008a,0x000500c7, + 0x00000008,0x0000008d,0x0000008b,0x0000008c,0x000200fe,0x0000008d,0x000200f8,0x00000088, + 0x0004003d,0x00000008,0x00000090,0x00000018,0x000500c7,0x00000008,0x00000092,0x00000090, + 0x00000091,0x000500ab,0x0000005c,0x00000093,0x00000092,0x0000006a,0x000600a9,0x00000008, + 0x00000094,0x00000093,0x0000008c,0x0000006a,0x0003003e,0x0000008f,0x00000094,0x0004003d, + 0x00000008,0x00000096,0x00000018,0x000500c2,0x00000008,0x00000098,0x00000096,0x00000097, + 0x000500c7,0x00000008,0x0000009a,0x00000098,0x00000099,0x0003003e,0x00000095,0x0000009a, + 0x0004003d,0x00000008,0x0000009c,0x00000018,0x000500c7,0x00000008,0x0000009d,0x0000009c, + 0x0000007b,0x0003003e,0x0000009b,0x0000009d,0x0004003d,0x00000008,0x0000009e,0x00000095, + 0x000500aa,0x0000005c,0x0000009f,0x0000009e,0x00000099,0x000300f7,0x000000a1,0x00000000, + 0x000400fa,0x0000009f,0x000000a0,0x000000a4,0x000200f8,0x000000a0,0x0003003e,0x000000a2, + 0x000000a3,0x000200f9,0x000000a1,0x000200f8,0x000000a4,0x0004003d,0x00000008,0x000000a5, + 0x00000095,0x000500b2,0x0000005c,0x000000a6,0x000000a5,0x0000008a,0x000300f7,0x000000a8, + 0x00000000,0x000400fa,0x000000a6,0x000000a7,0x000000c6,0x000200f8,0x000000a7,0x0004003d, + 0x00000008,0x000000aa,0x00000095,0x000500aa,0x0000005c,0x000000ab,0x000000aa,0x0000006a, + 0x000300f7,0x000000ae,0x00000000,0x000400fa,0x000000ab,0x000000ad,0x000000b0,0x000200f8, + 0x000000ad,0x0004003d,0x00000008,0x000000af,0x0000009b,0x0003003e,0x000000ac,0x000000af, + 0x000200f9,0x000000ae,0x000200f8,0x000000b0,0x0004003d,0x00000008,0x000000b2,0x0000009b, + 0x00050080,0x00000008,0x000000b3,0x000000b1,0x000000b2,0x0003003e,0x000000ac,0x000000b3, + 0x000200f9,0x000000ae,0x000200f8,0x000000ae,0x0004003d,0x00000008,0x000000b4,0x000000ac, + 0x0003003e,0x000000a9,0x000000b4,0x0004003d,0x00000008,0x000000b6,0x00000095,0x000500aa, + 0x0000005c,0x000000b7,0x000000b6,0x0000006a,0x000300f7,0x000000ba,0x00000000,0x000400fa, + 0x000000b7,0x000000b9,0x000000bc,0x000200f8,0x000000b9,0x0003003e,0x000000b8,0x000000bb, + 0x000200f9,0x000000ba,0x000200f8,0x000000bc,0x0004003d,0x00000008,0x000000bd,0x00000095, + 0x00050082,0x00000008,0x000000be,0x00000034,0x000000bd,0x0003003e,0x000000b8,0x000000be, + 0x000200f9,0x000000ba,0x000200f8,0x000000ba,0x0004003d,0x00000008,0x000000bf,0x000000b8, + 0x0003003e,0x000000b5,0x000000bf,0x0004003d,0x00000008,0x000000c1,0x000000a9,0x0003003e, + 0x000000c0,0x000000c1,0x0004003d,0x00000008,0x000000c3,0x000000b5,0x0003003e,0x000000c2, + 0x000000c3,0x00060039,0x00000008,0x000000c4,0x00000015,0x000000c0,0x000000c2,0x0007000c, + 0x00000008,0x000000c5,0x00000001,0x00000026,0x000000c4,0x0000008a,0x0003003e,0x000000a2, + 0x000000c5,0x000200f9,0x000000a8,0x000200f8,0x000000c6,0x0004003d,0x00000008,0x000000c8, + 0x00000095,0x00050082,0x00000008,0x000000c9,0x000000c8,0x0000008a,0x0003003e,0x000000c7, + 0x000000c9,0x0004003d,0x00000008,0x000000cd,0x0000009b,0x0003003e,0x000000cc,0x000000cd, + 0x0003003e,0x000000ce,0x000000cb,0x00060039,0x00000008,0x000000cf,0x00000015,0x000000cc, + 0x000000ce,0x0003003e,0x000000ca,0x000000cf,0x0004003d,0x00000008,0x000000d0,0x000000ca, + 0x000500aa,0x0000005c,0x000000d1,0x000000d0,0x0000008a,0x000300f7,0x000000d3,0x00000000, + 0x000400fa,0x000000d1,0x000000d2,0x000000d3,0x000200f8,0x000000d2,0x0003003e,0x000000ca, + 0x0000006a,0x0004003d,0x00000008,0x000000d4,0x000000c7,0x00050080,0x00000008,0x000000d5, + 0x000000d4,0x0000004f,0x0003003e,0x000000c7,0x000000d5,0x000200f9,0x000000d3,0x000200f8, + 0x000000d3,0x0004003d,0x00000008,0x000000d6,0x000000c7,0x000500ac,0x0000005c,0x000000d7, + 0x000000d6,0x000000bb,0x000400a8,0x0000005c,0x000000d8,0x000000d7,0x000300f7,0x000000da, + 0x00000000,0x000400fa,0x000000d8,0x000000d9,0x000000da,0x000200f8,0x000000d9,0x0004003d, + 0x00000008,0x000000db,0x000000c7,0x000500aa,0x0000005c,0x000000dc,0x000000db,0x000000bb, + 0x0004003d,0x00000008,0x000000dd,0x000000ca,0x000500ac,0x0000005c,0x000000df,0x000000dd, + 0x000000de,0x000500a7,0x0000005c,0x000000e0,0x000000dc,0x000000df,0x000200f9,0x000000da, + 0x000200f8,0x000000da,0x000700f5,0x0000005c,0x000000e1,0x000000d7,0x000000d3,0x000000e0, + 0x000000d9,0x000300f7,0x000000e4,0x00000000,0x000400fa,0x000000e1,0x000000e3,0x000000e5, + 0x000200f8,0x000000e3,0x0003003e,0x000000e2,0x000000a3,0x000200f9,0x000000e4,0x000200f8, + 0x000000e5,0x0004003d,0x00000008,0x000000e6,0x000000c7,0x000500c4,0x00000008,0x000000e8, + 0x000000e6,0x000000e7,0x0004003d,0x00000008,0x000000e9,0x000000ca,0x000500c5,0x00000008, + 0x000000ea,0x000000e8,0x000000e9,0x0003003e,0x000000e2,0x000000ea,0x000200f9,0x000000e4, + 0x000200f8,0x000000e4,0x0004003d,0x00000008,0x000000eb,0x000000e2,0x0003003e,0x000000a2, + 0x000000eb,0x000200f9,0x000000a8,0x000200f8,0x000000a8,0x000200f9,0x000000a1,0x000200f8, + 0x000000a1,0x0004003d,0x00000008,0x000000ec,0x0000008f,0x0004003d,0x00000008,0x000000ed, + 0x000000a2,0x000500c5,0x00000008,0x000000ee,0x000000ec,0x000000ed,0x000200fe,0x000000ee, + 0x00010038,0x00050036,0x00000002,0x0000001f,0x00000000,0x0000001b,0x00030037,0x0000000d, + 0x0000001c,0x00030037,0x0000000d,0x0000001d,0x00030037,0x00000007,0x0000001e,0x000200f8, + 0x00000020,0x0004003b,0x0000000d,0x000000f1,0x00000007,0x0004003b,0x00000007,0x00000118, + 0x00000007,0x0004003b,0x0000000d,0x0000011b,0x00000007,0x0004003b,0x00000007,0x0000012f, + 0x00000007,0x0004003b,0x0000000d,0x00000132,0x00000007,0x0004003d,0x00000008,0x000000f2, + 0x0000001c,0x00050041,0x000000f7,0x000000f8,0x000000f5,0x000000f6,0x0004003d,0x00000008, + 0x000000f9,0x000000f8,0x00050084,0x00000008,0x000000fa,0x000000f2,0x000000f9,0x0004003d, + 0x00000008,0x000000fb,0x0000001d,0x00050080,0x00000008,0x000000fc,0x000000fa,0x000000fb, + 0x0003003e,0x000000f1,0x000000fc,0x000300f7,0x00000102,0x00000000,0x000400fa,0x00000100, + 0x00000101,0x0000010d,0x000200f8,0x00000101,0x0004003d,0x00000008,0x00000108,0x000000f1, + 0x0004003d,0x00000006,0x00000109,0x0000001e,0x00040073,0x00000021,0x0000010a,0x00000109, + 0x00060041,0x0000010b,0x0000010c,0x00000106,0x00000107,0x00000108,0x0003003e,0x0000010c, + 0x0000010a,0x000200f9,0x00000102,0x000200f8,0x0000010d,0x000300f7,0x00000111,0x00000000, + 0x000400fa,0x0000010f,0x00000110,0x00000120,0x000200f8,0x00000110,0x0004003d,0x00000008, + 0x00000117,0x000000f1,0x0004003d,0x00000006,0x00000119,0x0000001e,0x0003003e,0x00000118, + 0x00000119,0x00050039,0x00000008,0x0000011a,0x0000000b,0x00000118,0x0003003e,0x0000011b, + 0x0000011a,0x00050039,0x00000008,0x0000011c,0x00000019,0x0000011b,0x00040071,0x00000112, + 0x0000011d,0x0000011c,0x00060041,0x0000011e,0x0000011f,0x00000116,0x00000107,0x00000117, + 0x0003003e,0x0000011f,0x0000011d,0x000200f9,0x00000111,0x000200f8,0x00000120,0x0004003d, + 0x00000008,0x00000125,0x000000f1,0x0004003d,0x00000006,0x00000126,0x0000001e,0x00060041, + 0x00000127,0x00000128,0x00000124,0x00000107,0x00000125,0x0003003e,0x00000128,0x00000126, + 0x000200f9,0x00000111,0x000200f8,0x00000111,0x000200f9,0x00000102,0x000200f8,0x00000102, + 0x000300f7,0x0000012d,0x00000000,0x000400fa,0x0000012b,0x0000012c,0x0000012d,0x000200f8, + 0x0000012c,0x0004003d,0x00000008,0x0000012e,0x000000f1,0x0004003d,0x00000006,0x00000130, + 0x0000001e,0x0003003e,0x0000012f,0x00000130,0x00050039,0x00000008,0x00000131,0x0000000b, + 0x0000012f,0x0003003e,0x00000132,0x00000131,0x00050039,0x00000008,0x00000133,0x00000019, + 0x00000132,0x00040071,0x00000112,0x00000134,0x00000133,0x00060041,0x0000011e,0x00000135, + 0x00000116,0x00000107,0x0000012e,0x0003003e,0x00000135,0x00000134,0x000200f9,0x0000012d, + 0x000200f8,0x0000012d,0x000100fd,0x00010038,0x00050036,0x00000023,0x00000026,0x00000000, + 0x00000024,0x00030037,0x00000022,0x00000025,0x000200f8,0x00000027,0x0004003d,0x00000021, + 0x00000136,0x00000025,0x0006000c,0x00000021,0x00000137,0x00000001,0x00000004,0x00000136, + 0x0004007c,0x00000008,0x00000138,0x00000137,0x000500c2,0x00000008,0x0000013a,0x00000138, + 0x00000139,0x000500c7,0x00000008,0x0000013c,0x0000013a,0x0000013b,0x0004007c,0x00000023, + 0x0000013d,0x0000013c,0x00050082,0x00000023,0x0000013f,0x0000013d,0x0000013e,0x0007000c, + 0x00000023,0x00000141,0x00000001,0x0000002a,0x0000013f,0x00000140,0x000200fe,0x00000141, + 0x00010038,0x00050036,0x00000008,0x0000002a,0x00000000,0x00000012,0x00030037,0x0000000d, + 0x00000028,0x00030037,0x0000000d,0x00000029,0x000200f8,0x0000002b,0x0004003b,0x0000000d, + 0x0000014f,0x00000007,0x0004003b,0x0000000d,0x00000153,0x00000007,0x0004003b,0x0000000d, + 0x00000159,0x00000007,0x0004003d,0x00000008,0x00000144,0x00000029,0x000500aa,0x0000005c, + 0x00000145,0x00000144,0x0000006a,0x000300f7,0x00000147,0x00000000,0x000400fa,0x00000145, + 0x00000146,0x00000147,0x000200f8,0x00000146,0x0004003d,0x00000008,0x00000148,0x00000028, + 0x000200fe,0x00000148,0x000200f8,0x00000147,0x0004003d,0x00000008,0x0000014a,0x00000029, + 0x000500ac,0x0000005c,0x0000014b,0x0000014a,0x00000099,0x000300f7,0x0000014d,0x00000000, + 0x000400fa,0x0000014b,0x0000014c,0x0000014d,0x000200f8,0x0000014c,0x000200fe,0x0000006a, + 0x000200f8,0x0000014d,0x0004003d,0x00000008,0x00000150,0x00000028,0x0004003d,0x00000008, + 0x00000151,0x00000029,0x000500c2,0x00000008,0x00000152,0x00000150,0x00000151,0x0003003e, + 0x0000014f,0x00000152,0x0004003d,0x00000008,0x00000154,0x00000028,0x0004003d,0x00000008, + 0x00000155,0x00000029,0x000500c4,0x00000008,0x00000156,0x0000004f,0x00000155,0x00050082, + 0x00000008,0x00000157,0x00000156,0x0000004f,0x000500c7,0x00000008,0x00000158,0x00000154, + 0x00000157,0x0003003e,0x00000153,0x00000158,0x0004003d,0x00000008,0x0000015a,0x00000029, + 0x00050082,0x00000008,0x0000015b,0x0000015a,0x0000004f,0x000500c4,0x00000008,0x0000015c, + 0x0000004f,0x0000015b,0x0003003e,0x00000159,0x0000015c,0x0004003d,0x00000008,0x0000015d, + 0x0000014f,0x0004003d,0x00000008,0x0000015e,0x00000153,0x0004003d,0x00000008,0x0000015f, + 0x00000159,0x000500ac,0x0000005c,0x00000160,0x0000015e,0x0000015f,0x000400a8,0x0000005c, + 0x00000161,0x00000160,0x000300f7,0x00000163,0x00000000,0x000400fa,0x00000161,0x00000162, + 0x00000163,0x000200f8,0x00000162,0x0004003d,0x00000008,0x00000164,0x00000153,0x0004003d, + 0x00000008,0x00000165,0x00000159,0x000500aa,0x0000005c,0x00000166,0x00000164,0x00000165, + 0x000300f7,0x00000168,0x00000000,0x000400fa,0x00000166,0x00000167,0x00000168,0x000200f8, + 0x00000167,0x0004003d,0x00000008,0x00000169,0x0000014f,0x000500c7,0x00000008,0x0000016a, + 0x00000169,0x0000004f,0x000500ab,0x0000005c,0x0000016b,0x0000016a,0x0000006a,0x000200f9, + 0x00000168,0x000200f8,0x00000168,0x000700f5,0x0000005c,0x0000016c,0x00000166,0x00000162, + 0x0000016b,0x00000167,0x000200f9,0x00000163,0x000200f8,0x00000163,0x000700f5,0x0000005c, + 0x0000016d,0x00000160,0x0000014d,0x0000016c,0x00000168,0x000600a9,0x00000008,0x0000016e, + 0x0000016d,0x0000004f,0x0000006a,0x00050080,0x00000008,0x0000016f,0x0000015d,0x0000016e, + 0x000200fe,0x0000016f,0x00010038,0x00050036,0x00000021,0x00000032,0x00000000,0x0000002f, + 0x00030037,0x0000002d,0x00000030,0x00030037,0x0000002e,0x00000031,0x000200f8,0x00000033, + 0x0004003b,0x00000072,0x00000179,0x00000007,0x0004003b,0x0000000d,0x0000017c,0x00000007, + 0x0004003b,0x0000002d,0x0000017e,0x00000007,0x0004003b,0x0000002e,0x00000188,0x00000007, + 0x0004003b,0x0000002e,0x0000018b,0x00000007,0x0004003b,0x0000000d,0x0000018f,0x00000007, + 0x0004003b,0x0000000d,0x00000196,0x00000007,0x0004003b,0x0000000d,0x0000019a,0x00000007, + 0x0004003b,0x0000000d,0x000001a0,0x00000007,0x0004003b,0x0000000d,0x000001a2,0x00000007, + 0x0004003b,0x0000002e,0x000001c6,0x00000007,0x0004003b,0x0000000d,0x000001ca,0x00000007, + 0x0004003b,0x0000000d,0x000001cd,0x00000007,0x0004003b,0x0000000d,0x000001d8,0x00000007, + 0x0004003b,0x0000000d,0x000001da,0x00000007,0x0004003b,0x0000000d,0x000001e1,0x00000007, + 0x0004003d,0x0000002c,0x00000172,0x00000030,0x000500aa,0x0000005c,0x00000174,0x00000172, + 0x00000173,0x000300f7,0x00000176,0x00000000,0x000400fa,0x00000174,0x00000175,0x00000176, + 0x000200f8,0x00000175,0x000200fe,0x00000177,0x000200f8,0x00000176,0x0004003d,0x0000002c, + 0x0000017a,0x00000030,0x000500b1,0x0000005c,0x0000017b,0x0000017a,0x00000173,0x0003003e, + 0x00000179,0x0000017b,0x0004003d,0x0000005c,0x0000017d,0x00000179,0x000300f7,0x00000180, + 0x00000000,0x000400fa,0x0000017d,0x0000017f,0x00000183,0x000200f8,0x0000017f,0x0004003d, + 0x0000002c,0x00000181,0x00000030,0x0004007e,0x0000002c,0x00000182,0x00000181,0x0003003e, + 0x0000017e,0x00000182,0x000200f9,0x00000180,0x000200f8,0x00000183,0x0004003d,0x0000002c, + 0x00000184,0x00000030,0x0003003e,0x0000017e,0x00000184,0x000200f9,0x00000180,0x000200f8, + 0x00000180,0x0004003d,0x0000002c,0x00000185,0x0000017e,0x00040072,0x00000023,0x00000186, + 0x00000185,0x0004007c,0x00000008,0x00000187,0x00000186,0x0003003e,0x0000017c,0x00000187, + 0x0004003d,0x00000008,0x00000189,0x0000017c,0x0006000c,0x00000023,0x0000018a,0x00000001, + 0x0000004b,0x00000189,0x0003003e,0x00000188,0x0000018a,0x0004003d,0x00000023,0x0000018c, + 0x00000188,0x0004003d,0x00000023,0x0000018d,0x00000031,0x00050080,0x00000023,0x0000018e, + 0x0000018c,0x0000018d,0x0003003e,0x0000018b,0x0000018e,0x0004003d,0x0000005c,0x00000190, + 0x00000179,0x000600a9,0x00000008,0x00000191,0x00000190,0x00000091,0x0000006a,0x0003003e, + 0x0000018f,0x00000191,0x0004003d,0x00000023,0x00000192,0x0000018b,0x000500af,0x0000005c, + 0x00000193,0x00000192,0x00000140,0x000300f7,0x00000195,0x00000000,0x000400fa,0x00000193, + 0x00000194,0x000001c5,0x000200f8,0x00000194,0x0004003d,0x00000023,0x00000197,0x00000188, + 0x000500ad,0x0000005c,0x00000199,0x00000197,0x00000198,0x000300f7,0x0000019c,0x00000000, + 0x000400fa,0x00000199,0x0000019b,0x000001a4,0x000200f8,0x0000019b,0x0004003d,0x00000023, + 0x0000019d,0x00000188,0x00050082,0x00000023,0x0000019e,0x0000019d,0x00000198,0x0004007c, + 0x00000008,0x0000019f,0x0000019e,0x0004003d,0x00000008,0x000001a1,0x0000017c,0x0003003e, + 0x000001a0,0x000001a1,0x0003003e,0x000001a2,0x0000019f,0x00060039,0x00000008,0x000001a3, + 0x0000002a,0x000001a0,0x000001a2,0x0003003e,0x0000019a,0x000001a3,0x000200f9,0x0000019c, + 0x000200f8,0x000001a4,0x0004003d,0x00000008,0x000001a5,0x0000017c,0x0004003d,0x00000023, + 0x000001a6,0x00000188,0x00050082,0x00000023,0x000001a7,0x00000198,0x000001a6,0x0004007c, + 0x00000008,0x000001a8,0x000001a7,0x000500c4,0x00000008,0x000001a9,0x000001a5,0x000001a8, + 0x0003003e,0x0000019a,0x000001a9,0x000200f9,0x0000019c,0x000200f8,0x0000019c,0x0004003d, + 0x00000008,0x000001aa,0x0000019a,0x0003003e,0x00000196,0x000001aa,0x0004003d,0x00000008, + 0x000001ab,0x00000196,0x000500ae,0x0000005c,0x000001ad,0x000001ab,0x000001ac,0x000300f7, + 0x000001af,0x00000000,0x000400fa,0x000001ad,0x000001ae,0x000001af,0x000200f8,0x000001ae, + 0x0003003e,0x00000196,0x000000b1,0x0004003d,0x00000023,0x000001b1,0x0000018b,0x00050080, + 0x00000023,0x000001b2,0x000001b1,0x000001b0,0x0003003e,0x0000018b,0x000001b2,0x000200f9, + 0x000001af,0x000200f8,0x000001af,0x0004003d,0x00000023,0x000001b3,0x0000018b,0x000500af, + 0x0000005c,0x000001b5,0x000001b3,0x000001b4,0x000300f7,0x000001b7,0x00000000,0x000400fa, + 0x000001b5,0x000001b6,0x000001ba,0x000200f8,0x000001b6,0x0004003d,0x00000008,0x000001b8, + 0x0000018f,0x000500c5,0x00000008,0x000001b9,0x000001b8,0x00000075,0x0003003e,0x0000018f, + 0x000001b9,0x000200f9,0x000001b7,0x000200f8,0x000001ba,0x0004003d,0x00000023,0x000001bb, + 0x0000018b,0x00050080,0x00000023,0x000001bd,0x000001bb,0x000001bc,0x0004007c,0x00000008, + 0x000001be,0x000001bd,0x000500c4,0x00000008,0x000001bf,0x000001be,0x00000097,0x0004003d, + 0x00000008,0x000001c0,0x00000196,0x00050082,0x00000008,0x000001c1,0x000001c0,0x000000b1, + 0x000500c5,0x00000008,0x000001c2,0x000001bf,0x000001c1,0x0004003d,0x00000008,0x000001c3, + 0x0000018f,0x000500c5,0x00000008,0x000001c4,0x000001c3,0x000001c2,0x0003003e,0x0000018f, + 0x000001c4,0x000200f9,0x000001b7,0x000200f8,0x000001b7,0x000200f9,0x00000195,0x000200f8, + 0x000001c5,0x0004003d,0x00000023,0x000001c7,0x00000031,0x00050080,0x00000023,0x000001c9, + 0x000001c7,0x000001c8,0x0003003e,0x000001c6,0x000001c9,0x0004003d,0x00000023,0x000001cb, + 0x000001c6,0x000500af,0x0000005c,0x000001cc,0x000001cb,0x00000107,0x000300f7,0x000001cf, + 0x00000000,0x000400fa,0x000001cc,0x000001ce,0x000001d4,0x000200f8,0x000001ce,0x0004003d, + 0x00000008,0x000001d0,0x0000017c,0x0004003d,0x00000023,0x000001d1,0x000001c6,0x0004007c, + 0x00000008,0x000001d2,0x000001d1,0x000500c4,0x00000008,0x000001d3,0x000001d0,0x000001d2, + 0x0003003e,0x000001cd,0x000001d3,0x000200f9,0x000001cf,0x000200f8,0x000001d4,0x0004003d, + 0x00000023,0x000001d5,0x000001c6,0x0004007e,0x00000023,0x000001d6,0x000001d5,0x0004007c, + 0x00000008,0x000001d7,0x000001d6,0x0004003d,0x00000008,0x000001d9,0x0000017c,0x0003003e, + 0x000001d8,0x000001d9,0x0003003e,0x000001da,0x000001d7,0x00060039,0x00000008,0x000001db, + 0x0000002a,0x000001d8,0x000001da,0x0003003e,0x000001cd,0x000001db,0x000200f9,0x000001cf, + 0x000200f8,0x000001cf,0x0004003d,0x00000008,0x000001dc,0x000001cd,0x0003003e,0x000001ca, + 0x000001dc,0x0004003d,0x00000008,0x000001dd,0x000001ca,0x0007000c,0x00000008,0x000001de, + 0x00000001,0x00000026,0x000001dd,0x000000b1,0x0004003d,0x00000008,0x000001df,0x0000018f, + 0x000500c5,0x00000008,0x000001e0,0x000001df,0x000001de,0x0003003e,0x0000018f,0x000001e0, + 0x000200f9,0x00000195,0x000200f8,0x00000195,0x0004003d,0x00000008,0x000001e2,0x0000018f, + 0x0003003e,0x000001e1,0x000001e2,0x00050039,0x00000006,0x000001e3,0x00000010,0x000001e1, + 0x00040073,0x00000021,0x000001e4,0x000001e3,0x000200fe,0x000001e4,0x00010038,0x00050036, + 0x00000021,0x0000003b,0x00000000,0x00000037,0x00030037,0x00000022,0x00000038,0x00030037, + 0x00000036,0x00000039,0x00030037,0x00000036,0x0000003a,0x000200f8,0x0000003c,0x0004003b, + 0x0000002e,0x000001e7,0x00000007,0x0004003b,0x00000022,0x000001ed,0x00000007,0x0004003b, + 0x0000000d,0x000001f0,0x00000007,0x0004003b,0x00000022,0x00000207,0x00000007,0x0004003b, + 0x00000022,0x0000020c,0x00000007,0x0004003b,0x0000002d,0x00000214,0x00000007,0x0004003b, + 0x0000002e,0x00000219,0x00000007,0x0004003b,0x00000022,0x0000021a,0x00000007,0x0004003b, + 0x00000022,0x0000021d,0x00000007,0x0004003b,0x0000000d,0x0000022d,0x00000007,0x0004003b, + 0x0000002e,0x00000242,0x00000007,0x0004003b,0x00000022,0x00000244,0x00000007,0x0004003b, + 0x0000002e,0x00000248,0x00000007,0x0004003b,0x00000022,0x0000024a,0x00000007,0x0004003b, + 0x00000022,0x0000024e,0x00000007,0x0004003b,0x0000002d,0x0000026c,0x00000007,0x0004003b, + 0x0000002e,0x0000026e,0x00000007,0x0003003e,0x000001e7,0x000001e8,0x0004003d,0x00000021, + 0x000001e9,0x00000038,0x000500b7,0x0000005c,0x000001ea,0x000001e9,0x00000177,0x000300f7, + 0x000001ec,0x00000000,0x000400fa,0x000001ea,0x000001eb,0x000001ec,0x000200f8,0x000001eb, + 0x0004003d,0x00000021,0x000001ee,0x00000038,0x0003003e,0x000001ed,0x000001ee,0x00050039, + 0x00000023,0x000001ef,0x00000026,0x000001ed,0x0003003e,0x000001e7,0x000001ef,0x000200f9, + 0x000001ec,0x000200f8,0x000001ec,0x0003003e,0x000001f0,0x0000006a,0x000200f9,0x000001f1, + 0x000200f8,0x000001f1,0x000400f6,0x000001f3,0x000001f4,0x00000000,0x000200f9,0x000001f5, + 0x000200f8,0x000001f5,0x0004003d,0x00000008,0x000001f6,0x000001f0,0x000500b0,0x0000005c, + 0x000001f7,0x000001f6,0x00000034,0x000400fa,0x000001f7,0x000001f2,0x000001f3,0x000200f8, + 0x000001f2,0x0004003d,0x00000008,0x000001f8,0x000001f0,0x00050041,0x00000022,0x000001f9, + 0x00000039,0x000001f8,0x0004003d,0x00000021,0x000001fa,0x000001f9,0x000500b7,0x0000005c, + 0x000001fb,0x000001fa,0x00000177,0x000300f7,0x000001fd,0x00000000,0x000400fa,0x000001fb, + 0x000001fc,0x000001fd,0x000200f8,0x000001fc,0x0004003d,0x00000008,0x000001fe,0x000001f0, + 0x00050041,0x00000022,0x000001ff,0x0000003a,0x000001fe,0x0004003d,0x00000021,0x00000200, + 0x000001ff,0x000500b7,0x0000005c,0x00000201,0x00000200,0x00000177,0x000200f9,0x000001fd, + 0x000200f8,0x000001fd,0x000700f5,0x0000005c,0x00000202,0x000001fb,0x000001f2,0x00000201, + 0x000001fc,0x000300f7,0x00000204,0x00000000,0x000400fa,0x00000202,0x00000203,0x00000204, + 0x000200f8,0x00000203,0x0004003d,0x00000023,0x00000205,0x000001e7,0x0004003d,0x00000008, + 0x00000206,0x000001f0,0x00050041,0x00000022,0x00000208,0x00000039,0x00000206,0x0004003d, + 0x00000021,0x00000209,0x00000208,0x0003003e,0x00000207,0x00000209,0x00050039,0x00000023, + 0x0000020a,0x00000026,0x00000207,0x0004003d,0x00000008,0x0000020b,0x000001f0,0x00050041, + 0x00000022,0x0000020d,0x0000003a,0x0000020b,0x0004003d,0x00000021,0x0000020e,0x0000020d, + 0x0003003e,0x0000020c,0x0000020e,0x00050039,0x00000023,0x0000020f,0x00000026,0x0000020c, + 0x00050080,0x00000023,0x00000210,0x0000020a,0x0000020f,0x0007000c,0x00000023,0x00000211, + 0x00000001,0x0000002a,0x00000205,0x00000210,0x0003003e,0x000001e7,0x00000211,0x000200f9, + 0x00000204,0x000200f8,0x00000204,0x000200f9,0x000001f4,0x000200f8,0x000001f4,0x0004003d, + 0x00000008,0x00000212,0x000001f0,0x00050080,0x00000008,0x00000213,0x00000212,0x000001b0, + 0x0003003e,0x000001f0,0x00000213,0x000200f9,0x000001f1,0x000200f8,0x000001f3,0x0003003e, + 0x00000214,0x00000173,0x0004003d,0x00000021,0x00000215,0x00000038,0x000500b7,0x0000005c, + 0x00000216,0x00000215,0x00000177,0x000300f7,0x00000218,0x00000000,0x000400fa,0x00000216, + 0x00000217,0x00000218,0x000200f8,0x00000217,0x0004003d,0x00000021,0x0000021b,0x00000038, + 0x0003003e,0x0000021a,0x0000021b,0x00050039,0x00000023,0x0000021c,0x00000026,0x0000021a, + 0x0003003e,0x00000219,0x0000021c,0x0004003d,0x00000021,0x0000021e,0x00000038,0x0004003d, + 0x00000023,0x0000021f,0x00000219,0x0004007e,0x00000023,0x00000220,0x0000021f,0x0007000c, + 0x00000021,0x00000221,0x00000001,0x00000035,0x0000021e,0x00000220,0x0004003d,0x00000023, + 0x00000222,0x00000219,0x0004003d,0x00000023,0x00000223,0x000001e7,0x00050082,0x00000023, + 0x00000224,0x00000222,0x00000223,0x00050080,0x00000023,0x00000226,0x00000224,0x00000225, + 0x0007000c,0x00000021,0x00000227,0x00000001,0x00000035,0x00000221,0x00000226,0x0003003e, + 0x0000021d,0x00000227,0x0004003d,0x00000021,0x00000228,0x0000021d,0x0006000c,0x00000021, + 0x00000229,0x00000001,0x00000003,0x00000228,0x0004006e,0x0000002c,0x0000022a,0x00000229, + 0x0004003d,0x0000002c,0x0000022b,0x00000214,0x00050080,0x0000002c,0x0000022c,0x0000022b, + 0x0000022a,0x0003003e,0x00000214,0x0000022c,0x000200f9,0x00000218,0x000200f8,0x00000218, + 0x0003003e,0x0000022d,0x0000006a,0x000200f9,0x0000022e,0x000200f8,0x0000022e,0x000400f6, + 0x00000230,0x00000231,0x00000000,0x000200f9,0x00000232,0x000200f8,0x00000232,0x0004003d, + 0x00000008,0x00000233,0x0000022d,0x000500b0,0x0000005c,0x00000234,0x00000233,0x00000034, + 0x000400fa,0x00000234,0x0000022f,0x00000230,0x000200f8,0x0000022f,0x0004003d,0x00000008, + 0x00000235,0x0000022d,0x00050041,0x00000022,0x00000236,0x00000039,0x00000235,0x0004003d, + 0x00000021,0x00000237,0x00000236,0x000500b7,0x0000005c,0x00000238,0x00000237,0x00000177, + 0x000300f7,0x0000023a,0x00000000,0x000400fa,0x00000238,0x00000239,0x0000023a,0x000200f8, + 0x00000239,0x0004003d,0x00000008,0x0000023b,0x0000022d,0x00050041,0x00000022,0x0000023c, + 0x0000003a,0x0000023b,0x0004003d,0x00000021,0x0000023d,0x0000023c,0x000500b7,0x0000005c, + 0x0000023e,0x0000023d,0x00000177,0x000200f9,0x0000023a,0x000200f8,0x0000023a,0x000700f5, + 0x0000005c,0x0000023f,0x00000238,0x0000022f,0x0000023e,0x00000239,0x000300f7,0x00000241, + 0x00000000,0x000400fa,0x0000023f,0x00000240,0x00000241,0x000200f8,0x00000240,0x0004003d, + 0x00000008,0x00000243,0x0000022d,0x00050041,0x00000022,0x00000245,0x00000039,0x00000243, + 0x0004003d,0x00000021,0x00000246,0x00000245,0x0003003e,0x00000244,0x00000246,0x00050039, + 0x00000023,0x00000247,0x00000026,0x00000244,0x0003003e,0x00000242,0x00000247,0x0004003d, + 0x00000008,0x00000249,0x0000022d,0x00050041,0x00000022,0x0000024b,0x0000003a,0x00000249, + 0x0004003d,0x00000021,0x0000024c,0x0000024b,0x0003003e,0x0000024a,0x0000024c,0x00050039, + 0x00000023,0x0000024d,0x00000026,0x0000024a,0x0003003e,0x00000248,0x0000024d,0x0004003d, + 0x00000008,0x0000024f,0x0000022d,0x00050041,0x00000022,0x00000250,0x00000039,0x0000024f, + 0x0004003d,0x00000021,0x00000251,0x00000250,0x0004003d,0x00000023,0x00000252,0x00000242, + 0x0004007e,0x00000023,0x00000253,0x00000252,0x0007000c,0x00000021,0x00000254,0x00000001, + 0x00000035,0x00000251,0x00000253,0x0004003d,0x00000008,0x00000255,0x0000022d,0x00050041, + 0x00000022,0x00000256,0x0000003a,0x00000255,0x0004003d,0x00000021,0x00000257,0x00000256, + 0x0004003d,0x00000023,0x00000258,0x00000248,0x0004007e,0x00000023,0x00000259,0x00000258, + 0x0007000c,0x00000021,0x0000025a,0x00000001,0x00000035,0x00000257,0x00000259,0x00050085, + 0x00000021,0x0000025b,0x00000254,0x0000025a,0x0003003e,0x0000024e,0x0000025b,0x0004003d, + 0x00000021,0x0000025c,0x0000024e,0x0004003d,0x00000023,0x0000025d,0x00000242,0x0004003d, + 0x00000023,0x0000025e,0x00000248,0x00050080,0x00000023,0x0000025f,0x0000025d,0x0000025e, + 0x0004003d,0x00000023,0x00000260,0x000001e7,0x00050082,0x00000023,0x00000261,0x0000025f, + 0x00000260,0x00050080,0x00000023,0x00000262,0x00000261,0x00000225,0x0007000c,0x00000021, + 0x00000263,0x00000001,0x00000035,0x0000025c,0x00000262,0x0006000c,0x00000021,0x00000264, + 0x00000001,0x00000003,0x00000263,0x0004006e,0x0000002c,0x00000265,0x00000264,0x0004003d, + 0x0000002c,0x00000266,0x00000214,0x00050080,0x0000002c,0x00000267,0x00000266,0x00000265, + 0x0003003e,0x00000214,0x00000267,0x000200f9,0x00000241,0x000200f8,0x00000241,0x000200f9, + 0x00000231,0x000200f8,0x00000231,0x0004003d,0x00000008,0x00000268,0x0000022d,0x00050080, + 0x00000008,0x00000269,0x00000268,0x000001b0,0x0003003e,0x0000022d,0x00000269,0x000200f9, + 0x0000022e,0x000200f8,0x00000230,0x0004003d,0x00000023,0x0000026a,0x000001e7,0x00050082, + 0x00000023,0x0000026b,0x0000026a,0x00000225,0x0004003d,0x0000002c,0x0000026d,0x00000214, + 0x0003003e,0x0000026c,0x0000026d,0x0003003e,0x0000026e,0x0000026b,0x00060039,0x00000021, + 0x0000026f,0x00000032,0x0000026c,0x0000026e,0x000200fe,0x0000026f,0x00010038, +}; +inline constexpr uint32_t k_f16_k16_f32__window_attend[] = { + 0x07230203,0x00010600,0x0008000b,0x00000545,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x0000003d,0x00020011,0x00001151,0x00020011, + 0x00001160,0x00020011,0x000014e1,0x00020011,0x00001786,0x0008000a,0x5f565053,0x5f52484b, + 0x706f6f63,0x74617265,0x5f657669,0x7274616d,0x00007869,0x0006000b,0x00000001,0x4c534c47, + 0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000003,0x0012000f,0x00000005, + 0x00000004,0x6e69616d,0x00000000,0x00000246,0x000002d9,0x000002de,0x000002eb,0x0000034d, + 0x00000362,0x000003ac,0x000003b2,0x000003bf,0x000003d6,0x00000437,0x000004e1,0x00000537, + 0x00060010,0x00000004,0x00000011,0x00000080,0x00000001,0x00000001,0x00030003,0x00000002, + 0x000001cc,0x00090004,0x455f4c47,0x635f5458,0x72746e6f,0x665f6c6f,0x5f776f6c,0x72747461, + 0x74756269,0x00007365,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x36315f72,0x5f746962, + 0x726f7473,0x00656761,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x62385f72,0x735f7469, + 0x61726f74,0x00006567,0x000b0004,0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70, + 0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f, + 0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004, + 0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669,0x00080004, + 0x4b5f4c47,0x635f5248,0x65706f6f,0x69746172,0x6d5f6576,0x69727461,0x00000078,0x00090004, + 0x4b5f4c47,0x6d5f5248,0x726f6d65,0x63735f79,0x5f65706f,0x616d6573,0x6369746e,0x00000073, + 0x00090004,0x4b5f4c47,0x735f5248,0x65646168,0x75735f72,0x6f726762,0x625f7075,0x63697361, + 0x00000000,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000a,0x6e756f72, + 0x36314664,0x3b316628,0x00000000,0x00040005,0x00000009,0x756c6176,0x00000065,0x00060005, + 0x00000011,0x42363166,0x28737469,0x31363166,0x0000003b,0x00040005,0x00000010,0x756c6176, + 0x00000065,0x00060005,0x00000016,0x46363166,0x426d6f72,0x28737469,0x003b3175,0x00040005, + 0x00000015,0x73746962,0x00000000,0x00060005,0x0000001b,0x66696873,0x656e5274,0x3b317528, + 0x003b3175,0x00040005,0x00000019,0x756c6176,0x00000065,0x00040005,0x0000001a,0x66696873, + 0x00000074,0x00080005,0x0000001f,0x336d3465,0x65646f43,0x6d6f7246,0x42363146,0x28737469, + 0x003b3175,0x00050005,0x0000001e,0x666c6168,0x73746942,0x00000000,0x00060005,0x00000023, + 0x336d3465,0x33466f54,0x31752832,0x0000003b,0x00040005,0x00000022,0x73746962,0x00000000, + 0x00060005,0x00000026,0x7246706f,0x6f436d6f,0x75286564,0x00003b31,0x00040005,0x00000025, + 0x65646f63,0x00000000,0x00080005,0x0000002a,0x666c6168,0x7064694d,0x746e696f,0x766f6241, + 0x31662865,0x003b3136,0x00030005,0x00000029,0x00000068,0x00080005,0x0000002d,0x666c6168, + 0x7064694d,0x746e696f,0x6f6c6542,0x31662877,0x003b3136,0x00030005,0x0000002c,0x00000068, + 0x00060005,0x00000031,0x666c6168,0x766f6241,0x31662865,0x003b3136,0x00030005,0x00000030, + 0x00000068,0x00060005,0x00000034,0x666c6168,0x6f6c6542,0x31662877,0x003b3136,0x00030005, + 0x00000033,0x00000068,0x00080005,0x00000037,0x69636572,0x636f7270,0x61486c61,0x6628666c, + 0x3b313631,0x00000000,0x00030005,0x00000036,0x00000078,0x00080005,0x0000003a,0x65766e69, + 0x54657372,0x64656c69,0x656b6f54,0x3175286e,0x0000003b,0x00040005,0x00000039,0x656b6f74, + 0x0000006e,0x00060005,0x0000003d,0x57707865,0x68676965,0x31662874,0x003b3136,0x00040005, + 0x0000003c,0x726f6373,0x00000065,0x00080005,0x00000043,0x74666f73,0x5078616d,0x28726961, + 0x753b3175,0x31753b31,0x0000003b,0x00030005,0x00000040,0x00776f72,0x00040005,0x00000041, + 0x72696170,0x00000000,0x00040005,0x00000042,0x69726170,0x00007974,0x00060005,0x00000046, + 0x74666f73,0x5378616d,0x75286d75,0x00003b31,0x00030005,0x00000045,0x00776f72,0x00040005, + 0x00000048,0x73746962,0x00000000,0x00040005,0x0000004b,0x6e676973,0x00000000,0x00050005, + 0x0000004f,0x6e67616d,0x64757469,0x00000065,0x00040005,0x00000069,0x6c616373,0x00006465, + 0x00030005,0x0000007a,0x0062736c,0x00040005,0x00000080,0x6e756f72,0x00646564,0x00050005, + 0x0000009b,0x746f7571,0x746e6569,0x00000000,0x00060005,0x0000009f,0x616d6572,0x65646e69, + 0x73614d72,0x0000006b,0x00050005,0x000000a3,0x616d6572,0x65646e69,0x00000072,0x00040005, + 0x000000a7,0x666c6168,0x00796177,0x00040005,0x000000c2,0x614e7369,0x0000006e,0x00050005, + 0x000000de,0x6167656e,0x65766974,0x00000000,0x00050005,0x000000e4,0x6f707865,0x746e656e, + 0x00000000,0x00050005,0x000000ea,0x746e616d,0x61737369,0x00000000,0x00040005,0x000000f1, + 0x65646f63,0x00000000,0x00050005,0x000000f8,0x6e676973,0x63696669,0x00646e61,0x00040005, + 0x00000104,0x66696873,0x00000074,0x00040005,0x00000110,0x61726170,0x0000006d,0x00040005, + 0x00000112,0x61726170,0x0000006d,0x00050005,0x00000117,0x78453465,0x656e6f70,0x0000746e, + 0x00050005,0x0000011a,0x614d3465,0x7369746e,0x00006173,0x00040005,0x0000011c,0x61726170, + 0x0000006d,0x00040005,0x0000011e,0x61726170,0x0000006d,0x00050005,0x00000141,0x6167656e, + 0x65766974,0x00000000,0x00050005,0x00000145,0x6f707865,0x746e656e,0x00000000,0x00050005, + 0x00000149,0x746e616d,0x61737369,0x00000000,0x00040005,0x00000150,0x756c6176,0x00000065, + 0x00040005,0x00000177,0x61726170,0x0000006d,0x00040005,0x0000017d,0x73746962,0x00000000, + 0x00040005,0x0000017e,0x61726170,0x0000006d,0x00040005,0x0000018e,0x61726170,0x0000006d, + 0x00040005,0x00000198,0x61726170,0x0000006d,0x00040005,0x0000019c,0x61726170,0x0000006d, + 0x00040005,0x000001a3,0x61726170,0x0000006d,0x00040005,0x000001a7,0x61726170,0x0000006d, + 0x00040005,0x000001ab,0x61726170,0x0000006d,0x00040005,0x000001af,0x61726170,0x0000006d, + 0x00030005,0x000001b3,0x00006678,0x00030005,0x000001c5,0x00000068,0x00040005,0x000001c8, + 0x61726170,0x0000006d,0x00030005,0x000001d7,0x00000069,0x00030005,0x000001e1,0x00007075, + 0x00040005,0x000001e2,0x61726170,0x0000006d,0x00040005,0x000001eb,0x61726170,0x0000006d, + 0x00040005,0x000001ee,0x6e776f64,0x00000000,0x00040005,0x000001ef,0x61726170,0x0000006d, + 0x00040005,0x000001fb,0x61726170,0x0000006d,0x00040005,0x00000204,0x656c6974,0x00000000, + 0x00040005,0x00000208,0x68746977,0x00006e69,0x00030005,0x0000020b,0x00000078,0x00030005, + 0x00000212,0x00000079,0x00050005,0x00000220,0x69666661,0x3233656e,0x00000000,0x00040005, + 0x00000226,0x69666661,0x0000656e,0x00040005,0x00000227,0x61726170,0x0000006d,0x00040005, + 0x0000022e,0x73746962,0x00000000,0x00040005,0x0000022f,0x61726170,0x0000006d,0x00060005, + 0x00000232,0x6f707865,0x746e656e,0x426c6169,0x00737469,0x00040005,0x00000238,0x61726170, + 0x0000006d,0x00030005,0x0000023d,0x0079656b,0x00050005,0x00000242,0x636f6c62,0x3130736b, + 0x00000000,0x00040005,0x00000246,0x726f6373,0x00007365,0x00050005,0x00000257,0x636f6c62, + 0x3332736b,0x00000000,0x00050005,0x00000268,0x636f6c62,0x3534736b,0x00000000,0x00050005, + 0x0000027a,0x636f6c62,0x3736736b,0x00000000,0x00030005,0x0000028c,0x00000061,0x00030005, + 0x00000290,0x00000062,0x00030005,0x00000299,0x00003065,0x00040005,0x0000029a,0x61726170, + 0x0000006d,0x00040005,0x0000029c,0x61726170,0x0000006d,0x00040005,0x0000029d,0x61726170, + 0x0000006d,0x00040005,0x0000029f,0x61726170,0x0000006d,0x00040005,0x000002a1,0x61726170, + 0x0000006d,0x00040005,0x000002a2,0x61726170,0x0000006d,0x00030005,0x000002a5,0x00003165, + 0x00040005,0x000002a7,0x61726170,0x0000006d,0x00040005,0x000002a9,0x61726170,0x0000006d, + 0x00040005,0x000002aa,0x61726170,0x0000006d,0x00040005,0x000002ad,0x6e657665,0x00000000, + 0x00040005,0x000002af,0x61726170,0x0000006d,0x00040005,0x000002b1,0x61726170,0x0000006d, + 0x00040005,0x000002b2,0x61726170,0x0000006d,0x00030005,0x000002b5,0x0000306f,0x00040005, + 0x000002b6,0x61726170,0x0000006d,0x00040005,0x000002b8,0x61726170,0x0000006d,0x00040005, + 0x000002b9,0x61726170,0x0000006d,0x00040005,0x000002bb,0x61726170,0x0000006d,0x00040005, + 0x000002bd,0x61726170,0x0000006d,0x00040005,0x000002be,0x61726170,0x0000006d,0x00030005, + 0x000002c1,0x0000316f,0x00040005,0x000002c3,0x61726170,0x0000006d,0x00040005,0x000002c5, + 0x61726170,0x0000006d,0x00040005,0x000002c6,0x61726170,0x0000006d,0x00030005,0x000002c9, + 0x0064646f,0x00040005,0x000002cb,0x61726170,0x0000006d,0x00040005,0x000002cd,0x61726170, + 0x0000006d,0x00040005,0x000002ce,0x61726170,0x0000006d,0x00040005,0x000002d6,0x65726874, + 0x00006461,0x00080005,0x000002d9,0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163,0x44496e6f, + 0x00000000,0x00040005,0x000002dd,0x64616568,0x00000000,0x00060005,0x000002de,0x575f6c67, + 0x476b726f,0x70756f72,0x00004449,0x00040005,0x000002e1,0x646e6977,0x0000776f,0x00040005, + 0x000002e9,0x68737550,0x00000000,0x00050006,0x000002e9,0x00000000,0x74646977,0x00000068, + 0x00050006,0x000002e9,0x00000001,0x67696568,0x00007468,0x00060006,0x000002e9,0x00000002, + 0x6e616863,0x736c656e,0x00000000,0x00050006,0x000002e9,0x00000003,0x64616568,0x00000073, + 0x00050006,0x000002e9,0x00000004,0x66696873,0x00005874,0x00050006,0x000002e9,0x00000005, + 0x66696873,0x00005974,0x00060006,0x000002e9,0x00000006,0x646e6977,0x5873776f,0x00000000, + 0x00060006,0x000002e9,0x00000007,0x646e6977,0x6f43776f,0x00746e75,0x00030005,0x000002eb, + 0x00006370,0x00040005,0x000002f4,0x646e6977,0x0058776f,0x00040005,0x00000301,0x646e6977, + 0x0059776f,0x00040005,0x0000030d,0x69727473,0x00336564,0x00050005,0x00000311,0x64616568, + 0x65736142,0x00000000,0x00030005,0x00000315,0x00000069,0x00040005,0x0000031f,0x656b6f74, + 0x0000006e,0x00050005,0x00000322,0x706d6f63,0x6e656e6f,0x00000074,0x00030005,0x00000325, + 0x00007871,0x00030005,0x0000032b,0x00007971,0x00030005,0x00000331,0x00000071,0x00050005, + 0x0000034b,0x6d726f4e,0x7a696c61,0x00006465,0x00040006,0x0000034b,0x00000000,0x00766b71, + 0x00030005,0x0000034d,0x00000000,0x00030005,0x00000362,0x00007371,0x00040005,0x00000364, + 0x61726170,0x0000006d,0x00050005,0x00000368,0x4c79656b,0x6c61636f,0x00000000,0x00040005, + 0x00000369,0x61726170,0x0000006d,0x00030005,0x0000036c,0x0000786b,0x00030005,0x00000372, + 0x0000796b,0x00030005,0x00000378,0x0000006b,0x00030005,0x00000379,0x00000076,0x00040005, + 0x00000391,0x4279656b,0x00657361,0x00030005,0x000003ac,0x0000736b,0x00040005,0x000003ae, + 0x61726170,0x0000006d,0x00030005,0x000003b2,0x00007376,0x00040005,0x000003b4,0x61726170, + 0x0000006d,0x00050005,0x000003bb,0x6f697270,0x73614272,0x00000065,0x00030005,0x000003be, + 0x00000074,0x00060005,0x000003bf,0x535f6c67,0x72676275,0x4970756f,0x00000044,0x00030005, + 0x000003c8,0x00003071,0x00030005,0x000003cc,0x0000306b,0x00030005,0x000003d2,0x00005f68, + 0x00040005,0x000003d4,0x6f697250,0x00000072,0x00050006,0x000003d4,0x00000000,0x6f697270, + 0x00000072,0x00030005,0x000003d6,0x00000000,0x00030005,0x000003e8,0x00000063,0x00030005, + 0x000003eb,0x00005f73,0x00030005,0x000003f5,0x00005f61,0x00030005,0x00000404,0x00005f62, + 0x00030005,0x00000417,0x00005f72,0x00040005,0x00000423,0x61726170,0x0000006d,0x00030005, + 0x0000042a,0x00005f68,0x00060005,0x00000437,0x4e5f6c67,0x75536d75,0x6f726762,0x00737075, + 0x00030005,0x0000043b,0x00000069,0x00040005,0x00000446,0x61726170,0x0000006d,0x00030005, + 0x00000451,0x00776f72,0x00040005,0x00000453,0x61746f74,0x0000006c,0x00040005,0x00000454, + 0x61726170,0x0000006d,0x00050005,0x00000457,0x69636572,0x636f7270,0x00006c61,0x00040005, + 0x00000458,0x61726170,0x0000006d,0x00030005,0x0000045b,0x0079656b,0x00050005,0x00000463, + 0x6d726f6e,0x7a696c61,0x00006465,0x00040005,0x0000046c,0x65646f63,0x00000000,0x00040005, + 0x0000046d,0x61726170,0x0000006d,0x00040005,0x00000470,0x61726170,0x0000006d,0x00040005, + 0x00000476,0x61726170,0x0000006d,0x00030005,0x0000047c,0x00000074,0x00030005,0x00000485, + 0x00003071,0x00030005,0x00000489,0x00003063,0x00030005,0x0000048d,0x00000063,0x00030005, + 0x0000048f,0x0000626b,0x00030005,0x00000497,0x00005f73,0x00030005,0x0000049f,0x00005f61, + 0x00030005,0x000004b0,0x00005f62,0x00030005,0x000004c8,0x00005f72,0x00040005,0x000004d4, + 0x61726170,0x0000006d,0x00030005,0x000004dd,0x00005f68,0x00040005,0x000004e1,0x7074756f, + 0x00737475,0x00030005,0x000004ee,0x00000069,0x00040005,0x000004f7,0x656b6f74,0x0000006e, + 0x00050005,0x000004fa,0x706d6f63,0x6e656e6f,0x00000074,0x00030005,0x000004fd,0x00007871, + 0x00030005,0x00000503,0x00007971,0x00040005,0x00000523,0x65646e69,0x00000078,0x00050005, + 0x00000535,0x65747441,0x6465646e,0x00000000,0x00060006,0x00000535,0x00000000,0x65747461, + 0x6465646e,0x00000000,0x00030005,0x00000537,0x00000000,0x00040005,0x0000053a,0x61726170, + 0x0000006d,0x00040005,0x0000053e,0x61726170,0x0000006d,0x00030047,0x000001c7,0x0000002a, + 0x00030047,0x000001e6,0x0000002a,0x00030047,0x000001f3,0x0000002a,0x00030047,0x00000256, + 0x0000002a,0x00030047,0x00000267,0x0000002a,0x00030047,0x00000279,0x0000002a,0x00030047, + 0x0000028b,0x0000002a,0x00030047,0x0000028f,0x0000002a,0x00030047,0x00000293,0x0000002a, + 0x00030047,0x000002a4,0x0000002a,0x00030047,0x000002ac,0x0000002a,0x00030047,0x000002b4, + 0x0000002a,0x00030047,0x000002c0,0x0000002a,0x00030047,0x000002c8,0x0000002a,0x00030047, + 0x000002d0,0x0000002a,0x00040047,0x000002d9,0x0000000b,0x0000001b,0x00040047,0x000002de, + 0x0000000b,0x0000001a,0x00030047,0x000002e9,0x00000002,0x00050048,0x000002e9,0x00000000, + 0x00000023,0x00000000,0x00050048,0x000002e9,0x00000001,0x00000023,0x00000004,0x00050048, + 0x000002e9,0x00000002,0x00000023,0x00000008,0x00050048,0x000002e9,0x00000003,0x00000023, + 0x0000000c,0x00050048,0x000002e9,0x00000004,0x00000023,0x00000010,0x00050048,0x000002e9, + 0x00000005,0x00000023,0x00000014,0x00050048,0x000002e9,0x00000006,0x00000023,0x00000018, + 0x00050048,0x000002e9,0x00000007,0x00000023,0x0000001c,0x00040047,0x0000034a,0x00000006, + 0x00000001,0x00030047,0x0000034b,0x00000002,0x00040048,0x0000034b,0x00000000,0x00000018, + 0x00050048,0x0000034b,0x00000000,0x00000023,0x00000000,0x00030047,0x0000034d,0x00000018, + 0x00040047,0x0000034d,0x00000021,0x00000000,0x00040047,0x0000034d,0x00000022,0x00000000, + 0x00040047,0x000003bf,0x0000000b,0x00000028,0x00040047,0x000003d3,0x00000006,0x00000002, + 0x00030047,0x000003d4,0x00000002,0x00040048,0x000003d4,0x00000000,0x00000018,0x00050048, + 0x000003d4,0x00000000,0x00000023,0x00000000,0x00030047,0x000003d6,0x00000018,0x00040047, + 0x000003d6,0x00000021,0x00000001,0x00040047,0x000003d6,0x00000022,0x00000000,0x00040047, + 0x00000437,0x0000000b,0x00000026,0x00030047,0x0000046b,0x0000002a,0x00040047,0x00000534, + 0x00000006,0x00000001,0x00030047,0x00000535,0x00000002,0x00040048,0x00000535,0x00000000, + 0x00000019,0x00050048,0x00000535,0x00000000,0x00000023,0x00000000,0x00030047,0x00000537, + 0x00000019,0x00040047,0x00000537,0x00000021,0x00000005,0x00040047,0x00000537,0x00000022, + 0x00000000,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006, + 0x00000020,0x00040020,0x00000007,0x00000007,0x00000006,0x00040021,0x00000008,0x00000006, + 0x00000007,0x00030016,0x0000000c,0x00000010,0x00040020,0x0000000d,0x00000007,0x0000000c, + 0x00040015,0x0000000e,0x00000020,0x00000000,0x00040021,0x0000000f,0x0000000e,0x0000000d, + 0x00040020,0x00000013,0x00000007,0x0000000e,0x00040021,0x00000014,0x0000000c,0x00000013, + 0x00050021,0x00000018,0x0000000e,0x00000013,0x00000013,0x00040021,0x0000001d,0x0000000e, + 0x00000013,0x00040021,0x00000021,0x00000006,0x00000013,0x00040021,0x00000028,0x00000006, + 0x0000000d,0x00040021,0x0000002f,0x0000000c,0x0000000d,0x00060021,0x0000003f,0x0000000c, + 0x00000013,0x00000013,0x00000013,0x0004002b,0x0000000e,0x0000004d,0x80000000,0x0004002b, + 0x0000000e,0x00000051,0x7fffffff,0x0004002b,0x0000000e,0x00000054,0x7f800000,0x00020014, + 0x00000055,0x0004002b,0x0000000e,0x0000005c,0x477ff000,0x0004002b,0x0000000e,0x00000065, + 0x38800000,0x0004002b,0x00000006,0x0000006c,0x4b800000,0x0004002b,0x00000006,0x00000073, + 0x33800000,0x0004002b,0x0000000e,0x0000007c,0x0000000d,0x0004002b,0x0000000e,0x0000007e, + 0x00000001,0x0004002b,0x0000000e,0x00000082,0x00000fff,0x0004002b,0x0000000e,0x00000086, + 0xffffe000,0x00040015,0x0000008f,0x00000010,0x00000000,0x0004002b,0x0000000e,0x00000095, + 0x0000ffff,0x0004002b,0x0000000e,0x000000b9,0x00000000,0x00040020,0x000000c1,0x00000007, + 0x00000055,0x0004002b,0x0000000e,0x000000c4,0x00007c00,0x0004002b,0x0000000e,0x000000ca, + 0x000003ff,0x0004002b,0x0000000e,0x000000d3,0x00007fff,0x0004002b,0x0000000e,0x000000d9, + 0x00000008,0x0004002b,0x0000000e,0x000000db,0x00000080,0x0004002b,0x0000000e,0x000000e0, + 0x00008000,0x0004002b,0x0000000e,0x000000e6,0x0000000a,0x0004002b,0x0000000e,0x000000e8, + 0x0000001f,0x0004002b,0x0000000e,0x000000f2,0x0000007e,0x0004002b,0x0000000e,0x00000100, + 0x00000400,0x0004002b,0x0000000e,0x0000010a,0x0000000f,0x0004002b,0x0000000e,0x0000010c, + 0x00000010,0x0004002b,0x0000000e,0x0000011b,0x00000007,0x0004002b,0x0000000e,0x0000012e, + 0x00000006,0x0004002b,0x0000000e,0x00000137,0x00000003,0x0004002b,0x00000006,0x00000153, + 0x3b000000,0x0004002b,0x00000006,0x0000015d,0x00000000,0x0004002b,0x00000006,0x0000015f, + 0x3f800000,0x0004002b,0x00000006,0x00000162,0x3e000000,0x0004002b,0x0000000e,0x00000166, + 0x00000078,0x0004002b,0x0000000e,0x00000168,0x00000017,0x0004002b,0x0000000e,0x00000182, + 0x00007bff,0x0004002b,0x00000006,0x00000187,0x477ff000,0x0004002b,0x00000006,0x00000189, + 0x3f000000,0x0004002b,0x0000000c,0x000001ce,0x00000000,0x00040015,0x000001d5,0x00000020, + 0x00000001,0x00040020,0x000001d6,0x00000007,0x000001d5,0x0004002b,0x000001d5,0x000001d8, + 0x00000000,0x0004002b,0x000001d5,0x000001df,0x00000002,0x0004002b,0x000001d5,0x000001ff, + 0x00000001,0x0004002b,0x0000000e,0x00000206,0x00000004,0x0004002b,0x0000000e,0x00000217, + 0x00000002,0x0004002b,0x00000006,0x00000223,0x3d380000,0x0004002b,0x00000006,0x00000224, + 0x3fa68000,0x0004002b,0x0000000c,0x0000022b,0x00003c20,0x0004002b,0x0000000c,0x0000022c, + 0x00003e47,0x0004002b,0x0000000e,0x00000234,0x00000005,0x0004002b,0x0000000e,0x00000243, + 0x00001000,0x0004001c,0x00000244,0x0000000c,0x00000243,0x00040020,0x00000245,0x00000004, + 0x00000244,0x0004003b,0x00000245,0x00000246,0x00000004,0x0004002b,0x0000000e,0x00000248, + 0x00000040,0x00040020,0x0000024c,0x00000004,0x0000000c,0x0004002b,0x0000000e,0x00000263, + 0x00000018,0x0004002b,0x0000000e,0x0000026d,0x00000020,0x0004002b,0x0000000e,0x00000275, + 0x00000028,0x0004002b,0x0000000e,0x0000027f,0x00000030,0x0004002b,0x0000000e,0x00000287, + 0x00000038,0x00040017,0x000002d7,0x0000000e,0x00000003,0x00040020,0x000002d8,0x00000001, + 0x000002d7,0x0004003b,0x000002d8,0x000002d9,0x00000001,0x00040020,0x000002da,0x00000001, + 0x0000000e,0x0004003b,0x000002d8,0x000002de,0x00000001,0x000a001e,0x000002e9,0x0000000e, + 0x0000000e,0x0000000e,0x0000000e,0x0000000e,0x0000000e,0x0000000e,0x0000000e,0x00040020, + 0x000002ea,0x00000009,0x000002e9,0x0004003b,0x000002ea,0x000002eb,0x00000009,0x0004002b, + 0x000001d5,0x000002ec,0x00000007,0x00040020,0x000002ed,0x00000009,0x0000000e,0x0004002b, + 0x000001d5,0x000002f6,0x00000006,0x0004002b,0x000001d5,0x000002fc,0x00000004,0x0004002b, + 0x000001d5,0x00000308,0x00000005,0x0004002b,0x0000000e,0x00000313,0x00000060,0x0004002b, + 0x0000000e,0x0000031d,0x00000800,0x00040015,0x00000349,0x00000008,0x00000000,0x0003001d, + 0x0000034a,0x00000349,0x0003001e,0x0000034b,0x0000034a,0x00040020,0x0000034c,0x0000000c, + 0x0000034b,0x0004003b,0x0000034c,0x0000034d,0x0000000c,0x00040020,0x0000035c,0x0000000c, + 0x00000349,0x0004001c,0x00000360,0x0000000c,0x0000031d,0x00040020,0x00000361,0x00000004, + 0x00000360,0x0004003b,0x00000361,0x00000362,0x00000004,0x0004003b,0x00000361,0x000003ac, + 0x00000004,0x0004003b,0x00000361,0x000003b2,0x00000004,0x0004002b,0x0000000e,0x000003ba, + 0x00000108,0x0004003b,0x000002da,0x000003bf,0x00000001,0x00071168,0x000003d0,0x0000000c, + 0x00000137,0x0000010c,0x0000010c,0x00000217,0x00040020,0x000003d1,0x00000007,0x000003d0, + 0x0003001d,0x000003d3,0x0000000c,0x0003001e,0x000003d4,0x000003d3,0x00040020,0x000003d5, + 0x0000000c,0x000003d4,0x0004003b,0x000003d5,0x000003d6,0x0000000c,0x00040020,0x000003dd, + 0x0000000c,0x0000000c,0x00071168,0x000003e6,0x00000006,0x00000137,0x0000010c,0x0000010c, + 0x00000217,0x00040020,0x000003e7,0x00000007,0x000003e6,0x00071168,0x000003f3,0x0000000c, + 0x00000137,0x0000010c,0x0000010c,0x000000b9,0x00040020,0x000003f4,0x00000007,0x000003f3, + 0x00071168,0x00000402,0x0000000c,0x00000137,0x0000010c,0x0000010c,0x0000007e,0x00040020, + 0x00000403,0x00000007,0x00000402,0x0004003b,0x000002da,0x00000437,0x00000001,0x0004002c, + 0x000003e6,0x0000048e,0x0000015d,0x0004002b,0x0000000e,0x000004b6,0x00000200,0x0004003b, + 0x00000361,0x000004e1,0x00000004,0x0003001d,0x00000534,0x00000349,0x0003001e,0x00000535, + 0x00000534,0x00040020,0x00000536,0x0000000c,0x00000535,0x0004003b,0x00000536,0x00000537, + 0x0000000c,0x0006002c,0x000002d7,0x00000544,0x000000db,0x0000007e,0x0000007e,0x00050036, + 0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000013, + 0x000002d6,0x00000007,0x0004003b,0x00000013,0x000002dd,0x00000007,0x0004003b,0x00000013, + 0x000002e1,0x00000007,0x0004003b,0x000001d6,0x000002f4,0x00000007,0x0004003b,0x000001d6, + 0x00000301,0x00000007,0x0004003b,0x00000013,0x0000030d,0x00000007,0x0004003b,0x00000013, + 0x00000311,0x00000007,0x0004003b,0x00000013,0x00000315,0x00000007,0x0004003b,0x00000013, + 0x0000031f,0x00000007,0x0004003b,0x00000013,0x00000322,0x00000007,0x0004003b,0x000001d6, + 0x00000325,0x00000007,0x0004003b,0x000001d6,0x0000032b,0x00000007,0x0004003b,0x00000013, + 0x00000331,0x00000007,0x0004003b,0x00000013,0x00000364,0x00000007,0x0004003b,0x00000013, + 0x00000368,0x00000007,0x0004003b,0x00000013,0x00000369,0x00000007,0x0004003b,0x000001d6, + 0x0000036c,0x00000007,0x0004003b,0x000001d6,0x00000372,0x00000007,0x0004003b,0x00000013, + 0x00000378,0x00000007,0x0004003b,0x00000013,0x00000379,0x00000007,0x0004003b,0x00000013, + 0x00000391,0x00000007,0x0004003b,0x00000013,0x000003ae,0x00000007,0x0004003b,0x00000013, + 0x000003b4,0x00000007,0x0004003b,0x00000013,0x000003bb,0x00000007,0x0004003b,0x00000013, + 0x000003be,0x00000007,0x0004003b,0x00000013,0x000003c8,0x00000007,0x0004003b,0x00000013, + 0x000003cc,0x00000007,0x0004003b,0x000003d1,0x000003d2,0x00000007,0x0004003b,0x000003e7, + 0x000003e8,0x00000007,0x0004003b,0x00000013,0x000003eb,0x00000007,0x0004003b,0x000003f4, + 0x000003f5,0x00000007,0x0004003b,0x00000403,0x00000404,0x00000007,0x0004003b,0x000001d6, + 0x00000417,0x00000007,0x0004003b,0x00000007,0x00000423,0x00000007,0x0004003b,0x000003d1, + 0x0000042a,0x00000007,0x0004003b,0x00000013,0x0000043b,0x00000007,0x0004003b,0x0000000d, + 0x00000446,0x00000007,0x0004003b,0x00000013,0x00000451,0x00000007,0x0004003b,0x0000000d, + 0x00000453,0x00000007,0x0004003b,0x00000013,0x00000454,0x00000007,0x0004003b,0x0000000d, + 0x00000457,0x00000007,0x0004003b,0x0000000d,0x00000458,0x00000007,0x0004003b,0x00000013, + 0x0000045b,0x00000007,0x0004003b,0x0000000d,0x00000463,0x00000007,0x0004003b,0x00000013, + 0x0000046c,0x00000007,0x0004003b,0x0000000d,0x0000046d,0x00000007,0x0004003b,0x00000013, + 0x00000470,0x00000007,0x0004003b,0x00000013,0x00000476,0x00000007,0x0004003b,0x00000013, + 0x0000047c,0x00000007,0x0004003b,0x00000013,0x00000485,0x00000007,0x0004003b,0x00000013, + 0x00000489,0x00000007,0x0004003b,0x000003e7,0x0000048d,0x00000007,0x0004003b,0x00000013, + 0x0000048f,0x00000007,0x0004003b,0x00000013,0x00000497,0x00000007,0x0004003b,0x000003f4, + 0x0000049f,0x00000007,0x0004003b,0x00000403,0x000004b0,0x00000007,0x0004003b,0x000001d6, + 0x000004c8,0x00000007,0x0004003b,0x00000007,0x000004d4,0x00000007,0x0004003b,0x000003d1, + 0x000004dd,0x00000007,0x0004003b,0x00000013,0x000004ee,0x00000007,0x0004003b,0x00000013, + 0x000004f7,0x00000007,0x0004003b,0x00000013,0x000004fa,0x00000007,0x0004003b,0x000001d6, + 0x000004fd,0x00000007,0x0004003b,0x000001d6,0x00000503,0x00000007,0x0004003b,0x00000013, + 0x00000523,0x00000007,0x0004003b,0x0000000d,0x0000053a,0x00000007,0x0004003b,0x00000013, + 0x0000053e,0x00000007,0x00050041,0x000002da,0x000002db,0x000002d9,0x000000b9,0x0004003d, + 0x0000000e,0x000002dc,0x000002db,0x0003003e,0x000002d6,0x000002dc,0x00050041,0x000002da, + 0x000002df,0x000002de,0x000000b9,0x0004003d,0x0000000e,0x000002e0,0x000002df,0x0003003e, + 0x000002dd,0x000002e0,0x00050041,0x000002da,0x000002e2,0x000002de,0x0000007e,0x0004003d, + 0x0000000e,0x000002e3,0x000002e2,0x00050041,0x000002da,0x000002e4,0x000002de,0x00000217, + 0x0004003d,0x0000000e,0x000002e5,0x000002e4,0x00050084,0x0000000e,0x000002e6,0x000002e5, + 0x00000095,0x00050080,0x0000000e,0x000002e7,0x000002e3,0x000002e6,0x0003003e,0x000002e1, + 0x000002e7,0x0004003d,0x0000000e,0x000002e8,0x000002e1,0x00050041,0x000002ed,0x000002ee, + 0x000002eb,0x000002ec,0x0004003d,0x0000000e,0x000002ef,0x000002ee,0x000500ae,0x00000055, + 0x000002f0,0x000002e8,0x000002ef,0x000300f7,0x000002f2,0x00000000,0x000400fa,0x000002f0, + 0x000002f1,0x000002f2,0x000200f8,0x000002f1,0x000100fd,0x000200f8,0x000002f2,0x0004003d, + 0x0000000e,0x000002f5,0x000002e1,0x00050041,0x000002ed,0x000002f7,0x000002eb,0x000002f6, + 0x0004003d,0x0000000e,0x000002f8,0x000002f7,0x00050089,0x0000000e,0x000002f9,0x000002f5, + 0x000002f8,0x00050084,0x0000000e,0x000002fa,0x000002f9,0x000000d9,0x0004007c,0x000001d5, + 0x000002fb,0x000002fa,0x00050041,0x000002ed,0x000002fd,0x000002eb,0x000002fc,0x0004003d, + 0x0000000e,0x000002fe,0x000002fd,0x0004007c,0x000001d5,0x000002ff,0x000002fe,0x00050082, + 0x000001d5,0x00000300,0x000002fb,0x000002ff,0x0003003e,0x000002f4,0x00000300,0x0004003d, + 0x0000000e,0x00000302,0x000002e1,0x00050041,0x000002ed,0x00000303,0x000002eb,0x000002f6, + 0x0004003d,0x0000000e,0x00000304,0x00000303,0x00050086,0x0000000e,0x00000305,0x00000302, + 0x00000304,0x00050084,0x0000000e,0x00000306,0x00000305,0x000000d9,0x0004007c,0x000001d5, + 0x00000307,0x00000306,0x00050041,0x000002ed,0x00000309,0x000002eb,0x00000308,0x0004003d, + 0x0000000e,0x0000030a,0x00000309,0x0004007c,0x000001d5,0x0000030b,0x0000030a,0x00050082, + 0x000001d5,0x0000030c,0x00000307,0x0000030b,0x0003003e,0x00000301,0x0000030c,0x00050041, + 0x000002ed,0x0000030e,0x000002eb,0x000001df,0x0004003d,0x0000000e,0x0000030f,0x0000030e, + 0x00050084,0x0000000e,0x00000310,0x0000030f,0x00000137,0x0003003e,0x0000030d,0x00000310, + 0x0004003d,0x0000000e,0x00000312,0x000002dd,0x00050084,0x0000000e,0x00000314,0x00000312, + 0x00000313,0x0003003e,0x00000311,0x00000314,0x0004003d,0x0000000e,0x00000316,0x000002d6, + 0x0003003e,0x00000315,0x00000316,0x000200f9,0x00000317,0x000200f8,0x00000317,0x000400f6, + 0x00000319,0x0000031a,0x00000000,0x000200f9,0x0000031b,0x000200f8,0x0000031b,0x0004003d, + 0x0000000e,0x0000031c,0x00000315,0x000500b0,0x00000055,0x0000031e,0x0000031c,0x0000031d, + 0x000400fa,0x0000031e,0x00000318,0x00000319,0x000200f8,0x00000318,0x0004003d,0x0000000e, + 0x00000320,0x00000315,0x000500c2,0x0000000e,0x00000321,0x00000320,0x00000234,0x0003003e, + 0x0000031f,0x00000321,0x0004003d,0x0000000e,0x00000323,0x00000315,0x000500c7,0x0000000e, + 0x00000324,0x00000323,0x000000e8,0x0003003e,0x00000322,0x00000324,0x0004003d,0x000001d5, + 0x00000326,0x000002f4,0x0004003d,0x0000000e,0x00000327,0x0000031f,0x000500c7,0x0000000e, + 0x00000328,0x00000327,0x0000011b,0x0004007c,0x000001d5,0x00000329,0x00000328,0x00050080, + 0x000001d5,0x0000032a,0x00000326,0x00000329,0x0003003e,0x00000325,0x0000032a,0x0004003d, + 0x000001d5,0x0000032c,0x00000301,0x0004003d,0x0000000e,0x0000032d,0x0000031f,0x000500c2, + 0x0000000e,0x0000032e,0x0000032d,0x00000137,0x0004007c,0x000001d5,0x0000032f,0x0000032e, + 0x00050080,0x000001d5,0x00000330,0x0000032c,0x0000032f,0x0003003e,0x0000032b,0x00000330, + 0x0003003e,0x00000331,0x000000b9,0x0004003d,0x000001d5,0x00000332,0x00000325,0x000500af, + 0x00000055,0x00000333,0x00000332,0x000001d8,0x0004003d,0x000001d5,0x00000334,0x0000032b, + 0x000500af,0x00000055,0x00000335,0x00000334,0x000001d8,0x000500a7,0x00000055,0x00000336, + 0x00000333,0x00000335,0x000300f7,0x00000338,0x00000000,0x000400fa,0x00000336,0x00000337, + 0x00000338,0x000200f8,0x00000337,0x0004003d,0x000001d5,0x00000339,0x00000325,0x00050041, + 0x000002ed,0x0000033a,0x000002eb,0x000001d8,0x0004003d,0x0000000e,0x0000033b,0x0000033a, + 0x0004007c,0x000001d5,0x0000033c,0x0000033b,0x000500b1,0x00000055,0x0000033d,0x00000339, + 0x0000033c,0x000200f9,0x00000338,0x000200f8,0x00000338,0x000700f5,0x00000055,0x0000033e, + 0x00000336,0x00000318,0x0000033d,0x00000337,0x000300f7,0x00000340,0x00000000,0x000400fa, + 0x0000033e,0x0000033f,0x00000340,0x000200f8,0x0000033f,0x0004003d,0x000001d5,0x00000341, + 0x0000032b,0x00050041,0x000002ed,0x00000342,0x000002eb,0x000001ff,0x0004003d,0x0000000e, + 0x00000343,0x00000342,0x0004007c,0x000001d5,0x00000344,0x00000343,0x000500b1,0x00000055, + 0x00000345,0x00000341,0x00000344,0x000200f9,0x00000340,0x000200f8,0x00000340,0x000700f5, + 0x00000055,0x00000346,0x0000033e,0x00000338,0x00000345,0x0000033f,0x000300f7,0x00000348, + 0x00000000,0x000400fa,0x00000346,0x00000347,0x00000348,0x000200f8,0x00000347,0x0004003d, + 0x000001d5,0x0000034e,0x0000032b,0x0004007c,0x0000000e,0x0000034f,0x0000034e,0x00050041, + 0x000002ed,0x00000350,0x000002eb,0x000001d8,0x0004003d,0x0000000e,0x00000351,0x00000350, + 0x00050084,0x0000000e,0x00000352,0x0000034f,0x00000351,0x0004003d,0x000001d5,0x00000353, + 0x00000325,0x0004007c,0x0000000e,0x00000354,0x00000353,0x00050080,0x0000000e,0x00000355, + 0x00000352,0x00000354,0x0004003d,0x0000000e,0x00000356,0x0000030d,0x00050084,0x0000000e, + 0x00000357,0x00000355,0x00000356,0x0004003d,0x0000000e,0x00000358,0x00000311,0x00050080, + 0x0000000e,0x00000359,0x00000357,0x00000358,0x0004003d,0x0000000e,0x0000035a,0x00000322, + 0x00050080,0x0000000e,0x0000035b,0x00000359,0x0000035a,0x00060041,0x0000035c,0x0000035d, + 0x0000034d,0x000001d8,0x0000035b,0x0004003d,0x00000349,0x0000035e,0x0000035d,0x00040071, + 0x0000000e,0x0000035f,0x0000035e,0x0003003e,0x00000331,0x0000035f,0x000200f9,0x00000348, + 0x000200f8,0x00000348,0x0004003d,0x0000000e,0x00000363,0x00000315,0x0004003d,0x0000000e, + 0x00000365,0x00000331,0x0003003e,0x00000364,0x00000365,0x00050039,0x0000000c,0x00000366, + 0x00000026,0x00000364,0x00050041,0x0000024c,0x00000367,0x00000362,0x00000363,0x0005003e, + 0x00000367,0x00000366,0x00000028,0x00000217,0x0004003d,0x0000000e,0x0000036a,0x0000031f, + 0x0003003e,0x00000369,0x0000036a,0x00050039,0x0000000e,0x0000036b,0x0000003a,0x00000369, + 0x0003003e,0x00000368,0x0000036b,0x0004003d,0x000001d5,0x0000036d,0x000002f4,0x0004003d, + 0x0000000e,0x0000036e,0x00000368,0x000500c7,0x0000000e,0x0000036f,0x0000036e,0x0000011b, + 0x0004007c,0x000001d5,0x00000370,0x0000036f,0x00050080,0x000001d5,0x00000371,0x0000036d, + 0x00000370,0x0003003e,0x0000036c,0x00000371,0x0004003d,0x000001d5,0x00000373,0x00000301, + 0x0004003d,0x0000000e,0x00000374,0x00000368,0x000500c2,0x0000000e,0x00000375,0x00000374, + 0x00000137,0x0004007c,0x000001d5,0x00000376,0x00000375,0x00050080,0x000001d5,0x00000377, + 0x00000373,0x00000376,0x0003003e,0x00000372,0x00000377,0x0003003e,0x00000378,0x000000b9, + 0x0003003e,0x00000379,0x000000b9,0x0004003d,0x000001d5,0x0000037a,0x0000036c,0x000500af, + 0x00000055,0x0000037b,0x0000037a,0x000001d8,0x0004003d,0x000001d5,0x0000037c,0x00000372, + 0x000500af,0x00000055,0x0000037d,0x0000037c,0x000001d8,0x000500a7,0x00000055,0x0000037e, + 0x0000037b,0x0000037d,0x000300f7,0x00000380,0x00000000,0x000400fa,0x0000037e,0x0000037f, + 0x00000380,0x000200f8,0x0000037f,0x0004003d,0x000001d5,0x00000381,0x0000036c,0x00050041, + 0x000002ed,0x00000382,0x000002eb,0x000001d8,0x0004003d,0x0000000e,0x00000383,0x00000382, + 0x0004007c,0x000001d5,0x00000384,0x00000383,0x000500b1,0x00000055,0x00000385,0x00000381, + 0x00000384,0x000200f9,0x00000380,0x000200f8,0x00000380,0x000700f5,0x00000055,0x00000386, + 0x0000037e,0x00000348,0x00000385,0x0000037f,0x000300f7,0x00000388,0x00000000,0x000400fa, + 0x00000386,0x00000387,0x00000388,0x000200f8,0x00000387,0x0004003d,0x000001d5,0x00000389, + 0x00000372,0x00050041,0x000002ed,0x0000038a,0x000002eb,0x000001ff,0x0004003d,0x0000000e, + 0x0000038b,0x0000038a,0x0004007c,0x000001d5,0x0000038c,0x0000038b,0x000500b1,0x00000055, + 0x0000038d,0x00000389,0x0000038c,0x000200f9,0x00000388,0x000200f8,0x00000388,0x000700f5, + 0x00000055,0x0000038e,0x00000386,0x00000380,0x0000038d,0x00000387,0x000300f7,0x00000390, + 0x00000000,0x000400fa,0x0000038e,0x0000038f,0x00000390,0x000200f8,0x0000038f,0x0004003d, + 0x000001d5,0x00000392,0x00000372,0x0004007c,0x0000000e,0x00000393,0x00000392,0x00050041, + 0x000002ed,0x00000394,0x000002eb,0x000001d8,0x0004003d,0x0000000e,0x00000395,0x00000394, + 0x00050084,0x0000000e,0x00000396,0x00000393,0x00000395,0x0004003d,0x000001d5,0x00000397, + 0x0000036c,0x0004007c,0x0000000e,0x00000398,0x00000397,0x00050080,0x0000000e,0x00000399, + 0x00000396,0x00000398,0x0004003d,0x0000000e,0x0000039a,0x0000030d,0x00050084,0x0000000e, + 0x0000039b,0x00000399,0x0000039a,0x0004003d,0x0000000e,0x0000039c,0x00000311,0x00050080, + 0x0000000e,0x0000039d,0x0000039b,0x0000039c,0x0003003e,0x00000391,0x0000039d,0x0004003d, + 0x0000000e,0x0000039e,0x00000391,0x00050080,0x0000000e,0x0000039f,0x0000039e,0x0000026d, + 0x0004003d,0x0000000e,0x000003a0,0x00000322,0x00050080,0x0000000e,0x000003a1,0x0000039f, + 0x000003a0,0x00060041,0x0000035c,0x000003a2,0x0000034d,0x000001d8,0x000003a1,0x0004003d, + 0x00000349,0x000003a3,0x000003a2,0x00040071,0x0000000e,0x000003a4,0x000003a3,0x0003003e, + 0x00000378,0x000003a4,0x0004003d,0x0000000e,0x000003a5,0x00000391,0x00050080,0x0000000e, + 0x000003a6,0x000003a5,0x00000248,0x0004003d,0x0000000e,0x000003a7,0x00000322,0x00050080, + 0x0000000e,0x000003a8,0x000003a6,0x000003a7,0x00060041,0x0000035c,0x000003a9,0x0000034d, + 0x000001d8,0x000003a8,0x0004003d,0x00000349,0x000003aa,0x000003a9,0x00040071,0x0000000e, + 0x000003ab,0x000003aa,0x0003003e,0x00000379,0x000003ab,0x000200f9,0x00000390,0x000200f8, + 0x00000390,0x0004003d,0x0000000e,0x000003ad,0x00000315,0x0004003d,0x0000000e,0x000003af, + 0x00000378,0x0003003e,0x000003ae,0x000003af,0x00050039,0x0000000c,0x000003b0,0x00000026, + 0x000003ae,0x00050041,0x0000024c,0x000003b1,0x000003ac,0x000003ad,0x0005003e,0x000003b1, + 0x000003b0,0x00000028,0x00000217,0x0004003d,0x0000000e,0x000003b3,0x00000315,0x0004003d, + 0x0000000e,0x000003b5,0x00000379,0x0003003e,0x000003b4,0x000003b5,0x00050039,0x0000000c, + 0x000003b6,0x00000026,0x000003b4,0x00050041,0x0000024c,0x000003b7,0x000003b2,0x000003b3, + 0x0005003e,0x000003b7,0x000003b6,0x00000028,0x00000217,0x000200f9,0x0000031a,0x000200f8, + 0x0000031a,0x0004003d,0x0000000e,0x000003b8,0x00000315,0x00050080,0x0000000e,0x000003b9, + 0x000003b8,0x000000db,0x0003003e,0x00000315,0x000003b9,0x000200f9,0x00000317,0x000200f8, + 0x00000319,0x000400e0,0x00000217,0x00000217,0x000003ba,0x0004003d,0x0000000e,0x000003bc, + 0x000002dd,0x00050084,0x0000000e,0x000003bd,0x000003bc,0x00000243,0x0003003e,0x000003bb, + 0x000003bd,0x0004003d,0x0000000e,0x000003c0,0x000003bf,0x0003003e,0x000003be,0x000003c0, + 0x000200f9,0x000003c1,0x000200f8,0x000003c1,0x000400f6,0x000003c3,0x000003c4,0x00000000, + 0x000200f9,0x000003c5,0x000200f8,0x000003c5,0x0004003d,0x0000000e,0x000003c6,0x000003be, + 0x000500b0,0x00000055,0x000003c7,0x000003c6,0x0000010c,0x000400fa,0x000003c7,0x000003c2, + 0x000003c3,0x000200f8,0x000003c2,0x0004003d,0x0000000e,0x000003c9,0x000003be,0x00050086, + 0x0000000e,0x000003ca,0x000003c9,0x00000206,0x00050084,0x0000000e,0x000003cb,0x000003ca, + 0x0000010c,0x0003003e,0x000003c8,0x000003cb,0x0004003d,0x0000000e,0x000003cd,0x000003be, + 0x00050089,0x0000000e,0x000003ce,0x000003cd,0x00000206,0x00050084,0x0000000e,0x000003cf, + 0x000003ce,0x0000010c,0x0003003e,0x000003cc,0x000003cf,0x0004003d,0x0000000e,0x000003d7, + 0x000003bb,0x0004003d,0x0000000e,0x000003d8,0x000003c8,0x00050084,0x0000000e,0x000003d9, + 0x000003d8,0x00000248,0x00050080,0x0000000e,0x000003da,0x000003d7,0x000003d9,0x0004003d, + 0x0000000e,0x000003db,0x000003cc,0x00050080,0x0000000e,0x000003dc,0x000003da,0x000003db, + 0x00060041,0x000003dd,0x000003de,0x000003d6,0x000001d8,0x000003dc,0x0004003d,0x0000000e, + 0x000003df,0x000003bb,0x0004003d,0x0000000e,0x000003e0,0x000003c8,0x00050084,0x0000000e, + 0x000003e1,0x000003e0,0x00000248,0x00050080,0x0000000e,0x000003e2,0x000003df,0x000003e1, + 0x0004003d,0x0000000e,0x000003e3,0x000003cc,0x00050080,0x0000000e,0x000003e4,0x000003e2, + 0x000003e3,0x00071169,0x000003d0,0x000003e5,0x000003de,0x000001d8,0x00000248,0x00000000, + 0x0003003e,0x000003d2,0x000003e5,0x0004003d,0x000003d0,0x000003e9,0x000003d2,0x00040073, + 0x000003e6,0x000003ea,0x000003e9,0x0003003e,0x000003e8,0x000003ea,0x0003003e,0x000003eb, + 0x000000b9,0x000200f9,0x000003ec,0x000200f8,0x000003ec,0x000400f6,0x000003ee,0x000003ef, + 0x00000001,0x000200f9,0x000003f0,0x000200f8,0x000003f0,0x0004003d,0x0000000e,0x000003f1, + 0x000003eb,0x000500b0,0x00000055,0x000003f2,0x000003f1,0x00000217,0x000400fa,0x000003f2, + 0x000003ed,0x000003ee,0x000200f8,0x000003ed,0x0004003d,0x0000000e,0x000003f6,0x000003c8, + 0x00050084,0x0000000e,0x000003f7,0x000003f6,0x0000026d,0x0004003d,0x0000000e,0x000003f8, + 0x000003eb,0x00050084,0x0000000e,0x000003f9,0x000003f8,0x0000010c,0x00050080,0x0000000e, + 0x000003fa,0x000003f7,0x000003f9,0x00050041,0x0000024c,0x000003fb,0x00000362,0x000003fa, + 0x0004003d,0x0000000e,0x000003fc,0x000003c8,0x00050084,0x0000000e,0x000003fd,0x000003fc, + 0x0000026d,0x0004003d,0x0000000e,0x000003fe,0x000003eb,0x00050084,0x0000000e,0x000003ff, + 0x000003fe,0x0000010c,0x00050080,0x0000000e,0x00000400,0x000003fd,0x000003ff,0x00081169, + 0x000003f3,0x00000401,0x000003fb,0x000001d8,0x0000026d,0x00000030,0x00000217,0x0003003e, + 0x000003f5,0x00000401,0x0004003d,0x0000000e,0x00000405,0x000003cc,0x00050084,0x0000000e, + 0x00000406,0x00000405,0x0000026d,0x0004003d,0x0000000e,0x00000407,0x000003eb,0x00050084, + 0x0000000e,0x00000408,0x00000407,0x0000010c,0x00050080,0x0000000e,0x00000409,0x00000406, + 0x00000408,0x00050041,0x0000024c,0x0000040a,0x000003ac,0x00000409,0x0004003d,0x0000000e, + 0x0000040b,0x000003cc,0x00050084,0x0000000e,0x0000040c,0x0000040b,0x0000026d,0x0004003d, + 0x0000000e,0x0000040d,0x000003eb,0x00050084,0x0000000e,0x0000040e,0x0000040d,0x0000010c, + 0x00050080,0x0000000e,0x0000040f,0x0000040c,0x0000040e,0x00081169,0x00000402,0x00000410, + 0x0000040a,0x000001ff,0x0000026d,0x00000030,0x00000217,0x0003003e,0x00000404,0x00000410, + 0x0004003d,0x000003f3,0x00000411,0x000003f5,0x0004003d,0x00000402,0x00000412,0x00000404, + 0x0004003d,0x000003e6,0x00000413,0x000003e8,0x0006116b,0x000003e6,0x00000414,0x00000411, + 0x00000412,0x00000413,0x0003003e,0x000003e8,0x00000414,0x000200f9,0x000003ef,0x000200f8, + 0x000003ef,0x0004003d,0x0000000e,0x00000415,0x000003eb,0x00050080,0x0000000e,0x00000416, + 0x00000415,0x000001ff,0x0003003e,0x000003eb,0x00000416,0x000200f9,0x000003ec,0x000200f8, + 0x000003ee,0x0003003e,0x00000417,0x000001d8,0x000200f9,0x00000418,0x000200f8,0x00000418, + 0x000400f6,0x0000041a,0x0000041b,0x00000000,0x000200f9,0x0000041c,0x000200f8,0x0000041c, + 0x0004003d,0x000001d5,0x0000041d,0x00000417,0x0004116c,0x0000000e,0x0000041e,0x000003e6, + 0x0004007c,0x000001d5,0x0000041f,0x0000041e,0x000500b1,0x00000055,0x00000420,0x0000041d, + 0x0000041f,0x000400fa,0x00000420,0x00000419,0x0000041a,0x000200f8,0x00000419,0x0004003d, + 0x000001d5,0x00000421,0x00000417,0x0004003d,0x000001d5,0x00000422,0x00000417,0x00050041, + 0x00000007,0x00000424,0x000003e8,0x00000422,0x0004003d,0x00000006,0x00000425,0x00000424, + 0x0003003e,0x00000423,0x00000425,0x00050039,0x00000006,0x00000426,0x0000000a,0x00000423, + 0x00050041,0x00000007,0x00000427,0x000003e8,0x00000421,0x0003003e,0x00000427,0x00000426, + 0x000200f9,0x0000041b,0x000200f8,0x0000041b,0x0004003d,0x000001d5,0x00000428,0x00000417, + 0x00050080,0x000001d5,0x00000429,0x00000428,0x000001ff,0x0003003e,0x00000417,0x00000429, + 0x000200f9,0x00000418,0x000200f8,0x0000041a,0x0004003d,0x000003e6,0x0000042b,0x000003e8, + 0x00040073,0x000003d0,0x0000042c,0x0000042b,0x0003003e,0x0000042a,0x0000042c,0x0004003d, + 0x000003d0,0x0000042d,0x0000042a,0x0004003d,0x0000000e,0x0000042e,0x000003c8,0x00050084, + 0x0000000e,0x0000042f,0x0000042e,0x00000248,0x0004003d,0x0000000e,0x00000430,0x000003cc, + 0x00050080,0x0000000e,0x00000431,0x0000042f,0x00000430,0x00050041,0x0000024c,0x00000432, + 0x00000246,0x00000431,0x0004003d,0x0000000e,0x00000433,0x000003c8,0x00050084,0x0000000e, + 0x00000434,0x00000433,0x00000248,0x0004003d,0x0000000e,0x00000435,0x000003cc,0x00050080, + 0x0000000e,0x00000436,0x00000434,0x00000435,0x0007116a,0x00000432,0x0000042d,0x000001d8, + 0x00000248,0x00000028,0x00000217,0x000200f9,0x000003c4,0x000200f8,0x000003c4,0x0004003d, + 0x0000000e,0x00000438,0x00000437,0x0004003d,0x0000000e,0x00000439,0x000003be,0x00050080, + 0x0000000e,0x0000043a,0x00000439,0x00000438,0x0003003e,0x000003be,0x0000043a,0x000200f9, + 0x000003c1,0x000200f8,0x000003c3,0x000400e0,0x00000217,0x00000217,0x000003ba,0x0004003d, + 0x0000000e,0x0000043c,0x000002d6,0x0003003e,0x0000043b,0x0000043c,0x000200f9,0x0000043d, + 0x000200f8,0x0000043d,0x000400f6,0x0000043f,0x00000440,0x00000000,0x000200f9,0x00000441, + 0x000200f8,0x00000441,0x0004003d,0x0000000e,0x00000442,0x0000043b,0x000500b0,0x00000055, + 0x00000443,0x00000442,0x00000243,0x000400fa,0x00000443,0x0000043e,0x0000043f,0x000200f8, + 0x0000043e,0x0004003d,0x0000000e,0x00000444,0x0000043b,0x0004003d,0x0000000e,0x00000445, + 0x0000043b,0x00050041,0x0000024c,0x00000447,0x00000246,0x00000445,0x0006003d,0x0000000c, + 0x00000448,0x00000447,0x00000030,0x00000217,0x0003003e,0x00000446,0x00000448,0x00050039, + 0x0000000c,0x00000449,0x0000003d,0x00000446,0x00050041,0x0000024c,0x0000044a,0x00000246, + 0x00000444,0x0005003e,0x0000044a,0x00000449,0x00000028,0x00000217,0x000200f9,0x00000440, + 0x000200f8,0x00000440,0x0004003d,0x0000000e,0x0000044b,0x0000043b,0x00050080,0x0000000e, + 0x0000044c,0x0000044b,0x000000db,0x0003003e,0x0000043b,0x0000044c,0x000200f9,0x0000043d, + 0x000200f8,0x0000043f,0x000400e0,0x00000217,0x00000217,0x000003ba,0x0004003d,0x0000000e, + 0x0000044d,0x000002d6,0x000500b0,0x00000055,0x0000044e,0x0000044d,0x00000248,0x000300f7, + 0x00000450,0x00000000,0x000400fa,0x0000044e,0x0000044f,0x00000450,0x000200f8,0x0000044f, + 0x0004003d,0x0000000e,0x00000452,0x000002d6,0x0003003e,0x00000451,0x00000452,0x0004003d, + 0x0000000e,0x00000455,0x00000451,0x0003003e,0x00000454,0x00000455,0x00050039,0x0000000c, + 0x00000456,0x00000046,0x00000454,0x0003003e,0x00000453,0x00000456,0x0004003d,0x0000000c, + 0x00000459,0x00000453,0x0003003e,0x00000458,0x00000459,0x00050039,0x0000000c,0x0000045a, + 0x00000037,0x00000458,0x0003003e,0x00000457,0x0000045a,0x0003003e,0x0000045b,0x000000b9, + 0x000200f9,0x0000045c,0x000200f8,0x0000045c,0x000400f6,0x0000045e,0x0000045f,0x00000000, + 0x000200f9,0x00000460,0x000200f8,0x00000460,0x0004003d,0x0000000e,0x00000461,0x0000045b, + 0x000500b0,0x00000055,0x00000462,0x00000461,0x00000248,0x000400fa,0x00000462,0x0000045d, + 0x0000045e,0x000200f8,0x0000045d,0x0004003d,0x0000000e,0x00000464,0x00000451,0x00050084, + 0x0000000e,0x00000465,0x00000464,0x00000248,0x0004003d,0x0000000e,0x00000466,0x0000045b, + 0x00050080,0x0000000e,0x00000467,0x00000465,0x00000466,0x00050041,0x0000024c,0x00000468, + 0x00000246,0x00000467,0x0006003d,0x0000000c,0x00000469,0x00000468,0x00000030,0x00000217, + 0x0004003d,0x0000000c,0x0000046a,0x00000457,0x00050085,0x0000000c,0x0000046b,0x00000469, + 0x0000046a,0x0003003e,0x00000463,0x0000046b,0x0004003d,0x0000000c,0x0000046e,0x00000463, + 0x0003003e,0x0000046d,0x0000046e,0x00050039,0x0000000e,0x0000046f,0x00000011,0x0000046d, + 0x0003003e,0x00000470,0x0000046f,0x00050039,0x0000000e,0x00000471,0x0000001f,0x00000470, + 0x0003003e,0x0000046c,0x00000471,0x0004003d,0x0000000e,0x00000472,0x00000451,0x00050084, + 0x0000000e,0x00000473,0x00000472,0x00000248,0x0004003d,0x0000000e,0x00000474,0x0000045b, + 0x00050080,0x0000000e,0x00000475,0x00000473,0x00000474,0x0004003d,0x0000000e,0x00000477, + 0x0000046c,0x0003003e,0x00000476,0x00000477,0x00050039,0x0000000c,0x00000478,0x00000026, + 0x00000476,0x00050041,0x0000024c,0x00000479,0x00000246,0x00000475,0x0005003e,0x00000479, + 0x00000478,0x00000028,0x00000217,0x000200f9,0x0000045f,0x000200f8,0x0000045f,0x0004003d, + 0x0000000e,0x0000047a,0x0000045b,0x00050080,0x0000000e,0x0000047b,0x0000047a,0x000001ff, + 0x0003003e,0x0000045b,0x0000047b,0x000200f9,0x0000045c,0x000200f8,0x0000045e,0x000200f9, + 0x00000450,0x000200f8,0x00000450,0x000400e0,0x00000217,0x00000217,0x000003ba,0x0004003d, + 0x0000000e,0x0000047d,0x000003bf,0x0003003e,0x0000047c,0x0000047d,0x000200f9,0x0000047e, + 0x000200f8,0x0000047e,0x000400f6,0x00000480,0x00000481,0x00000000,0x000200f9,0x00000482, + 0x000200f8,0x00000482,0x0004003d,0x0000000e,0x00000483,0x0000047c,0x000500b0,0x00000055, + 0x00000484,0x00000483,0x000000d9,0x000400fa,0x00000484,0x0000047f,0x00000480,0x000200f8, + 0x0000047f,0x0004003d,0x0000000e,0x00000486,0x0000047c,0x00050086,0x0000000e,0x00000487, + 0x00000486,0x00000217,0x00050084,0x0000000e,0x00000488,0x00000487,0x0000010c,0x0003003e, + 0x00000485,0x00000488,0x0004003d,0x0000000e,0x0000048a,0x0000047c,0x00050089,0x0000000e, + 0x0000048b,0x0000048a,0x00000217,0x00050084,0x0000000e,0x0000048c,0x0000048b,0x0000010c, + 0x0003003e,0x00000489,0x0000048c,0x0003003e,0x0000048d,0x0000048e,0x0003003e,0x0000048f, + 0x000000b9,0x000200f9,0x00000490,0x000200f8,0x00000490,0x000400f6,0x00000492,0x00000493, + 0x00000001,0x000200f9,0x00000494,0x000200f8,0x00000494,0x0004003d,0x0000000e,0x00000495, + 0x0000048f,0x000500b0,0x00000055,0x00000496,0x00000495,0x00000248,0x000400fa,0x00000496, + 0x00000491,0x00000492,0x000200f8,0x00000491,0x0003003e,0x00000497,0x000000b9,0x000200f9, + 0x00000498,0x000200f8,0x00000498,0x000400f6,0x0000049a,0x0000049b,0x00000001,0x000200f9, + 0x0000049c,0x000200f8,0x0000049c,0x0004003d,0x0000000e,0x0000049d,0x00000497,0x000500b0, + 0x00000055,0x0000049e,0x0000049d,0x00000217,0x000400fa,0x0000049e,0x00000499,0x0000049a, + 0x000200f8,0x00000499,0x0004003d,0x0000000e,0x000004a0,0x00000485,0x00050084,0x0000000e, + 0x000004a1,0x000004a0,0x00000248,0x0004003d,0x0000000e,0x000004a2,0x0000048f,0x00050080, + 0x0000000e,0x000004a3,0x000004a1,0x000004a2,0x0004003d,0x0000000e,0x000004a4,0x00000497, + 0x00050084,0x0000000e,0x000004a5,0x000004a4,0x0000010c,0x00050080,0x0000000e,0x000004a6, + 0x000004a3,0x000004a5,0x00050041,0x0000024c,0x000004a7,0x00000246,0x000004a6,0x0004003d, + 0x0000000e,0x000004a8,0x00000485,0x00050084,0x0000000e,0x000004a9,0x000004a8,0x00000248, + 0x0004003d,0x0000000e,0x000004aa,0x0000048f,0x00050080,0x0000000e,0x000004ab,0x000004a9, + 0x000004aa,0x0004003d,0x0000000e,0x000004ac,0x00000497,0x00050084,0x0000000e,0x000004ad, + 0x000004ac,0x0000010c,0x00050080,0x0000000e,0x000004ae,0x000004ab,0x000004ad,0x00081169, + 0x000003f3,0x000004af,0x000004a7,0x000001d8,0x00000248,0x00000030,0x00000217,0x0003003e, + 0x0000049f,0x000004af,0x0004003d,0x0000000e,0x000004b1,0x0000048f,0x00050084,0x0000000e, + 0x000004b2,0x000004b1,0x0000026d,0x0004003d,0x0000000e,0x000004b3,0x00000489,0x00050080, + 0x0000000e,0x000004b4,0x000004b2,0x000004b3,0x0004003d,0x0000000e,0x000004b5,0x00000497, + 0x00050084,0x0000000e,0x000004b7,0x000004b5,0x000004b6,0x00050080,0x0000000e,0x000004b8, + 0x000004b4,0x000004b7,0x00050041,0x0000024c,0x000004b9,0x000003b2,0x000004b8,0x0004003d, + 0x0000000e,0x000004ba,0x0000048f,0x00050084,0x0000000e,0x000004bb,0x000004ba,0x0000026d, + 0x0004003d,0x0000000e,0x000004bc,0x00000489,0x00050080,0x0000000e,0x000004bd,0x000004bb, + 0x000004bc,0x0004003d,0x0000000e,0x000004be,0x00000497,0x00050084,0x0000000e,0x000004bf, + 0x000004be,0x000004b6,0x00050080,0x0000000e,0x000004c0,0x000004bd,0x000004bf,0x00081169, + 0x00000402,0x000004c1,0x000004b9,0x000001d8,0x0000026d,0x00000030,0x00000217,0x0003003e, + 0x000004b0,0x000004c1,0x0004003d,0x000003f3,0x000004c2,0x0000049f,0x0004003d,0x00000402, + 0x000004c3,0x000004b0,0x0004003d,0x000003e6,0x000004c4,0x0000048d,0x0006116b,0x000003e6, + 0x000004c5,0x000004c2,0x000004c3,0x000004c4,0x0003003e,0x0000048d,0x000004c5,0x000200f9, + 0x0000049b,0x000200f8,0x0000049b,0x0004003d,0x0000000e,0x000004c6,0x00000497,0x00050080, + 0x0000000e,0x000004c7,0x000004c6,0x000001ff,0x0003003e,0x00000497,0x000004c7,0x000200f9, + 0x00000498,0x000200f8,0x0000049a,0x0003003e,0x000004c8,0x000001d8,0x000200f9,0x000004c9, + 0x000200f8,0x000004c9,0x000400f6,0x000004cb,0x000004cc,0x00000000,0x000200f9,0x000004cd, + 0x000200f8,0x000004cd,0x0004003d,0x000001d5,0x000004ce,0x000004c8,0x0004116c,0x0000000e, + 0x000004cf,0x000003e6,0x0004007c,0x000001d5,0x000004d0,0x000004cf,0x000500b1,0x00000055, + 0x000004d1,0x000004ce,0x000004d0,0x000400fa,0x000004d1,0x000004ca,0x000004cb,0x000200f8, + 0x000004ca,0x0004003d,0x000001d5,0x000004d2,0x000004c8,0x0004003d,0x000001d5,0x000004d3, + 0x000004c8,0x00050041,0x00000007,0x000004d5,0x0000048d,0x000004d3,0x0004003d,0x00000006, + 0x000004d6,0x000004d5,0x0003003e,0x000004d4,0x000004d6,0x00050039,0x00000006,0x000004d7, + 0x0000000a,0x000004d4,0x00050041,0x00000007,0x000004d8,0x0000048d,0x000004d2,0x0003003e, + 0x000004d8,0x000004d7,0x000200f9,0x000004cc,0x000200f8,0x000004cc,0x0004003d,0x000001d5, + 0x000004d9,0x000004c8,0x00050080,0x000001d5,0x000004da,0x000004d9,0x000001ff,0x0003003e, + 0x000004c8,0x000004da,0x000200f9,0x000004c9,0x000200f8,0x000004cb,0x000200f9,0x00000493, + 0x000200f8,0x00000493,0x0004003d,0x0000000e,0x000004db,0x0000048f,0x00050080,0x0000000e, + 0x000004dc,0x000004db,0x0000026d,0x0003003e,0x0000048f,0x000004dc,0x000200f9,0x00000490, + 0x000200f8,0x00000492,0x0004003d,0x000003e6,0x000004de,0x0000048d,0x00040073,0x000003d0, + 0x000004df,0x000004de,0x0003003e,0x000004dd,0x000004df,0x0004003d,0x000003d0,0x000004e0, + 0x000004dd,0x0004003d,0x0000000e,0x000004e2,0x00000485,0x00050084,0x0000000e,0x000004e3, + 0x000004e2,0x0000026d,0x0004003d,0x0000000e,0x000004e4,0x00000489,0x00050080,0x0000000e, + 0x000004e5,0x000004e3,0x000004e4,0x00050041,0x0000024c,0x000004e6,0x000004e1,0x000004e5, + 0x0004003d,0x0000000e,0x000004e7,0x00000485,0x00050084,0x0000000e,0x000004e8,0x000004e7, + 0x0000026d,0x0004003d,0x0000000e,0x000004e9,0x00000489,0x00050080,0x0000000e,0x000004ea, + 0x000004e8,0x000004e9,0x0007116a,0x000004e6,0x000004e0,0x000001d8,0x0000026d,0x00000028, + 0x00000217,0x000200f9,0x00000481,0x000200f8,0x00000481,0x0004003d,0x0000000e,0x000004eb, + 0x00000437,0x0004003d,0x0000000e,0x000004ec,0x0000047c,0x00050080,0x0000000e,0x000004ed, + 0x000004ec,0x000004eb,0x0003003e,0x0000047c,0x000004ed,0x000200f9,0x0000047e,0x000200f8, + 0x00000480,0x000400e0,0x00000217,0x00000217,0x000003ba,0x0004003d,0x0000000e,0x000004ef, + 0x000002d6,0x0003003e,0x000004ee,0x000004ef,0x000200f9,0x000004f0,0x000200f8,0x000004f0, + 0x000400f6,0x000004f2,0x000004f3,0x00000000,0x000200f9,0x000004f4,0x000200f8,0x000004f4, + 0x0004003d,0x0000000e,0x000004f5,0x000004ee,0x000500b0,0x00000055,0x000004f6,0x000004f5, + 0x0000031d,0x000400fa,0x000004f6,0x000004f1,0x000004f2,0x000200f8,0x000004f1,0x0004003d, + 0x0000000e,0x000004f8,0x000004ee,0x000500c2,0x0000000e,0x000004f9,0x000004f8,0x00000234, + 0x0003003e,0x000004f7,0x000004f9,0x0004003d,0x0000000e,0x000004fb,0x000004ee,0x000500c7, + 0x0000000e,0x000004fc,0x000004fb,0x000000e8,0x0003003e,0x000004fa,0x000004fc,0x0004003d, + 0x000001d5,0x000004fe,0x000002f4,0x0004003d,0x0000000e,0x000004ff,0x000004f7,0x000500c7, + 0x0000000e,0x00000500,0x000004ff,0x0000011b,0x0004007c,0x000001d5,0x00000501,0x00000500, + 0x00050080,0x000001d5,0x00000502,0x000004fe,0x00000501,0x0003003e,0x000004fd,0x00000502, + 0x0004003d,0x000001d5,0x00000504,0x00000301,0x0004003d,0x0000000e,0x00000505,0x000004f7, + 0x000500c2,0x0000000e,0x00000506,0x00000505,0x00000137,0x0004007c,0x000001d5,0x00000507, + 0x00000506,0x00050080,0x000001d5,0x00000508,0x00000504,0x00000507,0x0003003e,0x00000503, + 0x00000508,0x0004003d,0x000001d5,0x00000509,0x000004fd,0x000500b1,0x00000055,0x0000050a, + 0x00000509,0x000001d8,0x0004003d,0x000001d5,0x0000050b,0x00000503,0x000500b1,0x00000055, + 0x0000050c,0x0000050b,0x000001d8,0x000500a6,0x00000055,0x0000050d,0x0000050a,0x0000050c, + 0x000400a8,0x00000055,0x0000050e,0x0000050d,0x000300f7,0x00000510,0x00000000,0x000400fa, + 0x0000050e,0x0000050f,0x00000510,0x000200f8,0x0000050f,0x0004003d,0x000001d5,0x00000511, + 0x000004fd,0x00050041,0x000002ed,0x00000512,0x000002eb,0x000001d8,0x0004003d,0x0000000e, + 0x00000513,0x00000512,0x0004007c,0x000001d5,0x00000514,0x00000513,0x000500af,0x00000055, + 0x00000515,0x00000511,0x00000514,0x000200f9,0x00000510,0x000200f8,0x00000510,0x000700f5, + 0x00000055,0x00000516,0x0000050d,0x000004f1,0x00000515,0x0000050f,0x000400a8,0x00000055, + 0x00000517,0x00000516,0x000300f7,0x00000519,0x00000000,0x000400fa,0x00000517,0x00000518, + 0x00000519,0x000200f8,0x00000518,0x0004003d,0x000001d5,0x0000051a,0x00000503,0x00050041, + 0x000002ed,0x0000051b,0x000002eb,0x000001ff,0x0004003d,0x0000000e,0x0000051c,0x0000051b, + 0x0004007c,0x000001d5,0x0000051d,0x0000051c,0x000500af,0x00000055,0x0000051e,0x0000051a, + 0x0000051d,0x000200f9,0x00000519,0x000200f8,0x00000519,0x000700f5,0x00000055,0x0000051f, + 0x00000516,0x00000510,0x0000051e,0x00000518,0x000300f7,0x00000521,0x00000000,0x000400fa, + 0x0000051f,0x00000520,0x00000521,0x000200f8,0x00000520,0x000200f9,0x000004f3,0x000200f8, + 0x00000521,0x0004003d,0x000001d5,0x00000524,0x00000503,0x0004007c,0x0000000e,0x00000525, + 0x00000524,0x00050041,0x000002ed,0x00000526,0x000002eb,0x000001d8,0x0004003d,0x0000000e, + 0x00000527,0x00000526,0x00050084,0x0000000e,0x00000528,0x00000525,0x00000527,0x0004003d, + 0x000001d5,0x00000529,0x000004fd,0x0004007c,0x0000000e,0x0000052a,0x00000529,0x00050080, + 0x0000000e,0x0000052b,0x00000528,0x0000052a,0x00050041,0x000002ed,0x0000052c,0x000002eb, + 0x000001df,0x0004003d,0x0000000e,0x0000052d,0x0000052c,0x00050084,0x0000000e,0x0000052e, + 0x0000052b,0x0000052d,0x0004003d,0x0000000e,0x0000052f,0x000002dd,0x00050084,0x0000000e, + 0x00000530,0x0000052f,0x0000026d,0x00050080,0x0000000e,0x00000531,0x0000052e,0x00000530, + 0x0004003d,0x0000000e,0x00000532,0x000004fa,0x00050080,0x0000000e,0x00000533,0x00000531, + 0x00000532,0x0003003e,0x00000523,0x00000533,0x0004003d,0x0000000e,0x00000538,0x00000523, + 0x0004003d,0x0000000e,0x00000539,0x000004ee,0x00050041,0x0000024c,0x0000053b,0x000004e1, + 0x00000539,0x0006003d,0x0000000c,0x0000053c,0x0000053b,0x00000030,0x00000217,0x0003003e, + 0x0000053a,0x0000053c,0x00050039,0x0000000e,0x0000053d,0x00000011,0x0000053a,0x0003003e, + 0x0000053e,0x0000053d,0x00050039,0x0000000e,0x0000053f,0x0000001f,0x0000053e,0x00040071, + 0x00000349,0x00000540,0x0000053f,0x00060041,0x0000035c,0x00000541,0x00000537,0x000001d8, + 0x00000538,0x0003003e,0x00000541,0x00000540,0x000200f9,0x000004f3,0x000200f8,0x000004f3, + 0x0004003d,0x0000000e,0x00000542,0x000004ee,0x00050080,0x0000000e,0x00000543,0x00000542, + 0x000000db,0x0003003e,0x000004ee,0x00000543,0x000200f9,0x000004f0,0x000200f8,0x000004f2, + 0x000100fd,0x00010038,0x00050036,0x00000006,0x0000000a,0x00000000,0x00000008,0x00030037, + 0x00000007,0x00000009,0x000200f8,0x0000000b,0x0004003b,0x00000013,0x00000048,0x00000007, + 0x0004003b,0x00000013,0x0000004b,0x00000007,0x0004003b,0x00000013,0x0000004f,0x00000007, + 0x0004003b,0x00000007,0x00000069,0x00000007,0x0004003b,0x00000013,0x0000007a,0x00000007, + 0x0004003b,0x00000013,0x00000080,0x00000007,0x0004003d,0x00000006,0x00000049,0x00000009, + 0x0004007c,0x0000000e,0x0000004a,0x00000049,0x0003003e,0x00000048,0x0000004a,0x0004003d, + 0x0000000e,0x0000004c,0x00000048,0x000500c7,0x0000000e,0x0000004e,0x0000004c,0x0000004d, + 0x0003003e,0x0000004b,0x0000004e,0x0004003d,0x0000000e,0x00000050,0x00000048,0x000500c7, + 0x0000000e,0x00000052,0x00000050,0x00000051,0x0003003e,0x0000004f,0x00000052,0x0004003d, + 0x0000000e,0x00000053,0x0000004f,0x000500ae,0x00000055,0x00000056,0x00000053,0x00000054, + 0x000300f7,0x00000058,0x00000000,0x000400fa,0x00000056,0x00000057,0x00000058,0x000200f8, + 0x00000057,0x0004003d,0x00000006,0x00000059,0x00000009,0x000200fe,0x00000059,0x000200f8, + 0x00000058,0x0004003d,0x0000000e,0x0000005b,0x0000004f,0x000500ae,0x00000055,0x0000005d, + 0x0000005b,0x0000005c,0x000300f7,0x0000005f,0x00000000,0x000400fa,0x0000005d,0x0000005e, + 0x0000005f,0x000200f8,0x0000005e,0x0004003d,0x0000000e,0x00000060,0x0000004b,0x000500c5, + 0x0000000e,0x00000061,0x00000060,0x00000054,0x0004007c,0x00000006,0x00000062,0x00000061, + 0x000200fe,0x00000062,0x000200f8,0x0000005f,0x0004003d,0x0000000e,0x00000064,0x0000004f, + 0x000500b0,0x00000055,0x00000066,0x00000064,0x00000065,0x000300f7,0x00000068,0x00000000, + 0x000400fa,0x00000066,0x00000067,0x00000068,0x000200f8,0x00000067,0x0004003d,0x0000000e, + 0x0000006a,0x0000004f,0x0004007c,0x00000006,0x0000006b,0x0000006a,0x00050085,0x00000006, + 0x0000006d,0x0000006b,0x0000006c,0x0006000c,0x00000006,0x0000006e,0x00000001,0x00000002, + 0x0000006d,0x0003003e,0x00000069,0x0000006e,0x0004003d,0x0000000e,0x0000006f,0x0000004b, + 0x0004007c,0x00000006,0x00000070,0x0000006f,0x0004003d,0x0000000e,0x00000071,0x0000004b, + 0x0004003d,0x00000006,0x00000072,0x00000069,0x00050085,0x00000006,0x00000074,0x00000072, + 0x00000073,0x0004007c,0x0000000e,0x00000075,0x00000074,0x000500c5,0x0000000e,0x00000076, + 0x00000071,0x00000075,0x0004007c,0x00000006,0x00000077,0x00000076,0x00050081,0x00000006, + 0x00000078,0x00000070,0x00000077,0x000200fe,0x00000078,0x000200f8,0x00000068,0x0004003d, + 0x0000000e,0x0000007b,0x0000004f,0x000500c2,0x0000000e,0x0000007d,0x0000007b,0x0000007c, + 0x000500c7,0x0000000e,0x0000007f,0x0000007d,0x0000007e,0x0003003e,0x0000007a,0x0000007f, + 0x0004003d,0x0000000e,0x00000081,0x0000004f,0x00050080,0x0000000e,0x00000083,0x00000081, + 0x00000082,0x0004003d,0x0000000e,0x00000084,0x0000007a,0x00050080,0x0000000e,0x00000085, + 0x00000083,0x00000084,0x000500c7,0x0000000e,0x00000087,0x00000085,0x00000086,0x0003003e, + 0x00000080,0x00000087,0x0004003d,0x0000000e,0x00000088,0x0000004b,0x0004003d,0x0000000e, + 0x00000089,0x00000080,0x000500c5,0x0000000e,0x0000008a,0x00000088,0x00000089,0x0004007c, + 0x00000006,0x0000008b,0x0000008a,0x000200fe,0x0000008b,0x00010038,0x00050036,0x0000000e, + 0x00000011,0x00000000,0x0000000f,0x00030037,0x0000000d,0x00000010,0x000200f8,0x00000012, + 0x0004003d,0x0000000c,0x0000008e,0x00000010,0x0004007c,0x0000008f,0x00000090,0x0000008e, + 0x00040071,0x0000000e,0x00000091,0x00000090,0x000200fe,0x00000091,0x00010038,0x00050036, + 0x0000000c,0x00000016,0x00000000,0x00000014,0x00030037,0x00000013,0x00000015,0x000200f8, + 0x00000017,0x0004003d,0x0000000e,0x00000094,0x00000015,0x000500c7,0x0000000e,0x00000096, + 0x00000094,0x00000095,0x00040071,0x0000008f,0x00000097,0x00000096,0x0004007c,0x0000000c, + 0x00000098,0x00000097,0x000200fe,0x00000098,0x00010038,0x00050036,0x0000000e,0x0000001b, + 0x00000000,0x00000018,0x00030037,0x00000013,0x00000019,0x00030037,0x00000013,0x0000001a, + 0x000200f8,0x0000001c,0x0004003b,0x00000013,0x0000009b,0x00000007,0x0004003b,0x00000013, + 0x0000009f,0x00000007,0x0004003b,0x00000013,0x000000a3,0x00000007,0x0004003b,0x00000013, + 0x000000a7,0x00000007,0x0004003d,0x0000000e,0x0000009c,0x00000019,0x0004003d,0x0000000e, + 0x0000009d,0x0000001a,0x000500c2,0x0000000e,0x0000009e,0x0000009c,0x0000009d,0x0003003e, + 0x0000009b,0x0000009e,0x0004003d,0x0000000e,0x000000a0,0x0000001a,0x000500c4,0x0000000e, + 0x000000a1,0x0000007e,0x000000a0,0x00050082,0x0000000e,0x000000a2,0x000000a1,0x0000007e, + 0x0003003e,0x0000009f,0x000000a2,0x0004003d,0x0000000e,0x000000a4,0x00000019,0x0004003d, + 0x0000000e,0x000000a5,0x0000009f,0x000500c7,0x0000000e,0x000000a6,0x000000a4,0x000000a5, + 0x0003003e,0x000000a3,0x000000a6,0x0004003d,0x0000000e,0x000000a8,0x0000001a,0x00050082, + 0x0000000e,0x000000a9,0x000000a8,0x0000007e,0x000500c4,0x0000000e,0x000000aa,0x0000007e, + 0x000000a9,0x0003003e,0x000000a7,0x000000aa,0x0004003d,0x0000000e,0x000000ab,0x0000009b, + 0x0004003d,0x0000000e,0x000000ac,0x000000a3,0x0004003d,0x0000000e,0x000000ad,0x000000a7, + 0x000500ac,0x00000055,0x000000ae,0x000000ac,0x000000ad,0x000400a8,0x00000055,0x000000af, + 0x000000ae,0x000300f7,0x000000b1,0x00000000,0x000400fa,0x000000af,0x000000b0,0x000000b1, + 0x000200f8,0x000000b0,0x0004003d,0x0000000e,0x000000b2,0x000000a3,0x0004003d,0x0000000e, + 0x000000b3,0x000000a7,0x000500aa,0x00000055,0x000000b4,0x000000b2,0x000000b3,0x000300f7, + 0x000000b6,0x00000000,0x000400fa,0x000000b4,0x000000b5,0x000000b6,0x000200f8,0x000000b5, + 0x0004003d,0x0000000e,0x000000b7,0x0000009b,0x000500c7,0x0000000e,0x000000b8,0x000000b7, + 0x0000007e,0x000500ab,0x00000055,0x000000ba,0x000000b8,0x000000b9,0x000200f9,0x000000b6, + 0x000200f8,0x000000b6,0x000700f5,0x00000055,0x000000bb,0x000000b4,0x000000b0,0x000000ba, + 0x000000b5,0x000200f9,0x000000b1,0x000200f8,0x000000b1,0x000700f5,0x00000055,0x000000bc, + 0x000000ae,0x0000001c,0x000000bb,0x000000b6,0x000600a9,0x0000000e,0x000000bd,0x000000bc, + 0x0000007e,0x000000b9,0x00050080,0x0000000e,0x000000be,0x000000ab,0x000000bd,0x000200fe, + 0x000000be,0x00010038,0x00050036,0x0000000e,0x0000001f,0x00000000,0x0000001d,0x00030037, + 0x00000013,0x0000001e,0x000200f8,0x00000020,0x0004003b,0x000000c1,0x000000c2,0x00000007, + 0x0004003b,0x00000013,0x000000de,0x00000007,0x0004003b,0x00000013,0x000000e4,0x00000007, + 0x0004003b,0x00000013,0x000000ea,0x00000007,0x0004003b,0x00000013,0x000000f1,0x00000007, + 0x0004003b,0x00000013,0x000000f8,0x00000007,0x0004003b,0x00000013,0x000000fb,0x00000007, + 0x0004003b,0x00000013,0x00000104,0x00000007,0x0004003b,0x00000013,0x00000107,0x00000007, + 0x0004003b,0x00000013,0x00000110,0x00000007,0x0004003b,0x00000013,0x00000112,0x00000007, + 0x0004003b,0x00000013,0x00000117,0x00000007,0x0004003b,0x00000013,0x0000011a,0x00000007, + 0x0004003b,0x00000013,0x0000011c,0x00000007,0x0004003b,0x00000013,0x0000011e,0x00000007, + 0x0004003b,0x00000013,0x00000132,0x00000007,0x0004003d,0x0000000e,0x000000c3,0x0000001e, + 0x000500c7,0x0000000e,0x000000c5,0x000000c3,0x000000c4,0x000500aa,0x00000055,0x000000c6, + 0x000000c5,0x000000c4,0x000300f7,0x000000c8,0x00000000,0x000400fa,0x000000c6,0x000000c7, + 0x000000c8,0x000200f8,0x000000c7,0x0004003d,0x0000000e,0x000000c9,0x0000001e,0x000500c7, + 0x0000000e,0x000000cb,0x000000c9,0x000000ca,0x000500ab,0x00000055,0x000000cc,0x000000cb, + 0x000000b9,0x000200f9,0x000000c8,0x000200f8,0x000000c8,0x000700f5,0x00000055,0x000000cd, + 0x000000c6,0x00000020,0x000000cc,0x000000c7,0x0003003e,0x000000c2,0x000000cd,0x0004003d, + 0x00000055,0x000000ce,0x000000c2,0x000300f7,0x000000d0,0x00000000,0x000400fa,0x000000ce, + 0x000000cf,0x000000d0,0x000200f8,0x000000cf,0x000200fe,0x000000b9,0x000200f8,0x000000d0, + 0x0004003d,0x0000000e,0x000000d2,0x0000001e,0x000500c7,0x0000000e,0x000000d4,0x000000d2, + 0x000000d3,0x000500aa,0x00000055,0x000000d5,0x000000d4,0x000000b9,0x000300f7,0x000000d7, + 0x00000000,0x000400fa,0x000000d5,0x000000d6,0x000000d7,0x000200f8,0x000000d6,0x0004003d, + 0x0000000e,0x000000d8,0x0000001e,0x000500c2,0x0000000e,0x000000da,0x000000d8,0x000000d9, + 0x000500c7,0x0000000e,0x000000dc,0x000000da,0x000000db,0x000200fe,0x000000dc,0x000200f8, + 0x000000d7,0x0004003d,0x0000000e,0x000000df,0x0000001e,0x000500c7,0x0000000e,0x000000e1, + 0x000000df,0x000000e0,0x000500ab,0x00000055,0x000000e2,0x000000e1,0x000000b9,0x000600a9, + 0x0000000e,0x000000e3,0x000000e2,0x000000db,0x000000b9,0x0003003e,0x000000de,0x000000e3, + 0x0004003d,0x0000000e,0x000000e5,0x0000001e,0x000500c2,0x0000000e,0x000000e7,0x000000e5, + 0x000000e6,0x000500c7,0x0000000e,0x000000e9,0x000000e7,0x000000e8,0x0003003e,0x000000e4, + 0x000000e9,0x0004003d,0x0000000e,0x000000eb,0x0000001e,0x000500c7,0x0000000e,0x000000ec, + 0x000000eb,0x000000ca,0x0003003e,0x000000ea,0x000000ec,0x0004003d,0x0000000e,0x000000ed, + 0x000000e4,0x000500aa,0x00000055,0x000000ee,0x000000ed,0x000000e8,0x000300f7,0x000000f0, + 0x00000000,0x000400fa,0x000000ee,0x000000ef,0x000000f3,0x000200f8,0x000000ef,0x0003003e, + 0x000000f1,0x000000f2,0x000200f9,0x000000f0,0x000200f8,0x000000f3,0x0004003d,0x0000000e, + 0x000000f4,0x000000e4,0x000500b2,0x00000055,0x000000f5,0x000000f4,0x000000d9,0x000300f7, + 0x000000f7,0x00000000,0x000400fa,0x000000f5,0x000000f6,0x00000116,0x000200f8,0x000000f6, + 0x0004003d,0x0000000e,0x000000f9,0x000000e4,0x000500aa,0x00000055,0x000000fa,0x000000f9, + 0x000000b9,0x000300f7,0x000000fd,0x00000000,0x000400fa,0x000000fa,0x000000fc,0x000000ff, + 0x000200f8,0x000000fc,0x0004003d,0x0000000e,0x000000fe,0x000000ea,0x0003003e,0x000000fb, + 0x000000fe,0x000200f9,0x000000fd,0x000200f8,0x000000ff,0x0004003d,0x0000000e,0x00000101, + 0x000000ea,0x00050080,0x0000000e,0x00000102,0x00000100,0x00000101,0x0003003e,0x000000fb, + 0x00000102,0x000200f9,0x000000fd,0x000200f8,0x000000fd,0x0004003d,0x0000000e,0x00000103, + 0x000000fb,0x0003003e,0x000000f8,0x00000103,0x0004003d,0x0000000e,0x00000105,0x000000e4, + 0x000500aa,0x00000055,0x00000106,0x00000105,0x000000b9,0x000300f7,0x00000109,0x00000000, + 0x000400fa,0x00000106,0x00000108,0x0000010b,0x000200f8,0x00000108,0x0003003e,0x00000107, + 0x0000010a,0x000200f9,0x00000109,0x000200f8,0x0000010b,0x0004003d,0x0000000e,0x0000010d, + 0x000000e4,0x00050082,0x0000000e,0x0000010e,0x0000010c,0x0000010d,0x0003003e,0x00000107, + 0x0000010e,0x000200f9,0x00000109,0x000200f8,0x00000109,0x0004003d,0x0000000e,0x0000010f, + 0x00000107,0x0003003e,0x00000104,0x0000010f,0x0004003d,0x0000000e,0x00000111,0x000000f8, + 0x0003003e,0x00000110,0x00000111,0x0004003d,0x0000000e,0x00000113,0x00000104,0x0003003e, + 0x00000112,0x00000113,0x00060039,0x0000000e,0x00000114,0x0000001b,0x00000110,0x00000112, + 0x0007000c,0x0000000e,0x00000115,0x00000001,0x00000026,0x00000114,0x000000d9,0x0003003e, + 0x000000f1,0x00000115,0x000200f9,0x000000f7,0x000200f8,0x00000116,0x0004003d,0x0000000e, + 0x00000118,0x000000e4,0x00050082,0x0000000e,0x00000119,0x00000118,0x000000d9,0x0003003e, + 0x00000117,0x00000119,0x0004003d,0x0000000e,0x0000011d,0x000000ea,0x0003003e,0x0000011c, + 0x0000011d,0x0003003e,0x0000011e,0x0000011b,0x00060039,0x0000000e,0x0000011f,0x0000001b, + 0x0000011c,0x0000011e,0x0003003e,0x0000011a,0x0000011f,0x0004003d,0x0000000e,0x00000120, + 0x0000011a,0x000500aa,0x00000055,0x00000121,0x00000120,0x000000d9,0x000300f7,0x00000123, + 0x00000000,0x000400fa,0x00000121,0x00000122,0x00000123,0x000200f8,0x00000122,0x0003003e, + 0x0000011a,0x000000b9,0x0004003d,0x0000000e,0x00000124,0x00000117,0x00050080,0x0000000e, + 0x00000125,0x00000124,0x0000007e,0x0003003e,0x00000117,0x00000125,0x000200f9,0x00000123, + 0x000200f8,0x00000123,0x0004003d,0x0000000e,0x00000126,0x00000117,0x000500ac,0x00000055, + 0x00000127,0x00000126,0x0000010a,0x000400a8,0x00000055,0x00000128,0x00000127,0x000300f7, + 0x0000012a,0x00000000,0x000400fa,0x00000128,0x00000129,0x0000012a,0x000200f8,0x00000129, + 0x0004003d,0x0000000e,0x0000012b,0x00000117,0x000500aa,0x00000055,0x0000012c,0x0000012b, + 0x0000010a,0x0004003d,0x0000000e,0x0000012d,0x0000011a,0x000500ac,0x00000055,0x0000012f, + 0x0000012d,0x0000012e,0x000500a7,0x00000055,0x00000130,0x0000012c,0x0000012f,0x000200f9, + 0x0000012a,0x000200f8,0x0000012a,0x000700f5,0x00000055,0x00000131,0x00000127,0x00000123, + 0x00000130,0x00000129,0x000300f7,0x00000134,0x00000000,0x000400fa,0x00000131,0x00000133, + 0x00000135,0x000200f8,0x00000133,0x0003003e,0x00000132,0x000000f2,0x000200f9,0x00000134, + 0x000200f8,0x00000135,0x0004003d,0x0000000e,0x00000136,0x00000117,0x000500c4,0x0000000e, + 0x00000138,0x00000136,0x00000137,0x0004003d,0x0000000e,0x00000139,0x0000011a,0x000500c5, + 0x0000000e,0x0000013a,0x00000138,0x00000139,0x0003003e,0x00000132,0x0000013a,0x000200f9, + 0x00000134,0x000200f8,0x00000134,0x0004003d,0x0000000e,0x0000013b,0x00000132,0x0003003e, + 0x000000f1,0x0000013b,0x000200f9,0x000000f7,0x000200f8,0x000000f7,0x000200f9,0x000000f0, + 0x000200f8,0x000000f0,0x0004003d,0x0000000e,0x0000013c,0x000000de,0x0004003d,0x0000000e, + 0x0000013d,0x000000f1,0x000500c5,0x0000000e,0x0000013e,0x0000013c,0x0000013d,0x000200fe, + 0x0000013e,0x00010038,0x00050036,0x00000006,0x00000023,0x00000000,0x00000021,0x00030037, + 0x00000013,0x00000022,0x000200f8,0x00000024,0x0004003b,0x000000c1,0x00000141,0x00000007, + 0x0004003b,0x00000013,0x00000145,0x00000007,0x0004003b,0x00000013,0x00000149,0x00000007, + 0x0004003b,0x00000007,0x00000150,0x00000007,0x0004003b,0x00000007,0x0000016d,0x00000007, + 0x0004003d,0x0000000e,0x00000142,0x00000022,0x000500c7,0x0000000e,0x00000143,0x00000142, + 0x000000db,0x000500ab,0x00000055,0x00000144,0x00000143,0x000000b9,0x0003003e,0x00000141, + 0x00000144,0x0004003d,0x0000000e,0x00000146,0x00000022,0x000500c2,0x0000000e,0x00000147, + 0x00000146,0x00000137,0x000500c7,0x0000000e,0x00000148,0x00000147,0x0000010a,0x0003003e, + 0x00000145,0x00000148,0x0004003d,0x0000000e,0x0000014a,0x00000022,0x000500c7,0x0000000e, + 0x0000014b,0x0000014a,0x0000011b,0x0003003e,0x00000149,0x0000014b,0x0004003d,0x0000000e, + 0x0000014c,0x00000145,0x000500aa,0x00000055,0x0000014d,0x0000014c,0x000000b9,0x000300f7, + 0x0000014f,0x00000000,0x000400fa,0x0000014d,0x0000014e,0x00000155,0x000200f8,0x0000014e, + 0x0004003d,0x0000000e,0x00000151,0x00000149,0x00040070,0x00000006,0x00000152,0x00000151, + 0x00050085,0x00000006,0x00000154,0x00000152,0x00000153,0x0003003e,0x00000150,0x00000154, + 0x000200f9,0x0000014f,0x000200f8,0x00000155,0x0004003d,0x0000000e,0x00000156,0x00000145, + 0x000500aa,0x00000055,0x00000157,0x00000156,0x0000010a,0x0004003d,0x0000000e,0x00000158, + 0x00000149,0x000500aa,0x00000055,0x00000159,0x00000158,0x0000011b,0x000500a7,0x00000055, + 0x0000015a,0x00000157,0x00000159,0x000300f7,0x0000015c,0x00000000,0x000400fa,0x0000015a, + 0x0000015b,0x0000015e,0x000200f8,0x0000015b,0x0003003e,0x00000150,0x0000015d,0x000200f9, + 0x0000015c,0x000200f8,0x0000015e,0x0004003d,0x0000000e,0x00000160,0x00000149,0x00040070, + 0x00000006,0x00000161,0x00000160,0x00050085,0x00000006,0x00000163,0x00000161,0x00000162, + 0x00050081,0x00000006,0x00000164,0x0000015f,0x00000163,0x0004003d,0x0000000e,0x00000165, + 0x00000145,0x00050080,0x0000000e,0x00000167,0x00000165,0x00000166,0x000500c4,0x0000000e, + 0x00000169,0x00000167,0x00000168,0x0004007c,0x00000006,0x0000016a,0x00000169,0x00050085, + 0x00000006,0x0000016b,0x00000164,0x0000016a,0x0003003e,0x00000150,0x0000016b,0x000200f9, + 0x0000015c,0x000200f8,0x0000015c,0x000200f9,0x0000014f,0x000200f8,0x0000014f,0x0004003d, + 0x00000055,0x0000016c,0x00000141,0x000300f7,0x0000016f,0x00000000,0x000400fa,0x0000016c, + 0x0000016e,0x00000172,0x000200f8,0x0000016e,0x0004003d,0x00000006,0x00000170,0x00000150, + 0x0004007f,0x00000006,0x00000171,0x00000170,0x0003003e,0x0000016d,0x00000171,0x000200f9, + 0x0000016f,0x000200f8,0x00000172,0x0004003d,0x00000006,0x00000173,0x00000150,0x0003003e, + 0x0000016d,0x00000173,0x000200f9,0x0000016f,0x000200f8,0x0000016f,0x0004003d,0x00000006, + 0x00000174,0x0000016d,0x000200fe,0x00000174,0x00010038,0x00050036,0x0000000c,0x00000026, + 0x00000000,0x00000014,0x00030037,0x00000013,0x00000025,0x000200f8,0x00000027,0x0004003b, + 0x00000013,0x00000177,0x00000007,0x0004003d,0x0000000e,0x00000178,0x00000025,0x0003003e, + 0x00000177,0x00000178,0x00050039,0x00000006,0x00000179,0x00000023,0x00000177,0x00040073, + 0x0000000c,0x0000017a,0x00000179,0x000200fe,0x0000017a,0x00010038,0x00050036,0x00000006, + 0x0000002a,0x00000000,0x00000028,0x00030037,0x0000000d,0x00000029,0x000200f8,0x0000002b, + 0x0004003b,0x00000013,0x0000017d,0x00000007,0x0004003b,0x0000000d,0x0000017e,0x00000007, + 0x0004003b,0x00000007,0x00000184,0x00000007,0x0004003b,0x00000013,0x0000018e,0x00000007, + 0x0004003d,0x0000000c,0x0000017f,0x00000029,0x0003003e,0x0000017e,0x0000017f,0x00050039, + 0x0000000e,0x00000180,0x00000011,0x0000017e,0x0003003e,0x0000017d,0x00000180,0x0004003d, + 0x0000000e,0x00000181,0x0000017d,0x000500ae,0x00000055,0x00000183,0x00000181,0x00000182, + 0x000300f7,0x00000186,0x00000000,0x000400fa,0x00000183,0x00000185,0x00000188,0x000200f8, + 0x00000185,0x0003003e,0x00000184,0x00000187,0x000200f9,0x00000186,0x000200f8,0x00000188, + 0x0004003d,0x0000000c,0x0000018a,0x00000029,0x00040073,0x00000006,0x0000018b,0x0000018a, + 0x0004003d,0x0000000e,0x0000018c,0x0000017d,0x00050080,0x0000000e,0x0000018d,0x0000018c, + 0x0000007e,0x0003003e,0x0000018e,0x0000018d,0x00050039,0x0000000c,0x0000018f,0x00000016, + 0x0000018e,0x00040073,0x00000006,0x00000190,0x0000018f,0x00050081,0x00000006,0x00000191, + 0x0000018b,0x00000190,0x00050085,0x00000006,0x00000192,0x00000189,0x00000191,0x0003003e, + 0x00000184,0x00000192,0x000200f9,0x00000186,0x000200f8,0x00000186,0x0004003d,0x00000006, + 0x00000193,0x00000184,0x000200fe,0x00000193,0x00010038,0x00050036,0x00000006,0x0000002d, + 0x00000000,0x00000028,0x00030037,0x0000000d,0x0000002c,0x000200f8,0x0000002e,0x0004003b, + 0x0000000d,0x00000198,0x00000007,0x0004003b,0x00000013,0x0000019c,0x00000007,0x0004003d, + 0x0000000c,0x00000196,0x0000002c,0x00040073,0x00000006,0x00000197,0x00000196,0x0004003d, + 0x0000000c,0x00000199,0x0000002c,0x0003003e,0x00000198,0x00000199,0x00050039,0x0000000e, + 0x0000019a,0x00000011,0x00000198,0x00050082,0x0000000e,0x0000019b,0x0000019a,0x0000007e, + 0x0003003e,0x0000019c,0x0000019b,0x00050039,0x0000000c,0x0000019d,0x00000016,0x0000019c, + 0x00040073,0x00000006,0x0000019e,0x0000019d,0x00050081,0x00000006,0x0000019f,0x00000197, + 0x0000019e,0x00050085,0x00000006,0x000001a0,0x00000189,0x0000019f,0x000200fe,0x000001a0, + 0x00010038,0x00050036,0x0000000c,0x00000031,0x00000000,0x0000002f,0x00030037,0x0000000d, + 0x00000030,0x000200f8,0x00000032,0x0004003b,0x0000000d,0x000001a3,0x00000007,0x0004003b, + 0x00000013,0x000001a7,0x00000007,0x0004003d,0x0000000c,0x000001a4,0x00000030,0x0003003e, + 0x000001a3,0x000001a4,0x00050039,0x0000000e,0x000001a5,0x00000011,0x000001a3,0x00050080, + 0x0000000e,0x000001a6,0x000001a5,0x0000007e,0x0003003e,0x000001a7,0x000001a6,0x00050039, + 0x0000000c,0x000001a8,0x00000016,0x000001a7,0x000200fe,0x000001a8,0x00010038,0x00050036, + 0x0000000c,0x00000034,0x00000000,0x0000002f,0x00030037,0x0000000d,0x00000033,0x000200f8, + 0x00000035,0x0004003b,0x0000000d,0x000001ab,0x00000007,0x0004003b,0x00000013,0x000001af, + 0x00000007,0x0004003d,0x0000000c,0x000001ac,0x00000033,0x0003003e,0x000001ab,0x000001ac, + 0x00050039,0x0000000e,0x000001ad,0x00000011,0x000001ab,0x00050082,0x0000000e,0x000001ae, + 0x000001ad,0x0000007e,0x0003003e,0x000001af,0x000001ae,0x00050039,0x0000000c,0x000001b0, + 0x00000016,0x000001af,0x000200fe,0x000001b0,0x00010038,0x00050036,0x0000000c,0x00000037, + 0x00000000,0x0000002f,0x00030037,0x0000000d,0x00000036,0x000200f8,0x00000038,0x0004003b, + 0x00000007,0x000001b3,0x00000007,0x0004003b,0x0000000d,0x000001c5,0x00000007,0x0004003b, + 0x00000007,0x000001c8,0x00000007,0x0004003b,0x000001d6,0x000001d7,0x00000007,0x0004003b, + 0x00000007,0x000001e1,0x00000007,0x0004003b,0x0000000d,0x000001e2,0x00000007,0x0004003b, + 0x0000000d,0x000001eb,0x00000007,0x0004003b,0x00000007,0x000001ee,0x00000007,0x0004003b, + 0x0000000d,0x000001ef,0x00000007,0x0004003b,0x0000000d,0x000001fb,0x00000007,0x0004003d, + 0x0000000c,0x000001b4,0x00000036,0x00040073,0x00000006,0x000001b5,0x000001b4,0x0003003e, + 0x000001b3,0x000001b5,0x0004003d,0x00000006,0x000001b6,0x000001b3,0x000500ba,0x00000055, + 0x000001b7,0x000001b6,0x0000015d,0x000400a8,0x00000055,0x000001b8,0x000001b7,0x000400a8, + 0x00000055,0x000001b9,0x000001b8,0x000300f7,0x000001bb,0x00000000,0x000400fa,0x000001b9, + 0x000001ba,0x000001bb,0x000200f8,0x000001ba,0x0004003d,0x00000006,0x000001bc,0x000001b3, + 0x0004009d,0x00000055,0x000001bd,0x000001bc,0x000200f9,0x000001bb,0x000200f8,0x000001bb, + 0x000700f5,0x00000055,0x000001be,0x000001b8,0x00000038,0x000001bd,0x000001ba,0x000300f7, + 0x000001c0,0x00000000,0x000400fa,0x000001be,0x000001bf,0x000001c0,0x000200f8,0x000001bf, + 0x0004003d,0x00000006,0x000001c1,0x000001b3,0x00050088,0x00000006,0x000001c2,0x0000015f, + 0x000001c1,0x00040073,0x0000000c,0x000001c3,0x000001c2,0x000200fe,0x000001c3,0x000200f8, + 0x000001c0,0x0004003d,0x00000006,0x000001c6,0x000001b3,0x00050088,0x00000006,0x000001c7, + 0x0000015f,0x000001c6,0x0003003e,0x000001c8,0x000001c7,0x00050039,0x00000006,0x000001c9, + 0x0000000a,0x000001c8,0x00040073,0x0000000c,0x000001ca,0x000001c9,0x0003003e,0x000001c5, + 0x000001ca,0x0004003d,0x0000000c,0x000001cb,0x000001c5,0x0004009d,0x00000055,0x000001cc, + 0x000001cb,0x0004003d,0x0000000c,0x000001cd,0x000001c5,0x000500b4,0x00000055,0x000001cf, + 0x000001cd,0x000001ce,0x000500a6,0x00000055,0x000001d0,0x000001cc,0x000001cf,0x000300f7, + 0x000001d2,0x00000000,0x000400fa,0x000001d0,0x000001d1,0x000001d2,0x000200f8,0x000001d1, + 0x0004003d,0x0000000c,0x000001d3,0x000001c5,0x000200fe,0x000001d3,0x000200f8,0x000001d2, + 0x0003003e,0x000001d7,0x000001d8,0x000200f9,0x000001d9,0x000200f8,0x000001d9,0x000400f6, + 0x000001db,0x000001dc,0x00000000,0x000200f9,0x000001dd,0x000200f8,0x000001dd,0x0004003d, + 0x000001d5,0x000001de,0x000001d7,0x000500b1,0x00000055,0x000001e0,0x000001de,0x000001df, + 0x000400fa,0x000001e0,0x000001da,0x000001db,0x000200f8,0x000001da,0x0004003d,0x0000000c, + 0x000001e3,0x000001c5,0x0003003e,0x000001e2,0x000001e3,0x00050039,0x00000006,0x000001e4, + 0x0000002a,0x000001e2,0x0004003d,0x00000006,0x000001e5,0x000001b3,0x00050085,0x00000006, + 0x000001e6,0x000001e4,0x000001e5,0x0003003e,0x000001e1,0x000001e6,0x0004003d,0x00000006, + 0x000001e7,0x000001e1,0x000500b8,0x00000055,0x000001e8,0x000001e7,0x0000015f,0x000300f7, + 0x000001ea,0x00000000,0x000400fa,0x000001e8,0x000001e9,0x000001ea,0x000200f8,0x000001e9, + 0x0004003d,0x0000000c,0x000001ec,0x000001c5,0x0003003e,0x000001eb,0x000001ec,0x00050039, + 0x0000000c,0x000001ed,0x00000031,0x000001eb,0x0003003e,0x000001c5,0x000001ed,0x000200f9, + 0x000001ea,0x000200f8,0x000001ea,0x0004003d,0x0000000c,0x000001f0,0x000001c5,0x0003003e, + 0x000001ef,0x000001f0,0x00050039,0x00000006,0x000001f1,0x0000002d,0x000001ef,0x0004003d, + 0x00000006,0x000001f2,0x000001b3,0x00050085,0x00000006,0x000001f3,0x000001f1,0x000001f2, + 0x0003003e,0x000001ee,0x000001f3,0x0004003d,0x0000000c,0x000001f4,0x000001c5,0x000500ba, + 0x00000055,0x000001f5,0x000001f4,0x000001ce,0x0004003d,0x00000006,0x000001f6,0x000001ee, + 0x000500ba,0x00000055,0x000001f7,0x000001f6,0x0000015f,0x000500a7,0x00000055,0x000001f8, + 0x000001f5,0x000001f7,0x000300f7,0x000001fa,0x00000000,0x000400fa,0x000001f8,0x000001f9, + 0x000001fa,0x000200f8,0x000001f9,0x0004003d,0x0000000c,0x000001fc,0x000001c5,0x0003003e, + 0x000001fb,0x000001fc,0x00050039,0x0000000c,0x000001fd,0x00000034,0x000001fb,0x0003003e, + 0x000001c5,0x000001fd,0x000200f9,0x000001fa,0x000200f8,0x000001fa,0x000200f9,0x000001dc, + 0x000200f8,0x000001dc,0x0004003d,0x000001d5,0x000001fe,0x000001d7,0x00050080,0x000001d5, + 0x00000200,0x000001fe,0x000001ff,0x0003003e,0x000001d7,0x00000200,0x000200f9,0x000001d9, + 0x000200f8,0x000001db,0x0004003d,0x0000000c,0x00000201,0x000001c5,0x000200fe,0x00000201, + 0x00010038,0x00050036,0x0000000e,0x0000003a,0x00000000,0x0000001d,0x00030037,0x00000013, + 0x00000039,0x000200f8,0x0000003b,0x0004003b,0x00000013,0x00000204,0x00000007,0x0004003b, + 0x00000013,0x00000208,0x00000007,0x0004003b,0x00000013,0x0000020b,0x00000007,0x0004003b, + 0x00000013,0x00000212,0x00000007,0x0004003d,0x0000000e,0x00000205,0x00000039,0x000500c2, + 0x0000000e,0x00000207,0x00000205,0x00000206,0x0003003e,0x00000204,0x00000207,0x0004003d, + 0x0000000e,0x00000209,0x00000039,0x000500c7,0x0000000e,0x0000020a,0x00000209,0x0000010a, + 0x0003003e,0x00000208,0x0000020a,0x0004003d,0x0000000e,0x0000020c,0x00000204,0x000500c7, + 0x0000000e,0x0000020d,0x0000020c,0x0000007e,0x00050084,0x0000000e,0x0000020e,0x0000020d, + 0x00000206,0x0004003d,0x0000000e,0x0000020f,0x00000208,0x000500c7,0x0000000e,0x00000210, + 0x0000020f,0x00000137,0x00050080,0x0000000e,0x00000211,0x0000020e,0x00000210,0x0003003e, + 0x0000020b,0x00000211,0x0004003d,0x0000000e,0x00000213,0x00000204,0x000500c2,0x0000000e, + 0x00000214,0x00000213,0x0000007e,0x00050084,0x0000000e,0x00000215,0x00000214,0x00000206, + 0x0004003d,0x0000000e,0x00000216,0x00000208,0x000500c2,0x0000000e,0x00000218,0x00000216, + 0x00000217,0x00050080,0x0000000e,0x00000219,0x00000215,0x00000218,0x0003003e,0x00000212, + 0x00000219,0x0004003d,0x0000000e,0x0000021a,0x00000212,0x00050084,0x0000000e,0x0000021b, + 0x0000021a,0x000000d9,0x0004003d,0x0000000e,0x0000021c,0x0000020b,0x00050080,0x0000000e, + 0x0000021d,0x0000021b,0x0000021c,0x000200fe,0x0000021d,0x00010038,0x00050036,0x0000000c, + 0x0000003d,0x00000000,0x0000002f,0x00030037,0x0000000d,0x0000003c,0x000200f8,0x0000003e, + 0x0004003b,0x00000007,0x00000220,0x00000007,0x0004003b,0x0000000d,0x00000226,0x00000007, + 0x0004003b,0x00000007,0x00000227,0x00000007,0x0004003b,0x00000013,0x0000022e,0x00000007, + 0x0004003b,0x0000000d,0x0000022f,0x00000007,0x0004003b,0x00000013,0x00000232,0x00000007, + 0x0004003b,0x00000013,0x00000238,0x00000007,0x0004003d,0x0000000c,0x00000221,0x0000003c, + 0x00040073,0x00000006,0x00000222,0x00000221,0x0008000c,0x00000006,0x00000225,0x00000001, + 0x00000032,0x00000222,0x00000223,0x00000224,0x0003003e,0x00000220,0x00000225,0x0004003d, + 0x00000006,0x00000228,0x00000220,0x0003003e,0x00000227,0x00000228,0x00050039,0x00000006, + 0x00000229,0x0000000a,0x00000227,0x00040073,0x0000000c,0x0000022a,0x00000229,0x0008000c, + 0x0000000c,0x0000022d,0x00000001,0x0000002b,0x0000022a,0x0000022b,0x0000022c,0x0003003e, + 0x00000226,0x0000022d,0x0004003d,0x0000000c,0x00000230,0x00000226,0x0003003e,0x0000022f, + 0x00000230,0x00050039,0x0000000e,0x00000231,0x00000011,0x0000022f,0x0003003e,0x0000022e, + 0x00000231,0x0004003d,0x0000000e,0x00000233,0x0000022e,0x000500c4,0x0000000e,0x00000235, + 0x00000233,0x00000234,0x00050080,0x0000000e,0x00000236,0x00000235,0x000000e0,0x000500c7, + 0x0000000e,0x00000237,0x00000236,0x00000095,0x0003003e,0x00000232,0x00000237,0x0004003d, + 0x0000000e,0x00000239,0x00000232,0x0003003e,0x00000238,0x00000239,0x00050039,0x0000000c, + 0x0000023a,0x00000016,0x00000238,0x000200fe,0x0000023a,0x00010038,0x00050036,0x0000000c, + 0x00000043,0x00000000,0x0000003f,0x00030037,0x00000013,0x00000040,0x00030037,0x00000013, + 0x00000041,0x00030037,0x00000013,0x00000042,0x000200f8,0x00000044,0x0004003b,0x00000013, + 0x0000023d,0x00000007,0x0004003b,0x0000000d,0x00000242,0x00000007,0x0004003b,0x0000000d, + 0x00000257,0x00000007,0x0004003b,0x0000000d,0x00000268,0x00000007,0x0004003b,0x0000000d, + 0x0000027a,0x00000007,0x0004003b,0x0000000d,0x0000028c,0x00000007,0x0004003b,0x0000000d, + 0x00000290,0x00000007,0x0004003d,0x0000000e,0x0000023e,0x00000041,0x00050084,0x0000000e, + 0x0000023f,0x0000023e,0x00000217,0x0004003d,0x0000000e,0x00000240,0x00000042,0x00050080, + 0x0000000e,0x00000241,0x0000023f,0x00000240,0x0003003e,0x0000023d,0x00000241,0x0004003d, + 0x0000000e,0x00000247,0x00000040,0x00050084,0x0000000e,0x00000249,0x00000247,0x00000248, + 0x0004003d,0x0000000e,0x0000024a,0x0000023d,0x00050080,0x0000000e,0x0000024b,0x00000249, + 0x0000024a,0x00050041,0x0000024c,0x0000024d,0x00000246,0x0000024b,0x0006003d,0x0000000c, + 0x0000024e,0x0000024d,0x00000030,0x00000217,0x0004003d,0x0000000e,0x0000024f,0x00000040, + 0x00050084,0x0000000e,0x00000250,0x0000024f,0x00000248,0x0004003d,0x0000000e,0x00000251, + 0x0000023d,0x00050080,0x0000000e,0x00000252,0x00000250,0x00000251,0x00050080,0x0000000e, + 0x00000253,0x00000252,0x000000d9,0x00050041,0x0000024c,0x00000254,0x00000246,0x00000253, + 0x0006003d,0x0000000c,0x00000255,0x00000254,0x00000030,0x00000217,0x00050081,0x0000000c, + 0x00000256,0x0000024e,0x00000255,0x0003003e,0x00000242,0x00000256,0x0004003d,0x0000000e, + 0x00000258,0x00000040,0x00050084,0x0000000e,0x00000259,0x00000258,0x00000248,0x0004003d, + 0x0000000e,0x0000025a,0x0000023d,0x00050080,0x0000000e,0x0000025b,0x00000259,0x0000025a, + 0x00050080,0x0000000e,0x0000025c,0x0000025b,0x0000010c,0x00050041,0x0000024c,0x0000025d, + 0x00000246,0x0000025c,0x0006003d,0x0000000c,0x0000025e,0x0000025d,0x00000030,0x00000217, + 0x0004003d,0x0000000e,0x0000025f,0x00000040,0x00050084,0x0000000e,0x00000260,0x0000025f, + 0x00000248,0x0004003d,0x0000000e,0x00000261,0x0000023d,0x00050080,0x0000000e,0x00000262, + 0x00000260,0x00000261,0x00050080,0x0000000e,0x00000264,0x00000262,0x00000263,0x00050041, + 0x0000024c,0x00000265,0x00000246,0x00000264,0x0006003d,0x0000000c,0x00000266,0x00000265, + 0x00000030,0x00000217,0x00050081,0x0000000c,0x00000267,0x0000025e,0x00000266,0x0003003e, + 0x00000257,0x00000267,0x0004003d,0x0000000e,0x00000269,0x00000040,0x00050084,0x0000000e, + 0x0000026a,0x00000269,0x00000248,0x0004003d,0x0000000e,0x0000026b,0x0000023d,0x00050080, + 0x0000000e,0x0000026c,0x0000026a,0x0000026b,0x00050080,0x0000000e,0x0000026e,0x0000026c, + 0x0000026d,0x00050041,0x0000024c,0x0000026f,0x00000246,0x0000026e,0x0006003d,0x0000000c, + 0x00000270,0x0000026f,0x00000030,0x00000217,0x0004003d,0x0000000e,0x00000271,0x00000040, + 0x00050084,0x0000000e,0x00000272,0x00000271,0x00000248,0x0004003d,0x0000000e,0x00000273, + 0x0000023d,0x00050080,0x0000000e,0x00000274,0x00000272,0x00000273,0x00050080,0x0000000e, + 0x00000276,0x00000274,0x00000275,0x00050041,0x0000024c,0x00000277,0x00000246,0x00000276, + 0x0006003d,0x0000000c,0x00000278,0x00000277,0x00000030,0x00000217,0x00050081,0x0000000c, + 0x00000279,0x00000270,0x00000278,0x0003003e,0x00000268,0x00000279,0x0004003d,0x0000000e, + 0x0000027b,0x00000040,0x00050084,0x0000000e,0x0000027c,0x0000027b,0x00000248,0x0004003d, + 0x0000000e,0x0000027d,0x0000023d,0x00050080,0x0000000e,0x0000027e,0x0000027c,0x0000027d, + 0x00050080,0x0000000e,0x00000280,0x0000027e,0x0000027f,0x00050041,0x0000024c,0x00000281, + 0x00000246,0x00000280,0x0006003d,0x0000000c,0x00000282,0x00000281,0x00000030,0x00000217, + 0x0004003d,0x0000000e,0x00000283,0x00000040,0x00050084,0x0000000e,0x00000284,0x00000283, + 0x00000248,0x0004003d,0x0000000e,0x00000285,0x0000023d,0x00050080,0x0000000e,0x00000286, + 0x00000284,0x00000285,0x00050080,0x0000000e,0x00000288,0x00000286,0x00000287,0x00050041, + 0x0000024c,0x00000289,0x00000246,0x00000288,0x0006003d,0x0000000c,0x0000028a,0x00000289, + 0x00000030,0x00000217,0x00050081,0x0000000c,0x0000028b,0x00000282,0x0000028a,0x0003003e, + 0x0000027a,0x0000028b,0x0004003d,0x0000000c,0x0000028d,0x00000242,0x0004003d,0x0000000c, + 0x0000028e,0x00000257,0x00050081,0x0000000c,0x0000028f,0x0000028d,0x0000028e,0x0003003e, + 0x0000028c,0x0000028f,0x0004003d,0x0000000c,0x00000291,0x0000028c,0x0004003d,0x0000000c, + 0x00000292,0x00000268,0x00050081,0x0000000c,0x00000293,0x00000291,0x00000292,0x0003003e, + 0x00000290,0x00000293,0x0004003d,0x0000000c,0x00000294,0x00000290,0x0004003d,0x0000000c, + 0x00000295,0x0000027a,0x00050081,0x0000000c,0x00000296,0x00000294,0x00000295,0x000200fe, + 0x00000296,0x00010038,0x00050036,0x0000000c,0x00000046,0x00000000,0x00000014,0x00030037, + 0x00000013,0x00000045,0x000200f8,0x00000047,0x0004003b,0x0000000d,0x00000299,0x00000007, + 0x0004003b,0x00000013,0x0000029a,0x00000007,0x0004003b,0x00000013,0x0000029c,0x00000007, + 0x0004003b,0x00000013,0x0000029d,0x00000007,0x0004003b,0x00000013,0x0000029f,0x00000007, + 0x0004003b,0x00000013,0x000002a1,0x00000007,0x0004003b,0x00000013,0x000002a2,0x00000007, + 0x0004003b,0x0000000d,0x000002a5,0x00000007,0x0004003b,0x00000013,0x000002a7,0x00000007, + 0x0004003b,0x00000013,0x000002a9,0x00000007,0x0004003b,0x00000013,0x000002aa,0x00000007, + 0x0004003b,0x0000000d,0x000002ad,0x00000007,0x0004003b,0x00000013,0x000002af,0x00000007, + 0x0004003b,0x00000013,0x000002b1,0x00000007,0x0004003b,0x00000013,0x000002b2,0x00000007, + 0x0004003b,0x0000000d,0x000002b5,0x00000007,0x0004003b,0x00000013,0x000002b6,0x00000007, + 0x0004003b,0x00000013,0x000002b8,0x00000007,0x0004003b,0x00000013,0x000002b9,0x00000007, + 0x0004003b,0x00000013,0x000002bb,0x00000007,0x0004003b,0x00000013,0x000002bd,0x00000007, + 0x0004003b,0x00000013,0x000002be,0x00000007,0x0004003b,0x0000000d,0x000002c1,0x00000007, + 0x0004003b,0x00000013,0x000002c3,0x00000007,0x0004003b,0x00000013,0x000002c5,0x00000007, + 0x0004003b,0x00000013,0x000002c6,0x00000007,0x0004003b,0x0000000d,0x000002c9,0x00000007, + 0x0004003b,0x00000013,0x000002cb,0x00000007,0x0004003b,0x00000013,0x000002cd,0x00000007, + 0x0004003b,0x00000013,0x000002ce,0x00000007,0x0004003d,0x0000000e,0x0000029b,0x00000045, + 0x0003003e,0x0000029a,0x0000029b,0x0003003e,0x0000029c,0x000000b9,0x0003003e,0x0000029d, + 0x000000b9,0x00070039,0x0000000c,0x0000029e,0x00000043,0x0000029a,0x0000029c,0x0000029d, + 0x0004003d,0x0000000e,0x000002a0,0x00000045,0x0003003e,0x0000029f,0x000002a0,0x0003003e, + 0x000002a1,0x0000007e,0x0003003e,0x000002a2,0x000000b9,0x00070039,0x0000000c,0x000002a3, + 0x00000043,0x0000029f,0x000002a1,0x000002a2,0x00050081,0x0000000c,0x000002a4,0x0000029e, + 0x000002a3,0x0003003e,0x00000299,0x000002a4,0x0004003d,0x0000000c,0x000002a6,0x00000299, + 0x0004003d,0x0000000e,0x000002a8,0x00000045,0x0003003e,0x000002a7,0x000002a8,0x0003003e, + 0x000002a9,0x00000217,0x0003003e,0x000002aa,0x000000b9,0x00070039,0x0000000c,0x000002ab, + 0x00000043,0x000002a7,0x000002a9,0x000002aa,0x00050081,0x0000000c,0x000002ac,0x000002a6, + 0x000002ab,0x0003003e,0x000002a5,0x000002ac,0x0004003d,0x0000000c,0x000002ae,0x000002a5, + 0x0004003d,0x0000000e,0x000002b0,0x00000045,0x0003003e,0x000002af,0x000002b0,0x0003003e, + 0x000002b1,0x00000137,0x0003003e,0x000002b2,0x000000b9,0x00070039,0x0000000c,0x000002b3, + 0x00000043,0x000002af,0x000002b1,0x000002b2,0x00050081,0x0000000c,0x000002b4,0x000002ae, + 0x000002b3,0x0003003e,0x000002ad,0x000002b4,0x0004003d,0x0000000e,0x000002b7,0x00000045, + 0x0003003e,0x000002b6,0x000002b7,0x0003003e,0x000002b8,0x000000b9,0x0003003e,0x000002b9, + 0x0000007e,0x00070039,0x0000000c,0x000002ba,0x00000043,0x000002b6,0x000002b8,0x000002b9, + 0x0004003d,0x0000000e,0x000002bc,0x00000045,0x0003003e,0x000002bb,0x000002bc,0x0003003e, + 0x000002bd,0x0000007e,0x0003003e,0x000002be,0x0000007e,0x00070039,0x0000000c,0x000002bf, + 0x00000043,0x000002bb,0x000002bd,0x000002be,0x00050081,0x0000000c,0x000002c0,0x000002ba, + 0x000002bf,0x0003003e,0x000002b5,0x000002c0,0x0004003d,0x0000000c,0x000002c2,0x000002b5, + 0x0004003d,0x0000000e,0x000002c4,0x00000045,0x0003003e,0x000002c3,0x000002c4,0x0003003e, + 0x000002c5,0x00000217,0x0003003e,0x000002c6,0x0000007e,0x00070039,0x0000000c,0x000002c7, + 0x00000043,0x000002c3,0x000002c5,0x000002c6,0x00050081,0x0000000c,0x000002c8,0x000002c2, + 0x000002c7,0x0003003e,0x000002c1,0x000002c8,0x0004003d,0x0000000c,0x000002ca,0x000002c1, + 0x0004003d,0x0000000e,0x000002cc,0x00000045,0x0003003e,0x000002cb,0x000002cc,0x0003003e, + 0x000002cd,0x00000137,0x0003003e,0x000002ce,0x0000007e,0x00070039,0x0000000c,0x000002cf, + 0x00000043,0x000002cb,0x000002cd,0x000002ce,0x00050081,0x0000000c,0x000002d0,0x000002ca, + 0x000002cf,0x0003003e,0x000002c9,0x000002d0,0x0004003d,0x0000000c,0x000002d1,0x000002ad, + 0x0004003d,0x0000000c,0x000002d2,0x000002c9,0x00050081,0x0000000c,0x000002d3,0x000002d1, + 0x000002d2,0x000200fe,0x000002d3,0x00010038, +}; +inline constexpr uint32_t k_f16_k16_f32__global_attend[] = { + 0x07230203,0x00010600,0x0008000b,0x00000553,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x0000003d,0x00020011,0x00001160,0x00020011, + 0x000014e1,0x00020011,0x00001786,0x0008000a,0x5f565053,0x5f52484b,0x706f6f63,0x74617265, + 0x5f657669,0x7274616d,0x00007869,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e, + 0x00000000,0x0003000e,0x00000000,0x00000003,0x0011000f,0x00000005,0x00000004,0x6e69616d, + 0x00000000,0x00000297,0x00000321,0x00000326,0x0000032f,0x0000034b,0x00000351,0x0000037a, + 0x00000391,0x000003f8,0x0000043f,0x00000467,0x0000053e,0x00060010,0x00000004,0x00000011, + 0x00000020,0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc,0x00090004,0x455f4c47, + 0x635f5458,0x72746e6f,0x665f6c6f,0x5f776f6c,0x72747461,0x74756269,0x00007365,0x00080004, + 0x455f4c47,0x735f5458,0x65646168,0x36315f72,0x5f746962,0x726f7473,0x00656761,0x00080004, + 0x455f4c47,0x735f5458,0x65646168,0x62385f72,0x735f7469,0x61726f74,0x00006567,0x000b0004, + 0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d, + 0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79, + 0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45, + 0x64756c63,0x69645f65,0x74636572,0x00657669,0x00080004,0x4b5f4c47,0x635f5248,0x65706f6f, + 0x69746172,0x6d5f6576,0x69727461,0x00000078,0x00090004,0x4b5f4c47,0x6d5f5248,0x726f6d65, + 0x63735f79,0x5f65706f,0x616d6573,0x6369746e,0x00000073,0x00090004,0x4b5f4c47,0x735f5248, + 0x65646168,0x75735f72,0x6f726762,0x625f7075,0x63697361,0x00000000,0x00040005,0x00000004, + 0x6e69616d,0x00000000,0x00060005,0x0000000a,0x6e756f72,0x36314664,0x3b316628,0x00000000, + 0x00040005,0x00000009,0x756c6176,0x00000065,0x00060005,0x00000011,0x42363166,0x28737469, + 0x31363166,0x0000003b,0x00040005,0x00000010,0x756c6176,0x00000065,0x00060005,0x00000016, + 0x46363166,0x426d6f72,0x28737469,0x003b3175,0x00040005,0x00000015,0x73746962,0x00000000, + 0x00060005,0x0000001b,0x66696873,0x656e5274,0x3b317528,0x003b3175,0x00040005,0x00000019, + 0x756c6176,0x00000065,0x00040005,0x0000001a,0x66696873,0x00000074,0x00080005,0x0000001f, + 0x336d3465,0x65646f43,0x6d6f7246,0x42363146,0x28737469,0x003b3175,0x00050005,0x0000001e, + 0x666c6168,0x73746942,0x00000000,0x00060005,0x00000023,0x336d3465,0x33466f54,0x31752832, + 0x0000003b,0x00040005,0x00000022,0x73746962,0x00000000,0x00060005,0x00000026,0x7246706f, + 0x6f436d6f,0x75286564,0x00003b31,0x00040005,0x00000025,0x65646f63,0x00000000,0x00080005, + 0x0000002a,0x666c6168,0x7064694d,0x746e696f,0x766f6241,0x31662865,0x003b3136,0x00030005, + 0x00000029,0x00000068,0x00080005,0x0000002d,0x666c6168,0x7064694d,0x746e696f,0x6f6c6542, + 0x31662877,0x003b3136,0x00030005,0x0000002c,0x00000068,0x00060005,0x00000031,0x666c6168, + 0x766f6241,0x31662865,0x003b3136,0x00030005,0x00000030,0x00000068,0x00060005,0x00000034, + 0x666c6168,0x6f6c6542,0x31662877,0x003b3136,0x00030005,0x00000033,0x00000068,0x00080005, + 0x00000037,0x69636572,0x636f7270,0x61486c61,0x6628666c,0x3b313631,0x00000000,0x00030005, + 0x00000036,0x00000078,0x00080005,0x0000003d,0x48616d66,0x28666c61,0x31363166,0x3631663b, + 0x31663b31,0x003b3136,0x00030005,0x0000003a,0x00000061,0x00030005,0x0000003b,0x00000062, + 0x00030005,0x0000003c,0x00000063,0x00070005,0x00000040,0x45746976,0x65577078,0x74686769, + 0x36316628,0x00003b31,0x00040005,0x0000003f,0x726f6373,0x00000065,0x00090005,0x00000047, + 0x74666f73,0x5078616d,0x28726961,0x753b3175,0x31753b31,0x3b31753b,0x00000000,0x00030005, + 0x00000043,0x00776f72,0x00040005,0x00000044,0x65736162,0x00000000,0x00040005,0x00000045, + 0x72696170,0x00000000,0x00040005,0x00000046,0x69726170,0x00007974,0x00070005,0x0000004c, + 0x74666f73,0x3678616d,0x31752834,0x3b31753b,0x00000000,0x00030005,0x0000004a,0x00776f72, + 0x00040005,0x0000004b,0x65736162,0x00000000,0x00040005,0x0000004e,0x73746962,0x00000000, + 0x00040005,0x00000051,0x6e676973,0x00000000,0x00050005,0x00000055,0x6e67616d,0x64757469, + 0x00000065,0x00040005,0x0000006f,0x6c616373,0x00006465,0x00030005,0x00000080,0x0062736c, + 0x00040005,0x00000086,0x6e756f72,0x00646564,0x00050005,0x000000a1,0x746f7571,0x746e6569, + 0x00000000,0x00060005,0x000000a5,0x616d6572,0x65646e69,0x73614d72,0x0000006b,0x00050005, + 0x000000a9,0x616d6572,0x65646e69,0x00000072,0x00040005,0x000000ad,0x666c6168,0x00796177, + 0x00040005,0x000000c8,0x614e7369,0x0000006e,0x00050005,0x000000e4,0x6167656e,0x65766974, + 0x00000000,0x00050005,0x000000ea,0x6f707865,0x746e656e,0x00000000,0x00050005,0x000000f0, + 0x746e616d,0x61737369,0x00000000,0x00040005,0x000000f7,0x65646f63,0x00000000,0x00050005, + 0x000000fe,0x6e676973,0x63696669,0x00646e61,0x00040005,0x0000010a,0x66696873,0x00000074, + 0x00040005,0x00000116,0x61726170,0x0000006d,0x00040005,0x00000118,0x61726170,0x0000006d, + 0x00050005,0x0000011d,0x78453465,0x656e6f70,0x0000746e,0x00050005,0x00000120,0x614d3465, + 0x7369746e,0x00006173,0x00040005,0x00000122,0x61726170,0x0000006d,0x00040005,0x00000124, + 0x61726170,0x0000006d,0x00050005,0x00000147,0x6167656e,0x65766974,0x00000000,0x00050005, + 0x0000014b,0x6f707865,0x746e656e,0x00000000,0x00050005,0x0000014f,0x746e616d,0x61737369, + 0x00000000,0x00040005,0x00000156,0x756c6176,0x00000065,0x00040005,0x0000017d,0x61726170, + 0x0000006d,0x00040005,0x00000183,0x73746962,0x00000000,0x00040005,0x00000184,0x61726170, + 0x0000006d,0x00040005,0x00000194,0x61726170,0x0000006d,0x00040005,0x0000019e,0x61726170, + 0x0000006d,0x00040005,0x000001a2,0x61726170,0x0000006d,0x00040005,0x000001a9,0x61726170, + 0x0000006d,0x00040005,0x000001ad,0x61726170,0x0000006d,0x00040005,0x000001b1,0x61726170, + 0x0000006d,0x00040005,0x000001b5,0x61726170,0x0000006d,0x00030005,0x000001b9,0x00006678, + 0x00030005,0x000001cb,0x00000068,0x00040005,0x000001ce,0x61726170,0x0000006d,0x00030005, + 0x000001dd,0x00000069,0x00030005,0x000001e7,0x00007075,0x00040005,0x000001e8,0x61726170, + 0x0000006d,0x00040005,0x000001f1,0x61726170,0x0000006d,0x00040005,0x000001f4,0x6e776f64, + 0x00000000,0x00040005,0x000001f5,0x61726170,0x0000006d,0x00040005,0x00000201,0x61726170, + 0x0000006d,0x00030005,0x0000020a,0x00000070,0x00030005,0x00000210,0x00000074,0x00030005, + 0x00000215,0x00007662,0x00030005,0x00000219,0x00007661,0x00030005,0x0000021d,0x00000065, + 0x00050005,0x00000230,0x6f707865,0x746e656e,0x00000000,0x00030005,0x0000023c,0x00706c75, + 0x00040005,0x00000244,0x70657473,0x00000073,0x00040005,0x00000261,0x61726170,0x0000006d, + 0x00040005,0x00000265,0x61726170,0x0000006d,0x00040005,0x0000026b,0x69666661,0x0000656e, + 0x00040005,0x0000026e,0x61726170,0x0000006d,0x00040005,0x00000270,0x61726170,0x0000006d, + 0x00040005,0x00000271,0x61726170,0x0000006d,0x00040005,0x00000277,0x73746962,0x00000000, + 0x00040005,0x00000278,0x61726170,0x0000006d,0x00060005,0x0000027b,0x6f707865,0x746e656e, + 0x426c6169,0x00737469,0x00040005,0x00000282,0x61726170,0x0000006d,0x00030005,0x00000287, + 0x0079656b,0x00060005,0x00000289,0x44444150,0x545f4445,0x4e454b4f,0x00000053,0x00030005, + 0x00000293,0x00000061,0x00040005,0x00000297,0x726f6373,0x00007365,0x00030005,0x000002a1, + 0x00000062,0x00030005,0x000002ac,0x00000063,0x00030005,0x000002b8,0x00000064,0x00030005, + 0x000002c4,0x00006261,0x00030005,0x000002c8,0x00636261,0x00030005,0x000002d1,0x00003065, + 0x00040005,0x000002d2,0x61726170,0x0000006d,0x00040005,0x000002d4,0x61726170,0x0000006d, + 0x00040005,0x000002d6,0x61726170,0x0000006d,0x00040005,0x000002d7,0x61726170,0x0000006d, + 0x00040005,0x000002d9,0x61726170,0x0000006d,0x00040005,0x000002db,0x61726170,0x0000006d, + 0x00040005,0x000002dd,0x61726170,0x0000006d,0x00040005,0x000002de,0x61726170,0x0000006d, + 0x00030005,0x000002e1,0x00003165,0x00040005,0x000002e3,0x61726170,0x0000006d,0x00040005, + 0x000002e5,0x61726170,0x0000006d,0x00040005,0x000002e7,0x61726170,0x0000006d,0x00040005, + 0x000002e8,0x61726170,0x0000006d,0x00040005,0x000002eb,0x6e657665,0x00000000,0x00040005, + 0x000002ed,0x61726170,0x0000006d,0x00040005,0x000002ef,0x61726170,0x0000006d,0x00040005, + 0x000002f1,0x61726170,0x0000006d,0x00040005,0x000002f2,0x61726170,0x0000006d,0x00030005, + 0x000002f5,0x0000306f,0x00040005,0x000002f6,0x61726170,0x0000006d,0x00040005,0x000002f8, + 0x61726170,0x0000006d,0x00040005,0x000002fa,0x61726170,0x0000006d,0x00040005,0x000002fb, + 0x61726170,0x0000006d,0x00040005,0x000002fd,0x61726170,0x0000006d,0x00040005,0x000002ff, + 0x61726170,0x0000006d,0x00040005,0x00000301,0x61726170,0x0000006d,0x00040005,0x00000302, + 0x61726170,0x0000006d,0x00030005,0x00000305,0x0000316f,0x00040005,0x00000307,0x61726170, + 0x0000006d,0x00040005,0x00000309,0x61726170,0x0000006d,0x00040005,0x0000030b,0x61726170, + 0x0000006d,0x00040005,0x0000030c,0x61726170,0x0000006d,0x00030005,0x0000030f,0x0064646f, + 0x00040005,0x00000311,0x61726170,0x0000006d,0x00040005,0x00000313,0x61726170,0x0000006d, + 0x00040005,0x00000315,0x61726170,0x0000006d,0x00040005,0x00000316,0x61726170,0x0000006d, + 0x00040005,0x0000031e,0x656e616c,0x00000000,0x00080005,0x00000321,0x4c5f6c67,0x6c61636f, + 0x6f766e49,0x69746163,0x44496e6f,0x00000000,0x00040005,0x00000325,0x64616568,0x00000000, + 0x00060005,0x00000326,0x575f6c67,0x476b726f,0x70756f72,0x00004449,0x00040005,0x00000329, + 0x6c695471,0x00000065,0x00040005,0x0000032c,0x69727473,0x00336564,0x00040005,0x0000032d, + 0x68737550,0x00000000,0x00050006,0x0000032d,0x00000000,0x656b6f74,0x0000736e,0x00050006, + 0x0000032d,0x00000001,0x64616568,0x00000073,0x00060006,0x0000032d,0x00000002,0x6e616863, + 0x736c656e,0x00000000,0x00030005,0x0000032f,0x00006370,0x00050005,0x00000334,0x64616568, + 0x65736142,0x00000000,0x00040005,0x00000338,0x73614271,0x00000065,0x00030005,0x0000033f, + 0x00000069,0x00030005,0x0000034b,0x00007371,0x00050005,0x0000034f,0x6d726f4e,0x7a696c61, + 0x00006465,0x00040006,0x0000034f,0x00000000,0x00766b71,0x00030005,0x00000351,0x00000000, + 0x00040005,0x00000360,0x61726170,0x0000006d,0x00040005,0x00000365,0x3079656b,0x00000000, + 0x00030005,0x0000036e,0x00000069,0x00040005,0x0000037a,0x6e756863,0x0000006b,0x00040005, + 0x0000038b,0x61726170,0x0000006d,0x00030005,0x00000390,0x00000074,0x00060005,0x00000391, + 0x535f6c67,0x72676275,0x4970756f,0x00000044,0x00030005,0x0000039a,0x00003071,0x00030005, + 0x0000039e,0x0000306b,0x00030005,0x000003a4,0x00000063,0x00030005,0x000003a6,0x00005f73, + 0x00030005,0x000003b0,0x00005f61,0x00030005,0x000003bf,0x00005f62,0x00030005,0x000003d2, + 0x00005f72,0x00040005,0x000003de,0x61726170,0x0000006d,0x00030005,0x000003e7,0x00005f68, + 0x00060005,0x000003f8,0x4e5f6c67,0x75536d75,0x6f726762,0x00737075,0x00030005,0x000003ff, + 0x00000069,0x00040005,0x0000040b,0x61726170,0x0000006d,0x00040005,0x00000416,0x61746f74, + 0x0000006c,0x00040005,0x00000417,0x65736162,0x00000000,0x00040005,0x00000420,0x61726170, + 0x0000006d,0x00040005,0x00000422,0x61726170,0x0000006d,0x00040005,0x00000428,0x64646170, + 0x00676e69,0x00050005,0x00000430,0x72726f63,0x69746365,0x00006e6f,0x00040005,0x00000431, + 0x61726170,0x0000006d,0x00040005,0x00000437,0x61726170,0x0000006d,0x00050005,0x0000043f, + 0x69636572,0x636f7270,0x00736c61,0x00040005,0x00000441,0x61726170,0x0000006d,0x00030005, + 0x00000445,0x00000069,0x00040005,0x0000044f,0x65646f63,0x00000000,0x00040005,0x00000451, + 0x61726170,0x0000006d,0x00040005,0x00000455,0x61726170,0x0000006d,0x00040005,0x00000458, + 0x61726170,0x0000006d,0x00030005,0x0000045e,0x00000069,0x00040005,0x00000467,0x7074756f, + 0x00737475,0x00040005,0x0000046c,0x3079656b,0x00000000,0x00030005,0x00000474,0x00000069, + 0x00040005,0x0000048d,0x61726170,0x0000006d,0x00030005,0x00000492,0x00000074,0x00030005, + 0x0000049b,0x00003071,0x00030005,0x0000049f,0x00003063,0x00030005,0x000004a3,0x00005f68, + 0x00030005,0x000004ae,0x00000063,0x00030005,0x000004b1,0x0000626b,0x00030005,0x000004b9, + 0x00005f73,0x00030005,0x000004c1,0x00005f61,0x00030005,0x000004d6,0x00005f62,0x00030005, + 0x000004ed,0x00005f72,0x00040005,0x000004f9,0x61726170,0x0000006d,0x00030005,0x00000502, + 0x00005f68,0x00030005,0x00000514,0x00000069,0x00030005,0x0000051d,0x00776f72,0x00050005, + 0x00000520,0x706d6f63,0x6e656e6f,0x00000074,0x00040005,0x00000523,0x656b6f74,0x0000006e, + 0x00040005,0x0000052f,0x756c6176,0x00000065,0x00040005,0x00000539,0x61726170,0x0000006d, + 0x00050005,0x0000053c,0x65747441,0x6465646e,0x00000000,0x00060006,0x0000053c,0x00000000, + 0x65747461,0x6465646e,0x00000000,0x00030005,0x0000053e,0x00000000,0x00040005,0x0000054a, + 0x61726170,0x0000006d,0x00040005,0x0000054c,0x61726170,0x0000006d,0x00030047,0x000001cd, + 0x0000002a,0x00030047,0x000001ec,0x0000002a,0x00030047,0x000001f9,0x0000002a,0x00030047, + 0x0000020f,0x0000002a,0x00030047,0x00000214,0x0000002a,0x00030047,0x00000218,0x0000002a, + 0x00030047,0x0000021c,0x0000002a,0x00030047,0x00000220,0x0000002a,0x00030047,0x00000224, + 0x0000002a,0x00030047,0x00000225,0x0000002a,0x00040047,0x00000289,0x00000001,0x00000000, + 0x00030047,0x000002a0,0x0000002a,0x00030047,0x000002ab,0x0000002a,0x00030047,0x000002b7, + 0x0000002a,0x00030047,0x000002c3,0x0000002a,0x00030047,0x000002c7,0x0000002a,0x00030047, + 0x000002cb,0x0000002a,0x00030047,0x000002e0,0x0000002a,0x00030047,0x000002ea,0x0000002a, + 0x00030047,0x000002f4,0x0000002a,0x00030047,0x00000304,0x0000002a,0x00030047,0x0000030e, + 0x0000002a,0x00030047,0x00000318,0x0000002a,0x00040047,0x00000321,0x0000000b,0x0000001b, + 0x00040047,0x00000326,0x0000000b,0x0000001a,0x00030047,0x0000032d,0x00000002,0x00050048, + 0x0000032d,0x00000000,0x00000023,0x00000000,0x00050048,0x0000032d,0x00000001,0x00000023, + 0x00000004,0x00050048,0x0000032d,0x00000002,0x00000023,0x00000008,0x00040047,0x0000034e, + 0x00000006,0x00000001,0x00030047,0x0000034f,0x00000002,0x00040048,0x0000034f,0x00000000, + 0x00000018,0x00050048,0x0000034f,0x00000000,0x00000023,0x00000000,0x00030047,0x00000351, + 0x00000018,0x00040047,0x00000351,0x00000021,0x00000000,0x00040047,0x00000351,0x00000022, + 0x00000000,0x00040047,0x00000391,0x0000000b,0x00000028,0x00040047,0x000003f8,0x0000000b, + 0x00000026,0x00030047,0x00000425,0x0000002a,0x00030047,0x00000427,0x0000002a,0x00030047, + 0x0000042b,0x0000002a,0x00030047,0x00000436,0x0000002a,0x00030047,0x0000043c,0x0000002a, + 0x00030047,0x00000538,0x0000002a,0x00040047,0x0000053b,0x00000006,0x00000001,0x00030047, + 0x0000053c,0x00000002,0x00040048,0x0000053c,0x00000000,0x00000019,0x00050048,0x0000053c, + 0x00000000,0x00000023,0x00000000,0x00030047,0x0000053e,0x00000019,0x00040047,0x0000053e, + 0x00000021,0x00000005,0x00040047,0x0000053e,0x00000022,0x00000000,0x00020013,0x00000002, + 0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040020,0x00000007, + 0x00000007,0x00000006,0x00040021,0x00000008,0x00000006,0x00000007,0x00030016,0x0000000c, + 0x00000010,0x00040020,0x0000000d,0x00000007,0x0000000c,0x00040015,0x0000000e,0x00000020, + 0x00000000,0x00040021,0x0000000f,0x0000000e,0x0000000d,0x00040020,0x00000013,0x00000007, + 0x0000000e,0x00040021,0x00000014,0x0000000c,0x00000013,0x00050021,0x00000018,0x0000000e, + 0x00000013,0x00000013,0x00040021,0x0000001d,0x0000000e,0x00000013,0x00040021,0x00000021, + 0x00000006,0x00000013,0x00040021,0x00000028,0x00000006,0x0000000d,0x00040021,0x0000002f, + 0x0000000c,0x0000000d,0x00060021,0x00000039,0x0000000c,0x0000000d,0x0000000d,0x0000000d, + 0x00070021,0x00000042,0x0000000c,0x00000013,0x00000013,0x00000013,0x00000013,0x00050021, + 0x00000049,0x0000000c,0x00000013,0x00000013,0x0004002b,0x0000000e,0x00000053,0x80000000, + 0x0004002b,0x0000000e,0x00000057,0x7fffffff,0x0004002b,0x0000000e,0x0000005a,0x7f800000, + 0x00020014,0x0000005b,0x0004002b,0x0000000e,0x00000062,0x477ff000,0x0004002b,0x0000000e, + 0x0000006b,0x38800000,0x0004002b,0x00000006,0x00000072,0x4b800000,0x0004002b,0x00000006, + 0x00000079,0x33800000,0x0004002b,0x0000000e,0x00000082,0x0000000d,0x0004002b,0x0000000e, + 0x00000084,0x00000001,0x0004002b,0x0000000e,0x00000088,0x00000fff,0x0004002b,0x0000000e, + 0x0000008c,0xffffe000,0x00040015,0x00000095,0x00000010,0x00000000,0x0004002b,0x0000000e, + 0x0000009b,0x0000ffff,0x0004002b,0x0000000e,0x000000bf,0x00000000,0x00040020,0x000000c7, + 0x00000007,0x0000005b,0x0004002b,0x0000000e,0x000000ca,0x00007c00,0x0004002b,0x0000000e, + 0x000000d0,0x000003ff,0x0004002b,0x0000000e,0x000000d9,0x00007fff,0x0004002b,0x0000000e, + 0x000000df,0x00000008,0x0004002b,0x0000000e,0x000000e1,0x00000080,0x0004002b,0x0000000e, + 0x000000e6,0x00008000,0x0004002b,0x0000000e,0x000000ec,0x0000000a,0x0004002b,0x0000000e, + 0x000000ee,0x0000001f,0x0004002b,0x0000000e,0x000000f8,0x0000007e,0x0004002b,0x0000000e, + 0x00000106,0x00000400,0x0004002b,0x0000000e,0x00000110,0x0000000f,0x0004002b,0x0000000e, + 0x00000112,0x00000010,0x0004002b,0x0000000e,0x00000121,0x00000007,0x0004002b,0x0000000e, + 0x00000134,0x00000006,0x0004002b,0x0000000e,0x0000013d,0x00000003,0x0004002b,0x00000006, + 0x00000159,0x3b000000,0x0004002b,0x00000006,0x00000163,0x00000000,0x0004002b,0x00000006, + 0x00000165,0x3f800000,0x0004002b,0x00000006,0x00000168,0x3e000000,0x0004002b,0x0000000e, + 0x0000016c,0x00000078,0x0004002b,0x0000000e,0x0000016e,0x00000017,0x0004002b,0x0000000e, + 0x00000188,0x00007bff,0x0004002b,0x00000006,0x0000018d,0x477ff000,0x0004002b,0x00000006, + 0x0000018f,0x3f000000,0x0004002b,0x0000000c,0x000001d4,0x00000000,0x00040015,0x000001db, + 0x00000020,0x00000001,0x00040020,0x000001dc,0x00000007,0x000001db,0x0004002b,0x000001db, + 0x000001de,0x00000000,0x0004002b,0x000001db,0x000001e5,0x00000002,0x0004002b,0x000001db, + 0x00000205,0x00000001,0x0004002b,0x0000000e,0x00000235,0x000000ff,0x0004002b,0x000001db, + 0x00000238,0x0000007f,0x0004002b,0x000001db,0x0000023a,0xfffffff2,0x0004002b,0x000001db, + 0x0000023e,0x0000000a,0x0004002b,0x0000000c,0x0000026c,0x00002dbb,0x0004002b,0x0000000c, + 0x0000026d,0x00003ed6,0x0004002b,0x0000000c,0x00000274,0x00003dc2,0x0004002b,0x0000000c, + 0x00000275,0x00003fe9,0x0004002b,0x0000000e,0x0000027d,0x00000004,0x0004002b,0x0000000e, + 0x0000027f,0x00004000,0x00040032,0x0000000e,0x00000289,0x000000c0,0x0004002b,0x0000000e, + 0x0000028e,0x00000002,0x00060034,0x0000000e,0x00000294,0x00000084,0x00000112,0x00000289, + 0x0004001c,0x00000295,0x0000000c,0x00000294,0x00040020,0x00000296,0x00000004,0x00000295, + 0x0004003b,0x00000296,0x00000297,0x00000004,0x00040020,0x00000299,0x00000004,0x0000000c, + 0x0004002b,0x0000000e,0x000002a7,0x00000018,0x0004002b,0x0000000e,0x000002ae,0x00000020, + 0x0004002b,0x0000000e,0x000002b3,0x00000028,0x0004002b,0x0000000e,0x000002ba,0x00000030, + 0x0004002b,0x0000000e,0x000002bf,0x00000038,0x00040017,0x0000031f,0x0000000e,0x00000003, + 0x00040020,0x00000320,0x00000001,0x0000031f,0x0004003b,0x00000320,0x00000321,0x00000001, + 0x00040020,0x00000322,0x00000001,0x0000000e,0x0004003b,0x00000320,0x00000326,0x00000001, + 0x0005001e,0x0000032d,0x0000000e,0x0000000e,0x0000000e,0x00040020,0x0000032e,0x00000009, + 0x0000032d,0x0004003b,0x0000032e,0x0000032f,0x00000009,0x00040020,0x00000330,0x00000009, + 0x0000000e,0x0004002b,0x0000000e,0x00000336,0x00000060,0x0004002b,0x0000000e,0x00000347, + 0x00000200,0x0004001c,0x00000349,0x0000000c,0x00000347,0x00040020,0x0000034a,0x00000004, + 0x00000349,0x0004003b,0x0000034a,0x0000034b,0x00000004,0x00040015,0x0000034d,0x00000008, + 0x00000000,0x0003001d,0x0000034e,0x0000034d,0x0003001e,0x0000034f,0x0000034e,0x00040020, + 0x00000350,0x0000000c,0x0000034f,0x0004003b,0x00000350,0x00000351,0x0000000c,0x0004002b, + 0x0000000e,0x00000354,0x00000005,0x00040020,0x0000035c,0x0000000c,0x0000034d,0x0004002b, + 0x0000000e,0x0000036d,0x00000108,0x0004002b,0x0000000e,0x00000376,0x00000800,0x0004001c, + 0x00000378,0x0000000c,0x00000376,0x00040020,0x00000379,0x00000004,0x00000378,0x0004003b, + 0x00000379,0x0000037a,0x00000004,0x0004003b,0x00000322,0x00000391,0x00000001,0x00071168, + 0x000003a2,0x00000006,0x0000013d,0x00000112,0x00000112,0x0000028e,0x00040020,0x000003a3, + 0x00000007,0x000003a2,0x0004002c,0x000003a2,0x000003a5,0x00000163,0x00071168,0x000003ae, + 0x0000000c,0x0000013d,0x00000112,0x00000112,0x000000bf,0x00040020,0x000003af,0x00000007, + 0x000003ae,0x00071168,0x000003bd,0x0000000c,0x0000013d,0x00000112,0x00000112,0x00000084, + 0x00040020,0x000003be,0x00000007,0x000003bd,0x00071168,0x000003e5,0x0000000c,0x0000013d, + 0x00000112,0x00000112,0x0000028e,0x00040020,0x000003e6,0x00000007,0x000003e5,0x0004003b, + 0x00000322,0x000003f8,0x00000001,0x0004002b,0x0000000e,0x000003fc,0x00000040,0x00060034, + 0x0000000e,0x00000407,0x00000084,0x00000112,0x00000289,0x0004001c,0x0000043d,0x0000000c, + 0x00000112,0x00040020,0x0000043e,0x00000004,0x0000043d,0x0004003b,0x0000043e,0x0000043f, + 0x00000004,0x00060034,0x0000000e,0x0000044d,0x00000084,0x00000112,0x00000289,0x0004003b, + 0x0000034a,0x00000467,0x00000004,0x0003001d,0x0000053b,0x0000034d,0x0003001e,0x0000053c, + 0x0000053b,0x00040020,0x0000053d,0x0000000c,0x0000053c,0x0004003b,0x0000053d,0x0000053e, + 0x0000000c,0x0006002c,0x0000031f,0x00000552,0x000002ae,0x00000084,0x00000084,0x00050036, + 0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000013, + 0x0000031e,0x00000007,0x0004003b,0x00000013,0x00000325,0x00000007,0x0004003b,0x00000013, + 0x00000329,0x00000007,0x0004003b,0x00000013,0x0000032c,0x00000007,0x0004003b,0x00000013, + 0x00000334,0x00000007,0x0004003b,0x00000013,0x00000338,0x00000007,0x0004003b,0x00000013, + 0x0000033f,0x00000007,0x0004003b,0x00000013,0x00000360,0x00000007,0x0004003b,0x00000013, + 0x00000365,0x00000007,0x0004003b,0x00000013,0x0000036e,0x00000007,0x0004003b,0x00000013, + 0x0000038b,0x00000007,0x0004003b,0x00000013,0x00000390,0x00000007,0x0004003b,0x00000013, + 0x0000039a,0x00000007,0x0004003b,0x00000013,0x0000039e,0x00000007,0x0004003b,0x000003a3, + 0x000003a4,0x00000007,0x0004003b,0x00000013,0x000003a6,0x00000007,0x0004003b,0x000003af, + 0x000003b0,0x00000007,0x0004003b,0x000003be,0x000003bf,0x00000007,0x0004003b,0x000001dc, + 0x000003d2,0x00000007,0x0004003b,0x00000007,0x000003de,0x00000007,0x0004003b,0x000003e6, + 0x000003e7,0x00000007,0x0004003b,0x00000013,0x000003ff,0x00000007,0x0004003b,0x0000000d, + 0x0000040b,0x00000007,0x0004003b,0x0000000d,0x00000416,0x00000007,0x0004003b,0x00000013, + 0x00000417,0x00000007,0x0004003b,0x00000013,0x00000420,0x00000007,0x0004003b,0x00000013, + 0x00000422,0x00000007,0x0004003b,0x00000013,0x00000428,0x00000007,0x0004003b,0x0000000d, + 0x00000430,0x00000007,0x0004003b,0x0000000d,0x00000431,0x00000007,0x0004003b,0x00000007, + 0x00000437,0x00000007,0x0004003b,0x0000000d,0x00000441,0x00000007,0x0004003b,0x00000013, + 0x00000445,0x00000007,0x0004003b,0x00000013,0x0000044f,0x00000007,0x0004003b,0x0000000d, + 0x00000451,0x00000007,0x0004003b,0x00000013,0x00000455,0x00000007,0x0004003b,0x00000013, + 0x00000458,0x00000007,0x0004003b,0x00000013,0x0000045e,0x00000007,0x0004003b,0x00000013, + 0x0000046c,0x00000007,0x0004003b,0x00000013,0x00000474,0x00000007,0x0004003b,0x00000013, + 0x0000048d,0x00000007,0x0004003b,0x00000013,0x00000492,0x00000007,0x0004003b,0x00000013, + 0x0000049b,0x00000007,0x0004003b,0x00000013,0x0000049f,0x00000007,0x0004003b,0x000003e6, + 0x000004a3,0x00000007,0x0004003b,0x000003a3,0x000004ae,0x00000007,0x0004003b,0x00000013, + 0x000004b1,0x00000007,0x0004003b,0x00000013,0x000004b9,0x00000007,0x0004003b,0x000003af, + 0x000004c1,0x00000007,0x0004003b,0x000003be,0x000004d6,0x00000007,0x0004003b,0x000001dc, + 0x000004ed,0x00000007,0x0004003b,0x00000007,0x000004f9,0x00000007,0x0004003b,0x000003e6, + 0x00000502,0x00000007,0x0004003b,0x00000013,0x00000514,0x00000007,0x0004003b,0x00000013, + 0x0000051d,0x00000007,0x0004003b,0x00000013,0x00000520,0x00000007,0x0004003b,0x00000013, + 0x00000523,0x00000007,0x0004003b,0x00000007,0x0000052f,0x00000007,0x0004003b,0x00000007, + 0x00000539,0x00000007,0x0004003b,0x0000000d,0x0000054a,0x00000007,0x0004003b,0x00000013, + 0x0000054c,0x00000007,0x00050041,0x00000322,0x00000323,0x00000321,0x000000bf,0x0004003d, + 0x0000000e,0x00000324,0x00000323,0x0003003e,0x0000031e,0x00000324,0x00050041,0x00000322, + 0x00000327,0x00000326,0x000000bf,0x0004003d,0x0000000e,0x00000328,0x00000327,0x0003003e, + 0x00000325,0x00000328,0x00050041,0x00000322,0x0000032a,0x00000326,0x00000084,0x0004003d, + 0x0000000e,0x0000032b,0x0000032a,0x0003003e,0x00000329,0x0000032b,0x00050041,0x00000330, + 0x00000331,0x0000032f,0x000001e5,0x0004003d,0x0000000e,0x00000332,0x00000331,0x00050084, + 0x0000000e,0x00000333,0x00000332,0x0000013d,0x0003003e,0x0000032c,0x00000333,0x0004003d, + 0x0000000e,0x00000335,0x00000325,0x00050084,0x0000000e,0x00000337,0x00000335,0x00000336, + 0x0003003e,0x00000334,0x00000337,0x0004003d,0x0000000e,0x00000339,0x00000329,0x00050084, + 0x0000000e,0x0000033a,0x00000339,0x00000112,0x0004003d,0x0000000e,0x0000033b,0x0000032c, + 0x00050084,0x0000000e,0x0000033c,0x0000033a,0x0000033b,0x0004003d,0x0000000e,0x0000033d, + 0x00000334,0x00050080,0x0000000e,0x0000033e,0x0000033c,0x0000033d,0x0003003e,0x00000338, + 0x0000033e,0x0004003d,0x0000000e,0x00000340,0x0000031e,0x0003003e,0x0000033f,0x00000340, + 0x000200f9,0x00000341,0x000200f8,0x00000341,0x000400f6,0x00000343,0x00000344,0x00000000, + 0x000200f9,0x00000345,0x000200f8,0x00000345,0x0004003d,0x0000000e,0x00000346,0x0000033f, + 0x000500b0,0x0000005b,0x00000348,0x00000346,0x00000347,0x000400fa,0x00000348,0x00000342, + 0x00000343,0x000200f8,0x00000342,0x0004003d,0x0000000e,0x0000034c,0x0000033f,0x0004003d, + 0x0000000e,0x00000352,0x00000338,0x0004003d,0x0000000e,0x00000353,0x0000033f,0x000500c2, + 0x0000000e,0x00000355,0x00000353,0x00000354,0x0004003d,0x0000000e,0x00000356,0x0000032c, + 0x00050084,0x0000000e,0x00000357,0x00000355,0x00000356,0x00050080,0x0000000e,0x00000358, + 0x00000352,0x00000357,0x0004003d,0x0000000e,0x00000359,0x0000033f,0x000500c7,0x0000000e, + 0x0000035a,0x00000359,0x000000ee,0x00050080,0x0000000e,0x0000035b,0x00000358,0x0000035a, + 0x00060041,0x0000035c,0x0000035d,0x00000351,0x000001de,0x0000035b,0x0004003d,0x0000034d, + 0x0000035e,0x0000035d,0x00040071,0x0000000e,0x0000035f,0x0000035e,0x0003003e,0x00000360, + 0x0000035f,0x00050039,0x0000000c,0x00000361,0x00000026,0x00000360,0x00050041,0x00000299, + 0x00000362,0x0000034b,0x0000034c,0x0005003e,0x00000362,0x00000361,0x00000028,0x0000028e, + 0x000200f9,0x00000344,0x000200f8,0x00000344,0x0004003d,0x0000000e,0x00000363,0x0000033f, + 0x00050080,0x0000000e,0x00000364,0x00000363,0x000002ae,0x0003003e,0x0000033f,0x00000364, + 0x000200f9,0x00000341,0x000200f8,0x00000343,0x0003003e,0x00000365,0x000000bf,0x000200f9, + 0x00000366,0x000200f8,0x00000366,0x000400f6,0x00000368,0x00000369,0x00000000,0x000200f9, + 0x0000036a,0x000200f8,0x0000036a,0x0004003d,0x0000000e,0x0000036b,0x00000365,0x000500b0, + 0x0000005b,0x0000036c,0x0000036b,0x00000289,0x000400fa,0x0000036c,0x00000367,0x00000368, + 0x000200f8,0x00000367,0x000400e0,0x0000028e,0x0000028e,0x0000036d,0x0004003d,0x0000000e, + 0x0000036f,0x0000031e,0x0003003e,0x0000036e,0x0000036f,0x000200f9,0x00000370,0x000200f8, + 0x00000370,0x000400f6,0x00000372,0x00000373,0x00000000,0x000200f9,0x00000374,0x000200f8, + 0x00000374,0x0004003d,0x0000000e,0x00000375,0x0000036e,0x000500b0,0x0000005b,0x00000377, + 0x00000375,0x00000376,0x000400fa,0x00000377,0x00000371,0x00000372,0x000200f8,0x00000371, + 0x0004003d,0x0000000e,0x0000037b,0x0000036e,0x0004003d,0x0000000e,0x0000037c,0x00000365, + 0x0004003d,0x0000000e,0x0000037d,0x0000036e,0x000500c2,0x0000000e,0x0000037e,0x0000037d, + 0x00000354,0x00050080,0x0000000e,0x0000037f,0x0000037c,0x0000037e,0x0004003d,0x0000000e, + 0x00000380,0x0000032c,0x00050084,0x0000000e,0x00000381,0x0000037f,0x00000380,0x0004003d, + 0x0000000e,0x00000382,0x00000334,0x00050080,0x0000000e,0x00000383,0x00000381,0x00000382, + 0x00050080,0x0000000e,0x00000384,0x00000383,0x000002ae,0x0004003d,0x0000000e,0x00000385, + 0x0000036e,0x000500c7,0x0000000e,0x00000386,0x00000385,0x000000ee,0x00050080,0x0000000e, + 0x00000387,0x00000384,0x00000386,0x00060041,0x0000035c,0x00000388,0x00000351,0x000001de, + 0x00000387,0x0004003d,0x0000034d,0x00000389,0x00000388,0x00040071,0x0000000e,0x0000038a, + 0x00000389,0x0003003e,0x0000038b,0x0000038a,0x00050039,0x0000000c,0x0000038c,0x00000026, + 0x0000038b,0x00050041,0x00000299,0x0000038d,0x0000037a,0x0000037b,0x0005003e,0x0000038d, + 0x0000038c,0x00000028,0x0000028e,0x000200f9,0x00000373,0x000200f8,0x00000373,0x0004003d, + 0x0000000e,0x0000038e,0x0000036e,0x00050080,0x0000000e,0x0000038f,0x0000038e,0x000002ae, + 0x0003003e,0x0000036e,0x0000038f,0x000200f9,0x00000370,0x000200f8,0x00000372,0x000400e0, + 0x0000028e,0x0000028e,0x0000036d,0x0004003d,0x0000000e,0x00000392,0x00000391,0x0003003e, + 0x00000390,0x00000392,0x000200f9,0x00000393,0x000200f8,0x00000393,0x000400f6,0x00000395, + 0x00000396,0x00000000,0x000200f9,0x00000397,0x000200f8,0x00000397,0x0004003d,0x0000000e, + 0x00000398,0x00000390,0x000500b0,0x0000005b,0x00000399,0x00000398,0x0000027d,0x000400fa, + 0x00000399,0x00000394,0x00000395,0x000200f8,0x00000394,0x0004003d,0x0000000e,0x0000039b, + 0x00000390,0x00050086,0x0000000e,0x0000039c,0x0000039b,0x0000027d,0x00050084,0x0000000e, + 0x0000039d,0x0000039c,0x00000112,0x0003003e,0x0000039a,0x0000039d,0x0004003d,0x0000000e, + 0x0000039f,0x00000390,0x00050089,0x0000000e,0x000003a0,0x0000039f,0x0000027d,0x00050084, + 0x0000000e,0x000003a1,0x000003a0,0x00000112,0x0003003e,0x0000039e,0x000003a1,0x0003003e, + 0x000003a4,0x000003a5,0x0003003e,0x000003a6,0x000000bf,0x000200f9,0x000003a7,0x000200f8, + 0x000003a7,0x000400f6,0x000003a9,0x000003aa,0x00000001,0x000200f9,0x000003ab,0x000200f8, + 0x000003ab,0x0004003d,0x0000000e,0x000003ac,0x000003a6,0x000500b0,0x0000005b,0x000003ad, + 0x000003ac,0x0000028e,0x000400fa,0x000003ad,0x000003a8,0x000003a9,0x000200f8,0x000003a8, + 0x0004003d,0x0000000e,0x000003b1,0x0000039a,0x00050084,0x0000000e,0x000003b2,0x000003b1, + 0x000002ae,0x0004003d,0x0000000e,0x000003b3,0x000003a6,0x00050084,0x0000000e,0x000003b4, + 0x000003b3,0x00000112,0x00050080,0x0000000e,0x000003b5,0x000003b2,0x000003b4,0x00050041, + 0x00000299,0x000003b6,0x0000034b,0x000003b5,0x0004003d,0x0000000e,0x000003b7,0x0000039a, + 0x00050084,0x0000000e,0x000003b8,0x000003b7,0x000002ae,0x0004003d,0x0000000e,0x000003b9, + 0x000003a6,0x00050084,0x0000000e,0x000003ba,0x000003b9,0x00000112,0x00050080,0x0000000e, + 0x000003bb,0x000003b8,0x000003ba,0x00081169,0x000003ae,0x000003bc,0x000003b6,0x000001de, + 0x000002ae,0x00000030,0x0000028e,0x0003003e,0x000003b0,0x000003bc,0x0004003d,0x0000000e, + 0x000003c0,0x0000039e,0x00050084,0x0000000e,0x000003c1,0x000003c0,0x000002ae,0x0004003d, + 0x0000000e,0x000003c2,0x000003a6,0x00050084,0x0000000e,0x000003c3,0x000003c2,0x00000112, + 0x00050080,0x0000000e,0x000003c4,0x000003c1,0x000003c3,0x00050041,0x00000299,0x000003c5, + 0x0000037a,0x000003c4,0x0004003d,0x0000000e,0x000003c6,0x0000039e,0x00050084,0x0000000e, + 0x000003c7,0x000003c6,0x000002ae,0x0004003d,0x0000000e,0x000003c8,0x000003a6,0x00050084, + 0x0000000e,0x000003c9,0x000003c8,0x00000112,0x00050080,0x0000000e,0x000003ca,0x000003c7, + 0x000003c9,0x00081169,0x000003bd,0x000003cb,0x000003c5,0x00000205,0x000002ae,0x00000030, + 0x0000028e,0x0003003e,0x000003bf,0x000003cb,0x0004003d,0x000003ae,0x000003cc,0x000003b0, + 0x0004003d,0x000003bd,0x000003cd,0x000003bf,0x0004003d,0x000003a2,0x000003ce,0x000003a4, + 0x0006116b,0x000003a2,0x000003cf,0x000003cc,0x000003cd,0x000003ce,0x0003003e,0x000003a4, + 0x000003cf,0x000200f9,0x000003aa,0x000200f8,0x000003aa,0x0004003d,0x0000000e,0x000003d0, + 0x000003a6,0x00050080,0x0000000e,0x000003d1,0x000003d0,0x00000205,0x0003003e,0x000003a6, + 0x000003d1,0x000200f9,0x000003a7,0x000200f8,0x000003a9,0x0003003e,0x000003d2,0x000001de, + 0x000200f9,0x000003d3,0x000200f8,0x000003d3,0x000400f6,0x000003d5,0x000003d6,0x00000000, + 0x000200f9,0x000003d7,0x000200f8,0x000003d7,0x0004003d,0x000001db,0x000003d8,0x000003d2, + 0x0004116c,0x0000000e,0x000003d9,0x000003a2,0x0004007c,0x000001db,0x000003da,0x000003d9, + 0x000500b1,0x0000005b,0x000003db,0x000003d8,0x000003da,0x000400fa,0x000003db,0x000003d4, + 0x000003d5,0x000200f8,0x000003d4,0x0004003d,0x000001db,0x000003dc,0x000003d2,0x0004003d, + 0x000001db,0x000003dd,0x000003d2,0x00050041,0x00000007,0x000003df,0x000003a4,0x000003dd, + 0x0004003d,0x00000006,0x000003e0,0x000003df,0x0003003e,0x000003de,0x000003e0,0x00050039, + 0x00000006,0x000003e1,0x0000000a,0x000003de,0x00050041,0x00000007,0x000003e2,0x000003a4, + 0x000003dc,0x0003003e,0x000003e2,0x000003e1,0x000200f9,0x000003d6,0x000200f8,0x000003d6, + 0x0004003d,0x000001db,0x000003e3,0x000003d2,0x00050080,0x000001db,0x000003e4,0x000003e3, + 0x00000205,0x0003003e,0x000003d2,0x000003e4,0x000200f9,0x000003d3,0x000200f8,0x000003d5, + 0x0004003d,0x000003a2,0x000003e8,0x000003a4,0x00040073,0x000003e5,0x000003e9,0x000003e8, + 0x0003003e,0x000003e7,0x000003e9,0x0004003d,0x000003e5,0x000003ea,0x000003e7,0x0004003d, + 0x0000000e,0x000003eb,0x0000039a,0x00050084,0x0000000e,0x000003ec,0x000003eb,0x00000289, + 0x0004003d,0x0000000e,0x000003ed,0x00000365,0x00050080,0x0000000e,0x000003ee,0x000003ec, + 0x000003ed,0x0004003d,0x0000000e,0x000003ef,0x0000039e,0x00050080,0x0000000e,0x000003f0, + 0x000003ee,0x000003ef,0x00050041,0x00000299,0x000003f1,0x00000297,0x000003f0,0x0004003d, + 0x0000000e,0x000003f2,0x0000039a,0x00050084,0x0000000e,0x000003f3,0x000003f2,0x00000289, + 0x0004003d,0x0000000e,0x000003f4,0x00000365,0x00050080,0x0000000e,0x000003f5,0x000003f3, + 0x000003f4,0x0004003d,0x0000000e,0x000003f6,0x0000039e,0x00050080,0x0000000e,0x000003f7, + 0x000003f5,0x000003f6,0x0007116a,0x000003f1,0x000003ea,0x000001de,0x00000289,0x00000028, + 0x0000028e,0x000200f9,0x00000396,0x000200f8,0x00000396,0x0004003d,0x0000000e,0x000003f9, + 0x000003f8,0x0004003d,0x0000000e,0x000003fa,0x00000390,0x00050080,0x0000000e,0x000003fb, + 0x000003fa,0x000003f9,0x0003003e,0x00000390,0x000003fb,0x000200f9,0x00000393,0x000200f8, + 0x00000395,0x000200f9,0x00000369,0x000200f8,0x00000369,0x0004003d,0x0000000e,0x000003fd, + 0x00000365,0x00050080,0x0000000e,0x000003fe,0x000003fd,0x000003fc,0x0003003e,0x00000365, + 0x000003fe,0x000200f9,0x00000366,0x000200f8,0x00000368,0x000400e0,0x0000028e,0x0000028e, + 0x0000036d,0x0004003d,0x0000000e,0x00000400,0x0000031e,0x0003003e,0x000003ff,0x00000400, + 0x000200f9,0x00000401,0x000200f8,0x00000401,0x000400f6,0x00000403,0x00000404,0x00000000, + 0x000200f9,0x00000405,0x000200f8,0x00000405,0x0004003d,0x0000000e,0x00000406,0x000003ff, + 0x000500b0,0x0000005b,0x00000408,0x00000406,0x00000407,0x000400fa,0x00000408,0x00000402, + 0x00000403,0x000200f8,0x00000402,0x0004003d,0x0000000e,0x00000409,0x000003ff,0x0004003d, + 0x0000000e,0x0000040a,0x000003ff,0x00050041,0x00000299,0x0000040c,0x00000297,0x0000040a, + 0x0006003d,0x0000000c,0x0000040d,0x0000040c,0x00000030,0x0000028e,0x0003003e,0x0000040b, + 0x0000040d,0x00050039,0x0000000c,0x0000040e,0x00000040,0x0000040b,0x00050041,0x00000299, + 0x0000040f,0x00000297,0x00000409,0x0005003e,0x0000040f,0x0000040e,0x00000028,0x0000028e, + 0x000200f9,0x00000404,0x000200f8,0x00000404,0x0004003d,0x0000000e,0x00000410,0x000003ff, + 0x00050080,0x0000000e,0x00000411,0x00000410,0x000002ae,0x0003003e,0x000003ff,0x00000411, + 0x000200f9,0x00000401,0x000200f8,0x00000403,0x000400e0,0x0000028e,0x0000028e,0x0000036d, + 0x0004003d,0x0000000e,0x00000412,0x0000031e,0x000500b0,0x0000005b,0x00000413,0x00000412, + 0x00000112,0x000300f7,0x00000415,0x00000000,0x000400fa,0x00000413,0x00000414,0x00000415, + 0x000200f8,0x00000414,0x0003003e,0x00000416,0x000001d4,0x0003003e,0x00000417,0x000000bf, + 0x000200f9,0x00000418,0x000200f8,0x00000418,0x000400f6,0x0000041a,0x0000041b,0x00000000, + 0x000200f9,0x0000041c,0x000200f8,0x0000041c,0x0004003d,0x0000000e,0x0000041d,0x00000417, + 0x000500b0,0x0000005b,0x0000041e,0x0000041d,0x00000289,0x000400fa,0x0000041e,0x00000419, + 0x0000041a,0x000200f8,0x00000419,0x0004003d,0x0000000c,0x0000041f,0x00000416,0x0004003d, + 0x0000000e,0x00000421,0x0000031e,0x0003003e,0x00000420,0x00000421,0x0004003d,0x0000000e, + 0x00000423,0x00000417,0x0003003e,0x00000422,0x00000423,0x00060039,0x0000000c,0x00000424, + 0x0000004c,0x00000420,0x00000422,0x00050081,0x0000000c,0x00000425,0x0000041f,0x00000424, + 0x0003003e,0x00000416,0x00000425,0x000200f9,0x0000041b,0x000200f8,0x0000041b,0x0004003d, + 0x0000000e,0x00000426,0x00000417,0x00050080,0x0000000e,0x00000427,0x00000426,0x000003fc, + 0x0003003e,0x00000417,0x00000427,0x000200f9,0x00000418,0x000200f8,0x0000041a,0x00050041, + 0x00000330,0x00000429,0x0000032f,0x000001de,0x0004003d,0x0000000e,0x0000042a,0x00000429, + 0x00050082,0x0000000e,0x0000042b,0x00000289,0x0000042a,0x0003003e,0x00000428,0x0000042b, + 0x0004003d,0x0000000e,0x0000042c,0x00000428,0x000500ac,0x0000005b,0x0000042d,0x0000042c, + 0x000000bf,0x000300f7,0x0000042f,0x00000000,0x000400fa,0x0000042d,0x0000042e,0x0000042f, + 0x000200f8,0x0000042e,0x0003003e,0x00000431,0x000001d4,0x00050039,0x0000000c,0x00000432, + 0x00000040,0x00000431,0x00040073,0x00000006,0x00000433,0x00000432,0x0004003d,0x0000000e, + 0x00000434,0x00000428,0x00040070,0x00000006,0x00000435,0x00000434,0x00050085,0x00000006, + 0x00000436,0x00000433,0x00000435,0x0003003e,0x00000437,0x00000436,0x00050039,0x00000006, + 0x00000438,0x0000000a,0x00000437,0x00040073,0x0000000c,0x00000439,0x00000438,0x0003003e, + 0x00000430,0x00000439,0x0004003d,0x0000000c,0x0000043a,0x00000416,0x0004003d,0x0000000c, + 0x0000043b,0x00000430,0x00050083,0x0000000c,0x0000043c,0x0000043a,0x0000043b,0x0003003e, + 0x00000416,0x0000043c,0x000200f9,0x0000042f,0x000200f8,0x0000042f,0x0004003d,0x0000000e, + 0x00000440,0x0000031e,0x0004003d,0x0000000c,0x00000442,0x00000416,0x0003003e,0x00000441, + 0x00000442,0x00050039,0x0000000c,0x00000443,0x00000037,0x00000441,0x00050041,0x00000299, + 0x00000444,0x0000043f,0x00000440,0x0005003e,0x00000444,0x00000443,0x00000028,0x0000028e, + 0x000200f9,0x00000415,0x000200f8,0x00000415,0x000400e0,0x0000028e,0x0000028e,0x0000036d, + 0x0004003d,0x0000000e,0x00000446,0x0000031e,0x0003003e,0x00000445,0x00000446,0x000200f9, + 0x00000447,0x000200f8,0x00000447,0x000400f6,0x00000449,0x0000044a,0x00000000,0x000200f9, + 0x0000044b,0x000200f8,0x0000044b,0x0004003d,0x0000000e,0x0000044c,0x00000445,0x000500b0, + 0x0000005b,0x0000044e,0x0000044c,0x0000044d,0x000400fa,0x0000044e,0x00000448,0x00000449, + 0x000200f8,0x00000448,0x0004003d,0x0000000e,0x00000450,0x00000445,0x00050041,0x00000299, + 0x00000452,0x00000297,0x00000450,0x0006003d,0x0000000c,0x00000453,0x00000452,0x00000030, + 0x0000028e,0x0003003e,0x00000451,0x00000453,0x00050039,0x0000000e,0x00000454,0x00000011, + 0x00000451,0x0003003e,0x00000455,0x00000454,0x00050039,0x0000000e,0x00000456,0x0000001f, + 0x00000455,0x0003003e,0x0000044f,0x00000456,0x0004003d,0x0000000e,0x00000457,0x00000445, + 0x0004003d,0x0000000e,0x00000459,0x0000044f,0x0003003e,0x00000458,0x00000459,0x00050039, + 0x0000000c,0x0000045a,0x00000026,0x00000458,0x00050041,0x00000299,0x0000045b,0x00000297, + 0x00000457,0x0005003e,0x0000045b,0x0000045a,0x00000028,0x0000028e,0x000200f9,0x0000044a, + 0x000200f8,0x0000044a,0x0004003d,0x0000000e,0x0000045c,0x00000445,0x00050080,0x0000000e, + 0x0000045d,0x0000045c,0x000002ae,0x0003003e,0x00000445,0x0000045d,0x000200f9,0x00000447, + 0x000200f8,0x00000449,0x0004003d,0x0000000e,0x0000045f,0x0000031e,0x0003003e,0x0000045e, + 0x0000045f,0x000200f9,0x00000460,0x000200f8,0x00000460,0x000400f6,0x00000462,0x00000463, + 0x00000000,0x000200f9,0x00000464,0x000200f8,0x00000464,0x0004003d,0x0000000e,0x00000465, + 0x0000045e,0x000500b0,0x0000005b,0x00000466,0x00000465,0x00000347,0x000400fa,0x00000466, + 0x00000461,0x00000462,0x000200f8,0x00000461,0x0004003d,0x0000000e,0x00000468,0x0000045e, + 0x00050041,0x00000299,0x00000469,0x00000467,0x00000468,0x0005003e,0x00000469,0x000001d4, + 0x00000028,0x0000028e,0x000200f9,0x00000463,0x000200f8,0x00000463,0x0004003d,0x0000000e, + 0x0000046a,0x0000045e,0x00050080,0x0000000e,0x0000046b,0x0000046a,0x000002ae,0x0003003e, + 0x0000045e,0x0000046b,0x000200f9,0x00000460,0x000200f8,0x00000462,0x000400e0,0x0000028e, + 0x0000028e,0x0000036d,0x0003003e,0x0000046c,0x000000bf,0x000200f9,0x0000046d,0x000200f8, + 0x0000046d,0x000400f6,0x0000046f,0x00000470,0x00000000,0x000200f9,0x00000471,0x000200f8, + 0x00000471,0x0004003d,0x0000000e,0x00000472,0x0000046c,0x000500b0,0x0000005b,0x00000473, + 0x00000472,0x00000289,0x000400fa,0x00000473,0x0000046e,0x0000046f,0x000200f8,0x0000046e, + 0x0004003d,0x0000000e,0x00000475,0x0000031e,0x0003003e,0x00000474,0x00000475,0x000200f9, + 0x00000476,0x000200f8,0x00000476,0x000400f6,0x00000478,0x00000479,0x00000000,0x000200f9, + 0x0000047a,0x000200f8,0x0000047a,0x0004003d,0x0000000e,0x0000047b,0x00000474,0x000500b0, + 0x0000005b,0x0000047c,0x0000047b,0x00000376,0x000400fa,0x0000047c,0x00000477,0x00000478, + 0x000200f8,0x00000477,0x0004003d,0x0000000e,0x0000047d,0x00000474,0x0004003d,0x0000000e, + 0x0000047e,0x0000046c,0x0004003d,0x0000000e,0x0000047f,0x00000474,0x000500c2,0x0000000e, + 0x00000480,0x0000047f,0x00000354,0x00050080,0x0000000e,0x00000481,0x0000047e,0x00000480, + 0x0004003d,0x0000000e,0x00000482,0x0000032c,0x00050084,0x0000000e,0x00000483,0x00000481, + 0x00000482,0x0004003d,0x0000000e,0x00000484,0x00000334,0x00050080,0x0000000e,0x00000485, + 0x00000483,0x00000484,0x00050080,0x0000000e,0x00000486,0x00000485,0x000003fc,0x0004003d, + 0x0000000e,0x00000487,0x00000474,0x000500c7,0x0000000e,0x00000488,0x00000487,0x000000ee, + 0x00050080,0x0000000e,0x00000489,0x00000486,0x00000488,0x00060041,0x0000035c,0x0000048a, + 0x00000351,0x000001de,0x00000489,0x0004003d,0x0000034d,0x0000048b,0x0000048a,0x00040071, + 0x0000000e,0x0000048c,0x0000048b,0x0003003e,0x0000048d,0x0000048c,0x00050039,0x0000000c, + 0x0000048e,0x00000026,0x0000048d,0x00050041,0x00000299,0x0000048f,0x0000037a,0x0000047d, + 0x0005003e,0x0000048f,0x0000048e,0x00000028,0x0000028e,0x000200f9,0x00000479,0x000200f8, + 0x00000479,0x0004003d,0x0000000e,0x00000490,0x00000474,0x00050080,0x0000000e,0x00000491, + 0x00000490,0x000002ae,0x0003003e,0x00000474,0x00000491,0x000200f9,0x00000476,0x000200f8, + 0x00000478,0x000400e0,0x0000028e,0x0000028e,0x0000036d,0x0004003d,0x0000000e,0x00000493, + 0x00000391,0x0003003e,0x00000492,0x00000493,0x000200f9,0x00000494,0x000200f8,0x00000494, + 0x000400f6,0x00000496,0x00000497,0x00000000,0x000200f9,0x00000498,0x000200f8,0x00000498, + 0x0004003d,0x0000000e,0x00000499,0x00000492,0x000500b0,0x0000005b,0x0000049a,0x00000499, + 0x0000028e,0x000400fa,0x0000049a,0x00000495,0x00000496,0x000200f8,0x00000495,0x0004003d, + 0x0000000e,0x0000049c,0x00000492,0x00050086,0x0000000e,0x0000049d,0x0000049c,0x0000028e, + 0x00050084,0x0000000e,0x0000049e,0x0000049d,0x00000112,0x0003003e,0x0000049b,0x0000049e, + 0x0004003d,0x0000000e,0x000004a0,0x00000492,0x00050089,0x0000000e,0x000004a1,0x000004a0, + 0x0000028e,0x00050084,0x0000000e,0x000004a2,0x000004a1,0x00000112,0x0003003e,0x0000049f, + 0x000004a2,0x0004003d,0x0000000e,0x000004a4,0x0000049b,0x00050084,0x0000000e,0x000004a5, + 0x000004a4,0x000002ae,0x0004003d,0x0000000e,0x000004a6,0x0000049f,0x00050080,0x0000000e, + 0x000004a7,0x000004a5,0x000004a6,0x00050041,0x00000299,0x000004a8,0x00000467,0x000004a7, + 0x0004003d,0x0000000e,0x000004a9,0x0000049b,0x00050084,0x0000000e,0x000004aa,0x000004a9, + 0x000002ae,0x0004003d,0x0000000e,0x000004ab,0x0000049f,0x00050080,0x0000000e,0x000004ac, + 0x000004aa,0x000004ab,0x00081169,0x000003e5,0x000004ad,0x000004a8,0x000001de,0x000002ae, + 0x00000030,0x0000028e,0x0003003e,0x000004a3,0x000004ad,0x0004003d,0x000003e5,0x000004af, + 0x000004a3,0x00040073,0x000003a2,0x000004b0,0x000004af,0x0003003e,0x000004ae,0x000004b0, + 0x0003003e,0x000004b1,0x000000bf,0x000200f9,0x000004b2,0x000200f8,0x000004b2,0x000400f6, + 0x000004b4,0x000004b5,0x00000001,0x000200f9,0x000004b6,0x000200f8,0x000004b6,0x0004003d, + 0x0000000e,0x000004b7,0x000004b1,0x000500b0,0x0000005b,0x000004b8,0x000004b7,0x000003fc, + 0x000400fa,0x000004b8,0x000004b3,0x000004b4,0x000200f8,0x000004b3,0x0003003e,0x000004b9, + 0x000000bf,0x000200f9,0x000004ba,0x000200f8,0x000004ba,0x000400f6,0x000004bc,0x000004bd, + 0x00000001,0x000200f9,0x000004be,0x000200f8,0x000004be,0x0004003d,0x0000000e,0x000004bf, + 0x000004b9,0x000500b0,0x0000005b,0x000004c0,0x000004bf,0x0000028e,0x000400fa,0x000004c0, + 0x000004bb,0x000004bc,0x000200f8,0x000004bb,0x0004003d,0x0000000e,0x000004c2,0x0000049b, + 0x00050084,0x0000000e,0x000004c3,0x000004c2,0x00000289,0x0004003d,0x0000000e,0x000004c4, + 0x0000046c,0x00050080,0x0000000e,0x000004c5,0x000004c3,0x000004c4,0x0004003d,0x0000000e, + 0x000004c6,0x000004b1,0x00050080,0x0000000e,0x000004c7,0x000004c5,0x000004c6,0x0004003d, + 0x0000000e,0x000004c8,0x000004b9,0x00050084,0x0000000e,0x000004c9,0x000004c8,0x00000112, + 0x00050080,0x0000000e,0x000004ca,0x000004c7,0x000004c9,0x00050041,0x00000299,0x000004cb, + 0x00000297,0x000004ca,0x0004003d,0x0000000e,0x000004cc,0x0000049b,0x00050084,0x0000000e, + 0x000004cd,0x000004cc,0x00000289,0x0004003d,0x0000000e,0x000004ce,0x0000046c,0x00050080, + 0x0000000e,0x000004cf,0x000004cd,0x000004ce,0x0004003d,0x0000000e,0x000004d0,0x000004b1, + 0x00050080,0x0000000e,0x000004d1,0x000004cf,0x000004d0,0x0004003d,0x0000000e,0x000004d2, + 0x000004b9,0x00050084,0x0000000e,0x000004d3,0x000004d2,0x00000112,0x00050080,0x0000000e, + 0x000004d4,0x000004d1,0x000004d3,0x00081169,0x000003ae,0x000004d5,0x000004cb,0x000001de, + 0x00000289,0x00000030,0x0000028e,0x0003003e,0x000004c1,0x000004d5,0x0004003d,0x0000000e, + 0x000004d7,0x000004b1,0x00050084,0x0000000e,0x000004d8,0x000004d7,0x000002ae,0x0004003d, + 0x0000000e,0x000004d9,0x0000049f,0x00050080,0x0000000e,0x000004da,0x000004d8,0x000004d9, + 0x0004003d,0x0000000e,0x000004db,0x000004b9,0x00050084,0x0000000e,0x000004dc,0x000004db, + 0x00000347,0x00050080,0x0000000e,0x000004dd,0x000004da,0x000004dc,0x00050041,0x00000299, + 0x000004de,0x0000037a,0x000004dd,0x0004003d,0x0000000e,0x000004df,0x000004b1,0x00050084, + 0x0000000e,0x000004e0,0x000004df,0x000002ae,0x0004003d,0x0000000e,0x000004e1,0x0000049f, + 0x00050080,0x0000000e,0x000004e2,0x000004e0,0x000004e1,0x0004003d,0x0000000e,0x000004e3, + 0x000004b9,0x00050084,0x0000000e,0x000004e4,0x000004e3,0x00000347,0x00050080,0x0000000e, + 0x000004e5,0x000004e2,0x000004e4,0x00081169,0x000003bd,0x000004e6,0x000004de,0x000001de, + 0x000002ae,0x00000030,0x0000028e,0x0003003e,0x000004d6,0x000004e6,0x0004003d,0x000003ae, + 0x000004e7,0x000004c1,0x0004003d,0x000003bd,0x000004e8,0x000004d6,0x0004003d,0x000003a2, + 0x000004e9,0x000004ae,0x0006116b,0x000003a2,0x000004ea,0x000004e7,0x000004e8,0x000004e9, + 0x0003003e,0x000004ae,0x000004ea,0x000200f9,0x000004bd,0x000200f8,0x000004bd,0x0004003d, + 0x0000000e,0x000004eb,0x000004b9,0x00050080,0x0000000e,0x000004ec,0x000004eb,0x00000205, + 0x0003003e,0x000004b9,0x000004ec,0x000200f9,0x000004ba,0x000200f8,0x000004bc,0x0003003e, + 0x000004ed,0x000001de,0x000200f9,0x000004ee,0x000200f8,0x000004ee,0x000400f6,0x000004f0, + 0x000004f1,0x00000000,0x000200f9,0x000004f2,0x000200f8,0x000004f2,0x0004003d,0x000001db, + 0x000004f3,0x000004ed,0x0004116c,0x0000000e,0x000004f4,0x000003a2,0x0004007c,0x000001db, + 0x000004f5,0x000004f4,0x000500b1,0x0000005b,0x000004f6,0x000004f3,0x000004f5,0x000400fa, + 0x000004f6,0x000004ef,0x000004f0,0x000200f8,0x000004ef,0x0004003d,0x000001db,0x000004f7, + 0x000004ed,0x0004003d,0x000001db,0x000004f8,0x000004ed,0x00050041,0x00000007,0x000004fa, + 0x000004ae,0x000004f8,0x0004003d,0x00000006,0x000004fb,0x000004fa,0x0003003e,0x000004f9, + 0x000004fb,0x00050039,0x00000006,0x000004fc,0x0000000a,0x000004f9,0x00050041,0x00000007, + 0x000004fd,0x000004ae,0x000004f7,0x0003003e,0x000004fd,0x000004fc,0x000200f9,0x000004f1, + 0x000200f8,0x000004f1,0x0004003d,0x000001db,0x000004fe,0x000004ed,0x00050080,0x000001db, + 0x000004ff,0x000004fe,0x00000205,0x0003003e,0x000004ed,0x000004ff,0x000200f9,0x000004ee, + 0x000200f8,0x000004f0,0x000200f9,0x000004b5,0x000200f8,0x000004b5,0x0004003d,0x0000000e, + 0x00000500,0x000004b1,0x00050080,0x0000000e,0x00000501,0x00000500,0x000002ae,0x0003003e, + 0x000004b1,0x00000501,0x000200f9,0x000004b2,0x000200f8,0x000004b4,0x0004003d,0x000003a2, + 0x00000503,0x000004ae,0x00040073,0x000003e5,0x00000504,0x00000503,0x0003003e,0x00000502, + 0x00000504,0x0004003d,0x000003e5,0x00000505,0x00000502,0x0004003d,0x0000000e,0x00000506, + 0x0000049b,0x00050084,0x0000000e,0x00000507,0x00000506,0x000002ae,0x0004003d,0x0000000e, + 0x00000508,0x0000049f,0x00050080,0x0000000e,0x00000509,0x00000507,0x00000508,0x00050041, + 0x00000299,0x0000050a,0x00000467,0x00000509,0x0004003d,0x0000000e,0x0000050b,0x0000049b, + 0x00050084,0x0000000e,0x0000050c,0x0000050b,0x000002ae,0x0004003d,0x0000000e,0x0000050d, + 0x0000049f,0x00050080,0x0000000e,0x0000050e,0x0000050c,0x0000050d,0x0007116a,0x0000050a, + 0x00000505,0x000001de,0x000002ae,0x00000028,0x0000028e,0x000200f9,0x00000497,0x000200f8, + 0x00000497,0x0004003d,0x0000000e,0x0000050f,0x000003f8,0x0004003d,0x0000000e,0x00000510, + 0x00000492,0x00050080,0x0000000e,0x00000511,0x00000510,0x0000050f,0x0003003e,0x00000492, + 0x00000511,0x000200f9,0x00000494,0x000200f8,0x00000496,0x000400e0,0x0000028e,0x0000028e, + 0x0000036d,0x000200f9,0x00000470,0x000200f8,0x00000470,0x0004003d,0x0000000e,0x00000512, + 0x0000046c,0x00050080,0x0000000e,0x00000513,0x00000512,0x000003fc,0x0003003e,0x0000046c, + 0x00000513,0x000200f9,0x0000046d,0x000200f8,0x0000046f,0x0004003d,0x0000000e,0x00000515, + 0x0000031e,0x0003003e,0x00000514,0x00000515,0x000200f9,0x00000516,0x000200f8,0x00000516, + 0x000400f6,0x00000518,0x00000519,0x00000000,0x000200f9,0x0000051a,0x000200f8,0x0000051a, + 0x0004003d,0x0000000e,0x0000051b,0x00000514,0x000500b0,0x0000005b,0x0000051c,0x0000051b, + 0x00000347,0x000400fa,0x0000051c,0x00000517,0x00000518,0x000200f8,0x00000517,0x0004003d, + 0x0000000e,0x0000051e,0x00000514,0x000500c2,0x0000000e,0x0000051f,0x0000051e,0x00000354, + 0x0003003e,0x0000051d,0x0000051f,0x0004003d,0x0000000e,0x00000521,0x00000514,0x000500c7, + 0x0000000e,0x00000522,0x00000521,0x000000ee,0x0003003e,0x00000520,0x00000522,0x0004003d, + 0x0000000e,0x00000524,0x00000329,0x00050084,0x0000000e,0x00000525,0x00000524,0x00000112, + 0x0004003d,0x0000000e,0x00000526,0x0000051d,0x00050080,0x0000000e,0x00000527,0x00000525, + 0x00000526,0x0003003e,0x00000523,0x00000527,0x0004003d,0x0000000e,0x00000528,0x00000523, + 0x00050041,0x00000330,0x00000529,0x0000032f,0x000001de,0x0004003d,0x0000000e,0x0000052a, + 0x00000529,0x000500ae,0x0000005b,0x0000052b,0x00000528,0x0000052a,0x000300f7,0x0000052d, + 0x00000000,0x000400fa,0x0000052b,0x0000052c,0x0000052d,0x000200f8,0x0000052c,0x000200f9, + 0x00000519,0x000200f8,0x0000052d,0x0004003d,0x0000000e,0x00000530,0x00000514,0x00050041, + 0x00000299,0x00000531,0x00000467,0x00000530,0x0006003d,0x0000000c,0x00000532,0x00000531, + 0x00000030,0x0000028e,0x00040073,0x00000006,0x00000533,0x00000532,0x0004003d,0x0000000e, + 0x00000534,0x0000051d,0x00050041,0x00000299,0x00000535,0x0000043f,0x00000534,0x0006003d, + 0x0000000c,0x00000536,0x00000535,0x00000030,0x0000028e,0x00040073,0x00000006,0x00000537, + 0x00000536,0x00050085,0x00000006,0x00000538,0x00000533,0x00000537,0x0003003e,0x00000539, + 0x00000538,0x00050039,0x00000006,0x0000053a,0x0000000a,0x00000539,0x0003003e,0x0000052f, + 0x0000053a,0x0004003d,0x0000000e,0x0000053f,0x00000523,0x00050041,0x00000330,0x00000540, + 0x0000032f,0x000001e5,0x0004003d,0x0000000e,0x00000541,0x00000540,0x00050084,0x0000000e, + 0x00000542,0x0000053f,0x00000541,0x0004003d,0x0000000e,0x00000543,0x00000325,0x00050084, + 0x0000000e,0x00000544,0x00000543,0x000002ae,0x00050080,0x0000000e,0x00000545,0x00000542, + 0x00000544,0x0004003d,0x0000000e,0x00000546,0x00000520,0x00050080,0x0000000e,0x00000547, + 0x00000545,0x00000546,0x0004003d,0x00000006,0x00000548,0x0000052f,0x00040073,0x0000000c, + 0x00000549,0x00000548,0x0003003e,0x0000054a,0x00000549,0x00050039,0x0000000e,0x0000054b, + 0x00000011,0x0000054a,0x0003003e,0x0000054c,0x0000054b,0x00050039,0x0000000e,0x0000054d, + 0x0000001f,0x0000054c,0x00040071,0x0000034d,0x0000054e,0x0000054d,0x00060041,0x0000035c, + 0x0000054f,0x0000053e,0x000001de,0x00000547,0x0003003e,0x0000054f,0x0000054e,0x000200f9, + 0x00000519,0x000200f8,0x00000519,0x0004003d,0x0000000e,0x00000550,0x00000514,0x00050080, + 0x0000000e,0x00000551,0x00000550,0x000002ae,0x0003003e,0x00000514,0x00000551,0x000200f9, + 0x00000516,0x000200f8,0x00000518,0x000100fd,0x00010038,0x00050036,0x00000006,0x0000000a, + 0x00000000,0x00000008,0x00030037,0x00000007,0x00000009,0x000200f8,0x0000000b,0x0004003b, + 0x00000013,0x0000004e,0x00000007,0x0004003b,0x00000013,0x00000051,0x00000007,0x0004003b, + 0x00000013,0x00000055,0x00000007,0x0004003b,0x00000007,0x0000006f,0x00000007,0x0004003b, + 0x00000013,0x00000080,0x00000007,0x0004003b,0x00000013,0x00000086,0x00000007,0x0004003d, + 0x00000006,0x0000004f,0x00000009,0x0004007c,0x0000000e,0x00000050,0x0000004f,0x0003003e, + 0x0000004e,0x00000050,0x0004003d,0x0000000e,0x00000052,0x0000004e,0x000500c7,0x0000000e, + 0x00000054,0x00000052,0x00000053,0x0003003e,0x00000051,0x00000054,0x0004003d,0x0000000e, + 0x00000056,0x0000004e,0x000500c7,0x0000000e,0x00000058,0x00000056,0x00000057,0x0003003e, + 0x00000055,0x00000058,0x0004003d,0x0000000e,0x00000059,0x00000055,0x000500ae,0x0000005b, + 0x0000005c,0x00000059,0x0000005a,0x000300f7,0x0000005e,0x00000000,0x000400fa,0x0000005c, + 0x0000005d,0x0000005e,0x000200f8,0x0000005d,0x0004003d,0x00000006,0x0000005f,0x00000009, + 0x000200fe,0x0000005f,0x000200f8,0x0000005e,0x0004003d,0x0000000e,0x00000061,0x00000055, + 0x000500ae,0x0000005b,0x00000063,0x00000061,0x00000062,0x000300f7,0x00000065,0x00000000, + 0x000400fa,0x00000063,0x00000064,0x00000065,0x000200f8,0x00000064,0x0004003d,0x0000000e, + 0x00000066,0x00000051,0x000500c5,0x0000000e,0x00000067,0x00000066,0x0000005a,0x0004007c, + 0x00000006,0x00000068,0x00000067,0x000200fe,0x00000068,0x000200f8,0x00000065,0x0004003d, + 0x0000000e,0x0000006a,0x00000055,0x000500b0,0x0000005b,0x0000006c,0x0000006a,0x0000006b, + 0x000300f7,0x0000006e,0x00000000,0x000400fa,0x0000006c,0x0000006d,0x0000006e,0x000200f8, + 0x0000006d,0x0004003d,0x0000000e,0x00000070,0x00000055,0x0004007c,0x00000006,0x00000071, + 0x00000070,0x00050085,0x00000006,0x00000073,0x00000071,0x00000072,0x0006000c,0x00000006, + 0x00000074,0x00000001,0x00000002,0x00000073,0x0003003e,0x0000006f,0x00000074,0x0004003d, + 0x0000000e,0x00000075,0x00000051,0x0004007c,0x00000006,0x00000076,0x00000075,0x0004003d, + 0x0000000e,0x00000077,0x00000051,0x0004003d,0x00000006,0x00000078,0x0000006f,0x00050085, + 0x00000006,0x0000007a,0x00000078,0x00000079,0x0004007c,0x0000000e,0x0000007b,0x0000007a, + 0x000500c5,0x0000000e,0x0000007c,0x00000077,0x0000007b,0x0004007c,0x00000006,0x0000007d, + 0x0000007c,0x00050081,0x00000006,0x0000007e,0x00000076,0x0000007d,0x000200fe,0x0000007e, + 0x000200f8,0x0000006e,0x0004003d,0x0000000e,0x00000081,0x00000055,0x000500c2,0x0000000e, + 0x00000083,0x00000081,0x00000082,0x000500c7,0x0000000e,0x00000085,0x00000083,0x00000084, + 0x0003003e,0x00000080,0x00000085,0x0004003d,0x0000000e,0x00000087,0x00000055,0x00050080, + 0x0000000e,0x00000089,0x00000087,0x00000088,0x0004003d,0x0000000e,0x0000008a,0x00000080, + 0x00050080,0x0000000e,0x0000008b,0x00000089,0x0000008a,0x000500c7,0x0000000e,0x0000008d, + 0x0000008b,0x0000008c,0x0003003e,0x00000086,0x0000008d,0x0004003d,0x0000000e,0x0000008e, + 0x00000051,0x0004003d,0x0000000e,0x0000008f,0x00000086,0x000500c5,0x0000000e,0x00000090, + 0x0000008e,0x0000008f,0x0004007c,0x00000006,0x00000091,0x00000090,0x000200fe,0x00000091, + 0x00010038,0x00050036,0x0000000e,0x00000011,0x00000000,0x0000000f,0x00030037,0x0000000d, + 0x00000010,0x000200f8,0x00000012,0x0004003d,0x0000000c,0x00000094,0x00000010,0x0004007c, + 0x00000095,0x00000096,0x00000094,0x00040071,0x0000000e,0x00000097,0x00000096,0x000200fe, + 0x00000097,0x00010038,0x00050036,0x0000000c,0x00000016,0x00000000,0x00000014,0x00030037, + 0x00000013,0x00000015,0x000200f8,0x00000017,0x0004003d,0x0000000e,0x0000009a,0x00000015, + 0x000500c7,0x0000000e,0x0000009c,0x0000009a,0x0000009b,0x00040071,0x00000095,0x0000009d, + 0x0000009c,0x0004007c,0x0000000c,0x0000009e,0x0000009d,0x000200fe,0x0000009e,0x00010038, + 0x00050036,0x0000000e,0x0000001b,0x00000000,0x00000018,0x00030037,0x00000013,0x00000019, + 0x00030037,0x00000013,0x0000001a,0x000200f8,0x0000001c,0x0004003b,0x00000013,0x000000a1, + 0x00000007,0x0004003b,0x00000013,0x000000a5,0x00000007,0x0004003b,0x00000013,0x000000a9, + 0x00000007,0x0004003b,0x00000013,0x000000ad,0x00000007,0x0004003d,0x0000000e,0x000000a2, + 0x00000019,0x0004003d,0x0000000e,0x000000a3,0x0000001a,0x000500c2,0x0000000e,0x000000a4, + 0x000000a2,0x000000a3,0x0003003e,0x000000a1,0x000000a4,0x0004003d,0x0000000e,0x000000a6, + 0x0000001a,0x000500c4,0x0000000e,0x000000a7,0x00000084,0x000000a6,0x00050082,0x0000000e, + 0x000000a8,0x000000a7,0x00000084,0x0003003e,0x000000a5,0x000000a8,0x0004003d,0x0000000e, + 0x000000aa,0x00000019,0x0004003d,0x0000000e,0x000000ab,0x000000a5,0x000500c7,0x0000000e, + 0x000000ac,0x000000aa,0x000000ab,0x0003003e,0x000000a9,0x000000ac,0x0004003d,0x0000000e, + 0x000000ae,0x0000001a,0x00050082,0x0000000e,0x000000af,0x000000ae,0x00000084,0x000500c4, + 0x0000000e,0x000000b0,0x00000084,0x000000af,0x0003003e,0x000000ad,0x000000b0,0x0004003d, + 0x0000000e,0x000000b1,0x000000a1,0x0004003d,0x0000000e,0x000000b2,0x000000a9,0x0004003d, + 0x0000000e,0x000000b3,0x000000ad,0x000500ac,0x0000005b,0x000000b4,0x000000b2,0x000000b3, + 0x000400a8,0x0000005b,0x000000b5,0x000000b4,0x000300f7,0x000000b7,0x00000000,0x000400fa, + 0x000000b5,0x000000b6,0x000000b7,0x000200f8,0x000000b6,0x0004003d,0x0000000e,0x000000b8, + 0x000000a9,0x0004003d,0x0000000e,0x000000b9,0x000000ad,0x000500aa,0x0000005b,0x000000ba, + 0x000000b8,0x000000b9,0x000300f7,0x000000bc,0x00000000,0x000400fa,0x000000ba,0x000000bb, + 0x000000bc,0x000200f8,0x000000bb,0x0004003d,0x0000000e,0x000000bd,0x000000a1,0x000500c7, + 0x0000000e,0x000000be,0x000000bd,0x00000084,0x000500ab,0x0000005b,0x000000c0,0x000000be, + 0x000000bf,0x000200f9,0x000000bc,0x000200f8,0x000000bc,0x000700f5,0x0000005b,0x000000c1, + 0x000000ba,0x000000b6,0x000000c0,0x000000bb,0x000200f9,0x000000b7,0x000200f8,0x000000b7, + 0x000700f5,0x0000005b,0x000000c2,0x000000b4,0x0000001c,0x000000c1,0x000000bc,0x000600a9, + 0x0000000e,0x000000c3,0x000000c2,0x00000084,0x000000bf,0x00050080,0x0000000e,0x000000c4, + 0x000000b1,0x000000c3,0x000200fe,0x000000c4,0x00010038,0x00050036,0x0000000e,0x0000001f, + 0x00000000,0x0000001d,0x00030037,0x00000013,0x0000001e,0x000200f8,0x00000020,0x0004003b, + 0x000000c7,0x000000c8,0x00000007,0x0004003b,0x00000013,0x000000e4,0x00000007,0x0004003b, + 0x00000013,0x000000ea,0x00000007,0x0004003b,0x00000013,0x000000f0,0x00000007,0x0004003b, + 0x00000013,0x000000f7,0x00000007,0x0004003b,0x00000013,0x000000fe,0x00000007,0x0004003b, + 0x00000013,0x00000101,0x00000007,0x0004003b,0x00000013,0x0000010a,0x00000007,0x0004003b, + 0x00000013,0x0000010d,0x00000007,0x0004003b,0x00000013,0x00000116,0x00000007,0x0004003b, + 0x00000013,0x00000118,0x00000007,0x0004003b,0x00000013,0x0000011d,0x00000007,0x0004003b, + 0x00000013,0x00000120,0x00000007,0x0004003b,0x00000013,0x00000122,0x00000007,0x0004003b, + 0x00000013,0x00000124,0x00000007,0x0004003b,0x00000013,0x00000138,0x00000007,0x0004003d, + 0x0000000e,0x000000c9,0x0000001e,0x000500c7,0x0000000e,0x000000cb,0x000000c9,0x000000ca, + 0x000500aa,0x0000005b,0x000000cc,0x000000cb,0x000000ca,0x000300f7,0x000000ce,0x00000000, + 0x000400fa,0x000000cc,0x000000cd,0x000000ce,0x000200f8,0x000000cd,0x0004003d,0x0000000e, + 0x000000cf,0x0000001e,0x000500c7,0x0000000e,0x000000d1,0x000000cf,0x000000d0,0x000500ab, + 0x0000005b,0x000000d2,0x000000d1,0x000000bf,0x000200f9,0x000000ce,0x000200f8,0x000000ce, + 0x000700f5,0x0000005b,0x000000d3,0x000000cc,0x00000020,0x000000d2,0x000000cd,0x0003003e, + 0x000000c8,0x000000d3,0x0004003d,0x0000005b,0x000000d4,0x000000c8,0x000300f7,0x000000d6, + 0x00000000,0x000400fa,0x000000d4,0x000000d5,0x000000d6,0x000200f8,0x000000d5,0x000200fe, + 0x000000bf,0x000200f8,0x000000d6,0x0004003d,0x0000000e,0x000000d8,0x0000001e,0x000500c7, + 0x0000000e,0x000000da,0x000000d8,0x000000d9,0x000500aa,0x0000005b,0x000000db,0x000000da, + 0x000000bf,0x000300f7,0x000000dd,0x00000000,0x000400fa,0x000000db,0x000000dc,0x000000dd, + 0x000200f8,0x000000dc,0x0004003d,0x0000000e,0x000000de,0x0000001e,0x000500c2,0x0000000e, + 0x000000e0,0x000000de,0x000000df,0x000500c7,0x0000000e,0x000000e2,0x000000e0,0x000000e1, + 0x000200fe,0x000000e2,0x000200f8,0x000000dd,0x0004003d,0x0000000e,0x000000e5,0x0000001e, + 0x000500c7,0x0000000e,0x000000e7,0x000000e5,0x000000e6,0x000500ab,0x0000005b,0x000000e8, + 0x000000e7,0x000000bf,0x000600a9,0x0000000e,0x000000e9,0x000000e8,0x000000e1,0x000000bf, + 0x0003003e,0x000000e4,0x000000e9,0x0004003d,0x0000000e,0x000000eb,0x0000001e,0x000500c2, + 0x0000000e,0x000000ed,0x000000eb,0x000000ec,0x000500c7,0x0000000e,0x000000ef,0x000000ed, + 0x000000ee,0x0003003e,0x000000ea,0x000000ef,0x0004003d,0x0000000e,0x000000f1,0x0000001e, + 0x000500c7,0x0000000e,0x000000f2,0x000000f1,0x000000d0,0x0003003e,0x000000f0,0x000000f2, + 0x0004003d,0x0000000e,0x000000f3,0x000000ea,0x000500aa,0x0000005b,0x000000f4,0x000000f3, + 0x000000ee,0x000300f7,0x000000f6,0x00000000,0x000400fa,0x000000f4,0x000000f5,0x000000f9, + 0x000200f8,0x000000f5,0x0003003e,0x000000f7,0x000000f8,0x000200f9,0x000000f6,0x000200f8, + 0x000000f9,0x0004003d,0x0000000e,0x000000fa,0x000000ea,0x000500b2,0x0000005b,0x000000fb, + 0x000000fa,0x000000df,0x000300f7,0x000000fd,0x00000000,0x000400fa,0x000000fb,0x000000fc, + 0x0000011c,0x000200f8,0x000000fc,0x0004003d,0x0000000e,0x000000ff,0x000000ea,0x000500aa, + 0x0000005b,0x00000100,0x000000ff,0x000000bf,0x000300f7,0x00000103,0x00000000,0x000400fa, + 0x00000100,0x00000102,0x00000105,0x000200f8,0x00000102,0x0004003d,0x0000000e,0x00000104, + 0x000000f0,0x0003003e,0x00000101,0x00000104,0x000200f9,0x00000103,0x000200f8,0x00000105, + 0x0004003d,0x0000000e,0x00000107,0x000000f0,0x00050080,0x0000000e,0x00000108,0x00000106, + 0x00000107,0x0003003e,0x00000101,0x00000108,0x000200f9,0x00000103,0x000200f8,0x00000103, + 0x0004003d,0x0000000e,0x00000109,0x00000101,0x0003003e,0x000000fe,0x00000109,0x0004003d, + 0x0000000e,0x0000010b,0x000000ea,0x000500aa,0x0000005b,0x0000010c,0x0000010b,0x000000bf, + 0x000300f7,0x0000010f,0x00000000,0x000400fa,0x0000010c,0x0000010e,0x00000111,0x000200f8, + 0x0000010e,0x0003003e,0x0000010d,0x00000110,0x000200f9,0x0000010f,0x000200f8,0x00000111, + 0x0004003d,0x0000000e,0x00000113,0x000000ea,0x00050082,0x0000000e,0x00000114,0x00000112, + 0x00000113,0x0003003e,0x0000010d,0x00000114,0x000200f9,0x0000010f,0x000200f8,0x0000010f, + 0x0004003d,0x0000000e,0x00000115,0x0000010d,0x0003003e,0x0000010a,0x00000115,0x0004003d, + 0x0000000e,0x00000117,0x000000fe,0x0003003e,0x00000116,0x00000117,0x0004003d,0x0000000e, + 0x00000119,0x0000010a,0x0003003e,0x00000118,0x00000119,0x00060039,0x0000000e,0x0000011a, + 0x0000001b,0x00000116,0x00000118,0x0007000c,0x0000000e,0x0000011b,0x00000001,0x00000026, + 0x0000011a,0x000000df,0x0003003e,0x000000f7,0x0000011b,0x000200f9,0x000000fd,0x000200f8, + 0x0000011c,0x0004003d,0x0000000e,0x0000011e,0x000000ea,0x00050082,0x0000000e,0x0000011f, + 0x0000011e,0x000000df,0x0003003e,0x0000011d,0x0000011f,0x0004003d,0x0000000e,0x00000123, + 0x000000f0,0x0003003e,0x00000122,0x00000123,0x0003003e,0x00000124,0x00000121,0x00060039, + 0x0000000e,0x00000125,0x0000001b,0x00000122,0x00000124,0x0003003e,0x00000120,0x00000125, + 0x0004003d,0x0000000e,0x00000126,0x00000120,0x000500aa,0x0000005b,0x00000127,0x00000126, + 0x000000df,0x000300f7,0x00000129,0x00000000,0x000400fa,0x00000127,0x00000128,0x00000129, + 0x000200f8,0x00000128,0x0003003e,0x00000120,0x000000bf,0x0004003d,0x0000000e,0x0000012a, + 0x0000011d,0x00050080,0x0000000e,0x0000012b,0x0000012a,0x00000084,0x0003003e,0x0000011d, + 0x0000012b,0x000200f9,0x00000129,0x000200f8,0x00000129,0x0004003d,0x0000000e,0x0000012c, + 0x0000011d,0x000500ac,0x0000005b,0x0000012d,0x0000012c,0x00000110,0x000400a8,0x0000005b, + 0x0000012e,0x0000012d,0x000300f7,0x00000130,0x00000000,0x000400fa,0x0000012e,0x0000012f, + 0x00000130,0x000200f8,0x0000012f,0x0004003d,0x0000000e,0x00000131,0x0000011d,0x000500aa, + 0x0000005b,0x00000132,0x00000131,0x00000110,0x0004003d,0x0000000e,0x00000133,0x00000120, + 0x000500ac,0x0000005b,0x00000135,0x00000133,0x00000134,0x000500a7,0x0000005b,0x00000136, + 0x00000132,0x00000135,0x000200f9,0x00000130,0x000200f8,0x00000130,0x000700f5,0x0000005b, + 0x00000137,0x0000012d,0x00000129,0x00000136,0x0000012f,0x000300f7,0x0000013a,0x00000000, + 0x000400fa,0x00000137,0x00000139,0x0000013b,0x000200f8,0x00000139,0x0003003e,0x00000138, + 0x000000f8,0x000200f9,0x0000013a,0x000200f8,0x0000013b,0x0004003d,0x0000000e,0x0000013c, + 0x0000011d,0x000500c4,0x0000000e,0x0000013e,0x0000013c,0x0000013d,0x0004003d,0x0000000e, + 0x0000013f,0x00000120,0x000500c5,0x0000000e,0x00000140,0x0000013e,0x0000013f,0x0003003e, + 0x00000138,0x00000140,0x000200f9,0x0000013a,0x000200f8,0x0000013a,0x0004003d,0x0000000e, + 0x00000141,0x00000138,0x0003003e,0x000000f7,0x00000141,0x000200f9,0x000000fd,0x000200f8, + 0x000000fd,0x000200f9,0x000000f6,0x000200f8,0x000000f6,0x0004003d,0x0000000e,0x00000142, + 0x000000e4,0x0004003d,0x0000000e,0x00000143,0x000000f7,0x000500c5,0x0000000e,0x00000144, + 0x00000142,0x00000143,0x000200fe,0x00000144,0x00010038,0x00050036,0x00000006,0x00000023, + 0x00000000,0x00000021,0x00030037,0x00000013,0x00000022,0x000200f8,0x00000024,0x0004003b, + 0x000000c7,0x00000147,0x00000007,0x0004003b,0x00000013,0x0000014b,0x00000007,0x0004003b, + 0x00000013,0x0000014f,0x00000007,0x0004003b,0x00000007,0x00000156,0x00000007,0x0004003b, + 0x00000007,0x00000173,0x00000007,0x0004003d,0x0000000e,0x00000148,0x00000022,0x000500c7, + 0x0000000e,0x00000149,0x00000148,0x000000e1,0x000500ab,0x0000005b,0x0000014a,0x00000149, + 0x000000bf,0x0003003e,0x00000147,0x0000014a,0x0004003d,0x0000000e,0x0000014c,0x00000022, + 0x000500c2,0x0000000e,0x0000014d,0x0000014c,0x0000013d,0x000500c7,0x0000000e,0x0000014e, + 0x0000014d,0x00000110,0x0003003e,0x0000014b,0x0000014e,0x0004003d,0x0000000e,0x00000150, + 0x00000022,0x000500c7,0x0000000e,0x00000151,0x00000150,0x00000121,0x0003003e,0x0000014f, + 0x00000151,0x0004003d,0x0000000e,0x00000152,0x0000014b,0x000500aa,0x0000005b,0x00000153, + 0x00000152,0x000000bf,0x000300f7,0x00000155,0x00000000,0x000400fa,0x00000153,0x00000154, + 0x0000015b,0x000200f8,0x00000154,0x0004003d,0x0000000e,0x00000157,0x0000014f,0x00040070, + 0x00000006,0x00000158,0x00000157,0x00050085,0x00000006,0x0000015a,0x00000158,0x00000159, + 0x0003003e,0x00000156,0x0000015a,0x000200f9,0x00000155,0x000200f8,0x0000015b,0x0004003d, + 0x0000000e,0x0000015c,0x0000014b,0x000500aa,0x0000005b,0x0000015d,0x0000015c,0x00000110, + 0x0004003d,0x0000000e,0x0000015e,0x0000014f,0x000500aa,0x0000005b,0x0000015f,0x0000015e, + 0x00000121,0x000500a7,0x0000005b,0x00000160,0x0000015d,0x0000015f,0x000300f7,0x00000162, + 0x00000000,0x000400fa,0x00000160,0x00000161,0x00000164,0x000200f8,0x00000161,0x0003003e, + 0x00000156,0x00000163,0x000200f9,0x00000162,0x000200f8,0x00000164,0x0004003d,0x0000000e, + 0x00000166,0x0000014f,0x00040070,0x00000006,0x00000167,0x00000166,0x00050085,0x00000006, + 0x00000169,0x00000167,0x00000168,0x00050081,0x00000006,0x0000016a,0x00000165,0x00000169, + 0x0004003d,0x0000000e,0x0000016b,0x0000014b,0x00050080,0x0000000e,0x0000016d,0x0000016b, + 0x0000016c,0x000500c4,0x0000000e,0x0000016f,0x0000016d,0x0000016e,0x0004007c,0x00000006, + 0x00000170,0x0000016f,0x00050085,0x00000006,0x00000171,0x0000016a,0x00000170,0x0003003e, + 0x00000156,0x00000171,0x000200f9,0x00000162,0x000200f8,0x00000162,0x000200f9,0x00000155, + 0x000200f8,0x00000155,0x0004003d,0x0000005b,0x00000172,0x00000147,0x000300f7,0x00000175, + 0x00000000,0x000400fa,0x00000172,0x00000174,0x00000178,0x000200f8,0x00000174,0x0004003d, + 0x00000006,0x00000176,0x00000156,0x0004007f,0x00000006,0x00000177,0x00000176,0x0003003e, + 0x00000173,0x00000177,0x000200f9,0x00000175,0x000200f8,0x00000178,0x0004003d,0x00000006, + 0x00000179,0x00000156,0x0003003e,0x00000173,0x00000179,0x000200f9,0x00000175,0x000200f8, + 0x00000175,0x0004003d,0x00000006,0x0000017a,0x00000173,0x000200fe,0x0000017a,0x00010038, + 0x00050036,0x0000000c,0x00000026,0x00000000,0x00000014,0x00030037,0x00000013,0x00000025, + 0x000200f8,0x00000027,0x0004003b,0x00000013,0x0000017d,0x00000007,0x0004003d,0x0000000e, + 0x0000017e,0x00000025,0x0003003e,0x0000017d,0x0000017e,0x00050039,0x00000006,0x0000017f, + 0x00000023,0x0000017d,0x00040073,0x0000000c,0x00000180,0x0000017f,0x000200fe,0x00000180, + 0x00010038,0x00050036,0x00000006,0x0000002a,0x00000000,0x00000028,0x00030037,0x0000000d, + 0x00000029,0x000200f8,0x0000002b,0x0004003b,0x00000013,0x00000183,0x00000007,0x0004003b, + 0x0000000d,0x00000184,0x00000007,0x0004003b,0x00000007,0x0000018a,0x00000007,0x0004003b, + 0x00000013,0x00000194,0x00000007,0x0004003d,0x0000000c,0x00000185,0x00000029,0x0003003e, + 0x00000184,0x00000185,0x00050039,0x0000000e,0x00000186,0x00000011,0x00000184,0x0003003e, + 0x00000183,0x00000186,0x0004003d,0x0000000e,0x00000187,0x00000183,0x000500ae,0x0000005b, + 0x00000189,0x00000187,0x00000188,0x000300f7,0x0000018c,0x00000000,0x000400fa,0x00000189, + 0x0000018b,0x0000018e,0x000200f8,0x0000018b,0x0003003e,0x0000018a,0x0000018d,0x000200f9, + 0x0000018c,0x000200f8,0x0000018e,0x0004003d,0x0000000c,0x00000190,0x00000029,0x00040073, + 0x00000006,0x00000191,0x00000190,0x0004003d,0x0000000e,0x00000192,0x00000183,0x00050080, + 0x0000000e,0x00000193,0x00000192,0x00000084,0x0003003e,0x00000194,0x00000193,0x00050039, + 0x0000000c,0x00000195,0x00000016,0x00000194,0x00040073,0x00000006,0x00000196,0x00000195, + 0x00050081,0x00000006,0x00000197,0x00000191,0x00000196,0x00050085,0x00000006,0x00000198, + 0x0000018f,0x00000197,0x0003003e,0x0000018a,0x00000198,0x000200f9,0x0000018c,0x000200f8, + 0x0000018c,0x0004003d,0x00000006,0x00000199,0x0000018a,0x000200fe,0x00000199,0x00010038, + 0x00050036,0x00000006,0x0000002d,0x00000000,0x00000028,0x00030037,0x0000000d,0x0000002c, + 0x000200f8,0x0000002e,0x0004003b,0x0000000d,0x0000019e,0x00000007,0x0004003b,0x00000013, + 0x000001a2,0x00000007,0x0004003d,0x0000000c,0x0000019c,0x0000002c,0x00040073,0x00000006, + 0x0000019d,0x0000019c,0x0004003d,0x0000000c,0x0000019f,0x0000002c,0x0003003e,0x0000019e, + 0x0000019f,0x00050039,0x0000000e,0x000001a0,0x00000011,0x0000019e,0x00050082,0x0000000e, + 0x000001a1,0x000001a0,0x00000084,0x0003003e,0x000001a2,0x000001a1,0x00050039,0x0000000c, + 0x000001a3,0x00000016,0x000001a2,0x00040073,0x00000006,0x000001a4,0x000001a3,0x00050081, + 0x00000006,0x000001a5,0x0000019d,0x000001a4,0x00050085,0x00000006,0x000001a6,0x0000018f, + 0x000001a5,0x000200fe,0x000001a6,0x00010038,0x00050036,0x0000000c,0x00000031,0x00000000, + 0x0000002f,0x00030037,0x0000000d,0x00000030,0x000200f8,0x00000032,0x0004003b,0x0000000d, + 0x000001a9,0x00000007,0x0004003b,0x00000013,0x000001ad,0x00000007,0x0004003d,0x0000000c, + 0x000001aa,0x00000030,0x0003003e,0x000001a9,0x000001aa,0x00050039,0x0000000e,0x000001ab, + 0x00000011,0x000001a9,0x00050080,0x0000000e,0x000001ac,0x000001ab,0x00000084,0x0003003e, + 0x000001ad,0x000001ac,0x00050039,0x0000000c,0x000001ae,0x00000016,0x000001ad,0x000200fe, + 0x000001ae,0x00010038,0x00050036,0x0000000c,0x00000034,0x00000000,0x0000002f,0x00030037, + 0x0000000d,0x00000033,0x000200f8,0x00000035,0x0004003b,0x0000000d,0x000001b1,0x00000007, + 0x0004003b,0x00000013,0x000001b5,0x00000007,0x0004003d,0x0000000c,0x000001b2,0x00000033, + 0x0003003e,0x000001b1,0x000001b2,0x00050039,0x0000000e,0x000001b3,0x00000011,0x000001b1, + 0x00050082,0x0000000e,0x000001b4,0x000001b3,0x00000084,0x0003003e,0x000001b5,0x000001b4, + 0x00050039,0x0000000c,0x000001b6,0x00000016,0x000001b5,0x000200fe,0x000001b6,0x00010038, + 0x00050036,0x0000000c,0x00000037,0x00000000,0x0000002f,0x00030037,0x0000000d,0x00000036, + 0x000200f8,0x00000038,0x0004003b,0x00000007,0x000001b9,0x00000007,0x0004003b,0x0000000d, + 0x000001cb,0x00000007,0x0004003b,0x00000007,0x000001ce,0x00000007,0x0004003b,0x000001dc, + 0x000001dd,0x00000007,0x0004003b,0x00000007,0x000001e7,0x00000007,0x0004003b,0x0000000d, + 0x000001e8,0x00000007,0x0004003b,0x0000000d,0x000001f1,0x00000007,0x0004003b,0x00000007, + 0x000001f4,0x00000007,0x0004003b,0x0000000d,0x000001f5,0x00000007,0x0004003b,0x0000000d, + 0x00000201,0x00000007,0x0004003d,0x0000000c,0x000001ba,0x00000036,0x00040073,0x00000006, + 0x000001bb,0x000001ba,0x0003003e,0x000001b9,0x000001bb,0x0004003d,0x00000006,0x000001bc, + 0x000001b9,0x000500ba,0x0000005b,0x000001bd,0x000001bc,0x00000163,0x000400a8,0x0000005b, + 0x000001be,0x000001bd,0x000400a8,0x0000005b,0x000001bf,0x000001be,0x000300f7,0x000001c1, + 0x00000000,0x000400fa,0x000001bf,0x000001c0,0x000001c1,0x000200f8,0x000001c0,0x0004003d, + 0x00000006,0x000001c2,0x000001b9,0x0004009d,0x0000005b,0x000001c3,0x000001c2,0x000200f9, + 0x000001c1,0x000200f8,0x000001c1,0x000700f5,0x0000005b,0x000001c4,0x000001be,0x00000038, + 0x000001c3,0x000001c0,0x000300f7,0x000001c6,0x00000000,0x000400fa,0x000001c4,0x000001c5, + 0x000001c6,0x000200f8,0x000001c5,0x0004003d,0x00000006,0x000001c7,0x000001b9,0x00050088, + 0x00000006,0x000001c8,0x00000165,0x000001c7,0x00040073,0x0000000c,0x000001c9,0x000001c8, + 0x000200fe,0x000001c9,0x000200f8,0x000001c6,0x0004003d,0x00000006,0x000001cc,0x000001b9, + 0x00050088,0x00000006,0x000001cd,0x00000165,0x000001cc,0x0003003e,0x000001ce,0x000001cd, + 0x00050039,0x00000006,0x000001cf,0x0000000a,0x000001ce,0x00040073,0x0000000c,0x000001d0, + 0x000001cf,0x0003003e,0x000001cb,0x000001d0,0x0004003d,0x0000000c,0x000001d1,0x000001cb, + 0x0004009d,0x0000005b,0x000001d2,0x000001d1,0x0004003d,0x0000000c,0x000001d3,0x000001cb, + 0x000500b4,0x0000005b,0x000001d5,0x000001d3,0x000001d4,0x000500a6,0x0000005b,0x000001d6, + 0x000001d2,0x000001d5,0x000300f7,0x000001d8,0x00000000,0x000400fa,0x000001d6,0x000001d7, + 0x000001d8,0x000200f8,0x000001d7,0x0004003d,0x0000000c,0x000001d9,0x000001cb,0x000200fe, + 0x000001d9,0x000200f8,0x000001d8,0x0003003e,0x000001dd,0x000001de,0x000200f9,0x000001df, + 0x000200f8,0x000001df,0x000400f6,0x000001e1,0x000001e2,0x00000000,0x000200f9,0x000001e3, + 0x000200f8,0x000001e3,0x0004003d,0x000001db,0x000001e4,0x000001dd,0x000500b1,0x0000005b, + 0x000001e6,0x000001e4,0x000001e5,0x000400fa,0x000001e6,0x000001e0,0x000001e1,0x000200f8, + 0x000001e0,0x0004003d,0x0000000c,0x000001e9,0x000001cb,0x0003003e,0x000001e8,0x000001e9, + 0x00050039,0x00000006,0x000001ea,0x0000002a,0x000001e8,0x0004003d,0x00000006,0x000001eb, + 0x000001b9,0x00050085,0x00000006,0x000001ec,0x000001ea,0x000001eb,0x0003003e,0x000001e7, + 0x000001ec,0x0004003d,0x00000006,0x000001ed,0x000001e7,0x000500b8,0x0000005b,0x000001ee, + 0x000001ed,0x00000165,0x000300f7,0x000001f0,0x00000000,0x000400fa,0x000001ee,0x000001ef, + 0x000001f0,0x000200f8,0x000001ef,0x0004003d,0x0000000c,0x000001f2,0x000001cb,0x0003003e, + 0x000001f1,0x000001f2,0x00050039,0x0000000c,0x000001f3,0x00000031,0x000001f1,0x0003003e, + 0x000001cb,0x000001f3,0x000200f9,0x000001f0,0x000200f8,0x000001f0,0x0004003d,0x0000000c, + 0x000001f6,0x000001cb,0x0003003e,0x000001f5,0x000001f6,0x00050039,0x00000006,0x000001f7, + 0x0000002d,0x000001f5,0x0004003d,0x00000006,0x000001f8,0x000001b9,0x00050085,0x00000006, + 0x000001f9,0x000001f7,0x000001f8,0x0003003e,0x000001f4,0x000001f9,0x0004003d,0x0000000c, + 0x000001fa,0x000001cb,0x000500ba,0x0000005b,0x000001fb,0x000001fa,0x000001d4,0x0004003d, + 0x00000006,0x000001fc,0x000001f4,0x000500ba,0x0000005b,0x000001fd,0x000001fc,0x00000165, + 0x000500a7,0x0000005b,0x000001fe,0x000001fb,0x000001fd,0x000300f7,0x00000200,0x00000000, + 0x000400fa,0x000001fe,0x000001ff,0x00000200,0x000200f8,0x000001ff,0x0004003d,0x0000000c, + 0x00000202,0x000001cb,0x0003003e,0x00000201,0x00000202,0x00050039,0x0000000c,0x00000203, + 0x00000034,0x00000201,0x0003003e,0x000001cb,0x00000203,0x000200f9,0x00000200,0x000200f8, + 0x00000200,0x000200f9,0x000001e2,0x000200f8,0x000001e2,0x0004003d,0x000001db,0x00000204, + 0x000001dd,0x00050080,0x000001db,0x00000206,0x00000204,0x00000205,0x0003003e,0x000001dd, + 0x00000206,0x000200f9,0x000001df,0x000200f8,0x000001e1,0x0004003d,0x0000000c,0x00000207, + 0x000001cb,0x000200fe,0x00000207,0x00010038,0x00050036,0x0000000c,0x0000003d,0x00000000, + 0x00000039,0x00030037,0x0000000d,0x0000003a,0x00030037,0x0000000d,0x0000003b,0x00030037, + 0x0000000d,0x0000003c,0x000200f8,0x0000003e,0x0004003b,0x00000007,0x0000020a,0x00000007, + 0x0004003b,0x00000007,0x00000210,0x00000007,0x0004003b,0x00000007,0x00000215,0x00000007, + 0x0004003b,0x00000007,0x00000219,0x00000007,0x0004003b,0x00000007,0x0000021d,0x00000007, + 0x0004003b,0x000001dc,0x00000230,0x00000007,0x0004003b,0x00000007,0x0000023c,0x00000007, + 0x0004003b,0x00000007,0x00000244,0x00000007,0x0004003b,0x00000007,0x00000256,0x00000007, + 0x0004003b,0x00000007,0x00000261,0x00000007,0x0004003b,0x00000007,0x00000265,0x00000007, + 0x0004003d,0x0000000c,0x0000020b,0x0000003a,0x00040073,0x00000006,0x0000020c,0x0000020b, + 0x0004003d,0x0000000c,0x0000020d,0x0000003b,0x00040073,0x00000006,0x0000020e,0x0000020d, + 0x00050085,0x00000006,0x0000020f,0x0000020c,0x0000020e,0x0003003e,0x0000020a,0x0000020f, + 0x0004003d,0x00000006,0x00000211,0x0000020a,0x0004003d,0x0000000c,0x00000212,0x0000003c, + 0x00040073,0x00000006,0x00000213,0x00000212,0x00050081,0x00000006,0x00000214,0x00000211, + 0x00000213,0x0003003e,0x00000210,0x00000214,0x0004003d,0x00000006,0x00000216,0x00000210, + 0x0004003d,0x00000006,0x00000217,0x0000020a,0x00050083,0x00000006,0x00000218,0x00000216, + 0x00000217,0x0003003e,0x00000215,0x00000218,0x0004003d,0x00000006,0x0000021a,0x00000210, + 0x0004003d,0x00000006,0x0000021b,0x00000215,0x00050083,0x00000006,0x0000021c,0x0000021a, + 0x0000021b,0x0003003e,0x00000219,0x0000021c,0x0004003d,0x00000006,0x0000021e,0x0000020a, + 0x0004003d,0x00000006,0x0000021f,0x00000219,0x00050083,0x00000006,0x00000220,0x0000021e, + 0x0000021f,0x0004003d,0x0000000c,0x00000221,0x0000003c,0x00040073,0x00000006,0x00000222, + 0x00000221,0x0004003d,0x00000006,0x00000223,0x00000215,0x00050083,0x00000006,0x00000224, + 0x00000222,0x00000223,0x00050081,0x00000006,0x00000225,0x00000220,0x00000224,0x0003003e, + 0x0000021d,0x00000225,0x0004003d,0x00000006,0x00000226,0x0000021d,0x000500b7,0x0000005b, + 0x00000227,0x00000226,0x00000163,0x000300f7,0x00000229,0x00000000,0x000400fa,0x00000227, + 0x00000228,0x00000229,0x000200f8,0x00000228,0x0004003d,0x00000006,0x0000022a,0x00000210, + 0x0004009d,0x0000005b,0x0000022b,0x0000022a,0x000400a8,0x0000005b,0x0000022c,0x0000022b, + 0x000200f9,0x00000229,0x000200f8,0x00000229,0x000700f5,0x0000005b,0x0000022d,0x00000227, + 0x0000003e,0x0000022c,0x00000228,0x000300f7,0x0000022f,0x00000000,0x000400fa,0x0000022d, + 0x0000022e,0x0000022f,0x000200f8,0x0000022e,0x0004003d,0x00000006,0x00000231,0x00000210, + 0x0006000c,0x00000006,0x00000232,0x00000001,0x00000004,0x00000231,0x0004007c,0x0000000e, + 0x00000233,0x00000232,0x000500c2,0x0000000e,0x00000234,0x00000233,0x0000016e,0x000500c7, + 0x0000000e,0x00000236,0x00000234,0x00000235,0x0004007c,0x000001db,0x00000237,0x00000236, + 0x00050082,0x000001db,0x00000239,0x00000237,0x00000238,0x0007000c,0x000001db,0x0000023b, + 0x00000001,0x0000002a,0x00000239,0x0000023a,0x0003003e,0x00000230,0x0000023b,0x0004003d, + 0x000001db,0x0000023d,0x00000230,0x00050082,0x000001db,0x0000023f,0x0000023d,0x0000023e, + 0x00050080,0x000001db,0x00000240,0x0000023f,0x00000238,0x0004007c,0x0000000e,0x00000241, + 0x00000240,0x000500c4,0x0000000e,0x00000242,0x00000241,0x0000016e,0x0004007c,0x00000006, + 0x00000243,0x00000242,0x0003003e,0x0000023c,0x00000243,0x0004003d,0x00000006,0x00000245, + 0x00000210,0x0004003d,0x000001db,0x00000246,0x00000230,0x00050082,0x000001db,0x00000247, + 0x00000238,0x00000246,0x00050080,0x000001db,0x00000248,0x00000247,0x0000023e,0x0004007c, + 0x0000000e,0x00000249,0x00000248,0x000500c4,0x0000000e,0x0000024a,0x00000249,0x0000016e, + 0x0004007c,0x00000006,0x0000024b,0x0000024a,0x00050085,0x00000006,0x0000024c,0x00000245, + 0x0000024b,0x0003003e,0x00000244,0x0000024c,0x0004003d,0x00000006,0x0000024d,0x00000244, + 0x0004003d,0x00000006,0x0000024e,0x00000244,0x0006000c,0x00000006,0x0000024f,0x00000001, + 0x00000008,0x0000024e,0x00050083,0x00000006,0x00000250,0x0000024d,0x0000024f,0x000500b4, + 0x0000005b,0x00000251,0x00000250,0x0000018f,0x000300f7,0x00000253,0x00000000,0x000400fa, + 0x00000251,0x00000252,0x00000253,0x000200f8,0x00000252,0x0004003d,0x00000006,0x00000254, + 0x0000021d,0x000500ba,0x0000005b,0x00000255,0x00000254,0x00000163,0x000300f7,0x00000258, + 0x00000000,0x000400fa,0x00000255,0x00000257,0x0000025b,0x000200f8,0x00000257,0x0004003d, + 0x00000006,0x00000259,0x00000244,0x0006000c,0x00000006,0x0000025a,0x00000001,0x00000009, + 0x00000259,0x0003003e,0x00000256,0x0000025a,0x000200f9,0x00000258,0x000200f8,0x0000025b, + 0x0004003d,0x00000006,0x0000025c,0x00000244,0x0006000c,0x00000006,0x0000025d,0x00000001, + 0x00000008,0x0000025c,0x0003003e,0x00000256,0x0000025d,0x000200f9,0x00000258,0x000200f8, + 0x00000258,0x0004003d,0x00000006,0x0000025e,0x00000256,0x0004003d,0x00000006,0x0000025f, + 0x0000023c,0x00050085,0x00000006,0x00000260,0x0000025e,0x0000025f,0x0003003e,0x00000261, + 0x00000260,0x00050039,0x00000006,0x00000262,0x0000000a,0x00000261,0x00040073,0x0000000c, + 0x00000263,0x00000262,0x000200fe,0x00000263,0x000200f8,0x00000253,0x000200f9,0x0000022f, + 0x000200f8,0x0000022f,0x0004003d,0x00000006,0x00000266,0x00000210,0x0003003e,0x00000265, + 0x00000266,0x00050039,0x00000006,0x00000267,0x0000000a,0x00000265,0x00040073,0x0000000c, + 0x00000268,0x00000267,0x000200fe,0x00000268,0x00010038,0x00050036,0x0000000c,0x00000040, + 0x00000000,0x0000002f,0x00030037,0x0000000d,0x0000003f,0x000200f8,0x00000041,0x0004003b, + 0x0000000d,0x0000026b,0x00000007,0x0004003b,0x0000000d,0x0000026e,0x00000007,0x0004003b, + 0x0000000d,0x00000270,0x00000007,0x0004003b,0x0000000d,0x00000271,0x00000007,0x0004003b, + 0x00000013,0x00000277,0x00000007,0x0004003b,0x0000000d,0x00000278,0x00000007,0x0004003b, + 0x00000013,0x0000027b,0x00000007,0x0004003b,0x00000013,0x00000282,0x00000007,0x0004003d, + 0x0000000c,0x0000026f,0x0000003f,0x0003003e,0x0000026e,0x0000026f,0x0003003e,0x00000270, + 0x0000026c,0x0003003e,0x00000271,0x0000026d,0x00070039,0x0000000c,0x00000272,0x0000003d, + 0x0000026e,0x00000270,0x00000271,0x0003003e,0x0000026b,0x00000272,0x0004003d,0x0000000c, + 0x00000273,0x0000026b,0x0008000c,0x0000000c,0x00000276,0x00000001,0x0000002b,0x00000273, + 0x00000274,0x00000275,0x0003003e,0x0000026b,0x00000276,0x0004003d,0x0000000c,0x00000279, + 0x0000026b,0x0003003e,0x00000278,0x00000279,0x00050039,0x0000000e,0x0000027a,0x00000011, + 0x00000278,0x0003003e,0x00000277,0x0000027a,0x0004003d,0x0000000e,0x0000027c,0x00000277, + 0x000500c4,0x0000000e,0x0000027e,0x0000027c,0x0000027d,0x00050080,0x0000000e,0x00000280, + 0x0000027e,0x0000027f,0x000500c7,0x0000000e,0x00000281,0x00000280,0x0000009b,0x0003003e, + 0x0000027b,0x00000281,0x0004003d,0x0000000e,0x00000283,0x0000027b,0x0003003e,0x00000282, + 0x00000283,0x00050039,0x0000000c,0x00000284,0x00000016,0x00000282,0x000200fe,0x00000284, + 0x00010038,0x00050036,0x0000000c,0x00000047,0x00000000,0x00000042,0x00030037,0x00000013, + 0x00000043,0x00030037,0x00000013,0x00000044,0x00030037,0x00000013,0x00000045,0x00030037, + 0x00000013,0x00000046,0x000200f8,0x00000048,0x0004003b,0x00000013,0x00000287,0x00000007, + 0x0004003b,0x0000000d,0x00000293,0x00000007,0x0004003b,0x0000000d,0x000002a1,0x00000007, + 0x0004003b,0x0000000d,0x000002ac,0x00000007,0x0004003b,0x0000000d,0x000002b8,0x00000007, + 0x0004003b,0x0000000d,0x000002c4,0x00000007,0x0004003b,0x0000000d,0x000002c8,0x00000007, + 0x0004003d,0x0000000e,0x00000288,0x00000043,0x00050084,0x0000000e,0x0000028a,0x00000288, + 0x00000289,0x0004003d,0x0000000e,0x0000028b,0x00000044,0x00050080,0x0000000e,0x0000028c, + 0x0000028a,0x0000028b,0x0004003d,0x0000000e,0x0000028d,0x00000045,0x00050084,0x0000000e, + 0x0000028f,0x0000028d,0x0000028e,0x00050080,0x0000000e,0x00000290,0x0000028c,0x0000028f, + 0x0004003d,0x0000000e,0x00000291,0x00000046,0x00050080,0x0000000e,0x00000292,0x00000290, + 0x00000291,0x0003003e,0x00000287,0x00000292,0x0004003d,0x0000000e,0x00000298,0x00000287, + 0x00050041,0x00000299,0x0000029a,0x00000297,0x00000298,0x0006003d,0x0000000c,0x0000029b, + 0x0000029a,0x00000030,0x0000028e,0x0004003d,0x0000000e,0x0000029c,0x00000287,0x00050080, + 0x0000000e,0x0000029d,0x0000029c,0x000000df,0x00050041,0x00000299,0x0000029e,0x00000297, + 0x0000029d,0x0006003d,0x0000000c,0x0000029f,0x0000029e,0x00000030,0x0000028e,0x00050081, + 0x0000000c,0x000002a0,0x0000029b,0x0000029f,0x0003003e,0x00000293,0x000002a0,0x0004003d, + 0x0000000e,0x000002a2,0x00000287,0x00050080,0x0000000e,0x000002a3,0x000002a2,0x00000112, + 0x00050041,0x00000299,0x000002a4,0x00000297,0x000002a3,0x0006003d,0x0000000c,0x000002a5, + 0x000002a4,0x00000030,0x0000028e,0x0004003d,0x0000000e,0x000002a6,0x00000287,0x00050080, + 0x0000000e,0x000002a8,0x000002a6,0x000002a7,0x00050041,0x00000299,0x000002a9,0x00000297, + 0x000002a8,0x0006003d,0x0000000c,0x000002aa,0x000002a9,0x00000030,0x0000028e,0x00050081, + 0x0000000c,0x000002ab,0x000002a5,0x000002aa,0x0003003e,0x000002a1,0x000002ab,0x0004003d, + 0x0000000e,0x000002ad,0x00000287,0x00050080,0x0000000e,0x000002af,0x000002ad,0x000002ae, + 0x00050041,0x00000299,0x000002b0,0x00000297,0x000002af,0x0006003d,0x0000000c,0x000002b1, + 0x000002b0,0x00000030,0x0000028e,0x0004003d,0x0000000e,0x000002b2,0x00000287,0x00050080, + 0x0000000e,0x000002b4,0x000002b2,0x000002b3,0x00050041,0x00000299,0x000002b5,0x00000297, + 0x000002b4,0x0006003d,0x0000000c,0x000002b6,0x000002b5,0x00000030,0x0000028e,0x00050081, + 0x0000000c,0x000002b7,0x000002b1,0x000002b6,0x0003003e,0x000002ac,0x000002b7,0x0004003d, + 0x0000000e,0x000002b9,0x00000287,0x00050080,0x0000000e,0x000002bb,0x000002b9,0x000002ba, + 0x00050041,0x00000299,0x000002bc,0x00000297,0x000002bb,0x0006003d,0x0000000c,0x000002bd, + 0x000002bc,0x00000030,0x0000028e,0x0004003d,0x0000000e,0x000002be,0x00000287,0x00050080, + 0x0000000e,0x000002c0,0x000002be,0x000002bf,0x00050041,0x00000299,0x000002c1,0x00000297, + 0x000002c0,0x0006003d,0x0000000c,0x000002c2,0x000002c1,0x00000030,0x0000028e,0x00050081, + 0x0000000c,0x000002c3,0x000002bd,0x000002c2,0x0003003e,0x000002b8,0x000002c3,0x0004003d, + 0x0000000c,0x000002c5,0x00000293,0x0004003d,0x0000000c,0x000002c6,0x000002a1,0x00050081, + 0x0000000c,0x000002c7,0x000002c5,0x000002c6,0x0003003e,0x000002c4,0x000002c7,0x0004003d, + 0x0000000c,0x000002c9,0x000002c4,0x0004003d,0x0000000c,0x000002ca,0x000002ac,0x00050081, + 0x0000000c,0x000002cb,0x000002c9,0x000002ca,0x0003003e,0x000002c8,0x000002cb,0x0004003d, + 0x0000000c,0x000002cc,0x000002c8,0x0004003d,0x0000000c,0x000002cd,0x000002b8,0x00050081, + 0x0000000c,0x000002ce,0x000002cc,0x000002cd,0x000200fe,0x000002ce,0x00010038,0x00050036, + 0x0000000c,0x0000004c,0x00000000,0x00000049,0x00030037,0x00000013,0x0000004a,0x00030037, + 0x00000013,0x0000004b,0x000200f8,0x0000004d,0x0004003b,0x0000000d,0x000002d1,0x00000007, + 0x0004003b,0x00000013,0x000002d2,0x00000007,0x0004003b,0x00000013,0x000002d4,0x00000007, + 0x0004003b,0x00000013,0x000002d6,0x00000007,0x0004003b,0x00000013,0x000002d7,0x00000007, + 0x0004003b,0x00000013,0x000002d9,0x00000007,0x0004003b,0x00000013,0x000002db,0x00000007, + 0x0004003b,0x00000013,0x000002dd,0x00000007,0x0004003b,0x00000013,0x000002de,0x00000007, + 0x0004003b,0x0000000d,0x000002e1,0x00000007,0x0004003b,0x00000013,0x000002e3,0x00000007, + 0x0004003b,0x00000013,0x000002e5,0x00000007,0x0004003b,0x00000013,0x000002e7,0x00000007, + 0x0004003b,0x00000013,0x000002e8,0x00000007,0x0004003b,0x0000000d,0x000002eb,0x00000007, + 0x0004003b,0x00000013,0x000002ed,0x00000007,0x0004003b,0x00000013,0x000002ef,0x00000007, + 0x0004003b,0x00000013,0x000002f1,0x00000007,0x0004003b,0x00000013,0x000002f2,0x00000007, + 0x0004003b,0x0000000d,0x000002f5,0x00000007,0x0004003b,0x00000013,0x000002f6,0x00000007, + 0x0004003b,0x00000013,0x000002f8,0x00000007,0x0004003b,0x00000013,0x000002fa,0x00000007, + 0x0004003b,0x00000013,0x000002fb,0x00000007,0x0004003b,0x00000013,0x000002fd,0x00000007, + 0x0004003b,0x00000013,0x000002ff,0x00000007,0x0004003b,0x00000013,0x00000301,0x00000007, + 0x0004003b,0x00000013,0x00000302,0x00000007,0x0004003b,0x0000000d,0x00000305,0x00000007, + 0x0004003b,0x00000013,0x00000307,0x00000007,0x0004003b,0x00000013,0x00000309,0x00000007, + 0x0004003b,0x00000013,0x0000030b,0x00000007,0x0004003b,0x00000013,0x0000030c,0x00000007, + 0x0004003b,0x0000000d,0x0000030f,0x00000007,0x0004003b,0x00000013,0x00000311,0x00000007, + 0x0004003b,0x00000013,0x00000313,0x00000007,0x0004003b,0x00000013,0x00000315,0x00000007, + 0x0004003b,0x00000013,0x00000316,0x00000007,0x0004003d,0x0000000e,0x000002d3,0x0000004a, + 0x0003003e,0x000002d2,0x000002d3,0x0004003d,0x0000000e,0x000002d5,0x0000004b,0x0003003e, + 0x000002d4,0x000002d5,0x0003003e,0x000002d6,0x000000bf,0x0003003e,0x000002d7,0x000000bf, + 0x00080039,0x0000000c,0x000002d8,0x00000047,0x000002d2,0x000002d4,0x000002d6,0x000002d7, + 0x0004003d,0x0000000e,0x000002da,0x0000004a,0x0003003e,0x000002d9,0x000002da,0x0004003d, + 0x0000000e,0x000002dc,0x0000004b,0x0003003e,0x000002db,0x000002dc,0x0003003e,0x000002dd, + 0x00000084,0x0003003e,0x000002de,0x000000bf,0x00080039,0x0000000c,0x000002df,0x00000047, + 0x000002d9,0x000002db,0x000002dd,0x000002de,0x00050081,0x0000000c,0x000002e0,0x000002d8, + 0x000002df,0x0003003e,0x000002d1,0x000002e0,0x0004003d,0x0000000c,0x000002e2,0x000002d1, + 0x0004003d,0x0000000e,0x000002e4,0x0000004a,0x0003003e,0x000002e3,0x000002e4,0x0004003d, + 0x0000000e,0x000002e6,0x0000004b,0x0003003e,0x000002e5,0x000002e6,0x0003003e,0x000002e7, + 0x0000028e,0x0003003e,0x000002e8,0x000000bf,0x00080039,0x0000000c,0x000002e9,0x00000047, + 0x000002e3,0x000002e5,0x000002e7,0x000002e8,0x00050081,0x0000000c,0x000002ea,0x000002e2, + 0x000002e9,0x0003003e,0x000002e1,0x000002ea,0x0004003d,0x0000000c,0x000002ec,0x000002e1, + 0x0004003d,0x0000000e,0x000002ee,0x0000004a,0x0003003e,0x000002ed,0x000002ee,0x0004003d, + 0x0000000e,0x000002f0,0x0000004b,0x0003003e,0x000002ef,0x000002f0,0x0003003e,0x000002f1, + 0x0000013d,0x0003003e,0x000002f2,0x000000bf,0x00080039,0x0000000c,0x000002f3,0x00000047, + 0x000002ed,0x000002ef,0x000002f1,0x000002f2,0x00050081,0x0000000c,0x000002f4,0x000002ec, + 0x000002f3,0x0003003e,0x000002eb,0x000002f4,0x0004003d,0x0000000e,0x000002f7,0x0000004a, + 0x0003003e,0x000002f6,0x000002f7,0x0004003d,0x0000000e,0x000002f9,0x0000004b,0x0003003e, + 0x000002f8,0x000002f9,0x0003003e,0x000002fa,0x000000bf,0x0003003e,0x000002fb,0x00000084, + 0x00080039,0x0000000c,0x000002fc,0x00000047,0x000002f6,0x000002f8,0x000002fa,0x000002fb, + 0x0004003d,0x0000000e,0x000002fe,0x0000004a,0x0003003e,0x000002fd,0x000002fe,0x0004003d, + 0x0000000e,0x00000300,0x0000004b,0x0003003e,0x000002ff,0x00000300,0x0003003e,0x00000301, + 0x00000084,0x0003003e,0x00000302,0x00000084,0x00080039,0x0000000c,0x00000303,0x00000047, + 0x000002fd,0x000002ff,0x00000301,0x00000302,0x00050081,0x0000000c,0x00000304,0x000002fc, + 0x00000303,0x0003003e,0x000002f5,0x00000304,0x0004003d,0x0000000c,0x00000306,0x000002f5, + 0x0004003d,0x0000000e,0x00000308,0x0000004a,0x0003003e,0x00000307,0x00000308,0x0004003d, + 0x0000000e,0x0000030a,0x0000004b,0x0003003e,0x00000309,0x0000030a,0x0003003e,0x0000030b, + 0x0000028e,0x0003003e,0x0000030c,0x00000084,0x00080039,0x0000000c,0x0000030d,0x00000047, + 0x00000307,0x00000309,0x0000030b,0x0000030c,0x00050081,0x0000000c,0x0000030e,0x00000306, + 0x0000030d,0x0003003e,0x00000305,0x0000030e,0x0004003d,0x0000000c,0x00000310,0x00000305, + 0x0004003d,0x0000000e,0x00000312,0x0000004a,0x0003003e,0x00000311,0x00000312,0x0004003d, + 0x0000000e,0x00000314,0x0000004b,0x0003003e,0x00000313,0x00000314,0x0003003e,0x00000315, + 0x0000013d,0x0003003e,0x00000316,0x00000084,0x00080039,0x0000000c,0x00000317,0x00000047, + 0x00000311,0x00000313,0x00000315,0x00000316,0x00050081,0x0000000c,0x00000318,0x00000310, + 0x00000317,0x0003003e,0x0000030f,0x00000318,0x0004003d,0x0000000c,0x00000319,0x000002eb, + 0x0004003d,0x0000000c,0x0000031a,0x0000030f,0x00050081,0x0000000c,0x0000031b,0x00000319, + 0x0000031a,0x000200fe,0x0000031b,0x00010038, +}; +inline constexpr uint32_t k_f16_k8_f32__gemm_fp8[] = { + 0x07230203,0x00010600,0x0008000b,0x000004a1,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x0000003d,0x00020011,0x00001151,0x00020011, + 0x00001160,0x00020011,0x000014e1,0x00020011,0x00001786,0x0008000a,0x5f565053,0x5f52484b, + 0x706f6f63,0x74617265,0x5f657669,0x7274616d,0x00007869,0x0006000b,0x00000001,0x4c534c47, + 0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000003,0x0013000f,0x00000005, + 0x00000004,0x6e69616d,0x00000000,0x000001ba,0x000001bf,0x000001c2,0x000001cf,0x00000246, + 0x00000252,0x00000261,0x00000270,0x000002e6,0x000002fb,0x00000328,0x00000342,0x00000458, + 0x0000048a,0x0006014b,0x00000004,0x00000026,0x00000007,0x00000008,0x00000008,0x00030003, + 0x00000002,0x000001cc,0x00090004,0x455f4c47,0x635f5458,0x72746e6f,0x665f6c6f,0x5f776f6c, + 0x72747461,0x74756269,0x00007365,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x36315f72, + 0x5f746962,0x726f7473,0x00656761,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x62385f72, + 0x735f7469,0x61726f74,0x00006567,0x000b0004,0x455f4c47,0x735f5458,0x65646168,0x78655f72, + 0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004,0x475f4c47, + 0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576, + 0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669, + 0x00080004,0x4b5f4c47,0x635f5248,0x65706f6f,0x69746172,0x6d5f6576,0x69727461,0x00000078, + 0x00090004,0x4b5f4c47,0x6d5f5248,0x726f6d65,0x63735f79,0x5f65706f,0x616d6573,0x6369746e, + 0x00000073,0x00090004,0x4b5f4c47,0x735f5248,0x65646168,0x75735f72,0x6f726762,0x625f7075, + 0x63697361,0x00000000,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000d, + 0x6e756f72,0x36314664,0x3b316628,0x00000000,0x00040005,0x0000000c,0x756c6176,0x00000065, + 0x00060005,0x00000013,0x42363166,0x28737469,0x31363166,0x0000003b,0x00040005,0x00000012, + 0x756c6176,0x00000065,0x00060005,0x00000019,0x66696873,0x656e5274,0x3b317528,0x003b3175, + 0x00040005,0x00000017,0x756c6176,0x00000065,0x00040005,0x00000018,0x66696873,0x00000074, + 0x00080005,0x0000001d,0x336d3465,0x65646f43,0x6d6f7246,0x42363146,0x28737469,0x003b3175, + 0x00050005,0x0000001c,0x666c6168,0x73746942,0x00000000,0x00060005,0x00000021,0x336d3465, + 0x33466f54,0x31752832,0x0000003b,0x00040005,0x00000020,0x73746962,0x00000000,0x00060005, + 0x00000024,0x7543706d,0x53636962,0x28756c69,0x003b3166,0x00040005,0x00000023,0x756c6176, + 0x00000065,0x00060005,0x00000027,0x336d3465,0x6f547748,0x28323346,0x003b3175,0x00040005, + 0x00000026,0x65646f63,0x00000000,0x00080005,0x0000002b,0x666c6168,0x72696150,0x6f43664f, + 0x28736564,0x753b3175,0x00003b31,0x00040005,0x00000029,0x65646f63,0x00000073,0x00040005, + 0x0000002a,0x66696873,0x00000074,0x00070005,0x00000032,0x766c6168,0x664f7365,0x65646f43, + 0x75762873,0x00003b32,0x00040005,0x00000031,0x65646f63,0x00000073,0x00040005,0x00000034, + 0x73746962,0x00000000,0x00040005,0x00000037,0x6e676973,0x00000000,0x00050005,0x0000003b, + 0x6e67616d,0x64757469,0x00000065,0x00040005,0x00000055,0x6c616373,0x00006465,0x00030005, + 0x00000066,0x0062736c,0x00040005,0x0000006b,0x6e756f72,0x00646564,0x00050005,0x0000007f, + 0x746f7571,0x746e6569,0x00000000,0x00060005,0x00000083,0x616d6572,0x65646e69,0x73614d72, + 0x0000006b,0x00050005,0x00000087,0x616d6572,0x65646e69,0x00000072,0x00040005,0x0000008b, + 0x666c6168,0x00796177,0x00040005,0x000000a6,0x614e7369,0x0000006e,0x00050005,0x000000c2, + 0x6167656e,0x65766974,0x00000000,0x00050005,0x000000c8,0x6f707865,0x746e656e,0x00000000, + 0x00050005,0x000000ce,0x746e616d,0x61737369,0x00000000,0x00040005,0x000000d5,0x65646f63, + 0x00000000,0x00050005,0x000000dc,0x6e676973,0x63696669,0x00646e61,0x00040005,0x000000e8, + 0x66696873,0x00000074,0x00040005,0x000000f4,0x61726170,0x0000006d,0x00040005,0x000000f6, + 0x61726170,0x0000006d,0x00050005,0x000000fb,0x78453465,0x656e6f70,0x0000746e,0x00050005, + 0x000000fe,0x614d3465,0x7369746e,0x00006173,0x00040005,0x00000100,0x61726170,0x0000006d, + 0x00040005,0x00000102,0x61726170,0x0000006d,0x00050005,0x00000125,0x6167656e,0x65766974, + 0x00000000,0x00050005,0x00000129,0x6f707865,0x746e656e,0x00000000,0x00050005,0x0000012d, + 0x746e616d,0x61737369,0x00000000,0x00040005,0x00000134,0x756c6176,0x00000065,0x00040005, + 0x0000015b,0x6e756f62,0x00646564,0x00040005,0x00000160,0x61726170,0x0000006d,0x00050005, + 0x00000162,0x6f736261,0x6574756c,0x00000000,0x00040005,0x00000165,0x61726170,0x0000006d, + 0x00040005,0x00000167,0x656e6e69,0x00000072,0x00040005,0x0000016c,0x61726170,0x0000006d, + 0x00050005,0x0000016e,0x796c6f70,0x696d6f6e,0x00006c61,0x00040005,0x00000173,0x61726170, + 0x0000006d,0x00040005,0x00000178,0x61726170,0x0000006d,0x00040005,0x00000187,0x61726170, + 0x0000006d,0x00040005,0x00000190,0x61726170,0x0000006d,0x00040005,0x00000198,0x61726170, + 0x0000006d,0x00040005,0x000001a0,0x61726170,0x0000006d,0x00040005,0x000001a3,0x61726170, + 0x0000006d,0x00040005,0x000001a5,0x61726170,0x0000006d,0x00040005,0x000001a8,0x61726170, + 0x0000006d,0x00040005,0x000001aa,0x61726170,0x0000006d,0x00040005,0x000001ad,0x61726170, + 0x0000006d,0x00040005,0x000001af,0x61726170,0x0000006d,0x00040005,0x000001b2,0x61726170, + 0x0000006d,0x00040005,0x000001b7,0x65726874,0x00006461,0x00080005,0x000001ba,0x4c5f6c67, + 0x6c61636f,0x6f766e49,0x69746163,0x44496e6f,0x00000000,0x00050005,0x000001be,0x67627573, + 0x70756f72,0x00000000,0x00060005,0x000001bf,0x535f6c67,0x72676275,0x4970756f,0x00000044, + 0x00040005,0x000001c1,0x696c7073,0x00000074,0x00060005,0x000001c2,0x575f6c67,0x476b726f, + 0x70756f72,0x00004449,0x00040005,0x000001c5,0x494c5053,0x00004b54,0x00060005,0x000001c7, + 0x756c6f63,0x694c6e6d,0x7261656e,0x00000000,0x00040005,0x000001cb,0x63746162,0x00000068, + 0x00040005,0x000001cd,0x68737550,0x00000000,0x00050006,0x000001cd,0x00000000,0x73776f72, + 0x00000000,0x00040006,0x000001cd,0x00000001,0x0000004e,0x00050006,0x000001cd,0x00000002, + 0x74616d4e,0x00786972,0x00080006,0x000001cd,0x00000003,0x67696577,0x6f437468,0x6e6d756c, + 0x7366664f,0x00007465,0x00060006,0x000001cd,0x00000004,0x75706e69,0x72745374,0x00656469, + 0x00070006,0x000001cd,0x00000005,0x75706e69,0x6c6f4374,0x426e6d75,0x00657361,0x00070006, + 0x000001cd,0x00000006,0x7074756f,0x74537475,0x65646972,0x00000000,0x00080006,0x000001cd, + 0x00000007,0x7074756f,0x6f437475,0x6e6d756c,0x7366664f,0x00007465,0x00070006,0x000001cd, + 0x00000008,0x48787561,0x4f666c61,0x65736666,0x00000074,0x00050006,0x000001cd,0x00000009, + 0x63746162,0x00736568,0x00070006,0x000001cd,0x0000000a,0x756c6f63,0x72476e6d,0x7370756f, + 0x00000000,0x00060006,0x000001cd,0x0000000b,0x696c7073,0x72745374,0x00656469,0x00030005, + 0x000001cf,0x00006370,0x00050005,0x000001d6,0x756c6f63,0x72476e6d,0x0070756f,0x00050005, + 0x000001db,0x636f6c62,0x776f526b,0x00000000,0x00050005,0x000001e4,0x47425553,0x50554f52, + 0x00000053,0x00030005,0x000001e5,0x00004d42,0x00040005,0x000001e7,0x426c6f63,0x00657361, + 0x00040005,0x000001e9,0x454c4954,0x00000053,0x00030005,0x000001ea,0x00004e42,0x00050005, + 0x000001ec,0x4374756f,0x6d756c6f,0x0000006e,0x00040005,0x000001f6,0x656c6974,0x00776f52, + 0x00040005,0x000001f9,0x45524854,0x00534441,0x00060005,0x000001fa,0x47425553,0x50554f52, + 0x554f435f,0x0000544e,0x00050005,0x000001fb,0x5f574f52,0x454c4954,0x00000053,0x00070005, + 0x000001fc,0x47425553,0x50554f52,0x45505f53,0x4f525f52,0x00000057,0x00050005,0x000001ff, + 0x656c6974,0x756c6f43,0x00306e6d,0x00060005,0x00000202,0x554c4f43,0x545f4e4d,0x53454c49, + 0x00000000,0x00070005,0x00000203,0x454c4954,0x45505f53,0x55535f52,0x4f524742,0x00005055, + 0x00050005,0x00000205,0x73776f72,0x696c6156,0x00000064,0x00060005,0x0000020d,0x64656573, + 0x69736552,0x6c617564,0x00000000,0x00040005,0x0000020e,0x47414c46,0x00000053,0x00030005, + 0x00000217,0x00000069,0x00030005,0x00000221,0x00776f72,0x00040005,0x00000226,0x756c6f63, + 0x00006e6d,0x00040005,0x0000022b,0x756c6176,0x00000065,0x00040005,0x00000232,0x65646e69, + 0x00000078,0x00050005,0x00000244,0x69736552,0x6c617564,0x00003445,0x00060006,0x00000244, + 0x00000000,0x69736572,0x6c617564,0x00000038,0x00030005,0x00000246,0x00000000,0x00040005, + 0x0000024c,0x61726170,0x0000006d,0x00060005,0x00000250,0x69736552,0x6c617564,0x666c6148, + 0x00000000,0x00060006,0x00000250,0x00000000,0x69736572,0x6c617564,0x00003631,0x00030005, + 0x00000252,0x00000000,0x00030005,0x0000025f,0x00787541,0x00050006,0x0000025f,0x00000000, + 0x31787561,0x00000036,0x00030005,0x00000261,0x00000000,0x00040005,0x0000026b,0x61726170, + 0x0000006d,0x00040005,0x00000270,0x636f6c62,0x0036316b,0x00030005,0x00000279,0x00000074, + 0x00030005,0x00000286,0x00005f68,0x00030005,0x0000029a,0x00636361,0x00040005,0x000002a4, + 0x61746f74,0x0000006c,0x00050005,0x000002a9,0x6c6f4361,0x426e6d75,0x00657361,0x00030005, + 0x000002b4,0x0000004b,0x00040005,0x000002b8,0x6765426b,0x00006e69,0x00040005,0x000002bb, + 0x70657473,0x00000073,0x00030005,0x000002bd,0x00000073,0x00040005,0x000002c5,0x70657473, + 0x00000000,0x00030005,0x000002c9,0x00000069,0x00030005,0x000002d3,0x00000072,0x00030005, + 0x000002d6,0x00000077,0x00030005,0x000002d9,0x00776f72,0x00040005,0x000002e2,0x65646f63, + 0x00000073,0x00040005,0x000002e4,0x75706e49,0x00004174,0x00040006,0x000002e4,0x00000000, + 0x00003461,0x00030005,0x000002e6,0x00000000,0x00040005,0x000002fb,0x67617473,0x00004165, + 0x00040005,0x00000301,0x61726170,0x0000006d,0x00040005,0x0000030d,0x61726170,0x0000006d, + 0x00030005,0x00000314,0x00000069,0x00030005,0x0000031e,0x0000006e,0x00030005,0x00000321, + 0x00000077,0x00040005,0x00000324,0x65646f63,0x00000073,0x00040005,0x00000326,0x75706e49, + 0x00004274,0x00040006,0x00000326,0x00000000,0x00003462,0x00030005,0x00000328,0x00000000, + 0x00040005,0x00000342,0x67617473,0x00004265,0x00040005,0x00000348,0x61726170,0x0000006d, + 0x00040005,0x00000353,0x61726170,0x0000006d,0x00030005,0x0000035d,0x00000074,0x00030005, + 0x00000365,0x00005f73,0x00030005,0x00000370,0x00005f61,0x00030005,0x0000037f,0x00005f62, + 0x00030005,0x0000039d,0x00005f72,0x00040005,0x000003ab,0x61726170,0x0000006d,0x00030005, + 0x000003b4,0x0000626b,0x00050005,0x000003b7,0x54524150,0x4f495449,0x0000004e,0x00030005, + 0x000003c9,0x00000074,0x00030005,0x000003e4,0x00005f72,0x00040005,0x000003f2,0x61726170, + 0x0000006d,0x00030005,0x00000402,0x00000074,0x00030005,0x00000414,0x00000074,0x00030005, + 0x0000041c,0x00005f68,0x00030005,0x00000433,0x00000069,0x00030005,0x0000043d,0x00776f72, + 0x00040005,0x00000442,0x756c6f63,0x00006e6d,0x00040005,0x0000044e,0x756c6176,0x00000065, + 0x00050005,0x00000456,0x7074754f,0x61487475,0x0000666c,0x00050006,0x00000456,0x00000000, + 0x3174756f,0x00000036,0x00030005,0x00000458,0x00000000,0x00040005,0x00000476,0x61726170, + 0x0000006d,0x00040005,0x00000479,0x65646e69,0x00000078,0x00050005,0x00000488,0x7074754f, + 0x34457475,0x00000000,0x00050006,0x00000488,0x00000000,0x3874756f,0x00000000,0x00030005, + 0x0000048a,0x00000000,0x00040005,0x0000048c,0x61726170,0x0000006d,0x00040005,0x0000048f, + 0x61726170,0x0000006d,0x00040005,0x0000049c,0x54504544,0x00000048,0x00040005,0x0000049d, + 0x56444150,0x00000034,0x00040005,0x000004a0,0x4554534b,0x00000050,0x00040047,0x00000007, + 0x00000001,0x00000008,0x00040047,0x000001ba,0x0000000b,0x0000001b,0x00040047,0x000001bf, + 0x0000000b,0x00000028,0x00040047,0x000001c2,0x0000000b,0x0000001a,0x00040047,0x000001c5, + 0x00000001,0x00000009,0x00030047,0x000001cd,0x00000002,0x00050048,0x000001cd,0x00000000, + 0x00000023,0x00000000,0x00050048,0x000001cd,0x00000001,0x00000023,0x00000004,0x00050048, + 0x000001cd,0x00000002,0x00000023,0x00000008,0x00050048,0x000001cd,0x00000003,0x00000023, + 0x0000000c,0x00050048,0x000001cd,0x00000004,0x00000023,0x00000010,0x00050048,0x000001cd, + 0x00000005,0x00000023,0x00000014,0x00050048,0x000001cd,0x00000006,0x00000023,0x00000018, + 0x00050048,0x000001cd,0x00000007,0x00000023,0x0000001c,0x00050048,0x000001cd,0x00000008, + 0x00000023,0x00000020,0x00050048,0x000001cd,0x00000009,0x00000023,0x00000024,0x00050048, + 0x000001cd,0x0000000a,0x00000023,0x00000028,0x00050048,0x000001cd,0x0000000b,0x00000023, + 0x0000002c,0x00040047,0x000001e4,0x00000001,0x00000007,0x00040047,0x000001e9,0x00000001, + 0x00000001,0x00040047,0x0000020e,0x00000001,0x00000002,0x00040047,0x00000243,0x00000006, + 0x00000001,0x00030047,0x00000244,0x00000002,0x00040048,0x00000244,0x00000000,0x00000018, + 0x00050048,0x00000244,0x00000000,0x00000023,0x00000000,0x00030047,0x00000246,0x00000018, + 0x00040047,0x00000246,0x00000021,0x00000006,0x00040047,0x00000246,0x00000022,0x00000000, + 0x00040047,0x0000024f,0x00000006,0x00000002,0x00030047,0x00000250,0x00000002,0x00040048, + 0x00000250,0x00000000,0x00000018,0x00050048,0x00000250,0x00000000,0x00000023,0x00000000, + 0x00030047,0x00000252,0x00000018,0x00040047,0x00000252,0x00000021,0x00000003,0x00040047, + 0x00000252,0x00000022,0x00000000,0x00040047,0x0000025e,0x00000006,0x00000002,0x00030047, + 0x0000025f,0x00000002,0x00040048,0x0000025f,0x00000000,0x00000018,0x00050048,0x0000025f, + 0x00000000,0x00000023,0x00000000,0x00030047,0x00000261,0x00000018,0x00040047,0x00000261, + 0x00000021,0x00000004,0x00040047,0x00000261,0x00000022,0x00000000,0x00040047,0x000002b4, + 0x00000001,0x00000000,0x00040047,0x000002e3,0x00000006,0x00000010,0x00030047,0x000002e4, + 0x00000002,0x00040048,0x000002e4,0x00000000,0x00000018,0x00050048,0x000002e4,0x00000000, + 0x00000023,0x00000000,0x00030047,0x000002e6,0x00000018,0x00040047,0x000002e6,0x00000021, + 0x00000000,0x00040047,0x000002e6,0x00000022,0x00000000,0x00040047,0x00000325,0x00000006, + 0x00000010,0x00030047,0x00000326,0x00000002,0x00040048,0x00000326,0x00000000,0x00000018, + 0x00050048,0x00000326,0x00000000,0x00000023,0x00000000,0x00030047,0x00000328,0x00000018, + 0x00040047,0x00000328,0x00000021,0x00000001,0x00040047,0x00000328,0x00000022,0x00000000, + 0x00040047,0x000003b7,0x00000001,0x00000003,0x00040047,0x00000455,0x00000006,0x00000002, + 0x00030047,0x00000456,0x00000002,0x00040048,0x00000456,0x00000000,0x00000019,0x00050048, + 0x00000456,0x00000000,0x00000023,0x00000000,0x00030047,0x00000458,0x00000019,0x00040047, + 0x00000458,0x00000021,0x00000002,0x00040047,0x00000458,0x00000022,0x00000000,0x00040047, + 0x00000487,0x00000006,0x00000001,0x00030047,0x00000488,0x00000002,0x00040048,0x00000488, + 0x00000000,0x00000019,0x00050048,0x00000488,0x00000000,0x00000023,0x00000000,0x00030047, + 0x0000048a,0x00000019,0x00040047,0x0000048a,0x00000021,0x00000005,0x00040047,0x0000048a, + 0x00000022,0x00000000,0x00040047,0x0000049c,0x00000001,0x00000004,0x00040047,0x0000049d, + 0x00000001,0x00000005,0x00040047,0x0000049e,0x00000001,0x00000008,0x00040047,0x000004a0, + 0x00000001,0x0000000a,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015, + 0x00000006,0x00000020,0x00000000,0x00040032,0x00000006,0x00000007,0x00000001,0x0004002b, + 0x00000006,0x00000008,0x00000001,0x00030016,0x00000009,0x00000020,0x00040020,0x0000000a, + 0x00000007,0x00000009,0x00040021,0x0000000b,0x00000009,0x0000000a,0x00030016,0x0000000f, + 0x00000010,0x00040020,0x00000010,0x00000007,0x0000000f,0x00040021,0x00000011,0x00000006, + 0x00000010,0x00040020,0x00000015,0x00000007,0x00000006,0x00050021,0x00000016,0x00000006, + 0x00000015,0x00000015,0x00040021,0x0000001b,0x00000006,0x00000015,0x00040021,0x0000001f, + 0x00000009,0x00000015,0x00040017,0x0000002d,0x00000006,0x00000002,0x00040020,0x0000002e, + 0x00000007,0x0000002d,0x00040017,0x0000002f,0x00000006,0x00000004,0x00040021,0x00000030, + 0x0000002f,0x0000002e,0x0004002b,0x00000006,0x00000039,0x80000000,0x0004002b,0x00000006, + 0x0000003d,0x7fffffff,0x0004002b,0x00000006,0x00000040,0x7f800000,0x00020014,0x00000041, + 0x0004002b,0x00000006,0x00000048,0x477ff000,0x0004002b,0x00000006,0x00000051,0x38800000, + 0x0004002b,0x00000009,0x00000058,0x4b800000,0x0004002b,0x00000009,0x0000005f,0x33800000, + 0x0004002b,0x00000006,0x00000068,0x0000000d,0x0004002b,0x00000006,0x0000006d,0x00000fff, + 0x0004002b,0x00000006,0x00000071,0xffffe000,0x00040015,0x0000007a,0x00000010,0x00000000, + 0x0004002b,0x00000006,0x0000009d,0x00000000,0x00040020,0x000000a5,0x00000007,0x00000041, + 0x0004002b,0x00000006,0x000000a8,0x00007c00,0x0004002b,0x00000006,0x000000ae,0x000003ff, + 0x0004002b,0x00000006,0x000000b7,0x00007fff,0x0004002b,0x00000006,0x000000bd,0x00000008, + 0x0004002b,0x00000006,0x000000bf,0x00000080,0x0004002b,0x00000006,0x000000c4,0x00008000, + 0x0004002b,0x00000006,0x000000ca,0x0000000a,0x0004002b,0x00000006,0x000000cc,0x0000001f, + 0x0004002b,0x00000006,0x000000d6,0x0000007e,0x0004002b,0x00000006,0x000000e4,0x00000400, + 0x0004002b,0x00000006,0x000000ee,0x0000000f,0x0004002b,0x00000006,0x000000f0,0x00000010, + 0x0004002b,0x00000006,0x000000ff,0x00000007,0x0004002b,0x00000006,0x00000112,0x00000006, + 0x0004002b,0x00000006,0x0000011b,0x00000003,0x0004002b,0x00000009,0x00000137,0x3b000000, + 0x0004002b,0x00000009,0x00000141,0x00000000,0x0004002b,0x00000009,0x00000143,0x3f800000, + 0x0004002b,0x00000009,0x00000146,0x3e000000,0x0004002b,0x00000006,0x0000014a,0x00000078, + 0x0004002b,0x00000006,0x0000014c,0x00000017,0x0004002b,0x00000009,0x0000015d,0xc0800000, + 0x0004002b,0x00000009,0x0000015e,0x40800000,0x0004002b,0x00000009,0x00000168,0xbd650000, + 0x0004002b,0x00000009,0x0000016a,0x3ee50000,0x0004002b,0x00000009,0x00000171,0x3f650000, + 0x0004002b,0x00000006,0x0000017d,0x0000007f,0x0004002b,0x00000006,0x00000185,0x000000ff, + 0x00040017,0x0000019b,0x0000000f,0x00000002,0x00040017,0x000001b8,0x00000006,0x00000003, + 0x00040020,0x000001b9,0x00000001,0x000001b8,0x0004003b,0x000001b9,0x000001ba,0x00000001, + 0x00040020,0x000001bb,0x00000001,0x00000006,0x0004003b,0x000001bb,0x000001bf,0x00000001, + 0x0004003b,0x000001b9,0x000001c2,0x00000001,0x00040032,0x00000006,0x000001c5,0x00000001, + 0x000e001e,0x000001cd,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006, + 0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00040020,0x000001ce, + 0x00000009,0x000001cd,0x0004003b,0x000001ce,0x000001cf,0x00000009,0x00040015,0x000001d0, + 0x00000020,0x00000001,0x0004002b,0x000001d0,0x000001d1,0x0000000a,0x00040020,0x000001d2, + 0x00000009,0x00000006,0x0004002b,0x00000006,0x000001de,0x00000002,0x0004002b,0x00000006, + 0x000001e1,0x0000ffff,0x00040032,0x00000006,0x000001e4,0x00000004,0x00060034,0x00000006, + 0x000001e5,0x00000084,0x000000f0,0x000001e4,0x00040032,0x00000006,0x000001e9,0x00000004, + 0x00060034,0x00000006,0x000001ea,0x00000084,0x000000f0,0x000001e9,0x0004002b,0x000001d0, + 0x000001ed,0x00000007,0x0004002b,0x000001d0,0x000001f1,0x00000001,0x0004002b,0x00000006, + 0x000001f8,0x00000020,0x00060034,0x00000006,0x000001f9,0x00000084,0x000001f8,0x000001e4, + 0x00060034,0x00000006,0x000001fa,0x00000086,0x000001f9,0x000000bd,0x00060034,0x00000006, + 0x000001fb,0x00000086,0x000001e5,0x000000bd,0x00060034,0x00000006,0x000001fc,0x00000086, + 0x000001fa,0x000001fb,0x00060034,0x00000006,0x00000202,0x00000086,0x000001ea,0x000000bd, + 0x00060034,0x00000006,0x00000203,0x00000086,0x00000202,0x000001fc,0x0004002b,0x000001d0, + 0x00000209,0x00000000,0x00040032,0x00000006,0x0000020e,0x00000000,0x00060034,0x00000006, + 0x0000020f,0x000000c7,0x0000020e,0x00000008,0x00060034,0x00000041,0x00000210,0x000000ab, + 0x0000020f,0x0000009d,0x00060034,0x00000006,0x0000021f,0x00000084,0x000001e5,0x000001ea, + 0x0004002b,0x000001d0,0x00000234,0x00000006,0x0004002b,0x00000006,0x0000023c,0x00000040, + 0x00060034,0x00000006,0x0000023d,0x000000c7,0x0000020e,0x0000023c,0x00060034,0x00000041, + 0x0000023e,0x000000ab,0x0000023d,0x0000009d,0x00040015,0x00000242,0x00000008,0x00000000, + 0x0003001d,0x00000243,0x00000242,0x0003001e,0x00000244,0x00000243,0x00040020,0x00000245, + 0x0000000c,0x00000244,0x0004003b,0x00000245,0x00000246,0x0000000c,0x00040020,0x00000248, + 0x0000000c,0x00000242,0x0003001d,0x0000024f,0x0000000f,0x0003001e,0x00000250,0x0000024f, + 0x00040020,0x00000251,0x0000000c,0x00000250,0x0004003b,0x00000251,0x00000252,0x0000000c, + 0x00040020,0x00000254,0x0000000c,0x0000000f,0x00060034,0x00000006,0x00000259,0x000000c7, + 0x0000020e,0x000001de,0x00060034,0x00000041,0x0000025a,0x000000ab,0x00000259,0x0000009d, + 0x0003001d,0x0000025e,0x0000000f,0x0003001e,0x0000025f,0x0000025e,0x00040020,0x00000260, + 0x0000000c,0x0000025f,0x0004003b,0x00000260,0x00000261,0x0000000c,0x0004002b,0x000001d0, + 0x00000262,0x00000008,0x00060034,0x00000006,0x0000026d,0x00000084,0x000001e5,0x000001ea, + 0x0004001c,0x0000026e,0x0000000f,0x0000026d,0x00040020,0x0000026f,0x00000004,0x0000026e, + 0x0004003b,0x0000026f,0x00000270,0x00000004,0x00040020,0x00000274,0x00000004,0x0000000f, + 0x0004002b,0x00000006,0x00000278,0x00000108,0x00071168,0x00000284,0x0000000f,0x0000011b, + 0x000000bd,0x000000bd,0x000001de,0x00040020,0x00000285,0x00000007,0x00000284,0x00071168, + 0x00000297,0x00000009,0x0000011b,0x000000bd,0x000000bd,0x000001de,0x0004001c,0x00000298, + 0x00000297,0x00000203,0x00040020,0x00000299,0x00000007,0x00000298,0x00040020,0x0000029e, + 0x00000007,0x00000297,0x0004002c,0x00000297,0x000002a2,0x00000141,0x0004002b,0x000001d0, + 0x000002aa,0x00000005,0x00060034,0x00000006,0x000002ad,0x000000c7,0x0000020e,0x000000bf, + 0x00060034,0x00000041,0x000002ae,0x000000ab,0x000002ad,0x0000009d,0x00040032,0x00000006, + 0x000002b4,0x00000020,0x00060034,0x00000006,0x000002ba,0x00000086,0x000002b4,0x000001f8, + 0x00060034,0x00000006,0x000002bb,0x00000086,0x000002ba,0x000001c5,0x00060034,0x00000006, + 0x000002d1,0x00000084,0x000001e5,0x000001de,0x00040020,0x000002e1,0x00000007,0x0000002f, + 0x0003001d,0x000002e3,0x0000002f,0x0003001e,0x000002e4,0x000002e3,0x00040020,0x000002e5, + 0x0000000c,0x000002e4,0x0004003b,0x000002e5,0x000002e6,0x0000000c,0x0004002b,0x000001d0, + 0x000002e8,0x00000004,0x00040020,0x000002f4,0x0000000c,0x0000002f,0x0004002b,0x00000006, + 0x000002f7,0x00000005,0x00060034,0x00000006,0x000002f8,0x00000084,0x000001e5,0x000002f7, + 0x0004001c,0x000002f9,0x0000002f,0x000002f8,0x00040020,0x000002fa,0x00000004,0x000002f9, + 0x0004003b,0x000002fa,0x000002fb,0x00000004,0x00040020,0x00000305,0x00000004,0x0000002f, + 0x00060034,0x00000006,0x0000031c,0x00000084,0x000001ea,0x000001de,0x0003001d,0x00000325, + 0x0000002f,0x0003001e,0x00000326,0x00000325,0x00040020,0x00000327,0x0000000c,0x00000326, + 0x0004003b,0x00000327,0x00000328,0x0000000c,0x00060034,0x00000006,0x0000032a,0x00000086, + 0x000002b4,0x000001f8,0x0004002b,0x000001d0,0x0000032e,0x00000002,0x0004002b,0x000001d0, + 0x00000332,0x00000003,0x00060034,0x00000006,0x0000033f,0x00000084,0x000001ea,0x000002f7, + 0x0004001c,0x00000340,0x0000002f,0x0000033f,0x00040020,0x00000341,0x00000004,0x00000340, + 0x0004003b,0x00000341,0x00000342,0x00000004,0x0004002b,0x00000006,0x0000036c,0x00000004, + 0x00071168,0x0000036e,0x0000000f,0x0000011b,0x000000bd,0x000000bd,0x0000009d,0x00040020, + 0x0000036f,0x00000007,0x0000036e,0x00071168,0x0000037d,0x0000000f,0x0000011b,0x000000bd, + 0x000000bd,0x00000008,0x00040020,0x0000037e,0x00000007,0x0000037d,0x00040020,0x0000039c, + 0x00000007,0x000001d0,0x00040032,0x00000006,0x000003b7,0x00000000,0x00060034,0x00000041, + 0x000003b8,0x000000ab,0x000003b7,0x0000009d,0x00060034,0x00000041,0x000003ff,0x000000ab, + 0x000003b7,0x0000009d,0x00060034,0x00000006,0x0000043b,0x00000084,0x000001e5,0x000001ea, + 0x00060034,0x00000041,0x00000452,0x000000ac,0x000001c5,0x00000008,0x0003001d,0x00000455, + 0x0000000f,0x0003001e,0x00000456,0x00000455,0x00040020,0x00000457,0x0000000c,0x00000456, + 0x0004003b,0x00000457,0x00000458,0x0000000c,0x0004002b,0x000001d0,0x0000045a,0x0000000b, + 0x00060034,0x00000006,0x00000470,0x000000c7,0x0000020e,0x000000bd,0x00060034,0x00000041, + 0x00000471,0x000000ab,0x00000470,0x0000009d,0x0004002b,0x00000006,0x00000482,0x00000030, + 0x00060034,0x00000006,0x00000483,0x000000c7,0x0000020e,0x00000482,0x00060034,0x00000041, + 0x00000484,0x000000ab,0x00000483,0x0000009d,0x0003001d,0x00000487,0x00000242,0x0003001e, + 0x00000488,0x00000487,0x00040020,0x00000489,0x0000000c,0x00000488,0x0004003b,0x00000489, + 0x0000048a,0x0000000c,0x00060034,0x00000006,0x00000493,0x000000c7,0x0000020e,0x000000f0, + 0x00060034,0x00000041,0x00000494,0x000000aa,0x00000493,0x0000009d,0x00040032,0x00000006, + 0x0000049c,0x00000004,0x00040032,0x00000006,0x0000049d,0x00000001,0x00040032,0x00000006, + 0x0000049e,0x00000001,0x00060033,0x000001b8,0x0000049f,0x0000049e,0x00000008,0x00000008, + 0x00040032,0x00000006,0x000004a0,0x00000020,0x00050036,0x00000002,0x00000004,0x00000000, + 0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000015,0x000001b7,0x00000007,0x0004003b, + 0x00000015,0x000001be,0x00000007,0x0004003b,0x00000015,0x000001c1,0x00000007,0x0004003b, + 0x00000015,0x000001c7,0x00000007,0x0004003b,0x00000015,0x000001cb,0x00000007,0x0004003b, + 0x00000015,0x000001d6,0x00000007,0x0004003b,0x00000015,0x000001db,0x00000007,0x0004003b, + 0x00000015,0x000001e7,0x00000007,0x0004003b,0x00000015,0x000001ec,0x00000007,0x0004003b, + 0x00000015,0x000001f6,0x00000007,0x0004003b,0x00000015,0x000001ff,0x00000007,0x0004003b, + 0x000000a5,0x00000205,0x00000007,0x0004003b,0x000000a5,0x0000020d,0x00000007,0x0004003b, + 0x00000015,0x00000217,0x00000007,0x0004003b,0x00000015,0x00000221,0x00000007,0x0004003b, + 0x00000015,0x00000226,0x00000007,0x0004003b,0x0000000a,0x0000022b,0x00000007,0x0004003b, + 0x00000015,0x00000232,0x00000007,0x0004003b,0x0000000a,0x0000023f,0x00000007,0x0004003b, + 0x00000015,0x0000024c,0x00000007,0x0004003b,0x0000000a,0x0000026b,0x00000007,0x0004003b, + 0x00000015,0x00000279,0x00000007,0x0004003b,0x00000285,0x00000286,0x00000007,0x0004003b, + 0x00000299,0x0000029a,0x00000007,0x0004003b,0x00000299,0x000002a4,0x00000007,0x0004003b, + 0x00000015,0x000002a9,0x00000007,0x0004003b,0x00000015,0x000002af,0x00000007,0x0004003b, + 0x00000015,0x000002b8,0x00000007,0x0004003b,0x00000015,0x000002bd,0x00000007,0x0004003b, + 0x00000015,0x000002c5,0x00000007,0x0004003b,0x00000015,0x000002c9,0x00000007,0x0004003b, + 0x00000015,0x000002d3,0x00000007,0x0004003b,0x00000015,0x000002d6,0x00000007,0x0004003b, + 0x00000015,0x000002d9,0x00000007,0x0004003b,0x000002e1,0x000002e2,0x00000007,0x0004003b, + 0x0000002e,0x00000301,0x00000007,0x0004003b,0x0000002e,0x0000030d,0x00000007,0x0004003b, + 0x00000015,0x00000314,0x00000007,0x0004003b,0x00000015,0x0000031e,0x00000007,0x0004003b, + 0x00000015,0x00000321,0x00000007,0x0004003b,0x000002e1,0x00000324,0x00000007,0x0004003b, + 0x0000002e,0x00000348,0x00000007,0x0004003b,0x0000002e,0x00000353,0x00000007,0x0004003b, + 0x00000015,0x0000035d,0x00000007,0x0004003b,0x00000015,0x00000365,0x00000007,0x0004003b, + 0x0000036f,0x00000370,0x00000007,0x0004003b,0x0000037e,0x0000037f,0x00000007,0x0004003b, + 0x0000039c,0x0000039d,0x00000007,0x0004003b,0x0000000a,0x000003ab,0x00000007,0x0004003b, + 0x00000015,0x000003b4,0x00000007,0x0004003b,0x00000015,0x000003c9,0x00000007,0x0004003b, + 0x0000039c,0x000003e4,0x00000007,0x0004003b,0x0000000a,0x000003f2,0x00000007,0x0004003b, + 0x00000015,0x00000402,0x00000007,0x0004003b,0x00000015,0x00000414,0x00000007,0x0004003b, + 0x00000285,0x0000041c,0x00000007,0x0004003b,0x00000015,0x00000433,0x00000007,0x0004003b, + 0x00000015,0x0000043d,0x00000007,0x0004003b,0x00000015,0x00000442,0x00000007,0x0004003b, + 0x00000010,0x0000044e,0x00000007,0x0004003b,0x0000000a,0x00000476,0x00000007,0x0004003b, + 0x00000015,0x00000479,0x00000007,0x0004003b,0x00000010,0x0000048c,0x00000007,0x0004003b, + 0x00000015,0x0000048f,0x00000007,0x00050041,0x000001bb,0x000001bc,0x000001ba,0x0000009d, + 0x0004003d,0x00000006,0x000001bd,0x000001bc,0x0003003e,0x000001b7,0x000001bd,0x0004003d, + 0x00000006,0x000001c0,0x000001bf,0x0003003e,0x000001be,0x000001c0,0x00050041,0x000001bb, + 0x000001c3,0x000001c2,0x0000009d,0x0004003d,0x00000006,0x000001c4,0x000001c3,0x00050089, + 0x00000006,0x000001c6,0x000001c4,0x000001c5,0x0003003e,0x000001c1,0x000001c6,0x00050041, + 0x000001bb,0x000001c8,0x000001c2,0x0000009d,0x0004003d,0x00000006,0x000001c9,0x000001c8, + 0x00050086,0x00000006,0x000001ca,0x000001c9,0x000001c5,0x0003003e,0x000001c7,0x000001ca, + 0x0004003d,0x00000006,0x000001cc,0x000001c7,0x00050041,0x000001d2,0x000001d3,0x000001cf, + 0x000001d1,0x0004003d,0x00000006,0x000001d4,0x000001d3,0x00050086,0x00000006,0x000001d5, + 0x000001cc,0x000001d4,0x0003003e,0x000001cb,0x000001d5,0x0004003d,0x00000006,0x000001d7, + 0x000001c7,0x00050041,0x000001d2,0x000001d8,0x000001cf,0x000001d1,0x0004003d,0x00000006, + 0x000001d9,0x000001d8,0x00050089,0x00000006,0x000001da,0x000001d7,0x000001d9,0x0003003e, + 0x000001d6,0x000001da,0x00050041,0x000001bb,0x000001dc,0x000001c2,0x00000008,0x0004003d, + 0x00000006,0x000001dd,0x000001dc,0x00050041,0x000001bb,0x000001df,0x000001c2,0x000001de, + 0x0004003d,0x00000006,0x000001e0,0x000001df,0x00050084,0x00000006,0x000001e2,0x000001e0, + 0x000001e1,0x00050080,0x00000006,0x000001e3,0x000001dd,0x000001e2,0x00050084,0x00000006, + 0x000001e6,0x000001e3,0x000001e5,0x0003003e,0x000001db,0x000001e6,0x0004003d,0x00000006, + 0x000001e8,0x000001d6,0x00050084,0x00000006,0x000001eb,0x000001e8,0x000001ea,0x0003003e, + 0x000001e7,0x000001eb,0x00050041,0x000001d2,0x000001ee,0x000001cf,0x000001ed,0x0004003d, + 0x00000006,0x000001ef,0x000001ee,0x0004003d,0x00000006,0x000001f0,0x000001cb,0x00050041, + 0x000001d2,0x000001f2,0x000001cf,0x000001f1,0x0004003d,0x00000006,0x000001f3,0x000001f2, + 0x00050084,0x00000006,0x000001f4,0x000001f0,0x000001f3,0x00050080,0x00000006,0x000001f5, + 0x000001ef,0x000001f4,0x0003003e,0x000001ec,0x000001f5,0x0004003d,0x00000006,0x000001f7, + 0x000001be,0x00050086,0x00000006,0x000001fd,0x000001f7,0x000001fc,0x00050084,0x00000006, + 0x000001fe,0x000001fd,0x000000bd,0x0003003e,0x000001f6,0x000001fe,0x0004003d,0x00000006, + 0x00000200,0x000001be,0x00050089,0x00000006,0x00000201,0x00000200,0x000001fc,0x00050084, + 0x00000006,0x00000204,0x00000201,0x00000203,0x0003003e,0x000001ff,0x00000204,0x0004003d, + 0x00000006,0x00000206,0x000001db,0x0004003d,0x00000006,0x00000207,0x000001f6,0x00050080, + 0x00000006,0x00000208,0x00000206,0x00000207,0x00050041,0x000001d2,0x0000020a,0x000001cf, + 0x00000209,0x0004003d,0x00000006,0x0000020b,0x0000020a,0x000500b0,0x00000041,0x0000020c, + 0x00000208,0x0000020b,0x0003003e,0x00000205,0x0000020c,0x0004003d,0x00000006,0x00000211, + 0x000001c1,0x000500aa,0x00000041,0x00000212,0x00000211,0x0000009d,0x000500a7,0x00000041, + 0x00000213,0x00000210,0x00000212,0x0003003e,0x0000020d,0x00000213,0x0004003d,0x00000041, + 0x00000214,0x0000020d,0x000300f7,0x00000216,0x00000000,0x000400fa,0x00000214,0x00000215, + 0x00000216,0x000200f8,0x00000215,0x0004003d,0x00000006,0x00000218,0x000001b7,0x0003003e, + 0x00000217,0x00000218,0x000200f9,0x00000219,0x000200f8,0x00000219,0x000400f6,0x0000021b, + 0x0000021c,0x00000000,0x000200f9,0x0000021d,0x000200f8,0x0000021d,0x0004003d,0x00000006, + 0x0000021e,0x00000217,0x000500b0,0x00000041,0x00000220,0x0000021e,0x0000021f,0x000400fa, + 0x00000220,0x0000021a,0x0000021b,0x000200f8,0x0000021a,0x0004003d,0x00000006,0x00000222, + 0x000001db,0x0004003d,0x00000006,0x00000223,0x00000217,0x00050086,0x00000006,0x00000224, + 0x00000223,0x000001ea,0x00050080,0x00000006,0x00000225,0x00000222,0x00000224,0x0003003e, + 0x00000221,0x00000225,0x0004003d,0x00000006,0x00000227,0x000001e7,0x0004003d,0x00000006, + 0x00000228,0x00000217,0x00050089,0x00000006,0x00000229,0x00000228,0x000001ea,0x00050080, + 0x00000006,0x0000022a,0x00000227,0x00000229,0x0003003e,0x00000226,0x0000022a,0x0003003e, + 0x0000022b,0x00000141,0x0004003d,0x00000006,0x0000022c,0x00000221,0x00050041,0x000001d2, + 0x0000022d,0x000001cf,0x00000209,0x0004003d,0x00000006,0x0000022e,0x0000022d,0x000500b0, + 0x00000041,0x0000022f,0x0000022c,0x0000022e,0x000300f7,0x00000231,0x00000000,0x000400fa, + 0x0000022f,0x00000230,0x00000231,0x000200f8,0x00000230,0x0004003d,0x00000006,0x00000233, + 0x00000221,0x00050041,0x000001d2,0x00000235,0x000001cf,0x00000234,0x0004003d,0x00000006, + 0x00000236,0x00000235,0x00050084,0x00000006,0x00000237,0x00000233,0x00000236,0x0004003d, + 0x00000006,0x00000238,0x000001ec,0x00050080,0x00000006,0x00000239,0x00000237,0x00000238, + 0x0004003d,0x00000006,0x0000023a,0x00000226,0x00050080,0x00000006,0x0000023b,0x00000239, + 0x0000023a,0x0003003e,0x00000232,0x0000023b,0x000300f7,0x00000241,0x00000000,0x000400fa, + 0x0000023e,0x00000240,0x0000024e,0x000200f8,0x00000240,0x0004003d,0x00000006,0x00000247, + 0x00000232,0x00060041,0x00000248,0x00000249,0x00000246,0x00000209,0x00000247,0x0004003d, + 0x00000242,0x0000024a,0x00000249,0x00040071,0x00000006,0x0000024b,0x0000024a,0x0003003e, + 0x0000024c,0x0000024b,0x00050039,0x00000009,0x0000024d,0x00000027,0x0000024c,0x0003003e, + 0x0000023f,0x0000024d,0x000200f9,0x00000241,0x000200f8,0x0000024e,0x0004003d,0x00000006, + 0x00000253,0x00000232,0x00060041,0x00000254,0x00000255,0x00000252,0x00000209,0x00000253, + 0x0004003d,0x0000000f,0x00000256,0x00000255,0x00040073,0x00000009,0x00000257,0x00000256, + 0x0003003e,0x0000023f,0x00000257,0x000200f9,0x00000241,0x000200f8,0x00000241,0x0004003d, + 0x00000009,0x00000258,0x0000023f,0x0003003e,0x0000022b,0x00000258,0x000300f7,0x0000025c, + 0x00000000,0x000400fa,0x0000025a,0x0000025b,0x0000025c,0x000200f8,0x0000025b,0x0004003d, + 0x00000009,0x0000025d,0x0000022b,0x00050041,0x000001d2,0x00000263,0x000001cf,0x00000262, + 0x0004003d,0x00000006,0x00000264,0x00000263,0x0004003d,0x00000006,0x00000265,0x00000226, + 0x00050080,0x00000006,0x00000266,0x00000264,0x00000265,0x00060041,0x00000254,0x00000267, + 0x00000261,0x00000209,0x00000266,0x0004003d,0x0000000f,0x00000268,0x00000267,0x00040073, + 0x00000009,0x00000269,0x00000268,0x00050085,0x00000009,0x0000026a,0x0000025d,0x00000269, + 0x0003003e,0x0000026b,0x0000026a,0x00050039,0x00000009,0x0000026c,0x0000000d,0x0000026b, + 0x0003003e,0x0000022b,0x0000026c,0x000200f9,0x0000025c,0x000200f8,0x0000025c,0x000200f9, + 0x00000231,0x000200f8,0x00000231,0x0004003d,0x00000006,0x00000271,0x00000217,0x0004003d, + 0x00000009,0x00000272,0x0000022b,0x00040073,0x0000000f,0x00000273,0x00000272,0x00050041, + 0x00000274,0x00000275,0x00000270,0x00000271,0x0005003e,0x00000275,0x00000273,0x00000028, + 0x000001de,0x000200f9,0x0000021c,0x000200f8,0x0000021c,0x0004003d,0x00000006,0x00000276, + 0x00000217,0x00050080,0x00000006,0x00000277,0x00000276,0x000001f9,0x0003003e,0x00000217, + 0x00000277,0x000200f9,0x00000219,0x000200f8,0x0000021b,0x000400e0,0x000001de,0x000001de, + 0x00000278,0x000200f9,0x00000216,0x000200f8,0x00000216,0x0003003e,0x00000279,0x0000009d, + 0x000200f9,0x0000027a,0x000200f8,0x0000027a,0x000400f6,0x0000027c,0x0000027d,0x00000001, + 0x000200f9,0x0000027e,0x000200f8,0x0000027e,0x0004003d,0x00000006,0x0000027f,0x00000279, + 0x000500b0,0x00000041,0x00000280,0x0000027f,0x00000203,0x000400fa,0x00000280,0x0000027b, + 0x0000027c,0x000200f8,0x0000027b,0x0004003d,0x00000041,0x00000281,0x0000020d,0x000300f7, + 0x00000283,0x00000000,0x000400fa,0x00000281,0x00000282,0x000002a0,0x000200f8,0x00000282, + 0x0004003d,0x00000006,0x00000287,0x000001f6,0x00050084,0x00000006,0x00000288,0x00000287, + 0x000001ea,0x0004003d,0x00000006,0x00000289,0x000001ff,0x0004003d,0x00000006,0x0000028a, + 0x00000279,0x00050080,0x00000006,0x0000028b,0x00000289,0x0000028a,0x00050084,0x00000006, + 0x0000028c,0x0000028b,0x000000bd,0x00050080,0x00000006,0x0000028d,0x00000288,0x0000028c, + 0x00050041,0x00000274,0x0000028e,0x00000270,0x0000028d,0x0004003d,0x00000006,0x0000028f, + 0x000001f6,0x00050084,0x00000006,0x00000290,0x0000028f,0x000001ea,0x0004003d,0x00000006, + 0x00000291,0x000001ff,0x0004003d,0x00000006,0x00000292,0x00000279,0x00050080,0x00000006, + 0x00000293,0x00000291,0x00000292,0x00050084,0x00000006,0x00000294,0x00000293,0x000000bd, + 0x00050080,0x00000006,0x00000295,0x00000290,0x00000294,0x00081169,0x00000284,0x00000296, + 0x0000028e,0x00000209,0x000001ea,0x00000030,0x000001de,0x0003003e,0x00000286,0x00000296, + 0x0004003d,0x00000006,0x0000029b,0x00000279,0x0004003d,0x00000284,0x0000029c,0x00000286, + 0x00040073,0x00000297,0x0000029d,0x0000029c,0x00050041,0x0000029e,0x0000029f,0x0000029a, + 0x0000029b,0x0003003e,0x0000029f,0x0000029d,0x000200f9,0x00000283,0x000200f8,0x000002a0, + 0x0004003d,0x00000006,0x000002a1,0x00000279,0x00050041,0x0000029e,0x000002a3,0x0000029a, + 0x000002a1,0x0003003e,0x000002a3,0x000002a2,0x000200f9,0x00000283,0x000200f8,0x00000283, + 0x0004003d,0x00000006,0x000002a5,0x00000279,0x00050041,0x0000029e,0x000002a6,0x000002a4, + 0x000002a5,0x0003003e,0x000002a6,0x000002a2,0x000200f9,0x0000027d,0x000200f8,0x0000027d, + 0x0004003d,0x00000006,0x000002a7,0x00000279,0x00050080,0x00000006,0x000002a8,0x000002a7, + 0x000001f1,0x0003003e,0x00000279,0x000002a8,0x000200f9,0x0000027a,0x000200f8,0x0000027c, + 0x00050041,0x000001d2,0x000002ab,0x000001cf,0x000002aa,0x0004003d,0x00000006,0x000002ac, + 0x000002ab,0x000300f7,0x000002b1,0x00000000,0x000400fa,0x000002ae,0x000002b0,0x000002b2, + 0x000200f8,0x000002b0,0x0003003e,0x000002af,0x0000009d,0x000200f9,0x000002b1,0x000200f8, + 0x000002b2,0x0004003d,0x00000006,0x000002b3,0x000001cb,0x00050084,0x00000006,0x000002b5, + 0x000002b3,0x000002b4,0x0003003e,0x000002af,0x000002b5,0x000200f9,0x000002b1,0x000200f8, + 0x000002b1,0x0004003d,0x00000006,0x000002b6,0x000002af,0x00050080,0x00000006,0x000002b7, + 0x000002ac,0x000002b6,0x0003003e,0x000002a9,0x000002b7,0x0004003d,0x00000006,0x000002b9, + 0x000001c1,0x00050084,0x00000006,0x000002bc,0x000002b9,0x000002bb,0x0003003e,0x000002b8, + 0x000002bc,0x0003003e,0x000002bd,0x0000009d,0x000200f9,0x000002be,0x000200f8,0x000002be, + 0x000400f6,0x000002c0,0x000002c1,0x00000000,0x000200f9,0x000002c2,0x000200f8,0x000002c2, + 0x0004003d,0x00000006,0x000002c3,0x000002bd,0x000500b0,0x00000041,0x000002c4,0x000002c3, + 0x000002bb,0x000400fa,0x000002c4,0x000002bf,0x000002c0,0x000200f8,0x000002bf,0x0004003d, + 0x00000006,0x000002c6,0x000002b8,0x0004003d,0x00000006,0x000002c7,0x000002bd,0x00050080, + 0x00000006,0x000002c8,0x000002c6,0x000002c7,0x0003003e,0x000002c5,0x000002c8,0x000400e0, + 0x000001de,0x000001de,0x00000278,0x0004003d,0x00000006,0x000002ca,0x000001b7,0x0003003e, + 0x000002c9,0x000002ca,0x000200f9,0x000002cb,0x000200f8,0x000002cb,0x000400f6,0x000002cd, + 0x000002ce,0x00000000,0x000200f9,0x000002cf,0x000200f8,0x000002cf,0x0004003d,0x00000006, + 0x000002d0,0x000002c9,0x000500b0,0x00000041,0x000002d2,0x000002d0,0x000002d1,0x000400fa, + 0x000002d2,0x000002cc,0x000002cd,0x000200f8,0x000002cc,0x0004003d,0x00000006,0x000002d4, + 0x000002c9,0x000500c2,0x00000006,0x000002d5,0x000002d4,0x00000008,0x0003003e,0x000002d3, + 0x000002d5,0x0004003d,0x00000006,0x000002d7,0x000002c9,0x000500c7,0x00000006,0x000002d8, + 0x000002d7,0x00000008,0x0003003e,0x000002d6,0x000002d8,0x0004003d,0x00000006,0x000002da, + 0x000001db,0x0004003d,0x00000006,0x000002db,0x000002d3,0x00050080,0x00000006,0x000002dc, + 0x000002da,0x000002db,0x00050041,0x000001d2,0x000002dd,0x000001cf,0x00000209,0x0004003d, + 0x00000006,0x000002de,0x000002dd,0x00050082,0x00000006,0x000002df,0x000002de,0x00000008, + 0x0007000c,0x00000006,0x000002e0,0x00000001,0x00000026,0x000002dc,0x000002df,0x0003003e, + 0x000002d9,0x000002e0,0x0004003d,0x00000006,0x000002e7,0x000002d9,0x00050041,0x000001d2, + 0x000002e9,0x000001cf,0x000002e8,0x0004003d,0x00000006,0x000002ea,0x000002e9,0x00050084, + 0x00000006,0x000002eb,0x000002e7,0x000002ea,0x0004003d,0x00000006,0x000002ec,0x000002a9, + 0x00050080,0x00000006,0x000002ed,0x000002eb,0x000002ec,0x0004003d,0x00000006,0x000002ee, + 0x000002c5,0x00050084,0x00000006,0x000002ef,0x000002ee,0x000001f8,0x00050080,0x00000006, + 0x000002f0,0x000002ed,0x000002ef,0x00050086,0x00000006,0x000002f1,0x000002f0,0x000000f0, + 0x0004003d,0x00000006,0x000002f2,0x000002d6,0x00050080,0x00000006,0x000002f3,0x000002f1, + 0x000002f2,0x00060041,0x000002f4,0x000002f5,0x000002e6,0x00000209,0x000002f3,0x0004003d, + 0x0000002f,0x000002f6,0x000002f5,0x0003003e,0x000002e2,0x000002f6,0x0004003d,0x00000006, + 0x000002fc,0x000002d3,0x00050084,0x00000006,0x000002fd,0x000002fc,0x000002f7,0x0004003d, + 0x00000006,0x000002fe,0x000002d6,0x00050084,0x00000006,0x000002ff,0x000002fe,0x000001de, + 0x00050080,0x00000006,0x00000300,0x000002fd,0x000002ff,0x0004003d,0x0000002f,0x00000302, + 0x000002e2,0x0007004f,0x0000002d,0x00000303,0x00000302,0x00000302,0x00000000,0x00000001, + 0x0003003e,0x00000301,0x00000303,0x00050039,0x0000002f,0x00000304,0x00000032,0x00000301, + 0x00050041,0x00000305,0x00000306,0x000002fb,0x00000300,0x0005003e,0x00000306,0x00000304, + 0x00000028,0x000001de,0x0004003d,0x00000006,0x00000307,0x000002d3,0x00050084,0x00000006, + 0x00000308,0x00000307,0x000002f7,0x0004003d,0x00000006,0x00000309,0x000002d6,0x00050084, + 0x00000006,0x0000030a,0x00000309,0x000001de,0x00050080,0x00000006,0x0000030b,0x00000308, + 0x0000030a,0x00050080,0x00000006,0x0000030c,0x0000030b,0x00000008,0x0004003d,0x0000002f, + 0x0000030e,0x000002e2,0x0007004f,0x0000002d,0x0000030f,0x0000030e,0x0000030e,0x00000002, + 0x00000003,0x0003003e,0x0000030d,0x0000030f,0x00050039,0x0000002f,0x00000310,0x00000032, + 0x0000030d,0x00050041,0x00000305,0x00000311,0x000002fb,0x0000030c,0x0005003e,0x00000311, + 0x00000310,0x00000028,0x000001de,0x000200f9,0x000002ce,0x000200f8,0x000002ce,0x0004003d, + 0x00000006,0x00000312,0x000002c9,0x00050080,0x00000006,0x00000313,0x00000312,0x000001f9, + 0x0003003e,0x000002c9,0x00000313,0x000200f9,0x000002cb,0x000200f8,0x000002cd,0x0004003d, + 0x00000006,0x00000315,0x000001b7,0x0003003e,0x00000314,0x00000315,0x000200f9,0x00000316, + 0x000200f8,0x00000316,0x000400f6,0x00000318,0x00000319,0x00000000,0x000200f9,0x0000031a, + 0x000200f8,0x0000031a,0x0004003d,0x00000006,0x0000031b,0x00000314,0x000500b0,0x00000041, + 0x0000031d,0x0000031b,0x0000031c,0x000400fa,0x0000031d,0x00000317,0x00000318,0x000200f8, + 0x00000317,0x0004003d,0x00000006,0x0000031f,0x00000314,0x000500c2,0x00000006,0x00000320, + 0x0000031f,0x00000008,0x0003003e,0x0000031e,0x00000320,0x0004003d,0x00000006,0x00000322, + 0x00000314,0x000500c7,0x00000006,0x00000323,0x00000322,0x00000008,0x0003003e,0x00000321, + 0x00000323,0x0004003d,0x00000006,0x00000329,0x000001cb,0x00050084,0x00000006,0x0000032b, + 0x00000329,0x0000032a,0x0004003d,0x00000006,0x0000032c,0x000002c5,0x00050080,0x00000006, + 0x0000032d,0x0000032b,0x0000032c,0x00050041,0x000001d2,0x0000032f,0x000001cf,0x0000032e, + 0x0004003d,0x00000006,0x00000330,0x0000032f,0x00050084,0x00000006,0x00000331,0x0000032d, + 0x00000330,0x00050041,0x000001d2,0x00000333,0x000001cf,0x00000332,0x0004003d,0x00000006, + 0x00000334,0x00000333,0x00050080,0x00000006,0x00000335,0x00000331,0x00000334,0x0004003d, + 0x00000006,0x00000336,0x000001e7,0x00050080,0x00000006,0x00000337,0x00000335,0x00000336, + 0x0004003d,0x00000006,0x00000338,0x0000031e,0x00050080,0x00000006,0x00000339,0x00000337, + 0x00000338,0x00050084,0x00000006,0x0000033a,0x00000339,0x000001de,0x0004003d,0x00000006, + 0x0000033b,0x00000321,0x00050080,0x00000006,0x0000033c,0x0000033a,0x0000033b,0x00060041, + 0x000002f4,0x0000033d,0x00000328,0x00000209,0x0000033c,0x0004003d,0x0000002f,0x0000033e, + 0x0000033d,0x0003003e,0x00000324,0x0000033e,0x0004003d,0x00000006,0x00000343,0x0000031e, + 0x00050084,0x00000006,0x00000344,0x00000343,0x000002f7,0x0004003d,0x00000006,0x00000345, + 0x00000321,0x00050084,0x00000006,0x00000346,0x00000345,0x000001de,0x00050080,0x00000006, + 0x00000347,0x00000344,0x00000346,0x0004003d,0x0000002f,0x00000349,0x00000324,0x0007004f, + 0x0000002d,0x0000034a,0x00000349,0x00000349,0x00000000,0x00000001,0x0003003e,0x00000348, + 0x0000034a,0x00050039,0x0000002f,0x0000034b,0x00000032,0x00000348,0x00050041,0x00000305, + 0x0000034c,0x00000342,0x00000347,0x0005003e,0x0000034c,0x0000034b,0x00000028,0x000001de, + 0x0004003d,0x00000006,0x0000034d,0x0000031e,0x00050084,0x00000006,0x0000034e,0x0000034d, + 0x000002f7,0x0004003d,0x00000006,0x0000034f,0x00000321,0x00050084,0x00000006,0x00000350, + 0x0000034f,0x000001de,0x00050080,0x00000006,0x00000351,0x0000034e,0x00000350,0x00050080, + 0x00000006,0x00000352,0x00000351,0x00000008,0x0004003d,0x0000002f,0x00000354,0x00000324, + 0x0007004f,0x0000002d,0x00000355,0x00000354,0x00000354,0x00000002,0x00000003,0x0003003e, + 0x00000353,0x00000355,0x00050039,0x0000002f,0x00000356,0x00000032,0x00000353,0x00050041, + 0x00000305,0x00000357,0x00000342,0x00000352,0x0005003e,0x00000357,0x00000356,0x00000028, + 0x000001de,0x000200f9,0x00000319,0x000200f8,0x00000319,0x0004003d,0x00000006,0x00000358, + 0x00000314,0x00050080,0x00000006,0x00000359,0x00000358,0x000001f9,0x0003003e,0x00000314, + 0x00000359,0x000200f9,0x00000316,0x000200f8,0x00000318,0x000400e0,0x000001de,0x000001de, + 0x00000278,0x0004003d,0x00000041,0x0000035a,0x00000205,0x000300f7,0x0000035c,0x00000000, + 0x000400fa,0x0000035a,0x0000035b,0x0000035c,0x000200f8,0x0000035b,0x0003003e,0x0000035d, + 0x0000009d,0x000200f9,0x0000035e,0x000200f8,0x0000035e,0x000400f6,0x00000360,0x00000361, + 0x00000001,0x000200f9,0x00000362,0x000200f8,0x00000362,0x0004003d,0x00000006,0x00000363, + 0x0000035d,0x000500b0,0x00000041,0x00000364,0x00000363,0x00000203,0x000400fa,0x00000364, + 0x0000035f,0x00000360,0x000200f8,0x0000035f,0x0003003e,0x00000365,0x0000009d,0x000200f9, + 0x00000366,0x000200f8,0x00000366,0x000400f6,0x00000368,0x00000369,0x00000001,0x000200f9, + 0x0000036a,0x000200f8,0x0000036a,0x0004003d,0x00000006,0x0000036b,0x00000365,0x000500b0, + 0x00000041,0x0000036d,0x0000036b,0x0000036c,0x000400fa,0x0000036d,0x00000367,0x00000368, + 0x000200f8,0x00000367,0x0004003d,0x00000006,0x00000371,0x000001f6,0x00050084,0x00000006, + 0x00000372,0x00000371,0x000002f7,0x0004003d,0x00000006,0x00000373,0x00000365,0x00050084, + 0x00000006,0x00000374,0x00000373,0x00000008,0x00050080,0x00000006,0x00000375,0x00000372, + 0x00000374,0x00050041,0x00000305,0x00000376,0x000002fb,0x00000375,0x0004003d,0x00000006, + 0x00000377,0x000001f6,0x00050084,0x00000006,0x00000378,0x00000377,0x000002f7,0x0004003d, + 0x00000006,0x00000379,0x00000365,0x00050084,0x00000006,0x0000037a,0x00000379,0x00000008, + 0x00050080,0x00000006,0x0000037b,0x00000378,0x0000037a,0x00081169,0x0000036e,0x0000037c, + 0x00000376,0x00000209,0x000002f7,0x00000030,0x000001de,0x0003003e,0x00000370,0x0000037c, + 0x0004003d,0x00000006,0x00000380,0x000001ff,0x0004003d,0x00000006,0x00000381,0x0000035d, + 0x00050080,0x00000006,0x00000382,0x00000380,0x00000381,0x00050084,0x00000006,0x00000383, + 0x00000382,0x000000bd,0x00050084,0x00000006,0x00000384,0x00000383,0x000002f7,0x0004003d, + 0x00000006,0x00000385,0x00000365,0x00050084,0x00000006,0x00000386,0x00000385,0x00000008, + 0x00050080,0x00000006,0x00000387,0x00000384,0x00000386,0x00050041,0x00000305,0x00000388, + 0x00000342,0x00000387,0x0004003d,0x00000006,0x00000389,0x000001ff,0x0004003d,0x00000006, + 0x0000038a,0x0000035d,0x00050080,0x00000006,0x0000038b,0x00000389,0x0000038a,0x00050084, + 0x00000006,0x0000038c,0x0000038b,0x000000bd,0x00050084,0x00000006,0x0000038d,0x0000038c, + 0x000002f7,0x0004003d,0x00000006,0x0000038e,0x00000365,0x00050084,0x00000006,0x0000038f, + 0x0000038e,0x00000008,0x00050080,0x00000006,0x00000390,0x0000038d,0x0000038f,0x00081169, + 0x0000037d,0x00000391,0x00000388,0x000001f1,0x000002f7,0x00000030,0x000001de,0x0003003e, + 0x0000037f,0x00000391,0x0004003d,0x00000006,0x00000392,0x0000035d,0x0004003d,0x0000036e, + 0x00000393,0x00000370,0x0004003d,0x0000037d,0x00000394,0x0000037f,0x0004003d,0x00000006, + 0x00000395,0x0000035d,0x00050041,0x0000029e,0x00000396,0x0000029a,0x00000395,0x0004003d, + 0x00000297,0x00000397,0x00000396,0x0006116b,0x00000297,0x00000398,0x00000393,0x00000394, + 0x00000397,0x00050041,0x0000029e,0x00000399,0x0000029a,0x00000392,0x0003003e,0x00000399, + 0x00000398,0x000200f9,0x00000369,0x000200f8,0x00000369,0x0004003d,0x00000006,0x0000039a, + 0x00000365,0x00050080,0x00000006,0x0000039b,0x0000039a,0x000001f1,0x0003003e,0x00000365, + 0x0000039b,0x000200f9,0x00000366,0x000200f8,0x00000368,0x0003003e,0x0000039d,0x00000209, + 0x000200f9,0x0000039e,0x000200f8,0x0000039e,0x000400f6,0x000003a0,0x000003a1,0x00000000, + 0x000200f9,0x000003a2,0x000200f8,0x000003a2,0x0004003d,0x000001d0,0x000003a3,0x0000039d, + 0x0004116c,0x00000006,0x000003a4,0x00000297,0x0004007c,0x000001d0,0x000003a5,0x000003a4, + 0x000500b1,0x00000041,0x000003a6,0x000003a3,0x000003a5,0x000400fa,0x000003a6,0x0000039f, + 0x000003a0,0x000200f8,0x0000039f,0x0004003d,0x00000006,0x000003a7,0x0000035d,0x0004003d, + 0x000001d0,0x000003a8,0x0000039d,0x0004003d,0x00000006,0x000003a9,0x0000035d,0x0004003d, + 0x000001d0,0x000003aa,0x0000039d,0x00060041,0x0000000a,0x000003ac,0x0000029a,0x000003a9, + 0x000003aa,0x0004003d,0x00000009,0x000003ad,0x000003ac,0x0003003e,0x000003ab,0x000003ad, + 0x00050039,0x00000009,0x000003ae,0x0000000d,0x000003ab,0x00060041,0x0000000a,0x000003af, + 0x0000029a,0x000003a7,0x000003a8,0x0003003e,0x000003af,0x000003ae,0x000200f9,0x000003a1, + 0x000200f8,0x000003a1,0x0004003d,0x000001d0,0x000003b0,0x0000039d,0x00050080,0x000001d0, + 0x000003b1,0x000003b0,0x000001f1,0x0003003e,0x0000039d,0x000003b1,0x000200f9,0x0000039e, + 0x000200f8,0x000003a0,0x000200f9,0x00000361,0x000200f8,0x00000361,0x0004003d,0x00000006, + 0x000003b2,0x0000035d,0x00050080,0x00000006,0x000003b3,0x000003b2,0x000001f1,0x0003003e, + 0x0000035d,0x000003b3,0x000200f9,0x0000035e,0x000200f8,0x00000360,0x0004003d,0x00000006, + 0x000003b5,0x000002c5,0x00050084,0x00000006,0x000003b6,0x000003b5,0x000001f8,0x0003003e, + 0x000003b4,0x000003b6,0x000300f7,0x000003ba,0x00000000,0x000400fa,0x000003b8,0x000003b9, + 0x000003ba,0x000200f8,0x000003b9,0x0004003d,0x00000006,0x000003bb,0x000003b4,0x00050080, + 0x00000006,0x000003bc,0x000003bb,0x000001f8,0x00050089,0x00000006,0x000003bd,0x000003bc, + 0x000003b7,0x000500aa,0x00000041,0x000003be,0x000003bd,0x0000009d,0x000400a8,0x00000041, + 0x000003bf,0x000003be,0x000300f7,0x000003c1,0x00000000,0x000400fa,0x000003bf,0x000003c0, + 0x000003c1,0x000200f8,0x000003c0,0x0004003d,0x00000006,0x000003c2,0x000003b4,0x00050080, + 0x00000006,0x000003c3,0x000003c2,0x000001f8,0x000500ae,0x00000041,0x000003c4,0x000003c3, + 0x000002b4,0x000200f9,0x000003c1,0x000200f8,0x000003c1,0x000700f5,0x00000041,0x000003c5, + 0x000003be,0x000003b9,0x000003c4,0x000003c0,0x000200f9,0x000003ba,0x000200f8,0x000003ba, + 0x000700f5,0x00000041,0x000003c6,0x000003b8,0x00000360,0x000003c5,0x000003c1,0x000300f7, + 0x000003c8,0x00000000,0x000400fa,0x000003c6,0x000003c7,0x000003c8,0x000200f8,0x000003c7, + 0x0003003e,0x000003c9,0x0000009d,0x000200f9,0x000003ca,0x000200f8,0x000003ca,0x000400f6, + 0x000003cc,0x000003cd,0x00000001,0x000200f9,0x000003ce,0x000200f8,0x000003ce,0x0004003d, + 0x00000006,0x000003cf,0x000003c9,0x000500b0,0x00000041,0x000003d0,0x000003cf,0x00000203, + 0x000400fa,0x000003d0,0x000003cb,0x000003cc,0x000200f8,0x000003cb,0x0004003d,0x00000006, + 0x000003d1,0x000003b4,0x000500b0,0x00000041,0x000003d2,0x000003d1,0x000003b7,0x000300f7, + 0x000003d4,0x00000000,0x000400fa,0x000003d2,0x000003d3,0x000003da,0x000200f8,0x000003d3, + 0x0004003d,0x00000006,0x000003d5,0x000003c9,0x0004003d,0x00000006,0x000003d6,0x000003c9, + 0x00050041,0x0000029e,0x000003d7,0x0000029a,0x000003d6,0x0004003d,0x00000297,0x000003d8, + 0x000003d7,0x00050041,0x0000029e,0x000003d9,0x000002a4,0x000003d5,0x0003003e,0x000003d9, + 0x000003d8,0x000200f9,0x000003d4,0x000200f8,0x000003da,0x0004003d,0x00000006,0x000003db, + 0x000003c9,0x0004003d,0x00000006,0x000003dc,0x000003c9,0x00050041,0x0000029e,0x000003dd, + 0x000002a4,0x000003dc,0x0004003d,0x00000297,0x000003de,0x000003dd,0x0004003d,0x00000006, + 0x000003df,0x000003c9,0x00050041,0x0000029e,0x000003e0,0x0000029a,0x000003df,0x0004003d, + 0x00000297,0x000003e1,0x000003e0,0x00050081,0x00000297,0x000003e2,0x000003de,0x000003e1, + 0x00050041,0x0000029e,0x000003e3,0x000002a4,0x000003db,0x0003003e,0x000003e3,0x000003e2, + 0x0003003e,0x000003e4,0x00000209,0x000200f9,0x000003e5,0x000200f8,0x000003e5,0x000400f6, + 0x000003e7,0x000003e8,0x00000000,0x000200f9,0x000003e9,0x000200f8,0x000003e9,0x0004003d, + 0x000001d0,0x000003ea,0x000003e4,0x0004116c,0x00000006,0x000003eb,0x00000297,0x0004007c, + 0x000001d0,0x000003ec,0x000003eb,0x000500b1,0x00000041,0x000003ed,0x000003ea,0x000003ec, + 0x000400fa,0x000003ed,0x000003e6,0x000003e7,0x000200f8,0x000003e6,0x0004003d,0x00000006, + 0x000003ee,0x000003c9,0x0004003d,0x000001d0,0x000003ef,0x000003e4,0x0004003d,0x00000006, + 0x000003f0,0x000003c9,0x0004003d,0x000001d0,0x000003f1,0x000003e4,0x00060041,0x0000000a, + 0x000003f3,0x000002a4,0x000003f0,0x000003f1,0x0004003d,0x00000009,0x000003f4,0x000003f3, + 0x0003003e,0x000003f2,0x000003f4,0x00050039,0x00000009,0x000003f5,0x0000000d,0x000003f2, + 0x00060041,0x0000000a,0x000003f6,0x000002a4,0x000003ee,0x000003ef,0x0003003e,0x000003f6, + 0x000003f5,0x000200f9,0x000003e8,0x000200f8,0x000003e8,0x0004003d,0x000001d0,0x000003f7, + 0x000003e4,0x00050080,0x000001d0,0x000003f8,0x000003f7,0x000001f1,0x0003003e,0x000003e4, + 0x000003f8,0x000200f9,0x000003e5,0x000200f8,0x000003e7,0x000200f9,0x000003d4,0x000200f8, + 0x000003d4,0x0004003d,0x00000006,0x000003f9,0x000003c9,0x00050041,0x0000029e,0x000003fa, + 0x0000029a,0x000003f9,0x0003003e,0x000003fa,0x000002a2,0x000200f9,0x000003cd,0x000200f8, + 0x000003cd,0x0004003d,0x00000006,0x000003fb,0x000003c9,0x00050080,0x00000006,0x000003fc, + 0x000003fb,0x000001f1,0x0003003e,0x000003c9,0x000003fc,0x000200f9,0x000003ca,0x000200f8, + 0x000003cc,0x000200f9,0x000003c8,0x000200f8,0x000003c8,0x000200f9,0x0000035c,0x000200f8, + 0x0000035c,0x000200f9,0x000002c1,0x000200f8,0x000002c1,0x0004003d,0x00000006,0x000003fd, + 0x000002bd,0x00050080,0x00000006,0x000003fe,0x000003fd,0x000001f1,0x0003003e,0x000002bd, + 0x000003fe,0x000200f9,0x000002be,0x000200f8,0x000002c0,0x000300f7,0x00000401,0x00000000, + 0x000400fa,0x000003ff,0x00000400,0x00000401,0x000200f8,0x00000400,0x0003003e,0x00000402, + 0x0000009d,0x000200f9,0x00000403,0x000200f8,0x00000403,0x000400f6,0x00000405,0x00000406, + 0x00000001,0x000200f9,0x00000407,0x000200f8,0x00000407,0x0004003d,0x00000006,0x00000408, + 0x00000402,0x000500b0,0x00000041,0x00000409,0x00000408,0x00000203,0x000400fa,0x00000409, + 0x00000404,0x00000405,0x000200f8,0x00000404,0x0004003d,0x00000006,0x0000040a,0x00000402, + 0x0004003d,0x00000006,0x0000040b,0x00000402,0x00050041,0x0000029e,0x0000040c,0x000002a4, + 0x0000040b,0x0004003d,0x00000297,0x0000040d,0x0000040c,0x00050041,0x0000029e,0x0000040e, + 0x0000029a,0x0000040a,0x0003003e,0x0000040e,0x0000040d,0x000200f9,0x00000406,0x000200f8, + 0x00000406,0x0004003d,0x00000006,0x0000040f,0x00000402,0x00050080,0x00000006,0x00000410, + 0x0000040f,0x000001f1,0x0003003e,0x00000402,0x00000410,0x000200f9,0x00000403,0x000200f8, + 0x00000405,0x000200f9,0x00000401,0x000200f8,0x00000401,0x000400e0,0x000001de,0x000001de, + 0x00000278,0x0004003d,0x00000041,0x00000411,0x00000205,0x000300f7,0x00000413,0x00000000, + 0x000400fa,0x00000411,0x00000412,0x00000413,0x000200f8,0x00000412,0x0003003e,0x00000414, + 0x0000009d,0x000200f9,0x00000415,0x000200f8,0x00000415,0x000400f6,0x00000417,0x00000418, + 0x00000001,0x000200f9,0x00000419,0x000200f8,0x00000419,0x0004003d,0x00000006,0x0000041a, + 0x00000414,0x000500b0,0x00000041,0x0000041b,0x0000041a,0x00000203,0x000400fa,0x0000041b, + 0x00000416,0x00000417,0x000200f8,0x00000416,0x0004003d,0x00000006,0x0000041d,0x00000414, + 0x00050041,0x0000029e,0x0000041e,0x0000029a,0x0000041d,0x0004003d,0x00000297,0x0000041f, + 0x0000041e,0x00040073,0x00000284,0x00000420,0x0000041f,0x0003003e,0x0000041c,0x00000420, + 0x0004003d,0x00000284,0x00000421,0x0000041c,0x0004003d,0x00000006,0x00000422,0x000001f6, + 0x00050084,0x00000006,0x00000423,0x00000422,0x000001ea,0x0004003d,0x00000006,0x00000424, + 0x000001ff,0x0004003d,0x00000006,0x00000425,0x00000414,0x00050080,0x00000006,0x00000426, + 0x00000424,0x00000425,0x00050084,0x00000006,0x00000427,0x00000426,0x000000bd,0x00050080, + 0x00000006,0x00000428,0x00000423,0x00000427,0x00050041,0x00000274,0x00000429,0x00000270, + 0x00000428,0x0004003d,0x00000006,0x0000042a,0x000001f6,0x00050084,0x00000006,0x0000042b, + 0x0000042a,0x000001ea,0x0004003d,0x00000006,0x0000042c,0x000001ff,0x0004003d,0x00000006, + 0x0000042d,0x00000414,0x00050080,0x00000006,0x0000042e,0x0000042c,0x0000042d,0x00050084, + 0x00000006,0x0000042f,0x0000042e,0x000000bd,0x00050080,0x00000006,0x00000430,0x0000042b, + 0x0000042f,0x0007116a,0x00000429,0x00000421,0x00000209,0x000001ea,0x00000028,0x000001de, + 0x000200f9,0x00000418,0x000200f8,0x00000418,0x0004003d,0x00000006,0x00000431,0x00000414, + 0x00050080,0x00000006,0x00000432,0x00000431,0x000001f1,0x0003003e,0x00000414,0x00000432, + 0x000200f9,0x00000415,0x000200f8,0x00000417,0x000200f9,0x00000413,0x000200f8,0x00000413, + 0x000400e0,0x000001de,0x000001de,0x00000278,0x0004003d,0x00000006,0x00000434,0x000001b7, + 0x0003003e,0x00000433,0x00000434,0x000200f9,0x00000435,0x000200f8,0x00000435,0x000400f6, + 0x00000437,0x00000438,0x00000000,0x000200f9,0x00000439,0x000200f8,0x00000439,0x0004003d, + 0x00000006,0x0000043a,0x00000433,0x000500b0,0x00000041,0x0000043c,0x0000043a,0x0000043b, + 0x000400fa,0x0000043c,0x00000436,0x00000437,0x000200f8,0x00000436,0x0004003d,0x00000006, + 0x0000043e,0x000001db,0x0004003d,0x00000006,0x0000043f,0x00000433,0x00050086,0x00000006, + 0x00000440,0x0000043f,0x000001ea,0x00050080,0x00000006,0x00000441,0x0000043e,0x00000440, + 0x0003003e,0x0000043d,0x00000441,0x0004003d,0x00000006,0x00000443,0x000001e7,0x0004003d, + 0x00000006,0x00000444,0x00000433,0x00050089,0x00000006,0x00000445,0x00000444,0x000001ea, + 0x00050080,0x00000006,0x00000446,0x00000443,0x00000445,0x0003003e,0x00000442,0x00000446, + 0x0004003d,0x00000006,0x00000447,0x0000043d,0x00050041,0x000001d2,0x00000448,0x000001cf, + 0x00000209,0x0004003d,0x00000006,0x00000449,0x00000448,0x000500ae,0x00000041,0x0000044a, + 0x00000447,0x00000449,0x000300f7,0x0000044c,0x00000000,0x000400fa,0x0000044a,0x0000044b, + 0x0000044c,0x000200f8,0x0000044b,0x000200f9,0x00000438,0x000200f8,0x0000044c,0x0004003d, + 0x00000006,0x0000044f,0x00000433,0x00050041,0x00000274,0x00000450,0x00000270,0x0000044f, + 0x0006003d,0x0000000f,0x00000451,0x00000450,0x00000030,0x000001de,0x0003003e,0x0000044e, + 0x00000451,0x000300f7,0x00000454,0x00000000,0x000400fa,0x00000452,0x00000453,0x00000454, + 0x000200f8,0x00000453,0x0004003d,0x00000006,0x00000459,0x000001c1,0x00050041,0x000001d2, + 0x0000045b,0x000001cf,0x0000045a,0x0004003d,0x00000006,0x0000045c,0x0000045b,0x00050084, + 0x00000006,0x0000045d,0x00000459,0x0000045c,0x0004003d,0x00000006,0x0000045e,0x0000043d, + 0x00050041,0x000001d2,0x0000045f,0x000001cf,0x000001f1,0x0004003d,0x00000006,0x00000460, + 0x0000045f,0x00050084,0x00000006,0x00000461,0x0000045e,0x00000460,0x00050080,0x00000006, + 0x00000462,0x0000045d,0x00000461,0x0004003d,0x00000006,0x00000463,0x000001cb,0x00050041, + 0x000001d2,0x00000464,0x000001cf,0x000001f1,0x0004003d,0x00000006,0x00000465,0x00000464, + 0x00050084,0x00000006,0x00000466,0x00000463,0x00000465,0x00050041,0x000001d2,0x00000467, + 0x000001cf,0x00000209,0x0004003d,0x00000006,0x00000468,0x00000467,0x00050084,0x00000006, + 0x00000469,0x00000466,0x00000468,0x00050080,0x00000006,0x0000046a,0x00000462,0x00000469, + 0x0004003d,0x00000006,0x0000046b,0x00000442,0x00050080,0x00000006,0x0000046c,0x0000046a, + 0x0000046b,0x0004003d,0x0000000f,0x0000046d,0x0000044e,0x00060041,0x00000254,0x0000046e, + 0x00000458,0x00000209,0x0000046c,0x0003003e,0x0000046e,0x0000046d,0x000200f9,0x00000438, + 0x000200f8,0x00000454,0x000300f7,0x00000473,0x00000000,0x000400fa,0x00000471,0x00000472, + 0x00000473,0x000200f8,0x00000472,0x0004003d,0x0000000f,0x00000474,0x0000044e,0x00040073, + 0x00000009,0x00000475,0x00000474,0x0003003e,0x00000476,0x00000475,0x00050039,0x00000009, + 0x00000477,0x00000024,0x00000476,0x00040073,0x0000000f,0x00000478,0x00000477,0x0003003e, + 0x0000044e,0x00000478,0x000200f9,0x00000473,0x000200f8,0x00000473,0x0004003d,0x00000006, + 0x0000047a,0x0000043d,0x00050041,0x000001d2,0x0000047b,0x000001cf,0x00000234,0x0004003d, + 0x00000006,0x0000047c,0x0000047b,0x00050084,0x00000006,0x0000047d,0x0000047a,0x0000047c, + 0x0004003d,0x00000006,0x0000047e,0x000001ec,0x00050080,0x00000006,0x0000047f,0x0000047d, + 0x0000047e,0x0004003d,0x00000006,0x00000480,0x00000442,0x00050080,0x00000006,0x00000481, + 0x0000047f,0x00000480,0x0003003e,0x00000479,0x00000481,0x000300f7,0x00000486,0x00000000, + 0x000400fa,0x00000484,0x00000485,0x00000486,0x000200f8,0x00000485,0x0004003d,0x00000006, + 0x0000048b,0x00000479,0x0004003d,0x0000000f,0x0000048d,0x0000044e,0x0003003e,0x0000048c, + 0x0000048d,0x00050039,0x00000006,0x0000048e,0x00000013,0x0000048c,0x0003003e,0x0000048f, + 0x0000048e,0x00050039,0x00000006,0x00000490,0x0000001d,0x0000048f,0x00040071,0x00000242, + 0x00000491,0x00000490,0x00060041,0x00000248,0x00000492,0x0000048a,0x00000209,0x0000048b, + 0x0003003e,0x00000492,0x00000491,0x000200f9,0x00000486,0x000200f8,0x00000486,0x000300f7, + 0x00000496,0x00000000,0x000400fa,0x00000494,0x00000495,0x00000496,0x000200f8,0x00000495, + 0x0004003d,0x00000006,0x00000497,0x00000479,0x0004003d,0x0000000f,0x00000498,0x0000044e, + 0x00060041,0x00000254,0x00000499,0x00000458,0x00000209,0x00000497,0x0003003e,0x00000499, + 0x00000498,0x000200f9,0x00000496,0x000200f8,0x00000496,0x000200f9,0x00000438,0x000200f8, + 0x00000438,0x0004003d,0x00000006,0x0000049a,0x00000433,0x00050080,0x00000006,0x0000049b, + 0x0000049a,0x000001f9,0x0003003e,0x00000433,0x0000049b,0x000200f9,0x00000435,0x000200f8, + 0x00000437,0x000100fd,0x00010038,0x00050036,0x00000009,0x0000000d,0x00000000,0x0000000b, + 0x00030037,0x0000000a,0x0000000c,0x000200f8,0x0000000e,0x0004003b,0x00000015,0x00000034, + 0x00000007,0x0004003b,0x00000015,0x00000037,0x00000007,0x0004003b,0x00000015,0x0000003b, + 0x00000007,0x0004003b,0x0000000a,0x00000055,0x00000007,0x0004003b,0x00000015,0x00000066, + 0x00000007,0x0004003b,0x00000015,0x0000006b,0x00000007,0x0004003d,0x00000009,0x00000035, + 0x0000000c,0x0004007c,0x00000006,0x00000036,0x00000035,0x0003003e,0x00000034,0x00000036, + 0x0004003d,0x00000006,0x00000038,0x00000034,0x000500c7,0x00000006,0x0000003a,0x00000038, + 0x00000039,0x0003003e,0x00000037,0x0000003a,0x0004003d,0x00000006,0x0000003c,0x00000034, + 0x000500c7,0x00000006,0x0000003e,0x0000003c,0x0000003d,0x0003003e,0x0000003b,0x0000003e, + 0x0004003d,0x00000006,0x0000003f,0x0000003b,0x000500ae,0x00000041,0x00000042,0x0000003f, + 0x00000040,0x000300f7,0x00000044,0x00000000,0x000400fa,0x00000042,0x00000043,0x00000044, + 0x000200f8,0x00000043,0x0004003d,0x00000009,0x00000045,0x0000000c,0x000200fe,0x00000045, + 0x000200f8,0x00000044,0x0004003d,0x00000006,0x00000047,0x0000003b,0x000500ae,0x00000041, + 0x00000049,0x00000047,0x00000048,0x000300f7,0x0000004b,0x00000000,0x000400fa,0x00000049, + 0x0000004a,0x0000004b,0x000200f8,0x0000004a,0x0004003d,0x00000006,0x0000004c,0x00000037, + 0x000500c5,0x00000006,0x0000004d,0x0000004c,0x00000040,0x0004007c,0x00000009,0x0000004e, + 0x0000004d,0x000200fe,0x0000004e,0x000200f8,0x0000004b,0x0004003d,0x00000006,0x00000050, + 0x0000003b,0x000500b0,0x00000041,0x00000052,0x00000050,0x00000051,0x000300f7,0x00000054, + 0x00000000,0x000400fa,0x00000052,0x00000053,0x00000054,0x000200f8,0x00000053,0x0004003d, + 0x00000006,0x00000056,0x0000003b,0x0004007c,0x00000009,0x00000057,0x00000056,0x00050085, + 0x00000009,0x00000059,0x00000057,0x00000058,0x0006000c,0x00000009,0x0000005a,0x00000001, + 0x00000002,0x00000059,0x0003003e,0x00000055,0x0000005a,0x0004003d,0x00000006,0x0000005b, + 0x00000037,0x0004007c,0x00000009,0x0000005c,0x0000005b,0x0004003d,0x00000006,0x0000005d, + 0x00000037,0x0004003d,0x00000009,0x0000005e,0x00000055,0x00050085,0x00000009,0x00000060, + 0x0000005e,0x0000005f,0x0004007c,0x00000006,0x00000061,0x00000060,0x000500c5,0x00000006, + 0x00000062,0x0000005d,0x00000061,0x0004007c,0x00000009,0x00000063,0x00000062,0x00050081, + 0x00000009,0x00000064,0x0000005c,0x00000063,0x000200fe,0x00000064,0x000200f8,0x00000054, + 0x0004003d,0x00000006,0x00000067,0x0000003b,0x000500c2,0x00000006,0x00000069,0x00000067, + 0x00000068,0x000500c7,0x00000006,0x0000006a,0x00000069,0x00000008,0x0003003e,0x00000066, + 0x0000006a,0x0004003d,0x00000006,0x0000006c,0x0000003b,0x00050080,0x00000006,0x0000006e, + 0x0000006c,0x0000006d,0x0004003d,0x00000006,0x0000006f,0x00000066,0x00050080,0x00000006, + 0x00000070,0x0000006e,0x0000006f,0x000500c7,0x00000006,0x00000072,0x00000070,0x00000071, + 0x0003003e,0x0000006b,0x00000072,0x0004003d,0x00000006,0x00000073,0x00000037,0x0004003d, + 0x00000006,0x00000074,0x0000006b,0x000500c5,0x00000006,0x00000075,0x00000073,0x00000074, + 0x0004007c,0x00000009,0x00000076,0x00000075,0x000200fe,0x00000076,0x00010038,0x00050036, + 0x00000006,0x00000013,0x00000000,0x00000011,0x00030037,0x00000010,0x00000012,0x000200f8, + 0x00000014,0x0004003d,0x0000000f,0x00000079,0x00000012,0x0004007c,0x0000007a,0x0000007b, + 0x00000079,0x00040071,0x00000006,0x0000007c,0x0000007b,0x000200fe,0x0000007c,0x00010038, + 0x00050036,0x00000006,0x00000019,0x00000000,0x00000016,0x00030037,0x00000015,0x00000017, + 0x00030037,0x00000015,0x00000018,0x000200f8,0x0000001a,0x0004003b,0x00000015,0x0000007f, + 0x00000007,0x0004003b,0x00000015,0x00000083,0x00000007,0x0004003b,0x00000015,0x00000087, + 0x00000007,0x0004003b,0x00000015,0x0000008b,0x00000007,0x0004003d,0x00000006,0x00000080, + 0x00000017,0x0004003d,0x00000006,0x00000081,0x00000018,0x000500c2,0x00000006,0x00000082, + 0x00000080,0x00000081,0x0003003e,0x0000007f,0x00000082,0x0004003d,0x00000006,0x00000084, + 0x00000018,0x000500c4,0x00000006,0x00000085,0x00000008,0x00000084,0x00050082,0x00000006, + 0x00000086,0x00000085,0x00000008,0x0003003e,0x00000083,0x00000086,0x0004003d,0x00000006, + 0x00000088,0x00000017,0x0004003d,0x00000006,0x00000089,0x00000083,0x000500c7,0x00000006, + 0x0000008a,0x00000088,0x00000089,0x0003003e,0x00000087,0x0000008a,0x0004003d,0x00000006, + 0x0000008c,0x00000018,0x00050082,0x00000006,0x0000008d,0x0000008c,0x00000008,0x000500c4, + 0x00000006,0x0000008e,0x00000008,0x0000008d,0x0003003e,0x0000008b,0x0000008e,0x0004003d, + 0x00000006,0x0000008f,0x0000007f,0x0004003d,0x00000006,0x00000090,0x00000087,0x0004003d, + 0x00000006,0x00000091,0x0000008b,0x000500ac,0x00000041,0x00000092,0x00000090,0x00000091, + 0x000400a8,0x00000041,0x00000093,0x00000092,0x000300f7,0x00000095,0x00000000,0x000400fa, + 0x00000093,0x00000094,0x00000095,0x000200f8,0x00000094,0x0004003d,0x00000006,0x00000096, + 0x00000087,0x0004003d,0x00000006,0x00000097,0x0000008b,0x000500aa,0x00000041,0x00000098, + 0x00000096,0x00000097,0x000300f7,0x0000009a,0x00000000,0x000400fa,0x00000098,0x00000099, + 0x0000009a,0x000200f8,0x00000099,0x0004003d,0x00000006,0x0000009b,0x0000007f,0x000500c7, + 0x00000006,0x0000009c,0x0000009b,0x00000008,0x000500ab,0x00000041,0x0000009e,0x0000009c, + 0x0000009d,0x000200f9,0x0000009a,0x000200f8,0x0000009a,0x000700f5,0x00000041,0x0000009f, + 0x00000098,0x00000094,0x0000009e,0x00000099,0x000200f9,0x00000095,0x000200f8,0x00000095, + 0x000700f5,0x00000041,0x000000a0,0x00000092,0x0000001a,0x0000009f,0x0000009a,0x000600a9, + 0x00000006,0x000000a1,0x000000a0,0x00000008,0x0000009d,0x00050080,0x00000006,0x000000a2, + 0x0000008f,0x000000a1,0x000200fe,0x000000a2,0x00010038,0x00050036,0x00000006,0x0000001d, + 0x00000000,0x0000001b,0x00030037,0x00000015,0x0000001c,0x000200f8,0x0000001e,0x0004003b, + 0x000000a5,0x000000a6,0x00000007,0x0004003b,0x00000015,0x000000c2,0x00000007,0x0004003b, + 0x00000015,0x000000c8,0x00000007,0x0004003b,0x00000015,0x000000ce,0x00000007,0x0004003b, + 0x00000015,0x000000d5,0x00000007,0x0004003b,0x00000015,0x000000dc,0x00000007,0x0004003b, + 0x00000015,0x000000df,0x00000007,0x0004003b,0x00000015,0x000000e8,0x00000007,0x0004003b, + 0x00000015,0x000000eb,0x00000007,0x0004003b,0x00000015,0x000000f4,0x00000007,0x0004003b, + 0x00000015,0x000000f6,0x00000007,0x0004003b,0x00000015,0x000000fb,0x00000007,0x0004003b, + 0x00000015,0x000000fe,0x00000007,0x0004003b,0x00000015,0x00000100,0x00000007,0x0004003b, + 0x00000015,0x00000102,0x00000007,0x0004003b,0x00000015,0x00000116,0x00000007,0x0004003d, + 0x00000006,0x000000a7,0x0000001c,0x000500c7,0x00000006,0x000000a9,0x000000a7,0x000000a8, + 0x000500aa,0x00000041,0x000000aa,0x000000a9,0x000000a8,0x000300f7,0x000000ac,0x00000000, + 0x000400fa,0x000000aa,0x000000ab,0x000000ac,0x000200f8,0x000000ab,0x0004003d,0x00000006, + 0x000000ad,0x0000001c,0x000500c7,0x00000006,0x000000af,0x000000ad,0x000000ae,0x000500ab, + 0x00000041,0x000000b0,0x000000af,0x0000009d,0x000200f9,0x000000ac,0x000200f8,0x000000ac, + 0x000700f5,0x00000041,0x000000b1,0x000000aa,0x0000001e,0x000000b0,0x000000ab,0x0003003e, + 0x000000a6,0x000000b1,0x0004003d,0x00000041,0x000000b2,0x000000a6,0x000300f7,0x000000b4, + 0x00000000,0x000400fa,0x000000b2,0x000000b3,0x000000b4,0x000200f8,0x000000b3,0x000200fe, + 0x0000009d,0x000200f8,0x000000b4,0x0004003d,0x00000006,0x000000b6,0x0000001c,0x000500c7, + 0x00000006,0x000000b8,0x000000b6,0x000000b7,0x000500aa,0x00000041,0x000000b9,0x000000b8, + 0x0000009d,0x000300f7,0x000000bb,0x00000000,0x000400fa,0x000000b9,0x000000ba,0x000000bb, + 0x000200f8,0x000000ba,0x0004003d,0x00000006,0x000000bc,0x0000001c,0x000500c2,0x00000006, + 0x000000be,0x000000bc,0x000000bd,0x000500c7,0x00000006,0x000000c0,0x000000be,0x000000bf, + 0x000200fe,0x000000c0,0x000200f8,0x000000bb,0x0004003d,0x00000006,0x000000c3,0x0000001c, + 0x000500c7,0x00000006,0x000000c5,0x000000c3,0x000000c4,0x000500ab,0x00000041,0x000000c6, + 0x000000c5,0x0000009d,0x000600a9,0x00000006,0x000000c7,0x000000c6,0x000000bf,0x0000009d, + 0x0003003e,0x000000c2,0x000000c7,0x0004003d,0x00000006,0x000000c9,0x0000001c,0x000500c2, + 0x00000006,0x000000cb,0x000000c9,0x000000ca,0x000500c7,0x00000006,0x000000cd,0x000000cb, + 0x000000cc,0x0003003e,0x000000c8,0x000000cd,0x0004003d,0x00000006,0x000000cf,0x0000001c, + 0x000500c7,0x00000006,0x000000d0,0x000000cf,0x000000ae,0x0003003e,0x000000ce,0x000000d0, + 0x0004003d,0x00000006,0x000000d1,0x000000c8,0x000500aa,0x00000041,0x000000d2,0x000000d1, + 0x000000cc,0x000300f7,0x000000d4,0x00000000,0x000400fa,0x000000d2,0x000000d3,0x000000d7, + 0x000200f8,0x000000d3,0x0003003e,0x000000d5,0x000000d6,0x000200f9,0x000000d4,0x000200f8, + 0x000000d7,0x0004003d,0x00000006,0x000000d8,0x000000c8,0x000500b2,0x00000041,0x000000d9, + 0x000000d8,0x000000bd,0x000300f7,0x000000db,0x00000000,0x000400fa,0x000000d9,0x000000da, + 0x000000fa,0x000200f8,0x000000da,0x0004003d,0x00000006,0x000000dd,0x000000c8,0x000500aa, + 0x00000041,0x000000de,0x000000dd,0x0000009d,0x000300f7,0x000000e1,0x00000000,0x000400fa, + 0x000000de,0x000000e0,0x000000e3,0x000200f8,0x000000e0,0x0004003d,0x00000006,0x000000e2, + 0x000000ce,0x0003003e,0x000000df,0x000000e2,0x000200f9,0x000000e1,0x000200f8,0x000000e3, + 0x0004003d,0x00000006,0x000000e5,0x000000ce,0x00050080,0x00000006,0x000000e6,0x000000e4, + 0x000000e5,0x0003003e,0x000000df,0x000000e6,0x000200f9,0x000000e1,0x000200f8,0x000000e1, + 0x0004003d,0x00000006,0x000000e7,0x000000df,0x0003003e,0x000000dc,0x000000e7,0x0004003d, + 0x00000006,0x000000e9,0x000000c8,0x000500aa,0x00000041,0x000000ea,0x000000e9,0x0000009d, + 0x000300f7,0x000000ed,0x00000000,0x000400fa,0x000000ea,0x000000ec,0x000000ef,0x000200f8, + 0x000000ec,0x0003003e,0x000000eb,0x000000ee,0x000200f9,0x000000ed,0x000200f8,0x000000ef, + 0x0004003d,0x00000006,0x000000f1,0x000000c8,0x00050082,0x00000006,0x000000f2,0x000000f0, + 0x000000f1,0x0003003e,0x000000eb,0x000000f2,0x000200f9,0x000000ed,0x000200f8,0x000000ed, + 0x0004003d,0x00000006,0x000000f3,0x000000eb,0x0003003e,0x000000e8,0x000000f3,0x0004003d, + 0x00000006,0x000000f5,0x000000dc,0x0003003e,0x000000f4,0x000000f5,0x0004003d,0x00000006, + 0x000000f7,0x000000e8,0x0003003e,0x000000f6,0x000000f7,0x00060039,0x00000006,0x000000f8, + 0x00000019,0x000000f4,0x000000f6,0x0007000c,0x00000006,0x000000f9,0x00000001,0x00000026, + 0x000000f8,0x000000bd,0x0003003e,0x000000d5,0x000000f9,0x000200f9,0x000000db,0x000200f8, + 0x000000fa,0x0004003d,0x00000006,0x000000fc,0x000000c8,0x00050082,0x00000006,0x000000fd, + 0x000000fc,0x000000bd,0x0003003e,0x000000fb,0x000000fd,0x0004003d,0x00000006,0x00000101, + 0x000000ce,0x0003003e,0x00000100,0x00000101,0x0003003e,0x00000102,0x000000ff,0x00060039, + 0x00000006,0x00000103,0x00000019,0x00000100,0x00000102,0x0003003e,0x000000fe,0x00000103, + 0x0004003d,0x00000006,0x00000104,0x000000fe,0x000500aa,0x00000041,0x00000105,0x00000104, + 0x000000bd,0x000300f7,0x00000107,0x00000000,0x000400fa,0x00000105,0x00000106,0x00000107, + 0x000200f8,0x00000106,0x0003003e,0x000000fe,0x0000009d,0x0004003d,0x00000006,0x00000108, + 0x000000fb,0x00050080,0x00000006,0x00000109,0x00000108,0x00000008,0x0003003e,0x000000fb, + 0x00000109,0x000200f9,0x00000107,0x000200f8,0x00000107,0x0004003d,0x00000006,0x0000010a, + 0x000000fb,0x000500ac,0x00000041,0x0000010b,0x0000010a,0x000000ee,0x000400a8,0x00000041, + 0x0000010c,0x0000010b,0x000300f7,0x0000010e,0x00000000,0x000400fa,0x0000010c,0x0000010d, + 0x0000010e,0x000200f8,0x0000010d,0x0004003d,0x00000006,0x0000010f,0x000000fb,0x000500aa, + 0x00000041,0x00000110,0x0000010f,0x000000ee,0x0004003d,0x00000006,0x00000111,0x000000fe, + 0x000500ac,0x00000041,0x00000113,0x00000111,0x00000112,0x000500a7,0x00000041,0x00000114, + 0x00000110,0x00000113,0x000200f9,0x0000010e,0x000200f8,0x0000010e,0x000700f5,0x00000041, + 0x00000115,0x0000010b,0x00000107,0x00000114,0x0000010d,0x000300f7,0x00000118,0x00000000, + 0x000400fa,0x00000115,0x00000117,0x00000119,0x000200f8,0x00000117,0x0003003e,0x00000116, + 0x000000d6,0x000200f9,0x00000118,0x000200f8,0x00000119,0x0004003d,0x00000006,0x0000011a, + 0x000000fb,0x000500c4,0x00000006,0x0000011c,0x0000011a,0x0000011b,0x0004003d,0x00000006, + 0x0000011d,0x000000fe,0x000500c5,0x00000006,0x0000011e,0x0000011c,0x0000011d,0x0003003e, + 0x00000116,0x0000011e,0x000200f9,0x00000118,0x000200f8,0x00000118,0x0004003d,0x00000006, + 0x0000011f,0x00000116,0x0003003e,0x000000d5,0x0000011f,0x000200f9,0x000000db,0x000200f8, + 0x000000db,0x000200f9,0x000000d4,0x000200f8,0x000000d4,0x0004003d,0x00000006,0x00000120, + 0x000000c2,0x0004003d,0x00000006,0x00000121,0x000000d5,0x000500c5,0x00000006,0x00000122, + 0x00000120,0x00000121,0x000200fe,0x00000122,0x00010038,0x00050036,0x00000009,0x00000021, + 0x00000000,0x0000001f,0x00030037,0x00000015,0x00000020,0x000200f8,0x00000022,0x0004003b, + 0x000000a5,0x00000125,0x00000007,0x0004003b,0x00000015,0x00000129,0x00000007,0x0004003b, + 0x00000015,0x0000012d,0x00000007,0x0004003b,0x0000000a,0x00000134,0x00000007,0x0004003b, + 0x0000000a,0x00000151,0x00000007,0x0004003d,0x00000006,0x00000126,0x00000020,0x000500c7, + 0x00000006,0x00000127,0x00000126,0x000000bf,0x000500ab,0x00000041,0x00000128,0x00000127, + 0x0000009d,0x0003003e,0x00000125,0x00000128,0x0004003d,0x00000006,0x0000012a,0x00000020, + 0x000500c2,0x00000006,0x0000012b,0x0000012a,0x0000011b,0x000500c7,0x00000006,0x0000012c, + 0x0000012b,0x000000ee,0x0003003e,0x00000129,0x0000012c,0x0004003d,0x00000006,0x0000012e, + 0x00000020,0x000500c7,0x00000006,0x0000012f,0x0000012e,0x000000ff,0x0003003e,0x0000012d, + 0x0000012f,0x0004003d,0x00000006,0x00000130,0x00000129,0x000500aa,0x00000041,0x00000131, + 0x00000130,0x0000009d,0x000300f7,0x00000133,0x00000000,0x000400fa,0x00000131,0x00000132, + 0x00000139,0x000200f8,0x00000132,0x0004003d,0x00000006,0x00000135,0x0000012d,0x00040070, + 0x00000009,0x00000136,0x00000135,0x00050085,0x00000009,0x00000138,0x00000136,0x00000137, + 0x0003003e,0x00000134,0x00000138,0x000200f9,0x00000133,0x000200f8,0x00000139,0x0004003d, + 0x00000006,0x0000013a,0x00000129,0x000500aa,0x00000041,0x0000013b,0x0000013a,0x000000ee, + 0x0004003d,0x00000006,0x0000013c,0x0000012d,0x000500aa,0x00000041,0x0000013d,0x0000013c, + 0x000000ff,0x000500a7,0x00000041,0x0000013e,0x0000013b,0x0000013d,0x000300f7,0x00000140, + 0x00000000,0x000400fa,0x0000013e,0x0000013f,0x00000142,0x000200f8,0x0000013f,0x0003003e, + 0x00000134,0x00000141,0x000200f9,0x00000140,0x000200f8,0x00000142,0x0004003d,0x00000006, + 0x00000144,0x0000012d,0x00040070,0x00000009,0x00000145,0x00000144,0x00050085,0x00000009, + 0x00000147,0x00000145,0x00000146,0x00050081,0x00000009,0x00000148,0x00000143,0x00000147, + 0x0004003d,0x00000006,0x00000149,0x00000129,0x00050080,0x00000006,0x0000014b,0x00000149, + 0x0000014a,0x000500c4,0x00000006,0x0000014d,0x0000014b,0x0000014c,0x0004007c,0x00000009, + 0x0000014e,0x0000014d,0x00050085,0x00000009,0x0000014f,0x00000148,0x0000014e,0x0003003e, + 0x00000134,0x0000014f,0x000200f9,0x00000140,0x000200f8,0x00000140,0x000200f9,0x00000133, + 0x000200f8,0x00000133,0x0004003d,0x00000041,0x00000150,0x00000125,0x000300f7,0x00000153, + 0x00000000,0x000400fa,0x00000150,0x00000152,0x00000156,0x000200f8,0x00000152,0x0004003d, + 0x00000009,0x00000154,0x00000134,0x0004007f,0x00000009,0x00000155,0x00000154,0x0003003e, + 0x00000151,0x00000155,0x000200f9,0x00000153,0x000200f8,0x00000156,0x0004003d,0x00000009, + 0x00000157,0x00000134,0x0003003e,0x00000151,0x00000157,0x000200f9,0x00000153,0x000200f8, + 0x00000153,0x0004003d,0x00000009,0x00000158,0x00000151,0x000200fe,0x00000158,0x00010038, + 0x00050036,0x00000009,0x00000024,0x00000000,0x0000000b,0x00030037,0x0000000a,0x00000023, + 0x000200f8,0x00000025,0x0004003b,0x0000000a,0x0000015b,0x00000007,0x0004003b,0x0000000a, + 0x00000160,0x00000007,0x0004003b,0x0000000a,0x00000162,0x00000007,0x0004003b,0x0000000a, + 0x00000165,0x00000007,0x0004003b,0x0000000a,0x00000167,0x00000007,0x0004003b,0x0000000a, + 0x0000016c,0x00000007,0x0004003b,0x0000000a,0x0000016e,0x00000007,0x0004003b,0x0000000a, + 0x00000173,0x00000007,0x0004003b,0x0000000a,0x00000178,0x00000007,0x0004003d,0x00000009, + 0x0000015c,0x00000023,0x0008000c,0x00000009,0x0000015f,0x00000001,0x0000002b,0x0000015c, + 0x0000015d,0x0000015e,0x0003003e,0x00000160,0x0000015f,0x00050039,0x00000009,0x00000161, + 0x0000000d,0x00000160,0x0003003e,0x0000015b,0x00000161,0x0004003d,0x00000009,0x00000163, + 0x0000015b,0x0006000c,0x00000009,0x00000164,0x00000001,0x00000004,0x00000163,0x0003003e, + 0x00000165,0x00000164,0x00050039,0x00000009,0x00000166,0x0000000d,0x00000165,0x0003003e, + 0x00000162,0x00000166,0x0004003d,0x00000009,0x00000169,0x00000162,0x0008000c,0x00000009, + 0x0000016b,0x00000001,0x00000032,0x00000168,0x00000169,0x0000016a,0x0003003e,0x0000016c, + 0x0000016b,0x00050039,0x00000009,0x0000016d,0x0000000d,0x0000016c,0x0003003e,0x00000167, + 0x0000016d,0x0004003d,0x00000009,0x0000016f,0x0000015b,0x0004003d,0x00000009,0x00000170, + 0x00000167,0x0008000c,0x00000009,0x00000172,0x00000001,0x00000032,0x0000016f,0x00000170, + 0x00000171,0x0003003e,0x00000173,0x00000172,0x00050039,0x00000009,0x00000174,0x0000000d, + 0x00000173,0x0003003e,0x0000016e,0x00000174,0x0004003d,0x00000009,0x00000175,0x00000023, + 0x0004003d,0x00000009,0x00000176,0x0000016e,0x00050085,0x00000009,0x00000177,0x00000175, + 0x00000176,0x0003003e,0x00000178,0x00000177,0x00050039,0x00000009,0x00000179,0x0000000d, + 0x00000178,0x000200fe,0x00000179,0x00010038,0x00050036,0x00000009,0x00000027,0x00000000, + 0x0000001f,0x00030037,0x00000015,0x00000026,0x000200f8,0x00000028,0x0004003b,0x0000000a, + 0x00000180,0x00000007,0x0004003b,0x00000015,0x00000187,0x00000007,0x0004003d,0x00000006, + 0x0000017c,0x00000026,0x000500c7,0x00000006,0x0000017e,0x0000017c,0x0000017d,0x000500aa, + 0x00000041,0x0000017f,0x0000017e,0x0000017d,0x000300f7,0x00000182,0x00000000,0x000400fa, + 0x0000017f,0x00000181,0x00000183,0x000200f8,0x00000181,0x0003003e,0x00000180,0x00000141, + 0x000200f9,0x00000182,0x000200f8,0x00000183,0x0004003d,0x00000006,0x00000184,0x00000026, + 0x000500c7,0x00000006,0x00000186,0x00000184,0x00000185,0x0003003e,0x00000187,0x00000186, + 0x00050039,0x00000009,0x00000188,0x00000021,0x00000187,0x0003003e,0x00000180,0x00000188, + 0x000200f9,0x00000182,0x000200f8,0x00000182,0x0004003d,0x00000009,0x00000189,0x00000180, + 0x000200fe,0x00000189,0x00010038,0x00050036,0x00000006,0x0000002b,0x00000000,0x00000016, + 0x00030037,0x00000015,0x00000029,0x00030037,0x00000015,0x0000002a,0x000200f8,0x0000002c, + 0x0004003b,0x00000015,0x00000190,0x00000007,0x0004003b,0x00000015,0x00000198,0x00000007, + 0x0004003d,0x00000006,0x0000018c,0x00000029,0x0004003d,0x00000006,0x0000018d,0x0000002a, + 0x000500c2,0x00000006,0x0000018e,0x0000018c,0x0000018d,0x000500c7,0x00000006,0x0000018f, + 0x0000018e,0x00000185,0x0003003e,0x00000190,0x0000018f,0x00050039,0x00000009,0x00000191, + 0x00000021,0x00000190,0x00040073,0x0000000f,0x00000192,0x00000191,0x0004003d,0x00000006, + 0x00000193,0x00000029,0x0004003d,0x00000006,0x00000194,0x0000002a,0x00050080,0x00000006, + 0x00000195,0x00000194,0x000000bd,0x000500c2,0x00000006,0x00000196,0x00000193,0x00000195, + 0x000500c7,0x00000006,0x00000197,0x00000196,0x00000185,0x0003003e,0x00000198,0x00000197, + 0x00050039,0x00000009,0x00000199,0x00000021,0x00000198,0x00040073,0x0000000f,0x0000019a, + 0x00000199,0x00050050,0x0000019b,0x0000019c,0x00000192,0x0000019a,0x0004007c,0x00000006, + 0x0000019d,0x0000019c,0x000200fe,0x0000019d,0x00010038,0x00050036,0x0000002f,0x00000032, + 0x00000000,0x00000030,0x00030037,0x0000002e,0x00000031,0x000200f8,0x00000033,0x0004003b, + 0x00000015,0x000001a0,0x00000007,0x0004003b,0x00000015,0x000001a3,0x00000007,0x0004003b, + 0x00000015,0x000001a5,0x00000007,0x0004003b,0x00000015,0x000001a8,0x00000007,0x0004003b, + 0x00000015,0x000001aa,0x00000007,0x0004003b,0x00000015,0x000001ad,0x00000007,0x0004003b, + 0x00000015,0x000001af,0x00000007,0x0004003b,0x00000015,0x000001b2,0x00000007,0x00050041, + 0x00000015,0x000001a1,0x00000031,0x0000009d,0x0004003d,0x00000006,0x000001a2,0x000001a1, + 0x0003003e,0x000001a0,0x000001a2,0x0003003e,0x000001a3,0x0000009d,0x00060039,0x00000006, + 0x000001a4,0x0000002b,0x000001a0,0x000001a3,0x00050041,0x00000015,0x000001a6,0x00000031, + 0x0000009d,0x0004003d,0x00000006,0x000001a7,0x000001a6,0x0003003e,0x000001a5,0x000001a7, + 0x0003003e,0x000001a8,0x000000f0,0x00060039,0x00000006,0x000001a9,0x0000002b,0x000001a5, + 0x000001a8,0x00050041,0x00000015,0x000001ab,0x00000031,0x00000008,0x0004003d,0x00000006, + 0x000001ac,0x000001ab,0x0003003e,0x000001aa,0x000001ac,0x0003003e,0x000001ad,0x0000009d, + 0x00060039,0x00000006,0x000001ae,0x0000002b,0x000001aa,0x000001ad,0x00050041,0x00000015, + 0x000001b0,0x00000031,0x00000008,0x0004003d,0x00000006,0x000001b1,0x000001b0,0x0003003e, + 0x000001af,0x000001b1,0x0003003e,0x000001b2,0x000000f0,0x00060039,0x00000006,0x000001b3, + 0x0000002b,0x000001af,0x000001b2,0x00070050,0x0000002f,0x000001b4,0x000001a4,0x000001a9, + 0x000001ae,0x000001b3,0x000200fe,0x000001b4,0x00010038, +}; +inline constexpr uint32_t k_f16_k8_f32__gemm_f16[] = { + 0x07230203,0x00010600,0x0008000b,0x000002ef,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x0000000b,0x00020011,0x00000016,0x00020011,0x00001151,0x00020011, + 0x00001160,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e, + 0x00000000,0x00000001,0x000d000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x000000f5, + 0x00000106,0x00000116,0x00000124,0x00000275,0x00000281,0x000002bb,0x000002ce,0x00060010, + 0x00000004,0x00000011,0x00000080,0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc, + 0x00090004,0x455f4c47,0x635f5458,0x72746e6f,0x665f6c6f,0x5f776f6c,0x72747461,0x74756269, + 0x00007365,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x36315f72,0x5f746962,0x726f7473, + 0x00656761,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x62385f72,0x735f7469,0x61726f74, + 0x00006567,0x000b0004,0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469, + 0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45, + 0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47, + 0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669,0x00080004,0x4b5f4c47, + 0x635f5248,0x65706f6f,0x69746172,0x6d5f6576,0x69727461,0x00000078,0x00090004,0x4b5f4c47, + 0x6d5f5248,0x726f6d65,0x63735f79,0x5f65706f,0x616d6573,0x6369746e,0x00000073,0x00090004, + 0x4b5f4c47,0x735f5248,0x65646168,0x75735f72,0x6f726762,0x625f7075,0x63697361,0x00000000, + 0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000b,0x42363166,0x28737469, + 0x31363166,0x0000003b,0x00040005,0x0000000a,0x756c6176,0x00000065,0x00060005,0x00000010, + 0x46363166,0x426d6f72,0x28737469,0x003b3175,0x00040005,0x0000000f,0x73746962,0x00000000, + 0x00060005,0x00000015,0x66696873,0x656e5274,0x3b317528,0x003b3175,0x00040005,0x00000013, + 0x756c6176,0x00000065,0x00040005,0x00000014,0x66696873,0x00000074,0x00080005,0x00000019, + 0x336d3465,0x65646f43,0x6d6f7246,0x42363146,0x28737469,0x003b3175,0x00050005,0x00000018, + 0x666c6168,0x73746942,0x00000000,0x00070005,0x0000001f,0x6c627570,0x28687369,0x753b3175, + 0x31663b31,0x003b3136,0x00030005,0x0000001c,0x00776f72,0x00040005,0x0000001d,0x756c6f63, + 0x00006e6d,0x00040005,0x0000001e,0x756c6176,0x00000065,0x00060005,0x00000026,0x45363166, + 0x6e6f7078,0x28746e65,0x003b3166,0x00040005,0x00000025,0x756c6176,0x00000065,0x00090005, + 0x0000002a,0x6e756f72,0x69685364,0x69527466,0x45746867,0x286e6576,0x753b3175,0x00003b31, + 0x00040005,0x00000028,0x756c6176,0x00000065,0x00040005,0x00000029,0x66696873,0x00000074, + 0x00070005,0x00000032,0x65786966,0x466f5464,0x69283631,0x3b313436,0x003b3169,0x00050005, + 0x00000030,0x65786966,0x6d755364,0x00000000,0x00060005,0x00000031,0x616e6962,0x78457972, + 0x656e6f70,0x0000746e,0x00090005,0x0000003b,0x53363166,0x28706574,0x663b3166,0x36315b31, + 0x31663b5d,0x5d36315b,0x0000003b,0x00050005,0x00000038,0x75636361,0x616c756d,0x00726f74, + 0x00030005,0x00000039,0x00000061,0x00030005,0x0000003a,0x00000062,0x00050005,0x0000004a, + 0x746f7571,0x746e6569,0x00000000,0x00060005,0x0000004e,0x616d6572,0x65646e69,0x73614d72, + 0x0000006b,0x00050005,0x00000053,0x616d6572,0x65646e69,0x00000072,0x00040005,0x00000057, + 0x666c6168,0x00796177,0x00040005,0x00000073,0x614e7369,0x0000006e,0x00050005,0x0000008f, + 0x6167656e,0x65766974,0x00000000,0x00050005,0x00000095,0x6f707865,0x746e656e,0x00000000, + 0x00050005,0x0000009b,0x746e616d,0x61737369,0x00000000,0x00040005,0x000000a2,0x65646f63, + 0x00000000,0x00050005,0x000000a9,0x6e676973,0x63696669,0x00646e61,0x00040005,0x000000b5, + 0x66696873,0x00000074,0x00040005,0x000000c0,0x61726170,0x0000006d,0x00040005,0x000000c2, + 0x61726170,0x0000006d,0x00050005,0x000000c7,0x78453465,0x656e6f70,0x0000746e,0x00050005, + 0x000000ca,0x614d3465,0x7369746e,0x00006173,0x00040005,0x000000cc,0x61726170,0x0000006d, + 0x00040005,0x000000ce,0x61726170,0x0000006d,0x00040005,0x000000f1,0x65646e69,0x00000078, + 0x00040005,0x000000f3,0x68737550,0x00000000,0x00050006,0x000000f3,0x00000000,0x73776f72, + 0x00000000,0x00040006,0x000000f3,0x00000001,0x0000004e,0x00060006,0x000000f3,0x00000002, + 0x75706e69,0x72745374,0x00656469,0x00070006,0x000000f3,0x00000003,0x7074756f,0x74537475, + 0x65646972,0x00000000,0x00030005,0x000000f5,0x00006370,0x00040005,0x000000fd,0x47414c46, + 0x00000053,0x00050005,0x00000104,0x7074754f,0x6c467475,0x0074616f,0x00050006,0x00000104, + 0x00000000,0x3374756f,0x00000032,0x00030005,0x00000106,0x00000000,0x00050005,0x00000114, + 0x7074754f,0x34457475,0x00000000,0x00050006,0x00000114,0x00000000,0x3874756f,0x00000000, + 0x00030005,0x00000116,0x00000000,0x00040005,0x00000118,0x61726170,0x0000006d,0x00040005, + 0x0000011b,0x61726170,0x0000006d,0x00050005,0x00000122,0x7074754f,0x61487475,0x0000666c, + 0x00050006,0x00000122,0x00000000,0x3174756f,0x00000036,0x00030005,0x00000124,0x00000000, + 0x00040005,0x0000012f,0x61726170,0x0000006d,0x00040005,0x00000132,0x61726170,0x0000006d, + 0x00050005,0x0000014f,0x6e757274,0x65746163,0x00000064,0x00050005,0x00000153,0x616d6572, + 0x65646e69,0x00000072,0x00040005,0x00000159,0x666c6168,0x00796177,0x00050005,0x00000179, + 0x6167656e,0x65766974,0x00000000,0x00050005,0x0000017c,0x6e67616d,0x64757469,0x00000065, + 0x00030005,0x00000188,0x0062736d,0x00060005,0x0000018b,0x756c6176,0x70784565,0x6e656e6f, + 0x00000074,0x00050005,0x0000018f,0x666c6168,0x73746942,0x00000000,0x00050005,0x00000196, + 0x6e676973,0x63696669,0x00646e61,0x00040005,0x000001a0,0x61726170,0x0000006d,0x00040005, + 0x000001a2,0x61726170,0x0000006d,0x00060005,0x000001c6,0x6e627573,0x616d726f,0x6163536c, + 0x0000656c,0x00050005,0x000001ca,0x746e616d,0x61737369,0x00000000,0x00040005,0x000001d8, + 0x61726170,0x0000006d,0x00040005,0x000001da,0x61726170,0x0000006d,0x00040005,0x000001e1, + 0x61726170,0x0000006d,0x00060005,0x000001e7,0x6978616d,0x456d756d,0x6e6f7078,0x00746e65, + 0x00040005,0x000001ed,0x61726170,0x0000006d,0x00030005,0x000001f0,0x00000069,0x00040005, + 0x00000207,0x61726170,0x0000006d,0x00040005,0x0000020c,0x61726170,0x0000006d,0x00050005, + 0x00000214,0x65786966,0x6d755364,0x00000000,0x00050005,0x00000219,0x6f707865,0x746e656e, + 0x00000000,0x00040005,0x0000021a,0x61726170,0x0000006d,0x00040005,0x0000021d,0x6c616373, + 0x00006465,0x00030005,0x0000022d,0x00000069,0x00030005,0x00000242,0x00006165,0x00040005, + 0x00000244,0x61726170,0x0000006d,0x00030005,0x00000248,0x00006265,0x00040005,0x0000024a, + 0x61726170,0x0000006d,0x00040005,0x0000024e,0x646f7270,0x00746375,0x00040005,0x0000026c, + 0x61726170,0x0000006d,0x00040005,0x0000026e,0x61726170,0x0000006d,0x00040005,0x00000272, + 0x42776f72,0x00657361,0x00060005,0x00000275,0x575f6c67,0x476b726f,0x70756f72,0x00004449, + 0x00030005,0x00000280,0x00000069,0x00080005,0x00000281,0x4c5f6c67,0x6c61636f,0x6f766e49, + 0x69746163,0x44496e6f,0x00000000,0x00040005,0x0000028a,0x454c4954,0x00004e5f,0x00030005, + 0x0000028d,0x00776f72,0x00040005,0x00000292,0x756c6f63,0x00006e6d,0x00050005,0x000002a4, + 0x75636361,0x616c756d,0x00726f74,0x00030005,0x000002a5,0x0000626b,0x00030005,0x000002ac, + 0x0000004b,0x00030005,0x000002ae,0x0000006a,0x00030005,0x000002b6,0x00000078,0x00040005, + 0x000002b9,0x75706e49,0x00004174,0x00040006,0x000002b9,0x00000000,0x00000061,0x00030005, + 0x000002bb,0x00000000,0x00030005,0x000002c9,0x00000077,0x00040005,0x000002cc,0x75706e49, + 0x00004274,0x00040006,0x000002cc,0x00000000,0x00000062,0x00030005,0x000002ce,0x00000000, + 0x00040005,0x000002db,0x61726170,0x0000006d,0x00040005,0x000002dd,0x61726170,0x0000006d, + 0x00040005,0x000002df,0x61726170,0x0000006d,0x00040005,0x000002e6,0x61726170,0x0000006d, + 0x00040005,0x000002e8,0x61726170,0x0000006d,0x00040005,0x000002ea,0x61726170,0x0000006d, + 0x00030047,0x000000f3,0x00000002,0x00050048,0x000000f3,0x00000000,0x00000023,0x00000000, + 0x00050048,0x000000f3,0x00000001,0x00000023,0x00000004,0x00050048,0x000000f3,0x00000002, + 0x00000023,0x00000008,0x00050048,0x000000f3,0x00000003,0x00000023,0x0000000c,0x00040047, + 0x000000fd,0x00000001,0x00000002,0x00040047,0x00000103,0x00000006,0x00000004,0x00030047, + 0x00000104,0x00000002,0x00040048,0x00000104,0x00000000,0x00000019,0x00050048,0x00000104, + 0x00000000,0x00000023,0x00000000,0x00030047,0x00000106,0x00000019,0x00040047,0x00000106, + 0x00000021,0x00000007,0x00040047,0x00000106,0x00000022,0x00000000,0x00040047,0x00000113, + 0x00000006,0x00000001,0x00030047,0x00000114,0x00000002,0x00040048,0x00000114,0x00000000, + 0x00000019,0x00050048,0x00000114,0x00000000,0x00000023,0x00000000,0x00030047,0x00000116, + 0x00000019,0x00040047,0x00000116,0x00000021,0x00000005,0x00040047,0x00000116,0x00000022, + 0x00000000,0x00040047,0x00000121,0x00000006,0x00000002,0x00030047,0x00000122,0x00000002, + 0x00040048,0x00000122,0x00000000,0x00000019,0x00050048,0x00000122,0x00000000,0x00000023, + 0x00000000,0x00030047,0x00000124,0x00000019,0x00040047,0x00000124,0x00000021,0x00000002, + 0x00040047,0x00000124,0x00000022,0x00000000,0x00030047,0x00000220,0x0000002a,0x00030047, + 0x00000253,0x0000002a,0x00030047,0x00000259,0x0000002a,0x00030047,0x0000025b,0x0000002a, + 0x00040047,0x00000275,0x0000000b,0x0000001a,0x00040047,0x00000281,0x0000000b,0x0000001b, + 0x00040047,0x0000028a,0x00000001,0x00000001,0x00040047,0x000002ac,0x00000001,0x00000000, + 0x00040047,0x000002b8,0x00000006,0x00000002,0x00030047,0x000002b9,0x00000002,0x00040048, + 0x000002b9,0x00000000,0x00000018,0x00050048,0x000002b9,0x00000000,0x00000023,0x00000000, + 0x00030047,0x000002bb,0x00000018,0x00040047,0x000002bb,0x00000021,0x00000000,0x00040047, + 0x000002bb,0x00000022,0x00000000,0x00040047,0x000002cb,0x00000006,0x00000002,0x00030047, + 0x000002cc,0x00000002,0x00040048,0x000002cc,0x00000000,0x00000018,0x00050048,0x000002cc, + 0x00000000,0x00000023,0x00000000,0x00030047,0x000002ce,0x00000018,0x00040047,0x000002ce, + 0x00000021,0x00000001,0x00040047,0x000002ce,0x00000022,0x00000000,0x00020013,0x00000002, + 0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000010,0x00040020,0x00000007, + 0x00000007,0x00000006,0x00040015,0x00000008,0x00000020,0x00000000,0x00040021,0x00000009, + 0x00000008,0x00000007,0x00040020,0x0000000d,0x00000007,0x00000008,0x00040021,0x0000000e, + 0x00000006,0x0000000d,0x00050021,0x00000012,0x00000008,0x0000000d,0x0000000d,0x00040021, + 0x00000017,0x00000008,0x0000000d,0x00060021,0x0000001b,0x00000002,0x0000000d,0x0000000d, + 0x00000007,0x00030016,0x00000021,0x00000020,0x00040020,0x00000022,0x00000007,0x00000021, + 0x00040015,0x00000023,0x00000020,0x00000001,0x00040021,0x00000024,0x00000023,0x00000022, + 0x00040015,0x0000002c,0x00000040,0x00000001,0x00040020,0x0000002d,0x00000007,0x0000002c, + 0x00040020,0x0000002e,0x00000007,0x00000023,0x00050021,0x0000002f,0x00000021,0x0000002d, + 0x0000002e,0x0004002b,0x00000008,0x00000034,0x00000010,0x0004001c,0x00000035,0x00000021, + 0x00000034,0x00040020,0x00000036,0x00000007,0x00000035,0x00060021,0x00000037,0x00000021, + 0x00000022,0x00000036,0x00000036,0x00040015,0x0000003e,0x00000010,0x00000000,0x0004002b, + 0x00000008,0x00000044,0x0000ffff,0x0004002b,0x00000008,0x0000004f,0x00000001,0x00020014, + 0x0000005c,0x0004002b,0x00000008,0x0000006a,0x00000000,0x00040020,0x00000072,0x00000007, + 0x0000005c,0x0004002b,0x00000008,0x00000075,0x00007c00,0x0004002b,0x00000008,0x0000007b, + 0x000003ff,0x0004002b,0x00000008,0x00000084,0x00007fff,0x0004002b,0x00000008,0x0000008a, + 0x00000008,0x0004002b,0x00000008,0x0000008c,0x00000080,0x0004002b,0x00000008,0x00000091, + 0x00008000,0x0004002b,0x00000008,0x00000097,0x0000000a,0x0004002b,0x00000008,0x00000099, + 0x0000001f,0x0004002b,0x00000008,0x000000a3,0x0000007e,0x0004002b,0x00000008,0x000000b1, + 0x00000400,0x0004002b,0x00000008,0x000000bb,0x0000000f,0x0004002b,0x00000008,0x000000cb, + 0x00000007,0x0004002b,0x00000008,0x000000de,0x00000006,0x0004002b,0x00000008,0x000000e7, + 0x00000003,0x0006001e,0x000000f3,0x00000008,0x00000008,0x00000008,0x00000008,0x00040020, + 0x000000f4,0x00000009,0x000000f3,0x0004003b,0x000000f4,0x000000f5,0x00000009,0x0004002b, + 0x00000023,0x000000f6,0x00000003,0x00040020,0x000000f7,0x00000009,0x00000008,0x00040032, + 0x00000008,0x000000fd,0x00000000,0x0004002b,0x00000008,0x000000fe,0x00000100,0x00060034, + 0x00000008,0x000000ff,0x000000c7,0x000000fd,0x000000fe,0x00060034,0x0000005c,0x00000100, + 0x000000ab,0x000000ff,0x0000006a,0x0003001d,0x00000103,0x00000021,0x0003001e,0x00000104, + 0x00000103,0x00040020,0x00000105,0x0000000c,0x00000104,0x0004003b,0x00000105,0x00000106, + 0x0000000c,0x0004002b,0x00000023,0x00000107,0x00000000,0x00040020,0x0000010b,0x0000000c, + 0x00000021,0x00060034,0x00000008,0x0000010e,0x000000c7,0x000000fd,0x00000034,0x00060034, + 0x0000005c,0x0000010f,0x000000ab,0x0000010e,0x0000006a,0x00040015,0x00000112,0x00000008, + 0x00000000,0x0003001d,0x00000113,0x00000112,0x0003001e,0x00000114,0x00000113,0x00040020, + 0x00000115,0x0000000c,0x00000114,0x0004003b,0x00000115,0x00000116,0x0000000c,0x00040020, + 0x0000011e,0x0000000c,0x00000112,0x0003001d,0x00000121,0x00000006,0x0003001e,0x00000122, + 0x00000121,0x00040020,0x00000123,0x0000000c,0x00000122,0x0004003b,0x00000123,0x00000124, + 0x0000000c,0x00040020,0x00000127,0x0000000c,0x00000006,0x0004002b,0x00000008,0x00000129, + 0x00000020,0x00060034,0x00000008,0x0000012a,0x000000c7,0x000000fd,0x00000129,0x00060034, + 0x0000005c,0x0000012b,0x000000ab,0x0000012a,0x0000006a,0x0004002b,0x00000008,0x00000139, + 0x00000017,0x0004002b,0x00000008,0x0000013b,0x000000ff,0x0004002b,0x00000023,0x0000013e, + 0x0000007f,0x0004002b,0x00000023,0x00000140,0xfffffff2,0x0005002b,0x0000002c,0x00000173, + 0x00000000,0x00000000,0x0004002b,0x00000021,0x00000177,0x00000000,0x0004002b,0x00000023, + 0x00000198,0x0000000a,0x0004002b,0x00000008,0x000001ac,0x00000800,0x0004002b,0x00000023, + 0x000001b0,0x00000001,0x0004002b,0x00000023,0x000001b4,0x00000010,0x0004002b,0x00000023, + 0x000001bc,0x0000000f,0x0004002b,0x00000023,0x000001c8,0x00000018,0x0004002b,0x00000023, + 0x000001e8,0xffffffeb,0x0004002b,0x00000023,0x00000225,0x00000019,0x00040017,0x00000273, + 0x00000008,0x00000003,0x00040020,0x00000274,0x00000001,0x00000273,0x0004003b,0x00000274, + 0x00000275,0x00000001,0x00040020,0x00000276,0x00000001,0x00000008,0x0004002b,0x00000008, + 0x00000279,0x00000002,0x0004002b,0x00000008,0x0000027e,0x00000040,0x0004003b,0x00000274, + 0x00000281,0x00000001,0x00040032,0x00000008,0x0000028a,0x00000020,0x00060034,0x00000008, + 0x0000028b,0x00000084,0x0000027e,0x0000028a,0x00040032,0x00000008,0x000002ac,0x00000010, + 0x0003001d,0x000002b8,0x00000006,0x0003001e,0x000002b9,0x000002b8,0x00040020,0x000002ba, + 0x0000000c,0x000002b9,0x0004003b,0x000002ba,0x000002bb,0x0000000c,0x0004002b,0x00000023, + 0x000002bd,0x00000002,0x0003001d,0x000002cb,0x00000006,0x0003001e,0x000002cc,0x000002cb, + 0x00040020,0x000002cd,0x0000000c,0x000002cc,0x0004003b,0x000002cd,0x000002ce,0x0000000c, + 0x0006002c,0x00000273,0x000002ee,0x0000008c,0x0000004f,0x0000004f,0x00050036,0x00000002, + 0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x0000000d,0x00000272, + 0x00000007,0x0004003b,0x0000000d,0x00000280,0x00000007,0x0004003b,0x0000000d,0x0000028d, + 0x00000007,0x0004003b,0x0000000d,0x00000292,0x00000007,0x0004003b,0x00000022,0x000002a4, + 0x00000007,0x0004003b,0x0000000d,0x000002a5,0x00000007,0x0004003b,0x0000000d,0x000002ae, + 0x00000007,0x0004003b,0x00000036,0x000002b6,0x00000007,0x0004003b,0x00000036,0x000002c9, + 0x00000007,0x0004003b,0x00000022,0x000002db,0x00000007,0x0004003b,0x00000036,0x000002dd, + 0x00000007,0x0004003b,0x00000036,0x000002df,0x00000007,0x0004003b,0x0000000d,0x000002e6, + 0x00000007,0x0004003b,0x0000000d,0x000002e8,0x00000007,0x0004003b,0x00000007,0x000002ea, + 0x00000007,0x00050041,0x00000276,0x00000277,0x00000275,0x0000004f,0x0004003d,0x00000008, + 0x00000278,0x00000277,0x00050041,0x00000276,0x0000027a,0x00000275,0x00000279,0x0004003d, + 0x00000008,0x0000027b,0x0000027a,0x00050084,0x00000008,0x0000027c,0x0000027b,0x00000044, + 0x00050080,0x00000008,0x0000027d,0x00000278,0x0000027c,0x00050084,0x00000008,0x0000027f, + 0x0000027d,0x0000027e,0x0003003e,0x00000272,0x0000027f,0x00050041,0x00000276,0x00000282, + 0x00000281,0x0000006a,0x0004003d,0x00000008,0x00000283,0x00000282,0x0003003e,0x00000280, + 0x00000283,0x000200f9,0x00000284,0x000200f8,0x00000284,0x000400f6,0x00000286,0x00000287, + 0x00000000,0x000200f9,0x00000288,0x000200f8,0x00000288,0x0004003d,0x00000008,0x00000289, + 0x00000280,0x000500b0,0x0000005c,0x0000028c,0x00000289,0x0000028b,0x000400fa,0x0000028c, + 0x00000285,0x00000286,0x000200f8,0x00000285,0x0004003d,0x00000008,0x0000028e,0x00000272, + 0x0004003d,0x00000008,0x0000028f,0x00000280,0x00050086,0x00000008,0x00000290,0x0000028f, + 0x0000028a,0x00050080,0x00000008,0x00000291,0x0000028e,0x00000290,0x0003003e,0x0000028d, + 0x00000291,0x0004003d,0x00000008,0x00000293,0x00000280,0x00050089,0x00000008,0x00000294, + 0x00000293,0x0000028a,0x0003003e,0x00000292,0x00000294,0x0004003d,0x00000008,0x00000295, + 0x0000028d,0x00050041,0x000000f7,0x00000296,0x000000f5,0x00000107,0x0004003d,0x00000008, + 0x00000297,0x00000296,0x000500ae,0x0000005c,0x00000298,0x00000295,0x00000297,0x000400a8, + 0x0000005c,0x00000299,0x00000298,0x000300f7,0x0000029b,0x00000000,0x000400fa,0x00000299, + 0x0000029a,0x0000029b,0x000200f8,0x0000029a,0x0004003d,0x00000008,0x0000029c,0x00000292, + 0x00050041,0x000000f7,0x0000029d,0x000000f5,0x000001b0,0x0004003d,0x00000008,0x0000029e, + 0x0000029d,0x000500ae,0x0000005c,0x0000029f,0x0000029c,0x0000029e,0x000200f9,0x0000029b, + 0x000200f8,0x0000029b,0x000700f5,0x0000005c,0x000002a0,0x00000298,0x00000285,0x0000029f, + 0x0000029a,0x000300f7,0x000002a2,0x00000000,0x000400fa,0x000002a0,0x000002a1,0x000002a2, + 0x000200f8,0x000002a1,0x000200f9,0x00000287,0x000200f8,0x000002a2,0x0003003e,0x000002a4, + 0x00000177,0x0003003e,0x000002a5,0x0000006a,0x000200f9,0x000002a6,0x000200f8,0x000002a6, + 0x000400f6,0x000002a8,0x000002a9,0x00000000,0x000200f9,0x000002aa,0x000200f8,0x000002aa, + 0x0004003d,0x00000008,0x000002ab,0x000002a5,0x000500b0,0x0000005c,0x000002ad,0x000002ab, + 0x000002ac,0x000400fa,0x000002ad,0x000002a7,0x000002a8,0x000200f8,0x000002a7,0x0003003e, + 0x000002ae,0x0000006a,0x000200f9,0x000002af,0x000200f8,0x000002af,0x000400f6,0x000002b1, + 0x000002b2,0x00000000,0x000200f9,0x000002b3,0x000200f8,0x000002b3,0x0004003d,0x00000008, + 0x000002b4,0x000002ae,0x000500b0,0x0000005c,0x000002b5,0x000002b4,0x00000034,0x000400fa, + 0x000002b5,0x000002b0,0x000002b1,0x000200f8,0x000002b0,0x0004003d,0x00000008,0x000002b7, + 0x000002ae,0x0004003d,0x00000008,0x000002bc,0x0000028d,0x00050041,0x000000f7,0x000002be, + 0x000000f5,0x000002bd,0x0004003d,0x00000008,0x000002bf,0x000002be,0x00050084,0x00000008, + 0x000002c0,0x000002bc,0x000002bf,0x0004003d,0x00000008,0x000002c1,0x000002a5,0x00050080, + 0x00000008,0x000002c2,0x000002c0,0x000002c1,0x0004003d,0x00000008,0x000002c3,0x000002ae, + 0x00050080,0x00000008,0x000002c4,0x000002c2,0x000002c3,0x00060041,0x00000127,0x000002c5, + 0x000002bb,0x00000107,0x000002c4,0x0004003d,0x00000006,0x000002c6,0x000002c5,0x00040073, + 0x00000021,0x000002c7,0x000002c6,0x00050041,0x00000022,0x000002c8,0x000002b6,0x000002b7, + 0x0003003e,0x000002c8,0x000002c7,0x0004003d,0x00000008,0x000002ca,0x000002ae,0x0004003d, + 0x00000008,0x000002cf,0x000002a5,0x0004003d,0x00000008,0x000002d0,0x000002ae,0x00050080, + 0x00000008,0x000002d1,0x000002cf,0x000002d0,0x00050084,0x00000008,0x000002d2,0x000002d1, + 0x0000028a,0x0004003d,0x00000008,0x000002d3,0x00000292,0x00050080,0x00000008,0x000002d4, + 0x000002d2,0x000002d3,0x00060041,0x00000127,0x000002d5,0x000002ce,0x00000107,0x000002d4, + 0x0004003d,0x00000006,0x000002d6,0x000002d5,0x00040073,0x00000021,0x000002d7,0x000002d6, + 0x00050041,0x00000022,0x000002d8,0x000002c9,0x000002ca,0x0003003e,0x000002d8,0x000002d7, + 0x000200f9,0x000002b2,0x000200f8,0x000002b2,0x0004003d,0x00000008,0x000002d9,0x000002ae, + 0x00050080,0x00000008,0x000002da,0x000002d9,0x000001b0,0x0003003e,0x000002ae,0x000002da, + 0x000200f9,0x000002af,0x000200f8,0x000002b1,0x0004003d,0x00000021,0x000002dc,0x000002a4, + 0x0003003e,0x000002db,0x000002dc,0x0004003d,0x00000035,0x000002de,0x000002b6,0x0003003e, + 0x000002dd,0x000002de,0x0004003d,0x00000035,0x000002e0,0x000002c9,0x0003003e,0x000002df, + 0x000002e0,0x00070039,0x00000021,0x000002e1,0x0000003b,0x000002db,0x000002dd,0x000002df, + 0x0003003e,0x000002a4,0x000002e1,0x000200f9,0x000002a9,0x000200f8,0x000002a9,0x0004003d, + 0x00000008,0x000002e2,0x000002a5,0x00050080,0x00000008,0x000002e3,0x000002e2,0x00000034, + 0x0003003e,0x000002a5,0x000002e3,0x000200f9,0x000002a6,0x000200f8,0x000002a8,0x0004003d, + 0x00000021,0x000002e4,0x000002a4,0x00040073,0x00000006,0x000002e5,0x000002e4,0x0004003d, + 0x00000008,0x000002e7,0x0000028d,0x0003003e,0x000002e6,0x000002e7,0x0004003d,0x00000008, + 0x000002e9,0x00000292,0x0003003e,0x000002e8,0x000002e9,0x0003003e,0x000002ea,0x000002e5, + 0x00070039,0x00000002,0x000002eb,0x0000001f,0x000002e6,0x000002e8,0x000002ea,0x000200f9, + 0x00000287,0x000200f8,0x00000287,0x0004003d,0x00000008,0x000002ec,0x00000280,0x00050080, + 0x00000008,0x000002ed,0x000002ec,0x0000008c,0x0003003e,0x00000280,0x000002ed,0x000200f9, + 0x00000284,0x000200f8,0x00000286,0x000100fd,0x00010038,0x00050036,0x00000008,0x0000000b, + 0x00000000,0x00000009,0x00030037,0x00000007,0x0000000a,0x000200f8,0x0000000c,0x0004003d, + 0x00000006,0x0000003d,0x0000000a,0x0004007c,0x0000003e,0x0000003f,0x0000003d,0x00040071, + 0x00000008,0x00000040,0x0000003f,0x000200fe,0x00000040,0x00010038,0x00050036,0x00000006, + 0x00000010,0x00000000,0x0000000e,0x00030037,0x0000000d,0x0000000f,0x000200f8,0x00000011, + 0x0004003d,0x00000008,0x00000043,0x0000000f,0x000500c7,0x00000008,0x00000045,0x00000043, + 0x00000044,0x00040071,0x0000003e,0x00000046,0x00000045,0x0004007c,0x00000006,0x00000047, + 0x00000046,0x000200fe,0x00000047,0x00010038,0x00050036,0x00000008,0x00000015,0x00000000, + 0x00000012,0x00030037,0x0000000d,0x00000013,0x00030037,0x0000000d,0x00000014,0x000200f8, + 0x00000016,0x0004003b,0x0000000d,0x0000004a,0x00000007,0x0004003b,0x0000000d,0x0000004e, + 0x00000007,0x0004003b,0x0000000d,0x00000053,0x00000007,0x0004003b,0x0000000d,0x00000057, + 0x00000007,0x0004003d,0x00000008,0x0000004b,0x00000013,0x0004003d,0x00000008,0x0000004c, + 0x00000014,0x000500c2,0x00000008,0x0000004d,0x0000004b,0x0000004c,0x0003003e,0x0000004a, + 0x0000004d,0x0004003d,0x00000008,0x00000050,0x00000014,0x000500c4,0x00000008,0x00000051, + 0x0000004f,0x00000050,0x00050082,0x00000008,0x00000052,0x00000051,0x0000004f,0x0003003e, + 0x0000004e,0x00000052,0x0004003d,0x00000008,0x00000054,0x00000013,0x0004003d,0x00000008, + 0x00000055,0x0000004e,0x000500c7,0x00000008,0x00000056,0x00000054,0x00000055,0x0003003e, + 0x00000053,0x00000056,0x0004003d,0x00000008,0x00000058,0x00000014,0x00050082,0x00000008, + 0x00000059,0x00000058,0x0000004f,0x000500c4,0x00000008,0x0000005a,0x0000004f,0x00000059, + 0x0003003e,0x00000057,0x0000005a,0x0004003d,0x00000008,0x0000005b,0x0000004a,0x0004003d, + 0x00000008,0x0000005d,0x00000053,0x0004003d,0x00000008,0x0000005e,0x00000057,0x000500ac, + 0x0000005c,0x0000005f,0x0000005d,0x0000005e,0x000400a8,0x0000005c,0x00000060,0x0000005f, + 0x000300f7,0x00000062,0x00000000,0x000400fa,0x00000060,0x00000061,0x00000062,0x000200f8, + 0x00000061,0x0004003d,0x00000008,0x00000063,0x00000053,0x0004003d,0x00000008,0x00000064, + 0x00000057,0x000500aa,0x0000005c,0x00000065,0x00000063,0x00000064,0x000300f7,0x00000067, + 0x00000000,0x000400fa,0x00000065,0x00000066,0x00000067,0x000200f8,0x00000066,0x0004003d, + 0x00000008,0x00000068,0x0000004a,0x000500c7,0x00000008,0x00000069,0x00000068,0x0000004f, + 0x000500ab,0x0000005c,0x0000006b,0x00000069,0x0000006a,0x000200f9,0x00000067,0x000200f8, + 0x00000067,0x000700f5,0x0000005c,0x0000006c,0x00000065,0x00000061,0x0000006b,0x00000066, + 0x000200f9,0x00000062,0x000200f8,0x00000062,0x000700f5,0x0000005c,0x0000006d,0x0000005f, + 0x00000016,0x0000006c,0x00000067,0x000600a9,0x00000008,0x0000006e,0x0000006d,0x0000004f, + 0x0000006a,0x00050080,0x00000008,0x0000006f,0x0000005b,0x0000006e,0x000200fe,0x0000006f, + 0x00010038,0x00050036,0x00000008,0x00000019,0x00000000,0x00000017,0x00030037,0x0000000d, + 0x00000018,0x000200f8,0x0000001a,0x0004003b,0x00000072,0x00000073,0x00000007,0x0004003b, + 0x0000000d,0x0000008f,0x00000007,0x0004003b,0x0000000d,0x00000095,0x00000007,0x0004003b, + 0x0000000d,0x0000009b,0x00000007,0x0004003b,0x0000000d,0x000000a2,0x00000007,0x0004003b, + 0x0000000d,0x000000a9,0x00000007,0x0004003b,0x0000000d,0x000000ac,0x00000007,0x0004003b, + 0x0000000d,0x000000b5,0x00000007,0x0004003b,0x0000000d,0x000000b8,0x00000007,0x0004003b, + 0x0000000d,0x000000c0,0x00000007,0x0004003b,0x0000000d,0x000000c2,0x00000007,0x0004003b, + 0x0000000d,0x000000c7,0x00000007,0x0004003b,0x0000000d,0x000000ca,0x00000007,0x0004003b, + 0x0000000d,0x000000cc,0x00000007,0x0004003b,0x0000000d,0x000000ce,0x00000007,0x0004003b, + 0x0000000d,0x000000e2,0x00000007,0x0004003d,0x00000008,0x00000074,0x00000018,0x000500c7, + 0x00000008,0x00000076,0x00000074,0x00000075,0x000500aa,0x0000005c,0x00000077,0x00000076, + 0x00000075,0x000300f7,0x00000079,0x00000000,0x000400fa,0x00000077,0x00000078,0x00000079, + 0x000200f8,0x00000078,0x0004003d,0x00000008,0x0000007a,0x00000018,0x000500c7,0x00000008, + 0x0000007c,0x0000007a,0x0000007b,0x000500ab,0x0000005c,0x0000007d,0x0000007c,0x0000006a, + 0x000200f9,0x00000079,0x000200f8,0x00000079,0x000700f5,0x0000005c,0x0000007e,0x00000077, + 0x0000001a,0x0000007d,0x00000078,0x0003003e,0x00000073,0x0000007e,0x0004003d,0x0000005c, + 0x0000007f,0x00000073,0x000300f7,0x00000081,0x00000000,0x000400fa,0x0000007f,0x00000080, + 0x00000081,0x000200f8,0x00000080,0x000200fe,0x0000006a,0x000200f8,0x00000081,0x0004003d, + 0x00000008,0x00000083,0x00000018,0x000500c7,0x00000008,0x00000085,0x00000083,0x00000084, + 0x000500aa,0x0000005c,0x00000086,0x00000085,0x0000006a,0x000300f7,0x00000088,0x00000000, + 0x000400fa,0x00000086,0x00000087,0x00000088,0x000200f8,0x00000087,0x0004003d,0x00000008, + 0x00000089,0x00000018,0x000500c2,0x00000008,0x0000008b,0x00000089,0x0000008a,0x000500c7, + 0x00000008,0x0000008d,0x0000008b,0x0000008c,0x000200fe,0x0000008d,0x000200f8,0x00000088, + 0x0004003d,0x00000008,0x00000090,0x00000018,0x000500c7,0x00000008,0x00000092,0x00000090, + 0x00000091,0x000500ab,0x0000005c,0x00000093,0x00000092,0x0000006a,0x000600a9,0x00000008, + 0x00000094,0x00000093,0x0000008c,0x0000006a,0x0003003e,0x0000008f,0x00000094,0x0004003d, + 0x00000008,0x00000096,0x00000018,0x000500c2,0x00000008,0x00000098,0x00000096,0x00000097, + 0x000500c7,0x00000008,0x0000009a,0x00000098,0x00000099,0x0003003e,0x00000095,0x0000009a, + 0x0004003d,0x00000008,0x0000009c,0x00000018,0x000500c7,0x00000008,0x0000009d,0x0000009c, + 0x0000007b,0x0003003e,0x0000009b,0x0000009d,0x0004003d,0x00000008,0x0000009e,0x00000095, + 0x000500aa,0x0000005c,0x0000009f,0x0000009e,0x00000099,0x000300f7,0x000000a1,0x00000000, + 0x000400fa,0x0000009f,0x000000a0,0x000000a4,0x000200f8,0x000000a0,0x0003003e,0x000000a2, + 0x000000a3,0x000200f9,0x000000a1,0x000200f8,0x000000a4,0x0004003d,0x00000008,0x000000a5, + 0x00000095,0x000500b2,0x0000005c,0x000000a6,0x000000a5,0x0000008a,0x000300f7,0x000000a8, + 0x00000000,0x000400fa,0x000000a6,0x000000a7,0x000000c6,0x000200f8,0x000000a7,0x0004003d, + 0x00000008,0x000000aa,0x00000095,0x000500aa,0x0000005c,0x000000ab,0x000000aa,0x0000006a, + 0x000300f7,0x000000ae,0x00000000,0x000400fa,0x000000ab,0x000000ad,0x000000b0,0x000200f8, + 0x000000ad,0x0004003d,0x00000008,0x000000af,0x0000009b,0x0003003e,0x000000ac,0x000000af, + 0x000200f9,0x000000ae,0x000200f8,0x000000b0,0x0004003d,0x00000008,0x000000b2,0x0000009b, + 0x00050080,0x00000008,0x000000b3,0x000000b1,0x000000b2,0x0003003e,0x000000ac,0x000000b3, + 0x000200f9,0x000000ae,0x000200f8,0x000000ae,0x0004003d,0x00000008,0x000000b4,0x000000ac, + 0x0003003e,0x000000a9,0x000000b4,0x0004003d,0x00000008,0x000000b6,0x00000095,0x000500aa, + 0x0000005c,0x000000b7,0x000000b6,0x0000006a,0x000300f7,0x000000ba,0x00000000,0x000400fa, + 0x000000b7,0x000000b9,0x000000bc,0x000200f8,0x000000b9,0x0003003e,0x000000b8,0x000000bb, + 0x000200f9,0x000000ba,0x000200f8,0x000000bc,0x0004003d,0x00000008,0x000000bd,0x00000095, + 0x00050082,0x00000008,0x000000be,0x00000034,0x000000bd,0x0003003e,0x000000b8,0x000000be, + 0x000200f9,0x000000ba,0x000200f8,0x000000ba,0x0004003d,0x00000008,0x000000bf,0x000000b8, + 0x0003003e,0x000000b5,0x000000bf,0x0004003d,0x00000008,0x000000c1,0x000000a9,0x0003003e, + 0x000000c0,0x000000c1,0x0004003d,0x00000008,0x000000c3,0x000000b5,0x0003003e,0x000000c2, + 0x000000c3,0x00060039,0x00000008,0x000000c4,0x00000015,0x000000c0,0x000000c2,0x0007000c, + 0x00000008,0x000000c5,0x00000001,0x00000026,0x000000c4,0x0000008a,0x0003003e,0x000000a2, + 0x000000c5,0x000200f9,0x000000a8,0x000200f8,0x000000c6,0x0004003d,0x00000008,0x000000c8, + 0x00000095,0x00050082,0x00000008,0x000000c9,0x000000c8,0x0000008a,0x0003003e,0x000000c7, + 0x000000c9,0x0004003d,0x00000008,0x000000cd,0x0000009b,0x0003003e,0x000000cc,0x000000cd, + 0x0003003e,0x000000ce,0x000000cb,0x00060039,0x00000008,0x000000cf,0x00000015,0x000000cc, + 0x000000ce,0x0003003e,0x000000ca,0x000000cf,0x0004003d,0x00000008,0x000000d0,0x000000ca, + 0x000500aa,0x0000005c,0x000000d1,0x000000d0,0x0000008a,0x000300f7,0x000000d3,0x00000000, + 0x000400fa,0x000000d1,0x000000d2,0x000000d3,0x000200f8,0x000000d2,0x0003003e,0x000000ca, + 0x0000006a,0x0004003d,0x00000008,0x000000d4,0x000000c7,0x00050080,0x00000008,0x000000d5, + 0x000000d4,0x0000004f,0x0003003e,0x000000c7,0x000000d5,0x000200f9,0x000000d3,0x000200f8, + 0x000000d3,0x0004003d,0x00000008,0x000000d6,0x000000c7,0x000500ac,0x0000005c,0x000000d7, + 0x000000d6,0x000000bb,0x000400a8,0x0000005c,0x000000d8,0x000000d7,0x000300f7,0x000000da, + 0x00000000,0x000400fa,0x000000d8,0x000000d9,0x000000da,0x000200f8,0x000000d9,0x0004003d, + 0x00000008,0x000000db,0x000000c7,0x000500aa,0x0000005c,0x000000dc,0x000000db,0x000000bb, + 0x0004003d,0x00000008,0x000000dd,0x000000ca,0x000500ac,0x0000005c,0x000000df,0x000000dd, + 0x000000de,0x000500a7,0x0000005c,0x000000e0,0x000000dc,0x000000df,0x000200f9,0x000000da, + 0x000200f8,0x000000da,0x000700f5,0x0000005c,0x000000e1,0x000000d7,0x000000d3,0x000000e0, + 0x000000d9,0x000300f7,0x000000e4,0x00000000,0x000400fa,0x000000e1,0x000000e3,0x000000e5, + 0x000200f8,0x000000e3,0x0003003e,0x000000e2,0x000000a3,0x000200f9,0x000000e4,0x000200f8, + 0x000000e5,0x0004003d,0x00000008,0x000000e6,0x000000c7,0x000500c4,0x00000008,0x000000e8, + 0x000000e6,0x000000e7,0x0004003d,0x00000008,0x000000e9,0x000000ca,0x000500c5,0x00000008, + 0x000000ea,0x000000e8,0x000000e9,0x0003003e,0x000000e2,0x000000ea,0x000200f9,0x000000e4, + 0x000200f8,0x000000e4,0x0004003d,0x00000008,0x000000eb,0x000000e2,0x0003003e,0x000000a2, + 0x000000eb,0x000200f9,0x000000a8,0x000200f8,0x000000a8,0x000200f9,0x000000a1,0x000200f8, + 0x000000a1,0x0004003d,0x00000008,0x000000ec,0x0000008f,0x0004003d,0x00000008,0x000000ed, + 0x000000a2,0x000500c5,0x00000008,0x000000ee,0x000000ec,0x000000ed,0x000200fe,0x000000ee, + 0x00010038,0x00050036,0x00000002,0x0000001f,0x00000000,0x0000001b,0x00030037,0x0000000d, + 0x0000001c,0x00030037,0x0000000d,0x0000001d,0x00030037,0x00000007,0x0000001e,0x000200f8, + 0x00000020,0x0004003b,0x0000000d,0x000000f1,0x00000007,0x0004003b,0x00000007,0x00000118, + 0x00000007,0x0004003b,0x0000000d,0x0000011b,0x00000007,0x0004003b,0x00000007,0x0000012f, + 0x00000007,0x0004003b,0x0000000d,0x00000132,0x00000007,0x0004003d,0x00000008,0x000000f2, + 0x0000001c,0x00050041,0x000000f7,0x000000f8,0x000000f5,0x000000f6,0x0004003d,0x00000008, + 0x000000f9,0x000000f8,0x00050084,0x00000008,0x000000fa,0x000000f2,0x000000f9,0x0004003d, + 0x00000008,0x000000fb,0x0000001d,0x00050080,0x00000008,0x000000fc,0x000000fa,0x000000fb, + 0x0003003e,0x000000f1,0x000000fc,0x000300f7,0x00000102,0x00000000,0x000400fa,0x00000100, + 0x00000101,0x0000010d,0x000200f8,0x00000101,0x0004003d,0x00000008,0x00000108,0x000000f1, + 0x0004003d,0x00000006,0x00000109,0x0000001e,0x00040073,0x00000021,0x0000010a,0x00000109, + 0x00060041,0x0000010b,0x0000010c,0x00000106,0x00000107,0x00000108,0x0003003e,0x0000010c, + 0x0000010a,0x000200f9,0x00000102,0x000200f8,0x0000010d,0x000300f7,0x00000111,0x00000000, + 0x000400fa,0x0000010f,0x00000110,0x00000120,0x000200f8,0x00000110,0x0004003d,0x00000008, + 0x00000117,0x000000f1,0x0004003d,0x00000006,0x00000119,0x0000001e,0x0003003e,0x00000118, + 0x00000119,0x00050039,0x00000008,0x0000011a,0x0000000b,0x00000118,0x0003003e,0x0000011b, + 0x0000011a,0x00050039,0x00000008,0x0000011c,0x00000019,0x0000011b,0x00040071,0x00000112, + 0x0000011d,0x0000011c,0x00060041,0x0000011e,0x0000011f,0x00000116,0x00000107,0x00000117, + 0x0003003e,0x0000011f,0x0000011d,0x000200f9,0x00000111,0x000200f8,0x00000120,0x0004003d, + 0x00000008,0x00000125,0x000000f1,0x0004003d,0x00000006,0x00000126,0x0000001e,0x00060041, + 0x00000127,0x00000128,0x00000124,0x00000107,0x00000125,0x0003003e,0x00000128,0x00000126, + 0x000200f9,0x00000111,0x000200f8,0x00000111,0x000200f9,0x00000102,0x000200f8,0x00000102, + 0x000300f7,0x0000012d,0x00000000,0x000400fa,0x0000012b,0x0000012c,0x0000012d,0x000200f8, + 0x0000012c,0x0004003d,0x00000008,0x0000012e,0x000000f1,0x0004003d,0x00000006,0x00000130, + 0x0000001e,0x0003003e,0x0000012f,0x00000130,0x00050039,0x00000008,0x00000131,0x0000000b, + 0x0000012f,0x0003003e,0x00000132,0x00000131,0x00050039,0x00000008,0x00000133,0x00000019, + 0x00000132,0x00040071,0x00000112,0x00000134,0x00000133,0x00060041,0x0000011e,0x00000135, + 0x00000116,0x00000107,0x0000012e,0x0003003e,0x00000135,0x00000134,0x000200f9,0x0000012d, + 0x000200f8,0x0000012d,0x000100fd,0x00010038,0x00050036,0x00000023,0x00000026,0x00000000, + 0x00000024,0x00030037,0x00000022,0x00000025,0x000200f8,0x00000027,0x0004003d,0x00000021, + 0x00000136,0x00000025,0x0006000c,0x00000021,0x00000137,0x00000001,0x00000004,0x00000136, + 0x0004007c,0x00000008,0x00000138,0x00000137,0x000500c2,0x00000008,0x0000013a,0x00000138, + 0x00000139,0x000500c7,0x00000008,0x0000013c,0x0000013a,0x0000013b,0x0004007c,0x00000023, + 0x0000013d,0x0000013c,0x00050082,0x00000023,0x0000013f,0x0000013d,0x0000013e,0x0007000c, + 0x00000023,0x00000141,0x00000001,0x0000002a,0x0000013f,0x00000140,0x000200fe,0x00000141, + 0x00010038,0x00050036,0x00000008,0x0000002a,0x00000000,0x00000012,0x00030037,0x0000000d, + 0x00000028,0x00030037,0x0000000d,0x00000029,0x000200f8,0x0000002b,0x0004003b,0x0000000d, + 0x0000014f,0x00000007,0x0004003b,0x0000000d,0x00000153,0x00000007,0x0004003b,0x0000000d, + 0x00000159,0x00000007,0x0004003d,0x00000008,0x00000144,0x00000029,0x000500aa,0x0000005c, + 0x00000145,0x00000144,0x0000006a,0x000300f7,0x00000147,0x00000000,0x000400fa,0x00000145, + 0x00000146,0x00000147,0x000200f8,0x00000146,0x0004003d,0x00000008,0x00000148,0x00000028, + 0x000200fe,0x00000148,0x000200f8,0x00000147,0x0004003d,0x00000008,0x0000014a,0x00000029, + 0x000500ac,0x0000005c,0x0000014b,0x0000014a,0x00000099,0x000300f7,0x0000014d,0x00000000, + 0x000400fa,0x0000014b,0x0000014c,0x0000014d,0x000200f8,0x0000014c,0x000200fe,0x0000006a, + 0x000200f8,0x0000014d,0x0004003d,0x00000008,0x00000150,0x00000028,0x0004003d,0x00000008, + 0x00000151,0x00000029,0x000500c2,0x00000008,0x00000152,0x00000150,0x00000151,0x0003003e, + 0x0000014f,0x00000152,0x0004003d,0x00000008,0x00000154,0x00000028,0x0004003d,0x00000008, + 0x00000155,0x00000029,0x000500c4,0x00000008,0x00000156,0x0000004f,0x00000155,0x00050082, + 0x00000008,0x00000157,0x00000156,0x0000004f,0x000500c7,0x00000008,0x00000158,0x00000154, + 0x00000157,0x0003003e,0x00000153,0x00000158,0x0004003d,0x00000008,0x0000015a,0x00000029, + 0x00050082,0x00000008,0x0000015b,0x0000015a,0x0000004f,0x000500c4,0x00000008,0x0000015c, + 0x0000004f,0x0000015b,0x0003003e,0x00000159,0x0000015c,0x0004003d,0x00000008,0x0000015d, + 0x0000014f,0x0004003d,0x00000008,0x0000015e,0x00000153,0x0004003d,0x00000008,0x0000015f, + 0x00000159,0x000500ac,0x0000005c,0x00000160,0x0000015e,0x0000015f,0x000400a8,0x0000005c, + 0x00000161,0x00000160,0x000300f7,0x00000163,0x00000000,0x000400fa,0x00000161,0x00000162, + 0x00000163,0x000200f8,0x00000162,0x0004003d,0x00000008,0x00000164,0x00000153,0x0004003d, + 0x00000008,0x00000165,0x00000159,0x000500aa,0x0000005c,0x00000166,0x00000164,0x00000165, + 0x000300f7,0x00000168,0x00000000,0x000400fa,0x00000166,0x00000167,0x00000168,0x000200f8, + 0x00000167,0x0004003d,0x00000008,0x00000169,0x0000014f,0x000500c7,0x00000008,0x0000016a, + 0x00000169,0x0000004f,0x000500ab,0x0000005c,0x0000016b,0x0000016a,0x0000006a,0x000200f9, + 0x00000168,0x000200f8,0x00000168,0x000700f5,0x0000005c,0x0000016c,0x00000166,0x00000162, + 0x0000016b,0x00000167,0x000200f9,0x00000163,0x000200f8,0x00000163,0x000700f5,0x0000005c, + 0x0000016d,0x00000160,0x0000014d,0x0000016c,0x00000168,0x000600a9,0x00000008,0x0000016e, + 0x0000016d,0x0000004f,0x0000006a,0x00050080,0x00000008,0x0000016f,0x0000015d,0x0000016e, + 0x000200fe,0x0000016f,0x00010038,0x00050036,0x00000021,0x00000032,0x00000000,0x0000002f, + 0x00030037,0x0000002d,0x00000030,0x00030037,0x0000002e,0x00000031,0x000200f8,0x00000033, + 0x0004003b,0x00000072,0x00000179,0x00000007,0x0004003b,0x0000000d,0x0000017c,0x00000007, + 0x0004003b,0x0000002d,0x0000017e,0x00000007,0x0004003b,0x0000002e,0x00000188,0x00000007, + 0x0004003b,0x0000002e,0x0000018b,0x00000007,0x0004003b,0x0000000d,0x0000018f,0x00000007, + 0x0004003b,0x0000000d,0x00000196,0x00000007,0x0004003b,0x0000000d,0x0000019a,0x00000007, + 0x0004003b,0x0000000d,0x000001a0,0x00000007,0x0004003b,0x0000000d,0x000001a2,0x00000007, + 0x0004003b,0x0000002e,0x000001c6,0x00000007,0x0004003b,0x0000000d,0x000001ca,0x00000007, + 0x0004003b,0x0000000d,0x000001cd,0x00000007,0x0004003b,0x0000000d,0x000001d8,0x00000007, + 0x0004003b,0x0000000d,0x000001da,0x00000007,0x0004003b,0x0000000d,0x000001e1,0x00000007, + 0x0004003d,0x0000002c,0x00000172,0x00000030,0x000500aa,0x0000005c,0x00000174,0x00000172, + 0x00000173,0x000300f7,0x00000176,0x00000000,0x000400fa,0x00000174,0x00000175,0x00000176, + 0x000200f8,0x00000175,0x000200fe,0x00000177,0x000200f8,0x00000176,0x0004003d,0x0000002c, + 0x0000017a,0x00000030,0x000500b1,0x0000005c,0x0000017b,0x0000017a,0x00000173,0x0003003e, + 0x00000179,0x0000017b,0x0004003d,0x0000005c,0x0000017d,0x00000179,0x000300f7,0x00000180, + 0x00000000,0x000400fa,0x0000017d,0x0000017f,0x00000183,0x000200f8,0x0000017f,0x0004003d, + 0x0000002c,0x00000181,0x00000030,0x0004007e,0x0000002c,0x00000182,0x00000181,0x0003003e, + 0x0000017e,0x00000182,0x000200f9,0x00000180,0x000200f8,0x00000183,0x0004003d,0x0000002c, + 0x00000184,0x00000030,0x0003003e,0x0000017e,0x00000184,0x000200f9,0x00000180,0x000200f8, + 0x00000180,0x0004003d,0x0000002c,0x00000185,0x0000017e,0x00040072,0x00000023,0x00000186, + 0x00000185,0x0004007c,0x00000008,0x00000187,0x00000186,0x0003003e,0x0000017c,0x00000187, + 0x0004003d,0x00000008,0x00000189,0x0000017c,0x0006000c,0x00000023,0x0000018a,0x00000001, + 0x0000004b,0x00000189,0x0003003e,0x00000188,0x0000018a,0x0004003d,0x00000023,0x0000018c, + 0x00000188,0x0004003d,0x00000023,0x0000018d,0x00000031,0x00050080,0x00000023,0x0000018e, + 0x0000018c,0x0000018d,0x0003003e,0x0000018b,0x0000018e,0x0004003d,0x0000005c,0x00000190, + 0x00000179,0x000600a9,0x00000008,0x00000191,0x00000190,0x00000091,0x0000006a,0x0003003e, + 0x0000018f,0x00000191,0x0004003d,0x00000023,0x00000192,0x0000018b,0x000500af,0x0000005c, + 0x00000193,0x00000192,0x00000140,0x000300f7,0x00000195,0x00000000,0x000400fa,0x00000193, + 0x00000194,0x000001c5,0x000200f8,0x00000194,0x0004003d,0x00000023,0x00000197,0x00000188, + 0x000500ad,0x0000005c,0x00000199,0x00000197,0x00000198,0x000300f7,0x0000019c,0x00000000, + 0x000400fa,0x00000199,0x0000019b,0x000001a4,0x000200f8,0x0000019b,0x0004003d,0x00000023, + 0x0000019d,0x00000188,0x00050082,0x00000023,0x0000019e,0x0000019d,0x00000198,0x0004007c, + 0x00000008,0x0000019f,0x0000019e,0x0004003d,0x00000008,0x000001a1,0x0000017c,0x0003003e, + 0x000001a0,0x000001a1,0x0003003e,0x000001a2,0x0000019f,0x00060039,0x00000008,0x000001a3, + 0x0000002a,0x000001a0,0x000001a2,0x0003003e,0x0000019a,0x000001a3,0x000200f9,0x0000019c, + 0x000200f8,0x000001a4,0x0004003d,0x00000008,0x000001a5,0x0000017c,0x0004003d,0x00000023, + 0x000001a6,0x00000188,0x00050082,0x00000023,0x000001a7,0x00000198,0x000001a6,0x0004007c, + 0x00000008,0x000001a8,0x000001a7,0x000500c4,0x00000008,0x000001a9,0x000001a5,0x000001a8, + 0x0003003e,0x0000019a,0x000001a9,0x000200f9,0x0000019c,0x000200f8,0x0000019c,0x0004003d, + 0x00000008,0x000001aa,0x0000019a,0x0003003e,0x00000196,0x000001aa,0x0004003d,0x00000008, + 0x000001ab,0x00000196,0x000500ae,0x0000005c,0x000001ad,0x000001ab,0x000001ac,0x000300f7, + 0x000001af,0x00000000,0x000400fa,0x000001ad,0x000001ae,0x000001af,0x000200f8,0x000001ae, + 0x0003003e,0x00000196,0x000000b1,0x0004003d,0x00000023,0x000001b1,0x0000018b,0x00050080, + 0x00000023,0x000001b2,0x000001b1,0x000001b0,0x0003003e,0x0000018b,0x000001b2,0x000200f9, + 0x000001af,0x000200f8,0x000001af,0x0004003d,0x00000023,0x000001b3,0x0000018b,0x000500af, + 0x0000005c,0x000001b5,0x000001b3,0x000001b4,0x000300f7,0x000001b7,0x00000000,0x000400fa, + 0x000001b5,0x000001b6,0x000001ba,0x000200f8,0x000001b6,0x0004003d,0x00000008,0x000001b8, + 0x0000018f,0x000500c5,0x00000008,0x000001b9,0x000001b8,0x00000075,0x0003003e,0x0000018f, + 0x000001b9,0x000200f9,0x000001b7,0x000200f8,0x000001ba,0x0004003d,0x00000023,0x000001bb, + 0x0000018b,0x00050080,0x00000023,0x000001bd,0x000001bb,0x000001bc,0x0004007c,0x00000008, + 0x000001be,0x000001bd,0x000500c4,0x00000008,0x000001bf,0x000001be,0x00000097,0x0004003d, + 0x00000008,0x000001c0,0x00000196,0x00050082,0x00000008,0x000001c1,0x000001c0,0x000000b1, + 0x000500c5,0x00000008,0x000001c2,0x000001bf,0x000001c1,0x0004003d,0x00000008,0x000001c3, + 0x0000018f,0x000500c5,0x00000008,0x000001c4,0x000001c3,0x000001c2,0x0003003e,0x0000018f, + 0x000001c4,0x000200f9,0x000001b7,0x000200f8,0x000001b7,0x000200f9,0x00000195,0x000200f8, + 0x000001c5,0x0004003d,0x00000023,0x000001c7,0x00000031,0x00050080,0x00000023,0x000001c9, + 0x000001c7,0x000001c8,0x0003003e,0x000001c6,0x000001c9,0x0004003d,0x00000023,0x000001cb, + 0x000001c6,0x000500af,0x0000005c,0x000001cc,0x000001cb,0x00000107,0x000300f7,0x000001cf, + 0x00000000,0x000400fa,0x000001cc,0x000001ce,0x000001d4,0x000200f8,0x000001ce,0x0004003d, + 0x00000008,0x000001d0,0x0000017c,0x0004003d,0x00000023,0x000001d1,0x000001c6,0x0004007c, + 0x00000008,0x000001d2,0x000001d1,0x000500c4,0x00000008,0x000001d3,0x000001d0,0x000001d2, + 0x0003003e,0x000001cd,0x000001d3,0x000200f9,0x000001cf,0x000200f8,0x000001d4,0x0004003d, + 0x00000023,0x000001d5,0x000001c6,0x0004007e,0x00000023,0x000001d6,0x000001d5,0x0004007c, + 0x00000008,0x000001d7,0x000001d6,0x0004003d,0x00000008,0x000001d9,0x0000017c,0x0003003e, + 0x000001d8,0x000001d9,0x0003003e,0x000001da,0x000001d7,0x00060039,0x00000008,0x000001db, + 0x0000002a,0x000001d8,0x000001da,0x0003003e,0x000001cd,0x000001db,0x000200f9,0x000001cf, + 0x000200f8,0x000001cf,0x0004003d,0x00000008,0x000001dc,0x000001cd,0x0003003e,0x000001ca, + 0x000001dc,0x0004003d,0x00000008,0x000001dd,0x000001ca,0x0007000c,0x00000008,0x000001de, + 0x00000001,0x00000026,0x000001dd,0x000000b1,0x0004003d,0x00000008,0x000001df,0x0000018f, + 0x000500c5,0x00000008,0x000001e0,0x000001df,0x000001de,0x0003003e,0x0000018f,0x000001e0, + 0x000200f9,0x00000195,0x000200f8,0x00000195,0x0004003d,0x00000008,0x000001e2,0x0000018f, + 0x0003003e,0x000001e1,0x000001e2,0x00050039,0x00000006,0x000001e3,0x00000010,0x000001e1, + 0x00040073,0x00000021,0x000001e4,0x000001e3,0x000200fe,0x000001e4,0x00010038,0x00050036, + 0x00000021,0x0000003b,0x00000000,0x00000037,0x00030037,0x00000022,0x00000038,0x00030037, + 0x00000036,0x00000039,0x00030037,0x00000036,0x0000003a,0x000200f8,0x0000003c,0x0004003b, + 0x0000002e,0x000001e7,0x00000007,0x0004003b,0x00000022,0x000001ed,0x00000007,0x0004003b, + 0x0000000d,0x000001f0,0x00000007,0x0004003b,0x00000022,0x00000207,0x00000007,0x0004003b, + 0x00000022,0x0000020c,0x00000007,0x0004003b,0x0000002d,0x00000214,0x00000007,0x0004003b, + 0x0000002e,0x00000219,0x00000007,0x0004003b,0x00000022,0x0000021a,0x00000007,0x0004003b, + 0x00000022,0x0000021d,0x00000007,0x0004003b,0x0000000d,0x0000022d,0x00000007,0x0004003b, + 0x0000002e,0x00000242,0x00000007,0x0004003b,0x00000022,0x00000244,0x00000007,0x0004003b, + 0x0000002e,0x00000248,0x00000007,0x0004003b,0x00000022,0x0000024a,0x00000007,0x0004003b, + 0x00000022,0x0000024e,0x00000007,0x0004003b,0x0000002d,0x0000026c,0x00000007,0x0004003b, + 0x0000002e,0x0000026e,0x00000007,0x0003003e,0x000001e7,0x000001e8,0x0004003d,0x00000021, + 0x000001e9,0x00000038,0x000500b7,0x0000005c,0x000001ea,0x000001e9,0x00000177,0x000300f7, + 0x000001ec,0x00000000,0x000400fa,0x000001ea,0x000001eb,0x000001ec,0x000200f8,0x000001eb, + 0x0004003d,0x00000021,0x000001ee,0x00000038,0x0003003e,0x000001ed,0x000001ee,0x00050039, + 0x00000023,0x000001ef,0x00000026,0x000001ed,0x0003003e,0x000001e7,0x000001ef,0x000200f9, + 0x000001ec,0x000200f8,0x000001ec,0x0003003e,0x000001f0,0x0000006a,0x000200f9,0x000001f1, + 0x000200f8,0x000001f1,0x000400f6,0x000001f3,0x000001f4,0x00000000,0x000200f9,0x000001f5, + 0x000200f8,0x000001f5,0x0004003d,0x00000008,0x000001f6,0x000001f0,0x000500b0,0x0000005c, + 0x000001f7,0x000001f6,0x00000034,0x000400fa,0x000001f7,0x000001f2,0x000001f3,0x000200f8, + 0x000001f2,0x0004003d,0x00000008,0x000001f8,0x000001f0,0x00050041,0x00000022,0x000001f9, + 0x00000039,0x000001f8,0x0004003d,0x00000021,0x000001fa,0x000001f9,0x000500b7,0x0000005c, + 0x000001fb,0x000001fa,0x00000177,0x000300f7,0x000001fd,0x00000000,0x000400fa,0x000001fb, + 0x000001fc,0x000001fd,0x000200f8,0x000001fc,0x0004003d,0x00000008,0x000001fe,0x000001f0, + 0x00050041,0x00000022,0x000001ff,0x0000003a,0x000001fe,0x0004003d,0x00000021,0x00000200, + 0x000001ff,0x000500b7,0x0000005c,0x00000201,0x00000200,0x00000177,0x000200f9,0x000001fd, + 0x000200f8,0x000001fd,0x000700f5,0x0000005c,0x00000202,0x000001fb,0x000001f2,0x00000201, + 0x000001fc,0x000300f7,0x00000204,0x00000000,0x000400fa,0x00000202,0x00000203,0x00000204, + 0x000200f8,0x00000203,0x0004003d,0x00000023,0x00000205,0x000001e7,0x0004003d,0x00000008, + 0x00000206,0x000001f0,0x00050041,0x00000022,0x00000208,0x00000039,0x00000206,0x0004003d, + 0x00000021,0x00000209,0x00000208,0x0003003e,0x00000207,0x00000209,0x00050039,0x00000023, + 0x0000020a,0x00000026,0x00000207,0x0004003d,0x00000008,0x0000020b,0x000001f0,0x00050041, + 0x00000022,0x0000020d,0x0000003a,0x0000020b,0x0004003d,0x00000021,0x0000020e,0x0000020d, + 0x0003003e,0x0000020c,0x0000020e,0x00050039,0x00000023,0x0000020f,0x00000026,0x0000020c, + 0x00050080,0x00000023,0x00000210,0x0000020a,0x0000020f,0x0007000c,0x00000023,0x00000211, + 0x00000001,0x0000002a,0x00000205,0x00000210,0x0003003e,0x000001e7,0x00000211,0x000200f9, + 0x00000204,0x000200f8,0x00000204,0x000200f9,0x000001f4,0x000200f8,0x000001f4,0x0004003d, + 0x00000008,0x00000212,0x000001f0,0x00050080,0x00000008,0x00000213,0x00000212,0x000001b0, + 0x0003003e,0x000001f0,0x00000213,0x000200f9,0x000001f1,0x000200f8,0x000001f3,0x0003003e, + 0x00000214,0x00000173,0x0004003d,0x00000021,0x00000215,0x00000038,0x000500b7,0x0000005c, + 0x00000216,0x00000215,0x00000177,0x000300f7,0x00000218,0x00000000,0x000400fa,0x00000216, + 0x00000217,0x00000218,0x000200f8,0x00000217,0x0004003d,0x00000021,0x0000021b,0x00000038, + 0x0003003e,0x0000021a,0x0000021b,0x00050039,0x00000023,0x0000021c,0x00000026,0x0000021a, + 0x0003003e,0x00000219,0x0000021c,0x0004003d,0x00000021,0x0000021e,0x00000038,0x0004003d, + 0x00000023,0x0000021f,0x00000219,0x0004007e,0x00000023,0x00000220,0x0000021f,0x0007000c, + 0x00000021,0x00000221,0x00000001,0x00000035,0x0000021e,0x00000220,0x0004003d,0x00000023, + 0x00000222,0x00000219,0x0004003d,0x00000023,0x00000223,0x000001e7,0x00050082,0x00000023, + 0x00000224,0x00000222,0x00000223,0x00050080,0x00000023,0x00000226,0x00000224,0x00000225, + 0x0007000c,0x00000021,0x00000227,0x00000001,0x00000035,0x00000221,0x00000226,0x0003003e, + 0x0000021d,0x00000227,0x0004003d,0x00000021,0x00000228,0x0000021d,0x0006000c,0x00000021, + 0x00000229,0x00000001,0x00000003,0x00000228,0x0004006e,0x0000002c,0x0000022a,0x00000229, + 0x0004003d,0x0000002c,0x0000022b,0x00000214,0x00050080,0x0000002c,0x0000022c,0x0000022b, + 0x0000022a,0x0003003e,0x00000214,0x0000022c,0x000200f9,0x00000218,0x000200f8,0x00000218, + 0x0003003e,0x0000022d,0x0000006a,0x000200f9,0x0000022e,0x000200f8,0x0000022e,0x000400f6, + 0x00000230,0x00000231,0x00000000,0x000200f9,0x00000232,0x000200f8,0x00000232,0x0004003d, + 0x00000008,0x00000233,0x0000022d,0x000500b0,0x0000005c,0x00000234,0x00000233,0x00000034, + 0x000400fa,0x00000234,0x0000022f,0x00000230,0x000200f8,0x0000022f,0x0004003d,0x00000008, + 0x00000235,0x0000022d,0x00050041,0x00000022,0x00000236,0x00000039,0x00000235,0x0004003d, + 0x00000021,0x00000237,0x00000236,0x000500b7,0x0000005c,0x00000238,0x00000237,0x00000177, + 0x000300f7,0x0000023a,0x00000000,0x000400fa,0x00000238,0x00000239,0x0000023a,0x000200f8, + 0x00000239,0x0004003d,0x00000008,0x0000023b,0x0000022d,0x00050041,0x00000022,0x0000023c, + 0x0000003a,0x0000023b,0x0004003d,0x00000021,0x0000023d,0x0000023c,0x000500b7,0x0000005c, + 0x0000023e,0x0000023d,0x00000177,0x000200f9,0x0000023a,0x000200f8,0x0000023a,0x000700f5, + 0x0000005c,0x0000023f,0x00000238,0x0000022f,0x0000023e,0x00000239,0x000300f7,0x00000241, + 0x00000000,0x000400fa,0x0000023f,0x00000240,0x00000241,0x000200f8,0x00000240,0x0004003d, + 0x00000008,0x00000243,0x0000022d,0x00050041,0x00000022,0x00000245,0x00000039,0x00000243, + 0x0004003d,0x00000021,0x00000246,0x00000245,0x0003003e,0x00000244,0x00000246,0x00050039, + 0x00000023,0x00000247,0x00000026,0x00000244,0x0003003e,0x00000242,0x00000247,0x0004003d, + 0x00000008,0x00000249,0x0000022d,0x00050041,0x00000022,0x0000024b,0x0000003a,0x00000249, + 0x0004003d,0x00000021,0x0000024c,0x0000024b,0x0003003e,0x0000024a,0x0000024c,0x00050039, + 0x00000023,0x0000024d,0x00000026,0x0000024a,0x0003003e,0x00000248,0x0000024d,0x0004003d, + 0x00000008,0x0000024f,0x0000022d,0x00050041,0x00000022,0x00000250,0x00000039,0x0000024f, + 0x0004003d,0x00000021,0x00000251,0x00000250,0x0004003d,0x00000023,0x00000252,0x00000242, + 0x0004007e,0x00000023,0x00000253,0x00000252,0x0007000c,0x00000021,0x00000254,0x00000001, + 0x00000035,0x00000251,0x00000253,0x0004003d,0x00000008,0x00000255,0x0000022d,0x00050041, + 0x00000022,0x00000256,0x0000003a,0x00000255,0x0004003d,0x00000021,0x00000257,0x00000256, + 0x0004003d,0x00000023,0x00000258,0x00000248,0x0004007e,0x00000023,0x00000259,0x00000258, + 0x0007000c,0x00000021,0x0000025a,0x00000001,0x00000035,0x00000257,0x00000259,0x00050085, + 0x00000021,0x0000025b,0x00000254,0x0000025a,0x0003003e,0x0000024e,0x0000025b,0x0004003d, + 0x00000021,0x0000025c,0x0000024e,0x0004003d,0x00000023,0x0000025d,0x00000242,0x0004003d, + 0x00000023,0x0000025e,0x00000248,0x00050080,0x00000023,0x0000025f,0x0000025d,0x0000025e, + 0x0004003d,0x00000023,0x00000260,0x000001e7,0x00050082,0x00000023,0x00000261,0x0000025f, + 0x00000260,0x00050080,0x00000023,0x00000262,0x00000261,0x00000225,0x0007000c,0x00000021, + 0x00000263,0x00000001,0x00000035,0x0000025c,0x00000262,0x0006000c,0x00000021,0x00000264, + 0x00000001,0x00000003,0x00000263,0x0004006e,0x0000002c,0x00000265,0x00000264,0x0004003d, + 0x0000002c,0x00000266,0x00000214,0x00050080,0x0000002c,0x00000267,0x00000266,0x00000265, + 0x0003003e,0x00000214,0x00000267,0x000200f9,0x00000241,0x000200f8,0x00000241,0x000200f9, + 0x00000231,0x000200f8,0x00000231,0x0004003d,0x00000008,0x00000268,0x0000022d,0x00050080, + 0x00000008,0x00000269,0x00000268,0x000001b0,0x0003003e,0x0000022d,0x00000269,0x000200f9, + 0x0000022e,0x000200f8,0x00000230,0x0004003d,0x00000023,0x0000026a,0x000001e7,0x00050082, + 0x00000023,0x0000026b,0x0000026a,0x00000225,0x0004003d,0x0000002c,0x0000026d,0x00000214, + 0x0003003e,0x0000026c,0x0000026d,0x0003003e,0x0000026e,0x0000026b,0x00060039,0x00000021, + 0x0000026f,0x00000032,0x0000026c,0x0000026e,0x000200fe,0x0000026f,0x00010038, +}; +inline constexpr uint32_t k_f16_k8_f32__window_attend[] = { + 0x07230203,0x00010600,0x0008000b,0x00000545,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x0000003d,0x00020011,0x00001151,0x00020011, + 0x00001160,0x00020011,0x000014e1,0x00020011,0x00001786,0x0008000a,0x5f565053,0x5f52484b, + 0x706f6f63,0x74617265,0x5f657669,0x7274616d,0x00007869,0x0006000b,0x00000001,0x4c534c47, + 0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000003,0x0012000f,0x00000005, + 0x00000004,0x6e69616d,0x00000000,0x00000246,0x000002d9,0x000002de,0x000002eb,0x0000034d, + 0x00000362,0x000003ac,0x000003b2,0x000003bf,0x000003d6,0x00000437,0x000004e1,0x00000537, + 0x00060010,0x00000004,0x00000011,0x00000080,0x00000001,0x00000001,0x00030003,0x00000002, + 0x000001cc,0x00090004,0x455f4c47,0x635f5458,0x72746e6f,0x665f6c6f,0x5f776f6c,0x72747461, + 0x74756269,0x00007365,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x36315f72,0x5f746962, + 0x726f7473,0x00656761,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x62385f72,0x735f7469, + 0x61726f74,0x00006567,0x000b0004,0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70, + 0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f, + 0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004, + 0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669,0x00080004, + 0x4b5f4c47,0x635f5248,0x65706f6f,0x69746172,0x6d5f6576,0x69727461,0x00000078,0x00090004, + 0x4b5f4c47,0x6d5f5248,0x726f6d65,0x63735f79,0x5f65706f,0x616d6573,0x6369746e,0x00000073, + 0x00090004,0x4b5f4c47,0x735f5248,0x65646168,0x75735f72,0x6f726762,0x625f7075,0x63697361, + 0x00000000,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000a,0x6e756f72, + 0x36314664,0x3b316628,0x00000000,0x00040005,0x00000009,0x756c6176,0x00000065,0x00060005, + 0x00000011,0x42363166,0x28737469,0x31363166,0x0000003b,0x00040005,0x00000010,0x756c6176, + 0x00000065,0x00060005,0x00000016,0x46363166,0x426d6f72,0x28737469,0x003b3175,0x00040005, + 0x00000015,0x73746962,0x00000000,0x00060005,0x0000001b,0x66696873,0x656e5274,0x3b317528, + 0x003b3175,0x00040005,0x00000019,0x756c6176,0x00000065,0x00040005,0x0000001a,0x66696873, + 0x00000074,0x00080005,0x0000001f,0x336d3465,0x65646f43,0x6d6f7246,0x42363146,0x28737469, + 0x003b3175,0x00050005,0x0000001e,0x666c6168,0x73746942,0x00000000,0x00060005,0x00000023, + 0x336d3465,0x33466f54,0x31752832,0x0000003b,0x00040005,0x00000022,0x73746962,0x00000000, + 0x00060005,0x00000026,0x7246706f,0x6f436d6f,0x75286564,0x00003b31,0x00040005,0x00000025, + 0x65646f63,0x00000000,0x00080005,0x0000002a,0x666c6168,0x7064694d,0x746e696f,0x766f6241, + 0x31662865,0x003b3136,0x00030005,0x00000029,0x00000068,0x00080005,0x0000002d,0x666c6168, + 0x7064694d,0x746e696f,0x6f6c6542,0x31662877,0x003b3136,0x00030005,0x0000002c,0x00000068, + 0x00060005,0x00000031,0x666c6168,0x766f6241,0x31662865,0x003b3136,0x00030005,0x00000030, + 0x00000068,0x00060005,0x00000034,0x666c6168,0x6f6c6542,0x31662877,0x003b3136,0x00030005, + 0x00000033,0x00000068,0x00080005,0x00000037,0x69636572,0x636f7270,0x61486c61,0x6628666c, + 0x3b313631,0x00000000,0x00030005,0x00000036,0x00000078,0x00080005,0x0000003a,0x65766e69, + 0x54657372,0x64656c69,0x656b6f54,0x3175286e,0x0000003b,0x00040005,0x00000039,0x656b6f74, + 0x0000006e,0x00060005,0x0000003d,0x57707865,0x68676965,0x31662874,0x003b3136,0x00040005, + 0x0000003c,0x726f6373,0x00000065,0x00080005,0x00000043,0x74666f73,0x5078616d,0x28726961, + 0x753b3175,0x31753b31,0x0000003b,0x00030005,0x00000040,0x00776f72,0x00040005,0x00000041, + 0x72696170,0x00000000,0x00040005,0x00000042,0x69726170,0x00007974,0x00060005,0x00000046, + 0x74666f73,0x5378616d,0x75286d75,0x00003b31,0x00030005,0x00000045,0x00776f72,0x00040005, + 0x00000048,0x73746962,0x00000000,0x00040005,0x0000004b,0x6e676973,0x00000000,0x00050005, + 0x0000004f,0x6e67616d,0x64757469,0x00000065,0x00040005,0x00000069,0x6c616373,0x00006465, + 0x00030005,0x0000007a,0x0062736c,0x00040005,0x00000080,0x6e756f72,0x00646564,0x00050005, + 0x0000009b,0x746f7571,0x746e6569,0x00000000,0x00060005,0x0000009f,0x616d6572,0x65646e69, + 0x73614d72,0x0000006b,0x00050005,0x000000a3,0x616d6572,0x65646e69,0x00000072,0x00040005, + 0x000000a7,0x666c6168,0x00796177,0x00040005,0x000000c2,0x614e7369,0x0000006e,0x00050005, + 0x000000de,0x6167656e,0x65766974,0x00000000,0x00050005,0x000000e4,0x6f707865,0x746e656e, + 0x00000000,0x00050005,0x000000ea,0x746e616d,0x61737369,0x00000000,0x00040005,0x000000f1, + 0x65646f63,0x00000000,0x00050005,0x000000f8,0x6e676973,0x63696669,0x00646e61,0x00040005, + 0x00000104,0x66696873,0x00000074,0x00040005,0x00000110,0x61726170,0x0000006d,0x00040005, + 0x00000112,0x61726170,0x0000006d,0x00050005,0x00000117,0x78453465,0x656e6f70,0x0000746e, + 0x00050005,0x0000011a,0x614d3465,0x7369746e,0x00006173,0x00040005,0x0000011c,0x61726170, + 0x0000006d,0x00040005,0x0000011e,0x61726170,0x0000006d,0x00050005,0x00000141,0x6167656e, + 0x65766974,0x00000000,0x00050005,0x00000145,0x6f707865,0x746e656e,0x00000000,0x00050005, + 0x00000149,0x746e616d,0x61737369,0x00000000,0x00040005,0x00000150,0x756c6176,0x00000065, + 0x00040005,0x00000177,0x61726170,0x0000006d,0x00040005,0x0000017d,0x73746962,0x00000000, + 0x00040005,0x0000017e,0x61726170,0x0000006d,0x00040005,0x0000018e,0x61726170,0x0000006d, + 0x00040005,0x00000198,0x61726170,0x0000006d,0x00040005,0x0000019c,0x61726170,0x0000006d, + 0x00040005,0x000001a3,0x61726170,0x0000006d,0x00040005,0x000001a7,0x61726170,0x0000006d, + 0x00040005,0x000001ab,0x61726170,0x0000006d,0x00040005,0x000001af,0x61726170,0x0000006d, + 0x00030005,0x000001b3,0x00006678,0x00030005,0x000001c5,0x00000068,0x00040005,0x000001c8, + 0x61726170,0x0000006d,0x00030005,0x000001d7,0x00000069,0x00030005,0x000001e1,0x00007075, + 0x00040005,0x000001e2,0x61726170,0x0000006d,0x00040005,0x000001eb,0x61726170,0x0000006d, + 0x00040005,0x000001ee,0x6e776f64,0x00000000,0x00040005,0x000001ef,0x61726170,0x0000006d, + 0x00040005,0x000001fb,0x61726170,0x0000006d,0x00040005,0x00000204,0x656c6974,0x00000000, + 0x00040005,0x00000208,0x68746977,0x00006e69,0x00030005,0x0000020b,0x00000078,0x00030005, + 0x00000212,0x00000079,0x00050005,0x00000220,0x69666661,0x3233656e,0x00000000,0x00040005, + 0x00000226,0x69666661,0x0000656e,0x00040005,0x00000227,0x61726170,0x0000006d,0x00040005, + 0x0000022e,0x73746962,0x00000000,0x00040005,0x0000022f,0x61726170,0x0000006d,0x00060005, + 0x00000232,0x6f707865,0x746e656e,0x426c6169,0x00737469,0x00040005,0x00000238,0x61726170, + 0x0000006d,0x00030005,0x0000023d,0x0079656b,0x00050005,0x00000242,0x636f6c62,0x3130736b, + 0x00000000,0x00040005,0x00000246,0x726f6373,0x00007365,0x00050005,0x00000257,0x636f6c62, + 0x3332736b,0x00000000,0x00050005,0x00000268,0x636f6c62,0x3534736b,0x00000000,0x00050005, + 0x0000027a,0x636f6c62,0x3736736b,0x00000000,0x00030005,0x0000028c,0x00000061,0x00030005, + 0x00000290,0x00000062,0x00030005,0x00000299,0x00003065,0x00040005,0x0000029a,0x61726170, + 0x0000006d,0x00040005,0x0000029c,0x61726170,0x0000006d,0x00040005,0x0000029d,0x61726170, + 0x0000006d,0x00040005,0x0000029f,0x61726170,0x0000006d,0x00040005,0x000002a1,0x61726170, + 0x0000006d,0x00040005,0x000002a2,0x61726170,0x0000006d,0x00030005,0x000002a5,0x00003165, + 0x00040005,0x000002a7,0x61726170,0x0000006d,0x00040005,0x000002a9,0x61726170,0x0000006d, + 0x00040005,0x000002aa,0x61726170,0x0000006d,0x00040005,0x000002ad,0x6e657665,0x00000000, + 0x00040005,0x000002af,0x61726170,0x0000006d,0x00040005,0x000002b1,0x61726170,0x0000006d, + 0x00040005,0x000002b2,0x61726170,0x0000006d,0x00030005,0x000002b5,0x0000306f,0x00040005, + 0x000002b6,0x61726170,0x0000006d,0x00040005,0x000002b8,0x61726170,0x0000006d,0x00040005, + 0x000002b9,0x61726170,0x0000006d,0x00040005,0x000002bb,0x61726170,0x0000006d,0x00040005, + 0x000002bd,0x61726170,0x0000006d,0x00040005,0x000002be,0x61726170,0x0000006d,0x00030005, + 0x000002c1,0x0000316f,0x00040005,0x000002c3,0x61726170,0x0000006d,0x00040005,0x000002c5, + 0x61726170,0x0000006d,0x00040005,0x000002c6,0x61726170,0x0000006d,0x00030005,0x000002c9, + 0x0064646f,0x00040005,0x000002cb,0x61726170,0x0000006d,0x00040005,0x000002cd,0x61726170, + 0x0000006d,0x00040005,0x000002ce,0x61726170,0x0000006d,0x00040005,0x000002d6,0x65726874, + 0x00006461,0x00080005,0x000002d9,0x4c5f6c67,0x6c61636f,0x6f766e49,0x69746163,0x44496e6f, + 0x00000000,0x00040005,0x000002dd,0x64616568,0x00000000,0x00060005,0x000002de,0x575f6c67, + 0x476b726f,0x70756f72,0x00004449,0x00040005,0x000002e1,0x646e6977,0x0000776f,0x00040005, + 0x000002e9,0x68737550,0x00000000,0x00050006,0x000002e9,0x00000000,0x74646977,0x00000068, + 0x00050006,0x000002e9,0x00000001,0x67696568,0x00007468,0x00060006,0x000002e9,0x00000002, + 0x6e616863,0x736c656e,0x00000000,0x00050006,0x000002e9,0x00000003,0x64616568,0x00000073, + 0x00050006,0x000002e9,0x00000004,0x66696873,0x00005874,0x00050006,0x000002e9,0x00000005, + 0x66696873,0x00005974,0x00060006,0x000002e9,0x00000006,0x646e6977,0x5873776f,0x00000000, + 0x00060006,0x000002e9,0x00000007,0x646e6977,0x6f43776f,0x00746e75,0x00030005,0x000002eb, + 0x00006370,0x00040005,0x000002f4,0x646e6977,0x0058776f,0x00040005,0x00000301,0x646e6977, + 0x0059776f,0x00040005,0x0000030d,0x69727473,0x00336564,0x00050005,0x00000311,0x64616568, + 0x65736142,0x00000000,0x00030005,0x00000315,0x00000069,0x00040005,0x0000031f,0x656b6f74, + 0x0000006e,0x00050005,0x00000322,0x706d6f63,0x6e656e6f,0x00000074,0x00030005,0x00000325, + 0x00007871,0x00030005,0x0000032b,0x00007971,0x00030005,0x00000331,0x00000071,0x00050005, + 0x0000034b,0x6d726f4e,0x7a696c61,0x00006465,0x00040006,0x0000034b,0x00000000,0x00766b71, + 0x00030005,0x0000034d,0x00000000,0x00030005,0x00000362,0x00007371,0x00040005,0x00000364, + 0x61726170,0x0000006d,0x00050005,0x00000368,0x4c79656b,0x6c61636f,0x00000000,0x00040005, + 0x00000369,0x61726170,0x0000006d,0x00030005,0x0000036c,0x0000786b,0x00030005,0x00000372, + 0x0000796b,0x00030005,0x00000378,0x0000006b,0x00030005,0x00000379,0x00000076,0x00040005, + 0x00000391,0x4279656b,0x00657361,0x00030005,0x000003ac,0x0000736b,0x00040005,0x000003ae, + 0x61726170,0x0000006d,0x00030005,0x000003b2,0x00007376,0x00040005,0x000003b4,0x61726170, + 0x0000006d,0x00050005,0x000003bb,0x6f697270,0x73614272,0x00000065,0x00030005,0x000003be, + 0x00000074,0x00060005,0x000003bf,0x535f6c67,0x72676275,0x4970756f,0x00000044,0x00030005, + 0x000003c8,0x00003071,0x00030005,0x000003cc,0x0000306b,0x00030005,0x000003d2,0x00005f68, + 0x00040005,0x000003d4,0x6f697250,0x00000072,0x00050006,0x000003d4,0x00000000,0x6f697270, + 0x00000072,0x00030005,0x000003d6,0x00000000,0x00030005,0x000003e8,0x00000063,0x00030005, + 0x000003eb,0x00005f73,0x00030005,0x000003f5,0x00005f61,0x00030005,0x00000404,0x00005f62, + 0x00030005,0x00000417,0x00005f72,0x00040005,0x00000423,0x61726170,0x0000006d,0x00030005, + 0x0000042a,0x00005f68,0x00060005,0x00000437,0x4e5f6c67,0x75536d75,0x6f726762,0x00737075, + 0x00030005,0x0000043b,0x00000069,0x00040005,0x00000446,0x61726170,0x0000006d,0x00030005, + 0x00000451,0x00776f72,0x00040005,0x00000453,0x61746f74,0x0000006c,0x00040005,0x00000454, + 0x61726170,0x0000006d,0x00050005,0x00000457,0x69636572,0x636f7270,0x00006c61,0x00040005, + 0x00000458,0x61726170,0x0000006d,0x00030005,0x0000045b,0x0079656b,0x00050005,0x00000463, + 0x6d726f6e,0x7a696c61,0x00006465,0x00040005,0x0000046c,0x65646f63,0x00000000,0x00040005, + 0x0000046d,0x61726170,0x0000006d,0x00040005,0x00000470,0x61726170,0x0000006d,0x00040005, + 0x00000476,0x61726170,0x0000006d,0x00030005,0x0000047c,0x00000074,0x00030005,0x00000485, + 0x00003071,0x00030005,0x00000489,0x00003063,0x00030005,0x0000048d,0x00000063,0x00030005, + 0x0000048f,0x0000626b,0x00030005,0x00000497,0x00005f73,0x00030005,0x0000049f,0x00005f61, + 0x00030005,0x000004b0,0x00005f62,0x00030005,0x000004c8,0x00005f72,0x00040005,0x000004d4, + 0x61726170,0x0000006d,0x00030005,0x000004dd,0x00005f68,0x00040005,0x000004e1,0x7074756f, + 0x00737475,0x00030005,0x000004ee,0x00000069,0x00040005,0x000004f7,0x656b6f74,0x0000006e, + 0x00050005,0x000004fa,0x706d6f63,0x6e656e6f,0x00000074,0x00030005,0x000004fd,0x00007871, + 0x00030005,0x00000503,0x00007971,0x00040005,0x00000523,0x65646e69,0x00000078,0x00050005, + 0x00000535,0x65747441,0x6465646e,0x00000000,0x00060006,0x00000535,0x00000000,0x65747461, + 0x6465646e,0x00000000,0x00030005,0x00000537,0x00000000,0x00040005,0x0000053a,0x61726170, + 0x0000006d,0x00040005,0x0000053e,0x61726170,0x0000006d,0x00030047,0x000001c7,0x0000002a, + 0x00030047,0x000001e6,0x0000002a,0x00030047,0x000001f3,0x0000002a,0x00030047,0x00000256, + 0x0000002a,0x00030047,0x00000267,0x0000002a,0x00030047,0x00000279,0x0000002a,0x00030047, + 0x0000028b,0x0000002a,0x00030047,0x0000028f,0x0000002a,0x00030047,0x00000293,0x0000002a, + 0x00030047,0x000002a4,0x0000002a,0x00030047,0x000002ac,0x0000002a,0x00030047,0x000002b4, + 0x0000002a,0x00030047,0x000002c0,0x0000002a,0x00030047,0x000002c8,0x0000002a,0x00030047, + 0x000002d0,0x0000002a,0x00040047,0x000002d9,0x0000000b,0x0000001b,0x00040047,0x000002de, + 0x0000000b,0x0000001a,0x00030047,0x000002e9,0x00000002,0x00050048,0x000002e9,0x00000000, + 0x00000023,0x00000000,0x00050048,0x000002e9,0x00000001,0x00000023,0x00000004,0x00050048, + 0x000002e9,0x00000002,0x00000023,0x00000008,0x00050048,0x000002e9,0x00000003,0x00000023, + 0x0000000c,0x00050048,0x000002e9,0x00000004,0x00000023,0x00000010,0x00050048,0x000002e9, + 0x00000005,0x00000023,0x00000014,0x00050048,0x000002e9,0x00000006,0x00000023,0x00000018, + 0x00050048,0x000002e9,0x00000007,0x00000023,0x0000001c,0x00040047,0x0000034a,0x00000006, + 0x00000001,0x00030047,0x0000034b,0x00000002,0x00040048,0x0000034b,0x00000000,0x00000018, + 0x00050048,0x0000034b,0x00000000,0x00000023,0x00000000,0x00030047,0x0000034d,0x00000018, + 0x00040047,0x0000034d,0x00000021,0x00000000,0x00040047,0x0000034d,0x00000022,0x00000000, + 0x00040047,0x000003bf,0x0000000b,0x00000028,0x00040047,0x000003d3,0x00000006,0x00000002, + 0x00030047,0x000003d4,0x00000002,0x00040048,0x000003d4,0x00000000,0x00000018,0x00050048, + 0x000003d4,0x00000000,0x00000023,0x00000000,0x00030047,0x000003d6,0x00000018,0x00040047, + 0x000003d6,0x00000021,0x00000001,0x00040047,0x000003d6,0x00000022,0x00000000,0x00040047, + 0x00000437,0x0000000b,0x00000026,0x00030047,0x0000046b,0x0000002a,0x00040047,0x00000534, + 0x00000006,0x00000001,0x00030047,0x00000535,0x00000002,0x00040048,0x00000535,0x00000000, + 0x00000019,0x00050048,0x00000535,0x00000000,0x00000023,0x00000000,0x00030047,0x00000537, + 0x00000019,0x00040047,0x00000537,0x00000021,0x00000005,0x00040047,0x00000537,0x00000022, + 0x00000000,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006, + 0x00000020,0x00040020,0x00000007,0x00000007,0x00000006,0x00040021,0x00000008,0x00000006, + 0x00000007,0x00030016,0x0000000c,0x00000010,0x00040020,0x0000000d,0x00000007,0x0000000c, + 0x00040015,0x0000000e,0x00000020,0x00000000,0x00040021,0x0000000f,0x0000000e,0x0000000d, + 0x00040020,0x00000013,0x00000007,0x0000000e,0x00040021,0x00000014,0x0000000c,0x00000013, + 0x00050021,0x00000018,0x0000000e,0x00000013,0x00000013,0x00040021,0x0000001d,0x0000000e, + 0x00000013,0x00040021,0x00000021,0x00000006,0x00000013,0x00040021,0x00000028,0x00000006, + 0x0000000d,0x00040021,0x0000002f,0x0000000c,0x0000000d,0x00060021,0x0000003f,0x0000000c, + 0x00000013,0x00000013,0x00000013,0x0004002b,0x0000000e,0x0000004d,0x80000000,0x0004002b, + 0x0000000e,0x00000051,0x7fffffff,0x0004002b,0x0000000e,0x00000054,0x7f800000,0x00020014, + 0x00000055,0x0004002b,0x0000000e,0x0000005c,0x477ff000,0x0004002b,0x0000000e,0x00000065, + 0x38800000,0x0004002b,0x00000006,0x0000006c,0x4b800000,0x0004002b,0x00000006,0x00000073, + 0x33800000,0x0004002b,0x0000000e,0x0000007c,0x0000000d,0x0004002b,0x0000000e,0x0000007e, + 0x00000001,0x0004002b,0x0000000e,0x00000082,0x00000fff,0x0004002b,0x0000000e,0x00000086, + 0xffffe000,0x00040015,0x0000008f,0x00000010,0x00000000,0x0004002b,0x0000000e,0x00000095, + 0x0000ffff,0x0004002b,0x0000000e,0x000000b9,0x00000000,0x00040020,0x000000c1,0x00000007, + 0x00000055,0x0004002b,0x0000000e,0x000000c4,0x00007c00,0x0004002b,0x0000000e,0x000000ca, + 0x000003ff,0x0004002b,0x0000000e,0x000000d3,0x00007fff,0x0004002b,0x0000000e,0x000000d9, + 0x00000008,0x0004002b,0x0000000e,0x000000db,0x00000080,0x0004002b,0x0000000e,0x000000e0, + 0x00008000,0x0004002b,0x0000000e,0x000000e6,0x0000000a,0x0004002b,0x0000000e,0x000000e8, + 0x0000001f,0x0004002b,0x0000000e,0x000000f2,0x0000007e,0x0004002b,0x0000000e,0x00000100, + 0x00000400,0x0004002b,0x0000000e,0x0000010a,0x0000000f,0x0004002b,0x0000000e,0x0000010c, + 0x00000010,0x0004002b,0x0000000e,0x0000011b,0x00000007,0x0004002b,0x0000000e,0x0000012e, + 0x00000006,0x0004002b,0x0000000e,0x00000137,0x00000003,0x0004002b,0x00000006,0x00000153, + 0x3b000000,0x0004002b,0x00000006,0x0000015d,0x00000000,0x0004002b,0x00000006,0x0000015f, + 0x3f800000,0x0004002b,0x00000006,0x00000162,0x3e000000,0x0004002b,0x0000000e,0x00000166, + 0x00000078,0x0004002b,0x0000000e,0x00000168,0x00000017,0x0004002b,0x0000000e,0x00000182, + 0x00007bff,0x0004002b,0x00000006,0x00000187,0x477ff000,0x0004002b,0x00000006,0x00000189, + 0x3f000000,0x0004002b,0x0000000c,0x000001ce,0x00000000,0x00040015,0x000001d5,0x00000020, + 0x00000001,0x00040020,0x000001d6,0x00000007,0x000001d5,0x0004002b,0x000001d5,0x000001d8, + 0x00000000,0x0004002b,0x000001d5,0x000001df,0x00000002,0x0004002b,0x000001d5,0x000001ff, + 0x00000001,0x0004002b,0x0000000e,0x00000206,0x00000004,0x0004002b,0x0000000e,0x00000217, + 0x00000002,0x0004002b,0x00000006,0x00000223,0x3d380000,0x0004002b,0x00000006,0x00000224, + 0x3fa68000,0x0004002b,0x0000000c,0x0000022b,0x00003c20,0x0004002b,0x0000000c,0x0000022c, + 0x00003e47,0x0004002b,0x0000000e,0x00000234,0x00000005,0x0004002b,0x0000000e,0x00000243, + 0x00001000,0x0004001c,0x00000244,0x0000000c,0x00000243,0x00040020,0x00000245,0x00000004, + 0x00000244,0x0004003b,0x00000245,0x00000246,0x00000004,0x0004002b,0x0000000e,0x00000248, + 0x00000040,0x00040020,0x0000024c,0x00000004,0x0000000c,0x0004002b,0x0000000e,0x00000263, + 0x00000018,0x0004002b,0x0000000e,0x0000026d,0x00000020,0x0004002b,0x0000000e,0x00000275, + 0x00000028,0x0004002b,0x0000000e,0x0000027f,0x00000030,0x0004002b,0x0000000e,0x00000287, + 0x00000038,0x00040017,0x000002d7,0x0000000e,0x00000003,0x00040020,0x000002d8,0x00000001, + 0x000002d7,0x0004003b,0x000002d8,0x000002d9,0x00000001,0x00040020,0x000002da,0x00000001, + 0x0000000e,0x0004003b,0x000002d8,0x000002de,0x00000001,0x000a001e,0x000002e9,0x0000000e, + 0x0000000e,0x0000000e,0x0000000e,0x0000000e,0x0000000e,0x0000000e,0x0000000e,0x00040020, + 0x000002ea,0x00000009,0x000002e9,0x0004003b,0x000002ea,0x000002eb,0x00000009,0x0004002b, + 0x000001d5,0x000002ec,0x00000007,0x00040020,0x000002ed,0x00000009,0x0000000e,0x0004002b, + 0x000001d5,0x000002f6,0x00000006,0x0004002b,0x000001d5,0x000002fc,0x00000004,0x0004002b, + 0x000001d5,0x00000308,0x00000005,0x0004002b,0x0000000e,0x00000313,0x00000060,0x0004002b, + 0x0000000e,0x0000031d,0x00000800,0x00040015,0x00000349,0x00000008,0x00000000,0x0003001d, + 0x0000034a,0x00000349,0x0003001e,0x0000034b,0x0000034a,0x00040020,0x0000034c,0x0000000c, + 0x0000034b,0x0004003b,0x0000034c,0x0000034d,0x0000000c,0x00040020,0x0000035c,0x0000000c, + 0x00000349,0x0004001c,0x00000360,0x0000000c,0x0000031d,0x00040020,0x00000361,0x00000004, + 0x00000360,0x0004003b,0x00000361,0x00000362,0x00000004,0x0004003b,0x00000361,0x000003ac, + 0x00000004,0x0004003b,0x00000361,0x000003b2,0x00000004,0x0004002b,0x0000000e,0x000003ba, + 0x00000108,0x0004003b,0x000002da,0x000003bf,0x00000001,0x00071168,0x000003d0,0x0000000c, + 0x00000137,0x000000d9,0x000000d9,0x00000217,0x00040020,0x000003d1,0x00000007,0x000003d0, + 0x0003001d,0x000003d3,0x0000000c,0x0003001e,0x000003d4,0x000003d3,0x00040020,0x000003d5, + 0x0000000c,0x000003d4,0x0004003b,0x000003d5,0x000003d6,0x0000000c,0x00040020,0x000003dd, + 0x0000000c,0x0000000c,0x00071168,0x000003e6,0x00000006,0x00000137,0x000000d9,0x000000d9, + 0x00000217,0x00040020,0x000003e7,0x00000007,0x000003e6,0x00071168,0x000003f3,0x0000000c, + 0x00000137,0x000000d9,0x000000d9,0x000000b9,0x00040020,0x000003f4,0x00000007,0x000003f3, + 0x00071168,0x00000402,0x0000000c,0x00000137,0x000000d9,0x000000d9,0x0000007e,0x00040020, + 0x00000403,0x00000007,0x00000402,0x0004003b,0x000002da,0x00000437,0x00000001,0x0004002c, + 0x000003e6,0x0000048e,0x0000015d,0x0004002b,0x0000000e,0x000004b6,0x00000100,0x0004003b, + 0x00000361,0x000004e1,0x00000004,0x0003001d,0x00000534,0x00000349,0x0003001e,0x00000535, + 0x00000534,0x00040020,0x00000536,0x0000000c,0x00000535,0x0004003b,0x00000536,0x00000537, + 0x0000000c,0x0006002c,0x000002d7,0x00000544,0x000000db,0x0000007e,0x0000007e,0x00050036, + 0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000013, + 0x000002d6,0x00000007,0x0004003b,0x00000013,0x000002dd,0x00000007,0x0004003b,0x00000013, + 0x000002e1,0x00000007,0x0004003b,0x000001d6,0x000002f4,0x00000007,0x0004003b,0x000001d6, + 0x00000301,0x00000007,0x0004003b,0x00000013,0x0000030d,0x00000007,0x0004003b,0x00000013, + 0x00000311,0x00000007,0x0004003b,0x00000013,0x00000315,0x00000007,0x0004003b,0x00000013, + 0x0000031f,0x00000007,0x0004003b,0x00000013,0x00000322,0x00000007,0x0004003b,0x000001d6, + 0x00000325,0x00000007,0x0004003b,0x000001d6,0x0000032b,0x00000007,0x0004003b,0x00000013, + 0x00000331,0x00000007,0x0004003b,0x00000013,0x00000364,0x00000007,0x0004003b,0x00000013, + 0x00000368,0x00000007,0x0004003b,0x00000013,0x00000369,0x00000007,0x0004003b,0x000001d6, + 0x0000036c,0x00000007,0x0004003b,0x000001d6,0x00000372,0x00000007,0x0004003b,0x00000013, + 0x00000378,0x00000007,0x0004003b,0x00000013,0x00000379,0x00000007,0x0004003b,0x00000013, + 0x00000391,0x00000007,0x0004003b,0x00000013,0x000003ae,0x00000007,0x0004003b,0x00000013, + 0x000003b4,0x00000007,0x0004003b,0x00000013,0x000003bb,0x00000007,0x0004003b,0x00000013, + 0x000003be,0x00000007,0x0004003b,0x00000013,0x000003c8,0x00000007,0x0004003b,0x00000013, + 0x000003cc,0x00000007,0x0004003b,0x000003d1,0x000003d2,0x00000007,0x0004003b,0x000003e7, + 0x000003e8,0x00000007,0x0004003b,0x00000013,0x000003eb,0x00000007,0x0004003b,0x000003f4, + 0x000003f5,0x00000007,0x0004003b,0x00000403,0x00000404,0x00000007,0x0004003b,0x000001d6, + 0x00000417,0x00000007,0x0004003b,0x00000007,0x00000423,0x00000007,0x0004003b,0x000003d1, + 0x0000042a,0x00000007,0x0004003b,0x00000013,0x0000043b,0x00000007,0x0004003b,0x0000000d, + 0x00000446,0x00000007,0x0004003b,0x00000013,0x00000451,0x00000007,0x0004003b,0x0000000d, + 0x00000453,0x00000007,0x0004003b,0x00000013,0x00000454,0x00000007,0x0004003b,0x0000000d, + 0x00000457,0x00000007,0x0004003b,0x0000000d,0x00000458,0x00000007,0x0004003b,0x00000013, + 0x0000045b,0x00000007,0x0004003b,0x0000000d,0x00000463,0x00000007,0x0004003b,0x00000013, + 0x0000046c,0x00000007,0x0004003b,0x0000000d,0x0000046d,0x00000007,0x0004003b,0x00000013, + 0x00000470,0x00000007,0x0004003b,0x00000013,0x00000476,0x00000007,0x0004003b,0x00000013, + 0x0000047c,0x00000007,0x0004003b,0x00000013,0x00000485,0x00000007,0x0004003b,0x00000013, + 0x00000489,0x00000007,0x0004003b,0x000003e7,0x0000048d,0x00000007,0x0004003b,0x00000013, + 0x0000048f,0x00000007,0x0004003b,0x00000013,0x00000497,0x00000007,0x0004003b,0x000003f4, + 0x0000049f,0x00000007,0x0004003b,0x00000403,0x000004b0,0x00000007,0x0004003b,0x000001d6, + 0x000004c8,0x00000007,0x0004003b,0x00000007,0x000004d4,0x00000007,0x0004003b,0x000003d1, + 0x000004dd,0x00000007,0x0004003b,0x00000013,0x000004ee,0x00000007,0x0004003b,0x00000013, + 0x000004f7,0x00000007,0x0004003b,0x00000013,0x000004fa,0x00000007,0x0004003b,0x000001d6, + 0x000004fd,0x00000007,0x0004003b,0x000001d6,0x00000503,0x00000007,0x0004003b,0x00000013, + 0x00000523,0x00000007,0x0004003b,0x0000000d,0x0000053a,0x00000007,0x0004003b,0x00000013, + 0x0000053e,0x00000007,0x00050041,0x000002da,0x000002db,0x000002d9,0x000000b9,0x0004003d, + 0x0000000e,0x000002dc,0x000002db,0x0003003e,0x000002d6,0x000002dc,0x00050041,0x000002da, + 0x000002df,0x000002de,0x000000b9,0x0004003d,0x0000000e,0x000002e0,0x000002df,0x0003003e, + 0x000002dd,0x000002e0,0x00050041,0x000002da,0x000002e2,0x000002de,0x0000007e,0x0004003d, + 0x0000000e,0x000002e3,0x000002e2,0x00050041,0x000002da,0x000002e4,0x000002de,0x00000217, + 0x0004003d,0x0000000e,0x000002e5,0x000002e4,0x00050084,0x0000000e,0x000002e6,0x000002e5, + 0x00000095,0x00050080,0x0000000e,0x000002e7,0x000002e3,0x000002e6,0x0003003e,0x000002e1, + 0x000002e7,0x0004003d,0x0000000e,0x000002e8,0x000002e1,0x00050041,0x000002ed,0x000002ee, + 0x000002eb,0x000002ec,0x0004003d,0x0000000e,0x000002ef,0x000002ee,0x000500ae,0x00000055, + 0x000002f0,0x000002e8,0x000002ef,0x000300f7,0x000002f2,0x00000000,0x000400fa,0x000002f0, + 0x000002f1,0x000002f2,0x000200f8,0x000002f1,0x000100fd,0x000200f8,0x000002f2,0x0004003d, + 0x0000000e,0x000002f5,0x000002e1,0x00050041,0x000002ed,0x000002f7,0x000002eb,0x000002f6, + 0x0004003d,0x0000000e,0x000002f8,0x000002f7,0x00050089,0x0000000e,0x000002f9,0x000002f5, + 0x000002f8,0x00050084,0x0000000e,0x000002fa,0x000002f9,0x000000d9,0x0004007c,0x000001d5, + 0x000002fb,0x000002fa,0x00050041,0x000002ed,0x000002fd,0x000002eb,0x000002fc,0x0004003d, + 0x0000000e,0x000002fe,0x000002fd,0x0004007c,0x000001d5,0x000002ff,0x000002fe,0x00050082, + 0x000001d5,0x00000300,0x000002fb,0x000002ff,0x0003003e,0x000002f4,0x00000300,0x0004003d, + 0x0000000e,0x00000302,0x000002e1,0x00050041,0x000002ed,0x00000303,0x000002eb,0x000002f6, + 0x0004003d,0x0000000e,0x00000304,0x00000303,0x00050086,0x0000000e,0x00000305,0x00000302, + 0x00000304,0x00050084,0x0000000e,0x00000306,0x00000305,0x000000d9,0x0004007c,0x000001d5, + 0x00000307,0x00000306,0x00050041,0x000002ed,0x00000309,0x000002eb,0x00000308,0x0004003d, + 0x0000000e,0x0000030a,0x00000309,0x0004007c,0x000001d5,0x0000030b,0x0000030a,0x00050082, + 0x000001d5,0x0000030c,0x00000307,0x0000030b,0x0003003e,0x00000301,0x0000030c,0x00050041, + 0x000002ed,0x0000030e,0x000002eb,0x000001df,0x0004003d,0x0000000e,0x0000030f,0x0000030e, + 0x00050084,0x0000000e,0x00000310,0x0000030f,0x00000137,0x0003003e,0x0000030d,0x00000310, + 0x0004003d,0x0000000e,0x00000312,0x000002dd,0x00050084,0x0000000e,0x00000314,0x00000312, + 0x00000313,0x0003003e,0x00000311,0x00000314,0x0004003d,0x0000000e,0x00000316,0x000002d6, + 0x0003003e,0x00000315,0x00000316,0x000200f9,0x00000317,0x000200f8,0x00000317,0x000400f6, + 0x00000319,0x0000031a,0x00000000,0x000200f9,0x0000031b,0x000200f8,0x0000031b,0x0004003d, + 0x0000000e,0x0000031c,0x00000315,0x000500b0,0x00000055,0x0000031e,0x0000031c,0x0000031d, + 0x000400fa,0x0000031e,0x00000318,0x00000319,0x000200f8,0x00000318,0x0004003d,0x0000000e, + 0x00000320,0x00000315,0x000500c2,0x0000000e,0x00000321,0x00000320,0x00000234,0x0003003e, + 0x0000031f,0x00000321,0x0004003d,0x0000000e,0x00000323,0x00000315,0x000500c7,0x0000000e, + 0x00000324,0x00000323,0x000000e8,0x0003003e,0x00000322,0x00000324,0x0004003d,0x000001d5, + 0x00000326,0x000002f4,0x0004003d,0x0000000e,0x00000327,0x0000031f,0x000500c7,0x0000000e, + 0x00000328,0x00000327,0x0000011b,0x0004007c,0x000001d5,0x00000329,0x00000328,0x00050080, + 0x000001d5,0x0000032a,0x00000326,0x00000329,0x0003003e,0x00000325,0x0000032a,0x0004003d, + 0x000001d5,0x0000032c,0x00000301,0x0004003d,0x0000000e,0x0000032d,0x0000031f,0x000500c2, + 0x0000000e,0x0000032e,0x0000032d,0x00000137,0x0004007c,0x000001d5,0x0000032f,0x0000032e, + 0x00050080,0x000001d5,0x00000330,0x0000032c,0x0000032f,0x0003003e,0x0000032b,0x00000330, + 0x0003003e,0x00000331,0x000000b9,0x0004003d,0x000001d5,0x00000332,0x00000325,0x000500af, + 0x00000055,0x00000333,0x00000332,0x000001d8,0x0004003d,0x000001d5,0x00000334,0x0000032b, + 0x000500af,0x00000055,0x00000335,0x00000334,0x000001d8,0x000500a7,0x00000055,0x00000336, + 0x00000333,0x00000335,0x000300f7,0x00000338,0x00000000,0x000400fa,0x00000336,0x00000337, + 0x00000338,0x000200f8,0x00000337,0x0004003d,0x000001d5,0x00000339,0x00000325,0x00050041, + 0x000002ed,0x0000033a,0x000002eb,0x000001d8,0x0004003d,0x0000000e,0x0000033b,0x0000033a, + 0x0004007c,0x000001d5,0x0000033c,0x0000033b,0x000500b1,0x00000055,0x0000033d,0x00000339, + 0x0000033c,0x000200f9,0x00000338,0x000200f8,0x00000338,0x000700f5,0x00000055,0x0000033e, + 0x00000336,0x00000318,0x0000033d,0x00000337,0x000300f7,0x00000340,0x00000000,0x000400fa, + 0x0000033e,0x0000033f,0x00000340,0x000200f8,0x0000033f,0x0004003d,0x000001d5,0x00000341, + 0x0000032b,0x00050041,0x000002ed,0x00000342,0x000002eb,0x000001ff,0x0004003d,0x0000000e, + 0x00000343,0x00000342,0x0004007c,0x000001d5,0x00000344,0x00000343,0x000500b1,0x00000055, + 0x00000345,0x00000341,0x00000344,0x000200f9,0x00000340,0x000200f8,0x00000340,0x000700f5, + 0x00000055,0x00000346,0x0000033e,0x00000338,0x00000345,0x0000033f,0x000300f7,0x00000348, + 0x00000000,0x000400fa,0x00000346,0x00000347,0x00000348,0x000200f8,0x00000347,0x0004003d, + 0x000001d5,0x0000034e,0x0000032b,0x0004007c,0x0000000e,0x0000034f,0x0000034e,0x00050041, + 0x000002ed,0x00000350,0x000002eb,0x000001d8,0x0004003d,0x0000000e,0x00000351,0x00000350, + 0x00050084,0x0000000e,0x00000352,0x0000034f,0x00000351,0x0004003d,0x000001d5,0x00000353, + 0x00000325,0x0004007c,0x0000000e,0x00000354,0x00000353,0x00050080,0x0000000e,0x00000355, + 0x00000352,0x00000354,0x0004003d,0x0000000e,0x00000356,0x0000030d,0x00050084,0x0000000e, + 0x00000357,0x00000355,0x00000356,0x0004003d,0x0000000e,0x00000358,0x00000311,0x00050080, + 0x0000000e,0x00000359,0x00000357,0x00000358,0x0004003d,0x0000000e,0x0000035a,0x00000322, + 0x00050080,0x0000000e,0x0000035b,0x00000359,0x0000035a,0x00060041,0x0000035c,0x0000035d, + 0x0000034d,0x000001d8,0x0000035b,0x0004003d,0x00000349,0x0000035e,0x0000035d,0x00040071, + 0x0000000e,0x0000035f,0x0000035e,0x0003003e,0x00000331,0x0000035f,0x000200f9,0x00000348, + 0x000200f8,0x00000348,0x0004003d,0x0000000e,0x00000363,0x00000315,0x0004003d,0x0000000e, + 0x00000365,0x00000331,0x0003003e,0x00000364,0x00000365,0x00050039,0x0000000c,0x00000366, + 0x00000026,0x00000364,0x00050041,0x0000024c,0x00000367,0x00000362,0x00000363,0x0005003e, + 0x00000367,0x00000366,0x00000028,0x00000217,0x0004003d,0x0000000e,0x0000036a,0x0000031f, + 0x0003003e,0x00000369,0x0000036a,0x00050039,0x0000000e,0x0000036b,0x0000003a,0x00000369, + 0x0003003e,0x00000368,0x0000036b,0x0004003d,0x000001d5,0x0000036d,0x000002f4,0x0004003d, + 0x0000000e,0x0000036e,0x00000368,0x000500c7,0x0000000e,0x0000036f,0x0000036e,0x0000011b, + 0x0004007c,0x000001d5,0x00000370,0x0000036f,0x00050080,0x000001d5,0x00000371,0x0000036d, + 0x00000370,0x0003003e,0x0000036c,0x00000371,0x0004003d,0x000001d5,0x00000373,0x00000301, + 0x0004003d,0x0000000e,0x00000374,0x00000368,0x000500c2,0x0000000e,0x00000375,0x00000374, + 0x00000137,0x0004007c,0x000001d5,0x00000376,0x00000375,0x00050080,0x000001d5,0x00000377, + 0x00000373,0x00000376,0x0003003e,0x00000372,0x00000377,0x0003003e,0x00000378,0x000000b9, + 0x0003003e,0x00000379,0x000000b9,0x0004003d,0x000001d5,0x0000037a,0x0000036c,0x000500af, + 0x00000055,0x0000037b,0x0000037a,0x000001d8,0x0004003d,0x000001d5,0x0000037c,0x00000372, + 0x000500af,0x00000055,0x0000037d,0x0000037c,0x000001d8,0x000500a7,0x00000055,0x0000037e, + 0x0000037b,0x0000037d,0x000300f7,0x00000380,0x00000000,0x000400fa,0x0000037e,0x0000037f, + 0x00000380,0x000200f8,0x0000037f,0x0004003d,0x000001d5,0x00000381,0x0000036c,0x00050041, + 0x000002ed,0x00000382,0x000002eb,0x000001d8,0x0004003d,0x0000000e,0x00000383,0x00000382, + 0x0004007c,0x000001d5,0x00000384,0x00000383,0x000500b1,0x00000055,0x00000385,0x00000381, + 0x00000384,0x000200f9,0x00000380,0x000200f8,0x00000380,0x000700f5,0x00000055,0x00000386, + 0x0000037e,0x00000348,0x00000385,0x0000037f,0x000300f7,0x00000388,0x00000000,0x000400fa, + 0x00000386,0x00000387,0x00000388,0x000200f8,0x00000387,0x0004003d,0x000001d5,0x00000389, + 0x00000372,0x00050041,0x000002ed,0x0000038a,0x000002eb,0x000001ff,0x0004003d,0x0000000e, + 0x0000038b,0x0000038a,0x0004007c,0x000001d5,0x0000038c,0x0000038b,0x000500b1,0x00000055, + 0x0000038d,0x00000389,0x0000038c,0x000200f9,0x00000388,0x000200f8,0x00000388,0x000700f5, + 0x00000055,0x0000038e,0x00000386,0x00000380,0x0000038d,0x00000387,0x000300f7,0x00000390, + 0x00000000,0x000400fa,0x0000038e,0x0000038f,0x00000390,0x000200f8,0x0000038f,0x0004003d, + 0x000001d5,0x00000392,0x00000372,0x0004007c,0x0000000e,0x00000393,0x00000392,0x00050041, + 0x000002ed,0x00000394,0x000002eb,0x000001d8,0x0004003d,0x0000000e,0x00000395,0x00000394, + 0x00050084,0x0000000e,0x00000396,0x00000393,0x00000395,0x0004003d,0x000001d5,0x00000397, + 0x0000036c,0x0004007c,0x0000000e,0x00000398,0x00000397,0x00050080,0x0000000e,0x00000399, + 0x00000396,0x00000398,0x0004003d,0x0000000e,0x0000039a,0x0000030d,0x00050084,0x0000000e, + 0x0000039b,0x00000399,0x0000039a,0x0004003d,0x0000000e,0x0000039c,0x00000311,0x00050080, + 0x0000000e,0x0000039d,0x0000039b,0x0000039c,0x0003003e,0x00000391,0x0000039d,0x0004003d, + 0x0000000e,0x0000039e,0x00000391,0x00050080,0x0000000e,0x0000039f,0x0000039e,0x0000026d, + 0x0004003d,0x0000000e,0x000003a0,0x00000322,0x00050080,0x0000000e,0x000003a1,0x0000039f, + 0x000003a0,0x00060041,0x0000035c,0x000003a2,0x0000034d,0x000001d8,0x000003a1,0x0004003d, + 0x00000349,0x000003a3,0x000003a2,0x00040071,0x0000000e,0x000003a4,0x000003a3,0x0003003e, + 0x00000378,0x000003a4,0x0004003d,0x0000000e,0x000003a5,0x00000391,0x00050080,0x0000000e, + 0x000003a6,0x000003a5,0x00000248,0x0004003d,0x0000000e,0x000003a7,0x00000322,0x00050080, + 0x0000000e,0x000003a8,0x000003a6,0x000003a7,0x00060041,0x0000035c,0x000003a9,0x0000034d, + 0x000001d8,0x000003a8,0x0004003d,0x00000349,0x000003aa,0x000003a9,0x00040071,0x0000000e, + 0x000003ab,0x000003aa,0x0003003e,0x00000379,0x000003ab,0x000200f9,0x00000390,0x000200f8, + 0x00000390,0x0004003d,0x0000000e,0x000003ad,0x00000315,0x0004003d,0x0000000e,0x000003af, + 0x00000378,0x0003003e,0x000003ae,0x000003af,0x00050039,0x0000000c,0x000003b0,0x00000026, + 0x000003ae,0x00050041,0x0000024c,0x000003b1,0x000003ac,0x000003ad,0x0005003e,0x000003b1, + 0x000003b0,0x00000028,0x00000217,0x0004003d,0x0000000e,0x000003b3,0x00000315,0x0004003d, + 0x0000000e,0x000003b5,0x00000379,0x0003003e,0x000003b4,0x000003b5,0x00050039,0x0000000c, + 0x000003b6,0x00000026,0x000003b4,0x00050041,0x0000024c,0x000003b7,0x000003b2,0x000003b3, + 0x0005003e,0x000003b7,0x000003b6,0x00000028,0x00000217,0x000200f9,0x0000031a,0x000200f8, + 0x0000031a,0x0004003d,0x0000000e,0x000003b8,0x00000315,0x00050080,0x0000000e,0x000003b9, + 0x000003b8,0x000000db,0x0003003e,0x00000315,0x000003b9,0x000200f9,0x00000317,0x000200f8, + 0x00000319,0x000400e0,0x00000217,0x00000217,0x000003ba,0x0004003d,0x0000000e,0x000003bc, + 0x000002dd,0x00050084,0x0000000e,0x000003bd,0x000003bc,0x00000243,0x0003003e,0x000003bb, + 0x000003bd,0x0004003d,0x0000000e,0x000003c0,0x000003bf,0x0003003e,0x000003be,0x000003c0, + 0x000200f9,0x000003c1,0x000200f8,0x000003c1,0x000400f6,0x000003c3,0x000003c4,0x00000000, + 0x000200f9,0x000003c5,0x000200f8,0x000003c5,0x0004003d,0x0000000e,0x000003c6,0x000003be, + 0x000500b0,0x00000055,0x000003c7,0x000003c6,0x00000248,0x000400fa,0x000003c7,0x000003c2, + 0x000003c3,0x000200f8,0x000003c2,0x0004003d,0x0000000e,0x000003c9,0x000003be,0x00050086, + 0x0000000e,0x000003ca,0x000003c9,0x000000d9,0x00050084,0x0000000e,0x000003cb,0x000003ca, + 0x000000d9,0x0003003e,0x000003c8,0x000003cb,0x0004003d,0x0000000e,0x000003cd,0x000003be, + 0x00050089,0x0000000e,0x000003ce,0x000003cd,0x000000d9,0x00050084,0x0000000e,0x000003cf, + 0x000003ce,0x000000d9,0x0003003e,0x000003cc,0x000003cf,0x0004003d,0x0000000e,0x000003d7, + 0x000003bb,0x0004003d,0x0000000e,0x000003d8,0x000003c8,0x00050084,0x0000000e,0x000003d9, + 0x000003d8,0x00000248,0x00050080,0x0000000e,0x000003da,0x000003d7,0x000003d9,0x0004003d, + 0x0000000e,0x000003db,0x000003cc,0x00050080,0x0000000e,0x000003dc,0x000003da,0x000003db, + 0x00060041,0x000003dd,0x000003de,0x000003d6,0x000001d8,0x000003dc,0x0004003d,0x0000000e, + 0x000003df,0x000003bb,0x0004003d,0x0000000e,0x000003e0,0x000003c8,0x00050084,0x0000000e, + 0x000003e1,0x000003e0,0x00000248,0x00050080,0x0000000e,0x000003e2,0x000003df,0x000003e1, + 0x0004003d,0x0000000e,0x000003e3,0x000003cc,0x00050080,0x0000000e,0x000003e4,0x000003e2, + 0x000003e3,0x00071169,0x000003d0,0x000003e5,0x000003de,0x000001d8,0x00000248,0x00000000, + 0x0003003e,0x000003d2,0x000003e5,0x0004003d,0x000003d0,0x000003e9,0x000003d2,0x00040073, + 0x000003e6,0x000003ea,0x000003e9,0x0003003e,0x000003e8,0x000003ea,0x0003003e,0x000003eb, + 0x000000b9,0x000200f9,0x000003ec,0x000200f8,0x000003ec,0x000400f6,0x000003ee,0x000003ef, + 0x00000001,0x000200f9,0x000003f0,0x000200f8,0x000003f0,0x0004003d,0x0000000e,0x000003f1, + 0x000003eb,0x000500b0,0x00000055,0x000003f2,0x000003f1,0x00000206,0x000400fa,0x000003f2, + 0x000003ed,0x000003ee,0x000200f8,0x000003ed,0x0004003d,0x0000000e,0x000003f6,0x000003c8, + 0x00050084,0x0000000e,0x000003f7,0x000003f6,0x0000026d,0x0004003d,0x0000000e,0x000003f8, + 0x000003eb,0x00050084,0x0000000e,0x000003f9,0x000003f8,0x000000d9,0x00050080,0x0000000e, + 0x000003fa,0x000003f7,0x000003f9,0x00050041,0x0000024c,0x000003fb,0x00000362,0x000003fa, + 0x0004003d,0x0000000e,0x000003fc,0x000003c8,0x00050084,0x0000000e,0x000003fd,0x000003fc, + 0x0000026d,0x0004003d,0x0000000e,0x000003fe,0x000003eb,0x00050084,0x0000000e,0x000003ff, + 0x000003fe,0x000000d9,0x00050080,0x0000000e,0x00000400,0x000003fd,0x000003ff,0x00081169, + 0x000003f3,0x00000401,0x000003fb,0x000001d8,0x0000026d,0x00000030,0x00000217,0x0003003e, + 0x000003f5,0x00000401,0x0004003d,0x0000000e,0x00000405,0x000003cc,0x00050084,0x0000000e, + 0x00000406,0x00000405,0x0000026d,0x0004003d,0x0000000e,0x00000407,0x000003eb,0x00050084, + 0x0000000e,0x00000408,0x00000407,0x000000d9,0x00050080,0x0000000e,0x00000409,0x00000406, + 0x00000408,0x00050041,0x0000024c,0x0000040a,0x000003ac,0x00000409,0x0004003d,0x0000000e, + 0x0000040b,0x000003cc,0x00050084,0x0000000e,0x0000040c,0x0000040b,0x0000026d,0x0004003d, + 0x0000000e,0x0000040d,0x000003eb,0x00050084,0x0000000e,0x0000040e,0x0000040d,0x000000d9, + 0x00050080,0x0000000e,0x0000040f,0x0000040c,0x0000040e,0x00081169,0x00000402,0x00000410, + 0x0000040a,0x000001ff,0x0000026d,0x00000030,0x00000217,0x0003003e,0x00000404,0x00000410, + 0x0004003d,0x000003f3,0x00000411,0x000003f5,0x0004003d,0x00000402,0x00000412,0x00000404, + 0x0004003d,0x000003e6,0x00000413,0x000003e8,0x0006116b,0x000003e6,0x00000414,0x00000411, + 0x00000412,0x00000413,0x0003003e,0x000003e8,0x00000414,0x000200f9,0x000003ef,0x000200f8, + 0x000003ef,0x0004003d,0x0000000e,0x00000415,0x000003eb,0x00050080,0x0000000e,0x00000416, + 0x00000415,0x000001ff,0x0003003e,0x000003eb,0x00000416,0x000200f9,0x000003ec,0x000200f8, + 0x000003ee,0x0003003e,0x00000417,0x000001d8,0x000200f9,0x00000418,0x000200f8,0x00000418, + 0x000400f6,0x0000041a,0x0000041b,0x00000000,0x000200f9,0x0000041c,0x000200f8,0x0000041c, + 0x0004003d,0x000001d5,0x0000041d,0x00000417,0x0004116c,0x0000000e,0x0000041e,0x000003e6, + 0x0004007c,0x000001d5,0x0000041f,0x0000041e,0x000500b1,0x00000055,0x00000420,0x0000041d, + 0x0000041f,0x000400fa,0x00000420,0x00000419,0x0000041a,0x000200f8,0x00000419,0x0004003d, + 0x000001d5,0x00000421,0x00000417,0x0004003d,0x000001d5,0x00000422,0x00000417,0x00050041, + 0x00000007,0x00000424,0x000003e8,0x00000422,0x0004003d,0x00000006,0x00000425,0x00000424, + 0x0003003e,0x00000423,0x00000425,0x00050039,0x00000006,0x00000426,0x0000000a,0x00000423, + 0x00050041,0x00000007,0x00000427,0x000003e8,0x00000421,0x0003003e,0x00000427,0x00000426, + 0x000200f9,0x0000041b,0x000200f8,0x0000041b,0x0004003d,0x000001d5,0x00000428,0x00000417, + 0x00050080,0x000001d5,0x00000429,0x00000428,0x000001ff,0x0003003e,0x00000417,0x00000429, + 0x000200f9,0x00000418,0x000200f8,0x0000041a,0x0004003d,0x000003e6,0x0000042b,0x000003e8, + 0x00040073,0x000003d0,0x0000042c,0x0000042b,0x0003003e,0x0000042a,0x0000042c,0x0004003d, + 0x000003d0,0x0000042d,0x0000042a,0x0004003d,0x0000000e,0x0000042e,0x000003c8,0x00050084, + 0x0000000e,0x0000042f,0x0000042e,0x00000248,0x0004003d,0x0000000e,0x00000430,0x000003cc, + 0x00050080,0x0000000e,0x00000431,0x0000042f,0x00000430,0x00050041,0x0000024c,0x00000432, + 0x00000246,0x00000431,0x0004003d,0x0000000e,0x00000433,0x000003c8,0x00050084,0x0000000e, + 0x00000434,0x00000433,0x00000248,0x0004003d,0x0000000e,0x00000435,0x000003cc,0x00050080, + 0x0000000e,0x00000436,0x00000434,0x00000435,0x0007116a,0x00000432,0x0000042d,0x000001d8, + 0x00000248,0x00000028,0x00000217,0x000200f9,0x000003c4,0x000200f8,0x000003c4,0x0004003d, + 0x0000000e,0x00000438,0x00000437,0x0004003d,0x0000000e,0x00000439,0x000003be,0x00050080, + 0x0000000e,0x0000043a,0x00000439,0x00000438,0x0003003e,0x000003be,0x0000043a,0x000200f9, + 0x000003c1,0x000200f8,0x000003c3,0x000400e0,0x00000217,0x00000217,0x000003ba,0x0004003d, + 0x0000000e,0x0000043c,0x000002d6,0x0003003e,0x0000043b,0x0000043c,0x000200f9,0x0000043d, + 0x000200f8,0x0000043d,0x000400f6,0x0000043f,0x00000440,0x00000000,0x000200f9,0x00000441, + 0x000200f8,0x00000441,0x0004003d,0x0000000e,0x00000442,0x0000043b,0x000500b0,0x00000055, + 0x00000443,0x00000442,0x00000243,0x000400fa,0x00000443,0x0000043e,0x0000043f,0x000200f8, + 0x0000043e,0x0004003d,0x0000000e,0x00000444,0x0000043b,0x0004003d,0x0000000e,0x00000445, + 0x0000043b,0x00050041,0x0000024c,0x00000447,0x00000246,0x00000445,0x0006003d,0x0000000c, + 0x00000448,0x00000447,0x00000030,0x00000217,0x0003003e,0x00000446,0x00000448,0x00050039, + 0x0000000c,0x00000449,0x0000003d,0x00000446,0x00050041,0x0000024c,0x0000044a,0x00000246, + 0x00000444,0x0005003e,0x0000044a,0x00000449,0x00000028,0x00000217,0x000200f9,0x00000440, + 0x000200f8,0x00000440,0x0004003d,0x0000000e,0x0000044b,0x0000043b,0x00050080,0x0000000e, + 0x0000044c,0x0000044b,0x000000db,0x0003003e,0x0000043b,0x0000044c,0x000200f9,0x0000043d, + 0x000200f8,0x0000043f,0x000400e0,0x00000217,0x00000217,0x000003ba,0x0004003d,0x0000000e, + 0x0000044d,0x000002d6,0x000500b0,0x00000055,0x0000044e,0x0000044d,0x00000248,0x000300f7, + 0x00000450,0x00000000,0x000400fa,0x0000044e,0x0000044f,0x00000450,0x000200f8,0x0000044f, + 0x0004003d,0x0000000e,0x00000452,0x000002d6,0x0003003e,0x00000451,0x00000452,0x0004003d, + 0x0000000e,0x00000455,0x00000451,0x0003003e,0x00000454,0x00000455,0x00050039,0x0000000c, + 0x00000456,0x00000046,0x00000454,0x0003003e,0x00000453,0x00000456,0x0004003d,0x0000000c, + 0x00000459,0x00000453,0x0003003e,0x00000458,0x00000459,0x00050039,0x0000000c,0x0000045a, + 0x00000037,0x00000458,0x0003003e,0x00000457,0x0000045a,0x0003003e,0x0000045b,0x000000b9, + 0x000200f9,0x0000045c,0x000200f8,0x0000045c,0x000400f6,0x0000045e,0x0000045f,0x00000000, + 0x000200f9,0x00000460,0x000200f8,0x00000460,0x0004003d,0x0000000e,0x00000461,0x0000045b, + 0x000500b0,0x00000055,0x00000462,0x00000461,0x00000248,0x000400fa,0x00000462,0x0000045d, + 0x0000045e,0x000200f8,0x0000045d,0x0004003d,0x0000000e,0x00000464,0x00000451,0x00050084, + 0x0000000e,0x00000465,0x00000464,0x00000248,0x0004003d,0x0000000e,0x00000466,0x0000045b, + 0x00050080,0x0000000e,0x00000467,0x00000465,0x00000466,0x00050041,0x0000024c,0x00000468, + 0x00000246,0x00000467,0x0006003d,0x0000000c,0x00000469,0x00000468,0x00000030,0x00000217, + 0x0004003d,0x0000000c,0x0000046a,0x00000457,0x00050085,0x0000000c,0x0000046b,0x00000469, + 0x0000046a,0x0003003e,0x00000463,0x0000046b,0x0004003d,0x0000000c,0x0000046e,0x00000463, + 0x0003003e,0x0000046d,0x0000046e,0x00050039,0x0000000e,0x0000046f,0x00000011,0x0000046d, + 0x0003003e,0x00000470,0x0000046f,0x00050039,0x0000000e,0x00000471,0x0000001f,0x00000470, + 0x0003003e,0x0000046c,0x00000471,0x0004003d,0x0000000e,0x00000472,0x00000451,0x00050084, + 0x0000000e,0x00000473,0x00000472,0x00000248,0x0004003d,0x0000000e,0x00000474,0x0000045b, + 0x00050080,0x0000000e,0x00000475,0x00000473,0x00000474,0x0004003d,0x0000000e,0x00000477, + 0x0000046c,0x0003003e,0x00000476,0x00000477,0x00050039,0x0000000c,0x00000478,0x00000026, + 0x00000476,0x00050041,0x0000024c,0x00000479,0x00000246,0x00000475,0x0005003e,0x00000479, + 0x00000478,0x00000028,0x00000217,0x000200f9,0x0000045f,0x000200f8,0x0000045f,0x0004003d, + 0x0000000e,0x0000047a,0x0000045b,0x00050080,0x0000000e,0x0000047b,0x0000047a,0x000001ff, + 0x0003003e,0x0000045b,0x0000047b,0x000200f9,0x0000045c,0x000200f8,0x0000045e,0x000200f9, + 0x00000450,0x000200f8,0x00000450,0x000400e0,0x00000217,0x00000217,0x000003ba,0x0004003d, + 0x0000000e,0x0000047d,0x000003bf,0x0003003e,0x0000047c,0x0000047d,0x000200f9,0x0000047e, + 0x000200f8,0x0000047e,0x000400f6,0x00000480,0x00000481,0x00000000,0x000200f9,0x00000482, + 0x000200f8,0x00000482,0x0004003d,0x0000000e,0x00000483,0x0000047c,0x000500b0,0x00000055, + 0x00000484,0x00000483,0x0000026d,0x000400fa,0x00000484,0x0000047f,0x00000480,0x000200f8, + 0x0000047f,0x0004003d,0x0000000e,0x00000486,0x0000047c,0x00050086,0x0000000e,0x00000487, + 0x00000486,0x00000206,0x00050084,0x0000000e,0x00000488,0x00000487,0x000000d9,0x0003003e, + 0x00000485,0x00000488,0x0004003d,0x0000000e,0x0000048a,0x0000047c,0x00050089,0x0000000e, + 0x0000048b,0x0000048a,0x00000206,0x00050084,0x0000000e,0x0000048c,0x0000048b,0x000000d9, + 0x0003003e,0x00000489,0x0000048c,0x0003003e,0x0000048d,0x0000048e,0x0003003e,0x0000048f, + 0x000000b9,0x000200f9,0x00000490,0x000200f8,0x00000490,0x000400f6,0x00000492,0x00000493, + 0x00000001,0x000200f9,0x00000494,0x000200f8,0x00000494,0x0004003d,0x0000000e,0x00000495, + 0x0000048f,0x000500b0,0x00000055,0x00000496,0x00000495,0x00000248,0x000400fa,0x00000496, + 0x00000491,0x00000492,0x000200f8,0x00000491,0x0003003e,0x00000497,0x000000b9,0x000200f9, + 0x00000498,0x000200f8,0x00000498,0x000400f6,0x0000049a,0x0000049b,0x00000001,0x000200f9, + 0x0000049c,0x000200f8,0x0000049c,0x0004003d,0x0000000e,0x0000049d,0x00000497,0x000500b0, + 0x00000055,0x0000049e,0x0000049d,0x00000206,0x000400fa,0x0000049e,0x00000499,0x0000049a, + 0x000200f8,0x00000499,0x0004003d,0x0000000e,0x000004a0,0x00000485,0x00050084,0x0000000e, + 0x000004a1,0x000004a0,0x00000248,0x0004003d,0x0000000e,0x000004a2,0x0000048f,0x00050080, + 0x0000000e,0x000004a3,0x000004a1,0x000004a2,0x0004003d,0x0000000e,0x000004a4,0x00000497, + 0x00050084,0x0000000e,0x000004a5,0x000004a4,0x000000d9,0x00050080,0x0000000e,0x000004a6, + 0x000004a3,0x000004a5,0x00050041,0x0000024c,0x000004a7,0x00000246,0x000004a6,0x0004003d, + 0x0000000e,0x000004a8,0x00000485,0x00050084,0x0000000e,0x000004a9,0x000004a8,0x00000248, + 0x0004003d,0x0000000e,0x000004aa,0x0000048f,0x00050080,0x0000000e,0x000004ab,0x000004a9, + 0x000004aa,0x0004003d,0x0000000e,0x000004ac,0x00000497,0x00050084,0x0000000e,0x000004ad, + 0x000004ac,0x000000d9,0x00050080,0x0000000e,0x000004ae,0x000004ab,0x000004ad,0x00081169, + 0x000003f3,0x000004af,0x000004a7,0x000001d8,0x00000248,0x00000030,0x00000217,0x0003003e, + 0x0000049f,0x000004af,0x0004003d,0x0000000e,0x000004b1,0x0000048f,0x00050084,0x0000000e, + 0x000004b2,0x000004b1,0x0000026d,0x0004003d,0x0000000e,0x000004b3,0x00000489,0x00050080, + 0x0000000e,0x000004b4,0x000004b2,0x000004b3,0x0004003d,0x0000000e,0x000004b5,0x00000497, + 0x00050084,0x0000000e,0x000004b7,0x000004b5,0x000004b6,0x00050080,0x0000000e,0x000004b8, + 0x000004b4,0x000004b7,0x00050041,0x0000024c,0x000004b9,0x000003b2,0x000004b8,0x0004003d, + 0x0000000e,0x000004ba,0x0000048f,0x00050084,0x0000000e,0x000004bb,0x000004ba,0x0000026d, + 0x0004003d,0x0000000e,0x000004bc,0x00000489,0x00050080,0x0000000e,0x000004bd,0x000004bb, + 0x000004bc,0x0004003d,0x0000000e,0x000004be,0x00000497,0x00050084,0x0000000e,0x000004bf, + 0x000004be,0x000004b6,0x00050080,0x0000000e,0x000004c0,0x000004bd,0x000004bf,0x00081169, + 0x00000402,0x000004c1,0x000004b9,0x000001d8,0x0000026d,0x00000030,0x00000217,0x0003003e, + 0x000004b0,0x000004c1,0x0004003d,0x000003f3,0x000004c2,0x0000049f,0x0004003d,0x00000402, + 0x000004c3,0x000004b0,0x0004003d,0x000003e6,0x000004c4,0x0000048d,0x0006116b,0x000003e6, + 0x000004c5,0x000004c2,0x000004c3,0x000004c4,0x0003003e,0x0000048d,0x000004c5,0x000200f9, + 0x0000049b,0x000200f8,0x0000049b,0x0004003d,0x0000000e,0x000004c6,0x00000497,0x00050080, + 0x0000000e,0x000004c7,0x000004c6,0x000001ff,0x0003003e,0x00000497,0x000004c7,0x000200f9, + 0x00000498,0x000200f8,0x0000049a,0x0003003e,0x000004c8,0x000001d8,0x000200f9,0x000004c9, + 0x000200f8,0x000004c9,0x000400f6,0x000004cb,0x000004cc,0x00000000,0x000200f9,0x000004cd, + 0x000200f8,0x000004cd,0x0004003d,0x000001d5,0x000004ce,0x000004c8,0x0004116c,0x0000000e, + 0x000004cf,0x000003e6,0x0004007c,0x000001d5,0x000004d0,0x000004cf,0x000500b1,0x00000055, + 0x000004d1,0x000004ce,0x000004d0,0x000400fa,0x000004d1,0x000004ca,0x000004cb,0x000200f8, + 0x000004ca,0x0004003d,0x000001d5,0x000004d2,0x000004c8,0x0004003d,0x000001d5,0x000004d3, + 0x000004c8,0x00050041,0x00000007,0x000004d5,0x0000048d,0x000004d3,0x0004003d,0x00000006, + 0x000004d6,0x000004d5,0x0003003e,0x000004d4,0x000004d6,0x00050039,0x00000006,0x000004d7, + 0x0000000a,0x000004d4,0x00050041,0x00000007,0x000004d8,0x0000048d,0x000004d2,0x0003003e, + 0x000004d8,0x000004d7,0x000200f9,0x000004cc,0x000200f8,0x000004cc,0x0004003d,0x000001d5, + 0x000004d9,0x000004c8,0x00050080,0x000001d5,0x000004da,0x000004d9,0x000001ff,0x0003003e, + 0x000004c8,0x000004da,0x000200f9,0x000004c9,0x000200f8,0x000004cb,0x000200f9,0x00000493, + 0x000200f8,0x00000493,0x0004003d,0x0000000e,0x000004db,0x0000048f,0x00050080,0x0000000e, + 0x000004dc,0x000004db,0x0000026d,0x0003003e,0x0000048f,0x000004dc,0x000200f9,0x00000490, + 0x000200f8,0x00000492,0x0004003d,0x000003e6,0x000004de,0x0000048d,0x00040073,0x000003d0, + 0x000004df,0x000004de,0x0003003e,0x000004dd,0x000004df,0x0004003d,0x000003d0,0x000004e0, + 0x000004dd,0x0004003d,0x0000000e,0x000004e2,0x00000485,0x00050084,0x0000000e,0x000004e3, + 0x000004e2,0x0000026d,0x0004003d,0x0000000e,0x000004e4,0x00000489,0x00050080,0x0000000e, + 0x000004e5,0x000004e3,0x000004e4,0x00050041,0x0000024c,0x000004e6,0x000004e1,0x000004e5, + 0x0004003d,0x0000000e,0x000004e7,0x00000485,0x00050084,0x0000000e,0x000004e8,0x000004e7, + 0x0000026d,0x0004003d,0x0000000e,0x000004e9,0x00000489,0x00050080,0x0000000e,0x000004ea, + 0x000004e8,0x000004e9,0x0007116a,0x000004e6,0x000004e0,0x000001d8,0x0000026d,0x00000028, + 0x00000217,0x000200f9,0x00000481,0x000200f8,0x00000481,0x0004003d,0x0000000e,0x000004eb, + 0x00000437,0x0004003d,0x0000000e,0x000004ec,0x0000047c,0x00050080,0x0000000e,0x000004ed, + 0x000004ec,0x000004eb,0x0003003e,0x0000047c,0x000004ed,0x000200f9,0x0000047e,0x000200f8, + 0x00000480,0x000400e0,0x00000217,0x00000217,0x000003ba,0x0004003d,0x0000000e,0x000004ef, + 0x000002d6,0x0003003e,0x000004ee,0x000004ef,0x000200f9,0x000004f0,0x000200f8,0x000004f0, + 0x000400f6,0x000004f2,0x000004f3,0x00000000,0x000200f9,0x000004f4,0x000200f8,0x000004f4, + 0x0004003d,0x0000000e,0x000004f5,0x000004ee,0x000500b0,0x00000055,0x000004f6,0x000004f5, + 0x0000031d,0x000400fa,0x000004f6,0x000004f1,0x000004f2,0x000200f8,0x000004f1,0x0004003d, + 0x0000000e,0x000004f8,0x000004ee,0x000500c2,0x0000000e,0x000004f9,0x000004f8,0x00000234, + 0x0003003e,0x000004f7,0x000004f9,0x0004003d,0x0000000e,0x000004fb,0x000004ee,0x000500c7, + 0x0000000e,0x000004fc,0x000004fb,0x000000e8,0x0003003e,0x000004fa,0x000004fc,0x0004003d, + 0x000001d5,0x000004fe,0x000002f4,0x0004003d,0x0000000e,0x000004ff,0x000004f7,0x000500c7, + 0x0000000e,0x00000500,0x000004ff,0x0000011b,0x0004007c,0x000001d5,0x00000501,0x00000500, + 0x00050080,0x000001d5,0x00000502,0x000004fe,0x00000501,0x0003003e,0x000004fd,0x00000502, + 0x0004003d,0x000001d5,0x00000504,0x00000301,0x0004003d,0x0000000e,0x00000505,0x000004f7, + 0x000500c2,0x0000000e,0x00000506,0x00000505,0x00000137,0x0004007c,0x000001d5,0x00000507, + 0x00000506,0x00050080,0x000001d5,0x00000508,0x00000504,0x00000507,0x0003003e,0x00000503, + 0x00000508,0x0004003d,0x000001d5,0x00000509,0x000004fd,0x000500b1,0x00000055,0x0000050a, + 0x00000509,0x000001d8,0x0004003d,0x000001d5,0x0000050b,0x00000503,0x000500b1,0x00000055, + 0x0000050c,0x0000050b,0x000001d8,0x000500a6,0x00000055,0x0000050d,0x0000050a,0x0000050c, + 0x000400a8,0x00000055,0x0000050e,0x0000050d,0x000300f7,0x00000510,0x00000000,0x000400fa, + 0x0000050e,0x0000050f,0x00000510,0x000200f8,0x0000050f,0x0004003d,0x000001d5,0x00000511, + 0x000004fd,0x00050041,0x000002ed,0x00000512,0x000002eb,0x000001d8,0x0004003d,0x0000000e, + 0x00000513,0x00000512,0x0004007c,0x000001d5,0x00000514,0x00000513,0x000500af,0x00000055, + 0x00000515,0x00000511,0x00000514,0x000200f9,0x00000510,0x000200f8,0x00000510,0x000700f5, + 0x00000055,0x00000516,0x0000050d,0x000004f1,0x00000515,0x0000050f,0x000400a8,0x00000055, + 0x00000517,0x00000516,0x000300f7,0x00000519,0x00000000,0x000400fa,0x00000517,0x00000518, + 0x00000519,0x000200f8,0x00000518,0x0004003d,0x000001d5,0x0000051a,0x00000503,0x00050041, + 0x000002ed,0x0000051b,0x000002eb,0x000001ff,0x0004003d,0x0000000e,0x0000051c,0x0000051b, + 0x0004007c,0x000001d5,0x0000051d,0x0000051c,0x000500af,0x00000055,0x0000051e,0x0000051a, + 0x0000051d,0x000200f9,0x00000519,0x000200f8,0x00000519,0x000700f5,0x00000055,0x0000051f, + 0x00000516,0x00000510,0x0000051e,0x00000518,0x000300f7,0x00000521,0x00000000,0x000400fa, + 0x0000051f,0x00000520,0x00000521,0x000200f8,0x00000520,0x000200f9,0x000004f3,0x000200f8, + 0x00000521,0x0004003d,0x000001d5,0x00000524,0x00000503,0x0004007c,0x0000000e,0x00000525, + 0x00000524,0x00050041,0x000002ed,0x00000526,0x000002eb,0x000001d8,0x0004003d,0x0000000e, + 0x00000527,0x00000526,0x00050084,0x0000000e,0x00000528,0x00000525,0x00000527,0x0004003d, + 0x000001d5,0x00000529,0x000004fd,0x0004007c,0x0000000e,0x0000052a,0x00000529,0x00050080, + 0x0000000e,0x0000052b,0x00000528,0x0000052a,0x00050041,0x000002ed,0x0000052c,0x000002eb, + 0x000001df,0x0004003d,0x0000000e,0x0000052d,0x0000052c,0x00050084,0x0000000e,0x0000052e, + 0x0000052b,0x0000052d,0x0004003d,0x0000000e,0x0000052f,0x000002dd,0x00050084,0x0000000e, + 0x00000530,0x0000052f,0x0000026d,0x00050080,0x0000000e,0x00000531,0x0000052e,0x00000530, + 0x0004003d,0x0000000e,0x00000532,0x000004fa,0x00050080,0x0000000e,0x00000533,0x00000531, + 0x00000532,0x0003003e,0x00000523,0x00000533,0x0004003d,0x0000000e,0x00000538,0x00000523, + 0x0004003d,0x0000000e,0x00000539,0x000004ee,0x00050041,0x0000024c,0x0000053b,0x000004e1, + 0x00000539,0x0006003d,0x0000000c,0x0000053c,0x0000053b,0x00000030,0x00000217,0x0003003e, + 0x0000053a,0x0000053c,0x00050039,0x0000000e,0x0000053d,0x00000011,0x0000053a,0x0003003e, + 0x0000053e,0x0000053d,0x00050039,0x0000000e,0x0000053f,0x0000001f,0x0000053e,0x00040071, + 0x00000349,0x00000540,0x0000053f,0x00060041,0x0000035c,0x00000541,0x00000537,0x000001d8, + 0x00000538,0x0003003e,0x00000541,0x00000540,0x000200f9,0x000004f3,0x000200f8,0x000004f3, + 0x0004003d,0x0000000e,0x00000542,0x000004ee,0x00050080,0x0000000e,0x00000543,0x00000542, + 0x000000db,0x0003003e,0x000004ee,0x00000543,0x000200f9,0x000004f0,0x000200f8,0x000004f2, + 0x000100fd,0x00010038,0x00050036,0x00000006,0x0000000a,0x00000000,0x00000008,0x00030037, + 0x00000007,0x00000009,0x000200f8,0x0000000b,0x0004003b,0x00000013,0x00000048,0x00000007, + 0x0004003b,0x00000013,0x0000004b,0x00000007,0x0004003b,0x00000013,0x0000004f,0x00000007, + 0x0004003b,0x00000007,0x00000069,0x00000007,0x0004003b,0x00000013,0x0000007a,0x00000007, + 0x0004003b,0x00000013,0x00000080,0x00000007,0x0004003d,0x00000006,0x00000049,0x00000009, + 0x0004007c,0x0000000e,0x0000004a,0x00000049,0x0003003e,0x00000048,0x0000004a,0x0004003d, + 0x0000000e,0x0000004c,0x00000048,0x000500c7,0x0000000e,0x0000004e,0x0000004c,0x0000004d, + 0x0003003e,0x0000004b,0x0000004e,0x0004003d,0x0000000e,0x00000050,0x00000048,0x000500c7, + 0x0000000e,0x00000052,0x00000050,0x00000051,0x0003003e,0x0000004f,0x00000052,0x0004003d, + 0x0000000e,0x00000053,0x0000004f,0x000500ae,0x00000055,0x00000056,0x00000053,0x00000054, + 0x000300f7,0x00000058,0x00000000,0x000400fa,0x00000056,0x00000057,0x00000058,0x000200f8, + 0x00000057,0x0004003d,0x00000006,0x00000059,0x00000009,0x000200fe,0x00000059,0x000200f8, + 0x00000058,0x0004003d,0x0000000e,0x0000005b,0x0000004f,0x000500ae,0x00000055,0x0000005d, + 0x0000005b,0x0000005c,0x000300f7,0x0000005f,0x00000000,0x000400fa,0x0000005d,0x0000005e, + 0x0000005f,0x000200f8,0x0000005e,0x0004003d,0x0000000e,0x00000060,0x0000004b,0x000500c5, + 0x0000000e,0x00000061,0x00000060,0x00000054,0x0004007c,0x00000006,0x00000062,0x00000061, + 0x000200fe,0x00000062,0x000200f8,0x0000005f,0x0004003d,0x0000000e,0x00000064,0x0000004f, + 0x000500b0,0x00000055,0x00000066,0x00000064,0x00000065,0x000300f7,0x00000068,0x00000000, + 0x000400fa,0x00000066,0x00000067,0x00000068,0x000200f8,0x00000067,0x0004003d,0x0000000e, + 0x0000006a,0x0000004f,0x0004007c,0x00000006,0x0000006b,0x0000006a,0x00050085,0x00000006, + 0x0000006d,0x0000006b,0x0000006c,0x0006000c,0x00000006,0x0000006e,0x00000001,0x00000002, + 0x0000006d,0x0003003e,0x00000069,0x0000006e,0x0004003d,0x0000000e,0x0000006f,0x0000004b, + 0x0004007c,0x00000006,0x00000070,0x0000006f,0x0004003d,0x0000000e,0x00000071,0x0000004b, + 0x0004003d,0x00000006,0x00000072,0x00000069,0x00050085,0x00000006,0x00000074,0x00000072, + 0x00000073,0x0004007c,0x0000000e,0x00000075,0x00000074,0x000500c5,0x0000000e,0x00000076, + 0x00000071,0x00000075,0x0004007c,0x00000006,0x00000077,0x00000076,0x00050081,0x00000006, + 0x00000078,0x00000070,0x00000077,0x000200fe,0x00000078,0x000200f8,0x00000068,0x0004003d, + 0x0000000e,0x0000007b,0x0000004f,0x000500c2,0x0000000e,0x0000007d,0x0000007b,0x0000007c, + 0x000500c7,0x0000000e,0x0000007f,0x0000007d,0x0000007e,0x0003003e,0x0000007a,0x0000007f, + 0x0004003d,0x0000000e,0x00000081,0x0000004f,0x00050080,0x0000000e,0x00000083,0x00000081, + 0x00000082,0x0004003d,0x0000000e,0x00000084,0x0000007a,0x00050080,0x0000000e,0x00000085, + 0x00000083,0x00000084,0x000500c7,0x0000000e,0x00000087,0x00000085,0x00000086,0x0003003e, + 0x00000080,0x00000087,0x0004003d,0x0000000e,0x00000088,0x0000004b,0x0004003d,0x0000000e, + 0x00000089,0x00000080,0x000500c5,0x0000000e,0x0000008a,0x00000088,0x00000089,0x0004007c, + 0x00000006,0x0000008b,0x0000008a,0x000200fe,0x0000008b,0x00010038,0x00050036,0x0000000e, + 0x00000011,0x00000000,0x0000000f,0x00030037,0x0000000d,0x00000010,0x000200f8,0x00000012, + 0x0004003d,0x0000000c,0x0000008e,0x00000010,0x0004007c,0x0000008f,0x00000090,0x0000008e, + 0x00040071,0x0000000e,0x00000091,0x00000090,0x000200fe,0x00000091,0x00010038,0x00050036, + 0x0000000c,0x00000016,0x00000000,0x00000014,0x00030037,0x00000013,0x00000015,0x000200f8, + 0x00000017,0x0004003d,0x0000000e,0x00000094,0x00000015,0x000500c7,0x0000000e,0x00000096, + 0x00000094,0x00000095,0x00040071,0x0000008f,0x00000097,0x00000096,0x0004007c,0x0000000c, + 0x00000098,0x00000097,0x000200fe,0x00000098,0x00010038,0x00050036,0x0000000e,0x0000001b, + 0x00000000,0x00000018,0x00030037,0x00000013,0x00000019,0x00030037,0x00000013,0x0000001a, + 0x000200f8,0x0000001c,0x0004003b,0x00000013,0x0000009b,0x00000007,0x0004003b,0x00000013, + 0x0000009f,0x00000007,0x0004003b,0x00000013,0x000000a3,0x00000007,0x0004003b,0x00000013, + 0x000000a7,0x00000007,0x0004003d,0x0000000e,0x0000009c,0x00000019,0x0004003d,0x0000000e, + 0x0000009d,0x0000001a,0x000500c2,0x0000000e,0x0000009e,0x0000009c,0x0000009d,0x0003003e, + 0x0000009b,0x0000009e,0x0004003d,0x0000000e,0x000000a0,0x0000001a,0x000500c4,0x0000000e, + 0x000000a1,0x0000007e,0x000000a0,0x00050082,0x0000000e,0x000000a2,0x000000a1,0x0000007e, + 0x0003003e,0x0000009f,0x000000a2,0x0004003d,0x0000000e,0x000000a4,0x00000019,0x0004003d, + 0x0000000e,0x000000a5,0x0000009f,0x000500c7,0x0000000e,0x000000a6,0x000000a4,0x000000a5, + 0x0003003e,0x000000a3,0x000000a6,0x0004003d,0x0000000e,0x000000a8,0x0000001a,0x00050082, + 0x0000000e,0x000000a9,0x000000a8,0x0000007e,0x000500c4,0x0000000e,0x000000aa,0x0000007e, + 0x000000a9,0x0003003e,0x000000a7,0x000000aa,0x0004003d,0x0000000e,0x000000ab,0x0000009b, + 0x0004003d,0x0000000e,0x000000ac,0x000000a3,0x0004003d,0x0000000e,0x000000ad,0x000000a7, + 0x000500ac,0x00000055,0x000000ae,0x000000ac,0x000000ad,0x000400a8,0x00000055,0x000000af, + 0x000000ae,0x000300f7,0x000000b1,0x00000000,0x000400fa,0x000000af,0x000000b0,0x000000b1, + 0x000200f8,0x000000b0,0x0004003d,0x0000000e,0x000000b2,0x000000a3,0x0004003d,0x0000000e, + 0x000000b3,0x000000a7,0x000500aa,0x00000055,0x000000b4,0x000000b2,0x000000b3,0x000300f7, + 0x000000b6,0x00000000,0x000400fa,0x000000b4,0x000000b5,0x000000b6,0x000200f8,0x000000b5, + 0x0004003d,0x0000000e,0x000000b7,0x0000009b,0x000500c7,0x0000000e,0x000000b8,0x000000b7, + 0x0000007e,0x000500ab,0x00000055,0x000000ba,0x000000b8,0x000000b9,0x000200f9,0x000000b6, + 0x000200f8,0x000000b6,0x000700f5,0x00000055,0x000000bb,0x000000b4,0x000000b0,0x000000ba, + 0x000000b5,0x000200f9,0x000000b1,0x000200f8,0x000000b1,0x000700f5,0x00000055,0x000000bc, + 0x000000ae,0x0000001c,0x000000bb,0x000000b6,0x000600a9,0x0000000e,0x000000bd,0x000000bc, + 0x0000007e,0x000000b9,0x00050080,0x0000000e,0x000000be,0x000000ab,0x000000bd,0x000200fe, + 0x000000be,0x00010038,0x00050036,0x0000000e,0x0000001f,0x00000000,0x0000001d,0x00030037, + 0x00000013,0x0000001e,0x000200f8,0x00000020,0x0004003b,0x000000c1,0x000000c2,0x00000007, + 0x0004003b,0x00000013,0x000000de,0x00000007,0x0004003b,0x00000013,0x000000e4,0x00000007, + 0x0004003b,0x00000013,0x000000ea,0x00000007,0x0004003b,0x00000013,0x000000f1,0x00000007, + 0x0004003b,0x00000013,0x000000f8,0x00000007,0x0004003b,0x00000013,0x000000fb,0x00000007, + 0x0004003b,0x00000013,0x00000104,0x00000007,0x0004003b,0x00000013,0x00000107,0x00000007, + 0x0004003b,0x00000013,0x00000110,0x00000007,0x0004003b,0x00000013,0x00000112,0x00000007, + 0x0004003b,0x00000013,0x00000117,0x00000007,0x0004003b,0x00000013,0x0000011a,0x00000007, + 0x0004003b,0x00000013,0x0000011c,0x00000007,0x0004003b,0x00000013,0x0000011e,0x00000007, + 0x0004003b,0x00000013,0x00000132,0x00000007,0x0004003d,0x0000000e,0x000000c3,0x0000001e, + 0x000500c7,0x0000000e,0x000000c5,0x000000c3,0x000000c4,0x000500aa,0x00000055,0x000000c6, + 0x000000c5,0x000000c4,0x000300f7,0x000000c8,0x00000000,0x000400fa,0x000000c6,0x000000c7, + 0x000000c8,0x000200f8,0x000000c7,0x0004003d,0x0000000e,0x000000c9,0x0000001e,0x000500c7, + 0x0000000e,0x000000cb,0x000000c9,0x000000ca,0x000500ab,0x00000055,0x000000cc,0x000000cb, + 0x000000b9,0x000200f9,0x000000c8,0x000200f8,0x000000c8,0x000700f5,0x00000055,0x000000cd, + 0x000000c6,0x00000020,0x000000cc,0x000000c7,0x0003003e,0x000000c2,0x000000cd,0x0004003d, + 0x00000055,0x000000ce,0x000000c2,0x000300f7,0x000000d0,0x00000000,0x000400fa,0x000000ce, + 0x000000cf,0x000000d0,0x000200f8,0x000000cf,0x000200fe,0x000000b9,0x000200f8,0x000000d0, + 0x0004003d,0x0000000e,0x000000d2,0x0000001e,0x000500c7,0x0000000e,0x000000d4,0x000000d2, + 0x000000d3,0x000500aa,0x00000055,0x000000d5,0x000000d4,0x000000b9,0x000300f7,0x000000d7, + 0x00000000,0x000400fa,0x000000d5,0x000000d6,0x000000d7,0x000200f8,0x000000d6,0x0004003d, + 0x0000000e,0x000000d8,0x0000001e,0x000500c2,0x0000000e,0x000000da,0x000000d8,0x000000d9, + 0x000500c7,0x0000000e,0x000000dc,0x000000da,0x000000db,0x000200fe,0x000000dc,0x000200f8, + 0x000000d7,0x0004003d,0x0000000e,0x000000df,0x0000001e,0x000500c7,0x0000000e,0x000000e1, + 0x000000df,0x000000e0,0x000500ab,0x00000055,0x000000e2,0x000000e1,0x000000b9,0x000600a9, + 0x0000000e,0x000000e3,0x000000e2,0x000000db,0x000000b9,0x0003003e,0x000000de,0x000000e3, + 0x0004003d,0x0000000e,0x000000e5,0x0000001e,0x000500c2,0x0000000e,0x000000e7,0x000000e5, + 0x000000e6,0x000500c7,0x0000000e,0x000000e9,0x000000e7,0x000000e8,0x0003003e,0x000000e4, + 0x000000e9,0x0004003d,0x0000000e,0x000000eb,0x0000001e,0x000500c7,0x0000000e,0x000000ec, + 0x000000eb,0x000000ca,0x0003003e,0x000000ea,0x000000ec,0x0004003d,0x0000000e,0x000000ed, + 0x000000e4,0x000500aa,0x00000055,0x000000ee,0x000000ed,0x000000e8,0x000300f7,0x000000f0, + 0x00000000,0x000400fa,0x000000ee,0x000000ef,0x000000f3,0x000200f8,0x000000ef,0x0003003e, + 0x000000f1,0x000000f2,0x000200f9,0x000000f0,0x000200f8,0x000000f3,0x0004003d,0x0000000e, + 0x000000f4,0x000000e4,0x000500b2,0x00000055,0x000000f5,0x000000f4,0x000000d9,0x000300f7, + 0x000000f7,0x00000000,0x000400fa,0x000000f5,0x000000f6,0x00000116,0x000200f8,0x000000f6, + 0x0004003d,0x0000000e,0x000000f9,0x000000e4,0x000500aa,0x00000055,0x000000fa,0x000000f9, + 0x000000b9,0x000300f7,0x000000fd,0x00000000,0x000400fa,0x000000fa,0x000000fc,0x000000ff, + 0x000200f8,0x000000fc,0x0004003d,0x0000000e,0x000000fe,0x000000ea,0x0003003e,0x000000fb, + 0x000000fe,0x000200f9,0x000000fd,0x000200f8,0x000000ff,0x0004003d,0x0000000e,0x00000101, + 0x000000ea,0x00050080,0x0000000e,0x00000102,0x00000100,0x00000101,0x0003003e,0x000000fb, + 0x00000102,0x000200f9,0x000000fd,0x000200f8,0x000000fd,0x0004003d,0x0000000e,0x00000103, + 0x000000fb,0x0003003e,0x000000f8,0x00000103,0x0004003d,0x0000000e,0x00000105,0x000000e4, + 0x000500aa,0x00000055,0x00000106,0x00000105,0x000000b9,0x000300f7,0x00000109,0x00000000, + 0x000400fa,0x00000106,0x00000108,0x0000010b,0x000200f8,0x00000108,0x0003003e,0x00000107, + 0x0000010a,0x000200f9,0x00000109,0x000200f8,0x0000010b,0x0004003d,0x0000000e,0x0000010d, + 0x000000e4,0x00050082,0x0000000e,0x0000010e,0x0000010c,0x0000010d,0x0003003e,0x00000107, + 0x0000010e,0x000200f9,0x00000109,0x000200f8,0x00000109,0x0004003d,0x0000000e,0x0000010f, + 0x00000107,0x0003003e,0x00000104,0x0000010f,0x0004003d,0x0000000e,0x00000111,0x000000f8, + 0x0003003e,0x00000110,0x00000111,0x0004003d,0x0000000e,0x00000113,0x00000104,0x0003003e, + 0x00000112,0x00000113,0x00060039,0x0000000e,0x00000114,0x0000001b,0x00000110,0x00000112, + 0x0007000c,0x0000000e,0x00000115,0x00000001,0x00000026,0x00000114,0x000000d9,0x0003003e, + 0x000000f1,0x00000115,0x000200f9,0x000000f7,0x000200f8,0x00000116,0x0004003d,0x0000000e, + 0x00000118,0x000000e4,0x00050082,0x0000000e,0x00000119,0x00000118,0x000000d9,0x0003003e, + 0x00000117,0x00000119,0x0004003d,0x0000000e,0x0000011d,0x000000ea,0x0003003e,0x0000011c, + 0x0000011d,0x0003003e,0x0000011e,0x0000011b,0x00060039,0x0000000e,0x0000011f,0x0000001b, + 0x0000011c,0x0000011e,0x0003003e,0x0000011a,0x0000011f,0x0004003d,0x0000000e,0x00000120, + 0x0000011a,0x000500aa,0x00000055,0x00000121,0x00000120,0x000000d9,0x000300f7,0x00000123, + 0x00000000,0x000400fa,0x00000121,0x00000122,0x00000123,0x000200f8,0x00000122,0x0003003e, + 0x0000011a,0x000000b9,0x0004003d,0x0000000e,0x00000124,0x00000117,0x00050080,0x0000000e, + 0x00000125,0x00000124,0x0000007e,0x0003003e,0x00000117,0x00000125,0x000200f9,0x00000123, + 0x000200f8,0x00000123,0x0004003d,0x0000000e,0x00000126,0x00000117,0x000500ac,0x00000055, + 0x00000127,0x00000126,0x0000010a,0x000400a8,0x00000055,0x00000128,0x00000127,0x000300f7, + 0x0000012a,0x00000000,0x000400fa,0x00000128,0x00000129,0x0000012a,0x000200f8,0x00000129, + 0x0004003d,0x0000000e,0x0000012b,0x00000117,0x000500aa,0x00000055,0x0000012c,0x0000012b, + 0x0000010a,0x0004003d,0x0000000e,0x0000012d,0x0000011a,0x000500ac,0x00000055,0x0000012f, + 0x0000012d,0x0000012e,0x000500a7,0x00000055,0x00000130,0x0000012c,0x0000012f,0x000200f9, + 0x0000012a,0x000200f8,0x0000012a,0x000700f5,0x00000055,0x00000131,0x00000127,0x00000123, + 0x00000130,0x00000129,0x000300f7,0x00000134,0x00000000,0x000400fa,0x00000131,0x00000133, + 0x00000135,0x000200f8,0x00000133,0x0003003e,0x00000132,0x000000f2,0x000200f9,0x00000134, + 0x000200f8,0x00000135,0x0004003d,0x0000000e,0x00000136,0x00000117,0x000500c4,0x0000000e, + 0x00000138,0x00000136,0x00000137,0x0004003d,0x0000000e,0x00000139,0x0000011a,0x000500c5, + 0x0000000e,0x0000013a,0x00000138,0x00000139,0x0003003e,0x00000132,0x0000013a,0x000200f9, + 0x00000134,0x000200f8,0x00000134,0x0004003d,0x0000000e,0x0000013b,0x00000132,0x0003003e, + 0x000000f1,0x0000013b,0x000200f9,0x000000f7,0x000200f8,0x000000f7,0x000200f9,0x000000f0, + 0x000200f8,0x000000f0,0x0004003d,0x0000000e,0x0000013c,0x000000de,0x0004003d,0x0000000e, + 0x0000013d,0x000000f1,0x000500c5,0x0000000e,0x0000013e,0x0000013c,0x0000013d,0x000200fe, + 0x0000013e,0x00010038,0x00050036,0x00000006,0x00000023,0x00000000,0x00000021,0x00030037, + 0x00000013,0x00000022,0x000200f8,0x00000024,0x0004003b,0x000000c1,0x00000141,0x00000007, + 0x0004003b,0x00000013,0x00000145,0x00000007,0x0004003b,0x00000013,0x00000149,0x00000007, + 0x0004003b,0x00000007,0x00000150,0x00000007,0x0004003b,0x00000007,0x0000016d,0x00000007, + 0x0004003d,0x0000000e,0x00000142,0x00000022,0x000500c7,0x0000000e,0x00000143,0x00000142, + 0x000000db,0x000500ab,0x00000055,0x00000144,0x00000143,0x000000b9,0x0003003e,0x00000141, + 0x00000144,0x0004003d,0x0000000e,0x00000146,0x00000022,0x000500c2,0x0000000e,0x00000147, + 0x00000146,0x00000137,0x000500c7,0x0000000e,0x00000148,0x00000147,0x0000010a,0x0003003e, + 0x00000145,0x00000148,0x0004003d,0x0000000e,0x0000014a,0x00000022,0x000500c7,0x0000000e, + 0x0000014b,0x0000014a,0x0000011b,0x0003003e,0x00000149,0x0000014b,0x0004003d,0x0000000e, + 0x0000014c,0x00000145,0x000500aa,0x00000055,0x0000014d,0x0000014c,0x000000b9,0x000300f7, + 0x0000014f,0x00000000,0x000400fa,0x0000014d,0x0000014e,0x00000155,0x000200f8,0x0000014e, + 0x0004003d,0x0000000e,0x00000151,0x00000149,0x00040070,0x00000006,0x00000152,0x00000151, + 0x00050085,0x00000006,0x00000154,0x00000152,0x00000153,0x0003003e,0x00000150,0x00000154, + 0x000200f9,0x0000014f,0x000200f8,0x00000155,0x0004003d,0x0000000e,0x00000156,0x00000145, + 0x000500aa,0x00000055,0x00000157,0x00000156,0x0000010a,0x0004003d,0x0000000e,0x00000158, + 0x00000149,0x000500aa,0x00000055,0x00000159,0x00000158,0x0000011b,0x000500a7,0x00000055, + 0x0000015a,0x00000157,0x00000159,0x000300f7,0x0000015c,0x00000000,0x000400fa,0x0000015a, + 0x0000015b,0x0000015e,0x000200f8,0x0000015b,0x0003003e,0x00000150,0x0000015d,0x000200f9, + 0x0000015c,0x000200f8,0x0000015e,0x0004003d,0x0000000e,0x00000160,0x00000149,0x00040070, + 0x00000006,0x00000161,0x00000160,0x00050085,0x00000006,0x00000163,0x00000161,0x00000162, + 0x00050081,0x00000006,0x00000164,0x0000015f,0x00000163,0x0004003d,0x0000000e,0x00000165, + 0x00000145,0x00050080,0x0000000e,0x00000167,0x00000165,0x00000166,0x000500c4,0x0000000e, + 0x00000169,0x00000167,0x00000168,0x0004007c,0x00000006,0x0000016a,0x00000169,0x00050085, + 0x00000006,0x0000016b,0x00000164,0x0000016a,0x0003003e,0x00000150,0x0000016b,0x000200f9, + 0x0000015c,0x000200f8,0x0000015c,0x000200f9,0x0000014f,0x000200f8,0x0000014f,0x0004003d, + 0x00000055,0x0000016c,0x00000141,0x000300f7,0x0000016f,0x00000000,0x000400fa,0x0000016c, + 0x0000016e,0x00000172,0x000200f8,0x0000016e,0x0004003d,0x00000006,0x00000170,0x00000150, + 0x0004007f,0x00000006,0x00000171,0x00000170,0x0003003e,0x0000016d,0x00000171,0x000200f9, + 0x0000016f,0x000200f8,0x00000172,0x0004003d,0x00000006,0x00000173,0x00000150,0x0003003e, + 0x0000016d,0x00000173,0x000200f9,0x0000016f,0x000200f8,0x0000016f,0x0004003d,0x00000006, + 0x00000174,0x0000016d,0x000200fe,0x00000174,0x00010038,0x00050036,0x0000000c,0x00000026, + 0x00000000,0x00000014,0x00030037,0x00000013,0x00000025,0x000200f8,0x00000027,0x0004003b, + 0x00000013,0x00000177,0x00000007,0x0004003d,0x0000000e,0x00000178,0x00000025,0x0003003e, + 0x00000177,0x00000178,0x00050039,0x00000006,0x00000179,0x00000023,0x00000177,0x00040073, + 0x0000000c,0x0000017a,0x00000179,0x000200fe,0x0000017a,0x00010038,0x00050036,0x00000006, + 0x0000002a,0x00000000,0x00000028,0x00030037,0x0000000d,0x00000029,0x000200f8,0x0000002b, + 0x0004003b,0x00000013,0x0000017d,0x00000007,0x0004003b,0x0000000d,0x0000017e,0x00000007, + 0x0004003b,0x00000007,0x00000184,0x00000007,0x0004003b,0x00000013,0x0000018e,0x00000007, + 0x0004003d,0x0000000c,0x0000017f,0x00000029,0x0003003e,0x0000017e,0x0000017f,0x00050039, + 0x0000000e,0x00000180,0x00000011,0x0000017e,0x0003003e,0x0000017d,0x00000180,0x0004003d, + 0x0000000e,0x00000181,0x0000017d,0x000500ae,0x00000055,0x00000183,0x00000181,0x00000182, + 0x000300f7,0x00000186,0x00000000,0x000400fa,0x00000183,0x00000185,0x00000188,0x000200f8, + 0x00000185,0x0003003e,0x00000184,0x00000187,0x000200f9,0x00000186,0x000200f8,0x00000188, + 0x0004003d,0x0000000c,0x0000018a,0x00000029,0x00040073,0x00000006,0x0000018b,0x0000018a, + 0x0004003d,0x0000000e,0x0000018c,0x0000017d,0x00050080,0x0000000e,0x0000018d,0x0000018c, + 0x0000007e,0x0003003e,0x0000018e,0x0000018d,0x00050039,0x0000000c,0x0000018f,0x00000016, + 0x0000018e,0x00040073,0x00000006,0x00000190,0x0000018f,0x00050081,0x00000006,0x00000191, + 0x0000018b,0x00000190,0x00050085,0x00000006,0x00000192,0x00000189,0x00000191,0x0003003e, + 0x00000184,0x00000192,0x000200f9,0x00000186,0x000200f8,0x00000186,0x0004003d,0x00000006, + 0x00000193,0x00000184,0x000200fe,0x00000193,0x00010038,0x00050036,0x00000006,0x0000002d, + 0x00000000,0x00000028,0x00030037,0x0000000d,0x0000002c,0x000200f8,0x0000002e,0x0004003b, + 0x0000000d,0x00000198,0x00000007,0x0004003b,0x00000013,0x0000019c,0x00000007,0x0004003d, + 0x0000000c,0x00000196,0x0000002c,0x00040073,0x00000006,0x00000197,0x00000196,0x0004003d, + 0x0000000c,0x00000199,0x0000002c,0x0003003e,0x00000198,0x00000199,0x00050039,0x0000000e, + 0x0000019a,0x00000011,0x00000198,0x00050082,0x0000000e,0x0000019b,0x0000019a,0x0000007e, + 0x0003003e,0x0000019c,0x0000019b,0x00050039,0x0000000c,0x0000019d,0x00000016,0x0000019c, + 0x00040073,0x00000006,0x0000019e,0x0000019d,0x00050081,0x00000006,0x0000019f,0x00000197, + 0x0000019e,0x00050085,0x00000006,0x000001a0,0x00000189,0x0000019f,0x000200fe,0x000001a0, + 0x00010038,0x00050036,0x0000000c,0x00000031,0x00000000,0x0000002f,0x00030037,0x0000000d, + 0x00000030,0x000200f8,0x00000032,0x0004003b,0x0000000d,0x000001a3,0x00000007,0x0004003b, + 0x00000013,0x000001a7,0x00000007,0x0004003d,0x0000000c,0x000001a4,0x00000030,0x0003003e, + 0x000001a3,0x000001a4,0x00050039,0x0000000e,0x000001a5,0x00000011,0x000001a3,0x00050080, + 0x0000000e,0x000001a6,0x000001a5,0x0000007e,0x0003003e,0x000001a7,0x000001a6,0x00050039, + 0x0000000c,0x000001a8,0x00000016,0x000001a7,0x000200fe,0x000001a8,0x00010038,0x00050036, + 0x0000000c,0x00000034,0x00000000,0x0000002f,0x00030037,0x0000000d,0x00000033,0x000200f8, + 0x00000035,0x0004003b,0x0000000d,0x000001ab,0x00000007,0x0004003b,0x00000013,0x000001af, + 0x00000007,0x0004003d,0x0000000c,0x000001ac,0x00000033,0x0003003e,0x000001ab,0x000001ac, + 0x00050039,0x0000000e,0x000001ad,0x00000011,0x000001ab,0x00050082,0x0000000e,0x000001ae, + 0x000001ad,0x0000007e,0x0003003e,0x000001af,0x000001ae,0x00050039,0x0000000c,0x000001b0, + 0x00000016,0x000001af,0x000200fe,0x000001b0,0x00010038,0x00050036,0x0000000c,0x00000037, + 0x00000000,0x0000002f,0x00030037,0x0000000d,0x00000036,0x000200f8,0x00000038,0x0004003b, + 0x00000007,0x000001b3,0x00000007,0x0004003b,0x0000000d,0x000001c5,0x00000007,0x0004003b, + 0x00000007,0x000001c8,0x00000007,0x0004003b,0x000001d6,0x000001d7,0x00000007,0x0004003b, + 0x00000007,0x000001e1,0x00000007,0x0004003b,0x0000000d,0x000001e2,0x00000007,0x0004003b, + 0x0000000d,0x000001eb,0x00000007,0x0004003b,0x00000007,0x000001ee,0x00000007,0x0004003b, + 0x0000000d,0x000001ef,0x00000007,0x0004003b,0x0000000d,0x000001fb,0x00000007,0x0004003d, + 0x0000000c,0x000001b4,0x00000036,0x00040073,0x00000006,0x000001b5,0x000001b4,0x0003003e, + 0x000001b3,0x000001b5,0x0004003d,0x00000006,0x000001b6,0x000001b3,0x000500ba,0x00000055, + 0x000001b7,0x000001b6,0x0000015d,0x000400a8,0x00000055,0x000001b8,0x000001b7,0x000400a8, + 0x00000055,0x000001b9,0x000001b8,0x000300f7,0x000001bb,0x00000000,0x000400fa,0x000001b9, + 0x000001ba,0x000001bb,0x000200f8,0x000001ba,0x0004003d,0x00000006,0x000001bc,0x000001b3, + 0x0004009d,0x00000055,0x000001bd,0x000001bc,0x000200f9,0x000001bb,0x000200f8,0x000001bb, + 0x000700f5,0x00000055,0x000001be,0x000001b8,0x00000038,0x000001bd,0x000001ba,0x000300f7, + 0x000001c0,0x00000000,0x000400fa,0x000001be,0x000001bf,0x000001c0,0x000200f8,0x000001bf, + 0x0004003d,0x00000006,0x000001c1,0x000001b3,0x00050088,0x00000006,0x000001c2,0x0000015f, + 0x000001c1,0x00040073,0x0000000c,0x000001c3,0x000001c2,0x000200fe,0x000001c3,0x000200f8, + 0x000001c0,0x0004003d,0x00000006,0x000001c6,0x000001b3,0x00050088,0x00000006,0x000001c7, + 0x0000015f,0x000001c6,0x0003003e,0x000001c8,0x000001c7,0x00050039,0x00000006,0x000001c9, + 0x0000000a,0x000001c8,0x00040073,0x0000000c,0x000001ca,0x000001c9,0x0003003e,0x000001c5, + 0x000001ca,0x0004003d,0x0000000c,0x000001cb,0x000001c5,0x0004009d,0x00000055,0x000001cc, + 0x000001cb,0x0004003d,0x0000000c,0x000001cd,0x000001c5,0x000500b4,0x00000055,0x000001cf, + 0x000001cd,0x000001ce,0x000500a6,0x00000055,0x000001d0,0x000001cc,0x000001cf,0x000300f7, + 0x000001d2,0x00000000,0x000400fa,0x000001d0,0x000001d1,0x000001d2,0x000200f8,0x000001d1, + 0x0004003d,0x0000000c,0x000001d3,0x000001c5,0x000200fe,0x000001d3,0x000200f8,0x000001d2, + 0x0003003e,0x000001d7,0x000001d8,0x000200f9,0x000001d9,0x000200f8,0x000001d9,0x000400f6, + 0x000001db,0x000001dc,0x00000000,0x000200f9,0x000001dd,0x000200f8,0x000001dd,0x0004003d, + 0x000001d5,0x000001de,0x000001d7,0x000500b1,0x00000055,0x000001e0,0x000001de,0x000001df, + 0x000400fa,0x000001e0,0x000001da,0x000001db,0x000200f8,0x000001da,0x0004003d,0x0000000c, + 0x000001e3,0x000001c5,0x0003003e,0x000001e2,0x000001e3,0x00050039,0x00000006,0x000001e4, + 0x0000002a,0x000001e2,0x0004003d,0x00000006,0x000001e5,0x000001b3,0x00050085,0x00000006, + 0x000001e6,0x000001e4,0x000001e5,0x0003003e,0x000001e1,0x000001e6,0x0004003d,0x00000006, + 0x000001e7,0x000001e1,0x000500b8,0x00000055,0x000001e8,0x000001e7,0x0000015f,0x000300f7, + 0x000001ea,0x00000000,0x000400fa,0x000001e8,0x000001e9,0x000001ea,0x000200f8,0x000001e9, + 0x0004003d,0x0000000c,0x000001ec,0x000001c5,0x0003003e,0x000001eb,0x000001ec,0x00050039, + 0x0000000c,0x000001ed,0x00000031,0x000001eb,0x0003003e,0x000001c5,0x000001ed,0x000200f9, + 0x000001ea,0x000200f8,0x000001ea,0x0004003d,0x0000000c,0x000001f0,0x000001c5,0x0003003e, + 0x000001ef,0x000001f0,0x00050039,0x00000006,0x000001f1,0x0000002d,0x000001ef,0x0004003d, + 0x00000006,0x000001f2,0x000001b3,0x00050085,0x00000006,0x000001f3,0x000001f1,0x000001f2, + 0x0003003e,0x000001ee,0x000001f3,0x0004003d,0x0000000c,0x000001f4,0x000001c5,0x000500ba, + 0x00000055,0x000001f5,0x000001f4,0x000001ce,0x0004003d,0x00000006,0x000001f6,0x000001ee, + 0x000500ba,0x00000055,0x000001f7,0x000001f6,0x0000015f,0x000500a7,0x00000055,0x000001f8, + 0x000001f5,0x000001f7,0x000300f7,0x000001fa,0x00000000,0x000400fa,0x000001f8,0x000001f9, + 0x000001fa,0x000200f8,0x000001f9,0x0004003d,0x0000000c,0x000001fc,0x000001c5,0x0003003e, + 0x000001fb,0x000001fc,0x00050039,0x0000000c,0x000001fd,0x00000034,0x000001fb,0x0003003e, + 0x000001c5,0x000001fd,0x000200f9,0x000001fa,0x000200f8,0x000001fa,0x000200f9,0x000001dc, + 0x000200f8,0x000001dc,0x0004003d,0x000001d5,0x000001fe,0x000001d7,0x00050080,0x000001d5, + 0x00000200,0x000001fe,0x000001ff,0x0003003e,0x000001d7,0x00000200,0x000200f9,0x000001d9, + 0x000200f8,0x000001db,0x0004003d,0x0000000c,0x00000201,0x000001c5,0x000200fe,0x00000201, + 0x00010038,0x00050036,0x0000000e,0x0000003a,0x00000000,0x0000001d,0x00030037,0x00000013, + 0x00000039,0x000200f8,0x0000003b,0x0004003b,0x00000013,0x00000204,0x00000007,0x0004003b, + 0x00000013,0x00000208,0x00000007,0x0004003b,0x00000013,0x0000020b,0x00000007,0x0004003b, + 0x00000013,0x00000212,0x00000007,0x0004003d,0x0000000e,0x00000205,0x00000039,0x000500c2, + 0x0000000e,0x00000207,0x00000205,0x00000206,0x0003003e,0x00000204,0x00000207,0x0004003d, + 0x0000000e,0x00000209,0x00000039,0x000500c7,0x0000000e,0x0000020a,0x00000209,0x0000010a, + 0x0003003e,0x00000208,0x0000020a,0x0004003d,0x0000000e,0x0000020c,0x00000204,0x000500c7, + 0x0000000e,0x0000020d,0x0000020c,0x0000007e,0x00050084,0x0000000e,0x0000020e,0x0000020d, + 0x00000206,0x0004003d,0x0000000e,0x0000020f,0x00000208,0x000500c7,0x0000000e,0x00000210, + 0x0000020f,0x00000137,0x00050080,0x0000000e,0x00000211,0x0000020e,0x00000210,0x0003003e, + 0x0000020b,0x00000211,0x0004003d,0x0000000e,0x00000213,0x00000204,0x000500c2,0x0000000e, + 0x00000214,0x00000213,0x0000007e,0x00050084,0x0000000e,0x00000215,0x00000214,0x00000206, + 0x0004003d,0x0000000e,0x00000216,0x00000208,0x000500c2,0x0000000e,0x00000218,0x00000216, + 0x00000217,0x00050080,0x0000000e,0x00000219,0x00000215,0x00000218,0x0003003e,0x00000212, + 0x00000219,0x0004003d,0x0000000e,0x0000021a,0x00000212,0x00050084,0x0000000e,0x0000021b, + 0x0000021a,0x000000d9,0x0004003d,0x0000000e,0x0000021c,0x0000020b,0x00050080,0x0000000e, + 0x0000021d,0x0000021b,0x0000021c,0x000200fe,0x0000021d,0x00010038,0x00050036,0x0000000c, + 0x0000003d,0x00000000,0x0000002f,0x00030037,0x0000000d,0x0000003c,0x000200f8,0x0000003e, + 0x0004003b,0x00000007,0x00000220,0x00000007,0x0004003b,0x0000000d,0x00000226,0x00000007, + 0x0004003b,0x00000007,0x00000227,0x00000007,0x0004003b,0x00000013,0x0000022e,0x00000007, + 0x0004003b,0x0000000d,0x0000022f,0x00000007,0x0004003b,0x00000013,0x00000232,0x00000007, + 0x0004003b,0x00000013,0x00000238,0x00000007,0x0004003d,0x0000000c,0x00000221,0x0000003c, + 0x00040073,0x00000006,0x00000222,0x00000221,0x0008000c,0x00000006,0x00000225,0x00000001, + 0x00000032,0x00000222,0x00000223,0x00000224,0x0003003e,0x00000220,0x00000225,0x0004003d, + 0x00000006,0x00000228,0x00000220,0x0003003e,0x00000227,0x00000228,0x00050039,0x00000006, + 0x00000229,0x0000000a,0x00000227,0x00040073,0x0000000c,0x0000022a,0x00000229,0x0008000c, + 0x0000000c,0x0000022d,0x00000001,0x0000002b,0x0000022a,0x0000022b,0x0000022c,0x0003003e, + 0x00000226,0x0000022d,0x0004003d,0x0000000c,0x00000230,0x00000226,0x0003003e,0x0000022f, + 0x00000230,0x00050039,0x0000000e,0x00000231,0x00000011,0x0000022f,0x0003003e,0x0000022e, + 0x00000231,0x0004003d,0x0000000e,0x00000233,0x0000022e,0x000500c4,0x0000000e,0x00000235, + 0x00000233,0x00000234,0x00050080,0x0000000e,0x00000236,0x00000235,0x000000e0,0x000500c7, + 0x0000000e,0x00000237,0x00000236,0x00000095,0x0003003e,0x00000232,0x00000237,0x0004003d, + 0x0000000e,0x00000239,0x00000232,0x0003003e,0x00000238,0x00000239,0x00050039,0x0000000c, + 0x0000023a,0x00000016,0x00000238,0x000200fe,0x0000023a,0x00010038,0x00050036,0x0000000c, + 0x00000043,0x00000000,0x0000003f,0x00030037,0x00000013,0x00000040,0x00030037,0x00000013, + 0x00000041,0x00030037,0x00000013,0x00000042,0x000200f8,0x00000044,0x0004003b,0x00000013, + 0x0000023d,0x00000007,0x0004003b,0x0000000d,0x00000242,0x00000007,0x0004003b,0x0000000d, + 0x00000257,0x00000007,0x0004003b,0x0000000d,0x00000268,0x00000007,0x0004003b,0x0000000d, + 0x0000027a,0x00000007,0x0004003b,0x0000000d,0x0000028c,0x00000007,0x0004003b,0x0000000d, + 0x00000290,0x00000007,0x0004003d,0x0000000e,0x0000023e,0x00000041,0x00050084,0x0000000e, + 0x0000023f,0x0000023e,0x00000217,0x0004003d,0x0000000e,0x00000240,0x00000042,0x00050080, + 0x0000000e,0x00000241,0x0000023f,0x00000240,0x0003003e,0x0000023d,0x00000241,0x0004003d, + 0x0000000e,0x00000247,0x00000040,0x00050084,0x0000000e,0x00000249,0x00000247,0x00000248, + 0x0004003d,0x0000000e,0x0000024a,0x0000023d,0x00050080,0x0000000e,0x0000024b,0x00000249, + 0x0000024a,0x00050041,0x0000024c,0x0000024d,0x00000246,0x0000024b,0x0006003d,0x0000000c, + 0x0000024e,0x0000024d,0x00000030,0x00000217,0x0004003d,0x0000000e,0x0000024f,0x00000040, + 0x00050084,0x0000000e,0x00000250,0x0000024f,0x00000248,0x0004003d,0x0000000e,0x00000251, + 0x0000023d,0x00050080,0x0000000e,0x00000252,0x00000250,0x00000251,0x00050080,0x0000000e, + 0x00000253,0x00000252,0x000000d9,0x00050041,0x0000024c,0x00000254,0x00000246,0x00000253, + 0x0006003d,0x0000000c,0x00000255,0x00000254,0x00000030,0x00000217,0x00050081,0x0000000c, + 0x00000256,0x0000024e,0x00000255,0x0003003e,0x00000242,0x00000256,0x0004003d,0x0000000e, + 0x00000258,0x00000040,0x00050084,0x0000000e,0x00000259,0x00000258,0x00000248,0x0004003d, + 0x0000000e,0x0000025a,0x0000023d,0x00050080,0x0000000e,0x0000025b,0x00000259,0x0000025a, + 0x00050080,0x0000000e,0x0000025c,0x0000025b,0x0000010c,0x00050041,0x0000024c,0x0000025d, + 0x00000246,0x0000025c,0x0006003d,0x0000000c,0x0000025e,0x0000025d,0x00000030,0x00000217, + 0x0004003d,0x0000000e,0x0000025f,0x00000040,0x00050084,0x0000000e,0x00000260,0x0000025f, + 0x00000248,0x0004003d,0x0000000e,0x00000261,0x0000023d,0x00050080,0x0000000e,0x00000262, + 0x00000260,0x00000261,0x00050080,0x0000000e,0x00000264,0x00000262,0x00000263,0x00050041, + 0x0000024c,0x00000265,0x00000246,0x00000264,0x0006003d,0x0000000c,0x00000266,0x00000265, + 0x00000030,0x00000217,0x00050081,0x0000000c,0x00000267,0x0000025e,0x00000266,0x0003003e, + 0x00000257,0x00000267,0x0004003d,0x0000000e,0x00000269,0x00000040,0x00050084,0x0000000e, + 0x0000026a,0x00000269,0x00000248,0x0004003d,0x0000000e,0x0000026b,0x0000023d,0x00050080, + 0x0000000e,0x0000026c,0x0000026a,0x0000026b,0x00050080,0x0000000e,0x0000026e,0x0000026c, + 0x0000026d,0x00050041,0x0000024c,0x0000026f,0x00000246,0x0000026e,0x0006003d,0x0000000c, + 0x00000270,0x0000026f,0x00000030,0x00000217,0x0004003d,0x0000000e,0x00000271,0x00000040, + 0x00050084,0x0000000e,0x00000272,0x00000271,0x00000248,0x0004003d,0x0000000e,0x00000273, + 0x0000023d,0x00050080,0x0000000e,0x00000274,0x00000272,0x00000273,0x00050080,0x0000000e, + 0x00000276,0x00000274,0x00000275,0x00050041,0x0000024c,0x00000277,0x00000246,0x00000276, + 0x0006003d,0x0000000c,0x00000278,0x00000277,0x00000030,0x00000217,0x00050081,0x0000000c, + 0x00000279,0x00000270,0x00000278,0x0003003e,0x00000268,0x00000279,0x0004003d,0x0000000e, + 0x0000027b,0x00000040,0x00050084,0x0000000e,0x0000027c,0x0000027b,0x00000248,0x0004003d, + 0x0000000e,0x0000027d,0x0000023d,0x00050080,0x0000000e,0x0000027e,0x0000027c,0x0000027d, + 0x00050080,0x0000000e,0x00000280,0x0000027e,0x0000027f,0x00050041,0x0000024c,0x00000281, + 0x00000246,0x00000280,0x0006003d,0x0000000c,0x00000282,0x00000281,0x00000030,0x00000217, + 0x0004003d,0x0000000e,0x00000283,0x00000040,0x00050084,0x0000000e,0x00000284,0x00000283, + 0x00000248,0x0004003d,0x0000000e,0x00000285,0x0000023d,0x00050080,0x0000000e,0x00000286, + 0x00000284,0x00000285,0x00050080,0x0000000e,0x00000288,0x00000286,0x00000287,0x00050041, + 0x0000024c,0x00000289,0x00000246,0x00000288,0x0006003d,0x0000000c,0x0000028a,0x00000289, + 0x00000030,0x00000217,0x00050081,0x0000000c,0x0000028b,0x00000282,0x0000028a,0x0003003e, + 0x0000027a,0x0000028b,0x0004003d,0x0000000c,0x0000028d,0x00000242,0x0004003d,0x0000000c, + 0x0000028e,0x00000257,0x00050081,0x0000000c,0x0000028f,0x0000028d,0x0000028e,0x0003003e, + 0x0000028c,0x0000028f,0x0004003d,0x0000000c,0x00000291,0x0000028c,0x0004003d,0x0000000c, + 0x00000292,0x00000268,0x00050081,0x0000000c,0x00000293,0x00000291,0x00000292,0x0003003e, + 0x00000290,0x00000293,0x0004003d,0x0000000c,0x00000294,0x00000290,0x0004003d,0x0000000c, + 0x00000295,0x0000027a,0x00050081,0x0000000c,0x00000296,0x00000294,0x00000295,0x000200fe, + 0x00000296,0x00010038,0x00050036,0x0000000c,0x00000046,0x00000000,0x00000014,0x00030037, + 0x00000013,0x00000045,0x000200f8,0x00000047,0x0004003b,0x0000000d,0x00000299,0x00000007, + 0x0004003b,0x00000013,0x0000029a,0x00000007,0x0004003b,0x00000013,0x0000029c,0x00000007, + 0x0004003b,0x00000013,0x0000029d,0x00000007,0x0004003b,0x00000013,0x0000029f,0x00000007, + 0x0004003b,0x00000013,0x000002a1,0x00000007,0x0004003b,0x00000013,0x000002a2,0x00000007, + 0x0004003b,0x0000000d,0x000002a5,0x00000007,0x0004003b,0x00000013,0x000002a7,0x00000007, + 0x0004003b,0x00000013,0x000002a9,0x00000007,0x0004003b,0x00000013,0x000002aa,0x00000007, + 0x0004003b,0x0000000d,0x000002ad,0x00000007,0x0004003b,0x00000013,0x000002af,0x00000007, + 0x0004003b,0x00000013,0x000002b1,0x00000007,0x0004003b,0x00000013,0x000002b2,0x00000007, + 0x0004003b,0x0000000d,0x000002b5,0x00000007,0x0004003b,0x00000013,0x000002b6,0x00000007, + 0x0004003b,0x00000013,0x000002b8,0x00000007,0x0004003b,0x00000013,0x000002b9,0x00000007, + 0x0004003b,0x00000013,0x000002bb,0x00000007,0x0004003b,0x00000013,0x000002bd,0x00000007, + 0x0004003b,0x00000013,0x000002be,0x00000007,0x0004003b,0x0000000d,0x000002c1,0x00000007, + 0x0004003b,0x00000013,0x000002c3,0x00000007,0x0004003b,0x00000013,0x000002c5,0x00000007, + 0x0004003b,0x00000013,0x000002c6,0x00000007,0x0004003b,0x0000000d,0x000002c9,0x00000007, + 0x0004003b,0x00000013,0x000002cb,0x00000007,0x0004003b,0x00000013,0x000002cd,0x00000007, + 0x0004003b,0x00000013,0x000002ce,0x00000007,0x0004003d,0x0000000e,0x0000029b,0x00000045, + 0x0003003e,0x0000029a,0x0000029b,0x0003003e,0x0000029c,0x000000b9,0x0003003e,0x0000029d, + 0x000000b9,0x00070039,0x0000000c,0x0000029e,0x00000043,0x0000029a,0x0000029c,0x0000029d, + 0x0004003d,0x0000000e,0x000002a0,0x00000045,0x0003003e,0x0000029f,0x000002a0,0x0003003e, + 0x000002a1,0x0000007e,0x0003003e,0x000002a2,0x000000b9,0x00070039,0x0000000c,0x000002a3, + 0x00000043,0x0000029f,0x000002a1,0x000002a2,0x00050081,0x0000000c,0x000002a4,0x0000029e, + 0x000002a3,0x0003003e,0x00000299,0x000002a4,0x0004003d,0x0000000c,0x000002a6,0x00000299, + 0x0004003d,0x0000000e,0x000002a8,0x00000045,0x0003003e,0x000002a7,0x000002a8,0x0003003e, + 0x000002a9,0x00000217,0x0003003e,0x000002aa,0x000000b9,0x00070039,0x0000000c,0x000002ab, + 0x00000043,0x000002a7,0x000002a9,0x000002aa,0x00050081,0x0000000c,0x000002ac,0x000002a6, + 0x000002ab,0x0003003e,0x000002a5,0x000002ac,0x0004003d,0x0000000c,0x000002ae,0x000002a5, + 0x0004003d,0x0000000e,0x000002b0,0x00000045,0x0003003e,0x000002af,0x000002b0,0x0003003e, + 0x000002b1,0x00000137,0x0003003e,0x000002b2,0x000000b9,0x00070039,0x0000000c,0x000002b3, + 0x00000043,0x000002af,0x000002b1,0x000002b2,0x00050081,0x0000000c,0x000002b4,0x000002ae, + 0x000002b3,0x0003003e,0x000002ad,0x000002b4,0x0004003d,0x0000000e,0x000002b7,0x00000045, + 0x0003003e,0x000002b6,0x000002b7,0x0003003e,0x000002b8,0x000000b9,0x0003003e,0x000002b9, + 0x0000007e,0x00070039,0x0000000c,0x000002ba,0x00000043,0x000002b6,0x000002b8,0x000002b9, + 0x0004003d,0x0000000e,0x000002bc,0x00000045,0x0003003e,0x000002bb,0x000002bc,0x0003003e, + 0x000002bd,0x0000007e,0x0003003e,0x000002be,0x0000007e,0x00070039,0x0000000c,0x000002bf, + 0x00000043,0x000002bb,0x000002bd,0x000002be,0x00050081,0x0000000c,0x000002c0,0x000002ba, + 0x000002bf,0x0003003e,0x000002b5,0x000002c0,0x0004003d,0x0000000c,0x000002c2,0x000002b5, + 0x0004003d,0x0000000e,0x000002c4,0x00000045,0x0003003e,0x000002c3,0x000002c4,0x0003003e, + 0x000002c5,0x00000217,0x0003003e,0x000002c6,0x0000007e,0x00070039,0x0000000c,0x000002c7, + 0x00000043,0x000002c3,0x000002c5,0x000002c6,0x00050081,0x0000000c,0x000002c8,0x000002c2, + 0x000002c7,0x0003003e,0x000002c1,0x000002c8,0x0004003d,0x0000000c,0x000002ca,0x000002c1, + 0x0004003d,0x0000000e,0x000002cc,0x00000045,0x0003003e,0x000002cb,0x000002cc,0x0003003e, + 0x000002cd,0x00000137,0x0003003e,0x000002ce,0x0000007e,0x00070039,0x0000000c,0x000002cf, + 0x00000043,0x000002cb,0x000002cd,0x000002ce,0x00050081,0x0000000c,0x000002d0,0x000002ca, + 0x000002cf,0x0003003e,0x000002c9,0x000002d0,0x0004003d,0x0000000c,0x000002d1,0x000002ad, + 0x0004003d,0x0000000c,0x000002d2,0x000002c9,0x00050081,0x0000000c,0x000002d3,0x000002d1, + 0x000002d2,0x000200fe,0x000002d3,0x00010038, +}; +inline constexpr uint32_t k_f16_k8_f32__global_attend[] = { + 0x07230203,0x00010600,0x0008000b,0x00000554,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x0000003d,0x00020011,0x00001160,0x00020011, + 0x000014e1,0x00020011,0x00001786,0x0008000a,0x5f565053,0x5f52484b,0x706f6f63,0x74617265, + 0x5f657669,0x7274616d,0x00007869,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e, + 0x00000000,0x0003000e,0x00000000,0x00000003,0x0011000f,0x00000005,0x00000004,0x6e69616d, + 0x00000000,0x00000297,0x00000321,0x00000326,0x0000032f,0x0000034b,0x00000351,0x0000037a, + 0x00000391,0x000003f8,0x0000043f,0x00000467,0x0000053f,0x00060010,0x00000004,0x00000011, + 0x00000020,0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc,0x00090004,0x455f4c47, + 0x635f5458,0x72746e6f,0x665f6c6f,0x5f776f6c,0x72747461,0x74756269,0x00007365,0x00080004, + 0x455f4c47,0x735f5458,0x65646168,0x36315f72,0x5f746962,0x726f7473,0x00656761,0x00080004, + 0x455f4c47,0x735f5458,0x65646168,0x62385f72,0x735f7469,0x61726f74,0x00006567,0x000b0004, + 0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d, + 0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79, + 0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45, + 0x64756c63,0x69645f65,0x74636572,0x00657669,0x00080004,0x4b5f4c47,0x635f5248,0x65706f6f, + 0x69746172,0x6d5f6576,0x69727461,0x00000078,0x00090004,0x4b5f4c47,0x6d5f5248,0x726f6d65, + 0x63735f79,0x5f65706f,0x616d6573,0x6369746e,0x00000073,0x00090004,0x4b5f4c47,0x735f5248, + 0x65646168,0x75735f72,0x6f726762,0x625f7075,0x63697361,0x00000000,0x00040005,0x00000004, + 0x6e69616d,0x00000000,0x00060005,0x0000000a,0x6e756f72,0x36314664,0x3b316628,0x00000000, + 0x00040005,0x00000009,0x756c6176,0x00000065,0x00060005,0x00000011,0x42363166,0x28737469, + 0x31363166,0x0000003b,0x00040005,0x00000010,0x756c6176,0x00000065,0x00060005,0x00000016, + 0x46363166,0x426d6f72,0x28737469,0x003b3175,0x00040005,0x00000015,0x73746962,0x00000000, + 0x00060005,0x0000001b,0x66696873,0x656e5274,0x3b317528,0x003b3175,0x00040005,0x00000019, + 0x756c6176,0x00000065,0x00040005,0x0000001a,0x66696873,0x00000074,0x00080005,0x0000001f, + 0x336d3465,0x65646f43,0x6d6f7246,0x42363146,0x28737469,0x003b3175,0x00050005,0x0000001e, + 0x666c6168,0x73746942,0x00000000,0x00060005,0x00000023,0x336d3465,0x33466f54,0x31752832, + 0x0000003b,0x00040005,0x00000022,0x73746962,0x00000000,0x00060005,0x00000026,0x7246706f, + 0x6f436d6f,0x75286564,0x00003b31,0x00040005,0x00000025,0x65646f63,0x00000000,0x00080005, + 0x0000002a,0x666c6168,0x7064694d,0x746e696f,0x766f6241,0x31662865,0x003b3136,0x00030005, + 0x00000029,0x00000068,0x00080005,0x0000002d,0x666c6168,0x7064694d,0x746e696f,0x6f6c6542, + 0x31662877,0x003b3136,0x00030005,0x0000002c,0x00000068,0x00060005,0x00000031,0x666c6168, + 0x766f6241,0x31662865,0x003b3136,0x00030005,0x00000030,0x00000068,0x00060005,0x00000034, + 0x666c6168,0x6f6c6542,0x31662877,0x003b3136,0x00030005,0x00000033,0x00000068,0x00080005, + 0x00000037,0x69636572,0x636f7270,0x61486c61,0x6628666c,0x3b313631,0x00000000,0x00030005, + 0x00000036,0x00000078,0x00080005,0x0000003d,0x48616d66,0x28666c61,0x31363166,0x3631663b, + 0x31663b31,0x003b3136,0x00030005,0x0000003a,0x00000061,0x00030005,0x0000003b,0x00000062, + 0x00030005,0x0000003c,0x00000063,0x00070005,0x00000040,0x45746976,0x65577078,0x74686769, + 0x36316628,0x00003b31,0x00040005,0x0000003f,0x726f6373,0x00000065,0x00090005,0x00000047, + 0x74666f73,0x5078616d,0x28726961,0x753b3175,0x31753b31,0x3b31753b,0x00000000,0x00030005, + 0x00000043,0x00776f72,0x00040005,0x00000044,0x65736162,0x00000000,0x00040005,0x00000045, + 0x72696170,0x00000000,0x00040005,0x00000046,0x69726170,0x00007974,0x00070005,0x0000004c, + 0x74666f73,0x3678616d,0x31752834,0x3b31753b,0x00000000,0x00030005,0x0000004a,0x00776f72, + 0x00040005,0x0000004b,0x65736162,0x00000000,0x00040005,0x0000004e,0x73746962,0x00000000, + 0x00040005,0x00000051,0x6e676973,0x00000000,0x00050005,0x00000055,0x6e67616d,0x64757469, + 0x00000065,0x00040005,0x0000006f,0x6c616373,0x00006465,0x00030005,0x00000080,0x0062736c, + 0x00040005,0x00000086,0x6e756f72,0x00646564,0x00050005,0x000000a1,0x746f7571,0x746e6569, + 0x00000000,0x00060005,0x000000a5,0x616d6572,0x65646e69,0x73614d72,0x0000006b,0x00050005, + 0x000000a9,0x616d6572,0x65646e69,0x00000072,0x00040005,0x000000ad,0x666c6168,0x00796177, + 0x00040005,0x000000c8,0x614e7369,0x0000006e,0x00050005,0x000000e4,0x6167656e,0x65766974, + 0x00000000,0x00050005,0x000000ea,0x6f707865,0x746e656e,0x00000000,0x00050005,0x000000f0, + 0x746e616d,0x61737369,0x00000000,0x00040005,0x000000f7,0x65646f63,0x00000000,0x00050005, + 0x000000fe,0x6e676973,0x63696669,0x00646e61,0x00040005,0x0000010a,0x66696873,0x00000074, + 0x00040005,0x00000116,0x61726170,0x0000006d,0x00040005,0x00000118,0x61726170,0x0000006d, + 0x00050005,0x0000011d,0x78453465,0x656e6f70,0x0000746e,0x00050005,0x00000120,0x614d3465, + 0x7369746e,0x00006173,0x00040005,0x00000122,0x61726170,0x0000006d,0x00040005,0x00000124, + 0x61726170,0x0000006d,0x00050005,0x00000147,0x6167656e,0x65766974,0x00000000,0x00050005, + 0x0000014b,0x6f707865,0x746e656e,0x00000000,0x00050005,0x0000014f,0x746e616d,0x61737369, + 0x00000000,0x00040005,0x00000156,0x756c6176,0x00000065,0x00040005,0x0000017d,0x61726170, + 0x0000006d,0x00040005,0x00000183,0x73746962,0x00000000,0x00040005,0x00000184,0x61726170, + 0x0000006d,0x00040005,0x00000194,0x61726170,0x0000006d,0x00040005,0x0000019e,0x61726170, + 0x0000006d,0x00040005,0x000001a2,0x61726170,0x0000006d,0x00040005,0x000001a9,0x61726170, + 0x0000006d,0x00040005,0x000001ad,0x61726170,0x0000006d,0x00040005,0x000001b1,0x61726170, + 0x0000006d,0x00040005,0x000001b5,0x61726170,0x0000006d,0x00030005,0x000001b9,0x00006678, + 0x00030005,0x000001cb,0x00000068,0x00040005,0x000001ce,0x61726170,0x0000006d,0x00030005, + 0x000001dd,0x00000069,0x00030005,0x000001e7,0x00007075,0x00040005,0x000001e8,0x61726170, + 0x0000006d,0x00040005,0x000001f1,0x61726170,0x0000006d,0x00040005,0x000001f4,0x6e776f64, + 0x00000000,0x00040005,0x000001f5,0x61726170,0x0000006d,0x00040005,0x00000201,0x61726170, + 0x0000006d,0x00030005,0x0000020a,0x00000070,0x00030005,0x00000210,0x00000074,0x00030005, + 0x00000215,0x00007662,0x00030005,0x00000219,0x00007661,0x00030005,0x0000021d,0x00000065, + 0x00050005,0x00000230,0x6f707865,0x746e656e,0x00000000,0x00030005,0x0000023c,0x00706c75, + 0x00040005,0x00000244,0x70657473,0x00000073,0x00040005,0x00000261,0x61726170,0x0000006d, + 0x00040005,0x00000265,0x61726170,0x0000006d,0x00040005,0x0000026b,0x69666661,0x0000656e, + 0x00040005,0x0000026e,0x61726170,0x0000006d,0x00040005,0x00000270,0x61726170,0x0000006d, + 0x00040005,0x00000271,0x61726170,0x0000006d,0x00040005,0x00000277,0x73746962,0x00000000, + 0x00040005,0x00000278,0x61726170,0x0000006d,0x00060005,0x0000027b,0x6f707865,0x746e656e, + 0x426c6169,0x00737469,0x00040005,0x00000282,0x61726170,0x0000006d,0x00030005,0x00000287, + 0x0079656b,0x00060005,0x00000289,0x44444150,0x545f4445,0x4e454b4f,0x00000053,0x00030005, + 0x00000293,0x00000061,0x00040005,0x00000297,0x726f6373,0x00007365,0x00030005,0x000002a1, + 0x00000062,0x00030005,0x000002ac,0x00000063,0x00030005,0x000002b8,0x00000064,0x00030005, + 0x000002c4,0x00006261,0x00030005,0x000002c8,0x00636261,0x00030005,0x000002d1,0x00003065, + 0x00040005,0x000002d2,0x61726170,0x0000006d,0x00040005,0x000002d4,0x61726170,0x0000006d, + 0x00040005,0x000002d6,0x61726170,0x0000006d,0x00040005,0x000002d7,0x61726170,0x0000006d, + 0x00040005,0x000002d9,0x61726170,0x0000006d,0x00040005,0x000002db,0x61726170,0x0000006d, + 0x00040005,0x000002dd,0x61726170,0x0000006d,0x00040005,0x000002de,0x61726170,0x0000006d, + 0x00030005,0x000002e1,0x00003165,0x00040005,0x000002e3,0x61726170,0x0000006d,0x00040005, + 0x000002e5,0x61726170,0x0000006d,0x00040005,0x000002e7,0x61726170,0x0000006d,0x00040005, + 0x000002e8,0x61726170,0x0000006d,0x00040005,0x000002eb,0x6e657665,0x00000000,0x00040005, + 0x000002ed,0x61726170,0x0000006d,0x00040005,0x000002ef,0x61726170,0x0000006d,0x00040005, + 0x000002f1,0x61726170,0x0000006d,0x00040005,0x000002f2,0x61726170,0x0000006d,0x00030005, + 0x000002f5,0x0000306f,0x00040005,0x000002f6,0x61726170,0x0000006d,0x00040005,0x000002f8, + 0x61726170,0x0000006d,0x00040005,0x000002fa,0x61726170,0x0000006d,0x00040005,0x000002fb, + 0x61726170,0x0000006d,0x00040005,0x000002fd,0x61726170,0x0000006d,0x00040005,0x000002ff, + 0x61726170,0x0000006d,0x00040005,0x00000301,0x61726170,0x0000006d,0x00040005,0x00000302, + 0x61726170,0x0000006d,0x00030005,0x00000305,0x0000316f,0x00040005,0x00000307,0x61726170, + 0x0000006d,0x00040005,0x00000309,0x61726170,0x0000006d,0x00040005,0x0000030b,0x61726170, + 0x0000006d,0x00040005,0x0000030c,0x61726170,0x0000006d,0x00030005,0x0000030f,0x0064646f, + 0x00040005,0x00000311,0x61726170,0x0000006d,0x00040005,0x00000313,0x61726170,0x0000006d, + 0x00040005,0x00000315,0x61726170,0x0000006d,0x00040005,0x00000316,0x61726170,0x0000006d, + 0x00040005,0x0000031e,0x656e616c,0x00000000,0x00080005,0x00000321,0x4c5f6c67,0x6c61636f, + 0x6f766e49,0x69746163,0x44496e6f,0x00000000,0x00040005,0x00000325,0x64616568,0x00000000, + 0x00060005,0x00000326,0x575f6c67,0x476b726f,0x70756f72,0x00004449,0x00040005,0x00000329, + 0x6c695471,0x00000065,0x00040005,0x0000032c,0x69727473,0x00336564,0x00040005,0x0000032d, + 0x68737550,0x00000000,0x00050006,0x0000032d,0x00000000,0x656b6f74,0x0000736e,0x00050006, + 0x0000032d,0x00000001,0x64616568,0x00000073,0x00060006,0x0000032d,0x00000002,0x6e616863, + 0x736c656e,0x00000000,0x00030005,0x0000032f,0x00006370,0x00050005,0x00000334,0x64616568, + 0x65736142,0x00000000,0x00040005,0x00000338,0x73614271,0x00000065,0x00030005,0x0000033f, + 0x00000069,0x00030005,0x0000034b,0x00007371,0x00050005,0x0000034f,0x6d726f4e,0x7a696c61, + 0x00006465,0x00040006,0x0000034f,0x00000000,0x00766b71,0x00030005,0x00000351,0x00000000, + 0x00040005,0x00000360,0x61726170,0x0000006d,0x00040005,0x00000365,0x3079656b,0x00000000, + 0x00030005,0x0000036e,0x00000069,0x00040005,0x0000037a,0x6e756863,0x0000006b,0x00040005, + 0x0000038b,0x61726170,0x0000006d,0x00030005,0x00000390,0x00000074,0x00060005,0x00000391, + 0x535f6c67,0x72676275,0x4970756f,0x00000044,0x00030005,0x0000039a,0x00003071,0x00030005, + 0x0000039e,0x0000306b,0x00030005,0x000003a4,0x00000063,0x00030005,0x000003a6,0x00005f73, + 0x00030005,0x000003b0,0x00005f61,0x00030005,0x000003bf,0x00005f62,0x00030005,0x000003d2, + 0x00005f72,0x00040005,0x000003de,0x61726170,0x0000006d,0x00030005,0x000003e7,0x00005f68, + 0x00060005,0x000003f8,0x4e5f6c67,0x75536d75,0x6f726762,0x00737075,0x00030005,0x000003ff, + 0x00000069,0x00040005,0x0000040b,0x61726170,0x0000006d,0x00040005,0x00000416,0x61746f74, + 0x0000006c,0x00040005,0x00000417,0x65736162,0x00000000,0x00040005,0x00000420,0x61726170, + 0x0000006d,0x00040005,0x00000422,0x61726170,0x0000006d,0x00040005,0x00000428,0x64646170, + 0x00676e69,0x00050005,0x00000430,0x72726f63,0x69746365,0x00006e6f,0x00040005,0x00000431, + 0x61726170,0x0000006d,0x00040005,0x00000437,0x61726170,0x0000006d,0x00050005,0x0000043f, + 0x69636572,0x636f7270,0x00736c61,0x00040005,0x00000441,0x61726170,0x0000006d,0x00030005, + 0x00000445,0x00000069,0x00040005,0x0000044f,0x65646f63,0x00000000,0x00040005,0x00000451, + 0x61726170,0x0000006d,0x00040005,0x00000455,0x61726170,0x0000006d,0x00040005,0x00000458, + 0x61726170,0x0000006d,0x00030005,0x0000045e,0x00000069,0x00040005,0x00000467,0x7074756f, + 0x00737475,0x00040005,0x0000046c,0x3079656b,0x00000000,0x00030005,0x00000474,0x00000069, + 0x00040005,0x0000048d,0x61726170,0x0000006d,0x00030005,0x00000492,0x00000074,0x00030005, + 0x0000049b,0x00003071,0x00030005,0x0000049f,0x00003063,0x00030005,0x000004a3,0x00005f68, + 0x00030005,0x000004ae,0x00000063,0x00030005,0x000004b1,0x0000626b,0x00030005,0x000004b9, + 0x00005f73,0x00030005,0x000004c1,0x00005f61,0x00030005,0x000004d6,0x00005f62,0x00030005, + 0x000004ee,0x00005f72,0x00040005,0x000004fa,0x61726170,0x0000006d,0x00030005,0x00000503, + 0x00005f68,0x00030005,0x00000515,0x00000069,0x00030005,0x0000051e,0x00776f72,0x00050005, + 0x00000521,0x706d6f63,0x6e656e6f,0x00000074,0x00040005,0x00000524,0x656b6f74,0x0000006e, + 0x00040005,0x00000530,0x756c6176,0x00000065,0x00040005,0x0000053a,0x61726170,0x0000006d, + 0x00050005,0x0000053d,0x65747441,0x6465646e,0x00000000,0x00060006,0x0000053d,0x00000000, + 0x65747461,0x6465646e,0x00000000,0x00030005,0x0000053f,0x00000000,0x00040005,0x0000054b, + 0x61726170,0x0000006d,0x00040005,0x0000054d,0x61726170,0x0000006d,0x00030047,0x000001cd, + 0x0000002a,0x00030047,0x000001ec,0x0000002a,0x00030047,0x000001f9,0x0000002a,0x00030047, + 0x0000020f,0x0000002a,0x00030047,0x00000214,0x0000002a,0x00030047,0x00000218,0x0000002a, + 0x00030047,0x0000021c,0x0000002a,0x00030047,0x00000220,0x0000002a,0x00030047,0x00000224, + 0x0000002a,0x00030047,0x00000225,0x0000002a,0x00040047,0x00000289,0x00000001,0x00000000, + 0x00030047,0x000002a0,0x0000002a,0x00030047,0x000002ab,0x0000002a,0x00030047,0x000002b7, + 0x0000002a,0x00030047,0x000002c3,0x0000002a,0x00030047,0x000002c7,0x0000002a,0x00030047, + 0x000002cb,0x0000002a,0x00030047,0x000002e0,0x0000002a,0x00030047,0x000002ea,0x0000002a, + 0x00030047,0x000002f4,0x0000002a,0x00030047,0x00000304,0x0000002a,0x00030047,0x0000030e, + 0x0000002a,0x00030047,0x00000318,0x0000002a,0x00040047,0x00000321,0x0000000b,0x0000001b, + 0x00040047,0x00000326,0x0000000b,0x0000001a,0x00030047,0x0000032d,0x00000002,0x00050048, + 0x0000032d,0x00000000,0x00000023,0x00000000,0x00050048,0x0000032d,0x00000001,0x00000023, + 0x00000004,0x00050048,0x0000032d,0x00000002,0x00000023,0x00000008,0x00040047,0x0000034e, + 0x00000006,0x00000001,0x00030047,0x0000034f,0x00000002,0x00040048,0x0000034f,0x00000000, + 0x00000018,0x00050048,0x0000034f,0x00000000,0x00000023,0x00000000,0x00030047,0x00000351, + 0x00000018,0x00040047,0x00000351,0x00000021,0x00000000,0x00040047,0x00000351,0x00000022, + 0x00000000,0x00040047,0x00000391,0x0000000b,0x00000028,0x00040047,0x000003f8,0x0000000b, + 0x00000026,0x00030047,0x00000425,0x0000002a,0x00030047,0x00000427,0x0000002a,0x00030047, + 0x0000042b,0x0000002a,0x00030047,0x00000436,0x0000002a,0x00030047,0x0000043c,0x0000002a, + 0x00030047,0x00000539,0x0000002a,0x00040047,0x0000053c,0x00000006,0x00000001,0x00030047, + 0x0000053d,0x00000002,0x00040048,0x0000053d,0x00000000,0x00000019,0x00050048,0x0000053d, + 0x00000000,0x00000023,0x00000000,0x00030047,0x0000053f,0x00000019,0x00040047,0x0000053f, + 0x00000021,0x00000005,0x00040047,0x0000053f,0x00000022,0x00000000,0x00020013,0x00000002, + 0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040020,0x00000007, + 0x00000007,0x00000006,0x00040021,0x00000008,0x00000006,0x00000007,0x00030016,0x0000000c, + 0x00000010,0x00040020,0x0000000d,0x00000007,0x0000000c,0x00040015,0x0000000e,0x00000020, + 0x00000000,0x00040021,0x0000000f,0x0000000e,0x0000000d,0x00040020,0x00000013,0x00000007, + 0x0000000e,0x00040021,0x00000014,0x0000000c,0x00000013,0x00050021,0x00000018,0x0000000e, + 0x00000013,0x00000013,0x00040021,0x0000001d,0x0000000e,0x00000013,0x00040021,0x00000021, + 0x00000006,0x00000013,0x00040021,0x00000028,0x00000006,0x0000000d,0x00040021,0x0000002f, + 0x0000000c,0x0000000d,0x00060021,0x00000039,0x0000000c,0x0000000d,0x0000000d,0x0000000d, + 0x00070021,0x00000042,0x0000000c,0x00000013,0x00000013,0x00000013,0x00000013,0x00050021, + 0x00000049,0x0000000c,0x00000013,0x00000013,0x0004002b,0x0000000e,0x00000053,0x80000000, + 0x0004002b,0x0000000e,0x00000057,0x7fffffff,0x0004002b,0x0000000e,0x0000005a,0x7f800000, + 0x00020014,0x0000005b,0x0004002b,0x0000000e,0x00000062,0x477ff000,0x0004002b,0x0000000e, + 0x0000006b,0x38800000,0x0004002b,0x00000006,0x00000072,0x4b800000,0x0004002b,0x00000006, + 0x00000079,0x33800000,0x0004002b,0x0000000e,0x00000082,0x0000000d,0x0004002b,0x0000000e, + 0x00000084,0x00000001,0x0004002b,0x0000000e,0x00000088,0x00000fff,0x0004002b,0x0000000e, + 0x0000008c,0xffffe000,0x00040015,0x00000095,0x00000010,0x00000000,0x0004002b,0x0000000e, + 0x0000009b,0x0000ffff,0x0004002b,0x0000000e,0x000000bf,0x00000000,0x00040020,0x000000c7, + 0x00000007,0x0000005b,0x0004002b,0x0000000e,0x000000ca,0x00007c00,0x0004002b,0x0000000e, + 0x000000d0,0x000003ff,0x0004002b,0x0000000e,0x000000d9,0x00007fff,0x0004002b,0x0000000e, + 0x000000df,0x00000008,0x0004002b,0x0000000e,0x000000e1,0x00000080,0x0004002b,0x0000000e, + 0x000000e6,0x00008000,0x0004002b,0x0000000e,0x000000ec,0x0000000a,0x0004002b,0x0000000e, + 0x000000ee,0x0000001f,0x0004002b,0x0000000e,0x000000f8,0x0000007e,0x0004002b,0x0000000e, + 0x00000106,0x00000400,0x0004002b,0x0000000e,0x00000110,0x0000000f,0x0004002b,0x0000000e, + 0x00000112,0x00000010,0x0004002b,0x0000000e,0x00000121,0x00000007,0x0004002b,0x0000000e, + 0x00000134,0x00000006,0x0004002b,0x0000000e,0x0000013d,0x00000003,0x0004002b,0x00000006, + 0x00000159,0x3b000000,0x0004002b,0x00000006,0x00000163,0x00000000,0x0004002b,0x00000006, + 0x00000165,0x3f800000,0x0004002b,0x00000006,0x00000168,0x3e000000,0x0004002b,0x0000000e, + 0x0000016c,0x00000078,0x0004002b,0x0000000e,0x0000016e,0x00000017,0x0004002b,0x0000000e, + 0x00000188,0x00007bff,0x0004002b,0x00000006,0x0000018d,0x477ff000,0x0004002b,0x00000006, + 0x0000018f,0x3f000000,0x0004002b,0x0000000c,0x000001d4,0x00000000,0x00040015,0x000001db, + 0x00000020,0x00000001,0x00040020,0x000001dc,0x00000007,0x000001db,0x0004002b,0x000001db, + 0x000001de,0x00000000,0x0004002b,0x000001db,0x000001e5,0x00000002,0x0004002b,0x000001db, + 0x00000205,0x00000001,0x0004002b,0x0000000e,0x00000235,0x000000ff,0x0004002b,0x000001db, + 0x00000238,0x0000007f,0x0004002b,0x000001db,0x0000023a,0xfffffff2,0x0004002b,0x000001db, + 0x0000023e,0x0000000a,0x0004002b,0x0000000c,0x0000026c,0x00002dbb,0x0004002b,0x0000000c, + 0x0000026d,0x00003ed6,0x0004002b,0x0000000c,0x00000274,0x00003dc2,0x0004002b,0x0000000c, + 0x00000275,0x00003fe9,0x0004002b,0x0000000e,0x0000027d,0x00000004,0x0004002b,0x0000000e, + 0x0000027f,0x00004000,0x00040032,0x0000000e,0x00000289,0x000000c0,0x0004002b,0x0000000e, + 0x0000028e,0x00000002,0x00060034,0x0000000e,0x00000294,0x00000084,0x00000112,0x00000289, + 0x0004001c,0x00000295,0x0000000c,0x00000294,0x00040020,0x00000296,0x00000004,0x00000295, + 0x0004003b,0x00000296,0x00000297,0x00000004,0x00040020,0x00000299,0x00000004,0x0000000c, + 0x0004002b,0x0000000e,0x000002a7,0x00000018,0x0004002b,0x0000000e,0x000002ae,0x00000020, + 0x0004002b,0x0000000e,0x000002b3,0x00000028,0x0004002b,0x0000000e,0x000002ba,0x00000030, + 0x0004002b,0x0000000e,0x000002bf,0x00000038,0x00040017,0x0000031f,0x0000000e,0x00000003, + 0x00040020,0x00000320,0x00000001,0x0000031f,0x0004003b,0x00000320,0x00000321,0x00000001, + 0x00040020,0x00000322,0x00000001,0x0000000e,0x0004003b,0x00000320,0x00000326,0x00000001, + 0x0005001e,0x0000032d,0x0000000e,0x0000000e,0x0000000e,0x00040020,0x0000032e,0x00000009, + 0x0000032d,0x0004003b,0x0000032e,0x0000032f,0x00000009,0x00040020,0x00000330,0x00000009, + 0x0000000e,0x0004002b,0x0000000e,0x00000336,0x00000060,0x0004002b,0x0000000e,0x00000347, + 0x00000200,0x0004001c,0x00000349,0x0000000c,0x00000347,0x00040020,0x0000034a,0x00000004, + 0x00000349,0x0004003b,0x0000034a,0x0000034b,0x00000004,0x00040015,0x0000034d,0x00000008, + 0x00000000,0x0003001d,0x0000034e,0x0000034d,0x0003001e,0x0000034f,0x0000034e,0x00040020, + 0x00000350,0x0000000c,0x0000034f,0x0004003b,0x00000350,0x00000351,0x0000000c,0x0004002b, + 0x0000000e,0x00000354,0x00000005,0x00040020,0x0000035c,0x0000000c,0x0000034d,0x0004002b, + 0x0000000e,0x0000036d,0x00000108,0x0004002b,0x0000000e,0x00000376,0x00000800,0x0004001c, + 0x00000378,0x0000000c,0x00000376,0x00040020,0x00000379,0x00000004,0x00000378,0x0004003b, + 0x00000379,0x0000037a,0x00000004,0x0004003b,0x00000322,0x00000391,0x00000001,0x00071168, + 0x000003a2,0x00000006,0x0000013d,0x000000df,0x000000df,0x0000028e,0x00040020,0x000003a3, + 0x00000007,0x000003a2,0x0004002c,0x000003a2,0x000003a5,0x00000163,0x00071168,0x000003ae, + 0x0000000c,0x0000013d,0x000000df,0x000000df,0x000000bf,0x00040020,0x000003af,0x00000007, + 0x000003ae,0x00071168,0x000003bd,0x0000000c,0x0000013d,0x000000df,0x000000df,0x00000084, + 0x00040020,0x000003be,0x00000007,0x000003bd,0x00071168,0x000003e5,0x0000000c,0x0000013d, + 0x000000df,0x000000df,0x0000028e,0x00040020,0x000003e6,0x00000007,0x000003e5,0x0004003b, + 0x00000322,0x000003f8,0x00000001,0x0004002b,0x0000000e,0x000003fc,0x00000040,0x00060034, + 0x0000000e,0x00000407,0x00000084,0x00000112,0x00000289,0x0004001c,0x0000043d,0x0000000c, + 0x00000112,0x00040020,0x0000043e,0x00000004,0x0000043d,0x0004003b,0x0000043e,0x0000043f, + 0x00000004,0x00060034,0x0000000e,0x0000044d,0x00000084,0x00000112,0x00000289,0x0004003b, + 0x0000034a,0x00000467,0x00000004,0x0004002b,0x0000000e,0x000004dc,0x00000100,0x0003001d, + 0x0000053c,0x0000034d,0x0003001e,0x0000053d,0x0000053c,0x00040020,0x0000053e,0x0000000c, + 0x0000053d,0x0004003b,0x0000053e,0x0000053f,0x0000000c,0x0006002c,0x0000031f,0x00000553, + 0x000002ae,0x00000084,0x00000084,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003, + 0x000200f8,0x00000005,0x0004003b,0x00000013,0x0000031e,0x00000007,0x0004003b,0x00000013, + 0x00000325,0x00000007,0x0004003b,0x00000013,0x00000329,0x00000007,0x0004003b,0x00000013, + 0x0000032c,0x00000007,0x0004003b,0x00000013,0x00000334,0x00000007,0x0004003b,0x00000013, + 0x00000338,0x00000007,0x0004003b,0x00000013,0x0000033f,0x00000007,0x0004003b,0x00000013, + 0x00000360,0x00000007,0x0004003b,0x00000013,0x00000365,0x00000007,0x0004003b,0x00000013, + 0x0000036e,0x00000007,0x0004003b,0x00000013,0x0000038b,0x00000007,0x0004003b,0x00000013, + 0x00000390,0x00000007,0x0004003b,0x00000013,0x0000039a,0x00000007,0x0004003b,0x00000013, + 0x0000039e,0x00000007,0x0004003b,0x000003a3,0x000003a4,0x00000007,0x0004003b,0x00000013, + 0x000003a6,0x00000007,0x0004003b,0x000003af,0x000003b0,0x00000007,0x0004003b,0x000003be, + 0x000003bf,0x00000007,0x0004003b,0x000001dc,0x000003d2,0x00000007,0x0004003b,0x00000007, + 0x000003de,0x00000007,0x0004003b,0x000003e6,0x000003e7,0x00000007,0x0004003b,0x00000013, + 0x000003ff,0x00000007,0x0004003b,0x0000000d,0x0000040b,0x00000007,0x0004003b,0x0000000d, + 0x00000416,0x00000007,0x0004003b,0x00000013,0x00000417,0x00000007,0x0004003b,0x00000013, + 0x00000420,0x00000007,0x0004003b,0x00000013,0x00000422,0x00000007,0x0004003b,0x00000013, + 0x00000428,0x00000007,0x0004003b,0x0000000d,0x00000430,0x00000007,0x0004003b,0x0000000d, + 0x00000431,0x00000007,0x0004003b,0x00000007,0x00000437,0x00000007,0x0004003b,0x0000000d, + 0x00000441,0x00000007,0x0004003b,0x00000013,0x00000445,0x00000007,0x0004003b,0x00000013, + 0x0000044f,0x00000007,0x0004003b,0x0000000d,0x00000451,0x00000007,0x0004003b,0x00000013, + 0x00000455,0x00000007,0x0004003b,0x00000013,0x00000458,0x00000007,0x0004003b,0x00000013, + 0x0000045e,0x00000007,0x0004003b,0x00000013,0x0000046c,0x00000007,0x0004003b,0x00000013, + 0x00000474,0x00000007,0x0004003b,0x00000013,0x0000048d,0x00000007,0x0004003b,0x00000013, + 0x00000492,0x00000007,0x0004003b,0x00000013,0x0000049b,0x00000007,0x0004003b,0x00000013, + 0x0000049f,0x00000007,0x0004003b,0x000003e6,0x000004a3,0x00000007,0x0004003b,0x000003a3, + 0x000004ae,0x00000007,0x0004003b,0x00000013,0x000004b1,0x00000007,0x0004003b,0x00000013, + 0x000004b9,0x00000007,0x0004003b,0x000003af,0x000004c1,0x00000007,0x0004003b,0x000003be, + 0x000004d6,0x00000007,0x0004003b,0x000001dc,0x000004ee,0x00000007,0x0004003b,0x00000007, + 0x000004fa,0x00000007,0x0004003b,0x000003e6,0x00000503,0x00000007,0x0004003b,0x00000013, + 0x00000515,0x00000007,0x0004003b,0x00000013,0x0000051e,0x00000007,0x0004003b,0x00000013, + 0x00000521,0x00000007,0x0004003b,0x00000013,0x00000524,0x00000007,0x0004003b,0x00000007, + 0x00000530,0x00000007,0x0004003b,0x00000007,0x0000053a,0x00000007,0x0004003b,0x0000000d, + 0x0000054b,0x00000007,0x0004003b,0x00000013,0x0000054d,0x00000007,0x00050041,0x00000322, + 0x00000323,0x00000321,0x000000bf,0x0004003d,0x0000000e,0x00000324,0x00000323,0x0003003e, + 0x0000031e,0x00000324,0x00050041,0x00000322,0x00000327,0x00000326,0x000000bf,0x0004003d, + 0x0000000e,0x00000328,0x00000327,0x0003003e,0x00000325,0x00000328,0x00050041,0x00000322, + 0x0000032a,0x00000326,0x00000084,0x0004003d,0x0000000e,0x0000032b,0x0000032a,0x0003003e, + 0x00000329,0x0000032b,0x00050041,0x00000330,0x00000331,0x0000032f,0x000001e5,0x0004003d, + 0x0000000e,0x00000332,0x00000331,0x00050084,0x0000000e,0x00000333,0x00000332,0x0000013d, + 0x0003003e,0x0000032c,0x00000333,0x0004003d,0x0000000e,0x00000335,0x00000325,0x00050084, + 0x0000000e,0x00000337,0x00000335,0x00000336,0x0003003e,0x00000334,0x00000337,0x0004003d, + 0x0000000e,0x00000339,0x00000329,0x00050084,0x0000000e,0x0000033a,0x00000339,0x00000112, + 0x0004003d,0x0000000e,0x0000033b,0x0000032c,0x00050084,0x0000000e,0x0000033c,0x0000033a, + 0x0000033b,0x0004003d,0x0000000e,0x0000033d,0x00000334,0x00050080,0x0000000e,0x0000033e, + 0x0000033c,0x0000033d,0x0003003e,0x00000338,0x0000033e,0x0004003d,0x0000000e,0x00000340, + 0x0000031e,0x0003003e,0x0000033f,0x00000340,0x000200f9,0x00000341,0x000200f8,0x00000341, + 0x000400f6,0x00000343,0x00000344,0x00000000,0x000200f9,0x00000345,0x000200f8,0x00000345, + 0x0004003d,0x0000000e,0x00000346,0x0000033f,0x000500b0,0x0000005b,0x00000348,0x00000346, + 0x00000347,0x000400fa,0x00000348,0x00000342,0x00000343,0x000200f8,0x00000342,0x0004003d, + 0x0000000e,0x0000034c,0x0000033f,0x0004003d,0x0000000e,0x00000352,0x00000338,0x0004003d, + 0x0000000e,0x00000353,0x0000033f,0x000500c2,0x0000000e,0x00000355,0x00000353,0x00000354, + 0x0004003d,0x0000000e,0x00000356,0x0000032c,0x00050084,0x0000000e,0x00000357,0x00000355, + 0x00000356,0x00050080,0x0000000e,0x00000358,0x00000352,0x00000357,0x0004003d,0x0000000e, + 0x00000359,0x0000033f,0x000500c7,0x0000000e,0x0000035a,0x00000359,0x000000ee,0x00050080, + 0x0000000e,0x0000035b,0x00000358,0x0000035a,0x00060041,0x0000035c,0x0000035d,0x00000351, + 0x000001de,0x0000035b,0x0004003d,0x0000034d,0x0000035e,0x0000035d,0x00040071,0x0000000e, + 0x0000035f,0x0000035e,0x0003003e,0x00000360,0x0000035f,0x00050039,0x0000000c,0x00000361, + 0x00000026,0x00000360,0x00050041,0x00000299,0x00000362,0x0000034b,0x0000034c,0x0005003e, + 0x00000362,0x00000361,0x00000028,0x0000028e,0x000200f9,0x00000344,0x000200f8,0x00000344, + 0x0004003d,0x0000000e,0x00000363,0x0000033f,0x00050080,0x0000000e,0x00000364,0x00000363, + 0x000002ae,0x0003003e,0x0000033f,0x00000364,0x000200f9,0x00000341,0x000200f8,0x00000343, + 0x0003003e,0x00000365,0x000000bf,0x000200f9,0x00000366,0x000200f8,0x00000366,0x000400f6, + 0x00000368,0x00000369,0x00000000,0x000200f9,0x0000036a,0x000200f8,0x0000036a,0x0004003d, + 0x0000000e,0x0000036b,0x00000365,0x000500b0,0x0000005b,0x0000036c,0x0000036b,0x00000289, + 0x000400fa,0x0000036c,0x00000367,0x00000368,0x000200f8,0x00000367,0x000400e0,0x0000028e, + 0x0000028e,0x0000036d,0x0004003d,0x0000000e,0x0000036f,0x0000031e,0x0003003e,0x0000036e, + 0x0000036f,0x000200f9,0x00000370,0x000200f8,0x00000370,0x000400f6,0x00000372,0x00000373, + 0x00000000,0x000200f9,0x00000374,0x000200f8,0x00000374,0x0004003d,0x0000000e,0x00000375, + 0x0000036e,0x000500b0,0x0000005b,0x00000377,0x00000375,0x00000376,0x000400fa,0x00000377, + 0x00000371,0x00000372,0x000200f8,0x00000371,0x0004003d,0x0000000e,0x0000037b,0x0000036e, + 0x0004003d,0x0000000e,0x0000037c,0x00000365,0x0004003d,0x0000000e,0x0000037d,0x0000036e, + 0x000500c2,0x0000000e,0x0000037e,0x0000037d,0x00000354,0x00050080,0x0000000e,0x0000037f, + 0x0000037c,0x0000037e,0x0004003d,0x0000000e,0x00000380,0x0000032c,0x00050084,0x0000000e, + 0x00000381,0x0000037f,0x00000380,0x0004003d,0x0000000e,0x00000382,0x00000334,0x00050080, + 0x0000000e,0x00000383,0x00000381,0x00000382,0x00050080,0x0000000e,0x00000384,0x00000383, + 0x000002ae,0x0004003d,0x0000000e,0x00000385,0x0000036e,0x000500c7,0x0000000e,0x00000386, + 0x00000385,0x000000ee,0x00050080,0x0000000e,0x00000387,0x00000384,0x00000386,0x00060041, + 0x0000035c,0x00000388,0x00000351,0x000001de,0x00000387,0x0004003d,0x0000034d,0x00000389, + 0x00000388,0x00040071,0x0000000e,0x0000038a,0x00000389,0x0003003e,0x0000038b,0x0000038a, + 0x00050039,0x0000000c,0x0000038c,0x00000026,0x0000038b,0x00050041,0x00000299,0x0000038d, + 0x0000037a,0x0000037b,0x0005003e,0x0000038d,0x0000038c,0x00000028,0x0000028e,0x000200f9, + 0x00000373,0x000200f8,0x00000373,0x0004003d,0x0000000e,0x0000038e,0x0000036e,0x00050080, + 0x0000000e,0x0000038f,0x0000038e,0x000002ae,0x0003003e,0x0000036e,0x0000038f,0x000200f9, + 0x00000370,0x000200f8,0x00000372,0x000400e0,0x0000028e,0x0000028e,0x0000036d,0x0004003d, + 0x0000000e,0x00000392,0x00000391,0x0003003e,0x00000390,0x00000392,0x000200f9,0x00000393, + 0x000200f8,0x00000393,0x000400f6,0x00000395,0x00000396,0x00000000,0x000200f9,0x00000397, + 0x000200f8,0x00000397,0x0004003d,0x0000000e,0x00000398,0x00000390,0x000500b0,0x0000005b, + 0x00000399,0x00000398,0x00000112,0x000400fa,0x00000399,0x00000394,0x00000395,0x000200f8, + 0x00000394,0x0004003d,0x0000000e,0x0000039b,0x00000390,0x00050086,0x0000000e,0x0000039c, + 0x0000039b,0x000000df,0x00050084,0x0000000e,0x0000039d,0x0000039c,0x000000df,0x0003003e, + 0x0000039a,0x0000039d,0x0004003d,0x0000000e,0x0000039f,0x00000390,0x00050089,0x0000000e, + 0x000003a0,0x0000039f,0x000000df,0x00050084,0x0000000e,0x000003a1,0x000003a0,0x000000df, + 0x0003003e,0x0000039e,0x000003a1,0x0003003e,0x000003a4,0x000003a5,0x0003003e,0x000003a6, + 0x000000bf,0x000200f9,0x000003a7,0x000200f8,0x000003a7,0x000400f6,0x000003a9,0x000003aa, + 0x00000001,0x000200f9,0x000003ab,0x000200f8,0x000003ab,0x0004003d,0x0000000e,0x000003ac, + 0x000003a6,0x000500b0,0x0000005b,0x000003ad,0x000003ac,0x0000027d,0x000400fa,0x000003ad, + 0x000003a8,0x000003a9,0x000200f8,0x000003a8,0x0004003d,0x0000000e,0x000003b1,0x0000039a, + 0x00050084,0x0000000e,0x000003b2,0x000003b1,0x000002ae,0x0004003d,0x0000000e,0x000003b3, + 0x000003a6,0x00050084,0x0000000e,0x000003b4,0x000003b3,0x000000df,0x00050080,0x0000000e, + 0x000003b5,0x000003b2,0x000003b4,0x00050041,0x00000299,0x000003b6,0x0000034b,0x000003b5, + 0x0004003d,0x0000000e,0x000003b7,0x0000039a,0x00050084,0x0000000e,0x000003b8,0x000003b7, + 0x000002ae,0x0004003d,0x0000000e,0x000003b9,0x000003a6,0x00050084,0x0000000e,0x000003ba, + 0x000003b9,0x000000df,0x00050080,0x0000000e,0x000003bb,0x000003b8,0x000003ba,0x00081169, + 0x000003ae,0x000003bc,0x000003b6,0x000001de,0x000002ae,0x00000030,0x0000028e,0x0003003e, + 0x000003b0,0x000003bc,0x0004003d,0x0000000e,0x000003c0,0x0000039e,0x00050084,0x0000000e, + 0x000003c1,0x000003c0,0x000002ae,0x0004003d,0x0000000e,0x000003c2,0x000003a6,0x00050084, + 0x0000000e,0x000003c3,0x000003c2,0x000000df,0x00050080,0x0000000e,0x000003c4,0x000003c1, + 0x000003c3,0x00050041,0x00000299,0x000003c5,0x0000037a,0x000003c4,0x0004003d,0x0000000e, + 0x000003c6,0x0000039e,0x00050084,0x0000000e,0x000003c7,0x000003c6,0x000002ae,0x0004003d, + 0x0000000e,0x000003c8,0x000003a6,0x00050084,0x0000000e,0x000003c9,0x000003c8,0x000000df, + 0x00050080,0x0000000e,0x000003ca,0x000003c7,0x000003c9,0x00081169,0x000003bd,0x000003cb, + 0x000003c5,0x00000205,0x000002ae,0x00000030,0x0000028e,0x0003003e,0x000003bf,0x000003cb, + 0x0004003d,0x000003ae,0x000003cc,0x000003b0,0x0004003d,0x000003bd,0x000003cd,0x000003bf, + 0x0004003d,0x000003a2,0x000003ce,0x000003a4,0x0006116b,0x000003a2,0x000003cf,0x000003cc, + 0x000003cd,0x000003ce,0x0003003e,0x000003a4,0x000003cf,0x000200f9,0x000003aa,0x000200f8, + 0x000003aa,0x0004003d,0x0000000e,0x000003d0,0x000003a6,0x00050080,0x0000000e,0x000003d1, + 0x000003d0,0x00000205,0x0003003e,0x000003a6,0x000003d1,0x000200f9,0x000003a7,0x000200f8, + 0x000003a9,0x0003003e,0x000003d2,0x000001de,0x000200f9,0x000003d3,0x000200f8,0x000003d3, + 0x000400f6,0x000003d5,0x000003d6,0x00000000,0x000200f9,0x000003d7,0x000200f8,0x000003d7, + 0x0004003d,0x000001db,0x000003d8,0x000003d2,0x0004116c,0x0000000e,0x000003d9,0x000003a2, + 0x0004007c,0x000001db,0x000003da,0x000003d9,0x000500b1,0x0000005b,0x000003db,0x000003d8, + 0x000003da,0x000400fa,0x000003db,0x000003d4,0x000003d5,0x000200f8,0x000003d4,0x0004003d, + 0x000001db,0x000003dc,0x000003d2,0x0004003d,0x000001db,0x000003dd,0x000003d2,0x00050041, + 0x00000007,0x000003df,0x000003a4,0x000003dd,0x0004003d,0x00000006,0x000003e0,0x000003df, + 0x0003003e,0x000003de,0x000003e0,0x00050039,0x00000006,0x000003e1,0x0000000a,0x000003de, + 0x00050041,0x00000007,0x000003e2,0x000003a4,0x000003dc,0x0003003e,0x000003e2,0x000003e1, + 0x000200f9,0x000003d6,0x000200f8,0x000003d6,0x0004003d,0x000001db,0x000003e3,0x000003d2, + 0x00050080,0x000001db,0x000003e4,0x000003e3,0x00000205,0x0003003e,0x000003d2,0x000003e4, + 0x000200f9,0x000003d3,0x000200f8,0x000003d5,0x0004003d,0x000003a2,0x000003e8,0x000003a4, + 0x00040073,0x000003e5,0x000003e9,0x000003e8,0x0003003e,0x000003e7,0x000003e9,0x0004003d, + 0x000003e5,0x000003ea,0x000003e7,0x0004003d,0x0000000e,0x000003eb,0x0000039a,0x00050084, + 0x0000000e,0x000003ec,0x000003eb,0x00000289,0x0004003d,0x0000000e,0x000003ed,0x00000365, + 0x00050080,0x0000000e,0x000003ee,0x000003ec,0x000003ed,0x0004003d,0x0000000e,0x000003ef, + 0x0000039e,0x00050080,0x0000000e,0x000003f0,0x000003ee,0x000003ef,0x00050041,0x00000299, + 0x000003f1,0x00000297,0x000003f0,0x0004003d,0x0000000e,0x000003f2,0x0000039a,0x00050084, + 0x0000000e,0x000003f3,0x000003f2,0x00000289,0x0004003d,0x0000000e,0x000003f4,0x00000365, + 0x00050080,0x0000000e,0x000003f5,0x000003f3,0x000003f4,0x0004003d,0x0000000e,0x000003f6, + 0x0000039e,0x00050080,0x0000000e,0x000003f7,0x000003f5,0x000003f6,0x0007116a,0x000003f1, + 0x000003ea,0x000001de,0x00000289,0x00000028,0x0000028e,0x000200f9,0x00000396,0x000200f8, + 0x00000396,0x0004003d,0x0000000e,0x000003f9,0x000003f8,0x0004003d,0x0000000e,0x000003fa, + 0x00000390,0x00050080,0x0000000e,0x000003fb,0x000003fa,0x000003f9,0x0003003e,0x00000390, + 0x000003fb,0x000200f9,0x00000393,0x000200f8,0x00000395,0x000200f9,0x00000369,0x000200f8, + 0x00000369,0x0004003d,0x0000000e,0x000003fd,0x00000365,0x00050080,0x0000000e,0x000003fe, + 0x000003fd,0x000003fc,0x0003003e,0x00000365,0x000003fe,0x000200f9,0x00000366,0x000200f8, + 0x00000368,0x000400e0,0x0000028e,0x0000028e,0x0000036d,0x0004003d,0x0000000e,0x00000400, + 0x0000031e,0x0003003e,0x000003ff,0x00000400,0x000200f9,0x00000401,0x000200f8,0x00000401, + 0x000400f6,0x00000403,0x00000404,0x00000000,0x000200f9,0x00000405,0x000200f8,0x00000405, + 0x0004003d,0x0000000e,0x00000406,0x000003ff,0x000500b0,0x0000005b,0x00000408,0x00000406, + 0x00000407,0x000400fa,0x00000408,0x00000402,0x00000403,0x000200f8,0x00000402,0x0004003d, + 0x0000000e,0x00000409,0x000003ff,0x0004003d,0x0000000e,0x0000040a,0x000003ff,0x00050041, + 0x00000299,0x0000040c,0x00000297,0x0000040a,0x0006003d,0x0000000c,0x0000040d,0x0000040c, + 0x00000030,0x0000028e,0x0003003e,0x0000040b,0x0000040d,0x00050039,0x0000000c,0x0000040e, + 0x00000040,0x0000040b,0x00050041,0x00000299,0x0000040f,0x00000297,0x00000409,0x0005003e, + 0x0000040f,0x0000040e,0x00000028,0x0000028e,0x000200f9,0x00000404,0x000200f8,0x00000404, + 0x0004003d,0x0000000e,0x00000410,0x000003ff,0x00050080,0x0000000e,0x00000411,0x00000410, + 0x000002ae,0x0003003e,0x000003ff,0x00000411,0x000200f9,0x00000401,0x000200f8,0x00000403, + 0x000400e0,0x0000028e,0x0000028e,0x0000036d,0x0004003d,0x0000000e,0x00000412,0x0000031e, + 0x000500b0,0x0000005b,0x00000413,0x00000412,0x00000112,0x000300f7,0x00000415,0x00000000, + 0x000400fa,0x00000413,0x00000414,0x00000415,0x000200f8,0x00000414,0x0003003e,0x00000416, + 0x000001d4,0x0003003e,0x00000417,0x000000bf,0x000200f9,0x00000418,0x000200f8,0x00000418, + 0x000400f6,0x0000041a,0x0000041b,0x00000000,0x000200f9,0x0000041c,0x000200f8,0x0000041c, + 0x0004003d,0x0000000e,0x0000041d,0x00000417,0x000500b0,0x0000005b,0x0000041e,0x0000041d, + 0x00000289,0x000400fa,0x0000041e,0x00000419,0x0000041a,0x000200f8,0x00000419,0x0004003d, + 0x0000000c,0x0000041f,0x00000416,0x0004003d,0x0000000e,0x00000421,0x0000031e,0x0003003e, + 0x00000420,0x00000421,0x0004003d,0x0000000e,0x00000423,0x00000417,0x0003003e,0x00000422, + 0x00000423,0x00060039,0x0000000c,0x00000424,0x0000004c,0x00000420,0x00000422,0x00050081, + 0x0000000c,0x00000425,0x0000041f,0x00000424,0x0003003e,0x00000416,0x00000425,0x000200f9, + 0x0000041b,0x000200f8,0x0000041b,0x0004003d,0x0000000e,0x00000426,0x00000417,0x00050080, + 0x0000000e,0x00000427,0x00000426,0x000003fc,0x0003003e,0x00000417,0x00000427,0x000200f9, + 0x00000418,0x000200f8,0x0000041a,0x00050041,0x00000330,0x00000429,0x0000032f,0x000001de, + 0x0004003d,0x0000000e,0x0000042a,0x00000429,0x00050082,0x0000000e,0x0000042b,0x00000289, + 0x0000042a,0x0003003e,0x00000428,0x0000042b,0x0004003d,0x0000000e,0x0000042c,0x00000428, + 0x000500ac,0x0000005b,0x0000042d,0x0000042c,0x000000bf,0x000300f7,0x0000042f,0x00000000, + 0x000400fa,0x0000042d,0x0000042e,0x0000042f,0x000200f8,0x0000042e,0x0003003e,0x00000431, + 0x000001d4,0x00050039,0x0000000c,0x00000432,0x00000040,0x00000431,0x00040073,0x00000006, + 0x00000433,0x00000432,0x0004003d,0x0000000e,0x00000434,0x00000428,0x00040070,0x00000006, + 0x00000435,0x00000434,0x00050085,0x00000006,0x00000436,0x00000433,0x00000435,0x0003003e, + 0x00000437,0x00000436,0x00050039,0x00000006,0x00000438,0x0000000a,0x00000437,0x00040073, + 0x0000000c,0x00000439,0x00000438,0x0003003e,0x00000430,0x00000439,0x0004003d,0x0000000c, + 0x0000043a,0x00000416,0x0004003d,0x0000000c,0x0000043b,0x00000430,0x00050083,0x0000000c, + 0x0000043c,0x0000043a,0x0000043b,0x0003003e,0x00000416,0x0000043c,0x000200f9,0x0000042f, + 0x000200f8,0x0000042f,0x0004003d,0x0000000e,0x00000440,0x0000031e,0x0004003d,0x0000000c, + 0x00000442,0x00000416,0x0003003e,0x00000441,0x00000442,0x00050039,0x0000000c,0x00000443, + 0x00000037,0x00000441,0x00050041,0x00000299,0x00000444,0x0000043f,0x00000440,0x0005003e, + 0x00000444,0x00000443,0x00000028,0x0000028e,0x000200f9,0x00000415,0x000200f8,0x00000415, + 0x000400e0,0x0000028e,0x0000028e,0x0000036d,0x0004003d,0x0000000e,0x00000446,0x0000031e, + 0x0003003e,0x00000445,0x00000446,0x000200f9,0x00000447,0x000200f8,0x00000447,0x000400f6, + 0x00000449,0x0000044a,0x00000000,0x000200f9,0x0000044b,0x000200f8,0x0000044b,0x0004003d, + 0x0000000e,0x0000044c,0x00000445,0x000500b0,0x0000005b,0x0000044e,0x0000044c,0x0000044d, + 0x000400fa,0x0000044e,0x00000448,0x00000449,0x000200f8,0x00000448,0x0004003d,0x0000000e, + 0x00000450,0x00000445,0x00050041,0x00000299,0x00000452,0x00000297,0x00000450,0x0006003d, + 0x0000000c,0x00000453,0x00000452,0x00000030,0x0000028e,0x0003003e,0x00000451,0x00000453, + 0x00050039,0x0000000e,0x00000454,0x00000011,0x00000451,0x0003003e,0x00000455,0x00000454, + 0x00050039,0x0000000e,0x00000456,0x0000001f,0x00000455,0x0003003e,0x0000044f,0x00000456, + 0x0004003d,0x0000000e,0x00000457,0x00000445,0x0004003d,0x0000000e,0x00000459,0x0000044f, + 0x0003003e,0x00000458,0x00000459,0x00050039,0x0000000c,0x0000045a,0x00000026,0x00000458, + 0x00050041,0x00000299,0x0000045b,0x00000297,0x00000457,0x0005003e,0x0000045b,0x0000045a, + 0x00000028,0x0000028e,0x000200f9,0x0000044a,0x000200f8,0x0000044a,0x0004003d,0x0000000e, + 0x0000045c,0x00000445,0x00050080,0x0000000e,0x0000045d,0x0000045c,0x000002ae,0x0003003e, + 0x00000445,0x0000045d,0x000200f9,0x00000447,0x000200f8,0x00000449,0x0004003d,0x0000000e, + 0x0000045f,0x0000031e,0x0003003e,0x0000045e,0x0000045f,0x000200f9,0x00000460,0x000200f8, + 0x00000460,0x000400f6,0x00000462,0x00000463,0x00000000,0x000200f9,0x00000464,0x000200f8, + 0x00000464,0x0004003d,0x0000000e,0x00000465,0x0000045e,0x000500b0,0x0000005b,0x00000466, + 0x00000465,0x00000347,0x000400fa,0x00000466,0x00000461,0x00000462,0x000200f8,0x00000461, + 0x0004003d,0x0000000e,0x00000468,0x0000045e,0x00050041,0x00000299,0x00000469,0x00000467, + 0x00000468,0x0005003e,0x00000469,0x000001d4,0x00000028,0x0000028e,0x000200f9,0x00000463, + 0x000200f8,0x00000463,0x0004003d,0x0000000e,0x0000046a,0x0000045e,0x00050080,0x0000000e, + 0x0000046b,0x0000046a,0x000002ae,0x0003003e,0x0000045e,0x0000046b,0x000200f9,0x00000460, + 0x000200f8,0x00000462,0x000400e0,0x0000028e,0x0000028e,0x0000036d,0x0003003e,0x0000046c, + 0x000000bf,0x000200f9,0x0000046d,0x000200f8,0x0000046d,0x000400f6,0x0000046f,0x00000470, + 0x00000000,0x000200f9,0x00000471,0x000200f8,0x00000471,0x0004003d,0x0000000e,0x00000472, + 0x0000046c,0x000500b0,0x0000005b,0x00000473,0x00000472,0x00000289,0x000400fa,0x00000473, + 0x0000046e,0x0000046f,0x000200f8,0x0000046e,0x0004003d,0x0000000e,0x00000475,0x0000031e, + 0x0003003e,0x00000474,0x00000475,0x000200f9,0x00000476,0x000200f8,0x00000476,0x000400f6, + 0x00000478,0x00000479,0x00000000,0x000200f9,0x0000047a,0x000200f8,0x0000047a,0x0004003d, + 0x0000000e,0x0000047b,0x00000474,0x000500b0,0x0000005b,0x0000047c,0x0000047b,0x00000376, + 0x000400fa,0x0000047c,0x00000477,0x00000478,0x000200f8,0x00000477,0x0004003d,0x0000000e, + 0x0000047d,0x00000474,0x0004003d,0x0000000e,0x0000047e,0x0000046c,0x0004003d,0x0000000e, + 0x0000047f,0x00000474,0x000500c2,0x0000000e,0x00000480,0x0000047f,0x00000354,0x00050080, + 0x0000000e,0x00000481,0x0000047e,0x00000480,0x0004003d,0x0000000e,0x00000482,0x0000032c, + 0x00050084,0x0000000e,0x00000483,0x00000481,0x00000482,0x0004003d,0x0000000e,0x00000484, + 0x00000334,0x00050080,0x0000000e,0x00000485,0x00000483,0x00000484,0x00050080,0x0000000e, + 0x00000486,0x00000485,0x000003fc,0x0004003d,0x0000000e,0x00000487,0x00000474,0x000500c7, + 0x0000000e,0x00000488,0x00000487,0x000000ee,0x00050080,0x0000000e,0x00000489,0x00000486, + 0x00000488,0x00060041,0x0000035c,0x0000048a,0x00000351,0x000001de,0x00000489,0x0004003d, + 0x0000034d,0x0000048b,0x0000048a,0x00040071,0x0000000e,0x0000048c,0x0000048b,0x0003003e, + 0x0000048d,0x0000048c,0x00050039,0x0000000c,0x0000048e,0x00000026,0x0000048d,0x00050041, + 0x00000299,0x0000048f,0x0000037a,0x0000047d,0x0005003e,0x0000048f,0x0000048e,0x00000028, + 0x0000028e,0x000200f9,0x00000479,0x000200f8,0x00000479,0x0004003d,0x0000000e,0x00000490, + 0x00000474,0x00050080,0x0000000e,0x00000491,0x00000490,0x000002ae,0x0003003e,0x00000474, + 0x00000491,0x000200f9,0x00000476,0x000200f8,0x00000478,0x000400e0,0x0000028e,0x0000028e, + 0x0000036d,0x0004003d,0x0000000e,0x00000493,0x00000391,0x0003003e,0x00000492,0x00000493, + 0x000200f9,0x00000494,0x000200f8,0x00000494,0x000400f6,0x00000496,0x00000497,0x00000000, + 0x000200f9,0x00000498,0x000200f8,0x00000498,0x0004003d,0x0000000e,0x00000499,0x00000492, + 0x000500b0,0x0000005b,0x0000049a,0x00000499,0x000000df,0x000400fa,0x0000049a,0x00000495, + 0x00000496,0x000200f8,0x00000495,0x0004003d,0x0000000e,0x0000049c,0x00000492,0x00050086, + 0x0000000e,0x0000049d,0x0000049c,0x0000027d,0x00050084,0x0000000e,0x0000049e,0x0000049d, + 0x000000df,0x0003003e,0x0000049b,0x0000049e,0x0004003d,0x0000000e,0x000004a0,0x00000492, + 0x00050089,0x0000000e,0x000004a1,0x000004a0,0x0000027d,0x00050084,0x0000000e,0x000004a2, + 0x000004a1,0x000000df,0x0003003e,0x0000049f,0x000004a2,0x0004003d,0x0000000e,0x000004a4, + 0x0000049b,0x00050084,0x0000000e,0x000004a5,0x000004a4,0x000002ae,0x0004003d,0x0000000e, + 0x000004a6,0x0000049f,0x00050080,0x0000000e,0x000004a7,0x000004a5,0x000004a6,0x00050041, + 0x00000299,0x000004a8,0x00000467,0x000004a7,0x0004003d,0x0000000e,0x000004a9,0x0000049b, + 0x00050084,0x0000000e,0x000004aa,0x000004a9,0x000002ae,0x0004003d,0x0000000e,0x000004ab, + 0x0000049f,0x00050080,0x0000000e,0x000004ac,0x000004aa,0x000004ab,0x00081169,0x000003e5, + 0x000004ad,0x000004a8,0x000001de,0x000002ae,0x00000030,0x0000028e,0x0003003e,0x000004a3, + 0x000004ad,0x0004003d,0x000003e5,0x000004af,0x000004a3,0x00040073,0x000003a2,0x000004b0, + 0x000004af,0x0003003e,0x000004ae,0x000004b0,0x0003003e,0x000004b1,0x000000bf,0x000200f9, + 0x000004b2,0x000200f8,0x000004b2,0x000400f6,0x000004b4,0x000004b5,0x00000001,0x000200f9, + 0x000004b6,0x000200f8,0x000004b6,0x0004003d,0x0000000e,0x000004b7,0x000004b1,0x000500b0, + 0x0000005b,0x000004b8,0x000004b7,0x000003fc,0x000400fa,0x000004b8,0x000004b3,0x000004b4, + 0x000200f8,0x000004b3,0x0003003e,0x000004b9,0x000000bf,0x000200f9,0x000004ba,0x000200f8, + 0x000004ba,0x000400f6,0x000004bc,0x000004bd,0x00000001,0x000200f9,0x000004be,0x000200f8, + 0x000004be,0x0004003d,0x0000000e,0x000004bf,0x000004b9,0x000500b0,0x0000005b,0x000004c0, + 0x000004bf,0x0000027d,0x000400fa,0x000004c0,0x000004bb,0x000004bc,0x000200f8,0x000004bb, + 0x0004003d,0x0000000e,0x000004c2,0x0000049b,0x00050084,0x0000000e,0x000004c3,0x000004c2, + 0x00000289,0x0004003d,0x0000000e,0x000004c4,0x0000046c,0x00050080,0x0000000e,0x000004c5, + 0x000004c3,0x000004c4,0x0004003d,0x0000000e,0x000004c6,0x000004b1,0x00050080,0x0000000e, + 0x000004c7,0x000004c5,0x000004c6,0x0004003d,0x0000000e,0x000004c8,0x000004b9,0x00050084, + 0x0000000e,0x000004c9,0x000004c8,0x000000df,0x00050080,0x0000000e,0x000004ca,0x000004c7, + 0x000004c9,0x00050041,0x00000299,0x000004cb,0x00000297,0x000004ca,0x0004003d,0x0000000e, + 0x000004cc,0x0000049b,0x00050084,0x0000000e,0x000004cd,0x000004cc,0x00000289,0x0004003d, + 0x0000000e,0x000004ce,0x0000046c,0x00050080,0x0000000e,0x000004cf,0x000004cd,0x000004ce, + 0x0004003d,0x0000000e,0x000004d0,0x000004b1,0x00050080,0x0000000e,0x000004d1,0x000004cf, + 0x000004d0,0x0004003d,0x0000000e,0x000004d2,0x000004b9,0x00050084,0x0000000e,0x000004d3, + 0x000004d2,0x000000df,0x00050080,0x0000000e,0x000004d4,0x000004d1,0x000004d3,0x00081169, + 0x000003ae,0x000004d5,0x000004cb,0x000001de,0x00000289,0x00000030,0x0000028e,0x0003003e, + 0x000004c1,0x000004d5,0x0004003d,0x0000000e,0x000004d7,0x000004b1,0x00050084,0x0000000e, + 0x000004d8,0x000004d7,0x000002ae,0x0004003d,0x0000000e,0x000004d9,0x0000049f,0x00050080, + 0x0000000e,0x000004da,0x000004d8,0x000004d9,0x0004003d,0x0000000e,0x000004db,0x000004b9, + 0x00050084,0x0000000e,0x000004dd,0x000004db,0x000004dc,0x00050080,0x0000000e,0x000004de, + 0x000004da,0x000004dd,0x00050041,0x00000299,0x000004df,0x0000037a,0x000004de,0x0004003d, + 0x0000000e,0x000004e0,0x000004b1,0x00050084,0x0000000e,0x000004e1,0x000004e0,0x000002ae, + 0x0004003d,0x0000000e,0x000004e2,0x0000049f,0x00050080,0x0000000e,0x000004e3,0x000004e1, + 0x000004e2,0x0004003d,0x0000000e,0x000004e4,0x000004b9,0x00050084,0x0000000e,0x000004e5, + 0x000004e4,0x000004dc,0x00050080,0x0000000e,0x000004e6,0x000004e3,0x000004e5,0x00081169, + 0x000003bd,0x000004e7,0x000004df,0x000001de,0x000002ae,0x00000030,0x0000028e,0x0003003e, + 0x000004d6,0x000004e7,0x0004003d,0x000003ae,0x000004e8,0x000004c1,0x0004003d,0x000003bd, + 0x000004e9,0x000004d6,0x0004003d,0x000003a2,0x000004ea,0x000004ae,0x0006116b,0x000003a2, + 0x000004eb,0x000004e8,0x000004e9,0x000004ea,0x0003003e,0x000004ae,0x000004eb,0x000200f9, + 0x000004bd,0x000200f8,0x000004bd,0x0004003d,0x0000000e,0x000004ec,0x000004b9,0x00050080, + 0x0000000e,0x000004ed,0x000004ec,0x00000205,0x0003003e,0x000004b9,0x000004ed,0x000200f9, + 0x000004ba,0x000200f8,0x000004bc,0x0003003e,0x000004ee,0x000001de,0x000200f9,0x000004ef, + 0x000200f8,0x000004ef,0x000400f6,0x000004f1,0x000004f2,0x00000000,0x000200f9,0x000004f3, + 0x000200f8,0x000004f3,0x0004003d,0x000001db,0x000004f4,0x000004ee,0x0004116c,0x0000000e, + 0x000004f5,0x000003a2,0x0004007c,0x000001db,0x000004f6,0x000004f5,0x000500b1,0x0000005b, + 0x000004f7,0x000004f4,0x000004f6,0x000400fa,0x000004f7,0x000004f0,0x000004f1,0x000200f8, + 0x000004f0,0x0004003d,0x000001db,0x000004f8,0x000004ee,0x0004003d,0x000001db,0x000004f9, + 0x000004ee,0x00050041,0x00000007,0x000004fb,0x000004ae,0x000004f9,0x0004003d,0x00000006, + 0x000004fc,0x000004fb,0x0003003e,0x000004fa,0x000004fc,0x00050039,0x00000006,0x000004fd, + 0x0000000a,0x000004fa,0x00050041,0x00000007,0x000004fe,0x000004ae,0x000004f8,0x0003003e, + 0x000004fe,0x000004fd,0x000200f9,0x000004f2,0x000200f8,0x000004f2,0x0004003d,0x000001db, + 0x000004ff,0x000004ee,0x00050080,0x000001db,0x00000500,0x000004ff,0x00000205,0x0003003e, + 0x000004ee,0x00000500,0x000200f9,0x000004ef,0x000200f8,0x000004f1,0x000200f9,0x000004b5, + 0x000200f8,0x000004b5,0x0004003d,0x0000000e,0x00000501,0x000004b1,0x00050080,0x0000000e, + 0x00000502,0x00000501,0x000002ae,0x0003003e,0x000004b1,0x00000502,0x000200f9,0x000004b2, + 0x000200f8,0x000004b4,0x0004003d,0x000003a2,0x00000504,0x000004ae,0x00040073,0x000003e5, + 0x00000505,0x00000504,0x0003003e,0x00000503,0x00000505,0x0004003d,0x000003e5,0x00000506, + 0x00000503,0x0004003d,0x0000000e,0x00000507,0x0000049b,0x00050084,0x0000000e,0x00000508, + 0x00000507,0x000002ae,0x0004003d,0x0000000e,0x00000509,0x0000049f,0x00050080,0x0000000e, + 0x0000050a,0x00000508,0x00000509,0x00050041,0x00000299,0x0000050b,0x00000467,0x0000050a, + 0x0004003d,0x0000000e,0x0000050c,0x0000049b,0x00050084,0x0000000e,0x0000050d,0x0000050c, + 0x000002ae,0x0004003d,0x0000000e,0x0000050e,0x0000049f,0x00050080,0x0000000e,0x0000050f, + 0x0000050d,0x0000050e,0x0007116a,0x0000050b,0x00000506,0x000001de,0x000002ae,0x00000028, + 0x0000028e,0x000200f9,0x00000497,0x000200f8,0x00000497,0x0004003d,0x0000000e,0x00000510, + 0x000003f8,0x0004003d,0x0000000e,0x00000511,0x00000492,0x00050080,0x0000000e,0x00000512, + 0x00000511,0x00000510,0x0003003e,0x00000492,0x00000512,0x000200f9,0x00000494,0x000200f8, + 0x00000496,0x000400e0,0x0000028e,0x0000028e,0x0000036d,0x000200f9,0x00000470,0x000200f8, + 0x00000470,0x0004003d,0x0000000e,0x00000513,0x0000046c,0x00050080,0x0000000e,0x00000514, + 0x00000513,0x000003fc,0x0003003e,0x0000046c,0x00000514,0x000200f9,0x0000046d,0x000200f8, + 0x0000046f,0x0004003d,0x0000000e,0x00000516,0x0000031e,0x0003003e,0x00000515,0x00000516, + 0x000200f9,0x00000517,0x000200f8,0x00000517,0x000400f6,0x00000519,0x0000051a,0x00000000, + 0x000200f9,0x0000051b,0x000200f8,0x0000051b,0x0004003d,0x0000000e,0x0000051c,0x00000515, + 0x000500b0,0x0000005b,0x0000051d,0x0000051c,0x00000347,0x000400fa,0x0000051d,0x00000518, + 0x00000519,0x000200f8,0x00000518,0x0004003d,0x0000000e,0x0000051f,0x00000515,0x000500c2, + 0x0000000e,0x00000520,0x0000051f,0x00000354,0x0003003e,0x0000051e,0x00000520,0x0004003d, + 0x0000000e,0x00000522,0x00000515,0x000500c7,0x0000000e,0x00000523,0x00000522,0x000000ee, + 0x0003003e,0x00000521,0x00000523,0x0004003d,0x0000000e,0x00000525,0x00000329,0x00050084, + 0x0000000e,0x00000526,0x00000525,0x00000112,0x0004003d,0x0000000e,0x00000527,0x0000051e, + 0x00050080,0x0000000e,0x00000528,0x00000526,0x00000527,0x0003003e,0x00000524,0x00000528, + 0x0004003d,0x0000000e,0x00000529,0x00000524,0x00050041,0x00000330,0x0000052a,0x0000032f, + 0x000001de,0x0004003d,0x0000000e,0x0000052b,0x0000052a,0x000500ae,0x0000005b,0x0000052c, + 0x00000529,0x0000052b,0x000300f7,0x0000052e,0x00000000,0x000400fa,0x0000052c,0x0000052d, + 0x0000052e,0x000200f8,0x0000052d,0x000200f9,0x0000051a,0x000200f8,0x0000052e,0x0004003d, + 0x0000000e,0x00000531,0x00000515,0x00050041,0x00000299,0x00000532,0x00000467,0x00000531, + 0x0006003d,0x0000000c,0x00000533,0x00000532,0x00000030,0x0000028e,0x00040073,0x00000006, + 0x00000534,0x00000533,0x0004003d,0x0000000e,0x00000535,0x0000051e,0x00050041,0x00000299, + 0x00000536,0x0000043f,0x00000535,0x0006003d,0x0000000c,0x00000537,0x00000536,0x00000030, + 0x0000028e,0x00040073,0x00000006,0x00000538,0x00000537,0x00050085,0x00000006,0x00000539, + 0x00000534,0x00000538,0x0003003e,0x0000053a,0x00000539,0x00050039,0x00000006,0x0000053b, + 0x0000000a,0x0000053a,0x0003003e,0x00000530,0x0000053b,0x0004003d,0x0000000e,0x00000540, + 0x00000524,0x00050041,0x00000330,0x00000541,0x0000032f,0x000001e5,0x0004003d,0x0000000e, + 0x00000542,0x00000541,0x00050084,0x0000000e,0x00000543,0x00000540,0x00000542,0x0004003d, + 0x0000000e,0x00000544,0x00000325,0x00050084,0x0000000e,0x00000545,0x00000544,0x000002ae, + 0x00050080,0x0000000e,0x00000546,0x00000543,0x00000545,0x0004003d,0x0000000e,0x00000547, + 0x00000521,0x00050080,0x0000000e,0x00000548,0x00000546,0x00000547,0x0004003d,0x00000006, + 0x00000549,0x00000530,0x00040073,0x0000000c,0x0000054a,0x00000549,0x0003003e,0x0000054b, + 0x0000054a,0x00050039,0x0000000e,0x0000054c,0x00000011,0x0000054b,0x0003003e,0x0000054d, + 0x0000054c,0x00050039,0x0000000e,0x0000054e,0x0000001f,0x0000054d,0x00040071,0x0000034d, + 0x0000054f,0x0000054e,0x00060041,0x0000035c,0x00000550,0x0000053f,0x000001de,0x00000548, + 0x0003003e,0x00000550,0x0000054f,0x000200f9,0x0000051a,0x000200f8,0x0000051a,0x0004003d, + 0x0000000e,0x00000551,0x00000515,0x00050080,0x0000000e,0x00000552,0x00000551,0x000002ae, + 0x0003003e,0x00000515,0x00000552,0x000200f9,0x00000517,0x000200f8,0x00000519,0x000100fd, + 0x00010038,0x00050036,0x00000006,0x0000000a,0x00000000,0x00000008,0x00030037,0x00000007, + 0x00000009,0x000200f8,0x0000000b,0x0004003b,0x00000013,0x0000004e,0x00000007,0x0004003b, + 0x00000013,0x00000051,0x00000007,0x0004003b,0x00000013,0x00000055,0x00000007,0x0004003b, + 0x00000007,0x0000006f,0x00000007,0x0004003b,0x00000013,0x00000080,0x00000007,0x0004003b, + 0x00000013,0x00000086,0x00000007,0x0004003d,0x00000006,0x0000004f,0x00000009,0x0004007c, + 0x0000000e,0x00000050,0x0000004f,0x0003003e,0x0000004e,0x00000050,0x0004003d,0x0000000e, + 0x00000052,0x0000004e,0x000500c7,0x0000000e,0x00000054,0x00000052,0x00000053,0x0003003e, + 0x00000051,0x00000054,0x0004003d,0x0000000e,0x00000056,0x0000004e,0x000500c7,0x0000000e, + 0x00000058,0x00000056,0x00000057,0x0003003e,0x00000055,0x00000058,0x0004003d,0x0000000e, + 0x00000059,0x00000055,0x000500ae,0x0000005b,0x0000005c,0x00000059,0x0000005a,0x000300f7, + 0x0000005e,0x00000000,0x000400fa,0x0000005c,0x0000005d,0x0000005e,0x000200f8,0x0000005d, + 0x0004003d,0x00000006,0x0000005f,0x00000009,0x000200fe,0x0000005f,0x000200f8,0x0000005e, + 0x0004003d,0x0000000e,0x00000061,0x00000055,0x000500ae,0x0000005b,0x00000063,0x00000061, + 0x00000062,0x000300f7,0x00000065,0x00000000,0x000400fa,0x00000063,0x00000064,0x00000065, + 0x000200f8,0x00000064,0x0004003d,0x0000000e,0x00000066,0x00000051,0x000500c5,0x0000000e, + 0x00000067,0x00000066,0x0000005a,0x0004007c,0x00000006,0x00000068,0x00000067,0x000200fe, + 0x00000068,0x000200f8,0x00000065,0x0004003d,0x0000000e,0x0000006a,0x00000055,0x000500b0, + 0x0000005b,0x0000006c,0x0000006a,0x0000006b,0x000300f7,0x0000006e,0x00000000,0x000400fa, + 0x0000006c,0x0000006d,0x0000006e,0x000200f8,0x0000006d,0x0004003d,0x0000000e,0x00000070, + 0x00000055,0x0004007c,0x00000006,0x00000071,0x00000070,0x00050085,0x00000006,0x00000073, + 0x00000071,0x00000072,0x0006000c,0x00000006,0x00000074,0x00000001,0x00000002,0x00000073, + 0x0003003e,0x0000006f,0x00000074,0x0004003d,0x0000000e,0x00000075,0x00000051,0x0004007c, + 0x00000006,0x00000076,0x00000075,0x0004003d,0x0000000e,0x00000077,0x00000051,0x0004003d, + 0x00000006,0x00000078,0x0000006f,0x00050085,0x00000006,0x0000007a,0x00000078,0x00000079, + 0x0004007c,0x0000000e,0x0000007b,0x0000007a,0x000500c5,0x0000000e,0x0000007c,0x00000077, + 0x0000007b,0x0004007c,0x00000006,0x0000007d,0x0000007c,0x00050081,0x00000006,0x0000007e, + 0x00000076,0x0000007d,0x000200fe,0x0000007e,0x000200f8,0x0000006e,0x0004003d,0x0000000e, + 0x00000081,0x00000055,0x000500c2,0x0000000e,0x00000083,0x00000081,0x00000082,0x000500c7, + 0x0000000e,0x00000085,0x00000083,0x00000084,0x0003003e,0x00000080,0x00000085,0x0004003d, + 0x0000000e,0x00000087,0x00000055,0x00050080,0x0000000e,0x00000089,0x00000087,0x00000088, + 0x0004003d,0x0000000e,0x0000008a,0x00000080,0x00050080,0x0000000e,0x0000008b,0x00000089, + 0x0000008a,0x000500c7,0x0000000e,0x0000008d,0x0000008b,0x0000008c,0x0003003e,0x00000086, + 0x0000008d,0x0004003d,0x0000000e,0x0000008e,0x00000051,0x0004003d,0x0000000e,0x0000008f, + 0x00000086,0x000500c5,0x0000000e,0x00000090,0x0000008e,0x0000008f,0x0004007c,0x00000006, + 0x00000091,0x00000090,0x000200fe,0x00000091,0x00010038,0x00050036,0x0000000e,0x00000011, + 0x00000000,0x0000000f,0x00030037,0x0000000d,0x00000010,0x000200f8,0x00000012,0x0004003d, + 0x0000000c,0x00000094,0x00000010,0x0004007c,0x00000095,0x00000096,0x00000094,0x00040071, + 0x0000000e,0x00000097,0x00000096,0x000200fe,0x00000097,0x00010038,0x00050036,0x0000000c, + 0x00000016,0x00000000,0x00000014,0x00030037,0x00000013,0x00000015,0x000200f8,0x00000017, + 0x0004003d,0x0000000e,0x0000009a,0x00000015,0x000500c7,0x0000000e,0x0000009c,0x0000009a, + 0x0000009b,0x00040071,0x00000095,0x0000009d,0x0000009c,0x0004007c,0x0000000c,0x0000009e, + 0x0000009d,0x000200fe,0x0000009e,0x00010038,0x00050036,0x0000000e,0x0000001b,0x00000000, + 0x00000018,0x00030037,0x00000013,0x00000019,0x00030037,0x00000013,0x0000001a,0x000200f8, + 0x0000001c,0x0004003b,0x00000013,0x000000a1,0x00000007,0x0004003b,0x00000013,0x000000a5, + 0x00000007,0x0004003b,0x00000013,0x000000a9,0x00000007,0x0004003b,0x00000013,0x000000ad, + 0x00000007,0x0004003d,0x0000000e,0x000000a2,0x00000019,0x0004003d,0x0000000e,0x000000a3, + 0x0000001a,0x000500c2,0x0000000e,0x000000a4,0x000000a2,0x000000a3,0x0003003e,0x000000a1, + 0x000000a4,0x0004003d,0x0000000e,0x000000a6,0x0000001a,0x000500c4,0x0000000e,0x000000a7, + 0x00000084,0x000000a6,0x00050082,0x0000000e,0x000000a8,0x000000a7,0x00000084,0x0003003e, + 0x000000a5,0x000000a8,0x0004003d,0x0000000e,0x000000aa,0x00000019,0x0004003d,0x0000000e, + 0x000000ab,0x000000a5,0x000500c7,0x0000000e,0x000000ac,0x000000aa,0x000000ab,0x0003003e, + 0x000000a9,0x000000ac,0x0004003d,0x0000000e,0x000000ae,0x0000001a,0x00050082,0x0000000e, + 0x000000af,0x000000ae,0x00000084,0x000500c4,0x0000000e,0x000000b0,0x00000084,0x000000af, + 0x0003003e,0x000000ad,0x000000b0,0x0004003d,0x0000000e,0x000000b1,0x000000a1,0x0004003d, + 0x0000000e,0x000000b2,0x000000a9,0x0004003d,0x0000000e,0x000000b3,0x000000ad,0x000500ac, + 0x0000005b,0x000000b4,0x000000b2,0x000000b3,0x000400a8,0x0000005b,0x000000b5,0x000000b4, + 0x000300f7,0x000000b7,0x00000000,0x000400fa,0x000000b5,0x000000b6,0x000000b7,0x000200f8, + 0x000000b6,0x0004003d,0x0000000e,0x000000b8,0x000000a9,0x0004003d,0x0000000e,0x000000b9, + 0x000000ad,0x000500aa,0x0000005b,0x000000ba,0x000000b8,0x000000b9,0x000300f7,0x000000bc, + 0x00000000,0x000400fa,0x000000ba,0x000000bb,0x000000bc,0x000200f8,0x000000bb,0x0004003d, + 0x0000000e,0x000000bd,0x000000a1,0x000500c7,0x0000000e,0x000000be,0x000000bd,0x00000084, + 0x000500ab,0x0000005b,0x000000c0,0x000000be,0x000000bf,0x000200f9,0x000000bc,0x000200f8, + 0x000000bc,0x000700f5,0x0000005b,0x000000c1,0x000000ba,0x000000b6,0x000000c0,0x000000bb, + 0x000200f9,0x000000b7,0x000200f8,0x000000b7,0x000700f5,0x0000005b,0x000000c2,0x000000b4, + 0x0000001c,0x000000c1,0x000000bc,0x000600a9,0x0000000e,0x000000c3,0x000000c2,0x00000084, + 0x000000bf,0x00050080,0x0000000e,0x000000c4,0x000000b1,0x000000c3,0x000200fe,0x000000c4, + 0x00010038,0x00050036,0x0000000e,0x0000001f,0x00000000,0x0000001d,0x00030037,0x00000013, + 0x0000001e,0x000200f8,0x00000020,0x0004003b,0x000000c7,0x000000c8,0x00000007,0x0004003b, + 0x00000013,0x000000e4,0x00000007,0x0004003b,0x00000013,0x000000ea,0x00000007,0x0004003b, + 0x00000013,0x000000f0,0x00000007,0x0004003b,0x00000013,0x000000f7,0x00000007,0x0004003b, + 0x00000013,0x000000fe,0x00000007,0x0004003b,0x00000013,0x00000101,0x00000007,0x0004003b, + 0x00000013,0x0000010a,0x00000007,0x0004003b,0x00000013,0x0000010d,0x00000007,0x0004003b, + 0x00000013,0x00000116,0x00000007,0x0004003b,0x00000013,0x00000118,0x00000007,0x0004003b, + 0x00000013,0x0000011d,0x00000007,0x0004003b,0x00000013,0x00000120,0x00000007,0x0004003b, + 0x00000013,0x00000122,0x00000007,0x0004003b,0x00000013,0x00000124,0x00000007,0x0004003b, + 0x00000013,0x00000138,0x00000007,0x0004003d,0x0000000e,0x000000c9,0x0000001e,0x000500c7, + 0x0000000e,0x000000cb,0x000000c9,0x000000ca,0x000500aa,0x0000005b,0x000000cc,0x000000cb, + 0x000000ca,0x000300f7,0x000000ce,0x00000000,0x000400fa,0x000000cc,0x000000cd,0x000000ce, + 0x000200f8,0x000000cd,0x0004003d,0x0000000e,0x000000cf,0x0000001e,0x000500c7,0x0000000e, + 0x000000d1,0x000000cf,0x000000d0,0x000500ab,0x0000005b,0x000000d2,0x000000d1,0x000000bf, + 0x000200f9,0x000000ce,0x000200f8,0x000000ce,0x000700f5,0x0000005b,0x000000d3,0x000000cc, + 0x00000020,0x000000d2,0x000000cd,0x0003003e,0x000000c8,0x000000d3,0x0004003d,0x0000005b, + 0x000000d4,0x000000c8,0x000300f7,0x000000d6,0x00000000,0x000400fa,0x000000d4,0x000000d5, + 0x000000d6,0x000200f8,0x000000d5,0x000200fe,0x000000bf,0x000200f8,0x000000d6,0x0004003d, + 0x0000000e,0x000000d8,0x0000001e,0x000500c7,0x0000000e,0x000000da,0x000000d8,0x000000d9, + 0x000500aa,0x0000005b,0x000000db,0x000000da,0x000000bf,0x000300f7,0x000000dd,0x00000000, + 0x000400fa,0x000000db,0x000000dc,0x000000dd,0x000200f8,0x000000dc,0x0004003d,0x0000000e, + 0x000000de,0x0000001e,0x000500c2,0x0000000e,0x000000e0,0x000000de,0x000000df,0x000500c7, + 0x0000000e,0x000000e2,0x000000e0,0x000000e1,0x000200fe,0x000000e2,0x000200f8,0x000000dd, + 0x0004003d,0x0000000e,0x000000e5,0x0000001e,0x000500c7,0x0000000e,0x000000e7,0x000000e5, + 0x000000e6,0x000500ab,0x0000005b,0x000000e8,0x000000e7,0x000000bf,0x000600a9,0x0000000e, + 0x000000e9,0x000000e8,0x000000e1,0x000000bf,0x0003003e,0x000000e4,0x000000e9,0x0004003d, + 0x0000000e,0x000000eb,0x0000001e,0x000500c2,0x0000000e,0x000000ed,0x000000eb,0x000000ec, + 0x000500c7,0x0000000e,0x000000ef,0x000000ed,0x000000ee,0x0003003e,0x000000ea,0x000000ef, + 0x0004003d,0x0000000e,0x000000f1,0x0000001e,0x000500c7,0x0000000e,0x000000f2,0x000000f1, + 0x000000d0,0x0003003e,0x000000f0,0x000000f2,0x0004003d,0x0000000e,0x000000f3,0x000000ea, + 0x000500aa,0x0000005b,0x000000f4,0x000000f3,0x000000ee,0x000300f7,0x000000f6,0x00000000, + 0x000400fa,0x000000f4,0x000000f5,0x000000f9,0x000200f8,0x000000f5,0x0003003e,0x000000f7, + 0x000000f8,0x000200f9,0x000000f6,0x000200f8,0x000000f9,0x0004003d,0x0000000e,0x000000fa, + 0x000000ea,0x000500b2,0x0000005b,0x000000fb,0x000000fa,0x000000df,0x000300f7,0x000000fd, + 0x00000000,0x000400fa,0x000000fb,0x000000fc,0x0000011c,0x000200f8,0x000000fc,0x0004003d, + 0x0000000e,0x000000ff,0x000000ea,0x000500aa,0x0000005b,0x00000100,0x000000ff,0x000000bf, + 0x000300f7,0x00000103,0x00000000,0x000400fa,0x00000100,0x00000102,0x00000105,0x000200f8, + 0x00000102,0x0004003d,0x0000000e,0x00000104,0x000000f0,0x0003003e,0x00000101,0x00000104, + 0x000200f9,0x00000103,0x000200f8,0x00000105,0x0004003d,0x0000000e,0x00000107,0x000000f0, + 0x00050080,0x0000000e,0x00000108,0x00000106,0x00000107,0x0003003e,0x00000101,0x00000108, + 0x000200f9,0x00000103,0x000200f8,0x00000103,0x0004003d,0x0000000e,0x00000109,0x00000101, + 0x0003003e,0x000000fe,0x00000109,0x0004003d,0x0000000e,0x0000010b,0x000000ea,0x000500aa, + 0x0000005b,0x0000010c,0x0000010b,0x000000bf,0x000300f7,0x0000010f,0x00000000,0x000400fa, + 0x0000010c,0x0000010e,0x00000111,0x000200f8,0x0000010e,0x0003003e,0x0000010d,0x00000110, + 0x000200f9,0x0000010f,0x000200f8,0x00000111,0x0004003d,0x0000000e,0x00000113,0x000000ea, + 0x00050082,0x0000000e,0x00000114,0x00000112,0x00000113,0x0003003e,0x0000010d,0x00000114, + 0x000200f9,0x0000010f,0x000200f8,0x0000010f,0x0004003d,0x0000000e,0x00000115,0x0000010d, + 0x0003003e,0x0000010a,0x00000115,0x0004003d,0x0000000e,0x00000117,0x000000fe,0x0003003e, + 0x00000116,0x00000117,0x0004003d,0x0000000e,0x00000119,0x0000010a,0x0003003e,0x00000118, + 0x00000119,0x00060039,0x0000000e,0x0000011a,0x0000001b,0x00000116,0x00000118,0x0007000c, + 0x0000000e,0x0000011b,0x00000001,0x00000026,0x0000011a,0x000000df,0x0003003e,0x000000f7, + 0x0000011b,0x000200f9,0x000000fd,0x000200f8,0x0000011c,0x0004003d,0x0000000e,0x0000011e, + 0x000000ea,0x00050082,0x0000000e,0x0000011f,0x0000011e,0x000000df,0x0003003e,0x0000011d, + 0x0000011f,0x0004003d,0x0000000e,0x00000123,0x000000f0,0x0003003e,0x00000122,0x00000123, + 0x0003003e,0x00000124,0x00000121,0x00060039,0x0000000e,0x00000125,0x0000001b,0x00000122, + 0x00000124,0x0003003e,0x00000120,0x00000125,0x0004003d,0x0000000e,0x00000126,0x00000120, + 0x000500aa,0x0000005b,0x00000127,0x00000126,0x000000df,0x000300f7,0x00000129,0x00000000, + 0x000400fa,0x00000127,0x00000128,0x00000129,0x000200f8,0x00000128,0x0003003e,0x00000120, + 0x000000bf,0x0004003d,0x0000000e,0x0000012a,0x0000011d,0x00050080,0x0000000e,0x0000012b, + 0x0000012a,0x00000084,0x0003003e,0x0000011d,0x0000012b,0x000200f9,0x00000129,0x000200f8, + 0x00000129,0x0004003d,0x0000000e,0x0000012c,0x0000011d,0x000500ac,0x0000005b,0x0000012d, + 0x0000012c,0x00000110,0x000400a8,0x0000005b,0x0000012e,0x0000012d,0x000300f7,0x00000130, + 0x00000000,0x000400fa,0x0000012e,0x0000012f,0x00000130,0x000200f8,0x0000012f,0x0004003d, + 0x0000000e,0x00000131,0x0000011d,0x000500aa,0x0000005b,0x00000132,0x00000131,0x00000110, + 0x0004003d,0x0000000e,0x00000133,0x00000120,0x000500ac,0x0000005b,0x00000135,0x00000133, + 0x00000134,0x000500a7,0x0000005b,0x00000136,0x00000132,0x00000135,0x000200f9,0x00000130, + 0x000200f8,0x00000130,0x000700f5,0x0000005b,0x00000137,0x0000012d,0x00000129,0x00000136, + 0x0000012f,0x000300f7,0x0000013a,0x00000000,0x000400fa,0x00000137,0x00000139,0x0000013b, + 0x000200f8,0x00000139,0x0003003e,0x00000138,0x000000f8,0x000200f9,0x0000013a,0x000200f8, + 0x0000013b,0x0004003d,0x0000000e,0x0000013c,0x0000011d,0x000500c4,0x0000000e,0x0000013e, + 0x0000013c,0x0000013d,0x0004003d,0x0000000e,0x0000013f,0x00000120,0x000500c5,0x0000000e, + 0x00000140,0x0000013e,0x0000013f,0x0003003e,0x00000138,0x00000140,0x000200f9,0x0000013a, + 0x000200f8,0x0000013a,0x0004003d,0x0000000e,0x00000141,0x00000138,0x0003003e,0x000000f7, + 0x00000141,0x000200f9,0x000000fd,0x000200f8,0x000000fd,0x000200f9,0x000000f6,0x000200f8, + 0x000000f6,0x0004003d,0x0000000e,0x00000142,0x000000e4,0x0004003d,0x0000000e,0x00000143, + 0x000000f7,0x000500c5,0x0000000e,0x00000144,0x00000142,0x00000143,0x000200fe,0x00000144, + 0x00010038,0x00050036,0x00000006,0x00000023,0x00000000,0x00000021,0x00030037,0x00000013, + 0x00000022,0x000200f8,0x00000024,0x0004003b,0x000000c7,0x00000147,0x00000007,0x0004003b, + 0x00000013,0x0000014b,0x00000007,0x0004003b,0x00000013,0x0000014f,0x00000007,0x0004003b, + 0x00000007,0x00000156,0x00000007,0x0004003b,0x00000007,0x00000173,0x00000007,0x0004003d, + 0x0000000e,0x00000148,0x00000022,0x000500c7,0x0000000e,0x00000149,0x00000148,0x000000e1, + 0x000500ab,0x0000005b,0x0000014a,0x00000149,0x000000bf,0x0003003e,0x00000147,0x0000014a, + 0x0004003d,0x0000000e,0x0000014c,0x00000022,0x000500c2,0x0000000e,0x0000014d,0x0000014c, + 0x0000013d,0x000500c7,0x0000000e,0x0000014e,0x0000014d,0x00000110,0x0003003e,0x0000014b, + 0x0000014e,0x0004003d,0x0000000e,0x00000150,0x00000022,0x000500c7,0x0000000e,0x00000151, + 0x00000150,0x00000121,0x0003003e,0x0000014f,0x00000151,0x0004003d,0x0000000e,0x00000152, + 0x0000014b,0x000500aa,0x0000005b,0x00000153,0x00000152,0x000000bf,0x000300f7,0x00000155, + 0x00000000,0x000400fa,0x00000153,0x00000154,0x0000015b,0x000200f8,0x00000154,0x0004003d, + 0x0000000e,0x00000157,0x0000014f,0x00040070,0x00000006,0x00000158,0x00000157,0x00050085, + 0x00000006,0x0000015a,0x00000158,0x00000159,0x0003003e,0x00000156,0x0000015a,0x000200f9, + 0x00000155,0x000200f8,0x0000015b,0x0004003d,0x0000000e,0x0000015c,0x0000014b,0x000500aa, + 0x0000005b,0x0000015d,0x0000015c,0x00000110,0x0004003d,0x0000000e,0x0000015e,0x0000014f, + 0x000500aa,0x0000005b,0x0000015f,0x0000015e,0x00000121,0x000500a7,0x0000005b,0x00000160, + 0x0000015d,0x0000015f,0x000300f7,0x00000162,0x00000000,0x000400fa,0x00000160,0x00000161, + 0x00000164,0x000200f8,0x00000161,0x0003003e,0x00000156,0x00000163,0x000200f9,0x00000162, + 0x000200f8,0x00000164,0x0004003d,0x0000000e,0x00000166,0x0000014f,0x00040070,0x00000006, + 0x00000167,0x00000166,0x00050085,0x00000006,0x00000169,0x00000167,0x00000168,0x00050081, + 0x00000006,0x0000016a,0x00000165,0x00000169,0x0004003d,0x0000000e,0x0000016b,0x0000014b, + 0x00050080,0x0000000e,0x0000016d,0x0000016b,0x0000016c,0x000500c4,0x0000000e,0x0000016f, + 0x0000016d,0x0000016e,0x0004007c,0x00000006,0x00000170,0x0000016f,0x00050085,0x00000006, + 0x00000171,0x0000016a,0x00000170,0x0003003e,0x00000156,0x00000171,0x000200f9,0x00000162, + 0x000200f8,0x00000162,0x000200f9,0x00000155,0x000200f8,0x00000155,0x0004003d,0x0000005b, + 0x00000172,0x00000147,0x000300f7,0x00000175,0x00000000,0x000400fa,0x00000172,0x00000174, + 0x00000178,0x000200f8,0x00000174,0x0004003d,0x00000006,0x00000176,0x00000156,0x0004007f, + 0x00000006,0x00000177,0x00000176,0x0003003e,0x00000173,0x00000177,0x000200f9,0x00000175, + 0x000200f8,0x00000178,0x0004003d,0x00000006,0x00000179,0x00000156,0x0003003e,0x00000173, + 0x00000179,0x000200f9,0x00000175,0x000200f8,0x00000175,0x0004003d,0x00000006,0x0000017a, + 0x00000173,0x000200fe,0x0000017a,0x00010038,0x00050036,0x0000000c,0x00000026,0x00000000, + 0x00000014,0x00030037,0x00000013,0x00000025,0x000200f8,0x00000027,0x0004003b,0x00000013, + 0x0000017d,0x00000007,0x0004003d,0x0000000e,0x0000017e,0x00000025,0x0003003e,0x0000017d, + 0x0000017e,0x00050039,0x00000006,0x0000017f,0x00000023,0x0000017d,0x00040073,0x0000000c, + 0x00000180,0x0000017f,0x000200fe,0x00000180,0x00010038,0x00050036,0x00000006,0x0000002a, + 0x00000000,0x00000028,0x00030037,0x0000000d,0x00000029,0x000200f8,0x0000002b,0x0004003b, + 0x00000013,0x00000183,0x00000007,0x0004003b,0x0000000d,0x00000184,0x00000007,0x0004003b, + 0x00000007,0x0000018a,0x00000007,0x0004003b,0x00000013,0x00000194,0x00000007,0x0004003d, + 0x0000000c,0x00000185,0x00000029,0x0003003e,0x00000184,0x00000185,0x00050039,0x0000000e, + 0x00000186,0x00000011,0x00000184,0x0003003e,0x00000183,0x00000186,0x0004003d,0x0000000e, + 0x00000187,0x00000183,0x000500ae,0x0000005b,0x00000189,0x00000187,0x00000188,0x000300f7, + 0x0000018c,0x00000000,0x000400fa,0x00000189,0x0000018b,0x0000018e,0x000200f8,0x0000018b, + 0x0003003e,0x0000018a,0x0000018d,0x000200f9,0x0000018c,0x000200f8,0x0000018e,0x0004003d, + 0x0000000c,0x00000190,0x00000029,0x00040073,0x00000006,0x00000191,0x00000190,0x0004003d, + 0x0000000e,0x00000192,0x00000183,0x00050080,0x0000000e,0x00000193,0x00000192,0x00000084, + 0x0003003e,0x00000194,0x00000193,0x00050039,0x0000000c,0x00000195,0x00000016,0x00000194, + 0x00040073,0x00000006,0x00000196,0x00000195,0x00050081,0x00000006,0x00000197,0x00000191, + 0x00000196,0x00050085,0x00000006,0x00000198,0x0000018f,0x00000197,0x0003003e,0x0000018a, + 0x00000198,0x000200f9,0x0000018c,0x000200f8,0x0000018c,0x0004003d,0x00000006,0x00000199, + 0x0000018a,0x000200fe,0x00000199,0x00010038,0x00050036,0x00000006,0x0000002d,0x00000000, + 0x00000028,0x00030037,0x0000000d,0x0000002c,0x000200f8,0x0000002e,0x0004003b,0x0000000d, + 0x0000019e,0x00000007,0x0004003b,0x00000013,0x000001a2,0x00000007,0x0004003d,0x0000000c, + 0x0000019c,0x0000002c,0x00040073,0x00000006,0x0000019d,0x0000019c,0x0004003d,0x0000000c, + 0x0000019f,0x0000002c,0x0003003e,0x0000019e,0x0000019f,0x00050039,0x0000000e,0x000001a0, + 0x00000011,0x0000019e,0x00050082,0x0000000e,0x000001a1,0x000001a0,0x00000084,0x0003003e, + 0x000001a2,0x000001a1,0x00050039,0x0000000c,0x000001a3,0x00000016,0x000001a2,0x00040073, + 0x00000006,0x000001a4,0x000001a3,0x00050081,0x00000006,0x000001a5,0x0000019d,0x000001a4, + 0x00050085,0x00000006,0x000001a6,0x0000018f,0x000001a5,0x000200fe,0x000001a6,0x00010038, + 0x00050036,0x0000000c,0x00000031,0x00000000,0x0000002f,0x00030037,0x0000000d,0x00000030, + 0x000200f8,0x00000032,0x0004003b,0x0000000d,0x000001a9,0x00000007,0x0004003b,0x00000013, + 0x000001ad,0x00000007,0x0004003d,0x0000000c,0x000001aa,0x00000030,0x0003003e,0x000001a9, + 0x000001aa,0x00050039,0x0000000e,0x000001ab,0x00000011,0x000001a9,0x00050080,0x0000000e, + 0x000001ac,0x000001ab,0x00000084,0x0003003e,0x000001ad,0x000001ac,0x00050039,0x0000000c, + 0x000001ae,0x00000016,0x000001ad,0x000200fe,0x000001ae,0x00010038,0x00050036,0x0000000c, + 0x00000034,0x00000000,0x0000002f,0x00030037,0x0000000d,0x00000033,0x000200f8,0x00000035, + 0x0004003b,0x0000000d,0x000001b1,0x00000007,0x0004003b,0x00000013,0x000001b5,0x00000007, + 0x0004003d,0x0000000c,0x000001b2,0x00000033,0x0003003e,0x000001b1,0x000001b2,0x00050039, + 0x0000000e,0x000001b3,0x00000011,0x000001b1,0x00050082,0x0000000e,0x000001b4,0x000001b3, + 0x00000084,0x0003003e,0x000001b5,0x000001b4,0x00050039,0x0000000c,0x000001b6,0x00000016, + 0x000001b5,0x000200fe,0x000001b6,0x00010038,0x00050036,0x0000000c,0x00000037,0x00000000, + 0x0000002f,0x00030037,0x0000000d,0x00000036,0x000200f8,0x00000038,0x0004003b,0x00000007, + 0x000001b9,0x00000007,0x0004003b,0x0000000d,0x000001cb,0x00000007,0x0004003b,0x00000007, + 0x000001ce,0x00000007,0x0004003b,0x000001dc,0x000001dd,0x00000007,0x0004003b,0x00000007, + 0x000001e7,0x00000007,0x0004003b,0x0000000d,0x000001e8,0x00000007,0x0004003b,0x0000000d, + 0x000001f1,0x00000007,0x0004003b,0x00000007,0x000001f4,0x00000007,0x0004003b,0x0000000d, + 0x000001f5,0x00000007,0x0004003b,0x0000000d,0x00000201,0x00000007,0x0004003d,0x0000000c, + 0x000001ba,0x00000036,0x00040073,0x00000006,0x000001bb,0x000001ba,0x0003003e,0x000001b9, + 0x000001bb,0x0004003d,0x00000006,0x000001bc,0x000001b9,0x000500ba,0x0000005b,0x000001bd, + 0x000001bc,0x00000163,0x000400a8,0x0000005b,0x000001be,0x000001bd,0x000400a8,0x0000005b, + 0x000001bf,0x000001be,0x000300f7,0x000001c1,0x00000000,0x000400fa,0x000001bf,0x000001c0, + 0x000001c1,0x000200f8,0x000001c0,0x0004003d,0x00000006,0x000001c2,0x000001b9,0x0004009d, + 0x0000005b,0x000001c3,0x000001c2,0x000200f9,0x000001c1,0x000200f8,0x000001c1,0x000700f5, + 0x0000005b,0x000001c4,0x000001be,0x00000038,0x000001c3,0x000001c0,0x000300f7,0x000001c6, + 0x00000000,0x000400fa,0x000001c4,0x000001c5,0x000001c6,0x000200f8,0x000001c5,0x0004003d, + 0x00000006,0x000001c7,0x000001b9,0x00050088,0x00000006,0x000001c8,0x00000165,0x000001c7, + 0x00040073,0x0000000c,0x000001c9,0x000001c8,0x000200fe,0x000001c9,0x000200f8,0x000001c6, + 0x0004003d,0x00000006,0x000001cc,0x000001b9,0x00050088,0x00000006,0x000001cd,0x00000165, + 0x000001cc,0x0003003e,0x000001ce,0x000001cd,0x00050039,0x00000006,0x000001cf,0x0000000a, + 0x000001ce,0x00040073,0x0000000c,0x000001d0,0x000001cf,0x0003003e,0x000001cb,0x000001d0, + 0x0004003d,0x0000000c,0x000001d1,0x000001cb,0x0004009d,0x0000005b,0x000001d2,0x000001d1, + 0x0004003d,0x0000000c,0x000001d3,0x000001cb,0x000500b4,0x0000005b,0x000001d5,0x000001d3, + 0x000001d4,0x000500a6,0x0000005b,0x000001d6,0x000001d2,0x000001d5,0x000300f7,0x000001d8, + 0x00000000,0x000400fa,0x000001d6,0x000001d7,0x000001d8,0x000200f8,0x000001d7,0x0004003d, + 0x0000000c,0x000001d9,0x000001cb,0x000200fe,0x000001d9,0x000200f8,0x000001d8,0x0003003e, + 0x000001dd,0x000001de,0x000200f9,0x000001df,0x000200f8,0x000001df,0x000400f6,0x000001e1, + 0x000001e2,0x00000000,0x000200f9,0x000001e3,0x000200f8,0x000001e3,0x0004003d,0x000001db, + 0x000001e4,0x000001dd,0x000500b1,0x0000005b,0x000001e6,0x000001e4,0x000001e5,0x000400fa, + 0x000001e6,0x000001e0,0x000001e1,0x000200f8,0x000001e0,0x0004003d,0x0000000c,0x000001e9, + 0x000001cb,0x0003003e,0x000001e8,0x000001e9,0x00050039,0x00000006,0x000001ea,0x0000002a, + 0x000001e8,0x0004003d,0x00000006,0x000001eb,0x000001b9,0x00050085,0x00000006,0x000001ec, + 0x000001ea,0x000001eb,0x0003003e,0x000001e7,0x000001ec,0x0004003d,0x00000006,0x000001ed, + 0x000001e7,0x000500b8,0x0000005b,0x000001ee,0x000001ed,0x00000165,0x000300f7,0x000001f0, + 0x00000000,0x000400fa,0x000001ee,0x000001ef,0x000001f0,0x000200f8,0x000001ef,0x0004003d, + 0x0000000c,0x000001f2,0x000001cb,0x0003003e,0x000001f1,0x000001f2,0x00050039,0x0000000c, + 0x000001f3,0x00000031,0x000001f1,0x0003003e,0x000001cb,0x000001f3,0x000200f9,0x000001f0, + 0x000200f8,0x000001f0,0x0004003d,0x0000000c,0x000001f6,0x000001cb,0x0003003e,0x000001f5, + 0x000001f6,0x00050039,0x00000006,0x000001f7,0x0000002d,0x000001f5,0x0004003d,0x00000006, + 0x000001f8,0x000001b9,0x00050085,0x00000006,0x000001f9,0x000001f7,0x000001f8,0x0003003e, + 0x000001f4,0x000001f9,0x0004003d,0x0000000c,0x000001fa,0x000001cb,0x000500ba,0x0000005b, + 0x000001fb,0x000001fa,0x000001d4,0x0004003d,0x00000006,0x000001fc,0x000001f4,0x000500ba, + 0x0000005b,0x000001fd,0x000001fc,0x00000165,0x000500a7,0x0000005b,0x000001fe,0x000001fb, + 0x000001fd,0x000300f7,0x00000200,0x00000000,0x000400fa,0x000001fe,0x000001ff,0x00000200, + 0x000200f8,0x000001ff,0x0004003d,0x0000000c,0x00000202,0x000001cb,0x0003003e,0x00000201, + 0x00000202,0x00050039,0x0000000c,0x00000203,0x00000034,0x00000201,0x0003003e,0x000001cb, + 0x00000203,0x000200f9,0x00000200,0x000200f8,0x00000200,0x000200f9,0x000001e2,0x000200f8, + 0x000001e2,0x0004003d,0x000001db,0x00000204,0x000001dd,0x00050080,0x000001db,0x00000206, + 0x00000204,0x00000205,0x0003003e,0x000001dd,0x00000206,0x000200f9,0x000001df,0x000200f8, + 0x000001e1,0x0004003d,0x0000000c,0x00000207,0x000001cb,0x000200fe,0x00000207,0x00010038, + 0x00050036,0x0000000c,0x0000003d,0x00000000,0x00000039,0x00030037,0x0000000d,0x0000003a, + 0x00030037,0x0000000d,0x0000003b,0x00030037,0x0000000d,0x0000003c,0x000200f8,0x0000003e, + 0x0004003b,0x00000007,0x0000020a,0x00000007,0x0004003b,0x00000007,0x00000210,0x00000007, + 0x0004003b,0x00000007,0x00000215,0x00000007,0x0004003b,0x00000007,0x00000219,0x00000007, + 0x0004003b,0x00000007,0x0000021d,0x00000007,0x0004003b,0x000001dc,0x00000230,0x00000007, + 0x0004003b,0x00000007,0x0000023c,0x00000007,0x0004003b,0x00000007,0x00000244,0x00000007, + 0x0004003b,0x00000007,0x00000256,0x00000007,0x0004003b,0x00000007,0x00000261,0x00000007, + 0x0004003b,0x00000007,0x00000265,0x00000007,0x0004003d,0x0000000c,0x0000020b,0x0000003a, + 0x00040073,0x00000006,0x0000020c,0x0000020b,0x0004003d,0x0000000c,0x0000020d,0x0000003b, + 0x00040073,0x00000006,0x0000020e,0x0000020d,0x00050085,0x00000006,0x0000020f,0x0000020c, + 0x0000020e,0x0003003e,0x0000020a,0x0000020f,0x0004003d,0x00000006,0x00000211,0x0000020a, + 0x0004003d,0x0000000c,0x00000212,0x0000003c,0x00040073,0x00000006,0x00000213,0x00000212, + 0x00050081,0x00000006,0x00000214,0x00000211,0x00000213,0x0003003e,0x00000210,0x00000214, + 0x0004003d,0x00000006,0x00000216,0x00000210,0x0004003d,0x00000006,0x00000217,0x0000020a, + 0x00050083,0x00000006,0x00000218,0x00000216,0x00000217,0x0003003e,0x00000215,0x00000218, + 0x0004003d,0x00000006,0x0000021a,0x00000210,0x0004003d,0x00000006,0x0000021b,0x00000215, + 0x00050083,0x00000006,0x0000021c,0x0000021a,0x0000021b,0x0003003e,0x00000219,0x0000021c, + 0x0004003d,0x00000006,0x0000021e,0x0000020a,0x0004003d,0x00000006,0x0000021f,0x00000219, + 0x00050083,0x00000006,0x00000220,0x0000021e,0x0000021f,0x0004003d,0x0000000c,0x00000221, + 0x0000003c,0x00040073,0x00000006,0x00000222,0x00000221,0x0004003d,0x00000006,0x00000223, + 0x00000215,0x00050083,0x00000006,0x00000224,0x00000222,0x00000223,0x00050081,0x00000006, + 0x00000225,0x00000220,0x00000224,0x0003003e,0x0000021d,0x00000225,0x0004003d,0x00000006, + 0x00000226,0x0000021d,0x000500b7,0x0000005b,0x00000227,0x00000226,0x00000163,0x000300f7, + 0x00000229,0x00000000,0x000400fa,0x00000227,0x00000228,0x00000229,0x000200f8,0x00000228, + 0x0004003d,0x00000006,0x0000022a,0x00000210,0x0004009d,0x0000005b,0x0000022b,0x0000022a, + 0x000400a8,0x0000005b,0x0000022c,0x0000022b,0x000200f9,0x00000229,0x000200f8,0x00000229, + 0x000700f5,0x0000005b,0x0000022d,0x00000227,0x0000003e,0x0000022c,0x00000228,0x000300f7, + 0x0000022f,0x00000000,0x000400fa,0x0000022d,0x0000022e,0x0000022f,0x000200f8,0x0000022e, + 0x0004003d,0x00000006,0x00000231,0x00000210,0x0006000c,0x00000006,0x00000232,0x00000001, + 0x00000004,0x00000231,0x0004007c,0x0000000e,0x00000233,0x00000232,0x000500c2,0x0000000e, + 0x00000234,0x00000233,0x0000016e,0x000500c7,0x0000000e,0x00000236,0x00000234,0x00000235, + 0x0004007c,0x000001db,0x00000237,0x00000236,0x00050082,0x000001db,0x00000239,0x00000237, + 0x00000238,0x0007000c,0x000001db,0x0000023b,0x00000001,0x0000002a,0x00000239,0x0000023a, + 0x0003003e,0x00000230,0x0000023b,0x0004003d,0x000001db,0x0000023d,0x00000230,0x00050082, + 0x000001db,0x0000023f,0x0000023d,0x0000023e,0x00050080,0x000001db,0x00000240,0x0000023f, + 0x00000238,0x0004007c,0x0000000e,0x00000241,0x00000240,0x000500c4,0x0000000e,0x00000242, + 0x00000241,0x0000016e,0x0004007c,0x00000006,0x00000243,0x00000242,0x0003003e,0x0000023c, + 0x00000243,0x0004003d,0x00000006,0x00000245,0x00000210,0x0004003d,0x000001db,0x00000246, + 0x00000230,0x00050082,0x000001db,0x00000247,0x00000238,0x00000246,0x00050080,0x000001db, + 0x00000248,0x00000247,0x0000023e,0x0004007c,0x0000000e,0x00000249,0x00000248,0x000500c4, + 0x0000000e,0x0000024a,0x00000249,0x0000016e,0x0004007c,0x00000006,0x0000024b,0x0000024a, + 0x00050085,0x00000006,0x0000024c,0x00000245,0x0000024b,0x0003003e,0x00000244,0x0000024c, + 0x0004003d,0x00000006,0x0000024d,0x00000244,0x0004003d,0x00000006,0x0000024e,0x00000244, + 0x0006000c,0x00000006,0x0000024f,0x00000001,0x00000008,0x0000024e,0x00050083,0x00000006, + 0x00000250,0x0000024d,0x0000024f,0x000500b4,0x0000005b,0x00000251,0x00000250,0x0000018f, + 0x000300f7,0x00000253,0x00000000,0x000400fa,0x00000251,0x00000252,0x00000253,0x000200f8, + 0x00000252,0x0004003d,0x00000006,0x00000254,0x0000021d,0x000500ba,0x0000005b,0x00000255, + 0x00000254,0x00000163,0x000300f7,0x00000258,0x00000000,0x000400fa,0x00000255,0x00000257, + 0x0000025b,0x000200f8,0x00000257,0x0004003d,0x00000006,0x00000259,0x00000244,0x0006000c, + 0x00000006,0x0000025a,0x00000001,0x00000009,0x00000259,0x0003003e,0x00000256,0x0000025a, + 0x000200f9,0x00000258,0x000200f8,0x0000025b,0x0004003d,0x00000006,0x0000025c,0x00000244, + 0x0006000c,0x00000006,0x0000025d,0x00000001,0x00000008,0x0000025c,0x0003003e,0x00000256, + 0x0000025d,0x000200f9,0x00000258,0x000200f8,0x00000258,0x0004003d,0x00000006,0x0000025e, + 0x00000256,0x0004003d,0x00000006,0x0000025f,0x0000023c,0x00050085,0x00000006,0x00000260, + 0x0000025e,0x0000025f,0x0003003e,0x00000261,0x00000260,0x00050039,0x00000006,0x00000262, + 0x0000000a,0x00000261,0x00040073,0x0000000c,0x00000263,0x00000262,0x000200fe,0x00000263, + 0x000200f8,0x00000253,0x000200f9,0x0000022f,0x000200f8,0x0000022f,0x0004003d,0x00000006, + 0x00000266,0x00000210,0x0003003e,0x00000265,0x00000266,0x00050039,0x00000006,0x00000267, + 0x0000000a,0x00000265,0x00040073,0x0000000c,0x00000268,0x00000267,0x000200fe,0x00000268, + 0x00010038,0x00050036,0x0000000c,0x00000040,0x00000000,0x0000002f,0x00030037,0x0000000d, + 0x0000003f,0x000200f8,0x00000041,0x0004003b,0x0000000d,0x0000026b,0x00000007,0x0004003b, + 0x0000000d,0x0000026e,0x00000007,0x0004003b,0x0000000d,0x00000270,0x00000007,0x0004003b, + 0x0000000d,0x00000271,0x00000007,0x0004003b,0x00000013,0x00000277,0x00000007,0x0004003b, + 0x0000000d,0x00000278,0x00000007,0x0004003b,0x00000013,0x0000027b,0x00000007,0x0004003b, + 0x00000013,0x00000282,0x00000007,0x0004003d,0x0000000c,0x0000026f,0x0000003f,0x0003003e, + 0x0000026e,0x0000026f,0x0003003e,0x00000270,0x0000026c,0x0003003e,0x00000271,0x0000026d, + 0x00070039,0x0000000c,0x00000272,0x0000003d,0x0000026e,0x00000270,0x00000271,0x0003003e, + 0x0000026b,0x00000272,0x0004003d,0x0000000c,0x00000273,0x0000026b,0x0008000c,0x0000000c, + 0x00000276,0x00000001,0x0000002b,0x00000273,0x00000274,0x00000275,0x0003003e,0x0000026b, + 0x00000276,0x0004003d,0x0000000c,0x00000279,0x0000026b,0x0003003e,0x00000278,0x00000279, + 0x00050039,0x0000000e,0x0000027a,0x00000011,0x00000278,0x0003003e,0x00000277,0x0000027a, + 0x0004003d,0x0000000e,0x0000027c,0x00000277,0x000500c4,0x0000000e,0x0000027e,0x0000027c, + 0x0000027d,0x00050080,0x0000000e,0x00000280,0x0000027e,0x0000027f,0x000500c7,0x0000000e, + 0x00000281,0x00000280,0x0000009b,0x0003003e,0x0000027b,0x00000281,0x0004003d,0x0000000e, + 0x00000283,0x0000027b,0x0003003e,0x00000282,0x00000283,0x00050039,0x0000000c,0x00000284, + 0x00000016,0x00000282,0x000200fe,0x00000284,0x00010038,0x00050036,0x0000000c,0x00000047, + 0x00000000,0x00000042,0x00030037,0x00000013,0x00000043,0x00030037,0x00000013,0x00000044, + 0x00030037,0x00000013,0x00000045,0x00030037,0x00000013,0x00000046,0x000200f8,0x00000048, + 0x0004003b,0x00000013,0x00000287,0x00000007,0x0004003b,0x0000000d,0x00000293,0x00000007, + 0x0004003b,0x0000000d,0x000002a1,0x00000007,0x0004003b,0x0000000d,0x000002ac,0x00000007, + 0x0004003b,0x0000000d,0x000002b8,0x00000007,0x0004003b,0x0000000d,0x000002c4,0x00000007, + 0x0004003b,0x0000000d,0x000002c8,0x00000007,0x0004003d,0x0000000e,0x00000288,0x00000043, + 0x00050084,0x0000000e,0x0000028a,0x00000288,0x00000289,0x0004003d,0x0000000e,0x0000028b, + 0x00000044,0x00050080,0x0000000e,0x0000028c,0x0000028a,0x0000028b,0x0004003d,0x0000000e, + 0x0000028d,0x00000045,0x00050084,0x0000000e,0x0000028f,0x0000028d,0x0000028e,0x00050080, + 0x0000000e,0x00000290,0x0000028c,0x0000028f,0x0004003d,0x0000000e,0x00000291,0x00000046, + 0x00050080,0x0000000e,0x00000292,0x00000290,0x00000291,0x0003003e,0x00000287,0x00000292, + 0x0004003d,0x0000000e,0x00000298,0x00000287,0x00050041,0x00000299,0x0000029a,0x00000297, + 0x00000298,0x0006003d,0x0000000c,0x0000029b,0x0000029a,0x00000030,0x0000028e,0x0004003d, + 0x0000000e,0x0000029c,0x00000287,0x00050080,0x0000000e,0x0000029d,0x0000029c,0x000000df, + 0x00050041,0x00000299,0x0000029e,0x00000297,0x0000029d,0x0006003d,0x0000000c,0x0000029f, + 0x0000029e,0x00000030,0x0000028e,0x00050081,0x0000000c,0x000002a0,0x0000029b,0x0000029f, + 0x0003003e,0x00000293,0x000002a0,0x0004003d,0x0000000e,0x000002a2,0x00000287,0x00050080, + 0x0000000e,0x000002a3,0x000002a2,0x00000112,0x00050041,0x00000299,0x000002a4,0x00000297, + 0x000002a3,0x0006003d,0x0000000c,0x000002a5,0x000002a4,0x00000030,0x0000028e,0x0004003d, + 0x0000000e,0x000002a6,0x00000287,0x00050080,0x0000000e,0x000002a8,0x000002a6,0x000002a7, + 0x00050041,0x00000299,0x000002a9,0x00000297,0x000002a8,0x0006003d,0x0000000c,0x000002aa, + 0x000002a9,0x00000030,0x0000028e,0x00050081,0x0000000c,0x000002ab,0x000002a5,0x000002aa, + 0x0003003e,0x000002a1,0x000002ab,0x0004003d,0x0000000e,0x000002ad,0x00000287,0x00050080, + 0x0000000e,0x000002af,0x000002ad,0x000002ae,0x00050041,0x00000299,0x000002b0,0x00000297, + 0x000002af,0x0006003d,0x0000000c,0x000002b1,0x000002b0,0x00000030,0x0000028e,0x0004003d, + 0x0000000e,0x000002b2,0x00000287,0x00050080,0x0000000e,0x000002b4,0x000002b2,0x000002b3, + 0x00050041,0x00000299,0x000002b5,0x00000297,0x000002b4,0x0006003d,0x0000000c,0x000002b6, + 0x000002b5,0x00000030,0x0000028e,0x00050081,0x0000000c,0x000002b7,0x000002b1,0x000002b6, + 0x0003003e,0x000002ac,0x000002b7,0x0004003d,0x0000000e,0x000002b9,0x00000287,0x00050080, + 0x0000000e,0x000002bb,0x000002b9,0x000002ba,0x00050041,0x00000299,0x000002bc,0x00000297, + 0x000002bb,0x0006003d,0x0000000c,0x000002bd,0x000002bc,0x00000030,0x0000028e,0x0004003d, + 0x0000000e,0x000002be,0x00000287,0x00050080,0x0000000e,0x000002c0,0x000002be,0x000002bf, + 0x00050041,0x00000299,0x000002c1,0x00000297,0x000002c0,0x0006003d,0x0000000c,0x000002c2, + 0x000002c1,0x00000030,0x0000028e,0x00050081,0x0000000c,0x000002c3,0x000002bd,0x000002c2, + 0x0003003e,0x000002b8,0x000002c3,0x0004003d,0x0000000c,0x000002c5,0x00000293,0x0004003d, + 0x0000000c,0x000002c6,0x000002a1,0x00050081,0x0000000c,0x000002c7,0x000002c5,0x000002c6, + 0x0003003e,0x000002c4,0x000002c7,0x0004003d,0x0000000c,0x000002c9,0x000002c4,0x0004003d, + 0x0000000c,0x000002ca,0x000002ac,0x00050081,0x0000000c,0x000002cb,0x000002c9,0x000002ca, + 0x0003003e,0x000002c8,0x000002cb,0x0004003d,0x0000000c,0x000002cc,0x000002c8,0x0004003d, + 0x0000000c,0x000002cd,0x000002b8,0x00050081,0x0000000c,0x000002ce,0x000002cc,0x000002cd, + 0x000200fe,0x000002ce,0x00010038,0x00050036,0x0000000c,0x0000004c,0x00000000,0x00000049, + 0x00030037,0x00000013,0x0000004a,0x00030037,0x00000013,0x0000004b,0x000200f8,0x0000004d, + 0x0004003b,0x0000000d,0x000002d1,0x00000007,0x0004003b,0x00000013,0x000002d2,0x00000007, + 0x0004003b,0x00000013,0x000002d4,0x00000007,0x0004003b,0x00000013,0x000002d6,0x00000007, + 0x0004003b,0x00000013,0x000002d7,0x00000007,0x0004003b,0x00000013,0x000002d9,0x00000007, + 0x0004003b,0x00000013,0x000002db,0x00000007,0x0004003b,0x00000013,0x000002dd,0x00000007, + 0x0004003b,0x00000013,0x000002de,0x00000007,0x0004003b,0x0000000d,0x000002e1,0x00000007, + 0x0004003b,0x00000013,0x000002e3,0x00000007,0x0004003b,0x00000013,0x000002e5,0x00000007, + 0x0004003b,0x00000013,0x000002e7,0x00000007,0x0004003b,0x00000013,0x000002e8,0x00000007, + 0x0004003b,0x0000000d,0x000002eb,0x00000007,0x0004003b,0x00000013,0x000002ed,0x00000007, + 0x0004003b,0x00000013,0x000002ef,0x00000007,0x0004003b,0x00000013,0x000002f1,0x00000007, + 0x0004003b,0x00000013,0x000002f2,0x00000007,0x0004003b,0x0000000d,0x000002f5,0x00000007, + 0x0004003b,0x00000013,0x000002f6,0x00000007,0x0004003b,0x00000013,0x000002f8,0x00000007, + 0x0004003b,0x00000013,0x000002fa,0x00000007,0x0004003b,0x00000013,0x000002fb,0x00000007, + 0x0004003b,0x00000013,0x000002fd,0x00000007,0x0004003b,0x00000013,0x000002ff,0x00000007, + 0x0004003b,0x00000013,0x00000301,0x00000007,0x0004003b,0x00000013,0x00000302,0x00000007, + 0x0004003b,0x0000000d,0x00000305,0x00000007,0x0004003b,0x00000013,0x00000307,0x00000007, + 0x0004003b,0x00000013,0x00000309,0x00000007,0x0004003b,0x00000013,0x0000030b,0x00000007, + 0x0004003b,0x00000013,0x0000030c,0x00000007,0x0004003b,0x0000000d,0x0000030f,0x00000007, + 0x0004003b,0x00000013,0x00000311,0x00000007,0x0004003b,0x00000013,0x00000313,0x00000007, + 0x0004003b,0x00000013,0x00000315,0x00000007,0x0004003b,0x00000013,0x00000316,0x00000007, + 0x0004003d,0x0000000e,0x000002d3,0x0000004a,0x0003003e,0x000002d2,0x000002d3,0x0004003d, + 0x0000000e,0x000002d5,0x0000004b,0x0003003e,0x000002d4,0x000002d5,0x0003003e,0x000002d6, + 0x000000bf,0x0003003e,0x000002d7,0x000000bf,0x00080039,0x0000000c,0x000002d8,0x00000047, + 0x000002d2,0x000002d4,0x000002d6,0x000002d7,0x0004003d,0x0000000e,0x000002da,0x0000004a, + 0x0003003e,0x000002d9,0x000002da,0x0004003d,0x0000000e,0x000002dc,0x0000004b,0x0003003e, + 0x000002db,0x000002dc,0x0003003e,0x000002dd,0x00000084,0x0003003e,0x000002de,0x000000bf, + 0x00080039,0x0000000c,0x000002df,0x00000047,0x000002d9,0x000002db,0x000002dd,0x000002de, + 0x00050081,0x0000000c,0x000002e0,0x000002d8,0x000002df,0x0003003e,0x000002d1,0x000002e0, + 0x0004003d,0x0000000c,0x000002e2,0x000002d1,0x0004003d,0x0000000e,0x000002e4,0x0000004a, + 0x0003003e,0x000002e3,0x000002e4,0x0004003d,0x0000000e,0x000002e6,0x0000004b,0x0003003e, + 0x000002e5,0x000002e6,0x0003003e,0x000002e7,0x0000028e,0x0003003e,0x000002e8,0x000000bf, + 0x00080039,0x0000000c,0x000002e9,0x00000047,0x000002e3,0x000002e5,0x000002e7,0x000002e8, + 0x00050081,0x0000000c,0x000002ea,0x000002e2,0x000002e9,0x0003003e,0x000002e1,0x000002ea, + 0x0004003d,0x0000000c,0x000002ec,0x000002e1,0x0004003d,0x0000000e,0x000002ee,0x0000004a, + 0x0003003e,0x000002ed,0x000002ee,0x0004003d,0x0000000e,0x000002f0,0x0000004b,0x0003003e, + 0x000002ef,0x000002f0,0x0003003e,0x000002f1,0x0000013d,0x0003003e,0x000002f2,0x000000bf, + 0x00080039,0x0000000c,0x000002f3,0x00000047,0x000002ed,0x000002ef,0x000002f1,0x000002f2, + 0x00050081,0x0000000c,0x000002f4,0x000002ec,0x000002f3,0x0003003e,0x000002eb,0x000002f4, + 0x0004003d,0x0000000e,0x000002f7,0x0000004a,0x0003003e,0x000002f6,0x000002f7,0x0004003d, + 0x0000000e,0x000002f9,0x0000004b,0x0003003e,0x000002f8,0x000002f9,0x0003003e,0x000002fa, + 0x000000bf,0x0003003e,0x000002fb,0x00000084,0x00080039,0x0000000c,0x000002fc,0x00000047, + 0x000002f6,0x000002f8,0x000002fa,0x000002fb,0x0004003d,0x0000000e,0x000002fe,0x0000004a, + 0x0003003e,0x000002fd,0x000002fe,0x0004003d,0x0000000e,0x00000300,0x0000004b,0x0003003e, + 0x000002ff,0x00000300,0x0003003e,0x00000301,0x00000084,0x0003003e,0x00000302,0x00000084, + 0x00080039,0x0000000c,0x00000303,0x00000047,0x000002fd,0x000002ff,0x00000301,0x00000302, + 0x00050081,0x0000000c,0x00000304,0x000002fc,0x00000303,0x0003003e,0x000002f5,0x00000304, + 0x0004003d,0x0000000c,0x00000306,0x000002f5,0x0004003d,0x0000000e,0x00000308,0x0000004a, + 0x0003003e,0x00000307,0x00000308,0x0004003d,0x0000000e,0x0000030a,0x0000004b,0x0003003e, + 0x00000309,0x0000030a,0x0003003e,0x0000030b,0x0000028e,0x0003003e,0x0000030c,0x00000084, + 0x00080039,0x0000000c,0x0000030d,0x00000047,0x00000307,0x00000309,0x0000030b,0x0000030c, + 0x00050081,0x0000000c,0x0000030e,0x00000306,0x0000030d,0x0003003e,0x00000305,0x0000030e, + 0x0004003d,0x0000000c,0x00000310,0x00000305,0x0004003d,0x0000000e,0x00000312,0x0000004a, + 0x0003003e,0x00000311,0x00000312,0x0004003d,0x0000000e,0x00000314,0x0000004b,0x0003003e, + 0x00000313,0x00000314,0x0003003e,0x00000315,0x0000013d,0x0003003e,0x00000316,0x00000084, + 0x00080039,0x0000000c,0x00000317,0x00000047,0x00000311,0x00000313,0x00000315,0x00000316, + 0x00050081,0x0000000c,0x00000318,0x00000310,0x00000317,0x0003003e,0x0000030f,0x00000318, + 0x0004003d,0x0000000c,0x00000319,0x000002eb,0x0004003d,0x0000000c,0x0000031a,0x0000030f, + 0x00050081,0x0000000c,0x0000031b,0x00000319,0x0000031a,0x000200fe,0x0000031b,0x00010038, +}; +inline constexpr uint32_t k_common__ops[] = { + 0x07230203,0x00010600,0x0008000b,0x00000406,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x00001151,0x0006000b,0x00000001,0x4c534c47, + 0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,0x000e000f,0x00000005, + 0x00000004,0x6e69616d,0x00000000,0x0000019d,0x00000223,0x00000232,0x00000251,0x00000260, + 0x0000027c,0x00000281,0x00000347,0x00000354,0x00060010,0x00000004,0x00000011,0x00000100, + 0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc,0x00090004,0x455f4c47,0x635f5458, + 0x72746e6f,0x665f6c6f,0x5f776f6c,0x72747461,0x74756269,0x00007365,0x00080004,0x455f4c47, + 0x735f5458,0x65646168,0x36315f72,0x5f746962,0x726f7473,0x00656761,0x00080004,0x455f4c47, + 0x735f5458,0x65646168,0x62385f72,0x735f7469,0x61726f74,0x00006567,0x000b0004,0x455f4c47, + 0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63, + 0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c, + 0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63, + 0x69645f65,0x74636572,0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005, + 0x0000000a,0x6e756f72,0x36314664,0x3b316628,0x00000000,0x00040005,0x00000009,0x756c6176, + 0x00000065,0x00060005,0x00000011,0x42363166,0x28737469,0x31363166,0x0000003b,0x00040005, + 0x00000010,0x756c6176,0x00000065,0x00060005,0x00000017,0x66696873,0x656e5274,0x3b317528, + 0x003b3175,0x00040005,0x00000015,0x756c6176,0x00000065,0x00040005,0x00000016,0x66696873, + 0x00000074,0x00080005,0x0000001b,0x336d3465,0x65646f43,0x6d6f7246,0x42363146,0x28737469, + 0x003b3175,0x00050005,0x0000001a,0x666c6168,0x73746942,0x00000000,0x00060005,0x0000001f, + 0x336d3465,0x33466f54,0x31752832,0x0000003b,0x00040005,0x0000001e,0x73746962,0x00000000, + 0x00070005,0x00000026,0x336d3465,0x61507748,0x76287269,0x32363166,0x0000003b,0x00040005, + 0x00000025,0x756c6176,0x00000065,0x00060005,0x00000029,0x336d3465,0x6f547748,0x28323346, + 0x003b3175,0x00040005,0x00000028,0x65646f63,0x00000000,0x00080005,0x00000032,0x53787561, + 0x656c6163,0x31752873,0x3b31753b,0x385b3166,0x00003b5d,0x00040005,0x0000002f,0x7366666f, + 0x00007465,0x00040005,0x00000030,0x6e616863,0x006c656e,0x00030005,0x00000031,0x00000073, + 0x00070005,0x00000039,0x61706e75,0x28386b63,0x3b347576,0x385b3166,0x00003b5d,0x00040005, + 0x00000037,0x64726f77,0x00000073,0x00030005,0x00000038,0x00000076,0x00080005,0x00000040, + 0x61706e75,0x34456b63,0x76283878,0x663b3275,0x5d385b31,0x0000003b,0x00040005,0x0000003e, + 0x65646f63,0x00000073,0x00030005,0x0000003f,0x00000076,0x00070005,0x00000044,0x6b636170, + 0x766c6148,0x28387365,0x385b3166,0x00003b5d,0x00030005,0x00000043,0x00000076,0x00060005, + 0x00000048,0x6e617571,0x657a6974,0x75762838,0x00003b34,0x00040005,0x00000047,0x766c6168, + 0x00007365,0x00040005,0x0000004a,0x73746962,0x00000000,0x00040005,0x0000004d,0x6e676973, + 0x00000000,0x00050005,0x00000051,0x6e67616d,0x64757469,0x00000065,0x00040005,0x0000006b, + 0x6c616373,0x00006465,0x00030005,0x0000007c,0x0062736c,0x00040005,0x00000082,0x6e756f72, + 0x00646564,0x00050005,0x00000095,0x746f7571,0x746e6569,0x00000000,0x00060005,0x00000099, + 0x616d6572,0x65646e69,0x73614d72,0x0000006b,0x00050005,0x0000009d,0x616d6572,0x65646e69, + 0x00000072,0x00040005,0x000000a1,0x666c6168,0x00796177,0x00040005,0x000000bc,0x614e7369, + 0x0000006e,0x00050005,0x000000d7,0x6167656e,0x65766974,0x00000000,0x00050005,0x000000dd, + 0x6f707865,0x746e656e,0x00000000,0x00050005,0x000000e3,0x746e616d,0x61737369,0x00000000, + 0x00040005,0x000000ea,0x65646f63,0x00000000,0x00050005,0x000000f1,0x6e676973,0x63696669, + 0x00646e61,0x00040005,0x000000fd,0x66696873,0x00000074,0x00040005,0x00000109,0x61726170, + 0x0000006d,0x00040005,0x0000010b,0x61726170,0x0000006d,0x00050005,0x00000110,0x78453465, + 0x656e6f70,0x0000746e,0x00050005,0x00000113,0x614d3465,0x7369746e,0x00006173,0x00040005, + 0x00000115,0x61726170,0x0000006d,0x00040005,0x00000117,0x61726170,0x0000006d,0x00050005, + 0x0000013a,0x6167656e,0x65766974,0x00000000,0x00050005,0x0000013e,0x6f707865,0x746e656e, + 0x00000000,0x00050005,0x00000142,0x746e616d,0x61737369,0x00000000,0x00040005,0x00000149, + 0x756c6176,0x00000065,0x00040005,0x00000170,0x61726170,0x0000006d,0x00040005,0x00000174, + 0x61726170,0x0000006d,0x00040005,0x00000176,0x61726170,0x0000006d,0x00040005,0x0000017a, + 0x61726170,0x0000006d,0x00040005,0x0000018c,0x61726170,0x0000006d,0x00030005,0x00000191, + 0x00000069,0x00030005,0x0000019b,0x00787541,0x00050006,0x0000019b,0x00000000,0x31787561, + 0x00000036,0x00030005,0x0000019d,0x00000000,0x00030005,0x000001ae,0x00000069,0x00030005, + 0x000001b9,0x00000070,0x00030005,0x000001cd,0x00000069,0x00040005,0x000001df,0x61726170, + 0x0000006d,0x00030005,0x000001e4,0x00000069,0x00030005,0x000001ec,0x00000077,0x00040005, + 0x00000204,0x61726170,0x0000006d,0x00040005,0x0000020a,0x61726170,0x0000006d,0x00040005, + 0x00000212,0x61726170,0x0000006d,0x00040005,0x00000218,0x61726170,0x0000006d,0x00040005, + 0x00000220,0x756f7267,0x00000070,0x00080005,0x00000223,0x475f6c67,0x61626f6c,0x766e496c, + 0x7461636f,0x496e6f69,0x00000044,0x00040005,0x00000230,0x68737550,0x00000000,0x00050006, + 0x00000230,0x00000000,0x6e756f63,0x00000074,0x00060006,0x00000230,0x00000001,0x6e616863, + 0x736c656e,0x00000000,0x00050006,0x00000230,0x00000002,0x69576e69,0x00687464,0x00060006, + 0x00000230,0x00000003,0x65486e69,0x74686769,0x00000000,0x00060006,0x00000230,0x00000004, + 0x5774756f,0x68746469,0x00000000,0x00060006,0x00000230,0x00000005,0x4874756f,0x68676965, + 0x00000074,0x00060006,0x00000230,0x00000006,0x4f787561,0x65736666,0x00004174,0x00060006, + 0x00000230,0x00000007,0x4f787561,0x65736666,0x00004274,0x00050006,0x00000230,0x00000008, + 0x6c617564,0x00000000,0x00030005,0x00000232,0x00006370,0x00060005,0x0000023a,0x756f7267, + 0x65507370,0x78695072,0x00006c65,0x00030005,0x0000023e,0x00000063,0x00040005,0x00000243, + 0x65786970,0x0000006c,0x00040005,0x00000247,0x45444f4d,0x00000000,0x00030005,0x0000024d, + 0x00000061,0x00040005,0x0000024f,0x32336e49,0x00000000,0x00050006,0x0000024f,0x00000000, + 0x32336e69,0x00003478,0x00030005,0x00000251,0x00000000,0x00030005,0x00000257,0x00000062, + 0x00040005,0x0000025e,0x3174754f,0x00000036,0x00050006,0x0000025e,0x00000000,0x3174756f, + 0x00387836,0x00030005,0x00000260,0x00000000,0x00040005,0x0000027a,0x3874754f,0x00000000, + 0x00050006,0x0000027a,0x00000000,0x3874756f,0x00003878,0x00030005,0x0000027c,0x00000000, + 0x00040005,0x0000027f,0x36316e49,0x00000000,0x00050006,0x0000027f,0x00000000,0x36316e69, + 0x00003878,0x00030005,0x00000281,0x00000000,0x00040005,0x00000283,0x61726170,0x0000006d, + 0x00030005,0x0000028d,0x0000786f,0x00030005,0x00000293,0x0000796f,0x00030005,0x00000298, + 0x00007873,0x00030005,0x0000029b,0x00007973,0x00040005,0x0000029e,0x75736572,0x0000746c, + 0x00030005,0x000002b1,0x00303069,0x00030005,0x000002be,0x00303169,0x00030005,0x000002cc, + 0x00313069,0x00030005,0x000002da,0x00313169,0x00030005,0x000002e9,0x00303077,0x00030005, + 0x000002ed,0x00303177,0x00030005,0x000002f1,0x00313077,0x00030005,0x000002f5,0x00313177, + 0x00030005,0x000002f9,0x00000069,0x00030005,0x00000301,0x00706f74,0x00040005,0x0000030b, + 0x74746f62,0x00006d6f,0x00030005,0x00000315,0x006d7573,0x00040005,0x00000319,0x756c6176, + 0x00000065,0x00040005,0x00000324,0x61726170,0x0000006d,0x00030005,0x0000032c,0x0000786f, + 0x00030005,0x00000331,0x0000796f,0x00040005,0x00000336,0x72756f73,0x00006563,0x00030005, + 0x00000345,0x00386e49,0x00050006,0x00000345,0x00000000,0x78386e69,0x00000038,0x00030005, + 0x00000347,0x00000000,0x00030005,0x0000034a,0x00007075,0x00040005,0x0000034b,0x61726170, + 0x0000006d,0x00040005,0x0000034e,0x61726170,0x0000006d,0x00040005,0x00000352,0x70696b53, + 0x00000038,0x00050006,0x00000352,0x00000000,0x70696b73,0x00387838,0x00030005,0x00000354, + 0x00000000,0x00040005,0x00000356,0x70616461,0x00726574,0x00040005,0x00000357,0x61726170, + 0x0000006d,0x00040005,0x0000035a,0x61726170,0x0000006d,0x00040005,0x0000035e,0x6c616373, + 0x00004165,0x00040005,0x0000035f,0x61726170,0x0000006d,0x00040005,0x00000362,0x61726170, + 0x0000006d,0x00040005,0x00000364,0x61726170,0x0000006d,0x00040005,0x00000368,0x6c616373, + 0x00004265,0x00040005,0x00000369,0x61726170,0x0000006d,0x00040005,0x0000036c,0x61726170, + 0x0000006d,0x00040005,0x0000036e,0x61726170,0x0000006d,0x00030005,0x00000371,0x00000069, + 0x00050005,0x00000379,0x75706e69,0x6c615674,0x00006575,0x00040005,0x00000381,0x61726170, + 0x0000006d,0x00040005,0x00000383,0x756c6176,0x00000065,0x00030005,0x0000038d,0x00776172, + 0x00040005,0x0000038f,0x61726170,0x0000006d,0x00040005,0x00000395,0x766c6168,0x00007365, + 0x00040005,0x00000396,0x61726170,0x0000006d,0x00040005,0x0000039d,0x61726170,0x0000006d, + 0x00030005,0x000003a5,0x0000786f,0x00030005,0x000003aa,0x0000796f,0x00040005,0x000003af, + 0x72756f73,0x00006563,0x00050005,0x000003bf,0x6a6f7270,0x65746365,0x00000064,0x00040005, + 0x000003c0,0x61726170,0x0000006d,0x00040005,0x000003c3,0x61726170,0x0000006d,0x00040005, + 0x000003c7,0x70696b73,0x00000000,0x00040005,0x000003c8,0x61726170,0x0000006d,0x00040005, + 0x000003cb,0x61726170,0x0000006d,0x00040005,0x000003ce,0x6c616373,0x00000065,0x00040005, + 0x000003cf,0x61726170,0x0000006d,0x00040005,0x000003d2,0x61726170,0x0000006d,0x00040005, + 0x000003d4,0x61726170,0x0000006d,0x00030005,0x000003d7,0x00000069,0x00030005,0x000003df, + 0x006d7573,0x00040005,0x000003eb,0x756c6176,0x00000065,0x00040005,0x000003ed,0x61726170, + 0x0000006d,0x00040005,0x000003f3,0x766c6168,0x00007365,0x00040005,0x000003f4,0x61726170, + 0x0000006d,0x00040005,0x000003f8,0x61726170,0x0000006d,0x00040047,0x0000019a,0x00000006, + 0x00000002,0x00030047,0x0000019b,0x00000002,0x00040048,0x0000019b,0x00000000,0x00000018, + 0x00050048,0x0000019b,0x00000000,0x00000023,0x00000000,0x00030047,0x0000019d,0x00000018, + 0x00040047,0x0000019d,0x00000021,0x00000004,0x00040047,0x0000019d,0x00000022,0x00000000, + 0x00040047,0x00000223,0x0000000b,0x0000001c,0x00030047,0x00000230,0x00000002,0x00050048, + 0x00000230,0x00000000,0x00000023,0x00000000,0x00050048,0x00000230,0x00000001,0x00000023, + 0x00000004,0x00050048,0x00000230,0x00000002,0x00000023,0x00000008,0x00050048,0x00000230, + 0x00000003,0x00000023,0x0000000c,0x00050048,0x00000230,0x00000004,0x00000023,0x00000010, + 0x00050048,0x00000230,0x00000005,0x00000023,0x00000014,0x00050048,0x00000230,0x00000006, + 0x00000023,0x00000018,0x00050048,0x00000230,0x00000007,0x00000023,0x0000001c,0x00050048, + 0x00000230,0x00000008,0x00000023,0x00000020,0x00040047,0x00000247,0x00000001,0x00000000, + 0x00040047,0x0000024e,0x00000006,0x00000010,0x00030047,0x0000024f,0x00000002,0x00040048, + 0x0000024f,0x00000000,0x00000018,0x00050048,0x0000024f,0x00000000,0x00000023,0x00000000, + 0x00030047,0x00000251,0x00000018,0x00040047,0x00000251,0x00000021,0x00000000,0x00040047, + 0x00000251,0x00000022,0x00000000,0x00040047,0x0000025d,0x00000006,0x00000010,0x00030047, + 0x0000025e,0x00000002,0x00040048,0x0000025e,0x00000000,0x00000019,0x00050048,0x0000025e, + 0x00000000,0x00000023,0x00000000,0x00030047,0x00000260,0x00000019,0x00040047,0x00000260, + 0x00000021,0x00000006,0x00040047,0x00000260,0x00000022,0x00000000,0x00040047,0x00000279, + 0x00000006,0x00000008,0x00030047,0x0000027a,0x00000002,0x00040048,0x0000027a,0x00000000, + 0x00000019,0x00050048,0x0000027a,0x00000000,0x00000023,0x00000000,0x00030047,0x0000027c, + 0x00000019,0x00040047,0x0000027c,0x00000021,0x00000005,0x00040047,0x0000027c,0x00000022, + 0x00000000,0x00040047,0x0000027e,0x00000006,0x00000010,0x00030047,0x0000027f,0x00000002, + 0x00040048,0x0000027f,0x00000000,0x00000018,0x00050048,0x0000027f,0x00000000,0x00000023, + 0x00000000,0x00030047,0x00000281,0x00000018,0x00040047,0x00000281,0x00000021,0x00000001, + 0x00040047,0x00000281,0x00000022,0x00000000,0x00030047,0x0000030a,0x0000002a,0x00030047, + 0x00000314,0x0000002a,0x00030047,0x00000318,0x0000002a,0x00030047,0x0000031c,0x0000002a, + 0x00040047,0x00000344,0x00000006,0x00000008,0x00030047,0x00000345,0x00000002,0x00040048, + 0x00000345,0x00000000,0x00000018,0x00050048,0x00000345,0x00000000,0x00000023,0x00000000, + 0x00030047,0x00000347,0x00000018,0x00040047,0x00000347,0x00000021,0x00000002,0x00040047, + 0x00000347,0x00000022,0x00000000,0x00040047,0x00000351,0x00000006,0x00000008,0x00030047, + 0x00000352,0x00000002,0x00040048,0x00000352,0x00000000,0x00000018,0x00050048,0x00000352, + 0x00000000,0x00000023,0x00000000,0x00030047,0x00000354,0x00000018,0x00040047,0x00000354, + 0x00000021,0x00000003,0x00040047,0x00000354,0x00000022,0x00000000,0x00030047,0x00000380, + 0x0000002a,0x00030047,0x0000038b,0x0000002a,0x00030047,0x0000038c,0x0000002a,0x00030047, + 0x000003e9,0x0000002a,0x00030047,0x000003ea,0x0000002a,0x00020013,0x00000002,0x00030021, + 0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040020,0x00000007,0x00000007, + 0x00000006,0x00040021,0x00000008,0x00000006,0x00000007,0x00030016,0x0000000c,0x00000010, + 0x00040020,0x0000000d,0x00000007,0x0000000c,0x00040015,0x0000000e,0x00000020,0x00000000, + 0x00040021,0x0000000f,0x0000000e,0x0000000d,0x00040020,0x00000013,0x00000007,0x0000000e, + 0x00050021,0x00000014,0x0000000e,0x00000013,0x00000013,0x00040021,0x00000019,0x0000000e, + 0x00000013,0x00040021,0x0000001d,0x00000006,0x00000013,0x00040017,0x00000021,0x0000000c, + 0x00000002,0x00040020,0x00000022,0x00000007,0x00000021,0x00040015,0x00000023,0x00000010, + 0x00000000,0x00040021,0x00000024,0x00000023,0x00000022,0x0004002b,0x0000000e,0x0000002b, + 0x00000008,0x0004001c,0x0000002c,0x00000006,0x0000002b,0x00040020,0x0000002d,0x00000007, + 0x0000002c,0x00060021,0x0000002e,0x00000002,0x00000013,0x00000013,0x0000002d,0x00040017, + 0x00000034,0x0000000e,0x00000004,0x00040020,0x00000035,0x00000007,0x00000034,0x00050021, + 0x00000036,0x00000002,0x00000035,0x0000002d,0x00040017,0x0000003b,0x0000000e,0x00000002, + 0x00040020,0x0000003c,0x00000007,0x0000003b,0x00050021,0x0000003d,0x00000002,0x0000003c, + 0x0000002d,0x00040021,0x00000042,0x00000034,0x0000002d,0x00040021,0x00000046,0x0000003b, + 0x00000035,0x0004002b,0x0000000e,0x0000004f,0x80000000,0x0004002b,0x0000000e,0x00000053, + 0x7fffffff,0x0004002b,0x0000000e,0x00000056,0x7f800000,0x00020014,0x00000057,0x0004002b, + 0x0000000e,0x0000005e,0x477ff000,0x0004002b,0x0000000e,0x00000067,0x38800000,0x0004002b, + 0x00000006,0x0000006e,0x4b800000,0x0004002b,0x00000006,0x00000075,0x33800000,0x0004002b, + 0x0000000e,0x0000007e,0x0000000d,0x0004002b,0x0000000e,0x00000080,0x00000001,0x0004002b, + 0x0000000e,0x00000084,0x00000fff,0x0004002b,0x0000000e,0x00000088,0xffffe000,0x0004002b, + 0x0000000e,0x000000b3,0x00000000,0x00040020,0x000000bb,0x00000007,0x00000057,0x0004002b, + 0x0000000e,0x000000be,0x00007c00,0x0004002b,0x0000000e,0x000000c4,0x000003ff,0x0004002b, + 0x0000000e,0x000000cd,0x00007fff,0x0004002b,0x0000000e,0x000000d4,0x00000080,0x0004002b, + 0x0000000e,0x000000d9,0x00008000,0x0004002b,0x0000000e,0x000000df,0x0000000a,0x0004002b, + 0x0000000e,0x000000e1,0x0000001f,0x0004002b,0x0000000e,0x000000eb,0x0000007e,0x0004002b, + 0x0000000e,0x000000f9,0x00000400,0x0004002b,0x0000000e,0x00000103,0x0000000f,0x0004002b, + 0x0000000e,0x00000105,0x00000010,0x0004002b,0x0000000e,0x00000114,0x00000007,0x0004002b, + 0x0000000e,0x00000127,0x00000006,0x0004002b,0x0000000e,0x00000130,0x00000003,0x0004002b, + 0x00000006,0x0000014c,0x3b000000,0x0004002b,0x00000006,0x00000156,0x00000000,0x0004002b, + 0x00000006,0x00000158,0x3f800000,0x0004002b,0x00000006,0x0000015b,0x3e000000,0x0004002b, + 0x0000000e,0x0000015f,0x00000078,0x0004002b,0x0000000e,0x00000161,0x00000017,0x0004002b, + 0x0000000e,0x00000182,0x0000007f,0x0004002b,0x0000000e,0x0000018a,0x000000ff,0x0003001d, + 0x0000019a,0x00000023,0x0003001e,0x0000019b,0x0000019a,0x00040020,0x0000019c,0x0000000c, + 0x0000019b,0x0004003b,0x0000019c,0x0000019d,0x0000000c,0x00040015,0x0000019e,0x00000020, + 0x00000001,0x0004002b,0x0000019e,0x0000019f,0x00000000,0x00040020,0x000001a5,0x0000000c, + 0x00000023,0x0004002b,0x0000019e,0x000001ac,0x00000001,0x0004002b,0x0000000e,0x000001b5, + 0x00000004,0x00040017,0x000001b7,0x00000006,0x00000002,0x00040020,0x000001b8,0x00000007, + 0x000001b7,0x0004002b,0x0000000e,0x000001bf,0x00000002,0x00040017,0x00000221,0x0000000e, + 0x00000003,0x00040020,0x00000222,0x00000001,0x00000221,0x0004003b,0x00000222,0x00000223, + 0x00000001,0x00040020,0x00000224,0x00000001,0x0000000e,0x0004002b,0x0000000e,0x00000229, + 0x0000ffff,0x0004002b,0x0000000e,0x0000022b,0x00000100,0x000b001e,0x00000230,0x0000000e, + 0x0000000e,0x0000000e,0x0000000e,0x0000000e,0x0000000e,0x0000000e,0x0000000e,0x0000000e, + 0x00040020,0x00000231,0x00000009,0x00000230,0x0004003b,0x00000231,0x00000232,0x00000009, + 0x00040020,0x00000233,0x00000009,0x0000000e,0x00040032,0x0000000e,0x00000247,0x00000000, + 0x00060034,0x00000057,0x00000248,0x000000aa,0x00000247,0x000000b3,0x00040017,0x0000024b, + 0x00000006,0x00000004,0x00040020,0x0000024c,0x00000007,0x0000024b,0x0003001d,0x0000024e, + 0x0000024b,0x0003001e,0x0000024f,0x0000024e,0x00040020,0x00000250,0x0000000c,0x0000024f, + 0x0004003b,0x00000250,0x00000251,0x0000000c,0x00040020,0x00000254,0x0000000c,0x0000024b, + 0x0003001d,0x0000025d,0x00000034,0x0003001e,0x0000025e,0x0000025d,0x00040020,0x0000025f, + 0x0000000c,0x0000025e,0x0004003b,0x0000025f,0x00000260,0x0000000c,0x00040020,0x00000273, + 0x0000000c,0x00000034,0x00060034,0x00000057,0x00000276,0x000000aa,0x00000247,0x00000080, + 0x0003001d,0x00000279,0x0000003b,0x0003001e,0x0000027a,0x00000279,0x00040020,0x0000027b, + 0x0000000c,0x0000027a,0x0004003b,0x0000027b,0x0000027c,0x0000000c,0x0003001d,0x0000027e, + 0x00000034,0x0003001e,0x0000027f,0x0000027e,0x00040020,0x00000280,0x0000000c,0x0000027f, + 0x0004003b,0x00000280,0x00000281,0x0000000c,0x00040020,0x00000287,0x0000000c,0x0000003b, + 0x00060034,0x00000057,0x0000028a,0x000000aa,0x00000247,0x000001bf,0x0004002b,0x0000019e, + 0x0000028f,0x00000004,0x0007002c,0x00000034,0x0000029f,0x000000b3,0x000000b3,0x000000b3, + 0x000000b3,0x0004002b,0x0000019e,0x000002a2,0x00000002,0x0004002b,0x0000019e,0x000002aa, + 0x00000003,0x0004002b,0x0000000c,0x0000031b,0x00003400,0x00060034,0x00000057,0x00000329, + 0x000000aa,0x00000247,0x00000130,0x0003001d,0x00000344,0x0000003b,0x0003001e,0x00000345, + 0x00000344,0x00040020,0x00000346,0x0000000c,0x00000345,0x0004003b,0x00000346,0x00000347, + 0x0000000c,0x0003001d,0x00000351,0x0000003b,0x0003001e,0x00000352,0x00000351,0x00040020, + 0x00000353,0x0000000c,0x00000352,0x0004003b,0x00000353,0x00000354,0x0000000c,0x0004002b, + 0x0000019e,0x0000035d,0x00000006,0x0004002b,0x0000019e,0x00000367,0x00000007,0x00060034, + 0x00000057,0x000003a2,0x000000aa,0x00000247,0x000001b5,0x0004002b,0x0000019e,0x000003fc, + 0x00000008,0x0006002c,0x00000221,0x00000405,0x0000022b,0x00000080,0x00000080,0x00050036, + 0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000013, + 0x00000220,0x00000007,0x0004003b,0x00000013,0x0000023a,0x00000007,0x0004003b,0x00000013, + 0x0000023e,0x00000007,0x0004003b,0x00000013,0x00000243,0x00000007,0x0004003b,0x0000024c, + 0x0000024d,0x00000007,0x0004003b,0x0000024c,0x00000257,0x00000007,0x0004003b,0x00000035, + 0x00000283,0x00000007,0x0004003b,0x00000013,0x0000028d,0x00000007,0x0004003b,0x00000013, + 0x00000293,0x00000007,0x0004003b,0x00000013,0x00000298,0x00000007,0x0004003b,0x00000013, + 0x0000029b,0x00000007,0x0004003b,0x00000035,0x0000029e,0x00000007,0x0004003b,0x00000013, + 0x000002b1,0x00000007,0x0004003b,0x00000013,0x000002be,0x00000007,0x0004003b,0x00000013, + 0x000002cc,0x00000007,0x0004003b,0x00000013,0x000002da,0x00000007,0x0004003b,0x00000035, + 0x000002e9,0x00000007,0x0004003b,0x00000035,0x000002ed,0x00000007,0x0004003b,0x00000035, + 0x000002f1,0x00000007,0x0004003b,0x00000035,0x000002f5,0x00000007,0x0004003b,0x00000013, + 0x000002f9,0x00000007,0x0004003b,0x00000022,0x00000301,0x00000007,0x0004003b,0x00000022, + 0x0000030b,0x00000007,0x0004003b,0x00000022,0x00000315,0x00000007,0x0004003b,0x00000022, + 0x00000319,0x00000007,0x0004003b,0x00000035,0x00000324,0x00000007,0x0004003b,0x00000013, + 0x0000032c,0x00000007,0x0004003b,0x00000013,0x00000331,0x00000007,0x0004003b,0x00000013, + 0x00000336,0x00000007,0x0004003b,0x0000002d,0x0000034a,0x00000007,0x0004003b,0x0000003c, + 0x0000034b,0x00000007,0x0004003b,0x0000002d,0x0000034e,0x00000007,0x0004003b,0x0000002d, + 0x00000356,0x00000007,0x0004003b,0x0000003c,0x00000357,0x00000007,0x0004003b,0x0000002d, + 0x0000035a,0x00000007,0x0004003b,0x0000002d,0x0000035e,0x00000007,0x0004003b,0x00000013, + 0x0000035f,0x00000007,0x0004003b,0x00000013,0x00000362,0x00000007,0x0004003b,0x0000002d, + 0x00000364,0x00000007,0x0004003b,0x0000002d,0x00000368,0x00000007,0x0004003b,0x00000013, + 0x00000369,0x00000007,0x0004003b,0x00000013,0x0000036c,0x00000007,0x0004003b,0x0000002d, + 0x0000036e,0x00000007,0x0004003b,0x00000013,0x00000371,0x00000007,0x0004003b,0x00000007, + 0x00000379,0x00000007,0x0004003b,0x00000007,0x00000381,0x00000007,0x0004003b,0x00000007, + 0x00000383,0x00000007,0x0004003b,0x0000002d,0x0000038d,0x00000007,0x0004003b,0x00000007, + 0x0000038f,0x00000007,0x0004003b,0x00000035,0x00000395,0x00000007,0x0004003b,0x0000002d, + 0x00000396,0x00000007,0x0004003b,0x00000035,0x0000039d,0x00000007,0x0004003b,0x00000013, + 0x000003a5,0x00000007,0x0004003b,0x00000013,0x000003aa,0x00000007,0x0004003b,0x00000013, + 0x000003af,0x00000007,0x0004003b,0x0000002d,0x000003bf,0x00000007,0x0004003b,0x00000035, + 0x000003c0,0x00000007,0x0004003b,0x0000002d,0x000003c3,0x00000007,0x0004003b,0x0000002d, + 0x000003c7,0x00000007,0x0004003b,0x0000003c,0x000003c8,0x00000007,0x0004003b,0x0000002d, + 0x000003cb,0x00000007,0x0004003b,0x0000002d,0x000003ce,0x00000007,0x0004003b,0x00000013, + 0x000003cf,0x00000007,0x0004003b,0x00000013,0x000003d2,0x00000007,0x0004003b,0x0000002d, + 0x000003d4,0x00000007,0x0004003b,0x00000013,0x000003d7,0x00000007,0x0004003b,0x00000007, + 0x000003df,0x00000007,0x0004003b,0x0000002d,0x000003eb,0x00000007,0x0004003b,0x00000007, + 0x000003ed,0x00000007,0x0004003b,0x00000035,0x000003f3,0x00000007,0x0004003b,0x0000002d, + 0x000003f4,0x00000007,0x0004003b,0x00000035,0x000003f8,0x00000007,0x00050041,0x00000224, + 0x00000225,0x00000223,0x000000b3,0x0004003d,0x0000000e,0x00000226,0x00000225,0x00050041, + 0x00000224,0x00000227,0x00000223,0x00000080,0x0004003d,0x0000000e,0x00000228,0x00000227, + 0x00050084,0x0000000e,0x0000022a,0x00000228,0x00000229,0x00050084,0x0000000e,0x0000022c, + 0x0000022a,0x0000022b,0x00050080,0x0000000e,0x0000022d,0x00000226,0x0000022c,0x0003003e, + 0x00000220,0x0000022d,0x0004003d,0x0000000e,0x0000022e,0x00000220,0x00050084,0x0000000e, + 0x0000022f,0x0000022e,0x0000002b,0x00050041,0x00000233,0x00000234,0x00000232,0x0000019f, + 0x0004003d,0x0000000e,0x00000235,0x00000234,0x000500ae,0x00000057,0x00000236,0x0000022f, + 0x00000235,0x000300f7,0x00000238,0x00000000,0x000400fa,0x00000236,0x00000237,0x00000238, + 0x000200f8,0x00000237,0x000100fd,0x000200f8,0x00000238,0x00050041,0x00000233,0x0000023b, + 0x00000232,0x000001ac,0x0004003d,0x0000000e,0x0000023c,0x0000023b,0x00050086,0x0000000e, + 0x0000023d,0x0000023c,0x0000002b,0x0003003e,0x0000023a,0x0000023d,0x0004003d,0x0000000e, + 0x0000023f,0x00000220,0x0004003d,0x0000000e,0x00000240,0x0000023a,0x00050089,0x0000000e, + 0x00000241,0x0000023f,0x00000240,0x00050084,0x0000000e,0x00000242,0x00000241,0x0000002b, + 0x0003003e,0x0000023e,0x00000242,0x0004003d,0x0000000e,0x00000244,0x00000220,0x0004003d, + 0x0000000e,0x00000245,0x0000023a,0x00050086,0x0000000e,0x00000246,0x00000244,0x00000245, + 0x0003003e,0x00000243,0x00000246,0x000300f7,0x0000024a,0x00000000,0x000400fa,0x00000248, + 0x00000249,0x00000275,0x000200f8,0x00000249,0x0004003d,0x0000000e,0x00000252,0x00000220, + 0x00050084,0x0000000e,0x00000253,0x00000252,0x000001bf,0x00060041,0x00000254,0x00000255, + 0x00000251,0x0000019f,0x00000253,0x0004003d,0x0000024b,0x00000256,0x00000255,0x0003003e, + 0x0000024d,0x00000256,0x0004003d,0x0000000e,0x00000258,0x00000220,0x00050084,0x0000000e, + 0x00000259,0x00000258,0x000001bf,0x00050080,0x0000000e,0x0000025a,0x00000259,0x00000080, + 0x00060041,0x00000254,0x0000025b,0x00000251,0x0000019f,0x0000025a,0x0004003d,0x0000024b, + 0x0000025c,0x0000025b,0x0003003e,0x00000257,0x0000025c,0x0004003d,0x0000000e,0x00000261, + 0x00000220,0x0004003d,0x0000024b,0x00000262,0x0000024d,0x0007004f,0x000001b7,0x00000263, + 0x00000262,0x00000262,0x00000000,0x00000001,0x00040073,0x00000021,0x00000264,0x00000263, + 0x0004007c,0x0000000e,0x00000265,0x00000264,0x0004003d,0x0000024b,0x00000266,0x0000024d, + 0x0007004f,0x000001b7,0x00000267,0x00000266,0x00000266,0x00000002,0x00000003,0x00040073, + 0x00000021,0x00000268,0x00000267,0x0004007c,0x0000000e,0x00000269,0x00000268,0x0004003d, + 0x0000024b,0x0000026a,0x00000257,0x0007004f,0x000001b7,0x0000026b,0x0000026a,0x0000026a, + 0x00000000,0x00000001,0x00040073,0x00000021,0x0000026c,0x0000026b,0x0004007c,0x0000000e, + 0x0000026d,0x0000026c,0x0004003d,0x0000024b,0x0000026e,0x00000257,0x0007004f,0x000001b7, + 0x0000026f,0x0000026e,0x0000026e,0x00000002,0x00000003,0x00040073,0x00000021,0x00000270, + 0x0000026f,0x0004007c,0x0000000e,0x00000271,0x00000270,0x00070050,0x00000034,0x00000272, + 0x00000265,0x00000269,0x0000026d,0x00000271,0x00060041,0x00000273,0x00000274,0x00000260, + 0x0000019f,0x00000261,0x0003003e,0x00000274,0x00000272,0x000200f9,0x0000024a,0x000200f8, + 0x00000275,0x000300f7,0x00000278,0x00000000,0x000400fa,0x00000276,0x00000277,0x00000289, + 0x000200f8,0x00000277,0x0004003d,0x0000000e,0x0000027d,0x00000220,0x0004003d,0x0000000e, + 0x00000282,0x00000220,0x00060041,0x00000273,0x00000284,0x00000281,0x0000019f,0x00000282, + 0x0004003d,0x00000034,0x00000285,0x00000284,0x0003003e,0x00000283,0x00000285,0x00050039, + 0x0000003b,0x00000286,0x00000048,0x00000283,0x00060041,0x00000287,0x00000288,0x0000027c, + 0x0000019f,0x0000027d,0x0003003e,0x00000288,0x00000286,0x000200f9,0x00000278,0x000200f8, + 0x00000289,0x000300f7,0x0000028c,0x00000000,0x000400fa,0x0000028a,0x0000028b,0x00000328, + 0x000200f8,0x0000028b,0x0004003d,0x0000000e,0x0000028e,0x00000243,0x00050041,0x00000233, + 0x00000290,0x00000232,0x0000028f,0x0004003d,0x0000000e,0x00000291,0x00000290,0x00050089, + 0x0000000e,0x00000292,0x0000028e,0x00000291,0x0003003e,0x0000028d,0x00000292,0x0004003d, + 0x0000000e,0x00000294,0x00000243,0x00050041,0x00000233,0x00000295,0x00000232,0x0000028f, + 0x0004003d,0x0000000e,0x00000296,0x00000295,0x00050086,0x0000000e,0x00000297,0x00000294, + 0x00000296,0x0003003e,0x00000293,0x00000297,0x0004003d,0x0000000e,0x00000299,0x0000028d, + 0x00050084,0x0000000e,0x0000029a,0x00000299,0x000001bf,0x0003003e,0x00000298,0x0000029a, + 0x0004003d,0x0000000e,0x0000029c,0x00000293,0x00050084,0x0000000e,0x0000029d,0x0000029c, + 0x000001bf,0x0003003e,0x0000029b,0x0000029d,0x0003003e,0x0000029e,0x0000029f,0x0004003d, + 0x0000000e,0x000002a0,0x00000298,0x00050080,0x0000000e,0x000002a1,0x000002a0,0x00000080, + 0x00050041,0x00000233,0x000002a3,0x00000232,0x000002a2,0x0004003d,0x0000000e,0x000002a4, + 0x000002a3,0x000500b0,0x00000057,0x000002a5,0x000002a1,0x000002a4,0x000300f7,0x000002a7, + 0x00000000,0x000400fa,0x000002a5,0x000002a6,0x000002a7,0x000200f8,0x000002a6,0x0004003d, + 0x0000000e,0x000002a8,0x0000029b,0x00050080,0x0000000e,0x000002a9,0x000002a8,0x00000080, + 0x00050041,0x00000233,0x000002ab,0x00000232,0x000002aa,0x0004003d,0x0000000e,0x000002ac, + 0x000002ab,0x000500b0,0x00000057,0x000002ad,0x000002a9,0x000002ac,0x000200f9,0x000002a7, + 0x000200f8,0x000002a7,0x000700f5,0x00000057,0x000002ae,0x000002a5,0x0000028b,0x000002ad, + 0x000002a6,0x000300f7,0x000002b0,0x00000000,0x000400fa,0x000002ae,0x000002af,0x000002b0, + 0x000200f8,0x000002af,0x0004003d,0x0000000e,0x000002b2,0x0000029b,0x00050041,0x00000233, + 0x000002b3,0x00000232,0x000002a2,0x0004003d,0x0000000e,0x000002b4,0x000002b3,0x00050084, + 0x0000000e,0x000002b5,0x000002b2,0x000002b4,0x0004003d,0x0000000e,0x000002b6,0x00000298, + 0x00050080,0x0000000e,0x000002b7,0x000002b5,0x000002b6,0x00050041,0x00000233,0x000002b8, + 0x00000232,0x000001ac,0x0004003d,0x0000000e,0x000002b9,0x000002b8,0x00050084,0x0000000e, + 0x000002ba,0x000002b7,0x000002b9,0x0004003d,0x0000000e,0x000002bb,0x0000023e,0x00050080, + 0x0000000e,0x000002bc,0x000002ba,0x000002bb,0x00050086,0x0000000e,0x000002bd,0x000002bc, + 0x0000002b,0x0003003e,0x000002b1,0x000002bd,0x0004003d,0x0000000e,0x000002bf,0x0000029b, + 0x00050041,0x00000233,0x000002c0,0x00000232,0x000002a2,0x0004003d,0x0000000e,0x000002c1, + 0x000002c0,0x00050084,0x0000000e,0x000002c2,0x000002bf,0x000002c1,0x0004003d,0x0000000e, + 0x000002c3,0x00000298,0x00050080,0x0000000e,0x000002c4,0x000002c2,0x000002c3,0x00050080, + 0x0000000e,0x000002c5,0x000002c4,0x00000080,0x00050041,0x00000233,0x000002c6,0x00000232, + 0x000001ac,0x0004003d,0x0000000e,0x000002c7,0x000002c6,0x00050084,0x0000000e,0x000002c8, + 0x000002c5,0x000002c7,0x0004003d,0x0000000e,0x000002c9,0x0000023e,0x00050080,0x0000000e, + 0x000002ca,0x000002c8,0x000002c9,0x00050086,0x0000000e,0x000002cb,0x000002ca,0x0000002b, + 0x0003003e,0x000002be,0x000002cb,0x0004003d,0x0000000e,0x000002cd,0x0000029b,0x00050080, + 0x0000000e,0x000002ce,0x000002cd,0x00000080,0x00050041,0x00000233,0x000002cf,0x00000232, + 0x000002a2,0x0004003d,0x0000000e,0x000002d0,0x000002cf,0x00050084,0x0000000e,0x000002d1, + 0x000002ce,0x000002d0,0x0004003d,0x0000000e,0x000002d2,0x00000298,0x00050080,0x0000000e, + 0x000002d3,0x000002d1,0x000002d2,0x00050041,0x00000233,0x000002d4,0x00000232,0x000001ac, + 0x0004003d,0x0000000e,0x000002d5,0x000002d4,0x00050084,0x0000000e,0x000002d6,0x000002d3, + 0x000002d5,0x0004003d,0x0000000e,0x000002d7,0x0000023e,0x00050080,0x0000000e,0x000002d8, + 0x000002d6,0x000002d7,0x00050086,0x0000000e,0x000002d9,0x000002d8,0x0000002b,0x0003003e, + 0x000002cc,0x000002d9,0x0004003d,0x0000000e,0x000002db,0x0000029b,0x00050080,0x0000000e, + 0x000002dc,0x000002db,0x00000080,0x00050041,0x00000233,0x000002dd,0x00000232,0x000002a2, + 0x0004003d,0x0000000e,0x000002de,0x000002dd,0x00050084,0x0000000e,0x000002df,0x000002dc, + 0x000002de,0x0004003d,0x0000000e,0x000002e0,0x00000298,0x00050080,0x0000000e,0x000002e1, + 0x000002df,0x000002e0,0x00050080,0x0000000e,0x000002e2,0x000002e1,0x00000080,0x00050041, + 0x00000233,0x000002e3,0x00000232,0x000001ac,0x0004003d,0x0000000e,0x000002e4,0x000002e3, + 0x00050084,0x0000000e,0x000002e5,0x000002e2,0x000002e4,0x0004003d,0x0000000e,0x000002e6, + 0x0000023e,0x00050080,0x0000000e,0x000002e7,0x000002e5,0x000002e6,0x00050086,0x0000000e, + 0x000002e8,0x000002e7,0x0000002b,0x0003003e,0x000002da,0x000002e8,0x0004003d,0x0000000e, + 0x000002ea,0x000002b1,0x00060041,0x00000273,0x000002eb,0x00000281,0x0000019f,0x000002ea, + 0x0004003d,0x00000034,0x000002ec,0x000002eb,0x0003003e,0x000002e9,0x000002ec,0x0004003d, + 0x0000000e,0x000002ee,0x000002be,0x00060041,0x00000273,0x000002ef,0x00000281,0x0000019f, + 0x000002ee,0x0004003d,0x00000034,0x000002f0,0x000002ef,0x0003003e,0x000002ed,0x000002f0, + 0x0004003d,0x0000000e,0x000002f2,0x000002cc,0x00060041,0x00000273,0x000002f3,0x00000281, + 0x0000019f,0x000002f2,0x0004003d,0x00000034,0x000002f4,0x000002f3,0x0003003e,0x000002f1, + 0x000002f4,0x0004003d,0x0000000e,0x000002f6,0x000002da,0x00060041,0x00000273,0x000002f7, + 0x00000281,0x0000019f,0x000002f6,0x0004003d,0x00000034,0x000002f8,0x000002f7,0x0003003e, + 0x000002f5,0x000002f8,0x0003003e,0x000002f9,0x000000b3,0x000200f9,0x000002fa,0x000200f8, + 0x000002fa,0x000400f6,0x000002fc,0x000002fd,0x00000001,0x000200f9,0x000002fe,0x000200f8, + 0x000002fe,0x0004003d,0x0000000e,0x000002ff,0x000002f9,0x000500b0,0x00000057,0x00000300, + 0x000002ff,0x000001b5,0x000400fa,0x00000300,0x000002fb,0x000002fc,0x000200f8,0x000002fb, + 0x0004003d,0x0000000e,0x00000302,0x000002f9,0x00050041,0x00000013,0x00000303,0x000002e9, + 0x00000302,0x0004003d,0x0000000e,0x00000304,0x00000303,0x0004007c,0x00000021,0x00000305, + 0x00000304,0x0004003d,0x0000000e,0x00000306,0x000002f9,0x00050041,0x00000013,0x00000307, + 0x000002ed,0x00000306,0x0004003d,0x0000000e,0x00000308,0x00000307,0x0004007c,0x00000021, + 0x00000309,0x00000308,0x00050081,0x00000021,0x0000030a,0x00000305,0x00000309,0x0003003e, + 0x00000301,0x0000030a,0x0004003d,0x0000000e,0x0000030c,0x000002f9,0x00050041,0x00000013, + 0x0000030d,0x000002f1,0x0000030c,0x0004003d,0x0000000e,0x0000030e,0x0000030d,0x0004007c, + 0x00000021,0x0000030f,0x0000030e,0x0004003d,0x0000000e,0x00000310,0x000002f9,0x00050041, + 0x00000013,0x00000311,0x000002f5,0x00000310,0x0004003d,0x0000000e,0x00000312,0x00000311, + 0x0004007c,0x00000021,0x00000313,0x00000312,0x00050081,0x00000021,0x00000314,0x0000030f, + 0x00000313,0x0003003e,0x0000030b,0x00000314,0x0004003d,0x00000021,0x00000316,0x00000301, + 0x0004003d,0x00000021,0x00000317,0x0000030b,0x00050081,0x00000021,0x00000318,0x00000316, + 0x00000317,0x0003003e,0x00000315,0x00000318,0x0004003d,0x00000021,0x0000031a,0x00000315, + 0x0005008e,0x00000021,0x0000031c,0x0000031a,0x0000031b,0x0003003e,0x00000319,0x0000031c, + 0x0004003d,0x0000000e,0x0000031d,0x000002f9,0x0004003d,0x00000021,0x0000031e,0x00000319, + 0x0004007c,0x0000000e,0x0000031f,0x0000031e,0x00050041,0x00000013,0x00000320,0x0000029e, + 0x0000031d,0x0003003e,0x00000320,0x0000031f,0x000200f9,0x000002fd,0x000200f8,0x000002fd, + 0x0004003d,0x0000000e,0x00000321,0x000002f9,0x00050080,0x0000000e,0x00000322,0x00000321, + 0x000001ac,0x0003003e,0x000002f9,0x00000322,0x000200f9,0x000002fa,0x000200f8,0x000002fc, + 0x000200f9,0x000002b0,0x000200f8,0x000002b0,0x0004003d,0x0000000e,0x00000323,0x00000220, + 0x0004003d,0x00000034,0x00000325,0x0000029e,0x0003003e,0x00000324,0x00000325,0x00050039, + 0x0000003b,0x00000326,0x00000048,0x00000324,0x00060041,0x00000287,0x00000327,0x0000027c, + 0x0000019f,0x00000323,0x0003003e,0x00000327,0x00000326,0x000200f9,0x0000028c,0x000200f8, + 0x00000328,0x000300f7,0x0000032b,0x00000000,0x000400fa,0x00000329,0x0000032a,0x000003a1, + 0x000200f8,0x0000032a,0x0004003d,0x0000000e,0x0000032d,0x00000243,0x00050041,0x00000233, + 0x0000032e,0x00000232,0x0000028f,0x0004003d,0x0000000e,0x0000032f,0x0000032e,0x00050089, + 0x0000000e,0x00000330,0x0000032d,0x0000032f,0x0003003e,0x0000032c,0x00000330,0x0004003d, + 0x0000000e,0x00000332,0x00000243,0x00050041,0x00000233,0x00000333,0x00000232,0x0000028f, + 0x0004003d,0x0000000e,0x00000334,0x00000333,0x00050086,0x0000000e,0x00000335,0x00000332, + 0x00000334,0x0003003e,0x00000331,0x00000335,0x0004003d,0x0000000e,0x00000337,0x00000331, + 0x000500c2,0x0000000e,0x00000338,0x00000337,0x00000080,0x00050041,0x00000233,0x00000339, + 0x00000232,0x000002a2,0x0004003d,0x0000000e,0x0000033a,0x00000339,0x00050084,0x0000000e, + 0x0000033b,0x00000338,0x0000033a,0x0004003d,0x0000000e,0x0000033c,0x0000032c,0x000500c2, + 0x0000000e,0x0000033d,0x0000033c,0x00000080,0x00050080,0x0000000e,0x0000033e,0x0000033b, + 0x0000033d,0x00050041,0x00000233,0x0000033f,0x00000232,0x000001ac,0x0004003d,0x0000000e, + 0x00000340,0x0000033f,0x00050084,0x0000000e,0x00000341,0x0000033e,0x00000340,0x0004003d, + 0x0000000e,0x00000342,0x0000023e,0x00050080,0x0000000e,0x00000343,0x00000341,0x00000342, + 0x0003003e,0x00000336,0x00000343,0x0004003d,0x0000000e,0x00000348,0x00000336,0x00050086, + 0x0000000e,0x00000349,0x00000348,0x0000002b,0x00060041,0x00000287,0x0000034c,0x00000347, + 0x0000019f,0x00000349,0x0004003d,0x0000003b,0x0000034d,0x0000034c,0x0003003e,0x0000034b, + 0x0000034d,0x00060039,0x00000002,0x0000034f,0x00000040,0x0000034b,0x0000034e,0x0004003d, + 0x0000002c,0x00000350,0x0000034e,0x0003003e,0x0000034a,0x00000350,0x0004003d,0x0000000e, + 0x00000355,0x00000220,0x00060041,0x00000287,0x00000358,0x00000354,0x0000019f,0x00000355, + 0x0004003d,0x0000003b,0x00000359,0x00000358,0x0003003e,0x00000357,0x00000359,0x00060039, + 0x00000002,0x0000035b,0x00000040,0x00000357,0x0000035a,0x0004003d,0x0000002c,0x0000035c, + 0x0000035a,0x0003003e,0x00000356,0x0000035c,0x00050041,0x00000233,0x00000360,0x00000232, + 0x0000035d,0x0004003d,0x0000000e,0x00000361,0x00000360,0x0003003e,0x0000035f,0x00000361, + 0x0004003d,0x0000000e,0x00000363,0x0000023e,0x0003003e,0x00000362,0x00000363,0x00070039, + 0x00000002,0x00000365,0x00000032,0x0000035f,0x00000362,0x00000364,0x0004003d,0x0000002c, + 0x00000366,0x00000364,0x0003003e,0x0000035e,0x00000366,0x00050041,0x00000233,0x0000036a, + 0x00000232,0x00000367,0x0004003d,0x0000000e,0x0000036b,0x0000036a,0x0003003e,0x00000369, + 0x0000036b,0x0004003d,0x0000000e,0x0000036d,0x0000023e,0x0003003e,0x0000036c,0x0000036d, + 0x00070039,0x00000002,0x0000036f,0x00000032,0x00000369,0x0000036c,0x0000036e,0x0004003d, + 0x0000002c,0x00000370,0x0000036e,0x0003003e,0x00000368,0x00000370,0x0003003e,0x00000371, + 0x000000b3,0x000200f9,0x00000372,0x000200f8,0x00000372,0x000400f6,0x00000374,0x00000375, + 0x00000001,0x000200f9,0x00000376,0x000200f8,0x00000376,0x0004003d,0x0000000e,0x00000377, + 0x00000371,0x000500b0,0x00000057,0x00000378,0x00000377,0x0000002b,0x000400fa,0x00000378, + 0x00000373,0x00000374,0x000200f8,0x00000373,0x0004003d,0x0000000e,0x0000037a,0x00000371, + 0x00050041,0x00000007,0x0000037b,0x0000034a,0x0000037a,0x0004003d,0x00000006,0x0000037c, + 0x0000037b,0x0004003d,0x0000000e,0x0000037d,0x00000371,0x00050041,0x00000007,0x0000037e, + 0x0000035e,0x0000037d,0x0004003d,0x00000006,0x0000037f,0x0000037e,0x00050085,0x00000006, + 0x00000380,0x0000037c,0x0000037f,0x0003003e,0x00000381,0x00000380,0x00050039,0x00000006, + 0x00000382,0x0000000a,0x00000381,0x0003003e,0x00000379,0x00000382,0x0004003d,0x00000006, + 0x00000384,0x00000379,0x0004003d,0x0000000e,0x00000385,0x00000371,0x00050041,0x00000007, + 0x00000386,0x00000356,0x00000385,0x0004003d,0x00000006,0x00000387,0x00000386,0x0004003d, + 0x0000000e,0x00000388,0x00000371,0x00050041,0x00000007,0x00000389,0x00000368,0x00000388, + 0x0004003d,0x00000006,0x0000038a,0x00000389,0x00050085,0x00000006,0x0000038b,0x00000387, + 0x0000038a,0x00050081,0x00000006,0x0000038c,0x00000384,0x0000038b,0x0003003e,0x00000383, + 0x0000038c,0x0004003d,0x0000000e,0x0000038e,0x00000371,0x0004003d,0x00000006,0x00000390, + 0x00000383,0x0003003e,0x0000038f,0x00000390,0x00050039,0x00000006,0x00000391,0x0000000a, + 0x0000038f,0x00050041,0x00000007,0x00000392,0x0000038d,0x0000038e,0x0003003e,0x00000392, + 0x00000391,0x000200f9,0x00000375,0x000200f8,0x00000375,0x0004003d,0x0000000e,0x00000393, + 0x00000371,0x00050080,0x0000000e,0x00000394,0x00000393,0x000001ac,0x0003003e,0x00000371, + 0x00000394,0x000200f9,0x00000372,0x000200f8,0x00000374,0x0004003d,0x0000002c,0x00000397, + 0x0000038d,0x0003003e,0x00000396,0x00000397,0x00050039,0x00000034,0x00000398,0x00000044, + 0x00000396,0x0003003e,0x00000395,0x00000398,0x0004003d,0x0000000e,0x00000399,0x00000220, + 0x0004003d,0x00000034,0x0000039a,0x00000395,0x00060041,0x00000273,0x0000039b,0x00000260, + 0x0000019f,0x00000399,0x0003003e,0x0000039b,0x0000039a,0x0004003d,0x0000000e,0x0000039c, + 0x00000220,0x0004003d,0x00000034,0x0000039e,0x00000395,0x0003003e,0x0000039d,0x0000039e, + 0x00050039,0x0000003b,0x0000039f,0x00000048,0x0000039d,0x00060041,0x00000287,0x000003a0, + 0x0000027c,0x0000019f,0x0000039c,0x0003003e,0x000003a0,0x0000039f,0x000200f9,0x0000032b, + 0x000200f8,0x000003a1,0x000300f7,0x000003a4,0x00000000,0x000400fa,0x000003a2,0x000003a3, + 0x000003a4,0x000200f8,0x000003a3,0x0004003d,0x0000000e,0x000003a6,0x00000243,0x00050041, + 0x00000233,0x000003a7,0x00000232,0x0000028f,0x0004003d,0x0000000e,0x000003a8,0x000003a7, + 0x00050089,0x0000000e,0x000003a9,0x000003a6,0x000003a8,0x0003003e,0x000003a5,0x000003a9, + 0x0004003d,0x0000000e,0x000003ab,0x00000243,0x00050041,0x00000233,0x000003ac,0x00000232, + 0x0000028f,0x0004003d,0x0000000e,0x000003ad,0x000003ac,0x00050086,0x0000000e,0x000003ae, + 0x000003ab,0x000003ad,0x0003003e,0x000003aa,0x000003ae,0x0004003d,0x0000000e,0x000003b0, + 0x000003aa,0x000500c2,0x0000000e,0x000003b1,0x000003b0,0x00000080,0x00050041,0x00000233, + 0x000003b2,0x00000232,0x000002a2,0x0004003d,0x0000000e,0x000003b3,0x000003b2,0x00050084, + 0x0000000e,0x000003b4,0x000003b1,0x000003b3,0x0004003d,0x0000000e,0x000003b5,0x000003a5, + 0x000500c2,0x0000000e,0x000003b6,0x000003b5,0x00000080,0x00050080,0x0000000e,0x000003b7, + 0x000003b4,0x000003b6,0x00050041,0x00000233,0x000003b8,0x00000232,0x000001ac,0x0004003d, + 0x0000000e,0x000003b9,0x000003b8,0x00050084,0x0000000e,0x000003ba,0x000003b7,0x000003b9, + 0x0004003d,0x0000000e,0x000003bb,0x0000023e,0x00050080,0x0000000e,0x000003bc,0x000003ba, + 0x000003bb,0x0003003e,0x000003af,0x000003bc,0x0004003d,0x0000000e,0x000003bd,0x000003af, + 0x00050086,0x0000000e,0x000003be,0x000003bd,0x0000002b,0x00060041,0x00000273,0x000003c1, + 0x00000281,0x0000019f,0x000003be,0x0004003d,0x00000034,0x000003c2,0x000003c1,0x0003003e, + 0x000003c0,0x000003c2,0x00060039,0x00000002,0x000003c4,0x00000039,0x000003c0,0x000003c3, + 0x0004003d,0x0000002c,0x000003c5,0x000003c3,0x0003003e,0x000003bf,0x000003c5,0x0004003d, + 0x0000000e,0x000003c6,0x00000220,0x00060041,0x00000287,0x000003c9,0x00000354,0x0000019f, + 0x000003c6,0x0004003d,0x0000003b,0x000003ca,0x000003c9,0x0003003e,0x000003c8,0x000003ca, + 0x00060039,0x00000002,0x000003cc,0x00000040,0x000003c8,0x000003cb,0x0004003d,0x0000002c, + 0x000003cd,0x000003cb,0x0003003e,0x000003c7,0x000003cd,0x00050041,0x00000233,0x000003d0, + 0x00000232,0x0000035d,0x0004003d,0x0000000e,0x000003d1,0x000003d0,0x0003003e,0x000003cf, + 0x000003d1,0x0004003d,0x0000000e,0x000003d3,0x0000023e,0x0003003e,0x000003d2,0x000003d3, + 0x00070039,0x00000002,0x000003d5,0x00000032,0x000003cf,0x000003d2,0x000003d4,0x0004003d, + 0x0000002c,0x000003d6,0x000003d4,0x0003003e,0x000003ce,0x000003d6,0x0003003e,0x000003d7, + 0x000000b3,0x000200f9,0x000003d8,0x000200f8,0x000003d8,0x000400f6,0x000003da,0x000003db, + 0x00000001,0x000200f9,0x000003dc,0x000200f8,0x000003dc,0x0004003d,0x0000000e,0x000003dd, + 0x000003d7,0x000500b0,0x00000057,0x000003de,0x000003dd,0x0000002b,0x000400fa,0x000003de, + 0x000003d9,0x000003da,0x000200f8,0x000003d9,0x0004003d,0x0000000e,0x000003e0,0x000003d7, + 0x00050041,0x00000007,0x000003e1,0x000003bf,0x000003e0,0x0004003d,0x00000006,0x000003e2, + 0x000003e1,0x0004003d,0x0000000e,0x000003e3,0x000003d7,0x00050041,0x00000007,0x000003e4, + 0x000003c7,0x000003e3,0x0004003d,0x00000006,0x000003e5,0x000003e4,0x0004003d,0x0000000e, + 0x000003e6,0x000003d7,0x00050041,0x00000007,0x000003e7,0x000003ce,0x000003e6,0x0004003d, + 0x00000006,0x000003e8,0x000003e7,0x00050085,0x00000006,0x000003e9,0x000003e5,0x000003e8, + 0x00050081,0x00000006,0x000003ea,0x000003e2,0x000003e9,0x0003003e,0x000003df,0x000003ea, + 0x0004003d,0x0000000e,0x000003ec,0x000003d7,0x0004003d,0x00000006,0x000003ee,0x000003df, + 0x0003003e,0x000003ed,0x000003ee,0x00050039,0x00000006,0x000003ef,0x0000000a,0x000003ed, + 0x00050041,0x00000007,0x000003f0,0x000003eb,0x000003ec,0x0003003e,0x000003f0,0x000003ef, + 0x000200f9,0x000003db,0x000200f8,0x000003db,0x0004003d,0x0000000e,0x000003f1,0x000003d7, + 0x00050080,0x0000000e,0x000003f2,0x000003f1,0x000001ac,0x0003003e,0x000003d7,0x000003f2, + 0x000200f9,0x000003d8,0x000200f8,0x000003da,0x0004003d,0x0000002c,0x000003f5,0x000003eb, + 0x0003003e,0x000003f4,0x000003f5,0x00050039,0x00000034,0x000003f6,0x00000044,0x000003f4, + 0x0003003e,0x000003f3,0x000003f6,0x0004003d,0x0000000e,0x000003f7,0x00000220,0x0004003d, + 0x00000034,0x000003f9,0x000003f3,0x0003003e,0x000003f8,0x000003f9,0x00050039,0x0000003b, + 0x000003fa,0x00000048,0x000003f8,0x00060041,0x00000287,0x000003fb,0x0000027c,0x0000019f, + 0x000003f7,0x0003003e,0x000003fb,0x000003fa,0x00050041,0x00000233,0x000003fd,0x00000232, + 0x000003fc,0x0004003d,0x0000000e,0x000003fe,0x000003fd,0x000500ab,0x00000057,0x000003ff, + 0x000003fe,0x000000b3,0x000300f7,0x00000401,0x00000000,0x000400fa,0x000003ff,0x00000400, + 0x00000401,0x000200f8,0x00000400,0x0004003d,0x0000000e,0x00000402,0x00000220,0x0004003d, + 0x00000034,0x00000403,0x000003f3,0x00060041,0x00000273,0x00000404,0x00000260,0x0000019f, + 0x00000402,0x0003003e,0x00000404,0x00000403,0x000200f9,0x00000401,0x000200f8,0x00000401, + 0x000200f9,0x000003a4,0x000200f8,0x000003a4,0x000200f9,0x0000032b,0x000200f8,0x0000032b, + 0x000200f9,0x0000028c,0x000200f8,0x0000028c,0x000200f9,0x00000278,0x000200f8,0x00000278, + 0x000200f9,0x0000024a,0x000200f8,0x0000024a,0x000100fd,0x00010038,0x00050036,0x00000006, + 0x0000000a,0x00000000,0x00000008,0x00030037,0x00000007,0x00000009,0x000200f8,0x0000000b, + 0x0004003b,0x00000013,0x0000004a,0x00000007,0x0004003b,0x00000013,0x0000004d,0x00000007, + 0x0004003b,0x00000013,0x00000051,0x00000007,0x0004003b,0x00000007,0x0000006b,0x00000007, + 0x0004003b,0x00000013,0x0000007c,0x00000007,0x0004003b,0x00000013,0x00000082,0x00000007, + 0x0004003d,0x00000006,0x0000004b,0x00000009,0x0004007c,0x0000000e,0x0000004c,0x0000004b, + 0x0003003e,0x0000004a,0x0000004c,0x0004003d,0x0000000e,0x0000004e,0x0000004a,0x000500c7, + 0x0000000e,0x00000050,0x0000004e,0x0000004f,0x0003003e,0x0000004d,0x00000050,0x0004003d, + 0x0000000e,0x00000052,0x0000004a,0x000500c7,0x0000000e,0x00000054,0x00000052,0x00000053, + 0x0003003e,0x00000051,0x00000054,0x0004003d,0x0000000e,0x00000055,0x00000051,0x000500ae, + 0x00000057,0x00000058,0x00000055,0x00000056,0x000300f7,0x0000005a,0x00000000,0x000400fa, + 0x00000058,0x00000059,0x0000005a,0x000200f8,0x00000059,0x0004003d,0x00000006,0x0000005b, + 0x00000009,0x000200fe,0x0000005b,0x000200f8,0x0000005a,0x0004003d,0x0000000e,0x0000005d, + 0x00000051,0x000500ae,0x00000057,0x0000005f,0x0000005d,0x0000005e,0x000300f7,0x00000061, + 0x00000000,0x000400fa,0x0000005f,0x00000060,0x00000061,0x000200f8,0x00000060,0x0004003d, + 0x0000000e,0x00000062,0x0000004d,0x000500c5,0x0000000e,0x00000063,0x00000062,0x00000056, + 0x0004007c,0x00000006,0x00000064,0x00000063,0x000200fe,0x00000064,0x000200f8,0x00000061, + 0x0004003d,0x0000000e,0x00000066,0x00000051,0x000500b0,0x00000057,0x00000068,0x00000066, + 0x00000067,0x000300f7,0x0000006a,0x00000000,0x000400fa,0x00000068,0x00000069,0x0000006a, + 0x000200f8,0x00000069,0x0004003d,0x0000000e,0x0000006c,0x00000051,0x0004007c,0x00000006, + 0x0000006d,0x0000006c,0x00050085,0x00000006,0x0000006f,0x0000006d,0x0000006e,0x0006000c, + 0x00000006,0x00000070,0x00000001,0x00000002,0x0000006f,0x0003003e,0x0000006b,0x00000070, + 0x0004003d,0x0000000e,0x00000071,0x0000004d,0x0004007c,0x00000006,0x00000072,0x00000071, + 0x0004003d,0x0000000e,0x00000073,0x0000004d,0x0004003d,0x00000006,0x00000074,0x0000006b, + 0x00050085,0x00000006,0x00000076,0x00000074,0x00000075,0x0004007c,0x0000000e,0x00000077, + 0x00000076,0x000500c5,0x0000000e,0x00000078,0x00000073,0x00000077,0x0004007c,0x00000006, + 0x00000079,0x00000078,0x00050081,0x00000006,0x0000007a,0x00000072,0x00000079,0x000200fe, + 0x0000007a,0x000200f8,0x0000006a,0x0004003d,0x0000000e,0x0000007d,0x00000051,0x000500c2, + 0x0000000e,0x0000007f,0x0000007d,0x0000007e,0x000500c7,0x0000000e,0x00000081,0x0000007f, + 0x00000080,0x0003003e,0x0000007c,0x00000081,0x0004003d,0x0000000e,0x00000083,0x00000051, + 0x00050080,0x0000000e,0x00000085,0x00000083,0x00000084,0x0004003d,0x0000000e,0x00000086, + 0x0000007c,0x00050080,0x0000000e,0x00000087,0x00000085,0x00000086,0x000500c7,0x0000000e, + 0x00000089,0x00000087,0x00000088,0x0003003e,0x00000082,0x00000089,0x0004003d,0x0000000e, + 0x0000008a,0x0000004d,0x0004003d,0x0000000e,0x0000008b,0x00000082,0x000500c5,0x0000000e, + 0x0000008c,0x0000008a,0x0000008b,0x0004007c,0x00000006,0x0000008d,0x0000008c,0x000200fe, + 0x0000008d,0x00010038,0x00050036,0x0000000e,0x00000011,0x00000000,0x0000000f,0x00030037, + 0x0000000d,0x00000010,0x000200f8,0x00000012,0x0004003d,0x0000000c,0x00000090,0x00000010, + 0x0004007c,0x00000023,0x00000091,0x00000090,0x00040071,0x0000000e,0x00000092,0x00000091, + 0x000200fe,0x00000092,0x00010038,0x00050036,0x0000000e,0x00000017,0x00000000,0x00000014, + 0x00030037,0x00000013,0x00000015,0x00030037,0x00000013,0x00000016,0x000200f8,0x00000018, + 0x0004003b,0x00000013,0x00000095,0x00000007,0x0004003b,0x00000013,0x00000099,0x00000007, + 0x0004003b,0x00000013,0x0000009d,0x00000007,0x0004003b,0x00000013,0x000000a1,0x00000007, + 0x0004003d,0x0000000e,0x00000096,0x00000015,0x0004003d,0x0000000e,0x00000097,0x00000016, + 0x000500c2,0x0000000e,0x00000098,0x00000096,0x00000097,0x0003003e,0x00000095,0x00000098, + 0x0004003d,0x0000000e,0x0000009a,0x00000016,0x000500c4,0x0000000e,0x0000009b,0x00000080, + 0x0000009a,0x00050082,0x0000000e,0x0000009c,0x0000009b,0x00000080,0x0003003e,0x00000099, + 0x0000009c,0x0004003d,0x0000000e,0x0000009e,0x00000015,0x0004003d,0x0000000e,0x0000009f, + 0x00000099,0x000500c7,0x0000000e,0x000000a0,0x0000009e,0x0000009f,0x0003003e,0x0000009d, + 0x000000a0,0x0004003d,0x0000000e,0x000000a2,0x00000016,0x00050082,0x0000000e,0x000000a3, + 0x000000a2,0x00000080,0x000500c4,0x0000000e,0x000000a4,0x00000080,0x000000a3,0x0003003e, + 0x000000a1,0x000000a4,0x0004003d,0x0000000e,0x000000a5,0x00000095,0x0004003d,0x0000000e, + 0x000000a6,0x0000009d,0x0004003d,0x0000000e,0x000000a7,0x000000a1,0x000500ac,0x00000057, + 0x000000a8,0x000000a6,0x000000a7,0x000400a8,0x00000057,0x000000a9,0x000000a8,0x000300f7, + 0x000000ab,0x00000000,0x000400fa,0x000000a9,0x000000aa,0x000000ab,0x000200f8,0x000000aa, + 0x0004003d,0x0000000e,0x000000ac,0x0000009d,0x0004003d,0x0000000e,0x000000ad,0x000000a1, + 0x000500aa,0x00000057,0x000000ae,0x000000ac,0x000000ad,0x000300f7,0x000000b0,0x00000000, + 0x000400fa,0x000000ae,0x000000af,0x000000b0,0x000200f8,0x000000af,0x0004003d,0x0000000e, + 0x000000b1,0x00000095,0x000500c7,0x0000000e,0x000000b2,0x000000b1,0x00000080,0x000500ab, + 0x00000057,0x000000b4,0x000000b2,0x000000b3,0x000200f9,0x000000b0,0x000200f8,0x000000b0, + 0x000700f5,0x00000057,0x000000b5,0x000000ae,0x000000aa,0x000000b4,0x000000af,0x000200f9, + 0x000000ab,0x000200f8,0x000000ab,0x000700f5,0x00000057,0x000000b6,0x000000a8,0x00000018, + 0x000000b5,0x000000b0,0x000600a9,0x0000000e,0x000000b7,0x000000b6,0x00000080,0x000000b3, + 0x00050080,0x0000000e,0x000000b8,0x000000a5,0x000000b7,0x000200fe,0x000000b8,0x00010038, + 0x00050036,0x0000000e,0x0000001b,0x00000000,0x00000019,0x00030037,0x00000013,0x0000001a, + 0x000200f8,0x0000001c,0x0004003b,0x000000bb,0x000000bc,0x00000007,0x0004003b,0x00000013, + 0x000000d7,0x00000007,0x0004003b,0x00000013,0x000000dd,0x00000007,0x0004003b,0x00000013, + 0x000000e3,0x00000007,0x0004003b,0x00000013,0x000000ea,0x00000007,0x0004003b,0x00000013, + 0x000000f1,0x00000007,0x0004003b,0x00000013,0x000000f4,0x00000007,0x0004003b,0x00000013, + 0x000000fd,0x00000007,0x0004003b,0x00000013,0x00000100,0x00000007,0x0004003b,0x00000013, + 0x00000109,0x00000007,0x0004003b,0x00000013,0x0000010b,0x00000007,0x0004003b,0x00000013, + 0x00000110,0x00000007,0x0004003b,0x00000013,0x00000113,0x00000007,0x0004003b,0x00000013, + 0x00000115,0x00000007,0x0004003b,0x00000013,0x00000117,0x00000007,0x0004003b,0x00000013, + 0x0000012b,0x00000007,0x0004003d,0x0000000e,0x000000bd,0x0000001a,0x000500c7,0x0000000e, + 0x000000bf,0x000000bd,0x000000be,0x000500aa,0x00000057,0x000000c0,0x000000bf,0x000000be, + 0x000300f7,0x000000c2,0x00000000,0x000400fa,0x000000c0,0x000000c1,0x000000c2,0x000200f8, + 0x000000c1,0x0004003d,0x0000000e,0x000000c3,0x0000001a,0x000500c7,0x0000000e,0x000000c5, + 0x000000c3,0x000000c4,0x000500ab,0x00000057,0x000000c6,0x000000c5,0x000000b3,0x000200f9, + 0x000000c2,0x000200f8,0x000000c2,0x000700f5,0x00000057,0x000000c7,0x000000c0,0x0000001c, + 0x000000c6,0x000000c1,0x0003003e,0x000000bc,0x000000c7,0x0004003d,0x00000057,0x000000c8, + 0x000000bc,0x000300f7,0x000000ca,0x00000000,0x000400fa,0x000000c8,0x000000c9,0x000000ca, + 0x000200f8,0x000000c9,0x000200fe,0x000000b3,0x000200f8,0x000000ca,0x0004003d,0x0000000e, + 0x000000cc,0x0000001a,0x000500c7,0x0000000e,0x000000ce,0x000000cc,0x000000cd,0x000500aa, + 0x00000057,0x000000cf,0x000000ce,0x000000b3,0x000300f7,0x000000d1,0x00000000,0x000400fa, + 0x000000cf,0x000000d0,0x000000d1,0x000200f8,0x000000d0,0x0004003d,0x0000000e,0x000000d2, + 0x0000001a,0x000500c2,0x0000000e,0x000000d3,0x000000d2,0x0000002b,0x000500c7,0x0000000e, + 0x000000d5,0x000000d3,0x000000d4,0x000200fe,0x000000d5,0x000200f8,0x000000d1,0x0004003d, + 0x0000000e,0x000000d8,0x0000001a,0x000500c7,0x0000000e,0x000000da,0x000000d8,0x000000d9, + 0x000500ab,0x00000057,0x000000db,0x000000da,0x000000b3,0x000600a9,0x0000000e,0x000000dc, + 0x000000db,0x000000d4,0x000000b3,0x0003003e,0x000000d7,0x000000dc,0x0004003d,0x0000000e, + 0x000000de,0x0000001a,0x000500c2,0x0000000e,0x000000e0,0x000000de,0x000000df,0x000500c7, + 0x0000000e,0x000000e2,0x000000e0,0x000000e1,0x0003003e,0x000000dd,0x000000e2,0x0004003d, + 0x0000000e,0x000000e4,0x0000001a,0x000500c7,0x0000000e,0x000000e5,0x000000e4,0x000000c4, + 0x0003003e,0x000000e3,0x000000e5,0x0004003d,0x0000000e,0x000000e6,0x000000dd,0x000500aa, + 0x00000057,0x000000e7,0x000000e6,0x000000e1,0x000300f7,0x000000e9,0x00000000,0x000400fa, + 0x000000e7,0x000000e8,0x000000ec,0x000200f8,0x000000e8,0x0003003e,0x000000ea,0x000000eb, + 0x000200f9,0x000000e9,0x000200f8,0x000000ec,0x0004003d,0x0000000e,0x000000ed,0x000000dd, + 0x000500b2,0x00000057,0x000000ee,0x000000ed,0x0000002b,0x000300f7,0x000000f0,0x00000000, + 0x000400fa,0x000000ee,0x000000ef,0x0000010f,0x000200f8,0x000000ef,0x0004003d,0x0000000e, + 0x000000f2,0x000000dd,0x000500aa,0x00000057,0x000000f3,0x000000f2,0x000000b3,0x000300f7, + 0x000000f6,0x00000000,0x000400fa,0x000000f3,0x000000f5,0x000000f8,0x000200f8,0x000000f5, + 0x0004003d,0x0000000e,0x000000f7,0x000000e3,0x0003003e,0x000000f4,0x000000f7,0x000200f9, + 0x000000f6,0x000200f8,0x000000f8,0x0004003d,0x0000000e,0x000000fa,0x000000e3,0x00050080, + 0x0000000e,0x000000fb,0x000000f9,0x000000fa,0x0003003e,0x000000f4,0x000000fb,0x000200f9, + 0x000000f6,0x000200f8,0x000000f6,0x0004003d,0x0000000e,0x000000fc,0x000000f4,0x0003003e, + 0x000000f1,0x000000fc,0x0004003d,0x0000000e,0x000000fe,0x000000dd,0x000500aa,0x00000057, + 0x000000ff,0x000000fe,0x000000b3,0x000300f7,0x00000102,0x00000000,0x000400fa,0x000000ff, + 0x00000101,0x00000104,0x000200f8,0x00000101,0x0003003e,0x00000100,0x00000103,0x000200f9, + 0x00000102,0x000200f8,0x00000104,0x0004003d,0x0000000e,0x00000106,0x000000dd,0x00050082, + 0x0000000e,0x00000107,0x00000105,0x00000106,0x0003003e,0x00000100,0x00000107,0x000200f9, + 0x00000102,0x000200f8,0x00000102,0x0004003d,0x0000000e,0x00000108,0x00000100,0x0003003e, + 0x000000fd,0x00000108,0x0004003d,0x0000000e,0x0000010a,0x000000f1,0x0003003e,0x00000109, + 0x0000010a,0x0004003d,0x0000000e,0x0000010c,0x000000fd,0x0003003e,0x0000010b,0x0000010c, + 0x00060039,0x0000000e,0x0000010d,0x00000017,0x00000109,0x0000010b,0x0007000c,0x0000000e, + 0x0000010e,0x00000001,0x00000026,0x0000010d,0x0000002b,0x0003003e,0x000000ea,0x0000010e, + 0x000200f9,0x000000f0,0x000200f8,0x0000010f,0x0004003d,0x0000000e,0x00000111,0x000000dd, + 0x00050082,0x0000000e,0x00000112,0x00000111,0x0000002b,0x0003003e,0x00000110,0x00000112, + 0x0004003d,0x0000000e,0x00000116,0x000000e3,0x0003003e,0x00000115,0x00000116,0x0003003e, + 0x00000117,0x00000114,0x00060039,0x0000000e,0x00000118,0x00000017,0x00000115,0x00000117, + 0x0003003e,0x00000113,0x00000118,0x0004003d,0x0000000e,0x00000119,0x00000113,0x000500aa, + 0x00000057,0x0000011a,0x00000119,0x0000002b,0x000300f7,0x0000011c,0x00000000,0x000400fa, + 0x0000011a,0x0000011b,0x0000011c,0x000200f8,0x0000011b,0x0003003e,0x00000113,0x000000b3, + 0x0004003d,0x0000000e,0x0000011d,0x00000110,0x00050080,0x0000000e,0x0000011e,0x0000011d, + 0x00000080,0x0003003e,0x00000110,0x0000011e,0x000200f9,0x0000011c,0x000200f8,0x0000011c, + 0x0004003d,0x0000000e,0x0000011f,0x00000110,0x000500ac,0x00000057,0x00000120,0x0000011f, + 0x00000103,0x000400a8,0x00000057,0x00000121,0x00000120,0x000300f7,0x00000123,0x00000000, + 0x000400fa,0x00000121,0x00000122,0x00000123,0x000200f8,0x00000122,0x0004003d,0x0000000e, + 0x00000124,0x00000110,0x000500aa,0x00000057,0x00000125,0x00000124,0x00000103,0x0004003d, + 0x0000000e,0x00000126,0x00000113,0x000500ac,0x00000057,0x00000128,0x00000126,0x00000127, + 0x000500a7,0x00000057,0x00000129,0x00000125,0x00000128,0x000200f9,0x00000123,0x000200f8, + 0x00000123,0x000700f5,0x00000057,0x0000012a,0x00000120,0x0000011c,0x00000129,0x00000122, + 0x000300f7,0x0000012d,0x00000000,0x000400fa,0x0000012a,0x0000012c,0x0000012e,0x000200f8, + 0x0000012c,0x0003003e,0x0000012b,0x000000eb,0x000200f9,0x0000012d,0x000200f8,0x0000012e, + 0x0004003d,0x0000000e,0x0000012f,0x00000110,0x000500c4,0x0000000e,0x00000131,0x0000012f, + 0x00000130,0x0004003d,0x0000000e,0x00000132,0x00000113,0x000500c5,0x0000000e,0x00000133, + 0x00000131,0x00000132,0x0003003e,0x0000012b,0x00000133,0x000200f9,0x0000012d,0x000200f8, + 0x0000012d,0x0004003d,0x0000000e,0x00000134,0x0000012b,0x0003003e,0x000000ea,0x00000134, + 0x000200f9,0x000000f0,0x000200f8,0x000000f0,0x000200f9,0x000000e9,0x000200f8,0x000000e9, + 0x0004003d,0x0000000e,0x00000135,0x000000d7,0x0004003d,0x0000000e,0x00000136,0x000000ea, + 0x000500c5,0x0000000e,0x00000137,0x00000135,0x00000136,0x000200fe,0x00000137,0x00010038, + 0x00050036,0x00000006,0x0000001f,0x00000000,0x0000001d,0x00030037,0x00000013,0x0000001e, + 0x000200f8,0x00000020,0x0004003b,0x000000bb,0x0000013a,0x00000007,0x0004003b,0x00000013, + 0x0000013e,0x00000007,0x0004003b,0x00000013,0x00000142,0x00000007,0x0004003b,0x00000007, + 0x00000149,0x00000007,0x0004003b,0x00000007,0x00000166,0x00000007,0x0004003d,0x0000000e, + 0x0000013b,0x0000001e,0x000500c7,0x0000000e,0x0000013c,0x0000013b,0x000000d4,0x000500ab, + 0x00000057,0x0000013d,0x0000013c,0x000000b3,0x0003003e,0x0000013a,0x0000013d,0x0004003d, + 0x0000000e,0x0000013f,0x0000001e,0x000500c2,0x0000000e,0x00000140,0x0000013f,0x00000130, + 0x000500c7,0x0000000e,0x00000141,0x00000140,0x00000103,0x0003003e,0x0000013e,0x00000141, + 0x0004003d,0x0000000e,0x00000143,0x0000001e,0x000500c7,0x0000000e,0x00000144,0x00000143, + 0x00000114,0x0003003e,0x00000142,0x00000144,0x0004003d,0x0000000e,0x00000145,0x0000013e, + 0x000500aa,0x00000057,0x00000146,0x00000145,0x000000b3,0x000300f7,0x00000148,0x00000000, + 0x000400fa,0x00000146,0x00000147,0x0000014e,0x000200f8,0x00000147,0x0004003d,0x0000000e, + 0x0000014a,0x00000142,0x00040070,0x00000006,0x0000014b,0x0000014a,0x00050085,0x00000006, + 0x0000014d,0x0000014b,0x0000014c,0x0003003e,0x00000149,0x0000014d,0x000200f9,0x00000148, + 0x000200f8,0x0000014e,0x0004003d,0x0000000e,0x0000014f,0x0000013e,0x000500aa,0x00000057, + 0x00000150,0x0000014f,0x00000103,0x0004003d,0x0000000e,0x00000151,0x00000142,0x000500aa, + 0x00000057,0x00000152,0x00000151,0x00000114,0x000500a7,0x00000057,0x00000153,0x00000150, + 0x00000152,0x000300f7,0x00000155,0x00000000,0x000400fa,0x00000153,0x00000154,0x00000157, + 0x000200f8,0x00000154,0x0003003e,0x00000149,0x00000156,0x000200f9,0x00000155,0x000200f8, + 0x00000157,0x0004003d,0x0000000e,0x00000159,0x00000142,0x00040070,0x00000006,0x0000015a, + 0x00000159,0x00050085,0x00000006,0x0000015c,0x0000015a,0x0000015b,0x00050081,0x00000006, + 0x0000015d,0x00000158,0x0000015c,0x0004003d,0x0000000e,0x0000015e,0x0000013e,0x00050080, + 0x0000000e,0x00000160,0x0000015e,0x0000015f,0x000500c4,0x0000000e,0x00000162,0x00000160, + 0x00000161,0x0004007c,0x00000006,0x00000163,0x00000162,0x00050085,0x00000006,0x00000164, + 0x0000015d,0x00000163,0x0003003e,0x00000149,0x00000164,0x000200f9,0x00000155,0x000200f8, + 0x00000155,0x000200f9,0x00000148,0x000200f8,0x00000148,0x0004003d,0x00000057,0x00000165, + 0x0000013a,0x000300f7,0x00000168,0x00000000,0x000400fa,0x00000165,0x00000167,0x0000016b, + 0x000200f8,0x00000167,0x0004003d,0x00000006,0x00000169,0x00000149,0x0004007f,0x00000006, + 0x0000016a,0x00000169,0x0003003e,0x00000166,0x0000016a,0x000200f9,0x00000168,0x000200f8, + 0x0000016b,0x0004003d,0x00000006,0x0000016c,0x00000149,0x0003003e,0x00000166,0x0000016c, + 0x000200f9,0x00000168,0x000200f8,0x00000168,0x0004003d,0x00000006,0x0000016d,0x00000166, + 0x000200fe,0x0000016d,0x00010038,0x00050036,0x00000023,0x00000026,0x00000000,0x00000024, + 0x00030037,0x00000022,0x00000025,0x000200f8,0x00000027,0x0004003b,0x0000000d,0x00000170, + 0x00000007,0x0004003b,0x00000013,0x00000174,0x00000007,0x0004003b,0x0000000d,0x00000176, + 0x00000007,0x0004003b,0x00000013,0x0000017a,0x00000007,0x00050041,0x0000000d,0x00000171, + 0x00000025,0x000000b3,0x0004003d,0x0000000c,0x00000172,0x00000171,0x0003003e,0x00000170, + 0x00000172,0x00050039,0x0000000e,0x00000173,0x00000011,0x00000170,0x0003003e,0x00000174, + 0x00000173,0x00050039,0x0000000e,0x00000175,0x0000001b,0x00000174,0x00050041,0x0000000d, + 0x00000177,0x00000025,0x00000080,0x0004003d,0x0000000c,0x00000178,0x00000177,0x0003003e, + 0x00000176,0x00000178,0x00050039,0x0000000e,0x00000179,0x00000011,0x00000176,0x0003003e, + 0x0000017a,0x00000179,0x00050039,0x0000000e,0x0000017b,0x0000001b,0x0000017a,0x000500c4, + 0x0000000e,0x0000017c,0x0000017b,0x0000002b,0x000500c5,0x0000000e,0x0000017d,0x00000175, + 0x0000017c,0x00040071,0x00000023,0x0000017e,0x0000017d,0x000200fe,0x0000017e,0x00010038, + 0x00050036,0x00000006,0x00000029,0x00000000,0x0000001d,0x00030037,0x00000013,0x00000028, + 0x000200f8,0x0000002a,0x0004003b,0x00000007,0x00000185,0x00000007,0x0004003b,0x00000013, + 0x0000018c,0x00000007,0x0004003d,0x0000000e,0x00000181,0x00000028,0x000500c7,0x0000000e, + 0x00000183,0x00000181,0x00000182,0x000500aa,0x00000057,0x00000184,0x00000183,0x00000182, + 0x000300f7,0x00000187,0x00000000,0x000400fa,0x00000184,0x00000186,0x00000188,0x000200f8, + 0x00000186,0x0003003e,0x00000185,0x00000156,0x000200f9,0x00000187,0x000200f8,0x00000188, + 0x0004003d,0x0000000e,0x00000189,0x00000028,0x000500c7,0x0000000e,0x0000018b,0x00000189, + 0x0000018a,0x0003003e,0x0000018c,0x0000018b,0x00050039,0x00000006,0x0000018d,0x0000001f, + 0x0000018c,0x0003003e,0x00000185,0x0000018d,0x000200f9,0x00000187,0x000200f8,0x00000187, + 0x0004003d,0x00000006,0x0000018e,0x00000185,0x000200fe,0x0000018e,0x00010038,0x00050036, + 0x00000002,0x00000032,0x00000000,0x0000002e,0x00030037,0x00000013,0x0000002f,0x00030037, + 0x00000013,0x00000030,0x00030037,0x0000002d,0x00000031,0x000200f8,0x00000033,0x0004003b, + 0x00000013,0x00000191,0x00000007,0x0003003e,0x00000191,0x000000b3,0x000200f9,0x00000192, + 0x000200f8,0x00000192,0x000400f6,0x00000194,0x00000195,0x00000001,0x000200f9,0x00000196, + 0x000200f8,0x00000196,0x0004003d,0x0000000e,0x00000197,0x00000191,0x000500b0,0x00000057, + 0x00000198,0x00000197,0x0000002b,0x000400fa,0x00000198,0x00000193,0x00000194,0x000200f8, + 0x00000193,0x0004003d,0x0000000e,0x00000199,0x00000191,0x0004003d,0x0000000e,0x000001a0, + 0x0000002f,0x0004003d,0x0000000e,0x000001a1,0x00000030,0x00050080,0x0000000e,0x000001a2, + 0x000001a0,0x000001a1,0x0004003d,0x0000000e,0x000001a3,0x00000191,0x00050080,0x0000000e, + 0x000001a4,0x000001a2,0x000001a3,0x00060041,0x000001a5,0x000001a6,0x0000019d,0x0000019f, + 0x000001a4,0x0004003d,0x00000023,0x000001a7,0x000001a6,0x0004007c,0x0000000c,0x000001a8, + 0x000001a7,0x00040073,0x00000006,0x000001a9,0x000001a8,0x00050041,0x00000007,0x000001aa, + 0x00000031,0x00000199,0x0003003e,0x000001aa,0x000001a9,0x000200f9,0x00000195,0x000200f8, + 0x00000195,0x0004003d,0x0000000e,0x000001ab,0x00000191,0x00050080,0x0000000e,0x000001ad, + 0x000001ab,0x000001ac,0x0003003e,0x00000191,0x000001ad,0x000200f9,0x00000192,0x000200f8, + 0x00000194,0x000100fd,0x00010038,0x00050036,0x00000002,0x00000039,0x00000000,0x00000036, + 0x00030037,0x00000035,0x00000037,0x00030037,0x0000002d,0x00000038,0x000200f8,0x0000003a, + 0x0004003b,0x00000013,0x000001ae,0x00000007,0x0004003b,0x000001b8,0x000001b9,0x00000007, + 0x0003003e,0x000001ae,0x000000b3,0x000200f9,0x000001af,0x000200f8,0x000001af,0x000400f6, + 0x000001b1,0x000001b2,0x00000001,0x000200f9,0x000001b3,0x000200f8,0x000001b3,0x0004003d, + 0x0000000e,0x000001b4,0x000001ae,0x000500b0,0x00000057,0x000001b6,0x000001b4,0x000001b5, + 0x000400fa,0x000001b6,0x000001b0,0x000001b1,0x000200f8,0x000001b0,0x0004003d,0x0000000e, + 0x000001ba,0x000001ae,0x00050041,0x00000013,0x000001bb,0x00000037,0x000001ba,0x0004003d, + 0x0000000e,0x000001bc,0x000001bb,0x0004007c,0x00000021,0x000001bd,0x000001bc,0x00040073, + 0x000001b7,0x000001be,0x000001bd,0x0003003e,0x000001b9,0x000001be,0x0004003d,0x0000000e, + 0x000001c0,0x000001ae,0x00050084,0x0000000e,0x000001c1,0x000001bf,0x000001c0,0x00050041, + 0x00000007,0x000001c2,0x000001b9,0x000000b3,0x0004003d,0x00000006,0x000001c3,0x000001c2, + 0x00050041,0x00000007,0x000001c4,0x00000038,0x000001c1,0x0003003e,0x000001c4,0x000001c3, + 0x0004003d,0x0000000e,0x000001c5,0x000001ae,0x00050084,0x0000000e,0x000001c6,0x000001bf, + 0x000001c5,0x00050080,0x0000000e,0x000001c7,0x000001c6,0x00000080,0x00050041,0x00000007, + 0x000001c8,0x000001b9,0x00000080,0x0004003d,0x00000006,0x000001c9,0x000001c8,0x00050041, + 0x00000007,0x000001ca,0x00000038,0x000001c7,0x0003003e,0x000001ca,0x000001c9,0x000200f9, + 0x000001b2,0x000200f8,0x000001b2,0x0004003d,0x0000000e,0x000001cb,0x000001ae,0x00050080, + 0x0000000e,0x000001cc,0x000001cb,0x000001ac,0x0003003e,0x000001ae,0x000001cc,0x000200f9, + 0x000001af,0x000200f8,0x000001b1,0x000100fd,0x00010038,0x00050036,0x00000002,0x00000040, + 0x00000000,0x0000003d,0x00030037,0x0000003c,0x0000003e,0x00030037,0x0000002d,0x0000003f, + 0x000200f8,0x00000041,0x0004003b,0x00000013,0x000001cd,0x00000007,0x0004003b,0x00000013, + 0x000001df,0x00000007,0x0003003e,0x000001cd,0x000000b3,0x000200f9,0x000001ce,0x000200f8, + 0x000001ce,0x000400f6,0x000001d0,0x000001d1,0x00000001,0x000200f9,0x000001d2,0x000200f8, + 0x000001d2,0x0004003d,0x0000000e,0x000001d3,0x000001cd,0x000500b0,0x00000057,0x000001d4, + 0x000001d3,0x0000002b,0x000400fa,0x000001d4,0x000001cf,0x000001d0,0x000200f8,0x000001cf, + 0x0004003d,0x0000000e,0x000001d5,0x000001cd,0x0004003d,0x0000000e,0x000001d6,0x000001cd, + 0x000500c2,0x0000000e,0x000001d7,0x000001d6,0x000001bf,0x00050041,0x00000013,0x000001d8, + 0x0000003e,0x000001d7,0x0004003d,0x0000000e,0x000001d9,0x000001d8,0x0004003d,0x0000000e, + 0x000001da,0x000001cd,0x000500c7,0x0000000e,0x000001db,0x000001da,0x00000130,0x00050084, + 0x0000000e,0x000001dc,0x000001db,0x0000002b,0x000500c2,0x0000000e,0x000001dd,0x000001d9, + 0x000001dc,0x000500c7,0x0000000e,0x000001de,0x000001dd,0x0000018a,0x0003003e,0x000001df, + 0x000001de,0x00050039,0x00000006,0x000001e0,0x00000029,0x000001df,0x00050041,0x00000007, + 0x000001e1,0x0000003f,0x000001d5,0x0003003e,0x000001e1,0x000001e0,0x000200f9,0x000001d1, + 0x000200f8,0x000001d1,0x0004003d,0x0000000e,0x000001e2,0x000001cd,0x00050080,0x0000000e, + 0x000001e3,0x000001e2,0x000001ac,0x0003003e,0x000001cd,0x000001e3,0x000200f9,0x000001ce, + 0x000200f8,0x000001d0,0x000100fd,0x00010038,0x00050036,0x00000034,0x00000044,0x00000000, + 0x00000042,0x00030037,0x0000002d,0x00000043,0x000200f8,0x00000045,0x0004003b,0x00000013, + 0x000001e4,0x00000007,0x0004003b,0x00000035,0x000001ec,0x00000007,0x0003003e,0x000001e4, + 0x000000b3,0x000200f9,0x000001e5,0x000200f8,0x000001e5,0x000400f6,0x000001e7,0x000001e8, + 0x00000001,0x000200f9,0x000001e9,0x000200f8,0x000001e9,0x0004003d,0x0000000e,0x000001ea, + 0x000001e4,0x000500b0,0x00000057,0x000001eb,0x000001ea,0x000001b5,0x000400fa,0x000001eb, + 0x000001e6,0x000001e7,0x000200f8,0x000001e6,0x0004003d,0x0000000e,0x000001ed,0x000001e4, + 0x0004003d,0x0000000e,0x000001ee,0x000001e4,0x00050084,0x0000000e,0x000001ef,0x000001bf, + 0x000001ee,0x00050041,0x00000007,0x000001f0,0x00000043,0x000001ef,0x0004003d,0x00000006, + 0x000001f1,0x000001f0,0x00040073,0x0000000c,0x000001f2,0x000001f1,0x0004003d,0x0000000e, + 0x000001f3,0x000001e4,0x00050084,0x0000000e,0x000001f4,0x000001bf,0x000001f3,0x00050080, + 0x0000000e,0x000001f5,0x000001f4,0x00000080,0x00050041,0x00000007,0x000001f6,0x00000043, + 0x000001f5,0x0004003d,0x00000006,0x000001f7,0x000001f6,0x00040073,0x0000000c,0x000001f8, + 0x000001f7,0x00050050,0x00000021,0x000001f9,0x000001f2,0x000001f8,0x0004007c,0x0000000e, + 0x000001fa,0x000001f9,0x00050041,0x00000013,0x000001fb,0x000001ec,0x000001ed,0x0003003e, + 0x000001fb,0x000001fa,0x000200f9,0x000001e8,0x000200f8,0x000001e8,0x0004003d,0x0000000e, + 0x000001fc,0x000001e4,0x00050080,0x0000000e,0x000001fd,0x000001fc,0x000001ac,0x0003003e, + 0x000001e4,0x000001fd,0x000200f9,0x000001e5,0x000200f8,0x000001e7,0x0004003d,0x00000034, + 0x000001fe,0x000001ec,0x000200fe,0x000001fe,0x00010038,0x00050036,0x0000003b,0x00000048, + 0x00000000,0x00000046,0x00030037,0x00000035,0x00000047,0x000200f8,0x00000049,0x0004003b, + 0x00000022,0x00000204,0x00000007,0x0004003b,0x00000022,0x0000020a,0x00000007,0x0004003b, + 0x00000022,0x00000212,0x00000007,0x0004003b,0x00000022,0x00000218,0x00000007,0x00050041, + 0x00000013,0x00000201,0x00000047,0x000000b3,0x0004003d,0x0000000e,0x00000202,0x00000201, + 0x0004007c,0x00000021,0x00000203,0x00000202,0x0003003e,0x00000204,0x00000203,0x00050039, + 0x00000023,0x00000205,0x00000026,0x00000204,0x00040071,0x0000000e,0x00000206,0x00000205, + 0x00050041,0x00000013,0x00000207,0x00000047,0x00000080,0x0004003d,0x0000000e,0x00000208, + 0x00000207,0x0004007c,0x00000021,0x00000209,0x00000208,0x0003003e,0x0000020a,0x00000209, + 0x00050039,0x00000023,0x0000020b,0x00000026,0x0000020a,0x00040071,0x0000000e,0x0000020c, + 0x0000020b,0x000500c4,0x0000000e,0x0000020d,0x0000020c,0x00000105,0x000500c5,0x0000000e, + 0x0000020e,0x00000206,0x0000020d,0x00050041,0x00000013,0x0000020f,0x00000047,0x000001bf, + 0x0004003d,0x0000000e,0x00000210,0x0000020f,0x0004007c,0x00000021,0x00000211,0x00000210, + 0x0003003e,0x00000212,0x00000211,0x00050039,0x00000023,0x00000213,0x00000026,0x00000212, + 0x00040071,0x0000000e,0x00000214,0x00000213,0x00050041,0x00000013,0x00000215,0x00000047, + 0x00000130,0x0004003d,0x0000000e,0x00000216,0x00000215,0x0004007c,0x00000021,0x00000217, + 0x00000216,0x0003003e,0x00000218,0x00000217,0x00050039,0x00000023,0x00000219,0x00000026, + 0x00000218,0x00040071,0x0000000e,0x0000021a,0x00000219,0x000500c4,0x0000000e,0x0000021b, + 0x0000021a,0x00000105,0x000500c5,0x0000000e,0x0000021c,0x00000214,0x0000021b,0x00050050, + 0x0000003b,0x0000021d,0x0000020e,0x0000021c,0x000200fe,0x0000021d,0x00010038, +}; +inline constexpr uint32_t k_common__gemm_reduce[] = { + 0x07230203,0x00010600,0x0008000b,0x000001cc,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e, + 0x00000000,0x0003000e,0x00000000,0x00000001,0x000a000f,0x00000005,0x00000004,0x6e69616d, + 0x00000000,0x000000ff,0x0000010d,0x0000012b,0x000001b8,0x000001c5,0x00060010,0x00000004, + 0x00000011,0x00000100,0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc,0x00090004, + 0x455f4c47,0x635f5458,0x72746e6f,0x665f6c6f,0x5f776f6c,0x72747461,0x74756269,0x00007365, + 0x00080004,0x455f4c47,0x735f5458,0x65646168,0x36315f72,0x5f746962,0x726f7473,0x00656761, + 0x00080004,0x455f4c47,0x735f5458,0x65646168,0x62385f72,0x735f7469,0x61726f74,0x00006567, + 0x000b0004,0x455f4c47,0x735f5458,0x65646168,0x78655f72,0x63696c70,0x615f7469,0x68746972, + 0x6974656d,0x79745f63,0x00736570,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70, + 0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f, + 0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669,0x00040005,0x00000004,0x6e69616d, + 0x00000000,0x00060005,0x0000000b,0x42363166,0x28737469,0x31363166,0x0000003b,0x00040005, + 0x0000000a,0x756c6176,0x00000065,0x00060005,0x00000011,0x66696873,0x656e5274,0x3b317528, + 0x003b3175,0x00040005,0x0000000f,0x756c6176,0x00000065,0x00040005,0x00000010,0x66696873, + 0x00000074,0x00080005,0x00000015,0x336d3465,0x65646f43,0x6d6f7246,0x42363146,0x28737469, + 0x003b3175,0x00050005,0x00000014,0x666c6168,0x73746942,0x00000000,0x00060005,0x0000001b, + 0x756c6973,0x72696150,0x31667628,0x003b3236,0x00040005,0x0000001a,0x756c6176,0x00000065, + 0x00070005,0x00000020,0x336d3465,0x61507748,0x76287269,0x32363166,0x0000003b,0x00040005, + 0x0000001f,0x756c6176,0x00000065,0x00050005,0x00000027,0x746f7571,0x746e6569,0x00000000, + 0x00060005,0x0000002b,0x616d6572,0x65646e69,0x73614d72,0x0000006b,0x00050005,0x00000030, + 0x616d6572,0x65646e69,0x00000072,0x00040005,0x00000034,0x666c6168,0x00796177,0x00040005, + 0x00000050,0x614e7369,0x0000006e,0x00050005,0x0000006c,0x6167656e,0x65766974,0x00000000, + 0x00050005,0x00000072,0x6f707865,0x746e656e,0x00000000,0x00050005,0x00000078,0x746e616d, + 0x61737369,0x00000000,0x00040005,0x0000007f,0x65646f63,0x00000000,0x00050005,0x00000086, + 0x6e676973,0x63696669,0x00646e61,0x00040005,0x00000092,0x66696873,0x00000074,0x00040005, + 0x0000009e,0x61726170,0x0000006d,0x00040005,0x000000a0,0x61726170,0x0000006d,0x00050005, + 0x000000a5,0x78453465,0x656e6f70,0x0000746e,0x00050005,0x000000a8,0x614d3465,0x7369746e, + 0x00006173,0x00040005,0x000000aa,0x61726170,0x0000006d,0x00040005,0x000000ac,0x61726170, + 0x0000006d,0x00040005,0x000000cf,0x6e756f62,0x00646564,0x00040005,0x000000d6,0x656e6e69, + 0x00000072,0x00050005,0x000000de,0x796c6f70,0x696d6f6e,0x00006c61,0x00040005,0x000000e4, + 0x75736572,0x0000746c,0x00040005,0x000000eb,0x61726170,0x0000006d,0x00040005,0x000000ef, + 0x61726170,0x0000006d,0x00040005,0x000000f1,0x61726170,0x0000006d,0x00040005,0x000000f5, + 0x61726170,0x0000006d,0x00040005,0x000000fc,0x756f7267,0x00000070,0x00080005,0x000000ff, + 0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00060005,0x0000010a, + 0x756f7267,0x65507370,0x776f5272,0x00000000,0x00040005,0x0000010b,0x68737550,0x00000000, + 0x00050006,0x0000010b,0x00000000,0x73776f72,0x00000000,0x00040006,0x0000010b,0x00000001, + 0x0000004e,0x00060006,0x0000010b,0x00000002,0x696c7073,0x72745374,0x00656469,0x00070006, + 0x0000010b,0x00000003,0x7074756f,0x74537475,0x65646972,0x00000000,0x00080006,0x0000010b, + 0x00000004,0x7074756f,0x6f437475,0x6e6d756c,0x7366664f,0x00007465,0x00030005,0x0000010d, + 0x00006370,0x00030005,0x00000114,0x00776f72,0x00040005,0x00000118,0x756c6f63,0x00006e6d, + 0x00040005,0x00000127,0x61746f74,0x0000006c,0x00050005,0x00000129,0x74726150,0x736c6169, + 0x00000000,0x00060006,0x00000129,0x00000000,0x74726170,0x316c6169,0x00387836,0x00030005, + 0x0000012b,0x00000000,0x00030005,0x00000136,0x00000073,0x00040005,0x0000013d,0x494c5053, + 0x00004b54,0x00040005,0x0000013f,0x74726170,0x00000000,0x00030005,0x0000014f,0x00000069, + 0x00030005,0x00000158,0x006d7573,0x00040005,0x0000016a,0x47414c46,0x00000053,0x00030005, + 0x0000016f,0x00000069,0x00040005,0x0000017c,0x61726170,0x0000006d,0x00040005,0x00000182, + 0x65646e69,0x00000078,0x00040005,0x00000195,0x65646f63,0x00000073,0x00040005,0x00000199, + 0x61726170,0x0000006d,0x00040005,0x0000019f,0x61726170,0x0000006d,0x00040005,0x000001a9, + 0x61726170,0x0000006d,0x00040005,0x000001af,0x61726170,0x0000006d,0x00050005,0x000001b6, + 0x7074754f,0x34457475,0x00000000,0x00050006,0x000001b6,0x00000000,0x3874756f,0x00003878, + 0x00030005,0x000001b8,0x00000000,0x00050005,0x000001c3,0x7074754f,0x61487475,0x0000666c, + 0x00050006,0x000001c3,0x00000000,0x3174756f,0x00387836,0x00030005,0x000001c5,0x00000000, + 0x00030047,0x000000e7,0x0000002a,0x00040047,0x000000ff,0x0000000b,0x0000001c,0x00030047, + 0x0000010b,0x00000002,0x00050048,0x0000010b,0x00000000,0x00000023,0x00000000,0x00050048, + 0x0000010b,0x00000001,0x00000023,0x00000004,0x00050048,0x0000010b,0x00000002,0x00000023, + 0x00000008,0x00050048,0x0000010b,0x00000003,0x00000023,0x0000000c,0x00050048,0x0000010b, + 0x00000004,0x00000023,0x00000010,0x00040047,0x00000128,0x00000006,0x00000010,0x00030047, + 0x00000129,0x00000002,0x00040048,0x00000129,0x00000000,0x00000018,0x00050048,0x00000129, + 0x00000000,0x00000023,0x00000000,0x00030047,0x0000012b,0x00000018,0x00040047,0x0000012b, + 0x00000021,0x00000000,0x00040047,0x0000012b,0x00000022,0x00000000,0x00040047,0x0000013d, + 0x00000001,0x00000000,0x00030047,0x00000161,0x0000002a,0x00040047,0x0000016a,0x00000001, + 0x00000001,0x00040047,0x000001b5,0x00000006,0x00000008,0x00030047,0x000001b6,0x00000002, + 0x00040048,0x000001b6,0x00000000,0x00000019,0x00050048,0x000001b6,0x00000000,0x00000023, + 0x00000000,0x00030047,0x000001b8,0x00000019,0x00040047,0x000001b8,0x00000021,0x00000005, + 0x00040047,0x000001b8,0x00000022,0x00000000,0x00040047,0x000001c2,0x00000006,0x00000010, + 0x00030047,0x000001c3,0x00000002,0x00040048,0x000001c3,0x00000000,0x00000019,0x00050048, + 0x000001c3,0x00000000,0x00000023,0x00000000,0x00030047,0x000001c5,0x00000019,0x00040047, + 0x000001c5,0x00000021,0x00000002,0x00040047,0x000001c5,0x00000022,0x00000000,0x00020013, + 0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000010,0x00040020, + 0x00000007,0x00000007,0x00000006,0x00040015,0x00000008,0x00000020,0x00000000,0x00040021, + 0x00000009,0x00000008,0x00000007,0x00040020,0x0000000d,0x00000007,0x00000008,0x00050021, + 0x0000000e,0x00000008,0x0000000d,0x0000000d,0x00040021,0x00000013,0x00000008,0x0000000d, + 0x00040017,0x00000017,0x00000006,0x00000002,0x00040020,0x00000018,0x00000007,0x00000017, + 0x00040021,0x00000019,0x00000017,0x00000018,0x00040015,0x0000001d,0x00000010,0x00000000, + 0x00040021,0x0000001e,0x0000001d,0x00000018,0x0004002b,0x00000008,0x0000002c,0x00000001, + 0x00020014,0x00000039,0x0004002b,0x00000008,0x00000047,0x00000000,0x00040020,0x0000004f, + 0x00000007,0x00000039,0x0004002b,0x00000008,0x00000052,0x00007c00,0x0004002b,0x00000008, + 0x00000058,0x000003ff,0x0004002b,0x00000008,0x00000061,0x00007fff,0x0004002b,0x00000008, + 0x00000067,0x00000008,0x0004002b,0x00000008,0x00000069,0x00000080,0x0004002b,0x00000008, + 0x0000006e,0x00008000,0x0004002b,0x00000008,0x00000074,0x0000000a,0x0004002b,0x00000008, + 0x00000076,0x0000001f,0x0004002b,0x00000008,0x00000080,0x0000007e,0x0004002b,0x00000008, + 0x0000008e,0x00000400,0x0004002b,0x00000008,0x00000098,0x0000000f,0x0004002b,0x00000008, + 0x0000009a,0x00000010,0x0004002b,0x00000008,0x000000a9,0x00000007,0x0004002b,0x00000008, + 0x000000bc,0x00000006,0x0004002b,0x00000008,0x000000c5,0x00000003,0x0004002b,0x00000006, + 0x000000d1,0x0000c400,0x0005002c,0x00000017,0x000000d2,0x000000d1,0x000000d1,0x0004002b, + 0x00000006,0x000000d3,0x00004400,0x0005002c,0x00000017,0x000000d4,0x000000d3,0x000000d3, + 0x0004002b,0x00000006,0x000000d7,0x0000ab28,0x0005002c,0x00000017,0x000000d8,0x000000d7, + 0x000000d7,0x0004002b,0x00000006,0x000000db,0x00003728,0x0005002c,0x00000017,0x000000dc, + 0x000000db,0x000000db,0x0004002b,0x00000006,0x000000e1,0x00003b28,0x0005002c,0x00000017, + 0x000000e2,0x000000e1,0x000000e1,0x00040017,0x000000fd,0x00000008,0x00000003,0x00040020, + 0x000000fe,0x00000001,0x000000fd,0x0004003b,0x000000fe,0x000000ff,0x00000001,0x00040020, + 0x00000100,0x00000001,0x00000008,0x0004002b,0x00000008,0x00000105,0x0000ffff,0x0004002b, + 0x00000008,0x00000107,0x00000100,0x0007001e,0x0000010b,0x00000008,0x00000008,0x00000008, + 0x00000008,0x00000008,0x00040020,0x0000010c,0x00000009,0x0000010b,0x0004003b,0x0000010c, + 0x0000010d,0x00000009,0x00040015,0x0000010e,0x00000020,0x00000001,0x0004002b,0x0000010e, + 0x0000010f,0x00000001,0x00040020,0x00000110,0x00000009,0x00000008,0x0004002b,0x0000010e, + 0x0000011e,0x00000000,0x00040017,0x00000125,0x00000008,0x00000004,0x00040020,0x00000126, + 0x00000007,0x00000125,0x0003001d,0x00000128,0x00000125,0x0003001e,0x00000129,0x00000128, + 0x00040020,0x0000012a,0x0000000c,0x00000129,0x0004003b,0x0000012a,0x0000012b,0x0000000c, + 0x00040020,0x00000133,0x0000000c,0x00000125,0x00040032,0x00000008,0x0000013d,0x00000002, + 0x0004002b,0x0000010e,0x00000141,0x00000002,0x0004002b,0x00000008,0x00000156,0x00000004, + 0x00040032,0x00000008,0x0000016a,0x00000000,0x00060034,0x00000008,0x0000016b,0x000000c7, + 0x0000016a,0x00000067,0x00060034,0x00000039,0x0000016c,0x000000ab,0x0000016b,0x00000047, + 0x0004002b,0x0000010e,0x00000184,0x00000003,0x0004002b,0x0000010e,0x00000188,0x00000004, + 0x0004002b,0x00000008,0x0000018e,0x00000030,0x00060034,0x00000008,0x0000018f,0x000000c7, + 0x0000016a,0x0000018e,0x00060034,0x00000039,0x00000190,0x000000ab,0x0000018f,0x00000047, + 0x00040017,0x00000193,0x00000008,0x00000002,0x00040020,0x00000194,0x00000007,0x00000193, + 0x0004002b,0x00000008,0x000001a5,0x00000002,0x0003001d,0x000001b5,0x00000193,0x0003001e, + 0x000001b6,0x000001b5,0x00040020,0x000001b7,0x0000000c,0x000001b6,0x0004003b,0x000001b7, + 0x000001b8,0x0000000c,0x00040020,0x000001bc,0x0000000c,0x00000193,0x00060034,0x00000008, + 0x000001be,0x000000c7,0x0000016a,0x0000009a,0x00060034,0x00000039,0x000001bf,0x000000aa, + 0x000001be,0x00000047,0x0003001d,0x000001c2,0x00000125,0x0003001e,0x000001c3,0x000001c2, + 0x00040020,0x000001c4,0x0000000c,0x000001c3,0x0004003b,0x000001c4,0x000001c5,0x0000000c, + 0x0006002c,0x000000fd,0x000001ca,0x00000107,0x0000002c,0x0000002c,0x0004002b,0x00000008, + 0x000001cb,0x00000020,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8, + 0x00000005,0x0004003b,0x0000000d,0x000000fc,0x00000007,0x0004003b,0x0000000d,0x0000010a, + 0x00000007,0x0004003b,0x0000000d,0x00000114,0x00000007,0x0004003b,0x0000000d,0x00000118, + 0x00000007,0x0004003b,0x00000126,0x00000127,0x00000007,0x0004003b,0x0000000d,0x00000136, + 0x00000007,0x0004003b,0x00000126,0x0000013f,0x00000007,0x0004003b,0x0000000d,0x0000014f, + 0x00000007,0x0004003b,0x00000018,0x00000158,0x00000007,0x0004003b,0x0000000d,0x0000016f, + 0x00000007,0x0004003b,0x00000018,0x0000017c,0x00000007,0x0004003b,0x0000000d,0x00000182, + 0x00000007,0x0004003b,0x00000194,0x00000195,0x00000007,0x0004003b,0x00000018,0x00000199, + 0x00000007,0x0004003b,0x00000018,0x0000019f,0x00000007,0x0004003b,0x00000018,0x000001a9, + 0x00000007,0x0004003b,0x00000018,0x000001af,0x00000007,0x00050041,0x00000100,0x00000101, + 0x000000ff,0x00000047,0x0004003d,0x00000008,0x00000102,0x00000101,0x00050041,0x00000100, + 0x00000103,0x000000ff,0x0000002c,0x0004003d,0x00000008,0x00000104,0x00000103,0x00050084, + 0x00000008,0x00000106,0x00000104,0x00000105,0x00050084,0x00000008,0x00000108,0x00000106, + 0x00000107,0x00050080,0x00000008,0x00000109,0x00000102,0x00000108,0x0003003e,0x000000fc, + 0x00000109,0x00050041,0x00000110,0x00000111,0x0000010d,0x0000010f,0x0004003d,0x00000008, + 0x00000112,0x00000111,0x00050086,0x00000008,0x00000113,0x00000112,0x00000067,0x0003003e, + 0x0000010a,0x00000113,0x0004003d,0x00000008,0x00000115,0x000000fc,0x0004003d,0x00000008, + 0x00000116,0x0000010a,0x00050086,0x00000008,0x00000117,0x00000115,0x00000116,0x0003003e, + 0x00000114,0x00000117,0x0004003d,0x00000008,0x00000119,0x000000fc,0x0004003d,0x00000008, + 0x0000011a,0x0000010a,0x00050089,0x00000008,0x0000011b,0x00000119,0x0000011a,0x00050084, + 0x00000008,0x0000011c,0x0000011b,0x00000067,0x0003003e,0x00000118,0x0000011c,0x0004003d, + 0x00000008,0x0000011d,0x00000114,0x00050041,0x00000110,0x0000011f,0x0000010d,0x0000011e, + 0x0004003d,0x00000008,0x00000120,0x0000011f,0x000500ae,0x00000039,0x00000121,0x0000011d, + 0x00000120,0x000300f7,0x00000123,0x00000000,0x000400fa,0x00000121,0x00000122,0x00000123, + 0x000200f8,0x00000122,0x000100fd,0x000200f8,0x00000123,0x0004003d,0x00000008,0x0000012c, + 0x00000114,0x00050041,0x00000110,0x0000012d,0x0000010d,0x0000010f,0x0004003d,0x00000008, + 0x0000012e,0x0000012d,0x00050084,0x00000008,0x0000012f,0x0000012c,0x0000012e,0x0004003d, + 0x00000008,0x00000130,0x00000118,0x00050080,0x00000008,0x00000131,0x0000012f,0x00000130, + 0x000500c2,0x00000008,0x00000132,0x00000131,0x000000c5,0x00060041,0x00000133,0x00000134, + 0x0000012b,0x0000011e,0x00000132,0x0004003d,0x00000125,0x00000135,0x00000134,0x0003003e, + 0x00000127,0x00000135,0x0003003e,0x00000136,0x0000002c,0x000200f9,0x00000137,0x000200f8, + 0x00000137,0x000400f6,0x00000139,0x0000013a,0x00000001,0x000200f9,0x0000013b,0x000200f8, + 0x0000013b,0x0004003d,0x00000008,0x0000013c,0x00000136,0x000500b0,0x00000039,0x0000013e, + 0x0000013c,0x0000013d,0x000400fa,0x0000013e,0x00000138,0x00000139,0x000200f8,0x00000138, + 0x0004003d,0x00000008,0x00000140,0x00000136,0x00050041,0x00000110,0x00000142,0x0000010d, + 0x00000141,0x0004003d,0x00000008,0x00000143,0x00000142,0x00050084,0x00000008,0x00000144, + 0x00000140,0x00000143,0x0004003d,0x00000008,0x00000145,0x00000114,0x00050041,0x00000110, + 0x00000146,0x0000010d,0x0000010f,0x0004003d,0x00000008,0x00000147,0x00000146,0x00050084, + 0x00000008,0x00000148,0x00000145,0x00000147,0x00050080,0x00000008,0x00000149,0x00000144, + 0x00000148,0x0004003d,0x00000008,0x0000014a,0x00000118,0x00050080,0x00000008,0x0000014b, + 0x00000149,0x0000014a,0x000500c2,0x00000008,0x0000014c,0x0000014b,0x000000c5,0x00060041, + 0x00000133,0x0000014d,0x0000012b,0x0000011e,0x0000014c,0x0004003d,0x00000125,0x0000014e, + 0x0000014d,0x0003003e,0x0000013f,0x0000014e,0x0003003e,0x0000014f,0x00000047,0x000200f9, + 0x00000150,0x000200f8,0x00000150,0x000400f6,0x00000152,0x00000153,0x00000001,0x000200f9, + 0x00000154,0x000200f8,0x00000154,0x0004003d,0x00000008,0x00000155,0x0000014f,0x000500b0, + 0x00000039,0x00000157,0x00000155,0x00000156,0x000400fa,0x00000157,0x00000151,0x00000152, + 0x000200f8,0x00000151,0x0004003d,0x00000008,0x00000159,0x0000014f,0x00050041,0x0000000d, + 0x0000015a,0x00000127,0x00000159,0x0004003d,0x00000008,0x0000015b,0x0000015a,0x0004007c, + 0x00000017,0x0000015c,0x0000015b,0x0004003d,0x00000008,0x0000015d,0x0000014f,0x00050041, + 0x0000000d,0x0000015e,0x0000013f,0x0000015d,0x0004003d,0x00000008,0x0000015f,0x0000015e, + 0x0004007c,0x00000017,0x00000160,0x0000015f,0x00050081,0x00000017,0x00000161,0x0000015c, + 0x00000160,0x0003003e,0x00000158,0x00000161,0x0004003d,0x00000008,0x00000162,0x0000014f, + 0x0004003d,0x00000017,0x00000163,0x00000158,0x0004007c,0x00000008,0x00000164,0x00000163, + 0x00050041,0x0000000d,0x00000165,0x00000127,0x00000162,0x0003003e,0x00000165,0x00000164, + 0x000200f9,0x00000153,0x000200f8,0x00000153,0x0004003d,0x00000008,0x00000166,0x0000014f, + 0x00050080,0x00000008,0x00000167,0x00000166,0x0000010f,0x0003003e,0x0000014f,0x00000167, + 0x000200f9,0x00000150,0x000200f8,0x00000152,0x000200f9,0x0000013a,0x000200f8,0x0000013a, + 0x0004003d,0x00000008,0x00000168,0x00000136,0x00050080,0x00000008,0x00000169,0x00000168, + 0x0000010f,0x0003003e,0x00000136,0x00000169,0x000200f9,0x00000137,0x000200f8,0x00000139, + 0x000300f7,0x0000016e,0x00000000,0x000400fa,0x0000016c,0x0000016d,0x0000016e,0x000200f8, + 0x0000016d,0x0003003e,0x0000016f,0x00000047,0x000200f9,0x00000170,0x000200f8,0x00000170, + 0x000400f6,0x00000172,0x00000173,0x00000001,0x000200f9,0x00000174,0x000200f8,0x00000174, + 0x0004003d,0x00000008,0x00000175,0x0000016f,0x000500b0,0x00000039,0x00000176,0x00000175, + 0x00000156,0x000400fa,0x00000176,0x00000171,0x00000172,0x000200f8,0x00000171,0x0004003d, + 0x00000008,0x00000177,0x0000016f,0x0004003d,0x00000008,0x00000178,0x0000016f,0x00050041, + 0x0000000d,0x00000179,0x00000127,0x00000178,0x0004003d,0x00000008,0x0000017a,0x00000179, + 0x0004007c,0x00000017,0x0000017b,0x0000017a,0x0003003e,0x0000017c,0x0000017b,0x00050039, + 0x00000017,0x0000017d,0x0000001b,0x0000017c,0x0004007c,0x00000008,0x0000017e,0x0000017d, + 0x00050041,0x0000000d,0x0000017f,0x00000127,0x00000177,0x0003003e,0x0000017f,0x0000017e, + 0x000200f9,0x00000173,0x000200f8,0x00000173,0x0004003d,0x00000008,0x00000180,0x0000016f, + 0x00050080,0x00000008,0x00000181,0x00000180,0x0000010f,0x0003003e,0x0000016f,0x00000181, + 0x000200f9,0x00000170,0x000200f8,0x00000172,0x000200f9,0x0000016e,0x000200f8,0x0000016e, + 0x0004003d,0x00000008,0x00000183,0x00000114,0x00050041,0x00000110,0x00000185,0x0000010d, + 0x00000184,0x0004003d,0x00000008,0x00000186,0x00000185,0x00050084,0x00000008,0x00000187, + 0x00000183,0x00000186,0x00050041,0x00000110,0x00000189,0x0000010d,0x00000188,0x0004003d, + 0x00000008,0x0000018a,0x00000189,0x00050080,0x00000008,0x0000018b,0x00000187,0x0000018a, + 0x0004003d,0x00000008,0x0000018c,0x00000118,0x00050080,0x00000008,0x0000018d,0x0000018b, + 0x0000018c,0x0003003e,0x00000182,0x0000018d,0x000300f7,0x00000192,0x00000000,0x000400fa, + 0x00000190,0x00000191,0x00000192,0x000200f8,0x00000191,0x00050041,0x0000000d,0x00000196, + 0x00000127,0x00000047,0x0004003d,0x00000008,0x00000197,0x00000196,0x0004007c,0x00000017, + 0x00000198,0x00000197,0x0003003e,0x00000199,0x00000198,0x00050039,0x0000001d,0x0000019a, + 0x00000020,0x00000199,0x00040071,0x00000008,0x0000019b,0x0000019a,0x00050041,0x0000000d, + 0x0000019c,0x00000127,0x0000002c,0x0004003d,0x00000008,0x0000019d,0x0000019c,0x0004007c, + 0x00000017,0x0000019e,0x0000019d,0x0003003e,0x0000019f,0x0000019e,0x00050039,0x0000001d, + 0x000001a0,0x00000020,0x0000019f,0x00040071,0x00000008,0x000001a1,0x000001a0,0x000500c4, + 0x00000008,0x000001a2,0x000001a1,0x0000009a,0x000500c5,0x00000008,0x000001a3,0x0000019b, + 0x000001a2,0x00050041,0x0000000d,0x000001a4,0x00000195,0x00000047,0x0003003e,0x000001a4, + 0x000001a3,0x00050041,0x0000000d,0x000001a6,0x00000127,0x000001a5,0x0004003d,0x00000008, + 0x000001a7,0x000001a6,0x0004007c,0x00000017,0x000001a8,0x000001a7,0x0003003e,0x000001a9, + 0x000001a8,0x00050039,0x0000001d,0x000001aa,0x00000020,0x000001a9,0x00040071,0x00000008, + 0x000001ab,0x000001aa,0x00050041,0x0000000d,0x000001ac,0x00000127,0x000000c5,0x0004003d, + 0x00000008,0x000001ad,0x000001ac,0x0004007c,0x00000017,0x000001ae,0x000001ad,0x0003003e, + 0x000001af,0x000001ae,0x00050039,0x0000001d,0x000001b0,0x00000020,0x000001af,0x00040071, + 0x00000008,0x000001b1,0x000001b0,0x000500c4,0x00000008,0x000001b2,0x000001b1,0x0000009a, + 0x000500c5,0x00000008,0x000001b3,0x000001ab,0x000001b2,0x00050041,0x0000000d,0x000001b4, + 0x00000195,0x0000002c,0x0003003e,0x000001b4,0x000001b3,0x0004003d,0x00000008,0x000001b9, + 0x00000182,0x000500c2,0x00000008,0x000001ba,0x000001b9,0x000000c5,0x0004003d,0x00000193, + 0x000001bb,0x00000195,0x00060041,0x000001bc,0x000001bd,0x000001b8,0x0000011e,0x000001ba, + 0x0003003e,0x000001bd,0x000001bb,0x000200f9,0x00000192,0x000200f8,0x00000192,0x000300f7, + 0x000001c1,0x00000000,0x000400fa,0x000001bf,0x000001c0,0x000001c1,0x000200f8,0x000001c0, + 0x0004003d,0x00000008,0x000001c6,0x00000182,0x000500c2,0x00000008,0x000001c7,0x000001c6, + 0x000000c5,0x0004003d,0x00000125,0x000001c8,0x00000127,0x00060041,0x00000133,0x000001c9, + 0x000001c5,0x0000011e,0x000001c7,0x0003003e,0x000001c9,0x000001c8,0x000200f9,0x000001c1, + 0x000200f8,0x000001c1,0x000100fd,0x00010038,0x00050036,0x00000008,0x0000000b,0x00000000, + 0x00000009,0x00030037,0x00000007,0x0000000a,0x000200f8,0x0000000c,0x0004003d,0x00000006, + 0x00000022,0x0000000a,0x0004007c,0x0000001d,0x00000023,0x00000022,0x00040071,0x00000008, + 0x00000024,0x00000023,0x000200fe,0x00000024,0x00010038,0x00050036,0x00000008,0x00000011, + 0x00000000,0x0000000e,0x00030037,0x0000000d,0x0000000f,0x00030037,0x0000000d,0x00000010, + 0x000200f8,0x00000012,0x0004003b,0x0000000d,0x00000027,0x00000007,0x0004003b,0x0000000d, + 0x0000002b,0x00000007,0x0004003b,0x0000000d,0x00000030,0x00000007,0x0004003b,0x0000000d, + 0x00000034,0x00000007,0x0004003d,0x00000008,0x00000028,0x0000000f,0x0004003d,0x00000008, + 0x00000029,0x00000010,0x000500c2,0x00000008,0x0000002a,0x00000028,0x00000029,0x0003003e, + 0x00000027,0x0000002a,0x0004003d,0x00000008,0x0000002d,0x00000010,0x000500c4,0x00000008, + 0x0000002e,0x0000002c,0x0000002d,0x00050082,0x00000008,0x0000002f,0x0000002e,0x0000002c, + 0x0003003e,0x0000002b,0x0000002f,0x0004003d,0x00000008,0x00000031,0x0000000f,0x0004003d, + 0x00000008,0x00000032,0x0000002b,0x000500c7,0x00000008,0x00000033,0x00000031,0x00000032, + 0x0003003e,0x00000030,0x00000033,0x0004003d,0x00000008,0x00000035,0x00000010,0x00050082, + 0x00000008,0x00000036,0x00000035,0x0000002c,0x000500c4,0x00000008,0x00000037,0x0000002c, + 0x00000036,0x0003003e,0x00000034,0x00000037,0x0004003d,0x00000008,0x00000038,0x00000027, + 0x0004003d,0x00000008,0x0000003a,0x00000030,0x0004003d,0x00000008,0x0000003b,0x00000034, + 0x000500ac,0x00000039,0x0000003c,0x0000003a,0x0000003b,0x000400a8,0x00000039,0x0000003d, + 0x0000003c,0x000300f7,0x0000003f,0x00000000,0x000400fa,0x0000003d,0x0000003e,0x0000003f, + 0x000200f8,0x0000003e,0x0004003d,0x00000008,0x00000040,0x00000030,0x0004003d,0x00000008, + 0x00000041,0x00000034,0x000500aa,0x00000039,0x00000042,0x00000040,0x00000041,0x000300f7, + 0x00000044,0x00000000,0x000400fa,0x00000042,0x00000043,0x00000044,0x000200f8,0x00000043, + 0x0004003d,0x00000008,0x00000045,0x00000027,0x000500c7,0x00000008,0x00000046,0x00000045, + 0x0000002c,0x000500ab,0x00000039,0x00000048,0x00000046,0x00000047,0x000200f9,0x00000044, + 0x000200f8,0x00000044,0x000700f5,0x00000039,0x00000049,0x00000042,0x0000003e,0x00000048, + 0x00000043,0x000200f9,0x0000003f,0x000200f8,0x0000003f,0x000700f5,0x00000039,0x0000004a, + 0x0000003c,0x00000012,0x00000049,0x00000044,0x000600a9,0x00000008,0x0000004b,0x0000004a, + 0x0000002c,0x00000047,0x00050080,0x00000008,0x0000004c,0x00000038,0x0000004b,0x000200fe, + 0x0000004c,0x00010038,0x00050036,0x00000008,0x00000015,0x00000000,0x00000013,0x00030037, + 0x0000000d,0x00000014,0x000200f8,0x00000016,0x0004003b,0x0000004f,0x00000050,0x00000007, + 0x0004003b,0x0000000d,0x0000006c,0x00000007,0x0004003b,0x0000000d,0x00000072,0x00000007, + 0x0004003b,0x0000000d,0x00000078,0x00000007,0x0004003b,0x0000000d,0x0000007f,0x00000007, + 0x0004003b,0x0000000d,0x00000086,0x00000007,0x0004003b,0x0000000d,0x00000089,0x00000007, + 0x0004003b,0x0000000d,0x00000092,0x00000007,0x0004003b,0x0000000d,0x00000095,0x00000007, + 0x0004003b,0x0000000d,0x0000009e,0x00000007,0x0004003b,0x0000000d,0x000000a0,0x00000007, + 0x0004003b,0x0000000d,0x000000a5,0x00000007,0x0004003b,0x0000000d,0x000000a8,0x00000007, + 0x0004003b,0x0000000d,0x000000aa,0x00000007,0x0004003b,0x0000000d,0x000000ac,0x00000007, + 0x0004003b,0x0000000d,0x000000c0,0x00000007,0x0004003d,0x00000008,0x00000051,0x00000014, + 0x000500c7,0x00000008,0x00000053,0x00000051,0x00000052,0x000500aa,0x00000039,0x00000054, + 0x00000053,0x00000052,0x000300f7,0x00000056,0x00000000,0x000400fa,0x00000054,0x00000055, + 0x00000056,0x000200f8,0x00000055,0x0004003d,0x00000008,0x00000057,0x00000014,0x000500c7, + 0x00000008,0x00000059,0x00000057,0x00000058,0x000500ab,0x00000039,0x0000005a,0x00000059, + 0x00000047,0x000200f9,0x00000056,0x000200f8,0x00000056,0x000700f5,0x00000039,0x0000005b, + 0x00000054,0x00000016,0x0000005a,0x00000055,0x0003003e,0x00000050,0x0000005b,0x0004003d, + 0x00000039,0x0000005c,0x00000050,0x000300f7,0x0000005e,0x00000000,0x000400fa,0x0000005c, + 0x0000005d,0x0000005e,0x000200f8,0x0000005d,0x000200fe,0x00000047,0x000200f8,0x0000005e, + 0x0004003d,0x00000008,0x00000060,0x00000014,0x000500c7,0x00000008,0x00000062,0x00000060, + 0x00000061,0x000500aa,0x00000039,0x00000063,0x00000062,0x00000047,0x000300f7,0x00000065, + 0x00000000,0x000400fa,0x00000063,0x00000064,0x00000065,0x000200f8,0x00000064,0x0004003d, + 0x00000008,0x00000066,0x00000014,0x000500c2,0x00000008,0x00000068,0x00000066,0x00000067, + 0x000500c7,0x00000008,0x0000006a,0x00000068,0x00000069,0x000200fe,0x0000006a,0x000200f8, + 0x00000065,0x0004003d,0x00000008,0x0000006d,0x00000014,0x000500c7,0x00000008,0x0000006f, + 0x0000006d,0x0000006e,0x000500ab,0x00000039,0x00000070,0x0000006f,0x00000047,0x000600a9, + 0x00000008,0x00000071,0x00000070,0x00000069,0x00000047,0x0003003e,0x0000006c,0x00000071, + 0x0004003d,0x00000008,0x00000073,0x00000014,0x000500c2,0x00000008,0x00000075,0x00000073, + 0x00000074,0x000500c7,0x00000008,0x00000077,0x00000075,0x00000076,0x0003003e,0x00000072, + 0x00000077,0x0004003d,0x00000008,0x00000079,0x00000014,0x000500c7,0x00000008,0x0000007a, + 0x00000079,0x00000058,0x0003003e,0x00000078,0x0000007a,0x0004003d,0x00000008,0x0000007b, + 0x00000072,0x000500aa,0x00000039,0x0000007c,0x0000007b,0x00000076,0x000300f7,0x0000007e, + 0x00000000,0x000400fa,0x0000007c,0x0000007d,0x00000081,0x000200f8,0x0000007d,0x0003003e, + 0x0000007f,0x00000080,0x000200f9,0x0000007e,0x000200f8,0x00000081,0x0004003d,0x00000008, + 0x00000082,0x00000072,0x000500b2,0x00000039,0x00000083,0x00000082,0x00000067,0x000300f7, + 0x00000085,0x00000000,0x000400fa,0x00000083,0x00000084,0x000000a4,0x000200f8,0x00000084, + 0x0004003d,0x00000008,0x00000087,0x00000072,0x000500aa,0x00000039,0x00000088,0x00000087, + 0x00000047,0x000300f7,0x0000008b,0x00000000,0x000400fa,0x00000088,0x0000008a,0x0000008d, + 0x000200f8,0x0000008a,0x0004003d,0x00000008,0x0000008c,0x00000078,0x0003003e,0x00000089, + 0x0000008c,0x000200f9,0x0000008b,0x000200f8,0x0000008d,0x0004003d,0x00000008,0x0000008f, + 0x00000078,0x00050080,0x00000008,0x00000090,0x0000008e,0x0000008f,0x0003003e,0x00000089, + 0x00000090,0x000200f9,0x0000008b,0x000200f8,0x0000008b,0x0004003d,0x00000008,0x00000091, + 0x00000089,0x0003003e,0x00000086,0x00000091,0x0004003d,0x00000008,0x00000093,0x00000072, + 0x000500aa,0x00000039,0x00000094,0x00000093,0x00000047,0x000300f7,0x00000097,0x00000000, + 0x000400fa,0x00000094,0x00000096,0x00000099,0x000200f8,0x00000096,0x0003003e,0x00000095, + 0x00000098,0x000200f9,0x00000097,0x000200f8,0x00000099,0x0004003d,0x00000008,0x0000009b, + 0x00000072,0x00050082,0x00000008,0x0000009c,0x0000009a,0x0000009b,0x0003003e,0x00000095, + 0x0000009c,0x000200f9,0x00000097,0x000200f8,0x00000097,0x0004003d,0x00000008,0x0000009d, + 0x00000095,0x0003003e,0x00000092,0x0000009d,0x0004003d,0x00000008,0x0000009f,0x00000086, + 0x0003003e,0x0000009e,0x0000009f,0x0004003d,0x00000008,0x000000a1,0x00000092,0x0003003e, + 0x000000a0,0x000000a1,0x00060039,0x00000008,0x000000a2,0x00000011,0x0000009e,0x000000a0, + 0x0007000c,0x00000008,0x000000a3,0x00000001,0x00000026,0x000000a2,0x00000067,0x0003003e, + 0x0000007f,0x000000a3,0x000200f9,0x00000085,0x000200f8,0x000000a4,0x0004003d,0x00000008, + 0x000000a6,0x00000072,0x00050082,0x00000008,0x000000a7,0x000000a6,0x00000067,0x0003003e, + 0x000000a5,0x000000a7,0x0004003d,0x00000008,0x000000ab,0x00000078,0x0003003e,0x000000aa, + 0x000000ab,0x0003003e,0x000000ac,0x000000a9,0x00060039,0x00000008,0x000000ad,0x00000011, + 0x000000aa,0x000000ac,0x0003003e,0x000000a8,0x000000ad,0x0004003d,0x00000008,0x000000ae, + 0x000000a8,0x000500aa,0x00000039,0x000000af,0x000000ae,0x00000067,0x000300f7,0x000000b1, + 0x00000000,0x000400fa,0x000000af,0x000000b0,0x000000b1,0x000200f8,0x000000b0,0x0003003e, + 0x000000a8,0x00000047,0x0004003d,0x00000008,0x000000b2,0x000000a5,0x00050080,0x00000008, + 0x000000b3,0x000000b2,0x0000002c,0x0003003e,0x000000a5,0x000000b3,0x000200f9,0x000000b1, + 0x000200f8,0x000000b1,0x0004003d,0x00000008,0x000000b4,0x000000a5,0x000500ac,0x00000039, + 0x000000b5,0x000000b4,0x00000098,0x000400a8,0x00000039,0x000000b6,0x000000b5,0x000300f7, + 0x000000b8,0x00000000,0x000400fa,0x000000b6,0x000000b7,0x000000b8,0x000200f8,0x000000b7, + 0x0004003d,0x00000008,0x000000b9,0x000000a5,0x000500aa,0x00000039,0x000000ba,0x000000b9, + 0x00000098,0x0004003d,0x00000008,0x000000bb,0x000000a8,0x000500ac,0x00000039,0x000000bd, + 0x000000bb,0x000000bc,0x000500a7,0x00000039,0x000000be,0x000000ba,0x000000bd,0x000200f9, + 0x000000b8,0x000200f8,0x000000b8,0x000700f5,0x00000039,0x000000bf,0x000000b5,0x000000b1, + 0x000000be,0x000000b7,0x000300f7,0x000000c2,0x00000000,0x000400fa,0x000000bf,0x000000c1, + 0x000000c3,0x000200f8,0x000000c1,0x0003003e,0x000000c0,0x00000080,0x000200f9,0x000000c2, + 0x000200f8,0x000000c3,0x0004003d,0x00000008,0x000000c4,0x000000a5,0x000500c4,0x00000008, + 0x000000c6,0x000000c4,0x000000c5,0x0004003d,0x00000008,0x000000c7,0x000000a8,0x000500c5, + 0x00000008,0x000000c8,0x000000c6,0x000000c7,0x0003003e,0x000000c0,0x000000c8,0x000200f9, + 0x000000c2,0x000200f8,0x000000c2,0x0004003d,0x00000008,0x000000c9,0x000000c0,0x0003003e, + 0x0000007f,0x000000c9,0x000200f9,0x00000085,0x000200f8,0x00000085,0x000200f9,0x0000007e, + 0x000200f8,0x0000007e,0x0004003d,0x00000008,0x000000ca,0x0000006c,0x0004003d,0x00000008, + 0x000000cb,0x0000007f,0x000500c5,0x00000008,0x000000cc,0x000000ca,0x000000cb,0x000200fe, + 0x000000cc,0x00010038,0x00050036,0x00000017,0x0000001b,0x00000000,0x00000019,0x00030037, + 0x00000018,0x0000001a,0x000200f8,0x0000001c,0x0004003b,0x00000018,0x000000cf,0x00000007, + 0x0004003b,0x00000018,0x000000d6,0x00000007,0x0004003b,0x00000018,0x000000de,0x00000007, + 0x0004003b,0x00000018,0x000000e4,0x00000007,0x0004003d,0x00000017,0x000000d0,0x0000001a, + 0x0008000c,0x00000017,0x000000d5,0x00000001,0x0000002b,0x000000d0,0x000000d2,0x000000d4, + 0x0003003e,0x000000cf,0x000000d5,0x0004003d,0x00000017,0x000000d9,0x000000cf,0x0006000c, + 0x00000017,0x000000da,0x00000001,0x00000004,0x000000d9,0x0008000c,0x00000017,0x000000dd, + 0x00000001,0x00000032,0x000000d8,0x000000da,0x000000dc,0x0003003e,0x000000d6,0x000000dd, + 0x0004003d,0x00000017,0x000000df,0x000000cf,0x0004003d,0x00000017,0x000000e0,0x000000d6, + 0x0008000c,0x00000017,0x000000e3,0x00000001,0x00000032,0x000000df,0x000000e0,0x000000e2, + 0x0003003e,0x000000de,0x000000e3,0x0004003d,0x00000017,0x000000e5,0x0000001a,0x0004003d, + 0x00000017,0x000000e6,0x000000de,0x00050085,0x00000017,0x000000e7,0x000000e5,0x000000e6, + 0x0003003e,0x000000e4,0x000000e7,0x0004003d,0x00000017,0x000000e8,0x000000e4,0x000200fe, + 0x000000e8,0x00010038,0x00050036,0x0000001d,0x00000020,0x00000000,0x0000001e,0x00030037, + 0x00000018,0x0000001f,0x000200f8,0x00000021,0x0004003b,0x00000007,0x000000eb,0x00000007, + 0x0004003b,0x0000000d,0x000000ef,0x00000007,0x0004003b,0x00000007,0x000000f1,0x00000007, + 0x0004003b,0x0000000d,0x000000f5,0x00000007,0x00050041,0x00000007,0x000000ec,0x0000001f, + 0x00000047,0x0004003d,0x00000006,0x000000ed,0x000000ec,0x0003003e,0x000000eb,0x000000ed, + 0x00050039,0x00000008,0x000000ee,0x0000000b,0x000000eb,0x0003003e,0x000000ef,0x000000ee, + 0x00050039,0x00000008,0x000000f0,0x00000015,0x000000ef,0x00050041,0x00000007,0x000000f2, + 0x0000001f,0x0000002c,0x0004003d,0x00000006,0x000000f3,0x000000f2,0x0003003e,0x000000f1, + 0x000000f3,0x00050039,0x00000008,0x000000f4,0x0000000b,0x000000f1,0x0003003e,0x000000f5, + 0x000000f4,0x00050039,0x00000008,0x000000f6,0x00000015,0x000000f5,0x000500c4,0x00000008, + 0x000000f7,0x000000f6,0x00000067,0x000500c5,0x00000008,0x000000f8,0x000000f0,0x000000f7, + 0x00040071,0x0000001d,0x000000f9,0x000000f8,0x000200fe,0x000000f9,0x00010038, +}; +inline constexpr uint32_t k_common__window_normalize[] = { + 0x07230203,0x00010600,0x0008000b,0x00000379,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x00001151,0x00020011,0x00001160,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x000a000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000280,0x0000028d,0x000002bc, + 0x00000326,0x0000034e,0x00060010,0x00000004,0x00000011,0x00000100,0x00000001,0x00000001, + 0x00030003,0x00000002,0x000001cc,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x36315f72, + 0x5f746962,0x726f7473,0x00656761,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x62385f72, + 0x735f7469,0x61726f74,0x00006567,0x000b0004,0x455f4c47,0x735f5458,0x65646168,0x78655f72, + 0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004,0x475f4c47, + 0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576, + 0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669, + 0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000a,0x6e756f72,0x36314664, + 0x3b316628,0x00000000,0x00040005,0x00000009,0x756c6176,0x00000065,0x00060005,0x00000011, + 0x42363166,0x28737469,0x31363166,0x0000003b,0x00040005,0x00000010,0x756c6176,0x00000065, + 0x00060005,0x00000016,0x46363166,0x426d6f72,0x28737469,0x003b3175,0x00040005,0x00000015, + 0x73746962,0x00000000,0x00060005,0x0000001b,0x66696873,0x656e5274,0x3b317528,0x003b3175, + 0x00040005,0x00000019,0x756c6176,0x00000065,0x00040005,0x0000001a,0x66696873,0x00000074, + 0x00080005,0x0000001f,0x336d3465,0x65646f43,0x6d6f7246,0x42363146,0x28737469,0x003b3175, + 0x00050005,0x0000001e,0x666c6168,0x73746942,0x00000000,0x00080005,0x00000023,0x666c6168, + 0x7064694d,0x746e696f,0x766f6241,0x31662865,0x003b3136,0x00030005,0x00000022,0x00000068, + 0x00080005,0x00000026,0x666c6168,0x7064694d,0x746e696f,0x6f6c6542,0x31662877,0x003b3136, + 0x00030005,0x00000025,0x00000068,0x00060005,0x0000002a,0x666c6168,0x766f6241,0x31662865, + 0x003b3136,0x00030005,0x00000029,0x00000068,0x00060005,0x0000002d,0x666c6168,0x6f6c6542, + 0x31662877,0x003b3136,0x00030005,0x0000002c,0x00000068,0x00090005,0x00000033,0x61757173, + 0x69546572,0x4273656d,0x776f6c65,0x28656e4f,0x663b3166,0x00003b31,0x00030005,0x00000031, + 0x0000006d,0x00030005,0x00000032,0x00000078,0x00080005,0x00000036,0x65766e69,0x53657372, + 0x48747271,0x28666c61,0x31363166,0x0000003b,0x00030005,0x00000035,0x00000078,0x00080005, + 0x0000003c,0x48616d66,0x28666c61,0x31363166,0x3631663b,0x31663b31,0x003b3136,0x00030005, + 0x00000039,0x00000061,0x00030005,0x0000003a,0x00000062,0x00030005,0x0000003b,0x00000063, + 0x00070005,0x00000043,0x65657274,0x316d7553,0x31662836,0x315b3136,0x003b5d36,0x00030005, + 0x00000042,0x00000072,0x00040005,0x00000045,0x73746962,0x00000000,0x00040005,0x00000048, + 0x6e676973,0x00000000,0x00050005,0x0000004c,0x6e67616d,0x64757469,0x00000065,0x00040005, + 0x00000065,0x6c616373,0x00006465,0x00030005,0x00000076,0x0062736c,0x00040005,0x0000007c, + 0x6e756f72,0x00646564,0x00050005,0x00000097,0x746f7571,0x746e6569,0x00000000,0x00060005, + 0x0000009b,0x616d6572,0x65646e69,0x73614d72,0x0000006b,0x00050005,0x0000009f,0x616d6572, + 0x65646e69,0x00000072,0x00040005,0x000000a3,0x666c6168,0x00796177,0x00040005,0x000000be, + 0x614e7369,0x0000006e,0x00050005,0x000000da,0x6167656e,0x65766974,0x00000000,0x00050005, + 0x000000e0,0x6f707865,0x746e656e,0x00000000,0x00050005,0x000000e6,0x746e616d,0x61737369, + 0x00000000,0x00040005,0x000000ed,0x65646f63,0x00000000,0x00050005,0x000000f4,0x6e676973, + 0x63696669,0x00646e61,0x00040005,0x00000100,0x66696873,0x00000074,0x00040005,0x0000010b, + 0x61726170,0x0000006d,0x00040005,0x0000010d,0x61726170,0x0000006d,0x00050005,0x00000112, + 0x78453465,0x656e6f70,0x0000746e,0x00050005,0x00000115,0x614d3465,0x7369746e,0x00006173, + 0x00040005,0x00000117,0x61726170,0x0000006d,0x00040005,0x00000119,0x61726170,0x0000006d, + 0x00040005,0x0000013c,0x73746962,0x00000000,0x00040005,0x0000013d,0x61726170,0x0000006d, + 0x00040005,0x0000014d,0x61726170,0x0000006d,0x00040005,0x00000157,0x61726170,0x0000006d, + 0x00040005,0x0000015b,0x61726170,0x0000006d,0x00040005,0x00000162,0x61726170,0x0000006d, + 0x00040005,0x00000166,0x61726170,0x0000006d,0x00040005,0x0000016a,0x61726170,0x0000006d, + 0x00040005,0x0000016e,0x61726170,0x0000006d,0x00030005,0x00000172,0x0000326d,0x00030005, + 0x00000176,0x00006968,0x00030005,0x0000017c,0x00006f6c,0x00030005,0x00000180,0x00000064, + 0x00030005,0x00000186,0x00000073,0x00030005,0x00000191,0x00006678,0x00030005,0x000001a3, + 0x00000068,0x00040005,0x000001a6,0x61726170,0x0000006d,0x00030005,0x000001ab,0x00000069, + 0x00040005,0x000001b5,0x61726170,0x0000006d,0x00040005,0x000001b8,0x61726170,0x0000006d, + 0x00040005,0x000001b9,0x61726170,0x0000006d,0x00040005,0x000001be,0x61726170,0x0000006d, + 0x00040005,0x000001c1,0x61726170,0x0000006d,0x00040005,0x000001c4,0x61726170,0x0000006d, + 0x00040005,0x000001c5,0x61726170,0x0000006d,0x00040005,0x000001cb,0x61726170,0x0000006d, + 0x00030005,0x000001d4,0x00000070,0x00030005,0x000001da,0x00000074,0x00030005,0x000001df, + 0x00007662,0x00030005,0x000001e3,0x00007661,0x00030005,0x000001e7,0x00000065,0x00050005, + 0x000001fa,0x6f707865,0x746e656e,0x00000000,0x00030005,0x00000207,0x00706c75,0x00040005, + 0x0000020f,0x70657473,0x00000073,0x00040005,0x0000022c,0x61726170,0x0000006d,0x00040005, + 0x00000230,0x61726170,0x0000006d,0x00030005,0x00000236,0x00000063,0x00030005,0x00000240, + 0x00003873,0x00030005,0x0000024d,0x00000063,0x00030005,0x00000258,0x00003473,0x00030005, + 0x00000268,0x00003273,0x00030005,0x0000027d,0x00006469,0x00080005,0x00000280,0x475f6c67, + 0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00040005,0x0000028b,0x68737550, + 0x00000000,0x00050006,0x0000028b,0x00000000,0x656b6f74,0x0000736e,0x00050006,0x0000028b, + 0x00000001,0x64616568,0x00000073,0x00060006,0x0000028b,0x00000002,0x6e616863,0x736c656e, + 0x00000000,0x00070006,0x0000028b,0x00000003,0x6c616373,0x726f5765,0x66664f64,0x00746573, + 0x00030005,0x0000028d,0x00006370,0x00040005,0x00000298,0x656b6f74,0x0000006e,0x00040005, + 0x0000029d,0x64616568,0x00000000,0x00040005,0x000002a2,0x65736162,0x00000000,0x00030005, + 0x000002ac,0x00000063,0x00030005,0x000002b7,0x00000071,0x00030005,0x000002ba,0x00766b51, + 0x00040006,0x000002ba,0x00000000,0x00766b71,0x00030005,0x000002bc,0x00000000,0x00030005, + 0x000002c4,0x0000006b,0x00030005,0x000002cf,0x00000063,0x00050005,0x000002d7,0x68676968, + 0x61757153,0x00006572,0x00030005,0x000002e1,0x00000072,0x00040005,0x000002e5,0x61726170, + 0x0000006d,0x00040005,0x000002e8,0x61726170,0x0000006d,0x00040005,0x000002eb,0x61726170, + 0x0000006d,0x00040005,0x000002f1,0x6d755371,0x00000000,0x00040005,0x000002f2,0x61726170, + 0x0000006d,0x00030005,0x000002f5,0x00000063,0x00050005,0x000002fd,0x68676968,0x61757153, + 0x00006572,0x00040005,0x0000030a,0x61726170,0x0000006d,0x00040005,0x0000030d,0x61726170, + 0x0000006d,0x00040005,0x00000310,0x61726170,0x0000006d,0x00040005,0x00000316,0x6d75536b, + 0x00000000,0x00040005,0x00000317,0x61726170,0x0000006d,0x00040005,0x0000031a,0x726f4e71, + 0x0000006d,0x00040005,0x0000031b,0x61726170,0x0000006d,0x00040005,0x0000031e,0x726f4e6b, + 0x0000006d,0x00040005,0x0000031f,0x61726170,0x0000006d,0x00040005,0x00000322,0x6c616373, + 0x00000065,0x00030005,0x00000324,0x00787541,0x00050006,0x00000324,0x00000000,0x33787561, + 0x00000032,0x00030005,0x00000326,0x00000000,0x00040005,0x0000032f,0x61726170,0x0000006d, + 0x00030005,0x00000332,0x00000063,0x00030005,0x0000033a,0x0000716e,0x00030005,0x00000340, + 0x0073716e,0x00030005,0x00000344,0x00006b6e,0x00050005,0x0000034c,0x6d726f4e,0x7a696c61, + 0x00006465,0x00060006,0x0000034c,0x00000000,0x6d726f6e,0x7a696c61,0x00006465,0x00030005, + 0x0000034e,0x00000000,0x00040005,0x00000352,0x61726170,0x0000006d,0x00040005,0x00000355, + 0x61726170,0x0000006d,0x00040005,0x0000035e,0x61726170,0x0000006d,0x00040005,0x00000361, + 0x61726170,0x0000006d,0x00040005,0x0000036e,0x61726170,0x0000006d,0x00040005,0x00000372, + 0x61726170,0x0000006d,0x00030047,0x00000175,0x0000002a,0x00030047,0x0000017f,0x0000002a, + 0x00030047,0x00000183,0x0000002a,0x00030047,0x00000185,0x0000002a,0x00030047,0x0000018a, + 0x0000002a,0x00030047,0x0000018b,0x0000002a,0x00030047,0x000001d9,0x0000002a,0x00030047, + 0x000001de,0x0000002a,0x00030047,0x000001e2,0x0000002a,0x00030047,0x000001e6,0x0000002a, + 0x00030047,0x000001ea,0x0000002a,0x00030047,0x000001ee,0x0000002a,0x00030047,0x000001ef, + 0x0000002a,0x00030047,0x00000249,0x0000002a,0x00030047,0x00000261,0x0000002a,0x00030047, + 0x0000026d,0x0000002a,0x00030047,0x00000274,0x0000002a,0x00040047,0x00000280,0x0000000b, + 0x0000001c,0x00030047,0x0000028b,0x00000002,0x00050048,0x0000028b,0x00000000,0x00000023, + 0x00000000,0x00050048,0x0000028b,0x00000001,0x00000023,0x00000004,0x00050048,0x0000028b, + 0x00000002,0x00000023,0x00000008,0x00050048,0x0000028b,0x00000003,0x00000023,0x0000000c, + 0x00040047,0x000002b9,0x00000006,0x00000002,0x00030047,0x000002ba,0x00000002,0x00040048, + 0x000002ba,0x00000000,0x00000018,0x00050048,0x000002ba,0x00000000,0x00000023,0x00000000, + 0x00030047,0x000002bc,0x00000018,0x00040047,0x000002bc,0x00000021,0x00000001,0x00040047, + 0x000002bc,0x00000022,0x00000000,0x00030047,0x000002e0,0x0000002a,0x00030047,0x00000306, + 0x0000002a,0x00040047,0x00000323,0x00000006,0x00000004,0x00030047,0x00000324,0x00000002, + 0x00040048,0x00000324,0x00000000,0x00000018,0x00050048,0x00000324,0x00000000,0x00000023, + 0x00000000,0x00030047,0x00000326,0x00000018,0x00040047,0x00000326,0x00000021,0x00000004, + 0x00040047,0x00000326,0x00000022,0x00000000,0x00030047,0x0000033f,0x0000002a,0x00030047, + 0x00000343,0x0000002a,0x00030047,0x00000349,0x0000002a,0x00040047,0x0000034b,0x00000006, + 0x00000001,0x00030047,0x0000034c,0x00000002,0x00040048,0x0000034c,0x00000000,0x00000019, + 0x00050048,0x0000034c,0x00000000,0x00000023,0x00000000,0x00030047,0x0000034e,0x00000019, + 0x00040047,0x0000034e,0x00000021,0x00000005,0x00040047,0x0000034e,0x00000022,0x00000000, + 0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020, + 0x00040020,0x00000007,0x00000007,0x00000006,0x00040021,0x00000008,0x00000006,0x00000007, + 0x00030016,0x0000000c,0x00000010,0x00040020,0x0000000d,0x00000007,0x0000000c,0x00040015, + 0x0000000e,0x00000020,0x00000000,0x00040021,0x0000000f,0x0000000e,0x0000000d,0x00040020, + 0x00000013,0x00000007,0x0000000e,0x00040021,0x00000014,0x0000000c,0x00000013,0x00050021, + 0x00000018,0x0000000e,0x00000013,0x00000013,0x00040021,0x0000001d,0x0000000e,0x00000013, + 0x00040021,0x00000021,0x00000006,0x0000000d,0x00040021,0x00000028,0x0000000c,0x0000000d, + 0x00020014,0x0000002f,0x00050021,0x00000030,0x0000002f,0x00000007,0x00000007,0x00060021, + 0x00000038,0x0000000c,0x0000000d,0x0000000d,0x0000000d,0x0004002b,0x0000000e,0x0000003e, + 0x00000010,0x0004001c,0x0000003f,0x0000000c,0x0000003e,0x00040020,0x00000040,0x00000007, + 0x0000003f,0x00040021,0x00000041,0x0000000c,0x00000040,0x0004002b,0x0000000e,0x0000004a, + 0x80000000,0x0004002b,0x0000000e,0x0000004e,0x7fffffff,0x0004002b,0x0000000e,0x00000051, + 0x7f800000,0x0004002b,0x0000000e,0x00000058,0x477ff000,0x0004002b,0x0000000e,0x00000061, + 0x38800000,0x0004002b,0x00000006,0x00000068,0x4b800000,0x0004002b,0x00000006,0x0000006f, + 0x33800000,0x0004002b,0x0000000e,0x00000078,0x0000000d,0x0004002b,0x0000000e,0x0000007a, + 0x00000001,0x0004002b,0x0000000e,0x0000007e,0x00000fff,0x0004002b,0x0000000e,0x00000082, + 0xffffe000,0x00040015,0x0000008b,0x00000010,0x00000000,0x0004002b,0x0000000e,0x00000091, + 0x0000ffff,0x0004002b,0x0000000e,0x000000b5,0x00000000,0x00040020,0x000000bd,0x00000007, + 0x0000002f,0x0004002b,0x0000000e,0x000000c0,0x00007c00,0x0004002b,0x0000000e,0x000000c6, + 0x000003ff,0x0004002b,0x0000000e,0x000000cf,0x00007fff,0x0004002b,0x0000000e,0x000000d5, + 0x00000008,0x0004002b,0x0000000e,0x000000d7,0x00000080,0x0004002b,0x0000000e,0x000000dc, + 0x00008000,0x0004002b,0x0000000e,0x000000e2,0x0000000a,0x0004002b,0x0000000e,0x000000e4, + 0x0000001f,0x0004002b,0x0000000e,0x000000ee,0x0000007e,0x0004002b,0x0000000e,0x000000fc, + 0x00000400,0x0004002b,0x0000000e,0x00000106,0x0000000f,0x0004002b,0x0000000e,0x00000116, + 0x00000007,0x0004002b,0x0000000e,0x00000129,0x00000006,0x0004002b,0x0000000e,0x00000132, + 0x00000003,0x0004002b,0x0000000e,0x00000141,0x00007bff,0x0004002b,0x00000006,0x00000146, + 0x477ff000,0x0004002b,0x00000006,0x00000148,0x3f000000,0x0004002b,0x0000000e,0x00000179, + 0xfffff000,0x0004002b,0x00000006,0x00000184,0x3f800000,0x0004002b,0x00000006,0x0000018d, + 0x00000000,0x00040015,0x000001a9,0x00000020,0x00000001,0x00040020,0x000001aa,0x00000007, + 0x000001a9,0x0004002b,0x000001a9,0x000001ac,0x00000000,0x0004002b,0x000001a9,0x000001b3, + 0x00000002,0x0004002b,0x000001a9,0x000001cf,0x00000001,0x0004002b,0x0000000e,0x000001fe, + 0x00000017,0x0004002b,0x0000000e,0x00000200,0x000000ff,0x0004002b,0x000001a9,0x00000203, + 0x0000007f,0x0004002b,0x000001a9,0x00000205,0xfffffff2,0x0004002b,0x000001a9,0x00000209, + 0x0000000a,0x0004001c,0x0000023e,0x0000000c,0x000000d5,0x00040020,0x0000023f,0x00000007, + 0x0000023e,0x0004002b,0x0000000e,0x00000254,0x00000004,0x0004001c,0x00000256,0x0000000c, + 0x00000254,0x00040020,0x00000257,0x00000007,0x00000256,0x0004002b,0x0000000e,0x00000265, + 0x00000002,0x0004001c,0x00000266,0x0000000c,0x00000265,0x00040020,0x00000267,0x00000007, + 0x00000266,0x0004002b,0x000001a9,0x00000271,0x00000003,0x00040017,0x0000027e,0x0000000e, + 0x00000003,0x00040020,0x0000027f,0x00000001,0x0000027e,0x0004003b,0x0000027f,0x00000280, + 0x00000001,0x00040020,0x00000281,0x00000001,0x0000000e,0x0004002b,0x0000000e,0x00000287, + 0x00000100,0x0006001e,0x0000028b,0x0000000e,0x0000000e,0x0000000e,0x0000000e,0x00040020, + 0x0000028c,0x00000009,0x0000028b,0x0004003b,0x0000028c,0x0000028d,0x00000009,0x00040020, + 0x0000028e,0x00000009,0x0000000e,0x0004002b,0x0000000e,0x000002a9,0x00000060,0x0004002b, + 0x0000000e,0x000002b3,0x00000020,0x0004001c,0x000002b5,0x0000000c,0x000002b3,0x00040020, + 0x000002b6,0x00000007,0x000002b5,0x0003001d,0x000002b9,0x0000000c,0x0003001e,0x000002ba, + 0x000002b9,0x00040020,0x000002bb,0x0000000c,0x000002ba,0x0004003b,0x000002bb,0x000002bc, + 0x0000000c,0x00040020,0x000002c0,0x0000000c,0x0000000c,0x0003001d,0x00000323,0x0000000e, + 0x0003001e,0x00000324,0x00000323,0x00040020,0x00000325,0x0000000c,0x00000324,0x0004003b, + 0x00000325,0x00000326,0x0000000c,0x00040020,0x0000032b,0x0000000c,0x0000000e,0x00040015, + 0x0000034a,0x00000008,0x00000000,0x0003001d,0x0000034b,0x0000034a,0x0003001e,0x0000034c, + 0x0000034b,0x00040020,0x0000034d,0x0000000c,0x0000034c,0x0004003b,0x0000034d,0x0000034e, + 0x0000000c,0x00040020,0x00000358,0x0000000c,0x0000034a,0x0004002b,0x0000000e,0x00000366, + 0x00000040,0x0006002c,0x0000027e,0x00000378,0x00000287,0x0000007a,0x0000007a,0x00050036, + 0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000013, + 0x0000027d,0x00000007,0x0004003b,0x00000013,0x00000298,0x00000007,0x0004003b,0x00000013, + 0x0000029d,0x00000007,0x0004003b,0x00000013,0x000002a2,0x00000007,0x0004003b,0x00000013, + 0x000002ac,0x00000007,0x0004003b,0x000002b6,0x000002b7,0x00000007,0x0004003b,0x000002b6, + 0x000002c4,0x00000007,0x0004003b,0x00000013,0x000002cf,0x00000007,0x0004003b,0x0000000d, + 0x000002d7,0x00000007,0x0004003b,0x00000040,0x000002e1,0x00000007,0x0004003b,0x0000000d, + 0x000002e5,0x00000007,0x0004003b,0x0000000d,0x000002e8,0x00000007,0x0004003b,0x0000000d, + 0x000002eb,0x00000007,0x0004003b,0x0000000d,0x000002f1,0x00000007,0x0004003b,0x00000040, + 0x000002f2,0x00000007,0x0004003b,0x00000013,0x000002f5,0x00000007,0x0004003b,0x0000000d, + 0x000002fd,0x00000007,0x0004003b,0x0000000d,0x0000030a,0x00000007,0x0004003b,0x0000000d, + 0x0000030d,0x00000007,0x0004003b,0x0000000d,0x00000310,0x00000007,0x0004003b,0x0000000d, + 0x00000316,0x00000007,0x0004003b,0x00000040,0x00000317,0x00000007,0x0004003b,0x0000000d, + 0x0000031a,0x00000007,0x0004003b,0x0000000d,0x0000031b,0x00000007,0x0004003b,0x0000000d, + 0x0000031e,0x00000007,0x0004003b,0x0000000d,0x0000031f,0x00000007,0x0004003b,0x0000000d, + 0x00000322,0x00000007,0x0004003b,0x00000007,0x0000032f,0x00000007,0x0004003b,0x00000013, + 0x00000332,0x00000007,0x0004003b,0x0000000d,0x0000033a,0x00000007,0x0004003b,0x0000000d, + 0x00000340,0x00000007,0x0004003b,0x0000000d,0x00000344,0x00000007,0x0004003b,0x0000000d, + 0x00000352,0x00000007,0x0004003b,0x00000013,0x00000355,0x00000007,0x0004003b,0x0000000d, + 0x0000035e,0x00000007,0x0004003b,0x00000013,0x00000361,0x00000007,0x0004003b,0x0000000d, + 0x0000036e,0x00000007,0x0004003b,0x00000013,0x00000372,0x00000007,0x00050041,0x00000281, + 0x00000282,0x00000280,0x000000b5,0x0004003d,0x0000000e,0x00000283,0x00000282,0x00050041, + 0x00000281,0x00000284,0x00000280,0x0000007a,0x0004003d,0x0000000e,0x00000285,0x00000284, + 0x00050084,0x0000000e,0x00000286,0x00000285,0x00000091,0x00050084,0x0000000e,0x00000288, + 0x00000286,0x00000287,0x00050080,0x0000000e,0x00000289,0x00000283,0x00000288,0x0003003e, + 0x0000027d,0x00000289,0x0004003d,0x0000000e,0x0000028a,0x0000027d,0x00050041,0x0000028e, + 0x0000028f,0x0000028d,0x000001ac,0x0004003d,0x0000000e,0x00000290,0x0000028f,0x00050041, + 0x0000028e,0x00000291,0x0000028d,0x000001cf,0x0004003d,0x0000000e,0x00000292,0x00000291, + 0x00050084,0x0000000e,0x00000293,0x00000290,0x00000292,0x000500ae,0x0000002f,0x00000294, + 0x0000028a,0x00000293,0x000300f7,0x00000296,0x00000000,0x000400fa,0x00000294,0x00000295, + 0x00000296,0x000200f8,0x00000295,0x000100fd,0x000200f8,0x00000296,0x0004003d,0x0000000e, + 0x00000299,0x0000027d,0x00050041,0x0000028e,0x0000029a,0x0000028d,0x000001cf,0x0004003d, + 0x0000000e,0x0000029b,0x0000029a,0x00050086,0x0000000e,0x0000029c,0x00000299,0x0000029b, + 0x0003003e,0x00000298,0x0000029c,0x0004003d,0x0000000e,0x0000029e,0x0000027d,0x00050041, + 0x0000028e,0x0000029f,0x0000028d,0x000001cf,0x0004003d,0x0000000e,0x000002a0,0x0000029f, + 0x00050089,0x0000000e,0x000002a1,0x0000029e,0x000002a0,0x0003003e,0x0000029d,0x000002a1, + 0x0004003d,0x0000000e,0x000002a3,0x00000298,0x00050041,0x0000028e,0x000002a4,0x0000028d, + 0x000001b3,0x0004003d,0x0000000e,0x000002a5,0x000002a4,0x00050084,0x0000000e,0x000002a6, + 0x000002a3,0x000002a5,0x00050084,0x0000000e,0x000002a7,0x000002a6,0x00000132,0x0004003d, + 0x0000000e,0x000002a8,0x0000029d,0x00050084,0x0000000e,0x000002aa,0x000002a8,0x000002a9, + 0x00050080,0x0000000e,0x000002ab,0x000002a7,0x000002aa,0x0003003e,0x000002a2,0x000002ab, + 0x0003003e,0x000002ac,0x000000b5,0x000200f9,0x000002ad,0x000200f8,0x000002ad,0x000400f6, + 0x000002af,0x000002b0,0x00000000,0x000200f9,0x000002b1,0x000200f8,0x000002b1,0x0004003d, + 0x0000000e,0x000002b2,0x000002ac,0x000500b0,0x0000002f,0x000002b4,0x000002b2,0x000002b3, + 0x000400fa,0x000002b4,0x000002ae,0x000002af,0x000200f8,0x000002ae,0x0004003d,0x0000000e, + 0x000002b8,0x000002ac,0x0004003d,0x0000000e,0x000002bd,0x000002a2,0x0004003d,0x0000000e, + 0x000002be,0x000002ac,0x00050080,0x0000000e,0x000002bf,0x000002bd,0x000002be,0x00060041, + 0x000002c0,0x000002c1,0x000002bc,0x000001ac,0x000002bf,0x0004003d,0x0000000c,0x000002c2, + 0x000002c1,0x00050041,0x0000000d,0x000002c3,0x000002b7,0x000002b8,0x0003003e,0x000002c3, + 0x000002c2,0x0004003d,0x0000000e,0x000002c5,0x000002ac,0x0004003d,0x0000000e,0x000002c6, + 0x000002a2,0x00050080,0x0000000e,0x000002c7,0x000002c6,0x000002b3,0x0004003d,0x0000000e, + 0x000002c8,0x000002ac,0x00050080,0x0000000e,0x000002c9,0x000002c7,0x000002c8,0x00060041, + 0x000002c0,0x000002ca,0x000002bc,0x000001ac,0x000002c9,0x0004003d,0x0000000c,0x000002cb, + 0x000002ca,0x00050041,0x0000000d,0x000002cc,0x000002c4,0x000002c5,0x0003003e,0x000002cc, + 0x000002cb,0x000200f9,0x000002b0,0x000200f8,0x000002b0,0x0004003d,0x0000000e,0x000002cd, + 0x000002ac,0x00050080,0x0000000e,0x000002ce,0x000002cd,0x000001cf,0x0003003e,0x000002ac, + 0x000002ce,0x000200f9,0x000002ad,0x000200f8,0x000002af,0x0003003e,0x000002cf,0x000000b5, + 0x000200f9,0x000002d0,0x000200f8,0x000002d0,0x000400f6,0x000002d2,0x000002d3,0x00000000, + 0x000200f9,0x000002d4,0x000200f8,0x000002d4,0x0004003d,0x0000000e,0x000002d5,0x000002cf, + 0x000500b0,0x0000002f,0x000002d6,0x000002d5,0x0000003e,0x000400fa,0x000002d6,0x000002d1, + 0x000002d2,0x000200f8,0x000002d1,0x0004003d,0x0000000e,0x000002d8,0x000002cf,0x00050080, + 0x0000000e,0x000002d9,0x000002d8,0x0000003e,0x00050041,0x0000000d,0x000002da,0x000002b7, + 0x000002d9,0x0004003d,0x0000000c,0x000002db,0x000002da,0x0004003d,0x0000000e,0x000002dc, + 0x000002cf,0x00050080,0x0000000e,0x000002dd,0x000002dc,0x0000003e,0x00050041,0x0000000d, + 0x000002de,0x000002b7,0x000002dd,0x0004003d,0x0000000c,0x000002df,0x000002de,0x00050085, + 0x0000000c,0x000002e0,0x000002db,0x000002df,0x0003003e,0x000002d7,0x000002e0,0x0004003d, + 0x0000000e,0x000002e2,0x000002cf,0x0004003d,0x0000000e,0x000002e3,0x000002cf,0x0004003d, + 0x0000000e,0x000002e4,0x000002cf,0x00050041,0x0000000d,0x000002e6,0x000002b7,0x000002e3, + 0x0004003d,0x0000000c,0x000002e7,0x000002e6,0x0003003e,0x000002e5,0x000002e7,0x00050041, + 0x0000000d,0x000002e9,0x000002b7,0x000002e4,0x0004003d,0x0000000c,0x000002ea,0x000002e9, + 0x0003003e,0x000002e8,0x000002ea,0x0004003d,0x0000000c,0x000002ec,0x000002d7,0x0003003e, + 0x000002eb,0x000002ec,0x00070039,0x0000000c,0x000002ed,0x0000003c,0x000002e5,0x000002e8, + 0x000002eb,0x00050041,0x0000000d,0x000002ee,0x000002e1,0x000002e2,0x0003003e,0x000002ee, + 0x000002ed,0x000200f9,0x000002d3,0x000200f8,0x000002d3,0x0004003d,0x0000000e,0x000002ef, + 0x000002cf,0x00050080,0x0000000e,0x000002f0,0x000002ef,0x000001cf,0x0003003e,0x000002cf, + 0x000002f0,0x000200f9,0x000002d0,0x000200f8,0x000002d2,0x0004003d,0x0000003f,0x000002f3, + 0x000002e1,0x0003003e,0x000002f2,0x000002f3,0x00050039,0x0000000c,0x000002f4,0x00000043, + 0x000002f2,0x0003003e,0x000002f1,0x000002f4,0x0003003e,0x000002f5,0x000000b5,0x000200f9, + 0x000002f6,0x000200f8,0x000002f6,0x000400f6,0x000002f8,0x000002f9,0x00000000,0x000200f9, + 0x000002fa,0x000200f8,0x000002fa,0x0004003d,0x0000000e,0x000002fb,0x000002f5,0x000500b0, + 0x0000002f,0x000002fc,0x000002fb,0x0000003e,0x000400fa,0x000002fc,0x000002f7,0x000002f8, + 0x000200f8,0x000002f7,0x0004003d,0x0000000e,0x000002fe,0x000002f5,0x00050080,0x0000000e, + 0x000002ff,0x000002fe,0x0000003e,0x00050041,0x0000000d,0x00000300,0x000002c4,0x000002ff, + 0x0004003d,0x0000000c,0x00000301,0x00000300,0x0004003d,0x0000000e,0x00000302,0x000002f5, + 0x00050080,0x0000000e,0x00000303,0x00000302,0x0000003e,0x00050041,0x0000000d,0x00000304, + 0x000002c4,0x00000303,0x0004003d,0x0000000c,0x00000305,0x00000304,0x00050085,0x0000000c, + 0x00000306,0x00000301,0x00000305,0x0003003e,0x000002fd,0x00000306,0x0004003d,0x0000000e, + 0x00000307,0x000002f5,0x0004003d,0x0000000e,0x00000308,0x000002f5,0x0004003d,0x0000000e, + 0x00000309,0x000002f5,0x00050041,0x0000000d,0x0000030b,0x000002c4,0x00000308,0x0004003d, + 0x0000000c,0x0000030c,0x0000030b,0x0003003e,0x0000030a,0x0000030c,0x00050041,0x0000000d, + 0x0000030e,0x000002c4,0x00000309,0x0004003d,0x0000000c,0x0000030f,0x0000030e,0x0003003e, + 0x0000030d,0x0000030f,0x0004003d,0x0000000c,0x00000311,0x000002fd,0x0003003e,0x00000310, + 0x00000311,0x00070039,0x0000000c,0x00000312,0x0000003c,0x0000030a,0x0000030d,0x00000310, + 0x00050041,0x0000000d,0x00000313,0x000002e1,0x00000307,0x0003003e,0x00000313,0x00000312, + 0x000200f9,0x000002f9,0x000200f8,0x000002f9,0x0004003d,0x0000000e,0x00000314,0x000002f5, + 0x00050080,0x0000000e,0x00000315,0x00000314,0x000001cf,0x0003003e,0x000002f5,0x00000315, + 0x000200f9,0x000002f6,0x000200f8,0x000002f8,0x0004003d,0x0000003f,0x00000318,0x000002e1, + 0x0003003e,0x00000317,0x00000318,0x00050039,0x0000000c,0x00000319,0x00000043,0x00000317, + 0x0003003e,0x00000316,0x00000319,0x0004003d,0x0000000c,0x0000031c,0x000002f1,0x0003003e, + 0x0000031b,0x0000031c,0x00050039,0x0000000c,0x0000031d,0x00000036,0x0000031b,0x0003003e, + 0x0000031a,0x0000031d,0x0004003d,0x0000000c,0x00000320,0x00000316,0x0003003e,0x0000031f, + 0x00000320,0x00050039,0x0000000c,0x00000321,0x00000036,0x0000031f,0x0003003e,0x0000031e, + 0x00000321,0x00050041,0x0000028e,0x00000327,0x0000028d,0x00000271,0x0004003d,0x0000000e, + 0x00000328,0x00000327,0x0004003d,0x0000000e,0x00000329,0x0000029d,0x00050080,0x0000000e, + 0x0000032a,0x00000328,0x00000329,0x00060041,0x0000032b,0x0000032c,0x00000326,0x000001ac, + 0x0000032a,0x0004003d,0x0000000e,0x0000032d,0x0000032c,0x0004007c,0x00000006,0x0000032e, + 0x0000032d,0x0003003e,0x0000032f,0x0000032e,0x00050039,0x00000006,0x00000330,0x0000000a, + 0x0000032f,0x00040073,0x0000000c,0x00000331,0x00000330,0x0003003e,0x00000322,0x00000331, + 0x0003003e,0x00000332,0x000000b5,0x000200f9,0x00000333,0x000200f8,0x00000333,0x000400f6, + 0x00000335,0x00000336,0x00000000,0x000200f9,0x00000337,0x000200f8,0x00000337,0x0004003d, + 0x0000000e,0x00000338,0x00000332,0x000500b0,0x0000002f,0x00000339,0x00000338,0x000002b3, + 0x000400fa,0x00000339,0x00000334,0x00000335,0x000200f8,0x00000334,0x0004003d,0x0000000e, + 0x0000033b,0x00000332,0x00050041,0x0000000d,0x0000033c,0x000002b7,0x0000033b,0x0004003d, + 0x0000000c,0x0000033d,0x0000033c,0x0004003d,0x0000000c,0x0000033e,0x0000031a,0x00050085, + 0x0000000c,0x0000033f,0x0000033d,0x0000033e,0x0003003e,0x0000033a,0x0000033f,0x0004003d, + 0x0000000c,0x00000341,0x0000033a,0x0004003d,0x0000000c,0x00000342,0x00000322,0x00050085, + 0x0000000c,0x00000343,0x00000341,0x00000342,0x0003003e,0x00000340,0x00000343,0x0004003d, + 0x0000000e,0x00000345,0x00000332,0x00050041,0x0000000d,0x00000346,0x000002c4,0x00000345, + 0x0004003d,0x0000000c,0x00000347,0x00000346,0x0004003d,0x0000000c,0x00000348,0x0000031e, + 0x00050085,0x0000000c,0x00000349,0x00000347,0x00000348,0x0003003e,0x00000344,0x00000349, + 0x0004003d,0x0000000e,0x0000034f,0x000002a2,0x0004003d,0x0000000e,0x00000350,0x00000332, + 0x00050080,0x0000000e,0x00000351,0x0000034f,0x00000350,0x0004003d,0x0000000c,0x00000353, + 0x00000340,0x0003003e,0x00000352,0x00000353,0x00050039,0x0000000e,0x00000354,0x00000011, + 0x00000352,0x0003003e,0x00000355,0x00000354,0x00050039,0x0000000e,0x00000356,0x0000001f, + 0x00000355,0x00040071,0x0000034a,0x00000357,0x00000356,0x00060041,0x00000358,0x00000359, + 0x0000034e,0x000001ac,0x00000351,0x0003003e,0x00000359,0x00000357,0x0004003d,0x0000000e, + 0x0000035a,0x000002a2,0x00050080,0x0000000e,0x0000035b,0x0000035a,0x000002b3,0x0004003d, + 0x0000000e,0x0000035c,0x00000332,0x00050080,0x0000000e,0x0000035d,0x0000035b,0x0000035c, + 0x0004003d,0x0000000c,0x0000035f,0x00000344,0x0003003e,0x0000035e,0x0000035f,0x00050039, + 0x0000000e,0x00000360,0x00000011,0x0000035e,0x0003003e,0x00000361,0x00000360,0x00050039, + 0x0000000e,0x00000362,0x0000001f,0x00000361,0x00040071,0x0000034a,0x00000363,0x00000362, + 0x00060041,0x00000358,0x00000364,0x0000034e,0x000001ac,0x0000035d,0x0003003e,0x00000364, + 0x00000363,0x0004003d,0x0000000e,0x00000365,0x000002a2,0x00050080,0x0000000e,0x00000367, + 0x00000365,0x00000366,0x0004003d,0x0000000e,0x00000368,0x00000332,0x00050080,0x0000000e, + 0x00000369,0x00000367,0x00000368,0x0004003d,0x0000000e,0x0000036a,0x000002a2,0x00050080, + 0x0000000e,0x0000036b,0x0000036a,0x00000366,0x0004003d,0x0000000e,0x0000036c,0x00000332, + 0x00050080,0x0000000e,0x0000036d,0x0000036b,0x0000036c,0x00060041,0x000002c0,0x0000036f, + 0x000002bc,0x000001ac,0x0000036d,0x0004003d,0x0000000c,0x00000370,0x0000036f,0x0003003e, + 0x0000036e,0x00000370,0x00050039,0x0000000e,0x00000371,0x00000011,0x0000036e,0x0003003e, + 0x00000372,0x00000371,0x00050039,0x0000000e,0x00000373,0x0000001f,0x00000372,0x00040071, + 0x0000034a,0x00000374,0x00000373,0x00060041,0x00000358,0x00000375,0x0000034e,0x000001ac, + 0x00000369,0x0003003e,0x00000375,0x00000374,0x000200f9,0x00000336,0x000200f8,0x00000336, + 0x0004003d,0x0000000e,0x00000376,0x00000332,0x00050080,0x0000000e,0x00000377,0x00000376, + 0x000001cf,0x0003003e,0x00000332,0x00000377,0x000200f9,0x00000333,0x000200f8,0x00000335, + 0x000100fd,0x00010038,0x00050036,0x00000006,0x0000000a,0x00000000,0x00000008,0x00030037, + 0x00000007,0x00000009,0x000200f8,0x0000000b,0x0004003b,0x00000013,0x00000045,0x00000007, + 0x0004003b,0x00000013,0x00000048,0x00000007,0x0004003b,0x00000013,0x0000004c,0x00000007, + 0x0004003b,0x00000007,0x00000065,0x00000007,0x0004003b,0x00000013,0x00000076,0x00000007, + 0x0004003b,0x00000013,0x0000007c,0x00000007,0x0004003d,0x00000006,0x00000046,0x00000009, + 0x0004007c,0x0000000e,0x00000047,0x00000046,0x0003003e,0x00000045,0x00000047,0x0004003d, + 0x0000000e,0x00000049,0x00000045,0x000500c7,0x0000000e,0x0000004b,0x00000049,0x0000004a, + 0x0003003e,0x00000048,0x0000004b,0x0004003d,0x0000000e,0x0000004d,0x00000045,0x000500c7, + 0x0000000e,0x0000004f,0x0000004d,0x0000004e,0x0003003e,0x0000004c,0x0000004f,0x0004003d, + 0x0000000e,0x00000050,0x0000004c,0x000500ae,0x0000002f,0x00000052,0x00000050,0x00000051, + 0x000300f7,0x00000054,0x00000000,0x000400fa,0x00000052,0x00000053,0x00000054,0x000200f8, + 0x00000053,0x0004003d,0x00000006,0x00000055,0x00000009,0x000200fe,0x00000055,0x000200f8, + 0x00000054,0x0004003d,0x0000000e,0x00000057,0x0000004c,0x000500ae,0x0000002f,0x00000059, + 0x00000057,0x00000058,0x000300f7,0x0000005b,0x00000000,0x000400fa,0x00000059,0x0000005a, + 0x0000005b,0x000200f8,0x0000005a,0x0004003d,0x0000000e,0x0000005c,0x00000048,0x000500c5, + 0x0000000e,0x0000005d,0x0000005c,0x00000051,0x0004007c,0x00000006,0x0000005e,0x0000005d, + 0x000200fe,0x0000005e,0x000200f8,0x0000005b,0x0004003d,0x0000000e,0x00000060,0x0000004c, + 0x000500b0,0x0000002f,0x00000062,0x00000060,0x00000061,0x000300f7,0x00000064,0x00000000, + 0x000400fa,0x00000062,0x00000063,0x00000064,0x000200f8,0x00000063,0x0004003d,0x0000000e, + 0x00000066,0x0000004c,0x0004007c,0x00000006,0x00000067,0x00000066,0x00050085,0x00000006, + 0x00000069,0x00000067,0x00000068,0x0006000c,0x00000006,0x0000006a,0x00000001,0x00000002, + 0x00000069,0x0003003e,0x00000065,0x0000006a,0x0004003d,0x0000000e,0x0000006b,0x00000048, + 0x0004007c,0x00000006,0x0000006c,0x0000006b,0x0004003d,0x0000000e,0x0000006d,0x00000048, + 0x0004003d,0x00000006,0x0000006e,0x00000065,0x00050085,0x00000006,0x00000070,0x0000006e, + 0x0000006f,0x0004007c,0x0000000e,0x00000071,0x00000070,0x000500c5,0x0000000e,0x00000072, + 0x0000006d,0x00000071,0x0004007c,0x00000006,0x00000073,0x00000072,0x00050081,0x00000006, + 0x00000074,0x0000006c,0x00000073,0x000200fe,0x00000074,0x000200f8,0x00000064,0x0004003d, + 0x0000000e,0x00000077,0x0000004c,0x000500c2,0x0000000e,0x00000079,0x00000077,0x00000078, + 0x000500c7,0x0000000e,0x0000007b,0x00000079,0x0000007a,0x0003003e,0x00000076,0x0000007b, + 0x0004003d,0x0000000e,0x0000007d,0x0000004c,0x00050080,0x0000000e,0x0000007f,0x0000007d, + 0x0000007e,0x0004003d,0x0000000e,0x00000080,0x00000076,0x00050080,0x0000000e,0x00000081, + 0x0000007f,0x00000080,0x000500c7,0x0000000e,0x00000083,0x00000081,0x00000082,0x0003003e, + 0x0000007c,0x00000083,0x0004003d,0x0000000e,0x00000084,0x00000048,0x0004003d,0x0000000e, + 0x00000085,0x0000007c,0x000500c5,0x0000000e,0x00000086,0x00000084,0x00000085,0x0004007c, + 0x00000006,0x00000087,0x00000086,0x000200fe,0x00000087,0x00010038,0x00050036,0x0000000e, + 0x00000011,0x00000000,0x0000000f,0x00030037,0x0000000d,0x00000010,0x000200f8,0x00000012, + 0x0004003d,0x0000000c,0x0000008a,0x00000010,0x0004007c,0x0000008b,0x0000008c,0x0000008a, + 0x00040071,0x0000000e,0x0000008d,0x0000008c,0x000200fe,0x0000008d,0x00010038,0x00050036, + 0x0000000c,0x00000016,0x00000000,0x00000014,0x00030037,0x00000013,0x00000015,0x000200f8, + 0x00000017,0x0004003d,0x0000000e,0x00000090,0x00000015,0x000500c7,0x0000000e,0x00000092, + 0x00000090,0x00000091,0x00040071,0x0000008b,0x00000093,0x00000092,0x0004007c,0x0000000c, + 0x00000094,0x00000093,0x000200fe,0x00000094,0x00010038,0x00050036,0x0000000e,0x0000001b, + 0x00000000,0x00000018,0x00030037,0x00000013,0x00000019,0x00030037,0x00000013,0x0000001a, + 0x000200f8,0x0000001c,0x0004003b,0x00000013,0x00000097,0x00000007,0x0004003b,0x00000013, + 0x0000009b,0x00000007,0x0004003b,0x00000013,0x0000009f,0x00000007,0x0004003b,0x00000013, + 0x000000a3,0x00000007,0x0004003d,0x0000000e,0x00000098,0x00000019,0x0004003d,0x0000000e, + 0x00000099,0x0000001a,0x000500c2,0x0000000e,0x0000009a,0x00000098,0x00000099,0x0003003e, + 0x00000097,0x0000009a,0x0004003d,0x0000000e,0x0000009c,0x0000001a,0x000500c4,0x0000000e, + 0x0000009d,0x0000007a,0x0000009c,0x00050082,0x0000000e,0x0000009e,0x0000009d,0x0000007a, + 0x0003003e,0x0000009b,0x0000009e,0x0004003d,0x0000000e,0x000000a0,0x00000019,0x0004003d, + 0x0000000e,0x000000a1,0x0000009b,0x000500c7,0x0000000e,0x000000a2,0x000000a0,0x000000a1, + 0x0003003e,0x0000009f,0x000000a2,0x0004003d,0x0000000e,0x000000a4,0x0000001a,0x00050082, + 0x0000000e,0x000000a5,0x000000a4,0x0000007a,0x000500c4,0x0000000e,0x000000a6,0x0000007a, + 0x000000a5,0x0003003e,0x000000a3,0x000000a6,0x0004003d,0x0000000e,0x000000a7,0x00000097, + 0x0004003d,0x0000000e,0x000000a8,0x0000009f,0x0004003d,0x0000000e,0x000000a9,0x000000a3, + 0x000500ac,0x0000002f,0x000000aa,0x000000a8,0x000000a9,0x000400a8,0x0000002f,0x000000ab, + 0x000000aa,0x000300f7,0x000000ad,0x00000000,0x000400fa,0x000000ab,0x000000ac,0x000000ad, + 0x000200f8,0x000000ac,0x0004003d,0x0000000e,0x000000ae,0x0000009f,0x0004003d,0x0000000e, + 0x000000af,0x000000a3,0x000500aa,0x0000002f,0x000000b0,0x000000ae,0x000000af,0x000300f7, + 0x000000b2,0x00000000,0x000400fa,0x000000b0,0x000000b1,0x000000b2,0x000200f8,0x000000b1, + 0x0004003d,0x0000000e,0x000000b3,0x00000097,0x000500c7,0x0000000e,0x000000b4,0x000000b3, + 0x0000007a,0x000500ab,0x0000002f,0x000000b6,0x000000b4,0x000000b5,0x000200f9,0x000000b2, + 0x000200f8,0x000000b2,0x000700f5,0x0000002f,0x000000b7,0x000000b0,0x000000ac,0x000000b6, + 0x000000b1,0x000200f9,0x000000ad,0x000200f8,0x000000ad,0x000700f5,0x0000002f,0x000000b8, + 0x000000aa,0x0000001c,0x000000b7,0x000000b2,0x000600a9,0x0000000e,0x000000b9,0x000000b8, + 0x0000007a,0x000000b5,0x00050080,0x0000000e,0x000000ba,0x000000a7,0x000000b9,0x000200fe, + 0x000000ba,0x00010038,0x00050036,0x0000000e,0x0000001f,0x00000000,0x0000001d,0x00030037, + 0x00000013,0x0000001e,0x000200f8,0x00000020,0x0004003b,0x000000bd,0x000000be,0x00000007, + 0x0004003b,0x00000013,0x000000da,0x00000007,0x0004003b,0x00000013,0x000000e0,0x00000007, + 0x0004003b,0x00000013,0x000000e6,0x00000007,0x0004003b,0x00000013,0x000000ed,0x00000007, + 0x0004003b,0x00000013,0x000000f4,0x00000007,0x0004003b,0x00000013,0x000000f7,0x00000007, + 0x0004003b,0x00000013,0x00000100,0x00000007,0x0004003b,0x00000013,0x00000103,0x00000007, + 0x0004003b,0x00000013,0x0000010b,0x00000007,0x0004003b,0x00000013,0x0000010d,0x00000007, + 0x0004003b,0x00000013,0x00000112,0x00000007,0x0004003b,0x00000013,0x00000115,0x00000007, + 0x0004003b,0x00000013,0x00000117,0x00000007,0x0004003b,0x00000013,0x00000119,0x00000007, + 0x0004003b,0x00000013,0x0000012d,0x00000007,0x0004003d,0x0000000e,0x000000bf,0x0000001e, + 0x000500c7,0x0000000e,0x000000c1,0x000000bf,0x000000c0,0x000500aa,0x0000002f,0x000000c2, + 0x000000c1,0x000000c0,0x000300f7,0x000000c4,0x00000000,0x000400fa,0x000000c2,0x000000c3, + 0x000000c4,0x000200f8,0x000000c3,0x0004003d,0x0000000e,0x000000c5,0x0000001e,0x000500c7, + 0x0000000e,0x000000c7,0x000000c5,0x000000c6,0x000500ab,0x0000002f,0x000000c8,0x000000c7, + 0x000000b5,0x000200f9,0x000000c4,0x000200f8,0x000000c4,0x000700f5,0x0000002f,0x000000c9, + 0x000000c2,0x00000020,0x000000c8,0x000000c3,0x0003003e,0x000000be,0x000000c9,0x0004003d, + 0x0000002f,0x000000ca,0x000000be,0x000300f7,0x000000cc,0x00000000,0x000400fa,0x000000ca, + 0x000000cb,0x000000cc,0x000200f8,0x000000cb,0x000200fe,0x000000b5,0x000200f8,0x000000cc, + 0x0004003d,0x0000000e,0x000000ce,0x0000001e,0x000500c7,0x0000000e,0x000000d0,0x000000ce, + 0x000000cf,0x000500aa,0x0000002f,0x000000d1,0x000000d0,0x000000b5,0x000300f7,0x000000d3, + 0x00000000,0x000400fa,0x000000d1,0x000000d2,0x000000d3,0x000200f8,0x000000d2,0x0004003d, + 0x0000000e,0x000000d4,0x0000001e,0x000500c2,0x0000000e,0x000000d6,0x000000d4,0x000000d5, + 0x000500c7,0x0000000e,0x000000d8,0x000000d6,0x000000d7,0x000200fe,0x000000d8,0x000200f8, + 0x000000d3,0x0004003d,0x0000000e,0x000000db,0x0000001e,0x000500c7,0x0000000e,0x000000dd, + 0x000000db,0x000000dc,0x000500ab,0x0000002f,0x000000de,0x000000dd,0x000000b5,0x000600a9, + 0x0000000e,0x000000df,0x000000de,0x000000d7,0x000000b5,0x0003003e,0x000000da,0x000000df, + 0x0004003d,0x0000000e,0x000000e1,0x0000001e,0x000500c2,0x0000000e,0x000000e3,0x000000e1, + 0x000000e2,0x000500c7,0x0000000e,0x000000e5,0x000000e3,0x000000e4,0x0003003e,0x000000e0, + 0x000000e5,0x0004003d,0x0000000e,0x000000e7,0x0000001e,0x000500c7,0x0000000e,0x000000e8, + 0x000000e7,0x000000c6,0x0003003e,0x000000e6,0x000000e8,0x0004003d,0x0000000e,0x000000e9, + 0x000000e0,0x000500aa,0x0000002f,0x000000ea,0x000000e9,0x000000e4,0x000300f7,0x000000ec, + 0x00000000,0x000400fa,0x000000ea,0x000000eb,0x000000ef,0x000200f8,0x000000eb,0x0003003e, + 0x000000ed,0x000000ee,0x000200f9,0x000000ec,0x000200f8,0x000000ef,0x0004003d,0x0000000e, + 0x000000f0,0x000000e0,0x000500b2,0x0000002f,0x000000f1,0x000000f0,0x000000d5,0x000300f7, + 0x000000f3,0x00000000,0x000400fa,0x000000f1,0x000000f2,0x00000111,0x000200f8,0x000000f2, + 0x0004003d,0x0000000e,0x000000f5,0x000000e0,0x000500aa,0x0000002f,0x000000f6,0x000000f5, + 0x000000b5,0x000300f7,0x000000f9,0x00000000,0x000400fa,0x000000f6,0x000000f8,0x000000fb, + 0x000200f8,0x000000f8,0x0004003d,0x0000000e,0x000000fa,0x000000e6,0x0003003e,0x000000f7, + 0x000000fa,0x000200f9,0x000000f9,0x000200f8,0x000000fb,0x0004003d,0x0000000e,0x000000fd, + 0x000000e6,0x00050080,0x0000000e,0x000000fe,0x000000fc,0x000000fd,0x0003003e,0x000000f7, + 0x000000fe,0x000200f9,0x000000f9,0x000200f8,0x000000f9,0x0004003d,0x0000000e,0x000000ff, + 0x000000f7,0x0003003e,0x000000f4,0x000000ff,0x0004003d,0x0000000e,0x00000101,0x000000e0, + 0x000500aa,0x0000002f,0x00000102,0x00000101,0x000000b5,0x000300f7,0x00000105,0x00000000, + 0x000400fa,0x00000102,0x00000104,0x00000107,0x000200f8,0x00000104,0x0003003e,0x00000103, + 0x00000106,0x000200f9,0x00000105,0x000200f8,0x00000107,0x0004003d,0x0000000e,0x00000108, + 0x000000e0,0x00050082,0x0000000e,0x00000109,0x0000003e,0x00000108,0x0003003e,0x00000103, + 0x00000109,0x000200f9,0x00000105,0x000200f8,0x00000105,0x0004003d,0x0000000e,0x0000010a, + 0x00000103,0x0003003e,0x00000100,0x0000010a,0x0004003d,0x0000000e,0x0000010c,0x000000f4, + 0x0003003e,0x0000010b,0x0000010c,0x0004003d,0x0000000e,0x0000010e,0x00000100,0x0003003e, + 0x0000010d,0x0000010e,0x00060039,0x0000000e,0x0000010f,0x0000001b,0x0000010b,0x0000010d, + 0x0007000c,0x0000000e,0x00000110,0x00000001,0x00000026,0x0000010f,0x000000d5,0x0003003e, + 0x000000ed,0x00000110,0x000200f9,0x000000f3,0x000200f8,0x00000111,0x0004003d,0x0000000e, + 0x00000113,0x000000e0,0x00050082,0x0000000e,0x00000114,0x00000113,0x000000d5,0x0003003e, + 0x00000112,0x00000114,0x0004003d,0x0000000e,0x00000118,0x000000e6,0x0003003e,0x00000117, + 0x00000118,0x0003003e,0x00000119,0x00000116,0x00060039,0x0000000e,0x0000011a,0x0000001b, + 0x00000117,0x00000119,0x0003003e,0x00000115,0x0000011a,0x0004003d,0x0000000e,0x0000011b, + 0x00000115,0x000500aa,0x0000002f,0x0000011c,0x0000011b,0x000000d5,0x000300f7,0x0000011e, + 0x00000000,0x000400fa,0x0000011c,0x0000011d,0x0000011e,0x000200f8,0x0000011d,0x0003003e, + 0x00000115,0x000000b5,0x0004003d,0x0000000e,0x0000011f,0x00000112,0x00050080,0x0000000e, + 0x00000120,0x0000011f,0x0000007a,0x0003003e,0x00000112,0x00000120,0x000200f9,0x0000011e, + 0x000200f8,0x0000011e,0x0004003d,0x0000000e,0x00000121,0x00000112,0x000500ac,0x0000002f, + 0x00000122,0x00000121,0x00000106,0x000400a8,0x0000002f,0x00000123,0x00000122,0x000300f7, + 0x00000125,0x00000000,0x000400fa,0x00000123,0x00000124,0x00000125,0x000200f8,0x00000124, + 0x0004003d,0x0000000e,0x00000126,0x00000112,0x000500aa,0x0000002f,0x00000127,0x00000126, + 0x00000106,0x0004003d,0x0000000e,0x00000128,0x00000115,0x000500ac,0x0000002f,0x0000012a, + 0x00000128,0x00000129,0x000500a7,0x0000002f,0x0000012b,0x00000127,0x0000012a,0x000200f9, + 0x00000125,0x000200f8,0x00000125,0x000700f5,0x0000002f,0x0000012c,0x00000122,0x0000011e, + 0x0000012b,0x00000124,0x000300f7,0x0000012f,0x00000000,0x000400fa,0x0000012c,0x0000012e, + 0x00000130,0x000200f8,0x0000012e,0x0003003e,0x0000012d,0x000000ee,0x000200f9,0x0000012f, + 0x000200f8,0x00000130,0x0004003d,0x0000000e,0x00000131,0x00000112,0x000500c4,0x0000000e, + 0x00000133,0x00000131,0x00000132,0x0004003d,0x0000000e,0x00000134,0x00000115,0x000500c5, + 0x0000000e,0x00000135,0x00000133,0x00000134,0x0003003e,0x0000012d,0x00000135,0x000200f9, + 0x0000012f,0x000200f8,0x0000012f,0x0004003d,0x0000000e,0x00000136,0x0000012d,0x0003003e, + 0x000000ed,0x00000136,0x000200f9,0x000000f3,0x000200f8,0x000000f3,0x000200f9,0x000000ec, + 0x000200f8,0x000000ec,0x0004003d,0x0000000e,0x00000137,0x000000da,0x0004003d,0x0000000e, + 0x00000138,0x000000ed,0x000500c5,0x0000000e,0x00000139,0x00000137,0x00000138,0x000200fe, + 0x00000139,0x00010038,0x00050036,0x00000006,0x00000023,0x00000000,0x00000021,0x00030037, + 0x0000000d,0x00000022,0x000200f8,0x00000024,0x0004003b,0x00000013,0x0000013c,0x00000007, + 0x0004003b,0x0000000d,0x0000013d,0x00000007,0x0004003b,0x00000007,0x00000143,0x00000007, + 0x0004003b,0x00000013,0x0000014d,0x00000007,0x0004003d,0x0000000c,0x0000013e,0x00000022, + 0x0003003e,0x0000013d,0x0000013e,0x00050039,0x0000000e,0x0000013f,0x00000011,0x0000013d, + 0x0003003e,0x0000013c,0x0000013f,0x0004003d,0x0000000e,0x00000140,0x0000013c,0x000500ae, + 0x0000002f,0x00000142,0x00000140,0x00000141,0x000300f7,0x00000145,0x00000000,0x000400fa, + 0x00000142,0x00000144,0x00000147,0x000200f8,0x00000144,0x0003003e,0x00000143,0x00000146, + 0x000200f9,0x00000145,0x000200f8,0x00000147,0x0004003d,0x0000000c,0x00000149,0x00000022, + 0x00040073,0x00000006,0x0000014a,0x00000149,0x0004003d,0x0000000e,0x0000014b,0x0000013c, + 0x00050080,0x0000000e,0x0000014c,0x0000014b,0x0000007a,0x0003003e,0x0000014d,0x0000014c, + 0x00050039,0x0000000c,0x0000014e,0x00000016,0x0000014d,0x00040073,0x00000006,0x0000014f, + 0x0000014e,0x00050081,0x00000006,0x00000150,0x0000014a,0x0000014f,0x00050085,0x00000006, + 0x00000151,0x00000148,0x00000150,0x0003003e,0x00000143,0x00000151,0x000200f9,0x00000145, + 0x000200f8,0x00000145,0x0004003d,0x00000006,0x00000152,0x00000143,0x000200fe,0x00000152, + 0x00010038,0x00050036,0x00000006,0x00000026,0x00000000,0x00000021,0x00030037,0x0000000d, + 0x00000025,0x000200f8,0x00000027,0x0004003b,0x0000000d,0x00000157,0x00000007,0x0004003b, + 0x00000013,0x0000015b,0x00000007,0x0004003d,0x0000000c,0x00000155,0x00000025,0x00040073, + 0x00000006,0x00000156,0x00000155,0x0004003d,0x0000000c,0x00000158,0x00000025,0x0003003e, + 0x00000157,0x00000158,0x00050039,0x0000000e,0x00000159,0x00000011,0x00000157,0x00050082, + 0x0000000e,0x0000015a,0x00000159,0x0000007a,0x0003003e,0x0000015b,0x0000015a,0x00050039, + 0x0000000c,0x0000015c,0x00000016,0x0000015b,0x00040073,0x00000006,0x0000015d,0x0000015c, + 0x00050081,0x00000006,0x0000015e,0x00000156,0x0000015d,0x00050085,0x00000006,0x0000015f, + 0x00000148,0x0000015e,0x000200fe,0x0000015f,0x00010038,0x00050036,0x0000000c,0x0000002a, + 0x00000000,0x00000028,0x00030037,0x0000000d,0x00000029,0x000200f8,0x0000002b,0x0004003b, + 0x0000000d,0x00000162,0x00000007,0x0004003b,0x00000013,0x00000166,0x00000007,0x0004003d, + 0x0000000c,0x00000163,0x00000029,0x0003003e,0x00000162,0x00000163,0x00050039,0x0000000e, + 0x00000164,0x00000011,0x00000162,0x00050080,0x0000000e,0x00000165,0x00000164,0x0000007a, + 0x0003003e,0x00000166,0x00000165,0x00050039,0x0000000c,0x00000167,0x00000016,0x00000166, + 0x000200fe,0x00000167,0x00010038,0x00050036,0x0000000c,0x0000002d,0x00000000,0x00000028, + 0x00030037,0x0000000d,0x0000002c,0x000200f8,0x0000002e,0x0004003b,0x0000000d,0x0000016a, + 0x00000007,0x0004003b,0x00000013,0x0000016e,0x00000007,0x0004003d,0x0000000c,0x0000016b, + 0x0000002c,0x0003003e,0x0000016a,0x0000016b,0x00050039,0x0000000e,0x0000016c,0x00000011, + 0x0000016a,0x00050082,0x0000000e,0x0000016d,0x0000016c,0x0000007a,0x0003003e,0x0000016e, + 0x0000016d,0x00050039,0x0000000c,0x0000016f,0x00000016,0x0000016e,0x000200fe,0x0000016f, + 0x00010038,0x00050036,0x0000002f,0x00000033,0x00000000,0x00000030,0x00030037,0x00000007, + 0x00000031,0x00030037,0x00000007,0x00000032,0x000200f8,0x00000034,0x0004003b,0x00000007, + 0x00000172,0x00000007,0x0004003b,0x00000007,0x00000176,0x00000007,0x0004003b,0x00000007, + 0x0000017c,0x00000007,0x0004003b,0x00000007,0x00000180,0x00000007,0x0004003b,0x00000007, + 0x00000186,0x00000007,0x0004003d,0x00000006,0x00000173,0x00000031,0x0004003d,0x00000006, + 0x00000174,0x00000031,0x00050085,0x00000006,0x00000175,0x00000173,0x00000174,0x0003003e, + 0x00000172,0x00000175,0x0004003d,0x00000006,0x00000177,0x00000172,0x0004007c,0x0000000e, + 0x00000178,0x00000177,0x000500c7,0x0000000e,0x0000017a,0x00000178,0x00000179,0x0004007c, + 0x00000006,0x0000017b,0x0000017a,0x0003003e,0x00000176,0x0000017b,0x0004003d,0x00000006, + 0x0000017d,0x00000172,0x0004003d,0x00000006,0x0000017e,0x00000176,0x00050083,0x00000006, + 0x0000017f,0x0000017d,0x0000017e,0x0003003e,0x0000017c,0x0000017f,0x0004003d,0x00000006, + 0x00000181,0x00000032,0x0004003d,0x00000006,0x00000182,0x00000176,0x00050085,0x00000006, + 0x00000183,0x00000181,0x00000182,0x00050083,0x00000006,0x00000185,0x00000183,0x00000184, + 0x0003003e,0x00000180,0x00000185,0x0004003d,0x00000006,0x00000187,0x00000180,0x0004003d, + 0x00000006,0x00000188,0x00000032,0x0004003d,0x00000006,0x00000189,0x0000017c,0x00050085, + 0x00000006,0x0000018a,0x00000188,0x00000189,0x00050081,0x00000006,0x0000018b,0x00000187, + 0x0000018a,0x0003003e,0x00000186,0x0000018b,0x0004003d,0x00000006,0x0000018c,0x00000186, + 0x000500b8,0x0000002f,0x0000018e,0x0000018c,0x0000018d,0x000200fe,0x0000018e,0x00010038, + 0x00050036,0x0000000c,0x00000036,0x00000000,0x00000028,0x00030037,0x0000000d,0x00000035, + 0x000200f8,0x00000037,0x0004003b,0x00000007,0x00000191,0x00000007,0x0004003b,0x0000000d, + 0x000001a3,0x00000007,0x0004003b,0x00000007,0x000001a6,0x00000007,0x0004003b,0x000001aa, + 0x000001ab,0x00000007,0x0004003b,0x0000000d,0x000001b5,0x00000007,0x0004003b,0x00000007, + 0x000001b8,0x00000007,0x0004003b,0x00000007,0x000001b9,0x00000007,0x0004003b,0x0000000d, + 0x000001be,0x00000007,0x0004003b,0x0000000d,0x000001c1,0x00000007,0x0004003b,0x00000007, + 0x000001c4,0x00000007,0x0004003b,0x00000007,0x000001c5,0x00000007,0x0004003b,0x0000000d, + 0x000001cb,0x00000007,0x0004003d,0x0000000c,0x00000192,0x00000035,0x00040073,0x00000006, + 0x00000193,0x00000192,0x0003003e,0x00000191,0x00000193,0x0004003d,0x00000006,0x00000194, + 0x00000191,0x000500ba,0x0000002f,0x00000195,0x00000194,0x0000018d,0x000400a8,0x0000002f, + 0x00000196,0x00000195,0x000400a8,0x0000002f,0x00000197,0x00000196,0x000300f7,0x00000199, + 0x00000000,0x000400fa,0x00000197,0x00000198,0x00000199,0x000200f8,0x00000198,0x0004003d, + 0x00000006,0x0000019a,0x00000191,0x0004009d,0x0000002f,0x0000019b,0x0000019a,0x000200f9, + 0x00000199,0x000200f8,0x00000199,0x000700f5,0x0000002f,0x0000019c,0x00000196,0x00000037, + 0x0000019b,0x00000198,0x000300f7,0x0000019e,0x00000000,0x000400fa,0x0000019c,0x0000019d, + 0x0000019e,0x000200f8,0x0000019d,0x0004003d,0x00000006,0x0000019f,0x00000191,0x0006000c, + 0x00000006,0x000001a0,0x00000001,0x00000020,0x0000019f,0x00040073,0x0000000c,0x000001a1, + 0x000001a0,0x000200fe,0x000001a1,0x000200f8,0x0000019e,0x0004003d,0x00000006,0x000001a4, + 0x00000191,0x0006000c,0x00000006,0x000001a5,0x00000001,0x00000020,0x000001a4,0x0003003e, + 0x000001a6,0x000001a5,0x00050039,0x00000006,0x000001a7,0x0000000a,0x000001a6,0x00040073, + 0x0000000c,0x000001a8,0x000001a7,0x0003003e,0x000001a3,0x000001a8,0x0003003e,0x000001ab, + 0x000001ac,0x000200f9,0x000001ad,0x000200f8,0x000001ad,0x000400f6,0x000001af,0x000001b0, + 0x00000000,0x000200f9,0x000001b1,0x000200f8,0x000001b1,0x0004003d,0x000001a9,0x000001b2, + 0x000001ab,0x000500b1,0x0000002f,0x000001b4,0x000001b2,0x000001b3,0x000400fa,0x000001b4, + 0x000001ae,0x000001af,0x000200f8,0x000001ae,0x0004003d,0x0000000c,0x000001b6,0x000001a3, + 0x0003003e,0x000001b5,0x000001b6,0x00050039,0x00000006,0x000001b7,0x00000023,0x000001b5, + 0x0003003e,0x000001b8,0x000001b7,0x0004003d,0x00000006,0x000001ba,0x00000191,0x0003003e, + 0x000001b9,0x000001ba,0x00060039,0x0000002f,0x000001bb,0x00000033,0x000001b8,0x000001b9, + 0x000300f7,0x000001bd,0x00000000,0x000400fa,0x000001bb,0x000001bc,0x000001bd,0x000200f8, + 0x000001bc,0x0004003d,0x0000000c,0x000001bf,0x000001a3,0x0003003e,0x000001be,0x000001bf, + 0x00050039,0x0000000c,0x000001c0,0x0000002a,0x000001be,0x0003003e,0x000001a3,0x000001c0, + 0x000200f9,0x000001bd,0x000200f8,0x000001bd,0x0004003d,0x0000000c,0x000001c2,0x000001a3, + 0x0003003e,0x000001c1,0x000001c2,0x00050039,0x00000006,0x000001c3,0x00000026,0x000001c1, + 0x0003003e,0x000001c4,0x000001c3,0x0004003d,0x00000006,0x000001c6,0x00000191,0x0003003e, + 0x000001c5,0x000001c6,0x00060039,0x0000002f,0x000001c7,0x00000033,0x000001c4,0x000001c5, + 0x000400a8,0x0000002f,0x000001c8,0x000001c7,0x000300f7,0x000001ca,0x00000000,0x000400fa, + 0x000001c8,0x000001c9,0x000001ca,0x000200f8,0x000001c9,0x0004003d,0x0000000c,0x000001cc, + 0x000001a3,0x0003003e,0x000001cb,0x000001cc,0x00050039,0x0000000c,0x000001cd,0x0000002d, + 0x000001cb,0x0003003e,0x000001a3,0x000001cd,0x000200f9,0x000001ca,0x000200f8,0x000001ca, + 0x000200f9,0x000001b0,0x000200f8,0x000001b0,0x0004003d,0x000001a9,0x000001ce,0x000001ab, + 0x00050080,0x000001a9,0x000001d0,0x000001ce,0x000001cf,0x0003003e,0x000001ab,0x000001d0, + 0x000200f9,0x000001ad,0x000200f8,0x000001af,0x0004003d,0x0000000c,0x000001d1,0x000001a3, + 0x000200fe,0x000001d1,0x00010038,0x00050036,0x0000000c,0x0000003c,0x00000000,0x00000038, + 0x00030037,0x0000000d,0x00000039,0x00030037,0x0000000d,0x0000003a,0x00030037,0x0000000d, + 0x0000003b,0x000200f8,0x0000003d,0x0004003b,0x00000007,0x000001d4,0x00000007,0x0004003b, + 0x00000007,0x000001da,0x00000007,0x0004003b,0x00000007,0x000001df,0x00000007,0x0004003b, + 0x00000007,0x000001e3,0x00000007,0x0004003b,0x00000007,0x000001e7,0x00000007,0x0004003b, + 0x000001aa,0x000001fa,0x00000007,0x0004003b,0x00000007,0x00000207,0x00000007,0x0004003b, + 0x00000007,0x0000020f,0x00000007,0x0004003b,0x00000007,0x00000221,0x00000007,0x0004003b, + 0x00000007,0x0000022c,0x00000007,0x0004003b,0x00000007,0x00000230,0x00000007,0x0004003d, + 0x0000000c,0x000001d5,0x00000039,0x00040073,0x00000006,0x000001d6,0x000001d5,0x0004003d, + 0x0000000c,0x000001d7,0x0000003a,0x00040073,0x00000006,0x000001d8,0x000001d7,0x00050085, + 0x00000006,0x000001d9,0x000001d6,0x000001d8,0x0003003e,0x000001d4,0x000001d9,0x0004003d, + 0x00000006,0x000001db,0x000001d4,0x0004003d,0x0000000c,0x000001dc,0x0000003b,0x00040073, + 0x00000006,0x000001dd,0x000001dc,0x00050081,0x00000006,0x000001de,0x000001db,0x000001dd, + 0x0003003e,0x000001da,0x000001de,0x0004003d,0x00000006,0x000001e0,0x000001da,0x0004003d, + 0x00000006,0x000001e1,0x000001d4,0x00050083,0x00000006,0x000001e2,0x000001e0,0x000001e1, + 0x0003003e,0x000001df,0x000001e2,0x0004003d,0x00000006,0x000001e4,0x000001da,0x0004003d, + 0x00000006,0x000001e5,0x000001df,0x00050083,0x00000006,0x000001e6,0x000001e4,0x000001e5, + 0x0003003e,0x000001e3,0x000001e6,0x0004003d,0x00000006,0x000001e8,0x000001d4,0x0004003d, + 0x00000006,0x000001e9,0x000001e3,0x00050083,0x00000006,0x000001ea,0x000001e8,0x000001e9, + 0x0004003d,0x0000000c,0x000001eb,0x0000003b,0x00040073,0x00000006,0x000001ec,0x000001eb, + 0x0004003d,0x00000006,0x000001ed,0x000001df,0x00050083,0x00000006,0x000001ee,0x000001ec, + 0x000001ed,0x00050081,0x00000006,0x000001ef,0x000001ea,0x000001ee,0x0003003e,0x000001e7, + 0x000001ef,0x0004003d,0x00000006,0x000001f0,0x000001e7,0x000500b7,0x0000002f,0x000001f1, + 0x000001f0,0x0000018d,0x000300f7,0x000001f3,0x00000000,0x000400fa,0x000001f1,0x000001f2, + 0x000001f3,0x000200f8,0x000001f2,0x0004003d,0x00000006,0x000001f4,0x000001da,0x0004009d, + 0x0000002f,0x000001f5,0x000001f4,0x000400a8,0x0000002f,0x000001f6,0x000001f5,0x000200f9, + 0x000001f3,0x000200f8,0x000001f3,0x000700f5,0x0000002f,0x000001f7,0x000001f1,0x0000003d, + 0x000001f6,0x000001f2,0x000300f7,0x000001f9,0x00000000,0x000400fa,0x000001f7,0x000001f8, + 0x000001f9,0x000200f8,0x000001f8,0x0004003d,0x00000006,0x000001fb,0x000001da,0x0006000c, + 0x00000006,0x000001fc,0x00000001,0x00000004,0x000001fb,0x0004007c,0x0000000e,0x000001fd, + 0x000001fc,0x000500c2,0x0000000e,0x000001ff,0x000001fd,0x000001fe,0x000500c7,0x0000000e, + 0x00000201,0x000001ff,0x00000200,0x0004007c,0x000001a9,0x00000202,0x00000201,0x00050082, + 0x000001a9,0x00000204,0x00000202,0x00000203,0x0007000c,0x000001a9,0x00000206,0x00000001, + 0x0000002a,0x00000204,0x00000205,0x0003003e,0x000001fa,0x00000206,0x0004003d,0x000001a9, + 0x00000208,0x000001fa,0x00050082,0x000001a9,0x0000020a,0x00000208,0x00000209,0x00050080, + 0x000001a9,0x0000020b,0x0000020a,0x00000203,0x0004007c,0x0000000e,0x0000020c,0x0000020b, + 0x000500c4,0x0000000e,0x0000020d,0x0000020c,0x000001fe,0x0004007c,0x00000006,0x0000020e, + 0x0000020d,0x0003003e,0x00000207,0x0000020e,0x0004003d,0x00000006,0x00000210,0x000001da, + 0x0004003d,0x000001a9,0x00000211,0x000001fa,0x00050082,0x000001a9,0x00000212,0x00000203, + 0x00000211,0x00050080,0x000001a9,0x00000213,0x00000212,0x00000209,0x0004007c,0x0000000e, + 0x00000214,0x00000213,0x000500c4,0x0000000e,0x00000215,0x00000214,0x000001fe,0x0004007c, + 0x00000006,0x00000216,0x00000215,0x00050085,0x00000006,0x00000217,0x00000210,0x00000216, + 0x0003003e,0x0000020f,0x00000217,0x0004003d,0x00000006,0x00000218,0x0000020f,0x0004003d, + 0x00000006,0x00000219,0x0000020f,0x0006000c,0x00000006,0x0000021a,0x00000001,0x00000008, + 0x00000219,0x00050083,0x00000006,0x0000021b,0x00000218,0x0000021a,0x000500b4,0x0000002f, + 0x0000021c,0x0000021b,0x00000148,0x000300f7,0x0000021e,0x00000000,0x000400fa,0x0000021c, + 0x0000021d,0x0000021e,0x000200f8,0x0000021d,0x0004003d,0x00000006,0x0000021f,0x000001e7, + 0x000500ba,0x0000002f,0x00000220,0x0000021f,0x0000018d,0x000300f7,0x00000223,0x00000000, + 0x000400fa,0x00000220,0x00000222,0x00000226,0x000200f8,0x00000222,0x0004003d,0x00000006, + 0x00000224,0x0000020f,0x0006000c,0x00000006,0x00000225,0x00000001,0x00000009,0x00000224, + 0x0003003e,0x00000221,0x00000225,0x000200f9,0x00000223,0x000200f8,0x00000226,0x0004003d, + 0x00000006,0x00000227,0x0000020f,0x0006000c,0x00000006,0x00000228,0x00000001,0x00000008, + 0x00000227,0x0003003e,0x00000221,0x00000228,0x000200f9,0x00000223,0x000200f8,0x00000223, + 0x0004003d,0x00000006,0x00000229,0x00000221,0x0004003d,0x00000006,0x0000022a,0x00000207, + 0x00050085,0x00000006,0x0000022b,0x00000229,0x0000022a,0x0003003e,0x0000022c,0x0000022b, + 0x00050039,0x00000006,0x0000022d,0x0000000a,0x0000022c,0x00040073,0x0000000c,0x0000022e, + 0x0000022d,0x000200fe,0x0000022e,0x000200f8,0x0000021e,0x000200f9,0x000001f9,0x000200f8, + 0x000001f9,0x0004003d,0x00000006,0x00000231,0x000001da,0x0003003e,0x00000230,0x00000231, + 0x00050039,0x00000006,0x00000232,0x0000000a,0x00000230,0x00040073,0x0000000c,0x00000233, + 0x00000232,0x000200fe,0x00000233,0x00010038,0x00050036,0x0000000c,0x00000043,0x00000000, + 0x00000041,0x00030037,0x00000040,0x00000042,0x000200f8,0x00000044,0x0004003b,0x00000013, + 0x00000236,0x00000007,0x0004003b,0x0000023f,0x00000240,0x00000007,0x0004003b,0x00000013, + 0x0000024d,0x00000007,0x0004003b,0x00000257,0x00000258,0x00000007,0x0004003b,0x00000267, + 0x00000268,0x00000007,0x0003003e,0x00000236,0x000000b5,0x000200f9,0x00000237,0x000200f8, + 0x00000237,0x000400f6,0x00000239,0x0000023a,0x00000000,0x000200f9,0x0000023b,0x000200f8, + 0x0000023b,0x0004003d,0x0000000e,0x0000023c,0x00000236,0x000500b0,0x0000002f,0x0000023d, + 0x0000023c,0x000000d5,0x000400fa,0x0000023d,0x00000238,0x00000239,0x000200f8,0x00000238, + 0x0004003d,0x0000000e,0x00000241,0x00000236,0x0004003d,0x0000000e,0x00000242,0x00000236, + 0x00050041,0x0000000d,0x00000243,0x00000042,0x00000242,0x0004003d,0x0000000c,0x00000244, + 0x00000243,0x0004003d,0x0000000e,0x00000245,0x00000236,0x00050080,0x0000000e,0x00000246, + 0x00000245,0x000000d5,0x00050041,0x0000000d,0x00000247,0x00000042,0x00000246,0x0004003d, + 0x0000000c,0x00000248,0x00000247,0x00050081,0x0000000c,0x00000249,0x00000244,0x00000248, + 0x00050041,0x0000000d,0x0000024a,0x00000240,0x00000241,0x0003003e,0x0000024a,0x00000249, + 0x000200f9,0x0000023a,0x000200f8,0x0000023a,0x0004003d,0x0000000e,0x0000024b,0x00000236, + 0x00050080,0x0000000e,0x0000024c,0x0000024b,0x000001cf,0x0003003e,0x00000236,0x0000024c, + 0x000200f9,0x00000237,0x000200f8,0x00000239,0x0003003e,0x0000024d,0x000000b5,0x000200f9, + 0x0000024e,0x000200f8,0x0000024e,0x000400f6,0x00000250,0x00000251,0x00000000,0x000200f9, + 0x00000252,0x000200f8,0x00000252,0x0004003d,0x0000000e,0x00000253,0x0000024d,0x000500b0, + 0x0000002f,0x00000255,0x00000253,0x00000254,0x000400fa,0x00000255,0x0000024f,0x00000250, + 0x000200f8,0x0000024f,0x0004003d,0x0000000e,0x00000259,0x0000024d,0x0004003d,0x0000000e, + 0x0000025a,0x0000024d,0x00050041,0x0000000d,0x0000025b,0x00000240,0x0000025a,0x0004003d, + 0x0000000c,0x0000025c,0x0000025b,0x0004003d,0x0000000e,0x0000025d,0x0000024d,0x00050080, + 0x0000000e,0x0000025e,0x0000025d,0x00000254,0x00050041,0x0000000d,0x0000025f,0x00000240, + 0x0000025e,0x0004003d,0x0000000c,0x00000260,0x0000025f,0x00050081,0x0000000c,0x00000261, + 0x0000025c,0x00000260,0x00050041,0x0000000d,0x00000262,0x00000258,0x00000259,0x0003003e, + 0x00000262,0x00000261,0x000200f9,0x00000251,0x000200f8,0x00000251,0x0004003d,0x0000000e, + 0x00000263,0x0000024d,0x00050080,0x0000000e,0x00000264,0x00000263,0x000001cf,0x0003003e, + 0x0000024d,0x00000264,0x000200f9,0x0000024e,0x000200f8,0x00000250,0x00050041,0x0000000d, + 0x00000269,0x00000258,0x000001ac,0x0004003d,0x0000000c,0x0000026a,0x00000269,0x00050041, + 0x0000000d,0x0000026b,0x00000258,0x000001b3,0x0004003d,0x0000000c,0x0000026c,0x0000026b, + 0x00050081,0x0000000c,0x0000026d,0x0000026a,0x0000026c,0x00050041,0x0000000d,0x0000026e, + 0x00000268,0x000001ac,0x0003003e,0x0000026e,0x0000026d,0x00050041,0x0000000d,0x0000026f, + 0x00000258,0x000001cf,0x0004003d,0x0000000c,0x00000270,0x0000026f,0x00050041,0x0000000d, + 0x00000272,0x00000258,0x00000271,0x0004003d,0x0000000c,0x00000273,0x00000272,0x00050081, + 0x0000000c,0x00000274,0x00000270,0x00000273,0x00050041,0x0000000d,0x00000275,0x00000268, + 0x000001cf,0x0003003e,0x00000275,0x00000274,0x00050041,0x0000000d,0x00000276,0x00000268, + 0x000001ac,0x0004003d,0x0000000c,0x00000277,0x00000276,0x00050041,0x0000000d,0x00000278, + 0x00000268,0x000001cf,0x0004003d,0x0000000c,0x00000279,0x00000278,0x00050081,0x0000000c, + 0x0000027a,0x00000277,0x00000279,0x000200fe,0x0000027a,0x00010038, +}; +inline constexpr uint32_t k_common__global_normalize[] = { + 0x07230203,0x00010600,0x0008000b,0x00000323,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000009,0x00020011,0x00000016,0x00020011,0x00001151,0x00020011,0x00001160,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x000a000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000218,0x00000225,0x00000254, + 0x000002ca,0x000002f8,0x00060010,0x00000004,0x00000011,0x00000100,0x00000001,0x00000001, + 0x00030003,0x00000002,0x000001cc,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x36315f72, + 0x5f746962,0x726f7473,0x00656761,0x00080004,0x455f4c47,0x735f5458,0x65646168,0x62385f72, + 0x735f7469,0x61726f74,0x00006567,0x000b0004,0x455f4c47,0x735f5458,0x65646168,0x78655f72, + 0x63696c70,0x615f7469,0x68746972,0x6974656d,0x79745f63,0x00736570,0x000a0004,0x475f4c47, + 0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576, + 0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669, + 0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000a,0x6e756f72,0x36314664, + 0x3b316628,0x00000000,0x00040005,0x00000009,0x756c6176,0x00000065,0x00060005,0x00000011, + 0x42363166,0x28737469,0x31363166,0x0000003b,0x00040005,0x00000010,0x756c6176,0x00000065, + 0x00060005,0x00000016,0x46363166,0x426d6f72,0x28737469,0x003b3175,0x00040005,0x00000015, + 0x73746962,0x00000000,0x00060005,0x0000001b,0x66696873,0x656e5274,0x3b317528,0x003b3175, + 0x00040005,0x00000019,0x756c6176,0x00000065,0x00040005,0x0000001a,0x66696873,0x00000074, + 0x00080005,0x0000001f,0x336d3465,0x65646f43,0x6d6f7246,0x42363146,0x28737469,0x003b3175, + 0x00050005,0x0000001e,0x666c6168,0x73746942,0x00000000,0x00080005,0x00000023,0x666c6168, + 0x7064694d,0x746e696f,0x766f6241,0x31662865,0x003b3136,0x00030005,0x00000022,0x00000068, + 0x00080005,0x00000026,0x666c6168,0x7064694d,0x746e696f,0x6f6c6542,0x31662877,0x003b3136, + 0x00030005,0x00000025,0x00000068,0x00060005,0x0000002a,0x666c6168,0x766f6241,0x31662865, + 0x003b3136,0x00030005,0x00000029,0x00000068,0x00060005,0x0000002d,0x666c6168,0x6f6c6542, + 0x31662877,0x003b3136,0x00030005,0x0000002c,0x00000068,0x00090005,0x00000033,0x61757173, + 0x69546572,0x4273656d,0x776f6c65,0x28656e4f,0x663b3166,0x00003b31,0x00030005,0x00000031, + 0x0000006d,0x00030005,0x00000032,0x00000078,0x00080005,0x00000036,0x65766e69,0x53657372, + 0x48747271,0x28666c61,0x31363166,0x0000003b,0x00030005,0x00000035,0x00000078,0x00070005, + 0x0000003d,0x65657274,0x316d7553,0x31662836,0x315b3136,0x003b5d36,0x00030005,0x0000003c, + 0x00000072,0x00040005,0x0000003f,0x73746962,0x00000000,0x00040005,0x00000042,0x6e676973, + 0x00000000,0x00050005,0x00000046,0x6e67616d,0x64757469,0x00000065,0x00040005,0x0000005f, + 0x6c616373,0x00006465,0x00030005,0x00000070,0x0062736c,0x00040005,0x00000076,0x6e756f72, + 0x00646564,0x00050005,0x00000091,0x746f7571,0x746e6569,0x00000000,0x00060005,0x00000095, + 0x616d6572,0x65646e69,0x73614d72,0x0000006b,0x00050005,0x00000099,0x616d6572,0x65646e69, + 0x00000072,0x00040005,0x0000009d,0x666c6168,0x00796177,0x00040005,0x000000b8,0x614e7369, + 0x0000006e,0x00050005,0x000000d4,0x6167656e,0x65766974,0x00000000,0x00050005,0x000000da, + 0x6f707865,0x746e656e,0x00000000,0x00050005,0x000000e0,0x746e616d,0x61737369,0x00000000, + 0x00040005,0x000000e7,0x65646f63,0x00000000,0x00050005,0x000000ee,0x6e676973,0x63696669, + 0x00646e61,0x00040005,0x000000fa,0x66696873,0x00000074,0x00040005,0x00000105,0x61726170, + 0x0000006d,0x00040005,0x00000107,0x61726170,0x0000006d,0x00050005,0x0000010c,0x78453465, + 0x656e6f70,0x0000746e,0x00050005,0x0000010f,0x614d3465,0x7369746e,0x00006173,0x00040005, + 0x00000111,0x61726170,0x0000006d,0x00040005,0x00000113,0x61726170,0x0000006d,0x00040005, + 0x00000136,0x73746962,0x00000000,0x00040005,0x00000137,0x61726170,0x0000006d,0x00040005, + 0x00000147,0x61726170,0x0000006d,0x00040005,0x00000151,0x61726170,0x0000006d,0x00040005, + 0x00000155,0x61726170,0x0000006d,0x00040005,0x0000015c,0x61726170,0x0000006d,0x00040005, + 0x00000160,0x61726170,0x0000006d,0x00040005,0x00000164,0x61726170,0x0000006d,0x00040005, + 0x00000168,0x61726170,0x0000006d,0x00030005,0x0000016c,0x0000326d,0x00030005,0x00000170, + 0x00006968,0x00030005,0x00000176,0x00006f6c,0x00030005,0x0000017a,0x00000064,0x00030005, + 0x00000180,0x00000073,0x00030005,0x0000018b,0x00006678,0x00030005,0x0000019d,0x00000068, + 0x00040005,0x000001a0,0x61726170,0x0000006d,0x00030005,0x000001a5,0x00000069,0x00040005, + 0x000001af,0x61726170,0x0000006d,0x00040005,0x000001b2,0x61726170,0x0000006d,0x00040005, + 0x000001b3,0x61726170,0x0000006d,0x00040005,0x000001b8,0x61726170,0x0000006d,0x00040005, + 0x000001bb,0x61726170,0x0000006d,0x00040005,0x000001be,0x61726170,0x0000006d,0x00040005, + 0x000001bf,0x61726170,0x0000006d,0x00040005,0x000001c5,0x61726170,0x0000006d,0x00030005, + 0x000001ce,0x00000063,0x00030005,0x000001d8,0x00003873,0x00030005,0x000001e5,0x00000063, + 0x00030005,0x000001f0,0x00003473,0x00030005,0x00000200,0x00003273,0x00030005,0x00000215, + 0x00006469,0x00080005,0x00000218,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69, + 0x00000044,0x00040005,0x00000223,0x68737550,0x00000000,0x00050006,0x00000223,0x00000000, + 0x656b6f74,0x0000736e,0x00050006,0x00000223,0x00000001,0x64616568,0x00000073,0x00060006, + 0x00000223,0x00000002,0x6e616863,0x736c656e,0x00000000,0x00070006,0x00000223,0x00000003, + 0x6c616373,0x726f5765,0x66664f64,0x00746573,0x00030005,0x00000225,0x00006370,0x00040005, + 0x00000230,0x656b6f74,0x0000006e,0x00040005,0x00000235,0x64616568,0x00000000,0x00040005, + 0x0000023a,0x65736162,0x00000000,0x00030005,0x00000244,0x00000063,0x00030005,0x0000024f, + 0x00000071,0x00030005,0x00000252,0x00766b51,0x00040006,0x00000252,0x00000000,0x00766b71, + 0x00030005,0x00000254,0x00000000,0x00030005,0x0000025c,0x0000006b,0x00030005,0x00000267, + 0x00000063,0x00050005,0x0000026f,0x68676968,0x61757153,0x00006572,0x00030005,0x00000279, + 0x006d7573,0x00030005,0x00000286,0x00000072,0x00040005,0x00000288,0x61726170,0x0000006d, + 0x00040005,0x0000028f,0x6d755371,0x00000000,0x00040005,0x00000290,0x61726170,0x0000006d, + 0x00030005,0x00000293,0x00000063,0x00050005,0x0000029b,0x68676968,0x61757153,0x00006572, + 0x00030005,0x000002a5,0x006d7573,0x00040005,0x000002b3,0x61726170,0x0000006d,0x00040005, + 0x000002ba,0x6d75536b,0x00000000,0x00040005,0x000002bb,0x61726170,0x0000006d,0x00040005, + 0x000002be,0x726f4e71,0x0000006d,0x00040005,0x000002bf,0x61726170,0x0000006d,0x00040005, + 0x000002c2,0x726f4e6b,0x0000006d,0x00040005,0x000002c3,0x61726170,0x0000006d,0x00060005, + 0x000002c6,0x7261656c,0x5364656e,0x656c6163,0x00000000,0x00030005,0x000002c8,0x00787541, + 0x00050006,0x000002c8,0x00000000,0x33787561,0x00000032,0x00030005,0x000002ca,0x00000000, + 0x00040005,0x000002d3,0x61726170,0x0000006d,0x00050005,0x000002d6,0x64616568,0x6c616353, + 0x00000065,0x00030005,0x000002d8,0x00000063,0x00030005,0x000002e0,0x0030716e,0x00030005, + 0x000002e6,0x0031716e,0x00030005,0x000002ea,0x0032716e,0x00030005,0x000002ee,0x00006b6e, + 0x00050005,0x000002f6,0x6d726f4e,0x7a696c61,0x00006465,0x00060006,0x000002f6,0x00000000, + 0x6d726f6e,0x7a696c61,0x00006465,0x00030005,0x000002f8,0x00000000,0x00040005,0x000002fc, + 0x61726170,0x0000006d,0x00040005,0x000002ff,0x61726170,0x0000006d,0x00040005,0x00000308, + 0x61726170,0x0000006d,0x00040005,0x0000030b,0x61726170,0x0000006d,0x00040005,0x00000318, + 0x61726170,0x0000006d,0x00040005,0x0000031c,0x61726170,0x0000006d,0x00030047,0x0000016f, + 0x0000002a,0x00030047,0x00000179,0x0000002a,0x00030047,0x0000017d,0x0000002a,0x00030047, + 0x0000017f,0x0000002a,0x00030047,0x00000184,0x0000002a,0x00030047,0x00000185,0x0000002a, + 0x00030047,0x000001e1,0x0000002a,0x00030047,0x000001f9,0x0000002a,0x00030047,0x00000205, + 0x0000002a,0x00030047,0x0000020c,0x0000002a,0x00040047,0x00000218,0x0000000b,0x0000001c, + 0x00030047,0x00000223,0x00000002,0x00050048,0x00000223,0x00000000,0x00000023,0x00000000, + 0x00050048,0x00000223,0x00000001,0x00000023,0x00000004,0x00050048,0x00000223,0x00000002, + 0x00000023,0x00000008,0x00050048,0x00000223,0x00000003,0x00000023,0x0000000c,0x00040047, + 0x00000251,0x00000006,0x00000002,0x00030047,0x00000252,0x00000002,0x00040048,0x00000252, + 0x00000000,0x00000018,0x00050048,0x00000252,0x00000000,0x00000023,0x00000000,0x00030047, + 0x00000254,0x00000018,0x00040047,0x00000254,0x00000021,0x00000001,0x00040047,0x00000254, + 0x00000022,0x00000000,0x00030047,0x00000278,0x0000002a,0x00030047,0x00000282,0x0000002a, + 0x00030047,0x00000285,0x0000002a,0x00030047,0x000002a4,0x0000002a,0x00030047,0x000002ae, + 0x0000002a,0x00030047,0x000002b1,0x0000002a,0x00040047,0x000002c7,0x00000006,0x00000004, + 0x00030047,0x000002c8,0x00000002,0x00040048,0x000002c8,0x00000000,0x00000018,0x00050048, + 0x000002c8,0x00000000,0x00000023,0x00000000,0x00030047,0x000002ca,0x00000018,0x00040047, + 0x000002ca,0x00000021,0x00000004,0x00040047,0x000002ca,0x00000022,0x00000000,0x00030047, + 0x000002e5,0x0000002a,0x00030047,0x000002e9,0x0000002a,0x00030047,0x000002ed,0x0000002a, + 0x00030047,0x000002f3,0x0000002a,0x00040047,0x000002f5,0x00000006,0x00000001,0x00030047, + 0x000002f6,0x00000002,0x00040048,0x000002f6,0x00000000,0x00000019,0x00050048,0x000002f6, + 0x00000000,0x00000023,0x00000000,0x00030047,0x000002f8,0x00000019,0x00040047,0x000002f8, + 0x00000021,0x00000005,0x00040047,0x000002f8,0x00000022,0x00000000,0x00020013,0x00000002, + 0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040020,0x00000007, + 0x00000007,0x00000006,0x00040021,0x00000008,0x00000006,0x00000007,0x00030016,0x0000000c, + 0x00000010,0x00040020,0x0000000d,0x00000007,0x0000000c,0x00040015,0x0000000e,0x00000020, + 0x00000000,0x00040021,0x0000000f,0x0000000e,0x0000000d,0x00040020,0x00000013,0x00000007, + 0x0000000e,0x00040021,0x00000014,0x0000000c,0x00000013,0x00050021,0x00000018,0x0000000e, + 0x00000013,0x00000013,0x00040021,0x0000001d,0x0000000e,0x00000013,0x00040021,0x00000021, + 0x00000006,0x0000000d,0x00040021,0x00000028,0x0000000c,0x0000000d,0x00020014,0x0000002f, + 0x00050021,0x00000030,0x0000002f,0x00000007,0x00000007,0x0004002b,0x0000000e,0x00000038, + 0x00000010,0x0004001c,0x00000039,0x0000000c,0x00000038,0x00040020,0x0000003a,0x00000007, + 0x00000039,0x00040021,0x0000003b,0x0000000c,0x0000003a,0x0004002b,0x0000000e,0x00000044, + 0x80000000,0x0004002b,0x0000000e,0x00000048,0x7fffffff,0x0004002b,0x0000000e,0x0000004b, + 0x7f800000,0x0004002b,0x0000000e,0x00000052,0x477ff000,0x0004002b,0x0000000e,0x0000005b, + 0x38800000,0x0004002b,0x00000006,0x00000062,0x4b800000,0x0004002b,0x00000006,0x00000069, + 0x33800000,0x0004002b,0x0000000e,0x00000072,0x0000000d,0x0004002b,0x0000000e,0x00000074, + 0x00000001,0x0004002b,0x0000000e,0x00000078,0x00000fff,0x0004002b,0x0000000e,0x0000007c, + 0xffffe000,0x00040015,0x00000085,0x00000010,0x00000000,0x0004002b,0x0000000e,0x0000008b, + 0x0000ffff,0x0004002b,0x0000000e,0x000000af,0x00000000,0x00040020,0x000000b7,0x00000007, + 0x0000002f,0x0004002b,0x0000000e,0x000000ba,0x00007c00,0x0004002b,0x0000000e,0x000000c0, + 0x000003ff,0x0004002b,0x0000000e,0x000000c9,0x00007fff,0x0004002b,0x0000000e,0x000000cf, + 0x00000008,0x0004002b,0x0000000e,0x000000d1,0x00000080,0x0004002b,0x0000000e,0x000000d6, + 0x00008000,0x0004002b,0x0000000e,0x000000dc,0x0000000a,0x0004002b,0x0000000e,0x000000de, + 0x0000001f,0x0004002b,0x0000000e,0x000000e8,0x0000007e,0x0004002b,0x0000000e,0x000000f6, + 0x00000400,0x0004002b,0x0000000e,0x00000100,0x0000000f,0x0004002b,0x0000000e,0x00000110, + 0x00000007,0x0004002b,0x0000000e,0x00000123,0x00000006,0x0004002b,0x0000000e,0x0000012c, + 0x00000003,0x0004002b,0x0000000e,0x0000013b,0x00007bff,0x0004002b,0x00000006,0x00000140, + 0x477ff000,0x0004002b,0x00000006,0x00000142,0x3f000000,0x0004002b,0x0000000e,0x00000173, + 0xfffff000,0x0004002b,0x00000006,0x0000017e,0x3f800000,0x0004002b,0x00000006,0x00000187, + 0x00000000,0x00040015,0x000001a3,0x00000020,0x00000001,0x00040020,0x000001a4,0x00000007, + 0x000001a3,0x0004002b,0x000001a3,0x000001a6,0x00000000,0x0004002b,0x000001a3,0x000001ad, + 0x00000002,0x0004002b,0x000001a3,0x000001c9,0x00000001,0x0004001c,0x000001d6,0x0000000c, + 0x000000cf,0x00040020,0x000001d7,0x00000007,0x000001d6,0x0004002b,0x0000000e,0x000001ec, + 0x00000004,0x0004001c,0x000001ee,0x0000000c,0x000001ec,0x00040020,0x000001ef,0x00000007, + 0x000001ee,0x0004002b,0x0000000e,0x000001fd,0x00000002,0x0004001c,0x000001fe,0x0000000c, + 0x000001fd,0x00040020,0x000001ff,0x00000007,0x000001fe,0x0004002b,0x000001a3,0x00000209, + 0x00000003,0x00040017,0x00000216,0x0000000e,0x00000003,0x00040020,0x00000217,0x00000001, + 0x00000216,0x0004003b,0x00000217,0x00000218,0x00000001,0x00040020,0x00000219,0x00000001, + 0x0000000e,0x0004002b,0x0000000e,0x0000021f,0x00000100,0x0006001e,0x00000223,0x0000000e, + 0x0000000e,0x0000000e,0x0000000e,0x00040020,0x00000224,0x00000009,0x00000223,0x0004003b, + 0x00000224,0x00000225,0x00000009,0x00040020,0x00000226,0x00000009,0x0000000e,0x0004002b, + 0x0000000e,0x00000241,0x00000060,0x0004002b,0x0000000e,0x0000024b,0x00000020,0x0004001c, + 0x0000024d,0x0000000c,0x0000024b,0x00040020,0x0000024e,0x00000007,0x0000024d,0x0003001d, + 0x00000251,0x0000000c,0x0003001e,0x00000252,0x00000251,0x00040020,0x00000253,0x0000000c, + 0x00000252,0x0004003b,0x00000253,0x00000254,0x0000000c,0x00040020,0x00000258,0x0000000c, + 0x0000000c,0x0003001d,0x000002c7,0x0000000e,0x0003001e,0x000002c8,0x000002c7,0x00040020, + 0x000002c9,0x0000000c,0x000002c8,0x0004003b,0x000002c9,0x000002ca,0x0000000c,0x00040020, + 0x000002cf,0x0000000c,0x0000000e,0x0004002b,0x0000000c,0x000002d7,0x000045a8,0x00040015, + 0x000002f4,0x00000008,0x00000000,0x0003001d,0x000002f5,0x000002f4,0x0003001e,0x000002f6, + 0x000002f5,0x00040020,0x000002f7,0x0000000c,0x000002f6,0x0004003b,0x000002f7,0x000002f8, + 0x0000000c,0x00040020,0x00000302,0x0000000c,0x000002f4,0x0004002b,0x0000000e,0x00000310, + 0x00000040,0x0006002c,0x00000216,0x00000322,0x0000021f,0x00000074,0x00000074,0x00050036, + 0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000013, + 0x00000215,0x00000007,0x0004003b,0x00000013,0x00000230,0x00000007,0x0004003b,0x00000013, + 0x00000235,0x00000007,0x0004003b,0x00000013,0x0000023a,0x00000007,0x0004003b,0x00000013, + 0x00000244,0x00000007,0x0004003b,0x0000024e,0x0000024f,0x00000007,0x0004003b,0x0000024e, + 0x0000025c,0x00000007,0x0004003b,0x00000013,0x00000267,0x00000007,0x0004003b,0x0000000d, + 0x0000026f,0x00000007,0x0004003b,0x00000007,0x00000279,0x00000007,0x0004003b,0x0000003a, + 0x00000286,0x00000007,0x0004003b,0x00000007,0x00000288,0x00000007,0x0004003b,0x0000000d, + 0x0000028f,0x00000007,0x0004003b,0x0000003a,0x00000290,0x00000007,0x0004003b,0x00000013, + 0x00000293,0x00000007,0x0004003b,0x0000000d,0x0000029b,0x00000007,0x0004003b,0x00000007, + 0x000002a5,0x00000007,0x0004003b,0x00000007,0x000002b3,0x00000007,0x0004003b,0x0000000d, + 0x000002ba,0x00000007,0x0004003b,0x0000003a,0x000002bb,0x00000007,0x0004003b,0x0000000d, + 0x000002be,0x00000007,0x0004003b,0x0000000d,0x000002bf,0x00000007,0x0004003b,0x0000000d, + 0x000002c2,0x00000007,0x0004003b,0x0000000d,0x000002c3,0x00000007,0x0004003b,0x0000000d, + 0x000002c6,0x00000007,0x0004003b,0x00000007,0x000002d3,0x00000007,0x0004003b,0x0000000d, + 0x000002d6,0x00000007,0x0004003b,0x00000013,0x000002d8,0x00000007,0x0004003b,0x0000000d, + 0x000002e0,0x00000007,0x0004003b,0x0000000d,0x000002e6,0x00000007,0x0004003b,0x0000000d, + 0x000002ea,0x00000007,0x0004003b,0x0000000d,0x000002ee,0x00000007,0x0004003b,0x0000000d, + 0x000002fc,0x00000007,0x0004003b,0x00000013,0x000002ff,0x00000007,0x0004003b,0x0000000d, + 0x00000308,0x00000007,0x0004003b,0x00000013,0x0000030b,0x00000007,0x0004003b,0x0000000d, + 0x00000318,0x00000007,0x0004003b,0x00000013,0x0000031c,0x00000007,0x00050041,0x00000219, + 0x0000021a,0x00000218,0x000000af,0x0004003d,0x0000000e,0x0000021b,0x0000021a,0x00050041, + 0x00000219,0x0000021c,0x00000218,0x00000074,0x0004003d,0x0000000e,0x0000021d,0x0000021c, + 0x00050084,0x0000000e,0x0000021e,0x0000021d,0x0000008b,0x00050084,0x0000000e,0x00000220, + 0x0000021e,0x0000021f,0x00050080,0x0000000e,0x00000221,0x0000021b,0x00000220,0x0003003e, + 0x00000215,0x00000221,0x0004003d,0x0000000e,0x00000222,0x00000215,0x00050041,0x00000226, + 0x00000227,0x00000225,0x000001a6,0x0004003d,0x0000000e,0x00000228,0x00000227,0x00050041, + 0x00000226,0x00000229,0x00000225,0x000001c9,0x0004003d,0x0000000e,0x0000022a,0x00000229, + 0x00050084,0x0000000e,0x0000022b,0x00000228,0x0000022a,0x000500ae,0x0000002f,0x0000022c, + 0x00000222,0x0000022b,0x000300f7,0x0000022e,0x00000000,0x000400fa,0x0000022c,0x0000022d, + 0x0000022e,0x000200f8,0x0000022d,0x000100fd,0x000200f8,0x0000022e,0x0004003d,0x0000000e, + 0x00000231,0x00000215,0x00050041,0x00000226,0x00000232,0x00000225,0x000001c9,0x0004003d, + 0x0000000e,0x00000233,0x00000232,0x00050086,0x0000000e,0x00000234,0x00000231,0x00000233, + 0x0003003e,0x00000230,0x00000234,0x0004003d,0x0000000e,0x00000236,0x00000215,0x00050041, + 0x00000226,0x00000237,0x00000225,0x000001c9,0x0004003d,0x0000000e,0x00000238,0x00000237, + 0x00050089,0x0000000e,0x00000239,0x00000236,0x00000238,0x0003003e,0x00000235,0x00000239, + 0x0004003d,0x0000000e,0x0000023b,0x00000230,0x00050041,0x00000226,0x0000023c,0x00000225, + 0x000001ad,0x0004003d,0x0000000e,0x0000023d,0x0000023c,0x00050084,0x0000000e,0x0000023e, + 0x0000023b,0x0000023d,0x00050084,0x0000000e,0x0000023f,0x0000023e,0x0000012c,0x0004003d, + 0x0000000e,0x00000240,0x00000235,0x00050084,0x0000000e,0x00000242,0x00000240,0x00000241, + 0x00050080,0x0000000e,0x00000243,0x0000023f,0x00000242,0x0003003e,0x0000023a,0x00000243, + 0x0003003e,0x00000244,0x000000af,0x000200f9,0x00000245,0x000200f8,0x00000245,0x000400f6, + 0x00000247,0x00000248,0x00000000,0x000200f9,0x00000249,0x000200f8,0x00000249,0x0004003d, + 0x0000000e,0x0000024a,0x00000244,0x000500b0,0x0000002f,0x0000024c,0x0000024a,0x0000024b, + 0x000400fa,0x0000024c,0x00000246,0x00000247,0x000200f8,0x00000246,0x0004003d,0x0000000e, + 0x00000250,0x00000244,0x0004003d,0x0000000e,0x00000255,0x0000023a,0x0004003d,0x0000000e, + 0x00000256,0x00000244,0x00050080,0x0000000e,0x00000257,0x00000255,0x00000256,0x00060041, + 0x00000258,0x00000259,0x00000254,0x000001a6,0x00000257,0x0004003d,0x0000000c,0x0000025a, + 0x00000259,0x00050041,0x0000000d,0x0000025b,0x0000024f,0x00000250,0x0003003e,0x0000025b, + 0x0000025a,0x0004003d,0x0000000e,0x0000025d,0x00000244,0x0004003d,0x0000000e,0x0000025e, + 0x0000023a,0x00050080,0x0000000e,0x0000025f,0x0000025e,0x0000024b,0x0004003d,0x0000000e, + 0x00000260,0x00000244,0x00050080,0x0000000e,0x00000261,0x0000025f,0x00000260,0x00060041, + 0x00000258,0x00000262,0x00000254,0x000001a6,0x00000261,0x0004003d,0x0000000c,0x00000263, + 0x00000262,0x00050041,0x0000000d,0x00000264,0x0000025c,0x0000025d,0x0003003e,0x00000264, + 0x00000263,0x000200f9,0x00000248,0x000200f8,0x00000248,0x0004003d,0x0000000e,0x00000265, + 0x00000244,0x00050080,0x0000000e,0x00000266,0x00000265,0x000001c9,0x0003003e,0x00000244, + 0x00000266,0x000200f9,0x00000245,0x000200f8,0x00000247,0x0003003e,0x00000267,0x000000af, + 0x000200f9,0x00000268,0x000200f8,0x00000268,0x000400f6,0x0000026a,0x0000026b,0x00000000, + 0x000200f9,0x0000026c,0x000200f8,0x0000026c,0x0004003d,0x0000000e,0x0000026d,0x00000267, + 0x000500b0,0x0000002f,0x0000026e,0x0000026d,0x00000038,0x000400fa,0x0000026e,0x00000269, + 0x0000026a,0x000200f8,0x00000269,0x0004003d,0x0000000e,0x00000270,0x00000267,0x00050080, + 0x0000000e,0x00000271,0x00000270,0x00000038,0x00050041,0x0000000d,0x00000272,0x0000024f, + 0x00000271,0x0004003d,0x0000000c,0x00000273,0x00000272,0x0004003d,0x0000000e,0x00000274, + 0x00000267,0x00050080,0x0000000e,0x00000275,0x00000274,0x00000038,0x00050041,0x0000000d, + 0x00000276,0x0000024f,0x00000275,0x0004003d,0x0000000c,0x00000277,0x00000276,0x00050085, + 0x0000000c,0x00000278,0x00000273,0x00000277,0x0003003e,0x0000026f,0x00000278,0x0004003d, + 0x0000000e,0x0000027a,0x00000267,0x00050041,0x0000000d,0x0000027b,0x0000024f,0x0000027a, + 0x0004003d,0x0000000c,0x0000027c,0x0000027b,0x00040073,0x00000006,0x0000027d,0x0000027c, + 0x0004003d,0x0000000e,0x0000027e,0x00000267,0x00050041,0x0000000d,0x0000027f,0x0000024f, + 0x0000027e,0x0004003d,0x0000000c,0x00000280,0x0000027f,0x00040073,0x00000006,0x00000281, + 0x00000280,0x00050085,0x00000006,0x00000282,0x0000027d,0x00000281,0x0004003d,0x0000000c, + 0x00000283,0x0000026f,0x00040073,0x00000006,0x00000284,0x00000283,0x00050081,0x00000006, + 0x00000285,0x00000282,0x00000284,0x0003003e,0x00000279,0x00000285,0x0004003d,0x0000000e, + 0x00000287,0x00000267,0x0004003d,0x00000006,0x00000289,0x00000279,0x0003003e,0x00000288, + 0x00000289,0x00050039,0x00000006,0x0000028a,0x0000000a,0x00000288,0x00040073,0x0000000c, + 0x0000028b,0x0000028a,0x00050041,0x0000000d,0x0000028c,0x00000286,0x00000287,0x0003003e, + 0x0000028c,0x0000028b,0x000200f9,0x0000026b,0x000200f8,0x0000026b,0x0004003d,0x0000000e, + 0x0000028d,0x00000267,0x00050080,0x0000000e,0x0000028e,0x0000028d,0x000001c9,0x0003003e, + 0x00000267,0x0000028e,0x000200f9,0x00000268,0x000200f8,0x0000026a,0x0004003d,0x00000039, + 0x00000291,0x00000286,0x0003003e,0x00000290,0x00000291,0x00050039,0x0000000c,0x00000292, + 0x0000003d,0x00000290,0x0003003e,0x0000028f,0x00000292,0x0003003e,0x00000293,0x000000af, + 0x000200f9,0x00000294,0x000200f8,0x00000294,0x000400f6,0x00000296,0x00000297,0x00000000, + 0x000200f9,0x00000298,0x000200f8,0x00000298,0x0004003d,0x0000000e,0x00000299,0x00000293, + 0x000500b0,0x0000002f,0x0000029a,0x00000299,0x00000038,0x000400fa,0x0000029a,0x00000295, + 0x00000296,0x000200f8,0x00000295,0x0004003d,0x0000000e,0x0000029c,0x00000293,0x00050080, + 0x0000000e,0x0000029d,0x0000029c,0x00000038,0x00050041,0x0000000d,0x0000029e,0x0000025c, + 0x0000029d,0x0004003d,0x0000000c,0x0000029f,0x0000029e,0x0004003d,0x0000000e,0x000002a0, + 0x00000293,0x00050080,0x0000000e,0x000002a1,0x000002a0,0x00000038,0x00050041,0x0000000d, + 0x000002a2,0x0000025c,0x000002a1,0x0004003d,0x0000000c,0x000002a3,0x000002a2,0x00050085, + 0x0000000c,0x000002a4,0x0000029f,0x000002a3,0x0003003e,0x0000029b,0x000002a4,0x0004003d, + 0x0000000e,0x000002a6,0x00000293,0x00050041,0x0000000d,0x000002a7,0x0000025c,0x000002a6, + 0x0004003d,0x0000000c,0x000002a8,0x000002a7,0x00040073,0x00000006,0x000002a9,0x000002a8, + 0x0004003d,0x0000000e,0x000002aa,0x00000293,0x00050041,0x0000000d,0x000002ab,0x0000025c, + 0x000002aa,0x0004003d,0x0000000c,0x000002ac,0x000002ab,0x00040073,0x00000006,0x000002ad, + 0x000002ac,0x00050085,0x00000006,0x000002ae,0x000002a9,0x000002ad,0x0004003d,0x0000000c, + 0x000002af,0x0000029b,0x00040073,0x00000006,0x000002b0,0x000002af,0x00050081,0x00000006, + 0x000002b1,0x000002ae,0x000002b0,0x0003003e,0x000002a5,0x000002b1,0x0004003d,0x0000000e, + 0x000002b2,0x00000293,0x0004003d,0x00000006,0x000002b4,0x000002a5,0x0003003e,0x000002b3, + 0x000002b4,0x00050039,0x00000006,0x000002b5,0x0000000a,0x000002b3,0x00040073,0x0000000c, + 0x000002b6,0x000002b5,0x00050041,0x0000000d,0x000002b7,0x00000286,0x000002b2,0x0003003e, + 0x000002b7,0x000002b6,0x000200f9,0x00000297,0x000200f8,0x00000297,0x0004003d,0x0000000e, + 0x000002b8,0x00000293,0x00050080,0x0000000e,0x000002b9,0x000002b8,0x000001c9,0x0003003e, + 0x00000293,0x000002b9,0x000200f9,0x00000294,0x000200f8,0x00000296,0x0004003d,0x00000039, + 0x000002bc,0x00000286,0x0003003e,0x000002bb,0x000002bc,0x00050039,0x0000000c,0x000002bd, + 0x0000003d,0x000002bb,0x0003003e,0x000002ba,0x000002bd,0x0004003d,0x0000000c,0x000002c0, + 0x0000028f,0x0003003e,0x000002bf,0x000002c0,0x00050039,0x0000000c,0x000002c1,0x00000036, + 0x000002bf,0x0003003e,0x000002be,0x000002c1,0x0004003d,0x0000000c,0x000002c4,0x000002ba, + 0x0003003e,0x000002c3,0x000002c4,0x00050039,0x0000000c,0x000002c5,0x00000036,0x000002c3, + 0x0003003e,0x000002c2,0x000002c5,0x00050041,0x00000226,0x000002cb,0x00000225,0x00000209, + 0x0004003d,0x0000000e,0x000002cc,0x000002cb,0x0004003d,0x0000000e,0x000002cd,0x00000235, + 0x00050080,0x0000000e,0x000002ce,0x000002cc,0x000002cd,0x00060041,0x000002cf,0x000002d0, + 0x000002ca,0x000001a6,0x000002ce,0x0004003d,0x0000000e,0x000002d1,0x000002d0,0x0004007c, + 0x00000006,0x000002d2,0x000002d1,0x0003003e,0x000002d3,0x000002d2,0x00050039,0x00000006, + 0x000002d4,0x0000000a,0x000002d3,0x00040073,0x0000000c,0x000002d5,0x000002d4,0x0003003e, + 0x000002c6,0x000002d5,0x0003003e,0x000002d6,0x000002d7,0x0003003e,0x000002d8,0x000000af, + 0x000200f9,0x000002d9,0x000200f8,0x000002d9,0x000400f6,0x000002db,0x000002dc,0x00000000, + 0x000200f9,0x000002dd,0x000200f8,0x000002dd,0x0004003d,0x0000000e,0x000002de,0x000002d8, + 0x000500b0,0x0000002f,0x000002df,0x000002de,0x0000024b,0x000400fa,0x000002df,0x000002da, + 0x000002db,0x000200f8,0x000002da,0x0004003d,0x0000000e,0x000002e1,0x000002d8,0x00050041, + 0x0000000d,0x000002e2,0x0000024f,0x000002e1,0x0004003d,0x0000000c,0x000002e3,0x000002e2, + 0x0004003d,0x0000000c,0x000002e4,0x000002be,0x00050085,0x0000000c,0x000002e5,0x000002e3, + 0x000002e4,0x0003003e,0x000002e0,0x000002e5,0x0004003d,0x0000000c,0x000002e7,0x000002e0, + 0x0004003d,0x0000000c,0x000002e8,0x000002d6,0x00050085,0x0000000c,0x000002e9,0x000002e7, + 0x000002e8,0x0003003e,0x000002e6,0x000002e9,0x0004003d,0x0000000c,0x000002eb,0x000002e6, + 0x0004003d,0x0000000c,0x000002ec,0x000002c6,0x00050085,0x0000000c,0x000002ed,0x000002eb, + 0x000002ec,0x0003003e,0x000002ea,0x000002ed,0x0004003d,0x0000000e,0x000002ef,0x000002d8, + 0x00050041,0x0000000d,0x000002f0,0x0000025c,0x000002ef,0x0004003d,0x0000000c,0x000002f1, + 0x000002f0,0x0004003d,0x0000000c,0x000002f2,0x000002c2,0x00050085,0x0000000c,0x000002f3, + 0x000002f1,0x000002f2,0x0003003e,0x000002ee,0x000002f3,0x0004003d,0x0000000e,0x000002f9, + 0x0000023a,0x0004003d,0x0000000e,0x000002fa,0x000002d8,0x00050080,0x0000000e,0x000002fb, + 0x000002f9,0x000002fa,0x0004003d,0x0000000c,0x000002fd,0x000002ea,0x0003003e,0x000002fc, + 0x000002fd,0x00050039,0x0000000e,0x000002fe,0x00000011,0x000002fc,0x0003003e,0x000002ff, + 0x000002fe,0x00050039,0x0000000e,0x00000300,0x0000001f,0x000002ff,0x00040071,0x000002f4, + 0x00000301,0x00000300,0x00060041,0x00000302,0x00000303,0x000002f8,0x000001a6,0x000002fb, + 0x0003003e,0x00000303,0x00000301,0x0004003d,0x0000000e,0x00000304,0x0000023a,0x00050080, + 0x0000000e,0x00000305,0x00000304,0x0000024b,0x0004003d,0x0000000e,0x00000306,0x000002d8, + 0x00050080,0x0000000e,0x00000307,0x00000305,0x00000306,0x0004003d,0x0000000c,0x00000309, + 0x000002ee,0x0003003e,0x00000308,0x00000309,0x00050039,0x0000000e,0x0000030a,0x00000011, + 0x00000308,0x0003003e,0x0000030b,0x0000030a,0x00050039,0x0000000e,0x0000030c,0x0000001f, + 0x0000030b,0x00040071,0x000002f4,0x0000030d,0x0000030c,0x00060041,0x00000302,0x0000030e, + 0x000002f8,0x000001a6,0x00000307,0x0003003e,0x0000030e,0x0000030d,0x0004003d,0x0000000e, + 0x0000030f,0x0000023a,0x00050080,0x0000000e,0x00000311,0x0000030f,0x00000310,0x0004003d, + 0x0000000e,0x00000312,0x000002d8,0x00050080,0x0000000e,0x00000313,0x00000311,0x00000312, + 0x0004003d,0x0000000e,0x00000314,0x0000023a,0x00050080,0x0000000e,0x00000315,0x00000314, + 0x00000310,0x0004003d,0x0000000e,0x00000316,0x000002d8,0x00050080,0x0000000e,0x00000317, + 0x00000315,0x00000316,0x00060041,0x00000258,0x00000319,0x00000254,0x000001a6,0x00000317, + 0x0004003d,0x0000000c,0x0000031a,0x00000319,0x0003003e,0x00000318,0x0000031a,0x00050039, + 0x0000000e,0x0000031b,0x00000011,0x00000318,0x0003003e,0x0000031c,0x0000031b,0x00050039, + 0x0000000e,0x0000031d,0x0000001f,0x0000031c,0x00040071,0x000002f4,0x0000031e,0x0000031d, + 0x00060041,0x00000302,0x0000031f,0x000002f8,0x000001a6,0x00000313,0x0003003e,0x0000031f, + 0x0000031e,0x000200f9,0x000002dc,0x000200f8,0x000002dc,0x0004003d,0x0000000e,0x00000320, + 0x000002d8,0x00050080,0x0000000e,0x00000321,0x00000320,0x000001c9,0x0003003e,0x000002d8, + 0x00000321,0x000200f9,0x000002d9,0x000200f8,0x000002db,0x000100fd,0x00010038,0x00050036, + 0x00000006,0x0000000a,0x00000000,0x00000008,0x00030037,0x00000007,0x00000009,0x000200f8, + 0x0000000b,0x0004003b,0x00000013,0x0000003f,0x00000007,0x0004003b,0x00000013,0x00000042, + 0x00000007,0x0004003b,0x00000013,0x00000046,0x00000007,0x0004003b,0x00000007,0x0000005f, + 0x00000007,0x0004003b,0x00000013,0x00000070,0x00000007,0x0004003b,0x00000013,0x00000076, + 0x00000007,0x0004003d,0x00000006,0x00000040,0x00000009,0x0004007c,0x0000000e,0x00000041, + 0x00000040,0x0003003e,0x0000003f,0x00000041,0x0004003d,0x0000000e,0x00000043,0x0000003f, + 0x000500c7,0x0000000e,0x00000045,0x00000043,0x00000044,0x0003003e,0x00000042,0x00000045, + 0x0004003d,0x0000000e,0x00000047,0x0000003f,0x000500c7,0x0000000e,0x00000049,0x00000047, + 0x00000048,0x0003003e,0x00000046,0x00000049,0x0004003d,0x0000000e,0x0000004a,0x00000046, + 0x000500ae,0x0000002f,0x0000004c,0x0000004a,0x0000004b,0x000300f7,0x0000004e,0x00000000, + 0x000400fa,0x0000004c,0x0000004d,0x0000004e,0x000200f8,0x0000004d,0x0004003d,0x00000006, + 0x0000004f,0x00000009,0x000200fe,0x0000004f,0x000200f8,0x0000004e,0x0004003d,0x0000000e, + 0x00000051,0x00000046,0x000500ae,0x0000002f,0x00000053,0x00000051,0x00000052,0x000300f7, + 0x00000055,0x00000000,0x000400fa,0x00000053,0x00000054,0x00000055,0x000200f8,0x00000054, + 0x0004003d,0x0000000e,0x00000056,0x00000042,0x000500c5,0x0000000e,0x00000057,0x00000056, + 0x0000004b,0x0004007c,0x00000006,0x00000058,0x00000057,0x000200fe,0x00000058,0x000200f8, + 0x00000055,0x0004003d,0x0000000e,0x0000005a,0x00000046,0x000500b0,0x0000002f,0x0000005c, + 0x0000005a,0x0000005b,0x000300f7,0x0000005e,0x00000000,0x000400fa,0x0000005c,0x0000005d, + 0x0000005e,0x000200f8,0x0000005d,0x0004003d,0x0000000e,0x00000060,0x00000046,0x0004007c, + 0x00000006,0x00000061,0x00000060,0x00050085,0x00000006,0x00000063,0x00000061,0x00000062, + 0x0006000c,0x00000006,0x00000064,0x00000001,0x00000002,0x00000063,0x0003003e,0x0000005f, + 0x00000064,0x0004003d,0x0000000e,0x00000065,0x00000042,0x0004007c,0x00000006,0x00000066, + 0x00000065,0x0004003d,0x0000000e,0x00000067,0x00000042,0x0004003d,0x00000006,0x00000068, + 0x0000005f,0x00050085,0x00000006,0x0000006a,0x00000068,0x00000069,0x0004007c,0x0000000e, + 0x0000006b,0x0000006a,0x000500c5,0x0000000e,0x0000006c,0x00000067,0x0000006b,0x0004007c, + 0x00000006,0x0000006d,0x0000006c,0x00050081,0x00000006,0x0000006e,0x00000066,0x0000006d, + 0x000200fe,0x0000006e,0x000200f8,0x0000005e,0x0004003d,0x0000000e,0x00000071,0x00000046, + 0x000500c2,0x0000000e,0x00000073,0x00000071,0x00000072,0x000500c7,0x0000000e,0x00000075, + 0x00000073,0x00000074,0x0003003e,0x00000070,0x00000075,0x0004003d,0x0000000e,0x00000077, + 0x00000046,0x00050080,0x0000000e,0x00000079,0x00000077,0x00000078,0x0004003d,0x0000000e, + 0x0000007a,0x00000070,0x00050080,0x0000000e,0x0000007b,0x00000079,0x0000007a,0x000500c7, + 0x0000000e,0x0000007d,0x0000007b,0x0000007c,0x0003003e,0x00000076,0x0000007d,0x0004003d, + 0x0000000e,0x0000007e,0x00000042,0x0004003d,0x0000000e,0x0000007f,0x00000076,0x000500c5, + 0x0000000e,0x00000080,0x0000007e,0x0000007f,0x0004007c,0x00000006,0x00000081,0x00000080, + 0x000200fe,0x00000081,0x00010038,0x00050036,0x0000000e,0x00000011,0x00000000,0x0000000f, + 0x00030037,0x0000000d,0x00000010,0x000200f8,0x00000012,0x0004003d,0x0000000c,0x00000084, + 0x00000010,0x0004007c,0x00000085,0x00000086,0x00000084,0x00040071,0x0000000e,0x00000087, + 0x00000086,0x000200fe,0x00000087,0x00010038,0x00050036,0x0000000c,0x00000016,0x00000000, + 0x00000014,0x00030037,0x00000013,0x00000015,0x000200f8,0x00000017,0x0004003d,0x0000000e, + 0x0000008a,0x00000015,0x000500c7,0x0000000e,0x0000008c,0x0000008a,0x0000008b,0x00040071, + 0x00000085,0x0000008d,0x0000008c,0x0004007c,0x0000000c,0x0000008e,0x0000008d,0x000200fe, + 0x0000008e,0x00010038,0x00050036,0x0000000e,0x0000001b,0x00000000,0x00000018,0x00030037, + 0x00000013,0x00000019,0x00030037,0x00000013,0x0000001a,0x000200f8,0x0000001c,0x0004003b, + 0x00000013,0x00000091,0x00000007,0x0004003b,0x00000013,0x00000095,0x00000007,0x0004003b, + 0x00000013,0x00000099,0x00000007,0x0004003b,0x00000013,0x0000009d,0x00000007,0x0004003d, + 0x0000000e,0x00000092,0x00000019,0x0004003d,0x0000000e,0x00000093,0x0000001a,0x000500c2, + 0x0000000e,0x00000094,0x00000092,0x00000093,0x0003003e,0x00000091,0x00000094,0x0004003d, + 0x0000000e,0x00000096,0x0000001a,0x000500c4,0x0000000e,0x00000097,0x00000074,0x00000096, + 0x00050082,0x0000000e,0x00000098,0x00000097,0x00000074,0x0003003e,0x00000095,0x00000098, + 0x0004003d,0x0000000e,0x0000009a,0x00000019,0x0004003d,0x0000000e,0x0000009b,0x00000095, + 0x000500c7,0x0000000e,0x0000009c,0x0000009a,0x0000009b,0x0003003e,0x00000099,0x0000009c, + 0x0004003d,0x0000000e,0x0000009e,0x0000001a,0x00050082,0x0000000e,0x0000009f,0x0000009e, + 0x00000074,0x000500c4,0x0000000e,0x000000a0,0x00000074,0x0000009f,0x0003003e,0x0000009d, + 0x000000a0,0x0004003d,0x0000000e,0x000000a1,0x00000091,0x0004003d,0x0000000e,0x000000a2, + 0x00000099,0x0004003d,0x0000000e,0x000000a3,0x0000009d,0x000500ac,0x0000002f,0x000000a4, + 0x000000a2,0x000000a3,0x000400a8,0x0000002f,0x000000a5,0x000000a4,0x000300f7,0x000000a7, + 0x00000000,0x000400fa,0x000000a5,0x000000a6,0x000000a7,0x000200f8,0x000000a6,0x0004003d, + 0x0000000e,0x000000a8,0x00000099,0x0004003d,0x0000000e,0x000000a9,0x0000009d,0x000500aa, + 0x0000002f,0x000000aa,0x000000a8,0x000000a9,0x000300f7,0x000000ac,0x00000000,0x000400fa, + 0x000000aa,0x000000ab,0x000000ac,0x000200f8,0x000000ab,0x0004003d,0x0000000e,0x000000ad, + 0x00000091,0x000500c7,0x0000000e,0x000000ae,0x000000ad,0x00000074,0x000500ab,0x0000002f, + 0x000000b0,0x000000ae,0x000000af,0x000200f9,0x000000ac,0x000200f8,0x000000ac,0x000700f5, + 0x0000002f,0x000000b1,0x000000aa,0x000000a6,0x000000b0,0x000000ab,0x000200f9,0x000000a7, + 0x000200f8,0x000000a7,0x000700f5,0x0000002f,0x000000b2,0x000000a4,0x0000001c,0x000000b1, + 0x000000ac,0x000600a9,0x0000000e,0x000000b3,0x000000b2,0x00000074,0x000000af,0x00050080, + 0x0000000e,0x000000b4,0x000000a1,0x000000b3,0x000200fe,0x000000b4,0x00010038,0x00050036, + 0x0000000e,0x0000001f,0x00000000,0x0000001d,0x00030037,0x00000013,0x0000001e,0x000200f8, + 0x00000020,0x0004003b,0x000000b7,0x000000b8,0x00000007,0x0004003b,0x00000013,0x000000d4, + 0x00000007,0x0004003b,0x00000013,0x000000da,0x00000007,0x0004003b,0x00000013,0x000000e0, + 0x00000007,0x0004003b,0x00000013,0x000000e7,0x00000007,0x0004003b,0x00000013,0x000000ee, + 0x00000007,0x0004003b,0x00000013,0x000000f1,0x00000007,0x0004003b,0x00000013,0x000000fa, + 0x00000007,0x0004003b,0x00000013,0x000000fd,0x00000007,0x0004003b,0x00000013,0x00000105, + 0x00000007,0x0004003b,0x00000013,0x00000107,0x00000007,0x0004003b,0x00000013,0x0000010c, + 0x00000007,0x0004003b,0x00000013,0x0000010f,0x00000007,0x0004003b,0x00000013,0x00000111, + 0x00000007,0x0004003b,0x00000013,0x00000113,0x00000007,0x0004003b,0x00000013,0x00000127, + 0x00000007,0x0004003d,0x0000000e,0x000000b9,0x0000001e,0x000500c7,0x0000000e,0x000000bb, + 0x000000b9,0x000000ba,0x000500aa,0x0000002f,0x000000bc,0x000000bb,0x000000ba,0x000300f7, + 0x000000be,0x00000000,0x000400fa,0x000000bc,0x000000bd,0x000000be,0x000200f8,0x000000bd, + 0x0004003d,0x0000000e,0x000000bf,0x0000001e,0x000500c7,0x0000000e,0x000000c1,0x000000bf, + 0x000000c0,0x000500ab,0x0000002f,0x000000c2,0x000000c1,0x000000af,0x000200f9,0x000000be, + 0x000200f8,0x000000be,0x000700f5,0x0000002f,0x000000c3,0x000000bc,0x00000020,0x000000c2, + 0x000000bd,0x0003003e,0x000000b8,0x000000c3,0x0004003d,0x0000002f,0x000000c4,0x000000b8, + 0x000300f7,0x000000c6,0x00000000,0x000400fa,0x000000c4,0x000000c5,0x000000c6,0x000200f8, + 0x000000c5,0x000200fe,0x000000af,0x000200f8,0x000000c6,0x0004003d,0x0000000e,0x000000c8, + 0x0000001e,0x000500c7,0x0000000e,0x000000ca,0x000000c8,0x000000c9,0x000500aa,0x0000002f, + 0x000000cb,0x000000ca,0x000000af,0x000300f7,0x000000cd,0x00000000,0x000400fa,0x000000cb, + 0x000000cc,0x000000cd,0x000200f8,0x000000cc,0x0004003d,0x0000000e,0x000000ce,0x0000001e, + 0x000500c2,0x0000000e,0x000000d0,0x000000ce,0x000000cf,0x000500c7,0x0000000e,0x000000d2, + 0x000000d0,0x000000d1,0x000200fe,0x000000d2,0x000200f8,0x000000cd,0x0004003d,0x0000000e, + 0x000000d5,0x0000001e,0x000500c7,0x0000000e,0x000000d7,0x000000d5,0x000000d6,0x000500ab, + 0x0000002f,0x000000d8,0x000000d7,0x000000af,0x000600a9,0x0000000e,0x000000d9,0x000000d8, + 0x000000d1,0x000000af,0x0003003e,0x000000d4,0x000000d9,0x0004003d,0x0000000e,0x000000db, + 0x0000001e,0x000500c2,0x0000000e,0x000000dd,0x000000db,0x000000dc,0x000500c7,0x0000000e, + 0x000000df,0x000000dd,0x000000de,0x0003003e,0x000000da,0x000000df,0x0004003d,0x0000000e, + 0x000000e1,0x0000001e,0x000500c7,0x0000000e,0x000000e2,0x000000e1,0x000000c0,0x0003003e, + 0x000000e0,0x000000e2,0x0004003d,0x0000000e,0x000000e3,0x000000da,0x000500aa,0x0000002f, + 0x000000e4,0x000000e3,0x000000de,0x000300f7,0x000000e6,0x00000000,0x000400fa,0x000000e4, + 0x000000e5,0x000000e9,0x000200f8,0x000000e5,0x0003003e,0x000000e7,0x000000e8,0x000200f9, + 0x000000e6,0x000200f8,0x000000e9,0x0004003d,0x0000000e,0x000000ea,0x000000da,0x000500b2, + 0x0000002f,0x000000eb,0x000000ea,0x000000cf,0x000300f7,0x000000ed,0x00000000,0x000400fa, + 0x000000eb,0x000000ec,0x0000010b,0x000200f8,0x000000ec,0x0004003d,0x0000000e,0x000000ef, + 0x000000da,0x000500aa,0x0000002f,0x000000f0,0x000000ef,0x000000af,0x000300f7,0x000000f3, + 0x00000000,0x000400fa,0x000000f0,0x000000f2,0x000000f5,0x000200f8,0x000000f2,0x0004003d, + 0x0000000e,0x000000f4,0x000000e0,0x0003003e,0x000000f1,0x000000f4,0x000200f9,0x000000f3, + 0x000200f8,0x000000f5,0x0004003d,0x0000000e,0x000000f7,0x000000e0,0x00050080,0x0000000e, + 0x000000f8,0x000000f6,0x000000f7,0x0003003e,0x000000f1,0x000000f8,0x000200f9,0x000000f3, + 0x000200f8,0x000000f3,0x0004003d,0x0000000e,0x000000f9,0x000000f1,0x0003003e,0x000000ee, + 0x000000f9,0x0004003d,0x0000000e,0x000000fb,0x000000da,0x000500aa,0x0000002f,0x000000fc, + 0x000000fb,0x000000af,0x000300f7,0x000000ff,0x00000000,0x000400fa,0x000000fc,0x000000fe, + 0x00000101,0x000200f8,0x000000fe,0x0003003e,0x000000fd,0x00000100,0x000200f9,0x000000ff, + 0x000200f8,0x00000101,0x0004003d,0x0000000e,0x00000102,0x000000da,0x00050082,0x0000000e, + 0x00000103,0x00000038,0x00000102,0x0003003e,0x000000fd,0x00000103,0x000200f9,0x000000ff, + 0x000200f8,0x000000ff,0x0004003d,0x0000000e,0x00000104,0x000000fd,0x0003003e,0x000000fa, + 0x00000104,0x0004003d,0x0000000e,0x00000106,0x000000ee,0x0003003e,0x00000105,0x00000106, + 0x0004003d,0x0000000e,0x00000108,0x000000fa,0x0003003e,0x00000107,0x00000108,0x00060039, + 0x0000000e,0x00000109,0x0000001b,0x00000105,0x00000107,0x0007000c,0x0000000e,0x0000010a, + 0x00000001,0x00000026,0x00000109,0x000000cf,0x0003003e,0x000000e7,0x0000010a,0x000200f9, + 0x000000ed,0x000200f8,0x0000010b,0x0004003d,0x0000000e,0x0000010d,0x000000da,0x00050082, + 0x0000000e,0x0000010e,0x0000010d,0x000000cf,0x0003003e,0x0000010c,0x0000010e,0x0004003d, + 0x0000000e,0x00000112,0x000000e0,0x0003003e,0x00000111,0x00000112,0x0003003e,0x00000113, + 0x00000110,0x00060039,0x0000000e,0x00000114,0x0000001b,0x00000111,0x00000113,0x0003003e, + 0x0000010f,0x00000114,0x0004003d,0x0000000e,0x00000115,0x0000010f,0x000500aa,0x0000002f, + 0x00000116,0x00000115,0x000000cf,0x000300f7,0x00000118,0x00000000,0x000400fa,0x00000116, + 0x00000117,0x00000118,0x000200f8,0x00000117,0x0003003e,0x0000010f,0x000000af,0x0004003d, + 0x0000000e,0x00000119,0x0000010c,0x00050080,0x0000000e,0x0000011a,0x00000119,0x00000074, + 0x0003003e,0x0000010c,0x0000011a,0x000200f9,0x00000118,0x000200f8,0x00000118,0x0004003d, + 0x0000000e,0x0000011b,0x0000010c,0x000500ac,0x0000002f,0x0000011c,0x0000011b,0x00000100, + 0x000400a8,0x0000002f,0x0000011d,0x0000011c,0x000300f7,0x0000011f,0x00000000,0x000400fa, + 0x0000011d,0x0000011e,0x0000011f,0x000200f8,0x0000011e,0x0004003d,0x0000000e,0x00000120, + 0x0000010c,0x000500aa,0x0000002f,0x00000121,0x00000120,0x00000100,0x0004003d,0x0000000e, + 0x00000122,0x0000010f,0x000500ac,0x0000002f,0x00000124,0x00000122,0x00000123,0x000500a7, + 0x0000002f,0x00000125,0x00000121,0x00000124,0x000200f9,0x0000011f,0x000200f8,0x0000011f, + 0x000700f5,0x0000002f,0x00000126,0x0000011c,0x00000118,0x00000125,0x0000011e,0x000300f7, + 0x00000129,0x00000000,0x000400fa,0x00000126,0x00000128,0x0000012a,0x000200f8,0x00000128, + 0x0003003e,0x00000127,0x000000e8,0x000200f9,0x00000129,0x000200f8,0x0000012a,0x0004003d, + 0x0000000e,0x0000012b,0x0000010c,0x000500c4,0x0000000e,0x0000012d,0x0000012b,0x0000012c, + 0x0004003d,0x0000000e,0x0000012e,0x0000010f,0x000500c5,0x0000000e,0x0000012f,0x0000012d, + 0x0000012e,0x0003003e,0x00000127,0x0000012f,0x000200f9,0x00000129,0x000200f8,0x00000129, + 0x0004003d,0x0000000e,0x00000130,0x00000127,0x0003003e,0x000000e7,0x00000130,0x000200f9, + 0x000000ed,0x000200f8,0x000000ed,0x000200f9,0x000000e6,0x000200f8,0x000000e6,0x0004003d, + 0x0000000e,0x00000131,0x000000d4,0x0004003d,0x0000000e,0x00000132,0x000000e7,0x000500c5, + 0x0000000e,0x00000133,0x00000131,0x00000132,0x000200fe,0x00000133,0x00010038,0x00050036, + 0x00000006,0x00000023,0x00000000,0x00000021,0x00030037,0x0000000d,0x00000022,0x000200f8, + 0x00000024,0x0004003b,0x00000013,0x00000136,0x00000007,0x0004003b,0x0000000d,0x00000137, + 0x00000007,0x0004003b,0x00000007,0x0000013d,0x00000007,0x0004003b,0x00000013,0x00000147, + 0x00000007,0x0004003d,0x0000000c,0x00000138,0x00000022,0x0003003e,0x00000137,0x00000138, + 0x00050039,0x0000000e,0x00000139,0x00000011,0x00000137,0x0003003e,0x00000136,0x00000139, + 0x0004003d,0x0000000e,0x0000013a,0x00000136,0x000500ae,0x0000002f,0x0000013c,0x0000013a, + 0x0000013b,0x000300f7,0x0000013f,0x00000000,0x000400fa,0x0000013c,0x0000013e,0x00000141, + 0x000200f8,0x0000013e,0x0003003e,0x0000013d,0x00000140,0x000200f9,0x0000013f,0x000200f8, + 0x00000141,0x0004003d,0x0000000c,0x00000143,0x00000022,0x00040073,0x00000006,0x00000144, + 0x00000143,0x0004003d,0x0000000e,0x00000145,0x00000136,0x00050080,0x0000000e,0x00000146, + 0x00000145,0x00000074,0x0003003e,0x00000147,0x00000146,0x00050039,0x0000000c,0x00000148, + 0x00000016,0x00000147,0x00040073,0x00000006,0x00000149,0x00000148,0x00050081,0x00000006, + 0x0000014a,0x00000144,0x00000149,0x00050085,0x00000006,0x0000014b,0x00000142,0x0000014a, + 0x0003003e,0x0000013d,0x0000014b,0x000200f9,0x0000013f,0x000200f8,0x0000013f,0x0004003d, + 0x00000006,0x0000014c,0x0000013d,0x000200fe,0x0000014c,0x00010038,0x00050036,0x00000006, + 0x00000026,0x00000000,0x00000021,0x00030037,0x0000000d,0x00000025,0x000200f8,0x00000027, + 0x0004003b,0x0000000d,0x00000151,0x00000007,0x0004003b,0x00000013,0x00000155,0x00000007, + 0x0004003d,0x0000000c,0x0000014f,0x00000025,0x00040073,0x00000006,0x00000150,0x0000014f, + 0x0004003d,0x0000000c,0x00000152,0x00000025,0x0003003e,0x00000151,0x00000152,0x00050039, + 0x0000000e,0x00000153,0x00000011,0x00000151,0x00050082,0x0000000e,0x00000154,0x00000153, + 0x00000074,0x0003003e,0x00000155,0x00000154,0x00050039,0x0000000c,0x00000156,0x00000016, + 0x00000155,0x00040073,0x00000006,0x00000157,0x00000156,0x00050081,0x00000006,0x00000158, + 0x00000150,0x00000157,0x00050085,0x00000006,0x00000159,0x00000142,0x00000158,0x000200fe, + 0x00000159,0x00010038,0x00050036,0x0000000c,0x0000002a,0x00000000,0x00000028,0x00030037, + 0x0000000d,0x00000029,0x000200f8,0x0000002b,0x0004003b,0x0000000d,0x0000015c,0x00000007, + 0x0004003b,0x00000013,0x00000160,0x00000007,0x0004003d,0x0000000c,0x0000015d,0x00000029, + 0x0003003e,0x0000015c,0x0000015d,0x00050039,0x0000000e,0x0000015e,0x00000011,0x0000015c, + 0x00050080,0x0000000e,0x0000015f,0x0000015e,0x00000074,0x0003003e,0x00000160,0x0000015f, + 0x00050039,0x0000000c,0x00000161,0x00000016,0x00000160,0x000200fe,0x00000161,0x00010038, + 0x00050036,0x0000000c,0x0000002d,0x00000000,0x00000028,0x00030037,0x0000000d,0x0000002c, + 0x000200f8,0x0000002e,0x0004003b,0x0000000d,0x00000164,0x00000007,0x0004003b,0x00000013, + 0x00000168,0x00000007,0x0004003d,0x0000000c,0x00000165,0x0000002c,0x0003003e,0x00000164, + 0x00000165,0x00050039,0x0000000e,0x00000166,0x00000011,0x00000164,0x00050082,0x0000000e, + 0x00000167,0x00000166,0x00000074,0x0003003e,0x00000168,0x00000167,0x00050039,0x0000000c, + 0x00000169,0x00000016,0x00000168,0x000200fe,0x00000169,0x00010038,0x00050036,0x0000002f, + 0x00000033,0x00000000,0x00000030,0x00030037,0x00000007,0x00000031,0x00030037,0x00000007, + 0x00000032,0x000200f8,0x00000034,0x0004003b,0x00000007,0x0000016c,0x00000007,0x0004003b, + 0x00000007,0x00000170,0x00000007,0x0004003b,0x00000007,0x00000176,0x00000007,0x0004003b, + 0x00000007,0x0000017a,0x00000007,0x0004003b,0x00000007,0x00000180,0x00000007,0x0004003d, + 0x00000006,0x0000016d,0x00000031,0x0004003d,0x00000006,0x0000016e,0x00000031,0x00050085, + 0x00000006,0x0000016f,0x0000016d,0x0000016e,0x0003003e,0x0000016c,0x0000016f,0x0004003d, + 0x00000006,0x00000171,0x0000016c,0x0004007c,0x0000000e,0x00000172,0x00000171,0x000500c7, + 0x0000000e,0x00000174,0x00000172,0x00000173,0x0004007c,0x00000006,0x00000175,0x00000174, + 0x0003003e,0x00000170,0x00000175,0x0004003d,0x00000006,0x00000177,0x0000016c,0x0004003d, + 0x00000006,0x00000178,0x00000170,0x00050083,0x00000006,0x00000179,0x00000177,0x00000178, + 0x0003003e,0x00000176,0x00000179,0x0004003d,0x00000006,0x0000017b,0x00000032,0x0004003d, + 0x00000006,0x0000017c,0x00000170,0x00050085,0x00000006,0x0000017d,0x0000017b,0x0000017c, + 0x00050083,0x00000006,0x0000017f,0x0000017d,0x0000017e,0x0003003e,0x0000017a,0x0000017f, + 0x0004003d,0x00000006,0x00000181,0x0000017a,0x0004003d,0x00000006,0x00000182,0x00000032, + 0x0004003d,0x00000006,0x00000183,0x00000176,0x00050085,0x00000006,0x00000184,0x00000182, + 0x00000183,0x00050081,0x00000006,0x00000185,0x00000181,0x00000184,0x0003003e,0x00000180, + 0x00000185,0x0004003d,0x00000006,0x00000186,0x00000180,0x000500b8,0x0000002f,0x00000188, + 0x00000186,0x00000187,0x000200fe,0x00000188,0x00010038,0x00050036,0x0000000c,0x00000036, + 0x00000000,0x00000028,0x00030037,0x0000000d,0x00000035,0x000200f8,0x00000037,0x0004003b, + 0x00000007,0x0000018b,0x00000007,0x0004003b,0x0000000d,0x0000019d,0x00000007,0x0004003b, + 0x00000007,0x000001a0,0x00000007,0x0004003b,0x000001a4,0x000001a5,0x00000007,0x0004003b, + 0x0000000d,0x000001af,0x00000007,0x0004003b,0x00000007,0x000001b2,0x00000007,0x0004003b, + 0x00000007,0x000001b3,0x00000007,0x0004003b,0x0000000d,0x000001b8,0x00000007,0x0004003b, + 0x0000000d,0x000001bb,0x00000007,0x0004003b,0x00000007,0x000001be,0x00000007,0x0004003b, + 0x00000007,0x000001bf,0x00000007,0x0004003b,0x0000000d,0x000001c5,0x00000007,0x0004003d, + 0x0000000c,0x0000018c,0x00000035,0x00040073,0x00000006,0x0000018d,0x0000018c,0x0003003e, + 0x0000018b,0x0000018d,0x0004003d,0x00000006,0x0000018e,0x0000018b,0x000500ba,0x0000002f, + 0x0000018f,0x0000018e,0x00000187,0x000400a8,0x0000002f,0x00000190,0x0000018f,0x000400a8, + 0x0000002f,0x00000191,0x00000190,0x000300f7,0x00000193,0x00000000,0x000400fa,0x00000191, + 0x00000192,0x00000193,0x000200f8,0x00000192,0x0004003d,0x00000006,0x00000194,0x0000018b, + 0x0004009d,0x0000002f,0x00000195,0x00000194,0x000200f9,0x00000193,0x000200f8,0x00000193, + 0x000700f5,0x0000002f,0x00000196,0x00000190,0x00000037,0x00000195,0x00000192,0x000300f7, + 0x00000198,0x00000000,0x000400fa,0x00000196,0x00000197,0x00000198,0x000200f8,0x00000197, + 0x0004003d,0x00000006,0x00000199,0x0000018b,0x0006000c,0x00000006,0x0000019a,0x00000001, + 0x00000020,0x00000199,0x00040073,0x0000000c,0x0000019b,0x0000019a,0x000200fe,0x0000019b, + 0x000200f8,0x00000198,0x0004003d,0x00000006,0x0000019e,0x0000018b,0x0006000c,0x00000006, + 0x0000019f,0x00000001,0x00000020,0x0000019e,0x0003003e,0x000001a0,0x0000019f,0x00050039, + 0x00000006,0x000001a1,0x0000000a,0x000001a0,0x00040073,0x0000000c,0x000001a2,0x000001a1, + 0x0003003e,0x0000019d,0x000001a2,0x0003003e,0x000001a5,0x000001a6,0x000200f9,0x000001a7, + 0x000200f8,0x000001a7,0x000400f6,0x000001a9,0x000001aa,0x00000000,0x000200f9,0x000001ab, + 0x000200f8,0x000001ab,0x0004003d,0x000001a3,0x000001ac,0x000001a5,0x000500b1,0x0000002f, + 0x000001ae,0x000001ac,0x000001ad,0x000400fa,0x000001ae,0x000001a8,0x000001a9,0x000200f8, + 0x000001a8,0x0004003d,0x0000000c,0x000001b0,0x0000019d,0x0003003e,0x000001af,0x000001b0, + 0x00050039,0x00000006,0x000001b1,0x00000023,0x000001af,0x0003003e,0x000001b2,0x000001b1, + 0x0004003d,0x00000006,0x000001b4,0x0000018b,0x0003003e,0x000001b3,0x000001b4,0x00060039, + 0x0000002f,0x000001b5,0x00000033,0x000001b2,0x000001b3,0x000300f7,0x000001b7,0x00000000, + 0x000400fa,0x000001b5,0x000001b6,0x000001b7,0x000200f8,0x000001b6,0x0004003d,0x0000000c, + 0x000001b9,0x0000019d,0x0003003e,0x000001b8,0x000001b9,0x00050039,0x0000000c,0x000001ba, + 0x0000002a,0x000001b8,0x0003003e,0x0000019d,0x000001ba,0x000200f9,0x000001b7,0x000200f8, + 0x000001b7,0x0004003d,0x0000000c,0x000001bc,0x0000019d,0x0003003e,0x000001bb,0x000001bc, + 0x00050039,0x00000006,0x000001bd,0x00000026,0x000001bb,0x0003003e,0x000001be,0x000001bd, + 0x0004003d,0x00000006,0x000001c0,0x0000018b,0x0003003e,0x000001bf,0x000001c0,0x00060039, + 0x0000002f,0x000001c1,0x00000033,0x000001be,0x000001bf,0x000400a8,0x0000002f,0x000001c2, + 0x000001c1,0x000300f7,0x000001c4,0x00000000,0x000400fa,0x000001c2,0x000001c3,0x000001c4, + 0x000200f8,0x000001c3,0x0004003d,0x0000000c,0x000001c6,0x0000019d,0x0003003e,0x000001c5, + 0x000001c6,0x00050039,0x0000000c,0x000001c7,0x0000002d,0x000001c5,0x0003003e,0x0000019d, + 0x000001c7,0x000200f9,0x000001c4,0x000200f8,0x000001c4,0x000200f9,0x000001aa,0x000200f8, + 0x000001aa,0x0004003d,0x000001a3,0x000001c8,0x000001a5,0x00050080,0x000001a3,0x000001ca, + 0x000001c8,0x000001c9,0x0003003e,0x000001a5,0x000001ca,0x000200f9,0x000001a7,0x000200f8, + 0x000001a9,0x0004003d,0x0000000c,0x000001cb,0x0000019d,0x000200fe,0x000001cb,0x00010038, + 0x00050036,0x0000000c,0x0000003d,0x00000000,0x0000003b,0x00030037,0x0000003a,0x0000003c, + 0x000200f8,0x0000003e,0x0004003b,0x00000013,0x000001ce,0x00000007,0x0004003b,0x000001d7, + 0x000001d8,0x00000007,0x0004003b,0x00000013,0x000001e5,0x00000007,0x0004003b,0x000001ef, + 0x000001f0,0x00000007,0x0004003b,0x000001ff,0x00000200,0x00000007,0x0003003e,0x000001ce, + 0x000000af,0x000200f9,0x000001cf,0x000200f8,0x000001cf,0x000400f6,0x000001d1,0x000001d2, + 0x00000000,0x000200f9,0x000001d3,0x000200f8,0x000001d3,0x0004003d,0x0000000e,0x000001d4, + 0x000001ce,0x000500b0,0x0000002f,0x000001d5,0x000001d4,0x000000cf,0x000400fa,0x000001d5, + 0x000001d0,0x000001d1,0x000200f8,0x000001d0,0x0004003d,0x0000000e,0x000001d9,0x000001ce, + 0x0004003d,0x0000000e,0x000001da,0x000001ce,0x00050041,0x0000000d,0x000001db,0x0000003c, + 0x000001da,0x0004003d,0x0000000c,0x000001dc,0x000001db,0x0004003d,0x0000000e,0x000001dd, + 0x000001ce,0x00050080,0x0000000e,0x000001de,0x000001dd,0x000000cf,0x00050041,0x0000000d, + 0x000001df,0x0000003c,0x000001de,0x0004003d,0x0000000c,0x000001e0,0x000001df,0x00050081, + 0x0000000c,0x000001e1,0x000001dc,0x000001e0,0x00050041,0x0000000d,0x000001e2,0x000001d8, + 0x000001d9,0x0003003e,0x000001e2,0x000001e1,0x000200f9,0x000001d2,0x000200f8,0x000001d2, + 0x0004003d,0x0000000e,0x000001e3,0x000001ce,0x00050080,0x0000000e,0x000001e4,0x000001e3, + 0x000001c9,0x0003003e,0x000001ce,0x000001e4,0x000200f9,0x000001cf,0x000200f8,0x000001d1, + 0x0003003e,0x000001e5,0x000000af,0x000200f9,0x000001e6,0x000200f8,0x000001e6,0x000400f6, + 0x000001e8,0x000001e9,0x00000000,0x000200f9,0x000001ea,0x000200f8,0x000001ea,0x0004003d, + 0x0000000e,0x000001eb,0x000001e5,0x000500b0,0x0000002f,0x000001ed,0x000001eb,0x000001ec, + 0x000400fa,0x000001ed,0x000001e7,0x000001e8,0x000200f8,0x000001e7,0x0004003d,0x0000000e, + 0x000001f1,0x000001e5,0x0004003d,0x0000000e,0x000001f2,0x000001e5,0x00050041,0x0000000d, + 0x000001f3,0x000001d8,0x000001f2,0x0004003d,0x0000000c,0x000001f4,0x000001f3,0x0004003d, + 0x0000000e,0x000001f5,0x000001e5,0x00050080,0x0000000e,0x000001f6,0x000001f5,0x000001ec, + 0x00050041,0x0000000d,0x000001f7,0x000001d8,0x000001f6,0x0004003d,0x0000000c,0x000001f8, + 0x000001f7,0x00050081,0x0000000c,0x000001f9,0x000001f4,0x000001f8,0x00050041,0x0000000d, + 0x000001fa,0x000001f0,0x000001f1,0x0003003e,0x000001fa,0x000001f9,0x000200f9,0x000001e9, + 0x000200f8,0x000001e9,0x0004003d,0x0000000e,0x000001fb,0x000001e5,0x00050080,0x0000000e, + 0x000001fc,0x000001fb,0x000001c9,0x0003003e,0x000001e5,0x000001fc,0x000200f9,0x000001e6, + 0x000200f8,0x000001e8,0x00050041,0x0000000d,0x00000201,0x000001f0,0x000001a6,0x0004003d, + 0x0000000c,0x00000202,0x00000201,0x00050041,0x0000000d,0x00000203,0x000001f0,0x000001ad, + 0x0004003d,0x0000000c,0x00000204,0x00000203,0x00050081,0x0000000c,0x00000205,0x00000202, + 0x00000204,0x00050041,0x0000000d,0x00000206,0x00000200,0x000001a6,0x0003003e,0x00000206, + 0x00000205,0x00050041,0x0000000d,0x00000207,0x000001f0,0x000001c9,0x0004003d,0x0000000c, + 0x00000208,0x00000207,0x00050041,0x0000000d,0x0000020a,0x000001f0,0x00000209,0x0004003d, + 0x0000000c,0x0000020b,0x0000020a,0x00050081,0x0000000c,0x0000020c,0x00000208,0x0000020b, + 0x00050041,0x0000000d,0x0000020d,0x00000200,0x000001c9,0x0003003e,0x0000020d,0x0000020c, + 0x00050041,0x0000000d,0x0000020e,0x00000200,0x000001a6,0x0004003d,0x0000000c,0x0000020f, + 0x0000020e,0x00050041,0x0000000d,0x00000210,0x00000200,0x000001c9,0x0004003d,0x0000000c, + 0x00000211,0x00000210,0x00050081,0x0000000c,0x00000212,0x0000020f,0x00000211,0x000200fe, + 0x00000212,0x00010038, +}; +inline constexpr uint32_t k_common__fused_block32[] = { + 0x07230203,0x00010600,0x0008000b,0x0000000b,0x00000000,0x00020011,0x00000001,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x0005000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00060010,0x00000004,0x00000011, + 0x00000020,0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc,0x00040005,0x00000004, + 0x6e69616d,0x00000000,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015, + 0x00000006,0x00000020,0x00000000,0x00040017,0x00000007,0x00000006,0x00000003,0x0004002b, + 0x00000006,0x00000008,0x00000020,0x0004002b,0x00000006,0x00000009,0x00000001,0x0006002c, + 0x00000007,0x0000000a,0x00000008,0x00000009,0x00000009,0x00050036,0x00000002,0x00000004, + 0x00000000,0x00000003,0x000200f8,0x00000005,0x000100fd,0x00010038, +}; +inline constexpr uint32_t k_common__qkv_attention[] = { + 0x07230203,0x00010600,0x0008000b,0x0000000b,0x00000000,0x00020011,0x00000001,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x0005000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00060010,0x00000004,0x00000011, + 0x00000020,0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc,0x00040005,0x00000004, + 0x6e69616d,0x00000000,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015, + 0x00000006,0x00000020,0x00000000,0x00040017,0x00000007,0x00000006,0x00000003,0x0004002b, + 0x00000006,0x00000008,0x00000020,0x0004002b,0x00000006,0x00000009,0x00000001,0x0006002c, + 0x00000007,0x0000000a,0x00000008,0x00000009,0x00000009,0x00050036,0x00000002,0x00000004, + 0x00000000,0x00000003,0x000200f8,0x00000005,0x000100fd,0x00010038, +}; +inline constexpr uint32_t k_common__gemm_mlp[] = { + 0x07230203,0x00010600,0x0008000b,0x0000000b,0x00000000,0x00020011,0x00000001,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x0005000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00060010,0x00000004,0x00000011, + 0x00000020,0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc,0x00040005,0x00000004, + 0x6e69616d,0x00000000,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015, + 0x00000006,0x00000020,0x00000000,0x00040017,0x00000007,0x00000006,0x00000003,0x0004002b, + 0x00000006,0x00000008,0x00000020,0x0004002b,0x00000006,0x00000009,0x00000001,0x0006002c, + 0x00000007,0x0000000a,0x00000008,0x00000009,0x00000009,0x00050036,0x00000002,0x00000004, + 0x00000000,0x00000003,0x000200f8,0x00000005,0x000100fd,0x00010038, +}; +inline constexpr uint32_t k_common__global_attention[] = { + 0x07230203,0x00010600,0x0008000b,0x0000000b,0x00000000,0x00020011,0x00000001,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x0005000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00060010,0x00000004,0x00000011, + 0x00000020,0x00000001,0x00000001,0x00030003,0x00000002,0x000001cc,0x00040005,0x00000004, + 0x6e69616d,0x00000000,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00040015, + 0x00000006,0x00000020,0x00000000,0x00040017,0x00000007,0x00000006,0x00000003,0x0004002b, + 0x00000006,0x00000008,0x00000020,0x0004002b,0x00000006,0x00000009,0x00000001,0x0006002c, + 0x00000007,0x0000000a,0x00000008,0x00000009,0x00000009,0x00050036,0x00000002,0x00000004, + 0x00000000,0x00000003,0x000200f8,0x00000005,0x000100fd,0x00010038, +}; +struct Module { const char* entry; const uint32_t* words; unsigned count; }; +inline constexpr Module kModules[] = { + {"e4m3-k32-f16/gemm_fp8", k_e4m3_k32_f16__gemm_fp8, (unsigned)(sizeof k_e4m3_k32_f16__gemm_fp8 / sizeof k_e4m3_k32_f16__gemm_fp8[0])}, + {"e4m3-k32-f16/gemm_f16", k_e4m3_k32_f16__gemm_f16, (unsigned)(sizeof k_e4m3_k32_f16__gemm_f16 / sizeof k_e4m3_k32_f16__gemm_f16[0])}, + {"e4m3-k32-f16/window_attend", k_e4m3_k32_f16__window_attend, (unsigned)(sizeof k_e4m3_k32_f16__window_attend / sizeof k_e4m3_k32_f16__window_attend[0])}, + {"e4m3-k32-f16/global_attend", k_e4m3_k32_f16__global_attend, (unsigned)(sizeof k_e4m3_k32_f16__global_attend / sizeof k_e4m3_k32_f16__global_attend[0])}, + {"e4m3-k16-f32/gemm_fp8", k_e4m3_k16_f32__gemm_fp8, (unsigned)(sizeof k_e4m3_k16_f32__gemm_fp8 / sizeof k_e4m3_k16_f32__gemm_fp8[0])}, + {"e4m3-k16-f32/gemm_f16", k_e4m3_k16_f32__gemm_f16, (unsigned)(sizeof k_e4m3_k16_f32__gemm_f16 / sizeof k_e4m3_k16_f32__gemm_f16[0])}, + {"e4m3-k16-f32/window_attend", k_e4m3_k16_f32__window_attend, (unsigned)(sizeof k_e4m3_k16_f32__window_attend / sizeof k_e4m3_k16_f32__window_attend[0])}, + {"e4m3-k16-f32/global_attend", k_e4m3_k16_f32__global_attend, (unsigned)(sizeof k_e4m3_k16_f32__global_attend / sizeof k_e4m3_k16_f32__global_attend[0])}, + {"e4m3-k32-f32/gemm_fp8", k_e4m3_k32_f32__gemm_fp8, (unsigned)(sizeof k_e4m3_k32_f32__gemm_fp8 / sizeof k_e4m3_k32_f32__gemm_fp8[0])}, + {"e4m3-k32-f32/gemm_f16", k_e4m3_k32_f32__gemm_f16, (unsigned)(sizeof k_e4m3_k32_f32__gemm_f16 / sizeof k_e4m3_k32_f32__gemm_f16[0])}, + {"e4m3-k32-f32/window_attend", k_e4m3_k32_f32__window_attend, (unsigned)(sizeof k_e4m3_k32_f32__window_attend / sizeof k_e4m3_k32_f32__window_attend[0])}, + {"e4m3-k32-f32/global_attend", k_e4m3_k32_f32__global_attend, (unsigned)(sizeof k_e4m3_k32_f32__global_attend / sizeof k_e4m3_k32_f32__global_attend[0])}, + {"f16-k16-f32/gemm_fp8", k_f16_k16_f32__gemm_fp8, (unsigned)(sizeof k_f16_k16_f32__gemm_fp8 / sizeof k_f16_k16_f32__gemm_fp8[0])}, + {"f16-k16-f32/gemm_f16", k_f16_k16_f32__gemm_f16, (unsigned)(sizeof k_f16_k16_f32__gemm_f16 / sizeof k_f16_k16_f32__gemm_f16[0])}, + {"f16-k16-f32/window_attend", k_f16_k16_f32__window_attend, (unsigned)(sizeof k_f16_k16_f32__window_attend / sizeof k_f16_k16_f32__window_attend[0])}, + {"f16-k16-f32/global_attend", k_f16_k16_f32__global_attend, (unsigned)(sizeof k_f16_k16_f32__global_attend / sizeof k_f16_k16_f32__global_attend[0])}, + {"f16-k8-f32/gemm_fp8", k_f16_k8_f32__gemm_fp8, (unsigned)(sizeof k_f16_k8_f32__gemm_fp8 / sizeof k_f16_k8_f32__gemm_fp8[0])}, + {"f16-k8-f32/gemm_f16", k_f16_k8_f32__gemm_f16, (unsigned)(sizeof k_f16_k8_f32__gemm_f16 / sizeof k_f16_k8_f32__gemm_f16[0])}, + {"f16-k8-f32/window_attend", k_f16_k8_f32__window_attend, (unsigned)(sizeof k_f16_k8_f32__window_attend / sizeof k_f16_k8_f32__window_attend[0])}, + {"f16-k8-f32/global_attend", k_f16_k8_f32__global_attend, (unsigned)(sizeof k_f16_k8_f32__global_attend / sizeof k_f16_k8_f32__global_attend[0])}, + {"common/ops", k_common__ops, (unsigned)(sizeof k_common__ops / sizeof k_common__ops[0])}, + {"common/gemm_reduce", k_common__gemm_reduce, (unsigned)(sizeof k_common__gemm_reduce / sizeof k_common__gemm_reduce[0])}, + {"common/window_normalize", k_common__window_normalize, (unsigned)(sizeof k_common__window_normalize / sizeof k_common__window_normalize[0])}, + {"common/global_normalize", k_common__global_normalize, (unsigned)(sizeof k_common__global_normalize / sizeof k_common__global_normalize[0])}, + {"common/fused_block32", k_common__fused_block32, (unsigned)(sizeof k_common__fused_block32 / sizeof k_common__fused_block32[0])}, + {"common/qkv_attention", k_common__qkv_attention, (unsigned)(sizeof k_common__qkv_attention / sizeof k_common__qkv_attention[0])}, + {"common/gemm_mlp", k_common__gemm_mlp, (unsigned)(sizeof k_common__gemm_mlp / sizeof k_common__gemm_mlp[0])}, + {"common/global_attention", k_common__global_attention, (unsigned)(sizeof k_common__global_attention / sizeof k_common__global_attention[0])}, +}; +} // namespace mkwvk::opennr_khr_spv diff --git a/scripts/opennr_kernels.py b/scripts/opennr_kernels.py index 76c08f20b..5ad090820 100644 --- a/scripts/opennr_kernels.py +++ b/scripts/opennr_kernels.py @@ -20,6 +20,15 @@ # from the header on purpose: the harness proves what ships, not a fresh compile of it. python -I -B scripts/opennr_kernels.py --prepare DIR # upstream's host sources copied to DIR with SOURCE_PATCHES applied (what nx2/build.py and the harness compile) + +The khr route (gpu/vk/opennr/khr, for GPUs without VK_NV_cooperative_matrix2: AMD's, llvmpipe) is a fourth kind, made +like the first: checked in as gpu/vk/shaders/opennr_khr_spv.h. Its kernel folders hold, per variant (KHR_VARIANTS): +the four matrix kernels written for VK_KHR_cooperative_matrix (gpu/vk/opennr/khr/*.comp, compiled with the variant's +defines); upstream's ops, gemm_reduce, window_normalize and global_normalize compiled from build-time copies with their +hardware E4M3 conversions spelled in integers and their half fma, inverse square root and f32-to-half conversions +made exact (KHR_SOURCE_PATCHES, gpu/vk/opennr/khr/khr_e4m3.glsl and khr_numerics.glsl); upstream's preprocess as it is +(the same module as the other routes'); and a module that does nothing for the four fused kernels, which the khr +route's unfused graph never dispatches. """ import argparse import os @@ -45,6 +54,66 @@ # upstream's build_shaders.ps1: `glslang -V --target-env vulkan1.3 -I` KERNEL_FLAGS = ["-V", "--target-env", "vulkan1.3"] +# ---- the khr route (gpu/vk/opennr/khr/khr_mma.glsl says what each define means) +KHR = ROOT / "gpu" / "vk" / "opennr" / "khr" +KHR_HEADER = OUT / "opennr_khr_spv.h" +# name, defines, the MMA shapes a GPU must list for it (A/B, C/R component types; M x N x K) -- in the order a GPU is +# offered them, the most faithful first. gpu/vk/opennr/opennr_khr.h kVariants is the same table (the test compares). +KHR_VARIANTS = [ + ("e4m3-k32-f16", {"KHR_E4": 1, "KHR_M": 16, "KHR_N": 16, "KHR_K": 32, "KHR_HK": 16, "KHR_ACC32": 0, "KHR_SG": 32}, + "E4M3 16x16x32 into f16, f16 16x16x16 into f16: NVIDIA's own MMA, the bytes of upstream's GLSL route"), + ("e4m3-k16-f32", {"KHR_E4": 1, "KHR_M": 16, "KHR_N": 16, "KHR_K": 16, "KHR_HK": 16, "KHR_ACC32": 1, "KHR_SG": 32}, + "E4M3 16x16x16 into f32 (AMD RDNA 4's WMMA): rounded to half after every k32 step"), + ("e4m3-k32-f32", {"KHR_E4": 1, "KHR_M": 16, "KHR_N": 16, "KHR_K": 32, "KHR_HK": 16, "KHR_ACC32": 1, "KHR_SG": 32}, + "E4M3 16x16x32 into f32: rounded to half after every k32 step"), + ("f16-k16-f32", {"KHR_E4": 0, "KHR_M": 16, "KHR_N": 16, "KHR_K": 16, "KHR_HK": 16, "KHR_ACC32": 1, "KHR_SG": 32}, + "E4M3 widened to f16, f16 16x16x16 into f32 (AMD RDNA 3's WMMA): rounded to half after every k32 step"), + ("f16-k8-f32", {"KHR_E4": 0, "KHR_M": 8, "KHR_N": 8, "KHR_K": 8, "KHR_HK": 8, "KHR_ACC32": 1, "KHR_SG": 8}, + "E4M3 widened to f16, f16 8x8x8 into f32 at 8 lanes (llvmpipe): rounded to half after every k32 step"), +] +# the kernels the khr route writes itself, per variant; those it compiles from upstream with KHR_SOURCE_PATCHES, once; +# those it takes from upstream as they are (the same modules as opennr_kernels_spv.h's); those it never dispatches +KHR_OWN = ["gemm_fp8", "gemm_f16", "window_attend", "global_attend"] +KHR_PATCHED = ["ops", "gemm_reduce", "window_normalize", "global_normalize"] +KHR_UPSTREAM = ["preprocess"] +KHR_UNUSED = ["fused_block32", "qkv_attention", "gemm_mlp", "global_attention"] +# (upstream's kernel -> exact replacements in a build-time copy, each applied exactly once, as SOURCE_PATCHES) +_E4M3_IN_INTEGERS = [ + ("#extension GL_EXT_float_e4m3 : require\n", "", + "no E4M3 type is left in the file once its conversions are spelled in integers (below)"), + ('#define DLSS_E4M3_HW 1\n#include "common.glsl"\n', + '#include "common.glsl"\n#include "khr_e4m3.glsl" // (hookshot: upstream\'s conversions in integers)\n', + "e4m3Hw / e4m3HwPair / e4m3HwToF32 without VK_EXT_shader_float8: khr_e4m3.glsl, equal by upstream's own statement"), +] +_NUMERICS = ('#include "common.glsl"\n', '#include "common.glsl"\n#include "khr_numerics.glsl" // (hookshot)\n', + "the exact half fma, inverse square root and conversions of khr_numerics.glsl") +KHR_SOURCE_PATCHES = { + "ops": _E4M3_IN_INTEGERS, + "gemm_reduce": _E4M3_IN_INTEGERS, + "window_normalize": [ + _NUMERICS, + (" r[c] = fma(q[c], q[c], highSquare);\n", " r[c] = fmaHalf(q[c], q[c], highSquare);\n", + "the half fma rounded once on any GPU (llvmpipe's rounds twice)"), + (" r[c] = fma(k[c], k[c], highSquare);\n", " r[c] = fmaHalf(k[c], k[c], highSquare);\n", "the same, for k"), + (" float16_t qNorm = float16_t(inversesqrt(float(qSum)));\n float16_t kNorm = float16_t(inversesqrt(float(kSum)));\n", + " float16_t qNorm = inverseSqrtHalf(qSum);\n float16_t kNorm = inverseSqrtHalf(kSum);\n", + "RN16 of the exact 1 / sqrt: what upstream's reference computes, for every half; inversesqrt may be 2 ulp off"), + ("float16_t(uintBitsToFloat(aux32[pc.scaleWordOffset + head]))", + "float16_t(roundF16(uintBitsToFloat(aux32[pc.scaleWordOffset + head])))", + "the learned f32 scale rounded to half on the bits, not by a conversion whose rounding mode is the driver's"), + ], + "global_normalize": [ + _NUMERICS, + (" r[c] = float16_t(sum);\n", " r[c] = float16_t(roundF16(sum));\n", + "the f32 square sum rounded to half on the bits (two occurrences: q and k)"), + (" float16_t qNorm = float16_t(inversesqrt(float(qSum)));\n float16_t kNorm = float16_t(inversesqrt(float(kSum)));\n", + " float16_t qNorm = inverseSqrtHalf(qSum);\n float16_t kNorm = inverseSqrtHalf(kSum);\n", + "RN16 of the exact 1 / sqrt, as for the window blocks"), + ("float16_t(uintBitsToFloat(aux32[pc.scaleWordOffset + head]))", + "float16_t(roundF16(uintBitsToFloat(aux32[pc.scaleWordOffset + head])))", "the learned scale, as above"), + ], +} + # Upstream's host code is built with MSVC only. What clang (and GCC) refuse in it, as exact replacements applied to a # copy in the build's own folder (prepare_sources): third_party/ stays byte for byte upstream's, and each change @@ -55,6 +124,15 @@ "the enclosing class Kernels, before Kernels is complete. MSVC accepts it; clang and GCC refuse it ('default " "member initializer needed within definition of enclosing class', CWG 1397). A user-provided constructor is " "the smallest change that compiles everywhere; nothing aggregate-initializes a Chain."), + ("vk_context.cpp", " subgroupInfo.requiredSubgroupSize = requiredSubgroupSize;\n", + " if (requiredSubgroupSize) // (hookshot: the khr route's subgroup size, scripts/opennr_kernels.py)\n" + " if (const char* lanes = getenv(\"HOOKSHOT_OPENNR_SUBGROUP_SIZE\"); lanes && atoi(lanes) > 0)\n" + " requiredSubgroupSize = (uint32_t)atoi(lanes);\n" + " subgroupInfo.requiredSubgroupSize = requiredSubgroupSize;\n", + "Upstream makes every subgroup pipeline with requiredSubgroupSize 32, which its NVIDIA-only kernels assume. The " + "khr route's kernels are made for a variant's subgroup size (32, or 8 on llvmpipe, whose only size it is: 32 there " + "is invalid usage); gpu/vk/opennr/opennr_net.cpp sets the variable for that route only, so every other route " + "creates exactly upstream's pipelines."), ] # The vendored host files the renderer compiles (not upstream's dlss5vk tool, main.cpp and verify.cpp, which only # the harness links) @@ -160,6 +238,82 @@ def compile_kernel(glslang, name, spv): check=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) +def khr_folder(variant): + """the kernel folder of a khr variant, beside `shaders` (what gpu/vk/opennr/opennr_net.cpp reads)""" + return "shaders-khr-" + variant + + +def compile_khr(glslang, tmp): + """[(entry name, words)] of every khr module: 'variant/name' for KHR_OWN, 'common/name' for the rest""" + tmp = Path(tmp) + def run(src, spv, defines=()): + r = subprocess.run([glslang, *KERNEL_FLAGS, *["-D%s=%s" % kv for kv in defines], "-I" + str(KHR), + "-I" + str(SHADERS), str(src), "-o", str(spv)], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + if r.returncode: + raise RuntimeError("glslang failed on %s %s:\n%s" % (src.name, " ".join("%s=%s" % kv for kv in defines), + r.stdout.decode("utf-8", "replace")[-3000:])) + return words_of(spv) + modules = [] + for variant, defines, _ in KHR_VARIANTS: + for name in KHR_OWN: + modules.append(("%s/%s" % (variant, name), run(KHR / (name + ".comp"), tmp / ("%s-%s.spv" % (variant, name)), + sorted(defines.items())))) + for name in KHR_PATCHED: + text = (SHADERS / (name + ".comp")).read_text(encoding="utf-8") + for old, new, why in KHR_SOURCE_PATCHES[name]: + count = 2 if name == "global_normalize" and old == " r[c] = float16_t(sum);\n" else 1 + if text.count(old) != count: + raise RuntimeError("khr patch for %s.comp no longer matches upstream exactly (%s)" % (name, why)) + text = text.replace(old, new) + copy = tmp / (name + ".khr.comp") + copy.write_text(text, encoding="utf-8") + modules.append(("common/" + name, run(copy, tmp / (name + ".khr.spv")))) + for name in KHR_UNUSED: + modules.append(("common/" + name, run(KHR / "unused.comp", tmp / (name + ".unused.spv")))) + return modules + + +def khr_header(modules): + out = ["// Generated by scripts/opennr_kernels.py from gpu/vk/opennr/khr and third_party/opendlss-nr/shaders: do not edit.", + "// The khr route's SPIR-V (glslang %s): 'variant/name' for its own matrix kernels, 'common/name' for" % + " ".join(KERNEL_FLAGS), "// the rest. gpu/vk/vk_opennr.cpp writes them out as the shaders-khr- folders.", + "#pragma once", "", "#include ", "", "namespace mkwvk::opennr_khr_spv {"] + for entry, words in modules: + ident = entry.replace("/", "__").replace("-", "_") + out.append("inline constexpr uint32_t k_%s[] = {" % ident) + for i in range(0, len(words), 8): + out.append(" " + ",".join("0x%08x" % w for w in words[i:i + 8]) + ",") + out.append("};") + out += ["struct Module { const char* entry; const uint32_t* words; unsigned count; };", + "inline constexpr Module kModules[] = {"] + for entry, _ in modules: + ident = entry.replace("/", "__").replace("-", "_") + out.append(' {"%s", k_%s, (unsigned)(sizeof k_%s / sizeof k_%s[0])},' % (entry, ident, ident, ident)) + out += ["};", "} // namespace mkwvk::opennr_khr_spv", ""] + return "\n".join(out) + + +def khr_header_words(text): + """entry -> SPIR-V words of the checked-in khr header""" + idents = dict(re.findall(r'\{"([\w/-]+)", k_(\w+),', text)) + words = {m.group(1): [int(w, 16) for w in re.findall(r"0x([0-9a-f]{8})", m.group(2))] + for m in re.finditer(r"inline constexpr uint32_t k_(\w+)\[\] = \{(.*?)\};", text, re.S)} + return {entry: words[ident] for entry, ident in idents.items()} + + +def khr_folder_modules(variant, khr_words, upstream_words): + """name -> words of every module of a khr variant's folder: the thirteen nr::Kernels loads""" + out = {} + for name in KERNELS: + if name in KHR_OWN: + out[name] = khr_words["%s/%s" % (variant, name)] + elif name in KHR_UPSTREAM: + out[name] = upstream_words[name] + else: + out[name] = khr_words["common/" + name] + return out + + def words_of(spv): data = Path(spv).read_bytes() if len(data) % 4 or data[:4] != bytes((0x03, 0x02, 0x23, 0x07)): @@ -220,8 +374,15 @@ def main(): shaders.mkdir(parents=True, exist_ok=True) for name, words in modules.items(): (shaders / (name + ".spv")).write_bytes(b"".join(w.to_bytes(4, "little") for w in words)) + khr = khr_header_words(KHR_HEADER.read_text(encoding="utf-8")) + for variant, _, _ in KHR_VARIANTS: + folder = Path(a.materialize) / khr_folder(variant) + folder.mkdir(parents=True, exist_ok=True) + for name, words in khr_folder_modules(variant, khr, modules).items(): + (folder / (name + ".spv")).write_bytes(b"".join(w.to_bytes(4, "little") for w in words)) n = len(generate_ptx(Path(a.materialize) / "ptx")) - print("materialized %d SPIR-V modules and %d PTX kernels in %s" % (len(modules), n, a.materialize)) + print("materialized %d SPIR-V modules, %d khr variants and %d PTX kernels in %s" % + (len(modules), len(KHR_VARIANTS), n, a.materialize)) return 0 glslang = a.glslang or shutil.which("glslangValidator") or shutil.which("glslang") @@ -238,6 +399,27 @@ def main(): subprocess.run([a.spirv_val, "--target-env", "vulkan1.3", str(spv)], check=True) modules.append((name, words_of(spv))) made = kernel_header(modules) + khr_modules = compile_khr(glslang, tmp) + if a.spirv_val: + for entry, words in khr_modules: + spv = Path(tmp) / "val.spv" + spv.write_bytes(b"".join(w.to_bytes(4, "little") for w in words)) + r = subprocess.run([a.spirv_val, "--target-env", "vulkan1.3", str(spv)], stdout=subprocess.PIPE, + stderr=subprocess.STDOUT) + if r.returncode: + raise RuntimeError("spirv-val refused khr %s:\n%s" % (entry, r.stdout.decode("utf-8", "replace"))) + khr_made = khr_header(khr_modules) + if a.check: + have = khr_header_words(KHR_HEADER.read_text(encoding="utf-8")) if KHR_HEADER.is_file() else {} + for entry, words in khr_modules: + if have.get(entry) != words: + bad.append("khr " + entry) + print("khr %s: the checked-in SPIR-V differs from a compile of its source" % entry, file=sys.stderr) + if sorted(have) != sorted(e for e, _ in khr_modules): + bad.append("(the khr module list)") + else: + KHR_HEADER.write_text(khr_made, encoding="utf-8") + print("wrote %s (%d modules, %d bytes)" % (KHR_HEADER.relative_to(ROOT), len(khr_modules), len(khr_made))) if a.check: have = header_words(KERNEL_HEADER.read_text(encoding="utf-8")) if KERNEL_HEADER.is_file() else {} for name, words in modules: @@ -272,8 +454,8 @@ def main(): if bad: print("%d header(s) do not match their source: %s" % (len(bad), ", ".join(bad)), file=sys.stderr) return 1 - print("opennr kernels: %d kernels and %d frame passes %s" % (len(KERNELS), len(FRAME_SHADERS), - "match" if a.check else "written")) + print("opennr kernels: %d kernels, %d khr variants and %d frame passes %s" % + (len(KERNELS), len(KHR_VARIANTS), len(FRAME_SHADERS), "match" if a.check else "written")) return 0 diff --git a/tests/test_opennr_kernels.py b/tests/test_opennr_kernels.py index 595040d02..9414be0cf 100644 --- a/tests/test_opennr_kernels.py +++ b/tests/test_opennr_kernels.py @@ -1,5 +1,8 @@ """Open neural rendering's kernels: the checked-in SPIR-V still matches its sources, upstream's sources still take the -portability patches the renderer is built with, and the PTX generators still produce every variant. +portability patches the renderer is built with, and the PTX generators still produce every variant. And the khr +route's: its checked-in SPIR-V (gpu/vk/shaders/opennr_khr_spv.h) matches gpu/vk/opennr/khr and the patched copies of +upstream's kernels, and its variant table is the same in the script that compiles it and the header the renderer +chooses with (gpu/vk/opennr/opennr_khr.h), so the renderer never picks a folder whose kernels assume another shape. The SPIR-V headers (gpu/vk/shaders/opennr_kernels_spv.h, opennr_pre/post_comp_spv.h) are compiled from third_party/opendlss-nr/shaders and gpu/vk/shaders by scripts/opennr_kernels.py; --check recompiles and compares. @@ -9,6 +12,7 @@ python -I -B tests/test_opennr_kernels.py --glslang glslangValidator --spirv-val spirv-val """ import argparse +import re import subprocess import sys import tempfile @@ -35,9 +39,38 @@ def main(): stdout=subprocess.PIPE, stderr=subprocess.STDOUT) out = r.stdout.decode("utf-8", "replace") print(out.strip()) - if r.returncode or "13 kernels and 2 frame passes match" not in out: + want = "13 kernels, %d khr variants and 2 frame passes match" % len(opennr_kernels.KHR_VARIANTS) + if r.returncode or want not in out: fail("the checked-in SPIR-V headers do not match their sources (python -I -B scripts/opennr_kernels.py)") + # the khr variant table, twice: the script's (what each folder is compiled for) and the renderer's (what it chooses) + header = (ROOT / "gpu" / "vk" / "opennr" / "opennr_khr.h").read_text(encoding="utf-8") + rows = re.findall(r'\{"([\w-]+)", (true|false), (\d+), (\d+), (\d+), (\d+), (true|false), (\d+), "', header) + table = [(n, int(e == "true"), int(m), int(nn), int(k), int(hk), int(acc == "true"), int(sg)) + for n, e, m, nn, k, hk, acc, sg in rows] + script = [(n, d["KHR_E4"], d["KHR_M"], d["KHR_N"], d["KHR_K"], d["KHR_HK"], d["KHR_ACC32"], d["KHR_SG"]) + for n, d, _ in opennr_kernels.KHR_VARIANTS] + if table != script: + fail("gpu/vk/opennr/opennr_khr.h kVariants %s is not scripts/opennr_kernels.py KHR_VARIANTS %s" % (table, script)) + for name in opennr_kernels.KERNELS: # (every one of the thirteen comes from exactly one place in a khr folder) + homes = [name in group for group in (opennr_kernels.KHR_OWN, opennr_kernels.KHR_PATCHED, + opennr_kernels.KHR_UPSTREAM, opennr_kernels.KHR_UNUSED)] + if homes.count(True) != 1: + fail("the khr folders take %s from %d places" % (name, homes.count(True))) + # the materialized folders hold all thirteen, and no khr module asks for an NV extension + with tempfile.TemporaryDirectory(prefix="opennr-khr-test-") as tmp: + khr = opennr_kernels.khr_header_words(opennr_kernels.KHR_HEADER.read_text(encoding="utf-8")) + upstream = opennr_kernels.header_words(opennr_kernels.KERNEL_HEADER.read_text(encoding="utf-8")) + for variant, _, _ in opennr_kernels.KHR_VARIANTS: + modules = opennr_kernels.khr_folder_modules(variant, khr, upstream) + if sorted(modules) != sorted(opennr_kernels.KERNELS): + fail("the khr folder %s holds %s" % (variant, sorted(modules))) + for entry, words in khr.items(): + text = b"".join(w.to_bytes(4, "little") for w in words) + for nv in (b"SPV_NV_cooperative_matrix2", b"SPV_NV_", b"TensorAddressingNV"): + if nv in text: + fail("khr module %s names %s" % (entry, nv.decode())) + with tempfile.TemporaryDirectory(prefix="opennr-kernels-test-") as tmp: # every portability patch applies exactly once (prepare_sources raises otherwise), and changes only what it says src = opennr_kernels.prepare_sources(Path(tmp) / "src") From 5b9508371de3967e6814c7323e39d7b6ab9a7491 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 18:28:09 -0600 Subject: [PATCH 109/119] feat(vk): the open backend runs the khr route where upstream's NVIDIA routes cannot The renderer side of the khr kernels: opennr_net gains Route::Khr (upstream's unfused graph, every PTX family off, the kernels of shaders-khr-, pipelines made at the variant's subgroup size), and vk_opennr chooses it. - device_created() asks the driver's cooperative matrix shapes and picks the first khr variant it lists (opennr_khr.h), and logs the shapes, the variant and why not the others. Upstream's routes still run where VK_NV_cooperative_matrix2 (all seven features) and E4M3 matrices are; everywhere else with VK_KHR_cooperative_matrix the khr route does. RX_VK_OPENNR_ROUTE=khr forces it on any GPU (and then only VK_EXT_shader_float8 is asked for), RX_VK_OPENNR_KHR_VARIANT picks a variant. - Every khr variant's folder is written out beside upstream's kernels, hashed with them. - selected() is true on any GPU that is not NVIDIA's, so on an AMD card the Backend row's Auto falls to Open and the Neural tab says what Open needs (a model folder) instead of NGX's NVIDIA-only refusal; the khr route asks for nothing the renderer does not already, but E4M3 matrices where there are any. - The Neural rendering and Backend rows' help says Open runs on NVIDIA RTX 40/50 and AMD RX 7000/9000. Co-Authored-By: Claude Opus 5.5 --- gpu/vk/opennr/opennr_net.cpp | 17 +++- gpu/vk/opennr/opennr_net.h | 13 ++-- gpu/vk/vk_menu.cpp | 10 ++- gpu/vk/vk_opennr.cpp | 146 +++++++++++++++++++++++++++++------ gpu/vk/vk_opennr.h | 5 +- 5 files changed, 152 insertions(+), 39 deletions(-) diff --git a/gpu/vk/opennr/opennr_net.cpp b/gpu/vk/opennr/opennr_net.cpp index 76856c391..b59cb4761 100644 --- a/gpu/vk/opennr/opennr_net.cpp +++ b/gpu/vk/opennr/opennr_net.cpp @@ -13,6 +13,7 @@ #include #include "json.h" +#include "opennr_khr.h" #include "kernels.h" #include "nr_graph.h" #include "nr_model.h" @@ -136,11 +137,17 @@ void fall_back_to_barriers(Network* n) { const char* route_name(Route route) { return route == Route::Fast ? "PTX kernels through VK_NV_cuda_kernel_launch, counter chaining" : route == Route::Glsl ? "the fused GLSL kernels, no PTX" + : route == Route::Khr ? "the khr kernels (VK_KHR_cooperative_matrix only), unfused" : "the GLSL reference kernels, unfused"; } Network* create(const Device& d, const std::string& model_dir, const std::string& kernel_dir, Route route, - std::string* error) { + const char* khr_variant, std::string* error) { + const opennr_khr::Variant* khr = route == Route::Khr ? opennr_khr::find(khr_variant) : nullptr; + if (route == Route::Khr && !khr) { + if (error) *error = std::string("no khr kernel variant named ") + (khr_variant ? khr_variant : "(none)"); + return nullptr; + } // Upstream's route switches are environment variables its kernels read once, at first use, so they are set // before any of it runs. The GLSL routes also point the PTX folder at an empty one: a PTX kernel reached anyway // would then fail to load, loudly, instead of calling a CUDA launch this device may not have. @@ -152,13 +159,17 @@ Network* create(const Device& d, const std::string& model_dir, const std::string set_env("DLSS5VK_PTX_DIR", (kernel_dir + "/no-ptx").c_str()); nr::Kernels::setChainEnabled(false); } + // (the khr kernels are made for their variant's subgroup size: the patched copy of upstream's vk_context.cpp makes + // its pipelines with it, scripts/opennr_kernels.py SOURCE_PATCHES; every other route keeps upstream's 32) + set_env("HOOKSHOT_OPENNR_SUBGROUP_SIZE", khr ? std::to_string(khr->subgroup).c_str() : "0"); auto n = std::make_unique(); n->route = route; try { ovk::volkUseInstanceProcAddr(d.get_instance_proc_addr); n->context = std::make_unique(d.instance, d.physical, d.device, d.queue_family, d.queue_index); n->model = std::make_unique(*n->context, model_dir, false); // (hashed by check_model already) - n->kernels = std::make_unique(*n->context, kernel_dir + "/shaders"); + n->kernels = std::make_unique( + *n->context, kernel_dir + (khr ? std::string("/shaders-khr-") + khr->name : std::string("/shaders"))); n->kernels->setSiluTable(ref::siluTable()); try { const nr::Tensor& b = n->model->tensor(70, 0, "blend_scale"); @@ -188,7 +199,7 @@ bool build(Network* n, uint32_t width, uint32_t height, Built* out, std::string* n->features = nullptr; const nr::Geometry g = nr::Geometry::fromValid(width, height); nr::Graph::Options options; - options.fusedBlocks = n->route != Route::Reference; + options.fusedBlocks = n->route != Route::Reference && n->route != Route::Khr; // (khr: its kernels are the unfused ones) n->graph = std::make_unique(*n->context, *n->model, *n->kernels, g, options); n->features = n->graph->allocate("input features", g.fullWidth * g.fullHeight, 16, nr::Format::F32); // A warm-up record and run (upstream's demo does the same): the first record allocates every activation, diff --git a/gpu/vk/opennr/opennr_net.h b/gpu/vk/opennr/opennr_net.h index dd6ed37f1..b5ecb1016 100644 --- a/gpu/vk/opennr/opennr_net.h +++ b/gpu/vk/opennr/opennr_net.h @@ -3,8 +3,9 @@ // includes it. The two cannot meet in one translation unit: upstream's code calls Vulkan through the volk shim // (gpu/vk/opennr/volk.h), the renderer through vkx (vk_loader.h), and both spell the functions the same. // -// This is also the seam an AMD port replaces: everything here is upstream's kernels on upstream's buffers, and the -// renderer's side only hands it a device and reads two buffers back (docs/neural-rendering.md, "An AMD route"). +// The renderer's side only hands it a device and reads two buffers back, whatever kernels run behind it: upstream's +// (the Fast, Glsl and Reference routes, NVIDIA-only) or the khr route's (gpu/vk/opennr/khr, VK_KHR_cooperative_matrix +// alone: AMD and the rest), which run upstream's unfused graph on kernels of their own (docs/neural-rendering.md). // // Nothing here throws: upstream's code reports with exceptions, which are caught at this boundary and come back as // text. Nothing here reads or writes the frame; the renderer's two passes do (gpu/vk/shaders/opennr_*.comp). @@ -42,6 +43,7 @@ enum class Route { Fast, ///< upstream's default: PTX through VK_NV_cuda_kernel_launch, counter chaining Glsl, ///< the fused GLSL kernels only (every DLSS5VK_PTX_* off): no CUDA launch needed Reference, ///< the least fused GLSL route (DLSS5VK_UNFUSED=1): every intermediate materialized, up to 2560x1440 + Khr, ///< upstream's unfused graph on the khr kernels (gpu/vk/opennr/khr): no NV extension at all }; /// What a build for one size gives the renderer: the f32 [full rows][16] input it writes and the f32 [full rows][4] @@ -57,10 +59,11 @@ struct Built { class Network; /// Loads the model (already checked: its hashes are not computed again) and the kernels from `kernel_dir` -/// (shaders/*.spv and ptx/*.ptx). Submits uploads on the device's queue and waits for them: the caller holds whatever -/// lock that queue takes. Null and `error` on failure. +/// (shaders/*.spv and ptx/*.ptx; for the khr route shaders-khr-/*.spv, a name of opennr_khr.h kVariants). +/// Submits uploads on the device's queue and waits for them: the caller holds whatever lock that queue takes. Null and +/// `error` on failure. [[nodiscard]] Network* create(const Device& device, const std::string& model_dir, const std::string& kernel_dir, - Route route, std::string* error); + Route route, const char* khr_variant, std::string* error); /// The graph for a frame of w x h, recorded once into a secondary command buffer that record() then executes every /// frame (nothing is allocated per frame). The previous size's graph is released: the device must be idle. The first /// build compiles every pipeline and JITs every PTX module, which is most of a second. diff --git a/gpu/vk/vk_menu.cpp b/gpu/vk/vk_menu.cpp index 7a100f92e..12ee2aac5 100644 --- a/gpu/vk/vk_menu.cpp +++ b/gpu/vk/vk_menu.cpp @@ -659,12 +659,14 @@ Row rows[] = { // look dead for a whole release (docs/upscaling.md). {TAB_NEURAL, "Neural rendering", &opts.nr, 0, 1, 1, tx_onoff, "DLSS 5 neural rendering: NVIDIA's model goes over the finished frame and rebuilds detail, tone and structure in it. " - "Needs an NVIDIA RTX card and NVIDIA's model file (readme.md; Backend says how it is reached); the rows below are the model's own " - "settings and do nothing while this is Off.", hn_nr}, + "Needs an NVIDIA RTX card and NVIDIA's model file, or, through Open, an NVIDIA RTX 40/50 or AMD RX 7000/9000 card and a model " + "folder you supply (readme.md; Backend says how it is reached); the rows below are the model's own settings and do nothing " + "while this is Off.", hn_nr}, {TAB_NEURAL, "Backend", &opts.nr_backend, 0, 3, 1, tx_nr_backend, "What runs the model. Streamline and NGX direct are NVIDIA's runtime; Open is OpenDLSS-NR, an open Vulkan network " - "that reads a model folder you supply (nr-model in the game folder). Auto takes Streamline, then NGX direct, then " - "Open where a model folder is there. The rows below apply to whichever runs (readme.md).", hn_nr_backend}, + "for NVIDIA and AMD cards that reads a model folder you supply (nr-model in the game folder). Auto takes Streamline, " + "then NGX direct, then Open where a model folder is there, and Open on a card that is not NVIDIA's. The rows below " + "apply to whichever runs (readme.md).", hn_nr_backend}, {TAB_NEURAL, "Model", &opts.nr_model, 0, 3, 1, tx_nr_model, "How much work the model does per frame: Performance is the cheapest, DLAA the most expensive, Quality the model's " "own default. Streamline 2.14's plugin ignores this one -- it is sent correctly and a later NVIDIA release is " diff --git a/gpu/vk/vk_opennr.cpp b/gpu/vk/vk_opennr.cpp index 56621d255..bcda8ef9f 100644 --- a/gpu/vk/vk_opennr.cpp +++ b/gpu/vk/vk_opennr.cpp @@ -21,9 +21,11 @@ #include #include +#include "opennr/opennr_khr.h" #include "opennr/opennr_net.h" #include "opennr_ptx.h" // (nx2/build.py generates it from third_party/opendlss-nr/scripts/ptx) #include "shaders/opennr_kernels_spv.h" +#include "shaders/opennr_khr_spv.h" #include "shaders/opennr_post_comp_spv.h" #include "shaders/opennr_pre_comp_spv.h" #include "vk_camera_motion.h" @@ -64,6 +66,7 @@ struct State { VkPhysicalDeviceShaderSMBuiltinsFeaturesNV sm{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV}; bool device_ok{}; opennr_net::Route route = opennr_net::Route::Fast; + const opennr_khr::Variant* khr{}; // (the khr route's kernel variant, when that is the route) // the model std::atomic phase{kIdle}; std::atomic check_done{}; @@ -126,9 +129,15 @@ std::string model_directory() { return game_folder() + "/nr-model"; } -/// OpenDLSS-NR's host code reads its kernels from a folder (shaders/*.spv, ptx/*.ptx). The renderer carries them -/// (the SPIR-V checked in, the PTX generated at build time) and writes them out once, to a folder named by their -/// hash, so a stale folder from another build is never read. +/// RX_VK_OPENNR_ROUTE=khr: the khr route even on a GPU that runs upstream's (its variant: RX_VK_OPENNR_KHR_VARIANT) +bool khr_forced() { + const char* r = getenv("RX_VK_OPENNR_ROUTE"); + return r && !strcmp(r, "khr"); +} + +/// OpenDLSS-NR's host code reads its kernels from a folder (shaders/*.spv, ptx/*.ptx; the khr route's from +/// shaders-khr-/*.spv). The renderer carries them (the SPIR-V checked in, the PTX generated at build time) and +/// writes them out once, to a folder named by their hash, so a stale folder from another build is never read. std::string materialize_kernels(std::string* error) { uint64_t h = 1469598103934665603ull; auto mix = [&](const void* data, size_t n) { @@ -136,6 +145,7 @@ std::string materialize_kernels(std::string* error) { for (size_t i = 0; i < n; i++) h = (h ^ p[i]) * 1099511628211ull; }; for (const auto& m : opennr_spv::kModules) mix(m.words, m.count * 4u), mix(m.name, strlen(m.name)); + for (const auto& m : opennr_khr_spv::kModules) mix(m.words, m.count * 4u), mix(m.entry, strlen(m.entry)); for (const auto& f : opennr_ptx::kFiles) mix(f.text, strlen(f.text)), mix(f.name, strlen(f.name)); char tag[24]; snprintf(tag, sizeof tag, "%016llx", (unsigned long long)h); @@ -154,6 +164,21 @@ std::string materialize_kernels(std::string* error) { }; for (const auto& m : opennr_spv::kModules) if (!write(dir / "shaders" / (std::string(m.name) + ".spv"), m.words, m.count * 4u)) return {}; + // (a khr variant's folder: its own matrix kernels, the route's common ones, and upstream's vendor-neutral ones -- + // the same thirteen names; scripts/opennr_kernels.py khr_folder_modules is the same rule) + for (const opennr_khr::Variant& v : opennr_khr::kVariants) { + const std::filesystem::path folder = dir / (std::string("shaders-khr-") + v.name); + std::filesystem::create_directories(folder, ec); + for (const auto& m : opennr_spv::kModules) { + const uint32_t* words = m.words; + unsigned count = m.count; + for (const char* prefix : {v.name, "common"}) + for (const auto& k : opennr_khr_spv::kModules) + if (words == m.words && std::string(k.entry) == std::string(prefix) + "/" + m.name) + words = k.words, count = k.count; + if (!write(folder / (std::string(m.name) + ".spv"), words, count * 4u)) return {}; + } + } for (const auto& f : opennr_ptx::kFiles) if (!write(dir / "ptx" / f.name, f.text, strlen(f.text))) return {}; if (!write(dir / "complete", "", 0)) return {}; @@ -350,7 +375,7 @@ bool load(State& s, uint32_t w, uint32_t h) { { std::lock_guard qk(dev.present_mu); queue_flush_locked(); - s.net = opennr_net::create(d, s.model_dir, kernels, s.route, &error); + s.net = opennr_net::create(d, s.model_dir, kernels, s.route, s.khr ? s.khr->name : nullptr, &error); if (s.net && !opennr_net::build(s.net, w, h, &s.built, &error)) { device_wait_idle_locked(); std::lock_guard pq(dev.present_queue_mu); // (upstream's context waits for the device as it goes) @@ -421,12 +446,15 @@ void read_timing(State& s, VkCommandBuffer cmd, uint32_t slot) { bool selected() { // The device is made for the network (its extensions and features, below) when it can be wanted this run: the // Backend row's Open, RX_VK_NR_BACKEND=open or RX_VK_DLSS_NR_BACKEND=open|3, or a model folder already in place - // (so Auto can fall to it). Asked once, at device creation: the device cannot gain extensions afterwards, so a - // model folder put in place later wants a restart, and why() says so. + // (so Auto can fall to it), or a GPU that is not NVIDIA's -- AMD's above all, where Open is the only backend there + // is, and whose khr route asks for nothing the renderer does not already (only E4M3 matrices, where there are any). + // Asked once, at device creation (dev.props is the GPU by then): the device cannot gain extensions afterwards, so a + // model folder put in place later on an NVIDIA card wants a restart, and why() says so. static const bool open = [] { if (const char* e = getenv("RX_VK_NR_BACKEND"); e && !strcmp(e, "open")) return true; if (const char* e = getenv("RX_VK_DLSS_NR_BACKEND"); e && (!strcmp(e, "open") || !strcmp(e, "3"))) return true; if (opts.nr_backend == 3) return true; + if (dev.physical && dev.props.vendorID != 0x10de) return true; // (not NVIDIA: Open, the khr route) FILE* f = fopen((model_directory() + "/manifest.json").c_str(), "rb"); if (f) fclose(f); return f != nullptr; @@ -450,10 +478,18 @@ void device_extensions(std::vector& want, const std::vector props(n, {VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_KHR}); + vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR(dev.physical, &n, props.data()); + auto type = [](VkComponentTypeKHR c) { + return c == VK_COMPONENT_TYPE_FLOAT16_KHR ? "f16" + : c == VK_COMPONENT_TYPE_FLOAT32_KHR ? "f32" + : c == VK_COMPONENT_TYPE_FLOAT8_E4M3_EXT ? "e4m3" + : c == VK_COMPONENT_TYPE_FLOAT8_E5M2_EXT ? "e5m2" + : c == VK_COMPONENT_TYPE_BFLOAT16_KHR ? "bf16" + : "int"; + }; + for (const auto& p : props) { + kd.shapes.push_back({p.MSize, p.NSize, p.KSize, p.AType, p.BType, p.CType, p.ResultType, p.scope}); + if (p.scope != VK_SCOPE_SUBGROUP_KHR || !strcmp(type(p.AType), "int")) continue; + char one[64]; + snprintf(one, sizeof one, "%s%ux%ux%u %s>%s", shapes.empty() ? "" : ", ", p.MSize, p.NSize, p.KSize, + type(p.AType), type(p.ResultType)); + shapes += one; + } + } + std::string khr_why; + const char* forced_variant = getenv("RX_VK_OPENNR_KHR_VARIANT"); + s.khr = dev.coop_matrix ? opennr_khr::choose(kd, forced_variant, &khr_why) : nullptr; + if (!dev.coop_matrix) khr_why = "no VK_KHR_cooperative_matrix"; + + // The route: upstream's fast one where the CUDA launch is, its GLSL one where only its matrices are, the khr one + // anywhere else it can run; RX_VK_OPENNR_ROUTE over that, where the GPU allows it + if (cuda) s.route = opennr_net::Route::Fast; + else if (nv) s.route = opennr_net::Route::Glsl; + else s.route = opennr_net::Route::Khr; if (const char* r = getenv("RX_VK_OPENNR_ROUTE")) { - if (!strcmp(r, "glsl")) s.route = opennr_net::Route::Glsl; - else if (!strcmp(r, "reference")) s.route = opennr_net::Route::Reference; - else if (!strcmp(r, "fast") && !cuda) logf("vk: open NR: RX_VK_OPENNR_ROUTE=fast needs VK_NV_cuda_kernel_launch"); + if (!strcmp(r, "khr")) s.route = opennr_net::Route::Khr; + else if (!strcmp(r, "glsl") && nv) s.route = opennr_net::Route::Glsl; + else if (!strcmp(r, "reference") && nv) s.route = opennr_net::Route::Reference; + else if (!strcmp(r, "fast") && cuda) s.route = opennr_net::Route::Fast; + else logf("vk: open NR: RX_VK_OPENNR_ROUTE=%s cannot run here (%s); %s", r, + nv ? "no VK_NV_cuda_kernel_launch" : "upstream's routes need VK_NV_cooperative_matrix2 and E4M3 matrices", + opennr_net::route_name(s.route)); } + if (s.route == opennr_net::Route::Khr && !s.khr) + missing += std::string(missing.empty() ? "" : "; ") + "matrices it can use (upstream's routes need " + "VK_NV_cooperative_matrix2 and E4M3 matrices; the khr route found " + khr_why + ")"; + s.device_ok = missing.empty(); + logf("vk: open NR: cooperative matrices listed: %s", shapes.empty() ? "none" : shapes.c_str()); if (!s.device_ok) { logf("vk: open NR is not available on this GPU: it lacks %s", missing.c_str()); set_why(s, "Not available on this GPU: it lacks what the network needs (the log names it)."); return; } - logf("vk: open NR: this GPU can run the network (%s)%s", opennr_net::route_name(s.route), - dev.features.robustBufferAccess ? "; robust buffer access is on, which upstream measured at ~15%" : ""); + if (s.route == opennr_net::Route::Khr) { + logf("vk: open NR: this GPU can run the network: %s, variant %s (%s; %u-lane subgroups)%s%s", + opennr_net::route_name(s.route), s.khr->name, s.khr->what, s.khr->subgroup, + khr_why.empty() ? "" : "; not the others: ", khr_why.c_str()); + } else { + s.khr = nullptr; + logf("vk: open NR: this GPU can run the network (%s)", opennr_net::route_name(s.route)); + } + if (dev.features.robustBufferAccess) logf("vk: open NR: robust buffer access is on, which upstream measured at ~15%%"); } bool asked() { diff --git a/gpu/vk/vk_opennr.h b/gpu/vk/vk_opennr.h index 2627a4b1f..dae1c4596 100644 --- a/gpu/vk/vk_opennr.h +++ b/gpu/vk/vk_opennr.h @@ -3,8 +3,9 @@ // The third backend behind the Neural tab, beside Streamline (gpu/vk/vk_dlssnr.cpp) and NGX direct. Streamline runs // NVIDIA's own model through NVIDIA's own DLLs and is Windows-only; this runs a bit-exact Vulkan reimplementation of // the same network (https://github.com/maanHimself/OpenDLSS-NR, MIT, vendored in third_party/opendlss-nr) on the -// renderer's own device, so it runs natively on Linux too. Today it needs an NVIDIA card with the extensions below; -// the kernel layer is kept apart (gpu/vk/opennr/) for the AMD route docs/neural-rendering.md describes. +// renderer's own device, so it runs natively on Linux too. On an NVIDIA card with VK_NV_cooperative_matrix2 it runs +// upstream's kernels; anywhere else with VK_KHR_cooperative_matrix -- AMD's RDNA 3 and 4 above all -- it runs the khr +// route (gpu/vk/opennr/khr: upstream's unfused graph on kernels that need only the KHR matrices, docs/neural-rendering.md). // // THE WEIGHTS ARE THE PLAYER'S. The network reads a model directory -- manifest.json and its stage files, upstream's // docs/weights.md -- that nothing public produces, and Hookshot provides no way to get one: nothing here extracts, From def8a20009cff836bf0bc5c7eafb778d95454499 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 18:35:16 -0600 Subject: [PATCH 110/119] test(vk): the open NR harness checks the khr route, on NVIDIA and on llvmpipe scripts/opennr_harness.py run --khr runs every khr variant on every device a probe finds that can run it (scripts/opennr_khr_probe.cpp: the renderer's own variant table), against the references of upstream's GLSL route, each on a device made with nothing but what the khr route needs. - The tool's own device, in the harness's copy of vk_context.cpp only (TOOL_PATCHES): OPENNR_DEVICE picks a device by name; OPENNR_KHR=1 enables VK_KHR_cooperative_matrix and, unless OPENNR_KHR_FLOAT8=0 or the device has none, VK_EXT_shader_float8 -- no NV extension at all. - A khr run starts from the reference run's recorded input features (a fixture-features fixture), so a device whose log and cosine differ still runs the network on the same bytes. - Each boundary and the head are compared against the references: the share of bytes that differ, the distance in E4M3 codes, the largest difference in value (compare.txt per run); block 0 kernel by kernel against the CPU reference under a third MMA model, a finely summed (f32-like) step. - Gates: an exact variant must be bit-exact; an f32-accumulating one bit-exact, or close (block 0's kernels equal the CPU reference in all but 1e-4 of the values) on hardware whose MMA adds in another order. - Without a GPU for upstream's routes the references come from the first khr run, and say so. - tests/test_opennr_khr.py, the quick form at 384x256: SKIP when no device runs a khr variant. Measured on this PC (RTX 5060 Ti, driver 615.71.09; llvmpipe, Mesa 26.2.3 / LLVM 22.1.2): every khr variant that runs here -- e4m3-k32-f16, e4m3-k32-f32 and f16-k16-f32 on the RTX, f16-k8-f32 on llvmpipe -- is bit-exact at all 75 boundaries and the head, at 384x256 (all), 1280x720 and 2048x1152 (the RTX). Co-Authored-By: Claude Opus 5.5 --- scripts/opennr_harness.py | 388 ++++++++++++++++++++++++++++++----- scripts/opennr_khr_probe.cpp | 91 ++++++++ tests/run_all.py | 2 + tests/test_opennr_khr.py | 42 ++++ 4 files changed, 473 insertions(+), 50 deletions(-) create mode 100644 scripts/opennr_khr_probe.cpp create mode 100644 tests/test_opennr_khr.py diff --git a/scripts/opennr_harness.py b/scripts/opennr_harness.py index 8e8e765e6..19c65c70d 100644 --- a/scripts/opennr_harness.py +++ b/scripts/opennr_harness.py @@ -21,10 +21,24 @@ The synthetic weights are drawn so the activations stay alive through all 71 blocks (scaled to each matrix's fan-in, with sane skip scales and attention temperatures): equality of all-zero or all-saturated tensors would prove nothing, so the harness also measures the boundary references and fails a fixture whose tensors are degenerate. -This is also what a later AMD port is checked against: the references come from the GLSL route, which is the -specification. +This is also what the khr route (gpu/vk/opennr/khr: VK_KHR_cooperative_matrix alone, for AMD's GPUs) is checked +against. With --khr, a probe (scripts/opennr_khr_probe.cpp, the renderer's own variant table) lists every Vulkan device +and the khr variants it can run, and each one is run on the same model, frame and fixture, on a device the tool makes +with nothing but what that route needs (no NV extension; no E4M3 extension for an f16 variant): + +4. `dlss5vk parity` with the khr kernels: an exact variant (f16 accumulators, NVIDIA's own MMA) must be bit-exact + like every other route; an f32-accumulating one rounds where the network does but cannot promise the hardware's + order of adding inside an MMA, so its boundaries are measured against the references instead -- the share of bytes + that differ, the distance in E4M3 codes, the largest difference in value, per boundary, and the head's; +5. `dlss5vk verify` on that device: block 0 kernel by kernel against the CPU reference, under each MMA model, + including one of an f32-accumulated step. + +llvmpipe (Mesa's CPU driver) lists VK_KHR_cooperative_matrix with 8x8x8 f16 shapes at 8 lanes and no E4M3: the +closest thing to an RDNA 3 card a PC without one has. It is slow; --khr-device llvmpipe --size 384x256 is minutes. +Without any GPU that runs upstream's NVIDIA routes, the references come from the first khr run instead, and say so. python -I -B scripts/opennr_harness.py run [--size 384x256] [--thorough] [--cxx clang++] [--headers DIR] + [--khr] [--khr-device NAME] [--khr-variant NAME] [--no-nv-routes] python -I -B scripts/opennr_harness.py model DIR [--seed N] # only the synthetic model directory Exit 0 when every check passes, 1 on a failure, and 0 with a line starting "SKIP:" when this PC cannot run it (no @@ -280,6 +294,10 @@ def write_model(directory, seed=1): ("Ada's arithmetic (upstream's reference as it is)", []), ("one fused group per MMA step (FP8 32 products F24, FP16 16 products F25)", ["-DOPENNR_FP8_GROUP=32", "-DOPENNR_FP8_F=24", "-DOPENNR_F16_GROUP=16", "-DOPENNR_F16_F=25"]), + # (the khr route's f32-accumulating variants: a step's products and the incoming half summed far more finely than + # half, then rounded once. FP16 F26 is as fine as fixedToF16's 32-bit magnitude allows; FP8 F30 is exact in double) + ("one finely summed step, as an f32 accumulator (FP8 32 products F30, FP16 16 products F26)", + ["-DOPENNR_FP8_GROUP=32", "-DOPENNR_FP8_F=30", "-DOPENNR_F16_GROUP=16", "-DOPENNR_F16_F=26"]), ] # (the harness-only change to a copy of reference.cpp: the group width and the fraction bits as macros, whose # defaults are upstream's numbers, so the first model above compiles to upstream's reference exactly) @@ -312,9 +330,61 @@ def write_model(directory, seed=1): ] +# The tool's own device (vk::Context's default constructor: the renderer adopts its device and never runs this), changed +# in the harness's copy only: OPENNR_DEVICE picks a device by a part of its name, and OPENNR_KHR=1 makes the device +# with only what the khr route needs -- VK_KHR_cooperative_matrix, and VK_EXT_shader_float8 when OPENNR_KHR_FLOAT8 is +# not 0 and the device has E4M3 matrices -- instead of upstream's list (VK_NV_cooperative_matrix2, the CUDA launch, the +# SM builtins, ...). A khr run that passes on such a device has proved it needs none of them. +TOOL_PATCHES = [ + ('#include "vk_context.h"\n', + '#include "vk_context.h"\n\n#include \n\n' + 'namespace { // (hookshot harness, scripts/opennr_harness.py TOOL_PATCHES)\n' + 'const char* hookshotDevice() { const char* e = getenv("OPENNR_DEVICE"); return e && *e ? e : nullptr; }\n' + 'bool hookshotKhr() { const char* e = getenv("OPENNR_KHR"); return e && atoi(e) != 0; }\n' + '} // namespace\n'), + (" if (coop && fp8) { physical_ = candidate; break; }\n", + " {\n VkPhysicalDeviceProperties named;\n vkGetPhysicalDeviceProperties(candidate, &named);\n" + " if (hookshotDevice() && !strstr(named.deviceName, hookshotDevice())) continue;\n }\n" + " if (coop && (fp8 || hookshotKhr())) { physical_ = candidate; break; }\n"), + (" DeviceRequirements req;\n VkDeviceCreateInfo deviceInfo{VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO};\n", + " DeviceRequirements req;\n" + " if (hookshotKhr()) {\n" + " uint32_t n = 0;\n" + " vkEnumerateDeviceExtensionProperties(physical_, nullptr, &n, nullptr);\n" + " std::vector have(n);\n" + " vkEnumerateDeviceExtensionProperties(physical_, nullptr, &n, have.data());\n" + " bool fp8 = !getenv(\"OPENNR_KHR_FLOAT8\") || atoi(getenv(\"OPENNR_KHR_FLOAT8\")) != 0;\n" + " bool fp8Listed = false;\n" + " for (const auto& e : have) fp8Listed = fp8Listed || !strcmp(e.extensionName, VK_EXT_SHADER_FLOAT8_EXTENSION_NAME);\n" + " if (fp8 && fp8Listed) {\n" + " VkPhysicalDeviceShaderFloat8FeaturesEXT f8{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT8_FEATURES_EXT};\n" + " VkPhysicalDeviceFeatures2 f2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2};\n" + " f2.pNext = &f8;\n" + " vkGetPhysicalDeviceFeatures2(physical_, &f2);\n" + " fp8 = f8.shaderFloat8 && f8.shaderFloat8CooperativeMatrix;\n" + " } else {\n" + " fp8 = false;\n" + " }\n" + " req.extensions = {VK_KHR_COOPERATIVE_MATRIX_EXTENSION_NAME};\n" + " if (fp8) req.extensions.push_back(VK_EXT_SHADER_FLOAT8_EXTENSION_NAME);\n" + " req.fp8.pNext = &req.coop;\n" + " req.features.pNext = fp8 ? (void*)&req.fp8 : (void*)&req.coop;\n" + " printf(\"khr device: %s, extensions VK_KHR_cooperative_matrix%s only\\n\", properties.properties.deviceName,\n" + " fp8 ? \" + VK_EXT_shader_float8\" : \"\");\n" + " }\n" + " VkDeviceCreateInfo deviceInfo{VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO};\n"), +] + + def build_tool(work, cxx, headers): - """upstream's dlss5vk, once per MMA model: [(model label, executable)]""" + """upstream's dlss5vk, once per MMA model: [(model label, executable)]; and the khr probe beside them""" src = opennr_kernels.prepare_sources(work / "src") + text = (src / "vk_context.cpp").read_text(encoding="utf-8") + for old, new in TOOL_PATCHES: + if text.count(old) != 1: + raise RuntimeError("the harness's device patch no longer matches upstream's vk_context.cpp: " + old[:60]) + text = text.replace(old, new) + (src / "vk_context.cpp").write_text(text, encoding="utf-8") text = (src / "reference.cpp").read_text(encoding="utf-8") for old, new in REFERENCE_PATCHES: if text.count(old) != 1: @@ -347,6 +417,11 @@ def one(job): if r.returncode: raise RuntimeError("linking dlss5vk failed:\n" + r.stdout.decode("utf-8", "replace")[-3000:]) tools.append((label, exe)) + r = subprocess.run([cxx, *flags, str(ROOT / "scripts" / "opennr_khr_probe.cpp"), str(obj / "volk_shim.o"), "-o", + str(work / "opennr_khr_probe")] + (["-ldl"] if os.name != "nt" else []), + stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + if r.returncode: + raise RuntimeError("building the khr probe failed:\n" + r.stdout.decode("utf-8", "replace")[-3000:]) return tools @@ -408,12 +483,14 @@ def synthetic_frame(w, h): return b"".join(rows) -def write_fixture(d, w, h, refs=None, head=None, conditioning=None): +def write_fixture(d, w, h, refs=None, head=None, conditioning=None, features=None): """A proxy fixture for upstream's parity. Without refs: zero placeholders of the right sizes (the bootstrap run, - whose dumps become the references).""" + whose dumps become the references). With features: those recorded input features instead of the frame.""" d.mkdir(parents=True, exist_ok=True) (fw, fh), _ = geometry(w, h) - if not (d / "proxy.f32").is_file(): + if features: + shutil.copyfile(features, d / "features.f32") + elif not (d / "proxy.f32").is_file(): (d / "proxy.f32").write_bytes(synthetic_frame(w, h)) blocks, transitions = [], [] for name, (bw, bh, c) in boundaries(w, h).items(): @@ -428,8 +505,10 @@ def write_fixture(d, w, h, refs=None, head=None, conditioning=None): (d / "head.f32").write_bytes(head.read_bytes() if head else bytes(fw * fh * 16)) cond = conditioning or {"localTone": 1.0, "localStructure": 1.0, "skinStructure": 1.0, "style": 0} manifest = {"sourceDimensions": [w, h], "fullDimensions": [fw, fh], - "proxy": {"width": w, "height": h, "file": "proxy.f32"}, "conditioning": cond, "seed": 1234, - "autoMask": True, "checks": ["boundaries", "head"], "blocks": blocks, "transitions": transitions, + **({"inputFeatures": {"file": "features.f32"}} if features else + {"proxy": {"width": w, "height": h, "file": "proxy.f32"}, "conditioning": cond, "seed": 1234, + "autoMask": True}), + "checks": ["boundaries", "head"], "blocks": blocks, "transitions": transitions, "referenceHead": {"file": "head.f32"}} (d / "manifest.json").write_text(json.dumps(manifest, indent=1), encoding="utf-8") @@ -477,21 +556,89 @@ def degenerate(refs, w, h): ] -def tool(exe, kernels, args, env_extra, log): - env = {k: v for k, v in os.environ.items() if not k.startswith("DLSS5VK_")} +def tool(exe, kernels, args, env_extra, log, shaders="shaders"): + env = {k: v for k, v in os.environ.items() + if not k.startswith(("DLSS5VK_", "OPENNR_KHR", "OPENNR_DEVICE", "HOOKSHOT_OPENNR_"))} env.update(env_extra) if env_extra.get("DLSS5VK_NO_PTX_MLP"): empty = kernels / "no-ptx" empty.mkdir(exist_ok=True) env["DLSS5VK_PTX_DIR"] = str(empty) t = time.time() - r = subprocess.run([str(exe), *args, "--shaders", str(kernels / "shaders")], env=env, stdout=subprocess.PIPE, + r = subprocess.run([str(exe), *args, "--shaders", str(kernels / shaders)], env=env, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) out = r.stdout.decode("utf-8", "replace") log.write_text(out, encoding="utf-8") return r.returncode, out, time.time() - t +# ---- the khr route -------------------------------------------------------------------------------------------- + +KHR_SUBGROUP = {name: d["KHR_SG"] for name, d, _ in opennr_kernels.KHR_VARIANTS} +KHR_E4 = {name: bool(d["KHR_E4"]) for name, d, _ in opennr_kernels.KHR_VARIANTS} +KHR_EXACT = {name: not d["KHR_ACC32"] for name, d, _ in opennr_kernels.KHR_VARIANTS} + + +def probe(work): + """[{index, name, nv, subgroups, variants: {variant: "ok" | why not}}] for every Vulkan device""" + r = subprocess.run([str(work / "opennr_khr_probe")], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + devices = [] + for line in r.stdout.decode("utf-8", "replace").splitlines(): + f = line.split("\t") + if f[0] == "device" and len(f) >= 6: + devices.append({"index": int(f[1]), "name": f[2], "nv": f[4] == "nv=1", "subgroups": f[5][10:], + "variants": {}}) + elif f[0] == "variant" and len(f) >= 4 and devices: + devices[-1]["variants"][f[2]] = f[3] + return devices + + +# E4M3 codes as positions on the number line: +-0 are 0, then each code its neighbour's +-1 ("ulps" of E4M3) +E4_ORDINAL = [(c & 0x7f) * (-1 if c & 0x80 else 1) for c in range(256)] +E4_VALUE = [(-1 if c & 0x80 else 1) * ((c & 7) / 8 * 2.0 ** -6 if not (c >> 3) & 15 else (1 + (c & 7) / 8) * 2.0 ** (((c >> 3) & 15) - 7)) + if (c & 0x7f) != 0x7f else 0.0 for c in range(256)] + + +def compare_e4(got, want): + """(bytes differing, the largest distance in E4M3 codes, the largest difference in value, values) of two + boundaries. Compared in 4 KiB slices first: the equal ones (most) cost one bytes comparison each.""" + differing, worst, worst_value = 0, 0, 0.0 + step = 4096 + for at in range(0, len(want), step): + a, b = got[at:at + step], want[at:at + step] + if a == b: + continue + for x, y in zip(a, b): + if x != y: + differing += 1 + worst = max(worst, abs(E4_ORDINAL[x] - E4_ORDINAL[y])) + worst_value = max(worst_value, abs(E4_VALUE[x] - E4_VALUE[y])) + return differing, worst, worst_value, len(want) + + +def compare_head(got, want): + """(values differing, largest |difference|, rms of the difference, rms of the reference, non-finite) of two heads""" + n = len(want) // 4 + a, b = struct.unpack("<%df" % n, got[:4 * n]), struct.unpack("<%df" % n, want) + differing, worst, sq, ref_sq, bad = 0, 0.0, 0.0, 0.0, 0 + for x, y in zip(a, b): + if not math.isfinite(x): + bad += 1 + continue + ref_sq += y * y + if x != y: + differing += 1 + worst = max(worst, abs(x - y)) + sq += (x - y) ** 2 + return differing, worst, math.sqrt(sq / n), math.sqrt(ref_sq / n), bad, n + + +def khr_env(device, variant): + return {**REFERENCE_ROUTE, "OPENNR_KHR": "1", "OPENNR_DEVICE": device["name"], + "OPENNR_KHR_FLOAT8": "1" if KHR_E4[variant] else "0", + "HOOKSHOT_OPENNR_SUBGROUP_SIZE": str(KHR_SUBGROUP[variant])} + + def skip_reason(out): for text in SKIP_TEXT: if text in out: @@ -522,9 +669,33 @@ def run(a): try: t0 = time.time() tools = build_tool(work, cxx, headers) - exe = tools[0][1] print("built upstream's dlss5vk with %s, its CPU reference in %d MMA models (%.0f s)" % (os.path.basename(cxx), len(tools), time.time() - t0), flush=True) + devices = probe(work) + nv = next((d for d in devices if d["nv"]), None) + khr_runs = [] + if a.khr: + print("devices (scripts/opennr_khr_probe.cpp):") + for d in devices: + print(" %d %s: upstream's NVIDIA routes %s; subgroups %s" % + (d["index"], d["name"], "yes" if d["nv"] else "no", d["subgroups"])) + for v, why in d["variants"].items(): + print(" khr %-14s %s" % (v, "runs here" if why == "ok" else "no: " + why)) + for d in devices: + if a.khr_device and not any(n.lower() in d["name"].lower() for n in a.khr_device): + continue + for v, why in d["variants"].items(): + if why == "ok" and (not a.khr_variant or v in a.khr_variant): + khr_runs.append((d, v)) + if not khr_runs: + if not nv: + raise SkipRun("no device here runs the network: no NVIDIA routes and no khr variant%s" % + (" on a device named %s" % "/".join(a.khr_device) if a.khr_device else "")) + print("SKIP (khr): no device here runs a khr variant%s; the NVIDIA routes are checked alone" % + (" (on a device named %s)" % "/".join(a.khr_device) if a.khr_device else "")) + if not nv and not khr_runs: + raise SkipRun("no device here runs upstream's NVIDIA routes (VK_NV_cooperative_matrix2 + E4M3 matrices)" + "; --khr runs the khr route instead") kernels = work / "kernels" subprocess.run([sys.executable, "-I", "-B", str(ROOT / "scripts" / "opennr_kernels.py"), "--materialize", str(kernels)], check=True, stdout=subprocess.DEVNULL) @@ -536,7 +707,7 @@ def run(a): (len(manifest["tensors"]), len(manifest["stages"]), size / 2 ** 20, time.time() - t0), flush=True) failures = 0 for w, h in sizes: - failures += run_size(tools, kernels, model, work / ("%dx%d" % (w, h)), w, h, a) + failures += run_size(tools, kernels, model, work / ("%dx%d" % (w, h)), w, h, a, nv, khr_runs) print("\nOPENNR HARNESS: %s" % ("PASS" if not failures else "FAIL (%d)" % failures)) return 1 if failures else 0 except SkipRun as e: @@ -551,7 +722,27 @@ class SkipRun(Exception): pass -def run_size(tools, kernels, model, d, w, h, a): +def verify_block0(tools, kernels, model, d, w, h, rows, env, shaders, tag): + """block 0 against the CPU reference under every MMA model: [(label, equal, [(kernel, verdict)])]""" + (fw, fh), _ = geometry(w, h) + results = [] + for i, (label, variant) in enumerate(tools): + code, out, secs = tool(variant, kernels, ["verify", "--model", str(model), "--fixture", str(d / "verify"), + "--rows", str(rows)], env, d / ("verify-%s%d.log" % (tag, i)), shaders) + checks = re.findall(r"^ (.+?)\s{2,}(equal \(\d+ values\)|MISMATCH.*)$", out, re.M) + equal = (not code and len(checks) >= 10 and not any(v.startswith("MISMATCH") for _, v in checks) and + "every kernel of block 0 equals" in out) + print("CPU reference with %s, block 0 on %d of %d rows (%.1f s): %s" % + (label, min(rows, fw * fh), fw * fh, secs, "EQUAL on every kernel" if equal else "differs")) + for name, verdict in checks: + print(" %-26s %s" % (name, verdict[:110])) + if not checks: + print(out[-2000:]) + results.append((label, equal, checks)) + return results + + +def run_size(tools, kernels, model, d, w, h, a, nv, khr_runs): exe = tools[0][1] (fw, fh), _ = geometry(w, h) print("\n== %dx%d (field %dx%d)" % (w, h, fw, fh), flush=True) @@ -559,9 +750,17 @@ def run_size(tools, kernels, model, d, w, h, a): boot, dump, fixture = d / "bootstrap", d / "reference", d / "fixture" dump.mkdir(exist_ok=True) write_fixture(boot, w, h) - # 1. the GLSL reference route's own output, the references (its parity against zero placeholders fails by design) + # 1. the references: the GLSL reference route's own output on a GPU that runs upstream's routes, else the first + # khr run's (its parity against zero placeholders fails by design) + if nv: + ref_env, ref_shaders, ref_label = {**REFERENCE_ROUTE, "OPENNR_DEVICE": nv["name"]}, "shaders", "GLSL route" + else: + dev, variant = khr_runs[0] + ref_env, ref_shaders = khr_env(dev, variant), opennr_kernels.khr_folder(variant) + ref_label = "khr %s on %s -- no GPU here runs upstream's routes, so these references are a khr run's" % ( + variant, dev["name"]) code, out, secs = tool(exe, kernels, ["parity", "--model", str(model), "--fixture", str(boot), "--dump", str(dump), - "--repeat", "2"], REFERENCE_ROUTE, d / "reference.log") + "--repeat", "2"], ref_env, d / "reference.log", ref_shaders) why = skip_reason(out) if why: raise SkipRun("this GPU or driver cannot run the network: " + why) @@ -571,8 +770,8 @@ def run_size(tools, kernels, model, d, w, h, a): print("FAIL: the reference run produced no references (%d missing)" % len(missing)) return 1 stats = re.search(r"head: .*", out) - print("reference (GLSL route, %.1f s): %d boundaries and the head recorded; %s" % - (secs, len(boundaries(w, h)), stats.group(0) if stats else "")) + print("reference (%s, %.1f s): %d boundaries and the head recorded; %s" % + (ref_label, secs, len(boundaries(w, h)), stats.group(0) if stats else "")) bad = degenerate(dump, w, h) if bad: print("FAIL: the synthetic network is degenerate, equality would prove little:\n " + "\n ".join(bad[:10])) @@ -585,43 +784,127 @@ def run_size(tools, kernels, model, d, w, h, a): len(set(values)))) return 1 write_fixture(fixture, w, h, refs=dump, head=dump / "head.f32") + # (the same references with the reference run's own input features in place of the frame: a khr run on another + # device then starts from the same bytes, whatever that device's log and cosine make of the noise lanes) + write_fixture(d / "fixture-features", w, h, refs=dump, head=dump / "head.f32", features=dump / "features.f32") failures = 0 - # 2. block 0, kernel by kernel, against the CPU reference features_fixture(d / "verify", w, h, dump / "features.f32", dump / "block-0.u8") rows = min(fw * fh, 1 << 18) if a.thorough else 4096 # (the CPU reference is single-threaded: ~40 s a 120k rows) - matched = [] - for i, (label, variant) in enumerate(tools): - code, out, secs = tool(variant, kernels, ["verify", "--model", str(model), "--fixture", str(d / "verify"), - "--rows", str(rows)], {}, d / ("verify-%d.log" % i)) - checks = re.findall(r"^ (.+?)\s{2,}(equal \(\d+ values\)|MISMATCH.*)$", out, re.M) - equal = (not code and len(checks) >= 10 and not any(v.startswith("MISMATCH") for _, v in checks) and - "every kernel of block 0 equals" in out) - print("CPU reference with %s, block 0 on %d of %d rows (%.1f s): %s" % - (label, min(rows, fw * fh), fw * fh, secs, "EQUAL on every kernel" if equal else "differs")) - for name, verdict in checks: - print(" %-26s %s" % (name, verdict[:110])) - if equal: - matched.append(label) - elif not checks: - print(out[-2000:]) - if not matched: - print("FAIL: block 0 equals the CPU reference under no MMA model") + if nv and not a.skip_routes: + # 2. block 0, kernel by kernel, against the CPU reference + results = verify_block0(tools, kernels, model, d, w, h, rows, {"OPENNR_DEVICE": nv["name"]}, "shaders", "") + if not any(equal for _, equal, _ in results): + print("FAIL: block 0 equals the CPU reference under no MMA model") + failures += 1 + # 3. every route against the references + for label, env in ROUTES: + code, out, secs = tool(exe, kernels, ["parity", "--model", str(model), "--fixture", str(fixture), + "--repeat", "3"], {**env, "OPENNR_DEVICE": nv["name"]}, + d / ("parity-%d.log" % ROUTES.index((label, env)))) + exact = len(re.findall(r"^\S+\s+\d+x\d+x\d+ bit-exact", out, re.M)) + head_line = re.search(r"head vs reference: (.*)", out) + verdict = re.search(r"VERDICT: (.*)", out) + gpu = re.search(r"production schedule \(([^)]*)\): (\d+) dispatches, GPU ([\d.]+) ms", out) + print("%-46s %s; boundaries bit-exact %d/%d; head %s%s" % + (label, verdict.group(1) if verdict else "NO VERDICT", exact, len(boundaries(w, h)), + head_line.group(1) if head_line else "?", + "; %s, %s dispatches, %s ms GPU (min of 3)" % gpu.groups() if gpu else "")) + if code or not verdict or not verdict.group(1).startswith("PASS") or exact != len(boundaries(w, h)): + print("\n".join(l for l in out.splitlines() if "MISMATCH" in l or "DIFFERENT" in l or "NOT" in l)[:3000]) + failures += 1 + # 4./5. the khr route, on every device and variant asked for + for dev, variant in khr_runs: + failures += run_khr(tools, kernels, model, d, w, h, a, dev, variant, rows, dump) + return failures + + +# What a khr variant is held to. An exact one (f16 accumulators: NVIDIA's own MMA) must give the references' bytes, as +# every upstream route does. An f32-accumulating one rounds every step where the network does, and its f16 GEMMs and +# its half fma, reciprocal and inverse square root are exact integer / f32 arithmetic (khr/gemm_f16.comp, +# khr/khr_numerics.glsl), so what is left to the hardware is only how its MMA adds a step's products in f32. Measured: +# on an RTX 5060 Ti and on llvmpipe that left nothing -- bit-exact at every boundary. On other hardware an MMA that +# adds in another order may put a sum on the other side of a half's rounding boundary, rarely, and a synthetic network +# of random weights then carries that difference on (by block 14 most bytes differ: what one ulp anywhere does to it, +# not a measure of the route). So such a variant passes as "bit-exact", or as "close" when block 0, kernel by kernel on +# its own inputs, equals the CPU reference's finely summed model in all but KHR_KERNEL_MAX_SHARE of the values; the +# boundaries' distribution is printed and written either way. +KHR_KERNEL_MAX_SHARE = 1e-4 + + +def run_khr(tools, kernels, model, d, w, h, a, dev, variant, rows, dump): + exe = tools[0][1] + label = "khr %s on %s" % (variant, dev["name"]) + out_dir = d / ("khr-%d-%s" % (dev["index"], variant)) + out_dir.mkdir(parents=True, exist_ok=True) + env, shaders = khr_env(dev, variant), opennr_kernels.khr_folder(variant) + print("\n-- %s" % label, flush=True) + code, out, secs = tool(exe, kernels, ["parity", "--model", str(model), "--fixture", str(d / "fixture-features"), + "--repeat", "2", "--dump", str(out_dir)], env, out_dir / "parity.log", shaders) + device_line = re.search(r"khr device: (.*)", out) + gpu = re.search(r"production schedule \(([^)]*)\): (\d+) dispatches, GPU ([\d.]+) ms", out) + verdict = re.search(r"VERDICT: (.*)", out) + exact = len(re.findall(r"^\S+\s+\d+x\d+x\d+ bit-exact", out, re.M)) + print("%s (%.0f s): %s; %s" % (label, secs, device_line.group(1) if device_line else "NO KHR DEVICE", + "%s dispatches, %s ms GPU (min of 2)" % gpu.groups()[1:] if gpu else "no timing")) + if not device_line or "head over 2 production submissions: DIFFERENT" in out: + print(out[-3000:]) + print("FAIL: %s did not run on a khr-only device, or was not repeatable" % label) + return 1 + missing = [n for n in boundaries(w, h) if not (out_dir / (n + ".u8")).is_file()] + if missing or not (out_dir / "head.f32").is_file(): + print(out[-3000:]) + print("FAIL: %s produced %d of %d boundaries%s" % (label, len(boundaries(w, h)) - len(missing), + len(boundaries(w, h)), + "" if (out_dir / "head.f32").is_file() else " and no head")) + return 1 + failures = 0 + rows_out, exact_count, first = [], 0, None + for name, (bw, bh, c) in boundaries(w, h).items(): + diff, worst, worst_value, n = compare_e4((out_dir / (name + ".u8")).read_bytes(), (dump / (name + ".u8")).read_bytes()) + rows_out.append((name, diff, worst, worst_value, n)) + exact_count += diff == 0 + if diff and first is None: + first = name + hd = compare_head((out_dir / "head.f32").read_bytes(), (dump / "head.f32").read_bytes()) + with open(out_dir / "compare.txt", "w", encoding="utf-8") as f: + f.write("%s against the references (%dx%d)\n" % (label, w, h)) + f.write("%-18s %10s %9s %6s %10s\n" % ("boundary", "bytes", "differ %", "codes", "max |d|")) + for name, diff, worst, worst_value, n in rows_out: + f.write("%-18s %10d %9.4f %6d %10.4g\n" % (name, n, 100.0 * diff / n, worst, worst_value)) + f.write("head: %d of %d values differ, max |d| %.4g, rms of the difference %.4g (reference rms %.4g), " + "non-finite %d\n" % (hd[0], hd[5], hd[1], hd[2], hd[3], hd[4])) + print("boundaries bit-exact %d/%d%s; head: %d of %d values differ (%.2f%%), max |d| %.4g, rms of the difference " + "%.4g against a reference rms of %.4g, non-finite %d" % + (exact_count, len(rows_out), "" if first is None else ", the first difference at " + first, + hd[0], hd[5], 100.0 * hd[0] / max(1, hd[5]), hd[1], hd[2], hd[3], hd[4])) + shown = [r for r in rows_out if r[0] in ("block-0", "transition-0-1", "block-4", "block-14", "block-22", "block-30", + "block-38", "block-47", "block-55", "block-61", "block-65", "block-69")] + print(" " + " ".join("%s %.3g%%/%d" % (r[0], 100.0 * r[1] / r[4], r[2]) for r in shown) + + " (bytes differing / most codes apart; every boundary: %s)" % (out_dir / "compare.txt")) + # 5. block 0 against the CPU reference, on this device with these kernels + results = verify_block0(tools, kernels, model, d, w, h, rows, env, shaders, "khr-%d-%s-" % (dev["index"], variant)) + bit_exact = exact_count == len(rows_out) and not hd[0] and verdict and verdict.group(1).startswith("PASS") + if bit_exact: + print("%s: bit-exact with the references" % label) + elif KHR_EXACT[variant]: + print("FAIL: %s is an exact variant and is not bit-exact with the references" % label) failures += 1 - # 3. every route against the references - for label, env in ROUTES: - code, out, secs = tool(exe, kernels, ["parity", "--model", str(model), "--fixture", str(fixture), - "--repeat", "3"], env, d / ("parity-%d.log" % ROUTES.index((label, env)))) - exact = len(re.findall(r"^\S+\s+\d+x\d+x\d+ bit-exact", out, re.M)) - head_line = re.search(r"head vs reference: (.*)", out) - verdict = re.search(r"VERDICT: (.*)", out) - gpu = re.search(r"production schedule \(([^)]*)\): (\d+) dispatches, GPU ([\d.]+) ms", out) - print("%-46s %s; boundaries bit-exact %d/%d; head %s%s" % - (label, verdict.group(1) if verdict else "NO VERDICT", exact, len(boundaries(w, h)), - head_line.group(1) if head_line else "?", - "; %s, %s dispatches, %s ms GPU (min of 3)" % gpu.groups() if gpu else "")) - if code or not verdict or not verdict.group(1).startswith("PASS") or exact != len(boundaries(w, h)): - print("\n".join(l for l in out.splitlines() if "MISMATCH" in l or "DIFFERENT" in l or "NOT" in l)[:3000]) + else: + def share(verdict_text): + m = re.match(r"MISMATCH (\d+)/(\d+)", verdict_text) + return int(m.group(1)) / int(m.group(2)) if m else 0.0 + fine = results[-1][2] # (the finely summed model: MMA_MODELS' last) + kernel_ok = bool(fine) and all(share(v) <= KHR_KERNEL_MAX_SHARE for name, v in fine if name != "block-0 vs fixture") + if hd[4] or not kernel_ok: + print("FAIL: %s: not bit-exact, and block 0's kernels differ from the CPU reference in more than %.2g of " + "their values (or the head is not finite)" % (label, KHR_KERNEL_MAX_SHARE)) failures += 1 + else: + print("%s: close -- block 0's kernels equal the CPU reference in all but %.2g of their values; the " + "boundaries' distribution is above" % (label, KHR_KERNEL_MAX_SHARE)) + if not any(equal for _, equal, _ in results) and (bit_exact or KHR_EXACT[variant]): + print("FAIL: %s: block 0 equals the CPU reference under no MMA model" % label) + failures += 1 return failures @@ -636,6 +919,11 @@ def main(): r.add_argument("--seed", type=int, default=1) r.add_argument("--work", help="keep everything in this folder") r.add_argument("--keep", action="store_true", help="do not delete the temporary folder") + r.add_argument("--khr", action="store_true", help="also the khr route, on every device and variant the probe finds") + r.add_argument("--khr-device", action="append", help="only devices whose name has this in it (repeatable)") + r.add_argument("--khr-variant", action="append", help="only this khr variant (repeatable)") + r.add_argument("--skip-routes", action="store_true", + help="not upstream's NVIDIA routes' checks (the references still come from its GLSL route)") m = sub.add_parser("model") m.add_argument("directory") m.add_argument("--seed", type=int, default=1) diff --git a/scripts/opennr_khr_probe.cpp b/scripts/opennr_khr_probe.cpp new file mode 100644 index 000000000..4a6b0169c --- /dev/null +++ b/scripts/opennr_khr_probe.cpp @@ -0,0 +1,91 @@ +// (hookshot) The open NR harness's device probe (scripts/opennr_harness.py builds and runs it): for every Vulkan device, +// whether upstream's NVIDIA routes can run there (VK_NV_cooperative_matrix2 with all seven of its features and E4M3 +// cooperative matrices) and which khr variants (gpu/vk/opennr/opennr_khr.h) it lists the matrix shapes for -- the same +// decision gpu/vk/vk_opennr.cpp makes for the renderer's device, from the same table. +// +// One line per device and one per variant, tab-separated, for the harness to read: +// device nv=<0|1> subgroups=- +// variant ok| +#include "volk.h" // (the harness's shim over libvulkan, gpu/vk/opennr/volk.h) + +#include +#include + +#include "opennr_khr.h" + +using namespace mkwvk; + +int main() { + if (volkInitialize() != VK_SUCCESS) { + printf("error\tno Vulkan loader\n"); + return 1; + } + VkApplicationInfo app{VK_STRUCTURE_TYPE_APPLICATION_INFO}; + app.apiVersion = VK_API_VERSION_1_3; + VkInstanceCreateInfo ii{VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO}; + ii.pApplicationInfo = &app; + VkInstance instance{}; + if (vkCreateInstance(&ii, nullptr, &instance) != VK_SUCCESS) { + printf("error\tvkCreateInstance failed\n"); + return 1; + } + volkLoadInstance(instance); + uint32_t count = 0; + vkEnumeratePhysicalDevices(instance, &count, nullptr); + std::vector devices(count); + vkEnumeratePhysicalDevices(instance, &count, devices.data()); + for (uint32_t i = 0; i < count; i++) { + VkPhysicalDevice p = devices[i]; + uint32_t n = 0; + vkEnumerateDeviceExtensionProperties(p, nullptr, &n, nullptr); + std::vector ext(n); + vkEnumerateDeviceExtensionProperties(p, nullptr, &n, ext.data()); + auto has = [&](const char* name) { + for (const VkExtensionProperties& e : ext) + if (!strcmp(e.extensionName, name)) return true; + return false; + }; + VkPhysicalDeviceCooperativeMatrix2FeaturesNV coop2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_FEATURES_NV}; + VkPhysicalDeviceShaderFloat8FeaturesEXT fp8{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT8_FEATURES_EXT}; + VkPhysicalDeviceCooperativeMatrixFeaturesKHR coop{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR}; + VkPhysicalDeviceVulkan13Features f13{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES}; + VkPhysicalDeviceFeatures2 f2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2}; + f2.pNext = &f13; + void** tail = &f13.pNext; + if (has(VK_KHR_COOPERATIVE_MATRIX_EXTENSION_NAME)) *tail = &coop, tail = &coop.pNext; + if (has(VK_EXT_SHADER_FLOAT8_EXTENSION_NAME)) *tail = &fp8, tail = &fp8.pNext; + if (has(VK_NV_COOPERATIVE_MATRIX_2_EXTENSION_NAME)) *tail = &coop2, tail = &coop2.pNext; + vkGetPhysicalDeviceFeatures2(p, &f2); + VkPhysicalDeviceSubgroupSizeControlProperties sc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES}; + VkPhysicalDeviceDriverProperties driver{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES}; + driver.pNext = ≻ + VkPhysicalDeviceProperties2 p2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2}; + p2.pNext = &driver; + vkGetPhysicalDeviceProperties2(p, &p2); + opennr_khr::Device d; + d.float8_matrices = fp8.shaderFloat8 && fp8.shaderFloat8CooperativeMatrix; + d.min_subgroup = sc.minSubgroupSize, d.max_subgroup = sc.maxSubgroupSize; + d.subgroup_control_compute = f13.subgroupSizeControl && f13.computeFullSubgroups && + (sc.requiredSubgroupSizeStages & VK_SHADER_STAGE_COMPUTE_BIT); + if (coop.cooperativeMatrix && vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR) { + uint32_t shapes = 0; + vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR(p, &shapes, nullptr); + std::vector props(shapes, {VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_KHR}); + vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR(p, &shapes, props.data()); + for (const auto& s : props) + d.shapes.push_back({s.MSize, s.NSize, s.KSize, s.AType, s.BType, s.CType, s.ResultType, s.scope}); + } + const bool nv = coop2.cooperativeMatrixWorkgroupScope && coop2.cooperativeMatrixFlexibleDimensions && + coop2.cooperativeMatrixReductions && coop2.cooperativeMatrixConversions && + coop2.cooperativeMatrixPerElementOperations && coop2.cooperativeMatrixTensorAddressing && + coop2.cooperativeMatrixBlockLoads && d.float8_matrices; + printf("device\t%u\t%s\t%d\tnv=%d\tsubgroups=%u-%u\n", i, p2.properties.deviceName, (int)driver.driverID, nv ? 1 : 0, + sc.minSubgroupSize, sc.maxSubgroupSize); + for (const opennr_khr::Variant& v : opennr_khr::kVariants) { + const std::string no = coop.cooperativeMatrix ? opennr_khr::refusal(d, v) : "no VK_KHR_cooperative_matrix"; + printf("variant\t%u\t%s\t%s\n", i, v.name, no.empty() ? "ok" : no.c_str()); + } + } + vkDestroyInstance(instance, nullptr); + return 0; +} diff --git a/tests/run_all.py b/tests/run_all.py index 865557b51..567ee2419 100644 --- a/tests/run_all.py +++ b/tests/run_all.py @@ -90,6 +90,7 @@ "tests/test_astc_bc_policy.py": ["--cxx", "g++"], "tests/test_opennr_kernels.py": ["--glslang", "{glslang}", "--spirv-val", "{spirv_val}"], "tests/test_opennr_harness.py": ["--cxx", "{cxx}", "--headers", "{vulkan_headers}"], + "tests/test_opennr_khr.py": ["--cxx", "{cxx}", "--headers", "{vulkan_headers}"], } # Python packages some tests import (CI installs them; the runner itself needs none) @@ -125,6 +126,7 @@ SKIP["tests/test_opennr_kernels.py"] = ({"windows"}, "needs glslang: checked on Linux") # (it builds upstream's tool with the system's C++ library and runs it on the GPU, which says SKIP without one) SKIP["tests/test_opennr_harness.py"] = ({"windows"}, "builds and runs OpenDLSS-NR's tool: checked on Linux") +SKIP["tests/test_opennr_khr.py"] = ({"windows"}, "builds and runs OpenDLSS-NR's tool: checked on Linux") def which(*names): diff --git a/tests/test_opennr_khr.py b/tests/test_opennr_khr.py new file mode 100644 index 000000000..0182525fb --- /dev/null +++ b/tests/test_opennr_khr.py @@ -0,0 +1,42 @@ +"""The open neural rendering backend's khr route (gpu/vk/opennr/khr: VK_KHR_cooperative_matrix alone, the route AMD's +GPUs run), quick form: scripts/opennr_harness.py run --khr on the synthetic model and frame at 384x256, every khr +variant on every device here that can run one, each on a device made with nothing but what that route needs, against +the references of upstream's GLSL route, and block 0 against the CPU reference. + +What a PC here can have: an NVIDIA GPU (the references, and the khr variants its driver lists the shapes for) and +llvmpipe (Mesa's CPU driver: KHR matrices, no NV extension, no E4M3 -- the f16 variant at 8 lanes, a couple of +minutes). Without a GPU that runs upstream's routes the references come from a khr run; without any device that runs +either, without Vulkan, a compiler or the Vulkan headers, it says SKIP and passes. + + python -I -B tests/test_opennr_khr.py --cxx clang++ --headers +""" +import argparse +import subprocess +import sys +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] + + +def main(): + p = argparse.ArgumentParser() + p.add_argument("--cxx", required=True) + p.add_argument("--headers", required=True) + a = p.parse_args() + r = subprocess.run([sys.executable, "-I", "-B", str(ROOT / "scripts" / "opennr_harness.py"), "run", "--cxx", a.cxx, + "--headers", a.headers, "--khr", "--skip-routes"], + stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + out = r.stdout.decode("utf-8", "replace") + print(out.rstrip()) + skipped = any(line.startswith("SKIP:") for line in out.splitlines()) + ran = "-- khr " in out + if r.returncode or not (skipped or (ran and "OPENNR HARNESS: PASS" in out)): + print("FAIL: the open neural rendering khr route did not pass") + return 1 + if not ran and not skipped: + print("SKIP: no device here runs a khr variant") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) From 58ed3bd27e6cec8519f72265323a207586687ac9 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 18:45:27 -0600 Subject: [PATCH 111/119] fix(vk): AMD's FSR runtime is asked at the start, guarded, never from the Insert menu Reported on v2.0.13 (Windows): F1/Insert no longer opened the menu. The releases since v2.7.0 put AMD's FSR 4 runtime beside the game, and the first draw of the menu's Upscaler and Frame generation method rows asked it what it offers (upscale_supported, frames_supported): loading the loader and running ffxQuery on the menu's thread. A runtime that hangs or faults there takes the menu with it. AMD's runtime is now asked once, right after the device is made, on the render thread (ffx::probe from vk_main.cpp), with a log line before the load and before the query so a hang names itself, and every call into AMD's DLLs (load, query, create, configure, dispatch) is guarded with __try: a fault inside the runtime turns FSR 4 off rather than ending the game. The menu and the frame only read the stored answer. RX_VK_FFX=0 (hookshot_env.txt) still keeps the runtime from being loaded at all. Checked: compiles for Windows with clang's MinGW target (-fms-extensions, as CI builds it) and for Linux; 198 tests pass. Not yet confirmed to be the reporter's cause: the log will say. Co-Authored-By: Claude Opus 5.5 --- gpu/vk/vk_ffx.cpp | 107 ++++++++++++++++++++++++++++++++++----------- gpu/vk/vk_ffx.h | 4 ++ gpu/vk/vk_main.cpp | 2 + 3 files changed, 87 insertions(+), 26 deletions(-) diff --git a/gpu/vk/vk_ffx.cpp b/gpu/vk/vk_ffx.cpp index c519263ca..3bac72fd1 100644 --- a/gpu/vk/vk_ffx.cpp +++ b/gpu/vk/vk_ffx.cpp @@ -95,6 +95,46 @@ std::wstring find_loader() { return {}; } +// (hookshot) Every call into AMD's DLLs goes through these: a fault inside the runtime (a driver it does not expect, a +// provider that dereferences what an NVIDIA device does not have) costs FSR 4, not the game. Plain C functions with no +// objects to unwind, which is what __try needs; noinline so the guard stays around the call. +__declspec(noinline) HMODULE guarded_load(const wchar_t* path) { + __try { + return LoadLibraryExW(path, nullptr, LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR | LOAD_LIBRARY_SEARCH_DEFAULT_DIRS); + } __except (1) { + return nullptr; + } +} +constexpr ffxReturnCode_t kFaulted = 0xfa17; // (not one of the API's codes: the call faulted) +__declspec(noinline) ffxReturnCode_t guarded_query(PfnFfxQuery f, ffxContext* c, ffxQueryDescHeader* d) { + __try { + return f(c, d); + } __except (1) { + return kFaulted; + } +} +__declspec(noinline) ffxReturnCode_t guarded_create(PfnFfxCreateContext f, ffxContext* c, ffxCreateContextDescHeader* d) { + __try { + return f(c, d, nullptr); + } __except (1) { + return kFaulted; + } +} +__declspec(noinline) ffxReturnCode_t guarded_configure(PfnFfxConfigure f, ffxContext* c, const ffxConfigureDescHeader* d) { + __try { + return f(c, d); + } __except (1) { + return kFaulted; + } +} +__declspec(noinline) ffxReturnCode_t guarded_dispatch(PfnFfxDispatch f, ffxContext* c, const ffxDispatchDescHeader* d) { + __try { + return f(c, d); + } __except (1) { + return kFaulted; + } +} + bool load() { State& s = st(); if (s.tried) return s.module != nullptr; @@ -110,7 +150,8 @@ bool load() { return false; } // (the loader looks for the upscaler and frame generation DLLs in its own folder) - s.module = LoadLibraryExW(path.c_str(), nullptr, LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR | LOAD_LIBRARY_SEARCH_DEFAULT_DIRS); + logf("vk: amd fsr 4: loading AMD's runtime"); + s.module = guarded_load(path.c_str()); if (!s.module) { logf("vk: amd fsr 4: amd_fidelityfx_loader_vk.dll did not load (error %lu)", GetLastError()); return false; @@ -156,13 +197,13 @@ uint64_t providers(uint64_t create_type, std::string& name) { q.createDescType = create_type; q.device = &c; q.outputCount = &count; - if (s.query(nullptr, &q.header) != FFX_API_RETURN_OK || count == 0) return 0; + if (guarded_query(s.query, nullptr, &q.header) != FFX_API_RETURN_OK || count == 0) return 0; uint64_t ids[16]{}; const char* names[16]{}; count = std::min(count, 16); q.versionIds = ids; q.versionNames = names; - if (s.query(nullptr, &q.header) != FFX_API_RETURN_OK) return 0; + if (guarded_query(s.query, nullptr, &q.header) != FFX_API_RETURN_OK) return 0; std::string all; for (uint64_t i = 0; i < count; i++) all += (i ? ", " : "") + std::string(names[i] ? names[i] : "?"); name = names[0] ? names[0] : ""; @@ -261,19 +302,35 @@ void full_barrier(VkCommandBuffer cmd) { bool built() { return true; } -bool upscale_supported() { +void probe_upscale(); +void probe_frames(); + +// (hookshot) AMD's runtime is asked once, at the start, from the render thread (probe(), from vk_main.cpp once the device +// exists), with a line in the log before each call into it, so a runtime that hangs or faults names itself. The Insert +// menu and the frame only read what it answered: v2.0.13 asked from the menu's first draw, where an answer that never +// came meant a menu that never opened. +void probe() { + State& s = st(); + if (s.up_supported >= 0 || !dev.device) return; + s.up_supported = s.fg_supported = 0; + if (!load()) return; + logf("vk: amd fsr 4: asking AMD's runtime what it offers on this GPU"); + probe_upscale(); + probe_frames(); + logf("vk: amd fsr 4: AMD's runtime answered: upscaling %s, frame generation %s", s.up_supported ? "yes" : "no", + s.fg_supported ? "yes" : "no"); +} + +bool upscale_supported() { return st().up_supported > 0; } + +void probe_upscale() { State& s = st(); - if (s.up_supported >= 0) return s.up_supported != 0; - if (!dev.device) return false; // (asked again once there is a device) - s.up_supported = 0; - if (!load()) return false; if (!providers(FFX_API_CREATE_CONTEXT_DESC_TYPE_UPSCALE, s.up_provider)) { logf("vk: amd fsr 4: AMD's runtime has no upscaler for this GPU"); - return false; + return; } logf("vk: amd fsr 4: upscaling available (%s)", s.up_provider.c_str()); s.up_supported = 1; - return true; } const char* upscale_provider() { return st().up_provider.c_str(); } @@ -304,7 +361,7 @@ bool upscale(VkCommandBuffer cmd, const UpscaleInputs& in) { c.maxRenderSize = {in.upscale_width, in.upscale_height}; c.maxUpscaleSize = {in.upscale_width, in.upscale_height}; c.fpMessage = message; - const ffxReturnCode_t r = s.create(&s.up, &c.header, nullptr); + const ffxReturnCode_t r = guarded_create(s.create, &s.up, &c.header); if (r != FFX_API_RETURN_OK || !s.up) { logf("vk: amd fsr 4: the upscaler's context was not made (FSR API result %u): FSR 4 is off", (unsigned)r); s.up = nullptr; @@ -321,7 +378,7 @@ bool upscale(VkCommandBuffer cmd, const UpscaleInputs& in) { s.up_first = true; ffxQueryGetProviderVersion v{}; v.header.type = FFX_API_QUERY_DESC_TYPE_GET_PROVIDER_VERSION; - if (s.query(&s.up, &v.header) == FFX_API_RETURN_OK && v.versionName) s.up_provider = v.versionName; + if (guarded_query(s.query, &s.up, &v.header) == FFX_API_RETURN_OK && v.versionName) s.up_provider = v.versionName; logf("vk: amd fsr 4: %s from up to %ux%u to %ux%u", s.up_provider.c_str(), s.up_rw, s.up_rh, s.up_ow, s.up_oh); } LARGE_INTEGER now, freq; @@ -356,7 +413,7 @@ bool upscale(VkCommandBuffer cmd, const UpscaleInputs& in) { d.viewSpaceToMetersFactor = 1.0f; d.flags = 0; full_barrier(cmd); - const ffxReturnCode_t r = s.dispatch(&s.up, &d.header); + const ffxReturnCode_t r = guarded_dispatch(s.dispatch, &s.up, &d.header); full_barrier(cmd); s.up_first = false; if (r != FFX_API_RETURN_OK) { @@ -369,20 +426,17 @@ bool upscale(VkCommandBuffer cmd, const UpscaleInputs& in) { VkImage output_image() { return st().up_out.image; } -bool frames_supported() { +bool frames_supported() { return st().fg_supported > 0; } + +void probe_frames() { State& s = st(); - if (s.fg_supported >= 0) return s.fg_supported != 0; - if (!dev.device) return false; - s.fg_supported = 0; - if (env_int("RX_VK_FFX_FG", 1) == 0) return false; - if (!load()) return false; + if (env_int("RX_VK_FFX_FG", 1) == 0) return; if (!providers(FFX_API_CREATE_CONTEXT_DESC_TYPE_FRAMEGENERATION, s.fg_provider)) { logf("vk: amd fsr 4: AMD's runtime has no frame generation for this GPU"); - return false; + return; } logf("vk: amd fsr 4: frame generation available (%s)", s.fg_provider.c_str()); s.fg_supported = 1; - return true; } uint32_t frames_wanted() { @@ -417,7 +471,7 @@ bool generate(VkCommandBuffer cmd, const FrameInputs& in) { c.displaySize = {in.width, in.height}; c.maxRenderSize = {in.width, in.height}; c.backBufferFormat = ffxApiGetSurfaceFormatVK(in.color_format); - const ffxReturnCode_t r = s.create(&s.fg, &c.header, nullptr); + const ffxReturnCode_t r = guarded_create(s.create, &s.fg, &c.header); if (r != FFX_API_RETURN_OK || !s.fg) { logf("vk: amd fsr 4: the frame generation context was not made (FSR API result %u): FSR frame " "generation is off", @@ -437,7 +491,7 @@ bool generate(VkCommandBuffer cmd, const FrameInputs& in) { s.fg_reset = true; ffxQueryGetProviderVersion v{}; v.header.type = FFX_API_QUERY_DESC_TYPE_GET_PROVIDER_VERSION; - if (s.query(&s.fg, &v.header) == FFX_API_RETURN_OK && v.versionName) s.fg_provider = v.versionName; + if (guarded_query(s.query, &s.fg, &v.header) == FFX_API_RETURN_OK && v.versionName) s.fg_provider = v.versionName; logf("vk: amd fsr 4: %s frame generation at %ux%u", s.fg_provider.c_str(), s.fg_w, s.fg_h); } s.frame_id++; @@ -456,7 +510,7 @@ bool generate(VkCommandBuffer cmd, const FrameInputs& in) { cfg.flags = env_int("RX_VK_FFX_DEBUG", 0) > 1 ? FFX_FRAMEGENERATION_FLAG_DRAW_DEBUG_VIEW : 0; cfg.generationRect = {0, 0, (int32_t)in.width, (int32_t)in.height}; cfg.frameID = s.frame_id; - if (const ffxReturnCode_t r = s.configure(&s.fg, &cfg.header); r != FFX_API_RETURN_OK) { + if (const ffxReturnCode_t r = guarded_configure(s.configure, &s.fg, &cfg.header); r != FFX_API_RETURN_OK) { static int told = 0; if (told++ < 4) logf("vk: amd fsr 4: frame generation's configuration was refused (FSR API result %u)", (unsigned)r); return false; @@ -492,7 +546,7 @@ bool generate(VkCommandBuffer cmd, const FrameInputs& in) { } } full_barrier(cmd); - if (const ffxReturnCode_t r = s.dispatch(&s.fg, &prep.header); r != FFX_API_RETURN_OK) { + if (const ffxReturnCode_t r = guarded_dispatch(s.dispatch, &s.fg, &prep.header); r != FFX_API_RETURN_OK) { static int told = 0; if (told++ < 4) logf("vk: amd fsr 4: frame generation's preparation was refused (FSR API result %u)", (unsigned)r); return false; @@ -510,7 +564,7 @@ bool generate(VkCommandBuffer cmd, const FrameInputs& in) { d.minMaxLuminance[0] = 0.0f, d.minMaxLuminance[1] = 1.0f; d.generationRect = {0, 0, (int32_t)in.width, (int32_t)in.height}; d.frameID = s.frame_id; - const ffxReturnCode_t r = s.dispatch(&s.fg, &d.header); + const ffxReturnCode_t r = guarded_dispatch(s.dispatch, &s.fg, &d.header); full_barrier(cmd); if (r != FFX_API_RETURN_OK) { static int told = 0; @@ -543,6 +597,7 @@ void shutdown() { namespace mkwvk::ffx { bool built() { return false; } +void probe() {} bool upscale_supported() { return false; } const char* upscale_provider() { return ""; } bool upscale(VkCommandBuffer, const UpscaleInputs&) { return false; } diff --git a/gpu/vk/vk_ffx.h b/gpu/vk/vk_ffx.h index e8a3ba0cb..64a6ea711 100644 --- a/gpu/vk/vk_ffx.h +++ b/gpu/vk/vk_ffx.h @@ -42,6 +42,10 @@ struct UpscaleInputs { /// Whether this build has the backend at all: Windows only (AMD's runtime is Windows DLLs). [[nodiscard]] bool built(); +/// Asks AMD's runtime, once, what it offers on this device: called from vk_main.cpp right after the device is made, on the +/// render thread, with each call into the runtime logged first and guarded. upscale_supported() and frames_supported() +/// only read the answer (false before it), so the Insert menu never waits on AMD's DLLs. +void probe(); /// Whether FSR 4 upscaling can run here: a Windows build, amd_fidelityfx_loader_vk.dll found beside /// the game (or in RX_VK_FFX_DIR) and loaded, and AMD's runtime naming at least one upscaler for this /// device. Asked once, the answer cached; RX_VK_FFX=0 keeps the DLL from being loaded at all. diff --git a/gpu/vk/vk_main.cpp b/gpu/vk/vk_main.cpp index 7e01bb8ca..aeba0dbac 100644 --- a/gpu/vk/vk_main.cpp +++ b/gpu/vk/vk_main.cpp @@ -25,6 +25,7 @@ #include "gpu_choice.h" #include "vk_menu.h" #include "vk_streamline.h" +#include "vk_ffx.h" #include "vk_opennr.h" // (hookshot: open neural rendering's extensions, only when it is the selected backend) #include "vk_dlss.h" #include "vk_reflex.h" @@ -534,6 +535,7 @@ bool create_device() { if (dev.buffer_marker) buffer_markers_init(); coopmat_init(); opennr::device_created(); // (hookshot: whether open neural rendering can run here, said in the log) + ffx::probe(); // (hookshot: what AMD's FSR 4 runtime offers here, asked once, now: gpu/vk/vk_ffx.h) reflex_device_created(); if (dev.push_descriptor) { VkPhysicalDevicePushDescriptorPropertiesKHR pp{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR}; From c719d8c6d8b6010383ea7cb49d77388aeba8982f Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 18:45:35 -0600 Subject: [PATCH 112/119] fix(vk): FSR 3.1 frame interpolation makes 2x sets only FSR 3.1's interpolation has no phase input (AMD's ffx_frameinterpolation.h fixes t at 0.5): it makes the midpoint between two of the game's frames and nothing else. At 3x and above vk_fsr3fi.cpp copied that one midpoint into every made frame of the set, so the same picture was shown at 1/3 and 2/3 of the interval: judder, not frames. framegen_methods.h gains makes_set() (FSR 3.1: 2x only) and first() (the method the chain tries first for a set), and the chain passes FSR 3.1 over for 3x and larger sets, which go on to the renderer's own interpolation. The Frame generation method row's FSR 3.1 hint says so. Co-Authored-By: Claude Opus 5.5 --- gpu/vk/framegen_methods.h | 19 ++++++++++++++++++- gpu/vk/vk_framegen.cpp | 5 ++++- gpu/vk/vk_menu.cpp | 3 ++- tests/test_framegen_methods.cpp | 8 ++++++++ tests/test_framegen_methods.py | 3 ++- 5 files changed, 34 insertions(+), 4 deletions(-) diff --git a/gpu/vk/framegen_methods.h b/gpu/vk/framegen_methods.h index b6f757bd7..d6c84a80b 100644 --- a/gpu/vk/framegen_methods.h +++ b/gpu/vk/framegen_methods.h @@ -5,7 +5,12 @@ Auto takes the first method that runs here, best first: NVIDIA DLSS frame generation (the game's depth and motion, NVIDIA's network), AMD FSR 4's (AMD's runtime, Windows), AMD FSR 3.1's (AMD's open shaders, any GPU), then the renderer's own blend, which always runs. A method chosen outright is tried alone; when it refuses a frame (no history - yet, its runtime missing, a cut) that frame falls back to the built-in blend rather than showing nothing. */ + yet, its runtime missing, a cut) that frame falls back to the built-in blend rather than showing nothing. + + FSR 3.1's interpolation has no phase input (ffx_frameinterpolation.h fixes t at 0.5): it makes the midpoint between two + of the game's frames and nothing else, so it makes 2x sets only. At 3x and above a set of its frames would be the same + midpoint picture at every made frame's time, which judders (the fork once did that), so those sets go on down the + chain (makes_set). */ #pragma once namespace mkwvk::framegen_methods { @@ -36,4 +41,16 @@ inline int effective(int chosen, unsigned available) { /// Whether vk_framegen.cpp tries this vendor method for a frame, given the method in effect inline bool tries(int effective_method, int method) { return effective_method == AUTO || effective_method == method; } +/// Whether a method can make a set of this multiplier (2 to 8): FSR 3.1 the midpoint only, so 2x only +inline bool makes_set(int method, int multiplier) { return method != FSR3 || multiplier == 2; } + +/// The method vk_framegen.cpp tries first for a set of this multiplier, of the ones that run here (available): the built-in +/// blend when no vendor method would be tried +inline int first(int effective_method, unsigned available, int multiplier) { + const int order[] = {DLSS, FSR4, FSR3}; + for (int method : order) + if (tries(effective_method, method) && (available & bit(method)) && makes_set(method, multiplier)) return method; + return BUILTIN; +} + } // namespace mkwvk::framegen_methods diff --git a/gpu/vk/vk_framegen.cpp b/gpu/vk/vk_framegen.cpp index 10b4d6bc4..c8cb2f743 100644 --- a/gpu/vk/vk_framegen.cpp +++ b/gpu/vk/vk_framegen.cpp @@ -853,7 +853,10 @@ bool framegen_record(VkCommandBuffer cmd, VkImageView src, uint32_t sw, uint32_t set->made = dlssg_frames(cmd, *set, cur, uw, uh, m); if (set->made == 0 && blend && m > 1 && fgm::tries(method, fgm::FSR4) && (avail & fgm::bit(fgm::FSR4))) set->made = ffx_frames(cmd, *set, cur, uw, uh, m); - if (set->made == 0 && blend && m > 1 && fgm::tries(method, fgm::FSR3) && (avail & fgm::bit(fgm::FSR3))) + // (FSR 3.1's interpolation makes the midpoint only: a 3x or larger set of it would show one picture at two times, so it + // takes 2x sets alone and the rest go on to the renderer's own interpolation: framegen_methods.h makes_set) + if (set->made == 0 && blend && m > 1 && fgm::tries(method, fgm::FSR3) && (avail & fgm::bit(fgm::FSR3)) && + fgm::makes_set(fgm::FSR3, m)) set->made = fsr3fi_frames(cmd, *set, cur, uw, uh, m); if (set->made == 0 && blend && m > 1) { pass(cmd, fg.flow, {{fg.lumas[prev].view, fg.nearest}, {fg.lumas[cur].view, fg.nearest}, diff --git a/gpu/vk/vk_menu.cpp b/gpu/vk/vk_menu.cpp index 7a100f92e..623598a78 100644 --- a/gpu/vk/vk_menu.cpp +++ b/gpu/vk/vk_menu.cpp @@ -510,7 +510,8 @@ const char* hn_framegen_method(int v, int variant) { "The best that runs here: DLSS, then FSR 4, then FSR 3.1, then the built-in blend. The log says which.", "NVIDIA's network, from the game's depth and motion: RTX 40 and 50, with nvngx_dlssg.dll in the game's ngx folder.", "AMD's FSR 4 frame generation, through AMD's runtime beside the game: Windows.", - "AMD's FSR 3.1 frame generation, built from AMD's open shaders: any GPU.", + "AMD's FSR 3.1 frame generation, built from AMD's open shaders: any GPU. At 2x only (it makes the frame halfway " + "between two of the game's): at 3x and above the built-in blend makes them.", "The renderer's own blend of the two frames around it: every GPU, the least sharp.", }; if (variant < 0) v = fgm::effective(v, framegen_available()); diff --git a/tests/test_framegen_methods.cpp b/tests/test_framegen_methods.cpp index ab34423df..8df28e231 100644 --- a/tests/test_framegen_methods.cpp +++ b/tests/test_framegen_methods.cpp @@ -23,6 +23,14 @@ int main() { CHECK("Auto tries every vendor method", tries(AUTO, DLSS) && tries(AUTO, FSR4) && tries(AUTO, FSR3)); CHECK("a chosen method alone", tries(FSR3, FSR3) && !tries(FSR3, DLSS) && !tries(FSR3, FSR4)); CHECK("built-in tries no vendor method", !tries(BUILTIN, DLSS) && !tries(BUILTIN, FSR4) && !tries(BUILTIN, FSR3)); + // FSR 3.1 makes the midpoint only: 2x sets, never 3x and above (the same picture at two times would judder) + CHECK("FSR 3.1 makes 2x sets only", makes_set(FSR3, 2) && !makes_set(FSR3, 3) && !makes_set(FSR3, 8)); + CHECK("the others make every set", makes_set(DLSS, 4) && makes_set(FSR4, 5) && makes_set(BUILTIN, 8)); + CHECK("Auto tries the best first", first(AUTO, all, 2) == DLSS && first(AUTO, bit(FSR4) | bit(FSR3), 3) == FSR4 && + first(AUTO, fsr3, 2) == FSR3); + CHECK("FSR 3.1 at 3x leaves the set to the built-in blend", first(AUTO, fsr3, 3) == BUILTIN && + first(FSR3, all, 4) == BUILTIN && first(FSR3, all, 2) == FSR3); + CHECK("built-in and what does not run", first(BUILTIN, all, 2) == BUILTIN && first(DLSS, fsr3, 2) == BUILTIN); if (failures) return 1; std::printf("PASS: the Frame generation method row steps over what runs, and Auto or one method is tried\n"); return 0; diff --git a/tests/test_framegen_methods.py b/tests/test_framegen_methods.py index 4936504ad..0da0bbeda 100644 --- a/tests/test_framegen_methods.py +++ b/tests/test_framegen_methods.py @@ -29,7 +29,8 @@ def main(): ("fgm::effective(chosen, avail)", fg, "vk_framegen.cpp choosing through framegen_methods.h"), ("fgm::tries(method, fgm::DLSS)", fg, "DLSS frame generation behind the choice"), ("fgm::tries(method, fgm::FSR4)", fg, "FSR 4 frame generation behind the choice"), - ("fgm::tries(method, fgm::FSR3)", fg, "FSR 3.1 frame generation behind the choice")): + ("fgm::tries(method, fgm::FSR3)", fg, "FSR 3.1 frame generation behind the choice"), + ("fgm::makes_set(fgm::FSR3, m)", fg, "FSR 3.1 frame generation for the sets it can make (2x)")): if needle not in where: raise SystemExit("missing: %s (%s)" % (what, needle)) # (the choice is read each frame, so the menu's change reaches the next frame: not cached in a static) From 6da545d26f49734befcfcf35ee677475191096f6 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 10 Nov 2026 00:47:20 +0000 Subject: [PATCH 113/119] chore(release): 2.0.14 [skip ci] [skip release] ## [2.0.14](https://github.com/notquiteog/Hookshot/compare/v2.0.13...v2.0.14) (2026-11-10) ### Bug Fixes * **vk:** AMD's FSR runtime is asked at the start, guarded, never from the Insert menu ([58ed3bd](https://github.com/notquiteog/Hookshot/commit/58ed3bd27e6cec8519f72265323a207586687ac9)) --- changelog.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/changelog.txt b/changelog.txt index ca836b5fe..29fa1f7d9 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,9 @@ --------------------------------------------------------------------------------------------------- +Version: 2.0.14 +Date: 10. 11. 2026 + Bugfixes: + - Vk: AMD's FSR runtime is asked at the start, guarded, never from the Insert menu. +--------------------------------------------------------------------------------------------------- Version: 2.0.13 Date: 09. 11. 2026 Features: From 5b635f4795746fa5db531cdd624754bab5cc2060 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 10 Nov 2026 00:55:00 +0000 Subject: [PATCH 114/119] chore(release): 2.0.15 [skip ci] [skip release] ## [2.0.15](https://github.com/notquiteog/Hookshot/compare/v2.0.14...v2.0.15) (2026-11-10) ### Features * **vk:** the open backend runs the khr route where upstream's NVIDIA routes cannot ([5b95083](https://github.com/notquiteog/Hookshot/commit/5b9508371de3967e6814c7323e39d7b6ab9a7491)) * **vk:** the open backend's khr kernels, OpenDLSS-NR on VK_KHR_cooperative_matrix alone ([1b80745](https://github.com/notquiteog/Hookshot/commit/1b807453017d8d8c06f44ec8deecb62f6ce828f3)) --- changelog.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/changelog.txt b/changelog.txt index 29fa1f7d9..54a8a95bf 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,10 @@ --------------------------------------------------------------------------------------------------- +Version: 2.0.15 +Date: 10. 11. 2026 + Features: + - Vk: The open backend runs the khr route where upstream's NVIDIA routes cannot. + - Vk: The open backend's khr kernels, OpenDLSS-NR on VK_KHR_cooperative_matrix alone. +--------------------------------------------------------------------------------------------------- Version: 2.0.14 Date: 10. 11. 2026 Bugfixes: From e95aed2a8cfdc1a0b96531953c4321b209c168f6 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 10 Nov 2026 01:02:53 +0000 Subject: [PATCH 115/119] chore(release): 2.0.16 [skip ci] [skip release] ## [2.0.16](https://github.com/notquiteog/Hookshot/compare/v2.0.15...v2.0.16) (2026-11-10) ### Features * **linux:** the OoT debug tools on Linux (cheats, teleport, flight, free view) ([f320ecb](https://github.com/notquiteog/Hookshot/commit/f320ecb1e4d520c70664a63c7b1a574e93190832)), closes [#ifdef](https://github.com/notquiteog/Hookshot/issues/ifdef) [#if](https://github.com/notquiteog/Hookshot/issues/if) * raise the Motion sensitivity X limit to 600% ([0e709de](https://github.com/notquiteog/Hookshot/commit/0e709de1265ed23336dd45a77fa39a1a2b3f4080)) * **vk:** FXAA in the gameplay TAAU stand-in (edges on cards without the network) ([84d7baf](https://github.com/notquiteog/Hookshot/commit/84d7baff550cc2f5961bea1a29292206c22a519b)) ### Bug Fixes * **builder:** check setup list names; load the setup's libraries from System32 ([05d343c](https://github.com/notquiteog/Hookshot/commit/05d343c7960f7f60afc668fcd0880769ce72b7d1)) * **builder:** do not resolve the update staging directory itself ([25f5aaf](https://github.com/notquiteog/Hookshot/commit/25f5aaf569a8a60ae0ef6205dbf5cfc485f25ed8)) * **builder:** explain unavailable selected game input ([0eeae7b](https://github.com/notquiteog/Hookshot/commit/0eeae7b47aa6935f1bb6ebf37f6d7c5ba2aff65b)) * **builder:** keep Linux update extraction from writing through symlinks ([7ac1186](https://github.com/notquiteog/Hookshot/commit/7ac1186b3bc5f9e557868c2585be58619b301801)) * **builder:** stop when the working exefs cannot be cleared ([46f060a](https://github.com/notquiteog/Hookshot/commit/46f060a3771001fb6baff5bc2102476a20cf960e)) * end the game when the GPU device is lost ([fe5f5ad](https://github.com/notquiteog/Hookshot/commit/fe5f5adcfcfb38def80a11e5c31e51bdd270556b)), closes [#1275](https://github.com/notquiteog/Hookshot/issues/1275) * **env:** hookshot_env.txt sets only the game's own switches ([c25cb42](https://github.com/notquiteog/Hookshot/commit/c25cb4294eb421ac92bc8d2ca82ec8f5e1c47954)) * **fs:** keep guest paths in their mounts; do not work through links ([9a88357](https://github.com/notquiteog/Hookshot/commit/9a883576281ab2c17f1dcf6e793bcdd70f761d41)) * ignore half-float NaNs when locating flashes ([99e1867](https://github.com/notquiteog/Hookshot/commit/99e1867f01101d0a16142eff722163104a80dc07)) * **input:** move the stick dead zone to option 11 ([ddb03fa](https://github.com/notquiteog/Hookshot/commit/ddb03fa78c42ce734b94f3d58ab475992cf9ec0e)) * **linux:** reject symlinked update staging folders ([b65d80e](https://github.com/notquiteog/Hookshot/commit/b65d80e592eaecc99e9d72cdc9e17aa0ccb89f58)) * **nvn:** keep host pointers in host-side tables; bounds-check guest ranges ([c19b6b7](https://github.com/notquiteog/Hookshot/commit/c19b6b7937176549145cc9a0bc3b548187844ae9)) * **runtime:** report Windows display startup failures ([eb928ad](https://github.com/notquiteog/Hookshot/commit/eb928adfd16a11ab59e8583713b2263fd2c42811)) * **saves:** refuse links in a save being imported ([54865d4](https://github.com/notquiteog/Hookshot/commit/54865d46720965b0b7f6fc3d280d7b61d2feed51)) * **sdl:** keep the mouse captured when the pointer leaves the window ([3757673](https://github.com/notquiteog/Hookshot/commit/3757673784d90f49ae00cd7c47349a6fa0eaae0f)) * **update:** check the latest release's tag on Windows too ([c72e44d](https://github.com/notquiteog/Hookshot/commit/c72e44d4b1c174e8eb38993729c60c36391fe58d)) * **vk:** a timed-out batch of write-backs keeps its staging buffers; the sweep's budget test cannot wrap ([8a453c4](https://github.com/notquiteog/Hookshot/commit/8a453c492f5888a172e5f18ba30588f8f8eeb420)) * **vk:** check the shaders seed, program cache, pipeline notes and state list as read ([1ff08e5](https://github.com/notquiteog/Hookshot/commit/1ff08e52ebb951a6e367eb55d19908ca95b4c564)) * **vk:** send the held batch before waiting for a recording ([8794dd4](https://github.com/notquiteog/Hookshot/commit/8794dd41554682fee01d4c13813bff8fd2b0ab0d)) * **windows:** load the Vulkan loader and SDL from known folders only ([1f02f94](https://github.com/notquiteog/Hookshot/commit/1f02f94d7a74fa428a34bee4b662abe92a540e24)) * write out the queued log before a fatal replay exit ([fb879db](https://github.com/notquiteog/Hookshot/commit/fb879dbb329629ef717706a9d65643e139c33811)) ### Performance Improvements * **vk:** the retirement sweep's texture write-backs in batches, one submission and one wait each ([e89338e](https://github.com/notquiteog/Hookshot/commit/e89338e8b06135852bb04b1535257a9512c05d3d)) --- changelog.txt | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/changelog.txt b/changelog.txt index 54a8a95bf..b48057a5a 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,35 @@ --------------------------------------------------------------------------------------------------- +Version: 2.0.16 +Date: 10. 11. 2026 + Features: + - Raise the Motion sensitivity X limit to 600%. + - Linux: The OoT debug tools on Linux (cheats, teleport, flight, free view). + - Vk: FXAA in the gameplay TAAU stand-in (edges on cards without the network). + Bugfixes: + - Windows: Load the Vulkan loader and SDL from known folders only. + - Update: Check the latest release's tag on Windows too. + - Env: Hookshot_env.txt sets only the game's own switches. + - Fs: Keep guest paths in their mounts; do not work through links. + - Saves: Refuse links in a save being imported. + - Vk: Check the shaders seed, program cache, pipeline notes and state list as read. + - Builder: Check setup list names; load the setup's libraries from System32. + - Nvn: Keep host pointers in host-side tables; bounds-check guest ranges. + - Builder: Stop when the working exefs cannot be cleared. + - Vk: A timed-out batch of write-backs keeps its staging buffers; the sweep's budget test cannot wrap. + - Write out the queued log before a fatal replay exit. + - Input: Move the stick dead zone to option 11. + - Builder: Do not resolve the update staging directory itself. + - Linux: Reject symlinked update staging folders. + - Runtime: Report Windows display startup failures. + - Builder: Keep Linux update extraction from writing through symlinks. + - End the game when the GPU device is lost. + - Ignore half-float NaNs when locating flashes. + - Vk: Send the held batch before waiting for a recording. + - Sdl: Keep the mouse captured when the pointer leaves the window. + - Builder: Explain unavailable selected game input. + Optimizations: + - Vk: The retirement sweep's texture write-backs in batches, one submission and one wait each. +--------------------------------------------------------------------------------------------------- Version: 2.0.15 Date: 10. 11. 2026 Features: From 366c2682c5dc48d511915a15e6b7ceb45431efca Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 19:08:30 -0600 Subject: [PATCH 116/119] fix(vk): FSR 3.1 and FSR 4 take the scene's real camera, depth and colour encoding (#1386's inputs) Ports the fork onto the inputs of upstream PR NotRexed/Hookshot#1386, which found these bugs in the fork's FSR path: - The camera hook (nx2/oot_camera.py, host/hos_oot_camera.c) published sead's projection object (near 1, far 20000), not the projection the scene is drawn with (near 0.1, far 1000.5, fov 45), and the fork treated the scene's depth as reversed-infinite: it is 0 at the near plane. FSR's passes want reversed depth, so they are given 1 - d with factors from the real projection (gpu/vk/fsr3_math.h, checked by tests/test_fsr3_math). - FSR's output went into the network's output without undoing the network's square-root encoding; it is squared back now, as DLSS's picture is. - vk_work.h was missing from the FSR files (a barrier could be skipped), the motion image never got its first layout transition, and a resize freed images frames in flight still used. All FSR inputs are made in gpu/vk/vk_fsr3_inputs.cpp (one jitter, #841's oot_jitter in every lift; camera from the projection; camera-only motion). FSR 4 (vk_ffx.cpp) and the frame generation chain take the same Frame. The camera hook, the fork's viewport jitter and the seam/contract headers and their tests are gone. Co-Authored-By: Claude Opus 5.5 --- docs/upscaling.md | 98 ++++- gpu/vk/fsr3_math.h | 59 +++ gpu/vk/shaders/fsr3_prep.comp | 48 +++ gpu/vk/shaders/fsr3_prep_comp_spv.h | 157 +++++++ gpu/vk/upscale_contract.h | 111 ----- gpu/vk/upscale_format.h | 41 -- gpu/vk/upscale_seam.h | 106 ----- gpu/vk/upscaler_rows.h | 22 +- gpu/vk/vk_dlssg.h | 4 +- gpu/vk/vk_draw.cpp | 510 ++-------------------- gpu/vk/vk_draw.h | 13 +- gpu/vk/vk_ffx.cpp | 82 ++-- gpu/vk/vk_ffx.h | 26 +- gpu/vk/vk_framegen.cpp | 325 +++++++------- gpu/vk/vk_framegen.h | 4 + gpu/vk/vk_fsr3.cpp | 631 ++++++++++++++++------------ gpu/vk/vk_fsr3.h | 84 ++-- gpu/vk/vk_fsr3_inputs.cpp | 377 +++++++++++++++++ gpu/vk/vk_fsr3_inputs.h | 79 ++++ gpu/vk/vk_fsr3fi.cpp | 167 +++----- gpu/vk/vk_fsr3fi.h | 97 ++--- gpu/vk/vk_menu.cpp | 16 +- gpu/vk/vk_replay.cpp | 13 +- host/hos_oot_camera.c | 86 ---- host/nn_vi.c | 2 - nx2/lift.py | 7 +- nx2/make_game.py | 15 - nx2/oot_camera.py | 80 ---- nx2/oot_jitter.py | 22 +- readme.md | 30 +- tests/run_all.py | 2 - tests/test_framegen_methods.py | 13 +- tests/test_fsr3_math.cpp | 88 ++++ tests/test_fsr3_math.py | 48 +++ tests/test_make_game_ngx.py | 14 +- tests/test_taau_env_lookup.py | 90 +--- tests/test_upscale_contract.py | 32 -- tests/test_upscale_seam.py | 29 -- tests/test_upscaler_rows.cpp | 29 +- tests/test_upscaler_rows.py | 15 +- tests/upscale_contract_test.cpp | 134 ------ tests/upscale_seam_test.cpp | 128 ------ 42 files changed, 1818 insertions(+), 2116 deletions(-) create mode 100644 gpu/vk/fsr3_math.h create mode 100644 gpu/vk/shaders/fsr3_prep.comp create mode 100644 gpu/vk/shaders/fsr3_prep_comp_spv.h delete mode 100644 gpu/vk/upscale_contract.h delete mode 100644 gpu/vk/upscale_format.h delete mode 100644 gpu/vk/upscale_seam.h create mode 100644 gpu/vk/vk_fsr3_inputs.cpp create mode 100644 gpu/vk/vk_fsr3_inputs.h delete mode 100644 host/hos_oot_camera.c delete mode 100644 nx2/oot_camera.py create mode 100644 tests/test_fsr3_math.cpp create mode 100644 tests/test_fsr3_math.py delete mode 100644 tests/test_upscale_contract.py delete mode 100644 tests/test_upscale_seam.py delete mode 100644 tests/upscale_contract_test.cpp delete mode 100644 tests/upscale_seam_test.cpp diff --git a/docs/upscaling.md b/docs/upscaling.md index efd67953e..3dc61b31a 100644 --- a/docs/upscaling.md +++ b/docs/upscaling.md @@ -1,8 +1,58 @@ # Upscaling and frame generation -This is a plan, not a description of what the renderer does today. It names the integration point, -the input contract, the licensing rules each vendor runtime imposes, and the order the work can land -in. Nothing here is implemented yet; each section below is one pull request. +Most of this file is the record of how the upscalers got here: the plan it started as, and the corrections the runs made +to it. What the renderer does today is the section right below; where an older section disagrees with it, the older +section is history and says so. + +## How it is wired now + +AMD FSR 3.1 is upstream's implementation (NotRexed/Hookshot#1386, `pr/fsr3-upscale-framegen`), taken over this fork's +own earlier one, with the fork's AMD FSR 4 and DLSS frame generation put on the same inputs. + +**One place makes every input.** `gpu/vk/vk_fsr3_inputs.cpp` `prepare()`, at the gameplay upscale's dispatch (the one +NVIDIA DLSS takes, found the same way: `fsr3_stand_in` in `vk_draw.cpp`, before `dlss_stand_in`), makes one `Frame` at +the render size with one pass (`shaders/fsr3_prep.comp`): + +- **Colour:** the network's input as the network samples it (its square-root encoding), clamped to 0..1, NaN set to 0. + The upscaler's picture is squared back into the network's output by `dlss_out.comp`, the pass DLSS's picture goes + through, for FSR 3.1 and FSR 4 alike. +- **Depth:** the scene's depth is 0 at the near plane (NVN's -1..1 clip depth, not reversed). FSR's passes are compiled + for reversed depth, so the copy is `1 - d`, and the factors that turn it into a view distance come from the projection + the scene is drawn with (`fsr3_math.h`, checked by `tests/test_fsr3_math.cpp`): near 0.1, far 1000.5, a 45 degree + field of view, read from the camera's uniform buffer as `dlss_note_scene_draw` reads it. +- **Jitter:** #841's, the one jitter in the game (`nx2/oot_jitter.py`, installed in every standalone lift now, and + `host/rx_backend.c hos_dlss_jitter_clip`), on while DLSS, FSR 3.1 or FSR 4 draws, read back from the projection. +- **Motion:** the camera's, from the depth, with `dlss_prep.comp`'s math (this frame's jittered clip space to the frame + before's without its jitter), in render pixels. What moves by itself has the motion of what is behind it until #1008's + actor motion is shared. + +**Who takes them.** FSR 3.1's upscaler (`vk_fsr3.cpp`) and its frame interpolation (`vk_fsr3fi.cpp`); in this fork also +AMD FSR 4 through AMD's runtime (`vk_ffx.cpp`: the same images, with `FFX_UPSCALE_ENABLE_DEPTH_INVERTED` set because the +copy is reversed and `DEPTH_INFINITE` only for an infinite projection, which this game's is not), and NVIDIA DLSS frame +generation (`vk_framegen.cpp dlssg_frames`: `DepthInverted` now true of the depth it is given, the planes and the field +of view from the same projection, and the clip-to-previous-clip pair the motion was made with). + +**Frame generation** (`vk_framegen.cpp`, the method row in `framegen_methods.h`): at 2x to 8x Auto tries DLSS frame +generation, then FSR 4's, then FSR 3.1's, then the renderer's own blend; a method chosen outright is tried alone. FSR 3.1's +interpolation has no phase (AMD's `ffx_frameinterpolation.h` fixes t at 0.5), so it makes 2x sets only +(`framegen_methods::makes_set`): this fork used to repeat its one midpoint for every made frame of a 3x or 4x set, which +shows the same picture at two different times and judders. Each present's inputs are taken once (`fsr3_inputs::take`), so +no present interpolates with another frame's depth and motion. + +**What the port fixed** in the fork's version: + +- the camera hook (`nx2/oot_camera.py`, `host/hos_oot_camera.c`) published sead's projection object, near 1.0 and far + 20000, not the projection the scene is drawn with, and FSR was given reversed-infinite factors for a depth that is + neither: gone, the camera comes from the projection; +- FSR's picture was blitted into the network's output without undoing the network's square-root encoding; +- the FSR files did not include `vk_work.h`, so `full_barrier` could leave out a barrier after their work; +- the camera-motion image never had its first layout transition; +- on a resize, images frames in flight could still use were destroyed (they are freed a few presents later now). + +**What went with it:** the fork's viewport jitter (`vk_draw.cpp` `SceneJitter`, `RX_VK_JITTER`), the camera hook, the +seam and contract headers (`upscale_seam.h`, `upscale_contract.h`, `upscale_format.h`) and their tests, the per-network +log's contract roles, `RX_VK_FSR_STAGE`, `RX_VK_VP_HUNT` and `DescWriter::Source`. `vk_camera_motion.cpp` and +`scene_frame_inputs()` stay for the open neural rendering backend (`vk_opennr.cpp`), which nothing here changes. ## What exists today @@ -12,7 +62,7 @@ in. Nothing here is implemented yet; each section below is one pull request. | `upscale` | `gpu/vk/vk_menu.h`, `framegen_scale` | A spatial filter on the finished window image: off, Catmull-Rom, Lanczos | | Frame generation | `gpu/vk/vk_framegen.cpp` | Image-space interpolation: quarter-size luma, 16x16 block matching within +-32 px, a 3x3 median, then a forward/backward blend per made frame | | The game's own upscaler | `taau_stand_in`, `gpu/vk/vk_draw.cpp` | OoT evaluates a neural TAAU network (program `fd029a317a9a4b94`). Where the device has no hardware f16 matrix multiply (or with `RX_VK_NO_F16`), a compute stand-in replaces it, because the translated network loses the blue channel and casts the scene yellow; elsewhere the network itself runs. `RX_VK_TAAU_KEYS` overrides either way | -| The per-network log | `gpu/vk/vk_draw.cpp`, `gpu/vk/upscale_contract.h` | Once per network key: its dispatch size, its sampled textures, what each one is in the input contract below, and whether a temporal upscaler could stand in | +| The per-network log | `gpu/vk/vk_draw.cpp` | Once per network key: its dispatch size and its sampled textures | Two consequences follow from that table, and they decide the whole design. @@ -99,6 +149,10 @@ ordered replay, never from live guest memory. ## The camera, read out of the game rather than guessed +> **Superseded.** The hook this section describes is gone. It published sead's projection object (near 1.0, far 20000), +> which is not the projection the scene is drawn with: that one, read from the camera's uniform buffer, has the near +> plane at 0.1 and the far plane at 1000.5 (`p22 -1.0002, p23 -0.20002`). See "How it is wired now" above. + FSR's `device_to_view_depth` and `tan_half_fov` want the near plane and the vertical field of view, and camera-derived motion wants the view-projection. Both are available: sead's perspective projection object carries them, and its matrix update is already a patch site (`nx2/oot_wide.py`, @@ -162,6 +216,9 @@ data camera-derived motion needs. ## The input contract +> **History.** `upscale_contract.h`, `upscale_format.h` and their test are gone: the inputs are made in one place now +> (`vk_fsr3_inputs.cpp`), not classified out of the dispatch's bindings. + A temporal upscaler needs the network's own inputs, and it must only run when they are all present and of the expected shape: @@ -192,7 +249,9 @@ inputs it has guessed produces ghosting that looks like a renderer bug and is re ## The seam -`gpu/vk/upscale_seam.h` is where a backend is chosen. The renderer resolves a recognized dispatch once into an +> **History.** `upscale_seam.h` is gone with the contract; FSR takes the dispatch the way DLSS does (`fsr3_stand_in`). + +`gpu/vk/upscale_seam.h` was where a backend was chosen. The renderer resolves a recognized dispatch once into an `upscale::Request` — what the sampled bindings provide, the image the dispatch writes, and which binding the renderer is going to hand over as colour — and `choose()` says which backend takes it. A backend never re-derives the dispatch for itself. @@ -374,10 +433,10 @@ looking at: the shader's idea of the flow extent equal the image it is given. Where the display size is not a multiple of 8 the shader's integer divide floors while we allocate the ceiling, so it addresses inside the image rather than past it, which is the safe direction. -2. **A count above one repeats a frame.** FSR 3.1 interpolates the midpoint and only the midpoint -- - no phase in its constants, and its own header writes `t = 0.5` outright -- so `RX_VK_FSR_FG=2` - copies the one made frame rather than making two. DLSS's `MultiFrameCount` is the only route to - more than one real made frame. +2. **A count above one repeated a frame.** FSR 3.1 interpolates the midpoint and only the midpoint -- + no phase in its constants, and its own header writes `t = 0.5` outright -- so a 3x set copied the + one made frame rather than making two, and showed one picture at two times. It makes 2x sets only + now (`framegen_methods::makes_set`), and `RX_VK_FSR_FG` is 0 (never) or 1 (over the row). 3. **A reset frame reports failure** although the chain is recorded, so the caller's own interpolation takes it rather than a blend against a black previous source. The SDK returns OK there; this is a deliberate difference. @@ -392,6 +451,9 @@ looking at: ## The jitter, and why the renderer supplies it +> **Superseded.** The viewport jitter below is gone. #841's jitter (`nx2/oot_jitter.py`) offsets the projection where the +> game writes it, for every view of the picture's ratio, and costs nothing per draw; DLSS and both FSRs use it. + Neither upscaler had one, and there is none to extract. `capture_view_projection` refuses any projection whose m02 is not exactly zero, and it finds one -- so the matrix the game hands its own network carries no sub-pixel offset. Its network is single-image and has no use for one. That @@ -413,6 +475,9 @@ first if the image looks wrong, because a wrong sign there is soft or shimmering ## The settings a player actually sees +> **History.** The rows are the Upscaler (the game's own, DLSS, DLAA, FSR 3.1, FSR 4: `upscaler_rows.h`), Frame +> generation and the Frame generation method (`framegen_methods.h`) now; the Window scaling filter is a row of its own. + None of this has a switch of its own in the menu. It is the two rows that were already there, which is the point: a player asking "what makes the picture bigger" should find one answer, not a filter row and a second row that can disagree with it. @@ -493,9 +558,10 @@ Three things the integration depends on, each from AMD's own sources rather than `UNORDERED_ACCESS` are `GENERAL` there. `COMPUTE_READ` -- the obvious choice for an input -- is `SHADER_READ_ONLY_OPTIMAL`, and would have the runtime transition from a layout the image is not in. So inputs are `GENERIC_READ` and outputs `UNORDERED_ACCESS`. -- **The inputs are FSR 3.1's.** Jitter and motion in render pixels with a scale of 1, reversed depth with an infinite far - plane (`DEPTH_INVERTED | DEPTH_INFINITE`), an HDR scene with automatic exposure. They are exactly what `vk_fsr3.cpp` - hands the same upscaler's sources, so the two backends are given the same picture. +- **The inputs are FSR 3.1's** (`vk_fsr3_inputs.h` `Frame`). Jitter and motion in render pixels with a scale of 1, the + depth reversed (`DEPTH_INVERTED`) with the scene's finite far plane (`DEPTH_INFINITE` only for an infinite projection: + it used to be set always, for a depth that was neither reversed nor infinite), the colour as FSR 3.1's passes take it + with automatic exposure, and the picture squared back by the same pass. The two backends are given the same picture. - **Frame generation is dispatched by hand.** AMD's frame generation is built around replacing the application's swapchain with AMD's own, which paces the presents. Hookshot presents and paces its own made frames (`vk_framegen.cpp`), so it configures the context with no swapchain and dispatches `PrepareV2` and the generation @@ -547,8 +613,13 @@ refuses, or makes fewer frames than were asked for, the interpolation runs exact set is never shown half made. `RX_VK_DLSSG=<1-3>` asks for it and says how many frames to make; without it nothing is loaded and nothing is logged. +> **Changed.** Its inputs are FSR 3.1's now (`vk_fsr3_inputs.h`), taken once a present: the reversed depth copy (so +> `DepthInverted` is true of what it is given; before, it was set for the scene's own depth, which is not reversed), the +> motion without the jitter, and the matrices and planes of the projection the scene is drawn with. The paragraph below +> is how it was. + The inputs it needs that colour interpolation does not -- the scene's depth, and the matrix its -draws used -- are kept by the draw path and read back through `scene_frame_inputs()`, because frame +draws used -- were kept by the draw path and read back through `scene_frame_inputs()`, because frame generation is recorded at present time where neither is otherwise in reach. The motion is the same camera-only reprojection the upscalers use, and asking for it twice in one frame is answered with the one already written: recording it again would reproject through the matrix the first recording @@ -605,7 +676,6 @@ Two switches, both off by default, both neutral while off: | | | |---|---| | `RX_VK_DLSSG=<1-3>` | asks for DLSS frame generation and says how many frames to make between two of the game's. Without it nothing is loaded, nothing is looked at and nothing is logged; the renderer's own interpolation is unaffected either way | -| `RX_VK_FSR_STAGE=<0-3>` | diagnostics, and wrong output on purpose above 0: how far down the upscale path a run goes. 1 stops before the backend, 2 records every barrier, clear and descriptor but none of the nine dispatches, 3 keeps the dispatches and drops the blit into the game's target. It exists because three hypotheses about a frame-rate cost were each disproved by a measurement that a stage switch would have given in one run | | `RX_VK_DLSS=1` | asks for the backend at run time. Without it nothing is loaded, nothing is looked at and nothing is logged | | `RX_VK_DLSS_SDK` | a **build-time** gate. Off, the NGX half of the backend is not compiled and `supported()` is false. On, the build needs an NGX SDK's `include/` on the include path | diff --git a/gpu/vk/fsr3_math.h b/gpu/vk/fsr3_math.h new file mode 100644 index 000000000..207326af7 --- /dev/null +++ b/gpu/vk/fsr3_math.h @@ -0,0 +1,59 @@ +// (hookshot) AMD FSR 3.1's camera, from the scene's own projection: plain functions, no Vulkan. tests/test_fsr3_math.cpp +// checks them. +// +// FSR 3.1's passes (the upscaler's and frame interpolation's) turn a depth into a view distance with four factors, +// device_to_view_depth (the SDK's setupDeviceDepthToViewSpaceDepthParams), and frame interpolation scales its disocclusion +// test by the tangent of half the field of view. The SDK builds them from a near plane, a far plane and a field of view; the +// projection the scene was drawn with has all three in it, so they are read from there instead (the camera's uniform buffer, +// gpu/vk/vk_fsr3_inputs.cpp: the same buffer NVIDIA DLSS reads its camera from), and no hook into the game is needed. +#pragma once + +#include +#include + +namespace mkwvk::fsr3_math { + +struct Camera { + /// view distance = [1] / (device depth - [0]); view x = [2] * ndc x * distance, y = [3] * ndc y * distance. For the + /// depth FSR is given, which is reversed (1 at the near plane: the passes are compiled with INVERTED_DEPTH) + float device_to_view_depth[4]{}; + float tan_half_fov_x = 0.0f; ///< frame interpolation's fTanHalfFOV (the SDK's: horizontal, from the render aspect) + float fov_y = 0.0f; ///< radians + float near_plane = 0.0f, far_plane = 0.0f; ///< far: FLT_MAX for an infinite projection + /// The game's own depth runs the other way (0 at the near plane): FSR's copy is 1 - it (vk_fsr3_inputs.cpp) + bool flip_depth = false; +}; + +/// The camera of a perspective projection p (row major, clip = p * view position, its w row 0 0 -1 0, as the game fills its +/// views' uniform buffers), whose clip depth is NVN's -1 to 1, so the depth buffer holds (ndc z + 1) / 2 (shaders/ +/// dlss_prep.comp reads it the same way). With a view distance v (> 0 in front of the camera), ndc z = -p22 + p23 / v, so the +/// stored depth is d = a + b / v with a = (1 - p22) / 2 and b = p23 / 2: reversed when b > 0. False for a projection that is +/// not one (no perspective, no depth range, a degenerate field of view) +inline bool camera_from_projection(const float p[16], Camera& c) { + c = Camera{}; + if (p[12] != 0.0f || p[13] != 0.0f || p[14] != -1.0f || p[15] != 0.0f) return false; + if (!(p[0] > 0.0f) || !(p[5] > 0.0f) || !std::isfinite(p[0]) || !std::isfinite(p[5])) return false; + double a = (1.0 - (double)p[10]) * 0.5, b = (double)p[11] * 0.5; + if (!std::isfinite(a) || !std::isfinite(b) || std::fabs(b) < 1e-12) return false; + c.flip_depth = b < 0.0; + if (c.flip_depth) a = 1.0 - a, b = -b; // (FSR's copy: 1 - d = (1 - a) - b / v) + // (an infinite projection has a = 0, which puts the far plane at device depth 0 exactly: the SDK's own factor there is + // -FLT_EPSILON, so distances stay finite and positive) + if (a > -FLT_EPSILON) a = -FLT_EPSILON; + c.device_to_view_depth[0] = (float)a; + c.device_to_view_depth[1] = (float)b; + c.device_to_view_depth[2] = 1.0f / p[0]; // (the SDK's 1 / (cot(fov / 2) / aspect)) + c.device_to_view_depth[3] = 1.0f / p[5]; // (1 / cot(fov / 2)) + c.tan_half_fov_x = 1.0f / p[0]; + c.fov_y = 2.0f * std::atan(1.0f / p[5]); + c.near_plane = (float)(b / (1.0 - a)); + c.far_plane = a <= -1e-6 ? (float)(-b / a) : FLT_MAX; + return c.near_plane > 0.0f && std::isfinite(c.near_plane); +} + +/// FSR's view distance for a device depth (as its shaders compute it: GetViewSpaceDepth), for the test +inline float view_distance(const Camera& c, float device_depth) { + return c.device_to_view_depth[1] / (device_depth - c.device_to_view_depth[0]); +} + +} // namespace mkwvk::fsr3_math diff --git a/gpu/vk/shaders/fsr3_prep.comp b/gpu/vk/shaders/fsr3_prep.comp new file mode 100644 index 000000000..0e358518f --- /dev/null +++ b/gpu/vk/shaders/fsr3_prep.comp @@ -0,0 +1,48 @@ +#version 450 +// (hookshot) AMD FSR 3.1's inputs for OoT's gameplay upscale (vk_fsr3_inputs.cpp), at the render size, in one pass. The +// same inputs, from the same math, as NVIDIA DLSS's (dlss_prep.comp, #841), so the two upscalers see one picture: +// - colour: the network's input as it samples it (the square root of the scene's tonemapped colour, its perceptual +// encoding), clamped to 0..1; a NaN is 0, as one would stay in FSR's history for good. vk_fsr3.cpp's output pass squares +// FSR's picture back, as the network's own output does +// - depth: the scene's depth, reversed when the game's is not (pc.flags bit 1), which is the depth the vendored passes were +// compiled for (FFX_FSR3UPSCALER_OPTION_INVERTED_DEPTH, FFX_FRAMEINTERPOLATION_OPTION_INVERTED_DEPTH) +// - motion: where each pixel was in the frame before, in render pixels (x right, y down), the jitter taken off: the depth +// taken back to clip space and through pc.reproject (this frame's jittered clip space to the frame before's without its +// jitter: dlss_math.h). The camera's motion only, as #841's before its actor motion: what moves by itself gets the motion +// of what is behind it. pc.flags bit 0: motion (none on the first frame of a history) +// The game's clip space: depth from -1 to 1 (NVN's default), y up, the picture's rows top down. +layout(local_size_x = 8, local_size_y = 8) in; +layout(binding = 0) uniform sampler2D scene; +layout(binding = 1) uniform sampler2D scene_depth; +layout(binding = 2, rgba16f) uniform writeonly image2D color; +layout(binding = 3, r32f) uniform writeonly image2D depth; +layout(binding = 4, rg16f) uniform writeonly image2D motion; +layout(push_constant, row_major) uniform P { + mat4 reproject; // (this frame's jittered clip space to the frame before's without its jitter) + vec2 jitter; // (this frame's jitter in clip space: taken off, so the motion has none) + ivec2 size; + int flags; +} pc; +void main() { + const ivec2 g = ivec2(gl_GlobalInvocationID.xy); + if (any(greaterThanEqual(g, pc.size))) return; + const vec2 size = vec2(pc.size); + const vec2 uv = (vec2(g) + 0.5) / size; + vec3 c = textureLod(scene, uv, 0.0).rgb; + c = mix(c, vec3(0.0), isnan(c)); + imageStore(color, g, vec4(clamp(c, 0.0, 1.0), 1.0)); + const float d = textureLod(scene_depth, uv, 0.0).r; + imageStore(depth, g, vec4((pc.flags & 2) != 0 ? 1.0 - d : d)); + vec2 mv = vec2(0.0); + if ((pc.flags & 1) != 0 && d >= 0.0 && d <= 1.0) { + const vec4 clip = vec4(uv.x * 2.0 - 1.0, 1.0 - uv.y * 2.0, d * 2.0 - 1.0, 1.0); + const vec4 before = pc.reproject * clip; + if (before.w > 1e-6) { + const vec2 then = before.xy / before.w; + const vec2 now = clip.xy - pc.jitter; + const vec2 px = vec2(then.x - now.x, now.y - then.y) * 0.5 * size; + if (all(lessThan(abs(px), vec2(16384.0)))) mv = px; + } + } + imageStore(motion, g, vec4(mv, 0.0, 0.0)); +} diff --git a/gpu/vk/shaders/fsr3_prep_comp_spv.h b/gpu/vk/shaders/fsr3_prep_comp_spv.h new file mode 100644 index 000000000..869e73d5f --- /dev/null +++ b/gpu/vk/shaders/fsr3_prep_comp_spv.h @@ -0,0 +1,157 @@ + // 1116.2.0 + #pragma once +const uint32_t FSR3_PREP_COMP_SPV[] = { + 0x07230203,0x00010600,0x0008000b,0x000000cc,0x00000000,0x00020011,0x00000001,0x00020011, + 0x00000031,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e, + 0x00000000,0x00000001,0x000c000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x0000000d, + 0x00000019,0x00000038,0x00000046,0x00000054,0x0000005c,0x000000c3,0x00060010,0x00000004, + 0x00000011,0x00000008,0x00000008,0x00000001,0x00030003,0x00000002,0x000001c2,0x00040005, + 0x00000004,0x6e69616d,0x00000000,0x00030005,0x00000009,0x00000067,0x00080005,0x0000000d, + 0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00030005,0x00000017, + 0x00000050,0x00060006,0x00000017,0x00000000,0x72706572,0x63656a6f,0x00000074,0x00050006, + 0x00000017,0x00000001,0x7474696a,0x00007265,0x00050006,0x00000017,0x00000002,0x657a6973, + 0x00000000,0x00050006,0x00000017,0x00000003,0x67616c66,0x00000073,0x00030005,0x00000019, + 0x00006370,0x00040005,0x00000026,0x657a6973,0x00000000,0x00030005,0x0000002a,0x00007675, + 0x00030005,0x00000034,0x00000063,0x00040005,0x00000038,0x6e656373,0x00000065,0x00040005, + 0x00000046,0x6f6c6f63,0x00000072,0x00030005,0x00000053,0x00000064,0x00050005,0x00000054, + 0x6e656373,0x65645f65,0x00687470,0x00040005,0x0000005c,0x74706564,0x00000068,0x00030005, + 0x0000006f,0x0000766d,0x00040005,0x0000007f,0x70696c63,0x00000000,0x00040005,0x0000008e, + 0x6f666562,0x00006572,0x00040005,0x0000009b,0x6e656874,0x00000000,0x00030005,0x000000a2, + 0x00776f6e,0x00030005,0x000000a9,0x00007870,0x00040005,0x000000c3,0x69746f6d,0x00006e6f, + 0x00040047,0x0000000d,0x0000000b,0x0000001c,0x00030047,0x00000017,0x00000002,0x00040048, + 0x00000017,0x00000000,0x00000004,0x00050048,0x00000017,0x00000000,0x00000007,0x00000010, + 0x00050048,0x00000017,0x00000000,0x00000023,0x00000000,0x00050048,0x00000017,0x00000001, + 0x00000023,0x00000040,0x00050048,0x00000017,0x00000002,0x00000023,0x00000048,0x00050048, + 0x00000017,0x00000003,0x00000023,0x00000050,0x00040047,0x00000038,0x00000021,0x00000000, + 0x00040047,0x00000038,0x00000022,0x00000000,0x00030047,0x00000046,0x00000019,0x00040047, + 0x00000046,0x00000021,0x00000002,0x00040047,0x00000046,0x00000022,0x00000000,0x00040047, + 0x00000054,0x00000021,0x00000001,0x00040047,0x00000054,0x00000022,0x00000000,0x00030047, + 0x0000005c,0x00000019,0x00040047,0x0000005c,0x00000021,0x00000003,0x00040047,0x0000005c, + 0x00000022,0x00000000,0x00030047,0x000000c3,0x00000019,0x00040047,0x000000c3,0x00000021, + 0x00000004,0x00040047,0x000000c3,0x00000022,0x00000000,0x00020013,0x00000002,0x00030021, + 0x00000003,0x00000002,0x00040015,0x00000006,0x00000020,0x00000001,0x00040017,0x00000007, + 0x00000006,0x00000002,0x00040020,0x00000008,0x00000007,0x00000007,0x00040015,0x0000000a, + 0x00000020,0x00000000,0x00040017,0x0000000b,0x0000000a,0x00000003,0x00040020,0x0000000c, + 0x00000001,0x0000000b,0x0004003b,0x0000000c,0x0000000d,0x00000001,0x00040017,0x0000000e, + 0x0000000a,0x00000002,0x00030016,0x00000013,0x00000020,0x00040017,0x00000014,0x00000013, + 0x00000004,0x00040018,0x00000015,0x00000014,0x00000004,0x00040017,0x00000016,0x00000013, + 0x00000002,0x0006001e,0x00000017,0x00000015,0x00000016,0x00000007,0x00000006,0x00040020, + 0x00000018,0x00000009,0x00000017,0x0004003b,0x00000018,0x00000019,0x00000009,0x0004002b, + 0x00000006,0x0000001a,0x00000002,0x00040020,0x0000001b,0x00000009,0x00000007,0x00020014, + 0x0000001e,0x00040017,0x0000001f,0x0000001e,0x00000002,0x00040020,0x00000025,0x00000007, + 0x00000016,0x0004002b,0x00000013,0x0000002d,0x3f000000,0x00040017,0x00000032,0x00000013, + 0x00000003,0x00040020,0x00000033,0x00000007,0x00000032,0x00090019,0x00000035,0x00000013, + 0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x0003001b,0x00000036, + 0x00000035,0x00040020,0x00000037,0x00000000,0x00000036,0x0004003b,0x00000037,0x00000038, + 0x00000000,0x0004002b,0x00000013,0x0000003b,0x00000000,0x0006002c,0x00000032,0x0000003f, + 0x0000003b,0x0000003b,0x0000003b,0x00040017,0x00000041,0x0000001e,0x00000003,0x00090019, + 0x00000044,0x00000013,0x00000001,0x00000000,0x00000000,0x00000000,0x00000002,0x00000002, + 0x00040020,0x00000045,0x00000000,0x00000044,0x0004003b,0x00000045,0x00000046,0x00000000, + 0x0004002b,0x00000013,0x0000004a,0x3f800000,0x00040020,0x00000052,0x00000007,0x00000013, + 0x0004003b,0x00000037,0x00000054,0x00000000,0x0004002b,0x0000000a,0x00000058,0x00000000, + 0x00090019,0x0000005a,0x00000013,0x00000001,0x00000000,0x00000000,0x00000000,0x00000002, + 0x00000003,0x00040020,0x0000005b,0x00000000,0x0000005a,0x0004003b,0x0000005b,0x0000005c, + 0x00000000,0x0004002b,0x00000006,0x0000005f,0x00000003,0x00040020,0x00000060,0x00000009, + 0x00000006,0x0004002b,0x00000006,0x00000064,0x00000000,0x0005002c,0x00000016,0x00000070, + 0x0000003b,0x0000003b,0x0004002b,0x00000006,0x00000073,0x00000001,0x00040020,0x0000007e, + 0x00000007,0x00000014,0x0004002b,0x00000013,0x00000082,0x40000000,0x0004002b,0x0000000a, + 0x00000085,0x00000001,0x00040020,0x0000008f,0x00000009,0x00000015,0x0004002b,0x0000000a, + 0x00000094,0x00000003,0x0004002b,0x00000013,0x00000097,0x358637bd,0x00040020,0x000000a5, + 0x00000009,0x00000016,0x0004002b,0x00000013,0x000000ba,0x46800000,0x0005002c,0x00000016, + 0x000000bb,0x000000ba,0x000000ba,0x00090019,0x000000c1,0x00000013,0x00000001,0x00000000, + 0x00000000,0x00000000,0x00000002,0x00000007,0x00040020,0x000000c2,0x00000000,0x000000c1, + 0x0004003b,0x000000c2,0x000000c3,0x00000000,0x0004002b,0x0000000a,0x000000ca,0x00000008, + 0x0006002c,0x0000000b,0x000000cb,0x000000ca,0x000000ca,0x00000085,0x00050036,0x00000002, + 0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000008,0x00000009, + 0x00000007,0x0004003b,0x00000025,0x00000026,0x00000007,0x0004003b,0x00000025,0x0000002a, + 0x00000007,0x0004003b,0x00000033,0x00000034,0x00000007,0x0004003b,0x00000052,0x00000053, + 0x00000007,0x0004003b,0x00000052,0x00000066,0x00000007,0x0004003b,0x00000025,0x0000006f, + 0x00000007,0x0004003b,0x0000007e,0x0000007f,0x00000007,0x0004003b,0x0000007e,0x0000008e, + 0x00000007,0x0004003b,0x00000025,0x0000009b,0x00000007,0x0004003b,0x00000025,0x000000a2, + 0x00000007,0x0004003b,0x00000025,0x000000a9,0x00000007,0x0004003d,0x0000000b,0x0000000f, + 0x0000000d,0x0007004f,0x0000000e,0x00000010,0x0000000f,0x0000000f,0x00000000,0x00000001, + 0x0004007c,0x00000007,0x00000011,0x00000010,0x0003003e,0x00000009,0x00000011,0x0004003d, + 0x00000007,0x00000012,0x00000009,0x00050041,0x0000001b,0x0000001c,0x00000019,0x0000001a, + 0x0004003d,0x00000007,0x0000001d,0x0000001c,0x000500af,0x0000001f,0x00000020,0x00000012, + 0x0000001d,0x0004009a,0x0000001e,0x00000021,0x00000020,0x000300f7,0x00000023,0x00000000, + 0x000400fa,0x00000021,0x00000022,0x00000023,0x000200f8,0x00000022,0x000100fd,0x000200f8, + 0x00000023,0x00050041,0x0000001b,0x00000027,0x00000019,0x0000001a,0x0004003d,0x00000007, + 0x00000028,0x00000027,0x0004006f,0x00000016,0x00000029,0x00000028,0x0003003e,0x00000026, + 0x00000029,0x0004003d,0x00000007,0x0000002b,0x00000009,0x0004006f,0x00000016,0x0000002c, + 0x0000002b,0x00050050,0x00000016,0x0000002e,0x0000002d,0x0000002d,0x00050081,0x00000016, + 0x0000002f,0x0000002c,0x0000002e,0x0004003d,0x00000016,0x00000030,0x00000026,0x00050088, + 0x00000016,0x00000031,0x0000002f,0x00000030,0x0003003e,0x0000002a,0x00000031,0x0004003d, + 0x00000036,0x00000039,0x00000038,0x0004003d,0x00000016,0x0000003a,0x0000002a,0x00070058, + 0x00000014,0x0000003c,0x00000039,0x0000003a,0x00000002,0x0000003b,0x0008004f,0x00000032, + 0x0000003d,0x0000003c,0x0000003c,0x00000000,0x00000001,0x00000002,0x0003003e,0x00000034, + 0x0000003d,0x0004003d,0x00000032,0x0000003e,0x00000034,0x0004003d,0x00000032,0x00000040, + 0x00000034,0x0004009c,0x00000041,0x00000042,0x00000040,0x000600a9,0x00000032,0x00000043, + 0x00000042,0x0000003f,0x0000003e,0x0003003e,0x00000034,0x00000043,0x0004003d,0x00000044, + 0x00000047,0x00000046,0x0004003d,0x00000007,0x00000048,0x00000009,0x0004003d,0x00000032, + 0x00000049,0x00000034,0x00060050,0x00000032,0x0000004b,0x0000003b,0x0000003b,0x0000003b, + 0x00060050,0x00000032,0x0000004c,0x0000004a,0x0000004a,0x0000004a,0x0008000c,0x00000032, + 0x0000004d,0x00000001,0x0000002b,0x00000049,0x0000004b,0x0000004c,0x00050051,0x00000013, + 0x0000004e,0x0000004d,0x00000000,0x00050051,0x00000013,0x0000004f,0x0000004d,0x00000001, + 0x00050051,0x00000013,0x00000050,0x0000004d,0x00000002,0x00070050,0x00000014,0x00000051, + 0x0000004e,0x0000004f,0x00000050,0x0000004a,0x00040063,0x00000047,0x00000048,0x00000051, + 0x0004003d,0x00000036,0x00000055,0x00000054,0x0004003d,0x00000016,0x00000056,0x0000002a, + 0x00070058,0x00000014,0x00000057,0x00000055,0x00000056,0x00000002,0x0000003b,0x00050051, + 0x00000013,0x00000059,0x00000057,0x00000000,0x0003003e,0x00000053,0x00000059,0x0004003d, + 0x0000005a,0x0000005d,0x0000005c,0x0004003d,0x00000007,0x0000005e,0x00000009,0x00050041, + 0x00000060,0x00000061,0x00000019,0x0000005f,0x0004003d,0x00000006,0x00000062,0x00000061, + 0x000500c7,0x00000006,0x00000063,0x00000062,0x0000001a,0x000500ab,0x0000001e,0x00000065, + 0x00000063,0x00000064,0x000300f7,0x00000068,0x00000000,0x000400fa,0x00000065,0x00000067, + 0x0000006b,0x000200f8,0x00000067,0x0004003d,0x00000013,0x00000069,0x00000053,0x00050083, + 0x00000013,0x0000006a,0x0000004a,0x00000069,0x0003003e,0x00000066,0x0000006a,0x000200f9, + 0x00000068,0x000200f8,0x0000006b,0x0004003d,0x00000013,0x0000006c,0x00000053,0x0003003e, + 0x00000066,0x0000006c,0x000200f9,0x00000068,0x000200f8,0x00000068,0x0004003d,0x00000013, + 0x0000006d,0x00000066,0x00070050,0x00000014,0x0000006e,0x0000006d,0x0000006d,0x0000006d, + 0x0000006d,0x00040063,0x0000005d,0x0000005e,0x0000006e,0x0003003e,0x0000006f,0x00000070, + 0x00050041,0x00000060,0x00000071,0x00000019,0x0000005f,0x0004003d,0x00000006,0x00000072, + 0x00000071,0x000500c7,0x00000006,0x00000074,0x00000072,0x00000073,0x000500ab,0x0000001e, + 0x00000075,0x00000074,0x00000064,0x0004003d,0x00000013,0x00000076,0x00000053,0x000500be, + 0x0000001e,0x00000077,0x00000076,0x0000003b,0x000500a7,0x0000001e,0x00000078,0x00000075, + 0x00000077,0x0004003d,0x00000013,0x00000079,0x00000053,0x000500bc,0x0000001e,0x0000007a, + 0x00000079,0x0000004a,0x000500a7,0x0000001e,0x0000007b,0x00000078,0x0000007a,0x000300f7, + 0x0000007d,0x00000000,0x000400fa,0x0000007b,0x0000007c,0x0000007d,0x000200f8,0x0000007c, + 0x00050041,0x00000052,0x00000080,0x0000002a,0x00000058,0x0004003d,0x00000013,0x00000081, + 0x00000080,0x00050085,0x00000013,0x00000083,0x00000081,0x00000082,0x00050083,0x00000013, + 0x00000084,0x00000083,0x0000004a,0x00050041,0x00000052,0x00000086,0x0000002a,0x00000085, + 0x0004003d,0x00000013,0x00000087,0x00000086,0x00050085,0x00000013,0x00000088,0x00000087, + 0x00000082,0x00050083,0x00000013,0x00000089,0x0000004a,0x00000088,0x0004003d,0x00000013, + 0x0000008a,0x00000053,0x00050085,0x00000013,0x0000008b,0x0000008a,0x00000082,0x00050083, + 0x00000013,0x0000008c,0x0000008b,0x0000004a,0x00070050,0x00000014,0x0000008d,0x00000084, + 0x00000089,0x0000008c,0x0000004a,0x0003003e,0x0000007f,0x0000008d,0x00050041,0x0000008f, + 0x00000090,0x00000019,0x00000064,0x0004003d,0x00000015,0x00000091,0x00000090,0x0004003d, + 0x00000014,0x00000092,0x0000007f,0x00050091,0x00000014,0x00000093,0x00000091,0x00000092, + 0x0003003e,0x0000008e,0x00000093,0x00050041,0x00000052,0x00000095,0x0000008e,0x00000094, + 0x0004003d,0x00000013,0x00000096,0x00000095,0x000500ba,0x0000001e,0x00000098,0x00000096, + 0x00000097,0x000300f7,0x0000009a,0x00000000,0x000400fa,0x00000098,0x00000099,0x0000009a, + 0x000200f8,0x00000099,0x0004003d,0x00000014,0x0000009c,0x0000008e,0x0007004f,0x00000016, + 0x0000009d,0x0000009c,0x0000009c,0x00000000,0x00000001,0x00050041,0x00000052,0x0000009e, + 0x0000008e,0x00000094,0x0004003d,0x00000013,0x0000009f,0x0000009e,0x00050050,0x00000016, + 0x000000a0,0x0000009f,0x0000009f,0x00050088,0x00000016,0x000000a1,0x0000009d,0x000000a0, + 0x0003003e,0x0000009b,0x000000a1,0x0004003d,0x00000014,0x000000a3,0x0000007f,0x0007004f, + 0x00000016,0x000000a4,0x000000a3,0x000000a3,0x00000000,0x00000001,0x00050041,0x000000a5, + 0x000000a6,0x00000019,0x00000073,0x0004003d,0x00000016,0x000000a7,0x000000a6,0x00050083, + 0x00000016,0x000000a8,0x000000a4,0x000000a7,0x0003003e,0x000000a2,0x000000a8,0x00050041, + 0x00000052,0x000000aa,0x0000009b,0x00000058,0x0004003d,0x00000013,0x000000ab,0x000000aa, + 0x00050041,0x00000052,0x000000ac,0x000000a2,0x00000058,0x0004003d,0x00000013,0x000000ad, + 0x000000ac,0x00050083,0x00000013,0x000000ae,0x000000ab,0x000000ad,0x00050041,0x00000052, + 0x000000af,0x000000a2,0x00000085,0x0004003d,0x00000013,0x000000b0,0x000000af,0x00050041, + 0x00000052,0x000000b1,0x0000009b,0x00000085,0x0004003d,0x00000013,0x000000b2,0x000000b1, + 0x00050083,0x00000013,0x000000b3,0x000000b0,0x000000b2,0x00050050,0x00000016,0x000000b4, + 0x000000ae,0x000000b3,0x0005008e,0x00000016,0x000000b5,0x000000b4,0x0000002d,0x0004003d, + 0x00000016,0x000000b6,0x00000026,0x00050085,0x00000016,0x000000b7,0x000000b5,0x000000b6, + 0x0003003e,0x000000a9,0x000000b7,0x0004003d,0x00000016,0x000000b8,0x000000a9,0x0006000c, + 0x00000016,0x000000b9,0x00000001,0x00000004,0x000000b8,0x000500b8,0x0000001f,0x000000bc, + 0x000000b9,0x000000bb,0x0004009b,0x0000001e,0x000000bd,0x000000bc,0x000300f7,0x000000bf, + 0x00000000,0x000400fa,0x000000bd,0x000000be,0x000000bf,0x000200f8,0x000000be,0x0004003d, + 0x00000016,0x000000c0,0x000000a9,0x0003003e,0x0000006f,0x000000c0,0x000200f9,0x000000bf, + 0x000200f8,0x000000bf,0x000200f9,0x0000009a,0x000200f8,0x0000009a,0x000200f9,0x0000007d, + 0x000200f8,0x0000007d,0x0004003d,0x000000c1,0x000000c4,0x000000c3,0x0004003d,0x00000007, + 0x000000c5,0x00000009,0x0004003d,0x00000016,0x000000c6,0x0000006f,0x00050051,0x00000013, + 0x000000c7,0x000000c6,0x00000000,0x00050051,0x00000013,0x000000c8,0x000000c6,0x00000001, + 0x00070050,0x00000014,0x000000c9,0x000000c7,0x000000c8,0x0000003b,0x0000003b,0x00040063, + 0x000000c4,0x000000c5,0x000000c9,0x000100fd,0x00010038 +}; diff --git a/gpu/vk/upscale_contract.h b/gpu/vk/upscale_contract.h deleted file mode 100644 index 3dbddcad0..000000000 --- a/gpu/vk/upscale_contract.h +++ /dev/null @@ -1,111 +0,0 @@ -// (hookshot) Whether the inputs a temporal upscaler needs appear among a game network's sampled textures: low -// resolution colour, motion and depth. Plain data, no Vulkan and nothing read from -// guest memory, so tests/upscale_contract_test.cpp can drive it; docs/upscaling.md has the contract itself and why -// the game's own upscale dispatch is where a replacement belongs. -#pragma once - -#include -#include - -namespace mkwvk::upscale { - -/// What a binding's format makes it fit for. The renderer maps its VkFormats onto these where it builds the list, so -/// this header needs no Vulkan header and no renderer type. -enum class Kind : uint8_t { - Other, ///< a format the contract has no use for - Colour, ///< three or four channels, packed or float - TwoChannel, ///< two channels, float or signed: a motion candidate - Depth, ///< a depth format -}; - -/// What a binding was taken to be. Reported per binding so a log names them rather than leaving the reader to count. -enum class Role : uint8_t { None, Colour, Motion, Depth, FullSize }; - -struct Binding { - Kind kind = Kind::Other; - uint32_t width = 0; - uint32_t height = 0; -}; - -inline constexpr size_t kNone = (size_t)-1; - -struct Verdict { - /// Colour, motion and depth were all found, and at one extent. - bool inputs_complete = false; - /// The extent the inputs agree on (0 when they do not agree, or were not all found). - uint32_t render_width = 0; - uint32_t render_height = 0; - size_t colour = kNone; - size_t motion = kNone; - size_t depth = kNone; - /// A colour larger than the render extent: the history, the output, or both. See classify(). - size_t full_size = kNone; -}; - -inline const char* role_name(Role r) { - switch (r) { - case Role::Colour: return "colour"; - case Role::Motion: return "motion"; - case Role::Depth: return "depth"; - case Role::FullSize: return "full-size"; - default: break; - } - return "-"; -} - -/// Reads `n` sampled bindings and says which of them a temporal upscaler would take for what. `roles`, when given, -/// receives one entry per binding. -/// -/// Motion and depth decide the render extent, because they are the two a network cannot sample at any other size. -/// The colour at that extent is the upscaler's input. -/// -/// A colour at a larger extent is reported as full-size and nothing more: it is the network's own history, its -/// output, or both, and the list this reads cannot tell them apart, because the renderer records the textures a -/// dispatch's descriptors sample *or store* in one list (vk_draw.cpp, draw_sampled). Naming it the history would be -/// a guess; the seam that replaces the dispatch resolves the output image itself and can then say which it is. -/// -/// The first binding wins a tie, so the answer does not depend on how the caller happened to order equal -/// candidates. -inline Verdict classify(const Binding* b, size_t n, Role* roles = nullptr) { - Verdict v; - if (roles) { - for (size_t i = 0; i < n; ++i) roles[i] = Role::None; - } - if (b == nullptr) return v; - for (size_t i = 0; i < n; ++i) { - if (b[i].width == 0 || b[i].height == 0) continue; - if (b[i].kind == Kind::TwoChannel && v.motion == kNone) v.motion = i; - if (b[i].kind == Kind::Depth && v.depth == kNone) v.depth = i; - } - // (both, and agreeing: one of them alone cannot say what the render extent is, and two that disagree mean the - // guess about which binding is which is wrong) - if (v.motion == kNone || v.depth == kNone || b[v.motion].width != b[v.depth].width || - b[v.motion].height != b[v.depth].height) { - v.motion = v.depth = kNone; - return v; - } - const uint32_t rw = b[v.motion].width, rh = b[v.motion].height; - for (size_t i = 0; i < n; ++i) { - if (b[i].kind != Kind::Colour || b[i].width == 0 || b[i].height == 0) continue; - if (b[i].width == rw && b[i].height == rh) { - if (v.colour == kNone) v.colour = i; - } else if ((uint64_t)b[i].width * b[i].height > (uint64_t)rw * rh && v.full_size == kNone) { - v.full_size = i; - } - } - if (v.colour == kNone) { - v.motion = v.depth = v.full_size = kNone; - return v; - } - v.inputs_complete = true; - v.render_width = rw, v.render_height = rh; - if (roles) { - roles[v.colour] = Role::Colour; - roles[v.motion] = Role::Motion; - roles[v.depth] = Role::Depth; - if (v.full_size != kNone) roles[v.full_size] = Role::FullSize; - } - return v; -} - -} // namespace mkwvk::upscale diff --git a/gpu/vk/upscale_format.h b/gpu/vk/upscale_format.h deleted file mode 100644 index 202a5d487..000000000 --- a/gpu/vk/upscale_format.h +++ /dev/null @@ -1,41 +0,0 @@ -// (hookshot) The one place that decides what a Vulkan format means to the upscaler input contract. Kept apart from -// upscale_contract.h so that header stays free of Vulkan and apart from vk_draw.cpp so -// tests/upscale_contract_test.cpp covers the mapping itself: which formats count as motion is the part most likely -// to be wrong, and a wrong answer there is handed to an upscaler as if it were motion. -#pragma once - -#include - -#include "upscale_contract.h" - -namespace mkwvk::upscale { - -/// A sampled texture's kind, from the format and aspect the renderer gave its image. -/// -/// Depth comes from the aspect, not the format: the renderer already knows which images it made as depth, and every -/// depth format is one. Two-channel float or normalized formats are motion candidates; three- and four-channel -/// colour formats are colour. Everything else is Other, which is a refusal rather than a default. -inline Kind kind_of(VkFormat format, VkImageAspectFlags aspect) { - if (aspect & VK_IMAGE_ASPECT_DEPTH_BIT) return Kind::Depth; - switch (format) { - case VK_FORMAT_R16G16_SFLOAT: - case VK_FORMAT_R16G16_SNORM: - case VK_FORMAT_R16G16_UNORM: - case VK_FORMAT_R32G32_SFLOAT: - return Kind::TwoChannel; - case VK_FORMAT_B10G11R11_UFLOAT_PACK32: - case VK_FORMAT_R16G16B16A16_SFLOAT: - case VK_FORMAT_R32G32B32A32_SFLOAT: - case VK_FORMAT_A2B10G10R10_UNORM_PACK32: - case VK_FORMAT_R8G8B8A8_UNORM: - case VK_FORMAT_R8G8B8A8_SRGB: - case VK_FORMAT_B8G8R8A8_UNORM: - case VK_FORMAT_B8G8R8A8_SRGB: - return Kind::Colour; - default: - break; - } - return Kind::Other; -} - -} // namespace mkwvk::upscale diff --git a/gpu/vk/upscale_seam.h b/gpu/vk/upscale_seam.h deleted file mode 100644 index 390ea9671..000000000 --- a/gpu/vk/upscale_seam.h +++ /dev/null @@ -1,106 +0,0 @@ -// (hookshot) The seam a vendor upscaler takes the game's own upscale dispatch through. The renderer resolves the -// dispatch once into a Request, asks which backend takes it, and runs that backend; a backend never re-derives the -// dispatch for itself. Plain data and no Vulkan, so tests/upscale_seam_test.cpp drives it; docs/upscaling.md has the -// contract and why this dispatch is the place. -#pragma once - -#include - -#include "upscale_contract.h" - -namespace mkwvk::upscale { - -/// What handles a recognized upscale dispatch. -enum class Backend : uint8_t { - None, ///< nothing does: the dispatch runs as itself - StandIn, ///< the compute resolve in shaders/taau_upscale.comp - Fsr3, ///< AMD FSR 3.1, recorded as our own compute passes (gpu/vk/vk_fsr3.h) - Dlss, ///< NVIDIA DLSS Super Resolution through NGX (gpu/vk/vk_dlss.h) -}; - -/// What the renderer can offer this dispatch. A backend that is not here cannot be chosen, whatever the inputs say. -struct Availability { - /// Push descriptors, which every backend here records through. - bool push_descriptor = false; - /// The program key is in the stand-in's list (RX_VK_TAAU_KEYS), so the translated network is not to be trusted. - bool stand_in_wanted = false; - /// FSR 3.1 was asked for (RX_VK_FSR=1) and this device can run its passes. - bool fsr3 = false; - /// DLSS was asked for (RX_VK_DLSS=1), this build has an NGX SDK, and the driver reports Super Resolution. - bool dlss = false; -}; - -/// A dispatch resolved once, in the terms a backend needs. Extents are in pixels; zero means the renderer could not -/// resolve that side, which is a refusal and never a default. -struct Request { - uint64_t program_key = 0; - /// What the sampled bindings provide (upscale_contract.h). - Verdict inputs; - /// The binding a backend will read as its colour input. The contract says which binding *is* the colour; this - /// says which one the renderer is going to hand over. They have to be the same for a temporal backend to be - /// given the dispatch, and historically the renderer has simply used the first. - size_t colour_binding = kNone; - /// The image the dispatch writes, as the renderer resolved it. - uint32_t output_width = 0; - uint32_t output_height = 0; - /// The output's format is one a backend can write into. - bool output_writable = false; -}; - -/// Whether a temporal backend could be given this dispatch. -/// -/// Every clause is a refusal that would otherwise become a wrong picture rather than a missing feature: -/// - the inputs must be complete, so there is motion and depth to reproject with; -/// - the colour the renderer hands over must be the colour the contract identified, or the backend is upscaling -/// whichever texture happened to be bound first; -/// - the output must be resolved and writable; -/// - the output must be at least the render extent, since an upscaler cannot resolve into something smaller than -/// what it was given (equal is native resolution, which is a valid anti-aliasing case). -inline bool temporal_possible(const Request& r) { - if (!r.inputs.inputs_complete) return false; - if (r.colour_binding == kNone || r.colour_binding != r.inputs.colour) return false; - if (!r.output_writable || r.output_width == 0 || r.output_height == 0) return false; - if (r.output_width < r.inputs.render_width || r.output_height < r.inputs.render_height) return false; - return true; -} - -/// Why `temporal_possible` said no, for a log. Null when it said yes. -inline const char* temporal_refusal(const Request& r) { - if (!r.inputs.inputs_complete) return "no colour, motion and depth at one extent"; - if (r.colour_binding == kNone || r.colour_binding != r.inputs.colour) return "the bound colour is not the input"; - if (!r.output_writable || r.output_width == 0 || r.output_height == 0) return "the output is not resolved"; - if (r.output_width < r.inputs.render_width || r.output_height < r.inputs.render_height) - return "the output is smaller than the render extent"; - return nullptr; -} - -/// Which backend takes this dispatch. -/// -/// The stand-in does not need the contract: it is a spatial resolve, and it runs wherever the key list asks for it, -/// exactly as it did before this seam existed. A temporal backend will be preferred here once there is one, and only -/// where `temporal_possible` agrees. -inline Backend choose(const Availability& a, const Request& r) { - if (!a.push_descriptor) return Backend::None; - // A vendor upscaler only where the inputs are all there: both of them resolve from colour, motion and depth at - // one extent, and neither degrades gracefully when handed less -- it produces a wrong picture instead. - if (temporal_possible(r)) { - // DLSS first where the hardware has it, because on that hardware it is the better of the two and its - // availability already means an NVIDIA driver reporting Super Resolution; FSR runs anywhere. - if (a.dlss) return Backend::Dlss; - if (a.fsr3) return Backend::Fsr3; - } - if (a.stand_in_wanted) return Backend::StandIn; - return Backend::None; -} - -inline const char* backend_name(Backend b) { - switch (b) { - case Backend::StandIn: return "stand-in"; - case Backend::Fsr3: return "FSR 3.1"; - case Backend::Dlss: return "DLSS"; - default: break; - } - return "none"; -} - -} // namespace mkwvk::upscale diff --git a/gpu/vk/upscaler_rows.h b/gpu/vk/upscaler_rows.h index be7fb4e67..8e943e8d3 100644 --- a/gpu/vk/upscaler_rows.h +++ b/gpu/vk/upscaler_rows.h @@ -1,19 +1,20 @@ /* The Insert menu's scaling rows (vk_menu.cpp), as plain functions: what the Render resolution row steps through for each - Upscaler, and the names it shows for DLSS's modes. No Vulkan, no menu: tests/test_upscaler_rows.cpp checks them. */ + Upscaler, and the names it shows for DLSS's (and FSR 3.1's) modes. No Vulkan, no menu: tests/test_upscaler_rows.cpp checks them. */ #pragma once namespace mkwvk::upscaler_rows { /// The Upscaler row (opts.dlss, RX_VK_DLSS): the game's own network, NVIDIA DLSS, NVIDIA DLAA, AMD FSR 3.1 (built from AMD's -/// shader sources: gpu/vk/vk_fsr3.cpp) and AMD FSR 4 (AMD's own runtime through its FidelityFX API: gpu/vk/vk_ffx.cpp). The -/// saved values keep their meaning: FSR came after DLAA, so a saved 1 or 2 is still DLSS or DLAA +/// shader sources: gpu/vk/vk_fsr3.cpp). The saved values keep their meaning: FSR 3.1 came after DLAA, so a saved 1 or 2 is +/// still DLSS or DLAA. (hookshot fork: and AMD FSR 4 after FSR 3.1, AMD's own runtime through its FidelityFX API: +/// gpu/vk/vk_ffx.cpp) enum { GAME = 0, DLSS = 1, DLAA = 2, FSR3 = 3, FSR4 = 4, kUpscalers = 5 }; /// One bit per upscaler that can run here (1 << GAME always): what the row steps through inline unsigned bit(int upscaler) { return 1u << upscaler; } /// The DLSS and DLAA bits, for a caller that knows only whether DLSS runs inline unsigned dlss_bits(bool dlss_ok) { return dlss_ok ? bit(DLSS) | bit(DLAA) : 0u; } -/// FSR 3.1 and FSR 4 scale from a smaller 3D at the same shares DLSS's modes use: Quality 1.5x (67%), Balanced 1.7x (58%), -/// Performance 2x (50%) and Ultra Performance 3x (33%) per axis, AMD's own ratios +/// FSR 3.1 scales from a smaller 3D at the shares DLSS's modes use: Quality 1.5x (67%), Balanced 1.7x (58%), Performance 2x +/// (50%) and Ultra Performance 3x (33%) per axis, AMD's own ratios too inline bool scales_by_mode(int upscaler) { return upscaler == DLSS || upscaler == FSR3 || upscaler == FSR4; } /// opts.resolution: 0 Auto (the game's dynamic resolution), else a share of the output in percent. 1 to 4 are the values from @@ -75,8 +76,8 @@ inline int snap(int upscaler, int v) { return best; } -/// The Upscaler row's next value from v (dir +1 / -1), wrapping over the choices there are: DLSS and DLAA only when -/// dlss_ok (a build with NVIDIA's SDK, on a GPU DLSS runs on). Without them it stays on the game's own +/// The Upscaler row's next value from v (dir +1 / -1), wrapping over the choices there are (available: bit() of each that +/// runs here). A value that cannot run here steps as the game's own does inline int step_upscaler(int v, int dir, unsigned available) { available |= bit(GAME); int at = v < 0 || v >= kUpscalers || !(available & bit(v)) ? GAME : v; @@ -86,9 +87,8 @@ inline int step_upscaler(int v, int dir, unsigned available) { } return GAME; } -inline int step_upscaler(int v, int dir, bool dlss_ok) { - return step_upscaler(v, dir, bit(GAME) | dlss_bits(dlss_ok)); -} +/// The same, where the choices are DLSS and DLAA only when dlss_ok (a build with NVIDIA's SDK, on a GPU DLSS runs on) +inline int step_upscaler(int v, int dir, bool dlss_ok) { return step_upscaler(v, dir, bit(GAME) | dlss_bits(dlss_ok)); } /// The DLSS model row (opts.dlss_model, saved as dlss_model): which of NVIDIA's networks DLSS and DLAA draw with, by its /// preset (NVSDK_NGX_DLSS_Hint_Render_Preset_*). 0 the transformer, preset K (the default here, the one tested); 1 the second @@ -119,7 +119,7 @@ inline char preset_letter(unsigned preset) { return preset ? (char)('A' + preset /// The Upscaler row is there only in a build with DLSS (built: dlss_built()): elsewhere the game's own is all there is, and /// the Render resolution row is the game's own's inline bool upscaler_shown(bool built) { return built; } -/// ...and in any build where an FSR can run (fsr: either FSR's backend answered that it runs on this device) +/// ...and in any build where FSR 3.1 runs (fsr: vk_fsr3.cpp answered that it runs on this GPU; this fork: or FSR 4) inline bool upscaler_shown(bool built, bool fsr) { return built || fsr; } /// Rows with nothing else to choose here (shown without arrows; Left and Right leave the saved value alone): the Upscaler /// where DLSS cannot run (dlss_ok: dlss_why() == DLSS_OK), the Render resolution with DLAA (the 3D at full size), the DLSS diff --git a/gpu/vk/vk_dlssg.h b/gpu/vk/vk_dlssg.h index 3ca856b97..e6943ff03 100644 --- a/gpu/vk/vk_dlssg.h +++ b/gpu/vk/vk_dlssg.h @@ -67,8 +67,8 @@ struct Inputs { bool depth_inverted = true; bool colour_hdr = true; /// The motion already includes the camera's movement. Ours does: it *is* the camera's movement - /// (gpu/vk/vk_camera_motion.h), which is why this defaults true and why saying otherwise would - /// have the network apply the camera twice. + /// (gpu/vk/vk_fsr3_inputs.h, shaders/fsr3_prep.comp), which is why this defaults true and why + /// saying otherwise would have the network apply the camera twice. bool camera_motion_included = true; bool reset = false; diff --git a/gpu/vk/vk_draw.cpp b/gpu/vk/vk_draw.cpp index a9f09d982..b2c9e220b 100644 --- a/gpu/vk/vk_draw.cpp +++ b/gpu/vk/vk_draw.cpp @@ -12,7 +12,6 @@ #include #include #include -#include #include #include #include @@ -34,6 +33,8 @@ #include "vk_draw.h" #include "dlss_actor.h" #include "vk_dlss.h" +#include "vk_fsr3.h" // (AMD FSR 3.1 in the gameplay upscale's place) +#include "vk_fsr3_inputs.h" #include "vk_dump.h" #include "vk_gprof.h" #include "vk_jobs.h" @@ -47,23 +48,11 @@ #include "shaders/clear_u_frag_spv.h" #include "shaders/clear_vert_spv.h" #include "shaders/taau_upscale_comp_spv.h" -#include "upscale_format.h" -#include "upscale_seam.h" -#include "vk_camera_motion.h" -#include "vk_menu.h" // (the Insert menu's "Scene upscaler" row) -#include "vk_fsr3.h" -#include "vk_ffx.h" // (hookshot: AMD FSR 4, AMD's runtime) #include "shaders/movie_upscale_comp_spv.h" #include "shader_recompiler/backend/spirv/mma_layout.h" #include "vk_work.h" // (after the others: counts the commands that do GPU work, for full_barrier) namespace mkwvk { - -/// (vk_replay.cpp) The presents so far. Declared here, at this namespace's scope and not inside -/// the anonymous one below, because a declaration in there is a *different* symbol: the link -/// leaves it undefined and dlopen(RTLD_NOW) then refuses the whole renderer, which looks like -/// "the renderer did not start" and nothing else. -extern int64_t presents_now; // (EvilOOT, RX_VK_DRAW_STATS: the pointer table's regions, vk_bank.cpp) struct PointerEntry { uint64_t addr, size; }; const PointerEntry* pointer_table(const NvnState& s, int stage); @@ -2037,20 +2026,9 @@ struct DescWriter { std::vector bufs; std::vector imgs; std::vector views; - /// (hookshot) What each entry of `imgs` is a view of, pushed in lockstep so index i is the same binding in - /// both. A view is the whole of an input to a draw and to our own compute passes, but NGX is handed whole - /// resources (gpu/vk/vk_dlss.h: a view *and* its image, format and extent), so DLSS cannot be given a - /// dispatch's colour from `imgs` alone. Default-constructed where the binding fell back to a dummy, which is - /// what a backend has to refuse on. - struct Source { - VkImage image = VK_NULL_HANDLE; - VkFormat format = VK_FORMAT_UNDEFINED; - uint32_t width = 0, height = 0; - }; - std::vector srcs; const Program* prog = nullptr; // (the program they were built for: a dispatch builds its own over a draw's) void reset() { - writes.clear(), bufs.clear(), imgs.clear(), views.clear(), srcs.clear(); + writes.clear(), bufs.clear(), imgs.clear(), views.clear(); } }; TLS_OBJECT(dw, DescWriter) @@ -2524,8 +2502,6 @@ void build_descriptors(const NvnState& s, const Program& p) { if (view && tex && tex->gpu_written) draw_sampled().push_back(tex); if (!view) view = dummies.view[(int)vt], st_dummy_textures += handle != 0; dw().imgs.push_back({sampler_for((int)(handle >> 20), d.is_depth), view, VK_IMAGE_LAYOUT_GENERAL}); - dw().srcs.push_back(tex ? DescWriter::Source{tex->image, tex->format, tex->width, tex->height} - : DescWriter::Source{}); } w.pImageInfo = &dw().imgs[first]; dw().writes.push_back(w); @@ -2561,8 +2537,6 @@ void build_descriptors(const NvnState& s, const Program& p) { if (dump_on()) dump_input(d.is_written ? 'W' : 'R', (uint32_t)dw().imgs.size(), handle, view ? tex : nullptr); if (!view && !dev.null_descriptor) view = VK_NULL_HANDLE; dw().imgs.push_back({VK_NULL_HANDLE, view, VK_IMAGE_LAYOUT_GENERAL}); - dw().srcs.push_back(tex ? DescWriter::Source{tex->image, tex->format, tex->width, tex->height} - : DescWriter::Source{}); } w.pImageInfo = &dw().imgs[first]; dw().writes.push_back(w); @@ -3020,75 +2994,6 @@ struct SceneDepth { SceneDepth scene_depth; -// (hookshot) The sub-pixel offset the scene is rasterized with, for a temporal upscaler. -// -// The game does not jitter: capture_view_projection below refuses any projection whose m02 is not -// exactly zero, and it finds one, so the projection it hands its own network carries no sub-pixel -// offset. Its network is single-image and has no use for one. FSR and DLSS do: without sample -// diversity they reconstruct from motion alone, which is softer than either is meant to be. -// -// The offset is applied to the viewport, not to the projection. The projection lives in the game's -// own memory and the GPU reads it there, so changing it would mean binding a patched copy to every -// draw that reads it -- the kind of per-draw work that has already cost this renderer 300 ms a -// frame once. A viewport offset moves rasterization by the same amount and costs two additions, and -// it applies to colour, depth and motion together because they are the same pass. -struct SceneJitter { - float x = 0.0f, y = 0.0f; ///< render pixels - int64_t frame = -1; ///< the present this was advanced for - uint32_t phase = 0; - /// What the scene is resolved to, once the seam has run once. The phase count depends on the - /// ratio, so until then the sequence is the 1:1 one, which is eight phases and not wrong -- just - /// shorter than it will be. - uint32_t display_width = 0; -}; -SceneJitter scene_jitter_state; - -/// RX_VK_JITTER=0 turns it off with an upscaler still on, which is the A/B worth having; =1 turns it -/// on with neither. Otherwise it follows whether a vendor upscaler is going to run at all, because -/// jitter without a temporal resolve is just shimmer. -bool jitter_wanted() { - static const bool yes = []() { - if (const char* e = getenv("RX_VK_JITTER")) return atoi(e) != 0; - if (const char* e = getenv("RX_VK_FSR"); e && atoi(e) != 0) return true; - // (NVIDIA DLSS jitters the scene its own way, in the projection: nx2/oot_jitter.py. This one is - // FSR's, and the two are never on together) - return scene_upscaler() != 0; - }(); - return yes; -} - -/// The radical inverse in a base: Halton, which is the sequence both vendors specify. -float halton_at(uint32_t index, uint32_t base) { - float f = 1.0f, r = 0.0f; - for (uint32_t i = index; i; i /= base) { - f /= (float)base; - r += f * (float)(i % base); - } - return r; -} - -/// How many phases before the sequence repeats. AMD's rule is 8 * ratio squared; NVIDIA's guidance -/// is the same shape, so one rule serves both rather than each backend inventing its own. -uint32_t jitter_phases(uint32_t render_width, uint32_t display_width) { - if (!render_width || display_width < render_width) return 8; - const float ratio = (float)display_width / (float)render_width; - const uint32_t n = (uint32_t)std::ceil(8.0f * ratio * ratio); - return std::clamp(n, 1u, 128u); -} - -/// Advances once per present. Called from the viewport path, which is the first place in a frame -/// that knows the scene's extent. -void advance_scene_jitter(uint32_t render_width, uint32_t display_width) { - if (scene_jitter_state.frame == presents_now) return; - scene_jitter_state.frame = presents_now; - const uint32_t phases = jitter_phases(render_width, display_width); - scene_jitter_state.phase = (scene_jitter_state.phase + 1) % std::max(1u, phases); - // Centred on the pixel: Halton gives [0,1), and an offset that is never negative would move the - // whole image half a pixel rather than sampling around where it is. - scene_jitter_state.x = halton_at(scene_jitter_state.phase + 1, 2) - 0.5f; - scene_jitter_state.y = halton_at(scene_jitter_state.phase + 1, 3) - 0.5f; -} - /// (hookshot) Once per distinct render target set, with RX_VK_MRT_CENSUS=1: how many colour attachments the game /// binds at once, their formats and the extent. Off by default and free while off. @@ -3363,20 +3268,7 @@ void dynamic_state(VkCommandBuffer cmd, const NvnState& s, const Targets& at, Vk // the viewport upside down (negative height): NVN's NDC has +y up, Vulkan's down float vx = s.viewport[0][0], vy = s.viewport[0][1], vw = s.viewport[0][2], vh = s.viewport[0][3]; if (vw == 0.0f && vh == 0.0f) vx = 0, vy = 0, vw = (float)at.width, vh = (float)at.height; - // (hookshot) The scene's own passes are jittered for a temporal upscaler: the ones that draw - // into a depth target of the extent the upscaler is given. Everything else -- the HUD, the - // menus, the movie layer -- is left alone, because a jittered HUD is a shimmering HUD and - // nothing resolves it. - float jx = 0.0f, jy = 0.0f; - if (jitter_wanted() && at.depth && depth_aspect(at.depth_format) && scene_depth.width && - at.width == scene_depth.width && at.height == scene_depth.height) { - advance_scene_jitter(scene_depth.width, scene_jitter_state.display_width - ? scene_jitter_state.display_width - : scene_depth.width); - jx = scene_jitter_state.x, jy = scene_jitter_state.y; - } - d.vp = {vx + jx, vy + vh + jy, vw, -vh, std::clamp(s.depth_near, 0.0f, 1.0f), - std::clamp(s.depth_far, 0.0f, 1.0f)}; + d.vp = {vx, vy + vh, vw, -vh, std::clamp(s.depth_near, 0.0f, 1.0f), std::clamp(s.depth_far, 0.0f, 1.0f)}; d.sc = {{0, 0}, {at.width, at.height}}; if (s.scissor[2] > 0 && s.scissor[3] > 0) { const int32_t x0 = std::max(0, s.scissor[0]), y0 = std::max(0, s.scissor[1]); @@ -5222,55 +5114,6 @@ static void capture_view_projection(const NvnState& s) { } } -/// (hookshot) RX_VK_VP_HUNT=1: find the view projection a scene draw reads, by looking for a value -/// only it can hold. The camera publishes tan(fovy/2) = 0.41421, so the projection's m11 is -/// 1/0.41421 = 2.41421, and a row-major 4x4 keeps m11 five floats in. This scans each bound uniform -/// buffer for that number and logs the stage, the slot, the byte offset and the sixteen floats -/// starting five back, which is the candidate matrix. Off by default; stops after a few hits. -/// -/// Better than guessing at another object's offsets: whatever this finds is the matrix the draw -/// itself used, which is the one the depth was rendered with. docs/upscaling.md. -static void vp_hunt(const NvnState& s) { - static const bool on = getenv("RX_VK_VP_HUNT") != nullptr; - if (!on) return; - static std::atomic told{0}; - if (told.load(std::memory_order_relaxed) >= 1) return; // (one buffer dump is the point) - for (int stage = 0; stage < kNvnStages; stage++) { - for (int slot = 0; slot < 16; slot++) { - const nvn_p_bind_buf& u = s.ubo[stage][slot]; - if (!u.addr || u.size < 24) continue; - const uint64_t bytes = u.size < 2048 ? u.size : 2048; - for (uint64_t off = 20; off + 4 <= bytes; off += 4) { - uint32_t word = 0; - if (!ub_read(u.addr + off, &word, 4)) break; - float v = 0; - memcpy(&v, &word, 4); - if (!(v > 2.4139f && v < 2.4145f)) continue; - // The matrix at the hit is the projection alone -- its upper-left 3x3 came back - // diagonal -- so the view, or a combined view projection, is elsewhere in the same - // buffer. Dump the whole buffer in rows of four, which is how a 4x4 reads, and look - // for a rotated 3x3. - logf("vk: vp hunt: stage %d slot %d, m11 at +%llu, buffer %llu bytes", stage, slot, - (unsigned long long)off, (unsigned long long)u.size); - for (uint64_t row = 0; row * 16 < bytes; row++) { - char line[160]; - int n = snprintf(line, sizeof line, "vk: +%3llu:", (unsigned long long)(row * 16)); - for (int i = 0; i < 4 && n < 130; i++) { - uint32_t w2 = 0; - float f2 = 0; - if (ub_read(u.addr + row * 16 + (uint64_t)i * 4, &w2, 4)) memcpy(&f2, &w2, 4); - n += snprintf(line + n, sizeof line - n, " %11.4g", (double)f2); - } - logf("%s", line); - if (row >= 23) break; // (24 rows: six 4x4s is more than enough to find it) - } - if (told.fetch_add(1, std::memory_order_relaxed) + 1 >= 1) return; - break; // (one hit per buffer is enough to name it) - } - } - } -} - /// (hookshot, a diagnostic for NVIDIA DLSS's motion: vk_dlss.cpp) RX_VK_DLSS_TRACE=: every that many frames, one frame's /// draws into targets at least 640 wide, logged: the program, its targets' formats, the geometry and the uniform buffers static void dlss_trace_draw(const NvnState& s, const Program& p, const DrawArgs& d, const Targets& at) { @@ -5339,7 +5182,6 @@ static void dlss_skin_check(const NvnState& s, const Program& p, const DrawArgs& } void draw(VkCommandBuffer cmd, NvnState& s, const DrawArgs& d) { - vp_hunt(s); capture_view_projection(s); PROF_HOT(PROF_DRAW); FINE_N(FC_DRAWS, 1); @@ -5353,9 +5195,12 @@ void draw(VkCommandBuffer cmd, NvnState& s, const DrawArgs& d) { } const Targets at = bare_targets(s, targets(s)); if (!at.width || !at.height) SKIP_HERE(); - // (hookshot) the scene's camera and depth for NVIDIA DLSS (vk_dlss.cpp): the vertex stage's uniform buffer 3 (NVN's binding 0) - if (at.n && at.color[0] && at.depth) + // (hookshot) the scene's camera and depth for NVIDIA DLSS (vk_dlss.cpp) and AMD FSR 3.1 (vk_fsr3_inputs.cpp): the vertex + // stage's uniform buffer 3 (NVN's binding 0) + if (at.n && at.color[0] && at.depth) { dlss_note_scene_draw(at.color[0], at.width, at.height, at.depth, s.ubo[0][0].addr, s.ubo[0][0].size); + fsr3_inputs::note_scene_draw(at.color[0], at.width, at.height, at.depth, s.ubo[0][0].addr, s.ubo[0][0].size); + } uint8_t types[8]; for (int i = 0; i < 8; i++) { const VkFormat f = i < at.n ? at.color_format[i] : VK_FORMAT_UNDEFINED; @@ -6189,50 +6034,6 @@ bool upscale_stub(VkCommandBuffer cmd, const NvnState& s, uint64_t key) { return true; } -/// (host/hos_oot_camera.c: tan(fovy/2) and the planes sead's projection published, 0 when nothing -/// has, which leaves a backend on its own defaults) -/// (host/hos_oot_camera.c) These live in the game executable, not in this library, so they are weak: -/// the renderer is dlopen'd with RTLD_NOW, which resolves every symbol up front, and a plain extern -/// to the host made this whole library fail to load with "undefined symbol". Weak and null-checked -/// means the renderer loads either way and simply has no camera when the host does not export one. -extern "C" __attribute__((weak)) float hos_oot_camera(float* near_plane, float* far_plane); -/// (the view projection the depth was rendered with, row major; false until something publishes it, -/// which is what keeps camera motion from reprojecting through a guess) -extern "C" __attribute__((weak)) int hos_oot_view_projection(float* row_major_4x4); - -void scene_jitter_display_width(uint32_t width) { - scene_jitter_state.display_width = width; -} - -bool scene_jitter(float* x, float* y) { - if (!jitter_wanted() || scene_jitter_state.frame < 0) return false; - if (x) *x = scene_jitter_state.x; - if (y) *y = scene_jitter_state.y; - return true; -} - -/// (hookshot) Whether a temporal backend should throw its history away this frame. -/// -/// docs/upscaling.md states the contract -- history is reset on a resize, on first use, and after a -/// gap of more than 250 ms -- and nothing implemented it, so every `Inputs::reset` was false -/// always. What that costs is not a crash: it is an upscaler accumulating across a loading screen -/// or a camera cut, and a frame interpolator blending two frames from different places, both of -/// which look like a smear for a few frames and are easy to blame on the backend. -/// -/// The gap is measured between the scene's own evaluations, not between presents, because that is -/// what the history belongs to. -bool scene_history_stale(uint32_t render_width, uint32_t render_height) { - using clk = std::chrono::steady_clock; - static uint32_t last_w = 0, last_h = 0; - static clk::time_point last{}; - const clk::time_point now = clk::now(); - const bool first = last.time_since_epoch().count() == 0; - const bool resized = render_width != last_w || render_height != last_h; - const bool gap = !first && now - last > std::chrono::milliseconds(250); - last_w = render_width, last_h = render_height, last = now; - return first || resized || gap; -} - /// (hookshot) The scene's depth and matrix, for the present path (vk_draw.h). bool scene_frame_inputs(SceneFrameInputs* out) { if (!out) return false; @@ -6249,49 +6050,10 @@ bool scene_frame_inputs(SceneFrameInputs* out) { memcpy(out->view, scene_vp.view, sizeof out->view); memcpy(out->projection, scene_vp.proj, sizeof out->projection); } - else if (hos_oot_view_projection) out->have_view_projection = hos_oot_view_projection(out->view_projection) != 0; return true; } -/// (hookshot) Whether a program is one an upscaler backend may be given, by key prefix and -/// independent of whether the stand-in wants it: RX_VK_UPSCALE_KEYS, default the gameplay TAAU -/// network. taau_key's own default turns itself off where the card can run the real network, which -/// is the wrong condition for a backend that is meant to replace it. -static bool upscale_trace_key(uint64_t key) { - const char* keys = getenv("RX_VK_UPSCALE_KEYS") ? getenv("RX_VK_UPSCALE_KEYS") : "fd029a317a9a4b94"; - char hex[24]; - snprintf(hex, sizeof hex, "%016llx", (unsigned long long)key); - for (const char* q = keys; *q;) { - const char* e = q; - while (*e && *e != ',') e++; - if (e > q && *q != '-' && !strncmp(hex, q, (size_t)(e - q))) return true; - q = *e ? e + 1 : e; - } - return false; -} - -/// (hookshot) The dispatch's sampled textures in descriptor order, in the terms of the upscaler input contract -/// (gpu/vk/upscale_contract.h). Resolved exactly as build_descriptors resolves them, including the storage-pointer -/// guard, so index i here is dw().imgs[i] -- the descriptor a backend is actually handed. -/// -/// draw_sampled cannot be used for this. It records a sampled texture only where the GPU has written it, and it -/// records every storage image as well, so its indices are not descriptor slots and binding 0 of it is not -/// dw().imgs[0]. An upscaler wired to that correspondence would read whichever texture happened to be bound first. -static void upscale_bindings(const NvnState& s, const Stage& st, std::vector& out) { - out.clear(); - for (const auto& d : st.info.texture_descriptors) { - const VkImageViewType vt = view_type(d.type); - for (uint32_t k = 0; k < d.count; k++) { - const uint32_t handle = handle_is_storage_pointer(st.info, d, k) ? 0u : handle_of(s, st, d, k); - Texture* tex = nullptr; - if (handle) texture_view_of(handle, vt, ViewUse::Sample, VK_FORMAT_UNDEFINED, &tex); - out.push_back(tex ? upscale::Binding{upscale::kind_of(tex->format, tex->aspect), tex->width, tex->height} - : upscale::Binding{}); - } - } -} - /// (hookshot) OoT's gameplay TAAU network (fd029a317a9a4b94) stood in for: its input upscaled into its output /// (shaders/taau_upscale.comp). The network's translation loses the blue channel, the yellow cast over every /// scene; with this the picture is right, without the network's temporal anti-aliasing. @@ -6432,6 +6194,28 @@ static bool typed_upscale(VkCommandBuffer cmd, VkImageView input_view, VkImageVi if (temporal) probe_image(cmd, out, level, 0, key, 't'); return true; } +/// (hookshot) AMD FSR 3.1 in place of the gameplay upscale network (vk_fsr3.cpp), and its frame interpolation's inputs from it +/// (vk_fsr3_inputs.cpp): the same dispatches as dlss_stand_in below, found the same way. true: FSR 3.1 wrote the output +bool fsr3_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { + if (p.stages.empty() || !fsr3_inputs::wanted()) return false; + const Stage& st = p.stages[0]; + if (!gameplay_network(p.key) && !(st.info.uses_cooperative_matrix && st.info.texture_descriptors.size() == 1 && + st.info.image_descriptors.size() == 1)) + return false; + if (st.info.texture_descriptors.empty() || st.info.image_descriptors.empty()) return false; + size_t ntex = 0; // (build_descriptors' image infos: the textures', then the images') + for (const auto& d : st.info.texture_descriptors) ntex += d.count; + if (dw().imgs.size() <= ntex || !dw().imgs[0].imageView || !dw().imgs[ntex].imageView) return false; + Texture* in = nullptr; + const uint32_t in_handle = handle_of(s, st, st.info.texture_descriptors[0], 0); + if (in_handle) texture_view_of(in_handle, VK_IMAGE_VIEW_TYPE_2D, ViewUse::Sample, VK_FORMAT_UNDEFINED, &in); + const auto& od = st.info.image_descriptors[0]; + Texture* out = nullptr; + uint32_t level = 0; + const uint32_t out_handle = handle_of(s, st, od, 0); + if (out_handle) texture_view_of(out_handle, VK_IMAGE_VIEW_TYPE_2D, ViewUse::Storage, image_format(od.format), &out, &level); + return fsr3_upscale(cmd, p.key, gameplay_network(p.key), in, dw().imgs[0].imageView, out, dw().imgs[ntex].imageView, level); +} /// (hookshot) NVIDIA DLSS in place of the gameplay upscale network (vk_dlss.cpp), when it is on and its inputs are as expected: /// the network's input as it samples it, its output's storage view bool dlss_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { @@ -6462,43 +6246,8 @@ bool dlss_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { vertex_set.on = false, last_ib.on = false; return done; } -/// (hookshot) The seam of docs/upscaling.md: a recognized upscale dispatch is resolved once into an -/// upscale::Request, a backend is chosen for it, and that backend runs it. The compute stand-in is the only backend -/// today, and it is a spatial resolve that needs none of the input contract, so this is the same behaviour through -/// one gate. What the seam adds is the gate a temporal backend has to pass, reported once per program. bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { - upscale::Availability avail; - avail.push_descriptor = dev.push_descriptor && vkCmdPushDescriptorSetKHR != nullptr; - avail.stand_in_wanted = taau_key(p.key); - upscale::Request req; - req.program_key = p.key; - // (hookshot) A backend that is not the stand-in has to be reachable without it. On a card with - // hardware f16 matrix multiply taau_key defaults to "-", so the network runs as itself and the - // stand-in never does; gating everything on it would have made FSR unreachable on exactly the - // hardware that can run it. RX_VK_FSR=1 therefore brings us in here on its own. - // RX_VK_FSR wins where it is set, so a test run is not at the mercy of a saved ini; otherwise - // the Insert menu's "Scene upscaler" row decides. Read once: the backends cache what they are. - // (hookshot) RX_VK_FSR cannot change while the process runs, so it is asked once; the Insert - // menu's Upscaling row can change at any moment, so it is asked every dispatch. That is what - // lets a player turn FSR on and see it on the next frame instead of the next launch. The - // backend's own supported() still caches the device's answer, which cannot change. - static const int fsr_env = []() { - const char* e = getenv("RX_VK_FSR"); - return e ? (atoi(e) != 0 ? 1 : 0) : -1; - }(); - const bool fsr_wanted = fsr_env >= 0 ? fsr_env != 0 : scene_upscaler() == 3; - // (hookshot) Both vendor backends ask their own question: FSR whether this device can run its - // passes, DLSS whether this is an NVIDIA driver reporting Super Resolution with an NGX runtime - // loaded. Each answers once and caches, so this costs nothing per dispatch. upscale::choose - // picks between them; this function does not. - avail.fsr3 = fsr_wanted && fsr3::supported(); - // (hookshot) AMD FSR 4, through AMD's own runtime (gpu/vk/vk_ffx.h): the same inputs as FSR 3.1, handed over as - // whole images. Its own supported() answers once and caches - const bool ffx_wanted = fsr_env != 0 && scene_upscaler() == 4 && ffx::upscale_supported(); - // (NVIDIA DLSS is not chosen here: dlss_stand_in, before this, takes the dispatch when it runs) - const bool fsr_here = (avail.fsr3 || ffx_wanted) && avail.push_descriptor && upscale_trace_key(p.key); - if (p.stages.empty()) return false; - if (upscale::choose(avail, req) != upscale::Backend::StandIn && !fsr_here) return false; + if (!taau_key(p.key) || !dev.push_descriptor || !vkCmdPushDescriptorSetKHR || p.stages.empty()) return false; const Stage& st = p.stages[0]; if (st.info.texture_descriptors.empty() || st.info.image_descriptors.empty()) return false; size_t ntex = 0; // (build_descriptors' image infos: the textures', then the images') @@ -6511,182 +6260,6 @@ bool taau_stand_in(VkCommandBuffer cmd, const NvnState& s, const Program& p) { if (!handle) return false; texture_view_of(handle, VK_IMAGE_VIEW_TYPE_2D, ViewUse::Storage, image_format(od.format), &out, &level); if (!out || out->format != VK_FORMAT_B10G11R11_UFLOAT_PACK32) return false; - // (hookshot) what a temporal backend would be given here, said once per program. The bindings are in descriptor - // order, so the contract's colour is a descriptor slot: dw().imgs[req.colour_binding] is the view a backend reads, - // and the stand-in's own dw().imgs[0] is only that slot when the contract agrees it is. - std::vector bindings; - upscale_bindings(s, st, bindings); - req.inputs = upscale::classify(bindings.data(), bindings.size()); - req.colour_binding = req.inputs.colour; - req.output_width = std::max(1u, out->width >> level); - req.output_height = std::max(1u, out->height >> level); - req.output_writable = true; - { - static std::mutex mu; - static std::unordered_map said; - std::lock_guard lk(mu); - if (said[p.key]++ == 0) { - const char* why = upscale::temporal_refusal(req); - float near_plane = 0.0f, far_plane = 0.0f; - const float tan_half = hos_oot_camera ? hos_oot_camera(&near_plane, &far_plane) : 0.0f; - logf("vk: upscale seam %016llx: %s, output %ux%u, inputs %ux%u; a temporal backend %s%s", - (unsigned long long)p.key, upscale::backend_name(upscale::Backend::StandIn), req.output_width, - req.output_height, req.inputs.render_width, req.inputs.render_height, - why ? "could not be given this: " : "could be given this", why ? why : ""); - // (what a backend would be given besides the dispatch: the camera the lifted code - // published and the scene depth the targets kept, neither of which is in this dispatch) - logf("vk: upscale seam %016llx: camera %s (near %.4f far %.1f fov %.1f deg), scene depth " - "%ux%u format %d", - (unsigned long long)p.key, tan_half > 0.0f ? "published" : "not published yet", - near_plane, far_plane, tan_half > 0.0f ? 2.0f * std::atan(tan_half) * 57.29578f : 0.0f, - scene_depth.width, scene_depth.height, (int)scene_depth.format); - } - } - // (hookshot) FSR 3.1 in the dispatch's place, opt-in with RX_VK_FSR=1 and only where the - // contract holds. Its own RGBA16F output is blitted into the game's target, which is the - // format conversion the game's network would have done itself. - // (hookshot) The two inputs this dispatch never carries, assembled: the scene's own depth, and - // motion reprojected from it. docs/upscaling.md says why they cannot be taken from here. - // (the dispatch's own input extent, which is what the network upscales from. req.inputs is the - // contract's view of the bindings and leaves the render extent at 0 for this dispatch, because - // it has no motion or depth among them -- gating on that meant FSR could never be reached) - uint32_t in_w = 0, in_h = 0; - if (!bindings.empty()) in_w = bindings[0].width, in_h = bindings[0].height; - if (in_w) scene_jitter_display_width(req.output_width); - if (fsr_here && scene_depth.view && in_w && in_h && - scene_depth.width == in_w && scene_depth.height == in_h) { - fsr3::note_frame(); // (the frame time at this seam, for every RX_VK_FSR_STAGE) - camera_motion::Matrix vp{}; - bool have_vp = scene_vp.have; - if (have_vp) memcpy(vp.m, scene_vp.m, sizeof vp.m); - else if (hos_oot_view_projection) have_vp = hos_oot_view_projection(vp.m) != 0; - if (have_vp) { - const VkImageView motion = camera_motion::record(cmd, scene_depth.view, scene_depth.format, - scene_depth.width, scene_depth.height, vp); - if (motion) { - req.inputs.motion = 0; // (assembled, not a binding of this dispatch) - upscale::Request assembled = req; - assembled.inputs.inputs_complete = true; - assembled.inputs.render_width = scene_depth.width; - assembled.inputs.render_height = scene_depth.height; - assembled.inputs.colour = 0; // (the dispatch's single sampled texture) - assembled.colour_binding = assembled.inputs.colour; - // Whether FSR's history still belongs to this scene. - const bool stale = scene_history_stale(scene_depth.width, scene_depth.height); - if (ffx_wanted) { - // AMD's API is handed whole resources: the colour's image and format from the lockstep - // DescWriter::Source, the depth's from the targets, the motion's from the module that just - // wrote it. A missing one is a refusal inside the backend, and FSR 3.1 below takes it. - ffx::UpscaleInputs xi; - xi.color = dw().srcs.empty() ? VK_NULL_HANDLE : dw().srcs[0].image; - xi.color_format = dw().srcs.empty() ? VK_FORMAT_UNDEFINED : dw().srcs[0].format; - xi.depth = scene_depth.image, xi.depth_format = scene_depth.format; - xi.motion = camera_motion::motion_image(), xi.motion_format = camera_motion::motion_format(); - xi.render_width = scene_depth.width, xi.render_height = scene_depth.height; - xi.upscale_width = req.output_width, xi.upscale_height = req.output_height; - xi.motion_scale[0] = 1.0f, xi.motion_scale[1] = 1.0f; // (already render pixels) - scene_jitter(&xi.jitter[0], &xi.jitter[1]); - xi.reset = stale; - float xnp = 0.0f, xfp = 0.0f; - const float xth = hos_oot_camera ? hos_oot_camera(&xnp, &xfp) : 0.0f; - if (xth > 0.0f && xnp > 0.0f) xi.near_plane = xnp, xi.fov_y = 2.0f * std::atan(xth); - if (ffx::upscale(cmd, xi)) { - static std::atomic said_ffx{0}; - if (said_ffx++ == 0) - logf("vk: amd fsr 4 (%s) %ux%u -> %ux%u with assembled depth and camera motion", - ffx::upscale_provider(), xi.render_width, xi.render_height, xi.upscale_width, - xi.upscale_height); - VkImageBlit b{}; - b.srcSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}; - b.srcOffsets[1] = {(int32_t)req.output_width, (int32_t)req.output_height, 1}; - b.dstSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, level, 0, 1}; - b.dstOffsets[1] = {(int32_t)req.output_width, (int32_t)req.output_height, 1}; - vkCmdBlitImage(cmd, ffx::output_image(), VK_IMAGE_LAYOUT_GENERAL, out->image, - VK_IMAGE_LAYOUT_GENERAL, 1, &b, VK_FILTER_NEAREST); - return true; - } - } - if (avail.fsr3 && upscale::temporal_possible(assembled)) { - fsr3::Inputs ai; - ai.color = dw().imgs[0].imageView; // (its only sampled texture) - ai.depth = scene_depth.view; - ai.motion = motion; - ai.render_width = scene_depth.width, ai.render_height = scene_depth.height; - ai.upscale_width = req.output_width, ai.upscale_height = req.output_height; - ai.motion_scale[0] = 1.0f, ai.motion_scale[1] = 1.0f; // (already render pixels) - // The offset this frame's scene was rasterized with, which the upscaler has to - // undo. Zero where nothing is jittering, which is what that means. - scene_jitter(&ai.jitter[0], &ai.jitter[1]); - ai.reset = stale; - float np = 0.0f, fp = 0.0f; - const float th = hos_oot_camera ? hos_oot_camera(&np, &fp) : 0.0f; - if (th > 0.0f && np > 0.0f) ai.near_plane = np, ai.fov_y = 2.0f * std::atan(th); - if (fsr3::upscale(cmd, ai)) { - // (how often this runs, with the log's own timestamps: nine passes a call - // is cheap once a frame and ruinous twenty times, and 3 fps said one of - // those was happening. Every 300 so the rate is readable from the gap) - static std::atomic said{0}; - const int n = said++; - if (n == 0) - logf("vk: fsr3 %ux%u -> %ux%u with assembled depth and camera motion", - ai.render_width, ai.render_height, ai.upscale_width, ai.upscale_height); - if (n % 300 == 0) logf("vk: fsr3 evaluations: %d", n + 1); - if (fsr3::fsr_stage() != 3) { // (3: everything but this blit, so its cost shows) - VkImageBlit b{}; - b.srcSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}; - b.srcOffsets[1] = {(int32_t)req.output_width, (int32_t)req.output_height, 1}; - b.dstSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, level, 0, 1}; - b.dstOffsets[1] = {(int32_t)req.output_width, (int32_t)req.output_height, 1}; - vkCmdBlitImage(cmd, fsr3::output_image(), VK_IMAGE_LAYOUT_GENERAL, - out->image, VK_IMAGE_LAYOUT_GENERAL, 1, &b, - VK_FILTER_NEAREST); - } - return true; - } - } - } - } - } - if (fsr_here && upscale::temporal_possible(req) && fsr3::supported()) { - fsr3::Inputs fi; - fi.color = dw().imgs[req.colour_binding].imageView; - fi.depth = dw().imgs[req.inputs.depth].imageView; - fi.motion = dw().imgs[req.inputs.motion].imageView; - fi.render_width = req.inputs.render_width, fi.render_height = req.inputs.render_height; - fi.upscale_width = req.output_width, fi.upscale_height = req.output_height; - fi.motion_scale[0] = (float)req.inputs.render_width; - fi.motion_scale[1] = (float)req.inputs.render_height; - { // (the game's own camera where the patch published it: nx2/oot_camera.py. Without it - // the Inputs defaults stand, which only scales FSR's disocclusion thresholds) - float near_plane = 0.0f, far_plane = 0.0f; - const float tan_half = hos_oot_camera ? hos_oot_camera(&near_plane, &far_plane) : 0.0f; - if (tan_half > 0.0f && near_plane > 0.0f) { - fi.near_plane = near_plane; - fi.fov_y = 2.0f * std::atan(tan_half); - } - } - // (the jitter the game's own network used is not extracted yet, so this says no sub-pixel - // offset: the picture is a plumbing check, not FSR at its quality. Logged once so a report - // of a soft image is not mistaken for FSR behaving badly) - if (fsr3::upscale(cmd, fi)) { - static std::atomic told{0}; - if (told++ == 0) - logf("vk: fsr3 standing in for %016llx (jitter not extracted yet: the image is a " - "plumbing check, not FSR's quality)", (unsigned long long)p.key); - VkImageBlit blit{}; - blit.srcSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}; - blit.srcOffsets[1] = {(int32_t)req.output_width, (int32_t)req.output_height, 1}; - blit.dstSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, level, 0, 1}; - blit.dstOffsets[1] = {(int32_t)req.output_width, (int32_t)req.output_height, 1}; - vkCmdBlitImage(cmd, fsr3::output_image(), VK_IMAGE_LAYOUT_GENERAL, out->image, - VK_IMAGE_LAYOUT_GENERAL, 1, &blit, VK_FILTER_NEAREST); - return true; - } - } - if (!avail.stand_in_wanted) return false; // (we came in for FSR, which did not take it) - // (hookshot) Read here and not at the top: a dispatch this function turns down must not pay for - // an environment lookup it never uses, which is the property tests/test_taau_env_lookup.py - // guards. taau_key() above has its own cached answer; this is the stand-in's own list. const char* keys = getenv("RX_VK_TAAU_KEYS") ? getenv("RX_VK_TAAU_KEYS") : "fd029a317a9a4b94"; return typed_upscale(cmd, dw().imgs[0].imageView, dw().imgs[ntex].imageView, out, level, p.key, keys, true); } @@ -7299,30 +6872,15 @@ void dispatch(VkCommandBuffer cmd, NvnState& s, uint32_t x, uint32_t y, uint32_t static std::unordered_map seen; std::lock_guard lk(mu); if (seen[p.key]++ == 0) { - // (hookshot) with each one's role in the upscaler input contract, so this says whether a temporal - // upscaler could take this network's place rather than leaving it to be counted by hand later: - // docs/upscaling.md - std::vector bindings; - upscale_bindings(s, p.stages[0], bindings); - std::vector roles(bindings.size(), upscale::Role::None); - const upscale::Verdict v = upscale::classify(bindings.data(), bindings.size(), roles.data()); char line[900]; int n = snprintf(line, sizeof line, "vk: network %016llx: dispatch %ux%ux%u, %zu textures %zu images:", (unsigned long long)p.key, x, y, z, p.stages[0].info.texture_descriptors.size(), p.stages[0].info.image_descriptors.size()); for (const Texture* t : draw_sampled()) - if (t && n < 840) n += snprintf(line + n, sizeof line - n, " %ux%ux%u/%u", t->width, t->height, t->depth, (unsigned)t->format); - for (size_t i = 0; i < bindings.size() && n < 840; ++i) { - n += snprintf(line + n, sizeof line - n, " %u:%ux%u", (unsigned)i, bindings[i].width, bindings[i].height); - if (roles[i] != upscale::Role::None && n < 840) - n += snprintf(line + n, sizeof line - n, "=%s", upscale::role_name(roles[i])); - } - if (n < 860) - n += v.inputs_complete - ? snprintf(line + n, sizeof line - n, "; upscaler inputs at %ux%u", v.render_width, v.render_height) - : snprintf(line + n, sizeof line - n, "; no upscaler inputs"); + if (t && n < 860) n += snprintf(line + n, sizeof line - n, " %ux%ux%u/%u", t->width, t->height, t->depth, (unsigned)t->format); logf("%s", line); } } + if (fsr3_stand_in(cmd, s, p)) return void(st_dispatches++); if (dlss_stand_in(cmd, s, p)) return void(st_dispatches++); if (taau_stand_in(cmd, s, p)) return void(st_dispatches++); if (!p.compute_pipeline) SKIP_HERE(); diff --git a/gpu/vk/vk_draw.h b/gpu/vk/vk_draw.h index 6c4cbc637..24faceb12 100644 --- a/gpu/vk/vk_draw.h +++ b/gpu/vk/vk_draw.h @@ -12,10 +12,10 @@ namespace mkwvk { void descriptors_disturbed(); /// (hookshot) What the scene's last frame left behind, for a backend that runs outside the draw -/// path. Frame generation is recorded at present time, where the scene's depth and the matrix its -/// draws used are both out of reach; the draw path keeps them as it resolves the upscale dispatch -/// and this is how they are read back. False when the scene has not been seen yet, which a caller -/// takes as "do not generate this frame" rather than as a reason to guess. +/// path: the open neural rendering backend (vk_opennr.cpp). The upscalers and frame generation take +/// theirs from the scene's camera uniform buffer instead (gpu/vk/vk_fsr3_inputs.h). False when the +/// scene has not been seen yet, which a caller takes as "nothing to give" rather than as a reason to +/// guess. struct SceneFrameInputs { VkImage depth_image = VK_NULL_HANDLE; VkImageView depth_view = VK_NULL_HANDLE; @@ -30,11 +30,6 @@ struct SceneFrameInputs { }; bool scene_frame_inputs(SceneFrameInputs* out); -/// (hookshot) The sub-pixel offset this frame's scene was rasterized with, in render pixels, for the -/// backend that has to undo it. False when nothing is jittering, which a backend takes as "no -/// offset" and not as "use the last one". -bool scene_jitter(float* x, float* y); - /// A graphics pipeline as hookshot_pipelines.bin keeps it (the precompile's notes): what built it struct PipeNote { uint64_t key, prog, variant; diff --git a/gpu/vk/vk_ffx.cpp b/gpu/vk/vk_ffx.cpp index c519263ca..0d5e3cfec 100644 --- a/gpu/vk/vk_ffx.cpp +++ b/gpu/vk/vk_ffx.cpp @@ -4,6 +4,22 @@ #include "vk_ffx.h" +#include + +#include "upscaler_rows.h" +#include "vk_menu.h" + +namespace mkwvk { +bool fsr4_wanted() { + static const bool off = [] { + const char* e = getenv("RX_VK_FSR"); + return e && *e && atoi(e) == 0; + }(); + // (the row first: AMD's runtime is not looked for while the row is not on FSR 4) + return !off && opts.dlss == upscaler_rows::FSR4 && ffx::upscale_supported(); +} +} // namespace mkwvk + #if defined(_WIN32) #include @@ -31,6 +47,7 @@ int env_int(const char* name, int fallback) { struct Image { VkImage image = VK_NULL_HANDLE; VmaAllocation memory = nullptr; + VkImageView view = VK_NULL_HANDLE; // (for the pass that squares the upscaler's picture back: vk_fsr3.cpp) uint32_t width = 0, height = 0; VkFormat format = VK_FORMAT_UNDEFINED; }; @@ -51,7 +68,7 @@ struct State { uint32_t up_rw = 0, up_rh = 0, up_ow = 0, up_oh = 0; Image up_out; bool up_first = true; - LARGE_INTEGER up_last{}; + bool up_infinite = false; // (the context's FFX_UPSCALE_ENABLE_DEPTH_INFINITE: made again when the camera's differs) bool up_failed = false; // frame generation @@ -60,6 +77,7 @@ struct State { ffxContext fg = nullptr; uint32_t fg_w = 0, fg_h = 0, fg_rw = 0, fg_rh = 0; VkFormat fg_format = VK_FORMAT_UNDEFINED; + bool fg_infinite = false; Image made[4]; uint64_t frame_id = 0; bool fg_reset = true; @@ -187,7 +205,11 @@ FfxApiResource resource(VkImage image, VkFormat format, uint32_t w, uint32_t h, write ? FFX_API_RESOURCE_STATE_UNORDERED_ACCESS : FFX_API_RESOURCE_STATE_GENERIC_READ); } +/// A far plane the runtime should take as infinite: none given (0), or FLT_MAX (fsr3_math.h: an infinite projection) +bool infinite(float near_plane, float far_plane) { return !(far_plane > near_plane) || far_plane >= FLT_MAX; } + void drop(Image& im) { + if (im.view) vkDestroyImageView(dev.device, im.view, nullptr); if (im.image) destroy_image(im.image, im.memory); im = Image{}; } @@ -210,6 +232,14 @@ bool make(VkCommandBuffer cmd, Image& im, VkFormat format, uint32_t w, uint32_t return false; } im.width = w, im.height = h, im.format = format; + VkImageViewCreateInfo vc{VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO}; + vc.image = im.image, vc.viewType = VK_IMAGE_VIEW_TYPE_2D, vc.format = format; + vc.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}; + if (vkCreateImageView(dev.device, &vc, nullptr, &im.view) != VK_SUCCESS) { + logf("vk: amd fsr 4: a view of a %ux%u image was not made", w, h); + drop(im); + return false; + } VkImageMemoryBarrier2 b{VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2}; b.srcStageMask = VK_PIPELINE_STAGE_2_NONE; b.dstStageMask = VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT; @@ -284,8 +314,9 @@ bool upscale(VkCommandBuffer cmd, const UpscaleInputs& in) { if (!in.color || !in.depth || !in.motion || !in.render_width || !in.render_height || !in.upscale_width || !in.upscale_height || !(in.near_plane > 0.0f) || !(in.fov_y > 0.0f)) return false; + const bool inf = infinite(in.near_plane, in.far_plane); if (s.up && (in.render_width > s.up_rw || in.render_height > s.up_rh || in.upscale_width != s.up_ow || - in.upscale_height != s.up_oh)) + in.upscale_height != s.up_oh || inf != s.up_infinite)) drop_upscaler(); if (!s.up) { ffxCreateBackendVKDesc backend{}; @@ -294,11 +325,13 @@ bool upscale(VkCommandBuffer cmd, const UpscaleInputs& in) { ffxCreateContextDescUpscale c{}; c.header.type = FFX_API_CREATE_CONTEXT_DESC_TYPE_UPSCALE; c.header.pNext = &backend.header; - // HDR in (the scene is B10G11R11 float), reversed depth with an infinite far plane (the game's), - // and no exposure texture, so the runtime works the exposure out itself. The render size may - // change under the context as the game's dynamic resolution moves, within the maximum. + // The colour as FSR 3.1's passes take it (compiled with FFX_FSR3UPSCALER_OPTION_HDR_COLOR_INPUT), the depth + // reversed as vk_fsr3_inputs.cpp makes it (1 at the near plane), infinite only when the scene's projection is + // (it is not: its far plane is at 1000.5), and no exposure texture, so the runtime works the exposure out + // itself. The render size may change under the context as the game's dynamic resolution moves, within the + // maximum. c.flags = FFX_UPSCALE_ENABLE_HIGH_DYNAMIC_RANGE | FFX_UPSCALE_ENABLE_DEPTH_INVERTED | - FFX_UPSCALE_ENABLE_DEPTH_INFINITE | FFX_UPSCALE_ENABLE_AUTO_EXPOSURE | + (inf ? FFX_UPSCALE_ENABLE_DEPTH_INFINITE : 0u) | FFX_UPSCALE_ENABLE_AUTO_EXPOSURE | FFX_UPSCALE_ENABLE_DYNAMIC_RESOLUTION; if (env_int("RX_VK_FFX_DEBUG", 0) > 0) c.flags |= FFX_UPSCALE_ENABLE_DEBUG_CHECKING; c.maxRenderSize = {in.upscale_width, in.upscale_height}; @@ -319,19 +352,12 @@ bool upscale(VkCommandBuffer cmd, const UpscaleInputs& in) { s.up_rw = in.upscale_width, s.up_rh = in.upscale_height; s.up_ow = in.upscale_width, s.up_oh = in.upscale_height; s.up_first = true; + s.up_infinite = inf; ffxQueryGetProviderVersion v{}; v.header.type = FFX_API_QUERY_DESC_TYPE_GET_PROVIDER_VERSION; if (s.query(&s.up, &v.header) == FFX_API_RETURN_OK && v.versionName) s.up_provider = v.versionName; logf("vk: amd fsr 4: %s from up to %ux%u to %ux%u", s.up_provider.c_str(), s.up_rw, s.up_rh, s.up_ow, s.up_oh); } - LARGE_INTEGER now, freq; - QueryPerformanceCounter(&now); - QueryPerformanceFrequency(&freq); - float dt_ms = 16.667f; - if (!s.up_first && s.up_last.QuadPart) - dt_ms = (float)(1000.0 * (double)(now.QuadPart - s.up_last.QuadPart) / (double)freq.QuadPart); - s.up_last = now; - ffxDispatchDescUpscale d{}; d.header.type = FFX_API_DISPATCH_DESC_TYPE_UPSCALE; d.commandList = (void*)cmd; @@ -339,19 +365,19 @@ bool upscale(VkCommandBuffer cmd, const UpscaleInputs& in) { d.depth = resource(in.depth, in.depth_format, in.render_width, in.render_height, false); d.motionVectors = resource(in.motion, in.motion_format, in.render_width, in.render_height, false); d.output = resource(s.up_out.image, s.up_out.format, s.up_ow, s.up_oh, true); - // (the jitter and the motion as vk_fsr3.cpp hands them to the same upscaler's sources: render pixels, - // and the vectors already in render pixels, so the scale is 1) + // (the jitter and the motion as vk_fsr3.cpp hands them to FSR 3.1's passes: render pixels, x right and y down, and + // the vectors already in render pixels, so the scale is 1) d.jitterOffset = {in.jitter[0], in.jitter[1]}; d.motionVectorScale = {in.motion_scale[0], in.motion_scale[1]}; d.renderSize = {in.render_width, in.render_height}; d.upscaleSize = {s.up_ow, s.up_oh}; d.enableSharpening = false; // (the Sharpness row sharpens the finished picture already) d.sharpness = 0.0f; - d.frameTimeDelta = std::clamp(dt_ms, 0.0f, 1000.0f); + d.frameTimeDelta = std::clamp(in.frame_time_ms, 0.0f, 1000.0f); d.preExposure = 1.0f; d.reset = in.reset || s.up_first; d.cameraNear = in.near_plane; - d.cameraFar = in.far_plane > in.near_plane ? in.far_plane : FLT_MAX; + d.cameraFar = inf ? FLT_MAX : in.far_plane; d.cameraFovAngleVertical = in.fov_y; d.viewSpaceToMetersFactor = 1.0f; d.flags = 0; @@ -368,6 +394,7 @@ bool upscale(VkCommandBuffer cmd, const UpscaleInputs& in) { } VkImage output_image() { return st().up_out.image; } +VkImageView output_view() { return st().up_out.view; } bool frames_supported() { State& s = st(); @@ -396,8 +423,9 @@ bool generate(VkCommandBuffer cmd, const FrameInputs& in) { if (!in.color || !in.depth || !in.motion || !in.width || !in.height || !in.render_width || !in.render_height || in.frames < 1 || in.frames > 4 || !(in.near_plane > 0.0f) || !(in.fov_y > 0.0f)) return false; + const bool inf = infinite(in.near_plane, in.far_plane); if (s.fg && (in.width != s.fg_w || in.height != s.fg_h || in.render_width > s.fg_rw || - in.render_height > s.fg_rh || in.color_format != s.fg_format)) + in.render_height > s.fg_rh || in.color_format != s.fg_format || inf != s.fg_infinite)) drop_framegen(); if (!s.fg) { ffxCreateBackendVKDesc backend{}; @@ -410,9 +438,10 @@ bool generate(VkCommandBuffer cmd, const FrameInputs& in) { ffxCreateContextDescFrameGeneration c{}; c.header.type = FFX_API_CREATE_CONTEXT_DESC_TYPE_FRAMEGENERATION; c.header.pNext = &version.header; - // The presented frame is SDR (RGBA8, already tonemapped by the game), depth as the upscaler's. - // Not ASYNC_WORKLOAD_SUPPORT: the made frames are recorded into the replay's own command buffer. - c.flags = FFX_FRAMEGENERATION_ENABLE_DEPTH_INVERTED | FFX_FRAMEGENERATION_ENABLE_DEPTH_INFINITE; + // The presented frame is SDR (RGBA8, already tonemapped by the game), depth as the upscaler's (reversed, + // infinite only when the scene's projection is). Not ASYNC_WORKLOAD_SUPPORT: the made frames are recorded into + // the replay's own command buffer. + c.flags = FFX_FRAMEGENERATION_ENABLE_DEPTH_INVERTED | (inf ? FFX_FRAMEGENERATION_ENABLE_DEPTH_INFINITE : 0u); if (env_int("RX_VK_FFX_DEBUG", 0) > 0) c.flags |= FFX_FRAMEGENERATION_ENABLE_DEBUG_CHECKING; c.displaySize = {in.width, in.height}; c.maxRenderSize = {in.width, in.height}; @@ -434,6 +463,7 @@ bool generate(VkCommandBuffer cmd, const FrameInputs& in) { } s.fg_w = in.width, s.fg_h = in.height, s.fg_rw = in.width, s.fg_rh = in.height; s.fg_format = in.color_format; + s.fg_infinite = inf; s.fg_reset = true; ffxQueryGetProviderVersion v{}; v.header.type = FFX_API_QUERY_DESC_TYPE_GET_PROVIDER_VERSION; @@ -473,15 +503,14 @@ bool generate(VkCommandBuffer cmd, const FrameInputs& in) { prep.frameTimeDelta = std::clamp(in.frame_time_ms, 0.0f, 1000.0f); prep.reset = reset; prep.cameraNear = in.near_plane; - prep.cameraFar = in.far_plane > in.near_plane ? in.far_plane : FLT_MAX; + prep.cameraFar = inf ? FLT_MAX : in.far_plane; prep.cameraFovAngleVertical = in.fov_y; prep.viewSpaceToMetersFactor = 1.0f; prep.depth = resource(in.depth, in.depth_format, in.render_width, in.render_height, false); prep.motionVectors = resource(in.motion, in.motion_format, in.render_width, in.render_height, false); if (in.have_view) { - // (the view is world -> camera, 3x4 row major: its rows are the camera's axes in the world, and its - // position is minus the transposed rotation times the translation; vk_framegen.cpp's DLSS-G does - // the same) + // (the view is world -> camera, row major: its rows are the camera's axes in the world, and its position is + // minus the transposed rotation times the translation; vk_framegen.cpp's DLSS-G does the same) const float* v = in.view; for (int c = 0; c < 3; c++) { prep.cameraRight[c] = v[0 * 4 + c]; @@ -547,6 +576,7 @@ bool upscale_supported() { return false; } const char* upscale_provider() { return ""; } bool upscale(VkCommandBuffer, const UpscaleInputs&) { return false; } VkImage output_image() { return VK_NULL_HANDLE; } +VkImageView output_view() { return VK_NULL_HANDLE; } bool frames_supported() { return false; } uint32_t frames_wanted() { return 0; } bool generate(VkCommandBuffer, const FrameInputs&) { return false; } diff --git a/gpu/vk/vk_ffx.h b/gpu/vk/vk_ffx.h index e8a3ba0cb..0b04a9d0a 100644 --- a/gpu/vk/vk_ffx.h +++ b/gpu/vk/vk_ffx.h @@ -13,8 +13,10 @@ // and, with SDK 2.4, on the cards AMD added since; on other GPUs it falls back to the FSR 3.1 it carries. // upscale_provider() says which one a run got, and the log says it once. // -// The inputs are vk_fsr3.h's, field for field, plus the images and formats: AMD's API is handed whole -// resources (an image, its format and extent) rather than views, as NGX is. +// The inputs are FSR 3.1's (gpu/vk/vk_fsr3_inputs.h: colour as the game's network samples it, the depth reversed, the +// camera's motion without the jitter, the jitter, and the camera from the scene's own projection), handed over as whole +// images: AMD's API takes resources (an image, its format and extent) rather than views, as NGX does. vk_fsr3.cpp's +// fsr3_upscale calls the upscaler and squares its picture back into the network's output, as it does FSR 3.1's. #pragma once #include @@ -24,9 +26,9 @@ namespace mkwvk::ffx { struct UpscaleInputs { - VkImage color = VK_NULL_HANDLE; ///< HDR (B10G11R11 here), jittered, at the render size - VkImage depth = VK_NULL_HANDLE; ///< reversed, infinite far plane - VkImage motion = VK_NULL_HANDLE; ///< render pixels, pointing at the previous frame + VkImage color = VK_NULL_HANDLE; ///< jittered, at the render size (vk_fsr3_inputs.h Frame: RGBA16F, 0..1) + VkImage depth = VK_NULL_HANDLE; ///< reversed: 1 at the near plane (vk_fsr3_inputs.h Frame) + VkImage motion = VK_NULL_HANDLE; ///< render pixels, pointing at the previous frame, without the jitter VkFormat color_format = VK_FORMAT_UNDEFINED; VkFormat depth_format = VK_FORMAT_UNDEFINED; VkFormat motion_format = VK_FORMAT_UNDEFINED; @@ -35,8 +37,9 @@ struct UpscaleInputs { float jitter[2]{}; ///< render pixels, as vk_fsr3.h's float motion_scale[2]{1.0f, 1.0f}; ///< turns a motion vector into render pixels float near_plane = 0.1f; - float far_plane = 0.0f; ///< 0: infinite + float far_plane = 0.0f; ///< 0 or FLT_MAX: infinite (FFX_UPSCALE_ENABLE_DEPTH_INFINITE); the scene's is 1000.5 float fov_y = 60.0f * 3.14159265358979f / 180.0f; + float frame_time_ms = 16.667f; bool reset = false; }; @@ -52,6 +55,7 @@ struct UpscaleInputs { /// inputs are not usable or the runtime refused, which leaves the caller to do what it would have. [[nodiscard]] bool upscale(VkCommandBuffer cmd, const UpscaleInputs& in); [[nodiscard]] VkImage output_image(); +[[nodiscard]] VkImageView output_view(); /// One frame generation's inputs: vk_fsr3fi.h's, with the images the API needs. struct FrameInputs { @@ -66,10 +70,10 @@ struct FrameInputs { float motion_scale[2]{1.0f, 1.0f}; float jitter[2]{}; float near_plane = 0.1f; - float far_plane = 0.0f; + float far_plane = 0.0f; ///< 0 or FLT_MAX: infinite, as UpscaleInputs float fov_y = 60.0f * 3.14159265358979f / 180.0f; float frame_time_ms = 16.667f; - /// The camera, row major (vk_draw.h SceneFrameInputs): its position and axes come out of it. + /// The camera's view (world to camera), row major: its position and axes come out of it. float view[16]{}; bool have_view = false; bool reset = false; @@ -91,3 +95,9 @@ void reset(); void shutdown(); } // namespace mkwvk::ffx + +namespace mkwvk { +/// FSR 4 upscales: the Insert menu's Upscaler row says FSR 4 (upscaler_rows.h FSR4) and AMD's runtime runs here (never on +/// Linux). RX_VK_FSR=0 turns it off as it does FSR 3.1. Read each time: the row changes while the game runs +bool fsr4_wanted(); +} // namespace mkwvk diff --git a/gpu/vk/vk_framegen.cpp b/gpu/vk/vk_framegen.cpp index c8cb2f743..37a66daf8 100644 --- a/gpu/vk/vk_framegen.cpp +++ b/gpu/vk/vk_framegen.cpp @@ -9,6 +9,7 @@ // then the game's, evenly over the game's recent frame time, about one frame behind the game. Loading hitches // (frames over 100 ms apart) are not interpolated. #include +#include #include #include #include @@ -19,21 +20,14 @@ #include #include "vk_framegen.h" +#include "dlss_math.h" // (hookshot fork: the scene's clip to the frame before's, for DLSS frame generation) +#include "vk_fsr3_inputs.h" // (AMD FSR 3.1 frame interpolation's depth and motion) +#include "vk_fsr3fi.h" -#include "vk_camera_motion.h" +#include "vk_camera_motion.h" // (hookshot fork: the open neural rendering backend's motion, reset across a gap) #include "vk_dlssg.h" -#include "vk_fsr3fi.h" -#include "vk_ffx.h" // (hookshot: AMD FSR 4 frame generation) +#include "vk_ffx.h" // (hookshot fork: AMD FSR 4 frame generation) #include "framegen_methods.h" -#include "vk_draw.h" // (scene_frame_inputs: the depth and matrix the draw path kept) - -#include -#include - -/// (hookshot) The camera the lifted game publishes (host/hos_oot_camera.c). Weak because the -/// renderer is dlopened with RTLD_NOW and a build of it without the game's host half must still -/// load: a null here is "the game has not published a camera", not a missing symbol. -extern "C" __attribute__((weak)) float hos_oot_camera(float* near_plane, float* far_plane); #include "vk_menu.h" #include "vk_texture.h" @@ -537,140 +531,103 @@ void multiply4x4(const float* a, const float* b, float* out) { } } -/// (hookshot) The made frames of one present, by DLSS Frame Generation: how many were made, 0 when -/// it could not run. Each one is copied into the set the display thread shows, so the rest of this -/// file does not care which of the two made them. -/// -/// The inputs it needs that colour interpolation does not -- the scene's depth, and the matrix its -/// draws were rendered with -- are kept by the draw path and read back here (vk_draw.h), because -/// this runs at present time where neither is otherwise in reach. The motion is the same -/// camera-only reprojection the upscalers use; asking for it twice in one frame is answered with -/// the one already written (gpu/vk/vk_camera_motion.cpp). -/// (hookshot) The same job by FSR 3 frame interpolation (gpu/vk/vk_fsr3fi.h), for the GPUs DLSS does -/// not serve. The inputs it needs are the ones assembled above, so this is deliberately the same -/// shape; what it adds is the presented colour's image, which it copies into its own previous -/// source for the next frame. -int fsr3fi_frames(VkCommandBuffer cmd, OutSet& set, int cur, uint32_t uw, uint32_t uh, int m) { - SceneFrameInputs scene; - if (!scene_frame_inputs(&scene) || !scene.have_view_projection) return 0; - camera_motion::Matrix vp{}; - memcpy(vp.m, scene.view_projection, sizeof vp.m); - const VkImageView motion = camera_motion::record(cmd, scene.depth_view, scene.depth_format, - scene.render_width, scene.render_height, vp); - if (!motion) return 0; - const int want = std::min(m - 1, (int)fsr3fi::frames_wanted()); - if (want <= 0) return 0; - +/// (hookshot) The made frame of a 2x set by AMD FSR 3.1's frame interpolation (vk_fsr3fi.h), from this frame's colour and +/// the scene's depth and motion (vk_fsr3_inputs.h): 1 when it made it into set.frame[0], 0 when it did not (no inputs this +/// present, a reset, anything not made), which leaves the set to the interpolation below. sequence: framegen_record's count +/// of its presents (one it did not hand over, a gap among them, makes the next one a reset: vk_fsr3fi.h Inputs::sequence). +/// (hookshot fork) scene: this present's inputs, taken once for every method in the chain (null: none this present) +int fsr3fi_frame(VkCommandBuffer cmd, OutSet& set, int cur, uint32_t uw, uint32_t uh, uint64_t sequence, + const fsr3_inputs::Frame* scene) { + // (every 600 presents asked: how many FSR made, and how many it left to the interpolation below and why) + static uint64_t asked = 0, made = 0, no_inputs = 0; + if (++asked % 600 == 0) + logf("vk: fsr3fi: %llu of the last 600 made frames by FSR 3.1, %llu without its inputs (the renderer's own made them)", + (unsigned long long)made, (unsigned long long)no_inputs), + made = no_inputs = 0; + if (!scene) return no_inputs++, 0; + const fsr3_inputs::Frame& f = *scene; fsr3fi::Inputs in; in.color = fg.frames[cur].view; in.color_image = fg.frames[cur].image; - in.color_format = VK_FORMAT_R8G8B8A8_UNORM; // (make_img above, for fg.frames) + in.color_format = VK_FORMAT_R8G8B8A8_UNORM; // (ensure_size, for fg.frames) in.width = uw, in.height = uh; - in.depth = scene.depth_view; - in.motion = motion; - in.render_width = scene.render_width, in.render_height = scene.render_height; - in.motion_scale[0] = 1.0f, in.motion_scale[1] = 1.0f; // (already render pixels) - scene_jitter(&in.jitter[0], &in.jitter[1]); - { - float near_plane = 0.0f, far_plane = 0.0f; - const float tan_half = hos_oot_camera ? hos_oot_camera(&near_plane, &far_plane) : 0.0f; - if (tan_half > 0.0f && near_plane > 0.0f) { - in.near_plane = near_plane; - if (far_plane > near_plane) in.far_plane = far_plane; - in.fov_y = 2.0f * std::atan(tan_half); - } - } - in.frames_made = (uint32_t)want; - int made = 0; - for (int k = 1; k <= want; k++) { - in.frame_index = (uint32_t)k; - if (!fsr3fi::generate(cmd, in)) break; - const VkImage from = fsr3fi::made_image((uint32_t)k); - if (!from) break; - const VkImageCopy c{{VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, {0, 0, 0}, - {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, {0, 0, 0}, {uw, uh, 1}}; - vkCmdCopyImage(cmd, from, VK_IMAGE_LAYOUT_GENERAL, set.frame[k - 1].image, - VK_IMAGE_LAYOUT_GENERAL, 1, &c); - made++; - } - if (made != want) { - static int told = 0; - if (told++ < 4) - logf("vk: fsr3 frame interpolation made %d of %d frames: the renderer's own takes this " - "one", made, want); - return 0; // (a half-made set would show one real frame and one stale image) + in.depth = f.depth, in.motion = f.motion; + in.render_width = f.width, in.render_height = f.height; + in.jitter[0] = f.jitter[0], in.jitter[1] = f.jitter[1]; + in.camera = f.camera; + in.frame_time_ms = f.frame_ms; + in.reset = f.reset; + in.sequence = sequence; + if (!fsr3fi::generate(cmd, in) || !fsr3fi::made_image()) return 0; + const VkImageCopy c{{VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, {0, 0, 0}, {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, {0, 0, 0}, + {uw, uh, 1}}; + vkCmdCopyImage(cmd, fsr3fi::made_image(), VK_IMAGE_LAYOUT_GENERAL, set.frame[0].image, VK_IMAGE_LAYOUT_GENERAL, 1, &c); + made++; + static bool told = false; + if (!told) { + told = true; + logf("vk: fsr3fi: AMD FSR 3.1 makes the frame between each two of the game's (%ux%u, its depth and motion %ux%u)", uw, + uh, f.width, f.height); } - return made; + return 1; } -int dlssg_frames(VkCommandBuffer cmd, OutSet& set, int cur, uint32_t uw, uint32_t uh, int m) { - SceneFrameInputs scene; - if (!scene_frame_inputs(&scene) || !scene.have_view_projection) return 0; - camera_motion::Matrix vp{}; - memcpy(vp.m, scene.view_projection, sizeof vp.m); - const VkImageView motion = camera_motion::record(cmd, scene.depth_view, scene.depth_format, - scene.render_width, scene.render_height, vp); - if (!motion) return 0; +/// (hookshot fork) The camera's view (world to camera) from the scene's matrices (vk_fsr3_inputs.h Frame): the inverse of +/// the projection times the view-projection, row major. False when the projection cannot be inverted +bool scene_view(const fsr3_inputs::Frame& f, float view[16]) { + float inverse_projection[16]; + if (!invert4x4(f.projection, inverse_projection)) return false; + multiply4x4(inverse_projection, f.view_projection, view); + return true; +} + +/// (hookshot) The made frames of one present, by DLSS Frame Generation: how many were made, 0 when it could not run. Each +/// one is copied into the set the display thread shows, so the rest of this file does not care which method made them. +/// +/// (hookshot fork) Its depth, motion and camera are FSR 3.1's (vk_fsr3_inputs.h), made at the gameplay upscale's dispatch +/// whatever upscales: the depth reversed (1 at the near plane, so DepthInverted is true and is what it says), the camera's +/// motion without the jitter, and the planes and the field of view from the projection the scene was drawn with. +int dlssg_frames(VkCommandBuffer cmd, OutSet& set, int cur, uint32_t uw, uint32_t uh, int m, const fsr3_inputs::Frame* scene) { + if (!scene) return 0; + const fsr3_inputs::Frame& f = *scene; const int want = std::min(m - 1, (int)dlssg::frames_wanted()); if (want <= 0) return 0; dlssg::Inputs in; in.color = fg.frames[cur].view; in.color_image = fg.frames[cur].image; - in.color_format = VK_FORMAT_R8G8B8A8_UNORM; // (make_img above, for fg.frames) + in.color_format = VK_FORMAT_R8G8B8A8_UNORM; // (ensure_size, for fg.frames) in.width = uw, in.height = uh; - in.depth = scene.depth_view; - in.depth_image = scene.depth_image; - in.depth_format = scene.depth_format; - in.motion = motion; - in.motion_image = camera_motion::motion_image(); - in.motion_format = camera_motion::motion_format(); - in.render_width = scene.render_width, in.render_height = scene.render_height; + in.depth = f.depth, in.depth_image = f.depth_image, in.depth_format = VK_FORMAT_R32_SFLOAT; + in.motion = f.motion, in.motion_image = f.motion_image, in.motion_format = VK_FORMAT_R16G16_SFLOAT; + in.render_width = f.width, in.render_height = f.height; in.motion_scale[0] = 1.0f, in.motion_scale[1] = 1.0f; // (already render pixels) + in.jitter[0] = f.jitter[0], in.jitter[1] = f.jitter[1]; + in.depth_inverted = true; // (vk_fsr3_inputs.cpp's copy: reversed) // The colour here is the window's R8G8B8A8, which is not HDR whatever the scene was resolved in. in.colour_hdr = false; in.aspect = uh ? (float)uw / (float)uh : 16.0f / 9.0f; - { // (the game's own camera where the patch published it; without it the defaults stand) - float near_plane = 0.0f, far_plane = 0.0f; - const float tan_half = hos_oot_camera ? hos_oot_camera(&near_plane, &far_plane) : 0.0f; - if (tan_half > 0.0f && near_plane > 0.0f) { - in.near_plane = near_plane; - if (far_plane > near_plane) in.far_plane = far_plane; - in.fov_y = 2.0f * std::atan(tan_half); - } - } - // The rest of the matrix set NGX wants, built from the two halves the draw path kept. The - // camera's own position and axes come out of the view: its 3x3 is world -> camera, so the rows - // are the camera's axes in world space and the position is -R transpose times the translation. - if (scene.have_view_projection) { - memcpy(in.camera_view_to_clip, scene.projection, sizeof in.camera_view_to_clip); - if (invert4x4(scene.projection, in.clip_to_camera_view)) { - for (int i = 0; i < 16; i++) in.clip_to_lens_clip[i] = (i % 5) == 0 ? 1.0f : 0.0f; - const float* v = scene.view; - for (int c = 0; c < 3; c++) { - in.camera_right[c] = v[0 * 4 + c]; - in.camera_up[c] = v[1 * 4 + c]; - in.camera_forward[c] = v[2 * 4 + c]; - } - for (int c = 0; c < 3; c++) - in.camera_pos[c] = -(v[0 * 4 + c] * v[0 * 4 + 3] + v[1 * 4 + c] * v[1 * 4 + 3] + - v[2 * 4 + c] * v[2 * 4 + 3]); - // clip -> previous clip, and back. The camera-motion pass keeps the previous view - // projection; here the pair is built from this frame's and the last one this function - // saw, which is the same frame boundary the made frame sits on. - static float previous[16]; - static bool have_previous = false; - float inverse_vp[16]; - if (have_previous && invert4x4(scene.view_projection, inverse_vp)) { - multiply4x4(previous, inverse_vp, in.clip_to_prev_clip); - float inverse_previous[16]; - if (invert4x4(previous, inverse_previous)) - multiply4x4(scene.view_projection, inverse_previous, in.prev_clip_to_clip); - in.have_matrices = true; - } - memcpy(previous, scene.view_projection, sizeof previous); - have_previous = true; + in.near_plane = f.camera.near_plane; + in.far_plane = f.camera.far_plane; + in.fov_y = f.camera.fov_y; + in.reset = f.reset; + // The rest of the matrix set NGX wants, from the scene's own (without the jitter). The camera's own position and axes + // come out of the view: its 3x3 is world -> camera, so the rows are the camera's axes in world space and the position + // is -R transpose times the translation. + float view[16]; + if (f.have_previous && scene_view(f, view) && invert4x4(f.projection, in.clip_to_camera_view)) { + memcpy(in.camera_view_to_clip, f.projection, sizeof in.camera_view_to_clip); + for (int i = 0; i < 16; i++) in.clip_to_lens_clip[i] = (i % 5) == 0 ? 1.0f : 0.0f; + for (int c = 0; c < 3; c++) { + in.camera_right[c] = view[0 * 4 + c]; + in.camera_up[c] = view[1 * 4 + c]; + in.camera_forward[c] = view[2 * 4 + c]; + in.camera_pos[c] = -(view[0 * 4 + c] * view[0 * 4 + 3] + view[1 * 4 + c] * view[1 * 4 + 3] + + view[2 * 4 + c] * view[2 * 4 + 3]); } + // (clip -> previous clip, and back: the pair the motion was made with, vk_fsr3_inputs.cpp) + in.have_matrices = dlss_math::reprojection(f.view_projection, f.previous_view_projection, in.clip_to_prev_clip) && + dlss_math::reprojection(f.previous_view_projection, f.view_projection, in.prev_clip_to_clip); } if (!in.have_matrices) return 0; // (the first frame after a cut has no pair to interpolate on) in.frames_made = (uint32_t)want; @@ -696,39 +653,27 @@ int dlssg_frames(VkCommandBuffer cmd, OutSet& set, int cur, uint32_t uw, uint32_ return made; } -/// (hookshot) AMD FSR 4's frame generation through AMD's runtime (gpu/vk/vk_ffx.h), between DLSS frame generation and -/// FSR 3.1's: the same assembled inputs, handed over as images, and every made frame in one dispatch. A refusal returns -/// 0, which leaves the set to the next backend in the chain. -int ffx_frames(VkCommandBuffer cmd, OutSet& set, int cur, uint32_t uw, uint32_t uh, int m) { - SceneFrameInputs scene; - if (!scene_frame_inputs(&scene) || !scene.have_view_projection || !scene.depth_image) return 0; - camera_motion::Matrix vp{}; - memcpy(vp.m, scene.view_projection, sizeof vp.m); - const VkImageView motion = camera_motion::record(cmd, scene.depth_view, scene.depth_format, - scene.render_width, scene.render_height, vp); - if (!motion) return 0; +/// (hookshot fork) AMD FSR 4's frame generation through AMD's runtime (gpu/vk/vk_ffx.h), between DLSS frame generation and +/// FSR 3.1's: FSR 3.1's inputs (vk_fsr3_inputs.h) handed over as images, and every made frame in one dispatch. A refusal +/// returns 0, which leaves the set to the next method in the chain. +int ffx_frames(VkCommandBuffer cmd, OutSet& set, int cur, uint32_t uw, uint32_t uh, int m, const fsr3_inputs::Frame* scene) { + if (!scene) return 0; + const fsr3_inputs::Frame& f = *scene; const int want = std::min(m - 1, (int)ffx::frames_wanted()); if (want <= 0) return 0; ffx::FrameInputs in; in.color = fg.frames[cur].image; - in.color_format = VK_FORMAT_R8G8B8A8_UNORM; // (make_img above, for fg.frames) + in.color_format = VK_FORMAT_R8G8B8A8_UNORM; // (ensure_size, for fg.frames) in.width = uw, in.height = uh; - in.depth = scene.depth_image, in.depth_format = scene.depth_format; - in.motion = camera_motion::motion_image(), in.motion_format = camera_motion::motion_format(); - in.render_width = scene.render_width, in.render_height = scene.render_height; + in.depth = f.depth_image, in.depth_format = VK_FORMAT_R32_SFLOAT; + in.motion = f.motion_image, in.motion_format = VK_FORMAT_R16G16_SFLOAT; + in.render_width = f.width, in.render_height = f.height; in.motion_scale[0] = 1.0f, in.motion_scale[1] = 1.0f; // (already render pixels) - scene_jitter(&in.jitter[0], &in.jitter[1]); - { - float near_plane = 0.0f, far_plane = 0.0f; - const float tan_half = hos_oot_camera ? hos_oot_camera(&near_plane, &far_plane) : 0.0f; - if (tan_half > 0.0f && near_plane > 0.0f) { - in.near_plane = near_plane; - if (far_plane > near_plane) in.far_plane = far_plane; - in.fov_y = 2.0f * std::atan(tan_half); - } - } - memcpy(in.view, scene.view, sizeof in.view); - in.have_view = true; + in.jitter[0] = f.jitter[0], in.jitter[1] = f.jitter[1]; + in.near_plane = f.camera.near_plane, in.far_plane = f.camera.far_plane, in.fov_y = f.camera.fov_y; + in.frame_time_ms = f.frame_ms; + in.have_view = scene_view(f, in.view); + in.reset = f.reset; in.frames = (uint32_t)want; if (!ffx::generate(cmd, in)) return 0; for (int k = 1; k <= want; k++) { @@ -743,6 +688,28 @@ int ffx_frames(VkCommandBuffer cmd, OutSet& set, int cur, uint32_t uw, uint32_t return want; } +/// (hookshot fork) The Frame generation method in effect (framegen_methods.h): the row's, or RX_VK_FG_METHOD=<0-4> over it +/// for a run, of what runs here (available: framegen_methods.h bit of each). Read every time: the row changes while the +/// game runs +int framegen_method(unsigned& available) { + namespace fgm = framegen_methods; + static const int env_method = getenv("RX_VK_FG_METHOD") ? atoi(getenv("RX_VK_FG_METHOD")) : -1; + const int chosen = env_method >= 0 ? env_method : opts.framegen_method; + available = fgm::always(); + if (dlssg::supported()) available |= fgm::bit(fgm::DLSS); + if (ffx::frames_supported()) available |= fgm::bit(fgm::FSR4); + if (fsr3fi::capable()) available |= fgm::bit(fgm::FSR3); + return fgm::effective(chosen, available); +} + +/// (hookshot fork) framegen_record's last answer, for framegen_scene_inputs_wanted: the draws ask it, on their own threads, +/// and the methods' own checks (NGX's among them) are asked on the present's only +std::atomic scene_inputs_asked{false}; + +bool framegen_scene_inputs_wanted() { + return opts.framegen >= 2 && framegen_on() && scene_inputs_asked.load(std::memory_order_relaxed); +} + bool framegen_record(VkCommandBuffer cmd, VkImageView src, uint32_t sw, uint32_t sh, const int crop[4]) { int x0 = 0, y0 = 0, w = (int)sw, h = (int)sh; if (crop && crop[2] > 0 && crop[3] > 0) x0 = crop[0], y0 = crop[1], w = crop[2], h = crop[3]; @@ -767,11 +734,11 @@ bool framegen_record(VkCommandBuffer cmd, VkImageView src, uint32_t sw, uint32_t } const int cur = fg.cur, prev = cur ^ 1, m = multiplier(); const bool blend = fg.have_prev && !gap; - // (hookshot) A gap is a loading screen or a cut, and the renderer's own interpolator already - // refuses to blend across one. Everything else with a history has to be told as well: the - // camera motion would otherwise reproject through a matrix from before the cut, and either - // frame-generation backend would interpolate between two frames taken in different places. - // Each of these had a reset() that nothing ever called. + static uint64_t sequence = 0; + sequence++; + // (hookshot fork) A gap is a loading screen or a cut, and the renderer's own interpolator already refuses to blend + // across one. The vendor methods with a history of their own are told as well (FSR 3.1's sees the gap in the sequence + // too), and so is the camera motion of the open neural rendering backend (vk_camera_motion.h) if (gap) { camera_motion::reset(); dlssg::reset(); @@ -828,36 +795,34 @@ bool framegen_record(VkCommandBuffer cmd, VkImageView src, uint32_t sw, uint32_t return true; } // (hookshot) The Frame generation method row (framegen_methods.h), for 2x to 8x: Auto tries each vendor method best - // first (DLSS frame generation, FSR 4, FSR 3.1, each with the game's own depth and motion), one chosen outright is - // tried alone, and where none makes the set the renderer's own interpolation below does, exactly as before. Frame - // generation's Auto (above: a frame for each of the display's refreshes, at its own time) is the renderer's own. - // Read every frame, so a change in the menu reaches the next one. RX_VK_FG_METHOD=<0-4> wins over the row for a run + // first (DLSS frame generation, FSR 4, FSR 3.1, each with the scene's own depth and motion: vk_fsr3_inputs.h), one + // chosen outright is tried alone, and where none makes the set the renderer's own interpolation below does, exactly as + // before. FSR 3.1's makes the midpoint only, so it makes 2x sets only (framegen_methods.h makes_set): at 3x and above + // it is passed over. Frame generation's Auto (above: a frame for each of the display's refreshes, at its own time) is + // the renderer's own. Read every frame, so a change in the menu reaches the next one namespace fgm = framegen_methods; - static const int env_method = getenv("RX_VK_FG_METHOD") ? atoi(getenv("RX_VK_FG_METHOD")) : -1; - const int chosen = env_method >= 0 ? env_method : opts.framegen_method; - unsigned avail = fgm::always(); - if (dlssg::supported()) avail |= fgm::bit(fgm::DLSS); - if (ffx::frames_supported()) avail |= fgm::bit(fgm::FSR4); - if (fsr3fi::supported()) avail |= fgm::bit(fgm::FSR3); - const int method = fgm::effective(chosen, avail); + unsigned avail = 0; + const int method = framegen_method(avail); + scene_inputs_asked.store(fgm::first(method, avail, m) != fgm::BUILTIN, std::memory_order_relaxed); { static int said = -1; if (blend && m > 1 && said != method) { said = method; logf("vk: frame generation method: %s (chosen %d, available mask %#x)", method == fgm::AUTO ? "auto" : method == fgm::DLSS ? "NVIDIA DLSS" : method == fgm::FSR4 ? "AMD FSR 4" - : method == fgm::FSR3 ? "AMD FSR 3.1" : "built-in", chosen, avail); + : method == fgm::FSR3 ? "AMD FSR 3.1" : "built-in", opts.framegen_method, avail); } } - if (blend && m > 1 && fgm::tries(method, fgm::DLSS) && (avail & fgm::bit(fgm::DLSS))) - set->made = dlssg_frames(cmd, *set, cur, uw, uh, m); - if (set->made == 0 && blend && m > 1 && fgm::tries(method, fgm::FSR4) && (avail & fgm::bit(fgm::FSR4))) - set->made = ffx_frames(cmd, *set, cur, uw, uh, m); - // (FSR 3.1's interpolation makes the midpoint only: a 3x or larger set of it would show one picture at two times, so it - // takes 2x sets alone and the rest go on to the renderer's own interpolation: framegen_methods.h makes_set) - if (set->made == 0 && blend && m > 1 && fgm::tries(method, fgm::FSR3) && (avail & fgm::bit(fgm::FSR3)) && - fgm::makes_set(fgm::FSR3, m)) - set->made = fsr3fi_frames(cmd, *set, cur, uw, uh, m); + // (the scene's inputs for this present, taken once for every method: a present never uses another frame's) + fsr3_inputs::Frame scene_frame; + const fsr3_inputs::Frame* scene = blend && m > 1 && fsr3_inputs::take(scene_frame) ? &scene_frame : nullptr; + const auto tried = [&](int which) { + return set->made == 0 && blend && m > 1 && fgm::tries(method, which) && (avail & fgm::bit(which)) && + fgm::makes_set(which, m); + }; + if (tried(fgm::DLSS)) set->made = dlssg_frames(cmd, *set, cur, uw, uh, m, scene); + if (tried(fgm::FSR4)) set->made = ffx_frames(cmd, *set, cur, uw, uh, m, scene); + if (tried(fgm::FSR3) && fsr3fi::frames_wanted()) set->made = fsr3fi_frame(cmd, *set, cur, uw, uh, sequence, scene); if (set->made == 0 && blend && m > 1) { pass(cmd, fg.flow, {{fg.lumas[prev].view, fg.nearest}, {fg.lumas[cur].view, fg.nearest}, {fg.flows[0].view, VK_NULL_HANDLE}}, cw, ch); diff --git a/gpu/vk/vk_framegen.h b/gpu/vk/vk_framegen.h index c2cba095d..a25064ca8 100644 --- a/gpu/vk/vk_framegen.h +++ b/gpu/vk/vk_framegen.h @@ -6,6 +6,10 @@ namespace mkwvk { bool framegen_on(); +/// (hookshot fork) Whether a method that takes the scene's depth, motion and camera (vk_fsr3_inputs.h) may make this run's +/// frames: the Frame generation row at 2x to 8x, on, and a method in effect that runs here and makes such a set +/// (framegen_methods.h first). The scene's inputs are made at the gameplay upscale's dispatch then, whatever upscales +bool framegen_scene_inputs_wanted(); /// Records the frame's processing into the present's recording (src: the window texture's view, sw x sh, the crop /// x, y, w, h); false when interpolation cannot run (the present goes to the window as without it) bool framegen_record(VkCommandBuffer cmd, VkImageView src, uint32_t sw, uint32_t sh, const int crop[4]); diff --git a/gpu/vk/vk_fsr3.cpp b/gpu/vk/vk_fsr3.cpp index 13b0c9355..8efe684fb 100644 --- a/gpu/vk/vk_fsr3.cpp +++ b/gpu/vk/vk_fsr3.cpp @@ -1,46 +1,43 @@ -// (hookshot) FSR 3.1's pipelines and internal images. The dispatch half follows; see vk_fsr3.h. +// (hookshot) AMD FSR 3.1's upscaler as our own dispatches over AMD's vendored passes, and its place in the gameplay upscale's +// dispatch (fsr3_upscale, at the end); see vk_fsr3.h. // -// The resource table and the per-pass binding lists are the SDK's, not ours: ffx_fsr3upscaler.cpp -// decides the formats and sizes, and each pass file numbers its own bindings (FSR3UPSCALER_BIND_*). -// Getting one wrong is a validation error at best and a wrong picture at worst, so they are written -// out here in the SDK's order rather than derived. +// The resource table and the per-pass binding lists are the SDK's, not ours: ffx_fsr3upscaler.cpp decides the formats and +// sizes, and each pass file numbers its own bindings (FSR3UPSCALER_BIND_*). Getting one wrong is a validation error at best +// and a wrong picture at worst, so they are written out here in the SDK's order rather than derived. #include +#include #include #include +#include #include -#include #include +#include +#include #include -#include #include #include "vk_fsr3.h" -#include "vk_gprof.h" // (RX_VK_PASS_TIMING: a span per pass, so the report names them) -#include - -#include "vk_texture.h" // (full_barrier: what the rest of the renderer uses between passes) - +#include "vk_fsr3_inputs.h" +#include "vk_draw.h" // (descriptors_disturbed) +#include "vk_ffx.h" // (hookshot fork: AMD FSR 4 in the same place, from the same inputs) +#include "vk_gprof.h" // (RX_VK_PASS_TIMING: a span per pass, so the report names them) +#include "vk_menu.h" +#include "vk_texture.h" +#include "upscaler_rows.h" + +#include "shaders/dlss_out_comp_spv.h" // (the network's output from a picture: its encoding squared back, as for DLSS) #include "shaders/fsr3_accumulate_comp_spv.h" -#include "shaders/fsr3_accumulate_sharpen_comp_spv.h" #include "shaders/fsr3_luma_instability_comp_spv.h" #include "shaders/fsr3_luma_pyramid_comp_spv.h" #include "shaders/fsr3_luma_pyramid_nowave_comp_spv.h" #include "shaders/fsr3_prepare_inputs_comp_spv.h" #include "shaders/fsr3_prepare_reactivity_comp_spv.h" -#include "shaders/fsr3_rcas_comp_spv.h" #include "shaders/fsr3_shading_change_comp_spv.h" #include "shaders/fsr3_shading_change_pyramid_comp_spv.h" #include "shaders/fsr3_shading_change_pyramid_nowave_comp_spv.h" +#include "vk_work.h" // (after the others: counts the commands that do GPU work, for full_barrier) namespace mkwvk::fsr3 { -int fsr_stage() { - static const int n = []() { - const char* e = getenv("RX_VK_FSR_STAGE"); - return e ? atoi(e) : 0; - }(); - return n; -} - namespace { /// A descriptor's kind, in the binding order each pass file declares. Every pass also takes the two @@ -62,12 +59,12 @@ constexpr Kind SHADING_CHANGE[]{T, I, U}; constexpr Kind PREPARE_REACTIVITY[]{T, T, T, T, T, T, T, T, T, I, I, I, U}; constexpr Kind LUMA_INSTABILITY[]{T, T, T, T, T, T, T, I, I, U}; constexpr Kind ACCUMULATE[]{T, T, T, T, T, T, T, T, T, I, I, I, U}; -constexpr Kind RCAS[]{T, T, I, U, U}; #define PASS(n, spv, b) PassInfo{n, spv, sizeof spv, b, sizeof b / sizeof b[0]} -/// The passes, in the order PassId numbers them. The two _nowave pyramids are alternatives to the -/// two before them, for devices without the subgroup operations the single-pass downsampler wants. +/// The passes, in the order PassId numbers them. The two _nowave pyramids are alternatives to the two before them, for +/// devices without the subgroup operations the single-pass downsampler wants. FSR's own sharpening (accumulate_sharpen and +/// RCAS, compiled with the rest) is not used: the renderer's Sharpness row sharpens the finished picture for every upscaler const PassInfo PASSES[]{ PASS("prepare_inputs", FSR3_PREPARE_INPUTS_COMP_SPV, PREPARE_INPUTS), PASS("luma_pyramid", FSR3_LUMA_PYRAMID_COMP_SPV, LUMA_PYRAMID), @@ -79,12 +76,22 @@ const PassInfo PASSES[]{ PASS("prepare_reactivity", FSR3_PREPARE_REACTIVITY_COMP_SPV, PREPARE_REACTIVITY), PASS("luma_instability", FSR3_LUMA_INSTABILITY_COMP_SPV, LUMA_INSTABILITY), PASS("accumulate", FSR3_ACCUMULATE_COMP_SPV, ACCUMULATE), - PASS("accumulate_sharpen", FSR3_ACCUMULATE_SHARPEN_COMP_SPV, ACCUMULATE), - PASS("rcas", FSR3_RCAS_COMP_SPV, RCAS), }; #undef PASS -constexpr size_t kPassCount = sizeof PASSES / sizeof PASSES[0]; +enum PassId : size_t { + P_PREPARE_INPUTS, + P_LUMA_PYRAMID, + P_LUMA_PYRAMID_NOWAVE, + P_SHADING_CHANGE_PYRAMID, + P_SHADING_CHANGE_PYRAMID_NOWAVE, + P_SHADING_CHANGE, + P_PREPARE_REACTIVITY, + P_LUMA_INSTABILITY, + P_ACCUMULATE, + kPassCount +}; +static_assert(sizeof PASSES / sizeof PASSES[0] == kPassCount, "PassId must name every pass"); constexpr uint32_t kSpdStoredMips = 6; struct Pipeline { @@ -138,33 +145,6 @@ struct SpdConstants { uint32_t render_size[2]; }; -struct RcasConstants { - uint32_t config[4]; -}; - -/// ffxFsr3UpscalerGetJitterPhaseCount. -int32_t jitter_phase_count_for(uint32_t render_width, uint32_t display_width) { - const float ratio = (float)display_width / (float)std::max(1u, render_width); - return (int32_t)(8.0f * ratio * ratio); -} - -/// FidelityFX's AU1_AH1_AF1: a float's bits as a half's. -uint32_t half_bits(float v) { - const _Float16 h = (_Float16)v; - uint16_t bits = 0; - memcpy(&bits, &h, 2); - return bits; -} - -/// FsrRcasCon from ffx_fsr1.h: the sharpness in both halves of the second word. -void rcas_con(uint32_t* con, float sharpness) { - sharpness = std::exp2(-sharpness); - memcpy(&con[0], &sharpness, 4); - con[1] = half_bits(sharpness) | (half_bits(sharpness) << 16); - con[2] = 0; - con[3] = 0; -} - /// One descriptor of a dispatch: an image view, or a range of the uniform buffer. struct Resource { VkImageView view = VK_NULL_HANDLE; @@ -189,6 +169,7 @@ constexpr VkImageSubresourceRange ALL_LEVELS{VK_IMAGE_ASPECT_COLOR_BIT, 0, VK_RE struct State { bool tried = false; bool ok = false; + bool wave = true; ///< the pyramids with subgroup operations (else their _nowave variants) Pipeline passes[kPassCount]; VkSampler point = VK_NULL_HANDLE; VkSampler linear = VK_NULL_HANDLE; @@ -198,38 +179,57 @@ struct State { Image dilated_motion_vectors, dilated_depth, previous_nearest_depth, dilated_reactive_masks; Image frame_info, spd_atomic, lanczos_lut, default_reactive, output; uint32_t render_width = 0, render_height = 0, upscale_width = 0, upscale_height = 0; - // The uniform buffer the three constant blocks are written into, one set of slots per frame in - // flight so a frame being read is not overwritten. + // The uniform buffer the constant blocks are written into, one set of slots per frame in flight so a frame being read + // is not overwritten. VkBuffer uniforms = VK_NULL_HANDLE; VmaAllocation uniforms_memory = nullptr; void* uniforms_mapped = nullptr; - VkDeviceSize slot_fsr = 0, slot_spd = 0, slot_rcas = 0, frame_stride = 0; + VkDeviceSize slot_fsr = 0, slot_spd = 0, frame_stride = 0; uint32_t uniform_frame = 0; // History, as fsr3upscalerDispatch carries it. int32_t previous_render_size[2]{}; int32_t previous_upscale_size[2]{}; float previous_jitter[2]{}; - float jitter_phase_count = 0.0f; float frame_index = 0.0f; uint32_t parity = 0; - bool first_evaluation = true; + bool first_evaluation = true; ///< the images are new: their first layout, cleared bool lut_uploaded = false; + // Images of an earlier size, freed once the frames that may still read them are done (texture_frame_no) + std::vector> dead; }; constexpr uint32_t kUniformFrames = 4; // (more than the swapchain's images in flight) State g; -void drop_image(Image& t) { +void destroy_now(Image& t) { for (VkImageView v : t.levels) vkDestroyImageView(dev.device, v, nullptr); - t.levels.clear(); if (t.view) vkDestroyImageView(dev.device, t.view, nullptr); if (t.image) mkwvk::destroy_image(t.image, t.memory); t = Image{}; } -/// One of the SDK's internal images: storage and sampled, GENERAL throughout, with a view per level -/// when it has more than one (the pyramids bind their levels separately). +/// An image let go: destroyed a few presents on, as work recorded with it may still be in flight +void drop_image(Image& t) { + if (t.image) g.dead.push_back({texture_frame_no(), std::move(t)}); + t = Image{}; +} + +void free_dead() { + const uint64_t now = texture_frame_no(); + for (size_t i = 0; i < g.dead.size();) { + if (now - g.dead[i].first > 4) { + destroy_now(g.dead[i].second); + g.dead[i] = std::move(g.dead.back()); + g.dead.pop_back(); + } else { + i++; + } + } +} + +/// One of the SDK's internal images: storage and sampled, GENERAL throughout, with a view per level when it has more than +/// one (the pyramids bind their levels separately). bool make_image(Image& t, VkFormat format, uint32_t width, uint32_t height, uint32_t levels = 1) { drop_image(t); t.format = format, t.width = std::max(1u, width), t.height = std::max(1u, height); @@ -242,14 +242,11 @@ bool make_image(Image& t, VkFormat format, uint32_t width, uint32_t height, uint ci.arrayLayers = 1; ci.samples = VK_SAMPLE_COUNT_1_BIT; ci.tiling = VK_IMAGE_TILING_OPTIMAL; - // (TRANSFER_SRC as well as DST: the output is blitted from, which is how the seam gets it into - // the game's target. Asking only for DST while blitting from it is a validation error waiting - // on a device that checks; caught in review, not by a run) - ci.usage = VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_SAMPLED_BIT | - VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT; + ci.usage = VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT; ci.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; if (!create_image(ci, t.image, t.memory, false)) { logf("vk: fsr3: a %ux%u image (format %d) was not made", t.width, t.height, (int)format); + t.image = VK_NULL_HANDLE; return false; } VkImageViewCreateInfo vi{VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO}; @@ -257,7 +254,7 @@ bool make_image(Image& t, VkFormat format, uint32_t width, uint32_t height, uint vi.viewType = VK_IMAGE_VIEW_TYPE_2D; vi.format = format; vi.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, t.level_count, 0, 1}; - if (vkCreateImageView(dev.device, &vi, nullptr, &t.view) != VK_SUCCESS) return false; + if (vkCreateImageView(dev.device, &vi, nullptr, &t.view) != VK_SUCCESS) return t.view = VK_NULL_HANDLE, false; if (t.level_count > 1) { for (uint32_t level = 0; level < t.level_count; level++) { vi.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, level, 1, 0, 1}; @@ -273,7 +270,7 @@ bool make_pipeline(Pipeline& p, const PassInfo& info) { std::vector bindings; bindings.reserve(info.binding_count + 2); for (size_t i = 0; i < info.binding_count; i++) { - const VkDescriptorType type = info.bindings[i] == T ? VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE + const VkDescriptorType type = info.bindings[i] == T ? VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE : info.bindings[i] == I ? VK_DESCRIPTOR_TYPE_STORAGE_IMAGE : VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; bindings.push_back({(uint32_t)i, type, 1, VK_SHADER_STAGE_COMPUTE_BIT, nullptr}); @@ -295,8 +292,8 @@ bool make_pipeline(Pipeline& p, const PassInfo& info) { VkShaderModule m = VK_NULL_HANDLE; if (vkCreateShaderModule(dev.device, &mi, nullptr, &m) != VK_SUCCESS) return false; VkComputePipelineCreateInfo ci{VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO}; - ci.stage = {VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, nullptr, 0, - VK_SHADER_STAGE_COMPUTE_BIT, m, "main", nullptr}; + ci.stage = {VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, nullptr, 0, VK_SHADER_STAGE_COMPUTE_BIT, m, "main", + nullptr}; ci.layout = p.layout; const VkResult made = vkCreateComputePipelines(dev.device, VK_NULL_HANDLE, 1, &ci, nullptr, &p.pipeline); vkDestroyShaderModule(dev.device, m, nullptr); @@ -320,44 +317,43 @@ bool make_samplers() { return vkCreateSampler(dev.device, &si, nullptr, &g.linear) == VK_SUCCESS; } -/// Every storage format the internal images need. A device missing one cannot run the passes, and -/// finding that out here is better than a failed image allocation in the middle of a frame. +/// Every storage format the internal images need. A device missing one cannot run the passes, and finding that out here is +/// better than a failed image allocation in the middle of a frame. bool formats_supported() { static const VkFormat needed[]{ - VK_FORMAT_R8_UNORM, VK_FORMAT_R16_SFLOAT, VK_FORMAT_R8G8B8A8_UNORM, - VK_FORMAT_R16G16B16A16_SFLOAT, VK_FORMAT_R16G16_SFLOAT, VK_FORMAT_R32_SFLOAT, - VK_FORMAT_R32_UINT, VK_FORMAT_R32G32B32A32_SFLOAT, VK_FORMAT_R16_SNORM, + VK_FORMAT_R8_UNORM, VK_FORMAT_R16_SFLOAT, VK_FORMAT_R8G8B8A8_UNORM, VK_FORMAT_R16G16B16A16_SFLOAT, + VK_FORMAT_R16G16_SFLOAT, VK_FORMAT_R32_SFLOAT, VK_FORMAT_R32_UINT, VK_FORMAT_R32G32B32A32_SFLOAT, + VK_FORMAT_R16_SNORM, }; for (VkFormat f : needed) { VkFormatProperties props{}; vkGetPhysicalDeviceFormatProperties(dev.physical, f, &props); if (!(props.optimalTilingFeatures & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT) || !(props.optimalTilingFeatures & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)) { - logf("vk: fsr3: format %d cannot be a storage and sampled image here", (int)f); + logf("vk: fsr3: not on this GPU: format %d cannot be a storage and sampled image here", (int)f); return false; } } return true; } -/// The uniform buffer the three constant blocks are written into: host visible and mapped, with a -/// set of slots per frame in flight so writing one frame cannot disturb a frame still being read. +/// The uniform buffer the two constant blocks (and the Lanczos table, once) are written into: host visible and mapped, with +/// a set of slots per frame in flight so writing one frame cannot disturb a frame still being read. bool make_uniforms() { const VkDeviceSize align = std::max(dev.props.limits.minUniformBufferOffsetAlignment, 16); const auto round_up = [align](VkDeviceSize n) { return (n + align - 1) / align * align; }; g.slot_fsr = round_up(sizeof(Constants)); g.slot_spd = round_up(sizeof(SpdConstants)); - g.slot_rcas = round_up(sizeof(RcasConstants)); - g.frame_stride = g.slot_fsr + g.slot_spd + g.slot_rcas + round_up(128 * sizeof(int16_t)); - return create_buffer(g.frame_stride * kUniformFrames, - VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT, true, - g.uniforms, g.uniforms_memory, &g.uniforms_mapped); + g.frame_stride = g.slot_fsr + g.slot_spd + round_up(128 * sizeof(int16_t)); + return create_buffer(g.frame_stride * kUniformFrames, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT, + true, g.uniforms, g.uniforms_memory, &g.uniforms_mapped); } -/// Records one pass: its descriptors pushed in the order the pass file numbers them, then the two -/// samplers it declares at 1000 and 1001, then the dispatch. -void record_pass(VkCommandBuffer cmd, const Pipeline& p, const PassInfo& info, const Resource* res, - size_t count, uint32_t groups_x, uint32_t groups_y) { +/// Records one pass: its descriptors pushed in the order the pass file numbers them, then the two samplers it declares at +/// 1000 and 1001, then the dispatch, and a barrier after it (every pass reads what the one before it wrote). +void record_pass(VkCommandBuffer cmd, size_t pass, const Resource* res, size_t count, uint32_t groups_x, uint32_t groups_y) { + const PassInfo& info = PASSES[pass]; + const Pipeline& p = g.passes[pass]; std::vector images(count); std::vector buffers(count); std::vector writes; @@ -372,17 +368,15 @@ void record_pass(VkCommandBuffer cmd, const Pipeline& p, const PassInfo& info, c w.pBufferInfo = &buffers[i]; } else { images[i] = {VK_NULL_HANDLE, res[i].view, VK_IMAGE_LAYOUT_GENERAL}; - w.descriptorType = info.bindings[i] == T ? VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE - : VK_DESCRIPTOR_TYPE_STORAGE_IMAGE; + w.descriptorType = info.bindings[i] == T ? VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE : VK_DESCRIPTOR_TYPE_STORAGE_IMAGE; w.pImageInfo = &images[i]; } writes.push_back(w); } const VkDescriptorImageInfo point{g.point, VK_NULL_HANDLE, VK_IMAGE_LAYOUT_UNDEFINED}; const VkDescriptorImageInfo linear{g.linear, VK_NULL_HANDLE, VK_IMAGE_LAYOUT_UNDEFINED}; - for (const auto& [binding, info_ptr] : - {std::pair{1000, &point}, - std::pair{1001, &linear}}) { + for (const auto& [binding, info_ptr] : {std::pair{1000, &point}, + std::pair{1001, &linear}}) { VkWriteDescriptorSet w{VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET}; w.dstBinding = binding; w.descriptorCount = 1; @@ -390,50 +384,46 @@ void record_pass(VkCommandBuffer cmd, const Pipeline& p, const PassInfo& info, c w.pImageInfo = info_ptr; writes.push_back(w); } - // (one timed span per pass with RX_VK_PASS_TIMING=1, so the profiler's report gives GPU ms by - // pass name. Nine passes costing half a second between them needs a number per pass, not - // another hypothesis) - // (hookshot, diagnostics) RX_VK_FSR_STAGE cuts this path short so each run names a cost - // instead of a hypothesis: 2 records every barrier, clear and descriptor but no dispatch. - const bool timed = gprof_begin(cmd); + const bool timed = gprof_begin(cmd); // (RX_VK_PASS_TIMING=1: GPU ms by pass name) vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, p.pipeline); - vkCmdPushDescriptorSetKHR(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, p.layout, 0, - (uint32_t)writes.size(), writes.data()); - if (fsr_stage() != 2) vkCmdDispatch(cmd, std::max(1u, groups_x), std::max(1u, groups_y), 1); + vkCmdPushDescriptorSetKHR(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, p.layout, 0, (uint32_t)writes.size(), writes.data()); + vkCmdDispatch(cmd, std::max(1u, groups_x), std::max(1u, groups_y), 1); if (timed) gprof_end(cmd, std::string("fsr3 ") + info.name); - // (every pass reads what the one before it wrote) memory_barrier(cmd, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_WRITE_BIT, - VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, - VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_SHADER_WRITE_BIT); + VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_SHADER_WRITE_BIT); } -} // namespace - -bool supported() { - static const bool answer = [] { - if (!dev.push_descriptor || !vkCmdPushDescriptorSetKHR) { - logf("vk: fsr3: no push descriptors"); - return false; - } - return formats_supported(); - }(); - return answer; +std::vector all_images() { + std::vector all{&g.farthest_depth, &g.shading_change, &g.new_locks, &g.spd_mips, &g.farthest_depth_mip1, + &g.dilated_motion_vectors, &g.dilated_depth, &g.previous_nearest_depth, + &g.dilated_reactive_masks, &g.frame_info, &g.spd_atomic, &g.lanczos_lut, &g.default_reactive, + &g.output}; + for (size_t i = 0; i < 2; i++) { + all.push_back(&g.accumulation[i]); + all.push_back(&g.luma[i]); + all.push_back(&g.luma_history[i]); + all.push_back(&g.internal_upscaled[i]); + } + return all; } -bool prepare(uint32_t render_width, uint32_t render_height, uint32_t upscale_width, - uint32_t upscale_height) { +/// The pipelines and the internal images for an evaluation at these sizes, made again when the sizes change +bool prepare(uint32_t render_width, uint32_t render_height, uint32_t upscale_width, uint32_t upscale_height) { if (!supported()) return false; if (!g.tried) { g.tried = true; g.ok = make_samplers() && make_uniforms(); - for (size_t i = 0; i < kPassCount && g.ok; i++) g.ok = make_pipeline(g.passes[i], PASSES[i]); - if (g.ok) logf("vk: fsr3: %zu pass pipelines ready", kPassCount); + for (size_t i = 0; i < kPassCount && g.ok; i++) { + const bool needed = g.wave ? (i != P_LUMA_PYRAMID_NOWAVE && i != P_SHADING_CHANGE_PYRAMID_NOWAVE) + : (i != P_LUMA_PYRAMID && i != P_SHADING_CHANGE_PYRAMID); + if (needed) g.ok = make_pipeline(g.passes[i], PASSES[i]); + } + if (g.ok) logf("vk: fsr3: its passes are ready (%s subgroup operations)", g.wave ? "with" : "without"); } if (!g.ok) return false; - const bool same = g.output.image && g.render_width == render_width && - g.render_height == render_height && g.upscale_width == upscale_width && - g.upscale_height == upscale_height; - if (same) return true; + if (g.output.image && g.render_width == render_width && g.render_height == render_height && + g.upscale_width == upscale_width && g.upscale_height == upscale_height) + return true; const uint32_t rw = std::max(1u, render_width), rh = std::max(1u, render_height); const uint32_t uw = std::max(1u, upscale_width), uh = std::max(1u, upscale_height); @@ -441,19 +431,17 @@ bool prepare(uint32_t render_width, uint32_t render_height, uint32_t upscale_wid for (size_t i = 0; i < 2 && made; i++) { made = made && make_image(g.accumulation[i], VK_FORMAT_R8_UNORM, rw, rh); made = made && make_image(g.luma[i], VK_FORMAT_R16_SFLOAT, rw, rh); - // (the pass files declare the luma history as rgba8; the SDK allocates RGBA16F, which a - // storage format qualifier does not match, so allocate what the shaders store) + // (the pass files declare the luma history as rgba8; the SDK allocates RGBA16F, which a storage format qualifier + // does not match, so this allocates what the shaders store) made = made && make_image(g.luma_history[i], VK_FORMAT_R8G8B8A8_UNORM, rw, rh); made = made && make_image(g.internal_upscaled[i], VK_FORMAT_R16G16B16A16_SFLOAT, uw, uh); } const uint32_t half_w = std::max(1u, rw / 2), half_h = std::max(1u, rh / 2); - const uint32_t spd_levels = - (uint32_t)std::floor(std::log2((float)std::max(half_w, half_h))) + 1; + const uint32_t spd_levels = (uint32_t)std::floor(std::log2((float)std::max(half_w, half_h))) + 1; made = made && make_image(g.farthest_depth, VK_FORMAT_R16_SFLOAT, rw, rh); made = made && make_image(g.shading_change, VK_FORMAT_R8_UNORM, half_w, half_h); made = made && make_image(g.new_locks, VK_FORMAT_R8_UNORM, uw, uh); - made = made && make_image(g.spd_mips, VK_FORMAT_R16G16_SFLOAT, half_w, half_h, - std::max(spd_levels, kSpdStoredMips)); + made = made && make_image(g.spd_mips, VK_FORMAT_R16G16_SFLOAT, half_w, half_h, std::max(spd_levels, kSpdStoredMips)); made = made && make_image(g.farthest_depth_mip1, VK_FORMAT_R16_SFLOAT, half_w, half_h); made = made && make_image(g.dilated_motion_vectors, VK_FORMAT_R16G16_SFLOAT, rw, rh); made = made && make_image(g.dilated_depth, VK_FORMAT_R32_SFLOAT, rw, rh); @@ -464,8 +452,12 @@ bool prepare(uint32_t render_width, uint32_t render_height, uint32_t upscale_wid made = made && make_image(g.lanczos_lut, VK_FORMAT_R16_SNORM, 128, 1); made = made && make_image(g.default_reactive, VK_FORMAT_R8_UNORM, 1, 1); made = made && make_image(g.output, VK_FORMAT_R16G16B16A16_SFLOAT, uw, uh); + g.first_evaluation = true; // (new images: their first layout and cleared, the history from nothing) + g.lut_uploaded = false; + g.parity = 0; if (!made) { - shutdown(); + for (Image* t : all_images()) drop_image(*t); + g.render_width = g.render_height = g.upscale_width = g.upscale_height = 0; return false; } g.render_width = rw, g.render_height = rh, g.upscale_width = uw, g.upscale_height = uh; @@ -473,31 +465,36 @@ bool prepare(uint32_t render_width, uint32_t render_height, uint32_t upscale_wid return true; } -// (hookshot, diagnostics) How far down this path a run goes, and how far apart the evaluations are. -// 0 (default) is the whole path; 1 stops before it (vk_draw.cpp); 2 records everything but the nine -// dispatches; 3 keeps the dispatches and drops the blit (vk_draw.cpp). The interval is the frame -// time when the scene evaluates once a frame, so one line says whether a stage is the cost. - -void note_frame() { - using clk = std::chrono::steady_clock; - static clk::time_point last{}; - static double sum_ms = 0.0; - static int n = 0; - const clk::time_point now = clk::now(); - if (last.time_since_epoch().count() != 0) { - sum_ms += std::chrono::duration(now - last).count(); - if (++n == 30) { - logf("vk: fsr3 stage %d: %.1f ms between evaluations (%.1f a second)", fsr_stage(), - sum_ms / n, 1000.0 * n / sum_ms); - sum_ms = 0.0, n = 0; +} // namespace + +bool supported() { + if (!dev.device) return false; // (asked before the device is made, by the menu: not an answer to keep) + static const bool answer = [] { + // (the widest pass pushes thirteen descriptors and the two samplers) + if (!dev.push_descriptor || !vkCmdPushDescriptorSetKHR || dev.max_push_descriptors < 15) { + logf("vk: fsr3: not on this GPU: no push descriptors, or fewer than 15 (%u)", dev.max_push_descriptors); + return false; } - } - last = now; + if (!dev.features.shaderStorageImageExtendedFormats || !dev.features.shaderStorageImageWriteWithoutFormat) { + logf("vk: fsr3: not on this GPU: no extended storage image formats, or no storage writes without a format"); + return false; + } + if (!formats_supported()) return false; + VkPhysicalDeviceSubgroupProperties sg{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES}; + VkPhysicalDeviceProperties2 p2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2}; + p2.pNext = &sg; + vkGetPhysicalDeviceProperties2(dev.physical, &p2); + const VkSubgroupFeatureFlags want = VK_SUBGROUP_FEATURE_BASIC_BIT | VK_SUBGROUP_FEATURE_QUAD_BIT; + g.wave = (sg.supportedOperations & want) == want && (sg.supportedStages & VK_SHADER_STAGE_COMPUTE_BIT); + logf("vk: fsr3: AMD FSR 3.1 can run on this GPU"); + return true; + }(); + return answer; } bool upscale(VkCommandBuffer cmd, const Inputs& in) { + free_dead(); if (!in.color || !in.depth || !in.motion) return false; - if (!(in.near_plane > 0.0f) || !(in.fov_y > 0.0f)) return false; // (Inputs defaults them) if (!prepare(in.render_width, in.render_height, in.upscale_width, in.upscale_height)) return false; const bool first = g.first_evaluation; @@ -517,30 +514,19 @@ bool upscale(VkCommandBuffer cmd, const Inputs& in) { k.jitter[i] = in.jitter[i]; k.previous_jitter[i] = first ? in.jitter[i] : g.previous_jitter[i]; } - { // (setupDeviceDepthToViewSpaceDepthParams for reversed infinite depth) - const float aspect = (float)rw / (float)std::max(1, rh); - const float cot_half_fov = std::cos(0.5f * in.fov_y) / std::sin(0.5f * in.fov_y); - k.device_to_view_depth[0] = -1.0f * FLT_EPSILON; - k.device_to_view_depth[1] = in.near_plane; - k.device_to_view_depth[2] = 1.0f / (cot_half_fov / aspect); - k.device_to_view_depth[3] = 1.0f / cot_half_fov; - k.tan_half_fov = std::tan(std::atan(std::tan(in.fov_y * 0.5f) * aspect)); - } + memcpy(k.device_to_view_depth, in.camera.device_to_view_depth, sizeof k.device_to_view_depth); + k.tan_half_fov = in.camera.tan_half_fov_x; // (not read by the 3.1.4 upscaler's passes; set as the SDK sets it) k.motion_vector_scale[0] = in.motion_scale[0] / (float)std::max(1, rw); k.motion_vector_scale[1] = in.motion_scale[1] / (float)std::max(1, rh); k.downscale_factor[0] = (float)rw / (float)std::max(1, uw); k.downscale_factor[1] = (float)rh / (float)std::max(1, uh); - const float phases = (float)jitter_phase_count_for(g.render_width, g.upscale_width); - if (reset || g.jitter_phase_count == 0.0f) g.jitter_phase_count = phases; - else if (phases > g.jitter_phase_count) g.jitter_phase_count += 1.0f; - else if (phases < g.jitter_phase_count) g.jitter_phase_count -= 1.0f; - k.jitter_phase_count = g.jitter_phase_count; + k.jitter_phase_count = (float)std::max(1u, in.jitter_phases); k.delta_time = std::clamp(in.frame_time_ms / 1000.0f, 0.0f, 1.0f); k.delta_pre_exposure = 1.0f; k.view_space_to_meters = 1.0f; g.frame_index = reset ? 0.0f : g.frame_index + 1.0f; k.frame_index = g.frame_index; - k.velocity_factor = 1.0f; // (the SDK's FFX_FSR3UPSCALER_CONFIGURE_UPSCALE_KEY_* defaults) + k.velocity_factor = 1.0f; // (the SDK's FFX_FSR3UPSCALER_CONFIGURE_UPSCALE_KEY_* defaults) k.reactiveness_scale = 1.0f; k.shading_change_scale = 1.0f; k.accumulation_added_per_frame = 1.0f / 3.0f; @@ -557,8 +543,6 @@ bool upscale(VkCommandBuffer cmd, const Inputs& in) { spd.mips = (uint32_t)std::min(std::floor(std::log2((float)std::max(g.render_width, g.render_height))), 12.0f); spd.num_work_groups = spd_x * spd_y; spd.render_size[0] = g.render_width, spd.render_size[1] = g.render_height; - RcasConstants rcas{}; - rcas_con(rcas.config, 2.0f - 2.0f * std::clamp(in.sharpness, 0.0f, 1.0f)); // This frame's slots, written through the mapped buffer. const VkDeviceSize base = (VkDeviceSize)(g.uniform_frame % kUniformFrames) * g.frame_stride; @@ -566,16 +550,13 @@ bool upscale(VkCommandBuffer cmd, const Inputs& in) { uint8_t* const mapped = (uint8_t*)g.uniforms_mapped + base; memcpy(mapped, &k, sizeof k); memcpy(mapped + g.slot_fsr, &spd, sizeof spd); - memcpy(mapped + g.slot_fsr + g.slot_spd, &rcas, sizeof rcas); - const VkDeviceSize lut_at = g.slot_fsr + g.slot_spd + g.slot_rcas; + const VkDeviceSize lut_at = g.slot_fsr + g.slot_spd; if (!g.lut_uploaded) { // (the accumulate pass's Lanczos weights, 128 taps as the SDK builds them) int16_t weights[128]; for (size_t i = 0; i < 128; i++) { const float x = 2.0f * (float)i / 127.0f; const float pi_x = 3.14159265358979f * x; - const float y = std::abs(x) < FLT_EPSILON - ? 1.0f - : (std::sin(pi_x) / pi_x) * (std::sin(0.5f * pi_x) / (0.5f * pi_x)); + const float y = std::abs(x) < FLT_EPSILON ? 1.0f : (std::sin(pi_x) / pi_x) * (std::sin(0.5f * pi_x) / (0.5f * pi_x)); weights[i] = (int16_t)std::lround(y * 32767.0f); } memcpy(mapped + lut_at, weights, sizeof weights); @@ -584,26 +565,13 @@ bool upscale(VkCommandBuffer cmd, const Inputs& in) { const uint32_t p = g.parity, q = p ^ 1u; - // What the game's draws wrote has to be visible, and our images need their first layout. - { - memory_barrier(cmd, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, - VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT | - VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT | - VK_ACCESS_2_SHADER_WRITE_BIT | VK_ACCESS_2_TRANSFER_WRITE_BIT, - VK_PIPELINE_STAGE_2_TRANSFER_BIT | VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, - VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_SHADER_WRITE_BIT | - VK_ACCESS_2_TRANSFER_WRITE_BIT); - } - std::vector all{&g.farthest_depth, &g.shading_change, &g.new_locks, &g.spd_mips, - &g.farthest_depth_mip1, &g.dilated_motion_vectors, &g.dilated_depth, - &g.previous_nearest_depth, &g.dilated_reactive_masks, &g.frame_info, - &g.spd_atomic, &g.lanczos_lut, &g.default_reactive, &g.output}; - for (size_t i = 0; i < 2; i++) { - all.push_back(&g.accumulation[i]); - all.push_back(&g.luma[i]); - all.push_back(&g.luma_history[i]); - all.push_back(&g.internal_upscaled[i]); - } + // What was written before (the inputs: vk_fsr3_inputs.cpp) has to be visible, and new images need their first layout. + memory_barrier(cmd, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, + VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT | + VK_ACCESS_2_SHADER_WRITE_BIT | VK_ACCESS_2_TRANSFER_WRITE_BIT, + VK_PIPELINE_STAGE_2_TRANSFER_BIT | VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, + VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_SHADER_WRITE_BIT | VK_ACCESS_2_TRANSFER_WRITE_BIT); + const std::vector all = all_images(); if (first) { std::vector to_general; to_general.reserve(all.size()); @@ -624,9 +592,7 @@ bool upscale(VkCommandBuffer cmd, const Inputs& in) { di.pImageMemoryBarriers = to_general.data(); vkCmdPipelineBarrier2(cmd, &di); const VkClearColorValue zero{}; - for (const Image* t : all) { - vkCmdClearColorImage(cmd, t->image, VK_IMAGE_LAYOUT_GENERAL, &zero, 1, &ALL_LEVELS); - } + for (const Image* t : all) vkCmdClearColorImage(cmd, t->image, VK_IMAGE_LAYOUT_GENERAL, &zero, 1, &ALL_LEVELS); } if (!g.lut_uploaded) { g.lut_uploaded = true; @@ -638,20 +604,16 @@ bool upscale(VkCommandBuffer cmd, const Inputs& in) { } // Per frame: the nearest-depth scratch, the SPD counter and its mips; the history on a reset. const VkClearColorValue zero{}; - for (const Image* t : {&g.previous_nearest_depth, &g.spd_atomic, &g.spd_mips}) { + for (const Image* t : {&g.previous_nearest_depth, &g.spd_atomic, &g.spd_mips}) vkCmdClearColorImage(cmd, t->image, VK_IMAGE_LAYOUT_GENERAL, &zero, 1, &ALL_LEVELS); - } if (reset) { vkCmdClearColorImage(cmd, g.accumulation[p].image, VK_IMAGE_LAYOUT_GENERAL, &zero, 1, &ALL_LEVELS); VkClearColorValue info{}; info.float32[0] = -1.0f, info.float32[1] = 1.0f; vkCmdClearColorImage(cmd, g.frame_info.image, VK_IMAGE_LAYOUT_GENERAL, &info, 1, &ALL_LEVELS); } - { - memory_barrier(cmd, VK_PIPELINE_STAGE_2_TRANSFER_BIT, VK_ACCESS_2_TRANSFER_WRITE_BIT, - VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, - VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_SHADER_WRITE_BIT); - } + memory_barrier(cmd, VK_PIPELINE_STAGE_2_TRANSFER_BIT, VK_ACCESS_2_TRANSFER_WRITE_BIT, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, + VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_SHADER_WRITE_BIT); const auto tex = [](const Image& t) { return Resource{t.view}; }; const auto mip = [](uint32_t level) { @@ -663,91 +625,216 @@ bool upscale(VkCommandBuffer cmd, const Inputs& in) { const Resource current_luma = tex(g.luma[p]); const Resource cb_fsr{VK_NULL_HANDLE, g.uniforms, base, g.slot_fsr}; const Resource cb_spd{VK_NULL_HANDLE, g.uniforms, base + g.slot_fsr, g.slot_spd}; - const Resource cb_rcas{VK_NULL_HANDLE, g.uniforms, base + g.slot_fsr + g.slot_spd, g.slot_rcas}; - const auto groups = [](int32_t size, uint32_t tile) { - return ((uint32_t)std::max(1, size) + tile - 1) / tile; - }; + const auto groups = [](int32_t size, uint32_t tile) { return ((uint32_t)std::max(1, size) + tile - 1) / tile; }; const auto run = [&](size_t pass, std::initializer_list res, uint32_t gx, uint32_t gy) { - record_pass(cmd, g.passes[pass], PASSES[pass], res.begin(), res.size(), gx, gy); + record_pass(cmd, pass, res.begin(), res.size(), gx, gy); }; - run(0, {motion, depth, color, tex(g.dilated_motion_vectors), tex(g.dilated_depth), - tex(g.previous_nearest_depth), tex(g.farthest_depth), current_luma, cb_fsr}, + run(P_PREPARE_INPUTS, {motion, depth, color, tex(g.dilated_motion_vectors), tex(g.dilated_depth), + tex(g.previous_nearest_depth), tex(g.farthest_depth), current_luma, cb_fsr}, groups(rw, 8), groups(rh, 8)); - run(1, {current_luma, tex(g.farthest_depth), tex(g.spd_atomic), tex(g.frame_info), mip(0), mip(1), - mip(2), mip(3), mip(4), mip(5), tex(g.farthest_depth_mip1), cb_fsr, cb_spd}, + run(g.wave ? P_LUMA_PYRAMID : P_LUMA_PYRAMID_NOWAVE, + {current_luma, tex(g.farthest_depth), tex(g.spd_atomic), tex(g.frame_info), mip(0), mip(1), mip(2), mip(3), mip(4), + mip(5), tex(g.farthest_depth_mip1), cb_fsr, cb_spd}, spd_x, spd_y); - // (hookshot) The two pyramid passes share one atomic counter, and the single-pass downsampler - // uses it to elect the workgroup that finishes the chain: it counts up to num_work_groups and - // the last one through does the tail. Clearing it only once a frame leaves the second pass - // starting at the total, so no workgroup is elected and the ones waiting on the tail spin. One - // FSR evaluation cost about half a second before this, with the frame rate falling to 1.9 fps. - { - const VkClearColorValue zero_again{}; - memory_barrier(cmd, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_WRITE_BIT, - VK_PIPELINE_STAGE_2_TRANSFER_BIT, VK_ACCESS_2_TRANSFER_WRITE_BIT); - vkCmdClearColorImage(cmd, g.spd_atomic.image, VK_IMAGE_LAYOUT_GENERAL, &zero_again, 1, &ALL_LEVELS); - memory_barrier(cmd, VK_PIPELINE_STAGE_2_TRANSFER_BIT, VK_ACCESS_2_TRANSFER_WRITE_BIT, - VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, - VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_SHADER_WRITE_BIT); - } - run(3, {current_luma, tex(g.luma[q]), tex(g.dilated_motion_vectors), exposure, tex(g.spd_atomic), - mip(0), mip(1), mip(2), mip(3), mip(4), mip(5), cb_fsr, cb_spd}, + // The two pyramid passes share one atomic counter, and the single-pass downsampler uses it to elect the workgroup that + // finishes the chain: it counts up to num_work_groups and the last one through does the tail. Cleared only once a frame, + // the second pass would start at the total, elect no workgroup, and the ones waiting on the tail would spin + memory_barrier(cmd, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_WRITE_BIT, VK_PIPELINE_STAGE_2_TRANSFER_BIT, + VK_ACCESS_2_TRANSFER_WRITE_BIT); + vkCmdClearColorImage(cmd, g.spd_atomic.image, VK_IMAGE_LAYOUT_GENERAL, &zero, 1, &ALL_LEVELS); + memory_barrier(cmd, VK_PIPELINE_STAGE_2_TRANSFER_BIT, VK_ACCESS_2_TRANSFER_WRITE_BIT, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, + VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_SHADER_WRITE_BIT); + run(g.wave ? P_SHADING_CHANGE_PYRAMID : P_SHADING_CHANGE_PYRAMID_NOWAVE, + {current_luma, tex(g.luma[q]), tex(g.dilated_motion_vectors), exposure, tex(g.spd_atomic), mip(0), mip(1), mip(2), + mip(3), mip(4), mip(5), cb_fsr, cb_spd}, spd_x, spd_y); - run(5, {tex(g.spd_mips), tex(g.shading_change), cb_fsr}, groups(rw / 2, 8), groups(rh / 2, 8)); - run(6, {tex(g.previous_nearest_depth), tex(g.dilated_motion_vectors), tex(g.dilated_depth), - tex(g.default_reactive), tex(g.default_reactive), tex(g.accumulation[p]), - tex(g.shading_change), current_luma, exposure, tex(g.dilated_reactive_masks), - tex(g.new_locks), tex(g.accumulation[q]), cb_fsr}, + run(P_SHADING_CHANGE, {tex(g.spd_mips), tex(g.shading_change), cb_fsr}, groups(rw / 2, 8), groups(rh / 2, 8)); + run(P_PREPARE_REACTIVITY, + {tex(g.previous_nearest_depth), tex(g.dilated_motion_vectors), tex(g.dilated_depth), tex(g.default_reactive), + tex(g.default_reactive), tex(g.accumulation[p]), tex(g.shading_change), current_luma, exposure, + tex(g.dilated_reactive_masks), tex(g.new_locks), tex(g.accumulation[q]), cb_fsr}, groups(rw, 8), groups(rh, 8)); - run(7, {exposure, tex(g.dilated_reactive_masks), tex(g.dilated_motion_vectors), tex(g.frame_info), - tex(g.luma_history[p]), tex(g.farthest_depth_mip1), current_luma, tex(g.luma_history[q]), - tex(g.farthest_depth), cb_fsr}, + run(P_LUMA_INSTABILITY, + {exposure, tex(g.dilated_reactive_masks), tex(g.dilated_motion_vectors), tex(g.frame_info), tex(g.luma_history[p]), + tex(g.farthest_depth_mip1), current_luma, tex(g.luma_history[q]), tex(g.farthest_depth), cb_fsr}, groups(rw, 8), groups(rh, 8)); - run(in.sharpen ? 9 : 8, - {exposure, tex(g.dilated_reactive_masks), tex(g.dilated_motion_vectors), - tex(g.internal_upscaled[p]), tex(g.lanczos_lut), tex(g.farthest_depth_mip1), current_luma, - tex(g.farthest_depth), color, tex(g.internal_upscaled[q]), tex(g.output), tex(g.new_locks), - cb_fsr}, + run(P_ACCUMULATE, + {exposure, tex(g.dilated_reactive_masks), tex(g.dilated_motion_vectors), tex(g.internal_upscaled[p]), + tex(g.lanczos_lut), tex(g.farthest_depth_mip1), current_luma, tex(g.farthest_depth), color, + tex(g.internal_upscaled[q]), tex(g.output), tex(g.new_locks), cb_fsr}, groups(uw, 8), groups(uh, 8)); - if (in.sharpen) { - run(10, {exposure, tex(g.internal_upscaled[q]), tex(g.output), cb_fsr, cb_rcas}, - groups(uw, 16), groups(uh, 16)); - } - { - memory_barrier(cmd, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_WRITE_BIT, - VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, - VK_ACCESS_2_SHADER_READ_BIT); - } g.parity = q; return true; } -VkImage output_image() { - return g.output.image; +VkImage output_image() { return g.output.image; } +VkImageView output_view() { return g.output.view; } + +} // namespace mkwvk::fsr3 + +namespace mkwvk { + +namespace { + +int env_switch(const char* name) { // (-1: unset) + const char* e = getenv(name); + return e && *e ? atoi(e) : -1; } -VkImageView output_view() { - return g.output.view; +/// The network's output from FSR's picture: dlss_out.comp, the same pass DLSS's picture goes through (the colour FSR was +/// given is the network's perceptual encoding, which this squares back to linear colour, as the network's own output does) +struct Out { + std::mutex mu; + bool tried = false; + VkDescriptorSetLayout set = VK_NULL_HANDLE; + VkPipelineLayout layout = VK_NULL_HANDLE; + VkPipeline pipe = VK_NULL_HANDLE; + VkSampler point = VK_NULL_HANDLE; + const char* reason = nullptr; + int reason_repeats = 0; + bool told_first = false; + uint64_t drawn = 0; +}; +Out& out_state() { + static Out o; + return o; } -void shutdown() { - for (Image* t : {&g.farthest_depth, &g.shading_change, &g.new_locks, &g.spd_mips, - &g.farthest_depth_mip1, &g.dilated_motion_vectors, &g.dilated_depth, - &g.previous_nearest_depth, &g.dilated_reactive_masks, &g.frame_info, - &g.spd_atomic, &g.lanczos_lut, &g.default_reactive, &g.output}) { - drop_image(*t); +bool make_out_pipeline() { + Out& o = out_state(); + if (o.pipe) return true; + if (o.tried) return false; + o.tried = true; + const VkDescriptorSetLayoutBinding b[2] = { + {0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_COMPUTE_BIT, nullptr}, + {1, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1, VK_SHADER_STAGE_COMPUTE_BIT, nullptr}}; + VkDescriptorSetLayoutCreateInfo li{VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO}; + li.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR; + li.bindingCount = 2, li.pBindings = b; + if (vkCreateDescriptorSetLayout(dev.device, &li, nullptr, &o.set) != VK_SUCCESS) return false; + const VkPushConstantRange pr{VK_SHADER_STAGE_COMPUTE_BIT, 0, 8}; + VkPipelineLayoutCreateInfo pi{VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO}; + pi.setLayoutCount = 1, pi.pSetLayouts = &o.set, pi.pushConstantRangeCount = 1, pi.pPushConstantRanges = ≺ + if (vkCreatePipelineLayout(dev.device, &pi, nullptr, &o.layout) != VK_SUCCESS) return false; + VkShaderModuleCreateInfo mi{VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO}; + mi.codeSize = sizeof DLSS_OUT_COMP_SPV, mi.pCode = DLSS_OUT_COMP_SPV; + VkShaderModule m = VK_NULL_HANDLE; + if (vkCreateShaderModule(dev.device, &mi, nullptr, &m) != VK_SUCCESS) return false; + VkComputePipelineCreateInfo ci{VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO}; + ci.stage = {VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, nullptr, 0, VK_SHADER_STAGE_COMPUTE_BIT, m, "main", + nullptr}; + ci.layout = o.layout; + const VkResult r = vkCreateComputePipelines(dev.device, VK_NULL_HANDLE, 1, &ci, nullptr, &o.pipe); + vkDestroyShaderModule(dev.device, m, nullptr); + if (r != VK_SUCCESS) return o.pipe = VK_NULL_HANDLE, false; + VkSamplerCreateInfo si{VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO}; + si.magFilter = si.minFilter = VK_FILTER_NEAREST; + si.addressModeU = si.addressModeV = si.addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; + if (vkCreateSampler(dev.device, &si, nullptr, &o.point) != VK_SUCCESS) { + vkDestroyPipeline(dev.device, o.pipe, nullptr); + return o.pipe = VK_NULL_HANDLE, false; } - for (size_t i = 0; i < 2; i++) { - drop_image(g.accumulation[i]); - drop_image(g.luma[i]); - drop_image(g.luma_history[i]); - drop_image(g.internal_upscaled[i]); + return true; +} + +bool fail(const char* why) { // (the network runs: why, when it changes and every 600th time) + Out& o = out_state(); + if (why != o.reason || ++o.reason_repeats % 600 == 0) logf("vk: fsr3: the game's upscale runs (%s)", why); + if (why != o.reason) o.reason = why, o.reason_repeats = 0; + return false; +} + +} // namespace + +bool fsr3_wanted() { + static const int env = env_switch("RX_VK_FSR"); + if (env == 0) return false; + // (the Upscaler row's FSR 3.1, upscaler_rows.h, read each time: the row changes it while the game runs) + return (env > 0 || opts.dlss == upscaler_rows::FSR3) && fsr3::supported(); +} + +bool fsr3_upscale(VkCommandBuffer cmd, uint64_t key, bool known, Texture* in, VkImageView in_view, Texture* out, + VkImageView out_view, uint32_t out_level) { + const bool upscaling = fsr3_wanted(); + // (hookshot fork) AMD FSR 4 through AMD's runtime (vk_ffx.h), the Upscaler row's value after FSR 3.1: the same inputs, + // its picture squared back by the same pass + const bool fsr4 = !upscaling && fsr4_wanted(); + if (!upscaling && !fsr4 && !fsr3_inputs::wanted()) return false; + if (!in || !in_view || !out || !out_view) return false; + // (another network of the upscale's shape, as dlss_upscale takes them: only the scene into the picture. The gameplay + // networks sample the scene's B10G11R11 colour and write the B10G11R11 picture) + if (!known && (in->format != VK_FORMAT_B10G11R11_UFLOAT_PACK32 || out->format != VK_FORMAT_B10G11R11_UFLOAT_PACK32 || + (out->width >> out_level) <= in->width || !fsr3_inputs::is_scene(in))) + return false; + fsr3_inputs::Frame f; + if (!fsr3_inputs::prepare(cmd, in, in_view, f)) return upscaling || fsr4 ? fail("its inputs could not be made") : false; + if (!upscaling && !fsr4) return false; // (frame interpolation's inputs alone: the network or DLSS upscales) + Out& o = out_state(); + std::lock_guard lk(o.mu); + const uint32_t ow = std::max(1u, out->width >> out_level), oh = std::max(1u, out->height >> out_level); + if (out->format != VK_FORMAT_B10G11R11_UFLOAT_PACK32 || ow < f.width || oh < f.height) return fail("unexpected output"); + if (!make_out_pipeline()) return fail("its output pass was not made"); + struct Disturbed { // (from here commands are recorded: the program's descriptor pushes are pushed again after) + ~Disturbed() { descriptors_disturbed(); } + } disturbed; + fsr3::Inputs ai; + ai.color = f.color, ai.depth = f.depth, ai.motion = f.motion; + ai.render_width = f.width, ai.render_height = f.height; + ai.upscale_width = ow, ai.upscale_height = oh; + ai.jitter[0] = f.jitter[0], ai.jitter[1] = f.jitter[1]; + ai.jitter_phases = fsr3_inputs::jitter_size(2) ? fsr3_inputs::jitter_size(2) : 8; + ai.camera = f.camera; + ai.frame_time_ms = f.frame_ms; + ai.reset = f.reset; + VkImageView picture = VK_NULL_HANDLE; + if (fsr4) { // (hookshot fork: the same inputs as whole images, AMD's runtime's flags matching them: vk_ffx.cpp) + ffx::UpscaleInputs xi; + xi.color = f.color_image, xi.color_format = VK_FORMAT_R16G16B16A16_SFLOAT; + xi.depth = f.depth_image, xi.depth_format = VK_FORMAT_R32_SFLOAT; + xi.motion = f.motion_image, xi.motion_format = VK_FORMAT_R16G16_SFLOAT; + xi.render_width = f.width, xi.render_height = f.height; + xi.upscale_width = ow, xi.upscale_height = oh; + xi.jitter[0] = f.jitter[0], xi.jitter[1] = f.jitter[1]; + xi.near_plane = f.camera.near_plane, xi.far_plane = f.camera.far_plane, xi.fov_y = f.camera.fov_y; + xi.frame_time_ms = f.frame_ms; + xi.reset = f.reset; + if (!ffx::upscale(cmd, xi) || !ffx::output_view()) return fail("AMD's FSR 4 runtime did not upscale"); + picture = ffx::output_view(); + } else { + if (!fsr3::upscale(cmd, ai)) return fail("its passes could not be recorded"); + picture = fsr3::output_view(); } - g.render_width = g.render_height = g.upscale_width = g.upscale_height = 0; - g.first_evaluation = true; - g.lut_uploaded = false; - g.parity = 0; + { + const int32_t pc[2] = {(int32_t)ow, (int32_t)oh}; + const VkDescriptorImageInfo info[2] = {{o.point, picture, VK_IMAGE_LAYOUT_GENERAL}, + {VK_NULL_HANDLE, out_view, VK_IMAGE_LAYOUT_GENERAL}}; + VkWriteDescriptorSet w[2]{{VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET}, {VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET}}; + w[0].dstBinding = 0, w[0].descriptorCount = 1, w[0].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; + w[0].pImageInfo = &info[0]; + w[1].dstBinding = 1, w[1].descriptorCount = 1, w[1].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE; + w[1].pImageInfo = &info[1]; + vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, o.pipe); + vkCmdPushDescriptorSetKHR(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, o.layout, 0, 2, w); + vkCmdPushConstants(cmd, o.layout, VK_SHADER_STAGE_COMPUTE_BIT, 0, sizeof pc, pc); + vkCmdDispatch(cmd, (ow + 7) / 8, (oh + 7) / 8, 1); + } + full_barrier(cmd); + fsr3_inputs::upscaled(f.width, f.height, ow, oh); + // (every 600 frames: that it still draws, and the jitter it was given, which says the host's jitter is on) + if (++o.drawn % 600 == 0) + logf("vk: fsr3: %llu frames drawn, %ux%u -> %ux%u, this one's jitter %+.3f %+.3f px of %u phases", (unsigned long long)o.drawn, + f.width, f.height, ow, oh, f.jitter[0], f.jitter[1], ai.jitter_phases); + if (o.reason) logf("vk: fsr3: FSR 3.1 draws the upscale again (frame %llu)", (unsigned long long)f.frame); + o.reason = nullptr; + if (!o.told_first) { + o.told_first = true; + logf("vk: %s %ux%u -> %ux%u with assembled depth and camera motion (network %016llx; jitter %+.3f %+.3f px, " + "%u phases)", + fsr4 ? "amd fsr 4" : "fsr3", f.width, f.height, ow, oh, (unsigned long long)key, f.jitter[0], f.jitter[1], + ai.jitter_phases); + } + return true; } -} // namespace mkwvk::fsr3 +} // namespace mkwvk diff --git a/gpu/vk/vk_fsr3.h b/gpu/vk/vk_fsr3.h index 564242ff6..881f737b3 100644 --- a/gpu/vk/vk_fsr3.h +++ b/gpu/vk/vk_fsr3.h @@ -1,20 +1,30 @@ -// (hookshot) AMD FidelityFX Super Resolution 3.1 (the FSR 3.1.4 upscaler from FidelityFX SDK -// v1.1.4, shaders in third_party/fidelityfx-sdk compiled by scripts/fsr3_shaders.py) as a backend -// for the game's own upscale dispatch: docs/upscaling.md and gpu/vk/upscale_seam.h. +// (hookshot) AMD FidelityFX Super Resolution 3.1 (the FSR 3.1.4 upscaler of FidelityFX SDK v1.1.4) in place of OoT's +// gameplay upscale network, the same place NVIDIA DLSS takes (vk_dlss.h). Built from AMD's open shader sources +// (third_party/fidelityfx-sdk, compiled into gpu/vk/shaders by scripts/fsr3_shaders.py): every pass is a dispatch of ours, +// and nothing of AMD's is linked or loaded at run time, so it is in every build and runs on any GPU with what supported() +// asks for. // -// This file holds what an evaluation needs before it can be recorded -- the eleven pipelines and -// the SDK's internal images -- and nothing that records one. The dispatch half follows. +// The passes (namespace fsr3) take colour, depth and motion at the render size and write the picture at the output size. +// Those inputs are made in vk_fsr3_inputs.cpp; fsr3_upscale below is the dispatch's side: the network's input in, FSR's +// picture squared back into the network's output, as vk_dlss.cpp's dlss_out.comp does for DLSS. +// +// RX_VK_FSR=0: never (the row stays), =1: FSR 3.1 over the Insert menu's Upscaler row. #pragma once #include +#include "fsr3_math.h" #include "vk_internal.h" -namespace mkwvk::fsr3 { +namespace mkwvk { + +struct Texture; -/// One evaluation's inputs. Every field is the SDK's meaning, not a guess: the colour is HDR and -/// jittered at the render size, the depth is reversed, the motion points at the previous frame, and -/// the jitter is in render pixels (input texel k is sampled at k + 0.5 - jitter). +namespace fsr3 { + +/// One evaluation's inputs, in the SDK's meanings: the colour at the render size, the depth reversed, the motion toward the +/// frame before in render pixels without the jitter, and the jitter in render pixels (input texel k is sampled at +/// k + 0.5 - jitter) struct Inputs { VkImageView color = VK_NULL_HANDLE; VkImageView depth = VK_NULL_HANDLE; @@ -22,50 +32,38 @@ struct Inputs { uint32_t render_width = 0, render_height = 0; uint32_t upscale_width = 0, upscale_height = 0; float jitter[2]{}; - /// Turns a motion vector into render pixels (the render size, for vectors in UV). + uint32_t jitter_phases = 8; ///< the length of the jitter's sequence (dlss_jitter_phases: the host's own) + /// Turns a motion vector into render pixels (1 for vectors already in them) float motion_scale[2]{1.0f, 1.0f}; - /// The game's camera, which device_to_view_depth and tan_half_fov are built from. That - /// conversion only scales FSR's disocclusion thresholds, so a typical camera is usable and is - /// what these default to; supplying the real one is better but is not a precondition. - float near_plane = 0.1f; - float fov_y = 60.0f * 3.14159265358979f / 180.0f; + fsr3_math::Camera camera; ///< device_to_view_depth (fsr3_math.h) float frame_time_ms = 16.667f; bool reset = false; - bool sharpen = false; - float sharpness = 0.0f; ///< 0 to 1 as FSR takes it }; -/// Whether this device can run the passes at all: push descriptors, and every storage format the -/// SDK's internal images need. Asked once; the answer is cached. +/// Whether this device can run the passes: push descriptors enough for the widest pass, storage images in every format the +/// SDK's internal images use, the extended storage formats and storage writes without a format (the accumulate and RCAS +/// passes' output). Without subgroup quad operations in compute the two pyramids run as their wave-less variants. Asked +/// once; the reason it cannot is logged once [[nodiscard]] bool supported(); -/// Makes the pipelines and the internal images for an evaluation at these sizes, re-making them -/// when the sizes change. False when anything could not be made, which leaves FSR unavailable -/// rather than half-built. -[[nodiscard]] bool prepare(uint32_t render_width, uint32_t render_height, uint32_t upscale_width, - uint32_t upscale_height); - -/// Records one evaluation. False when the inputs are not usable, which leaves the caller to keep -/// whatever it would otherwise have done. +/// Records one evaluation into output_image(), making the pipelines and the internal images at these sizes first (again +/// when they change). False when something could not be made or the inputs are not usable [[nodiscard]] bool upscale(VkCommandBuffer cmd, const Inputs& in); -/// (diagnostics) How far down the upscale path a run goes: RX_VK_FSR_STAGE, 0 (the whole path) by -/// default. 1 stops before FSR, 2 drops the nine dispatches, 3 drops the blit into the game's -/// target. It exists so a run names a cost instead of a hypothesis; every stage but 0 is wrong -/// output on purpose. -int fsr_stage(); - -/// (diagnostics) Called once where the scene's upscale is reached, whatever stage the run is in: -/// every 30 calls it logs the milliseconds between them, which is the frame time when the scene -/// evaluates once a frame. One line per run, so a stage that is the cost shows up as a stage whose -/// removal returns the rate. -void note_frame(); - -/// The image an evaluation resolves into: RGBA16F at the upscale size, or null before prepare(). +/// The image an evaluation resolves into: RGBA16F at the upscale size, or null before the first [[nodiscard]] VkImage output_image(); [[nodiscard]] VkImageView output_view(); -/// Frees everything. Safe to call when nothing was made. -void shutdown(); +} // namespace fsr3 + +/// FSR 3.1 upscales: the Insert menu's Upscaler row says FSR 3.1 (upscaler_rows.h FSR3) or RX_VK_FSR=1, and it runs here +bool fsr3_wanted(); + +/// A gameplay upscale's dispatch, as vk_dlss.h's dlss_upscale takes it (vk_draw.cpp's fsr3_stand_in finds them the same +/// way). With FSR 3.1's frame interpolation on, the dispatch's input and this frame's camera become its inputs here +/// (vk_fsr3_inputs.h) whichever upscaler runs. true: FSR 3.1 wrote the output (the dispatch is left out); false: the network +/// (or DLSS) runs, the reason logged when it changes +bool fsr3_upscale(VkCommandBuffer cmd, uint64_t key, bool known, Texture* in, VkImageView in_view, Texture* out, + VkImageView out_view, uint32_t out_level); -} // namespace mkwvk::fsr3 +} // namespace mkwvk diff --git a/gpu/vk/vk_fsr3_inputs.cpp b/gpu/vk/vk_fsr3_inputs.cpp new file mode 100644 index 000000000..a68662e5c --- /dev/null +++ b/gpu/vk/vk_fsr3_inputs.cpp @@ -0,0 +1,377 @@ +// (hookshot) AMD FSR 3.1's inputs: the scene's camera and depth, made into colour, depth and motion at the render size by +// one pass (shaders/fsr3_prep.comp); see vk_fsr3_inputs.h for what comes from #841 and what does not yet. +// +// The camera is taken exactly as vk_dlss.cpp's dlss_note_scene_draw takes it, from the draws into the scene's colour target: +// their vertex stage's uniform buffer 3 holds the target's size at 0x120, this frame's view-projection at 0x30 (row major, +// clip = M * position) and the projection at 0x70, its w row (0, 0, -1, 0) at 0xa0. The jitter the host put on the +// projection (nx2/oot_jitter.py: P[0][2] and P[1][2]) is read back from it, given to FSR in render pixels and taken off the +// motion, with dlss_math.h's functions: the same jitter, read the same way, as DLSS's. +#include "vk_fsr3_inputs.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "dlss_math.h" +#include "vk_draw.h" // (descriptors_disturbed) +#include "vk_ffx.h" // (hookshot fork: AMD FSR 4, from the same inputs) +#include "vk_framegen.h" // (hookshot fork: the frame generation methods that take them) +#include "vk_fsr3.h" +#include "vk_fsr3fi.h" +#include "vk_texture.h" + +#include "shaders/fsr3_prep_comp_spv.h" +#include "vk_work.h" // (after the others: counts the commands that do GPU work, for full_barrier) + +namespace mkwvk::fsr3_inputs { +namespace { + +int env_switch(const char* name) { // (-1: unset) + const char* e = getenv(name); + return e && *e ? atoi(e) : -1; +} + +struct Image { + VkImage image = VK_NULL_HANDLE; + VmaAllocation memory = nullptr; + VkImageView view = VK_NULL_HANDLE; + VkFormat format = VK_FORMAT_UNDEFINED; + uint32_t width = 0, height = 0; +}; + +struct Camera { + float current[16]{}; // (its view-projection, jittered) + float projection[16]{}; // (its projection, jittered: the near plane and the field of view come from it) + float jitter[2]{}; // (the projection's offset of the picture's centre, in clip space: nx2/oot_jitter.py) + uint32_t width = 0, height = 0; + Texture* depth = nullptr; + uint64_t depth_gen = 0; // (texture_destroy_generation when taken: a depth texture destroyed since is not used) + uint64_t frame = 0; // (texture_frame_no when taken) + bool valid = false; +}; + +struct State { + std::mutex mu; + Camera cam; // (this frame's, since the last prepare) + Image color, depth, motion; + VkDescriptorSetLayout set = VK_NULL_HANDLE; + VkPipelineLayout layout = VK_NULL_HANDLE; + VkPipeline pipe = VK_NULL_HANDLE; + VkSampler point = VK_NULL_HANDLE; + bool tried = false; + std::unordered_map depth_views; + uint64_t depth_views_gen = 0; + float last_vp[16]{}; // (the frame before's view-projection, and its jitter) + float last_jitter[2]{}; + uint64_t last_frame = 0; // (the frame prepare last ran, 0: none) + std::chrono::steady_clock::time_point last_time{}; + Frame frame; // (the last one prepared: take()) + bool have_frame = false; + std::atomic upscaled_frame{0}; // (the frame FSR's upscaler last drew: jitter_size, on the game's thread) + std::atomic jitter_w{0}, jitter_h{0}, jitter_phases{8}; + struct Dead { uint64_t frame; std::function free; }; + std::vector dead; // (what work in flight may still use: freed a few frames on) + const char* reason = nullptr; + int reason_repeats = 0; + bool told = false; +}; +State& st() { + static State s; + return s; +} + +bool fail(const char* why) { // (why, when it changes and every 600th time) + State& s = st(); + if (why != s.reason || ++s.reason_repeats % 600 == 0) logf("vk: fsr3 inputs: not made this frame (%s)", why); + if (why != s.reason) s.reason = why, s.reason_repeats = 0; + return false; +} + +void later(std::function f) { st().dead.push_back({texture_frame_no(), std::move(f)}); } +void free_dead() { + State& s = st(); + const uint64_t now = texture_frame_no(); + for (size_t i = 0; i < s.dead.size();) { + if (now - s.dead[i].frame > 4) { + s.dead[i].free(); + s.dead[i] = std::move(s.dead.back()); + s.dead.pop_back(); + } else { + i++; + } + } +} + +bool make_image(VkCommandBuffer cmd, Image& im, VkFormat format, uint32_t w, uint32_t h) { + if (im.image && im.format == format && im.width == w && im.height == h) return true; + if (im.image) { + const Image old = im; + later([old] { + vkDestroyImageView(dev.device, old.view, nullptr); + destroy_image(old.image, old.memory); + }); + im = {}; + } + VkImageCreateInfo ic{VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO}; + ic.imageType = VK_IMAGE_TYPE_2D, ic.format = format, ic.extent = {w, h, 1}, ic.mipLevels = 1, ic.arrayLayers = 1; + ic.samples = VK_SAMPLE_COUNT_1_BIT, ic.tiling = VK_IMAGE_TILING_OPTIMAL; + ic.usage = VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_SAMPLED_BIT; + if (!create_image(ic, im.image, im.memory)) return im = {}, false; + VkImageViewCreateInfo vc{VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO}; + vc.image = im.image, vc.viewType = VK_IMAGE_VIEW_TYPE_2D, vc.format = format; + vc.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}; + if (vkCreateImageView(dev.device, &vc, nullptr, &im.view) != VK_SUCCESS) { + destroy_image(im.image, im.memory); + return im = {}, false; + } + im.format = format, im.width = w, im.height = h; + VkImageMemoryBarrier2 b{VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2}; // (UNDEFINED -> GENERAL, once) + b.srcStageMask = VK_PIPELINE_STAGE_2_NONE, b.dstStageMask = VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT; + b.dstAccessMask = VK_ACCESS_2_MEMORY_READ_BIT | VK_ACCESS_2_MEMORY_WRITE_BIT; + b.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED, b.newLayout = VK_IMAGE_LAYOUT_GENERAL; + b.srcQueueFamilyIndex = b.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + b.image = im.image, b.subresourceRange = vc.subresourceRange; + VkDependencyInfo di{VK_STRUCTURE_TYPE_DEPENDENCY_INFO}; + di.imageMemoryBarrierCount = 1, di.pImageMemoryBarriers = &b; + vkCmdPipelineBarrier2(cmd, &di); + return true; +} + +/// fsr3_prep.comp's pipeline, once: two sampled inputs, three storage outputs, dlss_prep.comp's push constants +bool make_pipeline() { + State& s = st(); + if (s.pipe) return true; + if (s.tried || !dev.push_descriptor || !vkCmdPushDescriptorSetKHR) return false; + s.tried = true; + VkDescriptorSetLayoutBinding b[5]{}; + for (uint32_t i = 0; i < 5; i++) + b[i] = {i, i < 2 ? VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER : VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1, + VK_SHADER_STAGE_COMPUTE_BIT, nullptr}; + VkDescriptorSetLayoutCreateInfo li{VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO}; + li.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR; + li.bindingCount = 5, li.pBindings = b; + if (vkCreateDescriptorSetLayout(dev.device, &li, nullptr, &s.set) != VK_SUCCESS) return false; + const VkPushConstantRange pr{VK_SHADER_STAGE_COMPUTE_BIT, 0, 84}; + VkPipelineLayoutCreateInfo pi{VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO}; + pi.setLayoutCount = 1, pi.pSetLayouts = &s.set, pi.pushConstantRangeCount = 1, pi.pPushConstantRanges = ≺ + if (vkCreatePipelineLayout(dev.device, &pi, nullptr, &s.layout) != VK_SUCCESS) return false; + VkShaderModuleCreateInfo mi{VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO}; + mi.codeSize = sizeof FSR3_PREP_COMP_SPV, mi.pCode = FSR3_PREP_COMP_SPV; + VkShaderModule m = VK_NULL_HANDLE; + if (vkCreateShaderModule(dev.device, &mi, nullptr, &m) != VK_SUCCESS) return false; + VkComputePipelineCreateInfo ci{VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO}; + ci.stage = {VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, nullptr, 0, VK_SHADER_STAGE_COMPUTE_BIT, m, "main", + nullptr}; + ci.layout = s.layout; + const VkResult r = vkCreateComputePipelines(dev.device, VK_NULL_HANDLE, 1, &ci, nullptr, &s.pipe); + vkDestroyShaderModule(dev.device, m, nullptr); + if (r != VK_SUCCESS) { + logf("vk: fsr3 inputs: their pipeline was not made (%d)", (int)r); + return s.pipe = VK_NULL_HANDLE, false; + } + VkSamplerCreateInfo si{VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO}; + si.magFilter = si.minFilter = VK_FILTER_NEAREST; + si.addressModeU = si.addressModeV = si.addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; + if (vkCreateSampler(dev.device, &si, nullptr, &s.point) != VK_SUCCESS) { + vkDestroyPipeline(dev.device, s.pipe, nullptr); + return s.pipe = VK_NULL_HANDLE, false; + } + return true; +} + +/// A view of a depth texture's depth alone, for sampling (made once per image: vk_dlss.cpp's depth_view) +VkImageView depth_view(Texture* t) { + State& s = st(); + const uint64_t gen = texture_destroy_generation(); + if (gen != s.depth_views_gen) { // (a texture was destroyed: its image's view may be stale) + auto old = std::move(s.depth_views); + s.depth_views.clear(); + later([old] { + for (const auto& [image, view] : old) vkDestroyImageView(dev.device, view, nullptr); + }); + s.depth_views_gen = gen; + } + if (auto it = s.depth_views.find(t->image); it != s.depth_views.end()) return it->second; + VkImageViewCreateInfo vc{VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO}; + vc.image = t->image, vc.viewType = VK_IMAGE_VIEW_TYPE_2D, vc.format = t->format; + vc.subresourceRange = {VK_IMAGE_ASPECT_DEPTH_BIT, 0, 1, 0, 1}; + VkImageView v = VK_NULL_HANDLE; + if (vkCreateImageView(dev.device, &vc, nullptr, &v) != VK_SUCCESS) v = VK_NULL_HANDLE; + s.depth_views[t->image] = v; + return v; +} + +} // namespace + +bool wanted() { + return fsr3_wanted() || fsr3fi::frames_wanted() != 0 || fsr4_wanted() || framegen_scene_inputs_wanted(); +} + +void note_scene_draw(const Texture* color0, uint32_t width, uint32_t height, Texture* depth, uint64_t camera, + uint64_t camera_size) { + if (!color0 || !depth || !camera || camera_size < 0x230 || width < 640 || height < 360) return; + if (color0->format != VK_FORMAT_B10G11R11_UFLOAT_PACK32 || !wanted()) return; + State& s = st(); + std::lock_guard lk(s.mu); + const uint64_t now = texture_frame_no(); + if (s.cam.valid && s.cam.frame == now && (uint64_t)width * height <= (uint64_t)s.cam.width * s.cam.height) + return; // (the largest one of the frame wins) + float c[0x230 / 4]; + if (!memory_read_as_submitted(camera, c, sizeof c)) return; + // (the target's size at 0x120; the projection at 0x70, its w row (0, 0, -1, 0) at 0xa0) + if (c[0x120 / 4] != (float)width || c[0x124 / 4] != (float)height || c[0xa0 / 4] != 0.0f || c[0xa4 / 4] != 0.0f || + c[0xa8 / 4] != -1.0f || c[0xac / 4] != 0.0f) + return; + Camera& k = s.cam; + std::memcpy(k.current, c + 0x30 / 4, sizeof k.current); + std::memcpy(k.projection, c + 0x70 / 4, sizeof k.projection); + // (the offset sead's projection gave the frustum, in its third column: 2 * offset, which moves the picture by -that) + k.jitter[0] = -c[0x78 / 4], k.jitter[1] = -c[0x88 / 4]; + k.width = width, k.height = height, k.depth = depth, k.depth_gen = texture_destroy_generation(), k.frame = now; + k.valid = true; +} + +bool is_scene(const Texture* in) { + State& s = st(); + std::lock_guard lk(s.mu); + return in && s.cam.valid && texture_frame_no() - s.cam.frame <= 1 && in->width == s.cam.width && + in->height == s.cam.height; +} + +bool prepare(VkCommandBuffer cmd, Texture* in, VkImageView in_view, Frame& out) { + State& s = st(); + std::lock_guard lk(s.mu); + free_dead(); + const Camera cam = s.cam; + s.cam.valid = false; // (each frame's own camera) + if (!in || !in_view) return fail("no input view"); + const uint64_t now = texture_frame_no(); + if (!cam.valid || now - cam.frame > 1) return fail("no scene camera this frame"); + if (cam.depth_gen != texture_destroy_generation()) return fail("the scene depth may be gone"); + const uint32_t rw = in->width, rh = in->height; + if (rw != cam.width || rh != cam.height) return fail("the input is not the scene's size"); + if (cam.depth->width != rw || cam.depth->height != rh || !(cam.depth->usage & VK_IMAGE_USAGE_SAMPLED_BIT) || + cam.depth->samples != VK_SAMPLE_COUNT_1_BIT || !(cam.depth->aspect & VK_IMAGE_ASPECT_DEPTH_BIT)) + return fail("unexpected scene depth"); + // (the projection without this frame's jitter: the field of view and the depth range do not move with it) + float projection[16]; + std::memcpy(projection, cam.projection, sizeof projection); + dlss_math::unjitter(projection, cam.jitter); + fsr3_math::Camera camera; + if (!fsr3_math::camera_from_projection(projection, camera)) return fail("the scene's projection is not one FSR takes"); + if (!make_pipeline()) return fail("its pipeline was not made"); + const VkImageView dview = depth_view(cam.depth); + if (!dview) return fail("no view of the scene depth"); + struct Disturbed { // (from here commands are recorded: the program's descriptor pushes are pushed again after) + ~Disturbed() { descriptors_disturbed(); } + } disturbed; + if (!make_image(cmd, s.color, VK_FORMAT_R16G16B16A16_SFLOAT, rw, rh) || !make_image(cmd, s.depth, VK_FORMAT_R32_SFLOAT, rw, rh) || + !make_image(cmd, s.motion, VK_FORMAT_R16G16_SFLOAT, rw, rh)) + return fail("its images were not made"); + + const bool reset = !s.last_frame || now - s.last_frame > 2 || s.frame.width != rw || s.frame.height != rh; + struct { + float reproject[16]; + float jitter[2]; + int32_t size[2]; + int32_t flags; + } pc{}; + static_assert(sizeof pc == 84, "fsr3_prep.comp's push constants"); + // (the motion without the jitter: from this frame's jittered clip space to the frame before's without its jitter. A jitter + // moves clip x by jitter * w: taken off the previous matrix's first two rows) + float previous[16]; + std::memcpy(previous, s.last_vp, sizeof previous); + dlss_math::unjitter(previous, s.last_jitter); + const bool motion = !reset && dlss_math::reprojection(cam.current, previous, pc.reproject); + pc.jitter[0] = cam.jitter[0], pc.jitter[1] = cam.jitter[1]; + pc.size[0] = (int32_t)rw, pc.size[1] = (int32_t)rh; + pc.flags = (motion ? 1 : 0) | (camera.flip_depth ? 2 : 0); + + full_barrier(cmd); // (the scene's colour and depth, written before) + { + const VkDescriptorImageInfo info[5] = {{s.point, in_view, VK_IMAGE_LAYOUT_GENERAL}, + {s.point, dview, VK_IMAGE_LAYOUT_GENERAL}, + {VK_NULL_HANDLE, s.color.view, VK_IMAGE_LAYOUT_GENERAL}, + {VK_NULL_HANDLE, s.depth.view, VK_IMAGE_LAYOUT_GENERAL}, + {VK_NULL_HANDLE, s.motion.view, VK_IMAGE_LAYOUT_GENERAL}}; + VkWriteDescriptorSet w[5]{}; + for (uint32_t i = 0; i < 5; i++) { + w[i] = {VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET}; + w[i].dstBinding = i, w[i].descriptorCount = 1, w[i].pImageInfo = &info[i]; + w[i].descriptorType = i < 2 ? VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER : VK_DESCRIPTOR_TYPE_STORAGE_IMAGE; + } + vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, s.pipe); + vkCmdPushDescriptorSetKHR(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, s.layout, 0, 5, w); + vkCmdPushConstants(cmd, s.layout, VK_SHADER_STAGE_COMPUTE_BIT, 0, sizeof pc, &pc); + vkCmdDispatch(cmd, (rw + 7) / 8, (rh + 7) / 8, 1); + } + full_barrier(cmd); + + const auto t = std::chrono::steady_clock::now(); + Frame f; + f.color = s.color.view, f.depth = s.depth.view, f.motion = s.motion.view; + f.width = rw, f.height = rh; + dlss_math::jitter_to_pixels(cam.jitter, rw, rh, f.jitter); // (in render pixels, x right and y down: FSR's, as DLSS's) + f.camera = camera; + f.reset = reset; + f.frame_ms = s.last_time.time_since_epoch().count() && !reset + ? (float)std::min(250.0, std::chrono::duration(t - s.last_time).count()) + : 16.667f; + f.frame = now; + f.color_image = s.color.image, f.depth_image = s.depth.image, f.motion_image = s.motion.image; + std::memcpy(f.view_projection, cam.current, sizeof f.view_projection); + dlss_math::unjitter(f.view_projection, cam.jitter); + std::memcpy(f.previous_view_projection, previous, sizeof f.previous_view_projection); + std::memcpy(f.projection, projection, sizeof f.projection); + f.have_previous = motion; + s.frame = f, s.have_frame = true; + s.last_time = t; + s.last_frame = now; + std::memcpy(s.last_vp, cam.current, sizeof s.last_vp); + s.last_jitter[0] = cam.jitter[0], s.last_jitter[1] = cam.jitter[1]; + if (s.reason) logf("vk: fsr3 inputs: made again (frame %llu)", (unsigned long long)now); + s.reason = nullptr; + if (!s.told) { + s.told = true; + // (what the projection says, once: the planes and the field of view FSR's depth factors are made of) + logf("vk: fsr3 inputs: %ux%u, from the scene's projection: near %.4f far %.6g fov %.2f deg, depth %s (p22 %.6g p23 " + "%.6g); camera motion from the depth, jitter %+.3f %+.3f px", + rw, rh, camera.near_plane, camera.far_plane, camera.fov_y * 57.2957795, camera.flip_depth ? "0 at the near plane: " + "reversed for FSR" : "reversed already", projection[10], projection[11], f.jitter[0], f.jitter[1]); + } + out = f; + return true; +} + +bool take(Frame& out) { + State& s = st(); + std::lock_guard lk(s.mu); + const bool have = s.have_frame && texture_frame_no() - s.frame.frame <= 1; + s.have_frame = false; + if (have) out = s.frame; + return have; +} + +void upscaled(uint32_t rw, uint32_t rh, uint32_t dw, uint32_t dh) { + State& s = st(); + s.jitter_w = rw, s.jitter_h = rh, s.jitter_phases = (uint32_t)dlss_jitter_phases(rw, rh, dw, dh); + s.upscaled_frame = texture_frame_no(); +} + +uint32_t jitter_size(int axis) { + // (RX_VK_FSR_JITTER=0: none. 0 too once FSR has not drawn for a while: the camera as the game has it) + static const bool off = env_switch("RX_VK_FSR_JITTER") == 0; + State& s = st(); + const uint64_t last = s.upscaled_frame.load(std::memory_order_relaxed); + if (off || !last || texture_frame_no() - last > 30 || (!fsr3_wanted() && !fsr4_wanted())) return 0; + if (axis == 2) return s.jitter_phases.load(std::memory_order_relaxed); + return axis ? s.jitter_h.load(std::memory_order_relaxed) : s.jitter_w.load(std::memory_order_relaxed); +} + +} // namespace mkwvk::fsr3_inputs diff --git a/gpu/vk/vk_fsr3_inputs.h b/gpu/vk/vk_fsr3_inputs.h new file mode 100644 index 000000000..f172738e1 --- /dev/null +++ b/gpu/vk/vk_fsr3_inputs.h @@ -0,0 +1,79 @@ +// (hookshot) AMD FSR 3.1's inputs (vk_fsr3_inputs.cpp): everything FSR 3.1's upscaler (vk_fsr3.h) and its frame +// interpolation (vk_fsr3fi.h) are given besides the picture, in one place, so they can move onto the renderer's shared +// temporal inputs (#1008) by changing this file alone. +// +// What comes from #841 (NVIDIA DLSS's own inputs) and what does not yet: +// - the camera jitter: #841's, the one jitter in the game (nx2/oot_jitter.py, host/rx_backend.c hos_dlss_jitter_clip), +// switched on for FSR by jitter_size() as vk_dlss.cpp's dlss_jitter_size switches it on for DLSS, and read back here from +// the camera's uniform buffer as vk_dlss.cpp reads it; +// - the camera: the same uniform buffer and the same checks as vk_dlss.cpp's dlss_note_scene_draw; the near plane and the +// field of view are read from its projection (fsr3_math.h), so nothing in the game is hooked for them; +// - the motion: the camera's, from the scene depth with dlss_prep.comp's math (shaders/fsr3_prep.comp). #841's actor motion +// (the skinned draws drawn again with last frame's bones) lives inside vk_dlss.cpp behind HOOKSHOT_NGX, so a build without +// NVIDIA's SDK has none of it; FSR gets it when #1008 moves that out from behind the gate. +#pragma once + +#include + +#include "fsr3_math.h" +#include "vk_internal.h" + +namespace mkwvk { + +struct Texture; + +namespace fsr3_inputs { + +/// A frame's inputs, at the render size, in images of this file's own (written by prepare) +struct Frame { + VkImageView color = VK_NULL_HANDLE; ///< RGBA16F: the network's input as it samples it, 0..1 + VkImageView depth = VK_NULL_HANDLE; ///< R32F, reversed (fsr3_math.h Camera::flip_depth) + VkImageView motion = VK_NULL_HANDLE; ///< RG16F, render pixels toward the frame before, x right and y down, no jitter + uint32_t width = 0, height = 0; + float jitter[2]{}; ///< this frame's, in render pixels as FSR takes it (x right, y down) + fsr3_math::Camera camera; + bool reset = false; ///< no history: the first frame, a new size, or a gap of more than two frames + float frame_ms = 16.667f; ///< since the frame before's + uint64_t frame = 0; ///< texture_frame_no() when prepared + // (hookshot fork) For AMD FSR 4 (vk_ffx.h) and NVIDIA DLSS frame generation (vk_dlssg.h), which are handed whole + // images and the camera's matrices: the images of the three views above (R16G16B16A16_SFLOAT, R32_SFLOAT and + // R16G16_SFLOAT), and this frame's and the frame before's view-projection and this frame's projection, row major and + // without their jitter (have_previous: false on a reset, when there is no frame before) + VkImage color_image = VK_NULL_HANDLE, depth_image = VK_NULL_HANDLE, motion_image = VK_NULL_HANDLE; + float view_projection[16]{}, previous_view_projection[16]{}, projection[16]{}; + bool have_previous = false; +}; + +/// FSR 3.1 is asked for at all: its upscaler (the Upscaler row) or its frame interpolation (the Frame generation row). The +/// scene's camera is kept only then. (hookshot fork: or FSR 4's upscaler, or another frame generation method that takes +/// these inputs: vk_framegen.h framegen_scene_inputs_wanted) +bool wanted(); + +/// A draw into a scene-sized target with the vertex stage's uniform buffer 3 at `camera`: what vk_dlss.cpp's +/// dlss_note_scene_draw is given, read the same way (the largest such target of the frame is the scene) +void note_scene_draw(const Texture* color0, uint32_t width, uint32_t height, Texture* depth, uint64_t camera, + uint64_t camera_size); + +/// The texture is this frame's scene colour (the size of the scene's camera this frame): for a network of the gameplay +/// upscale's shape that is not one of the known ones, as vk_dlss.cpp's dlss_upscale tells them apart +bool is_scene(const Texture* in); + +/// At the gameplay upscale's dispatch: its input as the network samples it (in, in_view), this frame's camera and depth into +/// FSR's inputs (shaders/fsr3_prep.comp). False when they cannot be made (no camera this frame, another size, ...): the +/// reason is logged when it changes +bool prepare(VkCommandBuffer cmd, Texture* in, VkImageView in_view, Frame& out); + +/// The frame prepare made last, for frame interpolation at the present, once: false when none was made since the last take +/// (or it is older than the frame before), so a present never interpolates with another frame's depth and motion +bool take(Frame& out); + +/// FSR 3.1's upscaler (or FSR 4's) drew this frame, rw x rh into dw x dh: the host's jitter follows FSR (jitter_size) +void upscaled(uint32_t rw, uint32_t rh, uint32_t dw, uint32_t dh); + +/// The scene's width (axis 0) or height (1) for the host's camera jitter while FSR 3.1's upscaler (or FSR 4's) draws, 0 otherwise or +/// with RX_VK_FSR_JITTER=0; axis 2: the jitter sequence's length (dlss_jitter_phases). vk_replay.cpp's rx_option gives +/// the host this or vk_dlss.cpp's dlss_jitter_size, whichever upscaler draws +uint32_t jitter_size(int axis); + +} // namespace fsr3_inputs +} // namespace mkwvk diff --git a/gpu/vk/vk_fsr3fi.cpp b/gpu/vk/vk_fsr3fi.cpp index e707c3813..f8069fd0b 100644 --- a/gpu/vk/vk_fsr3fi.cpp +++ b/gpu/vk/vk_fsr3fi.cpp @@ -16,9 +16,12 @@ #include #include +#include + #include "vk_fsr3fi.h" -#include "vk_menu.h" // (the Insert menu's "Made frames by" row) +#include "vk_menu.h" // (the Frame generation row) #include "vk_gprof.h" // (RX_VK_PASS_TIMING: a span per pass, so the report names them) +#include "vk_texture.h" #include "shaders/fsr3_fi_disocclusion_mask_comp_spv.h" #include "shaders/fsr3_fi_game_motion_vector_field_comp_spv.h" @@ -37,6 +40,7 @@ #include "shaders/fsr3_of_luminance_pyramid_comp_spv.h" #include "shaders/fsr3_of_prepare_luma_comp_spv.h" #include "shaders/fsr3_of_scale_optical_flow_v5_comp_spv.h" +#include "vk_work.h" // (after the others: counts the commands that do GPU work, for full_barrier) namespace mkwvk::fsr3fi { namespace { @@ -226,7 +230,7 @@ static_assert(sizeof(OfSpdConstants) == 32, "cbOF_SPD must match the SDK's layou // ---- state ---- -constexpr uint32_t kMaxMade = 3; ///< as dlssg: up to three frames between two of the game's +constexpr uint32_t kMaxMade = 1; ///< one midpoint frame between two of the game's (vk_fsr3fi.h) constexpr uint32_t kOfLevels = 7; ///< advancedAlgorithmIterations in ffx_opticalflow.cpp constexpr uint32_t kOfBlockSize = 8; ///< opticalFlowBlockSize, likewise constexpr uint32_t kPyramidMips = 13; ///< the mip UAVs the two inpainting pyramid passes declare @@ -306,6 +310,7 @@ struct State { uint32_t parity = 0; int32_t of_frame_index = 0; bool first_frame = true; + uint64_t sequence = 0; ///< Inputs::sequence of the frame kept as the previous source bool in_general = false; ///< the UNDEFINED -> GENERAL barriers have been recorded }; @@ -314,26 +319,15 @@ State g; constexpr VkImageSubresourceRange ALL_LEVELS{VK_IMAGE_ASPECT_COLOR_BIT, 0, VK_REMAINING_MIP_LEVELS, 0, 1}; -/// `RX_VK_FSR_FG=<1-3>` asks for this backend and says how many frames to make between two of the -/// game's. Off is the default and costs nothing: nothing below runs and nothing is logged. +/// The Frame generation row at 2x asks for this backend's one made frame; RX_VK_FSR_FG=0 never, =1 over the row. The row +/// is read every time: a player turning frame generation on mid-game gets it on the next frame, not the next launch. uint32_t asked() { - // (hookshot) RX_VK_FSR_FG cannot change while the process runs, so it is read once; the Insert - // menu's row can change at any moment, so it is read every time. That difference is the whole - // of what makes the setting take effect while playing instead of at the next launch. static const int env = []() { const char* e = getenv("RX_VK_FSR_FG"); return e && *e ? std::max(0, atoi(e)) : -1; }(); - if (env >= 0) return (uint32_t)std::min(env, (int)kMaxMade); - { - // Otherwise the Insert menu: "Made frames by" picks FSR, and "Frame generation" says how - // many frames there are to make -- one fewer than the multiplier, since the last of each - // set is the game's own frame. The same shape dlssg uses, so the two rows mean one thing. - // The native "Frame generation" row is the whole setting: a player says how many frames - // to make, not which library makes them. Both backends are asked, and vk_framegen.cpp - // tries DLSS first, this second, and keeps its own blend for what neither takes. - return (uint32_t)std::clamp(opts.framegen - 1, 0, (int)kMaxMade); - } + if (env >= 0) return env ? 1u : 0u; + return opts.framegen == 2 ? 1u : 0u; } /// A memory dependency over the whole queue, in the synchronization2 form this renderer loads. @@ -347,14 +341,35 @@ void memory_barrier(VkCommandBuffer cmd, VkPipelineStageFlags2 src_stage, VkAcce vkCmdPipelineBarrier2(cmd, &di); } -void drop_image(Image& t) { +// (images of an earlier size, freed once the presents that may still read them are done: texture_frame_no) +std::vector> dead; + +void destroy_now(Image& t) { for (VkImageView v : t.levels) vkDestroyImageView(dev.device, v, nullptr); - t.levels.clear(); if (t.view) vkDestroyImageView(dev.device, t.view, nullptr); if (t.image) mkwvk::destroy_image(t.image, t.memory); t = Image{}; } +/// An image let go: destroyed a few presents on, as work recorded with it may still be in flight +void drop_image(Image& t) { + if (t.image) dead.push_back({texture_frame_no(), std::move(t)}); + t = Image{}; +} + +void free_dead() { + const uint64_t now = texture_frame_no(); + for (size_t i = 0; i < dead.size();) { + if (now - dead[i].first > 4) { + destroy_now(dead[i].second); + dead[i] = std::move(dead.back()); + dead.pop_back(); + } else { + i++; + } + } +} + /// One of the SDK's internal images: storage and sampled, GENERAL throughout, with a view per level /// when it has more than one (both pyramids bind their levels separately while the passes that read /// a pyramid read it as one mipped texture). @@ -441,13 +456,6 @@ bool make_pipeline(Pipeline& p, const PassInfo& info) { return true; } -void drop_pipeline(Pipeline& p) { - if (p.pipeline) vkDestroyPipeline(dev.device, p.pipeline, nullptr); - if (p.layout) vkDestroyPipelineLayout(dev.device, p.layout, nullptr); - if (p.set) vkDestroyDescriptorSetLayout(dev.device, p.set, nullptr); - p = Pipeline{}; -} - /// The one sampler the interpolation passes declare: linear, clamped to the edge. It is the only /// filtered read in the whole chain (the colour sources and the disocclusion mask are sampled in UV /// space); every other load is a texelFetch and needs no sampler at all. @@ -609,22 +617,8 @@ void spd_setup(uint32_t width, uint32_t height, uint32_t* groups, uint32_t* offs *mips = (uint32_t)std::min(std::floor(std::log2(resolution)), 12.0f); } -/// setupDeviceDepthToViewSpaceDepthParams for reversed infinite depth, which is the depth this -/// renderer's scene is drawn with and the permutation the vendored passes were compiled under -/// (FFX_FRAMEINTERPOLATION_OPTION_INVERTED_DEPTH=1). vk_fsr3.cpp computes the same four factors for -/// the upscaler; they are kept apart because the two constant blocks are not the same block. -void device_to_view_depth(float* out, float near_plane, float fov_y, int32_t render_width, - int32_t render_height) { - const float aspect = (float)render_width / (float)std::max(1, render_height); - const float cot_half_fov = std::cos(0.5f * fov_y) / std::sin(0.5f * fov_y); - out[0] = -1.0f * FLT_EPSILON; - out[1] = near_plane; - out[2] = 1.0f / (cot_half_fov / aspect); - out[3] = 1.0f / cot_half_fov; -} - /// Every image this backend owns, in one list, so the one-time layout transition, the reset clears -/// and shutdown all walk the same set and none of them can forget one. +/// and a failed make all walk the same set and none of them can forget one. std::vector all_images() { std::vector all{&g.of_luma[0], &g.of_luma[1], @@ -664,34 +658,27 @@ void clear_images(VkCommandBuffer cmd, std::initializer_list image /// What this device can do, which cannot change while it runs: asked once and kept. bool capable() { + if (!dev.device) return false; // (asked before the device is made, by the menu: not an answer to keep) static const bool yes = []() { if (!dev.push_descriptor || !vkCmdPushDescriptorSetKHR) { logf("vk: fsr3fi: no push descriptors"); return false; } if (!formats_supported() || !features_supported()) return false; - logf("vk: fsr3fi: FSR frame interpolation is available on this device"); - logf("vk: fsr3fi: FSR 3.1's interpolation has no phase input, so a set's frames are the " - "same midpoint frame; only the pacing differs"); + logf("vk: fsr3fi: AMD FSR 3.1 frame interpolation can run on this GPU"); return true; }(); return yes; } -bool supported() { - // Deliberately not cached: `asked()` follows the menu, so a player turning frame generation on - // mid-game gets it on the next frame rather than the next launch. The device half above is the - // part that is worth asking once. - return asked() != 0 && capable(); -} - uint32_t frames_wanted() { - return supported() ? asked() : 0; + // (the row first: a device is not asked anything, and nothing is logged, while frame generation is not at 2x) + return asked() && capable() ? 1u : 0u; } bool prepare(uint32_t width, uint32_t height, uint32_t render_width, uint32_t render_height, VkFormat present_format) { - if (!supported() || g.failed) return false; + if (!capable() || g.failed) return false; if (!width || !height || !render_width || !render_height) return false; if (present_format == VK_FORMAT_UNDEFINED) return false; // The frame this backend writes is in the format it is presented in, because it is shown as a @@ -719,7 +706,7 @@ bool prepare(uint32_t width, uint32_t height, uint32_t render_width, uint32_t re if (g.ok) logf("vk: fsr3fi: %d pass pipelines ready", (int)P_COUNT); } if (!g.ok) return false; - const uint32_t n = asked(); + const uint32_t n = kMaxMade; if (g.ready == n && g.width == width && g.height == height && g.render_width == render_width && g.render_height == render_height && g.present_format == present_format) @@ -802,16 +789,16 @@ bool prepare(uint32_t width, uint32_t height, uint32_t render_width, uint32_t re } bool generate(VkCommandBuffer cmd, const Inputs& in) { - if (!supported()) return false; + free_dead(); + if (!frames_wanted()) return false; if (!in.color || !in.color_image || !in.depth || !in.motion) return false; if (in.color_format == VK_FORMAT_UNDEFINED) return false; if (!in.width || !in.height || !in.render_width || !in.render_height) return false; - if (!in.frame_index || in.frame_index > asked()) return false; - if (!(in.near_plane > 0.0f) || !(in.fov_y > 0.0f)) return false; // (Inputs defaults them) + if (!(in.camera.device_to_view_depth[1] > 0.0f)) return false; // (no camera: vk_fsr3_inputs.cpp) if (!prepare(in.width, in.height, in.render_width, in.render_height, in.color_format)) return false; - Image& out = g.made[in.frame_index - 1]; + Image& out = g.made[0]; if (!out.image) return false; // Everything this backend owns starts UNDEFINED and lives in GENERAL from here on, as the rest @@ -848,30 +835,9 @@ bool generate(VkCommandBuffer cmd, const Inputs& in) { VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_SHADER_WRITE_BIT); } - // FSR 3.1 interpolates the midpoint of the interval and nothing else: there is no phase anywhere - // in cbFI and ffx_frameinterpolation.h fixes t at 0.5. A set of more than one made frame is - // therefore that one frame shown more than once, and recording the chain again per index would - // cost seventeen dispatches to produce the same picture. The later indices copy instead, and - // RX_VK_FSR_FG=1 is the setting that is worth anything. - if (in.frame_index > 1) { - const Image& midpoint = g.made[0]; - if (!midpoint.image) return false; - memory_barrier(cmd, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_WRITE_BIT, - VK_PIPELINE_STAGE_2_TRANSFER_BIT, - VK_ACCESS_2_TRANSFER_READ_BIT | VK_ACCESS_2_TRANSFER_WRITE_BIT); - const VkImageCopy copy{{VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, {0, 0, 0}, - {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, {0, 0, 0}, - {g.width, g.height, 1}}; - vkCmdCopyImage(cmd, midpoint.image, VK_IMAGE_LAYOUT_GENERAL, out.image, - VK_IMAGE_LAYOUT_GENERAL, 1, ©); - memory_barrier(cmd, VK_PIPELINE_STAGE_2_TRANSFER_BIT, VK_ACCESS_2_TRANSFER_WRITE_BIT, - VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, - VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_TRANSFER_READ_BIT); - return true; - } - - const bool reset = in.reset || g.first_frame; + const bool reset = in.reset || g.first_frame || in.sequence != g.sequence + 1; g.first_frame = false; + g.sequence = in.sequence; // (this frame becomes the next one's previous source below, whatever else happens) const int32_t rw = (int32_t)g.render_width, rh = (int32_t)g.render_height; const int32_t uw = (int32_t)g.width, uh = (int32_t)g.height; @@ -881,12 +847,12 @@ bool generate(VkCommandBuffer cmd, const Inputs& in) { k.render_size[0] = rw, k.render_size[1] = rh; k.display_size[0] = uw, k.display_size[1] = uh; k.display_size_rcp[0] = 1.0f / (float)uw, k.display_size_rcp[1] = 1.0f / (float)uh; - k.camera_near = in.near_plane; - k.camera_far = in.far_plane; + k.camera_near = in.camera.near_plane; // (not read by the passes: set as the SDK sets them) + k.camera_far = in.camera.far_plane; k.upscaler_target_size[0] = uw, k.upscaler_target_size[1] = uh; k.mode = 0; k.reset = reset ? 1 : 0; - device_to_view_depth(k.device_to_view_depth, in.near_plane, in.fov_y, rw, rh); + memcpy(k.device_to_view_depth, in.camera.device_to_view_depth, sizeof k.device_to_view_depth); k.delta_time = in.frame_time_ms; k.hudless_attached_factor = 0; // (one colour, with whatever the game drew on it) k.distortion_field_size[0] = 1, k.distortion_field_size[1] = 1; @@ -906,12 +872,9 @@ bool generate(VkCommandBuffer cmd, const Inputs& in) { // luminance pair the other two functions would need is left at the SDR range. k.back_buffer_transfer_function = 0; k.min_max_luminance[0] = 0.0f, k.min_max_luminance[1] = 1.0f; - { // fTanHalfFOV is the *horizontal* half angle's tangent, as ffxFrameInterpolationDispatch - // builds it from the vertical field of view and the render aspect. - const float aspect = (float)rw / (float)std::max(1, rh); - const float horizontal = 2.0f * std::atan(std::tan(in.fov_y * 0.5f) * aspect); - k.tan_half_fov = std::tan(horizontal * 0.5f); - } + // fTanHalfFOV is the *horizontal* half angle's tangent, as ffxFrameInterpolationDispatch builds it from the vertical + // field of view and the render aspect: 1 / p[0][0] of the scene's projection (fsr3_math.h) + k.tan_half_fov = in.camera.tan_half_fov_x; k.jitter[0] = in.jitter[0], k.jitter[1] = in.jitter[1]; k.motion_vector_scale[0] = in.motion_scale[0] / (float)rw; k.motion_vector_scale[1] = in.motion_scale[1] / (float)rh; @@ -1199,28 +1162,8 @@ bool generate(VkCommandBuffer cmd, const Inputs& in) { return !reset; } -VkImage made_image(uint32_t index) { - if (!index || index > g.ready) return VK_NULL_HANDLE; - return g.made[index - 1].image; -} - -VkImageView made_view(uint32_t index) { - if (!index || index > g.ready) return VK_NULL_HANDLE; - return g.made[index - 1].view; -} +VkImage made_image() { return g.ready ? g.made[0].image : VK_NULL_HANDLE; } -void reset() { - g.first_frame = true; -} - -void shutdown() { - for (Image* t : all_images()) drop_image(*t); - for (Image& t : g.made) drop_image(t); - for (Pipeline& p : g.passes) drop_pipeline(p); - if (g.linear) vkDestroySampler(dev.device, g.linear, nullptr); - if (g.uniforms) destroy_buffer(g.uniforms, g.uniforms_memory); - if (g.counters) destroy_buffer(g.counters, g.counters_memory); - g = State{}; -} +void reset() { g.first_frame = true; } } // namespace mkwvk::fsr3fi diff --git a/gpu/vk/vk_fsr3fi.h b/gpu/vk/vk_fsr3fi.h index 307206691..cbc8c74c7 100644 --- a/gpu/vk/vk_fsr3fi.h +++ b/gpu/vk/vk_fsr3fi.h @@ -1,41 +1,35 @@ -// (hookshot) AMD FSR 3 frame interpolation, and the optical flow it runs on, recorded as our own -// Vulkan compute passes: the second source of the frames the renderer shows between the game's. +// (hookshot) AMD FSR 3.1 frame interpolation, and the optical flow it runs on, recorded as our own Vulkan compute passes: +// the made frame between two of the game's when the Frame generation row is 2x. // -// The renderer already shows made frames. vk_framegen.cpp interpolates between the last two -// presented frames from colour alone, which is all it has at present time, and vk_dlssg.cpp answers -// the same question with the scene's motion and depth through NVIDIA's network. This backend answers -// it with AMD's: seventeen compute passes -- seven of optical flow over two frames' luma, ten of -// interpolation over the game's motion and depth -- all of them our own dispatches over AMD's -// vendored GLSL, with no FidelityFX host library linked and nothing of AMD's loaded at run time. +// The renderer already makes frames: vk_framegen.cpp interpolates between the last two presented frames from colour alone. +// This answers the same question with AMD's passes, which use the scene's depth and motion as well (vk_fsr3_inputs.h): +// seventeen compute passes -- seven of optical flow over two frames' luma, ten of interpolation over the game's motion and +// depth -- all of them our own dispatches over AMD's vendored GLSL, with no FidelityFX host library linked and nothing of +// AMD's loaded at run time. // -// It slots in where dlssg does, and where it refuses -- not asked for, a device without the storage -// formats or the image features the passes need, inputs the seam could not assemble -- the -// hand-written colour interpolation runs exactly as before. Nothing here changes what the game -// submits. +// Where it cannot run -- not asked for, a device without the storage formats, image features or subgroup operations the +// passes need, a frame without its inputs, a reset -- the renderer's own interpolation runs exactly as before. Nothing here +// changes what the game submits. // -// One caveat worth knowing before reading `frames_wanted()`: FSR 3.1's interpolation has no -// interpolation-phase input at all (ffx_frameinterpolation.h fixes t at 0.5), so a set of made -// frames is one midpoint frame repeated. A count above one buys pacing, not new pictures. +// FSR 3.1's interpolation has no phase input (ffx_frameinterpolation.h fixes t at 0.5): it makes the midpoint and only the +// midpoint, so it is used for one made frame a frame (2x). At 3x and above the renderer's own makes the frames, as more +// copies of one midpoint would show the same picture twice and judder. #pragma once #include +#include "fsr3_math.h" #include "vk_internal.h" namespace mkwvk::fsr3fi { /// One made frame's inputs. /// -/// The colour is the frame the game has just finished, at the size it is presented, and it is the -/// only colour this backend is given: the frame before it is kept here, because the interpolation -/// needs both ends of the interval and the present path only ever hands over the newest one. The -/// depth and the motion are the scene's at the render size, with `motion_scale` taking a vector to -/// render pixels, as the SDK's FFX_FRAMEINTERPOLATION_OPTION_LOW_RESOLUTION_MOTION_VECTORS -/// permutation the vendored GLSL was compiled under expects. -/// -/// The camera's planes and vertical field of view build the device-to-view-depth factors the -/// disocclusion passes compare depths with; they only scale thresholds, so the defaults are usable -/// and the real camera is better. +/// The colour is the frame the game has just finished, at the size it is presented, and it is the only colour this backend +/// is given: the frame before it is kept here, because the interpolation needs both ends of the interval and the present +/// path only ever hands over the newest one. The depth (reversed) and the motion are the scene's at the render size +/// (vk_fsr3_inputs.h), with `motion_scale` taking a vector to render pixels, as the SDK's +/// FFX_FRAMEINTERPOLATION_OPTION_LOW_RESOLUTION_MOTION_VECTORS permutation the vendored GLSL was compiled under expects. struct Inputs { VkImageView color = VK_NULL_HANDLE; VkImage color_image = VK_NULL_HANDLE; @@ -46,54 +40,43 @@ struct Inputs { VkImageView motion = VK_NULL_HANDLE; uint32_t render_width = 0, render_height = 0; - /// Turns a motion vector into render pixels (the render size, for vectors in UV). + /// Turns a motion vector into render pixels (1 for vectors already in them). float motion_scale[2]{1.0f, 1.0f}; float jitter[2]{}; - float near_plane = 0.1f; - float far_plane = 1000.0f; - float fov_y = 60.0f * 3.14159265358979f / 180.0f; + /// The scene's camera: the device-to-view-depth factors the disocclusion passes compare depths with, and the tangent + /// of half the field of view (fsr3_math.h, from the scene's projection). + fsr3_math::Camera camera; float frame_time_ms = 16.667f; - /// A cut, a load or a resize: the preparation passes are skipped for this frame, as the SDK's - /// own dispatch skips them, because every history they read belongs to a scene that is gone. + /// A cut, a load or a resize: the preparation passes are skipped for this frame, as the SDK's own dispatch skips them, + /// because every history they read belongs to a scene that is gone. bool reset = false; - /// How many frames to make between this one and the last, and which of them this call is - /// (1-based, as dlssg takes them). - uint32_t frames_made = 1; - uint32_t frame_index = 1; + /// The caller's count of its frames (vk_framegen.cpp: one a present). The frame before this one is kept here as the + /// interval's start; when the last frame given was not the one before this (a present this backend did not see), that + /// start is not this frame's predecessor and the call is a reset. + uint64_t sequence = 0; }; -/// Whether this backend can run at all: asked for (`RX_VK_FSR_FG=<1-3>`), push descriptors, every -/// storage format the SDK's internal images need, and the three image features and the subgroup -/// operations the vendored passes compiled down to. Asked once; the one line saying why it is false -/// is logged once, and nothing is logged at all when it was not asked for. -[[nodiscard]] bool supported(); +/// Whether this device can run the passes: push descriptors, every storage format the SDK's internal images need, and the +/// image features and subgroup operations the vendored passes compiled down to. Asked once; the one line saying why it +/// cannot is logged once. +[[nodiscard]] bool capable(); -/// How many frames the run asks to be made between two of the game's: `RX_VK_FSR_FG=<1-3>`, zero -/// when this backend was not asked for. See the caveat at the top of this file: FSR 3.1 interpolates -/// the midpoint and only the midpoint, so a count above one repeats that frame. +/// Whether a made frame is asked for: the Frame generation row at 2x (RX_VK_FSR_FG=0 never, =1 over the row), on a device +/// that is capable(). Read every frame: the row changes while the game runs. [[nodiscard]] uint32_t frames_wanted(); -/// Makes the pipelines, the internal images and the made frames' images for these sizes, re-making -/// them when the sizes or the presented format change. False when anything could not be made, which -/// leaves this backend unavailable rather than half-built. -[[nodiscard]] bool prepare(uint32_t width, uint32_t height, uint32_t render_width, - uint32_t render_height, VkFormat present_format); - -/// Records one made frame. False when the inputs are not usable, which leaves the caller to show -/// whatever it would otherwise have shown. +/// Records the made frame between the frame before and this one into made_image(), making the pipelines and the images for +/// these sizes first (again when the sizes or the presented format change). False when it cannot (the inputs not usable, a +/// reset frame, anything not made), which leaves the caller to show whatever it would otherwise have shown. [[nodiscard]] bool generate(VkCommandBuffer cmd, const Inputs& in); -/// The made frame of the last `generate`, by index (1-based, as `Inputs::frame_index`), or null. -[[nodiscard]] VkImage made_image(uint32_t index); -[[nodiscard]] VkImageView made_view(uint32_t index); +/// The made frame of the last `generate`, or null. +[[nodiscard]] VkImage made_image(); /// Forgets the sequence, so the next frame is made with the reset flag set: a cut, a load, a resize. void reset(); -/// Frees everything this backend made. Safe to call when nothing was made. -void shutdown(); - } // namespace mkwvk::fsr3fi diff --git a/gpu/vk/vk_menu.cpp b/gpu/vk/vk_menu.cpp index 623598a78..1d0ecf378 100644 --- a/gpu/vk/vk_menu.cpp +++ b/gpu/vk/vk_menu.cpp @@ -199,7 +199,8 @@ const char* hn_upscaler(int v, int variant) { "themselves can trail for now.", "NVIDIA's, the 3D at full size with its edges smoothed; the slowest. Softer than the game's own: set Sharpness to " "around 80%. Things that move by themselves can trail for now.", - "AMD's, from a smaller 3D, on any GPU: built from AMD's own shaders. Things that move by themselves can trail.", + "AMD's, from a smaller 3D, on any GPU: built from AMD's own shaders. Things that move by themselves can trail for " + "now.", "AMD's machine-learning upscaler, from a smaller 3D: Windows, with AMD's runtime beside the game. On an RX 9000 it " "is FSR 4; elsewhere AMD's runtime picks what that GPU runs.", }; @@ -481,8 +482,17 @@ MENU_HINTS(hn_preset, 0, "Each row as you set it. Changing most rows yourself co "Resolution 100% (with DLSS its nearest mode), Lanczos, Sharpness 30%, 2x frames.", "Resolution 100% (with DLSS its nearest mode), Lanczos, Sharpness 40%, 3x frames.") MENU_HINTS(hn_gpu, 0, "The best dedicated GPU.") +unsigned framegen_available(); /// Frame generation: how many frames are made for each of the game's const char* hn_framegen(int v, int variant) { + // (2x: by AMD FSR 3.1 where it runs, from the scene's depth and motion: vk_framegen.cpp. Variant 1 is that text. + // hookshot fork: where FSR 3.1 is the method that makes the frame, framegen_methods.h first) + namespace fgm = framegen_methods; + if (v == 2 && (variant < 0 ? fsr3fi::frames_wanted() != 0 && + fgm::first(fgm::effective(opts.framegen_method, framegen_available()), + framegen_available(), 2) == fgm::FSR3 + : variant == 1)) + return "One made frame between each two of the game's, by AMD FSR 3.1 from the scene's depth and motion."; if (variant > 0) return nullptr; if (v <= 0) return "Only the game's own frames: no added delay."; if (v == 1) return "A frame for each of the display's refreshes: none made when the game keeps up. Frame pacing does not apply."; @@ -498,7 +508,7 @@ unsigned framegen_available() { unsigned m = fgm::always(); if (dlssg::supported()) m |= fgm::bit(fgm::DLSS); if (ffx::frames_supported()) m |= fgm::bit(fgm::FSR4); - if (fsr3fi::supported()) m |= fgm::bit(fgm::FSR3); + if (fsr3fi::capable()) m |= fgm::bit(fgm::FSR3); return m; } const char* tx_framegen_method(int v) { @@ -534,7 +544,7 @@ const char* hn_filter(int v, int variant) { /// Sharpness: with DLSS or DLAA, the amount that suits them const char* hn_sharpness(int v, int variant) { static const char* const dlss = "DLSS and DLAA look softer than the game's own upscaler: around 80% suits them."; - const bool with_dlss = variant < 0 ? upscaler() != ur::GAME : variant == 1; + const bool with_dlss = variant < 0 ? upscaler() == ur::DLSS || upscaler() == ur::DLAA : variant == 1; if (variant > 1) return nullptr; return with_dlss ? dlss : v == 0 ? "Off: the picture as it is." : nullptr; } diff --git a/gpu/vk/vk_replay.cpp b/gpu/vk/vk_replay.cpp index 306a3b670..a177b5204 100644 --- a/gpu/vk/vk_replay.cpp +++ b/gpu/vk/vk_replay.cpp @@ -27,6 +27,7 @@ #include #include "vk_dlss.h" +#include "vk_fsr3_inputs.h" // (the camera jitter while AMD FSR 3.1 upscales) #include "status_line.h" #include "vk_reflex.h" #include "vk_draw.h" @@ -3740,6 +3741,15 @@ bool replay_start() { return true; } +/// (hookshot) The host's camera jitter (nx2/oot_jitter.py, host/rx_backend.c): the scene's size while a temporal upscaler +/// draws, NVIDIA DLSS (vk_dlss.cpp) or AMD FSR 3.1 (vk_fsr3_inputs.cpp), whichever it is (one at a time: the Upscaler row); +/// 0, no jitter, otherwise +int jitter_option(int id) { + const int axis = id - HOS_OPT_DLSS_JITTER_W; + const uint32_t d = dlss_jitter_size(axis); + return (int)(d ? d : fsr3_inputs::jitter_size(axis)); +} + void fill_replay_table(MkwVkRenderer& t) { t.stats = stats; t.nvn_submit = submit; @@ -3761,8 +3771,7 @@ void fill_replay_table(MkwVkRenderer& t) { if (id == HOS_OPT_CHEAT_CAMERA) return menu_free_camera(); return id == 0 ? opts.realtime : id == 1 ? menu_is_open() : id == 2 ? resolution_auto() && !dlss_full_scale() : id == 3 ? (dlss_full_scale() ? 10000 : resolution_scale()) : id == 4 ? opts.pad_background : id == 5 ? opts.text_speed : id == 6 ? opts.mouse_native : id == 7 ? opts.mouse_sens : id == 8 ? opts.mouse_invert : id == 9 ? opts.rumble : id == 16 ? opts.invert_cam_x : id == 17 ? opts.invert_cam_y : id == HOS_OPT_GYRO ? opts.gyro : id == HOS_OPT_GYRO_SENS_X ? opts.gyro_sens_x : id == HOS_OPT_GYRO_SENS_Y ? opts.gyro_sens_y : id == HOS_OPT_GYRO_INV_X ? opts.gyro_inv_x : id == HOS_OPT_GYRO_INV_Y ? opts.gyro_inv_y : - id == HOS_OPT_DLSS_JITTER_W || id == HOS_OPT_DLSS_JITTER_H ? (int)dlss_jitter_size(id - HOS_OPT_DLSS_JITTER_W) : - id == HOS_OPT_DLSS_JITTER_PHASES ? (int)dlss_jitter_size(2) : 0; + id == HOS_OPT_DLSS_JITTER_W || id == HOS_OPT_DLSS_JITTER_H || id == HOS_OPT_DLSS_JITTER_PHASES ? jitter_option(id) : 0; }; t.option_set = menu_option_set; t.nvn_register_sampler = register_sampler_queued; diff --git a/host/hos_oot_camera.c b/host/hos_oot_camera.c deleted file mode 100644 index 5b1756dab..000000000 --- a/host/hos_oot_camera.c +++ /dev/null @@ -1,86 +0,0 @@ -/* (hookshot) Ocarina's camera, published by the lifted code so the renderer can read it. - * - * sead's perspective projection carries the near and far planes and the field of view, and - * nx2/oot_camera.py injects a block into its matrix update (main+0x3485cc0, f_834a5cc0) that writes - * them here. The renderer wants them for a temporal upscaler: FSR builds device_to_view_depth and - * tan_half_fov from the near plane and the field of view, and camera-derived motion needs the same - * projection. docs/upscaling.md has the field layout and how each offset was identified. - * - * Everything stays 0 until the game updates a projection, and hos_oot_camera_valid stays 0 with it, - * so a reader that checks it gets the renderer's own defaults on another game version where the - * patch site is left out. */ -#include -#include -#include -#include - -#include "hos.h" - -volatile float hos_oot_cam_near = 0.0f; -volatile float hos_oot_cam_far = 0.0f; -volatile float hos_oot_cam_tan_half_fov = 0.0f; -volatile int hos_oot_camera_valid = 0; -/* The guest addresses of sead's projection object and of the 4x4 it writes. Published so the view - projection can be identified from real data: this matrix is the projection alone, and a temporal - upscaler reprojects with view * projection. */ -volatile uint64_t hos_oot_proj_object = 0; -volatile uint64_t hos_oot_proj_matrix = 0; -/* The first 48 floats of the projection object, copied at publish time. The inlined copies build it - on the stack, so a pointer kept for later reads as zeros; a snapshot is the only honest way to - see what is in it. */ -volatile float hos_oot_cam_window[48]; -volatile int hos_oot_cam_window_have = 0; - -/* HOS_CAMERA_DUMP=1: once, a window of floats around each published object, so the view matrix can - be found by reading what is there rather than by guessing an offset. Guest addresses only; no - game data leaves the machine. */ -void hos_oot_camera_dump(void) { - static int done; - const char *on = getenv("HOS_CAMERA_DUMP"); - if (done || !on || !*on || *on == '0' || !hos_oot_camera_valid) return; - done = 1; - for (int row = 0; hos_oot_cam_window_have && row < 6; row++) { - char line[220]; - int n = snprintf(line, sizeof line, "camera: window +%#03x:", row * 32); - for (int i = 0; i < 8; i++) - n += snprintf(line + n, sizeof line - n, " %.5g", (double)hos_oot_cam_window[row * 8 + i]); - hos_log("%s", line); - } - for (int which = 0; which < 2; which++) { - const uint64_t base = which ? hos_oot_proj_matrix : hos_oot_proj_object; - if (!base) continue; - for (int row = 0; row < 8; row++) { - char line[200]; - int n = snprintf(line, sizeof line, "camera: %s +%#03x:", which ? "matrix" : "object", row * 32); - for (int i = 0; i < 8; i++) { - float v; - memcpy(&v, (const char *)GP(base + (uint64_t)row * 32 + (uint64_t)i * 4), 4); - n += snprintf(line + n, sizeof line - n, " %.4g", (double)v); - } - hos_log("%s", line); - } - } -} - -/* The view projection the scene's depth was rendered with, row major, or 0 when nothing has - published one. sead's projection update gives the projection alone; the view is not identified - yet (HOS_CAMERA_DUMP=1 is for finding it), so this answers 0 and camera motion stays off rather - than reprojecting through a matrix that is not the one the depth came from. */ -volatile int hos_oot_view_projection_valid = 0; -volatile float hos_oot_view_projection_rows[16]; - -int hos_oot_view_projection(float *row_major_4x4) { - if (!hos_oot_view_projection_valid || !row_major_4x4) return 0; - for (int i = 0; i < 16; i++) row_major_4x4[i] = hos_oot_view_projection_rows[i]; - return 1; -} - -/* The renderer's side: the field of view in radians, or 0 when nothing has been published. - tan_half_fov is what the game stores (1 / it becomes the projection's m11), so the angle is - twice its arc tangent. */ -float hos_oot_camera(float *near_plane, float *far_plane) { - if (!hos_oot_camera_valid) return 0.0f; - if (near_plane) *near_plane = hos_oot_cam_near; - if (far_plane) *far_plane = hos_oot_cam_far; - return hos_oot_cam_tan_half_fov; -} diff --git a/host/nn_vi.c b/host/nn_vi.c index 8fe938346..be3ec22a3 100644 --- a/host/nn_vi.c +++ b/host/nn_vi.c @@ -251,8 +251,6 @@ static float text_scale(const char *env, int menu) { volatile uint64_t hos_res_module = 0; /* (f_831f3200's object, whose +0xe5c is the 3D's scale: nx2/oot_patches.py) */ static void realtime_step(int64_t now) { int rx_option(int id, int otherwise); - void hos_oot_camera_dump(void); /* (host/hos_oot_camera.c: once, with HOS_CAMERA_DUMP=1) */ - hos_oot_camera_dump(); /* (Resolution 100% from the start: the fixed path skipped the dynamic block from the first frame, its fields stayed unset and the 3D came out black. The dynamic path runs a few frames first, as when the menu turns it on in game) */ hos_fixed_resolution = !rx_option(2, 1) && hos_dynres_runs >= 30; diff --git a/nx2/lift.py b/nx2/lift.py index 0147c7e1b..9cea3597f 100644 --- a/nx2/lift.py +++ b/nx2/lift.py @@ -161,11 +161,8 @@ def main(): if a.standalone: # (hookshot) widescreen and ultrawide: C after a few of the game's instructions import oot_wide oot_wide.install(L, img) - import oot_camera # (after oot_wide: it appends to the same site) - oot_camera.install(L, img) - import oot_jitter # (NVIDIA DLSS's camera jitter in a build with it, none unless DLSS runs: host/rx_backend.c) - if oot_jitter.wanted(): - oot_jitter.install(L, img) + import oot_jitter # (the temporal upscalers' camera jitter, DLSS's and FSR 3.1's: none unless one runs, host/rx_backend.c) + oot_jitter.install(L, img) import oot_occlusion # (no occlusion queries when HOOKSHOT_OCCLUSION_OFF=1: Fritchii's Occlusion Off) oot_occlusion.install(L, img) L.discover(max_insns=a.max_func) diff --git a/nx2/make_game.py b/nx2/make_game.py index 994ae5b7b..e6a32f7a9 100644 --- a/nx2/make_game.py +++ b/nx2/make_game.py @@ -945,17 +945,6 @@ def place_prebuilt_runtime(game_dir): return placed -def prebuilt_has_dlss(): - """(hookshot) The renderer this build installs instead of compiling one (HOOKSHOT_VK_PREBUILT: the AppImage's, or a Windows - release's tools/prebuilt) has NVIDIA DLSS in it. Its NGX start line is a string only a renderer built with the SDK has - (gpu/vk/vk_dlss.cpp ngx_init), so the bytes say it without loading the library""" - vk = os.environ.get("HOOKSHOT_VK_PREBUILT", "") - if not vk or not os.path.isfile(vk): - return False - with open(vk, "rb") as f: - return b"NVIDIA DLSS: NGX started" in f.read() - - def place_ngx_runtime(out): """(NVIDIA DLSS) a game built with NVIDIA's SDK (HOOKSHOT_NGX_SDK, as nx2/build.py takes it) gets DLSS's runtime in its ngx folder, where gpu/vk/vk_dlss.cpp looks first: nvngx_dlss.dll on Windows, libnvidia-ngx-dlss.so. on Linux. Never @@ -1102,10 +1091,6 @@ def main(a=None): if os.path.exists(os.path.join(work, "hookshot_pieces.prof")) and profile_readable(os.path.join(work, "hookshot_pieces.prof")): env["RX_PGO"] = os.path.join(work, "hookshot_pieces.prof") - # (NVIDIA DLSS's camera jitter: only in a build with it, nx2/oot_jitter.py. A prebuilt renderer with DLSS in it counts: the - # release's Windows one and the AppImage's are built with NVIDIA's SDK, which the player's PC does not have) - if ngx_built() or prebuilt_has_dlss(): - env["OOT_DLSS_JITTER"] = "1" say("stage", "lift", "Translating the game to PC code") # (the same game, tools and settings as the lift before: its C is what this lift would write, and nothing recompiles from it. A # rebuild after a change to host/ alone skips the minutes of the lift) diff --git a/nx2/oot_camera.py b/nx2/oot_camera.py deleted file mode 100644 index 4387ffeb6..000000000 --- a/nx2/oot_camera.py +++ /dev/null @@ -1,80 +0,0 @@ -"""Ocarina's camera, published from sead's perspective projection so the renderer can read it. - -The projection's matrix update (main+0x3485cc0, the whole function f_834a5cc0) has the object in x0 -and has just loaded tan(fovy/2) and the aspect ratio from it. This appends a block there that also -reads the near and far planes and writes all three to host globals (host/hos_oot_camera.c), which a -temporal upscaler needs: FSR builds device_to_view_depth and tan_half_fov from the near plane and -the field of view, and camera-derived motion needs the same projection. - -The field layout, and how each offset was identified from what the function does with it, is in -docs/upscaling.md. The site is shared with nx2/oot_wide.py's camera-ratio patch, so this appends to -whatever is already there rather than replacing it; lift.py installs the ratio first. - -Which of +0x98 and +0x9C is the near plane depends on the byte at +0x0A, which the function uses to -swap them before taking their difference. Rather than decide what that flag means, this takes the -smaller of the two as the near plane and the larger as the far, and publishes nothing unless both -are positive and ordered. A projection with a near plane behind the eye is not one to hand an -upscaler. - -It also snapshots the first 48 floats of the projection object at publish time, which -HOS_CAMERA_DUMP=1 logs. A snapshot rather than a pointer because the object the inlined copies build -is transient: reading the published address a frame later came back all zeros, so it is a stack -temporary. The view projection a temporal upscaler reprojects with is not the projection alone, and -this window is how the rest of it gets identified from real values instead of a guess. -""" - -MAIN = 0x80020000 - -# The same four sites nx2/oot_wide.py patches for the camera ratio: sead's perspective projection -# matrix update and its three inlined copies. The projection object is in a different register in -# each, which is the second argument of oot_wide's _ratio() at the same offsets. Patching only the -# out-of-line copy published nothing in a real run, because the path that runs is inlined. -SITES = ( - # (offset, the original word, the register holding the projection, whether x1 is known to hold - # the 4x4 it writes: verified only in the out-of-line copy, and the dump dereferences it) - (0x3485cc0, 0x2d558400, 0, True), - (0x4f1e8, 0x2d558ea0, 21, False), - (0x23b9a8, 0x2d558c00, 0, False), - (0x33b82c, 0x2d558440, 2, False), -) - -def _publish(base, with_matrix): - matrix = ("hos_oot_proj_matrix = c->x[1]; " if with_matrix else "") - return ( - "{ extern volatile float hos_oot_cam_near, hos_oot_cam_far, hos_oot_cam_tan_half_fov; " - "extern volatile int hos_oot_camera_valid; const uint64_t _cp = c->x[0]; " - "uint32_t _c0 = (uint32_t)recomp_load32(c, _cp + 0x98), _c1 = (uint32_t)recomp_load32(c, _cp + 0x9c), " - "_ct = (uint32_t)recomp_load32(c, _cp + 0xac); float _f0, _f1, _ft; " - "memcpy(&_f0, &_c0, 4); memcpy(&_f1, &_c1, 4); memcpy(&_ft, &_ct, 4); " - "{ const float _nr = _f0 < _f1 ? _f0 : _f1, _fr = _f0 < _f1 ? _f1 : _f0; " - "if (_nr > 0.0f && _fr > _nr && _ft > 0.0f) { hos_oot_cam_near = _nr; hos_oot_cam_far = _fr; " - "hos_oot_cam_tan_half_fov = _ft; hos_oot_camera_valid = 1; } } " - "{ extern volatile uint64_t hos_oot_proj_object, hos_oot_proj_matrix; (void)hos_oot_proj_matrix; " - "hos_oot_proj_object = _cp; " + matrix + "} " - "{ extern volatile float hos_oot_cam_window[48]; extern volatile int hos_oot_cam_window_have; " - "if (!hos_oot_cam_window_have) { for (int _i = 0; _i < 48; _i++) { " - "uint32_t _w = (uint32_t)recomp_load32(c, _cp + (uint64_t)_i * 4); float _fv; memcpy(&_fv, &_w, 4); " - "hos_oot_cam_window[_i] = _fv; } hos_oot_cam_window_have = 1; } } }" - " /* (nx2/oot_camera.py: the camera a temporal upscaler needs) */" - ).replace("const uint64_t _cp = c->x[0];", "const uint64_t _cp = c->x[%d];" % base) - - -def install(lifter, img): - """Appends the publish to every projection update site. A site whose word differs is left out; - 0 sites leaves the renderer on its own defaults.""" - n = 0 - for off, word, base, with_matrix in SITES: - pc = MAIN + off - try: - have = img.word(pc) - except Exception: - have = None - if have != word: - print("camera: main+%#x holds %s, not %08x: left out" - % (off, "?" if have is None else "%08x" % have, word)) - continue - lifter.after[pc] = lifter.after.get(pc, "") + "\n" + _publish(base, with_matrix) - n += 1 - print("camera: %d of %d projection sites publish the near plane, far plane and field of view" - % (n, len(SITES))) - return n diff --git a/nx2/oot_jitter.py b/nx2/oot_jitter.py index cace22c9b..a9ce3d271 100644 --- a/nx2/oot_jitter.py +++ b/nx2/oot_jitter.py @@ -1,6 +1,7 @@ -"""NVIDIA DLSS's camera jitter for Ocarina of Time 1.1.1: C added after a few instructions of the game (a64_lift.py Lifter.after). +"""The temporal upscalers' camera jitter for Ocarina of Time 1.1.1: C added after a few instructions of the game (a64_lift.py +Lifter.after). One jitter for both: NVIDIA DLSS (gpu/vk/vk_dlss.cpp) and AMD FSR 3.1 (gpu/vk/vk_fsr3_inputs.cpp). -DLSS (gpu/vk/vk_dlss.cpp) resolves detail finer than a pixel from frames whose camera moved by a different fraction of a +A temporal upscaler resolves detail finer than a pixel from frames whose camera moved by a different fraction of a pixel each time. The game's cameras do not move so: these sites give the scene's projection a sub-pixel offset each frame, in the GPU's copy only. The game fills each view's uniform buffers in one function (main+0x6bc520): for each view it loads the view's projection matrix (the view at x28, its projection's rows at +0x1a8) and writes it, the view-projection made from @@ -15,17 +16,15 @@ the game set it. host/rx_backend.c hos_dlss_jitter_clip picks the jitter and checks the projection is one of the picture's: perspective, of -16:9 or the window's ratio (nx2/oot_wide.py). It is none (the game as shipped) unless DLSS runs, and the renderer reads the -offset back from the camera's uniform buffer. Which view is the scene's, the renderer learns from its draws, too late for +16:9 or the window's ratio (nx2/oot_wide.py). It is none (the game as shipped) unless DLSS or FSR 3.1 runs (the renderer's +rx_option HOS_OPT_DLSS_JITTER_W and _H are 0 otherwise), and the renderer reads the offset back from the camera's uniform +buffer. Which view is the scene's, the renderer learns from its draws, too late for this: the other views of the picture's ratio (a reflection, a portrait) are drawn without DLSS and move by under a pixel of the scene's size, too little to see. -Installed only in a build with NVIDIA's DLSS SDK (make_game.py sets OOT_DLSS_JITTER=1 for the lift then): other builds have -none of this code. +Installed in every standalone lift (nx2/lift.py): FSR 3.1 needs no SDK, so a build without NVIDIA's has the jitter too. """ -import os - import oot_wide # (main offset, the original instruction word there, and the registers whose third lane gets the jitter's x and y: None @@ -44,15 +43,10 @@ def _text(xreg, yreg): add = "".join("{ float _o; memcpy(&_o, (uint8_t *)c->vreg[%d] + 8, 4); _o += _j[%d]; memcpy((uint8_t *)c->vreg[%d] + 8, &_o, 4); } " % (r, axis, r) for axis, r in ((0, xreg), (1, yreg)) if r is not None) return ("{ extern int hos_dlss_jitter_clip(uint64_t projection, float out[2]); float _j[2]; " - "if (hos_dlss_jitter_clip(c->x[%d] + %#x, _j)) { %s} } /* (nx2/oot_jitter.py: DLSS camera jitter) */" + "if (hos_dlss_jitter_clip(c->x[%d] + %#x, _j)) { %s} } /* (nx2/oot_jitter.py: the upscalers' camera jitter) */" % (VIEW, PROJECTION, add)) -def wanted(): - """A build with NVIDIA DLSS (make_game.py: HOOKSHOT_NGX_SDK with its library): OOT_DLSS_JITTER=1, in the lift's key""" - return os.environ.get("OOT_DLSS_JITTER") == "1" - - def install(lifter, img): """The sites into lifter.after, after what is there; a site whose word differs (another game version) is left out""" n = 0 diff --git a/readme.md b/readme.md index 4d4621873..1ea4c8489 100644 --- a/readme.md +++ b/readme.md @@ -217,8 +217,14 @@ card runs: FSR 4's machine-learning upscaler on an RX 9000 (and the cards AMD ad carries on others. The log's `vk: amd fsr 4:` lines say which one you got. To try another copy of AMD's DLLs, put them in a folder and name it with `RX_VK_FFX_DIR`; `RX_VK_FFX=0` keeps them from being loaded at all. +**Both FSRs are given the same inputs** as upstream's FSR 3.1 (below): the scene's colour as the game's network samples it, +its depth (turned round for AMD, which wants it reversed), motion from the camera, the projection the scene is drawn with +(near 0.1, far 1000.5, a 45 degree field of view) and the camera jitter DLSS uses. DLSS frame generation and FSR 4's take +the same depth, motion and camera. + **Frame generation** -- with **Frame generation method** on Auto -- takes the first of these that runs on your PC: NVIDIA DLSS frame generation (`nvngx_dlssg.dll` in -the `ngx` folder, RTX 40 and 50), AMD FSR 4's (Windows), AMD FSR 3.1's (any GPU), then the renderer's own blend. Or pick one in **Frame generation method**: the row offers only the methods that run here, +the `ngx` folder, RTX 40 and 50), AMD FSR 4's (Windows), AMD FSR 3.1's (any GPU, at 2x only: it makes the frame halfway +between two of the game's and no other, so at 3x and above it is passed over), then the renderer's own blend. Or pick one in **Frame generation method**: the row offers only the methods that run here, and a frame the chosen method cannot make falls back to the built-in blend. The log's `vk: frame generation method:` line says which is in effect (`RX_VK_FG_METHOD=0..4` picks one for a run). @@ -358,10 +364,12 @@ choices and starts the game again, so progress since your last save is lost. `hookshot_log.txt` lists every card as `vk: device `; `RX_VK_DEVICE=` chooses one for a single run and wins over the menu. - **Frame generation** makes extra frames between the game's own. It adds a little input delay, and fast motion can - show artifacts. **Frame pacing** shows frames at an even interval: less stutter, up to one frame of delay. + show artifacts. At 2x, AMD FSR 3.1's frame interpolation can make the frame (**Frame generation method**, above); at + 3x and more FSR 3.1 is passed over. **Frame pacing** shows frames at an even interval: less stutter, up to one frame of delay. - **The scaling rows**, in the picture's order: **Output resolution** is the size of the game's whole frame, HUD - included. The **Upscaler** fills it from the 3D: the game's own network, or NVIDIA DLSS or DLAA (the 3D at full size, - edges smoothed). Both look softer than the game's own: set **Sharpness** to around 80% with them. **DLSS model** + included. The **Upscaler** fills it from the 3D: the game's own network, NVIDIA DLSS or DLAA (the 3D at full size, + edges smoothed), or AMD FSR 3.1 or FSR 4 (below). DLSS and DLAA look softer than the game's own: set **Sharpness** to around + 80% with them. **DLSS model** chooses their network (below). **Render resolution** is the 3D's share of the output. The **Window scaling filter** then scales the frame to your window, and **Sharpness** sharpens it, by the picture's pixels: when the window is much larger than the picture (the Handheld @@ -567,6 +575,20 @@ cd ~/Games/Hookshot `hookshot_env.txt` and the other test switches are documented below. +
+AMD FSR 3.1 (every build) + +**AMD FSR 3.1** in the Graphics tab's **Upscaler** row (`dlss=3` in `hookshot_options.ini`; `RX_VK_FSR=1` for one run, +`RX_VK_FSR=0` never) upscales in place of the game's own network, and with **Frame generation** at 2x its frame +interpolation makes the frame in between (`RX_VK_FSR_FG=0` leaves that to the renderer's own). Both are AMD's FidelityFX +SDK 1.1.4 shaders (`third_party/fidelityfx-sdk`, MIT), compiled into the renderer: no AMD runtime or DLL is needed, and +the row offers FSR 3.1 on any Vulkan 1.3 GPU with push descriptors, extended storage image formats and storage writes +without a format (`vk: fsr3: ... can run on this GPU` in the log). Its inputs are the scene's colour, its depth, motion +from the camera, and the same camera jitter DLSS uses (`RX_VK_FSR_JITTER=0` turns it off); things that move by +themselves can trail for now. (This fork: `dlss=4` is AMD FSR 4, from the same inputs, on Windows.) + +
+
NVIDIA DLSS (optional, NVIDIA's SDK under NVIDIA's license) diff --git a/tests/run_all.py b/tests/run_all.py index 865557b51..96be501c2 100644 --- a/tests/run_all.py +++ b/tests/run_all.py @@ -46,8 +46,6 @@ "tests/test_audio_in.py": ["--cc", "gcc", "--cxx", "g++"], "tests/test_upscale_fallback.py": ["--cxx", "g++"], "tests/test_framegen_methods.py": ["--cxx", "g++"], - "tests/test_upscale_contract.py": ["--cxx", "g++", "--headers", "{vulkan_headers}"], - "tests/test_upscale_seam.py": ["--cxx", "g++"], "tests/test_fsr3_shaders.py": ["--glslang", "{glslang}", "--spirv-val", "{spirv_val}"], "tests/test_fg_scale_sharpen.py": ["--cxx", "g++"], "tests/test_taau_env_lookup.py": ["--cxx", "g++"], diff --git a/tests/test_framegen_methods.py b/tests/test_framegen_methods.py index 0da0bbeda..e9327a021 100644 --- a/tests/test_framegen_methods.py +++ b/tests/test_framegen_methods.py @@ -26,11 +26,14 @@ def main(): ('"Frame generation method", &opts.framegen_method', menu, "the row"), ("framegen_methods::step(", menu, "set_row stepping through framegen_methods.h"), ("fgm::effective(", menu, "the row showing the method in effect"), - ("fgm::effective(chosen, avail)", fg, "vk_framegen.cpp choosing through framegen_methods.h"), - ("fgm::tries(method, fgm::DLSS)", fg, "DLSS frame generation behind the choice"), - ("fgm::tries(method, fgm::FSR4)", fg, "FSR 4 frame generation behind the choice"), - ("fgm::tries(method, fgm::FSR3)", fg, "FSR 3.1 frame generation behind the choice"), - ("fgm::makes_set(fgm::FSR3, m)", fg, "FSR 3.1 frame generation for the sets it can make (2x)")): + ("fgm::effective(chosen, available)", fg, "vk_framegen.cpp choosing through framegen_methods.h"), + ("fgm::tries(method, which)", fg, "each vendor method behind the choice"), + ("fgm::makes_set(which, m)", fg, "each vendor method only for the sets it can make (FSR 3.1: 2x)"), + ("tried(fgm::DLSS)", fg, "DLSS frame generation in the chain"), + ("tried(fgm::FSR4)", fg, "FSR 4 frame generation in the chain"), + ("tried(fgm::FSR3)", fg, "FSR 3.1 frame generation in the chain"), + ("fgm::first(", fg, "the scene's inputs made when a vendor method may take them"), + ("fgm::first(", menu, "the Frame generation row's hint naming the method that makes the frames")): if needle not in where: raise SystemExit("missing: %s (%s)" % (what, needle)) # (the choice is read each frame, so the menu's change reaches the next frame: not cached in a static) diff --git a/tests/test_fsr3_math.cpp b/tests/test_fsr3_math.cpp new file mode 100644 index 000000000..24fe4d5fd --- /dev/null +++ b/tests/test_fsr3_math.cpp @@ -0,0 +1,88 @@ +// gpu/vk/fsr3_math.h: AMD FSR 3.1's camera from the scene's projection (tests/test_fsr3_math.py) +#include "../gpu/vk/fsr3_math.h" +#include "../gpu/vk/dlss_math.h" + +#include +#include + +#define CHECK(name, condition) do { if (!(condition)) { std::fprintf(stderr, "FAIL %s at line %d\n", name, __LINE__); return 1; } } while (0) + +namespace fm = mkwvk::fsr3_math; + +static bool near(double a, double b, double tol) { return std::fabs(a - b) <= tol * std::max(1.0, std::fabs(b)); } + +// a perspective projection, row major (clip = p * view position, view z negative in front), clip depth -1..1 (NVN's) +static void perspective(float p[16], double fovy, double aspect, double n, double f, bool reversed) { + for (int i = 0; i < 16; i++) p[i] = 0.0f; + const double c = 1.0 / std::tan(fovy / 2); + p[0] = (float)(c / aspect), p[5] = (float)c, p[14] = -1.0f; + // ndc z = -p22 + p23 / v (v = -z > 0): -1 at the near plane and 1 at the far one, or the other way round (reversed) + const double zn = reversed ? 1.0 : -1.0, zf = -zn; + // -p22 + p23 / n = zn, -p22 + p23 / f = zf (f infinite: -p22 = zf) + double p23, p22; + if (std::isinf(f)) p22 = -zf, p23 = (zn + p22) * n; + else p23 = (zn - zf) / (1.0 / n - 1.0 / f), p22 = p23 / n - zn; + p[10] = (float)p22, p[11] = (float)p23; +} + +// the depth the renderer stores for a view distance: (ndc z + 1) / 2, as fsr3_prep.comp and dlss_prep.comp read it +static double stored(const float p[16], double v) { return ((-(double)p[10] + (double)p[11] / v) + 1.0) * 0.5; } + +int main() { + const double fov = 2.0 * std::atan(0.41421356), aspect = 16.0 / 9.0; + for (int reversed = 0; reversed < 2; reversed++) + for (double far_plane : {20000.0, (double)INFINITY}) { + float p[16]; + perspective(p, fov, aspect, 1.0, far_plane, reversed != 0); + fm::Camera c; + CHECK("a perspective projection is a camera", fm::camera_from_projection(p, c)); + CHECK("the depth FSR is given is reversed: flipped where the game's is not", c.flip_depth == !reversed); + CHECK("the near plane", near(c.near_plane, 1.0, 1e-3)); + CHECK("the far plane", std::isinf(far_plane) ? c.far_plane > 1e30f : near(c.far_plane, far_plane, 1e-2)); + CHECK("the field of view", near(c.fov_y, fov, 1e-5) && near(c.tan_half_fov_x, 0.41421356 * aspect, 1e-5)); + CHECK("the SDK's x and y factors", near(c.device_to_view_depth[2], 0.41421356 * aspect, 1e-5) && + near(c.device_to_view_depth[3], 0.41421356, 1e-5)); + // FSR's own view distance (GetViewSpaceDepth) for the depth it is given gives the distance back + for (double v : {1.0, 3.0, 50.0, 1000.0, 15000.0}) { + if (v >= far_plane) continue; + double d = stored(p, v); + if (c.flip_depth) d = 1.0 - d; + CHECK("FSR's view distance is the camera's", near(fm::view_distance(c, (float)d), v, 2e-2)); + } + CHECK("the far end stays finite and positive (GetMaxDistanceInMeters)", + fm::view_distance(c, 0.0f) > 0.0f && std::isfinite(fm::view_distance(c, 0.0f))); + CHECK("1 is the near plane", near(fm::view_distance(c, 1.0f), 1.0, 1e-3)); + } + { // the jitter on the projection (nx2/oot_jitter.py) moves neither the planes nor the field of view, once taken off + float p[16], q[16]; + perspective(p, fov, aspect, 1.0, INFINITY, false); + for (int i = 0; i < 16; i++) q[i] = p[i]; + q[2] += 0.0004f, q[6] -= 0.0007f; // (P[0][2], P[1][2] as the host adds them) + const float clip[2] = {-q[2], -q[6]}; // (the jitter as vk_fsr3_inputs.cpp reads it back: -P[0][2], -P[1][2]) + mkwvk::dlss_math::unjitter(q, clip); + fm::Camera a, b; + CHECK("jittered projection", fm::camera_from_projection(p, a) && fm::camera_from_projection(q, b)); + CHECK("same camera without its jitter", near(a.near_plane, b.near_plane, 1e-6) && near(a.fov_y, b.fov_y, 1e-6) && + std::fabs(q[2]) < 1e-9f && std::fabs(q[6]) < 1e-9f); + float px[2]; + mkwvk::dlss_math::jitter_to_pixels(clip, 1536, 864, px); + CHECK("its jitter in FSR's render pixels: x right, y down", near(px[0], -0.0004 * 768, 1e-4) && near(px[1], -0.0007 * 432, 1e-4)); + } + { // what is not a scene's projection + float p[16]; + perspective(p, fov, aspect, 1.0, 20000.0, false); + fm::Camera c; + float o[16]; + for (int i = 0; i < 16; i++) o[i] = p[i]; + o[14] = 0.0f, o[15] = 1.0f; // (orthographic: a shadow map's, the HUD's) + CHECK("not orthographic", !fm::camera_from_projection(o, c)); + for (int i = 0; i < 16; i++) o[i] = p[i]; + o[11] = 0.0f; // (no depth range) + CHECK("not without a depth range", !fm::camera_from_projection(o, c)); + for (int i = 0; i < 16; i++) o[i] = p[i]; + o[5] = NAN; + CHECK("not a NaN field of view", !fm::camera_from_projection(o, c)); + } + std::printf("fsr3 math: all checks passed\n"); + return 0; +} diff --git a/tests/test_fsr3_math.py b/tests/test_fsr3_math.py new file mode 100644 index 000000000..e1b8aaf8a --- /dev/null +++ b/tests/test_fsr3_math.py @@ -0,0 +1,48 @@ +"""AMD FSR 3.1's inputs without a game or GPU: its camera read from the scene's projection (gpu/vk/fsr3_math.h, checked by +behaviour in tests/test_fsr3_math.cpp), and shaders/fsr3_prep_comp_spv.h made from shaders/fsr3_prep.comp as it is now (when +glslangValidator is here), with the push constants vk_fsr3_inputs.cpp pushes. + +python -I -B tests/test_fsr3_math.py [--cxx g++] +""" +import argparse +import re +import shutil +import subprocess +import tempfile +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +SHADERS = ROOT / "gpu" / "vk" / "shaders" + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--cxx", default="g++") + args = parser.parse_args() + # (fsr3_prep.comp keeps dlss_prep.comp's push constants, which vk_fsr3_inputs.cpp pushes as 84 bytes) + block = lambda text: re.sub(r"\s+", " ", re.sub(r"//[^\n]*", "", text[text.index("uniform P {"):text.index("} pc;")])) + if block((SHADERS / "fsr3_prep.comp").read_text(encoding="utf-8")) != block((SHADERS / "dlss_prep.comp").read_text(encoding="utf-8")): + raise SystemExit("fsr3_prep.comp's push constants are not dlss_prep.comp's") + inputs = (ROOT / "gpu" / "vk" / "vk_fsr3_inputs.cpp").read_text(encoding="utf-8") + if "static_assert(sizeof pc == 84" not in inputs or "{VK_SHADER_STAGE_COMPUTE_BIT, 0, 84}" not in inputs: + raise SystemExit("vk_fsr3_inputs.cpp does not push fsr3_prep.comp's 84 bytes") + glslang = shutil.which("glslangValidator") + with tempfile.TemporaryDirectory(prefix="fsr3-math-") as tmp: + if glslang: + out = Path(tmp) / "fsr3_prep_comp_spv.h" + subprocess.run([glslang, "-V", "--target-env", "vulkan1.3", "--vn", "FSR3_PREP_COMP_SPV", "-o", str(out), + str(SHADERS / "fsr3_prep.comp")], check=True, capture_output=True) + words = lambda t: re.findall(r"0x[0-9a-f]{8}", t) + if words(out.read_text()) != words((SHADERS / out.name).read_text()): + raise SystemExit("shaders/fsr3_prep_comp_spv.h is not made from fsr3_prep.comp as it is now (glslangValidator -V " + "--target-env vulkan1.3 --vn FSR3_PREP_COMP_SPV -o fsr3_prep_comp_spv.h fsr3_prep.comp)") + else: + print("glslangValidator not found: the SPIR-V header not checked") + exe = Path(tmp) / "fsr3-math" + subprocess.run([args.cxx, "-std=c++20", "-Wall", "-Wextra", "-Werror", str(ROOT / "tests" / "test_fsr3_math.cpp"), + "-o", str(exe)], check=True) + subprocess.run([str(exe)], check=True) + + +if __name__ == "__main__": + main() diff --git a/tests/test_make_game_ngx.py b/tests/test_make_game_ngx.py index 035a2564b..9cc67160f 100644 --- a/tests/test_make_game_ngx.py +++ b/tests/test_make_game_ngx.py @@ -58,23 +58,13 @@ def built(self, platform, sdk=None): with mock.patch.object(make_game, "LINUX", platform == "linux"), mock.patch.dict(os.environ, env): return make_game.ngx_built() - def test_jitter_only_in_a_build_with_the_sdk(self): - # (make_game sets OOT_DLSS_JITTER=1 for the lift only then: nx2/oot_jitter.py) + def test_built_with_this_platforms_library(self): + # (the camera jitter is no longer tied to this: nx2/oot_jitter.py is in every standalone lift, for FSR 3.1 as well) self.assertFalse(self.built("linux", sdk="")) self.assertFalse(self.built("linux")) # (no library yet) self.sdk_files("linux", runtime=False) self.assertTrue(self.built("linux")) self.assertFalse(self.built("windows")) # (another platform's library only) - import sys - sys.path.insert(0, str(ROOT / "nx2")) - try: - import oot_jitter - finally: - sys.path.pop(0) - with mock.patch.dict(os.environ, {"OOT_DLSS_JITTER": "1"}): - self.assertTrue(oot_jitter.wanted()) - with mock.patch.dict(os.environ, {}, clear=True): - self.assertFalse(oot_jitter.wanted()) def test_linux_runtime(self): self.sdk_files("linux") diff --git a/tests/test_taau_env_lookup.py b/tests/test_taau_env_lookup.py index b5a9f47b1..d0431e6f4 100644 --- a/tests/test_taau_env_lookup.py +++ b/tests/test_taau_env_lookup.py @@ -24,14 +24,10 @@ def fixture(source): PREFIX = r''' #define _CRT_SECURE_NO_WARNINGS -#include -#include #include #include #include -#include #include -#include #include static const char *configured_keys, *no_f16; static int key_reads; @@ -51,84 +47,13 @@ def fixture(source): struct Stage { Info info; }; struct NvnState {}; struct Program { uint64_t key; std::vector stages; }; -struct Texture { int format=VK_FORMAT_B10G11R11_UFLOAT_PACK32; uint32_t width=1, height=1; int image=0; }; +struct Texture { int format=VK_FORMAT_B10G11R11_UFLOAT_PACK32; }; static Texture texture; static struct { bool push_descriptor=false; } dev; -// Upstream's fixture sets this to true/false; this fork's seam also compares it with nullptr, so -// the spy answers both without pretending to be a real function pointer. -struct PushDescriptorSpy { - bool on = true; - PushDescriptorSpy& operator=(bool v) { on = v; return *this; } - explicit operator bool() const { return on; } - friend bool operator!=(const PushDescriptorSpy& p, std::nullptr_t) { return p.on; } - friend bool operator==(const PushDescriptorSpy& p, std::nullptr_t) { return !p.on; } -}; -static PushDescriptorSpy vkCmdPushDescriptorSetKHR; +static bool vkCmdPushDescriptorSetKHR=true; struct ImageInfo { VkImageView imageView; }; -struct SrcInfo { int image = 0; int format = 0; uint32_t width = 0, height = 0; }; -static struct DrawWork { std::vector imgs; std::vector srcs; } draw_work; -static DrawWork& dw() { return draw_work; } - -// (hookshot) This fork's taau_stand_in is the backend seam, not upstream's four-line gate: it -// resolves the dispatch into an upscale::Request, asks which backend takes it, and runs that one. -// The seam's own headers are plain data and Vulkan-free, so they are included rather than faked -- -// a hand-written Verdict or Request would be a second definition to keep in step, and the test -// would pass while the real contract moved. Each backend reports itself unavailable here, so the -// stand-in path runs, which is the path this test is about. -#include "upscale_contract.h" -#include "upscale_seam.h" -using namespace mkwvk; -constexpr int VK_NULL_HANDLE = 0; -using VkImage = int; -constexpr int VK_IMAGE_ASPECT_COLOR_BIT = 1, VK_FILTER_NEAREST = 0, VK_FORMAT_UNDEFINED = 0; -constexpr int VK_IMAGE_LAYOUT_GENERAL = 1; -struct VkImageSubLayers { uint32_t aspectMask, mipLevel, baseArrayLayer, layerCount; }; -struct VkOffset3D { int32_t x, y, z; }; -struct VkImageBlit { VkImageSubLayers srcSubresource; VkOffset3D srcOffsets[2]; - VkImageSubLayers dstSubresource; VkOffset3D dstOffsets[2]; }; -static void vkCmdBlitImage(VkCommandBuffer, VkImage, int, VkImage, int, uint32_t, const VkImageBlit*, int) {} -static struct { int image = 0, view = 0, format = 0; uint32_t width = 0, height = 0; } scene_depth; -static struct { float m[16]; bool have = false; } scene_vp; -static void logf(const char*, ...) {} -static int scene_upscaler() { return 0; } -static bool upscale_trace_key(uint64_t) { return false; } -static void upscale_bindings(const NvnState&, const Stage&, std::vector&) {} -static bool scene_history_stale(uint32_t, uint32_t) { return false; } -static void scene_jitter_display_width(uint32_t) {} -static bool scene_jitter(float* x, float* y) { if (x) *x = 0.0f; if (y) *y = 0.0f; return false; } -// In the renderer these two are weak symbols the host may or may not define, and the seam tests the -// address before calling; a plain function here would make that test always true. -static float (*hos_oot_camera)(float*, float*) = nullptr; -static int (*hos_oot_view_projection)(float*) = nullptr; -struct FakeMatrix { float m[16]; }; -namespace mkwvk { -namespace camera_motion { -using Matrix = FakeMatrix; -static VkImageView record(VkCommandBuffer, VkImageView, int, uint32_t, uint32_t, const Matrix&) { return 0; } -static VkImage motion_image() { return 0; } -static int motion_format() { return 0; } -} -namespace fsr3 { -struct Inputs { VkImageView color=0, depth=0, motion=0; uint32_t render_width=0, render_height=0, - upscale_width=0, upscale_height=0; float motion_scale[2]{}, jitter[2]{}; - float near_plane=0.0f, fov_y=0.0f; bool reset=false; }; -static bool supported() { return false; } -static bool upscale(VkCommandBuffer, const Inputs&) { return false; } -static VkImage output_image() { return 0; } -static int fsr_stage() { return 0; } -static void note_frame() {} -} -namespace ffx { -struct UpscaleInputs { VkImage color=0, depth=0, motion=0; int color_format=0, depth_format=0, motion_format=0; - uint32_t render_width=0, render_height=0, upscale_width=0, upscale_height=0; - float jitter[2]{}, motion_scale[2]{}; float near_plane=0.0f, fov_y=0.0f; bool reset=false; }; -static bool upscale_supported() { return false; } -static const char* upscale_provider() { return ""; } -static bool upscale(VkCommandBuffer, const UpscaleInputs&) { return false; } -static VkImage output_image() { return 0; } -} -// (NVIDIA DLSS takes the dispatch before this function does, in dlss_stand_in: nothing of it here) -} // (vk_draw.cpp's dw is a TLS_OBJECT: the calling thread's, by a call) +static struct DrawWork { std::vector imgs; } draw_work; +static DrawWork& dw() { return draw_work; } // (vk_draw.cpp's dw is a TLS_OBJECT: the calling thread's, by a call) static unsigned handle_value=5; static bool resolve_image=true, upscale_result=true; static int upscale_calls, view_calls, handle_calls; @@ -225,13 +150,10 @@ def main(): source, exe = folder / 'fixture.cpp', folder / 'fixture.exe' source.write_text(cpp, encoding='utf-8') if Path(args.cxx).name.lower() in ('cl', 'cl.exe', 'clang-cl', 'clang-cl.exe'): - command = [args.cxx, '/nologo', '/std:c++17', '/EHsc', '/W4', '/WX', - '/I' + str(ROOT / 'gpu' / 'vk'), str(source), + command = [args.cxx, '/nologo', '/std:c++17', '/EHsc', '/W4', '/WX', str(source), '/Fo' + str(folder / 'fixture.obj'), '/Fe' + str(exe), *args.cxx_arg] else: - # (this fork's taau_stand_in includes the seam's own headers, which live in gpu/vk) - command = [args.cxx, '-std=c++17', '-Wall', '-Wextra', '-Werror', - '-I' + str(ROOT / 'gpu' / 'vk'), *args.cxx_arg, str(source), '-o', str(exe)] + command = [args.cxx, '-std=c++17', '-Wall', '-Wextra', '-Werror', *args.cxx_arg, str(source), '-o', str(exe)] subprocess.run(command, cwd=folder, check=True) failed = False for case in ('software', 'hardware', 'no-f16', 'empty', 'disabled', 'custom', 'prefixes'): diff --git a/tests/test_upscale_contract.py b/tests/test_upscale_contract.py deleted file mode 100644 index 4d4e32217..000000000 --- a/tests/test_upscale_contract.py +++ /dev/null @@ -1,32 +0,0 @@ -"""The upscaler input contract: which of a game network's sampled bindings are colour, motion and depth, which Vulkan -formats mean which, and the sets it has to refuse instead of guessing. An upscaler fed a wrong guess ghosts, and the -ghosting is reported as a renderer bug. Compiles tests/upscale_contract_test.cpp against gpu/vk/upscale_contract.h and -gpu/vk/upscale_format.h; needs the Vulkan headers, no game, GPU or SDK. - -python -I -B tests/test_upscale_contract.py [--cxx clang++] [--headers ] -""" -import argparse -import subprocess -import tempfile -from pathlib import Path - -ROOT = Path(__file__).resolve().parents[1] - - -def main(): - p = argparse.ArgumentParser(description=__doc__) - p.add_argument("--cxx", default="clang++") - p.add_argument("--headers", help="a Vulkan headers include folder; the compiler's own path by default") - a = p.parse_args() - with tempfile.TemporaryDirectory(prefix="upscale-contract-") as tmp: - exe = Path(tmp) / "upscale_contract_test" - cmd = [a.cxx, "-std=c++20", "-O1", "-Wall", "-Wextra", "-Werror", "-I" + str(ROOT / "gpu/vk")] - if a.headers: - cmd.append("-I" + a.headers) - cmd += [str(ROOT / "tests/upscale_contract_test.cpp"), "-o", str(exe)] - subprocess.run(cmd, check=True) - subprocess.run([str(exe)], check=True) - - -if __name__ == "__main__": - main() diff --git a/tests/test_upscale_seam.py b/tests/test_upscale_seam.py deleted file mode 100644 index e67f955c1..000000000 --- a/tests/test_upscale_seam.py +++ /dev/null @@ -1,29 +0,0 @@ -"""The upscaler seam: which backend takes the game's own upscale dispatch, and every reason a temporal backend is -refused it. The stand-in is a spatial resolve and has to keep running where the contract is not met, which is the -property that makes introducing the seam a no-op. Compiles tests/upscale_seam_test.cpp against -gpu/vk/upscale_seam.h; no game, GPU, Vulkan or SDK. - -python -I -B tests/test_upscale_seam.py [--cxx clang++] -""" -import argparse -import subprocess -import tempfile -from pathlib import Path - -ROOT = Path(__file__).resolve().parents[1] - - -def main(): - p = argparse.ArgumentParser(description=__doc__) - p.add_argument("--cxx", default="clang++") - a = p.parse_args() - with tempfile.TemporaryDirectory(prefix="upscale-seam-") as tmp: - exe = Path(tmp) / "upscale_seam_test" - subprocess.run([a.cxx, "-std=c++20", "-O1", "-Wall", "-Wextra", "-Werror", - "-I" + str(ROOT / "gpu/vk"), - str(ROOT / "tests/upscale_seam_test.cpp"), "-o", str(exe)], check=True) - subprocess.run([str(exe)], check=True) - - -if __name__ == "__main__": - main() diff --git a/tests/test_upscaler_rows.cpp b/tests/test_upscaler_rows.cpp index fc4eb36e1..cac322fa1 100644 --- a/tests/test_upscaler_rows.cpp +++ b/tests/test_upscaler_rows.cpp @@ -53,23 +53,36 @@ int main() { // the Upscaler row only in a build with DLSS; the rows with nothing to choose CHECK("upscaler row shown", ur::upscaler_shown(true) && !ur::upscaler_shown(false)); - // (hookshot) FSR 3.1 and FSR 4 on the same row: stepping visits only what runs here, and wraps + // AMD FSR 3.1 on the same row, after DLAA (hookshot fork: and AMD FSR 4 after it): stepping visits only what runs here, + // and wraps { const unsigned all = ur::bit(GAME) | ur::dlss_bits(true) | ur::bit(ur::FSR3) | ur::bit(ur::FSR4); const unsigned fsr3 = ur::bit(GAME) | ur::bit(ur::FSR3); - CHECK("upscaler steps through all five", ur::step_upscaler(2, 1, all) == ur::FSR3 && + CHECK("FSR 3.1 after DLAA, FSR 4 after it", ur::FSR3 == 3 && ur::FSR4 == 4 && ur::kUpscalers == 5); + CHECK("upscaler steps through all five", ur::step_upscaler(DLAA, 1, all) == ur::FSR3 && + ur::step_upscaler(ur::FSR3, 1, all) == ur::FSR4 && ur::step_upscaler(ur::FSR4, 1, all) == GAME && - ur::step_upscaler(GAME, -1, all) == ur::FSR4); + ur::step_upscaler(GAME, -1, all) == ur::FSR4 && + ur::step_upscaler(ur::FSR3, -1, all) == DLAA); CHECK("upscaler without DLSS skips it", ur::step_upscaler(GAME, 1, fsr3) == ur::FSR3 && ur::step_upscaler(ur::FSR3, 1, fsr3) == GAME && ur::step_upscaler(GAME, -1, fsr3) == ur::FSR3); - CHECK("an upscaler that cannot run here steps as the game's own", ur::step_upscaler(ur::FSR4, 1, fsr3) == ur::FSR3); + CHECK("an upscaler that cannot run here steps as the game's own", ur::step_upscaler(DLSS, 1, fsr3) == ur::FSR3 && + ur::step_upscaler(ur::FSR4, 1, fsr3) == ur::FSR3 && + ur::step_upscaler(ur::FSR3, 1, ur::bit(GAME)) == GAME); + CHECK("the DLSS-only form is the mask's", ur::step_upscaler(DLAA, 1, true) == GAME && ur::step_upscaler(GAME, -1, true) == DLAA); CHECK("upscaler fixed only with nothing but the game's own", - ur::upscaler_fixed(ur::bit(GAME)) && !ur::upscaler_fixed(fsr3)); - CHECK("upscaler row shown with FSR alone", ur::upscaler_shown(false, true) && !ur::upscaler_shown(false, false)); + ur::upscaler_fixed(ur::bit(GAME)) && !ur::upscaler_fixed(fsr3) && !ur::upscaler_fixed(all)); + CHECK("upscaler row shown with FSR alone", ur::upscaler_shown(false, true) && !ur::upscaler_shown(false, false) && + ur::upscaler_shown(true, false)); CHECK("FSR's modes are DLSS's shares", ur::scales_by_mode(ur::FSR3) && ur::scales_by_mode(ur::FSR4) && - !ur::scales_by_mode(DLAA) && !ur::scales_by_mode(GAME)); - CHECK("the model row waits with FSR", ur::model_fixed(ur::FSR3, false) && ur::model_fixed(ur::FSR4, false)); + ur::scales_by_mode(DLSS) && !ur::scales_by_mode(DLAA) && !ur::scales_by_mode(GAME)); + CHECK("FSR steps as DLSS does", ur::step(ur::FSR3, 0, 1) == 3 && ur::step(ur::FSR3, 3, 1) == 5 && + ur::step(ur::FSR3, 6, 1) == 0 && ur::snap(ur::FSR3, 2) == 3 && + ur::step(ur::FSR4, 0, 1) == 3 && ur::snap(ur::FSR4, 2) == 3); + CHECK("the model row waits with FSR", ur::model_fixed(ur::FSR3, false) && ur::model_fixed(ur::FSR4, false) && + !ur::model_fixed(DLSS, false) && !ur::model_fixed(DLAA, false)); + CHECK("FSR has a Render resolution", !ur::resolution_fixed(ur::FSR3) && !ur::resolution_fixed(ur::FSR4)); } CHECK("upscaler fixed where DLSS cannot run", ur::upscaler_fixed(false) && !ur::upscaler_fixed(true)); CHECK("render resolution fixed with DLAA only", ur::resolution_fixed(DLAA) && !ur::resolution_fixed(DLSS) && diff --git a/tests/test_upscaler_rows.py b/tests/test_upscaler_rows.py index 163d11163..1f7bcb28f 100644 --- a/tests/test_upscaler_rows.py +++ b/tests/test_upscaler_rows.py @@ -1,6 +1,6 @@ -"""The Insert menu's scaling rows: the Upscaler (opts.dlss) and the Render resolution's steps for it (gpu/vk/upscaler_rows.h), -their order on the Graphics tab, options files from before still loading, and their help (why DLSS is not offered, the -Sharpness DLSS wants). No game or GPU required. +"""The Insert menu's scaling rows: the Upscaler (opts.dlss: the game's own, DLSS, DLAA, AMD FSR 3.1, and in this fork AMD FSR 4) +and the Render resolution's steps for it (gpu/vk/upscaler_rows.h), their order on the Graphics tab, options files from before +still loading, and their help (why DLSS is not offered, the Sharpness DLSS wants). No game or GPU required. python -I -B tests/test_upscaler_rows.py [--cxx g++] """ @@ -94,6 +94,15 @@ def main(): raise SystemExit("vk_dlss.cpp: the DLSS model row (and RX_VK_DLSS_PRESET over it) is not the preset asked for") if "dlss_why() != DLSS_OK" not in function(dlss, "int dlss_mode() {"): raise SystemExit("dlss_mode asks for DLSS where it cannot run (DLAA would hold the 3D at full scale for nothing)") + if "std::clamp(" in function(dlss, "int dlss_mode() {"): + raise SystemExit("dlss_mode clamps the row's value: FSR 3.1 (3) would run DLAA") + # FSR 3.1 is offered where it runs, and the row steps over what does not run here + if "fsr3::supported()" not in function(menu, "unsigned upscalers_available() {"): + raise SystemExit("upscalers_available does not ask vk_fsr3.cpp whether FSR 3.1 runs here") + if "ffx::upscale_supported()" not in function(menu, "unsigned upscalers_available() {"): + raise SystemExit("upscalers_available does not ask vk_ffx.cpp whether FSR 4 runs here") + if "upscalers_available()" not in function(menu, "void set_row(") or "upscalers_available()" not in function(menu, "bool row_fixed("): + raise SystemExit("the Upscaler row does not step over (or fix on) what runs here") with tempfile.TemporaryDirectory(prefix="upscaler-rows-") as tmp: exe = Path(tmp) / "upscaler-rows" subprocess.run([args.cxx, "-std=c++20", "-Wall", "-Wextra", "-Werror", diff --git a/tests/upscale_contract_test.cpp b/tests/upscale_contract_test.cpp deleted file mode 100644 index 4264f17ab..000000000 --- a/tests/upscale_contract_test.cpp +++ /dev/null @@ -1,134 +0,0 @@ -// (hookshot) gpu/vk/upscale_contract.h and upscale_format.h, driven without a game or a GPU: what the classifier -// takes each sampled binding to be, the cases where it has to refuse rather than guess, and what each Vulkan format -// means to it. tests/test_upscale_contract.py compiles and runs this; it needs the Vulkan headers and nothing else. -#include -#include -#include - -#include "upscale_format.h" - -using namespace mkwvk::upscale; - -static int failures = 0; - -static void check(bool ok, const char* what) { - if (!ok) { - std::fprintf(stderr, "FAIL: %s\n", what); - ++failures; - } -} - -int main() { - // A network that samples what a temporal upscaler needs: 1280x720 colour, motion and depth, with the previous - // output or history at the full size. - { - const Binding b[] = { - {Kind::Colour, 1280, 720}, - {Kind::TwoChannel, 1280, 720}, - {Kind::Depth, 1280, 720}, - {Kind::Colour, 1920, 1080}, - }; - Role roles[4]; - const Verdict v = classify(b, 4, roles); - check(v.inputs_complete, "a complete input set is complete"); - check(v.render_width == 1280 && v.render_height == 720, "the render extent is motion's"); - check(v.colour == 0 && v.motion == 1 && v.depth == 2 && v.full_size == 3, "each input is found"); - check(roles[0] == Role::Colour && roles[1] == Role::Motion && roles[2] == Role::Depth && - roles[3] == Role::FullSize, "the roles are reported per binding"); - } - // The order the caller happens to use must not change the answer. - { - const Binding b[] = { - {Kind::Colour, 1920, 1080}, - {Kind::Depth, 1280, 720}, - {Kind::Colour, 1280, 720}, - {Kind::TwoChannel, 1280, 720}, - }; - const Verdict v = classify(b, 4); - check(v.inputs_complete, "a reordered set is still complete"); - check(v.colour == 2 && v.motion == 3 && v.depth == 1 && v.full_size == 0, "order does not decide the roles"); - } - // Native resolution: nothing is larger than the render extent, so there is no full-size colour, which is fine. - { - const Binding b[] = {{Kind::Colour, 1920, 1080}, {Kind::TwoChannel, 1920, 1080}, {Kind::Depth, 1920, 1080}}; - const Verdict v = classify(b, 3); - check(v.inputs_complete, "no full-size colour is still a complete set"); - check(v.full_size == kNone, "and no full-size colour is reported"); - } - // Each refusal below would otherwise become a wrong guess handed to an upscaler. - { - const Binding no_motion[] = {{Kind::Colour, 1280, 720}, {Kind::Depth, 1280, 720}}; - check(!classify(no_motion, 2).inputs_complete, "no motion is refused"); - const Binding no_depth[] = {{Kind::Colour, 1280, 720}, {Kind::TwoChannel, 1280, 720}}; - check(!classify(no_depth, 2).inputs_complete, "no depth is refused"); - const Binding no_colour[] = {{Kind::TwoChannel, 1280, 720}, {Kind::Depth, 1280, 720}}; - check(!classify(no_colour, 2).inputs_complete, "no colour at the render extent is refused"); - // Motion and depth at different sizes: one of them is not what it was taken for. - const Binding mismatch[] = { - {Kind::Colour, 1280, 720}, {Kind::TwoChannel, 1280, 720}, {Kind::Depth, 1920, 1080}}; - const Verdict v = classify(mismatch, 3); - check(!v.inputs_complete, "motion and depth at different extents are refused"); - check(v.motion == kNone && v.depth == kNone, "and nothing is reported as found"); - // Only a larger colour: there is something full-size, but not the input it would upscale. - const Binding full_size_only[] = { - {Kind::Colour, 1920, 1080}, {Kind::TwoChannel, 1280, 720}, {Kind::Depth, 1280, 720}}; - check(!classify(full_size_only, 3).inputs_complete, "a full-size colour without an input colour is refused"); - } - // A zero extent is a binding the renderer could not resolve; it must not become the render extent. - { - const Binding b[] = {{Kind::Colour, 1280, 720}, - {Kind::TwoChannel, 0, 0}, - {Kind::TwoChannel, 1280, 720}, - {Kind::Depth, 1280, 720}}; - const Verdict v = classify(b, 4); - check(v.inputs_complete && v.motion == 2, "an unresolved binding is skipped, not taken for motion"); - } - // Nothing at all, and a null list: both are the stand-in's case, not a crash. - check(!classify(nullptr, 0).inputs_complete, "a null list is refused"); - { - const Binding b[] = {{Kind::Other, 64, 64}}; - Role roles[1]; - check(!classify(b, 1, roles).inputs_complete, "a set with nothing useful is refused"); - check(roles[0] == Role::None, "and its binding has no role"); - } - // Roles are cleared even when the set is refused, so a caller cannot print last call's answer. - { - const Binding b[] = {{Kind::Colour, 1280, 720}, {Kind::Depth, 1280, 720}}; - Role roles[2] = {Role::Motion, Role::FullSize}; - classify(b, 2, roles); - check(roles[0] == Role::None && roles[1] == Role::None, "a refusal leaves no roles set"); - } - check(role_name(Role::Motion)[0] == 'm' && role_name(Role::None)[0] == '-', "role_name names them"); - - // The format mapping, which is the half most likely to be wrong: a format wrongly called motion is handed to an - // upscaler as motion. - { - check(kind_of(VK_FORMAT_D32_SFLOAT, VK_IMAGE_ASPECT_DEPTH_BIT) == Kind::Depth, "D32 depth is depth"); - check(kind_of(VK_FORMAT_D24_UNORM_S8_UINT, VK_IMAGE_ASPECT_DEPTH_BIT) == Kind::Depth, - "a packed depth-stencil is depth"); - // The aspect decides, so a depth image the renderer made with a two-channel format is still depth and never - // becomes a motion candidate. - check(kind_of(VK_FORMAT_R16G16_SFLOAT, VK_IMAGE_ASPECT_DEPTH_BIT) == Kind::Depth, "the aspect wins"); - check(kind_of(VK_FORMAT_R16G16_SFLOAT, VK_IMAGE_ASPECT_COLOR_BIT) == Kind::TwoChannel, "R16G16F is motion"); - check(kind_of(VK_FORMAT_R16G16_SNORM, VK_IMAGE_ASPECT_COLOR_BIT) == Kind::TwoChannel, "R16G16 snorm is motion"); - check(kind_of(VK_FORMAT_R32G32_SFLOAT, VK_IMAGE_ASPECT_COLOR_BIT) == Kind::TwoChannel, "R32G32F is motion"); - // OoT's own upscale output format. - check(kind_of(VK_FORMAT_B10G11R11_UFLOAT_PACK32, VK_IMAGE_ASPECT_COLOR_BIT) == Kind::Colour, - "B10G11R11 is colour"); - check(kind_of(VK_FORMAT_R16G16B16A16_SFLOAT, VK_IMAGE_ASPECT_COLOR_BIT) == Kind::Colour, "RGBA16F is colour"); - check(kind_of(VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_ASPECT_COLOR_BIT) == Kind::Colour, "RGBA8 is colour"); - // One channel is not motion, however float it is, and an unknown format is a refusal rather than a default. - check(kind_of(VK_FORMAT_R32_SFLOAT, VK_IMAGE_ASPECT_COLOR_BIT) == Kind::Other, "one channel is not motion"); - check(kind_of(VK_FORMAT_R8_UNORM, VK_IMAGE_ASPECT_COLOR_BIT) == Kind::Other, "R8 is nothing useful"); - check(kind_of(VK_FORMAT_UNDEFINED, 0) == Kind::Other, "an undefined format is nothing useful"); - check(kind_of(VK_FORMAT_BC7_UNORM_BLOCK, VK_IMAGE_ASPECT_COLOR_BIT) == Kind::Other, - "a compressed texture is not an upscaler input"); - } - - if (failures != 0) { - std::fprintf(stderr, "%d check(s) failed\n", failures); - return 1; - } - std::printf("upscale contract: all checks passed\n"); - return 0; -} diff --git a/tests/upscale_seam_test.cpp b/tests/upscale_seam_test.cpp deleted file mode 100644 index 57b7ab771..000000000 --- a/tests/upscale_seam_test.cpp +++ /dev/null @@ -1,128 +0,0 @@ -// (hookshot) gpu/vk/upscale_seam.h without a game, a GPU or Vulkan: which backend takes a recognized upscale -// dispatch, and every reason a temporal backend is refused one. Each refusal here is a wrong picture rather than a -// missing feature, which is why they are tested one at a time. tests/test_upscale_seam.py compiles and runs this. -#include - -#include "upscale_seam.h" - -using namespace mkwvk::upscale; - -static int failures = 0; - -static void check(bool ok, const char* what) { - if (!ok) { - std::fprintf(stderr, "FAIL: %s\n", what); - ++failures; - } -} - -/// A dispatch whose inputs are complete at 1280x720 and whose output is a writable 1920x1080. -static Request good() { - static const Binding b[] = {{Kind::Colour, 1280, 720}, - {Kind::TwoChannel, 1280, 720}, - {Kind::Depth, 1280, 720}, - {Kind::Colour, 1920, 1080}}; - Request r; - r.program_key = 0xfd029a317a9a4b94ull; - r.inputs = classify(b, 4); - r.colour_binding = r.inputs.colour; - r.output_width = 1920, r.output_height = 1080; - r.output_writable = true; - return r; -} - -int main() { - check(good().inputs.inputs_complete, "the fixture's inputs are complete"); - check(temporal_possible(good()), "a resolved dispatch with complete inputs allows a temporal backend"); - check(temporal_refusal(good()) == nullptr, "and gives no refusal reason"); - - // Native resolution is anti-aliasing, not an error: equal extents are allowed. - { - Request r = good(); - r.output_width = 1280, r.output_height = 720; - check(temporal_possible(r), "an output at the render extent is allowed"); - } - // Each refusal, one at a time, from the same otherwise-good dispatch. - { - Request r = good(); - r.inputs = Verdict{}; - check(!temporal_possible(r), "incomplete inputs are refused"); - check(temporal_refusal(r) != nullptr, "and say why"); - } - { - // The renderer hands over a different binding than the one the contract called the colour. Before this seam - // the renderer simply used the first binding, so this is the case that has to be caught rather than assumed. - Request r = good(); - r.colour_binding = r.inputs.colour + 1; - check(!temporal_possible(r), "a bound colour that is not the contract's colour is refused"); - Request unbound = good(); - unbound.colour_binding = kNone; - check(!temporal_possible(unbound), "no bound colour at all is refused"); - } - { - Request r = good(); - r.output_writable = false; - check(!temporal_possible(r), "an output the renderer cannot write is refused"); - } - { - Request r = good(); - r.output_width = 0; - check(!temporal_possible(r), "an unresolved output width is refused"); - Request h = good(); - h.output_height = 0; - check(!temporal_possible(h), "an unresolved output height is refused"); - } - { - // An upscaler cannot resolve into something smaller than what it was handed. - Request r = good(); - r.output_width = 640, r.output_height = 360; - check(!temporal_possible(r), "an output below the render extent is refused"); - Request one = good(); - one.output_height = 719; - check(!temporal_possible(one), "one axis below the render extent is enough to refuse"); - } - - // Backend choice. The stand-in is a spatial resolve: it must keep running wherever the key list asks for it, - // including where the contract is not met, because that is what it did before the seam existed. - { - Availability a; - a.push_descriptor = true, a.stand_in_wanted = true; - check(choose(a, good()) == Backend::StandIn, "the stand-in takes a dispatch its key list asks for"); - Request bare; - check(choose(a, bare) == Backend::StandIn, "the stand-in does not need the input contract"); - a.stand_in_wanted = false; - check(choose(a, good()) == Backend::None, "nothing takes a dispatch no backend was asked for"); - a.stand_in_wanted = true, a.push_descriptor = false; - check(choose(a, good()) == Backend::None, "without push descriptors nothing can be recorded"); - } - - // The vendor backends. Each one is a wrong picture rather than a worse one when the inputs are short, so - // neither may be chosen where the contract is not met -- that is the difference between them and the stand-in. - { - Availability a; - a.push_descriptor = true; - a.fsr3 = true; - check(choose(a, good()) == Backend::Fsr3, "FSR takes a dispatch whose inputs are complete"); - Request bare; - check(choose(a, bare) == Backend::None, "FSR is not given a dispatch without the inputs"); - a.stand_in_wanted = true; - check(choose(a, bare) == Backend::StandIn, "the stand-in still takes what FSR cannot"); - check(choose(a, good()) == Backend::Fsr3, "a vendor backend is preferred over the stand-in"); - a.dlss = true; - check(choose(a, good()) == Backend::Dlss, "DLSS is preferred where the hardware has it"); - a.fsr3 = false; - check(choose(a, good()) == Backend::Dlss, "DLSS does not need FSR to be available"); - a.push_descriptor = false; - check(choose(a, good()) == Backend::None, "without push descriptors no backend can be recorded"); - } - check(backend_name(Backend::Fsr3)[0] == 'F' && backend_name(Backend::Dlss)[0] == 'D', - "the vendor backends are named"); - check(backend_name(Backend::StandIn)[0] == 's' && backend_name(Backend::None)[0] == 'n', "backends are named"); - - if (failures != 0) { - std::fprintf(stderr, "%d check(s) failed\n", failures); - return 1; - } - std::printf("upscale seam: all checks passed\n"); - return 0; -} From 0dc657b538e8c03cc35e3cbf006c3770fdb75add Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 10 Nov 2026 01:11:22 +0000 Subject: [PATCH 117/119] chore(release): 2.0.17 [skip ci] [skip release] ## [2.0.17](https://github.com/notquiteog/Hookshot/compare/v2.0.16...v2.0.17) (2026-11-10) ### Bug Fixes * **vk:** FSR 3.1 and FSR 4 take the scene's real camera, depth and colour encoding ([#1386](https://github.com/notquiteog/Hookshot/issues/1386)'s inputs) ([366c268](https://github.com/notquiteog/Hookshot/commit/366c2682c5dc48d511915a15e6b7ceb45431efca)) * **vk:** FSR 3.1 frame interpolation makes 2x sets only ([c719d8c](https://github.com/notquiteog/Hookshot/commit/c719d8c6d8b6010383ea7cb49d77388aeba8982f)) --- changelog.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/changelog.txt b/changelog.txt index b48057a5a..f258891da 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,10 @@ --------------------------------------------------------------------------------------------------- +Version: 2.0.17 +Date: 10. 11. 2026 + Bugfixes: + - Vk: FSR 3.1 and FSR 4 take the scene's real camera, depth and colour encoding (#1386's inputs). + - Vk: FSR 3.1 frame interpolation makes 2x sets only. +--------------------------------------------------------------------------------------------------- Version: 2.0.16 Date: 10. 11. 2026 Features: From ea6141a79469c840fc0bd2632f602021f8989761 Mon Sep 17 00:00:00 2001 From: notquiteog <104785131+notquiteog@users.noreply.github.com> Date: Mon, 9 Nov 2026 19:15:39 -0600 Subject: [PATCH 118/119] fix(update): the default repository outside the Windows-only block host/hos_update.c defined its fallback HOOKSHOT_REPOSITORY inside #ifdef _WIN32, so a Linux compile without -DHOOKSHOT_REPOSITORY failed (nx2/build.py always passes it, so released builds were not affected). Compiles on both platforms with and without the define. Co-Authored-By: Claude Opus 5.5 --- host/hos_update.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/host/hos_update.c b/host/hos_update.c index 84365597f..bac97219a 100644 --- a/host/hos_update.c +++ b/host/hos_update.c @@ -18,6 +18,10 @@ static int safe_tag(const char *s) { } #endif +#ifndef HOOKSHOT_REPOSITORY +#define HOOKSHOT_REPOSITORY "NotRexed/Hookshot" +#endif + #ifdef _WIN32 #include "hos_paths.h" #include @@ -29,9 +33,6 @@ static int safe_tag(const char *s) { /* (hookshot) the repository releases come from, owner/name: nx2/version.py repository(), given by nx2/build.py. A fork's release names the fork, so its players are offered the fork's updates */ -#ifndef HOOKSHOT_REPOSITORY -#define HOOKSHOT_REPOSITORY "NotRexed/Hookshot" -#endif #define HOOKSHOT_WIDEN2(s) L##s #define HOOKSHOT_WIDEN(s) HOOKSHOT_WIDEN2(s) #define UPDATE_HOST L"api.github.com" From 3f920874174b085227ab3322c200d97025a4395f Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 10 Nov 2026 01:16:00 +0000 Subject: [PATCH 119/119] chore(release): 2.0.18 [skip ci] [skip release] ## [2.0.18](https://github.com/notquiteog/Hookshot/compare/v2.0.17...v2.0.18) (2026-11-10) ### Bug Fixes * **update:** the default repository outside the Windows-only block ([ea6141a](https://github.com/notquiteog/Hookshot/commit/ea6141a79469c840fc0bd2632f602021f8989761)), closes [#ifdef](https://github.com/notquiteog/Hookshot/issues/ifdef) --- changelog.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/changelog.txt b/changelog.txt index f258891da..dc604775c 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,9 @@ --------------------------------------------------------------------------------------------------- +Version: 2.0.18 +Date: 10. 11. 2026 + Bugfixes: + - Update: The default repository outside the Windows-only block. +--------------------------------------------------------------------------------------------------- Version: 2.0.17 Date: 10. 11. 2026 Bugfixes: